3 lines
622 KiB
JavaScript
3 lines
622 KiB
JavaScript
/*! For license information please see mailjet.web.js.LICENSE.txt */
|
||
define((function(){return function(){var e={76:function(e,t,n){"use strict";function r(e){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},r(e)}var o=this&&this.__assign||function(){return o=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var o in t=arguments[n])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e},o.apply(this,arguments)},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var s=n(6),a=i(n(874)),u=i(n(771)),c=i(n(147)),l=function(){function e(e){if(!(0,s.isPureObject)(e))throw new Error('Argument "params" must be object');this.init(this.cloneParams(e))}return e.prototype.getPackageVersion=function(){return this.version},e.prototype.getAPIKey=function(){return this.apiKey},e.prototype.getAPISecret=function(){return this.apiSecret},e.prototype.getAPIToken=function(){return this.apiToken},e.prototype.getConfig=function(){return o({},this.config)},e.prototype.getOptions=function(){return o({},this.options)},e.prototype.get=function(e,t){return new u.default(this,a.default.Get,e,t)},e.prototype.post=function(e,t){return new u.default(this,a.default.Post,e,t)},e.prototype.put=function(e,t){return new u.default(this,a.default.Put,e,t)},e.prototype.delete=function(e,t){return new u.default(this,a.default.Delete,e,t)},e.prototype.init=function(t){if(!(0,s.isPureObject)(t))throw new Error('Argument "params" must be object');var n=t.apiToken,r=t.apiKey,o=t.apiSecret,i=t.options,a=t.config;return this.version=e.packageJSON.version,this.setConfig(null!=a?a:null),this.setOptions(null!=i?i:null),"apiToken"in t?this.tokenConnectStrategy(n):this.basicConnectStrategy(r,o)},e.prototype.cloneParams=function(e){if(!(0,s.isPureObject)(e))throw new Error('Argument "params" must be object');var t=o({},e);return e.config&&(t.config=o({},e.config)),e.options&&(t.options=o({},e.options),t.options.proxy&&(t.options.proxy=o({},t.options.proxy)),t.options.headers&&(t.options.headers=o({},t.options.headers))),t},e.prototype.setConfig=function(t){if("object"!==r(t))throw new Error('Argument "customConfig" must be object or null');var n=o({},e.config);return null!==t&&((0,s.setValueIfNotNil)(n,"host",t.host),(0,s.setValueIfNotNil)(n,"output",t.output),(0,s.setValueIfNotNil)(n,"version",t.version)),this.config=n,this},e.prototype.setOptions=function(e){if("object"!==r(e))throw new Error('Argument "options" must be object or null');return this.options=null!=e?e:{},this},e.prototype.tokenConnectStrategy=function(e){if(!e)throw new Error("Mailjet API_TOKEN is required");return this.apiToken=e,this},e.prototype.basicConnectStrategy=function(e,t){if(!e)throw new Error("Mailjet API_KEY is required");if(!t)throw new Error("Mailjet API_SECRET is required");return this.apiKey=e,this.apiSecret=t,this},e.apiConnect=function(t,n,r){return new e(o({apiKey:t,apiSecret:n},r))},e.smsConnect=function(t,n){return new e(o({apiToken:t},n))},e.config=Object.freeze({host:"api.mailjet.com",version:"v3",output:"json"}),e.packageJSON=Object.freeze(o({},c.default)),e}();t.default=l},321:function(e,t,n){"use strict";var r,o=this&&this.__extends||(r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])},r(e,t)},function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}),i=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),s=this&&this.__exportStar||function(e,t){for(var n in e)"default"===n||Object.prototype.hasOwnProperty.call(t,n)||i(t,e,n)},a=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.HttpMethods=t.Request=t.Client=void 0;var u=a(n(874));t.HttpMethods=u.default;var c=a(n(771));t.Request=c.default;var l=a(n(76));t.Client=l.default;var f=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return o(t,e),t.Request=c.default,t.HttpMethods=u.default,t.Client=l.default,t}(l.default);s(n(310),t),t.default=f},874:function(e,t){"use strict";var n;Object.defineProperty(t,"__esModule",{value:!0}),function(e){e.Get="get",e.Post="post",e.Put="put",e.Delete="delete"}(n||(n={})),t.default=n},771:function(e,t,n){"use strict";function r(e){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},r(e)}var o=this&&this.__assign||function(){return o=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var o in t=arguments[n])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e},o.apply(this,arguments)},i=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),s=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&i(t,e,n);return s(t,e),t},u=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(o,i){function s(e){try{u(r.next(e))}catch(e){i(e)}}function a(e){try{u(r.throw(e))}catch(e){i(e)}}function u(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(s,a)}u((r=r.apply(e,t||[])).next())}))},c=this&&this.__generator||function(e,t){var n,r,o,i,s={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function a(i){return function(a){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;s;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return s.label++,{value:i[1],done:!1};case 5:s.label++,r=i[1],i=[0];continue;case 7:i=s.ops.pop(),s.trys.pop();continue;default:if(!(o=s.trys,(o=o.length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){s=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]<o[3])){s.label=i[1];break}if(6===i[0]&&s.label<o[1]){s.label=o[1],o=i;break}if(o&&s.label<o[2]){s.label=o[2],s.ops.push(i);break}o[2]&&s.ops.pop(),s.trys.pop();continue}i=t.call(e,s)}catch(e){i=[6,e],r=0}finally{n=o=0}if(5&i[0])throw i[1];return{value:i[0]?i[1]:void 0,done:!0}}([i,a])}}},l=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var f=l(n(78)),p=l(n(400)),d=a(n(218)),h=n(6),m=l(n(874)),g=l(n(76)),y=(0,p.default)({storeAsString:!0}),b=function(){function e(e,t,n,r){if(!(e instanceof g.default))throw new Error('Argument "client" must be instance of Client');if(!Object.values(m.default).includes(t))throw new Error('Argument "method" must be one of supported methods: get, post, put, delete');if("string"!=typeof n)throw new Error('Argument "resource" must be string');this.client=e,this.method=t,this.url=n.toLowerCase(),this.resource=n.toLowerCase(),this.subPath=this.buildSubPath(),this.actionPath=null,this.config=o({},r)}return e.prototype.getUserAgent=function(){return"mailjet-api-v3-nodejs/".concat(this.client.getPackageVersion())},e.prototype.getCredentials=function(){return{apiToken:this.client.getAPIToken(),apiKey:this.client.getAPIKey(),apiSecret:this.client.getAPISecret()}},e.prototype.getContentType=function(e){if("string"!=typeof e)throw new Error('Argument "url" must be string');return e.indexOf("text:plain")>-1?"text/plain":"application/json"},e.prototype.getRequestBody=function(e){return[m.default.Put,m.default.Post,m.default.Delete].includes(this.method)?e:void 0},e.prototype.buildFullUrl=function(){var t,n,r=this.client.getConfig(),o=null!==(t=this.config.host)&&void 0!==t?t:r.host,i=null!==(n=this.config.version)&&void 0!==n?n:r.version;return(0,f.default)(e.protocol,o,i,this.subPath,this.url)},e.prototype.buildSubPath=function(){if(this.actionPath){var e="contactslist"===this.resource&&"csvdata/text:plain"===this.actionPath,t="batchjob"===this.resource&&"csverror/text:csv"===this.actionPath;return e||t?"DATA":this.subPath}var n="send"===this.resource,r=this.resource.indexOf("sms")>-1;return n||r?"":"REST"},e.prototype.makeRequest=function(t,n,r){var i,s={url:t,params:r,data:this.getRequestBody(n),method:this.method,responseType:"json",headers:{"User-Agent":this.getUserAgent(),"Content-Type":this.getContentType(t)},transformResponse:function(t){var n="string"==typeof t,r="json"===this.responseType;return t&&n&&r?e.parseToJSONb(t):t}};e.isBrowser()&&(s.headers["X-User-Agent"]=s.headers["User-Agent"]);var a=this.getCredentials();a.apiToken?s.headers.Authorization="Bearer ".concat(a.apiToken):s.auth={username:a.apiKey,password:a.apiSecret};var u=this.client.getConfig(),c=this.client.getOptions();c.timeout&&(s.timeout=c.timeout),c.proxy&&(s.proxy=c.proxy),c.headers&&Object.keys(c.headers).length>0&&(s.headers=o(o({},s.headers),c.headers));var l=null!==(i=this.config.output)&&void 0!==i?i:u.output;return l&&(s.responseType=l),c.maxBodyLength&&(s.maxBodyLength=c.maxBodyLength),c.maxContentLength&&(s.maxContentLength=c.maxContentLength),(0,d.default)(s)},e.prototype.setBaseURL=function(e){return this.url=e.toLowerCase(),this},e.prototype.id=function(e){if(!["string","number"].includes(r(e)))throw new Error('Argument "value" must be string or number');return this.url=(0,f.default)(this.url,e.toString()),this},e.prototype.action=function(e){if("string"!=typeof e)throw new Error('Argument "name" must be string');switch(this.actionPath=e.toLowerCase(),this.actionPath){case"csvdata":this.actionPath="csvdata/text:plain";break;case"csverror":this.actionPath="csverror/text:csv"}return this.url=(0,f.default)(this.url,this.actionPath),this.subPath=this.buildSubPath(),this},e.prototype.request=function(e,t,n){var r,o,i,s,a;return void 0===e&&(e={}),void 0===t&&(t={}),void 0===n&&(n=!0),u(this,void 0,void 0,(function(){var u,l,f,p,m,g,y,b,v,w;return c(this,(function(c){switch(c.label){case 0:if(u=this.buildFullUrl(),this.setBaseURL(this.resource),!n)return[2,{body:b=this.getRequestBody(e),params:t,url:u}];c.label=1;case 1:return c.trys.push([1,3,,4]),[4,this.makeRequest(u,e,t)];case 2:return[2,{response:l=c.sent(),body:l.data}];case 3:if((f=c.sent())instanceof d.AxiosError)throw(p=new Error).code=f.code,p.config=f.config,f.response?(m=f.response,g=m.status,y=m.statusText,b=m.data,p.response=f.response,p.statusCode=g,p.statusText=y,v=null!==(r=null==b?void 0:b.ErrorMessage)&&void 0!==r?r:f.message,p.originalMessage=v,p.message='Unsuccessful: Status Code: "'.concat(p.statusCode,'" Message: "').concat(v,'"'),b&&("string"==typeof(w=null===(a=null===(s=null===(i=null===(o=b.Messages)||void 0===o?void 0:o[0])||void 0===i?void 0:i.Errors)||void 0===s?void 0:s[0])||void 0===a?void 0:a.ErrorMessage)&&(p.message+=";\n".concat(w)),(0,h.setValueIfNotNil)(p,"ErrorMessage",b.ErrorMessage),(0,h.setValueIfNotNil)(p,"ErrorCode",b.ErrorCode),(0,h.setValueIfNotNil)(p,"ErrorIdentifier",b.ErrorIdentifier),(0,h.setValueIfNotNil)(p,"ErrorRelatedTo",b.ErrorRelatedTo))):(p.response=null,p.statusCode=null,p.statusText=null,p.originalMessage=f.message,p.message='Unsuccessful: Error Code: "'.concat(p.code,'" Message: "').concat(f.message,'"')),p;throw f;case 4:return[2]}}))}))},e.parseToJSONb=function(e){if("string"!=typeof e)throw new Error('Argument "text" must be string');var t;try{t=y.parse(e)}catch(e){t={}}return t},e.isBrowser=function(){return"object"===("undefined"==typeof window?"undefined":r(window))},e.protocol="https://",e}();t.default=b},917:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.SentCampaign=t.DraftCampaign=void 0,function(e){!function(e){e.Tool2="tool2",e.HTML2="html2",e.MJML="mjml"}(e.EditMode||(e.EditMode={})),function(e){e[e.AXCanceled=-3]="AXCanceled",e[e.Deleted=-2]="Deleted",e[e.Archived=-1]="Archived",e[e.Draft=0]="Draft",e[e.Programmed=1]="Programmed",e[e.Sent=2]="Sent",e[e.AXTested=3]="AXTested",e[e.AXSelected=4]="AXSelected"}(e.CampaignDraftStatus||(e.CampaignDraftStatus={})),function(e){e.AXCancelled="AXCancelled",e.Deleted="Deleted",e.Archived="Archived",e.Draft="Draft",e.Programmed="Programmed",e.Sent="Sent",e.AXTested="AXTested",e.AXSelected="AXSelected"}(e.CampaignDraftSendingStatus||(e.CampaignDraftSendingStatus={}))}(t.DraftCampaign||(t.DraftCampaign={})),function(e){!function(e){e[e.Transactional=1]="Transactional",e[e.Marketing=2]="Marketing",e[e.Unknown=3]="Unknown"}(e.CampaignType||(e.CampaignType={}))}(t.SentCampaign||(t.SentCampaign={}))},566:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Common=void 0,function(e){!function(e){e.Day="Day",e.Week="Week",e.Month="Month",e.Year="Year"}(e.Period||(e.Period={}))}(t.Common||(t.Common={}))},235:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.ContactProperties=t.BulkContactManagement=void 0,function(e){!function(e){e.AddForce="addforce",e.AddNoForce="addnoforce",e.Remove="remove",e.UnSub="unsub"}(e.ManageContactsAction||(e.ManageContactsAction={})),function(e){e.AddForce="addforce",e.AddNoForce="addnoforce",e.UnSub="unsub",e.DuplicateOverride="duplicate-override",e.DuplicateNoOverride="duplicate-no-override"}(e.ImportListAction||(e.ImportListAction={})),function(e){e.AddForce="addforce",e.AddNoForce="addnoforce",e.Remove="remove",e.UnSub="unsub",e.ExcludeMarketing="excludemarketing",e.IncludeMarketing="includemarketing"}(e.ImportCSVMethod||(e.ImportCSVMethod={})),function(e){e.Upload="Upload",e.Completed="Completed",e.Abort="Abort"}(e.CSVImportStatus||(e.CSVImportStatus={})),function(e){e.Completed="Completed",e.InProgress="In Progress",e.Error="Error"}(e.JobStatus||(e.JobStatus={}))}(t.BulkContactManagement||(t.BulkContactManagement={})),function(e){!function(e){e.Str="str",e.Int="int",e.Float="float",e.Bool="bool",e.DateTime="datetime"}(e.DataType||(e.DataType={})),function(e){e.Static="static",e.Historic="historic"}(e.NameSpace||(e.NameSpace={}))}(t.ContactProperties||(t.ContactProperties={}))},354:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Message=void 0,function(e){!function(e){e[e.UserUnknown=1]="UserUnknown",e[e.MailboxInactive=2]="MailboxInactive",e[e.QuotaExceeded=3]="QuotaExceeded",e[e.InvalidDomain=4]="InvalidDomain",e[e.NoMailHost=5]="NoMailHost",e[e.RelayOrAccessDenied=6]="RelayOrAccessDenied",e[e.SenderBlocked=7]="SenderBlocked",e[e.ContentBlocked=8]="ContentBlocked",e[e.PolicyIssue=9]="PolicyIssue",e[e.SystemIssue=10]="SystemIssue",e[e.ProtocolIssue=11]="ProtocolIssue",e[e.ConnectionIssue=12]="ConnectionIssue",e[e.GreyListed=13]="GreyListed",e[e.PreBlocked=14]="PreBlocked",e[e.DuplicateInCampaign=15]="DuplicateInCampaign",e[e.SpamPreBlocked=16]="SpamPreBlocked",e[e.BadOrEmptyTemplate=17]="BadOrEmptyTemplate",e[e.ErrorInTemplateLanguage=18]="ErrorInTemplateLanguage",e[e.TypoFix=19]="TypoFix",e[e.BlackListed=20]="BlackListed",e[e.SpamReporter=21]="SpamReporter"}(e.MessageState||(e.MessageState={})),function(e){e[e.Transactional=1]="Transactional",e[e.Marketing=2]="Marketing",e[e.Unknown=3]="Unknown"}(e.FromType||(e.FromType={})),function(e){e[e.Processed=0]="Processed",e[e.Queued=1]="Queued",e[e.Sent=2]="Sent",e[e.Opened=3]="Opened",e[e.Clicked=4]="Clicked",e[e.Bounce=5]="Bounce",e[e.Spam=6]="Spam",e[e.Unsub=7]="Unsub",e[e.Blocked=8]="Blocked",e[e.SoftBounce=9]="SoftBounce",e[e.HardBounce=10]="HardBounce",e[e.Deferred=11]="Deferred"}(e.MessageStatus||(e.MessageStatus={})),function(e){e.Unknown="unknown",e.Queued="queued",e.Sent="sent",e.Opened="opened",e.Clicked="clicked",e.Bounce="bounce",e.Spam="spam",e.Unsub="unsub",e.Blocked="blocked",e.HardBounced="hardbounced",e.SoftBounced="softbounced",e.Deferred="deferred"}(e.CurrentMessageStatus||(e.CurrentMessageStatus={})),function(e){e.Sent="sent",e.Opened="opened",e.Clicked="clicked",e.Bounced="bounced",e.Blocked="blocked",e.Unsub="unsub",e.Spam="spam"}(e.EventType||(e.EventType={}))}(t.Message||(t.Message={}))},635:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Segmentation=void 0,function(e){!function(e){e.Used="used",e.UnUsed="unused",e.Deleted="deleted"}(e.SegmentStatus||(e.SegmentStatus={}))}(t.Segmentation||(t.Segmentation={}))},410:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.SendEmailV3_1=void 0,function(e){!function(e){e.AccountDefault="account_default",e.Disabled="disabled",e.Enabled="enabled"}(e.TrackOpens||(e.TrackOpens={})),function(e){e.AccountDefault="account_default",e.Disabled="disabled",e.Enabled="enabled"}(e.TrackClicks||(e.TrackClicks={})),function(e){e.Success="success",e.Error="error"}(e.ResponseStatus||(e.ResponseStatus={}))}(t.SendEmailV3_1||(t.SendEmailV3_1={}))},256:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.DNS=t.Sender=void 0,function(e){!function(e){e.Transactional="transactional",e.Bulk="bulk",e.Unknown="unknown"}(e.EmailType||(e.EmailType={})),function(e){e.Inactive="Inactive",e.Active="Active",e.Deleted="Deleted"}(e.SenderStatus||(e.SenderStatus={}))}(t.Sender||(t.Sender={})),function(e){!function(e){e.OK="OK",e.Error="Error",e.NotChecked="Not checked"}(e.DKIMConfigurationCheckStatus||(e.DKIMConfigurationCheckStatus={})),function(e){e.OK="OK",e.Error="Error"}(e.DKIMConfigurationStatus||(e.DKIMConfigurationStatus={})),function(e){e.OK="OK",e.Error="Error",e.NotChecked="Not checked",e.NotFound="Not found"}(e.SPFConfigurationCheckStatus||(e.SPFConfigurationCheckStatus={})),function(e){e.OK="OK",e.Error="Error"}(e.SPFConfigurationStatus||(e.SPFConfigurationStatus={}))}(t.DNS||(t.DNS={}))},295:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.APIKeyConfiguration=void 0,function(e){!function(e){e.Normal="Normal",e.SoftLock="Softlock",e.HardLock="Hardlock"}(e.RunLevel||(e.RunLevel={}))}(t.APIKeyConfiguration||(t.APIKeyConfiguration={}))},83:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Statistic=void 0,function(e){!function(e){e.SentCampaign="Campaign",e.ABTesting="AX",e.Draft="NL"}(e.CampaignOverviewIDType||(e.CampaignOverviewIDType={})),function(e){e.Tool="tool",e.HTML="html",e.Tool2="tool2",e.HTML2="html2",e.MJML="mjml"}(e.CampaignOverviewEditMode||(e.CampaignOverviewEditMode={})),function(e){e.Full="full",e.Unknown="unknown"}(e.CampaignOverviewEditType||(e.CampaignOverviewEditType={})),function(e){e.Campaign="Campaign",e.APIKey="APIKey",e.List="List",e.Sender="Sender"}(e.CounterSource||(e.CounterSource={})),function(e){e.Highest="Highest",e.Hour="Hour",e.Day="Day",e.Lifetime="Lifetime"}(e.CounterResolution||(e.CounterResolution={})),function(e){e.Message="Message",e.Event="Event"}(e.CounterTiming||(e.CounterTiming={})),function(e){e.Open="open",e.Click="click"}(e.EmailEvent||(e.EmailEvent={}))}(t.Statistic||(t.Statistic={}))},98:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Template=void 0,function(e){!function(e){e.Full="full",e.Basic="basic",e.NewsLetter="newsletter",e.ECommerce="e-commerce",e.Events="events",e.Travel="travel",e.Sports="sports",e.Welcome="welcome",e.ContactPropertyUpdate="contact-property-update",e.Support="support",e.Invoice="invoice",e.Anniversary="anniversary",e.Account="account",e.Activation="activation"}(e.Categories||(e.Categories={})),function(e){e.ContainsAny="containsany",e.ContainsAll="containsall",e.IsSubSet="issubset"}(e.CategoriesSelectionMethod||(e.CategoriesSelectionMethod={})),function(e){e[e.DragAndDropBuilder=1]="DragAndDropBuilder",e[e.HTMLBuilder=2]="HTMLBuilder",e[e.SavedSectionBuilder=3]="SavedSectionBuilder",e[e.MJMLBuilder=4]="MJMLBuilder"}(e.EditMode||(e.EditMode={})),function(e){e.ApiKey="apikey",e.User="user",e.Global="global"}(e.OwnerType||(e.OwnerType={})),function(e){e.Marketing="marketing",e.Transactional="transactional",e.Automation="automation"}(e.Purposes||(e.Purposes={})),function(e){e.ContainsAny="containsany",e.ContainsAll="containsall",e.IsSubSet="issubset"}(e.PurposesSelectionMethod||(e.PurposesSelectionMethod={}))}(t.Template||(t.Template={}))},174:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Webhook=void 0,function(e){!function(e){e.Open="open",e.Click="click",e.Bounce="bounce",e.Spam="spam",e.Blocked="blocked",e.UnSub="unsub",e.Sent="sent"}(e.EventType||(e.EventType={})),function(e){e[e.Click=1]="Click",e[e.Bounce=2]="Bounce",e[e.Spam=3]="Spam",e[e.Blocked=4]="Blocked",e[e.Unsubscribe=5]="Unsubscribe",e[e.Open=6]="Open",e[e.Sent=7]="Sent"}(e.EventTypeValue||(e.EventTypeValue={})),function(e){e.Dead="dead",e.Alive="alive"}(e.Status||(e.Status={}))}(t.Webhook||(t.Webhook={}))},310:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.APIKeyConfiguration=t.DNS=t.Sender=t.Webhook=t.Statistic=t.Template=t.Segmentation=t.SentCampaign=t.DraftCampaign=t.ContactProperties=t.BulkContactManagement=t.Message=t.SendEmailV3_1=t.Common=void 0;var r=n(566);Object.defineProperty(t,"Common",{enumerable:!0,get:function(){return r.Common}});var o=n(410);Object.defineProperty(t,"SendEmailV3_1",{enumerable:!0,get:function(){return o.SendEmailV3_1}});var i=n(354);Object.defineProperty(t,"Message",{enumerable:!0,get:function(){return i.Message}});var s=n(235);Object.defineProperty(t,"BulkContactManagement",{enumerable:!0,get:function(){return s.BulkContactManagement}}),Object.defineProperty(t,"ContactProperties",{enumerable:!0,get:function(){return s.ContactProperties}});var a=n(917);Object.defineProperty(t,"DraftCampaign",{enumerable:!0,get:function(){return a.DraftCampaign}}),Object.defineProperty(t,"SentCampaign",{enumerable:!0,get:function(){return a.SentCampaign}});var u=n(635);Object.defineProperty(t,"Segmentation",{enumerable:!0,get:function(){return u.Segmentation}});var c=n(98);Object.defineProperty(t,"Template",{enumerable:!0,get:function(){return c.Template}});var l=n(83);Object.defineProperty(t,"Statistic",{enumerable:!0,get:function(){return l.Statistic}});var f=n(174);Object.defineProperty(t,"Webhook",{enumerable:!0,get:function(){return f.Webhook}});var p=n(256);Object.defineProperty(t,"Sender",{enumerable:!0,get:function(){return p.Sender}}),Object.defineProperty(t,"DNS",{enumerable:!0,get:function(){return p.DNS}});var d=n(295);Object.defineProperty(t,"APIKeyConfiguration",{enumerable:!0,get:function(){return d.APIKeyConfiguration}})},6:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.setValueIfNotNil=t.isPureObject=t.isUndefined=t.isNull=t.isNil=void 0;var o=r(n(808));t.isNil=o.default;var i=r(n(376));t.isNull=i.default;var s=r(n(34));t.isUndefined=s.default;var a=r(n(818));t.isPureObject=a.default;var u=r(n(190));t.setValueIfNotNil=u.default},808:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(376)),i=r(n(34));t.default=function(e){return(0,i.default)(e)||(0,o.default)(e)}},376:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){return null===e}},818:function(e,t){"use strict";function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){return"object"===n(e)&&null!==e&&(Object.getPrototypeOf(e)===Object.prototype||null===Object.getPrototypeOf(e))}},34:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){return void 0===e}},190:function(e,t,n){"use strict";function r(e){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},r(e)}var o=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var i=o(n(808)),s=o(n(376));t.default=function(e,t,n){if("object"!==r(e)||(0,s.default)(e))throw Error('Argument "targetObject" is not object');if(!t)throw Error('Argument "path" is required');(0,i.default)(n)||(e[t]=n)}},431:function(e,t,n){var r;!function(o){"use strict";var i,s=/^-?(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?$/i,a=Math.ceil,u=Math.floor,c="[BigNumber Error] ",l=c+"Number primitive has more than 15 significant digits: ",f=1e14,p=14,d=9007199254740991,h=[1,10,100,1e3,1e4,1e5,1e6,1e7,1e8,1e9,1e10,1e11,1e12,1e13],m=1e7,g=1e9;function y(e){var t=0|e;return e>0||e===t?t:t-1}function b(e){for(var t,n,r=1,o=e.length,i=e[0]+"";r<o;){for(t=e[r++]+"",n=p-t.length;n--;t="0"+t);i+=t}for(o=i.length;48===i.charCodeAt(--o););return i.slice(0,o+1||1)}function v(e,t){var n,r,o=e.c,i=t.c,s=e.s,a=t.s,u=e.e,c=t.e;if(!s||!a)return null;if(n=o&&!o[0],r=i&&!i[0],n||r)return n?r?0:-a:s;if(s!=a)return s;if(n=s<0,r=u==c,!o||!i)return r?0:!o^n?1:-1;if(!r)return u>c^n?1:-1;for(a=(u=o.length)<(c=i.length)?u:c,s=0;s<a;s++)if(o[s]!=i[s])return o[s]>i[s]^n?1:-1;return u==c?0:u>c^n?1:-1}function w(e,t,n,r){if(e<t||e>n||e!==u(e))throw Error(c+(r||"Argument")+("number"==typeof e?e<t||e>n?" out of range: ":" not an integer: ":" not a primitive number: ")+String(e))}function S(e){var t=e.c.length-1;return y(e.e/p)==t&&e.c[t]%2!=0}function O(e,t){return(e.length>1?e.charAt(0)+"."+e.slice(1):e)+(t<0?"e":"e+")+t}function E(e,t,n){var r,o;if(t<0){for(o=n+".";++t;o+=n);e=o+e}else if(++t>(r=e.length)){for(o=n,t-=r;--t;o+=n);e+=o}else t<r&&(e=e.slice(0,t)+"."+e.slice(t));return e}i=function e(t){var n,r,o,i,A,C,P,j,T,k,_=K.prototype={constructor:K,toString:null,valueOf:null},R=new K(1),N=20,x=4,B=-7,M=21,D=-1e7,U=1e7,L=!1,I=1,F=0,q={prefix:"",groupSize:3,secondaryGroupSize:0,groupSeparator:",",decimalSeparator:".",fractionGroupSize:0,fractionGroupSeparator:" ",suffix:""},H="0123456789abcdefghijklmnopqrstuvwxyz";function K(e,t){var n,i,a,c,f,h,m,g,y=this;if(!(y instanceof K))return new K(e,t);if(null==t){if(e&&!0===e._isBigNumber)return y.s=e.s,void(!e.c||e.e>U?y.c=y.e=null:e.e<D?y.c=[y.e=0]:(y.e=e.e,y.c=e.c.slice()));if((h="number"==typeof e)&&0*e==0){if(y.s=1/e<0?(e=-e,-1):1,e===~~e){for(c=0,f=e;f>=10;f/=10,c++);return void(c>U?y.c=y.e=null:(y.e=c,y.c=[e]))}g=String(e)}else{if(!s.test(g=String(e)))return o(y,g,h);y.s=45==g.charCodeAt(0)?(g=g.slice(1),-1):1}(c=g.indexOf("."))>-1&&(g=g.replace(".","")),(f=g.search(/e/i))>0?(c<0&&(c=f),c+=+g.slice(f+1),g=g.substring(0,f)):c<0&&(c=g.length)}else{if(w(t,2,H.length,"Base"),10==t)return W(y=new K(e),N+y.e+1,x);if(g=String(e),h="number"==typeof e){if(0*e!=0)return o(y,g,h,t);if(y.s=1/e<0?(g=g.slice(1),-1):1,K.DEBUG&&g.replace(/^0\.0*|\./,"").length>15)throw Error(l+e)}else y.s=45===g.charCodeAt(0)?(g=g.slice(1),-1):1;for(n=H.slice(0,t),c=f=0,m=g.length;f<m;f++)if(n.indexOf(i=g.charAt(f))<0){if("."==i){if(f>c){c=m;continue}}else if(!a&&(g==g.toUpperCase()&&(g=g.toLowerCase())||g==g.toLowerCase()&&(g=g.toUpperCase()))){a=!0,f=-1,c=0;continue}return o(y,String(e),h,t)}h=!1,(c=(g=r(g,t,10,y.s)).indexOf("."))>-1?g=g.replace(".",""):c=g.length}for(f=0;48===g.charCodeAt(f);f++);for(m=g.length;48===g.charCodeAt(--m););if(g=g.slice(f,++m)){if(m-=f,h&&K.DEBUG&&m>15&&(e>d||e!==u(e)))throw Error(l+y.s*e);if((c=c-f-1)>U)y.c=y.e=null;else if(c<D)y.c=[y.e=0];else{if(y.e=c,y.c=[],f=(c+1)%p,c<0&&(f+=p),f<m){for(f&&y.c.push(+g.slice(0,f)),m-=p;f<m;)y.c.push(+g.slice(f,f+=p));f=p-(g=g.slice(f)).length}else f-=m;for(;f--;g+="0");y.c.push(+g)}}else y.c=[y.e=0]}function V(e,t,n,r){var o,i,s,a,u;if(null==n?n=x:w(n,0,8),!e.c)return e.toString();if(o=e.c[0],s=e.e,null==t)u=b(e.c),u=1==r||2==r&&(s<=B||s>=M)?O(u,s):E(u,s,"0");else if(i=(e=W(new K(e),t,n)).e,a=(u=b(e.c)).length,1==r||2==r&&(t<=i||i<=B)){for(;a<t;u+="0",a++);u=O(u,i)}else if(t-=s,u=E(u,i,"0"),i+1>a){if(--t>0)for(u+=".";t--;u+="0");}else if((t+=i-a)>0)for(i+1==a&&(u+=".");t--;u+="0");return e.s<0&&o?"-"+u:u}function z(e,t){for(var n,r=1,o=new K(e[0]);r<e.length;r++){if(!(n=new K(e[r])).s){o=n;break}t.call(o,n)&&(o=n)}return o}function J(e,t,n){for(var r=1,o=t.length;!t[--o];t.pop());for(o=t[0];o>=10;o/=10,r++);return(n=r+n*p-1)>U?e.c=e.e=null:n<D?e.c=[e.e=0]:(e.e=n,e.c=t),e}function W(e,t,n,r){var o,i,s,c,l,d,m,g=e.c,y=h;if(g){e:{for(o=1,c=g[0];c>=10;c/=10,o++);if((i=t-o)<0)i+=p,s=t,m=(l=g[d=0])/y[o-s-1]%10|0;else if((d=a((i+1)/p))>=g.length){if(!r)break e;for(;g.length<=d;g.push(0));l=m=0,o=1,s=(i%=p)-p+1}else{for(l=c=g[d],o=1;c>=10;c/=10,o++);m=(s=(i%=p)-p+o)<0?0:l/y[o-s-1]%10|0}if(r=r||t<0||null!=g[d+1]||(s<0?l:l%y[o-s-1]),r=n<4?(m||r)&&(0==n||n==(e.s<0?3:2)):m>5||5==m&&(4==n||r||6==n&&(i>0?s>0?l/y[o-s]:0:g[d-1])%10&1||n==(e.s<0?8:7)),t<1||!g[0])return g.length=0,r?(t-=e.e+1,g[0]=y[(p-t%p)%p],e.e=-t||0):g[0]=e.e=0,e;if(0==i?(g.length=d,c=1,d--):(g.length=d+1,c=y[p-i],g[d]=s>0?u(l/y[o-s]%y[s])*c:0),r)for(;;){if(0==d){for(i=1,s=g[0];s>=10;s/=10,i++);for(s=g[0]+=c,c=1;s>=10;s/=10,c++);i!=c&&(e.e++,g[0]==f&&(g[0]=1));break}if(g[d]+=c,g[d]!=f)break;g[d--]=0,c=1}for(i=g.length;0===g[--i];g.pop());}e.e>U?e.c=e.e=null:e.e<D&&(e.c=[e.e=0])}return e}function G(e){var t,n=e.e;return null===n?e.toString():(t=b(e.c),t=n<=B||n>=M?O(t,n):E(t,n,"0"),e.s<0?"-"+t:t)}return K.clone=e,K.ROUND_UP=0,K.ROUND_DOWN=1,K.ROUND_CEIL=2,K.ROUND_FLOOR=3,K.ROUND_HALF_UP=4,K.ROUND_HALF_DOWN=5,K.ROUND_HALF_EVEN=6,K.ROUND_HALF_CEIL=7,K.ROUND_HALF_FLOOR=8,K.EUCLID=9,K.config=K.set=function(e){var t,n;if(null!=e){if("object"!=typeof e)throw Error(c+"Object expected: "+e);if(e.hasOwnProperty(t="DECIMAL_PLACES")&&(w(n=e[t],0,g,t),N=n),e.hasOwnProperty(t="ROUNDING_MODE")&&(w(n=e[t],0,8,t),x=n),e.hasOwnProperty(t="EXPONENTIAL_AT")&&((n=e[t])&&n.pop?(w(n[0],-g,0,t),w(n[1],0,g,t),B=n[0],M=n[1]):(w(n,-g,g,t),B=-(M=n<0?-n:n))),e.hasOwnProperty(t="RANGE"))if((n=e[t])&&n.pop)w(n[0],-g,-1,t),w(n[1],1,g,t),D=n[0],U=n[1];else{if(w(n,-g,g,t),!n)throw Error(c+t+" cannot be zero: "+n);D=-(U=n<0?-n:n)}if(e.hasOwnProperty(t="CRYPTO")){if((n=e[t])!==!!n)throw Error(c+t+" not true or false: "+n);if(n){if("undefined"==typeof crypto||!crypto||!crypto.getRandomValues&&!crypto.randomBytes)throw L=!n,Error(c+"crypto unavailable");L=n}else L=n}if(e.hasOwnProperty(t="MODULO_MODE")&&(w(n=e[t],0,9,t),I=n),e.hasOwnProperty(t="POW_PRECISION")&&(w(n=e[t],0,g,t),F=n),e.hasOwnProperty(t="FORMAT")){if("object"!=typeof(n=e[t]))throw Error(c+t+" not an object: "+n);q=n}if(e.hasOwnProperty(t="ALPHABET")){if("string"!=typeof(n=e[t])||/^.?$|[+\-.\s]|(.).*\1/.test(n))throw Error(c+t+" invalid: "+n);H=n}}return{DECIMAL_PLACES:N,ROUNDING_MODE:x,EXPONENTIAL_AT:[B,M],RANGE:[D,U],CRYPTO:L,MODULO_MODE:I,POW_PRECISION:F,FORMAT:q,ALPHABET:H}},K.isBigNumber=function(e){if(!e||!0!==e._isBigNumber)return!1;if(!K.DEBUG)return!0;var t,n,r=e.c,o=e.e,i=e.s;e:if("[object Array]"=={}.toString.call(r)){if((1===i||-1===i)&&o>=-g&&o<=g&&o===u(o)){if(0===r[0]){if(0===o&&1===r.length)return!0;break e}if((t=(o+1)%p)<1&&(t+=p),String(r[0]).length==t){for(t=0;t<r.length;t++)if((n=r[t])<0||n>=f||n!==u(n))break e;if(0!==n)return!0}}}else if(null===r&&null===o&&(null===i||1===i||-1===i))return!0;throw Error(c+"Invalid BigNumber: "+e)},K.maximum=K.max=function(){return z(arguments,_.lt)},K.minimum=K.min=function(){return z(arguments,_.gt)},K.random=(i=9007199254740992,A=Math.random()*i&2097151?function(){return u(Math.random()*i)}:function(){return 8388608*(1073741824*Math.random()|0)+(8388608*Math.random()|0)},function(e){var t,n,r,o,i,s=0,l=[],f=new K(R);if(null==e?e=N:w(e,0,g),o=a(e/p),L)if(crypto.getRandomValues){for(t=crypto.getRandomValues(new Uint32Array(o*=2));s<o;)(i=131072*t[s]+(t[s+1]>>>11))>=9e15?(n=crypto.getRandomValues(new Uint32Array(2)),t[s]=n[0],t[s+1]=n[1]):(l.push(i%1e14),s+=2);s=o/2}else{if(!crypto.randomBytes)throw L=!1,Error(c+"crypto unavailable");for(t=crypto.randomBytes(o*=7);s<o;)(i=281474976710656*(31&t[s])+1099511627776*t[s+1]+4294967296*t[s+2]+16777216*t[s+3]+(t[s+4]<<16)+(t[s+5]<<8)+t[s+6])>=9e15?crypto.randomBytes(7).copy(t,s):(l.push(i%1e14),s+=7);s=o/7}if(!L)for(;s<o;)(i=A())<9e15&&(l[s++]=i%1e14);for(o=l[--s],e%=p,o&&e&&(i=h[p-e],l[s]=u(o/i)*i);0===l[s];l.pop(),s--);if(s<0)l=[r=0];else{for(r=-1;0===l[0];l.splice(0,1),r-=p);for(s=1,i=l[0];i>=10;i/=10,s++);s<p&&(r-=p-s)}return f.e=r,f.c=l,f}),K.sum=function(){for(var e=1,t=arguments,n=new K(t[0]);e<t.length;)n=n.plus(t[e++]);return n},r=function(){var e="0123456789";function t(e,t,n,r){for(var o,i,s=[0],a=0,u=e.length;a<u;){for(i=s.length;i--;s[i]*=t);for(s[0]+=r.indexOf(e.charAt(a++)),o=0;o<s.length;o++)s[o]>n-1&&(null==s[o+1]&&(s[o+1]=0),s[o+1]+=s[o]/n|0,s[o]%=n)}return s.reverse()}return function(r,o,i,s,a){var u,c,l,f,p,d,h,m,g=r.indexOf("."),y=N,v=x;for(g>=0&&(f=F,F=0,r=r.replace(".",""),d=(m=new K(o)).pow(r.length-g),F=f,m.c=t(E(b(d.c),d.e,"0"),10,i,e),m.e=m.c.length),l=f=(h=t(r,o,i,a?(u=H,e):(u=e,H))).length;0==h[--f];h.pop());if(!h[0])return u.charAt(0);if(g<0?--l:(d.c=h,d.e=l,d.s=s,h=(d=n(d,m,y,v,i)).c,p=d.r,l=d.e),g=h[c=l+y+1],f=i/2,p=p||c<0||null!=h[c+1],p=v<4?(null!=g||p)&&(0==v||v==(d.s<0?3:2)):g>f||g==f&&(4==v||p||6==v&&1&h[c-1]||v==(d.s<0?8:7)),c<1||!h[0])r=p?E(u.charAt(1),-y,u.charAt(0)):u.charAt(0);else{if(h.length=c,p)for(--i;++h[--c]>i;)h[c]=0,c||(++l,h=[1].concat(h));for(f=h.length;!h[--f];);for(g=0,r="";g<=f;r+=u.charAt(h[g++]));r=E(r,l,u.charAt(0))}return r}}(),n=function(){function e(e,t,n){var r,o,i,s,a=0,u=e.length,c=t%m,l=t/m|0;for(e=e.slice();u--;)a=((o=c*(i=e[u]%m)+(r=l*i+(s=e[u]/m|0)*c)%m*m+a)/n|0)+(r/m|0)+l*s,e[u]=o%n;return a&&(e=[a].concat(e)),e}function t(e,t,n,r){var o,i;if(n!=r)i=n>r?1:-1;else for(o=i=0;o<n;o++)if(e[o]!=t[o]){i=e[o]>t[o]?1:-1;break}return i}function n(e,t,n,r){for(var o=0;n--;)e[n]-=o,o=e[n]<t[n]?1:0,e[n]=o*r+e[n]-t[n];for(;!e[0]&&e.length>1;e.splice(0,1));}return function(r,o,i,s,a){var c,l,d,h,m,g,b,v,w,S,O,E,A,C,P,j,T,k=r.s==o.s?1:-1,_=r.c,R=o.c;if(!(_&&_[0]&&R&&R[0]))return new K(r.s&&o.s&&(_?!R||_[0]!=R[0]:R)?_&&0==_[0]||!R?0*k:k/0:NaN);for(w=(v=new K(k)).c=[],k=i+(l=r.e-o.e)+1,a||(a=f,l=y(r.e/p)-y(o.e/p),k=k/p|0),d=0;R[d]==(_[d]||0);d++);if(R[d]>(_[d]||0)&&l--,k<0)w.push(1),h=!0;else{for(C=_.length,j=R.length,d=0,k+=2,(m=u(a/(R[0]+1)))>1&&(R=e(R,m,a),_=e(_,m,a),j=R.length,C=_.length),A=j,O=(S=_.slice(0,j)).length;O<j;S[O++]=0);T=R.slice(),T=[0].concat(T),P=R[0],R[1]>=a/2&&P++;do{if(m=0,(c=t(R,S,j,O))<0){if(E=S[0],j!=O&&(E=E*a+(S[1]||0)),(m=u(E/P))>1)for(m>=a&&(m=a-1),b=(g=e(R,m,a)).length,O=S.length;1==t(g,S,b,O);)m--,n(g,j<b?T:R,b,a),b=g.length,c=1;else 0==m&&(c=m=1),b=(g=R.slice()).length;if(b<O&&(g=[0].concat(g)),n(S,g,O,a),O=S.length,-1==c)for(;t(R,S,j,O)<1;)m++,n(S,j<O?T:R,O,a),O=S.length}else 0===c&&(m++,S=[0]);w[d++]=m,S[0]?S[O++]=_[A]||0:(S=[_[A]],O=1)}while((A++<C||null!=S[0])&&k--);h=null!=S[0],w[0]||w.splice(0,1)}if(a==f){for(d=1,k=w[0];k>=10;k/=10,d++);W(v,i+(v.e=d+l*p-1)+1,s,h)}else v.e=l,v.r=+h;return v}}(),C=/^(-?)0([xbo])(?=\w[\w.]*$)/i,P=/^([^.]+)\.$/,j=/^\.([^.]+)$/,T=/^-?(Infinity|NaN)$/,k=/^\s*\+(?=[\w.])|^\s+|\s+$/g,o=function(e,t,n,r){var o,i=n?t:t.replace(k,"");if(T.test(i))e.s=isNaN(i)?null:i<0?-1:1;else{if(!n&&(i=i.replace(C,(function(e,t,n){return o="x"==(n=n.toLowerCase())?16:"b"==n?2:8,r&&r!=o?e:t})),r&&(o=r,i=i.replace(P,"$1").replace(j,"0.$1")),t!=i))return new K(i,o);if(K.DEBUG)throw Error(c+"Not a"+(r?" base "+r:"")+" number: "+t);e.s=null}e.c=e.e=null},_.absoluteValue=_.abs=function(){var e=new K(this);return e.s<0&&(e.s=1),e},_.comparedTo=function(e,t){return v(this,new K(e,t))},_.decimalPlaces=_.dp=function(e,t){var n,r,o,i=this;if(null!=e)return w(e,0,g),null==t?t=x:w(t,0,8),W(new K(i),e+i.e+1,t);if(!(n=i.c))return null;if(r=((o=n.length-1)-y(this.e/p))*p,o=n[o])for(;o%10==0;o/=10,r--);return r<0&&(r=0),r},_.dividedBy=_.div=function(e,t){return n(this,new K(e,t),N,x)},_.dividedToIntegerBy=_.idiv=function(e,t){return n(this,new K(e,t),0,1)},_.exponentiatedBy=_.pow=function(e,t){var n,r,o,i,s,l,f,d,h=this;if((e=new K(e)).c&&!e.isInteger())throw Error(c+"Exponent not an integer: "+G(e));if(null!=t&&(t=new K(t)),s=e.e>14,!h.c||!h.c[0]||1==h.c[0]&&!h.e&&1==h.c.length||!e.c||!e.c[0])return d=new K(Math.pow(+G(h),s?2-S(e):+G(e))),t?d.mod(t):d;if(l=e.s<0,t){if(t.c?!t.c[0]:!t.s)return new K(NaN);(r=!l&&h.isInteger()&&t.isInteger())&&(h=h.mod(t))}else{if(e.e>9&&(h.e>0||h.e<-1||(0==h.e?h.c[0]>1||s&&h.c[1]>=24e7:h.c[0]<8e13||s&&h.c[0]<=9999975e7)))return i=h.s<0&&S(e)?-0:0,h.e>-1&&(i=1/i),new K(l?1/i:i);F&&(i=a(F/p+2))}for(s?(n=new K(.5),l&&(e.s=1),f=S(e)):f=(o=Math.abs(+G(e)))%2,d=new K(R);;){if(f){if(!(d=d.times(h)).c)break;i?d.c.length>i&&(d.c.length=i):r&&(d=d.mod(t))}if(o){if(0===(o=u(o/2)))break;f=o%2}else if(W(e=e.times(n),e.e+1,1),e.e>14)f=S(e);else{if(0===(o=+G(e)))break;f=o%2}h=h.times(h),i?h.c&&h.c.length>i&&(h.c.length=i):r&&(h=h.mod(t))}return r?d:(l&&(d=R.div(d)),t?d.mod(t):i?W(d,F,x,undefined):d)},_.integerValue=function(e){var t=new K(this);return null==e?e=x:w(e,0,8),W(t,t.e+1,e)},_.isEqualTo=_.eq=function(e,t){return 0===v(this,new K(e,t))},_.isFinite=function(){return!!this.c},_.isGreaterThan=_.gt=function(e,t){return v(this,new K(e,t))>0},_.isGreaterThanOrEqualTo=_.gte=function(e,t){return 1===(t=v(this,new K(e,t)))||0===t},_.isInteger=function(){return!!this.c&&y(this.e/p)>this.c.length-2},_.isLessThan=_.lt=function(e,t){return v(this,new K(e,t))<0},_.isLessThanOrEqualTo=_.lte=function(e,t){return-1===(t=v(this,new K(e,t)))||0===t},_.isNaN=function(){return!this.s},_.isNegative=function(){return this.s<0},_.isPositive=function(){return this.s>0},_.isZero=function(){return!!this.c&&0==this.c[0]},_.minus=function(e,t){var n,r,o,i,s=this,a=s.s;if(t=(e=new K(e,t)).s,!a||!t)return new K(NaN);if(a!=t)return e.s=-t,s.plus(e);var u=s.e/p,c=e.e/p,l=s.c,d=e.c;if(!u||!c){if(!l||!d)return l?(e.s=-t,e):new K(d?s:NaN);if(!l[0]||!d[0])return d[0]?(e.s=-t,e):new K(l[0]?s:3==x?-0:0)}if(u=y(u),c=y(c),l=l.slice(),a=u-c){for((i=a<0)?(a=-a,o=l):(c=u,o=d),o.reverse(),t=a;t--;o.push(0));o.reverse()}else for(r=(i=(a=l.length)<(t=d.length))?a:t,a=t=0;t<r;t++)if(l[t]!=d[t]){i=l[t]<d[t];break}if(i&&(o=l,l=d,d=o,e.s=-e.s),(t=(r=d.length)-(n=l.length))>0)for(;t--;l[n++]=0);for(t=f-1;r>a;){if(l[--r]<d[r]){for(n=r;n&&!l[--n];l[n]=t);--l[n],l[r]+=f}l[r]-=d[r]}for(;0==l[0];l.splice(0,1),--c);return l[0]?J(e,l,c):(e.s=3==x?-1:1,e.c=[e.e=0],e)},_.modulo=_.mod=function(e,t){var r,o,i=this;return e=new K(e,t),!i.c||!e.s||e.c&&!e.c[0]?new K(NaN):!e.c||i.c&&!i.c[0]?new K(i):(9==I?(o=e.s,e.s=1,r=n(i,e,0,3),e.s=o,r.s*=o):r=n(i,e,0,I),(e=i.minus(r.times(e))).c[0]||1!=I||(e.s=i.s),e)},_.multipliedBy=_.times=function(e,t){var n,r,o,i,s,a,u,c,l,d,h,g,b,v,w,S=this,O=S.c,E=(e=new K(e,t)).c;if(!(O&&E&&O[0]&&E[0]))return!S.s||!e.s||O&&!O[0]&&!E||E&&!E[0]&&!O?e.c=e.e=e.s=null:(e.s*=S.s,O&&E?(e.c=[0],e.e=0):e.c=e.e=null),e;for(r=y(S.e/p)+y(e.e/p),e.s*=S.s,(u=O.length)<(d=E.length)&&(b=O,O=E,E=b,o=u,u=d,d=o),o=u+d,b=[];o--;b.push(0));for(v=f,w=m,o=d;--o>=0;){for(n=0,h=E[o]%w,g=E[o]/w|0,i=o+(s=u);i>o;)n=((c=h*(c=O[--s]%w)+(a=g*c+(l=O[s]/w|0)*h)%w*w+b[i]+n)/v|0)+(a/w|0)+g*l,b[i--]=c%v;b[i]=n}return n?++r:b.splice(0,1),J(e,b,r)},_.negated=function(){var e=new K(this);return e.s=-e.s||null,e},_.plus=function(e,t){var n,r=this,o=r.s;if(t=(e=new K(e,t)).s,!o||!t)return new K(NaN);if(o!=t)return e.s=-t,r.minus(e);var i=r.e/p,s=e.e/p,a=r.c,u=e.c;if(!i||!s){if(!a||!u)return new K(o/0);if(!a[0]||!u[0])return u[0]?e:new K(a[0]?r:0*o)}if(i=y(i),s=y(s),a=a.slice(),o=i-s){for(o>0?(s=i,n=u):(o=-o,n=a),n.reverse();o--;n.push(0));n.reverse()}for((o=a.length)-(t=u.length)<0&&(n=u,u=a,a=n,t=o),o=0;t;)o=(a[--t]=a[t]+u[t]+o)/f|0,a[t]=f===a[t]?0:a[t]%f;return o&&(a=[o].concat(a),++s),J(e,a,s)},_.precision=_.sd=function(e,t){var n,r,o,i=this;if(null!=e&&e!==!!e)return w(e,1,g),null==t?t=x:w(t,0,8),W(new K(i),e,t);if(!(n=i.c))return null;if(r=(o=n.length-1)*p+1,o=n[o]){for(;o%10==0;o/=10,r--);for(o=n[0];o>=10;o/=10,r++);}return e&&i.e+1>r&&(r=i.e+1),r},_.shiftedBy=function(e){return w(e,-9007199254740991,d),this.times("1e"+e)},_.squareRoot=_.sqrt=function(){var e,t,r,o,i,s=this,a=s.c,u=s.s,c=s.e,l=N+4,f=new K("0.5");if(1!==u||!a||!a[0])return new K(!u||u<0&&(!a||a[0])?NaN:a?s:1/0);if(0==(u=Math.sqrt(+G(s)))||u==1/0?(((t=b(a)).length+c)%2==0&&(t+="0"),u=Math.sqrt(+t),c=y((c+1)/2)-(c<0||c%2),r=new K(t=u==1/0?"5e"+c:(t=u.toExponential()).slice(0,t.indexOf("e")+1)+c)):r=new K(u+""),r.c[0])for((u=(c=r.e)+l)<3&&(u=0);;)if(i=r,r=f.times(i.plus(n(s,i,l,1))),b(i.c).slice(0,u)===(t=b(r.c)).slice(0,u)){if(r.e<c&&--u,"9999"!=(t=t.slice(u-3,u+1))&&(o||"4999"!=t)){+t&&(+t.slice(1)||"5"!=t.charAt(0))||(W(r,r.e+N+2,1),e=!r.times(r).eq(s));break}if(!o&&(W(i,i.e+N+2,0),i.times(i).eq(s))){r=i;break}l+=4,u+=4,o=1}return W(r,r.e+N+1,x,e)},_.toExponential=function(e,t){return null!=e&&(w(e,0,g),e++),V(this,e,t,1)},_.toFixed=function(e,t){return null!=e&&(w(e,0,g),e=e+this.e+1),V(this,e,t)},_.toFormat=function(e,t,n){var r,o=this;if(null==n)null!=e&&t&&"object"==typeof t?(n=t,t=null):e&&"object"==typeof e?(n=e,e=t=null):n=q;else if("object"!=typeof n)throw Error(c+"Argument not an object: "+n);if(r=o.toFixed(e,t),o.c){var i,s=r.split("."),a=+n.groupSize,u=+n.secondaryGroupSize,l=n.groupSeparator||"",f=s[0],p=s[1],d=o.s<0,h=d?f.slice(1):f,m=h.length;if(u&&(i=a,a=u,u=i,m-=i),a>0&&m>0){for(i=m%a||a,f=h.substr(0,i);i<m;i+=a)f+=l+h.substr(i,a);u>0&&(f+=l+h.slice(i)),d&&(f="-"+f)}r=p?f+(n.decimalSeparator||"")+((u=+n.fractionGroupSize)?p.replace(new RegExp("\\d{"+u+"}\\B","g"),"$&"+(n.fractionGroupSeparator||"")):p):f}return(n.prefix||"")+r+(n.suffix||"")},_.toFraction=function(e){var t,r,o,i,s,a,u,l,f,d,m,g,y=this,v=y.c;if(null!=e&&(!(u=new K(e)).isInteger()&&(u.c||1!==u.s)||u.lt(R)))throw Error(c+"Argument "+(u.isInteger()?"out of range: ":"not an integer: ")+G(u));if(!v)return new K(y);for(t=new K(R),f=r=new K(R),o=l=new K(R),g=b(v),s=t.e=g.length-y.e-1,t.c[0]=h[(a=s%p)<0?p+a:a],e=!e||u.comparedTo(t)>0?s>0?t:f:u,a=U,U=1/0,u=new K(g),l.c[0]=0;d=n(u,t,0,1),1!=(i=r.plus(d.times(o))).comparedTo(e);)r=o,o=i,f=l.plus(d.times(i=f)),l=i,t=u.minus(d.times(i=t)),u=i;return i=n(e.minus(r),o,0,1),l=l.plus(i.times(f)),r=r.plus(i.times(o)),l.s=f.s=y.s,m=n(f,o,s*=2,x).minus(y).abs().comparedTo(n(l,r,s,x).minus(y).abs())<1?[f,o]:[l,r],U=a,m},_.toNumber=function(){return+G(this)},_.toPrecision=function(e,t){return null!=e&&w(e,1,g),V(this,e,t,2)},_.toString=function(e){var t,n=this,o=n.s,i=n.e;return null===i?o?(t="Infinity",o<0&&(t="-"+t)):t="NaN":(null==e?t=i<=B||i>=M?O(b(n.c),i):E(b(n.c),i,"0"):10===e?t=E(b((n=W(new K(n),N+i+1,x)).c),n.e,"0"):(w(e,2,H.length,"Base"),t=r(E(b(n.c),i,"0"),10,e,o,!0)),o<0&&n.c[0]&&(t="-"+t)),t},_.valueOf=_.toJSON=function(){return G(this)},_._isBigNumber=!0,null!=t&&K.set(t),K}(),i.default=i.BigNumber=i,void 0===(r=function(){return i}.call(t,n,t,e))||(e.exports=r)}()},400:function(e,t,n){var r=n(123).stringify,o=n(813);e.exports=function(e){return{parse:o(e),stringify:r}},e.exports.parse=o(),e.exports.stringify=r},813:function(e,t,n){var r=null;const o=/(?:_|\\u005[Ff])(?:_|\\u005[Ff])(?:p|\\u0070)(?:r|\\u0072)(?:o|\\u006[Ff])(?:t|\\u0074)(?:o|\\u006[Ff])(?:_|\\u005[Ff])(?:_|\\u005[Ff])/,i=/(?:c|\\u0063)(?:o|\\u006[Ff])(?:n|\\u006[Ee])(?:s|\\u0073)(?:t|\\u0074)(?:r|\\u0072)(?:u|\\u0075)(?:c|\\u0063)(?:t|\\u0074)(?:o|\\u006[Ff])(?:r|\\u0072)/;e.exports=function(e){"use strict";var t={strict:!1,storeAsString:!1,alwaysParseAsBig:!1,useNativeBigInt:!1,protoAction:"error",constructorAction:"error"};if(null!=e){if(!0===e.strict&&(t.strict=!0),!0===e.storeAsString&&(t.storeAsString=!0),t.alwaysParseAsBig=!0===e.alwaysParseAsBig&&e.alwaysParseAsBig,t.useNativeBigInt=!0===e.useNativeBigInt&&e.useNativeBigInt,void 0!==e.constructorAction){if("error"!==e.constructorAction&&"ignore"!==e.constructorAction&&"preserve"!==e.constructorAction)throw new Error(`Incorrect value for constructorAction option, must be "error", "ignore" or undefined but passed ${e.constructorAction}`);t.constructorAction=e.constructorAction}if(void 0!==e.protoAction){if("error"!==e.protoAction&&"ignore"!==e.protoAction&&"preserve"!==e.protoAction)throw new Error(`Incorrect value for protoAction option, must be "error", "ignore" or undefined but passed ${e.protoAction}`);t.protoAction=e.protoAction}}var s,a,u,c,l={'"':'"',"\\":"\\","/":"/",b:"\b",f:"\f",n:"\n",r:"\r",t:"\t"},f=function(e){throw{name:"SyntaxError",message:e,at:s,text:u}},p=function(e){return e&&e!==a&&f("Expected '"+e+"' instead of '"+a+"'"),a=u.charAt(s),s+=1,a},d=function(){var e,o="";for("-"===a&&(o="-",p("-"));a>="0"&&a<="9";)o+=a,p();if("."===a)for(o+=".";p()&&a>="0"&&a<="9";)o+=a;if("e"===a||"E"===a)for(o+=a,p(),"-"!==a&&"+"!==a||(o+=a,p());a>="0"&&a<="9";)o+=a,p();if(e=+o,isFinite(e))return null==r&&(r=n(431)),o.length>15?t.storeAsString?o:t.useNativeBigInt?BigInt(o):new r(o):t.alwaysParseAsBig?t.useNativeBigInt?BigInt(e):new r(e):e;f("Bad number")},h=function(){var e,t,n,r="";if('"'===a)for(var o=s;p();){if('"'===a)return s-1>o&&(r+=u.substring(o,s-1)),p(),r;if("\\"===a){if(s-1>o&&(r+=u.substring(o,s-1)),p(),"u"===a){for(n=0,t=0;t<4&&(e=parseInt(p(),16),isFinite(e));t+=1)n=16*n+e;r+=String.fromCharCode(n)}else{if("string"!=typeof l[a])break;r+=l[a]}o=s}}f("Bad string")},m=function(){for(;a&&a<=" ";)p()};return c=function(){switch(m(),a){case"{":return function(){var e,n=Object.create(null);if("{"===a){if(p("{"),m(),"}"===a)return p("}"),n;for(;a;){if(e=h(),m(),p(":"),!0===t.strict&&Object.hasOwnProperty.call(n,e)&&f('Duplicate key "'+e+'"'),!0===o.test(e)?"error"===t.protoAction?f("Object contains forbidden prototype property"):"ignore"===t.protoAction?c():n[e]=c():!0===i.test(e)?"error"===t.constructorAction?f("Object contains forbidden constructor property"):"ignore"===t.constructorAction?c():n[e]=c():n[e]=c(),m(),"}"===a)return p("}"),n;p(","),m()}}f("Bad object")}();case"[":return function(){var e=[];if("["===a){if(p("["),m(),"]"===a)return p("]"),e;for(;a;){if(e.push(c()),m(),"]"===a)return p("]"),e;p(","),m()}}f("Bad array")}();case'"':return h();case"-":return d();default:return a>="0"&&a<="9"?d():function(){switch(a){case"t":return p("t"),p("r"),p("u"),p("e"),!0;case"f":return p("f"),p("a"),p("l"),p("s"),p("e"),!1;case"n":return p("n"),p("u"),p("l"),p("l"),null}f("Unexpected '"+a+"'")}()}},function(e,t){var n;return u=e+"",s=0,a=" ",n=c(),m(),a&&f("Syntax error"),"function"==typeof t?function e(n,r){var o,i=n[r];return i&&"object"==typeof i&&Object.keys(i).forEach((function(t){void 0!==(o=e(i,t))?i[t]=o:delete i[t]})),t.call(n,r,i)}({"":n},""):n}}},123:function(e,t,n){var r=n(431),o=e.exports;!function(){"use strict";var e,t,n,i=/[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,s={"\b":"\\b","\t":"\\t","\n":"\\n","\f":"\\f","\r":"\\r",'"':'\\"',"\\":"\\\\"};function a(e){return i.lastIndex=0,i.test(e)?'"'+e.replace(i,(function(e){var t=s[e];return"string"==typeof t?t:"\\u"+("0000"+e.charCodeAt(0).toString(16)).slice(-4)}))+'"':'"'+e+'"'}function u(o,i){var s,c,l,f,p,d=e,h=i[o],m=null!=h&&(h instanceof r||r.isBigNumber(h));switch(h&&"object"==typeof h&&"function"==typeof h.toJSON&&(h=h.toJSON(o)),"function"==typeof n&&(h=n.call(i,o,h)),typeof h){case"string":return m?h:a(h);case"number":return isFinite(h)?String(h):"null";case"boolean":case"null":case"bigint":return String(h);case"object":if(!h)return"null";if(e+=t,p=[],"[object Array]"===Object.prototype.toString.apply(h)){for(f=h.length,s=0;s<f;s+=1)p[s]=u(s,h)||"null";return l=0===p.length?"[]":e?"[\n"+e+p.join(",\n"+e)+"\n"+d+"]":"["+p.join(",")+"]",e=d,l}if(n&&"object"==typeof n)for(f=n.length,s=0;s<f;s+=1)"string"==typeof n[s]&&(l=u(c=n[s],h))&&p.push(a(c)+(e?": ":":")+l);else Object.keys(h).forEach((function(t){var n=u(t,h);n&&p.push(a(t)+(e?": ":":")+n)}));return l=0===p.length?"{}":e?"{\n"+e+p.join(",\n"+e)+"\n"+d+"}":"{"+p.join(",")+"}",e=d,l}}"function"!=typeof o.stringify&&(o.stringify=function(r,o,i){var s;if(e="",t="","number"==typeof i)for(s=0;s<i;s+=1)t+=" ";else"string"==typeof i&&(t=i);if(n=o,o&&"function"!=typeof o&&("object"!=typeof o||"number"!=typeof o.length))throw new Error("JSON.stringify");return u("",{"":r})})}()},78:function(e,t,n){var r,o,i;i=function(){function e(e){var t=[];if(0===e.length)return"";if("string"!=typeof e[0])throw new TypeError("Url must be a string. Received "+e[0]);if(e[0].match(/^[^/:]+:\/*$/)&&e.length>1){var n=e.shift();e[0]=n+e[0]}e[0].match(/^file:\/\/\//)?e[0]=e[0].replace(/^([^/:]+):\/*/,"$1:///"):e[0]=e[0].replace(/^([^/:]+):\/*/,"$1://");for(var r=0;r<e.length;r++){var o=e[r];if("string"!=typeof o)throw new TypeError("Url must be a string. Received "+o);""!==o&&(r>0&&(o=o.replace(/^[\/]+/,"")),o=r<e.length-1?o.replace(/[\/]+$/,""):o.replace(/[\/]+$/,"/"),t.push(o))}var i=t.join("/"),s=(i=i.replace(/\/(\?|&|#[^!])/g,"$1")).split("?");return i=s.shift()+(s.length>0?"?":"")+s.join("&")}return function(){return e("object"==typeof arguments[0]?arguments[0]:[].slice.call(arguments))}},e.exports?e.exports=i():void 0===(o="function"==typeof(r=i)?r.call(t,n,t,e):r)||(e.exports=o)},218:function(e,t,n){"use strict";function r(e,t){return function(){return e.apply(t,arguments)}}const{toString:o}=Object.prototype,{getPrototypeOf:i}=Object,s=(a=Object.create(null),e=>{const t=o.call(e);return a[t]||(a[t]=t.slice(8,-1).toLowerCase())});var a;const u=e=>(e=e.toLowerCase(),t=>s(t)===e),c=e=>t=>typeof t===e,{isArray:l}=Array,f=c("undefined");const p=u("ArrayBuffer");const d=c("string"),h=c("function"),m=c("number"),g=e=>null!==e&&"object"==typeof e,y=e=>{if("object"!==s(e))return!1;const t=i(e);return!(null!==t&&t!==Object.prototype&&null!==Object.getPrototypeOf(t)||Symbol.toStringTag in e||Symbol.iterator in e)},b=u("Date"),v=u("File"),w=u("Blob"),S=u("FileList"),O=u("URLSearchParams"),[E,A,C,P]=["ReadableStream","Request","Response","Headers"].map(u);function j(e,t,{allOwnKeys:n=!1}={}){if(null==e)return;let r,o;if("object"!=typeof e&&(e=[e]),l(e))for(r=0,o=e.length;r<o;r++)t.call(null,e[r],r,e);else{const o=n?Object.getOwnPropertyNames(e):Object.keys(e),i=o.length;let s;for(r=0;r<i;r++)s=o[r],t.call(null,e[s],s,e)}}function T(e,t){t=t.toLowerCase();const n=Object.keys(e);let r,o=n.length;for(;o-- >0;)if(r=n[o],t===r.toLowerCase())return r;return null}const k="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:n.g,_=e=>!f(e)&&e!==k;const R=(N="undefined"!=typeof Uint8Array&&i(Uint8Array),e=>N&&e instanceof N);var N;const x=u("HTMLFormElement"),B=(({hasOwnProperty:e})=>(t,n)=>e.call(t,n))(Object.prototype),M=u("RegExp"),D=(e,t)=>{const n=Object.getOwnPropertyDescriptors(e),r={};j(n,((n,o)=>{let i;!1!==(i=t(n,o,e))&&(r[o]=i||n)})),Object.defineProperties(e,r)},U="abcdefghijklmnopqrstuvwxyz",L="0123456789",I={DIGIT:L,ALPHA:U,ALPHA_DIGIT:U+U.toUpperCase()+L};const F=u("AsyncFunction"),q=(H="function"==typeof setImmediate,K=h(k.postMessage),H?setImmediate:K?(V=`axios@${Math.random()}`,z=[],k.addEventListener("message",(({source:e,data:t})=>{e===k&&t===V&&z.length&&z.shift()()}),!1),e=>{z.push(e),k.postMessage(V,"*")}):e=>setTimeout(e));var H,K,V,z;const J="undefined"!=typeof queueMicrotask?queueMicrotask.bind(k):"undefined"!=typeof process&&process.nextTick||q;var W={isArray:l,isArrayBuffer:p,isBuffer:function(e){return null!==e&&!f(e)&&null!==e.constructor&&!f(e.constructor)&&h(e.constructor.isBuffer)&&e.constructor.isBuffer(e)},isFormData:e=>{let t;return e&&("function"==typeof FormData&&e instanceof FormData||h(e.append)&&("formdata"===(t=s(e))||"object"===t&&h(e.toString)&&"[object FormData]"===e.toString()))},isArrayBufferView:function(e){let t;return t="undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(e):e&&e.buffer&&p(e.buffer),t},isString:d,isNumber:m,isBoolean:e=>!0===e||!1===e,isObject:g,isPlainObject:y,isReadableStream:E,isRequest:A,isResponse:C,isHeaders:P,isUndefined:f,isDate:b,isFile:v,isBlob:w,isRegExp:M,isFunction:h,isStream:e=>g(e)&&h(e.pipe),isURLSearchParams:O,isTypedArray:R,isFileList:S,forEach:j,merge:function e(){const{caseless:t}=_(this)&&this||{},n={},r=(r,o)=>{const i=t&&T(n,o)||o;y(n[i])&&y(r)?n[i]=e(n[i],r):y(r)?n[i]=e({},r):l(r)?n[i]=r.slice():n[i]=r};for(let e=0,t=arguments.length;e<t;e++)arguments[e]&&j(arguments[e],r);return n},extend:(e,t,n,{allOwnKeys:o}={})=>(j(t,((t,o)=>{n&&h(t)?e[o]=r(t,n):e[o]=t}),{allOwnKeys:o}),e),trim:e=>e.trim?e.trim():e.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,""),stripBOM:e=>(65279===e.charCodeAt(0)&&(e=e.slice(1)),e),inherits:(e,t,n,r)=>{e.prototype=Object.create(t.prototype,r),e.prototype.constructor=e,Object.defineProperty(e,"super",{value:t.prototype}),n&&Object.assign(e.prototype,n)},toFlatObject:(e,t,n,r)=>{let o,s,a;const u={};if(t=t||{},null==e)return t;do{for(o=Object.getOwnPropertyNames(e),s=o.length;s-- >0;)a=o[s],r&&!r(a,e,t)||u[a]||(t[a]=e[a],u[a]=!0);e=!1!==n&&i(e)}while(e&&(!n||n(e,t))&&e!==Object.prototype);return t},kindOf:s,kindOfTest:u,endsWith:(e,t,n)=>{e=String(e),(void 0===n||n>e.length)&&(n=e.length),n-=t.length;const r=e.indexOf(t,n);return-1!==r&&r===n},toArray:e=>{if(!e)return null;if(l(e))return e;let t=e.length;if(!m(t))return null;const n=new Array(t);for(;t-- >0;)n[t]=e[t];return n},forEachEntry:(e,t)=>{const n=(e&&e[Symbol.iterator]).call(e);let r;for(;(r=n.next())&&!r.done;){const n=r.value;t.call(e,n[0],n[1])}},matchAll:(e,t)=>{let n;const r=[];for(;null!==(n=e.exec(t));)r.push(n);return r},isHTMLForm:x,hasOwnProperty:B,hasOwnProp:B,reduceDescriptors:D,freezeMethods:e=>{D(e,((t,n)=>{if(h(e)&&-1!==["arguments","caller","callee"].indexOf(n))return!1;const r=e[n];h(r)&&(t.enumerable=!1,"writable"in t?t.writable=!1:t.set||(t.set=()=>{throw Error("Can not rewrite read-only method '"+n+"'")}))}))},toObjectSet:(e,t)=>{const n={},r=e=>{e.forEach((e=>{n[e]=!0}))};return l(e)?r(e):r(String(e).split(t)),n},toCamelCase:e=>e.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g,(function(e,t,n){return t.toUpperCase()+n})),noop:()=>{},toFiniteNumber:(e,t)=>null!=e&&Number.isFinite(e=+e)?e:t,findKey:T,global:k,isContextDefined:_,ALPHABET:I,generateString:(e=16,t=I.ALPHA_DIGIT)=>{let n="";const{length:r}=t;for(;e--;)n+=t[Math.random()*r|0];return n},isSpecCompliantForm:function(e){return!!(e&&h(e.append)&&"FormData"===e[Symbol.toStringTag]&&e[Symbol.iterator])},toJSONObject:e=>{const t=new Array(10),n=(e,r)=>{if(g(e)){if(t.indexOf(e)>=0)return;if(!("toJSON"in e)){t[r]=e;const o=l(e)?[]:{};return j(e,((e,t)=>{const i=n(e,r+1);!f(i)&&(o[t]=i)})),t[r]=void 0,o}}return e};return n(e,0)},isAsyncFn:F,isThenable:e=>e&&(g(e)||h(e))&&h(e.then)&&h(e.catch),setImmediate:q,asap:J};function G(e,t,n,r,o){Error.call(this),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=(new Error).stack,this.message=e,this.name="AxiosError",t&&(this.code=t),n&&(this.config=n),r&&(this.request=r),o&&(this.response=o)}W.inherits(G,Error,{toJSON:function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:W.toJSONObject(this.config),code:this.code,status:this.response&&this.response.status?this.response.status:null}}});const $=G.prototype,X={};["ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","ECONNABORTED","ETIMEDOUT","ERR_NETWORK","ERR_FR_TOO_MANY_REDIRECTS","ERR_DEPRECATED","ERR_BAD_RESPONSE","ERR_BAD_REQUEST","ERR_CANCELED","ERR_NOT_SUPPORT","ERR_INVALID_URL"].forEach((e=>{X[e]={value:e}})),Object.defineProperties(G,X),Object.defineProperty($,"isAxiosError",{value:!0}),G.from=(e,t,n,r,o,i)=>{const s=Object.create($);return W.toFlatObject(e,s,(function(e){return e!==Error.prototype}),(e=>"isAxiosError"!==e)),G.call(s,e.message,t,n,r,o),s.cause=e,s.name=e.name,i&&Object.assign(s,i),s};function Q(e){return W.isPlainObject(e)||W.isArray(e)}function Y(e){return W.endsWith(e,"[]")?e.slice(0,-2):e}function Z(e,t,n){return e?e.concat(t).map((function(e,t){return e=Y(e),!n&&t?"["+e+"]":e})).join(n?".":""):t}const ee=W.toFlatObject(W,{},null,(function(e){return/^is[A-Z]/.test(e)}));function te(e,t,n){if(!W.isObject(e))throw new TypeError("target must be an object");t=t||new FormData;const r=(n=W.toFlatObject(n,{metaTokens:!0,dots:!1,indexes:!1},!1,(function(e,t){return!W.isUndefined(t[e])}))).metaTokens,o=n.visitor||c,i=n.dots,s=n.indexes,a=(n.Blob||"undefined"!=typeof Blob&&Blob)&&W.isSpecCompliantForm(t);if(!W.isFunction(o))throw new TypeError("visitor must be a function");function u(e){if(null===e)return"";if(W.isDate(e))return e.toISOString();if(!a&&W.isBlob(e))throw new G("Blob is not supported. Use a Buffer instead.");return W.isArrayBuffer(e)||W.isTypedArray(e)?a&&"function"==typeof Blob?new Blob([e]):Buffer.from(e):e}function c(e,n,o){let a=e;if(e&&!o&&"object"==typeof e)if(W.endsWith(n,"{}"))n=r?n:n.slice(0,-2),e=JSON.stringify(e);else if(W.isArray(e)&&function(e){return W.isArray(e)&&!e.some(Q)}(e)||(W.isFileList(e)||W.endsWith(n,"[]"))&&(a=W.toArray(e)))return n=Y(n),a.forEach((function(e,r){!W.isUndefined(e)&&null!==e&&t.append(!0===s?Z([n],r,i):null===s?n:n+"[]",u(e))})),!1;return!!Q(e)||(t.append(Z(o,n,i),u(e)),!1)}const l=[],f=Object.assign(ee,{defaultVisitor:c,convertValue:u,isVisitable:Q});if(!W.isObject(e))throw new TypeError("data must be an object");return function e(n,r){if(!W.isUndefined(n)){if(-1!==l.indexOf(n))throw Error("Circular reference detected in "+r.join("."));l.push(n),W.forEach(n,(function(n,i){!0===(!(W.isUndefined(n)||null===n)&&o.call(t,n,W.isString(i)?i.trim():i,r,f))&&e(n,r?r.concat(i):[i])})),l.pop()}}(e),t}function ne(e){const t={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+","%00":"\0"};return encodeURIComponent(e).replace(/[!'()~]|%20|%00/g,(function(e){return t[e]}))}function re(e,t){this._pairs=[],e&&te(e,this,t)}const oe=re.prototype;function ie(e){return encodeURIComponent(e).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}function se(e,t,n){if(!t)return e;const r=n&&n.encode||ie,o=n&&n.serialize;let i;if(i=o?o(t,n):W.isURLSearchParams(t)?t.toString():new re(t,n).toString(r),i){const t=e.indexOf("#");-1!==t&&(e=e.slice(0,t)),e+=(-1===e.indexOf("?")?"?":"&")+i}return e}oe.append=function(e,t){this._pairs.push([e,t])},oe.toString=function(e){const t=e?function(t){return e.call(this,t,ne)}:ne;return this._pairs.map((function(e){return t(e[0])+"="+t(e[1])}),"").join("&")};var ae=class InterceptorManager{constructor(){this.handlers=[]}use(e,t,n){return this.handlers.push({fulfilled:e,rejected:t,synchronous:!!n&&n.synchronous,runWhen:n?n.runWhen:null}),this.handlers.length-1}eject(e){this.handlers[e]&&(this.handlers[e]=null)}clear(){this.handlers&&(this.handlers=[])}forEach(e){W.forEach(this.handlers,(function(t){null!==t&&e(t)}))}},ue={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1},ce={isBrowser:!0,classes:{URLSearchParams:"undefined"!=typeof URLSearchParams?URLSearchParams:re,FormData:"undefined"!=typeof FormData?FormData:null,Blob:"undefined"!=typeof Blob?Blob:null},protocols:["http","https","file","blob","url","data"]};const le="undefined"!=typeof window&&"undefined"!=typeof document,fe=(pe="undefined"!=typeof navigator&&navigator.product,le&&["ReactNative","NativeScript","NS"].indexOf(pe)<0);var pe;const de="undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope&&"function"==typeof self.importScripts,he=le&&window.location.href||"http://localhost";var me={...Object.freeze({__proto__:null,hasBrowserEnv:le,hasStandardBrowserWebWorkerEnv:de,hasStandardBrowserEnv:fe,origin:he}),...ce};function ge(e){function t(e,n,r,o){let i=e[o++];if("__proto__"===i)return!0;const s=Number.isFinite(+i),a=o>=e.length;if(i=!i&&W.isArray(r)?r.length:i,a)return W.hasOwnProp(r,i)?r[i]=[r[i],n]:r[i]=n,!s;r[i]&&W.isObject(r[i])||(r[i]=[]);return t(e,n,r[i],o)&&W.isArray(r[i])&&(r[i]=function(e){const t={},n=Object.keys(e);let r;const o=n.length;let i;for(r=0;r<o;r++)i=n[r],t[i]=e[i];return t}(r[i])),!s}if(W.isFormData(e)&&W.isFunction(e.entries)){const n={};return W.forEachEntry(e,((e,r)=>{t(function(e){return W.matchAll(/\w+|\[(\w*)]/g,e).map((e=>"[]"===e[0]?"":e[1]||e[0]))}(e),r,n,0)})),n}return null}const ye={transitional:ue,adapter:["xhr","http","fetch"],transformRequest:[function(e,t){const n=t.getContentType()||"",r=n.indexOf("application/json")>-1,o=W.isObject(e);o&&W.isHTMLForm(e)&&(e=new FormData(e));if(W.isFormData(e))return r?JSON.stringify(ge(e)):e;if(W.isArrayBuffer(e)||W.isBuffer(e)||W.isStream(e)||W.isFile(e)||W.isBlob(e)||W.isReadableStream(e))return e;if(W.isArrayBufferView(e))return e.buffer;if(W.isURLSearchParams(e))return t.setContentType("application/x-www-form-urlencoded;charset=utf-8",!1),e.toString();let i;if(o){if(n.indexOf("application/x-www-form-urlencoded")>-1)return function(e,t){return te(e,new me.classes.URLSearchParams,Object.assign({visitor:function(e,t,n,r){return me.isNode&&W.isBuffer(e)?(this.append(t,e.toString("base64")),!1):r.defaultVisitor.apply(this,arguments)}},t))}(e,this.formSerializer).toString();if((i=W.isFileList(e))||n.indexOf("multipart/form-data")>-1){const t=this.env&&this.env.FormData;return te(i?{"files[]":e}:e,t&&new t,this.formSerializer)}}return o||r?(t.setContentType("application/json",!1),function(e,t,n){if(W.isString(e))try{return(t||JSON.parse)(e),W.trim(e)}catch(e){if("SyntaxError"!==e.name)throw e}return(n||JSON.stringify)(e)}(e)):e}],transformResponse:[function(e){const t=this.transitional||ye.transitional,n=t&&t.forcedJSONParsing,r="json"===this.responseType;if(W.isResponse(e)||W.isReadableStream(e))return e;if(e&&W.isString(e)&&(n&&!this.responseType||r)){const n=!(t&&t.silentJSONParsing)&&r;try{return JSON.parse(e)}catch(e){if(n){if("SyntaxError"===e.name)throw G.from(e,G.ERR_BAD_RESPONSE,this,null,this.response);throw e}}}return e}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:me.classes.FormData,Blob:me.classes.Blob},validateStatus:function(e){return e>=200&&e<300},headers:{common:{Accept:"application/json, text/plain, */*","Content-Type":void 0}}};W.forEach(["delete","get","head","post","put","patch"],(e=>{ye.headers[e]={}}));var be=ye;const ve=W.toObjectSet(["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"]);const we=Symbol("internals");function Se(e){return e&&String(e).trim().toLowerCase()}function Oe(e){return!1===e||null==e?e:W.isArray(e)?e.map(Oe):String(e)}function Ee(e,t,n,r,o){return W.isFunction(r)?r.call(this,t,n):(o&&(t=n),W.isString(t)?W.isString(r)?-1!==t.indexOf(r):W.isRegExp(r)?r.test(t):void 0:void 0)}class AxiosHeaders{constructor(e){e&&this.set(e)}set(e,t,n){const r=this;function o(e,t,n){const o=Se(t);if(!o)throw new Error("header name must be a non-empty string");const i=W.findKey(r,o);(!i||void 0===r[i]||!0===n||void 0===n&&!1!==r[i])&&(r[i||t]=Oe(e))}const i=(e,t)=>W.forEach(e,((e,n)=>o(e,n,t)));if(W.isPlainObject(e)||e instanceof this.constructor)i(e,t);else if(W.isString(e)&&(e=e.trim())&&!/^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(e.trim()))i((e=>{const t={};let n,r,o;return e&&e.split("\n").forEach((function(e){o=e.indexOf(":"),n=e.substring(0,o).trim().toLowerCase(),r=e.substring(o+1).trim(),!n||t[n]&&ve[n]||("set-cookie"===n?t[n]?t[n].push(r):t[n]=[r]:t[n]=t[n]?t[n]+", "+r:r)})),t})(e),t);else if(W.isHeaders(e))for(const[t,r]of e.entries())o(r,t,n);else null!=e&&o(t,e,n);return this}get(e,t){if(e=Se(e)){const n=W.findKey(this,e);if(n){const e=this[n];if(!t)return e;if(!0===t)return function(e){const t=Object.create(null),n=/([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g;let r;for(;r=n.exec(e);)t[r[1]]=r[2];return t}(e);if(W.isFunction(t))return t.call(this,e,n);if(W.isRegExp(t))return t.exec(e);throw new TypeError("parser must be boolean|regexp|function")}}}has(e,t){if(e=Se(e)){const n=W.findKey(this,e);return!(!n||void 0===this[n]||t&&!Ee(0,this[n],n,t))}return!1}delete(e,t){const n=this;let r=!1;function o(e){if(e=Se(e)){const o=W.findKey(n,e);!o||t&&!Ee(0,n[o],o,t)||(delete n[o],r=!0)}}return W.isArray(e)?e.forEach(o):o(e),r}clear(e){const t=Object.keys(this);let n=t.length,r=!1;for(;n--;){const o=t[n];e&&!Ee(0,this[o],o,e,!0)||(delete this[o],r=!0)}return r}normalize(e){const t=this,n={};return W.forEach(this,((r,o)=>{const i=W.findKey(n,o);if(i)return t[i]=Oe(r),void delete t[o];const s=e?function(e){return e.trim().toLowerCase().replace(/([a-z\d])(\w*)/g,((e,t,n)=>t.toUpperCase()+n))}(o):String(o).trim();s!==o&&delete t[o],t[s]=Oe(r),n[s]=!0})),this}concat(...e){return this.constructor.concat(this,...e)}toJSON(e){const t=Object.create(null);return W.forEach(this,((n,r)=>{null!=n&&!1!==n&&(t[r]=e&&W.isArray(n)?n.join(", "):n)})),t}[Symbol.iterator](){return Object.entries(this.toJSON())[Symbol.iterator]()}toString(){return Object.entries(this.toJSON()).map((([e,t])=>e+": "+t)).join("\n")}get[Symbol.toStringTag](){return"AxiosHeaders"}static from(e){return e instanceof this?e:new this(e)}static concat(e,...t){const n=new this(e);return t.forEach((e=>n.set(e))),n}static accessor(e){const t=(this[we]=this[we]={accessors:{}}).accessors,n=this.prototype;function r(e){const r=Se(e);t[r]||(!function(e,t){const n=W.toCamelCase(" "+t);["get","set","has"].forEach((r=>{Object.defineProperty(e,r+n,{value:function(e,n,o){return this[r].call(this,t,e,n,o)},configurable:!0})}))}(n,e),t[r]=!0)}return W.isArray(e)?e.forEach(r):r(e),this}}AxiosHeaders.accessor(["Content-Type","Content-Length","Accept","Accept-Encoding","User-Agent","Authorization"]),W.reduceDescriptors(AxiosHeaders.prototype,(({value:e},t)=>{let n=t[0].toUpperCase()+t.slice(1);return{get:()=>e,set(e){this[n]=e}}})),W.freezeMethods(AxiosHeaders);var Ae=AxiosHeaders;function Ce(e,t){const n=this||be,r=t||n,o=Ae.from(r.headers);let i=r.data;return W.forEach(e,(function(e){i=e.call(n,i,o.normalize(),t?t.status:void 0)})),o.normalize(),i}function Pe(e){return!(!e||!e.__CANCEL__)}function je(e,t,n){G.call(this,null==e?"canceled":e,G.ERR_CANCELED,t,n),this.name="CanceledError"}function Te(e,t,n){const r=n.config.validateStatus;n.status&&r&&!r(n.status)?t(new G("Request failed with status code "+n.status,[G.ERR_BAD_REQUEST,G.ERR_BAD_RESPONSE][Math.floor(n.status/100)-4],n.config,n.request,n)):e(n)}W.inherits(je,G,{__CANCEL__:!0});const ke=(e,t,n=3)=>{let r=0;const o=function(e,t){e=e||10;const n=new Array(e),r=new Array(e);let o,i=0,s=0;return t=void 0!==t?t:1e3,function(a){const u=Date.now(),c=r[s];o||(o=u),n[i]=a,r[i]=u;let l=s,f=0;for(;l!==i;)f+=n[l++],l%=e;if(i=(i+1)%e,i===s&&(s=(s+1)%e),u-o<t)return;const p=c&&u-c;return p?Math.round(1e3*f/p):void 0}}(50,250);return function(e,t){let n,r,o=0,i=1e3/t;const s=(t,i=Date.now())=>{o=i,n=null,r&&(clearTimeout(r),r=null),e.apply(null,t)};return[(...e)=>{const t=Date.now(),a=t-o;a>=i?s(e,t):(n=e,r||(r=setTimeout((()=>{r=null,s(n)}),i-a)))},()=>n&&s(n)]}((n=>{const i=n.loaded,s=n.lengthComputable?n.total:void 0,a=i-r,u=o(a);r=i;e({loaded:i,total:s,progress:s?i/s:void 0,bytes:a,rate:u||void 0,estimated:u&&s&&i<=s?(s-i)/u:void 0,event:n,lengthComputable:null!=s,[t?"download":"upload"]:!0})}),n)},_e=(e,t)=>{const n=null!=e;return[r=>t[0]({lengthComputable:n,total:e,loaded:r}),t[1]]},Re=e=>(...t)=>W.asap((()=>e(...t)));var Ne=me.hasStandardBrowserEnv?function(){const e=/(msie|trident)/i.test(navigator.userAgent),t=document.createElement("a");let n;function r(n){let r=n;return e&&(t.setAttribute("href",r),r=t.href),t.setAttribute("href",r),{href:t.href,protocol:t.protocol?t.protocol.replace(/:$/,""):"",host:t.host,search:t.search?t.search.replace(/^\?/,""):"",hash:t.hash?t.hash.replace(/^#/,""):"",hostname:t.hostname,port:t.port,pathname:"/"===t.pathname.charAt(0)?t.pathname:"/"+t.pathname}}return n=r(window.location.href),function(e){const t=W.isString(e)?r(e):e;return t.protocol===n.protocol&&t.host===n.host}}():function(){return!0},xe=me.hasStandardBrowserEnv?{write(e,t,n,r,o,i){const s=[e+"="+encodeURIComponent(t)];W.isNumber(n)&&s.push("expires="+new Date(n).toGMTString()),W.isString(r)&&s.push("path="+r),W.isString(o)&&s.push("domain="+o),!0===i&&s.push("secure"),document.cookie=s.join("; ")},read(e){const t=document.cookie.match(new RegExp("(^|;\\s*)("+e+")=([^;]*)"));return t?decodeURIComponent(t[3]):null},remove(e){this.write(e,"",Date.now()-864e5)}}:{write(){},read:()=>null,remove(){}};function Be(e,t){return e&&!/^([a-z][a-z\d+\-.]*:)?\/\//i.test(t)?function(e,t){return t?e.replace(/\/?\/$/,"")+"/"+t.replace(/^\/+/,""):e}(e,t):t}const Me=e=>e instanceof Ae?{...e}:e;function De(e,t){t=t||{};const n={};function r(e,t,n){return W.isPlainObject(e)&&W.isPlainObject(t)?W.merge.call({caseless:n},e,t):W.isPlainObject(t)?W.merge({},t):W.isArray(t)?t.slice():t}function o(e,t,n){return W.isUndefined(t)?W.isUndefined(e)?void 0:r(void 0,e,n):r(e,t,n)}function i(e,t){if(!W.isUndefined(t))return r(void 0,t)}function s(e,t){return W.isUndefined(t)?W.isUndefined(e)?void 0:r(void 0,e):r(void 0,t)}function a(n,o,i){return i in t?r(n,o):i in e?r(void 0,n):void 0}const u={url:i,method:i,data:i,baseURL:s,transformRequest:s,transformResponse:s,paramsSerializer:s,timeout:s,timeoutMessage:s,withCredentials:s,withXSRFToken:s,adapter:s,responseType:s,xsrfCookieName:s,xsrfHeaderName:s,onUploadProgress:s,onDownloadProgress:s,decompress:s,maxContentLength:s,maxBodyLength:s,beforeRedirect:s,transport:s,httpAgent:s,httpsAgent:s,cancelToken:s,socketPath:s,responseEncoding:s,validateStatus:a,headers:(e,t)=>o(Me(e),Me(t),!0)};return W.forEach(Object.keys(Object.assign({},e,t)),(function(r){const i=u[r]||o,s=i(e[r],t[r],r);W.isUndefined(s)&&i!==a||(n[r]=s)})),n}var Ue=e=>{const t=De({},e);let n,{data:r,withXSRFToken:o,xsrfHeaderName:i,xsrfCookieName:s,headers:a,auth:u}=t;if(t.headers=a=Ae.from(a),t.url=se(Be(t.baseURL,t.url),e.params,e.paramsSerializer),u&&a.set("Authorization","Basic "+btoa((u.username||"")+":"+(u.password?unescape(encodeURIComponent(u.password)):""))),W.isFormData(r))if(me.hasStandardBrowserEnv||me.hasStandardBrowserWebWorkerEnv)a.setContentType(void 0);else if(!1!==(n=a.getContentType())){const[e,...t]=n?n.split(";").map((e=>e.trim())).filter(Boolean):[];a.setContentType([e||"multipart/form-data",...t].join("; "))}if(me.hasStandardBrowserEnv&&(o&&W.isFunction(o)&&(o=o(t)),o||!1!==o&&Ne(t.url))){const e=i&&s&&xe.read(s);e&&a.set(i,e)}return t};var Le="undefined"!=typeof XMLHttpRequest&&function(e){return new Promise((function(t,n){const r=Ue(e);let o=r.data;const i=Ae.from(r.headers).normalize();let s,a,u,c,l,{responseType:f,onUploadProgress:p,onDownloadProgress:d}=r;function h(){c&&c(),l&&l(),r.cancelToken&&r.cancelToken.unsubscribe(s),r.signal&&r.signal.removeEventListener("abort",s)}let m=new XMLHttpRequest;function g(){if(!m)return;const r=Ae.from("getAllResponseHeaders"in m&&m.getAllResponseHeaders());Te((function(e){t(e),h()}),(function(e){n(e),h()}),{data:f&&"text"!==f&&"json"!==f?m.response:m.responseText,status:m.status,statusText:m.statusText,headers:r,config:e,request:m}),m=null}m.open(r.method.toUpperCase(),r.url,!0),m.timeout=r.timeout,"onloadend"in m?m.onloadend=g:m.onreadystatechange=function(){m&&4===m.readyState&&(0!==m.status||m.responseURL&&0===m.responseURL.indexOf("file:"))&&setTimeout(g)},m.onabort=function(){m&&(n(new G("Request aborted",G.ECONNABORTED,e,m)),m=null)},m.onerror=function(){n(new G("Network Error",G.ERR_NETWORK,e,m)),m=null},m.ontimeout=function(){let t=r.timeout?"timeout of "+r.timeout+"ms exceeded":"timeout exceeded";const o=r.transitional||ue;r.timeoutErrorMessage&&(t=r.timeoutErrorMessage),n(new G(t,o.clarifyTimeoutError?G.ETIMEDOUT:G.ECONNABORTED,e,m)),m=null},void 0===o&&i.setContentType(null),"setRequestHeader"in m&&W.forEach(i.toJSON(),(function(e,t){m.setRequestHeader(t,e)})),W.isUndefined(r.withCredentials)||(m.withCredentials=!!r.withCredentials),f&&"json"!==f&&(m.responseType=r.responseType),d&&([u,l]=ke(d,!0),m.addEventListener("progress",u)),p&&m.upload&&([a,c]=ke(p),m.upload.addEventListener("progress",a),m.upload.addEventListener("loadend",c)),(r.cancelToken||r.signal)&&(s=t=>{m&&(n(!t||t.type?new je(null,e,m):t),m.abort(),m=null)},r.cancelToken&&r.cancelToken.subscribe(s),r.signal&&(r.signal.aborted?s():r.signal.addEventListener("abort",s)));const y=function(e){const t=/^([-+\w]{1,25})(:?\/\/|:)/.exec(e);return t&&t[1]||""}(r.url);y&&-1===me.protocols.indexOf(y)?n(new G("Unsupported protocol "+y+":",G.ERR_BAD_REQUEST,e)):m.send(o||null)}))};var Ie=(e,t)=>{let n,r=new AbortController;const o=function(e){if(!n){n=!0,s();const t=e instanceof Error?e:this.reason;r.abort(t instanceof G?t:new je(t instanceof Error?t.message:t))}};let i=t&&setTimeout((()=>{o(new G(`timeout ${t} of ms exceeded`,G.ETIMEDOUT))}),t);const s=()=>{e&&(i&&clearTimeout(i),i=null,e.forEach((e=>{e&&(e.removeEventListener?e.removeEventListener("abort",o):e.unsubscribe(o))})),e=null)};e.forEach((e=>e&&e.addEventListener&&e.addEventListener("abort",o)));const{signal:a}=r;return a.unsubscribe=s,[a,()=>{i&&clearTimeout(i),i=null}]};const Fe=function*(e,t){let n=e.byteLength;if(!t||n<t)return void(yield e);let r,o=0;for(;o<n;)r=o+t,yield e.slice(o,r),o=r},qe=(e,t,n,r,o)=>{const i=async function*(e,t,n){for await(const r of e)yield*Fe(ArrayBuffer.isView(r)?r:await n(String(r)),t)}(e,t,o);let s,a=0,u=e=>{s||(s=!0,r&&r(e))};return new ReadableStream({async pull(e){try{const{done:t,value:r}=await i.next();if(t)return u(),void e.close();let o=r.byteLength;if(n){let e=a+=o;n(e)}e.enqueue(new Uint8Array(r))}catch(e){throw u(e),e}},cancel:e=>(u(e),i.return())},{highWaterMark:2})},He="function"==typeof fetch&&"function"==typeof Request&&"function"==typeof Response,Ke=He&&"function"==typeof ReadableStream,Ve=He&&("function"==typeof TextEncoder?(ze=new TextEncoder,e=>ze.encode(e)):async e=>new Uint8Array(await new Response(e).arrayBuffer()));var ze;const Je=(e,...t)=>{try{return!!e(...t)}catch(e){return!1}},We=Ke&&Je((()=>{let e=!1;const t=new Request(me.origin,{body:new ReadableStream,method:"POST",get duplex(){return e=!0,"half"}}).headers.has("Content-Type");return e&&!t})),Ge=Ke&&Je((()=>W.isReadableStream(new Response("").body))),$e={stream:Ge&&(e=>e.body)};var Xe;He&&(Xe=new Response,["text","arrayBuffer","blob","formData","stream"].forEach((e=>{!$e[e]&&($e[e]=W.isFunction(Xe[e])?t=>t[e]():(t,n)=>{throw new G(`Response type '${e}' is not supported`,G.ERR_NOT_SUPPORT,n)})})));const Qe=async(e,t)=>{const n=W.toFiniteNumber(e.getContentLength());return null==n?(async e=>null==e?0:W.isBlob(e)?e.size:W.isSpecCompliantForm(e)?(await new Request(e).arrayBuffer()).byteLength:W.isArrayBufferView(e)||W.isArrayBuffer(e)?e.byteLength:(W.isURLSearchParams(e)&&(e+=""),W.isString(e)?(await Ve(e)).byteLength:void 0))(t):n};const Ye={http:null,xhr:Le,fetch:He&&(async e=>{let{url:t,method:n,data:r,signal:o,cancelToken:i,timeout:s,onDownloadProgress:a,onUploadProgress:u,responseType:c,headers:l,withCredentials:f="same-origin",fetchOptions:p}=Ue(e);c=c?(c+"").toLowerCase():"text";let d,h,[m,g]=o||i||s?Ie([o,i],s):[];const y=()=>{!d&&setTimeout((()=>{m&&m.unsubscribe()})),d=!0};let b;try{if(u&&We&&"get"!==n&&"head"!==n&&0!==(b=await Qe(l,r))){let e,n=new Request(t,{method:"POST",body:r,duplex:"half"});if(W.isFormData(r)&&(e=n.headers.get("content-type"))&&l.setContentType(e),n.body){const[e,t]=_e(b,ke(Re(u)));r=qe(n.body,65536,e,t,Ve)}}W.isString(f)||(f=f?"include":"omit"),h=new Request(t,{...p,signal:m,method:n.toUpperCase(),headers:l.normalize().toJSON(),body:r,duplex:"half",credentials:f});let o=await fetch(h);const i=Ge&&("stream"===c||"response"===c);if(Ge&&(a||i)){const e={};["status","statusText","headers"].forEach((t=>{e[t]=o[t]}));const t=W.toFiniteNumber(o.headers.get("content-length")),[n,r]=a&&_e(t,ke(Re(a),!0))||[];o=new Response(qe(o.body,65536,n,(()=>{r&&r(),i&&y()}),Ve),e)}c=c||"text";let s=await $e[W.findKey($e,c)||"text"](o,e);return!i&&y(),g&&g(),await new Promise(((t,n)=>{Te(t,n,{data:s,headers:Ae.from(o.headers),status:o.status,statusText:o.statusText,config:e,request:h})}))}catch(t){if(y(),t&&"TypeError"===t.name&&/fetch/i.test(t.message))throw Object.assign(new G("Network Error",G.ERR_NETWORK,e,h),{cause:t.cause||t});throw G.from(t,t&&t.code,e,h)}})};W.forEach(Ye,((e,t)=>{if(e){try{Object.defineProperty(e,"name",{value:t})}catch(e){}Object.defineProperty(e,"adapterName",{value:t})}}));const Ze=e=>`- ${e}`,et=e=>W.isFunction(e)||null===e||!1===e;var tt=e=>{e=W.isArray(e)?e:[e];const{length:t}=e;let n,r;const o={};for(let i=0;i<t;i++){let t;if(n=e[i],r=n,!et(n)&&(r=Ye[(t=String(n)).toLowerCase()],void 0===r))throw new G(`Unknown adapter '${t}'`);if(r)break;o[t||"#"+i]=r}if(!r){const e=Object.entries(o).map((([e,t])=>`adapter ${e} `+(!1===t?"is not supported by the environment":"is not available in the build")));throw new G("There is no suitable adapter to dispatch the request "+(t?e.length>1?"since :\n"+e.map(Ze).join("\n"):" "+Ze(e[0]):"as no adapter specified"),"ERR_NOT_SUPPORT")}return r};function nt(e){if(e.cancelToken&&e.cancelToken.throwIfRequested(),e.signal&&e.signal.aborted)throw new je(null,e)}function rt(e){nt(e),e.headers=Ae.from(e.headers),e.data=Ce.call(e,e.transformRequest),-1!==["post","put","patch"].indexOf(e.method)&&e.headers.setContentType("application/x-www-form-urlencoded",!1);return tt(e.adapter||be.adapter)(e).then((function(t){return nt(e),t.data=Ce.call(e,e.transformResponse,t),t.headers=Ae.from(t.headers),t}),(function(t){return Pe(t)||(nt(e),t&&t.response&&(t.response.data=Ce.call(e,e.transformResponse,t.response),t.response.headers=Ae.from(t.response.headers))),Promise.reject(t)}))}const ot="1.7.4",it={};["object","boolean","number","function","string","symbol"].forEach(((e,t)=>{it[e]=function(n){return typeof n===e||"a"+(t<1?"n ":" ")+e}}));const st={};it.transitional=function(e,t,n){function r(e,t){return"[Axios v1.7.4] Transitional option '"+e+"'"+t+(n?". "+n:"")}return(n,o,i)=>{if(!1===e)throw new G(r(o," has been removed"+(t?" in "+t:"")),G.ERR_DEPRECATED);return t&&!st[o]&&(st[o]=!0,console.warn(r(o," has been deprecated since v"+t+" and will be removed in the near future"))),!e||e(n,o,i)}};var at={assertOptions:function(e,t,n){if("object"!=typeof e)throw new G("options must be an object",G.ERR_BAD_OPTION_VALUE);const r=Object.keys(e);let o=r.length;for(;o-- >0;){const i=r[o],s=t[i];if(s){const t=e[i],n=void 0===t||s(t,i,e);if(!0!==n)throw new G("option "+i+" must be "+n,G.ERR_BAD_OPTION_VALUE)}else if(!0!==n)throw new G("Unknown option "+i,G.ERR_BAD_OPTION)}},validators:it};const ut=at.validators;class Axios{constructor(e){this.defaults=e,this.interceptors={request:new ae,response:new ae}}async request(e,t){try{return await this._request(e,t)}catch(e){if(e instanceof Error){let t;Error.captureStackTrace?Error.captureStackTrace(t={}):t=new Error;const n=t.stack?t.stack.replace(/^.+\n/,""):"";try{e.stack?n&&!String(e.stack).endsWith(n.replace(/^.+\n.+\n/,""))&&(e.stack+="\n"+n):e.stack=n}catch(e){}}throw e}}_request(e,t){"string"==typeof e?(t=t||{}).url=e:t=e||{},t=De(this.defaults,t);const{transitional:n,paramsSerializer:r,headers:o}=t;void 0!==n&&at.assertOptions(n,{silentJSONParsing:ut.transitional(ut.boolean),forcedJSONParsing:ut.transitional(ut.boolean),clarifyTimeoutError:ut.transitional(ut.boolean)},!1),null!=r&&(W.isFunction(r)?t.paramsSerializer={serialize:r}:at.assertOptions(r,{encode:ut.function,serialize:ut.function},!0)),t.method=(t.method||this.defaults.method||"get").toLowerCase();let i=o&&W.merge(o.common,o[t.method]);o&&W.forEach(["delete","get","head","post","put","patch","common"],(e=>{delete o[e]})),t.headers=Ae.concat(i,o);const s=[];let a=!0;this.interceptors.request.forEach((function(e){"function"==typeof e.runWhen&&!1===e.runWhen(t)||(a=a&&e.synchronous,s.unshift(e.fulfilled,e.rejected))}));const u=[];let c;this.interceptors.response.forEach((function(e){u.push(e.fulfilled,e.rejected)}));let l,f=0;if(!a){const e=[rt.bind(this),void 0];for(e.unshift.apply(e,s),e.push.apply(e,u),l=e.length,c=Promise.resolve(t);f<l;)c=c.then(e[f++],e[f++]);return c}l=s.length;let p=t;for(f=0;f<l;){const e=s[f++],t=s[f++];try{p=e(p)}catch(e){t.call(this,e);break}}try{c=rt.call(this,p)}catch(e){return Promise.reject(e)}for(f=0,l=u.length;f<l;)c=c.then(u[f++],u[f++]);return c}getUri(e){return se(Be((e=De(this.defaults,e)).baseURL,e.url),e.params,e.paramsSerializer)}}W.forEach(["delete","get","head","options"],(function(e){Axios.prototype[e]=function(t,n){return this.request(De(n||{},{method:e,url:t,data:(n||{}).data}))}})),W.forEach(["post","put","patch"],(function(e){function t(t){return function(n,r,o){return this.request(De(o||{},{method:e,headers:t?{"Content-Type":"multipart/form-data"}:{},url:n,data:r}))}}Axios.prototype[e]=t(),Axios.prototype[e+"Form"]=t(!0)}));var ct=Axios;class CancelToken{constructor(e){if("function"!=typeof e)throw new TypeError("executor must be a function.");let t;this.promise=new Promise((function(e){t=e}));const n=this;this.promise.then((e=>{if(!n._listeners)return;let t=n._listeners.length;for(;t-- >0;)n._listeners[t](e);n._listeners=null})),this.promise.then=e=>{let t;const r=new Promise((e=>{n.subscribe(e),t=e})).then(e);return r.cancel=function(){n.unsubscribe(t)},r},e((function(e,r,o){n.reason||(n.reason=new je(e,r,o),t(n.reason))}))}throwIfRequested(){if(this.reason)throw this.reason}subscribe(e){this.reason?e(this.reason):this._listeners?this._listeners.push(e):this._listeners=[e]}unsubscribe(e){if(!this._listeners)return;const t=this._listeners.indexOf(e);-1!==t&&this._listeners.splice(t,1)}static source(){let e;return{token:new CancelToken((function(t){e=t})),cancel:e}}}var lt=CancelToken;const ft={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511};Object.entries(ft).forEach((([e,t])=>{ft[t]=e}));var pt=ft;const dt=function e(t){const n=new ct(t),o=r(ct.prototype.request,n);return W.extend(o,ct.prototype,n,{allOwnKeys:!0}),W.extend(o,n,null,{allOwnKeys:!0}),o.create=function(n){return e(De(t,n))},o}(be);dt.Axios=ct,dt.CanceledError=je,dt.CancelToken=lt,dt.isCancel=Pe,dt.VERSION=ot,dt.toFormData=te,dt.AxiosError=G,dt.Cancel=dt.CanceledError,dt.all=function(e){return Promise.all(e)},dt.spread=function(e){return function(t){return e.apply(null,t)}},dt.isAxiosError=function(e){return W.isObject(e)&&!0===e.isAxiosError},dt.mergeConfig=De,dt.AxiosHeaders=Ae,dt.formToJSON=e=>ge(W.isHTMLForm(e)?new FormData(e):e),dt.getAdapter=tt,dt.HttpStatusCode=pt,dt.default=dt,e.exports=dt},147:function(e){"use strict";e.exports=JSON.parse('{"name":"node-mailjet","version":"6.0.6","main":"./dist/mailjet.node.js","browser":"./dist/mailjet.web.js","types":"./dist/declarations/index.d.ts","description":"Mailjet API client","author":"Mailjet","license":"MIT","private":true,"keywords":["email","sms","node","mail","mailjet"],"engines":{"node":">= 12.0.0","npm":">= 6.9.0"},"files":["lib/**","dist/**"],"directories":{"lib":"./lib","docs":"./docs"},"typescript":{"definition":"./dist/declarations/index.d.ts"},"scripts":{"test":"npm run ts:mocha test/","test:int":"npm run ts:mocha test/integration/","test:unit":"npm run ts:mocha test/unit/","test:watch":"mocha --extension ts -r tsconfig-paths/register -r ts-node/register --watch","cover":"npm run cover:expandable npm run test","cover:int":"npm run cover:expandable npm run test:int","cover:unit":"npm run cover:expandable npm run test:unit","cover:expandable":"nyc --reporter=text-summary --reporter=lcov --report-dir=.coverage --temp-dir=./.coverage/.nyc_output","build":"npm run build:release && npm run build:prepublish","build:dev":"webpack --config ./webpack/webpack.dev.config.js --progress --color","build:release":"webpack --config ./webpack/webpack.release.config.js --progress --color","build:prepublish":"node ./scripts/PreparePackage.js","build:watch":"webpack --watch --config ./webpack/webpack.dev.config.js --progress --color","lint":"eslint .","lint:fix":"eslint --fix .","lint:errors":"eslint --quiet .","ts:run":"ts-node --transpileOnly --project ./tsconfig.json -r tsconfig-paths/register","ts:watch":"ts-node-dev --respawn --transpile-only --project ./tsconfig.json -r tsconfig-paths/register","ts:mocha":"mocha --extension ts --recursive -r tsconfig-paths/register -r ts-node/register","ts:patch":"ts-patch install -s","init":"npm install && npm run ts:patch && npm run pkg:prepare","pkg:link":"cd ./dist && npm link && echo \'\\n=== link name: node-mailjet ===\'","pkg:prepare":"husky install","pkg:precommit":"npm audit && npm run lint:errors && npm run test","release":"standard-version -a","release:dry":"standard-version --dry-run","release:quiet":"standard-version --no-verify -a","release:minor":"standard-version -a --release-as minor","release:patch":"standard-version -a --release-as patch","release:major":"standard-version -a --release-as major","docs":"typedoc --tsconfig ./tsconfig.json"},"dependencies":{"axios":"1.7.4","json-bigint":"^1.0.0","url-join":"^4.0.0"},"devDependencies":{"@babel/core":"^7.18.0","@babel/preset-env":"^7.18.0","@commitlint/cli":"^17.0.2","@commitlint/config-conventional":"^17.0.2","@types/chai":"^4.3.1","@types/json-bigint":"^1.0.1","@types/mocha":"^9.1.1","@types/node":"^17.0.34","@types/qs":"^6.9.7","@types/superagent":"^4.1.15","@types/url-join":"^4.0.1","@typescript-eslint/eslint-plugin":"^5.24.0","@typescript-eslint/parser":"^5.24.0","babel-loader":"^8.2.5","chai":"^4.1.0","eslint":"^8.15.0","eslint-config-airbnb-base":"^15.0.0","eslint-import-resolver-typescript":"^2.7.1","eslint-plugin-import":"^2.26.0","eslint-plugin-tsdoc":"^0.2.16","husky":"^8.0.1","mocha":"^9.0.0","nock":"^13.2.4","nyc":"^15.1.0","qs":"^6.5.0","standard-version":"^9.5.0","terser-webpack-plugin":"^5.3.1","ts-loader":"^9.3.0","ts-node":"^10.7.0","ts-node-dev":"^1.1.8","ts-patch":"^2.0.1","tsconfig-paths":"^4.0.0","tsconfig-paths-webpack-plugin":"^3.5.2","typedoc":"^0.22.15","typescript":"^4.6.4","typescript-transform-paths":"^3.3.1","webpack":"^5.76.0","webpack-cli":"^4.9.2","webpack-merge":"^5.8.0"},"homepage":"https://github.com/mailjet/mailjet-apiv3-nodejs#readme","repository":{"type":"git","url":"git+https://github.com/mailjet/mailjet-apiv3-nodejs.git"},"bugs":{"url":"https://github.com/mailjet/mailjet-apiv3-nodejs/issues"},"contributors":["Arnaud Breton <arnaud@mailjet.com> (https://github.com/arnaudbreton)","Nicholas Smith <nicksmith.biz@gmail.com> (https://github.com/safani)","Jérémie Parker <jeremie@vizeat.com> (https://github.com/p-j)"]}')}},t={};function n(r){var o=t[r];if(void 0!==o)return o.exports;var i=t[r]={exports:{}};return e[r].call(i.exports,i,i.exports,n),i.exports}return n.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),n(321)}()}));
|
||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbGpldC53ZWIuanMiLCJtYXBwaW5ncyI6Ijs0cEJBRUEsV0FLQSxZQUlBLFlBQ0EsWUFLQSxhQVVFLFdBQVlBLEdBQ1YsS0FBSyxJQUFBQyxjQUFhRCxHQUNoQixNQUFNLElBQUlFLE1BQU0sb0NBR2xCQyxLQUFLQyxLQUFLRCxLQUFLRSxZQUFZTCxHQUM3QixDQXdLRixPQXRLU00sRUFBQUEsVUFBQUEsa0JBQVAsV0FDRSxPQUFPSCxLQUFLSSxPQUNkLEVBRU9ELEVBQUFBLFVBQUFBLFVBQVAsV0FDRSxPQUFPSCxLQUFLSyxNQUNkLEVBRU9GLEVBQUFBLFVBQUFBLGFBQVAsV0FDRSxPQUFPSCxLQUFLTSxTQUNkLEVBRU9ILEVBQUFBLFVBQUFBLFlBQVAsV0FDRSxPQUFPSCxLQUFLTyxRQUNkLEVBRU9KLEVBQUFBLFVBQUFBLFVBQVAsV0FDRSxPQUFPLEVBQVAsR0FBWUgsS0FBS1EsT0FDbkIsRUFFT0wsRUFBQUEsVUFBQUEsV0FBUCxXQUNFLE9BQU8sRUFBUCxHQUFZSCxLQUFLUyxRQUNuQixFQUVPTixFQUFBQSxVQUFBQSxJQUFQLFNBQVdPLEVBQWtCRixHQUMzQixPQUFPLElBQUlHLEVBQUFBLFFBQVFYLEtBQU1ZLEVBQUFBLFFBQVlDLElBQUtILEVBQVVGLEVBQ3RELEVBRU9MLEVBQUFBLFVBQUFBLEtBQVAsU0FBWU8sRUFBa0JGLEdBQzVCLE9BQU8sSUFBSUcsRUFBQUEsUUFBUVgsS0FBTVksRUFBQUEsUUFBWUUsS0FBTUosRUFBVUYsRUFDdkQsRUFFT0wsRUFBQUEsVUFBQUEsSUFBUCxTQUFXTyxFQUFrQkYsR0FDM0IsT0FBTyxJQUFJRyxFQUFBQSxRQUFRWCxLQUFNWSxFQUFBQSxRQUFZRyxJQUFLTCxFQUFVRixFQUN0RCxFQUVPTCxFQUFBQSxVQUFBQSxPQUFQLFNBQWNPLEVBQWtCRixHQUM5QixPQUFPLElBQUlHLEVBQUFBLFFBQVFYLEtBQU1ZLEVBQUFBLFFBQVlJLE9BQVFOLEVBQVVGLEVBQ3pELEVBRVFMLEVBQUFBLFVBQUFBLEtBQVIsU0FBYU4sR0FDWCxLQUFLLElBQUFDLGNBQWFELEdBQ2hCLE1BQU0sSUFBSUUsTUFBTSxvQ0FJaEIsSUFBQVEsRUFLRVYsRUFBTSxTQUpSUSxFQUlFUixFQUFNLE9BSFJTLEVBR0VULEVBQU0sVUFGUlksRUFFRVosRUFBTSxRQURSVyxFQUNFWCxFQUFNLE9BT1YsT0FMQUcsS0FBS0ksUUFBVUQsRUFBT2MsWUFBWWIsUUFFbENKLEtBQUtrQixVQUFVVixRQUFBQSxFQUFVLE1BQ3pCUixLQUFLbUIsV0FBV1YsUUFBQUEsRUFBVyxNQUVwQixhQUFjWixFQUNqQkcsS0FBS29CLHFCQUFxQmIsR0FDMUJQLEtBQUtxQixxQkFBcUJoQixFQUFRQyxFQUN4QyxFQUVRSCxFQUFBQSxVQUFBQSxZQUFSLFNBQW9CTixHQUNsQixLQUFLLElBQUFDLGNBQWFELEdBQ2hCLE1BQU0sSUFBSUUsTUFBTSxvQ0FHbEIsSUFBTXVCLEVBQWUsRUFBSCxHQUFRekIsR0EwQjFCLE9BeEJJQSxFQUFPVyxTQUNUYyxFQUFhZCxPQUFTLEVBQUgsR0FDZFgsRUFBT1csU0FJVlgsRUFBT1ksVUFDVGEsRUFBYWIsUUFBVSxFQUFILEdBQ2ZaLEVBQU9ZLFNBR1JhLEVBQWFiLFFBQVFjLFFBQ3ZCRCxFQUFhYixRQUFRYyxNQUFRLEVBQUgsR0FDckJELEVBQWFiLFFBQVFjLFFBSXhCRCxFQUFhYixRQUFRZSxVQUN2QkYsRUFBYWIsUUFBUWUsUUFBVSxFQUFILEdBQ3ZCRixFQUFhYixRQUFRZSxXQUt2QkYsQ0FDVCxFQUVRbkIsRUFBQUEsVUFBQUEsVUFBUixTQUFrQnNCLEdBQ2hCLEdBQTRCLFdBQXhCQyxFQUFPRCxHQUNULE1BQU0sSUFBSTFCLE1BQU0sa0RBR2xCLElBQU1TLEVBQVMsRUFBSCxHQUFRTCxFQUFPSyxRQVUzQixPQVJxQixPQUFqQmlCLEtBQ0YsSUFBQUUsa0JBQWlCbkIsRUFBUSxPQUFRaUIsRUFBYUcsT0FDOUMsSUFBQUQsa0JBQWlCbkIsRUFBUSxTQUFVaUIsRUFBYUksU0FDaEQsSUFBQUYsa0JBQWlCbkIsRUFBUSxVQUFXaUIsRUFBYXJCLFVBR25ESixLQUFLUSxPQUFTQSxFQUVQUixJQUNULEVBRVFHLEVBQUFBLFVBQUFBLFdBQVIsU0FBbUJNLEdBQ2pCLEdBQXVCLFdBQW5CaUIsRUFBT2pCLEdBQ1QsTUFBTSxJQUFJVixNQUFNLDZDQUtsQixPQUZBQyxLQUFLUyxRQUFVQSxRQUFBQSxFQUFXLENBQUMsRUFFcEJULElBQ1QsRUFFUUcsRUFBQUEsVUFBQUEscUJBQVIsU0FBNkJJLEdBQzNCLElBQUtBLEVBQ0gsTUFBTSxJQUFJUixNQUFNLGlDQUtsQixPQUZBQyxLQUFLTyxTQUFXQSxFQUVUUCxJQUNULEVBRVFHLEVBQUFBLFVBQUFBLHFCQUFSLFNBQTZCRSxFQUE0QkMsR0FDdkQsSUFBS0QsRUFDSCxNQUFNLElBQUlOLE1BQU0sK0JBRWxCLElBQUtPLEVBQ0gsTUFBTSxJQUFJUCxNQUFNLGtDQU1sQixPQUhBQyxLQUFLSyxPQUFTQSxFQUNkTCxLQUFLTSxVQUFZQSxFQUVWTixJQUNULEVBRWNHLEVBQUFBLFdBQWQsU0FBeUJFLEVBQWdCQyxFQUFtQlQsR0FDMUQsT0FBTyxJQUFJTSxFQUFPLEVBQUQsQ0FBR0UsT0FBTSxFQUFFQyxVQUFTLEdBQUtULEdBQzVDLEVBRWNNLEVBQUFBLFdBQWQsU0FBeUJJLEVBQWtCVixHQUN6QyxPQUFPLElBQUlNLEVBQU8sRUFBRCxDQUFHSSxTQUFRLEdBQUtWLEdBQ25DLEVBRWNNLEVBQUFBLE9BQWtDMkIsT0FBT0MsT0FBTyxDQUM1REgsS0FBTSxrQkFDTnhCLFFBQVMsS0FDVHlCLE9BQVEsU0FHSTFCLEVBQUFBLFlBQWMyQixPQUFPQyxPQUFPQyxFQUFBQSxDQUFBQSxFQUNyQ0MsRUFBQUEsVUFFUCxFQXhMQSxHQTBMQUMsRUFBQUEsUUFBZS9CLDRsQ0N4TWYsZ0JBYTBCK0IsRUFBQUEsWUFibkJ0QixFQUFBQSxRQUVQLGdCQVdpQnNCLEVBQUFBLFFBWFZDLEVBQUFBLFFBQ1AsZUFVU0QsRUFBQUEsT0FWRkUsRUFBQUEsUUFHUCw2RUFJQSxRQUpzQkMsRUFBQUEsRUFBQUEsR0FDYkMsRUFBQUEsUUFBVUgsRUFBQUEsUUFDVkcsRUFBQUEsWUFBYzFCLEVBQUFBLFFBQ2QwQixFQUFBQSxPQUFTRixFQUFBQSxRQUNsQixFQUpBLENBQXNCQSxFQUFBQSxTQU10QkcsRUFBQUEsRUFBQUEsS0FBQUEsR0FFQUwsRUFBQUEsUUFBZUksa0NDWGYsSUFBS0UsbURBQUwsU0FBS0EsR0FDSEEsRUFBQUEsSUFBQUEsTUFDQUEsRUFBQUEsS0FBQUEsT0FDQUEsRUFBQUEsSUFBQUEsTUFDQUEsRUFBQUEsT0FBQUEsUUFDRCxDQUxELENBQUtBLElBQUFBLEVBQVcsS0FPaEJOLEVBQUFBLFFBQWVNLG1uRkNaZixlQUNBLFlBQ0EsWUFFQSxPQUlBLFlBVUEsV0FLTUMsR0FBUSxhQUFXLENBQUVDLGVBQWUsSUFFMUMsYUFVRSxXQUNFQyxFQUNBQyxFQUNBbEMsRUFDQUYsR0FFQSxLQUFNbUMsYUFBa0JFLEVBQUFBLFNBQ3RCLE1BQU0sSUFBSTlDLE1BQU0sZ0RBR2xCLElBQUsrQixPQUFPZ0IsT0FBT2xDLEVBQUFBLFNBQWFtQyxTQUFTSCxHQUN2QyxNQUFNLElBQUk3QyxNQUFNLDhFQUdsQixHQUF3QixpQkFBYlcsRUFDVCxNQUFNLElBQUlYLE1BQU0sc0NBR2xCQyxLQUFLMkMsT0FBU0EsRUFFZDNDLEtBQUs0QyxPQUFTQSxFQUNkNUMsS0FBS2dELElBQU10QyxFQUFTdUMsY0FDcEJqRCxLQUFLVSxTQUFXQSxFQUFTdUMsY0FDekJqRCxLQUFLa0QsUUFBVWxELEtBQUttRCxlQUNwQm5ELEtBQUtvRCxXQUFhLEtBRWxCcEQsS0FBS1EsT0FBUyxFQUFILEdBQVFBLEVBQ3JCLENBa1NGLE9BaFNTNkMsRUFBQUEsVUFBQUEsYUFBUCxXQUNFLE1BQU8sZ0NBQXlCckQsS0FBSzJDLE9BQU9XLG9CQUM5QyxFQUVPRCxFQUFBQSxVQUFBQSxlQUFQLFdBQ0UsTUFBTyxDQUNMOUMsU0FBVVAsS0FBSzJDLE9BQU9ZLGNBQ3RCbEQsT0FBUUwsS0FBSzJDLE9BQU9hLFlBQ3BCbEQsVUFBV04sS0FBSzJDLE9BQU9jLGVBRTNCLEVBRVFKLEVBQUFBLFVBQUFBLGVBQVIsU0FBdUJMLEdBQ3JCLEdBQW1CLGlCQUFSQSxFQUNULE1BQU0sSUFBSWpELE1BQU0saUNBR2xCLE9BQU9pRCxFQUFJVSxRQUFRLGVBQWlCLEVBQ2hDLGFBQ0Esa0JBQ04sRUFFUUwsRUFBQUEsVUFBQUEsZUFBUixTQUF1Qk0sR0FDckIsTUFBTyxDQUNML0MsRUFBQUEsUUFBWUcsSUFDWkgsRUFBQUEsUUFBWUUsS0FDWkYsRUFBQUEsUUFBWUksUUFDWitCLFNBQVMvQyxLQUFLNEMsUUFBVWUsT0FBT0MsQ0FDbkMsRUFFUVAsRUFBQUEsVUFBQUEsYUFBUixtQkFDUVEsRUFBZTdELEtBQUsyQyxPQUFPbUIsWUFFM0JsQyxFQUF1QixRQUFoQixFQUFBNUIsS0FBS1EsT0FBT29CLFlBQUksUUFBSWlDLEVBQWFqQyxLQUN4Q3hCLEVBQTZCLFFBQW5CLEVBQUFKLEtBQUtRLE9BQU9KLGVBQU8sUUFBSXlELEVBQWF6RCxRQUVwRCxPQUFPLGFBQVFpRCxFQUFRVSxTQUFVbkMsRUFBTXhCLEVBQVNKLEtBQUtrRCxRQUFTbEQsS0FBS2dELElBQ3JFLEVBRVFLLEVBQUFBLFVBQUFBLGFBQVIsV0FDRSxHQUFJckQsS0FBS29ELFdBQVksQ0FDbkIsSUFBTVksRUFBeUMsaUJBQWxCaEUsS0FBS1UsVUFBbUQsdUJBQXBCVixLQUFLb0QsV0FDaEVhLEVBQXNDLGFBQWxCakUsS0FBS1UsVUFBK0Msc0JBQXBCVixLQUFLb0QsV0FFL0QsT0FBUVksR0FBd0JDLEVBQXFCLE9BQVNqRSxLQUFLa0QsUUFFckUsSUFBTWdCLEVBQW1DLFNBQWxCbEUsS0FBS1UsU0FDdEJ5RCxFQUFxQm5FLEtBQUtVLFNBQVNnRCxRQUFRLFFBQVUsRUFFM0QsT0FBU1EsR0FBbUJDLEVBQStCLEdBQVQsTUFDcEQsRUFFUWQsRUFBQUEsVUFBQUEsWUFBUixTQUFvQkwsRUFBYVcsRUFBbUI5RCxTQUU1Q3VFLEVBQW9DLENBQ3hDcEIsSUFBRyxFQUNIbkQsT0FBTSxFQUNOOEQsS0FBTTNELEtBQUtxRSxlQUFlVixHQUMxQmYsT0FBUTVDLEtBQUs0QyxPQUNiMEIsYUFBYyxPQUNkOUMsUUFBUyxDQUNQLGFBQWN4QixLQUFLdUUsZUFDbkIsZUFBZ0J2RSxLQUFLd0UsZUFBZXhCLElBRXRDeUIsa0JBQUEsU0FBa0JDLEdBQ2hCLElBQU1DLEVBQXVDLGlCQUFqQkQsRUFDdEJFLEVBQXdDLFNBQXRCNUUsS0FBS3NFLGFBRTdCLE9BQUlJLEdBQWdCQyxHQUFnQkMsRUFDM0J2QixFQUFRd0IsYUFBYUgsR0FHdkJBLENBQ1QsR0FJRXJCLEVBQVF5QixjQUNWVixFQUFjNUMsUUFBUSxnQkFBa0I0QyxFQUFjNUMsUUFBUSxlQUloRSxJQUFNdUQsRUFBYy9FLEtBQUtnRixpQkFFckJELEVBQVl4RSxTQUNkNkQsRUFBYzVDLFFBQXVCLGNBQUksaUJBQVV1RCxFQUFZeEUsVUFFL0Q2RCxFQUFjYSxLQUFPLENBQ25CQyxTQUFVSCxFQUFZMUUsT0FDdEI4RSxTQUFVSixFQUFZekUsV0FLMUIsSUFBTXVELEVBQWU3RCxLQUFLMkMsT0FBT21CLFlBQzNCc0IsRUFBZ0JwRixLQUFLMkMsT0FBTzBDLGFBRzlCRCxFQUFjRSxVQUNoQmxCLEVBQWNrQixRQUFVRixFQUFjRSxTQUlwQ0YsRUFBYzdELFFBQ2hCNkMsRUFBYzdDLE1BQVE2RCxFQUFjN0QsT0FJbEM2RCxFQUFjNUQsU0FBV00sT0FBT3lELEtBQUtILEVBQWM1RCxTQUFTZ0UsT0FBUyxJQUN2RXBCLEVBQWM1QyxRQUFVLEVBQUgsS0FDaEI0QyxFQUFjNUMsU0FDZDRELEVBQWM1RCxVQUtyQixJQUFNSyxFQUEyQixRQUFsQixFQUFBN0IsS0FBS1EsT0FBT3FCLGNBQU0sUUFBSWdDLEVBQWFoQyxPQWlCbEQsT0FoQklBLElBQ0Z1QyxFQUFjRSxhQUFlekMsR0FLM0J1RCxFQUFjSyxnQkFDaEJyQixFQUFjcUIsY0FBZ0JMLEVBQWNLLGVBSzFDTCxFQUFjTSxtQkFDaEJ0QixFQUFjc0IsaUJBQW1CTixFQUFjTSxtQkFHMUMsYUFBTXRCLEVBQ2YsRUFFUWYsRUFBQUEsVUFBQUEsV0FBUixTQUFtQnNDLEdBRWpCLE9BREEzRixLQUFLZ0QsSUFBTTJDLEVBQVExQyxjQUNaakQsSUFDVCxFQUVPcUQsRUFBQUEsVUFBQUEsR0FBUCxTQUFVdUMsR0FDUixJQUFLLENBQUMsU0FBVSxVQUFVN0MsU0FBUyxFQUFPNkMsSUFDeEMsTUFBTSxJQUFJN0YsTUFBTSw2Q0FLbEIsT0FGQUMsS0FBS2dELEtBQU0sYUFBUWhELEtBQUtnRCxJQUFLNEMsRUFBTUMsWUFFNUI3RixJQUNULEVBRU9xRCxFQUFBQSxVQUFBQSxPQUFQLFNBQWN5QyxHQUNaLEdBQW9CLGlCQUFUQSxFQUNULE1BQU0sSUFBSS9GLE1BQU0sa0NBS2xCLE9BRkFDLEtBQUtvRCxXQUFhMEMsRUFBSzdDLGNBRWZqRCxLQUFLb0QsWUFDWCxJQUFLLFVBQ0hwRCxLQUFLb0QsV0FBYSxxQkFDbEIsTUFFRixJQUFLLFdBQ0hwRCxLQUFLb0QsV0FBYSxvQkFXdEIsT0FIQXBELEtBQUtnRCxLQUFNLGFBQVFoRCxLQUFLZ0QsSUFBS2hELEtBQUtvRCxZQUNsQ3BELEtBQUtrRCxRQUFVbEQsS0FBS21ELGVBRWJuRCxJQUNULEVBY2FxRCxFQUFBQSxVQUFBQSxRQUFiLFNBQ0VNLEVBQ0E5RCxFQUNBa0csNkJBRkEsSUFBQXBDLElBQUFBLEVBQUFBLENBQUFBLFFBQ0EsSUFBQTlELElBQUFBLEVBQUFBLENBQUFBLFFBQ0EsSUFBQWtHLElBQUFBLEdBQWlCLDhHQUtqQixHQUhNL0MsRUFBTWhELEtBQUtnRyxlQUNqQmhHLEtBQUtpRyxXQUFXakcsS0FBS1UsV0FFaEJxRixFQUdILE1BQU8sQ0FBUCxFQUFPLENBQ0xHLEtBSElBLEVBQU9sRyxLQUFLcUUsZUFBZVYsR0FJL0I5RCxPQUFNLEVBQ05tRCxJQUFHLHFCQUtZLGdDQUFNaEQsS0FBS21HLFlBQVluRCxFQUFLVyxFQUFNOUQsV0FDbkQsTUFBTyxDQUFQLEVBQU8sQ0FDTHVHLFNBRklBLEVBQVdDLEVBQUFBLE9BR2ZILEtBQU1FLEVBQVN6QyxjQUdqQiwwQkFBbUIyQyxFQUFBQSxXQThDakIsTUE3Q01DLEVBQWEsSUFBSXhHLE9BRWpCeUcsS0FBT0MsRUFBSUQsS0FDakJELEVBQU0vRixPQUFTaUcsRUFBSWpHLE9BRWZpRyxFQUFJTCxVQUNBTSxFQUlGRCxFQUFJTCxTQUhOTyxFQUFBQSxFQUFBQSxPQUNBQyxFQUFVLGFBQ0pWLEVBQUksT0FHWkssRUFBTUgsU0FBV0ssRUFBSUwsU0FFckJHLEVBQU1NLFdBQWFGLEVBQ25CSixFQUFNSyxXQUFhQSxFQUViRSxFQUFpQyxRQUFsQixFQUFBWixhQUFJLEVBQUpBLEVBQU1hLG9CQUFZLFFBQUlOLEVBQUlPLFFBQy9DVCxFQUFNVSxnQkFBa0JILEVBQ3hCUCxFQUFNUyxRQUFVLHNDQUErQlQsRUFBTU0sV0FBVSx1QkFBZUMsRUFBWSxLQUV0RlosSUFHeUIsaUJBRHJCZ0IsRUFBNkMsUUFBL0IsRUFBMEIsUUFBMUIsRUFBa0IsUUFBbEIsRUFBYSxRQUFiLEVBQUFoQixFQUFLaUIsZ0JBQVEsZUFBRyxVQUFFLGVBQUVDLGNBQU0sZUFBRyxVQUFFLGVBQUVMLGdCQUVuRFIsRUFBTVMsU0FBVyxhQUFNRSxLQUt6QixJQUFBdkYsa0JBQWlCNEUsRUFBTyxlQUFnQkwsRUFBS2EsZUFDN0MsSUFBQXBGLGtCQUFpQjRFLEVBQU8sWUFBYUwsRUFBS21CLFlBQzFDLElBQUExRixrQkFBaUI0RSxFQUFPLGtCQUFtQkwsRUFBS29CLGtCQUNoRCxJQUFBM0Ysa0JBQWlCNEUsRUFBTyxpQkFBa0JMLEVBQUtxQixtQkFHakRoQixFQUFNSCxTQUFXLEtBRWpCRyxFQUFNTSxXQUFhLEtBQ25CTixFQUFNSyxXQUFhLEtBRW5CTCxFQUFNVSxnQkFBa0JSLEVBQUlPLFFBQzVCVCxFQUFNUyxRQUFVLHFDQUE4QlQsRUFBTUMsS0FBSSx1QkFBZUMsRUFBSU8sUUFBTyxNQUc5RVQsRUFHUixNQUFNRSwyQkFNSXBELEVBQUFBLGFBQWQsU0FBMkJtRSxHQUN6QixHQUFvQixpQkFBVEEsRUFDVCxNQUFNLElBQUl6SCxNQUFNLGtDQUdsQixJQUFJbUcsRUFDSixJQUNFQSxFQUFPekQsRUFBTWdGLE1BQU1ELEdBQ25CLE1BQU9FLEdBQ1B4QixFQUFPLENBQUMsRUFHVixPQUFPQSxDQUNULEVBRWM3QyxFQUFBQSxVQUFkLFdBQ0UsTUFBeUIsZ0NBQVhzRSxPQUFNLGNBQU5BLFFBQ2hCLEVBbkJjdEUsRUFBQUEsU0FBVyxXQW9CM0IsRUF2VUEsR0F5VUFuQixFQUFBQSxRQUFlbUIseUhDaldmLFNBQWlCdUUsSUFDZixTQUFZQyxHQUNWQSxFQUFBQSxNQUFBQSxRQUNBQSxFQUFBQSxNQUFBQSxRQUNBQSxFQUFBQSxLQUFBQSxNQUNELENBSkQsQ0FBWUQsRUFBQUEsV0FBQUEsRUFBQUEsU0FBUSxLQU1wQixTQUFZRSxHQUNWQSxFQUFBQSxFQUFBQSxZQUFBQSxHQUFBQSxhQUNBQSxFQUFBQSxFQUFBQSxTQUFBQSxHQUFBQSxVQUNBQSxFQUFBQSxFQUFBQSxVQUFBQSxHQUFBQSxXQUNBQSxFQUFBQSxFQUFBQSxNQUFBQSxHQUFBQSxRQUNBQSxFQUFBQSxFQUFBQSxXQUFBQSxHQUFBQSxhQUNBQSxFQUFBQSxFQUFBQSxLQUFBQSxHQUFBQSxPQUNBQSxFQUFBQSxFQUFBQSxTQUFBQSxHQUFBQSxXQUNBQSxFQUFBQSxFQUFBQSxXQUFBQSxHQUFBQSxZQUNELENBVEQsQ0FBWUYsRUFBQUEsc0JBQUFBLEVBQUFBLG9CQUFtQixLQVcvQixTQUFZRyxHQUNWQSxFQUFBQSxZQUFBQSxjQUNBQSxFQUFBQSxRQUFBQSxVQUNBQSxFQUFBQSxTQUFBQSxXQUNBQSxFQUFBQSxNQUFBQSxRQUNBQSxFQUFBQSxXQUFBQSxhQUNBQSxFQUFBQSxLQUFBQSxPQUNBQSxFQUFBQSxTQUFBQSxXQUNBQSxFQUFBQSxXQUFBQSxZQUNELENBVEQsQ0FBWUgsRUFBQUEsNkJBQUFBLEVBQUFBLDJCQUEwQixJQThJdkMsQ0FoS0QsQ0FBaUIxRixFQUFBQSxnQkFBQUEsRUFBQUEsY0FBYSxLQWtLOUIsU0FBaUI4RixJQUNmLFNBQVlDLEdBQ1ZBLEVBQUFBLEVBQUFBLGNBQUFBLEdBQUFBLGdCQUNBQSxFQUFBQSxFQUFBQSxVQUFBQSxHQUFBQSxZQUNBQSxFQUFBQSxFQUFBQSxRQUFBQSxHQUFBQSxTQUNELENBSkQsQ0FBWUQsRUFBQUEsZUFBQUEsRUFBQUEsYUFBWSxJQXlEekIsQ0ExREQsQ0FBaUI5RixFQUFBQSxlQUFBQSxFQUFBQSxhQUFZLHNHQ3BLN0IsU0FBaUJnRyxJQXNCZixTQUFZQyxHQUNWQSxFQUFBQSxJQUFBQSxNQUNBQSxFQUFBQSxLQUFBQSxPQUNBQSxFQUFBQSxNQUFBQSxRQUNBQSxFQUFBQSxLQUFBQSxNQUNELENBTEQsQ0FBWUQsRUFBQUEsU0FBQUEsRUFBQUEsT0FBTSxJQU1uQixDQTVCRCxDQUFpQmhHLEVBQUFBLFNBQUFBLEVBQUFBLE9BQU0seUlDNkV2QixTQUFpQmtHLElBQ2YsU0FBWUMsR0FDVkEsRUFBQUEsU0FBQUEsV0FDQUEsRUFBQUEsV0FBQUEsYUFDQUEsRUFBQUEsT0FBQUEsU0FDQUEsRUFBQUEsTUFBQUEsT0FDRCxDQUxELENBQVlELEVBQUFBLHVCQUFBQSxFQUFBQSxxQkFBb0IsS0FPaEMsU0FBWUUsR0FDVkEsRUFBQUEsU0FBQUEsV0FDQUEsRUFBQUEsV0FBQUEsYUFDQUEsRUFBQUEsTUFBQUEsUUFDQUEsRUFBQUEsa0JBQUFBLHFCQUNBQSxFQUFBQSxvQkFBQUEsdUJBQ0QsQ0FORCxDQUFZRixFQUFBQSxtQkFBQUEsRUFBQUEsaUJBQWdCLEtBUTVCLFNBQVlHLEdBQ1ZBLEVBQUFBLFNBQUFBLFdBQ0FBLEVBQUFBLFdBQUFBLGFBQ0FBLEVBQUFBLE9BQUFBLFNBQ0FBLEVBQUFBLE1BQUFBLFFBQ0FBLEVBQUFBLGlCQUFBQSxtQkFDQUEsRUFBQUEsaUJBQUFBLGtCQUNELENBUEQsQ0FBWUgsRUFBQUEsa0JBQUFBLEVBQUFBLGdCQUFlLEtBUzNCLFNBQVlJLEdBQ1ZBLEVBQUFBLE9BQUFBLFNBQ0FBLEVBQUFBLFVBQUFBLFlBQ0FBLEVBQUFBLE1BQUFBLE9BQ0QsQ0FKRCxDQUFZSixFQUFBQSxrQkFBQUEsRUFBQUEsZ0JBQWUsS0FNM0IsU0FBWUssR0FDVkEsRUFBQUEsVUFBQUEsWUFDQUEsRUFBQUEsV0FBQUEsY0FDQUEsRUFBQUEsTUFBQUEsT0FDRCxDQUpELENBQVlMLEVBQUFBLFlBQUFBLEVBQUFBLFVBQVMsSUFzR3RCLENBcklELENBQWlCbEcsRUFBQUEsd0JBQUFBLEVBQUFBLHNCQUFxQixLQXVJdEMsU0FBaUJ3RyxJQUNmLFNBQVlDLEdBQ1ZBLEVBQUFBLElBQUFBLE1BQ0FBLEVBQUFBLElBQUFBLE1BQ0FBLEVBQUFBLE1BQUFBLFFBQ0FBLEVBQUFBLEtBQUFBLE9BQ0FBLEVBQUFBLFNBQUFBLFVBQ0QsQ0FORCxDQUFZRCxFQUFBQSxXQUFBQSxFQUFBQSxTQUFRLEtBUXBCLFNBQVlFLEdBQ1ZBLEVBQUFBLE9BQUFBLFNBQ0FBLEVBQUFBLFNBQUFBLFVBQ0QsQ0FIRCxDQUFZRixFQUFBQSxZQUFBQSxFQUFBQSxVQUFTLElBOER0QixDQXZFRCxDQUFpQnhHLEVBQUFBLG9CQUFBQSxFQUFBQSxrQkFBaUIsdUdDbE5sQyxTQUFpQjJHLElBQ2YsU0FBWUMsR0FDVkEsRUFBQUEsRUFBQUEsWUFBQUEsR0FBQUEsY0FDQUEsRUFBQUEsRUFBQUEsZ0JBQUFBLEdBQUFBLGtCQUNBQSxFQUFBQSxFQUFBQSxjQUFBQSxHQUFBQSxnQkFDQUEsRUFBQUEsRUFBQUEsY0FBQUEsR0FBQUEsZ0JBQ0FBLEVBQUFBLEVBQUFBLFdBQUFBLEdBQUFBLGFBQ0FBLEVBQUFBLEVBQUFBLG9CQUFBQSxHQUFBQSxzQkFDQUEsRUFBQUEsRUFBQUEsY0FBQUEsR0FBQUEsZ0JBQ0FBLEVBQUFBLEVBQUFBLGVBQUFBLEdBQUFBLGlCQUNBQSxFQUFBQSxFQUFBQSxZQUFBQSxHQUFBQSxjQUNBQSxFQUFBQSxFQUFBQSxZQUFBQSxJQUFBQSxjQUNBQSxFQUFBQSxFQUFBQSxjQUFBQSxJQUFBQSxnQkFDQUEsRUFBQUEsRUFBQUEsZ0JBQUFBLElBQUFBLGtCQUNBQSxFQUFBQSxFQUFBQSxXQUFBQSxJQUFBQSxhQUNBQSxFQUFBQSxFQUFBQSxXQUFBQSxJQUFBQSxhQUNBQSxFQUFBQSxFQUFBQSxvQkFBQUEsSUFBQUEsc0JBQ0FBLEVBQUFBLEVBQUFBLGVBQUFBLElBQUFBLGlCQUNBQSxFQUFBQSxFQUFBQSxtQkFBQUEsSUFBQUEscUJBQ0FBLEVBQUFBLEVBQUFBLHdCQUFBQSxJQUFBQSwwQkFDQUEsRUFBQUEsRUFBQUEsUUFBQUEsSUFBQUEsVUFDQUEsRUFBQUEsRUFBQUEsWUFBQUEsSUFBQUEsY0FDQUEsRUFBQUEsRUFBQUEsYUFBQUEsSUFBQUEsY0FDRCxDQXRCRCxDQUFZRCxFQUFBQSxlQUFBQSxFQUFBQSxhQUFZLEtBd0J4QixTQUFZRSxHQUNWQSxFQUFBQSxFQUFBQSxjQUFBQSxHQUFBQSxnQkFDQUEsRUFBQUEsRUFBQUEsVUFBQUEsR0FBQUEsWUFDQUEsRUFBQUEsRUFBQUEsUUFBQUEsR0FBQUEsU0FDRCxDQUpELENBQVlGLEVBQUFBLFdBQUFBLEVBQUFBLFNBQVEsS0FNcEIsU0FBWUcsR0FDVkEsRUFBQUEsRUFBQUEsVUFBQUEsR0FBQUEsWUFDQUEsRUFBQUEsRUFBQUEsT0FBQUEsR0FBQUEsU0FDQUEsRUFBQUEsRUFBQUEsS0FBQUEsR0FBQUEsT0FDQUEsRUFBQUEsRUFBQUEsT0FBQUEsR0FBQUEsU0FDQUEsRUFBQUEsRUFBQUEsUUFBQUEsR0FBQUEsVUFDQUEsRUFBQUEsRUFBQUEsT0FBQUEsR0FBQUEsU0FDQUEsRUFBQUEsRUFBQUEsS0FBQUEsR0FBQUEsT0FDQUEsRUFBQUEsRUFBQUEsTUFBQUEsR0FBQUEsUUFDQUEsRUFBQUEsRUFBQUEsUUFBQUEsR0FBQUEsVUFDQUEsRUFBQUEsRUFBQUEsV0FBQUEsR0FBQUEsYUFDQUEsRUFBQUEsRUFBQUEsV0FBQUEsSUFBQUEsYUFDQUEsRUFBQUEsRUFBQUEsU0FBQUEsSUFBQUEsVUFDRCxDQWJELENBQVlILEVBQUFBLGdCQUFBQSxFQUFBQSxjQUFhLEtBZXpCLFNBQVlJLEdBQ1ZBLEVBQUFBLFFBQUFBLFVBQ0FBLEVBQUFBLE9BQUFBLFNBQ0FBLEVBQUFBLEtBQUFBLE9BQ0FBLEVBQUFBLE9BQUFBLFNBQ0FBLEVBQUFBLFFBQUFBLFVBQ0FBLEVBQUFBLE9BQUFBLFNBQ0FBLEVBQUFBLEtB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bWFpbGpldC8uL2xpYi9jbGllbnQvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vbm9kZS1tYWlsamV0Ly4vbGliL2luZGV4LnRzIiwid2VicGFjazovL25vZGUtbWFpbGpldC8uL2xpYi9yZXF1ZXN0L0h0dHBNZXRob2RzLnRzIiwid2VicGFjazovL25vZGUtbWFpbGpldC8uL2xpYi9yZXF1ZXN0L2luZGV4LnRzIiwid2VicGFjazovL25vZGUtbWFpbGpldC8uL2xpYi90eXBlcy9hcGkvQ2FtcGFpZ24udHMiLCJ3ZWJwYWNrOi8vbm9kZS1tYWlsamV0Ly4vbGliL3R5cGVzL2FwaS9Db21tb24udHMiLCJ3ZWJwYWNrOi8vbm9kZS1tYWlsamV0Ly4vbGliL3R5cGVzL2FwaS9Db250YWN0LnRzIiwid2VicGFjazovL25vZGUtbWFpbGpldC8uL2xpYi90eXBlcy9hcGkvTWVzc2FnZS50cyIsIndlYnBhY2s6Ly9ub2RlLW1haWxqZXQvLi9saWIvdHlwZXMvYXBpL1NlZ21lbnRhdGlvbi50cyIsIndlYnBhY2s6Ly9ub2RlLW1haWxqZXQvLi9saWIvdHlwZXMvYXBpL1NlbmRFbWFpbC50cyIsIndlYnBhY2s6Ly9ub2RlLW1haWxqZXQvLi9saWIvdHlwZXMvYXBpL1NlbmRlckFkZHJlc3NBbmREb21haW4udHMiLCJ3ZWJwYWNrOi8vbm9kZS1tYWlsamV0Ly4vbGliL3R5cGVzL2FwaS9TZXR0aW5nLnRzIiwid2VicGFjazovL25vZGUtbWFpbGpldC8uL2xpYi90eXBlcy9hcGkvU3RhdGlzdGljLnRzIiwid2VicGFjazovL25vZGUtbWFpbGpldC8uL2xpYi90eXBlcy9hcGkvVGVtcGxhdGUudHMiLCJ3ZWJwYWNrOi8vbm9kZS1tYWlsamV0Ly4vbGliL3R5cGVzL2FwaS9XZWJob29rLnRzIiwid2VicGFjazovL25vZGUtbWFpbGpldC8uL2xpYi90eXBlcy9hcGkvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vbm9kZS1tYWlsamV0Ly4vbGliL3V0aWxzL2luZGV4LnRzIiwid2VicGFjazovL25vZGUtbWFpbGpldC8uL2xpYi91dGlscy9pc05pbC50cyIsIndlYnBhY2s6Ly9ub2RlLW1haWxqZXQvLi9saWIvdXRpbHMvaXNOdWxsLnRzIiwid2VicGFjazovL25vZGUtbWFpbGpldC8uL2xpYi91dGlscy9pc1B1cmVPYmplY3QudHMiLCJ3ZWJwYWNrOi8vbm9kZS1tYWlsamV0Ly4vbGliL3V0aWxzL2lzVW5kZWZpbmVkLnRzIiwid2VicGFjazovL25vZGUtbWFpbGpldC8uL2xpYi91dGlscy9zZXRWYWx1ZUlmTm90TmlsLnRzIiwid2VicGFjazovL25vZGUtbWFpbGpldC8uL25vZGVfbW9kdWxlcy9iaWdudW1iZXIuanMvYmlnbnVtYmVyLmpzIiwid2VicGFjazovL25vZGUtbWFpbGpldC8uL25vZGVfbW9kdWxlcy9qc29uLWJpZ2ludC9pbmRleC5qcyIsIndlYnBhY2s6Ly9ub2RlLW1haWxqZXQvLi9ub2RlX21vZHVsZXMvanNvbi1iaWdpbnQvbGliL3BhcnNlLmpzIiwid2VicGFjazovL25vZGUtbWFpbGpldC8uL25vZGVfbW9kdWxlcy9qc29uLWJpZ2ludC9saWIvc3RyaW5naWZ5LmpzIiwid2VicGFjazovL25vZGUtbWFpbGpldC8uL25vZGVfbW9kdWxlcy91cmwtam9pbi9saWIvdXJsLWpvaW4uanMiLCJ3ZWJwYWNrOi8vbm9kZS1tYWlsamV0Ly4vbm9kZV9tb2R1bGVzL2F4aW9zL2Rpc3QvYnJvd3Nlci9heGlvcy5janMiLCJ3ZWJwYWNrOi8vbm9kZS1tYWlsamV0L3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL25vZGUtbWFpbGpldC93ZWJwYWNrL3J1bnRpbWUvZ2xvYmFsIiwid2VicGFjazovL25vZGUtbWFpbGpldC93ZWJwYWNrL3N0YXJ0dXAiXSwic291cmNlc0NvbnRlbnQiOlsiLypleHRlcm5hbCBtb2R1bGVzKi9cbi8qdXRpbHMqL1xuaW1wb3J0IHtcbiAgaXNQdXJlT2JqZWN0LFxuICBzZXRWYWx1ZUlmTm90TmlsLFxufSBmcm9tICcuLi91dGlscyc7XG4vKnR5cGVzKi9cbmltcG9ydCBIdHRwTWV0aG9kcyBmcm9tICcuLi9yZXF1ZXN0L0h0dHBNZXRob2RzJztcbmltcG9ydCB7IENsaWVudFBhcmFtcyB9IGZyb20gJy4vQ2xpZW50JztcbmltcG9ydCB7IFJlcXVlc3RDb25maWcsIFJlcXVlc3RPcHRpb25zLCBSZXF1ZXN0Q29uc3RydWN0b3JDb25maWcgfSBmcm9tICcuLi9yZXF1ZXN0L1JlcXVlc3QnO1xuLypsaWIqL1xuaW1wb3J0IFJlcXVlc3QgZnJvbSAnLi4vcmVxdWVzdCc7XG5pbXBvcnQgcGFja2FnZUpTT04gZnJvbSAnLi4vLi4vcGFja2FnZS5qc29uJztcbi8qb3RoZXIqL1xuXG5leHBvcnQgdHlwZSBDbGllbnRDb25uZWN0UGFyYW1zID0gUGljazxDbGllbnRQYXJhbXMsICdjb25maWcnIHwgJ29wdGlvbnMnPjtcblxuY2xhc3MgQ2xpZW50IHtcbiAgcHJpdmF0ZSB2ZXJzaW9uITogc3RyaW5nO1xuXG4gIHByaXZhdGUgY29uZmlnITogUmVxdWVzdENvbmZpZztcbiAgcHJpdmF0ZSBvcHRpb25zITogUmVxdWVzdE9wdGlvbnM7XG5cbiAgcHJpdmF0ZSBhcGlLZXk/OiBzdHJpbmc7XG4gIHByaXZhdGUgYXBpU2VjcmV0Pzogc3RyaW5nO1xuICBwcml2YXRlIGFwaVRva2VuPzogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKHBhcmFtczogQ2xpZW50UGFyYW1zKSB7XG4gICAgaWYgKCFpc1B1cmVPYmplY3QocGFyYW1zKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdBcmd1bWVudCBcInBhcmFtc1wiIG11c3QgYmUgb2JqZWN0Jyk7XG4gICAgfVxuXG4gICAgdGhpcy5pbml0KHRoaXMuY2xvbmVQYXJhbXMocGFyYW1zKSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0UGFja2FnZVZlcnNpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMudmVyc2lvbjtcbiAgfVxuXG4gIHB1YmxpYyBnZXRBUElLZXkoKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpS2V5O1xuICB9XG5cbiAgcHVibGljIGdldEFQSVNlY3JldCgpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZWNyZXQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0QVBJVG9rZW4oKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpVG9rZW47XG4gIH1cblxuICBwdWJsaWMgZ2V0Q29uZmlnKCkge1xuICAgIHJldHVybiB7IC4uLnRoaXMuY29uZmlnIH07XG4gIH1cblxuICBwdWJsaWMgZ2V0T3B0aW9ucygpOiBSZXF1ZXN0T3B0aW9ucyB7XG4gICAgcmV0dXJuIHsgLi4udGhpcy5vcHRpb25zIH07XG4gIH1cblxuICBwdWJsaWMgZ2V0KHJlc291cmNlOiBzdHJpbmcsIGNvbmZpZz86IFJlcXVlc3RDb25zdHJ1Y3RvckNvbmZpZykge1xuICAgIHJldHVybiBuZXcgUmVxdWVzdCh0aGlzLCBIdHRwTWV0aG9kcy5HZXQsIHJlc291cmNlLCBjb25maWcpO1xuICB9XG5cbiAgcHVibGljIHBvc3QocmVzb3VyY2U6IHN0cmluZywgY29uZmlnPzogUmVxdWVzdENvbnN0cnVjdG9yQ29uZmlnKSB7XG4gICAgcmV0dXJuIG5ldyBSZXF1ZXN0KHRoaXMsIEh0dHBNZXRob2RzLlBvc3QsIHJlc291cmNlLCBjb25maWcpO1xuICB9XG5cbiAgcHVibGljIHB1dChyZXNvdXJjZTogc3RyaW5nLCBjb25maWc/OiBSZXF1ZXN0Q29uc3RydWN0b3JDb25maWcpIHtcbiAgICByZXR1cm4gbmV3IFJlcXVlc3QodGhpcywgSHR0cE1ldGhvZHMuUHV0LCByZXNvdXJjZSwgY29uZmlnKTtcbiAgfVxuXG4gIHB1YmxpYyBkZWxldGUocmVzb3VyY2U6IHN0cmluZywgY29uZmlnPzogUmVxdWVzdENvbnN0cnVjdG9yQ29uZmlnKSB7XG4gICAgcmV0dXJuIG5ldyBSZXF1ZXN0KHRoaXMsIEh0dHBNZXRob2RzLkRlbGV0ZSwgcmVzb3VyY2UsIGNvbmZpZyk7XG4gIH1cblxuICBwcml2YXRlIGluaXQocGFyYW1zOiBDbGllbnRQYXJhbXMpIHtcbiAgICBpZiAoIWlzUHVyZU9iamVjdChwYXJhbXMpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0FyZ3VtZW50IFwicGFyYW1zXCIgbXVzdCBiZSBvYmplY3QnKTtcbiAgICB9XG5cbiAgICBjb25zdCB7XG4gICAgICBhcGlUb2tlbixcbiAgICAgIGFwaUtleSxcbiAgICAgIGFwaVNlY3JldCxcbiAgICAgIG9wdGlvbnMsXG4gICAgICBjb25maWcsXG4gICAgfSA9IHBhcmFtcztcblxuICAgIHRoaXMudmVyc2lvbiA9IENsaWVudC5wYWNrYWdlSlNPTi52ZXJzaW9uO1xuXG4gICAgdGhpcy5zZXRDb25maWcoY29uZmlnID8/IG51bGwpO1xuICAgIHRoaXMuc2V0T3B0aW9ucyhvcHRpb25zID8/IG51bGwpO1xuXG4gICAgcmV0dXJuICdhcGlUb2tlbicgaW4gcGFyYW1zXG4gICAgICA/IHRoaXMudG9rZW5Db25uZWN0U3RyYXRlZ3koYXBpVG9rZW4pXG4gICAgICA6IHRoaXMuYmFzaWNDb25uZWN0U3RyYXRlZ3koYXBpS2V5LCBhcGlTZWNyZXQpO1xuICB9XG5cbiAgcHJpdmF0ZSBjbG9uZVBhcmFtcyhwYXJhbXM6IENsaWVudFBhcmFtcykge1xuICAgIGlmICghaXNQdXJlT2JqZWN0KHBhcmFtcykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQXJndW1lbnQgXCJwYXJhbXNcIiBtdXN0IGJlIG9iamVjdCcpO1xuICAgIH1cblxuICAgIGNvbnN0IGNsb25lZFBhcmFtcyA9IHsgLi4ucGFyYW1zIH07XG5cbiAgICBpZiAocGFyYW1zLmNvbmZpZykge1xuICAgICAgY2xvbmVkUGFyYW1zLmNvbmZpZyA9IHtcbiAgICAgICAgLi4ucGFyYW1zLmNvbmZpZyxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKHBhcmFtcy5vcHRpb25zKSB7XG4gICAgICBjbG9uZWRQYXJhbXMub3B0aW9ucyA9IHtcbiAgICAgICAgLi4ucGFyYW1zLm9wdGlvbnMsXG4gICAgICB9O1xuXG4gICAgICBpZiAoY2xvbmVkUGFyYW1zLm9wdGlvbnMucHJveHkpIHtcbiAgICAgICAgY2xvbmVkUGFyYW1zLm9wdGlvbnMucHJveHkgPSB7XG4gICAgICAgICAgLi4uY2xvbmVkUGFyYW1zLm9wdGlvbnMucHJveHksXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGlmIChjbG9uZWRQYXJhbXMub3B0aW9ucy5oZWFkZXJzKSB7XG4gICAgICAgIGNsb25lZFBhcmFtcy5vcHRpb25zLmhlYWRlcnMgPSB7XG4gICAgICAgICAgLi4uY2xvbmVkUGFyYW1zLm9wdGlvbnMuaGVhZGVycyxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gY2xvbmVkUGFyYW1zO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRDb25maWcoY3VzdG9tQ29uZmlnOiBQYXJ0aWFsPFJlcXVlc3RDb25maWc+IHwgbnVsbCkge1xuICAgIGlmICh0eXBlb2YgY3VzdG9tQ29uZmlnICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdBcmd1bWVudCBcImN1c3RvbUNvbmZpZ1wiIG11c3QgYmUgb2JqZWN0IG9yIG51bGwnKTtcbiAgICB9XG5cbiAgICBjb25zdCBjb25maWcgPSB7IC4uLkNsaWVudC5jb25maWcgfTtcblxuICAgIGlmIChjdXN0b21Db25maWcgIT09IG51bGwpIHtcbiAgICAgIHNldFZhbHVlSWZOb3ROaWwoY29uZmlnLCAnaG9zdCcsIGN1c3RvbUNvbmZpZy5ob3N0KTtcbiAgICAgIHNldFZhbHVlSWZOb3ROaWwoY29uZmlnLCAnb3V0cHV0JywgY3VzdG9tQ29uZmlnLm91dHB1dCk7XG4gICAgICBzZXRWYWx1ZUlmTm90TmlsKGNvbmZpZywgJ3ZlcnNpb24nLCBjdXN0b21Db25maWcudmVyc2lvbik7XG4gICAgfVxuXG4gICAgdGhpcy5jb25maWcgPSBjb25maWc7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHByaXZhdGUgc2V0T3B0aW9ucyhvcHRpb25zOiBSZXF1ZXN0T3B0aW9ucyB8IG51bGwpIHtcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0FyZ3VtZW50IFwib3B0aW9uc1wiIG11c3QgYmUgb2JqZWN0IG9yIG51bGwnKTtcbiAgICB9XG5cbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zID8/IHt9O1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBwcml2YXRlIHRva2VuQ29ubmVjdFN0cmF0ZWd5KGFwaVRva2VuOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgICBpZiAoIWFwaVRva2VuKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ01haWxqZXQgQVBJX1RPS0VOIGlzIHJlcXVpcmVkJyk7XG4gICAgfVxuXG4gICAgdGhpcy5hcGlUb2tlbiA9IGFwaVRva2VuO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBwcml2YXRlIGJhc2ljQ29ubmVjdFN0cmF0ZWd5KGFwaUtleTogc3RyaW5nIHwgdW5kZWZpbmVkLCBhcGlTZWNyZXQ6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuICAgIGlmICghYXBpS2V5KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ01haWxqZXQgQVBJX0tFWSBpcyByZXF1aXJlZCcpO1xuICAgIH1cbiAgICBpZiAoIWFwaVNlY3JldCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdNYWlsamV0IEFQSV9TRUNSRVQgaXMgcmVxdWlyZWQnKTtcbiAgICB9XG5cbiAgICB0aGlzLmFwaUtleSA9IGFwaUtleTtcbiAgICB0aGlzLmFwaVNlY3JldCA9IGFwaVNlY3JldDtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBhcGlDb25uZWN0KGFwaUtleTogc3RyaW5nLCBhcGlTZWNyZXQ6IHN0cmluZywgcGFyYW1zPzogQ2xpZW50Q29ubmVjdFBhcmFtcykge1xuICAgIHJldHVybiBuZXcgQ2xpZW50KHsgYXBpS2V5LCBhcGlTZWNyZXQsIC4uLnBhcmFtcyB9KTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgc21zQ29ubmVjdChhcGlUb2tlbjogc3RyaW5nLCBwYXJhbXM/OiBDbGllbnRDb25uZWN0UGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBDbGllbnQoeyBhcGlUb2tlbiwgLi4ucGFyYW1zIH0pO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBjb25maWc6IFJlYWRvbmx5PFJlcXVlc3RDb25maWc+ID0gT2JqZWN0LmZyZWV6ZSh7XG4gICAgaG9zdDogJ2FwaS5tYWlsamV0LmNvbScsXG4gICAgdmVyc2lvbjogJ3YzJyxcbiAgICBvdXRwdXQ6ICdqc29uJyxcbiAgfSBhcyBjb25zdCk7XG5cbiAgcHVibGljIHN0YXRpYyBwYWNrYWdlSlNPTiA9IE9iamVjdC5mcmVlemUoe1xuICAgIC4uLnBhY2thZ2VKU09OLFxuICB9IGFzIGNvbnN0KTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgQ2xpZW50O1xuIiwiLypleHRlcm5hbCBtb2R1bGVzKi9cbi8qdXRpbHMqL1xuLyp0eXBlcyovXG5pbXBvcnQgSHR0cE1ldGhvZHMgZnJvbSAnLi9yZXF1ZXN0L0h0dHBNZXRob2RzJztcbi8qbGliKi9cbmltcG9ydCBSZXF1ZXN0IGZyb20gJy4vcmVxdWVzdC9pbmRleCc7XG5pbXBvcnQgQ2xpZW50IGZyb20gJy4vY2xpZW50L2luZGV4Jztcbi8qb3RoZXIqL1xuXG5jbGFzcyBNYWlsamV0IGV4dGVuZHMgQ2xpZW50IHtcbiAgc3RhdGljIFJlcXVlc3QgPSBSZXF1ZXN0O1xuICBzdGF0aWMgSHR0cE1ldGhvZHMgPSBIdHRwTWV0aG9kcztcbiAgc3RhdGljIENsaWVudCA9IENsaWVudDtcbn1cblxuZXhwb3J0ICogZnJvbSAnLi90eXBlcy9hcGknO1xuZXhwb3J0IHsgQ2xpZW50LCBSZXF1ZXN0LCBIdHRwTWV0aG9kcyB9O1xuZXhwb3J0IGRlZmF1bHQgTWFpbGpldDtcbiIsIi8qZXh0ZXJuYWwgbW9kdWxlcyovXG4vKnR5cGVzKi9cbi8qdXRpbHMqL1xuLypsaWIqL1xuLypvdGhlciovXG5cbmVudW0gSHR0cE1ldGhvZHMge1xuICBHZXQgPSAnZ2V0JyxcbiAgUG9zdCA9ICdwb3N0JyxcbiAgUHV0ID0gJ3B1dCcsXG4gIERlbGV0ZSA9ICdkZWxldGUnXG59XG5cbmV4cG9ydCBkZWZhdWx0IEh0dHBNZXRob2RzO1xuIiwiLypleHRlcm5hbCBtb2R1bGVzKi9cbmltcG9ydCB1cmxKb2luIGZyb20gJ3VybC1qb2luJztcbmltcG9ydCBKU09OQmlnSW50IGZyb20gJ2pzb24tYmlnaW50JztcbmltcG9ydCBheGlvcywgeyBBeGlvc0Vycm9yIH0gZnJvbSAnYXhpb3MnO1xuLyp1dGlscyovXG5pbXBvcnQgeyBzZXRWYWx1ZUlmTm90TmlsIH0gZnJvbSAnLi4vdXRpbHMvaW5kZXgnO1xuLyp0eXBlcyovXG5pbXBvcnQgeyBUT2JqZWN0IH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgTGlicmFyeVJlc3BvbnNlLCBMaWJyYXJ5TG9jYWxSZXNwb25zZSB9IGZyb20gJy4uL3R5cGVzL2FwaSc7XG5pbXBvcnQgSHR0cE1ldGhvZHMgZnJvbSAnLi9IdHRwTWV0aG9kcyc7XG5pbXBvcnQge1xuICBSZXF1ZXN0Q29uZmlnLFxuICBSZXF1ZXN0RGF0YSxcbiAgUmVxdWVzdFBhcmFtcyxcbiAgUmVxdWVzdENvbnN0cnVjdG9yQ29uZmlnLFxuICBSZXF1ZXN0QXhpb3NDb25maWcsXG4gIFN1YlBhdGgsXG59IGZyb20gJy4vUmVxdWVzdCc7XG4vKmxpYiovXG5pbXBvcnQgQ2xpZW50IGZyb20gJy4uL2NsaWVudCc7XG4vKm90aGVyKi9cblxudHlwZSBVbmtub3duUmVjID0gVE9iamVjdC5Vbmtub3duUmVjXG5cbmNvbnN0IEpTT05iID0gSlNPTkJpZ0ludCh7IHN0b3JlQXNTdHJpbmc6IHRydWUgfSk7XG5cbmNsYXNzIFJlcXVlc3Qge1xuICBwcml2YXRlIHJlYWRvbmx5IGNsaWVudDogQ2xpZW50O1xuICBwcml2YXRlIHJlYWRvbmx5IG1ldGhvZDogSHR0cE1ldGhvZHM7XG4gIHByaXZhdGUgcmVhZG9ubHkgY29uZmlnOiBQYXJ0aWFsPFJlcXVlc3RDb25maWc+O1xuICBwcml2YXRlIHJlYWRvbmx5IHJlc291cmNlOiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSB1cmw6IHN0cmluZztcbiAgcHJpdmF0ZSBzdWJQYXRoOiBTdWJQYXRoO1xuICBwcml2YXRlIGFjdGlvblBhdGg6IHN0cmluZyB8IG51bGw7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgY2xpZW50OiBDbGllbnQsXG4gICAgbWV0aG9kOiBIdHRwTWV0aG9kcyxcbiAgICByZXNvdXJjZTogc3RyaW5nLFxuICAgIGNvbmZpZz86IFJlcXVlc3RDb25zdHJ1Y3RvckNvbmZpZyxcbiAgKSB7XG4gICAgaWYgKCEoY2xpZW50IGluc3RhbmNlb2YgQ2xpZW50KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdBcmd1bWVudCBcImNsaWVudFwiIG11c3QgYmUgaW5zdGFuY2Ugb2YgQ2xpZW50Jyk7XG4gICAgfVxuXG4gICAgaWYgKCFPYmplY3QudmFsdWVzKEh0dHBNZXRob2RzKS5pbmNsdWRlcyhtZXRob2QpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0FyZ3VtZW50IFwibWV0aG9kXCIgbXVzdCBiZSBvbmUgb2Ygc3VwcG9ydGVkIG1ldGhvZHM6IGdldCwgcG9zdCwgcHV0LCBkZWxldGUnKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHJlc291cmNlICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdBcmd1bWVudCBcInJlc291cmNlXCIgbXVzdCBiZSBzdHJpbmcnKTtcbiAgICB9XG5cbiAgICB0aGlzLmNsaWVudCA9IGNsaWVudDtcblxuICAgIHRoaXMubWV0aG9kID0gbWV0aG9kO1xuICAgIHRoaXMudXJsID0gcmVzb3VyY2UudG9Mb3dlckNhc2UoKTtcbiAgICB0aGlzLnJlc291cmNlID0gcmVzb3VyY2UudG9Mb3dlckNhc2UoKTtcbiAgICB0aGlzLnN1YlBhdGggPSB0aGlzLmJ1aWxkU3ViUGF0aCgpO1xuICAgIHRoaXMuYWN0aW9uUGF0aCA9IG51bGw7XG5cbiAgICB0aGlzLmNvbmZpZyA9IHsgLi4uY29uZmlnIH07XG4gIH1cblxuICBwdWJsaWMgZ2V0VXNlckFnZW50KCkge1xuICAgIHJldHVybiBgbWFpbGpldC1hcGktdjMtbm9kZWpzLyR7dGhpcy5jbGllbnQuZ2V0UGFja2FnZVZlcnNpb24oKX1gO1xuICB9XG5cbiAgcHVibGljIGdldENyZWRlbnRpYWxzKCkge1xuICAgIHJldHVybiB7XG4gICAgICBhcGlUb2tlbjogdGhpcy5jbGllbnQuZ2V0QVBJVG9rZW4oKSxcbiAgICAgIGFwaUtleTogdGhpcy5jbGllbnQuZ2V0QVBJS2V5KCksXG4gICAgICBhcGlTZWNyZXQ6IHRoaXMuY2xpZW50LmdldEFQSVNlY3JldCgpLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGdldENvbnRlbnRUeXBlKHVybDogc3RyaW5nKSB7XG4gICAgaWYgKHR5cGVvZiB1cmwgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0FyZ3VtZW50IFwidXJsXCIgbXVzdCBiZSBzdHJpbmcnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdXJsLmluZGV4T2YoJ3RleHQ6cGxhaW4nKSA+IC0xXG4gICAgICA/ICd0ZXh0L3BsYWluJ1xuICAgICAgOiAnYXBwbGljYXRpb24vanNvbic7XG4gIH1cblxuICBwcml2YXRlIGdldFJlcXVlc3RCb2R5KGRhdGE6IFJlcXVlc3REYXRhKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIEh0dHBNZXRob2RzLlB1dCxcbiAgICAgIEh0dHBNZXRob2RzLlBvc3QsXG4gICAgICBIdHRwTWV0aG9kcy5EZWxldGUsXG4gICAgXS5pbmNsdWRlcyh0aGlzLm1ldGhvZCkgPyBkYXRhIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZEZ1bGxVcmwoKSB7XG4gICAgY29uc3QgY2xpZW50Q29uZmlnID0gdGhpcy5jbGllbnQuZ2V0Q29uZmlnKCk7XG5cbiAgICBjb25zdCBob3N0ID0gdGhpcy5jb25maWcuaG9zdCA/PyBjbGllbnRDb25maWcuaG9zdDtcbiAgICBjb25zdCB2ZXJzaW9uID0gdGhpcy5jb25maWcudmVyc2lvbiA/PyBjbGllbnRDb25maWcudmVyc2lvbjtcblxuICAgIHJldHVybiB1cmxKb2luKFJlcXVlc3QucHJvdG9jb2wsIGhvc3QsIHZlcnNpb24sIHRoaXMuc3ViUGF0aCwgdGhpcy51cmwpO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZFN1YlBhdGgoKSB7XG4gICAgaWYgKHRoaXMuYWN0aW9uUGF0aCkge1xuICAgICAgY29uc3QgaXNDb250YWN0TGlzdFdpdGhDU1YgPSB0aGlzLnJlc291cmNlID09PSAnY29udGFjdHNsaXN0JyAmJiB0aGlzLmFjdGlvblBhdGggPT09ICdjc3ZkYXRhL3RleHQ6cGxhaW4nO1xuICAgICAgY29uc3QgaXNCYXRjaEpvYldpdGhDU1YgPSB0aGlzLnJlc291cmNlID09PSAnYmF0Y2hqb2InICYmIHRoaXMuYWN0aW9uUGF0aCA9PT0gJ2NzdmVycm9yL3RleHQ6Y3N2JztcblxuICAgICAgcmV0dXJuIChpc0NvbnRhY3RMaXN0V2l0aENTViB8fCBpc0JhdGNoSm9iV2l0aENTVikgPyAnREFUQScgOiB0aGlzLnN1YlBhdGg7XG4gICAgfVxuICAgIGNvbnN0IGlzU2VuZFJlc291cmNlID0gdGhpcy5yZXNvdXJjZSA9PT0gJ3NlbmQnO1xuICAgIGNvbnN0IHJlc291cmNlQ29udGFpblNNUyA9IHRoaXMucmVzb3VyY2UuaW5kZXhPZignc21zJykgPiAtMTtcblxuICAgIHJldHVybiAoIWlzU2VuZFJlc291cmNlICYmICFyZXNvdXJjZUNvbnRhaW5TTVMpID8gJ1JFU1QnIDogJyc7XG4gIH1cblxuICBwcml2YXRlIG1ha2VSZXF1ZXN0KHVybDogc3RyaW5nLCBkYXRhOiBSZXF1ZXN0RGF0YSwgcGFyYW1zOiBSZXF1ZXN0UGFyYW1zKSB7XG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2F4aW9zL2F4aW9zI3JlcXVlc3QtY29uZmlnXG4gICAgY29uc3QgcmVxdWVzdENvbmZpZzogUmVxdWVzdEF4aW9zQ29uZmlnID0ge1xuICAgICAgdXJsLFxuICAgICAgcGFyYW1zLFxuICAgICAgZGF0YTogdGhpcy5nZXRSZXF1ZXN0Qm9keShkYXRhKSxcbiAgICAgIG1ldGhvZDogdGhpcy5tZXRob2QsXG4gICAgICByZXNwb25zZVR5cGU6ICdqc29uJyxcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgJ1VzZXItQWdlbnQnOiB0aGlzLmdldFVzZXJBZ2VudCgpLFxuICAgICAgICAnQ29udGVudC1UeXBlJzogdGhpcy5nZXRDb250ZW50VHlwZSh1cmwpLFxuICAgICAgfSxcbiAgICAgIHRyYW5zZm9ybVJlc3BvbnNlKHJlc3BvbnNlRGF0YTogdW5rbm93bikge1xuICAgICAgICBjb25zdCBkYXRhSXNTdHJpbmcgPSB0eXBlb2YgcmVzcG9uc2VEYXRhID09PSAnc3RyaW5nJztcbiAgICAgICAgY29uc3QgaXNKU09OUmVxdWVzdGVkID0gdGhpcy5yZXNwb25zZVR5cGUgPT09ICdqc29uJztcblxuICAgICAgICBpZiAocmVzcG9uc2VEYXRhICYmIGRhdGFJc1N0cmluZyAmJiBpc0pTT05SZXF1ZXN0ZWQpIHtcbiAgICAgICAgICByZXR1cm4gUmVxdWVzdC5wYXJzZVRvSlNPTmIocmVzcG9uc2VEYXRhKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXNwb25zZURhdGE7XG4gICAgICB9LFxuICAgIH07XG5cbiAgICAvLyBCUk9XU0VSIFNJREVcbiAgICBpZiAoUmVxdWVzdC5pc0Jyb3dzZXIoKSkge1xuICAgICAgcmVxdWVzdENvbmZpZy5oZWFkZXJzWydYLVVzZXItQWdlbnQnXSA9IHJlcXVlc3RDb25maWcuaGVhZGVyc1snVXNlci1BZ2VudCddO1xuICAgIH1cblxuICAgIC8vIEFVVEhcbiAgICBjb25zdCBjcmVkZW50aWFscyA9IHRoaXMuZ2V0Q3JlZGVudGlhbHMoKTtcblxuICAgIGlmIChjcmVkZW50aWFscy5hcGlUb2tlbikge1xuICAgICAgcmVxdWVzdENvbmZpZy5oZWFkZXJzWydBdXRob3JpemF0aW9uJ10gPSBgQmVhcmVyICR7Y3JlZGVudGlhbHMuYXBpVG9rZW59YDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVxdWVzdENvbmZpZy5hdXRoID0ge1xuICAgICAgICB1c2VybmFtZTogY3JlZGVudGlhbHMuYXBpS2V5IGFzIHN0cmluZyxcbiAgICAgICAgcGFzc3dvcmQ6IGNyZWRlbnRpYWxzLmFwaVNlY3JldCBhcyBzdHJpbmcsXG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIE9QVElPTlNcbiAgICBjb25zdCBjbGllbnRDb25maWcgPSB0aGlzLmNsaWVudC5nZXRDb25maWcoKTtcbiAgICBjb25zdCBjbGllbnRPcHRpb25zID0gdGhpcy5jbGllbnQuZ2V0T3B0aW9ucygpO1xuXG4gICAgLy8gMS4gVGltZW91dFxuICAgIGlmIChjbGllbnRPcHRpb25zLnRpbWVvdXQpIHtcbiAgICAgIHJlcXVlc3RDb25maWcudGltZW91dCA9IGNsaWVudE9wdGlvbnMudGltZW91dDtcbiAgICB9XG5cbiAgICAvLyAyLiBQcm94eVxuICAgIGlmIChjbGllbnRPcHRpb25zLnByb3h5KSB7XG4gICAgICByZXF1ZXN0Q29uZmlnLnByb3h5ID0gY2xpZW50T3B0aW9ucy5wcm94eTtcbiAgICB9XG5cbiAgICAvLyAzLiBIZWFkZXJzXG4gICAgaWYgKGNsaWVudE9wdGlvbnMuaGVhZGVycyAmJiBPYmplY3Qua2V5cyhjbGllbnRPcHRpb25zLmhlYWRlcnMpLmxlbmd0aCA+IDApIHtcbiAgICAgIHJlcXVlc3RDb25maWcuaGVhZGVycyA9IHtcbiAgICAgICAgLi4ucmVxdWVzdENvbmZpZy5oZWFkZXJzLFxuICAgICAgICAuLi5jbGllbnRPcHRpb25zLmhlYWRlcnMsXG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIDQuIE91dHB1dFxuICAgIGNvbnN0IG91dHB1dCA9IHRoaXMuY29uZmlnLm91dHB1dCA/PyBjbGllbnRDb25maWcub3V0cHV0O1xuICAgIGlmIChvdXRwdXQpIHtcbiAgICAgIHJlcXVlc3RDb25maWcucmVzcG9uc2VUeXBlID0gb3V0cHV0O1xuICAgIH1cblxuICAgIC8vIE5PREUgU0lERVxuICAgIC8vIDUuIE1heCByZXF1ZXN0IGNvbnRlbnQgc2l6ZVxuICAgIGlmIChjbGllbnRPcHRpb25zLm1heEJvZHlMZW5ndGgpIHtcbiAgICAgIHJlcXVlc3RDb25maWcubWF4Qm9keUxlbmd0aCA9IGNsaWVudE9wdGlvbnMubWF4Qm9keUxlbmd0aDtcbiAgICB9XG5cbiAgICAvLyBOT0RFIFNJREVcbiAgICAvLyA2LiBNYXggcmVzcG9uc2UgY29udGVudCBzaXplXG4gICAgaWYgKGNsaWVudE9wdGlvbnMubWF4Q29udGVudExlbmd0aCkge1xuICAgICAgcmVxdWVzdENvbmZpZy5tYXhDb250ZW50TGVuZ3RoID0gY2xpZW50T3B0aW9ucy5tYXhDb250ZW50TGVuZ3RoO1xuICAgIH1cblxuICAgIHJldHVybiBheGlvcyhyZXF1ZXN0Q29uZmlnKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0QmFzZVVSTChiYXNlVXJsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnVybCA9IGJhc2VVcmwudG9Mb3dlckNhc2UoKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHB1YmxpYyBpZCh2YWx1ZTogc3RyaW5nIHwgbnVtYmVyKSB7XG4gICAgaWYgKCFbJ3N0cmluZycsICdudW1iZXInXS5pbmNsdWRlcyh0eXBlb2YgdmFsdWUpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0FyZ3VtZW50IFwidmFsdWVcIiBtdXN0IGJlIHN0cmluZyBvciBudW1iZXInKTtcbiAgICB9XG5cbiAgICB0aGlzLnVybCA9IHVybEpvaW4odGhpcy51cmwsIHZhbHVlLnRvU3RyaW5nKCkpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBwdWJsaWMgYWN0aW9uKG5hbWU6IHN0cmluZykge1xuICAgIGlmICh0eXBlb2YgbmFtZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQXJndW1lbnQgXCJuYW1lXCIgbXVzdCBiZSBzdHJpbmcnKTtcbiAgICB9XG5cbiAgICB0aGlzLmFjdGlvblBhdGggPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG5cbiAgICBzd2l0Y2ggKHRoaXMuYWN0aW9uUGF0aCkge1xuICAgICAgY2FzZSAnY3N2ZGF0YSc6IHtcbiAgICAgICAgdGhpcy5hY3Rpb25QYXRoID0gJ2NzdmRhdGEvdGV4dDpwbGFpbic7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAnY3N2ZXJyb3InOiB7XG4gICAgICAgIHRoaXMuYWN0aW9uUGF0aCA9ICdjc3ZlcnJvci90ZXh0OmNzdic7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgZGVmYXVsdDoge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnVybCA9IHVybEpvaW4odGhpcy51cmwsIHRoaXMuYWN0aW9uUGF0aCk7XG4gICAgdGhpcy5zdWJQYXRoID0gdGhpcy5idWlsZFN1YlBhdGgoKTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHJlcXVlc3Q8Qm9keSBleHRlbmRzIFJlcXVlc3REYXRhPihcbiAgICBkYXRhPzogUmVxdWVzdERhdGEsXG4gICAgcGFyYW1zPzogUmVxdWVzdFBhcmFtcyxcbiAgICBwZXJmb3JtQVBJQ2FsbD86IHRydWUsXG4gICk6IFByb21pc2U8TGlicmFyeVJlc3BvbnNlPEJvZHk+PlxuXG4gIHB1YmxpYyBhc3luYyByZXF1ZXN0PEJvZHkgZXh0ZW5kcyBSZXF1ZXN0RGF0YSwgUGFyYW1zIGV4dGVuZHMgVW5rbm93blJlYz4oXG4gICAgZGF0YT86IEJvZHksXG4gICAgcGFyYW1zPzogUGFyYW1zLFxuICAgIHBlcmZvcm1BUElDYWxsPzogZmFsc2UsXG4gICk6IFByb21pc2U8TGlicmFyeUxvY2FsUmVzcG9uc2U8Qm9keSwgUGFyYW1zPj5cblxuICBwdWJsaWMgYXN5bmMgcmVxdWVzdDxCb2R5IGV4dGVuZHMgUmVxdWVzdERhdGEsIFBhcmFtcyBleHRlbmRzIFVua25vd25SZWM+KFxuICAgIGRhdGE6IFJlcXVlc3REYXRhIHwgQm9keSA9IHt9LFxuICAgIHBhcmFtczogUmVxdWVzdFBhcmFtcyB8IFBhcmFtcyA9IHt9LFxuICAgIHBlcmZvcm1BUElDYWxsID0gdHJ1ZSxcbiAgKTogUHJvbWlzZTxMaWJyYXJ5UmVzcG9uc2U8Qm9keT4gfCBMaWJyYXJ5TG9jYWxSZXNwb25zZTxCb2R5LCBQYXJhbXM+PiB7XG4gICAgY29uc3QgdXJsID0gdGhpcy5idWlsZEZ1bGxVcmwoKTtcbiAgICB0aGlzLnNldEJhc2VVUkwodGhpcy5yZXNvdXJjZSk7XG5cbiAgICBpZiAoIXBlcmZvcm1BUElDYWxsKSB7XG4gICAgICBjb25zdCBib2R5ID0gdGhpcy5nZXRSZXF1ZXN0Qm9keShkYXRhKTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgYm9keSxcbiAgICAgICAgcGFyYW1zLFxuICAgICAgICB1cmwsXG4gICAgICB9IGFzIExpYnJhcnlMb2NhbFJlc3BvbnNlPEJvZHksIFBhcmFtcz47XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5tYWtlUmVxdWVzdCh1cmwsIGRhdGEsIHBhcmFtcyk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICByZXNwb25zZSxcbiAgICAgICAgYm9keTogcmVzcG9uc2UuZGF0YSxcbiAgICAgIH07XG4gICAgfSBjYXRjaCAoZXJyOiB1bmtub3duKSB7XG4gICAgICBpZiAoZXJyIGluc3RhbmNlb2YgQXhpb3NFcnJvcikge1xuICAgICAgICBjb25zdCBlcnJvcjogYW55ID0gbmV3IEVycm9yKCk7XG5cbiAgICAgICAgZXJyb3IuY29kZSA9IGVyci5jb2RlO1xuICAgICAgICBlcnJvci5jb25maWcgPSBlcnIuY29uZmlnO1xuXG4gICAgICAgIGlmIChlcnIucmVzcG9uc2UpIHtcbiAgICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICBzdGF0dXMsXG4gICAgICAgICAgICBzdGF0dXNUZXh0LFxuICAgICAgICAgICAgZGF0YTogYm9keSxcbiAgICAgICAgICB9ID0gZXJyLnJlc3BvbnNlO1xuXG4gICAgICAgICAgZXJyb3IucmVzcG9uc2UgPSBlcnIucmVzcG9uc2U7XG5cbiAgICAgICAgICBlcnJvci5zdGF0dXNDb2RlID0gc3RhdHVzO1xuICAgICAgICAgIGVycm9yLnN0YXR1c1RleHQgPSBzdGF0dXNUZXh0O1xuXG4gICAgICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gYm9keT8uRXJyb3JNZXNzYWdlID8/IGVyci5tZXNzYWdlO1xuICAgICAgICAgIGVycm9yLm9yaWdpbmFsTWVzc2FnZSA9IGVycm9yTWVzc2FnZTtcbiAgICAgICAgICBlcnJvci5tZXNzYWdlID0gYFVuc3VjY2Vzc2Z1bDogU3RhdHVzIENvZGU6IFwiJHtlcnJvci5zdGF0dXNDb2RlfVwiIE1lc3NhZ2U6IFwiJHtlcnJvck1lc3NhZ2V9XCJgO1xuXG4gICAgICAgICAgaWYgKGJvZHkpIHtcbiAgICAgICAgICAgIC8vIGh0dHBzOi8vZGV2Lm1haWxqZXQuY29tL2VtYWlsL2d1aWRlcy9zZW5kLWFwaS12MzEvI3NlbmQtaW4tYnVsa1xuICAgICAgICAgICAgY29uc3QgZnVsbE1lc3NhZ2UgPSBib2R5Lk1lc3NhZ2VzPy5bMF0/LkVycm9ycz8uWzBdPy5FcnJvck1lc3NhZ2U7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGZ1bGxNZXNzYWdlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICBlcnJvci5tZXNzYWdlICs9IGA7XFxuJHtmdWxsTWVzc2FnZX1gO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyB2My4xIGNhc2VcbiAgICAgICAgICAgIC8vIGh0dHBzOi8vZGV2Lm1haWxqZXQuY29tL2VtYWlsL2d1aWRlcy9zZW5kLWFwaS12MzEvI3NhbmRib3gtbW9kZVxuICAgICAgICAgICAgc2V0VmFsdWVJZk5vdE5pbChlcnJvciwgJ0Vycm9yTWVzc2FnZScsIGJvZHkuRXJyb3JNZXNzYWdlKTtcbiAgICAgICAgICAgIHNldFZhbHVlSWZOb3ROaWwoZXJyb3IsICdFcnJvckNvZGUnLCBib2R5LkVycm9yQ29kZSk7XG4gICAgICAgICAgICBzZXRWYWx1ZUlmTm90TmlsKGVycm9yLCAnRXJyb3JJZGVudGlmaWVyJywgYm9keS5FcnJvcklkZW50aWZpZXIpO1xuICAgICAgICAgICAgc2V0VmFsdWVJZk5vdE5pbChlcnJvciwgJ0Vycm9yUmVsYXRlZFRvJywgYm9keS5FcnJvclJlbGF0ZWRUbyk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGVycm9yLnJlc3BvbnNlID0gbnVsbDtcblxuICAgICAgICAgIGVycm9yLnN0YXR1c0NvZGUgPSBudWxsO1xuICAgICAgICAgIGVycm9yLnN0YXR1c1RleHQgPSBudWxsO1xuXG4gICAgICAgICAgZXJyb3Iub3JpZ2luYWxNZXNzYWdlID0gZXJyLm1lc3NhZ2U7XG4gICAgICAgICAgZXJyb3IubWVzc2FnZSA9IGBVbnN1Y2Nlc3NmdWw6IEVycm9yIENvZGU6IFwiJHtlcnJvci5jb2RlfVwiIE1lc3NhZ2U6IFwiJHtlcnIubWVzc2FnZX1cImA7XG4gICAgICAgIH1cblxuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH1cblxuICAgICAgdGhyb3cgZXJyO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgcHJvdG9jb2wgPSAnaHR0cHM6Ly8nIGFzIGNvbnN0O1xuXG4gIHB1YmxpYyBzdGF0aWMgcGFyc2VUb0pTT05iKHRleHQ6IHN0cmluZykge1xuICAgIGlmICh0eXBlb2YgdGV4dCAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQXJndW1lbnQgXCJ0ZXh0XCIgbXVzdCBiZSBzdHJpbmcnKTtcbiAgICB9XG5cbiAgICBsZXQgYm9keTtcbiAgICB0cnkge1xuICAgICAgYm9keSA9IEpTT05iLnBhcnNlKHRleHQpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGJvZHkgPSB7fTtcbiAgICB9XG5cbiAgICByZXR1cm4gYm9keTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgaXNCcm93c2VyKCkge1xuICAgIHJldHVybiB0eXBlb2Ygd2luZG93ID09PSAnb2JqZWN0JztcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBSZXF1ZXN0O1xuIiwiaW1wb3J0IHsgQ29tbW9uIH0gZnJvbSAnLi9Db21tb24nO1xuXG5leHBvcnQgbmFtZXNwYWNlIERyYWZ0Q2FtcGFpZ24ge1xuICBleHBvcnQgZW51bSBFZGl0TW9kZSB7XG4gICAgVG9vbDIgPSAndG9vbDInLFxuICAgIEhUTUwyID0gJ2h0bWwyJyxcbiAgICBNSk1MID0gJ21qbWwnXG4gIH1cblxuICBleHBvcnQgZW51bSBDYW1wYWlnbkRyYWZ0U3RhdHVzIHtcbiAgICBBWENhbmNlbGVkID0gLTMsXG4gICAgRGVsZXRlZCA9IC0yLFxuICAgIEFyY2hpdmVkID0gLTEsXG4gICAgRHJhZnQgPSAwLFxuICAgIFByb2dyYW1tZWQgPSAxLFxuICAgIFNlbnQgPSAyLFxuICAgIEFYVGVzdGVkID0gMyxcbiAgICBBWFNlbGVjdGVkID0gNFxuICB9XG5cbiAgZXhwb3J0IGVudW0gQ2FtcGFpZ25EcmFmdFNlbmRpbmdTdGF0dXMge1xuICAgIEFYQ2FuY2VsbGVkID0gJ0FYQ2FuY2VsbGVkJyxcbiAgICBEZWxldGVkID0gJ0RlbGV0ZWQnLFxuICAgIEFyY2hpdmVkID0gJ0FyY2hpdmVkJyxcbiAgICBEcmFmdCA9ICdEcmFmdCcsXG4gICAgUHJvZ3JhbW1lZCA9ICdQcm9ncmFtbWVkJyxcbiAgICBTZW50ID0gJ1NlbnQnLFxuICAgIEFYVGVzdGVkID0gJ0FYVGVzdGVkJyxcbiAgICBBWFNlbGVjdGVkID0gJ0FYU2VsZWN0ZWQnXG4gIH1cblxuICBleHBvcnQgaW50ZXJmYWNlIFJlY2lwaWVudCB7XG4gICAgRW1haWw6IHN0cmluZztcbiAgICBOYW1lPzogc3RyaW5nXG4gIH1cblxuICBleHBvcnQgaW50ZXJmYWNlIENhbXBhaWduRHJhZnQ8QVhUZXN0aW5nID0gQ29tbW9uLlVua25vd25SZWM+IHtcbiAgICBJRDogbnVtYmVyO1xuICAgIEFYRnJhY3Rpb246IG51bWJlcjtcbiAgICBBWEZyYWN0aW9uTmFtZTogc3RyaW5nO1xuICAgIEFYVGVzdGluZzogQVhUZXN0aW5nO1xuICAgIEN1cnJlbnQ6IG51bWJlcjtcbiAgICBFZGl0TW9kZTogRWRpdE1vZGU7XG4gICAgSXNTdGFycmVkOiBib29sZWFuO1xuICAgIElzVGV4dFBhcnRJbmNsdWRlZDogYm9vbGVhbjtcbiAgICBSZXBseUVtYWlsOiBzdHJpbmc7XG4gICAgU2VuZGVyTmFtZTogc3RyaW5nO1xuICAgIFRlbXBsYXRlSUQ6IG51bWJlcjtcbiAgICBUaXRsZTogc3RyaW5nO1xuICAgIENhbXBhaWduSUQ6IG51bWJlcjtcbiAgICBDb250YWN0c0xpc3RJRDogbnVtYmVyO1xuICAgIENyZWF0ZWRBdDogc3RyaW5nO1xuICAgIERlbGl2ZXJlZEF0OiBzdHJpbmc7XG4gICAgTG9jYWxlOiBzdHJpbmc7XG4gICAgTW9kaWZpZWRBdDogc3RyaW5nO1xuICAgIFByZXNldDogc3RyaW5nO1xuICAgIFNlZ21lbnRhdGlvbklEOiBudW1iZXI7XG4gICAgU2VuZGVyOiBzdHJpbmc7XG4gICAgU2VuZGVyRW1haWw6IHN0cmluZztcbiAgICBTdGF0dXM6IENhbXBhaWduRHJhZnRTdGF0dXM7XG4gICAgU3ViamVjdDogc3RyaW5nO1xuICAgIFVybDogc3RyaW5nO1xuICAgIFVzZWQ6IGJvb2xlYW47XG4gIH1cblxuICBleHBvcnQgaW50ZXJmYWNlIENhbXBhaWduRHJhZnREZXRhaWxDb250ZW50PEhlYWRlcnMgPSBDb21tb24uVW5rbm93blJlYz4ge1xuICAgIEhlYWRlcnM6IEhlYWRlcnM7XG4gICAgJ0h0bWwtcGFydCc6IHN0cmluZztcbiAgICAnVGV4dC1wYXJ0Jzogc3RyaW5nO1xuICAgIE1KTUxDb250ZW50OiBzdHJpbmc7XG4gIH1cblxuICBleHBvcnQgaW50ZXJmYWNlIENhbXBhaWduRHJhZnRTY2hlZHVsZSB7XG4gICAgRGF0ZTogc3RyaW5nO1xuICAgIFN0YXR1czogc3RyaW5nO1xuICB9XG5cbiAgLy8gUkVRVUVTVCBQQVJUXG4gIGV4cG9ydCB0eXBlIFBvc3RDYW1wYWlnbkRyYWZ0Qm9keTxBWFRlc3RpbmcgPSBDb21tb24uVW5rbm93blJlYz4gPSB7XG4gICAgTG9jYWxlOiBzdHJpbmc7XG4gICAgU3ViamVjdDogc3RyaW5nO1xuXG4gICAgQVhGcmFjdGlvbj86IG51bWJlcjtcbiAgICBBWEZyYWN0aW9uTmFtZT86IHN0cmluZztcbiAgICBBWFRlc3Rpbmc/OiBBWFRlc3Rpbmc7XG4gICAgQ3VycmVudD86IG51bWJlcjtcbiAgICBFZGl0TW9kZT86IEVkaXRNb2RlO1xuICAgIElzU3RhcnJlZD86IGJvb2xlYW47XG4gICAgSXNUZXh0UGFydEluY2x1ZGVkPzogYm9vbGVhbjtcbiAgICBSZXBseUVtYWlsPzogc3RyaW5nO1xuICAgIFNlbmRlck5hbWU/OiBzdHJpbmc7XG4gICAgVGVtcGxhdGVJRD86IG51bWJlcjtcbiAgICBUaXRsZT86IHN0cmluZztcbiAgICBDb250YWN0c0xpc3RJRD86IG51bWJlcjtcbiAgICBDb250YWN0c0xpc3RBbHQ/OiBzdHJpbmc7XG4gICAgU2VnbWVudGF0aW9uSUQ/OiBudW1iZXI7XG4gICAgU2VnbWVudGF0aW9uQWx0Pzogc3RyaW5nO1xuICAgIFNlbmRlcj86IHN0cmluZztcbiAgICBTZW5kZXJFbWFpbD86IHN0cmluZztcbiAgfVxuXG4gIGV4cG9ydCB0eXBlIFB1dENhbXBhaWduRHJhZnRCb2R5PEFYVGVzdGluZyA9IENvbW1vbi5Vbmtub3duUmVjPiA9XG4gICAgT21pdDxQYXJ0aWFsPFBvc3RDYW1wYWlnbkRyYWZ0Qm9keTxBWFRlc3Rpbmc+PiwgJ0NvbnRhY3RzTGlzdEFsdCc+ICZcbiAge1xuICAgIFN0YXR1cz86IENhbXBhaWduRHJhZnRTdGF0dXNcbiAgfVxuXG4gIGV4cG9ydCB0eXBlIEdldENhbXBhaWduRHJhZnRRdWVyeVBhcmFtcyA9IFBhcnRpYWw8Q29tbW9uLlBhZ2luYXRpb24+ICYge1xuICAgIEFYVGVzdGluZz86IG51bWJlcjtcbiAgICBDYW1wYWlnbj86IG51bWJlcjtcbiAgICBDb250YWN0c0xpc3Q/OiBudW1iZXI7XG4gICAgRGVsaXZlcmVkQXQ/OiBzdHJpbmc7XG4gICAgRWRpdE1vZGU/OiBFZGl0TW9kZTtcbiAgICBJc0FyY2hpdmVkPzogYm9vbGVhbjtcbiAgICBJc0NhbXBhaWduPzogYm9vbGVhbjtcbiAgICBJc0RlbGV0ZWQ/OiBib29sZWFuO1xuICAgIElzSGFuZGxlZD86IGJvb2xlYW47XG4gICAgSXNTdGFycmVkPzogYm9vbGVhbjtcbiAgICBNb2RpZmllZD86IGJvb2xlYW47XG4gICAgTmV3c0xldHRlclRlbXBsYXRlPzogbnVtYmVyO1xuICAgIFN0YXR1cz86IENhbXBhaWduRHJhZnRTdGF0dXM7XG4gICAgU3ViamVjdD86IHN0cmluZztcbiAgICBUZW1wbGF0ZT86IG51bWJlcjtcbiAgfVxuXG4gIGV4cG9ydCB0eXBlIFBvc3RDYW1wYWlnbkRyYWZ0RGV0YWlsQ29udGVudEJvZHk8SGVhZGVycyA9IENvbW1vbi5Vbmtub3duUmVjPiA9XG4gICAgUGFydGlhbDxDYW1wYWlnbkRyYWZ0RGV0YWlsQ29udGVudDxIZWFkZXJzPj5cblxuICBleHBvcnQgdHlwZSBQb3N0Q2FtcGFpZ25EcmFmdFNjaGVkdWxlQm9keSA9IHtcbiAgICBEYXRlOiBzdHJpbmc7XG4gIH1cblxuICBleHBvcnQgdHlwZSBQdXRDYW1wYWlnbkRyYWZ0U2NoZWR1bGVCb2R5ID0gUGFydGlhbDxQb3N0Q2FtcGFpZ25EcmFmdFNjaGVkdWxlQm9keT5cblxuICBleHBvcnQgdHlwZSBQb3N0Q2FtcGFpZ25EcmFmdFRlc3RCb2R5ID0ge1xuICAgIFJlY2lwaWVudHM6IFJlY2lwaWVudFtdXG4gIH1cblxuICAvLyBSRVNQT05TRSBQQVJUXG4gIHR5cGUgQ2FtcGFpZ25EcmFmdFJlc3BvbnNlID0gQ29tbW9uLlJlc3BvbnNlPENhbXBhaWduRHJhZnRbXT47XG4gIHR5cGUgQ2FtcGFpZ25EcmFmdFNjaGVkdWxlUmVzcG9uc2UgPSBDb21tb24uUmVzcG9uc2U8Q2FtcGFpZ25EcmFmdFNjaGVkdWxlW10+O1xuICB0eXBlIENhbXBhaWduRHJhZnREZXRhaWxDb250ZW50UmVzcG9uc2U8SGVhZGVycyA9IENvbW1vbi5Vbmtub3duUmVjPiA9XG4gICAgQ29tbW9uLlJlc3BvbnNlPEFycmF5PENhbXBhaWduRHJhZnREZXRhaWxDb250ZW50PEhlYWRlcnM+Pj47XG4gIHR5cGUgQ2FtcGFpZ25EcmFmdFN0YXR1c1Jlc3BvbnNlID1cbiAgICBDb21tb24uUmVzcG9uc2U8QXJyYXk8eyBTdGF0dXM6IENhbXBhaWduRHJhZnRTZW5kaW5nU3RhdHVzIH0+PjtcblxuICBleHBvcnQgdHlwZSBQb3N0Q2FtcGFpZ25EcmFmdFJlc3BvbnNlID0gQ2FtcGFpZ25EcmFmdFJlc3BvbnNlXG4gIGV4cG9ydCB0eXBlIFB1dENhbXBhaWduRHJhZnRSZXNwb25zZSA9IENhbXBhaWduRHJhZnRSZXNwb25zZVxuICBleHBvcnQgdHlwZSBHZXRDYW1wYWlnbkRyYWZ0UmVzcG9uc2UgPSBDYW1wYWlnbkRyYWZ0UmVzcG9uc2VcblxuICBleHBvcnQgdHlwZSBQb3N0Q2FtcGFpZ25EcmFmdFNjaGVkdWxlUmVzcG9uc2UgPSBDYW1wYWlnbkRyYWZ0U2NoZWR1bGVSZXNwb25zZVxuICBleHBvcnQgdHlwZSBQdXRDYW1wYWlnbkRyYWZ0U2NoZWR1bGVSZXNwb25zZSA9IENhbXBhaWduRHJhZnRTY2hlZHVsZVJlc3BvbnNlXG4gIGV4cG9ydCB0eXBlIEdldENhbXBhaWduRHJhZnRTY2hlZHVsZVJlc3BvbnNlID0gQ2FtcGFpZ25EcmFmdFNjaGVkdWxlUmVzcG9uc2VcblxuICBleHBvcnQgdHlwZSBQb3N0Q2FtcGFpZ25EcmFmdERldGFpbENvbnRlbnRSZXNwb25zZTxIZWFkZXJzID0gQ29tbW9uLlVua25vd25SZWM+ID1cbiAgICBDYW1wYWlnbkRyYWZ0RGV0YWlsQ29udGVudFJlc3BvbnNlPEhlYWRlcnM+XG4gIGV4cG9ydCB0eXBlIEdldENhbXBhaWduRHJhZnREZXRhaWxDb250ZW50UmVzcG9uc2U8SGVhZGVycyA9IENvbW1vbi5Vbmtub3duUmVjPiA9XG4gICAgQ2FtcGFpZ25EcmFmdERldGFpbENvbnRlbnRSZXNwb25zZTxIZWFkZXJzPlxuXG4gIGV4cG9ydCB0eXBlIFBvc3RDYW1wYWlnbkRyYWZ0U2VuZCA9IENhbXBhaWduRHJhZnRTdGF0dXNSZXNwb25zZVxuICBleHBvcnQgdHlwZSBQb3N0Q2FtcGFpZ25EcmFmdFRlc3QgPSBDYW1wYWlnbkRyYWZ0U3RhdHVzUmVzcG9uc2VcbiAgZXhwb3J0IHR5cGUgR2V0Q2FtcGFpZ25EcmFmdFN0YXR1cyA9IENhbXBhaWduRHJhZnRTdGF0dXNSZXNwb25zZVxufVxuXG5leHBvcnQgbmFtZXNwYWNlIFNlbnRDYW1wYWlnbiB7XG4gIGV4cG9ydCBlbnVtIENhbXBhaWduVHlwZSB7XG4gICAgVHJhbnNhY3Rpb25hbCA9IDEsXG4gICAgTWFya2V0aW5nID0gMixcbiAgICBVbmtub3duID0gMyxcbiAgfVxuXG4gIGV4cG9ydCBpbnRlcmZhY2UgQ2FtcGFpZ24ge1xuICAgIElEOiBudW1iZXI7XG4gICAgSXNEZWxldGVkOiBib29sZWFuO1xuICAgIElzU3RhcnJlZDogYm9vbGVhbjtcbiAgICBDYW1wYWlnblR5cGU6IENhbXBhaWduVHlwZTtcbiAgICBDcmVhdGVkQXQ6IHN0cmluZztcbiAgICBDdXN0b21WYWx1ZTogc3RyaW5nO1xuICAgIEZpcnN0TWVzc2FnZUlEOiBudW1iZXI7XG4gICAgRnJvbUVtYWlsOiBzdHJpbmc7XG4gICAgRnJvbUlEOiBudW1iZXI7XG4gICAgRnJvbU5hbWU6IHN0cmluZztcbiAgICBIYXNIdG1sQ291bnQ6IG51bWJlcjtcbiAgICBIYXNUeHRDb3VudDogbnVtYmVyO1xuICAgIExpc3RJRDogbnVtYmVyO1xuICAgIE5ld3NMZXR0ZXJJRDogbnVtYmVyO1xuICAgIFNlZ21lbnRhdGlvbklEOiBudW1iZXI7XG4gICAgU2VuZEVuZEF0OiBzdHJpbmc7XG4gICAgU2VuZFN0YXJ0QXQ6IHN0cmluZztcbiAgICBTcGFtYXNzU2NvcmU6IG51bWJlcjtcbiAgICBTdWJqZWN0OiBzdHJpbmc7XG4gICAgV29ya2Zsb3dJRDogbnVtYmVyO1xuICB9XG5cbiAgLy8gUkVRVUVTVCBQQVJUXG4gIGV4cG9ydCB0eXBlIFB1dENhbXBhaWduQm9keSA9IHtcbiAgICBJc0RlbGV0ZWQ/OiBib29sZWFuO1xuICAgIElzU3RhcnJlZD86IGJvb2xlYW47XG4gIH1cblxuICBleHBvcnQgdHlwZSBHZXRDYW1wYWlnblF1ZXJ5UGFyYW1zID0gUGFydGlhbDxDb21tb24uVGltZXN0YW1wUGVyaW9kPiAmXG4gICAgUGFydGlhbDxDb21tb24uUGFnaW5hdGlvbj4gJlxuICB7XG4gICAgQ2FtcGFpZ25JRD86IG51bWJlcjtcbiAgICBDb250YWN0c0xpc3RJRD86IG51bWJlcjtcbiAgICBDdXN0b21DYW1wYWlnbj86IHN0cmluZztcbiAgICBGcm9tPzogc3RyaW5nO1xuICAgIEZyb21Eb21haW4/OiBzdHJpbmc7XG4gICAgRnJvbUlEPzogbnVtYmVyO1xuICAgIEZyb21UeXBlPzogQ2FtcGFpZ25UeXBlO1xuICAgIElzRGVsZXRlZD86IGJvb2xlYW47XG4gICAgSXNOZXdzbGV0dGVyVG9vbD86IGJvb2xlYW47XG4gICAgSXNTdGFycmVkPzogYm9vbGVhbjtcbiAgICBQZXJpb2Q/OiBDb21tb24uUGVyaW9kO1xuICAgIFdvcmtmbG93SUQ/OiBudW1iZXI7XG4gIH1cblxuICAvLyBSRVNQT05TRSBQQVJUXG4gIHR5cGUgQ2FtcGFpZ25SZXNwb25zZSA9IENvbW1vbi5SZXNwb25zZTxDYW1wYWlnbltdPjtcblxuICBleHBvcnQgdHlwZSBQdXRDYW1wYWlnblJlc3BvbnNlID0gQ2FtcGFpZ25SZXNwb25zZVxuICBleHBvcnQgdHlwZSBHZXRDYW1wYWlnblJlc3BvbnNlID0gQ2FtcGFpZ25SZXNwb25zZVxufVxuIiwiZXhwb3J0IG5hbWVzcGFjZSBDb21tb24ge1xuICBleHBvcnQgdHlwZSBVbmtub3duUmVjID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj5cblxuICBleHBvcnQgaW50ZXJmYWNlIFBhZ2luYXRpb24ge1xuICAgIGNvdW50T25seTogYm9vbGVhbjtcblxuICAgIExpbWl0OiBudW1iZXI7XG4gICAgT2Zmc2V0OiBudW1iZXI7XG4gICAgU29ydDogc3RyaW5nO1xuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBUaW1lc3RhbXBQZXJpb2Qge1xuICAgIEZyb21UUzogc3RyaW5nIHwgbnVtYmVyO1xuICAgIFRvVFM6IHN0cmluZyB8IG51bWJlcjtcbiAgfVxuXG4gIGV4cG9ydCB0eXBlIFJlc3BvbnNlPEVudGl0eT4gPSB7XG4gICAgQ291bnQ6IG51bWJlcjtcbiAgICBUb3RhbDogbnVtYmVyO1xuICAgIERhdGE6IEVudGl0eTtcbiAgfVxuXG4gIGV4cG9ydCBlbnVtIFBlcmlvZCB7XG4gICAgRGF5ID0gJ0RheScsXG4gICAgV2VlayA9ICdXZWVrJyxcbiAgICBNb250aCA9ICdNb250aCcsXG4gICAgWWVhciA9ICdZZWFyJyxcbiAgfVxufVxuIiwiaW1wb3J0IHsgQ29tbW9uIH0gZnJvbSAnLi9Db21tb24nO1xuXG5leHBvcnQgbmFtZXNwYWNlIENvbnRhY3Qge1xuICBleHBvcnQgaW50ZXJmYWNlIENvbnRhY3Qge1xuICAgIElEOiBudW1iZXI7XG4gICAgSXNFeGNsdWRlZEZyb21DYW1wYWlnbnM6IGJvb2xlYW47XG4gICAgTmFtZTogc3RyaW5nO1xuICAgIENyZWF0ZWRBdDogc3RyaW5nO1xuICAgIERlbGl2ZXJlZENvdW50OiBudW1iZXI7XG4gICAgRW1haWw6IHN0cmluZztcbiAgICBFeGNsdXNpb25Gcm9tQ2FtcGFpZ25zVXBkYXRlZEF0OiBzdHJpbmc7XG4gICAgSXNPcHRJblBlbmRpbmc6IGJvb2xlYW47XG4gICAgSXNTcGFtQ29tcGxhaW5pbmc6IGJvb2xlYW47XG4gICAgTGFzdEFjdGl2aXR5QXQ6IHN0cmluZztcbiAgICBMYXN0VXBkYXRlQXQ6IHN0cmluZztcbiAgfVxuXG4gIC8vIFJFUVVFU1QgUEFSVFxuICBleHBvcnQgdHlwZSBQb3N0Q29udGFjdEJvZHkgPSB7XG4gICAgRW1haWw6IHN0cmluZztcbiAgICBJc0V4Y2x1ZGVkRnJvbUNhbXBhaWducz86IGJvb2xlYW47XG4gICAgTmFtZT86IHN0cmluZztcbiAgfVxuXG4gIGV4cG9ydCB0eXBlIFB1dENvbnRhY3RCb2R5ID0gT21pdDxQb3N0Q29udGFjdEJvZHksICdFbWFpbCc+XG5cbiAgZXhwb3J0IHR5cGUgR2V0Q29udGFjdFF1ZXJ5UGFyYW1zID0gUGFydGlhbDxDb21tb24uUGFnaW5hdGlvbj4gJiB7XG4gICAgQ2FtcGFpZ24/OiBudW1iZXI7XG4gICAgQ29udGFjdHNMaXN0PzogbnVtYmVyO1xuICAgIElzRXhjbHVkZWRGcm9tQ2FtcGFpZ25zPzogYm9vbGVhbjtcbiAgfVxuXG4gIC8vIFJFU1BPTlNFIFBBUlRcbiAgdHlwZSBDb250YWN0UmVzcG9uc2UgPSB7XG4gICAgQ291bnQ6IG51bWJlcjtcbiAgICBUb3RhbDogbnVtYmVyO1xuICAgIERhdGE6IENvbnRhY3RbXTtcbiAgfTtcblxuICBleHBvcnQgdHlwZSBQb3N0Q29udGFjdFJlc3BvbnNlID0gQ29udGFjdFJlc3BvbnNlXG4gIGV4cG9ydCB0eXBlIFB1dENvbnRhY3RSZXNwb25zZSA9IENvbnRhY3RSZXNwb25zZVxuICBleHBvcnQgdHlwZSBHZXRDb250YWN0UmVzcG9uc2UgPSBDb250YWN0UmVzcG9uc2Vcbn1cblxuZXhwb3J0IG5hbWVzcGFjZSBDb250YWN0TGlzdCB7XG4gIGV4cG9ydCBpbnRlcmZhY2UgQ29udGFjdExpc3Qge1xuICAgIElEOiBudW1iZXI7XG4gICAgSXNEZWxldGVkOiBib29sZWFuO1xuICAgIE5hbWU6IHN0cmluZztcbiAgICBBZGRyZXNzOiBzdHJpbmc7XG4gICAgQ3JlYXRlZEF0OiBzdHJpbmc7XG4gICAgU3Vic2NyaWJlckNvdW50OiBudW1iZXI7XG4gIH1cblxuICAvLyBSRVFVRVNUIFBBUlRcbiAgZXhwb3J0IHR5cGUgUG9zdENvbnRhY3RMaXN0Qm9keSA9IHtcbiAgICBOYW1lOiBzdHJpbmc7XG4gICAgSXNEZWxldGVkPzogYm9vbGVhbjtcbiAgfVxuXG4gIGV4cG9ydCB0eXBlIFB1dENvbnRhY3RMaXN0Qm9keSA9IFBhcnRpYWw8UG9zdENvbnRhY3RMaXN0Qm9keT5cblxuICBleHBvcnQgdHlwZSBHZXRDb250YWN0TGlzdFF1ZXJ5UGFyYW1zID0gUGFydGlhbDxDb21tb24uUGFnaW5hdGlvbj4gJiB7XG4gICAgQWRkcmVzcz86IHN0cmluZztcbiAgICBFeGNsdWRlSUQ/OiBudW1iZXI7XG4gICAgSXNEZWxldGVkPzogYm9vbGVhbjtcbiAgICBOYW1lPzogc3RyaW5nO1xuICB9XG5cbiAgLy8gUkVTUE9OU0UgUEFSVFxuICB0eXBlIENvbnRhY3RMaXN0UmVzcG9uc2UgPSBDb21tb24uUmVzcG9uc2U8Q29udGFjdExpc3RbXT47XG5cbiAgZXhwb3J0IHR5cGUgUG9zdENvbnRhY3RMaXN0UmVzcG9uc2UgPSBDb250YWN0TGlzdFJlc3BvbnNlXG4gIGV4cG9ydCB0eXBlIFB1dENvbnRhY3RMaXN0UmVzcG9uc2UgPSBDb250YWN0TGlzdFJlc3BvbnNlXG4gIGV4cG9ydCB0eXBlIEdldENvbnRhY3RMaXN0UmVzcG9uc2UgPSBDb250YWN0TGlzdFJlc3BvbnNlXG59XG5cbmV4cG9ydCBuYW1lc3BhY2UgQnVsa0NvbnRhY3RNYW5hZ2VtZW50IHtcbiAgZXhwb3J0IGVudW0gTWFuYWdlQ29udGFjdHNBY3Rpb24ge1xuICAgIEFkZEZvcmNlID0gJ2FkZGZvcmNlJyxcbiAgICBBZGROb0ZvcmNlID0gJ2FkZG5vZm9yY2UnLFxuICAgIFJlbW92ZSA9ICdyZW1vdmUnLFxuICAgIFVuU3ViID0gJ3Vuc3ViJ1xuICB9XG5cbiAgZXhwb3J0IGVudW0gSW1wb3J0TGlzdEFjdGlvbiB7XG4gICAgQWRkRm9yY2UgPSAnYWRkZm9yY2UnLFxuICAgIEFkZE5vRm9yY2UgPSAnYWRkbm9mb3JjZScsXG4gICAgVW5TdWIgPSAndW5zdWInLFxuICAgIER1cGxpY2F0ZU92ZXJyaWRlID0gJ2R1cGxpY2F0ZS1vdmVycmlkZScsXG4gICAgRHVwbGljYXRlTm9PdmVycmlkZSA9ICdkdXBsaWNhdGUtbm8tb3ZlcnJpZGUnXG4gIH1cblxuICBleHBvcnQgZW51bSBJbXBvcnRDU1ZNZXRob2Qge1xuICAgIEFkZEZvcmNlID0gJ2FkZGZvcmNlJyxcbiAgICBBZGROb0ZvcmNlID0gJ2FkZG5vZm9yY2UnLFxuICAgIFJlbW92ZSA9ICdyZW1vdmUnLFxuICAgIFVuU3ViID0gJ3Vuc3ViJyxcbiAgICBFeGNsdWRlTWFya2V0aW5nID0gJ2V4Y2x1ZGVtYXJrZXRpbmcnLFxuICAgIEluY2x1ZGVNYXJrZXRpbmcgPSAnaW5jbHVkZW1hcmtldGluZydcbiAgfVxuXG4gIGV4cG9ydCBlbnVtIENTVkltcG9ydFN0YXR1cyB7XG4gICAgVXBsb2FkID0gJ1VwbG9hZCcsXG4gICAgQ29tcGxldGVkID0gJ0NvbXBsZXRlZCcsXG4gICAgQWJvcnQgPSAnQWJvcnQnLFxuICB9XG5cbiAgZXhwb3J0IGVudW0gSm9iU3RhdHVzIHtcbiAgICBDb21wbGV0ZWQgPSAnQ29tcGxldGVkJyxcbiAgICBJblByb2dyZXNzID0gJ0luIFByb2dyZXNzJyxcbiAgICBFcnJvciA9ICdFcnJvcidcbiAgfVxuXG4gIGV4cG9ydCBpbnRlcmZhY2UgSm9iIHtcbiAgICBKb2JJRDogbnVtYmVyO1xuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBDU1ZJbXBvcnQge1xuICAgIElEOiBudW1iZXI7XG4gICAgRXJyVHJlc2hvbGQ6IG51bWJlcjtcbiAgICBJbXBvcnRPcHRpb25zOiBzdHJpbmc7XG4gICAgTWV0aG9kOiBJbXBvcnRDU1ZNZXRob2Q7XG4gICAgQWxpdmVBdDogc3RyaW5nO1xuICAgIENvbnRhY3RzTGlzdElEOiBudW1iZXI7XG4gICAgQ291bnQ6IG51bWJlcjtcbiAgICBDdXJyZW50OiBudW1iZXI7XG4gICAgRGF0YUlEOiBudW1iZXI7XG4gICAgRXJyY291bnQ6IG51bWJlcjtcbiAgICBKb2JFbmQ6IHN0cmluZztcbiAgICBKb2JTdGFydDogc3RyaW5nO1xuICAgIFJlcXVlc3RBdDogc3RyaW5nO1xuICAgIFN0YXR1czogQ1NWSW1wb3J0U3RhdHVzO1xuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBDb250YWN0TGlzdCB7XG4gICAgTGlzdElEOiBudW1iZXI7XG4gICAgQWN0aW9uOiBNYW5hZ2VDb250YWN0c0FjdGlvbjtcbiAgfVxuXG4gIGV4cG9ydCBpbnRlcmZhY2UgQ29udGFjdE1hbmFnZU1hbnlDb250YWN0cyB7XG4gICAgQ29udGFjdHNMaXN0czogQ29udGFjdExpc3RbXTtcbiAgICBDb3VudDogbnVtYmVyO1xuICAgIEVycm9yOiBzdHJpbmc7XG4gICAgRXJyb3JGaWxlOiBzdHJpbmc7XG4gICAgSm9iRW5kOiBzdHJpbmc7XG4gICAgSm9iU3RhcnQ6IHN0cmluZztcbiAgICBTdGF0dXM6IEpvYlN0YXR1cztcbiAgfVxuXG4gIGV4cG9ydCBpbnRlcmZhY2UgQ29udGFjdHNMaXN0SW1wb3J0TGlzdCB7XG4gICAgSm9iSUQ6IG51bWJlcjtcbiAgICBBY3Rpb246IEltcG9ydExpc3RBY3Rpb247XG4gICAgTGlzdElEOiBudW1iZXI7XG4gIH1cblxuICAvLyBSRVFVRVNUIFBBUlRcbiAgZXhwb3J0IHR5cGUgQ29udGFjdEJvZHk8UHJvcGVydGllcyA9IENvbW1vbi5Vbmtub3duUmVjPiA9IHtcbiAgICBFbWFpbDogc3RyaW5nO1xuICAgIE5hbWU/OiBzdHJpbmc7XG4gICAgSXNFeGNsdWRlZEZyb21DYW1wYWlnbnM/OiBib29sZWFuO1xuICAgIFByb3BlcnRpZXM/OiBQcm9wZXJ0aWVzO1xuICB9XG5cbiAgZXhwb3J0IHR5cGUgUG9zdENvbnRhY3RNYW5hZ2VNYW55Q29udGFjdHNCb2R5PFByb3BlcnRpZXMgPSBDb21tb24uVW5rbm93blJlYz4gPSB7XG4gICAgQ29udGFjdHM6IEFycmF5PENvbnRhY3RCb2R5PFByb3BlcnRpZXM+PjtcbiAgICBDb250YWN0c0xpc3RzPzogQ29udGFjdExpc3RbXTtcbiAgfVxuXG4gIGV4cG9ydCB0eXBlIFBvc3RDb250YWN0c0xpc3RJbXBvcnRMaXN0Qm9keSA9IHtcbiAgICBBY3Rpb246IEltcG9ydExpc3RBY3Rpb247XG4gICAgTGlzdElEOiBudW1iZXI7XG4gIH1cblxuICBleHBvcnQgdHlwZSBQb3N0Q29udGFjdHNMaXN0TWFuYWdlTWFueUNvbnRhY3RzQm9keTxQcm9wZXJ0aWVzID0gQ29tbW9uLlVua25vd25SZWM+ID0ge1xuICAgIEFjdGlvbjogTWFuYWdlQ29udGFjdHNBY3Rpb247XG4gICAgQ29udGFjdHM6IEFycmF5PENvbnRhY3RCb2R5PFByb3BlcnRpZXM+PjtcbiAgfVxuXG4gIGV4cG9ydCB0eXBlIFBvc3RDU1ZJbXBvcnRCb2R5ID0ge1xuICAgIENvbnRhY3RzTGlzdElEOiBudW1iZXI7XG4gICAgRGF0YUlEOiBudW1iZXI7XG4gICAgRXJyVHJlc2hvbGQ/OiBudW1iZXI7XG4gICAgSW1wb3J0T3B0aW9ucz86IHN0cmluZztcbiAgICBNZXRob2Q/OiBJbXBvcnRDU1ZNZXRob2Q7XG4gIH1cblxuICBleHBvcnQgdHlwZSBQdXRDU1ZJbXBvcnRCb2R5ID0gUGFydGlhbDxQb3N0Q1NWSW1wb3J0Qm9keT4gJiB7XG4gICAgU3RhdHVzPzogQ1NWSW1wb3J0U3RhdHVzO1xuICB9XG5cbiAgZXhwb3J0IHR5cGUgR2V0Q1NWSW1wb3J0UXVlcnlQYXJhbXMgPSBQYXJ0aWFsPENvbW1vbi5QYWdpbmF0aW9uPlxuXG4gIC8vIFJFU1BPTlNFIFBBUlRcbiAgdHlwZSBKb2JSZXNwb25zZSA9IENvbW1vbi5SZXNwb25zZTxKb2JbXT47XG4gIHR5cGUgQ1NWSW1wb3J0UmVzcG9uc2UgPSBDb21tb24uUmVzcG9uc2U8Q1NWSW1wb3J0W10+O1xuICB0eXBlIENvbnRhY3RNYW5hZ2VNYW55Q29udGFjdHNSZXNwb25zZSA9IENvbW1vbi5SZXNwb25zZTxDb250YWN0TWFuYWdlTWFueUNvbnRhY3RzW10+O1xuXG4gIGV4cG9ydCB0eXBlIFBvc3RDb250YWN0TWFuYWdlTWFueUNvbnRhY3RzUmVzcG9uc2UgPSBKb2JSZXNwb25zZVxuICBleHBvcnQgdHlwZSBHZXRDb250YWN0TWFuYWdlTWFueUNvbnRhY3RzUmVzcG9uc2UgPSBDb250YWN0TWFuYWdlTWFueUNvbnRhY3RzUmVzcG9uc2VcblxuICBleHBvcnQgdHlwZSBQb3N0Q29udGFjdHNMaXN0SW1wb3J0TGlzdFJlc3BvbnNlID0gSm9iUmVzcG9uc2VcbiAgZXhwb3J0IHR5cGUgR2V0Q29udGFjdHNMaXN0SW1wb3J0TGlzdFJlc3BvbnNlID0gQ29tbW9uLlJlc3BvbnNlPENvbnRhY3RzTGlzdEltcG9ydExpc3RbXT47XG5cbiAgZXhwb3J0IHR5cGUgUG9zdENvbnRhY3RzTGlzdE1hbmFnZU1hbnlDb250YWN0c1Jlc3BvbnNlID0gSm9iUmVzcG9uc2VcbiAgZXhwb3J0IHR5cGUgR2V0Q29udGFjdHNMaXN0TWFuYWdlTWFueUNvbnRhY3RzUmVzcG9uc2UgPSBDb250YWN0TWFuYWdlTWFueUNvbnRhY3RzUmVzcG9uc2U7XG5cbiAgZXhwb3J0IHR5cGUgUG9zdENTVkltcG9ydFJlc3BvbnNlID0gQ1NWSW1wb3J0UmVzcG9uc2VcbiAgZXhwb3J0IHR5cGUgUHV0Q1NWSW1wb3J0UmVzcG9uc2UgPSBDU1ZJbXBvcnRSZXNwb25zZVxuICBleHBvcnQgdHlwZSBHZXRDU1ZJbXBvcnRSZXNwb25zZSA9IENTVkltcG9ydFJlc3BvbnNlXG59XG5cbmV4cG9ydCBuYW1lc3BhY2UgQ29udGFjdFByb3BlcnRpZXMge1xuICBleHBvcnQgZW51bSBEYXRhVHlwZSB7XG4gICAgU3RyID0gJ3N0cicsXG4gICAgSW50ID0gJ2ludCcsXG4gICAgRmxvYXQgPSAnZmxvYXQnLFxuICAgIEJvb2wgPSAnYm9vbCcsXG4gICAgRGF0ZVRpbWUgPSAnZGF0ZXRpbWUnXG4gIH1cblxuICBleHBvcnQgZW51bSBOYW1lU3BhY2Uge1xuICAgIFN0YXRpYyA9ICdzdGF0aWMnLFxuICAgIEhpc3RvcmljID0gJ2hpc3RvcmljJ1xuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBDb250YWN0UHJvcGVydHkge1xuICAgIE5hbWU6IHN0cmluZztcbiAgICBWYWx1ZTogc3RyaW5nO1xuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBDb250YWN0RGF0YSB7XG4gICAgSUQ6IG51bWJlcjtcbiAgICBDb250YWN0SUQ6IG51bWJlcjtcbiAgICBEYXRhOiBDb250YWN0UHJvcGVydHlbXTtcbiAgfVxuXG4gIGV4cG9ydCBpbnRlcmZhY2UgQ29udGFjdE1ldGFEYXRhIHtcbiAgICBJRDogbnVtYmVyO1xuICAgIERhdGF0eXBlOiBEYXRhVHlwZTtcbiAgICBOYW1lOiBzdHJpbmc7XG4gICAgTmFtZVNwYWNlOiBOYW1lU3BhY2U7XG4gIH1cblxuICAvLyBSRVFVRVNUIFBBUlRcbiAgZXhwb3J0IHR5cGUgUG9zdENvbnRhY3RNZXRhRGF0YUJvZHkgPSB7XG4gICAgTmFtZTogc3RyaW5nO1xuICAgIERhdGF0eXBlPzogRGF0YVR5cGU7XG4gICAgTmFtZVNwYWNlPzogTmFtZVNwYWNlO1xuICB9XG5cbiAgZXhwb3J0IHR5cGUgUHV0Q29udGFjdE1ldGFEYXRhQm9keSA9IHtcbiAgICBOYW1lPzogc3RyaW5nO1xuICAgIERhdGF0eXBlPzogRGF0YVR5cGU7XG4gIH1cblxuICBleHBvcnQgdHlwZSBHZXRDb250YWN0TWV0YURhdGFRdWVyeVBhcmFtcyA9IFBhcnRpYWw8Q29tbW9uLlBhZ2luYXRpb24+ICYge1xuICAgIERhdGFUeXBlPzogRGF0YVR5cGVcbiAgICBOYW1lc3BhY2U/OiBOYW1lU3BhY2U7XG4gIH1cblxuICBleHBvcnQgdHlwZSBQdXRDb250YWN0RGF0YUJvZHkgPSB7XG4gICAgRGF0YTogQ29udGFjdFByb3BlcnR5W107XG4gIH1cblxuICBleHBvcnQgdHlwZSBHZXRDb250YWN0RGF0YVF1ZXJ5UGFyYW1zID0gUGFydGlhbDxDb21tb24uUGFnaW5hdGlvbj4gJiB7XG4gICAgQ2FtcGFpZ24/OiBudW1iZXI7XG4gICAgQ29udGFjdEVtYWlsPzogc3RyaW5nO1xuICAgIENvbnRhY3RzTGlzdD86IG51bWJlcjtcbiAgICBGaWVsZHM/OiBzdHJpbmc7XG4gICAgTGFzdEFjdGl2aXR5QXQ/OiBzdHJpbmc7XG4gIH1cblxuICAvLyBSRVNQT05TRSBQQVJUXG4gIHR5cGUgQ29udGFjdERhdGFSZXNwb25zZSA9IENvbW1vbi5SZXNwb25zZTxDb250YWN0RGF0YVtdPjtcbiAgdHlwZSBDb250YWN0TWV0YURhdGFSZXNwb25zZSA9IENvbW1vbi5SZXNwb25zZTxDb250YWN0TWV0YURhdGFbXT47XG5cbiAgZXhwb3J0IHR5cGUgUG9zdENvbnRhY3RNZXRhRGF0YVJlc3BvbnNlID0gQ29udGFjdE1ldGFEYXRhUmVzcG9uc2U7XG4gIGV4cG9ydCB0eXBlIFB1dENvbnRhY3RNZXRhRGF0YVJlc3BvbnNlID0gQ29udGFjdE1ldGFEYXRhUmVzcG9uc2U7XG4gIGV4cG9ydCB0eXBlIEdldENvbnRhY3RNZXRhRGF0YVJlc3BvbnNlID0gQ29udGFjdE1ldGFEYXRhUmVzcG9uc2U7XG5cbiAgZXhwb3J0IHR5cGUgUHV0Q29udGFjdERhdGFSZXNwb25zZSA9IENvbnRhY3REYXRhUmVzcG9uc2U7XG4gIGV4cG9ydCB0eXBlIEdldENvbnRhY3REYXRhUmVzcG9uc2UgPSBDb250YWN0RGF0YVJlc3BvbnNlO1xufVxuXG5leHBvcnQgbmFtZXNwYWNlIENvbnRhY3RTdWJzY3JpcHRpb24ge1xuICBleHBvcnQgaW50ZXJmYWNlIE1hbmFnZUNvbnRhY3RzPFByb3BlcnRpZXMgPSBDb21tb24uVW5rbm93blJlYz4ge1xuICAgIEVtYWlsOiBzdHJpbmc7XG4gICAgQWN0aW9uOiBCdWxrQ29udGFjdE1hbmFnZW1lbnQuTWFuYWdlQ29udGFjdHNBY3Rpb247XG4gICAgTmFtZTogc3RyaW5nO1xuICAgIFByb3BlcnRpZXM6IFByb3BlcnRpZXM7XG4gIH1cblxuICBleHBvcnQgaW50ZXJmYWNlIExpc3RSZWNpcGllbnQge1xuICAgIElEOiBudW1iZXI7XG4gICAgSXNVbnN1YnNjcmliZWQ6IGJvb2xlYW47XG4gICAgQ29udGFjdElEOiBudW1iZXI7XG4gICAgTGlzdElEOiBudW1iZXI7XG4gICAgTGlzdE5hbWU6IHN0cmluZztcbiAgICBTdWJzY3JpYmVkQXQ6IHN0cmluZztcbiAgICBVbnN1YnNjcmliZWRBdDogc3RyaW5nO1xuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBDb250YWN0c0xpc3Qge1xuICAgIExpc3RJRDogbnVtYmVyO1xuICAgIElzVW5zdWI6IGJvb2xlYW47XG4gICAgU3Vic2NyaWJlZEF0OiBzdHJpbmc7XG4gIH1cblxuICBleHBvcnQgaW50ZXJmYWNlIENvbnRhY3RzTGlzdFNpZ251cCB7XG4gICAgSUQ6IG51bWJlcjtcbiAgICBDb25maXJtQXQ6IG51bWJlcjtcbiAgICBDb25maXJtSXA6IHN0cmluZztcbiAgICBDb250YWN0SUQ6IG51bWJlcjtcbiAgICBFbWFpbDogc3RyaW5nO1xuICAgIExpc3RJRDogbnVtYmVyO1xuICAgIFNpZ251cEF0OiBudW1iZXI7XG4gICAgU2lnbnVwSXA6IHN0cmluZztcbiAgICBTaWdudXBLZXk6IHN0cmluZztcbiAgICBTb3VyY2VJZDogbnVtYmVyO1xuICAgIFNvdXJjZTogc3RyaW5nO1xuICB9XG5cbiAgLy8gUkVRVUVTVCBQQVJUXG4gIGV4cG9ydCB0eXBlIFBvc3RDb250YWN0TWFuYWdlQ29udGFjdHNMaXN0c0JvZHkgPSB7XG4gICAgQ29udGFjdHNMaXN0czogQnVsa0NvbnRhY3RNYW5hZ2VtZW50LkNvbnRhY3RMaXN0W107XG4gIH1cblxuICBleHBvcnQgdHlwZSBQb3N0Q29udGFjdHNMaXN0TWFuYWdlQ29udGFjdEJvZHk8UHJvcGVydGllcyA9IENvbW1vbi5Vbmtub3duUmVjPiA9IHtcbiAgICBFbWFpbDogc3RyaW5nO1xuICAgIEFjdGlvbjogQnVsa0NvbnRhY3RNYW5hZ2VtZW50Lk1hbmFnZUNvbnRhY3RzQWN0aW9uO1xuICAgIE5hbWU/OiBzdHJpbmc7XG4gICAgUHJvcGVydGllcz86IFByb3BlcnRpZXM7XG4gIH1cblxuICBleHBvcnQgdHlwZSBQb3N0TGlzdFJlY2lwaWVudEJvZHkgPSB7XG4gICAgSXNVbnN1YnNjcmliZWQ/OiBib29sZWFuO1xuICAgIENvbnRhY3RJRDogbnVtYmVyO1xuICAgIENvbnRhY3RBbHQ/OiBzdHJpbmc7XG4gICAgTGlzdElEOiBudW1iZXI7XG4gICAgTGlzdEFsdD86IHN0cmluZztcbiAgfVxuXG4gIGV4cG9ydCB0eXBlIFB1dExpc3RSZWNpcGllbnRCb2R5ID0ge1xuICAgIElzVW5zdWJzY3JpYmVkPzogYm9vbGVhbjtcbiAgfVxuXG4gIGV4cG9ydCB0eXBlIEdldExpc3RSZWNpcGllbnRRdWVyeVBhcmFtcyA9IFBhcnRpYWw8Q29tbW9uLlBhZ2luYXRpb24+ICYge1xuICAgIEJsb2NrZWQ/OiBib29sZWFuO1xuICAgIENvbnRhY3Q/OiBudW1iZXI7XG4gICAgQ29udGFjdEVtYWlsPzogc3RyaW5nO1xuICAgIENvbnRhY3RzTGlzdD86IG51bWJlcjtcbiAgICBJZ25vcmVEZWxldGVkPzogYm9vbGVhbjtcbiAgICBJc0V4Y2x1ZGVkRnJvbUNhbXBhaWducz86IGJvb2xlYW47XG4gICAgTGFzdEFjdGl2aXR5QXQ/OiBzdHJpbmc7XG4gICAgTGlzdE5hbWU/OiBzdHJpbmc7XG4gICAgT3BlbmVkPzogYm9vbGVhbjtcbiAgICBVbnN1Yj86IGJvb2xlYW47XG4gIH1cblxuICBleHBvcnQgdHlwZSBHZXRDb250YWN0c0xpc3RTaWdudXBRdWVyeVBhcmFtcyA9IFBhcnRpYWw8Q29tbW9uLlBhZ2luYXRpb24+ICYge1xuICAgIENvbnRhY3Q/OiBudW1iZXI7XG4gICAgQ29udGFjdHNMaXN0PzogbnVtYmVyO1xuICAgIERvbWFpbj86IHN0cmluZztcbiAgICBFbWFpbD86IHN0cmluZztcbiAgICBMb2NhbFBhcnQ/OiBzdHJpbmc7XG4gICAgTWF4Q29uZmlybUF0PzogbnVtYmVyO1xuICAgIE1pbkNvbmZpcm1BdD86IG51bWJlcjtcbiAgICBNYXhTaWdudXBBdD86IG51bWJlcjtcbiAgICBNaW5TaWdudXBBdD86IG51bWJlcjtcbiAgICBTaWdudXBJcD86IHN0cmluZztcbiAgICBTb3VyY2U/OiBzdHJpbmc7XG4gICAgU291cmNlSUQ/OiBudW1iZXI7XG4gIH1cblxuICAvLyBSRVNQT05TRSBQQVJUXG4gIHR5cGUgTGlzdFJlY2lwaWVudFJlc3BvbnNlID0gQ29tbW9uLlJlc3BvbnNlPExpc3RSZWNpcGllbnRbXT47XG5cbiAgZXhwb3J0IHR5cGUgUG9zdENvbnRhY3RNYW5hZ2VDb250YWN0c0xpc3RzUmVzcG9uc2UgPSBDb21tb24uUmVzcG9uc2U8XG4gICAgQXJyYXk8eyBDb250YWN0c0xpc3RzOiBCdWxrQ29udGFjdE1hbmFnZW1lbnQuQ29udGFjdExpc3RbXSB9PlxuICAgID47XG5cbiAgZXhwb3J0IHR5cGUgUG9zdENvbnRhY3RzTGlzdE1hbmFnZUNvbnRhY3RSZXNwb25zZTxQcm9wZXJ0aWVzID0gQ29tbW9uLlVua25vd25SZWM+ID1cbiAgICAgIENvbW1vbi5SZXNwb25zZTxBcnJheTxNYW5hZ2VDb250YWN0czxQcm9wZXJ0aWVzPj4+O1xuXG4gIGV4cG9ydCB0eXBlIFBvc3RMaXN0UmVjaXBpZW50UmVzcG9uc2UgPSBMaXN0UmVjaXBpZW50UmVzcG9uc2VcbiAgZXhwb3J0IHR5cGUgUHV0TGlzdFJlY2lwaWVudFJlc3BvbnNlID0gTGlzdFJlY2lwaWVudFJlc3BvbnNlXG4gIGV4cG9ydCB0eXBlIEdldExpc3RSZWNpcGllbnRSZXNwb25zZSA9IExpc3RSZWNpcGllbnRSZXNwb25zZVxuXG4gIGV4cG9ydCB0eXBlIEdldENvbnRhY3RHZXRDb250YWN0c0xpc3RzUmVzcG9uc2UgPSBDb21tb24uUmVzcG9uc2U8Q29udGFjdHNMaXN0W10+XG5cbiAgZXhwb3J0IHR5cGUgR2V0Q29udGFjdHNMaXN0U2lnbnVwUmVzcG9uc2UgPSBDb21tb24uUmVzcG9uc2U8Q29udGFjdHNMaXN0U2lnbnVwW10+XG59XG5cbmV4cG9ydCBuYW1lc3BhY2UgQ29udGFjdFZlcmlmaWNhdGlvbiB7XG4gIGV4cG9ydCBpbnRlcmZhY2UgVmVyaWZpY2F0aW9uU3VtbWFyeTxSZXN1bHQgPSBDb21tb24uVW5rbm93blJlYywgUmlzayA9IENvbW1vbi5Vbmtub3duUmVjPiB7XG4gICAgcmVzdWx0OiBSZXN1bHQ7XG4gICAgcmlzazogUmlzaztcbiAgfVxuXG4gIGV4cG9ydCBpbnRlcmZhY2UgQ29udGFjdHNMaXN0VmVyaWZpY2F0aW9uPFJlc3VsdCA9IENvbW1vbi5Vbmtub3duUmVjLCBSaXNrID0gQ29tbW9uLlVua25vd25SZWM+IHtcbiAgICBBa2lkOiBudW1iZXI7XG4gICAgQ29udGFjdExpc3RJRDogbnVtYmVyO1xuICAgIENvdW50OiBudW1iZXI7XG4gICAgRXJyb3I6IHN0cmluZztcbiAgICBJRDogbnVtYmVyO1xuICAgIEpvYkVuZDogc3RyaW5nO1xuICAgIEpvYlN0YXJ0OiBzdHJpbmc7XG4gICAgTWV0aG9kOiBzdHJpbmc7XG4gICAgUmVzcG9uc2VVUkw6IHN0cmluZztcbiAgICBTdGF0dXM6IHN0cmluZztcbiAgICBTdW1tYXJ5OiBWZXJpZmljYXRpb25TdW1tYXJ5PFJlc3VsdCwgUmlzaz5cbiAgfVxuXG4gIC8vIFJFUVVFU1QgUEFSVFxuXG4gIC8vIFJFU1BPTlNFIFBBUlRcbiAgZXhwb3J0IHR5cGUgR2V0Q29udGFjdHNMaXN0VmVyaWZ5UmVzcG9uc2U8UmVzdWx0ID0gQ29tbW9uLlVua25vd25SZWMsIFJpc2sgPSBDb21tb24uVW5rbm93blJlYz4gPVxuICAgIENvbW1vbi5SZXNwb25zZTxBcnJheTxDb250YWN0c0xpc3RWZXJpZmljYXRpb248UmVzdWx0LCBSaXNrPj4+O1xufVxuIiwiaW1wb3J0IHsgQ29tbW9uIH0gZnJvbSAnLi9Db21tb24nO1xuXG5leHBvcnQgbmFtZXNwYWNlIE1lc3NhZ2Uge1xuICBleHBvcnQgZW51bSBNZXNzYWdlU3RhdGUge1xuICAgIFVzZXJVbmtub3duID0gMSxcbiAgICBNYWlsYm94SW5hY3RpdmUgPSAyLFxuICAgIFF1b3RhRXhjZWVkZWQgPSAzLFxuICAgIEludmFsaWREb21haW4gPSA0LFxuICAgIE5vTWFpbEhvc3QgPSA1LFxuICAgIFJlbGF5T3JBY2Nlc3NEZW5pZWQgPSA2LFxuICAgIFNlbmRlckJsb2NrZWQgPSA3LFxuICAgIENvbnRlbnRCbG9ja2VkID0gOCxcbiAgICBQb2xpY3lJc3N1ZSA9IDksXG4gICAgU3lzdGVtSXNzdWUgPSAxMCxcbiAgICBQcm90b2NvbElzc3VlID0gMTEsXG4gICAgQ29ubmVjdGlvbklzc3VlID0gMTIsXG4gICAgR3JleUxpc3RlZCA9IDEzLFxuICAgIFByZUJsb2NrZWQgPSAxNCxcbiAgICBEdXBsaWNhdGVJbkNhbXBhaWduID0gMTUsXG4gICAgU3BhbVByZUJsb2NrZWQgPSAxNixcbiAgICBCYWRPckVtcHR5VGVtcGxhdGUgPSAxNyxcbiAgICBFcnJvckluVGVtcGxhdGVMYW5ndWFnZSA9IDE4LFxuICAgIFR5cG9GaXggPSAxOSxcbiAgICBCbGFja0xpc3RlZCA9IDIwLFxuICAgIFNwYW1SZXBvcnRlciA9IDIxXG4gIH1cblxuICBleHBvcnQgZW51bSBGcm9tVHlwZSB7XG4gICAgVHJhbnNhY3Rpb25hbCA9IDEsXG4gICAgTWFya2V0aW5nID0gMixcbiAgICBVbmtub3duID0gMyxcbiAgfVxuXG4gIGV4cG9ydCBlbnVtIE1lc3NhZ2VTdGF0dXMge1xuICAgIFByb2Nlc3NlZCA9IDAsXG4gICAgUXVldWVkID0gMSxcbiAgICBTZW50ID0gMixcbiAgICBPcGVuZWQgPSAzLFxuICAgIENsaWNrZWQgPSA0LFxuICAgIEJvdW5jZSA9IDUsXG4gICAgU3BhbSA9IDYsXG4gICAgVW5zdWIgPSA3LFxuICAgIEJsb2NrZWQgPSA4LFxuICAgIFNvZnRCb3VuY2UgPSA5LFxuICAgIEhhcmRCb3VuY2UgPSAxMCxcbiAgICBEZWZlcnJlZCA9IDExLFxuICB9XG5cbiAgZXhwb3J0IGVudW0gQ3VycmVudE1lc3NhZ2VTdGF0dXMge1xuICAgIFVua25vd24gPSAndW5rbm93bicsXG4gICAgUXVldWVkID0gJ3F1ZXVlZCcsXG4gICAgU2VudCA9ICdzZW50JyxcbiAgICBPcGVuZWQgPSAnb3BlbmVkJyxcbiAgICBDbGlja2VkID0gJ2NsaWNrZWQnLFxuICAgIEJvdW5jZSA9ICdib3VuY2UnLFxuICAgIFNwYW0gPSAnc3BhbScsXG4gICAgVW5zdWIgPSAndW5zdWInLFxuICAgIEJsb2NrZWQgPSAnYmxvY2tlZCcsXG4gICAgSGFyZEJvdW5jZWQgPSAnaGFyZGJvdW5jZWQnLFxuICAgIFNvZnRCb3VuY2VkID0gJ3NvZnRib3VuY2VkJyxcbiAgICBEZWZlcnJlZCA9ICdkZWZlcnJlZCcsXG4gIH1cblxuICBleHBvcnQgZW51bSBFdmVudFR5cGUge1xuICAgIFNlbnQgPSAnc2VudCcsXG4gICAgT3BlbmVkID0gJ29wZW5lZCcsXG4gICAgQ2xpY2tlZCA9ICdjbGlja2VkJyxcbiAgICBCb3VuY2VkID0gJ2JvdW5jZWQnLFxuICAgIEJsb2NrZWQgPSAnYmxvY2tlZCcsXG4gICAgVW5zdWIgPSAndW5zdWInLFxuICAgIFNwYW0gPSAnc3BhbSdcbiAgfVxuXG4gIGV4cG9ydCBpbnRlcmZhY2UgTWVzc2FnZVRyYWNrZWQge1xuICAgIElzQ2xpY2tUcmFja2VkOiBib29sZWFuO1xuICAgIElzSFRNTFBhcnRJbmNsdWRlZDogYm9vbGVhbjtcbiAgICBJc09wZW5UcmFja2VkOiBib29sZWFuO1xuICAgIElzVGV4dFBhcnRJbmNsdWRlZDogYm9vbGVhbjtcbiAgICBJc1Vuc3ViVHJhY2tlZDogYm9vbGVhbjtcbiAgfVxuXG4gIGV4cG9ydCBpbnRlcmZhY2UgTWVzc2FnZSBleHRlbmRzIE1lc3NhZ2VUcmFja2VkIHtcbiAgICBJRDogbnVtYmVyO1xuICAgIEFycml2ZWRBdDogc3RyaW5nO1xuICAgIEF0dGFjaG1lbnRDb3VudDogbnVtYmVyO1xuICAgIEF0dGVtcHRDb3VudDogbnVtYmVyO1xuICAgIENhbXBhaWduSUQ6IG51bWJlcjtcbiAgICBDb250YWN0QWx0OiBzdHJpbmc7XG4gICAgQ29udGFjdElEOiBudW1iZXI7XG4gICAgRGVsYXk6IG51bWJlcjtcbiAgICBEZXN0aW5hdGlvbklEOiBudW1iZXI7XG4gICAgRmlsdGVyVGltZTogbnVtYmVyO1xuICAgIE1lc3NhZ2VTaXplOiBudW1iZXI7XG4gICAgU2VuZGVySUQ6IG51bWJlcjtcbiAgICBTcGFtYXNzYXNzaW5TY29yZTogbnVtYmVyO1xuICAgIFNwYW1hc3NSdWxlczogc3RyaW5nO1xuICAgIFN0YXRlSUQ6IE1lc3NhZ2VTdGF0ZTtcbiAgICBTdGF0ZVBlcm1hbmVudDogYm9vbGVhbjtcbiAgICBTdGF0dXM6IEN1cnJlbnRNZXNzYWdlU3RhdHVzO1xuICAgIFN1YmplY3Q6IHN0cmluZztcbiAgICBVVUlEOiBzdHJpbmc7XG4gIH1cblxuICBleHBvcnQgaW50ZXJmYWNlIE1lc3NhZ2VIaXN0b3J5IHtcbiAgICBDb21tZW50OiBzdHJpbmc7XG4gICAgRXZlbnRBdDogbnVtYmVyO1xuICAgIEV2ZW50VHlwZTogRXZlbnRUeXBlO1xuICAgIFN0YXRlOiBzdHJpbmc7XG4gICAgVXNlcmFnZW50OiBzdHJpbmc7XG4gICAgVXNlcmFnZW50SUQ6IG51bWJlcjtcbiAgfVxuXG4gIGV4cG9ydCBpbnRlcmZhY2UgTWVzc2FnZUluZm9ybWF0aW9uPFJ1bGVzID0gQ29tbW9uLlVua25vd25SZWM+IHtcbiAgICBJRDogbnVtYmVyO1xuICAgIENhbXBhaWduSUQ6IG51bWJlcjtcbiAgICBDbGlja1RyYWNrZWRDb3VudDogbnVtYmVyO1xuICAgIENvbnRhY3RJRDogbnVtYmVyO1xuICAgIENyZWF0ZWRBdDogc3RyaW5nO1xuICAgIE1lc3NhZ2VTaXplOiBudW1iZXI7XG4gICAgT3BlblRyYWNrZWRDb3VudDogbnVtYmVyO1xuICAgIFF1ZXVlZENvdW50OiBudW1iZXI7XG4gICAgU2VuZEVuZEF0OiBzdHJpbmc7XG4gICAgU2VudENvdW50OiBudW1iZXI7XG4gICAgU3BhbUFzc2Fzc2luUnVsZXM6IFJ1bGVzO1xuICAgIFNwYW1Bc3Nhc3NpblNjb3JlOiBudW1iZXI7XG4gIH1cblxuICAvLyBSRVFVRVNUIFBBUlRcbiAgZXhwb3J0IHR5cGUgR2V0TWVzc2FnZVF1ZXJ5UGFyYW1zID0gUGFydGlhbDxDb21tb24uVGltZXN0YW1wUGVyaW9kPiAmXG4gICAgUGFydGlhbDxDb21tb24uUGFnaW5hdGlvbj4gJlxuICB7XG4gICAgQ2FtcGFpZ24/OiBudW1iZXI7XG4gICAgQ29udGFjdD86IG51bWJlcjtcbiAgICBDdXN0b21JRD86IHN0cmluZztcbiAgICBEZXN0aW5hdGlvbj86IG51bWJlcjtcbiAgICBGcm9tVHlwZT86IEZyb21UeXBlO1xuICAgIE1lc3NhZ2VTdGF0ZT86IE1lc3NhZ2VTdGF0ZTtcbiAgICBNZXNzYWdlU3RhdHVzPzogTWVzc2FnZVN0YXR1cztcbiAgICBQbGFuU3Vic2NyaXB0aW9uPzogbnVtYmVyO1xuICAgIFNlbmRlcklEPzogbnVtYmVyO1xuICAgIFNob3dDb250YWN0QWx0PzogYm9vbGVhbjtcbiAgICBTaG93Q3VzdG9tSUQ/OiBib29sZWFuO1xuICAgIFNob3dTdWJqZWN0PzogYm9vbGVhbjtcbiAgfVxuXG4gIGV4cG9ydCB0eXBlIEdldE1lc3NhZ2VJbmZvcm1hdGlvblF1ZXJ5UGFyYW1zID0gUGFydGlhbDxDb21tb24uVGltZXN0YW1wUGVyaW9kPiAmXG4gICAgUGFydGlhbDxDb21tb24uUGFnaW5hdGlvbj4gJlxuICB7XG4gICAgQ2FtcGFpZ25JRD86IG51bWJlcjtcbiAgICBDb250YWN0c0xpc3Q/OiBudW1iZXI7XG4gICAgQ3VzdG9tQ2FtcGFpZ24/OiBzdHJpbmc7XG4gICAgRnJvbT86IHN0cmluZztcbiAgICBGcm9tRG9tYWluPzogc3RyaW5nO1xuICAgIEZyb21JRD86IG51bWJlcjtcbiAgICBGcm9tVHlwZT86IEZyb21UeXBlO1xuICAgIElzRGVsZXRlZD86IGJvb2xlYW47XG4gICAgSXNOZXdzbGV0dGVyVG9vbD86IGJvb2xlYW47XG4gICAgSXNTdGFycmVkPzogYm9vbGVhbjtcbiAgICBNZXNzYWdlU3RhdHVzPzogTWVzc2FnZVN0YXR1cztcbiAgICBQZXJpb2Q/OiBDb21tb24uUGVyaW9kO1xuICB9XG5cbiAgLy8gUkVTUE9OU0UgUEFSVFxuICBleHBvcnQgdHlwZSBHZXRNZXNzYWdlc1Jlc3BvbnNlID0gQ29tbW9uLlJlc3BvbnNlPE1lc3NhZ2VbXT5cbiAgZXhwb3J0IHR5cGUgR2V0TWVzc2FnZUhpc3RvcnlSZXNwb25zZSA9IENvbW1vbi5SZXNwb25zZTxNZXNzYWdlSGlzdG9yeVtdPlxuICBleHBvcnQgdHlwZSBHZXRNZXNzYWdlSW5mb3JtYXRpb25SZXNwb25zZTxSdWxlcyA9IENvbW1vbi5Vbmtub3duUmVjPiA9XG4gICAgICBDb21tb24uUmVzcG9uc2U8QXJyYXk8TWVzc2FnZUluZm9ybWF0aW9uPFJ1bGVzPj4+XG59XG4iLCJpbXBvcnQgeyBDb21tb24gfSBmcm9tICcuL0NvbW1vbic7XG5cbmV4cG9ydCBuYW1lc3BhY2UgU2VnbWVudGF0aW9uIHtcbiAgZXhwb3J0IGVudW0gU2VnbWVudFN0YXR1cyB7XG4gICAgVXNlZCA9ICd1c2VkJyxcbiAgICBVblVzZWQgPSAndW51c2VkJyxcbiAgICBEZWxldGVkID0gJ2RlbGV0ZWQnXG4gIH1cblxuICBleHBvcnQgaW50ZXJmYWNlIENvbnRhY3RGaWx0ZXIge1xuICAgIElEOiBudW1iZXI7XG4gICAgRGVzY3JpcHRpb246IHN0cmluZztcbiAgICBFeHByZXNzaW9uOiBzdHJpbmc7XG4gICAgTmFtZTogc3RyaW5nO1xuICAgIFN0YXR1czogU2VnbWVudFN0YXR1cztcbiAgfVxuXG4gIC8vIFJFUVVFU1QgUEFSVFxuICBleHBvcnQgdHlwZSBQb3N0Q29udGFjdEZpbHRlckJvZHkgPSB7XG4gICAgTmFtZTogc3RyaW5nO1xuICAgIEV4cHJlc3Npb246IHN0cmluZztcbiAgICBEZXNjcmlwdGlvbj86IHN0cmluZztcbiAgfVxuXG4gIGV4cG9ydCB0eXBlIFB1dENvbnRhY3RGaWx0ZXJCb2R5ID0gUGFydGlhbDxQb3N0Q29udGFjdEZpbHRlckJvZHk+ICYge1xuICAgIFN0YXR1cz86IFNlZ21lbnRTdGF0dXM7XG4gIH1cblxuICBleHBvcnQgdHlwZSBHZXRDb250YWN0RmlsdGVyUXVlcnlQYXJhbXMgPSBQYXJ0aWFsPENvbW1vbi5QYWdpbmF0aW9uPiAmIHtcbiAgICBTaG93RGVsZXRlZD86IGJvb2xlYW47XG4gICAgU3RhdHVzPzogU2VnbWVudFN0YXR1cztcbiAgfVxuXG4gIC8vIFJFU1BPTlNFIFBBUlRcbiAgdHlwZSBDb250YWN0RmlsdGVyUmVzcG9uc2UgPSBDb21tb24uUmVzcG9uc2U8Q29udGFjdEZpbHRlcltdPjtcblxuICBleHBvcnQgdHlwZSBQb3N0Q29udGFjdEZpbHRlclJlc3BvbnNlID0gQ29udGFjdEZpbHRlclJlc3BvbnNlO1xuICBleHBvcnQgdHlwZSBQdXRDb250YWN0RmlsdGVyUmVzcG9uc2UgPSBDb250YWN0RmlsdGVyUmVzcG9uc2U7XG4gIGV4cG9ydCB0eXBlIEdldENvbnRhY3RGaWx0ZXJSZXNwb25zZSA9IENvbnRhY3RGaWx0ZXJSZXNwb25zZTtcbn1cbiIsImltcG9ydCB7IENvbW1vbiB9IGZyb20gJy4vQ29tbW9uJztcblxuZXhwb3J0IG5hbWVzcGFjZSBTZW5kRW1haWxWMyB7XG4gIGV4cG9ydCB0eXBlIE1qVGVtcGxhdGVFcnJvckRlbGl2ZXIgPSAnMCcgfCAnZGVsaXZlcidcbiAgZXhwb3J0IHR5cGUgTWpEZWR1cGxpY2F0ZUNhbXBhaWduID0gMCB8IDE7XG4gIGV4cG9ydCB0eXBlIE1qVHJhY2tPcGVuID0gMCB8IDEgfCAyO1xuXG4gIGV4cG9ydCBpbnRlcmZhY2UgUmVjaXBpZW50IHtcbiAgICBFbWFpbDogc3RyaW5nO1xuICAgIE5hbWU/OiBzdHJpbmdcbiAgICBWYXJzPzogc3RyaW5nO1xuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBBdHRhY2htZW50IHtcbiAgICBGaWxlbmFtZTogc3RyaW5nO1xuICAgIENvbnRlbnQ6IHN0cmluZztcbiAgICAnQ29udGVudC10eXBlJzogc3RyaW5nO1xuICB9XG5cbiAgZXhwb3J0IHR5cGUgQm9keU1qID0ge1xuICAgICdNai1UZW1wbGF0ZUlEJz86IG51bWJlcjtcbiAgICAnTWotVGVtcGxhdGVMYW5ndWFnZSc/OiBib29sZWFuO1xuICAgICdNai1UZW1wbGF0ZUVycm9yUmVwb3J0aW5nJz86IHN0cmluZztcbiAgICAnTWotVGVtcGxhdGVFcnJvckRlbGl2ZXInPzogTWpUZW1wbGF0ZUVycm9yRGVsaXZlcjtcbiAgICAnTWotcHJpbyc/OiBudW1iZXI7XG4gICAgJ01qLWNhbXBhaWduJz86IHN0cmluZztcbiAgICAnTWotZGVkdXBsaWNhdGVjYW1wYWlnbic/OiBNakRlZHVwbGljYXRlQ2FtcGFpZ247XG4gICAgJ01qLXRyYWNrb3Blbic/OiBNalRyYWNrT3BlbjtcbiAgICAnTWotQ3VzdG9tSUQnPzogc3RyaW5nO1xuICAgICdNai1FdmVudFBheWxvYWQnPzogc3RyaW5nO1xuICB9XG5cbiAgLy8gUkVRVUVTVCBQQVJUXG4gIGV4cG9ydCB0eXBlIEJvZHk8XG4gICAgSGVhZGVycyA9IENvbW1vbi5Vbmtub3duUmVjLFxuICAgIFZhcnMgPSBDb21tb24uVW5rbm93blJlY1xuICAgID4gPSBCb2R5TWogJiB7XG4gICAgRnJvbUVtYWlsPzogc3RyaW5nO1xuICAgIEZyb21OYW1lPzogc3RyaW5nO1xuICAgIFJlY2lwaWVudHM/OiBSZWNpcGllbnRbXTtcbiAgICBTZW5kZXI/OiBib29sZWFuO1xuICAgIFN1YmplY3Q/OiBzdHJpbmc7XG4gICAgJ1RleHQtcGFydCc/OiBzdHJpbmc7XG4gICAgJ0h0bWwtcGFydCc/OiBzdHJpbmc7XG4gICAgVG8/OiBzdHJpbmc7XG4gICAgQ2M/OiBzdHJpbmc7XG4gICAgQmNjPzogc3RyaW5nO1xuICAgIEF0dGFjaG1lbnRzPzogQXR0YWNobWVudFtdO1xuICAgIElubGluZV9hdHRhY2htZW50cz86IEF0dGFjaG1lbnRbXTtcbiAgICBIZWFkZXJzPzogSGVhZGVycztcbiAgICBWYXJzPzogVmFycztcbiAgfVxuXG4gIC8vIFJFU1BPTlNFIFBBUlRcbiAgZXhwb3J0IGludGVyZmFjZSBSZXNwb25zZVNlbnQge1xuICAgIEVtYWlsOiBzdHJpbmc7XG4gICAgTWVzc2FnZUlEOiBudW1iZXI7XG4gICAgTWVzc2FnZVVVSUQ6IHN0cmluZztcbiAgfVxuXG4gIGV4cG9ydCB0eXBlIFJlc3BvbnNlID0ge1xuICAgIFNlbnQ6IFJlc3BvbnNlU2VudFtdO1xuICB9XG59XG5cbmV4cG9ydCBuYW1lc3BhY2UgU2VuZEVtYWlsVjNfMSB7XG4gIGV4cG9ydCBlbnVtIFRyYWNrT3BlbnMge1xuICAgIEFjY291bnREZWZhdWx0ID0gJ2FjY291bnRfZGVmYXVsdCcsXG4gICAgRGlzYWJsZWQgPSAnZGlzYWJsZWQnLFxuICAgIEVuYWJsZWQgPSAnZW5hYmxlZCcsXG4gIH1cblxuICBleHBvcnQgZW51bSBUcmFja0NsaWNrcyB7XG4gICAgQWNjb3VudERlZmF1bHQgPSAnYWNjb3VudF9kZWZhdWx0JyxcbiAgICBEaXNhYmxlZCA9ICdkaXNhYmxlZCcsXG4gICAgRW5hYmxlZCA9ICdlbmFibGVkJyxcbiAgfVxuXG4gIGV4cG9ydCBpbnRlcmZhY2UgRW1haWxBZGRyZXNzVG8ge1xuICAgIEVtYWlsOiBzdHJpbmc7XG4gICAgTmFtZT86IHN0cmluZztcbiAgfVxuXG4gIGV4cG9ydCBpbnRlcmZhY2UgQXR0YWNobWVudCB7XG4gICAgRmlsZW5hbWU6IHN0cmluZztcbiAgICBDb250ZW50VHlwZTogc3RyaW5nO1xuICAgIEJhc2U2NENvbnRlbnQ6IHN0cmluZztcbiAgfVxuXG4gIGV4cG9ydCBpbnRlcmZhY2UgSW5saW5lZEF0dGFjaG1lbnQgZXh0ZW5kcyBBdHRhY2htZW50IHtcbiAgICBDb250ZW50SUQ/OiBzdHJpbmc7XG4gIH1cblxuICBleHBvcnQgaW50ZXJmYWNlIE1lc3NhZ2U8SGVhZGVycyA9IENvbW1vbi5Vbmtub3duUmVjLCBWYXJpYWJsZXMgPSBDb21tb24uVW5rbm93blJlYz4ge1xuICAgIEZyb206IEVtYWlsQWRkcmVzc1RvO1xuICAgIFNlbmRlcj86IEVtYWlsQWRkcmVzc1RvO1xuICAgIFRvOiBFbWFpbEFkZHJlc3NUb1tdO1xuICAgIENjPzogRW1haWxBZGRyZXNzVG9bXTtcbiAgICBCY2M/OiBFbWFpbEFkZHJlc3NUb1tdO1xuICAgIFJlcGx5VG8/OiBFbWFpbEFkZHJlc3NUbztcbiAgICBTdWJqZWN0Pzogc3RyaW5nO1xuICAgIFRleHRQYXJ0Pzogc3RyaW5nO1xuICAgIEhUTUxQYXJ0Pzogc3RyaW5nO1xuICAgIFRlbXBsYXRlSUQ/OiBudW1iZXI7XG4gICAgVGVtcGxhdGVMYW5ndWFnZT86IGJvb2xlYW47XG4gICAgVGVtcGxhdGVFcnJvclJlcG9ydGluZz86IEVtYWlsQWRkcmVzc1RvO1xuICAgIFRlbXBsYXRlRXJyb3JEZWxpdmVyPzogYm9vbGVhbjtcbiAgICBBdHRhY2htZW50cz86IEF0dGFjaG1lbnRbXTtcbiAgICBJbmxpbmVkQXR0YWNobWVudHM/OiBJbmxpbmVkQXR0YWNobWVudFtdO1xuICAgIFByaW9yaXR5PzogbnVtYmVyO1xuICAgIEN1c3RvbUNhbXBhaWduPzogc3RyaW5nO1xuICAgIERlZHVwbGljYXRlQ2FtcGFpZ24/OiBib29sZWFuO1xuICAgIFRyYWNrT3BlbnM/OiBUcmFja09wZW5zO1xuICAgIFRyYWNrQ2xpY2tzPzogVHJhY2tDbGlja3M7XG4gICAgQ3VzdG9tSUQ/OiBzdHJpbmc7XG4gICAgRXZlbnRQYXlsb2FkPzogc3RyaW5nO1xuICAgIFVSTFRhZ3M/OiBzdHJpbmc7XG4gICAgSGVhZGVycz86IEhlYWRlcnM7XG4gICAgVmFyaWFibGVzPzogVmFyaWFibGVzO1xuICB9XG5cbiAgZXhwb3J0IGVudW0gUmVzcG9uc2VTdGF0dXMge1xuICAgIFN1Y2Nlc3MgPSAnc3VjY2VzcycsXG4gICAgRXJyb3IgPSAnZXJyb3InLFxuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBSZXNwb25zZUVycm9yIHtcbiAgICBFcnJvcklkZW50aWZpZXI6IHN0cmluZztcbiAgICBFcnJvckNvZGU6IHN0cmluZztcbiAgICBTdGF0dXNDb2RlOiBudW1iZXI7XG4gICAgRXJyb3JNZXNzYWdlOiBzdHJpbmc7XG4gICAgRXJyb3JSZWxhdGVkVG86IEFycmF5PHN0cmluZz47XG4gIH1cblxuICBleHBvcnQgaW50ZXJmYWNlIFJlc3BvbnNlRW1haWxBZGRyZXNzVG8ge1xuICAgIEVtYWlsOiBzdHJpbmc7XG4gICAgTWVzc2FnZVVVSUQ6IHN0cmluZztcbiAgICBNZXNzYWdlSUQ6IG51bWJlcjtcbiAgICBNZXNzYWdlSHJlZjogc3RyaW5nO1xuICB9XG5cbiAgLy8gUkVRVUVTVCBQQVJUXG4gIGV4cG9ydCB0eXBlIEJvZHk8XG4gICAgSGVhZGVycyA9IENvbW1vbi5Vbmtub3duUmVjLFxuICAgIFZhcmlhYmxlcyA9IENvbW1vbi5Vbmtub3duUmVjLFxuICAgIEdsb2JhbHMgPSBDb21tb24uVW5rbm93blJlYyxcbiAgICA+ID0ge1xuICAgIE1lc3NhZ2VzOiBBcnJheTxNZXNzYWdlPEhlYWRlcnMsIFZhcmlhYmxlcz4+O1xuICAgIFNhbmRib3hNb2RlPzogYm9vbGVhbjtcbiAgICBBZHZhbmNlRXJyb3JIYW5kbGluZz86IGJvb2xlYW47XG4gICAgR2xvYmFscz86IEdsb2JhbHM7XG4gIH0gfCB7XG4gICAgTWVzc2FnZXM6IEFycmF5PE9taXQ8TWVzc2FnZTxIZWFkZXJzLCBWYXJpYWJsZXM+LCAnRnJvbSc+ICYgeyBGcm9tPzogc3RyaW5nIH0+O1xuICAgIFNhbmRib3hNb2RlPzogYm9vbGVhbjtcbiAgICBBZHZhbmNlRXJyb3JIYW5kbGluZz86IGJvb2xlYW47XG4gICAgR2xvYmFsczoge1xuICAgICAgRnJvbTogRW1haWxBZGRyZXNzVG87XG4gICAgICBba2V5OiBzdHJpbmddOiB1bmtub3duO1xuICAgIH07XG4gIH1cblxuICAvLyBSRVNQT05TRSBQQVJUXG4gIGV4cG9ydCBpbnRlcmZhY2UgUmVzcG9uc2VNZXNzYWdlIHtcbiAgICBTdGF0dXM6IFJlc3BvbnNlU3RhdHVzO1xuICAgIEVycm9yczogUmVzcG9uc2VFcnJvcltdO1xuICAgIEN1c3RvbUlEOiBzdHJpbmc7XG4gICAgVG86IFJlc3BvbnNlRW1haWxBZGRyZXNzVG9bXTtcbiAgICBDYzogUmVzcG9uc2VFbWFpbEFkZHJlc3NUb1tdO1xuICAgIEJjYzogUmVzcG9uc2VFbWFpbEFkZHJlc3NUb1tdO1xuICB9XG5cbiAgZXhwb3J0IHR5cGUgUmVzcG9uc2UgPSB7XG4gICAgTWVzc2FnZXM6IFJlc3BvbnNlTWVzc2FnZVtdO1xuICB9XG59XG4iLCJpbXBvcnQgeyBDb21tb24gfSBmcm9tICcuL0NvbW1vbic7XG5cbmV4cG9ydCBuYW1lc3BhY2UgU2VuZGVyIHtcbiAgZXhwb3J0IGVudW0gRW1haWxUeXBlIHtcbiAgICBUcmFuc2FjdGlvbmFsID0gJ3RyYW5zYWN0aW9uYWwnLFxuICAgIEJ1bGsgPSAnYnVsaycsXG4gICAgVW5rbm93biA9ICd1bmtub3duJ1xuICB9XG5cbiAgZXhwb3J0IGVudW0gU2VuZGVyU3RhdHVzIHtcbiAgICBJbmFjdGl2ZSA9ICdJbmFjdGl2ZScsXG4gICAgQWN0aXZlID0gJ0FjdGl2ZScsXG4gICAgRGVsZXRlZCA9ICdEZWxldGVkJyxcbiAgfVxuXG4gIGV4cG9ydCBpbnRlcmZhY2UgU2VuZGVyIHtcbiAgICBJRDogbnVtYmVyO1xuICAgIEVtYWlsVHlwZTogRW1haWxUeXBlO1xuICAgIElzRGVmYXVsdFNlbmRlcjogYm9vbGVhbjtcbiAgICBOYW1lOiBzdHJpbmc7XG4gICAgQ3JlYXRlZEF0OiBzdHJpbmc7XG4gICAgRE5TSUQ6IG51bWJlcjtcbiAgICBFbWFpbDogc3RyaW5nO1xuICAgIEZpbGVuYW1lOiBzdHJpbmc7XG4gICAgU3RhdHVzOiBTZW5kZXJTdGF0dXM7XG4gIH1cblxuICBleHBvcnQgaW50ZXJmYWNlIFNlbmRlclZhbGlkYXRlIHtcbiAgICBWYWxpZGF0aW9uTWV0aG9kOiBzdHJpbmc7XG4gICAgRXJyb3JzOiBzdHJpbmc7XG4gICAgR2xvYmFsRXJyb3I6IHN0cmluZztcbiAgfVxuXG4gIC8vIFJFUVVFU1QgUEFSVFxuICBleHBvcnQgdHlwZSBQb3N0U2VuZGVyQm9keSA9IHtcbiAgICBFbWFpbDogc3RyaW5nO1xuICAgIEVtYWlsVHlwZT86IEVtYWlsVHlwZTtcbiAgICBJc0RlZmF1bHRTZW5kZXI/OiBib29sZWFuO1xuICAgIE5hbWU/OiBzdHJpbmc7XG4gIH1cblxuICBleHBvcnQgdHlwZSBQdXRTZW5kZXJCb2R5ID0gT21pdDxQb3N0U2VuZGVyQm9keSwgJ0VtYWlsJz5cblxuICBleHBvcnQgdHlwZSBHZXRTZW5kZXJRdWVyeVBhcmFtcyA9IFBhcnRpYWw8Q29tbW9uLlBhZ2luYXRpb24+ICYge1xuICAgIERuc0lEPzogbnVtYmVyO1xuICAgIERvbWFpbj86IHN0cmluZztcbiAgICBFbWFpbD86IHN0cmluZztcbiAgICBJc0RvbWFpblNlbmRlcj86IGJvb2xlYW47XG4gICAgTG9jYWxQYXJ0Pzogc3RyaW5nO1xuICAgIFNob3dEZWxldGVkPzogYm9vbGVhbjtcbiAgICBTdGF0dXM/OiBTZW5kZXJTdGF0dXM7XG4gIH1cblxuICAvLyBSRVNQT05TRSBQQVJUXG4gIHR5cGUgU2VuZGVyUmVzcG9uc2UgPSBDb21tb24uUmVzcG9uc2U8U2VuZGVyW10+O1xuXG4gIGV4cG9ydCB0eXBlIFBvc3RTZW5kZXJSZXNwb25zZSA9IFNlbmRlclJlc3BvbnNlXG4gIGV4cG9ydCB0eXBlIFB1dFNlbmRlclJlc3BvbnNlID0gU2VuZGVyUmVzcG9uc2VcbiAgZXhwb3J0IHR5cGUgR2V0U2VuZGVyUmVzcG9uc2UgPSBTZW5kZXJSZXNwb25zZVxuXG4gIGV4cG9ydCB0eXBlIFBvc3RTZW5kZXJWYWxpZGF0ZVJlc3BvbnNlID0gQ29tbW9uLlJlc3BvbnNlPFNlbmRlclZhbGlkYXRlW10+O1xufVxuXG5leHBvcnQgbmFtZXNwYWNlIE1ldGFzZW5kZXIge1xuICBleHBvcnQgaW50ZXJmYWNlIE1ldGFTZW5kZXIge1xuICAgIElEOiBudW1iZXI7XG4gICAgRGVzY3JpcHRpb246IHN0cmluZztcbiAgICBDcmVhdGVkQXQ6IHN0cmluZztcbiAgICBFbWFpbDogc3RyaW5nO1xuICAgIEZpbGVuYW1lOiBzdHJpbmc7XG4gICAgSXNFbmFibGVkOiBib29sZWFuO1xuICB9XG5cbiAgLy8gUkVRVUVTVCBQQVJUXG4gIGV4cG9ydCB0eXBlIFBvc3RNZXRhU2VuZGVyQm9keSA9IHtcbiAgICBFbWFpbDogc3RyaW5nO1xuICAgIERlc2NyaXB0aW9uPzogc3RyaW5nO1xuICB9XG5cbiAgZXhwb3J0IHR5cGUgUHV0TWV0YVNlbmRlckJvZHkgPSBPbWl0PFBvc3RNZXRhU2VuZGVyQm9keSwgJ0VtYWlsJz5cblxuICBleHBvcnQgdHlwZSBHZXRNZXRhU2VuZGVyUXVlcnlQYXJhbXMgPSBQYXJ0aWFsPENvbW1vbi5QYWdpbmF0aW9uPiAmIHtcbiAgICBETlM/OiBudW1iZXI7XG4gIH1cblxuICAvLyBSRVNQT05TRSBQQVJUXG4gIHR5cGUgTWV0YVNlbmRlclJlc3BvbnNlID0gQ29tbW9uLlJlc3BvbnNlPE1ldGFTZW5kZXJbXT47XG5cbiAgZXhwb3J0IHR5cGUgUG9zdE1ldGFTZW5kZXJSZXNwb25zZSA9IE1ldGFTZW5kZXJSZXNwb25zZVxuICBleHBvcnQgdHlwZSBQdXRNZXRhU2VuZGVyUmVzcG9uc2UgPSBNZXRhU2VuZGVyUmVzcG9uc2VcbiAgZXhwb3J0IHR5cGUgR2V0TWV0YVNlbmRlclJlc3BvbnNlID0gTWV0YVNlbmRlclJlc3BvbnNlXG59XG5cbmV4cG9ydCBuYW1lc3BhY2UgRE5TIHtcbiAgZXhwb3J0IGVudW0gREtJTUNvbmZpZ3VyYXRpb25DaGVja1N0YXR1cyB7XG4gICAgT0sgPSAnT0snLFxuICAgIEVycm9yID0gJ0Vycm9yJyxcbiAgICBOb3RDaGVja2VkID0gJ05vdCBjaGVja2VkJ1xuICB9XG5cbiAgZXhwb3J0IGVudW0gREtJTUNvbmZpZ3VyYXRpb25TdGF0dXMge1xuICAgIE9LID0gJ09LJyxcbiAgICBFcnJvciA9ICdFcnJvcidcbiAgfVxuXG4gIGV4cG9ydCBlbnVtIFNQRkNvbmZpZ3VyYXRpb25DaGVja1N0YXR1cyB7XG4gICAgT0sgPSAnT0snLFxuICAgIEVycm9yID0gJ0Vycm9yJyxcbiAgICBOb3RDaGVja2VkID0gJ05vdCBjaGVja2VkJyxcbiAgICBOb3RGb3VuZCA9ICdOb3QgZm91bmQnLFxuICB9XG5cbiAgZXhwb3J0IGVudW0gU1BGQ29uZmlndXJhdGlvblN0YXR1cyB7XG4gICAgT0sgPSAnT0snLFxuICAgIEVycm9yID0gJ0Vycm9yJ1xuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBETlMge1xuICAgIElEOiBudW1iZXI7XG4gICAgREtJTVJlY29yZE5hbWU6IHN0cmluZztcbiAgICBES0lNUmVjb3JkVmFsdWU6IHN0cmluZztcbiAgICBES0lNU3RhdHVzOiBES0lNQ29uZmlndXJhdGlvbkNoZWNrU3RhdHVzO1xuICAgIERvbWFpbjogc3RyaW5nO1xuICAgIElzQ2hlY2tJblByb2dyZXNzOiBib29sZWFuO1xuICAgIExhc3RDaGVja0F0OiBzdHJpbmc7XG4gICAgT3duZXJTaGlwVG9rZW46IHN0cmluZztcbiAgICBPd25lclNoaXBUb2tlblJlY29yZE5hbWU6IHN0cmluZztcbiAgICBTUEZSZWNvcmRWYWx1ZTogc3RyaW5nO1xuICAgIFNQRlN0YXR1czogU1BGQ29uZmlndXJhdGlvbkNoZWNrU3RhdHVzO1xuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBETlNDaGVjayB7XG4gICAgREtJTUVycm9yczogc3RyaW5nO1xuICAgIERLSU1SZWNvcmRDdXJyZW50VmFsdWU6IHN0cmluZztcbiAgICBES0lNU3RhdHVzOiBES0lNQ29uZmlndXJhdGlvblN0YXR1cztcbiAgICBTUEZFcnJvcnM6IHN0cmluZztcbiAgICBTUEZSZWNvcmRDdXJyZW50VmFsdWU6IHN0cmluZztcbiAgICBTUEZTdGF0dXM6IFNQRkNvbmZpZ3VyYXRpb25TdGF0dXM7XG4gIH1cblxuICAvLyBSRVFVRVNUIFBBUlRcbiAgZXhwb3J0IHR5cGUgR2V0RE5TUXVlcnlQYXJhbXMgPSBQYXJ0aWFsPENvbW1vbi5QYWdpbmF0aW9uPiAmIHtcbiAgICBJc0NoZWNrSW5Qcm9ncmVzcz86IGJvb2xlYW47XG4gICAgSXNTZW5kZXJJZGVudGlmaWVkPzogYm9vbGVhbjtcbiAgICBJc1lhaG9vRkJMPzogYm9vbGVhbjtcbiAgICBNYXhMYXN0Q2hlY2tBdD86IHN0cmluZztcbiAgICBNaW5MYXN0Q2hlY2tBdD86IHN0cmluZztcbiAgICBTUEZTdGF0dXM/OiBTUEZDb25maWd1cmF0aW9uQ2hlY2tTdGF0dXM7XG4gIH1cblxuICAvLyBSRVNQT05TRSBQQVJUXG4gIGV4cG9ydCB0eXBlIEdldEROU1Jlc3BvbnNlID0gQ29tbW9uLlJlc3BvbnNlPEROU1tdPjtcbiAgZXhwb3J0IHR5cGUgUG9zdEROU0NoZWNrUmVzcG9uc2UgPSBDb21tb24uUmVzcG9uc2U8RE5TQ2hlY2tbXT47XG59XG4iLCJpbXBvcnQgeyBDb21tb24gfSBmcm9tICcuL0NvbW1vbic7XG5cbmV4cG9ydCBuYW1lc3BhY2UgQVBJS2V5Q29uZmlndXJhdGlvbiB7XG4gIGV4cG9ydCBlbnVtIFJ1bkxldmVsIHtcbiAgICBOb3JtYWwgPSAnTm9ybWFsJyxcbiAgICBTb2Z0TG9jayA9ICdTb2Z0bG9jaycsXG4gICAgSGFyZExvY2sgPSAnSGFyZGxvY2snXG4gIH1cblxuICBleHBvcnQgaW50ZXJmYWNlIEFwaUtleSB7XG4gICAgSUQ6IG51bWJlcjtcbiAgICBBQ0w6IHN0cmluZztcbiAgICBJc0FjdGl2ZTogYm9vbGVhbjtcbiAgICBBUElLZXk6IHN0cmluZztcbiAgICBDcmVhdGVkQXQ6IHN0cmluZztcbiAgICBJc01hc3RlcjogYm9vbGVhbjtcbiAgICBOYW1lOiBzdHJpbmc7XG4gICAgUXVhcmFudGluZVZhbHVlOiBudW1iZXI7XG4gICAgUnVubGV2ZWw6IFJ1bkxldmVsO1xuICAgIFNlY3JldEtleTogc3RyaW5nO1xuICAgIFRyYWNrSG9zdDogc3RyaW5nO1xuICAgIFVzZXJJRDogbnVtYmVyO1xuICB9XG5cbiAgLy8gUkVRVUVTVCBQQVJUXG4gIGV4cG9ydCB0eXBlIFBvc3RBcGlLZXlCb2R5ID0ge1xuICAgIE5hbWU6IHN0cmluZztcbiAgICBBQ0w/OiBzdHJpbmc7XG4gICAgSXNBY3RpdmU/OiBib29sZWFuO1xuICB9XG5cbiAgZXhwb3J0IHR5cGUgUHV0QXBpS2V5Qm9keSA9IFBhcnRpYWw8UG9zdEFwaUtleUJvZHk+XG5cbiAgZXhwb3J0IHR5cGUgR2V0QXBpS2V5UXVlcnlQYXJhbXMgPSBQYXJ0aWFsPENvbW1vbi5QYWdpbmF0aW9uPiAmIHtcbiAgICBBUElLZXk/OiBzdHJpbmc7XG4gICAgSXNBY3RpdmU/OiBib29sZWFuO1xuICAgIElzTWFzdGVyPzogYm9vbGVhbjtcbiAgICBOYW1lPzogc3RyaW5nO1xuICB9XG5cbiAgLy8gUkVTUE9OU0UgUEFSVFxuICB0eXBlIEFwaUtleVJlc3BvbnNlID0gQ29tbW9uLlJlc3BvbnNlPEFwaUtleVtdPjtcblxuICBleHBvcnQgdHlwZSBQb3N0QXBpS2V5UmVzcG9uc2UgPSBBcGlLZXlSZXNwb25zZVxuICBleHBvcnQgdHlwZSBQdXRBcGlLZXlSZXNwb25zZSA9IEFwaUtleVJlc3BvbnNlXG4gIGV4cG9ydCB0eXBlIEdldEFwaUtleVJlc3BvbnNlID1BcGlLZXlSZXNwb25zZVxufVxuXG5leHBvcnQgbmFtZXNwYWNlIEFjY291bnRTZXR0aW5nIHtcbiAgZXhwb3J0IGludGVyZmFjZSBNeVByb2ZpbGUge1xuICAgIElEOiBudW1iZXI7XG4gICAgQWRkcmVzc0NpdHk6IHN0cmluZztcbiAgICBBZGRyZXNzQ291bnRyeTogc3RyaW5nO1xuICAgIEFkZHJlc3NQb3N0YWxDb2RlOiBzdHJpbmc7XG4gICAgQWRkcmVzc1N0YXRlOiBzdHJpbmc7XG4gICAgQWRkcmVzc1N0cmVldDogc3RyaW5nO1xuICAgIEJpbGxpbmdFbWFpbDogc3RyaW5nO1xuICAgIEJpcnRoZGF5QXQ6IHN0cmluZztcbiAgICBDb21wYW55TmFtZTogc3RyaW5nO1xuICAgIENvbXBhbnlOdW1PZkVtcGxveWVlczogc3RyaW5nO1xuICAgIENvbnRhY3RQaG9uZTogc3RyaW5nO1xuICAgIEVzdGltYXRlZFZvbHVtZTogbnVtYmVyO1xuICAgIEZlYXR1cmVzOiBzdHJpbmc7XG4gICAgRmlyc3RuYW1lOiBzdHJpbmc7XG4gICAgSW5kdXN0cnk6IG51bWJlcjtcbiAgICBKb2JUaXRsZTogc3RyaW5nO1xuICAgIExhc3RuYW1lOiBzdHJpbmc7XG4gICAgVkFUTnVtYmVyOiBzdHJpbmc7XG4gICAgV2Vic2l0ZTogc3RyaW5nO1xuICAgIFZBVDogbnVtYmVyO1xuICAgIFVzZXJJRDogbnVtYmVyO1xuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBVc2VyIHtcbiAgICBJRDogbnVtYmVyO1xuICAgIEFDTDogc3RyaW5nO1xuICAgIEVtYWlsOiBzdHJpbmc7XG4gICAgTGFzdExvZ2luQXQ6IHN0cmluZztcbiAgICBMb2NhbGU6IHN0cmluZztcbiAgICBUaW1lem9uZTogc3RyaW5nO1xuICAgIENyZWF0ZWRBdDogc3RyaW5nO1xuICAgIEZpcnN0SXA6IHN0cmluZztcbiAgICBMYXN0SXA6IHN0cmluZztcbiAgICBNYXhBbGxvd2VkQVBJS2V5czogbnVtYmVyO1xuICAgIFVzZXJuYW1lOiBzdHJpbmc7XG4gICAgV2FybmVkUmF0ZWxpbWl0QXQ6IHN0cmluZztcbiAgfVxuXG4gIC8vIFJFUVVFU1QgUEFSVFxuICBleHBvcnQgdHlwZSBQdXRNeVByb2ZpbGVCb2R5ID0gUGFydGlhbDxPbWl0PE15UHJvZmlsZSwgJ0lEJyB8ICdWQVQnIHwgJ1VzZXJJRCc+PlxuXG4gIGV4cG9ydCB0eXBlIFB1dFVzZXJCb2R5ID1cbiAgICBQYXJ0aWFsPE9taXQ8VXNlciwgJ0lEJyB8ICdDcmVhdGVkQXQnIHwgJ0ZpcnN0SXAnIHwgJ01heEFsbG93ZWRBUElLZXlzJyB8ICdXYXJuZWRSYXRlbGltaXRBdCc+PlxuXG4gIC8vIFJFU1BPTlNFIFBBUlRcbiAgdHlwZSBNeVByb2ZpbGVSZXNwb25zZSA9IENvbW1vbi5SZXNwb25zZTxNeVByb2ZpbGVbXT47XG4gIHR5cGUgVXNlclJlc3BvbnNlID0gQ29tbW9uLlJlc3BvbnNlPFVzZXJbXT47XG5cbiAgZXhwb3J0IHR5cGUgUHV0TXlQcm9maWxlUmVzcG9uc2UgPSBNeVByb2ZpbGVSZXNwb25zZVxuICBleHBvcnQgdHlwZSBHZXRNeVByb2ZpbGVSZXNwb25zZSA9IE15UHJvZmlsZVJlc3BvbnNlXG5cbiAgZXhwb3J0IHR5cGUgUHV0VXNlclJlc3BvbnNlID0gVXNlclJlc3BvbnNlXG4gIGV4cG9ydCB0eXBlIEdldFVzZXJSZXNwb25zZSA9IFVzZXJSZXNwb25zZVxufVxuIiwiaW1wb3J0IHsgQ29tbW9uIH0gZnJvbSAnLi9Db21tb24nO1xuaW1wb3J0IHsgTWVzc2FnZSB9IGZyb20gJy4vTWVzc2FnZSc7XG5cbmV4cG9ydCBuYW1lc3BhY2UgU3RhdGlzdGljIHtcbiAgZXhwb3J0IGVudW0gQ2FtcGFpZ25PdmVydmlld0lEVHlwZSB7XG4gICAgU2VudENhbXBhaWduID0gJ0NhbXBhaWduJyxcbiAgICBBQlRlc3RpbmcgPSAnQVgnLFxuICAgIERyYWZ0ID0gJ05MJ1xuICB9XG5cbiAgZXhwb3J0IGVudW0gQ2FtcGFpZ25PdmVydmlld0VkaXRNb2RlIHtcbiAgICBUb29sID0gJ3Rvb2wnLFxuICAgIEhUTUwgPSAnaHRtbCcsXG4gICAgVG9vbDIgPSAndG9vbDInLFxuICAgIEhUTUwyID0gJ2h0bWwyJyxcbiAgICBNSk1MID0gJ21qbWwnLFxuICB9XG5cbiAgZXhwb3J0IGVudW0gQ2FtcGFpZ25PdmVydmlld0VkaXRUeXBlIHtcbiAgICBGdWxsID0gJ2Z1bGwnLFxuICAgIFVua25vd24gPSAndW5rbm93bidcbiAgfVxuXG4gIGV4cG9ydCBlbnVtIENvdW50ZXJTb3VyY2Uge1xuICAgIENhbXBhaWduID0gJ0NhbXBhaWduJyxcbiAgICBBUElLZXkgPSAnQVBJS2V5JyxcbiAgICBMaXN0ID0gJ0xpc3QnLFxuICAgIFNlbmRlciA9ICdTZW5kZXInXG4gIH1cblxuICBleHBvcnQgZW51bSBDb3VudGVyUmVzb2x1dGlvbiB7XG4gICAgSGlnaGVzdCA9ICdIaWdoZXN0JyxcbiAgICBIb3VyID0gJ0hvdXInLFxuICAgIERheSA9ICdEYXknLFxuICAgIExpZmV0aW1lID0gJ0xpZmV0aW1lJ1xuICB9XG5cbiAgZXhwb3J0IGVudW0gQ291bnRlclRpbWluZyB7XG4gICAgTWVzc2FnZSA9ICdNZXNzYWdlJyxcbiAgICBFdmVudCA9ICdFdmVudCdcbiAgfVxuXG4gIGV4cG9ydCBlbnVtIEVtYWlsRXZlbnQge1xuICAgIE9wZW4gPSAnb3BlbicsXG4gICAgQ2xpY2sgPSAnY2xpY2snXG4gIH1cblxuICBleHBvcnQgaW50ZXJmYWNlIENhbXBhaWduT3ZlcnZpZXcge1xuICAgIENsaWNrZWRDb3VudDogbnVtYmVyO1xuICAgIERlbGl2ZXJlZENvdW50OiBudW1iZXI7XG4gICAgRWRpdE1vZGU6IENhbXBhaWduT3ZlcnZpZXdFZGl0TW9kZTtcbiAgICBFZGl0VHlwZTogQ2FtcGFpZ25PdmVydmlld0VkaXRUeXBlO1xuICAgIElEOiBudW1iZXI7XG4gICAgSURUeXBlOiBDYW1wYWlnbk92ZXJ2aWV3SURUeXBlO1xuICAgIE9wZW5lZENvdW50OiBudW1iZXI7XG4gICAgUHJvY2Vzc2VkQ291bnQ6IG51bWJlcjtcbiAgICBTZW5kVGltZVN0YXJ0OiBudW1iZXI7XG4gICAgU3RhcnJlZDogYm9vbGVhbjtcbiAgICBTdWJqZWN0OiBzdHJpbmc7XG4gICAgVGl0bGU6IHN0cmluZztcbiAgfVxuXG4gIGV4cG9ydCBpbnRlcmZhY2UgQ29udGFjdFN0YXRpc3RpYyB7XG4gICAgQmxvY2tlZENvdW50OiBudW1iZXI7XG4gICAgQm91bmNlZENvdW50OiBudW1iZXI7XG4gICAgQ2xpY2tlZENvdW50OiBudW1iZXI7XG4gICAgQ29udGFjdElEOiBudW1iZXI7XG4gICAgRGVmZXJyZWRDb3VudDogbnVtYmVyO1xuICAgIERlbGl2ZXJlZENvdW50OiBudW1iZXI7XG4gICAgSGFyZGJvdW5jZWRDb3VudDogbnVtYmVyO1xuICAgIExhc3RBY3Rpdml0eUF0OiBzdHJpbmc7XG4gICAgTWFya2V0aW5nQ29udGFjdHM6IG51bWJlcjtcbiAgICBPcGVuZWRDb3VudDogbnVtYmVyO1xuICAgIFByb2Nlc3NlZENvdW50OiBudW1iZXI7XG4gICAgUXVldWVkQ291bnQ6IG51bWJlcjtcbiAgICBTb2Z0Ym91bmNlZENvdW50OiBudW1iZXI7XG4gICAgU3BhbUNvbXBsYWludENvdW50OiBudW1iZXI7XG4gICAgVW5zdWJzY3JpYmVkQ291bnQ6IG51bWJlcjtcbiAgICBVc2VyTWFya2V0aW5nQ29udGFjdHM6IG51bWJlcjtcbiAgICBXb3JrRmxvd0V4aXRlZENvdW50OiBudW1iZXI7XG4gIH1cblxuICBleHBvcnQgaW50ZXJmYWNlIEdFT1N0YXRpc3RpYyB7XG4gICAgQ2xpY2tlZENvdW50OiBudW1iZXI7XG4gICAgT3BlbmVkQ291bnQ6IG51bWJlcjtcbiAgICBDb3VudHJ5OiBzdHJpbmc7XG4gIH1cblxuICBleHBvcnQgaW50ZXJmYWNlIExpc3RSZWNpcGllbnRTdGF0aXN0aWM8RGF0YSA9IEFycmF5PHVua25vd24+PiB7XG4gICAgQmxvY2tlZENvdW50OiBudW1iZXI7XG4gICAgQm91bmNlZENvdW50OiBudW1iZXI7XG4gICAgQ2xpY2tlZENvdW50OiBudW1iZXI7XG4gICAgRGF0YTogRGF0YTtcbiAgICBEZWZlcnJlZENvdW50OiBudW1iZXI7XG4gICAgRGVsaXZlcmVkQ291bnQ6IG51bWJlcjtcbiAgICBIYXJkYm91bmNlZENvdW50OiBudW1iZXI7XG4gICAgTGFzdEFjdGl2aXR5QXQ6IHN0cmluZztcbiAgICBMaXN0UmVjaXBpZW50SUQ6IG51bWJlcjtcbiAgICBPcGVuZWRDb3VudDogbnVtYmVyO1xuICAgIFByZVF1ZXVlZENvdW50OiBudW1iZXI7XG4gICAgUHJvY2Vzc2VkQ291bnQ6IG51bWJlcjtcbiAgICBRdWV1ZWRDb3VudDogbnVtYmVyO1xuICAgIFNvZnRib3VuY2VkQ291bnQ6IG51bWJlcjtcbiAgICBTcGFtQ29tcGxhaW50Q291bnQ6IG51bWJlcjtcbiAgICBVbnN1YnNjcmliZWRDb3VudDogbnVtYmVyO1xuICAgIFdvcmtGbG93RXhpdGVkQ291bnQ6IG51bWJlcjtcbiAgfVxuXG4gIGV4cG9ydCBpbnRlcmZhY2UgU3RhdENvdW50ZXIge1xuICAgIEFQSUtleUlEOiBudW1iZXI7XG4gICAgRXZlbnRDbGlja0RlbGF5OiBudW1iZXI7XG4gICAgRXZlbnRDbGlja2VkQ291bnQ6IG51bWJlcjtcbiAgICBFdmVudE9wZW5EZWxheTogbnVtYmVyO1xuICAgIEV2ZW50T3BlbmVkQ291bnQ6IG51bWJlcjtcbiAgICBFdmVudFNwYW1Db3VudDogbnVtYmVyO1xuICAgIEV2ZW50VW5zdWJzY3JpYmVkQ291bnQ6IG51bWJlcjtcbiAgICBFdmVudFdvcmtmbG93RXhpdGVkQ291bnQ6IG51bWJlcjtcbiAgICBNZXNzYWdlQmxvY2tlZENvdW50OiBudW1iZXI7XG4gICAgTWVzc2FnZUNsaWNrZWRDb3VudDogbnVtYmVyO1xuICAgIE1lc3NhZ2VEZWZlcnJlZENvdW50OiBudW1iZXI7XG4gICAgTWVzc2FnZUhhcmRCb3VuY2VkQ291bnQ6IG51bWJlcjtcbiAgICBNZXNzYWdlT3BlbmVkQ291bnQ6IG51bWJlcjtcbiAgICBNZXNzYWdlUXVldWVkQ291bnQ6IG51bWJlcjtcbiAgICBNZXNzYWdlU2VudENvdW50OiBudW1iZXI7XG4gICAgTWVzc2FnZVNvZnRCb3VuY2VkQ291bnQ6IG51bWJlcjtcbiAgICBNZXNzYWdlU3BhbUNvdW50OiBudW1iZXI7XG4gICAgTWVzc2FnZVVuc3Vic2NyaWJlZENvdW50OiBudW1iZXI7XG4gICAgTWVzc2FnZVdvcmtGbG93RXhpdGVkQ291bnQ6IG51bWJlcjtcbiAgICBTb3VyY2VJRDogbnVtYmVyO1xuICAgIFRpbWVzbGljZTogc3RyaW5nO1xuICAgIFRvdGFsOiBudW1iZXI7XG4gIH1cblxuICBleHBvcnQgaW50ZXJmYWNlIExpbmtDbGlja1N0YXRpc3RpYyB7XG4gICAgQ2xpY2tlZEV2ZW50c0NvdW50OiBudW1iZXI7XG4gICAgQ2xpY2tlZE1lc3NhZ2VzQ291bnQ6IG51bWJlcjtcbiAgICBQb3NpdGlvbkluZGV4OiBudW1iZXI7XG4gICAgVVJMOiBzdHJpbmc7XG4gIH1cblxuICBleHBvcnQgaW50ZXJmYWNlIFJlY2lwaWVudEVTUFN0YXRpc3RpYyB7XG4gICAgQXR0ZW1wdGVkTWVzc2FnZXNDb3VudD86IG51bWJlcjtcbiAgICBDbGlja2VkTWVzc2FnZXNDb3VudD86IG51bWJlcjtcbiAgICBEZWZlcnJlZE1lc3NhZ2VzQ291bnQ/OiBudW1iZXI7XG4gICAgRGVsaXZlcmVkTWVzc2FnZXNDb3VudD86IG51bWJlcjtcbiAgICBIYXJkQm91bmNlZE1lc3NhZ2VzQ291bnQ/OiBudW1iZXI7XG4gICAgRVNQTmFtZT86IHN0cmluZztcbiAgICBPcGVuZWRNZXNzYWdlc0NvdW50PzogbnVtYmVyO1xuICAgIFNvZnRCb3VuY2VkTWVzc2FnZXNDb3VudD86IG51bWJlcjtcbiAgICBTcGFtUmVwb3J0c0NvdW50PzogbnVtYmVyO1xuICAgIFVuc3Vic2NyaWJlZE1lc3NhZ2VzQ291bnQ/OiBudW1iZXI7XG4gICAgT3BlblJhdGU/OiBudW1iZXI7XG4gICAgQ2xpY2tUaHJvdWdoUmF0ZT86IG51bWJlcjtcbiAgICBTb2Z0Qm91bmNlZFJhdGU/OiBudW1iZXI7XG4gICAgSGFyZEJvdW5jZWRSYXRlPzogbnVtYmVyO1xuICAgIFVuc3Vic2NyaWJlZFJhdGU/OiBudW1iZXI7XG4gICAgU3BhbVJlcG9ydHNSYXRlPzogbnVtYmVyO1xuICAgIERlZmVycmVkUmF0ZT86IG51bWJlcjtcbiAgfVxuXG4gIGV4cG9ydCBpbnRlcmZhY2UgVG9wTGlua0NsaWNrZWQge1xuICAgIENsaWNrZWRDb3VudDogbnVtYmVyO1xuICAgIExpbmtJZDogbnVtYmVyO1xuICAgIFVybDogc3RyaW5nO1xuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBVc2VyQWdlbnRTdGF0aXN0aWMge1xuICAgIENvdW50OiBudW1iZXI7XG4gICAgRGlzdGluY3RDb3VudDogbnVtYmVyO1xuICAgIFBsYXRmb3JtOiBzdHJpbmc7XG4gICAgVXNlckFnZW50OiBzdHJpbmc7XG4gIH1cblxuICAvLyBSRVFVRVNUIFBBUlRcbiAgZXhwb3J0IHR5cGUgR2V0Q2FtcGFpZ25PdmVydmlld1F1ZXJ5UGFyYW1zID0gUGFydGlhbDxDb21tb24uUGFnaW5hdGlvbj4gJiB7XG4gICAgQWxsPzogYm9vbGVhbjtcbiAgICBBcmNoaXZlZD86IGJvb2xlYW47XG4gICAgRHJhZnRzPzogYm9vbGVhbjtcbiAgICBJRD86IG51bWJlcjtcbiAgICBJRFR5cGU/OiBDYW1wYWlnbk92ZXJ2aWV3SURUeXBlO1xuICAgIFByb2dyYW1tZWQ/OiBib29sZWFuO1xuICAgIFNlbnQ/OiBib29sZWFuO1xuICAgIFN0YXJyZWQ/OiBib29sZWFuO1xuICAgIFN1YmplY3Q/OiBzdHJpbmc7XG4gIH1cblxuICBleHBvcnQgdHlwZSBHZXRDb250YWN0U3RhdGlzdGljc1F1ZXJ5UGFyYW1zID0gUGFydGlhbDxDb21tb24uUGFnaW5hdGlvbj4gJiB7XG4gICAgQmxvY2tlZD86IGJvb2xlYW47XG4gICAgQm91bmNlZD86IGJvb2xlYW47XG4gICAgQ2xpY2s/OiBib29sZWFuO1xuICAgIERlZmVycmVkPzogYm9vbGVhbjtcbiAgICBIYXJkYm91bmNlZD86IGJvb2xlYW47XG4gICAgTGFzdEFjdGl2aXR5QXQ/OiBzdHJpbmc7XG4gICAgTWF4TGFzdEFjdGl2aXR5QXQ/OiBzdHJpbmc7XG4gICAgTWluTGFzdEFjdGl2aXR5QXQ/OiBzdHJpbmc7XG4gICAgT3Blbj86IGJvb2xlYW47XG4gICAgUXVldWVkPzogYm9vbGVhbjtcbiAgICBTZW50PzogYm9vbGVhbjtcbiAgICBTcGFtPzogYm9vbGVhbjtcbiAgICBTb2Z0Ym91bmNlZD86IGJvb2xlYW47XG4gICAgVW5zdWJzY3JpYmVkPzogYm9vbGVhbjtcbiAgfVxuXG4gIGV4cG9ydCB0eXBlIEdldEdFT1N0YXRpc3RpY3NRdWVyeVBhcmFtcyA9IFBhcnRpYWw8Q29tbW9uLlRpbWVzdGFtcFBlcmlvZD4gJlxuICAgIFBhcnRpYWw8Q29tbW9uLlBhZ2luYXRpb24+ICZcbiAge1xuICAgIENhbXBhaWduSUQ/OiBudW1iZXI7XG4gICAgQ29udGFjdHNMaXN0PzogbnVtYmVyO1xuICAgIEN1c3RvbUNhbXBhaWduPzogc3RyaW5nO1xuICAgIEZyb20/OiBzdHJpbmc7XG4gICAgRnJvbURvbWFpbj86IHN0cmluZztcbiAgICBGcm9tSUQ/OiBudW1iZXI7XG4gICAgRnJvbVR5cGU/OiBNZXNzYWdlLkZyb21UeXBlO1xuICAgIElzRGVsZXRlZD86IGJvb2xlYW47XG4gICAgSXNOZXdzbGV0dGVyVG9vbD86IGJvb2xlYW47XG4gICAgSXNTdGFycmVkPzogYm9vbGVhbjtcbiAgICBNZXNzYWdlU3RhdHVzPzogTWVzc2FnZS5NZXNzYWdlU3RhdHVzO1xuICAgIFBlcmlvZD86IENvbW1vbi5QZXJpb2Q7XG4gIH1cblxuICBleHBvcnQgdHlwZSBHZXRMaXN0UmVjaXBpZW50U3RhdGlzdGljc1F1ZXJ5UGFyYW1zID0gUGFydGlhbDxDb21tb24uUGFnaW5hdGlvbj4gJiB7XG4gICAgQmxvY2tlZD86IGJvb2xlYW47XG4gICAgQm91bmNlZD86IGJvb2xlYW47XG4gICAgQ2xpY2s/OiBib29sZWFuO1xuICAgIENvbnRhY3Q/OiBudW1iZXI7XG4gICAgQ29udGFjdHNMaXN0PzogbnVtYmVyO1xuICAgIElzRXhjbHVkZWRGcm9tQ2FtcGFpZ25zPzogYm9vbGVhbjtcbiAgICBJc1Vuc3Vic2NyaWJlZD86IGJvb2xlYW47XG4gICAgTGFzdEFjdGl2aXR5QXQ/OiBzdHJpbmc7XG4gICAgTWF4TGFzdEFjdGl2aXR5QXQ/OiBzdHJpbmc7XG4gICAgTWluTGFzdEFjdGl2aXR5QXQ/OiBzdHJpbmc7XG4gICAgTWF4VW5zdWJzY3JpYmVkQXQ/OiBzdHJpbmc7XG4gICAgTWluVW5zdWJzY3JpYmVkQXQ/OiBzdHJpbmc7XG4gICAgT3Blbj86IGJvb2xlYW47XG4gICAgUXVldWVkPzogYm9vbGVhbjtcbiAgICBTZW50PzogYm9vbGVhbjtcbiAgICBTaG93RXh0cmFEYXRhPzogYm9vbGVhbjtcbiAgICBTcGFtPzogYm9vbGVhbjtcbiAgICBUaW1lWm9uZT86IHN0cmluZztcbiAgICBVbnN1YnNjcmliZWQ/OiBib29sZWFuO1xuICB9XG5cbiAgZXhwb3J0IHR5cGUgR2V0U3RhdENvdW50ZXJzUXVlcnlQYXJhbXMgPSBQYXJ0aWFsPENvbW1vbi5UaW1lc3RhbXBQZXJpb2Q+ICZcbiAgICBQYXJ0aWFsPENvbW1vbi5QYWdpbmF0aW9uPiAmXG4gIHtcbiAgICBDb3VudGVyU291cmNlOiBDb3VudGVyU291cmNlO1xuICAgIENvdW50ZXJSZXNvbHV0aW9uOiBDb3VudGVyUmVzb2x1dGlvbjtcbiAgICBDb3VudGVyVGltaW5nOiBDb3VudGVyVGltaW5nO1xuICAgIFNvdXJjZUlEPzogbnVtYmVyO1xuICB9XG5cbiAgZXhwb3J0IHR5cGUgR2V0TGlua0NsaWNrU3RhdGlzdGljc1F1ZXJ5UGFyYW1zID0gUGFydGlhbDxDb21tb24uUGFnaW5hdGlvbj4gJiB7XG4gICAgQ2FtcGFpZ25JRDogbnVtYmVyO1xuICB9XG5cbiAgZXhwb3J0IHR5cGUgR2V0UmVjaXBpZW50RVNQU3RhdGlzdGljc1F1ZXJ5UGFyYW1zID0gR2V0TGlua0NsaWNrU3RhdGlzdGljc1F1ZXJ5UGFyYW1zICZcbiAge1xuICAgIEVTUF9OYW1lPzogbnVtYmVyO1xuICB9XG5cbiAgZXhwb3J0IHR5cGUgR2V0VG9wTGlua0NsaWNrZWRRdWVyeVBhcmFtcyA9IFBhcnRpYWw8Q29tbW9uLlRpbWVzdGFtcFBlcmlvZD4gJlxuICAgIFBhcnRpYWw8Q29tbW9uLlBhZ2luYXRpb24+ICZcbiAge1xuICAgIEFjdHVhbENsaWNrcz86IGJvb2xlYW47XG4gICAgQ2FtcGFpZ25JRD86IG51bWJlcjtcbiAgICBDb250YWN0PzogbnVtYmVyO1xuICAgIENvbnRhY3RzTGlzdD86IG51bWJlcjtcbiAgICBDdXN0b21DYW1wYWlnbj86IHN0cmluZztcbiAgICBGcm9tPzogc3RyaW5nO1xuICAgIEZyb21Eb21haW4/OiBzdHJpbmc7XG4gICAgRnJvbUlEPzogbnVtYmVyO1xuICAgIEZyb21UeXBlPzogTWVzc2FnZS5Gcm9tVHlwZTtcbiAgICBJc0RlbGV0ZWQ/OiBib29sZWFuO1xuICAgIElzTmV3c2xldHRlclRvb2w/OiBib29sZWFuO1xuICAgIElzU3RhcnJlZD86IGJvb2xlYW47XG4gICAgTWVzc2FnZT86IG51bWJlcjtcbiAgICBQZXJpb2Q/OiBDb21tb24uUGVyaW9kO1xuICB9XG5cbiAgZXhwb3J0IHR5cGUgR2V0VXNlckFnZW50U3RhdGlzdGljc1F1ZXJ5UGFyYW1zID0gUGFydGlhbDxDb21tb24uVGltZXN0YW1wUGVyaW9kPiAmXG4gICAgUGFydGlhbDxDb21tb24uUGFnaW5hdGlvbj4gJlxuICB7XG4gICAgQ2FtcGFpZ25JRD86IG51bWJlcjtcbiAgICBDb250YWN0c0xpc3Q/OiBudW1iZXI7XG4gICAgQ3VzdG9tQ2FtcGFpZ24/OiBzdHJpbmc7XG4gICAgRXZlbnQ/OiBFbWFpbEV2ZW50O1xuICAgIEV4Y2x1ZGVQbGF0Zm9ybT86IHN0cmluZztcbiAgICBGcm9tPzogc3RyaW5nO1xuICAgIEZyb21Eb21haW4/OiBzdHJpbmc7XG4gICAgRnJvbUlEPzogbnVtYmVyO1xuICAgIEZyb21UeXBlPzogTWVzc2FnZS5Gcm9tVHlwZTtcbiAgICBJc0RlbGV0ZWQ/OiBib29sZWFuO1xuICAgIElzTmV3c2xldHRlclRvb2w/OiBib29sZWFuO1xuICAgIElzU3RhcnJlZD86IGJvb2xlYW47XG4gICAgUGVyaW9kPzogQ29tbW9uLlBlcmlvZDtcbiAgICBQbGF0Zm9ybT86IHN0cmluZztcbiAgfVxuXG4gIC8vIFJFU1BPTlNFIFBBUlRcbiAgZXhwb3J0IHR5cGUgR2V0Q2FtcGFpZ25PdmVydmlld1Jlc3BvbnNlID0gQ29tbW9uLlJlc3BvbnNlPENhbXBhaWduT3ZlcnZpZXdbXT47XG5cbiAgZXhwb3J0IHR5cGUgR2V0Q29udGFjdFN0YXRpc3RpY3NSZXNwb25zZSA9IENvbW1vbi5SZXNwb25zZTxDb250YWN0U3RhdGlzdGljW10+O1xuXG4gIGV4cG9ydCB0eXBlIEdldEdFT1N0YXRpc3RpY3NSZXNwb25zZSA9IENvbW1vbi5SZXNwb25zZTxHRU9TdGF0aXN0aWNbXT47XG5cbiAgZXhwb3J0IHR5cGUgR2V0TGlzdFJlY2lwaWVudFN0YXRpc3RpY3NSZXNwb25zZTxEYXRhID0gQXJyYXk8dW5rbm93bj4+ID1cbiAgICBDb21tb24uUmVzcG9uc2U8QXJyYXk8TGlzdFJlY2lwaWVudFN0YXRpc3RpYzxEYXRhPj4+O1xuXG4gIGV4cG9ydCB0eXBlIEdldFN0YXRDb3VudGVyc1Jlc3BvbnNlID0gQ29tbW9uLlJlc3BvbnNlPFN0YXRDb3VudGVyW10+O1xuXG4gIGV4cG9ydCB0eXBlIEdldExpbmtDbGlja1N0YXRpc3RpY3NSZXNwb25zZSA9IENvbW1vbi5SZXNwb25zZTxMaW5rQ2xpY2tTdGF0aXN0aWNbXT47XG5cbiAgZXhwb3J0IHR5cGUgR2V0UmVjaXBpZW50RVNQU3RhdGlzdGljc1Jlc3BvbnNlID0gQ29tbW9uLlJlc3BvbnNlPFJlY2lwaWVudEVTUFN0YXRpc3RpY1tdPjtcblxuICBleHBvcnQgdHlwZSBHZXRUb3BMaW5rQ2xpY2tlZFJlc3BvbnNlID0gQ29tbW9uLlJlc3BvbnNlPFRvcExpbmtDbGlja2VkW10+O1xuXG4gIGV4cG9ydCB0eXBlIEdldFVzZXJBZ2VudFN0YXRpc3RpY3NSZXNwb25zZSA9IENvbW1vbi5SZXNwb25zZTxVc2VyQWdlbnRTdGF0aXN0aWNbXT47XG59XG4iLCJpbXBvcnQgeyBDb21tb24gfSBmcm9tICcuL0NvbW1vbic7XG5cbmV4cG9ydCBuYW1lc3BhY2UgVGVtcGxhdGUge1xuICBleHBvcnQgZW51bSBDYXRlZ29yaWVzIHtcbiAgICBGdWxsID0gJ2Z1bGwnLFxuICAgIEJhc2ljID0gJ2Jhc2ljJyxcbiAgICBOZXdzTGV0dGVyID0gJ25ld3NsZXR0ZXInLFxuICAgIEVDb21tZXJjZSA9ICdlLWNvbW1lcmNlJyxcbiAgICBFdmVudHMgPSAnZXZlbnRzJyxcbiAgICBUcmF2ZWwgPSAndHJhdmVsJyxcbiAgICBTcG9ydHMgPSAnc3BvcnRzJyxcbiAgICBXZWxjb21lID0gJ3dlbGNvbWUnLFxuICAgIENvbnRhY3RQcm9wZXJ0eVVwZGF0ZSA9ICdjb250YWN0LXByb3BlcnR5LXVwZGF0ZScsXG4gICAgU3VwcG9ydCA9ICdzdXBwb3J0JyxcbiAgICBJbnZvaWNlID0gJ2ludm9pY2UnLFxuICAgIEFubml2ZXJzYXJ5ID0gJ2Fubml2ZXJzYXJ5JyxcbiAgICBBY2NvdW50ID0gJ2FjY291bnQnLFxuICAgIEFjdGl2YXRpb24gPSAnYWN0aXZhdGlvbidcbiAgfVxuXG4gIGV4cG9ydCBlbnVtIENhdGVnb3JpZXNTZWxlY3Rpb25NZXRob2Qge1xuICAgIENvbnRhaW5zQW55ID0gJ2NvbnRhaW5zYW55JyxcbiAgICBDb250YWluc0FsbCA9ICdjb250YWluc2FsbCcsXG4gICAgSXNTdWJTZXQgPSAnaXNzdWJzZXQnXG4gIH1cblxuICBleHBvcnQgZW51bSBFZGl0TW9kZSB7XG4gICAgRHJhZ0FuZERyb3BCdWlsZGVyID0gMSxcbiAgICBIVE1MQnVpbGRlciA9IDIsXG4gICAgU2F2ZWRTZWN0aW9uQnVpbGRlciA9IDMsXG4gICAgTUpNTEJ1aWxkZXIgPSA0XG4gIH1cblxuICBleHBvcnQgZW51bSBPd25lclR5cGUge1xuICAgIEFwaUtleSA9ICdhcGlrZXknLFxuICAgIFVzZXIgPSAndXNlcicsXG4gICAgR2xvYmFsID0gJ2dsb2JhbCdcbiAgfVxuXG4gIGV4cG9ydCBlbnVtIFB1cnBvc2VzIHtcbiAgICBNYXJrZXRpbmcgPSAnbWFya2V0aW5nJyxcbiAgICBUcmFuc2FjdGlvbmFsID0gJ3RyYW5zYWN0aW9uYWwnLFxuICAgIEF1dG9tYXRpb24gPSAnYXV0b21hdGlvbidcbiAgfVxuXG4gIGV4cG9ydCBlbnVtIFB1cnBvc2VzU2VsZWN0aW9uTWV0aG9kIHtcbiAgICBDb250YWluc0FueSA9ICdjb250YWluc2FueScsXG4gICAgQ29udGFpbnNBbGwgPSAnY29udGFpbnNhbGwnLFxuICAgIElzU3ViU2V0ID0gJ2lzc3Vic2V0J1xuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBIZWFkZXJzIHtcbiAgICBGcm9tOiBzdHJpbmc7XG4gICAgU3ViamVjdDogc3RyaW5nO1xuICAgICdSZXBseS10byc6IHN0cmluZztcbiAgfVxuXG4gIGV4cG9ydCBpbnRlcmZhY2UgVGVtcGxhdGUge1xuICAgIEF1dGhvcjogc3RyaW5nO1xuICAgIENhdGVnb3JpZXM6IENhdGVnb3JpZXM7XG4gICAgQ29weXJpZ2h0OiBzdHJpbmc7XG4gICAgRGVzY3JpcHRpb246IHN0cmluZztcbiAgICBFZGl0TW9kZTogRWRpdE1vZGU7XG4gICAgSXNTdGFycmVkOiBib29sZWFuO1xuICAgIElzVGV4dFBhcnRHZW5lcmF0aW9uRW5hYmxlZDogYm9vbGVhbjtcbiAgICBMb2NhbGU6IHN0cmluZztcbiAgICBOYW1lOiBzdHJpbmc7XG4gICAgT3duZXJUeXBlOiBPd25lclR5cGU7XG4gICAgUHJlc2V0czogc3RyaW5nO1xuICAgIFB1cnBvc2VzOiBQdXJwb3NlcztcbiAgICBJRDogbnVtYmVyO1xuICAgIE93bmVySWQ6IG51bWJlcjtcbiAgICBQcmV2aWV3czogc3RyaW5nO1xuICAgIENyZWF0ZWRBdDogc3RyaW5nO1xuICAgIExhc3RVcGRhdGVkQXQ6IHN0cmluZztcbiAgfVxuXG4gIGV4cG9ydCB0eXBlIFRlbXBsYXRlRGV0YWlsQ29udGVudCA9IHtcbiAgICBIZWFkZXJzOiBIZWFkZXJzO1xuICAgICdIdG1sLXBhcnQnOiBzdHJpbmc7XG4gICAgJ1RleHQtcGFydCc6IHN0cmluZztcbiAgICBNSk1MQ29udGVudDogc3RyaW5nO1xuICB9XG5cbiAgLy8gUkVRVUVTVCBQQVJUXG4gIGV4cG9ydCB0eXBlIFBvc3RUZW1wbGF0ZUJvZHkgPVxuICAgIFBhcnRpYWw8T21pdDxUZW1wbGF0ZSwgJ05hbWUnIHwgJ0lEJyB8ICdPd25lcklkJyB8ICdQcmV2aWV3cycgfCAnQ3JlYXRlZEF0JyB8ICdMYXN0VXBkYXRlZEF0Jz4+ICZcbiAge1xuICAgIE5hbWU6IHN0cmluZztcbiAgfVxuXG4gIGV4cG9ydCB0eXBlIFB1dFRlbXBsYXRlQm9keSA9IFBhcnRpYWw8UG9zdFRlbXBsYXRlQm9keT5cblxuICBleHBvcnQgdHlwZSBHZXRUZW1wbGF0ZVF1ZXJ5UGFyYW1zID0gUGFydGlhbDxDb21tb24uUGFnaW5hdGlvbj4gJiB7XG4gICAgQ2F0ZWdvcmllcz86IHN0cmluZztcbiAgICBDYXRlZ29yaWVzU2VsZWN0aW9uTWV0aG9kPzogQ2F0ZWdvcmllc1NlbGVjdGlvbk1ldGhvZDtcbiAgICBFZGl0TW9kZT86IEVkaXRNb2RlO1xuICAgIE5hbWU/OiBzdHJpbmc7XG4gICAgT3duZXJUeXBlPzogT3duZXJUeXBlO1xuICAgIFB1cnBvc2VzPzogUHVycG9zZXM7XG4gICAgUHVycG9zZXNTZWxlY3Rpb25NZXRob2Q/OiBQdXJwb3Nlc1NlbGVjdGlvbk1ldGhvZDtcbiAgfVxuXG4gIGV4cG9ydCB0eXBlIFBvc3RUZW1wbGF0ZURldGFpbENvbnRlbnRCb2R5ID1cbiAgICBQYXJ0aWFsPE9taXQ8VGVtcGxhdGVEZXRhaWxDb250ZW50LCAnSGVhZGVycyc+PiAmXG4gIHtcbiAgICBIZWFkZXJzPzogUGFydGlhbDxIZWFkZXJzPjtcbiAgfVxuXG4gIGV4cG9ydCB0eXBlIFB1dFRlbXBsYXRlRGV0YWlsQ29udGVudEJvZHkgPSBQb3N0VGVtcGxhdGVEZXRhaWxDb250ZW50Qm9keVxuXG4gIC8vIFJFU1BPTlNFIFBBUlRcbiAgdHlwZSBUZW1wbGF0ZVJlc3BvbnNlID0gQ29tbW9uLlJlc3BvbnNlPFRlbXBsYXRlW10+O1xuICB0eXBlIFRlbXBsYXRlRGV0YWlsQ29udGVudFJlc3BvbnNlID0gQ29tbW9uLlJlc3BvbnNlPFRlbXBsYXRlRGV0YWlsQ29udGVudFtdPjtcblxuICBleHBvcnQgdHlwZSBQb3N0VGVtcGxhdGVSZXNwb25zZSA9IFRlbXBsYXRlUmVzcG9uc2VcbiAgZXhwb3J0IHR5cGUgUHV0VGVtcGxhdGVSZXNwb25zZSA9IFRlbXBsYXRlUmVzcG9uc2VcbiAgZXhwb3J0IHR5cGUgR2V0VGVtcGxhdGVSZXNwb25zZSA9IFRlbXBsYXRlUmVzcG9uc2VcblxuICBleHBvcnQgdHlwZSBQb3N0VGVtcGxhdGVEZXRhaWxDb250ZW50UmVzcG9uc2UgPSBUZW1wbGF0ZURldGFpbENvbnRlbnRSZXNwb25zZVxuICBleHBvcnQgdHlwZSBQdXRUZW1wbGF0ZURldGFpbENvbnRlbnRSZXNwb25zZSA9IFRlbXBsYXRlRGV0YWlsQ29udGVudFJlc3BvbnNlXG4gIGV4cG9ydCB0eXBlIEdldFRlbXBsYXRlRGV0YWlsQ29udGVudFJlc3BvbnNlID0gVGVtcGxhdGVEZXRhaWxDb250ZW50UmVzcG9uc2Vcbn1cbiIsImltcG9ydCB7IENvbW1vbiB9IGZyb20gJy4vQ29tbW9uJztcblxuZXhwb3J0IG5hbWVzcGFjZSBXZWJob29rIHtcbiAgZXhwb3J0IGVudW0gRXZlbnRUeXBlIHtcbiAgICBPcGVuID0gJ29wZW4nLFxuICAgIENsaWNrID0gJ2NsaWNrJyxcbiAgICBCb3VuY2UgPSAnYm91bmNlJyxcbiAgICBTcGFtID0gJ3NwYW0nLFxuICAgIEJsb2NrZWQgPSAnYmxvY2tlZCcsXG4gICAgVW5TdWIgPSAndW5zdWInLFxuICAgIFNlbnQgPSAnc2VudCcsXG4gIH1cblxuICBleHBvcnQgZW51bSBFdmVudFR5cGVWYWx1ZSB7XG4gICAgQ2xpY2sgPSAxLFxuICAgIEJvdW5jZSA9IDIsXG4gICAgU3BhbSA9IDMsXG4gICAgQmxvY2tlZCA9IDQsXG4gICAgVW5zdWJzY3JpYmUgPSA1LFxuICAgIE9wZW4gPSA2LFxuICAgIFNlbnQgPSA3LFxuICB9XG5cbiAgZXhwb3J0IGVudW0gU3RhdHVzIHtcbiAgICBEZWFkID0gJ2RlYWQnLFxuICAgIEFsaXZlID0gJ2FsaXZlJ1xuICB9XG5cbiAgZXhwb3J0IHR5cGUgVmVyc2lvbiA9IDEgfCAyO1xuXG4gIGV4cG9ydCBpbnRlcmZhY2UgRXZlbnRDYWxsYmFja1VybCB7XG4gICAgSUQ6IG51bWJlcjtcbiAgICBFdmVudFR5cGU6IEV2ZW50VHlwZTtcbiAgICBJc0JhY2t1cDogYm9vbGVhbjtcbiAgICBTdGF0dXM6IFN0YXR1cztcbiAgICBBUElLZXlJRDogbnVtYmVyO1xuICAgIFZlcnNpb246IFZlcnNpb247XG4gICAgVXJsOiBzdHJpbmc7XG4gIH1cblxuICAvLyBSRVFVRVNUIFBBUlRcbiAgZXhwb3J0IHR5cGUgUG9zdEV2ZW50Q2FsbGJhY2tVcmxCb2R5ID0ge1xuICAgIFVybDogc3RyaW5nO1xuICAgIEV2ZW50VHlwZT86IEV2ZW50VHlwZTtcbiAgICBJc0JhY2t1cD86IGJvb2xlYW47XG4gICAgU3RhdHVzPzogU3RhdHVzO1xuICB9XG5cbiAgZXhwb3J0IHR5cGUgUHV0RXZlbnRDYWxsYmFja1VybEJvZHkgPSBQYXJ0aWFsPFBvc3RFdmVudENhbGxiYWNrVXJsQm9keT5cblxuICBleHBvcnQgdHlwZSBHZXRFdmVudENhbGxiYWNrVXJsUXVlcnlQYXJhbXMgPSBQYXJ0aWFsPENvbW1vbi5QYWdpbmF0aW9uPiAmIHtcbiAgICBCYWNrdXA/OiBib29sZWFuO1xuICAgIEV2ZW50VHlwZT86IEV2ZW50VHlwZVZhbHVlO1xuICAgIFN0YXR1cz86IHN0cmluZztcbiAgICBWZXJzaW9uPzogVmVyc2lvbjtcbiAgfVxuXG4gIC8vIFJFU1BPTlNFIFBBUlRcbiAgdHlwZSBFdmVudENhbGxiYWNrVXJsUmVzcG9uc2UgPSB7XG4gICAgQ291bnQ6IG51bWJlcjtcbiAgICBUb3RhbDogbnVtYmVyO1xuICAgIERhdGE6IEV2ZW50Q2FsbGJhY2tVcmxbXTtcbiAgfTtcblxuICBleHBvcnQgdHlwZSBQb3N0RXZlbnRDYWxsYmFja1VybFJlc3BvbnNlID0gRXZlbnRDYWxsYmFja1VybFJlc3BvbnNlXG4gIGV4cG9ydCB0eXBlIFB1dEV2ZW50Q2FsbGJhY2tVcmxSZXNwb25zZSA9IEV2ZW50Q2FsbGJhY2tVcmxSZXNwb25zZVxuICBleHBvcnQgdHlwZSBHZXRFdmVudENhbGxiYWNrVXJsUmVzcG9uc2UgPSBFdmVudENhbGxiYWNrVXJsUmVzcG9uc2Vcbn1cbiIsIi8vIENPTU1PTlxuZXhwb3J0IHsgTGlicmFyeVJlc3BvbnNlLCBMaWJyYXJ5TG9jYWxSZXNwb25zZSB9IGZyb20gJy4vTGlicmFyeVJlc3BvbnNlJztcbmV4cG9ydCB7IENvbW1vbiB9IGZyb20gJy4vQ29tbW9uJztcblxuLy8gU0VORFxuZXhwb3J0IHtcbiAgU2VuZEVtYWlsVjMsXG4gIFNlbmRFbWFpbFYzXzEsXG59IGZyb20gJy4vU2VuZEVtYWlsJztcblxuLy8gQVBJXG5leHBvcnQgeyBNZXNzYWdlIH0gZnJvbSAnLi9NZXNzYWdlJztcbmV4cG9ydCB7XG4gIENvbnRhY3QsXG4gIENvbnRhY3RMaXN0LFxuICBCdWxrQ29udGFjdE1hbmFnZW1lbnQsXG4gIENvbnRhY3RQcm9wZXJ0aWVzLFxuICBDb250YWN0U3Vic2NyaXB0aW9uLFxuICBDb250YWN0VmVyaWZpY2F0aW9uLFxufSBmcm9tICcuL0NvbnRhY3QnO1xuZXhwb3J0IHtcbiAgRHJhZnRDYW1wYWlnbixcbiAgU2VudENhbXBhaWduLFxufSBmcm9tICcuL0NhbXBhaWduJztcbmV4cG9ydCB7IFNlZ21lbnRhdGlvbiB9IGZyb20gJy4vU2VnbWVudGF0aW9uJztcbmV4cG9ydCB7IFRlbXBsYXRlIH0gZnJvbSAnLi9UZW1wbGF0ZSc7XG5leHBvcnQgeyBTdGF0aXN0aWMgfSBmcm9tICcuL1N0YXRpc3RpYyc7XG5leHBvcnQgeyBNZXNzYWdlRXZlbnQgfSBmcm9tICcuL01lc3NhZ2VFdmVudCc7XG5leHBvcnQgeyBXZWJob29rIH0gZnJvbSAnLi9XZWJob29rJztcbmV4cG9ydCB7IFBhcnNlIH0gZnJvbSAnLi9QYXJzZSc7XG5leHBvcnQge1xuICBTZW5kZXIsXG4gIE1ldGFzZW5kZXIsXG4gIEROUyxcbn0gZnJvbSAnLi9TZW5kZXJBZGRyZXNzQW5kRG9tYWluJztcbmV4cG9ydCB7XG4gIEFQSUtleUNvbmZpZ3VyYXRpb24sXG4gIEFjY291bnRTZXR0aW5nLFxufSBmcm9tICcuL1NldHRpbmcnO1xuXG4vLyBTTVNcbmV4cG9ydCB7IFNlbmRNZXNzYWdlIH0gZnJvbSAnLi9TZW5kTWVzc2FnZSc7XG5leHBvcnQgeyBTTVNNZXNzYWdlIH0gZnJvbSAnLi9TTVNNZXNzYWdlJztcbiIsImltcG9ydCBpc05pbCBmcm9tICcuL2lzTmlsJztcbmltcG9ydCBpc051bGwgZnJvbSAnLi9pc051bGwnO1xuaW1wb3J0IGlzVW5kZWZpbmVkIGZyb20gJy4vaXNVbmRlZmluZWQnO1xuaW1wb3J0IGlzUHVyZU9iamVjdCBmcm9tICcuL2lzUHVyZU9iamVjdCc7XG5pbXBvcnQgc2V0VmFsdWVJZk5vdE5pbCBmcm9tICcuL3NldFZhbHVlSWZOb3ROaWwnO1xuXG5leHBvcnQge1xuICBpc05pbCxcbiAgaXNOdWxsLFxuICBpc1VuZGVmaW5lZCxcbiAgaXNQdXJlT2JqZWN0LFxuICBzZXRWYWx1ZUlmTm90TmlsLFxufTtcbiIsIi8qZXh0ZXJuYWwgbW9kdWxlcyovXG4vKnR5cGVzKi9cbi8qdXRpbHMqL1xuaW1wb3J0IGlzTnVsbCBmcm9tICcuL2lzTnVsbCc7XG5pbXBvcnQgaXNVbmRlZmluZWQgZnJvbSAnLi9pc1VuZGVmaW5lZCc7XG4vKmxpYiovXG4vKm90aGVyKi9cblxuZnVuY3Rpb24gaXNOaWwodmFsdWU6IHVua25vd24pOiBib29sZWFuIHtcbiAgcmV0dXJuIGlzVW5kZWZpbmVkKHZhbHVlKSB8fCBpc051bGwodmFsdWUpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc05pbDtcbiIsIi8qZXh0ZXJuYWwgbW9kdWxlcyovXG4vKnR5cGVzKi9cbi8qdXRpbHMqL1xuLypsaWIqL1xuLypvdGhlciovXG5cbmZ1bmN0aW9uIGlzTnVsbCh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIG51bGwge1xuICByZXR1cm4gdmFsdWUgPT09IG51bGw7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlzTnVsbDtcbiIsIi8qZXh0ZXJuYWwgbW9kdWxlcyovXG4vKnR5cGVzKi9cbi8qdXRpbHMqL1xuLypsaWIqL1xuLypvdGhlciovXG5cbmZ1bmN0aW9uIGlzUHVyZU9iamVjdCh2YWx1ZTogdW5rbm93bik6IGJvb2xlYW4ge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0J1xuICAgICYmIHZhbHVlICE9PSBudWxsXG4gICAgJiYgKE9iamVjdC5nZXRQcm90b3R5cGVPZih2YWx1ZSkgPT09IE9iamVjdC5wcm90b3R5cGUgfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKHZhbHVlKSA9PT0gbnVsbCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlzUHVyZU9iamVjdDtcbiIsIi8qZXh0ZXJuYWwgbW9kdWxlcyovXG4vKnR5cGVzKi9cbi8qdXRpbHMqL1xuLypsaWIqL1xuLypvdGhlciovXG5cbmZ1bmN0aW9uIGlzVW5kZWZpbmVkKHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlzVW5kZWZpbmVkO1xuIiwiLypleHRlcm5hbCBtb2R1bGVzKi9cbi8qdHlwZXMqL1xuaW1wb3J0IHsgVE9iamVjdCB9IGZyb20gJy4uL3R5cGVzJztcbi8qdXRpbHMqL1xuaW1wb3J0IGlzTmlsIGZyb20gJy4vaXNOaWwnO1xuaW1wb3J0IGlzTnVsbCBmcm9tICcuL2lzTnVsbCc7XG4vKmxpYiovXG4vKm90aGVyKi9cblxuZnVuY3Rpb24gc2V0VmFsdWVJZk5vdE5pbChcbiAgdGFyZ2V0T2JqZWN0OiBUT2JqZWN0LlVua25vd25SZWMsXG4gIHBhdGg6IHN0cmluZyxcbiAgdmFsdWU6IHVua25vd24sXG4pOiB2b2lkIHtcbiAgaWYgKHR5cGVvZiB0YXJnZXRPYmplY3QgIT09ICdvYmplY3QnIHx8IGlzTnVsbCh0YXJnZXRPYmplY3QpKSB7XG4gICAgdGhyb3cgRXJyb3IoJ0FyZ3VtZW50IFwidGFyZ2V0T2JqZWN0XCIgaXMgbm90IG9iamVjdCcpO1xuICB9XG5cbiAgaWYgKCFwYXRoKSB7XG4gICAgdGhyb3cgRXJyb3IoJ0FyZ3VtZW50IFwicGF0aFwiIGlzIHJlcXVpcmVkJyk7XG4gIH1cblxuICBpZiAoIWlzTmlsKHZhbHVlKSkge1xuICAgIHRhcmdldE9iamVjdFtwYXRoXSA9IHZhbHVlO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IHNldFZhbHVlSWZOb3ROaWw7XG4iLCI7KGZ1bmN0aW9uIChnbG9iYWxPYmplY3QpIHtcclxuICAndXNlIHN0cmljdCc7XHJcblxyXG4vKlxyXG4gKiAgICAgIGJpZ251bWJlci5qcyB2OS4wLjFcclxuICogICAgICBBIEphdmFTY3JpcHQgbGlicmFyeSBmb3IgYXJiaXRyYXJ5LXByZWNpc2lvbiBhcml0aG1ldGljLlxyXG4gKiAgICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9NaWtlTWNsL2JpZ251bWJlci5qc1xyXG4gKiAgICAgIENvcHlyaWdodCAoYykgMjAyMCBNaWNoYWVsIE1jbGF1Z2hsaW4gPE04Y2g4OGxAZ21haWwuY29tPlxyXG4gKiAgICAgIE1JVCBMaWNlbnNlZC5cclxuICpcclxuICogICAgICBCaWdOdW1iZXIucHJvdG90eXBlIG1ldGhvZHMgICAgIHwgIEJpZ051bWJlciBtZXRob2RzXHJcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XHJcbiAqICAgICAgYWJzb2x1dGVWYWx1ZSAgICAgICAgICAgIGFicyAgICB8ICBjbG9uZVxyXG4gKiAgICAgIGNvbXBhcmVkVG8gICAgICAgICAgICAgICAgICAgICAgfCAgY29uZmlnICAgICAgICAgICAgICAgc2V0XHJcbiAqICAgICAgZGVjaW1hbFBsYWNlcyAgICAgICAgICAgIGRwICAgICB8ICAgICAgREVDSU1BTF9QTEFDRVNcclxuICogICAgICBkaXZpZGVkQnkgICAgICAgICAgICAgICAgZGl2ICAgIHwgICAgICBST1VORElOR19NT0RFXHJcbiAqICAgICAgZGl2aWRlZFRvSW50ZWdlckJ5ICAgICAgIGlkaXYgICB8ICAgICAgRVhQT05FTlRJQUxfQVRcclxuICogICAgICBleHBvbmVudGlhdGVkQnkgICAgICAgICAgcG93ICAgIHwgICAgICBSQU5HRVxyXG4gKiAgICAgIGludGVnZXJWYWx1ZSAgICAgICAgICAgICAgICAgICAgfCAgICAgIENSWVBUT1xyXG4gKiAgICAgIGlzRXF1YWxUbyAgICAgICAgICAgICAgICBlcSAgICAgfCAgICAgIE1PRFVMT19NT0RFXHJcbiAqICAgICAgaXNGaW5pdGUgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgUE9XX1BSRUNJU0lPTlxyXG4gKiAgICAgIGlzR3JlYXRlclRoYW4gICAgICAgICAgICBndCAgICAgfCAgICAgIEZPUk1BVFxyXG4gKiAgICAgIGlzR3JlYXRlclRoYW5PckVxdWFsVG8gICBndGUgICAgfCAgICAgIEFMUEhBQkVUXHJcbiAqICAgICAgaXNJbnRlZ2VyICAgICAgICAgICAgICAgICAgICAgICB8ICBpc0JpZ051bWJlclxyXG4gKiAgICAgIGlzTGVzc1RoYW4gICAgICAgICAgICAgICBsdCAgICAgfCAgbWF4aW11bSAgICAgICAgICAgICAgbWF4XHJcbiAqICAgICAgaXNMZXNzVGhhbk9yRXF1YWxUbyAgICAgIGx0ZSAgICB8ICBtaW5pbXVtICAgICAgICAgICAgICBtaW5cclxuICogICAgICBpc05hTiAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIHJhbmRvbVxyXG4gKiAgICAgIGlzTmVnYXRpdmUgICAgICAgICAgICAgICAgICAgICAgfCAgc3VtXHJcbiAqICAgICAgaXNQb3NpdGl2ZSAgICAgICAgICAgICAgICAgICAgICB8XHJcbiAqICAgICAgaXNaZXJvICAgICAgICAgICAgICAgICAgICAgICAgICB8XHJcbiAqICAgICAgbWludXMgICAgICAgICAgICAgICAgICAgICAgICAgICB8XHJcbiAqICAgICAgbW9kdWxvICAgICAgICAgICAgICAgICAgIG1vZCAgICB8XHJcbiAqICAgICAgbXVsdGlwbGllZEJ5ICAgICAgICAgICAgIHRpbWVzICB8XHJcbiAqICAgICAgbmVnYXRlZCAgICAgICAgICAgICAgICAgICAgICAgICB8XHJcbiAqICAgICAgcGx1cyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XHJcbiAqICAgICAgcHJlY2lzaW9uICAgICAgICAgICAgICAgIHNkICAgICB8XHJcbiAqICAgICAgc2hpZnRlZEJ5ICAgICAgICAgICAgICAgICAgICAgICB8XHJcbiAqICAgICAgc3F1YXJlUm9vdCAgICAgICAgICAgICAgIHNxcnQgICB8XHJcbiAqICAgICAgdG9FeHBvbmVudGlhbCAgICAgICAgICAgICAgICAgICB8XHJcbiAqICAgICAgdG9GaXhlZCAgICAgICAgICAgICAgICAgICAgICAgICB8XHJcbiAqICAgICAgdG9Gb3JtYXQgICAgICAgICAgICAgICAgICAgICAgICB8XHJcbiAqICAgICAgdG9GcmFjdGlvbiAgICAgICAgICAgICAgICAgICAgICB8XHJcbiAqICAgICAgdG9KU09OICAgICAgICAgICAgICAgICAgICAgICAgICB8XHJcbiAqICAgICAgdG9OdW1iZXIgICAgICAgICAgICAgICAgICAgICAgICB8XHJcbiAqICAgICAgdG9QcmVjaXNpb24gICAgICAgICAgICAgICAgICAgICB8XHJcbiAqICAgICAgdG9TdHJpbmcgICAgICAgICAgICAgICAgICAgICAgICB8XHJcbiAqICAgICAgdmFsdWVPZiAgICAgICAgICAgICAgICAgICAgICAgICB8XHJcbiAqXHJcbiAqL1xyXG5cclxuXHJcbiAgdmFyIEJpZ051bWJlcixcclxuICAgIGlzTnVtZXJpYyA9IC9eLT8oPzpcXGQrKD86XFwuXFxkKik/fFxcLlxcZCspKD86ZVsrLV0/XFxkKyk/JC9pLFxyXG4gICAgbWF0aGNlaWwgPSBNYXRoLmNlaWwsXHJcbiAgICBtYXRoZmxvb3IgPSBNYXRoLmZsb29yLFxyXG5cclxuICAgIGJpZ251bWJlckVycm9yID0gJ1tCaWdOdW1iZXIgRXJyb3JdICcsXHJcbiAgICB0b29NYW55RGlnaXRzID0gYmlnbnVtYmVyRXJyb3IgKyAnTnVtYmVyIHByaW1pdGl2ZSBoYXMgbW9yZSB0aGFuIDE1IHNpZ25pZmljYW50IGRpZ2l0czogJyxcclxuXHJcbiAgICBCQVNFID0gMWUxNCxcclxuICAgIExPR19CQVNFID0gMTQsXHJcbiAgICBNQVhfU0FGRV9JTlRFR0VSID0gMHgxZmZmZmZmZmZmZmZmZiwgICAgICAgICAvLyAyXjUzIC0gMVxyXG4gICAgLy8gTUFYX0lOVDMyID0gMHg3ZmZmZmZmZiwgICAgICAgICAgICAgICAgICAgLy8gMl4zMSAtIDFcclxuICAgIFBPV1NfVEVOID0gWzEsIDEwLCAxMDAsIDFlMywgMWU0LCAxZTUsIDFlNiwgMWU3LCAxZTgsIDFlOSwgMWUxMCwgMWUxMSwgMWUxMiwgMWUxM10sXHJcbiAgICBTUVJUX0JBU0UgPSAxZTcsXHJcblxyXG4gICAgLy8gRURJVEFCTEVcclxuICAgIC8vIFRoZSBsaW1pdCBvbiB0aGUgdmFsdWUgb2YgREVDSU1BTF9QTEFDRVMsIFRPX0VYUF9ORUcsIFRPX0VYUF9QT1MsIE1JTl9FWFAsIE1BWF9FWFAsIGFuZFxyXG4gICAgLy8gdGhlIGFyZ3VtZW50cyB0byB0b0V4cG9uZW50aWFsLCB0b0ZpeGVkLCB0b0Zvcm1hdCwgYW5kIHRvUHJlY2lzaW9uLlxyXG4gICAgTUFYID0gMUU5OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gMCB0byBNQVhfSU5UMzJcclxuXHJcblxyXG4gIC8qXHJcbiAgICogQ3JlYXRlIGFuZCByZXR1cm4gYSBCaWdOdW1iZXIgY29uc3RydWN0b3IuXHJcbiAgICovXHJcbiAgZnVuY3Rpb24gY2xvbmUoY29uZmlnT2JqZWN0KSB7XHJcbiAgICB2YXIgZGl2LCBjb252ZXJ0QmFzZSwgcGFyc2VOdW1lcmljLFxyXG4gICAgICBQID0gQmlnTnVtYmVyLnByb3RvdHlwZSA9IHsgY29uc3RydWN0b3I6IEJpZ051bWJlciwgdG9TdHJpbmc6IG51bGwsIHZhbHVlT2Y6IG51bGwgfSxcclxuICAgICAgT05FID0gbmV3IEJpZ051bWJlcigxKSxcclxuXHJcblxyXG4gICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEVESVRBQkxFIENPTkZJRyBERUZBVUxUUyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG5cclxuICAgICAgLy8gVGhlIGRlZmF1bHQgdmFsdWVzIGJlbG93IG11c3QgYmUgaW50ZWdlcnMgd2l0aGluIHRoZSBpbmNsdXNpdmUgcmFuZ2VzIHN0YXRlZC5cclxuICAgICAgLy8gVGhlIHZhbHVlcyBjYW4gYWxzbyBiZSBjaGFuZ2VkIGF0IHJ1bi10aW1lIHVzaW5nIEJpZ051bWJlci5zZXQuXHJcblxyXG4gICAgICAvLyBUaGUgbWF4aW11bSBudW1iZXIgb2YgZGVjaW1hbCBwbGFjZXMgZm9yIG9wZXJhdGlvbnMgaW52b2x2aW5nIGRpdmlzaW9uLlxyXG4gICAgICBERUNJTUFMX1BMQUNFUyA9IDIwLCAgICAgICAgICAgICAgICAgICAgIC8vIDAgdG8gTUFYXHJcblxyXG4gICAgICAvLyBUaGUgcm91bmRpbmcgbW9kZSB1c2VkIHdoZW4gcm91bmRpbmcgdG8gdGhlIGFib3ZlIGRlY2ltYWwgcGxhY2VzLCBhbmQgd2hlbiB1c2luZ1xyXG4gICAgICAvLyB0b0V4cG9uZW50aWFsLCB0b0ZpeGVkLCB0b0Zvcm1hdCBhbmQgdG9QcmVjaXNpb24sIGFuZCByb3VuZCAoZGVmYXVsdCB2YWx1ZSkuXHJcbiAgICAgIC8vIFVQICAgICAgICAgMCBBd2F5IGZyb20gemVyby5cclxuICAgICAgLy8gRE9XTiAgICAgICAxIFRvd2FyZHMgemVyby5cclxuICAgICAgLy8gQ0VJTCAgICAgICAyIFRvd2FyZHMgK0luZmluaXR5LlxyXG4gICAgICAvLyBGTE9PUiAgICAgIDMgVG93YXJkcyAtSW5maW5pdHkuXHJcbiAgICAgIC8vIEhBTEZfVVAgICAgNCBUb3dhcmRzIG5lYXJlc3QgbmVpZ2hib3VyLiBJZiBlcXVpZGlzdGFudCwgdXAuXHJcbiAgICAgIC8vIEhBTEZfRE9XTiAgNSBUb3dhcmRzIG5lYXJlc3QgbmVpZ2hib3VyLiBJZiBlcXVpZGlzdGFudCwgZG93bi5cclxuICAgICAgLy8gSEFMRl9FVkVOICA2IFRvd2FyZHMgbmVhcmVzdCBuZWlnaGJvdXIuIElmIGVxdWlkaXN0YW50LCB0b3dhcmRzIGV2ZW4gbmVpZ2hib3VyLlxyXG4gICAgICAvLyBIQUxGX0NFSUwgIDcgVG93YXJkcyBuZWFyZXN0IG5laWdoYm91ci4gSWYgZXF1aWRpc3RhbnQsIHRvd2FyZHMgK0luZmluaXR5LlxyXG4gICAgICAvLyBIQUxGX0ZMT09SIDggVG93YXJkcyBuZWFyZXN0IG5laWdoYm91ci4gSWYgZXF1aWRpc3RhbnQsIHRvd2FyZHMgLUluZmluaXR5LlxyXG4gICAgICBST1VORElOR19NT0RFID0gNCwgICAgICAgICAgICAgICAgICAgICAgIC8vIDAgdG8gOFxyXG5cclxuICAgICAgLy8gRVhQT05FTlRJQUxfQVQgOiBbVE9fRVhQX05FRyAsIFRPX0VYUF9QT1NdXHJcblxyXG4gICAgICAvLyBUaGUgZXhwb25lbnQgdmFsdWUgYXQgYW5kIGJlbmVhdGggd2hpY2ggdG9TdHJpbmcgcmV0dXJucyBleHBvbmVudGlhbCBub3RhdGlvbi5cclxuICAgICAgLy8gTnVtYmVyIHR5cGU6IC03XHJcbiAgICAgIFRPX0VYUF9ORUcgPSAtNywgICAgICAgICAgICAgICAgICAgICAgICAgLy8gMCB0byAtTUFYXHJcblxyXG4gICAgICAvLyBUaGUgZXhwb25lbnQgdmFsdWUgYXQgYW5kIGFib3ZlIHdoaWNoIHRvU3RyaW5nIHJldHVybnMgZXhwb25lbnRpYWwgbm90YXRpb24uXHJcbiAgICAgIC8vIE51bWJlciB0eXBlOiAyMVxyXG4gICAgICBUT19FWFBfUE9TID0gMjEsICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDAgdG8gTUFYXHJcblxyXG4gICAgICAvLyBSQU5HRSA6IFtNSU5fRVhQLCBNQVhfRVhQXVxyXG5cclxuICAgICAgLy8gVGhlIG1pbmltdW0gZXhwb25lbnQgdmFsdWUsIGJlbmVhdGggd2hpY2ggdW5kZXJmbG93IHRvIHplcm8gb2NjdXJzLlxyXG4gICAgICAvLyBOdW1iZXIgdHlwZTogLTMyNCAgKDVlLTMyNClcclxuICAgICAgTUlOX0VYUCA9IC0xZTcsICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAtMSB0byAtTUFYXHJcblxyXG4gICAgICAvLyBUaGUgbWF4aW11bSBleHBvbmVudCB2YWx1ZSwgYWJvdmUgd2hpY2ggb3ZlcmZsb3cgdG8gSW5maW5pdHkgb2NjdXJzLlxyXG4gICAgICAvLyBOdW1iZXIgdHlwZTogIDMwOCAgKDEuNzk3NjkzMTM0ODYyMzE1N2UrMzA4KVxyXG4gICAgICAvLyBGb3IgTUFYX0VYUCA+IDFlNywgZS5nLiBuZXcgQmlnTnVtYmVyKCcxZTEwMDAwMDAwMCcpLnBsdXMoMSkgbWF5IGJlIHNsb3cuXHJcbiAgICAgIE1BWF9FWFAgPSAxZTcsICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gMSB0byBNQVhcclxuXHJcbiAgICAgIC8vIFdoZXRoZXIgdG8gdXNlIGNyeXB0b2dyYXBoaWNhbGx5LXNlY3VyZSByYW5kb20gbnVtYmVyIGdlbmVyYXRpb24sIGlmIGF2YWlsYWJsZS5cclxuICAgICAgQ1JZUFRPID0gZmFsc2UsICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0cnVlIG9yIGZhbHNlXHJcblxyXG4gICAgICAvLyBUaGUgbW9kdWxvIG1vZGUgdXNlZCB3aGVuIGNhbGN1bGF0aW5nIHRoZSBtb2R1bHVzOiBhIG1vZCBuLlxyXG4gICAgICAvLyBUaGUgcXVvdGllbnQgKHEgPSBhIC8gbikgaXMgY2FsY3VsYXRlZCBhY2NvcmRpbmcgdG8gdGhlIGNvcnJlc3BvbmRpbmcgcm91bmRpbmcgbW9kZS5cclxuICAgICAgLy8gVGhlIHJlbWFpbmRlciAocikgaXMgY2FsY3VsYXRlZCBhczogciA9IGEgLSBuICogcS5cclxuICAgICAgLy9cclxuICAgICAgLy8gVVAgICAgICAgIDAgVGhlIHJlbWFpbmRlciBpcyBwb3NpdGl2ZSBpZiB0aGUgZGl2aWRlbmQgaXMgbmVnYXRpdmUsIGVsc2UgaXMgbmVnYXRpdmUuXHJcbiAgICAgIC8vIERPV04gICAgICAxIFRoZSByZW1haW5kZXIgaGFzIHRoZSBzYW1lIHNpZ24gYXMgdGhlIGRpdmlkZW5kLlxyXG4gICAgICAvLyAgICAgICAgICAgICBUaGlzIG1vZHVsbyBtb2RlIGlzIGNvbW1vbmx5IGtub3duIGFzICd0cnVuY2F0ZWQgZGl2aXNpb24nIGFuZCBpc1xyXG4gICAgICAvLyAgICAgICAgICAgICBlcXVpdmFsZW50IHRvIChhICUgbikgaW4gSmF2YVNjcmlwdC5cclxuICAgICAgLy8gRkxPT1IgICAgIDMgVGhlIHJlbWFpbmRlciBoYXMgdGhlIHNhbWUgc2lnbiBhcyB0aGUgZGl2aXNvciAoUHl0aG9uICUpLlxyXG4gICAgICAvLyBIQUxGX0VWRU4gNiBUaGlzIG1vZHVsbyBtb2RlIGltcGxlbWVudHMgdGhlIElFRUUgNzU0IHJlbWFpbmRlciBmdW5jdGlvbi5cclxuICAgICAgLy8gRVVDTElEICAgIDkgRXVjbGlkaWFuIGRpdmlzaW9uLiBxID0gc2lnbihuKSAqIGZsb29yKGEgLyBhYnMobikpLlxyXG4gICAgICAvLyAgICAgICAgICAgICBUaGUgcmVtYWluZGVyIGlzIGFsd2F5cyBwb3NpdGl2ZS5cclxuICAgICAgLy9cclxuICAgICAgLy8gVGhlIHRydW5jYXRlZCBkaXZpc2lvbiwgZmxvb3JlZCBkaXZpc2lvbiwgRXVjbGlkaWFuIGRpdmlzaW9uIGFuZCBJRUVFIDc1NCByZW1haW5kZXJcclxuICAgICAgLy8gbW9kZXMgYXJlIGNvbW1vbmx5IHVzZWQgZm9yIHRoZSBtb2R1bHVzIG9wZXJhdGlvbi5cclxuICAgICAgLy8gQWx0aG91Z2ggdGhlIG90aGVyIHJvdW5kaW5nIG1vZGVzIGNhbiBhbHNvIGJlIHVzZWQsIHRoZXkgbWF5IG5vdCBnaXZlIHVzZWZ1bCByZXN1bHRzLlxyXG4gICAgICBNT0RVTE9fTU9ERSA9IDEsICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDAgdG8gOVxyXG5cclxuICAgICAgLy8gVGhlIG1heGltdW0gbnVtYmVyIG9mIHNpZ25pZmljYW50IGRpZ2l0cyBvZiB0aGUgcmVzdWx0IG9mIHRoZSBleHBvbmVudGlhdGVkQnkgb3BlcmF0aW9uLlxyXG4gICAgICAvLyBJZiBQT1dfUFJFQ0lTSU9OIGlzIDAsIHRoZXJlIHdpbGwgYmUgdW5saW1pdGVkIHNpZ25pZmljYW50IGRpZ2l0cy5cclxuICAgICAgUE9XX1BSRUNJU0lPTiA9IDAsICAgICAgICAgICAgICAgICAgICAvLyAwIHRvIE1BWFxyXG5cclxuICAgICAgLy8gVGhlIGZvcm1hdCBzcGVjaWZpY2F0aW9uIHVzZWQgYnkgdGhlIEJpZ051bWJlci5wcm90b3R5cGUudG9Gb3JtYXQgbWV0aG9kLlxyXG4gICAgICBGT1JNQVQgPSB7XHJcbiAgICAgICAgcHJlZml4OiAnJyxcclxuICAgICAgICBncm91cFNpemU6IDMsXHJcbiAgICAgICAgc2Vjb25kYXJ5R3JvdXBTaXplOiAwLFxyXG4gICAgICAgIGdyb3VwU2VwYXJhdG9yOiAnLCcsXHJcbiAgICAgICAgZGVjaW1hbFNlcGFyYXRvcjogJy4nLFxyXG4gICAgICAgIGZyYWN0aW9uR3JvdXBTaXplOiAwLFxyXG4gICAgICAgIGZyYWN0aW9uR3JvdXBTZXBhcmF0b3I6ICdcXHhBMCcsICAgICAgLy8gbm9uLWJyZWFraW5nIHNwYWNlXHJcbiAgICAgICAgc3VmZml4OiAnJ1xyXG4gICAgICB9LFxyXG5cclxuICAgICAgLy8gVGhlIGFscGhhYmV0IHVzZWQgZm9yIGJhc2UgY29udmVyc2lvbi4gSXQgbXVzdCBiZSBhdCBsZWFzdCAyIGNoYXJhY3RlcnMgbG9uZywgd2l0aCBubyAnKycsXHJcbiAgICAgIC8vICctJywgJy4nLCB3aGl0ZXNwYWNlLCBvciByZXBlYXRlZCBjaGFyYWN0ZXIuXHJcbiAgICAgIC8vICcwMTIzNDU2Nzg5YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWiRfJ1xyXG4gICAgICBBTFBIQUJFVCA9ICcwMTIzNDU2Nzg5YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXonO1xyXG5cclxuXHJcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuXHJcbiAgICAvLyBDT05TVFJVQ1RPUlxyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogVGhlIEJpZ051bWJlciBjb25zdHJ1Y3RvciBhbmQgZXhwb3J0ZWQgZnVuY3Rpb24uXHJcbiAgICAgKiBDcmVhdGUgYW5kIHJldHVybiBhIG5ldyBpbnN0YW5jZSBvZiBhIEJpZ051bWJlciBvYmplY3QuXHJcbiAgICAgKlxyXG4gICAgICogdiB7bnVtYmVyfHN0cmluZ3xCaWdOdW1iZXJ9IEEgbnVtZXJpYyB2YWx1ZS5cclxuICAgICAqIFtiXSB7bnVtYmVyfSBUaGUgYmFzZSBvZiB2LiBJbnRlZ2VyLCAyIHRvIEFMUEhBQkVULmxlbmd0aCBpbmNsdXNpdmUuXHJcbiAgICAgKi9cclxuICAgIGZ1bmN0aW9uIEJpZ051bWJlcih2LCBiKSB7XHJcbiAgICAgIHZhciBhbHBoYWJldCwgYywgY2FzZUNoYW5nZWQsIGUsIGksIGlzTnVtLCBsZW4sIHN0cixcclxuICAgICAgICB4ID0gdGhpcztcclxuXHJcbiAgICAgIC8vIEVuYWJsZSBjb25zdHJ1Y3RvciBjYWxsIHdpdGhvdXQgYG5ld2AuXHJcbiAgICAgIGlmICghKHggaW5zdGFuY2VvZiBCaWdOdW1iZXIpKSByZXR1cm4gbmV3IEJpZ051bWJlcih2LCBiKTtcclxuXHJcbiAgICAgIGlmIChiID09IG51bGwpIHtcclxuXHJcbiAgICAgICAgaWYgKHYgJiYgdi5faXNCaWdOdW1iZXIgPT09IHRydWUpIHtcclxuICAgICAgICAgIHgucyA9IHYucztcclxuXHJcbiAgICAgICAgICBpZiAoIXYuYyB8fCB2LmUgPiBNQVhfRVhQKSB7XHJcbiAgICAgICAgICAgIHguYyA9IHguZSA9IG51bGw7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKHYuZSA8IE1JTl9FWFApIHtcclxuICAgICAgICAgICAgeC5jID0gW3guZSA9IDBdO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgeC5lID0gdi5lO1xyXG4gICAgICAgICAgICB4LmMgPSB2LmMuc2xpY2UoKTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoKGlzTnVtID0gdHlwZW9mIHYgPT0gJ251bWJlcicpICYmIHYgKiAwID09IDApIHtcclxuXHJcbiAgICAgICAgICAvLyBVc2UgYDEgLyBuYCB0byBoYW5kbGUgbWludXMgemVybyBhbHNvLlxyXG4gICAgICAgICAgeC5zID0gMSAvIHYgPCAwID8gKHYgPSAtdiwgLTEpIDogMTtcclxuXHJcbiAgICAgICAgICAvLyBGYXN0IHBhdGggZm9yIGludGVnZXJzLCB3aGVyZSBuIDwgMjE0NzQ4MzY0OCAoMioqMzEpLlxyXG4gICAgICAgICAgaWYgKHYgPT09IH5+dikge1xyXG4gICAgICAgICAgICBmb3IgKGUgPSAwLCBpID0gdjsgaSA+PSAxMDsgaSAvPSAxMCwgZSsrKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChlID4gTUFYX0VYUCkge1xyXG4gICAgICAgICAgICAgIHguYyA9IHguZSA9IG51bGw7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgeC5lID0gZTtcclxuICAgICAgICAgICAgICB4LmMgPSBbdl07XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBzdHIgPSBTdHJpbmcodik7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgICBpZiAoIWlzTnVtZXJpYy50ZXN0KHN0ciA9IFN0cmluZyh2KSkpIHJldHVybiBwYXJzZU51bWVyaWMoeCwgc3RyLCBpc051bSk7XHJcblxyXG4gICAgICAgICAgeC5zID0gc3RyLmNoYXJDb2RlQXQoMCkgPT0gNDUgPyAoc3RyID0gc3RyLnNsaWNlKDEpLCAtMSkgOiAxO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gRGVjaW1hbCBwb2ludD9cclxuICAgICAgICBpZiAoKGUgPSBzdHIuaW5kZXhPZignLicpKSA+IC0xKSBzdHIgPSBzdHIucmVwbGFjZSgnLicsICcnKTtcclxuXHJcbiAgICAgICAgLy8gRXhwb25lbnRpYWwgZm9ybT9cclxuICAgICAgICBpZiAoKGkgPSBzdHIuc2VhcmNoKC9lL2kpKSA+IDApIHtcclxuXHJcbiAgICAgICAgICAvLyBEZXRlcm1pbmUgZXhwb25lbnQuXHJcbiAgICAgICAgICBpZiAoZSA8IDApIGUgPSBpO1xyXG4gICAgICAgICAgZSArPSArc3RyLnNsaWNlKGkgKyAxKTtcclxuICAgICAgICAgIHN0ciA9IHN0ci5zdWJzdHJpbmcoMCwgaSk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChlIDwgMCkge1xyXG5cclxuICAgICAgICAgIC8vIEludGVnZXIuXHJcbiAgICAgICAgICBlID0gc3RyLmxlbmd0aDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICAvLyAnW0JpZ051bWJlciBFcnJvcl0gQmFzZSB7bm90IGEgcHJpbWl0aXZlIG51bWJlcnxub3QgYW4gaW50ZWdlcnxvdXQgb2YgcmFuZ2V9OiB7Yn0nXHJcbiAgICAgICAgaW50Q2hlY2soYiwgMiwgQUxQSEFCRVQubGVuZ3RoLCAnQmFzZScpO1xyXG5cclxuICAgICAgICAvLyBBbGxvdyBleHBvbmVudGlhbCBub3RhdGlvbiB0byBiZSB1c2VkIHdpdGggYmFzZSAxMCBhcmd1bWVudCwgd2hpbGVcclxuICAgICAgICAvLyBhbHNvIHJvdW5kaW5nIHRvIERFQ0lNQUxfUExBQ0VTIGFzIHdpdGggb3RoZXIgYmFzZXMuXHJcbiAgICAgICAgaWYgKGIgPT0gMTApIHtcclxuICAgICAgICAgIHggPSBuZXcgQmlnTnVtYmVyKHYpO1xyXG4gICAgICAgICAgcmV0dXJuIHJvdW5kKHgsIERFQ0lNQUxfUExBQ0VTICsgeC5lICsgMSwgUk9VTkRJTkdfTU9ERSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzdHIgPSBTdHJpbmcodik7XHJcblxyXG4gICAgICAgIGlmIChpc051bSA9IHR5cGVvZiB2ID09ICdudW1iZXInKSB7XHJcblxyXG4gICAgICAgICAgLy8gQXZvaWQgcG90ZW50aWFsIGludGVycHJldGF0aW9uIG9mIEluZmluaXR5IGFuZCBOYU4gYXMgYmFzZSA0NCsgdmFsdWVzLlxyXG4gICAgICAgICAgaWYgKHYgKiAwICE9IDApIHJldHVybiBwYXJzZU51bWVyaWMoeCwgc3RyLCBpc051bSwgYik7XHJcblxyXG4gICAgICAgICAgeC5zID0gMSAvIHYgPCAwID8gKHN0ciA9IHN0ci5zbGljZSgxKSwgLTEpIDogMTtcclxuXHJcbiAgICAgICAgICAvLyAnW0JpZ051bWJlciBFcnJvcl0gTnVtYmVyIHByaW1pdGl2ZSBoYXMgbW9yZSB0aGFuIDE1IHNpZ25pZmljYW50IGRpZ2l0czoge259J1xyXG4gICAgICAgICAgaWYgKEJpZ051bWJlci5ERUJVRyAmJiBzdHIucmVwbGFjZSgvXjBcXC4wKnxcXC4vLCAnJykubGVuZ3RoID4gMTUpIHtcclxuICAgICAgICAgICAgdGhyb3cgRXJyb3JcclxuICAgICAgICAgICAgICh0b29NYW55RGlnaXRzICsgdik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHgucyA9IHN0ci5jaGFyQ29kZUF0KDApID09PSA0NSA/IChzdHIgPSBzdHIuc2xpY2UoMSksIC0xKSA6IDE7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBhbHBoYWJldCA9IEFMUEhBQkVULnNsaWNlKDAsIGIpO1xyXG4gICAgICAgIGUgPSBpID0gMDtcclxuXHJcbiAgICAgICAgLy8gQ2hlY2sgdGhhdCBzdHIgaXMgYSB2YWxpZCBiYXNlIGIgbnVtYmVyLlxyXG4gICAgICAgIC8vIERvbid0IHVzZSBSZWdFeHAsIHNvIGFscGhhYmV0IGNhbiBjb250YWluIHNwZWNpYWwgY2hhcmFjdGVycy5cclxuICAgICAgICBmb3IgKGxlbiA9IHN0ci5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgaWYgKGFscGhhYmV0LmluZGV4T2YoYyA9IHN0ci5jaGFyQXQoaSkpIDwgMCkge1xyXG4gICAgICAgICAgICBpZiAoYyA9PSAnLicpIHtcclxuXHJcbiAgICAgICAgICAgICAgLy8gSWYgJy4nIGlzIG5vdCB0aGUgZmlyc3QgY2hhcmFjdGVyIGFuZCBpdCBoYXMgbm90IGJlIGZvdW5kIGJlZm9yZS5cclxuICAgICAgICAgICAgICBpZiAoaSA+IGUpIHtcclxuICAgICAgICAgICAgICAgIGUgPSBsZW47XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIWNhc2VDaGFuZ2VkKSB7XHJcblxyXG4gICAgICAgICAgICAgIC8vIEFsbG93IGUuZy4gaGV4YWRlY2ltYWwgJ0ZGJyBhcyB3ZWxsIGFzICdmZicuXHJcbiAgICAgICAgICAgICAgaWYgKHN0ciA9PSBzdHIudG9VcHBlckNhc2UoKSAmJiAoc3RyID0gc3RyLnRvTG93ZXJDYXNlKCkpIHx8XHJcbiAgICAgICAgICAgICAgICAgIHN0ciA9PSBzdHIudG9Mb3dlckNhc2UoKSAmJiAoc3RyID0gc3RyLnRvVXBwZXJDYXNlKCkpKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlQ2hhbmdlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBpID0gLTE7XHJcbiAgICAgICAgICAgICAgICBlID0gMDtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHBhcnNlTnVtZXJpYyh4LCBTdHJpbmcodiksIGlzTnVtLCBiKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFByZXZlbnQgbGF0ZXIgY2hlY2sgZm9yIGxlbmd0aCBvbiBjb252ZXJ0ZWQgbnVtYmVyLlxyXG4gICAgICAgIGlzTnVtID0gZmFsc2U7XHJcbiAgICAgICAgc3RyID0gY29udmVydEJhc2Uoc3RyLCBiLCAxMCwgeC5zKTtcclxuXHJcbiAgICAgICAgLy8gRGVjaW1hbCBwb2ludD9cclxuICAgICAgICBpZiAoKGUgPSBzdHIuaW5kZXhPZignLicpKSA+IC0xKSBzdHIgPSBzdHIucmVwbGFjZSgnLicsICcnKTtcclxuICAgICAgICBlbHNlIGUgPSBzdHIubGVuZ3RoO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBEZXRlcm1pbmUgbGVhZGluZyB6ZXJvcy5cclxuICAgICAgZm9yIChpID0gMDsgc3RyLmNoYXJDb2RlQXQoaSkgPT09IDQ4OyBpKyspO1xyXG5cclxuICAgICAgLy8gRGV0ZXJtaW5lIHRyYWlsaW5nIHplcm9zLlxyXG4gICAgICBmb3IgKGxlbiA9IHN0ci5sZW5ndGg7IHN0ci5jaGFyQ29kZUF0KC0tbGVuKSA9PT0gNDg7KTtcclxuXHJcbiAgICAgIGlmIChzdHIgPSBzdHIuc2xpY2UoaSwgKytsZW4pKSB7XHJcbiAgICAgICAgbGVuIC09IGk7XHJcblxyXG4gICAgICAgIC8vICdbQmlnTnVtYmVyIEVycm9yXSBOdW1iZXIgcHJpbWl0aXZlIGhhcyBtb3JlIHRoYW4gMTUgc2lnbmlmaWNhbnQgZGlnaXRzOiB7bn0nXHJcbiAgICAgICAgaWYgKGlzTnVtICYmIEJpZ051bWJlci5ERUJVRyAmJlxyXG4gICAgICAgICAgbGVuID4gMTUgJiYgKHYgPiBNQVhfU0FGRV9JTlRFR0VSIHx8IHYgIT09IG1hdGhmbG9vcih2KSkpIHtcclxuICAgICAgICAgICAgdGhyb3cgRXJyb3JcclxuICAgICAgICAgICAgICh0b29NYW55RGlnaXRzICsgKHgucyAqIHYpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgICAvLyBPdmVyZmxvdz9cclxuICAgICAgICBpZiAoKGUgPSBlIC0gaSAtIDEpID4gTUFYX0VYUCkge1xyXG5cclxuICAgICAgICAgIC8vIEluZmluaXR5LlxyXG4gICAgICAgICAgeC5jID0geC5lID0gbnVsbDtcclxuXHJcbiAgICAgICAgLy8gVW5kZXJmbG93P1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZSA8IE1JTl9FWFApIHtcclxuXHJcbiAgICAgICAgICAvLyBaZXJvLlxyXG4gICAgICAgICAgeC5jID0gW3guZSA9IDBdO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB4LmUgPSBlO1xyXG4gICAgICAgICAgeC5jID0gW107XHJcblxyXG4gICAgICAgICAgLy8gVHJhbnNmb3JtIGJhc2VcclxuXHJcbiAgICAgICAgICAvLyBlIGlzIHRoZSBiYXNlIDEwIGV4cG9uZW50LlxyXG4gICAgICAgICAgLy8gaSBpcyB3aGVyZSB0byBzbGljZSBzdHIgdG8gZ2V0IHRoZSBmaXJzdCBlbGVtZW50IG9mIHRoZSBjb2VmZmljaWVudCBhcnJheS5cclxuICAgICAgICAgIGkgPSAoZSArIDEpICUgTE9HX0JBU0U7XHJcbiAgICAgICAgICBpZiAoZSA8IDApIGkgKz0gTE9HX0JBU0U7ICAvLyBpIDwgMVxyXG5cclxuICAgICAgICAgIGlmIChpIDwgbGVuKSB7XHJcbiAgICAgICAgICAgIGlmIChpKSB4LmMucHVzaCgrc3RyLnNsaWNlKDAsIGkpKTtcclxuXHJcbiAgICAgICAgICAgIGZvciAobGVuIC09IExPR19CQVNFOyBpIDwgbGVuOykge1xyXG4gICAgICAgICAgICAgIHguYy5wdXNoKCtzdHIuc2xpY2UoaSwgaSArPSBMT0dfQkFTRSkpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpID0gTE9HX0JBU0UgLSAoc3RyID0gc3RyLnNsaWNlKGkpKS5sZW5ndGg7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpIC09IGxlbjtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBmb3IgKDsgaS0tOyBzdHIgKz0gJzAnKTtcclxuICAgICAgICAgIHguYy5wdXNoKCtzdHIpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgLy8gWmVyby5cclxuICAgICAgICB4LmMgPSBbeC5lID0gMF07XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8gQ09OU1RSVUNUT1IgUFJPUEVSVElFU1xyXG5cclxuXHJcbiAgICBCaWdOdW1iZXIuY2xvbmUgPSBjbG9uZTtcclxuXHJcbiAgICBCaWdOdW1iZXIuUk9VTkRfVVAgPSAwO1xyXG4gICAgQmlnTnVtYmVyLlJPVU5EX0RPV04gPSAxO1xyXG4gICAgQmlnTnVtYmVyLlJPVU5EX0NFSUwgPSAyO1xyXG4gICAgQmlnTnVtYmVyLlJPVU5EX0ZMT09SID0gMztcclxuICAgIEJpZ051bWJlci5ST1VORF9IQUxGX1VQID0gNDtcclxuICAgIEJpZ051bWJlci5ST1VORF9IQUxGX0RPV04gPSA1O1xyXG4gICAgQmlnTnVtYmVyLlJPVU5EX0hBTEZfRVZFTiA9IDY7XHJcbiAgICBCaWdOdW1iZXIuUk9VTkRfSEFMRl9DRUlMID0gNztcclxuICAgIEJpZ051bWJlci5ST1VORF9IQUxGX0ZMT09SID0gODtcclxuICAgIEJpZ051bWJlci5FVUNMSUQgPSA5O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogQ29uZmlndXJlIGluZnJlcXVlbnRseS1jaGFuZ2luZyBsaWJyYXJ5LXdpZGUgc2V0dGluZ3MuXHJcbiAgICAgKlxyXG4gICAgICogQWNjZXB0IGFuIG9iamVjdCB3aXRoIHRoZSBmb2xsb3dpbmcgb3B0aW9uYWwgcHJvcGVydGllcyAoaWYgdGhlIHZhbHVlIG9mIGEgcHJvcGVydHkgaXNcclxuICAgICAqIGEgbnVtYmVyLCBpdCBtdXN0IGJlIGFuIGludGVnZXIgd2l0aGluIHRoZSBpbmNsdXNpdmUgcmFuZ2Ugc3RhdGVkKTpcclxuICAgICAqXHJcbiAgICAgKiAgIERFQ0lNQUxfUExBQ0VTICAge251bWJlcn0gICAgICAgICAgIDAgdG8gTUFYXHJcbiAgICAgKiAgIFJPVU5ESU5HX01PREUgICAge251bWJlcn0gICAgICAgICAgIDAgdG8gOFxyXG4gICAgICogICBFWFBPTkVOVElBTF9BVCAgIHtudW1iZXJ8bnVtYmVyW119ICAtTUFYIHRvIE1BWCAgb3IgIFstTUFYIHRvIDAsIDAgdG8gTUFYXVxyXG4gICAgICogICBSQU5HRSAgICAgICAgICAgIHtudW1iZXJ8bnVtYmVyW119ICAtTUFYIHRvIE1BWCAobm90IHplcm8pICBvciAgWy1NQVggdG8gLTEsIDEgdG8gTUFYXVxyXG4gICAgICogICBDUllQVE8gICAgICAgICAgIHtib29sZWFufSAgICAgICAgICB0cnVlIG9yIGZhbHNlXHJcbiAgICAgKiAgIE1PRFVMT19NT0RFICAgICAge251bWJlcn0gICAgICAgICAgIDAgdG8gOVxyXG4gICAgICogICBQT1dfUFJFQ0lTSU9OICAgICAgIHtudW1iZXJ9ICAgICAgICAgICAwIHRvIE1BWFxyXG4gICAgICogICBBTFBIQUJFVCAgICAgICAgIHtzdHJpbmd9ICAgICAgICAgICBBIHN0cmluZyBvZiB0d28gb3IgbW9yZSB1bmlxdWUgY2hhcmFjdGVycyB3aGljaCBkb2VzXHJcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdCBjb250YWluICcuJy5cclxuICAgICAqICAgRk9STUFUICAgICAgICAgICB7b2JqZWN0fSAgICAgICAgICAgQW4gb2JqZWN0IHdpdGggc29tZSBvZiB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XHJcbiAgICAgKiAgICAgcHJlZml4ICAgICAgICAgICAgICAgICB7c3RyaW5nfVxyXG4gICAgICogICAgIGdyb3VwU2l6ZSAgICAgICAgICAgICAge251bWJlcn1cclxuICAgICAqICAgICBzZWNvbmRhcnlHcm91cFNpemUgICAgIHtudW1iZXJ9XHJcbiAgICAgKiAgICAgZ3JvdXBTZXBhcmF0b3IgICAgICAgICB7c3RyaW5nfVxyXG4gICAgICogICAgIGRlY2ltYWxTZXBhcmF0b3IgICAgICAge3N0cmluZ31cclxuICAgICAqICAgICBmcmFjdGlvbkdyb3VwU2l6ZSAgICAgIHtudW1iZXJ9XHJcbiAgICAgKiAgICAgZnJhY3Rpb25Hcm91cFNlcGFyYXRvciB7c3RyaW5nfVxyXG4gICAgICogICAgIHN1ZmZpeCAgICAgICAgICAgICAgICAge3N0cmluZ31cclxuICAgICAqXHJcbiAgICAgKiAoVGhlIHZhbHVlcyBhc3NpZ25lZCB0byB0aGUgYWJvdmUgRk9STUFUIG9iamVjdCBwcm9wZXJ0aWVzIGFyZSBub3QgY2hlY2tlZCBmb3IgdmFsaWRpdHkuKVxyXG4gICAgICpcclxuICAgICAqIEUuZy5cclxuICAgICAqIEJpZ051bWJlci5jb25maWcoeyBERUNJTUFMX1BMQUNFUyA6IDIwLCBST1VORElOR19NT0RFIDogNCB9KVxyXG4gICAgICpcclxuICAgICAqIElnbm9yZSBwcm9wZXJ0aWVzL3BhcmFtZXRlcnMgc2V0IHRvIG51bGwgb3IgdW5kZWZpbmVkLCBleGNlcHQgZm9yIEFMUEhBQkVULlxyXG4gICAgICpcclxuICAgICAqIFJldHVybiBhbiBvYmplY3Qgd2l0aCB0aGUgcHJvcGVydGllcyBjdXJyZW50IHZhbHVlcy5cclxuICAgICAqL1xyXG4gICAgQmlnTnVtYmVyLmNvbmZpZyA9IEJpZ051bWJlci5zZXQgPSBmdW5jdGlvbiAob2JqKSB7XHJcbiAgICAgIHZhciBwLCB2O1xyXG5cclxuICAgICAgaWYgKG9iaiAhPSBudWxsKSB7XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2Ygb2JqID09ICdvYmplY3QnKSB7XHJcblxyXG4gICAgICAgICAgLy8gREVDSU1BTF9QTEFDRVMge251bWJlcn0gSW50ZWdlciwgMCB0byBNQVggaW5jbHVzaXZlLlxyXG4gICAgICAgICAgLy8gJ1tCaWdOdW1iZXIgRXJyb3JdIERFQ0lNQUxfUExBQ0VTIHtub3QgYSBwcmltaXRpdmUgbnVtYmVyfG5vdCBhbiBpbnRlZ2VyfG91dCBvZiByYW5nZX06IHt2fSdcclxuICAgICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkocCA9ICdERUNJTUFMX1BMQUNFUycpKSB7XHJcbiAgICAgICAgICAgIHYgPSBvYmpbcF07XHJcbiAgICAgICAgICAgIGludENoZWNrKHYsIDAsIE1BWCwgcCk7XHJcbiAgICAgICAgICAgIERFQ0lNQUxfUExBQ0VTID0gdjtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAvLyBST1VORElOR19NT0RFIHtudW1iZXJ9IEludGVnZXIsIDAgdG8gOCBpbmNsdXNpdmUuXHJcbiAgICAgICAgICAvLyAnW0JpZ051bWJlciBFcnJvcl0gUk9VTkRJTkdfTU9ERSB7bm90IGEgcHJpbWl0aXZlIG51bWJlcnxub3QgYW4gaW50ZWdlcnxvdXQgb2YgcmFuZ2V9OiB7dn0nXHJcbiAgICAgICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KHAgPSAnUk9VTkRJTkdfTU9ERScpKSB7XHJcbiAgICAgICAgICAgIHYgPSBvYmpbcF07XHJcbiAgICAgICAgICAgIGludENoZWNrKHYsIDAsIDgsIHApO1xyXG4gICAgICAgICAgICBST1VORElOR19NT0RFID0gdjtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAvLyBFWFBPTkVOVElBTF9BVCB7bnVtYmVyfG51bWJlcltdfVxyXG4gICAgICAgICAgLy8gSW50ZWdlciwgLU1BWCB0byBNQVggaW5jbHVzaXZlIG9yXHJcbiAgICAgICAgICAvLyBbaW50ZWdlciAtTUFYIHRvIDAgaW5jbHVzaXZlLCAwIHRvIE1BWCBpbmNsdXNpdmVdLlxyXG4gICAgICAgICAgLy8gJ1tCaWdOdW1iZXIgRXJyb3JdIEVYUE9ORU5USUFMX0FUIHtub3QgYSBwcmltaXRpdmUgbnVtYmVyfG5vdCBhbiBpbnRlZ2VyfG91dCBvZiByYW5nZX06IHt2fSdcclxuICAgICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkocCA9ICdFWFBPTkVOVElBTF9BVCcpKSB7XHJcbiAgICAgICAgICAgIHYgPSBvYmpbcF07XHJcbiAgICAgICAgICAgIGlmICh2ICYmIHYucG9wKSB7XHJcbiAgICAgICAgICAgICAgaW50Q2hlY2sodlswXSwgLU1BWCwgMCwgcCk7XHJcbiAgICAgICAgICAgICAgaW50Q2hlY2sodlsxXSwgMCwgTUFYLCBwKTtcclxuICAgICAgICAgICAgICBUT19FWFBfTkVHID0gdlswXTtcclxuICAgICAgICAgICAgICBUT19FWFBfUE9TID0gdlsxXTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBpbnRDaGVjayh2LCAtTUFYLCBNQVgsIHApO1xyXG4gICAgICAgICAgICAgIFRPX0VYUF9ORUcgPSAtKFRPX0VYUF9QT1MgPSB2IDwgMCA/IC12IDogdik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAvLyBSQU5HRSB7bnVtYmVyfG51bWJlcltdfSBOb24temVybyBpbnRlZ2VyLCAtTUFYIHRvIE1BWCBpbmNsdXNpdmUgb3JcclxuICAgICAgICAgIC8vIFtpbnRlZ2VyIC1NQVggdG8gLTEgaW5jbHVzaXZlLCBpbnRlZ2VyIDEgdG8gTUFYIGluY2x1c2l2ZV0uXHJcbiAgICAgICAgICAvLyAnW0JpZ051bWJlciBFcnJvcl0gUkFOR0Uge25vdCBhIHByaW1pdGl2ZSBudW1iZXJ8bm90IGFuIGludGVnZXJ8b3V0IG9mIHJhbmdlfGNhbm5vdCBiZSB6ZXJvfToge3Z9J1xyXG4gICAgICAgICAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShwID0gJ1JBTkdFJykpIHtcclxuICAgICAgICAgICAgdiA9IG9ialtwXTtcclxuICAgICAgICAgICAgaWYgKHYgJiYgdi5wb3ApIHtcclxuICAgICAgICAgICAgICBpbnRDaGVjayh2WzBdLCAtTUFYLCAtMSwgcCk7XHJcbiAgICAgICAgICAgICAgaW50Q2hlY2sodlsxXSwgMSwgTUFYLCBwKTtcclxuICAgICAgICAgICAgICBNSU5fRVhQID0gdlswXTtcclxuICAgICAgICAgICAgICBNQVhfRVhQID0gdlsxXTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBpbnRDaGVjayh2LCAtTUFYLCBNQVgsIHApO1xyXG4gICAgICAgICAgICAgIGlmICh2KSB7XHJcbiAgICAgICAgICAgICAgICBNSU5fRVhQID0gLShNQVhfRVhQID0gdiA8IDAgPyAtdiA6IHYpO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBFcnJvclxyXG4gICAgICAgICAgICAgICAgIChiaWdudW1iZXJFcnJvciArIHAgKyAnIGNhbm5vdCBiZSB6ZXJvOiAnICsgdik7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgLy8gQ1JZUFRPIHtib29sZWFufSB0cnVlIG9yIGZhbHNlLlxyXG4gICAgICAgICAgLy8gJ1tCaWdOdW1iZXIgRXJyb3JdIENSWVBUTyBub3QgdHJ1ZSBvciBmYWxzZToge3Z9J1xyXG4gICAgICAgICAgLy8gJ1tCaWdOdW1iZXIgRXJyb3JdIGNyeXB0byB1bmF2YWlsYWJsZSdcclxuICAgICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkocCA9ICdDUllQVE8nKSkge1xyXG4gICAgICAgICAgICB2ID0gb2JqW3BdO1xyXG4gICAgICAgICAgICBpZiAodiA9PT0gISF2KSB7XHJcbiAgICAgICAgICAgICAgaWYgKHYpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgY3J5cHRvICE9ICd1bmRlZmluZWQnICYmIGNyeXB0byAmJlxyXG4gICAgICAgICAgICAgICAgIChjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzIHx8IGNyeXB0by5yYW5kb21CeXRlcykpIHtcclxuICAgICAgICAgICAgICAgICAgQ1JZUFRPID0gdjtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgIENSWVBUTyA9ICF2O1xyXG4gICAgICAgICAgICAgICAgICB0aHJvdyBFcnJvclxyXG4gICAgICAgICAgICAgICAgICAgKGJpZ251bWJlckVycm9yICsgJ2NyeXB0byB1bmF2YWlsYWJsZScpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBDUllQVE8gPSB2O1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICB0aHJvdyBFcnJvclxyXG4gICAgICAgICAgICAgICAoYmlnbnVtYmVyRXJyb3IgKyBwICsgJyBub3QgdHJ1ZSBvciBmYWxzZTogJyArIHYpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgLy8gTU9EVUxPX01PREUge251bWJlcn0gSW50ZWdlciwgMCB0byA5IGluY2x1c2l2ZS5cclxuICAgICAgICAgIC8vICdbQmlnTnVtYmVyIEVycm9yXSBNT0RVTE9fTU9ERSB7bm90IGEgcHJpbWl0aXZlIG51bWJlcnxub3QgYW4gaW50ZWdlcnxvdXQgb2YgcmFuZ2V9OiB7dn0nXHJcbiAgICAgICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KHAgPSAnTU9EVUxPX01PREUnKSkge1xyXG4gICAgICAgICAgICB2ID0gb2JqW3BdO1xyXG4gICAgICAgICAgICBpbnRDaGVjayh2LCAwLCA5LCBwKTtcclxuICAgICAgICAgICAgTU9EVUxPX01PREUgPSB2O1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC8vIFBPV19QUkVDSVNJT04ge251bWJlcn0gSW50ZWdlciwgMCB0byBNQVggaW5jbHVzaXZlLlxyXG4gICAgICAgICAgLy8gJ1tCaWdOdW1iZXIgRXJyb3JdIFBPV19QUkVDSVNJT04ge25vdCBhIHByaW1pdGl2ZSBudW1iZXJ8bm90IGFuIGludGVnZXJ8b3V0IG9mIHJhbmdlfToge3Z9J1xyXG4gICAgICAgICAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShwID0gJ1BPV19QUkVDSVNJT04nKSkge1xyXG4gICAgICAgICAgICB2ID0gb2JqW3BdO1xyXG4gICAgICAgICAgICBpbnRDaGVjayh2LCAwLCBNQVgsIHApO1xyXG4gICAgICAgICAgICBQT1dfUFJFQ0lTSU9OID0gdjtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAvLyBGT1JNQVQge29iamVjdH1cclxuICAgICAgICAgIC8vICdbQmlnTnVtYmVyIEVycm9yXSBGT1JNQVQgbm90IGFuIG9iamVjdDoge3Z9J1xyXG4gICAgICAgICAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShwID0gJ0ZPUk1BVCcpKSB7XHJcbiAgICAgICAgICAgIHYgPSBvYmpbcF07XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdiA9PSAnb2JqZWN0JykgRk9STUFUID0gdjtcclxuICAgICAgICAgICAgZWxzZSB0aHJvdyBFcnJvclxyXG4gICAgICAgICAgICAgKGJpZ251bWJlckVycm9yICsgcCArICcgbm90IGFuIG9iamVjdDogJyArIHYpO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC8vIEFMUEhBQkVUIHtzdHJpbmd9XHJcbiAgICAgICAgICAvLyAnW0JpZ051bWJlciBFcnJvcl0gQUxQSEFCRVQgaW52YWxpZDoge3Z9J1xyXG4gICAgICAgICAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShwID0gJ0FMUEhBQkVUJykpIHtcclxuICAgICAgICAgICAgdiA9IG9ialtwXTtcclxuXHJcbiAgICAgICAgICAgIC8vIERpc2FsbG93IGlmIGxlc3MgdGhhbiB0d28gY2hhcmFjdGVycyxcclxuICAgICAgICAgICAgLy8gb3IgaWYgaXQgY29udGFpbnMgJysnLCAnLScsICcuJywgd2hpdGVzcGFjZSwgb3IgYSByZXBlYXRlZCBjaGFyYWN0ZXIuXHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdiA9PSAnc3RyaW5nJyAmJiAhL14uPyR8WytcXC0uXFxzXXwoLikuKlxcMS8udGVzdCh2KSkge1xyXG4gICAgICAgICAgICAgIEFMUEhBQkVUID0gdjtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICB0aHJvdyBFcnJvclxyXG4gICAgICAgICAgICAgICAoYmlnbnVtYmVyRXJyb3IgKyBwICsgJyBpbnZhbGlkOiAnICsgdik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgICAvLyAnW0JpZ051bWJlciBFcnJvcl0gT2JqZWN0IGV4cGVjdGVkOiB7dn0nXHJcbiAgICAgICAgICB0aHJvdyBFcnJvclxyXG4gICAgICAgICAgIChiaWdudW1iZXJFcnJvciArICdPYmplY3QgZXhwZWN0ZWQ6ICcgKyBvYmopO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBERUNJTUFMX1BMQUNFUzogREVDSU1BTF9QTEFDRVMsXHJcbiAgICAgICAgUk9VTkRJTkdfTU9ERTogUk9VTkRJTkdfTU9ERSxcclxuICAgICAgICBFWFBPTkVOVElBTF9BVDogW1RPX0VYUF9ORUcsIFRPX0VYUF9QT1NdLFxyXG4gICAgICAgIFJBTkdFOiBbTUlOX0VYUCwgTUFYX0VYUF0sXHJcbiAgICAgICAgQ1JZUFRPOiBDUllQVE8sXHJcbiAgICAgICAgTU9EVUxPX01PREU6IE1PRFVMT19NT0RFLFxyXG4gICAgICAgIFBPV19QUkVDSVNJT046IFBPV19QUkVDSVNJT04sXHJcbiAgICAgICAgRk9STUFUOiBGT1JNQVQsXHJcbiAgICAgICAgQUxQSEFCRVQ6IEFMUEhBQkVUXHJcbiAgICAgIH07XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJuIHRydWUgaWYgdiBpcyBhIEJpZ051bWJlciBpbnN0YW5jZSwgb3RoZXJ3aXNlIHJldHVybiBmYWxzZS5cclxuICAgICAqXHJcbiAgICAgKiBJZiBCaWdOdW1iZXIuREVCVUcgaXMgdHJ1ZSwgdGhyb3cgaWYgYSBCaWdOdW1iZXIgaW5zdGFuY2UgaXMgbm90IHdlbGwtZm9ybWVkLlxyXG4gICAgICpcclxuICAgICAqIHYge2FueX1cclxuICAgICAqXHJcbiAgICAgKiAnW0JpZ051bWJlciBFcnJvcl0gSW52YWxpZCBCaWdOdW1iZXI6IHt2fSdcclxuICAgICAqL1xyXG4gICAgQmlnTnVtYmVyLmlzQmlnTnVtYmVyID0gZnVuY3Rpb24gKHYpIHtcclxuICAgICAgaWYgKCF2IHx8IHYuX2lzQmlnTnVtYmVyICE9PSB0cnVlKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgIGlmICghQmlnTnVtYmVyLkRFQlVHKSByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgICAgIHZhciBpLCBuLFxyXG4gICAgICAgIGMgPSB2LmMsXHJcbiAgICAgICAgZSA9IHYuZSxcclxuICAgICAgICBzID0gdi5zO1xyXG5cclxuICAgICAgb3V0OiBpZiAoe30udG9TdHJpbmcuY2FsbChjKSA9PSAnW29iamVjdCBBcnJheV0nKSB7XHJcblxyXG4gICAgICAgIGlmICgocyA9PT0gMSB8fCBzID09PSAtMSkgJiYgZSA+PSAtTUFYICYmIGUgPD0gTUFYICYmIGUgPT09IG1hdGhmbG9vcihlKSkge1xyXG5cclxuICAgICAgICAgIC8vIElmIHRoZSBmaXJzdCBlbGVtZW50IGlzIHplcm8sIHRoZSBCaWdOdW1iZXIgdmFsdWUgbXVzdCBiZSB6ZXJvLlxyXG4gICAgICAgICAgaWYgKGNbMF0gPT09IDApIHtcclxuICAgICAgICAgICAgaWYgKGUgPT09IDAgJiYgYy5sZW5ndGggPT09IDEpIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICBicmVhayBvdXQ7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgLy8gQ2FsY3VsYXRlIG51bWJlciBvZiBkaWdpdHMgdGhhdCBjWzBdIHNob3VsZCBoYXZlLCBiYXNlZCBvbiB0aGUgZXhwb25lbnQuXHJcbiAgICAgICAgICBpID0gKGUgKyAxKSAlIExPR19CQVNFO1xyXG4gICAgICAgICAgaWYgKGkgPCAxKSBpICs9IExPR19CQVNFO1xyXG5cclxuICAgICAgICAgIC8vIENhbGN1bGF0ZSBudW1iZXIgb2YgZGlnaXRzIG9mIGNbMF0uXHJcbiAgICAgICAgICAvL2lmIChNYXRoLmNlaWwoTWF0aC5sb2coY1swXSArIDEpIC8gTWF0aC5MTjEwKSA9PSBpKSB7XHJcbiAgICAgICAgICBpZiAoU3RyaW5nKGNbMF0pLmxlbmd0aCA9PSBpKSB7XHJcblxyXG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgYy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgIG4gPSBjW2ldO1xyXG4gICAgICAgICAgICAgIGlmIChuIDwgMCB8fCBuID49IEJBU0UgfHwgbiAhPT0gbWF0aGZsb29yKG4pKSBicmVhayBvdXQ7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIExhc3QgZWxlbWVudCBjYW5ub3QgYmUgemVybywgdW5sZXNzIGl0IGlzIHRoZSBvbmx5IGVsZW1lbnQuXHJcbiAgICAgICAgICAgIGlmIChuICE9PSAwKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAvLyBJbmZpbml0eS9OYU5cclxuICAgICAgfSBlbHNlIGlmIChjID09PSBudWxsICYmIGUgPT09IG51bGwgJiYgKHMgPT09IG51bGwgfHwgcyA9PT0gMSB8fCBzID09PSAtMSkpIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhyb3cgRXJyb3JcclxuICAgICAgICAoYmlnbnVtYmVyRXJyb3IgKyAnSW52YWxpZCBCaWdOdW1iZXI6ICcgKyB2KTtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBSZXR1cm4gYSBuZXcgQmlnTnVtYmVyIHdob3NlIHZhbHVlIGlzIHRoZSBtYXhpbXVtIG9mIHRoZSBhcmd1bWVudHMuXHJcbiAgICAgKlxyXG4gICAgICogYXJndW1lbnRzIHtudW1iZXJ8c3RyaW5nfEJpZ051bWJlcn1cclxuICAgICAqL1xyXG4gICAgQmlnTnVtYmVyLm1heGltdW0gPSBCaWdOdW1iZXIubWF4ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICByZXR1cm4gbWF4T3JNaW4oYXJndW1lbnRzLCBQLmx0KTtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBSZXR1cm4gYSBuZXcgQmlnTnVtYmVyIHdob3NlIHZhbHVlIGlzIHRoZSBtaW5pbXVtIG9mIHRoZSBhcmd1bWVudHMuXHJcbiAgICAgKlxyXG4gICAgICogYXJndW1lbnRzIHtudW1iZXJ8c3RyaW5nfEJpZ051bWJlcn1cclxuICAgICAqL1xyXG4gICAgQmlnTnVtYmVyLm1pbmltdW0gPSBCaWdOdW1iZXIubWluID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICByZXR1cm4gbWF4T3JNaW4oYXJndW1lbnRzLCBQLmd0KTtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBSZXR1cm4gYSBuZXcgQmlnTnVtYmVyIHdpdGggYSByYW5kb20gdmFsdWUgZXF1YWwgdG8gb3IgZ3JlYXRlciB0aGFuIDAgYW5kIGxlc3MgdGhhbiAxLFxyXG4gICAgICogYW5kIHdpdGggZHAsIG9yIERFQ0lNQUxfUExBQ0VTIGlmIGRwIGlzIG9taXR0ZWQsIGRlY2ltYWwgcGxhY2VzIChvciBsZXNzIGlmIHRyYWlsaW5nXHJcbiAgICAgKiB6ZXJvcyBhcmUgcHJvZHVjZWQpLlxyXG4gICAgICpcclxuICAgICAqIFtkcF0ge251bWJlcn0gRGVjaW1hbCBwbGFjZXMuIEludGVnZXIsIDAgdG8gTUFYIGluY2x1c2l2ZS5cclxuICAgICAqXHJcbiAgICAgKiAnW0JpZ051bWJlciBFcnJvcl0gQXJndW1lbnQge25vdCBhIHByaW1pdGl2ZSBudW1iZXJ8bm90IGFuIGludGVnZXJ8b3V0IG9mIHJhbmdlfToge2RwfSdcclxuICAgICAqICdbQmlnTnVtYmVyIEVycm9yXSBjcnlwdG8gdW5hdmFpbGFibGUnXHJcbiAgICAgKi9cclxuICAgIEJpZ051bWJlci5yYW5kb20gPSAoZnVuY3Rpb24gKCkge1xyXG4gICAgICB2YXIgcG93Ml81MyA9IDB4MjAwMDAwMDAwMDAwMDA7XHJcblxyXG4gICAgICAvLyBSZXR1cm4gYSA1MyBiaXQgaW50ZWdlciBuLCB3aGVyZSAwIDw9IG4gPCA5MDA3MTk5MjU0NzQwOTkyLlxyXG4gICAgICAvLyBDaGVjayBpZiBNYXRoLnJhbmRvbSgpIHByb2R1Y2VzIG1vcmUgdGhhbiAzMiBiaXRzIG9mIHJhbmRvbW5lc3MuXHJcbiAgICAgIC8vIElmIGl0IGRvZXMsIGFzc3VtZSBhdCBsZWFzdCA1MyBiaXRzIGFyZSBwcm9kdWNlZCwgb3RoZXJ3aXNlIGFzc3VtZSBhdCBsZWFzdCAzMCBiaXRzLlxyXG4gICAgICAvLyAweDQwMDAwMDAwIGlzIDJeMzAsIDB4ODAwMDAwIGlzIDJeMjMsIDB4MWZmZmZmIGlzIDJeMjEgLSAxLlxyXG4gICAgICB2YXIgcmFuZG9tNTNiaXRJbnQgPSAoTWF0aC5yYW5kb20oKSAqIHBvdzJfNTMpICYgMHgxZmZmZmZcclxuICAgICAgID8gZnVuY3Rpb24gKCkgeyByZXR1cm4gbWF0aGZsb29yKE1hdGgucmFuZG9tKCkgKiBwb3cyXzUzKTsgfVxyXG4gICAgICAgOiBmdW5jdGlvbiAoKSB7IHJldHVybiAoKE1hdGgucmFuZG9tKCkgKiAweDQwMDAwMDAwIHwgMCkgKiAweDgwMDAwMCkgK1xyXG4gICAgICAgICAoTWF0aC5yYW5kb20oKSAqIDB4ODAwMDAwIHwgMCk7IH07XHJcblxyXG4gICAgICByZXR1cm4gZnVuY3Rpb24gKGRwKSB7XHJcbiAgICAgICAgdmFyIGEsIGIsIGUsIGssIHYsXHJcbiAgICAgICAgICBpID0gMCxcclxuICAgICAgICAgIGMgPSBbXSxcclxuICAgICAgICAgIHJhbmQgPSBuZXcgQmlnTnVtYmVyKE9ORSk7XHJcblxyXG4gICAgICAgIGlmIChkcCA9PSBudWxsKSBkcCA9IERFQ0lNQUxfUExBQ0VTO1xyXG4gICAgICAgIGVsc2UgaW50Q2hlY2soZHAsIDAsIE1BWCk7XHJcblxyXG4gICAgICAgIGsgPSBtYXRoY2VpbChkcCAvIExPR19CQVNFKTtcclxuXHJcbiAgICAgICAgaWYgKENSWVBUTykge1xyXG5cclxuICAgICAgICAgIC8vIEJyb3dzZXJzIHN1cHBvcnRpbmcgY3J5cHRvLmdldFJhbmRvbVZhbHVlcy5cclxuICAgICAgICAgIGlmIChjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKSB7XHJcblxyXG4gICAgICAgICAgICBhID0gY3J5cHRvLmdldFJhbmRvbVZhbHVlcyhuZXcgVWludDMyQXJyYXkoayAqPSAyKSk7XHJcblxyXG4gICAgICAgICAgICBmb3IgKDsgaSA8IGs7KSB7XHJcblxyXG4gICAgICAgICAgICAgIC8vIDUzIGJpdHM6XHJcbiAgICAgICAgICAgICAgLy8gKChNYXRoLnBvdygyLCAzMikgLSAxKSAqIE1hdGgucG93KDIsIDIxKSkudG9TdHJpbmcoMilcclxuICAgICAgICAgICAgICAvLyAxMTExMSAxMTExMTExMSAxMTExMTExMSAxMTExMTExMSAxMTEwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMFxyXG4gICAgICAgICAgICAgIC8vICgoTWF0aC5wb3coMiwgMzIpIC0gMSkgPj4+IDExKS50b1N0cmluZygyKVxyXG4gICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExMTExIDExMTExMTExIDExMTExMTExXHJcbiAgICAgICAgICAgICAgLy8gMHgyMDAwMCBpcyAyXjIxLlxyXG4gICAgICAgICAgICAgIHYgPSBhW2ldICogMHgyMDAwMCArIChhW2kgKyAxXSA+Pj4gMTEpO1xyXG5cclxuICAgICAgICAgICAgICAvLyBSZWplY3Rpb24gc2FtcGxpbmc6XHJcbiAgICAgICAgICAgICAgLy8gMCA8PSB2IDwgOTAwNzE5OTI1NDc0MDk5MlxyXG4gICAgICAgICAgICAgIC8vIFByb2JhYmlsaXR5IHRoYXQgdiA+PSA5ZTE1LCBpc1xyXG4gICAgICAgICAgICAgIC8vIDcxOTkyNTQ3NDA5OTIgLyA5MDA3MTk5MjU0NzQwOTkyIH49IDAuMDAwOCwgaS5lLiAxIGluIDEyNTFcclxuICAgICAgICAgICAgICBpZiAodiA+PSA5ZTE1KSB7XHJcbiAgICAgICAgICAgICAgICBiID0gY3J5cHRvLmdldFJhbmRvbVZhbHVlcyhuZXcgVWludDMyQXJyYXkoMikpO1xyXG4gICAgICAgICAgICAgICAgYVtpXSA9IGJbMF07XHJcbiAgICAgICAgICAgICAgICBhW2kgKyAxXSA9IGJbMV07XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyAwIDw9IHYgPD0gODk5OTk5OTk5OTk5OTk5OVxyXG4gICAgICAgICAgICAgICAgLy8gMCA8PSAodiAlIDFlMTQpIDw9IDk5OTk5OTk5OTk5OTk5XHJcbiAgICAgICAgICAgICAgICBjLnB1c2godiAlIDFlMTQpO1xyXG4gICAgICAgICAgICAgICAgaSArPSAyO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpID0gayAvIDI7XHJcblxyXG4gICAgICAgICAgLy8gTm9kZS5qcyBzdXBwb3J0aW5nIGNyeXB0by5yYW5kb21CeXRlcy5cclxuICAgICAgICAgIH0gZWxzZSBpZiAoY3J5cHRvLnJhbmRvbUJ5dGVzKSB7XHJcblxyXG4gICAgICAgICAgICAvLyBidWZmZXJcclxuICAgICAgICAgICAgYSA9IGNyeXB0by5yYW5kb21CeXRlcyhrICo9IDcpO1xyXG5cclxuICAgICAgICAgICAgZm9yICg7IGkgPCBrOykge1xyXG5cclxuICAgICAgICAgICAgICAvLyAweDEwMDAwMDAwMDAwMDAgaXMgMl40OCwgMHgxMDAwMDAwMDAwMCBpcyAyXjQwXHJcbiAgICAgICAgICAgICAgLy8gMHgxMDAwMDAwMDAgaXMgMl4zMiwgMHgxMDAwMDAwIGlzIDJeMjRcclxuICAgICAgICAgICAgICAvLyAxMTExMSAxMTExMTExMSAxMTExMTExMSAxMTExMTExMSAxMTExMTExMSAxMTExMTExMSAxMTExMTExMVxyXG4gICAgICAgICAgICAgIC8vIDAgPD0gdiA8IDkwMDcxOTkyNTQ3NDA5OTJcclxuICAgICAgICAgICAgICB2ID0gKChhW2ldICYgMzEpICogMHgxMDAwMDAwMDAwMDAwKSArIChhW2kgKyAxXSAqIDB4MTAwMDAwMDAwMDApICtcclxuICAgICAgICAgICAgICAgICAoYVtpICsgMl0gKiAweDEwMDAwMDAwMCkgKyAoYVtpICsgM10gKiAweDEwMDAwMDApICtcclxuICAgICAgICAgICAgICAgICAoYVtpICsgNF0gPDwgMTYpICsgKGFbaSArIDVdIDw8IDgpICsgYVtpICsgNl07XHJcblxyXG4gICAgICAgICAgICAgIGlmICh2ID49IDllMTUpIHtcclxuICAgICAgICAgICAgICAgIGNyeXB0by5yYW5kb21CeXRlcyg3KS5jb3B5KGEsIGkpO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gMCA8PSAodiAlIDFlMTQpIDw9IDk5OTk5OTk5OTk5OTk5XHJcbiAgICAgICAgICAgICAgICBjLnB1c2godiAlIDFlMTQpO1xyXG4gICAgICAgICAgICAgICAgaSArPSA3O1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpID0gayAvIDc7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBDUllQVE8gPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhyb3cgRXJyb3JcclxuICAgICAgICAgICAgIChiaWdudW1iZXJFcnJvciArICdjcnlwdG8gdW5hdmFpbGFibGUnKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFVzZSBNYXRoLnJhbmRvbS5cclxuICAgICAgICBpZiAoIUNSWVBUTykge1xyXG5cclxuICAgICAgICAgIGZvciAoOyBpIDwgazspIHtcclxuICAgICAgICAgICAgdiA9IHJhbmRvbTUzYml0SW50KCk7XHJcbiAgICAgICAgICAgIGlmICh2IDwgOWUxNSkgY1tpKytdID0gdiAlIDFlMTQ7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBrID0gY1stLWldO1xyXG4gICAgICAgIGRwICU9IExPR19CQVNFO1xyXG5cclxuICAgICAgICAvLyBDb252ZXJ0IHRyYWlsaW5nIGRpZ2l0cyB0byB6ZXJvcyBhY2NvcmRpbmcgdG8gZHAuXHJcbiAgICAgICAgaWYgKGsgJiYgZHApIHtcclxuICAgICAgICAgIHYgPSBQT1dTX1RFTltMT0dfQkFTRSAtIGRwXTtcclxuICAgICAgICAgIGNbaV0gPSBtYXRoZmxvb3IoayAvIHYpICogdjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFJlbW92ZSB0cmFpbGluZyBlbGVtZW50cyB3aGljaCBhcmUgemVyby5cclxuICAgICAgICBmb3IgKDsgY1tpXSA9PT0gMDsgYy5wb3AoKSwgaS0tKTtcclxuXHJcbiAgICAgICAgLy8gWmVybz9cclxuICAgICAgICBpZiAoaSA8IDApIHtcclxuICAgICAgICAgIGMgPSBbZSA9IDBdO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgICAgLy8gUmVtb3ZlIGxlYWRpbmcgZWxlbWVudHMgd2hpY2ggYXJlIHplcm8gYW5kIGFkanVzdCBleHBvbmVudCBhY2NvcmRpbmdseS5cclxuICAgICAgICAgIGZvciAoZSA9IC0xIDsgY1swXSA9PT0gMDsgYy5zcGxpY2UoMCwgMSksIGUgLT0gTE9HX0JBU0UpO1xyXG5cclxuICAgICAgICAgIC8vIENvdW50IHRoZSBkaWdpdHMgb2YgdGhlIGZpcnN0IGVsZW1lbnQgb2YgYyB0byBkZXRlcm1pbmUgbGVhZGluZyB6ZXJvcywgYW5kLi4uXHJcbiAgICAgICAgICBmb3IgKGkgPSAxLCB2ID0gY1swXTsgdiA+PSAxMDsgdiAvPSAxMCwgaSsrKTtcclxuXHJcbiAgICAgICAgICAvLyBhZGp1c3QgdGhlIGV4cG9uZW50IGFjY29yZGluZ2x5LlxyXG4gICAgICAgICAgaWYgKGkgPCBMT0dfQkFTRSkgZSAtPSBMT0dfQkFTRSAtIGk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByYW5kLmUgPSBlO1xyXG4gICAgICAgIHJhbmQuYyA9IGM7XHJcbiAgICAgICAgcmV0dXJuIHJhbmQ7XHJcbiAgICAgIH07XHJcbiAgICB9KSgpO1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJuIGEgQmlnTnVtYmVyIHdob3NlIHZhbHVlIGlzIHRoZSBzdW0gb2YgdGhlIGFyZ3VtZW50cy5cclxuICAgICAqXHJcbiAgICAgKiBhcmd1bWVudHMge251bWJlcnxzdHJpbmd8QmlnTnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBCaWdOdW1iZXIuc3VtID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICB2YXIgaSA9IDEsXHJcbiAgICAgICAgYXJncyA9IGFyZ3VtZW50cyxcclxuICAgICAgICBzdW0gPSBuZXcgQmlnTnVtYmVyKGFyZ3NbMF0pO1xyXG4gICAgICBmb3IgKDsgaSA8IGFyZ3MubGVuZ3RoOykgc3VtID0gc3VtLnBsdXMoYXJnc1tpKytdKTtcclxuICAgICAgcmV0dXJuIHN1bTtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8vIFBSSVZBVEUgRlVOQ1RJT05TXHJcblxyXG5cclxuICAgIC8vIENhbGxlZCBieSBCaWdOdW1iZXIgYW5kIEJpZ051bWJlci5wcm90b3R5cGUudG9TdHJpbmcuXHJcbiAgICBjb252ZXJ0QmFzZSA9IChmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHZhciBkZWNpbWFsID0gJzAxMjM0NTY3ODknO1xyXG5cclxuICAgICAgLypcclxuICAgICAgICogQ29udmVydCBzdHJpbmcgb2YgYmFzZUluIHRvIGFuIGFycmF5IG9mIG51bWJlcnMgb2YgYmFzZU91dC5cclxuICAgICAgICogRWcuIHRvQmFzZU91dCgnMjU1JywgMTAsIDE2KSByZXR1cm5zIFsxNSwgMTVdLlxyXG4gICAgICAgKiBFZy4gdG9CYXNlT3V0KCdmZicsIDE2LCAxMCkgcmV0dXJucyBbMiwgNSwgNV0uXHJcbiAgICAgICAqL1xyXG4gICAgICBmdW5jdGlvbiB0b0Jhc2VPdXQoc3RyLCBiYXNlSW4sIGJhc2VPdXQsIGFscGhhYmV0KSB7XHJcbiAgICAgICAgdmFyIGosXHJcbiAgICAgICAgICBhcnIgPSBbMF0sXHJcbiAgICAgICAgICBhcnJMLFxyXG4gICAgICAgICAgaSA9IDAsXHJcbiAgICAgICAgICBsZW4gPSBzdHIubGVuZ3RoO1xyXG5cclxuICAgICAgICBmb3IgKDsgaSA8IGxlbjspIHtcclxuICAgICAgICAgIGZvciAoYXJyTCA9IGFyci5sZW5ndGg7IGFyckwtLTsgYXJyW2FyckxdICo9IGJhc2VJbik7XHJcblxyXG4gICAgICAgICAgYXJyWzBdICs9IGFscGhhYmV0LmluZGV4T2Yoc3RyLmNoYXJBdChpKyspKTtcclxuXHJcbiAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgYXJyLmxlbmd0aDsgaisrKSB7XHJcblxyXG4gICAgICAgICAgICBpZiAoYXJyW2pdID4gYmFzZU91dCAtIDEpIHtcclxuICAgICAgICAgICAgICBpZiAoYXJyW2ogKyAxXSA9PSBudWxsKSBhcnJbaiArIDFdID0gMDtcclxuICAgICAgICAgICAgICBhcnJbaiArIDFdICs9IGFycltqXSAvIGJhc2VPdXQgfCAwO1xyXG4gICAgICAgICAgICAgIGFycltqXSAlPSBiYXNlT3V0O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gYXJyLnJldmVyc2UoKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gQ29udmVydCBhIG51bWVyaWMgc3RyaW5nIG9mIGJhc2VJbiB0byBhIG51bWVyaWMgc3RyaW5nIG9mIGJhc2VPdXQuXHJcbiAgICAgIC8vIElmIHRoZSBjYWxsZXIgaXMgdG9TdHJpbmcsIHdlIGFyZSBjb252ZXJ0aW5nIGZyb20gYmFzZSAxMCB0byBiYXNlT3V0LlxyXG4gICAgICAvLyBJZiB0aGUgY2FsbGVyIGlzIEJpZ051bWJlciwgd2UgYXJlIGNvbnZlcnRpbmcgZnJvbSBiYXNlSW4gdG8gYmFzZSAxMC5cclxuICAgICAgcmV0dXJuIGZ1bmN0aW9uIChzdHIsIGJhc2VJbiwgYmFzZU91dCwgc2lnbiwgY2FsbGVySXNUb1N0cmluZykge1xyXG4gICAgICAgIHZhciBhbHBoYWJldCwgZCwgZSwgaywgciwgeCwgeGMsIHksXHJcbiAgICAgICAgICBpID0gc3RyLmluZGV4T2YoJy4nKSxcclxuICAgICAgICAgIGRwID0gREVDSU1BTF9QTEFDRVMsXHJcbiAgICAgICAgICBybSA9IFJPVU5ESU5HX01PREU7XHJcblxyXG4gICAgICAgIC8vIE5vbi1pbnRlZ2VyLlxyXG4gICAgICAgIGlmIChpID49IDApIHtcclxuICAgICAgICAgIGsgPSBQT1dfUFJFQ0lTSU9OO1xyXG5cclxuICAgICAgICAgIC8vIFVubGltaXRlZCBwcmVjaXNpb24uXHJcbiAgICAgICAgICBQT1dfUFJFQ0lTSU9OID0gMDtcclxuICAgICAgICAgIHN0ciA9IHN0ci5yZXBsYWNlKCcuJywgJycpO1xyXG4gICAgICAgICAgeSA9IG5ldyBCaWdOdW1iZXIoYmFzZUluKTtcclxuICAgICAgICAgIHggPSB5LnBvdyhzdHIubGVuZ3RoIC0gaSk7XHJcbiAgICAgICAgICBQT1dfUFJFQ0lTSU9OID0gaztcclxuXHJcbiAgICAgICAgICAvLyBDb252ZXJ0IHN0ciBhcyBpZiBhbiBpbnRlZ2VyLCB0aGVuIHJlc3RvcmUgdGhlIGZyYWN0aW9uIHBhcnQgYnkgZGl2aWRpbmcgdGhlXHJcbiAgICAgICAgICAvLyByZXN1bHQgYnkgaXRzIGJhc2UgcmFpc2VkIHRvIGEgcG93ZXIuXHJcblxyXG4gICAgICAgICAgeS5jID0gdG9CYXNlT3V0KHRvRml4ZWRQb2ludChjb2VmZlRvU3RyaW5nKHguYyksIHguZSwgJzAnKSxcclxuICAgICAgICAgICAxMCwgYmFzZU91dCwgZGVjaW1hbCk7XHJcbiAgICAgICAgICB5LmUgPSB5LmMubGVuZ3RoO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gQ29udmVydCB0aGUgbnVtYmVyIGFzIGludGVnZXIuXHJcblxyXG4gICAgICAgIHhjID0gdG9CYXNlT3V0KHN0ciwgYmFzZUluLCBiYXNlT3V0LCBjYWxsZXJJc1RvU3RyaW5nXHJcbiAgICAgICAgID8gKGFscGhhYmV0ID0gQUxQSEFCRVQsIGRlY2ltYWwpXHJcbiAgICAgICAgIDogKGFscGhhYmV0ID0gZGVjaW1hbCwgQUxQSEFCRVQpKTtcclxuXHJcbiAgICAgICAgLy8geGMgbm93IHJlcHJlc2VudHMgc3RyIGFzIGFuIGludGVnZXIgYW5kIGNvbnZlcnRlZCB0byBiYXNlT3V0LiBlIGlzIHRoZSBleHBvbmVudC5cclxuICAgICAgICBlID0gayA9IHhjLmxlbmd0aDtcclxuXHJcbiAgICAgICAgLy8gUmVtb3ZlIHRyYWlsaW5nIHplcm9zLlxyXG4gICAgICAgIGZvciAoOyB4Y1stLWtdID09IDA7IHhjLnBvcCgpKTtcclxuXHJcbiAgICAgICAgLy8gWmVybz9cclxuICAgICAgICBpZiAoIXhjWzBdKSByZXR1cm4gYWxwaGFiZXQuY2hhckF0KDApO1xyXG5cclxuICAgICAgICAvLyBEb2VzIHN0ciByZXByZXNlbnQgYW4gaW50ZWdlcj8gSWYgc28sIG5vIG5lZWQgZm9yIHRoZSBkaXZpc2lvbi5cclxuICAgICAgICBpZiAoaSA8IDApIHtcclxuICAgICAgICAgIC0tZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgeC5jID0geGM7XHJcbiAgICAgICAgICB4LmUgPSBlO1xyXG5cclxuICAgICAgICAgIC8vIFRoZSBzaWduIGlzIG5lZWRlZCBmb3IgY29ycmVjdCByb3VuZGluZy5cclxuICAgICAgICAgIHgucyA9IHNpZ247XHJcbiAgICAgICAgICB4ID0gZGl2KHgsIHksIGRwLCBybSwgYmFzZU91dCk7XHJcbiAgICAgICAgICB4YyA9IHguYztcclxuICAgICAgICAgIHIgPSB4LnI7XHJcbiAgICAgICAgICBlID0geC5lO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8geGMgbm93IHJlcHJlc2VudHMgc3RyIGNvbnZlcnRlZCB0byBiYXNlT3V0LlxyXG5cclxuICAgICAgICAvLyBUSGUgaW5kZXggb2YgdGhlIHJvdW5kaW5nIGRpZ2l0LlxyXG4gICAgICAgIGQgPSBlICsgZHAgKyAxO1xyXG5cclxuICAgICAgICAvLyBUaGUgcm91bmRpbmcgZGlnaXQ6IHRoZSBkaWdpdCB0byB0aGUgcmlnaHQgb2YgdGhlIGRpZ2l0IHRoYXQgbWF5IGJlIHJvdW5kZWQgdXAuXHJcbiAgICAgICAgaSA9IHhjW2RdO1xyXG5cclxuICAgICAgICAvLyBMb29rIGF0IHRoZSByb3VuZGluZyBkaWdpdHMgYW5kIG1vZGUgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdG8gcm91bmQgdXAuXHJcblxyXG4gICAgICAgIGsgPSBiYXNlT3V0IC8gMjtcclxuICAgICAgICByID0gciB8fCBkIDwgMCB8fCB4Y1tkICsgMV0gIT0gbnVsbDtcclxuXHJcbiAgICAgICAgciA9IHJtIDwgNCA/IChpICE9IG51bGwgfHwgcikgJiYgKHJtID09IDAgfHwgcm0gPT0gKHgucyA8IDAgPyAzIDogMikpXHJcbiAgICAgICAgICAgICAgOiBpID4gayB8fCBpID09IGsgJiYocm0gPT0gNCB8fCByIHx8IHJtID09IDYgJiYgeGNbZCAtIDFdICYgMSB8fFxyXG4gICAgICAgICAgICAgICBybSA9PSAoeC5zIDwgMCA/IDggOiA3KSk7XHJcblxyXG4gICAgICAgIC8vIElmIHRoZSBpbmRleCBvZiB0aGUgcm91bmRpbmcgZGlnaXQgaXMgbm90IGdyZWF0ZXIgdGhhbiB6ZXJvLCBvciB4YyByZXByZXNlbnRzXHJcbiAgICAgICAgLy8gemVybywgdGhlbiB0aGUgcmVzdWx0IG9mIHRoZSBiYXNlIGNvbnZlcnNpb24gaXMgemVybyBvciwgaWYgcm91bmRpbmcgdXAsIGEgdmFsdWVcclxuICAgICAgICAvLyBzdWNoIGFzIDAuMDAwMDEuXHJcbiAgICAgICAgaWYgKGQgPCAxIHx8ICF4Y1swXSkge1xyXG5cclxuICAgICAgICAgIC8vIDFeLWRwIG9yIDBcclxuICAgICAgICAgIHN0ciA9IHIgPyB0b0ZpeGVkUG9pbnQoYWxwaGFiZXQuY2hhckF0KDEpLCAtZHAsIGFscGhhYmV0LmNoYXJBdCgwKSkgOiBhbHBoYWJldC5jaGFyQXQoMCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgICAvLyBUcnVuY2F0ZSB4YyB0byB0aGUgcmVxdWlyZWQgbnVtYmVyIG9mIGRlY2ltYWwgcGxhY2VzLlxyXG4gICAgICAgICAgeGMubGVuZ3RoID0gZDtcclxuXHJcbiAgICAgICAgICAvLyBSb3VuZCB1cD9cclxuICAgICAgICAgIGlmIChyKSB7XHJcblxyXG4gICAgICAgICAgICAvLyBSb3VuZGluZyB1cCBtYXkgbWVhbiB0aGUgcHJldmlvdXMgZGlnaXQgaGFzIHRvIGJlIHJvdW5kZWQgdXAgYW5kIHNvIG9uLlxyXG4gICAgICAgICAgICBmb3IgKC0tYmFzZU91dDsgKyt4Y1stLWRdID4gYmFzZU91dDspIHtcclxuICAgICAgICAgICAgICB4Y1tkXSA9IDA7XHJcblxyXG4gICAgICAgICAgICAgIGlmICghZCkge1xyXG4gICAgICAgICAgICAgICAgKytlO1xyXG4gICAgICAgICAgICAgICAgeGMgPSBbMV0uY29uY2F0KHhjKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAvLyBEZXRlcm1pbmUgdHJhaWxpbmcgemVyb3MuXHJcbiAgICAgICAgICBmb3IgKGsgPSB4Yy5sZW5ndGg7ICF4Y1stLWtdOyk7XHJcblxyXG4gICAgICAgICAgLy8gRS5nLiBbNCwgMTEsIDE1XSBiZWNvbWVzIDRiZi5cclxuICAgICAgICAgIGZvciAoaSA9IDAsIHN0ciA9ICcnOyBpIDw9IGs7IHN0ciArPSBhbHBoYWJldC5jaGFyQXQoeGNbaSsrXSkpO1xyXG5cclxuICAgICAgICAgIC8vIEFkZCBsZWFkaW5nIHplcm9zLCBkZWNpbWFsIHBvaW50IGFuZCB0cmFpbGluZyB6ZXJvcyBhcyByZXF1aXJlZC5cclxuICAgICAgICAgIHN0ciA9IHRvRml4ZWRQb2ludChzdHIsIGUsIGFscGhhYmV0LmNoYXJBdCgwKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBUaGUgY2FsbGVyIHdpbGwgYWRkIHRoZSBzaWduLlxyXG4gICAgICAgIHJldHVybiBzdHI7XHJcbiAgICAgIH07XHJcbiAgICB9KSgpO1xyXG5cclxuXHJcbiAgICAvLyBQZXJmb3JtIGRpdmlzaW9uIGluIHRoZSBzcGVjaWZpZWQgYmFzZS4gQ2FsbGVkIGJ5IGRpdiBhbmQgY29udmVydEJhc2UuXHJcbiAgICBkaXYgPSAoZnVuY3Rpb24gKCkge1xyXG5cclxuICAgICAgLy8gQXNzdW1lIG5vbi16ZXJvIHggYW5kIGsuXHJcbiAgICAgIGZ1bmN0aW9uIG11bHRpcGx5KHgsIGssIGJhc2UpIHtcclxuICAgICAgICB2YXIgbSwgdGVtcCwgeGxvLCB4aGksXHJcbiAgICAgICAgICBjYXJyeSA9IDAsXHJcbiAgICAgICAgICBpID0geC5sZW5ndGgsXHJcbiAgICAgICAgICBrbG8gPSBrICUgU1FSVF9CQVNFLFxyXG4gICAgICAgICAga2hpID0gayAvIFNRUlRfQkFTRSB8IDA7XHJcblxyXG4gICAgICAgIGZvciAoeCA9IHguc2xpY2UoKTsgaS0tOykge1xyXG4gICAgICAgICAgeGxvID0geFtpXSAlIFNRUlRfQkFTRTtcclxuICAgICAgICAgIHhoaSA9IHhbaV0gLyBTUVJUX0JBU0UgfCAwO1xyXG4gICAgICAgICAgbSA9IGtoaSAqIHhsbyArIHhoaSAqIGtsbztcclxuICAgICAgICAgIHRlbXAgPSBrbG8gKiB4bG8gKyAoKG0gJSBTUVJUX0JBU0UpICogU1FSVF9CQVNFKSArIGNhcnJ5O1xyXG4gICAgICAgICAgY2FycnkgPSAodGVtcCAvIGJhc2UgfCAwKSArIChtIC8gU1FSVF9CQVNFIHwgMCkgKyBraGkgKiB4aGk7XHJcbiAgICAgICAgICB4W2ldID0gdGVtcCAlIGJhc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoY2FycnkpIHggPSBbY2FycnldLmNvbmNhdCh4KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHg7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGZ1bmN0aW9uIGNvbXBhcmUoYSwgYiwgYUwsIGJMKSB7XHJcbiAgICAgICAgdmFyIGksIGNtcDtcclxuXHJcbiAgICAgICAgaWYgKGFMICE9IGJMKSB7XHJcbiAgICAgICAgICBjbXAgPSBhTCA+IGJMID8gMSA6IC0xO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgICAgZm9yIChpID0gY21wID0gMDsgaSA8IGFMOyBpKyspIHtcclxuXHJcbiAgICAgICAgICAgIGlmIChhW2ldICE9IGJbaV0pIHtcclxuICAgICAgICAgICAgICBjbXAgPSBhW2ldID4gYltpXSA/IDEgOiAtMTtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNtcDtcclxuICAgICAgfVxyXG5cclxuICAgICAgZnVuY3Rpb24gc3VidHJhY3QoYSwgYiwgYUwsIGJhc2UpIHtcclxuICAgICAgICB2YXIgaSA9IDA7XHJcblxyXG4gICAgICAgIC8vIFN1YnRyYWN0IGIgZnJvbSBhLlxyXG4gICAgICAgIGZvciAoOyBhTC0tOykge1xyXG4gICAgICAgICAgYVthTF0gLT0gaTtcclxuICAgICAgICAgIGkgPSBhW2FMXSA8IGJbYUxdID8gMSA6IDA7XHJcbiAgICAgICAgICBhW2FMXSA9IGkgKiBiYXNlICsgYVthTF0gLSBiW2FMXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFJlbW92ZSBsZWFkaW5nIHplcm9zLlxyXG4gICAgICAgIGZvciAoOyAhYVswXSAmJiBhLmxlbmd0aCA+IDE7IGEuc3BsaWNlKDAsIDEpKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8geDogZGl2aWRlbmQsIHk6IGRpdmlzb3IuXHJcbiAgICAgIHJldHVybiBmdW5jdGlvbiAoeCwgeSwgZHAsIHJtLCBiYXNlKSB7XHJcbiAgICAgICAgdmFyIGNtcCwgZSwgaSwgbW9yZSwgbiwgcHJvZCwgcHJvZEwsIHEsIHFjLCByZW0sIHJlbUwsIHJlbTAsIHhpLCB4TCwgeWMwLFxyXG4gICAgICAgICAgeUwsIHl6LFxyXG4gICAgICAgICAgcyA9IHgucyA9PSB5LnMgPyAxIDogLTEsXHJcbiAgICAgICAgICB4YyA9IHguYyxcclxuICAgICAgICAgIHljID0geS5jO1xyXG5cclxuICAgICAgICAvLyBFaXRoZXIgTmFOLCBJbmZpbml0eSBvciAwP1xyXG4gICAgICAgIGlmICgheGMgfHwgIXhjWzBdIHx8ICF5YyB8fCAheWNbMF0pIHtcclxuXHJcbiAgICAgICAgICByZXR1cm4gbmV3IEJpZ051bWJlcihcclxuXHJcbiAgICAgICAgICAgLy8gUmV0dXJuIE5hTiBpZiBlaXRoZXIgTmFOLCBvciBib3RoIEluZmluaXR5IG9yIDAuXHJcbiAgICAgICAgICAgIXgucyB8fCAheS5zIHx8ICh4YyA/IHljICYmIHhjWzBdID09IHljWzBdIDogIXljKSA/IE5hTiA6XHJcblxyXG4gICAgICAgICAgICAvLyBSZXR1cm4gwrEwIGlmIHggaXMgwrEwIG9yIHkgaXMgwrFJbmZpbml0eSwgb3IgcmV0dXJuIMKxSW5maW5pdHkgYXMgeSBpcyDCsTAuXHJcbiAgICAgICAgICAgIHhjICYmIHhjWzBdID09IDAgfHwgIXljID8gcyAqIDAgOiBzIC8gMFxyXG4gICAgICAgICApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcSA9IG5ldyBCaWdOdW1iZXIocyk7XHJcbiAgICAgICAgcWMgPSBxLmMgPSBbXTtcclxuICAgICAgICBlID0geC5lIC0geS5lO1xyXG4gICAgICAgIHMgPSBkcCArIGUgKyAxO1xyXG5cclxuICAgICAgICBpZiAoIWJhc2UpIHtcclxuICAgICAgICAgIGJhc2UgPSBCQVNFO1xyXG4gICAgICAgICAgZSA9IGJpdEZsb29yKHguZSAvIExPR19CQVNFKSAtIGJpdEZsb29yKHkuZSAvIExPR19CQVNFKTtcclxuICAgICAgICAgIHMgPSBzIC8gTE9HX0JBU0UgfCAwO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gUmVzdWx0IGV4cG9uZW50IG1heSBiZSBvbmUgbGVzcyB0aGVuIHRoZSBjdXJyZW50IHZhbHVlIG9mIGUuXHJcbiAgICAgICAgLy8gVGhlIGNvZWZmaWNpZW50cyBvZiB0aGUgQmlnTnVtYmVycyBmcm9tIGNvbnZlcnRCYXNlIG1heSBoYXZlIHRyYWlsaW5nIHplcm9zLlxyXG4gICAgICAgIGZvciAoaSA9IDA7IHljW2ldID09ICh4Y1tpXSB8fCAwKTsgaSsrKTtcclxuXHJcbiAgICAgICAgaWYgKHljW2ldID4gKHhjW2ldIHx8IDApKSBlLS07XHJcblxyXG4gICAgICAgIGlmIChzIDwgMCkge1xyXG4gICAgICAgICAgcWMucHVzaCgxKTtcclxuICAgICAgICAgIG1vcmUgPSB0cnVlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB4TCA9IHhjLmxlbmd0aDtcclxuICAgICAgICAgIHlMID0geWMubGVuZ3RoO1xyXG4gICAgICAgICAgaSA9IDA7XHJcbiAgICAgICAgICBzICs9IDI7XHJcblxyXG4gICAgICAgICAgLy8gTm9ybWFsaXNlIHhjIGFuZCB5YyBzbyBoaWdoZXN0IG9yZGVyIGRpZ2l0IG9mIHljIGlzID49IGJhc2UgLyAyLlxyXG5cclxuICAgICAgICAgIG4gPSBtYXRoZmxvb3IoYmFzZSAvICh5Y1swXSArIDEpKTtcclxuXHJcbiAgICAgICAgICAvLyBOb3QgbmVjZXNzYXJ5LCBidXQgdG8gaGFuZGxlIG9kZCBiYXNlcyB3aGVyZSB5Y1swXSA9PSAoYmFzZSAvIDIpIC0gMS5cclxuICAgICAgICAgIC8vIGlmIChuID4gMSB8fCBuKysgPT0gMSAmJiB5Y1swXSA8IGJhc2UgLyAyKSB7XHJcbiAgICAgICAgICBpZiAobiA+IDEpIHtcclxuICAgICAgICAgICAgeWMgPSBtdWx0aXBseSh5YywgbiwgYmFzZSk7XHJcbiAgICAgICAgICAgIHhjID0gbXVsdGlwbHkoeGMsIG4sIGJhc2UpO1xyXG4gICAgICAgICAgICB5TCA9IHljLmxlbmd0aDtcclxuICAgICAgICAgICAgeEwgPSB4Yy5sZW5ndGg7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgeGkgPSB5TDtcclxuICAgICAgICAgIHJlbSA9IHhjLnNsaWNlKDAsIHlMKTtcclxuICAgICAgICAgIHJlbUwgPSByZW0ubGVuZ3RoO1xyXG5cclxuICAgICAgICAgIC8vIEFkZCB6ZXJvcyB0byBtYWtlIHJlbWFpbmRlciBhcyBsb25nIGFzIGRpdmlzb3IuXHJcbiAgICAgICAgICBmb3IgKDsgcmVtTCA8IHlMOyByZW1bcmVtTCsrXSA9IDApO1xyXG4gICAgICAgICAgeXogPSB5Yy5zbGljZSgpO1xyXG4gICAgICAgICAgeXogPSBbMF0uY29uY2F0KHl6KTtcclxuICAgICAgICAgIHljMCA9IHljWzBdO1xyXG4gICAgICAgICAgaWYgKHljWzFdID49IGJhc2UgLyAyKSB5YzArKztcclxuICAgICAgICAgIC8vIE5vdCBuZWNlc3NhcnksIGJ1dCB0byBwcmV2ZW50IHRyaWFsIGRpZ2l0IG4gPiBiYXNlLCB3aGVuIHVzaW5nIGJhc2UgMy5cclxuICAgICAgICAgIC8vIGVsc2UgaWYgKGJhc2UgPT0gMyAmJiB5YzAgPT0gMSkgeWMwID0gMSArIDFlLTE1O1xyXG5cclxuICAgICAgICAgIGRvIHtcclxuICAgICAgICAgICAgbiA9IDA7XHJcblxyXG4gICAgICAgICAgICAvLyBDb21wYXJlIGRpdmlzb3IgYW5kIHJlbWFpbmRlci5cclxuICAgICAgICAgICAgY21wID0gY29tcGFyZSh5YywgcmVtLCB5TCwgcmVtTCk7XHJcblxyXG4gICAgICAgICAgICAvLyBJZiBkaXZpc29yIDwgcmVtYWluZGVyLlxyXG4gICAgICAgICAgICBpZiAoY21wIDwgMCkge1xyXG5cclxuICAgICAgICAgICAgICAvLyBDYWxjdWxhdGUgdHJpYWwgZGlnaXQsIG4uXHJcblxyXG4gICAgICAgICAgICAgIHJlbTAgPSByZW1bMF07XHJcbiAgICAgICAgICAgICAgaWYgKHlMICE9IHJlbUwpIHJlbTAgPSByZW0wICogYmFzZSArIChyZW1bMV0gfHwgMCk7XHJcblxyXG4gICAgICAgICAgICAgIC8vIG4gaXMgaG93IG1hbnkgdGltZXMgdGhlIGRpdmlzb3IgZ29lcyBpbnRvIHRoZSBjdXJyZW50IHJlbWFpbmRlci5cclxuICAgICAgICAgICAgICBuID0gbWF0aGZsb29yKHJlbTAgLyB5YzApO1xyXG5cclxuICAgICAgICAgICAgICAvLyAgQWxnb3JpdGhtOlxyXG4gICAgICAgICAgICAgIC8vICBwcm9kdWN0ID0gZGl2aXNvciBtdWx0aXBsaWVkIGJ5IHRyaWFsIGRpZ2l0IChuKS5cclxuICAgICAgICAgICAgICAvLyAgQ29tcGFyZSBwcm9kdWN0IGFuZCByZW1haW5kZXIuXHJcbiAgICAgICAgICAgICAgLy8gIElmIHByb2R1Y3QgaXMgZ3JlYXRlciB0aGFuIHJlbWFpbmRlcjpcclxuICAgICAgICAgICAgICAvLyAgICBTdWJ0cmFjdCBkaXZpc29yIGZyb20gcHJvZHVjdCwgZGVjcmVtZW50IHRyaWFsIGRpZ2l0LlxyXG4gICAgICAgICAgICAgIC8vICBTdWJ0cmFjdCBwcm9kdWN0IGZyb20gcmVtYWluZGVyLlxyXG4gICAgICAgICAgICAgIC8vICBJZiBwcm9kdWN0IHdhcyBsZXNzIHRoYW4gcmVtYWluZGVyIGF0IHRoZSBsYXN0IGNvbXBhcmU6XHJcbiAgICAgICAgICAgICAgLy8gICAgQ29tcGFyZSBuZXcgcmVtYWluZGVyIGFuZCBkaXZpc29yLlxyXG4gICAgICAgICAgICAgIC8vICAgIElmIHJlbWFpbmRlciBpcyBncmVhdGVyIHRoYW4gZGl2aXNvcjpcclxuICAgICAgICAgICAgICAvLyAgICAgIFN1YnRyYWN0IGRpdmlzb3IgZnJvbSByZW1haW5kZXIsIGluY3JlbWVudCB0cmlhbCBkaWdpdC5cclxuXHJcbiAgICAgICAgICAgICAgaWYgKG4gPiAxKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gbiBtYXkgYmUgPiBiYXNlIG9ubHkgd2hlbiBiYXNlIGlzIDMuXHJcbiAgICAgICAgICAgICAgICBpZiAobiA+PSBiYXNlKSBuID0gYmFzZSAtIDE7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gcHJvZHVjdCA9IGRpdmlzb3IgKiB0cmlhbCBkaWdpdC5cclxuICAgICAgICAgICAgICAgIHByb2QgPSBtdWx0aXBseSh5YywgbiwgYmFzZSk7XHJcbiAgICAgICAgICAgICAgICBwcm9kTCA9IHByb2QubGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgcmVtTCA9IHJlbS5sZW5ndGg7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gQ29tcGFyZSBwcm9kdWN0IGFuZCByZW1haW5kZXIuXHJcbiAgICAgICAgICAgICAgICAvLyBJZiBwcm9kdWN0ID4gcmVtYWluZGVyIHRoZW4gdHJpYWwgZGlnaXQgbiB0b28gaGlnaC5cclxuICAgICAgICAgICAgICAgIC8vIG4gaXMgMSB0b28gaGlnaCBhYm91dCA1JSBvZiB0aGUgdGltZSwgYW5kIGlzIG5vdCBrbm93biB0byBoYXZlXHJcbiAgICAgICAgICAgICAgICAvLyBldmVyIGJlZW4gbW9yZSB0aGFuIDEgdG9vIGhpZ2guXHJcbiAgICAgICAgICAgICAgICB3aGlsZSAoY29tcGFyZShwcm9kLCByZW0sIHByb2RMLCByZW1MKSA9PSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgIG4tLTtcclxuXHJcbiAgICAgICAgICAgICAgICAgIC8vIFN1YnRyYWN0IGRpdmlzb3IgZnJvbSBwcm9kdWN0LlxyXG4gICAgICAgICAgICAgICAgICBzdWJ0cmFjdChwcm9kLCB5TCA8IHByb2RMID8geXogOiB5YywgcHJvZEwsIGJhc2UpO1xyXG4gICAgICAgICAgICAgICAgICBwcm9kTCA9IHByb2QubGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgICBjbXAgPSAxO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gbiBpcyAwIG9yIDEsIGNtcCBpcyAtMS5cclxuICAgICAgICAgICAgICAgIC8vIElmIG4gaXMgMCwgdGhlcmUgaXMgbm8gbmVlZCB0byBjb21wYXJlIHljIGFuZCByZW0gYWdhaW4gYmVsb3csXHJcbiAgICAgICAgICAgICAgICAvLyBzbyBjaGFuZ2UgY21wIHRvIDEgdG8gYXZvaWQgaXQuXHJcbiAgICAgICAgICAgICAgICAvLyBJZiBuIGlzIDEsIGxlYXZlIGNtcCBhcyAtMSwgc28geWMgYW5kIHJlbSBhcmUgY29tcGFyZWQgYWdhaW4uXHJcbiAgICAgICAgICAgICAgICBpZiAobiA9PSAwKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAvLyBkaXZpc29yIDwgcmVtYWluZGVyLCBzbyBuIG11c3QgYmUgYXQgbGVhc3QgMS5cclxuICAgICAgICAgICAgICAgICAgY21wID0gbiA9IDE7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gcHJvZHVjdCA9IGRpdmlzb3JcclxuICAgICAgICAgICAgICAgIHByb2QgPSB5Yy5zbGljZSgpO1xyXG4gICAgICAgICAgICAgICAgcHJvZEwgPSBwcm9kLmxlbmd0aDtcclxuICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgIGlmIChwcm9kTCA8IHJlbUwpIHByb2QgPSBbMF0uY29uY2F0KHByb2QpO1xyXG5cclxuICAgICAgICAgICAgICAvLyBTdWJ0cmFjdCBwcm9kdWN0IGZyb20gcmVtYWluZGVyLlxyXG4gICAgICAgICAgICAgIHN1YnRyYWN0KHJlbSwgcHJvZCwgcmVtTCwgYmFzZSk7XHJcbiAgICAgICAgICAgICAgcmVtTCA9IHJlbS5sZW5ndGg7XHJcblxyXG4gICAgICAgICAgICAgICAvLyBJZiBwcm9kdWN0IHdhcyA8IHJlbWFpbmRlci5cclxuICAgICAgICAgICAgICBpZiAoY21wID09IC0xKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gQ29tcGFyZSBkaXZpc29yIGFuZCBuZXcgcmVtYWluZGVyLlxyXG4gICAgICAgICAgICAgICAgLy8gSWYgZGl2aXNvciA8IG5ldyByZW1haW5kZXIsIHN1YnRyYWN0IGRpdmlzb3IgZnJvbSByZW1haW5kZXIuXHJcbiAgICAgICAgICAgICAgICAvLyBUcmlhbCBkaWdpdCBuIHRvbyBsb3cuXHJcbiAgICAgICAgICAgICAgICAvLyBuIGlzIDEgdG9vIGxvdyBhYm91dCA1JSBvZiB0aGUgdGltZSwgYW5kIHZlcnkgcmFyZWx5IDIgdG9vIGxvdy5cclxuICAgICAgICAgICAgICAgIHdoaWxlIChjb21wYXJlKHljLCByZW0sIHlMLCByZW1MKSA8IDEpIHtcclxuICAgICAgICAgICAgICAgICAgbisrO1xyXG5cclxuICAgICAgICAgICAgICAgICAgLy8gU3VidHJhY3QgZGl2aXNvciBmcm9tIHJlbWFpbmRlci5cclxuICAgICAgICAgICAgICAgICAgc3VidHJhY3QocmVtLCB5TCA8IHJlbUwgPyB5eiA6IHljLCByZW1MLCBiYXNlKTtcclxuICAgICAgICAgICAgICAgICAgcmVtTCA9IHJlbS5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNtcCA9PT0gMCkge1xyXG4gICAgICAgICAgICAgIG4rKztcclxuICAgICAgICAgICAgICByZW0gPSBbMF07XHJcbiAgICAgICAgICAgIH0gLy8gZWxzZSBjbXAgPT09IDEgYW5kIG4gd2lsbCBiZSAwXHJcblxyXG4gICAgICAgICAgICAvLyBBZGQgdGhlIG5leHQgZGlnaXQsIG4sIHRvIHRoZSByZXN1bHQgYXJyYXkuXHJcbiAgICAgICAgICAgIHFjW2krK10gPSBuO1xyXG5cclxuICAgICAgICAgICAgLy8gVXBkYXRlIHRoZSByZW1haW5kZXIuXHJcbiAgICAgICAgICAgIGlmIChyZW1bMF0pIHtcclxuICAgICAgICAgICAgICByZW1bcmVtTCsrXSA9IHhjW3hpXSB8fCAwO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHJlbSA9IFt4Y1t4aV1dO1xyXG4gICAgICAgICAgICAgIHJlbUwgPSAxO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IHdoaWxlICgoeGkrKyA8IHhMIHx8IHJlbVswXSAhPSBudWxsKSAmJiBzLS0pO1xyXG5cclxuICAgICAgICAgIG1vcmUgPSByZW1bMF0gIT0gbnVsbDtcclxuXHJcbiAgICAgICAgICAvLyBMZWFkaW5nIHplcm8/XHJcbiAgICAgICAgICBpZiAoIXFjWzBdKSBxYy5zcGxpY2UoMCwgMSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoYmFzZSA9PSBCQVNFKSB7XHJcblxyXG4gICAgICAgICAgLy8gVG8gY2FsY3VsYXRlIHEuZSwgZmlyc3QgZ2V0IHRoZSBudW1iZXIgb2YgZGlnaXRzIG9mIHFjWzBdLlxyXG4gICAgICAgICAgZm9yIChpID0gMSwgcyA9IHFjWzBdOyBzID49IDEwOyBzIC89IDEwLCBpKyspO1xyXG5cclxuICAgICAgICAgIHJvdW5kKHEsIGRwICsgKHEuZSA9IGkgKyBlICogTE9HX0JBU0UgLSAxKSArIDEsIHJtLCBtb3JlKTtcclxuXHJcbiAgICAgICAgLy8gQ2FsbGVyIGlzIGNvbnZlcnRCYXNlLlxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBxLmUgPSBlO1xyXG4gICAgICAgICAgcS5yID0gK21vcmU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gcTtcclxuICAgICAgfTtcclxuICAgIH0pKCk7XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBSZXR1cm4gYSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSB2YWx1ZSBvZiBCaWdOdW1iZXIgbiBpbiBmaXhlZC1wb2ludCBvciBleHBvbmVudGlhbFxyXG4gICAgICogbm90YXRpb24gcm91bmRlZCB0byB0aGUgc3BlY2lmaWVkIGRlY2ltYWwgcGxhY2VzIG9yIHNpZ25pZmljYW50IGRpZ2l0cy5cclxuICAgICAqXHJcbiAgICAgKiBuOiBhIEJpZ051bWJlci5cclxuICAgICAqIGk6IHRoZSBpbmRleCBvZiB0aGUgbGFzdCBkaWdpdCByZXF1aXJlZCAoaS5lLiB0aGUgZGlnaXQgdGhhdCBtYXkgYmUgcm91bmRlZCB1cCkuXHJcbiAgICAgKiBybTogdGhlIHJvdW5kaW5nIG1vZGUuXHJcbiAgICAgKiBpZDogMSAodG9FeHBvbmVudGlhbCkgb3IgMiAodG9QcmVjaXNpb24pLlxyXG4gICAgICovXHJcbiAgICBmdW5jdGlvbiBmb3JtYXQobiwgaSwgcm0sIGlkKSB7XHJcbiAgICAgIHZhciBjMCwgZSwgbmUsIGxlbiwgc3RyO1xyXG5cclxuICAgICAgaWYgKHJtID09IG51bGwpIHJtID0gUk9VTkRJTkdfTU9ERTtcclxuICAgICAgZWxzZSBpbnRDaGVjayhybSwgMCwgOCk7XHJcblxyXG4gICAgICBpZiAoIW4uYykgcmV0dXJuIG4udG9TdHJpbmcoKTtcclxuXHJcbiAgICAgIGMwID0gbi5jWzBdO1xyXG4gICAgICBuZSA9IG4uZTtcclxuXHJcbiAgICAgIGlmIChpID09IG51bGwpIHtcclxuICAgICAgICBzdHIgPSBjb2VmZlRvU3RyaW5nKG4uYyk7XHJcbiAgICAgICAgc3RyID0gaWQgPT0gMSB8fCBpZCA9PSAyICYmIChuZSA8PSBUT19FWFBfTkVHIHx8IG5lID49IFRPX0VYUF9QT1MpXHJcbiAgICAgICAgID8gdG9FeHBvbmVudGlhbChzdHIsIG5lKVxyXG4gICAgICAgICA6IHRvRml4ZWRQb2ludChzdHIsIG5lLCAnMCcpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIG4gPSByb3VuZChuZXcgQmlnTnVtYmVyKG4pLCBpLCBybSk7XHJcblxyXG4gICAgICAgIC8vIG4uZSBtYXkgaGF2ZSBjaGFuZ2VkIGlmIHRoZSB2YWx1ZSB3YXMgcm91bmRlZCB1cC5cclxuICAgICAgICBlID0gbi5lO1xyXG5cclxuICAgICAgICBzdHIgPSBjb2VmZlRvU3RyaW5nKG4uYyk7XHJcbiAgICAgICAgbGVuID0gc3RyLmxlbmd0aDtcclxuXHJcbiAgICAgICAgLy8gdG9QcmVjaXNpb24gcmV0dXJucyBleHBvbmVudGlhbCBub3RhdGlvbiBpZiB0aGUgbnVtYmVyIG9mIHNpZ25pZmljYW50IGRpZ2l0c1xyXG4gICAgICAgIC8vIHNwZWNpZmllZCBpcyBsZXNzIHRoYW4gdGhlIG51bWJlciBvZiBkaWdpdHMgbmVjZXNzYXJ5IHRvIHJlcHJlc2VudCB0aGUgaW50ZWdlclxyXG4gICAgICAgIC8vIHBhcnQgb2YgdGhlIHZhbHVlIGluIGZpeGVkLXBvaW50IG5vdGF0aW9uLlxyXG5cclxuICAgICAgICAvLyBFeHBvbmVudGlhbCBub3RhdGlvbi5cclxuICAgICAgICBpZiAoaWQgPT0gMSB8fCBpZCA9PSAyICYmIChpIDw9IGUgfHwgZSA8PSBUT19FWFBfTkVHKSkge1xyXG5cclxuICAgICAgICAgIC8vIEFwcGVuZCB6ZXJvcz9cclxuICAgICAgICAgIGZvciAoOyBsZW4gPCBpOyBzdHIgKz0gJzAnLCBsZW4rKyk7XHJcbiAgICAgICAgICBzdHIgPSB0b0V4cG9uZW50aWFsKHN0ciwgZSk7XHJcblxyXG4gICAgICAgIC8vIEZpeGVkLXBvaW50IG5vdGF0aW9uLlxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBpIC09IG5lO1xyXG4gICAgICAgICAgc3RyID0gdG9GaXhlZFBvaW50KHN0ciwgZSwgJzAnKTtcclxuXHJcbiAgICAgICAgICAvLyBBcHBlbmQgemVyb3M/XHJcbiAgICAgICAgICBpZiAoZSArIDEgPiBsZW4pIHtcclxuICAgICAgICAgICAgaWYgKC0taSA+IDApIGZvciAoc3RyICs9ICcuJzsgaS0tOyBzdHIgKz0gJzAnKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGkgKz0gZSAtIGxlbjtcclxuICAgICAgICAgICAgaWYgKGkgPiAwKSB7XHJcbiAgICAgICAgICAgICAgaWYgKGUgKyAxID09IGxlbikgc3RyICs9ICcuJztcclxuICAgICAgICAgICAgICBmb3IgKDsgaS0tOyBzdHIgKz0gJzAnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIG4ucyA8IDAgJiYgYzAgPyAnLScgKyBzdHIgOiBzdHI7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vIEhhbmRsZSBCaWdOdW1iZXIubWF4IGFuZCBCaWdOdW1iZXIubWluLlxyXG4gICAgZnVuY3Rpb24gbWF4T3JNaW4oYXJncywgbWV0aG9kKSB7XHJcbiAgICAgIHZhciBuLFxyXG4gICAgICAgIGkgPSAxLFxyXG4gICAgICAgIG0gPSBuZXcgQmlnTnVtYmVyKGFyZ3NbMF0pO1xyXG5cclxuICAgICAgZm9yICg7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgbiA9IG5ldyBCaWdOdW1iZXIoYXJnc1tpXSk7XHJcblxyXG4gICAgICAgIC8vIElmIGFueSBudW1iZXIgaXMgTmFOLCByZXR1cm4gTmFOLlxyXG4gICAgICAgIGlmICghbi5zKSB7XHJcbiAgICAgICAgICBtID0gbjtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH0gZWxzZSBpZiAobWV0aG9kLmNhbGwobSwgbikpIHtcclxuICAgICAgICAgIG0gPSBuO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIG07XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBTdHJpcCB0cmFpbGluZyB6ZXJvcywgY2FsY3VsYXRlIGJhc2UgMTAgZXhwb25lbnQgYW5kIGNoZWNrIGFnYWluc3QgTUlOX0VYUCBhbmQgTUFYX0VYUC5cclxuICAgICAqIENhbGxlZCBieSBtaW51cywgcGx1cyBhbmQgdGltZXMuXHJcbiAgICAgKi9cclxuICAgIGZ1bmN0aW9uIG5vcm1hbGlzZShuLCBjLCBlKSB7XHJcbiAgICAgIHZhciBpID0gMSxcclxuICAgICAgICBqID0gYy5sZW5ndGg7XHJcblxyXG4gICAgICAgLy8gUmVtb3ZlIHRyYWlsaW5nIHplcm9zLlxyXG4gICAgICBmb3IgKDsgIWNbLS1qXTsgYy5wb3AoKSk7XHJcblxyXG4gICAgICAvLyBDYWxjdWxhdGUgdGhlIGJhc2UgMTAgZXhwb25lbnQuIEZpcnN0IGdldCB0aGUgbnVtYmVyIG9mIGRpZ2l0cyBvZiBjWzBdLlxyXG4gICAgICBmb3IgKGogPSBjWzBdOyBqID49IDEwOyBqIC89IDEwLCBpKyspO1xyXG5cclxuICAgICAgLy8gT3ZlcmZsb3c/XHJcbiAgICAgIGlmICgoZSA9IGkgKyBlICogTE9HX0JBU0UgLSAxKSA+IE1BWF9FWFApIHtcclxuXHJcbiAgICAgICAgLy8gSW5maW5pdHkuXHJcbiAgICAgICAgbi5jID0gbi5lID0gbnVsbDtcclxuXHJcbiAgICAgIC8vIFVuZGVyZmxvdz9cclxuICAgICAgfSBlbHNlIGlmIChlIDwgTUlOX0VYUCkge1xyXG5cclxuICAgICAgICAvLyBaZXJvLlxyXG4gICAgICAgIG4uYyA9IFtuLmUgPSAwXTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBuLmUgPSBlO1xyXG4gICAgICAgIG4uYyA9IGM7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBuO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvLyBIYW5kbGUgdmFsdWVzIHRoYXQgZmFpbCB0aGUgdmFsaWRpdHkgdGVzdCBpbiBCaWdOdW1iZXIuXHJcbiAgICBwYXJzZU51bWVyaWMgPSAoZnVuY3Rpb24gKCkge1xyXG4gICAgICB2YXIgYmFzZVByZWZpeCA9IC9eKC0/KTAoW3hib10pKD89XFx3W1xcdy5dKiQpL2ksXHJcbiAgICAgICAgZG90QWZ0ZXIgPSAvXihbXi5dKylcXC4kLyxcclxuICAgICAgICBkb3RCZWZvcmUgPSAvXlxcLihbXi5dKykkLyxcclxuICAgICAgICBpc0luZmluaXR5T3JOYU4gPSAvXi0/KEluZmluaXR5fE5hTikkLyxcclxuICAgICAgICB3aGl0ZXNwYWNlT3JQbHVzID0gL15cXHMqXFwrKD89W1xcdy5dKXxeXFxzK3xcXHMrJC9nO1xyXG5cclxuICAgICAgcmV0dXJuIGZ1bmN0aW9uICh4LCBzdHIsIGlzTnVtLCBiKSB7XHJcbiAgICAgICAgdmFyIGJhc2UsXHJcbiAgICAgICAgICBzID0gaXNOdW0gPyBzdHIgOiBzdHIucmVwbGFjZSh3aGl0ZXNwYWNlT3JQbHVzLCAnJyk7XHJcblxyXG4gICAgICAgIC8vIE5vIGV4Y2VwdGlvbiBvbiDCsUluZmluaXR5IG9yIE5hTi5cclxuICAgICAgICBpZiAoaXNJbmZpbml0eU9yTmFOLnRlc3QocykpIHtcclxuICAgICAgICAgIHgucyA9IGlzTmFOKHMpID8gbnVsbCA6IHMgPCAwID8gLTEgOiAxO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBpZiAoIWlzTnVtKSB7XHJcblxyXG4gICAgICAgICAgICAvLyBiYXNlUHJlZml4ID0gL14oLT8pMChbeGJvXSkoPz1cXHdbXFx3Ll0qJCkvaVxyXG4gICAgICAgICAgICBzID0gcy5yZXBsYWNlKGJhc2VQcmVmaXgsIGZ1bmN0aW9uIChtLCBwMSwgcDIpIHtcclxuICAgICAgICAgICAgICBiYXNlID0gKHAyID0gcDIudG9Mb3dlckNhc2UoKSkgPT0gJ3gnID8gMTYgOiBwMiA9PSAnYicgPyAyIDogODtcclxuICAgICAgICAgICAgICByZXR1cm4gIWIgfHwgYiA9PSBiYXNlID8gcDEgOiBtO1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIGlmIChiKSB7XHJcbiAgICAgICAgICAgICAgYmFzZSA9IGI7XHJcblxyXG4gICAgICAgICAgICAgIC8vIEUuZy4gJzEuJyB0byAnMScsICcuMScgdG8gJzAuMSdcclxuICAgICAgICAgICAgICBzID0gcy5yZXBsYWNlKGRvdEFmdGVyLCAnJDEnKS5yZXBsYWNlKGRvdEJlZm9yZSwgJzAuJDEnKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHN0ciAhPSBzKSByZXR1cm4gbmV3IEJpZ051bWJlcihzLCBiYXNlKTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAvLyAnW0JpZ051bWJlciBFcnJvcl0gTm90IGEgbnVtYmVyOiB7bn0nXHJcbiAgICAgICAgICAvLyAnW0JpZ051bWJlciBFcnJvcl0gTm90IGEgYmFzZSB7Yn0gbnVtYmVyOiB7bn0nXHJcbiAgICAgICAgICBpZiAoQmlnTnVtYmVyLkRFQlVHKSB7XHJcbiAgICAgICAgICAgIHRocm93IEVycm9yXHJcbiAgICAgICAgICAgICAgKGJpZ251bWJlckVycm9yICsgJ05vdCBhJyArIChiID8gJyBiYXNlICcgKyBiIDogJycpICsgJyBudW1iZXI6ICcgKyBzdHIpO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC8vIE5hTlxyXG4gICAgICAgICAgeC5zID0gbnVsbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHguYyA9IHguZSA9IG51bGw7XHJcbiAgICAgIH1cclxuICAgIH0pKCk7XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBSb3VuZCB4IHRvIHNkIHNpZ25pZmljYW50IGRpZ2l0cyB1c2luZyByb3VuZGluZyBtb2RlIHJtLiBDaGVjayBmb3Igb3Zlci91bmRlci1mbG93LlxyXG4gICAgICogSWYgciBpcyB0cnV0aHksIGl0IGlzIGtub3duIHRoYXQgdGhlcmUgYXJlIG1vcmUgZGlnaXRzIGFmdGVyIHRoZSByb3VuZGluZyBkaWdpdC5cclxuICAgICAqL1xyXG4gICAgZnVuY3Rpb24gcm91bmQoeCwgc2QsIHJtLCByKSB7XHJcbiAgICAgIHZhciBkLCBpLCBqLCBrLCBuLCBuaSwgcmQsXHJcbiAgICAgICAgeGMgPSB4LmMsXHJcbiAgICAgICAgcG93czEwID0gUE9XU19URU47XHJcblxyXG4gICAgICAvLyBpZiB4IGlzIG5vdCBJbmZpbml0eSBvciBOYU4uLi5cclxuICAgICAgaWYgKHhjKSB7XHJcblxyXG4gICAgICAgIC8vIHJkIGlzIHRoZSByb3VuZGluZyBkaWdpdCwgaS5lLiB0aGUgZGlnaXQgYWZ0ZXIgdGhlIGRpZ2l0IHRoYXQgbWF5IGJlIHJvdW5kZWQgdXAuXHJcbiAgICAgICAgLy8gbiBpcyBhIGJhc2UgMWUxNCBudW1iZXIsIHRoZSB2YWx1ZSBvZiB0aGUgZWxlbWVudCBvZiBhcnJheSB4LmMgY29udGFpbmluZyByZC5cclxuICAgICAgICAvLyBuaSBpcyB0aGUgaW5kZXggb2YgbiB3aXRoaW4geC5jLlxyXG4gICAgICAgIC8vIGQgaXMgdGhlIG51bWJlciBvZiBkaWdpdHMgb2Ygbi5cclxuICAgICAgICAvLyBpIGlzIHRoZSBpbmRleCBvZiByZCB3aXRoaW4gbiBpbmNsdWRpbmcgbGVhZGluZyB6ZXJvcy5cclxuICAgICAgICAvLyBqIGlzIHRoZSBhY3R1YWwgaW5kZXggb2YgcmQgd2l0aGluIG4gKGlmIDwgMCwgcmQgaXMgYSBsZWFkaW5nIHplcm8pLlxyXG4gICAgICAgIG91dDoge1xyXG5cclxuICAgICAgICAgIC8vIEdldCB0aGUgbnVtYmVyIG9mIGRpZ2l0cyBvZiB0aGUgZmlyc3QgZWxlbWVudCBvZiB4Yy5cclxuICAgICAgICAgIGZvciAoZCA9IDEsIGsgPSB4Y1swXTsgayA+PSAxMDsgayAvPSAxMCwgZCsrKTtcclxuICAgICAgICAgIGkgPSBzZCAtIGQ7XHJcblxyXG4gICAgICAgICAgLy8gSWYgdGhlIHJvdW5kaW5nIGRpZ2l0IGlzIGluIHRoZSBmaXJzdCBlbGVtZW50IG9mIHhjLi4uXHJcbiAgICAgICAgICBpZiAoaSA8IDApIHtcclxuICAgICAgICAgICAgaSArPSBMT0dfQkFTRTtcclxuICAgICAgICAgICAgaiA9IHNkO1xyXG4gICAgICAgICAgICBuID0geGNbbmkgPSAwXTtcclxuXHJcbiAgICAgICAgICAgIC8vIEdldCB0aGUgcm91bmRpbmcgZGlnaXQgYXQgaW5kZXggaiBvZiBuLlxyXG4gICAgICAgICAgICByZCA9IG4gLyBwb3dzMTBbZCAtIGogLSAxXSAlIDEwIHwgMDtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIG5pID0gbWF0aGNlaWwoKGkgKyAxKSAvIExPR19CQVNFKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChuaSA+PSB4Yy5sZW5ndGgpIHtcclxuXHJcbiAgICAgICAgICAgICAgaWYgKHIpIHtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBOZWVkZWQgYnkgc3FydC5cclxuICAgICAgICAgICAgICAgIGZvciAoOyB4Yy5sZW5ndGggPD0gbmk7IHhjLnB1c2goMCkpO1xyXG4gICAgICAgICAgICAgICAgbiA9IHJkID0gMDtcclxuICAgICAgICAgICAgICAgIGQgPSAxO1xyXG4gICAgICAgICAgICAgICAgaSAlPSBMT0dfQkFTRTtcclxuICAgICAgICAgICAgICAgIGogPSBpIC0gTE9HX0JBU0UgKyAxO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBicmVhayBvdXQ7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIG4gPSBrID0geGNbbmldO1xyXG5cclxuICAgICAgICAgICAgICAvLyBHZXQgdGhlIG51bWJlciBvZiBkaWdpdHMgb2Ygbi5cclxuICAgICAgICAgICAgICBmb3IgKGQgPSAxOyBrID49IDEwOyBrIC89IDEwLCBkKyspO1xyXG5cclxuICAgICAgICAgICAgICAvLyBHZXQgdGhlIGluZGV4IG9mIHJkIHdpdGhpbiBuLlxyXG4gICAgICAgICAgICAgIGkgJT0gTE9HX0JBU0U7XHJcblxyXG4gICAgICAgICAgICAgIC8vIEdldCB0aGUgaW5kZXggb2YgcmQgd2l0aGluIG4sIGFkanVzdGVkIGZvciBsZWFkaW5nIHplcm9zLlxyXG4gICAgICAgICAgICAgIC8vIFRoZSBudW1iZXIgb2YgbGVhZGluZyB6ZXJvcyBvZiBuIGlzIGdpdmVuIGJ5IExPR19CQVNFIC0gZC5cclxuICAgICAgICAgICAgICBqID0gaSAtIExPR19CQVNFICsgZDtcclxuXHJcbiAgICAgICAgICAgICAgLy8gR2V0IHRoZSByb3VuZGluZyBkaWdpdCBhdCBpbmRleCBqIG9mIG4uXHJcbiAgICAgICAgICAgICAgcmQgPSBqIDwgMCA/IDAgOiBuIC8gcG93czEwW2QgLSBqIC0gMV0gJSAxMCB8IDA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICByID0gciB8fCBzZCA8IDAgfHxcclxuXHJcbiAgICAgICAgICAvLyBBcmUgdGhlcmUgYW55IG5vbi16ZXJvIGRpZ2l0cyBhZnRlciB0aGUgcm91bmRpbmcgZGlnaXQ/XHJcbiAgICAgICAgICAvLyBUaGUgZXhwcmVzc2lvbiAgbiAlIHBvd3MxMFtkIC0gaiAtIDFdICByZXR1cm5zIGFsbCBkaWdpdHMgb2YgbiB0byB0aGUgcmlnaHRcclxuICAgICAgICAgIC8vIG9mIHRoZSBkaWdpdCBhdCBqLCBlLmcuIGlmIG4gaXMgOTA4NzE0IGFuZCBqIGlzIDIsIHRoZSBleHByZXNzaW9uIGdpdmVzIDcxNC5cclxuICAgICAgICAgICB4Y1tuaSArIDFdICE9IG51bGwgfHwgKGogPCAwID8gbiA6IG4gJSBwb3dzMTBbZCAtIGogLSAxXSk7XHJcblxyXG4gICAgICAgICAgciA9IHJtIDwgNFxyXG4gICAgICAgICAgID8gKHJkIHx8IHIpICYmIChybSA9PSAwIHx8IHJtID09ICh4LnMgPCAwID8gMyA6IDIpKVxyXG4gICAgICAgICAgIDogcmQgPiA1IHx8IHJkID09IDUgJiYgKHJtID09IDQgfHwgciB8fCBybSA9PSA2ICYmXHJcblxyXG4gICAgICAgICAgICAvLyBDaGVjayB3aGV0aGVyIHRoZSBkaWdpdCB0byB0aGUgbGVmdCBvZiB0aGUgcm91bmRpbmcgZGlnaXQgaXMgb2RkLlxyXG4gICAgICAgICAgICAoKGkgPiAwID8gaiA+IDAgPyBuIC8gcG93czEwW2QgLSBqXSA6IDAgOiB4Y1tuaSAtIDFdKSAlIDEwKSAmIDEgfHxcclxuICAgICAgICAgICAgIHJtID09ICh4LnMgPCAwID8gOCA6IDcpKTtcclxuXHJcbiAgICAgICAgICBpZiAoc2QgPCAxIHx8ICF4Y1swXSkge1xyXG4gICAgICAgICAgICB4Yy5sZW5ndGggPSAwO1xyXG5cclxuICAgICAgICAgICAgaWYgKHIpIHtcclxuXHJcbiAgICAgICAgICAgICAgLy8gQ29udmVydCBzZCB0byBkZWNpbWFsIHBsYWNlcy5cclxuICAgICAgICAgICAgICBzZCAtPSB4LmUgKyAxO1xyXG5cclxuICAgICAgICAgICAgICAvLyAxLCAwLjEsIDAuMDEsIDAuMDAxLCAwLjAwMDEgZXRjLlxyXG4gICAgICAgICAgICAgIHhjWzBdID0gcG93czEwWyhMT0dfQkFTRSAtIHNkICUgTE9HX0JBU0UpICUgTE9HX0JBU0VdO1xyXG4gICAgICAgICAgICAgIHguZSA9IC1zZCB8fCAwO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICAgICAgICAvLyBaZXJvLlxyXG4gICAgICAgICAgICAgIHhjWzBdID0geC5lID0gMDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHg7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgLy8gUmVtb3ZlIGV4Y2VzcyBkaWdpdHMuXHJcbiAgICAgICAgICBpZiAoaSA9PSAwKSB7XHJcbiAgICAgICAgICAgIHhjLmxlbmd0aCA9IG5pO1xyXG4gICAgICAgICAgICBrID0gMTtcclxuICAgICAgICAgICAgbmktLTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHhjLmxlbmd0aCA9IG5pICsgMTtcclxuICAgICAgICAgICAgayA9IHBvd3MxMFtMT0dfQkFTRSAtIGldO1xyXG5cclxuICAgICAgICAgICAgLy8gRS5nLiA1NjcwMCBiZWNvbWVzIDU2MDAwIGlmIDcgaXMgdGhlIHJvdW5kaW5nIGRpZ2l0LlxyXG4gICAgICAgICAgICAvLyBqID4gMCBtZWFucyBpID4gbnVtYmVyIG9mIGxlYWRpbmcgemVyb3Mgb2Ygbi5cclxuICAgICAgICAgICAgeGNbbmldID0gaiA+IDAgPyBtYXRoZmxvb3IobiAvIHBvd3MxMFtkIC0gal0gJSBwb3dzMTBbal0pICogayA6IDA7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgLy8gUm91bmQgdXA/XHJcbiAgICAgICAgICBpZiAocikge1xyXG5cclxuICAgICAgICAgICAgZm9yICg7IDspIHtcclxuXHJcbiAgICAgICAgICAgICAgLy8gSWYgdGhlIGRpZ2l0IHRvIGJlIHJvdW5kZWQgdXAgaXMgaW4gdGhlIGZpcnN0IGVsZW1lbnQgb2YgeGMuLi5cclxuICAgICAgICAgICAgICBpZiAobmkgPT0gMCkge1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIGkgd2lsbCBiZSB0aGUgbGVuZ3RoIG9mIHhjWzBdIGJlZm9yZSBrIGlzIGFkZGVkLlxyXG4gICAgICAgICAgICAgICAgZm9yIChpID0gMSwgaiA9IHhjWzBdOyBqID49IDEwOyBqIC89IDEwLCBpKyspO1xyXG4gICAgICAgICAgICAgICAgaiA9IHhjWzBdICs9IGs7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGsgPSAxOyBqID49IDEwOyBqIC89IDEwLCBrKyspO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIGlmIGkgIT0gayB0aGUgbGVuZ3RoIGhhcyBpbmNyZWFzZWQuXHJcbiAgICAgICAgICAgICAgICBpZiAoaSAhPSBrKSB7XHJcbiAgICAgICAgICAgICAgICAgIHguZSsrO1xyXG4gICAgICAgICAgICAgICAgICBpZiAoeGNbMF0gPT0gQkFTRSkgeGNbMF0gPSAxO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB4Y1tuaV0gKz0gaztcclxuICAgICAgICAgICAgICAgIGlmICh4Y1tuaV0gIT0gQkFTRSkgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB4Y1tuaS0tXSA9IDA7XHJcbiAgICAgICAgICAgICAgICBrID0gMTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAvLyBSZW1vdmUgdHJhaWxpbmcgemVyb3MuXHJcbiAgICAgICAgICBmb3IgKGkgPSB4Yy5sZW5ndGg7IHhjWy0taV0gPT09IDA7IHhjLnBvcCgpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIE92ZXJmbG93PyBJbmZpbml0eS5cclxuICAgICAgICBpZiAoeC5lID4gTUFYX0VYUCkge1xyXG4gICAgICAgICAgeC5jID0geC5lID0gbnVsbDtcclxuXHJcbiAgICAgICAgLy8gVW5kZXJmbG93PyBaZXJvLlxyXG4gICAgICAgIH0gZWxzZSBpZiAoeC5lIDwgTUlOX0VYUCkge1xyXG4gICAgICAgICAgeC5jID0gW3guZSA9IDBdO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIHg7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIGZ1bmN0aW9uIHZhbHVlT2Yobikge1xyXG4gICAgICB2YXIgc3RyLFxyXG4gICAgICAgIGUgPSBuLmU7XHJcblxyXG4gICAgICBpZiAoZSA9PT0gbnVsbCkgcmV0dXJuIG4udG9TdHJpbmcoKTtcclxuXHJcbiAgICAgIHN0ciA9IGNvZWZmVG9TdHJpbmcobi5jKTtcclxuXHJcbiAgICAgIHN0ciA9IGUgPD0gVE9fRVhQX05FRyB8fCBlID49IFRPX0VYUF9QT1NcclxuICAgICAgICA/IHRvRXhwb25lbnRpYWwoc3RyLCBlKVxyXG4gICAgICAgIDogdG9GaXhlZFBvaW50KHN0ciwgZSwgJzAnKTtcclxuXHJcbiAgICAgIHJldHVybiBuLnMgPCAwID8gJy0nICsgc3RyIDogc3RyO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvLyBQUk9UT1RZUEUvSU5TVEFOQ0UgTUVUSE9EU1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJuIGEgbmV3IEJpZ051bWJlciB3aG9zZSB2YWx1ZSBpcyB0aGUgYWJzb2x1dGUgdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIuXHJcbiAgICAgKi9cclxuICAgIFAuYWJzb2x1dGVWYWx1ZSA9IFAuYWJzID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICB2YXIgeCA9IG5ldyBCaWdOdW1iZXIodGhpcyk7XHJcbiAgICAgIGlmICh4LnMgPCAwKSB4LnMgPSAxO1xyXG4gICAgICByZXR1cm4geDtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBSZXR1cm5cclxuICAgICAqICAgMSBpZiB0aGUgdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIgaXMgZ3JlYXRlciB0aGFuIHRoZSB2YWx1ZSBvZiBCaWdOdW1iZXIoeSwgYiksXHJcbiAgICAgKiAgIC0xIGlmIHRoZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlciBpcyBsZXNzIHRoYW4gdGhlIHZhbHVlIG9mIEJpZ051bWJlcih5LCBiKSxcclxuICAgICAqICAgMCBpZiB0aGV5IGhhdmUgdGhlIHNhbWUgdmFsdWUsXHJcbiAgICAgKiAgIG9yIG51bGwgaWYgdGhlIHZhbHVlIG9mIGVpdGhlciBpcyBOYU4uXHJcbiAgICAgKi9cclxuICAgIFAuY29tcGFyZWRUbyA9IGZ1bmN0aW9uICh5LCBiKSB7XHJcbiAgICAgIHJldHVybiBjb21wYXJlKHRoaXMsIG5ldyBCaWdOdW1iZXIoeSwgYikpO1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIElmIGRwIGlzIHVuZGVmaW5lZCBvciBudWxsIG9yIHRydWUgb3IgZmFsc2UsIHJldHVybiB0aGUgbnVtYmVyIG9mIGRlY2ltYWwgcGxhY2VzIG9mIHRoZVxyXG4gICAgICogdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIsIG9yIG51bGwgaWYgdGhlIHZhbHVlIG9mIHRoaXMgQmlnTnVtYmVyIGlzIMKxSW5maW5pdHkgb3IgTmFOLlxyXG4gICAgICpcclxuICAgICAqIE90aGVyd2lzZSwgaWYgZHAgaXMgYSBudW1iZXIsIHJldHVybiBhIG5ldyBCaWdOdW1iZXIgd2hvc2UgdmFsdWUgaXMgdGhlIHZhbHVlIG9mIHRoaXNcclxuICAgICAqIEJpZ051bWJlciByb3VuZGVkIHRvIGEgbWF4aW11bSBvZiBkcCBkZWNpbWFsIHBsYWNlcyB1c2luZyByb3VuZGluZyBtb2RlIHJtLCBvclxyXG4gICAgICogUk9VTkRJTkdfTU9ERSBpZiBybSBpcyBvbWl0dGVkLlxyXG4gICAgICpcclxuICAgICAqIFtkcF0ge251bWJlcn0gRGVjaW1hbCBwbGFjZXM6IGludGVnZXIsIDAgdG8gTUFYIGluY2x1c2l2ZS5cclxuICAgICAqIFtybV0ge251bWJlcn0gUm91bmRpbmcgbW9kZS4gSW50ZWdlciwgMCB0byA4IGluY2x1c2l2ZS5cclxuICAgICAqXHJcbiAgICAgKiAnW0JpZ051bWJlciBFcnJvcl0gQXJndW1lbnQge25vdCBhIHByaW1pdGl2ZSBudW1iZXJ8bm90IGFuIGludGVnZXJ8b3V0IG9mIHJhbmdlfToge2RwfHJtfSdcclxuICAgICAqL1xyXG4gICAgUC5kZWNpbWFsUGxhY2VzID0gUC5kcCA9IGZ1bmN0aW9uIChkcCwgcm0pIHtcclxuICAgICAgdmFyIGMsIG4sIHYsXHJcbiAgICAgICAgeCA9IHRoaXM7XHJcblxyXG4gICAgICBpZiAoZHAgIT0gbnVsbCkge1xyXG4gICAgICAgIGludENoZWNrKGRwLCAwLCBNQVgpO1xyXG4gICAgICAgIGlmIChybSA9PSBudWxsKSBybSA9IFJPVU5ESU5HX01PREU7XHJcbiAgICAgICAgZWxzZSBpbnRDaGVjayhybSwgMCwgOCk7XHJcblxyXG4gICAgICAgIHJldHVybiByb3VuZChuZXcgQmlnTnVtYmVyKHgpLCBkcCArIHguZSArIDEsIHJtKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKCEoYyA9IHguYykpIHJldHVybiBudWxsO1xyXG4gICAgICBuID0gKCh2ID0gYy5sZW5ndGggLSAxKSAtIGJpdEZsb29yKHRoaXMuZSAvIExPR19CQVNFKSkgKiBMT0dfQkFTRTtcclxuXHJcbiAgICAgIC8vIFN1YnRyYWN0IHRoZSBudW1iZXIgb2YgdHJhaWxpbmcgemVyb3Mgb2YgdGhlIGxhc3QgbnVtYmVyLlxyXG4gICAgICBpZiAodiA9IGNbdl0pIGZvciAoOyB2ICUgMTAgPT0gMDsgdiAvPSAxMCwgbi0tKTtcclxuICAgICAgaWYgKG4gPCAwKSBuID0gMDtcclxuXHJcbiAgICAgIHJldHVybiBuO1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqICBuIC8gMCA9IElcclxuICAgICAqICBuIC8gTiA9IE5cclxuICAgICAqICBuIC8gSSA9IDBcclxuICAgICAqICAwIC8gbiA9IDBcclxuICAgICAqICAwIC8gMCA9IE5cclxuICAgICAqICAwIC8gTiA9IE5cclxuICAgICAqICAwIC8gSSA9IDBcclxuICAgICAqICBOIC8gbiA9IE5cclxuICAgICAqICBOIC8gMCA9IE5cclxuICAgICAqICBOIC8gTiA9IE5cclxuICAgICAqICBOIC8gSSA9IE5cclxuICAgICAqICBJIC8gbiA9IElcclxuICAgICAqICBJIC8gMCA9IElcclxuICAgICAqICBJIC8gTiA9IE5cclxuICAgICAqICBJIC8gSSA9IE5cclxuICAgICAqXHJcbiAgICAgKiBSZXR1cm4gYSBuZXcgQmlnTnVtYmVyIHdob3NlIHZhbHVlIGlzIHRoZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlciBkaXZpZGVkIGJ5IHRoZSB2YWx1ZSBvZlxyXG4gICAgICogQmlnTnVtYmVyKHksIGIpLCByb3VuZGVkIGFjY29yZGluZyB0byBERUNJTUFMX1BMQUNFUyBhbmQgUk9VTkRJTkdfTU9ERS5cclxuICAgICAqL1xyXG4gICAgUC5kaXZpZGVkQnkgPSBQLmRpdiA9IGZ1bmN0aW9uICh5LCBiKSB7XHJcbiAgICAgIHJldHVybiBkaXYodGhpcywgbmV3IEJpZ051bWJlcih5LCBiKSwgREVDSU1BTF9QTEFDRVMsIFJPVU5ESU5HX01PREUpO1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIFJldHVybiBhIG5ldyBCaWdOdW1iZXIgd2hvc2UgdmFsdWUgaXMgdGhlIGludGVnZXIgcGFydCBvZiBkaXZpZGluZyB0aGUgdmFsdWUgb2YgdGhpc1xyXG4gICAgICogQmlnTnVtYmVyIGJ5IHRoZSB2YWx1ZSBvZiBCaWdOdW1iZXIoeSwgYikuXHJcbiAgICAgKi9cclxuICAgIFAuZGl2aWRlZFRvSW50ZWdlckJ5ID0gUC5pZGl2ID0gZnVuY3Rpb24gKHksIGIpIHtcclxuICAgICAgcmV0dXJuIGRpdih0aGlzLCBuZXcgQmlnTnVtYmVyKHksIGIpLCAwLCAxKTtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBSZXR1cm4gYSBCaWdOdW1iZXIgd2hvc2UgdmFsdWUgaXMgdGhlIHZhbHVlIG9mIHRoaXMgQmlnTnVtYmVyIGV4cG9uZW50aWF0ZWQgYnkgbi5cclxuICAgICAqXHJcbiAgICAgKiBJZiBtIGlzIHByZXNlbnQsIHJldHVybiB0aGUgcmVzdWx0IG1vZHVsbyBtLlxyXG4gICAgICogSWYgbiBpcyBuZWdhdGl2ZSByb3VuZCBhY2NvcmRpbmcgdG8gREVDSU1BTF9QTEFDRVMgYW5kIFJPVU5ESU5HX01PREUuXHJcbiAgICAgKiBJZiBQT1dfUFJFQ0lTSU9OIGlzIG5vbi16ZXJvIGFuZCBtIGlzIG5vdCBwcmVzZW50LCByb3VuZCB0byBQT1dfUFJFQ0lTSU9OIHVzaW5nIFJPVU5ESU5HX01PREUuXHJcbiAgICAgKlxyXG4gICAgICogVGhlIG1vZHVsYXIgcG93ZXIgb3BlcmF0aW9uIHdvcmtzIGVmZmljaWVudGx5IHdoZW4geCwgbiwgYW5kIG0gYXJlIGludGVnZXJzLCBvdGhlcndpc2UgaXRcclxuICAgICAqIGlzIGVxdWl2YWxlbnQgdG8gY2FsY3VsYXRpbmcgeC5leHBvbmVudGlhdGVkQnkobikubW9kdWxvKG0pIHdpdGggYSBQT1dfUFJFQ0lTSU9OIG9mIDAuXHJcbiAgICAgKlxyXG4gICAgICogbiB7bnVtYmVyfHN0cmluZ3xCaWdOdW1iZXJ9IFRoZSBleHBvbmVudC4gQW4gaW50ZWdlci5cclxuICAgICAqIFttXSB7bnVtYmVyfHN0cmluZ3xCaWdOdW1iZXJ9IFRoZSBtb2R1bHVzLlxyXG4gICAgICpcclxuICAgICAqICdbQmlnTnVtYmVyIEVycm9yXSBFeHBvbmVudCBub3QgYW4gaW50ZWdlcjoge259J1xyXG4gICAgICovXHJcbiAgICBQLmV4cG9uZW50aWF0ZWRCeSA9IFAucG93ID0gZnVuY3Rpb24gKG4sIG0pIHtcclxuICAgICAgdmFyIGhhbGYsIGlzTW9kRXhwLCBpLCBrLCBtb3JlLCBuSXNCaWcsIG5Jc05lZywgbklzT2RkLCB5LFxyXG4gICAgICAgIHggPSB0aGlzO1xyXG5cclxuICAgICAgbiA9IG5ldyBCaWdOdW1iZXIobik7XHJcblxyXG4gICAgICAvLyBBbGxvdyBOYU4gYW5kIMKxSW5maW5pdHksIGJ1dCBub3Qgb3RoZXIgbm9uLWludGVnZXJzLlxyXG4gICAgICBpZiAobi5jICYmICFuLmlzSW50ZWdlcigpKSB7XHJcbiAgICAgICAgdGhyb3cgRXJyb3JcclxuICAgICAgICAgIChiaWdudW1iZXJFcnJvciArICdFeHBvbmVudCBub3QgYW4gaW50ZWdlcjogJyArIHZhbHVlT2YobikpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAobSAhPSBudWxsKSBtID0gbmV3IEJpZ051bWJlcihtKTtcclxuXHJcbiAgICAgIC8vIEV4cG9uZW50IG9mIE1BWF9TQUZFX0lOVEVHRVIgaXMgMTUuXHJcbiAgICAgIG5Jc0JpZyA9IG4uZSA+IDE0O1xyXG5cclxuICAgICAgLy8gSWYgeCBpcyBOYU4sIMKxSW5maW5pdHksIMKxMCBvciDCsTEsIG9yIG4gaXMgwrFJbmZpbml0eSwgTmFOIG9yIMKxMC5cclxuICAgICAgaWYgKCF4LmMgfHwgIXguY1swXSB8fCB4LmNbMF0gPT0gMSAmJiAheC5lICYmIHguYy5sZW5ndGggPT0gMSB8fCAhbi5jIHx8ICFuLmNbMF0pIHtcclxuXHJcbiAgICAgICAgLy8gVGhlIHNpZ24gb2YgdGhlIHJlc3VsdCBvZiBwb3cgd2hlbiB4IGlzIG5lZ2F0aXZlIGRlcGVuZHMgb24gdGhlIGV2ZW5uZXNzIG9mIG4uXHJcbiAgICAgICAgLy8gSWYgK24gb3ZlcmZsb3dzIHRvIMKxSW5maW5pdHksIHRoZSBldmVubmVzcyBvZiBuIHdvdWxkIGJlIG5vdCBiZSBrbm93bi5cclxuICAgICAgICB5ID0gbmV3IEJpZ051bWJlcihNYXRoLnBvdygrdmFsdWVPZih4KSwgbklzQmlnID8gMiAtIGlzT2RkKG4pIDogK3ZhbHVlT2YobikpKTtcclxuICAgICAgICByZXR1cm4gbSA/IHkubW9kKG0pIDogeTtcclxuICAgICAgfVxyXG5cclxuICAgICAgbklzTmVnID0gbi5zIDwgMDtcclxuXHJcbiAgICAgIGlmIChtKSB7XHJcblxyXG4gICAgICAgIC8vIHggJSBtIHJldHVybnMgTmFOIGlmIGFicyhtKSBpcyB6ZXJvLCBvciBtIGlzIE5hTi5cclxuICAgICAgICBpZiAobS5jID8gIW0uY1swXSA6ICFtLnMpIHJldHVybiBuZXcgQmlnTnVtYmVyKE5hTik7XHJcblxyXG4gICAgICAgIGlzTW9kRXhwID0gIW5Jc05lZyAmJiB4LmlzSW50ZWdlcigpICYmIG0uaXNJbnRlZ2VyKCk7XHJcblxyXG4gICAgICAgIGlmIChpc01vZEV4cCkgeCA9IHgubW9kKG0pO1xyXG5cclxuICAgICAgLy8gT3ZlcmZsb3cgdG8gwrFJbmZpbml0eTogPj0yKioxZTEwIG9yID49MS4wMDAwMDI0KioxZTE1LlxyXG4gICAgICAvLyBVbmRlcmZsb3cgdG8gwrEwOiA8PTAuNzkqKjFlMTAgb3IgPD0wLjk5OTk5NzUqKjFlMTUuXHJcbiAgICAgIH0gZWxzZSBpZiAobi5lID4gOSAmJiAoeC5lID4gMCB8fCB4LmUgPCAtMSB8fCAoeC5lID09IDBcclxuICAgICAgICAvLyBbMSwgMjQwMDAwMDAwXVxyXG4gICAgICAgID8geC5jWzBdID4gMSB8fCBuSXNCaWcgJiYgeC5jWzFdID49IDI0ZTdcclxuICAgICAgICAvLyBbODAwMDAwMDAwMDAwMDBdICBbOTk5OTk3NTAwMDAwMDBdXHJcbiAgICAgICAgOiB4LmNbMF0gPCA4ZTEzIHx8IG5Jc0JpZyAmJiB4LmNbMF0gPD0gOTk5OTk3NWU3KSkpIHtcclxuXHJcbiAgICAgICAgLy8gSWYgeCBpcyBuZWdhdGl2ZSBhbmQgbiBpcyBvZGQsIGsgPSAtMCwgZWxzZSBrID0gMC5cclxuICAgICAgICBrID0geC5zIDwgMCAmJiBpc09kZChuKSA/IC0wIDogMDtcclxuXHJcbiAgICAgICAgLy8gSWYgeCA+PSAxLCBrID0gwrFJbmZpbml0eS5cclxuICAgICAgICBpZiAoeC5lID4gLTEpIGsgPSAxIC8gaztcclxuXHJcbiAgICAgICAgLy8gSWYgbiBpcyBuZWdhdGl2ZSByZXR1cm4gwrEwLCBlbHNlIHJldHVybiDCsUluZmluaXR5LlxyXG4gICAgICAgIHJldHVybiBuZXcgQmlnTnVtYmVyKG5Jc05lZyA/IDEgLyBrIDogayk7XHJcblxyXG4gICAgICB9IGVsc2UgaWYgKFBPV19QUkVDSVNJT04pIHtcclxuXHJcbiAgICAgICAgLy8gVHJ1bmNhdGluZyBlYWNoIGNvZWZmaWNpZW50IGFycmF5IHRvIGEgbGVuZ3RoIG9mIGsgYWZ0ZXIgZWFjaCBtdWx0aXBsaWNhdGlvblxyXG4gICAgICAgIC8vIGVxdWF0ZXMgdG8gdHJ1bmNhdGluZyBzaWduaWZpY2FudCBkaWdpdHMgdG8gUE9XX1BSRUNJU0lPTiArIFsyOCwgNDFdLFxyXG4gICAgICAgIC8vIGkuZS4gdGhlcmUgd2lsbCBiZSBhIG1pbmltdW0gb2YgMjggZ3VhcmQgZGlnaXRzIHJldGFpbmVkLlxyXG4gICAgICAgIGsgPSBtYXRoY2VpbChQT1dfUFJFQ0lTSU9OIC8gTE9HX0JBU0UgKyAyKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKG5Jc0JpZykge1xyXG4gICAgICAgIGhhbGYgPSBuZXcgQmlnTnVtYmVyKDAuNSk7XHJcbiAgICAgICAgaWYgKG5Jc05lZykgbi5zID0gMTtcclxuICAgICAgICBuSXNPZGQgPSBpc09kZChuKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpID0gTWF0aC5hYnMoK3ZhbHVlT2YobikpO1xyXG4gICAgICAgIG5Jc09kZCA9IGkgJSAyO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB5ID0gbmV3IEJpZ051bWJlcihPTkUpO1xyXG5cclxuICAgICAgLy8gUGVyZm9ybXMgNTQgbG9vcCBpdGVyYXRpb25zIGZvciBuIG9mIDkwMDcxOTkyNTQ3NDA5OTEuXHJcbiAgICAgIGZvciAoOyA7KSB7XHJcblxyXG4gICAgICAgIGlmIChuSXNPZGQpIHtcclxuICAgICAgICAgIHkgPSB5LnRpbWVzKHgpO1xyXG4gICAgICAgICAgaWYgKCF5LmMpIGJyZWFrO1xyXG5cclxuICAgICAgICAgIGlmIChrKSB7XHJcbiAgICAgICAgICAgIGlmICh5LmMubGVuZ3RoID4gaykgeS5jLmxlbmd0aCA9IGs7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKGlzTW9kRXhwKSB7XHJcbiAgICAgICAgICAgIHkgPSB5Lm1vZChtKTsgICAgLy95ID0geS5taW51cyhkaXYoeSwgbSwgMCwgTU9EVUxPX01PREUpLnRpbWVzKG0pKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChpKSB7XHJcbiAgICAgICAgICBpID0gbWF0aGZsb29yKGkgLyAyKTtcclxuICAgICAgICAgIGlmIChpID09PSAwKSBicmVhaztcclxuICAgICAgICAgIG5Jc09kZCA9IGkgJSAyO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBuID0gbi50aW1lcyhoYWxmKTtcclxuICAgICAgICAgIHJvdW5kKG4sIG4uZSArIDEsIDEpO1xyXG5cclxuICAgICAgICAgIGlmIChuLmUgPiAxNCkge1xyXG4gICAgICAgICAgICBuSXNPZGQgPSBpc09kZChuKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGkgPSArdmFsdWVPZihuKTtcclxuICAgICAgICAgICAgaWYgKGkgPT09IDApIGJyZWFrO1xyXG4gICAgICAgICAgICBuSXNPZGQgPSBpICUgMjtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHggPSB4LnRpbWVzKHgpO1xyXG5cclxuICAgICAgICBpZiAoaykge1xyXG4gICAgICAgICAgaWYgKHguYyAmJiB4LmMubGVuZ3RoID4gaykgeC5jLmxlbmd0aCA9IGs7XHJcbiAgICAgICAgfSBlbHNlIGlmIChpc01vZEV4cCkge1xyXG4gICAgICAgICAgeCA9IHgubW9kKG0pOyAgICAvL3ggPSB4Lm1pbnVzKGRpdih4LCBtLCAwLCBNT0RVTE9fTU9ERSkudGltZXMobSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGlzTW9kRXhwKSByZXR1cm4geTtcclxuICAgICAgaWYgKG5Jc05lZykgeSA9IE9ORS5kaXYoeSk7XHJcblxyXG4gICAgICByZXR1cm4gbSA/IHkubW9kKG0pIDogayA/IHJvdW5kKHksIFBPV19QUkVDSVNJT04sIFJPVU5ESU5HX01PREUsIG1vcmUpIDogeTtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBSZXR1cm4gYSBuZXcgQmlnTnVtYmVyIHdob3NlIHZhbHVlIGlzIHRoZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlciByb3VuZGVkIHRvIGFuIGludGVnZXJcclxuICAgICAqIHVzaW5nIHJvdW5kaW5nIG1vZGUgcm0sIG9yIFJPVU5ESU5HX01PREUgaWYgcm0gaXMgb21pdHRlZC5cclxuICAgICAqXHJcbiAgICAgKiBbcm1dIHtudW1iZXJ9IFJvdW5kaW5nIG1vZGUuIEludGVnZXIsIDAgdG8gOCBpbmNsdXNpdmUuXHJcbiAgICAgKlxyXG4gICAgICogJ1tCaWdOdW1iZXIgRXJyb3JdIEFyZ3VtZW50IHtub3QgYSBwcmltaXRpdmUgbnVtYmVyfG5vdCBhbiBpbnRlZ2VyfG91dCBvZiByYW5nZX06IHtybX0nXHJcbiAgICAgKi9cclxuICAgIFAuaW50ZWdlclZhbHVlID0gZnVuY3Rpb24gKHJtKSB7XHJcbiAgICAgIHZhciBuID0gbmV3IEJpZ051bWJlcih0aGlzKTtcclxuICAgICAgaWYgKHJtID09IG51bGwpIHJtID0gUk9VTkRJTkdfTU9ERTtcclxuICAgICAgZWxzZSBpbnRDaGVjayhybSwgMCwgOCk7XHJcbiAgICAgIHJldHVybiByb3VuZChuLCBuLmUgKyAxLCBybSk7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJuIHRydWUgaWYgdGhlIHZhbHVlIG9mIHRoaXMgQmlnTnVtYmVyIGlzIGVxdWFsIHRvIHRoZSB2YWx1ZSBvZiBCaWdOdW1iZXIoeSwgYiksXHJcbiAgICAgKiBvdGhlcndpc2UgcmV0dXJuIGZhbHNlLlxyXG4gICAgICovXHJcbiAgICBQLmlzRXF1YWxUbyA9IFAuZXEgPSBmdW5jdGlvbiAoeSwgYikge1xyXG4gICAgICByZXR1cm4gY29tcGFyZSh0aGlzLCBuZXcgQmlnTnVtYmVyKHksIGIpKSA9PT0gMDtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIgaXMgYSBmaW5pdGUgbnVtYmVyLCBvdGhlcndpc2UgcmV0dXJuIGZhbHNlLlxyXG4gICAgICovXHJcbiAgICBQLmlzRmluaXRlID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICByZXR1cm4gISF0aGlzLmM7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJuIHRydWUgaWYgdGhlIHZhbHVlIG9mIHRoaXMgQmlnTnVtYmVyIGlzIGdyZWF0ZXIgdGhhbiB0aGUgdmFsdWUgb2YgQmlnTnVtYmVyKHksIGIpLFxyXG4gICAgICogb3RoZXJ3aXNlIHJldHVybiBmYWxzZS5cclxuICAgICAqL1xyXG4gICAgUC5pc0dyZWF0ZXJUaGFuID0gUC5ndCA9IGZ1bmN0aW9uICh5LCBiKSB7XHJcbiAgICAgIHJldHVybiBjb21wYXJlKHRoaXMsIG5ldyBCaWdOdW1iZXIoeSwgYikpID4gMDtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIgaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHRoZSB2YWx1ZSBvZlxyXG4gICAgICogQmlnTnVtYmVyKHksIGIpLCBvdGhlcndpc2UgcmV0dXJuIGZhbHNlLlxyXG4gICAgICovXHJcbiAgICBQLmlzR3JlYXRlclRoYW5PckVxdWFsVG8gPSBQLmd0ZSA9IGZ1bmN0aW9uICh5LCBiKSB7XHJcbiAgICAgIHJldHVybiAoYiA9IGNvbXBhcmUodGhpcywgbmV3IEJpZ051bWJlcih5LCBiKSkpID09PSAxIHx8IGIgPT09IDA7XHJcblxyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIFJldHVybiB0cnVlIGlmIHRoZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlciBpcyBhbiBpbnRlZ2VyLCBvdGhlcndpc2UgcmV0dXJuIGZhbHNlLlxyXG4gICAgICovXHJcbiAgICBQLmlzSW50ZWdlciA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgcmV0dXJuICEhdGhpcy5jICYmIGJpdEZsb29yKHRoaXMuZSAvIExPR19CQVNFKSA+IHRoaXMuYy5sZW5ndGggLSAyO1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIFJldHVybiB0cnVlIGlmIHRoZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlciBpcyBsZXNzIHRoYW4gdGhlIHZhbHVlIG9mIEJpZ051bWJlcih5LCBiKSxcclxuICAgICAqIG90aGVyd2lzZSByZXR1cm4gZmFsc2UuXHJcbiAgICAgKi9cclxuICAgIFAuaXNMZXNzVGhhbiA9IFAubHQgPSBmdW5jdGlvbiAoeSwgYikge1xyXG4gICAgICByZXR1cm4gY29tcGFyZSh0aGlzLCBuZXcgQmlnTnVtYmVyKHksIGIpKSA8IDA7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJuIHRydWUgaWYgdGhlIHZhbHVlIG9mIHRoaXMgQmlnTnVtYmVyIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUgdmFsdWUgb2ZcclxuICAgICAqIEJpZ051bWJlcih5LCBiKSwgb3RoZXJ3aXNlIHJldHVybiBmYWxzZS5cclxuICAgICAqL1xyXG4gICAgUC5pc0xlc3NUaGFuT3JFcXVhbFRvID0gUC5sdGUgPSBmdW5jdGlvbiAoeSwgYikge1xyXG4gICAgICByZXR1cm4gKGIgPSBjb21wYXJlKHRoaXMsIG5ldyBCaWdOdW1iZXIoeSwgYikpKSA9PT0gLTEgfHwgYiA9PT0gMDtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIgaXMgTmFOLCBvdGhlcndpc2UgcmV0dXJuIGZhbHNlLlxyXG4gICAgICovXHJcbiAgICBQLmlzTmFOID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICByZXR1cm4gIXRoaXMucztcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIgaXMgbmVnYXRpdmUsIG90aGVyd2lzZSByZXR1cm4gZmFsc2UuXHJcbiAgICAgKi9cclxuICAgIFAuaXNOZWdhdGl2ZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgcmV0dXJuIHRoaXMucyA8IDA7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJuIHRydWUgaWYgdGhlIHZhbHVlIG9mIHRoaXMgQmlnTnVtYmVyIGlzIHBvc2l0aXZlLCBvdGhlcndpc2UgcmV0dXJuIGZhbHNlLlxyXG4gICAgICovXHJcbiAgICBQLmlzUG9zaXRpdmUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnMgPiAwO1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIFJldHVybiB0cnVlIGlmIHRoZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlciBpcyAwIG9yIC0wLCBvdGhlcndpc2UgcmV0dXJuIGZhbHNlLlxyXG4gICAgICovXHJcbiAgICBQLmlzWmVybyA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgcmV0dXJuICEhdGhpcy5jICYmIHRoaXMuY1swXSA9PSAwO1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqICBuIC0gMCA9IG5cclxuICAgICAqICBuIC0gTiA9IE5cclxuICAgICAqICBuIC0gSSA9IC1JXHJcbiAgICAgKiAgMCAtIG4gPSAtblxyXG4gICAgICogIDAgLSAwID0gMFxyXG4gICAgICogIDAgLSBOID0gTlxyXG4gICAgICogIDAgLSBJID0gLUlcclxuICAgICAqICBOIC0gbiA9IE5cclxuICAgICAqICBOIC0gMCA9IE5cclxuICAgICAqICBOIC0gTiA9IE5cclxuICAgICAqICBOIC0gSSA9IE5cclxuICAgICAqICBJIC0gbiA9IElcclxuICAgICAqICBJIC0gMCA9IElcclxuICAgICAqICBJIC0gTiA9IE5cclxuICAgICAqICBJIC0gSSA9IE5cclxuICAgICAqXHJcbiAgICAgKiBSZXR1cm4gYSBuZXcgQmlnTnVtYmVyIHdob3NlIHZhbHVlIGlzIHRoZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlciBtaW51cyB0aGUgdmFsdWUgb2ZcclxuICAgICAqIEJpZ051bWJlcih5LCBiKS5cclxuICAgICAqL1xyXG4gICAgUC5taW51cyA9IGZ1bmN0aW9uICh5LCBiKSB7XHJcbiAgICAgIHZhciBpLCBqLCB0LCB4TFR5LFxyXG4gICAgICAgIHggPSB0aGlzLFxyXG4gICAgICAgIGEgPSB4LnM7XHJcblxyXG4gICAgICB5ID0gbmV3IEJpZ051bWJlcih5LCBiKTtcclxuICAgICAgYiA9IHkucztcclxuXHJcbiAgICAgIC8vIEVpdGhlciBOYU4/XHJcbiAgICAgIGlmICghYSB8fCAhYikgcmV0dXJuIG5ldyBCaWdOdW1iZXIoTmFOKTtcclxuXHJcbiAgICAgIC8vIFNpZ25zIGRpZmZlcj9cclxuICAgICAgaWYgKGEgIT0gYikge1xyXG4gICAgICAgIHkucyA9IC1iO1xyXG4gICAgICAgIHJldHVybiB4LnBsdXMoeSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHZhciB4ZSA9IHguZSAvIExPR19CQVNFLFxyXG4gICAgICAgIHllID0geS5lIC8gTE9HX0JBU0UsXHJcbiAgICAgICAgeGMgPSB4LmMsXHJcbiAgICAgICAgeWMgPSB5LmM7XHJcblxyXG4gICAgICBpZiAoIXhlIHx8ICF5ZSkge1xyXG5cclxuICAgICAgICAvLyBFaXRoZXIgSW5maW5pdHk/XHJcbiAgICAgICAgaWYgKCF4YyB8fCAheWMpIHJldHVybiB4YyA/ICh5LnMgPSAtYiwgeSkgOiBuZXcgQmlnTnVtYmVyKHljID8geCA6IE5hTik7XHJcblxyXG4gICAgICAgIC8vIEVpdGhlciB6ZXJvP1xyXG4gICAgICAgIGlmICgheGNbMF0gfHwgIXljWzBdKSB7XHJcblxyXG4gICAgICAgICAgLy8gUmV0dXJuIHkgaWYgeSBpcyBub24temVybywgeCBpZiB4IGlzIG5vbi16ZXJvLCBvciB6ZXJvIGlmIGJvdGggYXJlIHplcm8uXHJcbiAgICAgICAgICByZXR1cm4geWNbMF0gPyAoeS5zID0gLWIsIHkpIDogbmV3IEJpZ051bWJlcih4Y1swXSA/IHggOlxyXG5cclxuICAgICAgICAgICAvLyBJRUVFIDc1NCAoMjAwOCkgNi4zOiBuIC0gbiA9IC0wIHdoZW4gcm91bmRpbmcgdG8gLUluZmluaXR5XHJcbiAgICAgICAgICAgUk9VTkRJTkdfTU9ERSA9PSAzID8gLTAgOiAwKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHhlID0gYml0Rmxvb3IoeGUpO1xyXG4gICAgICB5ZSA9IGJpdEZsb29yKHllKTtcclxuICAgICAgeGMgPSB4Yy5zbGljZSgpO1xyXG5cclxuICAgICAgLy8gRGV0ZXJtaW5lIHdoaWNoIGlzIHRoZSBiaWdnZXIgbnVtYmVyLlxyXG4gICAgICBpZiAoYSA9IHhlIC0geWUpIHtcclxuXHJcbiAgICAgICAgaWYgKHhMVHkgPSBhIDwgMCkge1xyXG4gICAgICAgICAgYSA9IC1hO1xyXG4gICAgICAgICAgdCA9IHhjO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB5ZSA9IHhlO1xyXG4gICAgICAgICAgdCA9IHljO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdC5yZXZlcnNlKCk7XHJcblxyXG4gICAgICAgIC8vIFByZXBlbmQgemVyb3MgdG8gZXF1YWxpc2UgZXhwb25lbnRzLlxyXG4gICAgICAgIGZvciAoYiA9IGE7IGItLTsgdC5wdXNoKDApKTtcclxuICAgICAgICB0LnJldmVyc2UoKTtcclxuICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgLy8gRXhwb25lbnRzIGVxdWFsLiBDaGVjayBkaWdpdCBieSBkaWdpdC5cclxuICAgICAgICBqID0gKHhMVHkgPSAoYSA9IHhjLmxlbmd0aCkgPCAoYiA9IHljLmxlbmd0aCkpID8gYSA6IGI7XHJcblxyXG4gICAgICAgIGZvciAoYSA9IGIgPSAwOyBiIDwgajsgYisrKSB7XHJcblxyXG4gICAgICAgICAgaWYgKHhjW2JdICE9IHljW2JdKSB7XHJcbiAgICAgICAgICAgIHhMVHkgPSB4Y1tiXSA8IHljW2JdO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIHggPCB5PyBQb2ludCB4YyB0byB0aGUgYXJyYXkgb2YgdGhlIGJpZ2dlciBudW1iZXIuXHJcbiAgICAgIGlmICh4TFR5KSB0ID0geGMsIHhjID0geWMsIHljID0gdCwgeS5zID0gLXkucztcclxuXHJcbiAgICAgIGIgPSAoaiA9IHljLmxlbmd0aCkgLSAoaSA9IHhjLmxlbmd0aCk7XHJcblxyXG4gICAgICAvLyBBcHBlbmQgemVyb3MgdG8geGMgaWYgc2hvcnRlci5cclxuICAgICAgLy8gTm8gbmVlZCB0byBhZGQgemVyb3MgdG8geWMgaWYgc2hvcnRlciBhcyBzdWJ0cmFjdCBvbmx5IG5lZWRzIHRvIHN0YXJ0IGF0IHljLmxlbmd0aC5cclxuICAgICAgaWYgKGIgPiAwKSBmb3IgKDsgYi0tOyB4Y1tpKytdID0gMCk7XHJcbiAgICAgIGIgPSBCQVNFIC0gMTtcclxuXHJcbiAgICAgIC8vIFN1YnRyYWN0IHljIGZyb20geGMuXHJcbiAgICAgIGZvciAoOyBqID4gYTspIHtcclxuXHJcbiAgICAgICAgaWYgKHhjWy0tal0gPCB5Y1tqXSkge1xyXG4gICAgICAgICAgZm9yIChpID0gajsgaSAmJiAheGNbLS1pXTsgeGNbaV0gPSBiKTtcclxuICAgICAgICAgIC0teGNbaV07XHJcbiAgICAgICAgICB4Y1tqXSArPSBCQVNFO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgeGNbal0gLT0geWNbal07XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIFJlbW92ZSBsZWFkaW5nIHplcm9zIGFuZCBhZGp1c3QgZXhwb25lbnQgYWNjb3JkaW5nbHkuXHJcbiAgICAgIGZvciAoOyB4Y1swXSA9PSAwOyB4Yy5zcGxpY2UoMCwgMSksIC0teWUpO1xyXG5cclxuICAgICAgLy8gWmVybz9cclxuICAgICAgaWYgKCF4Y1swXSkge1xyXG5cclxuICAgICAgICAvLyBGb2xsb3dpbmcgSUVFRSA3NTQgKDIwMDgpIDYuMyxcclxuICAgICAgICAvLyBuIC0gbiA9ICswICBidXQgIG4gLSBuID0gLTAgIHdoZW4gcm91bmRpbmcgdG93YXJkcyAtSW5maW5pdHkuXHJcbiAgICAgICAgeS5zID0gUk9VTkRJTkdfTU9ERSA9PSAzID8gLTEgOiAxO1xyXG4gICAgICAgIHkuYyA9IFt5LmUgPSAwXTtcclxuICAgICAgICByZXR1cm4geTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gTm8gbmVlZCB0byBjaGVjayBmb3IgSW5maW5pdHkgYXMgK3ggLSAreSAhPSBJbmZpbml0eSAmJiAteCAtIC15ICE9IEluZmluaXR5XHJcbiAgICAgIC8vIGZvciBmaW5pdGUgeCBhbmQgeS5cclxuICAgICAgcmV0dXJuIG5vcm1hbGlzZSh5LCB4YywgeWUpO1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqICAgbiAlIDAgPSAgTlxyXG4gICAgICogICBuICUgTiA9ICBOXHJcbiAgICAgKiAgIG4gJSBJID0gIG5cclxuICAgICAqICAgMCAlIG4gPSAgMFxyXG4gICAgICogIC0wICUgbiA9IC0wXHJcbiAgICAgKiAgIDAgJSAwID0gIE5cclxuICAgICAqICAgMCAlIE4gPSAgTlxyXG4gICAgICogICAwICUgSSA9ICAwXHJcbiAgICAgKiAgIE4gJSBuID0gIE5cclxuICAgICAqICAgTiAlIDAgPSAgTlxyXG4gICAgICogICBOICUgTiA9ICBOXHJcbiAgICAgKiAgIE4gJSBJID0gIE5cclxuICAgICAqICAgSSAlIG4gPSAgTlxyXG4gICAgICogICBJICUgMCA9ICBOXHJcbiAgICAgKiAgIEkgJSBOID0gIE5cclxuICAgICAqICAgSSAlIEkgPSAgTlxyXG4gICAgICpcclxuICAgICAqIFJldHVybiBhIG5ldyBCaWdOdW1iZXIgd2hvc2UgdmFsdWUgaXMgdGhlIHZhbHVlIG9mIHRoaXMgQmlnTnVtYmVyIG1vZHVsbyB0aGUgdmFsdWUgb2ZcclxuICAgICAqIEJpZ051bWJlcih5LCBiKS4gVGhlIHJlc3VsdCBkZXBlbmRzIG9uIHRoZSB2YWx1ZSBvZiBNT0RVTE9fTU9ERS5cclxuICAgICAqL1xyXG4gICAgUC5tb2R1bG8gPSBQLm1vZCA9IGZ1bmN0aW9uICh5LCBiKSB7XHJcbiAgICAgIHZhciBxLCBzLFxyXG4gICAgICAgIHggPSB0aGlzO1xyXG5cclxuICAgICAgeSA9IG5ldyBCaWdOdW1iZXIoeSwgYik7XHJcblxyXG4gICAgICAvLyBSZXR1cm4gTmFOIGlmIHggaXMgSW5maW5pdHkgb3IgTmFOLCBvciB5IGlzIE5hTiBvciB6ZXJvLlxyXG4gICAgICBpZiAoIXguYyB8fCAheS5zIHx8IHkuYyAmJiAheS5jWzBdKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBCaWdOdW1iZXIoTmFOKTtcclxuXHJcbiAgICAgIC8vIFJldHVybiB4IGlmIHkgaXMgSW5maW5pdHkgb3IgeCBpcyB6ZXJvLlxyXG4gICAgICB9IGVsc2UgaWYgKCF5LmMgfHwgeC5jICYmICF4LmNbMF0pIHtcclxuICAgICAgICByZXR1cm4gbmV3IEJpZ051bWJlcih4KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKE1PRFVMT19NT0RFID09IDkpIHtcclxuXHJcbiAgICAgICAgLy8gRXVjbGlkaWFuIGRpdmlzaW9uOiBxID0gc2lnbih5KSAqIGZsb29yKHggLyBhYnMoeSkpXHJcbiAgICAgICAgLy8gciA9IHggLSBxeSAgICB3aGVyZSAgMCA8PSByIDwgYWJzKHkpXHJcbiAgICAgICAgcyA9IHkucztcclxuICAgICAgICB5LnMgPSAxO1xyXG4gICAgICAgIHEgPSBkaXYoeCwgeSwgMCwgMyk7XHJcbiAgICAgICAgeS5zID0gcztcclxuICAgICAgICBxLnMgKj0gcztcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBxID0gZGl2KHgsIHksIDAsIE1PRFVMT19NT0RFKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgeSA9IHgubWludXMocS50aW1lcyh5KSk7XHJcblxyXG4gICAgICAvLyBUbyBtYXRjaCBKYXZhU2NyaXB0ICUsIGVuc3VyZSBzaWduIG9mIHplcm8gaXMgc2lnbiBvZiBkaXZpZGVuZC5cclxuICAgICAgaWYgKCF5LmNbMF0gJiYgTU9EVUxPX01PREUgPT0gMSkgeS5zID0geC5zO1xyXG5cclxuICAgICAgcmV0dXJuIHk7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogIG4gKiAwID0gMFxyXG4gICAgICogIG4gKiBOID0gTlxyXG4gICAgICogIG4gKiBJID0gSVxyXG4gICAgICogIDAgKiBuID0gMFxyXG4gICAgICogIDAgKiAwID0gMFxyXG4gICAgICogIDAgKiBOID0gTlxyXG4gICAgICogIDAgKiBJID0gTlxyXG4gICAgICogIE4gKiBuID0gTlxyXG4gICAgICogIE4gKiAwID0gTlxyXG4gICAgICogIE4gKiBOID0gTlxyXG4gICAgICogIE4gKiBJID0gTlxyXG4gICAgICogIEkgKiBuID0gSVxyXG4gICAgICogIEkgKiAwID0gTlxyXG4gICAgICogIEkgKiBOID0gTlxyXG4gICAgICogIEkgKiBJID0gSVxyXG4gICAgICpcclxuICAgICAqIFJldHVybiBhIG5ldyBCaWdOdW1iZXIgd2hvc2UgdmFsdWUgaXMgdGhlIHZhbHVlIG9mIHRoaXMgQmlnTnVtYmVyIG11bHRpcGxpZWQgYnkgdGhlIHZhbHVlXHJcbiAgICAgKiBvZiBCaWdOdW1iZXIoeSwgYikuXHJcbiAgICAgKi9cclxuICAgIFAubXVsdGlwbGllZEJ5ID0gUC50aW1lcyA9IGZ1bmN0aW9uICh5LCBiKSB7XHJcbiAgICAgIHZhciBjLCBlLCBpLCBqLCBrLCBtLCB4Y0wsIHhsbywgeGhpLCB5Y0wsIHlsbywgeWhpLCB6YyxcclxuICAgICAgICBiYXNlLCBzcXJ0QmFzZSxcclxuICAgICAgICB4ID0gdGhpcyxcclxuICAgICAgICB4YyA9IHguYyxcclxuICAgICAgICB5YyA9ICh5ID0gbmV3IEJpZ051bWJlcih5LCBiKSkuYztcclxuXHJcbiAgICAgIC8vIEVpdGhlciBOYU4sIMKxSW5maW5pdHkgb3IgwrEwP1xyXG4gICAgICBpZiAoIXhjIHx8ICF5YyB8fCAheGNbMF0gfHwgIXljWzBdKSB7XHJcblxyXG4gICAgICAgIC8vIFJldHVybiBOYU4gaWYgZWl0aGVyIGlzIE5hTiwgb3Igb25lIGlzIDAgYW5kIHRoZSBvdGhlciBpcyBJbmZpbml0eS5cclxuICAgICAgICBpZiAoIXgucyB8fCAheS5zIHx8IHhjICYmICF4Y1swXSAmJiAheWMgfHwgeWMgJiYgIXljWzBdICYmICF4Yykge1xyXG4gICAgICAgICAgeS5jID0geS5lID0geS5zID0gbnVsbDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgeS5zICo9IHgucztcclxuXHJcbiAgICAgICAgICAvLyBSZXR1cm4gwrFJbmZpbml0eSBpZiBlaXRoZXIgaXMgwrFJbmZpbml0eS5cclxuICAgICAgICAgIGlmICgheGMgfHwgIXljKSB7XHJcbiAgICAgICAgICAgIHkuYyA9IHkuZSA9IG51bGw7XHJcblxyXG4gICAgICAgICAgLy8gUmV0dXJuIMKxMCBpZiBlaXRoZXIgaXMgwrEwLlxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgeS5jID0gWzBdO1xyXG4gICAgICAgICAgICB5LmUgPSAwO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGUgPSBiaXRGbG9vcih4LmUgLyBMT0dfQkFTRSkgKyBiaXRGbG9vcih5LmUgLyBMT0dfQkFTRSk7XHJcbiAgICAgIHkucyAqPSB4LnM7XHJcbiAgICAgIHhjTCA9IHhjLmxlbmd0aDtcclxuICAgICAgeWNMID0geWMubGVuZ3RoO1xyXG5cclxuICAgICAgLy8gRW5zdXJlIHhjIHBvaW50cyB0byBsb25nZXIgYXJyYXkgYW5kIHhjTCB0byBpdHMgbGVuZ3RoLlxyXG4gICAgICBpZiAoeGNMIDwgeWNMKSB6YyA9IHhjLCB4YyA9IHljLCB5YyA9IHpjLCBpID0geGNMLCB4Y0wgPSB5Y0wsIHljTCA9IGk7XHJcblxyXG4gICAgICAvLyBJbml0aWFsaXNlIHRoZSByZXN1bHQgYXJyYXkgd2l0aCB6ZXJvcy5cclxuICAgICAgZm9yIChpID0geGNMICsgeWNMLCB6YyA9IFtdOyBpLS07IHpjLnB1c2goMCkpO1xyXG5cclxuICAgICAgYmFzZSA9IEJBU0U7XHJcbiAgICAgIHNxcnRCYXNlID0gU1FSVF9CQVNFO1xyXG5cclxuICAgICAgZm9yIChpID0geWNMOyAtLWkgPj0gMDspIHtcclxuICAgICAgICBjID0gMDtcclxuICAgICAgICB5bG8gPSB5Y1tpXSAlIHNxcnRCYXNlO1xyXG4gICAgICAgIHloaSA9IHljW2ldIC8gc3FydEJhc2UgfCAwO1xyXG5cclxuICAgICAgICBmb3IgKGsgPSB4Y0wsIGogPSBpICsgazsgaiA+IGk7KSB7XHJcbiAgICAgICAgICB4bG8gPSB4Y1stLWtdICUgc3FydEJhc2U7XHJcbiAgICAgICAgICB4aGkgPSB4Y1trXSAvIHNxcnRCYXNlIHwgMDtcclxuICAgICAgICAgIG0gPSB5aGkgKiB4bG8gKyB4aGkgKiB5bG87XHJcbiAgICAgICAgICB4bG8gPSB5bG8gKiB4bG8gKyAoKG0gJSBzcXJ0QmFzZSkgKiBzcXJ0QmFzZSkgKyB6Y1tqXSArIGM7XHJcbiAgICAgICAgICBjID0gKHhsbyAvIGJhc2UgfCAwKSArIChtIC8gc3FydEJhc2UgfCAwKSArIHloaSAqIHhoaTtcclxuICAgICAgICAgIHpjW2otLV0gPSB4bG8gJSBiYXNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgemNbal0gPSBjO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoYykge1xyXG4gICAgICAgICsrZTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB6Yy5zcGxpY2UoMCwgMSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBub3JtYWxpc2UoeSwgemMsIGUpO1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIFJldHVybiBhIG5ldyBCaWdOdW1iZXIgd2hvc2UgdmFsdWUgaXMgdGhlIHZhbHVlIG9mIHRoaXMgQmlnTnVtYmVyIG5lZ2F0ZWQsXHJcbiAgICAgKiBpLmUuIG11bHRpcGxpZWQgYnkgLTEuXHJcbiAgICAgKi9cclxuICAgIFAubmVnYXRlZCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgdmFyIHggPSBuZXcgQmlnTnVtYmVyKHRoaXMpO1xyXG4gICAgICB4LnMgPSAteC5zIHx8IG51bGw7XHJcbiAgICAgIHJldHVybiB4O1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqICBuICsgMCA9IG5cclxuICAgICAqICBuICsgTiA9IE5cclxuICAgICAqICBuICsgSSA9IElcclxuICAgICAqICAwICsgbiA9IG5cclxuICAgICAqICAwICsgMCA9IDBcclxuICAgICAqICAwICsgTiA9IE5cclxuICAgICAqICAwICsgSSA9IElcclxuICAgICAqICBOICsgbiA9IE5cclxuICAgICAqICBOICsgMCA9IE5cclxuICAgICAqICBOICsgTiA9IE5cclxuICAgICAqICBOICsgSSA9IE5cclxuICAgICAqICBJICsgbiA9IElcclxuICAgICAqICBJICsgMCA9IElcclxuICAgICAqICBJICsgTiA9IE5cclxuICAgICAqICBJICsgSSA9IElcclxuICAgICAqXHJcbiAgICAgKiBSZXR1cm4gYSBuZXcgQmlnTnVtYmVyIHdob3NlIHZhbHVlIGlzIHRoZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlciBwbHVzIHRoZSB2YWx1ZSBvZlxyXG4gICAgICogQmlnTnVtYmVyKHksIGIpLlxyXG4gICAgICovXHJcbiAgICBQLnBsdXMgPSBmdW5jdGlvbiAoeSwgYikge1xyXG4gICAgICB2YXIgdCxcclxuICAgICAgICB4ID0gdGhpcyxcclxuICAgICAgICBhID0geC5zO1xyXG5cclxuICAgICAgeSA9IG5ldyBCaWdOdW1iZXIoeSwgYik7XHJcbiAgICAgIGIgPSB5LnM7XHJcblxyXG4gICAgICAvLyBFaXRoZXIgTmFOP1xyXG4gICAgICBpZiAoIWEgfHwgIWIpIHJldHVybiBuZXcgQmlnTnVtYmVyKE5hTik7XHJcblxyXG4gICAgICAvLyBTaWducyBkaWZmZXI/XHJcbiAgICAgICBpZiAoYSAhPSBiKSB7XHJcbiAgICAgICAgeS5zID0gLWI7XHJcbiAgICAgICAgcmV0dXJuIHgubWludXMoeSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHZhciB4ZSA9IHguZSAvIExPR19CQVNFLFxyXG4gICAgICAgIHllID0geS5lIC8gTE9HX0JBU0UsXHJcbiAgICAgICAgeGMgPSB4LmMsXHJcbiAgICAgICAgeWMgPSB5LmM7XHJcblxyXG4gICAgICBpZiAoIXhlIHx8ICF5ZSkge1xyXG5cclxuICAgICAgICAvLyBSZXR1cm4gwrFJbmZpbml0eSBpZiBlaXRoZXIgwrFJbmZpbml0eS5cclxuICAgICAgICBpZiAoIXhjIHx8ICF5YykgcmV0dXJuIG5ldyBCaWdOdW1iZXIoYSAvIDApO1xyXG5cclxuICAgICAgICAvLyBFaXRoZXIgemVybz9cclxuICAgICAgICAvLyBSZXR1cm4geSBpZiB5IGlzIG5vbi16ZXJvLCB4IGlmIHggaXMgbm9uLXplcm8sIG9yIHplcm8gaWYgYm90aCBhcmUgemVyby5cclxuICAgICAgICBpZiAoIXhjWzBdIHx8ICF5Y1swXSkgcmV0dXJuIHljWzBdID8geSA6IG5ldyBCaWdOdW1iZXIoeGNbMF0gPyB4IDogYSAqIDApO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB4ZSA9IGJpdEZsb29yKHhlKTtcclxuICAgICAgeWUgPSBiaXRGbG9vcih5ZSk7XHJcbiAgICAgIHhjID0geGMuc2xpY2UoKTtcclxuXHJcbiAgICAgIC8vIFByZXBlbmQgemVyb3MgdG8gZXF1YWxpc2UgZXhwb25lbnRzLiBGYXN0ZXIgdG8gdXNlIHJldmVyc2UgdGhlbiBkbyB1bnNoaWZ0cy5cclxuICAgICAgaWYgKGEgPSB4ZSAtIHllKSB7XHJcbiAgICAgICAgaWYgKGEgPiAwKSB7XHJcbiAgICAgICAgICB5ZSA9IHhlO1xyXG4gICAgICAgICAgdCA9IHljO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBhID0gLWE7XHJcbiAgICAgICAgICB0ID0geGM7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0LnJldmVyc2UoKTtcclxuICAgICAgICBmb3IgKDsgYS0tOyB0LnB1c2goMCkpO1xyXG4gICAgICAgIHQucmV2ZXJzZSgpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBhID0geGMubGVuZ3RoO1xyXG4gICAgICBiID0geWMubGVuZ3RoO1xyXG5cclxuICAgICAgLy8gUG9pbnQgeGMgdG8gdGhlIGxvbmdlciBhcnJheSwgYW5kIGIgdG8gdGhlIHNob3J0ZXIgbGVuZ3RoLlxyXG4gICAgICBpZiAoYSAtIGIgPCAwKSB0ID0geWMsIHljID0geGMsIHhjID0gdCwgYiA9IGE7XHJcblxyXG4gICAgICAvLyBPbmx5IHN0YXJ0IGFkZGluZyBhdCB5Yy5sZW5ndGggLSAxIGFzIHRoZSBmdXJ0aGVyIGRpZ2l0cyBvZiB4YyBjYW4gYmUgaWdub3JlZC5cclxuICAgICAgZm9yIChhID0gMDsgYjspIHtcclxuICAgICAgICBhID0gKHhjWy0tYl0gPSB4Y1tiXSArIHljW2JdICsgYSkgLyBCQVNFIHwgMDtcclxuICAgICAgICB4Y1tiXSA9IEJBU0UgPT09IHhjW2JdID8gMCA6IHhjW2JdICUgQkFTRTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGEpIHtcclxuICAgICAgICB4YyA9IFthXS5jb25jYXQoeGMpO1xyXG4gICAgICAgICsreWU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIE5vIG5lZWQgdG8gY2hlY2sgZm9yIHplcm8sIGFzICt4ICsgK3kgIT0gMCAmJiAteCArIC15ICE9IDBcclxuICAgICAgLy8geWUgPSBNQVhfRVhQICsgMSBwb3NzaWJsZVxyXG4gICAgICByZXR1cm4gbm9ybWFsaXNlKHksIHhjLCB5ZSk7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogSWYgc2QgaXMgdW5kZWZpbmVkIG9yIG51bGwgb3IgdHJ1ZSBvciBmYWxzZSwgcmV0dXJuIHRoZSBudW1iZXIgb2Ygc2lnbmlmaWNhbnQgZGlnaXRzIG9mXHJcbiAgICAgKiB0aGUgdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIsIG9yIG51bGwgaWYgdGhlIHZhbHVlIG9mIHRoaXMgQmlnTnVtYmVyIGlzIMKxSW5maW5pdHkgb3IgTmFOLlxyXG4gICAgICogSWYgc2QgaXMgdHJ1ZSBpbmNsdWRlIGludGVnZXItcGFydCB0cmFpbGluZyB6ZXJvcyBpbiB0aGUgY291bnQuXHJcbiAgICAgKlxyXG4gICAgICogT3RoZXJ3aXNlLCBpZiBzZCBpcyBhIG51bWJlciwgcmV0dXJuIGEgbmV3IEJpZ051bWJlciB3aG9zZSB2YWx1ZSBpcyB0aGUgdmFsdWUgb2YgdGhpc1xyXG4gICAgICogQmlnTnVtYmVyIHJvdW5kZWQgdG8gYSBtYXhpbXVtIG9mIHNkIHNpZ25pZmljYW50IGRpZ2l0cyB1c2luZyByb3VuZGluZyBtb2RlIHJtLCBvclxyXG4gICAgICogUk9VTkRJTkdfTU9ERSBpZiBybSBpcyBvbWl0dGVkLlxyXG4gICAgICpcclxuICAgICAqIHNkIHtudW1iZXJ8Ym9vbGVhbn0gbnVtYmVyOiBzaWduaWZpY2FudCBkaWdpdHM6IGludGVnZXIsIDEgdG8gTUFYIGluY2x1c2l2ZS5cclxuICAgICAqICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbjogd2hldGhlciB0byBjb3VudCBpbnRlZ2VyLXBhcnQgdHJhaWxpbmcgemVyb3M6IHRydWUgb3IgZmFsc2UuXHJcbiAgICAgKiBbcm1dIHtudW1iZXJ9IFJvdW5kaW5nIG1vZGUuIEludGVnZXIsIDAgdG8gOCBpbmNsdXNpdmUuXHJcbiAgICAgKlxyXG4gICAgICogJ1tCaWdOdW1iZXIgRXJyb3JdIEFyZ3VtZW50IHtub3QgYSBwcmltaXRpdmUgbnVtYmVyfG5vdCBhbiBpbnRlZ2VyfG91dCBvZiByYW5nZX06IHtzZHxybX0nXHJcbiAgICAgKi9cclxuICAgIFAucHJlY2lzaW9uID0gUC5zZCA9IGZ1bmN0aW9uIChzZCwgcm0pIHtcclxuICAgICAgdmFyIGMsIG4sIHYsXHJcbiAgICAgICAgeCA9IHRoaXM7XHJcblxyXG4gICAgICBpZiAoc2QgIT0gbnVsbCAmJiBzZCAhPT0gISFzZCkge1xyXG4gICAgICAgIGludENoZWNrKHNkLCAxLCBNQVgpO1xyXG4gICAgICAgIGlmIChybSA9PSBudWxsKSBybSA9IFJPVU5ESU5HX01PREU7XHJcbiAgICAgICAgZWxzZSBpbnRDaGVjayhybSwgMCwgOCk7XHJcblxyXG4gICAgICAgIHJldHVybiByb3VuZChuZXcgQmlnTnVtYmVyKHgpLCBzZCwgcm0pO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoIShjID0geC5jKSkgcmV0dXJuIG51bGw7XHJcbiAgICAgIHYgPSBjLmxlbmd0aCAtIDE7XHJcbiAgICAgIG4gPSB2ICogTE9HX0JBU0UgKyAxO1xyXG5cclxuICAgICAgaWYgKHYgPSBjW3ZdKSB7XHJcblxyXG4gICAgICAgIC8vIFN1YnRyYWN0IHRoZSBudW1iZXIgb2YgdHJhaWxpbmcgemVyb3Mgb2YgdGhlIGxhc3QgZWxlbWVudC5cclxuICAgICAgICBmb3IgKDsgdiAlIDEwID09IDA7IHYgLz0gMTAsIG4tLSk7XHJcblxyXG4gICAgICAgIC8vIEFkZCB0aGUgbnVtYmVyIG9mIGRpZ2l0cyBvZiB0aGUgZmlyc3QgZWxlbWVudC5cclxuICAgICAgICBmb3IgKHYgPSBjWzBdOyB2ID49IDEwOyB2IC89IDEwLCBuKyspO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoc2QgJiYgeC5lICsgMSA+IG4pIG4gPSB4LmUgKyAxO1xyXG5cclxuICAgICAgcmV0dXJuIG47XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJuIGEgbmV3IEJpZ051bWJlciB3aG9zZSB2YWx1ZSBpcyB0aGUgdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIgc2hpZnRlZCBieSBrIHBsYWNlc1xyXG4gICAgICogKHBvd2VycyBvZiAxMCkuIFNoaWZ0IHRvIHRoZSByaWdodCBpZiBuID4gMCwgYW5kIHRvIHRoZSBsZWZ0IGlmIG4gPCAwLlxyXG4gICAgICpcclxuICAgICAqIGsge251bWJlcn0gSW50ZWdlciwgLU1BWF9TQUZFX0lOVEVHRVIgdG8gTUFYX1NBRkVfSU5URUdFUiBpbmNsdXNpdmUuXHJcbiAgICAgKlxyXG4gICAgICogJ1tCaWdOdW1iZXIgRXJyb3JdIEFyZ3VtZW50IHtub3QgYSBwcmltaXRpdmUgbnVtYmVyfG5vdCBhbiBpbnRlZ2VyfG91dCBvZiByYW5nZX06IHtrfSdcclxuICAgICAqL1xyXG4gICAgUC5zaGlmdGVkQnkgPSBmdW5jdGlvbiAoaykge1xyXG4gICAgICBpbnRDaGVjayhrLCAtTUFYX1NBRkVfSU5URUdFUiwgTUFYX1NBRkVfSU5URUdFUik7XHJcbiAgICAgIHJldHVybiB0aGlzLnRpbWVzKCcxZScgKyBrKTtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiAgc3FydCgtbikgPSAgTlxyXG4gICAgICogIHNxcnQoTikgPSAgTlxyXG4gICAgICogIHNxcnQoLUkpID0gIE5cclxuICAgICAqICBzcXJ0KEkpID0gIElcclxuICAgICAqICBzcXJ0KDApID0gIDBcclxuICAgICAqICBzcXJ0KC0wKSA9IC0wXHJcbiAgICAgKlxyXG4gICAgICogUmV0dXJuIGEgbmV3IEJpZ051bWJlciB3aG9zZSB2YWx1ZSBpcyB0aGUgc3F1YXJlIHJvb3Qgb2YgdGhlIHZhbHVlIG9mIHRoaXMgQmlnTnVtYmVyLFxyXG4gICAgICogcm91bmRlZCBhY2NvcmRpbmcgdG8gREVDSU1BTF9QTEFDRVMgYW5kIFJPVU5ESU5HX01PREUuXHJcbiAgICAgKi9cclxuICAgIFAuc3F1YXJlUm9vdCA9IFAuc3FydCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgdmFyIG0sIG4sIHIsIHJlcCwgdCxcclxuICAgICAgICB4ID0gdGhpcyxcclxuICAgICAgICBjID0geC5jLFxyXG4gICAgICAgIHMgPSB4LnMsXHJcbiAgICAgICAgZSA9IHguZSxcclxuICAgICAgICBkcCA9IERFQ0lNQUxfUExBQ0VTICsgNCxcclxuICAgICAgICBoYWxmID0gbmV3IEJpZ051bWJlcignMC41Jyk7XHJcblxyXG4gICAgICAvLyBOZWdhdGl2ZS9OYU4vSW5maW5pdHkvemVybz9cclxuICAgICAgaWYgKHMgIT09IDEgfHwgIWMgfHwgIWNbMF0pIHtcclxuICAgICAgICByZXR1cm4gbmV3IEJpZ051bWJlcighcyB8fCBzIDwgMCAmJiAoIWMgfHwgY1swXSkgPyBOYU4gOiBjID8geCA6IDEgLyAwKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gSW5pdGlhbCBlc3RpbWF0ZS5cclxuICAgICAgcyA9IE1hdGguc3FydCgrdmFsdWVPZih4KSk7XHJcblxyXG4gICAgICAvLyBNYXRoLnNxcnQgdW5kZXJmbG93L292ZXJmbG93P1xyXG4gICAgICAvLyBQYXNzIHggdG8gTWF0aC5zcXJ0IGFzIGludGVnZXIsIHRoZW4gYWRqdXN0IHRoZSBleHBvbmVudCBvZiB0aGUgcmVzdWx0LlxyXG4gICAgICBpZiAocyA9PSAwIHx8IHMgPT0gMSAvIDApIHtcclxuICAgICAgICBuID0gY29lZmZUb1N0cmluZyhjKTtcclxuICAgICAgICBpZiAoKG4ubGVuZ3RoICsgZSkgJSAyID09IDApIG4gKz0gJzAnO1xyXG4gICAgICAgIHMgPSBNYXRoLnNxcnQoK24pO1xyXG4gICAgICAgIGUgPSBiaXRGbG9vcigoZSArIDEpIC8gMikgLSAoZSA8IDAgfHwgZSAlIDIpO1xyXG5cclxuICAgICAgICBpZiAocyA9PSAxIC8gMCkge1xyXG4gICAgICAgICAgbiA9ICc1ZScgKyBlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBuID0gcy50b0V4cG9uZW50aWFsKCk7XHJcbiAgICAgICAgICBuID0gbi5zbGljZSgwLCBuLmluZGV4T2YoJ2UnKSArIDEpICsgZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHIgPSBuZXcgQmlnTnVtYmVyKG4pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHIgPSBuZXcgQmlnTnVtYmVyKHMgKyAnJyk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIENoZWNrIGZvciB6ZXJvLlxyXG4gICAgICAvLyByIGNvdWxkIGJlIHplcm8gaWYgTUlOX0VYUCBpcyBjaGFuZ2VkIGFmdGVyIHRoZSB0aGlzIHZhbHVlIHdhcyBjcmVhdGVkLlxyXG4gICAgICAvLyBUaGlzIHdvdWxkIGNhdXNlIGEgZGl2aXNpb24gYnkgemVybyAoeC90KSBhbmQgaGVuY2UgSW5maW5pdHkgYmVsb3csIHdoaWNoIHdvdWxkIGNhdXNlXHJcbiAgICAgIC8vIGNvZWZmVG9TdHJpbmcgdG8gdGhyb3cuXHJcbiAgICAgIGlmIChyLmNbMF0pIHtcclxuICAgICAgICBlID0gci5lO1xyXG4gICAgICAgIHMgPSBlICsgZHA7XHJcbiAgICAgICAgaWYgKHMgPCAzKSBzID0gMDtcclxuXHJcbiAgICAgICAgLy8gTmV3dG9uLVJhcGhzb24gaXRlcmF0aW9uLlxyXG4gICAgICAgIGZvciAoOyA7KSB7XHJcbiAgICAgICAgICB0ID0gcjtcclxuICAgICAgICAgIHIgPSBoYWxmLnRpbWVzKHQucGx1cyhkaXYoeCwgdCwgZHAsIDEpKSk7XHJcblxyXG4gICAgICAgICAgaWYgKGNvZWZmVG9TdHJpbmcodC5jKS5zbGljZSgwLCBzKSA9PT0gKG4gPSBjb2VmZlRvU3RyaW5nKHIuYykpLnNsaWNlKDAsIHMpKSB7XHJcblxyXG4gICAgICAgICAgICAvLyBUaGUgZXhwb25lbnQgb2YgciBtYXkgaGVyZSBiZSBvbmUgbGVzcyB0aGFuIHRoZSBmaW5hbCByZXN1bHQgZXhwb25lbnQsXHJcbiAgICAgICAgICAgIC8vIGUuZyAwLjAwMDk5OTkgKGUtNCkgLS0+IDAuMDAxIChlLTMpLCBzbyBhZGp1c3QgcyBzbyB0aGUgcm91bmRpbmcgZGlnaXRzXHJcbiAgICAgICAgICAgIC8vIGFyZSBpbmRleGVkIGNvcnJlY3RseS5cclxuICAgICAgICAgICAgaWYgKHIuZSA8IGUpIC0tcztcclxuICAgICAgICAgICAgbiA9IG4uc2xpY2UocyAtIDMsIHMgKyAxKTtcclxuXHJcbiAgICAgICAgICAgIC8vIFRoZSA0dGggcm91bmRpbmcgZGlnaXQgbWF5IGJlIGluIGVycm9yIGJ5IC0xIHNvIGlmIHRoZSA0IHJvdW5kaW5nIGRpZ2l0c1xyXG4gICAgICAgICAgICAvLyBhcmUgOTk5OSBvciA0OTk5IChpLmUuIGFwcHJvYWNoaW5nIGEgcm91bmRpbmcgYm91bmRhcnkpIGNvbnRpbnVlIHRoZVxyXG4gICAgICAgICAgICAvLyBpdGVyYXRpb24uXHJcbiAgICAgICAgICAgIGlmIChuID09ICc5OTk5JyB8fCAhcmVwICYmIG4gPT0gJzQ5OTknKSB7XHJcblxyXG4gICAgICAgICAgICAgIC8vIE9uIHRoZSBmaXJzdCBpdGVyYXRpb24gb25seSwgY2hlY2sgdG8gc2VlIGlmIHJvdW5kaW5nIHVwIGdpdmVzIHRoZVxyXG4gICAgICAgICAgICAgIC8vIGV4YWN0IHJlc3VsdCBhcyB0aGUgbmluZXMgbWF5IGluZmluaXRlbHkgcmVwZWF0LlxyXG4gICAgICAgICAgICAgIGlmICghcmVwKSB7XHJcbiAgICAgICAgICAgICAgICByb3VuZCh0LCB0LmUgKyBERUNJTUFMX1BMQUNFUyArIDIsIDApO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmICh0LnRpbWVzKHQpLmVxKHgpKSB7XHJcbiAgICAgICAgICAgICAgICAgIHIgPSB0O1xyXG4gICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgIGRwICs9IDQ7XHJcbiAgICAgICAgICAgICAgcyArPSA0O1xyXG4gICAgICAgICAgICAgIHJlcCA9IDE7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgICAgICAgIC8vIElmIHJvdW5kaW5nIGRpZ2l0cyBhcmUgbnVsbCwgMHswLDR9IG9yIDUwezAsM30sIGNoZWNrIGZvciBleGFjdFxyXG4gICAgICAgICAgICAgIC8vIHJlc3VsdC4gSWYgbm90LCB0aGVuIHRoZXJlIGFyZSBmdXJ0aGVyIGRpZ2l0cyBhbmQgbSB3aWxsIGJlIHRydXRoeS5cclxuICAgICAgICAgICAgICBpZiAoIStuIHx8ICErbi5zbGljZSgxKSAmJiBuLmNoYXJBdCgwKSA9PSAnNScpIHtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBUcnVuY2F0ZSB0byB0aGUgZmlyc3Qgcm91bmRpbmcgZGlnaXQuXHJcbiAgICAgICAgICAgICAgICByb3VuZChyLCByLmUgKyBERUNJTUFMX1BMQUNFUyArIDIsIDEpO1xyXG4gICAgICAgICAgICAgICAgbSA9ICFyLnRpbWVzKHIpLmVxKHgpO1xyXG4gICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiByb3VuZChyLCByLmUgKyBERUNJTUFMX1BMQUNFUyArIDEsIFJPVU5ESU5HX01PREUsIG0pO1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIFJldHVybiBhIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIHZhbHVlIG9mIHRoaXMgQmlnTnVtYmVyIGluIGV4cG9uZW50aWFsIG5vdGF0aW9uIGFuZFxyXG4gICAgICogcm91bmRlZCB1c2luZyBST1VORElOR19NT0RFIHRvIGRwIGZpeGVkIGRlY2ltYWwgcGxhY2VzLlxyXG4gICAgICpcclxuICAgICAqIFtkcF0ge251bWJlcn0gRGVjaW1hbCBwbGFjZXMuIEludGVnZXIsIDAgdG8gTUFYIGluY2x1c2l2ZS5cclxuICAgICAqIFtybV0ge251bWJlcn0gUm91bmRpbmcgbW9kZS4gSW50ZWdlciwgMCB0byA4IGluY2x1c2l2ZS5cclxuICAgICAqXHJcbiAgICAgKiAnW0JpZ051bWJlciBFcnJvcl0gQXJndW1lbnQge25vdCBhIHByaW1pdGl2ZSBudW1iZXJ8bm90IGFuIGludGVnZXJ8b3V0IG9mIHJhbmdlfToge2RwfHJtfSdcclxuICAgICAqL1xyXG4gICAgUC50b0V4cG9uZW50aWFsID0gZnVuY3Rpb24gKGRwLCBybSkge1xyXG4gICAgICBpZiAoZHAgIT0gbnVsbCkge1xyXG4gICAgICAgIGludENoZWNrKGRwLCAwLCBNQVgpO1xyXG4gICAgICAgIGRwKys7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGZvcm1hdCh0aGlzLCBkcCwgcm0sIDEpO1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIFJldHVybiBhIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIHZhbHVlIG9mIHRoaXMgQmlnTnVtYmVyIGluIGZpeGVkLXBvaW50IG5vdGF0aW9uIHJvdW5kaW5nXHJcbiAgICAgKiB0byBkcCBmaXhlZCBkZWNpbWFsIHBsYWNlcyB1c2luZyByb3VuZGluZyBtb2RlIHJtLCBvciBST1VORElOR19NT0RFIGlmIHJtIGlzIG9taXR0ZWQuXHJcbiAgICAgKlxyXG4gICAgICogTm90ZTogYXMgd2l0aCBKYXZhU2NyaXB0J3MgbnVtYmVyIHR5cGUsICgtMCkudG9GaXhlZCgwKSBpcyAnMCcsXHJcbiAgICAgKiBidXQgZS5nLiAoLTAuMDAwMDEpLnRvRml4ZWQoMCkgaXMgJy0wJy5cclxuICAgICAqXHJcbiAgICAgKiBbZHBdIHtudW1iZXJ9IERlY2ltYWwgcGxhY2VzLiBJbnRlZ2VyLCAwIHRvIE1BWCBpbmNsdXNpdmUuXHJcbiAgICAgKiBbcm1dIHtudW1iZXJ9IFJvdW5kaW5nIG1vZGUuIEludGVnZXIsIDAgdG8gOCBpbmNsdXNpdmUuXHJcbiAgICAgKlxyXG4gICAgICogJ1tCaWdOdW1iZXIgRXJyb3JdIEFyZ3VtZW50IHtub3QgYSBwcmltaXRpdmUgbnVtYmVyfG5vdCBhbiBpbnRlZ2VyfG91dCBvZiByYW5nZX06IHtkcHxybX0nXHJcbiAgICAgKi9cclxuICAgIFAudG9GaXhlZCA9IGZ1bmN0aW9uIChkcCwgcm0pIHtcclxuICAgICAgaWYgKGRwICE9IG51bGwpIHtcclxuICAgICAgICBpbnRDaGVjayhkcCwgMCwgTUFYKTtcclxuICAgICAgICBkcCA9IGRwICsgdGhpcy5lICsgMTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gZm9ybWF0KHRoaXMsIGRwLCBybSk7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJuIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIgaW4gZml4ZWQtcG9pbnQgbm90YXRpb24gcm91bmRlZFxyXG4gICAgICogdXNpbmcgcm0gb3IgUk9VTkRJTkdfTU9ERSB0byBkcCBkZWNpbWFsIHBsYWNlcywgYW5kIGZvcm1hdHRlZCBhY2NvcmRpbmcgdG8gdGhlIHByb3BlcnRpZXNcclxuICAgICAqIG9mIHRoZSBmb3JtYXQgb3IgRk9STUFUIG9iamVjdCAoc2VlIEJpZ051bWJlci5zZXQpLlxyXG4gICAgICpcclxuICAgICAqIFRoZSBmb3JtYXR0aW5nIG9iamVjdCBtYXkgY29udGFpbiBzb21lIG9yIGFsbCBvZiB0aGUgcHJvcGVydGllcyBzaG93biBiZWxvdy5cclxuICAgICAqXHJcbiAgICAgKiBGT1JNQVQgPSB7XHJcbiAgICAgKiAgIHByZWZpeDogJycsXHJcbiAgICAgKiAgIGdyb3VwU2l6ZTogMyxcclxuICAgICAqICAgc2Vjb25kYXJ5R3JvdXBTaXplOiAwLFxyXG4gICAgICogICBncm91cFNlcGFyYXRvcjogJywnLFxyXG4gICAgICogICBkZWNpbWFsU2VwYXJhdG9yOiAnLicsXHJcbiAgICAgKiAgIGZyYWN0aW9uR3JvdXBTaXplOiAwLFxyXG4gICAgICogICBmcmFjdGlvbkdyb3VwU2VwYXJhdG9yOiAnXFx4QTAnLCAgICAgIC8vIG5vbi1icmVha2luZyBzcGFjZVxyXG4gICAgICogICBzdWZmaXg6ICcnXHJcbiAgICAgKiB9O1xyXG4gICAgICpcclxuICAgICAqIFtkcF0ge251bWJlcn0gRGVjaW1hbCBwbGFjZXMuIEludGVnZXIsIDAgdG8gTUFYIGluY2x1c2l2ZS5cclxuICAgICAqIFtybV0ge251bWJlcn0gUm91bmRpbmcgbW9kZS4gSW50ZWdlciwgMCB0byA4IGluY2x1c2l2ZS5cclxuICAgICAqIFtmb3JtYXRdIHtvYmplY3R9IEZvcm1hdHRpbmcgb3B0aW9ucy4gU2VlIEZPUk1BVCBwYmplY3QgYWJvdmUuXHJcbiAgICAgKlxyXG4gICAgICogJ1tCaWdOdW1iZXIgRXJyb3JdIEFyZ3VtZW50IHtub3QgYSBwcmltaXRpdmUgbnVtYmVyfG5vdCBhbiBpbnRlZ2VyfG91dCBvZiByYW5nZX06IHtkcHxybX0nXHJcbiAgICAgKiAnW0JpZ051bWJlciBFcnJvcl0gQXJndW1lbnQgbm90IGFuIG9iamVjdDoge2Zvcm1hdH0nXHJcbiAgICAgKi9cclxuICAgIFAudG9Gb3JtYXQgPSBmdW5jdGlvbiAoZHAsIHJtLCBmb3JtYXQpIHtcclxuICAgICAgdmFyIHN0cixcclxuICAgICAgICB4ID0gdGhpcztcclxuXHJcbiAgICAgIGlmIChmb3JtYXQgPT0gbnVsbCkge1xyXG4gICAgICAgIGlmIChkcCAhPSBudWxsICYmIHJtICYmIHR5cGVvZiBybSA9PSAnb2JqZWN0Jykge1xyXG4gICAgICAgICAgZm9ybWF0ID0gcm07XHJcbiAgICAgICAgICBybSA9IG51bGw7XHJcbiAgICAgICAgfSBlbHNlIGlmIChkcCAmJiB0eXBlb2YgZHAgPT0gJ29iamVjdCcpIHtcclxuICAgICAgICAgIGZvcm1hdCA9IGRwO1xyXG4gICAgICAgICAgZHAgPSBybSA9IG51bGw7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGZvcm1hdCA9IEZPUk1BVDtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGZvcm1hdCAhPSAnb2JqZWN0Jykge1xyXG4gICAgICAgIHRocm93IEVycm9yXHJcbiAgICAgICAgICAoYmlnbnVtYmVyRXJyb3IgKyAnQXJndW1lbnQgbm90IGFuIG9iamVjdDogJyArIGZvcm1hdCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHN0ciA9IHgudG9GaXhlZChkcCwgcm0pO1xyXG5cclxuICAgICAgaWYgKHguYykge1xyXG4gICAgICAgIHZhciBpLFxyXG4gICAgICAgICAgYXJyID0gc3RyLnNwbGl0KCcuJyksXHJcbiAgICAgICAgICBnMSA9ICtmb3JtYXQuZ3JvdXBTaXplLFxyXG4gICAgICAgICAgZzIgPSArZm9ybWF0LnNlY29uZGFyeUdyb3VwU2l6ZSxcclxuICAgICAgICAgIGdyb3VwU2VwYXJhdG9yID0gZm9ybWF0Lmdyb3VwU2VwYXJhdG9yIHx8ICcnLFxyXG4gICAgICAgICAgaW50UGFydCA9IGFyclswXSxcclxuICAgICAgICAgIGZyYWN0aW9uUGFydCA9IGFyclsxXSxcclxuICAgICAgICAgIGlzTmVnID0geC5zIDwgMCxcclxuICAgICAgICAgIGludERpZ2l0cyA9IGlzTmVnID8gaW50UGFydC5zbGljZSgxKSA6IGludFBhcnQsXHJcbiAgICAgICAgICBsZW4gPSBpbnREaWdpdHMubGVuZ3RoO1xyXG5cclxuICAgICAgICBpZiAoZzIpIGkgPSBnMSwgZzEgPSBnMiwgZzIgPSBpLCBsZW4gLT0gaTtcclxuXHJcbiAgICAgICAgaWYgKGcxID4gMCAmJiBsZW4gPiAwKSB7XHJcbiAgICAgICAgICBpID0gbGVuICUgZzEgfHwgZzE7XHJcbiAgICAgICAgICBpbnRQYXJ0ID0gaW50RGlnaXRzLnN1YnN0cigwLCBpKTtcclxuICAgICAgICAgIGZvciAoOyBpIDwgbGVuOyBpICs9IGcxKSBpbnRQYXJ0ICs9IGdyb3VwU2VwYXJhdG9yICsgaW50RGlnaXRzLnN1YnN0cihpLCBnMSk7XHJcbiAgICAgICAgICBpZiAoZzIgPiAwKSBpbnRQYXJ0ICs9IGdyb3VwU2VwYXJhdG9yICsgaW50RGlnaXRzLnNsaWNlKGkpO1xyXG4gICAgICAgICAgaWYgKGlzTmVnKSBpbnRQYXJ0ID0gJy0nICsgaW50UGFydDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHN0ciA9IGZyYWN0aW9uUGFydFxyXG4gICAgICAgICA/IGludFBhcnQgKyAoZm9ybWF0LmRlY2ltYWxTZXBhcmF0b3IgfHwgJycpICsgKChnMiA9ICtmb3JtYXQuZnJhY3Rpb25Hcm91cFNpemUpXHJcbiAgICAgICAgICA/IGZyYWN0aW9uUGFydC5yZXBsYWNlKG5ldyBSZWdFeHAoJ1xcXFxkeycgKyBnMiArICd9XFxcXEInLCAnZycpLFxyXG4gICAgICAgICAgICckJicgKyAoZm9ybWF0LmZyYWN0aW9uR3JvdXBTZXBhcmF0b3IgfHwgJycpKVxyXG4gICAgICAgICAgOiBmcmFjdGlvblBhcnQpXHJcbiAgICAgICAgIDogaW50UGFydDtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIChmb3JtYXQucHJlZml4IHx8ICcnKSArIHN0ciArIChmb3JtYXQuc3VmZml4IHx8ICcnKTtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBSZXR1cm4gYW4gYXJyYXkgb2YgdHdvIEJpZ051bWJlcnMgcmVwcmVzZW50aW5nIHRoZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlciBhcyBhIHNpbXBsZVxyXG4gICAgICogZnJhY3Rpb24gd2l0aCBhbiBpbnRlZ2VyIG51bWVyYXRvciBhbmQgYW4gaW50ZWdlciBkZW5vbWluYXRvci5cclxuICAgICAqIFRoZSBkZW5vbWluYXRvciB3aWxsIGJlIGEgcG9zaXRpdmUgbm9uLXplcm8gdmFsdWUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSBzcGVjaWZpZWRcclxuICAgICAqIG1heGltdW0gZGVub21pbmF0b3IuIElmIGEgbWF4aW11bSBkZW5vbWluYXRvciBpcyBub3Qgc3BlY2lmaWVkLCB0aGUgZGVub21pbmF0b3Igd2lsbCBiZVxyXG4gICAgICogdGhlIGxvd2VzdCB2YWx1ZSBuZWNlc3NhcnkgdG8gcmVwcmVzZW50IHRoZSBudW1iZXIgZXhhY3RseS5cclxuICAgICAqXHJcbiAgICAgKiBbbWRdIHtudW1iZXJ8c3RyaW5nfEJpZ051bWJlcn0gSW50ZWdlciA+PSAxLCBvciBJbmZpbml0eS4gVGhlIG1heGltdW0gZGVub21pbmF0b3IuXHJcbiAgICAgKlxyXG4gICAgICogJ1tCaWdOdW1iZXIgRXJyb3JdIEFyZ3VtZW50IHtub3QgYW4gaW50ZWdlcnxvdXQgb2YgcmFuZ2V9IDoge21kfSdcclxuICAgICAqL1xyXG4gICAgUC50b0ZyYWN0aW9uID0gZnVuY3Rpb24gKG1kKSB7XHJcbiAgICAgIHZhciBkLCBkMCwgZDEsIGQyLCBlLCBleHAsIG4sIG4wLCBuMSwgcSwgciwgcyxcclxuICAgICAgICB4ID0gdGhpcyxcclxuICAgICAgICB4YyA9IHguYztcclxuXHJcbiAgICAgIGlmIChtZCAhPSBudWxsKSB7XHJcbiAgICAgICAgbiA9IG5ldyBCaWdOdW1iZXIobWQpO1xyXG5cclxuICAgICAgICAvLyBUaHJvdyBpZiBtZCBpcyBsZXNzIHRoYW4gb25lIG9yIGlzIG5vdCBhbiBpbnRlZ2VyLCB1bmxlc3MgaXQgaXMgSW5maW5pdHkuXHJcbiAgICAgICAgaWYgKCFuLmlzSW50ZWdlcigpICYmIChuLmMgfHwgbi5zICE9PSAxKSB8fCBuLmx0KE9ORSkpIHtcclxuICAgICAgICAgIHRocm93IEVycm9yXHJcbiAgICAgICAgICAgIChiaWdudW1iZXJFcnJvciArICdBcmd1bWVudCAnICtcclxuICAgICAgICAgICAgICAobi5pc0ludGVnZXIoKSA/ICdvdXQgb2YgcmFuZ2U6ICcgOiAnbm90IGFuIGludGVnZXI6ICcpICsgdmFsdWVPZihuKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoIXhjKSByZXR1cm4gbmV3IEJpZ051bWJlcih4KTtcclxuXHJcbiAgICAgIGQgPSBuZXcgQmlnTnVtYmVyKE9ORSk7XHJcbiAgICAgIG4xID0gZDAgPSBuZXcgQmlnTnVtYmVyKE9ORSk7XHJcbiAgICAgIGQxID0gbjAgPSBuZXcgQmlnTnVtYmVyKE9ORSk7XHJcbiAgICAgIHMgPSBjb2VmZlRvU3RyaW5nKHhjKTtcclxuXHJcbiAgICAgIC8vIERldGVybWluZSBpbml0aWFsIGRlbm9taW5hdG9yLlxyXG4gICAgICAvLyBkIGlzIGEgcG93ZXIgb2YgMTAgYW5kIHRoZSBtaW5pbXVtIG1heCBkZW5vbWluYXRvciB0aGF0IHNwZWNpZmllcyB0aGUgdmFsdWUgZXhhY3RseS5cclxuICAgICAgZSA9IGQuZSA9IHMubGVuZ3RoIC0geC5lIC0gMTtcclxuICAgICAgZC5jWzBdID0gUE9XU19URU5bKGV4cCA9IGUgJSBMT0dfQkFTRSkgPCAwID8gTE9HX0JBU0UgKyBleHAgOiBleHBdO1xyXG4gICAgICBtZCA9ICFtZCB8fCBuLmNvbXBhcmVkVG8oZCkgPiAwID8gKGUgPiAwID8gZCA6IG4xKSA6IG47XHJcblxyXG4gICAgICBleHAgPSBNQVhfRVhQO1xyXG4gICAgICBNQVhfRVhQID0gMSAvIDA7XHJcbiAgICAgIG4gPSBuZXcgQmlnTnVtYmVyKHMpO1xyXG5cclxuICAgICAgLy8gbjAgPSBkMSA9IDBcclxuICAgICAgbjAuY1swXSA9IDA7XHJcblxyXG4gICAgICBmb3IgKDsgOykgIHtcclxuICAgICAgICBxID0gZGl2KG4sIGQsIDAsIDEpO1xyXG4gICAgICAgIGQyID0gZDAucGx1cyhxLnRpbWVzKGQxKSk7XHJcbiAgICAgICAgaWYgKGQyLmNvbXBhcmVkVG8obWQpID09IDEpIGJyZWFrO1xyXG4gICAgICAgIGQwID0gZDE7XHJcbiAgICAgICAgZDEgPSBkMjtcclxuICAgICAgICBuMSA9IG4wLnBsdXMocS50aW1lcyhkMiA9IG4xKSk7XHJcbiAgICAgICAgbjAgPSBkMjtcclxuICAgICAgICBkID0gbi5taW51cyhxLnRpbWVzKGQyID0gZCkpO1xyXG4gICAgICAgIG4gPSBkMjtcclxuICAgICAgfVxyXG5cclxuICAgICAgZDIgPSBkaXYobWQubWludXMoZDApLCBkMSwgMCwgMSk7XHJcbiAgICAgIG4wID0gbjAucGx1cyhkMi50aW1lcyhuMSkpO1xyXG4gICAgICBkMCA9IGQwLnBsdXMoZDIudGltZXMoZDEpKTtcclxuICAgICAgbjAucyA9IG4xLnMgPSB4LnM7XHJcbiAgICAgIGUgPSBlICogMjtcclxuXHJcbiAgICAgIC8vIERldGVybWluZSB3aGljaCBmcmFjdGlvbiBpcyBjbG9zZXIgdG8geCwgbjAvZDAgb3IgbjEvZDFcclxuICAgICAgciA9IGRpdihuMSwgZDEsIGUsIFJPVU5ESU5HX01PREUpLm1pbnVzKHgpLmFicygpLmNvbXBhcmVkVG8oXHJcbiAgICAgICAgICBkaXYobjAsIGQwLCBlLCBST1VORElOR19NT0RFKS5taW51cyh4KS5hYnMoKSkgPCAxID8gW24xLCBkMV0gOiBbbjAsIGQwXTtcclxuXHJcbiAgICAgIE1BWF9FWFAgPSBleHA7XHJcblxyXG4gICAgICByZXR1cm4gcjtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBSZXR1cm4gdGhlIHZhbHVlIG9mIHRoaXMgQmlnTnVtYmVyIGNvbnZlcnRlZCB0byBhIG51bWJlciBwcmltaXRpdmUuXHJcbiAgICAgKi9cclxuICAgIFAudG9OdW1iZXIgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHJldHVybiArdmFsdWVPZih0aGlzKTtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBSZXR1cm4gYSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlciByb3VuZGVkIHRvIHNkIHNpZ25pZmljYW50IGRpZ2l0c1xyXG4gICAgICogdXNpbmcgcm91bmRpbmcgbW9kZSBybSBvciBST1VORElOR19NT0RFLiBJZiBzZCBpcyBsZXNzIHRoYW4gdGhlIG51bWJlciBvZiBkaWdpdHNcclxuICAgICAqIG5lY2Vzc2FyeSB0byByZXByZXNlbnQgdGhlIGludGVnZXIgcGFydCBvZiB0aGUgdmFsdWUgaW4gZml4ZWQtcG9pbnQgbm90YXRpb24sIHRoZW4gdXNlXHJcbiAgICAgKiBleHBvbmVudGlhbCBub3RhdGlvbi5cclxuICAgICAqXHJcbiAgICAgKiBbc2RdIHtudW1iZXJ9IFNpZ25pZmljYW50IGRpZ2l0cy4gSW50ZWdlciwgMSB0byBNQVggaW5jbHVzaXZlLlxyXG4gICAgICogW3JtXSB7bnVtYmVyfSBSb3VuZGluZyBtb2RlLiBJbnRlZ2VyLCAwIHRvIDggaW5jbHVzaXZlLlxyXG4gICAgICpcclxuICAgICAqICdbQmlnTnVtYmVyIEVycm9yXSBBcmd1bWVudCB7bm90IGEgcHJpbWl0aXZlIG51bWJlcnxub3QgYW4gaW50ZWdlcnxvdXQgb2YgcmFuZ2V9OiB7c2R8cm19J1xyXG4gICAgICovXHJcbiAgICBQLnRvUHJlY2lzaW9uID0gZnVuY3Rpb24gKHNkLCBybSkge1xyXG4gICAgICBpZiAoc2QgIT0gbnVsbCkgaW50Q2hlY2soc2QsIDEsIE1BWCk7XHJcbiAgICAgIHJldHVybiBmb3JtYXQodGhpcywgc2QsIHJtLCAyKTtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBSZXR1cm4gYSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlciBpbiBiYXNlIGIsIG9yIGJhc2UgMTAgaWYgYiBpc1xyXG4gICAgICogb21pdHRlZC4gSWYgYSBiYXNlIGlzIHNwZWNpZmllZCwgaW5jbHVkaW5nIGJhc2UgMTAsIHJvdW5kIGFjY29yZGluZyB0byBERUNJTUFMX1BMQUNFUyBhbmRcclxuICAgICAqIFJPVU5ESU5HX01PREUuIElmIGEgYmFzZSBpcyBub3Qgc3BlY2lmaWVkLCBhbmQgdGhpcyBCaWdOdW1iZXIgaGFzIGEgcG9zaXRpdmUgZXhwb25lbnRcclxuICAgICAqIHRoYXQgaXMgZXF1YWwgdG8gb3IgZ3JlYXRlciB0aGFuIFRPX0VYUF9QT1MsIG9yIGEgbmVnYXRpdmUgZXhwb25lbnQgZXF1YWwgdG8gb3IgbGVzcyB0aGFuXHJcbiAgICAgKiBUT19FWFBfTkVHLCByZXR1cm4gZXhwb25lbnRpYWwgbm90YXRpb24uXHJcbiAgICAgKlxyXG4gICAgICogW2JdIHtudW1iZXJ9IEludGVnZXIsIDIgdG8gQUxQSEFCRVQubGVuZ3RoIGluY2x1c2l2ZS5cclxuICAgICAqXHJcbiAgICAgKiAnW0JpZ051bWJlciBFcnJvcl0gQmFzZSB7bm90IGEgcHJpbWl0aXZlIG51bWJlcnxub3QgYW4gaW50ZWdlcnxvdXQgb2YgcmFuZ2V9OiB7Yn0nXHJcbiAgICAgKi9cclxuICAgIFAudG9TdHJpbmcgPSBmdW5jdGlvbiAoYikge1xyXG4gICAgICB2YXIgc3RyLFxyXG4gICAgICAgIG4gPSB0aGlzLFxyXG4gICAgICAgIHMgPSBuLnMsXHJcbiAgICAgICAgZSA9IG4uZTtcclxuXHJcbiAgICAgIC8vIEluZmluaXR5IG9yIE5hTj9cclxuICAgICAgaWYgKGUgPT09IG51bGwpIHtcclxuICAgICAgICBpZiAocykge1xyXG4gICAgICAgICAgc3RyID0gJ0luZmluaXR5JztcclxuICAgICAgICAgIGlmIChzIDwgMCkgc3RyID0gJy0nICsgc3RyO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBzdHIgPSAnTmFOJztcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKGIgPT0gbnVsbCkge1xyXG4gICAgICAgICAgc3RyID0gZSA8PSBUT19FWFBfTkVHIHx8IGUgPj0gVE9fRVhQX1BPU1xyXG4gICAgICAgICAgID8gdG9FeHBvbmVudGlhbChjb2VmZlRvU3RyaW5nKG4uYyksIGUpXHJcbiAgICAgICAgICAgOiB0b0ZpeGVkUG9pbnQoY29lZmZUb1N0cmluZyhuLmMpLCBlLCAnMCcpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoYiA9PT0gMTApIHtcclxuICAgICAgICAgIG4gPSByb3VuZChuZXcgQmlnTnVtYmVyKG4pLCBERUNJTUFMX1BMQUNFUyArIGUgKyAxLCBST1VORElOR19NT0RFKTtcclxuICAgICAgICAgIHN0ciA9IHRvRml4ZWRQb2ludChjb2VmZlRvU3RyaW5nKG4uYyksIG4uZSwgJzAnKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgaW50Q2hlY2soYiwgMiwgQUxQSEFCRVQubGVuZ3RoLCAnQmFzZScpO1xyXG4gICAgICAgICAgc3RyID0gY29udmVydEJhc2UodG9GaXhlZFBvaW50KGNvZWZmVG9TdHJpbmcobi5jKSwgZSwgJzAnKSwgMTAsIGIsIHMsIHRydWUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHMgPCAwICYmIG4uY1swXSkgc3RyID0gJy0nICsgc3RyO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gc3RyO1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIFJldHVybiBhcyB0b1N0cmluZywgYnV0IGRvIG5vdCBhY2NlcHQgYSBiYXNlIGFyZ3VtZW50LCBhbmQgaW5jbHVkZSB0aGUgbWludXMgc2lnbiBmb3JcclxuICAgICAqIG5lZ2F0aXZlIHplcm8uXHJcbiAgICAgKi9cclxuICAgIFAudmFsdWVPZiA9IFAudG9KU09OID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICByZXR1cm4gdmFsdWVPZih0aGlzKTtcclxuICAgIH07XHJcblxyXG5cclxuICAgIFAuX2lzQmlnTnVtYmVyID0gdHJ1ZTtcclxuXHJcbiAgICBpZiAoY29uZmlnT2JqZWN0ICE9IG51bGwpIEJpZ051bWJlci5zZXQoY29uZmlnT2JqZWN0KTtcclxuXHJcbiAgICByZXR1cm4gQmlnTnVtYmVyO1xyXG4gIH1cclxuXHJcblxyXG4gIC8vIFBSSVZBVEUgSEVMUEVSIEZVTkNUSU9OU1xyXG5cclxuICAvLyBUaGVzZSBmdW5jdGlvbnMgZG9uJ3QgbmVlZCBhY2Nlc3MgdG8gdmFyaWFibGVzLFxyXG4gIC8vIGUuZy4gREVDSU1BTF9QTEFDRVMsIGluIHRoZSBzY29wZSBvZiB0aGUgYGNsb25lYCBmdW5jdGlvbiBhYm92ZS5cclxuXHJcblxyXG4gIGZ1bmN0aW9uIGJpdEZsb29yKG4pIHtcclxuICAgIHZhciBpID0gbiB8IDA7XHJcbiAgICByZXR1cm4gbiA+IDAgfHwgbiA9PT0gaSA/IGkgOiBpIC0gMTtcclxuICB9XHJcblxyXG5cclxuICAvLyBSZXR1cm4gYSBjb2VmZmljaWVudCBhcnJheSBhcyBhIHN0cmluZyBvZiBiYXNlIDEwIGRpZ2l0cy5cclxuICBmdW5jdGlvbiBjb2VmZlRvU3RyaW5nKGEpIHtcclxuICAgIHZhciBzLCB6LFxyXG4gICAgICBpID0gMSxcclxuICAgICAgaiA9IGEubGVuZ3RoLFxyXG4gICAgICByID0gYVswXSArICcnO1xyXG5cclxuICAgIGZvciAoOyBpIDwgajspIHtcclxuICAgICAgcyA9IGFbaSsrXSArICcnO1xyXG4gICAgICB6ID0gTE9HX0JBU0UgLSBzLmxlbmd0aDtcclxuICAgICAgZm9yICg7IHotLTsgcyA9ICcwJyArIHMpO1xyXG4gICAgICByICs9IHM7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gRGV0ZXJtaW5lIHRyYWlsaW5nIHplcm9zLlxyXG4gICAgZm9yIChqID0gci5sZW5ndGg7IHIuY2hhckNvZGVBdCgtLWopID09PSA0ODspO1xyXG5cclxuICAgIHJldHVybiByLnNsaWNlKDAsIGogKyAxIHx8IDEpO1xyXG4gIH1cclxuXHJcblxyXG4gIC8vIENvbXBhcmUgdGhlIHZhbHVlIG9mIEJpZ051bWJlcnMgeCBhbmQgeS5cclxuICBmdW5jdGlvbiBjb21wYXJlKHgsIHkpIHtcclxuICAgIHZhciBhLCBiLFxyXG4gICAgICB4YyA9IHguYyxcclxuICAgICAgeWMgPSB5LmMsXHJcbiAgICAgIGkgPSB4LnMsXHJcbiAgICAgIGogPSB5LnMsXHJcbiAgICAgIGsgPSB4LmUsXHJcbiAgICAgIGwgPSB5LmU7XHJcblxyXG4gICAgLy8gRWl0aGVyIE5hTj9cclxuICAgIGlmICghaSB8fCAhaikgcmV0dXJuIG51bGw7XHJcblxyXG4gICAgYSA9IHhjICYmICF4Y1swXTtcclxuICAgIGIgPSB5YyAmJiAheWNbMF07XHJcblxyXG4gICAgLy8gRWl0aGVyIHplcm8/XHJcbiAgICBpZiAoYSB8fCBiKSByZXR1cm4gYSA/IGIgPyAwIDogLWogOiBpO1xyXG5cclxuICAgIC8vIFNpZ25zIGRpZmZlcj9cclxuICAgIGlmIChpICE9IGopIHJldHVybiBpO1xyXG5cclxuICAgIGEgPSBpIDwgMDtcclxuICAgIGIgPSBrID09IGw7XHJcblxyXG4gICAgLy8gRWl0aGVyIEluZmluaXR5P1xyXG4gICAgaWYgKCF4YyB8fCAheWMpIHJldHVybiBiID8gMCA6ICF4YyBeIGEgPyAxIDogLTE7XHJcblxyXG4gICAgLy8gQ29tcGFyZSBleHBvbmVudHMuXHJcbiAgICBpZiAoIWIpIHJldHVybiBrID4gbCBeIGEgPyAxIDogLTE7XHJcblxyXG4gICAgaiA9IChrID0geGMubGVuZ3RoKSA8IChsID0geWMubGVuZ3RoKSA/IGsgOiBsO1xyXG5cclxuICAgIC8vIENvbXBhcmUgZGlnaXQgYnkgZGlnaXQuXHJcbiAgICBmb3IgKGkgPSAwOyBpIDwgajsgaSsrKSBpZiAoeGNbaV0gIT0geWNbaV0pIHJldHVybiB4Y1tpXSA+IHljW2ldIF4gYSA/IDEgOiAtMTtcclxuXHJcbiAgICAvLyBDb21wYXJlIGxlbmd0aHMuXHJcbiAgICByZXR1cm4gayA9PSBsID8gMCA6IGsgPiBsIF4gYSA/IDEgOiAtMTtcclxuICB9XHJcblxyXG5cclxuICAvKlxyXG4gICAqIENoZWNrIHRoYXQgbiBpcyBhIHByaW1pdGl2ZSBudW1iZXIsIGFuIGludGVnZXIsIGFuZCBpbiByYW5nZSwgb3RoZXJ3aXNlIHRocm93LlxyXG4gICAqL1xyXG4gIGZ1bmN0aW9uIGludENoZWNrKG4sIG1pbiwgbWF4LCBuYW1lKSB7XHJcbiAgICBpZiAobiA8IG1pbiB8fCBuID4gbWF4IHx8IG4gIT09IG1hdGhmbG9vcihuKSkge1xyXG4gICAgICB0aHJvdyBFcnJvclxyXG4gICAgICAgKGJpZ251bWJlckVycm9yICsgKG5hbWUgfHwgJ0FyZ3VtZW50JykgKyAodHlwZW9mIG4gPT0gJ251bWJlcidcclxuICAgICAgICAgPyBuIDwgbWluIHx8IG4gPiBtYXggPyAnIG91dCBvZiByYW5nZTogJyA6ICcgbm90IGFuIGludGVnZXI6ICdcclxuICAgICAgICAgOiAnIG5vdCBhIHByaW1pdGl2ZSBudW1iZXI6ICcpICsgU3RyaW5nKG4pKTtcclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuICAvLyBBc3N1bWVzIGZpbml0ZSBuLlxyXG4gIGZ1bmN0aW9uIGlzT2RkKG4pIHtcclxuICAgIHZhciBrID0gbi5jLmxlbmd0aCAtIDE7XHJcbiAgICByZXR1cm4gYml0Rmxvb3Iobi5lIC8gTE9HX0JBU0UpID09IGsgJiYgbi5jW2tdICUgMiAhPSAwO1xyXG4gIH1cclxuXHJcblxyXG4gIGZ1bmN0aW9uIHRvRXhwb25lbnRpYWwoc3RyLCBlKSB7XHJcbiAgICByZXR1cm4gKHN0ci5sZW5ndGggPiAxID8gc3RyLmNoYXJBdCgwKSArICcuJyArIHN0ci5zbGljZSgxKSA6IHN0cikgK1xyXG4gICAgIChlIDwgMCA/ICdlJyA6ICdlKycpICsgZTtcclxuICB9XHJcblxyXG5cclxuICBmdW5jdGlvbiB0b0ZpeGVkUG9pbnQoc3RyLCBlLCB6KSB7XHJcbiAgICB2YXIgbGVuLCB6cztcclxuXHJcbiAgICAvLyBOZWdhdGl2ZSBleHBvbmVudD9cclxuICAgIGlmIChlIDwgMCkge1xyXG5cclxuICAgICAgLy8gUHJlcGVuZCB6ZXJvcy5cclxuICAgICAgZm9yICh6cyA9IHogKyAnLic7ICsrZTsgenMgKz0geik7XHJcbiAgICAgIHN0ciA9IHpzICsgc3RyO1xyXG5cclxuICAgIC8vIFBvc2l0aXZlIGV4cG9uZW50XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBsZW4gPSBzdHIubGVuZ3RoO1xyXG5cclxuICAgICAgLy8gQXBwZW5kIHplcm9zLlxyXG4gICAgICBpZiAoKytlID4gbGVuKSB7XHJcbiAgICAgICAgZm9yICh6cyA9IHosIGUgLT0gbGVuOyAtLWU7IHpzICs9IHopO1xyXG4gICAgICAgIHN0ciArPSB6cztcclxuICAgICAgfSBlbHNlIGlmIChlIDwgbGVuKSB7XHJcbiAgICAgICAgc3RyID0gc3RyLnNsaWNlKDAsIGUpICsgJy4nICsgc3RyLnNsaWNlKGUpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHN0cjtcclxuICB9XHJcblxyXG5cclxuICAvLyBFWFBPUlRcclxuXHJcblxyXG4gIEJpZ051bWJlciA9IGNsb25lKCk7XHJcbiAgQmlnTnVtYmVyWydkZWZhdWx0J10gPSBCaWdOdW1iZXIuQmlnTnVtYmVyID0gQmlnTnVtYmVyO1xyXG5cclxuICAvLyBBTUQuXHJcbiAgaWYgKHR5cGVvZiBkZWZpbmUgPT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7XHJcbiAgICBkZWZpbmUoZnVuY3Rpb24gKCkgeyByZXR1cm4gQmlnTnVtYmVyOyB9KTtcclxuXHJcbiAgLy8gTm9kZS5qcyBhbmQgb3RoZXIgZW52aXJvbm1lbnRzIHRoYXQgc3VwcG9ydCBtb2R1bGUuZXhwb3J0cy5cclxuICB9IGVsc2UgaWYgKHR5cGVvZiBtb2R1bGUgIT0gJ3VuZGVmaW5lZCcgJiYgbW9kdWxlLmV4cG9ydHMpIHtcclxuICAgIG1vZHVsZS5leHBvcnRzID0gQmlnTnVtYmVyO1xyXG5cclxuICAvLyBCcm93c2VyLlxyXG4gIH0gZWxzZSB7XHJcbiAgICBpZiAoIWdsb2JhbE9iamVjdCkge1xyXG4gICAgICBnbG9iYWxPYmplY3QgPSB0eXBlb2Ygc2VsZiAhPSAndW5kZWZpbmVkJyAmJiBzZWxmID8gc2VsZiA6IHdpbmRvdztcclxuICAgIH1cclxuXHJcbiAgICBnbG9iYWxPYmplY3QuQmlnTnVtYmVyID0gQmlnTnVtYmVyO1xyXG4gIH1cclxufSkodGhpcyk7XHJcbiIsInZhciBqc29uX3N0cmluZ2lmeSA9IHJlcXVpcmUoJy4vbGliL3N0cmluZ2lmeS5qcycpLnN0cmluZ2lmeTtcbnZhciBqc29uX3BhcnNlICAgICA9IHJlcXVpcmUoJy4vbGliL3BhcnNlLmpzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24ob3B0aW9ucykge1xuICAgIHJldHVybiAge1xuICAgICAgICBwYXJzZToganNvbl9wYXJzZShvcHRpb25zKSxcbiAgICAgICAgc3RyaW5naWZ5OiBqc29uX3N0cmluZ2lmeVxuICAgIH1cbn07XG4vL2NyZWF0ZSB0aGUgZGVmYXVsdCBtZXRob2QgbWVtYmVycyB3aXRoIG5vIG9wdGlvbnMgYXBwbGllZCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcbm1vZHVsZS5leHBvcnRzLnBhcnNlID0ganNvbl9wYXJzZSgpO1xubW9kdWxlLmV4cG9ydHMuc3RyaW5naWZ5ID0ganNvbl9zdHJpbmdpZnk7XG4iLCJ2YXIgQmlnTnVtYmVyID0gbnVsbDtcblxuLy8gcmVnZXhweHMgZXh0cmFjdGVkIGZyb21cbi8vIChjKSBCU0QtMy1DbGF1c2Vcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYXN0aWZ5L3NlY3VyZS1qc29uLXBhcnNlL2dyYXBocy9jb250cmlidXRvcnMgYW5kIGh0dHBzOi8vZ2l0aHViLmNvbS9oYXBpanMvYm91cm5lL2dyYXBocy9jb250cmlidXRvcnNcblxuY29uc3Qgc3VzcGVjdFByb3RvUnggPSAvKD86X3xcXFxcdTAwNVtGZl0pKD86X3xcXFxcdTAwNVtGZl0pKD86cHxcXFxcdTAwNzApKD86cnxcXFxcdTAwNzIpKD86b3xcXFxcdTAwNltGZl0pKD86dHxcXFxcdTAwNzQpKD86b3xcXFxcdTAwNltGZl0pKD86X3xcXFxcdTAwNVtGZl0pKD86X3xcXFxcdTAwNVtGZl0pLztcbmNvbnN0IHN1c3BlY3RDb25zdHJ1Y3RvclJ4ID0gLyg/OmN8XFxcXHUwMDYzKSg/Om98XFxcXHUwMDZbRmZdKSg/Om58XFxcXHUwMDZbRWVdKSg/OnN8XFxcXHUwMDczKSg/OnR8XFxcXHUwMDc0KSg/OnJ8XFxcXHUwMDcyKSg/OnV8XFxcXHUwMDc1KSg/OmN8XFxcXHUwMDYzKSg/OnR8XFxcXHUwMDc0KSg/Om98XFxcXHUwMDZbRmZdKSg/OnJ8XFxcXHUwMDcyKS87XG5cbi8qXG4gICAganNvbl9wYXJzZS5qc1xuICAgIDIwMTItMDYtMjBcblxuICAgIFB1YmxpYyBEb21haW4uXG5cbiAgICBOTyBXQVJSQU5UWSBFWFBSRVNTRUQgT1IgSU1QTElFRC4gVVNFIEFUIFlPVVIgT1dOIFJJU0suXG5cbiAgICBUaGlzIGZpbGUgY3JlYXRlcyBhIGpzb25fcGFyc2UgZnVuY3Rpb24uXG4gICAgRHVyaW5nIGNyZWF0ZSB5b3UgY2FuIChvcHRpb25hbGx5KSBzcGVjaWZ5IHNvbWUgYmVoYXZpb3VyYWwgc3dpdGNoZXNcblxuICAgICAgICByZXF1aXJlKCdqc29uLWJpZ2ludCcpKG9wdGlvbnMpXG5cbiAgICAgICAgICAgIFRoZSBvcHRpb25hbCBvcHRpb25zIHBhcmFtZXRlciBob2xkcyBzd2l0Y2hlcyB0aGF0IGRyaXZlIGNlcnRhaW5cbiAgICAgICAgICAgIGFzcGVjdHMgb2YgdGhlIHBhcnNpbmcgcHJvY2VzczpcbiAgICAgICAgICAgICogb3B0aW9ucy5zdHJpY3QgPSB0cnVlIHdpbGwgd2FybiBhYm91dCBkdXBsaWNhdGUta2V5IHVzYWdlIGluIHRoZSBqc29uLlxuICAgICAgICAgICAgICBUaGUgZGVmYXVsdCAoc3RyaWN0ID0gZmFsc2UpIHdpbGwgc2lsZW50bHkgaWdub3JlIHRob3NlIGFuZCBvdmVyd3JpdGVcbiAgICAgICAgICAgICAgdmFsdWVzIGZvciBrZXlzIHRoYXQgYXJlIGluIGR1cGxpY2F0ZSB1c2UuXG5cbiAgICBUaGUgcmVzdWx0aW5nIGZ1bmN0aW9uIGZvbGxvd3MgdGhpcyBzaWduYXR1cmU6XG4gICAgICAgIGpzb25fcGFyc2UodGV4dCwgcmV2aXZlcilcbiAgICAgICAgICAgIFRoaXMgbWV0aG9kIHBhcnNlcyBhIEpTT04gdGV4dCB0byBwcm9kdWNlIGFuIG9iamVjdCBvciBhcnJheS5cbiAgICAgICAgICAgIEl0IGNhbiB0aHJvdyBhIFN5bnRheEVycm9yIGV4Y2VwdGlvbi5cblxuICAgICAgICAgICAgVGhlIG9wdGlvbmFsIHJldml2ZXIgcGFyYW1ldGVyIGlzIGEgZnVuY3Rpb24gdGhhdCBjYW4gZmlsdGVyIGFuZFxuICAgICAgICAgICAgdHJhbnNmb3JtIHRoZSByZXN1bHRzLiBJdCByZWNlaXZlcyBlYWNoIG9mIHRoZSBrZXlzIGFuZCB2YWx1ZXMsXG4gICAgICAgICAgICBhbmQgaXRzIHJldHVybiB2YWx1ZSBpcyB1c2VkIGluc3RlYWQgb2YgdGhlIG9yaWdpbmFsIHZhbHVlLlxuICAgICAgICAgICAgSWYgaXQgcmV0dXJucyB3aGF0IGl0IHJlY2VpdmVkLCB0aGVuIHRoZSBzdHJ1Y3R1cmUgaXMgbm90IG1vZGlmaWVkLlxuICAgICAgICAgICAgSWYgaXQgcmV0dXJucyB1bmRlZmluZWQgdGhlbiB0aGUgbWVtYmVyIGlzIGRlbGV0ZWQuXG5cbiAgICAgICAgICAgIEV4YW1wbGU6XG5cbiAgICAgICAgICAgIC8vIFBhcnNlIHRoZSB0ZXh0LiBWYWx1ZXMgdGhhdCBsb29rIGxpa2UgSVNPIGRhdGUgc3RyaW5ncyB3aWxsXG4gICAgICAgICAgICAvLyBiZSBjb252ZXJ0ZWQgdG8gRGF0ZSBvYmplY3RzLlxuXG4gICAgICAgICAgICBteURhdGEgPSBqc29uX3BhcnNlKHRleHQsIGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgdmFyIGE7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICAgICAgYSA9XG4vXihcXGR7NH0pLShcXGR7Mn0pLShcXGR7Mn0pVChcXGR7Mn0pOihcXGR7Mn0pOihcXGR7Mn0oPzpcXC5cXGQqKT8pWiQvLmV4ZWModmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoYSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBEYXRlKERhdGUuVVRDKCthWzFdLCArYVsyXSAtIDEsICthWzNdLCArYVs0XSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICArYVs1XSwgK2FbNl0pKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgICB9KTtcblxuICAgIFRoaXMgaXMgYSByZWZlcmVuY2UgaW1wbGVtZW50YXRpb24uIFlvdSBhcmUgZnJlZSB0byBjb3B5LCBtb2RpZnksIG9yXG4gICAgcmVkaXN0cmlidXRlLlxuXG4gICAgVGhpcyBjb2RlIHNob3VsZCBiZSBtaW5pZmllZCBiZWZvcmUgZGVwbG95bWVudC5cbiAgICBTZWUgaHR0cDovL2phdmFzY3JpcHQuY3JvY2tmb3JkLmNvbS9qc21pbi5odG1sXG5cbiAgICBVU0UgWU9VUiBPV04gQ09QWS4gSVQgSVMgRVhUUkVNRUxZIFVOV0lTRSBUTyBMT0FEIENPREUgRlJPTSBTRVJWRVJTIFlPVSBET1xuICAgIE5PVCBDT05UUk9MLlxuKi9cblxuLyptZW1iZXJzIFwiXCIsIFwiXFxcIlwiLCBcIlxcL1wiLCBcIlxcXFxcIiwgYXQsIGIsIGNhbGwsIGNoYXJBdCwgZiwgZnJvbUNoYXJDb2RlLFxuICAgIGhhc093blByb3BlcnR5LCBtZXNzYWdlLCBuLCBuYW1lLCBwcm90b3R5cGUsIHB1c2gsIHIsIHQsIHRleHRcbiovXG5cbnZhciBqc29uX3BhcnNlID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgJ3VzZSBzdHJpY3QnO1xuXG4gIC8vIFRoaXMgaXMgYSBmdW5jdGlvbiB0aGF0IGNhbiBwYXJzZSBhIEpTT04gdGV4dCwgcHJvZHVjaW5nIGEgSmF2YVNjcmlwdFxuICAvLyBkYXRhIHN0cnVjdHVyZS4gSXQgaXMgYSBzaW1wbGUsIHJlY3Vyc2l2ZSBkZXNjZW50IHBhcnNlci4gSXQgZG9lcyBub3QgdXNlXG4gIC8vIGV2YWwgb3IgcmVndWxhciBleHByZXNzaW9ucywgc28gaXQgY2FuIGJlIHVzZWQgYXMgYSBtb2RlbCBmb3IgaW1wbGVtZW50aW5nXG4gIC8vIGEgSlNPTiBwYXJzZXIgaW4gb3RoZXIgbGFuZ3VhZ2VzLlxuXG4gIC8vIFdlIGFyZSBkZWZpbmluZyB0aGUgZnVuY3Rpb24gaW5zaWRlIG9mIGFub3RoZXIgZnVuY3Rpb24gdG8gYXZvaWQgY3JlYXRpbmdcbiAgLy8gZ2xvYmFsIHZhcmlhYmxlcy5cblxuICAvLyBEZWZhdWx0IG9wdGlvbnMgb25lIGNhbiBvdmVycmlkZSBieSBwYXNzaW5nIG9wdGlvbnMgdG8gdGhlIHBhcnNlKClcbiAgdmFyIF9vcHRpb25zID0ge1xuICAgIHN0cmljdDogZmFsc2UsIC8vIG5vdCBiZWluZyBzdHJpY3QgbWVhbnMgZG8gbm90IGdlbmVyYXRlIHN5bnRheCBlcnJvcnMgZm9yIFwiZHVwbGljYXRlIGtleVwiXG4gICAgc3RvcmVBc1N0cmluZzogZmFsc2UsIC8vIHRvZ2dsZXMgd2hldGhlciB0aGUgdmFsdWVzIHNob3VsZCBiZSBzdG9yZWQgYXMgQmlnTnVtYmVyIChkZWZhdWx0KSBvciBhIHN0cmluZ1xuICAgIGFsd2F5c1BhcnNlQXNCaWc6IGZhbHNlLCAvLyB0b2dnbGVzIHdoZXRoZXIgYWxsIG51bWJlcnMgc2hvdWxkIGJlIEJpZ1xuICAgIHVzZU5hdGl2ZUJpZ0ludDogZmFsc2UsIC8vIHRvZ2dsZXMgd2hldGhlciB0byB1c2UgbmF0aXZlIEJpZ0ludCBpbnN0ZWFkIG9mIGJpZ251bWJlci5qc1xuICAgIHByb3RvQWN0aW9uOiAnZXJyb3InLFxuICAgIGNvbnN0cnVjdG9yQWN0aW9uOiAnZXJyb3InLFxuICB9O1xuXG4gIC8vIElmIHRoZXJlIGFyZSBvcHRpb25zLCB0aGVuIHVzZSB0aGVtIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IF9vcHRpb25zXG4gIGlmIChvcHRpb25zICE9PSB1bmRlZmluZWQgJiYgb3B0aW9ucyAhPT0gbnVsbCkge1xuICAgIGlmIChvcHRpb25zLnN0cmljdCA9PT0gdHJ1ZSkge1xuICAgICAgX29wdGlvbnMuc3RyaWN0ID0gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMuc3RvcmVBc1N0cmluZyA9PT0gdHJ1ZSkge1xuICAgICAgX29wdGlvbnMuc3RvcmVBc1N0cmluZyA9IHRydWU7XG4gICAgfVxuICAgIF9vcHRpb25zLmFsd2F5c1BhcnNlQXNCaWcgPVxuICAgICAgb3B0aW9ucy5hbHdheXNQYXJzZUFzQmlnID09PSB0cnVlID8gb3B0aW9ucy5hbHdheXNQYXJzZUFzQmlnIDogZmFsc2U7XG4gICAgX29wdGlvbnMudXNlTmF0aXZlQmlnSW50ID1cbiAgICAgIG9wdGlvbnMudXNlTmF0aXZlQmlnSW50ID09PSB0cnVlID8gb3B0aW9ucy51c2VOYXRpdmVCaWdJbnQgOiBmYWxzZTtcblxuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5jb25zdHJ1Y3RvckFjdGlvbiAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGlmIChcbiAgICAgICAgb3B0aW9ucy5jb25zdHJ1Y3RvckFjdGlvbiA9PT0gJ2Vycm9yJyB8fFxuICAgICAgICBvcHRpb25zLmNvbnN0cnVjdG9yQWN0aW9uID09PSAnaWdub3JlJyB8fFxuICAgICAgICBvcHRpb25zLmNvbnN0cnVjdG9yQWN0aW9uID09PSAncHJlc2VydmUnXG4gICAgICApIHtcbiAgICAgICAgX29wdGlvbnMuY29uc3RydWN0b3JBY3Rpb24gPSBvcHRpb25zLmNvbnN0cnVjdG9yQWN0aW9uO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBJbmNvcnJlY3QgdmFsdWUgZm9yIGNvbnN0cnVjdG9yQWN0aW9uIG9wdGlvbiwgbXVzdCBiZSBcImVycm9yXCIsIFwiaWdub3JlXCIgb3IgdW5kZWZpbmVkIGJ1dCBwYXNzZWQgJHtvcHRpb25zLmNvbnN0cnVjdG9yQWN0aW9ufWBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG9wdGlvbnMucHJvdG9BY3Rpb24gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBpZiAoXG4gICAgICAgIG9wdGlvbnMucHJvdG9BY3Rpb24gPT09ICdlcnJvcicgfHxcbiAgICAgICAgb3B0aW9ucy5wcm90b0FjdGlvbiA9PT0gJ2lnbm9yZScgfHxcbiAgICAgICAgb3B0aW9ucy5wcm90b0FjdGlvbiA9PT0gJ3ByZXNlcnZlJ1xuICAgICAgKSB7XG4gICAgICAgIF9vcHRpb25zLnByb3RvQWN0aW9uID0gb3B0aW9ucy5wcm90b0FjdGlvbjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgSW5jb3JyZWN0IHZhbHVlIGZvciBwcm90b0FjdGlvbiBvcHRpb24sIG11c3QgYmUgXCJlcnJvclwiLCBcImlnbm9yZVwiIG9yIHVuZGVmaW5lZCBidXQgcGFzc2VkICR7b3B0aW9ucy5wcm90b0FjdGlvbn1gXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdmFyIGF0LCAvLyBUaGUgaW5kZXggb2YgdGhlIGN1cnJlbnQgY2hhcmFjdGVyXG4gICAgY2gsIC8vIFRoZSBjdXJyZW50IGNoYXJhY3RlclxuICAgIGVzY2FwZWUgPSB7XG4gICAgICAnXCInOiAnXCInLFxuICAgICAgJ1xcXFwnOiAnXFxcXCcsXG4gICAgICAnLyc6ICcvJyxcbiAgICAgIGI6ICdcXGInLFxuICAgICAgZjogJ1xcZicsXG4gICAgICBuOiAnXFxuJyxcbiAgICAgIHI6ICdcXHInLFxuICAgICAgdDogJ1xcdCcsXG4gICAgfSxcbiAgICB0ZXh0LFxuICAgIGVycm9yID0gZnVuY3Rpb24gKG0pIHtcbiAgICAgIC8vIENhbGwgZXJyb3Igd2hlbiBzb21ldGhpbmcgaXMgd3JvbmcuXG5cbiAgICAgIHRocm93IHtcbiAgICAgICAgbmFtZTogJ1N5bnRheEVycm9yJyxcbiAgICAgICAgbWVzc2FnZTogbSxcbiAgICAgICAgYXQ6IGF0LFxuICAgICAgICB0ZXh0OiB0ZXh0LFxuICAgICAgfTtcbiAgICB9LFxuICAgIG5leHQgPSBmdW5jdGlvbiAoYykge1xuICAgICAgLy8gSWYgYSBjIHBhcmFtZXRlciBpcyBwcm92aWRlZCwgdmVyaWZ5IHRoYXQgaXQgbWF0Y2hlcyB0aGUgY3VycmVudCBjaGFyYWN0ZXIuXG5cbiAgICAgIGlmIChjICYmIGMgIT09IGNoKSB7XG4gICAgICAgIGVycm9yKFwiRXhwZWN0ZWQgJ1wiICsgYyArIFwiJyBpbnN0ZWFkIG9mICdcIiArIGNoICsgXCInXCIpO1xuICAgICAgfVxuXG4gICAgICAvLyBHZXQgdGhlIG5leHQgY2hhcmFjdGVyLiBXaGVuIHRoZXJlIGFyZSBubyBtb3JlIGNoYXJhY3RlcnMsXG4gICAgICAvLyByZXR1cm4gdGhlIGVtcHR5IHN0cmluZy5cblxuICAgICAgY2ggPSB0ZXh0LmNoYXJBdChhdCk7XG4gICAgICBhdCArPSAxO1xuICAgICAgcmV0dXJuIGNoO1xuICAgIH0sXG4gICAgbnVtYmVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgLy8gUGFyc2UgYSBudW1iZXIgdmFsdWUuXG5cbiAgICAgIHZhciBudW1iZXIsXG4gICAgICAgIHN0cmluZyA9ICcnO1xuXG4gICAgICBpZiAoY2ggPT09ICctJykge1xuICAgICAgICBzdHJpbmcgPSAnLSc7XG4gICAgICAgIG5leHQoJy0nKTtcbiAgICAgIH1cbiAgICAgIHdoaWxlIChjaCA+PSAnMCcgJiYgY2ggPD0gJzknKSB7XG4gICAgICAgIHN0cmluZyArPSBjaDtcbiAgICAgICAgbmV4dCgpO1xuICAgICAgfVxuICAgICAgaWYgKGNoID09PSAnLicpIHtcbiAgICAgICAgc3RyaW5nICs9ICcuJztcbiAgICAgICAgd2hpbGUgKG5leHQoKSAmJiBjaCA+PSAnMCcgJiYgY2ggPD0gJzknKSB7XG4gICAgICAgICAgc3RyaW5nICs9IGNoO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoY2ggPT09ICdlJyB8fCBjaCA9PT0gJ0UnKSB7XG4gICAgICAgIHN0cmluZyArPSBjaDtcbiAgICAgICAgbmV4dCgpO1xuICAgICAgICBpZiAoY2ggPT09ICctJyB8fCBjaCA9PT0gJysnKSB7XG4gICAgICAgICAgc3RyaW5nICs9IGNoO1xuICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgfVxuICAgICAgICB3aGlsZSAoY2ggPj0gJzAnICYmIGNoIDw9ICc5Jykge1xuICAgICAgICAgIHN0cmluZyArPSBjaDtcbiAgICAgICAgICBuZXh0KCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIG51bWJlciA9ICtzdHJpbmc7XG4gICAgICBpZiAoIWlzRmluaXRlKG51bWJlcikpIHtcbiAgICAgICAgZXJyb3IoJ0JhZCBudW1iZXInKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChCaWdOdW1iZXIgPT0gbnVsbCkgQmlnTnVtYmVyID0gcmVxdWlyZSgnYmlnbnVtYmVyLmpzJyk7XG4gICAgICAgIC8vaWYgKG51bWJlciA+IDkwMDcxOTkyNTQ3NDA5OTIgfHwgbnVtYmVyIDwgLTkwMDcxOTkyNTQ3NDA5OTIpXG4gICAgICAgIC8vIEJpZ251bWJlciBoYXMgc3RyaWN0ZXIgY2hlY2s6IGV2ZXJ5dGhpbmcgd2l0aCBsZW5ndGggPiAxNSBkaWdpdHMgZGlzYWxsb3dlZFxuICAgICAgICBpZiAoc3RyaW5nLmxlbmd0aCA+IDE1KVxuICAgICAgICAgIHJldHVybiBfb3B0aW9ucy5zdG9yZUFzU3RyaW5nXG4gICAgICAgICAgICA/IHN0cmluZ1xuICAgICAgICAgICAgOiBfb3B0aW9ucy51c2VOYXRpdmVCaWdJbnRcbiAgICAgICAgICAgID8gQmlnSW50KHN0cmluZylcbiAgICAgICAgICAgIDogbmV3IEJpZ051bWJlcihzdHJpbmcpO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgcmV0dXJuICFfb3B0aW9ucy5hbHdheXNQYXJzZUFzQmlnXG4gICAgICAgICAgICA/IG51bWJlclxuICAgICAgICAgICAgOiBfb3B0aW9ucy51c2VOYXRpdmVCaWdJbnRcbiAgICAgICAgICAgID8gQmlnSW50KG51bWJlcilcbiAgICAgICAgICAgIDogbmV3IEJpZ051bWJlcihudW1iZXIpO1xuICAgICAgfVxuICAgIH0sXG4gICAgc3RyaW5nID0gZnVuY3Rpb24gKCkge1xuICAgICAgLy8gUGFyc2UgYSBzdHJpbmcgdmFsdWUuXG5cbiAgICAgIHZhciBoZXgsXG4gICAgICAgIGksXG4gICAgICAgIHN0cmluZyA9ICcnLFxuICAgICAgICB1ZmZmZjtcblxuICAgICAgLy8gV2hlbiBwYXJzaW5nIGZvciBzdHJpbmcgdmFsdWVzLCB3ZSBtdXN0IGxvb2sgZm9yIFwiIGFuZCBcXCBjaGFyYWN0ZXJzLlxuXG4gICAgICBpZiAoY2ggPT09ICdcIicpIHtcbiAgICAgICAgdmFyIHN0YXJ0QXQgPSBhdDtcbiAgICAgICAgd2hpbGUgKG5leHQoKSkge1xuICAgICAgICAgIGlmIChjaCA9PT0gJ1wiJykge1xuICAgICAgICAgICAgaWYgKGF0IC0gMSA+IHN0YXJ0QXQpIHN0cmluZyArPSB0ZXh0LnN1YnN0cmluZyhzdGFydEF0LCBhdCAtIDEpO1xuICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICAgICAgcmV0dXJuIHN0cmluZztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGNoID09PSAnXFxcXCcpIHtcbiAgICAgICAgICAgIGlmIChhdCAtIDEgPiBzdGFydEF0KSBzdHJpbmcgKz0gdGV4dC5zdWJzdHJpbmcoc3RhcnRBdCwgYXQgLSAxKTtcbiAgICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgICAgIGlmIChjaCA9PT0gJ3UnKSB7XG4gICAgICAgICAgICAgIHVmZmZmID0gMDtcbiAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IDQ7IGkgKz0gMSkge1xuICAgICAgICAgICAgICAgIGhleCA9IHBhcnNlSW50KG5leHQoKSwgMTYpO1xuICAgICAgICAgICAgICAgIGlmICghaXNGaW5pdGUoaGV4KSkge1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHVmZmZmID0gdWZmZmYgKiAxNiArIGhleDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBzdHJpbmcgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSh1ZmZmZik7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBlc2NhcGVlW2NoXSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgc3RyaW5nICs9IGVzY2FwZWVbY2hdO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzdGFydEF0ID0gYXQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBlcnJvcignQmFkIHN0cmluZycpO1xuICAgIH0sXG4gICAgd2hpdGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBTa2lwIHdoaXRlc3BhY2UuXG5cbiAgICAgIHdoaWxlIChjaCAmJiBjaCA8PSAnICcpIHtcbiAgICAgICAgbmV4dCgpO1xuICAgICAgfVxuICAgIH0sXG4gICAgd29yZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIHRydWUsIGZhbHNlLCBvciBudWxsLlxuXG4gICAgICBzd2l0Y2ggKGNoKSB7XG4gICAgICAgIGNhc2UgJ3QnOlxuICAgICAgICAgIG5leHQoJ3QnKTtcbiAgICAgICAgICBuZXh0KCdyJyk7XG4gICAgICAgICAgbmV4dCgndScpO1xuICAgICAgICAgIG5leHQoJ2UnKTtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgY2FzZSAnZic6XG4gICAgICAgICAgbmV4dCgnZicpO1xuICAgICAgICAgIG5leHQoJ2EnKTtcbiAgICAgICAgICBuZXh0KCdsJyk7XG4gICAgICAgICAgbmV4dCgncycpO1xuICAgICAgICAgIG5leHQoJ2UnKTtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIGNhc2UgJ24nOlxuICAgICAgICAgIG5leHQoJ24nKTtcbiAgICAgICAgICBuZXh0KCd1Jyk7XG4gICAgICAgICAgbmV4dCgnbCcpO1xuICAgICAgICAgIG5leHQoJ2wnKTtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGVycm9yKFwiVW5leHBlY3RlZCAnXCIgKyBjaCArIFwiJ1wiKTtcbiAgICB9LFxuICAgIHZhbHVlLCAvLyBQbGFjZSBob2xkZXIgZm9yIHRoZSB2YWx1ZSBmdW5jdGlvbi5cbiAgICBhcnJheSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIFBhcnNlIGFuIGFycmF5IHZhbHVlLlxuXG4gICAgICB2YXIgYXJyYXkgPSBbXTtcblxuICAgICAgaWYgKGNoID09PSAnWycpIHtcbiAgICAgICAgbmV4dCgnWycpO1xuICAgICAgICB3aGl0ZSgpO1xuICAgICAgICBpZiAoY2ggPT09ICddJykge1xuICAgICAgICAgIG5leHQoJ10nKTtcbiAgICAgICAgICByZXR1cm4gYXJyYXk7IC8vIGVtcHR5IGFycmF5XG4gICAgICAgIH1cbiAgICAgICAgd2hpbGUgKGNoKSB7XG4gICAgICAgICAgYXJyYXkucHVzaCh2YWx1ZSgpKTtcbiAgICAgICAgICB3aGl0ZSgpO1xuICAgICAgICAgIGlmIChjaCA9PT0gJ10nKSB7XG4gICAgICAgICAgICBuZXh0KCddJyk7XG4gICAgICAgICAgICByZXR1cm4gYXJyYXk7XG4gICAgICAgICAgfVxuICAgICAgICAgIG5leHQoJywnKTtcbiAgICAgICAgICB3aGl0ZSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBlcnJvcignQmFkIGFycmF5Jyk7XG4gICAgfSxcbiAgICBvYmplY3QgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBQYXJzZSBhbiBvYmplY3QgdmFsdWUuXG5cbiAgICAgIHZhciBrZXksXG4gICAgICAgIG9iamVjdCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cbiAgICAgIGlmIChjaCA9PT0gJ3snKSB7XG4gICAgICAgIG5leHQoJ3snKTtcbiAgICAgICAgd2hpdGUoKTtcbiAgICAgICAgaWYgKGNoID09PSAnfScpIHtcbiAgICAgICAgICBuZXh0KCd9Jyk7XG4gICAgICAgICAgcmV0dXJuIG9iamVjdDsgLy8gZW1wdHkgb2JqZWN0XG4gICAgICAgIH1cbiAgICAgICAgd2hpbGUgKGNoKSB7XG4gICAgICAgICAga2V5ID0gc3RyaW5nKCk7XG4gICAgICAgICAgd2hpdGUoKTtcbiAgICAgICAgICBuZXh0KCc6Jyk7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgX29wdGlvbnMuc3RyaWN0ID09PSB0cnVlICYmXG4gICAgICAgICAgICBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSlcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGVycm9yKCdEdXBsaWNhdGUga2V5IFwiJyArIGtleSArICdcIicpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChzdXNwZWN0UHJvdG9SeC50ZXN0KGtleSkgPT09IHRydWUpIHtcbiAgICAgICAgICAgIGlmIChfb3B0aW9ucy5wcm90b0FjdGlvbiA9PT0gJ2Vycm9yJykge1xuICAgICAgICAgICAgICBlcnJvcignT2JqZWN0IGNvbnRhaW5zIGZvcmJpZGRlbiBwcm90b3R5cGUgcHJvcGVydHknKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoX29wdGlvbnMucHJvdG9BY3Rpb24gPT09ICdpZ25vcmUnKSB7XG4gICAgICAgICAgICAgIHZhbHVlKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBvYmplY3Rba2V5XSA9IHZhbHVlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmIChzdXNwZWN0Q29uc3RydWN0b3JSeC50ZXN0KGtleSkgPT09IHRydWUpIHtcbiAgICAgICAgICAgIGlmIChfb3B0aW9ucy5jb25zdHJ1Y3RvckFjdGlvbiA9PT0gJ2Vycm9yJykge1xuICAgICAgICAgICAgICBlcnJvcignT2JqZWN0IGNvbnRhaW5zIGZvcmJpZGRlbiBjb25zdHJ1Y3RvciBwcm9wZXJ0eScpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChfb3B0aW9ucy5jb25zdHJ1Y3RvckFjdGlvbiA9PT0gJ2lnbm9yZScpIHtcbiAgICAgICAgICAgICAgdmFsdWUoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIG9iamVjdFtrZXldID0gdmFsdWUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb2JqZWN0W2tleV0gPSB2YWx1ZSgpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHdoaXRlKCk7XG4gICAgICAgICAgaWYgKGNoID09PSAnfScpIHtcbiAgICAgICAgICAgIG5leHQoJ30nKTtcbiAgICAgICAgICAgIHJldHVybiBvYmplY3Q7XG4gICAgICAgICAgfVxuICAgICAgICAgIG5leHQoJywnKTtcbiAgICAgICAgICB3aGl0ZSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBlcnJvcignQmFkIG9iamVjdCcpO1xuICAgIH07XG5cbiAgdmFsdWUgPSBmdW5jdGlvbiAoKSB7XG4gICAgLy8gUGFyc2UgYSBKU09OIHZhbHVlLiBJdCBjb3VsZCBiZSBhbiBvYmplY3QsIGFuIGFycmF5LCBhIHN0cmluZywgYSBudW1iZXIsXG4gICAgLy8gb3IgYSB3b3JkLlxuXG4gICAgd2hpdGUoKTtcbiAgICBzd2l0Y2ggKGNoKSB7XG4gICAgICBjYXNlICd7JzpcbiAgICAgICAgcmV0dXJuIG9iamVjdCgpO1xuICAgICAgY2FzZSAnWyc6XG4gICAgICAgIHJldHVybiBhcnJheSgpO1xuICAgICAgY2FzZSAnXCInOlxuICAgICAgICByZXR1cm4gc3RyaW5nKCk7XG4gICAgICBjYXNlICctJzpcbiAgICAgICAgcmV0dXJuIG51bWJlcigpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGNoID49ICcwJyAmJiBjaCA8PSAnOScgPyBudW1iZXIoKSA6IHdvcmQoKTtcbiAgICB9XG4gIH07XG5cbiAgLy8gUmV0dXJuIHRoZSBqc29uX3BhcnNlIGZ1bmN0aW9uLiBJdCB3aWxsIGhhdmUgYWNjZXNzIHRvIGFsbCBvZiB0aGUgYWJvdmVcbiAgLy8gZnVuY3Rpb25zIGFuZCB2YXJpYWJsZXMuXG5cbiAgcmV0dXJuIGZ1bmN0aW9uIChzb3VyY2UsIHJldml2ZXIpIHtcbiAgICB2YXIgcmVzdWx0O1xuXG4gICAgdGV4dCA9IHNvdXJjZSArICcnO1xuICAgIGF0ID0gMDtcbiAgICBjaCA9ICcgJztcbiAgICByZXN1bHQgPSB2YWx1ZSgpO1xuICAgIHdoaXRlKCk7XG4gICAgaWYgKGNoKSB7XG4gICAgICBlcnJvcignU3ludGF4IGVycm9yJyk7XG4gICAgfVxuXG4gICAgLy8gSWYgdGhlcmUgaXMgYSByZXZpdmVyIGZ1bmN0aW9uLCB3ZSByZWN1cnNpdmVseSB3YWxrIHRoZSBuZXcgc3RydWN0dXJlLFxuICAgIC8vIHBhc3NpbmcgZWFjaCBuYW1lL3ZhbHVlIHBhaXIgdG8gdGhlIHJldml2ZXIgZnVuY3Rpb24gZm9yIHBvc3NpYmxlXG4gICAgLy8gdHJhbnNmb3JtYXRpb24sIHN0YXJ0aW5nIHdpdGggYSB0ZW1wb3Jhcnkgcm9vdCBvYmplY3QgdGhhdCBob2xkcyB0aGUgcmVzdWx0XG4gICAgLy8gaW4gYW4gZW1wdHkga2V5LiBJZiB0aGVyZSBpcyBub3QgYSByZXZpdmVyIGZ1bmN0aW9uLCB3ZSBzaW1wbHkgcmV0dXJuIHRoZVxuICAgIC8vIHJlc3VsdC5cblxuICAgIHJldHVybiB0eXBlb2YgcmV2aXZlciA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgPyAoZnVuY3Rpb24gd2Fsayhob2xkZXIsIGtleSkge1xuICAgICAgICAgIHZhciBrLFxuICAgICAgICAgICAgdixcbiAgICAgICAgICAgIHZhbHVlID0gaG9sZGVyW2tleV07XG4gICAgICAgICAgaWYgKHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKHZhbHVlKS5mb3JFYWNoKGZ1bmN0aW9uIChrKSB7XG4gICAgICAgICAgICAgIHYgPSB3YWxrKHZhbHVlLCBrKTtcbiAgICAgICAgICAgICAgaWYgKHYgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHZhbHVlW2tdID0gdjtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBkZWxldGUgdmFsdWVba107XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gcmV2aXZlci5jYWxsKGhvbGRlciwga2V5LCB2YWx1ZSk7XG4gICAgICAgIH0pKHsgJyc6IHJlc3VsdCB9LCAnJylcbiAgICAgIDogcmVzdWx0O1xuICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBqc29uX3BhcnNlO1xuIiwidmFyIEJpZ051bWJlciA9IHJlcXVpcmUoJ2JpZ251bWJlci5qcycpO1xuXG4vKlxuICAgIGpzb24yLmpzXG4gICAgMjAxMy0wNS0yNlxuXG4gICAgUHVibGljIERvbWFpbi5cblxuICAgIE5PIFdBUlJBTlRZIEVYUFJFU1NFRCBPUiBJTVBMSUVELiBVU0UgQVQgWU9VUiBPV04gUklTSy5cblxuICAgIFNlZSBodHRwOi8vd3d3LkpTT04ub3JnL2pzLmh0bWxcblxuXG4gICAgVGhpcyBjb2RlIHNob3VsZCBiZSBtaW5pZmllZCBiZWZvcmUgZGVwbG95bWVudC5cbiAgICBTZWUgaHR0cDovL2phdmFzY3JpcHQuY3JvY2tmb3JkLmNvbS9qc21pbi5odG1sXG5cbiAgICBVU0UgWU9VUiBPV04gQ09QWS4gSVQgSVMgRVhUUkVNRUxZIFVOV0lTRSBUTyBMT0FEIENPREUgRlJPTSBTRVJWRVJTIFlPVSBET1xuICAgIE5PVCBDT05UUk9MLlxuXG5cbiAgICBUaGlzIGZpbGUgY3JlYXRlcyBhIGdsb2JhbCBKU09OIG9iamVjdCBjb250YWluaW5nIHR3byBtZXRob2RzOiBzdHJpbmdpZnlcbiAgICBhbmQgcGFyc2UuXG5cbiAgICAgICAgSlNPTi5zdHJpbmdpZnkodmFsdWUsIHJlcGxhY2VyLCBzcGFjZSlcbiAgICAgICAgICAgIHZhbHVlICAgICAgIGFueSBKYXZhU2NyaXB0IHZhbHVlLCB1c3VhbGx5IGFuIG9iamVjdCBvciBhcnJheS5cblxuICAgICAgICAgICAgcmVwbGFjZXIgICAgYW4gb3B0aW9uYWwgcGFyYW1ldGVyIHRoYXQgZGV0ZXJtaW5lcyBob3cgb2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMgYXJlIHN0cmluZ2lmaWVkIGZvciBvYmplY3RzLiBJdCBjYW4gYmUgYVxuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gb3IgYW4gYXJyYXkgb2Ygc3RyaW5ncy5cblxuICAgICAgICAgICAgc3BhY2UgICAgICAgYW4gb3B0aW9uYWwgcGFyYW1ldGVyIHRoYXQgc3BlY2lmaWVzIHRoZSBpbmRlbnRhdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgb2YgbmVzdGVkIHN0cnVjdHVyZXMuIElmIGl0IGlzIG9taXR0ZWQsIHRoZSB0ZXh0IHdpbGxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJlIHBhY2tlZCB3aXRob3V0IGV4dHJhIHdoaXRlc3BhY2UuIElmIGl0IGlzIGEgbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXQgd2lsbCBzcGVjaWZ5IHRoZSBudW1iZXIgb2Ygc3BhY2VzIHRvIGluZGVudCBhdCBlYWNoXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXZlbC4gSWYgaXQgaXMgYSBzdHJpbmcgKHN1Y2ggYXMgJ1xcdCcgb3IgJyZuYnNwOycpLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXQgY29udGFpbnMgdGhlIGNoYXJhY3RlcnMgdXNlZCB0byBpbmRlbnQgYXQgZWFjaCBsZXZlbC5cblxuICAgICAgICAgICAgVGhpcyBtZXRob2QgcHJvZHVjZXMgYSBKU09OIHRleHQgZnJvbSBhIEphdmFTY3JpcHQgdmFsdWUuXG5cbiAgICAgICAgICAgIFdoZW4gYW4gb2JqZWN0IHZhbHVlIGlzIGZvdW5kLCBpZiB0aGUgb2JqZWN0IGNvbnRhaW5zIGEgdG9KU09OXG4gICAgICAgICAgICBtZXRob2QsIGl0cyB0b0pTT04gbWV0aG9kIHdpbGwgYmUgY2FsbGVkIGFuZCB0aGUgcmVzdWx0IHdpbGwgYmVcbiAgICAgICAgICAgIHN0cmluZ2lmaWVkLiBBIHRvSlNPTiBtZXRob2QgZG9lcyBub3Qgc2VyaWFsaXplOiBpdCByZXR1cm5zIHRoZVxuICAgICAgICAgICAgdmFsdWUgcmVwcmVzZW50ZWQgYnkgdGhlIG5hbWUvdmFsdWUgcGFpciB0aGF0IHNob3VsZCBiZSBzZXJpYWxpemVkLFxuICAgICAgICAgICAgb3IgdW5kZWZpbmVkIGlmIG5vdGhpbmcgc2hvdWxkIGJlIHNlcmlhbGl6ZWQuIFRoZSB0b0pTT04gbWV0aG9kXG4gICAgICAgICAgICB3aWxsIGJlIHBhc3NlZCB0aGUga2V5IGFzc29jaWF0ZWQgd2l0aCB0aGUgdmFsdWUsIGFuZCB0aGlzIHdpbGwgYmVcbiAgICAgICAgICAgIGJvdW5kIHRvIHRoZSB2YWx1ZVxuXG4gICAgICAgICAgICBGb3IgZXhhbXBsZSwgdGhpcyB3b3VsZCBzZXJpYWxpemUgRGF0ZXMgYXMgSVNPIHN0cmluZ3MuXG5cbiAgICAgICAgICAgICAgICBEYXRlLnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGYobikge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gRm9ybWF0IGludGVnZXJzIHRvIGhhdmUgYXQgbGVhc3QgdHdvIGRpZ2l0cy5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuIDwgMTAgPyAnMCcgKyBuIDogbjtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFVUQ0Z1bGxZZWFyKCkgICArICctJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgZih0aGlzLmdldFVUQ01vbnRoKCkgKyAxKSArICctJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgZih0aGlzLmdldFVUQ0RhdGUoKSkgICAgICArICdUJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgZih0aGlzLmdldFVUQ0hvdXJzKCkpICAgICArICc6JyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgZih0aGlzLmdldFVUQ01pbnV0ZXMoKSkgICArICc6JyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgZih0aGlzLmdldFVUQ1NlY29uZHMoKSkgICArICdaJztcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBZb3UgY2FuIHByb3ZpZGUgYW4gb3B0aW9uYWwgcmVwbGFjZXIgbWV0aG9kLiBJdCB3aWxsIGJlIHBhc3NlZCB0aGVcbiAgICAgICAgICAgIGtleSBhbmQgdmFsdWUgb2YgZWFjaCBtZW1iZXIsIHdpdGggdGhpcyBib3VuZCB0byB0aGUgY29udGFpbmluZ1xuICAgICAgICAgICAgb2JqZWN0LiBUaGUgdmFsdWUgdGhhdCBpcyByZXR1cm5lZCBmcm9tIHlvdXIgbWV0aG9kIHdpbGwgYmVcbiAgICAgICAgICAgIHNlcmlhbGl6ZWQuIElmIHlvdXIgbWV0aG9kIHJldHVybnMgdW5kZWZpbmVkLCB0aGVuIHRoZSBtZW1iZXIgd2lsbFxuICAgICAgICAgICAgYmUgZXhjbHVkZWQgZnJvbSB0aGUgc2VyaWFsaXphdGlvbi5cblxuICAgICAgICAgICAgSWYgdGhlIHJlcGxhY2VyIHBhcmFtZXRlciBpcyBhbiBhcnJheSBvZiBzdHJpbmdzLCB0aGVuIGl0IHdpbGwgYmVcbiAgICAgICAgICAgIHVzZWQgdG8gc2VsZWN0IHRoZSBtZW1iZXJzIHRvIGJlIHNlcmlhbGl6ZWQuIEl0IGZpbHRlcnMgdGhlIHJlc3VsdHNcbiAgICAgICAgICAgIHN1Y2ggdGhhdCBvbmx5IG1lbWJlcnMgd2l0aCBrZXlzIGxpc3RlZCBpbiB0aGUgcmVwbGFjZXIgYXJyYXkgYXJlXG4gICAgICAgICAgICBzdHJpbmdpZmllZC5cblxuICAgICAgICAgICAgVmFsdWVzIHRoYXQgZG8gbm90IGhhdmUgSlNPTiByZXByZXNlbnRhdGlvbnMsIHN1Y2ggYXMgdW5kZWZpbmVkIG9yXG4gICAgICAgICAgICBmdW5jdGlvbnMsIHdpbGwgbm90IGJlIHNlcmlhbGl6ZWQuIFN1Y2ggdmFsdWVzIGluIG9iamVjdHMgd2lsbCBiZVxuICAgICAgICAgICAgZHJvcHBlZDsgaW4gYXJyYXlzIHRoZXkgd2lsbCBiZSByZXBsYWNlZCB3aXRoIG51bGwuIFlvdSBjYW4gdXNlXG4gICAgICAgICAgICBhIHJlcGxhY2VyIGZ1bmN0aW9uIHRvIHJlcGxhY2UgdGhvc2Ugd2l0aCBKU09OIHZhbHVlcy5cbiAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHVuZGVmaW5lZCkgcmV0dXJucyB1bmRlZmluZWQuXG5cbiAgICAgICAgICAgIFRoZSBvcHRpb25hbCBzcGFjZSBwYXJhbWV0ZXIgcHJvZHVjZXMgYSBzdHJpbmdpZmljYXRpb24gb2YgdGhlXG4gICAgICAgICAgICB2YWx1ZSB0aGF0IGlzIGZpbGxlZCB3aXRoIGxpbmUgYnJlYWtzIGFuZCBpbmRlbnRhdGlvbiB0byBtYWtlIGl0XG4gICAgICAgICAgICBlYXNpZXIgdG8gcmVhZC5cblxuICAgICAgICAgICAgSWYgdGhlIHNwYWNlIHBhcmFtZXRlciBpcyBhIG5vbi1lbXB0eSBzdHJpbmcsIHRoZW4gdGhhdCBzdHJpbmcgd2lsbFxuICAgICAgICAgICAgYmUgdXNlZCBmb3IgaW5kZW50YXRpb24uIElmIHRoZSBzcGFjZSBwYXJhbWV0ZXIgaXMgYSBudW1iZXIsIHRoZW5cbiAgICAgICAgICAgIHRoZSBpbmRlbnRhdGlvbiB3aWxsIGJlIHRoYXQgbWFueSBzcGFjZXMuXG5cbiAgICAgICAgICAgIEV4YW1wbGU6XG5cbiAgICAgICAgICAgIHRleHQgPSBKU09OLnN0cmluZ2lmeShbJ2UnLCB7cGx1cmlidXM6ICd1bnVtJ31dKTtcbiAgICAgICAgICAgIC8vIHRleHQgaXMgJ1tcImVcIix7XCJwbHVyaWJ1c1wiOlwidW51bVwifV0nXG5cblxuICAgICAgICAgICAgdGV4dCA9IEpTT04uc3RyaW5naWZ5KFsnZScsIHtwbHVyaWJ1czogJ3VudW0nfV0sIG51bGwsICdcXHQnKTtcbiAgICAgICAgICAgIC8vIHRleHQgaXMgJ1tcXG5cXHRcImVcIixcXG5cXHR7XFxuXFx0XFx0XCJwbHVyaWJ1c1wiOiBcInVudW1cIlxcblxcdH1cXG5dJ1xuXG4gICAgICAgICAgICB0ZXh0ID0gSlNPTi5zdHJpbmdpZnkoW25ldyBEYXRlKCldLCBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzW2tleV0gaW5zdGFuY2VvZiBEYXRlID9cbiAgICAgICAgICAgICAgICAgICAgJ0RhdGUoJyArIHRoaXNba2V5XSArICcpJyA6IHZhbHVlO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyB0ZXh0IGlzICdbXCJEYXRlKC0tLWN1cnJlbnQgdGltZS0tLSlcIl0nXG5cblxuICAgICAgICBKU09OLnBhcnNlKHRleHQsIHJldml2ZXIpXG4gICAgICAgICAgICBUaGlzIG1ldGhvZCBwYXJzZXMgYSBKU09OIHRleHQgdG8gcHJvZHVjZSBhbiBvYmplY3Qgb3IgYXJyYXkuXG4gICAgICAgICAgICBJdCBjYW4gdGhyb3cgYSBTeW50YXhFcnJvciBleGNlcHRpb24uXG5cbiAgICAgICAgICAgIFRoZSBvcHRpb25hbCByZXZpdmVyIHBhcmFtZXRlciBpcyBhIGZ1bmN0aW9uIHRoYXQgY2FuIGZpbHRlciBhbmRcbiAgICAgICAgICAgIHRyYW5zZm9ybSB0aGUgcmVzdWx0cy4gSXQgcmVjZWl2ZXMgZWFjaCBvZiB0aGUga2V5cyBhbmQgdmFsdWVzLFxuICAgICAgICAgICAgYW5kIGl0cyByZXR1cm4gdmFsdWUgaXMgdXNlZCBpbnN0ZWFkIG9mIHRoZSBvcmlnaW5hbCB2YWx1ZS5cbiAgICAgICAgICAgIElmIGl0IHJldHVybnMgd2hhdCBpdCByZWNlaXZlZCwgdGhlbiB0aGUgc3RydWN0dXJlIGlzIG5vdCBtb2RpZmllZC5cbiAgICAgICAgICAgIElmIGl0IHJldHVybnMgdW5kZWZpbmVkIHRoZW4gdGhlIG1lbWJlciBpcyBkZWxldGVkLlxuXG4gICAgICAgICAgICBFeGFtcGxlOlxuXG4gICAgICAgICAgICAvLyBQYXJzZSB0aGUgdGV4dC4gVmFsdWVzIHRoYXQgbG9vayBsaWtlIElTTyBkYXRlIHN0cmluZ3Mgd2lsbFxuICAgICAgICAgICAgLy8gYmUgY29udmVydGVkIHRvIERhdGUgb2JqZWN0cy5cblxuICAgICAgICAgICAgbXlEYXRhID0gSlNPTi5wYXJzZSh0ZXh0LCBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHZhciBhO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgIGEgPVxuL14oXFxkezR9KS0oXFxkezJ9KS0oXFxkezJ9KVQoXFxkezJ9KTooXFxkezJ9KTooXFxkezJ9KD86XFwuXFxkKik/KVokLy5leGVjKHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRGF0ZShEYXRlLlVUQygrYVsxXSwgK2FbMl0gLSAxLCArYVszXSwgK2FbNF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgK2FbNV0sICthWzZdKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIG15RGF0YSA9IEpTT04ucGFyc2UoJ1tcIkRhdGUoMDkvMDkvMjAwMSlcIl0nLCBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHZhciBkO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZS5zbGljZSgwLCA1KSA9PT0gJ0RhdGUoJyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUuc2xpY2UoLTEpID09PSAnKScpIHtcbiAgICAgICAgICAgICAgICAgICAgZCA9IG5ldyBEYXRlKHZhbHVlLnNsaWNlKDUsIC0xKSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgICB9KTtcblxuXG4gICAgVGhpcyBpcyBhIHJlZmVyZW5jZSBpbXBsZW1lbnRhdGlvbi4gWW91IGFyZSBmcmVlIHRvIGNvcHksIG1vZGlmeSwgb3JcbiAgICByZWRpc3RyaWJ1dGUuXG4qL1xuXG4vKmpzbGludCBldmlsOiB0cnVlLCByZWdleHA6IHRydWUgKi9cblxuLyptZW1iZXJzIFwiXCIsIFwiXFxiXCIsIFwiXFx0XCIsIFwiXFxuXCIsIFwiXFxmXCIsIFwiXFxyXCIsIFwiXFxcIlwiLCBKU09OLCBcIlxcXFxcIiwgYXBwbHksXG4gICAgY2FsbCwgY2hhckNvZGVBdCwgZ2V0VVRDRGF0ZSwgZ2V0VVRDRnVsbFllYXIsIGdldFVUQ0hvdXJzLFxuICAgIGdldFVUQ01pbnV0ZXMsIGdldFVUQ01vbnRoLCBnZXRVVENTZWNvbmRzLCBoYXNPd25Qcm9wZXJ0eSwgam9pbixcbiAgICBsYXN0SW5kZXgsIGxlbmd0aCwgcGFyc2UsIHByb3RvdHlwZSwgcHVzaCwgcmVwbGFjZSwgc2xpY2UsIHN0cmluZ2lmeSxcbiAgICB0ZXN0LCB0b0pTT04sIHRvU3RyaW5nLCB2YWx1ZU9mXG4qL1xuXG5cbi8vIENyZWF0ZSBhIEpTT04gb2JqZWN0IG9ubHkgaWYgb25lIGRvZXMgbm90IGFscmVhZHkgZXhpc3QuIFdlIGNyZWF0ZSB0aGVcbi8vIG1ldGhvZHMgaW4gYSBjbG9zdXJlIHRvIGF2b2lkIGNyZWF0aW5nIGdsb2JhbCB2YXJpYWJsZXMuXG5cbnZhciBKU09OID0gbW9kdWxlLmV4cG9ydHM7XG5cbihmdW5jdGlvbiAoKSB7XG4gICAgJ3VzZSBzdHJpY3QnO1xuXG4gICAgZnVuY3Rpb24gZihuKSB7XG4gICAgICAgIC8vIEZvcm1hdCBpbnRlZ2VycyB0byBoYXZlIGF0IGxlYXN0IHR3byBkaWdpdHMuXG4gICAgICAgIHJldHVybiBuIDwgMTAgPyAnMCcgKyBuIDogbjtcbiAgICB9XG5cbiAgICB2YXIgY3ggPSAvW1xcdTAwMDBcXHUwMGFkXFx1MDYwMC1cXHUwNjA0XFx1MDcwZlxcdTE3YjRcXHUxN2I1XFx1MjAwYy1cXHUyMDBmXFx1MjAyOC1cXHUyMDJmXFx1MjA2MC1cXHUyMDZmXFx1ZmVmZlxcdWZmZjAtXFx1ZmZmZl0vZyxcbiAgICAgICAgZXNjYXBhYmxlID0gL1tcXFxcXFxcIlxceDAwLVxceDFmXFx4N2YtXFx4OWZcXHUwMGFkXFx1MDYwMC1cXHUwNjA0XFx1MDcwZlxcdTE3YjRcXHUxN2I1XFx1MjAwYy1cXHUyMDBmXFx1MjAyOC1cXHUyMDJmXFx1MjA2MC1cXHUyMDZmXFx1ZmVmZlxcdWZmZjAtXFx1ZmZmZl0vZyxcbiAgICAgICAgZ2FwLFxuICAgICAgICBpbmRlbnQsXG4gICAgICAgIG1ldGEgPSB7ICAgIC8vIHRhYmxlIG9mIGNoYXJhY3RlciBzdWJzdGl0dXRpb25zXG4gICAgICAgICAgICAnXFxiJzogJ1xcXFxiJyxcbiAgICAgICAgICAgICdcXHQnOiAnXFxcXHQnLFxuICAgICAgICAgICAgJ1xcbic6ICdcXFxcbicsXG4gICAgICAgICAgICAnXFxmJzogJ1xcXFxmJyxcbiAgICAgICAgICAgICdcXHInOiAnXFxcXHInLFxuICAgICAgICAgICAgJ1wiJyA6ICdcXFxcXCInLFxuICAgICAgICAgICAgJ1xcXFwnOiAnXFxcXFxcXFwnXG4gICAgICAgIH0sXG4gICAgICAgIHJlcDtcblxuXG4gICAgZnVuY3Rpb24gcXVvdGUoc3RyaW5nKSB7XG5cbi8vIElmIHRoZSBzdHJpbmcgY29udGFpbnMgbm8gY29udHJvbCBjaGFyYWN0ZXJzLCBubyBxdW90ZSBjaGFyYWN0ZXJzLCBhbmQgbm9cbi8vIGJhY2tzbGFzaCBjaGFyYWN0ZXJzLCB0aGVuIHdlIGNhbiBzYWZlbHkgc2xhcCBzb21lIHF1b3RlcyBhcm91bmQgaXQuXG4vLyBPdGhlcndpc2Ugd2UgbXVzdCBhbHNvIHJlcGxhY2UgdGhlIG9mZmVuZGluZyBjaGFyYWN0ZXJzIHdpdGggc2FmZSBlc2NhcGVcbi8vIHNlcXVlbmNlcy5cblxuICAgICAgICBlc2NhcGFibGUubGFzdEluZGV4ID0gMDtcbiAgICAgICAgcmV0dXJuIGVzY2FwYWJsZS50ZXN0KHN0cmluZykgPyAnXCInICsgc3RyaW5nLnJlcGxhY2UoZXNjYXBhYmxlLCBmdW5jdGlvbiAoYSkge1xuICAgICAgICAgICAgdmFyIGMgPSBtZXRhW2FdO1xuICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiBjID09PSAnc3RyaW5nJ1xuICAgICAgICAgICAgICAgID8gY1xuICAgICAgICAgICAgICAgIDogJ1xcXFx1JyArICgnMDAwMCcgKyBhLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpKS5zbGljZSgtNCk7XG4gICAgICAgIH0pICsgJ1wiJyA6ICdcIicgKyBzdHJpbmcgKyAnXCInO1xuICAgIH1cblxuXG4gICAgZnVuY3Rpb24gc3RyKGtleSwgaG9sZGVyKSB7XG5cbi8vIFByb2R1Y2UgYSBzdHJpbmcgZnJvbSBob2xkZXJba2V5XS5cblxuICAgICAgICB2YXIgaSwgICAgICAgICAgLy8gVGhlIGxvb3AgY291bnRlci5cbiAgICAgICAgICAgIGssICAgICAgICAgIC8vIFRoZSBtZW1iZXIga2V5LlxuICAgICAgICAgICAgdiwgICAgICAgICAgLy8gVGhlIG1lbWJlciB2YWx1ZS5cbiAgICAgICAgICAgIGxlbmd0aCxcbiAgICAgICAgICAgIG1pbmQgPSBnYXAsXG4gICAgICAgICAgICBwYXJ0aWFsLFxuICAgICAgICAgICAgdmFsdWUgPSBob2xkZXJba2V5XSxcbiAgICAgICAgICAgIGlzQmlnTnVtYmVyID0gdmFsdWUgIT0gbnVsbCAmJiAodmFsdWUgaW5zdGFuY2VvZiBCaWdOdW1iZXIgfHwgQmlnTnVtYmVyLmlzQmlnTnVtYmVyKHZhbHVlKSk7XG5cbi8vIElmIHRoZSB2YWx1ZSBoYXMgYSB0b0pTT04gbWV0aG9kLCBjYWxsIGl0IHRvIG9idGFpbiBhIHJlcGxhY2VtZW50IHZhbHVlLlxuXG4gICAgICAgIGlmICh2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmXG4gICAgICAgICAgICAgICAgdHlwZW9mIHZhbHVlLnRvSlNPTiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS50b0pTT04oa2V5KTtcbiAgICAgICAgfVxuXG4vLyBJZiB3ZSB3ZXJlIGNhbGxlZCB3aXRoIGEgcmVwbGFjZXIgZnVuY3Rpb24sIHRoZW4gY2FsbCB0aGUgcmVwbGFjZXIgdG9cbi8vIG9idGFpbiBhIHJlcGxhY2VtZW50IHZhbHVlLlxuXG4gICAgICAgIGlmICh0eXBlb2YgcmVwID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IHJlcC5jYWxsKGhvbGRlciwga2V5LCB2YWx1ZSk7XG4gICAgICAgIH1cblxuLy8gV2hhdCBoYXBwZW5zIG5leHQgZGVwZW5kcyBvbiB0aGUgdmFsdWUncyB0eXBlLlxuXG4gICAgICAgIHN3aXRjaCAodHlwZW9mIHZhbHVlKSB7XG4gICAgICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICAgICAgICBpZiAoaXNCaWdOdW1iZXIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBxdW90ZSh2YWx1ZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgY2FzZSAnbnVtYmVyJzpcblxuLy8gSlNPTiBudW1iZXJzIG11c3QgYmUgZmluaXRlLiBFbmNvZGUgbm9uLWZpbml0ZSBudW1iZXJzIGFzIG51bGwuXG5cbiAgICAgICAgICAgIHJldHVybiBpc0Zpbml0ZSh2YWx1ZSkgPyBTdHJpbmcodmFsdWUpIDogJ251bGwnO1xuXG4gICAgICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgICBjYXNlICdudWxsJzpcbiAgICAgICAgY2FzZSAnYmlnaW50JzpcblxuLy8gSWYgdGhlIHZhbHVlIGlzIGEgYm9vbGVhbiBvciBudWxsLCBjb252ZXJ0IGl0IHRvIGEgc3RyaW5nLiBOb3RlOlxuLy8gdHlwZW9mIG51bGwgZG9lcyBub3QgcHJvZHVjZSAnbnVsbCcuIFRoZSBjYXNlIGlzIGluY2x1ZGVkIGhlcmUgaW5cbi8vIHRoZSByZW1vdGUgY2hhbmNlIHRoYXQgdGhpcyBnZXRzIGZpeGVkIHNvbWVkYXkuXG5cbiAgICAgICAgICAgIHJldHVybiBTdHJpbmcodmFsdWUpO1xuXG4vLyBJZiB0aGUgdHlwZSBpcyAnb2JqZWN0Jywgd2UgbWlnaHQgYmUgZGVhbGluZyB3aXRoIGFuIG9iamVjdCBvciBhbiBhcnJheSBvclxuLy8gbnVsbC5cblxuICAgICAgICBjYXNlICdvYmplY3QnOlxuXG4vLyBEdWUgdG8gYSBzcGVjaWZpY2F0aW9uIGJsdW5kZXIgaW4gRUNNQVNjcmlwdCwgdHlwZW9mIG51bGwgaXMgJ29iamVjdCcsXG4vLyBzbyB3YXRjaCBvdXQgZm9yIHRoYXQgY2FzZS5cblxuICAgICAgICAgICAgaWYgKCF2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAnbnVsbCc7XG4gICAgICAgICAgICB9XG5cbi8vIE1ha2UgYW4gYXJyYXkgdG8gaG9sZCB0aGUgcGFydGlhbCByZXN1bHRzIG9mIHN0cmluZ2lmeWluZyB0aGlzIG9iamVjdCB2YWx1ZS5cblxuICAgICAgICAgICAgZ2FwICs9IGluZGVudDtcbiAgICAgICAgICAgIHBhcnRpYWwgPSBbXTtcblxuLy8gSXMgdGhlIHZhbHVlIGFuIGFycmF5P1xuXG4gICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5hcHBseSh2YWx1ZSkgPT09ICdbb2JqZWN0IEFycmF5XScpIHtcblxuLy8gVGhlIHZhbHVlIGlzIGFuIGFycmF5LiBTdHJpbmdpZnkgZXZlcnkgZWxlbWVudC4gVXNlIG51bGwgYXMgYSBwbGFjZWhvbGRlclxuLy8gZm9yIG5vbi1KU09OIHZhbHVlcy5cblxuICAgICAgICAgICAgICAgIGxlbmd0aCA9IHZhbHVlLmxlbmd0aDtcbiAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgcGFydGlhbFtpXSA9IHN0cihpLCB2YWx1ZSkgfHwgJ251bGwnO1xuICAgICAgICAgICAgICAgIH1cblxuLy8gSm9pbiBhbGwgb2YgdGhlIGVsZW1lbnRzIHRvZ2V0aGVyLCBzZXBhcmF0ZWQgd2l0aCBjb21tYXMsIGFuZCB3cmFwIHRoZW0gaW5cbi8vIGJyYWNrZXRzLlxuXG4gICAgICAgICAgICAgICAgdiA9IHBhcnRpYWwubGVuZ3RoID09PSAwXG4gICAgICAgICAgICAgICAgICAgID8gJ1tdJ1xuICAgICAgICAgICAgICAgICAgICA6IGdhcFxuICAgICAgICAgICAgICAgICAgICA/ICdbXFxuJyArIGdhcCArIHBhcnRpYWwuam9pbignLFxcbicgKyBnYXApICsgJ1xcbicgKyBtaW5kICsgJ10nXG4gICAgICAgICAgICAgICAgICAgIDogJ1snICsgcGFydGlhbC5qb2luKCcsJykgKyAnXSc7XG4gICAgICAgICAgICAgICAgZ2FwID0gbWluZDtcbiAgICAgICAgICAgICAgICByZXR1cm4gdjtcbiAgICAgICAgICAgIH1cblxuLy8gSWYgdGhlIHJlcGxhY2VyIGlzIGFuIGFycmF5LCB1c2UgaXQgdG8gc2VsZWN0IHRoZSBtZW1iZXJzIHRvIGJlIHN0cmluZ2lmaWVkLlxuXG4gICAgICAgICAgICBpZiAocmVwICYmIHR5cGVvZiByZXAgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgbGVuZ3RoID0gcmVwLmxlbmd0aDtcbiAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiByZXBbaV0gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBrID0gcmVwW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgdiA9IHN0cihrLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRpYWwucHVzaChxdW90ZShrKSArIChnYXAgPyAnOiAnIDogJzonKSArIHYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcblxuLy8gT3RoZXJ3aXNlLCBpdGVyYXRlIHRocm91Z2ggYWxsIG9mIHRoZSBrZXlzIGluIHRoZSBvYmplY3QuXG5cbiAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyh2YWx1ZSkuZm9yRWFjaChmdW5jdGlvbihrKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciB2ID0gc3RyKGssIHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRpYWwucHVzaChxdW90ZShrKSArIChnYXAgPyAnOiAnIDogJzonKSArIHYpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbi8vIEpvaW4gYWxsIG9mIHRoZSBtZW1iZXIgdGV4dHMgdG9nZXRoZXIsIHNlcGFyYXRlZCB3aXRoIGNvbW1hcyxcbi8vIGFuZCB3cmFwIHRoZW0gaW4gYnJhY2VzLlxuXG4gICAgICAgICAgICB2ID0gcGFydGlhbC5sZW5ndGggPT09IDBcbiAgICAgICAgICAgICAgICA/ICd7fSdcbiAgICAgICAgICAgICAgICA6IGdhcFxuICAgICAgICAgICAgICAgID8gJ3tcXG4nICsgZ2FwICsgcGFydGlhbC5qb2luKCcsXFxuJyArIGdhcCkgKyAnXFxuJyArIG1pbmQgKyAnfSdcbiAgICAgICAgICAgICAgICA6ICd7JyArIHBhcnRpYWwuam9pbignLCcpICsgJ30nO1xuICAgICAgICAgICAgZ2FwID0gbWluZDtcbiAgICAgICAgICAgIHJldHVybiB2O1xuICAgICAgICB9XG4gICAgfVxuXG4vLyBJZiB0aGUgSlNPTiBvYmplY3QgZG9lcyBub3QgeWV0IGhhdmUgYSBzdHJpbmdpZnkgbWV0aG9kLCBnaXZlIGl0IG9uZS5cblxuICAgIGlmICh0eXBlb2YgSlNPTi5zdHJpbmdpZnkgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgSlNPTi5zdHJpbmdpZnkgPSBmdW5jdGlvbiAodmFsdWUsIHJlcGxhY2VyLCBzcGFjZSkge1xuXG4vLyBUaGUgc3RyaW5naWZ5IG1ldGhvZCB0YWtlcyBhIHZhbHVlIGFuZCBhbiBvcHRpb25hbCByZXBsYWNlciwgYW5kIGFuIG9wdGlvbmFsXG4vLyBzcGFjZSBwYXJhbWV0ZXIsIGFuZCByZXR1cm5zIGEgSlNPTiB0ZXh0LiBUaGUgcmVwbGFjZXIgY2FuIGJlIGEgZnVuY3Rpb25cbi8vIHRoYXQgY2FuIHJlcGxhY2UgdmFsdWVzLCBvciBhbiBhcnJheSBvZiBzdHJpbmdzIHRoYXQgd2lsbCBzZWxlY3QgdGhlIGtleXMuXG4vLyBBIGRlZmF1bHQgcmVwbGFjZXIgbWV0aG9kIGNhbiBiZSBwcm92aWRlZC4gVXNlIG9mIHRoZSBzcGFjZSBwYXJhbWV0ZXIgY2FuXG4vLyBwcm9kdWNlIHRleHQgdGhhdCBpcyBtb3JlIGVhc2lseSByZWFkYWJsZS5cblxuICAgICAgICAgICAgdmFyIGk7XG4gICAgICAgICAgICBnYXAgPSAnJztcbiAgICAgICAgICAgIGluZGVudCA9ICcnO1xuXG4vLyBJZiB0aGUgc3BhY2UgcGFyYW1ldGVyIGlzIGEgbnVtYmVyLCBtYWtlIGFuIGluZGVudCBzdHJpbmcgY29udGFpbmluZyB0aGF0XG4vLyBtYW55IHNwYWNlcy5cblxuICAgICAgICAgICAgaWYgKHR5cGVvZiBzcGFjZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgc3BhY2U7IGkgKz0gMSkge1xuICAgICAgICAgICAgICAgICAgICBpbmRlbnQgKz0gJyAnO1xuICAgICAgICAgICAgICAgIH1cblxuLy8gSWYgdGhlIHNwYWNlIHBhcmFtZXRlciBpcyBhIHN0cmluZywgaXQgd2lsbCBiZSB1c2VkIGFzIHRoZSBpbmRlbnQgc3RyaW5nLlxuXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBzcGFjZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICBpbmRlbnQgPSBzcGFjZTtcbiAgICAgICAgICAgIH1cblxuLy8gSWYgdGhlcmUgaXMgYSByZXBsYWNlciwgaXQgbXVzdCBiZSBhIGZ1bmN0aW9uIG9yIGFuIGFycmF5LlxuLy8gT3RoZXJ3aXNlLCB0aHJvdyBhbiBlcnJvci5cblxuICAgICAgICAgICAgcmVwID0gcmVwbGFjZXI7XG4gICAgICAgICAgICBpZiAocmVwbGFjZXIgJiYgdHlwZW9mIHJlcGxhY2VyICE9PSAnZnVuY3Rpb24nICYmXG4gICAgICAgICAgICAgICAgICAgICh0eXBlb2YgcmVwbGFjZXIgIT09ICdvYmplY3QnIHx8XG4gICAgICAgICAgICAgICAgICAgIHR5cGVvZiByZXBsYWNlci5sZW5ndGggIT09ICdudW1iZXInKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSlNPTi5zdHJpbmdpZnknKTtcbiAgICAgICAgICAgIH1cblxuLy8gTWFrZSBhIGZha2Ugcm9vdCBvYmplY3QgY29udGFpbmluZyBvdXIgdmFsdWUgdW5kZXIgdGhlIGtleSBvZiAnJy5cbi8vIFJldHVybiB0aGUgcmVzdWx0IG9mIHN0cmluZ2lmeWluZyB0aGUgdmFsdWUuXG5cbiAgICAgICAgICAgIHJldHVybiBzdHIoJycsIHsnJzogdmFsdWV9KTtcbiAgICAgICAgfTtcbiAgICB9XG59KCkpO1xuIiwiKGZ1bmN0aW9uIChuYW1lLCBjb250ZXh0LCBkZWZpbml0aW9uKSB7XG4gIGlmICh0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyAmJiBtb2R1bGUuZXhwb3J0cykgbW9kdWxlLmV4cG9ydHMgPSBkZWZpbml0aW9uKCk7XG4gIGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkgZGVmaW5lKGRlZmluaXRpb24pO1xuICBlbHNlIGNvbnRleHRbbmFtZV0gPSBkZWZpbml0aW9uKCk7XG59KSgndXJsam9pbicsIHRoaXMsIGZ1bmN0aW9uICgpIHtcblxuICBmdW5jdGlvbiBub3JtYWxpemUgKHN0ckFycmF5KSB7XG4gICAgdmFyIHJlc3VsdEFycmF5ID0gW107XG4gICAgaWYgKHN0ckFycmF5Lmxlbmd0aCA9PT0gMCkgeyByZXR1cm4gJyc7IH1cblxuICAgIGlmICh0eXBlb2Ygc3RyQXJyYXlbMF0gIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVcmwgbXVzdCBiZSBhIHN0cmluZy4gUmVjZWl2ZWQgJyArIHN0ckFycmF5WzBdKTtcbiAgICB9XG5cbiAgICAvLyBJZiB0aGUgZmlyc3QgcGFydCBpcyBhIHBsYWluIHByb3RvY29sLCB3ZSBjb21iaW5lIGl0IHdpdGggdGhlIG5leHQgcGFydC5cbiAgICBpZiAoc3RyQXJyYXlbMF0ubWF0Y2goL15bXi86XSs6XFwvKiQvKSAmJiBzdHJBcnJheS5sZW5ndGggPiAxKSB7XG4gICAgICB2YXIgZmlyc3QgPSBzdHJBcnJheS5zaGlmdCgpO1xuICAgICAgc3RyQXJyYXlbMF0gPSBmaXJzdCArIHN0ckFycmF5WzBdO1xuICAgIH1cblxuICAgIC8vIFRoZXJlIG11c3QgYmUgdHdvIG9yIHRocmVlIHNsYXNoZXMgaW4gdGhlIGZpbGUgcHJvdG9jb2wsIHR3byBzbGFzaGVzIGluIGFueXRoaW5nIGVsc2UuXG4gICAgaWYgKHN0ckFycmF5WzBdLm1hdGNoKC9eZmlsZTpcXC9cXC9cXC8vKSkge1xuICAgICAgc3RyQXJyYXlbMF0gPSBzdHJBcnJheVswXS5yZXBsYWNlKC9eKFteLzpdKyk6XFwvKi8sICckMTovLy8nKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RyQXJyYXlbMF0gPSBzdHJBcnJheVswXS5yZXBsYWNlKC9eKFteLzpdKyk6XFwvKi8sICckMTovLycpO1xuICAgIH1cblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3RyQXJyYXkubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBjb21wb25lbnQgPSBzdHJBcnJheVtpXTtcblxuICAgICAgaWYgKHR5cGVvZiBjb21wb25lbnQgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1VybCBtdXN0IGJlIGEgc3RyaW5nLiBSZWNlaXZlZCAnICsgY29tcG9uZW50KTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbXBvbmVudCA9PT0gJycpIHsgY29udGludWU7IH1cblxuICAgICAgaWYgKGkgPiAwKSB7XG4gICAgICAgIC8vIFJlbW92aW5nIHRoZSBzdGFydGluZyBzbGFzaGVzIGZvciBlYWNoIGNvbXBvbmVudCBidXQgdGhlIGZpcnN0LlxuICAgICAgICBjb21wb25lbnQgPSBjb21wb25lbnQucmVwbGFjZSgvXltcXC9dKy8sICcnKTtcbiAgICAgIH1cbiAgICAgIGlmIChpIDwgc3RyQXJyYXkubGVuZ3RoIC0gMSkge1xuICAgICAgICAvLyBSZW1vdmluZyB0aGUgZW5kaW5nIHNsYXNoZXMgZm9yIGVhY2ggY29tcG9uZW50IGJ1dCB0aGUgbGFzdC5cbiAgICAgICAgY29tcG9uZW50ID0gY29tcG9uZW50LnJlcGxhY2UoL1tcXC9dKyQvLCAnJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBGb3IgdGhlIGxhc3QgY29tcG9uZW50IHdlIHdpbGwgY29tYmluZSBtdWx0aXBsZSBzbGFzaGVzIHRvIGEgc2luZ2xlIG9uZS5cbiAgICAgICAgY29tcG9uZW50ID0gY29tcG9uZW50LnJlcGxhY2UoL1tcXC9dKyQvLCAnLycpO1xuICAgICAgfVxuXG4gICAgICByZXN1bHRBcnJheS5wdXNoKGNvbXBvbmVudCk7XG5cbiAgICB9XG5cbiAgICB2YXIgc3RyID0gcmVzdWx0QXJyYXkuam9pbignLycpO1xuICAgIC8vIEVhY2ggaW5wdXQgY29tcG9uZW50IGlzIG5vdyBzZXBhcmF0ZWQgYnkgYSBzaW5nbGUgc2xhc2ggZXhjZXB0IHRoZSBwb3NzaWJsZSBmaXJzdCBwbGFpbiBwcm90b2NvbCBwYXJ0LlxuXG4gICAgLy8gcmVtb3ZlIHRyYWlsaW5nIHNsYXNoIGJlZm9yZSBwYXJhbWV0ZXJzIG9yIGhhc2hcbiAgICBzdHIgPSBzdHIucmVwbGFjZSgvXFwvKFxcP3wmfCNbXiFdKS9nLCAnJDEnKTtcblxuICAgIC8vIHJlcGxhY2UgPyBpbiBwYXJhbWV0ZXJzIHdpdGggJlxuICAgIHZhciBwYXJ0cyA9IHN0ci5zcGxpdCgnPycpO1xuICAgIHN0ciA9IHBhcnRzLnNoaWZ0KCkgKyAocGFydHMubGVuZ3RoID4gMCA/ICc/JzogJycpICsgcGFydHMuam9pbignJicpO1xuXG4gICAgcmV0dXJuIHN0cjtcbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGlucHV0O1xuXG4gICAgaWYgKHR5cGVvZiBhcmd1bWVudHNbMF0gPT09ICdvYmplY3QnKSB7XG4gICAgICBpbnB1dCA9IGFyZ3VtZW50c1swXTtcbiAgICB9IGVsc2Uge1xuICAgICAgaW5wdXQgPSBbXS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vcm1hbGl6ZShpbnB1dCk7XG4gIH07XG5cbn0pO1xuIiwiLy8gQXhpb3MgdjEuNy40IENvcHlyaWdodCAoYykgMjAyNCBNYXR0IFphYnJpc2tpZSBhbmQgY29udHJpYnV0b3JzXG4ndXNlIHN0cmljdCc7XG5cbmZ1bmN0aW9uIGJpbmQoZm4sIHRoaXNBcmcpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHdyYXAoKSB7XG4gICAgcmV0dXJuIGZuLmFwcGx5KHRoaXNBcmcsIGFyZ3VtZW50cyk7XG4gIH07XG59XG5cbi8vIHV0aWxzIGlzIGEgbGlicmFyeSBvZiBnZW5lcmljIGhlbHBlciBmdW5jdGlvbnMgbm9uLXNwZWNpZmljIHRvIGF4aW9zXG5cbmNvbnN0IHt0b1N0cmluZ30gPSBPYmplY3QucHJvdG90eXBlO1xuY29uc3Qge2dldFByb3RvdHlwZU9mfSA9IE9iamVjdDtcblxuY29uc3Qga2luZE9mID0gKGNhY2hlID0+IHRoaW5nID0+IHtcbiAgICBjb25zdCBzdHIgPSB0b1N0cmluZy5jYWxsKHRoaW5nKTtcbiAgICByZXR1cm4gY2FjaGVbc3RyXSB8fCAoY2FjaGVbc3RyXSA9IHN0ci5zbGljZSg4LCAtMSkudG9Mb3dlckNhc2UoKSk7XG59KShPYmplY3QuY3JlYXRlKG51bGwpKTtcblxuY29uc3Qga2luZE9mVGVzdCA9ICh0eXBlKSA9PiB7XG4gIHR5cGUgPSB0eXBlLnRvTG93ZXJDYXNlKCk7XG4gIHJldHVybiAodGhpbmcpID0+IGtpbmRPZih0aGluZykgPT09IHR5cGVcbn07XG5cbmNvbnN0IHR5cGVPZlRlc3QgPSB0eXBlID0+IHRoaW5nID0+IHR5cGVvZiB0aGluZyA9PT0gdHlwZTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhbiBBcnJheVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhbiBBcnJheSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IHtpc0FycmF5fSA9IEFycmF5O1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIHVuZGVmaW5lZFxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIHZhbHVlIGlzIHVuZGVmaW5lZCwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzVW5kZWZpbmVkID0gdHlwZU9mVGVzdCgndW5kZWZpbmVkJyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBCdWZmZXJcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgQnVmZmVyLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNCdWZmZXIodmFsKSB7XG4gIHJldHVybiB2YWwgIT09IG51bGwgJiYgIWlzVW5kZWZpbmVkKHZhbCkgJiYgdmFsLmNvbnN0cnVjdG9yICE9PSBudWxsICYmICFpc1VuZGVmaW5lZCh2YWwuY29uc3RydWN0b3IpXG4gICAgJiYgaXNGdW5jdGlvbih2YWwuY29uc3RydWN0b3IuaXNCdWZmZXIpICYmIHZhbC5jb25zdHJ1Y3Rvci5pc0J1ZmZlcih2YWwpO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGFuIEFycmF5QnVmZmVyXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhbiBBcnJheUJ1ZmZlciwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzQXJyYXlCdWZmZXIgPSBraW5kT2ZUZXN0KCdBcnJheUJ1ZmZlcicpO1xuXG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSB2aWV3IG9uIGFuIEFycmF5QnVmZmVyXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIHZpZXcgb24gYW4gQXJyYXlCdWZmZXIsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0FycmF5QnVmZmVyVmlldyh2YWwpIHtcbiAgbGV0IHJlc3VsdDtcbiAgaWYgKCh0eXBlb2YgQXJyYXlCdWZmZXIgIT09ICd1bmRlZmluZWQnKSAmJiAoQXJyYXlCdWZmZXIuaXNWaWV3KSkge1xuICAgIHJlc3VsdCA9IEFycmF5QnVmZmVyLmlzVmlldyh2YWwpO1xuICB9IGVsc2Uge1xuICAgIHJlc3VsdCA9ICh2YWwpICYmICh2YWwuYnVmZmVyKSAmJiAoaXNBcnJheUJ1ZmZlcih2YWwuYnVmZmVyKSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIFN0cmluZ1xuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBTdHJpbmcsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc1N0cmluZyA9IHR5cGVPZlRlc3QoJ3N0cmluZycpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRnVuY3Rpb25cbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBGdW5jdGlvbiwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzRnVuY3Rpb24gPSB0eXBlT2ZUZXN0KCdmdW5jdGlvbicpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgTnVtYmVyXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIE51bWJlciwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzTnVtYmVyID0gdHlwZU9mVGVzdCgnbnVtYmVyJyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYW4gT2JqZWN0XG4gKlxuICogQHBhcmFtIHsqfSB0aGluZyBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGFuIE9iamVjdCwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzT2JqZWN0ID0gKHRoaW5nKSA9PiB0aGluZyAhPT0gbnVsbCAmJiB0eXBlb2YgdGhpbmcgPT09ICdvYmplY3QnO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgQm9vbGVhblxuICpcbiAqIEBwYXJhbSB7Kn0gdGhpbmcgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgQm9vbGVhbiwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzQm9vbGVhbiA9IHRoaW5nID0+IHRoaW5nID09PSB0cnVlIHx8IHRoaW5nID09PSBmYWxzZTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIHBsYWluIE9iamVjdFxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBwbGFpbiBPYmplY3QsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc1BsYWluT2JqZWN0ID0gKHZhbCkgPT4ge1xuICBpZiAoa2luZE9mKHZhbCkgIT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgcHJvdG90eXBlID0gZ2V0UHJvdG90eXBlT2YodmFsKTtcbiAgcmV0dXJuIChwcm90b3R5cGUgPT09IG51bGwgfHwgcHJvdG90eXBlID09PSBPYmplY3QucHJvdG90eXBlIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihwcm90b3R5cGUpID09PSBudWxsKSAmJiAhKFN5bWJvbC50b1N0cmluZ1RhZyBpbiB2YWwpICYmICEoU3ltYm9sLml0ZXJhdG9yIGluIHZhbCk7XG59O1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRGF0ZVxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBEYXRlLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNEYXRlID0ga2luZE9mVGVzdCgnRGF0ZScpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRmlsZVxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBGaWxlLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNGaWxlID0ga2luZE9mVGVzdCgnRmlsZScpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgQmxvYlxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBCbG9iLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNCbG9iID0ga2luZE9mVGVzdCgnQmxvYicpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRmlsZUxpc3RcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgRmlsZSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzRmlsZUxpc3QgPSBraW5kT2ZUZXN0KCdGaWxlTGlzdCcpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgU3RyZWFtXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIFN0cmVhbSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzU3RyZWFtID0gKHZhbCkgPT4gaXNPYmplY3QodmFsKSAmJiBpc0Z1bmN0aW9uKHZhbC5waXBlKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEZvcm1EYXRhXG4gKlxuICogQHBhcmFtIHsqfSB0aGluZyBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGFuIEZvcm1EYXRhLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNGb3JtRGF0YSA9ICh0aGluZykgPT4ge1xuICBsZXQga2luZDtcbiAgcmV0dXJuIHRoaW5nICYmIChcbiAgICAodHlwZW9mIEZvcm1EYXRhID09PSAnZnVuY3Rpb24nICYmIHRoaW5nIGluc3RhbmNlb2YgRm9ybURhdGEpIHx8IChcbiAgICAgIGlzRnVuY3Rpb24odGhpbmcuYXBwZW5kKSAmJiAoXG4gICAgICAgIChraW5kID0ga2luZE9mKHRoaW5nKSkgPT09ICdmb3JtZGF0YScgfHxcbiAgICAgICAgLy8gZGV0ZWN0IGZvcm0tZGF0YSBpbnN0YW5jZVxuICAgICAgICAoa2luZCA9PT0gJ29iamVjdCcgJiYgaXNGdW5jdGlvbih0aGluZy50b1N0cmluZykgJiYgdGhpbmcudG9TdHJpbmcoKSA9PT0gJ1tvYmplY3QgRm9ybURhdGFdJylcbiAgICAgIClcbiAgICApXG4gIClcbn07XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBVUkxTZWFyY2hQYXJhbXMgb2JqZWN0XG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIFVSTFNlYXJjaFBhcmFtcyBvYmplY3QsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc1VSTFNlYXJjaFBhcmFtcyA9IGtpbmRPZlRlc3QoJ1VSTFNlYXJjaFBhcmFtcycpO1xuXG5jb25zdCBbaXNSZWFkYWJsZVN0cmVhbSwgaXNSZXF1ZXN0LCBpc1Jlc3BvbnNlLCBpc0hlYWRlcnNdID0gWydSZWFkYWJsZVN0cmVhbScsICdSZXF1ZXN0JywgJ1Jlc3BvbnNlJywgJ0hlYWRlcnMnXS5tYXAoa2luZE9mVGVzdCk7XG5cbi8qKlxuICogVHJpbSBleGNlc3Mgd2hpdGVzcGFjZSBvZmYgdGhlIGJlZ2lubmluZyBhbmQgZW5kIG9mIGEgc3RyaW5nXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHN0ciBUaGUgU3RyaW5nIHRvIHRyaW1cbiAqXG4gKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgU3RyaW5nIGZyZWVkIG9mIGV4Y2VzcyB3aGl0ZXNwYWNlXG4gKi9cbmNvbnN0IHRyaW0gPSAoc3RyKSA9PiBzdHIudHJpbSA/XG4gIHN0ci50cmltKCkgOiBzdHIucmVwbGFjZSgvXltcXHNcXHVGRUZGXFx4QTBdK3xbXFxzXFx1RkVGRlxceEEwXSskL2csICcnKTtcblxuLyoqXG4gKiBJdGVyYXRlIG92ZXIgYW4gQXJyYXkgb3IgYW4gT2JqZWN0IGludm9raW5nIGEgZnVuY3Rpb24gZm9yIGVhY2ggaXRlbS5cbiAqXG4gKiBJZiBgb2JqYCBpcyBhbiBBcnJheSBjYWxsYmFjayB3aWxsIGJlIGNhbGxlZCBwYXNzaW5nXG4gKiB0aGUgdmFsdWUsIGluZGV4LCBhbmQgY29tcGxldGUgYXJyYXkgZm9yIGVhY2ggaXRlbS5cbiAqXG4gKiBJZiAnb2JqJyBpcyBhbiBPYmplY3QgY2FsbGJhY2sgd2lsbCBiZSBjYWxsZWQgcGFzc2luZ1xuICogdGhlIHZhbHVlLCBrZXksIGFuZCBjb21wbGV0ZSBvYmplY3QgZm9yIGVhY2ggcHJvcGVydHkuXG4gKlxuICogQHBhcmFtIHtPYmplY3R8QXJyYXl9IG9iaiBUaGUgb2JqZWN0IHRvIGl0ZXJhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBjYWxsYmFjayB0byBpbnZva2UgZm9yIGVhY2ggaXRlbVxuICpcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW2FsbE93bktleXMgPSBmYWxzZV1cbiAqIEByZXR1cm5zIHthbnl9XG4gKi9cbmZ1bmN0aW9uIGZvckVhY2gob2JqLCBmbiwge2FsbE93bktleXMgPSBmYWxzZX0gPSB7fSkge1xuICAvLyBEb24ndCBib3RoZXIgaWYgbm8gdmFsdWUgcHJvdmlkZWRcbiAgaWYgKG9iaiA9PT0gbnVsbCB8fCB0eXBlb2Ygb2JqID09PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGxldCBpO1xuICBsZXQgbDtcblxuICAvLyBGb3JjZSBhbiBhcnJheSBpZiBub3QgYWxyZWFkeSBzb21ldGhpbmcgaXRlcmFibGVcbiAgaWYgKHR5cGVvZiBvYmogIT09ICdvYmplY3QnKSB7XG4gICAgLyplc2xpbnQgbm8tcGFyYW0tcmVhc3NpZ246MCovXG4gICAgb2JqID0gW29ial07XG4gIH1cblxuICBpZiAoaXNBcnJheShvYmopKSB7XG4gICAgLy8gSXRlcmF0ZSBvdmVyIGFycmF5IHZhbHVlc1xuICAgIGZvciAoaSA9IDAsIGwgPSBvYmoubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICBmbi5jYWxsKG51bGwsIG9ialtpXSwgaSwgb2JqKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gSXRlcmF0ZSBvdmVyIG9iamVjdCBrZXlzXG4gICAgY29uc3Qga2V5cyA9IGFsbE93bktleXMgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhvYmopIDogT2JqZWN0LmtleXMob2JqKTtcbiAgICBjb25zdCBsZW4gPSBrZXlzLmxlbmd0aDtcbiAgICBsZXQga2V5O1xuXG4gICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBrZXkgPSBrZXlzW2ldO1xuICAgICAgZm4uY2FsbChudWxsLCBvYmpba2V5XSwga2V5LCBvYmopO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBmaW5kS2V5KG9iaiwga2V5KSB7XG4gIGtleSA9IGtleS50b0xvd2VyQ2FzZSgpO1xuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMob2JqKTtcbiAgbGV0IGkgPSBrZXlzLmxlbmd0aDtcbiAgbGV0IF9rZXk7XG4gIHdoaWxlIChpLS0gPiAwKSB7XG4gICAgX2tleSA9IGtleXNbaV07XG4gICAgaWYgKGtleSA9PT0gX2tleS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICByZXR1cm4gX2tleTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbmNvbnN0IF9nbG9iYWwgPSAoKCkgPT4ge1xuICAvKmVzbGludCBuby11bmRlZjowKi9cbiAgaWYgKHR5cGVvZiBnbG9iYWxUaGlzICE9PSBcInVuZGVmaW5lZFwiKSByZXR1cm4gZ2xvYmFsVGhpcztcbiAgcmV0dXJuIHR5cGVvZiBzZWxmICE9PSBcInVuZGVmaW5lZFwiID8gc2VsZiA6ICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/IHdpbmRvdyA6IGdsb2JhbClcbn0pKCk7XG5cbmNvbnN0IGlzQ29udGV4dERlZmluZWQgPSAoY29udGV4dCkgPT4gIWlzVW5kZWZpbmVkKGNvbnRleHQpICYmIGNvbnRleHQgIT09IF9nbG9iYWw7XG5cbi8qKlxuICogQWNjZXB0cyB2YXJhcmdzIGV4cGVjdGluZyBlYWNoIGFyZ3VtZW50IHRvIGJlIGFuIG9iamVjdCwgdGhlblxuICogaW1tdXRhYmx5IG1lcmdlcyB0aGUgcHJvcGVydGllcyBvZiBlYWNoIG9iamVjdCBhbmQgcmV0dXJucyByZXN1bHQuXG4gKlxuICogV2hlbiBtdWx0aXBsZSBvYmplY3RzIGNvbnRhaW4gdGhlIHNhbWUga2V5IHRoZSBsYXRlciBvYmplY3QgaW5cbiAqIHRoZSBhcmd1bWVudHMgbGlzdCB3aWxsIHRha2UgcHJlY2VkZW5jZS5cbiAqXG4gKiBFeGFtcGxlOlxuICpcbiAqIGBgYGpzXG4gKiB2YXIgcmVzdWx0ID0gbWVyZ2Uoe2ZvbzogMTIzfSwge2ZvbzogNDU2fSk7XG4gKiBjb25zb2xlLmxvZyhyZXN1bHQuZm9vKTsgLy8gb3V0cHV0cyA0NTZcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmoxIE9iamVjdCB0byBtZXJnZVxuICpcbiAqIEByZXR1cm5zIHtPYmplY3R9IFJlc3VsdCBvZiBhbGwgbWVyZ2UgcHJvcGVydGllc1xuICovXG5mdW5jdGlvbiBtZXJnZSgvKiBvYmoxLCBvYmoyLCBvYmozLCAuLi4gKi8pIHtcbiAgY29uc3Qge2Nhc2VsZXNzfSA9IGlzQ29udGV4dERlZmluZWQodGhpcykgJiYgdGhpcyB8fCB7fTtcbiAgY29uc3QgcmVzdWx0ID0ge307XG4gIGNvbnN0IGFzc2lnblZhbHVlID0gKHZhbCwga2V5KSA9PiB7XG4gICAgY29uc3QgdGFyZ2V0S2V5ID0gY2FzZWxlc3MgJiYgZmluZEtleShyZXN1bHQsIGtleSkgfHwga2V5O1xuICAgIGlmIChpc1BsYWluT2JqZWN0KHJlc3VsdFt0YXJnZXRLZXldKSAmJiBpc1BsYWluT2JqZWN0KHZhbCkpIHtcbiAgICAgIHJlc3VsdFt0YXJnZXRLZXldID0gbWVyZ2UocmVzdWx0W3RhcmdldEtleV0sIHZhbCk7XG4gICAgfSBlbHNlIGlmIChpc1BsYWluT2JqZWN0KHZhbCkpIHtcbiAgICAgIHJlc3VsdFt0YXJnZXRLZXldID0gbWVyZ2Uoe30sIHZhbCk7XG4gICAgfSBlbHNlIGlmIChpc0FycmF5KHZhbCkpIHtcbiAgICAgIHJlc3VsdFt0YXJnZXRLZXldID0gdmFsLnNsaWNlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdFt0YXJnZXRLZXldID0gdmFsO1xuICAgIH1cbiAgfTtcblxuICBmb3IgKGxldCBpID0gMCwgbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICBhcmd1bWVudHNbaV0gJiYgZm9yRWFjaChhcmd1bWVudHNbaV0sIGFzc2lnblZhbHVlKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIEV4dGVuZHMgb2JqZWN0IGEgYnkgbXV0YWJseSBhZGRpbmcgdG8gaXQgdGhlIHByb3BlcnRpZXMgb2Ygb2JqZWN0IGIuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGEgVGhlIG9iamVjdCB0byBiZSBleHRlbmRlZFxuICogQHBhcmFtIHtPYmplY3R9IGIgVGhlIG9iamVjdCB0byBjb3B5IHByb3BlcnRpZXMgZnJvbVxuICogQHBhcmFtIHtPYmplY3R9IHRoaXNBcmcgVGhlIG9iamVjdCB0byBiaW5kIGZ1bmN0aW9uIHRvXG4gKlxuICogQHBhcmFtIHtCb29sZWFufSBbYWxsT3duS2V5c11cbiAqIEByZXR1cm5zIHtPYmplY3R9IFRoZSByZXN1bHRpbmcgdmFsdWUgb2Ygb2JqZWN0IGFcbiAqL1xuY29uc3QgZXh0ZW5kID0gKGEsIGIsIHRoaXNBcmcsIHthbGxPd25LZXlzfT0ge30pID0+IHtcbiAgZm9yRWFjaChiLCAodmFsLCBrZXkpID0+IHtcbiAgICBpZiAodGhpc0FyZyAmJiBpc0Z1bmN0aW9uKHZhbCkpIHtcbiAgICAgIGFba2V5XSA9IGJpbmQodmFsLCB0aGlzQXJnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYVtrZXldID0gdmFsO1xuICAgIH1cbiAgfSwge2FsbE93bktleXN9KTtcbiAgcmV0dXJuIGE7XG59O1xuXG4vKipcbiAqIFJlbW92ZSBieXRlIG9yZGVyIG1hcmtlci4gVGhpcyBjYXRjaGVzIEVGIEJCIEJGICh0aGUgVVRGLTggQk9NKVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb250ZW50IHdpdGggQk9NXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gY29udGVudCB2YWx1ZSB3aXRob3V0IEJPTVxuICovXG5jb25zdCBzdHJpcEJPTSA9IChjb250ZW50KSA9PiB7XG4gIGlmIChjb250ZW50LmNoYXJDb2RlQXQoMCkgPT09IDB4RkVGRikge1xuICAgIGNvbnRlbnQgPSBjb250ZW50LnNsaWNlKDEpO1xuICB9XG4gIHJldHVybiBjb250ZW50O1xufTtcblxuLyoqXG4gKiBJbmhlcml0IHRoZSBwcm90b3R5cGUgbWV0aG9kcyBmcm9tIG9uZSBjb25zdHJ1Y3RvciBpbnRvIGFub3RoZXJcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBzdXBlckNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge29iamVjdH0gW3Byb3BzXVxuICogQHBhcmFtIHtvYmplY3R9IFtkZXNjcmlwdG9yc11cbiAqXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuY29uc3QgaW5oZXJpdHMgPSAoY29uc3RydWN0b3IsIHN1cGVyQ29uc3RydWN0b3IsIHByb3BzLCBkZXNjcmlwdG9ycykgPT4ge1xuICBjb25zdHJ1Y3Rvci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ29uc3RydWN0b3IucHJvdG90eXBlLCBkZXNjcmlwdG9ycyk7XG4gIGNvbnN0cnVjdG9yLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IGNvbnN0cnVjdG9yO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoY29uc3RydWN0b3IsICdzdXBlcicsIHtcbiAgICB2YWx1ZTogc3VwZXJDb25zdHJ1Y3Rvci5wcm90b3R5cGVcbiAgfSk7XG4gIHByb3BzICYmIE9iamVjdC5hc3NpZ24oY29uc3RydWN0b3IucHJvdG90eXBlLCBwcm9wcyk7XG59O1xuXG4vKipcbiAqIFJlc29sdmUgb2JqZWN0IHdpdGggZGVlcCBwcm90b3R5cGUgY2hhaW4gdG8gYSBmbGF0IG9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZU9iaiBzb3VyY2Ugb2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gW2Rlc3RPYmpdXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufEJvb2xlYW59IFtmaWx0ZXJdXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcHJvcEZpbHRlcl1cbiAqXG4gKiBAcmV0dXJucyB7T2JqZWN0fVxuICovXG5jb25zdCB0b0ZsYXRPYmplY3QgPSAoc291cmNlT2JqLCBkZXN0T2JqLCBmaWx0ZXIsIHByb3BGaWx0ZXIpID0+IHtcbiAgbGV0IHByb3BzO1xuICBsZXQgaTtcbiAgbGV0IHByb3A7XG4gIGNvbnN0IG1lcmdlZCA9IHt9O1xuXG4gIGRlc3RPYmogPSBkZXN0T2JqIHx8IHt9O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZXEtbnVsbCxlcWVxZXFcbiAgaWYgKHNvdXJjZU9iaiA9PSBudWxsKSByZXR1cm4gZGVzdE9iajtcblxuICBkbyB7XG4gICAgcHJvcHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhzb3VyY2VPYmopO1xuICAgIGkgPSBwcm9wcy5sZW5ndGg7XG4gICAgd2hpbGUgKGktLSA+IDApIHtcbiAgICAgIHByb3AgPSBwcm9wc1tpXTtcbiAgICAgIGlmICgoIXByb3BGaWx0ZXIgfHwgcHJvcEZpbHRlcihwcm9wLCBzb3VyY2VPYmosIGRlc3RPYmopKSAmJiAhbWVyZ2VkW3Byb3BdKSB7XG4gICAgICAgIGRlc3RPYmpbcHJvcF0gPSBzb3VyY2VPYmpbcHJvcF07XG4gICAgICAgIG1lcmdlZFtwcm9wXSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIHNvdXJjZU9iaiA9IGZpbHRlciAhPT0gZmFsc2UgJiYgZ2V0UHJvdG90eXBlT2Yoc291cmNlT2JqKTtcbiAgfSB3aGlsZSAoc291cmNlT2JqICYmICghZmlsdGVyIHx8IGZpbHRlcihzb3VyY2VPYmosIGRlc3RPYmopKSAmJiBzb3VyY2VPYmogIT09IE9iamVjdC5wcm90b3R5cGUpO1xuXG4gIHJldHVybiBkZXN0T2JqO1xufTtcblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgYSBzdHJpbmcgZW5kcyB3aXRoIHRoZSBjaGFyYWN0ZXJzIG9mIGEgc3BlY2lmaWVkIHN0cmluZ1xuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHJcbiAqIEBwYXJhbSB7U3RyaW5nfSBzZWFyY2hTdHJpbmdcbiAqIEBwYXJhbSB7TnVtYmVyfSBbcG9zaXRpb249IDBdXG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmNvbnN0IGVuZHNXaXRoID0gKHN0ciwgc2VhcmNoU3RyaW5nLCBwb3NpdGlvbikgPT4ge1xuICBzdHIgPSBTdHJpbmcoc3RyKTtcbiAgaWYgKHBvc2l0aW9uID09PSB1bmRlZmluZWQgfHwgcG9zaXRpb24gPiBzdHIubGVuZ3RoKSB7XG4gICAgcG9zaXRpb24gPSBzdHIubGVuZ3RoO1xuICB9XG4gIHBvc2l0aW9uIC09IHNlYXJjaFN0cmluZy5sZW5ndGg7XG4gIGNvbnN0IGxhc3RJbmRleCA9IHN0ci5pbmRleE9mKHNlYXJjaFN0cmluZywgcG9zaXRpb24pO1xuICByZXR1cm4gbGFzdEluZGV4ICE9PSAtMSAmJiBsYXN0SW5kZXggPT09IHBvc2l0aW9uO1xufTtcblxuXG4vKipcbiAqIFJldHVybnMgbmV3IGFycmF5IGZyb20gYXJyYXkgbGlrZSBvYmplY3Qgb3IgbnVsbCBpZiBmYWlsZWRcbiAqXG4gKiBAcGFyYW0geyp9IFt0aGluZ11cbiAqXG4gKiBAcmV0dXJucyB7P0FycmF5fVxuICovXG5jb25zdCB0b0FycmF5ID0gKHRoaW5nKSA9PiB7XG4gIGlmICghdGhpbmcpIHJldHVybiBudWxsO1xuICBpZiAoaXNBcnJheSh0aGluZykpIHJldHVybiB0aGluZztcbiAgbGV0IGkgPSB0aGluZy5sZW5ndGg7XG4gIGlmICghaXNOdW1iZXIoaSkpIHJldHVybiBudWxsO1xuICBjb25zdCBhcnIgPSBuZXcgQXJyYXkoaSk7XG4gIHdoaWxlIChpLS0gPiAwKSB7XG4gICAgYXJyW2ldID0gdGhpbmdbaV07XG4gIH1cbiAgcmV0dXJuIGFycjtcbn07XG5cbi8qKlxuICogQ2hlY2tpbmcgaWYgdGhlIFVpbnQ4QXJyYXkgZXhpc3RzIGFuZCBpZiBpdCBkb2VzLCBpdCByZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCBjaGVja3MgaWYgdGhlXG4gKiB0aGluZyBwYXNzZWQgaW4gaXMgYW4gaW5zdGFuY2Ugb2YgVWludDhBcnJheVxuICpcbiAqIEBwYXJhbSB7VHlwZWRBcnJheX1cbiAqXG4gKiBAcmV0dXJucyB7QXJyYXl9XG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG5jb25zdCBpc1R5cGVkQXJyYXkgPSAoVHlwZWRBcnJheSA9PiB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG4gIHJldHVybiB0aGluZyA9PiB7XG4gICAgcmV0dXJuIFR5cGVkQXJyYXkgJiYgdGhpbmcgaW5zdGFuY2VvZiBUeXBlZEFycmF5O1xuICB9O1xufSkodHlwZW9mIFVpbnQ4QXJyYXkgIT09ICd1bmRlZmluZWQnICYmIGdldFByb3RvdHlwZU9mKFVpbnQ4QXJyYXkpKTtcblxuLyoqXG4gKiBGb3IgZWFjaCBlbnRyeSBpbiB0aGUgb2JqZWN0LCBjYWxsIHRoZSBmdW5jdGlvbiB3aXRoIHRoZSBrZXkgYW5kIHZhbHVlLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0PGFueSwgYW55Pn0gb2JqIC0gVGhlIG9iamVjdCB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiAtIFRoZSBmdW5jdGlvbiB0byBjYWxsIGZvciBlYWNoIGVudHJ5LlxuICpcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5jb25zdCBmb3JFYWNoRW50cnkgPSAob2JqLCBmbikgPT4ge1xuICBjb25zdCBnZW5lcmF0b3IgPSBvYmogJiYgb2JqW1N5bWJvbC5pdGVyYXRvcl07XG5cbiAgY29uc3QgaXRlcmF0b3IgPSBnZW5lcmF0b3IuY2FsbChvYmopO1xuXG4gIGxldCByZXN1bHQ7XG5cbiAgd2hpbGUgKChyZXN1bHQgPSBpdGVyYXRvci5uZXh0KCkpICYmICFyZXN1bHQuZG9uZSkge1xuICAgIGNvbnN0IHBhaXIgPSByZXN1bHQudmFsdWU7XG4gICAgZm4uY2FsbChvYmosIHBhaXJbMF0sIHBhaXJbMV0pO1xuICB9XG59O1xuXG4vKipcbiAqIEl0IHRha2VzIGEgcmVndWxhciBleHByZXNzaW9uIGFuZCBhIHN0cmluZywgYW5kIHJldHVybnMgYW4gYXJyYXkgb2YgYWxsIHRoZSBtYXRjaGVzXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHJlZ0V4cCAtIFRoZSByZWd1bGFyIGV4cHJlc3Npb24gdG8gbWF0Y2ggYWdhaW5zdC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHIgLSBUaGUgc3RyaW5nIHRvIHNlYXJjaC5cbiAqXG4gKiBAcmV0dXJucyB7QXJyYXk8Ym9vbGVhbj59XG4gKi9cbmNvbnN0IG1hdGNoQWxsID0gKHJlZ0V4cCwgc3RyKSA9PiB7XG4gIGxldCBtYXRjaGVzO1xuICBjb25zdCBhcnIgPSBbXTtcblxuICB3aGlsZSAoKG1hdGNoZXMgPSByZWdFeHAuZXhlYyhzdHIpKSAhPT0gbnVsbCkge1xuICAgIGFyci5wdXNoKG1hdGNoZXMpO1xuICB9XG5cbiAgcmV0dXJuIGFycjtcbn07XG5cbi8qIENoZWNraW5nIGlmIHRoZSBraW5kT2ZUZXN0IGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSB3aGVuIHBhc3NlZCBhbiBIVE1MRm9ybUVsZW1lbnQuICovXG5jb25zdCBpc0hUTUxGb3JtID0ga2luZE9mVGVzdCgnSFRNTEZvcm1FbGVtZW50Jyk7XG5cbmNvbnN0IHRvQ2FtZWxDYXNlID0gc3RyID0+IHtcbiAgcmV0dXJuIHN0ci50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1stX1xcc10oW2EtelxcZF0pKFxcdyopL2csXG4gICAgZnVuY3Rpb24gcmVwbGFjZXIobSwgcDEsIHAyKSB7XG4gICAgICByZXR1cm4gcDEudG9VcHBlckNhc2UoKSArIHAyO1xuICAgIH1cbiAgKTtcbn07XG5cbi8qIENyZWF0aW5nIGEgZnVuY3Rpb24gdGhhdCB3aWxsIGNoZWNrIGlmIGFuIG9iamVjdCBoYXMgYSBwcm9wZXJ0eS4gKi9cbmNvbnN0IGhhc093blByb3BlcnR5ID0gKCh7aGFzT3duUHJvcGVydHl9KSA9PiAob2JqLCBwcm9wKSA9PiBoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgcHJvcCkpKE9iamVjdC5wcm90b3R5cGUpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgUmVnRXhwIG9iamVjdFxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBSZWdFeHAgb2JqZWN0LCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNSZWdFeHAgPSBraW5kT2ZUZXN0KCdSZWdFeHAnKTtcblxuY29uc3QgcmVkdWNlRGVzY3JpcHRvcnMgPSAob2JqLCByZWR1Y2VyKSA9PiB7XG4gIGNvbnN0IGRlc2NyaXB0b3JzID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMob2JqKTtcbiAgY29uc3QgcmVkdWNlZERlc2NyaXB0b3JzID0ge307XG5cbiAgZm9yRWFjaChkZXNjcmlwdG9ycywgKGRlc2NyaXB0b3IsIG5hbWUpID0+IHtcbiAgICBsZXQgcmV0O1xuICAgIGlmICgocmV0ID0gcmVkdWNlcihkZXNjcmlwdG9yLCBuYW1lLCBvYmopKSAhPT0gZmFsc2UpIHtcbiAgICAgIHJlZHVjZWREZXNjcmlwdG9yc1tuYW1lXSA9IHJldCB8fCBkZXNjcmlwdG9yO1xuICAgIH1cbiAgfSk7XG5cbiAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMob2JqLCByZWR1Y2VkRGVzY3JpcHRvcnMpO1xufTtcblxuLyoqXG4gKiBNYWtlcyBhbGwgbWV0aG9kcyByZWFkLW9ubHlcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmpcbiAqL1xuXG5jb25zdCBmcmVlemVNZXRob2RzID0gKG9iaikgPT4ge1xuICByZWR1Y2VEZXNjcmlwdG9ycyhvYmosIChkZXNjcmlwdG9yLCBuYW1lKSA9PiB7XG4gICAgLy8gc2tpcCByZXN0cmljdGVkIHByb3BzIGluIHN0cmljdCBtb2RlXG4gICAgaWYgKGlzRnVuY3Rpb24ob2JqKSAmJiBbJ2FyZ3VtZW50cycsICdjYWxsZXInLCAnY2FsbGVlJ10uaW5kZXhPZihuYW1lKSAhPT0gLTEpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCB2YWx1ZSA9IG9ialtuYW1lXTtcblxuICAgIGlmICghaXNGdW5jdGlvbih2YWx1ZSkpIHJldHVybjtcblxuICAgIGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGZhbHNlO1xuXG4gICAgaWYgKCd3cml0YWJsZScgaW4gZGVzY3JpcHRvcikge1xuICAgICAgZGVzY3JpcHRvci53cml0YWJsZSA9IGZhbHNlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghZGVzY3JpcHRvci5zZXQpIHtcbiAgICAgIGRlc2NyaXB0b3Iuc2V0ID0gKCkgPT4ge1xuICAgICAgICB0aHJvdyBFcnJvcignQ2FuIG5vdCByZXdyaXRlIHJlYWQtb25seSBtZXRob2QgXFwnJyArIG5hbWUgKyAnXFwnJyk7XG4gICAgICB9O1xuICAgIH1cbiAgfSk7XG59O1xuXG5jb25zdCB0b09iamVjdFNldCA9IChhcnJheU9yU3RyaW5nLCBkZWxpbWl0ZXIpID0+IHtcbiAgY29uc3Qgb2JqID0ge307XG5cbiAgY29uc3QgZGVmaW5lID0gKGFycikgPT4ge1xuICAgIGFyci5mb3JFYWNoKHZhbHVlID0+IHtcbiAgICAgIG9ialt2YWx1ZV0gPSB0cnVlO1xuICAgIH0pO1xuICB9O1xuXG4gIGlzQXJyYXkoYXJyYXlPclN0cmluZykgPyBkZWZpbmUoYXJyYXlPclN0cmluZykgOiBkZWZpbmUoU3RyaW5nKGFycmF5T3JTdHJpbmcpLnNwbGl0KGRlbGltaXRlcikpO1xuXG4gIHJldHVybiBvYmo7XG59O1xuXG5jb25zdCBub29wID0gKCkgPT4ge307XG5cbmNvbnN0IHRvRmluaXRlTnVtYmVyID0gKHZhbHVlLCBkZWZhdWx0VmFsdWUpID0+IHtcbiAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgTnVtYmVyLmlzRmluaXRlKHZhbHVlID0gK3ZhbHVlKSA/IHZhbHVlIDogZGVmYXVsdFZhbHVlO1xufTtcblxuY29uc3QgQUxQSEEgPSAnYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXonO1xuXG5jb25zdCBESUdJVCA9ICcwMTIzNDU2Nzg5JztcblxuY29uc3QgQUxQSEFCRVQgPSB7XG4gIERJR0lULFxuICBBTFBIQSxcbiAgQUxQSEFfRElHSVQ6IEFMUEhBICsgQUxQSEEudG9VcHBlckNhc2UoKSArIERJR0lUXG59O1xuXG5jb25zdCBnZW5lcmF0ZVN0cmluZyA9IChzaXplID0gMTYsIGFscGhhYmV0ID0gQUxQSEFCRVQuQUxQSEFfRElHSVQpID0+IHtcbiAgbGV0IHN0ciA9ICcnO1xuICBjb25zdCB7bGVuZ3RofSA9IGFscGhhYmV0O1xuICB3aGlsZSAoc2l6ZS0tKSB7XG4gICAgc3RyICs9IGFscGhhYmV0W01hdGgucmFuZG9tKCkgKiBsZW5ndGh8MF07XG4gIH1cblxuICByZXR1cm4gc3RyO1xufTtcblxuLyoqXG4gKiBJZiB0aGUgdGhpbmcgaXMgYSBGb3JtRGF0YSBvYmplY3QsIHJldHVybiB0cnVlLCBvdGhlcndpc2UgcmV0dXJuIGZhbHNlLlxuICpcbiAqIEBwYXJhbSB7dW5rbm93bn0gdGhpbmcgLSBUaGUgdGhpbmcgdG8gY2hlY2suXG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzU3BlY0NvbXBsaWFudEZvcm0odGhpbmcpIHtcbiAgcmV0dXJuICEhKHRoaW5nICYmIGlzRnVuY3Rpb24odGhpbmcuYXBwZW5kKSAmJiB0aGluZ1tTeW1ib2wudG9TdHJpbmdUYWddID09PSAnRm9ybURhdGEnICYmIHRoaW5nW1N5bWJvbC5pdGVyYXRvcl0pO1xufVxuXG5jb25zdCB0b0pTT05PYmplY3QgPSAob2JqKSA9PiB7XG4gIGNvbnN0IHN0YWNrID0gbmV3IEFycmF5KDEwKTtcblxuICBjb25zdCB2aXNpdCA9IChzb3VyY2UsIGkpID0+IHtcblxuICAgIGlmIChpc09iamVjdChzb3VyY2UpKSB7XG4gICAgICBpZiAoc3RhY2suaW5kZXhPZihzb3VyY2UpID49IDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZighKCd0b0pTT04nIGluIHNvdXJjZSkpIHtcbiAgICAgICAgc3RhY2tbaV0gPSBzb3VyY2U7XG4gICAgICAgIGNvbnN0IHRhcmdldCA9IGlzQXJyYXkoc291cmNlKSA/IFtdIDoge307XG5cbiAgICAgICAgZm9yRWFjaChzb3VyY2UsICh2YWx1ZSwga2V5KSA9PiB7XG4gICAgICAgICAgY29uc3QgcmVkdWNlZFZhbHVlID0gdmlzaXQodmFsdWUsIGkgKyAxKTtcbiAgICAgICAgICAhaXNVbmRlZmluZWQocmVkdWNlZFZhbHVlKSAmJiAodGFyZ2V0W2tleV0gPSByZWR1Y2VkVmFsdWUpO1xuICAgICAgICB9KTtcblxuICAgICAgICBzdGFja1tpXSA9IHVuZGVmaW5lZDtcblxuICAgICAgICByZXR1cm4gdGFyZ2V0O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzb3VyY2U7XG4gIH07XG5cbiAgcmV0dXJuIHZpc2l0KG9iaiwgMCk7XG59O1xuXG5jb25zdCBpc0FzeW5jRm4gPSBraW5kT2ZUZXN0KCdBc3luY0Z1bmN0aW9uJyk7XG5cbmNvbnN0IGlzVGhlbmFibGUgPSAodGhpbmcpID0+XG4gIHRoaW5nICYmIChpc09iamVjdCh0aGluZykgfHwgaXNGdW5jdGlvbih0aGluZykpICYmIGlzRnVuY3Rpb24odGhpbmcudGhlbikgJiYgaXNGdW5jdGlvbih0aGluZy5jYXRjaCk7XG5cbi8vIG9yaWdpbmFsIGNvZGVcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9EaWdpdGFsQnJhaW5KUy9BeGlvc1Byb21pc2UvYmxvYi8xNmRlYWIxMzcxMGVjMDk3Nzk5MjIxMzFmM2ZhNTk1NDMyMGY4M2FiL2xpYi91dGlscy5qcyNMMTEtTDM0XG5cbmNvbnN0IF9zZXRJbW1lZGlhdGUgPSAoKHNldEltbWVkaWF0ZVN1cHBvcnRlZCwgcG9zdE1lc3NhZ2VTdXBwb3J0ZWQpID0+IHtcbiAgaWYgKHNldEltbWVkaWF0ZVN1cHBvcnRlZCkge1xuICAgIHJldHVybiBzZXRJbW1lZGlhdGU7XG4gIH1cblxuICByZXR1cm4gcG9zdE1lc3NhZ2VTdXBwb3J0ZWQgPyAoKHRva2VuLCBjYWxsYmFja3MpID0+IHtcbiAgICBfZ2xvYmFsLmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsICh7c291cmNlLCBkYXRhfSkgPT4ge1xuICAgICAgaWYgKHNvdXJjZSA9PT0gX2dsb2JhbCAmJiBkYXRhID09PSB0b2tlbikge1xuICAgICAgICBjYWxsYmFja3MubGVuZ3RoICYmIGNhbGxiYWNrcy5zaGlmdCgpKCk7XG4gICAgICB9XG4gICAgfSwgZmFsc2UpO1xuXG4gICAgcmV0dXJuIChjYikgPT4ge1xuICAgICAgY2FsbGJhY2tzLnB1c2goY2IpO1xuICAgICAgX2dsb2JhbC5wb3N0TWVzc2FnZSh0b2tlbiwgXCIqXCIpO1xuICAgIH1cbiAgfSkoYGF4aW9zQCR7TWF0aC5yYW5kb20oKX1gLCBbXSkgOiAoY2IpID0+IHNldFRpbWVvdXQoY2IpO1xufSkoXG4gIHR5cGVvZiBzZXRJbW1lZGlhdGUgPT09ICdmdW5jdGlvbicsXG4gIGlzRnVuY3Rpb24oX2dsb2JhbC5wb3N0TWVzc2FnZSlcbik7XG5cbmNvbnN0IGFzYXAgPSB0eXBlb2YgcXVldWVNaWNyb3Rhc2sgIT09ICd1bmRlZmluZWQnID9cbiAgcXVldWVNaWNyb3Rhc2suYmluZChfZ2xvYmFsKSA6ICggdHlwZW9mIHByb2Nlc3MgIT09ICd1bmRlZmluZWQnICYmIHByb2Nlc3MubmV4dFRpY2sgfHwgX3NldEltbWVkaWF0ZSk7XG5cbi8vICoqKioqKioqKioqKioqKioqKioqKlxuXG52YXIgdXRpbHMkMSA9IHtcbiAgaXNBcnJheSxcbiAgaXNBcnJheUJ1ZmZlcixcbiAgaXNCdWZmZXIsXG4gIGlzRm9ybURhdGEsXG4gIGlzQXJyYXlCdWZmZXJWaWV3LFxuICBpc1N0cmluZyxcbiAgaXNOdW1iZXIsXG4gIGlzQm9vbGVhbixcbiAgaXNPYmplY3QsXG4gIGlzUGxhaW5PYmplY3QsXG4gIGlzUmVhZGFibGVTdHJlYW0sXG4gIGlzUmVxdWVzdCxcbiAgaXNSZXNwb25zZSxcbiAgaXNIZWFkZXJzLFxuICBpc1VuZGVmaW5lZCxcbiAgaXNEYXRlLFxuICBpc0ZpbGUsXG4gIGlzQmxvYixcbiAgaXNSZWdFeHAsXG4gIGlzRnVuY3Rpb24sXG4gIGlzU3RyZWFtLFxuICBpc1VSTFNlYXJjaFBhcmFtcyxcbiAgaXNUeXBlZEFycmF5LFxuICBpc0ZpbGVMaXN0LFxuICBmb3JFYWNoLFxuICBtZXJnZSxcbiAgZXh0ZW5kLFxuICB0cmltLFxuICBzdHJpcEJPTSxcbiAgaW5oZXJpdHMsXG4gIHRvRmxhdE9iamVjdCxcbiAga2luZE9mLFxuICBraW5kT2ZUZXN0LFxuICBlbmRzV2l0aCxcbiAgdG9BcnJheSxcbiAgZm9yRWFjaEVudHJ5LFxuICBtYXRjaEFsbCxcbiAgaXNIVE1MRm9ybSxcbiAgaGFzT3duUHJvcGVydHksXG4gIGhhc093blByb3A6IGhhc093blByb3BlcnR5LCAvLyBhbiBhbGlhcyB0byBhdm9pZCBFU0xpbnQgbm8tcHJvdG90eXBlLWJ1aWx0aW5zIGRldGVjdGlvblxuICByZWR1Y2VEZXNjcmlwdG9ycyxcbiAgZnJlZXplTWV0aG9kcyxcbiAgdG9PYmplY3RTZXQsXG4gIHRvQ2FtZWxDYXNlLFxuICBub29wLFxuICB0b0Zpbml0ZU51bWJlcixcbiAgZmluZEtleSxcbiAgZ2xvYmFsOiBfZ2xvYmFsLFxuICBpc0NvbnRleHREZWZpbmVkLFxuICBBTFBIQUJFVCxcbiAgZ2VuZXJhdGVTdHJpbmcsXG4gIGlzU3BlY0NvbXBsaWFudEZvcm0sXG4gIHRvSlNPTk9iamVjdCxcbiAgaXNBc3luY0ZuLFxuICBpc1RoZW5hYmxlLFxuICBzZXRJbW1lZGlhdGU6IF9zZXRJbW1lZGlhdGUsXG4gIGFzYXBcbn07XG5cbi8qKlxuICogQ3JlYXRlIGFuIEVycm9yIHdpdGggdGhlIHNwZWNpZmllZCBtZXNzYWdlLCBjb25maWcsIGVycm9yIGNvZGUsIHJlcXVlc3QgYW5kIHJlc3BvbnNlLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIFRoZSBlcnJvciBtZXNzYWdlLlxuICogQHBhcmFtIHtzdHJpbmd9IFtjb2RlXSBUaGUgZXJyb3IgY29kZSAoZm9yIGV4YW1wbGUsICdFQ09OTkFCT1JURUQnKS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbY29uZmlnXSBUaGUgY29uZmlnLlxuICogQHBhcmFtIHtPYmplY3R9IFtyZXF1ZXN0XSBUaGUgcmVxdWVzdC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbcmVzcG9uc2VdIFRoZSByZXNwb25zZS5cbiAqXG4gKiBAcmV0dXJucyB7RXJyb3J9IFRoZSBjcmVhdGVkIGVycm9yLlxuICovXG5mdW5jdGlvbiBBeGlvc0Vycm9yKG1lc3NhZ2UsIGNvZGUsIGNvbmZpZywgcmVxdWVzdCwgcmVzcG9uc2UpIHtcbiAgRXJyb3IuY2FsbCh0aGlzKTtcblxuICBpZiAoRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UpIHtcbiAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCB0aGlzLmNvbnN0cnVjdG9yKTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLnN0YWNrID0gKG5ldyBFcnJvcigpKS5zdGFjaztcbiAgfVxuXG4gIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XG4gIHRoaXMubmFtZSA9ICdBeGlvc0Vycm9yJztcbiAgY29kZSAmJiAodGhpcy5jb2RlID0gY29kZSk7XG4gIGNvbmZpZyAmJiAodGhpcy5jb25maWcgPSBjb25maWcpO1xuICByZXF1ZXN0ICYmICh0aGlzLnJlcXVlc3QgPSByZXF1ZXN0KTtcbiAgcmVzcG9uc2UgJiYgKHRoaXMucmVzcG9uc2UgPSByZXNwb25zZSk7XG59XG5cbnV0aWxzJDEuaW5oZXJpdHMoQXhpb3NFcnJvciwgRXJyb3IsIHtcbiAgdG9KU09OOiBmdW5jdGlvbiB0b0pTT04oKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC8vIFN0YW5kYXJkXG4gICAgICBtZXNzYWdlOiB0aGlzLm1lc3NhZ2UsXG4gICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICAvLyBNaWNyb3NvZnRcbiAgICAgIGRlc2NyaXB0aW9uOiB0aGlzLmRlc2NyaXB0aW9uLFxuICAgICAgbnVtYmVyOiB0aGlzLm51bWJlcixcbiAgICAgIC8vIE1vemlsbGFcbiAgICAgIGZpbGVOYW1lOiB0aGlzLmZpbGVOYW1lLFxuICAgICAgbGluZU51bWJlcjogdGhpcy5saW5lTnVtYmVyLFxuICAgICAgY29sdW1uTnVtYmVyOiB0aGlzLmNvbHVtbk51bWJlcixcbiAgICAgIHN0YWNrOiB0aGlzLnN0YWNrLFxuICAgICAgLy8gQXhpb3NcbiAgICAgIGNvbmZpZzogdXRpbHMkMS50b0pTT05PYmplY3QodGhpcy5jb25maWcpLFxuICAgICAgY29kZTogdGhpcy5jb2RlLFxuICAgICAgc3RhdHVzOiB0aGlzLnJlc3BvbnNlICYmIHRoaXMucmVzcG9uc2Uuc3RhdHVzID8gdGhpcy5yZXNwb25zZS5zdGF0dXMgOiBudWxsXG4gICAgfTtcbiAgfVxufSk7XG5cbmNvbnN0IHByb3RvdHlwZSQxID0gQXhpb3NFcnJvci5wcm90b3R5cGU7XG5jb25zdCBkZXNjcmlwdG9ycyA9IHt9O1xuXG5bXG4gICdFUlJfQkFEX09QVElPTl9WQUxVRScsXG4gICdFUlJfQkFEX09QVElPTicsXG4gICdFQ09OTkFCT1JURUQnLFxuICAnRVRJTUVET1VUJyxcbiAgJ0VSUl9ORVRXT1JLJyxcbiAgJ0VSUl9GUl9UT09fTUFOWV9SRURJUkVDVFMnLFxuICAnRVJSX0RFUFJFQ0FURUQnLFxuICAnRVJSX0JBRF9SRVNQT05TRScsXG4gICdFUlJfQkFEX1JFUVVFU1QnLFxuICAnRVJSX0NBTkNFTEVEJyxcbiAgJ0VSUl9OT1RfU1VQUE9SVCcsXG4gICdFUlJfSU5WQUxJRF9VUkwnXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuXS5mb3JFYWNoKGNvZGUgPT4ge1xuICBkZXNjcmlwdG9yc1tjb2RlXSA9IHt2YWx1ZTogY29kZX07XG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQXhpb3NFcnJvciwgZGVzY3JpcHRvcnMpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KHByb3RvdHlwZSQxLCAnaXNBeGlvc0Vycm9yJywge3ZhbHVlOiB0cnVlfSk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG5BeGlvc0Vycm9yLmZyb20gPSAoZXJyb3IsIGNvZGUsIGNvbmZpZywgcmVxdWVzdCwgcmVzcG9uc2UsIGN1c3RvbVByb3BzKSA9PiB7XG4gIGNvbnN0IGF4aW9zRXJyb3IgPSBPYmplY3QuY3JlYXRlKHByb3RvdHlwZSQxKTtcblxuICB1dGlscyQxLnRvRmxhdE9iamVjdChlcnJvciwgYXhpb3NFcnJvciwgZnVuY3Rpb24gZmlsdGVyKG9iaikge1xuICAgIHJldHVybiBvYmogIT09IEVycm9yLnByb3RvdHlwZTtcbiAgfSwgcHJvcCA9PiB7XG4gICAgcmV0dXJuIHByb3AgIT09ICdpc0F4aW9zRXJyb3InO1xuICB9KTtcblxuICBBeGlvc0Vycm9yLmNhbGwoYXhpb3NFcnJvciwgZXJyb3IubWVzc2FnZSwgY29kZSwgY29uZmlnLCByZXF1ZXN0LCByZXNwb25zZSk7XG5cbiAgYXhpb3NFcnJvci5jYXVzZSA9IGVycm9yO1xuXG4gIGF4aW9zRXJyb3IubmFtZSA9IGVycm9yLm5hbWU7XG5cbiAgY3VzdG9tUHJvcHMgJiYgT2JqZWN0LmFzc2lnbihheGlvc0Vycm9yLCBjdXN0b21Qcm9wcyk7XG5cbiAgcmV0dXJuIGF4aW9zRXJyb3I7XG59O1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgc3RyaWN0XG52YXIgaHR0cEFkYXB0ZXIgPSBudWxsO1xuXG4vKipcbiAqIERldGVybWluZXMgaWYgdGhlIGdpdmVuIHRoaW5nIGlzIGEgYXJyYXkgb3IganMgb2JqZWN0LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB0aGluZyAtIFRoZSBvYmplY3Qgb3IgYXJyYXkgdG8gYmUgdmlzaXRlZC5cbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaXNWaXNpdGFibGUodGhpbmcpIHtcbiAgcmV0dXJuIHV0aWxzJDEuaXNQbGFpbk9iamVjdCh0aGluZykgfHwgdXRpbHMkMS5pc0FycmF5KHRoaW5nKTtcbn1cblxuLyoqXG4gKiBJdCByZW1vdmVzIHRoZSBicmFja2V0cyBmcm9tIHRoZSBlbmQgb2YgYSBzdHJpbmdcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIGtleSBvZiB0aGUgcGFyYW1ldGVyLlxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IHRoZSBrZXkgd2l0aG91dCB0aGUgYnJhY2tldHMuXG4gKi9cbmZ1bmN0aW9uIHJlbW92ZUJyYWNrZXRzKGtleSkge1xuICByZXR1cm4gdXRpbHMkMS5lbmRzV2l0aChrZXksICdbXScpID8ga2V5LnNsaWNlKDAsIC0yKSA6IGtleTtcbn1cblxuLyoqXG4gKiBJdCB0YWtlcyBhIHBhdGgsIGEga2V5LCBhbmQgYSBib29sZWFuLCBhbmQgcmV0dXJucyBhIHN0cmluZ1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoIC0gVGhlIHBhdGggdG8gdGhlIGN1cnJlbnQga2V5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFRoZSBrZXkgb2YgdGhlIGN1cnJlbnQgb2JqZWN0IGJlaW5nIGl0ZXJhdGVkIG92ZXIuXG4gKiBAcGFyYW0ge3N0cmluZ30gZG90cyAtIElmIHRydWUsIHRoZSBrZXkgd2lsbCBiZSByZW5kZXJlZCB3aXRoIGRvdHMgaW5zdGVhZCBvZiBicmFja2V0cy5cbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgcGF0aCB0byB0aGUgY3VycmVudCBrZXkuXG4gKi9cbmZ1bmN0aW9uIHJlbmRlcktleShwYXRoLCBrZXksIGRvdHMpIHtcbiAgaWYgKCFwYXRoKSByZXR1cm4ga2V5O1xuICByZXR1cm4gcGF0aC5jb25jYXQoa2V5KS5tYXAoZnVuY3Rpb24gZWFjaCh0b2tlbiwgaSkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgIHRva2VuID0gcmVtb3ZlQnJhY2tldHModG9rZW4pO1xuICAgIHJldHVybiAhZG90cyAmJiBpID8gJ1snICsgdG9rZW4gKyAnXScgOiB0b2tlbjtcbiAgfSkuam9pbihkb3RzID8gJy4nIDogJycpO1xufVxuXG4vKipcbiAqIElmIHRoZSBhcnJheSBpcyBhbiBhcnJheSBhbmQgbm9uZSBvZiBpdHMgZWxlbWVudHMgYXJlIHZpc2l0YWJsZSwgdGhlbiBpdCdzIGEgZmxhdCBhcnJheS5cbiAqXG4gKiBAcGFyYW0ge0FycmF5PGFueT59IGFyciAtIFRoZSBhcnJheSB0byBjaGVja1xuICpcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBpc0ZsYXRBcnJheShhcnIpIHtcbiAgcmV0dXJuIHV0aWxzJDEuaXNBcnJheShhcnIpICYmICFhcnIuc29tZShpc1Zpc2l0YWJsZSk7XG59XG5cbmNvbnN0IHByZWRpY2F0ZXMgPSB1dGlscyQxLnRvRmxhdE9iamVjdCh1dGlscyQxLCB7fSwgbnVsbCwgZnVuY3Rpb24gZmlsdGVyKHByb3ApIHtcbiAgcmV0dXJuIC9eaXNbQS1aXS8udGVzdChwcm9wKTtcbn0pO1xuXG4vKipcbiAqIENvbnZlcnQgYSBkYXRhIG9iamVjdCB0byBGb3JtRGF0YVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmpcbiAqIEBwYXJhbSB7P09iamVjdH0gW2Zvcm1EYXRhXVxuICogQHBhcmFtIHs/T2JqZWN0fSBbb3B0aW9uc11cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtvcHRpb25zLnZpc2l0b3JdXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFtvcHRpb25zLm1ldGFUb2tlbnMgPSB0cnVlXVxuICogQHBhcmFtIHtCb29sZWFufSBbb3B0aW9ucy5kb3RzID0gZmFsc2VdXG4gKiBAcGFyYW0gez9Cb29sZWFufSBbb3B0aW9ucy5pbmRleGVzID0gZmFsc2VdXG4gKlxuICogQHJldHVybnMge09iamVjdH1cbiAqKi9cblxuLyoqXG4gKiBJdCBjb252ZXJ0cyBhbiBvYmplY3QgaW50byBhIEZvcm1EYXRhIG9iamVjdFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0PGFueSwgYW55Pn0gb2JqIC0gVGhlIG9iamVjdCB0byBjb252ZXJ0IHRvIGZvcm0gZGF0YS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmb3JtRGF0YSAtIFRoZSBGb3JtRGF0YSBvYmplY3QgdG8gYXBwZW5kIHRvLlxuICogQHBhcmFtIHtPYmplY3Q8c3RyaW5nLCBhbnk+fSBvcHRpb25zXG4gKlxuICogQHJldHVybnNcbiAqL1xuZnVuY3Rpb24gdG9Gb3JtRGF0YShvYmosIGZvcm1EYXRhLCBvcHRpb25zKSB7XG4gIGlmICghdXRpbHMkMS5pc09iamVjdChvYmopKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcigndGFyZ2V0IG11c3QgYmUgYW4gb2JqZWN0Jyk7XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgZm9ybURhdGEgPSBmb3JtRGF0YSB8fCBuZXcgKEZvcm1EYXRhKSgpO1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICBvcHRpb25zID0gdXRpbHMkMS50b0ZsYXRPYmplY3Qob3B0aW9ucywge1xuICAgIG1ldGFUb2tlbnM6IHRydWUsXG4gICAgZG90czogZmFsc2UsXG4gICAgaW5kZXhlczogZmFsc2VcbiAgfSwgZmFsc2UsIGZ1bmN0aW9uIGRlZmluZWQob3B0aW9uLCBzb3VyY2UpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZXEtbnVsbCxlcWVxZXFcbiAgICByZXR1cm4gIXV0aWxzJDEuaXNVbmRlZmluZWQoc291cmNlW29wdGlvbl0pO1xuICB9KTtcblxuICBjb25zdCBtZXRhVG9rZW5zID0gb3B0aW9ucy5tZXRhVG9rZW5zO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdXNlLWJlZm9yZS1kZWZpbmVcbiAgY29uc3QgdmlzaXRvciA9IG9wdGlvbnMudmlzaXRvciB8fCBkZWZhdWx0VmlzaXRvcjtcbiAgY29uc3QgZG90cyA9IG9wdGlvbnMuZG90cztcbiAgY29uc3QgaW5kZXhlcyA9IG9wdGlvbnMuaW5kZXhlcztcbiAgY29uc3QgX0Jsb2IgPSBvcHRpb25zLkJsb2IgfHwgdHlwZW9mIEJsb2IgIT09ICd1bmRlZmluZWQnICYmIEJsb2I7XG4gIGNvbnN0IHVzZUJsb2IgPSBfQmxvYiAmJiB1dGlscyQxLmlzU3BlY0NvbXBsaWFudEZvcm0oZm9ybURhdGEpO1xuXG4gIGlmICghdXRpbHMkMS5pc0Z1bmN0aW9uKHZpc2l0b3IpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcigndmlzaXRvciBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNvbnZlcnRWYWx1ZSh2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkgcmV0dXJuICcnO1xuXG4gICAgaWYgKHV0aWxzJDEuaXNEYXRlKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIHZhbHVlLnRvSVNPU3RyaW5nKCk7XG4gICAgfVxuXG4gICAgaWYgKCF1c2VCbG9iICYmIHV0aWxzJDEuaXNCbG9iKHZhbHVlKSkge1xuICAgICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoJ0Jsb2IgaXMgbm90IHN1cHBvcnRlZC4gVXNlIGEgQnVmZmVyIGluc3RlYWQuJyk7XG4gICAgfVxuXG4gICAgaWYgKHV0aWxzJDEuaXNBcnJheUJ1ZmZlcih2YWx1ZSkgfHwgdXRpbHMkMS5pc1R5cGVkQXJyYXkodmFsdWUpKSB7XG4gICAgICByZXR1cm4gdXNlQmxvYiAmJiB0eXBlb2YgQmxvYiA9PT0gJ2Z1bmN0aW9uJyA/IG5ldyBCbG9iKFt2YWx1ZV0pIDogQnVmZmVyLmZyb20odmFsdWUpO1xuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWZhdWx0IHZpc2l0b3IuXG4gICAqXG4gICAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAgICogQHBhcmFtIHtTdHJpbmd8TnVtYmVyfSBrZXlcbiAgICogQHBhcmFtIHtBcnJheTxTdHJpbmd8TnVtYmVyPn0gcGF0aFxuICAgKiBAdGhpcyB7Rm9ybURhdGF9XG4gICAqXG4gICAqIEByZXR1cm5zIHtib29sZWFufSByZXR1cm4gdHJ1ZSB0byB2aXNpdCB0aGUgZWFjaCBwcm9wIG9mIHRoZSB2YWx1ZSByZWN1cnNpdmVseVxuICAgKi9cbiAgZnVuY3Rpb24gZGVmYXVsdFZpc2l0b3IodmFsdWUsIGtleSwgcGF0aCkge1xuICAgIGxldCBhcnIgPSB2YWx1ZTtcblxuICAgIGlmICh2YWx1ZSAmJiAhcGF0aCAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgICBpZiAodXRpbHMkMS5lbmRzV2l0aChrZXksICd7fScpKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgICBrZXkgPSBtZXRhVG9rZW5zID8ga2V5IDoga2V5LnNsaWNlKDAsIC0yKTtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICAgIHZhbHVlID0gSlNPTi5zdHJpbmdpZnkodmFsdWUpO1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgKHV0aWxzJDEuaXNBcnJheSh2YWx1ZSkgJiYgaXNGbGF0QXJyYXkodmFsdWUpKSB8fFxuICAgICAgICAoKHV0aWxzJDEuaXNGaWxlTGlzdCh2YWx1ZSkgfHwgdXRpbHMkMS5lbmRzV2l0aChrZXksICdbXScpKSAmJiAoYXJyID0gdXRpbHMkMS50b0FycmF5KHZhbHVlKSlcbiAgICAgICAgKSkge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgICAga2V5ID0gcmVtb3ZlQnJhY2tldHMoa2V5KTtcblxuICAgICAgICBhcnIuZm9yRWFjaChmdW5jdGlvbiBlYWNoKGVsLCBpbmRleCkge1xuICAgICAgICAgICEodXRpbHMkMS5pc1VuZGVmaW5lZChlbCkgfHwgZWwgPT09IG51bGwpICYmIGZvcm1EYXRhLmFwcGVuZChcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1uZXN0ZWQtdGVybmFyeVxuICAgICAgICAgICAgaW5kZXhlcyA9PT0gdHJ1ZSA/IHJlbmRlcktleShba2V5XSwgaW5kZXgsIGRvdHMpIDogKGluZGV4ZXMgPT09IG51bGwgPyBrZXkgOiBrZXkgKyAnW10nKSxcbiAgICAgICAgICAgIGNvbnZlcnRWYWx1ZShlbClcbiAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpc1Zpc2l0YWJsZSh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGZvcm1EYXRhLmFwcGVuZChyZW5kZXJLZXkocGF0aCwga2V5LCBkb3RzKSwgY29udmVydFZhbHVlKHZhbHVlKSk7XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBzdGFjayA9IFtdO1xuXG4gIGNvbnN0IGV4cG9zZWRIZWxwZXJzID0gT2JqZWN0LmFzc2lnbihwcmVkaWNhdGVzLCB7XG4gICAgZGVmYXVsdFZpc2l0b3IsXG4gICAgY29udmVydFZhbHVlLFxuICAgIGlzVmlzaXRhYmxlXG4gIH0pO1xuXG4gIGZ1bmN0aW9uIGJ1aWxkKHZhbHVlLCBwYXRoKSB7XG4gICAgaWYgKHV0aWxzJDEuaXNVbmRlZmluZWQodmFsdWUpKSByZXR1cm47XG5cbiAgICBpZiAoc3RhY2suaW5kZXhPZih2YWx1ZSkgIT09IC0xKSB7XG4gICAgICB0aHJvdyBFcnJvcignQ2lyY3VsYXIgcmVmZXJlbmNlIGRldGVjdGVkIGluICcgKyBwYXRoLmpvaW4oJy4nKSk7XG4gICAgfVxuXG4gICAgc3RhY2sucHVzaCh2YWx1ZSk7XG5cbiAgICB1dGlscyQxLmZvckVhY2godmFsdWUsIGZ1bmN0aW9uIGVhY2goZWwsIGtleSkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gISh1dGlscyQxLmlzVW5kZWZpbmVkKGVsKSB8fCBlbCA9PT0gbnVsbCkgJiYgdmlzaXRvci5jYWxsKFxuICAgICAgICBmb3JtRGF0YSwgZWwsIHV0aWxzJDEuaXNTdHJpbmcoa2V5KSA/IGtleS50cmltKCkgOiBrZXksIHBhdGgsIGV4cG9zZWRIZWxwZXJzXG4gICAgICApO1xuXG4gICAgICBpZiAocmVzdWx0ID09PSB0cnVlKSB7XG4gICAgICAgIGJ1aWxkKGVsLCBwYXRoID8gcGF0aC5jb25jYXQoa2V5KSA6IFtrZXldKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHN0YWNrLnBvcCgpO1xuICB9XG5cbiAgaWYgKCF1dGlscyQxLmlzT2JqZWN0KG9iaikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdkYXRhIG11c3QgYmUgYW4gb2JqZWN0Jyk7XG4gIH1cblxuICBidWlsZChvYmopO1xuXG4gIHJldHVybiBmb3JtRGF0YTtcbn1cblxuLyoqXG4gKiBJdCBlbmNvZGVzIGEgc3RyaW5nIGJ5IHJlcGxhY2luZyBhbGwgY2hhcmFjdGVycyB0aGF0IGFyZSBub3QgaW4gdGhlIHVucmVzZXJ2ZWQgc2V0IHdpdGhcbiAqIHRoZWlyIHBlcmNlbnQtZW5jb2RlZCBlcXVpdmFsZW50c1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHIgLSBUaGUgc3RyaW5nIHRvIGVuY29kZS5cbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgZW5jb2RlZCBzdHJpbmcuXG4gKi9cbmZ1bmN0aW9uIGVuY29kZSQxKHN0cikge1xuICBjb25zdCBjaGFyTWFwID0ge1xuICAgICchJzogJyUyMScsXG4gICAgXCInXCI6ICclMjcnLFxuICAgICcoJzogJyUyOCcsXG4gICAgJyknOiAnJTI5JyxcbiAgICAnfic6ICclN0UnLFxuICAgICclMjAnOiAnKycsXG4gICAgJyUwMCc6ICdcXHgwMCdcbiAgfTtcbiAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChzdHIpLnJlcGxhY2UoL1shJygpfl18JTIwfCUwMC9nLCBmdW5jdGlvbiByZXBsYWNlcihtYXRjaCkge1xuICAgIHJldHVybiBjaGFyTWFwW21hdGNoXTtcbiAgfSk7XG59XG5cbi8qKlxuICogSXQgdGFrZXMgYSBwYXJhbXMgb2JqZWN0IGFuZCBjb252ZXJ0cyBpdCB0byBhIEZvcm1EYXRhIG9iamVjdFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0PHN0cmluZywgYW55Pn0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgdG8gYmUgY29udmVydGVkIHRvIGEgRm9ybURhdGEgb2JqZWN0LlxuICogQHBhcmFtIHtPYmplY3Q8c3RyaW5nLCBhbnk+fSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgb2JqZWN0IHBhc3NlZCB0byB0aGUgQXhpb3MgY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIEF4aW9zVVJMU2VhcmNoUGFyYW1zKHBhcmFtcywgb3B0aW9ucykge1xuICB0aGlzLl9wYWlycyA9IFtdO1xuXG4gIHBhcmFtcyAmJiB0b0Zvcm1EYXRhKHBhcmFtcywgdGhpcywgb3B0aW9ucyk7XG59XG5cbmNvbnN0IHByb3RvdHlwZSA9IEF4aW9zVVJMU2VhcmNoUGFyYW1zLnByb3RvdHlwZTtcblxucHJvdG90eXBlLmFwcGVuZCA9IGZ1bmN0aW9uIGFwcGVuZChuYW1lLCB2YWx1ZSkge1xuICB0aGlzLl9wYWlycy5wdXNoKFtuYW1lLCB2YWx1ZV0pO1xufTtcblxucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gdG9TdHJpbmcoZW5jb2Rlcikge1xuICBjb25zdCBfZW5jb2RlID0gZW5jb2RlciA/IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgcmV0dXJuIGVuY29kZXIuY2FsbCh0aGlzLCB2YWx1ZSwgZW5jb2RlJDEpO1xuICB9IDogZW5jb2RlJDE7XG5cbiAgcmV0dXJuIHRoaXMuX3BhaXJzLm1hcChmdW5jdGlvbiBlYWNoKHBhaXIpIHtcbiAgICByZXR1cm4gX2VuY29kZShwYWlyWzBdKSArICc9JyArIF9lbmNvZGUocGFpclsxXSk7XG4gIH0sICcnKS5qb2luKCcmJyk7XG59O1xuXG4vKipcbiAqIEl0IHJlcGxhY2VzIGFsbCBpbnN0YW5jZXMgb2YgdGhlIGNoYXJhY3RlcnMgYDpgLCBgJGAsIGAsYCwgYCtgLCBgW2AsIGFuZCBgXWAgd2l0aCB0aGVpclxuICogVVJJIGVuY29kZWQgY291bnRlcnBhcnRzXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbCBUaGUgdmFsdWUgdG8gYmUgZW5jb2RlZC5cbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgZW5jb2RlZCB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gZW5jb2RlKHZhbCkge1xuICByZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KHZhbCkuXG4gICAgcmVwbGFjZSgvJTNBL2dpLCAnOicpLlxuICAgIHJlcGxhY2UoLyUyNC9nLCAnJCcpLlxuICAgIHJlcGxhY2UoLyUyQy9naSwgJywnKS5cbiAgICByZXBsYWNlKC8lMjAvZywgJysnKS5cbiAgICByZXBsYWNlKC8lNUIvZ2ksICdbJykuXG4gICAgcmVwbGFjZSgvJTVEL2dpLCAnXScpO1xufVxuXG4vKipcbiAqIEJ1aWxkIGEgVVJMIGJ5IGFwcGVuZGluZyBwYXJhbXMgdG8gdGhlIGVuZFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB1cmwgVGhlIGJhc2Ugb2YgdGhlIHVybCAoZS5nLiwgaHR0cDovL3d3dy5nb29nbGUuY29tKVxuICogQHBhcmFtIHtvYmplY3R9IFtwYXJhbXNdIFRoZSBwYXJhbXMgdG8gYmUgYXBwZW5kZWRcbiAqIEBwYXJhbSB7P29iamVjdH0gb3B0aW9uc1xuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBmb3JtYXR0ZWQgdXJsXG4gKi9cbmZ1bmN0aW9uIGJ1aWxkVVJMKHVybCwgcGFyYW1zLCBvcHRpb25zKSB7XG4gIC8qZXNsaW50IG5vLXBhcmFtLXJlYXNzaWduOjAqL1xuICBpZiAoIXBhcmFtcykge1xuICAgIHJldHVybiB1cmw7XG4gIH1cbiAgXG4gIGNvbnN0IF9lbmNvZGUgPSBvcHRpb25zICYmIG9wdGlvbnMuZW5jb2RlIHx8IGVuY29kZTtcblxuICBjb25zdCBzZXJpYWxpemVGbiA9IG9wdGlvbnMgJiYgb3B0aW9ucy5zZXJpYWxpemU7XG5cbiAgbGV0IHNlcmlhbGl6ZWRQYXJhbXM7XG5cbiAgaWYgKHNlcmlhbGl6ZUZuKSB7XG4gICAgc2VyaWFsaXplZFBhcmFtcyA9IHNlcmlhbGl6ZUZuKHBhcmFtcywgb3B0aW9ucyk7XG4gIH0gZWxzZSB7XG4gICAgc2VyaWFsaXplZFBhcmFtcyA9IHV0aWxzJDEuaXNVUkxTZWFyY2hQYXJhbXMocGFyYW1zKSA/XG4gICAgICBwYXJhbXMudG9TdHJpbmcoKSA6XG4gICAgICBuZXcgQXhpb3NVUkxTZWFyY2hQYXJhbXMocGFyYW1zLCBvcHRpb25zKS50b1N0cmluZyhfZW5jb2RlKTtcbiAgfVxuXG4gIGlmIChzZXJpYWxpemVkUGFyYW1zKSB7XG4gICAgY29uc3QgaGFzaG1hcmtJbmRleCA9IHVybC5pbmRleE9mKFwiI1wiKTtcblxuICAgIGlmIChoYXNobWFya0luZGV4ICE9PSAtMSkge1xuICAgICAgdXJsID0gdXJsLnNsaWNlKDAsIGhhc2htYXJrSW5kZXgpO1xuICAgIH1cbiAgICB1cmwgKz0gKHVybC5pbmRleE9mKCc/JykgPT09IC0xID8gJz8nIDogJyYnKSArIHNlcmlhbGl6ZWRQYXJhbXM7XG4gIH1cblxuICByZXR1cm4gdXJsO1xufVxuXG5jbGFzcyBJbnRlcmNlcHRvck1hbmFnZXIge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmhhbmRsZXJzID0gW107XG4gIH1cblxuICAvKipcbiAgICogQWRkIGEgbmV3IGludGVyY2VwdG9yIHRvIHRoZSBzdGFja1xuICAgKlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdWxmaWxsZWQgVGhlIGZ1bmN0aW9uIHRvIGhhbmRsZSBgdGhlbmAgZm9yIGEgYFByb21pc2VgXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IHJlamVjdGVkIFRoZSBmdW5jdGlvbiB0byBoYW5kbGUgYHJlamVjdGAgZm9yIGEgYFByb21pc2VgXG4gICAqXG4gICAqIEByZXR1cm4ge051bWJlcn0gQW4gSUQgdXNlZCB0byByZW1vdmUgaW50ZXJjZXB0b3IgbGF0ZXJcbiAgICovXG4gIHVzZShmdWxmaWxsZWQsIHJlamVjdGVkLCBvcHRpb25zKSB7XG4gICAgdGhpcy5oYW5kbGVycy5wdXNoKHtcbiAgICAgIGZ1bGZpbGxlZCxcbiAgICAgIHJlamVjdGVkLFxuICAgICAgc3luY2hyb25vdXM6IG9wdGlvbnMgPyBvcHRpb25zLnN5bmNocm9ub3VzIDogZmFsc2UsXG4gICAgICBydW5XaGVuOiBvcHRpb25zID8gb3B0aW9ucy5ydW5XaGVuIDogbnVsbFxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzLmhhbmRsZXJzLmxlbmd0aCAtIDE7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIGFuIGludGVyY2VwdG9yIGZyb20gdGhlIHN0YWNrXG4gICAqXG4gICAqIEBwYXJhbSB7TnVtYmVyfSBpZCBUaGUgSUQgdGhhdCB3YXMgcmV0dXJuZWQgYnkgYHVzZWBcbiAgICpcbiAgICogQHJldHVybnMge0Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgaW50ZXJjZXB0b3Igd2FzIHJlbW92ZWQsIGBmYWxzZWAgb3RoZXJ3aXNlXG4gICAqL1xuICBlamVjdChpZCkge1xuICAgIGlmICh0aGlzLmhhbmRsZXJzW2lkXSkge1xuICAgICAgdGhpcy5oYW5kbGVyc1tpZF0gPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhciBhbGwgaW50ZXJjZXB0b3JzIGZyb20gdGhlIHN0YWNrXG4gICAqXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgY2xlYXIoKSB7XG4gICAgaWYgKHRoaXMuaGFuZGxlcnMpIHtcbiAgICAgIHRoaXMuaGFuZGxlcnMgPSBbXTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSXRlcmF0ZSBvdmVyIGFsbCB0aGUgcmVnaXN0ZXJlZCBpbnRlcmNlcHRvcnNcbiAgICpcbiAgICogVGhpcyBtZXRob2QgaXMgcGFydGljdWxhcmx5IHVzZWZ1bCBmb3Igc2tpcHBpbmcgb3ZlciBhbnlcbiAgICogaW50ZXJjZXB0b3JzIHRoYXQgbWF5IGhhdmUgYmVjb21lIGBudWxsYCBjYWxsaW5nIGBlamVjdGAuXG4gICAqXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBmdW5jdGlvbiB0byBjYWxsIGZvciBlYWNoIGludGVyY2VwdG9yXG4gICAqXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgZm9yRWFjaChmbikge1xuICAgIHV0aWxzJDEuZm9yRWFjaCh0aGlzLmhhbmRsZXJzLCBmdW5jdGlvbiBmb3JFYWNoSGFuZGxlcihoKSB7XG4gICAgICBpZiAoaCAhPT0gbnVsbCkge1xuICAgICAgICBmbihoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuXG52YXIgSW50ZXJjZXB0b3JNYW5hZ2VyJDEgPSBJbnRlcmNlcHRvck1hbmFnZXI7XG5cbnZhciB0cmFuc2l0aW9uYWxEZWZhdWx0cyA9IHtcbiAgc2lsZW50SlNPTlBhcnNpbmc6IHRydWUsXG4gIGZvcmNlZEpTT05QYXJzaW5nOiB0cnVlLFxuICBjbGFyaWZ5VGltZW91dEVycm9yOiBmYWxzZVxufTtcblxudmFyIFVSTFNlYXJjaFBhcmFtcyQxID0gdHlwZW9mIFVSTFNlYXJjaFBhcmFtcyAhPT0gJ3VuZGVmaW5lZCcgPyBVUkxTZWFyY2hQYXJhbXMgOiBBeGlvc1VSTFNlYXJjaFBhcmFtcztcblxudmFyIEZvcm1EYXRhJDEgPSB0eXBlb2YgRm9ybURhdGEgIT09ICd1bmRlZmluZWQnID8gRm9ybURhdGEgOiBudWxsO1xuXG52YXIgQmxvYiQxID0gdHlwZW9mIEJsb2IgIT09ICd1bmRlZmluZWQnID8gQmxvYiA6IG51bGw7XG5cbnZhciBwbGF0Zm9ybSQxID0ge1xuICBpc0Jyb3dzZXI6IHRydWUsXG4gIGNsYXNzZXM6IHtcbiAgICBVUkxTZWFyY2hQYXJhbXM6IFVSTFNlYXJjaFBhcmFtcyQxLFxuICAgIEZvcm1EYXRhOiBGb3JtRGF0YSQxLFxuICAgIEJsb2I6IEJsb2IkMVxuICB9LFxuICBwcm90b2NvbHM6IFsnaHR0cCcsICdodHRwcycsICdmaWxlJywgJ2Jsb2InLCAndXJsJywgJ2RhdGEnXVxufTtcblxuY29uc3QgaGFzQnJvd3NlckVudiA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCc7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIHdlJ3JlIHJ1bm5pbmcgaW4gYSBzdGFuZGFyZCBicm93c2VyIGVudmlyb25tZW50XG4gKlxuICogVGhpcyBhbGxvd3MgYXhpb3MgdG8gcnVuIGluIGEgd2ViIHdvcmtlciwgYW5kIHJlYWN0LW5hdGl2ZS5cbiAqIEJvdGggZW52aXJvbm1lbnRzIHN1cHBvcnQgWE1MSHR0cFJlcXVlc3QsIGJ1dCBub3QgZnVsbHkgc3RhbmRhcmQgZ2xvYmFscy5cbiAqXG4gKiB3ZWIgd29ya2VyczpcbiAqICB0eXBlb2Ygd2luZG93IC0+IHVuZGVmaW5lZFxuICogIHR5cGVvZiBkb2N1bWVudCAtPiB1bmRlZmluZWRcbiAqXG4gKiByZWFjdC1uYXRpdmU6XG4gKiAgbmF2aWdhdG9yLnByb2R1Y3QgLT4gJ1JlYWN0TmF0aXZlJ1xuICogbmF0aXZlc2NyaXB0XG4gKiAgbmF2aWdhdG9yLnByb2R1Y3QgLT4gJ05hdGl2ZVNjcmlwdCcgb3IgJ05TJ1xuICpcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5jb25zdCBoYXNTdGFuZGFyZEJyb3dzZXJFbnYgPSAoXG4gIChwcm9kdWN0KSA9PiB7XG4gICAgcmV0dXJuIGhhc0Jyb3dzZXJFbnYgJiYgWydSZWFjdE5hdGl2ZScsICdOYXRpdmVTY3JpcHQnLCAnTlMnXS5pbmRleE9mKHByb2R1Y3QpIDwgMFxuICB9KSh0eXBlb2YgbmF2aWdhdG9yICE9PSAndW5kZWZpbmVkJyAmJiBuYXZpZ2F0b3IucHJvZHVjdCk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIHdlJ3JlIHJ1bm5pbmcgaW4gYSBzdGFuZGFyZCBicm93c2VyIHdlYldvcmtlciBlbnZpcm9ubWVudFxuICpcbiAqIEFsdGhvdWdoIHRoZSBgaXNTdGFuZGFyZEJyb3dzZXJFbnZgIG1ldGhvZCBpbmRpY2F0ZXMgdGhhdFxuICogYGFsbG93cyBheGlvcyB0byBydW4gaW4gYSB3ZWIgd29ya2VyYCwgdGhlIFdlYldvcmtlciB3aWxsIHN0aWxsIGJlXG4gKiBmaWx0ZXJlZCBvdXQgZHVlIHRvIGl0cyBqdWRnbWVudCBzdGFuZGFyZFxuICogYHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCdgLlxuICogVGhpcyBsZWFkcyB0byBhIHByb2JsZW0gd2hlbiBheGlvcyBwb3N0IGBGb3JtRGF0YWAgaW4gd2ViV29ya2VyXG4gKi9cbmNvbnN0IGhhc1N0YW5kYXJkQnJvd3NlcldlYldvcmtlckVudiA9ICgoKSA9PiB7XG4gIHJldHVybiAoXG4gICAgdHlwZW9mIFdvcmtlckdsb2JhbFNjb3BlICE9PSAndW5kZWZpbmVkJyAmJlxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuICAgIHNlbGYgaW5zdGFuY2VvZiBXb3JrZXJHbG9iYWxTY29wZSAmJlxuICAgIHR5cGVvZiBzZWxmLmltcG9ydFNjcmlwdHMgPT09ICdmdW5jdGlvbidcbiAgKTtcbn0pKCk7XG5cbmNvbnN0IG9yaWdpbiA9IGhhc0Jyb3dzZXJFbnYgJiYgd2luZG93LmxvY2F0aW9uLmhyZWYgfHwgJ2h0dHA6Ly9sb2NhbGhvc3QnO1xuXG52YXIgdXRpbHMgPSAvKiNfX1BVUkVfXyovT2JqZWN0LmZyZWV6ZSh7XG4gIF9fcHJvdG9fXzogbnVsbCxcbiAgaGFzQnJvd3NlckVudjogaGFzQnJvd3NlckVudixcbiAgaGFzU3RhbmRhcmRCcm93c2VyV2ViV29ya2VyRW52OiBoYXNTdGFuZGFyZEJyb3dzZXJXZWJXb3JrZXJFbnYsXG4gIGhhc1N0YW5kYXJkQnJvd3NlckVudjogaGFzU3RhbmRhcmRCcm93c2VyRW52LFxuICBvcmlnaW46IG9yaWdpblxufSk7XG5cbnZhciBwbGF0Zm9ybSA9IHtcbiAgLi4udXRpbHMsXG4gIC4uLnBsYXRmb3JtJDFcbn07XG5cbmZ1bmN0aW9uIHRvVVJMRW5jb2RlZEZvcm0oZGF0YSwgb3B0aW9ucykge1xuICByZXR1cm4gdG9Gb3JtRGF0YShkYXRhLCBuZXcgcGxhdGZvcm0uY2xhc3Nlcy5VUkxTZWFyY2hQYXJhbXMoKSwgT2JqZWN0LmFzc2lnbih7XG4gICAgdmlzaXRvcjogZnVuY3Rpb24odmFsdWUsIGtleSwgcGF0aCwgaGVscGVycykge1xuICAgICAgaWYgKHBsYXRmb3JtLmlzTm9kZSAmJiB1dGlscyQxLmlzQnVmZmVyKHZhbHVlKSkge1xuICAgICAgICB0aGlzLmFwcGVuZChrZXksIHZhbHVlLnRvU3RyaW5nKCdiYXNlNjQnKSk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGhlbHBlcnMuZGVmYXVsdFZpc2l0b3IuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB9XG4gIH0sIG9wdGlvbnMpKTtcbn1cblxuLyoqXG4gKiBJdCB0YWtlcyBhIHN0cmluZyBsaWtlIGBmb29beF1beV1bel1gIGFuZCByZXR1cm5zIGFuIGFycmF5IGxpa2UgYFsnZm9vJywgJ3gnLCAneScsICd6J11cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gKlxuICogQHJldHVybnMgQW4gYXJyYXkgb2Ygc3RyaW5ncy5cbiAqL1xuZnVuY3Rpb24gcGFyc2VQcm9wUGF0aChuYW1lKSB7XG4gIC8vIGZvb1t4XVt5XVt6XVxuICAvLyBmb28ueC55LnpcbiAgLy8gZm9vLXgteS16XG4gIC8vIGZvbyB4IHkgelxuICByZXR1cm4gdXRpbHMkMS5tYXRjaEFsbCgvXFx3K3xcXFsoXFx3KildL2csIG5hbWUpLm1hcChtYXRjaCA9PiB7XG4gICAgcmV0dXJuIG1hdGNoWzBdID09PSAnW10nID8gJycgOiBtYXRjaFsxXSB8fCBtYXRjaFswXTtcbiAgfSk7XG59XG5cbi8qKlxuICogQ29udmVydCBhbiBhcnJheSB0byBhbiBvYmplY3QuXG4gKlxuICogQHBhcmFtIHtBcnJheTxhbnk+fSBhcnIgLSBUaGUgYXJyYXkgdG8gY29udmVydCB0byBhbiBvYmplY3QuXG4gKlxuICogQHJldHVybnMgQW4gb2JqZWN0IHdpdGggdGhlIHNhbWUga2V5cyBhbmQgdmFsdWVzIGFzIHRoZSBhcnJheS5cbiAqL1xuZnVuY3Rpb24gYXJyYXlUb09iamVjdChhcnIpIHtcbiAgY29uc3Qgb2JqID0ge307XG4gIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhhcnIpO1xuICBsZXQgaTtcbiAgY29uc3QgbGVuID0ga2V5cy5sZW5ndGg7XG4gIGxldCBrZXk7XG4gIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgIGtleSA9IGtleXNbaV07XG4gICAgb2JqW2tleV0gPSBhcnJba2V5XTtcbiAgfVxuICByZXR1cm4gb2JqO1xufVxuXG4vKipcbiAqIEl0IHRha2VzIGEgRm9ybURhdGEgb2JqZWN0IGFuZCByZXR1cm5zIGEgSmF2YVNjcmlwdCBvYmplY3RcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZm9ybURhdGEgVGhlIEZvcm1EYXRhIG9iamVjdCB0byBjb252ZXJ0IHRvIEpTT04uXG4gKlxuICogQHJldHVybnMge09iamVjdDxzdHJpbmcsIGFueT4gfCBudWxsfSBUaGUgY29udmVydGVkIG9iamVjdC5cbiAqL1xuZnVuY3Rpb24gZm9ybURhdGFUb0pTT04oZm9ybURhdGEpIHtcbiAgZnVuY3Rpb24gYnVpbGRQYXRoKHBhdGgsIHZhbHVlLCB0YXJnZXQsIGluZGV4KSB7XG4gICAgbGV0IG5hbWUgPSBwYXRoW2luZGV4KytdO1xuXG4gICAgaWYgKG5hbWUgPT09ICdfX3Byb3RvX18nKSByZXR1cm4gdHJ1ZTtcblxuICAgIGNvbnN0IGlzTnVtZXJpY0tleSA9IE51bWJlci5pc0Zpbml0ZSgrbmFtZSk7XG4gICAgY29uc3QgaXNMYXN0ID0gaW5kZXggPj0gcGF0aC5sZW5ndGg7XG4gICAgbmFtZSA9ICFuYW1lICYmIHV0aWxzJDEuaXNBcnJheSh0YXJnZXQpID8gdGFyZ2V0Lmxlbmd0aCA6IG5hbWU7XG5cbiAgICBpZiAoaXNMYXN0KSB7XG4gICAgICBpZiAodXRpbHMkMS5oYXNPd25Qcm9wKHRhcmdldCwgbmFtZSkpIHtcbiAgICAgICAgdGFyZ2V0W25hbWVdID0gW3RhcmdldFtuYW1lXSwgdmFsdWVdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGFyZ2V0W25hbWVdID0gdmFsdWU7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiAhaXNOdW1lcmljS2V5O1xuICAgIH1cblxuICAgIGlmICghdGFyZ2V0W25hbWVdIHx8ICF1dGlscyQxLmlzT2JqZWN0KHRhcmdldFtuYW1lXSkpIHtcbiAgICAgIHRhcmdldFtuYW1lXSA9IFtdO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdCA9IGJ1aWxkUGF0aChwYXRoLCB2YWx1ZSwgdGFyZ2V0W25hbWVdLCBpbmRleCk7XG5cbiAgICBpZiAocmVzdWx0ICYmIHV0aWxzJDEuaXNBcnJheSh0YXJnZXRbbmFtZV0pKSB7XG4gICAgICB0YXJnZXRbbmFtZV0gPSBhcnJheVRvT2JqZWN0KHRhcmdldFtuYW1lXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuICFpc051bWVyaWNLZXk7XG4gIH1cblxuICBpZiAodXRpbHMkMS5pc0Zvcm1EYXRhKGZvcm1EYXRhKSAmJiB1dGlscyQxLmlzRnVuY3Rpb24oZm9ybURhdGEuZW50cmllcykpIHtcbiAgICBjb25zdCBvYmogPSB7fTtcblxuICAgIHV0aWxzJDEuZm9yRWFjaEVudHJ5KGZvcm1EYXRhLCAobmFtZSwgdmFsdWUpID0+IHtcbiAgICAgIGJ1aWxkUGF0aChwYXJzZVByb3BQYXRoKG5hbWUpLCB2YWx1ZSwgb2JqLCAwKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBvYmo7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuLyoqXG4gKiBJdCB0YWtlcyBhIHN0cmluZywgdHJpZXMgdG8gcGFyc2UgaXQsIGFuZCBpZiBpdCBmYWlscywgaXQgcmV0dXJucyB0aGUgc3RyaW5naWZpZWQgdmVyc2lvblxuICogb2YgdGhlIGlucHV0XG4gKlxuICogQHBhcmFtIHthbnl9IHJhd1ZhbHVlIC0gVGhlIHZhbHVlIHRvIGJlIHN0cmluZ2lmaWVkLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcGFyc2VyIC0gQSBmdW5jdGlvbiB0aGF0IHBhcnNlcyBhIHN0cmluZyBpbnRvIGEgSmF2YVNjcmlwdCBvYmplY3QuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBlbmNvZGVyIC0gQSBmdW5jdGlvbiB0aGF0IHRha2VzIGEgdmFsdWUgYW5kIHJldHVybnMgYSBzdHJpbmcuXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gQSBzdHJpbmdpZmllZCB2ZXJzaW9uIG9mIHRoZSByYXdWYWx1ZS5cbiAqL1xuZnVuY3Rpb24gc3RyaW5naWZ5U2FmZWx5KHJhd1ZhbHVlLCBwYXJzZXIsIGVuY29kZXIpIHtcbiAgaWYgKHV0aWxzJDEuaXNTdHJpbmcocmF3VmFsdWUpKSB7XG4gICAgdHJ5IHtcbiAgICAgIChwYXJzZXIgfHwgSlNPTi5wYXJzZSkocmF3VmFsdWUpO1xuICAgICAgcmV0dXJuIHV0aWxzJDEudHJpbShyYXdWYWx1ZSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgaWYgKGUubmFtZSAhPT0gJ1N5bnRheEVycm9yJykge1xuICAgICAgICB0aHJvdyBlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiAoZW5jb2RlciB8fCBKU09OLnN0cmluZ2lmeSkocmF3VmFsdWUpO1xufVxuXG5jb25zdCBkZWZhdWx0cyA9IHtcblxuICB0cmFuc2l0aW9uYWw6IHRyYW5zaXRpb25hbERlZmF1bHRzLFxuXG4gIGFkYXB0ZXI6IFsneGhyJywgJ2h0dHAnLCAnZmV0Y2gnXSxcblxuICB0cmFuc2Zvcm1SZXF1ZXN0OiBbZnVuY3Rpb24gdHJhbnNmb3JtUmVxdWVzdChkYXRhLCBoZWFkZXJzKSB7XG4gICAgY29uc3QgY29udGVudFR5cGUgPSBoZWFkZXJzLmdldENvbnRlbnRUeXBlKCkgfHwgJyc7XG4gICAgY29uc3QgaGFzSlNPTkNvbnRlbnRUeXBlID0gY29udGVudFR5cGUuaW5kZXhPZignYXBwbGljYXRpb24vanNvbicpID4gLTE7XG4gICAgY29uc3QgaXNPYmplY3RQYXlsb2FkID0gdXRpbHMkMS5pc09iamVjdChkYXRhKTtcblxuICAgIGlmIChpc09iamVjdFBheWxvYWQgJiYgdXRpbHMkMS5pc0hUTUxGb3JtKGRhdGEpKSB7XG4gICAgICBkYXRhID0gbmV3IEZvcm1EYXRhKGRhdGEpO1xuICAgIH1cblxuICAgIGNvbnN0IGlzRm9ybURhdGEgPSB1dGlscyQxLmlzRm9ybURhdGEoZGF0YSk7XG5cbiAgICBpZiAoaXNGb3JtRGF0YSkge1xuICAgICAgcmV0dXJuIGhhc0pTT05Db250ZW50VHlwZSA/IEpTT04uc3RyaW5naWZ5KGZvcm1EYXRhVG9KU09OKGRhdGEpKSA6IGRhdGE7XG4gICAgfVxuXG4gICAgaWYgKHV0aWxzJDEuaXNBcnJheUJ1ZmZlcihkYXRhKSB8fFxuICAgICAgdXRpbHMkMS5pc0J1ZmZlcihkYXRhKSB8fFxuICAgICAgdXRpbHMkMS5pc1N0cmVhbShkYXRhKSB8fFxuICAgICAgdXRpbHMkMS5pc0ZpbGUoZGF0YSkgfHxcbiAgICAgIHV0aWxzJDEuaXNCbG9iKGRhdGEpIHx8XG4gICAgICB1dGlscyQxLmlzUmVhZGFibGVTdHJlYW0oZGF0YSlcbiAgICApIHtcbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cbiAgICBpZiAodXRpbHMkMS5pc0FycmF5QnVmZmVyVmlldyhkYXRhKSkge1xuICAgICAgcmV0dXJuIGRhdGEuYnVmZmVyO1xuICAgIH1cbiAgICBpZiAodXRpbHMkMS5pc1VSTFNlYXJjaFBhcmFtcyhkYXRhKSkge1xuICAgICAgaGVhZGVycy5zZXRDb250ZW50VHlwZSgnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkO2NoYXJzZXQ9dXRmLTgnLCBmYWxzZSk7XG4gICAgICByZXR1cm4gZGF0YS50b1N0cmluZygpO1xuICAgIH1cblxuICAgIGxldCBpc0ZpbGVMaXN0O1xuXG4gICAgaWYgKGlzT2JqZWN0UGF5bG9hZCkge1xuICAgICAgaWYgKGNvbnRlbnRUeXBlLmluZGV4T2YoJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcpID4gLTEpIHtcbiAgICAgICAgcmV0dXJuIHRvVVJMRW5jb2RlZEZvcm0oZGF0YSwgdGhpcy5mb3JtU2VyaWFsaXplcikudG9TdHJpbmcoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKChpc0ZpbGVMaXN0ID0gdXRpbHMkMS5pc0ZpbGVMaXN0KGRhdGEpKSB8fCBjb250ZW50VHlwZS5pbmRleE9mKCdtdWx0aXBhcnQvZm9ybS1kYXRhJykgPiAtMSkge1xuICAgICAgICBjb25zdCBfRm9ybURhdGEgPSB0aGlzLmVudiAmJiB0aGlzLmVudi5Gb3JtRGF0YTtcblxuICAgICAgICByZXR1cm4gdG9Gb3JtRGF0YShcbiAgICAgICAgICBpc0ZpbGVMaXN0ID8geydmaWxlc1tdJzogZGF0YX0gOiBkYXRhLFxuICAgICAgICAgIF9Gb3JtRGF0YSAmJiBuZXcgX0Zvcm1EYXRhKCksXG4gICAgICAgICAgdGhpcy5mb3JtU2VyaWFsaXplclxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpc09iamVjdFBheWxvYWQgfHwgaGFzSlNPTkNvbnRlbnRUeXBlICkge1xuICAgICAgaGVhZGVycy5zZXRDb250ZW50VHlwZSgnYXBwbGljYXRpb24vanNvbicsIGZhbHNlKTtcbiAgICAgIHJldHVybiBzdHJpbmdpZnlTYWZlbHkoZGF0YSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRhdGE7XG4gIH1dLFxuXG4gIHRyYW5zZm9ybVJlc3BvbnNlOiBbZnVuY3Rpb24gdHJhbnNmb3JtUmVzcG9uc2UoZGF0YSkge1xuICAgIGNvbnN0IHRyYW5zaXRpb25hbCA9IHRoaXMudHJhbnNpdGlvbmFsIHx8IGRlZmF1bHRzLnRyYW5zaXRpb25hbDtcbiAgICBjb25zdCBmb3JjZWRKU09OUGFyc2luZyA9IHRyYW5zaXRpb25hbCAmJiB0cmFuc2l0aW9uYWwuZm9yY2VkSlNPTlBhcnNpbmc7XG4gICAgY29uc3QgSlNPTlJlcXVlc3RlZCA9IHRoaXMucmVzcG9uc2VUeXBlID09PSAnanNvbic7XG5cbiAgICBpZiAodXRpbHMkMS5pc1Jlc3BvbnNlKGRhdGEpIHx8IHV0aWxzJDEuaXNSZWFkYWJsZVN0cmVhbShkYXRhKSkge1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgaWYgKGRhdGEgJiYgdXRpbHMkMS5pc1N0cmluZyhkYXRhKSAmJiAoKGZvcmNlZEpTT05QYXJzaW5nICYmICF0aGlzLnJlc3BvbnNlVHlwZSkgfHwgSlNPTlJlcXVlc3RlZCkpIHtcbiAgICAgIGNvbnN0IHNpbGVudEpTT05QYXJzaW5nID0gdHJhbnNpdGlvbmFsICYmIHRyYW5zaXRpb25hbC5zaWxlbnRKU09OUGFyc2luZztcbiAgICAgIGNvbnN0IHN0cmljdEpTT05QYXJzaW5nID0gIXNpbGVudEpTT05QYXJzaW5nICYmIEpTT05SZXF1ZXN0ZWQ7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBKU09OLnBhcnNlKGRhdGEpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBpZiAoc3RyaWN0SlNPTlBhcnNpbmcpIHtcbiAgICAgICAgICBpZiAoZS5uYW1lID09PSAnU3ludGF4RXJyb3InKSB7XG4gICAgICAgICAgICB0aHJvdyBBeGlvc0Vycm9yLmZyb20oZSwgQXhpb3NFcnJvci5FUlJfQkFEX1JFU1BPTlNFLCB0aGlzLCBudWxsLCB0aGlzLnJlc3BvbnNlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBkYXRhO1xuICB9XSxcblxuICAvKipcbiAgICogQSB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcyB0byBhYm9ydCBhIHJlcXVlc3QuIElmIHNldCB0byAwIChkZWZhdWx0KSBhXG4gICAqIHRpbWVvdXQgaXMgbm90IGNyZWF0ZWQuXG4gICAqL1xuICB0aW1lb3V0OiAwLFxuXG4gIHhzcmZDb29raWVOYW1lOiAnWFNSRi1UT0tFTicsXG4gIHhzcmZIZWFkZXJOYW1lOiAnWC1YU1JGLVRPS0VOJyxcblxuICBtYXhDb250ZW50TGVuZ3RoOiAtMSxcbiAgbWF4Qm9keUxlbmd0aDogLTEsXG5cbiAgZW52OiB7XG4gICAgRm9ybURhdGE6IHBsYXRmb3JtLmNsYXNzZXMuRm9ybURhdGEsXG4gICAgQmxvYjogcGxhdGZvcm0uY2xhc3Nlcy5CbG9iXG4gIH0sXG5cbiAgdmFsaWRhdGVTdGF0dXM6IGZ1bmN0aW9uIHZhbGlkYXRlU3RhdHVzKHN0YXR1cykge1xuICAgIHJldHVybiBzdGF0dXMgPj0gMjAwICYmIHN0YXR1cyA8IDMwMDtcbiAgfSxcblxuICBoZWFkZXJzOiB7XG4gICAgY29tbW9uOiB7XG4gICAgICAnQWNjZXB0JzogJ2FwcGxpY2F0aW9uL2pzb24sIHRleHQvcGxhaW4sICovKicsXG4gICAgICAnQ29udGVudC1UeXBlJzogdW5kZWZpbmVkXG4gICAgfVxuICB9XG59O1xuXG51dGlscyQxLmZvckVhY2goWydkZWxldGUnLCAnZ2V0JywgJ2hlYWQnLCAncG9zdCcsICdwdXQnLCAncGF0Y2gnXSwgKG1ldGhvZCkgPT4ge1xuICBkZWZhdWx0cy5oZWFkZXJzW21ldGhvZF0gPSB7fTtcbn0pO1xuXG52YXIgZGVmYXVsdHMkMSA9IGRlZmF1bHRzO1xuXG4vLyBSYXdBeGlvc0hlYWRlcnMgd2hvc2UgZHVwbGljYXRlcyBhcmUgaWdub3JlZCBieSBub2RlXG4vLyBjLmYuIGh0dHBzOi8vbm9kZWpzLm9yZy9hcGkvaHR0cC5odG1sI2h0dHBfbWVzc2FnZV9oZWFkZXJzXG5jb25zdCBpZ25vcmVEdXBsaWNhdGVPZiA9IHV0aWxzJDEudG9PYmplY3RTZXQoW1xuICAnYWdlJywgJ2F1dGhvcml6YXRpb24nLCAnY29udGVudC1sZW5ndGgnLCAnY29udGVudC10eXBlJywgJ2V0YWcnLFxuICAnZXhwaXJlcycsICdmcm9tJywgJ2hvc3QnLCAnaWYtbW9kaWZpZWQtc2luY2UnLCAnaWYtdW5tb2RpZmllZC1zaW5jZScsXG4gICdsYXN0LW1vZGlmaWVkJywgJ2xvY2F0aW9uJywgJ21heC1mb3J3YXJkcycsICdwcm94eS1hdXRob3JpemF0aW9uJyxcbiAgJ3JlZmVyZXInLCAncmV0cnktYWZ0ZXInLCAndXNlci1hZ2VudCdcbl0pO1xuXG4vKipcbiAqIFBhcnNlIGhlYWRlcnMgaW50byBhbiBvYmplY3RcbiAqXG4gKiBgYGBcbiAqIERhdGU6IFdlZCwgMjcgQXVnIDIwMTQgMDg6NTg6NDkgR01UXG4gKiBDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL2pzb25cbiAqIENvbm5lY3Rpb246IGtlZXAtYWxpdmVcbiAqIFRyYW5zZmVyLUVuY29kaW5nOiBjaHVua2VkXG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gcmF3SGVhZGVycyBIZWFkZXJzIG5lZWRpbmcgdG8gYmUgcGFyc2VkXG4gKlxuICogQHJldHVybnMge09iamVjdH0gSGVhZGVycyBwYXJzZWQgaW50byBhbiBvYmplY3RcbiAqL1xudmFyIHBhcnNlSGVhZGVycyA9IHJhd0hlYWRlcnMgPT4ge1xuICBjb25zdCBwYXJzZWQgPSB7fTtcbiAgbGV0IGtleTtcbiAgbGV0IHZhbDtcbiAgbGV0IGk7XG5cbiAgcmF3SGVhZGVycyAmJiByYXdIZWFkZXJzLnNwbGl0KCdcXG4nKS5mb3JFYWNoKGZ1bmN0aW9uIHBhcnNlcihsaW5lKSB7XG4gICAgaSA9IGxpbmUuaW5kZXhPZignOicpO1xuICAgIGtleSA9IGxpbmUuc3Vic3RyaW5nKDAsIGkpLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuICAgIHZhbCA9IGxpbmUuc3Vic3RyaW5nKGkgKyAxKS50cmltKCk7XG5cbiAgICBpZiAoIWtleSB8fCAocGFyc2VkW2tleV0gJiYgaWdub3JlRHVwbGljYXRlT2Zba2V5XSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoa2V5ID09PSAnc2V0LWNvb2tpZScpIHtcbiAgICAgIGlmIChwYXJzZWRba2V5XSkge1xuICAgICAgICBwYXJzZWRba2V5XS5wdXNoKHZhbCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYXJzZWRba2V5XSA9IFt2YWxdO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBwYXJzZWRba2V5XSA9IHBhcnNlZFtrZXldID8gcGFyc2VkW2tleV0gKyAnLCAnICsgdmFsIDogdmFsO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHBhcnNlZDtcbn07XG5cbmNvbnN0ICRpbnRlcm5hbHMgPSBTeW1ib2woJ2ludGVybmFscycpO1xuXG5mdW5jdGlvbiBub3JtYWxpemVIZWFkZXIoaGVhZGVyKSB7XG4gIHJldHVybiBoZWFkZXIgJiYgU3RyaW5nKGhlYWRlcikudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVZhbHVlKHZhbHVlKSB7XG4gIGlmICh2YWx1ZSA9PT0gZmFsc2UgfHwgdmFsdWUgPT0gbnVsbCkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIHJldHVybiB1dGlscyQxLmlzQXJyYXkodmFsdWUpID8gdmFsdWUubWFwKG5vcm1hbGl6ZVZhbHVlKSA6IFN0cmluZyh2YWx1ZSk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlVG9rZW5zKHN0cikge1xuICBjb25zdCB0b2tlbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICBjb25zdCB0b2tlbnNSRSA9IC8oW15cXHMsOz1dKylcXHMqKD86PVxccyooW14sO10rKSk/L2c7XG4gIGxldCBtYXRjaDtcblxuICB3aGlsZSAoKG1hdGNoID0gdG9rZW5zUkUuZXhlYyhzdHIpKSkge1xuICAgIHRva2Vuc1ttYXRjaFsxXV0gPSBtYXRjaFsyXTtcbiAgfVxuXG4gIHJldHVybiB0b2tlbnM7XG59XG5cbmNvbnN0IGlzVmFsaWRIZWFkZXJOYW1lID0gKHN0cikgPT4gL15bLV9hLXpBLVowLTleYHx+LCEjJCUmJyorLl0rJC8udGVzdChzdHIudHJpbSgpKTtcblxuZnVuY3Rpb24gbWF0Y2hIZWFkZXJWYWx1ZShjb250ZXh0LCB2YWx1ZSwgaGVhZGVyLCBmaWx0ZXIsIGlzSGVhZGVyTmFtZUZpbHRlcikge1xuICBpZiAodXRpbHMkMS5pc0Z1bmN0aW9uKGZpbHRlcikpIHtcbiAgICByZXR1cm4gZmlsdGVyLmNhbGwodGhpcywgdmFsdWUsIGhlYWRlcik7XG4gIH1cblxuICBpZiAoaXNIZWFkZXJOYW1lRmlsdGVyKSB7XG4gICAgdmFsdWUgPSBoZWFkZXI7XG4gIH1cblxuICBpZiAoIXV0aWxzJDEuaXNTdHJpbmcodmFsdWUpKSByZXR1cm47XG5cbiAgaWYgKHV0aWxzJDEuaXNTdHJpbmcoZmlsdGVyKSkge1xuICAgIHJldHVybiB2YWx1ZS5pbmRleE9mKGZpbHRlcikgIT09IC0xO1xuICB9XG5cbiAgaWYgKHV0aWxzJDEuaXNSZWdFeHAoZmlsdGVyKSkge1xuICAgIHJldHVybiBmaWx0ZXIudGVzdCh2YWx1ZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZm9ybWF0SGVhZGVyKGhlYWRlcikge1xuICByZXR1cm4gaGVhZGVyLnRyaW0oKVxuICAgIC50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoLyhbYS16XFxkXSkoXFx3KikvZywgKHcsIGNoYXIsIHN0cikgPT4ge1xuICAgICAgcmV0dXJuIGNoYXIudG9VcHBlckNhc2UoKSArIHN0cjtcbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gYnVpbGRBY2Nlc3NvcnMob2JqLCBoZWFkZXIpIHtcbiAgY29uc3QgYWNjZXNzb3JOYW1lID0gdXRpbHMkMS50b0NhbWVsQ2FzZSgnICcgKyBoZWFkZXIpO1xuXG4gIFsnZ2V0JywgJ3NldCcsICdoYXMnXS5mb3JFYWNoKG1ldGhvZE5hbWUgPT4ge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIG1ldGhvZE5hbWUgKyBhY2Nlc3Nvck5hbWUsIHtcbiAgICAgIHZhbHVlOiBmdW5jdGlvbihhcmcxLCBhcmcyLCBhcmczKSB7XG4gICAgICAgIHJldHVybiB0aGlzW21ldGhvZE5hbWVdLmNhbGwodGhpcywgaGVhZGVyLCBhcmcxLCBhcmcyLCBhcmczKTtcbiAgICAgIH0sXG4gICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgfSk7XG59XG5cbmNsYXNzIEF4aW9zSGVhZGVycyB7XG4gIGNvbnN0cnVjdG9yKGhlYWRlcnMpIHtcbiAgICBoZWFkZXJzICYmIHRoaXMuc2V0KGhlYWRlcnMpO1xuICB9XG5cbiAgc2V0KGhlYWRlciwgdmFsdWVPclJld3JpdGUsIHJld3JpdGUpIHtcbiAgICBjb25zdCBzZWxmID0gdGhpcztcblxuICAgIGZ1bmN0aW9uIHNldEhlYWRlcihfdmFsdWUsIF9oZWFkZXIsIF9yZXdyaXRlKSB7XG4gICAgICBjb25zdCBsSGVhZGVyID0gbm9ybWFsaXplSGVhZGVyKF9oZWFkZXIpO1xuXG4gICAgICBpZiAoIWxIZWFkZXIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdoZWFkZXIgbmFtZSBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZycpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBrZXkgPSB1dGlscyQxLmZpbmRLZXkoc2VsZiwgbEhlYWRlcik7XG5cbiAgICAgIGlmKCFrZXkgfHwgc2VsZltrZXldID09PSB1bmRlZmluZWQgfHwgX3Jld3JpdGUgPT09IHRydWUgfHwgKF9yZXdyaXRlID09PSB1bmRlZmluZWQgJiYgc2VsZltrZXldICE9PSBmYWxzZSkpIHtcbiAgICAgICAgc2VsZltrZXkgfHwgX2hlYWRlcl0gPSBub3JtYWxpemVWYWx1ZShfdmFsdWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHNldEhlYWRlcnMgPSAoaGVhZGVycywgX3Jld3JpdGUpID0+XG4gICAgICB1dGlscyQxLmZvckVhY2goaGVhZGVycywgKF92YWx1ZSwgX2hlYWRlcikgPT4gc2V0SGVhZGVyKF92YWx1ZSwgX2hlYWRlciwgX3Jld3JpdGUpKTtcblxuICAgIGlmICh1dGlscyQxLmlzUGxhaW5PYmplY3QoaGVhZGVyKSB8fCBoZWFkZXIgaW5zdGFuY2VvZiB0aGlzLmNvbnN0cnVjdG9yKSB7XG4gICAgICBzZXRIZWFkZXJzKGhlYWRlciwgdmFsdWVPclJld3JpdGUpO1xuICAgIH0gZWxzZSBpZih1dGlscyQxLmlzU3RyaW5nKGhlYWRlcikgJiYgKGhlYWRlciA9IGhlYWRlci50cmltKCkpICYmICFpc1ZhbGlkSGVhZGVyTmFtZShoZWFkZXIpKSB7XG4gICAgICBzZXRIZWFkZXJzKHBhcnNlSGVhZGVycyhoZWFkZXIpLCB2YWx1ZU9yUmV3cml0ZSk7XG4gICAgfSBlbHNlIGlmICh1dGlscyQxLmlzSGVhZGVycyhoZWFkZXIpKSB7XG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBoZWFkZXIuZW50cmllcygpKSB7XG4gICAgICAgIHNldEhlYWRlcih2YWx1ZSwga2V5LCByZXdyaXRlKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaGVhZGVyICE9IG51bGwgJiYgc2V0SGVhZGVyKHZhbHVlT3JSZXdyaXRlLCBoZWFkZXIsIHJld3JpdGUpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgZ2V0KGhlYWRlciwgcGFyc2VyKSB7XG4gICAgaGVhZGVyID0gbm9ybWFsaXplSGVhZGVyKGhlYWRlcik7XG5cbiAgICBpZiAoaGVhZGVyKSB7XG4gICAgICBjb25zdCBrZXkgPSB1dGlscyQxLmZpbmRLZXkodGhpcywgaGVhZGVyKTtcblxuICAgICAgaWYgKGtleSkge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXNba2V5XTtcblxuICAgICAgICBpZiAoIXBhcnNlcikge1xuICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwYXJzZXIgPT09IHRydWUpIHtcbiAgICAgICAgICByZXR1cm4gcGFyc2VUb2tlbnModmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHV0aWxzJDEuaXNGdW5jdGlvbihwYXJzZXIpKSB7XG4gICAgICAgICAgcmV0dXJuIHBhcnNlci5jYWxsKHRoaXMsIHZhbHVlLCBrZXkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHV0aWxzJDEuaXNSZWdFeHAocGFyc2VyKSkge1xuICAgICAgICAgIHJldHVybiBwYXJzZXIuZXhlYyh2YWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdwYXJzZXIgbXVzdCBiZSBib29sZWFufHJlZ2V4cHxmdW5jdGlvbicpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGhhcyhoZWFkZXIsIG1hdGNoZXIpIHtcbiAgICBoZWFkZXIgPSBub3JtYWxpemVIZWFkZXIoaGVhZGVyKTtcblxuICAgIGlmIChoZWFkZXIpIHtcbiAgICAgIGNvbnN0IGtleSA9IHV0aWxzJDEuZmluZEtleSh0aGlzLCBoZWFkZXIpO1xuXG4gICAgICByZXR1cm4gISEoa2V5ICYmIHRoaXNba2V5XSAhPT0gdW5kZWZpbmVkICYmICghbWF0Y2hlciB8fCBtYXRjaEhlYWRlclZhbHVlKHRoaXMsIHRoaXNba2V5XSwga2V5LCBtYXRjaGVyKSkpO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGRlbGV0ZShoZWFkZXIsIG1hdGNoZXIpIHtcbiAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICBsZXQgZGVsZXRlZCA9IGZhbHNlO1xuXG4gICAgZnVuY3Rpb24gZGVsZXRlSGVhZGVyKF9oZWFkZXIpIHtcbiAgICAgIF9oZWFkZXIgPSBub3JtYWxpemVIZWFkZXIoX2hlYWRlcik7XG5cbiAgICAgIGlmIChfaGVhZGVyKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IHV0aWxzJDEuZmluZEtleShzZWxmLCBfaGVhZGVyKTtcblxuICAgICAgICBpZiAoa2V5ICYmICghbWF0Y2hlciB8fCBtYXRjaEhlYWRlclZhbHVlKHNlbGYsIHNlbGZba2V5XSwga2V5LCBtYXRjaGVyKSkpIHtcbiAgICAgICAgICBkZWxldGUgc2VsZltrZXldO1xuXG4gICAgICAgICAgZGVsZXRlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodXRpbHMkMS5pc0FycmF5KGhlYWRlcikpIHtcbiAgICAgIGhlYWRlci5mb3JFYWNoKGRlbGV0ZUhlYWRlcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlbGV0ZUhlYWRlcihoZWFkZXIpO1xuICAgIH1cblxuICAgIHJldHVybiBkZWxldGVkO1xuICB9XG5cbiAgY2xlYXIobWF0Y2hlcikge1xuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyh0aGlzKTtcbiAgICBsZXQgaSA9IGtleXMubGVuZ3RoO1xuICAgIGxldCBkZWxldGVkID0gZmFsc2U7XG5cbiAgICB3aGlsZSAoaS0tKSB7XG4gICAgICBjb25zdCBrZXkgPSBrZXlzW2ldO1xuICAgICAgaWYoIW1hdGNoZXIgfHwgbWF0Y2hIZWFkZXJWYWx1ZSh0aGlzLCB0aGlzW2tleV0sIGtleSwgbWF0Y2hlciwgdHJ1ZSkpIHtcbiAgICAgICAgZGVsZXRlIHRoaXNba2V5XTtcbiAgICAgICAgZGVsZXRlZCA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGRlbGV0ZWQ7XG4gIH1cblxuICBub3JtYWxpemUoZm9ybWF0KSB7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgY29uc3QgaGVhZGVycyA9IHt9O1xuXG4gICAgdXRpbHMkMS5mb3JFYWNoKHRoaXMsICh2YWx1ZSwgaGVhZGVyKSA9PiB7XG4gICAgICBjb25zdCBrZXkgPSB1dGlscyQxLmZpbmRLZXkoaGVhZGVycywgaGVhZGVyKTtcblxuICAgICAgaWYgKGtleSkge1xuICAgICAgICBzZWxmW2tleV0gPSBub3JtYWxpemVWYWx1ZSh2YWx1ZSk7XG4gICAgICAgIGRlbGV0ZSBzZWxmW2hlYWRlcl07XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgbm9ybWFsaXplZCA9IGZvcm1hdCA/IGZvcm1hdEhlYWRlcihoZWFkZXIpIDogU3RyaW5nKGhlYWRlcikudHJpbSgpO1xuXG4gICAgICBpZiAobm9ybWFsaXplZCAhPT0gaGVhZGVyKSB7XG4gICAgICAgIGRlbGV0ZSBzZWxmW2hlYWRlcl07XG4gICAgICB9XG5cbiAgICAgIHNlbGZbbm9ybWFsaXplZF0gPSBub3JtYWxpemVWYWx1ZSh2YWx1ZSk7XG5cbiAgICAgIGhlYWRlcnNbbm9ybWFsaXplZF0gPSB0cnVlO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBjb25jYXQoLi4udGFyZ2V0cykge1xuICAgIHJldHVybiB0aGlzLmNvbnN0cnVjdG9yLmNvbmNhdCh0aGlzLCAuLi50YXJnZXRzKTtcbiAgfVxuXG4gIHRvSlNPTihhc1N0cmluZ3MpIHtcbiAgICBjb25zdCBvYmogPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuXG4gICAgdXRpbHMkMS5mb3JFYWNoKHRoaXMsICh2YWx1ZSwgaGVhZGVyKSA9PiB7XG4gICAgICB2YWx1ZSAhPSBudWxsICYmIHZhbHVlICE9PSBmYWxzZSAmJiAob2JqW2hlYWRlcl0gPSBhc1N0cmluZ3MgJiYgdXRpbHMkMS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlLmpvaW4oJywgJykgOiB2YWx1ZSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gb2JqO1xuICB9XG5cbiAgW1N5bWJvbC5pdGVyYXRvcl0oKSB7XG4gICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMudG9KU09OKCkpW1N5bWJvbC5pdGVyYXRvcl0oKTtcbiAgfVxuXG4gIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiBPYmplY3QuZW50cmllcyh0aGlzLnRvSlNPTigpKS5tYXAoKFtoZWFkZXIsIHZhbHVlXSkgPT4gaGVhZGVyICsgJzogJyArIHZhbHVlKS5qb2luKCdcXG4nKTtcbiAgfVxuXG4gIGdldCBbU3ltYm9sLnRvU3RyaW5nVGFnXSgpIHtcbiAgICByZXR1cm4gJ0F4aW9zSGVhZGVycyc7XG4gIH1cblxuICBzdGF0aWMgZnJvbSh0aGluZykge1xuICAgIHJldHVybiB0aGluZyBpbnN0YW5jZW9mIHRoaXMgPyB0aGluZyA6IG5ldyB0aGlzKHRoaW5nKTtcbiAgfVxuXG4gIHN0YXRpYyBjb25jYXQoZmlyc3QsIC4uLnRhcmdldHMpIHtcbiAgICBjb25zdCBjb21wdXRlZCA9IG5ldyB0aGlzKGZpcnN0KTtcblxuICAgIHRhcmdldHMuZm9yRWFjaCgodGFyZ2V0KSA9PiBjb21wdXRlZC5zZXQodGFyZ2V0KSk7XG5cbiAgICByZXR1cm4gY29tcHV0ZWQ7XG4gIH1cblxuICBzdGF0aWMgYWNjZXNzb3IoaGVhZGVyKSB7XG4gICAgY29uc3QgaW50ZXJuYWxzID0gdGhpc1skaW50ZXJuYWxzXSA9ICh0aGlzWyRpbnRlcm5hbHNdID0ge1xuICAgICAgYWNjZXNzb3JzOiB7fVxuICAgIH0pO1xuXG4gICAgY29uc3QgYWNjZXNzb3JzID0gaW50ZXJuYWxzLmFjY2Vzc29ycztcbiAgICBjb25zdCBwcm90b3R5cGUgPSB0aGlzLnByb3RvdHlwZTtcblxuICAgIGZ1bmN0aW9uIGRlZmluZUFjY2Vzc29yKF9oZWFkZXIpIHtcbiAgICAgIGNvbnN0IGxIZWFkZXIgPSBub3JtYWxpemVIZWFkZXIoX2hlYWRlcik7XG5cbiAgICAgIGlmICghYWNjZXNzb3JzW2xIZWFkZXJdKSB7XG4gICAgICAgIGJ1aWxkQWNjZXNzb3JzKHByb3RvdHlwZSwgX2hlYWRlcik7XG4gICAgICAgIGFjY2Vzc29yc1tsSGVhZGVyXSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdXRpbHMkMS5pc0FycmF5KGhlYWRlcikgPyBoZWFkZXIuZm9yRWFjaChkZWZpbmVBY2Nlc3NvcikgOiBkZWZpbmVBY2Nlc3NvcihoZWFkZXIpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbn1cblxuQXhpb3NIZWFkZXJzLmFjY2Vzc29yKFsnQ29udGVudC1UeXBlJywgJ0NvbnRlbnQtTGVuZ3RoJywgJ0FjY2VwdCcsICdBY2NlcHQtRW5jb2RpbmcnLCAnVXNlci1BZ2VudCcsICdBdXRob3JpemF0aW9uJ10pO1xuXG4vLyByZXNlcnZlZCBuYW1lcyBob3RmaXhcbnV0aWxzJDEucmVkdWNlRGVzY3JpcHRvcnMoQXhpb3NIZWFkZXJzLnByb3RvdHlwZSwgKHt2YWx1ZX0sIGtleSkgPT4ge1xuICBsZXQgbWFwcGVkID0ga2V5WzBdLnRvVXBwZXJDYXNlKCkgKyBrZXkuc2xpY2UoMSk7IC8vIG1hcCBgc2V0YCA9PiBgU2V0YFxuICByZXR1cm4ge1xuICAgIGdldDogKCkgPT4gdmFsdWUsXG4gICAgc2V0KGhlYWRlclZhbHVlKSB7XG4gICAgICB0aGlzW21hcHBlZF0gPSBoZWFkZXJWYWx1ZTtcbiAgICB9XG4gIH1cbn0pO1xuXG51dGlscyQxLmZyZWV6ZU1ldGhvZHMoQXhpb3NIZWFkZXJzKTtcblxudmFyIEF4aW9zSGVhZGVycyQxID0gQXhpb3NIZWFkZXJzO1xuXG4vKipcbiAqIFRyYW5zZm9ybSB0aGUgZGF0YSBmb3IgYSByZXF1ZXN0IG9yIGEgcmVzcG9uc2VcbiAqXG4gKiBAcGFyYW0ge0FycmF5fEZ1bmN0aW9ufSBmbnMgQSBzaW5nbGUgZnVuY3Rpb24gb3IgQXJyYXkgb2YgZnVuY3Rpb25zXG4gKiBAcGFyYW0gez9PYmplY3R9IHJlc3BvbnNlIFRoZSByZXNwb25zZSBvYmplY3RcbiAqXG4gKiBAcmV0dXJucyB7Kn0gVGhlIHJlc3VsdGluZyB0cmFuc2Zvcm1lZCBkYXRhXG4gKi9cbmZ1bmN0aW9uIHRyYW5zZm9ybURhdGEoZm5zLCByZXNwb25zZSkge1xuICBjb25zdCBjb25maWcgPSB0aGlzIHx8IGRlZmF1bHRzJDE7XG4gIGNvbnN0IGNvbnRleHQgPSByZXNwb25zZSB8fCBjb25maWc7XG4gIGNvbnN0IGhlYWRlcnMgPSBBeGlvc0hlYWRlcnMkMS5mcm9tKGNvbnRleHQuaGVhZGVycyk7XG4gIGxldCBkYXRhID0gY29udGV4dC5kYXRhO1xuXG4gIHV0aWxzJDEuZm9yRWFjaChmbnMsIGZ1bmN0aW9uIHRyYW5zZm9ybShmbikge1xuICAgIGRhdGEgPSBmbi5jYWxsKGNvbmZpZywgZGF0YSwgaGVhZGVycy5ub3JtYWxpemUoKSwgcmVzcG9uc2UgPyByZXNwb25zZS5zdGF0dXMgOiB1bmRlZmluZWQpO1xuICB9KTtcblxuICBoZWFkZXJzLm5vcm1hbGl6ZSgpO1xuXG4gIHJldHVybiBkYXRhO1xufVxuXG5mdW5jdGlvbiBpc0NhbmNlbCh2YWx1ZSkge1xuICByZXR1cm4gISEodmFsdWUgJiYgdmFsdWUuX19DQU5DRUxfXyk7XG59XG5cbi8qKlxuICogQSBgQ2FuY2VsZWRFcnJvcmAgaXMgYW4gb2JqZWN0IHRoYXQgaXMgdGhyb3duIHdoZW4gYW4gb3BlcmF0aW9uIGlzIGNhbmNlbGVkLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nPX0gbWVzc2FnZSBUaGUgbWVzc2FnZS5cbiAqIEBwYXJhbSB7T2JqZWN0PX0gY29uZmlnIFRoZSBjb25maWcuXG4gKiBAcGFyYW0ge09iamVjdD19IHJlcXVlc3QgVGhlIHJlcXVlc3QuXG4gKlxuICogQHJldHVybnMge0NhbmNlbGVkRXJyb3J9IFRoZSBjcmVhdGVkIGVycm9yLlxuICovXG5mdW5jdGlvbiBDYW5jZWxlZEVycm9yKG1lc3NhZ2UsIGNvbmZpZywgcmVxdWVzdCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZXEtbnVsbCxlcWVxZXFcbiAgQXhpb3NFcnJvci5jYWxsKHRoaXMsIG1lc3NhZ2UgPT0gbnVsbCA/ICdjYW5jZWxlZCcgOiBtZXNzYWdlLCBBeGlvc0Vycm9yLkVSUl9DQU5DRUxFRCwgY29uZmlnLCByZXF1ZXN0KTtcbiAgdGhpcy5uYW1lID0gJ0NhbmNlbGVkRXJyb3InO1xufVxuXG51dGlscyQxLmluaGVyaXRzKENhbmNlbGVkRXJyb3IsIEF4aW9zRXJyb3IsIHtcbiAgX19DQU5DRUxfXzogdHJ1ZVxufSk7XG5cbi8qKlxuICogUmVzb2x2ZSBvciByZWplY3QgYSBQcm9taXNlIGJhc2VkIG9uIHJlc3BvbnNlIHN0YXR1cy5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSByZXNvbHZlIEEgZnVuY3Rpb24gdGhhdCByZXNvbHZlcyB0aGUgcHJvbWlzZS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHJlamVjdCBBIGZ1bmN0aW9uIHRoYXQgcmVqZWN0cyB0aGUgcHJvbWlzZS5cbiAqIEBwYXJhbSB7b2JqZWN0fSByZXNwb25zZSBUaGUgcmVzcG9uc2UuXG4gKlxuICogQHJldHVybnMge29iamVjdH0gVGhlIHJlc3BvbnNlLlxuICovXG5mdW5jdGlvbiBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCByZXNwb25zZSkge1xuICBjb25zdCB2YWxpZGF0ZVN0YXR1cyA9IHJlc3BvbnNlLmNvbmZpZy52YWxpZGF0ZVN0YXR1cztcbiAgaWYgKCFyZXNwb25zZS5zdGF0dXMgfHwgIXZhbGlkYXRlU3RhdHVzIHx8IHZhbGlkYXRlU3RhdHVzKHJlc3BvbnNlLnN0YXR1cykpIHtcbiAgICByZXNvbHZlKHJlc3BvbnNlKTtcbiAgfSBlbHNlIHtcbiAgICByZWplY3QobmV3IEF4aW9zRXJyb3IoXG4gICAgICAnUmVxdWVzdCBmYWlsZWQgd2l0aCBzdGF0dXMgY29kZSAnICsgcmVzcG9uc2Uuc3RhdHVzLFxuICAgICAgW0F4aW9zRXJyb3IuRVJSX0JBRF9SRVFVRVNULCBBeGlvc0Vycm9yLkVSUl9CQURfUkVTUE9OU0VdW01hdGguZmxvb3IocmVzcG9uc2Uuc3RhdHVzIC8gMTAwKSAtIDRdLFxuICAgICAgcmVzcG9uc2UuY29uZmlnLFxuICAgICAgcmVzcG9uc2UucmVxdWVzdCxcbiAgICAgIHJlc3BvbnNlXG4gICAgKSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcGFyc2VQcm90b2NvbCh1cmwpIHtcbiAgY29uc3QgbWF0Y2ggPSAvXihbLStcXHddezEsMjV9KSg6P1xcL1xcL3w6KS8uZXhlYyh1cmwpO1xuICByZXR1cm4gbWF0Y2ggJiYgbWF0Y2hbMV0gfHwgJyc7XG59XG5cbi8qKlxuICogQ2FsY3VsYXRlIGRhdGEgbWF4UmF0ZVxuICogQHBhcmFtIHtOdW1iZXJ9IFtzYW1wbGVzQ291bnQ9IDEwXVxuICogQHBhcmFtIHtOdW1iZXJ9IFttaW49IDEwMDBdXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259XG4gKi9cbmZ1bmN0aW9uIHNwZWVkb21ldGVyKHNhbXBsZXNDb3VudCwgbWluKSB7XG4gIHNhbXBsZXNDb3VudCA9IHNhbXBsZXNDb3VudCB8fCAxMDtcbiAgY29uc3QgYnl0ZXMgPSBuZXcgQXJyYXkoc2FtcGxlc0NvdW50KTtcbiAgY29uc3QgdGltZXN0YW1wcyA9IG5ldyBBcnJheShzYW1wbGVzQ291bnQpO1xuICBsZXQgaGVhZCA9IDA7XG4gIGxldCB0YWlsID0gMDtcbiAgbGV0IGZpcnN0U2FtcGxlVFM7XG5cbiAgbWluID0gbWluICE9PSB1bmRlZmluZWQgPyBtaW4gOiAxMDAwO1xuXG4gIHJldHVybiBmdW5jdGlvbiBwdXNoKGNodW5rTGVuZ3RoKSB7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcblxuICAgIGNvbnN0IHN0YXJ0ZWRBdCA9IHRpbWVzdGFtcHNbdGFpbF07XG5cbiAgICBpZiAoIWZpcnN0U2FtcGxlVFMpIHtcbiAgICAgIGZpcnN0U2FtcGxlVFMgPSBub3c7XG4gICAgfVxuXG4gICAgYnl0ZXNbaGVhZF0gPSBjaHVua0xlbmd0aDtcbiAgICB0aW1lc3RhbXBzW2hlYWRdID0gbm93O1xuXG4gICAgbGV0IGkgPSB0YWlsO1xuICAgIGxldCBieXRlc0NvdW50ID0gMDtcblxuICAgIHdoaWxlIChpICE9PSBoZWFkKSB7XG4gICAgICBieXRlc0NvdW50ICs9IGJ5dGVzW2krK107XG4gICAgICBpID0gaSAlIHNhbXBsZXNDb3VudDtcbiAgICB9XG5cbiAgICBoZWFkID0gKGhlYWQgKyAxKSAlIHNhbXBsZXNDb3VudDtcblxuICAgIGlmIChoZWFkID09PSB0YWlsKSB7XG4gICAgICB0YWlsID0gKHRhaWwgKyAxKSAlIHNhbXBsZXNDb3VudDtcbiAgICB9XG5cbiAgICBpZiAobm93IC0gZmlyc3RTYW1wbGVUUyA8IG1pbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHBhc3NlZCA9IHN0YXJ0ZWRBdCAmJiBub3cgLSBzdGFydGVkQXQ7XG5cbiAgICByZXR1cm4gcGFzc2VkID8gTWF0aC5yb3VuZChieXRlc0NvdW50ICogMTAwMCAvIHBhc3NlZCkgOiB1bmRlZmluZWQ7XG4gIH07XG59XG5cbi8qKlxuICogVGhyb3R0bGUgZGVjb3JhdG9yXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmblxuICogQHBhcmFtIHtOdW1iZXJ9IGZyZXFcbiAqIEByZXR1cm4ge0Z1bmN0aW9ufVxuICovXG5mdW5jdGlvbiB0aHJvdHRsZShmbiwgZnJlcSkge1xuICBsZXQgdGltZXN0YW1wID0gMDtcbiAgbGV0IHRocmVzaG9sZCA9IDEwMDAgLyBmcmVxO1xuICBsZXQgbGFzdEFyZ3M7XG4gIGxldCB0aW1lcjtcblxuICBjb25zdCBpbnZva2UgPSAoYXJncywgbm93ID0gRGF0ZS5ub3coKSkgPT4ge1xuICAgIHRpbWVzdGFtcCA9IG5vdztcbiAgICBsYXN0QXJncyA9IG51bGw7XG4gICAgaWYgKHRpbWVyKSB7XG4gICAgICBjbGVhclRpbWVvdXQodGltZXIpO1xuICAgICAgdGltZXIgPSBudWxsO1xuICAgIH1cbiAgICBmbi5hcHBseShudWxsLCBhcmdzKTtcbiAgfTtcblxuICBjb25zdCB0aHJvdHRsZWQgPSAoLi4uYXJncykgPT4ge1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgY29uc3QgcGFzc2VkID0gbm93IC0gdGltZXN0YW1wO1xuICAgIGlmICggcGFzc2VkID49IHRocmVzaG9sZCkge1xuICAgICAgaW52b2tlKGFyZ3MsIG5vdyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxhc3RBcmdzID0gYXJncztcbiAgICAgIGlmICghdGltZXIpIHtcbiAgICAgICAgdGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICB0aW1lciA9IG51bGw7XG4gICAgICAgICAgaW52b2tlKGxhc3RBcmdzKTtcbiAgICAgICAgfSwgdGhyZXNob2xkIC0gcGFzc2VkKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgY29uc3QgZmx1c2ggPSAoKSA9PiBsYXN0QXJncyAmJiBpbnZva2UobGFzdEFyZ3MpO1xuXG4gIHJldHVybiBbdGhyb3R0bGVkLCBmbHVzaF07XG59XG5cbmNvbnN0IHByb2dyZXNzRXZlbnRSZWR1Y2VyID0gKGxpc3RlbmVyLCBpc0Rvd25sb2FkU3RyZWFtLCBmcmVxID0gMykgPT4ge1xuICBsZXQgYnl0ZXNOb3RpZmllZCA9IDA7XG4gIGNvbnN0IF9zcGVlZG9tZXRlciA9IHNwZWVkb21ldGVyKDUwLCAyNTApO1xuXG4gIHJldHVybiB0aHJvdHRsZShlID0+IHtcbiAgICBjb25zdCBsb2FkZWQgPSBlLmxvYWRlZDtcbiAgICBjb25zdCB0b3RhbCA9IGUubGVuZ3RoQ29tcHV0YWJsZSA/IGUudG90YWwgOiB1bmRlZmluZWQ7XG4gICAgY29uc3QgcHJvZ3Jlc3NCeXRlcyA9IGxvYWRlZCAtIGJ5dGVzTm90aWZpZWQ7XG4gICAgY29uc3QgcmF0ZSA9IF9zcGVlZG9tZXRlcihwcm9ncmVzc0J5dGVzKTtcbiAgICBjb25zdCBpblJhbmdlID0gbG9hZGVkIDw9IHRvdGFsO1xuXG4gICAgYnl0ZXNOb3RpZmllZCA9IGxvYWRlZDtcblxuICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICBsb2FkZWQsXG4gICAgICB0b3RhbCxcbiAgICAgIHByb2dyZXNzOiB0b3RhbCA/IChsb2FkZWQgLyB0b3RhbCkgOiB1bmRlZmluZWQsXG4gICAgICBieXRlczogcHJvZ3Jlc3NCeXRlcyxcbiAgICAgIHJhdGU6IHJhdGUgPyByYXRlIDogdW5kZWZpbmVkLFxuICAgICAgZXN0aW1hdGVkOiByYXRlICYmIHRvdGFsICYmIGluUmFuZ2UgPyAodG90YWwgLSBsb2FkZWQpIC8gcmF0ZSA6IHVuZGVmaW5lZCxcbiAgICAgIGV2ZW50OiBlLFxuICAgICAgbGVuZ3RoQ29tcHV0YWJsZTogdG90YWwgIT0gbnVsbCxcbiAgICAgIFtpc0Rvd25sb2FkU3RyZWFtID8gJ2Rvd25sb2FkJyA6ICd1cGxvYWQnXTogdHJ1ZVxuICAgIH07XG5cbiAgICBsaXN0ZW5lcihkYXRhKTtcbiAgfSwgZnJlcSk7XG59O1xuXG5jb25zdCBwcm9ncmVzc0V2ZW50RGVjb3JhdG9yID0gKHRvdGFsLCB0aHJvdHRsZWQpID0+IHtcbiAgY29uc3QgbGVuZ3RoQ29tcHV0YWJsZSA9IHRvdGFsICE9IG51bGw7XG5cbiAgcmV0dXJuIFsobG9hZGVkKSA9PiB0aHJvdHRsZWRbMF0oe1xuICAgIGxlbmd0aENvbXB1dGFibGUsXG4gICAgdG90YWwsXG4gICAgbG9hZGVkXG4gIH0pLCB0aHJvdHRsZWRbMV1dO1xufTtcblxuY29uc3QgYXN5bmNEZWNvcmF0b3IgPSAoZm4pID0+ICguLi5hcmdzKSA9PiB1dGlscyQxLmFzYXAoKCkgPT4gZm4oLi4uYXJncykpO1xuXG52YXIgaXNVUkxTYW1lT3JpZ2luID0gcGxhdGZvcm0uaGFzU3RhbmRhcmRCcm93c2VyRW52ID9cblxuLy8gU3RhbmRhcmQgYnJvd3NlciBlbnZzIGhhdmUgZnVsbCBzdXBwb3J0IG9mIHRoZSBBUElzIG5lZWRlZCB0byB0ZXN0XG4vLyB3aGV0aGVyIHRoZSByZXF1ZXN0IFVSTCBpcyBvZiB0aGUgc2FtZSBvcmlnaW4gYXMgY3VycmVudCBsb2NhdGlvbi5cbiAgKGZ1bmN0aW9uIHN0YW5kYXJkQnJvd3NlckVudigpIHtcbiAgICBjb25zdCBtc2llID0gLyhtc2llfHRyaWRlbnQpL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtcbiAgICBjb25zdCB1cmxQYXJzaW5nTm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcbiAgICBsZXQgb3JpZ2luVVJMO1xuXG4gICAgLyoqXG4gICAgKiBQYXJzZSBhIFVSTCB0byBkaXNjb3ZlciBpdHMgY29tcG9uZW50c1xuICAgICpcbiAgICAqIEBwYXJhbSB7U3RyaW5nfSB1cmwgVGhlIFVSTCB0byBiZSBwYXJzZWRcbiAgICAqIEByZXR1cm5zIHtPYmplY3R9XG4gICAgKi9cbiAgICBmdW5jdGlvbiByZXNvbHZlVVJMKHVybCkge1xuICAgICAgbGV0IGhyZWYgPSB1cmw7XG5cbiAgICAgIGlmIChtc2llKSB7XG4gICAgICAgIC8vIElFIG5lZWRzIGF0dHJpYnV0ZSBzZXQgdHdpY2UgdG8gbm9ybWFsaXplIHByb3BlcnRpZXNcbiAgICAgICAgdXJsUGFyc2luZ05vZGUuc2V0QXR0cmlidXRlKCdocmVmJywgaHJlZik7XG4gICAgICAgIGhyZWYgPSB1cmxQYXJzaW5nTm9kZS5ocmVmO1xuICAgICAgfVxuXG4gICAgICB1cmxQYXJzaW5nTm9kZS5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCBocmVmKTtcblxuICAgICAgLy8gdXJsUGFyc2luZ05vZGUgcHJvdmlkZXMgdGhlIFVybFV0aWxzIGludGVyZmFjZSAtIGh0dHA6Ly91cmwuc3BlYy53aGF0d2cub3JnLyN1cmx1dGlsc1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaHJlZjogdXJsUGFyc2luZ05vZGUuaHJlZixcbiAgICAgICAgcHJvdG9jb2w6IHVybFBhcnNpbmdOb2RlLnByb3RvY29sID8gdXJsUGFyc2luZ05vZGUucHJvdG9jb2wucmVwbGFjZSgvOiQvLCAnJykgOiAnJyxcbiAgICAgICAgaG9zdDogdXJsUGFyc2luZ05vZGUuaG9zdCxcbiAgICAgICAgc2VhcmNoOiB1cmxQYXJzaW5nTm9kZS5zZWFyY2ggPyB1cmxQYXJzaW5nTm9kZS5zZWFyY2gucmVwbGFjZSgvXlxcPy8sICcnKSA6ICcnLFxuICAgICAgICBoYXNoOiB1cmxQYXJzaW5nTm9kZS5oYXNoID8gdXJsUGFyc2luZ05vZGUuaGFzaC5yZXBsYWNlKC9eIy8sICcnKSA6ICcnLFxuICAgICAgICBob3N0bmFtZTogdXJsUGFyc2luZ05vZGUuaG9zdG5hbWUsXG4gICAgICAgIHBvcnQ6IHVybFBhcnNpbmdOb2RlLnBvcnQsXG4gICAgICAgIHBhdGhuYW1lOiAodXJsUGFyc2luZ05vZGUucGF0aG5hbWUuY2hhckF0KDApID09PSAnLycpID9cbiAgICAgICAgICB1cmxQYXJzaW5nTm9kZS5wYXRobmFtZSA6XG4gICAgICAgICAgJy8nICsgdXJsUGFyc2luZ05vZGUucGF0aG5hbWVcbiAgICAgIH07XG4gICAgfVxuXG4gICAgb3JpZ2luVVJMID0gcmVzb2x2ZVVSTCh3aW5kb3cubG9jYXRpb24uaHJlZik7XG5cbiAgICAvKipcbiAgICAqIERldGVybWluZSBpZiBhIFVSTCBzaGFyZXMgdGhlIHNhbWUgb3JpZ2luIGFzIHRoZSBjdXJyZW50IGxvY2F0aW9uXG4gICAgKlxuICAgICogQHBhcmFtIHtTdHJpbmd9IHJlcXVlc3RVUkwgVGhlIFVSTCB0byB0ZXN0XG4gICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiBVUkwgc2hhcmVzIHRoZSBzYW1lIG9yaWdpbiwgb3RoZXJ3aXNlIGZhbHNlXG4gICAgKi9cbiAgICByZXR1cm4gZnVuY3Rpb24gaXNVUkxTYW1lT3JpZ2luKHJlcXVlc3RVUkwpIHtcbiAgICAgIGNvbnN0IHBhcnNlZCA9ICh1dGlscyQxLmlzU3RyaW5nKHJlcXVlc3RVUkwpKSA/IHJlc29sdmVVUkwocmVxdWVzdFVSTCkgOiByZXF1ZXN0VVJMO1xuICAgICAgcmV0dXJuIChwYXJzZWQucHJvdG9jb2wgPT09IG9yaWdpblVSTC5wcm90b2NvbCAmJlxuICAgICAgICAgIHBhcnNlZC5ob3N0ID09PSBvcmlnaW5VUkwuaG9zdCk7XG4gICAgfTtcbiAgfSkoKSA6XG5cbiAgLy8gTm9uIHN0YW5kYXJkIGJyb3dzZXIgZW52cyAod2ViIHdvcmtlcnMsIHJlYWN0LW5hdGl2ZSkgbGFjayBuZWVkZWQgc3VwcG9ydC5cbiAgKGZ1bmN0aW9uIG5vblN0YW5kYXJkQnJvd3NlckVudigpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gaXNVUkxTYW1lT3JpZ2luKCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfTtcbiAgfSkoKTtcblxudmFyIGNvb2tpZXMgPSBwbGF0Zm9ybS5oYXNTdGFuZGFyZEJyb3dzZXJFbnYgP1xuXG4gIC8vIFN0YW5kYXJkIGJyb3dzZXIgZW52cyBzdXBwb3J0IGRvY3VtZW50LmNvb2tpZVxuICB7XG4gICAgd3JpdGUobmFtZSwgdmFsdWUsIGV4cGlyZXMsIHBhdGgsIGRvbWFpbiwgc2VjdXJlKSB7XG4gICAgICBjb25zdCBjb29raWUgPSBbbmFtZSArICc9JyArIGVuY29kZVVSSUNvbXBvbmVudCh2YWx1ZSldO1xuXG4gICAgICB1dGlscyQxLmlzTnVtYmVyKGV4cGlyZXMpICYmIGNvb2tpZS5wdXNoKCdleHBpcmVzPScgKyBuZXcgRGF0ZShleHBpcmVzKS50b0dNVFN0cmluZygpKTtcblxuICAgICAgdXRpbHMkMS5pc1N0cmluZyhwYXRoKSAmJiBjb29raWUucHVzaCgncGF0aD0nICsgcGF0aCk7XG5cbiAgICAgIHV0aWxzJDEuaXNTdHJpbmcoZG9tYWluKSAmJiBjb29raWUucHVzaCgnZG9tYWluPScgKyBkb21haW4pO1xuXG4gICAgICBzZWN1cmUgPT09IHRydWUgJiYgY29va2llLnB1c2goJ3NlY3VyZScpO1xuXG4gICAgICBkb2N1bWVudC5jb29raWUgPSBjb29raWUuam9pbignOyAnKTtcbiAgICB9LFxuXG4gICAgcmVhZChuYW1lKSB7XG4gICAgICBjb25zdCBtYXRjaCA9IGRvY3VtZW50LmNvb2tpZS5tYXRjaChuZXcgUmVnRXhwKCcoXnw7XFxcXHMqKSgnICsgbmFtZSArICcpPShbXjtdKiknKSk7XG4gICAgICByZXR1cm4gKG1hdGNoID8gZGVjb2RlVVJJQ29tcG9uZW50KG1hdGNoWzNdKSA6IG51bGwpO1xuICAgIH0sXG5cbiAgICByZW1vdmUobmFtZSkge1xuICAgICAgdGhpcy53cml0ZShuYW1lLCAnJywgRGF0ZS5ub3coKSAtIDg2NDAwMDAwKTtcbiAgICB9XG4gIH1cblxuICA6XG5cbiAgLy8gTm9uLXN0YW5kYXJkIGJyb3dzZXIgZW52ICh3ZWIgd29ya2VycywgcmVhY3QtbmF0aXZlKSBsYWNrIG5lZWRlZCBzdXBwb3J0LlxuICB7XG4gICAgd3JpdGUoKSB7fSxcbiAgICByZWFkKCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSxcbiAgICByZW1vdmUoKSB7fVxuICB9O1xuXG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciB0aGUgc3BlY2lmaWVkIFVSTCBpcyBhYnNvbHV0ZVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB1cmwgVGhlIFVSTCB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIHNwZWNpZmllZCBVUkwgaXMgYWJzb2x1dGUsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0Fic29sdXRlVVJMKHVybCkge1xuICAvLyBBIFVSTCBpcyBjb25zaWRlcmVkIGFic29sdXRlIGlmIGl0IGJlZ2lucyB3aXRoIFwiPHNjaGVtZT46Ly9cIiBvciBcIi8vXCIgKHByb3RvY29sLXJlbGF0aXZlIFVSTCkuXG4gIC8vIFJGQyAzOTg2IGRlZmluZXMgc2NoZW1lIG5hbWUgYXMgYSBzZXF1ZW5jZSBvZiBjaGFyYWN0ZXJzIGJlZ2lubmluZyB3aXRoIGEgbGV0dGVyIGFuZCBmb2xsb3dlZFxuICAvLyBieSBhbnkgY29tYmluYXRpb24gb2YgbGV0dGVycywgZGlnaXRzLCBwbHVzLCBwZXJpb2QsIG9yIGh5cGhlbi5cbiAgcmV0dXJuIC9eKFthLXpdW2EtelxcZCtcXC0uXSo6KT9cXC9cXC8vaS50ZXN0KHVybCk7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBVUkwgYnkgY29tYmluaW5nIHRoZSBzcGVjaWZpZWQgVVJMc1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBiYXNlVVJMIFRoZSBiYXNlIFVSTFxuICogQHBhcmFtIHtzdHJpbmd9IHJlbGF0aXZlVVJMIFRoZSByZWxhdGl2ZSBVUkxcbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgY29tYmluZWQgVVJMXG4gKi9cbmZ1bmN0aW9uIGNvbWJpbmVVUkxzKGJhc2VVUkwsIHJlbGF0aXZlVVJMKSB7XG4gIHJldHVybiByZWxhdGl2ZVVSTFxuICAgID8gYmFzZVVSTC5yZXBsYWNlKC9cXC8/XFwvJC8sICcnKSArICcvJyArIHJlbGF0aXZlVVJMLnJlcGxhY2UoL15cXC8rLywgJycpXG4gICAgOiBiYXNlVVJMO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgVVJMIGJ5IGNvbWJpbmluZyB0aGUgYmFzZVVSTCB3aXRoIHRoZSByZXF1ZXN0ZWRVUkwsXG4gKiBvbmx5IHdoZW4gdGhlIHJlcXVlc3RlZFVSTCBpcyBub3QgYWxyZWFkeSBhbiBhYnNvbHV0ZSBVUkwuXG4gKiBJZiB0aGUgcmVxdWVzdFVSTCBpcyBhYnNvbHV0ZSwgdGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSByZXF1ZXN0ZWRVUkwgdW50b3VjaGVkLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBiYXNlVVJMIFRoZSBiYXNlIFVSTFxuICogQHBhcmFtIHtzdHJpbmd9IHJlcXVlc3RlZFVSTCBBYnNvbHV0ZSBvciByZWxhdGl2ZSBVUkwgdG8gY29tYmluZVxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBjb21iaW5lZCBmdWxsIHBhdGhcbiAqL1xuZnVuY3Rpb24gYnVpbGRGdWxsUGF0aChiYXNlVVJMLCByZXF1ZXN0ZWRVUkwpIHtcbiAgaWYgKGJhc2VVUkwgJiYgIWlzQWJzb2x1dGVVUkwocmVxdWVzdGVkVVJMKSkge1xuICAgIHJldHVybiBjb21iaW5lVVJMcyhiYXNlVVJMLCByZXF1ZXN0ZWRVUkwpO1xuICB9XG4gIHJldHVybiByZXF1ZXN0ZWRVUkw7XG59XG5cbmNvbnN0IGhlYWRlcnNUb09iamVjdCA9ICh0aGluZykgPT4gdGhpbmcgaW5zdGFuY2VvZiBBeGlvc0hlYWRlcnMkMSA/IHsgLi4udGhpbmcgfSA6IHRoaW5nO1xuXG4vKipcbiAqIENvbmZpZy1zcGVjaWZpYyBtZXJnZS1mdW5jdGlvbiB3aGljaCBjcmVhdGVzIGEgbmV3IGNvbmZpZy1vYmplY3RcbiAqIGJ5IG1lcmdpbmcgdHdvIGNvbmZpZ3VyYXRpb24gb2JqZWN0cyB0b2dldGhlci5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gY29uZmlnMVxuICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZzJcbiAqXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBOZXcgb2JqZWN0IHJlc3VsdGluZyBmcm9tIG1lcmdpbmcgY29uZmlnMiB0byBjb25maWcxXG4gKi9cbmZ1bmN0aW9uIG1lcmdlQ29uZmlnKGNvbmZpZzEsIGNvbmZpZzIpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gIGNvbmZpZzIgPSBjb25maWcyIHx8IHt9O1xuICBjb25zdCBjb25maWcgPSB7fTtcblxuICBmdW5jdGlvbiBnZXRNZXJnZWRWYWx1ZSh0YXJnZXQsIHNvdXJjZSwgY2FzZWxlc3MpIHtcbiAgICBpZiAodXRpbHMkMS5pc1BsYWluT2JqZWN0KHRhcmdldCkgJiYgdXRpbHMkMS5pc1BsYWluT2JqZWN0KHNvdXJjZSkpIHtcbiAgICAgIHJldHVybiB1dGlscyQxLm1lcmdlLmNhbGwoe2Nhc2VsZXNzfSwgdGFyZ2V0LCBzb3VyY2UpO1xuICAgIH0gZWxzZSBpZiAodXRpbHMkMS5pc1BsYWluT2JqZWN0KHNvdXJjZSkpIHtcbiAgICAgIHJldHVybiB1dGlscyQxLm1lcmdlKHt9LCBzb3VyY2UpO1xuICAgIH0gZWxzZSBpZiAodXRpbHMkMS5pc0FycmF5KHNvdXJjZSkpIHtcbiAgICAgIHJldHVybiBzb3VyY2Uuc2xpY2UoKTtcbiAgICB9XG4gICAgcmV0dXJuIHNvdXJjZTtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb25zaXN0ZW50LXJldHVyblxuICBmdW5jdGlvbiBtZXJnZURlZXBQcm9wZXJ0aWVzKGEsIGIsIGNhc2VsZXNzKSB7XG4gICAgaWYgKCF1dGlscyQxLmlzVW5kZWZpbmVkKGIpKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUoYSwgYiwgY2FzZWxlc3MpO1xuICAgIH0gZWxzZSBpZiAoIXV0aWxzJDEuaXNVbmRlZmluZWQoYSkpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZSh1bmRlZmluZWQsIGEsIGNhc2VsZXNzKTtcbiAgICB9XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29uc2lzdGVudC1yZXR1cm5cbiAgZnVuY3Rpb24gdmFsdWVGcm9tQ29uZmlnMihhLCBiKSB7XG4gICAgaWYgKCF1dGlscyQxLmlzVW5kZWZpbmVkKGIpKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUodW5kZWZpbmVkLCBiKTtcbiAgICB9XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29uc2lzdGVudC1yZXR1cm5cbiAgZnVuY3Rpb24gZGVmYXVsdFRvQ29uZmlnMihhLCBiKSB7XG4gICAgaWYgKCF1dGlscyQxLmlzVW5kZWZpbmVkKGIpKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUodW5kZWZpbmVkLCBiKTtcbiAgICB9IGVsc2UgaWYgKCF1dGlscyQxLmlzVW5kZWZpbmVkKGEpKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUodW5kZWZpbmVkLCBhKTtcbiAgICB9XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29uc2lzdGVudC1yZXR1cm5cbiAgZnVuY3Rpb24gbWVyZ2VEaXJlY3RLZXlzKGEsIGIsIHByb3ApIHtcbiAgICBpZiAocHJvcCBpbiBjb25maWcyKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUoYSwgYik7XG4gICAgfSBlbHNlIGlmIChwcm9wIGluIGNvbmZpZzEpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZSh1bmRlZmluZWQsIGEpO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IG1lcmdlTWFwID0ge1xuICAgIHVybDogdmFsdWVGcm9tQ29uZmlnMixcbiAgICBtZXRob2Q6IHZhbHVlRnJvbUNvbmZpZzIsXG4gICAgZGF0YTogdmFsdWVGcm9tQ29uZmlnMixcbiAgICBiYXNlVVJMOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHRyYW5zZm9ybVJlcXVlc3Q6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgdHJhbnNmb3JtUmVzcG9uc2U6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgcGFyYW1zU2VyaWFsaXplcjogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB0aW1lb3V0OiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHRpbWVvdXRNZXNzYWdlOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHdpdGhDcmVkZW50aWFsczogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB3aXRoWFNSRlRva2VuOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIGFkYXB0ZXI6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgcmVzcG9uc2VUeXBlOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHhzcmZDb29raWVOYW1lOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHhzcmZIZWFkZXJOYW1lOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIG9uVXBsb2FkUHJvZ3Jlc3M6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgb25Eb3dubG9hZFByb2dyZXNzOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIGRlY29tcHJlc3M6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgbWF4Q29udGVudExlbmd0aDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBtYXhCb2R5TGVuZ3RoOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIGJlZm9yZVJlZGlyZWN0OiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHRyYW5zcG9ydDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBodHRwQWdlbnQ6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgaHR0cHNBZ2VudDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBjYW5jZWxUb2tlbjogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBzb2NrZXRQYXRoOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHJlc3BvbnNlRW5jb2Rpbmc6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgdmFsaWRhdGVTdGF0dXM6IG1lcmdlRGlyZWN0S2V5cyxcbiAgICBoZWFkZXJzOiAoYSwgYikgPT4gbWVyZ2VEZWVwUHJvcGVydGllcyhoZWFkZXJzVG9PYmplY3QoYSksIGhlYWRlcnNUb09iamVjdChiKSwgdHJ1ZSlcbiAgfTtcblxuICB1dGlscyQxLmZvckVhY2goT2JqZWN0LmtleXMoT2JqZWN0LmFzc2lnbih7fSwgY29uZmlnMSwgY29uZmlnMikpLCBmdW5jdGlvbiBjb21wdXRlQ29uZmlnVmFsdWUocHJvcCkge1xuICAgIGNvbnN0IG1lcmdlID0gbWVyZ2VNYXBbcHJvcF0gfHwgbWVyZ2VEZWVwUHJvcGVydGllcztcbiAgICBjb25zdCBjb25maWdWYWx1ZSA9IG1lcmdlKGNvbmZpZzFbcHJvcF0sIGNvbmZpZzJbcHJvcF0sIHByb3ApO1xuICAgICh1dGlscyQxLmlzVW5kZWZpbmVkKGNvbmZpZ1ZhbHVlKSAmJiBtZXJnZSAhPT0gbWVyZ2VEaXJlY3RLZXlzKSB8fCAoY29uZmlnW3Byb3BdID0gY29uZmlnVmFsdWUpO1xuICB9KTtcblxuICByZXR1cm4gY29uZmlnO1xufVxuXG52YXIgcmVzb2x2ZUNvbmZpZyA9IChjb25maWcpID0+IHtcbiAgY29uc3QgbmV3Q29uZmlnID0gbWVyZ2VDb25maWcoe30sIGNvbmZpZyk7XG5cbiAgbGV0IHtkYXRhLCB3aXRoWFNSRlRva2VuLCB4c3JmSGVhZGVyTmFtZSwgeHNyZkNvb2tpZU5hbWUsIGhlYWRlcnMsIGF1dGh9ID0gbmV3Q29uZmlnO1xuXG4gIG5ld0NvbmZpZy5oZWFkZXJzID0gaGVhZGVycyA9IEF4aW9zSGVhZGVycyQxLmZyb20oaGVhZGVycyk7XG5cbiAgbmV3Q29uZmlnLnVybCA9IGJ1aWxkVVJMKGJ1aWxkRnVsbFBhdGgobmV3Q29uZmlnLmJhc2VVUkwsIG5ld0NvbmZpZy51cmwpLCBjb25maWcucGFyYW1zLCBjb25maWcucGFyYW1zU2VyaWFsaXplcik7XG5cbiAgLy8gSFRUUCBiYXNpYyBhdXRoZW50aWNhdGlvblxuICBpZiAoYXV0aCkge1xuICAgIGhlYWRlcnMuc2V0KCdBdXRob3JpemF0aW9uJywgJ0Jhc2ljICcgK1xuICAgICAgYnRvYSgoYXV0aC51c2VybmFtZSB8fCAnJykgKyAnOicgKyAoYXV0aC5wYXNzd29yZCA/IHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChhdXRoLnBhc3N3b3JkKSkgOiAnJykpXG4gICAgKTtcbiAgfVxuXG4gIGxldCBjb250ZW50VHlwZTtcblxuICBpZiAodXRpbHMkMS5pc0Zvcm1EYXRhKGRhdGEpKSB7XG4gICAgaWYgKHBsYXRmb3JtLmhhc1N0YW5kYXJkQnJvd3NlckVudiB8fCBwbGF0Zm9ybS5oYXNTdGFuZGFyZEJyb3dzZXJXZWJXb3JrZXJFbnYpIHtcbiAgICAgIGhlYWRlcnMuc2V0Q29udGVudFR5cGUodW5kZWZpbmVkKTsgLy8gTGV0IHRoZSBicm93c2VyIHNldCBpdFxuICAgIH0gZWxzZSBpZiAoKGNvbnRlbnRUeXBlID0gaGVhZGVycy5nZXRDb250ZW50VHlwZSgpKSAhPT0gZmFsc2UpIHtcbiAgICAgIC8vIGZpeCBzZW1pY29sb24gZHVwbGljYXRpb24gaXNzdWUgZm9yIFJlYWN0TmF0aXZlIEZvcm1EYXRhIGltcGxlbWVudGF0aW9uXG4gICAgICBjb25zdCBbdHlwZSwgLi4udG9rZW5zXSA9IGNvbnRlbnRUeXBlID8gY29udGVudFR5cGUuc3BsaXQoJzsnKS5tYXAodG9rZW4gPT4gdG9rZW4udHJpbSgpKS5maWx0ZXIoQm9vbGVhbikgOiBbXTtcbiAgICAgIGhlYWRlcnMuc2V0Q29udGVudFR5cGUoW3R5cGUgfHwgJ211bHRpcGFydC9mb3JtLWRhdGEnLCAuLi50b2tlbnNdLmpvaW4oJzsgJykpO1xuICAgIH1cbiAgfVxuXG4gIC8vIEFkZCB4c3JmIGhlYWRlclxuICAvLyBUaGlzIGlzIG9ubHkgZG9uZSBpZiBydW5uaW5nIGluIGEgc3RhbmRhcmQgYnJvd3NlciBlbnZpcm9ubWVudC5cbiAgLy8gU3BlY2lmaWNhbGx5IG5vdCBpZiB3ZSdyZSBpbiBhIHdlYiB3b3JrZXIsIG9yIHJlYWN0LW5hdGl2ZS5cblxuICBpZiAocGxhdGZvcm0uaGFzU3RhbmRhcmRCcm93c2VyRW52KSB7XG4gICAgd2l0aFhTUkZUb2tlbiAmJiB1dGlscyQxLmlzRnVuY3Rpb24od2l0aFhTUkZUb2tlbikgJiYgKHdpdGhYU1JGVG9rZW4gPSB3aXRoWFNSRlRva2VuKG5ld0NvbmZpZykpO1xuXG4gICAgaWYgKHdpdGhYU1JGVG9rZW4gfHwgKHdpdGhYU1JGVG9rZW4gIT09IGZhbHNlICYmIGlzVVJMU2FtZU9yaWdpbihuZXdDb25maWcudXJsKSkpIHtcbiAgICAgIC8vIEFkZCB4c3JmIGhlYWRlclxuICAgICAgY29uc3QgeHNyZlZhbHVlID0geHNyZkhlYWRlck5hbWUgJiYgeHNyZkNvb2tpZU5hbWUgJiYgY29va2llcy5yZWFkKHhzcmZDb29raWVOYW1lKTtcblxuICAgICAgaWYgKHhzcmZWYWx1ZSkge1xuICAgICAgICBoZWFkZXJzLnNldCh4c3JmSGVhZGVyTmFtZSwgeHNyZlZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV3Q29uZmlnO1xufTtcblxuY29uc3QgaXNYSFJBZGFwdGVyU3VwcG9ydGVkID0gdHlwZW9mIFhNTEh0dHBSZXF1ZXN0ICE9PSAndW5kZWZpbmVkJztcblxudmFyIHhockFkYXB0ZXIgPSBpc1hIUkFkYXB0ZXJTdXBwb3J0ZWQgJiYgZnVuY3Rpb24gKGNvbmZpZykge1xuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gZGlzcGF0Y2hYaHJSZXF1ZXN0KHJlc29sdmUsIHJlamVjdCkge1xuICAgIGNvbnN0IF9jb25maWcgPSByZXNvbHZlQ29uZmlnKGNvbmZpZyk7XG4gICAgbGV0IHJlcXVlc3REYXRhID0gX2NvbmZpZy5kYXRhO1xuICAgIGNvbnN0IHJlcXVlc3RIZWFkZXJzID0gQXhpb3NIZWFkZXJzJDEuZnJvbShfY29uZmlnLmhlYWRlcnMpLm5vcm1hbGl6ZSgpO1xuICAgIGxldCB7cmVzcG9uc2VUeXBlLCBvblVwbG9hZFByb2dyZXNzLCBvbkRvd25sb2FkUHJvZ3Jlc3N9ID0gX2NvbmZpZztcbiAgICBsZXQgb25DYW5jZWxlZDtcbiAgICBsZXQgdXBsb2FkVGhyb3R0bGVkLCBkb3dubG9hZFRocm90dGxlZDtcbiAgICBsZXQgZmx1c2hVcGxvYWQsIGZsdXNoRG93bmxvYWQ7XG5cbiAgICBmdW5jdGlvbiBkb25lKCkge1xuICAgICAgZmx1c2hVcGxvYWQgJiYgZmx1c2hVcGxvYWQoKTsgLy8gZmx1c2ggZXZlbnRzXG4gICAgICBmbHVzaERvd25sb2FkICYmIGZsdXNoRG93bmxvYWQoKTsgLy8gZmx1c2ggZXZlbnRzXG5cbiAgICAgIF9jb25maWcuY2FuY2VsVG9rZW4gJiYgX2NvbmZpZy5jYW5jZWxUb2tlbi51bnN1YnNjcmliZShvbkNhbmNlbGVkKTtcblxuICAgICAgX2NvbmZpZy5zaWduYWwgJiYgX2NvbmZpZy5zaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBvbkNhbmNlbGVkKTtcbiAgICB9XG5cbiAgICBsZXQgcmVxdWVzdCA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuXG4gICAgcmVxdWVzdC5vcGVuKF9jb25maWcubWV0aG9kLnRvVXBwZXJDYXNlKCksIF9jb25maWcudXJsLCB0cnVlKTtcblxuICAgIC8vIFNldCB0aGUgcmVxdWVzdCB0aW1lb3V0IGluIE1TXG4gICAgcmVxdWVzdC50aW1lb3V0ID0gX2NvbmZpZy50aW1lb3V0O1xuXG4gICAgZnVuY3Rpb24gb25sb2FkZW5kKCkge1xuICAgICAgaWYgKCFyZXF1ZXN0KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIC8vIFByZXBhcmUgdGhlIHJlc3BvbnNlXG4gICAgICBjb25zdCByZXNwb25zZUhlYWRlcnMgPSBBeGlvc0hlYWRlcnMkMS5mcm9tKFxuICAgICAgICAnZ2V0QWxsUmVzcG9uc2VIZWFkZXJzJyBpbiByZXF1ZXN0ICYmIHJlcXVlc3QuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKClcbiAgICAgICk7XG4gICAgICBjb25zdCByZXNwb25zZURhdGEgPSAhcmVzcG9uc2VUeXBlIHx8IHJlc3BvbnNlVHlwZSA9PT0gJ3RleHQnIHx8IHJlc3BvbnNlVHlwZSA9PT0gJ2pzb24nID9cbiAgICAgICAgcmVxdWVzdC5yZXNwb25zZVRleHQgOiByZXF1ZXN0LnJlc3BvbnNlO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSB7XG4gICAgICAgIGRhdGE6IHJlc3BvbnNlRGF0YSxcbiAgICAgICAgc3RhdHVzOiByZXF1ZXN0LnN0YXR1cyxcbiAgICAgICAgc3RhdHVzVGV4dDogcmVxdWVzdC5zdGF0dXNUZXh0LFxuICAgICAgICBoZWFkZXJzOiByZXNwb25zZUhlYWRlcnMsXG4gICAgICAgIGNvbmZpZyxcbiAgICAgICAgcmVxdWVzdFxuICAgICAgfTtcblxuICAgICAgc2V0dGxlKGZ1bmN0aW9uIF9yZXNvbHZlKHZhbHVlKSB7XG4gICAgICAgIHJlc29sdmUodmFsdWUpO1xuICAgICAgICBkb25lKCk7XG4gICAgICB9LCBmdW5jdGlvbiBfcmVqZWN0KGVycikge1xuICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgZG9uZSgpO1xuICAgICAgfSwgcmVzcG9uc2UpO1xuXG4gICAgICAvLyBDbGVhbiB1cCByZXF1ZXN0XG4gICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoJ29ubG9hZGVuZCcgaW4gcmVxdWVzdCkge1xuICAgICAgLy8gVXNlIG9ubG9hZGVuZCBpZiBhdmFpbGFibGVcbiAgICAgIHJlcXVlc3Qub25sb2FkZW5kID0gb25sb2FkZW5kO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBMaXN0ZW4gZm9yIHJlYWR5IHN0YXRlIHRvIGVtdWxhdGUgb25sb2FkZW5kXG4gICAgICByZXF1ZXN0Lm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uIGhhbmRsZUxvYWQoKSB7XG4gICAgICAgIGlmICghcmVxdWVzdCB8fCByZXF1ZXN0LnJlYWR5U3RhdGUgIT09IDQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUaGUgcmVxdWVzdCBlcnJvcmVkIG91dCBhbmQgd2UgZGlkbid0IGdldCBhIHJlc3BvbnNlLCB0aGlzIHdpbGwgYmVcbiAgICAgICAgLy8gaGFuZGxlZCBieSBvbmVycm9yIGluc3RlYWRcbiAgICAgICAgLy8gV2l0aCBvbmUgZXhjZXB0aW9uOiByZXF1ZXN0IHRoYXQgdXNpbmcgZmlsZTogcHJvdG9jb2wsIG1vc3QgYnJvd3NlcnNcbiAgICAgICAgLy8gd2lsbCByZXR1cm4gc3RhdHVzIGFzIDAgZXZlbiB0aG91Z2ggaXQncyBhIHN1Y2Nlc3NmdWwgcmVxdWVzdFxuICAgICAgICBpZiAocmVxdWVzdC5zdGF0dXMgPT09IDAgJiYgIShyZXF1ZXN0LnJlc3BvbnNlVVJMICYmIHJlcXVlc3QucmVzcG9uc2VVUkwuaW5kZXhPZignZmlsZTonKSA9PT0gMCkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gcmVhZHlzdGF0ZSBoYW5kbGVyIGlzIGNhbGxpbmcgYmVmb3JlIG9uZXJyb3Igb3Igb250aW1lb3V0IGhhbmRsZXJzLFxuICAgICAgICAvLyBzbyB3ZSBzaG91bGQgY2FsbCBvbmxvYWRlbmQgb24gdGhlIG5leHQgJ3RpY2snXG4gICAgICAgIHNldFRpbWVvdXQob25sb2FkZW5kKTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIGJyb3dzZXIgcmVxdWVzdCBjYW5jZWxsYXRpb24gKGFzIG9wcG9zZWQgdG8gYSBtYW51YWwgY2FuY2VsbGF0aW9uKVxuICAgIHJlcXVlc3Qub25hYm9ydCA9IGZ1bmN0aW9uIGhhbmRsZUFib3J0KCkge1xuICAgICAgaWYgKCFyZXF1ZXN0KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgcmVqZWN0KG5ldyBBeGlvc0Vycm9yKCdSZXF1ZXN0IGFib3J0ZWQnLCBBeGlvc0Vycm9yLkVDT05OQUJPUlRFRCwgY29uZmlnLCByZXF1ZXN0KSk7XG5cbiAgICAgIC8vIENsZWFuIHVwIHJlcXVlc3RcbiAgICAgIHJlcXVlc3QgPSBudWxsO1xuICAgIH07XG5cbiAgICAvLyBIYW5kbGUgbG93IGxldmVsIG5ldHdvcmsgZXJyb3JzXG4gICAgcmVxdWVzdC5vbmVycm9yID0gZnVuY3Rpb24gaGFuZGxlRXJyb3IoKSB7XG4gICAgICAvLyBSZWFsIGVycm9ycyBhcmUgaGlkZGVuIGZyb20gdXMgYnkgdGhlIGJyb3dzZXJcbiAgICAgIC8vIG9uZXJyb3Igc2hvdWxkIG9ubHkgZmlyZSBpZiBpdCdzIGEgbmV0d29yayBlcnJvclxuICAgICAgcmVqZWN0KG5ldyBBeGlvc0Vycm9yKCdOZXR3b3JrIEVycm9yJywgQXhpb3NFcnJvci5FUlJfTkVUV09SSywgY29uZmlnLCByZXF1ZXN0KSk7XG5cbiAgICAgIC8vIENsZWFuIHVwIHJlcXVlc3RcbiAgICAgIHJlcXVlc3QgPSBudWxsO1xuICAgIH07XG5cbiAgICAvLyBIYW5kbGUgdGltZW91dFxuICAgIHJlcXVlc3Qub250aW1lb3V0ID0gZnVuY3Rpb24gaGFuZGxlVGltZW91dCgpIHtcbiAgICAgIGxldCB0aW1lb3V0RXJyb3JNZXNzYWdlID0gX2NvbmZpZy50aW1lb3V0ID8gJ3RpbWVvdXQgb2YgJyArIF9jb25maWcudGltZW91dCArICdtcyBleGNlZWRlZCcgOiAndGltZW91dCBleGNlZWRlZCc7XG4gICAgICBjb25zdCB0cmFuc2l0aW9uYWwgPSBfY29uZmlnLnRyYW5zaXRpb25hbCB8fCB0cmFuc2l0aW9uYWxEZWZhdWx0cztcbiAgICAgIGlmIChfY29uZmlnLnRpbWVvdXRFcnJvck1lc3NhZ2UpIHtcbiAgICAgICAgdGltZW91dEVycm9yTWVzc2FnZSA9IF9jb25maWcudGltZW91dEVycm9yTWVzc2FnZTtcbiAgICAgIH1cbiAgICAgIHJlamVjdChuZXcgQXhpb3NFcnJvcihcbiAgICAgICAgdGltZW91dEVycm9yTWVzc2FnZSxcbiAgICAgICAgdHJhbnNpdGlvbmFsLmNsYXJpZnlUaW1lb3V0RXJyb3IgPyBBeGlvc0Vycm9yLkVUSU1FRE9VVCA6IEF4aW9zRXJyb3IuRUNPTk5BQk9SVEVELFxuICAgICAgICBjb25maWcsXG4gICAgICAgIHJlcXVlc3QpKTtcblxuICAgICAgLy8gQ2xlYW4gdXAgcmVxdWVzdFxuICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgfTtcblxuICAgIC8vIFJlbW92ZSBDb250ZW50LVR5cGUgaWYgZGF0YSBpcyB1bmRlZmluZWRcbiAgICByZXF1ZXN0RGF0YSA9PT0gdW5kZWZpbmVkICYmIHJlcXVlc3RIZWFkZXJzLnNldENvbnRlbnRUeXBlKG51bGwpO1xuXG4gICAgLy8gQWRkIGhlYWRlcnMgdG8gdGhlIHJlcXVlc3RcbiAgICBpZiAoJ3NldFJlcXVlc3RIZWFkZXInIGluIHJlcXVlc3QpIHtcbiAgICAgIHV0aWxzJDEuZm9yRWFjaChyZXF1ZXN0SGVhZGVycy50b0pTT04oKSwgZnVuY3Rpb24gc2V0UmVxdWVzdEhlYWRlcih2YWwsIGtleSkge1xuICAgICAgICByZXF1ZXN0LnNldFJlcXVlc3RIZWFkZXIoa2V5LCB2YWwpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gQWRkIHdpdGhDcmVkZW50aWFscyB0byByZXF1ZXN0IGlmIG5lZWRlZFxuICAgIGlmICghdXRpbHMkMS5pc1VuZGVmaW5lZChfY29uZmlnLndpdGhDcmVkZW50aWFscykpIHtcbiAgICAgIHJlcXVlc3Qud2l0aENyZWRlbnRpYWxzID0gISFfY29uZmlnLndpdGhDcmVkZW50aWFscztcbiAgICB9XG5cbiAgICAvLyBBZGQgcmVzcG9uc2VUeXBlIHRvIHJlcXVlc3QgaWYgbmVlZGVkXG4gICAgaWYgKHJlc3BvbnNlVHlwZSAmJiByZXNwb25zZVR5cGUgIT09ICdqc29uJykge1xuICAgICAgcmVxdWVzdC5yZXNwb25zZVR5cGUgPSBfY29uZmlnLnJlc3BvbnNlVHlwZTtcbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgcHJvZ3Jlc3MgaWYgbmVlZGVkXG4gICAgaWYgKG9uRG93bmxvYWRQcm9ncmVzcykge1xuICAgICAgKFtkb3dubG9hZFRocm90dGxlZCwgZmx1c2hEb3dubG9hZF0gPSBwcm9ncmVzc0V2ZW50UmVkdWNlcihvbkRvd25sb2FkUHJvZ3Jlc3MsIHRydWUpKTtcbiAgICAgIHJlcXVlc3QuYWRkRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCBkb3dubG9hZFRocm90dGxlZCk7XG4gICAgfVxuXG4gICAgLy8gTm90IGFsbCBicm93c2VycyBzdXBwb3J0IHVwbG9hZCBldmVudHNcbiAgICBpZiAob25VcGxvYWRQcm9ncmVzcyAmJiByZXF1ZXN0LnVwbG9hZCkge1xuICAgICAgKFt1cGxvYWRUaHJvdHRsZWQsIGZsdXNoVXBsb2FkXSA9IHByb2dyZXNzRXZlbnRSZWR1Y2VyKG9uVXBsb2FkUHJvZ3Jlc3MpKTtcblxuICAgICAgcmVxdWVzdC51cGxvYWQuYWRkRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCB1cGxvYWRUaHJvdHRsZWQpO1xuXG4gICAgICByZXF1ZXN0LnVwbG9hZC5hZGRFdmVudExpc3RlbmVyKCdsb2FkZW5kJywgZmx1c2hVcGxvYWQpO1xuICAgIH1cblxuICAgIGlmIChfY29uZmlnLmNhbmNlbFRva2VuIHx8IF9jb25maWcuc2lnbmFsKSB7XG4gICAgICAvLyBIYW5kbGUgY2FuY2VsbGF0aW9uXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuICAgICAgb25DYW5jZWxlZCA9IGNhbmNlbCA9PiB7XG4gICAgICAgIGlmICghcmVxdWVzdCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICByZWplY3QoIWNhbmNlbCB8fCBjYW5jZWwudHlwZSA/IG5ldyBDYW5jZWxlZEVycm9yKG51bGwsIGNvbmZpZywgcmVxdWVzdCkgOiBjYW5jZWwpO1xuICAgICAgICByZXF1ZXN0LmFib3J0KCk7XG4gICAgICAgIHJlcXVlc3QgPSBudWxsO1xuICAgICAgfTtcblxuICAgICAgX2NvbmZpZy5jYW5jZWxUb2tlbiAmJiBfY29uZmlnLmNhbmNlbFRva2VuLnN1YnNjcmliZShvbkNhbmNlbGVkKTtcbiAgICAgIGlmIChfY29uZmlnLnNpZ25hbCkge1xuICAgICAgICBfY29uZmlnLnNpZ25hbC5hYm9ydGVkID8gb25DYW5jZWxlZCgpIDogX2NvbmZpZy5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBvbkNhbmNlbGVkKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBwcm90b2NvbCA9IHBhcnNlUHJvdG9jb2woX2NvbmZpZy51cmwpO1xuXG4gICAgaWYgKHByb3RvY29sICYmIHBsYXRmb3JtLnByb3RvY29scy5pbmRleE9mKHByb3RvY29sKSA9PT0gLTEpIHtcbiAgICAgIHJlamVjdChuZXcgQXhpb3NFcnJvcignVW5zdXBwb3J0ZWQgcHJvdG9jb2wgJyArIHByb3RvY29sICsgJzonLCBBeGlvc0Vycm9yLkVSUl9CQURfUkVRVUVTVCwgY29uZmlnKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG5cbiAgICAvLyBTZW5kIHRoZSByZXF1ZXN0XG4gICAgcmVxdWVzdC5zZW5kKHJlcXVlc3REYXRhIHx8IG51bGwpO1xuICB9KTtcbn07XG5cbmNvbnN0IGNvbXBvc2VTaWduYWxzID0gKHNpZ25hbHMsIHRpbWVvdXQpID0+IHtcbiAgbGV0IGNvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG5cbiAgbGV0IGFib3J0ZWQ7XG5cbiAgY29uc3Qgb25hYm9ydCA9IGZ1bmN0aW9uIChjYW5jZWwpIHtcbiAgICBpZiAoIWFib3J0ZWQpIHtcbiAgICAgIGFib3J0ZWQgPSB0cnVlO1xuICAgICAgdW5zdWJzY3JpYmUoKTtcbiAgICAgIGNvbnN0IGVyciA9IGNhbmNlbCBpbnN0YW5jZW9mIEVycm9yID8gY2FuY2VsIDogdGhpcy5yZWFzb247XG4gICAgICBjb250cm9sbGVyLmFib3J0KGVyciBpbnN0YW5jZW9mIEF4aW9zRXJyb3IgPyBlcnIgOiBuZXcgQ2FuY2VsZWRFcnJvcihlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogZXJyKSk7XG4gICAgfVxuICB9O1xuXG4gIGxldCB0aW1lciA9IHRpbWVvdXQgJiYgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgb25hYm9ydChuZXcgQXhpb3NFcnJvcihgdGltZW91dCAke3RpbWVvdXR9IG9mIG1zIGV4Y2VlZGVkYCwgQXhpb3NFcnJvci5FVElNRURPVVQpKTtcbiAgfSwgdGltZW91dCk7XG5cbiAgY29uc3QgdW5zdWJzY3JpYmUgPSAoKSA9PiB7XG4gICAgaWYgKHNpZ25hbHMpIHtcbiAgICAgIHRpbWVyICYmIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgICB0aW1lciA9IG51bGw7XG4gICAgICBzaWduYWxzLmZvckVhY2goc2lnbmFsID0+IHtcbiAgICAgICAgc2lnbmFsICYmXG4gICAgICAgIChzaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lciA/IHNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKCdhYm9ydCcsIG9uYWJvcnQpIDogc2lnbmFsLnVuc3Vic2NyaWJlKG9uYWJvcnQpKTtcbiAgICAgIH0pO1xuICAgICAgc2lnbmFscyA9IG51bGw7XG4gICAgfVxuICB9O1xuXG4gIHNpZ25hbHMuZm9yRWFjaCgoc2lnbmFsKSA9PiBzaWduYWwgJiYgc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIgJiYgc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0Jywgb25hYm9ydCkpO1xuXG4gIGNvbnN0IHtzaWduYWx9ID0gY29udHJvbGxlcjtcblxuICBzaWduYWwudW5zdWJzY3JpYmUgPSB1bnN1YnNjcmliZTtcblxuICByZXR1cm4gW3NpZ25hbCwgKCkgPT4ge1xuICAgIHRpbWVyICYmIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgdGltZXIgPSBudWxsO1xuICB9XTtcbn07XG5cbnZhciBjb21wb3NlU2lnbmFscyQxID0gY29tcG9zZVNpZ25hbHM7XG5cbmNvbnN0IHN0cmVhbUNodW5rID0gZnVuY3Rpb24qIChjaHVuaywgY2h1bmtTaXplKSB7XG4gIGxldCBsZW4gPSBjaHVuay5ieXRlTGVuZ3RoO1xuXG4gIGlmICghY2h1bmtTaXplIHx8IGxlbiA8IGNodW5rU2l6ZSkge1xuICAgIHlpZWxkIGNodW5rO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGxldCBwb3MgPSAwO1xuICBsZXQgZW5kO1xuXG4gIHdoaWxlIChwb3MgPCBsZW4pIHtcbiAgICBlbmQgPSBwb3MgKyBjaHVua1NpemU7XG4gICAgeWllbGQgY2h1bmsuc2xpY2UocG9zLCBlbmQpO1xuICAgIHBvcyA9IGVuZDtcbiAgfVxufTtcblxuY29uc3QgcmVhZEJ5dGVzID0gYXN5bmMgZnVuY3Rpb24qIChpdGVyYWJsZSwgY2h1bmtTaXplLCBlbmNvZGUpIHtcbiAgZm9yIGF3YWl0IChjb25zdCBjaHVuayBvZiBpdGVyYWJsZSkge1xuICAgIHlpZWxkKiBzdHJlYW1DaHVuayhBcnJheUJ1ZmZlci5pc1ZpZXcoY2h1bmspID8gY2h1bmsgOiAoYXdhaXQgZW5jb2RlKFN0cmluZyhjaHVuaykpKSwgY2h1bmtTaXplKTtcbiAgfVxufTtcblxuY29uc3QgdHJhY2tTdHJlYW0gPSAoc3RyZWFtLCBjaHVua1NpemUsIG9uUHJvZ3Jlc3MsIG9uRmluaXNoLCBlbmNvZGUpID0+IHtcbiAgY29uc3QgaXRlcmF0b3IgPSByZWFkQnl0ZXMoc3RyZWFtLCBjaHVua1NpemUsIGVuY29kZSk7XG5cbiAgbGV0IGJ5dGVzID0gMDtcbiAgbGV0IGRvbmU7XG4gIGxldCBfb25GaW5pc2ggPSAoZSkgPT4ge1xuICAgIGlmICghZG9uZSkge1xuICAgICAgZG9uZSA9IHRydWU7XG4gICAgICBvbkZpbmlzaCAmJiBvbkZpbmlzaChlKTtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIG5ldyBSZWFkYWJsZVN0cmVhbSh7XG4gICAgYXN5bmMgcHVsbChjb250cm9sbGVyKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCB7ZG9uZSwgdmFsdWV9ID0gYXdhaXQgaXRlcmF0b3IubmV4dCgpO1xuXG4gICAgICAgIGlmIChkb25lKSB7XG4gICAgICAgICBfb25GaW5pc2goKTtcbiAgICAgICAgICBjb250cm9sbGVyLmNsb3NlKCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxlbiA9IHZhbHVlLmJ5dGVMZW5ndGg7XG4gICAgICAgIGlmIChvblByb2dyZXNzKSB7XG4gICAgICAgICAgbGV0IGxvYWRlZEJ5dGVzID0gYnl0ZXMgKz0gbGVuO1xuICAgICAgICAgIG9uUHJvZ3Jlc3MobG9hZGVkQnl0ZXMpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnRyb2xsZXIuZW5xdWV1ZShuZXcgVWludDhBcnJheSh2YWx1ZSkpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIF9vbkZpbmlzaChlcnIpO1xuICAgICAgICB0aHJvdyBlcnI7XG4gICAgICB9XG4gICAgfSxcbiAgICBjYW5jZWwocmVhc29uKSB7XG4gICAgICBfb25GaW5pc2gocmVhc29uKTtcbiAgICAgIHJldHVybiBpdGVyYXRvci5yZXR1cm4oKTtcbiAgICB9XG4gIH0sIHtcbiAgICBoaWdoV2F0ZXJNYXJrOiAyXG4gIH0pXG59O1xuXG5jb25zdCBpc0ZldGNoU3VwcG9ydGVkID0gdHlwZW9mIGZldGNoID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBSZXF1ZXN0ID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBSZXNwb25zZSA9PT0gJ2Z1bmN0aW9uJztcbmNvbnN0IGlzUmVhZGFibGVTdHJlYW1TdXBwb3J0ZWQgPSBpc0ZldGNoU3VwcG9ydGVkICYmIHR5cGVvZiBSZWFkYWJsZVN0cmVhbSA9PT0gJ2Z1bmN0aW9uJztcblxuLy8gdXNlZCBvbmx5IGluc2lkZSB0aGUgZmV0Y2ggYWRhcHRlclxuY29uc3QgZW5jb2RlVGV4dCA9IGlzRmV0Y2hTdXBwb3J0ZWQgJiYgKHR5cGVvZiBUZXh0RW5jb2RlciA9PT0gJ2Z1bmN0aW9uJyA/XG4gICAgKChlbmNvZGVyKSA9PiAoc3RyKSA9PiBlbmNvZGVyLmVuY29kZShzdHIpKShuZXcgVGV4dEVuY29kZXIoKSkgOlxuICAgIGFzeW5jIChzdHIpID0+IG5ldyBVaW50OEFycmF5KGF3YWl0IG5ldyBSZXNwb25zZShzdHIpLmFycmF5QnVmZmVyKCkpXG4pO1xuXG5jb25zdCB0ZXN0ID0gKGZuLCAuLi5hcmdzKSA9PiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuICEhZm4oLi4uYXJncyk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxufTtcblxuY29uc3Qgc3VwcG9ydHNSZXF1ZXN0U3RyZWFtID0gaXNSZWFkYWJsZVN0cmVhbVN1cHBvcnRlZCAmJiB0ZXN0KCgpID0+IHtcbiAgbGV0IGR1cGxleEFjY2Vzc2VkID0gZmFsc2U7XG5cbiAgY29uc3QgaGFzQ29udGVudFR5cGUgPSBuZXcgUmVxdWVzdChwbGF0Zm9ybS5vcmlnaW4sIHtcbiAgICBib2R5OiBuZXcgUmVhZGFibGVTdHJlYW0oKSxcbiAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICBnZXQgZHVwbGV4KCkge1xuICAgICAgZHVwbGV4QWNjZXNzZWQgPSB0cnVlO1xuICAgICAgcmV0dXJuICdoYWxmJztcbiAgICB9LFxuICB9KS5oZWFkZXJzLmhhcygnQ29udGVudC1UeXBlJyk7XG5cbiAgcmV0dXJuIGR1cGxleEFjY2Vzc2VkICYmICFoYXNDb250ZW50VHlwZTtcbn0pO1xuXG5jb25zdCBERUZBVUxUX0NIVU5LX1NJWkUgPSA2NCAqIDEwMjQ7XG5cbmNvbnN0IHN1cHBvcnRzUmVzcG9uc2VTdHJlYW0gPSBpc1JlYWRhYmxlU3RyZWFtU3VwcG9ydGVkICYmXG4gIHRlc3QoKCkgPT4gdXRpbHMkMS5pc1JlYWRhYmxlU3RyZWFtKG5ldyBSZXNwb25zZSgnJykuYm9keSkpO1xuXG5cbmNvbnN0IHJlc29sdmVycyA9IHtcbiAgc3RyZWFtOiBzdXBwb3J0c1Jlc3BvbnNlU3RyZWFtICYmICgocmVzKSA9PiByZXMuYm9keSlcbn07XG5cbmlzRmV0Y2hTdXBwb3J0ZWQgJiYgKCgocmVzKSA9PiB7XG4gIFsndGV4dCcsICdhcnJheUJ1ZmZlcicsICdibG9iJywgJ2Zvcm1EYXRhJywgJ3N0cmVhbSddLmZvckVhY2godHlwZSA9PiB7XG4gICAgIXJlc29sdmVyc1t0eXBlXSAmJiAocmVzb2x2ZXJzW3R5cGVdID0gdXRpbHMkMS5pc0Z1bmN0aW9uKHJlc1t0eXBlXSkgPyAocmVzKSA9PiByZXNbdHlwZV0oKSA6XG4gICAgICAoXywgY29uZmlnKSA9PiB7XG4gICAgICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKGBSZXNwb25zZSB0eXBlICcke3R5cGV9JyBpcyBub3Qgc3VwcG9ydGVkYCwgQXhpb3NFcnJvci5FUlJfTk9UX1NVUFBPUlQsIGNvbmZpZyk7XG4gICAgICB9KTtcbiAgfSk7XG59KShuZXcgUmVzcG9uc2UpKTtcblxuY29uc3QgZ2V0Qm9keUxlbmd0aCA9IGFzeW5jIChib2R5KSA9PiB7XG4gIGlmIChib2R5ID09IG51bGwpIHtcbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIGlmKHV0aWxzJDEuaXNCbG9iKGJvZHkpKSB7XG4gICAgcmV0dXJuIGJvZHkuc2l6ZTtcbiAgfVxuXG4gIGlmKHV0aWxzJDEuaXNTcGVjQ29tcGxpYW50Rm9ybShib2R5KSkge1xuICAgIHJldHVybiAoYXdhaXQgbmV3IFJlcXVlc3QoYm9keSkuYXJyYXlCdWZmZXIoKSkuYnl0ZUxlbmd0aDtcbiAgfVxuXG4gIGlmKHV0aWxzJDEuaXNBcnJheUJ1ZmZlclZpZXcoYm9keSkgfHwgdXRpbHMkMS5pc0FycmF5QnVmZmVyKGJvZHkpKSB7XG4gICAgcmV0dXJuIGJvZHkuYnl0ZUxlbmd0aDtcbiAgfVxuXG4gIGlmKHV0aWxzJDEuaXNVUkxTZWFyY2hQYXJhbXMoYm9keSkpIHtcbiAgICBib2R5ID0gYm9keSArICcnO1xuICB9XG5cbiAgaWYodXRpbHMkMS5pc1N0cmluZyhib2R5KSkge1xuICAgIHJldHVybiAoYXdhaXQgZW5jb2RlVGV4dChib2R5KSkuYnl0ZUxlbmd0aDtcbiAgfVxufTtcblxuY29uc3QgcmVzb2x2ZUJvZHlMZW5ndGggPSBhc3luYyAoaGVhZGVycywgYm9keSkgPT4ge1xuICBjb25zdCBsZW5ndGggPSB1dGlscyQxLnRvRmluaXRlTnVtYmVyKGhlYWRlcnMuZ2V0Q29udGVudExlbmd0aCgpKTtcblxuICByZXR1cm4gbGVuZ3RoID09IG51bGwgPyBnZXRCb2R5TGVuZ3RoKGJvZHkpIDogbGVuZ3RoO1xufTtcblxudmFyIGZldGNoQWRhcHRlciA9IGlzRmV0Y2hTdXBwb3J0ZWQgJiYgKGFzeW5jIChjb25maWcpID0+IHtcbiAgbGV0IHtcbiAgICB1cmwsXG4gICAgbWV0aG9kLFxuICAgIGRhdGEsXG4gICAgc2lnbmFsLFxuICAgIGNhbmNlbFRva2VuLFxuICAgIHRpbWVvdXQsXG4gICAgb25Eb3dubG9hZFByb2dyZXNzLFxuICAgIG9uVXBsb2FkUHJvZ3Jlc3MsXG4gICAgcmVzcG9uc2VUeXBlLFxuICAgIGhlYWRlcnMsXG4gICAgd2l0aENyZWRlbnRpYWxzID0gJ3NhbWUtb3JpZ2luJyxcbiAgICBmZXRjaE9wdGlvbnNcbiAgfSA9IHJlc29sdmVDb25maWcoY29uZmlnKTtcblxuICByZXNwb25zZVR5cGUgPSByZXNwb25zZVR5cGUgPyAocmVzcG9uc2VUeXBlICsgJycpLnRvTG93ZXJDYXNlKCkgOiAndGV4dCc7XG5cbiAgbGV0IFtjb21wb3NlZFNpZ25hbCwgc3RvcFRpbWVvdXRdID0gKHNpZ25hbCB8fCBjYW5jZWxUb2tlbiB8fCB0aW1lb3V0KSA/XG4gICAgY29tcG9zZVNpZ25hbHMkMShbc2lnbmFsLCBjYW5jZWxUb2tlbl0sIHRpbWVvdXQpIDogW107XG5cbiAgbGV0IGZpbmlzaGVkLCByZXF1ZXN0O1xuXG4gIGNvbnN0IG9uRmluaXNoID0gKCkgPT4ge1xuICAgICFmaW5pc2hlZCAmJiBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGNvbXBvc2VkU2lnbmFsICYmIGNvbXBvc2VkU2lnbmFsLnVuc3Vic2NyaWJlKCk7XG4gICAgfSk7XG5cbiAgICBmaW5pc2hlZCA9IHRydWU7XG4gIH07XG5cbiAgbGV0IHJlcXVlc3RDb250ZW50TGVuZ3RoO1xuXG4gIHRyeSB7XG4gICAgaWYgKFxuICAgICAgb25VcGxvYWRQcm9ncmVzcyAmJiBzdXBwb3J0c1JlcXVlc3RTdHJlYW0gJiYgbWV0aG9kICE9PSAnZ2V0JyAmJiBtZXRob2QgIT09ICdoZWFkJyAmJlxuICAgICAgKHJlcXVlc3RDb250ZW50TGVuZ3RoID0gYXdhaXQgcmVzb2x2ZUJvZHlMZW5ndGgoaGVhZGVycywgZGF0YSkpICE9PSAwXG4gICAgKSB7XG4gICAgICBsZXQgX3JlcXVlc3QgPSBuZXcgUmVxdWVzdCh1cmwsIHtcbiAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgIGJvZHk6IGRhdGEsXG4gICAgICAgIGR1cGxleDogXCJoYWxmXCJcbiAgICAgIH0pO1xuXG4gICAgICBsZXQgY29udGVudFR5cGVIZWFkZXI7XG5cbiAgICAgIGlmICh1dGlscyQxLmlzRm9ybURhdGEoZGF0YSkgJiYgKGNvbnRlbnRUeXBlSGVhZGVyID0gX3JlcXVlc3QuaGVhZGVycy5nZXQoJ2NvbnRlbnQtdHlwZScpKSkge1xuICAgICAgICBoZWFkZXJzLnNldENvbnRlbnRUeXBlKGNvbnRlbnRUeXBlSGVhZGVyKTtcbiAgICAgIH1cblxuICAgICAgaWYgKF9yZXF1ZXN0LmJvZHkpIHtcbiAgICAgICAgY29uc3QgW29uUHJvZ3Jlc3MsIGZsdXNoXSA9IHByb2dyZXNzRXZlbnREZWNvcmF0b3IoXG4gICAgICAgICAgcmVxdWVzdENvbnRlbnRMZW5ndGgsXG4gICAgICAgICAgcHJvZ3Jlc3NFdmVudFJlZHVjZXIoYXN5bmNEZWNvcmF0b3Iob25VcGxvYWRQcm9ncmVzcykpXG4gICAgICAgICk7XG5cbiAgICAgICAgZGF0YSA9IHRyYWNrU3RyZWFtKF9yZXF1ZXN0LmJvZHksIERFRkFVTFRfQ0hVTktfU0laRSwgb25Qcm9ncmVzcywgZmx1c2gsIGVuY29kZVRleHQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghdXRpbHMkMS5pc1N0cmluZyh3aXRoQ3JlZGVudGlhbHMpKSB7XG4gICAgICB3aXRoQ3JlZGVudGlhbHMgPSB3aXRoQ3JlZGVudGlhbHMgPyAnaW5jbHVkZScgOiAnb21pdCc7XG4gICAgfVxuXG4gICAgcmVxdWVzdCA9IG5ldyBSZXF1ZXN0KHVybCwge1xuICAgICAgLi4uZmV0Y2hPcHRpb25zLFxuICAgICAgc2lnbmFsOiBjb21wb3NlZFNpZ25hbCxcbiAgICAgIG1ldGhvZDogbWV0aG9kLnRvVXBwZXJDYXNlKCksXG4gICAgICBoZWFkZXJzOiBoZWFkZXJzLm5vcm1hbGl6ZSgpLnRvSlNPTigpLFxuICAgICAgYm9keTogZGF0YSxcbiAgICAgIGR1cGxleDogXCJoYWxmXCIsXG4gICAgICBjcmVkZW50aWFsczogd2l0aENyZWRlbnRpYWxzXG4gICAgfSk7XG5cbiAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChyZXF1ZXN0KTtcblxuICAgIGNvbnN0IGlzU3RyZWFtUmVzcG9uc2UgPSBzdXBwb3J0c1Jlc3BvbnNlU3RyZWFtICYmIChyZXNwb25zZVR5cGUgPT09ICdzdHJlYW0nIHx8IHJlc3BvbnNlVHlwZSA9PT0gJ3Jlc3BvbnNlJyk7XG5cbiAgICBpZiAoc3VwcG9ydHNSZXNwb25zZVN0cmVhbSAmJiAob25Eb3dubG9hZFByb2dyZXNzIHx8IGlzU3RyZWFtUmVzcG9uc2UpKSB7XG4gICAgICBjb25zdCBvcHRpb25zID0ge307XG5cbiAgICAgIFsnc3RhdHVzJywgJ3N0YXR1c1RleHQnLCAnaGVhZGVycyddLmZvckVhY2gocHJvcCA9PiB7XG4gICAgICAgIG9wdGlvbnNbcHJvcF0gPSByZXNwb25zZVtwcm9wXTtcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCByZXNwb25zZUNvbnRlbnRMZW5ndGggPSB1dGlscyQxLnRvRmluaXRlTnVtYmVyKHJlc3BvbnNlLmhlYWRlcnMuZ2V0KCdjb250ZW50LWxlbmd0aCcpKTtcblxuICAgICAgY29uc3QgW29uUHJvZ3Jlc3MsIGZsdXNoXSA9IG9uRG93bmxvYWRQcm9ncmVzcyAmJiBwcm9ncmVzc0V2ZW50RGVjb3JhdG9yKFxuICAgICAgICByZXNwb25zZUNvbnRlbnRMZW5ndGgsXG4gICAgICAgIHByb2dyZXNzRXZlbnRSZWR1Y2VyKGFzeW5jRGVjb3JhdG9yKG9uRG93bmxvYWRQcm9ncmVzcyksIHRydWUpXG4gICAgICApIHx8IFtdO1xuXG4gICAgICByZXNwb25zZSA9IG5ldyBSZXNwb25zZShcbiAgICAgICAgdHJhY2tTdHJlYW0ocmVzcG9uc2UuYm9keSwgREVGQVVMVF9DSFVOS19TSVpFLCBvblByb2dyZXNzLCAoKSA9PiB7XG4gICAgICAgICAgZmx1c2ggJiYgZmx1c2goKTtcbiAgICAgICAgICBpc1N0cmVhbVJlc3BvbnNlICYmIG9uRmluaXNoKCk7XG4gICAgICAgIH0sIGVuY29kZVRleHQpLFxuICAgICAgICBvcHRpb25zXG4gICAgICApO1xuICAgIH1cblxuICAgIHJlc3BvbnNlVHlwZSA9IHJlc3BvbnNlVHlwZSB8fCAndGV4dCc7XG5cbiAgICBsZXQgcmVzcG9uc2VEYXRhID0gYXdhaXQgcmVzb2x2ZXJzW3V0aWxzJDEuZmluZEtleShyZXNvbHZlcnMsIHJlc3BvbnNlVHlwZSkgfHwgJ3RleHQnXShyZXNwb25zZSwgY29uZmlnKTtcblxuICAgICFpc1N0cmVhbVJlc3BvbnNlICYmIG9uRmluaXNoKCk7XG5cbiAgICBzdG9wVGltZW91dCAmJiBzdG9wVGltZW91dCgpO1xuXG4gICAgcmV0dXJuIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHNldHRsZShyZXNvbHZlLCByZWplY3QsIHtcbiAgICAgICAgZGF0YTogcmVzcG9uc2VEYXRhLFxuICAgICAgICBoZWFkZXJzOiBBeGlvc0hlYWRlcnMkMS5mcm9tKHJlc3BvbnNlLmhlYWRlcnMpLFxuICAgICAgICBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgICAgc3RhdHVzVGV4dDogcmVzcG9uc2Uuc3RhdHVzVGV4dCxcbiAgICAgICAgY29uZmlnLFxuICAgICAgICByZXF1ZXN0XG4gICAgICB9KTtcbiAgICB9KVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBvbkZpbmlzaCgpO1xuXG4gICAgaWYgKGVyciAmJiBlcnIubmFtZSA9PT0gJ1R5cGVFcnJvcicgJiYgL2ZldGNoL2kudGVzdChlcnIubWVzc2FnZSkpIHtcbiAgICAgIHRocm93IE9iamVjdC5hc3NpZ24oXG4gICAgICAgIG5ldyBBeGlvc0Vycm9yKCdOZXR3b3JrIEVycm9yJywgQXhpb3NFcnJvci5FUlJfTkVUV09SSywgY29uZmlnLCByZXF1ZXN0KSxcbiAgICAgICAge1xuICAgICAgICAgIGNhdXNlOiBlcnIuY2F1c2UgfHwgZXJyXG4gICAgICAgIH1cbiAgICAgIClcbiAgICB9XG5cbiAgICB0aHJvdyBBeGlvc0Vycm9yLmZyb20oZXJyLCBlcnIgJiYgZXJyLmNvZGUsIGNvbmZpZywgcmVxdWVzdCk7XG4gIH1cbn0pO1xuXG5jb25zdCBrbm93bkFkYXB0ZXJzID0ge1xuICBodHRwOiBodHRwQWRhcHRlcixcbiAgeGhyOiB4aHJBZGFwdGVyLFxuICBmZXRjaDogZmV0Y2hBZGFwdGVyXG59O1xuXG51dGlscyQxLmZvckVhY2goa25vd25BZGFwdGVycywgKGZuLCB2YWx1ZSkgPT4ge1xuICBpZiAoZm4pIHtcbiAgICB0cnkge1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGZuLCAnbmFtZScsIHt2YWx1ZX0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1lbXB0eVxuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZm4sICdhZGFwdGVyTmFtZScsIHt2YWx1ZX0pO1xuICB9XG59KTtcblxuY29uc3QgcmVuZGVyUmVhc29uID0gKHJlYXNvbikgPT4gYC0gJHtyZWFzb259YDtcblxuY29uc3QgaXNSZXNvbHZlZEhhbmRsZSA9IChhZGFwdGVyKSA9PiB1dGlscyQxLmlzRnVuY3Rpb24oYWRhcHRlcikgfHwgYWRhcHRlciA9PT0gbnVsbCB8fCBhZGFwdGVyID09PSBmYWxzZTtcblxudmFyIGFkYXB0ZXJzID0ge1xuICBnZXRBZGFwdGVyOiAoYWRhcHRlcnMpID0+IHtcbiAgICBhZGFwdGVycyA9IHV0aWxzJDEuaXNBcnJheShhZGFwdGVycykgPyBhZGFwdGVycyA6IFthZGFwdGVyc107XG5cbiAgICBjb25zdCB7bGVuZ3RofSA9IGFkYXB0ZXJzO1xuICAgIGxldCBuYW1lT3JBZGFwdGVyO1xuICAgIGxldCBhZGFwdGVyO1xuXG4gICAgY29uc3QgcmVqZWN0ZWRSZWFzb25zID0ge307XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICBuYW1lT3JBZGFwdGVyID0gYWRhcHRlcnNbaV07XG4gICAgICBsZXQgaWQ7XG5cbiAgICAgIGFkYXB0ZXIgPSBuYW1lT3JBZGFwdGVyO1xuXG4gICAgICBpZiAoIWlzUmVzb2x2ZWRIYW5kbGUobmFtZU9yQWRhcHRlcikpIHtcbiAgICAgICAgYWRhcHRlciA9IGtub3duQWRhcHRlcnNbKGlkID0gU3RyaW5nKG5hbWVPckFkYXB0ZXIpKS50b0xvd2VyQ2FzZSgpXTtcblxuICAgICAgICBpZiAoYWRhcHRlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoYFVua25vd24gYWRhcHRlciAnJHtpZH0nYCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGFkYXB0ZXIpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIHJlamVjdGVkUmVhc29uc1tpZCB8fCAnIycgKyBpXSA9IGFkYXB0ZXI7XG4gICAgfVxuXG4gICAgaWYgKCFhZGFwdGVyKSB7XG5cbiAgICAgIGNvbnN0IHJlYXNvbnMgPSBPYmplY3QuZW50cmllcyhyZWplY3RlZFJlYXNvbnMpXG4gICAgICAgIC5tYXAoKFtpZCwgc3RhdGVdKSA9PiBgYWRhcHRlciAke2lkfSBgICtcbiAgICAgICAgICAoc3RhdGUgPT09IGZhbHNlID8gJ2lzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGVudmlyb25tZW50JyA6ICdpcyBub3QgYXZhaWxhYmxlIGluIHRoZSBidWlsZCcpXG4gICAgICAgICk7XG5cbiAgICAgIGxldCBzID0gbGVuZ3RoID9cbiAgICAgICAgKHJlYXNvbnMubGVuZ3RoID4gMSA/ICdzaW5jZSA6XFxuJyArIHJlYXNvbnMubWFwKHJlbmRlclJlYXNvbikuam9pbignXFxuJykgOiAnICcgKyByZW5kZXJSZWFzb24ocmVhc29uc1swXSkpIDpcbiAgICAgICAgJ2FzIG5vIGFkYXB0ZXIgc3BlY2lmaWVkJztcblxuICAgICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoXG4gICAgICAgIGBUaGVyZSBpcyBubyBzdWl0YWJsZSBhZGFwdGVyIHRvIGRpc3BhdGNoIHRoZSByZXF1ZXN0IGAgKyBzLFxuICAgICAgICAnRVJSX05PVF9TVVBQT1JUJ1xuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYWRhcHRlcjtcbiAgfSxcbiAgYWRhcHRlcnM6IGtub3duQWRhcHRlcnNcbn07XG5cbi8qKlxuICogVGhyb3dzIGEgYENhbmNlbGVkRXJyb3JgIGlmIGNhbmNlbGxhdGlvbiBoYXMgYmVlbiByZXF1ZXN0ZWQuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZyBUaGUgY29uZmlnIHRoYXQgaXMgdG8gYmUgdXNlZCBmb3IgdGhlIHJlcXVlc3RcbiAqXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gdGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZChjb25maWcpIHtcbiAgaWYgKGNvbmZpZy5jYW5jZWxUb2tlbikge1xuICAgIGNvbmZpZy5jYW5jZWxUb2tlbi50aHJvd0lmUmVxdWVzdGVkKCk7XG4gIH1cblxuICBpZiAoY29uZmlnLnNpZ25hbCAmJiBjb25maWcuc2lnbmFsLmFib3J0ZWQpIHtcbiAgICB0aHJvdyBuZXcgQ2FuY2VsZWRFcnJvcihudWxsLCBjb25maWcpO1xuICB9XG59XG5cbi8qKlxuICogRGlzcGF0Y2ggYSByZXF1ZXN0IHRvIHRoZSBzZXJ2ZXIgdXNpbmcgdGhlIGNvbmZpZ3VyZWQgYWRhcHRlci5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gY29uZmlnIFRoZSBjb25maWcgdGhhdCBpcyB0byBiZSB1c2VkIGZvciB0aGUgcmVxdWVzdFxuICpcbiAqIEByZXR1cm5zIHtQcm9taXNlfSBUaGUgUHJvbWlzZSB0byBiZSBmdWxmaWxsZWRcbiAqL1xuZnVuY3Rpb24gZGlzcGF0Y2hSZXF1ZXN0KGNvbmZpZykge1xuICB0aHJvd0lmQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKGNvbmZpZyk7XG5cbiAgY29uZmlnLmhlYWRlcnMgPSBBeGlvc0hlYWRlcnMkMS5mcm9tKGNvbmZpZy5oZWFkZXJzKTtcblxuICAvLyBUcmFuc2Zvcm0gcmVxdWVzdCBkYXRhXG4gIGNvbmZpZy5kYXRhID0gdHJhbnNmb3JtRGF0YS5jYWxsKFxuICAgIGNvbmZpZyxcbiAgICBjb25maWcudHJhbnNmb3JtUmVxdWVzdFxuICApO1xuXG4gIGlmIChbJ3Bvc3QnLCAncHV0JywgJ3BhdGNoJ10uaW5kZXhPZihjb25maWcubWV0aG9kKSAhPT0gLTEpIHtcbiAgICBjb25maWcuaGVhZGVycy5zZXRDb250ZW50VHlwZSgnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJywgZmFsc2UpO1xuICB9XG5cbiAgY29uc3QgYWRhcHRlciA9IGFkYXB0ZXJzLmdldEFkYXB0ZXIoY29uZmlnLmFkYXB0ZXIgfHwgZGVmYXVsdHMkMS5hZGFwdGVyKTtcblxuICByZXR1cm4gYWRhcHRlcihjb25maWcpLnRoZW4oZnVuY3Rpb24gb25BZGFwdGVyUmVzb2x1dGlvbihyZXNwb25zZSkge1xuICAgIHRocm93SWZDYW5jZWxsYXRpb25SZXF1ZXN0ZWQoY29uZmlnKTtcblxuICAgIC8vIFRyYW5zZm9ybSByZXNwb25zZSBkYXRhXG4gICAgcmVzcG9uc2UuZGF0YSA9IHRyYW5zZm9ybURhdGEuY2FsbChcbiAgICAgIGNvbmZpZyxcbiAgICAgIGNvbmZpZy50cmFuc2Zvcm1SZXNwb25zZSxcbiAgICAgIHJlc3BvbnNlXG4gICAgKTtcblxuICAgIHJlc3BvbnNlLmhlYWRlcnMgPSBBeGlvc0hlYWRlcnMkMS5mcm9tKHJlc3BvbnNlLmhlYWRlcnMpO1xuXG4gICAgcmV0dXJuIHJlc3BvbnNlO1xuICB9LCBmdW5jdGlvbiBvbkFkYXB0ZXJSZWplY3Rpb24ocmVhc29uKSB7XG4gICAgaWYgKCFpc0NhbmNlbChyZWFzb24pKSB7XG4gICAgICB0aHJvd0lmQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKGNvbmZpZyk7XG5cbiAgICAgIC8vIFRyYW5zZm9ybSByZXNwb25zZSBkYXRhXG4gICAgICBpZiAocmVhc29uICYmIHJlYXNvbi5yZXNwb25zZSkge1xuICAgICAgICByZWFzb24ucmVzcG9uc2UuZGF0YSA9IHRyYW5zZm9ybURhdGEuY2FsbChcbiAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgY29uZmlnLnRyYW5zZm9ybVJlc3BvbnNlLFxuICAgICAgICAgIHJlYXNvbi5yZXNwb25zZVxuICAgICAgICApO1xuICAgICAgICByZWFzb24ucmVzcG9uc2UuaGVhZGVycyA9IEF4aW9zSGVhZGVycyQxLmZyb20ocmVhc29uLnJlc3BvbnNlLmhlYWRlcnMpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBQcm9taXNlLnJlamVjdChyZWFzb24pO1xuICB9KTtcbn1cblxuY29uc3QgVkVSU0lPTiA9IFwiMS43LjRcIjtcblxuY29uc3QgdmFsaWRhdG9ycyQxID0ge307XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG5bJ29iamVjdCcsICdib29sZWFuJywgJ251bWJlcicsICdmdW5jdGlvbicsICdzdHJpbmcnLCAnc3ltYm9sJ10uZm9yRWFjaCgodHlwZSwgaSkgPT4ge1xuICB2YWxpZGF0b3JzJDFbdHlwZV0gPSBmdW5jdGlvbiB2YWxpZGF0b3IodGhpbmcpIHtcbiAgICByZXR1cm4gdHlwZW9mIHRoaW5nID09PSB0eXBlIHx8ICdhJyArIChpIDwgMSA/ICduICcgOiAnICcpICsgdHlwZTtcbiAgfTtcbn0pO1xuXG5jb25zdCBkZXByZWNhdGVkV2FybmluZ3MgPSB7fTtcblxuLyoqXG4gKiBUcmFuc2l0aW9uYWwgb3B0aW9uIHZhbGlkYXRvclxuICpcbiAqIEBwYXJhbSB7ZnVuY3Rpb258Ym9vbGVhbj99IHZhbGlkYXRvciAtIHNldCB0byBmYWxzZSBpZiB0aGUgdHJhbnNpdGlvbmFsIG9wdGlvbiBoYXMgYmVlbiByZW1vdmVkXG4gKiBAcGFyYW0ge3N0cmluZz99IHZlcnNpb24gLSBkZXByZWNhdGVkIHZlcnNpb24gLyByZW1vdmVkIHNpbmNlIHZlcnNpb25cbiAqIEBwYXJhbSB7c3RyaW5nP30gbWVzc2FnZSAtIHNvbWUgbWVzc2FnZSB3aXRoIGFkZGl0aW9uYWwgaW5mb1xuICpcbiAqIEByZXR1cm5zIHtmdW5jdGlvbn1cbiAqL1xudmFsaWRhdG9ycyQxLnRyYW5zaXRpb25hbCA9IGZ1bmN0aW9uIHRyYW5zaXRpb25hbCh2YWxpZGF0b3IsIHZlcnNpb24sIG1lc3NhZ2UpIHtcbiAgZnVuY3Rpb24gZm9ybWF0TWVzc2FnZShvcHQsIGRlc2MpIHtcbiAgICByZXR1cm4gJ1tBeGlvcyB2JyArIFZFUlNJT04gKyAnXSBUcmFuc2l0aW9uYWwgb3B0aW9uIFxcJycgKyBvcHQgKyAnXFwnJyArIGRlc2MgKyAobWVzc2FnZSA/ICcuICcgKyBtZXNzYWdlIDogJycpO1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgcmV0dXJuICh2YWx1ZSwgb3B0LCBvcHRzKSA9PiB7XG4gICAgaWYgKHZhbGlkYXRvciA9PT0gZmFsc2UpIHtcbiAgICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKFxuICAgICAgICBmb3JtYXRNZXNzYWdlKG9wdCwgJyBoYXMgYmVlbiByZW1vdmVkJyArICh2ZXJzaW9uID8gJyBpbiAnICsgdmVyc2lvbiA6ICcnKSksXG4gICAgICAgIEF4aW9zRXJyb3IuRVJSX0RFUFJFQ0FURURcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHZlcnNpb24gJiYgIWRlcHJlY2F0ZWRXYXJuaW5nc1tvcHRdKSB7XG4gICAgICBkZXByZWNhdGVkV2FybmluZ3Nbb3B0XSA9IHRydWU7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBmb3JtYXRNZXNzYWdlKFxuICAgICAgICAgIG9wdCxcbiAgICAgICAgICAnIGhhcyBiZWVuIGRlcHJlY2F0ZWQgc2luY2UgdicgKyB2ZXJzaW9uICsgJyBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBuZWFyIGZ1dHVyZSdcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsaWRhdG9yID8gdmFsaWRhdG9yKHZhbHVlLCBvcHQsIG9wdHMpIDogdHJ1ZTtcbiAgfTtcbn07XG5cbi8qKlxuICogQXNzZXJ0IG9iamVjdCdzIHByb3BlcnRpZXMgdHlwZVxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gKiBAcGFyYW0ge29iamVjdH0gc2NoZW1hXG4gKiBAcGFyYW0ge2Jvb2xlYW4/fSBhbGxvd1Vua25vd25cbiAqXG4gKiBAcmV0dXJucyB7b2JqZWN0fVxuICovXG5cbmZ1bmN0aW9uIGFzc2VydE9wdGlvbnMob3B0aW9ucywgc2NoZW1hLCBhbGxvd1Vua25vd24pIHtcbiAgaWYgKHR5cGVvZiBvcHRpb25zICE9PSAnb2JqZWN0Jykge1xuICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKCdvcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0JywgQXhpb3NFcnJvci5FUlJfQkFEX09QVElPTl9WQUxVRSk7XG4gIH1cbiAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG9wdGlvbnMpO1xuICBsZXQgaSA9IGtleXMubGVuZ3RoO1xuICB3aGlsZSAoaS0tID4gMCkge1xuICAgIGNvbnN0IG9wdCA9IGtleXNbaV07XG4gICAgY29uc3QgdmFsaWRhdG9yID0gc2NoZW1hW29wdF07XG4gICAgaWYgKHZhbGlkYXRvcikge1xuICAgICAgY29uc3QgdmFsdWUgPSBvcHRpb25zW29wdF07XG4gICAgICBjb25zdCByZXN1bHQgPSB2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbGlkYXRvcih2YWx1ZSwgb3B0LCBvcHRpb25zKTtcbiAgICAgIGlmIChyZXN1bHQgIT09IHRydWUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoJ29wdGlvbiAnICsgb3B0ICsgJyBtdXN0IGJlICcgKyByZXN1bHQsIEF4aW9zRXJyb3IuRVJSX0JBRF9PUFRJT05fVkFMVUUpO1xuICAgICAgfVxuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmIChhbGxvd1Vua25vd24gIT09IHRydWUpIHtcbiAgICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKCdVbmtub3duIG9wdGlvbiAnICsgb3B0LCBBeGlvc0Vycm9yLkVSUl9CQURfT1BUSU9OKTtcbiAgICB9XG4gIH1cbn1cblxudmFyIHZhbGlkYXRvciA9IHtcbiAgYXNzZXJ0T3B0aW9ucyxcbiAgdmFsaWRhdG9yczogdmFsaWRhdG9ycyQxXG59O1xuXG5jb25zdCB2YWxpZGF0b3JzID0gdmFsaWRhdG9yLnZhbGlkYXRvcnM7XG5cbi8qKlxuICogQ3JlYXRlIGEgbmV3IGluc3RhbmNlIG9mIEF4aW9zXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGluc3RhbmNlQ29uZmlnIFRoZSBkZWZhdWx0IGNvbmZpZyBmb3IgdGhlIGluc3RhbmNlXG4gKlxuICogQHJldHVybiB7QXhpb3N9IEEgbmV3IGluc3RhbmNlIG9mIEF4aW9zXG4gKi9cbmNsYXNzIEF4aW9zIHtcbiAgY29uc3RydWN0b3IoaW5zdGFuY2VDb25maWcpIHtcbiAgICB0aGlzLmRlZmF1bHRzID0gaW5zdGFuY2VDb25maWc7XG4gICAgdGhpcy5pbnRlcmNlcHRvcnMgPSB7XG4gICAgICByZXF1ZXN0OiBuZXcgSW50ZXJjZXB0b3JNYW5hZ2VyJDEoKSxcbiAgICAgIHJlc3BvbnNlOiBuZXcgSW50ZXJjZXB0b3JNYW5hZ2VyJDEoKVxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRGlzcGF0Y2ggYSByZXF1ZXN0XG4gICAqXG4gICAqIEBwYXJhbSB7U3RyaW5nfE9iamVjdH0gY29uZmlnT3JVcmwgVGhlIGNvbmZpZyBzcGVjaWZpYyBmb3IgdGhpcyByZXF1ZXN0IChtZXJnZWQgd2l0aCB0aGlzLmRlZmF1bHRzKVxuICAgKiBAcGFyYW0gez9PYmplY3R9IGNvbmZpZ1xuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gVGhlIFByb21pc2UgdG8gYmUgZnVsZmlsbGVkXG4gICAqL1xuICBhc3luYyByZXF1ZXN0KGNvbmZpZ09yVXJsLCBjb25maWcpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuX3JlcXVlc3QoY29uZmlnT3JVcmwsIGNvbmZpZyk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBpZiAoZXJyIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgbGV0IGR1bW15O1xuXG4gICAgICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlID8gRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UoZHVtbXkgPSB7fSkgOiAoZHVtbXkgPSBuZXcgRXJyb3IoKSk7XG5cbiAgICAgICAgLy8gc2xpY2Ugb2ZmIHRoZSBFcnJvcjogLi4uIGxpbmVcbiAgICAgICAgY29uc3Qgc3RhY2sgPSBkdW1teS5zdGFjayA/IGR1bW15LnN0YWNrLnJlcGxhY2UoL14uK1xcbi8sICcnKSA6ICcnO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGlmICghZXJyLnN0YWNrKSB7XG4gICAgICAgICAgICBlcnIuc3RhY2sgPSBzdGFjaztcbiAgICAgICAgICAgIC8vIG1hdGNoIHdpdGhvdXQgdGhlIDIgdG9wIHN0YWNrIGxpbmVzXG4gICAgICAgICAgfSBlbHNlIGlmIChzdGFjayAmJiAhU3RyaW5nKGVyci5zdGFjaykuZW5kc1dpdGgoc3RhY2sucmVwbGFjZSgvXi4rXFxuLitcXG4vLCAnJykpKSB7XG4gICAgICAgICAgICBlcnIuc3RhY2sgKz0gJ1xcbicgKyBzdGFjaztcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAvLyBpZ25vcmUgdGhlIGNhc2Ugd2hlcmUgXCJzdGFja1wiIGlzIGFuIHVuLXdyaXRhYmxlIHByb3BlcnR5XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhyb3cgZXJyO1xuICAgIH1cbiAgfVxuXG4gIF9yZXF1ZXN0KGNvbmZpZ09yVXJsLCBjb25maWcpIHtcbiAgICAvKmVzbGludCBuby1wYXJhbS1yZWFzc2lnbjowKi9cbiAgICAvLyBBbGxvdyBmb3IgYXhpb3MoJ2V4YW1wbGUvdXJsJ1ssIGNvbmZpZ10pIGEgbGEgZmV0Y2ggQVBJXG4gICAgaWYgKHR5cGVvZiBjb25maWdPclVybCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGNvbmZpZyA9IGNvbmZpZyB8fCB7fTtcbiAgICAgIGNvbmZpZy51cmwgPSBjb25maWdPclVybDtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uZmlnID0gY29uZmlnT3JVcmwgfHwge307XG4gICAgfVxuXG4gICAgY29uZmlnID0gbWVyZ2VDb25maWcodGhpcy5kZWZhdWx0cywgY29uZmlnKTtcblxuICAgIGNvbnN0IHt0cmFuc2l0aW9uYWwsIHBhcmFtc1NlcmlhbGl6ZXIsIGhlYWRlcnN9ID0gY29uZmlnO1xuXG4gICAgaWYgKHRyYW5zaXRpb25hbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB2YWxpZGF0b3IuYXNzZXJ0T3B0aW9ucyh0cmFuc2l0aW9uYWwsIHtcbiAgICAgICAgc2lsZW50SlNPTlBhcnNpbmc6IHZhbGlkYXRvcnMudHJhbnNpdGlvbmFsKHZhbGlkYXRvcnMuYm9vbGVhbiksXG4gICAgICAgIGZvcmNlZEpTT05QYXJzaW5nOiB2YWxpZGF0b3JzLnRyYW5zaXRpb25hbCh2YWxpZGF0b3JzLmJvb2xlYW4pLFxuICAgICAgICBjbGFyaWZ5VGltZW91dEVycm9yOiB2YWxpZGF0b3JzLnRyYW5zaXRpb25hbCh2YWxpZGF0b3JzLmJvb2xlYW4pXG4gICAgICB9LCBmYWxzZSk7XG4gICAgfVxuXG4gICAgaWYgKHBhcmFtc1NlcmlhbGl6ZXIgIT0gbnVsbCkge1xuICAgICAgaWYgKHV0aWxzJDEuaXNGdW5jdGlvbihwYXJhbXNTZXJpYWxpemVyKSkge1xuICAgICAgICBjb25maWcucGFyYW1zU2VyaWFsaXplciA9IHtcbiAgICAgICAgICBzZXJpYWxpemU6IHBhcmFtc1NlcmlhbGl6ZXJcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhbGlkYXRvci5hc3NlcnRPcHRpb25zKHBhcmFtc1NlcmlhbGl6ZXIsIHtcbiAgICAgICAgICBlbmNvZGU6IHZhbGlkYXRvcnMuZnVuY3Rpb24sXG4gICAgICAgICAgc2VyaWFsaXplOiB2YWxpZGF0b3JzLmZ1bmN0aW9uXG4gICAgICAgIH0sIHRydWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFNldCBjb25maWcubWV0aG9kXG4gICAgY29uZmlnLm1ldGhvZCA9IChjb25maWcubWV0aG9kIHx8IHRoaXMuZGVmYXVsdHMubWV0aG9kIHx8ICdnZXQnKS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgLy8gRmxhdHRlbiBoZWFkZXJzXG4gICAgbGV0IGNvbnRleHRIZWFkZXJzID0gaGVhZGVycyAmJiB1dGlscyQxLm1lcmdlKFxuICAgICAgaGVhZGVycy5jb21tb24sXG4gICAgICBoZWFkZXJzW2NvbmZpZy5tZXRob2RdXG4gICAgKTtcblxuICAgIGhlYWRlcnMgJiYgdXRpbHMkMS5mb3JFYWNoKFxuICAgICAgWydkZWxldGUnLCAnZ2V0JywgJ2hlYWQnLCAncG9zdCcsICdwdXQnLCAncGF0Y2gnLCAnY29tbW9uJ10sXG4gICAgICAobWV0aG9kKSA9PiB7XG4gICAgICAgIGRlbGV0ZSBoZWFkZXJzW21ldGhvZF07XG4gICAgICB9XG4gICAgKTtcblxuICAgIGNvbmZpZy5oZWFkZXJzID0gQXhpb3NIZWFkZXJzJDEuY29uY2F0KGNvbnRleHRIZWFkZXJzLCBoZWFkZXJzKTtcblxuICAgIC8vIGZpbHRlciBvdXQgc2tpcHBlZCBpbnRlcmNlcHRvcnNcbiAgICBjb25zdCByZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbiA9IFtdO1xuICAgIGxldCBzeW5jaHJvbm91c1JlcXVlc3RJbnRlcmNlcHRvcnMgPSB0cnVlO1xuICAgIHRoaXMuaW50ZXJjZXB0b3JzLnJlcXVlc3QuZm9yRWFjaChmdW5jdGlvbiB1bnNoaWZ0UmVxdWVzdEludGVyY2VwdG9ycyhpbnRlcmNlcHRvcikge1xuICAgICAgaWYgKHR5cGVvZiBpbnRlcmNlcHRvci5ydW5XaGVuID09PSAnZnVuY3Rpb24nICYmIGludGVyY2VwdG9yLnJ1bldoZW4oY29uZmlnKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBzeW5jaHJvbm91c1JlcXVlc3RJbnRlcmNlcHRvcnMgPSBzeW5jaHJvbm91c1JlcXVlc3RJbnRlcmNlcHRvcnMgJiYgaW50ZXJjZXB0b3Iuc3luY2hyb25vdXM7XG5cbiAgICAgIHJlcXVlc3RJbnRlcmNlcHRvckNoYWluLnVuc2hpZnQoaW50ZXJjZXB0b3IuZnVsZmlsbGVkLCBpbnRlcmNlcHRvci5yZWplY3RlZCk7XG4gICAgfSk7XG5cbiAgICBjb25zdCByZXNwb25zZUludGVyY2VwdG9yQ2hhaW4gPSBbXTtcbiAgICB0aGlzLmludGVyY2VwdG9ycy5yZXNwb25zZS5mb3JFYWNoKGZ1bmN0aW9uIHB1c2hSZXNwb25zZUludGVyY2VwdG9ycyhpbnRlcmNlcHRvcikge1xuICAgICAgcmVzcG9uc2VJbnRlcmNlcHRvckNoYWluLnB1c2goaW50ZXJjZXB0b3IuZnVsZmlsbGVkLCBpbnRlcmNlcHRvci5yZWplY3RlZCk7XG4gICAgfSk7XG5cbiAgICBsZXQgcHJvbWlzZTtcbiAgICBsZXQgaSA9IDA7XG4gICAgbGV0IGxlbjtcblxuICAgIGlmICghc3luY2hyb25vdXNSZXF1ZXN0SW50ZXJjZXB0b3JzKSB7XG4gICAgICBjb25zdCBjaGFpbiA9IFtkaXNwYXRjaFJlcXVlc3QuYmluZCh0aGlzKSwgdW5kZWZpbmVkXTtcbiAgICAgIGNoYWluLnVuc2hpZnQuYXBwbHkoY2hhaW4sIHJlcXVlc3RJbnRlcmNlcHRvckNoYWluKTtcbiAgICAgIGNoYWluLnB1c2guYXBwbHkoY2hhaW4sIHJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbik7XG4gICAgICBsZW4gPSBjaGFpbi5sZW5ndGg7XG5cbiAgICAgIHByb21pc2UgPSBQcm9taXNlLnJlc29sdmUoY29uZmlnKTtcblxuICAgICAgd2hpbGUgKGkgPCBsZW4pIHtcbiAgICAgICAgcHJvbWlzZSA9IHByb21pc2UudGhlbihjaGFpbltpKytdLCBjaGFpbltpKytdKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHByb21pc2U7XG4gICAgfVxuXG4gICAgbGVuID0gcmVxdWVzdEludGVyY2VwdG9yQ2hhaW4ubGVuZ3RoO1xuXG4gICAgbGV0IG5ld0NvbmZpZyA9IGNvbmZpZztcblxuICAgIGkgPSAwO1xuXG4gICAgd2hpbGUgKGkgPCBsZW4pIHtcbiAgICAgIGNvbnN0IG9uRnVsZmlsbGVkID0gcmVxdWVzdEludGVyY2VwdG9yQ2hhaW5baSsrXTtcbiAgICAgIGNvbnN0IG9uUmVqZWN0ZWQgPSByZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbltpKytdO1xuICAgICAgdHJ5IHtcbiAgICAgICAgbmV3Q29uZmlnID0gb25GdWxmaWxsZWQobmV3Q29uZmlnKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIG9uUmVqZWN0ZWQuY2FsbCh0aGlzLCBlcnJvcik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBwcm9taXNlID0gZGlzcGF0Y2hSZXF1ZXN0LmNhbGwodGhpcywgbmV3Q29uZmlnKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycm9yKTtcbiAgICB9XG5cbiAgICBpID0gMDtcbiAgICBsZW4gPSByZXNwb25zZUludGVyY2VwdG9yQ2hhaW4ubGVuZ3RoO1xuXG4gICAgd2hpbGUgKGkgPCBsZW4pIHtcbiAgICAgIHByb21pc2UgPSBwcm9taXNlLnRoZW4ocmVzcG9uc2VJbnRlcmNlcHRvckNoYWluW2krK10sIHJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbltpKytdKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcHJvbWlzZTtcbiAgfVxuXG4gIGdldFVyaShjb25maWcpIHtcbiAgICBjb25maWcgPSBtZXJnZUNvbmZpZyh0aGlzLmRlZmF1bHRzLCBjb25maWcpO1xuICAgIGNvbnN0IGZ1bGxQYXRoID0gYnVpbGRGdWxsUGF0aChjb25maWcuYmFzZVVSTCwgY29uZmlnLnVybCk7XG4gICAgcmV0dXJuIGJ1aWxkVVJMKGZ1bGxQYXRoLCBjb25maWcucGFyYW1zLCBjb25maWcucGFyYW1zU2VyaWFsaXplcik7XG4gIH1cbn1cblxuLy8gUHJvdmlkZSBhbGlhc2VzIGZvciBzdXBwb3J0ZWQgcmVxdWVzdCBtZXRob2RzXG51dGlscyQxLmZvckVhY2goWydkZWxldGUnLCAnZ2V0JywgJ2hlYWQnLCAnb3B0aW9ucyddLCBmdW5jdGlvbiBmb3JFYWNoTWV0aG9kTm9EYXRhKG1ldGhvZCkge1xuICAvKmVzbGludCBmdW5jLW5hbWVzOjAqL1xuICBBeGlvcy5wcm90b3R5cGVbbWV0aG9kXSA9IGZ1bmN0aW9uKHVybCwgY29uZmlnKSB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdChtZXJnZUNvbmZpZyhjb25maWcgfHwge30sIHtcbiAgICAgIG1ldGhvZCxcbiAgICAgIHVybCxcbiAgICAgIGRhdGE6IChjb25maWcgfHwge30pLmRhdGFcbiAgICB9KSk7XG4gIH07XG59KTtcblxudXRpbHMkMS5mb3JFYWNoKFsncG9zdCcsICdwdXQnLCAncGF0Y2gnXSwgZnVuY3Rpb24gZm9yRWFjaE1ldGhvZFdpdGhEYXRhKG1ldGhvZCkge1xuICAvKmVzbGludCBmdW5jLW5hbWVzOjAqL1xuXG4gIGZ1bmN0aW9uIGdlbmVyYXRlSFRUUE1ldGhvZChpc0Zvcm0pIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gaHR0cE1ldGhvZCh1cmwsIGRhdGEsIGNvbmZpZykge1xuICAgICAgcmV0dXJuIHRoaXMucmVxdWVzdChtZXJnZUNvbmZpZyhjb25maWcgfHwge30sIHtcbiAgICAgICAgbWV0aG9kLFxuICAgICAgICBoZWFkZXJzOiBpc0Zvcm0gPyB7XG4gICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdtdWx0aXBhcnQvZm9ybS1kYXRhJ1xuICAgICAgICB9IDoge30sXG4gICAgICAgIHVybCxcbiAgICAgICAgZGF0YVxuICAgICAgfSkpO1xuICAgIH07XG4gIH1cblxuICBBeGlvcy5wcm90b3R5cGVbbWV0aG9kXSA9IGdlbmVyYXRlSFRUUE1ldGhvZCgpO1xuXG4gIEF4aW9zLnByb3RvdHlwZVttZXRob2QgKyAnRm9ybSddID0gZ2VuZXJhdGVIVFRQTWV0aG9kKHRydWUpO1xufSk7XG5cbnZhciBBeGlvcyQxID0gQXhpb3M7XG5cbi8qKlxuICogQSBgQ2FuY2VsVG9rZW5gIGlzIGFuIG9iamVjdCB0aGF0IGNhbiBiZSB1c2VkIHRvIHJlcXVlc3QgY2FuY2VsbGF0aW9uIG9mIGFuIG9wZXJhdGlvbi5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBleGVjdXRvciBUaGUgZXhlY3V0b3IgZnVuY3Rpb24uXG4gKlxuICogQHJldHVybnMge0NhbmNlbFRva2VufVxuICovXG5jbGFzcyBDYW5jZWxUb2tlbiB7XG4gIGNvbnN0cnVjdG9yKGV4ZWN1dG9yKSB7XG4gICAgaWYgKHR5cGVvZiBleGVjdXRvciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignZXhlY3V0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uLicpO1xuICAgIH1cblxuICAgIGxldCByZXNvbHZlUHJvbWlzZTtcblxuICAgIHRoaXMucHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIHByb21pc2VFeGVjdXRvcihyZXNvbHZlKSB7XG4gICAgICByZXNvbHZlUHJvbWlzZSA9IHJlc29sdmU7XG4gICAgfSk7XG5cbiAgICBjb25zdCB0b2tlbiA9IHRoaXM7XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuICAgIHRoaXMucHJvbWlzZS50aGVuKGNhbmNlbCA9PiB7XG4gICAgICBpZiAoIXRva2VuLl9saXN0ZW5lcnMpIHJldHVybjtcblxuICAgICAgbGV0IGkgPSB0b2tlbi5fbGlzdGVuZXJzLmxlbmd0aDtcblxuICAgICAgd2hpbGUgKGktLSA+IDApIHtcbiAgICAgICAgdG9rZW4uX2xpc3RlbmVyc1tpXShjYW5jZWwpO1xuICAgICAgfVxuICAgICAgdG9rZW4uX2xpc3RlbmVycyA9IG51bGw7XG4gICAgfSk7XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuICAgIHRoaXMucHJvbWlzZS50aGVuID0gb25mdWxmaWxsZWQgPT4ge1xuICAgICAgbGV0IF9yZXNvbHZlO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgICAgIGNvbnN0IHByb21pc2UgPSBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgICAgdG9rZW4uc3Vic2NyaWJlKHJlc29sdmUpO1xuICAgICAgICBfcmVzb2x2ZSA9IHJlc29sdmU7XG4gICAgICB9KS50aGVuKG9uZnVsZmlsbGVkKTtcblxuICAgICAgcHJvbWlzZS5jYW5jZWwgPSBmdW5jdGlvbiByZWplY3QoKSB7XG4gICAgICAgIHRva2VuLnVuc3Vic2NyaWJlKF9yZXNvbHZlKTtcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiBwcm9taXNlO1xuICAgIH07XG5cbiAgICBleGVjdXRvcihmdW5jdGlvbiBjYW5jZWwobWVzc2FnZSwgY29uZmlnLCByZXF1ZXN0KSB7XG4gICAgICBpZiAodG9rZW4ucmVhc29uKSB7XG4gICAgICAgIC8vIENhbmNlbGxhdGlvbiBoYXMgYWxyZWFkeSBiZWVuIHJlcXVlc3RlZFxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRva2VuLnJlYXNvbiA9IG5ldyBDYW5jZWxlZEVycm9yKG1lc3NhZ2UsIGNvbmZpZywgcmVxdWVzdCk7XG4gICAgICByZXNvbHZlUHJvbWlzZSh0b2tlbi5yZWFzb24pO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFRocm93cyBhIGBDYW5jZWxlZEVycm9yYCBpZiBjYW5jZWxsYXRpb24gaGFzIGJlZW4gcmVxdWVzdGVkLlxuICAgKi9cbiAgdGhyb3dJZlJlcXVlc3RlZCgpIHtcbiAgICBpZiAodGhpcy5yZWFzb24pIHtcbiAgICAgIHRocm93IHRoaXMucmVhc29uO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTdWJzY3JpYmUgdG8gdGhlIGNhbmNlbCBzaWduYWxcbiAgICovXG5cbiAgc3Vic2NyaWJlKGxpc3RlbmVyKSB7XG4gICAgaWYgKHRoaXMucmVhc29uKSB7XG4gICAgICBsaXN0ZW5lcih0aGlzLnJlYXNvbik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2xpc3RlbmVycykge1xuICAgICAgdGhpcy5fbGlzdGVuZXJzLnB1c2gobGlzdGVuZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9saXN0ZW5lcnMgPSBbbGlzdGVuZXJdO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBVbnN1YnNjcmliZSBmcm9tIHRoZSBjYW5jZWwgc2lnbmFsXG4gICAqL1xuXG4gIHVuc3Vic2NyaWJlKGxpc3RlbmVyKSB7XG4gICAgaWYgKCF0aGlzLl9saXN0ZW5lcnMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgaW5kZXggPSB0aGlzLl9saXN0ZW5lcnMuaW5kZXhPZihsaXN0ZW5lcik7XG4gICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgdGhpcy5fbGlzdGVuZXJzLnNwbGljZShpbmRleCwgMSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYW4gb2JqZWN0IHRoYXQgY29udGFpbnMgYSBuZXcgYENhbmNlbFRva2VuYCBhbmQgYSBmdW5jdGlvbiB0aGF0LCB3aGVuIGNhbGxlZCxcbiAgICogY2FuY2VscyB0aGUgYENhbmNlbFRva2VuYC5cbiAgICovXG4gIHN0YXRpYyBzb3VyY2UoKSB7XG4gICAgbGV0IGNhbmNlbDtcbiAgICBjb25zdCB0b2tlbiA9IG5ldyBDYW5jZWxUb2tlbihmdW5jdGlvbiBleGVjdXRvcihjKSB7XG4gICAgICBjYW5jZWwgPSBjO1xuICAgIH0pO1xuICAgIHJldHVybiB7XG4gICAgICB0b2tlbixcbiAgICAgIGNhbmNlbFxuICAgIH07XG4gIH1cbn1cblxudmFyIENhbmNlbFRva2VuJDEgPSBDYW5jZWxUb2tlbjtcblxuLyoqXG4gKiBTeW50YWN0aWMgc3VnYXIgZm9yIGludm9raW5nIGEgZnVuY3Rpb24gYW5kIGV4cGFuZGluZyBhbiBhcnJheSBmb3IgYXJndW1lbnRzLlxuICpcbiAqIENvbW1vbiB1c2UgY2FzZSB3b3VsZCBiZSB0byB1c2UgYEZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseWAuXG4gKlxuICogIGBgYGpzXG4gKiAgZnVuY3Rpb24gZih4LCB5LCB6KSB7fVxuICogIHZhciBhcmdzID0gWzEsIDIsIDNdO1xuICogIGYuYXBwbHkobnVsbCwgYXJncyk7XG4gKiAgYGBgXG4gKlxuICogV2l0aCBgc3ByZWFkYCB0aGlzIGV4YW1wbGUgY2FuIGJlIHJlLXdyaXR0ZW4uXG4gKlxuICogIGBgYGpzXG4gKiAgc3ByZWFkKGZ1bmN0aW9uKHgsIHksIHopIHt9KShbMSwgMiwgM10pO1xuICogIGBgYFxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG4gKlxuICogQHJldHVybnMge0Z1bmN0aW9ufVxuICovXG5mdW5jdGlvbiBzcHJlYWQoY2FsbGJhY2spIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHdyYXAoYXJyKSB7XG4gICAgcmV0dXJuIGNhbGxiYWNrLmFwcGx5KG51bGwsIGFycik7XG4gIH07XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBwYXlsb2FkIGlzIGFuIGVycm9yIHRocm93biBieSBBeGlvc1xuICpcbiAqIEBwYXJhbSB7Kn0gcGF5bG9hZCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSBwYXlsb2FkIGlzIGFuIGVycm9yIHRocm93biBieSBBeGlvcywgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQXhpb3NFcnJvcihwYXlsb2FkKSB7XG4gIHJldHVybiB1dGlscyQxLmlzT2JqZWN0KHBheWxvYWQpICYmIChwYXlsb2FkLmlzQXhpb3NFcnJvciA9PT0gdHJ1ZSk7XG59XG5cbmNvbnN0IEh0dHBTdGF0dXNDb2RlID0ge1xuICBDb250aW51ZTogMTAwLFxuICBTd2l0Y2hpbmdQcm90b2NvbHM6IDEwMSxcbiAgUHJvY2Vzc2luZzogMTAyLFxuICBFYXJseUhpbnRzOiAxMDMsXG4gIE9rOiAyMDAsXG4gIENyZWF0ZWQ6IDIwMSxcbiAgQWNjZXB0ZWQ6IDIwMixcbiAgTm9uQXV0aG9yaXRhdGl2ZUluZm9ybWF0aW9uOiAyMDMsXG4gIE5vQ29udGVudDogMjA0LFxuICBSZXNldENvbnRlbnQ6IDIwNSxcbiAgUGFydGlhbENvbnRlbnQ6IDIwNixcbiAgTXVsdGlTdGF0dXM6IDIwNyxcbiAgQWxyZWFkeVJlcG9ydGVkOiAyMDgsXG4gIEltVXNlZDogMjI2LFxuICBNdWx0aXBsZUNob2ljZXM6IDMwMCxcbiAgTW92ZWRQZXJtYW5lbnRseTogMzAxLFxuICBGb3VuZDogMzAyLFxuICBTZWVPdGhlcjogMzAzLFxuICBOb3RNb2RpZmllZDogMzA0LFxuICBVc2VQcm94eTogMzA1LFxuICBVbnVzZWQ6IDMwNixcbiAgVGVtcG9yYXJ5UmVkaXJlY3Q6IDMwNyxcbiAgUGVybWFuZW50UmVkaXJlY3Q6IDMwOCxcbiAgQmFkUmVxdWVzdDogNDAwLFxuICBVbmF1dGhvcml6ZWQ6IDQwMSxcbiAgUGF5bWVudFJlcXVpcmVkOiA0MDIsXG4gIEZvcmJpZGRlbjogNDAzLFxuICBOb3RGb3VuZDogNDA0LFxuICBNZXRob2ROb3RBbGxvd2VkOiA0MDUsXG4gIE5vdEFjY2VwdGFibGU6IDQwNixcbiAgUHJveHlBdXRoZW50aWNhdGlvblJlcXVpcmVkOiA0MDcsXG4gIFJlcXVlc3RUaW1lb3V0OiA0MDgsXG4gIENvbmZsaWN0OiA0MDksXG4gIEdvbmU6IDQxMCxcbiAgTGVuZ3RoUmVxdWlyZWQ6IDQxMSxcbiAgUHJlY29uZGl0aW9uRmFpbGVkOiA0MTIsXG4gIFBheWxvYWRUb29MYXJnZTogNDEzLFxuICBVcmlUb29Mb25nOiA0MTQsXG4gIFVuc3VwcG9ydGVkTWVkaWFUeXBlOiA0MTUsXG4gIFJhbmdlTm90U2F0aXNmaWFibGU6IDQxNixcbiAgRXhwZWN0YXRpb25GYWlsZWQ6IDQxNyxcbiAgSW1BVGVhcG90OiA0MTgsXG4gIE1pc2RpcmVjdGVkUmVxdWVzdDogNDIxLFxuICBVbnByb2Nlc3NhYmxlRW50aXR5OiA0MjIsXG4gIExvY2tlZDogNDIzLFxuICBGYWlsZWREZXBlbmRlbmN5OiA0MjQsXG4gIFRvb0Vhcmx5OiA0MjUsXG4gIFVwZ3JhZGVSZXF1aXJlZDogNDI2LFxuICBQcmVjb25kaXRpb25SZXF1aXJlZDogNDI4LFxuICBUb29NYW55UmVxdWVzdHM6IDQyOSxcbiAgUmVxdWVzdEhlYWRlckZpZWxkc1Rvb0xhcmdlOiA0MzEsXG4gIFVuYXZhaWxhYmxlRm9yTGVnYWxSZWFzb25zOiA0NTEsXG4gIEludGVybmFsU2VydmVyRXJyb3I6IDUwMCxcbiAgTm90SW1wbGVtZW50ZWQ6IDUwMSxcbiAgQmFkR2F0ZXdheTogNTAyLFxuICBTZXJ2aWNlVW5hdmFpbGFibGU6IDUwMyxcbiAgR2F0ZXdheVRpbWVvdXQ6IDUwNCxcbiAgSHR0cFZlcnNpb25Ob3RTdXBwb3J0ZWQ6IDUwNSxcbiAgVmFyaWFudEFsc29OZWdvdGlhdGVzOiA1MDYsXG4gIEluc3VmZmljaWVudFN0b3JhZ2U6IDUwNyxcbiAgTG9vcERldGVjdGVkOiA1MDgsXG4gIE5vdEV4dGVuZGVkOiA1MTAsXG4gIE5ldHdvcmtBdXRoZW50aWNhdGlvblJlcXVpcmVkOiA1MTEsXG59O1xuXG5PYmplY3QuZW50cmllcyhIdHRwU3RhdHVzQ29kZSkuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gIEh0dHBTdGF0dXNDb2RlW3ZhbHVlXSA9IGtleTtcbn0pO1xuXG52YXIgSHR0cFN0YXR1c0NvZGUkMSA9IEh0dHBTdGF0dXNDb2RlO1xuXG4vKipcbiAqIENyZWF0ZSBhbiBpbnN0YW5jZSBvZiBBeGlvc1xuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBkZWZhdWx0Q29uZmlnIFRoZSBkZWZhdWx0IGNvbmZpZyBmb3IgdGhlIGluc3RhbmNlXG4gKlxuICogQHJldHVybnMge0F4aW9zfSBBIG5ldyBpbnN0YW5jZSBvZiBBeGlvc1xuICovXG5mdW5jdGlvbiBjcmVhdGVJbnN0YW5jZShkZWZhdWx0Q29uZmlnKSB7XG4gIGNvbnN0IGNvbnRleHQgPSBuZXcgQXhpb3MkMShkZWZhdWx0Q29uZmlnKTtcbiAgY29uc3QgaW5zdGFuY2UgPSBiaW5kKEF4aW9zJDEucHJvdG90eXBlLnJlcXVlc3QsIGNvbnRleHQpO1xuXG4gIC8vIENvcHkgYXhpb3MucHJvdG90eXBlIHRvIGluc3RhbmNlXG4gIHV0aWxzJDEuZXh0ZW5kKGluc3RhbmNlLCBBeGlvcyQxLnByb3RvdHlwZSwgY29udGV4dCwge2FsbE93bktleXM6IHRydWV9KTtcblxuICAvLyBDb3B5IGNvbnRleHQgdG8gaW5zdGFuY2VcbiAgdXRpbHMkMS5leHRlbmQoaW5zdGFuY2UsIGNvbnRleHQsIG51bGwsIHthbGxPd25LZXlzOiB0cnVlfSk7XG5cbiAgLy8gRmFjdG9yeSBmb3IgY3JlYXRpbmcgbmV3IGluc3RhbmNlc1xuICBpbnN0YW5jZS5jcmVhdGUgPSBmdW5jdGlvbiBjcmVhdGUoaW5zdGFuY2VDb25maWcpIHtcbiAgICByZXR1cm4gY3JlYXRlSW5zdGFuY2UobWVyZ2VDb25maWcoZGVmYXVsdENvbmZpZywgaW5zdGFuY2VDb25maWcpKTtcbiAgfTtcblxuICByZXR1cm4gaW5zdGFuY2U7XG59XG5cbi8vIENyZWF0ZSB0aGUgZGVmYXVsdCBpbnN0YW5jZSB0byBiZSBleHBvcnRlZFxuY29uc3QgYXhpb3MgPSBjcmVhdGVJbnN0YW5jZShkZWZhdWx0cyQxKTtcblxuLy8gRXhwb3NlIEF4aW9zIGNsYXNzIHRvIGFsbG93IGNsYXNzIGluaGVyaXRhbmNlXG5heGlvcy5BeGlvcyA9IEF4aW9zJDE7XG5cbi8vIEV4cG9zZSBDYW5jZWwgJiBDYW5jZWxUb2tlblxuYXhpb3MuQ2FuY2VsZWRFcnJvciA9IENhbmNlbGVkRXJyb3I7XG5heGlvcy5DYW5jZWxUb2tlbiA9IENhbmNlbFRva2VuJDE7XG5heGlvcy5pc0NhbmNlbCA9IGlzQ2FuY2VsO1xuYXhpb3MuVkVSU0lPTiA9IFZFUlNJT047XG5heGlvcy50b0Zvcm1EYXRhID0gdG9Gb3JtRGF0YTtcblxuLy8gRXhwb3NlIEF4aW9zRXJyb3IgY2xhc3NcbmF4aW9zLkF4aW9zRXJyb3IgPSBBeGlvc0Vycm9yO1xuXG4vLyBhbGlhcyBmb3IgQ2FuY2VsZWRFcnJvciBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eVxuYXhpb3MuQ2FuY2VsID0gYXhpb3MuQ2FuY2VsZWRFcnJvcjtcblxuLy8gRXhwb3NlIGFsbC9zcHJlYWRcbmF4aW9zLmFsbCA9IGZ1bmN0aW9uIGFsbChwcm9taXNlcykge1xuICByZXR1cm4gUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xufTtcblxuYXhpb3Muc3ByZWFkID0gc3ByZWFkO1xuXG4vLyBFeHBvc2UgaXNBeGlvc0Vycm9yXG5heGlvcy5pc0F4aW9zRXJyb3IgPSBpc0F4aW9zRXJyb3I7XG5cbi8vIEV4cG9zZSBtZXJnZUNvbmZpZ1xuYXhpb3MubWVyZ2VDb25maWcgPSBtZXJnZUNvbmZpZztcblxuYXhpb3MuQXhpb3NIZWFkZXJzID0gQXhpb3NIZWFkZXJzJDE7XG5cbmF4aW9zLmZvcm1Ub0pTT04gPSB0aGluZyA9PiBmb3JtRGF0YVRvSlNPTih1dGlscyQxLmlzSFRNTEZvcm0odGhpbmcpID8gbmV3IEZvcm1EYXRhKHRoaW5nKSA6IHRoaW5nKTtcblxuYXhpb3MuZ2V0QWRhcHRlciA9IGFkYXB0ZXJzLmdldEFkYXB0ZXI7XG5cbmF4aW9zLkh0dHBTdGF0dXNDb2RlID0gSHR0cFN0YXR1c0NvZGUkMTtcblxuYXhpb3MuZGVmYXVsdCA9IGF4aW9zO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGF4aW9zO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YXhpb3MuY2pzLm1hcFxuIiwiLy8gVGhlIG1vZHVsZSBjYWNoZVxudmFyIF9fd2VicGFja19tb2R1bGVfY2FjaGVfXyA9IHt9O1xuXG4vLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcblx0dmFyIGNhY2hlZE1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF07XG5cdGlmIChjYWNoZWRNb2R1bGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBjYWNoZWRNb2R1bGUuZXhwb3J0cztcblx0fVxuXHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuXHR2YXIgbW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSA9IHtcblx0XHQvLyBubyBtb2R1bGUuaWQgbmVlZGVkXG5cdFx0Ly8gbm8gbW9kdWxlLmxvYWRlZCBuZWVkZWRcblx0XHRleHBvcnRzOiB7fVxuXHR9O1xuXG5cdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuXHRfX3dlYnBhY2tfbW9kdWxlc19fW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuXHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuXHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG59XG5cbiIsIl9fd2VicGFja19yZXF1aXJlX18uZyA9IChmdW5jdGlvbigpIHtcblx0aWYgKHR5cGVvZiBnbG9iYWxUaGlzID09PSAnb2JqZWN0JykgcmV0dXJuIGdsb2JhbFRoaXM7XG5cdHRyeSB7XG5cdFx0cmV0dXJuIHRoaXMgfHwgbmV3IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHRpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ29iamVjdCcpIHJldHVybiB3aW5kb3c7XG5cdH1cbn0pKCk7IiwiLy8gc3RhcnR1cFxuLy8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4vLyBUaGlzIGVudHJ5IG1vZHVsZSBpcyByZWZlcmVuY2VkIGJ5IG90aGVyIG1vZHVsZXMgc28gaXQgY2FuJ3QgYmUgaW5saW5lZFxudmFyIF9fd2VicGFja19leHBvcnRzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMyMSk7XG4iXSwibmFtZXMiOlsicGFyYW1zIiwiaXNQdXJlT2JqZWN0IiwiRXJyb3IiLCJ0aGlzIiwiaW5pdCIsImNsb25lUGFyYW1zIiwiQ2xpZW50IiwidmVyc2lvbiIsImFwaUtleSIsImFwaVNlY3JldCIsImFwaVRva2VuIiwiY29uZmlnIiwib3B0aW9ucyIsInJlc291cmNlIiwicmVxdWVzdF8xIiwiSHR0cE1ldGhvZHNfMSIsIkdldCIsIlBvc3QiLCJQdXQiLCJEZWxldGUiLCJwYWNrYWdlSlNPTiIsInNldENvbmZpZyIsInNldE9wdGlvbnMiLCJ0b2tlbkNvbm5lY3RTdHJhdGVneSIsImJhc2ljQ29ubmVjdFN0cmF0ZWd5IiwiY2xvbmVkUGFyYW1zIiwicHJveHkiLCJoZWFkZXJzIiwiY3VzdG9tQ29uZmlnIiwiX3R5cGVvZiIsInNldFZhbHVlSWZOb3ROaWwiLCJob3N0Iiwib3V0cHV0IiwiT2JqZWN0IiwiZnJlZXplIiwiX19hc3NpZ24iLCJwYWNrYWdlX2pzb25fMSIsImV4cG9ydHMiLCJpbmRleF8xIiwiaW5kZXhfMiIsIl9fZXh0ZW5kcyIsIk1haWxqZXQiLCJfX2V4cG9ydFN0YXIiLCJIdHRwTWV0aG9kcyIsIkpTT05iIiwic3RvcmVBc1N0cmluZyIsImNsaWVudCIsIm1ldGhvZCIsImNsaWVudF8xIiwidmFsdWVzIiwiaW5jbHVkZXMiLCJ1cmwiLCJ0b0xvd2VyQ2FzZSIsInN1YlBhdGgiLCJidWlsZFN1YlBhdGgiLCJhY3Rpb25QYXRoIiwiUmVxdWVzdCIsImdldFBhY2thZ2VWZXJzaW9uIiwiZ2V0QVBJVG9rZW4iLCJnZXRBUElLZXkiLCJnZXRBUElTZWNyZXQiLCJpbmRleE9mIiwiZGF0YSIsInVuZGVmaW5lZCIsImNsaWVudENvbmZpZyIsImdldENvbmZpZyIsInByb3RvY29sIiwiaXNDb250YWN0TGlzdFdpdGhDU1YiLCJpc0JhdGNoSm9iV2l0aENTViIsImlzU2VuZFJlc291cmNlIiwicmVzb3VyY2VDb250YWluU01TIiwicmVxdWVzdENvbmZpZyIsImdldFJlcXVlc3RCb2R5IiwicmVzcG9uc2VUeXBlIiwiZ2V0VXNlckFnZW50IiwiZ2V0Q29udGVudFR5cGUiLCJ0cmFuc2Zvcm1SZXNwb25zZSIsInJlc3BvbnNlRGF0YSIsImRhdGFJc1N0cmluZyIsImlzSlNPTlJlcXVlc3RlZCIsInBhcnNlVG9KU09OYiIsImlzQnJvd3NlciIsImNyZWRlbnRpYWxzIiwiZ2V0Q3JlZGVudGlhbHMiLCJhdXRoIiwidXNlcm5hbWUiLCJwYXNzd29yZCIsImNsaWVudE9wdGlvbnMiLCJnZXRPcHRpb25zIiwidGltZW91dCIsImtleXMiLCJsZW5ndGgiLCJtYXhCb2R5TGVuZ3RoIiwibWF4Q29udGVudExlbmd0aCIsImJhc2VVcmwiLCJ2YWx1ZSIsInRvU3RyaW5nIiwibmFtZSIsInBlcmZvcm1BUElDYWxsIiwiYnVpbGRGdWxsVXJsIiwic2V0QmFzZVVSTCIsImJvZHkiLCJtYWtlUmVxdWVzdCIsInJlc3BvbnNlIiwiX2ciLCJheGlvc18xIiwiZXJyb3IiLCJjb2RlIiwiZXJyXzEiLCJfZiIsInN0YXR1c18xIiwic3RhdHVzVGV4dCIsInN0YXR1c0NvZGUiLCJlcnJvck1lc3NhZ2UiLCJFcnJvck1lc3NhZ2UiLCJtZXNzYWdlIiwib3JpZ2luYWxNZXNzYWdlIiwiZnVsbE1lc3NhZ2UiLCJNZXNzYWdlcyIsIkVycm9ycyIsIkVycm9yQ29kZSIsIkVycm9ySWRlbnRpZmllciIsIkVycm9yUmVsYXRlZFRvIiwidGV4dCIsInBhcnNlIiwiZSIsIndpbmRvdyIsIkRyYWZ0Q2FtcGFpZ24iLCJFZGl0TW9kZSIsIkNhbXBhaWduRHJhZnRTdGF0dXMiLCJDYW1wYWlnbkRyYWZ0U2VuZGluZ1N0YXR1cyIsIlNlbnRDYW1wYWlnbiIsIkNhbXBhaWduVHlwZSIsIkNvbW1vbiIsIlBlcmlvZCIsIkJ1bGtDb250YWN0TWFuYWdlbWVudCIsIk1hbmFnZUNvbnRhY3RzQWN0aW9uIiwiSW1wb3J0TGlzdEFjdGlvbiIsIkltcG9ydENTVk1ldGhvZCIsIkNTVkltcG9ydFN0YXR1cyIsIkpvYlN0YXR1cyIsIkNvbnRhY3RQcm9wZXJ0aWVzIiwiRGF0YVR5cGUiLCJOYW1lU3BhY2UiLCJNZXNzYWdlIiwiTWVzc2FnZVN0YXRlIiwiRnJvbVR5cGUiLCJNZXNzYWdlU3RhdHVzIiwiQ3VycmVudE1lc3NhZ2VTdGF0dXMiLCJFdmVudFR5cGUiLCJTZWdtZW50YXRpb24iLCJTZWdtZW50U3RhdHVzIiwiU2VuZEVtYWlsVjNfMSIsIlRyYWNrT3BlbnMiLCJUcmFja0NsaWNrcyIsIlJlc3BvbnNlU3RhdHVzIiwiU2VuZGVyIiwiRW1haWxUeXBlIiwiU2VuZGVyU3RhdHVzIiwiRE5TIiwiREtJTUNvbmZpZ3VyYXRpb25DaGVja1N0YXR1cyIsIkRLSU1Db25maWd1cmF0aW9uU3RhdHVzIiwiU1BGQ29uZmlndXJhdGlvbkNoZWNrU3RhdHVzIiwiU1BGQ29uZmlndXJhdGlvblN0YXR1cyIsIkFQSUtleUNvbmZpZ3VyYXRpb24iLCJSdW5MZXZlbCIsIlN0YXRpc3RpYyIsIkNhbXBhaWduT3ZlcnZpZXdJRFR5cGUiLCJDYW1wYWlnbk92ZXJ2aWV3RWRpdE1vZGUiLCJDYW1wYWlnbk92ZXJ2aWV3RWRpdFR5cGUiLCJDb3VudGVyU291cmNlIiwiQ291bnRlclJlc29sdXRpb24iLCJDb3VudGVyVGltaW5nIiwiRW1haWxFdmVudCIsIlRlbXBsYXRlIiwiQ2F0ZWdvcmllcyIsIkNhdGVnb3JpZXNTZWxlY3Rpb25NZXRob2QiLCJPd25lclR5cGUiLCJQdXJwb3NlcyIsIlB1cnBvc2VzU2VsZWN0aW9uTWV0aG9kIiwiV2ViaG9vayIsIkV2ZW50VHlwZVZhbHVlIiwiU3RhdHVzIiwiZW51bWVyYWJsZSIsImdldCIsImlzTmlsXzEiLCJpc051bGxfMSIsImlzVW5kZWZpbmVkXzEiLCJpc1B1cmVPYmplY3RfMSIsInNldFZhbHVlSWZOb3ROaWxfMSIsImdldFByb3RvdHlwZU9mIiwicHJvdG90eXBlIiwidGFyZ2V0T2JqZWN0IiwicGF0aCIsImdsb2JhbE9iamVjdCIsIkJpZ051bWJlciIsImlzTnVtZXJpYyIsIm1hdGhjZWlsIiwiTWF0aCIsImNlaWwiLCJtYXRoZmxvb3IiLCJmbG9vciIsImJpZ251bWJlckVycm9yIiwidG9vTWFueURpZ2l0cyIsIkJBU0UiLCJMT0dfQkFTRSIsIk1BWF9TQUZFX0lOVEVHRVIiLCJQT1dTX1RFTiIsIlNRUlRfQkFTRSIsIk1BWCIsImJpdEZsb29yIiwibiIsImkiLCJjb2VmZlRvU3RyaW5nIiwiYSIsInMiLCJ6IiwiaiIsInIiLCJjaGFyQ29kZUF0Iiwic2xpY2UiLCJjb21wYXJlIiwieCIsInkiLCJiIiwieGMiLCJjIiwieWMiLCJrIiwibCIsImludENoZWNrIiwibWluIiwibWF4IiwiU3RyaW5nIiwiaXNPZGQiLCJ0b0V4cG9uZW50aWFsIiwic3RyIiwiY2hhckF0IiwidG9GaXhlZFBvaW50IiwibGVuIiwienMiLCJjbG9uZSIsImNvbmZpZ09iamVjdCIsImRpdiIsImNvbnZlcnRCYXNlIiwicGFyc2VOdW1lcmljIiwicG93Ml81MyIsInJhbmRvbTUzYml0SW50IiwiYmFzZVByZWZpeCIsImRvdEFmdGVyIiwiZG90QmVmb3JlIiwiaXNJbmZpbml0eU9yTmFOIiwid2hpdGVzcGFjZU9yUGx1cyIsIlAiLCJjb25zdHJ1Y3RvciIsInZhbHVlT2YiLCJPTkUiLCJERUNJTUFMX1BMQUNFUyIsIlJPVU5ESU5HX01PREUiLCJUT19FWFBfTkVHIiwiVE9fRVhQX1BPUyIsIk1JTl9FWFAiLCJNQVhfRVhQIiwiQ1JZUFRPIiwiTU9EVUxPX01PREUiLCJQT1dfUFJFQ0lTSU9OIiwiRk9STUFUIiwicHJlZml4IiwiZ3JvdXBTaXplIiwic2Vjb25kYXJ5R3JvdXBTaXplIiwiZ3JvdXBTZXBhcmF0b3IiLCJkZWNpbWFsU2VwYXJhdG9yIiwiZnJhY3Rpb25Hcm91cFNpemUiLCJmcmFjdGlvbkdyb3VwU2VwYXJhdG9yIiwic3VmZml4IiwiQUxQSEFCRVQiLCJ2IiwiYWxwaGFiZXQiLCJjYXNlQ2hhbmdlZCIsImlzTnVtIiwiX2lzQmlnTnVtYmVyIiwidGVzdCIsInJlcGxhY2UiLCJzZWFyY2giLCJzdWJzdHJpbmciLCJyb3VuZCIsIkRFQlVHIiwidG9VcHBlckNhc2UiLCJwdXNoIiwiZm9ybWF0Iiwicm0iLCJpZCIsImMwIiwibmUiLCJtYXhPck1pbiIsImFyZ3MiLCJtIiwiY2FsbCIsIm5vcm1hbGlzZSIsInBvcCIsInNkIiwiZCIsIm5pIiwicmQiLCJwb3dzMTAiLCJvdXQiLCJST1VORF9VUCIsIlJPVU5EX0RPV04iLCJST1VORF9DRUlMIiwiUk9VTkRfRkxPT1IiLCJST1VORF9IQUxGX1VQIiwiUk9VTkRfSEFMRl9ET1dOIiwiUk9VTkRfSEFMRl9FVkVOIiwiUk9VTkRfSEFMRl9DRUlMIiwiUk9VTkRfSEFMRl9GTE9PUiIsIkVVQ0xJRCIsInNldCIsIm9iaiIsInAiLCJoYXNPd25Qcm9wZXJ0eSIsImNyeXB0byIsImdldFJhbmRvbVZhbHVlcyIsInJhbmRvbUJ5dGVzIiwiRVhQT05FTlRJQUxfQVQiLCJSQU5HRSIsImlzQmlnTnVtYmVyIiwibWF4aW11bSIsImFyZ3VtZW50cyIsImx0IiwibWluaW11bSIsImd0IiwicmFuZG9tIiwiZHAiLCJyYW5kIiwiVWludDMyQXJyYXkiLCJjb3B5Iiwic3BsaWNlIiwic3VtIiwicGx1cyIsImRlY2ltYWwiLCJ0b0Jhc2VPdXQiLCJiYXNlSW4iLCJiYXNlT3V0IiwiYXJyTCIsImFyciIsInJldmVyc2UiLCJzaWduIiwiY2FsbGVySXNUb1N0cmluZyIsInBvdyIsImNvbmNhdCIsIm11bHRpcGx5IiwiYmFzZSIsInRlbXAiLCJ4bG8iLCJ4aGkiLCJjYXJyeSIsImtsbyIsImtoaSIsImFMIiwiYkwiLCJjbXAiLCJzdWJ0cmFjdCIsIm1vcmUiLCJwcm9kIiwicHJvZEwiLCJxIiwicWMiLCJyZW0iLCJyZW1MIiwicmVtMCIsInhpIiwieEwiLCJ5YzAiLCJ5TCIsInl6IiwiTmFOIiwiaXNOYU4iLCJwMSIsInAyIiwiYWJzb2x1dGVWYWx1ZSIsImFicyIsImNvbXBhcmVkVG8iLCJkZWNpbWFsUGxhY2VzIiwiZGl2aWRlZEJ5IiwiZGl2aWRlZFRvSW50ZWdlckJ5IiwiaWRpdiIsImV4cG9uZW50aWF0ZWRCeSIsImhhbGYiLCJpc01vZEV4cCIsIm5Jc0JpZyIsIm5Jc05lZyIsIm5Jc09kZCIsImlzSW50ZWdlciIsIm1vZCIsInRpbWVzIiwiaW50ZWdlclZhbHVlIiwiaXNFcXVhbFRvIiwiZXEiLCJpc0Zpbml0ZSIsImlzR3JlYXRlclRoYW4iLCJpc0dyZWF0ZXJUaGFuT3JFcXVhbFRvIiwiZ3RlIiwiaXNMZXNzVGhhbiIsImlzTGVzc1RoYW5PckVxdWFsVG8iLCJsdGUiLCJpc05lZ2F0aXZlIiwiaXNQb3NpdGl2ZSIsImlzWmVybyIsIm1pbnVzIiwidCIsInhMVHkiLCJ4ZSIsInllIiwibW9kdWxvIiwibXVsdGlwbGllZEJ5IiwieGNMIiwieWNMIiwieWxvIiwieWhpIiwiemMiLCJzcXJ0QmFzZSIsIm5lZ2F0ZWQiLCJwcmVjaXNpb24iLCJzaGlmdGVkQnkiLCJzcXVhcmVSb290Iiwic3FydCIsInJlcCIsInRvRml4ZWQiLCJ0b0Zvcm1hdCIsInNwbGl0IiwiZzEiLCJnMiIsImludFBhcnQiLCJmcmFjdGlvblBhcnQiLCJpc05lZyIsImludERpZ2l0cyIsInN1YnN0ciIsIlJlZ0V4cCIsInRvRnJhY3Rpb24iLCJtZCIsImQwIiwiZDEiLCJkMiIsImV4cCIsIm4wIiwibjEiLCJ0b051bWJlciIsInRvUHJlY2lzaW9uIiwidG9KU09OIiwianNvbl9zdHJpbmdpZnkiLCJqc29uX3BhcnNlIiwibW9kdWxlIiwic3RyaW5naWZ5Iiwic3VzcGVjdFByb3RvUngiLCJzdXNwZWN0Q29uc3RydWN0b3JSeCIsIl9vcHRpb25zIiwic3RyaWN0IiwiYWx3YXlzUGFyc2VBc0JpZyIsInVzZU5hdGl2ZUJpZ0ludCIsInByb3RvQWN0aW9uIiwiY29uc3RydWN0b3JBY3Rpb24iLCJhdCIsImNoIiwiZXNjYXBlZSIsImYiLCJuZXh0IiwibnVtYmVyIiwic3RyaW5nIiwiQmlnSW50IiwiaGV4IiwidWZmZmYiLCJzdGFydEF0IiwicGFyc2VJbnQiLCJmcm9tQ2hhckNvZGUiLCJ3aGl0ZSIsImtleSIsIm9iamVjdCIsImNyZWF0ZSIsImFycmF5Iiwid29yZCIsInNvdXJjZSIsInJldml2ZXIiLCJyZXN1bHQiLCJ3YWxrIiwiaG9sZGVyIiwiZm9yRWFjaCIsIkpTT04iLCJnYXAiLCJpbmRlbnQiLCJlc2NhcGFibGUiLCJtZXRhIiwicXVvdGUiLCJsYXN0SW5kZXgiLCJwYXJ0aWFsIiwibWluZCIsImFwcGx5Iiwiam9pbiIsInJlcGxhY2VyIiwic3BhY2UiLCJub3JtYWxpemUiLCJzdHJBcnJheSIsInJlc3VsdEFycmF5IiwiVHlwZUVycm9yIiwibWF0Y2giLCJmaXJzdCIsInNoaWZ0IiwiY29tcG9uZW50IiwicGFydHMiLCJkZWZpbml0aW9uIiwiYmluZCIsImZuIiwidGhpc0FyZyIsImtpbmRPZiIsImNhY2hlIiwidGhpbmciLCJraW5kT2ZUZXN0IiwidHlwZSIsInR5cGVPZlRlc3QiLCJpc0FycmF5IiwiQXJyYXkiLCJpc1VuZGVmaW5lZCIsImlzQXJyYXlCdWZmZXIiLCJpc1N0cmluZyIsImlzRnVuY3Rpb24iLCJpc051bWJlciIsImlzT2JqZWN0IiwiaXNQbGFpbk9iamVjdCIsInZhbCIsIlN5bWJvbCIsInRvU3RyaW5nVGFnIiwiaXRlcmF0b3IiLCJpc0RhdGUiLCJpc0ZpbGUiLCJpc0Jsb2IiLCJpc0ZpbGVMaXN0IiwiaXNVUkxTZWFyY2hQYXJhbXMiLCJpc1JlYWRhYmxlU3RyZWFtIiwiaXNSZXF1ZXN0IiwiaXNSZXNwb25zZSIsImlzSGVhZGVycyIsIm1hcCIsImFsbE93bktleXMiLCJnZXRPd25Qcm9wZXJ0eU5hbWVzIiwiZmluZEtleSIsIl9rZXkiLCJfZ2xvYmFsIiwiZ2xvYmFsVGhpcyIsInNlbGYiLCJnIiwiaXNDb250ZXh0RGVmaW5lZCIsImNvbnRleHQiLCJpc1R5cGVkQXJyYXkiLCJUeXBlZEFycmF5IiwiVWludDhBcnJheSIsImlzSFRNTEZvcm0iLCJwcm9wIiwiaXNSZWdFeHAiLCJyZWR1Y2VEZXNjcmlwdG9ycyIsInJlZHVjZXIiLCJkZXNjcmlwdG9ycyIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJyZWR1Y2VkRGVzY3JpcHRvcnMiLCJkZXNjcmlwdG9yIiwicmV0IiwiZGVmaW5lUHJvcGVydGllcyIsIkFMUEhBIiwiRElHSVQiLCJBTFBIQV9ESUdJVCIsImlzQXN5bmNGbiIsIl9zZXRJbW1lZGlhdGUiLCJzZXRJbW1lZGlhdGVTdXBwb3J0ZWQiLCJzZXRJbW1lZGlhdGUiLCJwb3N0TWVzc2FnZVN1cHBvcnRlZCIsInBvc3RNZXNzYWdlIiwidG9rZW4iLCJjYWxsYmFja3MiLCJhZGRFdmVudExpc3RlbmVyIiwiY2IiLCJzZXRUaW1lb3V0IiwiYXNhcCIsInF1ZXVlTWljcm90YXNrIiwicHJvY2VzcyIsIm5leHRUaWNrIiwidXRpbHMkMSIsImlzQnVmZmVyIiwiaXNGb3JtRGF0YSIsImtpbmQiLCJGb3JtRGF0YSIsImFwcGVuZCIsImlzQXJyYXlCdWZmZXJWaWV3IiwiQXJyYXlCdWZmZXIiLCJpc1ZpZXciLCJidWZmZXIiLCJpc0Jvb2xlYW4iLCJpc1N0cmVhbSIsInBpcGUiLCJtZXJnZSIsImNhc2VsZXNzIiwiYXNzaWduVmFsdWUiLCJ0YXJnZXRLZXkiLCJleHRlbmQiLCJ0cmltIiwic3RyaXBCT00iLCJjb250ZW50IiwiaW5oZXJpdHMiLCJzdXBlckNvbnN0cnVjdG9yIiwicHJvcHMiLCJkZWZpbmVQcm9wZXJ0eSIsImFzc2lnbiIsInRvRmxhdE9iamVjdCIsInNvdXJjZU9iaiIsImRlc3RPYmoiLCJmaWx0ZXIiLCJwcm9wRmlsdGVyIiwibWVyZ2VkIiwiZW5kc1dpdGgiLCJzZWFyY2hTdHJpbmciLCJwb3NpdGlvbiIsInRvQXJyYXkiLCJmb3JFYWNoRW50cnkiLCJkb25lIiwicGFpciIsIm1hdGNoQWxsIiwicmVnRXhwIiwibWF0Y2hlcyIsImV4ZWMiLCJoYXNPd25Qcm9wIiwiZnJlZXplTWV0aG9kcyIsIndyaXRhYmxlIiwidG9PYmplY3RTZXQiLCJhcnJheU9yU3RyaW5nIiwiZGVsaW1pdGVyIiwiZGVmaW5lIiwidG9DYW1lbENhc2UiLCJub29wIiwidG9GaW5pdGVOdW1iZXIiLCJkZWZhdWx0VmFsdWUiLCJOdW1iZXIiLCJnbG9iYWwiLCJnZW5lcmF0ZVN0cmluZyIsInNpemUiLCJpc1NwZWNDb21wbGlhbnRGb3JtIiwidG9KU09OT2JqZWN0Iiwic3RhY2siLCJ2aXNpdCIsInRhcmdldCIsInJlZHVjZWRWYWx1ZSIsImlzVGhlbmFibGUiLCJ0aGVuIiwiY2F0Y2giLCJBeGlvc0Vycm9yIiwicmVxdWVzdCIsImNhcHR1cmVTdGFja1RyYWNlIiwiZGVzY3JpcHRpb24iLCJmaWxlTmFtZSIsImxpbmVOdW1iZXIiLCJjb2x1bW5OdW1iZXIiLCJzdGF0dXMiLCJwcm90b3R5cGUkMSIsImZyb20iLCJjdXN0b21Qcm9wcyIsImF4aW9zRXJyb3IiLCJjYXVzZSIsImlzVmlzaXRhYmxlIiwicmVtb3ZlQnJhY2tldHMiLCJyZW5kZXJLZXkiLCJkb3RzIiwicHJlZGljYXRlcyIsInRvRm9ybURhdGEiLCJmb3JtRGF0YSIsIm1ldGFUb2tlbnMiLCJpbmRleGVzIiwib3B0aW9uIiwidmlzaXRvciIsImRlZmF1bHRWaXNpdG9yIiwidXNlQmxvYiIsIkJsb2IiLCJjb252ZXJ0VmFsdWUiLCJ0b0lTT1N0cmluZyIsIkJ1ZmZlciIsInNvbWUiLCJpc0ZsYXRBcnJheSIsImVsIiwiaW5kZXgiLCJleHBvc2VkSGVscGVycyIsImJ1aWxkIiwiZW5jb2RlJDEiLCJjaGFyTWFwIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwiQXhpb3NVUkxTZWFyY2hQYXJhbXMiLCJfcGFpcnMiLCJlbmNvZGUiLCJidWlsZFVSTCIsIl9lbmNvZGUiLCJzZXJpYWxpemVGbiIsInNlcmlhbGl6ZSIsInNlcmlhbGl6ZWRQYXJhbXMiLCJoYXNobWFya0luZGV4IiwiZW5jb2RlciIsIkludGVyY2VwdG9yTWFuYWdlciQxIiwiSW50ZXJjZXB0b3JNYW5hZ2VyIiwiaGFuZGxlcnMiLCJ1c2UiLCJmdWxmaWxsZWQiLCJyZWplY3RlZCIsInN5bmNocm9ub3VzIiwicnVuV2hlbiIsImVqZWN0IiwiY2xlYXIiLCJoIiwidHJhbnNpdGlvbmFsRGVmYXVsdHMiLCJzaWxlbnRKU09OUGFyc2luZyIsImZvcmNlZEpTT05QYXJzaW5nIiwiY2xhcmlmeVRpbWVvdXRFcnJvciIsInBsYXRmb3JtJDEiLCJjbGFzc2VzIiwiVVJMU2VhcmNoUGFyYW1zIiwicHJvdG9jb2xzIiwiaGFzQnJvd3NlckVudiIsImRvY3VtZW50IiwiaGFzU3RhbmRhcmRCcm93c2VyRW52IiwicHJvZHVjdCIsIm5hdmlnYXRvciIsImhhc1N0YW5kYXJkQnJvd3NlcldlYldvcmtlckVudiIsIldvcmtlckdsb2JhbFNjb3BlIiwiaW1wb3J0U2NyaXB0cyIsIm9yaWdpbiIsImxvY2F0aW9uIiwiaHJlZiIsInBsYXRmb3JtIiwiX19wcm90b19fIiwiZm9ybURhdGFUb0pTT04iLCJidWlsZFBhdGgiLCJpc051bWVyaWNLZXkiLCJpc0xhc3QiLCJhcnJheVRvT2JqZWN0IiwiZW50cmllcyIsInBhcnNlUHJvcFBhdGgiLCJkZWZhdWx0cyIsInRyYW5zaXRpb25hbCIsImFkYXB0ZXIiLCJ0cmFuc2Zvcm1SZXF1ZXN0IiwiY29udGVudFR5cGUiLCJoYXNKU09OQ29udGVudFR5cGUiLCJpc09iamVjdFBheWxvYWQiLCJzZXRDb250ZW50VHlwZSIsImhlbHBlcnMiLCJpc05vZGUiLCJ0b1VSTEVuY29kZWRGb3JtIiwiZm9ybVNlcmlhbGl6ZXIiLCJfRm9ybURhdGEiLCJlbnYiLCJyYXdWYWx1ZSIsInBhcnNlciIsInN0cmluZ2lmeVNhZmVseSIsIkpTT05SZXF1ZXN0ZWQiLCJzdHJpY3RKU09OUGFyc2luZyIsIkVSUl9CQURfUkVTUE9OU0UiLCJ4c3JmQ29va2llTmFtZSIsInhzcmZIZWFkZXJOYW1lIiwidmFsaWRhdGVTdGF0dXMiLCJjb21tb24iLCJkZWZhdWx0cyQxIiwiaWdub3JlRHVwbGljYXRlT2YiLCIkaW50ZXJuYWxzIiwibm9ybWFsaXplSGVhZGVyIiwiaGVhZGVyIiwibm9ybWFsaXplVmFsdWUiLCJtYXRjaEhlYWRlclZhbHVlIiwiaXNIZWFkZXJOYW1lRmlsdGVyIiwiQXhpb3NIZWFkZXJzIiwidmFsdWVPclJld3JpdGUiLCJyZXdyaXRlIiwic2V0SGVhZGVyIiwiX3ZhbHVlIiwiX2hlYWRlciIsIl9yZXdyaXRlIiwibEhlYWRlciIsInNldEhlYWRlcnMiLCJyYXdIZWFkZXJzIiwicGFyc2VkIiwibGluZSIsInBhcnNlSGVhZGVycyIsInRva2VucyIsInRva2Vuc1JFIiwicGFyc2VUb2tlbnMiLCJoYXMiLCJtYXRjaGVyIiwiZGVsZXRlIiwiZGVsZXRlZCIsImRlbGV0ZUhlYWRlciIsIm5vcm1hbGl6ZWQiLCJ3IiwiY2hhciIsImZvcm1hdEhlYWRlciIsInRhcmdldHMiLCJhc1N0cmluZ3MiLCJzdGF0aWMiLCJjb21wdXRlZCIsImFjY2Vzc29ycyIsImRlZmluZUFjY2Vzc29yIiwiYWNjZXNzb3JOYW1lIiwibWV0aG9kTmFtZSIsImFyZzEiLCJhcmcyIiwiYXJnMyIsImNvbmZpZ3VyYWJsZSIsImJ1aWxkQWNjZXNzb3JzIiwiYWNjZXNzb3IiLCJtYXBwZWQiLCJoZWFkZXJWYWx1ZSIsIkF4aW9zSGVhZGVycyQxIiwidHJhbnNmb3JtRGF0YSIsImZucyIsImlzQ2FuY2VsIiwiX19DQU5DRUxfXyIsIkNhbmNlbGVkRXJyb3IiLCJFUlJfQ0FOQ0VMRUQiLCJzZXR0bGUiLCJyZXNvbHZlIiwicmVqZWN0IiwiRVJSX0JBRF9SRVFVRVNUIiwicHJvZ3Jlc3NFdmVudFJlZHVjZXIiLCJsaXN0ZW5lciIsImlzRG93bmxvYWRTdHJlYW0iLCJmcmVxIiwiYnl0ZXNOb3RpZmllZCIsIl9zcGVlZG9tZXRlciIsInNhbXBsZXNDb3VudCIsImJ5dGVzIiwidGltZXN0YW1wcyIsImZpcnN0U2FtcGxlVFMiLCJoZWFkIiwidGFpbCIsImNodW5rTGVuZ3RoIiwibm93IiwiRGF0ZSIsInN0YXJ0ZWRBdCIsImJ5dGVzQ291bnQiLCJwYXNzZWQiLCJzcGVlZG9tZXRlciIsImxhc3RBcmdzIiwidGltZXIiLCJ0aW1lc3RhbXAiLCJ0aHJlc2hvbGQiLCJpbnZva2UiLCJjbGVhclRpbWVvdXQiLCJ0aHJvdHRsZSIsImxvYWRlZCIsInRvdGFsIiwibGVuZ3RoQ29tcHV0YWJsZSIsInByb2dyZXNzQnl0ZXMiLCJyYXRlIiwicHJvZ3Jlc3MiLCJlc3RpbWF0ZWQiLCJldmVudCIsInByb2dyZXNzRXZlbnREZWNvcmF0b3IiLCJ0aHJvdHRsZWQiLCJhc3luY0RlY29yYXRvciIsImlzVVJMU2FtZU9yaWdpbiIsIm1zaWUiLCJ1c2VyQWdlbnQiLCJ1cmxQYXJzaW5nTm9kZSIsImNyZWF0ZUVsZW1lbnQiLCJvcmlnaW5VUkwiLCJyZXNvbHZlVVJMIiwic2V0QXR0cmlidXRlIiwiaGFzaCIsImhvc3RuYW1lIiwicG9ydCIsInBhdGhuYW1lIiwicmVxdWVzdFVSTCIsImNvb2tpZXMiLCJ3cml0ZSIsImV4cGlyZXMiLCJkb21haW4iLCJzZWN1cmUiLCJjb29raWUiLCJ0b0dNVFN0cmluZyIsInJlYWQiLCJkZWNvZGVVUklDb21wb25lbnQiLCJyZW1vdmUiLCJidWlsZEZ1bGxQYXRoIiwiYmFzZVVSTCIsInJlcXVlc3RlZFVSTCIsInJlbGF0aXZlVVJMIiwiY29tYmluZVVSTHMiLCJoZWFkZXJzVG9PYmplY3QiLCJtZXJnZUNvbmZpZyIsImNvbmZpZzEiLCJjb25maWcyIiwiZ2V0TWVyZ2VkVmFsdWUiLCJtZXJnZURlZXBQcm9wZXJ0aWVzIiwidmFsdWVGcm9tQ29uZmlnMiIsImRlZmF1bHRUb0NvbmZpZzIiLCJtZXJnZURpcmVjdEtleXMiLCJtZXJnZU1hcCIsInBhcmFtc1NlcmlhbGl6ZXIiLCJ0aW1lb3V0TWVzc2FnZSIsIndpdGhDcmVkZW50aWFscyIsIndpdGhYU1JGVG9rZW4iLCJvblVwbG9hZFByb2dyZXNzIiwib25Eb3dubG9hZFByb2dyZXNzIiwiZGVjb21wcmVzcyIsImJlZm9yZVJlZGlyZWN0IiwidHJhbnNwb3J0IiwiaHR0cEFnZW50IiwiaHR0cHNBZ2VudCIsImNhbmNlbFRva2VuIiwic29ja2V0UGF0aCIsInJlc3BvbnNlRW5jb2RpbmciLCJjb25maWdWYWx1ZSIsInJlc29sdmVDb25maWciLCJuZXdDb25maWciLCJidG9hIiwidW5lc2NhcGUiLCJCb29sZWFuIiwieHNyZlZhbHVlIiwieGhyQWRhcHRlciIsIlhNTEh0dHBSZXF1ZXN0IiwiUHJvbWlzZSIsIl9jb25maWciLCJyZXF1ZXN0RGF0YSIsInJlcXVlc3RIZWFkZXJzIiwib25DYW5jZWxlZCIsInVwbG9hZFRocm90dGxlZCIsImRvd25sb2FkVGhyb3R0bGVkIiwiZmx1c2hVcGxvYWQiLCJmbHVzaERvd25sb2FkIiwidW5zdWJzY3JpYmUiLCJzaWduYWwiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwib25sb2FkZW5kIiwicmVzcG9uc2VIZWFkZXJzIiwiZ2V0QWxsUmVzcG9uc2VIZWFkZXJzIiwiZXJyIiwicmVzcG9uc2VUZXh0Iiwib3BlbiIsIm9ucmVhZHlzdGF0ZWNoYW5nZSIsInJlYWR5U3RhdGUiLCJyZXNwb25zZVVSTCIsIm9uYWJvcnQiLCJFQ09OTkFCT1JURUQiLCJvbmVycm9yIiwiRVJSX05FVFdPUksiLCJvbnRpbWVvdXQiLCJ0aW1lb3V0RXJyb3JNZXNzYWdlIiwiRVRJTUVET1VUIiwic2V0UmVxdWVzdEhlYWRlciIsInVwbG9hZCIsImNhbmNlbCIsImFib3J0Iiwic3Vic2NyaWJlIiwiYWJvcnRlZCIsInBhcnNlUHJvdG9jb2wiLCJzZW5kIiwiY29tcG9zZVNpZ25hbHMkMSIsInNpZ25hbHMiLCJjb250cm9sbGVyIiwiQWJvcnRDb250cm9sbGVyIiwicmVhc29uIiwic3RyZWFtQ2h1bmsiLCJjaHVuayIsImNodW5rU2l6ZSIsImJ5dGVMZW5ndGgiLCJlbmQiLCJwb3MiLCJ0cmFja1N0cmVhbSIsInN0cmVhbSIsIm9uUHJvZ3Jlc3MiLCJvbkZpbmlzaCIsImFzeW5jIiwiaXRlcmFibGUiLCJyZWFkQnl0ZXMiLCJfb25GaW5pc2giLCJSZWFkYWJsZVN0cmVhbSIsImNsb3NlIiwibG9hZGVkQnl0ZXMiLCJlbnF1ZXVlIiwicmV0dXJuIiwiaGlnaFdhdGVyTWFyayIsImlzRmV0Y2hTdXBwb3J0ZWQiLCJmZXRjaCIsIlJlc3BvbnNlIiwiaXNSZWFkYWJsZVN0cmVhbVN1cHBvcnRlZCIsImVuY29kZVRleHQiLCJUZXh0RW5jb2RlciIsImFycmF5QnVmZmVyIiwic3VwcG9ydHNSZXF1ZXN0U3RyZWFtIiwiZHVwbGV4QWNjZXNzZWQiLCJoYXNDb250ZW50VHlwZSIsImR1cGxleCIsInN1cHBvcnRzUmVzcG9uc2VTdHJlYW0iLCJyZXNvbHZlcnMiLCJyZXMiLCJfIiwiRVJSX05PVF9TVVBQT1JUIiwicmVzb2x2ZUJvZHlMZW5ndGgiLCJnZXRDb250ZW50TGVuZ3RoIiwiZ2V0Qm9keUxlbmd0aCIsImtub3duQWRhcHRlcnMiLCJodHRwIiwieGhyIiwiZmV0Y2hPcHRpb25zIiwiZmluaXNoZWQiLCJjb21wb3NlZFNpZ25hbCIsInN0b3BUaW1lb3V0IiwicmVxdWVzdENvbnRlbnRMZW5ndGgiLCJjb250ZW50VHlwZUhlYWRlciIsIl9yZXF1ZXN0IiwiZmx1c2giLCJpc1N0cmVhbVJlc3BvbnNlIiwicmVzcG9uc2VDb250ZW50TGVuZ3RoIiwicmVuZGVyUmVhc29uIiwiaXNSZXNvbHZlZEhhbmRsZSIsImFkYXB0ZXJzIiwibmFtZU9yQWRhcHRlciIsInJlamVjdGVkUmVhc29ucyIsInJlYXNvbnMiLCJzdGF0ZSIsInRocm93SWZDYW5jZWxsYXRpb25SZXF1ZXN0ZWQiLCJ0aHJvd0lmUmVxdWVzdGVkIiwiZGlzcGF0Y2hSZXF1ZXN0IiwiVkVSU0lPTiIsInZhbGlkYXRvcnMkMSIsImRlcHJlY2F0ZWRXYXJuaW5ncyIsInZhbGlkYXRvciIsImZvcm1hdE1lc3NhZ2UiLCJvcHQiLCJkZXNjIiwib3B0cyIsIkVSUl9ERVBSRUNBVEVEIiwiY29uc29sZSIsIndhcm4iLCJhc3NlcnRPcHRpb25zIiwic2NoZW1hIiwiYWxsb3dVbmtub3duIiwiRVJSX0JBRF9PUFRJT05fVkFMVUUiLCJFUlJfQkFEX09QVElPTiIsInZhbGlkYXRvcnMiLCJBeGlvcyIsImluc3RhbmNlQ29uZmlnIiwiaW50ZXJjZXB0b3JzIiwiY29uZmlnT3JVcmwiLCJkdW1teSIsImJvb2xlYW4iLCJmdW5jdGlvbiIsImNvbnRleHRIZWFkZXJzIiwicmVxdWVzdEludGVyY2VwdG9yQ2hhaW4iLCJzeW5jaHJvbm91c1JlcXVlc3RJbnRlcmNlcHRvcnMiLCJpbnRlcmNlcHRvciIsInVuc2hpZnQiLCJyZXNwb25zZUludGVyY2VwdG9yQ2hhaW4iLCJwcm9taXNlIiwiY2hhaW4iLCJvbkZ1bGZpbGxlZCIsIm9uUmVqZWN0ZWQiLCJnZXRVcmkiLCJnZW5lcmF0ZUhUVFBNZXRob2QiLCJpc0Zvcm0iLCJBeGlvcyQxIiwiQ2FuY2VsVG9rZW4iLCJleGVjdXRvciIsInJlc29sdmVQcm9taXNlIiwiX2xpc3RlbmVycyIsIm9uZnVsZmlsbGVkIiwiX3Jlc29sdmUiLCJDYW5jZWxUb2tlbiQxIiwiSHR0cFN0YXR1c0NvZGUiLCJDb250aW51ZSIsIlN3aXRjaGluZ1Byb3RvY29scyIsIlByb2Nlc3NpbmciLCJFYXJseUhpbnRzIiwiT2siLCJDcmVhdGVkIiwiQWNjZXB0ZWQiLCJOb25BdXRob3JpdGF0aXZlSW5mb3JtYXRpb24iLCJOb0NvbnRlbnQiLCJSZXNldENvbnRlbnQiLCJQYXJ0aWFsQ29udGVudCIsIk11bHRpU3RhdHVzIiwiQWxyZWFkeVJlcG9ydGVkIiwiSW1Vc2VkIiwiTXVsdGlwbGVDaG9pY2VzIiwiTW92ZWRQZXJtYW5lbnRseSIsIkZvdW5kIiwiU2VlT3RoZXIiLCJOb3RNb2RpZmllZCIsIlVzZVByb3h5IiwiVW51c2VkIiwiVGVtcG9yYXJ5UmVkaXJlY3QiLCJQZXJtYW5lbnRSZWRpcmVjdCIsIkJhZFJlcXVlc3QiLCJVbmF1dGhvcml6ZWQiLCJQYXltZW50UmVxdWlyZWQiLCJGb3JiaWRkZW4iLCJOb3RGb3VuZCIsIk1ldGhvZE5vdEFsbG93ZWQiLCJOb3RBY2NlcHRhYmxlIiwiUHJveHlBdXRoZW50aWNhdGlvblJlcXVpcmVkIiwiUmVxdWVzdFRpbWVvdXQiLCJDb25mbGljdCIsIkdvbmUiLCJMZW5ndGhSZXF1aXJlZCIsIlByZWNvbmRpdGlvbkZhaWxlZCIsIlBheWxvYWRUb29MYXJnZSIsIlVyaVRvb0xvbmciLCJVbnN1cHBvcnRlZE1lZGlhVHlwZSIsIlJhbmdlTm90U2F0aXNmaWFibGUiLCJFeHBlY3RhdGlvbkZhaWxlZCIsIkltQVRlYXBvdCIsIk1pc2RpcmVjdGVkUmVxdWVzdCIsIlVucHJvY2Vzc2FibGVFbnRpdHkiLCJMb2NrZWQiLCJGYWlsZWREZXBlbmRlbmN5IiwiVG9vRWFybHkiLCJVcGdyYWRlUmVxdWlyZWQiLCJQcmVjb25kaXRpb25SZXF1aXJlZCIsIlRvb01hbnlSZXF1ZXN0cyIsIlJlcXVlc3RIZWFkZXJGaWVsZHNUb29MYXJnZSIsIlVuYXZhaWxhYmxlRm9yTGVnYWxSZWFzb25zIiwiSW50ZXJuYWxTZXJ2ZXJFcnJvciIsIk5vdEltcGxlbWVudGVkIiwiQmFkR2F0ZXdheSIsIlNlcnZpY2VVbmF2YWlsYWJsZSIsIkdhdGV3YXlUaW1lb3V0IiwiSHR0cFZlcnNpb25Ob3RTdXBwb3J0ZWQiLCJWYXJpYW50QWxzb05lZ290aWF0ZXMiLCJJbnN1ZmZpY2llbnRTdG9yYWdlIiwiTG9vcERldGVjdGVkIiwiTm90RXh0ZW5kZWQiLCJOZXR3b3JrQXV0aGVudGljYXRpb25SZXF1aXJlZCIsIkh0dHBTdGF0dXNDb2RlJDEiLCJheGlvcyIsImNyZWF0ZUluc3RhbmNlIiwiZGVmYXVsdENvbmZpZyIsImluc3RhbmNlIiwiQ2FuY2VsIiwiYWxsIiwicHJvbWlzZXMiLCJzcHJlYWQiLCJjYWxsYmFjayIsImlzQXhpb3NFcnJvciIsInBheWxvYWQiLCJmb3JtVG9KU09OIiwiZ2V0QWRhcHRlciIsImRlZmF1bHQiLCJfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18iLCJfX3dlYnBhY2tfcmVxdWlyZV9fIiwibW9kdWxlSWQiLCJjYWNoZWRNb2R1bGUiLCJfX3dlYnBhY2tfbW9kdWxlc19fIiwiRnVuY3Rpb24iXSwic291cmNlUm9vdCI6IiJ9
|