3 lines
94 KiB
JavaScript
3 lines
94 KiB
JavaScript
var oe=Object.create;var C=Object.defineProperty;var ie=Object.getOwnPropertyDescriptor;var se=Object.getOwnPropertyNames;var ue=Object.getPrototypeOf,ae=Object.prototype.hasOwnProperty;var fe=(r,e,t)=>e in r?C(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t;var ce=(r,e)=>()=>(e||r((e={exports:{}}).exports,e),e.exports);var le=(r,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of se(e))!ae.call(r,o)&&o!==t&&C(r,o,{get:()=>e[o],enumerable:!(n=ie(e,o))||n.enumerable});return r};var he=(r,e,t)=>(t=r!=null?oe(ue(r)):{},le(e||!r||!r.__esModule?C(t,"default",{value:r,enumerable:!0}):t,r));var L=(r,e,t)=>fe(r,typeof e!="symbol"?e+"":e,t);var X=ce((qe,k)=>{"use strict";var g=typeof Reflect=="object"?Reflect:null,J=g&&typeof g.apply=="function"?g.apply:function(e,t,n){return Function.prototype.apply.call(e,t,n)},R;g&&typeof g.ownKeys=="function"?R=g.ownKeys:Object.getOwnPropertySymbols?R=function(e){return Object.getOwnPropertyNames(e).concat(Object.getOwnPropertySymbols(e))}:R=function(e){return Object.getOwnPropertyNames(e)};function ye(r){console&&console.warn&&console.warn(r)}var K=Number.isNaN||function(e){return e!==e};function u(){u.init.call(this)}k.exports=u;k.exports.once=Oe;u.EventEmitter=u;u.prototype._events=void 0;u.prototype._eventsCount=0;u.prototype._maxListeners=void 0;var H=10;function I(r){if(typeof r!="function")throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof r)}Object.defineProperty(u,"defaultMaxListeners",{enumerable:!0,get:function(){return H},set:function(r){if(typeof r!="number"||r<0||K(r))throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received '+r+".");H=r}});u.init=function(){(this._events===void 0||this._events===Object.getPrototypeOf(this)._events)&&(this._events=Object.create(null),this._eventsCount=0),this._maxListeners=this._maxListeners||void 0};u.prototype.setMaxListeners=function(e){if(typeof e!="number"||e<0||K(e))throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received '+e+".");return this._maxListeners=e,this};function B(r){return r._maxListeners===void 0?u.defaultMaxListeners:r._maxListeners}u.prototype.getMaxListeners=function(){return B(this)};u.prototype.emit=function(e){for(var t=[],n=1;n<arguments.length;n++)t.push(arguments[n]);var o=e==="error",i=this._events;if(i!==void 0)o=o&&i.error===void 0;else if(!o)return!1;if(o){var s;if(t.length>0&&(s=t[0]),s instanceof Error)throw s;var a=new Error("Unhandled error."+(s?" ("+s.message+")":""));throw a.context=s,a}var c=i[e];if(c===void 0)return!1;if(typeof c=="function")J(c,this,t);else for(var d=c.length,p=Z(c,d),n=0;n<d;++n)J(p[n],this,t);return!0};function $(r,e,t,n){var o,i,s;if(I(t),i=r._events,i===void 0?(i=r._events=Object.create(null),r._eventsCount=0):(i.newListener!==void 0&&(r.emit("newListener",e,t.listener?t.listener:t),i=r._events),s=i[e]),s===void 0)s=i[e]=t,++r._eventsCount;else if(typeof s=="function"?s=i[e]=n?[t,s]:[s,t]:n?s.unshift(t):s.push(t),o=B(r),o>0&&s.length>o&&!s.warned){s.warned=!0;var a=new Error("Possible EventEmitter memory leak detected. "+s.length+" "+String(e)+" listeners added. Use emitter.setMaxListeners() to increase limit");a.name="MaxListenersExceededWarning",a.emitter=r,a.type=e,a.count=s.length,ye(a)}return r}u.prototype.addListener=function(e,t){return $(this,e,t,!1)};u.prototype.on=u.prototype.addListener;u.prototype.prependListener=function(e,t){return $(this,e,t,!0)};function we(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,arguments.length===0?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function G(r,e,t){var n={fired:!1,wrapFn:void 0,target:r,type:e,listener:t},o=we.bind(n);return o.listener=t,n.wrapFn=o,o}u.prototype.once=function(e,t){return I(t),this.on(e,G(this,e,t)),this};u.prototype.prependOnceListener=function(e,t){return I(t),this.prependListener(e,G(this,e,t)),this};u.prototype.removeListener=function(e,t){var n,o,i,s,a;if(I(t),o=this._events,o===void 0)return this;if(n=o[e],n===void 0)return this;if(n===t||n.listener===t)--this._eventsCount===0?this._events=Object.create(null):(delete o[e],o.removeListener&&this.emit("removeListener",e,n.listener||t));else if(typeof n!="function"){for(i=-1,s=n.length-1;s>=0;s--)if(n[s]===t||n[s].listener===t){a=n[s].listener,i=s;break}if(i<0)return this;i===0?n.shift():_e(n,i),n.length===1&&(o[e]=n[0]),o.removeListener!==void 0&&this.emit("removeListener",e,a||t)}return this};u.prototype.off=u.prototype.removeListener;u.prototype.removeAllListeners=function(e){var t,n,o;if(n=this._events,n===void 0)return this;if(n.removeListener===void 0)return arguments.length===0?(this._events=Object.create(null),this._eventsCount=0):n[e]!==void 0&&(--this._eventsCount===0?this._events=Object.create(null):delete n[e]),this;if(arguments.length===0){var i=Object.keys(n),s;for(o=0;o<i.length;++o)s=i[o],s!=="removeListener"&&this.removeAllListeners(s);return this.removeAllListeners("removeListener"),this._events=Object.create(null),this._eventsCount=0,this}if(t=n[e],typeof t=="function")this.removeListener(e,t);else if(t!==void 0)for(o=t.length-1;o>=0;o--)this.removeListener(e,t[o]);return this};function q(r,e,t){var n=r._events;if(n===void 0)return[];var o=n[e];return o===void 0?[]:typeof o=="function"?t?[o.listener||o]:[o]:t?Le(o):Z(o,o.length)}u.prototype.listeners=function(e){return q(this,e,!0)};u.prototype.rawListeners=function(e){return q(this,e,!1)};u.listenerCount=function(r,e){return typeof r.listenerCount=="function"?r.listenerCount(e):Q.call(r,e)};u.prototype.listenerCount=Q;function Q(r){var e=this._events;if(e!==void 0){var t=e[r];if(typeof t=="function")return 1;if(t!==void 0)return t.length}return 0}u.prototype.eventNames=function(){return this._eventsCount>0?R(this._events):[]};function Z(r,e){for(var t=new Array(e),n=0;n<e;++n)t[n]=r[n];return t}function _e(r,e){for(;e+1<r.length;e++)r[e]=r[e+1];r.pop()}function Le(r){for(var e=new Array(r.length),t=0;t<e.length;++t)e[t]=r[t].listener||r[t];return e}function Oe(r,e){return new Promise(function(t,n){function o(s){r.removeListener(e,i),n(s)}function i(){typeof r.removeListener=="function"&&r.removeListener("error",o),t([].slice.call(arguments))}z(r,e,i,{once:!0}),e!=="error"&&be(r,o,{once:!0})})}function be(r,e,t){typeof r.on=="function"&&z(r,"error",e,t)}function z(r,e,t,n){if(typeof r.on=="function")n.once?r.once(e,t):r.on(e,t);else if(typeof r.addEventListener=="function")r.addEventListener(e,function o(i){n.once&&r.removeEventListener(e,o),t(i)});else throw new TypeError('The "emitter" argument must be of type EventEmitter. Received type '+typeof r)}});var pe={withStackTrace:!1},N=(r,e,t=pe)=>{let n=e.isOk()?{type:"Ok",value:e.value}:{type:"Err",value:e.error},o=t.withStackTrace?new Error().stack:void 0;return{data:n,message:r,stack:o}};function O(r,e,t,n){function o(i){return i instanceof t?i:new t(function(s){s(i)})}return new(t||(t=Promise))(function(i,s){function a(p){try{d(n.next(p))}catch(_){s(_)}}function c(p){try{d(n.throw(p))}catch(_){s(_)}}function d(p){p.done?i(p.value):o(p.value).then(a,c)}d((n=n.apply(r,e||[])).next())})}function F(r){var e=typeof Symbol=="function"&&Symbol.iterator,t=e&&r[e],n=0;if(t)return t.call(r);if(r&&typeof r.length=="number")return{next:function(){return r&&n>=r.length&&(r=void 0),{value:r&&r[n++],done:!r}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")}function v(r){return this instanceof v?(this.v=r,this):new v(r)}function U(r,e,t){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var n=t.apply(r,e||[]),o,i=[];return o=Object.create((typeof AsyncIterator=="function"?AsyncIterator:Object).prototype),a("next"),a("throw"),a("return",s),o[Symbol.asyncIterator]=function(){return this},o;function s(f){return function(y){return Promise.resolve(y).then(f,_)}}function a(f,y){n[f]&&(o[f]=function(A){return new Promise(function(te,ne){i.push([f,A,te,ne])>1||c(f,A)})},y&&(o[f]=y(o[f])))}function c(f,y){try{d(n[f](y))}catch(A){M(i[0][3],A)}}function d(f){f.value instanceof v?Promise.resolve(f.value.v).then(p,_):M(i[0][2],f)}function p(f){c("next",f)}function _(f){c("throw",f)}function M(f,y){f(y),i.shift(),i.length&&c(i[0][0],i[0][1])}}function me(r){var e,t;return e={},n("next"),n("throw",function(o){throw o}),n("return"),e[Symbol.iterator]=function(){return this},e;function n(o,i){e[o]=r[o]?function(s){return(t=!t)?{value:v(r[o](s)),done:!1}:i?i(s):s}:i}}function de(r){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var e=r[Symbol.asyncIterator],t;return e?e.call(r):(r=typeof F=="function"?F(r):r[Symbol.iterator](),t={},n("next"),n("throw"),n("return"),t[Symbol.asyncIterator]=function(){return this},t);function n(i){t[i]=r[i]&&function(s){return new Promise(function(a,c){s=r[i](s),o(a,c,s.done,s.value)})}}function o(i,s,a,c){Promise.resolve(c).then(function(d){i({value:d,done:a})},s)}}var h=class r{constructor(e){this._promise=e}static fromSafePromise(e){let t=e.then(n=>new m(n));return new r(t)}static fromPromise(e,t){let n=e.then(o=>new m(o)).catch(o=>new l(t(o)));return new r(n)}static fromThrowable(e,t){return(...n)=>new r(O(this,void 0,void 0,function*(){try{return new m(yield e(...n))}catch(o){return new l(t?t(o):o)}}))}static combine(e){return ve(e)}static combineWithAllErrors(e){return Ee(e)}map(e){return new r(this._promise.then(t=>O(this,void 0,void 0,function*(){return t.isErr()?new l(t.error):new m(yield e(t.value))})))}andThrough(e){return new r(this._promise.then(t=>O(this,void 0,void 0,function*(){if(t.isErr())return new l(t.error);let n=yield e(t.value);return n.isErr()?new l(n.error):new m(t.value)})))}andTee(e){return new r(this._promise.then(t=>O(this,void 0,void 0,function*(){if(t.isErr())return new l(t.error);try{yield e(t.value)}catch{}return new m(t.value)})))}mapErr(e){return new r(this._promise.then(t=>O(this,void 0,void 0,function*(){return t.isOk()?new m(t.value):new l(yield e(t.error))})))}andThen(e){return new r(this._promise.then(t=>{if(t.isErr())return new l(t.error);let n=e(t.value);return n instanceof r?n._promise:n}))}orElse(e){return new r(this._promise.then(t=>O(this,void 0,void 0,function*(){return t.isErr()?e(t.error):new m(t.value)})))}match(e,t){return this._promise.then(n=>n.match(e,t))}unwrapOr(e){return this._promise.then(t=>t.unwrapOr(e))}safeUnwrap(){return U(this,arguments,function*(){return yield v(yield v(yield*me(de(yield v(this._promise.then(t=>t.safeUnwrap()))))))})}then(e,t){return this._promise.then(e,t)}[Symbol.asyncIterator](){return U(this,arguments,function*(){let t=yield v(this._promise);return t.isErr()&&(yield yield v(D(t.error))),yield v(t.value)})}};var D=r=>new h(Promise.resolve(new l(r))),Ie=h.fromPromise,xe=h.fromSafePromise,Pe=h.fromThrowable,W=r=>{let e=w([]);for(let t of r)if(t.isErr()){e=E(t.error);break}else e.map(n=>n.push(t.value));return e},ve=r=>h.fromSafePromise(Promise.all(r)).andThen(W),j=r=>{let e=w([]);for(let t of r)t.isErr()&&e.isErr()?e.error.push(t.error):t.isErr()&&e.isOk()?e=E([t.error]):t.isOk()&&e.isOk()&&e.value.push(t.value);return e},Ee=r=>h.fromSafePromise(Promise.all(r)).andThen(j),T;(function(r){function e(o,i){return(...s)=>{try{let a=o(...s);return w(a)}catch(a){return E(i?i(a):a)}}}r.fromThrowable=e;function t(o){return W(o)}r.combine=t;function n(o){return j(o)}r.combineWithAllErrors=n})(T||(T={}));var w=r=>new m(r);function E(r){return new l(r)}var m=class{constructor(e){this.value=e}isOk(){return!0}isErr(){return!this.isOk()}map(e){return w(e(this.value))}mapErr(e){return w(this.value)}andThen(e){return e(this.value)}andThrough(e){return e(this.value).map(t=>this.value)}andTee(e){try{e(this.value)}catch{}return w(this.value)}orElse(e){return w(this.value)}asyncAndThen(e){return e(this.value)}asyncAndThrough(e){return e(this.value).map(()=>this.value)}asyncMap(e){return h.fromSafePromise(e(this.value))}unwrapOr(e){return this.value}match(e,t){return e(this.value)}safeUnwrap(){let e=this.value;return function*(){return e}()}_unsafeUnwrap(e){return this.value}_unsafeUnwrapErr(e){throw N("Called `_unsafeUnwrapErr` on an Ok",this,e)}*[Symbol.iterator](){return this.value}},l=class{constructor(e){this.error=e}isOk(){return!1}isErr(){return!this.isOk()}map(e){return E(this.error)}mapErr(e){return E(e(this.error))}andThrough(e){return E(this.error)}andTee(e){return E(this.error)}andThen(e){return E(this.error)}orElse(e){return e(this.error)}asyncAndThen(e){return D(this.error)}asyncAndThrough(e){return D(this.error)}asyncMap(e){return D(this.error)}unwrapOr(e){return e}match(e,t){return t(this.error)}safeUnwrap(){let e=this.error;return function*(){throw yield E(e),new Error("Do not use this generator out of `safeTry`")}()}_unsafeUnwrap(e){throw N("Called `_unsafeUnwrap` on an Err",this,e)}_unsafeUnwrapErr(e){return this.error}*[Symbol.iterator](){let e=this;return yield e,e}},Ce=T.fromThrowable;var b=class extends Error{constructor(t,n={}){let{cause:o,context:i}=n;super(t,{cause:o});L(this,"context");this.name=this.constructor.name,this.context=i}};var S=r=>{if(r instanceof Error)return r;let e="[Unable to stringify the thrown value]";try{e=JSON.stringify(r)}catch{}return new Error(e)};var V=he(X());var Y=new V.default;var ee=()=>{Y.once("SOCKET_OPENED",()=>{self.postMessage({event:"SOCKET_OPENED"})}),Y.once("OPERATION_FAILED",r=>{self.postMessage({event:"OPERATION_FAILED",error:r})})};var x=class extends b{};var P=class extends x{constructor(){super(...arguments);L(this,"message","Failed to remove the file")}};var re=!1;self.onmessage=r=>{re||(ee(),re=!0),De(r.data).map(()=>{self.postMessage({event:"FILE_REMOVED"})}).mapErr(e=>{self.postMessage({event:"OPERATION_FAILED",error:e})})};var De=r=>h.fromPromise(new Promise((e,t)=>{let n=r.args.lufiFile;fetch(`${new URL(n.serverUrl).href}d/${n.keys.server}/${n.actionToken}`).then(o=>o.ok?e(void 0):t(new P(void 0,{cause:S(o.statusText)})))}),e=>S(e));
|
|
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vbm9kZV9tb2R1bGVzLy5kZW5vL2V2ZW50c0AzLjMuMC9ub2RlX21vZHVsZXMvZXZlbnRzL2V2ZW50cy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmRlbm8vbmV2ZXJ0aHJvd0A4LjEuMS9ub2RlX21vZHVsZXMvbmV2ZXJ0aHJvdy9kaXN0L2luZGV4LmVzLmpzIiwgIi4uLy4uL3NyYy9lcnJvci9iYXNlLWVycm9yLnRzIiwgIi4uLy4uL3NyYy91dGlscy50cyIsICIuLi8uLi9zcmMvd29ya2VyL3NoYXJlZC50cyIsICIuLi8uLi9zcmMvZXJyb3Ivd29ya2VyL3dvcmtlci1lcnJvci50cyIsICIuLi8uLi9zcmMvZXJyb3Ivd29ya2VyL3dvcmtlci1yZW1vdmUtZmFpbGVkLWVycm9yLnRzIiwgIi4uLy4uL3NyYy93b3JrZXIvcmVtb3ZlLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgUiA9IHR5cGVvZiBSZWZsZWN0ID09PSAnb2JqZWN0JyA/IFJlZmxlY3QgOiBudWxsXG52YXIgUmVmbGVjdEFwcGx5ID0gUiAmJiB0eXBlb2YgUi5hcHBseSA9PT0gJ2Z1bmN0aW9uJ1xuICA/IFIuYXBwbHlcbiAgOiBmdW5jdGlvbiBSZWZsZWN0QXBwbHkodGFyZ2V0LCByZWNlaXZlciwgYXJncykge1xuICAgIHJldHVybiBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHkuY2FsbCh0YXJnZXQsIHJlY2VpdmVyLCBhcmdzKTtcbiAgfVxuXG52YXIgUmVmbGVjdE93bktleXNcbmlmIChSICYmIHR5cGVvZiBSLm93bktleXMgPT09ICdmdW5jdGlvbicpIHtcbiAgUmVmbGVjdE93bktleXMgPSBSLm93bktleXNcbn0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykge1xuICBSZWZsZWN0T3duS2V5cyA9IGZ1bmN0aW9uIFJlZmxlY3RPd25LZXlzKHRhcmdldCkge1xuICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0YXJnZXQpXG4gICAgICAuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHModGFyZ2V0KSk7XG4gIH07XG59IGVsc2Uge1xuICBSZWZsZWN0T3duS2V5cyA9IGZ1bmN0aW9uIFJlZmxlY3RPd25LZXlzKHRhcmdldCkge1xuICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0YXJnZXQpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBQcm9jZXNzRW1pdFdhcm5pbmcod2FybmluZykge1xuICBpZiAoY29uc29sZSAmJiBjb25zb2xlLndhcm4pIGNvbnNvbGUud2Fybih3YXJuaW5nKTtcbn1cblxudmFyIE51bWJlcklzTmFOID0gTnVtYmVyLmlzTmFOIHx8IGZ1bmN0aW9uIE51bWJlcklzTmFOKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAhPT0gdmFsdWU7XG59XG5cbmZ1bmN0aW9uIEV2ZW50RW1pdHRlcigpIHtcbiAgRXZlbnRFbWl0dGVyLmluaXQuY2FsbCh0aGlzKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gRXZlbnRFbWl0dGVyO1xubW9kdWxlLmV4cG9ydHMub25jZSA9IG9uY2U7XG5cbi8vIEJhY2t3YXJkcy1jb21wYXQgd2l0aCBub2RlIDAuMTAueFxuRXZlbnRFbWl0dGVyLkV2ZW50RW1pdHRlciA9IEV2ZW50RW1pdHRlcjtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5fZXZlbnRzID0gdW5kZWZpbmVkO1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5fZXZlbnRzQ291bnQgPSAwO1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5fbWF4TGlzdGVuZXJzID0gdW5kZWZpbmVkO1xuXG4vLyBCeSBkZWZhdWx0IEV2ZW50RW1pdHRlcnMgd2lsbCBwcmludCBhIHdhcm5pbmcgaWYgbW9yZSB0aGFuIDEwIGxpc3RlbmVycyBhcmVcbi8vIGFkZGVkIHRvIGl0LiBUaGlzIGlzIGEgdXNlZnVsIGRlZmF1bHQgd2hpY2ggaGVscHMgZmluZGluZyBtZW1vcnkgbGVha3MuXG52YXIgZGVmYXVsdE1heExpc3RlbmVycyA9IDEwO1xuXG5mdW5jdGlvbiBjaGVja0xpc3RlbmVyKGxpc3RlbmVyKSB7XG4gIGlmICh0eXBlb2YgbGlzdGVuZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJsaXN0ZW5lclwiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBGdW5jdGlvbi4gUmVjZWl2ZWQgdHlwZSAnICsgdHlwZW9mIGxpc3RlbmVyKTtcbiAgfVxufVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoRXZlbnRFbWl0dGVyLCAnZGVmYXVsdE1heExpc3RlbmVycycsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gZGVmYXVsdE1heExpc3RlbmVycztcbiAgfSxcbiAgc2V0OiBmdW5jdGlvbihhcmcpIHtcbiAgICBpZiAodHlwZW9mIGFyZyAhPT0gJ251bWJlcicgfHwgYXJnIDwgMCB8fCBOdW1iZXJJc05hTihhcmcpKSB7XG4gICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignVGhlIHZhbHVlIG9mIFwiZGVmYXVsdE1heExpc3RlbmVyc1wiIGlzIG91dCBvZiByYW5nZS4gSXQgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBudW1iZXIuIFJlY2VpdmVkICcgKyBhcmcgKyAnLicpO1xuICAgIH1cbiAgICBkZWZhdWx0TWF4TGlzdGVuZXJzID0gYXJnO1xuICB9XG59KTtcblxuRXZlbnRFbWl0dGVyLmluaXQgPSBmdW5jdGlvbigpIHtcblxuICBpZiAodGhpcy5fZXZlbnRzID09PSB1bmRlZmluZWQgfHxcbiAgICAgIHRoaXMuX2V2ZW50cyA9PT0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLl9ldmVudHMpIHtcbiAgICB0aGlzLl9ldmVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIHRoaXMuX2V2ZW50c0NvdW50ID0gMDtcbiAgfVxuXG4gIHRoaXMuX21heExpc3RlbmVycyA9IHRoaXMuX21heExpc3RlbmVycyB8fCB1bmRlZmluZWQ7XG59O1xuXG4vLyBPYnZpb3VzbHkgbm90IGFsbCBFbWl0dGVycyBzaG91bGQgYmUgbGltaXRlZCB0byAxMC4gVGhpcyBmdW5jdGlvbiBhbGxvd3Ncbi8vIHRoYXQgdG8gYmUgaW5jcmVhc2VkLiBTZXQgdG8gemVybyBmb3IgdW5saW1pdGVkLlxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5zZXRNYXhMaXN0ZW5lcnMgPSBmdW5jdGlvbiBzZXRNYXhMaXN0ZW5lcnMobikge1xuICBpZiAodHlwZW9mIG4gIT09ICdudW1iZXInIHx8IG4gPCAwIHx8IE51bWJlcklzTmFOKG4pKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSBvZiBcIm5cIiBpcyBvdXQgb2YgcmFuZ2UuIEl0IG11c3QgYmUgYSBub24tbmVnYXRpdmUgbnVtYmVyLiBSZWNlaXZlZCAnICsgbiArICcuJyk7XG4gIH1cbiAgdGhpcy5fbWF4TGlzdGVuZXJzID0gbjtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5mdW5jdGlvbiBfZ2V0TWF4TGlzdGVuZXJzKHRoYXQpIHtcbiAgaWYgKHRoYXQuX21heExpc3RlbmVycyA9PT0gdW5kZWZpbmVkKVxuICAgIHJldHVybiBFdmVudEVtaXR0ZXIuZGVmYXVsdE1heExpc3RlbmVycztcbiAgcmV0dXJuIHRoYXQuX21heExpc3RlbmVycztcbn1cblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5nZXRNYXhMaXN0ZW5lcnMgPSBmdW5jdGlvbiBnZXRNYXhMaXN0ZW5lcnMoKSB7XG4gIHJldHVybiBfZ2V0TWF4TGlzdGVuZXJzKHRoaXMpO1xufTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5lbWl0ID0gZnVuY3Rpb24gZW1pdCh0eXBlKSB7XG4gIHZhciBhcmdzID0gW107XG4gIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSBhcmdzLnB1c2goYXJndW1lbnRzW2ldKTtcbiAgdmFyIGRvRXJyb3IgPSAodHlwZSA9PT0gJ2Vycm9yJyk7XG5cbiAgdmFyIGV2ZW50cyA9IHRoaXMuX2V2ZW50cztcbiAgaWYgKGV2ZW50cyAhPT0gdW5kZWZpbmVkKVxuICAgIGRvRXJyb3IgPSAoZG9FcnJvciAmJiBldmVudHMuZXJyb3IgPT09IHVuZGVmaW5lZCk7XG4gIGVsc2UgaWYgKCFkb0Vycm9yKVxuICAgIHJldHVybiBmYWxzZTtcblxuICAvLyBJZiB0aGVyZSBpcyBubyAnZXJyb3InIGV2ZW50IGxpc3RlbmVyIHRoZW4gdGhyb3cuXG4gIGlmIChkb0Vycm9yKSB7XG4gICAgdmFyIGVyO1xuICAgIGlmIChhcmdzLmxlbmd0aCA+IDApXG4gICAgICBlciA9IGFyZ3NbMF07XG4gICAgaWYgKGVyIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgIC8vIE5vdGU6IFRoZSBjb21tZW50cyBvbiB0aGUgYHRocm93YCBsaW5lcyBhcmUgaW50ZW50aW9uYWwsIHRoZXkgc2hvd1xuICAgICAgLy8gdXAgaW4gTm9kZSdzIG91dHB1dCBpZiB0aGlzIHJlc3VsdHMgaW4gYW4gdW5oYW5kbGVkIGV4Y2VwdGlvbi5cbiAgICAgIHRocm93IGVyOyAvLyBVbmhhbmRsZWQgJ2Vycm9yJyBldmVudFxuICAgIH1cbiAgICAvLyBBdCBsZWFzdCBnaXZlIHNvbWUga2luZCBvZiBjb250ZXh0IHRvIHRoZSB1c2VyXG4gICAgdmFyIGVyciA9IG5ldyBFcnJvcignVW5oYW5kbGVkIGVycm9yLicgKyAoZXIgPyAnICgnICsgZXIubWVzc2FnZSArICcpJyA6ICcnKSk7XG4gICAgZXJyLmNvbnRleHQgPSBlcjtcbiAgICB0aHJvdyBlcnI7IC8vIFVuaGFuZGxlZCAnZXJyb3InIGV2ZW50XG4gIH1cblxuICB2YXIgaGFuZGxlciA9IGV2ZW50c1t0eXBlXTtcblxuICBpZiAoaGFuZGxlciA9PT0gdW5kZWZpbmVkKVxuICAgIHJldHVybiBmYWxzZTtcblxuICBpZiAodHlwZW9mIGhhbmRsZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICBSZWZsZWN0QXBwbHkoaGFuZGxlciwgdGhpcywgYXJncyk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGxlbiA9IGhhbmRsZXIubGVuZ3RoO1xuICAgIHZhciBsaXN0ZW5lcnMgPSBhcnJheUNsb25lKGhhbmRsZXIsIGxlbik7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSlcbiAgICAgIFJlZmxlY3RBcHBseShsaXN0ZW5lcnNbaV0sIHRoaXMsIGFyZ3MpO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59O1xuXG5mdW5jdGlvbiBfYWRkTGlzdGVuZXIodGFyZ2V0LCB0eXBlLCBsaXN0ZW5lciwgcHJlcGVuZCkge1xuICB2YXIgbTtcbiAgdmFyIGV2ZW50cztcbiAgdmFyIGV4aXN0aW5nO1xuXG4gIGNoZWNrTGlzdGVuZXIobGlzdGVuZXIpO1xuXG4gIGV2ZW50cyA9IHRhcmdldC5fZXZlbnRzO1xuICBpZiAoZXZlbnRzID09PSB1bmRlZmluZWQpIHtcbiAgICBldmVudHMgPSB0YXJnZXQuX2V2ZW50cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgdGFyZ2V0Ll9ldmVudHNDb3VudCA9IDA7XG4gIH0gZWxzZSB7XG4gICAgLy8gVG8gYXZvaWQgcmVjdXJzaW9uIGluIHRoZSBjYXNlIHRoYXQgdHlwZSA9PT0gXCJuZXdMaXN0ZW5lclwiISBCZWZvcmVcbiAgICAvLyBhZGRpbmcgaXQgdG8gdGhlIGxpc3RlbmVycywgZmlyc3QgZW1pdCBcIm5ld0xpc3RlbmVyXCIuXG4gICAgaWYgKGV2ZW50cy5uZXdMaXN0ZW5lciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0YXJnZXQuZW1pdCgnbmV3TGlzdGVuZXInLCB0eXBlLFxuICAgICAgICAgICAgICAgICAgbGlzdGVuZXIubGlzdGVuZXIgPyBsaXN0ZW5lci5saXN0ZW5lciA6IGxpc3RlbmVyKTtcblxuICAgICAgLy8gUmUtYXNzaWduIGBldmVudHNgIGJlY2F1c2UgYSBuZXdMaXN0ZW5lciBoYW5kbGVyIGNvdWxkIGhhdmUgY2F1c2VkIHRoZVxuICAgICAgLy8gdGhpcy5fZXZlbnRzIHRvIGJlIGFzc2lnbmVkIHRvIGEgbmV3IG9iamVjdFxuICAgICAgZXZlbnRzID0gdGFyZ2V0Ll9ldmVudHM7XG4gICAgfVxuICAgIGV4aXN0aW5nID0gZXZlbnRzW3R5cGVdO1xuICB9XG5cbiAgaWYgKGV4aXN0aW5nID09PSB1bmRlZmluZWQpIHtcbiAgICAvLyBPcHRpbWl6ZSB0aGUgY2FzZSBvZiBvbmUgbGlzdGVuZXIuIERvbid0IG5lZWQgdGhlIGV4dHJhIGFycmF5IG9iamVjdC5cbiAgICBleGlzdGluZyA9IGV2ZW50c1t0eXBlXSA9IGxpc3RlbmVyO1xuICAgICsrdGFyZ2V0Ll9ldmVudHNDb3VudDtcbiAgfSBlbHNlIHtcbiAgICBpZiAodHlwZW9mIGV4aXN0aW5nID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAvLyBBZGRpbmcgdGhlIHNlY29uZCBlbGVtZW50LCBuZWVkIHRvIGNoYW5nZSB0byBhcnJheS5cbiAgICAgIGV4aXN0aW5nID0gZXZlbnRzW3R5cGVdID1cbiAgICAgICAgcHJlcGVuZCA/IFtsaXN0ZW5lciwgZXhpc3RpbmddIDogW2V4aXN0aW5nLCBsaXN0ZW5lcl07XG4gICAgICAvLyBJZiB3ZSd2ZSBhbHJlYWR5IGdvdCBhbiBhcnJheSwganVzdCBhcHBlbmQuXG4gICAgfSBlbHNlIGlmIChwcmVwZW5kKSB7XG4gICAgICBleGlzdGluZy51bnNoaWZ0KGxpc3RlbmVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZXhpc3RpbmcucHVzaChsaXN0ZW5lcik7XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgZm9yIGxpc3RlbmVyIGxlYWtcbiAgICBtID0gX2dldE1heExpc3RlbmVycyh0YXJnZXQpO1xuICAgIGlmIChtID4gMCAmJiBleGlzdGluZy5sZW5ndGggPiBtICYmICFleGlzdGluZy53YXJuZWQpIHtcbiAgICAgIGV4aXN0aW5nLndhcm5lZCA9IHRydWU7XG4gICAgICAvLyBObyBlcnJvciBjb2RlIGZvciB0aGlzIHNpbmNlIGl0IGlzIGEgV2FybmluZ1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtc3ludGF4XG4gICAgICB2YXIgdyA9IG5ldyBFcnJvcignUG9zc2libGUgRXZlbnRFbWl0dGVyIG1lbW9yeSBsZWFrIGRldGVjdGVkLiAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZXhpc3RpbmcubGVuZ3RoICsgJyAnICsgU3RyaW5nKHR5cGUpICsgJyBsaXN0ZW5lcnMgJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICdhZGRlZC4gVXNlIGVtaXR0ZXIuc2V0TWF4TGlzdGVuZXJzKCkgdG8gJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICdpbmNyZWFzZSBsaW1pdCcpO1xuICAgICAgdy5uYW1lID0gJ01heExpc3RlbmVyc0V4Y2VlZGVkV2FybmluZyc7XG4gICAgICB3LmVtaXR0ZXIgPSB0YXJnZXQ7XG4gICAgICB3LnR5cGUgPSB0eXBlO1xuICAgICAgdy5jb3VudCA9IGV4aXN0aW5nLmxlbmd0aDtcbiAgICAgIFByb2Nlc3NFbWl0V2FybmluZyh3KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGFyZ2V0O1xufVxuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmFkZExpc3RlbmVyID0gZnVuY3Rpb24gYWRkTGlzdGVuZXIodHlwZSwgbGlzdGVuZXIpIHtcbiAgcmV0dXJuIF9hZGRMaXN0ZW5lcih0aGlzLCB0eXBlLCBsaXN0ZW5lciwgZmFsc2UpO1xufTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vbiA9IEV2ZW50RW1pdHRlci5wcm90b3R5cGUuYWRkTGlzdGVuZXI7XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucHJlcGVuZExpc3RlbmVyID1cbiAgICBmdW5jdGlvbiBwcmVwZW5kTGlzdGVuZXIodHlwZSwgbGlzdGVuZXIpIHtcbiAgICAgIHJldHVybiBfYWRkTGlzdGVuZXIodGhpcywgdHlwZSwgbGlzdGVuZXIsIHRydWUpO1xuICAgIH07XG5cbmZ1bmN0aW9uIG9uY2VXcmFwcGVyKCkge1xuICBpZiAoIXRoaXMuZmlyZWQpIHtcbiAgICB0aGlzLnRhcmdldC5yZW1vdmVMaXN0ZW5lcih0aGlzLnR5cGUsIHRoaXMud3JhcEZuKTtcbiAgICB0aGlzLmZpcmVkID0gdHJ1ZTtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMClcbiAgICAgIHJldHVybiB0aGlzLmxpc3RlbmVyLmNhbGwodGhpcy50YXJnZXQpO1xuICAgIHJldHVybiB0aGlzLmxpc3RlbmVyLmFwcGx5KHRoaXMudGFyZ2V0LCBhcmd1bWVudHMpO1xuICB9XG59XG5cbmZ1bmN0aW9uIF9vbmNlV3JhcCh0YXJnZXQsIHR5cGUsIGxpc3RlbmVyKSB7XG4gIHZhciBzdGF0ZSA9IHsgZmlyZWQ6IGZhbHNlLCB3cmFwRm46IHVuZGVmaW5lZCwgdGFyZ2V0OiB0YXJnZXQsIHR5cGU6IHR5cGUsIGxpc3RlbmVyOiBsaXN0ZW5lciB9O1xuICB2YXIgd3JhcHBlZCA9IG9uY2VXcmFwcGVyLmJpbmQoc3RhdGUpO1xuICB3cmFwcGVkLmxpc3RlbmVyID0gbGlzdGVuZXI7XG4gIHN0YXRlLndyYXBGbiA9IHdyYXBwZWQ7XG4gIHJldHVybiB3cmFwcGVkO1xufVxuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLm9uY2UgPSBmdW5jdGlvbiBvbmNlKHR5cGUsIGxpc3RlbmVyKSB7XG4gIGNoZWNrTGlzdGVuZXIobGlzdGVuZXIpO1xuICB0aGlzLm9uKHR5cGUsIF9vbmNlV3JhcCh0aGlzLCB0eXBlLCBsaXN0ZW5lcikpO1xuICByZXR1cm4gdGhpcztcbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucHJlcGVuZE9uY2VMaXN0ZW5lciA9XG4gICAgZnVuY3Rpb24gcHJlcGVuZE9uY2VMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcikge1xuICAgICAgY2hlY2tMaXN0ZW5lcihsaXN0ZW5lcik7XG4gICAgICB0aGlzLnByZXBlbmRMaXN0ZW5lcih0eXBlLCBfb25jZVdyYXAodGhpcywgdHlwZSwgbGlzdGVuZXIpKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG5cbi8vIEVtaXRzIGEgJ3JlbW92ZUxpc3RlbmVyJyBldmVudCBpZiBhbmQgb25seSBpZiB0aGUgbGlzdGVuZXIgd2FzIHJlbW92ZWQuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyID1cbiAgICBmdW5jdGlvbiByZW1vdmVMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcikge1xuICAgICAgdmFyIGxpc3QsIGV2ZW50cywgcG9zaXRpb24sIGksIG9yaWdpbmFsTGlzdGVuZXI7XG5cbiAgICAgIGNoZWNrTGlzdGVuZXIobGlzdGVuZXIpO1xuXG4gICAgICBldmVudHMgPSB0aGlzLl9ldmVudHM7XG4gICAgICBpZiAoZXZlbnRzID09PSB1bmRlZmluZWQpXG4gICAgICAgIHJldHVybiB0aGlzO1xuXG4gICAgICBsaXN0ID0gZXZlbnRzW3R5cGVdO1xuICAgICAgaWYgKGxpc3QgPT09IHVuZGVmaW5lZClcbiAgICAgICAgcmV0dXJuIHRoaXM7XG5cbiAgICAgIGlmIChsaXN0ID09PSBsaXN0ZW5lciB8fCBsaXN0Lmxpc3RlbmVyID09PSBsaXN0ZW5lcikge1xuICAgICAgICBpZiAoLS10aGlzLl9ldmVudHNDb3VudCA9PT0gMClcbiAgICAgICAgICB0aGlzLl9ldmVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBkZWxldGUgZXZlbnRzW3R5cGVdO1xuICAgICAgICAgIGlmIChldmVudHMucmVtb3ZlTGlzdGVuZXIpXG4gICAgICAgICAgICB0aGlzLmVtaXQoJ3JlbW92ZUxpc3RlbmVyJywgdHlwZSwgbGlzdC5saXN0ZW5lciB8fCBsaXN0ZW5lcik7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGxpc3QgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcG9zaXRpb24gPSAtMTtcblxuICAgICAgICBmb3IgKGkgPSBsaXN0Lmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgaWYgKGxpc3RbaV0gPT09IGxpc3RlbmVyIHx8IGxpc3RbaV0ubGlzdGVuZXIgPT09IGxpc3RlbmVyKSB7XG4gICAgICAgICAgICBvcmlnaW5hbExpc3RlbmVyID0gbGlzdFtpXS5saXN0ZW5lcjtcbiAgICAgICAgICAgIHBvc2l0aW9uID0gaTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwb3NpdGlvbiA8IDApXG4gICAgICAgICAgcmV0dXJuIHRoaXM7XG5cbiAgICAgICAgaWYgKHBvc2l0aW9uID09PSAwKVxuICAgICAgICAgIGxpc3Quc2hpZnQoKTtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgc3BsaWNlT25lKGxpc3QsIHBvc2l0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChsaXN0Lmxlbmd0aCA9PT0gMSlcbiAgICAgICAgICBldmVudHNbdHlwZV0gPSBsaXN0WzBdO1xuXG4gICAgICAgIGlmIChldmVudHMucmVtb3ZlTGlzdGVuZXIgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICB0aGlzLmVtaXQoJ3JlbW92ZUxpc3RlbmVyJywgdHlwZSwgb3JpZ2luYWxMaXN0ZW5lciB8fCBsaXN0ZW5lcik7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUub2ZmID0gRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lcjtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVBbGxMaXN0ZW5lcnMgPVxuICAgIGZ1bmN0aW9uIHJlbW92ZUFsbExpc3RlbmVycyh0eXBlKSB7XG4gICAgICB2YXIgbGlzdGVuZXJzLCBldmVudHMsIGk7XG5cbiAgICAgIGV2ZW50cyA9IHRoaXMuX2V2ZW50cztcbiAgICAgIGlmIChldmVudHMgPT09IHVuZGVmaW5lZClcbiAgICAgICAgcmV0dXJuIHRoaXM7XG5cbiAgICAgIC8vIG5vdCBsaXN0ZW5pbmcgZm9yIHJlbW92ZUxpc3RlbmVyLCBubyBuZWVkIHRvIGVtaXRcbiAgICAgIGlmIChldmVudHMucmVtb3ZlTGlzdGVuZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHRoaXMuX2V2ZW50cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgICAgdGhpcy5fZXZlbnRzQ291bnQgPSAwO1xuICAgICAgICB9IGVsc2UgaWYgKGV2ZW50c1t0eXBlXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgaWYgKC0tdGhpcy5fZXZlbnRzQ291bnQgPT09IDApXG4gICAgICAgICAgICB0aGlzLl9ldmVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGRlbGV0ZSBldmVudHNbdHlwZV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9XG5cbiAgICAgIC8vIGVtaXQgcmVtb3ZlTGlzdGVuZXIgZm9yIGFsbCBsaXN0ZW5lcnMgb24gYWxsIGV2ZW50c1xuICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhldmVudHMpO1xuICAgICAgICB2YXIga2V5O1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgIGtleSA9IGtleXNbaV07XG4gICAgICAgICAgaWYgKGtleSA9PT0gJ3JlbW92ZUxpc3RlbmVyJykgY29udGludWU7XG4gICAgICAgICAgdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoa2V5KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJlbW92ZUFsbExpc3RlbmVycygncmVtb3ZlTGlzdGVuZXInKTtcbiAgICAgICAgdGhpcy5fZXZlbnRzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgdGhpcy5fZXZlbnRzQ291bnQgPSAwO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH1cblxuICAgICAgbGlzdGVuZXJzID0gZXZlbnRzW3R5cGVdO1xuXG4gICAgICBpZiAodHlwZW9mIGxpc3RlbmVycyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aGlzLnJlbW92ZUxpc3RlbmVyKHR5cGUsIGxpc3RlbmVycyk7XG4gICAgICB9IGVsc2UgaWYgKGxpc3RlbmVycyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIExJRk8gb3JkZXJcbiAgICAgICAgZm9yIChpID0gbGlzdGVuZXJzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgdGhpcy5yZW1vdmVMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcnNbaV0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG5cbmZ1bmN0aW9uIF9saXN0ZW5lcnModGFyZ2V0LCB0eXBlLCB1bndyYXApIHtcbiAgdmFyIGV2ZW50cyA9IHRhcmdldC5fZXZlbnRzO1xuXG4gIGlmIChldmVudHMgPT09IHVuZGVmaW5lZClcbiAgICByZXR1cm4gW107XG5cbiAgdmFyIGV2bGlzdGVuZXIgPSBldmVudHNbdHlwZV07XG4gIGlmIChldmxpc3RlbmVyID09PSB1bmRlZmluZWQpXG4gICAgcmV0dXJuIFtdO1xuXG4gIGlmICh0eXBlb2YgZXZsaXN0ZW5lciA9PT0gJ2Z1bmN0aW9uJylcbiAgICByZXR1cm4gdW53cmFwID8gW2V2bGlzdGVuZXIubGlzdGVuZXIgfHwgZXZsaXN0ZW5lcl0gOiBbZXZsaXN0ZW5lcl07XG5cbiAgcmV0dXJuIHVud3JhcCA/XG4gICAgdW53cmFwTGlzdGVuZXJzKGV2bGlzdGVuZXIpIDogYXJyYXlDbG9uZShldmxpc3RlbmVyLCBldmxpc3RlbmVyLmxlbmd0aCk7XG59XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUubGlzdGVuZXJzID0gZnVuY3Rpb24gbGlzdGVuZXJzKHR5cGUpIHtcbiAgcmV0dXJuIF9saXN0ZW5lcnModGhpcywgdHlwZSwgdHJ1ZSk7XG59O1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnJhd0xpc3RlbmVycyA9IGZ1bmN0aW9uIHJhd0xpc3RlbmVycyh0eXBlKSB7XG4gIHJldHVybiBfbGlzdGVuZXJzKHRoaXMsIHR5cGUsIGZhbHNlKTtcbn07XG5cbkV2ZW50RW1pdHRlci5saXN0ZW5lckNvdW50ID0gZnVuY3Rpb24oZW1pdHRlciwgdHlwZSkge1xuICBpZiAodHlwZW9mIGVtaXR0ZXIubGlzdGVuZXJDb3VudCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBlbWl0dGVyLmxpc3RlbmVyQ291bnQodHlwZSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGxpc3RlbmVyQ291bnQuY2FsbChlbWl0dGVyLCB0eXBlKTtcbiAgfVxufTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5saXN0ZW5lckNvdW50ID0gbGlzdGVuZXJDb3VudDtcbmZ1bmN0aW9uIGxpc3RlbmVyQ291bnQodHlwZSkge1xuICB2YXIgZXZlbnRzID0gdGhpcy5fZXZlbnRzO1xuXG4gIGlmIChldmVudHMgIT09IHVuZGVmaW5lZCkge1xuICAgIHZhciBldmxpc3RlbmVyID0gZXZlbnRzW3R5cGVdO1xuXG4gICAgaWYgKHR5cGVvZiBldmxpc3RlbmVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gMTtcbiAgICB9IGVsc2UgaWYgKGV2bGlzdGVuZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGV2bGlzdGVuZXIubGVuZ3RoO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiAwO1xufVxuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmV2ZW50TmFtZXMgPSBmdW5jdGlvbiBldmVudE5hbWVzKCkge1xuICByZXR1cm4gdGhpcy5fZXZlbnRzQ291bnQgPiAwID8gUmVmbGVjdE93bktleXModGhpcy5fZXZlbnRzKSA6IFtdO1xufTtcblxuZnVuY3Rpb24gYXJyYXlDbG9uZShhcnIsIG4pIHtcbiAgdmFyIGNvcHkgPSBuZXcgQXJyYXkobik7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbjsgKytpKVxuICAgIGNvcHlbaV0gPSBhcnJbaV07XG4gIHJldHVybiBjb3B5O1xufVxuXG5mdW5jdGlvbiBzcGxpY2VPbmUobGlzdCwgaW5kZXgpIHtcbiAgZm9yICg7IGluZGV4ICsgMSA8IGxpc3QubGVuZ3RoOyBpbmRleCsrKVxuICAgIGxpc3RbaW5kZXhdID0gbGlzdFtpbmRleCArIDFdO1xuICBsaXN0LnBvcCgpO1xufVxuXG5mdW5jdGlvbiB1bndyYXBMaXN0ZW5lcnMoYXJyKSB7XG4gIHZhciByZXQgPSBuZXcgQXJyYXkoYXJyLmxlbmd0aCk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcmV0Lmxlbmd0aDsgKytpKSB7XG4gICAgcmV0W2ldID0gYXJyW2ldLmxpc3RlbmVyIHx8IGFycltpXTtcbiAgfVxuICByZXR1cm4gcmV0O1xufVxuXG5mdW5jdGlvbiBvbmNlKGVtaXR0ZXIsIG5hbWUpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICBmdW5jdGlvbiBlcnJvckxpc3RlbmVyKGVycikge1xuICAgICAgZW1pdHRlci5yZW1vdmVMaXN0ZW5lcihuYW1lLCByZXNvbHZlcik7XG4gICAgICByZWplY3QoZXJyKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZXNvbHZlcigpIHtcbiAgICAgIGlmICh0eXBlb2YgZW1pdHRlci5yZW1vdmVMaXN0ZW5lciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBlbWl0dGVyLnJlbW92ZUxpc3RlbmVyKCdlcnJvcicsIGVycm9yTGlzdGVuZXIpO1xuICAgICAgfVxuICAgICAgcmVzb2x2ZShbXS5zbGljZS5jYWxsKGFyZ3VtZW50cykpO1xuICAgIH07XG5cbiAgICBldmVudFRhcmdldEFnbm9zdGljQWRkTGlzdGVuZXIoZW1pdHRlciwgbmFtZSwgcmVzb2x2ZXIsIHsgb25jZTogdHJ1ZSB9KTtcbiAgICBpZiAobmFtZSAhPT0gJ2Vycm9yJykge1xuICAgICAgYWRkRXJyb3JIYW5kbGVySWZFdmVudEVtaXR0ZXIoZW1pdHRlciwgZXJyb3JMaXN0ZW5lciwgeyBvbmNlOiB0cnVlIH0pO1xuICAgIH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGFkZEVycm9ySGFuZGxlcklmRXZlbnRFbWl0dGVyKGVtaXR0ZXIsIGhhbmRsZXIsIGZsYWdzKSB7XG4gIGlmICh0eXBlb2YgZW1pdHRlci5vbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGV2ZW50VGFyZ2V0QWdub3N0aWNBZGRMaXN0ZW5lcihlbWl0dGVyLCAnZXJyb3InLCBoYW5kbGVyLCBmbGFncyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZXZlbnRUYXJnZXRBZ25vc3RpY0FkZExpc3RlbmVyKGVtaXR0ZXIsIG5hbWUsIGxpc3RlbmVyLCBmbGFncykge1xuICBpZiAodHlwZW9mIGVtaXR0ZXIub24gPT09ICdmdW5jdGlvbicpIHtcbiAgICBpZiAoZmxhZ3Mub25jZSkge1xuICAgICAgZW1pdHRlci5vbmNlKG5hbWUsIGxpc3RlbmVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZW1pdHRlci5vbihuYW1lLCBsaXN0ZW5lcik7XG4gICAgfVxuICB9IGVsc2UgaWYgKHR5cGVvZiBlbWl0dGVyLmFkZEV2ZW50TGlzdGVuZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAvLyBFdmVudFRhcmdldCBkb2VzIG5vdCBoYXZlIGBlcnJvcmAgZXZlbnQgc2VtYW50aWNzIGxpa2UgTm9kZVxuICAgIC8vIEV2ZW50RW1pdHRlcnMsIHdlIGRvIG5vdCBsaXN0ZW4gZm9yIGBlcnJvcmAgZXZlbnRzIGhlcmUuXG4gICAgZW1pdHRlci5hZGRFdmVudExpc3RlbmVyKG5hbWUsIGZ1bmN0aW9uIHdyYXBMaXN0ZW5lcihhcmcpIHtcbiAgICAgIC8vIElFIGRvZXMgbm90IGhhdmUgYnVpbHRpbiBgeyBvbmNlOiB0cnVlIH1gIHN1cHBvcnQgc28gd2VcbiAgICAgIC8vIGhhdmUgdG8gZG8gaXQgbWFudWFsbHkuXG4gICAgICBpZiAoZmxhZ3Mub25jZSkge1xuICAgICAgICBlbWl0dGVyLnJlbW92ZUV2ZW50TGlzdGVuZXIobmFtZSwgd3JhcExpc3RlbmVyKTtcbiAgICAgIH1cbiAgICAgIGxpc3RlbmVyKGFyZyk7XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwiZW1pdHRlclwiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBFdmVudEVtaXR0ZXIuIFJlY2VpdmVkIHR5cGUgJyArIHR5cGVvZiBlbWl0dGVyKTtcbiAgfVxufVxuIiwgImNvbnN0IGRlZmF1bHRFcnJvckNvbmZpZyA9IHtcclxuICAgIHdpdGhTdGFja1RyYWNlOiBmYWxzZSxcclxufTtcclxuLy8gQ3VzdG9tIGVycm9yIG9iamVjdFxyXG4vLyBDb250ZXh0IC8gZGlzY3Vzc2lvbjogaHR0cHM6Ly9naXRodWIuY29tL3N1cGVybWFjcm8vbmV2ZXJ0aHJvdy9wdWxsLzIxNVxyXG5jb25zdCBjcmVhdGVOZXZlclRocm93RXJyb3IgPSAobWVzc2FnZSwgcmVzdWx0LCBjb25maWcgPSBkZWZhdWx0RXJyb3JDb25maWcpID0+IHtcclxuICAgIGNvbnN0IGRhdGEgPSByZXN1bHQuaXNPaygpXHJcbiAgICAgICAgPyB7IHR5cGU6ICdPaycsIHZhbHVlOiByZXN1bHQudmFsdWUgfVxyXG4gICAgICAgIDogeyB0eXBlOiAnRXJyJywgdmFsdWU6IHJlc3VsdC5lcnJvciB9O1xyXG4gICAgY29uc3QgbWF5YmVTdGFjayA9IGNvbmZpZy53aXRoU3RhY2tUcmFjZSA/IG5ldyBFcnJvcigpLnN0YWNrIDogdW5kZWZpbmVkO1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICBkYXRhLFxyXG4gICAgICAgIG1lc3NhZ2UsXHJcbiAgICAgICAgc3RhY2s6IG1heWJlU3RhY2ssXHJcbiAgICB9O1xyXG59O1xuXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcbkNvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxyXG5cclxuUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55XHJcbnB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZC5cclxuXHJcblRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEhcclxuUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZXHJcbkFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIERJUkVDVCxcclxuSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NXHJcbkxPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SXHJcbk9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1JcclxuUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS5cclxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi9cclxuLyogZ2xvYmFsIFJlZmxlY3QsIFByb21pc2UsIFN1cHByZXNzZWRFcnJvciwgU3ltYm9sLCBJdGVyYXRvciAqL1xyXG5cclxuXHJcbmZ1bmN0aW9uIF9fYXdhaXRlcih0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcclxuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxyXG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XHJcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxyXG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxyXG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XHJcbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xyXG4gICAgfSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIF9fdmFsdWVzKG8pIHtcclxuICAgIHZhciBzID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIFN5bWJvbC5pdGVyYXRvciwgbSA9IHMgJiYgb1tzXSwgaSA9IDA7XHJcbiAgICBpZiAobSkgcmV0dXJuIG0uY2FsbChvKTtcclxuICAgIGlmIChvICYmIHR5cGVvZiBvLmxlbmd0aCA9PT0gXCJudW1iZXJcIikgcmV0dXJuIHtcclxuICAgICAgICBuZXh0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGlmIChvICYmIGkgPj0gby5sZW5ndGgpIG8gPSB2b2lkIDA7XHJcbiAgICAgICAgICAgIHJldHVybiB7IHZhbHVlOiBvICYmIG9baSsrXSwgZG9uZTogIW8gfTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihzID8gXCJPYmplY3QgaXMgbm90IGl0ZXJhYmxlLlwiIDogXCJTeW1ib2wuaXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBfX2F3YWl0KHYpIHtcclxuICAgIHJldHVybiB0aGlzIGluc3RhbmNlb2YgX19hd2FpdCA/ICh0aGlzLnYgPSB2LCB0aGlzKSA6IG5ldyBfX2F3YWl0KHYpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBfX2FzeW5jR2VuZXJhdG9yKHRoaXNBcmcsIF9hcmd1bWVudHMsIGdlbmVyYXRvcikge1xyXG4gICAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcclxuICAgIHZhciBnID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pLCBpLCBxID0gW107XHJcbiAgICByZXR1cm4gaSA9IE9iamVjdC5jcmVhdGUoKHR5cGVvZiBBc3luY0l0ZXJhdG9yID09PSBcImZ1bmN0aW9uXCIgPyBBc3luY0l0ZXJhdG9yIDogT2JqZWN0KS5wcm90b3R5cGUpLCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIpLCB2ZXJiKFwicmV0dXJuXCIsIGF3YWl0UmV0dXJuKSwgaVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpO1xyXG4gICAgZnVuY3Rpb24gYXdhaXRSZXR1cm4oZikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh2KS50aGVuKGYsIHJlamVjdCk7IH07IH1cclxuICAgIGZ1bmN0aW9uIHZlcmIobiwgZikgeyBpZiAoZ1tuXSkgeyBpW25dID0gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChhLCBiKSB7IHEucHVzaChbbiwgdiwgYSwgYl0pID4gMSB8fCByZXN1bWUobiwgdik7IH0pOyB9OyBpZiAoZikgaVtuXSA9IGYoaVtuXSk7IH0gfVxyXG4gICAgZnVuY3Rpb24gcmVzdW1lKG4sIHYpIHsgdHJ5IHsgc3RlcChnW25dKHYpKTsgfSBjYXRjaCAoZSkgeyBzZXR0bGUocVswXVszXSwgZSk7IH0gfVxyXG4gICAgZnVuY3Rpb24gc3RlcChyKSB7IHIudmFsdWUgaW5zdGFuY2VvZiBfX2F3YWl0ID8gUHJvbWlzZS5yZXNvbHZlKHIudmFsdWUudikudGhlbihmdWxmaWxsLCByZWplY3QpIDogc2V0dGxlKHFbMF1bMl0sIHIpOyB9XHJcbiAgICBmdW5jdGlvbiBmdWxmaWxsKHZhbHVlKSB7IHJlc3VtZShcIm5leHRcIiwgdmFsdWUpOyB9XHJcbiAgICBmdW5jdGlvbiByZWplY3QodmFsdWUpIHsgcmVzdW1lKFwidGhyb3dcIiwgdmFsdWUpOyB9XHJcbiAgICBmdW5jdGlvbiBzZXR0bGUoZiwgdikgeyBpZiAoZih2KSwgcS5zaGlmdCgpLCBxLmxlbmd0aCkgcmVzdW1lKHFbMF1bMF0sIHFbMF1bMV0pOyB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIF9fYXN5bmNEZWxlZ2F0b3Iobykge1xyXG4gICAgdmFyIGksIHA7XHJcbiAgICByZXR1cm4gaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIsIGZ1bmN0aW9uIChlKSB7IHRocm93IGU7IH0pLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpO1xyXG4gICAgZnVuY3Rpb24gdmVyYihuLCBmKSB7IGlbbl0gPSBvW25dID8gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIChwID0gIXApID8geyB2YWx1ZTogX19hd2FpdChvW25dKHYpKSwgZG9uZTogZmFsc2UgfSA6IGYgPyBmKHYpIDogdjsgfSA6IGY7IH1cclxufVxyXG5cclxuZnVuY3Rpb24gX19hc3luY1ZhbHVlcyhvKSB7XHJcbiAgICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xyXG4gICAgdmFyIG0gPSBvW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSwgaTtcclxuICAgIHJldHVybiBtID8gbS5jYWxsKG8pIDogKG8gPSB0eXBlb2YgX192YWx1ZXMgPT09IFwiZnVuY3Rpb25cIiA/IF9fdmFsdWVzKG8pIDogb1tTeW1ib2wuaXRlcmF0b3JdKCksIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiKSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpKTtcclxuICAgIGZ1bmN0aW9uIHZlcmIobikgeyBpW25dID0gb1tuXSAmJiBmdW5jdGlvbiAodikgeyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgeyB2ID0gb1tuXSh2KSwgc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgdi5kb25lLCB2LnZhbHVlKTsgfSk7IH07IH1cclxuICAgIGZ1bmN0aW9uIHNldHRsZShyZXNvbHZlLCByZWplY3QsIGQsIHYpIHsgUHJvbWlzZS5yZXNvbHZlKHYpLnRoZW4oZnVuY3Rpb24odikgeyByZXNvbHZlKHsgdmFsdWU6IHYsIGRvbmU6IGQgfSk7IH0sIHJlamVjdCk7IH1cclxufVxyXG5cclxudHlwZW9mIFN1cHByZXNzZWRFcnJvciA9PT0gXCJmdW5jdGlvblwiID8gU3VwcHJlc3NlZEVycm9yIDogZnVuY3Rpb24gKGVycm9yLCBzdXBwcmVzc2VkLCBtZXNzYWdlKSB7XHJcbiAgICB2YXIgZSA9IG5ldyBFcnJvcihtZXNzYWdlKTtcclxuICAgIHJldHVybiBlLm5hbWUgPSBcIlN1cHByZXNzZWRFcnJvclwiLCBlLmVycm9yID0gZXJyb3IsIGUuc3VwcHJlc3NlZCA9IHN1cHByZXNzZWQsIGU7XHJcbn07XG5cbmNsYXNzIFJlc3VsdEFzeW5jIHtcclxuICAgIGNvbnN0cnVjdG9yKHJlcykge1xyXG4gICAgICAgIHRoaXMuX3Byb21pc2UgPSByZXM7XHJcbiAgICB9XHJcbiAgICBzdGF0aWMgZnJvbVNhZmVQcm9taXNlKHByb21pc2UpIHtcclxuICAgICAgICBjb25zdCBuZXdQcm9taXNlID0gcHJvbWlzZS50aGVuKCh2YWx1ZSkgPT4gbmV3IE9rKHZhbHVlKSk7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBSZXN1bHRBc3luYyhuZXdQcm9taXNlKTtcclxuICAgIH1cclxuICAgIHN0YXRpYyBmcm9tUHJvbWlzZShwcm9taXNlLCBlcnJvckZuKSB7XHJcbiAgICAgICAgY29uc3QgbmV3UHJvbWlzZSA9IHByb21pc2VcclxuICAgICAgICAgICAgLnRoZW4oKHZhbHVlKSA9PiBuZXcgT2sodmFsdWUpKVxyXG4gICAgICAgICAgICAuY2F0Y2goKGUpID0+IG5ldyBFcnIoZXJyb3JGbihlKSkpO1xyXG4gICAgICAgIHJldHVybiBuZXcgUmVzdWx0QXN5bmMobmV3UHJvbWlzZSk7XHJcbiAgICB9XHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gICAgc3RhdGljIGZyb21UaHJvd2FibGUoZm4sIGVycm9yRm4pIHtcclxuICAgICAgICByZXR1cm4gKC4uLmFyZ3MpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBSZXN1bHRBc3luYygoKCkgPT4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xyXG4gICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IE9rKHlpZWxkIGZuKC4uLmFyZ3MpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRXJyKGVycm9yRm4gPyBlcnJvckZuKGVycm9yKSA6IGVycm9yKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSkpKCkpO1xyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICBzdGF0aWMgY29tYmluZShhc3luY1Jlc3VsdExpc3QpIHtcclxuICAgICAgICByZXR1cm4gY29tYmluZVJlc3VsdEFzeW5jTGlzdChhc3luY1Jlc3VsdExpc3QpO1xyXG4gICAgfVxyXG4gICAgc3RhdGljIGNvbWJpbmVXaXRoQWxsRXJyb3JzKGFzeW5jUmVzdWx0TGlzdCkge1xyXG4gICAgICAgIHJldHVybiBjb21iaW5lUmVzdWx0QXN5bmNMaXN0V2l0aEFsbEVycm9ycyhhc3luY1Jlc3VsdExpc3QpO1xyXG4gICAgfVxyXG4gICAgbWFwKGYpIHtcclxuICAgICAgICByZXR1cm4gbmV3IFJlc3VsdEFzeW5jKHRoaXMuX3Byb21pc2UudGhlbigocmVzKSA9PiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XHJcbiAgICAgICAgICAgIGlmIChyZXMuaXNFcnIoKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBFcnIocmVzLmVycm9yKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gbmV3IE9rKHlpZWxkIGYocmVzLnZhbHVlKSk7XHJcbiAgICAgICAgfSkpKTtcclxuICAgIH1cclxuICAgIGFuZFRocm91Z2goZikge1xyXG4gICAgICAgIHJldHVybiBuZXcgUmVzdWx0QXN5bmModGhpcy5fcHJvbWlzZS50aGVuKChyZXMpID0+IF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcclxuICAgICAgICAgICAgaWYgKHJlcy5pc0VycigpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEVycihyZXMuZXJyb3IpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IG5ld1JlcyA9IHlpZWxkIGYocmVzLnZhbHVlKTtcclxuICAgICAgICAgICAgaWYgKG5ld1Jlcy5pc0VycigpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEVycihuZXdSZXMuZXJyb3IpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgT2socmVzLnZhbHVlKTtcclxuICAgICAgICB9KSkpO1xyXG4gICAgfVxyXG4gICAgYW5kVGVlKGYpIHtcclxuICAgICAgICByZXR1cm4gbmV3IFJlc3VsdEFzeW5jKHRoaXMuX3Byb21pc2UudGhlbigocmVzKSA9PiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XHJcbiAgICAgICAgICAgIGlmIChyZXMuaXNFcnIoKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBFcnIocmVzLmVycm9yKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgeWllbGQgZihyZXMudmFsdWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBUZWUgZG9lcyBub3QgY2FyZSBhYm91dCB0aGUgZXJyb3JcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gbmV3IE9rKHJlcy52YWx1ZSk7XHJcbiAgICAgICAgfSkpKTtcclxuICAgIH1cclxuICAgIG1hcEVycihmKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBSZXN1bHRBc3luYyh0aGlzLl9wcm9taXNlLnRoZW4oKHJlcykgPT4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xyXG4gICAgICAgICAgICBpZiAocmVzLmlzT2soKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBPayhyZXMudmFsdWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgRXJyKHlpZWxkIGYocmVzLmVycm9yKSk7XHJcbiAgICAgICAgfSkpKTtcclxuICAgIH1cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55LCBAdHlwZXNjcmlwdC1lc2xpbnQvZXhwbGljaXQtbW9kdWxlLWJvdW5kYXJ5LXR5cGVzXHJcbiAgICBhbmRUaGVuKGYpIHtcclxuICAgICAgICByZXR1cm4gbmV3IFJlc3VsdEFzeW5jKHRoaXMuX3Byb21pc2UudGhlbigocmVzKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChyZXMuaXNFcnIoKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBFcnIocmVzLmVycm9yKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBuZXdWYWx1ZSA9IGYocmVzLnZhbHVlKTtcclxuICAgICAgICAgICAgcmV0dXJuIG5ld1ZhbHVlIGluc3RhbmNlb2YgUmVzdWx0QXN5bmMgPyBuZXdWYWx1ZS5fcHJvbWlzZSA6IG5ld1ZhbHVlO1xyXG4gICAgICAgIH0pKTtcclxuICAgIH1cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55LCBAdHlwZXNjcmlwdC1lc2xpbnQvZXhwbGljaXQtbW9kdWxlLWJvdW5kYXJ5LXR5cGVzXHJcbiAgICBvckVsc2UoZikge1xyXG4gICAgICAgIHJldHVybiBuZXcgUmVzdWx0QXN5bmModGhpcy5fcHJvbWlzZS50aGVuKChyZXMpID0+IF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcclxuICAgICAgICAgICAgaWYgKHJlcy5pc0VycigpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZihyZXMuZXJyb3IpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgT2socmVzLnZhbHVlKTtcclxuICAgICAgICB9KSkpO1xyXG4gICAgfVxyXG4gICAgbWF0Y2gob2ssIF9lcnIpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcHJvbWlzZS50aGVuKChyZXMpID0+IHJlcy5tYXRjaChvaywgX2VycikpO1xyXG4gICAgfVxyXG4gICAgdW53cmFwT3IodCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9wcm9taXNlLnRoZW4oKHJlcykgPT4gcmVzLnVud3JhcE9yKHQpKTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogQGRlcHJlY2F0ZWQgd2lsbCBiZSByZW1vdmVkIGluIDkuMC4wLlxyXG4gICAgICpcclxuICAgICAqIFlvdSBjYW4gdXNlIGBzYWZlVHJ5YCB3aXRob3V0IHRoaXMgbWV0aG9kLlxyXG4gICAgICogQGV4YW1wbGVcclxuICAgICAqIGBgYHR5cGVzY3JpcHRcclxuICAgICAqIHNhZmVUcnkoYXN5bmMgZnVuY3Rpb24qICgpIHtcclxuICAgICAqICAgY29uc3Qgb2tWYWx1ZSA9IHlpZWxkKiB5b3VyUmVzdWx0XHJcbiAgICAgKiB9KVxyXG4gICAgICogYGBgXHJcbiAgICAgKiBFbXVsYXRlcyBSdXN0J3MgYD9gIG9wZXJhdG9yIGluIGBzYWZlVHJ5YCdzIGJvZHkuIFNlZSBhbHNvIGBzYWZlVHJ5YC5cclxuICAgICAqL1xyXG4gICAgc2FmZVVud3JhcCgpIHtcclxuICAgICAgICByZXR1cm4gX19hc3luY0dlbmVyYXRvcih0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uKiBzYWZlVW53cmFwXzEoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB5aWVsZCBfX2F3YWl0KHlpZWxkIF9fYXdhaXQoeWllbGQqIF9fYXN5bmNEZWxlZ2F0b3IoX19hc3luY1ZhbHVlcyh5aWVsZCBfX2F3YWl0KHRoaXMuX3Byb21pc2UudGhlbigocmVzKSA9PiByZXMuc2FmZVVud3JhcCgpKSkpKSkpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgLy8gTWFrZXMgUmVzdWx0QXN5bmMgaW1wbGVtZW50IFByb21pc2VMaWtlPFJlc3VsdD5cclxuICAgIHRoZW4oc3VjY2Vzc0NhbGxiYWNrLCBmYWlsdXJlQ2FsbGJhY2spIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcHJvbWlzZS50aGVuKHN1Y2Nlc3NDYWxsYmFjaywgZmFpbHVyZUNhbGxiYWNrKTtcclxuICAgIH1cclxuICAgIFtTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKSB7XHJcbiAgICAgICAgcmV0dXJuIF9fYXN5bmNHZW5lcmF0b3IodGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbiogX2EoKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHlpZWxkIF9fYXdhaXQodGhpcy5fcHJvbWlzZSk7XHJcbiAgICAgICAgICAgIGlmIChyZXN1bHQuaXNFcnIoKSkge1xyXG4gICAgICAgICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtLSBUaGlzIGlzIHN0cnVjdHVyYWxseSBlcXVpdmFsZW50IGFuZCBzYWZlXHJcbiAgICAgICAgICAgICAgICB5aWVsZCB5aWVsZCBfX2F3YWl0KGVyckFzeW5jKHJlc3VsdC5lcnJvcikpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLS0gVGhpcyBpcyBzdHJ1Y3R1cmFsbHkgZXF1aXZhbGVudCBhbmQgc2FmZVxyXG4gICAgICAgICAgICByZXR1cm4geWllbGQgX19hd2FpdChyZXN1bHQudmFsdWUpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59XHJcbmNvbnN0IG9rQXN5bmMgPSAodmFsdWUpID0+IG5ldyBSZXN1bHRBc3luYyhQcm9taXNlLnJlc29sdmUobmV3IE9rKHZhbHVlKSkpO1xyXG5jb25zdCBlcnJBc3luYyA9IChlcnIpID0+IG5ldyBSZXN1bHRBc3luYyhQcm9taXNlLnJlc29sdmUobmV3IEVycihlcnIpKSk7XHJcbmNvbnN0IGZyb21Qcm9taXNlID0gUmVzdWx0QXN5bmMuZnJvbVByb21pc2U7XHJcbmNvbnN0IGZyb21TYWZlUHJvbWlzZSA9IFJlc3VsdEFzeW5jLmZyb21TYWZlUHJvbWlzZTtcclxuY29uc3QgZnJvbUFzeW5jVGhyb3dhYmxlID0gUmVzdWx0QXN5bmMuZnJvbVRocm93YWJsZTtcblxuLyoqXHJcbiAqIFNob3J0IGNpcmN1aXRzIG9uIHRoZSBGSVJTVCBFcnIgdmFsdWUgdGhhdCB3ZSBmaW5kXHJcbiAqL1xyXG5jb25zdCBjb21iaW5lUmVzdWx0TGlzdCA9IChyZXN1bHRMaXN0KSA9PiB7XHJcbiAgICBsZXQgYWNjID0gb2soW10pO1xyXG4gICAgZm9yIChjb25zdCByZXN1bHQgb2YgcmVzdWx0TGlzdCkge1xyXG4gICAgICAgIGlmIChyZXN1bHQuaXNFcnIoKSkge1xyXG4gICAgICAgICAgICBhY2MgPSBlcnIocmVzdWx0LmVycm9yKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBhY2MubWFwKChsaXN0KSA9PiBsaXN0LnB1c2gocmVzdWx0LnZhbHVlKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGFjYztcclxufTtcclxuLyogVGhpcyBpcyB0aGUgdHlwZXNhZmUgdmVyc2lvbiBvZiBQcm9taXNlLmFsbFxyXG4gKlxyXG4gKiBUYWtlcyBhIGxpc3Qgb2YgUmVzdWx0QXN5bmM8VCwgRT4gYW5kIHN1Y2Nlc3MgaWYgYWxsIGlubmVyIHJlc3VsdHMgYXJlIE9rIHZhbHVlc1xyXG4gKiBvciBmYWlscyBpZiBvbmUgKG9yIG1vcmUpIG9mIHRoZSBpbm5lciByZXN1bHRzIGFyZSBFcnIgdmFsdWVzXHJcbiAqL1xyXG5jb25zdCBjb21iaW5lUmVzdWx0QXN5bmNMaXN0ID0gKGFzeW5jUmVzdWx0TGlzdCkgPT4gUmVzdWx0QXN5bmMuZnJvbVNhZmVQcm9taXNlKFByb21pc2UuYWxsKGFzeW5jUmVzdWx0TGlzdCkpLmFuZFRoZW4oY29tYmluZVJlc3VsdExpc3QpO1xyXG4vKipcclxuICogR2l2ZSBhIGxpc3Qgb2YgYWxsIHRoZSBlcnJvcnMgd2UgZmluZFxyXG4gKi9cclxuY29uc3QgY29tYmluZVJlc3VsdExpc3RXaXRoQWxsRXJyb3JzID0gKHJlc3VsdExpc3QpID0+IHtcclxuICAgIGxldCBhY2MgPSBvayhbXSk7XHJcbiAgICBmb3IgKGNvbnN0IHJlc3VsdCBvZiByZXN1bHRMaXN0KSB7XHJcbiAgICAgICAgaWYgKHJlc3VsdC5pc0VycigpICYmIGFjYy5pc0VycigpKSB7XHJcbiAgICAgICAgICAgIGFjYy5lcnJvci5wdXNoKHJlc3VsdC5lcnJvcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHJlc3VsdC5pc0VycigpICYmIGFjYy5pc09rKCkpIHtcclxuICAgICAgICAgICAgYWNjID0gZXJyKFtyZXN1bHQuZXJyb3JdKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAocmVzdWx0LmlzT2soKSAmJiBhY2MuaXNPaygpKSB7XHJcbiAgICAgICAgICAgIGFjYy52YWx1ZS5wdXNoKHJlc3VsdC52YWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGRvIG5vdGhpbmcgd2hlbiByZXN1bHQuaXNPaygpICYmIGFjYy5pc0VycigpXHJcbiAgICB9XHJcbiAgICByZXR1cm4gYWNjO1xyXG59O1xyXG5jb25zdCBjb21iaW5lUmVzdWx0QXN5bmNMaXN0V2l0aEFsbEVycm9ycyA9IChhc3luY1Jlc3VsdExpc3QpID0+IFJlc3VsdEFzeW5jLmZyb21TYWZlUHJvbWlzZShQcm9taXNlLmFsbChhc3luY1Jlc3VsdExpc3QpKS5hbmRUaGVuKGNvbWJpbmVSZXN1bHRMaXN0V2l0aEFsbEVycm9ycyk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbmFtZXNwYWNlXHJcbnZhciBSZXN1bHQ7XHJcbihmdW5jdGlvbiAoUmVzdWx0KSB7XHJcbiAgICAvKipcclxuICAgICAqIFdyYXBzIGEgZnVuY3Rpb24gd2l0aCBhIHRyeSBjYXRjaCwgY3JlYXRpbmcgYSBuZXcgZnVuY3Rpb24gd2l0aCB0aGUgc2FtZVxyXG4gICAgICogYXJndW1lbnRzIGJ1dCByZXR1cm5pbmcgYE9rYCBpZiBzdWNjZXNzZnVsLCBgRXJyYCBpZiB0aGUgZnVuY3Rpb24gdGhyb3dzXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIGZuIGZ1bmN0aW9uIHRvIHdyYXAgd2l0aCBvayBvbiBzdWNjZXNzIG9yIGVyciBvbiBmYWlsdXJlXHJcbiAgICAgKiBAcGFyYW0gZXJyb3JGbiB3aGVuIGFuIGVycm9yIGlzIHRocm93biwgdGhpcyB3aWxsIHdyYXAgdGhlIGVycm9yIHJlc3VsdCBpZiBwcm92aWRlZFxyXG4gICAgICovXHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gICAgZnVuY3Rpb24gZnJvbVRocm93YWJsZShmbiwgZXJyb3JGbikge1xyXG4gICAgICAgIHJldHVybiAoLi4uYXJncykgPT4ge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gZm4oLi4uYXJncyk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gb2socmVzdWx0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGVycihlcnJvckZuID8gZXJyb3JGbihlKSA6IGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICAgIFJlc3VsdC5mcm9tVGhyb3dhYmxlID0gZnJvbVRocm93YWJsZTtcclxuICAgIGZ1bmN0aW9uIGNvbWJpbmUocmVzdWx0TGlzdCkge1xyXG4gICAgICAgIHJldHVybiBjb21iaW5lUmVzdWx0TGlzdChyZXN1bHRMaXN0KTtcclxuICAgIH1cclxuICAgIFJlc3VsdC5jb21iaW5lID0gY29tYmluZTtcclxuICAgIGZ1bmN0aW9uIGNvbWJpbmVXaXRoQWxsRXJyb3JzKHJlc3VsdExpc3QpIHtcclxuICAgICAgICByZXR1cm4gY29tYmluZVJlc3VsdExpc3RXaXRoQWxsRXJyb3JzKHJlc3VsdExpc3QpO1xyXG4gICAgfVxyXG4gICAgUmVzdWx0LmNvbWJpbmVXaXRoQWxsRXJyb3JzID0gY29tYmluZVdpdGhBbGxFcnJvcnM7XHJcbn0pKFJlc3VsdCB8fCAoUmVzdWx0ID0ge30pKTtcclxuY29uc3Qgb2sgPSAodmFsdWUpID0+IG5ldyBPayh2YWx1ZSk7XHJcbmZ1bmN0aW9uIGVycihlcnIpIHtcclxuICAgIHJldHVybiBuZXcgRXJyKGVycik7XHJcbn1cclxuZnVuY3Rpb24gc2FmZVRyeShib2R5KSB7XHJcbiAgICBjb25zdCBuID0gYm9keSgpLm5leHQoKTtcclxuICAgIGlmIChuIGluc3RhbmNlb2YgUHJvbWlzZSkge1xyXG4gICAgICAgIHJldHVybiBuZXcgUmVzdWx0QXN5bmMobi50aGVuKChyKSA9PiByLnZhbHVlKSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbi52YWx1ZTtcclxufVxyXG5jbGFzcyBPayB7XHJcbiAgICBjb25zdHJ1Y3Rvcih2YWx1ZSkge1xyXG4gICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcclxuICAgIH1cclxuICAgIGlzT2soKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICBpc0VycigpIHtcclxuICAgICAgICByZXR1cm4gIXRoaXMuaXNPaygpO1xyXG4gICAgfVxyXG4gICAgbWFwKGYpIHtcclxuICAgICAgICByZXR1cm4gb2soZih0aGlzLnZhbHVlKSk7XHJcbiAgICB9XHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXHJcbiAgICBtYXBFcnIoX2YpIHtcclxuICAgICAgICByZXR1cm4gb2sodGhpcy52YWx1ZSk7XHJcbiAgICB9XHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSwgQHR5cGVzY3JpcHQtZXNsaW50L2V4cGxpY2l0LW1vZHVsZS1ib3VuZGFyeS10eXBlc1xyXG4gICAgYW5kVGhlbihmKSB7XHJcbiAgICAgICAgcmV0dXJuIGYodGhpcy52YWx1ZSk7XHJcbiAgICB9XHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSwgQHR5cGVzY3JpcHQtZXNsaW50L2V4cGxpY2l0LW1vZHVsZS1ib3VuZGFyeS10eXBlc1xyXG4gICAgYW5kVGhyb3VnaChmKSB7XHJcbiAgICAgICAgcmV0dXJuIGYodGhpcy52YWx1ZSkubWFwKChfdmFsdWUpID0+IHRoaXMudmFsdWUpO1xyXG4gICAgfVxyXG4gICAgYW5kVGVlKGYpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBmKHRoaXMudmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAvLyBUZWUgZG9lc24ndCBjYXJlIGFib3V0IHRoZSBlcnJvclxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gb2sodGhpcy52YWx1ZSk7XHJcbiAgICB9XHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSwgQHR5cGVzY3JpcHQtZXNsaW50L2V4cGxpY2l0LW1vZHVsZS1ib3VuZGFyeS10eXBlc1xyXG4gICAgb3JFbHNlKF9mKSB7XHJcbiAgICAgICAgcmV0dXJuIG9rKHRoaXMudmFsdWUpO1xyXG4gICAgfVxyXG4gICAgYXN5bmNBbmRUaGVuKGYpIHtcclxuICAgICAgICByZXR1cm4gZih0aGlzLnZhbHVlKTtcclxuICAgIH1cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55LCBAdHlwZXNjcmlwdC1lc2xpbnQvZXhwbGljaXQtbW9kdWxlLWJvdW5kYXJ5LXR5cGVzXHJcbiAgICBhc3luY0FuZFRocm91Z2goZikge1xyXG4gICAgICAgIHJldHVybiBmKHRoaXMudmFsdWUpLm1hcCgoKSA9PiB0aGlzLnZhbHVlKTtcclxuICAgIH1cclxuICAgIGFzeW5jTWFwKGYpIHtcclxuICAgICAgICByZXR1cm4gUmVzdWx0QXN5bmMuZnJvbVNhZmVQcm9taXNlKGYodGhpcy52YWx1ZSkpO1xyXG4gICAgfVxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xyXG4gICAgdW53cmFwT3IoX3YpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZTtcclxuICAgIH1cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcclxuICAgIG1hdGNoKG9rLCBfZXJyKSB7XHJcbiAgICAgICAgcmV0dXJuIG9rKHRoaXMudmFsdWUpO1xyXG4gICAgfVxyXG4gICAgc2FmZVVud3JhcCgpIHtcclxuICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgLyogZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlcXVpcmUteWllbGQgKi9cclxuICAgICAgICByZXR1cm4gKGZ1bmN0aW9uKiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgICAgICB9KSgpO1xyXG4gICAgfVxyXG4gICAgX3Vuc2FmZVVud3JhcChfKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWU7XHJcbiAgICB9XHJcbiAgICBfdW5zYWZlVW53cmFwRXJyKGNvbmZpZykge1xyXG4gICAgICAgIHRocm93IGNyZWF0ZU5ldmVyVGhyb3dFcnJvcignQ2FsbGVkIGBfdW5zYWZlVW53cmFwRXJyYCBvbiBhbiBPaycsIHRoaXMsIGNvbmZpZyk7XHJcbiAgICB9XHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXRoaXMtYWxpYXMsIHJlcXVpcmUteWllbGRcclxuICAgICpbU3ltYm9sLml0ZXJhdG9yXSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZTtcclxuICAgIH1cclxufVxyXG5jbGFzcyBFcnIge1xyXG4gICAgY29uc3RydWN0b3IoZXJyb3IpIHtcclxuICAgICAgICB0aGlzLmVycm9yID0gZXJyb3I7XHJcbiAgICB9XHJcbiAgICBpc09rKCkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGlzRXJyKCkge1xyXG4gICAgICAgIHJldHVybiAhdGhpcy5pc09rKCk7XHJcbiAgICB9XHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXHJcbiAgICBtYXAoX2YpIHtcclxuICAgICAgICByZXR1cm4gZXJyKHRoaXMuZXJyb3IpO1xyXG4gICAgfVxyXG4gICAgbWFwRXJyKGYpIHtcclxuICAgICAgICByZXR1cm4gZXJyKGYodGhpcy5lcnJvcikpO1xyXG4gICAgfVxyXG4gICAgYW5kVGhyb3VnaChfZikge1xyXG4gICAgICAgIHJldHVybiBlcnIodGhpcy5lcnJvcik7XHJcbiAgICB9XHJcbiAgICBhbmRUZWUoX2YpIHtcclxuICAgICAgICByZXR1cm4gZXJyKHRoaXMuZXJyb3IpO1xyXG4gICAgfVxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnksIEB0eXBlc2NyaXB0LWVzbGludC9leHBsaWNpdC1tb2R1bGUtYm91bmRhcnktdHlwZXNcclxuICAgIGFuZFRoZW4oX2YpIHtcclxuICAgICAgICByZXR1cm4gZXJyKHRoaXMuZXJyb3IpO1xyXG4gICAgfVxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnksIEB0eXBlc2NyaXB0LWVzbGludC9leHBsaWNpdC1tb2R1bGUtYm91bmRhcnktdHlwZXNcclxuICAgIG9yRWxzZShmKSB7XHJcbiAgICAgICAgcmV0dXJuIGYodGhpcy5lcnJvcik7XHJcbiAgICB9XHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXHJcbiAgICBhc3luY0FuZFRoZW4oX2YpIHtcclxuICAgICAgICByZXR1cm4gZXJyQXN5bmModGhpcy5lcnJvcik7XHJcbiAgICB9XHJcbiAgICBhc3luY0FuZFRocm91Z2goX2YpIHtcclxuICAgICAgICByZXR1cm4gZXJyQXN5bmModGhpcy5lcnJvcik7XHJcbiAgICB9XHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXHJcbiAgICBhc3luY01hcChfZikge1xyXG4gICAgICAgIHJldHVybiBlcnJBc3luYyh0aGlzLmVycm9yKTtcclxuICAgIH1cclxuICAgIHVud3JhcE9yKHYpIHtcclxuICAgICAgICByZXR1cm4gdjtcclxuICAgIH1cclxuICAgIG1hdGNoKF9vaywgZXJyKSB7XHJcbiAgICAgICAgcmV0dXJuIGVycih0aGlzLmVycm9yKTtcclxuICAgIH1cclxuICAgIHNhZmVVbndyYXAoKSB7XHJcbiAgICAgICAgY29uc3QgZXJyb3IgPSB0aGlzLmVycm9yO1xyXG4gICAgICAgIHJldHVybiAoZnVuY3Rpb24qICgpIHtcclxuICAgICAgICAgICAgeWllbGQgZXJyKGVycm9yKTtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdEbyBub3QgdXNlIHRoaXMgZ2VuZXJhdG9yIG91dCBvZiBgc2FmZVRyeWAnKTtcclxuICAgICAgICB9KSgpO1xyXG4gICAgfVxyXG4gICAgX3Vuc2FmZVVud3JhcChjb25maWcpIHtcclxuICAgICAgICB0aHJvdyBjcmVhdGVOZXZlclRocm93RXJyb3IoJ0NhbGxlZCBgX3Vuc2FmZVVud3JhcGAgb24gYW4gRXJyJywgdGhpcywgY29uZmlnKTtcclxuICAgIH1cclxuICAgIF91bnNhZmVVbndyYXBFcnIoXykge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmVycm9yO1xyXG4gICAgfVxyXG4gICAgKltTeW1ib2wuaXRlcmF0b3JdKCkge1xyXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdGhpcy1hbGlhc1xyXG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLS0gVGhpcyBpcyBzdHJ1Y3R1cmFsbHkgZXF1aXZhbGVudCBhbmQgc2FmZVxyXG4gICAgICAgIHlpZWxkIHNlbGY7XHJcbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtLSBUaGlzIGlzIHN0cnVjdHVyYWxseSBlcXVpdmFsZW50IGFuZCBzYWZlXHJcbiAgICAgICAgcmV0dXJuIHNlbGY7XHJcbiAgICB9XHJcbn1cclxuY29uc3QgZnJvbVRocm93YWJsZSA9IFJlc3VsdC5mcm9tVGhyb3dhYmxlO1xyXG4vLyNlbmRyZWdpb25cblxuZXhwb3J0IHsgRXJyLCBPaywgUmVzdWx0LCBSZXN1bHRBc3luYywgZXJyLCBlcnJBc3luYywgZnJvbUFzeW5jVGhyb3dhYmxlLCBmcm9tUHJvbWlzZSwgZnJvbVNhZmVQcm9taXNlLCBmcm9tVGhyb3dhYmxlLCBvaywgb2tBc3luYywgc2FmZVRyeSB9O1xuIiwgInR5cGUgSnNvbmFibGUgPVxuICB8IHN0cmluZ1xuICB8IG51bWJlclxuICB8IGJvb2xlYW5cbiAgfCBudWxsXG4gIHwgdW5kZWZpbmVkXG4gIHwgcmVhZG9ubHkgSnNvbmFibGVbXVxuICB8IHsgcmVhZG9ubHkgW2tleTogc3RyaW5nXTogSnNvbmFibGUgfVxuICB8IHsgdG9KU09OKCk6IEpzb25hYmxlIH07XG5cbmV4cG9ydCBjbGFzcyBCYXNlRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIHB1YmxpYyByZWFkb25seSBjb250ZXh0PzogSnNvbmFibGU7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgbWVzc2FnZT86IHN0cmluZyxcbiAgICBvcHRpb25zOiB7IGNhdXNlPzogRXJyb3I7IGNvbnRleHQ/OiBKc29uYWJsZSB9ID0ge30sXG4gICkge1xuICAgIGNvbnN0IHsgY2F1c2UsIGNvbnRleHQgfSA9IG9wdGlvbnM7XG5cbiAgICBzdXBlcihtZXNzYWdlLCB7IGNhdXNlIH0pO1xuICAgIHRoaXMubmFtZSA9IHRoaXMuY29uc3RydWN0b3IubmFtZTtcblxuICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBlcnJBc3luYywgUmVzdWx0QXN5bmMgfSBmcm9tIFwibmV2ZXJ0aHJvd1wiO1xuaW1wb3J0IHsgQ29ubmVjdGlvbkVycm9yIH0gZnJvbSBcIn4vZXJyb3IvY29ubmVjdGlvbi1lcnJvci50c1wiO1xuaW1wb3J0IHsgU2VydmVyRXJyb3IgfSBmcm9tIFwifi9lcnJvci9zZXJ2ZXItZXJyb3IudHNcIjtcbmltcG9ydCB0eXBlIHsgU2VydmVyQ29uZmlnIH0gZnJvbSBcIn4vaW50ZXJmYWNlL3NlcnZlci1jb25maWcudHNcIjtcblxuLyoqXG4gKiBFbnN1cmUgYW4gZXJyb3IgbWVzc2FnZSBpcyB0cmFuc2Zvcm1lZCBpbiBhbiBFcnJvciBvYmplY3RcbiAqXG4gKiBAcGFyYW0gdmFsdWVcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCBlbnN1cmVFcnJvciA9ICh2YWx1ZTogdW5rbm93bik6IEVycm9yID0+IHtcbiAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRXJyb3IpIHJldHVybiB2YWx1ZTtcblxuICBsZXQgc3RyaW5naWZpZWQgPSBcIltVbmFibGUgdG8gc3RyaW5naWZ5IHRoZSB0aHJvd24gdmFsdWVdXCI7XG4gIHRyeSB7XG4gICAgc3RyaW5naWZpZWQgPSBKU09OLnN0cmluZ2lmeSh2YWx1ZSk7XG4gIH0gY2F0Y2ggKF9lcnJvcikge1xuICAgIC8qIGVtcHR5ICovXG4gIH1cblxuICByZXR1cm4gbmV3IEVycm9yKHN0cmluZ2lmaWVkKTtcbn07XG5cbi8qKlxuICogUmV0cmlldmUgTHVmaSdzIGNvbmZpZyBmcm9tIGl0cyBBUElcbiAqXG4gKiBAcGFyYW0gaW5zdGFuY2VVcmxcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCBmZXRjaFNlcnZlckNvbmZpZyA9IChcbiAgaW5zdGFuY2VVcmw6IFVSTCxcbik6IFJlc3VsdEFzeW5jPFNlcnZlckNvbmZpZywgRXJyb3I+ID0+IHtcbiAgY29uc3Qgb3JpZ2luTWF0Y2hlcyA9IGluc3RhbmNlVXJsLmhyZWYubWF0Y2goXG4gICAgLyguKj8pXFwvPyg/OlxcL1tkcl17MX1cXC98bG9naW5cXC8/fGZpbGVzXFwvPykvLFxuICApO1xuXG4gIGNvbnN0IHVybE9yaWdpbiA9IG9yaWdpbk1hdGNoZXMgJiYgb3JpZ2luTWF0Y2hlc1sxXVxuICAgID8gb3JpZ2luTWF0Y2hlc1sxXVxuICAgIDogaW5zdGFuY2VVcmwub3JpZ2luO1xuXG4gIHJldHVybiBSZXN1bHRBc3luYy5mcm9tUHJvbWlzZShcbiAgICBmZXRjaCh1cmxPcmlnaW4gKyBcIi9hYm91dC9jb25maWdcIiksXG4gICAgKGVycm9yKSA9PlxuICAgICAgbmV3IENvbm5lY3Rpb25FcnJvcih1bmRlZmluZWQsIHtcbiAgICAgICAgY2F1c2U6IGVuc3VyZUVycm9yKGVycm9yKSxcbiAgICAgIH0pLFxuICApLmFuZFRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgaWYgKHJlc3BvbnNlLm9rKSB7XG4gICAgICByZXR1cm4gUmVzdWx0QXN5bmMuZnJvbVByb21pc2UoXG4gICAgICAgIHJlc3BvbnNlLmpzb24oKSxcbiAgICAgICAgKGVycm9yKSA9PiBlbnN1cmVFcnJvcihlcnJvciksXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZXJyQXN5bmMoXG4gICAgICAgIG5ldyBTZXJ2ZXJFcnJvcih1bmRlZmluZWQsIHsgY29udGV4dDogcmVzcG9uc2Uuc3RhdHVzVGV4dCB9KSxcbiAgICAgICk7XG4gICAgfVxuICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc0Rlbm9SdW50aW1lID0gKCk6IGJvb2xlYW4gPT4gdHlwZW9mIERlbm8gIT09IFwidW5kZWZpbmVkXCI7XG5cbmV4cG9ydCBjb25zdCBpc1NlY3VyZUNvbnRleHQgPSAoKTogYm9vbGVhbiA9PiB7XG4gIHJldHVybiBpc0Rlbm9SdW50aW1lKCkgfHwgZ2xvYmFsVGhpcy5pc1NlY3VyZUNvbnRleHQgfHxcbiAgICBnbG9iYWxUaGlzLmxvY2F0aW9uLnByb3RvY29sID09PSBcImh0dHBzOlwiO1xufTtcblxuZXhwb3J0IGNvbnN0IHdvcmtlclVybCA9IChyZWxhdGl2ZVBhdGg6IHN0cmluZyk6IFVSTCA9PiB7XG4gIHJldHVybiBpc0Rlbm9SdW50aW1lKClcbiAgICA/IG5ldyBVUkwoYC4vd29ya2VyLyR7cmVsYXRpdmVQYXRofS50c2AsIG5ldyBVUkwoXCIuXCIsIGltcG9ydC5tZXRhLnVybCkuaHJlZilcbiAgICA6IG5ldyBVUkwoXG4gICAgICBpbXBvcnQubWV0YS5yZXNvbHZlKFxuICAgICAgICBgLi8ke1xuICAgICAgICAgIHJlbGF0aXZlUGF0aCAhPT0gXCJlbmNyeXB0XCIgPyBgd29ya2VyLyR7cmVsYXRpdmVQYXRofWAgOiByZWxhdGl2ZVBhdGhcbiAgICAgICAgfS5qc2AsXG4gICAgICApLFxuICAgICk7XG59O1xuIiwgImltcG9ydCBFdmVudEVtaXR0ZXIgZnJvbSBcImV2ZW50c1wiO1xuaW1wb3J0IHsgV09SS0VSX0FDVElPTiB9IGZyb20gXCJ+L2VudW0vd29ya2VyLWFjdGlvbi50c1wiO1xuaW1wb3J0IHR5cGUgeyBMdWZpRmlsZSB9IGZyb20gXCJ+L2VudGl0aWVzL2x1ZmktZmlsZS50c1wiO1xuaW1wb3J0IHR5cGUgeyBXb3JrZXJBY3Rpb25NZXNzYWdlIH0gZnJvbSBcIn4vaW50ZXJmYWNlL3dvcmtlci1hY3Rpb24tbWVzc2FnZS50c1wiO1xuaW1wb3J0IHsgRVZFTlQgfSBmcm9tIFwifi9lbnVtL2V2ZW50LnRzXCI7XG5pbXBvcnQgeyBVUExPQURfU1RBVFVTIH0gZnJvbSBcIn4vZW51bS9maWxlLXN0YXR1cy50c1wiO1xuaW1wb3J0IHR5cGUgeyBXb3JrZXJFdmVudCB9IGZyb20gXCJ+L2ludGVyZmFjZS93b3JrZXItZXZlbnQudHNcIjtcblxuZGVjbGFyZSBsZXQgc2VsZjogV29ya2VyO1xuXG5leHBvcnQgY29uc3QgZXZlbnRzID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4vKipcbiAqIFVwZGF0ZSBmaWxlIGluIHdvcmtlcnMgYW5kIHByb3ZpZGUgbW9kaWZpY2F0aW9ucyB0byB0aGUgbWFpbiB0aHJlYWRcbiAqXG4gKiBAcGFyYW0gbHVmaUZpbGVcbiAqIEBwYXJhbSBhcmdzXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgY29uc3QgdXBkYXRlRmlsZSA9IChsdWZpRmlsZTogTHVmaUZpbGUsIGFyZ3M6IFBhcnRpYWw8THVmaUZpbGU+KSA9PiB7XG4gIE9iamVjdC5hc3NpZ24obHVmaUZpbGUsIGFyZ3MpO1xuXG4gIGlmICh0eXBlb2YgV29ya2VyR2xvYmFsU2NvcGUgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICBzZWxmLnBvc3RNZXNzYWdlKHtcbiAgICAgIGV2ZW50OiBFVkVOVC5GSUxFX1VQREFURUQsXG4gICAgICBsdWZpRmlsZSxcbiAgICB9IGFzIFdvcmtlckV2ZW50KTtcbiAgfVxuXG4gIHJldHVybiBsdWZpRmlsZTtcbn07XG5cbmV4cG9ydCBjb25zdCBzZW5kRmlsZUVycm9yID0gKGx1ZmlGaWxlOiBMdWZpRmlsZSwgZXJyb3I6IEVycm9yKSA9PiB7XG4gIHVwZGF0ZUZpbGUobHVmaUZpbGUsIHsgdXBsb2FkU3RhdHVzOiBVUExPQURfU1RBVFVTLkZBSUxFRCB9KTtcblxuICBzZWxmLnBvc3RNZXNzYWdlKHsgZXZlbnQ6IEVWRU5ULk9QRVJBVElPTl9GQUlMRUQsIGVycm9yIH0gYXMgV29ya2VyRXZlbnQpO1xufTtcblxuLyoqXG4gKiBJbml0IGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIGVhY2ggY2hpbGQgd29ya2VyJ3Mgb25tZXNzYWdlIGV2ZW50LlxuICovXG5leHBvcnQgY29uc3QgaW5pdCA9ICgpID0+IHtcbiAgZXZlbnRzLm9uY2UoRVZFTlQuU09DS0VUX09QRU5FRCwgKCkgPT4ge1xuICAgIHNlbGYucG9zdE1lc3NhZ2Uoe1xuICAgICAgZXZlbnQ6IEVWRU5ULlNPQ0tFVF9PUEVORUQsXG4gICAgfSk7XG4gIH0pO1xuXG4gIGV2ZW50cy5vbmNlKEVWRU5ULk9QRVJBVElPTl9GQUlMRUQsIChlcnJvcjogRXJyb3IpID0+IHtcbiAgICBzZWxmLnBvc3RNZXNzYWdlKHsgZXZlbnQ6IEVWRU5ULk9QRVJBVElPTl9GQUlMRUQsIGVycm9yIH0pO1xuICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc1dvcmtlckFjdGlvbk1lc3NhZ2UgPSAoXG4gIC8vIGRlbm8tbGludC1pZ25vcmUgbm8tZXhwbGljaXQtYW55XG4gIG1lc3NhZ2U6IGFueSxcbik6IG1lc3NhZ2UgaXMgV29ya2VyQWN0aW9uTWVzc2FnZSA9PiB7XG4gIHJldHVybiAoXG4gICAgdHlwZW9mIG1lc3NhZ2UgPT09IFwib2JqZWN0XCIgJiZcbiAgICBtZXNzYWdlICE9PSBudWxsICYmXG4gICAgXCJhY3Rpb25cIiBpbiBtZXNzYWdlICYmXG4gICAgT2JqZWN0LnZhbHVlcyhXT1JLRVJfQUNUSU9OKS5pbmNsdWRlcyhtZXNzYWdlLmFjdGlvbilcbiAgKTtcbn07XG4iLCAiaW1wb3J0IHsgQmFzZUVycm9yIH0gZnJvbSBcIn4vZXJyb3IvYmFzZS1lcnJvci50c1wiO1xuXG5leHBvcnQgY2xhc3MgV29ya2VyRXJyb3IgZXh0ZW5kcyBCYXNlRXJyb3Ige31cbiIsICJpbXBvcnQgeyBXb3JrZXJFcnJvciB9IGZyb20gXCJ+L2Vycm9yL3dvcmtlci93b3JrZXItZXJyb3IudHNcIjtcblxuZXhwb3J0IGNsYXNzIFdvcmtlclJlbW92ZUZhaWxlZEVycm9yIGV4dGVuZHMgV29ya2VyRXJyb3Ige1xuICBvdmVycmlkZSBtZXNzYWdlID0gXCJGYWlsZWQgdG8gcmVtb3ZlIHRoZSBmaWxlXCI7XG59XG4iLCAiaW1wb3J0IHsgRVZFTlQgfSBmcm9tIFwifi9lbnVtL2V2ZW50LnRzXCI7XG5pbXBvcnQgdHlwZSB7IFdvcmtlckFjdGlvbk1lc3NhZ2UgfSBmcm9tIFwifi9pbnRlcmZhY2Uvd29ya2VyLWFjdGlvbi1tZXNzYWdlLnRzXCI7XG5pbXBvcnQgeyBSZXN1bHRBc3luYyB9IGZyb20gXCJuZXZlcnRocm93XCI7XG5pbXBvcnQgdHlwZSB7IFdvcmtlckV2ZW50IH0gZnJvbSBcIn4vaW50ZXJmYWNlL3dvcmtlci1ldmVudC50c1wiO1xuaW1wb3J0IHsgZW5zdXJlRXJyb3IgfSBmcm9tIFwifi91dGlscy50c1wiO1xuaW1wb3J0IHsgaW5pdCB9IGZyb20gXCJ+L3dvcmtlci9zaGFyZWQudHNcIjtcbmltcG9ydCB7IFdvcmtlclJlbW92ZUZhaWxlZEVycm9yIH0gZnJvbSBcIn4vZXJyb3Ivd29ya2VyL3dvcmtlci1yZW1vdmUtZmFpbGVkLWVycm9yLnRzXCI7XG5cbmRlY2xhcmUgY29uc3Qgc2VsZjogV29ya2VyO1xuXG5sZXQgaXNJbml0aWF0ZWQgPSBmYWxzZTtcblxuc2VsZi5vbm1lc3NhZ2UgPSAoZXZlbnQ6IE1lc3NhZ2VFdmVudCkgPT4ge1xuICBpZiAoIWlzSW5pdGlhdGVkKSB7XG4gICAgaW5pdCgpO1xuICAgIGlzSW5pdGlhdGVkID0gdHJ1ZTtcbiAgfVxuXG4gIHJlbW92ZUZpbGUoZXZlbnQuZGF0YSlcbiAgICAubWFwKCgpID0+IHtcbiAgICAgIHNlbGYucG9zdE1lc3NhZ2UoeyBldmVudDogRVZFTlQuRklMRV9SRU1PVkVEIH0pO1xuICAgIH0pXG4gICAgLm1hcEVycigoZXJyb3IpID0+IHtcbiAgICAgIHNlbGYucG9zdE1lc3NhZ2Uoe1xuICAgICAgICBldmVudDogRVZFTlQuT1BFUkFUSU9OX0ZBSUxFRCxcbiAgICAgICAgZXJyb3IsXG4gICAgICB9IGFzIFdvcmtlckV2ZW50KTtcbiAgICB9KTtcbn07XG5cbmNvbnN0IHJlbW92ZUZpbGUgPSAoXG4gIHdvcmtlck1lc3NhZ2U6IFdvcmtlckFjdGlvbk1lc3NhZ2UsXG4pOiBSZXN1bHRBc3luYzx2b2lkLCBFcnJvcj4gPT5cbiAgUmVzdWx0QXN5bmMuZnJvbVByb21pc2UoXG4gICAgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3QgbHVmaUZpbGUgPSB3b3JrZXJNZXNzYWdlLmFyZ3MubHVmaUZpbGU7XG5cbiAgICAgIGZldGNoKFxuICAgICAgICBgJHtcbiAgICAgICAgICBuZXcgVVJMKGx1ZmlGaWxlLnNlcnZlclVybCkuaHJlZlxuICAgICAgICB9ZC8ke2x1ZmlGaWxlLmtleXMuc2VydmVyfS8ke2x1ZmlGaWxlLmFjdGlvblRva2VufWAsXG4gICAgICApLnRoZW4oKFxuICAgICAgICByZXNwb25zZSxcbiAgICAgICkgPT4gKHJlc3BvbnNlLm9rID8gcmVzb2x2ZSh1bmRlZmluZWQpIDogcmVqZWN0KFxuICAgICAgICBuZXcgV29ya2VyUmVtb3ZlRmFpbGVkRXJyb3IodW5kZWZpbmVkLCB7XG4gICAgICAgICAgY2F1c2U6IGVuc3VyZUVycm9yKHJlc3BvbnNlLnN0YXR1c1RleHQpLFxuICAgICAgICB9KSxcbiAgICAgICkpKTtcbiAgICB9KSxcbiAgICAoZXJyb3IpID0+IGVuc3VyZUVycm9yKGVycm9yKSxcbiAgKTtcbiJdLAogICJtYXBwaW5ncyI6ICJpcUJBQUEsSUFBQUEsRUFBQUMsR0FBQSxDQUFBQyxHQUFBQyxJQUFBLGNBdUJBLElBQUlDLEVBQUksT0FBTyxTQUFZLFNBQVcsUUFBVSxLQUM1Q0MsRUFBZUQsR0FBSyxPQUFPQSxFQUFFLE9BQVUsV0FDdkNBLEVBQUUsTUFDRixTQUFzQkUsRUFBUUMsRUFBVUMsRUFBTSxDQUM5QyxPQUFPLFNBQVMsVUFBVSxNQUFNLEtBQUtGLEVBQVFDLEVBQVVDLENBQUksQ0FDN0QsRUFFRUMsRUFDQUwsR0FBSyxPQUFPQSxFQUFFLFNBQVksV0FDNUJLLEVBQWlCTCxFQUFFLFFBQ1YsT0FBTyxzQkFDaEJLLEVBQWlCLFNBQXdCSCxFQUFRLENBQy9DLE9BQU8sT0FBTyxvQkFBb0JBLENBQU0sRUFDckMsT0FBTyxPQUFPLHNCQUFzQkEsQ0FBTSxDQUFDLENBQ2hELEVBRUFHLEVBQWlCLFNBQXdCSCxFQUFRLENBQy9DLE9BQU8sT0FBTyxvQkFBb0JBLENBQU0sQ0FDMUMsRUFHRixTQUFTSSxHQUFtQkMsRUFBUyxDQUMvQixTQUFXLFFBQVEsTUFBTSxRQUFRLEtBQUtBLENBQU8sQ0FDbkQsQ0FFQSxJQUFJQyxFQUFjLE9BQU8sT0FBUyxTQUFxQkMsRUFBTyxDQUM1RCxPQUFPQSxJQUFVQSxDQUNuQixFQUVBLFNBQVNDLEdBQWUsQ0FDdEJBLEVBQWEsS0FBSyxLQUFLLElBQUksQ0FDN0IsQ0FDQVgsRUFBTyxRQUFVVyxFQUNqQlgsRUFBTyxRQUFRLEtBQU9ZLEdBR3RCRCxFQUFhLGFBQWVBLEVBRTVCQSxFQUFhLFVBQVUsUUFBVSxPQUNqQ0EsRUFBYSxVQUFVLGFBQWUsRUFDdENBLEVBQWEsVUFBVSxjQUFnQixP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VCxLQUFLLFlBQVksQ0FBRSxvQkFBMEIsQ0FBQyxDQUNoRCxDQUFDLEVBQ0EsT0FBUUcsR0FBVSxDQUNqQixLQUFLLFlBQVksQ0FDZix5QkFDQSxNQUFBQSxDQUNGLENBQWdCLENBQ2xCLENBQUMsQ0FDTCxFQUVBLElBQU1ELEdBQ0pFLEdBRUFDLEVBQVksWUFDVixJQUFJLFFBQVEsQ0FBQ0MsRUFBU0MsSUFBVyxDQUMvQixJQUFNQyxFQUFXSixFQUFjLEtBQUssU0FFcEMsTUFDRSxHQUNFLElBQUksSUFBSUksRUFBUyxTQUFTLEVBQUUsSUFDOUIsS0FBS0EsRUFBUyxLQUFLLE1BQU0sSUFBSUEsRUFBUyxXQUFXLEVBQ25ELEVBQUUsS0FDQUMsR0FDSUEsRUFBUyxHQUFLSCxFQUFRLE1BQVMsRUFBSUMsRUFDdkMsSUFBSUcsRUFBd0IsT0FBVyxDQUNyQyxNQUFPQyxFQUFZRixFQUFTLFVBQVUsQ0FDeEMsQ0FBQyxDQUNILENBQUUsQ0FDSixDQUFDLEVBQ0FOLEdBQVVRLEVBQVlSLENBQUssQ0FDOUIiLAogICJuYW1lcyI6IFsicmVxdWlyZV9ldmVudHMiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJSIiwgIlJlZmxlY3RBcHBseSIsICJ0YXJnZXQiLCAicmVjZWl2ZXIiLCAiYXJncyIsICJSZWZsZWN0T3duS2V5cyIsICJQcm9jZXNzRW1pdFdhcm5pbmciLCAid2FybmluZyIsICJOdW1iZXJJc05hTiIsICJ2YWx1ZSIsICJFdmVudEVtaXR0ZXIiLCAib25jZSIsICJkZWZhdWx0TWF4TGlzdGVuZXJzIiwgImNoZWNrTGlzdGVuZXIiLCAibGlzdGVuZXIiLCAiYXJnIiwgIm4iLCAiX2dldE1heExpc3RlbmVycyIsICJ0aGF0IiwgInR5cGUiLCAiaSIsICJkb0Vycm9yIiwgImV2ZW50cyIsICJlciIsICJlcnIiLCAiaGFuZGxlciIsICJsZW4iLCAibGlzdGVuZXJzIiwgImFycmF5Q2xvbmUiLCAiX2FkZExpc3RlbmVyIiwgInByZXBlbmQiLCAibSIsICJleGlzdGluZyIsICJ3IiwgIm9uY2VXcmFwcGVyIiwgIl9vbmNlV3JhcCIsICJzdGF0ZSIsICJ3cmFwcGVkIiwgImxpc3QiLCAicG9zaXRpb24iLCAib3JpZ2luYWxMaXN0ZW5lciIsICJzcGxpY2VPbmUiLCAia2V5cyIsICJrZXkiLCAiX2xpc3RlbmVycyIsICJ1bndyYXAiLCAiZXZsaXN0ZW5lciIsICJ1bndyYXBMaXN0ZW5lcnMiLCAiZW1pdHRlciIsICJsaXN0ZW5lckNvdW50IiwgImFyciIsICJjb3B5IiwgImluZGV4IiwgInJldCIsICJuYW1lIiwgInJlc29sdmUiLCAicmVqZWN0IiwgImVycm9yTGlzdGVuZXIiLCAicmVzb2x2ZXIiLCAiZXZlbnRUYXJnZXRBZ25vc3RpY0FkZExpc3RlbmVyIiwgImFkZEVycm9ySGFuZGxlcklmRXZlbnRFbWl0dGVyIiwgImZsYWdzIiwgIndyYXBMaXN0ZW5lciIsICJkZWZhdWx0RXJyb3JDb25maWciLCAiY3JlYXRlTmV2ZXJUaHJvd0Vycm9yIiwgIm1lc3NhZ2UiLCAicmVzdWx0IiwgImNvbmZpZyIsICJkYXRhIiwgIm1heWJlU3RhY2siLCAiX19hd2FpdGVyIiwgInRoaXNBcmciLCAiX2FyZ3VtZW50cyIsICJQIiwgImdlbmVyYXRvciIsICJhZG9wdCIsICJ2YWx1ZSIsICJyZXNvbHZlIiwgInJlamVjdCIsICJmdWxmaWxsZWQiLCAic3RlcCIsICJlIiwgInJlamVjdGVkIiwgIl9fdmFsdWVzIiwgIm8iLCAicyIsICJtIiwgImkiLCAiX19hd2FpdCIsICJ2IiwgIl9fYXN5bmNHZW5lcmF0b3IiLCAiZyIsICJxIiwgInZlcmIiLCAiYXdhaXRSZXR1cm4iLCAibiIsICJmIiwgImEiLCAiYiIsICJyZXN1bWUiLCAic2V0dGxlIiwgInIiLCAiZnVsZmlsbCIsICJfX2FzeW5jRGVsZWdhdG9yIiwgInAiLCAiX19hc3luY1ZhbHVlcyIsICJkIiwgIlJlc3VsdEFzeW5jIiwgIl9SZXN1bHRBc3luYyIsICJyZXMiLCAicHJvbWlzZSIsICJuZXdQcm9taXNlIiwgInZhbHVlIiwgIk9rIiwgImVycm9yRm4iLCAiZSIsICJFcnIiLCAiZm4iLCAiYXJncyIsICJfX2F3YWl0ZXIiLCAiZXJyb3IiLCAiYXN5bmNSZXN1bHRMaXN0IiwgImNvbWJpbmVSZXN1bHRBc3luY0xpc3QiLCAiY29tYmluZVJlc3VsdEFzeW5jTGlzdFdpdGhBbGxFcnJvcnMiLCAiZiIsICJuZXdSZXMiLCAibmV3VmFsdWUiLCAib2siLCAiX2VyciIsICJ0IiwgIl9fYXN5bmNHZW5lcmF0b3IiLCAiX19hd2FpdCIsICJfX2FzeW5jRGVsZWdhdG9yIiwgIl9fYXN5bmNWYWx1ZXMiLCAic3VjY2Vzc0NhbGxiYWNrIiwgImZhaWx1cmVDYWxsYmFjayIsICJyZXN1bHQiLCAiZXJyQXN5bmMiLCAiZXJyQXN5bmMiLCAiZXJyIiwgIlJlc3VsdEFzeW5jIiwgIkVyciIsICJmcm9tUHJvbWlzZSIsICJmcm9tU2FmZVByb21pc2UiLCAiZnJvbUFzeW5jVGhyb3dhYmxlIiwgImNvbWJpbmVSZXN1bHRMaXN0IiwgInJlc3VsdExpc3QiLCAiYWNjIiwgIm9rIiwgInJlc3VsdCIsICJsaXN0IiwgImNvbWJpbmVSZXN1bHRBc3luY0xpc3QiLCAiYXN5bmNSZXN1bHRMaXN0IiwgImNvbWJpbmVSZXN1bHRMaXN0V2l0aEFsbEVycm9ycyIsICJjb21iaW5lUmVzdWx0QXN5bmNMaXN0V2l0aEFsbEVycm9ycyIsICJSZXN1bHQiLCAiZnJvbVRocm93YWJsZSIsICJmbiIsICJlcnJvckZuIiwgImFyZ3MiLCAiZSIsICJjb21iaW5lIiwgImNvbWJpbmVXaXRoQWxsRXJyb3JzIiwgInZhbHVlIiwgIk9rIiwgIk9rIiwgInZhbHVlIiwgImYiLCAib2siLCAiX2YiLCAiX3ZhbHVlIiwgIlJlc3VsdEFzeW5jIiwgIl92IiwgIl9lcnIiLCAiXyIsICJjb25maWciLCAiY3JlYXRlTmV2ZXJUaHJvd0Vycm9yIiwgIkVyciIsICJlcnJvciIsICJlcnIiLCAiZXJyQXN5bmMiLCAidiIsICJfb2siLCAic2VsZiIsICJmcm9tVGhyb3dhYmxlIiwgIlJlc3VsdCIsICJCYXNlRXJyb3IiLCAibWVzc2FnZSIsICJvcHRpb25zIiwgImNhdXNlIiwgImNvbnRleHQiLCAiX19wdWJsaWNGaWVsZCIsICJlbnN1cmVFcnJvciIsICJ2YWx1ZSIsICJzdHJpbmdpZmllZCIsICJpbXBvcnRfZXZlbnRzIiwgImV2ZW50cyIsICJFdmVudEVtaXR0ZXIiLCAiaW5pdCIsICJldmVudHMiLCAiZXJyb3IiLCAiV29ya2VyRXJyb3IiLCAiQmFzZUVycm9yIiwgIldvcmtlclJlbW92ZUZhaWxlZEVycm9yIiwgIldvcmtlckVycm9yIiwgIl9fcHVibGljRmllbGQiLCAiaXNJbml0aWF0ZWQiLCAiZXZlbnQiLCAiaW5pdCIsICJyZW1vdmVGaWxlIiwgImVycm9yIiwgIndvcmtlck1lc3NhZ2UiLCAiUmVzdWx0QXN5bmMiLCAicmVzb2x2ZSIsICJyZWplY3QiLCAibHVmaUZpbGUiLCAicmVzcG9uc2UiLCAiV29ya2VyUmVtb3ZlRmFpbGVkRXJyb3IiLCAiZW5zdXJlRXJyb3IiXQp9Cg==
|