react-dropzone 8.2.0 → 9.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/es/index.js CHANGED
@@ -19,7 +19,6 @@ function _inherits(subClass, superClass) { if (typeof superClass !== "function"
19
19
  import React from 'react';
20
20
  import { fromEvent } from 'file-selector';
21
21
  import PropTypes from 'prop-types';
22
- import deprecated from 'prop-types-extra/lib/deprecated';
23
22
  import { isDragDataWithFiles, supportMultiple, fileAccepted, allFilesAccepted, fileMatchSize, onDocumentDragOver, isIeOrEdge, composeEventHandlers, isPropagationStopped, isDefaultPrevented } from './utils';
24
23
 
25
24
  var Dropzone = function (_React$Component) {
@@ -185,9 +184,7 @@ var Dropzone = function (_React$Component) {
185
184
  });
186
185
  }
187
186
  }, _this.onClick = function (evt) {
188
- var _this$props2 = _this.props,
189
- onClick = _this$props2.onClick,
190
- disableClick = _this$props2.disableClick;
187
+ var onClick = _this.props.onClick;
191
188
 
192
189
  // if onClick prop is given, run it first
193
190
 
@@ -195,9 +192,9 @@ var Dropzone = function (_React$Component) {
195
192
  onClick.call(_this, evt);
196
193
  }
197
194
 
198
- // if disableClick is not set and the event hasn't been default prefented within
195
+ // If the event hasn't been default prevented from within
199
196
  // the onClick listener, open the file dialog
200
- if (!disableClick && !isDefaultPrevented(evt)) {
197
+ if (!isDefaultPrevented(evt)) {
201
198
  evt.stopPropagation();
202
199
 
203
200
  // in IE11/Edge the file-browser dialog is blocking, ensure this is behind setTimeout
@@ -309,10 +306,10 @@ var Dropzone = function (_React$Component) {
309
306
  onClick = _ref3.onClick,
310
307
  rest = _objectWithoutProperties(_ref3, ['refKey', 'onChange', 'onClick']);
311
308
 
312
- var _this$props3 = _this.props,
313
- accept = _this$props3.accept,
314
- multiple = _this$props3.multiple,
315
- name = _this$props3.name;
309
+ var _this$props2 = _this.props,
310
+ accept = _this$props2.accept,
311
+ multiple = _this$props2.multiple,
312
+ name = _this$props2.name;
316
313
 
317
314
  var inputProps = _defineProperty({
318
315
  accept: accept,
@@ -441,13 +438,6 @@ Dropzone.propTypes = {
441
438
  */
442
439
  children: PropTypes.func,
443
440
 
444
- /**
445
- * Disallow clicking on the dropzone container to open file dialog
446
- * @deprecated Use onClick={evt => evt.preventDefault()} to prevent the default behaviour (open the file select dialog).
447
- * This prop will be removed in the next major version.
448
- */
449
- disableClick: deprecated(PropTypes.bool, 'Use onClick={evt => evt.preventDefault()} instead. This prop will be removed in the next major version'),
450
-
451
441
  /**
452
442
  * Enable/disable the dropzone entirely
453
443
  */
@@ -576,7 +566,6 @@ Dropzone.propTypes = {
576
566
  Dropzone.defaultProps = {
577
567
  preventDropOnDocument: true,
578
568
  disabled: false,
579
- disableClick: false,
580
569
  multiple: true,
581
570
  maxSize: Infinity,
582
571
  minSize: 0,
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
- !function(e,n){"object"==typeof exports&&"undefined"!=typeof module?module.exports=n(require("react"),require("prop-types")):"function"==typeof define&&define.amd?define(["react","prop-types"],n):e.Dropzone=n(e.React,e.PropTypes)}(this,function(e,n){"use strict";function t(e,n,t,r){return new(t||(t=Promise))(function(o,i){function a(e){try{c(r.next(e))}catch(e){i(e)}}function u(e){try{c(r.throw(e))}catch(e){i(e)}}function c(e){e.done?o(e.value):new t(function(n){n(e.value)}).then(a,u)}c((r=r.apply(e,n||[])).next())})}function r(e,n){var t,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:u(0),throw:u(1),return:u(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function u(i){return function(u){return function(i){if(t)throw new TypeError("Generator is already executing.");for(;a;)try{if(t=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,r=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!(o=(o=a.trys).length>0&&o[o.length-1])&&(6===i[0]||2===i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]<o[3])){a.label=i[1];break}if(6===i[0]&&a.label<o[1]){a.label=o[1],o=i;break}if(o&&a.label<o[2]){a.label=o[2],a.ops.push(i);break}o[2]&&a.ops.pop(),a.trys.pop();continue}i=n.call(e,a)}catch(e){i=[6,e],r=0}finally{t=o=0}if(5&i[0])throw i[1];return{value:i[0]?i[1]:void 0,done:!0}}([i,u])}}}function o(e,n){var t="function"==typeof Symbol&&e[Symbol.iterator];if(!t)return e;var r,o,i=t.call(e),a=[];try{for(;(void 0===n||n-- >0)&&!(r=i.next()).done;)a.push(r.value)}catch(e){o={error:e}}finally{try{r&&!r.done&&(t=i.return)&&t.call(i)}finally{if(o)throw o.error}}return a}e=e&&e.hasOwnProperty("default")?e.default:e,n=n&&n.hasOwnProperty("default")?n.default:n;var i=new Map([["avi","video/avi"],["gif","image/gif"],["ico","image/x-icon"],["jpeg","image/jpeg"],["jpg","image/jpeg"],["mkv","video/x-matroska"],["mov","video/quicktime"],["mp4","video/mp4"],["pdf","application/pdf"],["png","image/png"],["zip","application/zip"],["doc","application/msword"],["docx","application/vnd.openxmlformats-officedocument.wordprocessingml.document"]]);function a(e,n){var t=function(e){var n=e.name;if(n&&-1!==n.lastIndexOf(".")&&!e.type){var t=n.split(".").pop().toLowerCase(),r=i.get(t);r&&Object.defineProperty(e,"type",{value:r,writable:!1,configurable:!1})}return e}(e);return Object.defineProperty(t,"path",{value:"string"==typeof n?n:e.name,writable:!1,configurable:!1}),t}var u=[".DS_Store","Thumbs.db"];function c(e){var n=e.getAsFile();if(!n)return Promise.reject(e+" is not a File");var t=a(n);return Promise.resolve(t)}function f(e){return t(this,void 0,void 0,function(){return r(this,function(n){return[2,e.isDirectory?s(e):function(e){return t(this,void 0,void 0,function(){return r(this,function(n){return[2,new Promise(function(n,t){e.file(function(t){var r=a(t,e.fullPath);n(r)},function(e){t(e)})})]})})}(e)]})})}function s(e){var n=e.createReader();return new Promise(function(e,o){var i=[];!function a(){var u=this;n.readEntries(function(n){return t(u,void 0,void 0,function(){var t,u,c;return r(this,function(r){switch(r.label){case 0:if(n.length)return[3,5];r.label=1;case 1:return r.trys.push([1,3,,4]),[4,Promise.all(i)];case 2:return t=r.sent(),e(t),[3,4];case 3:return u=r.sent(),o(u),[3,4];case 4:return[3,6];case 5:c=Promise.all(n.map(f)),i.push(c),a(),r.label=6;case 6:return[2]}})})},function(e){o(e)})}()})}function l(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}function p(e,n){return e(n={exports:{}},n.exports),n.exports}var d=function(){};"production"!==process.env.NODE_ENV&&(d=function(e,n,t){var r=arguments.length;t=new Array(r>2?r-2:0);for(var o=2;o<r;o++)t[o-2]=arguments[o];if(void 0===n)throw new Error("`warning(condition, format, ...args)` requires a warning message argument");if(n.length<10||/^[s\W]*$/.test(n))throw new Error("The warning format should be able to uniquely identify this warning. Please, use a more descriptive format than: "+n);if(!e){var i=0,a="Warning: "+n.replace(/%s/g,function(){return t[i++]});"undefined"!=typeof console&&console.error(a);try{throw new Error(a)}catch(e){}}});var v=d,g=l(p(function(e,n){Object.defineProperty(n,"__esModule",{value:!0}),n.default=i;var t,r=(t=v)&&t.__esModule?t:{default:t};var o={};function i(e,n){return function(t,i,a,u,c){var f=a||"<<anonymous>>",s=c||i;if(null!=t[i]){var l=a+"."+i;(0,r.default)(o[l],"The "+u+" `"+s+"` of `"+f+"` is deprecated. "+n+"."),o[l]=!0}for(var p=arguments.length,d=Array(p>5?p-5:0),v=5;v<p;v++)d[v-5]=arguments[v];return e.apply(void 0,[t,i,a,u,c].concat(d))}}i._resetWarned=function(){o={}},e.exports=n.default})),y=l(p(function(e){e.exports=function(e){function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}var t={};return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{configurable:!1,enumerable:!0,get:r})},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,n){return Object.prototype.hasOwnProperty.call(e,n)},n.p="",n(n.s=13)}([function(e,n){var t=e.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=t)},function(e,n){e.exports=function(e){return"object"==typeof e?null!==e:"function"==typeof e}},function(e,n){var t=e.exports={version:"2.5.0"};"number"==typeof __e&&(__e=t)},function(e,n,t){e.exports=!t(4)(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a})},function(e,n){e.exports=function(e){try{return!!e()}catch(e){return!0}}},function(e,n){var t={}.toString;e.exports=function(e){return t.call(e).slice(8,-1)}},function(e,n,t){var r=t(32)("wks"),o=t(9),i=t(0).Symbol,a="function"==typeof i;(e.exports=function(e){return r[e]||(r[e]=a&&i[e]||(a?i:o)("Symbol."+e))}).store=r},function(e,n,t){var r=t(0),o=t(2),i=t(8),a=t(22),u=t(10),c=function(e,n,t){var f,s,l,p,d=e&c.F,v=e&c.G,g=e&c.S,y=e&c.P,h=e&c.B,m=v?r:g?r[n]||(r[n]={}):(r[n]||{}).prototype,D=v?o:o[n]||(o[n]={}),b=D.prototype||(D.prototype={});for(f in v&&(t=n),t)l=((s=!d&&m&&void 0!==m[f])?m:t)[f],p=h&&s?u(l,r):y&&"function"==typeof l?u(Function.call,l):l,m&&a(m,f,l,e&c.U),D[f]!=l&&i(D,f,p),y&&b[f]!=l&&(b[f]=l)};r.core=o,c.F=1,c.G=2,c.S=4,c.P=8,c.B=16,c.W=32,c.U=64,c.R=128,e.exports=c},function(e,n,t){var r=t(16),o=t(21);e.exports=t(3)?function(e,n,t){return r.f(e,n,o(1,t))}:function(e,n,t){return e[n]=t,e}},function(e,n){var t=0,r=Math.random();e.exports=function(e){return"Symbol(".concat(void 0===e?"":e,")_",(++t+r).toString(36))}},function(e,n,t){var r=t(24);e.exports=function(e,n,t){if(r(e),void 0===n)return e;switch(t){case 1:return function(t){return e.call(n,t)};case 2:return function(t,r){return e.call(n,t,r)};case 3:return function(t,r,o){return e.call(n,t,r,o)}}return function(){return e.apply(n,arguments)}}},function(e,n){e.exports=function(e){if(void 0==e)throw TypeError("Can't call method on "+e);return e}},function(e,n,t){var r=t(28),o=Math.min;e.exports=function(e){return e>0?o(r(e),9007199254740991):0}},function(e,n,t){n.__esModule=!0,n.default=function(e,n){if(e&&n){var t=Array.isArray(n)?n:n.split(","),r=e.name||"",o=e.type||"",i=o.replace(/\/.*$/,"");return t.some(function(e){var n=e.trim();return"."===n.charAt(0)?r.toLowerCase().endsWith(n.toLowerCase()):n.endsWith("/*")?i===n.replace(/\/.*$/,""):o===n})}return!0},t(14),t(34)},function(e,n,t){t(15),e.exports=t(2).Array.some},function(e,n,t){var r=t(7),o=t(25)(3);r(r.P+r.F*!t(33)([].some,!0),"Array",{some:function(e){return o(this,e,arguments[1])}})},function(e,n,t){var r=t(17),o=t(18),i=t(20),a=Object.defineProperty;n.f=t(3)?Object.defineProperty:function(e,n,t){if(r(e),n=i(n,!0),r(t),o)try{return a(e,n,t)}catch(e){}if("get"in t||"set"in t)throw TypeError("Accessors not supported!");return"value"in t&&(e[n]=t.value),e}},function(e,n,t){var r=t(1);e.exports=function(e){if(!r(e))throw TypeError(e+" is not an object!");return e}},function(e,n,t){e.exports=!t(3)&&!t(4)(function(){return 7!=Object.defineProperty(t(19)("div"),"a",{get:function(){return 7}}).a})},function(e,n,t){var r=t(1),o=t(0).document,i=r(o)&&r(o.createElement);e.exports=function(e){return i?o.createElement(e):{}}},function(e,n,t){var r=t(1);e.exports=function(e,n){if(!r(e))return e;var t,o;if(n&&"function"==typeof(t=e.toString)&&!r(o=t.call(e)))return o;if("function"==typeof(t=e.valueOf)&&!r(o=t.call(e)))return o;if(!n&&"function"==typeof(t=e.toString)&&!r(o=t.call(e)))return o;throw TypeError("Can't convert object to primitive value")}},function(e,n){e.exports=function(e,n){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:n}}},function(e,n,t){var r=t(0),o=t(8),i=t(23),a=t(9)("src"),u=Function.toString,c=(""+u).split("toString");t(2).inspectSource=function(e){return u.call(e)},(e.exports=function(e,n,t,u){var f="function"==typeof t;f&&(i(t,"name")||o(t,"name",n)),e[n]!==t&&(f&&(i(t,a)||o(t,a,e[n]?""+e[n]:c.join(String(n)))),e===r?e[n]=t:u?e[n]?e[n]=t:o(e,n,t):(delete e[n],o(e,n,t)))})(Function.prototype,"toString",function(){return"function"==typeof this&&this[a]||u.call(this)})},function(e,n){var t={}.hasOwnProperty;e.exports=function(e,n){return t.call(e,n)}},function(e,n){e.exports=function(e){if("function"!=typeof e)throw TypeError(e+" is not a function!");return e}},function(e,n,t){var r=t(10),o=t(26),i=t(27),a=t(12),u=t(29);e.exports=function(e,n){var t=1==e,c=2==e,f=3==e,s=4==e,l=6==e,p=5==e||l,d=n||u;return function(n,u,v){for(var g,y,h=i(n),m=o(h),D=r(u,v,3),b=a(m.length),w=0,x=t?d(n,b):c?d(n,0):void 0;b>w;w++)if((p||w in m)&&(y=D(g=m[w],w,h),e))if(t)x[w]=y;else if(y)switch(e){case 3:return!0;case 5:return g;case 6:return w;case 2:x.push(g)}else if(s)return!1;return l?-1:f||s?s:x}}},function(e,n,t){var r=t(5);e.exports=Object("z").propertyIsEnumerable(0)?Object:function(e){return"String"==r(e)?e.split(""):Object(e)}},function(e,n,t){var r=t(11);e.exports=function(e){return Object(r(e))}},function(e,n){var t=Math.ceil,r=Math.floor;e.exports=function(e){return isNaN(e=+e)?0:(e>0?r:t)(e)}},function(e,n,t){var r=t(30);e.exports=function(e,n){return new(r(e))(n)}},function(e,n,t){var r=t(1),o=t(31),i=t(6)("species");e.exports=function(e){var n;return o(e)&&("function"!=typeof(n=e.constructor)||n!==Array&&!o(n.prototype)||(n=void 0),r(n)&&null===(n=n[i])&&(n=void 0)),void 0===n?Array:n}},function(e,n,t){var r=t(5);e.exports=Array.isArray||function(e){return"Array"==r(e)}},function(e,n,t){var r=t(0),o=r["__core-js_shared__"]||(r["__core-js_shared__"]={});e.exports=function(e){return o[e]||(o[e]={})}},function(e,n,t){var r=t(4);e.exports=function(e,n){return!!e&&r(function(){n?e.call(null,function(){},1):e.call(null)})}},function(e,n,t){t(35),e.exports=t(2).String.endsWith},function(e,n,t){var r=t(7),o=t(12),i=t(36),a="".endsWith;r(r.P+r.F*t(38)("endsWith"),"String",{endsWith:function(e){var n=i(this,e,"endsWith"),t=arguments.length>1?arguments[1]:void 0,r=o(n.length),u=void 0===t?r:Math.min(o(t),r),c=String(e);return a?a.call(n,c,u):n.slice(u-c.length,u)===c}})},function(e,n,t){var r=t(37),o=t(11);e.exports=function(e,n,t){if(r(n))throw TypeError("String#"+t+" doesn't accept regex!");return String(o(e))}},function(e,n,t){var r=t(1),o=t(5),i=t(6)("match");e.exports=function(e){var n;return r(e)&&(void 0!==(n=e[i])?!!n:"RegExp"==o(e))}},function(e,n,t){var r=t(6)("match");e.exports=function(e){var n=/./;try{"/./"[e](n)}catch(t){try{return n[r]=!1,!"/./"[e](n)}catch(e){}}return!0}}])})),h=function(e,n){if(!(e instanceof n))throw new TypeError("Cannot call a class as a function")},m=function(){function e(e,n){for(var t=0;t<n.length;t++){var r=n[t];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(n,t,r){return t&&e(n.prototype,t),r&&e(n,r),n}}(),D=function(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e},b=Object.assign||function(e){for(var n=1;n<arguments.length;n++){var t=arguments[n];for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])}return e},w=function(e,n){var t={};for(var r in e)n.indexOf(r)>=0||Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t},x=function(e,n){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!n||"object"!=typeof n&&"function"!=typeof n?e:n},O=function(e){if(Array.isArray(e)){for(var n=0,t=Array(e.length);n<e.length;n++)t[n]=e[n];return t}return Array.from(e)},P="undefined"==typeof document||!document||!document.createElement||"multiple"in document.createElement("input");function S(e,n){return"application/x-moz-file"===e.type||y(e,n)}function F(e){return"function"==typeof e.isPropagationStopped?e.isPropagationStopped():void 0!==e.cancelBubble&&e.cancelBubble}function E(e){return void 0!==e.defaultPrevented?e.defaultPrevented:"function"==typeof e.isDefaultPrevented&&e.isDefaultPrevented()}function j(e){return!e.dataTransfer||Array.prototype.some.call(e.dataTransfer.types,function(e){return"Files"===e||"application/x-moz-file"===e})}function A(e){e.preventDefault()}function _(){for(var e=arguments.length,n=Array(e),t=0;t<e;t++)n[t]=arguments[t];return function(e){for(var t=arguments.length,r=Array(t>1?t-1:0),o=1;o<t;o++)r[o-1]=arguments[o];return n.some(function(n){return n&&n.apply(void 0,[e].concat(r)),e.defaultPrevented})}}var T=function(n){function t(){var e,n,r;h(this,t);for(var o=arguments.length,i=Array(o),a=0;a<o;a++)i[a]=arguments[a];return n=r=x(this,(e=t.__proto__||Object.getPrototypeOf(t)).call.apply(e,[this].concat(i))),r.state={draggedFiles:[],acceptedFiles:[],rejectedFiles:[]},r.isFileDialogActive=!1,r.onDocumentDrop=function(e){r.node&&r.node.contains(e.target)||(e.preventDefault(),r.dragTargets=[])},r.onDragStart=function(e){e.persist(),r.props.onDragStart&&j(e)&&r.props.onDragStart.call(r,e)},r.onDragEnter=function(e){e.preventDefault(),-1===r.dragTargets.indexOf(e.target)&&r.dragTargets.push(e.target),e.persist(),j(e)&&(Promise.resolve(r.props.getDataTransferItems(e)).then(function(n){F(e)||r.setState({draggedFiles:n,isDragActive:!0})}),r.props.onDragEnter&&r.props.onDragEnter.call(r,e))},r.onDragOver=function(e){return e.preventDefault(),e.persist(),e.dataTransfer&&(e.dataTransfer.dropEffect="copy"),r.props.onDragOver&&j(e)&&r.props.onDragOver.call(r,e),!1},r.onDragLeave=function(e){e.preventDefault(),e.persist(),r.dragTargets=r.dragTargets.filter(function(n){return n!==e.target&&r.node.contains(n)}),r.dragTargets.length>0||(r.setState({isDragActive:!1,draggedFiles:[]}),r.props.onDragLeave&&j(e)&&r.props.onDragLeave.call(r,e))},r.onDrop=function(e){var n=r.props,t=n.onDrop,o=n.onDropAccepted,i=n.onDropRejected,a=n.multiple,u=n.accept,c=n.getDataTransferItems;e.preventDefault(),e.persist(),r.dragTargets=[],r.isFileDialogActive=!1,r.draggedFiles=null,r.setState({isDragActive:!1,draggedFiles:[]}),j(e)&&Promise.resolve(c(e)).then(function(n){var c=[],f=[];F(e)||(n.forEach(function(e){S(e,u)&&function(e,n,t){return e.size<=n&&e.size>=t}(e,r.props.maxSize,r.props.minSize)?c.push(e):f.push(e)}),!a&&c.length>1&&f.push.apply(f,O(c.splice(0))),r.setState({acceptedFiles:c,rejectedFiles:f},function(){t&&t.call(r,c,f,e),f.length>0&&i&&i.call(r,f,e),c.length>0&&o&&o.call(r,c,e)}))})},r.onClick=function(e){var n=r.props,t=n.onClick,o=n.disableClick;t&&t.call(r,e),o||E(e)||(e.stopPropagation(),!function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:window.navigator.userAgent;return function(e){return-1!==e.indexOf("MSIE")||-1!==e.indexOf("Trident/")}(e)||function(e){return-1!==e.indexOf("Edge/")}(e)}()?r.open():setTimeout(r.open,0))},r.onInputElementClick=function(e){e.stopPropagation()},r.onFileDialogCancel=function(){var e=r.props.onFileDialogCancel;r.isFileDialogActive&&setTimeout(function(){null!=r.input&&(r.input.files.length||(r.isFileDialogActive=!1,"function"==typeof e&&e()))},300)},r.onFocus=function(e){var n=r.props.onFocus;n&&n.call(r,e),E(e)||r.setState({isFocused:!0})},r.onBlur=function(e){var n=r.props.onBlur;n&&n.call(r,e),E(e)||r.setState({isFocused:!1})},r.onKeyDown=function(e){var n=r.props.onKeyDown;r.node.isEqualNode(e.target)&&(n&&n.call(r,e),E(e)||32!==e.keyCode&&13!==e.keyCode||(e.preventDefault(),r.open()))},r.composeHandler=function(e){return r.props.disabled?null:e},r.getRootProps=function(){var e,n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=n.refKey,o=void 0===t?"ref":t,i=n.onKeyDown,a=n.onFocus,u=n.onBlur,c=n.onClick,f=n.onDragStart,s=n.onDragEnter,l=n.onDragOver,p=n.onDragLeave,d=n.onDrop,v=w(n,["refKey","onKeyDown","onFocus","onBlur","onClick","onDragStart","onDragEnter","onDragOver","onDragLeave","onDrop"]);return b((e={onKeyDown:r.composeHandler(i?_(i,r.onKeyDown):r.onKeyDown),onFocus:r.composeHandler(a?_(a,r.onFocus):r.onFocus),onBlur:r.composeHandler(u?_(u,r.onBlur):r.onBlur),onClick:r.composeHandler(c?_(c,r.onClick):r.onClick),onDragStart:r.composeHandler(f?_(f,r.onDragStart):r.onDragStart),onDragEnter:r.composeHandler(s?_(s,r.onDragEnter):r.onDragEnter),onDragOver:r.composeHandler(l?_(l,r.onDragOver):r.onDragOver),onDragLeave:r.composeHandler(p?_(p,r.onDragLeave):r.onDragLeave),onDrop:r.composeHandler(d?_(d,r.onDrop):r.onDrop)},D(e,o,r.setNodeRef),D(e,"tabIndex",r.props.disabled?-1:0),e),v)},r.getInputProps=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=e.refKey,t=void 0===n?"ref":n,o=e.onChange,i=e.onClick,a=w(e,["refKey","onChange","onClick"]),u=r.props,c=u.accept,f=u.multiple,s=u.name,l=D({accept:c,type:"file",style:{display:"none"},multiple:P&&f,onChange:_(o,r.onDrop),onClick:_(i,r.onInputElementClick),autoComplete:"off",tabIndex:-1},t,r.setInputRef);return s&&s.length&&(l.name=s),b({},l,a)},r.setNodeRef=function(e){r.node=e},r.setInputRef=function(e){r.input=e},r.open=function(){r.isFileDialogActive=!0,r.input&&(r.input.value=null,r.input.click())},x(r,n)}return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Super expression must either be null or a function, not "+typeof n);e.prototype=Object.create(n&&n.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),n&&(Object.setPrototypeOf?Object.setPrototypeOf(e,n):e.__proto__=n)}(t,e.Component),m(t,[{key:"componentDidMount",value:function(){var e=this.props.preventDropOnDocument;this.dragTargets=[],e&&(document.addEventListener("dragover",A,!1),document.addEventListener("drop",this.onDocumentDrop,!1)),window.addEventListener("focus",this.onFileDialogCancel,!1)}},{key:"componentWillUnmount",value:function(){this.props.preventDropOnDocument&&(document.removeEventListener("dragover",A),document.removeEventListener("drop",this.onDocumentDrop)),window.removeEventListener("focus",this.onFileDialogCancel,!1)}},{key:"render",value:function(){var e,n,t=this.props,r=t.children,o=t.multiple,i=t.disabled,a=this.state,u=a.isDragActive,c=a.isFocused,f=a.draggedFiles,s=a.acceptedFiles,l=a.rejectedFiles,p=f.length,d=o||p<=1,v=p>0&&(e=f,n=this.props.accept,e.every(function(e){return S(e,n)}));return r({isDragActive:u,isDragAccept:v,isDragReject:p>0&&(!v||!d),draggedFiles:f,acceptedFiles:s,rejectedFiles:l,isFocused:c&&!i,getRootProps:this.getRootProps,getInputProps:this.getInputProps,open:this.open})}}]),t}();return T.propTypes={accept:n.oneOfType([n.string,n.arrayOf(n.string)]),children:n.func,disableClick:g(n.bool,"Use onClick={evt => evt.preventDefault()} instead. This prop will be removed in the next major version"),disabled:n.bool,preventDropOnDocument:n.bool,multiple:n.bool,name:n.string,maxSize:n.number,minSize:n.number,getDataTransferItems:n.func,onClick:n.func,onFocus:n.func,onBlur:n.func,onKeyDown:n.func,onDrop:n.func,onDropAccepted:n.func,onDropRejected:n.func,onDragStart:n.func,onDragEnter:n.func,onDragOver:n.func,onDragLeave:n.func,onFileDialogCancel:n.func},T.defaultProps={preventDropOnDocument:!0,disabled:!1,disableClick:!1,multiple:!0,maxSize:1/0,minSize:0,getDataTransferItems:function(e){return t(this,void 0,void 0,function(){return r(this,function(n){return[2,(i=e,i.dataTransfer&&e.dataTransfer?function(e,n){return t(this,void 0,void 0,function(){var t;return r(this,function(r){switch(r.label){case 0:return t=Array.from(e.items).filter(function(e){return"file"===e.kind}),"drop"!==n?[3,2]:[4,Promise.all(t.map(function(e){return function(e){if("function"!=typeof e.webkitGetAsEntry)return c(e);var n=e.webkitGetAsEntry();return n&&n.isDirectory?s(n):c(e)}(e)}))];case 1:return[2,function e(n){return n.reduce(function(n,t){return function(){for(var e=[],n=0;n<arguments.length;n++)e=e.concat(o(arguments[n]));return e}(n,Array.isArray(t)?e(t):[t])},[])}(r.sent()).filter(function(e){return!u.includes(e.name)})];case 2:return[2,t]}})})}(e.dataTransfer,e.type):function(e){return(n=e.target,null!==n&&e.target.files?Array.from(e.target.files):[]).map(function(e){return a(e)});var n}(e))];var i})})}},T});
2
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VzIjpbIi4uL25vZGVfbW9kdWxlcy90c2xpYi90c2xpYi5lczYuanMiLCIuLi9ub2RlX21vZHVsZXMvZmlsZS1zZWxlY3Rvci9kaXN0L2VzNS9maWxlLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2ZpbGUtc2VsZWN0b3IvZGlzdC9lczUvZmlsZS1zZWxlY3Rvci5qcyIsIi4uL25vZGVfbW9kdWxlcy93YXJuaW5nL3dhcm5pbmcuanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy1leHRyYS9saWIvZGVwcmVjYXRlZC5qcyIsIi4uL25vZGVfbW9kdWxlcy9hdHRyLWFjY2VwdC9kaXN0L2luZGV4LmpzIiwiLi4vc3JjL3V0aWxzL2luZGV4LmpzIiwiLi4vc3JjL2luZGV4LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qISAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG5Db3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTsgeW91IG1heSBub3QgdXNlXHJcbnRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlXHJcbkxpY2Vuc2UgYXQgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXHJcblxyXG5USElTIENPREUgSVMgUFJPVklERUQgT04gQU4gKkFTIElTKiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZXHJcbktJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04gQU5ZIElNUExJRURcclxuV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSxcclxuTUVSQ0hBTlRBQkxJVFkgT1IgTk9OLUlORlJJTkdFTUVOVC5cclxuXHJcblNlZSB0aGUgQXBhY2hlIFZlcnNpb24gMi4wIExpY2Vuc2UgZm9yIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9uc1xyXG5hbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXHJcbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovXHJcbi8qIGdsb2JhbCBSZWZsZWN0LCBQcm9taXNlICovXHJcblxyXG52YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uKGQsIGIpIHtcclxuICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcclxuICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XHJcbiAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoYi5oYXNPd25Qcm9wZXJ0eShwKSkgZFtwXSA9IGJbcF07IH07XHJcbiAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcclxufTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2V4dGVuZHMoZCwgYikge1xyXG4gICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcclxuICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxyXG4gICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xyXG59XHJcblxyXG5leHBvcnQgdmFyIF9fYXNzaWduID0gZnVuY3Rpb24oKSB7XHJcbiAgICBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gX19hc3NpZ24odCkge1xyXG4gICAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xyXG4gICAgICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpIHRbcF0gPSBzW3BdO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdDtcclxuICAgIH1cclxuICAgIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19yZXN0KHMsIGUpIHtcclxuICAgIHZhciB0ID0ge307XHJcbiAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkgJiYgZS5pbmRleE9mKHApIDwgMClcclxuICAgICAgICB0W3BdID0gc1twXTtcclxuICAgIGlmIChzICE9IG51bGwgJiYgdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPT09IFwiZnVuY3Rpb25cIilcclxuICAgICAgICBmb3IgKHZhciBpID0gMCwgcCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocyk7IGkgPCBwLmxlbmd0aDsgaSsrKSBpZiAoZS5pbmRleE9mKHBbaV0pIDwgMClcclxuICAgICAgICAgICAgdFtwW2ldXSA9IHNbcFtpXV07XHJcbiAgICByZXR1cm4gdDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcclxuICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XHJcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xyXG4gICAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcclxuICAgIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3BhcmFtKHBhcmFtSW5kZXgsIGRlY29yYXRvcikge1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQsIGtleSkgeyBkZWNvcmF0b3IodGFyZ2V0LCBrZXksIHBhcmFtSW5kZXgpOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX21ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlKSB7XHJcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QubWV0YWRhdGEgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIFJlZmxlY3QubWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hd2FpdGVyKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xyXG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XHJcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxyXG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxyXG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZShyZXN1bHQudmFsdWUpOyB9KS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XHJcbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xyXG4gICAgfSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2dlbmVyYXRvcih0aGlzQXJnLCBib2R5KSB7XHJcbiAgICB2YXIgXyA9IHsgbGFiZWw6IDAsIHNlbnQ6IGZ1bmN0aW9uKCkgeyBpZiAodFswXSAmIDEpIHRocm93IHRbMV07IHJldHVybiB0WzFdOyB9LCB0cnlzOiBbXSwgb3BzOiBbXSB9LCBmLCB5LCB0LCBnO1xyXG4gICAgcmV0dXJuIGcgPSB7IG5leHQ6IHZlcmIoMCksIFwidGhyb3dcIjogdmVyYigxKSwgXCJyZXR1cm5cIjogdmVyYigyKSB9LCB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgKGdbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpczsgfSksIGc7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgcmV0dXJuIGZ1bmN0aW9uICh2KSB7IHJldHVybiBzdGVwKFtuLCB2XSk7IH07IH1cclxuICAgIGZ1bmN0aW9uIHN0ZXAob3ApIHtcclxuICAgICAgICBpZiAoZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7XHJcbiAgICAgICAgd2hpbGUgKF8pIHRyeSB7XHJcbiAgICAgICAgICAgIGlmIChmID0gMSwgeSAmJiAodCA9IG9wWzBdICYgMiA/IHlbXCJyZXR1cm5cIl0gOiBvcFswXSA/IHlbXCJ0aHJvd1wiXSB8fCAoKHQgPSB5W1wicmV0dXJuXCJdKSAmJiB0LmNhbGwoeSksIDApIDogeS5uZXh0KSAmJiAhKHQgPSB0LmNhbGwoeSwgb3BbMV0pKS5kb25lKSByZXR1cm4gdDtcclxuICAgICAgICAgICAgaWYgKHkgPSAwLCB0KSBvcCA9IFtvcFswXSAmIDIsIHQudmFsdWVdO1xyXG4gICAgICAgICAgICBzd2l0Y2ggKG9wWzBdKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDA6IGNhc2UgMTogdCA9IG9wOyBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgNDogXy5sYWJlbCsrOyByZXR1cm4geyB2YWx1ZTogb3BbMV0sIGRvbmU6IGZhbHNlIH07XHJcbiAgICAgICAgICAgICAgICBjYXNlIDU6IF8ubGFiZWwrKzsgeSA9IG9wWzFdOyBvcCA9IFswXTsgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDc6IG9wID0gXy5vcHMucG9wKCk7IF8udHJ5cy5wb3AoKTsgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgICAgIGlmICghKHQgPSBfLnRyeXMsIHQgPSB0Lmxlbmd0aCA+IDAgJiYgdFt0Lmxlbmd0aCAtIDFdKSAmJiAob3BbMF0gPT09IDYgfHwgb3BbMF0gPT09IDIpKSB7IF8gPSAwOyBjb250aW51ZTsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gMyAmJiAoIXQgfHwgKG9wWzFdID4gdFswXSAmJiBvcFsxXSA8IHRbM10pKSkgeyBfLmxhYmVsID0gb3BbMV07IGJyZWFrOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSA2ICYmIF8ubGFiZWwgPCB0WzFdKSB7IF8ubGFiZWwgPSB0WzFdOyB0ID0gb3A7IGJyZWFrOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHQgJiYgXy5sYWJlbCA8IHRbMl0pIHsgXy5sYWJlbCA9IHRbMl07IF8ub3BzLnB1c2gob3ApOyBicmVhazsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0WzJdKSBfLm9wcy5wb3AoKTtcclxuICAgICAgICAgICAgICAgICAgICBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIG9wID0gYm9keS5jYWxsKHRoaXNBcmcsIF8pO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHsgb3AgPSBbNiwgZV07IHkgPSAwOyB9IGZpbmFsbHkgeyBmID0gdCA9IDA7IH1cclxuICAgICAgICBpZiAob3BbMF0gJiA1KSB0aHJvdyBvcFsxXTsgcmV0dXJuIHsgdmFsdWU6IG9wWzBdID8gb3BbMV0gOiB2b2lkIDAsIGRvbmU6IHRydWUgfTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZXhwb3J0U3RhcihtLCBleHBvcnRzKSB7XHJcbiAgICBmb3IgKHZhciBwIGluIG0pIGlmICghZXhwb3J0cy5oYXNPd25Qcm9wZXJ0eShwKSkgZXhwb3J0c1twXSA9IG1bcF07XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3ZhbHVlcyhvKSB7XHJcbiAgICB2YXIgbSA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl0sIGkgPSAwO1xyXG4gICAgaWYgKG0pIHJldHVybiBtLmNhbGwobyk7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgaWYgKG8gJiYgaSA+PSBvLmxlbmd0aCkgbyA9IHZvaWQgMDtcclxuICAgICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IG8gJiYgb1tpKytdLCBkb25lOiAhbyB9O1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3JlYWQobywgbikge1xyXG4gICAgdmFyIG0gPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb1tTeW1ib2wuaXRlcmF0b3JdO1xyXG4gICAgaWYgKCFtKSByZXR1cm4gbztcclxuICAgIHZhciBpID0gbS5jYWxsKG8pLCByLCBhciA9IFtdLCBlO1xyXG4gICAgdHJ5IHtcclxuICAgICAgICB3aGlsZSAoKG4gPT09IHZvaWQgMCB8fCBuLS0gPiAwKSAmJiAhKHIgPSBpLm5leHQoKSkuZG9uZSkgYXIucHVzaChyLnZhbHVlKTtcclxuICAgIH1cclxuICAgIGNhdGNoIChlcnJvcikgeyBlID0geyBlcnJvcjogZXJyb3IgfTsgfVxyXG4gICAgZmluYWxseSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKHIgJiYgIXIuZG9uZSAmJiAobSA9IGlbXCJyZXR1cm5cIl0pKSBtLmNhbGwoaSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZpbmFsbHkgeyBpZiAoZSkgdGhyb3cgZS5lcnJvcjsgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGFyO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19zcHJlYWQoKSB7XHJcbiAgICBmb3IgKHZhciBhciA9IFtdLCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKylcclxuICAgICAgICBhciA9IGFyLmNvbmNhdChfX3JlYWQoYXJndW1lbnRzW2ldKSk7XHJcbiAgICByZXR1cm4gYXI7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2F3YWl0KHYpIHtcclxuICAgIHJldHVybiB0aGlzIGluc3RhbmNlb2YgX19hd2FpdCA/ICh0aGlzLnYgPSB2LCB0aGlzKSA6IG5ldyBfX2F3YWl0KHYpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hc3luY0dlbmVyYXRvcih0aGlzQXJnLCBfYXJndW1lbnRzLCBnZW5lcmF0b3IpIHtcclxuICAgIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XHJcbiAgICB2YXIgZyA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSwgaSwgcSA9IFtdO1xyXG4gICAgcmV0dXJuIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiKSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpO1xyXG4gICAgZnVuY3Rpb24gdmVyYihuKSB7IGlmIChnW25dKSBpW25dID0gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChhLCBiKSB7IHEucHVzaChbbiwgdiwgYSwgYl0pID4gMSB8fCByZXN1bWUobiwgdik7IH0pOyB9OyB9XHJcbiAgICBmdW5jdGlvbiByZXN1bWUobiwgdikgeyB0cnkgeyBzdGVwKGdbbl0odikpOyB9IGNhdGNoIChlKSB7IHNldHRsZShxWzBdWzNdLCBlKTsgfSB9XHJcbiAgICBmdW5jdGlvbiBzdGVwKHIpIHsgci52YWx1ZSBpbnN0YW5jZW9mIF9fYXdhaXQgPyBQcm9taXNlLnJlc29sdmUoci52YWx1ZS52KS50aGVuKGZ1bGZpbGwsIHJlamVjdCkgOiBzZXR0bGUocVswXVsyXSwgcik7IH1cclxuICAgIGZ1bmN0aW9uIGZ1bGZpbGwodmFsdWUpIHsgcmVzdW1lKFwibmV4dFwiLCB2YWx1ZSk7IH1cclxuICAgIGZ1bmN0aW9uIHJlamVjdCh2YWx1ZSkgeyByZXN1bWUoXCJ0aHJvd1wiLCB2YWx1ZSk7IH1cclxuICAgIGZ1bmN0aW9uIHNldHRsZShmLCB2KSB7IGlmIChmKHYpLCBxLnNoaWZ0KCksIHEubGVuZ3RoKSByZXN1bWUocVswXVswXSwgcVswXVsxXSk7IH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNEZWxlZ2F0b3Iobykge1xyXG4gICAgdmFyIGksIHA7XHJcbiAgICByZXR1cm4gaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIsIGZ1bmN0aW9uIChlKSB7IHRocm93IGU7IH0pLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpO1xyXG4gICAgZnVuY3Rpb24gdmVyYihuLCBmKSB7IGlbbl0gPSBvW25dID8gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIChwID0gIXApID8geyB2YWx1ZTogX19hd2FpdChvW25dKHYpKSwgZG9uZTogbiA9PT0gXCJyZXR1cm5cIiB9IDogZiA/IGYodikgOiB2OyB9IDogZjsgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hc3luY1ZhbHVlcyhvKSB7XHJcbiAgICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xyXG4gICAgdmFyIG0gPSBvW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSwgaTtcclxuICAgIHJldHVybiBtID8gbS5jYWxsKG8pIDogKG8gPSB0eXBlb2YgX192YWx1ZXMgPT09IFwiZnVuY3Rpb25cIiA/IF9fdmFsdWVzKG8pIDogb1tTeW1ib2wuaXRlcmF0b3JdKCksIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiKSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpKTtcclxuICAgIGZ1bmN0aW9uIHZlcmIobikgeyBpW25dID0gb1tuXSAmJiBmdW5jdGlvbiAodikgeyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgeyB2ID0gb1tuXSh2KSwgc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgdi5kb25lLCB2LnZhbHVlKTsgfSk7IH07IH1cclxuICAgIGZ1bmN0aW9uIHNldHRsZShyZXNvbHZlLCByZWplY3QsIGQsIHYpIHsgUHJvbWlzZS5yZXNvbHZlKHYpLnRoZW4oZnVuY3Rpb24odikgeyByZXNvbHZlKHsgdmFsdWU6IHYsIGRvbmU6IGQgfSk7IH0sIHJlamVjdCk7IH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fbWFrZVRlbXBsYXRlT2JqZWN0KGNvb2tlZCwgcmF3KSB7XHJcbiAgICBpZiAoT2JqZWN0LmRlZmluZVByb3BlcnR5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjb29rZWQsIFwicmF3XCIsIHsgdmFsdWU6IHJhdyB9KTsgfSBlbHNlIHsgY29va2VkLnJhdyA9IHJhdzsgfVxyXG4gICAgcmV0dXJuIGNvb2tlZDtcclxufTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2ltcG9ydFN0YXIobW9kKSB7XHJcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xyXG4gICAgdmFyIHJlc3VsdCA9IHt9O1xyXG4gICAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrIGluIG1vZCkgaWYgKE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIHJlc3VsdFtrXSA9IG1vZFtrXTtcclxuICAgIHJlc3VsdC5kZWZhdWx0ID0gbW9kO1xyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9faW1wb3J0RGVmYXVsdChtb2QpIHtcclxuICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgZGVmYXVsdDogbW9kIH07XHJcbn1cclxuIiwiZXhwb3J0IHZhciBDT01NT05fTUlNRV9UWVBFUyA9IG5ldyBNYXAoW1xuICAgIFsnYXZpJywgJ3ZpZGVvL2F2aSddLFxuICAgIFsnZ2lmJywgJ2ltYWdlL2dpZiddLFxuICAgIFsnaWNvJywgJ2ltYWdlL3gtaWNvbiddLFxuICAgIFsnanBlZycsICdpbWFnZS9qcGVnJ10sXG4gICAgWydqcGcnLCAnaW1hZ2UvanBlZyddLFxuICAgIFsnbWt2JywgJ3ZpZGVvL3gtbWF0cm9za2EnXSxcbiAgICBbJ21vdicsICd2aWRlby9xdWlja3RpbWUnXSxcbiAgICBbJ21wNCcsICd2aWRlby9tcDQnXSxcbiAgICBbJ3BkZicsICdhcHBsaWNhdGlvbi9wZGYnXSxcbiAgICBbJ3BuZycsICdpbWFnZS9wbmcnXSxcbiAgICBbJ3ppcCcsICdhcHBsaWNhdGlvbi96aXAnXSxcbiAgICBbJ2RvYycsICdhcHBsaWNhdGlvbi9tc3dvcmQnXSxcbiAgICBbJ2RvY3gnLCAnYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LndvcmRwcm9jZXNzaW5nbWwuZG9jdW1lbnQnXVxuXSk7XG5leHBvcnQgZnVuY3Rpb24gdG9GaWxlV2l0aFBhdGgoZmlsZSwgcGF0aCkge1xuICAgIHZhciBmID0gd2l0aE1pbWVUeXBlKGZpbGUpO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmLCAncGF0aCcsIHtcbiAgICAgICAgdmFsdWU6IHR5cGVvZiBwYXRoID09PSAnc3RyaW5nJyA/IHBhdGggOiBmaWxlLm5hbWUsXG4gICAgICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiBmYWxzZVxuICAgIH0pO1xuICAgIHJldHVybiBmO1xufVxuZnVuY3Rpb24gd2l0aE1pbWVUeXBlKGZpbGUpIHtcbiAgICB2YXIgbmFtZSA9IGZpbGUubmFtZTtcbiAgICB2YXIgaGFzRXh0ZW5zaW9uID0gbmFtZSAmJiBuYW1lLmxhc3RJbmRleE9mKCcuJykgIT09IC0xO1xuICAgIGlmIChoYXNFeHRlbnNpb24gJiYgIWZpbGUudHlwZSkge1xuICAgICAgICB2YXIgZXh0ID0gbmFtZS5zcGxpdCgnLicpXG4gICAgICAgICAgICAucG9wKCkudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgdmFyIHR5cGUgPSBDT01NT05fTUlNRV9UWVBFUy5nZXQoZXh0KTtcbiAgICAgICAgaWYgKHR5cGUpIHtcbiAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmaWxlLCAndHlwZScsIHtcbiAgICAgICAgICAgICAgICB2YWx1ZTogdHlwZSxcbiAgICAgICAgICAgICAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiBmYWxzZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZpbGU7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1maWxlLmpzLm1hcCIsImltcG9ydCAqIGFzIHRzbGliXzEgZnJvbSBcInRzbGliXCI7XG5pbXBvcnQgeyB0b0ZpbGVXaXRoUGF0aCB9IGZyb20gJy4vZmlsZSc7XG52YXIgRklMRVNfVE9fSUdOT1JFID0gW1xuICAgICcuRFNfU3RvcmUnLFxuICAgICdUaHVtYnMuZGInIC8vIFdpbmRvd3Ncbl07XG4vKipcbiAqIENvbnZlcnQgYSBEcmFnRXZlbnQncyBEYXRhVHJhc2ZlciBvYmplY3QgdG8gYSBsaXN0IG9mIEZpbGUgb2JqZWN0c1xuICogTk9URTogSWYgc29tZSBvZiB0aGUgaXRlbXMgYXJlIGZvbGRlcnMsXG4gKiBldmVyeXRoaW5nIHdpbGwgYmUgZmxhdHRlbmVkIGFuZCBwbGFjZWQgaW4gdGhlIHNhbWUgbGlzdCBidXQgdGhlIHBhdGhzIHdpbGwgYmUga2VwdCBhcyBhIHtwYXRofSBwcm9wZXJ0eS5cbiAqIEBwYXJhbSBldnRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZyb21FdmVudChldnQpIHtcbiAgICByZXR1cm4gdHNsaWJfMS5fX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRzbGliXzEuX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgICAgICByZXR1cm4gWzIgLypyZXR1cm4qLywgaXNEcmFnRXZ0KGV2dCkgJiYgZXZ0LmRhdGFUcmFuc2ZlclxuICAgICAgICAgICAgICAgICAgICA/IGdldERhdGFUcmFuc2ZlckZpbGVzKGV2dC5kYXRhVHJhbnNmZXIsIGV2dC50eXBlKVxuICAgICAgICAgICAgICAgICAgICA6IGdldElucHV0RmlsZXMoZXZ0KV07XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gaXNEcmFnRXZ0KHZhbHVlKSB7XG4gICAgcmV0dXJuICEhdmFsdWUuZGF0YVRyYW5zZmVyO1xufVxuZnVuY3Rpb24gZ2V0SW5wdXRGaWxlcyhldnQpIHtcbiAgICB2YXIgZmlsZXMgPSBpc0lucHV0KGV2dC50YXJnZXQpXG4gICAgICAgID8gZXZ0LnRhcmdldC5maWxlc1xuICAgICAgICAgICAgPyBBcnJheS5mcm9tKGV2dC50YXJnZXQuZmlsZXMpXG4gICAgICAgICAgICA6IFtdXG4gICAgICAgIDogW107XG4gICAgcmV0dXJuIGZpbGVzLm1hcChmdW5jdGlvbiAoZmlsZSkgeyByZXR1cm4gdG9GaWxlV2l0aFBhdGgoZmlsZSk7IH0pO1xufVxuZnVuY3Rpb24gaXNJbnB1dCh2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZSAhPT0gbnVsbDtcbn1cbmZ1bmN0aW9uIGdldERhdGFUcmFuc2ZlckZpbGVzKGR0LCB0eXBlKSB7XG4gICAgcmV0dXJuIHRzbGliXzEuX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBpdGVtcywgZmlsZXM7XG4gICAgICAgIHJldHVybiB0c2xpYl8xLl9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgc3dpdGNoIChfYS5sYWJlbCkge1xuICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgaXRlbXMgPSBBcnJheS5mcm9tKGR0Lml0ZW1zKVxuICAgICAgICAgICAgICAgICAgICAgICAgLmZpbHRlcihmdW5jdGlvbiAoaXRlbSkgeyByZXR1cm4gaXRlbS5raW5kID09PSAnZmlsZSc7IH0pO1xuICAgICAgICAgICAgICAgICAgICBpZiAoISh0eXBlID09PSAnZHJvcCcpKSByZXR1cm4gWzMgLypicmVhayovLCAyXTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0IC8qeWllbGQqLywgUHJvbWlzZS5hbGwoaXRlbXMubWFwKGZ1bmN0aW9uIChpdGVtKSB7IHJldHVybiB0b0ZpbGVQcm9taXNlcyhpdGVtKTsgfSkpXTtcbiAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgIGZpbGVzID0gX2Euc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzIgLypyZXR1cm4qLywgZmxhdHRlbihmaWxlcylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKGZ1bmN0aW9uIChmaWxlKSB7IHJldHVybiAhRklMRVNfVE9fSUdOT1JFLmluY2x1ZGVzKGZpbGUubmFtZSk7IH0pXTtcbiAgICAgICAgICAgICAgICBjYXNlIDI6IHJldHVybiBbMiAvKnJldHVybiovLCBpdGVtc107XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0RhdGFUcmFuc2Zlckl0ZW1cbmZ1bmN0aW9uIHRvRmlsZVByb21pc2VzKGl0ZW0pIHtcbiAgICBpZiAodHlwZW9mIGl0ZW0ud2Via2l0R2V0QXNFbnRyeSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByZXR1cm4gZnJvbURhdGFUcmFuc2Zlckl0ZW0oaXRlbSk7XG4gICAgfVxuICAgIHZhciBlbnRyeSA9IGl0ZW0ud2Via2l0R2V0QXNFbnRyeSgpO1xuICAgIC8vIFNhZmFyaSBzdXBwb3J0cyBkcm9wcGluZyBhbiBpbWFnZSBub2RlIGZyb20gYSBkaWZmZXJlbnQgd2luZG93IGFuZCBjYW4gYmUgcmV0cmlldmVkIHVzaW5nXG4gICAgLy8gdGhlIERhdGFUcmFuc2Zlckl0ZW0uZ2V0QXNGaWxlKCkgQVBJXG4gICAgLy8gTk9URTogRmlsZVN5c3RlbUVudHJ5LmZpbGUoKSB0aHJvd3MgaWYgdHJ5aW5nIHRvIGdldCB0aGUgZmlsZVxuICAgIGlmIChlbnRyeSAmJiBlbnRyeS5pc0RpcmVjdG9yeSkge1xuICAgICAgICByZXR1cm4gZnJvbURpckVudHJ5KGVudHJ5KTtcbiAgICB9XG4gICAgcmV0dXJuIGZyb21EYXRhVHJhbnNmZXJJdGVtKGl0ZW0pO1xufVxuZnVuY3Rpb24gZmxhdHRlbihpdGVtcykge1xuICAgIHJldHVybiBpdGVtcy5yZWR1Y2UoZnVuY3Rpb24gKGFjYywgZmlsZXMpIHsgcmV0dXJuIHRzbGliXzEuX19zcHJlYWQoYWNjLCAoQXJyYXkuaXNBcnJheShmaWxlcykgPyBmbGF0dGVuKGZpbGVzKSA6IFtmaWxlc10pKTsgfSwgW10pO1xufVxuZnVuY3Rpb24gZnJvbURhdGFUcmFuc2Zlckl0ZW0oaXRlbSkge1xuICAgIHZhciBmaWxlID0gaXRlbS5nZXRBc0ZpbGUoKTtcbiAgICBpZiAoIWZpbGUpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGl0ZW0gKyBcIiBpcyBub3QgYSBGaWxlXCIpO1xuICAgIH1cbiAgICB2YXIgZndwID0gdG9GaWxlV2l0aFBhdGgoZmlsZSk7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShmd3ApO1xufVxuLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0ZpbGVTeXN0ZW1FbnRyeVxuZnVuY3Rpb24gZnJvbUVudHJ5KGVudHJ5KSB7XG4gICAgcmV0dXJuIHRzbGliXzEuX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0c2xpYl8xLl9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgcmV0dXJuIFsyIC8qcmV0dXJuKi8sIGVudHJ5LmlzRGlyZWN0b3J5ID8gZnJvbURpckVudHJ5KGVudHJ5KSA6IGZyb21GaWxlRW50cnkoZW50cnkpXTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG4vLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRmlsZVN5c3RlbURpcmVjdG9yeUVudHJ5XG5mdW5jdGlvbiBmcm9tRGlyRW50cnkoZW50cnkpIHtcbiAgICB2YXIgcmVhZGVyID0gZW50cnkuY3JlYXRlUmVhZGVyKCk7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgdmFyIGVudHJpZXMgPSBbXTtcbiAgICAgICAgZnVuY3Rpb24gcmVhZEVudHJpZXMoKSB7XG4gICAgICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICAgICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0ZpbGVTeXN0ZW1EaXJlY3RvcnlFbnRyeS9jcmVhdGVSZWFkZXJcbiAgICAgICAgICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9GaWxlU3lzdGVtRGlyZWN0b3J5UmVhZGVyL3JlYWRFbnRyaWVzXG4gICAgICAgICAgICByZWFkZXIucmVhZEVudHJpZXMoZnVuY3Rpb24gKGJhdGNoKSB7IHJldHVybiB0c2xpYl8xLl9fYXdhaXRlcihfdGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB2YXIgZmlsZXMsIGVycl8xLCBpdGVtcztcbiAgICAgICAgICAgICAgICByZXR1cm4gdHNsaWJfMS5fX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChfYS5sYWJlbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghIWJhdGNoLmxlbmd0aCkgcmV0dXJuIFszIC8qYnJlYWsqLywgNV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2EubGFiZWwgPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9hLnRyeXMucHVzaChbMSwgMywgLCA0XSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0IC8qeWllbGQqLywgUHJvbWlzZS5hbGwoZW50cmllcyldO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVzID0gX2Euc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZmlsZXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMyAvKmJyZWFrKi8sIDRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycl8xID0gX2Euc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnJfMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFszIC8qYnJlYWsqLywgNF07XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiBbMyAvKmJyZWFrKi8sIDZdO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zID0gUHJvbWlzZS5hbGwoYmF0Y2gubWFwKGZyb21FbnRyeSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJpZXMucHVzaChpdGVtcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ29udGludWUgcmVhZGluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRFbnRyaWVzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2EubGFiZWwgPSA2O1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA2OiByZXR1cm4gWzIgLypyZXR1cm4qL107XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pOyB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZWFkRW50cmllcygpO1xuICAgIH0pO1xufVxuLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0ZpbGVTeXN0ZW1GaWxlRW50cnlcbmZ1bmN0aW9uIGZyb21GaWxlRW50cnkoZW50cnkpIHtcbiAgICByZXR1cm4gdHNsaWJfMS5fX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRzbGliXzEuX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgICAgICByZXR1cm4gWzIgLypyZXR1cm4qLywgbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgICAgICAgICBlbnRyeS5maWxlKGZ1bmN0aW9uIChmaWxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZndwID0gdG9GaWxlV2l0aFBhdGgoZmlsZSwgZW50cnkuZnVsbFBhdGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShmd3ApO1xuICAgICAgICAgICAgICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSldO1xuICAgICAgICB9KTtcbiAgICB9KTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWZpbGUtc2VsZWN0b3IuanMubWFwIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxNC0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIFNpbWlsYXIgdG8gaW52YXJpYW50IGJ1dCBvbmx5IGxvZ3MgYSB3YXJuaW5nIGlmIHRoZSBjb25kaXRpb24gaXMgbm90IG1ldC5cbiAqIFRoaXMgY2FuIGJlIHVzZWQgdG8gbG9nIGlzc3VlcyBpbiBkZXZlbG9wbWVudCBlbnZpcm9ubWVudHMgaW4gY3JpdGljYWxcbiAqIHBhdGhzLiBSZW1vdmluZyB0aGUgbG9nZ2luZyBjb2RlIGZvciBwcm9kdWN0aW9uIGVudmlyb25tZW50cyB3aWxsIGtlZXAgdGhlXG4gKiBzYW1lIGxvZ2ljIGFuZCBmb2xsb3cgdGhlIHNhbWUgY29kZSBwYXRocy5cbiAqL1xuXG52YXIgX19ERVZfXyA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbic7XG5cbnZhciB3YXJuaW5nID0gZnVuY3Rpb24oKSB7fTtcblxuaWYgKF9fREVWX18pIHtcbiAgd2FybmluZyA9IGZ1bmN0aW9uKGNvbmRpdGlvbiwgZm9ybWF0LCBhcmdzKSB7XG4gICAgdmFyIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgYXJncyA9IG5ldyBBcnJheShsZW4gPiAyID8gbGVuIC0gMiA6IDApO1xuICAgIGZvciAodmFyIGtleSA9IDI7IGtleSA8IGxlbjsga2V5KyspIHtcbiAgICAgIGFyZ3Nba2V5IC0gMl0gPSBhcmd1bWVudHNba2V5XTtcbiAgICB9XG4gICAgaWYgKGZvcm1hdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdgd2FybmluZyhjb25kaXRpb24sIGZvcm1hdCwgLi4uYXJncylgIHJlcXVpcmVzIGEgd2FybmluZyAnICtcbiAgICAgICAgJ21lc3NhZ2UgYXJndW1lbnQnXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChmb3JtYXQubGVuZ3RoIDwgMTAgfHwgKC9eW3NcXFddKiQvKS50ZXN0KGZvcm1hdCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ1RoZSB3YXJuaW5nIGZvcm1hdCBzaG91bGQgYmUgYWJsZSB0byB1bmlxdWVseSBpZGVudGlmeSB0aGlzICcgK1xuICAgICAgICAnd2FybmluZy4gUGxlYXNlLCB1c2UgYSBtb3JlIGRlc2NyaXB0aXZlIGZvcm1hdCB0aGFuOiAnICsgZm9ybWF0XG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICghY29uZGl0aW9uKSB7XG4gICAgICB2YXIgYXJnSW5kZXggPSAwO1xuICAgICAgdmFyIG1lc3NhZ2UgPSAnV2FybmluZzogJyArXG4gICAgICAgIGZvcm1hdC5yZXBsYWNlKC8lcy9nLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICByZXR1cm4gYXJnc1thcmdJbmRleCsrXTtcbiAgICAgICAgfSk7XG4gICAgICBpZiAodHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IobWVzc2FnZSk7XG4gICAgICB9XG4gICAgICB0cnkge1xuICAgICAgICAvLyBUaGlzIGVycm9yIHdhcyB0aHJvd24gYXMgYSBjb252ZW5pZW5jZSBzbyB0aGF0IHlvdSBjYW4gdXNlIHRoaXMgc3RhY2tcbiAgICAgICAgLy8gdG8gZmluZCB0aGUgY2FsbHNpdGUgdGhhdCBjYXVzZWQgdGhpcyB3YXJuaW5nIHRvIGZpcmUuXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgICAgIH0gY2F0Y2goeCkge31cbiAgICB9XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gd2FybmluZztcbiIsIid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IGRlcHJlY2F0ZWQ7XG5cbnZhciBfd2FybmluZyA9IHJlcXVpcmUoJ3dhcm5pbmcnKTtcblxudmFyIF93YXJuaW5nMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3dhcm5pbmcpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG52YXIgd2FybmVkID0ge307XG5cbmZ1bmN0aW9uIGRlcHJlY2F0ZWQodmFsaWRhdG9yLCByZWFzb24pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgIHZhciBjb21wb25lbnROYW1lU2FmZSA9IGNvbXBvbmVudE5hbWUgfHwgJzw8YW5vbnltb3VzPj4nO1xuICAgIHZhciBwcm9wRnVsbE5hbWVTYWZlID0gcHJvcEZ1bGxOYW1lIHx8IHByb3BOYW1lO1xuXG4gICAgaWYgKHByb3BzW3Byb3BOYW1lXSAhPSBudWxsKSB7XG4gICAgICB2YXIgbWVzc2FnZUtleSA9IGNvbXBvbmVudE5hbWUgKyAnLicgKyBwcm9wTmFtZTtcblxuICAgICAgKDAsIF93YXJuaW5nMi5kZWZhdWx0KSh3YXJuZWRbbWVzc2FnZUtleV0sICdUaGUgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZVNhZmUgKyAnYCBvZiAnICsgKCdgJyArIGNvbXBvbmVudE5hbWVTYWZlICsgJ2AgaXMgZGVwcmVjYXRlZC4gJyArIHJlYXNvbiArICcuJykpO1xuXG4gICAgICB3YXJuZWRbbWVzc2FnZUtleV0gPSB0cnVlO1xuICAgIH1cblxuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gQXJyYXkoX2xlbiA+IDUgPyBfbGVuIC0gNSA6IDApLCBfa2V5ID0gNTsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5IC0gNV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbGlkYXRvci5hcHBseSh1bmRlZmluZWQsIFtwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWVdLmNvbmNhdChhcmdzKSk7XG4gIH07XG59XG5cbi8qIGVzbGludC1kaXNhYmxlIG5vLXVuZGVyc2NvcmUtZGFuZ2xlICovXG5mdW5jdGlvbiBfcmVzZXRXYXJuZWQoKSB7XG4gIHdhcm5lZCA9IHt9O1xufVxuXG5kZXByZWNhdGVkLl9yZXNldFdhcm5lZCA9IF9yZXNldFdhcm5lZDtcbi8qIGVzbGludC1lbmFibGUgbm8tdW5kZXJzY29yZS1kYW5nbGUgKi9cblxubW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzWydkZWZhdWx0J107IiwibW9kdWxlLmV4cG9ydHM9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gbihlKXtpZihyW2VdKXJldHVybiByW2VdLmV4cG9ydHM7dmFyIG89cltlXT17aTplLGw6ITEsZXhwb3J0czp7fX07cmV0dXJuIHRbZV0uY2FsbChvLmV4cG9ydHMsbyxvLmV4cG9ydHMsbiksby5sPSEwLG8uZXhwb3J0c312YXIgcj17fTtyZXR1cm4gbi5tPXQsbi5jPXIsbi5kPWZ1bmN0aW9uKHQscixlKXtuLm8odCxyKXx8T2JqZWN0LmRlZmluZVByb3BlcnR5KHQscix7Y29uZmlndXJhYmxlOiExLGVudW1lcmFibGU6ITAsZ2V0OmV9KX0sbi5uPWZ1bmN0aW9uKHQpe3ZhciByPXQmJnQuX19lc01vZHVsZT9mdW5jdGlvbigpe3JldHVybiB0LmRlZmF1bHR9OmZ1bmN0aW9uKCl7cmV0dXJuIHR9O3JldHVybiBuLmQocixcImFcIixyKSxyfSxuLm89ZnVuY3Rpb24odCxuKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbil9LG4ucD1cIlwiLG4obi5zPTEzKX0oW2Z1bmN0aW9uKHQsbil7dmFyIHI9dC5leHBvcnRzPVwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3cmJndpbmRvdy5NYXRoPT1NYXRoP3dpbmRvdzpcInVuZGVmaW5lZFwiIT10eXBlb2Ygc2VsZiYmc2VsZi5NYXRoPT1NYXRoP3NlbGY6RnVuY3Rpb24oXCJyZXR1cm4gdGhpc1wiKSgpO1wibnVtYmVyXCI9PXR5cGVvZiBfX2cmJihfX2c9cil9LGZ1bmN0aW9uKHQsbil7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVyblwib2JqZWN0XCI9PXR5cGVvZiB0P251bGwhPT10OlwiZnVuY3Rpb25cIj09dHlwZW9mIHR9fSxmdW5jdGlvbih0LG4pe3ZhciByPXQuZXhwb3J0cz17dmVyc2lvbjpcIjIuNS4wXCJ9O1wibnVtYmVyXCI9PXR5cGVvZiBfX2UmJihfX2U9cil9LGZ1bmN0aW9uKHQsbixyKXt0LmV4cG9ydHM9IXIoNCkoZnVuY3Rpb24oKXtyZXR1cm4gNyE9T2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LFwiYVwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gN319KS5hfSl9LGZ1bmN0aW9uKHQsbil7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3RyeXtyZXR1cm4hIXQoKX1jYXRjaCh0KXtyZXR1cm4hMH19fSxmdW5jdGlvbih0LG4pe3ZhciByPXt9LnRvU3RyaW5nO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gci5jYWxsKHQpLnNsaWNlKDgsLTEpfX0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoMzIpKFwid2tzXCIpLG89cig5KSxpPXIoMCkuU3ltYm9sLHU9XCJmdW5jdGlvblwiPT10eXBlb2YgaTsodC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBlW3RdfHwoZVt0XT11JiZpW3RdfHwodT9pOm8pKFwiU3ltYm9sLlwiK3QpKX0pLnN0b3JlPWV9LGZ1bmN0aW9uKHQsbixyKXt2YXIgZT1yKDApLG89cigyKSxpPXIoOCksdT1yKDIyKSxjPXIoMTApLGY9ZnVuY3Rpb24odCxuLHIpe3ZhciBhLHMscCxsLHY9dCZmLkYseT10JmYuRyxoPXQmZi5TLGQ9dCZmLlAseD10JmYuQixnPXk/ZTpoP2Vbbl18fChlW25dPXt9KTooZVtuXXx8e30pLnByb3RvdHlwZSxtPXk/bzpvW25dfHwob1tuXT17fSksYj1tLnByb3RvdHlwZXx8KG0ucHJvdG90eXBlPXt9KTt5JiYocj1uKTtmb3IoYSBpbiByKXM9IXYmJmcmJnZvaWQgMCE9PWdbYV0scD0ocz9nOnIpW2FdLGw9eCYmcz9jKHAsZSk6ZCYmXCJmdW5jdGlvblwiPT10eXBlb2YgcD9jKEZ1bmN0aW9uLmNhbGwscCk6cCxnJiZ1KGcsYSxwLHQmZi5VKSxtW2FdIT1wJiZpKG0sYSxsKSxkJiZiW2FdIT1wJiYoYlthXT1wKX07ZS5jb3JlPW8sZi5GPTEsZi5HPTIsZi5TPTQsZi5QPTgsZi5CPTE2LGYuVz0zMixmLlU9NjQsZi5SPTEyOCx0LmV4cG9ydHM9Zn0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoMTYpLG89cigyMSk7dC5leHBvcnRzPXIoMyk/ZnVuY3Rpb24odCxuLHIpe3JldHVybiBlLmYodCxuLG8oMSxyKSl9OmZ1bmN0aW9uKHQsbixyKXtyZXR1cm4gdFtuXT1yLHR9fSxmdW5jdGlvbih0LG4pe3ZhciByPTAsZT1NYXRoLnJhbmRvbSgpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm5cIlN5bWJvbChcIi5jb25jYXQodm9pZCAwPT09dD9cIlwiOnQsXCIpX1wiLCgrK3IrZSkudG9TdHJpbmcoMzYpKX19LGZ1bmN0aW9uKHQsbixyKXt2YXIgZT1yKDI0KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxuLHIpe2lmKGUodCksdm9pZCAwPT09bilyZXR1cm4gdDtzd2l0Y2gocil7Y2FzZSAxOnJldHVybiBmdW5jdGlvbihyKXtyZXR1cm4gdC5jYWxsKG4scil9O2Nhc2UgMjpyZXR1cm4gZnVuY3Rpb24ocixlKXtyZXR1cm4gdC5jYWxsKG4scixlKX07Y2FzZSAzOnJldHVybiBmdW5jdGlvbihyLGUsbyl7cmV0dXJuIHQuY2FsbChuLHIsZSxvKX19cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHQuYXBwbHkobixhcmd1bWVudHMpfX19LGZ1bmN0aW9uKHQsbil7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKHZvaWQgMD09dCl0aHJvdyBUeXBlRXJyb3IoXCJDYW4ndCBjYWxsIG1ldGhvZCBvbiAgXCIrdCk7cmV0dXJuIHR9fSxmdW5jdGlvbih0LG4scil7dmFyIGU9cigyOCksbz1NYXRoLm1pbjt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHQ+MD9vKGUodCksOTAwNzE5OTI1NDc0MDk5MSk6MH19LGZ1bmN0aW9uKHQsbixyKXtcInVzZSBzdHJpY3RcIjtuLl9fZXNNb2R1bGU9ITAsbi5kZWZhdWx0PWZ1bmN0aW9uKHQsbil7aWYodCYmbil7dmFyIHI9QXJyYXkuaXNBcnJheShuKT9uOm4uc3BsaXQoXCIsXCIpLGU9dC5uYW1lfHxcIlwiLG89dC50eXBlfHxcIlwiLGk9by5yZXBsYWNlKC9cXC8uKiQvLFwiXCIpO3JldHVybiByLnNvbWUoZnVuY3Rpb24odCl7dmFyIG49dC50cmltKCk7cmV0dXJuXCIuXCI9PT1uLmNoYXJBdCgwKT9lLnRvTG93ZXJDYXNlKCkuZW5kc1dpdGgobi50b0xvd2VyQ2FzZSgpKTpuLmVuZHNXaXRoKFwiLypcIik/aT09PW4ucmVwbGFjZSgvXFwvLiokLyxcIlwiKTpvPT09bn0pfXJldHVybiEwfSxyKDE0KSxyKDM0KX0sZnVuY3Rpb24odCxuLHIpe3IoMTUpLHQuZXhwb3J0cz1yKDIpLkFycmF5LnNvbWV9LGZ1bmN0aW9uKHQsbixyKXtcInVzZSBzdHJpY3RcIjt2YXIgZT1yKDcpLG89cigyNSkoMyk7ZShlLlArZS5GKiFyKDMzKShbXS5zb21lLCEwKSxcIkFycmF5XCIse3NvbWU6ZnVuY3Rpb24odCl7cmV0dXJuIG8odGhpcyx0LGFyZ3VtZW50c1sxXSl9fSl9LGZ1bmN0aW9uKHQsbixyKXt2YXIgZT1yKDE3KSxvPXIoMTgpLGk9cigyMCksdT1PYmplY3QuZGVmaW5lUHJvcGVydHk7bi5mPXIoMyk/T2JqZWN0LmRlZmluZVByb3BlcnR5OmZ1bmN0aW9uKHQsbixyKXtpZihlKHQpLG49aShuLCEwKSxlKHIpLG8pdHJ5e3JldHVybiB1KHQsbixyKX1jYXRjaCh0KXt9aWYoXCJnZXRcImluIHJ8fFwic2V0XCJpbiByKXRocm93IFR5cGVFcnJvcihcIkFjY2Vzc29ycyBub3Qgc3VwcG9ydGVkIVwiKTtyZXR1cm5cInZhbHVlXCJpbiByJiYodFtuXT1yLnZhbHVlKSx0fX0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoMSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKCFlKHQpKXRocm93IFR5cGVFcnJvcih0K1wiIGlzIG5vdCBhbiBvYmplY3QhXCIpO3JldHVybiB0fX0sZnVuY3Rpb24odCxuLHIpe3QuZXhwb3J0cz0hcigzKSYmIXIoNCkoZnVuY3Rpb24oKXtyZXR1cm4gNyE9T2JqZWN0LmRlZmluZVByb3BlcnR5KHIoMTkpKFwiZGl2XCIpLFwiYVwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gN319KS5hfSl9LGZ1bmN0aW9uKHQsbixyKXt2YXIgZT1yKDEpLG89cigwKS5kb2N1bWVudCxpPWUobykmJmUoby5jcmVhdGVFbGVtZW50KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGk/by5jcmVhdGVFbGVtZW50KHQpOnt9fX0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoMSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsbil7aWYoIWUodCkpcmV0dXJuIHQ7dmFyIHIsbztpZihuJiZcImZ1bmN0aW9uXCI9PXR5cGVvZihyPXQudG9TdHJpbmcpJiYhZShvPXIuY2FsbCh0KSkpcmV0dXJuIG87aWYoXCJmdW5jdGlvblwiPT10eXBlb2Yocj10LnZhbHVlT2YpJiYhZShvPXIuY2FsbCh0KSkpcmV0dXJuIG87aWYoIW4mJlwiZnVuY3Rpb25cIj09dHlwZW9mKHI9dC50b1N0cmluZykmJiFlKG89ci5jYWxsKHQpKSlyZXR1cm4gbzt0aHJvdyBUeXBlRXJyb3IoXCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWVcIil9fSxmdW5jdGlvbih0LG4pe3QuZXhwb3J0cz1mdW5jdGlvbih0LG4pe3JldHVybntlbnVtZXJhYmxlOiEoMSZ0KSxjb25maWd1cmFibGU6ISgyJnQpLHdyaXRhYmxlOiEoNCZ0KSx2YWx1ZTpufX19LGZ1bmN0aW9uKHQsbixyKXt2YXIgZT1yKDApLG89cig4KSxpPXIoMjMpLHU9cig5KShcInNyY1wiKSxjPUZ1bmN0aW9uLnRvU3RyaW5nLGY9KFwiXCIrYykuc3BsaXQoXCJ0b1N0cmluZ1wiKTtyKDIpLmluc3BlY3RTb3VyY2U9ZnVuY3Rpb24odCl7cmV0dXJuIGMuY2FsbCh0KX0sKHQuZXhwb3J0cz1mdW5jdGlvbih0LG4scixjKXt2YXIgYT1cImZ1bmN0aW9uXCI9PXR5cGVvZiByO2EmJihpKHIsXCJuYW1lXCIpfHxvKHIsXCJuYW1lXCIsbikpLHRbbl0hPT1yJiYoYSYmKGkocix1KXx8byhyLHUsdFtuXT9cIlwiK3Rbbl06Zi5qb2luKFN0cmluZyhuKSkpKSx0PT09ZT90W25dPXI6Yz90W25dP3Rbbl09cjpvKHQsbixyKTooZGVsZXRlIHRbbl0sbyh0LG4scikpKX0pKEZ1bmN0aW9uLnByb3RvdHlwZSxcInRvU3RyaW5nXCIsZnVuY3Rpb24oKXtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiB0aGlzJiZ0aGlzW3VdfHxjLmNhbGwodGhpcyl9KX0sZnVuY3Rpb24odCxuKXt2YXIgcj17fS5oYXNPd25Qcm9wZXJ0eTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxuKXtyZXR1cm4gci5jYWxsKHQsbil9fSxmdW5jdGlvbih0LG4pe3QuZXhwb3J0cz1mdW5jdGlvbih0KXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiB0KXRocm93IFR5cGVFcnJvcih0K1wiIGlzIG5vdCBhIGZ1bmN0aW9uIVwiKTtyZXR1cm4gdH19LGZ1bmN0aW9uKHQsbixyKXt2YXIgZT1yKDEwKSxvPXIoMjYpLGk9cigyNyksdT1yKDEyKSxjPXIoMjkpO3QuZXhwb3J0cz1mdW5jdGlvbih0LG4pe3ZhciByPTE9PXQsZj0yPT10LGE9Mz09dCxzPTQ9PXQscD02PT10LGw9NT09dHx8cCx2PW58fGM7cmV0dXJuIGZ1bmN0aW9uKG4sYyx5KXtmb3IodmFyIGgsZCx4PWkobiksZz1vKHgpLG09ZShjLHksMyksYj11KGcubGVuZ3RoKSxfPTAsdz1yP3YobixiKTpmP3YobiwwKTp2b2lkIDA7Yj5fO18rKylpZigobHx8XyBpbiBnKSYmKGg9Z1tfXSxkPW0oaCxfLHgpLHQpKWlmKHIpd1tfXT1kO2Vsc2UgaWYoZClzd2l0Y2godCl7Y2FzZSAzOnJldHVybiEwO2Nhc2UgNTpyZXR1cm4gaDtjYXNlIDY6cmV0dXJuIF87Y2FzZSAyOncucHVzaChoKX1lbHNlIGlmKHMpcmV0dXJuITE7cmV0dXJuIHA/LTE6YXx8cz9zOnd9fX0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoNSk7dC5leHBvcnRzPU9iamVjdChcInpcIikucHJvcGVydHlJc0VudW1lcmFibGUoMCk/T2JqZWN0OmZ1bmN0aW9uKHQpe3JldHVyblwiU3RyaW5nXCI9PWUodCk/dC5zcGxpdChcIlwiKTpPYmplY3QodCl9fSxmdW5jdGlvbih0LG4scil7dmFyIGU9cigxMSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBPYmplY3QoZSh0KSl9fSxmdW5jdGlvbih0LG4pe3ZhciByPU1hdGguY2VpbCxlPU1hdGguZmxvb3I7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBpc05hTih0PSt0KT8wOih0PjA/ZTpyKSh0KX19LGZ1bmN0aW9uKHQsbixyKXt2YXIgZT1yKDMwKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxuKXtyZXR1cm4gbmV3KGUodCkpKG4pfX0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoMSksbz1yKDMxKSxpPXIoNikoXCJzcGVjaWVzXCIpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgbjtyZXR1cm4gbyh0KSYmKG49dC5jb25zdHJ1Y3RvcixcImZ1bmN0aW9uXCIhPXR5cGVvZiBufHxuIT09QXJyYXkmJiFvKG4ucHJvdG90eXBlKXx8KG49dm9pZCAwKSxlKG4pJiZudWxsPT09KG49bltpXSkmJihuPXZvaWQgMCkpLHZvaWQgMD09PW4/QXJyYXk6bn19LGZ1bmN0aW9uKHQsbixyKXt2YXIgZT1yKDUpO3QuZXhwb3J0cz1BcnJheS5pc0FycmF5fHxmdW5jdGlvbih0KXtyZXR1cm5cIkFycmF5XCI9PWUodCl9fSxmdW5jdGlvbih0LG4scil7dmFyIGU9cigwKSxvPWVbXCJfX2NvcmUtanNfc2hhcmVkX19cIl18fChlW1wiX19jb3JlLWpzX3NoYXJlZF9fXCJdPXt9KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIG9bdF18fChvW3RdPXt9KX19LGZ1bmN0aW9uKHQsbixyKXtcInVzZSBzdHJpY3RcIjt2YXIgZT1yKDQpO3QuZXhwb3J0cz1mdW5jdGlvbih0LG4pe3JldHVybiEhdCYmZShmdW5jdGlvbigpe24/dC5jYWxsKG51bGwsZnVuY3Rpb24oKXt9LDEpOnQuY2FsbChudWxsKX0pfX0sZnVuY3Rpb24odCxuLHIpe3IoMzUpLHQuZXhwb3J0cz1yKDIpLlN0cmluZy5lbmRzV2l0aH0sZnVuY3Rpb24odCxuLHIpe1widXNlIHN0cmljdFwiO3ZhciBlPXIoNyksbz1yKDEyKSxpPXIoMzYpLHU9XCJcIi5lbmRzV2l0aDtlKGUuUCtlLkYqcigzOCkoXCJlbmRzV2l0aFwiKSxcIlN0cmluZ1wiLHtlbmRzV2l0aDpmdW5jdGlvbih0KXt2YXIgbj1pKHRoaXMsdCxcImVuZHNXaXRoXCIpLHI9YXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDAsZT1vKG4ubGVuZ3RoKSxjPXZvaWQgMD09PXI/ZTpNYXRoLm1pbihvKHIpLGUpLGY9U3RyaW5nKHQpO3JldHVybiB1P3UuY2FsbChuLGYsYyk6bi5zbGljZShjLWYubGVuZ3RoLGMpPT09Zn19KX0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoMzcpLG89cigxMSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsbixyKXtpZihlKG4pKXRocm93IFR5cGVFcnJvcihcIlN0cmluZyNcIityK1wiIGRvZXNuJ3QgYWNjZXB0IHJlZ2V4IVwiKTtyZXR1cm4gU3RyaW5nKG8odCkpfX0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoMSksbz1yKDUpLGk9cig2KShcIm1hdGNoXCIpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgbjtyZXR1cm4gZSh0KSYmKHZvaWQgMCE9PShuPXRbaV0pPyEhbjpcIlJlZ0V4cFwiPT1vKHQpKX19LGZ1bmN0aW9uKHQsbixyKXt2YXIgZT1yKDYpKFwibWF0Y2hcIik7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBuPS8uLzt0cnl7XCIvLi9cIlt0XShuKX1jYXRjaChyKXt0cnl7cmV0dXJuIG5bZV09ITEsIVwiLy4vXCJbdF0obil9Y2F0Y2godCl7fX1yZXR1cm4hMH19XSk7IiwiaW1wb3J0IGFjY2VwdHMgZnJvbSAnYXR0ci1hY2NlcHQnXG5cbmV4cG9ydCBjb25zdCBzdXBwb3J0TXVsdGlwbGUgPVxuICB0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnICYmIGRvY3VtZW50ICYmIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnRcbiAgICA/ICdtdWx0aXBsZScgaW4gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKVxuICAgIDogdHJ1ZVxuXG4vLyBGaXJlZm94IHZlcnNpb25zIHByaW9yIHRvIDUzIHJldHVybiBhIGJvZ3VzIE1JTUUgdHlwZSBmb3IgZXZlcnkgZmlsZSBkcmFnLCBzbyBkcmFnb3ZlcnMgd2l0aFxuLy8gdGhhdCBNSU1FIHR5cGUgd2lsbCBhbHdheXMgYmUgYWNjZXB0ZWRcbmV4cG9ydCBmdW5jdGlvbiBmaWxlQWNjZXB0ZWQoZmlsZSwgYWNjZXB0KSB7XG4gIHJldHVybiBmaWxlLnR5cGUgPT09ICdhcHBsaWNhdGlvbi94LW1vei1maWxlJyB8fCBhY2NlcHRzKGZpbGUsIGFjY2VwdClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpbGVNYXRjaFNpemUoZmlsZSwgbWF4U2l6ZSwgbWluU2l6ZSkge1xuICByZXR1cm4gZmlsZS5zaXplIDw9IG1heFNpemUgJiYgZmlsZS5zaXplID49IG1pblNpemVcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFsbEZpbGVzQWNjZXB0ZWQoZmlsZXMsIGFjY2VwdCkge1xuICByZXR1cm4gZmlsZXMuZXZlcnkoZmlsZSA9PiBmaWxlQWNjZXB0ZWQoZmlsZSwgYWNjZXB0KSlcbn1cblxuLy8gUmVhY3QncyBzeW50aGV0aWMgZXZlbnRzIGhhcyBldnQuaXNQcm9wYWdhdGlvblN0b3BwZWQsXG4vLyBidXQgdG8gcmVtYWluIGNvbXBhdGliaWxpdHkgd2l0aCBvdGhlciBsaWJzIChQcmVhY3QpIGZhbGwgYmFja1xuLy8gdG8gY2hlY2sgZXZ0LmNhbmNlbEJ1YmJsZVxuZXhwb3J0IGZ1bmN0aW9uIGlzUHJvcGFnYXRpb25TdG9wcGVkKGV2dCkge1xuICBpZiAodHlwZW9mIGV2dC5pc1Byb3BhZ2F0aW9uU3RvcHBlZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBldnQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKVxuICB9IGVsc2UgaWYgKHR5cGVvZiBldnQuY2FuY2VsQnViYmxlICE9PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiBldnQuY2FuY2VsQnViYmxlXG4gIH1cbiAgcmV0dXJuIGZhbHNlXG59XG5cbi8vIFJlYWN0J3Mgc3ludGhldGljIGV2ZW50cyBoYXMgZXZ0LmlzRGVmYXVsdFByZXZlbnRlZCxcbi8vIGJ1dCB0byByZW1haW4gY29tcGF0aWJpbGl0eSB3aXRoIG90aGVyIGxpYnMgKFByZWFjdCkgZmlyc3Rcbi8vIGNoZWNrIGV2dC5kZWZhdWx0UHJldmVudGVkXG5leHBvcnQgZnVuY3Rpb24gaXNEZWZhdWx0UHJldmVudGVkKGV2dCkge1xuICBpZiAodHlwZW9mIGV2dC5kZWZhdWx0UHJldmVudGVkICE9PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiBldnQuZGVmYXVsdFByZXZlbnRlZFxuICB9IGVsc2UgaWYgKHR5cGVvZiBldnQuaXNEZWZhdWx0UHJldmVudGVkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIGV2dC5pc0RlZmF1bHRQcmV2ZW50ZWQoKVxuICB9XG4gIHJldHVybiBmYWxzZVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNEcmFnRGF0YVdpdGhGaWxlcyhldnQpIHtcbiAgaWYgKCFldnQuZGF0YVRyYW5zZmVyKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRGF0YVRyYW5zZmVyL3R5cGVzXG4gIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9IVE1MX0RyYWdfYW5kX0Ryb3BfQVBJL1JlY29tbWVuZGVkX2RyYWdfdHlwZXMjZmlsZVxuICByZXR1cm4gQXJyYXkucHJvdG90eXBlLnNvbWUuY2FsbChcbiAgICBldnQuZGF0YVRyYW5zZmVyLnR5cGVzLFxuICAgIHR5cGUgPT4gdHlwZSA9PT0gJ0ZpbGVzJyB8fCB0eXBlID09PSAnYXBwbGljYXRpb24veC1tb3otZmlsZSdcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNLaW5kRmlsZShpdGVtKSB7XG4gIHJldHVybiB0eXBlb2YgaXRlbSA9PT0gJ29iamVjdCcgJiYgaXRlbSAhPT0gbnVsbCAmJiBpdGVtLmtpbmQgPT09ICdmaWxlJ1xufVxuXG4vLyBhbGxvdyB0aGUgZW50aXJlIGRvY3VtZW50IHRvIGJlIGEgZHJhZyB0YXJnZXRcbmV4cG9ydCBmdW5jdGlvbiBvbkRvY3VtZW50RHJhZ092ZXIoZXZ0KSB7XG4gIGV2dC5wcmV2ZW50RGVmYXVsdCgpXG59XG5cbmZ1bmN0aW9uIGlzSWUodXNlckFnZW50KSB7XG4gIHJldHVybiB1c2VyQWdlbnQuaW5kZXhPZignTVNJRScpICE9PSAtMSB8fCB1c2VyQWdlbnQuaW5kZXhPZignVHJpZGVudC8nKSAhPT0gLTFcbn1cblxuZnVuY3Rpb24gaXNFZGdlKHVzZXJBZ2VudCkge1xuICByZXR1cm4gdXNlckFnZW50LmluZGV4T2YoJ0VkZ2UvJykgIT09IC0xXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0llT3JFZGdlKHVzZXJBZ2VudCA9IHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50KSB7XG4gIHJldHVybiBpc0llKHVzZXJBZ2VudCkgfHwgaXNFZGdlKHVzZXJBZ2VudClcbn1cblxuLyoqXG4gKiBUaGlzIGlzIGludGVuZGVkIHRvIGJlIHVzZWQgdG8gY29tcG9zZSBldmVudCBoYW5kbGVyc1xuICogVGhleSBhcmUgZXhlY3V0ZWQgaW4gb3JkZXIgdW50aWwgb25lIG9mIHRoZW0gY2FsbHMgYGV2ZW50LnByZXZlbnREZWZhdWx0KClgLlxuICogTm90IHN1cmUgdGhpcyBpcyB0aGUgYmVzdCB3YXkgdG8gZG8gdGhpcywgYnV0IGl0IHNlZW1zIGxlZ2l0LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm5zIHRoZSBldmVudCBoYW5sZGVyIGZ1bmN0aW9uc1xuICogQHJldHVybiB7RnVuY3Rpb259IHRoZSBldmVudCBoYW5kbGVyIHRvIGFkZCB0byBhbiBlbGVtZW50XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21wb3NlRXZlbnRIYW5kbGVycyguLi5mbnMpIHtcbiAgcmV0dXJuIChldmVudCwgLi4uYXJncykgPT5cbiAgICBmbnMuc29tZShmbiA9PiB7XG4gICAgICBmbiAmJiBmbihldmVudCwgLi4uYXJncylcbiAgICAgIHJldHVybiBldmVudC5kZWZhdWx0UHJldmVudGVkXG4gICAgfSlcbn1cbiIsIi8qIGVzbGludCBwcmVmZXItdGVtcGxhdGU6IDAgKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgZnJvbUV2ZW50IH0gZnJvbSAnZmlsZS1zZWxlY3RvcidcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcydcbmltcG9ydCBkZXByZWNhdGVkIGZyb20gJ3Byb3AtdHlwZXMtZXh0cmEvbGliL2RlcHJlY2F0ZWQnXG5pbXBvcnQge1xuICBpc0RyYWdEYXRhV2l0aEZpbGVzLFxuICBzdXBwb3J0TXVsdGlwbGUsXG4gIGZpbGVBY2NlcHRlZCxcbiAgYWxsRmlsZXNBY2NlcHRlZCxcbiAgZmlsZU1hdGNoU2l6ZSxcbiAgb25Eb2N1bWVudERyYWdPdmVyLFxuICBpc0llT3JFZGdlLFxuICBjb21wb3NlRXZlbnRIYW5kbGVycyxcbiAgaXNQcm9wYWdhdGlvblN0b3BwZWQsXG4gIGlzRGVmYXVsdFByZXZlbnRlZFxufSBmcm9tICcuL3V0aWxzJ1xuXG5jbGFzcyBEcm9wem9uZSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIHN0YXRlID0ge1xuICAgIGRyYWdnZWRGaWxlczogW10sXG4gICAgYWNjZXB0ZWRGaWxlczogW10sXG4gICAgcmVqZWN0ZWRGaWxlczogW11cbiAgfVxuXG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIGNvbnN0IHsgcHJldmVudERyb3BPbkRvY3VtZW50IH0gPSB0aGlzLnByb3BzXG4gICAgdGhpcy5kcmFnVGFyZ2V0cyA9IFtdXG5cbiAgICBpZiAocHJldmVudERyb3BPbkRvY3VtZW50KSB7XG4gICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdkcmFnb3ZlcicsIG9uRG9jdW1lbnREcmFnT3ZlciwgZmFsc2UpXG4gICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdkcm9wJywgdGhpcy5vbkRvY3VtZW50RHJvcCwgZmFsc2UpXG4gICAgfVxuXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3VzJywgdGhpcy5vbkZpbGVEaWFsb2dDYW5jZWwsIGZhbHNlKVxuICB9XG5cbiAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgY29uc3QgeyBwcmV2ZW50RHJvcE9uRG9jdW1lbnQgfSA9IHRoaXMucHJvcHNcbiAgICBpZiAocHJldmVudERyb3BPbkRvY3VtZW50KSB7XG4gICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdkcmFnb3ZlcicsIG9uRG9jdW1lbnREcmFnT3ZlcilcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Ryb3AnLCB0aGlzLm9uRG9jdW1lbnREcm9wKVxuICAgIH1cblxuICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdmb2N1cycsIHRoaXMub25GaWxlRGlhbG9nQ2FuY2VsLCBmYWxzZSlcbiAgfVxuXG4gIGlzRmlsZURpYWxvZ0FjdGl2ZSA9IGZhbHNlXG5cbiAgb25Eb2N1bWVudERyb3AgPSBldnQgPT4ge1xuICAgIGlmICh0aGlzLm5vZGUgJiYgdGhpcy5ub2RlLmNvbnRhaW5zKGV2dC50YXJnZXQpKSB7XG4gICAgICAvLyBpZiB3ZSBpbnRlcmNlcHRlZCBhbiBldmVudCBmb3Igb3VyIGluc3RhbmNlLCBsZXQgaXQgcHJvcGFnYXRlIGRvd24gdG8gdGhlIGluc3RhbmNlJ3Mgb25Ecm9wIGhhbmRsZXJcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBldnQucHJldmVudERlZmF1bHQoKVxuICAgIHRoaXMuZHJhZ1RhcmdldHMgPSBbXVxuICB9XG5cbiAgb25EcmFnU3RhcnQgPSBldnQgPT4ge1xuICAgIGV2dC5wZXJzaXN0KClcbiAgICBpZiAodGhpcy5wcm9wcy5vbkRyYWdTdGFydCAmJiBpc0RyYWdEYXRhV2l0aEZpbGVzKGV2dCkpIHtcbiAgICAgIHRoaXMucHJvcHMub25EcmFnU3RhcnQuY2FsbCh0aGlzLCBldnQpXG4gICAgfVxuICB9XG5cbiAgb25EcmFnRW50ZXIgPSBldnQgPT4ge1xuICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpXG5cbiAgICAvLyBDb3VudCB0aGUgZHJvcHpvbmUgYW5kIGFueSBjaGlsZHJlbiB0aGF0IGFyZSBlbnRlcmVkLlxuICAgIGlmICh0aGlzLmRyYWdUYXJnZXRzLmluZGV4T2YoZXZ0LnRhcmdldCkgPT09IC0xKSB7XG4gICAgICB0aGlzLmRyYWdUYXJnZXRzLnB1c2goZXZ0LnRhcmdldClcbiAgICB9XG5cbiAgICBldnQucGVyc2lzdCgpXG5cbiAgICBpZiAoaXNEcmFnRGF0YVdpdGhGaWxlcyhldnQpKSB7XG4gICAgICBQcm9taXNlLnJlc29sdmUodGhpcy5wcm9wcy5nZXREYXRhVHJhbnNmZXJJdGVtcyhldnQpKS50aGVuKGRyYWdnZWRGaWxlcyA9PiB7XG4gICAgICAgIGlmIChpc1Byb3BhZ2F0aW9uU3RvcHBlZChldnQpKSB7XG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICBkcmFnZ2VkRmlsZXMsXG4gICAgICAgICAgLy8gRG8gbm90IHJlbHkgb24gZmlsZXMgZm9yIHRoZSBkcmFnIHN0YXRlLiBJdCBkb2Vzbid0IHdvcmsgaW4gU2FmYXJpLlxuICAgICAgICAgIGlzRHJhZ0FjdGl2ZTogdHJ1ZVxuICAgICAgICB9KVxuICAgICAgfSlcblxuICAgICAgaWYgKHRoaXMucHJvcHMub25EcmFnRW50ZXIpIHtcbiAgICAgICAgdGhpcy5wcm9wcy5vbkRyYWdFbnRlci5jYWxsKHRoaXMsIGV2dClcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBvbkRyYWdPdmVyID0gZXZ0ID0+IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGNsYXNzLW1ldGhvZHMtdXNlLXRoaXNcbiAgICBldnQucHJldmVudERlZmF1bHQoKVxuICAgIGV2dC5wZXJzaXN0KClcblxuICAgIGlmIChldnQuZGF0YVRyYW5zZmVyKSB7XG4gICAgICBldnQuZGF0YVRyYW5zZmVyLmRyb3BFZmZlY3QgPSAnY29weSdcbiAgICB9XG5cbiAgICBpZiAodGhpcy5wcm9wcy5vbkRyYWdPdmVyICYmIGlzRHJhZ0RhdGFXaXRoRmlsZXMoZXZ0KSkge1xuICAgICAgdGhpcy5wcm9wcy5vbkRyYWdPdmVyLmNhbGwodGhpcywgZXZ0KVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgb25EcmFnTGVhdmUgPSBldnQgPT4ge1xuICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgZXZ0LnBlcnNpc3QoKVxuXG4gICAgLy8gT25seSBkZWFjdGl2YXRlIG9uY2UgdGhlIGRyb3B6b25lIGFuZCBhbGwgY2hpbGRyZW4gaGF2ZSBiZWVuIGxlZnQuXG4gICAgdGhpcy5kcmFnVGFyZ2V0cyA9IHRoaXMuZHJhZ1RhcmdldHMuZmlsdGVyKGVsID0+IGVsICE9PSBldnQudGFyZ2V0ICYmIHRoaXMubm9kZS5jb250YWlucyhlbCkpXG4gICAgaWYgKHRoaXMuZHJhZ1RhcmdldHMubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gQ2xlYXIgZHJhZ2dpbmcgZmlsZXMgc3RhdGVcbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIGlzRHJhZ0FjdGl2ZTogZmFsc2UsXG4gICAgICBkcmFnZ2VkRmlsZXM6IFtdXG4gICAgfSlcblxuICAgIGlmICh0aGlzLnByb3BzLm9uRHJhZ0xlYXZlICYmIGlzRHJhZ0RhdGFXaXRoRmlsZXMoZXZ0KSkge1xuICAgICAgdGhpcy5wcm9wcy5vbkRyYWdMZWF2ZS5jYWxsKHRoaXMsIGV2dClcbiAgICB9XG4gIH1cblxuICBvbkRyb3AgPSBldnQgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIG9uRHJvcCxcbiAgICAgIG9uRHJvcEFjY2VwdGVkLFxuICAgICAgb25Ecm9wUmVqZWN0ZWQsXG4gICAgICBtdWx0aXBsZSxcbiAgICAgIGFjY2VwdCxcbiAgICAgIGdldERhdGFUcmFuc2Zlckl0ZW1zXG4gICAgfSA9IHRoaXMucHJvcHNcblxuICAgIC8vIFN0b3AgZGVmYXVsdCBicm93c2VyIGJlaGF2aW9yXG4gICAgZXZ0LnByZXZlbnREZWZhdWx0KClcblxuICAgIC8vIFBlcnNpc3QgZXZlbnQgZm9yIGxhdGVyIHVzYWdlXG4gICAgZXZ0LnBlcnNpc3QoKVxuXG4gICAgLy8gUmVzZXQgdGhlIGNvdW50ZXIgYWxvbmcgd2l0aCB0aGUgZHJhZyBvbiBhIGRyb3AuXG4gICAgdGhpcy5kcmFnVGFyZ2V0cyA9IFtdXG4gICAgdGhpcy5pc0ZpbGVEaWFsb2dBY3RpdmUgPSBmYWxzZVxuXG4gICAgLy8gQ2xlYXIgZmlsZXMgdmFsdWVcbiAgICB0aGlzLmRyYWdnZWRGaWxlcyA9IG51bGxcblxuICAgIC8vIFJlc2V0IGRyYWcgc3RhdGVcbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIGlzRHJhZ0FjdGl2ZTogZmFsc2UsXG4gICAgICBkcmFnZ2VkRmlsZXM6IFtdXG4gICAgfSlcblxuICAgIGlmIChpc0RyYWdEYXRhV2l0aEZpbGVzKGV2dCkpIHtcbiAgICAgIFByb21pc2UucmVzb2x2ZShnZXREYXRhVHJhbnNmZXJJdGVtcyhldnQpKS50aGVuKGZpbGVMaXN0ID0+IHtcbiAgICAgICAgY29uc3QgYWNjZXB0ZWRGaWxlcyA9IFtdXG4gICAgICAgIGNvbnN0IHJlamVjdGVkRmlsZXMgPSBbXVxuXG4gICAgICAgIGlmIChpc1Byb3BhZ2F0aW9uU3RvcHBlZChldnQpKSB7XG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cblxuICAgICAgICBmaWxlTGlzdC5mb3JFYWNoKGZpbGUgPT4ge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGZpbGVBY2NlcHRlZChmaWxlLCBhY2NlcHQpICYmXG4gICAgICAgICAgICBmaWxlTWF0Y2hTaXplKGZpbGUsIHRoaXMucHJvcHMubWF4U2l6ZSwgdGhpcy5wcm9wcy5taW5TaXplKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgYWNjZXB0ZWRGaWxlcy5wdXNoKGZpbGUpXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlamVjdGVkRmlsZXMucHVzaChmaWxlKVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcblxuICAgICAgICBpZiAoIW11bHRpcGxlICYmIGFjY2VwdGVkRmlsZXMubGVuZ3RoID4gMSkge1xuICAgICAgICAgIC8vIGlmIG5vdCBpbiBtdWx0aSBtb2RlIGFkZCBhbnkgZXh0cmEgYWNjZXB0ZWQgZmlsZXMgdG8gcmVqZWN0ZWQuXG4gICAgICAgICAgLy8gVGhpcyB3aWxsIGFsbG93IGVuZCB1c2VycyB0byBlYXNpbHkgaWdub3JlIGEgbXVsdGkgZmlsZSBkcm9wIGluIFwic2luZ2xlXCIgbW9kZS5cbiAgICAgICAgICByZWplY3RlZEZpbGVzLnB1c2goLi4uYWNjZXB0ZWRGaWxlcy5zcGxpY2UoMCkpXG4gICAgICAgIH1cblxuICAgICAgICAvLyBVcGRhdGUgYGFjY2VwdGVkRmlsZXNgIGFuZCBgcmVqZWN0ZWRGaWxlc2Agc3RhdGVcbiAgICAgICAgLy8gVGhpcyB3aWxsIG1ha2UgY2hpbGRyZW4gcmVuZGVyIGZ1bmN0aW9ucyByZWNlaXZlIHRoZSBhcHByb3ByaWF0ZVxuICAgICAgICAvLyB2YWx1ZXNcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7IGFjY2VwdGVkRmlsZXMsIHJlamVjdGVkRmlsZXMgfSwgKCkgPT4ge1xuICAgICAgICAgIGlmIChvbkRyb3ApIHtcbiAgICAgICAgICAgIG9uRHJvcC5jYWxsKHRoaXMsIGFjY2VwdGVkRmlsZXMsIHJlamVjdGVkRmlsZXMsIGV2dClcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAocmVqZWN0ZWRGaWxlcy5sZW5ndGggPiAwICYmIG9uRHJvcFJlamVjdGVkKSB7XG4gICAgICAgICAgICBvbkRyb3BSZWplY3RlZC5jYWxsKHRoaXMsIHJlamVjdGVkRmlsZXMsIGV2dClcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoYWNjZXB0ZWRGaWxlcy5sZW5ndGggPiAwICYmIG9uRHJvcEFjY2VwdGVkKSB7XG4gICAgICAgICAgICBvbkRyb3BBY2NlcHRlZC5jYWxsKHRoaXMsIGFjY2VwdGVkRmlsZXMsIGV2dClcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIG9uQ2xpY2sgPSBldnQgPT4ge1xuICAgIGNvbnN0IHsgb25DbGljaywgZGlzYWJsZUNsaWNrIH0gPSB0aGlzLnByb3BzXG5cbiAgICAvLyBpZiBvbkNsaWNrIHByb3AgaXMgZ2l2ZW4sIHJ1biBpdCBmaXJzdFxuICAgIGlmIChvbkNsaWNrKSB7XG4gICAgICBvbkNsaWNrLmNhbGwodGhpcywgZXZ0KVxuICAgIH1cblxuICAgIC8vIGlmIGRpc2FibGVDbGljayBpcyBub3Qgc2V0IGFuZCB0aGUgZXZlbnQgaGFzbid0IGJlZW4gZGVmYXVsdCBwcmVmZW50ZWQgd2l0aGluXG4gICAgLy8gdGhlIG9uQ2xpY2sgbGlzdGVuZXIsIG9wZW4gdGhlIGZpbGUgZGlhbG9nXG4gICAgaWYgKCFkaXNhYmxlQ2xpY2sgJiYgIWlzRGVmYXVsdFByZXZlbnRlZChldnQpKSB7XG4gICAgICBldnQuc3RvcFByb3BhZ2F0aW9uKClcblxuICAgICAgLy8gaW4gSUUxMS9FZGdlIHRoZSBmaWxlLWJyb3dzZXIgZGlhbG9nIGlzIGJsb2NraW5nLCBlbnN1cmUgdGhpcyBpcyBiZWhpbmQgc2V0VGltZW91dFxuICAgICAgLy8gdGhpcyBpcyBzbyByZWFjdCBjYW4gaGFuZGxlIHN0YXRlIGNoYW5nZXMgaW4gdGhlIG9uQ2xpY2sgcHJvcCBhYm92ZSBhYm92ZVxuICAgICAgLy8gc2VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVhY3QtZHJvcHpvbmUvcmVhY3QtZHJvcHpvbmUvaXNzdWVzLzQ1MFxuICAgICAgaWYgKGlzSWVPckVkZ2UoKSkge1xuICAgICAgICBzZXRUaW1lb3V0KHRoaXMub3BlbiwgMClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMub3BlbigpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgb25JbnB1dEVsZW1lbnRDbGljayA9IGV2dCA9PiB7XG4gICAgZXZ0LnN0b3BQcm9wYWdhdGlvbigpXG4gIH1cblxuICBvbkZpbGVEaWFsb2dDYW5jZWwgPSAoKSA9PiB7XG4gICAgLy8gdGltZW91dCB3aWxsIG5vdCByZWNvZ25pemUgY29udGV4dCBvZiB0aGlzIG1ldGhvZFxuICAgIGNvbnN0IHsgb25GaWxlRGlhbG9nQ2FuY2VsIH0gPSB0aGlzLnByb3BzXG4gICAgLy8gZXhlY3V0ZSB0aGUgdGltZW91dCBvbmx5IGlmIHRoZSBGaWxlRGlhbG9nIGlzIG9wZW5lZCBpbiB0aGUgYnJvd3NlclxuICAgIGlmICh0aGlzLmlzRmlsZURpYWxvZ0FjdGl2ZSkge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmlucHV0ICE9IG51bGwpIHtcbiAgICAgICAgICAvLyBSZXR1cm5zIGFuIG9iamVjdCBhcyBGaWxlTGlzdFxuICAgICAgICAgIGNvbnN0IHsgZmlsZXMgfSA9IHRoaXMuaW5wdXRcblxuICAgICAgICAgIGlmICghZmlsZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLmlzRmlsZURpYWxvZ0FjdGl2ZSA9IGZhbHNlXG5cbiAgICAgICAgICAgIGlmICh0eXBlb2Ygb25GaWxlRGlhbG9nQ2FuY2VsID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgIG9uRmlsZURpYWxvZ0NhbmNlbCgpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LCAzMDApXG4gICAgfVxuICB9XG5cbiAgb25Gb2N1cyA9IGV2dCA9PiB7XG4gICAgY29uc3QgeyBvbkZvY3VzIH0gPSB0aGlzLnByb3BzXG4gICAgaWYgKG9uRm9jdXMpIHtcbiAgICAgIG9uRm9jdXMuY2FsbCh0aGlzLCBldnQpXG4gICAgfVxuICAgIGlmICghaXNEZWZhdWx0UHJldmVudGVkKGV2dCkpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoeyBpc0ZvY3VzZWQ6IHRydWUgfSlcbiAgICB9XG4gIH1cblxuICBvbkJsdXIgPSBldnQgPT4ge1xuICAgIGNvbnN0IHsgb25CbHVyIH0gPSB0aGlzLnByb3BzXG4gICAgaWYgKG9uQmx1cikge1xuICAgICAgb25CbHVyLmNhbGwodGhpcywgZXZ0KVxuICAgIH1cbiAgICBpZiAoIWlzRGVmYXVsdFByZXZlbnRlZChldnQpKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHsgaXNGb2N1c2VkOiBmYWxzZSB9KVxuICAgIH1cbiAgfVxuXG4gIG9uS2V5RG93biA9IGV2dCA9PiB7XG4gICAgY29uc3QgeyBvbktleURvd24gfSA9IHRoaXMucHJvcHNcbiAgICBpZiAoIXRoaXMubm9kZS5pc0VxdWFsTm9kZShldnQudGFyZ2V0KSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKG9uS2V5RG93bikge1xuICAgICAgb25LZXlEb3duLmNhbGwodGhpcywgZXZ0KVxuICAgIH1cblxuICAgIGlmICghaXNEZWZhdWx0UHJldmVudGVkKGV2dCkgJiYgKGV2dC5rZXlDb2RlID09PSAzMiB8fCBldnQua2V5Q29kZSA9PT0gMTMpKSB7XG4gICAgICBldnQucHJldmVudERlZmF1bHQoKVxuICAgICAgdGhpcy5vcGVuKClcbiAgICB9XG4gIH1cblxuICBjb21wb3NlSGFuZGxlciA9IGhhbmRsZXIgPT4ge1xuICAgIGlmICh0aGlzLnByb3BzLmRpc2FibGVkKSB7XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cbiAgICByZXR1cm4gaGFuZGxlclxuICB9XG5cbiAgZ2V0Um9vdFByb3BzID0gKHtcbiAgICByZWZLZXkgPSAncmVmJyxcbiAgICBvbktleURvd24sXG4gICAgb25Gb2N1cyxcbiAgICBvbkJsdXIsXG4gICAgb25DbGljayxcbiAgICBvbkRyYWdTdGFydCxcbiAgICBvbkRyYWdFbnRlcixcbiAgICBvbkRyYWdPdmVyLFxuICAgIG9uRHJhZ0xlYXZlLFxuICAgIG9uRHJvcCxcbiAgICAuLi5yZXN0XG4gIH0gPSB7fSkgPT4gKHtcbiAgICBvbktleURvd246IHRoaXMuY29tcG9zZUhhbmRsZXIoXG4gICAgICBvbktleURvd24gPyBjb21wb3NlRXZlbnRIYW5kbGVycyhvbktleURvd24sIHRoaXMub25LZXlEb3duKSA6IHRoaXMub25LZXlEb3duXG4gICAgKSxcbiAgICBvbkZvY3VzOiB0aGlzLmNvbXBvc2VIYW5kbGVyKFxuICAgICAgb25Gb2N1cyA/IGNvbXBvc2VFdmVudEhhbmRsZXJzKG9uRm9jdXMsIHRoaXMub25Gb2N1cykgOiB0aGlzLm9uRm9jdXNcbiAgICApLFxuICAgIG9uQmx1cjogdGhpcy5jb21wb3NlSGFuZGxlcihvbkJsdXIgPyBjb21wb3NlRXZlbnRIYW5kbGVycyhvbkJsdXIsIHRoaXMub25CbHVyKSA6IHRoaXMub25CbHVyKSxcbiAgICBvbkNsaWNrOiB0aGlzLmNvbXBvc2VIYW5kbGVyKFxuICAgICAgb25DbGljayA/IGNvbXBvc2VFdmVudEhhbmRsZXJzKG9uQ2xpY2ssIHRoaXMub25DbGljaykgOiB0aGlzLm9uQ2xpY2tcbiAgICApLFxuICAgIG9uRHJhZ1N0YXJ0OiB0aGlzLmNvbXBvc2VIYW5kbGVyKFxuICAgICAgb25EcmFnU3RhcnQgPyBjb21wb3NlRXZlbnRIYW5kbGVycyhvbkRyYWdTdGFydCwgdGhpcy5vbkRyYWdTdGFydCkgOiB0aGlzLm9uRHJhZ1N0YXJ0XG4gICAgKSxcbiAgICBvbkRyYWdFbnRlcjogdGhpcy5jb21wb3NlSGFuZGxlcihcbiAgICAgIG9uRHJhZ0VudGVyID8gY29tcG9zZUV2ZW50SGFuZGxlcnMob25EcmFnRW50ZXIsIHRoaXMub25EcmFnRW50ZXIpIDogdGhpcy5vbkRyYWdFbnRlclxuICAgICksXG4gICAgb25EcmFnT3ZlcjogdGhpcy5jb21wb3NlSGFuZGxlcihcbiAgICAgIG9uRHJhZ092ZXIgPyBjb21wb3NlRXZlbnRIYW5kbGVycyhvbkRyYWdPdmVyLCB0aGlzLm9uRHJhZ092ZXIpIDogdGhpcy5vbkRyYWdPdmVyXG4gICAgKSxcbiAgICBvbkRyYWdMZWF2ZTogdGhpcy5jb21wb3NlSGFuZGxlcihcbiAgICAgIG9uRHJhZ0xlYXZlID8gY29tcG9zZUV2ZW50SGFuZGxlcnMob25EcmFnTGVhdmUsIHRoaXMub25EcmFnTGVhdmUpIDogdGhpcy5vbkRyYWdMZWF2ZVxuICAgICksXG4gICAgb25Ecm9wOiB0aGlzLmNvbXBvc2VIYW5kbGVyKG9uRHJvcCA/IGNvbXBvc2VFdmVudEhhbmRsZXJzKG9uRHJvcCwgdGhpcy5vbkRyb3ApIDogdGhpcy5vbkRyb3ApLFxuICAgIFtyZWZLZXldOiB0aGlzLnNldE5vZGVSZWYsXG4gICAgdGFiSW5kZXg6IHRoaXMucHJvcHMuZGlzYWJsZWQgPyAtMSA6IDAsXG4gICAgLi4ucmVzdFxuICB9KVxuXG4gIGdldElucHV0UHJvcHMgPSAoeyByZWZLZXkgPSAncmVmJywgb25DaGFuZ2UsIG9uQ2xpY2ssIC4uLnJlc3QgfSA9IHt9KSA9PiB7XG4gICAgY29uc3QgeyBhY2NlcHQsIG11bHRpcGxlLCBuYW1lIH0gPSB0aGlzLnByb3BzXG4gICAgY29uc3QgaW5wdXRQcm9wcyA9IHtcbiAgICAgIGFjY2VwdCxcbiAgICAgIHR5cGU6ICdmaWxlJyxcbiAgICAgIHN0eWxlOiB7IGRpc3BsYXk6ICdub25lJyB9LFxuICAgICAgbXVsdGlwbGU6IHN1cHBvcnRNdWx0aXBsZSAmJiBtdWx0aXBsZSxcbiAgICAgIG9uQ2hhbmdlOiBjb21wb3NlRXZlbnRIYW5kbGVycyhvbkNoYW5nZSwgdGhpcy5vbkRyb3ApLFxuICAgICAgb25DbGljazogY29tcG9zZUV2ZW50SGFuZGxlcnMob25DbGljaywgdGhpcy5vbklucHV0RWxlbWVudENsaWNrKSxcbiAgICAgIGF1dG9Db21wbGV0ZTogJ29mZicsXG4gICAgICB0YWJJbmRleDogLTEsXG4gICAgICBbcmVmS2V5XTogdGhpcy5zZXRJbnB1dFJlZlxuICAgIH1cbiAgICBpZiAobmFtZSAmJiBuYW1lLmxlbmd0aCkge1xuICAgICAgaW5wdXRQcm9wcy5uYW1lID0gbmFtZVxuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgLi4uaW5wdXRQcm9wcyxcbiAgICAgIC4uLnJlc3RcbiAgICB9XG4gIH1cblxuICBzZXROb2RlUmVmID0gbm9kZSA9PiB7XG4gICAgdGhpcy5ub2RlID0gbm9kZVxuICB9XG5cbiAgc2V0SW5wdXRSZWYgPSBpbnB1dCA9PiB7XG4gICAgdGhpcy5pbnB1dCA9IGlucHV0XG4gIH1cblxuICAvKipcbiAgICogT3BlbiBzeXN0ZW0gZmlsZSB1cGxvYWQgZGlhbG9nLlxuICAgKlxuICAgKiBAcHVibGljXG4gICAqL1xuICBvcGVuID0gKCkgPT4ge1xuICAgIHRoaXMuaXNGaWxlRGlhbG9nQWN0aXZlID0gdHJ1ZVxuICAgIGlmICh0aGlzLmlucHV0KSB7XG4gICAgICB0aGlzLmlucHV0LnZhbHVlID0gbnVsbFxuICAgICAgdGhpcy5pbnB1dC5jbGljaygpXG4gICAgfVxuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHsgY2hpbGRyZW4sIG11bHRpcGxlLCBkaXNhYmxlZCB9ID0gdGhpcy5wcm9wc1xuICAgIGNvbnN0IHsgaXNEcmFnQWN0aXZlLCBpc0ZvY3VzZWQsIGRyYWdnZWRGaWxlcywgYWNjZXB0ZWRGaWxlcywgcmVqZWN0ZWRGaWxlcyB9ID0gdGhpcy5zdGF0ZVxuXG4gICAgY29uc3QgZmlsZXNDb3VudCA9IGRyYWdnZWRGaWxlcy5sZW5ndGhcbiAgICBjb25zdCBpc011bHRpcGxlQWxsb3dlZCA9IG11bHRpcGxlIHx8IGZpbGVzQ291bnQgPD0gMVxuICAgIGNvbnN0IGlzRHJhZ0FjY2VwdCA9IGZpbGVzQ291bnQgPiAwICYmIGFsbEZpbGVzQWNjZXB0ZWQoZHJhZ2dlZEZpbGVzLCB0aGlzLnByb3BzLmFjY2VwdClcbiAgICBjb25zdCBpc0RyYWdSZWplY3QgPSBmaWxlc0NvdW50ID4gMCAmJiAoIWlzRHJhZ0FjY2VwdCB8fCAhaXNNdWx0aXBsZUFsbG93ZWQpXG5cbiAgICByZXR1cm4gY2hpbGRyZW4oe1xuICAgICAgaXNEcmFnQWN0aXZlLFxuICAgICAgaXNEcmFnQWNjZXB0LFxuICAgICAgaXNEcmFnUmVqZWN0LFxuICAgICAgZHJhZ2dlZEZpbGVzLFxuICAgICAgYWNjZXB0ZWRGaWxlcyxcbiAgICAgIHJlamVjdGVkRmlsZXMsXG4gICAgICBpc0ZvY3VzZWQ6IGlzRm9jdXNlZCAmJiAhZGlzYWJsZWQsXG4gICAgICBnZXRSb290UHJvcHM6IHRoaXMuZ2V0Um9vdFByb3BzLFxuICAgICAgZ2V0SW5wdXRQcm9wczogdGhpcy5nZXRJbnB1dFByb3BzLFxuICAgICAgb3BlbjogdGhpcy5vcGVuXG4gICAgfSlcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBEcm9wem9uZVxuXG5Ecm9wem9uZS5wcm9wVHlwZXMgPSB7XG4gIC8qKlxuICAgKiBBbGxvdyBzcGVjaWZpYyB0eXBlcyBvZiBmaWxlcy4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9va29uZXQvYXR0ci1hY2NlcHQgZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gICAqIEtlZXAgaW4gbWluZCB0aGF0IG1pbWUgdHlwZSBkZXRlcm1pbmF0aW9uIGlzIG5vdCByZWxpYWJsZSBhY3Jvc3MgcGxhdGZvcm1zLiBDU1YgZmlsZXMsXG4gICAqIGZvciBleGFtcGxlLCBhcmUgcmVwb3J0ZWQgYXMgdGV4dC9wbGFpbiB1bmRlciBtYWNPUyBidXQgYXMgYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsIHVuZGVyXG4gICAqIFdpbmRvd3MuIEluIHNvbWUgY2FzZXMgdGhlcmUgbWlnaHQgbm90IGJlIGEgbWltZSB0eXBlIHNldCBhdCBhbGwuXG4gICAqIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL3JlYWN0LWRyb3B6b25lL3JlYWN0LWRyb3B6b25lL2lzc3Vlcy8yNzZcbiAgICovXG4gIGFjY2VwdDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLnN0cmluZyldKSxcblxuICAvKipcbiAgICogUmVuZGVyIGZ1bmN0aW9uIHRoYXQgcmVuZGVycyB0aGUgYWN0dWFsIGNvbXBvbmVudFxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gcHJvcHNcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gcHJvcHMuZ2V0Um9vdFByb3BzIFJldHVybnMgdGhlIHByb3BzIHlvdSBzaG91bGQgYXBwbHkgdG8gdGhlIHJvb3QgZHJvcCBjb250YWluZXIgeW91IHJlbmRlclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBwcm9wcy5nZXRJbnB1dFByb3BzIFJldHVybnMgdGhlIHByb3BzIHlvdSBzaG91bGQgYXBwbHkgdG8gaGlkZGVuIGZpbGUgaW5wdXQgeW91IHJlbmRlclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBwcm9wcy5vcGVuIE9wZW4gdGhlIG5hdGl2ZSBmaWxlIHNlbGVjdGlvbiBkaWFsb2dcbiAgICogQHBhcmFtIHtCb29sZWFufSBwcm9wcy5pc0ZvY3VzZWQgRHJvcHpvbmUgYXJlYSBpcyBpbiBmb2N1c1xuICAgKiBAcGFyYW0ge0Jvb2xlYW59IHByb3BzLmlzRHJhZ0FjdGl2ZSBBY3RpdmUgZHJhZyBpcyBpbiBwcm9ncmVzc1xuICAgKiBAcGFyYW0ge0Jvb2xlYW59IHByb3BzLmlzRHJhZ0FjY2VwdCBEcmFnZ2VkIGZpbGVzIGFyZSBhY2NlcHRlZFxuICAgKiBAcGFyYW0ge0Jvb2xlYW59IHByb3BzLmlzRHJhZ1JlamVjdCBTb21lIGRyYWdnZWQgZmlsZXMgYXJlIHJlamVjdGVkXG4gICAqIEBwYXJhbSB7QXJyYXl9IHByb3BzLmRyYWdnZWRGaWxlcyBGaWxlcyBpbiBhY3RpdmUgZHJhZ1xuICAgKiBAcGFyYW0ge0FycmF5fSBwcm9wcy5hY2NlcHRlZEZpbGVzIEFjY2VwdGVkIGZpbGVzXG4gICAqIEBwYXJhbSB7QXJyYXl9IHByb3BzLnJlamVjdGVkRmlsZXMgUmVqZWN0ZWQgZmlsZXNcbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogRGlzYWxsb3cgY2xpY2tpbmcgb24gdGhlIGRyb3B6b25lIGNvbnRhaW5lciB0byBvcGVuIGZpbGUgZGlhbG9nXG4gICAqIEBkZXByZWNhdGVkIFVzZSBvbkNsaWNrPXtldnQgPT4gZXZ0LnByZXZlbnREZWZhdWx0KCl9IHRvIHByZXZlbnQgdGhlIGRlZmF1bHQgYmVoYXZpb3VyIChvcGVuIHRoZSBmaWxlIHNlbGVjdCBkaWFsb2cpLlxuICAgKiBUaGlzIHByb3Agd2lsbCBiZSByZW1vdmVkIGluIHRoZSBuZXh0IG1ham9yIHZlcnNpb24uXG4gICAqL1xuICBkaXNhYmxlQ2xpY2s6IGRlcHJlY2F0ZWQoXG4gICAgUHJvcFR5cGVzLmJvb2wsXG4gICAgJ1VzZSBvbkNsaWNrPXtldnQgPT4gZXZ0LnByZXZlbnREZWZhdWx0KCl9IGluc3RlYWQuIFRoaXMgcHJvcCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5leHQgbWFqb3IgdmVyc2lvbidcbiAgKSxcblxuICAvKipcbiAgICogRW5hYmxlL2Rpc2FibGUgdGhlIGRyb3B6b25lIGVudGlyZWx5XG4gICAqL1xuICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIElmIGZhbHNlLCBhbGxvdyBkcm9wcGVkIGl0ZW1zIHRvIHRha2Ugb3ZlciB0aGUgY3VycmVudCBicm93c2VyIHdpbmRvd1xuICAgKi9cbiAgcHJldmVudERyb3BPbkRvY3VtZW50OiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogQWxsb3cgZHJvcHBpbmcgbXVsdGlwbGUgZmlsZXNcbiAgICovXG4gIG11bHRpcGxlOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogYG5hbWVgIGF0dHJpYnV0ZSBmb3IgdGhlIGlucHV0IHRhZ1xuICAgKi9cbiAgbmFtZTogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICogTWF4aW11bSBmaWxlIHNpemUgKGluIGJ5dGVzKVxuICAgKi9cbiAgbWF4U2l6ZTogUHJvcFR5cGVzLm51bWJlcixcblxuICAvKipcbiAgICogTWluaW11bSBmaWxlIHNpemUgKGluIGJ5dGVzKVxuICAgKi9cbiAgbWluU2l6ZTogUHJvcFR5cGVzLm51bWJlcixcblxuICAvKipcbiAgICogZ2V0RGF0YVRyYW5zZmVySXRlbXMgaGFuZGxlclxuICAgKiBAcGFyYW0ge0V2ZW50fSBldmVudFxuICAgKiBAcmV0dXJucyB7QXJyYXl9IGFycmF5IG9mIEZpbGUgb2JqZWN0c1xuICAgKi9cbiAgZ2V0RGF0YVRyYW5zZmVySXRlbXM6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBvbkNsaWNrIGNhbGxiYWNrXG4gICAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50XG4gICAqL1xuICBvbkNsaWNrOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogb25Gb2N1cyBjYWxsYmFja1xuICAgKi9cbiAgb25Gb2N1czogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIG9uQmx1ciBjYWxsYmFja1xuICAgKi9cbiAgb25CbHVyOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogb25LZXlEb3duIGNhbGxiYWNrXG4gICAqL1xuICBvbktleURvd246IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBUaGUgYG9uRHJvcGAgbWV0aG9kIHRoYXQgYWNjZXB0cyB0d28gYXJndW1lbnRzLlxuICAgKiBUaGUgZmlyc3QgYXJndW1lbnQgcmVwcmVzZW50cyB0aGUgYWNjZXB0ZWQgZmlsZXMgYW5kIHRoZSBzZWNvbmQgYXJndW1lbnQgdGhlIHJlamVjdGVkIGZpbGVzLlxuICAgKlxuICAgKiBgYGBqYXZhc2NyaXB0XG4gICAqIGZ1bmN0aW9uIG9uRHJvcChhY2NlcHRlZEZpbGVzLCByZWplY3RlZEZpbGVzKSB7XG4gICAqICAgLy8gZG8gc3R1ZmYgd2l0aCBmaWxlcy4uLlxuICAgKiB9XG4gICAqIGBgYFxuICAgKlxuICAgKiBGaWxlcyBhcmUgYWNjZXB0ZWQgb3IgcmVqZWN0ZWQgYmFzZWQgb24gdGhlIGBhY2NlcHRgIHByb3AuXG4gICAqIFRoaXMgbXVzdCBiZSBhIHZhbGlkIFtNSU1FIHR5cGVdKGh0dHA6Ly93d3cuaWFuYS5vcmcvYXNzaWdubWVudHMvbWVkaWEtdHlwZXMvbWVkaWEtdHlwZXMueGh0bWwpIGFjY29yZGluZyB0byBbaW5wdXQgZWxlbWVudCBzcGVjaWZpY2F0aW9uXShodHRwczovL3d3dy53My5vcmcvd2lraS9IVE1ML0VsZW1lbnRzL2lucHV0L2ZpbGUpIG9yIGEgdmFsaWQgZmlsZSBleHRlbnNpb24uXG4gICAqXG4gICAqIE5vdGUgdGhhdCB0aGUgYG9uRHJvcGAgY2FsbGJhY2sgd2lsbCBhbHdheXMgYmUgY2FsbGVkIHJlZ2FyZGxlc3MgaWYgdGhlIGRyb3BwZWQgZmlsZXMgd2VyZSBhY2NlcHRlZCBvciByZWplY3RlZC5cbiAgICogWW91IGNhbiB1c2UgdGhlIGBvbkRyb3BBY2NlcHRlZGAvYG9uRHJvcFJlamVjdGVkYCBwcm9wcyBpZiB5b3UnZCBsaWtlIHRvIHJlYWN0IHRvIGEgc3BlY2lmaWMgZXZlbnQgaW5zdGVhZCBvZiB0aGUgYG9uRHJvcGAgcHJvcC5cbiAgICpcbiAgICogVGhlIGBvbkRyb3BgIGNhbGxiYWNrIHdpbGwgcHJvdmlkZSB5b3Ugd2l0aCBhbiBhcnJheSBvZiBbRmlsZXNdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9GaWxlKSB3aGljaCB5b3UgY2FuIHRoZW4gcHJvY2VzcyBhbmQgc2VuZCB0byBhIHNlcnZlci5cbiAgICogRm9yIGV4YW1wbGUsIHdpdGggW1N1cGVyQWdlbnRdKGh0dHBzOi8vZ2l0aHViLmNvbS92aXNpb25tZWRpYS9zdXBlcmFnZW50KSBhcyBhIGh0dHAvYWpheCBsaWJyYXJ5OlxuICAgKlxuICAgKiBgYGBqYXZhc2NyaXB0XG4gICAqIGZ1bmN0aW9uIG9uRHJvcChhY2NlcHRlZEZpbGVzKSB7XG4gICAqICAgY29uc3QgcmVxID0gcmVxdWVzdC5wb3N0KCcvdXBsb2FkJylcbiAgICogICBhY2NlcHRlZEZpbGVzLmZvckVhY2goZmlsZSA9PiB7XG4gICAqICAgICByZXEuYXR0YWNoKGZpbGUubmFtZSwgZmlsZSlcbiAgICogICB9KVxuICAgKiAgIHJlcS5lbmQoY2FsbGJhY2spXG4gICAqIH1cbiAgICogYGBgXG4gICAqL1xuICBvbkRyb3A6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBvbkRyb3BBY2NlcHRlZCBjYWxsYmFja1xuICAgKi9cbiAgb25Ecm9wQWNjZXB0ZWQ6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBvbkRyb3BSZWplY3RlZCBjYWxsYmFja1xuICAgKi9cbiAgb25Ecm9wUmVqZWN0ZWQ6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBvbkRyYWdTdGFydCBjYWxsYmFja1xuICAgKi9cbiAgb25EcmFnU3RhcnQ6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBvbkRyYWdFbnRlciBjYWxsYmFja1xuICAgKi9cbiAgb25EcmFnRW50ZXI6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBvbkRyYWdPdmVyIGNhbGxiYWNrXG4gICAqL1xuICBvbkRyYWdPdmVyOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogb25EcmFnTGVhdmUgY2FsbGJhY2tcbiAgICovXG4gIG9uRHJhZ0xlYXZlOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogUHJvdmlkZSBhIGNhbGxiYWNrIG9uIGNsaWNraW5nIHRoZSBjYW5jZWwgYnV0dG9uIG9mIHRoZSBmaWxlIGRpYWxvZ1xuICAgKi9cbiAgb25GaWxlRGlhbG9nQ2FuY2VsOiBQcm9wVHlwZXMuZnVuY1xufVxuXG5Ecm9wem9uZS5kZWZhdWx0UHJvcHMgPSB7XG4gIHByZXZlbnREcm9wT25Eb2N1bWVudDogdHJ1ZSxcbiAgZGlzYWJsZWQ6IGZhbHNlLFxuICBkaXNhYmxlQ2xpY2s6IGZhbHNlLFxuICBtdWx0aXBsZTogdHJ1ZSxcbiAgbWF4U2l6ZTogSW5maW5pdHksXG4gIG1pblNpemU6IDAsXG4gIGdldERhdGFUcmFuc2Zlckl0ZW1zOiBmcm9tRXZlbnRcbn1cbiJdLCJuYW1lcyI6WyJfX2F3YWl0ZXIiLCJ0aGlzQXJnIiwiX2FyZ3VtZW50cyIsIlAiLCJnZW5lcmF0b3IiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsImZ1bGZpbGxlZCIsInZhbHVlIiwic3RlcCIsIm5leHQiLCJlIiwicmVqZWN0ZWQiLCJyZXN1bHQiLCJkb25lIiwidGhlbiIsImFwcGx5IiwiX19nZW5lcmF0b3IiLCJib2R5IiwiZiIsInkiLCJ0IiwiZyIsIl8iLCJsYWJlbCIsInNlbnQiLCJ0cnlzIiwib3BzIiwidmVyYiIsInRocm93IiwicmV0dXJuIiwiU3ltYm9sIiwiaXRlcmF0b3IiLCJ0aGlzIiwibiIsInYiLCJvcCIsIlR5cGVFcnJvciIsImNhbGwiLCJwb3AiLCJsZW5ndGgiLCJwdXNoIiwiX19yZWFkIiwibyIsIm0iLCJyIiwiaSIsImFyIiwiZXJyb3IiLCJDT01NT05fTUlNRV9UWVBFUyIsIk1hcCIsInRvRmlsZVdpdGhQYXRoIiwiZmlsZSIsInBhdGgiLCJuYW1lIiwibGFzdEluZGV4T2YiLCJ0eXBlIiwiZXh0Iiwic3BsaXQiLCJ0b0xvd2VyQ2FzZSIsImdldCIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5Iiwid3JpdGFibGUiLCJjb25maWd1cmFibGUiLCJ3aXRoTWltZVR5cGUiLCJGSUxFU19UT19JR05PUkUiLCJmcm9tRGF0YVRyYW5zZmVySXRlbSIsIml0ZW0iLCJnZXRBc0ZpbGUiLCJmd3AiLCJmcm9tRW50cnkiLCJlbnRyeSIsInRzbGliXzEuX19hd2FpdGVyIiwidHNsaWJfMS5fX2dlbmVyYXRvciIsIl9hIiwiaXNEaXJlY3RvcnkiLCJmcm9tRGlyRW50cnkiLCJmdWxsUGF0aCIsImVyciIsImZyb21GaWxlRW50cnkiLCJyZWFkZXIiLCJjcmVhdGVSZWFkZXIiLCJlbnRyaWVzIiwicmVhZEVudHJpZXMiLCJfdGhpcyIsImJhdGNoIiwiZmlsZXMiLCJlcnJfMSIsIml0ZW1zIiwiYWxsIiwibWFwIiwid2FybmluZyIsInByb2Nlc3MiLCJlbnYiLCJOT0RFX0VOViIsImNvbmRpdGlvbiIsImZvcm1hdCIsImFyZ3MiLCJsZW4iLCJhcmd1bWVudHMiLCJBcnJheSIsImtleSIsInVuZGVmaW5lZCIsIkVycm9yIiwidGVzdCIsImFyZ0luZGV4IiwibWVzc2FnZSIsInJlcGxhY2UiLCJjb25zb2xlIiwieCIsImV4cG9ydHMiLCJkZXByZWNhdGVkIiwib2JqIiwiX3dhcm5pbmcyIiwiX3dhcm5pbmciLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCIsIndhcm5lZCIsInZhbGlkYXRvciIsInJlYXNvbiIsInByb3BzIiwicHJvcE5hbWUiLCJjb21wb25lbnROYW1lIiwibG9jYXRpb24iLCJwcm9wRnVsbE5hbWUiLCJjb21wb25lbnROYW1lU2FmZSIsInByb3BGdWxsTmFtZVNhZmUiLCJtZXNzYWdlS2V5IiwiX2xlbiIsIl9rZXkiLCJjb25jYXQiLCJfcmVzZXRXYXJuZWQiLCJtb2R1bGUiLCJsIiwiYyIsImQiLCJlbnVtZXJhYmxlIiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJwIiwicyIsIndpbmRvdyIsIk1hdGgiLCJzZWxmIiwiRnVuY3Rpb24iLCJfX2ciLCJ2ZXJzaW9uIiwiX19lIiwiYSIsInRvU3RyaW5nIiwic2xpY2UiLCJ1Iiwic3RvcmUiLCJGIiwiRyIsImgiLCJTIiwiQiIsImIiLCJVIiwiY29yZSIsIlciLCJSIiwicmFuZG9tIiwibWluIiwiaXNBcnJheSIsInNvbWUiLCJ0cmltIiwiY2hhckF0IiwiZW5kc1dpdGgiLCJkb2N1bWVudCIsImNyZWF0ZUVsZW1lbnQiLCJ2YWx1ZU9mIiwiaW5zcGVjdFNvdXJjZSIsImpvaW4iLCJTdHJpbmciLCJ3IiwicHJvcGVydHlJc0VudW1lcmFibGUiLCJjZWlsIiwiZmxvb3IiLCJpc05hTiIsImNvbnN0cnVjdG9yIiwic3VwcG9ydE11bHRpcGxlIiwiZmlsZUFjY2VwdGVkIiwiYWNjZXB0IiwiYWNjZXB0cyIsImlzUHJvcGFnYXRpb25TdG9wcGVkIiwiZXZ0IiwiY2FuY2VsQnViYmxlIiwiaXNEZWZhdWx0UHJldmVudGVkIiwiZGVmYXVsdFByZXZlbnRlZCIsImlzRHJhZ0RhdGFXaXRoRmlsZXMiLCJkYXRhVHJhbnNmZXIiLCJ0eXBlcyIsIm9uRG9jdW1lbnREcmFnT3ZlciIsInByZXZlbnREZWZhdWx0IiwiY29tcG9zZUV2ZW50SGFuZGxlcnMiLCJmbnMiLCJldmVudCIsImZuIiwiRHJvcHpvbmUiLCJzdGF0ZSIsImlzRmlsZURpYWxvZ0FjdGl2ZSIsIm9uRG9jdW1lbnREcm9wIiwibm9kZSIsImNvbnRhaW5zIiwidGFyZ2V0IiwiZHJhZ1RhcmdldHMiLCJvbkRyYWdTdGFydCIsInBlcnNpc3QiLCJvbkRyYWdFbnRlciIsImluZGV4T2YiLCJnZXREYXRhVHJhbnNmZXJJdGVtcyIsInNldFN0YXRlIiwib25EcmFnT3ZlciIsImRyb3BFZmZlY3QiLCJvbkRyYWdMZWF2ZSIsImZpbHRlciIsImVsIiwib25Ecm9wIiwib25Ecm9wQWNjZXB0ZWQiLCJvbkRyb3BSZWplY3RlZCIsIm11bHRpcGxlIiwiZHJhZ2dlZEZpbGVzIiwiYWNjZXB0ZWRGaWxlcyIsInJlamVjdGVkRmlsZXMiLCJmb3JFYWNoIiwibWF4U2l6ZSIsIm1pblNpemUiLCJzaXplIiwiZmlsZU1hdGNoU2l6ZSIsInNwbGljZSIsIm9uQ2xpY2siLCJkaXNhYmxlQ2xpY2siLCJzdG9wUHJvcGFnYXRpb24iLCJ1c2VyQWdlbnQiLCJuYXZpZ2F0b3IiLCJpc0llIiwiaXNFZGdlIiwiaXNJZU9yRWRnZSIsIm9wZW4iLCJvbklucHV0RWxlbWVudENsaWNrIiwib25GaWxlRGlhbG9nQ2FuY2VsIiwiaW5wdXQiLCJvbkZvY3VzIiwiaXNGb2N1c2VkIiwib25CbHVyIiwib25LZXlEb3duIiwiaXNFcXVhbE5vZGUiLCJrZXlDb2RlIiwiY29tcG9zZUhhbmRsZXIiLCJkaXNhYmxlZCIsImhhbmRsZXIiLCJnZXRSb290UHJvcHMiLCJyZWZLZXkiLCJyZXN0Iiwic2V0Tm9kZVJlZiIsImdldElucHV0UHJvcHMiLCJvbkNoYW5nZSIsImlucHV0UHJvcHMiLCJkaXNwbGF5Iiwic2V0SW5wdXRSZWYiLCJjbGljayIsIlJlYWN0IiwiQ29tcG9uZW50IiwicHJldmVudERyb3BPbkRvY3VtZW50IiwiYWRkRXZlbnRMaXN0ZW5lciIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJjaGlsZHJlbiIsImlzRHJhZ0FjdGl2ZSIsImZpbGVzQ291bnQiLCJpc011bHRpcGxlQWxsb3dlZCIsImlzRHJhZ0FjY2VwdCIsImV2ZXJ5IiwicHJvcFR5cGVzIiwiUHJvcFR5cGVzIiwib25lT2ZUeXBlIiwic3RyaW5nIiwiYXJyYXlPZiIsImZ1bmMiLCJib29sIiwibnVtYmVyIiwiZGVmYXVsdFByb3BzIiwiSW5maW5pdHkiLCJkdCIsImZyb20iLCJraW5kIiwid2Via2l0R2V0QXNFbnRyeSIsInRvRmlsZVByb21pc2VzIiwiZmxhdHRlbiIsInJlZHVjZSIsImFjYyIsInRzbGliXzEuX19zcHJlYWQiLCJpbmNsdWRlcyIsImdldERhdGFUcmFuc2ZlckZpbGVzIiwiZ2V0SW5wdXRGaWxlcyJdLCJtYXBwaW5ncyI6InVRQWlFTyxTQUFTQSxFQUFVQyxFQUFTQyxFQUFZQyxFQUFHQyxHQUM5QyxPQUFPLElBQUtELElBQU1BLEVBQUlFLFVBQVUsU0FBVUMsRUFBU0MsR0FDL0MsU0FBU0MsRUFBVUMsR0FBUyxJQUFNQyxFQUFLTixFQUFVTyxLQUFLRixJQUFXLE1BQU9HLEdBQUtMLEVBQU9LLElBQ3BGLFNBQVNDLEVBQVNKLEdBQVMsSUFBTUMsRUFBS04sRUFBaUIsTUFBRUssSUFBVyxNQUFPRyxHQUFLTCxFQUFPSyxJQUN2RixTQUFTRixFQUFLSSxHQUFVQSxFQUFPQyxLQUFPVCxFQUFRUSxFQUFPTCxPQUFTLElBQUlOLEVBQUUsU0FBVUcsR0FBV0EsRUFBUVEsRUFBT0wsU0FBV08sS0FBS1IsRUFBV0ssR0FDbklILEdBQU1OLEVBQVlBLEVBQVVhLE1BQU1oQixFQUFTQyxRQUFtQlMsVUFJL0QsU0FBU08sRUFBWWpCLEVBQVNrQixHQUNqQyxJQUFzR0MsRUFBR0MsRUFBR0MsRUFBR0MsRUFBM0dDLEdBQU1DLE1BQU8sRUFBR0MsS0FBTSxXQUFhLEdBQVcsRUFBUEosRUFBRSxHQUFRLE1BQU1BLEVBQUUsR0FBSSxPQUFPQSxFQUFFLElBQU9LLFFBQVVDLFFBQzNGLE9BQU9MLEdBQU1aLEtBQU1rQixFQUFLLEdBQUlDLE1BQVNELEVBQUssR0FBSUUsT0FBVUYsRUFBSyxJQUF3QixtQkFBWEcsU0FBMEJULEVBQUVTLE9BQU9DLFVBQVksV0FBYSxPQUFPQyxPQUFVWCxFQUN2SixTQUFTTSxFQUFLTSxHQUFLLE9BQU8sU0FBVUMsR0FBSyxPQUN6QyxTQUFjQyxHQUNWLEdBQUlqQixFQUFHLE1BQU0sSUFBSWtCLFVBQVUsbUNBQzNCLEtBQU9kLEdBQUcsSUFDTixHQUFJSixFQUFJLEVBQUdDLElBQU1DLEVBQVksRUFBUmUsRUFBRyxHQUFTaEIsRUFBVSxPQUFJZ0IsRUFBRyxHQUFLaEIsRUFBUyxTQUFPQyxFQUFJRCxFQUFVLFNBQU1DLEVBQUVpQixLQUFLbEIsR0FBSSxHQUFLQSxFQUFFVixTQUFXVyxFQUFJQSxFQUFFaUIsS0FBS2xCLEVBQUdnQixFQUFHLEtBQUt0QixLQUFNLE9BQU9PLEVBRTNKLE9BRElELEVBQUksRUFBR0MsSUFBR2UsR0FBYyxFQUFSQSxFQUFHLEdBQVFmLEVBQUViLFFBQ3pCNEIsRUFBRyxJQUNQLEtBQUssRUFBRyxLQUFLLEVBQUdmLEVBQUllLEVBQUksTUFDeEIsS0FBSyxFQUFjLE9BQVhiLEVBQUVDLFNBQWtCaEIsTUFBTzRCLEVBQUcsR0FBSXRCLE1BQU0sR0FDaEQsS0FBSyxFQUFHUyxFQUFFQyxRQUFTSixFQUFJZ0IsRUFBRyxHQUFJQSxHQUFNLEdBQUksU0FDeEMsS0FBSyxFQUFHQSxFQUFLYixFQUFFSSxJQUFJWSxNQUFPaEIsRUFBRUcsS0FBS2EsTUFBTyxTQUN4QyxRQUNJLEtBQWtCbEIsR0FBWkEsRUFBSUUsRUFBRUcsTUFBWWMsT0FBUyxHQUFLbkIsRUFBRUEsRUFBRW1CLE9BQVMsTUFBa0IsSUFBVkosRUFBRyxJQUFzQixJQUFWQSxFQUFHLElBQVcsQ0FBRWIsRUFBSSxFQUFHLFNBQ2pHLEdBQWMsSUFBVmEsRUFBRyxNQUFjZixHQUFNZSxFQUFHLEdBQUtmLEVBQUUsSUFBTWUsRUFBRyxHQUFLZixFQUFFLElBQU0sQ0FBRUUsRUFBRUMsTUFBUVksRUFBRyxHQUFJLE1BQzlFLEdBQWMsSUFBVkEsRUFBRyxJQUFZYixFQUFFQyxNQUFRSCxFQUFFLEdBQUksQ0FBRUUsRUFBRUMsTUFBUUgsRUFBRSxHQUFJQSxFQUFJZSxFQUFJLE1BQzdELEdBQUlmLEdBQUtFLEVBQUVDLE1BQVFILEVBQUUsR0FBSSxDQUFFRSxFQUFFQyxNQUFRSCxFQUFFLEdBQUlFLEVBQUVJLElBQUljLEtBQUtMLEdBQUssTUFDdkRmLEVBQUUsSUFBSUUsRUFBRUksSUFBSVksTUFDaEJoQixFQUFFRyxLQUFLYSxNQUFPLFNBRXRCSCxFQUFLbEIsRUFBS29CLEtBQUt0QyxFQUFTdUIsR0FDMUIsTUFBT1osR0FBS3lCLEdBQU0sRUFBR3pCLEdBQUlTLEVBQUksVUFBZUQsRUFBSUUsRUFBSSxFQUN0RCxHQUFZLEVBQVJlLEVBQUcsR0FBUSxNQUFNQSxFQUFHLEdBQUksT0FBUzVCLE1BQU80QixFQUFHLEdBQUtBLEVBQUcsUUFBSyxFQUFRdEIsTUFBTSxHQXJCOUJMLEVBQU15QixFQUFHQyxNQXdDdEQsU0FBU08sRUFBT0MsRUFBR1QsR0FDdEIsSUFBSVUsRUFBc0IsbUJBQVhiLFFBQXlCWSxFQUFFWixPQUFPQyxVQUNqRCxJQUFLWSxFQUFHLE9BQU9ELEVBQ2YsSUFBbUJFLEVBQVlsQyxFQUEzQm1DLEVBQUlGLEVBQUVOLEtBQUtLLEdBQU9JLEtBQ3RCLElBQ0ksV0FBYyxJQUFOYixHQUFnQkEsS0FBTSxNQUFRVyxFQUFJQyxFQUFFcEMsUUFBUUksTUFBTWlDLEVBQUdOLEtBQUtJLEVBQUVyQyxPQUV4RSxNQUFPd0MsR0FBU3JDLEdBQU1xQyxNQUFPQSxXQUV6QixJQUNRSCxJQUFNQSxFQUFFL0IsT0FBUzhCLEVBQUlFLEVBQVUsU0FBSUYsRUFBRU4sS0FBS1EsV0FFeEMsR0FBSW5DLEVBQUcsTUFBTUEsRUFBRXFDLE9BRTdCLE9BQU9ELDRGQ25JSixJQUFJRSxFQUFvQixJQUFJQyxNQUM5QixNQUFPLGNBQ1AsTUFBTyxjQUNQLE1BQU8saUJBQ1AsT0FBUSxlQUNSLE1BQU8sZUFDUCxNQUFPLHFCQUNQLE1BQU8sb0JBQ1AsTUFBTyxjQUNQLE1BQU8sb0JBQ1AsTUFBTyxjQUNQLE1BQU8sb0JBQ1AsTUFBTyx1QkFDUCxPQUFRLDZFQUVOLFNBQVNDLEVBQWVDLEVBQU1DLEdBQ2pDLElBQUlsQyxFQVFSLFNBQXNCaUMsR0FDbEIsSUFBSUUsRUFBT0YsRUFBS0UsS0FFaEIsR0FEbUJBLElBQW1DLElBQTNCQSxFQUFLQyxZQUFZLE9BQ3ZCSCxFQUFLSSxLQUFNLENBQzVCLElBQUlDLEVBQU1ILEVBQUtJLE1BQU0sS0FDaEJuQixNQUFNb0IsY0FDUEgsRUFBT1AsRUFBa0JXLElBQUlILEdBQzdCRCxHQUNBSyxPQUFPQyxlQUFlVixFQUFNLFFBQ3hCNUMsTUFBT2dELEVBQ1BPLFVBQVUsRUFDVkMsY0FBYyxJQUkxQixPQUFPWixFQXZCQ2EsQ0FBYWIsR0FNckIsT0FMQVMsT0FBT0MsZUFBZTNDLEVBQUcsUUFDckJYLE1BQXVCLGlCQUFUNkMsRUFBb0JBLEVBQU9ELEVBQUtFLEtBQzlDUyxVQUFVLEVBQ1ZDLGNBQWMsSUFFWDdDLEVDcEJYLElBQUkrQyxHQUNBLFlBQ0EsYUFtRUosU0FBU0MsRUFBcUJDLEdBQzFCLElBQUloQixFQUFPZ0IsRUFBS0MsWUFDaEIsSUFBS2pCLEVBQ0QsT0FBT2hELFFBQVFFLE9BQU84RCxFQUFPLGtCQUVqQyxJQUFJRSxFQUFNbkIsRUFBZUMsR0FDekIsT0FBT2hELFFBQVFDLFFBQVFpRSxHQUczQixTQUFTQyxFQUFVQyxHQUNmLE9BQU9DLEVBQWtCeEMsVUFBTSxPQUFRLEVBQVEsV0FDM0MsT0FBT3lDLEVBQW9CekMsS0FBTSxTQUFVMEMsR0FDdkMsT0FBUSxFQUFjSCxFQUFNSSxZQUFjQyxFQUFhTCxHQWlEbkUsU0FBdUJBLEdBQ25CLE9BQU9DLEVBQWtCeEMsVUFBTSxPQUFRLEVBQVEsV0FDM0MsT0FBT3lDLEVBQW9CekMsS0FBTSxTQUFVMEMsR0FDdkMsT0FBUSxFQUFjLElBQUl2RSxRQUFRLFNBQVVDLEVBQVNDLEdBQzdDa0UsRUFBTXBCLEtBQUssU0FBVUEsR0FDakIsSUFBSWtCLEVBQU1uQixFQUFlQyxFQUFNb0IsRUFBTU0sVUFDckN6RSxFQUFRaUUsSUFDVCxTQUFVUyxHQUNUekUsRUFBT3lFLFlBekQ2Q0MsQ0FBY1IsUUFLMUYsU0FBU0ssRUFBYUwsR0FDbEIsSUFBSVMsRUFBU1QsRUFBTVUsZUFDbkIsT0FBTyxJQUFJOUUsUUFBUSxTQUFVQyxFQUFTQyxHQUNsQyxJQUFJNkUsTUFDSixTQUFTQyxJQUNMLElBQUlDLEVBQVFwRCxLQUdaZ0QsRUFBT0csWUFBWSxTQUFVRSxHQUFTLE9BQU9iLEVBQWtCWSxPQUFPLE9BQVEsRUFBUSxXQUNsRixJQUFJRSxFQUFPQyxFQUFPQyxFQUNsQixPQUFPZixFQUFvQnpDLEtBQU0sU0FBVTBDLEdBQ3ZDLE9BQVFBLEVBQUduRCxPQUNQLEtBQUssRUFDRCxHQUFNOEQsRUFBTTlDLE9BQVEsT0FBUSxFQUFhLEdBQ3pDbUMsRUFBR25ELE1BQVEsRUFDZixLQUFLLEVBRUQsT0FEQW1ELEVBQUdqRCxLQUFLZSxNQUFNLEVBQUcsR0FBSyxLQUNkLEVBQWFyQyxRQUFRc0YsSUFBSVAsSUFDckMsS0FBSyxFQUdELE9BRkFJLEVBQVFaLEVBQUdsRCxPQUNYcEIsRUFBUWtGLElBQ0EsRUFBYSxHQUN6QixLQUFLLEVBR0QsT0FGQUMsRUFBUWIsRUFBR2xELE9BQ1huQixFQUFPa0YsSUFDQyxFQUFhLEdBQ3pCLEtBQUssRUFBRyxPQUFRLEVBQWEsR0FDN0IsS0FBSyxFQUNEQyxFQUFRckYsUUFBUXNGLElBQUlKLEVBQU1LLElBQUlwQixJQUM5QlksRUFBUTFDLEtBQUtnRCxHQUViTCxJQUNBVCxFQUFHbkQsTUFBUSxFQUNmLEtBQUssRUFBRyxPQUFRLFNBR3JCLFNBQVV1RCxHQUNiekUsRUFBT3lFLEtBR2ZLLHNLQzlHUixJQUVJUSxFQUFVLGFBRnlCLGVBQXpCQyxRQUFRQyxJQUFJQyxXQUt4QkgsRUFBVSxTQUFTSSxFQUFXQyxFQUFRQyxHQUNwQyxJQUFJQyxFQUFNQyxVQUFVNUQsT0FDcEIwRCxFQUFPLElBQUlHLE1BQU1GLEVBQU0sRUFBSUEsRUFBTSxFQUFJLEdBQ3JDLElBQUssSUFBSUcsRUFBTSxFQUFHQSxFQUFNSCxFQUFLRyxJQUMzQkosRUFBS0ksRUFBTSxHQUFLRixVQUFVRSxHQUU1QixRQUFlQyxJQUFYTixFQUNGLE1BQU0sSUFBSU8sTUFDUiw2RUFLSixHQUFJUCxFQUFPekQsT0FBUyxJQUFNLFdBQWFpRSxLQUFLUixHQUMxQyxNQUFNLElBQUlPLE1BQ1Isb0hBQzBEUCxHQUk5RCxJQUFLRCxFQUFXLENBQ2QsSUFBSVUsRUFBVyxFQUNYQyxFQUFVLFlBQ1pWLEVBQU9XLFFBQVEsTUFBTyxXQUNwQixPQUFPVixFQUFLUSxPQUVPLG9CQUFaRyxTQUNUQSxRQUFRN0QsTUFBTTJELEdBRWhCLElBR0UsTUFBTSxJQUFJSCxNQUFNRyxHQUNoQixNQUFNRyxRQUtkLE1BQWlCbEIsc0JDM0RqQi9CLE9BQU9DLGVBQWVpRCxFQUFTLGNBQzdCdkcsT0FBTyxJQUVUdUcsVUFBa0JDLEVBSWxCLElBRWdDQyxFQUY1QkMsR0FFNEJELEVBRk9FLElBRWNGLEVBQUlHLFdBQWFILEdBQVFJLFFBQVNKLEdBRXZGLElBQUlLLEtBRUosU0FBU04sRUFBV08sRUFBV0MsR0FDN0IsT0FBTyxTQUFrQkMsRUFBT0MsRUFBVUMsRUFBZUMsRUFBVUMsR0FDakUsSUFBSUMsRUFBb0JILEdBQWlCLGdCQUNyQ0ksRUFBbUJGLEdBQWdCSCxFQUV2QyxHQUF1QixNQUFuQkQsRUFBTUMsR0FBbUIsQ0FDM0IsSUFBSU0sRUFBYUwsRUFBZ0IsSUFBTUQsR0FFdkMsRUFBSVIsRUFBVUcsU0FBU0MsRUFBT1UsR0FBYSxPQUFTSixFQUFXLEtBQU9HLEVBQW1CLFNBQWlCRCxFQUFvQixvQkFBc0JOLEVBQVMsS0FFN0pGLEVBQU9VLElBQWMsRUFHdkIsSUFBSyxJQUFJQyxFQUFPN0IsVUFBVTVELE9BQVEwRCxFQUFPRyxNQUFNNEIsRUFBTyxFQUFJQSxFQUFPLEVBQUksR0FBSUMsRUFBTyxFQUFHQSxFQUFPRCxFQUFNQyxJQUM5RmhDLEVBQUtnQyxFQUFPLEdBQUs5QixVQUFVOEIsR0FHN0IsT0FBT1gsRUFBVXZHLFdBQU11RixHQUFZa0IsRUFBT0MsRUFBVUMsRUFBZUMsRUFBVUMsR0FBY00sT0FBT2pDLEtBU3RHYyxFQUFXb0IsYUFKWCxXQUNFZCxNQU1GZSxVQUFpQnRCLEVBQWlCLDZCQzVDbENzQixVQUFlLFNBQVNoSCxHQUFHLFNBQVNhLEVBQUV2QixHQUFHLEdBQUdrQyxFQUFFbEMsR0FBRyxPQUFPa0MsRUFBRWxDLEdBQUdvRyxRQUFRLElBQUlwRSxFQUFFRSxFQUFFbEMsSUFBSW1DLEVBQUVuQyxFQUFFMkgsR0FBRSxFQUFHdkIsWUFBWSxPQUFPMUYsRUFBRVYsR0FBRzJCLEtBQUtLLEVBQUVvRSxRQUFRcEUsRUFBRUEsRUFBRW9FLFFBQVE3RSxHQUFHUyxFQUFFMkYsR0FBRSxFQUFHM0YsRUFBRW9FLFFBQVEsSUFBSWxFLEtBQUssT0FBT1gsRUFBRVUsRUFBRXZCLEVBQUVhLEVBQUVxRyxFQUFFMUYsRUFBRVgsRUFBRXNHLEVBQUUsU0FBU25ILEVBQUV3QixFQUFFbEMsR0FBR3VCLEVBQUVTLEVBQUV0QixFQUFFd0IsSUFBSWdCLE9BQU9DLGVBQWV6QyxFQUFFd0IsR0FBR21CLGNBQWEsRUFBR3lFLFlBQVcsRUFBRzdFLElBQUlqRCxLQUFLdUIsRUFBRUEsRUFBRSxTQUFTYixHQUFHLElBQUl3QixFQUFFeEIsR0FBR0EsRUFBRStGLFdBQVcsV0FBVyxPQUFPL0YsRUFBRWdHLFNBQVMsV0FBVyxPQUFPaEcsR0FBRyxPQUFPYSxFQUFFc0csRUFBRTNGLEVBQUUsSUFBSUEsR0FBR0EsR0FBR1gsRUFBRVMsRUFBRSxTQUFTdEIsRUFBRWEsR0FBRyxPQUFPMkIsT0FBTzZFLFVBQVVDLGVBQWVyRyxLQUFLakIsRUFBRWEsSUFBSUEsRUFBRTBHLEVBQUUsR0FBRzFHLEVBQUVBLEVBQUUyRyxFQUFFLElBQTljLEVBQW9kLFNBQVN4SCxFQUFFYSxHQUFHLElBQUlXLEVBQUV4QixFQUFFMEYsUUFBUSxvQkFBb0IrQixRQUFRQSxPQUFPQyxNQUFNQSxLQUFLRCxPQUFPLG9CQUFvQkUsTUFBTUEsS0FBS0QsTUFBTUEsS0FBS0MsS0FBS0MsU0FBUyxjQUFUQSxHQUEwQixpQkFBaUJDLE1BQU1BLElBQUlyRyxJQUFJLFNBQVN4QixFQUFFYSxHQUFHYixFQUFFMEYsUUFBUSxTQUFTMUYsR0FBRyxNQUFNLGlCQUFpQkEsRUFBRSxPQUFPQSxFQUFFLG1CQUFtQkEsSUFBSSxTQUFTQSxFQUFFYSxHQUFHLElBQUlXLEVBQUV4QixFQUFFMEYsU0FBU29DLFFBQVEsU0FBUyxpQkFBaUJDLE1BQU1BLElBQUl2RyxJQUFJLFNBQVN4QixFQUFFYSxFQUFFVyxHQUFHeEIsRUFBRTBGLFNBQVNsRSxFQUFFLEVBQUZBLENBQUssV0FBVyxPQUFPLEdBQUdnQixPQUFPQyxrQkFBa0IsS0FBS0YsSUFBSSxXQUFXLE9BQU8sS0FBS3lGLEtBQUssU0FBU2hJLEVBQUVhLEdBQUdiLEVBQUUwRixRQUFRLFNBQVMxRixHQUFHLElBQUksUUFBUUEsSUFBSSxNQUFNQSxHQUFHLE9BQU0sS0FBTSxTQUFTQSxFQUFFYSxHQUFHLElBQUlXLEtBQUt5RyxTQUFTakksRUFBRTBGLFFBQVEsU0FBUzFGLEdBQUcsT0FBT3dCLEVBQUVQLEtBQUtqQixHQUFHa0ksTUFBTSxHQUFHLEtBQUssU0FBU2xJLEVBQUVhLEVBQUVXLEdBQUcsSUFBSWxDLEVBQUVrQyxFQUFFLEdBQUZBLENBQU0sT0FBT0YsRUFBRUUsRUFBRSxHQUFHQyxFQUFFRCxFQUFFLEdBQUdkLE9BQU95SCxFQUFFLG1CQUFtQjFHLEdBQUd6QixFQUFFMEYsUUFBUSxTQUFTMUYsR0FBRyxPQUFPVixFQUFFVSxLQUFLVixFQUFFVSxHQUFHbUksR0FBRzFHLEVBQUV6QixLQUFLbUksRUFBRTFHLEVBQUVILEdBQUcsVUFBVXRCLE1BQU1vSSxNQUFNOUksR0FBRyxTQUFTVSxFQUFFYSxFQUFFVyxHQUFHLElBQUlsQyxFQUFFa0MsRUFBRSxHQUFHRixFQUFFRSxFQUFFLEdBQUdDLEVBQUVELEVBQUUsR0FBRzJHLEVBQUUzRyxFQUFFLElBQUkwRixFQUFFMUYsRUFBRSxJQUFJMUIsRUFBRSxTQUFTRSxFQUFFYSxFQUFFVyxHQUFHLElBQUl3RyxFQUFFUixFQUFFRCxFQUFFTixFQUFFbkcsRUFBRWQsRUFBRUYsRUFBRXVJLEVBQUV0SSxFQUFFQyxFQUFFRixFQUFFd0ksRUFBRUMsRUFBRXZJLEVBQUVGLEVBQUUwSSxFQUFFckIsRUFBRW5ILEVBQUVGLEVBQUVqQixFQUFFNEcsRUFBRXpGLEVBQUVGLEVBQUUySSxFQUFFeEksRUFBRUYsRUFBRVQsRUFBRWlKLEVBQUVqSixFQUFFdUIsS0FBS3ZCLEVBQUV1QixRQUFRdkIsRUFBRXVCLFFBQVF3RyxVQUFVOUYsRUFBRXhCLEVBQUV1QixFQUFFQSxFQUFFVCxLQUFLUyxFQUFFVCxPQUFPNkgsRUFBRW5ILEVBQUU4RixZQUFZOUYsRUFBRThGLGNBQXVCLElBQUlXLEtBQWJqSSxJQUFJeUIsRUFBRVgsR0FBWVcsRUFBeUIrRixJQUF2QkMsR0FBRzFHLEdBQUdiLFFBQUcsSUFBU0EsRUFBRStILElBQVEvSCxFQUFFdUIsR0FBR3dHLEdBQUdmLEVBQUV4QixHQUFHK0IsRUFBRU4sRUFBRUssRUFBRWpJLEdBQUc2SCxHQUFHLG1CQUFtQkksRUFBRUwsRUFBRVUsU0FBUzNHLEtBQUtzRyxHQUFHQSxFQUFFdEgsR0FBR2tJLEVBQUVsSSxFQUFFK0gsRUFBRVQsRUFBRXZILEVBQUVGLEVBQUU2SSxHQUFHcEgsRUFBRXlHLElBQUlULEdBQUc5RixFQUFFRixFQUFFeUcsRUFBRWYsR0FBR0UsR0FBR3VCLEVBQUVWLElBQUlULElBQUltQixFQUFFVixHQUFHVCxJQUFJakksRUFBRXNKLEtBQUt0SCxFQUFFeEIsRUFBRXVJLEVBQUUsRUFBRXZJLEVBQUV3SSxFQUFFLEVBQUV4SSxFQUFFMEksRUFBRSxFQUFFMUksRUFBRWpCLEVBQUUsRUFBRWlCLEVBQUUySSxFQUFFLEdBQUczSSxFQUFFK0ksRUFBRSxHQUFHL0ksRUFBRTZJLEVBQUUsR0FBRzdJLEVBQUVnSixFQUFFLElBQUk5SSxFQUFFMEYsUUFBUTVGLEdBQUcsU0FBU0UsRUFBRWEsRUFBRVcsR0FBRyxJQUFJbEMsRUFBRWtDLEVBQUUsSUFBSUYsRUFBRUUsRUFBRSxJQUFJeEIsRUFBRTBGLFFBQVFsRSxFQUFFLEdBQUcsU0FBU3hCLEVBQUVhLEVBQUVXLEdBQUcsT0FBT2xDLEVBQUVRLEVBQUVFLEVBQUVhLEVBQUVTLEVBQUUsRUFBRUUsS0FBSyxTQUFTeEIsRUFBRWEsRUFBRVcsR0FBRyxPQUFPeEIsRUFBRWEsR0FBR1csRUFBRXhCLElBQUksU0FBU0EsRUFBRWEsR0FBRyxJQUFJVyxFQUFFLEVBQUVsQyxFQUFFb0ksS0FBS3FCLFNBQVMvSSxFQUFFMEYsUUFBUSxTQUFTMUYsR0FBRyxNQUFNLFVBQVU4RyxZQUFPLElBQVM5RyxFQUFFLEdBQUdBLEVBQUUsUUFBUXdCLEVBQUVsQyxHQUFHMkksU0FBUyxPQUFPLFNBQVNqSSxFQUFFYSxFQUFFVyxHQUFHLElBQUlsQyxFQUFFa0MsRUFBRSxJQUFJeEIsRUFBRTBGLFFBQVEsU0FBUzFGLEVBQUVhLEVBQUVXLEdBQUcsR0FBR2xDLEVBQUVVLFFBQUcsSUFBU2EsRUFBRSxPQUFPYixFQUFFLE9BQU93QixHQUFHLEtBQUssRUFBRSxPQUFPLFNBQVNBLEdBQUcsT0FBT3hCLEVBQUVpQixLQUFLSixFQUFFVyxJQUFJLEtBQUssRUFBRSxPQUFPLFNBQVNBLEVBQUVsQyxHQUFHLE9BQU9VLEVBQUVpQixLQUFLSixFQUFFVyxFQUFFbEMsSUFBSSxLQUFLLEVBQUUsT0FBTyxTQUFTa0MsRUFBRWxDLEVBQUVnQyxHQUFHLE9BQU90QixFQUFFaUIsS0FBS0osRUFBRVcsRUFBRWxDLEVBQUVnQyxJQUFJLE9BQU8sV0FBVyxPQUFPdEIsRUFBRUwsTUFBTWtCLEVBQUVrRSxjQUFjLFNBQVMvRSxFQUFFYSxHQUFHYixFQUFFMEYsUUFBUSxTQUFTMUYsR0FBRyxRQUFHLEdBQVFBLEVBQUUsTUFBTWdCLFVBQVUseUJBQXlCaEIsR0FBRyxPQUFPQSxJQUFJLFNBQVNBLEVBQUVhLEVBQUVXLEdBQUcsSUFBSWxDLEVBQUVrQyxFQUFFLElBQUlGLEVBQUVvRyxLQUFLc0IsSUFBSWhKLEVBQUUwRixRQUFRLFNBQVMxRixHQUFHLE9BQU9BLEVBQUUsRUFBRXNCLEVBQUVoQyxFQUFFVSxHQUFHLGtCQUFrQixJQUFJLFNBQVNBLEVBQUVhLEVBQUVXLEdBQUdYLEVBQWVrRixZQUFXLEVBQUdsRixFQUFFbUYsUUFBUSxTQUFTaEcsRUFBRWEsR0FBRyxHQUFHYixHQUFHYSxFQUFFLENBQUMsSUFBSVcsRUFBRXdELE1BQU1pRSxRQUFRcEksR0FBR0EsRUFBRUEsRUFBRXdCLE1BQU0sS0FBSy9DLEVBQUVVLEVBQUVpQyxNQUFNLEdBQUdYLEVBQUV0QixFQUFFbUMsTUFBTSxHQUFHVixFQUFFSCxFQUFFaUUsUUFBUSxRQUFRLElBQUksT0FBTy9ELEVBQUUwSCxLQUFLLFNBQVNsSixHQUFHLElBQUlhLEVBQUViLEVBQUVtSixPQUFPLE1BQU0sTUFBTXRJLEVBQUV1SSxPQUFPLEdBQUc5SixFQUFFZ0QsY0FBYytHLFNBQVN4SSxFQUFFeUIsZUFBZXpCLEVBQUV3SSxTQUFTLE1BQU01SCxJQUFJWixFQUFFMEUsUUFBUSxRQUFRLElBQUlqRSxJQUFJVCxJQUFJLE9BQU0sR0FBSVcsRUFBRSxJQUFJQSxFQUFFLEtBQUssU0FBU3hCLEVBQUVhLEVBQUVXLEdBQUdBLEVBQUUsSUFBSXhCLEVBQUUwRixRQUFRbEUsRUFBRSxHQUFHd0QsTUFBTWtFLE1BQU0sU0FBU2xKLEVBQUVhLEVBQUVXLEdBQUcsSUFBaUJsQyxFQUFFa0MsRUFBRSxHQUFHRixFQUFFRSxFQUFFLEdBQUZBLENBQU0sR0FBR2xDLEVBQUVBLEVBQUVULEVBQUVTLEVBQUUrSSxHQUFHN0csRUFBRSxHQUFGQSxJQUFTMEgsTUFBSyxHQUFJLFNBQVNBLEtBQUssU0FBU2xKLEdBQUcsT0FBT3NCLEVBQUVWLEtBQUtaLEVBQUUrRSxVQUFVLFFBQVEsU0FBUy9FLEVBQUVhLEVBQUVXLEdBQUcsSUFBSWxDLEVBQUVrQyxFQUFFLElBQUlGLEVBQUVFLEVBQUUsSUFBSUMsRUFBRUQsRUFBRSxJQUFJMkcsRUFBRTNGLE9BQU9DLGVBQWU1QixFQUFFZixFQUFFMEIsRUFBRSxHQUFHZ0IsT0FBT0MsZUFBZSxTQUFTekMsRUFBRWEsRUFBRVcsR0FBRyxHQUFHbEMsRUFBRVUsR0FBR2EsRUFBRVksRUFBRVosR0FBRSxHQUFJdkIsRUFBRWtDLEdBQUdGLEVBQUUsSUFBSSxPQUFPNkcsRUFBRW5JLEVBQUVhLEVBQUVXLEdBQUcsTUFBTXhCLElBQUksR0FBRyxRQUFRd0IsR0FBRyxRQUFRQSxFQUFFLE1BQU1SLFVBQVUsNEJBQTRCLE1BQU0sVUFBVVEsSUFBSXhCLEVBQUVhLEdBQUdXLEVBQUVyQyxPQUFPYSxJQUFJLFNBQVNBLEVBQUVhLEVBQUVXLEdBQUcsSUFBSWxDLEVBQUVrQyxFQUFFLEdBQUd4QixFQUFFMEYsUUFBUSxTQUFTMUYsR0FBRyxJQUFJVixFQUFFVSxHQUFHLE1BQU1nQixVQUFVaEIsRUFBRSxzQkFBc0IsT0FBT0EsSUFBSSxTQUFTQSxFQUFFYSxFQUFFVyxHQUFHeEIsRUFBRTBGLFNBQVNsRSxFQUFFLEtBQUtBLEVBQUUsRUFBRkEsQ0FBSyxXQUFXLE9BQU8sR0FBR2dCLE9BQU9DLGVBQWVqQixFQUFFLEdBQUZBLENBQU0sT0FBTyxLQUFLZSxJQUFJLFdBQVcsT0FBTyxLQUFLeUYsS0FBSyxTQUFTaEksRUFBRWEsRUFBRVcsR0FBRyxJQUFJbEMsRUFBRWtDLEVBQUUsR0FBR0YsRUFBRUUsRUFBRSxHQUFHOEgsU0FBUzdILEVBQUVuQyxFQUFFZ0MsSUFBSWhDLEVBQUVnQyxFQUFFaUksZUFBZXZKLEVBQUUwRixRQUFRLFNBQVMxRixHQUFHLE9BQU95QixFQUFFSCxFQUFFaUksY0FBY3ZKLFFBQVEsU0FBU0EsRUFBRWEsRUFBRVcsR0FBRyxJQUFJbEMsRUFBRWtDLEVBQUUsR0FBR3hCLEVBQUUwRixRQUFRLFNBQVMxRixFQUFFYSxHQUFHLElBQUl2QixFQUFFVSxHQUFHLE9BQU9BLEVBQUUsSUFBSXdCLEVBQUVGLEVBQUUsR0FBR1QsR0FBRyxtQkFBbUJXLEVBQUV4QixFQUFFaUksWUFBWTNJLEVBQUVnQyxFQUFFRSxFQUFFUCxLQUFLakIsSUFBSSxPQUFPc0IsRUFBRSxHQUFHLG1CQUFtQkUsRUFBRXhCLEVBQUV3SixXQUFXbEssRUFBRWdDLEVBQUVFLEVBQUVQLEtBQUtqQixJQUFJLE9BQU9zQixFQUFFLElBQUlULEdBQUcsbUJBQW1CVyxFQUFFeEIsRUFBRWlJLFlBQVkzSSxFQUFFZ0MsRUFBRUUsRUFBRVAsS0FBS2pCLElBQUksT0FBT3NCLEVBQUUsTUFBTU4sVUFBVSw2Q0FBNkMsU0FBU2hCLEVBQUVhLEdBQUdiLEVBQUUwRixRQUFRLFNBQVMxRixFQUFFYSxHQUFHLE9BQU91RyxhQUFhLEVBQUVwSCxHQUFHMkMsZUFBZSxFQUFFM0MsR0FBRzBDLFdBQVcsRUFBRTFDLEdBQUdiLE1BQU0wQixLQUFLLFNBQVNiLEVBQUVhLEVBQUVXLEdBQUcsSUFBSWxDLEVBQUVrQyxFQUFFLEdBQUdGLEVBQUVFLEVBQUUsR0FBR0MsRUFBRUQsRUFBRSxJQUFJMkcsRUFBRTNHLEVBQUUsRUFBRkEsQ0FBSyxPQUFPMEYsRUFBRVUsU0FBU0ssU0FBU25JLEdBQUcsR0FBR29ILEdBQUc3RSxNQUFNLFlBQVliLEVBQUUsR0FBR2lJLGNBQWMsU0FBU3pKLEdBQUcsT0FBT2tILEVBQUVqRyxLQUFLakIsS0FBS0EsRUFBRTBGLFFBQVEsU0FBUzFGLEVBQUVhLEVBQUVXLEVBQUUwRixHQUFHLElBQUljLEVBQUUsbUJBQW1CeEcsRUFBRXdHLElBQUl2RyxFQUFFRCxFQUFFLFNBQVNGLEVBQUVFLEVBQUUsT0FBT1gsSUFBSWIsRUFBRWEsS0FBS1csSUFBSXdHLElBQUl2RyxFQUFFRCxFQUFFMkcsSUFBSTdHLEVBQUVFLEVBQUUyRyxFQUFFbkksRUFBRWEsR0FBRyxHQUFHYixFQUFFYSxHQUFHZixFQUFFNEosS0FBS0MsT0FBTzlJLE1BQU1iLElBQUlWLEVBQUVVLEVBQUVhLEdBQUdXLEVBQUUwRixFQUFFbEgsRUFBRWEsR0FBR2IsRUFBRWEsR0FBR1csRUFBRUYsRUFBRXRCLEVBQUVhLEVBQUVXLFdBQVd4QixFQUFFYSxHQUFHUyxFQUFFdEIsRUFBRWEsRUFBRVcsT0FBT29HLFNBQVNQLFVBQVUsV0FBVyxXQUFXLE1BQU0sbUJBQW1CekcsTUFBTUEsS0FBS3VILElBQUlqQixFQUFFakcsS0FBS0wsU0FBUyxTQUFTWixFQUFFYSxHQUFHLElBQUlXLEtBQUs4RixlQUFldEgsRUFBRTBGLFFBQVEsU0FBUzFGLEVBQUVhLEdBQUcsT0FBT1csRUFBRVAsS0FBS2pCLEVBQUVhLEtBQUssU0FBU2IsRUFBRWEsR0FBR2IsRUFBRTBGLFFBQVEsU0FBUzFGLEdBQUcsR0FBRyxtQkFBbUJBLEVBQUUsTUFBTWdCLFVBQVVoQixFQUFFLHVCQUF1QixPQUFPQSxJQUFJLFNBQVNBLEVBQUVhLEVBQUVXLEdBQUcsSUFBSWxDLEVBQUVrQyxFQUFFLElBQUlGLEVBQUVFLEVBQUUsSUFBSUMsRUFBRUQsRUFBRSxJQUFJMkcsRUFBRTNHLEVBQUUsSUFBSTBGLEVBQUUxRixFQUFFLElBQUl4QixFQUFFMEYsUUFBUSxTQUFTMUYsRUFBRWEsR0FBRyxJQUFJVyxFQUFFLEdBQUd4QixFQUFFRixFQUFFLEdBQUdFLEVBQUVnSSxFQUFFLEdBQUdoSSxFQUFFd0gsRUFBRSxHQUFHeEgsRUFBRXVILEVBQUUsR0FBR3ZILEVBQUVpSCxFQUFFLEdBQUdqSCxHQUFHdUgsRUFBRXpHLEVBQUVELEdBQUdxRyxFQUFFLE9BQU8sU0FBU3JHLEVBQUVxRyxFQUFFbkgsR0FBRyxJQUFJLElBQUl3SSxFQUFFcEIsRUFBRTFCLEVBQUVoRSxFQUFFWixHQUFHWixFQUFFcUIsRUFBRW1FLEdBQUdsRSxFQUFFakMsRUFBRTRILEVBQUVuSCxFQUFFLEdBQUcySSxFQUFFUCxFQUFFbEksRUFBRWtCLFFBQVFqQixFQUFFLEVBQUUwSixFQUFFcEksRUFBRVYsRUFBRUQsRUFBRTZILEdBQUc1SSxFQUFFZ0IsRUFBRUQsRUFBRSxRQUFHLEVBQU82SCxFQUFFeEksRUFBRUEsSUFBSSxJQUFJK0csR0FBRy9HLEtBQUtELEtBQVlrSCxFQUFFNUYsRUFBVGdILEVBQUV0SSxFQUFFQyxHQUFTQSxFQUFFdUYsR0FBR3pGLEdBQUcsR0FBR3dCLEVBQUVvSSxFQUFFMUosR0FBR2lILE9BQU8sR0FBR0EsRUFBRSxPQUFPbkgsR0FBRyxLQUFLLEVBQUUsT0FBTSxFQUFHLEtBQUssRUFBRSxPQUFPdUksRUFBRSxLQUFLLEVBQUUsT0FBT3JJLEVBQUUsS0FBSyxFQUFFMEosRUFBRXhJLEtBQUttSCxRQUFRLEdBQUdmLEVBQUUsT0FBTSxFQUFHLE9BQU9ELEdBQUcsRUFBRVMsR0FBR1IsRUFBRUEsRUFBRW9DLEtBQUssU0FBUzVKLEVBQUVhLEVBQUVXLEdBQUcsSUFBSWxDLEVBQUVrQyxFQUFFLEdBQUd4QixFQUFFMEYsUUFBUWxELE9BQU8sS0FBS3FILHFCQUFxQixHQUFHckgsT0FBTyxTQUFTeEMsR0FBRyxNQUFNLFVBQVVWLEVBQUVVLEdBQUdBLEVBQUVxQyxNQUFNLElBQUlHLE9BQU94QyxLQUFLLFNBQVNBLEVBQUVhLEVBQUVXLEdBQUcsSUFBSWxDLEVBQUVrQyxFQUFFLElBQUl4QixFQUFFMEYsUUFBUSxTQUFTMUYsR0FBRyxPQUFPd0MsT0FBT2xELEVBQUVVLE1BQU0sU0FBU0EsRUFBRWEsR0FBRyxJQUFJVyxFQUFFa0csS0FBS29DLEtBQUt4SyxFQUFFb0ksS0FBS3FDLE1BQU0vSixFQUFFMEYsUUFBUSxTQUFTMUYsR0FBRyxPQUFPZ0ssTUFBTWhLLEdBQUdBLEdBQUcsR0FBR0EsRUFBRSxFQUFFVixFQUFFa0MsR0FBR3hCLEtBQUssU0FBU0EsRUFBRWEsRUFBRVcsR0FBRyxJQUFJbEMsRUFBRWtDLEVBQUUsSUFBSXhCLEVBQUUwRixRQUFRLFNBQVMxRixFQUFFYSxHQUFHLE9BQU8sSUFBSXZCLEVBQUVVLEdBQU4sQ0FBVWEsS0FBSyxTQUFTYixFQUFFYSxFQUFFVyxHQUFHLElBQUlsQyxFQUFFa0MsRUFBRSxHQUFHRixFQUFFRSxFQUFFLElBQUlDLEVBQUVELEVBQUUsRUFBRkEsQ0FBSyxXQUFXeEIsRUFBRTBGLFFBQVEsU0FBUzFGLEdBQUcsSUFBSWEsRUFBRSxPQUFPUyxFQUFFdEIsS0FBcUIsbUJBQWhCYSxFQUFFYixFQUFFaUssY0FBa0NwSixJQUFJbUUsUUFBUTFELEVBQUVULEVBQUV3RyxhQUFheEcsT0FBRSxHQUFRdkIsRUFBRXVCLElBQUksUUFBUUEsRUFBRUEsRUFBRVksTUFBTVosT0FBRSxTQUFTLElBQVNBLEVBQUVtRSxNQUFNbkUsSUFBSSxTQUFTYixFQUFFYSxFQUFFVyxHQUFHLElBQUlsQyxFQUFFa0MsRUFBRSxHQUFHeEIsRUFBRTBGLFFBQVFWLE1BQU1pRSxTQUFTLFNBQVNqSixHQUFHLE1BQU0sU0FBU1YsRUFBRVUsS0FBSyxTQUFTQSxFQUFFYSxFQUFFVyxHQUFHLElBQUlsQyxFQUFFa0MsRUFBRSxHQUFHRixFQUFFaEMsRUFBRSx3QkFBd0JBLEVBQUUsMEJBQTBCVSxFQUFFMEYsUUFBUSxTQUFTMUYsR0FBRyxPQUFPc0IsRUFBRXRCLEtBQUtzQixFQUFFdEIsU0FBUyxTQUFTQSxFQUFFYSxFQUFFVyxHQUFHLElBQWlCbEMsRUFBRWtDLEVBQUUsR0FBR3hCLEVBQUUwRixRQUFRLFNBQVMxRixFQUFFYSxHQUFHLFFBQVFiLEdBQUdWLEVBQUUsV0FBV3VCLEVBQUViLEVBQUVpQixLQUFLLEtBQUssYUFBYSxHQUFHakIsRUFBRWlCLEtBQUssVUFBVSxTQUFTakIsRUFBRWEsRUFBRVcsR0FBR0EsRUFBRSxJQUFJeEIsRUFBRTBGLFFBQVFsRSxFQUFFLEdBQUdtSSxPQUFPTixVQUFVLFNBQVNySixFQUFFYSxFQUFFVyxHQUFHLElBQWlCbEMsRUFBRWtDLEVBQUUsR0FBR0YsRUFBRUUsRUFBRSxJQUFJQyxFQUFFRCxFQUFFLElBQUkyRyxFQUFFLEdBQUdrQixTQUFTL0osRUFBRUEsRUFBRVQsRUFBRVMsRUFBRStJLEVBQUU3RyxFQUFFLEdBQUZBLENBQU0sWUFBWSxVQUFVNkgsU0FBUyxTQUFTckosR0FBRyxJQUFJYSxFQUFFWSxFQUFFYixLQUFLWixFQUFFLFlBQVl3QixFQUFFdUQsVUFBVTVELE9BQU8sRUFBRTRELFVBQVUsUUFBRyxFQUFPekYsRUFBRWdDLEVBQUVULEVBQUVNLFFBQVErRixPQUFFLElBQVMxRixFQUFFbEMsRUFBRW9JLEtBQUtzQixJQUFJMUgsRUFBRUUsR0FBR2xDLEdBQUdRLEVBQUU2SixPQUFPM0osR0FBRyxPQUFPbUksRUFBRUEsRUFBRWxILEtBQUtKLEVBQUVmLEVBQUVvSCxHQUFHckcsRUFBRXFILE1BQU1oQixFQUFFcEgsRUFBRXFCLE9BQU8rRixLQUFLcEgsTUFBTSxTQUFTRSxFQUFFYSxFQUFFVyxHQUFHLElBQUlsQyxFQUFFa0MsRUFBRSxJQUFJRixFQUFFRSxFQUFFLElBQUl4QixFQUFFMEYsUUFBUSxTQUFTMUYsRUFBRWEsRUFBRVcsR0FBRyxHQUFHbEMsRUFBRXVCLEdBQUcsTUFBTUcsVUFBVSxVQUFVUSxFQUFFLDBCQUEwQixPQUFPbUksT0FBT3JJLEVBQUV0QixNQUFNLFNBQVNBLEVBQUVhLEVBQUVXLEdBQUcsSUFBSWxDLEVBQUVrQyxFQUFFLEdBQUdGLEVBQUVFLEVBQUUsR0FBR0MsRUFBRUQsRUFBRSxFQUFGQSxDQUFLLFNBQVN4QixFQUFFMEYsUUFBUSxTQUFTMUYsR0FBRyxJQUFJYSxFQUFFLE9BQU92QixFQUFFVSxVQUFLLEtBQVVhLEVBQUViLEVBQUV5QixNQUFNWixFQUFFLFVBQVVTLEVBQUV0QixNQUFNLFNBQVNBLEVBQUVhLEVBQUVXLEdBQUcsSUFBSWxDLEVBQUVrQyxFQUFFLEVBQUZBLENBQUssU0FBU3hCLEVBQUUwRixRQUFRLFNBQVMxRixHQUFHLElBQUlhLEVBQUUsSUFBSSxJQUFJLE1BQU1iLEdBQUdhLEdBQUcsTUFBTVcsR0FBRyxJQUFJLE9BQU9YLEVBQUV2QixJQUFHLEdBQUksTUFBTVUsR0FBR2EsR0FBRyxNQUFNYixLQUFLLE9BQU0saWhDQ0UxeE5rSyxFQUNTLG9CQUFiWixXQUE0QkEsV0FBWUEsU0FBU0MsZUFDcEQsYUFBY0QsU0FBU0MsY0FBYyxTQUtwQyxTQUFTWSxFQUFhcEksRUFBTXFJLFNBQ1osMkJBQWRySSxFQUFLSSxNQUFxQ2tJLEVBQVF0SSxFQUFNcUksR0FjMUQsU0FBU0UsRUFBcUJDLFNBQ0ssbUJBQTdCQSxFQUFJRCxxQkFDTkMsRUFBSUQsNEJBQzBCLElBQXJCQyxFQUFJQyxjQUNiRCxFQUFJQyxhQVFSLFNBQVNDLEVBQW1CRixlQUNHLElBQXpCQSxFQUFJRyxpQkFDTkgsRUFBSUcsaUJBQ2dDLG1CQUEzQkgsRUFBSUUsb0JBQ2JGLEVBQUlFLHFCQUtSLFNBQVNFLEVBQW9CSixVQUM3QkEsRUFBSUssY0FLRjVGLE1BQU1xQyxVQUFVNkIsS0FBS2pJLEtBQzFCc0osRUFBSUssYUFBYUMsTUFDakIsa0JBQWlCLFVBQVQxSSxHQUE2QiwyQkFBVEEsSUFTekIsU0FBUzJJLEVBQW1CUCxLQUM3QlEsaUJBc0JDLFNBQVNDLCtCQUF3QkMsZ0RBQy9CLFNBQUNDLDhCQUFVckcsMERBQ2hCb0csRUFBSS9CLEtBQUssc0JBQ0RpQyxnQkFBR0QsVUFBVXJHLElBQ1pxRyxFQUFNUix3QkN0RWJVLGlOQUNKQyw0REE0QkFDLG9CQUFxQixJQUVyQkMsZUFBaUIsWUFDWHZILEVBQUt3SCxNQUFReEgsRUFBS3dILEtBQUtDLFNBQVNsQixFQUFJbUIsWUFJcENYLG1CQUNDWSxtQkFHUEMsWUFBYyxjQUNSQyxVQUNBN0gsRUFBS29DLE1BQU13RixhQUFlakIsRUFBb0JKLE1BQzNDbkUsTUFBTXdGLFlBQVkzSyxPQUFXc0osTUFJdEN1QixZQUFjLGNBQ1JmLGtCQUcwQyxJQUExQy9HLEVBQUsySCxZQUFZSSxRQUFReEIsRUFBSW1CLFdBQzFCQyxZQUFZdkssS0FBS21KLEVBQUltQixVQUd4QkcsVUFFQWxCLEVBQW9CSixhQUNkdkwsUUFBUWdGLEVBQUtvQyxNQUFNNEYscUJBQXFCekIsSUFBTTdLLEtBQUssWUFDckQ0SyxFQUFxQkMsTUFJcEIwQix1Q0FHVyxNQUlkakksRUFBS29DLE1BQU0wRixlQUNSMUYsTUFBTTBGLFlBQVk3SyxPQUFXc0osT0FLeEMyQixXQUFhLHFCQUVQbkIsbUJBQ0FjLFVBRUF0QixFQUFJSyxpQkFDRkEsYUFBYXVCLFdBQWEsUUFHNUJuSSxFQUFLb0MsTUFBTThGLFlBQWN2QixFQUFvQkosTUFDMUNuRSxNQUFNOEYsV0FBV2pMLE9BQVdzSixJQUc1QixLQUdUNkIsWUFBYyxjQUNSckIsbUJBQ0FjLFlBR0NGLFlBQWMzSCxFQUFLMkgsWUFBWVUsT0FBTyxtQkFBTUMsSUFBTy9CLEVBQUltQixRQUFVMUgsRUFBS3dILEtBQUtDLFNBQVNhLEtBQ3JGdEksRUFBSzJILFlBQVl4SyxPQUFTLE1BS3pCOEssd0JBQ1csb0JBSVpqSSxFQUFLb0MsTUFBTWdHLGFBQWV6QixFQUFvQkosTUFDM0NuRSxNQUFNZ0csWUFBWW5MLE9BQVdzSixPQUl0Q2dDLE9BQVMsa0JBUUh2SSxFQUFLb0MsTUFOUG1HLElBQUFBLE9BQ0FDLElBQUFBLGVBQ0FDLElBQUFBLGVBQ0FDLElBQUFBLFNBQ0F0QyxJQUFBQSxPQUNBNEIsSUFBQUEsdUJBSUVqQixtQkFHQWMsWUFHQ0YsaUJBQ0FMLG9CQUFxQixJQUdyQnFCLGFBQWUsT0FHZlYsd0JBQ1csb0JBSVp0QixFQUFvQkosWUFDZHZMLFFBQVFnTixFQUFxQnpCLElBQU03SyxLQUFLLGdCQUN4Q2tOLEtBQ0FDLEtBRUZ2QyxFQUFxQkMsT0FJaEJ1QyxRQUFRLFlBRWIzQyxFQUFhcEksRUFBTXFJLElEL0p4QixTQUF1QnJJLEVBQU1nTCxFQUFTQyxVQUNwQ2pMLEVBQUtrTCxNQUFRRixHQUFXaEwsRUFBS2tMLE1BQVFELEVDK0psQ0UsQ0FBY25MLEVBQU1pQyxFQUFLb0MsTUFBTTJHLFFBQVMvSSxFQUFLb0MsTUFBTTRHLFdBRXJDNUwsS0FBS1csS0FFTFgsS0FBS1csTUFJbEIySyxHQUFZRSxFQUFjekwsT0FBUyxLQUd4QkMsZUFBUXdMLEVBQWNPLE9BQU8sT0FNeENsQixVQUFXVyxnQkFBZUMsaUJBQWlCLFdBQzFDTixLQUNLdEwsT0FBVzJMLEVBQWVDLEVBQWV0QyxHQUc5Q3NDLEVBQWMxTCxPQUFTLEdBQUtzTCxLQUNmeEwsT0FBVzRMLEVBQWV0QyxHQUd2Q3FDLEVBQWN6TCxPQUFTLEdBQUtxTCxLQUNmdkwsT0FBVzJMLEVBQWVyQyxXQU9uRDZDLFFBQVUsa0JBQzBCcEosRUFBS29DLE1BQS9CZ0gsSUFBQUEsUUFBU0MsSUFBQUEsYUFHYkQsS0FDTW5NLE9BQVdzSixHQUtoQjhDLEdBQWlCNUMsRUFBbUJGLE9BQ25DK0MsbUJEaEpILGVBQW9CQyx5REFBWTlGLE9BQU8rRixVQUFVRCxpQkFSeEQsU0FBY0EsVUFDMEIsSUFBL0JBLEVBQVV4QixRQUFRLFVBQXFELElBQW5Dd0IsRUFBVXhCLFFBQVEsWUFRdEQwQixDQUFLRixJQUxkLFNBQWdCQSxVQUN5QixJQUFoQ0EsRUFBVXhCLFFBQVEsU0FJQzJCLENBQU9ILEdDb0p6QkksS0FHR0Msa0JBRk01SixFQUFLNEosS0FBTSxPQU81QkMsb0JBQXNCLGNBQ2hCUCxxQkFHTlEsbUJBQXFCLGVBRVhBLEVBQXVCOUosRUFBS29DLE1BQTVCMEgsbUJBRUo5SixFQUFLc0gsK0JBQ0ksV0FDUyxNQUFkdEgsRUFBSytKLFFBRVcvSixFQUFLK0osTUFBZjdKLE1BRUcvQyxXQUNKbUssb0JBQXFCLEVBRVEsbUJBQXZCd0MsVUFLZCxRQUlQRSxRQUFVLGdCQUNBQSxFQUFZaEssRUFBS29DLE1BQWpCNEgsUUFDSkEsS0FDTS9NLE9BQVdzSixHQUVoQkUsRUFBbUJGLE1BQ2pCMEIsVUFBV2dDLFdBQVcsT0FJL0JDLE9BQVMsZ0JBQ0NBLEVBQVdsSyxFQUFLb0MsTUFBaEI4SCxPQUNKQSxLQUNLak4sT0FBV3NKLEdBRWZFLEVBQW1CRixNQUNqQjBCLFVBQVdnQyxXQUFXLE9BSS9CRSxVQUFZLGdCQUNGQSxFQUFjbkssRUFBS29DLE1BQW5CK0gsVUFDSG5LLEVBQUt3SCxLQUFLNEMsWUFBWTdELEVBQUltQixVQUkzQnlDLEtBQ1FsTixPQUFXc0osR0FHbEJFLEVBQW1CRixJQUF5QixLQUFoQkEsRUFBSThELFNBQWtDLEtBQWhCOUQsRUFBSThELFlBQ3JEdEQsbUJBQ0M2QyxZQUlUVSxlQUFpQixtQkFDWHRLLEVBQUtvQyxNQUFNbUksU0FDTixLQUVGQyxLQUdUQyxhQUFlLGlGQUNiQyxPQUFBQSxhQUFTLFFBQ1RQLElBQUFBLFVBQ0FILElBQUFBLFFBQ0FFLElBQUFBLE9BQ0FkLElBQUFBLFFBQ0F4QixJQUFBQSxZQUNBRSxJQUFBQSxZQUNBSSxJQUFBQSxXQUNBRSxJQUFBQSxZQUNBRyxJQUFBQSxPQUNHb0Msa0pBRVEzSyxFQUFLc0ssZUFDZEgsRUFBWW5ELEVBQXFCbUQsRUFBV25LLEVBQUttSyxXQUFhbkssRUFBS21LLG1CQUU1RG5LLEVBQUtzSyxlQUNaTixFQUFVaEQsRUFBcUJnRCxFQUFTaEssRUFBS2dLLFNBQVdoSyxFQUFLZ0ssZ0JBRXZEaEssRUFBS3NLLGVBQWVKLEVBQVNsRCxFQUFxQmtELEVBQVFsSyxFQUFLa0ssUUFBVWxLLEVBQUtrSyxnQkFDN0VsSyxFQUFLc0ssZUFDWmxCLEVBQVVwQyxFQUFxQm9DLEVBQVNwSixFQUFLb0osU0FBV3BKLEVBQUtvSixxQkFFbERwSixFQUFLc0ssZUFDaEIxQyxFQUFjWixFQUFxQlksRUFBYTVILEVBQUs0SCxhQUFlNUgsRUFBSzRILHlCQUU5RDVILEVBQUtzSyxlQUNoQnhDLEVBQWNkLEVBQXFCYyxFQUFhOUgsRUFBSzhILGFBQWU5SCxFQUFLOEgsd0JBRS9EOUgsRUFBS3NLLGVBQ2ZwQyxFQUFhbEIsRUFBcUJrQixFQUFZbEksRUFBS2tJLFlBQWNsSSxFQUFLa0ksd0JBRTNEbEksRUFBS3NLLGVBQ2hCbEMsRUFBY3BCLEVBQXFCb0IsRUFBYXBJLEVBQUtvSSxhQUFlcEksRUFBS29JLG9CQUVuRXBJLEVBQUtzSyxlQUFlL0IsRUFBU3ZCLEVBQXFCdUIsRUFBUXZJLEVBQUt1SSxRQUFVdkksRUFBS3VJLGFBQ3JGbUMsRUFBUzFLLEVBQUs0SywyQkFDTDVLLEVBQUtvQyxNQUFNbUksVUFBWSxFQUFJLE1BQ2xDSSxNQUdMRSxjQUFnQiwrRUFBR0gsT0FBQUEsYUFBUyxRQUFPSSxJQUFBQSxTQUFVMUIsSUFBQUEsUUFBWXVCLHlDQUNwQjNLLEVBQUtvQyxNQUFoQ2dFLElBQUFBLE9BQVFzQyxJQUFBQSxTQUFVekssSUFBQUEsS0FDcEI4TSxtQkFFRSxjQUNHQyxRQUFTLGlCQUNSOUUsR0FBbUJ3QyxXQUNuQjFCLEVBQXFCOEQsRUFBVTlLLEVBQUt1SSxnQkFDckN2QixFQUFxQm9DLEVBQVNwSixFQUFLNkosa0NBQzlCLGdCQUNILEdBQ1ZhLEVBQVMxSyxFQUFLaUwsb0JBRWJoTixHQUFRQSxFQUFLZCxXQUNKYyxLQUFPQSxRQUdmOE0sRUFDQUosTUFJUEMsV0FBYSxjQUNOcEQsS0FBT0EsS0FHZHlELFlBQWMsY0FDUGxCLE1BQVFBLEtBUWZILEtBQU8sYUFDQXRDLG9CQUFxQixFQUN0QnRILEVBQUsrSixVQUNGQSxNQUFNNU8sTUFBUSxPQUNkNE8sTUFBTW1CLG9WQXpXTUMsRUFBTUMsOERBUWpCQyxFQUEwQnpPLEtBQUt3RixNQUEvQmlKLDJCQUNIMUQsZUFFRDBELGFBQ09DLGlCQUFpQixXQUFZeEUsR0FBb0IsWUFDakR3RSxpQkFBaUIsT0FBUTFPLEtBQUsySyxnQkFBZ0IsV0FHbEQrRCxpQkFBaUIsUUFBUzFPLEtBQUtrTixvQkFBb0Isa0RBSXhCbE4sS0FBS3dGLE1BQS9CaUosaUNBRUdFLG9CQUFvQixXQUFZekUsWUFDaEN5RSxvQkFBb0IsT0FBUTNPLEtBQUsySyx3QkFHckNnRSxvQkFBb0IsUUFBUzNPLEtBQUtrTixvQkFBb0Isd0NENUJoQzVKLEVBQU9rRyxJQ2dYS3hKLEtBQUt3RixNQUF0Q29KLElBQUFBLFNBQVU5QyxJQUFBQSxTQUFVNkIsSUFBQUEsV0FDb0QzTixLQUFLeUssTUFBN0VvRSxJQUFBQSxhQUFjeEIsSUFBQUEsVUFBV3RCLElBQUFBLGFBQWNDLElBQUFBLGNBQWVDLElBQUFBLGNBRXhENkMsRUFBYS9DLEVBQWF4TCxPQUMxQndPLEVBQW9CakQsR0FBWWdELEdBQWMsRUFDOUNFLEVBQWVGLEVBQWEsSURyWEx4TCxFQ3FYMkJ5SSxFRHJYcEJ2QyxFQ3FYa0N4SixLQUFLd0YsTUFBTWdFLE9EcFg1RWxHLEVBQU0yTCxNQUFNLG1CQUFRMUYsRUFBYXBJLEVBQU1xSSxhQ3VYckNvRiw4Q0FGY0UsRUFBYSxLQUFPRSxJQUFpQkQsNERBUzdDMUIsSUFBY00sZUFDWDNOLEtBQUs2TiwyQkFDSjdOLEtBQUtpTyxtQkFDZGpPLEtBQUtnTix1QkFPakJ4QyxFQUFTMEUsa0JBUUNDLEVBQVVDLFdBQVdELEVBQVVFLE9BQVFGLEVBQVVHLFFBQVFILEVBQVVFLG1CQWlCakVGLEVBQVVJLGtCQU9OeEssRUFDWm9LLEVBQVVLLEtBQ1YsbUhBTVFMLEVBQVVLLDJCQUtHTCxFQUFVSyxjQUt2QkwsRUFBVUssVUFLZEwsRUFBVUUsZUFLUEYsRUFBVU0sZUFLVk4sRUFBVU0sNEJBT0dOLEVBQVVJLGFBTXZCSixFQUFVSSxhQUtWSixFQUFVSSxZQUtYSixFQUFVSSxlQUtQSixFQUFVSSxZQStCYkosRUFBVUksb0JBS0ZKLEVBQVVJLG9CQUtWSixFQUFVSSxpQkFLYkosRUFBVUksaUJBS1ZKLEVBQVVJLGdCQUtYSixFQUFVSSxpQkFLVEosRUFBVUksd0JBS0hKLEVBQVVJLE1BR2hDL0UsRUFBU2tGLHFDQUNnQixZQUNiLGdCQUNJLFlBQ0osVUFDREMsRUFBQUEsVUFDQSx1Qkx0akJKLFNBQW1CaEcsR0FDdEIsT0FBT25ILEVBQWtCeEMsVUFBTSxPQUFRLEVBQVEsV0FDM0MsT0FBT3lDLEVBQW9CekMsS0FBTSxTQUFVMEMsR0FDdkMsT0FBUSxHQU1EbkUsRUFOeUJvTCxFQU8vQnBMLEVBQU15TCxjQVBpQ0wsRUFBSUssYUFvQnhELFNBQThCNEYsRUFBSXJPLEdBQzlCLE9BQU9pQixFQUFrQnhDLFVBQU0sT0FBUSxFQUFRLFdBQzNDLElBQUl3RCxFQUNKLE9BQU9mLEVBQW9CekMsS0FBTSxTQUFVMEMsR0FDdkMsT0FBUUEsRUFBR25ELE9BQ1AsS0FBSyxFQUdELE9BRkFpRSxFQUFRWSxNQUFNeUwsS0FBS0QsRUFBR3BNLE9BQ2pCaUksT0FBTyxTQUFVdEosR0FBUSxNQUFxQixTQUFkQSxFQUFLMk4sT0FDM0IsU0FBVHZPLEdBQTBCLEVBQWEsSUFDckMsRUFBYXBELFFBQVFzRixJQUFJRCxFQUFNRSxJQUFJLFNBQVV2QixHQUFRLE9BV2pGLFNBQXdCQSxHQUNwQixHQUFxQyxtQkFBMUJBLEVBQUs0TixpQkFDWixPQUFPN04sRUFBcUJDLEdBRWhDLElBQUlJLEVBQVFKLEVBQUs0TixtQkFJakIsT0FBSXhOLEdBQVNBLEVBQU1JLFlBQ1JDLEVBQWFMLEdBRWpCTCxFQUFxQkMsR0F0QndENk4sQ0FBZTdOLE9BQ3ZGLEtBQUssRUFFRCxPQUFRLEVBcUI1QixTQUFTOE4sRUFBUXpNLEdBQ2IsT0FBT0EsRUFBTTBNLE9BQU8sU0FBVUMsRUFBSzdNLEdBQVMsT0ZpRXpDLFdBQ0gsSUFBSyxJQUFJeEMsS0FBU0QsRUFBSSxFQUFHQSxFQUFJc0QsVUFBVTVELE9BQVFNLElBQzNDQyxFQUFLQSxFQUFHb0YsT0FBT3pGLEVBQU8wRCxVQUFVdEQsS0FDcEMsT0FBT0MsRUVwRTRDc1AsQ0FBaUJELEVBQU0vTCxNQUFNaUUsUUFBUS9FLEdBQVMyTSxFQUFRM00sSUFBVUEsU0F0QjdFMk0sQ0FEZHZOLEVBQUdsRCxRQUVGaU0sT0FBTyxTQUFVdEssR0FBUSxPQUFRYyxFQUFnQm9PLFNBQVNsUCxFQUFLRSxTQUM1RSxLQUFLLEVBQUcsT0FBUSxFQUFjbUMsUUFqQ3hCOE0sQ0FBcUIzRyxFQUFJSyxhQUFjTCxFQUFJcEksTUFRakUsU0FBdUJvSSxHQU1uQixPQUVhcEwsRUFQT29MLEVBQUltQixPQVFQLE9BQVZ2TSxHQVBEb0wsRUFBSW1CLE9BQU94SCxNQUNQYyxNQUFNeUwsS0FBS2xHLEVBQUltQixPQUFPeEgsV0FHbkJJLElBQUksU0FBVXZDLEdBQVEsT0FBT0QsRUFBZUMsS0FFN0QsSUFBaUI1QyxFQWZLZ1MsQ0FBYzVHLEtBSXBDLElBQW1CcEwifQ==
1
+ !function(e,n){"object"==typeof exports&&"undefined"!=typeof module?module.exports=n(require("react"),require("prop-types")):"function"==typeof define&&define.amd?define(["react","prop-types"],n):e.Dropzone=n(e.React,e.PropTypes)}(this,function(e,n){"use strict";function t(e,n,t,r){return new(t||(t=Promise))(function(o,i){function a(e){try{c(r.next(e))}catch(e){i(e)}}function u(e){try{c(r.throw(e))}catch(e){i(e)}}function c(e){e.done?o(e.value):new t(function(n){n(e.value)}).then(a,u)}c((r=r.apply(e,n||[])).next())})}function r(e,n){var t,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:u(0),throw:u(1),return:u(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function u(i){return function(u){return function(i){if(t)throw new TypeError("Generator is already executing.");for(;a;)try{if(t=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,r=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!(o=(o=a.trys).length>0&&o[o.length-1])&&(6===i[0]||2===i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]<o[3])){a.label=i[1];break}if(6===i[0]&&a.label<o[1]){a.label=o[1],o=i;break}if(o&&a.label<o[2]){a.label=o[2],a.ops.push(i);break}o[2]&&a.ops.pop(),a.trys.pop();continue}i=n.call(e,a)}catch(e){i=[6,e],r=0}finally{t=o=0}if(5&i[0])throw i[1];return{value:i[0]?i[1]:void 0,done:!0}}([i,u])}}}function o(e,n){var t="function"==typeof Symbol&&e[Symbol.iterator];if(!t)return e;var r,o,i=t.call(e),a=[];try{for(;(void 0===n||n-- >0)&&!(r=i.next()).done;)a.push(r.value)}catch(e){o={error:e}}finally{try{r&&!r.done&&(t=i.return)&&t.call(i)}finally{if(o)throw o.error}}return a}e=e&&e.hasOwnProperty("default")?e.default:e,n=n&&n.hasOwnProperty("default")?n.default:n;var i=new Map([["avi","video/avi"],["gif","image/gif"],["ico","image/x-icon"],["jpeg","image/jpeg"],["jpg","image/jpeg"],["mkv","video/x-matroska"],["mov","video/quicktime"],["mp4","video/mp4"],["pdf","application/pdf"],["png","image/png"],["zip","application/zip"],["doc","application/msword"],["docx","application/vnd.openxmlformats-officedocument.wordprocessingml.document"]]);function a(e,n){var t=function(e){var n=e.name;if(n&&-1!==n.lastIndexOf(".")&&!e.type){var t=n.split(".").pop().toLowerCase(),r=i.get(t);r&&Object.defineProperty(e,"type",{value:r,writable:!1,configurable:!1})}return e}(e);return Object.defineProperty(t,"path",{value:"string"==typeof n?n:e.name,writable:!1,configurable:!1}),t}var u=[".DS_Store","Thumbs.db"];function c(e){var n=e.getAsFile();if(!n)return Promise.reject(e+" is not a File");var t=a(n);return Promise.resolve(t)}function f(e){return t(this,void 0,void 0,function(){return r(this,function(n){return[2,e.isDirectory?s(e):function(e){return t(this,void 0,void 0,function(){return r(this,function(n){return[2,new Promise(function(n,t){e.file(function(t){var r=a(t,e.fullPath);n(r)},function(e){t(e)})})]})})}(e)]})})}function s(e){var n=e.createReader();return new Promise(function(e,o){var i=[];!function a(){var u=this;n.readEntries(function(n){return t(u,void 0,void 0,function(){var t,u,c;return r(this,function(r){switch(r.label){case 0:if(n.length)return[3,5];r.label=1;case 1:return r.trys.push([1,3,,4]),[4,Promise.all(i)];case 2:return t=r.sent(),e(t),[3,4];case 3:return u=r.sent(),o(u),[3,4];case 4:return[3,6];case 5:c=Promise.all(n.map(f)),i.push(c),a(),r.label=6;case 6:return[2]}})})},function(e){o(e)})}()})}var l,p,d=(function(e){e.exports=function(e){function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}var t={};return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{configurable:!1,enumerable:!0,get:r})},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,n){return Object.prototype.hasOwnProperty.call(e,n)},n.p="",n(n.s=13)}([function(e,n){var t=e.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=t)},function(e,n){e.exports=function(e){return"object"==typeof e?null!==e:"function"==typeof e}},function(e,n){var t=e.exports={version:"2.5.0"};"number"==typeof __e&&(__e=t)},function(e,n,t){e.exports=!t(4)(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a})},function(e,n){e.exports=function(e){try{return!!e()}catch(e){return!0}}},function(e,n){var t={}.toString;e.exports=function(e){return t.call(e).slice(8,-1)}},function(e,n,t){var r=t(32)("wks"),o=t(9),i=t(0).Symbol,a="function"==typeof i;(e.exports=function(e){return r[e]||(r[e]=a&&i[e]||(a?i:o)("Symbol."+e))}).store=r},function(e,n,t){var r=t(0),o=t(2),i=t(8),a=t(22),u=t(10),c=function(e,n,t){var f,s,l,p,d=e&c.F,v=e&c.G,g=e&c.S,y=e&c.P,h=e&c.B,m=v?r:g?r[n]||(r[n]={}):(r[n]||{}).prototype,D=v?o:o[n]||(o[n]={}),b=D.prototype||(D.prototype={});for(f in v&&(t=n),t)l=((s=!d&&m&&void 0!==m[f])?m:t)[f],p=h&&s?u(l,r):y&&"function"==typeof l?u(Function.call,l):l,m&&a(m,f,l,e&c.U),D[f]!=l&&i(D,f,p),y&&b[f]!=l&&(b[f]=l)};r.core=o,c.F=1,c.G=2,c.S=4,c.P=8,c.B=16,c.W=32,c.U=64,c.R=128,e.exports=c},function(e,n,t){var r=t(16),o=t(21);e.exports=t(3)?function(e,n,t){return r.f(e,n,o(1,t))}:function(e,n,t){return e[n]=t,e}},function(e,n){var t=0,r=Math.random();e.exports=function(e){return"Symbol(".concat(void 0===e?"":e,")_",(++t+r).toString(36))}},function(e,n,t){var r=t(24);e.exports=function(e,n,t){if(r(e),void 0===n)return e;switch(t){case 1:return function(t){return e.call(n,t)};case 2:return function(t,r){return e.call(n,t,r)};case 3:return function(t,r,o){return e.call(n,t,r,o)}}return function(){return e.apply(n,arguments)}}},function(e,n){e.exports=function(e){if(void 0==e)throw TypeError("Can't call method on "+e);return e}},function(e,n,t){var r=t(28),o=Math.min;e.exports=function(e){return e>0?o(r(e),9007199254740991):0}},function(e,n,t){n.__esModule=!0,n.default=function(e,n){if(e&&n){var t=Array.isArray(n)?n:n.split(","),r=e.name||"",o=e.type||"",i=o.replace(/\/.*$/,"");return t.some(function(e){var n=e.trim();return"."===n.charAt(0)?r.toLowerCase().endsWith(n.toLowerCase()):n.endsWith("/*")?i===n.replace(/\/.*$/,""):o===n})}return!0},t(14),t(34)},function(e,n,t){t(15),e.exports=t(2).Array.some},function(e,n,t){var r=t(7),o=t(25)(3);r(r.P+r.F*!t(33)([].some,!0),"Array",{some:function(e){return o(this,e,arguments[1])}})},function(e,n,t){var r=t(17),o=t(18),i=t(20),a=Object.defineProperty;n.f=t(3)?Object.defineProperty:function(e,n,t){if(r(e),n=i(n,!0),r(t),o)try{return a(e,n,t)}catch(e){}if("get"in t||"set"in t)throw TypeError("Accessors not supported!");return"value"in t&&(e[n]=t.value),e}},function(e,n,t){var r=t(1);e.exports=function(e){if(!r(e))throw TypeError(e+" is not an object!");return e}},function(e,n,t){e.exports=!t(3)&&!t(4)(function(){return 7!=Object.defineProperty(t(19)("div"),"a",{get:function(){return 7}}).a})},function(e,n,t){var r=t(1),o=t(0).document,i=r(o)&&r(o.createElement);e.exports=function(e){return i?o.createElement(e):{}}},function(e,n,t){var r=t(1);e.exports=function(e,n){if(!r(e))return e;var t,o;if(n&&"function"==typeof(t=e.toString)&&!r(o=t.call(e)))return o;if("function"==typeof(t=e.valueOf)&&!r(o=t.call(e)))return o;if(!n&&"function"==typeof(t=e.toString)&&!r(o=t.call(e)))return o;throw TypeError("Can't convert object to primitive value")}},function(e,n){e.exports=function(e,n){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:n}}},function(e,n,t){var r=t(0),o=t(8),i=t(23),a=t(9)("src"),u=Function.toString,c=(""+u).split("toString");t(2).inspectSource=function(e){return u.call(e)},(e.exports=function(e,n,t,u){var f="function"==typeof t;f&&(i(t,"name")||o(t,"name",n)),e[n]!==t&&(f&&(i(t,a)||o(t,a,e[n]?""+e[n]:c.join(String(n)))),e===r?e[n]=t:u?e[n]?e[n]=t:o(e,n,t):(delete e[n],o(e,n,t)))})(Function.prototype,"toString",function(){return"function"==typeof this&&this[a]||u.call(this)})},function(e,n){var t={}.hasOwnProperty;e.exports=function(e,n){return t.call(e,n)}},function(e,n){e.exports=function(e){if("function"!=typeof e)throw TypeError(e+" is not a function!");return e}},function(e,n,t){var r=t(10),o=t(26),i=t(27),a=t(12),u=t(29);e.exports=function(e,n){var t=1==e,c=2==e,f=3==e,s=4==e,l=6==e,p=5==e||l,d=n||u;return function(n,u,v){for(var g,y,h=i(n),m=o(h),D=r(u,v,3),b=a(m.length),w=0,x=t?d(n,b):c?d(n,0):void 0;b>w;w++)if((p||w in m)&&(y=D(g=m[w],w,h),e))if(t)x[w]=y;else if(y)switch(e){case 3:return!0;case 5:return g;case 6:return w;case 2:x.push(g)}else if(s)return!1;return l?-1:f||s?s:x}}},function(e,n,t){var r=t(5);e.exports=Object("z").propertyIsEnumerable(0)?Object:function(e){return"String"==r(e)?e.split(""):Object(e)}},function(e,n,t){var r=t(11);e.exports=function(e){return Object(r(e))}},function(e,n){var t=Math.ceil,r=Math.floor;e.exports=function(e){return isNaN(e=+e)?0:(e>0?r:t)(e)}},function(e,n,t){var r=t(30);e.exports=function(e,n){return new(r(e))(n)}},function(e,n,t){var r=t(1),o=t(31),i=t(6)("species");e.exports=function(e){var n;return o(e)&&("function"!=typeof(n=e.constructor)||n!==Array&&!o(n.prototype)||(n=void 0),r(n)&&null===(n=n[i])&&(n=void 0)),void 0===n?Array:n}},function(e,n,t){var r=t(5);e.exports=Array.isArray||function(e){return"Array"==r(e)}},function(e,n,t){var r=t(0),o=r["__core-js_shared__"]||(r["__core-js_shared__"]={});e.exports=function(e){return o[e]||(o[e]={})}},function(e,n,t){var r=t(4);e.exports=function(e,n){return!!e&&r(function(){n?e.call(null,function(){},1):e.call(null)})}},function(e,n,t){t(35),e.exports=t(2).String.endsWith},function(e,n,t){var r=t(7),o=t(12),i=t(36),a="".endsWith;r(r.P+r.F*t(38)("endsWith"),"String",{endsWith:function(e){var n=i(this,e,"endsWith"),t=arguments.length>1?arguments[1]:void 0,r=o(n.length),u=void 0===t?r:Math.min(o(t),r),c=String(e);return a?a.call(n,c,u):n.slice(u-c.length,u)===c}})},function(e,n,t){var r=t(37),o=t(11);e.exports=function(e,n,t){if(r(n))throw TypeError("String#"+t+" doesn't accept regex!");return String(o(e))}},function(e,n,t){var r=t(1),o=t(5),i=t(6)("match");e.exports=function(e){var n;return r(e)&&(void 0!==(n=e[i])?!!n:"RegExp"==o(e))}},function(e,n,t){var r=t(6)("match");e.exports=function(e){var n=/./;try{"/./"[e](n)}catch(t){try{return n[r]=!1,!"/./"[e](n)}catch(e){}}return!0}}])}(l={exports:{}},l.exports),l.exports),v=(p=d)&&p.__esModule&&Object.prototype.hasOwnProperty.call(p,"default")?p.default:p,g=function(e,n){if(!(e instanceof n))throw new TypeError("Cannot call a class as a function")},y=function(){function e(e,n){for(var t=0;t<n.length;t++){var r=n[t];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(n,t,r){return t&&e(n.prototype,t),r&&e(n,r),n}}(),h=function(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e},m=Object.assign||function(e){for(var n=1;n<arguments.length;n++){var t=arguments[n];for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])}return e},D=function(e,n){var t={};for(var r in e)n.indexOf(r)>=0||Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t},b=function(e,n){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!n||"object"!=typeof n&&"function"!=typeof n?e:n},w=function(e){if(Array.isArray(e)){for(var n=0,t=Array(e.length);n<e.length;n++)t[n]=e[n];return t}return Array.from(e)},x="undefined"==typeof document||!document||!document.createElement||"multiple"in document.createElement("input");function O(e,n){return"application/x-moz-file"===e.type||v(e,n)}function P(e){return"function"==typeof e.isPropagationStopped?e.isPropagationStopped():void 0!==e.cancelBubble&&e.cancelBubble}function S(e){return void 0!==e.defaultPrevented?e.defaultPrevented:"function"==typeof e.isDefaultPrevented&&e.isDefaultPrevented()}function F(e){return!e.dataTransfer||Array.prototype.some.call(e.dataTransfer.types,function(e){return"Files"===e||"application/x-moz-file"===e})}function j(e){e.preventDefault()}function E(){for(var e=arguments.length,n=Array(e),t=0;t<e;t++)n[t]=arguments[t];return function(e){for(var t=arguments.length,r=Array(t>1?t-1:0),o=1;o<t;o++)r[o-1]=arguments[o];return n.some(function(n){return n&&n.apply(void 0,[e].concat(r)),e.defaultPrevented})}}var A=function(n){function t(){var e,n,r;g(this,t);for(var o=arguments.length,i=Array(o),a=0;a<o;a++)i[a]=arguments[a];return n=r=b(this,(e=t.__proto__||Object.getPrototypeOf(t)).call.apply(e,[this].concat(i))),r.state={draggedFiles:[],acceptedFiles:[],rejectedFiles:[]},r.isFileDialogActive=!1,r.onDocumentDrop=function(e){r.node&&r.node.contains(e.target)||(e.preventDefault(),r.dragTargets=[])},r.onDragStart=function(e){e.persist(),r.props.onDragStart&&F(e)&&r.props.onDragStart.call(r,e)},r.onDragEnter=function(e){e.preventDefault(),-1===r.dragTargets.indexOf(e.target)&&r.dragTargets.push(e.target),e.persist(),F(e)&&(Promise.resolve(r.props.getDataTransferItems(e)).then(function(n){P(e)||r.setState({draggedFiles:n,isDragActive:!0})}),r.props.onDragEnter&&r.props.onDragEnter.call(r,e))},r.onDragOver=function(e){return e.preventDefault(),e.persist(),e.dataTransfer&&(e.dataTransfer.dropEffect="copy"),r.props.onDragOver&&F(e)&&r.props.onDragOver.call(r,e),!1},r.onDragLeave=function(e){e.preventDefault(),e.persist(),r.dragTargets=r.dragTargets.filter(function(n){return n!==e.target&&r.node.contains(n)}),r.dragTargets.length>0||(r.setState({isDragActive:!1,draggedFiles:[]}),r.props.onDragLeave&&F(e)&&r.props.onDragLeave.call(r,e))},r.onDrop=function(e){var n=r.props,t=n.onDrop,o=n.onDropAccepted,i=n.onDropRejected,a=n.multiple,u=n.accept,c=n.getDataTransferItems;e.preventDefault(),e.persist(),r.dragTargets=[],r.isFileDialogActive=!1,r.draggedFiles=null,r.setState({isDragActive:!1,draggedFiles:[]}),F(e)&&Promise.resolve(c(e)).then(function(n){var c=[],f=[];P(e)||(n.forEach(function(e){O(e,u)&&function(e,n,t){return e.size<=n&&e.size>=t}(e,r.props.maxSize,r.props.minSize)?c.push(e):f.push(e)}),!a&&c.length>1&&f.push.apply(f,w(c.splice(0))),r.setState({acceptedFiles:c,rejectedFiles:f},function(){t&&t.call(r,c,f,e),f.length>0&&i&&i.call(r,f,e),c.length>0&&o&&o.call(r,c,e)}))})},r.onClick=function(e){var n=r.props.onClick;n&&n.call(r,e),S(e)||(e.stopPropagation(),!function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:window.navigator.userAgent;return function(e){return-1!==e.indexOf("MSIE")||-1!==e.indexOf("Trident/")}(e)||function(e){return-1!==e.indexOf("Edge/")}(e)}()?r.open():setTimeout(r.open,0))},r.onInputElementClick=function(e){e.stopPropagation()},r.onFileDialogCancel=function(){var e=r.props.onFileDialogCancel;r.isFileDialogActive&&setTimeout(function(){null!=r.input&&(r.input.files.length||(r.isFileDialogActive=!1,"function"==typeof e&&e()))},300)},r.onFocus=function(e){var n=r.props.onFocus;n&&n.call(r,e),S(e)||r.setState({isFocused:!0})},r.onBlur=function(e){var n=r.props.onBlur;n&&n.call(r,e),S(e)||r.setState({isFocused:!1})},r.onKeyDown=function(e){var n=r.props.onKeyDown;r.node.isEqualNode(e.target)&&(n&&n.call(r,e),S(e)||32!==e.keyCode&&13!==e.keyCode||(e.preventDefault(),r.open()))},r.composeHandler=function(e){return r.props.disabled?null:e},r.getRootProps=function(){var e,n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=n.refKey,o=void 0===t?"ref":t,i=n.onKeyDown,a=n.onFocus,u=n.onBlur,c=n.onClick,f=n.onDragStart,s=n.onDragEnter,l=n.onDragOver,p=n.onDragLeave,d=n.onDrop,v=D(n,["refKey","onKeyDown","onFocus","onBlur","onClick","onDragStart","onDragEnter","onDragOver","onDragLeave","onDrop"]);return m((e={onKeyDown:r.composeHandler(i?E(i,r.onKeyDown):r.onKeyDown),onFocus:r.composeHandler(a?E(a,r.onFocus):r.onFocus),onBlur:r.composeHandler(u?E(u,r.onBlur):r.onBlur),onClick:r.composeHandler(c?E(c,r.onClick):r.onClick),onDragStart:r.composeHandler(f?E(f,r.onDragStart):r.onDragStart),onDragEnter:r.composeHandler(s?E(s,r.onDragEnter):r.onDragEnter),onDragOver:r.composeHandler(l?E(l,r.onDragOver):r.onDragOver),onDragLeave:r.composeHandler(p?E(p,r.onDragLeave):r.onDragLeave),onDrop:r.composeHandler(d?E(d,r.onDrop):r.onDrop)},h(e,o,r.setNodeRef),h(e,"tabIndex",r.props.disabled?-1:0),e),v)},r.getInputProps=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=e.refKey,t=void 0===n?"ref":n,o=e.onChange,i=e.onClick,a=D(e,["refKey","onChange","onClick"]),u=r.props,c=u.accept,f=u.multiple,s=u.name,l=h({accept:c,type:"file",style:{display:"none"},multiple:x&&f,onChange:E(o,r.onDrop),onClick:E(i,r.onInputElementClick),autoComplete:"off",tabIndex:-1},t,r.setInputRef);return s&&s.length&&(l.name=s),m({},l,a)},r.setNodeRef=function(e){r.node=e},r.setInputRef=function(e){r.input=e},r.open=function(){r.isFileDialogActive=!0,r.input&&(r.input.value=null,r.input.click())},b(r,n)}return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Super expression must either be null or a function, not "+typeof n);e.prototype=Object.create(n&&n.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),n&&(Object.setPrototypeOf?Object.setPrototypeOf(e,n):e.__proto__=n)}(t,e.Component),y(t,[{key:"componentDidMount",value:function(){var e=this.props.preventDropOnDocument;this.dragTargets=[],e&&(document.addEventListener("dragover",j,!1),document.addEventListener("drop",this.onDocumentDrop,!1)),window.addEventListener("focus",this.onFileDialogCancel,!1)}},{key:"componentWillUnmount",value:function(){this.props.preventDropOnDocument&&(document.removeEventListener("dragover",j),document.removeEventListener("drop",this.onDocumentDrop)),window.removeEventListener("focus",this.onFileDialogCancel,!1)}},{key:"render",value:function(){var e,n,t=this.props,r=t.children,o=t.multiple,i=t.disabled,a=this.state,u=a.isDragActive,c=a.isFocused,f=a.draggedFiles,s=a.acceptedFiles,l=a.rejectedFiles,p=f.length,d=o||p<=1,v=p>0&&(e=f,n=this.props.accept,e.every(function(e){return O(e,n)}));return r({isDragActive:u,isDragAccept:v,isDragReject:p>0&&(!v||!d),draggedFiles:f,acceptedFiles:s,rejectedFiles:l,isFocused:c&&!i,getRootProps:this.getRootProps,getInputProps:this.getInputProps,open:this.open})}}]),t}();return A.propTypes={accept:n.oneOfType([n.string,n.arrayOf(n.string)]),children:n.func,disabled:n.bool,preventDropOnDocument:n.bool,multiple:n.bool,name:n.string,maxSize:n.number,minSize:n.number,getDataTransferItems:n.func,onClick:n.func,onFocus:n.func,onBlur:n.func,onKeyDown:n.func,onDrop:n.func,onDropAccepted:n.func,onDropRejected:n.func,onDragStart:n.func,onDragEnter:n.func,onDragOver:n.func,onDragLeave:n.func,onFileDialogCancel:n.func},A.defaultProps={preventDropOnDocument:!0,disabled:!1,multiple:!0,maxSize:1/0,minSize:0,getDataTransferItems:function(e){return t(this,void 0,void 0,function(){return r(this,function(n){return[2,(i=e,i.dataTransfer&&e.dataTransfer?function(e,n){return t(this,void 0,void 0,function(){var t;return r(this,function(r){switch(r.label){case 0:return t=Array.from(e.items).filter(function(e){return"file"===e.kind}),"drop"!==n?[3,2]:[4,Promise.all(t.map(function(e){return function(e){if("function"!=typeof e.webkitGetAsEntry)return c(e);var n=e.webkitGetAsEntry();return n&&n.isDirectory?s(n):c(e)}(e)}))];case 1:return[2,function e(n){return n.reduce(function(n,t){return function(){for(var e=[],n=0;n<arguments.length;n++)e=e.concat(o(arguments[n]));return e}(n,Array.isArray(t)?e(t):[t])},[])}(r.sent()).filter(function(e){return!u.includes(e.name)})];case 2:return[2,t]}})})}(e.dataTransfer,e.type):function(e){return(n=e.target,null!==n&&e.target.files?Array.from(e.target.files):[]).map(function(e){return a(e)});var n}(e))];var i})})}},A});
2
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VzIjpbIi4uL25vZGVfbW9kdWxlcy90c2xpYi90c2xpYi5lczYuanMiLCIuLi9ub2RlX21vZHVsZXMvZmlsZS1zZWxlY3Rvci9kaXN0L2VzNS9maWxlLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2ZpbGUtc2VsZWN0b3IvZGlzdC9lczUvZmlsZS1zZWxlY3Rvci5qcyIsIi4uL25vZGVfbW9kdWxlcy9hdHRyLWFjY2VwdC9kaXN0L2luZGV4LmpzIiwiLi4vc3JjL3V0aWxzL2luZGV4LmpzIiwiLi4vc3JjL2luZGV4LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qISAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG5Db3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTsgeW91IG1heSBub3QgdXNlXHJcbnRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlXHJcbkxpY2Vuc2UgYXQgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXHJcblxyXG5USElTIENPREUgSVMgUFJPVklERUQgT04gQU4gKkFTIElTKiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZXHJcbktJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04gQU5ZIElNUExJRURcclxuV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSxcclxuTUVSQ0hBTlRBQkxJVFkgT1IgTk9OLUlORlJJTkdFTUVOVC5cclxuXHJcblNlZSB0aGUgQXBhY2hlIFZlcnNpb24gMi4wIExpY2Vuc2UgZm9yIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9uc1xyXG5hbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXHJcbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovXHJcbi8qIGdsb2JhbCBSZWZsZWN0LCBQcm9taXNlICovXHJcblxyXG52YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uKGQsIGIpIHtcclxuICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcclxuICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XHJcbiAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoYi5oYXNPd25Qcm9wZXJ0eShwKSkgZFtwXSA9IGJbcF07IH07XHJcbiAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcclxufTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2V4dGVuZHMoZCwgYikge1xyXG4gICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcclxuICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxyXG4gICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xyXG59XHJcblxyXG5leHBvcnQgdmFyIF9fYXNzaWduID0gZnVuY3Rpb24oKSB7XHJcbiAgICBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gX19hc3NpZ24odCkge1xyXG4gICAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xyXG4gICAgICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpIHRbcF0gPSBzW3BdO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdDtcclxuICAgIH1cclxuICAgIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19yZXN0KHMsIGUpIHtcclxuICAgIHZhciB0ID0ge307XHJcbiAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkgJiYgZS5pbmRleE9mKHApIDwgMClcclxuICAgICAgICB0W3BdID0gc1twXTtcclxuICAgIGlmIChzICE9IG51bGwgJiYgdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPT09IFwiZnVuY3Rpb25cIilcclxuICAgICAgICBmb3IgKHZhciBpID0gMCwgcCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocyk7IGkgPCBwLmxlbmd0aDsgaSsrKSBpZiAoZS5pbmRleE9mKHBbaV0pIDwgMClcclxuICAgICAgICAgICAgdFtwW2ldXSA9IHNbcFtpXV07XHJcbiAgICByZXR1cm4gdDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcclxuICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XHJcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xyXG4gICAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcclxuICAgIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3BhcmFtKHBhcmFtSW5kZXgsIGRlY29yYXRvcikge1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQsIGtleSkgeyBkZWNvcmF0b3IodGFyZ2V0LCBrZXksIHBhcmFtSW5kZXgpOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX21ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlKSB7XHJcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QubWV0YWRhdGEgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIFJlZmxlY3QubWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hd2FpdGVyKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xyXG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XHJcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxyXG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxyXG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZShyZXN1bHQudmFsdWUpOyB9KS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XHJcbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xyXG4gICAgfSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2dlbmVyYXRvcih0aGlzQXJnLCBib2R5KSB7XHJcbiAgICB2YXIgXyA9IHsgbGFiZWw6IDAsIHNlbnQ6IGZ1bmN0aW9uKCkgeyBpZiAodFswXSAmIDEpIHRocm93IHRbMV07IHJldHVybiB0WzFdOyB9LCB0cnlzOiBbXSwgb3BzOiBbXSB9LCBmLCB5LCB0LCBnO1xyXG4gICAgcmV0dXJuIGcgPSB7IG5leHQ6IHZlcmIoMCksIFwidGhyb3dcIjogdmVyYigxKSwgXCJyZXR1cm5cIjogdmVyYigyKSB9LCB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgKGdbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpczsgfSksIGc7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgcmV0dXJuIGZ1bmN0aW9uICh2KSB7IHJldHVybiBzdGVwKFtuLCB2XSk7IH07IH1cclxuICAgIGZ1bmN0aW9uIHN0ZXAob3ApIHtcclxuICAgICAgICBpZiAoZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7XHJcbiAgICAgICAgd2hpbGUgKF8pIHRyeSB7XHJcbiAgICAgICAgICAgIGlmIChmID0gMSwgeSAmJiAodCA9IG9wWzBdICYgMiA/IHlbXCJyZXR1cm5cIl0gOiBvcFswXSA/IHlbXCJ0aHJvd1wiXSB8fCAoKHQgPSB5W1wicmV0dXJuXCJdKSAmJiB0LmNhbGwoeSksIDApIDogeS5uZXh0KSAmJiAhKHQgPSB0LmNhbGwoeSwgb3BbMV0pKS5kb25lKSByZXR1cm4gdDtcclxuICAgICAgICAgICAgaWYgKHkgPSAwLCB0KSBvcCA9IFtvcFswXSAmIDIsIHQudmFsdWVdO1xyXG4gICAgICAgICAgICBzd2l0Y2ggKG9wWzBdKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDA6IGNhc2UgMTogdCA9IG9wOyBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgNDogXy5sYWJlbCsrOyByZXR1cm4geyB2YWx1ZTogb3BbMV0sIGRvbmU6IGZhbHNlIH07XHJcbiAgICAgICAgICAgICAgICBjYXNlIDU6IF8ubGFiZWwrKzsgeSA9IG9wWzFdOyBvcCA9IFswXTsgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDc6IG9wID0gXy5vcHMucG9wKCk7IF8udHJ5cy5wb3AoKTsgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgICAgIGlmICghKHQgPSBfLnRyeXMsIHQgPSB0Lmxlbmd0aCA+IDAgJiYgdFt0Lmxlbmd0aCAtIDFdKSAmJiAob3BbMF0gPT09IDYgfHwgb3BbMF0gPT09IDIpKSB7IF8gPSAwOyBjb250aW51ZTsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gMyAmJiAoIXQgfHwgKG9wWzFdID4gdFswXSAmJiBvcFsxXSA8IHRbM10pKSkgeyBfLmxhYmVsID0gb3BbMV07IGJyZWFrOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSA2ICYmIF8ubGFiZWwgPCB0WzFdKSB7IF8ubGFiZWwgPSB0WzFdOyB0ID0gb3A7IGJyZWFrOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHQgJiYgXy5sYWJlbCA8IHRbMl0pIHsgXy5sYWJlbCA9IHRbMl07IF8ub3BzLnB1c2gob3ApOyBicmVhazsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0WzJdKSBfLm9wcy5wb3AoKTtcclxuICAgICAgICAgICAgICAgICAgICBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIG9wID0gYm9keS5jYWxsKHRoaXNBcmcsIF8pO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHsgb3AgPSBbNiwgZV07IHkgPSAwOyB9IGZpbmFsbHkgeyBmID0gdCA9IDA7IH1cclxuICAgICAgICBpZiAob3BbMF0gJiA1KSB0aHJvdyBvcFsxXTsgcmV0dXJuIHsgdmFsdWU6IG9wWzBdID8gb3BbMV0gOiB2b2lkIDAsIGRvbmU6IHRydWUgfTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZXhwb3J0U3RhcihtLCBleHBvcnRzKSB7XHJcbiAgICBmb3IgKHZhciBwIGluIG0pIGlmICghZXhwb3J0cy5oYXNPd25Qcm9wZXJ0eShwKSkgZXhwb3J0c1twXSA9IG1bcF07XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3ZhbHVlcyhvKSB7XHJcbiAgICB2YXIgbSA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl0sIGkgPSAwO1xyXG4gICAgaWYgKG0pIHJldHVybiBtLmNhbGwobyk7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgaWYgKG8gJiYgaSA+PSBvLmxlbmd0aCkgbyA9IHZvaWQgMDtcclxuICAgICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IG8gJiYgb1tpKytdLCBkb25lOiAhbyB9O1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3JlYWQobywgbikge1xyXG4gICAgdmFyIG0gPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb1tTeW1ib2wuaXRlcmF0b3JdO1xyXG4gICAgaWYgKCFtKSByZXR1cm4gbztcclxuICAgIHZhciBpID0gbS5jYWxsKG8pLCByLCBhciA9IFtdLCBlO1xyXG4gICAgdHJ5IHtcclxuICAgICAgICB3aGlsZSAoKG4gPT09IHZvaWQgMCB8fCBuLS0gPiAwKSAmJiAhKHIgPSBpLm5leHQoKSkuZG9uZSkgYXIucHVzaChyLnZhbHVlKTtcclxuICAgIH1cclxuICAgIGNhdGNoIChlcnJvcikgeyBlID0geyBlcnJvcjogZXJyb3IgfTsgfVxyXG4gICAgZmluYWxseSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKHIgJiYgIXIuZG9uZSAmJiAobSA9IGlbXCJyZXR1cm5cIl0pKSBtLmNhbGwoaSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZpbmFsbHkgeyBpZiAoZSkgdGhyb3cgZS5lcnJvcjsgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGFyO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19zcHJlYWQoKSB7XHJcbiAgICBmb3IgKHZhciBhciA9IFtdLCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKylcclxuICAgICAgICBhciA9IGFyLmNvbmNhdChfX3JlYWQoYXJndW1lbnRzW2ldKSk7XHJcbiAgICByZXR1cm4gYXI7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2F3YWl0KHYpIHtcclxuICAgIHJldHVybiB0aGlzIGluc3RhbmNlb2YgX19hd2FpdCA/ICh0aGlzLnYgPSB2LCB0aGlzKSA6IG5ldyBfX2F3YWl0KHYpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hc3luY0dlbmVyYXRvcih0aGlzQXJnLCBfYXJndW1lbnRzLCBnZW5lcmF0b3IpIHtcclxuICAgIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XHJcbiAgICB2YXIgZyA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSwgaSwgcSA9IFtdO1xyXG4gICAgcmV0dXJuIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiKSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpO1xyXG4gICAgZnVuY3Rpb24gdmVyYihuKSB7IGlmIChnW25dKSBpW25dID0gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChhLCBiKSB7IHEucHVzaChbbiwgdiwgYSwgYl0pID4gMSB8fCByZXN1bWUobiwgdik7IH0pOyB9OyB9XHJcbiAgICBmdW5jdGlvbiByZXN1bWUobiwgdikgeyB0cnkgeyBzdGVwKGdbbl0odikpOyB9IGNhdGNoIChlKSB7IHNldHRsZShxWzBdWzNdLCBlKTsgfSB9XHJcbiAgICBmdW5jdGlvbiBzdGVwKHIpIHsgci52YWx1ZSBpbnN0YW5jZW9mIF9fYXdhaXQgPyBQcm9taXNlLnJlc29sdmUoci52YWx1ZS52KS50aGVuKGZ1bGZpbGwsIHJlamVjdCkgOiBzZXR0bGUocVswXVsyXSwgcik7IH1cclxuICAgIGZ1bmN0aW9uIGZ1bGZpbGwodmFsdWUpIHsgcmVzdW1lKFwibmV4dFwiLCB2YWx1ZSk7IH1cclxuICAgIGZ1bmN0aW9uIHJlamVjdCh2YWx1ZSkgeyByZXN1bWUoXCJ0aHJvd1wiLCB2YWx1ZSk7IH1cclxuICAgIGZ1bmN0aW9uIHNldHRsZShmLCB2KSB7IGlmIChmKHYpLCBxLnNoaWZ0KCksIHEubGVuZ3RoKSByZXN1bWUocVswXVswXSwgcVswXVsxXSk7IH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNEZWxlZ2F0b3Iobykge1xyXG4gICAgdmFyIGksIHA7XHJcbiAgICByZXR1cm4gaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIsIGZ1bmN0aW9uIChlKSB7IHRocm93IGU7IH0pLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpO1xyXG4gICAgZnVuY3Rpb24gdmVyYihuLCBmKSB7IGlbbl0gPSBvW25dID8gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIChwID0gIXApID8geyB2YWx1ZTogX19hd2FpdChvW25dKHYpKSwgZG9uZTogbiA9PT0gXCJyZXR1cm5cIiB9IDogZiA/IGYodikgOiB2OyB9IDogZjsgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hc3luY1ZhbHVlcyhvKSB7XHJcbiAgICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xyXG4gICAgdmFyIG0gPSBvW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSwgaTtcclxuICAgIHJldHVybiBtID8gbS5jYWxsKG8pIDogKG8gPSB0eXBlb2YgX192YWx1ZXMgPT09IFwiZnVuY3Rpb25cIiA/IF9fdmFsdWVzKG8pIDogb1tTeW1ib2wuaXRlcmF0b3JdKCksIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiKSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpKTtcclxuICAgIGZ1bmN0aW9uIHZlcmIobikgeyBpW25dID0gb1tuXSAmJiBmdW5jdGlvbiAodikgeyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgeyB2ID0gb1tuXSh2KSwgc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgdi5kb25lLCB2LnZhbHVlKTsgfSk7IH07IH1cclxuICAgIGZ1bmN0aW9uIHNldHRsZShyZXNvbHZlLCByZWplY3QsIGQsIHYpIHsgUHJvbWlzZS5yZXNvbHZlKHYpLnRoZW4oZnVuY3Rpb24odikgeyByZXNvbHZlKHsgdmFsdWU6IHYsIGRvbmU6IGQgfSk7IH0sIHJlamVjdCk7IH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fbWFrZVRlbXBsYXRlT2JqZWN0KGNvb2tlZCwgcmF3KSB7XHJcbiAgICBpZiAoT2JqZWN0LmRlZmluZVByb3BlcnR5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjb29rZWQsIFwicmF3XCIsIHsgdmFsdWU6IHJhdyB9KTsgfSBlbHNlIHsgY29va2VkLnJhdyA9IHJhdzsgfVxyXG4gICAgcmV0dXJuIGNvb2tlZDtcclxufTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2ltcG9ydFN0YXIobW9kKSB7XHJcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xyXG4gICAgdmFyIHJlc3VsdCA9IHt9O1xyXG4gICAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrIGluIG1vZCkgaWYgKE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIHJlc3VsdFtrXSA9IG1vZFtrXTtcclxuICAgIHJlc3VsdC5kZWZhdWx0ID0gbW9kO1xyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9faW1wb3J0RGVmYXVsdChtb2QpIHtcclxuICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgZGVmYXVsdDogbW9kIH07XHJcbn1cclxuIiwiZXhwb3J0IHZhciBDT01NT05fTUlNRV9UWVBFUyA9IG5ldyBNYXAoW1xuICAgIFsnYXZpJywgJ3ZpZGVvL2F2aSddLFxuICAgIFsnZ2lmJywgJ2ltYWdlL2dpZiddLFxuICAgIFsnaWNvJywgJ2ltYWdlL3gtaWNvbiddLFxuICAgIFsnanBlZycsICdpbWFnZS9qcGVnJ10sXG4gICAgWydqcGcnLCAnaW1hZ2UvanBlZyddLFxuICAgIFsnbWt2JywgJ3ZpZGVvL3gtbWF0cm9za2EnXSxcbiAgICBbJ21vdicsICd2aWRlby9xdWlja3RpbWUnXSxcbiAgICBbJ21wNCcsICd2aWRlby9tcDQnXSxcbiAgICBbJ3BkZicsICdhcHBsaWNhdGlvbi9wZGYnXSxcbiAgICBbJ3BuZycsICdpbWFnZS9wbmcnXSxcbiAgICBbJ3ppcCcsICdhcHBsaWNhdGlvbi96aXAnXSxcbiAgICBbJ2RvYycsICdhcHBsaWNhdGlvbi9tc3dvcmQnXSxcbiAgICBbJ2RvY3gnLCAnYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LndvcmRwcm9jZXNzaW5nbWwuZG9jdW1lbnQnXVxuXSk7XG5leHBvcnQgZnVuY3Rpb24gdG9GaWxlV2l0aFBhdGgoZmlsZSwgcGF0aCkge1xuICAgIHZhciBmID0gd2l0aE1pbWVUeXBlKGZpbGUpO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmLCAncGF0aCcsIHtcbiAgICAgICAgdmFsdWU6IHR5cGVvZiBwYXRoID09PSAnc3RyaW5nJyA/IHBhdGggOiBmaWxlLm5hbWUsXG4gICAgICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiBmYWxzZVxuICAgIH0pO1xuICAgIHJldHVybiBmO1xufVxuZnVuY3Rpb24gd2l0aE1pbWVUeXBlKGZpbGUpIHtcbiAgICB2YXIgbmFtZSA9IGZpbGUubmFtZTtcbiAgICB2YXIgaGFzRXh0ZW5zaW9uID0gbmFtZSAmJiBuYW1lLmxhc3RJbmRleE9mKCcuJykgIT09IC0xO1xuICAgIGlmIChoYXNFeHRlbnNpb24gJiYgIWZpbGUudHlwZSkge1xuICAgICAgICB2YXIgZXh0ID0gbmFtZS5zcGxpdCgnLicpXG4gICAgICAgICAgICAucG9wKCkudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgdmFyIHR5cGUgPSBDT01NT05fTUlNRV9UWVBFUy5nZXQoZXh0KTtcbiAgICAgICAgaWYgKHR5cGUpIHtcbiAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmaWxlLCAndHlwZScsIHtcbiAgICAgICAgICAgICAgICB2YWx1ZTogdHlwZSxcbiAgICAgICAgICAgICAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiBmYWxzZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZpbGU7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1maWxlLmpzLm1hcCIsImltcG9ydCAqIGFzIHRzbGliXzEgZnJvbSBcInRzbGliXCI7XG5pbXBvcnQgeyB0b0ZpbGVXaXRoUGF0aCB9IGZyb20gJy4vZmlsZSc7XG52YXIgRklMRVNfVE9fSUdOT1JFID0gW1xuICAgICcuRFNfU3RvcmUnLFxuICAgICdUaHVtYnMuZGInIC8vIFdpbmRvd3Ncbl07XG4vKipcbiAqIENvbnZlcnQgYSBEcmFnRXZlbnQncyBEYXRhVHJhc2ZlciBvYmplY3QgdG8gYSBsaXN0IG9mIEZpbGUgb2JqZWN0c1xuICogTk9URTogSWYgc29tZSBvZiB0aGUgaXRlbXMgYXJlIGZvbGRlcnMsXG4gKiBldmVyeXRoaW5nIHdpbGwgYmUgZmxhdHRlbmVkIGFuZCBwbGFjZWQgaW4gdGhlIHNhbWUgbGlzdCBidXQgdGhlIHBhdGhzIHdpbGwgYmUga2VwdCBhcyBhIHtwYXRofSBwcm9wZXJ0eS5cbiAqIEBwYXJhbSBldnRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZyb21FdmVudChldnQpIHtcbiAgICByZXR1cm4gdHNsaWJfMS5fX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRzbGliXzEuX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgICAgICByZXR1cm4gWzIgLypyZXR1cm4qLywgaXNEcmFnRXZ0KGV2dCkgJiYgZXZ0LmRhdGFUcmFuc2ZlclxuICAgICAgICAgICAgICAgICAgICA/IGdldERhdGFUcmFuc2ZlckZpbGVzKGV2dC5kYXRhVHJhbnNmZXIsIGV2dC50eXBlKVxuICAgICAgICAgICAgICAgICAgICA6IGdldElucHV0RmlsZXMoZXZ0KV07XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gaXNEcmFnRXZ0KHZhbHVlKSB7XG4gICAgcmV0dXJuICEhdmFsdWUuZGF0YVRyYW5zZmVyO1xufVxuZnVuY3Rpb24gZ2V0SW5wdXRGaWxlcyhldnQpIHtcbiAgICB2YXIgZmlsZXMgPSBpc0lucHV0KGV2dC50YXJnZXQpXG4gICAgICAgID8gZXZ0LnRhcmdldC5maWxlc1xuICAgICAgICAgICAgPyBBcnJheS5mcm9tKGV2dC50YXJnZXQuZmlsZXMpXG4gICAgICAgICAgICA6IFtdXG4gICAgICAgIDogW107XG4gICAgcmV0dXJuIGZpbGVzLm1hcChmdW5jdGlvbiAoZmlsZSkgeyByZXR1cm4gdG9GaWxlV2l0aFBhdGgoZmlsZSk7IH0pO1xufVxuZnVuY3Rpb24gaXNJbnB1dCh2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZSAhPT0gbnVsbDtcbn1cbmZ1bmN0aW9uIGdldERhdGFUcmFuc2ZlckZpbGVzKGR0LCB0eXBlKSB7XG4gICAgcmV0dXJuIHRzbGliXzEuX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBpdGVtcywgZmlsZXM7XG4gICAgICAgIHJldHVybiB0c2xpYl8xLl9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgc3dpdGNoIChfYS5sYWJlbCkge1xuICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgaXRlbXMgPSBBcnJheS5mcm9tKGR0Lml0ZW1zKVxuICAgICAgICAgICAgICAgICAgICAgICAgLmZpbHRlcihmdW5jdGlvbiAoaXRlbSkgeyByZXR1cm4gaXRlbS5raW5kID09PSAnZmlsZSc7IH0pO1xuICAgICAgICAgICAgICAgICAgICBpZiAoISh0eXBlID09PSAnZHJvcCcpKSByZXR1cm4gWzMgLypicmVhayovLCAyXTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0IC8qeWllbGQqLywgUHJvbWlzZS5hbGwoaXRlbXMubWFwKGZ1bmN0aW9uIChpdGVtKSB7IHJldHVybiB0b0ZpbGVQcm9taXNlcyhpdGVtKTsgfSkpXTtcbiAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgIGZpbGVzID0gX2Euc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzIgLypyZXR1cm4qLywgZmxhdHRlbihmaWxlcylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKGZ1bmN0aW9uIChmaWxlKSB7IHJldHVybiAhRklMRVNfVE9fSUdOT1JFLmluY2x1ZGVzKGZpbGUubmFtZSk7IH0pXTtcbiAgICAgICAgICAgICAgICBjYXNlIDI6IHJldHVybiBbMiAvKnJldHVybiovLCBpdGVtc107XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0RhdGFUcmFuc2Zlckl0ZW1cbmZ1bmN0aW9uIHRvRmlsZVByb21pc2VzKGl0ZW0pIHtcbiAgICBpZiAodHlwZW9mIGl0ZW0ud2Via2l0R2V0QXNFbnRyeSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByZXR1cm4gZnJvbURhdGFUcmFuc2Zlckl0ZW0oaXRlbSk7XG4gICAgfVxuICAgIHZhciBlbnRyeSA9IGl0ZW0ud2Via2l0R2V0QXNFbnRyeSgpO1xuICAgIC8vIFNhZmFyaSBzdXBwb3J0cyBkcm9wcGluZyBhbiBpbWFnZSBub2RlIGZyb20gYSBkaWZmZXJlbnQgd2luZG93IGFuZCBjYW4gYmUgcmV0cmlldmVkIHVzaW5nXG4gICAgLy8gdGhlIERhdGFUcmFuc2Zlckl0ZW0uZ2V0QXNGaWxlKCkgQVBJXG4gICAgLy8gTk9URTogRmlsZVN5c3RlbUVudHJ5LmZpbGUoKSB0aHJvd3MgaWYgdHJ5aW5nIHRvIGdldCB0aGUgZmlsZVxuICAgIGlmIChlbnRyeSAmJiBlbnRyeS5pc0RpcmVjdG9yeSkge1xuICAgICAgICByZXR1cm4gZnJvbURpckVudHJ5KGVudHJ5KTtcbiAgICB9XG4gICAgcmV0dXJuIGZyb21EYXRhVHJhbnNmZXJJdGVtKGl0ZW0pO1xufVxuZnVuY3Rpb24gZmxhdHRlbihpdGVtcykge1xuICAgIHJldHVybiBpdGVtcy5yZWR1Y2UoZnVuY3Rpb24gKGFjYywgZmlsZXMpIHsgcmV0dXJuIHRzbGliXzEuX19zcHJlYWQoYWNjLCAoQXJyYXkuaXNBcnJheShmaWxlcykgPyBmbGF0dGVuKGZpbGVzKSA6IFtmaWxlc10pKTsgfSwgW10pO1xufVxuZnVuY3Rpb24gZnJvbURhdGFUcmFuc2Zlckl0ZW0oaXRlbSkge1xuICAgIHZhciBmaWxlID0gaXRlbS5nZXRBc0ZpbGUoKTtcbiAgICBpZiAoIWZpbGUpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGl0ZW0gKyBcIiBpcyBub3QgYSBGaWxlXCIpO1xuICAgIH1cbiAgICB2YXIgZndwID0gdG9GaWxlV2l0aFBhdGgoZmlsZSk7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShmd3ApO1xufVxuLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0ZpbGVTeXN0ZW1FbnRyeVxuZnVuY3Rpb24gZnJvbUVudHJ5KGVudHJ5KSB7XG4gICAgcmV0dXJuIHRzbGliXzEuX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0c2xpYl8xLl9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgcmV0dXJuIFsyIC8qcmV0dXJuKi8sIGVudHJ5LmlzRGlyZWN0b3J5ID8gZnJvbURpckVudHJ5KGVudHJ5KSA6IGZyb21GaWxlRW50cnkoZW50cnkpXTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG4vLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRmlsZVN5c3RlbURpcmVjdG9yeUVudHJ5XG5mdW5jdGlvbiBmcm9tRGlyRW50cnkoZW50cnkpIHtcbiAgICB2YXIgcmVhZGVyID0gZW50cnkuY3JlYXRlUmVhZGVyKCk7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgdmFyIGVudHJpZXMgPSBbXTtcbiAgICAgICAgZnVuY3Rpb24gcmVhZEVudHJpZXMoKSB7XG4gICAgICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICAgICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0ZpbGVTeXN0ZW1EaXJlY3RvcnlFbnRyeS9jcmVhdGVSZWFkZXJcbiAgICAgICAgICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9GaWxlU3lzdGVtRGlyZWN0b3J5UmVhZGVyL3JlYWRFbnRyaWVzXG4gICAgICAgICAgICByZWFkZXIucmVhZEVudHJpZXMoZnVuY3Rpb24gKGJhdGNoKSB7IHJldHVybiB0c2xpYl8xLl9fYXdhaXRlcihfdGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB2YXIgZmlsZXMsIGVycl8xLCBpdGVtcztcbiAgICAgICAgICAgICAgICByZXR1cm4gdHNsaWJfMS5fX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChfYS5sYWJlbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghIWJhdGNoLmxlbmd0aCkgcmV0dXJuIFszIC8qYnJlYWsqLywgNV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2EubGFiZWwgPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9hLnRyeXMucHVzaChbMSwgMywgLCA0XSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0IC8qeWllbGQqLywgUHJvbWlzZS5hbGwoZW50cmllcyldO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVzID0gX2Euc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZmlsZXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMyAvKmJyZWFrKi8sIDRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycl8xID0gX2Euc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnJfMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFszIC8qYnJlYWsqLywgNF07XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiBbMyAvKmJyZWFrKi8sIDZdO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zID0gUHJvbWlzZS5hbGwoYmF0Y2gubWFwKGZyb21FbnRyeSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJpZXMucHVzaChpdGVtcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ29udGludWUgcmVhZGluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRFbnRyaWVzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2EubGFiZWwgPSA2O1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA2OiByZXR1cm4gWzIgLypyZXR1cm4qL107XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pOyB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZWFkRW50cmllcygpO1xuICAgIH0pO1xufVxuLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0ZpbGVTeXN0ZW1GaWxlRW50cnlcbmZ1bmN0aW9uIGZyb21GaWxlRW50cnkoZW50cnkpIHtcbiAgICByZXR1cm4gdHNsaWJfMS5fX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRzbGliXzEuX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgICAgICByZXR1cm4gWzIgLypyZXR1cm4qLywgbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgICAgICAgICBlbnRyeS5maWxlKGZ1bmN0aW9uIChmaWxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZndwID0gdG9GaWxlV2l0aFBhdGgoZmlsZSwgZW50cnkuZnVsbFBhdGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShmd3ApO1xuICAgICAgICAgICAgICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSldO1xuICAgICAgICB9KTtcbiAgICB9KTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWZpbGUtc2VsZWN0b3IuanMubWFwIiwibW9kdWxlLmV4cG9ydHM9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gbihlKXtpZihyW2VdKXJldHVybiByW2VdLmV4cG9ydHM7dmFyIG89cltlXT17aTplLGw6ITEsZXhwb3J0czp7fX07cmV0dXJuIHRbZV0uY2FsbChvLmV4cG9ydHMsbyxvLmV4cG9ydHMsbiksby5sPSEwLG8uZXhwb3J0c312YXIgcj17fTtyZXR1cm4gbi5tPXQsbi5jPXIsbi5kPWZ1bmN0aW9uKHQscixlKXtuLm8odCxyKXx8T2JqZWN0LmRlZmluZVByb3BlcnR5KHQscix7Y29uZmlndXJhYmxlOiExLGVudW1lcmFibGU6ITAsZ2V0OmV9KX0sbi5uPWZ1bmN0aW9uKHQpe3ZhciByPXQmJnQuX19lc01vZHVsZT9mdW5jdGlvbigpe3JldHVybiB0LmRlZmF1bHR9OmZ1bmN0aW9uKCl7cmV0dXJuIHR9O3JldHVybiBuLmQocixcImFcIixyKSxyfSxuLm89ZnVuY3Rpb24odCxuKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbil9LG4ucD1cIlwiLG4obi5zPTEzKX0oW2Z1bmN0aW9uKHQsbil7dmFyIHI9dC5leHBvcnRzPVwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3cmJndpbmRvdy5NYXRoPT1NYXRoP3dpbmRvdzpcInVuZGVmaW5lZFwiIT10eXBlb2Ygc2VsZiYmc2VsZi5NYXRoPT1NYXRoP3NlbGY6RnVuY3Rpb24oXCJyZXR1cm4gdGhpc1wiKSgpO1wibnVtYmVyXCI9PXR5cGVvZiBfX2cmJihfX2c9cil9LGZ1bmN0aW9uKHQsbil7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVyblwib2JqZWN0XCI9PXR5cGVvZiB0P251bGwhPT10OlwiZnVuY3Rpb25cIj09dHlwZW9mIHR9fSxmdW5jdGlvbih0LG4pe3ZhciByPXQuZXhwb3J0cz17dmVyc2lvbjpcIjIuNS4wXCJ9O1wibnVtYmVyXCI9PXR5cGVvZiBfX2UmJihfX2U9cil9LGZ1bmN0aW9uKHQsbixyKXt0LmV4cG9ydHM9IXIoNCkoZnVuY3Rpb24oKXtyZXR1cm4gNyE9T2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LFwiYVwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gN319KS5hfSl9LGZ1bmN0aW9uKHQsbil7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3RyeXtyZXR1cm4hIXQoKX1jYXRjaCh0KXtyZXR1cm4hMH19fSxmdW5jdGlvbih0LG4pe3ZhciByPXt9LnRvU3RyaW5nO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gci5jYWxsKHQpLnNsaWNlKDgsLTEpfX0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoMzIpKFwid2tzXCIpLG89cig5KSxpPXIoMCkuU3ltYm9sLHU9XCJmdW5jdGlvblwiPT10eXBlb2YgaTsodC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBlW3RdfHwoZVt0XT11JiZpW3RdfHwodT9pOm8pKFwiU3ltYm9sLlwiK3QpKX0pLnN0b3JlPWV9LGZ1bmN0aW9uKHQsbixyKXt2YXIgZT1yKDApLG89cigyKSxpPXIoOCksdT1yKDIyKSxjPXIoMTApLGY9ZnVuY3Rpb24odCxuLHIpe3ZhciBhLHMscCxsLHY9dCZmLkYseT10JmYuRyxoPXQmZi5TLGQ9dCZmLlAseD10JmYuQixnPXk/ZTpoP2Vbbl18fChlW25dPXt9KTooZVtuXXx8e30pLnByb3RvdHlwZSxtPXk/bzpvW25dfHwob1tuXT17fSksYj1tLnByb3RvdHlwZXx8KG0ucHJvdG90eXBlPXt9KTt5JiYocj1uKTtmb3IoYSBpbiByKXM9IXYmJmcmJnZvaWQgMCE9PWdbYV0scD0ocz9nOnIpW2FdLGw9eCYmcz9jKHAsZSk6ZCYmXCJmdW5jdGlvblwiPT10eXBlb2YgcD9jKEZ1bmN0aW9uLmNhbGwscCk6cCxnJiZ1KGcsYSxwLHQmZi5VKSxtW2FdIT1wJiZpKG0sYSxsKSxkJiZiW2FdIT1wJiYoYlthXT1wKX07ZS5jb3JlPW8sZi5GPTEsZi5HPTIsZi5TPTQsZi5QPTgsZi5CPTE2LGYuVz0zMixmLlU9NjQsZi5SPTEyOCx0LmV4cG9ydHM9Zn0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoMTYpLG89cigyMSk7dC5leHBvcnRzPXIoMyk/ZnVuY3Rpb24odCxuLHIpe3JldHVybiBlLmYodCxuLG8oMSxyKSl9OmZ1bmN0aW9uKHQsbixyKXtyZXR1cm4gdFtuXT1yLHR9fSxmdW5jdGlvbih0LG4pe3ZhciByPTAsZT1NYXRoLnJhbmRvbSgpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm5cIlN5bWJvbChcIi5jb25jYXQodm9pZCAwPT09dD9cIlwiOnQsXCIpX1wiLCgrK3IrZSkudG9TdHJpbmcoMzYpKX19LGZ1bmN0aW9uKHQsbixyKXt2YXIgZT1yKDI0KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxuLHIpe2lmKGUodCksdm9pZCAwPT09bilyZXR1cm4gdDtzd2l0Y2gocil7Y2FzZSAxOnJldHVybiBmdW5jdGlvbihyKXtyZXR1cm4gdC5jYWxsKG4scil9O2Nhc2UgMjpyZXR1cm4gZnVuY3Rpb24ocixlKXtyZXR1cm4gdC5jYWxsKG4scixlKX07Y2FzZSAzOnJldHVybiBmdW5jdGlvbihyLGUsbyl7cmV0dXJuIHQuY2FsbChuLHIsZSxvKX19cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHQuYXBwbHkobixhcmd1bWVudHMpfX19LGZ1bmN0aW9uKHQsbil7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKHZvaWQgMD09dCl0aHJvdyBUeXBlRXJyb3IoXCJDYW4ndCBjYWxsIG1ldGhvZCBvbiAgXCIrdCk7cmV0dXJuIHR9fSxmdW5jdGlvbih0LG4scil7dmFyIGU9cigyOCksbz1NYXRoLm1pbjt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHQ+MD9vKGUodCksOTAwNzE5OTI1NDc0MDk5MSk6MH19LGZ1bmN0aW9uKHQsbixyKXtcInVzZSBzdHJpY3RcIjtuLl9fZXNNb2R1bGU9ITAsbi5kZWZhdWx0PWZ1bmN0aW9uKHQsbil7aWYodCYmbil7dmFyIHI9QXJyYXkuaXNBcnJheShuKT9uOm4uc3BsaXQoXCIsXCIpLGU9dC5uYW1lfHxcIlwiLG89dC50eXBlfHxcIlwiLGk9by5yZXBsYWNlKC9cXC8uKiQvLFwiXCIpO3JldHVybiByLnNvbWUoZnVuY3Rpb24odCl7dmFyIG49dC50cmltKCk7cmV0dXJuXCIuXCI9PT1uLmNoYXJBdCgwKT9lLnRvTG93ZXJDYXNlKCkuZW5kc1dpdGgobi50b0xvd2VyQ2FzZSgpKTpuLmVuZHNXaXRoKFwiLypcIik/aT09PW4ucmVwbGFjZSgvXFwvLiokLyxcIlwiKTpvPT09bn0pfXJldHVybiEwfSxyKDE0KSxyKDM0KX0sZnVuY3Rpb24odCxuLHIpe3IoMTUpLHQuZXhwb3J0cz1yKDIpLkFycmF5LnNvbWV9LGZ1bmN0aW9uKHQsbixyKXtcInVzZSBzdHJpY3RcIjt2YXIgZT1yKDcpLG89cigyNSkoMyk7ZShlLlArZS5GKiFyKDMzKShbXS5zb21lLCEwKSxcIkFycmF5XCIse3NvbWU6ZnVuY3Rpb24odCl7cmV0dXJuIG8odGhpcyx0LGFyZ3VtZW50c1sxXSl9fSl9LGZ1bmN0aW9uKHQsbixyKXt2YXIgZT1yKDE3KSxvPXIoMTgpLGk9cigyMCksdT1PYmplY3QuZGVmaW5lUHJvcGVydHk7bi5mPXIoMyk/T2JqZWN0LmRlZmluZVByb3BlcnR5OmZ1bmN0aW9uKHQsbixyKXtpZihlKHQpLG49aShuLCEwKSxlKHIpLG8pdHJ5e3JldHVybiB1KHQsbixyKX1jYXRjaCh0KXt9aWYoXCJnZXRcImluIHJ8fFwic2V0XCJpbiByKXRocm93IFR5cGVFcnJvcihcIkFjY2Vzc29ycyBub3Qgc3VwcG9ydGVkIVwiKTtyZXR1cm5cInZhbHVlXCJpbiByJiYodFtuXT1yLnZhbHVlKSx0fX0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoMSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKCFlKHQpKXRocm93IFR5cGVFcnJvcih0K1wiIGlzIG5vdCBhbiBvYmplY3QhXCIpO3JldHVybiB0fX0sZnVuY3Rpb24odCxuLHIpe3QuZXhwb3J0cz0hcigzKSYmIXIoNCkoZnVuY3Rpb24oKXtyZXR1cm4gNyE9T2JqZWN0LmRlZmluZVByb3BlcnR5KHIoMTkpKFwiZGl2XCIpLFwiYVwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gN319KS5hfSl9LGZ1bmN0aW9uKHQsbixyKXt2YXIgZT1yKDEpLG89cigwKS5kb2N1bWVudCxpPWUobykmJmUoby5jcmVhdGVFbGVtZW50KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGk/by5jcmVhdGVFbGVtZW50KHQpOnt9fX0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoMSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsbil7aWYoIWUodCkpcmV0dXJuIHQ7dmFyIHIsbztpZihuJiZcImZ1bmN0aW9uXCI9PXR5cGVvZihyPXQudG9TdHJpbmcpJiYhZShvPXIuY2FsbCh0KSkpcmV0dXJuIG87aWYoXCJmdW5jdGlvblwiPT10eXBlb2Yocj10LnZhbHVlT2YpJiYhZShvPXIuY2FsbCh0KSkpcmV0dXJuIG87aWYoIW4mJlwiZnVuY3Rpb25cIj09dHlwZW9mKHI9dC50b1N0cmluZykmJiFlKG89ci5jYWxsKHQpKSlyZXR1cm4gbzt0aHJvdyBUeXBlRXJyb3IoXCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWVcIil9fSxmdW5jdGlvbih0LG4pe3QuZXhwb3J0cz1mdW5jdGlvbih0LG4pe3JldHVybntlbnVtZXJhYmxlOiEoMSZ0KSxjb25maWd1cmFibGU6ISgyJnQpLHdyaXRhYmxlOiEoNCZ0KSx2YWx1ZTpufX19LGZ1bmN0aW9uKHQsbixyKXt2YXIgZT1yKDApLG89cig4KSxpPXIoMjMpLHU9cig5KShcInNyY1wiKSxjPUZ1bmN0aW9uLnRvU3RyaW5nLGY9KFwiXCIrYykuc3BsaXQoXCJ0b1N0cmluZ1wiKTtyKDIpLmluc3BlY3RTb3VyY2U9ZnVuY3Rpb24odCl7cmV0dXJuIGMuY2FsbCh0KX0sKHQuZXhwb3J0cz1mdW5jdGlvbih0LG4scixjKXt2YXIgYT1cImZ1bmN0aW9uXCI9PXR5cGVvZiByO2EmJihpKHIsXCJuYW1lXCIpfHxvKHIsXCJuYW1lXCIsbikpLHRbbl0hPT1yJiYoYSYmKGkocix1KXx8byhyLHUsdFtuXT9cIlwiK3Rbbl06Zi5qb2luKFN0cmluZyhuKSkpKSx0PT09ZT90W25dPXI6Yz90W25dP3Rbbl09cjpvKHQsbixyKTooZGVsZXRlIHRbbl0sbyh0LG4scikpKX0pKEZ1bmN0aW9uLnByb3RvdHlwZSxcInRvU3RyaW5nXCIsZnVuY3Rpb24oKXtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiB0aGlzJiZ0aGlzW3VdfHxjLmNhbGwodGhpcyl9KX0sZnVuY3Rpb24odCxuKXt2YXIgcj17fS5oYXNPd25Qcm9wZXJ0eTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxuKXtyZXR1cm4gci5jYWxsKHQsbil9fSxmdW5jdGlvbih0LG4pe3QuZXhwb3J0cz1mdW5jdGlvbih0KXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiB0KXRocm93IFR5cGVFcnJvcih0K1wiIGlzIG5vdCBhIGZ1bmN0aW9uIVwiKTtyZXR1cm4gdH19LGZ1bmN0aW9uKHQsbixyKXt2YXIgZT1yKDEwKSxvPXIoMjYpLGk9cigyNyksdT1yKDEyKSxjPXIoMjkpO3QuZXhwb3J0cz1mdW5jdGlvbih0LG4pe3ZhciByPTE9PXQsZj0yPT10LGE9Mz09dCxzPTQ9PXQscD02PT10LGw9NT09dHx8cCx2PW58fGM7cmV0dXJuIGZ1bmN0aW9uKG4sYyx5KXtmb3IodmFyIGgsZCx4PWkobiksZz1vKHgpLG09ZShjLHksMyksYj11KGcubGVuZ3RoKSxfPTAsdz1yP3YobixiKTpmP3YobiwwKTp2b2lkIDA7Yj5fO18rKylpZigobHx8XyBpbiBnKSYmKGg9Z1tfXSxkPW0oaCxfLHgpLHQpKWlmKHIpd1tfXT1kO2Vsc2UgaWYoZClzd2l0Y2godCl7Y2FzZSAzOnJldHVybiEwO2Nhc2UgNTpyZXR1cm4gaDtjYXNlIDY6cmV0dXJuIF87Y2FzZSAyOncucHVzaChoKX1lbHNlIGlmKHMpcmV0dXJuITE7cmV0dXJuIHA/LTE6YXx8cz9zOnd9fX0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoNSk7dC5leHBvcnRzPU9iamVjdChcInpcIikucHJvcGVydHlJc0VudW1lcmFibGUoMCk/T2JqZWN0OmZ1bmN0aW9uKHQpe3JldHVyblwiU3RyaW5nXCI9PWUodCk/dC5zcGxpdChcIlwiKTpPYmplY3QodCl9fSxmdW5jdGlvbih0LG4scil7dmFyIGU9cigxMSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBPYmplY3QoZSh0KSl9fSxmdW5jdGlvbih0LG4pe3ZhciByPU1hdGguY2VpbCxlPU1hdGguZmxvb3I7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBpc05hTih0PSt0KT8wOih0PjA/ZTpyKSh0KX19LGZ1bmN0aW9uKHQsbixyKXt2YXIgZT1yKDMwKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxuKXtyZXR1cm4gbmV3KGUodCkpKG4pfX0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoMSksbz1yKDMxKSxpPXIoNikoXCJzcGVjaWVzXCIpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgbjtyZXR1cm4gbyh0KSYmKG49dC5jb25zdHJ1Y3RvcixcImZ1bmN0aW9uXCIhPXR5cGVvZiBufHxuIT09QXJyYXkmJiFvKG4ucHJvdG90eXBlKXx8KG49dm9pZCAwKSxlKG4pJiZudWxsPT09KG49bltpXSkmJihuPXZvaWQgMCkpLHZvaWQgMD09PW4/QXJyYXk6bn19LGZ1bmN0aW9uKHQsbixyKXt2YXIgZT1yKDUpO3QuZXhwb3J0cz1BcnJheS5pc0FycmF5fHxmdW5jdGlvbih0KXtyZXR1cm5cIkFycmF5XCI9PWUodCl9fSxmdW5jdGlvbih0LG4scil7dmFyIGU9cigwKSxvPWVbXCJfX2NvcmUtanNfc2hhcmVkX19cIl18fChlW1wiX19jb3JlLWpzX3NoYXJlZF9fXCJdPXt9KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIG9bdF18fChvW3RdPXt9KX19LGZ1bmN0aW9uKHQsbixyKXtcInVzZSBzdHJpY3RcIjt2YXIgZT1yKDQpO3QuZXhwb3J0cz1mdW5jdGlvbih0LG4pe3JldHVybiEhdCYmZShmdW5jdGlvbigpe24/dC5jYWxsKG51bGwsZnVuY3Rpb24oKXt9LDEpOnQuY2FsbChudWxsKX0pfX0sZnVuY3Rpb24odCxuLHIpe3IoMzUpLHQuZXhwb3J0cz1yKDIpLlN0cmluZy5lbmRzV2l0aH0sZnVuY3Rpb24odCxuLHIpe1widXNlIHN0cmljdFwiO3ZhciBlPXIoNyksbz1yKDEyKSxpPXIoMzYpLHU9XCJcIi5lbmRzV2l0aDtlKGUuUCtlLkYqcigzOCkoXCJlbmRzV2l0aFwiKSxcIlN0cmluZ1wiLHtlbmRzV2l0aDpmdW5jdGlvbih0KXt2YXIgbj1pKHRoaXMsdCxcImVuZHNXaXRoXCIpLHI9YXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDAsZT1vKG4ubGVuZ3RoKSxjPXZvaWQgMD09PXI/ZTpNYXRoLm1pbihvKHIpLGUpLGY9U3RyaW5nKHQpO3JldHVybiB1P3UuY2FsbChuLGYsYyk6bi5zbGljZShjLWYubGVuZ3RoLGMpPT09Zn19KX0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoMzcpLG89cigxMSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsbixyKXtpZihlKG4pKXRocm93IFR5cGVFcnJvcihcIlN0cmluZyNcIityK1wiIGRvZXNuJ3QgYWNjZXB0IHJlZ2V4IVwiKTtyZXR1cm4gU3RyaW5nKG8odCkpfX0sZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIoMSksbz1yKDUpLGk9cig2KShcIm1hdGNoXCIpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgbjtyZXR1cm4gZSh0KSYmKHZvaWQgMCE9PShuPXRbaV0pPyEhbjpcIlJlZ0V4cFwiPT1vKHQpKX19LGZ1bmN0aW9uKHQsbixyKXt2YXIgZT1yKDYpKFwibWF0Y2hcIik7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBuPS8uLzt0cnl7XCIvLi9cIlt0XShuKX1jYXRjaChyKXt0cnl7cmV0dXJuIG5bZV09ITEsIVwiLy4vXCJbdF0obil9Y2F0Y2godCl7fX1yZXR1cm4hMH19XSk7IiwiaW1wb3J0IGFjY2VwdHMgZnJvbSAnYXR0ci1hY2NlcHQnXG5cbmV4cG9ydCBjb25zdCBzdXBwb3J0TXVsdGlwbGUgPVxuICB0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnICYmIGRvY3VtZW50ICYmIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnRcbiAgICA/ICdtdWx0aXBsZScgaW4gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKVxuICAgIDogdHJ1ZVxuXG4vLyBGaXJlZm94IHZlcnNpb25zIHByaW9yIHRvIDUzIHJldHVybiBhIGJvZ3VzIE1JTUUgdHlwZSBmb3IgZXZlcnkgZmlsZSBkcmFnLCBzbyBkcmFnb3ZlcnMgd2l0aFxuLy8gdGhhdCBNSU1FIHR5cGUgd2lsbCBhbHdheXMgYmUgYWNjZXB0ZWRcbmV4cG9ydCBmdW5jdGlvbiBmaWxlQWNjZXB0ZWQoZmlsZSwgYWNjZXB0KSB7XG4gIHJldHVybiBmaWxlLnR5cGUgPT09ICdhcHBsaWNhdGlvbi94LW1vei1maWxlJyB8fCBhY2NlcHRzKGZpbGUsIGFjY2VwdClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpbGVNYXRjaFNpemUoZmlsZSwgbWF4U2l6ZSwgbWluU2l6ZSkge1xuICByZXR1cm4gZmlsZS5zaXplIDw9IG1heFNpemUgJiYgZmlsZS5zaXplID49IG1pblNpemVcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFsbEZpbGVzQWNjZXB0ZWQoZmlsZXMsIGFjY2VwdCkge1xuICByZXR1cm4gZmlsZXMuZXZlcnkoZmlsZSA9PiBmaWxlQWNjZXB0ZWQoZmlsZSwgYWNjZXB0KSlcbn1cblxuLy8gUmVhY3QncyBzeW50aGV0aWMgZXZlbnRzIGhhcyBldnQuaXNQcm9wYWdhdGlvblN0b3BwZWQsXG4vLyBidXQgdG8gcmVtYWluIGNvbXBhdGliaWxpdHkgd2l0aCBvdGhlciBsaWJzIChQcmVhY3QpIGZhbGwgYmFja1xuLy8gdG8gY2hlY2sgZXZ0LmNhbmNlbEJ1YmJsZVxuZXhwb3J0IGZ1bmN0aW9uIGlzUHJvcGFnYXRpb25TdG9wcGVkKGV2dCkge1xuICBpZiAodHlwZW9mIGV2dC5pc1Byb3BhZ2F0aW9uU3RvcHBlZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBldnQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKVxuICB9IGVsc2UgaWYgKHR5cGVvZiBldnQuY2FuY2VsQnViYmxlICE9PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiBldnQuY2FuY2VsQnViYmxlXG4gIH1cbiAgcmV0dXJuIGZhbHNlXG59XG5cbi8vIFJlYWN0J3Mgc3ludGhldGljIGV2ZW50cyBoYXMgZXZ0LmlzRGVmYXVsdFByZXZlbnRlZCxcbi8vIGJ1dCB0byByZW1haW4gY29tcGF0aWJpbGl0eSB3aXRoIG90aGVyIGxpYnMgKFByZWFjdCkgZmlyc3Rcbi8vIGNoZWNrIGV2dC5kZWZhdWx0UHJldmVudGVkXG5leHBvcnQgZnVuY3Rpb24gaXNEZWZhdWx0UHJldmVudGVkKGV2dCkge1xuICBpZiAodHlwZW9mIGV2dC5kZWZhdWx0UHJldmVudGVkICE9PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiBldnQuZGVmYXVsdFByZXZlbnRlZFxuICB9IGVsc2UgaWYgKHR5cGVvZiBldnQuaXNEZWZhdWx0UHJldmVudGVkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIGV2dC5pc0RlZmF1bHRQcmV2ZW50ZWQoKVxuICB9XG4gIHJldHVybiBmYWxzZVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNEcmFnRGF0YVdpdGhGaWxlcyhldnQpIHtcbiAgaWYgKCFldnQuZGF0YVRyYW5zZmVyKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRGF0YVRyYW5zZmVyL3R5cGVzXG4gIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9IVE1MX0RyYWdfYW5kX0Ryb3BfQVBJL1JlY29tbWVuZGVkX2RyYWdfdHlwZXMjZmlsZVxuICByZXR1cm4gQXJyYXkucHJvdG90eXBlLnNvbWUuY2FsbChcbiAgICBldnQuZGF0YVRyYW5zZmVyLnR5cGVzLFxuICAgIHR5cGUgPT4gdHlwZSA9PT0gJ0ZpbGVzJyB8fCB0eXBlID09PSAnYXBwbGljYXRpb24veC1tb3otZmlsZSdcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNLaW5kRmlsZShpdGVtKSB7XG4gIHJldHVybiB0eXBlb2YgaXRlbSA9PT0gJ29iamVjdCcgJiYgaXRlbSAhPT0gbnVsbCAmJiBpdGVtLmtpbmQgPT09ICdmaWxlJ1xufVxuXG4vLyBhbGxvdyB0aGUgZW50aXJlIGRvY3VtZW50IHRvIGJlIGEgZHJhZyB0YXJnZXRcbmV4cG9ydCBmdW5jdGlvbiBvbkRvY3VtZW50RHJhZ092ZXIoZXZ0KSB7XG4gIGV2dC5wcmV2ZW50RGVmYXVsdCgpXG59XG5cbmZ1bmN0aW9uIGlzSWUodXNlckFnZW50KSB7XG4gIHJldHVybiB1c2VyQWdlbnQuaW5kZXhPZignTVNJRScpICE9PSAtMSB8fCB1c2VyQWdlbnQuaW5kZXhPZignVHJpZGVudC8nKSAhPT0gLTFcbn1cblxuZnVuY3Rpb24gaXNFZGdlKHVzZXJBZ2VudCkge1xuICByZXR1cm4gdXNlckFnZW50LmluZGV4T2YoJ0VkZ2UvJykgIT09IC0xXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0llT3JFZGdlKHVzZXJBZ2VudCA9IHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50KSB7XG4gIHJldHVybiBpc0llKHVzZXJBZ2VudCkgfHwgaXNFZGdlKHVzZXJBZ2VudClcbn1cblxuLyoqXG4gKiBUaGlzIGlzIGludGVuZGVkIHRvIGJlIHVzZWQgdG8gY29tcG9zZSBldmVudCBoYW5kbGVyc1xuICogVGhleSBhcmUgZXhlY3V0ZWQgaW4gb3JkZXIgdW50aWwgb25lIG9mIHRoZW0gY2FsbHMgYGV2ZW50LnByZXZlbnREZWZhdWx0KClgLlxuICogTm90IHN1cmUgdGhpcyBpcyB0aGUgYmVzdCB3YXkgdG8gZG8gdGhpcywgYnV0IGl0IHNlZW1zIGxlZ2l0LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm5zIHRoZSBldmVudCBoYW5sZGVyIGZ1bmN0aW9uc1xuICogQHJldHVybiB7RnVuY3Rpb259IHRoZSBldmVudCBoYW5kbGVyIHRvIGFkZCB0byBhbiBlbGVtZW50XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21wb3NlRXZlbnRIYW5kbGVycyguLi5mbnMpIHtcbiAgcmV0dXJuIChldmVudCwgLi4uYXJncykgPT5cbiAgICBmbnMuc29tZShmbiA9PiB7XG4gICAgICBmbiAmJiBmbihldmVudCwgLi4uYXJncylcbiAgICAgIHJldHVybiBldmVudC5kZWZhdWx0UHJldmVudGVkXG4gICAgfSlcbn1cbiIsIi8qIGVzbGludCBwcmVmZXItdGVtcGxhdGU6IDAgKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgZnJvbUV2ZW50IH0gZnJvbSAnZmlsZS1zZWxlY3RvcidcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcydcbmltcG9ydCB7XG4gIGlzRHJhZ0RhdGFXaXRoRmlsZXMsXG4gIHN1cHBvcnRNdWx0aXBsZSxcbiAgZmlsZUFjY2VwdGVkLFxuICBhbGxGaWxlc0FjY2VwdGVkLFxuICBmaWxlTWF0Y2hTaXplLFxuICBvbkRvY3VtZW50RHJhZ092ZXIsXG4gIGlzSWVPckVkZ2UsXG4gIGNvbXBvc2VFdmVudEhhbmRsZXJzLFxuICBpc1Byb3BhZ2F0aW9uU3RvcHBlZCxcbiAgaXNEZWZhdWx0UHJldmVudGVkXG59IGZyb20gJy4vdXRpbHMnXG5cbmNsYXNzIERyb3B6b25lIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgc3RhdGUgPSB7XG4gICAgZHJhZ2dlZEZpbGVzOiBbXSxcbiAgICBhY2NlcHRlZEZpbGVzOiBbXSxcbiAgICByZWplY3RlZEZpbGVzOiBbXVxuICB9XG5cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgY29uc3QgeyBwcmV2ZW50RHJvcE9uRG9jdW1lbnQgfSA9IHRoaXMucHJvcHNcbiAgICB0aGlzLmRyYWdUYXJnZXRzID0gW11cblxuICAgIGlmIChwcmV2ZW50RHJvcE9uRG9jdW1lbnQpIHtcbiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWdvdmVyJywgb25Eb2N1bWVudERyYWdPdmVyLCBmYWxzZSlcbiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2Ryb3AnLCB0aGlzLm9uRG9jdW1lbnREcm9wLCBmYWxzZSlcbiAgICB9XG5cbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignZm9jdXMnLCB0aGlzLm9uRmlsZURpYWxvZ0NhbmNlbCwgZmFsc2UpXG4gIH1cblxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICBjb25zdCB7IHByZXZlbnREcm9wT25Eb2N1bWVudCB9ID0gdGhpcy5wcm9wc1xuICAgIGlmIChwcmV2ZW50RHJvcE9uRG9jdW1lbnQpIHtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2RyYWdvdmVyJywgb25Eb2N1bWVudERyYWdPdmVyKVxuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignZHJvcCcsIHRoaXMub25Eb2N1bWVudERyb3ApXG4gICAgfVxuXG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2ZvY3VzJywgdGhpcy5vbkZpbGVEaWFsb2dDYW5jZWwsIGZhbHNlKVxuICB9XG5cbiAgaXNGaWxlRGlhbG9nQWN0aXZlID0gZmFsc2VcblxuICBvbkRvY3VtZW50RHJvcCA9IGV2dCA9PiB7XG4gICAgaWYgKHRoaXMubm9kZSAmJiB0aGlzLm5vZGUuY29udGFpbnMoZXZ0LnRhcmdldCkpIHtcbiAgICAgIC8vIGlmIHdlIGludGVyY2VwdGVkIGFuIGV2ZW50IGZvciBvdXIgaW5zdGFuY2UsIGxldCBpdCBwcm9wYWdhdGUgZG93biB0byB0aGUgaW5zdGFuY2UncyBvbkRyb3AgaGFuZGxlclxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgdGhpcy5kcmFnVGFyZ2V0cyA9IFtdXG4gIH1cblxuICBvbkRyYWdTdGFydCA9IGV2dCA9PiB7XG4gICAgZXZ0LnBlcnNpc3QoKVxuICAgIGlmICh0aGlzLnByb3BzLm9uRHJhZ1N0YXJ0ICYmIGlzRHJhZ0RhdGFXaXRoRmlsZXMoZXZ0KSkge1xuICAgICAgdGhpcy5wcm9wcy5vbkRyYWdTdGFydC5jYWxsKHRoaXMsIGV2dClcbiAgICB9XG4gIH1cblxuICBvbkRyYWdFbnRlciA9IGV2dCA9PiB7XG4gICAgZXZ0LnByZXZlbnREZWZhdWx0KClcblxuICAgIC8vIENvdW50IHRoZSBkcm9wem9uZSBhbmQgYW55IGNoaWxkcmVuIHRoYXQgYXJlIGVudGVyZWQuXG4gICAgaWYgKHRoaXMuZHJhZ1RhcmdldHMuaW5kZXhPZihldnQudGFyZ2V0KSA9PT0gLTEpIHtcbiAgICAgIHRoaXMuZHJhZ1RhcmdldHMucHVzaChldnQudGFyZ2V0KVxuICAgIH1cblxuICAgIGV2dC5wZXJzaXN0KClcblxuICAgIGlmIChpc0RyYWdEYXRhV2l0aEZpbGVzKGV2dCkpIHtcbiAgICAgIFByb21pc2UucmVzb2x2ZSh0aGlzLnByb3BzLmdldERhdGFUcmFuc2Zlckl0ZW1zKGV2dCkpLnRoZW4oZHJhZ2dlZEZpbGVzID0+IHtcbiAgICAgICAgaWYgKGlzUHJvcGFnYXRpb25TdG9wcGVkKGV2dCkpIHtcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgIGRyYWdnZWRGaWxlcyxcbiAgICAgICAgICAvLyBEbyBub3QgcmVseSBvbiBmaWxlcyBmb3IgdGhlIGRyYWcgc3RhdGUuIEl0IGRvZXNuJ3Qgd29yayBpbiBTYWZhcmkuXG4gICAgICAgICAgaXNEcmFnQWN0aXZlOiB0cnVlXG4gICAgICAgIH0pXG4gICAgICB9KVxuXG4gICAgICBpZiAodGhpcy5wcm9wcy5vbkRyYWdFbnRlcikge1xuICAgICAgICB0aGlzLnByb3BzLm9uRHJhZ0VudGVyLmNhbGwodGhpcywgZXZ0KVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG9uRHJhZ092ZXIgPSBldnQgPT4ge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgY2xhc3MtbWV0aG9kcy11c2UtdGhpc1xuICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgZXZ0LnBlcnNpc3QoKVxuXG4gICAgaWYgKGV2dC5kYXRhVHJhbnNmZXIpIHtcbiAgICAgIGV2dC5kYXRhVHJhbnNmZXIuZHJvcEVmZmVjdCA9ICdjb3B5J1xuICAgIH1cblxuICAgIGlmICh0aGlzLnByb3BzLm9uRHJhZ092ZXIgJiYgaXNEcmFnRGF0YVdpdGhGaWxlcyhldnQpKSB7XG4gICAgICB0aGlzLnByb3BzLm9uRHJhZ092ZXIuY2FsbCh0aGlzLCBldnQpXG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBvbkRyYWdMZWF2ZSA9IGV2dCA9PiB7XG4gICAgZXZ0LnByZXZlbnREZWZhdWx0KClcbiAgICBldnQucGVyc2lzdCgpXG5cbiAgICAvLyBPbmx5IGRlYWN0aXZhdGUgb25jZSB0aGUgZHJvcHpvbmUgYW5kIGFsbCBjaGlsZHJlbiBoYXZlIGJlZW4gbGVmdC5cbiAgICB0aGlzLmRyYWdUYXJnZXRzID0gdGhpcy5kcmFnVGFyZ2V0cy5maWx0ZXIoZWwgPT4gZWwgIT09IGV2dC50YXJnZXQgJiYgdGhpcy5ub2RlLmNvbnRhaW5zKGVsKSlcbiAgICBpZiAodGhpcy5kcmFnVGFyZ2V0cy5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyBDbGVhciBkcmFnZ2luZyBmaWxlcyBzdGF0ZVxuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgaXNEcmFnQWN0aXZlOiBmYWxzZSxcbiAgICAgIGRyYWdnZWRGaWxlczogW11cbiAgICB9KVxuXG4gICAgaWYgKHRoaXMucHJvcHMub25EcmFnTGVhdmUgJiYgaXNEcmFnRGF0YVdpdGhGaWxlcyhldnQpKSB7XG4gICAgICB0aGlzLnByb3BzLm9uRHJhZ0xlYXZlLmNhbGwodGhpcywgZXZ0KVxuICAgIH1cbiAgfVxuXG4gIG9uRHJvcCA9IGV2dCA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgb25Ecm9wLFxuICAgICAgb25Ecm9wQWNjZXB0ZWQsXG4gICAgICBvbkRyb3BSZWplY3RlZCxcbiAgICAgIG11bHRpcGxlLFxuICAgICAgYWNjZXB0LFxuICAgICAgZ2V0RGF0YVRyYW5zZmVySXRlbXNcbiAgICB9ID0gdGhpcy5wcm9wc1xuXG4gICAgLy8gU3RvcCBkZWZhdWx0IGJyb3dzZXIgYmVoYXZpb3JcbiAgICBldnQucHJldmVudERlZmF1bHQoKVxuXG4gICAgLy8gUGVyc2lzdCBldmVudCBmb3IgbGF0ZXIgdXNhZ2VcbiAgICBldnQucGVyc2lzdCgpXG5cbiAgICAvLyBSZXNldCB0aGUgY291bnRlciBhbG9uZyB3aXRoIHRoZSBkcmFnIG9uIGEgZHJvcC5cbiAgICB0aGlzLmRyYWdUYXJnZXRzID0gW11cbiAgICB0aGlzLmlzRmlsZURpYWxvZ0FjdGl2ZSA9IGZhbHNlXG5cbiAgICAvLyBDbGVhciBmaWxlcyB2YWx1ZVxuICAgIHRoaXMuZHJhZ2dlZEZpbGVzID0gbnVsbFxuXG4gICAgLy8gUmVzZXQgZHJhZyBzdGF0ZVxuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgaXNEcmFnQWN0aXZlOiBmYWxzZSxcbiAgICAgIGRyYWdnZWRGaWxlczogW11cbiAgICB9KVxuXG4gICAgaWYgKGlzRHJhZ0RhdGFXaXRoRmlsZXMoZXZ0KSkge1xuICAgICAgUHJvbWlzZS5yZXNvbHZlKGdldERhdGFUcmFuc2Zlckl0ZW1zKGV2dCkpLnRoZW4oZmlsZUxpc3QgPT4ge1xuICAgICAgICBjb25zdCBhY2NlcHRlZEZpbGVzID0gW11cbiAgICAgICAgY29uc3QgcmVqZWN0ZWRGaWxlcyA9IFtdXG5cbiAgICAgICAgaWYgKGlzUHJvcGFnYXRpb25TdG9wcGVkKGV2dCkpIHtcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIGZpbGVMaXN0LmZvckVhY2goZmlsZSA9PiB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgZmlsZUFjY2VwdGVkKGZpbGUsIGFjY2VwdCkgJiZcbiAgICAgICAgICAgIGZpbGVNYXRjaFNpemUoZmlsZSwgdGhpcy5wcm9wcy5tYXhTaXplLCB0aGlzLnByb3BzLm1pblNpemUpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBhY2NlcHRlZEZpbGVzLnB1c2goZmlsZSlcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVqZWN0ZWRGaWxlcy5wdXNoKGZpbGUpXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuXG4gICAgICAgIGlmICghbXVsdGlwbGUgJiYgYWNjZXB0ZWRGaWxlcy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgLy8gaWYgbm90IGluIG11bHRpIG1vZGUgYWRkIGFueSBleHRyYSBhY2NlcHRlZCBmaWxlcyB0byByZWplY3RlZC5cbiAgICAgICAgICAvLyBUaGlzIHdpbGwgYWxsb3cgZW5kIHVzZXJzIHRvIGVhc2lseSBpZ25vcmUgYSBtdWx0aSBmaWxlIGRyb3AgaW4gXCJzaW5nbGVcIiBtb2RlLlxuICAgICAgICAgIHJlamVjdGVkRmlsZXMucHVzaCguLi5hY2NlcHRlZEZpbGVzLnNwbGljZSgwKSlcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFVwZGF0ZSBgYWNjZXB0ZWRGaWxlc2AgYW5kIGByZWplY3RlZEZpbGVzYCBzdGF0ZVxuICAgICAgICAvLyBUaGlzIHdpbGwgbWFrZSBjaGlsZHJlbiByZW5kZXIgZnVuY3Rpb25zIHJlY2VpdmUgdGhlIGFwcHJvcHJpYXRlXG4gICAgICAgIC8vIHZhbHVlc1xuICAgICAgICB0aGlzLnNldFN0YXRlKHsgYWNjZXB0ZWRGaWxlcywgcmVqZWN0ZWRGaWxlcyB9LCAoKSA9PiB7XG4gICAgICAgICAgaWYgKG9uRHJvcCkge1xuICAgICAgICAgICAgb25Ecm9wLmNhbGwodGhpcywgYWNjZXB0ZWRGaWxlcywgcmVqZWN0ZWRGaWxlcywgZXZ0KVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChyZWplY3RlZEZpbGVzLmxlbmd0aCA+IDAgJiYgb25Ecm9wUmVqZWN0ZWQpIHtcbiAgICAgICAgICAgIG9uRHJvcFJlamVjdGVkLmNhbGwodGhpcywgcmVqZWN0ZWRGaWxlcywgZXZ0KVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChhY2NlcHRlZEZpbGVzLmxlbmd0aCA+IDAgJiYgb25Ecm9wQWNjZXB0ZWQpIHtcbiAgICAgICAgICAgIG9uRHJvcEFjY2VwdGVkLmNhbGwodGhpcywgYWNjZXB0ZWRGaWxlcywgZXZ0KVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgb25DbGljayA9IGV2dCA9PiB7XG4gICAgY29uc3QgeyBvbkNsaWNrIH0gPSB0aGlzLnByb3BzXG5cbiAgICAvLyBpZiBvbkNsaWNrIHByb3AgaXMgZ2l2ZW4sIHJ1biBpdCBmaXJzdFxuICAgIGlmIChvbkNsaWNrKSB7XG4gICAgICBvbkNsaWNrLmNhbGwodGhpcywgZXZ0KVxuICAgIH1cblxuICAgIC8vIElmIHRoZSBldmVudCBoYXNuJ3QgYmVlbiBkZWZhdWx0IHByZXZlbnRlZCBmcm9tIHdpdGhpblxuICAgIC8vIHRoZSBvbkNsaWNrIGxpc3RlbmVyLCBvcGVuIHRoZSBmaWxlIGRpYWxvZ1xuICAgIGlmICghaXNEZWZhdWx0UHJldmVudGVkKGV2dCkpIHtcbiAgICAgIGV2dC5zdG9wUHJvcGFnYXRpb24oKVxuXG4gICAgICAvLyBpbiBJRTExL0VkZ2UgdGhlIGZpbGUtYnJvd3NlciBkaWFsb2cgaXMgYmxvY2tpbmcsIGVuc3VyZSB0aGlzIGlzIGJlaGluZCBzZXRUaW1lb3V0XG4gICAgICAvLyB0aGlzIGlzIHNvIHJlYWN0IGNhbiBoYW5kbGUgc3RhdGUgY2hhbmdlcyBpbiB0aGUgb25DbGljayBwcm9wIGFib3ZlIGFib3ZlXG4gICAgICAvLyBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWFjdC1kcm9wem9uZS9yZWFjdC1kcm9wem9uZS9pc3N1ZXMvNDUwXG4gICAgICBpZiAoaXNJZU9yRWRnZSgpKSB7XG4gICAgICAgIHNldFRpbWVvdXQodGhpcy5vcGVuLCAwKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5vcGVuKClcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBvbklucHV0RWxlbWVudENsaWNrID0gZXZ0ID0+IHtcbiAgICBldnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgfVxuXG4gIG9uRmlsZURpYWxvZ0NhbmNlbCA9ICgpID0+IHtcbiAgICAvLyB0aW1lb3V0IHdpbGwgbm90IHJlY29nbml6ZSBjb250ZXh0IG9mIHRoaXMgbWV0aG9kXG4gICAgY29uc3QgeyBvbkZpbGVEaWFsb2dDYW5jZWwgfSA9IHRoaXMucHJvcHNcbiAgICAvLyBleGVjdXRlIHRoZSB0aW1lb3V0IG9ubHkgaWYgdGhlIEZpbGVEaWFsb2cgaXMgb3BlbmVkIGluIHRoZSBicm93c2VyXG4gICAgaWYgKHRoaXMuaXNGaWxlRGlhbG9nQWN0aXZlKSB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuaW5wdXQgIT0gbnVsbCkge1xuICAgICAgICAgIC8vIFJldHVybnMgYW4gb2JqZWN0IGFzIEZpbGVMaXN0XG4gICAgICAgICAgY29uc3QgeyBmaWxlcyB9ID0gdGhpcy5pbnB1dFxuXG4gICAgICAgICAgaWYgKCFmaWxlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuaXNGaWxlRGlhbG9nQWN0aXZlID0gZmFsc2VcblxuICAgICAgICAgICAgaWYgKHR5cGVvZiBvbkZpbGVEaWFsb2dDYW5jZWwgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgb25GaWxlRGlhbG9nQ2FuY2VsKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sIDMwMClcbiAgICB9XG4gIH1cblxuICBvbkZvY3VzID0gZXZ0ID0+IHtcbiAgICBjb25zdCB7IG9uRm9jdXMgfSA9IHRoaXMucHJvcHNcbiAgICBpZiAob25Gb2N1cykge1xuICAgICAgb25Gb2N1cy5jYWxsKHRoaXMsIGV2dClcbiAgICB9XG4gICAgaWYgKCFpc0RlZmF1bHRQcmV2ZW50ZWQoZXZ0KSkge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7IGlzRm9jdXNlZDogdHJ1ZSB9KVxuICAgIH1cbiAgfVxuXG4gIG9uQmx1ciA9IGV2dCA9PiB7XG4gICAgY29uc3QgeyBvbkJsdXIgfSA9IHRoaXMucHJvcHNcbiAgICBpZiAob25CbHVyKSB7XG4gICAgICBvbkJsdXIuY2FsbCh0aGlzLCBldnQpXG4gICAgfVxuICAgIGlmICghaXNEZWZhdWx0UHJldmVudGVkKGV2dCkpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoeyBpc0ZvY3VzZWQ6IGZhbHNlIH0pXG4gICAgfVxuICB9XG5cbiAgb25LZXlEb3duID0gZXZ0ID0+IHtcbiAgICBjb25zdCB7IG9uS2V5RG93biB9ID0gdGhpcy5wcm9wc1xuICAgIGlmICghdGhpcy5ub2RlLmlzRXF1YWxOb2RlKGV2dC50YXJnZXQpKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAob25LZXlEb3duKSB7XG4gICAgICBvbktleURvd24uY2FsbCh0aGlzLCBldnQpXG4gICAgfVxuXG4gICAgaWYgKCFpc0RlZmF1bHRQcmV2ZW50ZWQoZXZ0KSAmJiAoZXZ0LmtleUNvZGUgPT09IDMyIHx8IGV2dC5rZXlDb2RlID09PSAxMykpIHtcbiAgICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICB0aGlzLm9wZW4oKVxuICAgIH1cbiAgfVxuXG4gIGNvbXBvc2VIYW5kbGVyID0gaGFuZGxlciA9PiB7XG4gICAgaWYgKHRoaXMucHJvcHMuZGlzYWJsZWQpIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuICAgIHJldHVybiBoYW5kbGVyXG4gIH1cblxuICBnZXRSb290UHJvcHMgPSAoe1xuICAgIHJlZktleSA9ICdyZWYnLFxuICAgIG9uS2V5RG93bixcbiAgICBvbkZvY3VzLFxuICAgIG9uQmx1cixcbiAgICBvbkNsaWNrLFxuICAgIG9uRHJhZ1N0YXJ0LFxuICAgIG9uRHJhZ0VudGVyLFxuICAgIG9uRHJhZ092ZXIsXG4gICAgb25EcmFnTGVhdmUsXG4gICAgb25Ecm9wLFxuICAgIC4uLnJlc3RcbiAgfSA9IHt9KSA9PiAoe1xuICAgIG9uS2V5RG93bjogdGhpcy5jb21wb3NlSGFuZGxlcihcbiAgICAgIG9uS2V5RG93biA/IGNvbXBvc2VFdmVudEhhbmRsZXJzKG9uS2V5RG93biwgdGhpcy5vbktleURvd24pIDogdGhpcy5vbktleURvd25cbiAgICApLFxuICAgIG9uRm9jdXM6IHRoaXMuY29tcG9zZUhhbmRsZXIoXG4gICAgICBvbkZvY3VzID8gY29tcG9zZUV2ZW50SGFuZGxlcnMob25Gb2N1cywgdGhpcy5vbkZvY3VzKSA6IHRoaXMub25Gb2N1c1xuICAgICksXG4gICAgb25CbHVyOiB0aGlzLmNvbXBvc2VIYW5kbGVyKG9uQmx1ciA/IGNvbXBvc2VFdmVudEhhbmRsZXJzKG9uQmx1ciwgdGhpcy5vbkJsdXIpIDogdGhpcy5vbkJsdXIpLFxuICAgIG9uQ2xpY2s6IHRoaXMuY29tcG9zZUhhbmRsZXIoXG4gICAgICBvbkNsaWNrID8gY29tcG9zZUV2ZW50SGFuZGxlcnMob25DbGljaywgdGhpcy5vbkNsaWNrKSA6IHRoaXMub25DbGlja1xuICAgICksXG4gICAgb25EcmFnU3RhcnQ6IHRoaXMuY29tcG9zZUhhbmRsZXIoXG4gICAgICBvbkRyYWdTdGFydCA/IGNvbXBvc2VFdmVudEhhbmRsZXJzKG9uRHJhZ1N0YXJ0LCB0aGlzLm9uRHJhZ1N0YXJ0KSA6IHRoaXMub25EcmFnU3RhcnRcbiAgICApLFxuICAgIG9uRHJhZ0VudGVyOiB0aGlzLmNvbXBvc2VIYW5kbGVyKFxuICAgICAgb25EcmFnRW50ZXIgPyBjb21wb3NlRXZlbnRIYW5kbGVycyhvbkRyYWdFbnRlciwgdGhpcy5vbkRyYWdFbnRlcikgOiB0aGlzLm9uRHJhZ0VudGVyXG4gICAgKSxcbiAgICBvbkRyYWdPdmVyOiB0aGlzLmNvbXBvc2VIYW5kbGVyKFxuICAgICAgb25EcmFnT3ZlciA/IGNvbXBvc2VFdmVudEhhbmRsZXJzKG9uRHJhZ092ZXIsIHRoaXMub25EcmFnT3ZlcikgOiB0aGlzLm9uRHJhZ092ZXJcbiAgICApLFxuICAgIG9uRHJhZ0xlYXZlOiB0aGlzLmNvbXBvc2VIYW5kbGVyKFxuICAgICAgb25EcmFnTGVhdmUgPyBjb21wb3NlRXZlbnRIYW5kbGVycyhvbkRyYWdMZWF2ZSwgdGhpcy5vbkRyYWdMZWF2ZSkgOiB0aGlzLm9uRHJhZ0xlYXZlXG4gICAgKSxcbiAgICBvbkRyb3A6IHRoaXMuY29tcG9zZUhhbmRsZXIob25Ecm9wID8gY29tcG9zZUV2ZW50SGFuZGxlcnMob25Ecm9wLCB0aGlzLm9uRHJvcCkgOiB0aGlzLm9uRHJvcCksXG4gICAgW3JlZktleV06IHRoaXMuc2V0Tm9kZVJlZixcbiAgICB0YWJJbmRleDogdGhpcy5wcm9wcy5kaXNhYmxlZCA/IC0xIDogMCxcbiAgICAuLi5yZXN0XG4gIH0pXG5cbiAgZ2V0SW5wdXRQcm9wcyA9ICh7IHJlZktleSA9ICdyZWYnLCBvbkNoYW5nZSwgb25DbGljaywgLi4ucmVzdCB9ID0ge30pID0+IHtcbiAgICBjb25zdCB7IGFjY2VwdCwgbXVsdGlwbGUsIG5hbWUgfSA9IHRoaXMucHJvcHNcbiAgICBjb25zdCBpbnB1dFByb3BzID0ge1xuICAgICAgYWNjZXB0LFxuICAgICAgdHlwZTogJ2ZpbGUnLFxuICAgICAgc3R5bGU6IHsgZGlzcGxheTogJ25vbmUnIH0sXG4gICAgICBtdWx0aXBsZTogc3VwcG9ydE11bHRpcGxlICYmIG11bHRpcGxlLFxuICAgICAgb25DaGFuZ2U6IGNvbXBvc2VFdmVudEhhbmRsZXJzKG9uQ2hhbmdlLCB0aGlzLm9uRHJvcCksXG4gICAgICBvbkNsaWNrOiBjb21wb3NlRXZlbnRIYW5kbGVycyhvbkNsaWNrLCB0aGlzLm9uSW5wdXRFbGVtZW50Q2xpY2spLFxuICAgICAgYXV0b0NvbXBsZXRlOiAnb2ZmJyxcbiAgICAgIHRhYkluZGV4OiAtMSxcbiAgICAgIFtyZWZLZXldOiB0aGlzLnNldElucHV0UmVmXG4gICAgfVxuICAgIGlmIChuYW1lICYmIG5hbWUubGVuZ3RoKSB7XG4gICAgICBpbnB1dFByb3BzLm5hbWUgPSBuYW1lXG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAuLi5pbnB1dFByb3BzLFxuICAgICAgLi4ucmVzdFxuICAgIH1cbiAgfVxuXG4gIHNldE5vZGVSZWYgPSBub2RlID0+IHtcbiAgICB0aGlzLm5vZGUgPSBub2RlXG4gIH1cblxuICBzZXRJbnB1dFJlZiA9IGlucHV0ID0+IHtcbiAgICB0aGlzLmlucHV0ID0gaW5wdXRcbiAgfVxuXG4gIC8qKlxuICAgKiBPcGVuIHN5c3RlbSBmaWxlIHVwbG9hZCBkaWFsb2cuXG4gICAqXG4gICAqIEBwdWJsaWNcbiAgICovXG4gIG9wZW4gPSAoKSA9PiB7XG4gICAgdGhpcy5pc0ZpbGVEaWFsb2dBY3RpdmUgPSB0cnVlXG4gICAgaWYgKHRoaXMuaW5wdXQpIHtcbiAgICAgIHRoaXMuaW5wdXQudmFsdWUgPSBudWxsXG4gICAgICB0aGlzLmlucHV0LmNsaWNrKClcbiAgICB9XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgY29uc3QgeyBjaGlsZHJlbiwgbXVsdGlwbGUsIGRpc2FibGVkIH0gPSB0aGlzLnByb3BzXG4gICAgY29uc3QgeyBpc0RyYWdBY3RpdmUsIGlzRm9jdXNlZCwgZHJhZ2dlZEZpbGVzLCBhY2NlcHRlZEZpbGVzLCByZWplY3RlZEZpbGVzIH0gPSB0aGlzLnN0YXRlXG5cbiAgICBjb25zdCBmaWxlc0NvdW50ID0gZHJhZ2dlZEZpbGVzLmxlbmd0aFxuICAgIGNvbnN0IGlzTXVsdGlwbGVBbGxvd2VkID0gbXVsdGlwbGUgfHwgZmlsZXNDb3VudCA8PSAxXG4gICAgY29uc3QgaXNEcmFnQWNjZXB0ID0gZmlsZXNDb3VudCA+IDAgJiYgYWxsRmlsZXNBY2NlcHRlZChkcmFnZ2VkRmlsZXMsIHRoaXMucHJvcHMuYWNjZXB0KVxuICAgIGNvbnN0IGlzRHJhZ1JlamVjdCA9IGZpbGVzQ291bnQgPiAwICYmICghaXNEcmFnQWNjZXB0IHx8ICFpc011bHRpcGxlQWxsb3dlZClcblxuICAgIHJldHVybiBjaGlsZHJlbih7XG4gICAgICBpc0RyYWdBY3RpdmUsXG4gICAgICBpc0RyYWdBY2NlcHQsXG4gICAgICBpc0RyYWdSZWplY3QsXG4gICAgICBkcmFnZ2VkRmlsZXMsXG4gICAgICBhY2NlcHRlZEZpbGVzLFxuICAgICAgcmVqZWN0ZWRGaWxlcyxcbiAgICAgIGlzRm9jdXNlZDogaXNGb2N1c2VkICYmICFkaXNhYmxlZCxcbiAgICAgIGdldFJvb3RQcm9wczogdGhpcy5nZXRSb290UHJvcHMsXG4gICAgICBnZXRJbnB1dFByb3BzOiB0aGlzLmdldElucHV0UHJvcHMsXG4gICAgICBvcGVuOiB0aGlzLm9wZW5cbiAgICB9KVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IERyb3B6b25lXG5cbkRyb3B6b25lLnByb3BUeXBlcyA9IHtcbiAgLyoqXG4gICAqIEFsbG93IHNwZWNpZmljIHR5cGVzIG9mIGZpbGVzLiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL29rb25ldC9hdHRyLWFjY2VwdCBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAgICogS2VlcCBpbiBtaW5kIHRoYXQgbWltZSB0eXBlIGRldGVybWluYXRpb24gaXMgbm90IHJlbGlhYmxlIGFjcm9zcyBwbGF0Zm9ybXMuIENTViBmaWxlcyxcbiAgICogZm9yIGV4YW1wbGUsIGFyZSByZXBvcnRlZCBhcyB0ZXh0L3BsYWluIHVuZGVyIG1hY09TIGJ1dCBhcyBhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwgdW5kZXJcbiAgICogV2luZG93cy4gSW4gc29tZSBjYXNlcyB0aGVyZSBtaWdodCBub3QgYmUgYSBtaW1lIHR5cGUgc2V0IGF0IGFsbC5cbiAgICogU2VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVhY3QtZHJvcHpvbmUvcmVhY3QtZHJvcHpvbmUvaXNzdWVzLzI3NlxuICAgKi9cbiAgYWNjZXB0OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuc3RyaW5nKV0pLFxuXG4gIC8qKlxuICAgKiBSZW5kZXIgZnVuY3Rpb24gdGhhdCByZW5kZXJzIHRoZSBhY3R1YWwgY29tcG9uZW50XG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBwcm9wc1xuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBwcm9wcy5nZXRSb290UHJvcHMgUmV0dXJucyB0aGUgcHJvcHMgeW91IHNob3VsZCBhcHBseSB0byB0aGUgcm9vdCBkcm9wIGNvbnRhaW5lciB5b3UgcmVuZGVyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IHByb3BzLmdldElucHV0UHJvcHMgUmV0dXJucyB0aGUgcHJvcHMgeW91IHNob3VsZCBhcHBseSB0byBoaWRkZW4gZmlsZSBpbnB1dCB5b3UgcmVuZGVyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IHByb3BzLm9wZW4gT3BlbiB0aGUgbmF0aXZlIGZpbGUgc2VsZWN0aW9uIGRpYWxvZ1xuICAgKiBAcGFyYW0ge0Jvb2xlYW59IHByb3BzLmlzRm9jdXNlZCBEcm9wem9uZSBhcmVhIGlzIGluIGZvY3VzXG4gICAqIEBwYXJhbSB7Qm9vbGVhbn0gcHJvcHMuaXNEcmFnQWN0aXZlIEFjdGl2ZSBkcmFnIGlzIGluIHByb2dyZXNzXG4gICAqIEBwYXJhbSB7Qm9vbGVhbn0gcHJvcHMuaXNEcmFnQWNjZXB0IERyYWdnZWQgZmlsZXMgYXJlIGFjY2VwdGVkXG4gICAqIEBwYXJhbSB7Qm9vbGVhbn0gcHJvcHMuaXNEcmFnUmVqZWN0IFNvbWUgZHJhZ2dlZCBmaWxlcyBhcmUgcmVqZWN0ZWRcbiAgICogQHBhcmFtIHtBcnJheX0gcHJvcHMuZHJhZ2dlZEZpbGVzIEZpbGVzIGluIGFjdGl2ZSBkcmFnXG4gICAqIEBwYXJhbSB7QXJyYXl9IHByb3BzLmFjY2VwdGVkRmlsZXMgQWNjZXB0ZWQgZmlsZXNcbiAgICogQHBhcmFtIHtBcnJheX0gcHJvcHMucmVqZWN0ZWRGaWxlcyBSZWplY3RlZCBmaWxlc1xuICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBFbmFibGUvZGlzYWJsZSB0aGUgZHJvcHpvbmUgZW50aXJlbHlcbiAgICovXG4gIGRpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogSWYgZmFsc2UsIGFsbG93IGRyb3BwZWQgaXRlbXMgdG8gdGFrZSBvdmVyIHRoZSBjdXJyZW50IGJyb3dzZXIgd2luZG93XG4gICAqL1xuICBwcmV2ZW50RHJvcE9uRG9jdW1lbnQ6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBBbGxvdyBkcm9wcGluZyBtdWx0aXBsZSBmaWxlc1xuICAgKi9cbiAgbXVsdGlwbGU6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBgbmFtZWAgYXR0cmlidXRlIGZvciB0aGUgaW5wdXQgdGFnXG4gICAqL1xuICBuYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgKiBNYXhpbXVtIGZpbGUgc2l6ZSAoaW4gYnl0ZXMpXG4gICAqL1xuICBtYXhTaXplOiBQcm9wVHlwZXMubnVtYmVyLFxuXG4gIC8qKlxuICAgKiBNaW5pbXVtIGZpbGUgc2l6ZSAoaW4gYnl0ZXMpXG4gICAqL1xuICBtaW5TaXplOiBQcm9wVHlwZXMubnVtYmVyLFxuXG4gIC8qKlxuICAgKiBnZXREYXRhVHJhbnNmZXJJdGVtcyBoYW5kbGVyXG4gICAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50XG4gICAqIEByZXR1cm5zIHtBcnJheX0gYXJyYXkgb2YgRmlsZSBvYmplY3RzXG4gICAqL1xuICBnZXREYXRhVHJhbnNmZXJJdGVtczogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIG9uQ2xpY2sgY2FsbGJhY2tcbiAgICogQHBhcmFtIHtFdmVudH0gZXZlbnRcbiAgICovXG4gIG9uQ2xpY2s6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBvbkZvY3VzIGNhbGxiYWNrXG4gICAqL1xuICBvbkZvY3VzOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogb25CbHVyIGNhbGxiYWNrXG4gICAqL1xuICBvbkJsdXI6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBvbktleURvd24gY2FsbGJhY2tcbiAgICovXG4gIG9uS2V5RG93bjogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIFRoZSBgb25Ecm9wYCBtZXRob2QgdGhhdCBhY2NlcHRzIHR3byBhcmd1bWVudHMuXG4gICAqIFRoZSBmaXJzdCBhcmd1bWVudCByZXByZXNlbnRzIHRoZSBhY2NlcHRlZCBmaWxlcyBhbmQgdGhlIHNlY29uZCBhcmd1bWVudCB0aGUgcmVqZWN0ZWQgZmlsZXMuXG4gICAqXG4gICAqIGBgYGphdmFzY3JpcHRcbiAgICogZnVuY3Rpb24gb25Ecm9wKGFjY2VwdGVkRmlsZXMsIHJlamVjdGVkRmlsZXMpIHtcbiAgICogICAvLyBkbyBzdHVmZiB3aXRoIGZpbGVzLi4uXG4gICAqIH1cbiAgICogYGBgXG4gICAqXG4gICAqIEZpbGVzIGFyZSBhY2NlcHRlZCBvciByZWplY3RlZCBiYXNlZCBvbiB0aGUgYGFjY2VwdGAgcHJvcC5cbiAgICogVGhpcyBtdXN0IGJlIGEgdmFsaWQgW01JTUUgdHlwZV0oaHR0cDovL3d3dy5pYW5hLm9yZy9hc3NpZ25tZW50cy9tZWRpYS10eXBlcy9tZWRpYS10eXBlcy54aHRtbCkgYWNjb3JkaW5nIHRvIFtpbnB1dCBlbGVtZW50IHNwZWNpZmljYXRpb25dKGh0dHBzOi8vd3d3LnczLm9yZy93aWtpL0hUTUwvRWxlbWVudHMvaW5wdXQvZmlsZSkgb3IgYSB2YWxpZCBmaWxlIGV4dGVuc2lvbi5cbiAgICpcbiAgICogTm90ZSB0aGF0IHRoZSBgb25Ecm9wYCBjYWxsYmFjayB3aWxsIGFsd2F5cyBiZSBjYWxsZWQgcmVnYXJkbGVzcyBpZiB0aGUgZHJvcHBlZCBmaWxlcyB3ZXJlIGFjY2VwdGVkIG9yIHJlamVjdGVkLlxuICAgKiBZb3UgY2FuIHVzZSB0aGUgYG9uRHJvcEFjY2VwdGVkYC9gb25Ecm9wUmVqZWN0ZWRgIHByb3BzIGlmIHlvdSdkIGxpa2UgdG8gcmVhY3QgdG8gYSBzcGVjaWZpYyBldmVudCBpbnN0ZWFkIG9mIHRoZSBgb25Ecm9wYCBwcm9wLlxuICAgKlxuICAgKiBUaGUgYG9uRHJvcGAgY2FsbGJhY2sgd2lsbCBwcm92aWRlIHlvdSB3aXRoIGFuIGFycmF5IG9mIFtGaWxlc10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0ZpbGUpIHdoaWNoIHlvdSBjYW4gdGhlbiBwcm9jZXNzIGFuZCBzZW5kIHRvIGEgc2VydmVyLlxuICAgKiBGb3IgZXhhbXBsZSwgd2l0aCBbU3VwZXJBZ2VudF0oaHR0cHM6Ly9naXRodWIuY29tL3Zpc2lvbm1lZGlhL3N1cGVyYWdlbnQpIGFzIGEgaHR0cC9hamF4IGxpYnJhcnk6XG4gICAqXG4gICAqIGBgYGphdmFzY3JpcHRcbiAgICogZnVuY3Rpb24gb25Ecm9wKGFjY2VwdGVkRmlsZXMpIHtcbiAgICogICBjb25zdCByZXEgPSByZXF1ZXN0LnBvc3QoJy91cGxvYWQnKVxuICAgKiAgIGFjY2VwdGVkRmlsZXMuZm9yRWFjaChmaWxlID0+IHtcbiAgICogICAgIHJlcS5hdHRhY2goZmlsZS5uYW1lLCBmaWxlKVxuICAgKiAgIH0pXG4gICAqICAgcmVxLmVuZChjYWxsYmFjaylcbiAgICogfVxuICAgKiBgYGBcbiAgICovXG4gIG9uRHJvcDogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIG9uRHJvcEFjY2VwdGVkIGNhbGxiYWNrXG4gICAqL1xuICBvbkRyb3BBY2NlcHRlZDogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIG9uRHJvcFJlamVjdGVkIGNhbGxiYWNrXG4gICAqL1xuICBvbkRyb3BSZWplY3RlZDogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIG9uRHJhZ1N0YXJ0IGNhbGxiYWNrXG4gICAqL1xuICBvbkRyYWdTdGFydDogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIG9uRHJhZ0VudGVyIGNhbGxiYWNrXG4gICAqL1xuICBvbkRyYWdFbnRlcjogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIG9uRHJhZ092ZXIgY2FsbGJhY2tcbiAgICovXG4gIG9uRHJhZ092ZXI6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBvbkRyYWdMZWF2ZSBjYWxsYmFja1xuICAgKi9cbiAgb25EcmFnTGVhdmU6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBQcm92aWRlIGEgY2FsbGJhY2sgb24gY2xpY2tpbmcgdGhlIGNhbmNlbCBidXR0b24gb2YgdGhlIGZpbGUgZGlhbG9nXG4gICAqL1xuICBvbkZpbGVEaWFsb2dDYW5jZWw6IFByb3BUeXBlcy5mdW5jXG59XG5cbkRyb3B6b25lLmRlZmF1bHRQcm9wcyA9IHtcbiAgcHJldmVudERyb3BPbkRvY3VtZW50OiB0cnVlLFxuICBkaXNhYmxlZDogZmFsc2UsXG4gIG11bHRpcGxlOiB0cnVlLFxuICBtYXhTaXplOiBJbmZpbml0eSxcbiAgbWluU2l6ZTogMCxcbiAgZ2V0RGF0YVRyYW5zZmVySXRlbXM6IGZyb21FdmVudFxufVxuIl0sIm5hbWVzIjpbIl9fYXdhaXRlciIsInRoaXNBcmciLCJfYXJndW1lbnRzIiwiUCIsImdlbmVyYXRvciIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0IiwiZnVsZmlsbGVkIiwidmFsdWUiLCJzdGVwIiwibmV4dCIsImUiLCJyZWplY3RlZCIsInJlc3VsdCIsImRvbmUiLCJ0aGVuIiwiYXBwbHkiLCJfX2dlbmVyYXRvciIsImJvZHkiLCJmIiwieSIsInQiLCJnIiwiXyIsImxhYmVsIiwic2VudCIsInRyeXMiLCJvcHMiLCJ2ZXJiIiwidGhyb3ciLCJyZXR1cm4iLCJTeW1ib2wiLCJpdGVyYXRvciIsInRoaXMiLCJuIiwidiIsIm9wIiwiVHlwZUVycm9yIiwiY2FsbCIsInBvcCIsImxlbmd0aCIsInB1c2giLCJfX3JlYWQiLCJvIiwibSIsInIiLCJpIiwiYXIiLCJlcnJvciIsIkNPTU1PTl9NSU1FX1RZUEVTIiwiTWFwIiwidG9GaWxlV2l0aFBhdGgiLCJmaWxlIiwicGF0aCIsIm5hbWUiLCJsYXN0SW5kZXhPZiIsInR5cGUiLCJleHQiLCJzcGxpdCIsInRvTG93ZXJDYXNlIiwiZ2V0IiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJ3cml0YWJsZSIsImNvbmZpZ3VyYWJsZSIsIndpdGhNaW1lVHlwZSIsIkZJTEVTX1RPX0lHTk9SRSIsImZyb21EYXRhVHJhbnNmZXJJdGVtIiwiaXRlbSIsImdldEFzRmlsZSIsImZ3cCIsImZyb21FbnRyeSIsImVudHJ5IiwidHNsaWJfMS5fX2F3YWl0ZXIiLCJ0c2xpYl8xLl9fZ2VuZXJhdG9yIiwiX2EiLCJpc0RpcmVjdG9yeSIsImZyb21EaXJFbnRyeSIsImZ1bGxQYXRoIiwiZXJyIiwiZnJvbUZpbGVFbnRyeSIsInJlYWRlciIsImNyZWF0ZVJlYWRlciIsImVudHJpZXMiLCJyZWFkRW50cmllcyIsIl90aGlzIiwiYmF0Y2giLCJmaWxlcyIsImVycl8xIiwiaXRlbXMiLCJhbGwiLCJtYXAiLCJtb2R1bGUiLCJleHBvcnRzIiwibCIsImMiLCJkIiwiZW51bWVyYWJsZSIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJwIiwicyIsIndpbmRvdyIsIk1hdGgiLCJzZWxmIiwiRnVuY3Rpb24iLCJfX2ciLCJ2ZXJzaW9uIiwiX19lIiwiYSIsInRvU3RyaW5nIiwic2xpY2UiLCJ1Iiwic3RvcmUiLCJGIiwiRyIsImgiLCJTIiwieCIsIkIiLCJiIiwiVSIsImNvcmUiLCJXIiwiUiIsInJhbmRvbSIsImNvbmNhdCIsImFyZ3VtZW50cyIsIm1pbiIsIkFycmF5IiwiaXNBcnJheSIsInJlcGxhY2UiLCJzb21lIiwidHJpbSIsImNoYXJBdCIsImVuZHNXaXRoIiwiZG9jdW1lbnQiLCJjcmVhdGVFbGVtZW50IiwidmFsdWVPZiIsImluc3BlY3RTb3VyY2UiLCJqb2luIiwiU3RyaW5nIiwidyIsInByb3BlcnR5SXNFbnVtZXJhYmxlIiwiY2VpbCIsImZsb29yIiwiaXNOYU4iLCJjb25zdHJ1Y3RvciIsInN1cHBvcnRNdWx0aXBsZSIsImZpbGVBY2NlcHRlZCIsImFjY2VwdCIsImFjY2VwdHMiLCJpc1Byb3BhZ2F0aW9uU3RvcHBlZCIsImV2dCIsImNhbmNlbEJ1YmJsZSIsImlzRGVmYXVsdFByZXZlbnRlZCIsImRlZmF1bHRQcmV2ZW50ZWQiLCJpc0RyYWdEYXRhV2l0aEZpbGVzIiwiZGF0YVRyYW5zZmVyIiwidHlwZXMiLCJvbkRvY3VtZW50RHJhZ092ZXIiLCJwcmV2ZW50RGVmYXVsdCIsImNvbXBvc2VFdmVudEhhbmRsZXJzIiwiZm5zIiwiZXZlbnQiLCJhcmdzIiwiZm4iLCJEcm9wem9uZSIsInN0YXRlIiwiaXNGaWxlRGlhbG9nQWN0aXZlIiwib25Eb2N1bWVudERyb3AiLCJub2RlIiwiY29udGFpbnMiLCJ0YXJnZXQiLCJkcmFnVGFyZ2V0cyIsIm9uRHJhZ1N0YXJ0IiwicGVyc2lzdCIsInByb3BzIiwib25EcmFnRW50ZXIiLCJpbmRleE9mIiwiZ2V0RGF0YVRyYW5zZmVySXRlbXMiLCJzZXRTdGF0ZSIsIm9uRHJhZ092ZXIiLCJkcm9wRWZmZWN0Iiwib25EcmFnTGVhdmUiLCJmaWx0ZXIiLCJlbCIsIm9uRHJvcCIsIm9uRHJvcEFjY2VwdGVkIiwib25Ecm9wUmVqZWN0ZWQiLCJtdWx0aXBsZSIsImRyYWdnZWRGaWxlcyIsImFjY2VwdGVkRmlsZXMiLCJyZWplY3RlZEZpbGVzIiwiZm9yRWFjaCIsIm1heFNpemUiLCJtaW5TaXplIiwic2l6ZSIsImZpbGVNYXRjaFNpemUiLCJzcGxpY2UiLCJvbkNsaWNrIiwic3RvcFByb3BhZ2F0aW9uIiwidXNlckFnZW50IiwibmF2aWdhdG9yIiwiaXNJZSIsImlzRWRnZSIsImlzSWVPckVkZ2UiLCJvcGVuIiwib25JbnB1dEVsZW1lbnRDbGljayIsIm9uRmlsZURpYWxvZ0NhbmNlbCIsImlucHV0Iiwib25Gb2N1cyIsImlzRm9jdXNlZCIsIm9uQmx1ciIsIm9uS2V5RG93biIsImlzRXF1YWxOb2RlIiwia2V5Q29kZSIsImNvbXBvc2VIYW5kbGVyIiwiZGlzYWJsZWQiLCJoYW5kbGVyIiwiZ2V0Um9vdFByb3BzIiwicmVmS2V5IiwicmVzdCIsInNldE5vZGVSZWYiLCJnZXRJbnB1dFByb3BzIiwib25DaGFuZ2UiLCJpbnB1dFByb3BzIiwiZGlzcGxheSIsInNldElucHV0UmVmIiwiY2xpY2siLCJSZWFjdCIsIkNvbXBvbmVudCIsInByZXZlbnREcm9wT25Eb2N1bWVudCIsImFkZEV2ZW50TGlzdGVuZXIiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwiY2hpbGRyZW4iLCJpc0RyYWdBY3RpdmUiLCJmaWxlc0NvdW50IiwiaXNNdWx0aXBsZUFsbG93ZWQiLCJpc0RyYWdBY2NlcHQiLCJldmVyeSIsInByb3BUeXBlcyIsIlByb3BUeXBlcyIsIm9uZU9mVHlwZSIsInN0cmluZyIsImFycmF5T2YiLCJmdW5jIiwiYm9vbCIsIm51bWJlciIsImRlZmF1bHRQcm9wcyIsIkluZmluaXR5IiwiZHQiLCJmcm9tIiwia2luZCIsIndlYmtpdEdldEFzRW50cnkiLCJ0b0ZpbGVQcm9taXNlcyIsImZsYXR0ZW4iLCJyZWR1Y2UiLCJhY2MiLCJ0c2xpYl8xLl9fc3ByZWFkIiwiaW5jbHVkZXMiLCJnZXREYXRhVHJhbnNmZXJGaWxlcyIsImdldElucHV0RmlsZXMiXSwibWFwcGluZ3MiOiJ1UUFpRU8sU0FBU0EsRUFBVUMsRUFBU0MsRUFBWUMsRUFBR0MsR0FDOUMsT0FBTyxJQUFLRCxJQUFNQSxFQUFJRSxVQUFVLFNBQVVDLEVBQVNDLEdBQy9DLFNBQVNDLEVBQVVDLEdBQVMsSUFBTUMsRUFBS04sRUFBVU8sS0FBS0YsSUFBVyxNQUFPRyxHQUFLTCxFQUFPSyxJQUNwRixTQUFTQyxFQUFTSixHQUFTLElBQU1DLEVBQUtOLEVBQWlCLE1BQUVLLElBQVcsTUFBT0csR0FBS0wsRUFBT0ssSUFDdkYsU0FBU0YsRUFBS0ksR0FBVUEsRUFBT0MsS0FBT1QsRUFBUVEsRUFBT0wsT0FBUyxJQUFJTixFQUFFLFNBQVVHLEdBQVdBLEVBQVFRLEVBQU9MLFNBQVdPLEtBQUtSLEVBQVdLLEdBQ25J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
@@ -2,17 +2,11 @@ If you'd like to prevent the default behaviour for `onClick`, `onFocus`, `onBlur
2
2
 
3
3
  ```jsx harmony
4
4
  class Events extends React.Component {
5
- onClick(evt) {
6
- evt.preventDefault();
7
- }
8
-
9
5
  render() {
10
6
  return (
11
- <Dropzone
12
- onClick={this.onClick.bind(this)}
13
- >
7
+ <Dropzone>
14
8
  {({getRootProps, getInputProps}) => (
15
- <div {...getRootProps()}>
9
+ <div {...getRootProps({onClick: evt => evt.preventDefault()})}>
16
10
  <input {...getInputProps()} />
17
11
  <p>Click to select files should not work!</p>
18
12
  </div>
@@ -24,6 +18,3 @@ class Events extends React.Component {
24
18
 
25
19
  <Events />
26
20
  ```
27
-
28
- **NOTE**: You can still use the `{disableClick}` prop to achieve the same behaviour,
29
- but it has been deprecated and will be removed with the next major version.
@@ -14,10 +14,9 @@ Due to the lack of official docs on this (at least we haven’t found any. If yo
14
14
  ```jsx harmony
15
15
  <Dropzone
16
16
  onDrop={files => alert(JSON.stringify(files.map(f => f.name)))}
17
- disableClick
18
17
  >
19
18
  {({getRootProps, getInputProps, open}) => (
20
- <div {...getRootProps()}>
19
+ <div {...getRootProps({onClick: evt => evt.preventDefault()})}>
21
20
  <input {...getInputProps()} />
22
21
  <p>Drop files here</p>
23
22
 
@@ -37,10 +36,9 @@ const dropzoneRef = React.createRef();
37
36
  <Dropzone
38
37
  ref={dropzoneRef}
39
38
  onDrop={files => { alert(JSON.stringify(files.map(f => f.name))) }}
40
- disableClick
41
39
  >
42
40
  {({getRootProps, getInputProps}) => (
43
- <div {...getRootProps()}>
41
+ <div {...getRootProps({onClick: evt => evt.preventDefault()})}>
44
42
  <input {...getInputProps()} />
45
43
  <p>Drop files here</p>
46
44
 
@@ -45,12 +45,11 @@ class FullScreen extends React.Component {
45
45
  <Dropzone
46
46
  accept={accept}
47
47
  onDrop={this.onDrop.bind(this)}
48
- disableClick
49
48
  >
50
49
  {({getRootProps, getInputProps, isDragActive}) => (
51
- <div {...getRootProps()} style={{position: "relative"}}>
50
+ <div {...getRootProps({onClick: evt => evt.preventDefault()})} style={{position: "relative"}}>
52
51
  <input {...getInputProps()} />
53
- { isDragActive && <div style={overlayStyle}>Drop files here</div> }
52
+ { isDragActive && <div style={overlayStyle}>Drop files here</div> }
54
53
  <h4>My awesome app</h4>
55
54
  <label htmlFor="mimetypes">Enter mime types you want to accept: </label>
56
55
  <input
package/package.json CHANGED
@@ -149,7 +149,7 @@
149
149
  "path": "@commitlint/prompt"
150
150
  }
151
151
  },
152
- "version": "8.2.0",
152
+ "version": "9.0.0",
153
153
  "engines": {
154
154
  "node": ">= 6"
155
155
  }
package/src/index.js CHANGED
@@ -3,7 +3,6 @@
3
3
  import React from 'react'
4
4
  import { fromEvent } from 'file-selector'
5
5
  import PropTypes from 'prop-types'
6
- import deprecated from 'prop-types-extra/lib/deprecated'
7
6
  import {
8
7
  isDragDataWithFiles,
9
8
  supportMultiple,
@@ -206,16 +205,16 @@ class Dropzone extends React.Component {
206
205
  }
207
206
 
208
207
  onClick = evt => {
209
- const { onClick, disableClick } = this.props
208
+ const { onClick } = this.props
210
209
 
211
210
  // if onClick prop is given, run it first
212
211
  if (onClick) {
213
212
  onClick.call(this, evt)
214
213
  }
215
214
 
216
- // if disableClick is not set and the event hasn't been default prefented within
215
+ // If the event hasn't been default prevented from within
217
216
  // the onClick listener, open the file dialog
218
- if (!disableClick && !isDefaultPrevented(evt)) {
217
+ if (!isDefaultPrevented(evt)) {
219
218
  evt.stopPropagation()
220
219
 
221
220
  // in IE11/Edge the file-browser dialog is blocking, ensure this is behind setTimeout
@@ -435,16 +434,6 @@ Dropzone.propTypes = {
435
434
  */
436
435
  children: PropTypes.func,
437
436
 
438
- /**
439
- * Disallow clicking on the dropzone container to open file dialog
440
- * @deprecated Use onClick={evt => evt.preventDefault()} to prevent the default behaviour (open the file select dialog).
441
- * This prop will be removed in the next major version.
442
- */
443
- disableClick: deprecated(
444
- PropTypes.bool,
445
- 'Use onClick={evt => evt.preventDefault()} instead. This prop will be removed in the next major version'
446
- ),
447
-
448
437
  /**
449
438
  * Enable/disable the dropzone entirely
450
439
  */
@@ -573,7 +562,6 @@ Dropzone.propTypes = {
573
562
  Dropzone.defaultProps = {
574
563
  preventDropOnDocument: true,
575
564
  disabled: false,
576
- disableClick: false,
577
565
  multiple: true,
578
566
  maxSize: Infinity,
579
567
  minSize: 0,
package/src/index.spec.js CHANGED
@@ -312,21 +312,6 @@ describe('Dropzone', () => {
312
312
  expect(open).toHaveBeenCalled()
313
313
  })
314
314
 
315
- it('should not call `open` if disableClick prop is true', () => {
316
- const dropzone = mount(
317
- <Dropzone disableClick>
318
- {({ getRootProps, getInputProps }) => (
319
- <div {...getRootProps()}>
320
- <input {...getInputProps()} />
321
- </div>
322
- )}
323
- </Dropzone>
324
- )
325
- const open = jest.spyOn(dropzone.instance(), 'open')
326
- dropzone.simulate('click')
327
- expect(open).not.toHaveBeenCalled()
328
- })
329
-
330
315
  it('should call `onClick` callback if provided', () => {
331
316
  const onClick = jest.fn()
332
317
  const dropzone = mount(
@@ -344,23 +329,6 @@ describe('Dropzone', () => {
344
329
  expect(onClick).toHaveBeenCalled()
345
330
  })
346
331
 
347
- it('should call `onClick` if provided even if `disableClick` is set', () => {
348
- const onClick = jest.fn()
349
- const dropzone = mount(
350
- <Dropzone onClick={onClick} disableClick>
351
- {({ getRootProps, getInputProps }) => (
352
- <div {...getRootProps()}>
353
- <input {...getInputProps()} />
354
- </div>
355
- )}
356
- </Dropzone>
357
- )
358
- const open = jest.spyOn(dropzone.instance(), 'open')
359
- dropzone.simulate('click')
360
- expect(open).toHaveBeenCalledTimes(0)
361
- expect(onClick).toHaveBeenCalled()
362
- })
363
-
364
332
  it('should not call `open` if event was prevented in `onClick`', () => {
365
333
  const onClick = jest.fn(event => event.preventDefault())
366
334
  const dropzone = mount(
@@ -452,24 +420,6 @@ describe('Dropzone', () => {
452
420
  expect(onClickInner).toHaveBeenCalled()
453
421
  })
454
422
 
455
- it('should invoke onClick on the wrapper if disableClick is set', () => {
456
- const onClick = jest.fn()
457
- const component = mount(
458
- <div onClick={onClick}>
459
- <Dropzone disableClick>
460
- {({ getRootProps, getInputProps }) => (
461
- <div {...getRootProps()}>
462
- <input {...getInputProps()} />
463
- </div>
464
- )}
465
- </Dropzone>
466
- </div>
467
- )
468
-
469
- component.find(Dropzone).simulate('click')
470
- expect(onClick).toHaveBeenCalled()
471
- })
472
-
473
423
  it('should invoke inputProps onClick if provided', () => {
474
424
  const onClick = jest.fn()
475
425
  const component = mount(
@@ -1078,7 +1028,7 @@ describe('Dropzone', () => {
1078
1028
  describe('open() fn', () => {
1079
1029
  it('should be exposed to children', () => {
1080
1030
  const subject = mount(
1081
- <Dropzone disableClick>
1031
+ <Dropzone>
1082
1032
  {({ getRootProps, getInputProps, open }) => (
1083
1033
  <div {...getRootProps()}>
1084
1034
  <input {...getInputProps()} />
@@ -15,7 +15,6 @@ export type DropzoneProps = Pick<React.HTMLProps<HTMLElement>, PropTypes> & {
15
15
  maxSize?: number;
16
16
  minSize?: number;
17
17
  preventDropOnDocument?: boolean;
18
- disableClick?: boolean;
19
18
  disabled?: boolean;
20
19
  };
21
20
 
@@ -26,7 +26,6 @@ export default class Test extends React.Component {
26
26
  minSize={2000}
27
27
  maxSize={Infinity}
28
28
  preventDropOnDocument
29
- disableClick
30
29
  disabled
31
30
  multiple={false}
32
31
  accept="*.png"