-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy path2121.f8b2efdc.iframe.bundle.js
3 lines (3 loc) · 127 KB
/
2121.f8b2efdc.iframe.bundle.js
1
2
3
/*! For license information please see 2121.f8b2efdc.iframe.bundle.js.LICENSE.txt */
(self.webpackChunkblockly_mooc=self.webpackChunkblockly_mooc||[]).push([[2121],{"./node_modules/classnames/index.js":(module,exports)=>{var __WEBPACK_AMD_DEFINE_RESULT__;!function(){"use strict";var hasOwn={}.hasOwnProperty;function classNames(){for(var classes=[],i=0;i<arguments.length;i++){var arg=arguments[i];if(arg){var argType=typeof arg;if("string"===argType||"number"===argType)classes.push(arg);else if(Array.isArray(arg)){if(arg.length){var inner=classNames.apply(null,arg);inner&&classes.push(inner)}}else if("object"===argType){if(arg.toString!==Object.prototype.toString&&!arg.toString.toString().includes("[native code]")){classes.push(arg.toString());continue}for(var key in arg)hasOwn.call(arg,key)&&arg[key]&&classes.push(key)}}}return classes.join(" ")}module.exports?(classNames.default=classNames,module.exports=classNames):void 0===(__WEBPACK_AMD_DEFINE_RESULT__=function(){return classNames}.apply(exports,[]))||(module.exports=__WEBPACK_AMD_DEFINE_RESULT__)}()},"./node_modules/lodash/_arrayEach.js":module=>{module.exports=function arrayEach(array,iteratee){for(var index=-1,length=null==array?0:array.length;++index<length&&!1!==iteratee(array[index],index,array););return array}},"./node_modules/lodash/_baseAssign.js":(module,__unused_webpack_exports,__webpack_require__)=>{var copyObject=__webpack_require__("./node_modules/lodash/_copyObject.js"),keys=__webpack_require__("./node_modules/lodash/keys.js");module.exports=function baseAssign(object,source){return object&©Object(source,keys(source),object)}},"./node_modules/lodash/_baseAssignIn.js":(module,__unused_webpack_exports,__webpack_require__)=>{var copyObject=__webpack_require__("./node_modules/lodash/_copyObject.js"),keysIn=__webpack_require__("./node_modules/lodash/keysIn.js");module.exports=function baseAssignIn(object,source){return object&©Object(source,keysIn(source),object)}},"./node_modules/lodash/_baseClone.js":(module,__unused_webpack_exports,__webpack_require__)=>{var Stack=__webpack_require__("./node_modules/lodash/_Stack.js"),arrayEach=__webpack_require__("./node_modules/lodash/_arrayEach.js"),assignValue=__webpack_require__("./node_modules/lodash/_assignValue.js"),baseAssign=__webpack_require__("./node_modules/lodash/_baseAssign.js"),baseAssignIn=__webpack_require__("./node_modules/lodash/_baseAssignIn.js"),cloneBuffer=__webpack_require__("./node_modules/lodash/_cloneBuffer.js"),copyArray=__webpack_require__("./node_modules/lodash/_copyArray.js"),copySymbols=__webpack_require__("./node_modules/lodash/_copySymbols.js"),copySymbolsIn=__webpack_require__("./node_modules/lodash/_copySymbolsIn.js"),getAllKeys=__webpack_require__("./node_modules/lodash/_getAllKeys.js"),getAllKeysIn=__webpack_require__("./node_modules/lodash/_getAllKeysIn.js"),getTag=__webpack_require__("./node_modules/lodash/_getTag.js"),initCloneArray=__webpack_require__("./node_modules/lodash/_initCloneArray.js"),initCloneByTag=__webpack_require__("./node_modules/lodash/_initCloneByTag.js"),initCloneObject=__webpack_require__("./node_modules/lodash/_initCloneObject.js"),isArray=__webpack_require__("./node_modules/lodash/isArray.js"),isBuffer=__webpack_require__("./node_modules/lodash/isBuffer.js"),isMap=__webpack_require__("./node_modules/lodash/isMap.js"),isObject=__webpack_require__("./node_modules/lodash/isObject.js"),isSet=__webpack_require__("./node_modules/lodash/isSet.js"),keys=__webpack_require__("./node_modules/lodash/keys.js"),keysIn=__webpack_require__("./node_modules/lodash/keysIn.js"),cloneableTags={};cloneableTags["[object Arguments]"]=cloneableTags["[object Array]"]=cloneableTags["[object ArrayBuffer]"]=cloneableTags["[object DataView]"]=cloneableTags["[object Boolean]"]=cloneableTags["[object Date]"]=cloneableTags["[object Float32Array]"]=cloneableTags["[object Float64Array]"]=cloneableTags["[object Int8Array]"]=cloneableTags["[object Int16Array]"]=cloneableTags["[object Int32Array]"]=cloneableTags["[object Map]"]=cloneableTags["[object Number]"]=cloneableTags["[object Object]"]=cloneableTags["[object RegExp]"]=cloneableTags["[object Set]"]=cloneableTags["[object String]"]=cloneableTags["[object Symbol]"]=cloneableTags["[object Uint8Array]"]=cloneableTags["[object Uint8ClampedArray]"]=cloneableTags["[object Uint16Array]"]=cloneableTags["[object Uint32Array]"]=!0,cloneableTags["[object Error]"]=cloneableTags["[object Function]"]=cloneableTags["[object WeakMap]"]=!1,module.exports=function baseClone(value,bitmask,customizer,key,object,stack){var result,isDeep=1&bitmask,isFlat=2&bitmask,isFull=4&bitmask;if(customizer&&(result=object?customizer(value,key,object,stack):customizer(value)),void 0!==result)return result;if(!isObject(value))return value;var isArr=isArray(value);if(isArr){if(result=initCloneArray(value),!isDeep)return copyArray(value,result)}else{var tag=getTag(value),isFunc="[object Function]"==tag||"[object GeneratorFunction]"==tag;if(isBuffer(value))return cloneBuffer(value,isDeep);if("[object Object]"==tag||"[object Arguments]"==tag||isFunc&&!object){if(result=isFlat||isFunc?{}:initCloneObject(value),!isDeep)return isFlat?copySymbolsIn(value,baseAssignIn(result,value)):copySymbols(value,baseAssign(result,value))}else{if(!cloneableTags[tag])return object?value:{};result=initCloneByTag(value,tag,isDeep)}}stack||(stack=new Stack);var stacked=stack.get(value);if(stacked)return stacked;stack.set(value,result),isSet(value)?value.forEach((function(subValue){result.add(baseClone(subValue,bitmask,customizer,subValue,value,stack))})):isMap(value)&&value.forEach((function(subValue,key){result.set(key,baseClone(subValue,bitmask,customizer,key,value,stack))}));var props=isArr?void 0:(isFull?isFlat?getAllKeysIn:getAllKeys:isFlat?keysIn:keys)(value);return arrayEach(props||value,(function(subValue,key){props&&(subValue=value[key=subValue]),assignValue(result,key,baseClone(subValue,bitmask,customizer,key,value,stack))})),result}},"./node_modules/lodash/_baseFindIndex.js":module=>{module.exports=function baseFindIndex(array,predicate,fromIndex,fromRight){for(var length=array.length,index=fromIndex+(fromRight?1:-1);fromRight?index--:++index<length;)if(predicate(array[index],index,array))return index;return-1}},"./node_modules/lodash/_baseIsMap.js":(module,__unused_webpack_exports,__webpack_require__)=>{var getTag=__webpack_require__("./node_modules/lodash/_getTag.js"),isObjectLike=__webpack_require__("./node_modules/lodash/isObjectLike.js");module.exports=function baseIsMap(value){return isObjectLike(value)&&"[object Map]"==getTag(value)}},"./node_modules/lodash/_baseIsSet.js":(module,__unused_webpack_exports,__webpack_require__)=>{var getTag=__webpack_require__("./node_modules/lodash/_getTag.js"),isObjectLike=__webpack_require__("./node_modules/lodash/isObjectLike.js");module.exports=function baseIsSet(value){return isObjectLike(value)&&"[object Set]"==getTag(value)}},"./node_modules/lodash/_baseTrim.js":(module,__unused_webpack_exports,__webpack_require__)=>{var trimmedEndIndex=__webpack_require__("./node_modules/lodash/_trimmedEndIndex.js"),reTrimStart=/^\s+/;module.exports=function baseTrim(string){return string?string.slice(0,trimmedEndIndex(string)+1).replace(reTrimStart,""):string}},"./node_modules/lodash/_cloneDataView.js":(module,__unused_webpack_exports,__webpack_require__)=>{var cloneArrayBuffer=__webpack_require__("./node_modules/lodash/_cloneArrayBuffer.js");module.exports=function cloneDataView(dataView,isDeep){var buffer=isDeep?cloneArrayBuffer(dataView.buffer):dataView.buffer;return new dataView.constructor(buffer,dataView.byteOffset,dataView.byteLength)}},"./node_modules/lodash/_cloneRegExp.js":module=>{var reFlags=/\w*$/;module.exports=function cloneRegExp(regexp){var result=new regexp.constructor(regexp.source,reFlags.exec(regexp));return result.lastIndex=regexp.lastIndex,result}},"./node_modules/lodash/_cloneSymbol.js":(module,__unused_webpack_exports,__webpack_require__)=>{var Symbol=__webpack_require__("./node_modules/lodash/_Symbol.js"),symbolProto=Symbol?Symbol.prototype:void 0,symbolValueOf=symbolProto?symbolProto.valueOf:void 0;module.exports=function cloneSymbol(symbol){return symbolValueOf?Object(symbolValueOf.call(symbol)):{}}},"./node_modules/lodash/_copySymbols.js":(module,__unused_webpack_exports,__webpack_require__)=>{var copyObject=__webpack_require__("./node_modules/lodash/_copyObject.js"),getSymbols=__webpack_require__("./node_modules/lodash/_getSymbols.js");module.exports=function copySymbols(source,object){return copyObject(source,getSymbols(source),object)}},"./node_modules/lodash/_copySymbolsIn.js":(module,__unused_webpack_exports,__webpack_require__)=>{var copyObject=__webpack_require__("./node_modules/lodash/_copyObject.js"),getSymbolsIn=__webpack_require__("./node_modules/lodash/_getSymbolsIn.js");module.exports=function copySymbolsIn(source,object){return copyObject(source,getSymbolsIn(source),object)}},"./node_modules/lodash/_createFind.js":(module,__unused_webpack_exports,__webpack_require__)=>{var baseIteratee=__webpack_require__("./node_modules/lodash/_baseIteratee.js"),isArrayLike=__webpack_require__("./node_modules/lodash/isArrayLike.js"),keys=__webpack_require__("./node_modules/lodash/keys.js");module.exports=function createFind(findIndexFunc){return function(collection,predicate,fromIndex){var iterable=Object(collection);if(!isArrayLike(collection)){var iteratee=baseIteratee(predicate,3);collection=keys(collection),predicate=function(key){return iteratee(iterable[key],key,iterable)}}var index=findIndexFunc(collection,predicate,fromIndex);return index>-1?iterable[iteratee?collection[index]:index]:void 0}}},"./node_modules/lodash/_initCloneArray.js":module=>{var hasOwnProperty=Object.prototype.hasOwnProperty;module.exports=function initCloneArray(array){var length=array.length,result=new array.constructor(length);return length&&"string"==typeof array[0]&&hasOwnProperty.call(array,"index")&&(result.index=array.index,result.input=array.input),result}},"./node_modules/lodash/_initCloneByTag.js":(module,__unused_webpack_exports,__webpack_require__)=>{var cloneArrayBuffer=__webpack_require__("./node_modules/lodash/_cloneArrayBuffer.js"),cloneDataView=__webpack_require__("./node_modules/lodash/_cloneDataView.js"),cloneRegExp=__webpack_require__("./node_modules/lodash/_cloneRegExp.js"),cloneSymbol=__webpack_require__("./node_modules/lodash/_cloneSymbol.js"),cloneTypedArray=__webpack_require__("./node_modules/lodash/_cloneTypedArray.js");module.exports=function initCloneByTag(object,tag,isDeep){var Ctor=object.constructor;switch(tag){case"[object ArrayBuffer]":return cloneArrayBuffer(object);case"[object Boolean]":case"[object Date]":return new Ctor(+object);case"[object DataView]":return cloneDataView(object,isDeep);case"[object Float32Array]":case"[object Float64Array]":case"[object Int8Array]":case"[object Int16Array]":case"[object Int32Array]":case"[object Uint8Array]":case"[object Uint8ClampedArray]":case"[object Uint16Array]":case"[object Uint32Array]":return cloneTypedArray(object,isDeep);case"[object Map]":case"[object Set]":return new Ctor;case"[object Number]":case"[object String]":return new Ctor(object);case"[object RegExp]":return cloneRegExp(object);case"[object Symbol]":return cloneSymbol(object)}}},"./node_modules/lodash/_trimmedEndIndex.js":module=>{var reWhitespace=/\s/;module.exports=function trimmedEndIndex(string){for(var index=string.length;index--&&reWhitespace.test(string.charAt(index)););return index}},"./node_modules/lodash/cloneDeep.js":(module,__unused_webpack_exports,__webpack_require__)=>{var baseClone=__webpack_require__("./node_modules/lodash/_baseClone.js");module.exports=function cloneDeep(value){return baseClone(value,5)}},"./node_modules/lodash/find.js":(module,__unused_webpack_exports,__webpack_require__)=>{var find=__webpack_require__("./node_modules/lodash/_createFind.js")(__webpack_require__("./node_modules/lodash/findIndex.js"));module.exports=find},"./node_modules/lodash/findIndex.js":(module,__unused_webpack_exports,__webpack_require__)=>{var baseFindIndex=__webpack_require__("./node_modules/lodash/_baseFindIndex.js"),baseIteratee=__webpack_require__("./node_modules/lodash/_baseIteratee.js"),toInteger=__webpack_require__("./node_modules/lodash/toInteger.js"),nativeMax=Math.max;module.exports=function findIndex(array,predicate,fromIndex){var length=null==array?0:array.length;if(!length)return-1;var index=null==fromIndex?0:toInteger(fromIndex);return index<0&&(index=nativeMax(length+index,0)),baseFindIndex(array,baseIteratee(predicate,3),index)}},"./node_modules/lodash/isMap.js":(module,__unused_webpack_exports,__webpack_require__)=>{var baseIsMap=__webpack_require__("./node_modules/lodash/_baseIsMap.js"),baseUnary=__webpack_require__("./node_modules/lodash/_baseUnary.js"),nodeUtil=__webpack_require__("./node_modules/lodash/_nodeUtil.js"),nodeIsMap=nodeUtil&&nodeUtil.isMap,isMap=nodeIsMap?baseUnary(nodeIsMap):baseIsMap;module.exports=isMap},"./node_modules/lodash/isSet.js":(module,__unused_webpack_exports,__webpack_require__)=>{var baseIsSet=__webpack_require__("./node_modules/lodash/_baseIsSet.js"),baseUnary=__webpack_require__("./node_modules/lodash/_baseUnary.js"),nodeUtil=__webpack_require__("./node_modules/lodash/_nodeUtil.js"),nodeIsSet=nodeUtil&&nodeUtil.isSet,isSet=nodeIsSet?baseUnary(nodeIsSet):baseIsSet;module.exports=isSet},"./node_modules/lodash/result.js":(module,__unused_webpack_exports,__webpack_require__)=>{var castPath=__webpack_require__("./node_modules/lodash/_castPath.js"),isFunction=__webpack_require__("./node_modules/lodash/isFunction.js"),toKey=__webpack_require__("./node_modules/lodash/_toKey.js");module.exports=function result(object,path,defaultValue){var index=-1,length=(path=castPath(path,object)).length;for(length||(length=1,object=void 0);++index<length;){var value=null==object?void 0:object[toKey(path[index])];void 0===value&&(index=length,value=defaultValue),object=isFunction(value)?value.call(object):value}return object}},"./node_modules/lodash/toFinite.js":(module,__unused_webpack_exports,__webpack_require__)=>{var toNumber=__webpack_require__("./node_modules/lodash/toNumber.js");module.exports=function toFinite(value){return value?Infinity===(value=toNumber(value))||-Infinity===value?17976931348623157e292*(value<0?-1:1):value==value?value:0:0===value?value:0}},"./node_modules/lodash/toInteger.js":(module,__unused_webpack_exports,__webpack_require__)=>{var toFinite=__webpack_require__("./node_modules/lodash/toFinite.js");module.exports=function toInteger(value){var result=toFinite(value),remainder=result%1;return result==result?remainder?result-remainder:result:0}},"./node_modules/lodash/toNumber.js":(module,__unused_webpack_exports,__webpack_require__)=>{var baseTrim=__webpack_require__("./node_modules/lodash/_baseTrim.js"),isObject=__webpack_require__("./node_modules/lodash/isObject.js"),isSymbol=__webpack_require__("./node_modules/lodash/isSymbol.js"),reIsBadHex=/^[-+]0x[0-9a-f]+$/i,reIsBinary=/^0b[01]+$/i,reIsOctal=/^0o[0-7]+$/i,freeParseInt=parseInt;module.exports=function toNumber(value){if("number"==typeof value)return value;if(isSymbol(value))return NaN;if(isObject(value)){var other="function"==typeof value.valueOf?value.valueOf():value;value=isObject(other)?other+"":other}if("string"!=typeof value)return 0===value?value:+value;value=baseTrim(value);var isBinary=reIsBinary.test(value);return isBinary||reIsOctal.test(value)?freeParseInt(value.slice(2),isBinary?2:8):reIsBadHex.test(value)?NaN:+value}},"./node_modules/sortabular/dist/by-column.js":(__unused_webpack_module,exports,__webpack_require__)=>{"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var _defaultOrder2=function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}(__webpack_require__("./node_modules/sortabular/dist/default-order.js"));exports.default=function byColumn(_ref){var sortingColumns=_ref.sortingColumns,_ref$sortingOrder=_ref.sortingOrder,sortingOrder=void 0===_ref$sortingOrder?_defaultOrder2.default:_ref$sortingOrder,_ref$selectedColumn=_ref.selectedColumn,selectedColumn=void 0===_ref$selectedColumn?-1:_ref$selectedColumn,sort=sortingOrder.FIRST;return selectedColumn<0?sortingColumns:sortingColumns&&{}.hasOwnProperty.call(sortingColumns,selectedColumn)&&!(sort=sortingOrder[sortingColumns[selectedColumn].direction])?{}:function _defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}({},selectedColumn,{direction:sort,position:0})}},"./node_modules/sortabular/dist/by-columns-prioritize-last-sorted.js":(__unused_webpack_module,exports,__webpack_require__)=>{"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var _cloneDeep3=_interopRequireDefault(__webpack_require__("./node_modules/lodash/cloneDeep.js")),_extends=Object.assign||function(target){for(var i=1;i<arguments.length;i++){var source=arguments[i];for(var key in source)Object.prototype.hasOwnProperty.call(source,key)&&(target[key]=source[key])}return target},_defaultOrder2=_interopRequireDefault(__webpack_require__("./node_modules/sortabular/dist/default-order.js"));function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}function _defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}exports.default=function byColumnsPrioritizeLastSorted(_ref){var sortingColumns=_ref.sortingColumns,_ref$sortingOrder=_ref.sortingOrder,sortingOrder=void 0===_ref$sortingOrder?_defaultOrder2.default:_ref$sortingOrder,_ref$selectedColumn=_ref.selectedColumn,selectedColumn=void 0===_ref$selectedColumn?-1:_ref$selectedColumn,newSortingColumns={};if(selectedColumn<0)return sortingColumns;if(!sortingColumns)return _defineProperty({},selectedColumn,{direction:sortingOrder.FIRST,position:0});if({}.hasOwnProperty.call(sortingColumns,selectedColumn)){var newSort=sortingOrder[(newSortingColumns=(0,_cloneDeep3.default)(sortingColumns))[selectedColumn].direction],oldPosition=newSortingColumns[selectedColumn].position;return newSort?(Object.keys(newSortingColumns).forEach((function(k){var v=newSortingColumns[k];v.position<oldPosition&&(v.position+=1)})),newSortingColumns[selectedColumn]={direction:newSort,position:0}):(delete newSortingColumns[selectedColumn],Object.keys(newSortingColumns).forEach((function(k){var v=newSortingColumns[k];v.position>oldPosition&&(v.position-=1)}))),newSortingColumns}return newSortingColumns=(0,_cloneDeep3.default)(sortingColumns),Object.keys(newSortingColumns).forEach((function(k){newSortingColumns[k].position+=1})),_extends({},newSortingColumns,_defineProperty({},selectedColumn,{direction:sortingOrder.FIRST,position:0}))}},"./node_modules/sortabular/dist/by-columns.js":(__unused_webpack_module,exports,__webpack_require__)=>{"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var _cloneDeep3=_interopRequireDefault(__webpack_require__("./node_modules/lodash/cloneDeep.js")),_extends=Object.assign||function(target){for(var i=1;i<arguments.length;i++){var source=arguments[i];for(var key in source)Object.prototype.hasOwnProperty.call(source,key)&&(target[key]=source[key])}return target},_defaultOrder2=_interopRequireDefault(__webpack_require__("./node_modules/sortabular/dist/default-order.js"));function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}function _defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}exports.default=function byColumns(_ref){var sortingColumns=_ref.sortingColumns,_ref$sortingOrder=_ref.sortingOrder,sortingOrder=void 0===_ref$sortingOrder?_defaultOrder2.default:_ref$sortingOrder,_ref$selectedColumn=_ref.selectedColumn,selectedColumn=void 0===_ref$selectedColumn?-1:_ref$selectedColumn,newSortingColumns={};if(selectedColumn<0)return sortingColumns;if(!sortingColumns)return _defineProperty({},selectedColumn,{direction:sortingOrder.FIRST,position:0});if({}.hasOwnProperty.call(sortingColumns,selectedColumn)){var newSort=sortingOrder[(newSortingColumns=(0,_cloneDeep3.default)(sortingColumns))[selectedColumn].direction];if(newSort)newSortingColumns[selectedColumn]={direction:newSort,position:newSortingColumns[selectedColumn].position};else{var oldPosition=newSortingColumns[selectedColumn].position;delete newSortingColumns[selectedColumn],Object.keys(newSortingColumns).forEach((function(k){var v=newSortingColumns[k];v.position>oldPosition&&(v.position-=1)}))}return newSortingColumns}return _extends({},sortingColumns,_defineProperty({},selectedColumn,{direction:sortingOrder.FIRST,position:Object.keys(sortingColumns).length}))}},"./node_modules/sortabular/dist/default-order.js":(__unused_webpack_module,exports)=>{"use strict";Object.defineProperty(exports,"__esModule",{value:!0});exports.default={FIRST:"asc","":"asc",asc:"desc",desc:""}},"./node_modules/sortabular/dist/default-strategy.js":(__unused_webpack_module,exports,__webpack_require__)=>{"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var _strategies2=function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}(__webpack_require__("./node_modules/sortabular/dist/strategies.js"));exports.default=_strategies2.default.byIndex},"./node_modules/sortabular/dist/header.js":(__unused_webpack_module,exports,__webpack_require__)=>{"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var _extends=Object.assign||function(target){for(var i=1;i<arguments.length;i++){var source=arguments[i];for(var key in source)Object.prototype.hasOwnProperty.call(source,key)&&(target[key]=source[key])}return target},_react2=_interopRequireDefault(__webpack_require__("./node_modules/react/index.js")),_defaultStrategy2=_interopRequireDefault(__webpack_require__("./node_modules/sortabular/dist/default-strategy.js")),_order2=_interopRequireDefault(__webpack_require__("./node_modules/sortabular/dist/order.js"));function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}exports.default=function header(_ref){var sortable=_ref.sortable,getSortingColumns=_ref.getSortingColumns,_ref$props=_ref.props,props=void 0===_ref$props?{container:{},value:{},order:{}}:_ref$props,_ref$strategy=_ref.strategy,strategy=void 0===_ref$strategy?_defaultStrategy2.default:_ref$strategy;if(!getSortingColumns)throw new Error("header - Missing getSortingColumns!");return function(value,extra){return _react2.default.createElement("div",_extends({className:"sort-container"},props.container),_react2.default.createElement("span",_extends({className:"sort-value"},props.value),value),(0,_order2.default)({getSortingColumns,props:props.order,strategy})(value,extra),sortable?_react2.default.createElement("span",sortable(value,extra)):null)}}},"./node_modules/sortabular/dist/index.js":(__unused_webpack_module,exports,__webpack_require__)=>{"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var _byColumn=__webpack_require__("./node_modules/sortabular/dist/by-column.js");Object.defineProperty(exports,"byColumn",{enumerable:!0,get:function get(){return _interopRequireDefault(_byColumn).default}});var _byColumns=__webpack_require__("./node_modules/sortabular/dist/by-columns.js");Object.defineProperty(exports,"byColumns",{enumerable:!0,get:function get(){return _interopRequireDefault(_byColumns).default}});var _byColumnsPrioritizeLastSorted=__webpack_require__("./node_modules/sortabular/dist/by-columns-prioritize-last-sorted.js");Object.defineProperty(exports,"byColumnsPrioritizeLastSorted",{enumerable:!0,get:function get(){return _interopRequireDefault(_byColumnsPrioritizeLastSorted).default}});var _header=__webpack_require__("./node_modules/sortabular/dist/header.js");Object.defineProperty(exports,"header",{enumerable:!0,get:function get(){return _interopRequireDefault(_header).default}});var _sorter=__webpack_require__("./node_modules/sortabular/dist/sorter.js");Object.defineProperty(exports,"sorter",{enumerable:!0,get:function get(){return _interopRequireDefault(_sorter).default}});var _reset=__webpack_require__("./node_modules/sortabular/dist/reset.js");Object.defineProperty(exports,"reset",{enumerable:!0,get:function get(){return _interopRequireDefault(_reset).default}});var _sort=__webpack_require__("./node_modules/sortabular/dist/sort.js");Object.defineProperty(exports,"sort",{enumerable:!0,get:function get(){return _interopRequireDefault(_sort).default}});var _strategies=__webpack_require__("./node_modules/sortabular/dist/strategies.js");Object.defineProperty(exports,"strategies",{enumerable:!0,get:function get(){return _interopRequireDefault(_strategies).default}});var _order=__webpack_require__("./node_modules/sortabular/dist/order.js");function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}Object.defineProperty(exports,"order",{enumerable:!0,get:function get(){return _interopRequireDefault(_order).default}})},"./node_modules/sortabular/dist/order.js":(__unused_webpack_module,exports,__webpack_require__)=>{"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var _extends=Object.assign||function(target){for(var i=1;i<arguments.length;i++){var source=arguments[i];for(var key in source)Object.prototype.hasOwnProperty.call(source,key)&&(target[key]=source[key])}return target},_react2=_interopRequireDefault(__webpack_require__("./node_modules/react/index.js")),_defaultStrategy2=_interopRequireDefault(__webpack_require__("./node_modules/sortabular/dist/default-strategy.js"));function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}exports.default=function order(_ref){var getSortingColumns=_ref.getSortingColumns,_ref$props=_ref.props,props=void 0===_ref$props?{}:_ref$props,_ref$strategy=_ref.strategy,strategy=void 0===_ref$strategy?_defaultStrategy2.default:_ref$strategy;if(!getSortingColumns)throw new Error("order - Missing getSortingColumns!");return function(value,extra){var sortingColumns=getSortingColumns(),sortingColumn=sortingColumns&&sortingColumns[extra[strategy.fieldName]]||{},sortingPosition=sortingColumn.position;return{}.hasOwnProperty.call(sortingColumn,"position")?_react2.default.createElement("span",_extends({className:"sort-order"},props),sortingPosition+1):null}}},"./node_modules/sortabular/dist/reset.js":(__unused_webpack_module,exports,__webpack_require__)=>{"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var _extends=Object.assign||function(target){for(var i=1;i<arguments.length;i++){var source=arguments[i];for(var key in source)Object.prototype.hasOwnProperty.call(source,key)&&(target[key]=source[key])}return target},_defaultStrategy2=function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}(__webpack_require__("./node_modules/sortabular/dist/default-strategy.js"));exports.default=function reset(_ref){var _ref$event=_ref.event,event=void 0===_ref$event?"onDoubleClick":_ref$event,_ref$getSortingColumn=_ref.getSortingColumns,getSortingColumns=void 0===_ref$getSortingColumn?function(){return[]}:_ref$getSortingColumn,_ref$onReset=_ref.onReset,onReset=void 0===_ref$onReset?function(){}:_ref$onReset,_ref$strategy=_ref.strategy,strategy=void 0===_ref$strategy?_defaultStrategy2.default:_ref$strategy;return function(value,extra){return function _defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}({},event,(function(){var sortingColumns=getSortingColumns();if(sortingColumns&&Object.keys(sortingColumns).length){var field=extra[strategy.fieldName];if(sortingColumns[field]){var position=sortingColumns[field].position,newSortingColumns={};delete sortingColumns[field],Object.keys(sortingColumns).forEach((function(k){var column=sortingColumns[k];column.position>position?newSortingColumns[k]=_extends({},column,{position:column.position-1}):newSortingColumns[k]=column})),onReset({sortingColumns:newSortingColumns})}}}))}}},"./node_modules/sortabular/dist/sort.js":(__unused_webpack_module,exports,__webpack_require__)=>{"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var _extends=Object.assign||function(target){for(var i=1;i<arguments.length;i++){var source=arguments[i];for(var key in source)Object.prototype.hasOwnProperty.call(source,key)&&(target[key]=source[key])}return target},_classnames2=_interopRequireDefault(__webpack_require__("./node_modules/classnames/index.js")),_defaultStrategy2=_interopRequireDefault(__webpack_require__("./node_modules/sortabular/dist/default-strategy.js"));function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}exports.default=function sort(){var _ref=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},_ref$event=_ref.event,event=void 0===_ref$event?"onClick":_ref$event,_ref$getSortingColumn=_ref.getSortingColumns,getSortingColumns=void 0===_ref$getSortingColumn?function(){return[]}:_ref$getSortingColumn,_ref$onSort=_ref.onSort,onSort=void 0===_ref$onSort?function(){}:_ref$onSort,_ref$strategy=_ref.strategy,strategy=void 0===_ref$strategy?_defaultStrategy2.default:_ref$strategy;return function(_value,extra){var _ref2=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},className=_ref2.className,props=function _objectWithoutProperties(obj,keys){var target={};for(var i in obj)keys.indexOf(i)>=0||Object.prototype.hasOwnProperty.call(obj,i)&&(target[i]=obj[i]);return target}(_ref2,["className"]),sortingColumns=getSortingColumns(),field=extra[strategy.fieldName],headerClass="sort sort-none";return void 0!==sortingColumns[field]&&(headerClass="sort sort-"+sortingColumns[field].direction),_extends({},props,function _defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}({className:(0,_classnames2.default)(className,headerClass)},event,(function(){return onSort(field)})))}}},"./node_modules/sortabular/dist/sorter.js":(__unused_webpack_module,exports,__webpack_require__)=>{"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var _result2=_interopRequireDefault(__webpack_require__("./node_modules/lodash/result.js")),_get2=_interopRequireDefault(__webpack_require__("./node_modules/lodash/get.js")),_defaultStrategy2=_interopRequireDefault(__webpack_require__("./node_modules/sortabular/dist/default-strategy.js"));function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}exports.default=function sorter(){var _ref=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},columns=_ref.columns,sortingColumns=_ref.sortingColumns,sort=_ref.sort,_ref$strategy=_ref.strategy,strategy=void 0===_ref$strategy?_defaultStrategy2.default:_ref$strategy;return function(data){if(!columns)throw new Error('sort.sorter - Missing "columns" argument!');if(!sort)throw new Error('sort.sorter - Missing "sort" argument!');if(!sortingColumns)return data;var columnIndexList=new Array(sortingColumns.length),orderList=new Array(sortingColumns.length);return Object.keys(sortingColumns).forEach((function(sortingColumnKey){var realColumn=strategy.getColumn(columns,sortingColumnKey)||{},sortingColumn=sortingColumns[sortingColumnKey];columnIndexList[sortingColumn.position]=function(row){var property=realColumn.property,value=row[property],resolvedValue=(0,_get2.default)(row,"_"+property,value);return(0,_result2.default)(resolvedValue,"toLowerCase",resolvedValue)},orderList[sortingColumn.position]=sortingColumn.direction})),sort(data,columnIndexList,orderList)}}},"./node_modules/sortabular/dist/strategies.js":(__unused_webpack_module,exports,__webpack_require__)=>{"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var _find3=function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}(__webpack_require__("./node_modules/lodash/find.js"));var byProperty={fieldName:"property",getColumn:function getColumn(columns,property){return(0,_find3.default)(columns,{property})}};exports.default={byIndex:{fieldName:"columnIndex",getColumn:function getColumn(columns,sortingColumnKey){return columns[sortingColumnKey]}},byProperty}}}]);
//# sourceMappingURL=data:application/json;charset=utf-8;base64,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ek0sU0FBU2tOLElBQUssSUFBTUMsU0FBVXJMLE9BRTVELE9BQU8sRUFBSTBLLFNBQVN4TSxTQUFTb04sY0FBZSxjQUFlQSxjQUM3RCxFQUVBTixVQUFVekIsY0FBY3hDLFVBQVl3QyxjQUFjN0MsU0FDcEQsSUFFT0YsS0FBS3NFLEtBQU1DLGdCQUFpQkMsVUFDckMsQ0FDRix1SEM5REF0TixPQUFPa0ksZUFBZTNILFFBQVMsYUFBYyxDQUMzQytCLE9BQU8sSUFHVCxJQUVJdUwsT0FFSixTQUFTekYsdUJBQXVCQyxLQUFPLE9BQU9BLEtBQU9BLElBQUlDLFdBQWFELElBQU0sQ0FBRTdILFFBQVM2SCxJQUFPLENBRmpGRCxDQUZBLG9CQUFRLGtDQU1yQixJQU9JMEYsV0FBYSxDQUNmaEMsVUFBVyxXQUNYMkIsVUFBVyxTQUFTQSxVQUFVTixRQUFTUSxVQUNyQyxPQUFPLEVBQUlFLE9BQU9yTixTQUFTMk0sUUFBUyxDQUFFUSxVQUN4QyxHQUdGcE4sUUFBQSxRQUFrQixDQUNoQjZKLFFBZlksQ0FDWjBCLFVBQVcsY0FDWDJCLFVBQVcsU0FBU0EsVUFBVU4sUUFBU0ksa0JBQ3JDLE9BQU9KLFFBQVFJLGlCQUNqQixHQVlBTyIsInNvdXJjZXMiOlsid2VicGFjazovL2Jsb2NrbHktbW9vYy8uL25vZGVfbW9kdWxlcy9jbGFzc25hbWVzL2luZGV4LmpzIiwid2VicGFjazovL2Jsb2NrbHktbW9vYy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2FycmF5RWFjaC5qcyIsIndlYnBhY2s6Ly9ibG9ja2x5LW1vb2MvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlQXNzaWduLmpzIiwid2VicGFjazovL2Jsb2NrbHktbW9vYy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VBc3NpZ25Jbi5qcyIsIndlYnBhY2s6Ly9ibG9ja2x5LW1vb2MvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlQ2xvbmUuanMiLCJ3ZWJwYWNrOi8vYmxvY2tseS1tb29jLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUZpbmRJbmRleC5qcyIsIndlYnBhY2s6Ly9ibG9ja2x5LW1vb2MvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSXNNYXAuanMiLCJ3ZWJwYWNrOi8vYmxvY2tseS1tb29jLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUlzU2V0LmpzIiwid2VicGFjazovL2Jsb2NrbHktbW9vYy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VUcmltLmpzIiwid2VicGFjazovL2Jsb2NrbHktbW9vYy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Nsb25lRGF0YVZpZXcuanMiLCJ3ZWJwYWNrOi8vYmxvY2tseS1tb29jLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY2xvbmVSZWdFeHAuanMiLCJ3ZWJwYWNrOi8vYmxvY2tseS1tb29jLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY2xvbmVTeW1ib2wuanMiLCJ3ZWJwYWNrOi8vYmxvY2tseS1tb29jLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY29weVN5bWJvbHMuanMiLCJ3ZWJwYWNrOi8vYmxvY2tseS1tb29jLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY29weVN5bWJvbHNJbi5qcyIsIndlYnBhY2s6Ly9ibG9ja2x5LW1vb2MvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jcmVhdGVGaW5kLmpzIiwid2VicGFjazovL2Jsb2NrbHktbW9vYy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2luaXRDbG9uZUFycmF5LmpzIiwid2VicGFjazovL2Jsb2NrbHktbW9vYy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2luaXRDbG9uZUJ5VGFnLmpzIiwid2VicGFjazovL2Jsb2NrbHktbW9vYy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3RyaW1tZWRFbmRJbmRleC5qcyIsIndlYnBhY2s6Ly9ibG9ja2x5LW1vb2MvLi9ub2RlX21vZHVsZXMvbG9kYXNoL2Nsb25lRGVlcC5qcyIsIndlYnBhY2s6Ly9ibG9ja2x5LW1vb2MvLi9ub2RlX21vZHVsZXMvbG9kYXNoL2ZpbmQuanMiLCJ3ZWJwYWNrOi8vYmxvY2tseS1tb29jLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9maW5kSW5kZXguanMiLCJ3ZWJwYWNrOi8vYmxvY2tseS1tb29jLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc01hcC5qcyIsIndlYnBhY2s6Ly9ibG9ja2x5LW1vb2MvLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzU2V0LmpzIiwid2VicGFjazovL2Jsb2NrbHktbW9vYy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvcmVzdWx0LmpzIiwid2VicGFjazovL2Jsb2NrbHktbW9vYy8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvdG9GaW5pdGUuanMiLCJ3ZWJwYWNrOi8vYmxvY2tseS1tb29jLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC90b0ludGVnZXIuanMiLCJ3ZWJwYWNrOi8vYmxvY2tseS1tb29jLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC90b051bWJlci5qcyIsIndlYnBhY2s6Ly9ibG9ja2x5LW1vb2MvLi9ub2RlX21vZHVsZXMvc29ydGFidWxhci9kaXN0L2J5LWNvbHVtbi5qcyIsIndlYnBhY2s6Ly9ibG9ja2x5LW1vb2MvLi9ub2RlX21vZHVsZXMvc29ydGFidWxhci9kaXN0L2J5LWNvbHVtbnMtcHJpb3JpdGl6ZS1sYXN0LXNvcnRlZC5qcyIsIndlYnBhY2s6Ly9ibG9ja2x5LW1vb2MvLi9ub2RlX21vZHVsZXMvc29ydGFidWxhci9kaXN0L2J5LWNvbHVtbnMuanMiLCJ3ZWJwYWNrOi8vYmxvY2tseS1tb29jLy4vbm9kZV9tb2R1bGVzL3NvcnRhYnVsYXIvZGlzdC9kZWZhdWx0LW9yZGVyLmpzIiwid2VicGFjazovL2Jsb2NrbHktbW9vYy8uL25vZGVfbW9kdWxlcy9zb3J0YWJ1bGFyL2Rpc3QvZGVmYXVsdC1zdHJhdGVneS5qcyIsIndlYnBhY2s6Ly9ibG9ja2x5LW1vb2MvLi9ub2RlX21vZHVsZXMvc29ydGFidWxhci9kaXN0L2hlYWRlci5qcyIsIndlYnBhY2s6Ly9ibG9ja2x5LW1vb2MvLi9ub2RlX21vZHVsZXMvc29ydGFidWxhci9kaXN0L2luZGV4LmpzIiwid2VicGFjazovL2Jsb2NrbHktbW9vYy8uL25vZGVfbW9kdWxlcy9zb3J0YWJ1bGFyL2Rpc3Qvb3JkZXIuanMiLCJ3ZWJwYWNrOi8vYmxvY2tseS1tb29jLy4vbm9kZV9tb2R1bGVzL3NvcnRhYnVsYXIvZGlzdC9yZXNldC5qcyIsIndlYnBhY2s6Ly9ibG9ja2x5LW1vb2MvLi9ub2RlX21vZHVsZXMvc29ydGFidWxhci9kaXN0L3NvcnQuanMiLCJ3ZWJwYWNrOi8vYmxvY2tseS1tb29jLy4vbm9kZV9tb2R1bGVzL3NvcnRhYnVsYXIvZGlzdC9zb3J0ZXIuanMiLCJ3ZWJwYWNrOi8vYmxvY2tseS1tb29jLy4vbm9kZV9tb2R1bGVzL3NvcnRhYnVsYXIvZGlzdC9zdHJhdGVnaWVzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIVxuXHRDb3B5cmlnaHQgKGMpIDIwMTggSmVkIFdhdHNvbi5cblx0TGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlIChNSVQpLCBzZWVcblx0aHR0cDovL2plZHdhdHNvbi5naXRodWIuaW8vY2xhc3NuYW1lc1xuKi9cbi8qIGdsb2JhbCBkZWZpbmUgKi9cblxuKGZ1bmN0aW9uICgpIHtcblx0J3VzZSBzdHJpY3QnO1xuXG5cdHZhciBoYXNPd24gPSB7fS5oYXNPd25Qcm9wZXJ0eTtcblx0dmFyIG5hdGl2ZUNvZGVTdHJpbmcgPSAnW25hdGl2ZSBjb2RlXSc7XG5cblx0ZnVuY3Rpb24gY2xhc3NOYW1lcygpIHtcblx0XHR2YXIgY2xhc3NlcyA9IFtdO1xuXG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdHZhciBhcmcgPSBhcmd1bWVudHNbaV07XG5cdFx0XHRpZiAoIWFyZykgY29udGludWU7XG5cblx0XHRcdHZhciBhcmdUeXBlID0gdHlwZW9mIGFyZztcblxuXHRcdFx0aWYgKGFyZ1R5cGUgPT09ICdzdHJpbmcnIHx8IGFyZ1R5cGUgPT09ICdudW1iZXInKSB7XG5cdFx0XHRcdGNsYXNzZXMucHVzaChhcmcpO1xuXHRcdFx0fSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGFyZykpIHtcblx0XHRcdFx0aWYgKGFyZy5sZW5ndGgpIHtcblx0XHRcdFx0XHR2YXIgaW5uZXIgPSBjbGFzc05hbWVzLmFwcGx5KG51bGwsIGFyZyk7XG5cdFx0XHRcdFx0aWYgKGlubmVyKSB7XG5cdFx0XHRcdFx0XHRjbGFzc2VzLnB1c2goaW5uZXIpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmIChhcmdUeXBlID09PSAnb2JqZWN0Jykge1xuXHRcdFx0XHRpZiAoYXJnLnRvU3RyaW5nICE9PSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nICYmICFhcmcudG9TdHJpbmcudG9TdHJpbmcoKS5pbmNsdWRlcygnW25hdGl2ZSBjb2RlXScpKSB7XG5cdFx0XHRcdFx0Y2xhc3Nlcy5wdXNoKGFyZy50b1N0cmluZygpKTtcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGZvciAodmFyIGtleSBpbiBhcmcpIHtcblx0XHRcdFx0XHRpZiAoaGFzT3duLmNhbGwoYXJnLCBrZXkpICYmIGFyZ1trZXldKSB7XG5cdFx0XHRcdFx0XHRjbGFzc2VzLnB1c2goa2V5KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gY2xhc3Nlcy5qb2luKCcgJyk7XG5cdH1cblxuXHRpZiAodHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbW9kdWxlLmV4cG9ydHMpIHtcblx0XHRjbGFzc05hbWVzLmRlZmF1bHQgPSBjbGFzc05hbWVzO1xuXHRcdG1vZHVsZS5leHBvcnRzID0gY2xhc3NOYW1lcztcblx0fSBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBkZWZpbmUuYW1kID09PSAnb2JqZWN0JyAmJiBkZWZpbmUuYW1kKSB7XG5cdFx0Ly8gcmVnaXN0ZXIgYXMgJ2NsYXNzbmFtZXMnLCBjb25zaXN0ZW50IHdpdGggbnBtIHBhY2thZ2UgbmFtZVxuXHRcdGRlZmluZSgnY2xhc3NuYW1lcycsIFtdLCBmdW5jdGlvbiAoKSB7XG5cdFx0XHRyZXR1cm4gY2xhc3NOYW1lcztcblx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHR3aW5kb3cuY2xhc3NOYW1lcyA9IGNsYXNzTmFtZXM7XG5cdH1cbn0oKSk7XG4iLCIvKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5mb3JFYWNoYCBmb3IgYXJyYXlzIHdpdGhvdXQgc3VwcG9ydCBmb3JcbiAqIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IFthcnJheV0gVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgYGFycmF5YC5cbiAqL1xuZnVuY3Rpb24gYXJyYXlFYWNoKGFycmF5LCBpdGVyYXRlZSkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgaWYgKGl0ZXJhdGVlKGFycmF5W2luZGV4XSwgaW5kZXgsIGFycmF5KSA9PT0gZmFsc2UpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gYXJyYXk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXJyYXlFYWNoO1xuIiwidmFyIGNvcHlPYmplY3QgPSByZXF1aXJlKCcuL19jb3B5T2JqZWN0JyksXG4gICAga2V5cyA9IHJlcXVpcmUoJy4va2V5cycpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmFzc2lnbmAgd2l0aG91dCBzdXBwb3J0IGZvciBtdWx0aXBsZSBzb3VyY2VzXG4gKiBvciBgY3VzdG9taXplcmAgZnVuY3Rpb25zLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBkZXN0aW5hdGlvbiBvYmplY3QuXG4gKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBzb3VyY2Ugb2JqZWN0LlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAqL1xuZnVuY3Rpb24gYmFzZUFzc2lnbihvYmplY3QsIHNvdXJjZSkge1xuICByZXR1cm4gb2JqZWN0ICYmIGNvcHlPYmplY3Qoc291cmNlLCBrZXlzKHNvdXJjZSksIG9iamVjdCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUFzc2lnbjtcbiIsInZhciBjb3B5T2JqZWN0ID0gcmVxdWlyZSgnLi9fY29weU9iamVjdCcpLFxuICAgIGtleXNJbiA9IHJlcXVpcmUoJy4va2V5c0luJyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uYXNzaWduSW5gIHdpdGhvdXQgc3VwcG9ydCBmb3IgbXVsdGlwbGUgc291cmNlc1xuICogb3IgYGN1c3RvbWl6ZXJgIGZ1bmN0aW9ucy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgZGVzdGluYXRpb24gb2JqZWN0LlxuICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgc291cmNlIG9iamVjdC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VBc3NpZ25JbihvYmplY3QsIHNvdXJjZSkge1xuICByZXR1cm4gb2JqZWN0ICYmIGNvcHlPYmplY3Qoc291cmNlLCBrZXlzSW4oc291cmNlKSwgb2JqZWN0KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlQXNzaWduSW47XG4iLCJ2YXIgU3RhY2sgPSByZXF1aXJlKCcuL19TdGFjaycpLFxuICAgIGFycmF5RWFjaCA9IHJlcXVpcmUoJy4vX2FycmF5RWFjaCcpLFxuICAgIGFzc2lnblZhbHVlID0gcmVxdWlyZSgnLi9fYXNzaWduVmFsdWUnKSxcbiAgICBiYXNlQXNzaWduID0gcmVxdWlyZSgnLi9fYmFzZUFzc2lnbicpLFxuICAgIGJhc2VBc3NpZ25JbiA9IHJlcXVpcmUoJy4vX2Jhc2VBc3NpZ25JbicpLFxuICAgIGNsb25lQnVmZmVyID0gcmVxdWlyZSgnLi9fY2xvbmVCdWZmZXInKSxcbiAgICBjb3B5QXJyYXkgPSByZXF1aXJlKCcuL19jb3B5QXJyYXknKSxcbiAgICBjb3B5U3ltYm9scyA9IHJlcXVpcmUoJy4vX2NvcHlTeW1ib2xzJyksXG4gICAgY29weVN5bWJvbHNJbiA9IHJlcXVpcmUoJy4vX2NvcHlTeW1ib2xzSW4nKSxcbiAgICBnZXRBbGxLZXlzID0gcmVxdWlyZSgnLi9fZ2V0QWxsS2V5cycpLFxuICAgIGdldEFsbEtleXNJbiA9IHJlcXVpcmUoJy4vX2dldEFsbEtleXNJbicpLFxuICAgIGdldFRhZyA9IHJlcXVpcmUoJy4vX2dldFRhZycpLFxuICAgIGluaXRDbG9uZUFycmF5ID0gcmVxdWlyZSgnLi9faW5pdENsb25lQXJyYXknKSxcbiAgICBpbml0Q2xvbmVCeVRhZyA9IHJlcXVpcmUoJy4vX2luaXRDbG9uZUJ5VGFnJyksXG4gICAgaW5pdENsb25lT2JqZWN0ID0gcmVxdWlyZSgnLi9faW5pdENsb25lT2JqZWN0JyksXG4gICAgaXNBcnJheSA9IHJlcXVpcmUoJy4vaXNBcnJheScpLFxuICAgIGlzQnVmZmVyID0gcmVxdWlyZSgnLi9pc0J1ZmZlcicpLFxuICAgIGlzTWFwID0gcmVxdWlyZSgnLi9pc01hcCcpLFxuICAgIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9pc09iamVjdCcpLFxuICAgIGlzU2V0ID0gcmVxdWlyZSgnLi9pc1NldCcpLFxuICAgIGtleXMgPSByZXF1aXJlKCcuL2tleXMnKSxcbiAgICBrZXlzSW4gPSByZXF1aXJlKCcuL2tleXNJbicpO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciBjbG9uaW5nLiAqL1xudmFyIENMT05FX0RFRVBfRkxBRyA9IDEsXG4gICAgQ0xPTkVfRkxBVF9GTEFHID0gMixcbiAgICBDTE9ORV9TWU1CT0xTX0ZMQUcgPSA0O1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgYXJnc1RhZyA9ICdbb2JqZWN0IEFyZ3VtZW50c10nLFxuICAgIGFycmF5VGFnID0gJ1tvYmplY3QgQXJyYXldJyxcbiAgICBib29sVGFnID0gJ1tvYmplY3QgQm9vbGVhbl0nLFxuICAgIGRhdGVUYWcgPSAnW29iamVjdCBEYXRlXScsXG4gICAgZXJyb3JUYWcgPSAnW29iamVjdCBFcnJvcl0nLFxuICAgIGZ1bmNUYWcgPSAnW29iamVjdCBGdW5jdGlvbl0nLFxuICAgIGdlblRhZyA9ICdbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXScsXG4gICAgbWFwVGFnID0gJ1tvYmplY3QgTWFwXScsXG4gICAgbnVtYmVyVGFnID0gJ1tvYmplY3QgTnVtYmVyXScsXG4gICAgb2JqZWN0VGFnID0gJ1tvYmplY3QgT2JqZWN0XScsXG4gICAgcmVnZXhwVGFnID0gJ1tvYmplY3QgUmVnRXhwXScsXG4gICAgc2V0VGFnID0gJ1tvYmplY3QgU2V0XScsXG4gICAgc3RyaW5nVGFnID0gJ1tvYmplY3QgU3RyaW5nXScsXG4gICAgc3ltYm9sVGFnID0gJ1tvYmplY3QgU3ltYm9sXScsXG4gICAgd2Vha01hcFRhZyA9ICdbb2JqZWN0IFdlYWtNYXBdJztcblxudmFyIGFycmF5QnVmZmVyVGFnID0gJ1tvYmplY3QgQXJyYXlCdWZmZXJdJyxcbiAgICBkYXRhVmlld1RhZyA9ICdbb2JqZWN0IERhdGFWaWV3XScsXG4gICAgZmxvYXQzMlRhZyA9ICdbb2JqZWN0IEZsb2F0MzJBcnJheV0nLFxuICAgIGZsb2F0NjRUYWcgPSAnW29iamVjdCBGbG9hdDY0QXJyYXldJyxcbiAgICBpbnQ4VGFnID0gJ1tvYmplY3QgSW50OEFycmF5XScsXG4gICAgaW50MTZUYWcgPSAnW29iamVjdCBJbnQxNkFycmF5XScsXG4gICAgaW50MzJUYWcgPSAnW29iamVjdCBJbnQzMkFycmF5XScsXG4gICAgdWludDhUYWcgPSAnW29iamVjdCBVaW50OEFycmF5XScsXG4gICAgdWludDhDbGFtcGVkVGFnID0gJ1tvYmplY3QgVWludDhDbGFtcGVkQXJyYXldJyxcbiAgICB1aW50MTZUYWcgPSAnW29iamVjdCBVaW50MTZBcnJheV0nLFxuICAgIHVpbnQzMlRhZyA9ICdbb2JqZWN0IFVpbnQzMkFycmF5XSc7XG5cbi8qKiBVc2VkIHRvIGlkZW50aWZ5IGB0b1N0cmluZ1RhZ2AgdmFsdWVzIHN1cHBvcnRlZCBieSBgXy5jbG9uZWAuICovXG52YXIgY2xvbmVhYmxlVGFncyA9IHt9O1xuY2xvbmVhYmxlVGFnc1thcmdzVGFnXSA9IGNsb25lYWJsZVRhZ3NbYXJyYXlUYWddID1cbmNsb25lYWJsZVRhZ3NbYXJyYXlCdWZmZXJUYWddID0gY2xvbmVhYmxlVGFnc1tkYXRhVmlld1RhZ10gPVxuY2xvbmVhYmxlVGFnc1tib29sVGFnXSA9IGNsb25lYWJsZVRhZ3NbZGF0ZVRhZ10gPVxuY2xvbmVhYmxlVGFnc1tmbG9hdDMyVGFnXSA9IGNsb25lYWJsZVRhZ3NbZmxvYXQ2NFRhZ10gPVxuY2xvbmVhYmxlVGFnc1tpbnQ4VGFnXSA9IGNsb25lYWJsZVRhZ3NbaW50MTZUYWddID1cbmNsb25lYWJsZVRhZ3NbaW50MzJUYWddID0gY2xvbmVhYmxlVGFnc1ttYXBUYWddID1cbmNsb25lYWJsZVRhZ3NbbnVtYmVyVGFnXSA9IGNsb25lYWJsZVRhZ3Nbb2JqZWN0VGFnXSA9XG5jbG9uZWFibGVUYWdzW3JlZ2V4cFRhZ10gPSBjbG9uZWFibGVUYWdzW3NldFRhZ10gPVxuY2xvbmVhYmxlVGFnc1tzdHJpbmdUYWddID0gY2xvbmVhYmxlVGFnc1tzeW1ib2xUYWddID1cbmNsb25lYWJsZVRhZ3NbdWludDhUYWddID0gY2xvbmVhYmxlVGFnc1t1aW50OENsYW1wZWRUYWddID1cbmNsb25lYWJsZVRhZ3NbdWludDE2VGFnXSA9IGNsb25lYWJsZVRhZ3NbdWludDMyVGFnXSA9IHRydWU7XG5jbG9uZWFibGVUYWdzW2Vycm9yVGFnXSA9IGNsb25lYWJsZVRhZ3NbZnVuY1RhZ10gPVxuY2xvbmVhYmxlVGFnc1t3ZWFrTWFwVGFnXSA9IGZhbHNlO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmNsb25lYCBhbmQgYF8uY2xvbmVEZWVwYCB3aGljaCB0cmFja3NcbiAqIHRyYXZlcnNlZCBvYmplY3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjbG9uZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy5cbiAqICAxIC0gRGVlcCBjbG9uZVxuICogIDIgLSBGbGF0dGVuIGluaGVyaXRlZCBwcm9wZXJ0aWVzXG4gKiAgNCAtIENsb25lIHN5bWJvbHNcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNsb25pbmcuXG4gKiBAcGFyYW0ge3N0cmluZ30gW2tleV0gVGhlIGtleSBvZiBgdmFsdWVgLlxuICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3RdIFRoZSBwYXJlbnQgb2JqZWN0IG9mIGB2YWx1ZWAuXG4gKiBAcGFyYW0ge09iamVjdH0gW3N0YWNrXSBUcmFja3MgdHJhdmVyc2VkIG9iamVjdHMgYW5kIHRoZWlyIGNsb25lIGNvdW50ZXJwYXJ0cy5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBjbG9uZWQgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGJhc2VDbG9uZSh2YWx1ZSwgYml0bWFzaywgY3VzdG9taXplciwga2V5LCBvYmplY3QsIHN0YWNrKSB7XG4gIHZhciByZXN1bHQsXG4gICAgICBpc0RlZXAgPSBiaXRtYXNrICYgQ0xPTkVfREVFUF9GTEFHLFxuICAgICAgaXNGbGF0ID0gYml0bWFzayAmIENMT05FX0ZMQVRfRkxBRyxcbiAgICAgIGlzRnVsbCA9IGJpdG1hc2sgJiBDTE9ORV9TWU1CT0xTX0ZMQUc7XG5cbiAgaWYgKGN1c3RvbWl6ZXIpIHtcbiAgICByZXN1bHQgPSBvYmplY3QgPyBjdXN0b21pemVyKHZhbHVlLCBrZXksIG9iamVjdCwgc3RhY2spIDogY3VzdG9taXplcih2YWx1ZSk7XG4gIH1cbiAgaWYgKHJlc3VsdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICBpZiAoIWlzT2JqZWN0KHZhbHVlKSkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICB2YXIgaXNBcnIgPSBpc0FycmF5KHZhbHVlKTtcbiAgaWYgKGlzQXJyKSB7XG4gICAgcmVzdWx0ID0gaW5pdENsb25lQXJyYXkodmFsdWUpO1xuICAgIGlmICghaXNEZWVwKSB7XG4gICAgICByZXR1cm4gY29weUFycmF5KHZhbHVlLCByZXN1bHQpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB2YXIgdGFnID0gZ2V0VGFnKHZhbHVlKSxcbiAgICAgICAgaXNGdW5jID0gdGFnID09IGZ1bmNUYWcgfHwgdGFnID09IGdlblRhZztcblxuICAgIGlmIChpc0J1ZmZlcih2YWx1ZSkpIHtcbiAgICAgIHJldHVybiBjbG9uZUJ1ZmZlcih2YWx1ZSwgaXNEZWVwKTtcbiAgICB9XG4gICAgaWYgKHRhZyA9PSBvYmplY3RUYWcgfHwgdGFnID09IGFyZ3NUYWcgfHwgKGlzRnVuYyAmJiAhb2JqZWN0KSkge1xuICAgICAgcmVzdWx0ID0gKGlzRmxhdCB8fCBpc0Z1bmMpID8ge30gOiBpbml0Q2xvbmVPYmplY3QodmFsdWUpO1xuICAgICAgaWYgKCFpc0RlZXApIHtcbiAgICAgICAgcmV0dXJuIGlzRmxhdFxuICAgICAgICAgID8gY29weVN5bWJvbHNJbih2YWx1ZSwgYmFzZUFzc2lnbkluKHJlc3VsdCwgdmFsdWUpKVxuICAgICAgICAgIDogY29weVN5bWJvbHModmFsdWUsIGJhc2VBc3NpZ24ocmVzdWx0LCB2YWx1ZSkpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIWNsb25lYWJsZVRhZ3NbdGFnXSkge1xuICAgICAgICByZXR1cm4gb2JqZWN0ID8gdmFsdWUgOiB7fTtcbiAgICAgIH1cbiAgICAgIHJlc3VsdCA9IGluaXRDbG9uZUJ5VGFnKHZhbHVlLCB0YWcsIGlzRGVlcCk7XG4gICAgfVxuICB9XG4gIC8vIENoZWNrIGZvciBjaXJjdWxhciByZWZlcmVuY2VzIGFuZCByZXR1cm4gaXRzIGNvcnJlc3BvbmRpbmcgY2xvbmUuXG4gIHN0YWNrIHx8IChzdGFjayA9IG5ldyBTdGFjayk7XG4gIHZhciBzdGFja2VkID0gc3RhY2suZ2V0KHZhbHVlKTtcbiAgaWYgKHN0YWNrZWQpIHtcbiAgICByZXR1cm4gc3RhY2tlZDtcbiAgfVxuICBzdGFjay5zZXQodmFsdWUsIHJlc3VsdCk7XG5cbiAgaWYgKGlzU2V0KHZhbHVlKSkge1xuICAgIHZhbHVlLmZvckVhY2goZnVuY3Rpb24oc3ViVmFsdWUpIHtcbiAgICAgIHJlc3VsdC5hZGQoYmFzZUNsb25lKHN1YlZhbHVlLCBiaXRtYXNrLCBjdXN0b21pemVyLCBzdWJWYWx1ZSwgdmFsdWUsIHN0YWNrKSk7XG4gICAgfSk7XG4gIH0gZWxzZSBpZiAoaXNNYXAodmFsdWUpKSB7XG4gICAgdmFsdWUuZm9yRWFjaChmdW5jdGlvbihzdWJWYWx1ZSwga2V5KSB7XG4gICAgICByZXN1bHQuc2V0KGtleSwgYmFzZUNsb25lKHN1YlZhbHVlLCBiaXRtYXNrLCBjdXN0b21pemVyLCBrZXksIHZhbHVlLCBzdGFjaykpO1xuICAgIH0pO1xuICB9XG5cbiAgdmFyIGtleXNGdW5jID0gaXNGdWxsXG4gICAgPyAoaXNGbGF0ID8gZ2V0QWxsS2V5c0luIDogZ2V0QWxsS2V5cylcbiAgICA6IChpc0ZsYXQgPyBrZXlzSW4gOiBrZXlzKTtcblxuICB2YXIgcHJvcHMgPSBpc0FyciA/IHVuZGVmaW5lZCA6IGtleXNGdW5jKHZhbHVlKTtcbiAgYXJyYXlFYWNoKHByb3BzIHx8IHZhbHVlLCBmdW5jdGlvbihzdWJWYWx1ZSwga2V5KSB7XG4gICAgaWYgKHByb3BzKSB7XG4gICAgICBrZXkgPSBzdWJWYWx1ZTtcbiAgICAgIHN1YlZhbHVlID0gdmFsdWVba2V5XTtcbiAgICB9XG4gICAgLy8gUmVjdXJzaXZlbHkgcG9wdWxhdGUgY2xvbmUgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cbiAgICBhc3NpZ25WYWx1ZShyZXN1bHQsIGtleSwgYmFzZUNsb25lKHN1YlZhbHVlLCBiaXRtYXNrLCBjdXN0b21pemVyLCBrZXksIHZhbHVlLCBzdGFjaykpO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlQ2xvbmU7XG4iLCIvKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmZpbmRJbmRleGAgYW5kIGBfLmZpbmRMYXN0SW5kZXhgIHdpdGhvdXRcbiAqIHN1cHBvcnQgZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcHJlZGljYXRlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcGFyYW0ge251bWJlcn0gZnJvbUluZGV4IFRoZSBpbmRleCB0byBzZWFyY2ggZnJvbS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2Zyb21SaWdodF0gU3BlY2lmeSBpdGVyYXRpbmcgZnJvbSByaWdodCB0byBsZWZ0LlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIG1hdGNoZWQgdmFsdWUsIGVsc2UgYC0xYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUZpbmRJbmRleChhcnJheSwgcHJlZGljYXRlLCBmcm9tSW5kZXgsIGZyb21SaWdodCkge1xuICB2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoLFxuICAgICAgaW5kZXggPSBmcm9tSW5kZXggKyAoZnJvbVJpZ2h0ID8gMSA6IC0xKTtcblxuICB3aGlsZSAoKGZyb21SaWdodCA/IGluZGV4LS0gOiArK2luZGV4IDwgbGVuZ3RoKSkge1xuICAgIGlmIChwcmVkaWNhdGUoYXJyYXlbaW5kZXhdLCBpbmRleCwgYXJyYXkpKSB7XG4gICAgICByZXR1cm4gaW5kZXg7XG4gICAgfVxuICB9XG4gIHJldHVybiAtMTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlRmluZEluZGV4O1xuIiwidmFyIGdldFRhZyA9IHJlcXVpcmUoJy4vX2dldFRhZycpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBtYXBUYWcgPSAnW29iamVjdCBNYXBdJztcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc01hcGAgd2l0aG91dCBOb2RlLmpzIG9wdGltaXphdGlvbnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBtYXAsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUlzTWFwKHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGdldFRhZyh2YWx1ZSkgPT0gbWFwVGFnO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VJc01hcDtcbiIsInZhciBnZXRUYWcgPSByZXF1aXJlKCcuL19nZXRUYWcnKSxcbiAgICBpc09iamVjdExpa2UgPSByZXF1aXJlKCcuL2lzT2JqZWN0TGlrZScpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgc2V0VGFnID0gJ1tvYmplY3QgU2V0XSc7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNTZXRgIHdpdGhvdXQgTm9kZS5qcyBvcHRpbWl6YXRpb25zLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgc2V0LCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VJc1NldCh2YWx1ZSkge1xuICByZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBnZXRUYWcodmFsdWUpID09IHNldFRhZztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlSXNTZXQ7XG4iLCJ2YXIgdHJpbW1lZEVuZEluZGV4ID0gcmVxdWlyZSgnLi9fdHJpbW1lZEVuZEluZGV4Jyk7XG5cbi8qKiBVc2VkIHRvIG1hdGNoIGxlYWRpbmcgd2hpdGVzcGFjZS4gKi9cbnZhciByZVRyaW1TdGFydCA9IC9eXFxzKy87XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udHJpbWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmcgVGhlIHN0cmluZyB0byB0cmltLlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgdHJpbW1lZCBzdHJpbmcuXG4gKi9cbmZ1bmN0aW9uIGJhc2VUcmltKHN0cmluZykge1xuICByZXR1cm4gc3RyaW5nXG4gICAgPyBzdHJpbmcuc2xpY2UoMCwgdHJpbW1lZEVuZEluZGV4KHN0cmluZykgKyAxKS5yZXBsYWNlKHJlVHJpbVN0YXJ0LCAnJylcbiAgICA6IHN0cmluZztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlVHJpbTtcbiIsInZhciBjbG9uZUFycmF5QnVmZmVyID0gcmVxdWlyZSgnLi9fY2xvbmVBcnJheUJ1ZmZlcicpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiBgZGF0YVZpZXdgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gZGF0YVZpZXcgVGhlIGRhdGEgdmlldyB0byBjbG9uZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2lzRGVlcF0gU3BlY2lmeSBhIGRlZXAgY2xvbmUuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBjbG9uZWQgZGF0YSB2aWV3LlxuICovXG5mdW5jdGlvbiBjbG9uZURhdGFWaWV3KGRhdGFWaWV3LCBpc0RlZXApIHtcbiAgdmFyIGJ1ZmZlciA9IGlzRGVlcCA/IGNsb25lQXJyYXlCdWZmZXIoZGF0YVZpZXcuYnVmZmVyKSA6IGRhdGFWaWV3LmJ1ZmZlcjtcbiAgcmV0dXJuIG5ldyBkYXRhVmlldy5jb25zdHJ1Y3RvcihidWZmZXIsIGRhdGFWaWV3LmJ5dGVPZmZzZXQsIGRhdGFWaWV3LmJ5dGVMZW5ndGgpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNsb25lRGF0YVZpZXc7XG4iLCIvKiogVXNlZCB0byBtYXRjaCBgUmVnRXhwYCBmbGFncyBmcm9tIHRoZWlyIGNvZXJjZWQgc3RyaW5nIHZhbHVlcy4gKi9cbnZhciByZUZsYWdzID0gL1xcdyokLztcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgYHJlZ2V4cGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSByZWdleHAgVGhlIHJlZ2V4cCB0byBjbG9uZS5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGNsb25lZCByZWdleHAuXG4gKi9cbmZ1bmN0aW9uIGNsb25lUmVnRXhwKHJlZ2V4cCkge1xuICB2YXIgcmVzdWx0ID0gbmV3IHJlZ2V4cC5jb25zdHJ1Y3RvcihyZWdleHAuc291cmNlLCByZUZsYWdzLmV4ZWMocmVnZXhwKSk7XG4gIHJlc3VsdC5sYXN0SW5kZXggPSByZWdleHAubGFzdEluZGV4O1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNsb25lUmVnRXhwO1xuIiwidmFyIFN5bWJvbCA9IHJlcXVpcmUoJy4vX1N5bWJvbCcpO1xuXG4vKiogVXNlZCB0byBjb252ZXJ0IHN5bWJvbHMgdG8gcHJpbWl0aXZlcyBhbmQgc3RyaW5ncy4gKi9cbnZhciBzeW1ib2xQcm90byA9IFN5bWJvbCA/IFN5bWJvbC5wcm90b3R5cGUgOiB1bmRlZmluZWQsXG4gICAgc3ltYm9sVmFsdWVPZiA9IHN5bWJvbFByb3RvID8gc3ltYm9sUHJvdG8udmFsdWVPZiA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgdGhlIGBzeW1ib2xgIG9iamVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IHN5bWJvbCBUaGUgc3ltYm9sIG9iamVjdCB0byBjbG9uZS5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGNsb25lZCBzeW1ib2wgb2JqZWN0LlxuICovXG5mdW5jdGlvbiBjbG9uZVN5bWJvbChzeW1ib2wpIHtcbiAgcmV0dXJuIHN5bWJvbFZhbHVlT2YgPyBPYmplY3Qoc3ltYm9sVmFsdWVPZi5jYWxsKHN5bWJvbCkpIDoge307XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY2xvbmVTeW1ib2w7XG4iLCJ2YXIgY29weU9iamVjdCA9IHJlcXVpcmUoJy4vX2NvcHlPYmplY3QnKSxcbiAgICBnZXRTeW1ib2xzID0gcmVxdWlyZSgnLi9fZ2V0U3ltYm9scycpO1xuXG4vKipcbiAqIENvcGllcyBvd24gc3ltYm9scyBvZiBgc291cmNlYCB0byBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgb2JqZWN0IHRvIGNvcHkgc3ltYm9scyBmcm9tLlxuICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3Q9e31dIFRoZSBvYmplY3QgdG8gY29weSBzeW1ib2xzIHRvLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAqL1xuZnVuY3Rpb24gY29weVN5bWJvbHMoc291cmNlLCBvYmplY3QpIHtcbiAgcmV0dXJuIGNvcHlPYmplY3Qoc291cmNlLCBnZXRTeW1ib2xzKHNvdXJjZSksIG9iamVjdCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY29weVN5bWJvbHM7XG4iLCJ2YXIgY29weU9iamVjdCA9IHJlcXVpcmUoJy4vX2NvcHlPYmplY3QnKSxcbiAgICBnZXRTeW1ib2xzSW4gPSByZXF1aXJlKCcuL19nZXRTeW1ib2xzSW4nKTtcblxuLyoqXG4gKiBDb3BpZXMgb3duIGFuZCBpbmhlcml0ZWQgc3ltYm9scyBvZiBgc291cmNlYCB0byBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgb2JqZWN0IHRvIGNvcHkgc3ltYm9scyBmcm9tLlxuICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3Q9e31dIFRoZSBvYmplY3QgdG8gY29weSBzeW1ib2xzIHRvLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAqL1xuZnVuY3Rpb24gY29weVN5bWJvbHNJbihzb3VyY2UsIG9iamVjdCkge1xuICByZXR1cm4gY29weU9iamVjdChzb3VyY2UsIGdldFN5bWJvbHNJbihzb3VyY2UpLCBvYmplY3QpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNvcHlTeW1ib2xzSW47XG4iLCJ2YXIgYmFzZUl0ZXJhdGVlID0gcmVxdWlyZSgnLi9fYmFzZUl0ZXJhdGVlJyksXG4gICAgaXNBcnJheUxpa2UgPSByZXF1aXJlKCcuL2lzQXJyYXlMaWtlJyksXG4gICAga2V5cyA9IHJlcXVpcmUoJy4va2V5cycpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBgXy5maW5kYCBvciBgXy5maW5kTGFzdGAgZnVuY3Rpb24uXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZpbmRJbmRleEZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGZpbmQgdGhlIGNvbGxlY3Rpb24gaW5kZXguXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmaW5kIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBjcmVhdGVGaW5kKGZpbmRJbmRleEZ1bmMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKGNvbGxlY3Rpb24sIHByZWRpY2F0ZSwgZnJvbUluZGV4KSB7XG4gICAgdmFyIGl0ZXJhYmxlID0gT2JqZWN0KGNvbGxlY3Rpb24pO1xuICAgIGlmICghaXNBcnJheUxpa2UoY29sbGVjdGlvbikpIHtcbiAgICAgIHZhciBpdGVyYXRlZSA9IGJhc2VJdGVyYXRlZShwcmVkaWNhdGUsIDMpO1xuICAgICAgY29sbGVjdGlvbiA9IGtleXMoY29sbGVjdGlvbik7XG4gICAgICBwcmVkaWNhdGUgPSBmdW5jdGlvbihrZXkpIHsgcmV0dXJuIGl0ZXJhdGVlKGl0ZXJhYmxlW2tleV0sIGtleSwgaXRlcmFibGUpOyB9O1xuICAgIH1cbiAgICB2YXIgaW5kZXggPSBmaW5kSW5kZXhGdW5jKGNvbGxlY3Rpb24sIHByZWRpY2F0ZSwgZnJvbUluZGV4KTtcbiAgICByZXR1cm4gaW5kZXggPiAtMSA/IGl0ZXJhYmxlW2l0ZXJhdGVlID8gY29sbGVjdGlvbltpbmRleF0gOiBpbmRleF0gOiB1bmRlZmluZWQ7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY3JlYXRlRmluZDtcbiIsIi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogSW5pdGlhbGl6ZXMgYW4gYXJyYXkgY2xvbmUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBjbG9uZS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgaW5pdGlhbGl6ZWQgY2xvbmUuXG4gKi9cbmZ1bmN0aW9uIGluaXRDbG9uZUFycmF5KGFycmF5KSB7XG4gIHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGgsXG4gICAgICByZXN1bHQgPSBuZXcgYXJyYXkuY29uc3RydWN0b3IobGVuZ3RoKTtcblxuICAvLyBBZGQgcHJvcGVydGllcyBhc3NpZ25lZCBieSBgUmVnRXhwI2V4ZWNgLlxuICBpZiAobGVuZ3RoICYmIHR5cGVvZiBhcnJheVswXSA9PSAnc3RyaW5nJyAmJiBoYXNPd25Qcm9wZXJ0eS5jYWxsKGFycmF5LCAnaW5kZXgnKSkge1xuICAgIHJlc3VsdC5pbmRleCA9IGFycmF5LmluZGV4O1xuICAgIHJlc3VsdC5pbnB1dCA9IGFycmF5LmlucHV0O1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaW5pdENsb25lQXJyYXk7XG4iLCJ2YXIgY2xvbmVBcnJheUJ1ZmZlciA9IHJlcXVpcmUoJy4vX2Nsb25lQXJyYXlCdWZmZXInKSxcbiAgICBjbG9uZURhdGFWaWV3ID0gcmVxdWlyZSgnLi9fY2xvbmVEYXRhVmlldycpLFxuICAgIGNsb25lUmVnRXhwID0gcmVxdWlyZSgnLi9fY2xvbmVSZWdFeHAnKSxcbiAgICBjbG9uZVN5bWJvbCA9IHJlcXVpcmUoJy4vX2Nsb25lU3ltYm9sJyksXG4gICAgY2xvbmVUeXBlZEFycmF5ID0gcmVxdWlyZSgnLi9fY2xvbmVUeXBlZEFycmF5Jyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBib29sVGFnID0gJ1tvYmplY3QgQm9vbGVhbl0nLFxuICAgIGRhdGVUYWcgPSAnW29iamVjdCBEYXRlXScsXG4gICAgbWFwVGFnID0gJ1tvYmplY3QgTWFwXScsXG4gICAgbnVtYmVyVGFnID0gJ1tvYmplY3QgTnVtYmVyXScsXG4gICAgcmVnZXhwVGFnID0gJ1tvYmplY3QgUmVnRXhwXScsXG4gICAgc2V0VGFnID0gJ1tvYmplY3QgU2V0XScsXG4gICAgc3RyaW5nVGFnID0gJ1tvYmplY3QgU3RyaW5nXScsXG4gICAgc3ltYm9sVGFnID0gJ1tvYmplY3QgU3ltYm9sXSc7XG5cbnZhciBhcnJheUJ1ZmZlclRhZyA9ICdbb2JqZWN0IEFycmF5QnVmZmVyXScsXG4gICAgZGF0YVZpZXdUYWcgPSAnW29iamVjdCBEYXRhVmlld10nLFxuICAgIGZsb2F0MzJUYWcgPSAnW29iamVjdCBGbG9hdDMyQXJyYXldJyxcbiAgICBmbG9hdDY0VGFnID0gJ1tvYmplY3QgRmxvYXQ2NEFycmF5XScsXG4gICAgaW50OFRhZyA9ICdbb2JqZWN0IEludDhBcnJheV0nLFxuICAgIGludDE2VGFnID0gJ1tvYmplY3QgSW50MTZBcnJheV0nLFxuICAgIGludDMyVGFnID0gJ1tvYmplY3QgSW50MzJBcnJheV0nLFxuICAgIHVpbnQ4VGFnID0gJ1tvYmplY3QgVWludDhBcnJheV0nLFxuICAgIHVpbnQ4Q2xhbXBlZFRhZyA9ICdbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XScsXG4gICAgdWludDE2VGFnID0gJ1tvYmplY3QgVWludDE2QXJyYXldJyxcbiAgICB1aW50MzJUYWcgPSAnW29iamVjdCBVaW50MzJBcnJheV0nO1xuXG4vKipcbiAqIEluaXRpYWxpemVzIGFuIG9iamVjdCBjbG9uZSBiYXNlZCBvbiBpdHMgYHRvU3RyaW5nVGFnYC5cbiAqXG4gKiAqKk5vdGU6KiogVGhpcyBmdW5jdGlvbiBvbmx5IHN1cHBvcnRzIGNsb25pbmcgdmFsdWVzIHdpdGggdGFncyBvZlxuICogYEJvb2xlYW5gLCBgRGF0ZWAsIGBFcnJvcmAsIGBNYXBgLCBgTnVtYmVyYCwgYFJlZ0V4cGAsIGBTZXRgLCBvciBgU3RyaW5nYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGNsb25lLlxuICogQHBhcmFtIHtzdHJpbmd9IHRhZyBUaGUgYHRvU3RyaW5nVGFnYCBvZiB0aGUgb2JqZWN0IHRvIGNsb25lLlxuICogQHBhcmFtIHtib29sZWFufSBbaXNEZWVwXSBTcGVjaWZ5IGEgZGVlcCBjbG9uZS5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGluaXRpYWxpemVkIGNsb25lLlxuICovXG5mdW5jdGlvbiBpbml0Q2xvbmVCeVRhZyhvYmplY3QsIHRhZywgaXNEZWVwKSB7XG4gIHZhciBDdG9yID0gb2JqZWN0LmNvbnN0cnVjdG9yO1xuICBzd2l0Y2ggKHRhZykge1xuICAgIGNhc2UgYXJyYXlCdWZmZXJUYWc6XG4gICAgICByZXR1cm4gY2xvbmVBcnJheUJ1ZmZlcihvYmplY3QpO1xuXG4gICAgY2FzZSBib29sVGFnOlxuICAgIGNhc2UgZGF0ZVRhZzpcbiAgICAgIHJldHVybiBuZXcgQ3Rvcigrb2JqZWN0KTtcblxuICAgIGNhc2UgZGF0YVZpZXdUYWc6XG4gICAgICByZXR1cm4gY2xvbmVEYXRhVmlldyhvYmplY3QsIGlzRGVlcCk7XG5cbiAgICBjYXNlIGZsb2F0MzJUYWc6IGNhc2UgZmxvYXQ2NFRhZzpcbiAgICBjYXNlIGludDhUYWc6IGNhc2UgaW50MTZUYWc6IGNhc2UgaW50MzJUYWc6XG4gICAgY2FzZSB1aW50OFRhZzogY2FzZSB1aW50OENsYW1wZWRUYWc6IGNhc2UgdWludDE2VGFnOiBjYXNlIHVpbnQzMlRhZzpcbiAgICAgIHJldHVybiBjbG9uZVR5cGVkQXJyYXkob2JqZWN0LCBpc0RlZXApO1xuXG4gICAgY2FzZSBtYXBUYWc6XG4gICAgICByZXR1cm4gbmV3IEN0b3I7XG5cbiAgICBjYXNlIG51bWJlclRhZzpcbiAgICBjYXNlIHN0cmluZ1RhZzpcbiAgICAgIHJldHVybiBuZXcgQ3RvcihvYmplY3QpO1xuXG4gICAgY2FzZSByZWdleHBUYWc6XG4gICAgICByZXR1cm4gY2xvbmVSZWdFeHAob2JqZWN0KTtcblxuICAgIGNhc2Ugc2V0VGFnOlxuICAgICAgcmV0dXJuIG5ldyBDdG9yO1xuXG4gICAgY2FzZSBzeW1ib2xUYWc6XG4gICAgICByZXR1cm4gY2xvbmVTeW1ib2wob2JqZWN0KTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGluaXRDbG9uZUJ5VGFnO1xuIiwiLyoqIFVzZWQgdG8gbWF0Y2ggYSBzaW5nbGUgd2hpdGVzcGFjZSBjaGFyYWN0ZXIuICovXG52YXIgcmVXaGl0ZXNwYWNlID0gL1xccy87XG5cbi8qKlxuICogVXNlZCBieSBgXy50cmltYCBhbmQgYF8udHJpbUVuZGAgdG8gZ2V0IHRoZSBpbmRleCBvZiB0aGUgbGFzdCBub24td2hpdGVzcGFjZVxuICogY2hhcmFjdGVyIG9mIGBzdHJpbmdgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIFRoZSBzdHJpbmcgdG8gaW5zcGVjdC5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBsYXN0IG5vbi13aGl0ZXNwYWNlIGNoYXJhY3Rlci5cbiAqL1xuZnVuY3Rpb24gdHJpbW1lZEVuZEluZGV4KHN0cmluZykge1xuICB2YXIgaW5kZXggPSBzdHJpbmcubGVuZ3RoO1xuXG4gIHdoaWxlIChpbmRleC0tICYmIHJlV2hpdGVzcGFjZS50ZXN0KHN0cmluZy5jaGFyQXQoaW5kZXgpKSkge31cbiAgcmV0dXJuIGluZGV4O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHRyaW1tZWRFbmRJbmRleDtcbiIsInZhciBiYXNlQ2xvbmUgPSByZXF1aXJlKCcuL19iYXNlQ2xvbmUnKTtcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgY2xvbmluZy4gKi9cbnZhciBDTE9ORV9ERUVQX0ZMQUcgPSAxLFxuICAgIENMT05FX1NZTUJPTFNfRkxBRyA9IDQ7XG5cbi8qKlxuICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5jbG9uZWAgZXhjZXB0IHRoYXQgaXQgcmVjdXJzaXZlbHkgY2xvbmVzIGB2YWx1ZWAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAxLjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHJlY3Vyc2l2ZWx5IGNsb25lLlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGRlZXAgY2xvbmVkIHZhbHVlLlxuICogQHNlZSBfLmNsb25lXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3RzID0gW3sgJ2EnOiAxIH0sIHsgJ2InOiAyIH1dO1xuICpcbiAqIHZhciBkZWVwID0gXy5jbG9uZURlZXAob2JqZWN0cyk7XG4gKiBjb25zb2xlLmxvZyhkZWVwWzBdID09PSBvYmplY3RzWzBdKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGNsb25lRGVlcCh2YWx1ZSkge1xuICByZXR1cm4gYmFzZUNsb25lKHZhbHVlLCBDTE9ORV9ERUVQX0ZMQUcgfCBDTE9ORV9TWU1CT0xTX0ZMQUcpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNsb25lRGVlcDtcbiIsInZhciBjcmVhdGVGaW5kID0gcmVxdWlyZSgnLi9fY3JlYXRlRmluZCcpLFxuICAgIGZpbmRJbmRleCA9IHJlcXVpcmUoJy4vZmluZEluZGV4Jyk7XG5cbi8qKlxuICogSXRlcmF0ZXMgb3ZlciBlbGVtZW50cyBvZiBgY29sbGVjdGlvbmAsIHJldHVybmluZyB0aGUgZmlyc3QgZWxlbWVudFxuICogYHByZWRpY2F0ZWAgcmV0dXJucyB0cnV0aHkgZm9yLiBUaGUgcHJlZGljYXRlIGlzIGludm9rZWQgd2l0aCB0aHJlZVxuICogYXJndW1lbnRzOiAodmFsdWUsIGluZGV4fGtleSwgY29sbGVjdGlvbikuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGluc3BlY3QuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcHJlZGljYXRlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcGFyYW0ge251bWJlcn0gW2Zyb21JbmRleD0wXSBUaGUgaW5kZXggdG8gc2VhcmNoIGZyb20uXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgbWF0Y2hlZCBlbGVtZW50LCBlbHNlIGB1bmRlZmluZWRgLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgdXNlcnMgPSBbXG4gKiAgIHsgJ3VzZXInOiAnYmFybmV5JywgICdhZ2UnOiAzNiwgJ2FjdGl2ZSc6IHRydWUgfSxcbiAqICAgeyAndXNlcic6ICdmcmVkJywgICAgJ2FnZSc6IDQwLCAnYWN0aXZlJzogZmFsc2UgfSxcbiAqICAgeyAndXNlcic6ICdwZWJibGVzJywgJ2FnZSc6IDEsICAnYWN0aXZlJzogdHJ1ZSB9XG4gKiBdO1xuICpcbiAqIF8uZmluZCh1c2VycywgZnVuY3Rpb24obykgeyByZXR1cm4gby5hZ2UgPCA0MDsgfSk7XG4gKiAvLyA9PiBvYmplY3QgZm9yICdiYXJuZXknXG4gKlxuICogLy8gVGhlIGBfLm1hdGNoZXNgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAqIF8uZmluZCh1c2VycywgeyAnYWdlJzogMSwgJ2FjdGl2ZSc6IHRydWUgfSk7XG4gKiAvLyA9PiBvYmplY3QgZm9yICdwZWJibGVzJ1xuICpcbiAqIC8vIFRoZSBgXy5tYXRjaGVzUHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAqIF8uZmluZCh1c2VycywgWydhY3RpdmUnLCBmYWxzZV0pO1xuICogLy8gPT4gb2JqZWN0IGZvciAnZnJlZCdcbiAqXG4gKiAvLyBUaGUgYF8ucHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAqIF8uZmluZCh1c2VycywgJ2FjdGl2ZScpO1xuICogLy8gPT4gb2JqZWN0IGZvciAnYmFybmV5J1xuICovXG52YXIgZmluZCA9IGNyZWF0ZUZpbmQoZmluZEluZGV4KTtcblxubW9kdWxlLmV4cG9ydHMgPSBmaW5kO1xuIiwidmFyIGJhc2VGaW5kSW5kZXggPSByZXF1aXJlKCcuL19iYXNlRmluZEluZGV4JyksXG4gICAgYmFzZUl0ZXJhdGVlID0gcmVxdWlyZSgnLi9fYmFzZUl0ZXJhdGVlJyksXG4gICAgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi90b0ludGVnZXInKTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZU1heCA9IE1hdGgubWF4O1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uZmluZGAgZXhjZXB0IHRoYXQgaXQgcmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIGZpcnN0XG4gKiBlbGVtZW50IGBwcmVkaWNhdGVgIHJldHVybnMgdHJ1dGh5IGZvciBpbnN0ZWFkIG9mIHRoZSBlbGVtZW50IGl0c2VsZi5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDEuMS4wXG4gKiBAY2F0ZWdvcnkgQXJyYXlcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW3ByZWRpY2F0ZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHBhcmFtIHtudW1iZXJ9IFtmcm9tSW5kZXg9MF0gVGhlIGluZGV4IHRvIHNlYXJjaCBmcm9tLlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIGZvdW5kIGVsZW1lbnQsIGVsc2UgYC0xYC5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIHVzZXJzID0gW1xuICogICB7ICd1c2VyJzogJ2Jhcm5leScsICAnYWN0aXZlJzogZmFsc2UgfSxcbiAqICAgeyAndXNlcic6ICdmcmVkJywgICAgJ2FjdGl2ZSc6IGZhbHNlIH0sXG4gKiAgIHsgJ3VzZXInOiAncGViYmxlcycsICdhY3RpdmUnOiB0cnVlIH1cbiAqIF07XG4gKlxuICogXy5maW5kSW5kZXgodXNlcnMsIGZ1bmN0aW9uKG8pIHsgcmV0dXJuIG8udXNlciA9PSAnYmFybmV5JzsgfSk7XG4gKiAvLyA9PiAwXG4gKlxuICogLy8gVGhlIGBfLm1hdGNoZXNgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAqIF8uZmluZEluZGV4KHVzZXJzLCB7ICd1c2VyJzogJ2ZyZWQnLCAnYWN0aXZlJzogZmFsc2UgfSk7XG4gKiAvLyA9PiAxXG4gKlxuICogLy8gVGhlIGBfLm1hdGNoZXNQcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICogXy5maW5kSW5kZXgodXNlcnMsIFsnYWN0aXZlJywgZmFsc2VdKTtcbiAqIC8vID0+IDBcbiAqXG4gKiAvLyBUaGUgYF8ucHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAqIF8uZmluZEluZGV4KHVzZXJzLCAnYWN0aXZlJyk7XG4gKiAvLyA9PiAyXG4gKi9cbmZ1bmN0aW9uIGZpbmRJbmRleChhcnJheSwgcHJlZGljYXRlLCBmcm9tSW5kZXgpIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuICBpZiAoIWxlbmd0aCkge1xuICAgIHJldHVybiAtMTtcbiAgfVxuICB2YXIgaW5kZXggPSBmcm9tSW5kZXggPT0gbnVsbCA/IDAgOiB0b0ludGVnZXIoZnJvbUluZGV4KTtcbiAgaWYgKGluZGV4IDwgMCkge1xuICAgIGluZGV4ID0gbmF0aXZlTWF4KGxlbmd0aCArIGluZGV4LCAwKTtcbiAgfVxuICByZXR1cm4gYmFzZUZpbmRJbmRleChhcnJheSwgYmFzZUl0ZXJhdGVlKHByZWRpY2F0ZSwgMyksIGluZGV4KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmaW5kSW5kZXg7XG4iLCJ2YXIgYmFzZUlzTWFwID0gcmVxdWlyZSgnLi9fYmFzZUlzTWFwJyksXG4gICAgYmFzZVVuYXJ5ID0gcmVxdWlyZSgnLi9fYmFzZVVuYXJ5JyksXG4gICAgbm9kZVV0aWwgPSByZXF1aXJlKCcuL19ub2RlVXRpbCcpO1xuXG4vKiBOb2RlLmpzIGhlbHBlciByZWZlcmVuY2VzLiAqL1xudmFyIG5vZGVJc01hcCA9IG5vZGVVdGlsICYmIG5vZGVVdGlsLmlzTWFwO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSBgTWFwYCBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjMuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBtYXAsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc01hcChuZXcgTWFwKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzTWFwKG5ldyBXZWFrTWFwKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBpc01hcCA9IG5vZGVJc01hcCA/IGJhc2VVbmFyeShub2RlSXNNYXApIDogYmFzZUlzTWFwO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzTWFwO1xuIiwidmFyIGJhc2VJc1NldCA9IHJlcXVpcmUoJy4vX2Jhc2VJc1NldCcpLFxuICAgIGJhc2VVbmFyeSA9IHJlcXVpcmUoJy4vX2Jhc2VVbmFyeScpLFxuICAgIG5vZGVVdGlsID0gcmVxdWlyZSgnLi9fbm9kZVV0aWwnKTtcblxuLyogTm9kZS5qcyBoZWxwZXIgcmVmZXJlbmNlcy4gKi9cbnZhciBub2RlSXNTZXQgPSBub2RlVXRpbCAmJiBub2RlVXRpbC5pc1NldDtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYFNldGAgb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4zLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgc2V0LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNTZXQobmV3IFNldCk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc1NldChuZXcgV2Vha1NldCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG52YXIgaXNTZXQgPSBub2RlSXNTZXQgPyBiYXNlVW5hcnkobm9kZUlzU2V0KSA6IGJhc2VJc1NldDtcblxubW9kdWxlLmV4cG9ydHMgPSBpc1NldDtcbiIsInZhciBjYXN0UGF0aCA9IHJlcXVpcmUoJy4vX2Nhc3RQYXRoJyksXG4gICAgaXNGdW5jdGlvbiA9IHJlcXVpcmUoJy4vaXNGdW5jdGlvbicpLFxuICAgIHRvS2V5ID0gcmVxdWlyZSgnLi9fdG9LZXknKTtcblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmdldGAgZXhjZXB0IHRoYXQgaWYgdGhlIHJlc29sdmVkIHZhbHVlIGlzIGFcbiAqIGZ1bmN0aW9uIGl0J3MgaW52b2tlZCB3aXRoIHRoZSBgdGhpc2AgYmluZGluZyBvZiBpdHMgcGFyZW50IG9iamVjdCBhbmRcbiAqIGl0cyByZXN1bHQgaXMgcmV0dXJuZWQuXG4gKlxuICogQHN0YXRpY1xuICogQHNpbmNlIDAuMS4wXG4gKiBAbWVtYmVyT2YgX1xuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIHByb3BlcnR5IHRvIHJlc29sdmUuXG4gKiBAcGFyYW0geyp9IFtkZWZhdWx0VmFsdWVdIFRoZSB2YWx1ZSByZXR1cm5lZCBmb3IgYHVuZGVmaW5lZGAgcmVzb2x2ZWQgdmFsdWVzLlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHJlc29sdmVkIHZhbHVlLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0ID0geyAnYSc6IFt7ICdiJzogeyAnYzEnOiAzLCAnYzInOiBfLmNvbnN0YW50KDQpIH0gfV0gfTtcbiAqXG4gKiBfLnJlc3VsdChvYmplY3QsICdhWzBdLmIuYzEnKTtcbiAqIC8vID0+IDNcbiAqXG4gKiBfLnJlc3VsdChvYmplY3QsICdhWzBdLmIuYzInKTtcbiAqIC8vID0+IDRcbiAqXG4gKiBfLnJlc3VsdChvYmplY3QsICdhWzBdLmIuYzMnLCAnZGVmYXVsdCcpO1xuICogLy8gPT4gJ2RlZmF1bHQnXG4gKlxuICogXy5yZXN1bHQob2JqZWN0LCAnYVswXS5iLmMzJywgXy5jb25zdGFudCgnZGVmYXVsdCcpKTtcbiAqIC8vID0+ICdkZWZhdWx0J1xuICovXG5mdW5jdGlvbiByZXN1bHQob2JqZWN0LCBwYXRoLCBkZWZhdWx0VmFsdWUpIHtcbiAgcGF0aCA9IGNhc3RQYXRoKHBhdGgsIG9iamVjdCk7XG5cbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBwYXRoLmxlbmd0aDtcblxuICAvLyBFbnN1cmUgdGhlIGxvb3AgaXMgZW50ZXJlZCB3aGVuIHBhdGggaXMgZW1wdHkuXG4gIGlmICghbGVuZ3RoKSB7XG4gICAgbGVuZ3RoID0gMTtcbiAgICBvYmplY3QgPSB1bmRlZmluZWQ7XG4gIH1cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgdmFsdWUgPSBvYmplY3QgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IG9iamVjdFt0b0tleShwYXRoW2luZGV4XSldO1xuICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBpbmRleCA9IGxlbmd0aDtcbiAgICAgIHZhbHVlID0gZGVmYXVsdFZhbHVlO1xuICAgIH1cbiAgICBvYmplY3QgPSBpc0Z1bmN0aW9uKHZhbHVlKSA/IHZhbHVlLmNhbGwob2JqZWN0KSA6IHZhbHVlO1xuICB9XG4gIHJldHVybiBvYmplY3Q7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcmVzdWx0O1xuIiwidmFyIHRvTnVtYmVyID0gcmVxdWlyZSgnLi90b051bWJlcicpO1xuXG4vKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cbnZhciBJTkZJTklUWSA9IDEgLyAwLFxuICAgIE1BWF9JTlRFR0VSID0gMS43OTc2OTMxMzQ4NjIzMTU3ZSszMDg7XG5cbi8qKlxuICogQ29udmVydHMgYHZhbHVlYCB0byBhIGZpbml0ZSBudW1iZXIuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjEyLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb252ZXJ0LlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgY29udmVydGVkIG51bWJlci5cbiAqIEBleGFtcGxlXG4gKlxuICogXy50b0Zpbml0ZSgzLjIpO1xuICogLy8gPT4gMy4yXG4gKlxuICogXy50b0Zpbml0ZShOdW1iZXIuTUlOX1ZBTFVFKTtcbiAqIC8vID0+IDVlLTMyNFxuICpcbiAqIF8udG9GaW5pdGUoSW5maW5pdHkpO1xuICogLy8gPT4gMS43OTc2OTMxMzQ4NjIzMTU3ZSszMDhcbiAqXG4gKiBfLnRvRmluaXRlKCczLjInKTtcbiAqIC8vID0+IDMuMlxuICovXG5mdW5jdGlvbiB0b0Zpbml0ZSh2YWx1ZSkge1xuICBpZiAoIXZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlID09PSAwID8gdmFsdWUgOiAwO1xuICB9XG4gIHZhbHVlID0gdG9OdW1iZXIodmFsdWUpO1xuICBpZiAodmFsdWUgPT09IElORklOSVRZIHx8IHZhbHVlID09PSAtSU5GSU5JVFkpIHtcbiAgICB2YXIgc2lnbiA9ICh2YWx1ZSA8IDAgPyAtMSA6IDEpO1xuICAgIHJldHVybiBzaWduICogTUFYX0lOVEVHRVI7XG4gIH1cbiAgcmV0dXJuIHZhbHVlID09PSB2YWx1ZSA/IHZhbHVlIDogMDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB0b0Zpbml0ZTtcbiIsInZhciB0b0Zpbml0ZSA9IHJlcXVpcmUoJy4vdG9GaW5pdGUnKTtcblxuLyoqXG4gKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGFuIGludGVnZXIuXG4gKlxuICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGlzIGxvb3NlbHkgYmFzZWQgb25cbiAqIFtgVG9JbnRlZ2VyYF0oaHR0cDovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXRvaW50ZWdlcikuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgaW50ZWdlci5cbiAqIEBleGFtcGxlXG4gKlxuICogXy50b0ludGVnZXIoMy4yKTtcbiAqIC8vID0+IDNcbiAqXG4gKiBfLnRvSW50ZWdlcihOdW1iZXIuTUlOX1ZBTFVFKTtcbiAqIC8vID0+IDBcbiAqXG4gKiBfLnRvSW50ZWdlcihJbmZpbml0eSk7XG4gKiAvLyA9PiAxLjc5NzY5MzEzNDg2MjMxNTdlKzMwOFxuICpcbiAqIF8udG9JbnRlZ2VyKCczLjInKTtcbiAqIC8vID0+IDNcbiAqL1xuZnVuY3Rpb24gdG9JbnRlZ2VyKHZhbHVlKSB7XG4gIHZhciByZXN1bHQgPSB0b0Zpbml0ZSh2YWx1ZSksXG4gICAgICByZW1haW5kZXIgPSByZXN1bHQgJSAxO1xuXG4gIHJldHVybiByZXN1bHQgPT09IHJlc3VsdCA/IChyZW1haW5kZXIgPyByZXN1bHQgLSByZW1haW5kZXIgOiByZXN1bHQpIDogMDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB0b0ludGVnZXI7XG4iLCJ2YXIgYmFzZVRyaW0gPSByZXF1aXJlKCcuL19iYXNlVHJpbScpLFxuICAgIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9pc09iamVjdCcpLFxuICAgIGlzU3ltYm9sID0gcmVxdWlyZSgnLi9pc1N5bWJvbCcpO1xuXG4vKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cbnZhciBOQU4gPSAwIC8gMDtcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IGJhZCBzaWduZWQgaGV4YWRlY2ltYWwgc3RyaW5nIHZhbHVlcy4gKi9cbnZhciByZUlzQmFkSGV4ID0gL15bLStdMHhbMC05YS1mXSskL2k7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBiaW5hcnkgc3RyaW5nIHZhbHVlcy4gKi9cbnZhciByZUlzQmluYXJ5ID0gL14wYlswMV0rJC9pO1xuXG4vKiogVXNlZCB0byBkZXRlY3Qgb2N0YWwgc3RyaW5nIHZhbHVlcy4gKi9cbnZhciByZUlzT2N0YWwgPSAvXjBvWzAtN10rJC9pO1xuXG4vKiogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgd2l0aG91dCBhIGRlcGVuZGVuY3kgb24gYHJvb3RgLiAqL1xudmFyIGZyZWVQYXJzZUludCA9IHBhcnNlSW50O1xuXG4vKipcbiAqIENvbnZlcnRzIGB2YWx1ZWAgdG8gYSBudW1iZXIuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHByb2Nlc3MuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBudW1iZXIuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8udG9OdW1iZXIoMy4yKTtcbiAqIC8vID0+IDMuMlxuICpcbiAqIF8udG9OdW1iZXIoTnVtYmVyLk1JTl9WQUxVRSk7XG4gKiAvLyA9PiA1ZS0zMjRcbiAqXG4gKiBfLnRvTnVtYmVyKEluZmluaXR5KTtcbiAqIC8vID0+IEluZmluaXR5XG4gKlxuICogXy50b051bWJlcignMy4yJyk7XG4gKiAvLyA9PiAzLjJcbiAqL1xuZnVuY3Rpb24gdG9OdW1iZXIodmFsdWUpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PSAnbnVtYmVyJykge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICBpZiAoaXNTeW1ib2wodmFsdWUpKSB7XG4gICAgcmV0dXJuIE5BTjtcbiAgfVxuICBpZiAoaXNPYmplY3QodmFsdWUpKSB7XG4gICAgdmFyIG90aGVyID0gdHlwZW9mIHZhbHVlLnZhbHVlT2YgPT0gJ2Z1bmN0aW9uJyA/IHZhbHVlLnZhbHVlT2YoKSA6IHZhbHVlO1xuICAgIHZhbHVlID0gaXNPYmplY3Qob3RoZXIpID8gKG90aGVyICsgJycpIDogb3RoZXI7XG4gIH1cbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykge1xuICAgIHJldHVybiB2YWx1ZSA9PT0gMCA/IHZhbHVlIDogK3ZhbHVlO1xuICB9XG4gIHZhbHVlID0gYmFzZVRyaW0odmFsdWUpO1xuICB2YXIgaXNCaW5hcnkgPSByZUlzQmluYXJ5LnRlc3QodmFsdWUpO1xuICByZXR1cm4gKGlzQmluYXJ5IHx8IHJlSXNPY3RhbC50ZXN0KHZhbHVlKSlcbiAgICA/IGZyZWVQYXJzZUludCh2YWx1ZS5zbGljZSgyKSwgaXNCaW5hcnkgPyAyIDogOClcbiAgICA6IChyZUlzQmFkSGV4LnRlc3QodmFsdWUpID8gTkFOIDogK3ZhbHVlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB0b051bWJlcjtcbiIsIid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcblxudmFyIF9kZWZhdWx0T3JkZXIgPSByZXF1aXJlKCcuL2RlZmF1bHQtb3JkZXInKTtcblxudmFyIF9kZWZhdWx0T3JkZXIyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfZGVmYXVsdE9yZGVyKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxudmFyIGJ5Q29sdW1uID0gZnVuY3Rpb24gYnlDb2x1bW4oX3JlZikge1xuICB2YXIgc29ydGluZ0NvbHVtbnMgPSBfcmVmLnNvcnRpbmdDb2x1bW5zLFxuICAgICAgX3JlZiRzb3J0aW5nT3JkZXIgPSBfcmVmLnNvcnRpbmdPcmRlcixcbiAgICAgIHNvcnRpbmdPcmRlciA9IF9yZWYkc29ydGluZ09yZGVyID09PSB1bmRlZmluZWQgPyBfZGVmYXVsdE9yZGVyMi5kZWZhdWx0IDogX3JlZiRzb3J0aW5nT3JkZXIsXG4gICAgICBfcmVmJHNlbGVjdGVkQ29sdW1uID0gX3JlZi5zZWxlY3RlZENvbHVtbixcbiAgICAgIHNlbGVjdGVkQ29sdW1uID0gX3JlZiRzZWxlY3RlZENvbHVtbiA9PT0gdW5kZWZpbmVkID8gLTEgOiBfcmVmJHNlbGVjdGVkQ29sdW1uO1xuXG4gIHZhciBzb3J0ID0gc29ydGluZ09yZGVyLkZJUlNUO1xuXG4gIGlmIChzZWxlY3RlZENvbHVtbiA8IDApIHtcbiAgICByZXR1cm4gc29ydGluZ0NvbHVtbnM7XG4gIH1cblxuICBpZiAoc29ydGluZ0NvbHVtbnMgJiYge30uaGFzT3duUHJvcGVydHkuY2FsbChzb3J0aW5nQ29sdW1ucywgc2VsZWN0ZWRDb2x1bW4pKSB7XG4gICAgc29ydCA9IHNvcnRpbmdPcmRlcltzb3J0aW5nQ29sdW1uc1tzZWxlY3RlZENvbHVtbl0uZGlyZWN0aW9uXTtcblxuICAgIGlmICghc29ydCkge1xuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBfZGVmaW5lUHJvcGVydHkoe30sIHNlbGVjdGVkQ29sdW1uLCB7XG4gICAgZGlyZWN0aW9uOiBzb3J0LFxuICAgIHBvc2l0aW9uOiAwXG4gIH0pO1xufTtcblxuZXhwb3J0cy5kZWZhdWx0ID0gYnlDb2x1bW47IiwiJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuXG52YXIgX2Nsb25lRGVlcDIgPSByZXF1aXJlKCdsb2Rhc2gvY2xvbmVEZWVwJyk7XG5cbnZhciBfY2xvbmVEZWVwMyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2Nsb25lRGVlcDIpO1xuXG52YXIgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9O1xuXG52YXIgX2RlZmF1bHRPcmRlciA9IHJlcXVpcmUoJy4vZGVmYXVsdC1vcmRlcicpO1xuXG52YXIgX2RlZmF1bHRPcmRlcjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9kZWZhdWx0T3JkZXIpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG52YXIgYnlDb2x1bW5zUHJpb3JpdGl6ZUxhc3RTb3J0ZWQgPSBmdW5jdGlvbiBieUNvbHVtbnNQcmlvcml0aXplTGFzdFNvcnRlZChfcmVmKSB7XG4gIHZhciBzb3J0aW5nQ29sdW1ucyA9IF9yZWYuc29ydGluZ0NvbHVtbnMsXG4gICAgICBfcmVmJHNvcnRpbmdPcmRlciA9IF9yZWYuc29ydGluZ09yZGVyLFxuICAgICAgc29ydGluZ09yZGVyID0gX3JlZiRzb3J0aW5nT3JkZXIgPT09IHVuZGVmaW5lZCA/IF9kZWZhdWx0T3JkZXIyLmRlZmF1bHQgOiBfcmVmJHNvcnRpbmdPcmRlcixcbiAgICAgIF9yZWYkc2VsZWN0ZWRDb2x1bW4gPSBfcmVmLnNlbGVjdGVkQ29sdW1uLFxuICAgICAgc2VsZWN0ZWRDb2x1bW4gPSBfcmVmJHNlbGVjdGVkQ29sdW1uID09PSB1bmRlZmluZWQgPyAtMSA6IF9yZWYkc2VsZWN0ZWRDb2x1bW47XG5cbiAgdmFyIG5ld1NvcnRpbmdDb2x1bW5zID0ge307XG5cbiAgaWYgKHNlbGVjdGVkQ29sdW1uIDwgMCkge1xuICAgIHJldHVybiBzb3J0aW5nQ29sdW1ucztcbiAgfVxuXG4gIGlmICghc29ydGluZ0NvbHVtbnMpIHtcbiAgICByZXR1cm4gX2RlZmluZVByb3BlcnR5KHt9LCBzZWxlY3RlZENvbHVtbiwge1xuICAgICAgZGlyZWN0aW9uOiBzb3J0aW5nT3JkZXIuRklSU1QsXG4gICAgICBwb3NpdGlvbjogMFxuICAgIH0pO1xuICB9IGVsc2UgaWYgKHt9Lmhhc093blByb3BlcnR5LmNhbGwoc29ydGluZ0NvbHVtbnMsIHNlbGVjdGVkQ29sdW1uKSkge1xuICAgIC8vIENsb25lIHRvIGF2b2lkIG11dGF0aW5nIHRoZSBvcmlnaW5hbCBzdHJ1Y3R1cmVcbiAgICBuZXdTb3J0aW5nQ29sdW1ucyA9ICgwLCBfY2xvbmVEZWVwMy5kZWZhdWx0KShzb3J0aW5nQ29sdW1ucyk7XG5cbiAgICB2YXIgbmV3U29ydCA9IHNvcnRpbmdPcmRlcltuZXdTb3J0aW5nQ29sdW1uc1tzZWxlY3RlZENvbHVtbl0uZGlyZWN0aW9uXTtcbiAgICB2YXIgb2xkUG9zaXRpb24gPSBuZXdTb3J0aW5nQ29sdW1uc1tzZWxlY3RlZENvbHVtbl0ucG9zaXRpb247XG5cbiAgICBpZiAobmV3U29ydCkge1xuICAgICAgLy8gc29ydCBkaXJlY3Rpb24gaXMgYmVpbmcgdXBkYXRlZFxuICAgICAgLy8gZGVtb3RlIGFsbCBwcmV2aW91c2x5IGhpZ2hlci1wcmlvcml0eSBjb2x1bW5zIGJ5IDFcbiAgICAgIC8vIGJ5IGluY3JlbWVudGluZyB0aGVpciBwb3NpdGlvblxuICAgICAgT2JqZWN0LmtleXMobmV3U29ydGluZ0NvbHVtbnMpLmZvckVhY2goZnVuY3Rpb24gKGspIHtcbiAgICAgICAgdmFyIHYgPSBuZXdTb3J0aW5nQ29sdW1uc1trXTtcblxuICAgICAgICBpZiAodi5wb3NpdGlvbiA8IG9sZFBvc2l0aW9uKSB7XG4gICAgICAgICAgdi5wb3NpdGlvbiArPSAxO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIG5ld1NvcnRpbmdDb2x1bW5zW3NlbGVjdGVkQ29sdW1uXSA9IHtcbiAgICAgICAgZGlyZWN0aW9uOiBuZXdTb3J0LFxuICAgICAgICBwb3NpdGlvbjogMFxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGVsZXRlIG5ld1NvcnRpbmdDb2x1bW5zW3NlbGVjdGVkQ29sdW1uXTtcblxuICAgICAgLy8gVXBkYXRlIHBvc2l0aW9uIG9mIGNvbHVtbnMgYWZ0ZXIgdGhlIGRlbGV0ZWQgb25lXG4gICAgICBPYmplY3Qua2V5cyhuZXdTb3J0aW5nQ29sdW1ucykuZm9yRWFjaChmdW5jdGlvbiAoaykge1xuICAgICAgICB2YXIgdiA9IG5ld1NvcnRpbmdDb2x1bW5zW2tdO1xuXG4gICAgICAgIGlmICh2LnBvc2l0aW9uID4gb2xkUG9zaXRpb24pIHtcbiAgICAgICAgICB2LnBvc2l0aW9uIC09IDE7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBuZXdTb3J0aW5nQ29sdW1ucztcbiAgfVxuXG4gIC8vIGNsb25lIGFuZCBpbnNlcnQgbmV3IGNvbHVtbiBhdCBwb3NpdGlvbiAwLCBpbmNyZW1lbnQgYWxsIG90aGVyc1xuICBuZXdTb3J0aW5nQ29sdW1ucyA9ICgwLCBfY2xvbmVEZWVwMy5kZWZhdWx0KShzb3J0aW5nQ29sdW1ucyk7XG4gIE9iamVjdC5rZXlzKG5ld1NvcnRpbmdDb2x1bW5zKS5mb3JFYWNoKGZ1bmN0aW9uIChrKSB7XG4gICAgdmFyIHYgPSBuZXdTb3J0aW5nQ29sdW1uc1trXTtcbiAgICB2LnBvc2l0aW9uICs9IDE7XG4gIH0pO1xuXG4gIHJldHVybiBfZXh0ZW5kcyh7fSwgbmV3U29ydGluZ0NvbHVtbnMsIF9kZWZpbmVQcm9wZXJ0eSh7fSwgc2VsZWN0ZWRDb2x1bW4sIHtcbiAgICBkaXJlY3Rpb246IHNvcnRpbmdPcmRlci5GSVJTVCxcbiAgICBwb3NpdGlvbjogMFxuICB9KSk7XG59O1xuXG5leHBvcnRzLmRlZmF1bHQgPSBieUNvbHVtbnNQcmlvcml0aXplTGFzdFNvcnRlZDsiLCIndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5cbnZhciBfY2xvbmVEZWVwMiA9IHJlcXVpcmUoJ2xvZGFzaC9jbG9uZURlZXAnKTtcblxudmFyIF9jbG9uZURlZXAzID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfY2xvbmVEZWVwMik7XG5cbnZhciBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07XG5cbnZhciBfZGVmYXVsdE9yZGVyID0gcmVxdWlyZSgnLi9kZWZhdWx0LW9yZGVyJyk7XG5cbnZhciBfZGVmYXVsdE9yZGVyMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2RlZmF1bHRPcmRlcik7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbnZhciBieUNvbHVtbnMgPSBmdW5jdGlvbiBieUNvbHVtbnMoX3JlZikge1xuICB2YXIgc29ydGluZ0NvbHVtbnMgPSBfcmVmLnNvcnRpbmdDb2x1bW5zLFxuICAgICAgX3JlZiRzb3J0aW5nT3JkZXIgPSBfcmVmLnNvcnRpbmdPcmRlcixcbiAgICAgIHNvcnRpbmdPcmRlciA9IF9yZWYkc29ydGluZ09yZGVyID09PSB1bmRlZmluZWQgPyBfZGVmYXVsdE9yZGVyMi5kZWZhdWx0IDogX3JlZiRzb3J0aW5nT3JkZXIsXG4gICAgICBfcmVmJHNlbGVjdGVkQ29sdW1uID0gX3JlZi5zZWxlY3RlZENvbHVtbixcbiAgICAgIHNlbGVjdGVkQ29sdW1uID0gX3JlZiRzZWxlY3RlZENvbHVtbiA9PT0gdW5kZWZpbmVkID8gLTEgOiBfcmVmJHNlbGVjdGVkQ29sdW1uO1xuXG4gIHZhciBuZXdTb3J0aW5nQ29sdW1ucyA9IHt9O1xuXG4gIGlmIChzZWxlY3RlZENvbHVtbiA8IDApIHtcbiAgICByZXR1cm4gc29ydGluZ0NvbHVtbnM7XG4gIH1cblxuICBpZiAoIXNvcnRpbmdDb2x1bW5zKSB7XG4gICAgcmV0dXJuIF9kZWZpbmVQcm9wZXJ0eSh7fSwgc2VsZWN0ZWRDb2x1bW4sIHtcbiAgICAgIGRpcmVjdGlvbjogc29ydGluZ09yZGVyLkZJUlNULFxuICAgICAgcG9zaXRpb246IDBcbiAgICB9KTtcbiAgfSBlbHNlIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvcnRpbmdDb2x1bW5zLCBzZWxlY3RlZENvbHVtbikpIHtcbiAgICAvLyBDbG9uZSB0byBhdm9pZCBtdXRhdGluZyB0aGUgb3JpZ2luYWwgc3RydWN0dXJlXG4gICAgbmV3U29ydGluZ0NvbHVtbnMgPSAoMCwgX2Nsb25lRGVlcDMuZGVmYXVsdCkoc29ydGluZ0NvbHVtbnMpO1xuXG4gICAgdmFyIG5ld1NvcnQgPSBzb3J0aW5nT3JkZXJbbmV3U29ydGluZ0NvbHVtbnNbc2VsZWN0ZWRDb2x1bW5dLmRpcmVjdGlvbl07XG5cbiAgICBpZiAobmV3U29ydCkge1xuICAgICAgbmV3U29ydGluZ0NvbHVtbnNbc2VsZWN0ZWRDb2x1bW5dID0ge1xuICAgICAgICBkaXJlY3Rpb246IG5ld1NvcnQsXG4gICAgICAgIHBvc2l0aW9uOiBuZXdTb3J0aW5nQ29sdW1uc1tzZWxlY3RlZENvbHVtbl0ucG9zaXRpb25cbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBvbGRQb3NpdGlvbiA9IG5ld1NvcnRpbmdDb2x1bW5zW3NlbGVjdGVkQ29sdW1uXS5wb3NpdGlvbjtcblxuICAgICAgZGVsZXRlIG5ld1NvcnRpbmdDb2x1bW5zW3NlbGVjdGVkQ29sdW1uXTtcblxuICAgICAgLy8gVXBkYXRlIHBvc2l0aW9uIG9mIGNvbHVtbnMgYWZ0ZXIgdGhlIGRlbGV0ZWQgb25lXG4gICAgICBPYmplY3Qua2V5cyhuZXdTb3J0aW5nQ29sdW1ucykuZm9yRWFjaChmdW5jdGlvbiAoaykge1xuICAgICAgICB2YXIgdiA9IG5ld1NvcnRpbmdDb2x1bW5zW2tdO1xuXG4gICAgICAgIGlmICh2LnBvc2l0aW9uID4gb2xkUG9zaXRpb24pIHtcbiAgICAgICAgICB2LnBvc2l0aW9uIC09IDE7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBuZXdTb3J0aW5nQ29sdW1ucztcbiAgfVxuXG4gIHJldHVybiBfZXh0ZW5kcyh7fSwgc29ydGluZ0NvbHVtbnMsIF9kZWZpbmVQcm9wZXJ0eSh7fSwgc2VsZWN0ZWRDb2x1bW4sIHtcbiAgICBkaXJlY3Rpb246IHNvcnRpbmdPcmRlci5GSVJTVCxcbiAgICBwb3NpdGlvbjogT2JqZWN0LmtleXMoc29ydGluZ0NvbHVtbnMpLmxlbmd0aFxuICB9KSk7XG59O1xuXG5leHBvcnRzLmRlZmF1bHQgPSBieUNvbHVtbnM7IiwiJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xudmFyIGRlZmF1bHRPcmRlciA9IHtcbiAgRklSU1Q6ICdhc2MnLFxuICAnJzogJ2FzYycsXG4gIGFzYzogJ2Rlc2MnLFxuICBkZXNjOiAnJ1xufTtcblxuZXhwb3J0cy5kZWZhdWx0ID0gZGVmYXVsdE9yZGVyOyIsIid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcblxudmFyIF9zdHJhdGVnaWVzID0gcmVxdWlyZSgnLi9zdHJhdGVnaWVzJyk7XG5cbnZhciBfc3RyYXRlZ2llczIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9zdHJhdGVnaWVzKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuZXhwb3J0cy5kZWZhdWx0ID0gX3N0cmF0ZWdpZXMyLmRlZmF1bHQuYnlJbmRleDsiLCIndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5cbnZhciBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IC8qIGVzbGludC1kaXNhYmxlIHJlYWN0L3Byb3AtdHlwZXMgKi9cblxuXG52YXIgX3JlYWN0ID0gcmVxdWlyZSgncmVhY3QnKTtcblxudmFyIF9yZWFjdDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9yZWFjdCk7XG5cbnZhciBfZGVmYXVsdFN0cmF0ZWd5ID0gcmVxdWlyZSgnLi9kZWZhdWx0LXN0cmF0ZWd5Jyk7XG5cbnZhciBfZGVmYXVsdFN0cmF0ZWd5MiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2RlZmF1bHRTdHJhdGVneSk7XG5cbnZhciBfb3JkZXIgPSByZXF1aXJlKCcuL29yZGVyJyk7XG5cbnZhciBfb3JkZXIyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfb3JkZXIpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG52YXIgaGVhZGVyID0gZnVuY3Rpb24gaGVhZGVyKF9yZWYpIHtcbiAgdmFyIHNvcnRhYmxlID0gX3JlZi5zb3J0YWJsZSxcbiAgICAgIGdldFNvcnRpbmdDb2x1bW5zID0gX3JlZi5nZXRTb3J0aW5nQ29sdW1ucyxcbiAgICAgIF9yZWYkcHJvcHMgPSBfcmVmLnByb3BzLFxuICAgICAgcHJvcHMgPSBfcmVmJHByb3BzID09PSB1bmRlZmluZWQgPyB7XG4gICAgY29udGFpbmVyOiB7fSxcbiAgICB2YWx1ZToge30sXG4gICAgb3JkZXI6IHt9XG4gIH0gOiBfcmVmJHByb3BzLFxuICAgICAgX3JlZiRzdHJhdGVneSA9IF9yZWYuc3RyYXRlZ3ksXG4gICAgICBzdHJhdGVneSA9IF9yZWYkc3RyYXRlZ3kgPT09IHVuZGVmaW5lZCA/IF9kZWZhdWx0U3RyYXRlZ3kyLmRlZmF1bHQgOiBfcmVmJHN0cmF0ZWd5O1xuXG4gIGlmICghZ2V0U29ydGluZ0NvbHVtbnMpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2hlYWRlciAtIE1pc3NpbmcgZ2V0U29ydGluZ0NvbHVtbnMhJyk7XG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb24gKHZhbHVlLCBleHRyYSkge1xuICAgIHJldHVybiBfcmVhY3QyLmRlZmF1bHQuY3JlYXRlRWxlbWVudChcbiAgICAgICdkaXYnLFxuICAgICAgX2V4dGVuZHMoe1xuICAgICAgICBjbGFzc05hbWU6ICdzb3J0LWNvbnRhaW5lcidcbiAgICAgIH0sIHByb3BzLmNvbnRhaW5lciksXG4gICAgICBfcmVhY3QyLmRlZmF1bHQuY3JlYXRlRWxlbWVudChcbiAgICAgICAgJ3NwYW4nLFxuICAgICAgICBfZXh0ZW5kcyh7XG4gICAgICAgICAgY2xhc3NOYW1lOiAnc29ydC12YWx1ZSdcbiAgICAgICAgfSwgcHJvcHMudmFsdWUpLFxuICAgICAgICB2YWx1ZVxuICAgICAgKSxcbiAgICAgICgwLCBfb3JkZXIyLmRlZmF1bHQpKHtcbiAgICAgICAgZ2V0U29ydGluZ0NvbHVtbnM6IGdldFNvcnRpbmdDb2x1bW5zLFxuICAgICAgICBwcm9wczogcHJvcHMub3JkZXIsXG4gICAgICAgIHN0cmF0ZWd5OiBzdHJhdGVneVxuICAgICAgfSkodmFsdWUsIGV4dHJhKSxcbiAgICAgIHNvcnRhYmxlID8gX3JlYWN0Mi5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nLCBzb3J0YWJsZSh2YWx1ZSwgZXh0cmEpKSA6IG51bGxcbiAgICApO1xuICB9O1xufTtcblxuZXhwb3J0cy5kZWZhdWx0ID0gaGVhZGVyOyIsIid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcblxudmFyIF9ieUNvbHVtbiA9IHJlcXVpcmUoJy4vYnktY29sdW1uJyk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnYnlDb2x1bW4nLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9ieUNvbHVtbikuZGVmYXVsdDtcbiAgfVxufSk7XG5cbnZhciBfYnlDb2x1bW5zID0gcmVxdWlyZSgnLi9ieS1jb2x1bW5zJyk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnYnlDb2x1bW5zJywge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfYnlDb2x1bW5zKS5kZWZhdWx0O1xuICB9XG59KTtcblxudmFyIF9ieUNvbHVtbnNQcmlvcml0aXplTGFzdFNvcnRlZCA9IHJlcXVpcmUoJy4vYnktY29sdW1ucy1wcmlvcml0aXplLWxhc3Qtc29ydGVkJyk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnYnlDb2x1bW5zUHJpb3JpdGl6ZUxhc3RTb3J0ZWQnLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9ieUNvbHVtbnNQcmlvcml0aXplTGFzdFNvcnRlZCkuZGVmYXVsdDtcbiAgfVxufSk7XG5cbnZhciBfaGVhZGVyID0gcmVxdWlyZSgnLi9oZWFkZXInKTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdoZWFkZXInLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9oZWFkZXIpLmRlZmF1bHQ7XG4gIH1cbn0pO1xuXG52YXIgX3NvcnRlciA9IHJlcXVpcmUoJy4vc29ydGVyJyk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnc29ydGVyJywge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfc29ydGVyKS5kZWZhdWx0O1xuICB9XG59KTtcblxudmFyIF9yZXNldCA9IHJlcXVpcmUoJy4vcmVzZXQnKTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdyZXNldCcsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3Jlc2V0KS5kZWZhdWx0O1xuICB9XG59KTtcblxudmFyIF9zb3J0ID0gcmVxdWlyZSgnLi9zb3J0Jyk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnc29ydCcsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3NvcnQpLmRlZmF1bHQ7XG4gIH1cbn0pO1xuXG52YXIgX3N0cmF0ZWdpZXMgPSByZXF1aXJlKCcuL3N0cmF0ZWdpZXMnKTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdzdHJhdGVnaWVzJywge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfc3RyYXRlZ2llcykuZGVmYXVsdDtcbiAgfVxufSk7XG5cbnZhciBfb3JkZXIgPSByZXF1aXJlKCcuL29yZGVyJyk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnb3JkZXInLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9vcmRlcikuZGVmYXVsdDtcbiAgfVxufSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9IiwiJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuXG52YXIgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyAvKiBlc2xpbnQtZGlzYWJsZSByZWFjdC9wcm9wLXR5cGVzICovXG5cblxudmFyIF9yZWFjdCA9IHJlcXVpcmUoJ3JlYWN0Jyk7XG5cbnZhciBfcmVhY3QyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfcmVhY3QpO1xuXG52YXIgX2RlZmF1bHRTdHJhdGVneSA9IHJlcXVpcmUoJy4vZGVmYXVsdC1zdHJhdGVneScpO1xuXG52YXIgX2RlZmF1bHRTdHJhdGVneTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9kZWZhdWx0U3RyYXRlZ3kpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG52YXIgb3JkZXIgPSBmdW5jdGlvbiBvcmRlcihfcmVmKSB7XG4gIHZhciBnZXRTb3J0aW5nQ29sdW1ucyA9IF9yZWYuZ2V0U29ydGluZ0NvbHVtbnMsXG4gICAgICBfcmVmJHByb3BzID0gX3JlZi5wcm9wcyxcbiAgICAgIHByb3BzID0gX3JlZiRwcm9wcyA9PT0gdW5kZWZpbmVkID8ge30gOiBfcmVmJHByb3BzLFxuICAgICAgX3JlZiRzdHJhdGVneSA9IF9yZWYuc3RyYXRlZ3ksXG4gICAgICBzdHJhdGVneSA9IF9yZWYkc3RyYXRlZ3kgPT09IHVuZGVmaW5lZCA/IF9kZWZhdWx0U3RyYXRlZ3kyLmRlZmF1bHQgOiBfcmVmJHN0cmF0ZWd5O1xuXG4gIGlmICghZ2V0U29ydGluZ0NvbHVtbnMpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ29yZGVyIC0gTWlzc2luZyBnZXRTb3J0aW5nQ29sdW1ucyEnKTtcbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiAodmFsdWUsIGV4dHJhKSB7XG4gICAgdmFyIHNvcnRpbmdDb2x1bW5zID0gZ2V0U29ydGluZ0NvbHVtbnMoKTtcbiAgICB2YXIgc29ydGluZ0NvbHVtbiA9IHNvcnRpbmdDb2x1bW5zICYmIHNvcnRpbmdDb2x1bW5zW2V4dHJhW3N0cmF0ZWd5LmZpZWxkTmFtZV1dIHx8IHt9O1xuICAgIHZhciBzb3J0aW5nUG9zaXRpb24gPSBzb3J0aW5nQ29sdW1uLnBvc2l0aW9uO1xuXG4gICAgcmV0dXJuIHt9Lmhhc093blByb3BlcnR5LmNhbGwoc29ydGluZ0NvbHVtbiwgJ3Bvc2l0aW9uJykgPyBfcmVhY3QyLmRlZmF1bHQuY3JlYXRlRWxlbWVudChcbiAgICAgICdzcGFuJyxcbiAgICAgIF9leHRlbmRzKHsgY2xhc3NOYW1lOiAnc29ydC1vcmRlcicgfSwgcHJvcHMpLFxuICAgICAgc29ydGluZ1Bvc2l0aW9uICsgMVxuICAgICkgOiBudWxsO1xuICB9O1xufTtcblxuZXhwb3J0cy5kZWZhdWx0ID0gb3JkZXI7IiwiJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuXG52YXIgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9O1xuXG52YXIgX2RlZmF1bHRTdHJhdGVneSA9IHJlcXVpcmUoJy4vZGVmYXVsdC1zdHJhdGVneScpO1xuXG52YXIgX2RlZmF1bHRTdHJhdGVneTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9kZWZhdWx0U3RyYXRlZ3kpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG52YXIgcmVzZXQgPSBmdW5jdGlvbiByZXNldChfcmVmKSB7XG4gIHZhciBfcmVmJGV2ZW50ID0gX3JlZi5ldmVudCxcbiAgICAgIGV2ZW50ID0gX3JlZiRldmVudCA9PT0gdW5kZWZpbmVkID8gJ29uRG91YmxlQ2xpY2snIDogX3JlZiRldmVudCxcbiAgICAgIF9yZWYkZ2V0U29ydGluZ0NvbHVtbiA9IF9yZWYuZ2V0U29ydGluZ0NvbHVtbnMsXG4gICAgICBnZXRTb3J0aW5nQ29sdW1ucyA9IF9yZWYkZ2V0U29ydGluZ0NvbHVtbiA9PT0gdW5kZWZpbmVkID8gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBbXTtcbiAgfSA6IF9yZWYkZ2V0U29ydGluZ0NvbHVtbixcbiAgICAgIF9yZWYkb25SZXNldCA9IF9yZWYub25SZXNldCxcbiAgICAgIG9uUmVzZXQgPSBfcmVmJG9uUmVzZXQgPT09IHVuZGVmaW5lZCA/IGZ1bmN0aW9uICgpIHt9IDogX3JlZiRvblJlc2V0LFxuICAgICAgX3JlZiRzdHJhdGVneSA9IF9yZWYuc3RyYXRlZ3ksXG4gICAgICBzdHJhdGVneSA9IF9yZWYkc3RyYXRlZ3kgPT09IHVuZGVmaW5lZCA/IF9kZWZhdWx0U3RyYXRlZ3kyLmRlZmF1bHQgOiBfcmVmJHN0cmF0ZWd5O1xuICByZXR1cm4gZnVuY3Rpb24gKHZhbHVlLCBleHRyYSkge1xuICAgIHJldHVybiBfZGVmaW5lUHJvcGVydHkoe30sIGV2ZW50LCBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgc29ydGluZ0NvbHVtbnMgPSBnZXRTb3J0aW5nQ29sdW1ucygpO1xuXG4gICAgICBpZiAoIXNvcnRpbmdDb2x1bW5zIHx8ICFPYmplY3Qua2V5cyhzb3J0aW5nQ29sdW1ucykubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmFyIGZpZWxkID0gZXh0cmFbc3RyYXRlZ3kuZmllbGROYW1lXTtcblxuICAgICAgLy8gSWYgdGhlIGZpZWxkIGRvZXNuJ3QgZXhpc3QsIHRoZXJlJ3Mgbm90aGluZyB0byByZXNldFxuICAgICAgaWYgKCFzb3J0aW5nQ29sdW1uc1tmaWVsZF0pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB2YXIgcG9zaXRpb24gPSBzb3J0aW5nQ29sdW1uc1tmaWVsZF0ucG9zaXRpb247XG4gICAgICB2YXIgbmV3U29ydGluZ0NvbHVtbnMgPSB7fTtcblxuICAgICAgZGVsZXRlIHNvcnRpbmdDb2x1bW5zW2ZpZWxkXTtcblxuICAgICAgT2JqZWN0LmtleXMoc29ydGluZ0NvbHVtbnMpLmZvckVhY2goZnVuY3Rpb24gKGspIHtcbiAgICAgICAgdmFyIGNvbHVtbiA9IHNvcnRpbmdDb2x1bW5zW2tdO1xuXG4gICAgICAgIGlmIChjb2x1bW4ucG9zaXRpb24gPiBwb3NpdGlvbikge1xuICAgICAgICAgIG5ld1NvcnRpbmdDb2x1bW5zW2tdID0gX2V4dGVuZHMoe30sIGNvbHVtbiwge1xuICAgICAgICAgICAgcG9zaXRpb246IGNvbHVtbi5wb3NpdGlvbiAtIDFcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBuZXdTb3J0aW5nQ29sdW1uc1trXSA9IGNvbHVtbjtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIG9uUmVzZXQoe1xuICAgICAgICBzb3J0aW5nQ29sdW1uczogbmV3U29ydGluZ0NvbHVtbnNcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xufTtcblxuZXhwb3J0cy5kZWZhdWx0ID0gcmVzZXQ7IiwiJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuXG52YXIgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9O1xuXG52YXIgX2NsYXNzbmFtZXMgPSByZXF1aXJlKCdjbGFzc25hbWVzJyk7XG5cbnZhciBfY2xhc3NuYW1lczIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9jbGFzc25hbWVzKTtcblxudmFyIF9kZWZhdWx0U3RyYXRlZ3kgPSByZXF1aXJlKCcuL2RlZmF1bHQtc3RyYXRlZ3knKTtcblxudmFyIF9kZWZhdWx0U3RyYXRlZ3kyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfZGVmYXVsdFN0cmF0ZWd5KTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKG9iaiwga2V5cykgeyB2YXIgdGFyZ2V0ID0ge307IGZvciAodmFyIGkgaW4gb2JqKSB7IGlmIChrZXlzLmluZGV4T2YoaSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgaSkpIGNvbnRpbnVlOyB0YXJnZXRbaV0gPSBvYmpbaV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG52YXIgc29ydCA9IGZ1bmN0aW9uIHNvcnQoKSB7XG4gIHZhciBfcmVmID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fSxcbiAgICAgIF9yZWYkZXZlbnQgPSBfcmVmLmV2ZW50LFxuICAgICAgZXZlbnQgPSBfcmVmJGV2ZW50ID09PSB1bmRlZmluZWQgPyAnb25DbGljaycgOiBfcmVmJGV2ZW50LFxuICAgICAgX3JlZiRnZXRTb3J0aW5nQ29sdW1uID0gX3JlZi5nZXRTb3J0aW5nQ29sdW1ucyxcbiAgICAgIGdldFNvcnRpbmdDb2x1bW5zID0gX3JlZiRnZXRTb3J0aW5nQ29sdW1uID09PSB1bmRlZmluZWQgPyBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9IDogX3JlZiRnZXRTb3J0aW5nQ29sdW1uLFxuICAgICAgX3JlZiRvblNvcnQgPSBfcmVmLm9uU29ydCxcbiAgICAgIG9uU29ydCA9IF9yZWYkb25Tb3J0ID09PSB1bmRlZmluZWQgPyBmdW5jdGlvbiAoKSB7fSA6IF9yZWYkb25Tb3J0LFxuICAgICAgX3JlZiRzdHJhdGVneSA9IF9yZWYuc3RyYXRlZ3ksXG4gICAgICBzdHJhdGVneSA9IF9yZWYkc3RyYXRlZ3kgPT09IHVuZGVmaW5lZCA/IF9kZWZhdWx0U3RyYXRlZ3kyLmRlZmF1bHQgOiBfcmVmJHN0cmF0ZWd5O1xuXG4gIHJldHVybiBmdW5jdGlvbiAoX3ZhbHVlLCBleHRyYSkge1xuICAgIHZhciBfcmVmMiA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDoge307XG5cbiAgICB2YXIgY2xhc3NOYW1lID0gX3JlZjIuY2xhc3NOYW1lLFxuICAgICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmMiwgWydjbGFzc05hbWUnXSk7XG5cbiAgICB2YXIgc29ydGluZ0NvbHVtbnMgPSBnZXRTb3J0aW5nQ29sdW1ucygpO1xuICAgIHZhciBmaWVsZCA9IGV4dHJhW3N0cmF0ZWd5LmZpZWxkTmFtZV07XG4gICAgdmFyIGhlYWRlckNsYXNzID0gJ3NvcnQgc29ydC1ub25lJztcblxuICAgIC8vIENoZWNrIGFnYWluc3QgdW5kZWZpbmVkIHRvIGFsbG93IHplcm9cbiAgICBpZiAoc29ydGluZ0NvbHVtbnNbZmllbGRdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGhlYWRlckNsYXNzID0gJ3NvcnQgc29ydC0nICsgc29ydGluZ0NvbHVtbnNbZmllbGRdLmRpcmVjdGlvbjtcbiAgICB9XG5cbiAgICByZXR1cm4gX2V4dGVuZHMoe30sIHByb3BzLCBfZGVmaW5lUHJvcGVydHkoe1xuICAgICAgY2xhc3NOYW1lOiAoMCwgX2NsYXNzbmFtZXMyLmRlZmF1bHQpKGNsYXNzTmFtZSwgaGVhZGVyQ2xhc3MpXG4gICAgfSwgZXZlbnQsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBvblNvcnQoZmllbGQpO1xuICAgIH0pKTtcbiAgfTtcbn07XG5cbmV4cG9ydHMuZGVmYXVsdCA9IHNvcnQ7IiwiJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuXG52YXIgX3Jlc3VsdCA9IHJlcXVpcmUoJ2xvZGFzaC9yZXN1bHQnKTtcblxudmFyIF9yZXN1bHQyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfcmVzdWx0KTtcblxudmFyIF9nZXQgPSByZXF1aXJlKCdsb2Rhc2gvZ2V0Jyk7XG5cbnZhciBfZ2V0MiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2dldCk7XG5cbnZhciBfZGVmYXVsdFN0cmF0ZWd5ID0gcmVxdWlyZSgnLi9kZWZhdWx0LXN0cmF0ZWd5Jyk7XG5cbnZhciBfZGVmYXVsdFN0cmF0ZWd5MiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2RlZmF1bHRTdHJhdGVneSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbi8vIHNvcnRlciA9PT0gbG9kYXNoIG9yZGVyQnlcbi8vIGh0dHBzOi8vbG9kYXNoLmNvbS9kb2NzI29yZGVyQnlcbnZhciBzb3J0ZXIgPSBmdW5jdGlvbiBzb3J0ZXIoKSB7XG4gIHZhciBfcmVmID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fSxcbiAgICAgIGNvbHVtbnMgPSBfcmVmLmNvbHVtbnMsXG4gICAgICBzb3J0aW5nQ29sdW1ucyA9IF9yZWYuc29ydGluZ0NvbHVtbnMsXG4gICAgICBzb3J0ID0gX3JlZi5zb3J0LFxuICAgICAgX3JlZiRzdHJhdGVneSA9IF9yZWYuc3RyYXRlZ3ksXG4gICAgICBzdHJhdGVneSA9IF9yZWYkc3RyYXRlZ3kgPT09IHVuZGVmaW5lZCA/IF9kZWZhdWx0U3RyYXRlZ3kyLmRlZmF1bHQgOiBfcmVmJHN0cmF0ZWd5O1xuXG4gIHJldHVybiBmdW5jdGlvbiAoZGF0YSkge1xuICAgIGlmICghY29sdW1ucykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdzb3J0LnNvcnRlciAtIE1pc3NpbmcgXCJjb2x1bW5zXCIgYXJndW1lbnQhJyk7XG4gICAgfVxuXG4gICAgaWYgKCFzb3J0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3NvcnQuc29ydGVyIC0gTWlzc2luZyBcInNvcnRcIiBhcmd1bWVudCEnKTtcbiAgICB9XG5cbiAgICBpZiAoIXNvcnRpbmdDb2x1bW5zKSB7XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICB2YXIgY29sdW1uSW5kZXhMaXN0ID0gbmV3IEFycmF5KHNvcnRpbmdDb2x1bW5zLmxlbmd0aCk7XG4gICAgdmFyIG9yZGVyTGlzdCA9IG5ldyBBcnJheShzb3J0aW5nQ29sdW1ucy5sZW5ndGgpO1xuXG4gICAgT2JqZWN0LmtleXMoc29ydGluZ0NvbHVtbnMpLmZvckVhY2goZnVuY3Rpb24gKHNvcnRpbmdDb2x1bW5LZXkpIHtcbiAgICAgIHZhciByZWFsQ29sdW1uID0gc3RyYXRlZ3kuZ2V0Q29sdW1uKGNvbHVtbnMsIHNvcnRpbmdDb2x1bW5LZXkpIHx8IHt9O1xuICAgICAgdmFyIHNvcnRpbmdDb2x1bW4gPSBzb3J0aW5nQ29sdW1uc1tzb3J0aW5nQ29sdW1uS2V5XTtcblxuICAgICAgY29sdW1uSW5kZXhMaXN0W3NvcnRpbmdDb2x1bW4ucG9zaXRpb25dID0gZnVuY3Rpb24gKHJvdykge1xuICAgICAgICB2YXIgcHJvcGVydHkgPSByZWFsQ29sdW1uLnByb3BlcnR5O1xuICAgICAgICB2YXIgdmFsdWUgPSByb3dbcHJvcGVydHldO1xuICAgICAgICAvLyBQaWNrIHJlc29sdmVkIHZhbHVlIGJ5IGNvbnZlbnRpb25cbiAgICAgICAgdmFyIHJlc29sdmVkVmFsdWUgPSAoMCwgX2dldDIuZGVmYXVsdCkocm93LCAnXycgKyBwcm9wZXJ0eSwgdmFsdWUpO1xuXG4gICAgICAgIHJldHVybiAoMCwgX3Jlc3VsdDIuZGVmYXVsdCkocmVzb2x2ZWRWYWx1ZSwgJ3RvTG93ZXJDYXNlJywgcmVzb2x2ZWRWYWx1ZSk7XG4gICAgICB9O1xuXG4gICAgICBvcmRlckxpc3Rbc29ydGluZ0NvbHVtbi5wb3NpdGlvbl0gPSBzb3J0aW5nQ29sdW1uLmRpcmVjdGlvbjtcbiAgICB9KTtcblxuICAgIHJldHVybiBzb3J0KGRhdGEsIGNvbHVtbkluZGV4TGlzdCwgb3JkZXJMaXN0KTtcbiAgfTtcbn07XG5cbmV4cG9ydHMuZGVmYXVsdCA9IHNvcnRlcjsiLCIndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5cbnZhciBfZmluZDIgPSByZXF1aXJlKCdsb2Rhc2gvZmluZCcpO1xuXG52YXIgX2ZpbmQzID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfZmluZDIpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG52YXIgYnlJbmRleCA9IHtcbiAgZmllbGROYW1lOiAnY29sdW1uSW5kZXgnLFxuICBnZXRDb2x1bW46IGZ1bmN0aW9uIGdldENvbHVtbihjb2x1bW5zLCBzb3J0aW5nQ29sdW1uS2V5KSB7XG4gICAgcmV0dXJuIGNvbHVtbnNbc29ydGluZ0NvbHVtbktleV07XG4gIH1cbn07XG5cbnZhciBieVByb3BlcnR5ID0ge1xuICBmaWVsZE5hbWU6ICdwcm9wZXJ0eScsXG4gIGdldENvbHVtbjogZnVuY3Rpb24gZ2V0Q29sdW1uKGNvbHVtbnMsIHByb3BlcnR5KSB7XG4gICAgcmV0dXJuICgwLCBfZmluZDMuZGVmYXVsdCkoY29sdW1ucywgeyBwcm9wZXJ0eTogcHJvcGVydHkgfSk7XG4gIH1cbn07XG5cbmV4cG9ydHMuZGVmYXVsdCA9IHtcbiAgYnlJbmRleDogYnlJbmRleCxcbiAgYnlQcm9wZXJ0eTogYnlQcm9wZXJ0eVxufTsiXSwibmFtZXMiOlsiaGFzT3duIiwiaGFzT3duUHJvcGVydHkiLCJjbGFzc05hbWVzIiwiY2xhc3NlcyIsImkiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJhcmciLCJhcmdUeXBlIiwicHVzaCIsIkFycmF5IiwiaXNBcnJheSIsImlubmVyIiwiYXBwbHkiLCJ0b1N0cmluZyIsIk9iamVjdCIsInByb3RvdHlwZSIsImluY2x1ZGVzIiwia2V5IiwiY2FsbCIsImpvaW4iLCJtb2R1bGUiLCJleHBvcnRzIiwiZGVmYXVsdCIsImFycmF5RWFjaCIsImFycmF5IiwiaXRlcmF0ZWUiLCJpbmRleCIsImNvcHlPYmplY3QiLCJrZXlzIiwiYmFzZUFzc2lnbiIsIm9iamVjdCIsInNvdXJjZSIsImtleXNJbiIsImJhc2VBc3NpZ25JbiIsIlN0YWNrIiwiYXNzaWduVmFsdWUiLCJjbG9uZUJ1ZmZlciIsImNvcHlBcnJheSIsImNvcHlTeW1ib2xzIiwiY29weVN5bWJvbHNJbiIsImdldEFsbEtleXMiLCJnZXRBbGxLZXlzSW4iLCJnZXRUYWciLCJpbml0Q2xvbmVBcnJheSIsImluaXRDbG9uZUJ5VGFnIiwiaW5pdENsb25lT2JqZWN0IiwiaXNCdWZmZXIiLCJpc01hcCIsImlzT2JqZWN0IiwiaXNTZXQiLCJjbG9uZWFibGVUYWdzIiwiYmFzZUNsb25lIiwidmFsdWUiLCJiaXRtYXNrIiwiY3VzdG9taXplciIsInN0YWNrIiwicmVzdWx0IiwiaXNEZWVwIiwiaXNGbGF0IiwiaXNGdWxsIiwidW5kZWZpbmVkIiwiaXNBcnIiLCJ0YWciLCJpc0Z1bmMiLCJzdGFja2VkIiwiZ2V0Iiwic2V0IiwiZm9yRWFjaCIsInN1YlZhbHVlIiwiYWRkIiwicHJvcHMiLCJiYXNlRmluZEluZGV4IiwicHJlZGljYXRlIiwiZnJvbUluZGV4IiwiZnJvbVJpZ2h0IiwiaXNPYmplY3RMaWtlIiwiYmFzZUlzTWFwIiwiYmFzZUlzU2V0IiwidHJpbW1lZEVuZEluZGV4IiwicmVUcmltU3RhcnQiLCJiYXNlVHJpbSIsInN0cmluZyIsInNsaWNlIiwicmVwbGFjZSIsImNsb25lQXJyYXlCdWZmZXIiLCJjbG9uZURhdGFWaWV3IiwiZGF0YVZpZXciLCJidWZmZXIiLCJjb25zdHJ1Y3RvciIsImJ5dGVPZmZzZXQiLCJieXRlTGVuZ3RoIiwicmVGbGFncyIsImNsb25lUmVnRXhwIiwicmVnZXhwIiwiZXhlYyIsImxhc3RJbmRleCIsIlN5bWJvbCIsInN5bWJvbFByb3RvIiwic3ltYm9sVmFsdWVPZiIsInZhbHVlT2YiLCJjbG9uZVN5bWJvbCIsInN5bWJvbCIsImdldFN5bWJvbHMiLCJnZXRTeW1ib2xzSW4iLCJiYXNlSXRlcmF0ZWUiLCJpc0FycmF5TGlrZSIsImNyZWF0ZUZpbmQiLCJmaW5kSW5kZXhGdW5jIiwiY29sbGVjdGlvbiIsIml0ZXJhYmxlIiwiaW5wdXQiLCJjbG9uZVR5cGVkQXJyYXkiLCJDdG9yIiwicmVXaGl0ZXNwYWNlIiwidGVzdCIsImNoYXJBdCIsImNsb25lRGVlcCIsIkNMT05FX0RFRVBfRkxBRyIsImZpbmQiLCJ0b0ludGVnZXIiLCJuYXRpdmVNYXgiLCJNYXRoIiwibWF4IiwiZmluZEluZGV4IiwiYmFzZVVuYXJ5Iiwibm9kZVV0aWwiLCJub2RlSXNNYXAiLCJub2RlSXNTZXQiLCJjYXN0UGF0aCIsImlzRnVuY3Rpb24iLCJ0b0tleSIsInBhdGgiLCJkZWZhdWx0VmFsdWUiLCJ0b051bWJlciIsInRvRmluaXRlIiwicmVtYWluZGVyIiwiaXNTeW1ib2wiLCJyZUlzQmFkSGV4IiwicmVJc0JpbmFyeSIsInJlSXNPY3RhbCIsImZyZWVQYXJzZUludCIsInBhcnNlSW50Iiwib3RoZXIiLCJpc0JpbmFyeSIsImRlZmluZVByb3BlcnR5IiwiX2RlZmF1bHRPcmRlcjIiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0Iiwib2JqIiwiX19lc01vZHVsZSIsImJ5Q29sdW1uIiwiX3JlZiIsInNvcnRpbmdDb2x1bW5zIiwiX3JlZiRzb3J0aW5nT3JkZXIiLCJzb3J0aW5nT3JkZXIiLCJfcmVmJHNlbGVjdGVkQ29sdW1uIiwic2VsZWN0ZWRDb2x1bW4iLCJzb3J0IiwiRklSU1QiLCJkaXJlY3Rpb24iLCJfZGVmaW5lUHJvcGVydHkiLCJlbnVtZXJhYmxlIiwiY29uZmlndXJhYmxlIiwid3JpdGFibGUiLCJwb3NpdGlvbiIsIl9jbG9uZURlZXAzIiwiX2V4dGVuZHMiLCJhc3NpZ24iLCJ0YXJnZXQiLCJieUNvbHVtbnNQcmlvcml0aXplTGFzdFNvcnRlZCIsIm5ld1NvcnRpbmdDb2x1bW5zIiwibmV3U29ydCIsIm9sZFBvc2l0aW9uIiwiayIsInYiLCJieUNvbHVtbnMiLCJhc2MiLCJkZXNjIiwiX3N0cmF0ZWdpZXMyIiwiYnlJbmRleCIsIl9yZWFjdDIiLCJfZGVmYXVsdFN0cmF0ZWd5MiIsIl9vcmRlcjIiLCJoZWFkZXIiLCJzb3J0YWJsZSIsImdldFNvcnRpbmdDb2x1bW5zIiwiX3JlZiRwcm9wcyIsImNvbnRhaW5lciIsIm9yZGVyIiwiX3JlZiRzdHJhdGVneSIsInN0cmF0ZWd5IiwiRXJyb3IiLCJleHRyYSIsImNyZWF0ZUVsZW1lbnQiLCJjbGFzc05hbWUiLCJfYnlDb2x1bW4iLCJfYnlDb2x1bW5zIiwiX2J5Q29sdW1uc1ByaW9yaXRpemVMYXN0U29ydGVkIiwiX2hlYWRlciIsIl9zb3J0ZXIiLCJfcmVzZXQiLCJfc29ydCIsIl9zdHJhdGVnaWVzIiwiX29yZGVyIiwic29ydGluZ0NvbHVtbiIsImZpZWxkTmFtZSIsInNvcnRpbmdQb3NpdGlvbiIsInJlc2V0IiwiX3JlZiRldmVudCIsImV2ZW50IiwiX3JlZiRnZXRTb3J0aW5nQ29sdW1uIiwiX3JlZiRvblJlc2V0Iiwib25SZXNldCIsImZpZWxkIiwiY29sdW1uIiwiX2NsYXNzbmFtZXMyIiwiX3JlZiRvblNvcnQiLCJvblNvcnQiLCJfdmFsdWUiLCJfcmVmMiIsIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsImluZGV4T2YiLCJoZWFkZXJDbGFzcyIsIl9yZXN1bHQyIiwiX2dldDIiLCJzb3J0ZXIiLCJjb2x1bW5zIiwiZGF0YSIsImNvbHVtbkluZGV4TGlzdCIsIm9yZGVyTGlzdCIsInNvcnRpbmdDb2x1bW5LZXkiLCJyZWFsQ29sdW1uIiwiZ2V0Q29sdW1uIiwicm93IiwicHJvcGVydHkiLCJyZXNvbHZlZFZhbHVlIiwiX2ZpbmQzIiwiYnlQcm9wZXJ0eSJdLCJzb3VyY2VSb290IjoiIn0=