xgplayer-mp4 3.0.25-alpha.2 → 3.0.25-alpha.3
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/index.min.js +2 -0
- package/dist/index.min.js.map +1 -0
- package/es/_virtual/_rollupPluginBabelHelpers.js +494 -0
- package/es/error.d.ts +935 -0
- package/es/error.js +68 -0
- package/es/index.d.ts +2 -0
- package/es/index.js +1 -0
- package/es/index.umd.d.ts +2 -0
- package/es/mp4.d.ts +116 -0
- package/es/mp4.js +904 -0
- package/es/mp4Plugin.d.ts +132 -0
- package/es/mp4Plugin.js +1063 -0
- package/es/util/download.d.ts +4 -0
- package/es/util/index.d.ts +5 -0
- package/es/util/index.js +33 -0
- package/es/util/logger.d.ts +5 -0
- package/es/util/logger.js +52 -0
- package/es/util/proxy-promise.d.ts +6 -0
- package/es/util/proxy-promise.js +35 -0
- package/es/util/timer.d.ts +8 -0
- package/es/util/timer.js +50 -0
- package/es/version.d.ts +2 -0
- package/es/version.js +2 -0
- package/es/worker/index.d.ts +10 -0
- package/es/worker/index.js +63 -0
- package/es/worker/transmuxerworker.d.ts +1 -0
- package/es/worker/transmuxerworker.js +15 -0
- package/package.json +4 -4
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t(require("core-js/modules/es.json.stringify.js"),require("core-js/modules/es.regexp.exec.js"),require("core-js/modules/es.regexp.test.js"),require("core-js/modules/es.object.to-string.js"),require("core-js/modules/es.promise.js"),require("core-js/modules/es.promise.finally.js"),require("core-js/modules/es.object.assign.js"),require("core-js/modules/es.array.splice.js"),require("core-js/modules/web.dom-collections.for-each.js"),require("core-js/modules/es.object.keys.js"),require("core-js/modules/es.function.name.js"),require("core-js/modules/es.array.concat.js"),require("xgplayer"),require("core-js/modules/es.array.map.js"),require("core-js/modules/es.array.iterator.js"),require("core-js/modules/es.typed-array.uint8-array.js"),require("core-js/modules/esnext.typed-array.at.js"),require("core-js/modules/es.typed-array.copy-within.js"),require("core-js/modules/es.typed-array.every.js"),require("core-js/modules/es.typed-array.fill.js"),require("core-js/modules/es.typed-array.filter.js"),require("core-js/modules/es.typed-array.find.js"),require("core-js/modules/es.typed-array.find-index.js"),require("core-js/modules/esnext.typed-array.find-last.js"),require("core-js/modules/esnext.typed-array.find-last-index.js"),require("core-js/modules/es.typed-array.for-each.js"),require("core-js/modules/es.typed-array.includes.js"),require("core-js/modules/es.typed-array.index-of.js"),require("core-js/modules/es.typed-array.iterator.js"),require("core-js/modules/es.typed-array.join.js"),require("core-js/modules/es.typed-array.last-index-of.js"),require("core-js/modules/es.typed-array.map.js"),require("core-js/modules/es.typed-array.reduce.js"),require("core-js/modules/es.typed-array.reduce-right.js"),require("core-js/modules/es.typed-array.reverse.js"),require("core-js/modules/es.typed-array.set.js"),require("core-js/modules/es.typed-array.slice.js"),require("core-js/modules/es.typed-array.some.js"),require("core-js/modules/es.typed-array.sort.js"),require("core-js/modules/es.typed-array.subarray.js"),require("core-js/modules/es.typed-array.to-locale-string.js"),require("core-js/modules/es.typed-array.to-string.js"),require("core-js/modules/es.array.find.js"),require("core-js/modules/es.number.constructor.js"),require("core-js/modules/es.array.filter.js"),require("core-js/modules/es.array.slice.js"),require("core-js/modules/es.symbol.js"),require("core-js/modules/es.symbol.iterator.js"),require("core-js/modules/es.string.iterator.js"),require("core-js/modules/web.dom-collections.iterator.js"),require("core-js/modules/es.symbol.description.js"),require("core-js/modules/es.array.includes.js"),require("core-js/modules/es.string.includes.js"),require("core-js/modules/es.number.is-finite.js"),require("core-js/modules/es.regexp.to-string.js"),require("core-js/modules/es.math.hypot.js"),require("core-js/modules/es.array.join.js"),require("core-js/modules/es.string.from-code-point.js"),require("core-js/modules/es.string.match.js"),require("core-js/modules/es.array.find-index.js"),require("core-js/modules/es.array.sort.js"),require("core-js/modules/es.regexp.flags.js"),require("core-js/modules/es.string.pad-start.js"),require("core-js/modules/es.array.from.js"),require("core-js/modules/es.array-buffer.constructor.js"),require("core-js/modules/es.global-this.js"),require("core-js/modules/es.typed-array.uint32-array.js"),require("core-js/modules/es.typed-array.int8-array.js"),require("core-js/modules/es.typed-array.uint8-clamped-array.js"),require("core-js/modules/es.typed-array.int16-array.js"),require("core-js/modules/es.typed-array.uint16-array.js"),require("core-js/modules/es.typed-array.int32-array.js"),require("core-js/modules/es.typed-array.float32-array.js"),require("core-js/modules/es.typed-array.float64-array.js"),require("core-js/modules/web.url.js"),require("core-js/modules/web.url-search-params.js"),require("core-js/modules/es.string.replace.js"),require("core-js/modules/es.number.is-nan.js"),require("core-js/modules/es.object.get-prototype-of.js"),require("core-js/modules/es.string.trim.js"),require("core-js/modules/es.set.js")):"function"==typeof define&&define.amd?define(["core-js/modules/es.json.stringify.js","core-js/modules/es.regexp.exec.js","core-js/modules/es.regexp.test.js","core-js/modules/es.object.to-string.js","core-js/modules/es.promise.js","core-js/modules/es.promise.finally.js","core-js/modules/es.object.assign.js","core-js/modules/es.array.splice.js","core-js/modules/web.dom-collections.for-each.js","core-js/modules/es.object.keys.js","core-js/modules/es.function.name.js","core-js/modules/es.array.concat.js","xgplayer","core-js/modules/es.array.map.js","core-js/modules/es.array.iterator.js","core-js/modules/es.typed-array.uint8-array.js","core-js/modules/esnext.typed-array.at.js","core-js/modules/es.typed-array.copy-within.js","core-js/modules/es.typed-array.every.js","core-js/modules/es.typed-array.fill.js","core-js/modules/es.typed-array.filter.js","core-js/modules/es.typed-array.find.js","core-js/modules/es.typed-array.find-index.js","core-js/modules/esnext.typed-array.find-last.js","core-js/modules/esnext.typed-array.find-last-index.js","core-js/modules/es.typed-array.for-each.js","core-js/modules/es.typed-array.includes.js","core-js/modules/es.typed-array.index-of.js","core-js/modules/es.typed-array.iterator.js","core-js/modules/es.typed-array.join.js","core-js/modules/es.typed-array.last-index-of.js","core-js/modules/es.typed-array.map.js","core-js/modules/es.typed-array.reduce.js","core-js/modules/es.typed-array.reduce-right.js","core-js/modules/es.typed-array.reverse.js","core-js/modules/es.typed-array.set.js","core-js/modules/es.typed-array.slice.js","core-js/modules/es.typed-array.some.js","core-js/modules/es.typed-array.sort.js","core-js/modules/es.typed-array.subarray.js","core-js/modules/es.typed-array.to-locale-string.js","core-js/modules/es.typed-array.to-string.js","core-js/modules/es.array.find.js","core-js/modules/es.number.constructor.js","core-js/modules/es.array.filter.js","core-js/modules/es.array.slice.js","core-js/modules/es.symbol.js","core-js/modules/es.symbol.iterator.js","core-js/modules/es.string.iterator.js","core-js/modules/web.dom-collections.iterator.js","core-js/modules/es.symbol.description.js","core-js/modules/es.array.includes.js","core-js/modules/es.string.includes.js","core-js/modules/es.number.is-finite.js","core-js/modules/es.regexp.to-string.js","core-js/modules/es.math.hypot.js","core-js/modules/es.array.join.js","core-js/modules/es.string.from-code-point.js","core-js/modules/es.string.match.js","core-js/modules/es.array.find-index.js","core-js/modules/es.array.sort.js","core-js/modules/es.regexp.flags.js","core-js/modules/es.string.pad-start.js","core-js/modules/es.array.from.js","core-js/modules/es.array-buffer.constructor.js","core-js/modules/es.global-this.js","core-js/modules/es.typed-array.uint32-array.js","core-js/modules/es.typed-array.int8-array.js","core-js/modules/es.typed-array.uint8-clamped-array.js","core-js/modules/es.typed-array.int16-array.js","core-js/modules/es.typed-array.uint16-array.js","core-js/modules/es.typed-array.int32-array.js","core-js/modules/es.typed-array.float32-array.js","core-js/modules/es.typed-array.float64-array.js","core-js/modules/web.url.js","core-js/modules/web.url-search-params.js","core-js/modules/es.string.replace.js","core-js/modules/es.number.is-nan.js","core-js/modules/es.object.get-prototype-of.js","core-js/modules/es.string.trim.js","core-js/modules/es.set.js"],t):(e="undefined"!=typeof globalThis?globalThis:e||self).Mp4Plugin=t(null,null,null,null,null,null,null,null,null,null,null,null,e.Player)}(this,(function(e,t,i,n,a,s,r,l,d,o,c,u,m){"use strict";function h(e,t){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),i.push.apply(i,n)}return i}function p(e){for(var t=1;t<arguments.length;t++){var i=null!=arguments[t]?arguments[t]:{};t%2?h(Object(i),!0).forEach((function(t){G(e,t,i[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(i)):h(Object(i)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(i,t))}))}return e}function Z(){Z=function(){return e};var e={},t=Object.prototype,i=t.hasOwnProperty,n=Object.defineProperty||function(e,t,i){e[t]=i.value},a="function"==typeof Symbol?Symbol:{},s=a.iterator||"@@iterator",r=a.asyncIterator||"@@asyncIterator",l=a.toStringTag||"@@toStringTag";function d(e,t,i){return Object.defineProperty(e,t,{value:i,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{d({},"")}catch(k){d=function(e,t,i){return e[t]=i}}function o(e,t,i,a){var s=t&&t.prototype instanceof m?t:m,r=Object.create(s.prototype),l=new V(a||[]);return n(r,"_invoke",{value:G(e,i,l)}),r}function c(e,t,i){try{return{type:"normal",arg:e.call(t,i)}}catch(k){return{type:"throw",arg:k}}}e.wrap=o;var u={};function m(){}function h(){}function p(){}var y={};d(y,s,(function(){return this}));var b=Object.getPrototypeOf,f=b&&b(b(S([])));f&&f!==t&&i.call(f,s)&&(y=f);var X=p.prototype=m.prototype=Object.create(y);function W(e){["next","throw","return"].forEach((function(t){d(e,t,(function(e){return this._invoke(t,e)}))}))}function v(e,t){function a(n,s,r,l){var d=c(e[n],e,s);if("throw"!==d.type){var o=d.arg,u=o.value;return u&&"object"==typeof u&&i.call(u,"__await")?t.resolve(u.__await).then((function(e){a("next",e,r,l)}),(function(e){a("throw",e,r,l)})):t.resolve(u).then((function(e){o.value=e,r(o)}),(function(e){return a("throw",e,r,l)}))}l(d.arg)}var s;n(this,"_invoke",{value:function(e,i){function n(){return new t((function(t,n){a(e,i,t,n)}))}return s=s?s.then(n,n):n()}})}function G(e,t,i){var n="suspendedStart";return function(a,s){if("executing"===n)throw new Error("Generator is already running");if("completed"===n){if("throw"===a)throw s;return{value:void 0,done:!0}}for(i.method=a,i.arg=s;;){var r=i.delegate;if(r){var l=L(r,i);if(l){if(l===u)continue;return l}}if("next"===i.method)i.sent=i._sent=i.arg;else if("throw"===i.method){if("suspendedStart"===n)throw n="completed",i.arg;i.dispatchException(i.arg)}else"return"===i.method&&i.abrupt("return",i.arg);n="executing";var d=c(e,t,i);if("normal"===d.type){if(n=i.done?"completed":"suspendedYield",d.arg===u)continue;return{value:d.arg,done:i.done}}"throw"===d.type&&(n="completed",i.method="throw",i.arg=d.arg)}}}function L(e,t){var i=t.method,n=e.iterator[i];if(void 0===n)return t.delegate=null,"throw"===i&&e.iterator.return&&(t.method="return",t.arg=void 0,L(e,t),"throw"===t.method)||"return"!==i&&(t.method="throw",t.arg=new TypeError("The iterator does not provide a '"+i+"' method")),u;var a=c(n,e.iterator,t.arg);if("throw"===a.type)return t.method="throw",t.arg=a.arg,t.delegate=null,u;var s=a.arg;return s?s.done?(t[e.resultName]=s.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=void 0),t.delegate=null,u):s:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,u)}function x(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function g(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function V(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(x,this),this.reset(!0)}function S(e){if(e){var t=e[s];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var n=-1,a=function t(){for(;++n<e.length;)if(i.call(e,n))return t.value=e[n],t.done=!1,t;return t.value=void 0,t.done=!0,t};return a.next=a}}return{next:Y}}function Y(){return{value:void 0,done:!0}}return h.prototype=p,n(X,"constructor",{value:p,configurable:!0}),n(p,"constructor",{value:h,configurable:!0}),h.displayName=d(p,l,"GeneratorFunction"),e.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===h||"GeneratorFunction"===(t.displayName||t.name))},e.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,p):(e.__proto__=p,d(e,l,"GeneratorFunction")),e.prototype=Object.create(X),e},e.awrap=function(e){return{__await:e}},W(v.prototype),d(v.prototype,r,(function(){return this})),e.AsyncIterator=v,e.async=function(t,i,n,a,s){void 0===s&&(s=Promise);var r=new v(o(t,i,n,a),s);return e.isGeneratorFunction(i)?r:r.next().then((function(e){return e.done?e.value:r.next()}))},W(X),d(X,l,"Generator"),d(X,s,(function(){return this})),d(X,"toString",(function(){return"[object Generator]"})),e.keys=function(e){var t=Object(e),i=[];for(var n in t)i.push(n);return i.reverse(),function e(){for(;i.length;){var n=i.pop();if(n in t)return e.value=n,e.done=!1,e}return e.done=!0,e}},e.values=S,V.prototype={constructor:V,reset:function(e){if(this.prev=0,this.next=0,this.sent=this._sent=void 0,this.done=!1,this.delegate=null,this.method="next",this.arg=void 0,this.tryEntries.forEach(g),!e)for(var t in this)"t"===t.charAt(0)&&i.call(this,t)&&!isNaN(+t.slice(1))&&(this[t]=void 0)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(e){if(this.done)throw e;var t=this;function n(i,n){return r.type="throw",r.arg=e,t.next=i,n&&(t.method="next",t.arg=void 0),!!n}for(var a=this.tryEntries.length-1;a>=0;--a){var s=this.tryEntries[a],r=s.completion;if("root"===s.tryLoc)return n("end");if(s.tryLoc<=this.prev){var l=i.call(s,"catchLoc"),d=i.call(s,"finallyLoc");if(l&&d){if(this.prev<s.catchLoc)return n(s.catchLoc,!0);if(this.prev<s.finallyLoc)return n(s.finallyLoc)}else if(l){if(this.prev<s.catchLoc)return n(s.catchLoc,!0)}else{if(!d)throw new Error("try statement without catch or finally");if(this.prev<s.finallyLoc)return n(s.finallyLoc)}}}},abrupt:function(e,t){for(var n=this.tryEntries.length-1;n>=0;--n){var a=this.tryEntries[n];if(a.tryLoc<=this.prev&&i.call(a,"finallyLoc")&&this.prev<a.finallyLoc){var s=a;break}}s&&("break"===e||"continue"===e)&&s.tryLoc<=t&&t<=s.finallyLoc&&(s=null);var r=s?s.completion:{};return r.type=e,r.arg=t,s?(this.method="next",this.next=s.finallyLoc,u):this.complete(r)},complete:function(e,t){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&t&&(this.next=t),u},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var i=this.tryEntries[t];if(i.finallyLoc===e)return this.complete(i.completion,i.afterLoc),g(i),u}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var i=this.tryEntries[t];if(i.tryLoc===e){var n=i.completion;if("throw"===n.type){var a=n.arg;g(i)}return a}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,i){return this.delegate={iterator:S(e),resultName:t,nextLoc:i},"next"===this.method&&(this.arg=void 0),u}},e}function y(e){return(y="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function b(e,t,i,n,a,s,r){try{var l=e[s](r),d=l.value}catch(o){return void i(o)}l.done?t(d):Promise.resolve(d).then(n,a)}function f(e){return function(){var t=this,i=arguments;return new Promise((function(n,a){var s=e.apply(t,i);function r(e){b(s,n,a,r,l,"next",e)}function l(e){b(s,n,a,r,l,"throw",e)}r(void 0)}))}}function X(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function W(e,t){for(var i=0;i<t.length;i++){var n=t[i];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,U(n.key),n)}}function v(e,t,i){return t&&W(e.prototype,t),i&&W(e,i),Object.defineProperty(e,"prototype",{writable:!1}),e}function G(e,t,i){return(t=U(t))in e?Object.defineProperty(e,t,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[t]=i,e}function L(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&g(e,t)}function x(e){return(x=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function g(e,t){return(g=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function V(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}function S(e,t,i){return(S=V()?Reflect.construct.bind():function(e,t,i){var n=[null];n.push.apply(n,t);var a=new(Function.bind.apply(e,n));return i&&g(a,i.prototype),a}).apply(null,arguments)}function Y(e){var t="function"==typeof Map?new Map:void 0;return Y=function(e){if(null===e||(i=e,-1===Function.toString.call(i).indexOf("[native code]")))return e;var i;if("function"!=typeof e)throw new TypeError("Super expression must either be null or a function");if(void 0!==t){if(t.has(e))return t.get(e);t.set(e,n)}function n(){return S(e,arguments,x(this).constructor)}return n.prototype=Object.create(e.prototype,{constructor:{value:n,enumerable:!1,writable:!0,configurable:!0}}),g(n,e)},Y(e)}function k(e,t){if(null==e)return{};var i,n,a=function(e,t){if(null==e)return{};var i,n,a={},s=Object.keys(e);for(n=0;n<s.length;n++)i=s[n],t.indexOf(i)>=0||(a[i]=e[i]);return a}(e,t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(n=0;n<s.length;n++)i=s[n],t.indexOf(i)>=0||Object.prototype.propertyIsEnumerable.call(e,i)&&(a[i]=e[i])}return a}function R(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function T(e,t){if(t&&("object"==typeof t||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return R(e)}function M(e){var t=V();return function(){var i,n=x(e);if(t){var a=x(this).constructor;i=Reflect.construct(n,arguments,a)}else i=n.apply(this,arguments);return T(this,i)}}function I(e,t){for(;!Object.prototype.hasOwnProperty.call(e,t)&&null!==(e=x(e)););return e}function w(){return w="undefined"!=typeof Reflect&&Reflect.get?Reflect.get.bind():function(e,t,i){var n=I(e,t);if(n){var a=Object.getOwnPropertyDescriptor(n,t);return a.get?a.get.call(arguments.length<3?e:i):a.value}},w.apply(this,arguments)}function K(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var i=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=i){var n,a,s,r,l=[],d=!0,o=!1;try{if(s=(i=i.call(e)).next,0===t){if(Object(i)!==i)return;d=!1}else for(;!(d=(n=s.call(i)).done)&&(l.push(n.value),l.length!==t);d=!0);}catch(c){o=!0,a=c}finally{try{if(!d&&null!=i.return&&(r=i.return(),Object(r)!==r))return}finally{if(o)throw a}}return l}}(e,t)||H(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function C(e){return function(e){if(Array.isArray(e))return F(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||H(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function H(e,t){if(e){if("string"==typeof e)return F(e,t);var i=Object.prototype.toString.call(e).slice(8,-1);return"Object"===i&&e.constructor&&(i=e.constructor.name),"Map"===i||"Set"===i?Array.from(e):"Arguments"===i||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(i)?F(e,t):void 0}}function F(e,t){(null==t||t>e.length)&&(t=e.length);for(var i=0,n=new Array(t);i<t;i++)n[i]=e[i];return n}function N(e,t){var i="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!i){if(Array.isArray(e)||(i=H(e))||t&&e&&"number"==typeof e.length){i&&(e=i);var n=0,a=function(){};return{s:a,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var s,r=!0,l=!1;return{s:function(){i=i.call(e)},n:function(){var e=i.next();return r=e.done,e},e:function(e){l=!0,s=e},f:function(){try{r||null==i.return||i.return()}finally{if(l)throw s}}}}function U(e){var t=function(e,t){if("object"!=typeof e||null===e)return e;var i=e[Symbol.toPrimitive];if(void 0!==i){var n=i.call(e,t||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:String(t)}var z={exports:{}};!function(e){var t=Object.prototype.hasOwnProperty,i="~";function n(){}function a(e,t,i){this.fn=e,this.context=t,this.once=i||!1}function s(e,t,n,s,r){if("function"!=typeof n)throw new TypeError("The listener must be a function");var l=new a(n,s||e,r),d=i?i+t:t;return e._events[d]?e._events[d].fn?e._events[d]=[e._events[d],l]:e._events[d].push(l):(e._events[d]=l,e._eventsCount++),e}function r(e,t){0==--e._eventsCount?e._events=new n:delete e._events[t]}function l(){this._events=new n,this._eventsCount=0}Object.create&&(n.prototype=Object.create(null),(new n).__proto__||(i=!1)),l.prototype.eventNames=function(){var e,n,a=[];if(0===this._eventsCount)return a;for(n in e=this._events)t.call(e,n)&&a.push(i?n.slice(1):n);return Object.getOwnPropertySymbols?a.concat(Object.getOwnPropertySymbols(e)):a},l.prototype.listeners=function(e){var t=i?i+e:e,n=this._events[t];if(!n)return[];if(n.fn)return[n.fn];for(var a=0,s=n.length,r=new Array(s);a<s;a++)r[a]=n[a].fn;return r},l.prototype.listenerCount=function(e){var t=i?i+e:e,n=this._events[t];return n?n.fn?1:n.length:0},l.prototype.emit=function(e,t,n,a,s,r){var l=i?i+e:e;if(!this._events[l])return!1;var d,o,c=this._events[l],u=arguments.length;if(c.fn){switch(c.once&&this.removeListener(e,c.fn,void 0,!0),u){case 1:return c.fn.call(c.context),!0;case 2:return c.fn.call(c.context,t),!0;case 3:return c.fn.call(c.context,t,n),!0;case 4:return c.fn.call(c.context,t,n,a),!0;case 5:return c.fn.call(c.context,t,n,a,s),!0;case 6:return c.fn.call(c.context,t,n,a,s,r),!0}for(o=1,d=new Array(u-1);o<u;o++)d[o-1]=arguments[o];c.fn.apply(c.context,d)}else{var m,h=c.length;for(o=0;o<h;o++)switch(c[o].once&&this.removeListener(e,c[o].fn,void 0,!0),u){case 1:c[o].fn.call(c[o].context);break;case 2:c[o].fn.call(c[o].context,t);break;case 3:c[o].fn.call(c[o].context,t,n);break;case 4:c[o].fn.call(c[o].context,t,n,a);break;default:if(!d)for(m=1,d=new Array(u-1);m<u;m++)d[m-1]=arguments[m];c[o].fn.apply(c[o].context,d)}}return!0},l.prototype.on=function(e,t,i){return s(this,e,t,i,!1)},l.prototype.once=function(e,t,i){return s(this,e,t,i,!0)},l.prototype.removeListener=function(e,t,n,a){var s=i?i+e:e;if(!this._events[s])return this;if(!t)return r(this,s),this;var l=this._events[s];if(l.fn)l.fn!==t||a&&!l.once||n&&l.context!==n||r(this,s);else{for(var d=0,o=[],c=l.length;d<c;d++)(l[d].fn!==t||a&&!l[d].once||n&&l[d].context!==n)&&o.push(l[d]);o.length?this._events[s]=1===o.length?o[0]:o:r(this,s)}return this},l.prototype.removeAllListeners=function(e){var t;return e?(t=i?i+e:e,this._events[t]&&r(this,t)):(this._events=new n,this._eventsCount=0),this},l.prototype.off=l.prototype.removeListener,l.prototype.addListener=l.prototype.on,l.prefixed=i,l.EventEmitter=l,e.exports=l}(z);var J,P=z.exports,j={};Object.defineProperty(j,"__esModule",{value:!0}),j.default=function(e){for(var t=0,i=arguments.length,n=Array(i>1?i-1:0),a=1;a<i;a++)n[a-1]=arguments[a];var s=!0,r=!1,l=void 0;try{for(var d,o=n[Symbol.iterator]();!(s=(d=o.next()).done);s=!0){var c=d.value;t+=c.length}}catch(X){r=!0,l=X}finally{try{!s&&o.return&&o.return()}finally{if(r)throw l}}var u=new e(t),m=0,h=!0,p=!1,Z=void 0;try{for(var y,b=n[Symbol.iterator]();!(h=(y=b.next()).done);h=!0){var f=y.value;u.set(f,m),m+=f.length}}catch(X){p=!0,Z=X}finally{try{!h&&b.return&&b.return()}finally{if(p)throw Z}}return u};var D=((J=j)&&J.__esModule?J:{default:J}).default,E="video",B="audio",Q="metadata",_="av1",O="avc",A="hevc",q="vvcC",$="aac",ee="g7110a",te="g7110m",ie="opus",ne="mp3",ae="LARGE_AV_SHIFT",se="LARGE_VIDEO_GAP",re="LARGE_VIDEO_GAP_BETWEEN_CHUNK",le="LARGE_AUDIO_GAP",de="AUDIO_FILLED",oe="AUDIO_DROPPED",ce=function(){function e(){X(this,e),G(this,"id",1),G(this,"type",E),G(this,"codecType",O),G(this,"pid",-1),G(this,"hvcC",void 0),G(this,"codec",""),G(this,"timescale",0),G(this,"formatTimescale",0),G(this,"sequenceNumber",0),G(this,"baseMediaDecodeTime",0),G(this,"baseDts",0),G(this,"duration",0),G(this,"warnings",[]),G(this,"samples",[]),G(this,"pps",[]),G(this,"sps",[]),G(this,"vps",[]),G(this,"fpsNum",0),G(this,"fpsDen",0),G(this,"sarRatio",[]),G(this,"width",0),G(this,"height",0),G(this,"nalUnitSize",4),G(this,"present",!1),G(this,"isVideoEncryption",!1),G(this,"isAudioEncryption",!1),G(this,"isVideo",!0),G(this,"lastKeyFrameDts",0),G(this,"kid",null),G(this,"pssh",null),G(this,"ext",void 0)}return v(e,[{key:"reset",value:function(){this.sequenceNumber=this.width=this.height=this.fpsDen=this.fpsNum=this.duration=this.baseMediaDecodeTime=this.timescale=0,this.codec="",this.present=!1,this.pid=-1,this.pps=[],this.sps=[],this.vps=[],this.sarRatio=[],this.samples=[],this.warnings=[],this.hvcC=null}},{key:"firstDts",get:function(){return this.samples.length?this.samples[0].dts:null}},{key:"firstPts",get:function(){return this.samples.length?this.samples[0].pts:null}},{key:"samplesDuration",get:function(){if(this.samples.length>0){var e=this.samples[0],t=this.samples[this.samples.length-1];return t.dts-e.dts+t.duration}return 0}},{key:"exist",value:function(){return!!/av01/.test(this.codec)||!!(this.pps.length&&this.sps.length&&this.codec)}},{key:"hasSample",value:function(){return!!this.samples.length}},{key:"isEncryption",get:function(){return this.isVideoEncryption}}]),e}(),ue=function(){function e(){X(this,e),G(this,"id",2),G(this,"type",B),G(this,"codecType",$),G(this,"pid",-1),G(this,"codec",""),G(this,"container",""),G(this,"sequenceNumber",0),G(this,"sampleDuration",0),G(this,"timescale",0),G(this,"formatTimescale",0),G(this,"baseMediaDecodeTime",0),G(this,"duration",0),G(this,"warnings",[]),G(this,"samples",[]),G(this,"baseDts",0),G(this,"sampleSize",16),G(this,"sampleRate",0),G(this,"channelCount",0),G(this,"objectType",0),G(this,"sampleRateIndex",0),G(this,"parsedCodec",null),G(this,"config",[]),G(this,"present",!1),G(this,"isVideoEncryption",!1),G(this,"isAudioEncryption",!1),G(this,"kid",null),G(this,"ext",void 0)}return v(e,[{key:"reset",value:function(){this.sequenceNumber=0,this.timescale=0,this.sampleDuration=0,this.sampleRate=0,this.channelCount=0,this.baseMediaDecodeTime=0,this.present=!1,this.pid=-1,this.codec="",this.samples=[],this.config=[],this.warnings=[]}},{key:"exist",value:function(){return!(!this.sampleRate||!this.channelCount||!this.codec&&!this.container||this.codecType!==$&&this.codecType!==ee&&this.codecType!==te&&this.codecType!==ie&&this.codecType!==ne)}},{key:"hasSample",value:function(){return!!this.samples.length}},{key:"isEncryption",get:function(){return this.isAudioEncryption}},{key:"firstDts",get:function(){return this.samples.length?this.samples[0].dts:null}},{key:"firstPts",get:function(){return this.samples.length?this.samples[0].pts:null}},{key:"samplesDuration",get:function(){if(this.samples.length>0){var e=this.samples[0],t=this.samples[this.samples.length-1];return t.dts-e.dts+t.duration}return 0}}]),e}(),me=function(){function e(t,i,n){X(this,e),G(this,"flag",{}),G(this,"keyframe",!1),G(this,"gopId",0),G(this,"duration",0),G(this,"size",0),G(this,"units",[]),G(this,"chromaFormat",420),G(this,"sideData",null),this.originPts=this.pts=t,this.originDts=this.dts=i,n&&(this.units=n)}return v(e,[{key:"cts",get:function(){return this.pts-this.dts}},{key:"setToKeyframe",value:function(){this.keyframe=!0,this.flag.dependsOn=2,this.flag.isNonSyncSample=0}}]),e}(),he=v((function e(t,i,n,a){X(this,e),G(this,"duration",1024),G(this,"flag",{dependsOn:2,isNonSyncSample:0}),G(this,"keyframe",!0),this.originPts=this.pts=this.dts=t,this.data=i,this.size=i.byteLength,this.sampleOffset=a,n&&(this.duration=n)})),pe=v((function e(t,i){X(this,e),G(this,"time",0),this.data=t,this.originPts=this.pts=i})),Ze=function(e){L(i,e);var t=M(i);function i(){return X(this,i),t.apply(this,arguments)}return v(i)}(pe),ye=function(e){L(i,e);var t=M(i);function i(){return X(this,i),t.apply(this,arguments)}return v(i)}(pe),be=function(){function e(){X(this,e),G(this,"id",3),G(this,"type",Q),G(this,"timescale",0),G(this,"flvScriptSamples",[]),G(this,"seiSamples",[])}return v(e,[{key:"exist",value:function(){return!(!this.flvScriptSamples.length&&!this.seiSamples.length||!this.timescale)}},{key:"reset",value:function(){this.timescale=0,this.flvScriptSamples=[],this.seiSamples=[]}},{key:"hasSample",value:function(){return!(!this.flvScriptSamples.length&&!this.seiSamples.length)}}]),e}(),fe=function(){function e(t){if(X(this,e),this._bitsAvailable=0,this._word=0,!t)throw new Error("ExpGolomb data params is required");this._data=t,this._bytesAvailable=t.byteLength,this._bytesAvailable&&this._loadWord()}return v(e,[{key:"bitsAvailable",get:function(){return this._bitsAvailable}},{key:"bitsPos",value:function(){return 8*this._bytesAvailable-this._bitsAvailable}},{key:"bitsLeft",value:function(){return 8*this._data.length-this.bitsPos()}},{key:"byteAligned",value:function(){return 0===this.bitsPos()||this.bitsPos()%8==0}},{key:"_loadWord",value:function(){var e=this._data.byteLength-this._bytesAvailable,t=Math.min(4,this._bytesAvailable);if(0===t)throw new Error("No bytes available");var i=new Uint8Array(4);i.set(this._data.subarray(e,e+t)),this._word=new DataView(i.buffer).getUint32(0),this._bitsAvailable=8*t,this._bytesAvailable-=t}},{key:"skipBits",value:function(e){if(this._bitsAvailable>e)this._word<<=e,this._bitsAvailable-=e;else{e-=this._bitsAvailable;var t=Math.floor(e/8);e-=8*t,this._bytesAvailable-=t,this._loadWord(),this._word<<=e,this._bitsAvailable-=e}}},{key:"readBits",value:function(e){if(e>32)throw new Error("Cannot read more than 32 bits");var t=Math.min(this._bitsAvailable,e),i=this._word>>>32-t;return this._bitsAvailable-=t,this._bitsAvailable>0?this._word<<=t:this._bytesAvailable>0&&this._loadWord(),(t=e-t)>0&&this._bitsAvailable?i<<t|this.readBits(t):i}},{key:"skipLZ",value:function(){var e;for(e=0;e<this._bitsAvailable;++e)if(0!=(this._word&2147483648>>>e))return this._word<<=e,this._bitsAvailable-=e,e;return this._loadWord(),e+this.skipLZ()}},{key:"skipUEG",value:function(){this.skipBits(1+this.skipLZ())}},{key:"readUEG",value:function(){var e=this.skipLZ();return this.readBits(e+1)-1}},{key:"readEG",value:function(){var e=this.readUEG();return 1&e?1+e>>>1:-1*(e>>>1)}},{key:"readBool",value:function(){return 1===this.readBits(1)}},{key:"readUByte",value:function(){return this.readBits(8)}},{key:"skipScalingList",value:function(e){for(var t=8,i=8,n=0;n<e;n++)0!==i&&(i=(t+this.readEG()+256)%256),t=0===i?t:i}}]),e}(),Xe=function(){function e(t,i){X(this,e),this.offset=0,this.val=t,this.size=i}return v(e,[{key:"skip",value:function(e){this.offset+=e}},{key:"read",value:function(e){var t=this.size-this.offset-e;if(t>=0){var i=0,n=0;if(this.offset+=e,this.size>31){for(;n<e;n++)i+=Math.pow(2,n);return this.val/Math.pow(2,t)&i}for(;n<e;n++)i+=1<<n;return this.val>>>t&i}throw new Error("the number of the read operation exceeds the total length limit of bits")}}],[{key:"fromByte",value:function(t,i){return new e(t.read(i),i<<3)}}]),e}(),We=function(){function e(t,i,n){X(this,e),this.dv=new DataView(t),this.start=this.offset=i||this.dv.byteOffset,this.end=n?this.start+n:this.start+this.dv.byteLength}return v(e,[{key:"buffer",get:function(){return this.dv.buffer}},{key:"unreadLength",get:function(){return Math.max(this.end-this.offset,0)}},{key:"size",get:function(){return this.end-this.start}},{key:"readFloat",value:function(e){var t=0;switch(e){case 4:t=this.dv.getFloat32(this.offset);break;case 8:t=this.dv.getFloat64(this.offset);break;default:throw new Error("read ".concat(e,"-byte float is not supported"))}return this.offset+=e,t}},{key:"back",value:function(e){this.offset-=e}},{key:"skip",value:function(e){this.offset+=e}},{key:"readInt",value:function(e){var t=this.offset;switch(this.offset+=e,e){case 1:return this.dv.getInt8(t);case 2:return this.dv.getInt16(t);case 4:return this.dv.getInt32(t);default:throw new Error("read ".concat(e,"-byte integers is not supported"))}}},{key:"read",value:function(e){var t=this.offset;switch(this.offset+=e,e){case 1:return this.dv.getUint8(t);case 2:return this.dv.getUint16(t);case 3:return(this.dv.getUint16(t)<<8)+this.dv.getUint8(t+2);case 4:return this.dv.getUint32(t);default:return this.back(e-4),this.read(e-4)+this.dv.getUint32(t)*Math.pow(256,e-4)}}},{key:"write",value:function(e,t){var i=this.offset;switch(this.offset+=e,e){case 1:return this.dv.setUint8(i,t);case 2:return this.dv.setUint16(i,t);case 3:return this.dv.setUint8(i,t>>>16),this.dv.setUint16(i+1,65535&t);case 4:return this.dv.setUint32(i,t);default:throw new Error("write ".concat(e,"-byte integers is not supported"))}}},{key:"readToBuffer",value:function(e){var t;return t=this.offset||e?this.dv.buffer.slice(this.offset,e?this.offset+e:this.end):this.dv.buffer,this.offset+=t.byteLength,t}},{key:"readToUint8",value:function(e){var t=new Uint8Array(this.dv.buffer,this.offset,e||this.unreadLength);return this.offset+=t.byteLength,t}},{key:"readString",value:function(e){for(var t=0,i="";t<e;t++)i+=String.fromCharCode(this.dv.getUint8(this.offset)),this.offset++;return i}}],[{key:"fromUint8",value:function(t){return new e(t.buffer,t.byteOffset,t.byteLength)}},{key:"concatUint8s",value:function(e){var t=new Uint8Array(e.reduce((function(e,t){return e+t.byteLength}),0)),i=0;return e.forEach((function(e){t.set(e,i),i+=e.byteLength})),t}},{key:"concatUint8",value:function(){for(var e=arguments.length,t=new Array(e),i=0;i<e;i++)t[i]=arguments[i];return this.concatUint8s(t)}}]),e}(),ve=function(){function e(t){X(this,e),this.name=t||"",this._prefix="[".concat(this.name,"]")}return v(e,[{key:"warn",value:function(){var t;if(!e.disabled){for(var i=arguments.length,n=new Array(i),a=0;a<i;a++)n[a]=arguments[a];(t=console).warn.apply(t,[this._prefix].concat(n))}}}],[{key:"enable",value:function(){e.disabled=!1}},{key:"disable",value:function(){e.disabled=!0}}]),e}();G(ve,"disabled",!0);var Ge=function(){function e(){X(this,e)}return v(e,null,[{key:"decode",value:function(t){for(var i=[],n=t,a=0,s=t.length;a<s;)if(n[a]<128)i.push(String.fromCharCode(n[a])),++a;else{if(n[a]<192);else if(n[a]<224){if(e._checkContinuation(n,a,1)){var r=(31&n[a])<<6|63&n[a+1];if(r>=128){i.push(String.fromCharCode(65535&r)),a+=2;continue}}}else if(n[a]<240){if(e._checkContinuation(n,a,2)){var l=(15&n[a])<<12|(63&n[a+1])<<6|63&n[a+2];if(l>=2048&&55296!=(63488&l)){i.push(String.fromCharCode(65535&l)),a+=3;continue}}}else if(n[a]<248&&e._checkContinuation(n,a,3)){var d=(7&n[a])<<18|(63&n[a+1])<<12|(63&n[a+2])<<6|63&n[a+3];if(d>65536&&d<1114112){d-=65536,i.push(String.fromCharCode(d>>>10|55296)),i.push(String.fromCharCode(1023&d|56320)),a+=4;continue}}i.push(String.fromCharCode(65533)),++a}return i.join("")}},{key:"_checkContinuation",value:function(e,t,i){var n=e;if(t+i<n.length){for(;i--;)if(128!=(192&n[++t]))return!1;return!0}return!1}}]),e}(),Le="undefined"!=typeof window,xe=Le&&navigator.userAgent.toLocaleLowerCase(),ge=Le&&/^((?!chrome|android).)*safari/.test(xe),Ve=Le&&xe.includes("firefox"),Se=Le&&xe.includes("android");function Ye(){for(var e=arguments.length,t=new Array(e),i=0;i<e;i++)t[i]=arguments[i];t=t.filter(Boolean);var n=new Uint8Array(t.reduce((function(e,t){return e+t.byteLength}),0)),a=0;return t.forEach((function(e){n.set(e,a),a+=e.byteLength})),n}var ke=Math.pow(2,32);function Re(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;return(e[t]<<8)+(e[t+1]||0)}function Te(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;return(e[t]<<24>>>0)+(e[t+1]<<16)+(e[t+2]<<8)+(e[t+3]||0)}function Me(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,i=new DataView(e.buffer,e.byteOffset,e.byteLength);return i.getInt32(t)}function Ie(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;return Te(e,t)*ke+Te(e,t+4)}function we(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,i=new DataView(e.buffer,e.byteOffset,e.byteLength);return i.getUint32(t)<<32|i.getUint32(t+4)}function Ke(e){for(var t,i="avc1.",n=0;n<3;n++)(t=e[n].toString(16)).length<2&&(t="0".concat(t)),i+=t;return i}function Ce(e){var t="";if(e.forEach((function(e){t+=function(e){return("0"+Number(e).toString(16)).slice(-2).toUpperCase()}(e)})),t.length<=32)for(var i=32-t.length,n=0;n<i;n++)t+="0";return t}function He(e){if(!Array.isArray(e)){for(var t=[],i="",n=0;n<e.length;n++)n%2&&(i=e[n-1]+e[n],t.push(parseInt(i,16)),i="");return t}return e.map((function(e){return parseInt(e,16)}))}function Fe(e,t){return Number(e+"."+t)}var Ne=function(){function e(){X(this,e)}return v(e,null,[{key:"getRateIndexByRate",value:function(t){return e.FREQ.indexOf(t)}},{key:"parseADTS",value:function(t,i){for(var n=t.length,a=0;a+2<n&&(255!==t[a]||240!=(246&t[a+1]));)a++;if(!(a>=n)){var s=a,r=[],l=(60&t[a+2])>>>2,d=e.FREQ[l];if(!d)throw new Error("Invalid sampling index: ".concat(l));for(var o,c,u=1+((192&t[a+2])>>>6),m=(1&t[a+2])<<2|(192&t[a+3])>>>6,h=e._getConfig(l,m,u),p=h.config,Z=h.codec,y=0,b=e.getFrameDuration(d);a+7<n;)if(255===t[a]&&240==(246&t[a+1])){if(!(c=(3&t[a+3])<<11|t[a+4]<<3|(224&t[a+5])>>5)||n-a<c)break;o=2*(1&~t[a+1]),r.push({pts:i+y*b,data:t.subarray(a+7+o,a+c)}),y++,a+=c}else a++;return{skip:s,remaining:a>=n?void 0:t.subarray(a),frames:r,samplingFrequencyIndex:l,sampleRate:d,objectType:u,channelCount:m,codec:Z,config:p,originCodec:"mp4a.40.".concat(u)}}}},{key:"parseAudioSpecificConfig",value:function(t){if(t.length){var i=t[0]>>>3,n=(7&t[0])<<1|t[1]>>>7,a=(120&t[1])>>>3,s=e.FREQ[n];if(s){var r=e._getConfig(n,a,i);return{samplingFrequencyIndex:n,sampleRate:s,objectType:i,channelCount:a,config:r.config,codec:r.codec,originCodec:"mp4a.40.".concat(i)}}}}},{key:"getFrameDuration",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:9e4;return 1024*t/e}},{key:"_getConfig",value:function(e,t,i){var n,a,s=[];return Ve?e>=6?(n=5,a=e-3):(n=2,a=e):Se?(n=2,a=e):(n=5,a=e,e>=6?a=e-3:1===t&&(n=2,a=e)),s[0]=n<<3,s[0]|=(14&e)>>1,s[1]=(1&e)<<7,s[1]|=t<<3,5===n&&(s[1]|=(14&a)>>1,s[2]=(1&a)<<7,s[2]|=8,s[3]=0),{config:s,codec:"mp4a.40.".concat(n)}}},{key:"getSilentFrame",value:function(e,t){if("mp4a.40.2"===e){if(1===t)return new Uint8Array([0,200,0,128,35,128]);if(2===t)return new Uint8Array([33,0,73,144,2,25,0,35,128]);if(3===t)return new Uint8Array([0,200,0,128,32,132,1,38,64,8,100,0,142]);if(4===t)return new Uint8Array([0,200,0,128,32,132,1,38,64,8,100,0,128,44,128,8,2,56]);if(5===t)return new Uint8Array([0,200,0,128,32,132,1,38,64,8,100,0,130,48,4,153,0,33,144,2,56]);if(6===t)return new Uint8Array([0,200,0,128,32,132,1,38,64,8,100,0,130,48,4,153,0,33,144,2,0,178,0,32,8,224])}else{if(1===t)return new Uint8Array([1,64,34,128,163,78,230,128,186,8,0,0,0,28,6,241,193,10,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,94]);if(2===t)return new Uint8Array([1,64,34,128,163,94,230,128,186,8,0,0,0,0,149,0,6,241,161,10,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,94]);if(3===t)return new Uint8Array([1,64,34,128,163,94,230,128,186,8,0,0,0,0,149,0,6,241,161,10,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,94])}}}]),e}();G(Ne,"FREQ",[96e3,88200,64e3,48e3,44100,32e3,24e3,22050,16e3,12e3,11025,8e3,7350]);var Ue=function(){function e(){X(this,e)}return v(e,null,[{key:"parseAnnexB",value:function(e){var t=e.byteLength-1,i=0;do{if(0!==e[t])break;i++,t--}while(t>0);i>=3&&(e=e.subarray(0,t+1));for(var n=e.length,a=2,s=0;null!==e[a]&&void 0!==e[a]&&1!==e[a];)a++;if((s=++a+2)>=n)return[];for(var r=[];s<n;)switch(e[s]){case 0:if(0!==e[s-1]){s+=2;break}if(0!==e[s-2]){s++;break}if(s<n-1&&1!==e[s+1]){s++;break}a!==s-2&&r.push(e.subarray(a,s-2));do{s++}while(1!==e[s]&&s<n);s=(a=s+1)+2;break;case 1:if(0!==e[s-1]||0!==e[s-2]){s+=3;break}a!==s-2&&r.push(e.subarray(a,s-2)),s=(a=s+1)+2;break;default:s+=3}return a<n&&r.push(e.subarray(a)),r}},{key:"parseAvcC",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:4;if(!(e.length<4)){for(var i,n=e.length,a=[],s=0;s+t<n;)if(i=Te(e,s),3===t&&(i>>>=8),s+=t,i){if(s+i>n)break;a.push(e.subarray(s,s+i)),s+=i}return a}}},{key:"parseSEI",value:function(e,t){for(var i=e.length,n=t?2:1,a=0,s=0,r="";255===e[n];)a+=255,n++;for(a+=e[n++];255===e[n];)s+=255,n++;if(s+=e[n++],5===a&&i>n+16)for(var l=0;l<16;l++)r+=e[n].toString(16),n++;return{payload:e.subarray(n,n+s),type:a,size:s,uuid:r}}},{key:"removeEPB",value:function(e){for(var t=e.byteLength,i=[],n=1;n<t-2;)0===e[n]&&0===e[n+1]&&3===e[n+2]?(i.push(n+2),n+=2):n++;if(!i.length)return e;var a=t-i.length,s=new Uint8Array(a),r=0;for(n=0;n<a;r++,n++)r===i[0]&&(r++,i.shift()),s[n]=e[r];return s}}]),e}(),ze=function(){function e(){X(this,e)}return v(e,null,[{key:"parseAVCDecoderConfigurationRecord",value:function(t){if(!(t.length<7)){for(var i,n,a=1+(3&t[4]),s=[],r=[],l=6,d=31&t[5],o=0;o<d;o++)if(n=t[l]<<8|t[l+1],l+=2,n){var c=t.subarray(l,l+n);l+=n,s.push(c),i||(i=e.parseSPS(Ue.removeEPB(c)))}var u,m=t[l];l++;for(var h=0;h<m;h++)u=t[l]<<8|t[l+1],l+=2,u&&(r.push(t.subarray(l,l+u)),l+=u);return{sps:i,spsArr:s,ppsArr:r,nalUnitSize:a}}}},{key:"parseSPS",value:function(e){var t=new fe(e);t.readUByte();var i=t.readUByte(),n=t.readUByte(),a=t.readUByte();t.skipUEG();var s=420;if(100===i||110===i||122===i||244===i||44===i||83===i||86===i||118===i||128===i||138===i||144===i){var r=t.readUEG();if(r<=3&&(s=[0,420,422,444][r]),3===r&&t.skipBits(1),t.skipUEG(),t.skipUEG(),t.skipBits(1),t.readBool())for(var l=3!==r?8:12,d=0;d<l;d++)t.readBool()&&(d<6?t.skipScalingList(16):t.skipScalingList(64))}t.skipUEG();var o=t.readUEG();if(0===o)t.readUEG();else if(1===o){t.skipBits(1),t.skipUEG(),t.skipUEG();for(var c=t.readUEG(),u=0;u<c;u++)t.skipUEG()}t.skipUEG(),t.skipBits(1);var m=t.readUEG(),h=t.readUEG(),p=t.readBits(1);0===p&&t.skipBits(1),t.skipBits(1);var Z,y,b,f,X,W=0,v=0,G=0,L=0;if(t.readBool()&&(W=t.readUEG(),v=t.readUEG(),G=t.readUEG(),L=t.readUEG()),t.readBool()){if(t.readBool())switch(t.readUByte()){case 1:Z=[1,1];break;case 2:Z=[12,11];break;case 3:Z=[10,11];break;case 4:Z=[16,11];break;case 5:Z=[40,33];break;case 6:Z=[24,11];break;case 7:Z=[20,11];break;case 8:Z=[32,11];break;case 9:Z=[80,33];break;case 10:Z=[18,11];break;case 11:Z=[15,11];break;case 12:Z=[64,33];break;case 13:Z=[160,99];break;case 14:Z=[4,3];break;case 15:Z=[3,2];break;case 16:Z=[2,1];break;case 255:Z=[t.readUByte()<<8|t.readUByte(),t.readUByte()<<8|t.readUByte()]}if(t.readBool()&&t.readBool(),t.readBool()&&(t.readBits(4),t.readBool()&&t.readBits(24)),t.readBool()&&(t.readUEG(),t.readUEG()),t.readBool()){var x=t.readBits(32),g=t.readBits(32);y=t.readBool(),X=(b=g)/(f=2*x)}}return{codec:Ke(e.subarray(1,4)),profileIdc:i,profileCompatibility:n,levelIdc:a,chromaFormat:s,width:Math.ceil(16*(m+1)-2*(W+v)),height:(2-p)*(h+1)*16-(p?2:4)*(G+L),sarRatio:Z,fpsNum:b,fpsDen:f,fps:X,fixedFrame:y}}}]),e}();function Je(e,t){return t?e.readToUint8(t).slice():new Uint8Array}var Pe=function(){function e(){X(this,e)}return v(e,null,[{key:"getNalType",value:function(e){if(e&&!(e.byteLength<=1))return(248&e[1])>>3}},{key:"getNalTypes",value:function(t){return null!=t&&t.length?t.map((function(t){return e.getNalType(t)})).filter((function(e){return"number"==typeof e})):[]}},{key:"getNalInfo",value:function(t){var i=e.getNalTypes(t);if(i.length){var n="";return i.includes(7)||i.includes(8)?n="idr":i.includes(9)&&(n="cra"),{nalTypes:i,randomAccessType:n,rasl:i.includes(3)}}}},{key:"buildCodecString",value:function(e,t){var i=e||"vvc1";if(!t)return"".concat(i,".1.L93");var n=t.generalProfileIdc||1,a=t.generalTierFlag?"H":"L",s=t.generalLevelIdc||93;return"".concat(i,".").concat(n,".").concat(a).concat(s)}},{key:"parseVVCDecoderConfigurationRecord",value:function(t,i){return e._parseStandardVvcConfigurationRecord(t,i||"vvc1")}},{key:"_parseStandardVvcConfigurationRecord",value:function(t,i){var n=t;n.length>=5&&n[0]<248&&(n=n.subarray(4));var a=We.fromUint8(n),s=Xe.fromByte(a,1);s.read(5);var r,l,d,o,c,u,m,h=s.read(2),p=s.read(1),Z=1,y={};if(p){var b=Xe.fromByte(a,2);r=b.read(9),Z=b.read(3),l=b.read(2),d=b.read(2);var f=Xe.fromByte(a,1);o=f.read(3),f.read(5),y=e.parseVVCPTLRecord(a,Z),c=a.read(2),u=a.read(2),m=a.read(2)}var X=e._parseVVCNalArrays(a);return{data:t,codec:e.buildCodecString(i,y),sampleEntryType:i||"vvc1",nalUnitSize:h+1,ptlPresentFlag:p,olsIdx:r,numSublayers:Z,constantFrameRate:l,chromaFormatIdc:d,bitDepthLumaMinus8:o,ptlRecord:y,width:c,height:u,sampleRate:m,numOfArrays:X.numOfArrays,vps:X.vps,sps:X.sps,pps:X.pps,spsParsed:X.spsParsed}}},{key:"_parseVVCNalArrays",value:function(t){for(var i=t.read(1),n=[],a=[],s=[],r=null,l=0;l<i;l++){var d=Xe.fromByte(t,1);d.read(1),d.read(2);var o=d.read(5),c=1;13!==o&&12!==o&&(c=t.read(2));for(var u=0;u<c;u++){var m=t.read(2);switch(o){case 14:n.push(Je(t,m));break;case 15:var h=Je(t,m);if(!r)try{r=e.parseSPS(e.removeEPB(h))}catch(p){}a.push(h);break;case 16:s.push(Je(t,m));break;default:Je(t,m)}}}return{numOfArrays:i,vps:n,sps:a,pps:s,spsParsed:r}}},{key:"parseVVCPTLRecord",value:function(e,t){var i=Xe.fromByte(e,2);i.read(2);var n=i.read(6),a=i.read(7),s=i.read(1),r=e.read(1),l=Xe.fromByte(e,1),d=l.read(1),o=l.read(1),c=new Uint8Array(n);if(n){for(var u=0;u<n-1;u++){var m=l.read(6),h=(l=Xe.fromByte(e,1)).read(2);c[u]=m<<2|h}c[n-1]=l.read(6)}else l.read(6);var p=[];if(t>1){for(var Z=Xe.fromByte(e,1),y=0,b=t-2;b>=0;--b){y|=Z.read(1)<<b}for(var f=t;f<=8&&t>1;++f)Z.read(1);for(var X=t-2;X>=0;--X)y&1<<X&&(p[X]=e.read(1))}var W=e.read(1),v=[];if(W)for(var G=0;G<W;G++)v.push(e.readInt(4));return{generalProfileIdc:a,generalTierFlag:s,generalLevelIdc:r,ptlFrameOnlyConstraintFlag:d,ptlMultilayerEnabledFlag:o,generalConstraintInfo:c,subLayerLevelIdc:p,generalSubProfileIdc:v,ptlNumSubProfiles:W,numBytesConstraintInfo:n}}},{key:"getAvccNals",value:function(e){for(var t=[];e.position<e.length-4;){var i=e.dataview.getInt32(e.dataview.position);if(!(e.length-e.position>=i))break;var n=e.buffer.slice(e.position,e.position+4);e.skip(4);var a=new Uint8Array(e.buffer.slice(e.position,e.position+i));e.skip(i),t.push({header:n,body:a})}return t}},{key:"analyseNal",value:function(e){var t=(248&e.body[1])>>3;switch(e.type=t,t){case 23:case 24:break;case 7:case 8:e.key=!0;break;case 14:e.vps=!0;break;case 15:e.sps=!0;break;case 16:e.pps=!0;break;case 17:e.aps=!0}}},{key:"removeEPB",value:function(e){for(var t=e.byteLength,i=[],n=1;n<t-2;)0===e[n]&&0===e[n+1]&&3===e[n+2]?(i.push(n+2),n+=2):n++;if(!i.length)return e;var a=t-i.length,s=new Uint8Array(a),r=0;for(n=0;n<a;r++,n++)r===i[0]&&(r++,i.shift()),s[n]=e[r];return s}},{key:"parseVps",value:function(){}},{key:"parseSPS",value:function(t){var i=new fe(t);i.readUByte(),i.readUByte(),i.skipBits(4);var n=i.readBits(4),a=i.readBits(3),s=i.readBits(2),r=420;s<=3&&(r=[0,420,422,444][s]),i.readBits(2),i.readBits(1);var l=e._parseProfileTierLevel(i,1,a);return i.readBits(1),i.readBits(1)&&i.readBits(1),{width:i.readUEG(),height:i.readUEG(),spsMaxSubLayerMinus1:a,spsVideoParameterSetId:n,chromaFormatIdc:s,chromaFormat:r,ptlInfo:l}}},{key:"_parseProfileTierLevel",value:function(t,i,n){var a,s=t.readBits(7),r=t.readBits(1),l=t.readBits(8),d=t.readBits(1),o=t.readBits(1);i&&(a=e._parseGeneralConstraintsInfo(t));for(var c=n-1,u=[],m=[],h=[],p=c;p>=0;--p)u[p]=t.readBits(1);for(;!t.byteAligned();)t.readBits(1);for(var Z=c;Z>=0;--Z)u[Z]&&(m[Z]=t.readUByte());if(i)for(var y=t.readUByte(),b=0;b<y;b++)h[b]=t.readBits(32);return{generalProfileIdc:s,generalTierFlag:r,generalLevelIdc:l,ptlFrameOnlyConstraintFlag:d,ptlMultilayerEnabledFlag:o,ptlSublayerLevelPresentFlags:u,ptlSublayerLevelIdcs:m,ptlSubProfileIdcs:h,gciInfo:a}}},{key:"_parseGeneralConstraintsInfo",value:function(e){var t=e.readBits(1);if(t){e.skipBits(71);var i=e.readBits(8);i&&e.skipBits(i)}var n=8-e.bitsPos()%8;return e.skipBits(n),{gciPresentFlag:t}}}]),e}(),je=function(){function e(){X(this,e)}return v(e,null,[{key:"parseHEVCDecoderConfigurationRecord",value:function(t){var i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!(t.length<23)){i=i||{};for(var n,a,s,r,l,d=1+(3&t[21]),o=[],c=[],u=[],m=23,h=t[22],p=0;p<h;p++){s=63&t[m],r=t[m+1]<<8|t[m+2],m+=3;for(var Z=0;Z<r;Z++)if(l=t[m]<<8|t[m+1],m+=2,l){switch(s){case 32:var y=t.subarray(m,m+l);n||(n=e.parseVPS(Ue.removeEPB(y),i)),u.push(y);break;case 33:var b=t.subarray(m,m+l);a||(a=e.parseSPS(Ue.removeEPB(b),i)),o.push(b);break;case 34:c.push(t.subarray(m,m+l))}m+=l}}return{hvcC:i,sps:a,spsArr:o,ppsArr:c,vpsArr:u,nalUnitSize:d}}}},{key:"parseVPS",value:function(t,i){i=i||{};var n=new fe(t);n.readUByte(),n.readUByte(),n.readBits(12);var a=n.readBits(3);return i.numTemporalLayers=Math.max(i.numTemporalLayers||0,a+1),n.readBits(17),e._parseProfileTierLevel(n,a,i),i}},{key:"parseSPS",value:function(t){var i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};i=i||{};var n=new fe(t);n.readUByte(),n.readUByte(),n.readBits(4);var a=n.readBits(3);i.numTemporalLayers=Math.max(a+1,i.numTemporalLayers||0),i.temporalIdNested=n.readBits(1),e._parseProfileTierLevel(n,a,i),n.readUEG();var s=i.chromaFormatIdc=n.readUEG(),r=420;s<=3&&(r=[0,420,422,444][s]);var l=0;3===s&&(l=n.readBits(1));var d,o,c,u,m=n.readUEG(),h=n.readUEG(),p=n.readBits(1);if(1===p&&(d=n.readUEG(),o=n.readUEG(),c=n.readUEG(),u=n.readUEG()),i.bitDepthLumaMinus8=n.readUEG(),i.bitDepthChromaMinus8=n.readUEG(),1===p){var Z=1!==s&&2!==s||0!==l?1:2,y=1===s&&0===l?2:1;m-=Z*(o+d),h-=y*(u+c)}return{codec:"hev1.1.6.L93.B0",width:m,height:h,chromaFormat:r,hvcC:i}}},{key:"_parseProfileTierLevel",value:function(e,t,i){var n=i.generalTierFlag||0;i.generalProfileSpace=e.readBits(2),i.generalTierFlag=Math.max(e.readBits(1),n),i.generalProfileIdc=Math.max(e.readBits(5),i.generalProfileIdc||0),i.generalProfileCompatibilityFlags=e.readBits(32),i.generalConstraintIndicatorFlags=[e.readBits(8),e.readBits(8),e.readBits(8),e.readBits(8),e.readBits(8),e.readBits(8)];var a=e.readBits(8);n<i.generalTierFlag?i.generalLevelIdc=a:i.generalLevelIdc=Math.max(a,i.generalLevelIdc||0);var s=[],r=[];if(t>e.bitsAvailable)throw new Error("maxSubLayersMinus inavlid size ".concat(t));for(var l=0;l<t;l++)s[l]=e.readBits(1),r[l]=e.readBits(1);t>0&&e.readBits(2*(8-t));for(var d=0;d<t;d++)0!==s[d]&&(e.readBits(2),e.readBits(1),e.readBits(5),e.readBits(16),e.readBits(16),e.readBits(4),e.readBits(16),e.readBits(16),e.readBits(12)),0!==r[d]&&e.readBits(8)}}]),e}(),De=function(){function e(){X(this,e)}return v(e,null,[{key:"getFrameDuration",value:function(e){return 20}},{key:"parseHeaderPackets",value:function(e){if(e.length){for(var t=new DataView(e.buffer,e.byteOffset,e.byteLength),i="",n=0;n<8;n++)i+=String.fromCodePoint(e[n]);if("OpusHead"!==i)throw new Error("Invalid Opus MagicSignature");var a=e[9];console.log("Pre-skip",e[10],e[11]);var s=t.getUint32(12,!0),r=t.getInt16(16,!0);if(s){return{outputGain:r,sampleRate:s,channelCount:a,config:new Uint8Array(e.buffer,e.byteOffset+8,e.byteLength-8),codec:"opus",originCodec:"opus"}}}}}]),e}(),Ee=[],Be=Object.create(null),Qe=Object.create(null),_e=Object.create(null),Oe=[];function Ae(e){return(e||[]).filter(Boolean)}var qe,$e=function(){function e(){X(this,e)}return v(e,[{key:"register",value:function(e){if(!e||!e.id)throw new Error("video codec id is required");var t=Ee.find((function(t){return t.id===e.id}));return t&&this.unregister(t.id),Ee.push(e),function(e){Ae(e.sampleEntries).forEach((function(t){Be[t]=e})),Ae(e.configBoxes).forEach((function(t){Qe[t]=e})),Ae(e.codecStringPrefixes).forEach((function(t){Oe.push({prefix:t,codec:e})})),e.codecType&&!_e[e.codecType]&&(_e[e.codecType]=e)}(e),e}},{key:"unregister",value:function(e){var t=Ee.findIndex((function(t){return t.id===e}));if(!(t<0)){var i=K(Ee.splice(t,1),1)[0];return function(e){Ae(e.sampleEntries).forEach((function(t){Be[t]===e&&delete Be[t]})),Ae(e.configBoxes).forEach((function(t){Qe[t]===e&&delete Qe[t]})),e.codecType&&_e[e.codecType]===e&&delete _e[e.codecType];for(var t=Oe.length-1;t>=0;t--)Oe[t].codec===e&&Oe.splice(t,1)}(i),i}}},{key:"getBySampleEntry",value:function(e){return Be[e]}},{key:"getByConfigBox",value:function(e){return Qe[e]}},{key:"getByCodecType",value:function(e){return _e[e]}},{key:"getByCodecString",value:function(e){var t;if(e)return null===(t=Oe.find((function(t){return 0===e.indexOf(t.prefix)})))||void 0===t?void 0:t.codec}},{key:"getByTrack",value:function(e){if(e){var t=e.vvccSampleEntryType;if(t&&this.getBySampleEntry(t))return this.getBySampleEntry(t);var i=this.getByCodecString(e.codec);return i||this.getByCodecType(e.codecType)}}},{key:"list",value:function(){return Ee.slice()}}]),e}(),et=new $e;function tt(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return e.track?et.getByTrack(e.track):e.sampleEntry?et.getBySampleEntry(e.sampleEntry):e.configBox?et.getByConfigBox(e.configBox):e.codecType?et.getByCodecType(e.codecType):e.codec?et.getByCodecString(e.codec):void 0}qe={id:"vvc",kind:"video",codecType:q,sampleEntries:["vvc1","vvi1"],configBoxes:["vvcC"],codecStringPrefixes:["vvc1.","vvi1."],trackConfigKey:"vvcC",sampleEntryTrackKey:"vvccSampleEntryType",parseConfigBox:function(e){var t=e.data;e.box;var i=e.sampleEntryType;return Pe.parseVVCDecoderConfigurationRecord(t,i||"vvc1")},applyTrackConfig:function(e){var t,i,n,a,s,r,l,d;a=(t=e).track,s=t.entry,r=t.config,l=t.defaultSampleEntryType,d=void 0===l?"vvc1":l,a.codecType=q,a.codec=r.codec,a.sps=r.sps,a.pps=r.pps,a.vps=r.vps,a.vvcC=r.data,r.nalUnitSize&&(a.nalUnitSize=r.nalUnitSize),a.vvccSampleEntryType="encv"===s.type?(null===(i=s.sinf)||void 0===i||null===(n=i.frma)||void 0===n?void 0:n.data_format)||r.sampleEntryType||d:s.type},getSampleEntryType:function(e){return e.track.vvccSampleEntryType||"vvc1"},getConfigBoxType:function(e){return e.track,"vvcC"},buildConfigBox:function(e){var t=e.track;return function(e){var t=e.track,i=e.MP4,n=e.configBoxType,a=void 0===n?"vvcC":n;return i.box(i.type(a),new Uint8Array(t.vvcC))}({track:t,MP4:e.MP4,configBoxType:this.getConfigBoxType({track:t})})},buildFtyp:function(e){return e.track,e.MP4.FTYPVVC1},markSample:function(e){var t,i;t=e.sample,(i=Pe.getNalInfo(t.units))&&(t.sideData=p(p({},t.sideData||{}),{},{vvcNalInfo:i}))}},et.register(qe);var it=1e3,nt=5e3,at=function(){function e(t,i,n){X(this,e),this.videoTrack=t,this.audioTrack=i,this.metadataTrack=n,this._baseDts=-1,this._baseDtsInited=!1,this._audioNextPts=void 0,this._videoNextDts=void 0,this._audioTimestampBreak=0,this._videoTimestampBreak=0,this._lastVideoDuration=0,this._keyFrameInNextChunk=!1,this._lastAudioExceptionGapDot=-1/0,this._lastAudioExceptionOverlapDot=-1/0,this._lastAudioExceptionLargeGapDot=-1/0,this._lastVideoExceptionLargeGapDot=-1/0,this._lastVideoExceptionChunkFirstDtsDot=-1/0}return v(e,[{key:"fix",value:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,i=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];t=Math.round(1e3*t);var a=this.videoTrack,s=this.audioTrack;!i&&n||(this._videoLastSample=null,this._audioNextPts=void 0,this._videoNextDts=void 0,this._audioTimestampBreak=0,this._videoTimestampBreak=0,this._lastAudioExceptionGapDot=-1/0,this._lastAudioExceptionOverlapDot=-1/0,this._lastAudioExceptionLargeGapDot=-1/0,this._lastVideoExceptionLargeGapDot=-1/0,this._lastVideoExceptionChunkFirstDtsDot=-1/0),i&&!n&&(this._baseDtsInited=!1),this._baseDtsInited||this._calculateBaseDts(s,a),!n&&t&&(this._audioNextPts=this._videoNextDts=t);var r=this._baseDtsInited&&(this._videoTimestampBreak||!this.videoTrack.exist())&&(this._audioTimestampBreak||!this.audioTrack.exist());if(r&&this._resetBaseDtsWhenStreamBreaked(),this._fixAudio(s),this._keyFrameInNextChunk=!1,this._fixVideo(a),this.metadataTrack.exist()){var l=this.metadataTrack.timescale;this.metadataTrack.seiSamples.forEach((function(t){t.pts=t.originPts-e._baseDts,t.time=Math.max(0,t.pts)/l})),this.metadataTrack.flvScriptSamples.forEach((function(t){t.pts=t.originPts-e._baseDts,t.time=Math.max(0,t.pts)/l}))}a.samples.length&&(a.baseMediaDecodeTime=a.samples[0].dts),s.samples.length&&(s.baseMediaDecodeTime=s.samples[0].pts*s.timescale/1e3)}},{key:"_fixVideo",value:function(e){var t=this,i=e.samples;if(i.length){var n;if(i.forEach((function(e){e.dts-=t._baseDts,e.pts-=t._baseDts,e.keyframe&&(t._keyFrameInNextChunk=!0)})),e.fpsNum&&e.fpsDen)n=e.timescale*(e.fpsDen/e.fpsNum);else if(e.length>1){var a=e.samples[0],s=e.samples[i.length-1];n=Math.floor((s.dts-a.dts)/(i.length-1))}else n=this._lastVideoDuration||40;var r=i.pop();if(this._videoLastSample&&i.unshift(this._videoLastSample),this._videoLastSample=r,i.length){if(void 0===this._videoNextDts){var l=i[0];this._videoNextDts=l.dts}var d=i.length,o=0,c=i[0],u=this._videoNextDts-c.dts;if(Math.abs(u)>200){var m;if(Math.abs(c.dts-this._lastVideoExceptionChunkFirstDtsDot)>5e3)this._lastVideoExceptionChunkFirstDtsDot=c.dts,e.warnings.push({type:re,nextDts:this._videoNextDts,firstSampleDts:c.dts,nextSampleDts:null===(m=i[1])||void 0===m?void 0:m.dts,sampleDuration:u});this._videoTimestampBreak>=5?(this._videoNextDts=c.dts,this._videoTimestampBreak=0):(c.dts+=u,c.pts+=u,this.audioTrack.exist()||(this._videoTimestampBreak=1))}for(var h=0;h<d;h++){var p=i[h].dts,Z=i[h+1];((o=h<d-1?Z.dts-p:r?r.dts-p:n)>1e3||o<0)&&(this._videoTimestampBreak++,Math.abs(p-this._lastVideoExceptionLargeGapDot)>5e3&&(this._lastVideoExceptionLargeGapDot=p,e.warnings.push({type:se,time:p/e.timescale,dts:p,originDts:i[h].originDts,nextDts:this._videoNextDts,sampleDuration:o,refSampleDuration:n})),o=n),i[h].duration=o,this._videoNextDts+=o,this._lastVideoDuration=o}}}}},{key:"_fixAudio",value:function(e){var t=this,i=e.samples;i.length&&(i.forEach((function(e){e.dts=e.pts-=t._baseDts})),this._doFixAudioInternal(e,i,1e3))}},{key:"_calculateBaseDts",value:function(e,t){var i=e.samples,n=t.samples;if(!i.length&&!n.length)return!1;var a=1/0,s=1/0;i.length&&(e.baseDts=a=i[0].pts),n.length&&(t.baseDts=s=n[0].dts),this._baseDts=Math.min(a,s);var r=s-a;return Number.isFinite(r)&&Math.abs(r)>500&&t.warnings.push({type:ae,videoBaseDts:s,audioBasePts:a,baseDts:this._baseDts,delta:r}),this._baseDtsInited=!0,!0}},{key:"_resetBaseDtsWhenStreamBreaked",value:function(){this._calculateBaseDts(this.audioTrack,this.videoTrack)&&(this.audioTrack.exist()?this.videoTrack.exist()?this._baseDts-=Math.min(this._audioNextPts,this._videoNextDts):this._baseDts-=this._audioNextPts:this._baseDts-=this._videoNextDts,this._videoTimestampBreak=0,this._audioTimestampBreak=0)}},{key:"_doFixAudioInternal",value:function(e,t,i){if(!e.sampleDuration)switch(e.codecType){case $:e.sampleDuration=Ne.getFrameDuration(e.timescale,i);break;case ie:e.sampleDuration=De.getFrameDuration(e.samples,i);break;case ee:case te:e.sampleDuration=this._getG711Duration(e);break;default:console.error("can't fix audio codecType:",e.codecType)}var n=e.sampleDuration,a=e.codecType===ie?20:e.codecType===$?1024:n*e.timescale/1e3;if(void 0===this._audioNextPts){var s=t[0];this._audioNextPts=s.pts}for(var r=0;r<t.length;r++){var l=this._audioNextPts,d=t[r],o=d.pts-l;if(0===r&&this._audioTimestampBreak>=5&&this._keyFrameInNextChunk&&(l=this._audioNextPts=d.dts,o=0,this._audioTimestampBreak=0),!this._audioTimestampBreak&&o>=3*n&&o<=it&&!ge){var c=this._getSilentFrame(e)||t[0].data.subarray(),u=Math.floor(o/n);Math.abs(d.pts-this._lastAudioExceptionGapDot)>nt&&(this._lastAudioExceptionGapDot=d.pts,e.warnings.push({type:de,pts:d.pts,originPts:d.originPts,count:u,nextPts:l,refSampleDuration:n}));for(var m=0;m<u;m++){var h=new he(Math.floor(this._audioNextPts+n)-Math.floor(this._audioNextPts),c,a);h.originPts=Math.floor(this._baseDts+l),t.splice(r,0,h),this._audioNextPts+=n,r++}r--}else if(o<=-3*n&&o>=-1e3)Math.abs(d.pts-this._lastAudioExceptionOverlapDot)>nt&&(this._lastAudioExceptionOverlapDot=d.pts,e.warnings.push({type:oe,pts:d.pts,originPts:d.originPts,nextPts:l,refSampleDuration:n})),t.splice(r,1),r--;else{if(Math.abs(o)>it&&(this._audioTimestampBreak++,Math.abs(d.pts-this._lastAudioExceptionLargeGapDot)>nt&&(this._lastAudioExceptionLargeGapDot=d.pts,e.warnings.push({type:le,time:d.pts/1e3,pts:d.pts,originPts:d.originPts,nextPts:l,sampleDuration:o,refSampleDuration:n}))),e.codecType===ie){var p=t[t.length-1];p&&(p.duration=d.pts-p.pts)}else d.dts=d.pts=l,d.duration=a;this._audioNextPts+=n}}}},{key:"_getG711Duration",value:function(e){var t=e.sampleSize,i=e.channelCount,n=e.sampleRate,a=e.samples[0];if(a)return 2*a.data.byteLength/i/(t/8)/n*1e3}},{key:"_getSilentFrame",value:function(e){return e.codecType===$?Ne.getSilentFrame(e.codec,e.channelCount):new Uint8Array(8*e.sampleDuration*e.channelCount)}}]),e}(),st=function(){function e(){X(this,e)}return v(e,null,[{key:"parse",value:function(t){if(!(t.length<3)){var i={},n=e._parseValue(new DataView(t.buffer,t.byteOffset,t.byteLength)),a=e._parseValue(new DataView(t.buffer,t.byteOffset+n.size,t.byteLength-n.size));return i[n.data]=a.data,i}}},{key:"_parseValue",value:function(t){var i,n=t.byteLength,a=1,s=!1;switch(t.getUint8(0)){case 0:i=t.getFloat64(1),a+=8;break;case 1:i=!!t.getUint8(1),a+=1;break;case 2:var r=e._parseString(new DataView(t.buffer,t.byteOffset+a,t.byteLength-a));i=r.data,a+=r.size;break;case 3:i={};var l=0;for(9==(16777215&t.getUint32(n-4))&&(l=3);a<n-4;){var d=e._parseObject(new DataView(t.buffer,t.byteOffset+a,t.byteLength-a-l)),o=d.size,c=d.data;if(d.isEnd)break;i[c.name]=c.value,a+=o}if(a<=n-3)9===(16777215&t.getUint32(a-1))&&(a+=3);break;case 8:i={},a+=4;var u=0;for(9==(16777215&t.getUint32(n-4))&&(u=3);a<n-8;){var m=e._parseObject(new DataView(t.buffer,t.byteOffset+a,t.byteLength-a-u)),h=m.size,p=m.data;if(m.isEnd)break;i[p.name]=p.value,a+=h}if(a<=n-3)9===(16777215&t.getUint32(a-1))&&(a+=3);break;case 9:i=void 0,a=1,s=!0;break;case 10:i=[];var Z=t.getUint32(1);a+=4;for(var y=0;y<Z;y++){var b=e._parseValue(new DataView(t.buffer,t.byteOffset+a,t.byteLength-a)),f=b.data,X=b.size;i.push(f),a+=X}break;case 11:var W=t.getFloat64(a)+6e4*t.getInt16(a+8);i=new Date(W),a+=10;break;case 12:var v=t.getUint32(1);a+=4,i="",v>0&&(i=Ge.decode(new Uint8Array(t.buffer,t.byteOffset+a,v))),a+=v;break;default:a=n}return{data:i,size:a,isEnd:s}}},{key:"_parseString",value:function(e){var t=e.getUint16(0),i="";return t>0&&(i=Ge.decode(new Uint8Array(e.buffer,e.byteOffset+2,t))),{data:i,size:2+t}}},{key:"_parseObject",value:function(t){if(!(t.byteLength<3)){var i=e._parseString(t),n=e._parseValue(new DataView(t.buffer,t.byteOffset+i.size,t.byteLength-i.size));return{data:{name:i.data,value:n.data},size:i.size+n.size,isEnd:n.isEnd}}}}]),e}(),rt=7,lt=8,dt=10,ot=13,ct=new ve("FlvDemuxer"),ut=function(){function e(t,i,n){X(this,e),G(this,"_headerParsed",!1),G(this,"_remainingData",null),G(this,"_gopId",0),G(this,"_needAddMetaBeforeKeyFrameNal",!0),this.videoTrack=t||new ce,this.audioTrack=i||new ue,this.metadataTrack=n||new be,this._fixer=new at(this.videoTrack,this.audioTrack,this.metadataTrack)}return v(e,[{key:"demux",value:function(t){var i,n=arguments.length>1&&void 0!==arguments[1]&&arguments[1],a=!(arguments.length>2&&void 0!==arguments[2])||arguments[2],s=arguments.length>3?arguments[3]:void 0,r=this.audioTrack,l=this.videoTrack,d=this.metadataTrack;if(!n&&a||(this._remainingData=null),n&&(this._headerParsed=!1),n?(l.reset(),r.reset(),d.reset()):(l.samples=[],r.samples=[],d.seiSamples=[],d.flvScriptSamples=[],l.warnings=[],r.warnings=[],this._remainingData&&(t=Ye(this._remainingData,t),this._remainingData=null)),!t.length)return{videoTrack:l,audioTrack:r,metadataTrack:d};var o=0;if(!this._headerParsed){if(!e.probe(t))throw new Error("Invalid flv file");r.present=(4&t[4])>>>2!=0,l.present=0!=(1&t[4]),this._headerParsed=!0,o=Te(t,5)+4}for(var c,u,m,h,p,Z=t.length;o+15<Z&&(c=t[o],!(o+15+(u=t[o+1]<<16|t[o+2]<<8|t[o+3])>Z));)m=(t[o+7]<<24>>>0)+(t[o+4]<<16)+(t[o+5]<<8)+t[o+6],o+=11,h=t.subarray(o,o+u),8===c?this._parseAudio(h,m):9===c?(s&&(this.seamlessLoadingSwitching=!0),this._parseVideo(h,m)):18===c?this._parseScript(h,m):ct.warn("Invalid tag type: ".concat(c)),(p=Te(t,o+=u))!==11+u&&ct.warn("Invalid PrevTagSize ".concat(p," (").concat(11+u,")")),o+=4;o<Z&&(this._remainingData=t.subarray(o)),r.formatTimescale=l.formatTimescale=l.timescale=d.timescale=1e3,r.timescale=r.codecType===ie?1e3:r.sampleRate||0,!r.exist()&&r.hasSample()&&r.reset(),!l.exist()&&l.hasSample()&&l.reset();var y=d.flvScriptSamples[d.flvScriptSamples.length-1],b=null==y||null===(i=y.data)||void 0===i?void 0:i.onMetaData;return b&&(null!=l&&l.exist()&&(b.hasOwnProperty("duration")&&(l.duration=1e3*b.duration),!l.width&&b.hasOwnProperty("width")&&(l.width=b.width),!l.height&&b.hasOwnProperty("height")&&(l.height=b.height)),null!=r&&r.exist()&&b.hasOwnProperty("duration")&&(r.duration=1e3*b.duration)),{videoTrack:l,audioTrack:r,metadataTrack:d}}},{key:"fix",value:function(e,t,i){return this._fixer.fix(e,t,i),{videoTrack:this.videoTrack,audioTrack:this.audioTrack,metadataTrack:this.metadataTrack}}},{key:"demuxAndFix",value:function(e,t,i,n,a){return this.demux(e,t,i,a),this.fix(n,t,i)}},{key:"_parseAudio",value:function(t,i){if(t.length){var n=(240&t[0])>>>4,a=this.audioTrack;if(n!==dt&&n!==rt&&n!==lt&&n!==ot)return ct.warn("Unsupported sound format: ".concat(n)),void a.reset();if(n!==dt&&n!==ot){var s=(12&t[0])>>2,r=(2&t[0])>>1,l=1&t[0];a.sampleRate=e.AUDIO_RATE[s],a.sampleSize=r?16:8,a.channelCount=l+1}switch(n){case rt:case lt:this._parseG711(t,i,n);break;case dt:this._parseAac(t,i);break;case ot:this._parseOpus(t,i)}}}},{key:"_parseOpus",value:function(e,t){var i=this.audioTrack,n=e[1];switch(i.codecType=ie,n){case 0:var a=De.parseHeaderPackets(e.subarray(2));a?(i.codec=a.codec,i.channelCount=a.channelCount,i.sampleRate=a.sampleRate,i.config=a.config,i.sampleDuration=De.getFrameDuration([],i.timescale)):(i.reset(),ct.warn("Cannot parse AudioSpecificConfig",e));break;case 1:if(null==t)return;var s=new he(t,e.subarray(2),i.sampleDuration);i.samples.push(s);break;default:ct.warn("Unknown OpusPacketType: ".concat(n))}}},{key:"_parseG711",value:function(e,t,i){var n=this.audioTrack,a=e.subarray(1);if(!(a.byteLength<1)){var s=new he(t,a);n.codecType=7===i?ee:te,n.sampleRate=8e3,n.codec=n.codecType,n.samples.push(s)}}},{key:"_parseAac",value:function(e,t){var i=this.audioTrack;if(i.codecType=$,0===e[1]){var n=Ne.parseAudioSpecificConfig(e.subarray(2));n?(i.codec=n.codec,i.channelCount=n.channelCount,i.sampleRate=n.sampleRate,i.config=n.config,i.objectType=n.objectType,i.sampleRateIndex=n.samplingFrequencyIndex):(i.reset(),ct.warn("Cannot parse AudioSpecificConfig",e))}else if(1===e[1]){if(null==t)return;i.samples.push(new he(t,e.subarray(2)))}else ct.warn("Unknown AACPacketType: ".concat(e[1]))}},{key:"_parseVideo",value:function(e,t){var i=this;if(!(e.length<6)){var n=(240&e[0])>>>4,a=15&e[0],s=this.videoTrack;if(7!==a&&12!==a)return s.reset(),void ct.warn("Unsupported codecId: ".concat(a));var r=12===a;s.codecType=r?A:O;var l=e[1],d=(e[2]<<16|e[3]<<8|e[4])<<8>>8;if(0===l){var o=e.subarray(5),c=r?je.parseHEVCDecoderConfigurationRecord(o):ze.parseAVCDecoderConfigurationRecord(o);if(c){var u=c.hvcC,m=c.sps,h=c.ppsArr,p=c.spsArr,Z=c.vpsArr,y=c.nalUnitSize;u&&(s.hvcC=s.hvcC||u),m&&(s.codec=m.codec,s.width=m.width,s.height=m.height,s.sarRatio=m.sarRatio,s.fpsNum=m.fpsNum,s.fpsDen=m.fpsDen),p.length&&(s.sps=p),h.length&&(s.pps=h),Z&&Z.length&&(s.vps=Z),y&&(s.nalUnitSize=y)}else ct.warn("Cannot parse ".concat(r?"HEVC":"AVC","DecoderConfigurationRecord"),e)}else if(1===l){var b=Ue.parseAvcC(e.subarray(5),s.nalUnitSize);if((b=this._checkAddMetaNalToUnits(r,b,s))&&b.length){var f=new me(t+d,t,b);if(this.seamlessLoadingSwitching&&t<s.lastKeyFrameDts)return;this.seamlessLoadingSwitching=!1,1===n&&(f.setToKeyframe(),s.lastKeyFrameDts=t),s.samples.push(f),b.forEach((function(e){var n=r?e[0]>>>1&63:31&e[0];switch(n){case 5:case 16:case 17:case 18:case 19:case 20:case 21:case 22:case 23:if(!r&&5!==n||r&&5===n)break;f.setToKeyframe();break;case 6:case 39:case 40:if(!r&&6!==n||r&&6===n)break;i.metadataTrack.seiSamples.push(new ye(Ue.parseSEI(Ue.removeEPB(e),r),t+d))}})),f.keyframe&&this._gopId++,f.gopId=this._gopId}else ct.warn("Cannot parse NALUs",e)}else 2===l||ct.warn("Unknown AVCPacketType: ".concat(l))}}},{key:"_checkAddMetaNalToUnits",value:function(e,t,i){return e&&this._needAddMetaBeforeKeyFrameNal?t.map((function(e){return e[0]>>>1&63})).includes(32)?(this._needAddMetaBeforeKeyFrameNal=!1,t):(t.unshift(i.pps[0]),t.unshift(i.sps[0]),t.unshift(i.vps[0]),t.filter(Boolean)):(this._needAddMetaBeforeKeyFrameNal=!1,t)}},{key:"_parseScript",value:function(e,t){this.metadataTrack.flvScriptSamples.push(new Ze(st.parse(e),t))}}],[{key:"probe",value:function(e){return 70===e[0]&&76===e[1]&&86===e[2]&&1===e[3]&&Te(e,5)>=9}}]),e}();function mt(e){return(e||[]).filter(Boolean)}G(ut,"AUDIO_RATE",[5500,11e3,22e3,44e3]),new ve("TsDemuxer");var ht=function(){function e(){X(this,e)}return v(e,null,[{key:"findBox",value:function(t,i){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,a=[];if(!t)return a;for(var s=0,r="",l=0;t.length>7;){if(s=Te(t),r=String.fromCharCode.apply(null,t.subarray(4,8)),l=8,1===s?(s=Ie(t,8),l+=8):s||(s=t.length),!i[0]||r===i[0]){var d=t.subarray(0,s);if(!(i.length<2))return e.findBox(d.subarray(l),i.slice(1),n+l);a.push({start:n,size:s,headerSize:l,type:r,data:d})}n+=s,t=t.subarray(s)}return a}},{key:"tfhd",value:function(e){return bt(e,!0,(function(e,t){e.trackId=Te(t);var i=4,n=1&e.flags,a=2&e.flags,s=8&e.flags,r=16&e.flags,l=32&e.flags;n&&(i+=4,e.baseDataOffset=Te(t,i),i+=4),a&&(e.sampleDescriptionIndex=Te(t,i),i+=4),s&&(e.defaultSampleDuration=Te(t,i),i+=4),r&&(e.defaultSampleSize=Te(t,i),i+=4),l&&(e.defaultSampleFlags=Te(t,i))}))}},{key:"sidx",value:function(e){return bt(e,!0,(function(e,t){var i=0;e.reference_ID=Te(t,i),i+=4,e.timescale=Te(t,i),i+=4,0===e.version?(e.earliest_presentation_time=Te(t,i),i+=4,e.first_offset=Te(t,i),i+=4):(e.earliest_presentation_time=Ie(t,i),i+=8,e.first_offset=Ie(t,i),i+=8),i+=2,e.references=[];var n=Re(t,i);i+=2;for(var a=0;a<n;a++){var s={};e.references.push(s);var r=Te(t,i);i+=4,s.reference_type=r>>31&1,s.referenced_size=2147483647&r,s.subsegment_duration=Te(t,i),r=Te(t,i+=4),i+=4,s.starts_with_SAP=r>>31&1,s.SAP_type=r>>28&7,s.SAP_delta_time=268435455&r}}))}},{key:"moov",value:function(t){return bt(t,!1,(function(t,i,n){t.mvhd=e.mvhd(e.findBox(i,["mvhd"],n)[0]),t.trak=e.findBox(i,["trak"],n).map((function(t){return e.trak(t)})),t.pssh=e.pssh(e.findBox(i,["pssh"],n)[0])}))}},{key:"mvhd",value:function(e){return bt(e,!0,(function(e,t){var i=0;1===e.version?(e.timescale=Te(t,16),e.duration=Ie(t,20),i+=28):(e.timescale=Te(t,8),e.duration=Te(t,12),i+=16),e.nextTrackId=Te(t,i+76)}))}},{key:"trak",value:function(t){return bt(t,!1,(function(t,i,n){t.tkhd=e.tkhd(e.findBox(i,["tkhd"],n)[0]),t.mdia=e.mdia(e.findBox(i,["mdia"],n)[0]),t.edts=e.edts(e.findBox(i,["edts"],n)[0])}))}},{key:"tkhd",value:function(e){return bt(e,!0,(function(e,t){var i=We.fromUint8(t);1===e.version?(i.read(8),i.read(8),e.trackId=i.read(4),i.read(4),e.duration=i.read(8)):(i.read(4),i.read(4),e.trackId=i.read(4),i.read(4),e.duration=i.read(4)),i.skip(16),e.matrix=[];for(var n=0;n<36;n++)e.matrix.push(i.read(1));i.back(36);for(var a,s=[],r=0;r<3;r++)s.push(Fe(i.readInt(2),i.readInt(2))),s.push(Fe(i.readInt(2),i.readInt(2))),a=i.readInt(4),s.push(Fe(a>>30,1073741823&a));e.rotation=function(e){if(e.length<5)return 0;var t=Math.hypot(e[0],e[3]),i=Math.hypot(e[1],e[4]);return 0===t||0===i?0:180*Math.atan2(e[1]/i,e[0]/t)/Math.PI}(s),e.width=i.read(4),e.height=i.read(4)}))}},{key:"mdia",value:function(t){return bt(t,!1,(function(t,i,n){t.mdhd=e.mdhd(e.findBox(i,["mdhd"],n)[0]),t.hdlr=e.hdlr(e.findBox(i,["hdlr"],n)[0]),t.minf=e.minf(e.findBox(i,["minf"],n)[0])}))}},{key:"edts",value:function(t){return bt(t,!1,(function(t,i,n){t.elst=e.elst(e.findBox(i,["elst"],n)[0])}))}},{key:"elst",value:function(e){return bt(e,!0,(function(e,t,i){e.entries=[],e.entriesData=t;var n=0,a=Te(t,n);n+=4;for(var s=0;s<a;s++){var r={};e.entries.push(r),1===e.version?(r.segment_duration=Ie(t,n),n+=8,r.media_time=we(t,n),n+=8):(r.segment_duration=Te(t,n),n+=4,r.media_time=Me(t,n),n+=4),r.media_rate_integer=Re(t,n),n+=2,r.media_rate_fraction=Re(t,i),n+=2}}))}},{key:"mdhd",value:function(e){return bt(e,!0,(function(e,t){var i=0;1===e.version?(e.timescale=Te(t,16),e.duration=Ie(t,20),i+=28):(e.timescale=Te(t,8),e.duration=Te(t,12),i+=16);var n=Re(t,i);e.language=String.fromCharCode(96+(n>>10&31),96+(n>>5&31),96+(31&n))}))}},{key:"hdlr",value:function(e){return bt(e,!0,(function(e,t){0===e.version&&(e.handlerType=String.fromCharCode.apply(null,t.subarray(4,8)))}))}},{key:"minf",value:function(t){return bt(t,!1,(function(t,i,n){t.vmhd=e.vmhd(e.findBox(i,["vmhd"],n)[0]),t.smhd=e.smhd(e.findBox(i,["smhd"],n)[0]),t.stbl=e.stbl(e.findBox(i,["stbl"],n)[0])}))}},{key:"vmhd",value:function(e){return bt(e,!0,(function(e,t){e.graphicsmode=Re(t),e.opcolor=[Re(t,2),Re(t,4),Re(t,6)]}))}},{key:"smhd",value:function(e){return bt(e,!0,(function(e,t){e.balance=Re(t)}))}},{key:"stbl",value:function(t){return bt(t,!1,(function(t,i,n){var a,s,r;t.stsd=e.stsd(e.findBox(i,["stsd"],n)[0]),t.stts=e.stts(e.findBox(i,["stts"],n)[0]),t.ctts=e.ctts(e.findBox(i,["ctts"],n)[0]),t.stsc=e.stsc(e.findBox(i,["stsc"],n)[0]),t.stsz=e.stsz(e.findBox(i,["stsz"],n)[0]),t.stco=e.stco(e.findBox(i,["stco"],n)[0]),t.stco||(t.co64=e.co64(e.findBox(i,["co64"],n)[0]),t.stco=t.co64);var l=null===(a=t.stsd.entries[0])||void 0===a||null===(s=a.sinf)||void 0===s||null===(r=s.schi)||void 0===r?void 0:r.tenc.default_IV_size;t.stss=e.stss(e.findBox(i,["stss"],n)[0]),t.senc=e.senc(e.findBox(i,["senc"],n)[0],l)}))}},{key:"senc",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:8;return bt(e,!0,(function(e,i){var n=0,a=Te(i,n);n+=4,e.samples=[];for(var s=0;s<a;s++){for(var r={InitializationVector:[]},l=0;l<t;l++)r.InitializationVector[l]=i[n+l];if(n+=t,2&e.flags){r.subsamples=[];var d=Re(i,n);n+=2;for(var o=0;o<d;o++){var c={};c.BytesOfClearData=Re(i,n),n+=2,c.BytesOfProtectedData=Te(i,n),n+=4,r.subsamples.push(c)}}e.samples.push(r)}}))}},{key:"pssh",value:function(e){return bt(e,!0,(function(e,t){for(var i=[],n=[],a=0,s=0;s<16;s++)n.push(Xt(t[a+s]));if(a+=16,e.version>0){var r=Te(t,a);a+=4;for(var l=0;l<(""+r).length;l++)for(var d=0;d<16;d++){var o=t[a];a+=1,i.push(Xt(o))}}var c=Te(t,a);e.data_size=c,a+=4,e.kid=i,e.system_id=n,e.buffer=t}))}},{key:"vvc1",value:function(t){return e.videoSampleEntry(t)}},{key:"vvcC",value:function(t,i){return e.videoConfigBox(t,i||"vvc1")}},{key:"videoConfigBox",value:function(t,i){if(t){var n=tt({configBox:t.type});if(null!=n&&n.parseConfigBox)return bt(t,!1,(function(a,s){var r=n.parseConfigBox({data:s,box:t,sampleEntryType:i,parser:e});for(var l in r)Object.prototype.hasOwnProperty.call(r,l)&&(a[l]=r[l])}))}}},{key:"videoSampleEntry",value:function(t){var i=tt({sampleEntry:null==t?void 0:t.type});if(i)return bt(t,!1,(function(t,n,a){var s=Zt(t,n),r=n.subarray(s);a+=s,mt(i.configBoxes).some((function(n){var s=e.findBox(r,[n],a)[0],l=e.videoConfigBox(s,t.type);return!!l&&(t[i.trackConfigKey||n]=l,!0)})),t.pasp=e.pasp(e.findBox(r,["pasp"],a)[0])}))}},{key:"stsd",value:function(t){return bt(t,!0,(function(t,i,n){t.entryCount=Te(i),t.entries=e.findBox(i.subarray(4),[],n+4).map((function(t){switch(t.type){case"av01":return e.av01(t);case"avc1":case"avc2":case"avc3":case"avc4":return e.avc1(t);case"hvc1":case"hev1":return e.hvc1(t);case"vvc1":case"vvi1":return e.vvc1(t);case"mp4a":return e.mp4a(t);case"alaw":case"ulaw":return e.alaw(t);case"enca":return bt(t,!1,(function(t,i,n){t.channelCount=Re(i,16),t.samplesize=Re(i,18),t.sampleRate=Te(i,24)/65536,i=i.subarray(28),t.sinf=e.sinf(e.findBox(i,["sinf"],n)[0]),t.esds=e.esds(e.findBox(i,["esds"],n)[0])}));case"encv":return bt(t,!1,(function(t,i,n){var a,s;t.width=Re(i,24),t.height=Re(i,26),t.horizresolution=Te(i,28),t.vertresolution=Te(i,32),i=i.subarray(78),t.sinf=e.sinf(e.findBox(i,["sinf"],n)[0]),t.avcC=e.avcC(e.findBox(i,["avcC"],n)[0]),t.hvcC=e.hvcC(e.findBox(i,["hvcC"],n)[0]);var r=null===(a=t.sinf)||void 0===a||null===(s=a.frma)||void 0===s?void 0:s.data_format,l=tt({sampleEntry:r});(l?[l]:et.list()).some((function(a){return mt(a.configBoxes).some((function(s){var l=e.videoConfigBox(e.findBox(i,[s],n)[0],r);return!!l&&(t[a.trackConfigKey||s]=l,!0)}))})),t.pasp=e.pasp(e.findBox(i,["pasp"],n)[0])}));default:if(tt({sampleEntry:t.type}))return e.videoSampleEntry(t)}})).filter(Boolean)}))}},{key:"tenc",value:function(e){return bt(e,!1,(function(e,t){var i=6;e.default_IsEncrypted=t[i],i+=1,e.default_IV_size=t[i],i+=1,e.default_KID=[];for(var n=0;n<16;n++)e.default_KID.push(Xt(t[i])),i+=1}))}},{key:"schi",value:function(t){return bt(t,!1,(function(t,i,n){t.tenc=e.tenc(e.findBox(i,["tenc"],n)[0])}))}},{key:"sinf",value:function(t){return bt(t,!1,(function(t,i,n){t.schi=e.schi(e.findBox(i,["schi"],n)[0]),t.frma=e.frma(e.findBox(i,["frma"],n)[0])}))}},{key:"frma",value:function(e){return bt(e,!1,(function(e,t){e.data_format="";for(var i=0;i<4;i++)e.data_format+=String.fromCharCode(t[i])}))}},{key:"colr",value:function(e){return bt(e,!1,(function(t,i){var n=We.fromUint8(i);t.data=e.data,t.colorType=n.readString(4),"nclx"===t.colorType||"nclc"===t.colorType?(t.colorPrimaries=n.read(2),t.transferCharacteristics=n.read(2),t.matrixCoefficients=n.read(2),"nclx"===t.colorType&&(t.fullRangeFlag=n.read(1)>>7)):"rICC"!==t.colorType&&"prof"!==t.colorType||(t.iccProfile=n.readToUint8())}))}},{key:"av01",value:function(t){return bt(t,!1,(function(t,i,n){var a=Zt(t,i),s=i.subarray(a);n+=a,t.av1C=e.av1C(e.findBox(s,["av1C"],n)[0]),t.colr=e.colr(e.findBox(s,["colr"],n)[0])}))}},{key:"av1C",value:function(e){return bt(e,!1,(function(t,i){t.data=e.data;var n,a=We.fromUint8(i),s=Xe.fromByte(a,4);t.marker=s.read(1),t.version=s.read(7),t.seqProfile=s.read(3),t.seqLevelIdx0=s.read(5),t.seqTier0=s.read(1),t.highBitdepth=s.read(1),t.twelveBit=s.read(1),t.monochrome=s.read(1),t.chromaSubsamplingX=s.read(1),t.chromaSubsamplingY=s.read(1),t.chromaSamplePosition=s.read(2),t.reserved=s.read(3),t.initialPresentationDelayPresent=s.read(1),t.initialPresentationDelayPresent?t.initialPresentationDelayMinusOne=s.read(4):t.initialPresentationDelayMinusOne=0,t.configOBUs=a.readToUint8(),2===t.seqProfile&&1===t.highBitdepth?n=1===t.twelveBit?"12":"10":t.seqProfile<=2&&(n=1===t.highBitdepth?"10":"08"),t.codec=["av01",t.seqProfile,(t.seqLevelIdx0<10?"0"+t.seqLevelIdx0:t.seqLevelIdx0)+(t.seqTier0?"H":"M"),n].join(".")}))}},{key:"avc1",value:function(t){return bt(t,!1,(function(t,i,n){var a=Zt(t,i),s=i.subarray(a);n+=a,t.avcC=e.avcC(e.findBox(s,["avcC"],n)[0]),t.pasp=e.pasp(e.findBox(s,["pasp"],n)[0])}))}},{key:"avcC",value:function(e){return bt(e,!1,(function(t,i){t.data=e.data,t.configurationVersion=i[0],t.AVCProfileIndication=i[1],t.profileCompatibility=i[2],t.AVCLevelIndication=i[3],t.codec=Ke([i[1],i[2],i[3]]),t.lengthSizeMinusOne=3&i[4],t.spsLength=31&i[5],t.sps=[];for(var n=6,a=0;a<t.spsLength;a++){var s=Re(i,n);n+=2,t.sps.push(i.subarray(n,n+s)),n+=s}t.ppsLength=i[n],n+=1,t.pps=[];for(var r=0;r<t.ppsLength;r++){var l=Re(i,n);n+=2,t.pps.push(i.subarray(n,n+=l)),n+=l}}))}},{key:"hvc1",value:function(t){return bt(t,!1,(function(t,i,n){var a=Zt(t,i),s=i.subarray(a);n+=a,t.hvcC=e.hvcC(e.findBox(s,["hvcC"],n)[0]),t.pasp=e.pasp(e.findBox(s,["pasp"],n)[0])}))}},{key:"hvcC",value:function(e){return bt(e,!1,(function(t,i){t.data=e.data,t.codec="hev1.1.6.L93.B0",t.configurationVersion=i[0];var n=i[1];t.generalProfileSpace=n>>6,t.generalTierFlag=(32&n)>>5,t.generalProfileIdc=31&n,t.generalProfileCompatibility=Te(i,2),t.generalConstraintIndicatorFlags=i.subarray(6,12),t.generalLevelIdc=i[12],t.avgFrameRate=Re(i,19),t.numOfArrays=i[22],t.vps=[],t.sps=[],t.pps=[];for(var a=23,s=0,r=0,l=0,d=0;d<t.numOfArrays;d++){s=63&i[a],r=Re(i,a+1),a+=3;for(var o,c=[],u=0;u<r;u++)l=Re(i,a),a+=2,c.push(i.subarray(a,a+l)),a+=l;if(32===s)(o=t.vps).push.apply(o,c);else if(33===s){var m;(m=t.sps).push.apply(m,c)}else if(34===s){var h;(h=t.pps).push.apply(h,c)}}}))}},{key:"pasp",value:function(e){return bt(e,!1,(function(e,t){e.hSpacing=Te(t),e.vSpacing=Te(t,4)}))}},{key:"mp4a",value:function(t){return bt(t,!1,(function(t,i,n){var a=yt(t,i);t.esds=e.esds(e.findBox(i.subarray(a),["esds"],n+a)[0])}))}},{key:"esds",value:function(e){return bt(e,!0,(function(e,t){e.codec="mp4a.";for(var i=0,n=0,a=0,s=0;t.length;){for(s=t[i=0],n=t[i+1],i+=2;128&n;)a=(127&n)<<7,n=t[i],i+=1;if(a+=127&n,3===s)t=t.subarray(i+3);else{if(4!==s){if(5===s){var r=e.config=t.subarray(i,i+a),l=(248&r[0])>>3;if(31===l&&r.length>=2&&(l=32+((7&r[0])<<3)+((224&r[1])>>5)),e.objectType=l,e.codec+=l.toString(16),/^mp4a/gi.test(e.codec)&&r.length>=2){var d=(7&r[0])<<1|(128&r[1])>>7;e.samplingFrequencyIndex=d,d<Ne.FREQ.length&&(e.sampleRate=Ne.FREQ[d])}return void("."===e.codec[e.codec.length-1]&&(e.codec=e.codec.substring(0,e.codec.length-1)))}return void("."===e.codec[e.codec.length-1]&&(e.codec=e.codec.substring(0,e.codec.length-1)))}e.codec+=(t[i].toString(16)+".").padStart(3,"0"),t=t.subarray(i+13)}}}))}},{key:"alaw",value:function(e){return bt(e,!1,(function(e,t){yt(e,t)}))}},{key:"stts",value:function(e){return bt(e,!0,(function(e,t){for(var i=Te(t),n=[],a=4,s=0;s<i;s++)n.push({count:Te(t,a),delta:Te(t,a+4)}),a+=8;e.entryCount=i,e.entries=n}))}},{key:"ctts",value:function(e){return bt(e,!0,(function(e,t){var i=Te(t),n=[],a=4;if(1===e.version)for(var s=0;s<i;s++)n.push({count:Te(t,a),offset:Te(t,a+4)}),a+=8;else for(var r=0;r<i;r++)n.push({count:Te(t,a),offset:-(1+~Te(t,a+4))}),a+=8;e.entryCount=i,e.entries=n}))}},{key:"stsc",value:function(e){return bt(e,!0,(function(e,t){for(var i=Te(t),n=new Array(i),a=4,s=0;s<i;s++)n[s]={firstChunk:Te(t,a),samplesPerChunk:Te(t,a+4),sampleDescriptionIndex:Te(t,a+8)},a+=12;e.entryCount=i,e.entries=n}))}},{key:"stsz",value:function(e){return bt(e,!0,(function(e,t){var i=Te(t),n=Te(t,4),a=new Array(n);if(!i)for(var s=8,r=0;r<n;r++)a[r]=Te(t,s),s+=4;e.sampleSize=i,e.sampleCount=n,e.entrySizes=a}))}},{key:"stco",value:function(e){return bt(e,!0,(function(e,t){for(var i=Te(t),n=new Array(i),a=4,s=0;s<i;s++)n[s]=Te(t,a),a+=4;e.entryCount=i,e.entries=n}))}},{key:"co64",value:function(e){return bt(e,!0,(function(e,t){for(var i=Te(t),n=new Array(i),a=4,s=0;s<i;s++)n[s]=Ie(t,a),a+=8;e.entryCount=i,e.entries=n}))}},{key:"stss",value:function(e){return bt(e,!0,(function(e,t){for(var i=Te(t),n=new Array(i),a=4,s=0;s<i;s++)n[s]=Te(t,a),a+=4;e.entryCount=i,e.entries=n}))}},{key:"moof",value:function(t){return bt(t,!1,(function(t,i,n){t.mfhd=e.mfhd(e.findBox(i,["mfhd"],n)[0]),t.traf=e.findBox(i,["traf"],n).map((function(t){return e.traf(t)}))}))}},{key:"mfhd",value:function(e){return bt(e,!0,(function(e,t){e.sequenceNumber=Te(t)}))}},{key:"traf",value:function(t){return bt(t,!1,(function(t,i,n){t.tfhd=e.tfhd(e.findBox(i,["tfhd"],n)[0]),t.tfdt=e.tfdt(e.findBox(i,["tfdt"],n)[0]),t.trun=e.trun(e.findBox(i,["trun"],n)[0])}))}},{key:"trun",value:function(e){return bt(e,!0,(function(e,t){var i=e.version,n=e.flags,a=t.length,s=e.sampleCount=Te(t),r=4;if(a>r&&1&n&&(e.dataOffset=-(1+~Te(t,r)),r+=4),a>r&&4&n&&(e.firstSampleFlags=Te(t,r),r+=4),a>r){var l;e.samples=new Array(s);for(var d=0;d<s;d++)l={},256&n&&(l.duration=Te(t,r),r+=4),512&n&&(l.size=Te(t,r),r+=4),1024&n&&(l.flags=Te(t,r),r+=4),2048&n&&(l.cts=i?-(1+~Te(t,r+4)):Te(t,r),r+=4),e.samples[d]=l}}))}},{key:"tfdt",value:function(e){return bt(e,!0,(function(e,t){1===e.version?e.baseMediaDecodeTime=Ie(t):e.baseMediaDecodeTime=Te(t)}))}},{key:"probe",value:function(t){return!!e.findBox(t,["ftyp"])}},{key:"parseSampleFlags",value:function(e){return{isLeading:(12&e[0])>>>2,dependsOn:3&e[0],isDependedOn:(192&e[1])>>>6,hasRedundancy:(48&e[1])>>>4,paddingValue:(14&e[1])>>>1,isNonSyncSample:1&e[1],degradationPriority:e[2]<<8|e[3]}}},{key:"moovToTrack",value:function(t,i,n){var a,s,r=t.trak;if(r&&r.length){var l=r.find((function(e){var t,i;return"vide"===(null===(t=e.mdia)||void 0===t||null===(i=t.hdlr)||void 0===i?void 0:i.handlerType)})),d=r.find((function(e){var t,i;return"soun"===(null===(t=e.mdia)||void 0===t||null===(i=t.hdlr)||void 0===i?void 0:i.handlerType)}));if(l&&i){var o,c,u,m,h,p,Z,y,b=i,f=null===(o=l.tkhd)||void 0===o?void 0:o.trackId;null!=f&&(b.id=l.tkhd.trackId),b.tkhdDuration=l.tkhd.duration,b.mvhdDurtion=t.mvhd.duration,b.mvhdTimecale=t.mvhd.timescale,b.timescale=b.formatTimescale=l.mdia.mdhd.timescale,b.duration=l.mdia.mdhd.duration||b.mvhdDurtion/b.mvhdTimecale*b.timescale,b.rotation=l.tkhd.rotation,b.matrix=l.tkhd.matrix,null!==(c=l.edts)&&void 0!==c&&c.elst&&(b.editList=l.edts.elst,b.editListApplied=l.editListApplied);var X,W,v,G,L,x,g,V,S,Y,k,R,T=l.mdia.minf.stbl.stsd.entries[0];if(!T)throw new Error("unknown video stsd entry");if(b.width=T.width,b.height=T.height,T.pasp&&(b.sarRatio=[T.pasp.hSpacing,T.pasp.vSpacing]),T.av1C)b.codecType=_,b.codec=T.av1C.codec,b.av1C=T.av1C.data,T.colr&&(b.colr=T.colr.data);else if(T.hvcC)b.codecType=A,b.codec=T.hvcC.codec,b.vps=T.hvcC.vps,b.sps=T.hvcC.sps,b.pps=T.hvcC.pps,b.hvcC=T.hvcC.data;else if(T.avcC)b.codec=T.avcC.codec,b.sps=T.avcC.sps,b.pps=T.avcC.pps;else{if(!T.vvcC)throw new Error("unknown video stsd entry");var M,I,w="encv"===T.type?null===(M=T.sinf)||void 0===M||null===(I=M.frma)||void 0===I?void 0:I.data_format:T.type,K=tt({sampleEntry:w})||tt({configBox:"vvcC"});if(null==K||!K.applyTrackConfig)throw new Error("video codec parser is not registered: ".concat(w||"vvcC"));K.applyTrackConfig({track:b,entry:T,config:T.vvcC,parser:e})}if(b.present=!0,b.ext={},b.ext.stss=null===(u=l.mdia)||void 0===u||null===(m=u.minf)||void 0===m||null===(h=m.stbl)||void 0===h?void 0:h.stss,b.ext.ctts=null===(p=l.mdia)||void 0===p||null===(Z=p.minf)||void 0===Z||null===(y=Z.stbl)||void 0===y?void 0:y.ctts,T&&"encv"===T.type)b.isVideoEncryption=!0,T.default_KID=null===(X=T.sinf)||void 0===X||null===(W=X.schi)||void 0===W?void 0:W.tenc.default_KID,T.default_IsEncrypted=null===(v=T.sinf)||void 0===v||null===(G=v.schi)||void 0===G?void 0:G.tenc.default_IsEncrypted,T.default_IV_size=null===(L=T.sinf)||void 0===L||null===(x=L.schi)||void 0===x?void 0:x.tenc.default_IV_size,b.videoSenc=null===(g=l.mdia)||void 0===g||null===(V=g.minf)||void 0===V||null===(S=V.stbl)||void 0===S||null===(Y=S.senc)||void 0===Y?void 0:Y.samples,T.data_format=null===(k=T.sinf)||void 0===k||null===(R=k.frma)||void 0===R?void 0:R.data_format,b.useEME=t.useEME,b.kidValue=t.kidValue,b.pssh=t.pssh,b.encv=T}if(d&&n){var C,H,F,N,U,z,J,P,j,D,E=n,B=null===(C=d.tkhd)||void 0===C?void 0:C.trackId;null!=B&&(E.id=d.tkhd.trackId),E.tkhdDuration=d.tkhd.duration,E.mvhdDurtion=t.mvhd.duration,E.mvhdTimecale=t.mvhd.timescale,E.timescale=E.formatTimescale=d.mdia.mdhd.timescale,E.duration=d.mdia.mdhd.duration||E.mvhdDurtion/E.mvhdTimecale*E.timescale,null!==(H=d.edts)&&void 0!==H&&H.elst&&(E.editList=d.edts.elst,E.editListApplied=d.editListApplied);var Q,O,q,$,ie,ne,ae,se,re=d.mdia.minf.stbl.stsd.entries[0];switch(E.sampleSize=re.sampleSize,E.sampleRate=function(e){var t=0;if("mp4a"===e.type){var i;if(e.sampleRate>0)t=e.sampleRate;else t=null===(i=e.esds)||void 0===i?void 0:i.sampleRate}else t=e.sampleRate;return t||0}(re),E.channelCount=re.channelCount,E.present=!0,re.type){case"alaw":E.codecType=E.codec=ee,E.sampleRate=8e3;break;case"ulaw":E.codecType=E.codec=te,E.sampleRate=8e3;break;default:E.sampleDuration=Ne.getFrameDuration(E.sampleRate,E.timescale),E.sampleRateIndex=Ne.getRateIndexByRate(E.sampleRate),E.objectType=(null===(a=re.esds)||void 0===a?void 0:a.objectType)||2,re.esds&&(E.config=Array.from(re.esds.config)),E.codec=(null===(s=re.esds)||void 0===s?void 0:s.codec)||"mp4a.40.2"}if(E.sampleDuration=Ne.getFrameDuration(E.sampleRate,E.timescale),E.objectType=(null===(F=re.esds)||void 0===F?void 0:F.objectType)||2,re.esds&&(re.esds.config?E.config=Array.from(re.esds.config):console.warn("esds config is null")),E.codec=(null===(N=re.esds)||void 0===N?void 0:N.codec)||"mp4a.40.2",E.sampleRateIndex=Ne.getRateIndexByRate(E.sampleRate),E.ext={},E.ext.stss=null===(U=d.mdia)||void 0===U||null===(z=U.minf)||void 0===z||null===(J=z.stbl)||void 0===J?void 0:J.stss,E.ext.ctts=null===(P=d.mdia)||void 0===P||null===(j=P.minf)||void 0===j||null===(D=j.stbl)||void 0===D?void 0:D.ctts,E.present=!0,re&&"enca"===re.type)E.isAudioEncryption=!0,re.data_format=null===(Q=re.sinf)||void 0===Q||null===(O=Q.frma)||void 0===O?void 0:O.data_format,re.default_KID=null===(q=re.sinf)||void 0===q||null===($=q.schi)||void 0===$?void 0:$.tenc.default_KID,re.default_IsEncrypted=null===(ie=re.sinf)||void 0===ie||null===(ne=ie.schi)||void 0===ne?void 0:ne.tenc.default_IsEncrypted,re.default_IV_size=null===(ae=re.sinf)||void 0===ae||null===(se=ae.schi)||void 0===se?void 0:se.tenc.default_IV_size,E.audioSenc=d.mdia.minf.stbl.senc&&d.mdia.minf.stbl.senc.samples,E.useEME=t.useEME,E.kidValue=t.kidValue,E.enca=re}if(n&&(n.isVideoEncryption=!!i&&i.isVideoEncryption),i&&(i.isAudioEncryption=!!n&&n.isAudioEncryption),null!=i&&i.encv||null!=n&&n.enca){var le,de,oe=null==i||null===(le=i.encv)||void 0===le?void 0:le.default_KID,ce=null==n||null===(de=n.enca)||void 0===de?void 0:de.default_KID,ue=oe||ce?(oe||ce).join(""):null;i&&(i.kid=ue),n&&(n.kid=ue)}return i&&(i.flags=3841),n&&(n.flags=1793),{videoTrack:i,audioTrack:n}}}},{key:"evaluateDefaultDuration",value:function(e,t,i){var n,a=null==t||null===(n=t.samples)||void 0===n?void 0:n.length;return a?1024*a/t.timescale*e.timescale/i:1024}},{key:"moofToSamples",value:function(t,i,n){var a={};return t.mfhd&&(i&&(i.sequenceNumber=t.mfhd.sequenceNumber),n&&(n.sequenceNumber=t.mfhd.sequenceNumber)),t.traf.forEach((function(t){var s=t.tfhd,r=t.tfdt,l=t.trun;if(s&&l){r&&(i&&i.id===s.trackId&&(i.baseMediaDecodeTime=r.baseMediaDecodeTime),n&&n.id===s.trackId&&(n.baseMediaDecodeTime=r.baseMediaDecodeTime));var d=s.defaultSampleSize||0,o=s.defaultSampleDuration||e.evaluateDefaultDuration(i,n,l.samples.length||l.sampleCount),c=l.dataOffset||0,u=0,m=-1;if(!l.samples.length&&l.sampleCount){a[s.trackId]=new Array(l.sampleCount);for(var h=0;h<l.sampleCount;h++)a[s.trackId][h]={offset:c,dts:u,duration:o,size:d},u+=o,c+=d}else a[s.trackId]=l.samples.map((function(e,t){return(e={offset:c,dts:u,pts:u+(e.cts||0),duration:e.duration||o,size:e.size||d,gopId:m,keyframe:0===t||null!==e.flags&&void 0!==e.flags&&(65536&e.flags)>>>0!=65536}).keyframe&&(m++,e.gopId=m),u+=e.duration,c+=e.size,e}))}})),a}},{key:"moovToSamples",value:function(e){var t=e.trak;if(t&&t.length){var i=t.find((function(e){var t,i;return"vide"===(null===(t=e.mdia)||void 0===t||null===(i=t.hdlr)||void 0===i?void 0:i.handlerType)})),n=t.find((function(e){var t,i;return"soun"===(null===(t=e.mdia)||void 0===t||null===(i=t.hdlr)||void 0===i?void 0:i.handlerType)}));if(i||n){var a,s;if(i){var r,l,d=null===(r=i.mdia)||void 0===r||null===(l=r.minf)||void 0===l?void 0:l.stbl;if(!d)return;var o=d.stts,c=d.stsc,u=d.stsz,m=d.stco,h=d.stss,p=d.ctts;if(!(o&&c&&u&&m&&h))return;a=pt(o,c,u,m,p,h)}if(n){var Z,y,b,f=null===(Z=n.mdia)||void 0===Z||null===(y=Z.minf)||void 0===y?void 0:y.stbl;if(!f)return;var X=null===(b=n.mdia.mdhd)||void 0===b?void 0:b.timescale,W=f.stts,v=f.stsc,G=f.stsz,L=f.stco;if(!(X&&W&&v&&G&&L))return;s=pt(W,v,G,L)}return{videoSamples:a,audioSamples:s}}}}}]),e}();function pt(e,t,i,n,a,s){var r,l,d,o=[],c=null==a?void 0:a.entries,u=t.entries,m=n.entries,h=i.entrySizes,p=null==s?void 0:s.entries;p&&(r={},p.forEach((function(e){r[e-1]=!0}))),c&&(l=[],c.forEach((function(e){for(var t=e.count,i=e.offset,n=0;n<t;n++)l.push(i)})));var Z=-1,y=0,b=0,f=0,X=0,W=0,v=u[0].samplesPerChunk,G=u[1]?u[1].firstChunk-1:1/0;return e.entries.forEach((function(e){for(var t=e.count,n=e.delta,a=0;a<t;a++)d={dts:y,duration:n,size:h[b]||i.sampleSize,offset:m[f]+W,index:b},p&&(d.keyframe=r[b],d.keyframe&&Z++,d.gopId=Z),l&&b<l.length&&(d.pts=d.dts+l[b]),o.push(d),y+=n,++b<v?W+=d.size:(f++,W=0,f>=G&&(X++,G=u[X+1]?u[X+1].firstChunk-1:1/0),v+=u[X].samplesPerChunk)})),o}function Zt(e,t){return e.dataReferenceIndex=Re(t,6),e.width=Re(t,24),e.height=Re(t,26),e.horizresolution=Te(t,28),e.vertresolution=Te(t,32),e.frameCount=Re(t,40),e.depth=Re(t,74),78}function yt(e,t){return e.dataReferenceIndex=Re(t,6),e.channelCount=Re(t,16),e.sampleSize=Re(t,18),e.sampleRate=Te(t,24)/65536,28}function bt(e,t,i){if(e){if(e.size!==e.data.length)throw new Error("box ".concat(e.type," size !== data.length"));var n={start:e.start,size:e.size,headerSize:e.headerSize,type:e.type};return t&&(n.version=e.data[e.headerSize],n.flags=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;return(e[t]<<16)+(e[t+1]<<8)+(e[t+2]||0)}(e.data,e.headerSize+1),n.headerSize+=4),i(n,e.data.subarray(n.headerSize),n.start+n.headerSize),n}}var ft=function(e,t,i){for(var n=String(i),a=t>>0,s=Math.ceil(a/n.length),r=[],l=String(e);s--;)r.push(n);return r.join("").substring(0,a-l.length)+l},Xt=function(){for(var e=[],t=arguments.length,i=new Array(t),n=0;n<t;n++)i[n]=arguments[n];return i.forEach((function(t){e.push(ft(Number(t).toString(16),2,0))})),e[0]},Wt=function(){function e(t,i,n){X(this,e),G(this,"__loadedMoofWraps",[]),G(this,"__lastRemainData",null),G(this,"__lastRemainDataStart",0),G(this,"__nextMoofStart",-1),this.videoTrack=t||new ce,this.audioTrack=i||new ue,this.metadataTrack=n||new be}return v(e,[{key:"demuxPart",value:function(e,t,i){var n=this,a=this.videoTrack,s=this.audioTrack,r=a.exist(),l=s.exist(),d=/av01/.test(a.codec);a.samples=[],s.samples=[];var o=e,c=t;if(this.__lastRemainData){var u=this.__lastRemainDataStart+this.__lastRemainData.byteLength;if(t<=u&&t>this.__lastRemainDataStart&&t+e.byteLength>u){var m=e.subarray(this.__lastRemainData.byteLength+this.__lastRemainDataStart-t);o=Ye(this.__lastRemainData,m),c=this.__lastRemainDataStart,this.__lastRemainData=null}else this.__lastRemainData=null,this.__lastRemainDataStart=0,this.__nextMoofStart=-1}if(!i){var h=ht.findBox(o,["moov"])[0];if(!h)throw new Error("cannot found moov box");i=ht.moov(h)}if(o){var p=c+o.byteLength;r||l||ht.moovToTrack(i,a,s);var Z=[];this.__nextMoofStart<0?ht.findBox(o,["moof"],c).forEach((function(e){return Z.push(e)})):this.__nextMoofStart>=c&&this.__nextMoofStart<=p-8&&ht.findBox(o.subarray(this.__nextMoofStart-c),["moof"],this.__nextMoofStart).forEach((function(e){return Z.push(e)})),Z.filter((function(e){return e.size<=e.data.length})).forEach((function(e){var t=ht.moof(e);n.__nextMoofStart=t.start+Math.max.apply(Math,C(t.traf.map((function(e){return e.trun.samples.reduce((function(e,t){return e+t.size}),e.trun.dataOffset||0)})))),n.__loadedMoofWraps.push({start:t.start,nextMoofStart:n.__nextMoofStart,moof:t}),n.__loadedMoofWraps.sort((function(e,t){return e.start-t.start}))}));var y,b=N(this.__loadedMoofWraps);try{var f=function(){var e=y.value;if(e.start>p||e.nextMoofStart<c)return"continue";var t,i=e.start,r=ht.moofToSamples(e.moof,a,s),l=a.baseMediaDecodeTime,u=s.baseMediaDecodeTime;Object.keys(r).forEach((function(e){a.id==e?r[e].some((function(e){var s=e.offset+=i;if(!(s<c)){if(s+e.size>p)return!0;var r=new me((e.pts||e.dts)+l,e.dts+l);r.duration=e.duration,r.gopId=e.gopId,e.keyframe&&r.setToKeyframe();var u=o.subarray(s-c,s-c+e.size);if(r.data=u,!d)for(var m=0,h=u.length-1;m<h;)t=Te(u,m),m+=4,r.units.push(u.subarray(m,m+t)),m+=t;n.__lastRemainDataStart=s+e.size,a.samples.push(r)}})):s.id==e&&r[e].some((function(e){var t=e.offset+i;if(!(t<c)){if(t+e.size>p)return!0;var a=o.subarray(t-c,t-c+e.size);s.samples.push(new he(e.dts+u,a,e.duration)),n.__lastRemainDataStart=t+e.size}}))}))};for(b.s();!(y=b.n()).done;)f()}catch(X){b.e(X)}finally{b.f()}}return this.__lastRemainDataStart>c&&this.__lastRemainDataStart<o.byteLength+c?this.__lastRemainData=o.subarray(this.__lastRemainDataStart-c):(this.__lastRemainData=o,this.__lastRemainDataStart=c),a.samples.length&&(a.baseMediaDecodeTime=a.samples[0].pts),s.samples.length&&(s.baseMediaDecodeTime=s.samples[0].pts),{videoTrack:a,audioTrack:s,metadataTrack:this.metadataTrack}}},{key:"demux",value:function(e,t){var i=this.videoTrack,n=this.audioTrack,a=i.exist(),s=n.exist();if(i.samples=[],n.samples=[],t){if(!s){var r=ht.findBox(t,["moov"])[0];if(!r)throw new Error("cannot found moov box");ht.moovToTrack(ht.moov(r),null,n)}var l=ht.findBox(t,["moof"])[0];if(l){var d=ht.moofToSamples(ht.moof(l),null,n)[n.id],o=n.baseMediaDecodeTime;if(d){var c=l.start;d.map((function(e){e.offset+=c;var i=t.subarray(e.offset,e.offset+e.size);n.samples.push(new he(e.dts+o,i,e.duration))}))}}}if(e){if(!a&&!s){var u=ht.findBox(e,["moov"])[0];if(!u)throw new Error("cannot found moov box");ht.moovToTrack(ht.moov(u),i,n)}var m=ht.findBox(e,["moof"])[0];if(m){var h,p=ht.moofToSamples(ht.moof(m),i,n),Z=i.baseMediaDecodeTime,y=n.baseMediaDecodeTime,b=m.start;Object.keys(p).forEach((function(t){i.id==t?p[t].map((function(t){t.offset+=b;var n=new me(("number"==typeof t.pts?t.pts:t.dts)+Z,t.dts+Z);n.duration=t.duration,n.gopId=t.gopId,t.keyframe&&n.setToKeyframe();var a=e.subarray(t.offset,t.offset+t.size);n.data=a;for(var s=0,r=a.length-1;s<r;)h=Te(a,s),s+=4,n.units.push(a.subarray(s,s+h)),s+=h;i.samples.push(n)})):n.id==t&&p[t].map((function(t){t.offset+=b;var i=e.subarray(t.offset,t.offset+t.size);n.samples.push(new he(t.dts+y,i,t.duration))}))}))}}return{videoTrack:i,audioTrack:n,metadataTrack:this.metadataTrack}}},{key:"reset",value:function(){this.videoTrack.reset(),this.audioTrack.reset(),this.metadataTrack.reset()}}],[{key:"probe",value:function(e){return ht.probe(e)}}]),e}();function vt(e){for(var t=0,i=arguments.length,n=new Array(i>1?i-1:0),a=1;a<i;a++)n[a-1]=arguments[a];n.forEach((function(e){t+=e.length}));var s=new e(t),r=0;return n.forEach((function(e){s.set(e,r),r+=e.length})),s}var Gt=function(){function e(){X(this,e),this.buffer=new Uint8Array(0)}return v(e,[{key:"write",value:function(){for(var e=this,t=arguments.length,i=new Array(t),n=0;n<t;n++)i[n]=arguments[n];i.forEach((function(t){t?e.buffer=vt(Uint8Array,e.buffer,t):window.console.warn(t)}))}}],[{key:"writeUint16",value:function(e){return new Uint8Array([e>>8&255,255&e])}},{key:"writeUint32",value:function(e){return new Uint8Array([e>>24,e>>16&255,e>>8&255,255&e])}}]),e}(),Lt=Math.pow(2,32)-1,xt=function(){function e(){X(this,e)}return v(e,null,[{key:"box",value:function(e){for(var t=arguments.length,i=new Array(t>1?t-1:0),n=1;n<t;n++)i[n-1]=arguments[n];var a=8+(i=i.filter(Boolean)).reduce((function(e,t){return e+t.byteLength}),0),s=new Uint8Array(a);s[0]=a>>24&255,s[1]=a>>16&255,s[2]=a>>8&255,s[3]=255&a,s.set(e,4);var r=8;return i.forEach((function(e){s.set(e,r),r+=e.byteLength})),s}},{key:"type",value:function(t){return e.types[t]||(e.types[t]=[t.charCodeAt(0),t.charCodeAt(1),t.charCodeAt(2),t.charCodeAt(3)]),e.types[t]}},{key:"FullBox",value:function(t,i,n){for(var a=arguments.length,s=new Array(a>3?a-3:0),r=3;r<a;r++)s[r-3]=arguments[r];return e.box.apply(e,[t,new Uint8Array([i,n>>16&255,n>>8&255,255&n])].concat(s))}},{key:"ftyp",value:function(t){var i=t.find((function(e){return e.type===E}));if((null==i?void 0:i.codecType)===A)return e.FTYPHEV1;var n=tt({track:i});return null!=n&&n.buildFtyp?n.buildFtyp({track:i,tracks:t,MP4:e}):e.FTYPAVC1}},{key:"initSegment",value:function(t){return t&&t.length?Ye(e.ftyp(t),e.moov(t)):new Uint8Array}},{key:"pssh",value:function(t){var i=new Uint8Array([1,0,0,0].concat([16,119,239,236,192,178,77,2,172,227,60,30,82,226,251,75],[0,0,0,1],He(t.kid),[0,0,0,0]));return e.box(e.types.pssh,i)}},{key:"moov",value:function(t){if(t[0].useEME&&(t[0].encv||t[0].enca)){t[0].pssh||(t[0].pssh={kid:t[0].kid});var i=this.pssh(t[0].pssh);return e.box.apply(e,[e.types.moov,e.mvhd(t[0].mvhdDurtion||t[0].duration,t[0].mvhdTimecale||t[0].timescale),e.mvex(t)].concat(C(t.map((function(t){return e.trak(t)}))),[i]))}return e.box.apply(e,[e.types.moov,e.mvhd(t[0].mvhdDurtion||t[0].duration,t[0].mvhdTimecale||t[0].timescale)].concat(C(t.map((function(t){return e.trak(t)}))),[e.mvex(t)]))}},{key:"mvhd",value:function(t){var i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:9e4,n=e.box(e.types.mvhd,new Uint8Array([0,0,0,0,0,0,0,0,0,0,0,0,i>>24&255,i>>16&255,i>>8&255,255&i,t>>24&255,t>>16&255,t>>8&255,255&t,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255]));return n}},{key:"trak",value:function(t){return e.box(e.types.trak,e.tkhd(t.id,t.tkhdDuration||0,t.width,t.height),e.mdia(t))}},{key:"tkhd",value:function(t,i){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:0,s=e.box(e.types.tkhd,new Uint8Array([0,0,0,7,0,0,0,0,0,0,0,0,t>>24&255,t>>16&255,t>>8&255,255&t,0,0,0,0,i>>24&255,i>>16&255,i>>8&255,255&i,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,0,n>>8&255,255&n,0,0,a>>8&255,255&a,0,0]));return s}},{key:"edts",value:function(t){return e.box(e.types.edts,e.elst(t))}},{key:"elst",value:function(t){t.entries;var i=t.entriesData,n=t.version;return e.FullBox(e.types.elst,n,0,i)}},{key:"mdia",value:function(t){return e.box(e.types.mdia,e.mdhd(t.duration,t.timescale),e.hdlr(t.type),e.minf(t))}},{key:"mdhd",value:function(t){var i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:9e4,n=e.box(e.types.mdhd,new Uint8Array([0,0,0,0,0,0,0,0,0,0,0,0,i>>24&255,i>>16&255,i>>8&255,255&i,t>>24&255,t>>16&255,t>>8&255,255&t,85,196,0,0]));return n}},{key:"hdlr",value:function(t){return e.box(e.types.hdlr,e.HDLR_TYPES[t])}},{key:"minf",value:function(t){return e.box(e.types.minf,t.type===E?e.VMHD:e.SMHD,e.DINF,e.stbl(t))}},{key:"stbl",value:function(t){return t&&t.ext,e.box(e.types.stbl,e.stsd(t),e.STTS,[][0],e.STSC,e.STSZ,e.STCO)}},{key:"stsd",value:function(t){var i;return i="audio"===t.type?t.useEME&&t.enca?e.enca(t):t.codecType===ie?e.opus(t):e.mp4a(t):t.useEME&&t.encv?e.encv(t):t.av1C?e.av01(t):e.avc1hev1vvc1(t),e.box(e.types.stsd,new Uint8Array([0,0,0,0,0,0,0,1]),i)}},{key:"enca",value:function(t){var i=t.enca.channelCount,n=t.enca.sampleRate,a=new Uint8Array([0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,i,0,16,0,0,0,0,n>>8&255,255&n,0,0]),s=e.esds(t.config),r=e.sinf(t.enca);return e.box(e.types.enca,a,s,r)}},{key:"encv",value:function(t){var i,n=t.width,a=t.height,s=t.sarRatio&&t.sarRatio.length>1?t.sarRatio[0]:0,r=t.sarRatio&&t.sarRatio.length>1?t.sarRatio[1]:0,l=new Uint8Array([0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,n>>8&255,255&n,a>>8&255,255&a,0,72,0,0,0,72,0,0,0,0,0,0,0,1,18,100,97,105,108,121,109,111,116,105,111,110,47,104,108,115,46,106,115,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24,17,17]),d=tt({track:t});if(t.codecType===A)i=e.hvcC(t);else if(null!=d&&d.buildConfigBox)i=d.buildConfigBox({track:t,MP4:e});else{var o,c,u=t.sps&&t.sps.length>0?t.sps[0]:[],m=t.pps&&t.pps.length>0?t.pps[0]:[],h=new Uint8Array((o=(c=[1,u[1],u[2],u[3],255,225,u.length>>>8&255,255&u.length]).concat.apply(c,C(u)).concat([1,m.length>>>8&255,255&m.length])).concat.apply(o,C(m)));i=e.box(e.types.avcC,h)}var p=new Uint8Array([0,0,88,57,0,15,200,192,0,4,86,72]),Z=e.sinf(t.encv),y=[l,i,e.box(e.types.btrt,p),Z];if(t.sarRatio&&t.sarRatio.length>1){var b=new Uint8Array([s>>24,s>>16&255,s>>8&255,255&s,r>>24,r>>16&255,r>>8&255,255&r]);y.push(e.box(e.types.pasp,b))}return e.box.apply(e,[e.types.encv].concat(y))}},{key:"schi",value:function(t){var i=new Uint8Array([]),n=e.tenc(t);return e.box(e.types.schi,i,n)}},{key:"tenc",value:function(t){var i=new Uint8Array([0,0,0,0,0,0,255&t.default_IsEncrypted,255&t.default_IV_size].concat(He(t.default_KID)));return e.box(e.types.tenc,i)}},{key:"sinf",value:function(t){var i=new Uint8Array([]),n=new Uint8Array([t.data_format.charCodeAt(0),t.data_format.charCodeAt(1),t.data_format.charCodeAt(2),t.data_format.charCodeAt(3)]),a=new Uint8Array([0,0,0,0,99,101,110,99,0,1,0,0]),s=e.schi(t);return e.box(e.types.sinf,i,e.box(e.types.frma,n),e.box(e.types.schm,a),s)}},{key:"av01",value:function(t){return e.box(e.types.av01,new Uint8Array([0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,t.width>>8&255,255&t.width,t.height>>8&255,255&t.height,0,72,0,0,0,72,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24,17,17]),t.av1C,t.colr)}},{key:"avc1hev1vvc1",value:function(t){var i,n,a;if(t.codecType===A)n=e.hvcC(t),a=e.types.hvc1;else if(null!==(i=tt({track:t}))&&void 0!==i&&i.buildConfigBox){var s=tt({track:t});n=s.buildConfigBox({track:t,MP4:e}),a=e.type(s.getSampleEntryType?s.getSampleEntryType({track:t}):s.sampleEntries[0])}else n=e.avcC(t),a=e.types.avc1;var r=[new Uint8Array([0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,t.width>>8&255,255&t.width,t.height>>8&255,255&t.height,0,72,0,0,0,72,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24,17,17]),n];return t.codecType===A?r.push(e.box(e.types.fiel,new Uint8Array([1,0]))):t.sarRatio&&t.sarRatio.length>1&&r.push(e.pasp(t.sarRatio)),e.box.apply(e,[a].concat(r))}},{key:"avcC",value:function(t){var i,n,a,s=[],r=[];return t.sps.forEach((function(e){a=e.byteLength,s.push(a>>>8&255),s.push(255&a),s.push.apply(s,C(e))})),t.pps.forEach((function(e){a=e.byteLength,r.push(a>>>8&255),r.push(255&a),r.push.apply(r,C(e))})),e.box(e.types.avcC,new Uint8Array((i=(n=[1,s[3],s[4],s[5],255,224|t.sps.length]).concat.apply(n,s).concat([t.pps.length])).concat.apply(i,r)))}},{key:"vvcC",value:function(t){var i=tt({track:t});return null!=i&&i.buildConfigBox?i.buildConfigBox({track:t,MP4:e}):e.box(e.types.vvcC,new Uint8Array(t.vvcC))}},{key:"hvcC",value:function(t){var i=t.hvcC;if(i instanceof ArrayBuffer||i instanceof Uint8Array)return i;var n,a=t.vps,s=t.sps,r=t.pps;if(i){var l=i.generalProfileCompatibilityFlags,d=i.generalConstraintIndicatorFlags,o=(a.length&&1)+(s.length&&1)+(r.length&&1);n=[1,i.generalProfileSpace<<6|i.generalTierFlag<<5|i.generalProfileIdc,l>>>24,l>>>16,l>>>8,l,d[0],d[1],d[2],d[3],d[4],d[5],i.generalLevelIdc,240,0,252,252|i.chromaFormatIdc,248|i.bitDepthLumaMinus8,248|i.bitDepthChromaMinus8,0,0,i.numTemporalLayers<<3|i.temporalIdNested<<2|3,o];var c=function(e){var t;n.push(e.length>>8,e.length),(t=n).push.apply(t,C(e))};a.length&&(n.push(160,0,a.length),a.forEach(c)),s.length&&(n.push(161,0,s.length),s.forEach(c)),r.length&&(n.push(162,0,r.length),r.forEach(c))}else n=[1,1,96,0,0,0,144,0,0,0,0,0,93,240,0,252,253,248,248,0,0,15,3,160,0,1,0,24,64,1,12,1,255,255,1,96,0,0,3,0,144,0,0,3,0,0,3,0,93,153,152,9,161,0,1,0,45,66,1,1,1,96,0,0,3,0,144,0,0,3,0,0,3,0,93,160,2,128,128,45,22,89,153,164,147,43,154,128,128,128,130,0,0,3,0,2,0,0,3,0,50,16,162,0,1,0,7,68,1,193,114,180,98,64];return e.box(e.types.hvcC,new Uint8Array(n))}},{key:"pasp",value:function(t){var i=K(t,2),n=i[0],a=i[1];return e.box(e.types.pasp,new Uint8Array([n>>24,n>>16&255,n>>8&255,255&n,a>>24,a>>16&255,a>>8&255,255&a]))}},{key:"mp4a",value:function(t){return e.box(e.types.mp4a,new Uint8Array([0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,t.channelCount,0,16,0,0,0,0,t.sampleRate>>8&255,255&t.sampleRate,0,0]),t.config.length?e.esds(t.config):void 0)}},{key:"esds",value:function(t){var i=t.length;return e.box(e.types.esds,new Uint8Array([0,0,0,0,3,23+i,0,0,0,4,15+i,64,21,0,6,0,0,0,218,192,0,0,218,192,5].concat([i]).concat(t).concat([6,1,2])))}},{key:"opus",value:function(t){var i=new Uint8Array([0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,t.channelCount,0,16,0,0,0,0,t.sampleRate>>8&255,255&t.sampleRate,0,0]),n=t.config.length?e.dOps(t):[];return e.box(e.types.Opus,i,n)}},{key:"dOps",value:function(t){if(t.config)return t.config[4]=t.sampleRate>>>24&255,t.config[5]=t.sampleRate>>>16&255,t.config[6]=t.sampleRate>>>8&255,t.config[7]=255&t.sampleRate,e.box(e.types.dOps,t.config)}},{key:"mvex",value:function(t){return e.box.apply(e,[e.types.mvex].concat(C(t.map((function(t){return e.trex(t.id)})))))}},{key:"trex",value:function(t){return e.box(e.types.trex,new Uint8Array([0,0,0,0,t>>24,t>>16&255,t>>8&255,255&t,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,1]))}},{key:"trex1",value:function(t){return e.box(e.types.trex,new Uint8Array([0,0,0,0,t>>24,t>>16&255,t>>8&255,255&t,0,0,0,1,0,0,2,0,0,0,0,0,0,1,0,0]))}},{key:"trex2",value:function(t){return e.box(e.types.trex,new Uint8Array([0,0,0,0,t>>24,t>>16&255,t>>8&255,255&t,0,0,0,1,0,0,4,0,0,0,0,0,2,0,0,0]))}},{key:"moof",value:function(t){return e.box.apply(e,[e.types.moof,e.mfhd(t[0].samples?t[0].samples[0].gopId:0)].concat(C(t.map((function(t){return e.traf(t)})))))}},{key:"mfhd",value:function(t){return e.box(e.types.mfhd,new Uint8Array([0,0,0,0,t>>24,t>>16&255,t>>8&255,255&t]))}},{key:"traf",value:function(t){var i=e.tfhd(t.id),n=e.tfdt(t.baseMediaDecodeTime),a=0;if(t.isVideo&&t.videoSenc&&t.videoSenc.forEach((function(e){a+=8,e.subsamples&&e.subsamples.length&&(a+=2,a+=6*e.subsamples.length)})),t.videoSencLength=a,t.useEME&&(t.isVideoEncryption||t.isAudioEncryption)){if(t.isVideoEncryption){if(t.isVideo){var s=e.saiz(t),r=e.saio(t),l=e.trun1(t),d=e.senc(t);return e.box(e.types.traf,i,n,s,r,l,d)}if(t.isAudioEncryption){var o=e.sbgp(),c=e.saiz(t),u=e.saio(t),m=e.senc(t),h=e.trun1(t);return e.box(e.types.traf,i,n,o,c,u,m,h)}var p=e.sbgp(),Z=e.trun1(t);return e.box(e.types.traf,i,n,p,Z)}if(t.isVideo){var y=e.trun1(t);return e.box(e.types.traf,i,n,y)}var b=e.sbgp(),f=e.saiz(t),X=e.saio(t),W=e.senc(t),v=e.trun1(t);return e.box(e.types.traf,i,n,b,f,X,W,v)}var G=e.sdtp(t);return e.box(e.types.traf,i,n,G,e.trun(t.samples,G.byteLength+76))}},{key:"sdtp",value:function(t){var i=new Gt;return t.samples.forEach((function(e){i.write(new Uint8Array(t.isVideo?[e.keyframe?32:16]:[16]))})),e.box(e.types.sdtp,this.extension(0,0),i.buffer)}},{key:"trun1",value:function(t){var i=new Gt,n=Gt.writeUint32(t.samples.length),a=null;if(t.isVideo){var s=t.videoSencLength;a=Gt.writeUint32(76+16*t.samples.length+s+77),!t.isVideoEncryption&&t.isAudioEncryption&&(a=Gt.writeUint32(76+16*t.samples.length+20))}else{var r=76+12*t.samples.length+52;t.isAudioEncryption&&(r=76+12*t.samples.length+8*t.audioSenc.length+105),a=Gt.writeUint32(r)}return t.samples.forEach((function(e){i.write(Gt.writeUint32(e.duration)),i.write(Gt.writeUint32(e.size)),i.write(Gt.writeUint32(e.keyframe?33554432:65536)),t.isVideo&&i.write(Gt.writeUint32(e.cts?e.cts:0))})),e.box(e.types.trun,this.extension(0,t.flags),n,a,i.buffer)}},{key:"senc",value:function(t){var i=new Gt,n=t.samples.length,a=t.isVideo?16:8,s=t.isVideo?2:0,r=[],l=0;return t.isVideo?(r=t.videoSenc,l=t.videoSencLength):r=t.audioSenc,l=l||a*n,i.write(Gt.writeUint32(16+l),e.types.senc,this.extension(0,s)),i.write(Gt.writeUint32(n)),r.forEach((function(e){for(var t=0;t<e.InitializationVector.length;t++)i.write(new Uint8Array([e.InitializationVector[t]]));e.subsamples&&e.subsamples.length&&(i.write(Gt.writeUint16(e.subsamples.length)),e.subsamples.forEach((function(e){i.write(Gt.writeUint16(e.BytesOfClearData)),i.write(Gt.writeUint32(e.BytesOfProtectedData))})))})),i.buffer}},{key:"saio",value:function(t){var i=12*t.samples.length+141;!t.isVideo&&t.isAudioEncryption&&(i=149);var n=new Uint8Array([1,0,0,0,0,0,0,1,0,0,0,0,i>>24&255,i>>16&255,i>>8&255,255&i]);return e.box(e.types.saio,n)}},{key:"saiz",value:function(t){var i=t.samples.length,n=new Uint8Array([0,0,0,0,16,i>>24&255,i>>16&255,i>>8&255,255&i]);return e.box(e.types.saiz,n)}},{key:"sbgp",value:function(){var t=new Uint8Array([114,111,108,108,0,0,0,1,0,0,1,25,0,0,0,1]);return e.box(e.types.sbgp,this.extension(0,0),t)}},{key:"extension",value:function(e,t){return new Uint8Array([e,t>>16&255,t>>8&255,255&t])}},{key:"tfhd",value:function(t){return e.box(e.types.tfhd,new Uint8Array([0,0,0,0,t>>24,t>>16&255,t>>8&255,255&t]))}},{key:"tfdt",value:function(t){var i=Math.floor(t/(Lt+1)),n=Math.floor(t%(Lt+1));return e.box(e.types.tfdt,new Uint8Array([1,0,0,0,i>>24,i>>16&255,i>>8&255,255&i,n>>24,n>>16&255,n>>8&255,255&n]))}},{key:"trun",value:function(t,i){var n=t.length,a=12+16*n;i+=8+a;var s=new Uint8Array(a);s.set([0,0,15,1,n>>>24&255,n>>>16&255,n>>>8&255,255&n,i>>>24&255,i>>>16&255,i>>>8&255,255&i],0);for(var r=0;r<n;r++){var l=t[r],d=l.duration,o=l.size,c=l.flag,u=void 0===c?{}:c,m=l.cts,h=void 0===m?0:m;s.set([d>>>24&255,d>>>16&255,d>>>8&255,255&d,o>>>24&255,o>>>16&255,o>>>8&255,255&o,u.isLeading<<2|(null===u.dependsOn||void 0===u.dependsOn?1:u.dependsOn),u.isDependedOn<<6|u.hasRedundancy<<4|u.paddingValue<<1|(null===u.isNonSyncSample||void 0===u.isNonSyncSample?1:u.isNonSyncSample),61440&u.degradationPriority,15&u.degradationPriority,h>>>24&255,h>>>16&255,h>>>8&255,255&h],12+16*r)}return e.box(e.types.trun,s)}},{key:"moovMP4",value:function(t){return e.box.apply(e,[e.types.moov,e.mvhd(t[0].duration,t[0].timescale)].concat(C(t.map((function(t){return e.trackMP4(t)})))))}},{key:"trackMP4",value:function(t){return e.box(e.types.trak,e.tkhd(t.id,t.duration,t.width,t.height),e.mdiaMP4(t))}},{key:"mdiaMP4",value:function(t){return e.box(e.types.mdia,e.mdhd(t.duration,t.timescale),e.hdlr(t.type),e.minfMP4(t))}},{key:"minfMP4",value:function(t){return e.box(e.types.minf,t.type===E?e.VMHD:e.SMHD,e.DINF,e.stblMP4(t))}},{key:"stblMP4",value:function(t){var i=t.ext,n=[e.stsd(t),e.stts(i.stts),e.stsc(i.stsc),e.stsz(i.stsz),e.stco(i.stco)];return i.stss.length&&n.push(e.stss(i.stss)),i.ctts.length&&n.push(e.ctts(i.ctts)),e.box.apply(e,[e.types.stbl].concat(n))}},{key:"stts",value:function(t){var i=t.length,n=new Uint8Array(8*i),a=0;return t.forEach((function(e){var t=e.value,i=e.count;n.set([i>>24,i>>16&255,i>>8&255,255&i,t>>24,t>>16&255,t>>8&255,255&t],a),a+=8})),e.box(e.types.stts,Ye(new Uint8Array([0,0,0,0,i>>24,i>>16&255,i>>8&255,255&i]),n))}},{key:"stsc",value:function(t){var i=t.length,n=new Uint8Array(12*i),a=0;return t.forEach((function(e){var t=e.firstChunk,i=e.samplesPerChunk,s=e.sampleDescIndex;n.set([t>>24,t>>16&255,t>>8&255,255&t,i>>24,i>>16&255,i>>8&255,255&i,s>>24,s>>16&255,s>>8&255,255&s],a),a+=12})),e.box(e.types.stsc,Ye(new Uint8Array([0,0,0,0,i>>24,i>>16&255,i>>8&255,255&i]),n))}},{key:"stsz",value:function(t){var i=t.length,n=new Uint8Array(4*i),a=0;return t.forEach((function(e){n.set([e>>24,e>>16&255,e>>8&255,255&e],a),a+=4})),e.box(e.types.stsz,Ye(new Uint8Array([0,0,0,0,0,0,0,0,i>>24,i>>16&255,i>>8&255,255&i]),n))}},{key:"stco",value:function(t){var i=t.length,n=new Uint8Array(4*i),a=0;return t.forEach((function(e){n.set([e>>24,e>>16&255,e>>8&255,255&e],a),a+=4})),e.box(e.types.stco,Ye(new Uint8Array([0,0,0,0,i>>24,i>>16&255,i>>8&255,255&i]),n))}},{key:"stss",value:function(t){var i=t.length,n=new Uint8Array(4*i),a=0;return t.forEach((function(e){n.set([e>>24,e>>16&255,e>>8&255,255&e],a),a+=4})),e.box(e.types.stss,Ye(new Uint8Array([0,0,0,0,i>>24,i>>16&255,i>>8&255,255&i]),n))}},{key:"ctts",value:function(t){var i=t.length,n=new Uint8Array(8*i),a=0;return t.forEach((function(e){var t=e.value,i=e.count;n.set([i>>24,i>>16&255,i>>8&255,255&i,t>>24,t>>16&255,t>>8&255,255&t],a),a+=8})),e.box(e.types.ctts,Ye(new Uint8Array([0,0,0,0,i>>24,i>>16&255,i>>8&255,255&i]),n))}},{key:"styp",value:function(){return e.box(e.types.styp,new Uint8Array([109,115,100,104,0,0,0,0,109,115,100,104,109,115,105,120]))}},{key:"sidx",value:function(t){var i=t.timescale,n=t.samples[0].duration,a=n*t.samples.length,s=t.samples[0].sampleOffset*n,r=8;t.samples.forEach((function(e){r+=e.size}));var l=0;if(t.isVideo){var d,o=0;t.videoSenc&&(d=t.videoSenc),t.isVideo&&d.forEach((function(e){o+=8,e.subsamples&&e.subsamples.length&&(o+=2,o+=6*e.subsamples.length)})),t.videoSencLength=o,l=r+141+16*t.samples.length+o,t.useEME&&t.isAudioEncryption&&!t.isVideoEncryption&&(l=r+16*t.samples.length+84)}else l=r+116+12*t.samples.length,t.useEME&&t.isAudioEncryption&&(l=r+169+12*t.samples.length+8*t.audioSenc.length);var c=new Uint8Array([0,0,0,0,0,0,0,255&t.id,i>>24&255,i>>16&255,i>>8&255,255&i,s>>24&255,s>>16&255,s>>8&255,255&s,0,0,0,0,0,0,0,1,0,l>>16&255,l>>8&255,255&l,a>>24&255,a>>16&255,a>>8&255,255&a,144,0,0,0]);return e.box(e.types.sidx,c)}},{key:"mdat",value:function(t){return e.box(e.types.mdat,t)}}]),e}();G(xt,"types",["Opus","dOps","av01","av1C","avc1","avcC","hvc1","hvcC","dinf","dref","edts","elst","esds","ftyp","hdlr","mdat","mdhd","mdia","mfhd","minf","moof","moov","mp4a","mvex","mvhd","pasp","stbl","stco","stsc","stsd","stsz","stts","tfdt","tfhd","traf","trak","trex","tkhd","vmhd","smhd","ctts","stss","styp","pssh","sidx","sbgp","saiz","saio","senc","trun","encv","enca","sinf","btrt","frma","tenc","schm","schi","mehd","fiel","sdtp","vvc1","vvi1","vvcC"].reduce((function(e,t){return e[t]=[t.charCodeAt(0),t.charCodeAt(1),t.charCodeAt(2),t.charCodeAt(3)],e}),Object.create(null))),G(xt,"HDLR_TYPES",{video:new Uint8Array([0,0,0,0,0,0,0,0,118,105,100,101,0,0,0,0,0,0,0,0,0,0,0,0,86,105,100,101,111,72,97,110,100,108,101,114,0]),audio:new Uint8Array([0,0,0,0,0,0,0,0,115,111,117,110,0,0,0,0,0,0,0,0,0,0,0,0,83,111,117,110,100,72,97,110,100,108,101,114,0])}),G(xt,"FTYPAVC1",xt.box(xt.types.ftyp,new Uint8Array([105,115,111,109,0,0,0,1,105,115,111,109,97,118,99,49]))),G(xt,"FTYPHEV1",xt.box(xt.types.ftyp,new Uint8Array([105,115,111,109,0,0,0,1,105,115,111,109,104,101,118,49]))),G(xt,"FTYPVVC1",xt.box(xt.types.ftyp,new Uint8Array([105,115,111,109,0,0,0,1,105,115,111,109,118,118,99,49]))),G(xt,"DINF",xt.box(xt.types.dinf,xt.box(xt.types.dref,new Uint8Array([0,0,0,0,0,0,0,1,0,0,0,12,117,114,108,32,0,0,0,1])))),G(xt,"VMHD",xt.box(xt.types.vmhd,new Uint8Array([0,0,0,1,0,0,0,0,0,0,0,0]))),G(xt,"SMHD",xt.box(xt.types.smhd,new Uint8Array([0,0,0,0,0,0,0,0]))),G(xt,"StblTable",new Uint8Array([0,0,0,0,0,0,0,0])),G(xt,"STTS",xt.box(xt.types.stts,xt.StblTable)),G(xt,"STSC",xt.box(xt.types.stsc,xt.StblTable)),G(xt,"STSZ",xt.box(xt.types.stsz,new Uint8Array([0,0,0,0,0,0,0,0,0,0,0,0]))),G(xt,"STCO",xt.box(xt.types.stco,xt.StblTable));var gt=function(){function e(t,i){X(this,e),this.name=t||"",this._prefix="[".concat(this.name,"]"),e.disabled=i}return v(e,[{key:"debug",value:function(){var t;if(!e.disabled){for(var i=arguments.length,n=new Array(i),a=0;a<i;a++)n[a]=arguments[a];(t=console).debug.apply(t,[this._prefix].concat(n))}}},{key:"log",value:function(){var t;if(!e.disabled){for(var i=arguments.length,n=new Array(i),a=0;a<i;a++)n[a]=arguments[a];(t=console).log.apply(t,[this._prefix].concat(n))}}},{key:"warn",value:function(){var t;if(!e.disabled){for(var i=arguments.length,n=new Array(i),a=0;a<i;a++)n[a]=arguments[a];(t=console).warn.apply(t,[this._prefix].concat(n))}}},{key:"error",value:function(){var t;if(!e.disabled){for(var i=arguments.length,n=new Array(i),a=0;a<i;a++)n[a]=arguments[a];(t=console).error.apply(t,[this._prefix].concat(n))}}},{key:"table",value:function(){var t;e.disabled||(console.group(this._prefix),(t=console).table.apply(t,arguments),console.groupEnd())}}],[{key:"enable",value:function(){e.disabled=!1}},{key:"disable",value:function(){e.disabled=!0}}]),e}();G(gt,"disabled",!0);var Vt,St,Yt,kt,Rt,Tt,Mt,It=function(){function e(t,i,n){X(this,e),this.videoTrack=t,this.audioTrack=i;var a=/Chrome\/([^.]+)/.exec(navigator.userAgent);this.forceFirstIDR=a&&Number(a[1])<50,this.log=new gt("FMP4Remuxer",!n||!n.openLog||!n.openLog)}return v(e,[{key:"remux",value:function(){var e,t,i,n,a,s=arguments.length>0&&void 0!==arguments[0]&&arguments[0],r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},l=this.videoTrack,d=this.audioTrack,o=l.exist(),c=d.exist(),u=[];return s&&(r&&r.initMerge?(o&&u.push(this.videoTrack),c&&u.push(this.audioTrack),i=xt.initSegment(u)):(o&&(e=xt.initSegment([this.videoTrack])),c&&(t=xt.initSegment([this.audioTrack])))),o&&l.hasSample()&&(n=this._remuxVideo()),c&&d.hasSample()&&(a=this._remuxAudio()),l.samples=[],d.samples=[],{initSegment:i,videoInitSegment:e,audioInitSegment:t,videoSegment:n,audioSegment:a}}},{key:"_remuxVideo",value:function(){var e=this.videoTrack;this.forceFirstIDR&&(e.samples[0].flag={dependsOn:2,isNonSyncSample:0});var t=e.samples,i=/av01/.test(e.codec),n=0;i?t.forEach((function(e){n+=e.data.byteLength})):t.forEach((function(e){n+=e.units.reduce((function(e,t){return e+t.byteLength}),0),n+=4*e.units.length}));var a=new Uint8Array(n);if(i)for(var s,r=0,l=t.length,d=0;r<l;r++)s=t[r],a.set(s.data,d),s.size=s.data.byteLength,d+=s.size;else for(var o,c=new DataView(a.buffer),u=function(e,i){i=t[m];var n=0;i.units.forEach((function(t){c.setUint32(e,t.byteLength),e+=4,a.set(t,e),e+=t.byteLength,n+=4+t.byteLength})),i.size=n,p=e,o=i},m=0,h=t.length,p=0;m<h;m++)u(p,o);var Z=xt.mdat(a);return Ye(xt.moof([e]),Z)}},{key:"_remuxAudio",value:function(){var e=this.audioTrack,t=new Uint8Array(e.samples.reduce((function(e,t){return e+t.size}),0));e.samples.reduce((function(e,i){return t.set(i.data,e),e+i.size}),0);var i=xt.mdat(t);return Ye(xt.moof([e]),i)}},{key:"reset",value:function(){this.videoTrack.reset(),this.audioTrack.reset()}}]),e}(),wt=(null===(Vt="undefined"!=typeof globalThis?globalThis:void 0)||void 0===Vt?void 0:Vt.crypto)||(null===(St="undefined"!=typeof global?global:void 0)||void 0===St?void 0:St.crypto)||(null===(Yt="undefined"!=typeof window?window:void 0)||void 0===Yt?void 0:Yt.crypto)||(null===(kt="undefined"!=typeof self?self:void 0)||void 0===kt?void 0:kt.crypto)||(null===(Rt="undefined"!=typeof frames?frames:void 0)||void 0===Rt||null===(Tt=Rt[0])||void 0===Tt?void 0:Tt.crypto);Mt=wt?function(e){for(var t=[],i=0;i<e;i+=4)t.push(wt.getRandomValues(new Uint32Array(1))[0]);return new Ct(t,e)}:function(e){for(var t,i=[],n=function(e){var t=e,i=987654321,n=4294967295;return function(){var e=((i=36969*(65535&i)+(i>>16)&n)<<16)+(t=18e3*(65535&t)+(t>>16)&n)&n;return e/=4294967296,(e+=.5)*(Math.random()>.5?1:-1)}},a=0;a<e;a+=4){var s=n(4294967296*(t||Math.random()));t=987654071*s(),i.push(4294967296*s()|0)}return new Ct(i,e)};var Kt=function(){function e(){X(this,e)}return v(e,[{key:"mixIn",value:function(e){return Object.assign(this,e)}},{key:"clone",value:function(){var e=new this.constructor;return Object.assign(e,this),e}}],[{key:"create",value:function(){for(var e=arguments.length,t=new Array(e),i=0;i<e;i++)t[i]=arguments[i];return S(this,t)}}]),e}(),Ct=function(e){L(i,e);var t=M(i);function i(){var e,n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:4*n.length;X(this,i),e=t.call(this);var s=n;if(s instanceof ArrayBuffer&&(s=new Uint8Array(s)),(s instanceof Int8Array||s instanceof Uint8ClampedArray||s instanceof Int16Array||s instanceof Uint16Array||s instanceof Int32Array||s instanceof Uint32Array||s instanceof Float32Array||s instanceof Float64Array)&&(s=new Uint8Array(s.buffer,s.byteOffset,s.byteLength)),s instanceof Uint8Array){for(var r=s.byteLength,l=[],d=0;d<r;d+=1)l[d>>>2]|=s[d]<<24-d%4*8;e.words=l,e.sigBytes=r}else e.words=n,e.sigBytes=a;return e}return v(i,[{key:"toString",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:Ht;return e.stringify(this)}},{key:"concat",value:function(e){var t=this.words,i=e.words,n=this.sigBytes,a=e.sigBytes;if(this.clamp(),n%4)for(var s=0;s<a;s+=1){var r=i[s>>>2]>>>24-s%4*8&255;t[n+s>>>2]|=r<<24-(n+s)%4*8}else for(var l=0;l<a;l+=4)t[n+l>>>2]=i[l>>>2];return this.sigBytes+=a,this}},{key:"clamp",value:function(){var e=this.words,t=this.sigBytes;e[t>>>2]&=4294967295<<32-t%4*8,e.length=Math.ceil(t/4)}},{key:"clone",value:function(){var e=w(x(i.prototype),"clone",this).call(this);return e.words=this.words.slice(0),e}}]),i}(Kt);G(Ct,"random",Mt);for(var Ht={stringify:function(e){for(var t=e.words,i=e.sigBytes,n=[],a=0;a<i;a+=1){var s=t[a>>>2]>>>24-a%4*8&255;n.push((s>>>4).toString(16)),n.push((15&s).toString(16))}return n.join("")},parse:function(e){for(var t=e.length,i=[],n=0;n<t;n+=2)i[n>>>3]|=parseInt(e.substr(n,2),16)<<24-n%8*4;return new Ct(i,t/2)}},Ft=function(e){for(var t=e.length,i=[],n=0;n<t;n+=1)i[n>>>2]|=(255&e.charCodeAt(n))<<24-n%4*8;return new Ct(i,t)},Nt=function(e){return Ft(unescape(encodeURIComponent(e)))},Ut=function(e){L(i,e);var t=M(i);function i(){var e;return X(this,i),(e=t.call(this))._minBufferSize=0,e}return v(i,[{key:"reset",value:function(){this._data=new Ct,this._nDataBytes=0}},{key:"_append",value:function(e){var t=e;"string"==typeof t&&(t=Nt(t)),this._data.concat(t),this._nDataBytes+=t.sigBytes}},{key:"_process",value:function(e){var t,i=this._data,n=this.blockSize,a=i.words,s=i.sigBytes,r=s/(4*n),l=(r=e?Math.ceil(r):Math.max((0|r)-this._minBufferSize,0))*n,d=Math.min(4*l,s);if(l){for(var o=0;o<l;o+=n)this._doProcessBlock(a,o);t=a.splice(0,l),i.sigBytes-=d}return new Ct(t,d)}},{key:"clone",value:function(){var e=w(x(i.prototype),"clone",this).call(this);return e._data=this._data.clone(),e}}]),i}(Kt),zt=function(e){L(i,e);var t=M(i);function i(e){var n;return X(this,i),(n=t.call(this)).blockSize=16,n.cfg=Object.assign(new Kt,e),n.reset(),n}return v(i,[{key:"reset",value:function(){w(x(i.prototype),"reset",this).call(this),this._doReset()}},{key:"update",value:function(e){return this._append(e),this._process(),this}},{key:"finalize",value:function(e){return e&&this._append(e),this._doFinalize()}}],[{key:"_createHelper",value:function(e){return function(t,i){return new e(i).finalize(t)}}},{key:"_createHmacHelper",value:function(e){return function(t,i){return new Jt(e,i).finalize(t)}}}]),i}(Ut),Jt=function(e){L(i,e);var t=M(i);function i(e,n){var a;X(this,i),a=t.call(this);var s=new e;a._hasher=s;var r=n;"string"==typeof r&&(r=Nt(r));var l=s.blockSize,d=4*l;r.sigBytes>d&&(r=s.finalize(n)),r.clamp();var o=r.clone();a._oKey=o;var c=r.clone();a._iKey=c;for(var u=o.words,m=c.words,h=0;h<l;h+=1)u[h]^=1549556828,m[h]^=909522486;return o.sigBytes=d,c.sigBytes=d,a.reset(),a}return v(i,[{key:"reset",value:function(){var e=this._hasher;e.reset(),e.update(this._iKey)}},{key:"update",value:function(e){return this._hasher.update(e),this}},{key:"finalize",value:function(e){var t=this._hasher,i=t.finalize(e);return t.reset(),t.finalize(this._oKey.clone().concat(i))}}]),i}(Kt),Pt={stringify:function(e){var t=e.words,i=e.sigBytes,n=this._map;e.clamp();for(var a=[],s=0;s<i;s+=3)for(var r=(t[s>>>2]>>>24-s%4*8&255)<<16|(t[s+1>>>2]>>>24-(s+1)%4*8&255)<<8|t[s+2>>>2]>>>24-(s+2)%4*8&255,l=0;l<4&&s+.75*l<i;l+=1)a.push(n.charAt(r>>>6*(3-l)&63));var d=n.charAt(64);if(d)for(;a.length%4;)a.push(d);return a.join("")},parse:function(e){var t=e.length,i=this._map,n=this._reverseMap;if(!n){this._reverseMap=[],n=this._reverseMap;for(var a=0;a<i.length;a+=1)n[i.charCodeAt(a)]=a}var s=i.charAt(64);if(s){var r=e.indexOf(s);-1!==r&&(t=r)}return function(e,t,i){for(var n=[],a=0,s=0;s<t;s+=1)if(s%4){var r=i[e.charCodeAt(s-1)]<<s%4*2|i[e.charCodeAt(s)]>>>6-s%4*2;n[a>>>2]|=r<<24-a%4*8,a+=1}return Ct.create(n,a)}(e,t,n)},_map:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="},jt=[],Dt=0;Dt<64;Dt+=1)jt[Dt]=4294967296*Math.abs(Math.sin(Dt+1))|0;var Et=function(e,t,i,n,a,s,r){var l=e+(t&i|~t&n)+a+r;return(l<<s|l>>>32-s)+t},Bt=function(e,t,i,n,a,s,r){var l=e+(t&n|i&~n)+a+r;return(l<<s|l>>>32-s)+t},Qt=function(e,t,i,n,a,s,r){var l=e+(t^i^n)+a+r;return(l<<s|l>>>32-s)+t},_t=function(e,t,i,n,a,s,r){var l=e+(i^(t|~n))+a+r;return(l<<s|l>>>32-s)+t},Ot=function(e){L(i,e);var t=M(i);function i(){return X(this,i),t.apply(this,arguments)}return v(i,[{key:"_doReset",value:function(){this._hash=new Ct([1732584193,4023233417,2562383102,271733878])}},{key:"_doProcessBlock",value:function(e,t){for(var i=e,n=0;n<16;n+=1){var a=t+n,s=e[a];i[a]=16711935&(s<<8|s>>>24)|4278255360&(s<<24|s>>>8)}var r=this._hash.words,l=i[t+0],d=i[t+1],o=i[t+2],c=i[t+3],u=i[t+4],m=i[t+5],h=i[t+6],p=i[t+7],Z=i[t+8],y=i[t+9],b=i[t+10],f=i[t+11],X=i[t+12],W=i[t+13],v=i[t+14],G=i[t+15],L=r[0],x=r[1],g=r[2],V=r[3];L=Et(L,x,g,V,l,7,jt[0]),V=Et(V,L,x,g,d,12,jt[1]),g=Et(g,V,L,x,o,17,jt[2]),x=Et(x,g,V,L,c,22,jt[3]),L=Et(L,x,g,V,u,7,jt[4]),V=Et(V,L,x,g,m,12,jt[5]),g=Et(g,V,L,x,h,17,jt[6]),x=Et(x,g,V,L,p,22,jt[7]),L=Et(L,x,g,V,Z,7,jt[8]),V=Et(V,L,x,g,y,12,jt[9]),g=Et(g,V,L,x,b,17,jt[10]),x=Et(x,g,V,L,f,22,jt[11]),L=Et(L,x,g,V,X,7,jt[12]),V=Et(V,L,x,g,W,12,jt[13]),g=Et(g,V,L,x,v,17,jt[14]),x=Et(x,g,V,L,G,22,jt[15]),L=Bt(L,x,g,V,d,5,jt[16]),V=Bt(V,L,x,g,h,9,jt[17]),g=Bt(g,V,L,x,f,14,jt[18]),x=Bt(x,g,V,L,l,20,jt[19]),L=Bt(L,x,g,V,m,5,jt[20]),V=Bt(V,L,x,g,b,9,jt[21]),g=Bt(g,V,L,x,G,14,jt[22]),x=Bt(x,g,V,L,u,20,jt[23]),L=Bt(L,x,g,V,y,5,jt[24]),V=Bt(V,L,x,g,v,9,jt[25]),g=Bt(g,V,L,x,c,14,jt[26]),x=Bt(x,g,V,L,Z,20,jt[27]),L=Bt(L,x,g,V,W,5,jt[28]),V=Bt(V,L,x,g,o,9,jt[29]),g=Bt(g,V,L,x,p,14,jt[30]),x=Bt(x,g,V,L,X,20,jt[31]),L=Qt(L,x,g,V,m,4,jt[32]),V=Qt(V,L,x,g,Z,11,jt[33]),g=Qt(g,V,L,x,f,16,jt[34]),x=Qt(x,g,V,L,v,23,jt[35]),L=Qt(L,x,g,V,d,4,jt[36]),V=Qt(V,L,x,g,u,11,jt[37]),g=Qt(g,V,L,x,p,16,jt[38]),x=Qt(x,g,V,L,b,23,jt[39]),L=Qt(L,x,g,V,W,4,jt[40]),V=Qt(V,L,x,g,l,11,jt[41]),g=Qt(g,V,L,x,c,16,jt[42]),x=Qt(x,g,V,L,h,23,jt[43]),L=Qt(L,x,g,V,y,4,jt[44]),V=Qt(V,L,x,g,X,11,jt[45]),g=Qt(g,V,L,x,G,16,jt[46]),x=Qt(x,g,V,L,o,23,jt[47]),L=_t(L,x,g,V,l,6,jt[48]),V=_t(V,L,x,g,p,10,jt[49]),g=_t(g,V,L,x,v,15,jt[50]),x=_t(x,g,V,L,m,21,jt[51]),L=_t(L,x,g,V,X,6,jt[52]),V=_t(V,L,x,g,c,10,jt[53]),g=_t(g,V,L,x,b,15,jt[54]),x=_t(x,g,V,L,d,21,jt[55]),L=_t(L,x,g,V,Z,6,jt[56]),V=_t(V,L,x,g,G,10,jt[57]),g=_t(g,V,L,x,h,15,jt[58]),x=_t(x,g,V,L,W,21,jt[59]),L=_t(L,x,g,V,u,6,jt[60]),V=_t(V,L,x,g,f,10,jt[61]),g=_t(g,V,L,x,o,15,jt[62]),x=_t(x,g,V,L,y,21,jt[63]),r[0]=r[0]+L|0,r[1]=r[1]+x|0,r[2]=r[2]+g|0,r[3]=r[3]+V|0}},{key:"_doFinalize",value:function(){var e=this._data,t=e.words,i=8*this._nDataBytes,n=8*e.sigBytes;t[n>>>5]|=128<<24-n%32;var a=Math.floor(i/4294967296),s=i;t[15+(n+64>>>9<<4)]=16711935&(a<<8|a>>>24)|4278255360&(a<<24|a>>>8),t[14+(n+64>>>9<<4)]=16711935&(s<<8|s>>>24)|4278255360&(s<<24|s>>>8),e.sigBytes=4*(t.length+1),this._process();for(var r=this._hash,l=r.words,d=0;d<4;d+=1){var o=l[d];l[d]=16711935&(o<<8|o>>>24)|4278255360&(o<<24|o>>>8)}return r}},{key:"clone",value:function(){var e=w(x(i.prototype),"clone",this).call(this);return e._hash=this._hash.clone(),e}}]),i}(zt);zt._createHelper(Ot),zt._createHmacHelper(Ot);var At=function(e){L(i,e);var t=M(i);function i(e){var n;return X(this,i),(n=t.call(this)).cfg=Object.assign(new Kt,{keySize:4,hasher:Ot,iterations:1},e),n}return v(i,[{key:"compute",value:function(e,t){for(var i,n=this.cfg,a=n.hasher.create(),s=Ct.create(),r=s.words,l=n.keySize,d=n.iterations;r.length<l;){i&&a.update(i),i=a.update(e).finalize(t),a.reset();for(var o=1;o<d;o+=1)i=a.finalize(i),a.reset();s.concat(i)}return s.sigBytes=4*l,s}}]),i}(Kt),qt=function(e){L(i,e);var t=M(i);function i(e,n,a){var s;return X(this,i),(s=t.call(this)).cfg=Object.assign(new Kt,a),s._xformMode=e,s._key=n,s.reset(),s}return v(i,[{key:"reset",value:function(){w(x(i.prototype),"reset",this).call(this),this._doReset()}},{key:"process",value:function(e){return this._append(e),this._process()}},{key:"finalize",value:function(e){return e&&this._append(e),this._doFinalize()}}],[{key:"createEncryptor",value:function(e,t){return this.create(this._ENC_XFORM_MODE,e,t)}},{key:"createDecryptor",value:function(e,t){return this.create(this._DEC_XFORM_MODE,e,t)}},{key:"_createHelper",value:function(e){var t=function(e){return"string"==typeof e?di:ri};return{encrypt:function(i,n,a){return t(n).encrypt(e,i,n,a)},decrypt:function(i,n,a){return t(n).decrypt(e,i,n,a)}}}}]),i}(Ut);qt._ENC_XFORM_MODE=1,qt._DEC_XFORM_MODE=2,qt.keySize=4,qt.ivSize=4;var $t=function(e){L(i,e);var t=M(i);function i(e,n){var a;return X(this,i),(a=t.call(this))._cipher=e,a._iv=n,a}return v(i,null,[{key:"createEncryptor",value:function(e,t){return this.Encryptor.create(e,t)}},{key:"createDecryptor",value:function(e,t){return this.Decryptor.create(e,t)}}]),i}(Kt);function ei(e,t,i){var n,a=e,s=this._iv;s?(n=s,this._iv=void 0):n=this._prevBlock;for(var r=0;r<i;r+=1)a[t+r]^=n[r]}var ti=function(e){L(i,e);var t=M(i);function i(){return X(this,i),t.apply(this,arguments)}return v(i)}($t);ti.Encryptor=function(e){L(i,e);var t=M(i);function i(){return X(this,i),t.apply(this,arguments)}return v(i,[{key:"processBlock",value:function(e,t){var i=this._cipher,n=i.blockSize;ei.call(this,e,t,n),i.encryptBlock(e,t),this._prevBlock=e.slice(t,t+n)}}]),i}(ti),ti.Decryptor=function(e){L(i,e);var t=M(i);function i(){return X(this,i),t.apply(this,arguments)}return v(i,[{key:"processBlock",value:function(e,t){var i=this._cipher,n=i.blockSize,a=e.slice(t,t+n);i.decryptBlock(e,t),ei.call(this,e,t,n),this._prevBlock=a}}]),i}(ti);var ii={pad:function(e,t){for(var i=4*t,n=i-e.sigBytes%i,a=n<<24|n<<16|n<<8|n,s=[],r=0;r<n;r+=4)s.push(a);var l=Ct.create(s,n);e.concat(l)},unpad:function(e){var t=e,i=255&t.words[t.sigBytes-1>>>2];t.sigBytes-=i}},ni=function(e){L(i,e);var t=M(i);function i(e,n,a){var s;return X(this,i),(s=t.call(this,e,n,Object.assign({mode:ti,padding:ii},a))).blockSize=4,s}return v(i,[{key:"reset",value:function(){var e;w(x(i.prototype),"reset",this).call(this);var t=this.cfg,n=t.iv,a=t.mode;this._xformMode===this.constructor._ENC_XFORM_MODE?e=a.createEncryptor:(e=a.createDecryptor,this._minBufferSize=1),this._mode=e.call(a,this,n&&n.words),this._mode.__creator=e}},{key:"_doProcessBlock",value:function(e,t){this._mode.processBlock(e,t)}},{key:"_doFinalize",value:function(){var e,t=this.cfg.padding;return this._xformMode===this.constructor._ENC_XFORM_MODE?(t.pad(this._data,this.blockSize),e=this._process(!0)):(e=this._process(!0),t.unpad(e)),e}}]),i}(qt),ai=function(e){L(i,e);var t=M(i);function i(e){var n;return X(this,i),(n=t.call(this)).mixIn(e),n}return v(i,[{key:"toString",value:function(e){return(e||this.formatter).stringify(this)}}]),i}(Kt),si={stringify:function(e){var t=e.ciphertext,i=e.salt;return(i?Ct.create([1398893684,1701076831]).concat(i).concat(t):t).toString(Pt)},parse:function(e){var t,i=Pt.parse(e),n=i.words;return 1398893684===n[0]&&1701076831===n[1]&&(t=Ct.create(n.slice(2,4)),n.splice(0,4),i.sigBytes-=16),ai.create({ciphertext:i,salt:t})}},ri=function(e){L(i,e);var t=M(i);function i(){return X(this,i),t.apply(this,arguments)}return v(i,null,[{key:"encrypt",value:function(e,t,i,n){var a=Object.assign(new Kt,this.cfg,n),s=e.createEncryptor(i,a),r=s.finalize(t),l=s.cfg;return ai.create({ciphertext:r,key:i,iv:l.iv,algorithm:e,mode:l.mode,padding:l.padding,blockSize:s.blockSize,formatter:a.format})}},{key:"decrypt",value:function(e,t,i,n){var a=t,s=Object.assign(new Kt,this.cfg,n);return a=this._parse(a,s.format),e.createDecryptor(i,s).finalize(a.ciphertext)}},{key:"_parse",value:function(e,t){return"string"==typeof e?t.parse(e,this):e}}]),i}(Kt);ri.cfg=Object.assign(new Kt,{format:si});var li={execute:function(e,t,i,n,a){var s,r=n;r||(r=Ct.random(8)),s=a?At.create({keySize:t+i,hasher:a}).compute(e,r):At.create({keySize:t+i}).compute(e,r);var l=Ct.create(s.words.slice(t),4*i);return s.sigBytes=4*t,ai.create({key:s,iv:l,salt:r})}},di=function(e){L(i,e);var t=M(i);function i(){return X(this,i),t.apply(this,arguments)}return v(i,null,[{key:"encrypt",value:function(e,t,i,n){var a=Object.assign(new Kt,this.cfg,n),s=a.kdf.execute(i,e.keySize,e.ivSize,a.salt,a.hasher);a.iv=s.iv;var r=ri.encrypt.call(this,e,t,s.key,a);return r.mixIn(s),r}},{key:"decrypt",value:function(e,t,i,n){var a=t,s=Object.assign(new Kt,this.cfg,n);a=this._parse(a,s.format);var r=s.kdf.execute(i,e.keySize,e.ivSize,a.salt,s.hasher);return s.iv=r.iv,ri.decrypt.call(this,e,a,r.key,s)}}]),i}(ri);di.cfg=Object.assign(ri.cfg,{kdf:li});for(var oi=[],ci=[],ui=[],mi=[],hi=[],pi=[],Zi=[],yi=[],bi=[],fi=[],Xi=[],Wi=0;Wi<256;Wi+=1)Xi[Wi]=Wi<128?Wi<<1:Wi<<1^283;for(var vi=0,Gi=0,Li=0;Li<256;Li+=1){var xi=Gi^Gi<<1^Gi<<2^Gi<<3^Gi<<4;xi=xi>>>8^255&xi^99,oi[vi]=xi,ci[xi]=vi;var gi=Xi[vi],Vi=Xi[gi],Si=Xi[Vi],Yi=257*Xi[xi]^16843008*xi;ui[vi]=Yi<<24|Yi>>>8,mi[vi]=Yi<<16|Yi>>>16,hi[vi]=Yi<<8|Yi>>>24,pi[vi]=Yi,Yi=16843009*Si^65537*Vi^257*gi^16843008*vi,Zi[xi]=Yi<<24|Yi>>>8,yi[xi]=Yi<<16|Yi>>>16,bi[xi]=Yi<<8|Yi>>>24,fi[xi]=Yi,vi?(vi=gi^Xi[Xi[Xi[Si^gi]]],Gi^=Xi[Xi[Gi]]):vi=Gi=1}var ki=[0,1,2,4,8,16,32,64,128,27,54],Ri=function(e){L(i,e);var t=M(i);function i(){return X(this,i),t.apply(this,arguments)}return v(i,[{key:"_doReset",value:function(){var e;if(!this._nRounds||this._keyPriorReset!==this._key){this._keyPriorReset=this._key;var t=this._keyPriorReset,i=t.words,n=t.sigBytes/4;this._nRounds=n+6;var a=4*(this._nRounds+1);this._keySchedule=[];for(var s=this._keySchedule,r=0;r<a;r+=1)r<n?s[r]=i[r]:(e=s[r-1],r%n?n>6&&r%n==4&&(e=oi[e>>>24]<<24|oi[e>>>16&255]<<16|oi[e>>>8&255]<<8|oi[255&e]):(e=oi[(e=e<<8|e>>>24)>>>24]<<24|oi[e>>>16&255]<<16|oi[e>>>8&255]<<8|oi[255&e],e^=ki[r/n|0]<<24),s[r]=s[r-n]^e);this._invKeySchedule=[];for(var l=this._invKeySchedule,d=0;d<a;d+=1){var o=a-d;e=d%4?s[o]:s[o-4],l[d]=d<4||o<=4?e:Zi[oi[e>>>24]]^yi[oi[e>>>16&255]]^bi[oi[e>>>8&255]]^fi[oi[255&e]]}}}},{key:"encryptBlock",value:function(e,t){this._doCryptBlock(e,t,this._keySchedule,ui,mi,hi,pi,oi)}},{key:"decryptBlock",value:function(e,t){var i=e,n=i[t+1];i[t+1]=i[t+3],i[t+3]=n,this._doCryptBlock(i,t,this._invKeySchedule,Zi,yi,bi,fi,ci),n=i[t+1],i[t+1]=i[t+3],i[t+3]=n}},{key:"_doCryptBlock",value:function(e,t,i,n,a,s,r,l){for(var d=e,o=this._nRounds,c=d[t]^i[0],u=d[t+1]^i[1],m=d[t+2]^i[2],h=d[t+3]^i[3],p=4,Z=1;Z<o;Z+=1){var y=n[c>>>24]^a[u>>>16&255]^s[m>>>8&255]^r[255&h]^i[p];p+=1;var b=n[u>>>24]^a[m>>>16&255]^s[h>>>8&255]^r[255&c]^i[p];p+=1;var f=n[m>>>24]^a[h>>>16&255]^s[c>>>8&255]^r[255&u]^i[p];p+=1;var X=n[h>>>24]^a[c>>>16&255]^s[u>>>8&255]^r[255&m]^i[p];p+=1,c=y,u=b,m=f,h=X}var W=(l[c>>>24]<<24|l[u>>>16&255]<<16|l[m>>>8&255]<<8|l[255&h])^i[p];p+=1;var v=(l[u>>>24]<<24|l[m>>>16&255]<<16|l[h>>>8&255]<<8|l[255&c])^i[p];p+=1;var G=(l[m>>>24]<<24|l[h>>>16&255]<<16|l[c>>>8&255]<<8|l[255&u])^i[p];p+=1;var L=(l[h>>>24]<<24|l[c>>>16&255]<<16|l[u>>>8&255]<<8|l[255&m])^i[p];p+=1,d[t]=W,d[t+1]=v,d[t+2]=G,d[t+3]=L}}]),i}(ni);Ri.keySize=8;var Ti=ni._createHelper(Ri),Mi=function(e){L(i,e);var t=M(i);function i(){return X(this,i),t.apply(this,arguments)}return v(i)}($t);Mi.Encryptor=function(e){L(i,e);var t=M(i);function i(){return X(this,i),t.apply(this,arguments)}return v(i,[{key:"processBlock",value:function(e,t){var i=e,n=this._cipher,a=n.blockSize,s=this._iv,r=this._counter;s&&(this._counter=s.slice(0),r=this._counter,this._iv=void 0);var l=r.slice(0);n.encryptBlock(l,0),r[a-1]=r[a-1]+1|0;for(var d=0;d<a;d+=1)i[t+d]^=l[d]}}]),i}(Mi),Mi.Decryptor=Mi.Encryptor;var Ii,wi={pad:function(){},unpad:function(){}},Ki={decryptWordArray:function(e,t,i){var n=Ht.parse(t),a=Ht.parse(Ce(i)),s=Ct.create(new Uint8Array(e)),r=Ti.decrypt(ai.create({ciphertext:s}),n,{iv:a,mode:Mi,padding:wi});return Ki.wordArrayToUint8Array(r)},wordArrayToUint8Array:function(e){for(var t=e.sigBytes,i=e.words,n=new Uint8Array(t),a=0,s=0;a!==t;){var r=i[s++];if(n[a++]=(4278190080&r)>>>24,a===t)break;if(n[a++]=(16711680&r)>>>16,a===t)break;if(n[a++]=(65280&r)>>>8,a===t)break;n[a++]=255&r}return n},decoderAESCTRData:function(e,t,i){if(e.videoSenc){var n=e.kidValue,a=e.videoSenc;e.samples.forEach((function(t,s){var r=a[s],l=t.data,d=[],o=[],c=r.InitializationVector;if(r.subsamples&&r.subsamples.length)r.subsamples.forEach((function(e){var t=e.BytesOfClearData+e.BytesOfProtectedData,i=l.slice(0,t);d.push(i.slice(0,e.BytesOfClearData)),o.push(i.slice(e.BytesOfClearData)),l=l.slice(t)}));else{var u=t.size;d.push(l.slice(0,0)),o.push(l.slice(0,u)),l=l.slice(u)}var m=new Gt;m.write.apply(m,o);var h=i?i(m.buffer,n,c):Ki.decryptWordArray(m.buffer,n,c),p=new Gt;d.forEach((function(e,t){var i=o[t].length,n=h.slice(0,i);p.write(e),p.write(n),h=h.slice(i)})),e.samples[s].data=p.buffer}))}if(t.audioSenc){var s=t.kidValue,r=t.audioSenc;t.samples.forEach((function(e,n){var a=r[n],l=i?i(e.data,s,a.InitializationVector):Ki.decryptWordArray(e.data,s,a.InitializationVector);t.samples[n].data=l}))}}},Ci=["stts","stsc","stsz","stco","co64","stss","ctts"],Hi=function(){function e(t,i,n,a){var s,r,l=this;if(X(this,e),G(this,"_videoSamples",[]),G(this,"_audioSamples",[]),G(this,"_lastRemainBuffer",[]),G(this,"_lastRemainBufferStartPos",0),G(this,"videoMaxFrameIdx",-1),G(this,"audioMaxFrameIdx",-1),this.videoTrack=new ce,this.audioTrack=new ue,this.metadataTrack=n||new be,this.videoSegmnents=t,this.audioSegmnents=i,this.log=new gt("MP4Demuxer",!a||!a.openLog||!a.openLog),this.memoryOpt=null==a?void 0:a.memoryOpt,this.memoryOpt||(t&&t.forEach((function(e){var t;(t=l._videoSamples).push.apply(t,C(e.frames))})),i&&i.forEach((function(e){var t;(t=l._audioSamples).push.apply(t,C(e.frames))}))),(null===(s=this.videoSegmnents)||void 0===s?void 0:s.length)>0){var d=this.videoSegmnents[this.videoSegmnents.length-1].frames;this.videoMaxFrameIdx=d[d.length-1].index}if((null===(r=this.audioSegmnents)||void 0===r?void 0:r.length)>0){var o=this.audioSegmnents[this.audioSegmnents.length-1].frames;this.audioMaxFrameIdx=o[o.length-1].index}}return v(e,[{key:"_markVideoSample",value:function(e){var t,i=tt({track:this.videoTrack});null==i||null===(t=i.markSample)||void 0===t||t.call(i,{sample:e,track:this.videoTrack,demuxer:this})}},{key:"parseSamples",value:function(e){if(!e)throw new Error("moov is required");this.videoTrack.codec||this.audioTrack.codec||(ht.moovToTrack(e,this.videoTrack,this.audioTrack),this.videoSenc=this.videoTrack.videoSenc,this.audioSenc=this.audioTrack.audioSenc,this.memoryOpt&&this.clearBoxEntries(e))}},{key:"demux",value:function(e,t,i,n,a){this.parseSamples(a);var s,r,l,d=this.videoTrack,o=this.audioTrack;d.samples=[],o.samples=[];var c={};if(i){var u,m=0;if(this.memoryOpt&&this.videoSegmnents&&!(c=this.getFramePosByIdx("video",i[0])))throw new Error("cannot found video frame #".concat(i[0]));for(var h=c,p=h.frameIdx,Z=h.segmentIdx,y=i[0],b=i[1];y<=b;y++){if(!this._videoSamples.length&&this.videoSegmnents){var f=this.getFrameInfo("video",Z,p);s=f.sample,Z=f.segmentIdx,p=f.frameIdx}else s=this._videoSamples[y];if(!s)throw new Error("cannot found video frame #".concat(y));l=s.offset-t,r=e.subarray(l,l+s.size),(u=new me("number"==typeof s.pts?s.pts:s.dts,s.dts)).duration=s.duration,u.gopId=s.gopId,s.keyframe&&u.setToKeyframe();for(var X=0,W=r.length-1;X<W;)m=Te(r,X),X+=4,u.units.push(r.subarray(X,X+m)),X+=m;this._markVideoSample(u),d.samples.push(u)}d.baseMediaDecodeTime=d.samples[0].dts}if(c={},n){if(this.memoryOpt&&this.audioSegmnents&&!(c=this.getFramePosByIdx("audio",n[0])))throw new Error("cannot found video frame #".concat(n[0]));for(var v=c,G=v.frameIdx,L=v.segmentIdx,x=n[0],g=n[1];x<=g;x++){if(!this._audioSamples.length&&this.audioSegmnents){var V=this.getFrameInfo("audio",L,G);s=V.sample,L=V.segmentIdx,G=V.frameIdx}else s=this._audioSamples[x];if(!s)throw new Error("cannot found video frame #".concat(x));l=s.offset-t,r=e.subarray(l,l+s.size),o.samples.push(new he(s.dts,r,s.duration))}o.baseMediaDecodeTime=o.samples[0].dts}return{videoTrack:d,audioTrack:o,metadataTrack:this.metadataTrack}}},{key:"demuxPart",value:function(e,t,i,n,a,s,r,l){if(this.parseSamples(a),this.videoTrack.useEME=s,this.audioTrack.useEME=s,this._lastRemainBuffer&&this._lastRemainBuffer.byteLength>0&&t>this._lastRemainBufferStartPos&&t<=this._lastRemainBufferStartPos+this._lastRemainBuffer.byteLength)for(var d=0;d<20;)try{var o=this._lastRemainBuffer.subarray(0,t-this._lastRemainBufferStartPos),c=new Uint8Array(e.byteLength+o.byteLength);c.set(o,0),c.set(new Uint8Array(e),o.byteLength),e=c,t-=o.byteLength,this._lastRemainBuffer=null,this._lastRemainBufferStartPos=0;break}catch(H){if(!(d<20))throw new Error("new Uint8Array error:,"+H.errorMessage);d++}var u,m,h,p=this.videoTrack,Z=this.audioTrack;p.samples=[],Z.samples=[],p.videoSenc=null,Z.audioSenc=null,(null==i?void 0:i[1])>this.videoMaxFrameIdx&&this.videoMaxFrameIdx>0&&(i[1]=this.videoMaxFrameIdx),(null==n?void 0:n[1])>this.audioMaxFrameIdx&&this.audioMaxFrameIdx>0&&(n[1]=this.audioMaxFrameIdx);var y=0,b=0,f={},X=e.byteLength+t;if((null==i?void 0:i.length)>0){var W;if(this.memoryOpt&&this.videoSegmnents&&!(f=this.getFramePosByIdx("video",i[0])))throw new Error("cannot found video frame #".concat(i[0]));for(var v=f,G=v.frameIdx,L=v.segmentIdx,x=i[0];x<=i[1];x++){if(!this._videoSamples.length&&this.videoSegmnents){var g=this.getFrameInfo("video",L,G);u=g.sample,L=g.segmentIdx,G=g.frameIdx}else u=this._videoSamples[x];if(!u)throw new Error("cannot found video frame #".concat(x));if(this.memoryOpt&&u.offset+u.size>X)break;u.offset>=t&&u.offset+u.size<=X&&(y=(h=u.offset-t)+u.size,m=e.subarray(h,y),(W=new me("number"==typeof u.pts?u.pts:u.dts,u.dts)).duration=u.duration,W.gopId=u.gopId,W.sampleOffset=u.index,u.keyframe&&W.setToKeyframe(),W.data=m,W.size=u.size,p.samples.push(W))}p.samples.length>0&&(p.gopId=p.samples[0].gopId,p.baseMediaDecodeTime=p.samples[0].dts,p.startPts=p.samples[0].pts/p.timescale,p.endPts=p.samples[p.samples.length-1].pts/p.timescale,p.startDts=p.samples[0].dts/p.timescale,p.endDts=p.samples[p.samples.length-1].dts/p.timescale,this.videoSenc&&(p.videoSenc=this.videoSenc.slice(p.samples[0].sampleOffset,p.samples[0].sampleOffset+p.samples.length),p.kidValue=r))}if((null==n?void 0:n.length)>0){if(this.memoryOpt&&this.audioSegmnents&&!(f=this.getFramePosByIdx("audio",n[0])))throw new Error("cannot found video frame #".concat(n[0]));for(var V=f,S=V.frameIdx,Y=V.segmentIdx,k=n[0];k<=n[1];k++){if(!this._audioSamples.length&&this.audioSegmnents){var R=this.getFrameInfo("audio",Y,S);u=R.sample,Y=R.segmentIdx,S=R.frameIdx}else u=this._audioSamples[k];if(!u)throw new Error("cannot found video frame #".concat(k));if(this.memoryOpt&&u.offset+u.size>X)break;u.offset>=t&&u.offset+u.size<=X&&(b=(h=u.offset-t)+u.size,m=e.subarray(h,b),Z.samples.push(new he(u.dts,m,u.duration,u.index)))}Z.samples.length>0&&(Z.gopId=Z.samples[0].gopId||p.gopId,Z.baseMediaDecodeTime=Z.samples[0].dts,Z.startPts=Z.samples[0].pts/Z.timescale,Z.endPts=Z.samples[Z.samples.length-1].pts/Z.timescale,this.audioSenc&&(Z.audioSenc=this.audioSenc.slice(Z.samples[0].sampleOffset,Z.samples[0].sampleOffset+Z.samples.length),Z.kidValue=r))}this.decoderData(p,Z,l);for(var T=0,M=0;M<p.samples.length;M++){for(var I=0,w=p.samples[M].data,K=w.length-1;I<K;)T=Te(w,I),I+=4,p.samples[M].units.push(w.subarray(I,I+T)),I+=T;this._markVideoSample(p.samples[M])}var C=Math.max(y,b);return this._lastRemainBuffer=e.subarray(C),this._lastRemainBuffer.byteLength>0?this._lastRemainBufferStartPos=t+e.byteLength-this._lastRemainBuffer.byteLength:this._lastRemainBufferStartPos=0,{videoTrack:p,audioTrack:Z,metadataTrack:this.metadataTrack,lastRemainBufferInfo:{data:this._lastRemainBuffer,pos:this._lastRemainBufferStartPos}}}},{key:"setLastRemainBufferInfo",value:function(e,t){this._lastRemainBuffer=e,this._lastRemainBufferStartPos=t}},{key:"reset",value:function(){this._lastRemainBuffer=null,this._lastRemainBufferStartPos=0,this.videoTrack.reset(),this.audioTrack.reset(),this.metadataTrack.reset()}},{key:"decoderData",value:function(e,t,i){e.useEME||t.useEME||Ki.decoderAESCTRData(e,t,i)}},{key:"getFramePosByIdx",value:function(e,t){var i="video"===e?this.videoSegmnents:this.audioSegmnents;if(!i||null==i||!i.length)return null;for(var n,a=0,s=0;s<i.length;s++){var r,l;if(n=i[s].frames,t<=(null===(r=i[s].frames)||void 0===r?void 0:r[(null===(l=n)||void 0===l?void 0:l.length)-1].index)){a=s;break}}return{frameIdx:n.findIndex((function(e){return e.index===t})),segmentIdx:a}}},{key:"getFrameInfo",value:function(e,t,i){var n,a,s,r,l="video"===e?this.videoSegmnents:this.audioSegmnents;return l?i<(null===(n=l[t])||void 0===n||null===(a=n.frames)||void 0===a?void 0:a.length)?{sample:null===(s=l[t])||void 0===s?void 0:s.frames[i],segmentIdx:t,frameIdx:i+1}:{sample:null===(r=l[t+1])||void 0===r?void 0:r.frames[0],segmentIdx:t+1,frameIdx:1}:{}}},{key:"clearBoxEntries",value:function(e){this.memoryOpt&&e.trak.forEach((function(e){Ci.forEach((function(t){var i=e.mdia.minf.stbl[t];i&&(i.entries&&(i.entries=null),i.entrySizes&&(i.entrySizes=null))}))}))}}],[{key:"probe",value:function(e){return ht.probe(e)}}]),e}(),Fi="3.0.25-alpha.3",Ni=function(){function e(){X(this,e)}return v(e,null,[{key:"start",value:function(e){return e&&e.length?1===e.length&&e.end(0)-e.start(0)<1e-6||1===e.length&&e.start(0)<0?0:e.start(0):0}},{key:"end",value:function(e){return e&&e.length?1===e.length&&e.end(0)-e.start(0)<1e-6?0:e.end(e.length-1):0}},{key:"get",value:function(e){if(e)try{return e.buffered}catch(t){}}},{key:"buffers",value:function(e,t){if(!e||!e.length)return[];for(var i=[],n=0,a=e.length;n<a;n++){var s=i.length;if(s&&t){var r=i[s-1],l=r[1];if(e.start(n)-l<=t){var d=e.end(n);d>l&&(r[1]=d)}else i.push([e.start(n),e.end(n)])}else i.push([e.start(n),e.end(n)])}return i}},{key:"totalLength",value:function(e){return e&&e.length?e.reduce((function(e,t){return e+(t[1]-t[0])}),0):0}},{key:"info",value:function(t){var i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0;if(!t||!t.length)return{start:0,end:0,buffers:[]};for(var a=0,s=0,r=0,l=0,d=0,o=0,c=0,u=e.buffers(t,n),m=0,h=u.length;m<h;m++){var p=u[m];if(i+n>=p[0]&&i<=p[1])a=p[0],s=p[1],r=m;else{if(i+n<p[0]){l=p[0],d=p[1];break}i+n>p[1]&&(o=p[0],c=p[1])}}return{start:a,end:s,index:r,buffers:u,nextStart:l,nextEnd:d,prevStart:o,prevEnd:c,currentTime:i,behind:i-a,remaining:s?s-i:0,length:e.totalLength&&e.totalLength(u)}}},{key:"isBuffered",value:function(t,i){if(t){var n=e.get(t);if(null!=n&&n.length)for(var a=0;a<n.length;a++)if(i>=n.start(a)&&i<=n.end(a))return!0}return!1}}]),e}(),Ui="undefined"!=typeof window,zi={MANIFEST:"manifest",NETWORK:"network",NETWORK_TIMEOUT:"network_timeout",NETWORK_FORBIDDEN:"network_forbidden",NETWORK_NOTFOUND:"network_notfound",NETWROK_RANGE_NOT_SATISFIABLE:"network_range_not_satisfiable",DEMUX:"demux",REMUX:"remux",MEDIA:"media",DRM:"drm",OTHER:"other",RUNTIME:"runtime",SUB_TYPES:{FLV:"FLV",HLS:"HLS",MP4:"MP4",FMP4:"FMP4",MSE_ADD_SB:"MSE_ADD_SB",MSE_APPEND_BUFFER:"MSE_APPEND_BUFFER",MSE_OTHER:"MSE_OTHER",MSE_FULL:"MSE_FULL",MSE_CHANGE_TYPE:"MSE_CHANGE_TYPE",OPTION:"OPTION",DASH:"DASH",LICENSE:"LICENSE",CUSTOM_LICENSE:"CUSTOM_LICENSE",MSE_HIJACK:"MSE_HIJACK",EME_HIJACK:"EME_HIJACK",SIDX:"SIDX",NO_CANPLAY_ERROR:"NO_CANPLAY_ERROR",BUFFERBREAK_ERROR:"BUFFERBREAK_ERROR",WAITING_TIMEOUT_ERROR:"WAITING_TIMEOUT_ERROR",MEDIA_ERR_ABORTED:"MEDIA_ERR_ABORTED",MEDIA_ERR_NETWORK:"MEDIA_ERR_NETWORK",MEDIA_ERR_DECODE:"MEDIA_ERR_DECODE",MEDIA_ERR_SRC_NOT_SUPPORTED:"MEDIA_ERR_SRC_NOT_SUPPORTED",MEDIA_ERR_CODEC_NOT_SUPPORTED:"MEDIA_ERR_CODEC_NOT_SUPPORTED",MEDIA_ERR_URL_EMPTY:"MEDIA_ERR_URL_EMPTY"}},Ji=(G(Ii={},zi.MANIFEST,{HLS:1100,DASH:1200}),G(Ii,zi.NETWORK,2100),G(Ii,zi.NETWORK_TIMEOUT,2101),G(Ii,zi.NETWORK_FORBIDDEN,2103),G(Ii,zi.NETWORK_NOTFOUND,2104),G(Ii,zi.NETWROK_RANGE_NOT_SATISFIABLE,2116),G(Ii,zi.DEMUX,{FLV:3100,HLS:3200,MP4:3300,FMP4:3400,SIDX:3410}),G(Ii,zi.REMUX,{FMP4:4100,MP4:4200}),G(Ii,zi.MEDIA,{MEDIA_ERR_ABORTED:5101,MEDIA_ERR_NETWORK:5102,MEDIA_ERR_DECODE:5103,MEDIA_ERR_SRC_NOT_SUPPORTED:5104,MEDIA_ERR_CODEC_NOT_SUPPORTED:5105,MEDIA_ERR_URL_EMPTY:5106,MSE_ADD_SB:5200,MSE_APPEND_BUFFER:5201,MSE_OTHER:5202,MSE_FULL:5203,MSE_HIJACK:5204,MSE_CHANGE_TYPE:5205,EME_HIJACK:5301}),G(Ii,zi.DRM,{LICENSE:7100,CUSTOM_LICENSE:7200}),G(Ii,zi.OTHER,8e3),G(Ii,zi.RUNTIME,{NO_CANPLAY_ERROR:9001,BUFFERBREAK_ERROR:9002,WAITING_TIMEOUT_ERROR:9003}),Ii),Pi=function(e){L(i,e);var t=M(i);function i(e,n,a,s,r){var l;return X(this,i),(l=t.call(this,r||(null==a?void 0:a.message))).errorType=e===zi.NETWORK_TIMEOUT?zi.NETWORK:e,l.originError=a,l.ext=s,l.errorCode=Ji[e][n]||Ji[e],l.errorMessage=l.message,l.errorCode||(l.errorType=zi.OTHER,l.errorCode=Ji[l.errorType]),l}return v(i,null,[{key:"create",value:function(e,t,n,a,s){return e instanceof i?e:(e instanceof Error&&(n=e,e=""),e||(e=zi.OTHER),new i(e,t,n,a,s))}},{key:"network",value:function(e){var t;return new i(null!=e&&e.isTimeout?zi.NETWORK_TIMEOUT:zi.NETWORK,null,e instanceof Error?e:null,{url:null==e?void 0:e.url,response:null==e?void 0:e.response,httpCode:null==e||null===(t=e.response)||void 0===t?void 0:t.status})}}]),i}(Y(Error)),ji={DEBUG:1,LOG:2,WARN:3,ERROR:4},Di=["Boolean","Number","String","Undefined","Null","Date","Object"],Ei=function(){function e(t,i){X(this,e),this.name=t||"",this._prefix="[".concat(this.name,"]"),this.logCacheLevel=(null==i?void 0:i.logCacheLevel)||3,this.logMaxSize=(null==i?void 0:i.logMaxSize)||204800,this.logSize=0,this.logTextArray=[]}return v(e,[{key:"debug",value:function(){for(var t,i=arguments.length,n=new Array(i),a=0;a<i;a++)n[a]=arguments[a];this.logCache.apply(this,[ji.DEBUG].concat(n)),e.disabled||(t=console).debug.apply(t,["[".concat(Bi(),"]"),this._prefix].concat(n))}},{key:"log",value:function(){for(var t,i=arguments.length,n=new Array(i),a=0;a<i;a++)n[a]=arguments[a];this.logCache.apply(this,[ji.LOG].concat(n)),e.disabled||(t=console).log.apply(t,["[".concat(Bi(),"]"),this._prefix].concat(n))}},{key:"warn",value:function(){for(var t,i=arguments.length,n=new Array(i),a=0;a<i;a++)n[a]=arguments[a];this.logCache.apply(this,[ji.WARN].concat(n)),e.disabled||(t=console).warn.apply(t,["[".concat(Bi(),"]"),this._prefix].concat(n))}},{key:"error",value:function(){for(var t,i=arguments.length,n=new Array(i),a=0;a<i;a++)n[a]=arguments[a];this.logCache.apply(this,[ji.ERROR].concat(n)),e.disabled||(t=console).error.apply(t,["[".concat(Bi(),"]"),this._prefix].concat(n))}},{key:"logCache",value:function(e){if(!(e<this.logCacheLevel)){var t="";try{for(var i=arguments.length,n=new Array(i>1?i-1:0),a=1;a<i;a++)n[a-1]=arguments[a];var s=n.map((function(e){return _i(e)}));t="[".concat(Bi(),"]")+this._prefix+JSON.stringify(s)}catch(l){return}if(e>=this.logCacheLevel&&(this.logSize+=t.length,this.logTextArray.push(t)),this.logSize>this.logMaxSize){var r=this.logTextArray.shift();this.logSize-=r.length}}}},{key:"getLogCache",value:function(){var e=this.logTextArray.join("\n");return this.reset(),e}},{key:"reset",value:function(){this.logTextArray=[],this.logSize=0}},{key:"table",value:function(){var t;e.disabled||(console.group(this._prefix),(t=console).table.apply(t,arguments),console.groupEnd())}},{key:"setLogLevel",value:function(e){this.logCacheLevel=e}}],[{key:"enable",value:function(){e.disabled=!1}},{key:"disable",value:function(){e.disabled=!0}}]),e}();function Bi(){return(new Date).toLocaleString()}function Qi(e){if("object"!==y(e))return e;var t=Object.prototype.toString.call(e).slice(8,-1);switch(t){case"Array":case"Uint8Array":case"ArrayBuffer":return t+"["+e.length+"]";case"Object":return"{}";default:return t}}function _i(e,t,i){i||(i=1),t||(t=2);var n={};if(!e||"object"!==y(e))return e;var a=Object.prototype.toString.call(e).slice(8,-1);if(!Di.includes(a))return a;if(!(i>t)){for(var s in e)Object.prototype.hasOwnProperty.call(e,s)&&(i===t?n[s]=Qi(e[s]):"object"===y(e[s])?n[s]=_i(e[s],t,i+1):n[s]=e[s]);return n}}function Oi(){var e,t,i=new Promise((function(i,n){e=i,t=n}));return i.used=!1,i.resolve=function(){return i.used=!0,e.apply(void 0,arguments)},i.reject=function(){return i.used=!0,t.apply(void 0,arguments)},i}function Ai(){try{return parseInt(performance.now(),10)}catch(e){return(new Date).getTime()}}G(Ei,"disabled",!0);var qi=function(e){try{return JSON.stringify(e)}catch(t){return""}};function $i(){var e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];try{return Ui?e&&"undefined"!=typeof ManagedMediaSource?ManagedMediaSource:window.MediaSource:null}catch(t){}}function en(e){return/ManagedMediaSource/gi.test(Object.prototype.toString.call(e))}var tn="appendBuffer",nn="removeBuffer",an="updateDuration",sn=function(){function e(t,i){var n=this;X(this,e),G(this,"media",null),G(this,"mediaSource",null),G(this,"_openPromise",Oi()),G(this,"_queue",Object.create(null)),G(this,"_sourceBuffer",Object.create(null)),G(this,"_mseFullFlag",{}),G(this,"_st",0),G(this,"_opst",0),G(this,"_logger",null),G(this,"_config",null),G(this,"_url",null),G(this,"_onStartStreaming",(function(){n._logger.debug("startstreaming")})),G(this,"_onEndStreaming",(function(){n._logger.debug("endstreaming")})),G(this,"_onSBUpdateEnd",(function(e){var t=n._queue[e];if(t){var i=t[0];if((null==i?void 0:i.opName)!==an&&t.shift(),i){var a,s,r=Ai()-n._opst;n._logger.debug("UpdateEnd(".concat(e,"/").concat(i.opName,")"),qi(function(e){var t=[];if(e instanceof TimeRanges)for(var i=0;i<e.length;i++)t.push({start:e.start(i),end:e.end(i)});return t}(null===(a=n._sourceBuffer[e])||void 0===a?void 0:a.buffered)),r,i.context),i.promise.resolve({name:i.opName,context:i.context,costtime:r});var l=null===(s=i.context)||void 0===s?void 0:s.callback;l&&"function"==typeof l&&l(i.context),n._startQueue(e)}}})),G(this,"_onSBUpdateError",(function(e,t){var i=n._queue[e];if(i){var a=i[0];a&&(n._logger.error("UpdateError",e,a.opName,a.context),a.promise.reject(new Pi(zi.MEDIA,zi.SUB_TYPES.MSE_APPEND_BUFFER,t)))}})),this._config=Object.assign(e.getDefaultConfig(),i),t&&this.bindMedia(t),this._logger=new Ei("MSE"),this._config.openLog&&Ei.enable()}var t,i,n;return v(e,[{key:"isOpened",get:function(){var e;return"open"===(null===(e=this.mediaSource)||void 0===e?void 0:e.readyState)}},{key:"hasOpTasks",get:function(){var e=this,t=!1;return Object.keys(this._queue).forEach((function(i){var n=e._queue[i];Array.isArray(n)&&(t||(t=n.length>0))})),t}},{key:"url",get:function(){return this._url}},{key:"duration",get:function(){var e;return(null===(e=this.mediaSource)||void 0===e?void 0:e.duration)||-1}},{key:"isEnded",get:function(){return!!this.mediaSource&&"ended"===this.mediaSource.readyState}},{key:"streaming",get:function(){return!en(this.mediaSource)||this.mediaSource.streaming}},{key:"isFull",value:function(t){return t?this._mseFullFlag[t]:this._mseFullFlag[e.VIDEO]}},{key:"updateDuration",value:function(e){var t=this,i=this.mediaSource&&this.mediaSource.duration>e;if(this.mediaSource&&this.mediaSource.duration>e){var n=0;if(Object.keys(this._sourceBuffer).forEach((function(e){try{n=Math.max(t.bufferEnd(e)||0,n)}catch(i){}})),e<n)return Promise.resolve()}return this._enqueueBlockingOp((function(){t.isEnded?t._logger.debug("setDuration but ended"):t.mediaSource&&(t.mediaSource.duration=e,t._logger.debug("setDuration",e))}),an,{isReduceDuration:i})}},{key:"open",value:function(){var e=this;if(this._openPromise.used&&!this.isOpened&&this.mediaSource){var t=this.mediaSource;t.addEventListener("sourceopen",(function i(){var n=Ai()-e._st;e._logger.debug("sourceopen",n),t.removeEventListener("sourceopen",i),e._openPromise.resolve({costtime:n})})),this._openPromise=Oi()}return this._openPromise}},{key:"bindMedia",value:(n=f(Z().mark((function e(t){var i,n,a,s,r=this;return Z().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!this.mediaSource&&!this.media){e.next=3;break}return e.next=3,this.unbindMedia();case 3:if(i=$i(this._config.preferMMS),t&&i){e.next=6;break}throw new Error("Param media or MediaSource does not exist");case 6:return this.media=t,n=this.mediaSource=new i,a=en(n),this._st=Ai(),s=function e(){var i=Ai()-r._st;r._logger.debug("sourceopen"),n.removeEventListener("sourceopen",e),URL.revokeObjectURL(t.src),r._openPromise.resolve({costtime:i}),t.dispatchEvent(new CustomEvent("mseAttached"))},n.addEventListener("sourceopen",s),a&&(n.addEventListener("startstreaming",this._onStartStreaming),n.addEventListener("endstreaming",this._onEndStreaming)),this._url=URL.createObjectURL(n),t.src=this._url,t.disableRemotePlayback=a,t.dispatchEvent(new CustomEvent("mseAttaching")),e.abrupt("return",this._openPromise);case 18:case"end":return e.stop()}}),e,this)}))),function(e){return n.apply(this,arguments)})},{key:"unbindMedia",value:(i=f(Z().mark((function e(){var t,i,n,a=this;return Z().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(this._openPromise.used||this._openPromise.resolve(),t=this.mediaSource){if(Object.keys(this._queue).forEach((function(e){var t=a._queue[e];t&&t.forEach((function(e){var t,i;return null===(t=e.promise)||void 0===t||null===(i=t.resolve)||void 0===i?void 0:i.call(t)}))})),i=!!this.media&&this.media.readyState>=1,n="open"===t.readyState,i&&n)try{t.endOfStream()}catch(s){}Object.keys(this._sourceBuffer).forEach((function(e){try{t.removeSourceBuffer(a._sourceBuffer[e])}catch(s){}})),en(t)&&(t.removeEventListener("startstreaming",this._onStartStreaming),t.removeEventListener("endstreaming",this._onEndStreaming))}if(this.media){this.media.disableRemotePlayback=!1,this.media.removeAttribute("src");try{this.media.load()}catch(s){}this.media=null}this.mediaSource=null,this._openPromise=Oi(),this._queue=Object.create(null),this._sourceBuffer=Object.create(null);case 8:case"end":return e.stop()}}),e,this)}))),function(){return i.apply(this,arguments)})},{key:"createSource",value:function(e,t){if(!this._sourceBuffer[e]&&this.mediaSource){var i;try{i=this._sourceBuffer[e]=this.mediaSource.addSourceBuffer(t)}catch(n){throw new Pi(zi.MEDIA,zi.SUB_TYPES.MSE_ADD_SB,n)}i.mimeType=t,i.addEventListener("updateend",this._onSBUpdateEnd.bind(this,e)),i.addEventListener("error",this._onSBUpdateError.bind(this,e))}}},{key:"changeType",value:function(e,t){var i=this,n=this._sourceBuffer[e];return this.mediaSource&&n&&n.mimeType!==t?"function"!=typeof n.changeType?Promise.reject(new Pi(zi.MEDIA,zi.SUB_TYPES.MSE_CHANGE_TYPE,new Error("changeType is not a function"))):this._enqueueOp(e,(function(){try{n.changeType(t)}catch(a){throw new Pi(zi.MEDIA,zi.SUB_TYPES.MSE_CHANGE_TYPE,a)}n.mimeType=t,i._onSBUpdateEnd(e)}),"changeType",{mimeType:t}):Promise.resolve()}},{key:"createOrChangeSource",value:function(e,t){return this.createSource(e,t),this.changeType(e,t)}},{key:"append",value:function(e,t,i){var n=this;return t&&t.byteLength&&this._sourceBuffer[e]?this._enqueueOp(e,(function(){var a;n.mediaSource&&!n.media.error&&(n._logger.debug("MSE APPEND START",i),n._opst=Ai(),null===(a=n._sourceBuffer[e])||void 0===a||a.appendBuffer(t))}),tn,i):Promise.resolve()}},{key:"remove",value:function(e,t,i,n){var a=this,s=!1;return this._mseFullFlag[e]&&(s=!0),this._enqueueOp(e,(function(){if(a.mediaSource&&!a.media.error){var s=a._sourceBuffer[e];t>=i||!s?a._onSBUpdateEnd(e):(a._opst=Ai(),a._logger.debug("MSE REMOVE START",e,t,i,n),s.remove(t,i))}}),nn,n,s)}},{key:"clearBuffer",value:function(e,t){var i,n=this;return Object.keys(this._sourceBuffer).forEach((function(a){i=n.remove(a,e,t)})),i||Promise.resolve()}},{key:"clearAllBuffer",value:function(){var e,t=this;return Object.keys(this._sourceBuffer).forEach((function(i){var n=t._sourceBuffer[i];e=t.remove(i,0,Ni.end(Ni.get(n)))})),e}},{key:"clearOpQueues",value:function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=this._queue[e],n=this._sourceBuffer[e];this._logger.debug("MSE clearOpQueue",e,t,"sb updating: ",null==n?void 0:n.updating);var a=!1;if(null!=n&&n.updating&&(a=!0),t&&i){var s=a?Math.max(i.length-1,0):i.length;s>0&&i.splice(0,s)}else;}},{key:"endOfStream",value:function(e){var t=this;return this.mediaSource&&"open"===this.mediaSource.readyState?this._enqueueBlockingOp((function(){var i=t.mediaSource;i&&"open"===i.readyState&&(t._logger.debug("MSE endOfStream START"),e?i.endOfStream(e):i.endOfStream())}),"endOfStream"):Promise.resolve()}},{key:"setLiveSeekableRange",value:function(e,t){var i=this.mediaSource;e<0||t<e||null==i||!i.setLiveSeekableRange||"open"!==i.readyState||i.setLiveSeekableRange(e,t)}},{key:"getSourceBuffer",value:function(e){return this._sourceBuffer[e]}},{key:"buffered",value:function(e){return Ni.get(this._sourceBuffer[e])}},{key:"bufferStart",value:function(e){return Ni.start(this.buffered(e))}},{key:"bufferEnd",value:function(e){return Ni.end(this.buffered(e))}},{key:"_enqueueOp",value:function(e,t,i,n,a){var s=this;if(!this.mediaSource)return Promise.resolve();var r=this._queue[e]=this._queue[e]||[],l={exec:t,promise:Oi(),opName:i,context:n};return a?(r.splice(0,0,l),this._mseFullFlag[e]=!1,this._startQueue(e)):r.push(l),this.isOpened||this.isEnded?1===r.length&&this._startQueue(e):this._openPromise.then((function(){1===r.length&&s._startQueue(e)})),l.promise}},{key:"_enqueueBlockingOp",value:(t=f(Z().mark((function e(t,i,n){var a,s,r=this;return Z().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(this.mediaSource){e.next=2;break}return e.abrupt("return",Promise.resolve());case 2:if((a=Object.keys(this._sourceBuffer)).length){e.next=5;break}return e.abrupt("return",t());case 5:return s=[],a.forEach((function(e){var t=r._queue[e],a=Oi();s.push(a),t.push({exec:function(){a.resolve()},promise:a,opName:i,context:n}),1===t.length&&r._startQueue(e)})),e.abrupt("return",Promise.all(s).then((function(){try{return t()}finally{a.forEach((function(e){var t=r._queue[e],i=r._sourceBuffer[e];null==t||t.shift(),i&&i.updating||r._startQueue(e)}))}})));case 8:case"end":return e.stop()}}),e,this)}))),function(e,i,n){return t.apply(this,arguments)})},{key:"_startQueue",value:function(e){var t=this._queue[e];if(t){var i=t[0];if(i&&!this._mseFullFlag[e])try{i.exec()}catch(s){var n,a;if(s&&s.message&&s.message.indexOf("SourceBuffer is full")>=0)this._mseFullFlag[e]=!0,i.context&&"object"===y(i.context)&&(i.context.isFull=!0),this._logger.error("[MSE error], context,",i.context," ,name,",i.opName,",err,SourceBuffer is full"),null==i||null===(n=i.promise)||void 0===n||n.reject(new Pi(zi.MEDIA,zi.SUB_TYPES.MSE_FULL,s));else this._logger.error(s),null==i||null===(a=i.promise)||void 0===a||a.reject(s.constructor===Pi?s:new Pi(zi.MEDIA,zi.SUB_TYPES.MSE_OTHER,s)),t.shift(),this._startQueue(e)}}}},{key:"setTimeoffset",value:function(e,t,i){var n=this;return this._enqueueOp(e,(function(){t<0&&(t+=.001),n._sourceBuffer[e].timestampOffset=t,n._onSBUpdateEnd(e)}),"setTimeoffset",i)}},{key:"abort",value:function(e,t){var i=this;return this.isOpened?this._enqueueOp(e,(function(){var n;i._logger.debug("MSE abort",e,t),null===(n=i._sourceBuffer[e])||void 0===n||n.abort(),i._onSBUpdateEnd(e)}),"abort",t):Promise.resolve()}}],[{key:"isSupported",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:'video/mp4; codecs="avc1.42E01E,mp4a.40.2"',t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=$i(t);if(!i)return!1;try{return i.isTypeSupported(e)}catch(n){return this._logger.error(e,n),!1}}},{key:"isMMSOnly",value:function(){return"undefined"!=typeof ManagedMediaSource&&"undefined"==typeof MediaSource}},{key:"getDefaultConfig",value:function(){return{openLog:!1,preferMMS:!1}}}]),e}();G(sn,"VIDEO","video"),G(sn,"AUDIO","audio");var rn="fetch",ln="xhr",dn="arraybuffer",on="text",cn="json",un=function(e){L(i,e);var t=M(i);function i(e,n,a,s){var r;return X(this,i),G(R(r=t.call(this,s)),"retryCount",0),G(R(r),"isTimeout",!1),G(R(r),"loaderType",rn),G(R(r),"startTime",0),G(R(r),"endTime",0),G(R(r),"options",{}),r.url=e,r.request=n,r.response=a,r}return v(i)}(Y(Error)),mn=Object.prototype.toString;function hn(e){if("[object Object]"!==mn.call(e))return!1;var t=Object.getPrototypeOf(e);return null===t||t===Object.prototype}function pn(e){if(e&&null!==e[0]&&void 0!==e[0]&&(0!==e[0]||null!==e[1]&&void 0!==e[1])){var t="bytes="+e[0]+"-";return e[1]&&(t+=e[1]),t}}function Zn(e){return encodeURIComponent(e).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}function yn(e,t){if(e){if(!t)return e;var i,n=Object.keys(t).map((function(e){if(null!=(i=t[e]))return Array.isArray(i)?e+="[]":i=[i],i.map((function(t){var i;return i=t,"[object Date]"===mn.call(i)?t=t.toISOString():function(e){return null!==e&&"object"===y(e)}(t)&&(t=JSON.stringify(t)),"".concat(Zn(e),"=").concat(Zn(t))})).join("&")})).filter(Boolean).join("&");if(n){var a=e.indexOf("#");-1!==a&&(e=e.slice(0,a)),e+=(-1===e.indexOf("?")?"?":"&")+n}return e}}function bn(e,t,i,n,a,s,r,l,d,o,c){return a=null!=a?parseFloat(a):null,n=parseInt(n||"0",10),Number.isNaN(n)&&(n=0),{data:e,done:t,options:{range:d,vid:o,index:l,contentLength:n,age:a,startTime:s,firstByteTime:r,endTime:Date.now(),priOptions:c},response:i}}function fn(e,t){return Math.round(8*e*1e3/t/1024)}var Xn="real_time_speed",Wn=2097152,vn=function(e){L(n,e);var t,i=M(n);function n(){var e;return X(this,n),G(R(e=i.call(this)),"_abortController",null),G(R(e),"_timeoutTimer",null),G(R(e),"_reader",null),G(R(e),"_response",null),G(R(e),"_aborted",!1),G(R(e),"_index",-1),G(R(e),"_range",null),G(R(e),"_receivedLength",0),G(R(e),"_running",!1),G(R(e),"_logger",null),G(R(e),"_vid",""),G(R(e),"_firtstByte",0),G(R(e),"_onProcessMinLen",0),G(R(e),"_onCancel",null),G(R(e),"_priOptions",null),G(R(e),"_processMaxGapTime",1/0),G(R(e),"curTimeout",0),e}return v(n,[{key:"load",value:function(e){var t,i=this,n=e.url,a=e.vid,s=e.timeout,r=e.dynamicTimeoutIns,l=e.responseType,d=e.onProgress,o=e.index,c=e.onTimeout,u=e.onCancel,m=e.range,h=e.transformResponse,p=e.request,y=e.params,b=e.logger,X=e.method,W=e.headers,v=e.body,G=e.mode,L=e.credentials,x=e.cache,g=e.redirect,V=e.referrer,S=e.referrerPolicy,Y=e.onProcessMinLen,k=e.priOptions,R=e.streamRes,T=e.firstMaxChunkSize,M=e.processMaxGapTime;this._logger=b,this._aborted=!1,this._onProcessMinLen=Y,this._onCancel=u,this._abortController="undefined"!=typeof AbortController&&new AbortController,this._running=!0,this._receivedLength=0,this._index=o,this._range=m||[0,0],this._vid=a||n,this._priOptions=k||{},this._firstMaxChunkSize=T,this._processMaxGapTime=M;var I={method:X,headers:W,body:v,mode:G,credentials:L,cache:x,redirect:g,referrer:V,referrerPolicy:S,signal:null===(t=this._abortController)||void 0===t?void 0:t.signal},w=!1;clearTimeout(this._timeoutTimer),n=yn(n,y);var K=pn(m);K&&(W=p?p.headers:I.headers=I.headers||(Headers?new Headers:{}),Headers&&W instanceof Headers?W.append("Range",K):W.Range=K);var C=r&&"function"==typeof r.getTimeout?r.getTimeout(s):s;this.curTimeout=C,C&&(this._timeoutTimer=setTimeout(f(Z().mark((function e(){var t;return Z().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return w=!0,r&&"function"==typeof r.update&&(i._logger.debug("[dytimeout] fetch timeout update rtt,",5*C),r.update(5*C)),e.next=4,i.cancel();case 4:c&&((t=new un(n,I,null,"timeout")).isTimeout=!0,c(t,{index:i._index,range:i._range,vid:i._vid,priOptions:i._priOptions}));case 5:case"end":return e.stop()}}),e)}))),C));var H=Date.now();return this._logger.debug("[fetch load start], index,",o,",range,",m,",[dytimeout]",C),new Promise((function(e,t){(R?new Promise((function(e){e(R)})):fetch(p||n,p?void 0:I)).then(function(){var a=f(Z().mark((function a(s){var c,u,p,y;return Z().wrap((function(a){for(;;)switch(a.prev=a.next){case 0:if(clearTimeout(i._timeoutTimer),i._response=s,!i._aborted&&i._running){a.next=4;break}return a.abrupt("return");case 4:if(h&&(s=h(s,n)||s),s.ok){a.next=7;break}throw new un(n,I,s,"bad network response");case 7:if(c=Date.now(),i._priOptions.rtt=c-H,r&&"function"==typeof r.update&&(i._logger.debug("[dytimeout] fetch update rtt,",i._priOptions.rtt),r.update(i._priOptions.rtt)),l!==on){a.next=17;break}return a.next=13,s.text();case 13:u=a.sent,i._running=!1,a.next=39;break;case 17:if(l!==cn){a.next=24;break}return a.next=20,s.json();case 20:u=a.sent,i._running=!1,a.next=39;break;case 24:if(!d){a.next=31;break}return i.resolve=e,i.reject=t,i._loadChunk(s,d,H,c),a.abrupt("return");case 31:return a.next=33,s.arrayBuffer();case 33:u=a.sent,u=new Uint8Array(u),i._running=!1,p=Date.now()-H,y=fn(u.byteLength,p),i.emit(Xn,{speed:y,len:u.byteLength,time:p,vid:i._vid,index:i._index,range:i._range,priOptions:i._priOptions});case 39:i._logger.debug("[fetch load end], index,",o,",range,",m),e(bn(u,!0,s,s.headers.get("Content-Length"),s.headers.get("age"),H,c,o,m,i._vid,i._priOptions));case 41:case"end":return a.stop()}}),a)})));return function(e){return a.apply(this,arguments)}}()).catch((function(e){var a;clearTimeout(i._timeoutTimer),i._running=!1,i._aborted&&!w||((e=e instanceof un?e:new un(n,I,null,null===(a=e)||void 0===a?void 0:a.message)).startTime=H,e.endTime=Date.now(),e.isTimeout=w,e.options={index:i._index,range:i._range,vid:i._vid,priOptions:i._priOptions},t(e))}))}))}},{key:"cancel",value:(t=f(Z().mark((function e(){return Z().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!this._aborted){e.next=2;break}return e.abrupt("return");case 2:if(this._aborted=!0,this._running=!1,!this._response){e.next=14;break}if(e.prev=5,!this._reader){e.next=9;break}return e.next=9,this._reader.cancel();case 9:e.next=13;break;case 11:e.prev=11,e.t0=e.catch(5);case 13:this._response=this._reader=null;case 14:if(this._abortController){try{this._abortController.abort()}catch(t){}this._abortController=null}this._onCancel&&this._onCancel({index:this._index,range:this._range,vid:this._vid,priOptions:this._priOptions});case 16:case"end":return e.stop()}}),e,this,[[5,11]])}))),function(){return t.apply(this,arguments)})},{key:"_loadChunk",value:function(e,t,i,n){var a=this;if(!e.body||!e.body.getReader){this._running=!1;var s=new un(e.url,"",e,"onProgress of bad response.body.getReader");return s.options={index:this._index,range:this._range,vid:this._vid,priOptions:this._priOptions},void this.reject(s)}this._onProcessMinLen>0&&(this._cache=new Uint8Array(Wn),this._writeIdx=0);var r,l,d,o=this._reader=e.body.getReader(),c=Date.now(),u=function(){var s=f(Z().mark((function s(){var m,h,p,y,b,f,X,W,v,G,L;return Z().wrap((function(s){for(;;)switch(s.prev=s.next){case 0:return l=Date.now(),s.prev=1,s.next=4,o.read();case 4:r=s.sent,d=Date.now(),s.next=13;break;case 8:return s.prev=8,s.t0=s.catch(1),d=Date.now(),a._aborted||(a._running=!1,s.t0.options={index:a._index,range:a._range,vid:a._vid,priOptions:a._priOptions},a.reject(s.t0)),s.abrupt("return");case 13:if(h=(null===(m=a._range)||void 0===m?void 0:m.length)>0?a._range[0]:0,p=h+a._receivedLength,!a._aborted){s.next=19;break}return a._running=!1,t(void 0,!1,{range:[p,p],vid:a._vid,index:a._index,startTime:l,endTime:d,st:i,firstByteTime:n,priOptions:a._priOptions},e),s.abrupt("return");case 19:if(y=r.value?r.value.byteLength:0,a._receivedLength+=y,a._onProcessMinLen>0?a._writeIdx+y>=a._onProcessMinLen||r.done?((b=new Uint8Array(a._writeIdx+y)).set(a._cache.subarray(0,a._writeIdx),0),y>0&&b.set(r.value,a._writeIdx),a._writeIdx=0,a._logger.debug("【fetchLoader,onProgress enough】,done,",r.done,",len,",b.byteLength,", writeIdx,",a._writeIdx)):y>0&&a._writeIdx+y<Wn?(a._cache.set(r.value,a._writeIdx),a._writeIdx+=y,a._logger.debug("【fetchLoader,onProgress cache】,len,",y,", writeIdx,",a._writeIdx)):y>0&&(f=new Uint8Array(a._writeIdx+y+2048),a._logger.debug("【fetchLoader,onProgress extra start】,size,",a._writeIdx+y+2048,", datalen,",y,", writeIdx,",a._writeIdx),f.set(a._cache.subarray(0,a._writeIdx),0),y>0&&f.set(r.value,a._writeIdx),a._writeIdx+=y,delete a._cache,a._cache=f,a._logger.debug("【fetchLoader,onProgress extra end】,len,",y,", writeIdx,",a._writeIdx)):b=r.value,!(b&&b.byteLength>0||r.done)){s.next=29;break}a._firstMaxChunkSize&&(a._firtstByte?a._cacheData&&((W=new Uint8Array(a._cacheData.byteLength+b.byteLength)).set(a._cacheData,0),W.set(b,a._cacheData.byteLength),b=W,a._cacheData=null):(a._firtstByte++,X=b.slice(0,a._firstMaxChunkSize),a._cacheData=b.slice(a._firstMaxChunkSize),b=X)),a._logger.debug("【fetchLoader,onProgress call】,task,",a._range,", start,",p,", end,",h+a._receivedLength,", done,",r.done,i),t(b,r.done,{range:[a._range[0]+a._receivedLength-(b?b.byteLength:0),a._range[0]+a._receivedLength],vid:a._vid,index:a._index,startTime:l,endTime:d,st:i,firstByteTime:n,priOptions:a._priOptions},e),c=Date.now(),s.next=38;break;case 29:if(!(Date.now()-c>=a._processMaxGapTime)){s.next=38;break}return a._logger.debug("[onProgress timeout],task: ".concat(JSON.stringify(a._range)," done: ").concat(r.done," processMaxGapTime: ").concat(a._processMaxGapTime)),(v=new un(e.url,null,e,"process timeout")).options={index:a._index,range:a._range,vid:a._vid,priOptions:a._priOptions},a.running=!1,s.next=36,a.cancel();case 36:return a.reject(v),s.abrupt("return");case 38:r.done?(G=Date.now()-i,L=fn(a._receivedLength,G),a.emit(Xn,{speed:L,len:a._receivedLength,time:G,vid:a._vid,index:a._index,range:a._range,priOptions:a._priOptions}),a._running=!1,a._logger.debug("[fetchLoader onProgress end],task,",a._range,",done,",r.done),a.resolve(bn(r,!0,e,e.headers.get("Content-Length"),e.headers.get("age"),i,n,a._index,a._range,a._vid,a._priOptions))):a._firstMaxChunkSize?setTimeout((function(){u()}),0):u();case 39:case"end":return s.stop()}}),s,null,[[1,8]])})));return function(){return s.apply(this,arguments)}}();u()}},{key:"receiveLen",get:function(){return this._receivedLength}},{key:"running",get:function(){return this._running},set:function(e){this._running=e}}],[{key:"isSupported",value:function(){return!("undefined"==typeof fetch)}}]),n}(P);var Gn=function(e){L(i,e);var t=M(i);function i(){var e;return X(this,i),G(R(e=t.call(this)),"_xhr",null),G(R(e),"_aborted",!1),G(R(e),"_timeoutTimer",null),G(R(e),"_range",null),G(R(e),"_receivedLength",0),G(R(e),"_url",null),G(R(e),"_onProgress",null),G(R(e),"_index",-1),G(R(e),"_headers",null),G(R(e),"_currentChunkSizeKB",384),G(R(e),"_timeout",null),G(R(e),"_xhr",null),G(R(e),"_withCredentials",null),G(R(e),"_startTime",-1),G(R(e),"_loadCompleteResolve",null),G(R(e),"_loadCompleteReject",null),G(R(e),"_runing",!1),G(R(e),"_logger",!1),G(R(e),"_vid",""),G(R(e),"_responseType",void 0),G(R(e),"_credentials",void 0),G(R(e),"_method",void 0),G(R(e),"_transformResponse",void 0),G(R(e),"_firstRtt",void 0),G(R(e),"_onCancel",null),G(R(e),"_priOptions",null),G(R(e),"_dynamicTimeoutIns",null),e}return v(i,[{key:"load",value:function(e){var t=this;clearTimeout(this._timeoutTimer),this._logger=e.logger,this._range=e.range,this._onProgress=e.onProgress,this._index=e.index,this._headers=e.headers,this._withCredentials="include"===e.credentials||"same-origin"===e.credentials,this._body=e.body||null,e.method&&(this._method=e.method),this._timeout=e.timeout||null,this._dynamicTimeoutIns=e.dynamicTimeoutIns,this._runing=!0,this._vid=e.vid||e.url,this._responseType=e.responseType,this._dynamicTimeoutIns=e.dynamicTimeoutIns,this._firstRtt=-1,this._onTimeout=e.onTimeout,this._onCancel=e.onCancel,this._request=e.request,this._priOptions=e.priOptions||{},this._logger.debug("【xhrLoader task】, range",this._range),this._url=yn(e.url,e.params);var i=Date.now();return new Promise((function(e,i){t._loadCompleteResolve=e,t._loadCompleteReject=i,t._startLoad()})).catch((function(e){if(clearTimeout(t._timeoutTimer),t._runing=!1,!t._aborted||"timeout"===e.message)throw(e=e instanceof un?e:new un(t._url,t._request)).startTime=i,e.endTime=Date.now(),e.options={index:t._index,vid:t._vid,priOptions:t._priOptions},e}))}},{key:"_startLoad",value:function(){var e=null;if(this._responseType===dn&&this._range&&this._range.length>1)if(this._onProgress){this._firstRtt=-1;var t=1024*this._currentChunkSizeKB,i=this._range[0]+this._receivedLength,n=this._range[1];t<this._range[1]-i&&(n=i+t),e=[i,n],this._logger.debug("[xhr_loader->],tast :",this._range,", SubRange, ",e)}else e=this._range,this._logger.debug("[xhr_loader->],tast :",this._range,", allRange, ",e);this._internalOpen(e)}},{key:"_internalOpen",value:function(e){var t=this;try{this._startTime=Date.now();var i=this._xhr=new XMLHttpRequest;i.open(this._method||"GET",this._url,!0),i.responseType=this._responseType;var n=this._dynamicTimeoutIns&&"function"==typeof this._dynamicTimeoutIns.getTimeout?this._dynamicTimeoutIns.getTimeout(this._timeout):this._timeout;n&&(i.timeout=n,this.curTimeout=n),this._logger.debug("[dytimeout] xhr set timeout",n),i.withCredentials=this._withCredentials,i.onload=this._onLoad.bind(this),i.onreadystatechange=this._onReadyStatechange.bind(this),i.onerror=function(e){var i,n,a;t._running=!1;var s=new un(t._url,t._request,null==e||null===(i=e.currentTarget)||void 0===i?void 0:i.response,"xhr.onerror.status:"+(null==e||null===(n=e.currentTarget)||void 0===n?void 0:n.status)+",statusText,"+(null==e||null===(a=e.currentTarget)||void 0===a?void 0:a.statusText));s.options={index:t._index,range:t._range,vid:t._vid,priOptions:t._priOptions},t._loadCompleteReject(s)},i.ontimeout=function(e){t._dynamicTimeoutIns&&"function"==typeof t._dynamicTimeoutIns.update&&(t._logger.debug("[dytimeout] xhr timeout update rtt,",5*i.timeout),t._dynamicTimeoutIns.update(5*i.timeout)),t.cancel();var n=new un(t._url,t._request,{status:408},"timeout");n.isTimeout=!0,t._onTimeout&&t._onTimeout(n,{index:t._index,range:t._range,vid:t._vid,priOptions:t._priOptions}),n.options={index:t._index,range:t._range,vid:t._vid,priOptions:t._priOptions},t._loadCompleteReject(n)};var a=this._headers||{},s=pn(e);s&&(a.Range=s),a&&Object.keys(a).forEach((function(e){i.setRequestHeader(e,a[e])})),this._logger.debug("[xhr.send->] tast,",this._range,",load sub range, ",e,",[dytimeout],",n),i.send(this._body)}catch(r){r.options={index:this._index,range:e,vid:this._vid,priOptions:this._priOptions},this._loadCompleteReject(r)}}},{key:"_onReadyStatechange",value:function(e){2===e.target.readyState&&(this._firstRtt<0&&(this._firstRtt=Date.now(),this._priOptions.rtt=this._firstRtt-this._startTime),this._dynamicTimeoutIns&&"function"==typeof this._dynamicTimeoutIns.update&&(this._logger.debug("[dytimeout] xhr update rtt,",this._priOptions.rtt),this._dynamicTimeoutIns.update(this._priOptions.rtt)))}},{key:"_onLoad",value:function(e){var t,i=e.target.status;if(i<200||i>299){var n=new un(this._url,null,p(p({},e.target.response),{},{status:i}),"bad response,status:"+i);return n.options={index:this._index,range:this._range,vid:this._vid,priOptions:this._priOptions},this._loadCompleteReject(n)}var a,s=null,r=!1,l=(null===(t=this._range)||void 0===t?void 0:t.length)>0?this._range[0]:0;if(this._responseType===dn){var d,o=new Uint8Array(e.target.response);if(a=l+this._receivedLength,o&&o.byteLength>0){this._receivedLength+=o.byteLength;var c=Date.now()-this._startTime,u=fn(this._receivedLength,c);this.emit(Xn,{speed:u,len:this._receivedLength,time:c,vid:this._vid,index:this._index,range:[a,l+this._receivedLength],priOptions:this._priOptions})}s=o,r=!((null===(d=this._range)||void 0===d?void 0:d.length)>1&&this._range[1]&&this._receivedLength<this._range[1]-this._range[0]),this._logger.debug("[xhr load done->], tast :",this._range,", start",a,"end ",l+this._receivedLength,",dataLen,",o?o.byteLength:0,",receivedLength",this._receivedLength,",index,",this._index,", done,",r)}else r=!0,s=e.target.response;var m={ok:i>=200&&i<300,status:i,statusText:this._xhr.statusText,url:this._xhr.responseURL,headers:this._getHeaders(this._xhr),body:this._xhr.response};this._transformResponse&&(m=this._transformResponse(m,this._url)||m),this._onProgress&&this._onProgress(s,r,{index:this._index,vid:this._vid,range:[a,l+this._receivedLength],startTime:this._startTime,endTime:Date.now(),priOptions:this._priOptions},m),r?(this._runing=!1,this._loadCompleteResolve&&this._loadCompleteResolve(bn(this._onProgress?null:s,r,m,m.headers["content-length"],m.headers.age,this._startTime,this._firstRtt,this._index,this._range,this._vid,this._priOptions))):this._startLoad()}},{key:"cancel",value:function(){if(!this._aborted)return this._aborted=!0,this._runing=!1,w(x(i.prototype),"removeAllListeners",this).call(this),this._onCancel&&this._onCancel({index:this._index,range:this._range,vid:this._vid,priOptions:this._priOptions}),this._xhr?this._xhr.abort():void 0}},{key:"receiveLen",get:function(){return this._receivedLength}},{key:"running",get:function(){return this._running},set:function(e){this._running=e}},{key:"_getHeaders",value:function(e){var t,i={},n=N(e.getAllResponseHeaders().trim().split("\r\n"));try{for(n.s();!(t=n.n()).done;){var a=t.value.split(": ");i[a[0].toLowerCase()]=a.slice(1).join(": ")}}catch(s){n.e(s)}finally{n.f()}return i}}],[{key:"isSupported",value:function(){return"undefined"!=typeof XMLHttpRequest}}]),i}(P),Ln=["retry","retryDelay","onRetryError","transformError","changeUrlRetry"],xn=function(e){L(n,e);var t,i=M(n);function n(e,t){var a;return X(this,n),(a=i.call(this)).promise=Oi(),a.alive=!!t.onProgress,!t.logger&&(t.logger=new Ei("Loader")),a._loaderType=e,a._loader=e===rn&&"undefined"!=typeof fetch?new vn:new Gn,a._config=t,a._retryCount=0,a._retryTimer=null,a._canceled=!1,a._retryCheckFunc=t.retryCheckFunc,a._logger=t.logger,a._useUrlIdx=-1,a._isRetry=!1,a._retryType=0,a}return v(n,[{key:"exec",value:function(){var e=this,t=this._config,i=t.retry,n=t.retryDelay,a=t.onRetryError,s=t.transformError,r=t.changeUrlRetry,l=k(t,Ln),d=l.urlList||this._config.urlList||[],o=function(){var t=f(Z().mark((function t(){var c,u,m,h,p,y,b;return Z().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.prev=0,c=l,e._isRetry&&(e._changeUrl?(e._changeUrl=!1,e._retryType=2,null!=d&&d[e._useUrlIdx]&&(e._retryCount=0,c=Object.assign({},c,{url:d[e._useUrlIdx]}),e._logger.debug("[task],changeUrlRetry,urlIdx:",e._useUrlIdx,c.url))):(e._logger.debug("[task],originUrlRetry,urlIdx:",e._useUrlIdx,c.url),e._retryType=1)),t.next=5,e._loader.load(c);case 5:u=t.sent,e.promise.resolve(u),t.next=36;break;case 9:if(t.prev=9,t.t0=t.catch(0),e._loader.running=!1,e._logger.debug("[task request catch err]",t.t0),!e._canceled){t.next=15;break}return t.abrupt("return");case 15:if(t.t0.loaderType=e._loaderType,t.t0.retryCount=e._retryCount,m=t.t0,s&&(m=s(m)||m),a&&e._retryCount>0&&a(m,e._retryCount,{index:l.index,vid:l.vid,range:l.range,priOptions:l.priOptions}),e._retryCount++,h=!0,e._retryCheckFunc&&(h=e._retryCheckFunc(t.t0)),p=0,l.outChangeUrlRetry>0?p=l.outChangeUrlRetry:e._isRetry&&(1===p?p=1:2===p&&(p=2)),e._logger.debug("[task error],isRetry",e._isRetry,",outChangeUrlRetry,",l.outChangeUrlRetry,",retryType",p),e.emitNetErrorEvent(l.url,p,t.t0),!(h&&e._retryCount<=i)){t.next=34;break}return e._isRetry=!0,clearTimeout(e._retryTimer),e._logger.debug("[task request setTimeout],retry",e._retryCount,",retry range,",l.range),r&&e._useUrlIdx<(null==d?void 0:d.length)-1&&(e._useUrlIdx<0&&(y=new URL(l.url),b=y.hostname,e._useUrlIdx=d.findIndex((function(e){return e.indexOf(b)>=0}))),e._useUrlIdx++,e._changeUrl=!0,e._logger.debug("retry changeurl, urlIdx: ",e._useUrlIdx,",retry range,",l.range)),e._retryTimer=setTimeout(o,n),t.abrupt("return");case 34:e._isRetry=!1,e.promise.reject(m);case 36:case"end":return t.stop()}}),t,null,[[0,9]])})));return function(){return t.apply(this,arguments)}}();return o(),this.promise}},{key:"emitNetErrorEvent",value:function(e,t,i){var n,a=new URL(e);this.emit("networkError",{timeout:this._loader.curTimeout,retryType:t,url:e,domain:a.hostname,errCode:(null==i||null===(n=i.response)||void 0===n?void 0:n.status)||-1,message:null==i?void 0:i.message,isTimeout:null==i?void 0:i.isTimeout})}},{key:"cancel",value:(t=f(Z().mark((function e(){return Z().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return clearTimeout(this._retryTimer),this._canceled=!0,this._loader.running=!1,e.abrupt("return",this._loader.cancel());case 4:case"end":return e.stop()}}),e,this)}))),function(){return t.apply(this,arguments)})},{key:"running",get:function(){return this._loader&&this._loader.running}},{key:"loader",get:function(){return this._loader}}]),n}(P);function gn(){for(var e=arguments.length,t=new Array(e),i=0;i<e;i++)t[i]=arguments[i];if((t=t.filter(Boolean)).length<2)return t[0];var n=t.reduce((function(e,t){return e+t.byteLength}),0),a=Vn(n),s=0;return t.forEach((function(e){a.set(e,s),s+=e.byteLength})),a}function Vn(e){for(var t,i=0;i<10;)try{if((t=new Uint8Array(e))&&t.byteLength>0)break;i++}catch(n){if(!(i<10))throw new Error("new array failed final,".concat(null==n?void 0:n.message));i++}return t}function Sn(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;return new Promise((function(t){return setTimeout(t,e)}))}var Yn=function(e){L(n,e);var t,i=M(n);function n(e){var t;return X(this,n),G(R(t=i.call(this,e)),"type",rn),G(R(t),"_queue",[]),G(R(t),"_alive",[]),G(R(t),"_currentTask",null),G(R(t),"_finnalUrl",""),G(R(t),"_config",void 0),t._config=function(e){return p({loaderType:rn,retry:0,retryDelay:0,timeout:0,request:null,onTimeout:void 0,onProgress:void 0,onRetryError:void 0,transformRequest:void 0,transformResponse:void 0,transformError:void 0,responseType:on,range:void 0,url:"",params:void 0,method:"GET",headers:{},body:void 0,mode:void 0,credentials:void 0,cache:void 0,redirect:void 0,referrer:void 0,referrerPolicy:void 0,integrity:void 0,onProcessMinLen:0,processMaxGapTime:1/0},e)}(e),t._config.loaderType!==ln&&vn.isSupported()||(t.type=ln),t.log=e.logger,t}return v(n,[{key:"isFetch",value:function(){return this.type===rn}},{key:"load",value:function(e){var t=this,i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};"string"!=typeof e&&e?i=e:i.url=e||i.url||this._config.url,(i=Object.assign({},this._config,i)).params&&(i.params=Object.assign({},i.params)),i.headers&&hn(i.headers)&&(i.headers=Object.assign({},i.headers)),i.body&&hn(i.body)&&(i.body=Object.assign({},i.body)),i.transformRequest&&(i=i.transformRequest(i)||i),i.logger=this.log,i.dynamicTimeoutIns=this._config.dynamicTimeoutIns;var n=new xn(this.type,i);return n.loader.on(Xn,(function(e){t.emit(Xn,e)})),n.on("networkError",(function(e){t.emit("networkError",e)})),this._queue.push(n),1!==this._queue.length||this._currentTask&&this._currentTask.running||this._processTask(),n.promise}},{key:"cancel",value:(t=f(Z().mark((function e(){var t;return Z().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return t=this._queue.map((function(e){return e.cancel()})).concat(this._alive.map((function(e){return e.cancel()}))),this._currentTask&&t.push(this._currentTask.cancel()),this._queue=[],this._alive=[],e.next=6,Promise.all(t);case 6:return e.next=8,Sn();case 8:case"end":return e.stop()}}),e,this)}))),function(){return t.apply(this,arguments)})},{key:"_processTask",value:function(){var e=this;if(this._currentTask=this._queue.shift(),this._currentTask){this._currentTask.alive&&this._alive.push(this._currentTask);var t=this._currentTask.exec().catch((function(e){}));t&&"function"==typeof t.finally&&t.finally((function(){var t,i;null!==(t=e._currentTask)&&void 0!==t&&t.alive&&(null===(i=e._alive)||void 0===i?void 0:i.length)>0&&(e._alive=e._alive.filter((function(t){return t&&t!==e._currentTask}))),e._processTask()}))}}}],[{key:"isFetchSupport",value:function(){return vn.isSupported()}}]),n}(P),kn={416:Ji[zi.NETWROK_RANGE_NOT_SATISFIABLE],403:Ji[zi.NETWORK_FORBIDDEN],404:Ji[zi.NETWORK_NOTFOUND],timeout:Ji[zi.NETWORK_TIMEOUT],"4xx":"".concat(Ji[zi.NETWORK],"4XX"),"5xx":"".concat(Ji[zi.NETWORK],"5XX"),networkError:Ji[zi.NETWORK],contentError:"".concat(Ji[zi.NETWORK],"contentError"),mse:Ji[zi.MEDIA][zi.SUB_TYPES.MSE_OTHER],mseOpen:Ji[zi.MEDIA][zi.SUB_TYPES.MSE_ADD_SB],mseAppend:Ji[zi.MEDIA][zi.SUB_TYPES.MSE_APPEND_BUFFER],mse_hijack:Ji[zi.MEDIA][zi.SUB_TYPES.MSE_HIJACK],eme_hijack:Ji[zi.MEDIA][zi.SUB_TYPES.EME_HIJACK],metaError:Ji[zi.DEMUX][zi.SUB_TYPES.MP4],muxError:Ji[zi.REMUX][zi.SUB_TYPES.FMP4],other:Ji[zi.OTHER],waitTimeout:Ji[zi.RUNTIME][zi.SUB_TYPES.BUFFERBREAK_ERROR],waitTimeoutWithHidden:Ji[zi.RUNTIME][zi.SUB_TYPES.WAITING_TIMEOUT_ERROR],drm:Ji[zi.DRM][zi.SUB_TYPES.LICENSE]},Rn=zi;var Tn=v((function e(t,i,n){X(this,e);var a=0,s=0;n&&n.range&&n.range.length>1&&(a=n.range[0],s=n.range[1]);var r=function(e){return kn[e]||e}(i);return{errorCode:r,errorType:t,errorMessage:(null==n?void 0:n.httpText)||(null==n?void 0:n.message),url:null==n?void 0:n.url,httpCode:i,version:Fi,rangeStart:a,rangeEnd:s,ext:n,mediaError:{code:r,message:(null==n?void 0:n.httpText)||(null==n?void 0:n.message)}}})),Mn=v((function e(t,i,n){return X(this,e),{errorCode:i,errorType:t,version:Fi,errorMessage:n.msg,ext:n,mediaError:{code:i,message:n.msg}}})),In={};In.nowTime=function(){try{return parseInt(performance.now(),10)}catch(e){return(new Date).getTime()}},In.concatData=function(e,t){var i=[],n=0;e&&i.push(e),t&&i.push(t),i.every((function(e){return e&&(n+=e.byteLength),!0}));var a=new Uint8Array(n),s=0;return i.every((function(e){return e&&(a.set(e,s),s+=e.byteLength),!0})),a};var wn=v((function e(t,i){X(this,e),this.type="file",this.message=t,this.data=i})),Kn=function(){function e(){X(this,e),G(this,"_data",Object.create(null))}return v(e,[{key:"set",value:function(e,t){this._data[e]=t}},{key:"get",value:function(e){return this._data[e]}},{key:"clear",value:function(){this._data=Object.create(null)}}]),e}(),Cn=function(){function e(){X(this,e),this.frames=[],this.dur=0,this.minPts=Number.MAX_VALUE,this.maxPts=0}return v(e,[{key:"appendFrame",value:function(e){this.frames.push(e),this.dur+=e.duration}},{key:"calMinMaxPts",value:function(e){e.pts<this.minPts&&(this.minPts=e.pts);var t=e.pts+e.duration;t>this.maxPts&&(this.maxPts=t)}}]),e}();function Hn(e,t){var i=e.trak;if(i&&i.length){var n=i.find((function(e){var t,i;return"vide"===(null===(t=e.mdia)||void 0===t||null===(i=t.hdlr)||void 0===i?void 0:i.handlerType)})),a=i.find((function(e){var t,i;return"soun"===(null===(t=e.mdia)||void 0===t||null===(i=t.hdlr)||void 0===i?void 0:i.handlerType)}));if(n||a){var s=[],r=[];if(t){var l=[],d=0,o=t.start+t.size;t.references.forEach((function(e,i){l.push({index:i,startTime:d,endTime:d+e.subsegment_duration/t.timescale,duration:e.subsegment_duration/t.timescale,range:[o,o+e.referenced_size],frames:[]}),d+=e.subsegment_duration/t.timescale,o+=e.referenced_size})),s=l,r=l}else{var c,u,m=function(t){return t?[{index:0,startTime:0,endTime:t.duration/t.timescale,duration:t.duration/t.timescale,range:[e.start+e.size,""],frames:[]}]:[]};r=m(e.mvhd.duration?e.mvhd:null===(c=n.mdia)||void 0===c?void 0:c.mdhd),s=m(e.mvhd.duration?e.mvhd:null===(u=a.mdia)||void 0===u?void 0:u.mdhd)}return{videoSegments:r,audioSegments:s}}}}function Fn(){var e=!0,t=navigator.userAgent||"";if(/Firefox\//i.test(t))return!1;if(/Chrome/gi.test(t)&&!/Edge\//gi.test(t)){var i=t.match(/Chrome\/(\d+)/i),n=i?parseInt(i[1],10):0;e=!!n&&n>=75}return e}function Nn(e,t){var i=t.segmentDuration,n=e.trak;if(n&&n.length){var a=n.find((function(e){var t,i;return"vide"===(null===(t=e.mdia)||void 0===t||null===(i=t.hdlr)||void 0===i?void 0:i.handlerType)})),s=n.find((function(e){var t,i;return"soun"===(null===(t=e.mdia)||void 0===t||null===(i=t.hdlr)||void 0===i?void 0:i.handlerType)}));if(a||s){var r,l=[],d=[];return a&&(r=(l=Un("video",a,i,t)).map((function(e){return e.duration}))),s&&(d=Un("audio",s,i,t,r,l)),{videoSegments:l,audioSegments:d}}}}function Un(e,t,i,n){var a,s,r,l,d,o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:[],c=arguments.length>5?arguments[5]:void 0,u=n.fixEditListOffset,m=n.fixEditListOffsetThreshold,h=n.audioGroupingStrategy,p=n.memoryOpt,Z=null===(a=t.mdia)||void 0===a||null===(s=a.minf)||void 0===s?void 0:s.stbl;if(!Z)return[];var y=null===(r=t.mdia.mdhd)||void 0===r?void 0:r.timescale,b=Z.stts,f=Z.stsc,X=Z.stsz,W=Z.stco,v=Z.stss,G=Z.ctts;if(!(y&&b&&f&&X&&W&&("video"!==e||v)))return[];var L=0,x=null===(l=t.edts)||void 0===l||null===(d=l.elst)||void 0===d?void 0:d.entries;if(u&&Fn()&&Array.isArray(x)&&x.length>0){var g=x[0].media_time,V=m?m*y:5*y;g>0&&g<V&&(L=g)}var S,Y,k=[],R=[],T=[],M=[],I=[],w=f.entries,K=W.entries,H=X.entrySizes,F=null==v?void 0:v.entries,N=null==G?void 0:G.entries,U=[],z={};p||(N&&N.forEach((function(e){for(var t=e.count,i=e.offset,n=0;n<t;n++)U.push(i)})),F&&F.forEach((function(e){z[e-1]=!0})));var J,P=0,j=0,D=0,E=0,B=w.length>0?w[0].samplesPerChunk:0,Q=w.length>1&&w[1]?w[1].firstChunk-1:1/0,_=0,O=-1,A=!1,q={};(null==N?void 0:N.length)>0&&L>0&&(_-=L,A=!0),t.editListApplied=A,p&&(J=null==F?void 0:F.shift()),b.entries.forEach((function(e){var t=e.count,i=e.delta;Y=i;for(var n=0;n<t;n++){if(S={dts:_,duration:Y,size:H[P]||X.sampleSize,offset:K[j]+E,index:P},N&&(p?(zn(N,P,q),S.pts=_+((null==q?void 0:q.offset)||0)):U&&P<U.length&&(S.pts=_+U[P])),0===L&&0===P&&(S.pts=0),void 0===S.pts&&(S.pts=S.dts),F){if(p?P+1===J&&(S.keyframe=!0,J=F.shift()):S.keyframe=z[P],S.keyframe)if(O++,p){var a=new Cn;a.appendFrame(S),R.push(a)}else R.push([S]),T.push(S.duration);else p?R[R.length-1].appendFrame(S):(R[R.length-1].push(S),T[R.length-1]+=S.duration);S.gopId=O,p&&R[R.length-1].calMinMaxPts(S)}if(!p)if(S.keyframe?M[M.length]=S.pts:S.pts<M[R.length-1]&&(M[R.length-1]=S.pts),S.keyframe)I[I.length]=S.index;else if(R.length>0&&void 0!==I[R.length-1]){var s,r=null===(s=k[I[R.length-1]])||void 0===s?void 0:s.pts;void 0!==r&&S.pts>r&&(I[R.length-1]=S.index)}k[k.length]=S,_+=i,++P<B?E+=S.size:(j++,E=0,j>=Q&&(D++,Q=w[D+1]?w[D+1].firstChunk-1:1/0),B+=w[D].samplesPerChunk)}}));var $=k.length;if(!$||v&&!k[0].keyframe)return[];var ee,te,ie=[],ne=[],ae=0,se=0,re=0,le=0,de=function(e,t,i){(ee=ne[ne.length-1],p?(re=(null==R?void 0:R.length)>0?R[t].minPts:ne[0].pts,le=(null==R?void 0:R.length)>0?R[i].maxPts:ee.pts+ee.duration):(re=M[t],te=k[I[i]],le=te.pts+te.duration),0===ie.length)&&(e=(le-re)/y);ie.push({index:ie.length,startTime:re/y,endTime:le/y,duration:e,range:[ne[0].offset,ee.offset+ee.size-1],frames:ne}),1!==h&&(ae=0),ne=[]},oe=0;if(v)for(var ce=i*y,ue=0,me=R.length;ue<me;ue++){var he,pe;if(p)ae+=R[ue].dur,(he=ne).push.apply(he,C(R[ue].frames));else ae+=T[ue],(pe=ne).push.apply(pe,C(R[ue]));ue+1<me?(0===ue||ae>ce)&&(de(ae/y,oe,ue),ae=0,oe=ue+1):(de(ae/y,oe,ue),ae=0,oe=ue+1)}else{p||(M=[],I=[]);var Ze=o[0]||i;if(1===h)for(var ye,be=0;be<$;be++){var fe=k[be],Xe=k[be+1],We=be===$-1;ne.push(fe),ae+=fe.duration;var ve=ye||ae/y;ye=(Xe?ae+Xe.duration:0)/y,(We||(c[ie.length]?ye>c[ie.length].endTime:ye-ne[0].pts/y>=Ze))&&(p||(M.push(ne[0].pts),I.push(ne[ne.length-1].index)),de(ve,ie.length,ie.length),Ze=o[ie.length]||i)}else for(var Ge,Le=0;Le<$;Le++){var xe=k[Le],ge=k[Le+1],Ve=Le===$-1;ne.push(xe),ae+=xe.duration;var Se=Ge||ae/y;Ge=(ge?ae+ge.duration:0)/y,(Ve||Ge+se>=Ze)&&(se+=2===h?ae/y-Ze:Ge-Ze,p||(M.push(ne[0].pts),I.push(ne[ne.length-1].index)),de(Se,ie.length,ie.length),Ze=o[ie.length]||i)}}return ie}function zn(e,t,i){i.offset=0;var n=(null==i?void 0:i.beforeFrameNum)||0,a=(null==i?void 0:i.usedCttsIdx)||0;if(!e||(null==e?void 0:e.length)<=0||(null==i?void 0:i.usedCttsIdx)>=e.length)i.offset=0,i.usedCttsIdx=a,i.beforeFrameNum=n;else{var s=e[a];if(t<n+((null==s?void 0:s.count)||1))i.offset=(null==s?void 0:s.offset)||0;else{var r=e[++a];r?(i.offset=r.offset||0,i.beforeFrameNum=n+s.count):(i.offset=0,i.beforeFrameNum=n+1),i.usedCttsIdx=a}}}function Jn(e,t){var i="",n="",a=0,s=0,r=0,l=0,d=0,o=0,c=0;e.mvhd&&(d=e.mvhd.duration/e.mvhd.timescale);var u,m=e.trak;if(m){var h,p,Z,y,b,f,X,W,v,G,L,x,g,V,S,Y,k,R=m.find((function(e){var t,i;return"vide"===(null===(t=e.mdia)||void 0===t||null===(i=t.hdlr)||void 0===i?void 0:i.handlerType)})),T=m.find((function(e){var t,i;return"soun"===(null===(t=e.mdia)||void 0===t||null===(i=t.hdlr)||void 0===i?void 0:i.handlerType)})),M=null;if(R)if(M=null===(p=R.mdia)||void 0===p||null===(Z=p.minf)||void 0===Z||null===(y=Z.stbl)||void 0===y?void 0:y.stsd.entries[0])if(a=M.width,s=M.height,o=null===(b=R.mdia)||void 0===b||null===(f=b.mdhd)||void 0===f?void 0:f.timescale,i=null===(X=M.avcC||M.hvcC||M.av1C||M.vvcC)||void 0===X?void 0:X.codec,"encv"===M.type)h=null===(W=M.sinf)||void 0===W||null===(v=W.schi)||void 0===v?void 0:v.tenc.default_KID;if(T)if(M=null===(G=T.mdia)||void 0===G||null===(L=G.minf)||void 0===L||null===(x=L.stbl)||void 0===x?void 0:x.stsd.entries[0])if(r=M.channelCount,l=("mp4a"===(u=M).type?u.sampleRate>0?u.sampleRate:u.esds.sampleRate:u.sampleRate)||0,n=null===(g=M.esds)||void 0===g?void 0:g.codec,c=null===(V=T.mdia)||void 0===V||null===(S=V.mdhd)||void 0===S?void 0:S.timescale,"enca"===M.type)h=h||(null===(Y=M.sinf)||void 0===Y||null===(k=Y.schi)||void 0===k?void 0:k.tenc.default_KID);return{kid:h?h.join(""):null,videoCodec:i,audioCodec:n,width:a,height:s,videoTimescale:o,audioChannelCount:r,audioSampleRate:l,duration:d,audioTimescale:c,moov:e,isFragmentMP4:t}}}function Pn(e){return"number"==typeof e&&!Number.isNaN(e)}function jn(e){if(!e)return!1;var t=e.audioSegments,i=e.videoSegments,n=!i||0===i.length,a=!t||0===t.length;return!n||!a}var Dn=["vid","cache"],En=function(e){L(h,e);var t,i,n,a,s,r,l,d,o,c,u,m=M(h);function h(e){var t,i;X(this,h),G(R(t=m.call(this)),"vid",""),G(R(t),"url",""),G(R(t),"meta",{}),G(R(t),"downloadInfo",[]),G(R(t),"videoSegments",[]),G(R(t),"audioSegments",[]),G(R(t),"cache",null),G(R(t),"_currentSegmentIndex",-1),G(R(t),"_currentLoadingSegmentIndex",-1),G(R(t),"buffer",void 0),G(R(t),"bufferDataLen",0),G(R(t),"_error",void 0),G(R(t),"_transformError",(function(e){return e})),t._config=("boolean"!=typeof(i=e).fixEditListOffset&&delete i.fixEditListOffset,p({vid:"",moovEnd:8e4,segmentDuration:2,maxDownloadInfoSize:30,responseType:"arraybuffer",fixEditListOffset:!0,cache:null},i));var n=t._config,a=n.vid,s=n.cache,r=k(n,Dn);return t.cache=s||new Kn,t.vid=a||r.url,t.url=r.url,r.transformError=t._transformError,t.logger=new Ei("MP4Loader_"+t.vid),e.openLog&&Ei.enable(),r.logger=t.logger,t.filesize=0,t._loader=new Yn(r),t._loader.on(Xn,(function(e){t.emit(Xn,e)})),t._loader.on("networkError",(function(e){t.emit("networkError",e)})),t}return v(h,[{key:"isMetaLoaded",get:function(){return this.videoSegments.length||this.audioSegments.length}},{key:"setCurrentSegment",value:function(e){Pn(e)&&(this._currentSegmentIndex=e)}},{key:"isLastSegment",value:function(e){var t,i;return!!Pn(e)&&e>=((null===(t=this.videoSegments[this.videoSegments.length-1])||void 0===t?void 0:t.index)||(null===(i=this.audioSegments[this.audioSegments.length-1])||void 0===i?void 0:i.index)||0)}},{key:"isSegmentLoading",value:function(e){return e===this._currentLoadingSegmentIndex}},{key:"changeUrl",value:(u=f(Z().mark((function e(t){var i,n,a,s=arguments;return Z().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return i=s.length>1&&void 0!==s[1]?s[1]:t,n=s.length>2?s[2]:void 0,a=s.length>3?s[3]:void 0,e.next=5,this.reset(a);case 5:t&&(this.url=t),i&&(this.vid=i),n&&(this._config.moovEnd=n);case 8:case"end":return e.stop()}}),e,this)}))),function(e){return u.apply(this,arguments)})},{key:"getOrLoadMeta",value:(c=f(Z().mark((function e(t){return Z().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(this.isMetaLoaded){e.next=3;break}return e.next=3,this.loadMeta(t);case 3:return e.abrupt("return",this.meta);case 4:case"end":return e.stop()}}),e,this)}))),function(e){return c.apply(this,arguments)})},{key:"newBufferArray",value:function(e,t){var i;if(this.buffer){if(t||(null===(i=this.buffer)||void 0===i?void 0:i.byteLength)<e){var n,a=this.buffer.subarray(0,this.bufferDataLen),s=Vn(((null===(n=this.buffer)||void 0===n?void 0:n.byteLength)||0)+e);s.set(a,0),delete this.buffer,this.buffer=s}}else this.buffer=Vn(e),this.bufferDataLen=0}},{key:"loadMetaProcess",value:(o=f(Z().mark((function e(t,i,n){var a,s,r,l,d,o,c=this,u=arguments;return Z().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(s=K(i,2),r=s[0],l=s[1],d=u.length>3&&void 0!==u[3]?u[3]:{},this._error=!1,this.filesize=0,this.logger.debug("[loadMetaProcess start], range,",[r,l]),null!==(a=this._config)&&void 0!==a&&a.memoryOpt&&(!this.buffer||null!=d&&d.isExp))try{this.newBufferArray(l-r+1,null==d?void 0:d.isExp)}catch(m){n(null,!0,{},new wn(null==m?void 0:m.message),{})}return o=function(){var e=f(Z().mark((function e(i,a,s,o){var u,m,h,p,y,b,X,W,v,G,L,x,g,V,S,Y,k,R,T,M;return Z().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!c.filesize&&null!=o&&o.headers&&(h=null===(u=(m=o.headers).get)||void 0===u?void 0:u.call(m,"content-range"))&&(p=h.split("/"),Array.isArray(p)&&2===p.length&&(c.filesize=parseInt(p[1]),c.filesize>0&&l>c.filesize&&(l=c.filesize,c.logger.debug("[loadMetaProcess] moovEnd changed by content-range in header, [".concat(r,"-").concat(l,"]"))))),!a&&c.meta&&null!=s&&s.range&&s.range.length>0&&s.range[1]>=l&&(a=!0,c.logger.debug("[loadMetaProcess],data done,setstate true,[",r,l,"]")),a&&null!=s&&s.range&&s.range.length>0&&s.range[1]<l&&(a=!1,c.logger.debug("[loadMetaProcess],data not done,setstate false,[",r,l,"]")),c.logger.debug("[loadMetaProcess],task,[",r,l,"], range,",s.range,",dataLen,",i?i.byteLength:void 0,", state,",a,",err,",c._error),!c._error&&i&&i.byteLength>0&&n(i,a,s,null,o),!c.meta.moov&&!c._error){e.next=7;break}return e.abrupt("return");case 7:if(!(i&&i.byteLength>0)){e.next=60;break}e.prev=8,null!==(b=c._config)&&void 0!==b&&b.memoryOpt?(c.buffer.set(i,c.bufferDataLen),c.bufferDataLen+=(null==i?void 0:i.byteLength)||0,y=c.buffer.subarray(0,c.bufferDataLen)):(c.buffer=gn(c.buffer,i),y=c.buffer),e.next=16;break;case 12:return e.prev=12,e.t0=e.catch(8),n(null,a,s,new wn(null===e.t0||void 0===e.t0?void 0:e.t0.message),o),e.abrupt("return");case 16:if(X=ht.findBox(y,["moov"])[0]){e.next=31;break}if(W=ht.findBox(y,["mdat"])[0],!a){e.next=31;break}if(W){e.next=26;break}return c._error=!0,n(null,a,s,new wn("cannot find moov or mdat box"),o),e.abrupt("return");case 26:return v=W.start+W.size,e.next=29,c.loadData([v,""],t,d);case 29:(G=e.sent)&&(X=ht.findBox(G.data,["moov"])[0]);case 31:if(!(X&&a&&X.size>X.data.length)){e.next=35;break}return c.logger.debug("[loadMetaProcess],moov not all, range,",s.range[1],",dataLen,",c.bufferDataLen,", state,",a),e.next=35,c.loadMetaProcess(t,[s.range[1],X.start+X.size-1],n,{isExp:!0});case 35:if(!(X&&X.size<=X.data.length)||c.meta.moov){e.next=60;break}if(x=ht.moov(X)){e.next=41;break}return c._error=!0,n(null,a,s,new wn("cannot parse moov box"),o),e.abrupt("return");case 41:if(g=Nn(x,c._config),V=function(){var e=f(Z().mark((function e(i){var n,a;return Z().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!(n=ht.findBox(c.buffer,[i])[0])){e.next=11;break}if(!(n.size>n.data.length)){e.next=10;break}return e.next=5,c.loadData([n.start,n.start+n.size-1],t,d);case 5:if(!(a=e.sent)){e.next=8;break}return e.abrupt("return",ht.findBox(a.data,[i])[0]);case 8:e.next=11;break;case 10:return e.abrupt("return",n);case 11:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}(),S=!1,jn(g)){e.next=49;break}return e.next=47,V("sidx");case 47:(Y=e.sent)&&(k=ht.sidx(Y))&&(g=Hn(x,k),S=!0);case 49:if(jn(g)){e.next=53;break}return c._error=!0,n(null,a,s,new wn("cannot parse segments"),o),e.abrupt("return");case 53:c.meta=Jn(x,S),T=(R=g).videoSegments,M=R.audioSegments,c.videoSegments=T,c.audioSegments=M,null!==(L=c._config)&&void 0!==L&&L.memoryOpt&&(delete c.buffer,c.bufferDataLen=0),c.logger.debug("[loadMetaProcess] moov ok"),n(void 0,a,{meta:{meta:c.meta,videoSegments:T,audioSegments:M}},null,o);case 60:case"end":return e.stop()}}),e,null,[[8,12]])})));return function(t,i,n,a){return e.apply(this,arguments)}}(),e.next=9,this.loadData([r,l||this._config.moovEnd],t,p({onProgress:o},d));case 9:case"end":return e.stop()}}),e,this)}))),function(e,t,i){return o.apply(this,arguments)})},{key:"loadMeta",value:(d=f(Z().mark((function e(t,i){var n,a,s,r,l,d,o,c,u,m,h,p,y,b,X,W=this,v=arguments;return Z().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return n=v.length>2&&void 0!==v[2]?v[2]:{},a=[],this.logger.debug("[loadMeta start]"),e.next=5,this.loadData([0,i||this._config.moovEnd],t,n);case 5:if(s=e.sent){e.next=8;break}return e.abrupt("return");case 8:if(a.push(s),r=ht.findBox(s.data,["moov"])[0]){e.next=24;break}if(l=ht.findBox(s.data,["mdat"])[0]){e.next=14;break}throw new wn("cannot find moov or mdat box",s.data);case 14:return d=l.start+l.size,e.next=17,this.loadData([d],t,n);case 17:if(s=e.sent){e.next=20;break}return e.abrupt("return");case 20:if(a.push(s),r=ht.findBox(s.data,["moov"],d)[0]){e.next=24;break}throw new wn("cannot find moov box",s.data);case 24:if(!(r.size>r.data.length)){e.next=32;break}return e.next=27,this.loadData([s.data.length,r.start+r.size-1],t,n);case 27:if(s=e.sent){e.next=30;break}return e.abrupt("return");case 30:a.push(s),r.data=gn(r.data,s.data);case 32:if(o=ht.moov(r)){e.next=35;break}throw new wn("cannot parse moov box",r.data);case 35:if(jn(c=Nn(o,this._config))){e.next=42;break}return h=function(){var e=f(Z().mark((function e(i,s){var r,l;return Z().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(r=ht.findBox(i,[s])[0]){e.next=3;break}return e.abrupt("return");case 3:if(!(r.size>r.data.length)){e.next=10;break}return e.next=6,W.loadData([r.start,r.start+r.size-1],t,n);case 6:if(!(l=e.sent)){e.next=10;break}return a.push(l),e.abrupt("return",ht.findBox(l.data,[s],r.start)[0]);case 10:return e.abrupt("return",r);case 11:case"end":return e.stop()}}),e)})));return function(t,i){return e.apply(this,arguments)}}(),e.next=40,h(null===(m=a[0])||void 0===m?void 0:m.data,"sidx");case 40:(p=e.sent)&&(u=ht.sidx(p))&&(c=Hn(o,u));case 42:if(jn(c)){e.next=44;break}throw new wn("cannot parse segments",r.data);case 44:return this.meta=Jn(o,!!u),b=(y=c).videoSegments,X=y.audioSegments,this.videoSegments=b,this.audioSegments=X,delete this.buffer,this.bufferDataLen=0,this.logger.debug("[load moov end!!!!!]"),e.abrupt("return",{meta:this.meta,videoSegments:b,audioSegments:X,responses:a});case 52:case"end":return e.stop()}}),e,this)}))),function(e,t){return d.apply(this,arguments)})},{key:"loadCacheMeta",value:function(e,t){var i=Nn(e.moov,this._config),n=i.videoSegments,a=i.audioSegments;this.videoSegments=n,this.audioSegments=a,this._currentSegmentIndex=t,this.meta=e}},{key:"getSegmentByTime",value:function(e){var t,i;return this.videoSegments.length?(t=this.videoSegments.find((function(t){return t.startTime<=e&&t.endTime>e})))&&(i=this.audioSegments[t.index]):i=this.audioSegments.find((function(t){return t.startTime<=e&&t.endTime>e})),{video:t,audio:i}}},{key:"loadSegmentByTime",value:(l=f(Z().mark((function e(t,i){var n,a,s,r,l,d=arguments;return Z().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(n=!(d.length>2&&void 0!==d[2])||d[2],a=d.length>3&&void 0!==d[3]?d[3]:{},this.isMetaLoaded){e.next=5;break}return e.next=5,this.loadMeta(i);case 5:return s=this.getSegmentByTime(t),r=s.video,l=s.audio,e.abrupt("return",this._loadSegment(r,l,i,n,a));case 7:case"end":return e.stop()}}),e,this)}))),function(e,t){return l.apply(this,arguments)})},{key:"loadNextSegment",value:(r=f(Z().mark((function e(t){var i,n,a,s,r=arguments;return Z().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(i=!(r.length>1&&void 0!==r[1])||r[1],n=r.length>2&&void 0!==r[2]?r[2]:{},this.isMetaLoaded){e.next=5;break}return e.next=5,this.loadMeta();case 5:return a=this.videoSegments[this._currentSegmentIndex+1],s=this.audioSegments[this._currentSegmentIndex+1],e.abrupt("return",this._loadSegment(a,s,t,i,n));case 8:case"end":return e.stop()}}),e,this)}))),function(e){return r.apply(this,arguments)})},{key:"preload",value:(s=f(Z().mark((function e(t){var i,n,a,s,r,l,d,o=this;return Z().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(this.isMetaLoaded){e.next=3;break}return e.next=3,this.loadMeta(!0);case 3:if(t&&!(t<0)){e.next=5;break}return e.abrupt("return");case 5:if(i=this.getSegmentByTime(t),n=i.video,a=i.audio,s=Math.max((null==n?void 0:n.index)||0,(null==a?void 0:a.index)||0)){e.next=9;break}return e.abrupt("return");case 9:return r=this.videoSegments.slice(0,s),l=this.audioSegments.slice(0,s),d=function(){var e=f(Z().mark((function e(t){return Z().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!(t>s)){e.next=2;break}return e.abrupt("return");case 2:return e.next=4,o._loadSegment(r[t],l[t],!0,!1);case 4:return e.next=6,d(t+1);case 6:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}(),e.next=14,d(0);case 14:case"end":return e.stop()}}),e,this)}))),function(e){return s.apply(this,arguments)})},{key:"cancel",value:function(){return this._loader.cancel()}},{key:"reset",value:(a=f(Z().mark((function e(){var t,i=arguments;return Z().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(i.length>0&&void 0!==i[0]&&i[0]){e.next=5;break}return this.logger.debug("[MP4loader reset func call loader.cancel]"),e.next=5,this._loader.cancel();case 5:this.vid=this.url="",this.meta={},this.downloadInfo=[],this.videoSegments=[],this.audioSegments=[],this._currentSegmentIndex=-1,this._currentLoadingSegmentIndex=-1,null!==(t=this._config)&&void 0!==t&&t.memoryOpt&&(delete this.buffer,this.bufferDataLen=0);case 13:case"end":return e.stop()}}),e,this)}))),function(){return a.apply(this,arguments)})},{key:"destroy",value:(n=f(Z().mark((function e(){return Z().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.reset();case 2:this.cache.clear();case 3:case"end":return e.stop()}}),e,this)}))),function(){return n.apply(this,arguments)})},{key:"_loadSegment",value:(i=f(Z().mark((function e(t,i,n,a,s){var r,l;return Z().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(t||i){e.next=2;break}return e.abrupt("return");case 2:return r=(null==t?void 0:t.index)||(null==i?void 0:i.index)||0,this._currentLoadingSegmentIndex=r,e.prev=4,e.next=7,this.loadData([Math.min((null==t?void 0:t.range[0])||1/0,(null==i?void 0:i.range[0])||1/0),Math.max((null==t?void 0:t.range[1])||0,(null==i?void 0:i.range[1])||0)],n,s);case 7:l=e.sent;case 8:return e.prev=8,this._currentLoadingSegmentIndex=-1,e.finish(8);case 11:if(l){e.next=13;break}return e.abrupt("return");case 13:return a&&(this._currentSegmentIndex=r),l.video=t,l.audio=i,e.abrupt("return",l);case 17:case"end":return e.stop()}}),e,this,[[4,,8,11]])}))),function(e,t,n,a,s){return i.apply(this,arguments)})},{key:"loadData",value:(t=f(Z().mark((function e(t,i){var n,a,s,r,l,d=arguments;return Z().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return n=d.length>2&&void 0!==d[2]?d[2]:{},a=this._getCacheKey(t),e.next=4,this.cache.get(a);case 4:if(s=e.sent){e.next=12;break}return l=null!=n&&n.url?n.url:this.url,e.next=9,this._loader.load(l,p({range:t,vid:this.vid},n));case 9:r=e.sent,e.next=13;break;case 12:r={data:s,state:!0,options:{fromCache:!0,range:t,vid:this.vid}};case 13:if(r){e.next=15;break}return e.abrupt("return");case 15:return s||(r.data&&this.downloadInfo.push({startTime:r.startTime,endTime:r.endTime,size:r.data.byteLength,range:t}),this.downloadInfo&&this.downloadInfo.length>this._config.maxDownloadInfoSize&&(this.downloadInfo=this.downloadInfo.slice(-this._config.maxDownloadInfoSize))),e.abrupt("return",r);case 18:case"end":return e.stop()}}),e,this)}))),function(e,i){return t.apply(this,arguments)})},{key:"_getCacheKey",value:function(e){return(this.vid||this.url)+":"+e}}]),h}(P),Bn=function(){try{return"undefined"!=typeof localStorage&&"setItem"in window.localStorage&&!!window.localStorage.setItem}catch(e){return!1}}()&&!function(){var e="_localstorage_support_test";try{return window.localStorage.setItem(e,!0),window.localStorage.removeItem(e),!1}catch(t){return!0}}(),Qn=_n();function _n(){if(Bn)try{return!!window.localStorage.getItem("playerlog")}catch(e){return!1}return!1}function On(e){for(var t,i=arguments.length,n=new Array(i>1?i-1:0),a=1;a<i;a++)n[a-1]=arguments[a];Qn&&console.log&&(t=console).log.apply(t,["[logger]",In.nowTime(),e].concat(n))}!function(){if(Bn)try{return!!window.localStorage.getItem("playertestlog")}catch(e){return!1}}();var An="IWZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGUoZSx0KXt2YXIgcj1PYmplY3Qua2V5cyhlKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgYT1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO3QmJihhPWEuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLHQpLmVudW1lcmFibGV9KSkpLHIucHVzaC5hcHBseShyLGEpfXJldHVybiByfWZ1bmN0aW9uIHQodCl7Zm9yKHZhciByPTE7cjxhcmd1bWVudHMubGVuZ3RoO3IrKyl7dmFyIGE9bnVsbCE9YXJndW1lbnRzW3JdP2FyZ3VtZW50c1tyXTp7fTtyJTI/ZShPYmplY3QoYSksITApLmZvckVhY2goKGZ1bmN0aW9uKGUpe2kodCxlLGFbZV0pfSkpOk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHQsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoYSkpOmUoT2JqZWN0KGEpKS5mb3JFYWNoKChmdW5jdGlvbihlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoYSxlKSl9KSl9cmV0dXJuIHR9ZnVuY3Rpb24gcihlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIGEoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIGE9dFtyXTthLmVudW1lcmFibGU9YS5lbnVtZXJhYmxlfHwhMSxhLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gYSYmKGEud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLGsoYS5rZXkpLGEpfX1mdW5jdGlvbiBuKGUsdCxyKXtyZXR1cm4gdCYmYShlLnByb3RvdHlwZSx0KSxyJiZhKGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksZX1mdW5jdGlvbiBpKGUsdCxyKXtyZXR1cm4odD1rKHQpKWluIGU/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7dmFsdWU6cixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmVbdF09cixlfWZ1bmN0aW9uIHMoZSx0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksdCYmdShlLHQpfWZ1bmN0aW9uIG8oZSl7cmV0dXJuKG89T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSl9KShlKX1mdW5jdGlvbiB1KGUsdCl7cmV0dXJuKHU9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5fX3Byb3RvX189dCxlfSkoZSx0KX1mdW5jdGlvbiBjKCl7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiBSZWZsZWN0fHwhUmVmbGVjdC5jb25zdHJ1Y3QpcmV0dXJuITE7aWYoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSlyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgUHJveHkpcmV0dXJuITA7dHJ5e3JldHVybiBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbixbXSwoZnVuY3Rpb24oKXt9KSkpLCEwfWNhdGNoKGUpe3JldHVybiExfX1mdW5jdGlvbiBsKGUsdCxyKXtyZXR1cm4obD1jKCk/UmVmbGVjdC5jb25zdHJ1Y3QuYmluZCgpOmZ1bmN0aW9uKGUsdCxyKXt2YXIgYT1bbnVsbF07YS5wdXNoLmFwcGx5KGEsdCk7dmFyIG49bmV3KEZ1bmN0aW9uLmJpbmQuYXBwbHkoZSxhKSk7cmV0dXJuIHImJnUobixyLnByb3RvdHlwZSksbn0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX1mdW5jdGlvbiBkKGUsdCl7aWYodCYmKCJvYmplY3QiPT10eXBlb2YgdHx8ImZ1bmN0aW9uIj09dHlwZW9mIHQpKXJldHVybiB0O2lmKHZvaWQgMCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBlfShlKX1mdW5jdGlvbiBmKGUpe3ZhciB0PWMoKTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcixhPW8oZSk7aWYodCl7dmFyIG49byh0aGlzKS5jb25zdHJ1Y3RvcjtyPVJlZmxlY3QuY29uc3RydWN0KGEsYXJndW1lbnRzLG4pfWVsc2Ugcj1hLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZCh0aGlzLHIpfX1mdW5jdGlvbiBoKGUsdCl7Zm9yKDshT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsdCkmJm51bGwhPT0oZT1vKGUpKTspO3JldHVybiBlfWZ1bmN0aW9uIHYoKXtyZXR1cm4gdj0idW5kZWZpbmVkIiE9dHlwZW9mIFJlZmxlY3QmJlJlZmxlY3QuZ2V0P1JlZmxlY3QuZ2V0LmJpbmQoKTpmdW5jdGlvbihlLHQscil7dmFyIGE9aChlLHQpO2lmKGEpe3ZhciBuPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoYSx0KTtyZXR1cm4gbi5nZXQ/bi5nZXQuY2FsbChhcmd1bWVudHMubGVuZ3RoPDM/ZTpyKTpuLnZhbHVlfX0sdi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gcChlLHQpe3JldHVybiBmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBlfShlKXx8ZnVuY3Rpb24oZSx0KXt2YXIgcj1udWxsPT1lP251bGw6InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVsiQEBpdGVyYXRvciJdO2lmKG51bGwhPXIpe3ZhciBhLG4saSxzLG89W10sdT0hMCxjPSExO3RyeXtpZihpPShyPXIuY2FsbChlKSkubmV4dCwwPT09dCl7aWYoT2JqZWN0KHIpIT09cilyZXR1cm47dT0hMX1lbHNlIGZvcig7ISh1PShhPWkuY2FsbChyKSkuZG9uZSkmJihvLnB1c2goYS52YWx1ZSksby5sZW5ndGghPT10KTt1PSEwKTt9Y2F0Y2gobCl7Yz0hMCxuPWx9ZmluYWxseXt0cnl7aWYoIXUmJm51bGwhPXIucmV0dXJuJiYocz1yLnJldHVybigpLE9iamVjdChzKSE9PXMpKXJldHVybn1maW5hbGx5e2lmKGMpdGhyb3cgbn19cmV0dXJuIG99fShlLHQpfHxtKGUsdCl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKX1mdW5jdGlvbiB5KGUpe3JldHVybiBmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBnKGUpfShlKXx8ZnVuY3Rpb24oZSl7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJm51bGwhPWVbU3ltYm9sLml0ZXJhdG9yXXx8bnVsbCE9ZVsiQEBpdGVyYXRvciJdKXJldHVybiBBcnJheS5mcm9tKGUpfShlKXx8bShlKXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKX1mdW5jdGlvbiBtKGUsdCl7aWYoZSl7aWYoInN0cmluZyI9PXR5cGVvZiBlKXJldHVybiBnKGUsdCk7dmFyIHI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO3JldHVybiJPYmplY3QiPT09ciYmZS5jb25zdHJ1Y3RvciYmKHI9ZS5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PXJ8fCJTZXQiPT09cj9BcnJheS5mcm9tKGUpOiJBcmd1bWVudHMiPT09cnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qocik/ZyhlLHQpOnZvaWQgMH19ZnVuY3Rpb24gZyhlLHQpeyhudWxsPT10fHx0PmUubGVuZ3RoKSYmKHQ9ZS5sZW5ndGgpO2Zvcih2YXIgcj0wLGE9bmV3IEFycmF5KHQpO3I8dDtyKyspYVtyXT1lW3JdO3JldHVybiBhfWZ1bmN0aW9uIGsoZSl7dmFyIHQ9ZnVuY3Rpb24oZSx0KXtpZigib2JqZWN0IiE9dHlwZW9mIGV8fG51bGw9PT1lKXJldHVybiBlO3ZhciByPWVbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1yKXt2YXIgYT1yLmNhbGwoZSx0fHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgYSlyZXR1cm4gYTt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PXQ/U3RyaW5nOk51bWJlcikoZSl9KGUsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgdD90OlN0cmluZyh0KX12YXIgYj0idmlkZW8iLF89ImF1ZGlvIix4PSJtZXRhZGF0YSIsdz0iYXYxIixTPSJhdmMiLEI9ImhldmMiLFQ9InZ2Y0MiLEE9ImFhYyIsRT0iZzcxMTBhIixDPSJnNzExMG0iLEQ9Im9wdXMiLEk9Im1wMyIsVT0iTEFSR0VfQVZfU0hJRlQiLFA9IkxBUkdFX1ZJREVPX0dBUCIsTT0iTEFSR0VfVklERU9fR0FQX0JFVFdFRU5fQ0hVTksiLE89IkxBUkdFX0FVRElPX0dBUCIsUj0iQVVESU9fRklMTEVEIix6PSJBVURJT19EUk9QUEVEIixMPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3IodGhpcyxlKSxpKHRoaXMsImlkIiwxKSxpKHRoaXMsInR5cGUiLGIpLGkodGhpcywiY29kZWNUeXBlIixTKSxpKHRoaXMsInBpZCIsLTEpLGkodGhpcywiaHZjQyIsdm9pZCAwKSxpKHRoaXMsImNvZGVjIiwiIiksaSh0aGlzLCJ0aW1lc2NhbGUiLDApLGkodGhpcywiZm9ybWF0VGltZXNjYWxlIiwwKSxpKHRoaXMsInNlcXVlbmNlTnVtYmVyIiwwKSxpKHRoaXMsImJhc2VNZWRpYURlY29kZVRpbWUiLDApLGkodGhpcywiYmFzZUR0cyIsMCksaSh0aGlzLCJkdXJhdGlvbiIsMCksaSh0aGlzLCJ3YXJuaW5ncyIsW10pLGkodGhpcywic2FtcGxlcyIsW10pLGkodGhpcywicHBzIixbXSksaSh0aGlzLCJzcHMiLFtdKSxpKHRoaXMsInZwcyIsW10pLGkodGhpcywiZnBzTnVtIiwwKSxpKHRoaXMsImZwc0RlbiIsMCksaSh0aGlzLCJzYXJSYXRpbyIsW10pLGkodGhpcywid2lkdGgiLDApLGkodGhpcywiaGVpZ2h0IiwwKSxpKHRoaXMsIm5hbFVuaXRTaXplIiw0KSxpKHRoaXMsInByZXNlbnQiLCExKSxpKHRoaXMsImlzVmlkZW9FbmNyeXB0aW9uIiwhMSksaSh0aGlzLCJpc0F1ZGlvRW5jcnlwdGlvbiIsITEpLGkodGhpcywiaXNWaWRlbyIsITApLGkodGhpcywibGFzdEtleUZyYW1lRHRzIiwwKSxpKHRoaXMsImtpZCIsbnVsbCksaSh0aGlzLCJwc3NoIixudWxsKSxpKHRoaXMsImV4dCIsdm9pZCAwKX1yZXR1cm4gbihlLFt7a2V5OiJyZXNldCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnNlcXVlbmNlTnVtYmVyPXRoaXMud2lkdGg9dGhpcy5oZWlnaHQ9dGhpcy5mcHNEZW49dGhpcy5mcHNOdW09dGhpcy5kdXJhdGlvbj10aGlzLmJhc2VNZWRpYURlY29kZVRpbWU9dGhpcy50aW1lc2NhbGU9MCx0aGlzLmNvZGVjPSIiLHRoaXMucHJlc2VudD0hMSx0aGlzLnBpZD0tMSx0aGlzLnBwcz1bXSx0aGlzLnNwcz1bXSx0aGlzLnZwcz1bXSx0aGlzLnNhclJhdGlvPVtdLHRoaXMuc2FtcGxlcz1bXSx0aGlzLndhcm5pbmdzPVtdLHRoaXMuaHZjQz1udWxsfX0se2tleToiZmlyc3REdHMiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnNhbXBsZXMubGVuZ3RoP3RoaXMuc2FtcGxlc1swXS5kdHM6bnVsbH19LHtrZXk6ImZpcnN0UHRzIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zYW1wbGVzLmxlbmd0aD90aGlzLnNhbXBsZXNbMF0ucHRzOm51bGx9fSx7a2V5OiJzYW1wbGVzRHVyYXRpb24iLGdldDpmdW5jdGlvbigpe2lmKHRoaXMuc2FtcGxlcy5sZW5ndGg+MCl7dmFyIGU9dGhpcy5zYW1wbGVzWzBdLHQ9dGhpcy5zYW1wbGVzW3RoaXMuc2FtcGxlcy5sZW5ndGgtMV07cmV0dXJuIHQuZHRzLWUuZHRzK3QuZHVyYXRpb259cmV0dXJuIDB9fSx7a2V5OiJleGlzdCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4hIS9hdjAxLy50ZXN0KHRoaXMuY29kZWMpfHwhISh0aGlzLnBwcy5sZW5ndGgmJnRoaXMuc3BzLmxlbmd0aCYmdGhpcy5jb2RlYyl9fSx7a2V5OiJoYXNTYW1wbGUiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLnNhbXBsZXMubGVuZ3RofX0se2tleToiaXNFbmNyeXB0aW9uIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc1ZpZGVvRW5jcnlwdGlvbn19XSksZX0oKSxGPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3IodGhpcyxlKSxpKHRoaXMsImlkIiwyKSxpKHRoaXMsInR5cGUiLF8pLGkodGhpcywiY29kZWNUeXBlIixBKSxpKHRoaXMsInBpZCIsLTEpLGkodGhpcywiY29kZWMiLCIiKSxpKHRoaXMsImNvbnRhaW5lciIsIiIpLGkodGhpcywic2VxdWVuY2VOdW1iZXIiLDApLGkodGhpcywic2FtcGxlRHVyYXRpb24iLDApLGkodGhpcywidGltZXNjYWxlIiwwKSxpKHRoaXMsImZvcm1hdFRpbWVzY2FsZSIsMCksaSh0aGlzLCJiYXNlTWVkaWFEZWNvZGVUaW1lIiwwKSxpKHRoaXMsImR1cmF0aW9uIiwwKSxpKHRoaXMsIndhcm5pbmdzIixbXSksaSh0aGlzLCJzYW1wbGVzIixbXSksaSh0aGlzLCJiYXNlRHRzIiwwKSxpKHRoaXMsInNhbXBsZVNpemUiLDE2KSxpKHRoaXMsInNhbXBsZVJhdGUiLDApLGkodGhpcywiY2hhbm5lbENvdW50IiwwKSxpKHRoaXMsIm9iamVjdFR5cGUiLDApLGkodGhpcywic2FtcGxlUmF0ZUluZGV4IiwwKSxpKHRoaXMsInBhcnNlZENvZGVjIixudWxsKSxpKHRoaXMsImNvbmZpZyIsW10pLGkodGhpcywicHJlc2VudCIsITEpLGkodGhpcywiaXNWaWRlb0VuY3J5cHRpb24iLCExKSxpKHRoaXMsImlzQXVkaW9FbmNyeXB0aW9uIiwhMSksaSh0aGlzLCJraWQiLG51bGwpLGkodGhpcywiZXh0Iix2b2lkIDApfXJldHVybiBuKGUsW3trZXk6InJlc2V0Iix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuc2VxdWVuY2VOdW1iZXI9MCx0aGlzLnRpbWVzY2FsZT0wLHRoaXMuc2FtcGxlRHVyYXRpb249MCx0aGlzLnNhbXBsZVJhdGU9MCx0aGlzLmNoYW5uZWxDb3VudD0wLHRoaXMuYmFzZU1lZGlhRGVjb2RlVGltZT0wLHRoaXMucHJlc2VudD0hMSx0aGlzLnBpZD0tMSx0aGlzLmNvZGVjPSIiLHRoaXMuc2FtcGxlcz1bXSx0aGlzLmNvbmZpZz1bXSx0aGlzLndhcm5pbmdzPVtdfX0se2tleToiZXhpc3QiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuISghdGhpcy5zYW1wbGVSYXRlfHwhdGhpcy5jaGFubmVsQ291bnR8fCF0aGlzLmNvZGVjJiYhdGhpcy5jb250YWluZXJ8fHRoaXMuY29kZWNUeXBlIT09QSYmdGhpcy5jb2RlY1R5cGUhPT1FJiZ0aGlzLmNvZGVjVHlwZSE9PUMmJnRoaXMuY29kZWNUeXBlIT09RCYmdGhpcy5jb2RlY1R5cGUhPT1JKX19LHtrZXk6Imhhc1NhbXBsZSIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuc2FtcGxlcy5sZW5ndGh9fSx7a2V5OiJpc0VuY3J5cHRpb24iLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmlzQXVkaW9FbmNyeXB0aW9ufX0se2tleToiZmlyc3REdHMiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnNhbXBsZXMubGVuZ3RoP3RoaXMuc2FtcGxlc1swXS5kdHM6bnVsbH19LHtrZXk6ImZpcnN0UHRzIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zYW1wbGVzLmxlbmd0aD90aGlzLnNhbXBsZXNbMF0ucHRzOm51bGx9fSx7a2V5OiJzYW1wbGVzRHVyYXRpb24iLGdldDpmdW5jdGlvbigpe2lmKHRoaXMuc2FtcGxlcy5sZW5ndGg+MCl7dmFyIGU9dGhpcy5zYW1wbGVzWzBdLHQ9dGhpcy5zYW1wbGVzW3RoaXMuc2FtcGxlcy5sZW5ndGgtMV07cmV0dXJuIHQuZHRzLWUuZHRzK3QuZHVyYXRpb259cmV0dXJuIDB9fV0pLGV9KCksVj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxhLG4pe3IodGhpcyxlKSxpKHRoaXMsImZsYWciLHt9KSxpKHRoaXMsImtleWZyYW1lIiwhMSksaSh0aGlzLCJnb3BJZCIsMCksaSh0aGlzLCJkdXJhdGlvbiIsMCksaSh0aGlzLCJzaXplIiwwKSxpKHRoaXMsInVuaXRzIixbXSksaSh0aGlzLCJjaHJvbWFGb3JtYXQiLDQyMCksaSh0aGlzLCJzaWRlRGF0YSIsbnVsbCksdGhpcy5vcmlnaW5QdHM9dGhpcy5wdHM9dCx0aGlzLm9yaWdpbkR0cz10aGlzLmR0cz1hLG4mJih0aGlzLnVuaXRzPW4pfXJldHVybiBuKGUsW3trZXk6ImN0cyIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHRzLXRoaXMuZHRzfX0se2tleToic2V0VG9LZXlmcmFtZSIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmtleWZyYW1lPSEwLHRoaXMuZmxhZy5kZXBlbmRzT249Mix0aGlzLmZsYWcuaXNOb25TeW5jU2FtcGxlPTB9fV0pLGV9KCksTj1uKChmdW5jdGlvbiBlKHQsYSxuLHMpe3IodGhpcyxlKSxpKHRoaXMsImR1cmF0aW9uIiwxMDI0KSxpKHRoaXMsImZsYWciLHtkZXBlbmRzT246Mixpc05vblN5bmNTYW1wbGU6MH0pLGkodGhpcywia2V5ZnJhbWUiLCEwKSx0aGlzLm9yaWdpblB0cz10aGlzLnB0cz10aGlzLmR0cz10LHRoaXMuZGF0YT1hLHRoaXMuc2l6ZT1hLmJ5dGVMZW5ndGgsdGhpcy5zYW1wbGVPZmZzZXQ9cyxuJiYodGhpcy5kdXJhdGlvbj1uKX0pKSxqPW4oKGZ1bmN0aW9uIGUodCxhKXtyKHRoaXMsZSksaSh0aGlzLCJ0aW1lIiwwKSx0aGlzLmRhdGE9dCx0aGlzLm9yaWdpblB0cz10aGlzLnB0cz1hfSkpLEc9ZnVuY3Rpb24oZSl7cyhhLGUpO3ZhciB0PWYoYSk7ZnVuY3Rpb24gYSgpe3JldHVybiByKHRoaXMsYSksdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIG4oYSl9KGopLEs9ZnVuY3Rpb24oZSl7cyhhLGUpO3ZhciB0PWYoYSk7ZnVuY3Rpb24gYSgpe3JldHVybiByKHRoaXMsYSksdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIG4oYSl9KGopLEg9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7cih0aGlzLGUpLGkodGhpcywiaWQiLDMpLGkodGhpcywidHlwZSIseCksaSh0aGlzLCJ0aW1lc2NhbGUiLDApLGkodGhpcywiZmx2U2NyaXB0U2FtcGxlcyIsW10pLGkodGhpcywic2VpU2FtcGxlcyIsW10pfXJldHVybiBuKGUsW3trZXk6ImV4aXN0Iix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiEoIXRoaXMuZmx2U2NyaXB0U2FtcGxlcy5sZW5ndGgmJiF0aGlzLnNlaVNhbXBsZXMubGVuZ3RofHwhdGhpcy50aW1lc2NhbGUpfX0se2tleToicmVzZXQiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy50aW1lc2NhbGU9MCx0aGlzLmZsdlNjcmlwdFNhbXBsZXM9W10sdGhpcy5zZWlTYW1wbGVzPVtdfX0se2tleToiaGFzU2FtcGxlIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiEoIXRoaXMuZmx2U2NyaXB0U2FtcGxlcy5sZW5ndGgmJiF0aGlzLnNlaVNhbXBsZXMubGVuZ3RoKX19XSksZX0oKSxxPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0KXtpZihyKHRoaXMsZSksdGhpcy5fYml0c0F2YWlsYWJsZT0wLHRoaXMuX3dvcmQ9MCwhdCl0aHJvdyBuZXcgRXJyb3IoIkV4cEdvbG9tYiBkYXRhIHBhcmFtcyBpcyByZXF1aXJlZCIpO3RoaXMuX2RhdGE9dCx0aGlzLl9ieXRlc0F2YWlsYWJsZT10LmJ5dGVMZW5ndGgsdGhpcy5fYnl0ZXNBdmFpbGFibGUmJnRoaXMuX2xvYWRXb3JkKCl9cmV0dXJuIG4oZSxbe2tleToiYml0c0F2YWlsYWJsZSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2JpdHNBdmFpbGFibGV9fSx7a2V5OiJiaXRzUG9zIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiA4KnRoaXMuX2J5dGVzQXZhaWxhYmxlLXRoaXMuX2JpdHNBdmFpbGFibGV9fSx7a2V5OiJiaXRzTGVmdCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gOCp0aGlzLl9kYXRhLmxlbmd0aC10aGlzLmJpdHNQb3MoKX19LHtrZXk6ImJ5dGVBbGlnbmVkIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiAwPT09dGhpcy5iaXRzUG9zKCl8fHRoaXMuYml0c1BvcygpJTg9PTB9fSx7a2V5OiJfbG9hZFdvcmQiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fZGF0YS5ieXRlTGVuZ3RoLXRoaXMuX2J5dGVzQXZhaWxhYmxlLHQ9TWF0aC5taW4oNCx0aGlzLl9ieXRlc0F2YWlsYWJsZSk7aWYoMD09PXQpdGhyb3cgbmV3IEVycm9yKCJObyBieXRlcyBhdmFpbGFibGUiKTt2YXIgcj1uZXcgVWludDhBcnJheSg0KTtyLnNldCh0aGlzLl9kYXRhLnN1YmFycmF5KGUsZSt0KSksdGhpcy5fd29yZD1uZXcgRGF0YVZpZXcoci5idWZmZXIpLmdldFVpbnQzMigwKSx0aGlzLl9iaXRzQXZhaWxhYmxlPTgqdCx0aGlzLl9ieXRlc0F2YWlsYWJsZS09dH19LHtrZXk6InNraXBCaXRzIix2YWx1ZTpmdW5jdGlvbihlKXtpZih0aGlzLl9iaXRzQXZhaWxhYmxlPmUpdGhpcy5fd29yZDw8PWUsdGhpcy5fYml0c0F2YWlsYWJsZS09ZTtlbHNle2UtPXRoaXMuX2JpdHNBdmFpbGFibGU7dmFyIHQ9TWF0aC5mbG9vcihlLzgpO2UtPTgqdCx0aGlzLl9ieXRlc0F2YWlsYWJsZS09dCx0aGlzLl9sb2FkV29yZCgpLHRoaXMuX3dvcmQ8PD1lLHRoaXMuX2JpdHNBdmFpbGFibGUtPWV9fX0se2tleToicmVhZEJpdHMiLHZhbHVlOmZ1bmN0aW9uKGUpe2lmKGU+MzIpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgcmVhZCBtb3JlIHRoYW4gMzIgYml0cyIpO3ZhciB0PU1hdGgubWluKHRoaXMuX2JpdHNBdmFpbGFibGUsZSkscj10aGlzLl93b3JkPj4+MzItdDtyZXR1cm4gdGhpcy5fYml0c0F2YWlsYWJsZS09dCx0aGlzLl9iaXRzQXZhaWxhYmxlPjA/dGhpcy5fd29yZDw8PXQ6dGhpcy5fYnl0ZXNBdmFpbGFibGU+MCYmdGhpcy5fbG9hZFdvcmQoKSwodD1lLXQpPjAmJnRoaXMuX2JpdHNBdmFpbGFibGU/cjw8dHx0aGlzLnJlYWRCaXRzKHQpOnJ9fSx7a2V5OiJza2lwTFoiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU7Zm9yKGU9MDtlPHRoaXMuX2JpdHNBdmFpbGFibGU7KytlKWlmKDAhPSh0aGlzLl93b3JkJjIxNDc0ODM2NDg+Pj5lKSlyZXR1cm4gdGhpcy5fd29yZDw8PWUsdGhpcy5fYml0c0F2YWlsYWJsZS09ZSxlO3JldHVybiB0aGlzLl9sb2FkV29yZCgpLGUrdGhpcy5za2lwTFooKX19LHtrZXk6InNraXBVRUciLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5za2lwQml0cygxK3RoaXMuc2tpcExaKCkpfX0se2tleToicmVhZFVFRyIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnNraXBMWigpO3JldHVybiB0aGlzLnJlYWRCaXRzKGUrMSktMX19LHtrZXk6InJlYWRFRyIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnJlYWRVRUcoKTtyZXR1cm4gMSZlPzErZT4+PjE6LTEqKGU+Pj4xKX19LHtrZXk6InJlYWRCb29sIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5yZWFkQml0cygxKX19LHtrZXk6InJlYWRVQnl0ZSIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWFkQml0cyg4KX19LHtrZXk6InNraXBTY2FsaW5nTGlzdCIsdmFsdWU6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTgscj04LGE9MDthPGU7YSsrKTAhPT1yJiYocj0odCt0aGlzLnJlYWRFRygpKzI1NiklMjU2KSx0PTA9PT1yP3Q6cn19XSksZX0oKSxXPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LGEpe3IodGhpcyxlKSx0aGlzLm9mZnNldD0wLHRoaXMudmFsPXQsdGhpcy5zaXplPWF9cmV0dXJuIG4oZSxbe2tleToic2tpcCIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5vZmZzZXQrPWV9fSx7a2V5OiJyZWFkIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLnNpemUtdGhpcy5vZmZzZXQtZTtpZih0Pj0wKXt2YXIgcj0wLGE9MDtpZih0aGlzLm9mZnNldCs9ZSx0aGlzLnNpemU+MzEpe2Zvcig7YTxlO2ErKylyKz1NYXRoLnBvdygyLGEpO3JldHVybiB0aGlzLnZhbC9NYXRoLnBvdygyLHQpJnJ9Zm9yKDthPGU7YSsrKXIrPTE8PGE7cmV0dXJuIHRoaXMudmFsPj4+dCZyfXRocm93IG5ldyBFcnJvcigidGhlIG51bWJlciBvZiB0aGUgcmVhZCBvcGVyYXRpb24gZXhjZWVkcyB0aGUgdG90YWwgbGVuZ3RoIGxpbWl0IG9mIGJpdHMiKX19XSxbe2tleToiZnJvbUJ5dGUiLHZhbHVlOmZ1bmN0aW9uKHQscil7cmV0dXJuIG5ldyBlKHQucmVhZChyKSxyPDwzKX19XSksZX0oKSxZPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LGEsbil7cih0aGlzLGUpLHRoaXMuZHY9bmV3IERhdGFWaWV3KHQpLHRoaXMuc3RhcnQ9dGhpcy5vZmZzZXQ9YXx8dGhpcy5kdi5ieXRlT2Zmc2V0LHRoaXMuZW5kPW4/dGhpcy5zdGFydCtuOnRoaXMuc3RhcnQrdGhpcy5kdi5ieXRlTGVuZ3RofXJldHVybiBuKGUsW3trZXk6ImJ1ZmZlciIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZHYuYnVmZmVyfX0se2tleToidW5yZWFkTGVuZ3RoIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5tYXgodGhpcy5lbmQtdGhpcy5vZmZzZXQsMCl9fSx7a2V5OiJzaXplIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lbmQtdGhpcy5zdGFydH19LHtrZXk6InJlYWRGbG9hdCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9MDtzd2l0Y2goZSl7Y2FzZSA0OnQ9dGhpcy5kdi5nZXRGbG9hdDMyKHRoaXMub2Zmc2V0KTticmVhaztjYXNlIDg6dD10aGlzLmR2LmdldEZsb2F0NjQodGhpcy5vZmZzZXQpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJyZWFkICIuY29uY2F0KGUsIi1ieXRlIGZsb2F0IGlzIG5vdCBzdXBwb3J0ZWQiKSl9cmV0dXJuIHRoaXMub2Zmc2V0Kz1lLHR9fSx7a2V5OiJiYWNrIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLm9mZnNldC09ZX19LHtrZXk6InNraXAiLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMub2Zmc2V0Kz1lfX0se2tleToicmVhZEludCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5vZmZzZXQ7c3dpdGNoKHRoaXMub2Zmc2V0Kz1lLGUpe2Nhc2UgMTpyZXR1cm4gdGhpcy5kdi5nZXRJbnQ4KHQpO2Nhc2UgMjpyZXR1cm4gdGhpcy5kdi5nZXRJbnQxNih0KTtjYXNlIDQ6cmV0dXJuIHRoaXMuZHYuZ2V0SW50MzIodCk7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoInJlYWQgIi5jb25jYXQoZSwiLWJ5dGUgaW50ZWdlcnMgaXMgbm90IHN1cHBvcnRlZCIpKX19fSx7a2V5OiJyZWFkIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLm9mZnNldDtzd2l0Y2godGhpcy5vZmZzZXQrPWUsZSl7Y2FzZSAxOnJldHVybiB0aGlzLmR2LmdldFVpbnQ4KHQpO2Nhc2UgMjpyZXR1cm4gdGhpcy5kdi5nZXRVaW50MTYodCk7Y2FzZSAzOnJldHVybih0aGlzLmR2LmdldFVpbnQxNih0KTw8OCkrdGhpcy5kdi5nZXRVaW50OCh0KzIpO2Nhc2UgNDpyZXR1cm4gdGhpcy5kdi5nZXRVaW50MzIodCk7ZGVmYXVsdDpyZXR1cm4gdGhpcy5iYWNrKGUtNCksdGhpcy5yZWFkKGUtNCkrdGhpcy5kdi5nZXRVaW50MzIodCkqTWF0aC5wb3coMjU2LGUtNCl9fX0se2tleToid3JpdGUiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIHI9dGhpcy5vZmZzZXQ7c3dpdGNoKHRoaXMub2Zmc2V0Kz1lLGUpe2Nhc2UgMTpyZXR1cm4gdGhpcy5kdi5zZXRVaW50OChyLHQpO2Nhc2UgMjpyZXR1cm4gdGhpcy5kdi5zZXRVaW50MTYocix0KTtjYXNlIDM6cmV0dXJuIHRoaXMuZHYuc2V0VWludDgocix0Pj4+MTYpLHRoaXMuZHYuc2V0VWludDE2KHIrMSw2NTUzNSZ0KTtjYXNlIDQ6cmV0dXJuIHRoaXMuZHYuc2V0VWludDMyKHIsdCk7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIndyaXRlICIuY29uY2F0KGUsIi1ieXRlIGludGVnZXJzIGlzIG5vdCBzdXBwb3J0ZWQiKSl9fX0se2tleToicmVhZFRvQnVmZmVyIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdDtyZXR1cm4gdD10aGlzLm9mZnNldHx8ZT90aGlzLmR2LmJ1ZmZlci5zbGljZSh0aGlzLm9mZnNldCxlP3RoaXMub2Zmc2V0K2U6dGhpcy5lbmQpOnRoaXMuZHYuYnVmZmVyLHRoaXMub2Zmc2V0Kz10LmJ5dGVMZW5ndGgsdH19LHtrZXk6InJlYWRUb1VpbnQ4Iix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1uZXcgVWludDhBcnJheSh0aGlzLmR2LmJ1ZmZlcix0aGlzLm9mZnNldCxlfHx0aGlzLnVucmVhZExlbmd0aCk7cmV0dXJuIHRoaXMub2Zmc2V0Kz10LmJ5dGVMZW5ndGgsdH19LHtrZXk6InJlYWRTdHJpbmciLHZhbHVlOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0wLHI9IiI7dDxlO3QrKylyKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHRoaXMuZHYuZ2V0VWludDgodGhpcy5vZmZzZXQpKSx0aGlzLm9mZnNldCsrO3JldHVybiByfX1dLFt7a2V5OiJmcm9tVWludDgiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgZSh0LmJ1ZmZlcix0LmJ5dGVPZmZzZXQsdC5ieXRlTGVuZ3RoKX19LHtrZXk6ImNvbmNhdFVpbnQ4cyIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IFVpbnQ4QXJyYXkoZS5yZWR1Y2UoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUrdC5ieXRlTGVuZ3RofSksMCkpLHI9MDtyZXR1cm4gZS5mb3JFYWNoKChmdW5jdGlvbihlKXt0LnNldChlLHIpLHIrPWUuYnl0ZUxlbmd0aH0pKSx0fX0se2tleToiY29uY2F0VWludDgiLHZhbHVlOmZ1bmN0aW9uKCl7Zm9yKHZhciBlPWFyZ3VtZW50cy5sZW5ndGgsdD1uZXcgQXJyYXkoZSkscj0wO3I8ZTtyKyspdFtyXT1hcmd1bWVudHNbcl07cmV0dXJuIHRoaXMuY29uY2F0VWludDhzKHQpfX1dKSxlfSgpLFg9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQpe3IodGhpcyxlKSx0aGlzLm5hbWU9dHx8IiIsdGhpcy5fcHJlZml4PSJbIi5jb25jYXQodGhpcy5uYW1lLCJdIil9cmV0dXJuIG4oZSxbe2tleToid2FybiIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdDtpZighZS5kaXNhYmxlZCl7Zm9yKHZhciByPWFyZ3VtZW50cy5sZW5ndGgsYT1uZXcgQXJyYXkociksbj0wO248cjtuKyspYVtuXT1hcmd1bWVudHNbbl07KHQ9Y29uc29sZSkud2Fybi5hcHBseSh0LFt0aGlzLl9wcmVmaXhdLmNvbmNhdChhKSl9fX1dLFt7a2V5OiJlbmFibGUiLHZhbHVlOmZ1bmN0aW9uKCl7ZS5kaXNhYmxlZD0hMX19LHtrZXk6ImRpc2FibGUiLHZhbHVlOmZ1bmN0aW9uKCl7ZS5kaXNhYmxlZD0hMH19XSksZX0oKTtpKFgsImRpc2FibGVkIiwhMCk7dmFyIFE9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7cih0aGlzLGUpfXJldHVybiBuKGUsbnVsbCxbe2tleToiZGVjb2RlIix2YWx1ZTpmdW5jdGlvbih0KXtmb3IodmFyIHI9W10sYT10LG49MCxpPXQubGVuZ3RoO248aTspaWYoYVtuXTwxMjgpci5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoYVtuXSkpLCsrbjtlbHNle2lmKGFbbl08MTkyKTtlbHNlIGlmKGFbbl08MjI0KXtpZihlLl9jaGVja0NvbnRpbnVhdGlvbihhLG4sMSkpe3ZhciBzPSgzMSZhW25dKTw8Nnw2MyZhW24rMV07aWYocz49MTI4KXtyLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZSg2NTUzNSZzKSksbis9Mjtjb250aW51ZX19fWVsc2UgaWYoYVtuXTwyNDApe2lmKGUuX2NoZWNrQ29udGludWF0aW9uKGEsbiwyKSl7dmFyIG89KDE1JmFbbl0pPDwxMnwoNjMmYVtuKzFdKTw8Nnw2MyZhW24rMl07aWYobz49MjA0OCYmNTUyOTYhPSg2MzQ4OCZvKSl7ci5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoNjU1MzUmbykpLG4rPTM7Y29udGludWV9fX1lbHNlIGlmKGFbbl08MjQ4JiZlLl9jaGVja0NvbnRpbnVhdGlvbihhLG4sMykpe3ZhciB1PSg3JmFbbl0pPDwxOHwoNjMmYVtuKzFdKTw8MTJ8KDYzJmFbbisyXSk8PDZ8NjMmYVtuKzNdO2lmKHU+NjU1MzYmJnU8MTExNDExMil7dS09NjU1MzYsci5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUodT4+PjEwfDU1Mjk2KSksci5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoMTAyMyZ1fDU2MzIwKSksbis9NDtjb250aW51ZX19ci5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoNjU1MzMpKSwrK259cmV0dXJuIHIuam9pbigiIil9fSx7a2V5OiJfY2hlY2tDb250aW51YXRpb24iLHZhbHVlOmZ1bmN0aW9uKGUsdCxyKXt2YXIgYT1lO2lmKHQrcjxhLmxlbmd0aCl7Zm9yKDtyLS07KWlmKDEyOCE9KDE5MiZhWysrdF0pKXJldHVybiExO3JldHVybiEwfXJldHVybiExfX1dKSxlfSgpLFo9InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3csSj1aJiZuYXZpZ2F0b3IudXNlckFnZW50LnRvTG9jYWxlTG93ZXJDYXNlKCksJD1aJiYvXigoPyFjaHJvbWV8YW5kcm9pZCkuKSpzYWZhcmkvLnRlc3QoSiksZWU9WiYmSi5pbmNsdWRlcygiZmlyZWZveCIpLHRlPVomJkouaW5jbHVkZXMoImFuZHJvaWQiKTtmdW5jdGlvbiByZSgpe2Zvcih2YXIgZT1hcmd1bWVudHMubGVuZ3RoLHQ9bmV3IEFycmF5KGUpLHI9MDtyPGU7cisrKXRbcl09YXJndW1lbnRzW3JdO3Q9dC5maWx0ZXIoQm9vbGVhbik7dmFyIGE9bmV3IFVpbnQ4QXJyYXkodC5yZWR1Y2UoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUrdC5ieXRlTGVuZ3RofSksMCkpLG49MDtyZXR1cm4gdC5mb3JFYWNoKChmdW5jdGlvbihlKXthLnNldChlLG4pLG4rPWUuYnl0ZUxlbmd0aH0pKSxhfXZhciBhZT1NYXRoLnBvdygyLDMyKTtmdW5jdGlvbiBuZShlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MDtyZXR1cm4oZVt0XTw8OCkrKGVbdCsxXXx8MCl9ZnVuY3Rpb24gaWUoZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjA7cmV0dXJuKGVbdF08PDI0Pj4+MCkrKGVbdCsxXTw8MTYpKyhlW3QrMl08PDgpKyhlW3QrM118fDApfWZ1bmN0aW9uIHNlKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTowLHI9bmV3IERhdGFWaWV3KGUuYnVmZmVyLGUuYnl0ZU9mZnNldCxlLmJ5dGVMZW5ndGgpO3JldHVybiByLmdldEludDMyKHQpfWZ1bmN0aW9uIG9lKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTowO3JldHVybiBpZShlLHQpKmFlK2llKGUsdCs0KX1mdW5jdGlvbiB1ZShlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MCxyPW5ldyBEYXRhVmlldyhlLmJ1ZmZlcixlLmJ5dGVPZmZzZXQsZS5ieXRlTGVuZ3RoKTtyZXR1cm4gci5nZXRVaW50MzIodCk8PDMyfHIuZ2V0VWludDMyKHQrNCl9ZnVuY3Rpb24gY2UoZSl7Zm9yKHZhciB0LHI9ImF2YzEuIixhPTA7YTwzO2ErKykodD1lW2FdLnRvU3RyaW5nKDE2KSkubGVuZ3RoPDImJih0PSIwIi5jb25jYXQodCkpLHIrPXQ7cmV0dXJuIHJ9ZnVuY3Rpb24gbGUoZSl7dmFyIHQ9IiI7aWYoZS5mb3JFYWNoKChmdW5jdGlvbihlKXt0Kz1mdW5jdGlvbihlKXtyZXR1cm4oIjAiK051bWJlcihlKS50b1N0cmluZygxNikpLnNsaWNlKC0yKS50b1VwcGVyQ2FzZSgpfShlKX0pKSx0Lmxlbmd0aDw9MzIpZm9yKHZhciByPTMyLXQubGVuZ3RoLGE9MDthPHI7YSsrKXQrPSIwIjtyZXR1cm4gdH1mdW5jdGlvbiBkZShlKXtpZighQXJyYXkuaXNBcnJheShlKSl7Zm9yKHZhciB0PVtdLHI9IiIsYT0wO2E8ZS5sZW5ndGg7YSsrKWElMiYmKHI9ZVthLTFdK2VbYV0sdC5wdXNoKHBhcnNlSW50KHIsMTYpKSxyPSIiKTtyZXR1cm4gdH1yZXR1cm4gZS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBwYXJzZUludChlLDE2KX0pKX1mdW5jdGlvbiBmZShlLHQpe3JldHVybiBOdW1iZXIoZSsiLiIrdCl9dmFyIGhlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3IodGhpcyxlKX1yZXR1cm4gbihlLG51bGwsW3trZXk6ImdldFJhdGVJbmRleEJ5UmF0ZSIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIGUuRlJFUS5pbmRleE9mKHQpfX0se2tleToicGFyc2VBRFRTIix2YWx1ZTpmdW5jdGlvbih0LHIpe2Zvcih2YXIgYT10Lmxlbmd0aCxuPTA7bisyPGEmJigyNTUhPT10W25dfHwyNDAhPSgyNDYmdFtuKzFdKSk7KW4rKztpZighKG4+PWEpKXt2YXIgaT1uLHM9W10sbz0oNjAmdFtuKzJdKT4+PjIsdT1lLkZSRVFbb107aWYoIXUpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHNhbXBsaW5nIGluZGV4OiAiLmNvbmNhdChvKSk7Zm9yKHZhciBjLGwsZD0xKygoMTkyJnRbbisyXSk+Pj42KSxmPSgxJnRbbisyXSk8PDJ8KDE5MiZ0W24rM10pPj4+NixoPWUuX2dldENvbmZpZyhvLGYsZCksdj1oLmNvbmZpZyxwPWguY29kZWMseT0wLG09ZS5nZXRGcmFtZUR1cmF0aW9uKHUpO24rNzxhOylpZigyNTU9PT10W25dJiYyNDA9PSgyNDYmdFtuKzFdKSl7aWYoIShsPSgzJnRbbiszXSk8PDExfHRbbis0XTw8M3woMjI0JnRbbis1XSk+PjUpfHxhLW48bClicmVhaztjPTIqKDEmfnRbbisxXSkscy5wdXNoKHtwdHM6cit5Km0sZGF0YTp0LnN1YmFycmF5KG4rNytjLG4rbCl9KSx5Kyssbis9bH1lbHNlIG4rKztyZXR1cm57c2tpcDppLHJlbWFpbmluZzpuPj1hP3ZvaWQgMDp0LnN1YmFycmF5KG4pLGZyYW1lczpzLHNhbXBsaW5nRnJlcXVlbmN5SW5kZXg6byxzYW1wbGVSYXRlOnUsb2JqZWN0VHlwZTpkLGNoYW5uZWxDb3VudDpmLGNvZGVjOnAsY29uZmlnOnYsb3JpZ2luQ29kZWM6Im1wNGEuNDAuIi5jb25jYXQoZCl9fX19LHtrZXk6InBhcnNlQXVkaW9TcGVjaWZpY0NvbmZpZyIsdmFsdWU6ZnVuY3Rpb24odCl7aWYodC5sZW5ndGgpe3ZhciByPXRbMF0+Pj4zLGE9KDcmdFswXSk8PDF8dFsxXT4+Pjcsbj0oMTIwJnRbMV0pPj4+MyxpPWUuRlJFUVthXTtpZihpKXt2YXIgcz1lLl9nZXRDb25maWcoYSxuLHIpO3JldHVybntzYW1wbGluZ0ZyZXF1ZW5jeUluZGV4OmEsc2FtcGxlUmF0ZTppLG9iamVjdFR5cGU6cixjaGFubmVsQ291bnQ6bixjb25maWc6cy5jb25maWcsY29kZWM6cy5jb2RlYyxvcmlnaW5Db2RlYzoibXA0YS40MC4iLmNvbmNhdChyKX19fX19LHtrZXk6ImdldEZyYW1lRHVyYXRpb24iLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTo5ZTQ7cmV0dXJuIDEwMjQqdC9lfX0se2tleToiX2dldENvbmZpZyIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIpe3ZhciBhLG4saT1bXTtyZXR1cm4gZWU/ZT49Nj8oYT01LG49ZS0zKTooYT0yLG49ZSk6dGU/KGE9MixuPWUpOihhPTUsbj1lLGU+PTY/bj1lLTM6MT09PXQmJihhPTIsbj1lKSksaVswXT1hPDwzLGlbMF18PSgxNCZlKT4+MSxpWzFdPSgxJmUpPDw3LGlbMV18PXQ8PDMsNT09PWEmJihpWzFdfD0oMTQmbik+PjEsaVsyXT0oMSZuKTw8NyxpWzJdfD04LGlbM109MCkse2NvbmZpZzppLGNvZGVjOiJtcDRhLjQwLiIuY29uY2F0KGEpfX19LHtrZXk6ImdldFNpbGVudEZyYW1lIix2YWx1ZTpmdW5jdGlvbihlLHQpe2lmKCJtcDRhLjQwLjIiPT09ZSl7aWYoMT09PXQpcmV0dXJuIG5ldyBVaW50OEFycmF5KFswLDIwMCwwLDEyOCwzNSwxMjhdKTtpZigyPT09dClyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoWzMzLDAsNzMsMTQ0LDIsMjUsMCwzNSwxMjhdKTtpZigzPT09dClyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoWzAsMjAwLDAsMTI4LDMyLDEzMiwxLDM4LDY0LDgsMTAwLDAsMTQyXSk7aWYoND09PXQpcmV0dXJuIG5ldyBVaW50OEFycmF5KFswLDIwMCwwLDEyOCwzMiwxMzIsMSwzOCw2NCw4LDEwMCwwLDEyOCw0NCwxMjgsOCwyLDU2XSk7aWYoNT09PXQpcmV0dXJuIG5ldyBVaW50OEFycmF5KFswLDIwMCwwLDEyOCwzMiwxMzIsMSwzOCw2NCw4LDEwMCwwLDEzMCw0OCw0LDE1MywwLDMzLDE0NCwyLDU2XSk7aWYoNj09PXQpcmV0dXJuIG5ldyBVaW50OEFycmF5KFswLDIwMCwwLDEyOCwzMiwxMzIsMSwzOCw2NCw4LDEwMCwwLDEzMCw0OCw0LDE1MywwLDMzLDE0NCwyLDAsMTc4LDAsMzIsOCwyMjRdKX1lbHNle2lmKDE9PT10KXJldHVybiBuZXcgVWludDhBcnJheShbMSw2NCwzNCwxMjgsMTYzLDc4LDIzMCwxMjgsMTg2LDgsMCwwLDAsMjgsNiwyNDEsMTkzLDEwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDk0XSk7aWYoMj09PXQpcmV0dXJuIG5ldyBVaW50OEFycmF5KFsxLDY0LDM0LDEyOCwxNjMsOTQsMjMwLDEyOCwxODYsOCwwLDAsMCwwLDE0OSwwLDYsMjQxLDE2MSwxMCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5NF0pO2lmKDM9PT10KXJldHVybiBuZXcgVWludDhBcnJheShbMSw2NCwzNCwxMjgsMTYzLDk0LDIzMCwxMjgsMTg2LDgsMCwwLDAsMCwxNDksMCw2LDI0MSwxNjEsMTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTRdKX19fV0pLGV9KCk7aShoZSwiRlJFUSIsWzk2ZTMsODgyMDAsNjRlMyw0OGUzLDQ0MTAwLDMyZTMsMjRlMywyMjA1MCwxNmUzLDEyZTMsMTEwMjUsOGUzLDczNTBdKTt2YXIgdmU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7cih0aGlzLGUpfXJldHVybiBuKGUsbnVsbCxbe2tleToicGFyc2VBbm5leEIiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PWUuYnl0ZUxlbmd0aC0xLHI9MDtkb3tpZigwIT09ZVt0XSlicmVhaztyKyssdC0tfXdoaWxlKHQ+MCk7cj49MyYmKGU9ZS5zdWJhcnJheSgwLHQrMSkpO2Zvcih2YXIgYT1lLmxlbmd0aCxuPTIsaT0wO251bGwhPT1lW25dJiZ2b2lkIDAhPT1lW25dJiYxIT09ZVtuXTspbisrO2lmKChpPSsrbisyKT49YSlyZXR1cm5bXTtmb3IodmFyIHM9W107aTxhOylzd2l0Y2goZVtpXSl7Y2FzZSAwOmlmKDAhPT1lW2ktMV0pe2krPTI7YnJlYWt9aWYoMCE9PWVbaS0yXSl7aSsrO2JyZWFrfWlmKGk8YS0xJiYxIT09ZVtpKzFdKXtpKys7YnJlYWt9biE9PWktMiYmcy5wdXNoKGUuc3ViYXJyYXkobixpLTIpKTtkb3tpKyt9d2hpbGUoMSE9PWVbaV0mJmk8YSk7aT0obj1pKzEpKzI7YnJlYWs7Y2FzZSAxOmlmKDAhPT1lW2ktMV18fDAhPT1lW2ktMl0pe2krPTM7YnJlYWt9biE9PWktMiYmcy5wdXNoKGUuc3ViYXJyYXkobixpLTIpKSxpPShuPWkrMSkrMjticmVhaztkZWZhdWx0OmkrPTN9cmV0dXJuIG48YSYmcy5wdXNoKGUuc3ViYXJyYXkobikpLHN9fSx7a2V5OiJwYXJzZUF2Y0MiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTo0O2lmKCEoZS5sZW5ndGg8NCkpe2Zvcih2YXIgcixhPWUubGVuZ3RoLG49W10saT0wO2krdDxhOylpZihyPWllKGUsaSksMz09PXQmJihyPj4+PTgpLGkrPXQscil7aWYoaStyPmEpYnJlYWs7bi5wdXNoKGUuc3ViYXJyYXkoaSxpK3IpKSxpKz1yfXJldHVybiBufX19LHtrZXk6InBhcnNlU0VJIix2YWx1ZTpmdW5jdGlvbihlLHQpe2Zvcih2YXIgcj1lLmxlbmd0aCxhPXQ/MjoxLG49MCxpPTAscz0iIjsyNTU9PT1lW2FdOyluKz0yNTUsYSsrO2ZvcihuKz1lW2ErK107MjU1PT09ZVthXTspaSs9MjU1LGErKztpZihpKz1lW2ErK10sNT09PW4mJnI+YSsxNilmb3IodmFyIG89MDtvPDE2O28rKylzKz1lW2FdLnRvU3RyaW5nKDE2KSxhKys7cmV0dXJue3BheWxvYWQ6ZS5zdWJhcnJheShhLGEraSksdHlwZTpuLHNpemU6aSx1dWlkOnN9fX0se2tleToicmVtb3ZlRVBCIix2YWx1ZTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9ZS5ieXRlTGVuZ3RoLHI9W10sYT0xO2E8dC0yOykwPT09ZVthXSYmMD09PWVbYSsxXSYmMz09PWVbYSsyXT8oci5wdXNoKGErMiksYSs9Mik6YSsrO2lmKCFyLmxlbmd0aClyZXR1cm4gZTt2YXIgbj10LXIubGVuZ3RoLGk9bmV3IFVpbnQ4QXJyYXkobikscz0wO2ZvcihhPTA7YTxuO3MrKyxhKyspcz09PXJbMF0mJihzKyssci5zaGlmdCgpKSxpW2FdPWVbc107cmV0dXJuIGl9fV0pLGV9KCkscGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7cih0aGlzLGUpfXJldHVybiBuKGUsbnVsbCxbe2tleToicGFyc2VBVkNEZWNvZGVyQ29uZmlndXJhdGlvblJlY29yZCIsdmFsdWU6ZnVuY3Rpb24odCl7aWYoISh0Lmxlbmd0aDw3KSl7Zm9yKHZhciByLGEsbj0xKygzJnRbNF0pLGk9W10scz1bXSxvPTYsdT0zMSZ0WzVdLGM9MDtjPHU7YysrKWlmKGE9dFtvXTw8OHx0W28rMV0sbys9MixhKXt2YXIgbD10LnN1YmFycmF5KG8sbythKTtvKz1hLGkucHVzaChsKSxyfHwocj1lLnBhcnNlU1BTKHZlLnJlbW92ZUVQQihsKSkpfXZhciBkLGY9dFtvXTtvKys7Zm9yKHZhciBoPTA7aDxmO2grKylkPXRbb108PDh8dFtvKzFdLG8rPTIsZCYmKHMucHVzaCh0LnN1YmFycmF5KG8sbytkKSksbys9ZCk7cmV0dXJue3NwczpyLHNwc0FycjppLHBwc0FycjpzLG5hbFVuaXRTaXplOm59fX19LHtrZXk6InBhcnNlU1BTIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1uZXcgcShlKTt0LnJlYWRVQnl0ZSgpO3ZhciByPXQucmVhZFVCeXRlKCksYT10LnJlYWRVQnl0ZSgpLG49dC5yZWFkVUJ5dGUoKTt0LnNraXBVRUcoKTt2YXIgaT00MjA7aWYoMTAwPT09cnx8MTEwPT09cnx8MTIyPT09cnx8MjQ0PT09cnx8NDQ9PT1yfHw4Mz09PXJ8fDg2PT09cnx8MTE4PT09cnx8MTI4PT09cnx8MTM4PT09cnx8MTQ0PT09cil7dmFyIHM9dC5yZWFkVUVHKCk7aWYoczw9MyYmKGk9WzAsNDIwLDQyMiw0NDRdW3NdKSwzPT09cyYmdC5za2lwQml0cygxKSx0LnNraXBVRUcoKSx0LnNraXBVRUcoKSx0LnNraXBCaXRzKDEpLHQucmVhZEJvb2woKSlmb3IodmFyIG89MyE9PXM/ODoxMix1PTA7dTxvO3UrKyl0LnJlYWRCb29sKCkmJih1PDY/dC5za2lwU2NhbGluZ0xpc3QoMTYpOnQuc2tpcFNjYWxpbmdMaXN0KDY0KSl9dC5za2lwVUVHKCk7dmFyIGM9dC5yZWFkVUVHKCk7aWYoMD09PWMpdC5yZWFkVUVHKCk7ZWxzZSBpZigxPT09Yyl7dC5za2lwQml0cygxKSx0LnNraXBVRUcoKSx0LnNraXBVRUcoKTtmb3IodmFyIGw9dC5yZWFkVUVHKCksZD0wO2Q8bDtkKyspdC5za2lwVUVHKCl9dC5za2lwVUVHKCksdC5za2lwQml0cygxKTt2YXIgZj10LnJlYWRVRUcoKSxoPXQucmVhZFVFRygpLHY9dC5yZWFkQml0cygxKTswPT09diYmdC5za2lwQml0cygxKSx0LnNraXBCaXRzKDEpO3ZhciBwLHksbSxnLGssYj0wLF89MCx4PTAsdz0wO2lmKHQucmVhZEJvb2woKSYmKGI9dC5yZWFkVUVHKCksXz10LnJlYWRVRUcoKSx4PXQucmVhZFVFRygpLHc9dC5yZWFkVUVHKCkpLHQucmVhZEJvb2woKSl7aWYodC5yZWFkQm9vbCgpKXN3aXRjaCh0LnJlYWRVQnl0ZSgpKXtjYXNlIDE6cD1bMSwxXTticmVhaztjYXNlIDI6cD1bMTIsMTFdO2JyZWFrO2Nhc2UgMzpwPVsxMCwxMV07YnJlYWs7Y2FzZSA0OnA9WzE2LDExXTticmVhaztjYXNlIDU6cD1bNDAsMzNdO2JyZWFrO2Nhc2UgNjpwPVsyNCwxMV07YnJlYWs7Y2FzZSA3OnA9WzIwLDExXTticmVhaztjYXNlIDg6cD1bMzIsMTFdO2JyZWFrO2Nhc2UgOTpwPVs4MCwzM107YnJlYWs7Y2FzZSAxMDpwPVsxOCwxMV07YnJlYWs7Y2FzZSAxMTpwPVsxNSwxMV07YnJlYWs7Y2FzZSAxMjpwPVs2NCwzM107YnJlYWs7Y2FzZSAxMzpwPVsxNjAsOTldO2JyZWFrO2Nhc2UgMTQ6cD1bNCwzXTticmVhaztjYXNlIDE1OnA9WzMsMl07YnJlYWs7Y2FzZSAxNjpwPVsyLDFdO2JyZWFrO2Nhc2UgMjU1OnA9W3QucmVhZFVCeXRlKCk8PDh8dC5yZWFkVUJ5dGUoKSx0LnJlYWRVQnl0ZSgpPDw4fHQucmVhZFVCeXRlKCldfWlmKHQucmVhZEJvb2woKSYmdC5yZWFkQm9vbCgpLHQucmVhZEJvb2woKSYmKHQucmVhZEJpdHMoNCksdC5yZWFkQm9vbCgpJiZ0LnJlYWRCaXRzKDI0KSksdC5yZWFkQm9vbCgpJiYodC5yZWFkVUVHKCksdC5yZWFkVUVHKCkpLHQucmVhZEJvb2woKSl7dmFyIFM9dC5yZWFkQml0cygzMiksQj10LnJlYWRCaXRzKDMyKTt5PXQucmVhZEJvb2woKSxrPShtPUIpLyhnPTIqUyl9fXJldHVybntjb2RlYzpjZShlLnN1YmFycmF5KDEsNCkpLHByb2ZpbGVJZGM6cixwcm9maWxlQ29tcGF0aWJpbGl0eTphLGxldmVsSWRjOm4sY2hyb21hRm9ybWF0Omksd2lkdGg6TWF0aC5jZWlsKDE2KihmKzEpLTIqKGIrXykpLGhlaWdodDooMi12KSooaCsxKSoxNi0odj8yOjQpKih4K3cpLHNhclJhdGlvOnAsZnBzTnVtOm0sZnBzRGVuOmcsZnBzOmssZml4ZWRGcmFtZTp5fX19XSksZX0oKTtmdW5jdGlvbiB5ZShlLHQpe3JldHVybiB0P2UucmVhZFRvVWludDgodCkuc2xpY2UoKTpuZXcgVWludDhBcnJheX12YXIgbWU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7cih0aGlzLGUpfXJldHVybiBuKGUsbnVsbCxbe2tleToiZ2V0TmFsVHlwZSIsdmFsdWU6ZnVuY3Rpb24oZSl7aWYoZSYmIShlLmJ5dGVMZW5ndGg8PTEpKXJldHVybigyNDgmZVsxXSk+PjN9fSx7a2V5OiJnZXROYWxUeXBlcyIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIG51bGwhPXQmJnQubGVuZ3RoP3QubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gZS5nZXROYWxUeXBlKHQpfSkpLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBlfSkpOltdfX0se2tleToiZ2V0TmFsSW5mbyIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIHI9ZS5nZXROYWxUeXBlcyh0KTtpZihyLmxlbmd0aCl7dmFyIGE9IiI7cmV0dXJuIHIuaW5jbHVkZXMoNyl8fHIuaW5jbHVkZXMoOCk/YT0iaWRyIjpyLmluY2x1ZGVzKDkpJiYoYT0iY3JhIikse25hbFR5cGVzOnIscmFuZG9tQWNjZXNzVHlwZTphLHJhc2w6ci5pbmNsdWRlcygzKX19fX0se2tleToiYnVpbGRDb2RlY1N0cmluZyIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgcj1lfHwidnZjMSI7aWYoIXQpcmV0dXJuIiIuY29uY2F0KHIsIi4xLkw5MyIpO3ZhciBhPXQuZ2VuZXJhbFByb2ZpbGVJZGN8fDEsbj10LmdlbmVyYWxUaWVyRmxhZz8iSCI6IkwiLGk9dC5nZW5lcmFsTGV2ZWxJZGN8fDkzO3JldHVybiIiLmNvbmNhdChyLCIuIikuY29uY2F0KGEsIi4iKS5jb25jYXQobikuY29uY2F0KGkpfX0se2tleToicGFyc2VWVkNEZWNvZGVyQ29uZmlndXJhdGlvblJlY29yZCIsdmFsdWU6ZnVuY3Rpb24odCxyKXtyZXR1cm4gZS5fcGFyc2VTdGFuZGFyZFZ2Y0NvbmZpZ3VyYXRpb25SZWNvcmQodCxyfHwidnZjMSIpfX0se2tleToiX3BhcnNlU3RhbmRhcmRWdmNDb25maWd1cmF0aW9uUmVjb3JkIix2YWx1ZTpmdW5jdGlvbih0LHIpe3ZhciBhPXQ7YS5sZW5ndGg+PTUmJmFbMF08MjQ4JiYoYT1hLnN1YmFycmF5KDQpKTt2YXIgbj1ZLmZyb21VaW50OChhKSxpPVcuZnJvbUJ5dGUobiwxKTtpLnJlYWQoNSk7dmFyIHMsbyx1LGMsbCxkLGYsaD1pLnJlYWQoMiksdj1pLnJlYWQoMSkscD0xLHk9e307aWYodil7dmFyIG09Vy5mcm9tQnl0ZShuLDIpO3M9bS5yZWFkKDkpLHA9bS5yZWFkKDMpLG89bS5yZWFkKDIpLHU9bS5yZWFkKDIpO3ZhciBnPVcuZnJvbUJ5dGUobiwxKTtjPWcucmVhZCgzKSxnLnJlYWQoNSkseT1lLnBhcnNlVlZDUFRMUmVjb3JkKG4scCksbD1uLnJlYWQoMiksZD1uLnJlYWQoMiksZj1uLnJlYWQoMil9dmFyIGs9ZS5fcGFyc2VWVkNOYWxBcnJheXMobik7cmV0dXJue2RhdGE6dCxjb2RlYzplLmJ1aWxkQ29kZWNTdHJpbmcocix5KSxzYW1wbGVFbnRyeVR5cGU6cnx8InZ2YzEiLG5hbFVuaXRTaXplOmgrMSxwdGxQcmVzZW50RmxhZzp2LG9sc0lkeDpzLG51bVN1YmxheWVyczpwLGNvbnN0YW50RnJhbWVSYXRlOm8sY2hyb21hRm9ybWF0SWRjOnUsYml0RGVwdGhMdW1hTWludXM4OmMscHRsUmVjb3JkOnksd2lkdGg6bCxoZWlnaHQ6ZCxzYW1wbGVSYXRlOmYsbnVtT2ZBcnJheXM6ay5udW1PZkFycmF5cyx2cHM6ay52cHMsc3BzOmsuc3BzLHBwczprLnBwcyxzcHNQYXJzZWQ6ay5zcHNQYXJzZWR9fX0se2tleToiX3BhcnNlVlZDTmFsQXJyYXlzIix2YWx1ZTpmdW5jdGlvbih0KXtmb3IodmFyIHI9dC5yZWFkKDEpLGE9W10sbj1bXSxpPVtdLHM9bnVsbCxvPTA7bzxyO28rKyl7dmFyIHU9Vy5mcm9tQnl0ZSh0LDEpO3UucmVhZCgxKSx1LnJlYWQoMik7dmFyIGM9dS5yZWFkKDUpLGw9MTsxMyE9PWMmJjEyIT09YyYmKGw9dC5yZWFkKDIpKTtmb3IodmFyIGQ9MDtkPGw7ZCsrKXt2YXIgZj10LnJlYWQoMik7c3dpdGNoKGMpe2Nhc2UgMTQ6YS5wdXNoKHllKHQsZikpO2JyZWFrO2Nhc2UgMTU6dmFyIGg9eWUodCxmKTtpZighcyl0cnl7cz1lLnBhcnNlU1BTKGUucmVtb3ZlRVBCKGgpKX1jYXRjaCh2KXt9bi5wdXNoKGgpO2JyZWFrO2Nhc2UgMTY6aS5wdXNoKHllKHQsZikpO2JyZWFrO2RlZmF1bHQ6eWUodCxmKX19fXJldHVybntudW1PZkFycmF5czpyLHZwczphLHNwczpuLHBwczppLHNwc1BhcnNlZDpzfX19LHtrZXk6InBhcnNlVlZDUFRMUmVjb3JkIix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciByPVcuZnJvbUJ5dGUoZSwyKTtyLnJlYWQoMik7dmFyIGE9ci5yZWFkKDYpLG49ci5yZWFkKDcpLGk9ci5yZWFkKDEpLHM9ZS5yZWFkKDEpLG89Vy5mcm9tQnl0ZShlLDEpLHU9by5yZWFkKDEpLGM9by5yZWFkKDEpLGw9bmV3IFVpbnQ4QXJyYXkoYSk7aWYoYSl7Zm9yKHZhciBkPTA7ZDxhLTE7ZCsrKXt2YXIgZj1vLnJlYWQoNiksaD0obz1XLmZyb21CeXRlKGUsMSkpLnJlYWQoMik7bFtkXT1mPDwyfGh9bFthLTFdPW8ucmVhZCg2KX1lbHNlIG8ucmVhZCg2KTt2YXIgdj1bXTtpZih0PjEpe2Zvcih2YXIgcD1XLmZyb21CeXRlKGUsMSkseT0wLG09dC0yO20+PTA7LS1tKXt5fD1wLnJlYWQoMSk8PG19Zm9yKHZhciBnPXQ7Zzw9OCYmdD4xOysrZylwLnJlYWQoMSk7Zm9yKHZhciBrPXQtMjtrPj0wOy0tayl5JjE8PGsmJih2W2tdPWUucmVhZCgxKSl9dmFyIGI9ZS5yZWFkKDEpLF89W107aWYoYilmb3IodmFyIHg9MDt4PGI7eCsrKV8ucHVzaChlLnJlYWRJbnQoNCkpO3JldHVybntnZW5lcmFsUHJvZmlsZUlkYzpuLGdlbmVyYWxUaWVyRmxhZzppLGdlbmVyYWxMZXZlbElkYzpzLHB0bEZyYW1lT25seUNvbnN0cmFpbnRGbGFnOnUscHRsTXVsdGlsYXllckVuYWJsZWRGbGFnOmMsZ2VuZXJhbENvbnN0cmFpbnRJbmZvOmwsc3ViTGF5ZXJMZXZlbElkYzp2LGdlbmVyYWxTdWJQcm9maWxlSWRjOl8scHRsTnVtU3ViUHJvZmlsZXM6YixudW1CeXRlc0NvbnN0cmFpbnRJbmZvOmF9fX0se2tleToiZ2V0QXZjY05hbHMiLHZhbHVlOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1bXTtlLnBvc2l0aW9uPGUubGVuZ3RoLTQ7KXt2YXIgcj1lLmRhdGF2aWV3LmdldEludDMyKGUuZGF0YXZpZXcucG9zaXRpb24pO2lmKCEoZS5sZW5ndGgtZS5wb3NpdGlvbj49cikpYnJlYWs7dmFyIGE9ZS5idWZmZXIuc2xpY2UoZS5wb3NpdGlvbixlLnBvc2l0aW9uKzQpO2Uuc2tpcCg0KTt2YXIgbj1uZXcgVWludDhBcnJheShlLmJ1ZmZlci5zbGljZShlLnBvc2l0aW9uLGUucG9zaXRpb24rcikpO2Uuc2tpcChyKSx0LnB1c2goe2hlYWRlcjphLGJvZHk6bn0pfXJldHVybiB0fX0se2tleToiYW5hbHlzZU5hbCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9KDI0OCZlLmJvZHlbMV0pPj4zO3N3aXRjaChlLnR5cGU9dCx0KXtjYXNlIDIzOmNhc2UgMjQ6YnJlYWs7Y2FzZSA3OmNhc2UgODplLmtleT0hMDticmVhaztjYXNlIDE0OmUudnBzPSEwO2JyZWFrO2Nhc2UgMTU6ZS5zcHM9ITA7YnJlYWs7Y2FzZSAxNjplLnBwcz0hMDticmVhaztjYXNlIDE3OmUuYXBzPSEwfX19LHtrZXk6InJlbW92ZUVQQiIsdmFsdWU6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PWUuYnl0ZUxlbmd0aCxyPVtdLGE9MTthPHQtMjspMD09PWVbYV0mJjA9PT1lW2ErMV0mJjM9PT1lW2ErMl0/KHIucHVzaChhKzIpLGErPTIpOmErKztpZighci5sZW5ndGgpcmV0dXJuIGU7dmFyIG49dC1yLmxlbmd0aCxpPW5ldyBVaW50OEFycmF5KG4pLHM9MDtmb3IoYT0wO2E8bjtzKyssYSsrKXM9PT1yWzBdJiYocysrLHIuc2hpZnQoKSksaVthXT1lW3NdO3JldHVybiBpfX0se2tleToicGFyc2VWcHMiLHZhbHVlOmZ1bmN0aW9uKCl7fX0se2tleToicGFyc2VTUFMiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciByPW5ldyBxKHQpO3IucmVhZFVCeXRlKCksci5yZWFkVUJ5dGUoKSxyLnNraXBCaXRzKDQpO3ZhciBhPXIucmVhZEJpdHMoNCksbj1yLnJlYWRCaXRzKDMpLGk9ci5yZWFkQml0cygyKSxzPTQyMDtpPD0zJiYocz1bMCw0MjAsNDIyLDQ0NF1baV0pLHIucmVhZEJpdHMoMiksci5yZWFkQml0cygxKTt2YXIgbz1lLl9wYXJzZVByb2ZpbGVUaWVyTGV2ZWwociwxLG4pO3JldHVybiByLnJlYWRCaXRzKDEpLHIucmVhZEJpdHMoMSkmJnIucmVhZEJpdHMoMSkse3dpZHRoOnIucmVhZFVFRygpLGhlaWdodDpyLnJlYWRVRUcoKSxzcHNNYXhTdWJMYXllck1pbnVzMTpuLHNwc1ZpZGVvUGFyYW1ldGVyU2V0SWQ6YSxjaHJvbWFGb3JtYXRJZGM6aSxjaHJvbWFGb3JtYXQ6cyxwdGxJbmZvOm99fX0se2tleToiX3BhcnNlUHJvZmlsZVRpZXJMZXZlbCIsdmFsdWU6ZnVuY3Rpb24odCxyLGEpe3ZhciBuLGk9dC5yZWFkQml0cyg3KSxzPXQucmVhZEJpdHMoMSksbz10LnJlYWRCaXRzKDgpLHU9dC5yZWFkQml0cygxKSxjPXQucmVhZEJpdHMoMSk7ciYmKG49ZS5fcGFyc2VHZW5lcmFsQ29uc3RyYWludHNJbmZvKHQpKTtmb3IodmFyIGw9YS0xLGQ9W10sZj1bXSxoPVtdLHY9bDt2Pj0wOy0tdilkW3ZdPXQucmVhZEJpdHMoMSk7Zm9yKDshdC5ieXRlQWxpZ25lZCgpOyl0LnJlYWRCaXRzKDEpO2Zvcih2YXIgcD1sO3A+PTA7LS1wKWRbcF0mJihmW3BdPXQucmVhZFVCeXRlKCkpO2lmKHIpZm9yKHZhciB5PXQucmVhZFVCeXRlKCksbT0wO208eTttKyspaFttXT10LnJlYWRCaXRzKDMyKTtyZXR1cm57Z2VuZXJhbFByb2ZpbGVJZGM6aSxnZW5lcmFsVGllckZsYWc6cyxnZW5lcmFsTGV2ZWxJZGM6byxwdGxGcmFtZU9ubHlDb25zdHJhaW50RmxhZzp1LHB0bE11bHRpbGF5ZXJFbmFibGVkRmxhZzpjLHB0bFN1YmxheWVyTGV2ZWxQcmVzZW50RmxhZ3M6ZCxwdGxTdWJsYXllckxldmVsSWRjczpmLHB0bFN1YlByb2ZpbGVJZGNzOmgsZ2NpSW5mbzpufX19LHtrZXk6Il9wYXJzZUdlbmVyYWxDb25zdHJhaW50c0luZm8iLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PWUucmVhZEJpdHMoMSk7aWYodCl7ZS5za2lwQml0cyg3MSk7dmFyIHI9ZS5yZWFkQml0cyg4KTtyJiZlLnNraXBCaXRzKHIpfXZhciBhPTgtZS5iaXRzUG9zKCklODtyZXR1cm4gZS5za2lwQml0cyhhKSx7Z2NpUHJlc2VudEZsYWc6dH19fV0pLGV9KCksZ2U9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7cih0aGlzLGUpfXJldHVybiBuKGUsbnVsbCxbe2tleToicGFyc2VIRVZDRGVjb2RlckNvbmZpZ3VyYXRpb25SZWNvcmQiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciByPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fTtpZighKHQubGVuZ3RoPDIzKSl7cj1yfHx7fTtmb3IodmFyIGEsbixpLHMsbyx1PTErKDMmdFsyMV0pLGM9W10sbD1bXSxkPVtdLGY9MjMsaD10WzIyXSx2PTA7djxoO3YrKyl7aT02MyZ0W2ZdLHM9dFtmKzFdPDw4fHRbZisyXSxmKz0zO2Zvcih2YXIgcD0wO3A8cztwKyspaWYobz10W2ZdPDw4fHRbZisxXSxmKz0yLG8pe3N3aXRjaChpKXtjYXNlIDMyOnZhciB5PXQuc3ViYXJyYXkoZixmK28pO2F8fChhPWUucGFyc2VWUFModmUucmVtb3ZlRVBCKHkpLHIpKSxkLnB1c2goeSk7YnJlYWs7Y2FzZSAzMzp2YXIgbT10LnN1YmFycmF5KGYsZitvKTtufHwobj1lLnBhcnNlU1BTKHZlLnJlbW92ZUVQQihtKSxyKSksYy5wdXNoKG0pO2JyZWFrO2Nhc2UgMzQ6bC5wdXNoKHQuc3ViYXJyYXkoZixmK28pKX1mKz1vfX1yZXR1cm57aHZjQzpyLHNwczpuLHNwc0FycjpjLHBwc0FycjpsLHZwc0FycjpkLG5hbFVuaXRTaXplOnV9fX19LHtrZXk6InBhcnNlVlBTIix2YWx1ZTpmdW5jdGlvbih0LHIpe3I9cnx8e307dmFyIGE9bmV3IHEodCk7YS5yZWFkVUJ5dGUoKSxhLnJlYWRVQnl0ZSgpLGEucmVhZEJpdHMoMTIpO3ZhciBuPWEucmVhZEJpdHMoMyk7cmV0dXJuIHIubnVtVGVtcG9yYWxMYXllcnM9TWF0aC5tYXgoci5udW1UZW1wb3JhbExheWVyc3x8MCxuKzEpLGEucmVhZEJpdHMoMTcpLGUuX3BhcnNlUHJvZmlsZVRpZXJMZXZlbChhLG4scikscn19LHtrZXk6InBhcnNlU1BTIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgcj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e307cj1yfHx7fTt2YXIgYT1uZXcgcSh0KTthLnJlYWRVQnl0ZSgpLGEucmVhZFVCeXRlKCksYS5yZWFkQml0cyg0KTt2YXIgbj1hLnJlYWRCaXRzKDMpO3IubnVtVGVtcG9yYWxMYXllcnM9TWF0aC5tYXgobisxLHIubnVtVGVtcG9yYWxMYXllcnN8fDApLHIudGVtcG9yYWxJZE5lc3RlZD1hLnJlYWRCaXRzKDEpLGUuX3BhcnNlUHJvZmlsZVRpZXJMZXZlbChhLG4sciksYS5yZWFkVUVHKCk7dmFyIGk9ci5jaHJvbWFGb3JtYXRJZGM9YS5yZWFkVUVHKCkscz00MjA7aTw9MyYmKHM9WzAsNDIwLDQyMiw0NDRdW2ldKTt2YXIgbz0wOzM9PT1pJiYobz1hLnJlYWRCaXRzKDEpKTt2YXIgdSxjLGwsZCxmPWEucmVhZFVFRygpLGg9YS5yZWFkVUVHKCksdj1hLnJlYWRCaXRzKDEpO2lmKDE9PT12JiYodT1hLnJlYWRVRUcoKSxjPWEucmVhZFVFRygpLGw9YS5yZWFkVUVHKCksZD1hLnJlYWRVRUcoKSksci5iaXREZXB0aEx1bWFNaW51czg9YS5yZWFkVUVHKCksci5iaXREZXB0aENocm9tYU1pbnVzOD1hLnJlYWRVRUcoKSwxPT09dil7dmFyIHA9MSE9PWkmJjIhPT1pfHwwIT09bz8xOjIseT0xPT09aSYmMD09PW8/MjoxO2YtPXAqKGMrdSksaC09eSooZCtsKX1yZXR1cm57Y29kZWM6ImhldjEuMS42Lkw5My5CMCIsd2lkdGg6ZixoZWlnaHQ6aCxjaHJvbWFGb3JtYXQ6cyxodmNDOnJ9fX0se2tleToiX3BhcnNlUHJvZmlsZVRpZXJMZXZlbCIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIpe3ZhciBhPXIuZ2VuZXJhbFRpZXJGbGFnfHwwO3IuZ2VuZXJhbFByb2ZpbGVTcGFjZT1lLnJlYWRCaXRzKDIpLHIuZ2VuZXJhbFRpZXJGbGFnPU1hdGgubWF4KGUucmVhZEJpdHMoMSksYSksci5nZW5lcmFsUHJvZmlsZUlkYz1NYXRoLm1heChlLnJlYWRCaXRzKDUpLHIuZ2VuZXJhbFByb2ZpbGVJZGN8fDApLHIuZ2VuZXJhbFByb2ZpbGVDb21wYXRpYmlsaXR5RmxhZ3M9ZS5yZWFkQml0cygzMiksci5nZW5lcmFsQ29uc3RyYWludEluZGljYXRvckZsYWdzPVtlLnJlYWRCaXRzKDgpLGUucmVhZEJpdHMoOCksZS5yZWFkQml0cyg4KSxlLnJlYWRCaXRzKDgpLGUucmVhZEJpdHMoOCksZS5yZWFkQml0cyg4KV07dmFyIG49ZS5yZWFkQml0cyg4KTthPHIuZ2VuZXJhbFRpZXJGbGFnP3IuZ2VuZXJhbExldmVsSWRjPW46ci5nZW5lcmFsTGV2ZWxJZGM9TWF0aC5tYXgobixyLmdlbmVyYWxMZXZlbElkY3x8MCk7dmFyIGk9W10scz1bXTtpZih0PmUuYml0c0F2YWlsYWJsZSl0aHJvdyBuZXcgRXJyb3IoIm1heFN1YkxheWVyc01pbnVzIGluYXZsaWQgc2l6ZSAiLmNvbmNhdCh0KSk7Zm9yKHZhciBvPTA7bzx0O28rKylpW29dPWUucmVhZEJpdHMoMSksc1tvXT1lLnJlYWRCaXRzKDEpO3Q+MCYmZS5yZWFkQml0cygyKig4LXQpKTtmb3IodmFyIHU9MDt1PHQ7dSsrKTAhPT1pW3VdJiYoZS5yZWFkQml0cygyKSxlLnJlYWRCaXRzKDEpLGUucmVhZEJpdHMoNSksZS5yZWFkQml0cygxNiksZS5yZWFkQml0cygxNiksZS5yZWFkQml0cyg0KSxlLnJlYWRCaXRzKDE2KSxlLnJlYWRCaXRzKDE2KSxlLnJlYWRCaXRzKDEyKSksMCE9PXNbdV0mJmUucmVhZEJpdHMoOCl9fV0pLGV9KCksa2U9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7cih0aGlzLGUpfXJldHVybiBuKGUsbnVsbCxbe2tleToiZ2V0RnJhbWVEdXJhdGlvbiIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIDIwfX0se2tleToicGFyc2VIZWFkZXJQYWNrZXRzIix2YWx1ZTpmdW5jdGlvbihlKXtpZihlLmxlbmd0aCl7Zm9yKHZhciB0PW5ldyBEYXRhVmlldyhlLmJ1ZmZlcixlLmJ5dGVPZmZzZXQsZS5ieXRlTGVuZ3RoKSxyPSIiLGE9MDthPDg7YSsrKXIrPVN0cmluZy5mcm9tQ29kZVBvaW50KGVbYV0pO2lmKCJPcHVzSGVhZCIhPT1yKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBPcHVzIE1hZ2ljU2lnbmF0dXJlIik7dmFyIG49ZVs5XTtjb25zb2xlLmxvZygiUHJlLXNraXAiLGVbMTBdLGVbMTFdKTt2YXIgaT10LmdldFVpbnQzMigxMiwhMCkscz10LmdldEludDE2KDE2LCEwKTtpZihpKXtyZXR1cm57b3V0cHV0R2FpbjpzLHNhbXBsZVJhdGU6aSxjaGFubmVsQ291bnQ6bixjb25maWc6bmV3IFVpbnQ4QXJyYXkoZS5idWZmZXIsZS5ieXRlT2Zmc2V0KzgsZS5ieXRlTGVuZ3RoLTgpLGNvZGVjOiJvcHVzIixvcmlnaW5Db2RlYzoib3B1cyJ9fX19fV0pLGV9KCksYmU9W10sX2U9T2JqZWN0LmNyZWF0ZShudWxsKSx4ZT1PYmplY3QuY3JlYXRlKG51bGwpLHdlPU9iamVjdC5jcmVhdGUobnVsbCksU2U9W107ZnVuY3Rpb24gQmUoZSl7cmV0dXJuKGV8fFtdKS5maWx0ZXIoQm9vbGVhbil9dmFyIFRlLEFlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3IodGhpcyxlKX1yZXR1cm4gbihlLFt7a2V5OiJyZWdpc3RlciIsdmFsdWU6ZnVuY3Rpb24oZSl7aWYoIWV8fCFlLmlkKXRocm93IG5ldyBFcnJvcigidmlkZW8gY29kZWMgaWQgaXMgcmVxdWlyZWQiKTt2YXIgdD1iZS5maW5kKChmdW5jdGlvbih0KXtyZXR1cm4gdC5pZD09PWUuaWR9KSk7cmV0dXJuIHQmJnRoaXMudW5yZWdpc3Rlcih0LmlkKSxiZS5wdXNoKGUpLGZ1bmN0aW9uKGUpe0JlKGUuc2FtcGxlRW50cmllcykuZm9yRWFjaCgoZnVuY3Rpb24odCl7X2VbdF09ZX0pKSxCZShlLmNvbmZpZ0JveGVzKS5mb3JFYWNoKChmdW5jdGlvbih0KXt4ZVt0XT1lfSkpLEJlKGUuY29kZWNTdHJpbmdQcmVmaXhlcykuZm9yRWFjaCgoZnVuY3Rpb24odCl7U2UucHVzaCh7cHJlZml4OnQsY29kZWM6ZX0pfSkpLGUuY29kZWNUeXBlJiYhd2VbZS5jb2RlY1R5cGVdJiYod2VbZS5jb2RlY1R5cGVdPWUpfShlKSxlfX0se2tleToidW5yZWdpc3RlciIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9YmUuZmluZEluZGV4KChmdW5jdGlvbih0KXtyZXR1cm4gdC5pZD09PWV9KSk7aWYoISh0PDApKXt2YXIgcj1wKGJlLnNwbGljZSh0LDEpLDEpWzBdO3JldHVybiBmdW5jdGlvbihlKXtCZShlLnNhbXBsZUVudHJpZXMpLmZvckVhY2goKGZ1bmN0aW9uKHQpe19lW3RdPT09ZSYmZGVsZXRlIF9lW3RdfSkpLEJlKGUuY29uZmlnQm94ZXMpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3hlW3RdPT09ZSYmZGVsZXRlIHhlW3RdfSkpLGUuY29kZWNUeXBlJiZ3ZVtlLmNvZGVjVHlwZV09PT1lJiZkZWxldGUgd2VbZS5jb2RlY1R5cGVdO2Zvcih2YXIgdD1TZS5sZW5ndGgtMTt0Pj0wO3QtLSlTZVt0XS5jb2RlYz09PWUmJlNlLnNwbGljZSh0LDEpfShyKSxyfX19LHtrZXk6ImdldEJ5U2FtcGxlRW50cnkiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBfZVtlXX19LHtrZXk6ImdldEJ5Q29uZmlnQm94Iix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4geGVbZV19fSx7a2V5OiJnZXRCeUNvZGVjVHlwZSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHdlW2VdfX0se2tleToiZ2V0QnlDb2RlY1N0cmluZyIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ7aWYoZSlyZXR1cm4gbnVsbD09PSh0PVNlLmZpbmQoKGZ1bmN0aW9uKHQpe3JldHVybiAwPT09ZS5pbmRleE9mKHQucHJlZml4KX0pKSl8fHZvaWQgMD09PXQ/dm9pZCAwOnQuY29kZWN9fSx7a2V5OiJnZXRCeVRyYWNrIix2YWx1ZTpmdW5jdGlvbihlKXtpZihlKXt2YXIgdD1lLnZ2Y2NTYW1wbGVFbnRyeVR5cGU7aWYodCYmdGhpcy5nZXRCeVNhbXBsZUVudHJ5KHQpKXJldHVybiB0aGlzLmdldEJ5U2FtcGxlRW50cnkodCk7dmFyIHI9dGhpcy5nZXRCeUNvZGVjU3RyaW5nKGUuY29kZWMpO3JldHVybiByfHx0aGlzLmdldEJ5Q29kZWNUeXBlKGUuY29kZWNUeXBlKX19fSx7a2V5OiJsaXN0Iix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBiZS5zbGljZSgpfX1dKSxlfSgpLEVlPW5ldyBBZTtmdW5jdGlvbiBDZSgpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7fTtyZXR1cm4gZS50cmFjaz9FZS5nZXRCeVRyYWNrKGUudHJhY2spOmUuc2FtcGxlRW50cnk/RWUuZ2V0QnlTYW1wbGVFbnRyeShlLnNhbXBsZUVudHJ5KTplLmNvbmZpZ0JveD9FZS5nZXRCeUNvbmZpZ0JveChlLmNvbmZpZ0JveCk6ZS5jb2RlY1R5cGU/RWUuZ2V0QnlDb2RlY1R5cGUoZS5jb2RlY1R5cGUpOmUuY29kZWM/RWUuZ2V0QnlDb2RlY1N0cmluZyhlLmNvZGVjKTp2b2lkIDB9VGU9e2lkOiJ2dmMiLGtpbmQ6InZpZGVvIixjb2RlY1R5cGU6VCxzYW1wbGVFbnRyaWVzOlsidnZjMSIsInZ2aTEiXSxjb25maWdCb3hlczpbInZ2Y0MiXSxjb2RlY1N0cmluZ1ByZWZpeGVzOlsidnZjMS4iLCJ2dmkxLiJdLHRyYWNrQ29uZmlnS2V5OiJ2dmNDIixzYW1wbGVFbnRyeVRyYWNrS2V5OiJ2dmNjU2FtcGxlRW50cnlUeXBlIixwYXJzZUNvbmZpZ0JveDpmdW5jdGlvbihlKXt2YXIgdD1lLmRhdGE7ZS5ib3g7dmFyIHI9ZS5zYW1wbGVFbnRyeVR5cGU7cmV0dXJuIG1lLnBhcnNlVlZDRGVjb2RlckNvbmZpZ3VyYXRpb25SZWNvcmQodCxyfHwidnZjMSIpfSxhcHBseVRyYWNrQ29uZmlnOmZ1bmN0aW9uKGUpe3ZhciB0LHIsYSxuLGkscyxvLHU7bj0odD1lKS50cmFjayxpPXQuZW50cnkscz10LmNvbmZpZyxvPXQuZGVmYXVsdFNhbXBsZUVudHJ5VHlwZSx1PXZvaWQgMD09PW8/InZ2YzEiOm8sbi5jb2RlY1R5cGU9VCxuLmNvZGVjPXMuY29kZWMsbi5zcHM9cy5zcHMsbi5wcHM9cy5wcHMsbi52cHM9cy52cHMsbi52dmNDPXMuZGF0YSxzLm5hbFVuaXRTaXplJiYobi5uYWxVbml0U2l6ZT1zLm5hbFVuaXRTaXplKSxuLnZ2Y2NTYW1wbGVFbnRyeVR5cGU9ImVuY3YiPT09aS50eXBlPyhudWxsPT09KHI9aS5zaW5mKXx8dm9pZCAwPT09cnx8bnVsbD09PShhPXIuZnJtYSl8fHZvaWQgMD09PWE/dm9pZCAwOmEuZGF0YV9mb3JtYXQpfHxzLnNhbXBsZUVudHJ5VHlwZXx8dTppLnR5cGV9LGdldFNhbXBsZUVudHJ5VHlwZTpmdW5jdGlvbihlKXtyZXR1cm4gZS50cmFjay52dmNjU2FtcGxlRW50cnlUeXBlfHwidnZjMSJ9LGdldENvbmZpZ0JveFR5cGU6ZnVuY3Rpb24oZSl7cmV0dXJuIGUudHJhY2ssInZ2Y0MifSxidWlsZENvbmZpZ0JveDpmdW5jdGlvbihlKXt2YXIgdD1lLnRyYWNrO3JldHVybiBmdW5jdGlvbihlKXt2YXIgdD1lLnRyYWNrLHI9ZS5NUDQsYT1lLmNvbmZpZ0JveFR5cGUsbj12b2lkIDA9PT1hPyJ2dmNDIjphO3JldHVybiByLmJveChyLnR5cGUobiksbmV3IFVpbnQ4QXJyYXkodC52dmNDKSl9KHt0cmFjazp0LE1QNDplLk1QNCxjb25maWdCb3hUeXBlOnRoaXMuZ2V0Q29uZmlnQm94VHlwZSh7dHJhY2s6dH0pfSl9LGJ1aWxkRnR5cDpmdW5jdGlvbihlKXtyZXR1cm4gZS50cmFjayxlLk1QNC5GVFlQVlZDMX0sbWFya1NhbXBsZTpmdW5jdGlvbihlKXt2YXIgcixhO3I9ZS5zYW1wbGUsKGE9bWUuZ2V0TmFsSW5mbyhyLnVuaXRzKSkmJihyLnNpZGVEYXRhPXQodCh7fSxyLnNpZGVEYXRhfHx7fSkse30se3Z2Y05hbEluZm86YX0pKX19LEVlLnJlZ2lzdGVyKFRlKTt2YXIgRGU9MWUzLEllPTVlMyxVZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxhLG4pe3IodGhpcyxlKSx0aGlzLnZpZGVvVHJhY2s9dCx0aGlzLmF1ZGlvVHJhY2s9YSx0aGlzLm1ldGFkYXRhVHJhY2s9bix0aGlzLl9iYXNlRHRzPS0xLHRoaXMuX2Jhc2VEdHNJbml0ZWQ9ITEsdGhpcy5fYXVkaW9OZXh0UHRzPXZvaWQgMCx0aGlzLl92aWRlb05leHREdHM9dm9pZCAwLHRoaXMuX2F1ZGlvVGltZXN0YW1wQnJlYWs9MCx0aGlzLl92aWRlb1RpbWVzdGFtcEJyZWFrPTAsdGhpcy5fbGFzdFZpZGVvRHVyYXRpb249MCx0aGlzLl9rZXlGcmFtZUluTmV4dENodW5rPSExLHRoaXMuX2xhc3RBdWRpb0V4Y2VwdGlvbkdhcERvdD0tMS8wLHRoaXMuX2xhc3RBdWRpb0V4Y2VwdGlvbk92ZXJsYXBEb3Q9LTEvMCx0aGlzLl9sYXN0QXVkaW9FeGNlcHRpb25MYXJnZUdhcERvdD0tMS8wLHRoaXMuX2xhc3RWaWRlb0V4Y2VwdGlvbkxhcmdlR2FwRG90PS0xLzAsdGhpcy5fbGFzdFZpZGVvRXhjZXB0aW9uQ2h1bmtGaXJzdER0c0RvdD0tMS8wfXJldHVybiBuKGUsW3trZXk6ImZpeCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOjAscj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdLGE9IShhcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSl8fGFyZ3VtZW50c1syXTt0PU1hdGgucm91bmQoMWUzKnQpO3ZhciBuPXRoaXMudmlkZW9UcmFjayxpPXRoaXMuYXVkaW9UcmFjazshciYmYXx8KHRoaXMuX3ZpZGVvTGFzdFNhbXBsZT1udWxsLHRoaXMuX2F1ZGlvTmV4dFB0cz12b2lkIDAsdGhpcy5fdmlkZW9OZXh0RHRzPXZvaWQgMCx0aGlzLl9hdWRpb1RpbWVzdGFtcEJyZWFrPTAsdGhpcy5fdmlkZW9UaW1lc3RhbXBCcmVhaz0wLHRoaXMuX2xhc3RBdWRpb0V4Y2VwdGlvbkdhcERvdD0tMS8wLHRoaXMuX2xhc3RBdWRpb0V4Y2VwdGlvbk92ZXJsYXBEb3Q9LTEvMCx0aGlzLl9sYXN0QXVkaW9FeGNlcHRpb25MYXJnZUdhcERvdD0tMS8wLHRoaXMuX2xhc3RWaWRlb0V4Y2VwdGlvbkxhcmdlR2FwRG90PS0xLzAsdGhpcy5fbGFzdFZpZGVvRXhjZXB0aW9uQ2h1bmtGaXJzdER0c0RvdD0tMS8wKSxyJiYhYSYmKHRoaXMuX2Jhc2VEdHNJbml0ZWQ9ITEpLHRoaXMuX2Jhc2VEdHNJbml0ZWR8fHRoaXMuX2NhbGN1bGF0ZUJhc2VEdHMoaSxuKSwhYSYmdCYmKHRoaXMuX2F1ZGlvTmV4dFB0cz10aGlzLl92aWRlb05leHREdHM9dCk7dmFyIHM9dGhpcy5fYmFzZUR0c0luaXRlZCYmKHRoaXMuX3ZpZGVvVGltZXN0YW1wQnJlYWt8fCF0aGlzLnZpZGVvVHJhY2suZXhpc3QoKSkmJih0aGlzLl9hdWRpb1RpbWVzdGFtcEJyZWFrfHwhdGhpcy5hdWRpb1RyYWNrLmV4aXN0KCkpO2lmKHMmJnRoaXMuX3Jlc2V0QmFzZUR0c1doZW5TdHJlYW1CcmVha2VkKCksdGhpcy5fZml4QXVkaW8oaSksdGhpcy5fa2V5RnJhbWVJbk5leHRDaHVuaz0hMSx0aGlzLl9maXhWaWRlbyhuKSx0aGlzLm1ldGFkYXRhVHJhY2suZXhpc3QoKSl7dmFyIG89dGhpcy5tZXRhZGF0YVRyYWNrLnRpbWVzY2FsZTt0aGlzLm1ldGFkYXRhVHJhY2suc2VpU2FtcGxlcy5mb3JFYWNoKChmdW5jdGlvbih0KXt0LnB0cz10Lm9yaWdpblB0cy1lLl9iYXNlRHRzLHQudGltZT1NYXRoLm1heCgwLHQucHRzKS9vfSkpLHRoaXMubWV0YWRhdGFUcmFjay5mbHZTY3JpcHRTYW1wbGVzLmZvckVhY2goKGZ1bmN0aW9uKHQpe3QucHRzPXQub3JpZ2luUHRzLWUuX2Jhc2VEdHMsdC50aW1lPU1hdGgubWF4KDAsdC5wdHMpL299KSl9bi5zYW1wbGVzLmxlbmd0aCYmKG4uYmFzZU1lZGlhRGVjb2RlVGltZT1uLnNhbXBsZXNbMF0uZHRzKSxpLnNhbXBsZXMubGVuZ3RoJiYoaS5iYXNlTWVkaWFEZWNvZGVUaW1lPWkuc2FtcGxlc1swXS5wdHMqaS50aW1lc2NhbGUvMWUzKX19LHtrZXk6Il9maXhWaWRlbyIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxyPWUuc2FtcGxlcztpZihyLmxlbmd0aCl7dmFyIGE7aWYoci5mb3JFYWNoKChmdW5jdGlvbihlKXtlLmR0cy09dC5fYmFzZUR0cyxlLnB0cy09dC5fYmFzZUR0cyxlLmtleWZyYW1lJiYodC5fa2V5RnJhbWVJbk5leHRDaHVuaz0hMCl9KSksZS5mcHNOdW0mJmUuZnBzRGVuKWE9ZS50aW1lc2NhbGUqKGUuZnBzRGVuL2UuZnBzTnVtKTtlbHNlIGlmKGUubGVuZ3RoPjEpe3ZhciBuPWUuc2FtcGxlc1swXSxpPWUuc2FtcGxlc1tyLmxlbmd0aC0xXTthPU1hdGguZmxvb3IoKGkuZHRzLW4uZHRzKS8oci5sZW5ndGgtMSkpfWVsc2UgYT10aGlzLl9sYXN0VmlkZW9EdXJhdGlvbnx8NDA7dmFyIHM9ci5wb3AoKTtpZih0aGlzLl92aWRlb0xhc3RTYW1wbGUmJnIudW5zaGlmdCh0aGlzLl92aWRlb0xhc3RTYW1wbGUpLHRoaXMuX3ZpZGVvTGFzdFNhbXBsZT1zLHIubGVuZ3RoKXtpZih2b2lkIDA9PT10aGlzLl92aWRlb05leHREdHMpe3ZhciBvPXJbMF07dGhpcy5fdmlkZW9OZXh0RHRzPW8uZHRzfXZhciB1PXIubGVuZ3RoLGM9MCxsPXJbMF0sZD10aGlzLl92aWRlb05leHREdHMtbC5kdHM7aWYoTWF0aC5hYnMoZCk+MjAwKXt2YXIgZjtpZihNYXRoLmFicyhsLmR0cy10aGlzLl9sYXN0VmlkZW9FeGNlcHRpb25DaHVua0ZpcnN0RHRzRG90KT41ZTMpdGhpcy5fbGFzdFZpZGVvRXhjZXB0aW9uQ2h1bmtGaXJzdER0c0RvdD1sLmR0cyxlLndhcm5pbmdzLnB1c2goe3R5cGU6TSxuZXh0RHRzOnRoaXMuX3ZpZGVvTmV4dER0cyxmaXJzdFNhbXBsZUR0czpsLmR0cyxuZXh0U2FtcGxlRHRzOm51bGw9PT0oZj1yWzFdKXx8dm9pZCAwPT09Zj92b2lkIDA6Zi5kdHMsc2FtcGxlRHVyYXRpb246ZH0pO3RoaXMuX3ZpZGVvVGltZXN0YW1wQnJlYWs+PTU/KHRoaXMuX3ZpZGVvTmV4dER0cz1sLmR0cyx0aGlzLl92aWRlb1RpbWVzdGFtcEJyZWFrPTApOihsLmR0cys9ZCxsLnB0cys9ZCx0aGlzLmF1ZGlvVHJhY2suZXhpc3QoKXx8KHRoaXMuX3ZpZGVvVGltZXN0YW1wQnJlYWs9MSkpfWZvcih2YXIgaD0wO2g8dTtoKyspe3ZhciB2PXJbaF0uZHRzLHA9cltoKzFdOygoYz1oPHUtMT9wLmR0cy12OnM/cy5kdHMtdjphKT4xZTN8fGM8MCkmJih0aGlzLl92aWRlb1RpbWVzdGFtcEJyZWFrKyssTWF0aC5hYnModi10aGlzLl9sYXN0VmlkZW9FeGNlcHRpb25MYXJnZUdhcERvdCk+NWUzJiYodGhpcy5fbGFzdFZpZGVvRXhjZXB0aW9uTGFyZ2VHYXBEb3Q9dixlLndhcm5pbmdzLnB1c2goe3R5cGU6UCx0aW1lOnYvZS50aW1lc2NhbGUsZHRzOnYsb3JpZ2luRHRzOnJbaF0ub3JpZ2luRHRzLG5leHREdHM6dGhpcy5fdmlkZW9OZXh0RHRzLHNhbXBsZUR1cmF0aW9uOmMscmVmU2FtcGxlRHVyYXRpb246YX0pKSxjPWEpLHJbaF0uZHVyYXRpb249Yyx0aGlzLl92aWRlb05leHREdHMrPWMsdGhpcy5fbGFzdFZpZGVvRHVyYXRpb249Y319fX19LHtrZXk6Il9maXhBdWRpbyIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxyPWUuc2FtcGxlcztyLmxlbmd0aCYmKHIuZm9yRWFjaCgoZnVuY3Rpb24oZSl7ZS5kdHM9ZS5wdHMtPXQuX2Jhc2VEdHN9KSksdGhpcy5fZG9GaXhBdWRpb0ludGVybmFsKGUsciwxZTMpKX19LHtrZXk6Il9jYWxjdWxhdGVCYXNlRHRzIix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciByPWUuc2FtcGxlcyxhPXQuc2FtcGxlcztpZighci5sZW5ndGgmJiFhLmxlbmd0aClyZXR1cm4hMTt2YXIgbj0xLzAsaT0xLzA7ci5sZW5ndGgmJihlLmJhc2VEdHM9bj1yWzBdLnB0cyksYS5sZW5ndGgmJih0LmJhc2VEdHM9aT1hWzBdLmR0cyksdGhpcy5fYmFzZUR0cz1NYXRoLm1pbihuLGkpO3ZhciBzPWktbjtyZXR1cm4gTnVtYmVyLmlzRmluaXRlKHMpJiZNYXRoLmFicyhzKT41MDAmJnQud2FybmluZ3MucHVzaCh7dHlwZTpVLHZpZGVvQmFzZUR0czppLGF1ZGlvQmFzZVB0czpuLGJhc2VEdHM6dGhpcy5fYmFzZUR0cyxkZWx0YTpzfSksdGhpcy5fYmFzZUR0c0luaXRlZD0hMCwhMH19LHtrZXk6Il9yZXNldEJhc2VEdHNXaGVuU3RyZWFtQnJlYWtlZCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLl9jYWxjdWxhdGVCYXNlRHRzKHRoaXMuYXVkaW9UcmFjayx0aGlzLnZpZGVvVHJhY2spJiYodGhpcy5hdWRpb1RyYWNrLmV4aXN0KCk/dGhpcy52aWRlb1RyYWNrLmV4aXN0KCk/dGhpcy5fYmFzZUR0cy09TWF0aC5taW4odGhpcy5fYXVkaW9OZXh0UHRzLHRoaXMuX3ZpZGVvTmV4dER0cyk6dGhpcy5fYmFzZUR0cy09dGhpcy5fYXVkaW9OZXh0UHRzOnRoaXMuX2Jhc2VEdHMtPXRoaXMuX3ZpZGVvTmV4dER0cyx0aGlzLl92aWRlb1RpbWVzdGFtcEJyZWFrPTAsdGhpcy5fYXVkaW9UaW1lc3RhbXBCcmVhaz0wKX19LHtrZXk6Il9kb0ZpeEF1ZGlvSW50ZXJuYWwiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyKXtpZighZS5zYW1wbGVEdXJhdGlvbilzd2l0Y2goZS5jb2RlY1R5cGUpe2Nhc2UgQTplLnNhbXBsZUR1cmF0aW9uPWhlLmdldEZyYW1lRHVyYXRpb24oZS50aW1lc2NhbGUscik7YnJlYWs7Y2FzZSBEOmUuc2FtcGxlRHVyYXRpb249a2UuZ2V0RnJhbWVEdXJhdGlvbihlLnNhbXBsZXMscik7YnJlYWs7Y2FzZSBFOmNhc2UgQzplLnNhbXBsZUR1cmF0aW9uPXRoaXMuX2dldEc3MTFEdXJhdGlvbihlKTticmVhaztkZWZhdWx0OmNvbnNvbGUuZXJyb3IoImNhbid0IGZpeCBhdWRpbyBjb2RlY1R5cGU6IixlLmNvZGVjVHlwZSl9dmFyIGE9ZS5zYW1wbGVEdXJhdGlvbixuPWUuY29kZWNUeXBlPT09RD8yMDplLmNvZGVjVHlwZT09PUE/MTAyNDphKmUudGltZXNjYWxlLzFlMztpZih2b2lkIDA9PT10aGlzLl9hdWRpb05leHRQdHMpe3ZhciBpPXRbMF07dGhpcy5fYXVkaW9OZXh0UHRzPWkucHRzfWZvcih2YXIgcz0wO3M8dC5sZW5ndGg7cysrKXt2YXIgbz10aGlzLl9hdWRpb05leHRQdHMsdT10W3NdLGM9dS5wdHMtbztpZigwPT09cyYmdGhpcy5fYXVkaW9UaW1lc3RhbXBCcmVhaz49NSYmdGhpcy5fa2V5RnJhbWVJbk5leHRDaHVuayYmKG89dGhpcy5fYXVkaW9OZXh0UHRzPXUuZHRzLGM9MCx0aGlzLl9hdWRpb1RpbWVzdGFtcEJyZWFrPTApLCF0aGlzLl9hdWRpb1RpbWVzdGFtcEJyZWFrJiZjPj0zKmEmJmM8PURlJiYhJCl7dmFyIGw9dGhpcy5fZ2V0U2lsZW50RnJhbWUoZSl8fHRbMF0uZGF0YS5zdWJhcnJheSgpLGQ9TWF0aC5mbG9vcihjL2EpO01hdGguYWJzKHUucHRzLXRoaXMuX2xhc3RBdWRpb0V4Y2VwdGlvbkdhcERvdCk+SWUmJih0aGlzLl9sYXN0QXVkaW9FeGNlcHRpb25HYXBEb3Q9dS5wdHMsZS53YXJuaW5ncy5wdXNoKHt0eXBlOlIscHRzOnUucHRzLG9yaWdpblB0czp1Lm9yaWdpblB0cyxjb3VudDpkLG5leHRQdHM6byxyZWZTYW1wbGVEdXJhdGlvbjphfSkpO2Zvcih2YXIgZj0wO2Y8ZDtmKyspe3ZhciBoPW5ldyBOKE1hdGguZmxvb3IodGhpcy5fYXVkaW9OZXh0UHRzK2EpLU1hdGguZmxvb3IodGhpcy5fYXVkaW9OZXh0UHRzKSxsLG4pO2gub3JpZ2luUHRzPU1hdGguZmxvb3IodGhpcy5fYmFzZUR0cytvKSx0LnNwbGljZShzLDAsaCksdGhpcy5fYXVkaW9OZXh0UHRzKz1hLHMrK31zLS19ZWxzZSBpZihjPD0tMyphJiZjPj0tMWUzKU1hdGguYWJzKHUucHRzLXRoaXMuX2xhc3RBdWRpb0V4Y2VwdGlvbk92ZXJsYXBEb3QpPkllJiYodGhpcy5fbGFzdEF1ZGlvRXhjZXB0aW9uT3ZlcmxhcERvdD11LnB0cyxlLndhcm5pbmdzLnB1c2goe3R5cGU6eixwdHM6dS5wdHMsb3JpZ2luUHRzOnUub3JpZ2luUHRzLG5leHRQdHM6byxyZWZTYW1wbGVEdXJhdGlvbjphfSkpLHQuc3BsaWNlKHMsMSkscy0tO2Vsc2V7aWYoTWF0aC5hYnMoYyk+RGUmJih0aGlzLl9hdWRpb1RpbWVzdGFtcEJyZWFrKyssTWF0aC5hYnModS5wdHMtdGhpcy5fbGFzdEF1ZGlvRXhjZXB0aW9uTGFyZ2VHYXBEb3QpPkllJiYodGhpcy5fbGFzdEF1ZGlvRXhjZXB0aW9uTGFyZ2VHYXBEb3Q9dS5wdHMsZS53YXJuaW5ncy5wdXNoKHt0eXBlOk8sdGltZTp1LnB0cy8xZTMscHRzOnUucHRzLG9yaWdpblB0czp1Lm9yaWdpblB0cyxuZXh0UHRzOm8sc2FtcGxlRHVyYXRpb246YyxyZWZTYW1wbGVEdXJhdGlvbjphfSkpKSxlLmNvZGVjVHlwZT09PUQpe3ZhciB2PXRbdC5sZW5ndGgtMV07diYmKHYuZHVyYXRpb249dS5wdHMtdi5wdHMpfWVsc2UgdS5kdHM9dS5wdHM9byx1LmR1cmF0aW9uPW47dGhpcy5fYXVkaW9OZXh0UHRzKz1hfX19fSx7a2V5OiJfZ2V0RzcxMUR1cmF0aW9uIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1lLnNhbXBsZVNpemUscj1lLmNoYW5uZWxDb3VudCxhPWUuc2FtcGxlUmF0ZSxuPWUuc2FtcGxlc1swXTtpZihuKXJldHVybiAyKm4uZGF0YS5ieXRlTGVuZ3RoL3IvKHQvOCkvYSoxZTN9fSx7a2V5OiJfZ2V0U2lsZW50RnJhbWUiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBlLmNvZGVjVHlwZT09PUE/aGUuZ2V0U2lsZW50RnJhbWUoZS5jb2RlYyxlLmNoYW5uZWxDb3VudCk6bmV3IFVpbnQ4QXJyYXkoOCplLnNhbXBsZUR1cmF0aW9uKmUuY2hhbm5lbENvdW50KX19XSksZX0oKSxQZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXtyKHRoaXMsZSl9cmV0dXJuIG4oZSxudWxsLFt7a2V5OiJwYXJzZSIsdmFsdWU6ZnVuY3Rpb24odCl7aWYoISh0Lmxlbmd0aDwzKSl7dmFyIHI9e30sYT1lLl9wYXJzZVZhbHVlKG5ldyBEYXRhVmlldyh0LmJ1ZmZlcix0LmJ5dGVPZmZzZXQsdC5ieXRlTGVuZ3RoKSksbj1lLl9wYXJzZVZhbHVlKG5ldyBEYXRhVmlldyh0LmJ1ZmZlcix0LmJ5dGVPZmZzZXQrYS5zaXplLHQuYnl0ZUxlbmd0aC1hLnNpemUpKTtyZXR1cm4gclthLmRhdGFdPW4uZGF0YSxyfX19LHtrZXk6Il9wYXJzZVZhbHVlIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgcixhPXQuYnl0ZUxlbmd0aCxuPTEsaT0hMTtzd2l0Y2godC5nZXRVaW50OCgwKSl7Y2FzZSAwOnI9dC5nZXRGbG9hdDY0KDEpLG4rPTg7YnJlYWs7Y2FzZSAxOnI9ISF0LmdldFVpbnQ4KDEpLG4rPTE7YnJlYWs7Y2FzZSAyOnZhciBzPWUuX3BhcnNlU3RyaW5nKG5ldyBEYXRhVmlldyh0LmJ1ZmZlcix0LmJ5dGVPZmZzZXQrbix0LmJ5dGVMZW5ndGgtbikpO3I9cy5kYXRhLG4rPXMuc2l6ZTticmVhaztjYXNlIDM6cj17fTt2YXIgbz0wO2Zvcig5PT0oMTY3NzcyMTUmdC5nZXRVaW50MzIoYS00KSkmJihvPTMpO248YS00Oyl7dmFyIHU9ZS5fcGFyc2VPYmplY3QobmV3IERhdGFWaWV3KHQuYnVmZmVyLHQuYnl0ZU9mZnNldCtuLHQuYnl0ZUxlbmd0aC1uLW8pKSxjPXUuc2l6ZSxsPXUuZGF0YTtpZih1LmlzRW5kKWJyZWFrO3JbbC5uYW1lXT1sLnZhbHVlLG4rPWN9aWYobjw9YS0zKTk9PT0oMTY3NzcyMTUmdC5nZXRVaW50MzIobi0xKSkmJihuKz0zKTticmVhaztjYXNlIDg6cj17fSxuKz00O3ZhciBkPTA7Zm9yKDk9PSgxNjc3NzIxNSZ0LmdldFVpbnQzMihhLTQpKSYmKGQ9Myk7bjxhLTg7KXt2YXIgZj1lLl9wYXJzZU9iamVjdChuZXcgRGF0YVZpZXcodC5idWZmZXIsdC5ieXRlT2Zmc2V0K24sdC5ieXRlTGVuZ3RoLW4tZCkpLGg9Zi5zaXplLHY9Zi5kYXRhO2lmKGYuaXNFbmQpYnJlYWs7clt2Lm5hbWVdPXYudmFsdWUsbis9aH1pZihuPD1hLTMpOT09PSgxNjc3NzIxNSZ0LmdldFVpbnQzMihuLTEpKSYmKG4rPTMpO2JyZWFrO2Nhc2UgOTpyPXZvaWQgMCxuPTEsaT0hMDticmVhaztjYXNlIDEwOnI9W107dmFyIHA9dC5nZXRVaW50MzIoMSk7bis9NDtmb3IodmFyIHk9MDt5PHA7eSsrKXt2YXIgbT1lLl9wYXJzZVZhbHVlKG5ldyBEYXRhVmlldyh0LmJ1ZmZlcix0LmJ5dGVPZmZzZXQrbix0LmJ5dGVMZW5ndGgtbikpLGc9bS5kYXRhLGs9bS5zaXplO3IucHVzaChnKSxuKz1rfWJyZWFrO2Nhc2UgMTE6dmFyIGI9dC5nZXRGbG9hdDY0KG4pKzZlNCp0LmdldEludDE2KG4rOCk7cj1uZXcgRGF0ZShiKSxuKz0xMDticmVhaztjYXNlIDEyOnZhciBfPXQuZ2V0VWludDMyKDEpO24rPTQscj0iIixfPjAmJihyPVEuZGVjb2RlKG5ldyBVaW50OEFycmF5KHQuYnVmZmVyLHQuYnl0ZU9mZnNldCtuLF8pKSksbis9XzticmVhaztkZWZhdWx0Om49YX1yZXR1cm57ZGF0YTpyLHNpemU6bixpc0VuZDppfX19LHtrZXk6Il9wYXJzZVN0cmluZyIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5nZXRVaW50MTYoMCkscj0iIjtyZXR1cm4gdD4wJiYocj1RLmRlY29kZShuZXcgVWludDhBcnJheShlLmJ1ZmZlcixlLmJ5dGVPZmZzZXQrMix0KSkpLHtkYXRhOnIsc2l6ZToyK3R9fX0se2tleToiX3BhcnNlT2JqZWN0Iix2YWx1ZTpmdW5jdGlvbih0KXtpZighKHQuYnl0ZUxlbmd0aDwzKSl7dmFyIHI9ZS5fcGFyc2VTdHJpbmcodCksYT1lLl9wYXJzZVZhbHVlKG5ldyBEYXRhVmlldyh0LmJ1ZmZlcix0LmJ5dGVPZmZzZXQrci5zaXplLHQuYnl0ZUxlbmd0aC1yLnNpemUpKTtyZXR1cm57ZGF0YTp7bmFtZTpyLmRhdGEsdmFsdWU6YS5kYXRhfSxzaXplOnIuc2l6ZSthLnNpemUsaXNFbmQ6YS5pc0VuZH19fX1dKSxlfSgpLE1lPTcsT2U9OCxSZT0xMCx6ZT0xMyxMZT1uZXcgWCgiRmx2RGVtdXhlciIpLEZlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LGEsbil7cih0aGlzLGUpLGkodGhpcywiX2hlYWRlclBhcnNlZCIsITEpLGkodGhpcywiX3JlbWFpbmluZ0RhdGEiLG51bGwpLGkodGhpcywiX2dvcElkIiwwKSxpKHRoaXMsIl9uZWVkQWRkTWV0YUJlZm9yZUtleUZyYW1lTmFsIiwhMCksdGhpcy52aWRlb1RyYWNrPXR8fG5ldyBMLHRoaXMuYXVkaW9UcmFjaz1hfHxuZXcgRix0aGlzLm1ldGFkYXRhVHJhY2s9bnx8bmV3IEgsdGhpcy5fZml4ZXI9bmV3IFVlKHRoaXMudmlkZW9UcmFjayx0aGlzLmF1ZGlvVHJhY2ssdGhpcy5tZXRhZGF0YVRyYWNrKX1yZXR1cm4gbihlLFt7a2V5OiJkZW11eCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIHIsYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdLG49IShhcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSl8fGFyZ3VtZW50c1syXSxpPWFyZ3VtZW50cy5sZW5ndGg+Mz9hcmd1bWVudHNbM106dm9pZCAwLHM9dGhpcy5hdWRpb1RyYWNrLG89dGhpcy52aWRlb1RyYWNrLHU9dGhpcy5tZXRhZGF0YVRyYWNrO2lmKCFhJiZufHwodGhpcy5fcmVtYWluaW5nRGF0YT1udWxsKSxhJiYodGhpcy5faGVhZGVyUGFyc2VkPSExKSxhPyhvLnJlc2V0KCkscy5yZXNldCgpLHUucmVzZXQoKSk6KG8uc2FtcGxlcz1bXSxzLnNhbXBsZXM9W10sdS5zZWlTYW1wbGVzPVtdLHUuZmx2U2NyaXB0U2FtcGxlcz1bXSxvLndhcm5pbmdzPVtdLHMud2FybmluZ3M9W10sdGhpcy5fcmVtYWluaW5nRGF0YSYmKHQ9cmUodGhpcy5fcmVtYWluaW5nRGF0YSx0KSx0aGlzLl9yZW1haW5pbmdEYXRhPW51bGwpKSwhdC5sZW5ndGgpcmV0dXJue3ZpZGVvVHJhY2s6byxhdWRpb1RyYWNrOnMsbWV0YWRhdGFUcmFjazp1fTt2YXIgYz0wO2lmKCF0aGlzLl9oZWFkZXJQYXJzZWQpe2lmKCFlLnByb2JlKHQpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBmbHYgZmlsZSIpO3MucHJlc2VudD0oNCZ0WzRdKT4+PjIhPTAsby5wcmVzZW50PTAhPSgxJnRbNF0pLHRoaXMuX2hlYWRlclBhcnNlZD0hMCxjPWllKHQsNSkrNH1mb3IodmFyIGwsZCxmLGgsdixwPXQubGVuZ3RoO2MrMTU8cCYmKGw9dFtjXSwhKGMrMTUrKGQ9dFtjKzFdPDwxNnx0W2MrMl08PDh8dFtjKzNdKT5wKSk7KWY9KHRbYys3XTw8MjQ+Pj4wKSsodFtjKzRdPDwxNikrKHRbYys1XTw8OCkrdFtjKzZdLGMrPTExLGg9dC5zdWJhcnJheShjLGMrZCksOD09PWw/dGhpcy5fcGFyc2VBdWRpbyhoLGYpOjk9PT1sPyhpJiYodGhpcy5zZWFtbGVzc0xvYWRpbmdTd2l0Y2hpbmc9ITApLHRoaXMuX3BhcnNlVmlkZW8oaCxmKSk6MTg9PT1sP3RoaXMuX3BhcnNlU2NyaXB0KGgsZik6TGUud2FybigiSW52YWxpZCB0YWcgdHlwZTogIi5jb25jYXQobCkpLCh2PWllKHQsYys9ZCkpIT09MTErZCYmTGUud2FybigiSW52YWxpZCBQcmV2VGFnU2l6ZSAiLmNvbmNhdCh2LCIgKCIpLmNvbmNhdCgxMStkLCIpIikpLGMrPTQ7YzxwJiYodGhpcy5fcmVtYWluaW5nRGF0YT10LnN1YmFycmF5KGMpKSxzLmZvcm1hdFRpbWVzY2FsZT1vLmZvcm1hdFRpbWVzY2FsZT1vLnRpbWVzY2FsZT11LnRpbWVzY2FsZT0xZTMscy50aW1lc2NhbGU9cy5jb2RlY1R5cGU9PT1EPzFlMzpzLnNhbXBsZVJhdGV8fDAsIXMuZXhpc3QoKSYmcy5oYXNTYW1wbGUoKSYmcy5yZXNldCgpLCFvLmV4aXN0KCkmJm8uaGFzU2FtcGxlKCkmJm8ucmVzZXQoKTt2YXIgeT11LmZsdlNjcmlwdFNhbXBsZXNbdS5mbHZTY3JpcHRTYW1wbGVzLmxlbmd0aC0xXSxtPW51bGw9PXl8fG51bGw9PT0ocj15LmRhdGEpfHx2b2lkIDA9PT1yP3ZvaWQgMDpyLm9uTWV0YURhdGE7cmV0dXJuIG0mJihudWxsIT1vJiZvLmV4aXN0KCkmJihtLmhhc093blByb3BlcnR5KCJkdXJhdGlvbiIpJiYoby5kdXJhdGlvbj0xZTMqbS5kdXJhdGlvbiksIW8ud2lkdGgmJm0uaGFzT3duUHJvcGVydHkoIndpZHRoIikmJihvLndpZHRoPW0ud2lkdGgpLCFvLmhlaWdodCYmbS5oYXNPd25Qcm9wZXJ0eSgiaGVpZ2h0IikmJihvLmhlaWdodD1tLmhlaWdodCkpLG51bGwhPXMmJnMuZXhpc3QoKSYmbS5oYXNPd25Qcm9wZXJ0eSgiZHVyYXRpb24iKSYmKHMuZHVyYXRpb249MWUzKm0uZHVyYXRpb24pKSx7dmlkZW9UcmFjazpvLGF1ZGlvVHJhY2s6cyxtZXRhZGF0YVRyYWNrOnV9fX0se2tleToiZml4Iix2YWx1ZTpmdW5jdGlvbihlLHQscil7cmV0dXJuIHRoaXMuX2ZpeGVyLmZpeChlLHQscikse3ZpZGVvVHJhY2s6dGhpcy52aWRlb1RyYWNrLGF1ZGlvVHJhY2s6dGhpcy5hdWRpb1RyYWNrLG1ldGFkYXRhVHJhY2s6dGhpcy5tZXRhZGF0YVRyYWNrfX19LHtrZXk6ImRlbXV4QW5kRml4Iix2YWx1ZTpmdW5jdGlvbihlLHQscixhLG4pe3JldHVybiB0aGlzLmRlbXV4KGUsdCxyLG4pLHRoaXMuZml4KGEsdCxyKX19LHtrZXk6Il9wYXJzZUF1ZGlvIix2YWx1ZTpmdW5jdGlvbih0LHIpe2lmKHQubGVuZ3RoKXt2YXIgYT0oMjQwJnRbMF0pPj4+NCxuPXRoaXMuYXVkaW9UcmFjaztpZihhIT09UmUmJmEhPT1NZSYmYSE9PU9lJiZhIT09emUpcmV0dXJuIExlLndhcm4oIlVuc3VwcG9ydGVkIHNvdW5kIGZvcm1hdDogIi5jb25jYXQoYSkpLHZvaWQgbi5yZXNldCgpO2lmKGEhPT1SZSYmYSE9PXplKXt2YXIgaT0oMTImdFswXSk+PjIscz0oMiZ0WzBdKT4+MSxvPTEmdFswXTtuLnNhbXBsZVJhdGU9ZS5BVURJT19SQVRFW2ldLG4uc2FtcGxlU2l6ZT1zPzE2Ojgsbi5jaGFubmVsQ291bnQ9bysxfXN3aXRjaChhKXtjYXNlIE1lOmNhc2UgT2U6dGhpcy5fcGFyc2VHNzExKHQscixhKTticmVhaztjYXNlIFJlOnRoaXMuX3BhcnNlQWFjKHQscik7YnJlYWs7Y2FzZSB6ZTp0aGlzLl9wYXJzZU9wdXModCxyKX19fX0se2tleToiX3BhcnNlT3B1cyIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzLmF1ZGlvVHJhY2ssYT1lWzFdO3N3aXRjaChyLmNvZGVjVHlwZT1ELGEpe2Nhc2UgMDp2YXIgbj1rZS5wYXJzZUhlYWRlclBhY2tldHMoZS5zdWJhcnJheSgyKSk7bj8oci5jb2RlYz1uLmNvZGVjLHIuY2hhbm5lbENvdW50PW4uY2hhbm5lbENvdW50LHIuc2FtcGxlUmF0ZT1uLnNhbXBsZVJhdGUsci5jb25maWc9bi5jb25maWcsci5zYW1wbGVEdXJhdGlvbj1rZS5nZXRGcmFtZUR1cmF0aW9uKFtdLHIudGltZXNjYWxlKSk6KHIucmVzZXQoKSxMZS53YXJuKCJDYW5ub3QgcGFyc2UgQXVkaW9TcGVjaWZpY0NvbmZpZyIsZSkpO2JyZWFrO2Nhc2UgMTppZihudWxsPT10KXJldHVybjt2YXIgaT1uZXcgTih0LGUuc3ViYXJyYXkoMiksci5zYW1wbGVEdXJhdGlvbik7ci5zYW1wbGVzLnB1c2goaSk7YnJlYWs7ZGVmYXVsdDpMZS53YXJuKCJVbmtub3duIE9wdXNQYWNrZXRUeXBlOiAiLmNvbmNhdChhKSl9fX0se2tleToiX3BhcnNlRzcxMSIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIpe3ZhciBhPXRoaXMuYXVkaW9UcmFjayxuPWUuc3ViYXJyYXkoMSk7aWYoIShuLmJ5dGVMZW5ndGg8MSkpe3ZhciBpPW5ldyBOKHQsbik7YS5jb2RlY1R5cGU9Nz09PXI/RTpDLGEuc2FtcGxlUmF0ZT04ZTMsYS5jb2RlYz1hLmNvZGVjVHlwZSxhLnNhbXBsZXMucHVzaChpKX19fSx7a2V5OiJfcGFyc2VBYWMiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIHI9dGhpcy5hdWRpb1RyYWNrO2lmKHIuY29kZWNUeXBlPUEsMD09PWVbMV0pe3ZhciBhPWhlLnBhcnNlQXVkaW9TcGVjaWZpY0NvbmZpZyhlLnN1YmFycmF5KDIpKTthPyhyLmNvZGVjPWEuY29kZWMsci5jaGFubmVsQ291bnQ9YS5jaGFubmVsQ291bnQsci5zYW1wbGVSYXRlPWEuc2FtcGxlUmF0ZSxyLmNvbmZpZz1hLmNvbmZpZyxyLm9iamVjdFR5cGU9YS5vYmplY3RUeXBlLHIuc2FtcGxlUmF0ZUluZGV4PWEuc2FtcGxpbmdGcmVxdWVuY3lJbmRleCk6KHIucmVzZXQoKSxMZS53YXJuKCJDYW5ub3QgcGFyc2UgQXVkaW9TcGVjaWZpY0NvbmZpZyIsZSkpfWVsc2UgaWYoMT09PWVbMV0pe2lmKG51bGw9PXQpcmV0dXJuO3Iuc2FtcGxlcy5wdXNoKG5ldyBOKHQsZS5zdWJhcnJheSgyKSkpfWVsc2UgTGUud2FybigiVW5rbm93biBBQUNQYWNrZXRUeXBlOiAiLmNvbmNhdChlWzFdKSl9fSx7a2V5OiJfcGFyc2VWaWRlbyIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzO2lmKCEoZS5sZW5ndGg8Nikpe3ZhciBhPSgyNDAmZVswXSk+Pj40LG49MTUmZVswXSxpPXRoaXMudmlkZW9UcmFjaztpZig3IT09biYmMTIhPT1uKXJldHVybiBpLnJlc2V0KCksdm9pZCBMZS53YXJuKCJVbnN1cHBvcnRlZCBjb2RlY0lkOiAiLmNvbmNhdChuKSk7dmFyIHM9MTI9PT1uO2kuY29kZWNUeXBlPXM/QjpTO3ZhciBvPWVbMV0sdT0oZVsyXTw8MTZ8ZVszXTw8OHxlWzRdKTw8OD4+ODtpZigwPT09byl7dmFyIGM9ZS5zdWJhcnJheSg1KSxsPXM/Z2UucGFyc2VIRVZDRGVjb2RlckNvbmZpZ3VyYXRpb25SZWNvcmQoYyk6cGUucGFyc2VBVkNEZWNvZGVyQ29uZmlndXJhdGlvblJlY29yZChjKTtpZihsKXt2YXIgZD1sLmh2Y0MsZj1sLnNwcyxoPWwucHBzQXJyLHY9bC5zcHNBcnIscD1sLnZwc0Fycix5PWwubmFsVW5pdFNpemU7ZCYmKGkuaHZjQz1pLmh2Y0N8fGQpLGYmJihpLmNvZGVjPWYuY29kZWMsaS53aWR0aD1mLndpZHRoLGkuaGVpZ2h0PWYuaGVpZ2h0LGkuc2FyUmF0aW89Zi5zYXJSYXRpbyxpLmZwc051bT1mLmZwc051bSxpLmZwc0Rlbj1mLmZwc0Rlbiksdi5sZW5ndGgmJihpLnNwcz12KSxoLmxlbmd0aCYmKGkucHBzPWgpLHAmJnAubGVuZ3RoJiYoaS52cHM9cCkseSYmKGkubmFsVW5pdFNpemU9eSl9ZWxzZSBMZS53YXJuKCJDYW5ub3QgcGFyc2UgIi5jb25jYXQocz8iSEVWQyI6IkFWQyIsIkRlY29kZXJDb25maWd1cmF0aW9uUmVjb3JkIiksZSl9ZWxzZSBpZigxPT09byl7dmFyIG09dmUucGFyc2VBdmNDKGUuc3ViYXJyYXkoNSksaS5uYWxVbml0U2l6ZSk7aWYoKG09dGhpcy5fY2hlY2tBZGRNZXRhTmFsVG9Vbml0cyhzLG0saSkpJiZtLmxlbmd0aCl7dmFyIGc9bmV3IFYodCt1LHQsbSk7aWYodGhpcy5zZWFtbGVzc0xvYWRpbmdTd2l0Y2hpbmcmJnQ8aS5sYXN0S2V5RnJhbWVEdHMpcmV0dXJuO3RoaXMuc2VhbWxlc3NMb2FkaW5nU3dpdGNoaW5nPSExLDE9PT1hJiYoZy5zZXRUb0tleWZyYW1lKCksaS5sYXN0S2V5RnJhbWVEdHM9dCksaS5zYW1wbGVzLnB1c2goZyksbS5mb3JFYWNoKChmdW5jdGlvbihlKXt2YXIgYT1zP2VbMF0+Pj4xJjYzOjMxJmVbMF07c3dpdGNoKGEpe2Nhc2UgNTpjYXNlIDE2OmNhc2UgMTc6Y2FzZSAxODpjYXNlIDE5OmNhc2UgMjA6Y2FzZSAyMTpjYXNlIDIyOmNhc2UgMjM6aWYoIXMmJjUhPT1hfHxzJiY1PT09YSlicmVhaztnLnNldFRvS2V5ZnJhbWUoKTticmVhaztjYXNlIDY6Y2FzZSAzOTpjYXNlIDQwOmlmKCFzJiY2IT09YXx8cyYmNj09PWEpYnJlYWs7ci5tZXRhZGF0YVRyYWNrLnNlaVNhbXBsZXMucHVzaChuZXcgSyh2ZS5wYXJzZVNFSSh2ZS5yZW1vdmVFUEIoZSkscyksdCt1KSl9fSkpLGcua2V5ZnJhbWUmJnRoaXMuX2dvcElkKyssZy5nb3BJZD10aGlzLl9nb3BJZH1lbHNlIExlLndhcm4oIkNhbm5vdCBwYXJzZSBOQUxVcyIsZSl9ZWxzZSAyPT09b3x8TGUud2FybigiVW5rbm93biBBVkNQYWNrZXRUeXBlOiAiLmNvbmNhdChvKSl9fX0se2tleToiX2NoZWNrQWRkTWV0YU5hbFRvVW5pdHMiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZSYmdGhpcy5fbmVlZEFkZE1ldGFCZWZvcmVLZXlGcmFtZU5hbD90Lm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGVbMF0+Pj4xJjYzfSkpLmluY2x1ZGVzKDMyKT8odGhpcy5fbmVlZEFkZE1ldGFCZWZvcmVLZXlGcmFtZU5hbD0hMSx0KToodC51bnNoaWZ0KHIucHBzWzBdKSx0LnVuc2hpZnQoci5zcHNbMF0pLHQudW5zaGlmdChyLnZwc1swXSksdC5maWx0ZXIoQm9vbGVhbikpOih0aGlzLl9uZWVkQWRkTWV0YUJlZm9yZUtleUZyYW1lTmFsPSExLHQpfX0se2tleToiX3BhcnNlU2NyaXB0Iix2YWx1ZTpmdW5jdGlvbihlLHQpe3RoaXMubWV0YWRhdGFUcmFjay5mbHZTY3JpcHRTYW1wbGVzLnB1c2gobmV3IEcoUGUucGFyc2UoZSksdCkpfX1dLFt7a2V5OiJwcm9iZSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIDcwPT09ZVswXSYmNzY9PT1lWzFdJiY4Nj09PWVbMl0mJjE9PT1lWzNdJiZpZShlLDUpPj05fX1dKSxlfSgpO2Z1bmN0aW9uIFZlKGUpe3JldHVybihlfHxbXSkuZmlsdGVyKEJvb2xlYW4pfWkoRmUsIkFVRElPX1JBVEUiLFs1NTAwLDExZTMsMjJlMyw0NGUzXSksbmV3IFgoIlRzRGVtdXhlciIpO3ZhciBOZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXtyKHRoaXMsZSl9cmV0dXJuIG4oZSxudWxsLFt7a2V5OiJmaW5kQm94Iix2YWx1ZTpmdW5jdGlvbih0LHIpe3ZhciBhPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTowLG49W107aWYoIXQpcmV0dXJuIG47Zm9yKHZhciBpPTAscz0iIixvPTA7dC5sZW5ndGg+Nzspe2lmKGk9aWUodCkscz1TdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsdC5zdWJhcnJheSg0LDgpKSxvPTgsMT09PWk/KGk9b2UodCw4KSxvKz04KTppfHwoaT10Lmxlbmd0aCksIXJbMF18fHM9PT1yWzBdKXt2YXIgdT10LnN1YmFycmF5KDAsaSk7aWYoIShyLmxlbmd0aDwyKSlyZXR1cm4gZS5maW5kQm94KHUuc3ViYXJyYXkobyksci5zbGljZSgxKSxhK28pO24ucHVzaCh7c3RhcnQ6YSxzaXplOmksaGVhZGVyU2l6ZTpvLHR5cGU6cyxkYXRhOnV9KX1hKz1pLHQ9dC5zdWJhcnJheShpKX1yZXR1cm4gbn19LHtrZXk6InRmaGQiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBIZShlLCEwLChmdW5jdGlvbihlLHQpe2UudHJhY2tJZD1pZSh0KTt2YXIgcj00LGE9MSZlLmZsYWdzLG49MiZlLmZsYWdzLGk9OCZlLmZsYWdzLHM9MTYmZS5mbGFncyxvPTMyJmUuZmxhZ3M7YSYmKHIrPTQsZS5iYXNlRGF0YU9mZnNldD1pZSh0LHIpLHIrPTQpLG4mJihlLnNhbXBsZURlc2NyaXB0aW9uSW5kZXg9aWUodCxyKSxyKz00KSxpJiYoZS5kZWZhdWx0U2FtcGxlRHVyYXRpb249aWUodCxyKSxyKz00KSxzJiYoZS5kZWZhdWx0U2FtcGxlU2l6ZT1pZSh0LHIpLHIrPTQpLG8mJihlLmRlZmF1bHRTYW1wbGVGbGFncz1pZSh0LHIpKX0pKX19LHtrZXk6InNpZHgiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBIZShlLCEwLChmdW5jdGlvbihlLHQpe3ZhciByPTA7ZS5yZWZlcmVuY2VfSUQ9aWUodCxyKSxyKz00LGUudGltZXNjYWxlPWllKHQscikscis9NCwwPT09ZS52ZXJzaW9uPyhlLmVhcmxpZXN0X3ByZXNlbnRhdGlvbl90aW1lPWllKHQscikscis9NCxlLmZpcnN0X29mZnNldD1pZSh0LHIpLHIrPTQpOihlLmVhcmxpZXN0X3ByZXNlbnRhdGlvbl90aW1lPW9lKHQscikscis9OCxlLmZpcnN0X29mZnNldD1vZSh0LHIpLHIrPTgpLHIrPTIsZS5yZWZlcmVuY2VzPVtdO3ZhciBhPW5lKHQscik7cis9Mjtmb3IodmFyIG49MDtuPGE7bisrKXt2YXIgaT17fTtlLnJlZmVyZW5jZXMucHVzaChpKTt2YXIgcz1pZSh0LHIpO3IrPTQsaS5yZWZlcmVuY2VfdHlwZT1zPj4zMSYxLGkucmVmZXJlbmNlZF9zaXplPTIxNDc0ODM2NDcmcyxpLnN1YnNlZ21lbnRfZHVyYXRpb249aWUodCxyKSxzPWllKHQscis9NCkscis9NCxpLnN0YXJ0c193aXRoX1NBUD1zPj4zMSYxLGkuU0FQX3R5cGU9cz4+MjgmNyxpLlNBUF9kZWx0YV90aW1lPTI2ODQzNTQ1NSZzfX0pKX19LHtrZXk6Im1vb3YiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiBIZSh0LCExLChmdW5jdGlvbih0LHIsYSl7dC5tdmhkPWUubXZoZChlLmZpbmRCb3gocixbIm12aGQiXSxhKVswXSksdC50cmFrPWUuZmluZEJveChyLFsidHJhayJdLGEpLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIGUudHJhayh0KX0pKSx0LnBzc2g9ZS5wc3NoKGUuZmluZEJveChyLFsicHNzaCJdLGEpWzBdKX0pKX19LHtrZXk6Im12aGQiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBIZShlLCEwLChmdW5jdGlvbihlLHQpe3ZhciByPTA7MT09PWUudmVyc2lvbj8oZS50aW1lc2NhbGU9aWUodCwxNiksZS5kdXJhdGlvbj1vZSh0LDIwKSxyKz0yOCk6KGUudGltZXNjYWxlPWllKHQsOCksZS5kdXJhdGlvbj1pZSh0LDEyKSxyKz0xNiksZS5uZXh0VHJhY2tJZD1pZSh0LHIrNzYpfSkpfX0se2tleToidHJhayIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIEhlKHQsITEsKGZ1bmN0aW9uKHQscixhKXt0LnRraGQ9ZS50a2hkKGUuZmluZEJveChyLFsidGtoZCJdLGEpWzBdKSx0Lm1kaWE9ZS5tZGlhKGUuZmluZEJveChyLFsibWRpYSJdLGEpWzBdKSx0LmVkdHM9ZS5lZHRzKGUuZmluZEJveChyLFsiZWR0cyJdLGEpWzBdKX0pKX19LHtrZXk6InRraGQiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBIZShlLCEwLChmdW5jdGlvbihlLHQpe3ZhciByPVkuZnJvbVVpbnQ4KHQpOzE9PT1lLnZlcnNpb24/KHIucmVhZCg4KSxyLnJlYWQoOCksZS50cmFja0lkPXIucmVhZCg0KSxyLnJlYWQoNCksZS5kdXJhdGlvbj1yLnJlYWQoOCkpOihyLnJlYWQoNCksci5yZWFkKDQpLGUudHJhY2tJZD1yLnJlYWQoNCksci5yZWFkKDQpLGUuZHVyYXRpb249ci5yZWFkKDQpKSxyLnNraXAoMTYpLGUubWF0cml4PVtdO2Zvcih2YXIgYT0wO2E8MzY7YSsrKWUubWF0cml4LnB1c2goci5yZWFkKDEpKTtyLmJhY2soMzYpO2Zvcih2YXIgbixpPVtdLHM9MDtzPDM7cysrKWkucHVzaChmZShyLnJlYWRJbnQoMiksci5yZWFkSW50KDIpKSksaS5wdXNoKGZlKHIucmVhZEludCgyKSxyLnJlYWRJbnQoMikpKSxuPXIucmVhZEludCg0KSxpLnB1c2goZmUobj4+MzAsMTA3Mzc0MTgyMyZuKSk7ZS5yb3RhdGlvbj1mdW5jdGlvbihlKXtpZihlLmxlbmd0aDw1KXJldHVybiAwO3ZhciB0PU1hdGguaHlwb3QoZVswXSxlWzNdKSxyPU1hdGguaHlwb3QoZVsxXSxlWzRdKTtyZXR1cm4gMD09PXR8fDA9PT1yPzA6MTgwKk1hdGguYXRhbjIoZVsxXS9yLGVbMF0vdCkvTWF0aC5QSX0oaSksZS53aWR0aD1yLnJlYWQoNCksZS5oZWlnaHQ9ci5yZWFkKDQpfSkpfX0se2tleToibWRpYSIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIEhlKHQsITEsKGZ1bmN0aW9uKHQscixhKXt0Lm1kaGQ9ZS5tZGhkKGUuZmluZEJveChyLFsibWRoZCJdLGEpWzBdKSx0LmhkbHI9ZS5oZGxyKGUuZmluZEJveChyLFsiaGRsciJdLGEpWzBdKSx0Lm1pbmY9ZS5taW5mKGUuZmluZEJveChyLFsibWluZiJdLGEpWzBdKX0pKX19LHtrZXk6ImVkdHMiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiBIZSh0LCExLChmdW5jdGlvbih0LHIsYSl7dC5lbHN0PWUuZWxzdChlLmZpbmRCb3gocixbImVsc3QiXSxhKVswXSl9KSl9fSx7a2V5OiJlbHN0Iix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gSGUoZSwhMCwoZnVuY3Rpb24oZSx0LHIpe2UuZW50cmllcz1bXSxlLmVudHJpZXNEYXRhPXQ7dmFyIGE9MCxuPWllKHQsYSk7YSs9NDtmb3IodmFyIGk9MDtpPG47aSsrKXt2YXIgcz17fTtlLmVudHJpZXMucHVzaChzKSwxPT09ZS52ZXJzaW9uPyhzLnNlZ21lbnRfZHVyYXRpb249b2UodCxhKSxhKz04LHMubWVkaWFfdGltZT11ZSh0LGEpLGErPTgpOihzLnNlZ21lbnRfZHVyYXRpb249aWUodCxhKSxhKz00LHMubWVkaWFfdGltZT1zZSh0LGEpLGErPTQpLHMubWVkaWFfcmF0ZV9pbnRlZ2VyPW5lKHQsYSksYSs9MixzLm1lZGlhX3JhdGVfZnJhY3Rpb249bmUodCxyKSxhKz0yfX0pKX19LHtrZXk6Im1kaGQiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBIZShlLCEwLChmdW5jdGlvbihlLHQpe3ZhciByPTA7MT09PWUudmVyc2lvbj8oZS50aW1lc2NhbGU9aWUodCwxNiksZS5kdXJhdGlvbj1vZSh0LDIwKSxyKz0yOCk6KGUudGltZXNjYWxlPWllKHQsOCksZS5kdXJhdGlvbj1pZSh0LDEyKSxyKz0xNik7dmFyIGE9bmUodCxyKTtlLmxhbmd1YWdlPVN0cmluZy5mcm9tQ2hhckNvZGUoOTYrKGE+PjEwJjMxKSw5NisoYT4+NSYzMSksOTYrKDMxJmEpKX0pKX19LHtrZXk6ImhkbHIiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBIZShlLCEwLChmdW5jdGlvbihlLHQpezA9PT1lLnZlcnNpb24mJihlLmhhbmRsZXJUeXBlPVN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCx0LnN1YmFycmF5KDQsOCkpKX0pKX19LHtrZXk6Im1pbmYiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiBIZSh0LCExLChmdW5jdGlvbih0LHIsYSl7dC52bWhkPWUudm1oZChlLmZpbmRCb3gocixbInZtaGQiXSxhKVswXSksdC5zbWhkPWUuc21oZChlLmZpbmRCb3gocixbInNtaGQiXSxhKVswXSksdC5zdGJsPWUuc3RibChlLmZpbmRCb3gocixbInN0YmwiXSxhKVswXSl9KSl9fSx7a2V5OiJ2bWhkIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gSGUoZSwhMCwoZnVuY3Rpb24oZSx0KXtlLmdyYXBoaWNzbW9kZT1uZSh0KSxlLm9wY29sb3I9W25lKHQsMiksbmUodCw0KSxuZSh0LDYpXX0pKX19LHtrZXk6InNtaGQiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBIZShlLCEwLChmdW5jdGlvbihlLHQpe2UuYmFsYW5jZT1uZSh0KX0pKX19LHtrZXk6InN0YmwiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiBIZSh0LCExLChmdW5jdGlvbih0LHIsYSl7dmFyIG4saSxzO3Quc3RzZD1lLnN0c2QoZS5maW5kQm94KHIsWyJzdHNkIl0sYSlbMF0pLHQuc3R0cz1lLnN0dHMoZS5maW5kQm94KHIsWyJzdHRzIl0sYSlbMF0pLHQuY3R0cz1lLmN0dHMoZS5maW5kQm94KHIsWyJjdHRzIl0sYSlbMF0pLHQuc3RzYz1lLnN0c2MoZS5maW5kQm94KHIsWyJzdHNjIl0sYSlbMF0pLHQuc3Rzej1lLnN0c3ooZS5maW5kQm94KHIsWyJzdHN6Il0sYSlbMF0pLHQuc3Rjbz1lLnN0Y28oZS5maW5kQm94KHIsWyJzdGNvIl0sYSlbMF0pLHQuc3Rjb3x8KHQuY282ND1lLmNvNjQoZS5maW5kQm94KHIsWyJjbzY0Il0sYSlbMF0pLHQuc3Rjbz10LmNvNjQpO3ZhciBvPW51bGw9PT0obj10LnN0c2QuZW50cmllc1swXSl8fHZvaWQgMD09PW58fG51bGw9PT0oaT1uLnNpbmYpfHx2b2lkIDA9PT1pfHxudWxsPT09KHM9aS5zY2hpKXx8dm9pZCAwPT09cz92b2lkIDA6cy50ZW5jLmRlZmF1bHRfSVZfc2l6ZTt0LnN0c3M9ZS5zdHNzKGUuZmluZEJveChyLFsic3RzcyJdLGEpWzBdKSx0LnNlbmM9ZS5zZW5jKGUuZmluZEJveChyLFsic2VuYyJdLGEpWzBdLG8pfSkpfX0se2tleToic2VuYyIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjg7cmV0dXJuIEhlKGUsITAsKGZ1bmN0aW9uKGUscil7dmFyIGE9MCxuPWllKHIsYSk7YSs9NCxlLnNhbXBsZXM9W107Zm9yKHZhciBpPTA7aTxuO2krKyl7Zm9yKHZhciBzPXtJbml0aWFsaXphdGlvblZlY3RvcjpbXX0sbz0wO288dDtvKyspcy5Jbml0aWFsaXphdGlvblZlY3RvcltvXT1yW2Erb107aWYoYSs9dCwyJmUuZmxhZ3Mpe3Muc3Vic2FtcGxlcz1bXTt2YXIgdT1uZShyLGEpO2ErPTI7Zm9yKHZhciBjPTA7Yzx1O2MrKyl7dmFyIGw9e307bC5CeXRlc09mQ2xlYXJEYXRhPW5lKHIsYSksYSs9MixsLkJ5dGVzT2ZQcm90ZWN0ZWREYXRhPWllKHIsYSksYSs9NCxzLnN1YnNhbXBsZXMucHVzaChsKX19ZS5zYW1wbGVzLnB1c2gocyl9fSkpfX0se2tleToicHNzaCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIEhlKGUsITAsKGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPVtdLGE9W10sbj0wLGk9MDtpPDE2O2krKylhLnB1c2goV2UodFtuK2ldKSk7aWYobis9MTYsZS52ZXJzaW9uPjApe3ZhciBzPWllKHQsbik7bis9NDtmb3IodmFyIG89MDtvPCgiIitzKS5sZW5ndGg7bysrKWZvcih2YXIgdT0wO3U8MTY7dSsrKXt2YXIgYz10W25dO24rPTEsci5wdXNoKFdlKGMpKX19dmFyIGw9aWUodCxuKTtlLmRhdGFfc2l6ZT1sLG4rPTQsZS5raWQ9cixlLnN5c3RlbV9pZD1hLGUuYnVmZmVyPXR9KSl9fSx7a2V5OiJ2dmMxIix2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gZS52aWRlb1NhbXBsZUVudHJ5KHQpfX0se2tleToidnZjQyIsdmFsdWU6ZnVuY3Rpb24odCxyKXtyZXR1cm4gZS52aWRlb0NvbmZpZ0JveCh0LHJ8fCJ2dmMxIil9fSx7a2V5OiJ2aWRlb0NvbmZpZ0JveCIsdmFsdWU6ZnVuY3Rpb24odCxyKXtpZih0KXt2YXIgYT1DZSh7Y29uZmlnQm94OnQudHlwZX0pO2lmKG51bGwhPWEmJmEucGFyc2VDb25maWdCb3gpcmV0dXJuIEhlKHQsITEsKGZ1bmN0aW9uKG4saSl7dmFyIHM9YS5wYXJzZUNvbmZpZ0JveCh7ZGF0YTppLGJveDp0LHNhbXBsZUVudHJ5VHlwZTpyLHBhcnNlcjplfSk7Zm9yKHZhciBvIGluIHMpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsbykmJihuW29dPXNbb10pfSkpfX19LHtrZXk6InZpZGVvU2FtcGxlRW50cnkiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciByPUNlKHtzYW1wbGVFbnRyeTpudWxsPT10P3ZvaWQgMDp0LnR5cGV9KTtpZihyKXJldHVybiBIZSh0LCExLChmdW5jdGlvbih0LGEsbil7dmFyIGk9R2UodCxhKSxzPWEuc3ViYXJyYXkoaSk7bis9aSxWZShyLmNvbmZpZ0JveGVzKS5zb21lKChmdW5jdGlvbihhKXt2YXIgaT1lLmZpbmRCb3gocyxbYV0sbilbMF0sbz1lLnZpZGVvQ29uZmlnQm94KGksdC50eXBlKTtyZXR1cm4hIW8mJih0W3IudHJhY2tDb25maWdLZXl8fGFdPW8sITApfSkpLHQucGFzcD1lLnBhc3AoZS5maW5kQm94KHMsWyJwYXNwIl0sbilbMF0pfSkpfX0se2tleToic3RzZCIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIEhlKHQsITAsKGZ1bmN0aW9uKHQscixhKXt0LmVudHJ5Q291bnQ9aWUociksdC5lbnRyaWVzPWUuZmluZEJveChyLnN1YmFycmF5KDQpLFtdLGErNCkubWFwKChmdW5jdGlvbih0KXtzd2l0Y2godC50eXBlKXtjYXNlImF2MDEiOnJldHVybiBlLmF2MDEodCk7Y2FzZSJhdmMxIjpjYXNlImF2YzIiOmNhc2UiYXZjMyI6Y2FzZSJhdmM0IjpyZXR1cm4gZS5hdmMxKHQpO2Nhc2UiaHZjMSI6Y2FzZSJoZXYxIjpyZXR1cm4gZS5odmMxKHQpO2Nhc2UidnZjMSI6Y2FzZSJ2dmkxIjpyZXR1cm4gZS52dmMxKHQpO2Nhc2UibXA0YSI6cmV0dXJuIGUubXA0YSh0KTtjYXNlImFsYXciOmNhc2UidWxhdyI6cmV0dXJuIGUuYWxhdyh0KTtjYXNlImVuY2EiOnJldHVybiBIZSh0LCExLChmdW5jdGlvbih0LHIsYSl7dC5jaGFubmVsQ291bnQ9bmUociwxNiksdC5zYW1wbGVzaXplPW5lKHIsMTgpLHQuc2FtcGxlUmF0ZT1pZShyLDI0KS82NTUzNixyPXIuc3ViYXJyYXkoMjgpLHQuc2luZj1lLnNpbmYoZS5maW5kQm94KHIsWyJzaW5mIl0sYSlbMF0pLHQuZXNkcz1lLmVzZHMoZS5maW5kQm94KHIsWyJlc2RzIl0sYSlbMF0pfSkpO2Nhc2UiZW5jdiI6cmV0dXJuIEhlKHQsITEsKGZ1bmN0aW9uKHQscixhKXt2YXIgbixpO3Qud2lkdGg9bmUociwyNCksdC5oZWlnaHQ9bmUociwyNiksdC5ob3JpenJlc29sdXRpb249aWUociwyOCksdC52ZXJ0cmVzb2x1dGlvbj1pZShyLDMyKSxyPXIuc3ViYXJyYXkoNzgpLHQuc2luZj1lLnNpbmYoZS5maW5kQm94KHIsWyJzaW5mIl0sYSlbMF0pLHQuYXZjQz1lLmF2Y0MoZS5maW5kQm94KHIsWyJhdmNDIl0sYSlbMF0pLHQuaHZjQz1lLmh2Y0MoZS5maW5kQm94KHIsWyJodmNDIl0sYSlbMF0pO3ZhciBzPW51bGw9PT0obj10LnNpbmYpfHx2b2lkIDA9PT1ufHxudWxsPT09KGk9bi5mcm1hKXx8dm9pZCAwPT09aT92b2lkIDA6aS5kYXRhX2Zvcm1hdCxvPUNlKHtzYW1wbGVFbnRyeTpzfSk7KG8/W29dOkVlLmxpc3QoKSkuc29tZSgoZnVuY3Rpb24obil7cmV0dXJuIFZlKG4uY29uZmlnQm94ZXMpLnNvbWUoKGZ1bmN0aW9uKGkpe3ZhciBvPWUudmlkZW9Db25maWdCb3goZS5maW5kQm94KHIsW2ldLGEpWzBdLHMpO3JldHVybiEhbyYmKHRbbi50cmFja0NvbmZpZ0tleXx8aV09bywhMCl9KSl9KSksdC5wYXNwPWUucGFzcChlLmZpbmRCb3gocixbInBhc3AiXSxhKVswXSl9KSk7ZGVmYXVsdDppZihDZSh7c2FtcGxlRW50cnk6dC50eXBlfSkpcmV0dXJuIGUudmlkZW9TYW1wbGVFbnRyeSh0KX19KSkuZmlsdGVyKEJvb2xlYW4pfSkpfX0se2tleToidGVuYyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIEhlKGUsITEsKGZ1bmN0aW9uKGUsdCl7dmFyIHI9NjtlLmRlZmF1bHRfSXNFbmNyeXB0ZWQ9dFtyXSxyKz0xLGUuZGVmYXVsdF9JVl9zaXplPXRbcl0scis9MSxlLmRlZmF1bHRfS0lEPVtdO2Zvcih2YXIgYT0wO2E8MTY7YSsrKWUuZGVmYXVsdF9LSUQucHVzaChXZSh0W3JdKSkscis9MX0pKX19LHtrZXk6InNjaGkiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiBIZSh0LCExLChmdW5jdGlvbih0LHIsYSl7dC50ZW5jPWUudGVuYyhlLmZpbmRCb3gocixbInRlbmMiXSxhKVswXSl9KSl9fSx7a2V5OiJzaW5mIix2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gSGUodCwhMSwoZnVuY3Rpb24odCxyLGEpe3Quc2NoaT1lLnNjaGkoZS5maW5kQm94KHIsWyJzY2hpIl0sYSlbMF0pLHQuZnJtYT1lLmZybWEoZS5maW5kQm94KHIsWyJmcm1hIl0sYSlbMF0pfSkpfX0se2tleToiZnJtYSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIEhlKGUsITEsKGZ1bmN0aW9uKGUsdCl7ZS5kYXRhX2Zvcm1hdD0iIjtmb3IodmFyIHI9MDtyPDQ7cisrKWUuZGF0YV9mb3JtYXQrPVN0cmluZy5mcm9tQ2hhckNvZGUodFtyXSl9KSl9fSx7a2V5OiJjb2xyIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gSGUoZSwhMSwoZnVuY3Rpb24odCxyKXt2YXIgYT1ZLmZyb21VaW50OChyKTt0LmRhdGE9ZS5kYXRhLHQuY29sb3JUeXBlPWEucmVhZFN0cmluZyg0KSwibmNseCI9PT10LmNvbG9yVHlwZXx8Im5jbGMiPT09dC5jb2xvclR5cGU/KHQuY29sb3JQcmltYXJpZXM9YS5yZWFkKDIpLHQudHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M9YS5yZWFkKDIpLHQubWF0cml4Q29lZmZpY2llbnRzPWEucmVhZCgyKSwibmNseCI9PT10LmNvbG9yVHlwZSYmKHQuZnVsbFJhbmdlRmxhZz1hLnJlYWQoMSk+PjcpKToicklDQyIhPT10LmNvbG9yVHlwZSYmInByb2YiIT09dC5jb2xvclR5cGV8fCh0LmljY1Byb2ZpbGU9YS5yZWFkVG9VaW50OCgpKX0pKX19LHtrZXk6ImF2MDEiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiBIZSh0LCExLChmdW5jdGlvbih0LHIsYSl7dmFyIG49R2UodCxyKSxpPXIuc3ViYXJyYXkobik7YSs9bix0LmF2MUM9ZS5hdjFDKGUuZmluZEJveChpLFsiYXYxQyJdLGEpWzBdKSx0LmNvbHI9ZS5jb2xyKGUuZmluZEJveChpLFsiY29sciJdLGEpWzBdKX0pKX19LHtrZXk6ImF2MUMiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBIZShlLCExLChmdW5jdGlvbih0LHIpe3QuZGF0YT1lLmRhdGE7dmFyIGEsbj1ZLmZyb21VaW50OChyKSxpPVcuZnJvbUJ5dGUobiw0KTt0Lm1hcmtlcj1pLnJlYWQoMSksdC52ZXJzaW9uPWkucmVhZCg3KSx0LnNlcVByb2ZpbGU9aS5yZWFkKDMpLHQuc2VxTGV2ZWxJZHgwPWkucmVhZCg1KSx0LnNlcVRpZXIwPWkucmVhZCgxKSx0LmhpZ2hCaXRkZXB0aD1pLnJlYWQoMSksdC50d2VsdmVCaXQ9aS5yZWFkKDEpLHQubW9ub2Nocm9tZT1pLnJlYWQoMSksdC5jaHJvbWFTdWJzYW1wbGluZ1g9aS5yZWFkKDEpLHQuY2hyb21hU3Vic2FtcGxpbmdZPWkucmVhZCgxKSx0LmNocm9tYVNhbXBsZVBvc2l0aW9uPWkucmVhZCgyKSx0LnJlc2VydmVkPWkucmVhZCgzKSx0LmluaXRpYWxQcmVzZW50YXRpb25EZWxheVByZXNlbnQ9aS5yZWFkKDEpLHQuaW5pdGlhbFByZXNlbnRhdGlvbkRlbGF5UHJlc2VudD90LmluaXRpYWxQcmVzZW50YXRpb25EZWxheU1pbnVzT25lPWkucmVhZCg0KTp0LmluaXRpYWxQcmVzZW50YXRpb25EZWxheU1pbnVzT25lPTAsdC5jb25maWdPQlVzPW4ucmVhZFRvVWludDgoKSwyPT09dC5zZXFQcm9maWxlJiYxPT09dC5oaWdoQml0ZGVwdGg/YT0xPT09dC50d2VsdmVCaXQ/IjEyIjoiMTAiOnQuc2VxUHJvZmlsZTw9MiYmKGE9MT09PXQuaGlnaEJpdGRlcHRoPyIxMCI6IjA4IiksdC5jb2RlYz1bImF2MDEiLHQuc2VxUHJvZmlsZSwodC5zZXFMZXZlbElkeDA8MTA/IjAiK3Quc2VxTGV2ZWxJZHgwOnQuc2VxTGV2ZWxJZHgwKSsodC5zZXFUaWVyMD8iSCI6Ik0iKSxhXS5qb2luKCIuIil9KSl9fSx7a2V5OiJhdmMxIix2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gSGUodCwhMSwoZnVuY3Rpb24odCxyLGEpe3ZhciBuPUdlKHQsciksaT1yLnN1YmFycmF5KG4pO2ErPW4sdC5hdmNDPWUuYXZjQyhlLmZpbmRCb3goaSxbImF2Y0MiXSxhKVswXSksdC5wYXNwPWUucGFzcChlLmZpbmRCb3goaSxbInBhc3AiXSxhKVswXSl9KSl9fSx7a2V5OiJhdmNDIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gSGUoZSwhMSwoZnVuY3Rpb24odCxyKXt0LmRhdGE9ZS5kYXRhLHQuY29uZmlndXJhdGlvblZlcnNpb249clswXSx0LkFWQ1Byb2ZpbGVJbmRpY2F0aW9uPXJbMV0sdC5wcm9maWxlQ29tcGF0aWJpbGl0eT1yWzJdLHQuQVZDTGV2ZWxJbmRpY2F0aW9uPXJbM10sdC5jb2RlYz1jZShbclsxXSxyWzJdLHJbM11dKSx0Lmxlbmd0aFNpemVNaW51c09uZT0zJnJbNF0sdC5zcHNMZW5ndGg9MzEmcls1XSx0LnNwcz1bXTtmb3IodmFyIGE9NixuPTA7bjx0LnNwc0xlbmd0aDtuKyspe3ZhciBpPW5lKHIsYSk7YSs9Mix0LnNwcy5wdXNoKHIuc3ViYXJyYXkoYSxhK2kpKSxhKz1pfXQucHBzTGVuZ3RoPXJbYV0sYSs9MSx0LnBwcz1bXTtmb3IodmFyIHM9MDtzPHQucHBzTGVuZ3RoO3MrKyl7dmFyIG89bmUocixhKTthKz0yLHQucHBzLnB1c2goci5zdWJhcnJheShhLGErPW8pKSxhKz1vfX0pKX19LHtrZXk6Imh2YzEiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiBIZSh0LCExLChmdW5jdGlvbih0LHIsYSl7dmFyIG49R2UodCxyKSxpPXIuc3ViYXJyYXkobik7YSs9bix0Lmh2Y0M9ZS5odmNDKGUuZmluZEJveChpLFsiaHZjQyJdLGEpWzBdKSx0LnBhc3A9ZS5wYXNwKGUuZmluZEJveChpLFsicGFzcCJdLGEpWzBdKX0pKX19LHtrZXk6Imh2Y0MiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBIZShlLCExLChmdW5jdGlvbih0LHIpe3QuZGF0YT1lLmRhdGEsdC5jb2RlYz0iaGV2MS4xLjYuTDkzLkIwIix0LmNvbmZpZ3VyYXRpb25WZXJzaW9uPXJbMF07dmFyIGE9clsxXTt0LmdlbmVyYWxQcm9maWxlU3BhY2U9YT4+Nix0LmdlbmVyYWxUaWVyRmxhZz0oMzImYSk+PjUsdC5nZW5lcmFsUHJvZmlsZUlkYz0zMSZhLHQuZ2VuZXJhbFByb2ZpbGVDb21wYXRpYmlsaXR5PWllKHIsMiksdC5nZW5lcmFsQ29uc3RyYWludEluZGljYXRvckZsYWdzPXIuc3ViYXJyYXkoNiwxMiksdC5nZW5lcmFsTGV2ZWxJZGM9clsxMl0sdC5hdmdGcmFtZVJhdGU9bmUociwxOSksdC5udW1PZkFycmF5cz1yWzIyXSx0LnZwcz1bXSx0LnNwcz1bXSx0LnBwcz1bXTtmb3IodmFyIG49MjMsaT0wLHM9MCxvPTAsdT0wO3U8dC5udW1PZkFycmF5czt1Kyspe2k9NjMmcltuXSxzPW5lKHIsbisxKSxuKz0zO2Zvcih2YXIgYyxsPVtdLGQ9MDtkPHM7ZCsrKW89bmUocixuKSxuKz0yLGwucHVzaChyLnN1YmFycmF5KG4sbitvKSksbis9bztpZigzMj09PWkpKGM9dC52cHMpLnB1c2guYXBwbHkoYyxsKTtlbHNlIGlmKDMzPT09aSl7dmFyIGY7KGY9dC5zcHMpLnB1c2guYXBwbHkoZixsKX1lbHNlIGlmKDM0PT09aSl7dmFyIGg7KGg9dC5wcHMpLnB1c2guYXBwbHkoaCxsKX19fSkpfX0se2tleToicGFzcCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIEhlKGUsITEsKGZ1bmN0aW9uKGUsdCl7ZS5oU3BhY2luZz1pZSh0KSxlLnZTcGFjaW5nPWllKHQsNCl9KSl9fSx7a2V5OiJtcDRhIix2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gSGUodCwhMSwoZnVuY3Rpb24odCxyLGEpe3ZhciBuPUtlKHQscik7dC5lc2RzPWUuZXNkcyhlLmZpbmRCb3goci5zdWJhcnJheShuKSxbImVzZHMiXSxhK24pWzBdKX0pKX19LHtrZXk6ImVzZHMiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBIZShlLCEwLChmdW5jdGlvbihlLHQpe2UuY29kZWM9Im1wNGEuIjtmb3IodmFyIHI9MCxhPTAsbj0wLGk9MDt0Lmxlbmd0aDspe2ZvcihpPXRbcj0wXSxhPXRbcisxXSxyKz0yOzEyOCZhOyluPSgxMjcmYSk8PDcsYT10W3JdLHIrPTE7aWYobis9MTI3JmEsMz09PWkpdD10LnN1YmFycmF5KHIrMyk7ZWxzZXtpZig0IT09aSl7aWYoNT09PWkpe3ZhciBzPWUuY29uZmlnPXQuc3ViYXJyYXkocixyK24pLG89KDI0OCZzWzBdKT4+MztpZigzMT09PW8mJnMubGVuZ3RoPj0yJiYobz0zMisoKDcmc1swXSk8PDMpKygoMjI0JnNbMV0pPj41KSksZS5vYmplY3RUeXBlPW8sZS5jb2RlYys9by50b1N0cmluZygxNiksL15tcDRhL2dpLnRlc3QoZS5jb2RlYykmJnMubGVuZ3RoPj0yKXt2YXIgdT0oNyZzWzBdKTw8MXwoMTI4JnNbMV0pPj43O2Uuc2FtcGxpbmdGcmVxdWVuY3lJbmRleD11LHU8aGUuRlJFUS5sZW5ndGgmJihlLnNhbXBsZVJhdGU9aGUuRlJFUVt1XSl9cmV0dXJuIHZvaWQoIi4iPT09ZS5jb2RlY1tlLmNvZGVjLmxlbmd0aC0xXSYmKGUuY29kZWM9ZS5jb2RlYy5zdWJzdHJpbmcoMCxlLmNvZGVjLmxlbmd0aC0xKSkpfXJldHVybiB2b2lkKCIuIj09PWUuY29kZWNbZS5jb2RlYy5sZW5ndGgtMV0mJihlLmNvZGVjPWUuY29kZWMuc3Vic3RyaW5nKDAsZS5jb2RlYy5sZW5ndGgtMSkpKX1lLmNvZGVjKz0odFtyXS50b1N0cmluZygxNikrIi4iKS5wYWRTdGFydCgzLCIwIiksdD10LnN1YmFycmF5KHIrMTMpfX19KSl9fSx7a2V5OiJhbGF3Iix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gSGUoZSwhMSwoZnVuY3Rpb24oZSx0KXtLZShlLHQpfSkpfX0se2tleToic3R0cyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIEhlKGUsITAsKGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPWllKHQpLGE9W10sbj00LGk9MDtpPHI7aSsrKWEucHVzaCh7Y291bnQ6aWUodCxuKSxkZWx0YTppZSh0LG4rNCl9KSxuKz04O2UuZW50cnlDb3VudD1yLGUuZW50cmllcz1hfSkpfX0se2tleToiY3R0cyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIEhlKGUsITAsKGZ1bmN0aW9uKGUsdCl7dmFyIHI9aWUodCksYT1bXSxuPTQ7aWYoMT09PWUudmVyc2lvbilmb3IodmFyIGk9MDtpPHI7aSsrKWEucHVzaCh7Y291bnQ6aWUodCxuKSxvZmZzZXQ6aWUodCxuKzQpfSksbis9ODtlbHNlIGZvcih2YXIgcz0wO3M8cjtzKyspYS5wdXNoKHtjb3VudDppZSh0LG4pLG9mZnNldDotKDErfmllKHQsbis0KSl9KSxuKz04O2UuZW50cnlDb3VudD1yLGUuZW50cmllcz1hfSkpfX0se2tleToic3RzYyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIEhlKGUsITAsKGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPWllKHQpLGE9bmV3IEFycmF5KHIpLG49NCxpPTA7aTxyO2krKylhW2ldPXtmaXJzdENodW5rOmllKHQsbiksc2FtcGxlc1BlckNodW5rOmllKHQsbis0KSxzYW1wbGVEZXNjcmlwdGlvbkluZGV4OmllKHQsbis4KX0sbis9MTI7ZS5lbnRyeUNvdW50PXIsZS5lbnRyaWVzPWF9KSl9fSx7a2V5OiJzdHN6Iix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gSGUoZSwhMCwoZnVuY3Rpb24oZSx0KXt2YXIgcj1pZSh0KSxhPWllKHQsNCksbj1uZXcgQXJyYXkoYSk7aWYoIXIpZm9yKHZhciBpPTgscz0wO3M8YTtzKyspbltzXT1pZSh0LGkpLGkrPTQ7ZS5zYW1wbGVTaXplPXIsZS5zYW1wbGVDb3VudD1hLGUuZW50cnlTaXplcz1ufSkpfX0se2tleToic3RjbyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIEhlKGUsITAsKGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPWllKHQpLGE9bmV3IEFycmF5KHIpLG49NCxpPTA7aTxyO2krKylhW2ldPWllKHQsbiksbis9NDtlLmVudHJ5Q291bnQ9cixlLmVudHJpZXM9YX0pKX19LHtrZXk6ImNvNjQiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBIZShlLCEwLChmdW5jdGlvbihlLHQpe2Zvcih2YXIgcj1pZSh0KSxhPW5ldyBBcnJheShyKSxuPTQsaT0wO2k8cjtpKyspYVtpXT1vZSh0LG4pLG4rPTg7ZS5lbnRyeUNvdW50PXIsZS5lbnRyaWVzPWF9KSl9fSx7a2V5OiJzdHNzIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gSGUoZSwhMCwoZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9aWUodCksYT1uZXcgQXJyYXkociksbj00LGk9MDtpPHI7aSsrKWFbaV09aWUodCxuKSxuKz00O2UuZW50cnlDb3VudD1yLGUuZW50cmllcz1hfSkpfX0se2tleToibW9vZiIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIEhlKHQsITEsKGZ1bmN0aW9uKHQscixhKXt0Lm1maGQ9ZS5tZmhkKGUuZmluZEJveChyLFsibWZoZCJdLGEpWzBdKSx0LnRyYWY9ZS5maW5kQm94KHIsWyJ0cmFmIl0sYSkubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gZS50cmFmKHQpfSkpfSkpfX0se2tleToibWZoZCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIEhlKGUsITAsKGZ1bmN0aW9uKGUsdCl7ZS5zZXF1ZW5jZU51bWJlcj1pZSh0KX0pKX19LHtrZXk6InRyYWYiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiBIZSh0LCExLChmdW5jdGlvbih0LHIsYSl7dC50ZmhkPWUudGZoZChlLmZpbmRCb3gocixbInRmaGQiXSxhKVswXSksdC50ZmR0PWUudGZkdChlLmZpbmRCb3gocixbInRmZHQiXSxhKVswXSksdC50cnVuPWUudHJ1bihlLmZpbmRCb3gocixbInRydW4iXSxhKVswXSl9KSl9fSx7a2V5OiJ0cnVuIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gSGUoZSwhMCwoZnVuY3Rpb24oZSx0KXt2YXIgcj1lLnZlcnNpb24sYT1lLmZsYWdzLG49dC5sZW5ndGgsaT1lLnNhbXBsZUNvdW50PWllKHQpLHM9NDtpZihuPnMmJjEmYSYmKGUuZGF0YU9mZnNldD0tKDErfmllKHQscykpLHMrPTQpLG4+cyYmNCZhJiYoZS5maXJzdFNhbXBsZUZsYWdzPWllKHQscykscys9NCksbj5zKXt2YXIgbztlLnNhbXBsZXM9bmV3IEFycmF5KGkpO2Zvcih2YXIgdT0wO3U8aTt1Kyspbz17fSwyNTYmYSYmKG8uZHVyYXRpb249aWUodCxzKSxzKz00KSw1MTImYSYmKG8uc2l6ZT1pZSh0LHMpLHMrPTQpLDEwMjQmYSYmKG8uZmxhZ3M9aWUodCxzKSxzKz00KSwyMDQ4JmEmJihvLmN0cz1yPy0oMSt+aWUodCxzKzQpKTppZSh0LHMpLHMrPTQpLGUuc2FtcGxlc1t1XT1vfX0pKX19LHtrZXk6InRmZHQiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBIZShlLCEwLChmdW5jdGlvbihlLHQpezE9PT1lLnZlcnNpb24/ZS5iYXNlTWVkaWFEZWNvZGVUaW1lPW9lKHQpOmUuYmFzZU1lZGlhRGVjb2RlVGltZT1pZSh0KX0pKX19LHtrZXk6InByb2JlIix2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4hIWUuZmluZEJveCh0LFsiZnR5cCJdKX19LHtrZXk6InBhcnNlU2FtcGxlRmxhZ3MiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybntpc0xlYWRpbmc6KDEyJmVbMF0pPj4+MixkZXBlbmRzT246MyZlWzBdLGlzRGVwZW5kZWRPbjooMTkyJmVbMV0pPj4+NixoYXNSZWR1bmRhbmN5Oig0OCZlWzFdKT4+PjQscGFkZGluZ1ZhbHVlOigxNCZlWzFdKT4+PjEsaXNOb25TeW5jU2FtcGxlOjEmZVsxXSxkZWdyYWRhdGlvblByaW9yaXR5OmVbMl08PDh8ZVszXX19fSx7a2V5OiJtb292VG9UcmFjayIsdmFsdWU6ZnVuY3Rpb24odCxyLGEpe3ZhciBuLGkscz10LnRyYWs7aWYocyYmcy5sZW5ndGgpe3ZhciBvPXMuZmluZCgoZnVuY3Rpb24oZSl7dmFyIHQscjtyZXR1cm4idmlkZSI9PT0obnVsbD09PSh0PWUubWRpYSl8fHZvaWQgMD09PXR8fG51bGw9PT0ocj10LmhkbHIpfHx2b2lkIDA9PT1yP3ZvaWQgMDpyLmhhbmRsZXJUeXBlKX0pKSx1PXMuZmluZCgoZnVuY3Rpb24oZSl7dmFyIHQscjtyZXR1cm4ic291biI9PT0obnVsbD09PSh0PWUubWRpYSl8fHZvaWQgMD09PXR8fG51bGw9PT0ocj10LmhkbHIpfHx2b2lkIDA9PT1yP3ZvaWQgMDpyLmhhbmRsZXJUeXBlKX0pKTtpZihvJiZyKXt2YXIgYyxsLGQsZixoLHYscCx5LG09cixnPW51bGw9PT0oYz1vLnRraGQpfHx2b2lkIDA9PT1jP3ZvaWQgMDpjLnRyYWNrSWQ7bnVsbCE9ZyYmKG0uaWQ9by50a2hkLnRyYWNrSWQpLG0udGtoZER1cmF0aW9uPW8udGtoZC5kdXJhdGlvbixtLm12aGREdXJ0aW9uPXQubXZoZC5kdXJhdGlvbixtLm12aGRUaW1lY2FsZT10Lm12aGQudGltZXNjYWxlLG0udGltZXNjYWxlPW0uZm9ybWF0VGltZXNjYWxlPW8ubWRpYS5tZGhkLnRpbWVzY2FsZSxtLmR1cmF0aW9uPW8ubWRpYS5tZGhkLmR1cmF0aW9ufHxtLm12aGREdXJ0aW9uL20ubXZoZFRpbWVjYWxlKm0udGltZXNjYWxlLG0ucm90YXRpb249by50a2hkLnJvdGF0aW9uLG0ubWF0cml4PW8udGtoZC5tYXRyaXgsbnVsbCE9PShsPW8uZWR0cykmJnZvaWQgMCE9PWwmJmwuZWxzdCYmKG0uZWRpdExpc3Q9by5lZHRzLmVsc3QsbS5lZGl0TGlzdEFwcGxpZWQ9by5lZGl0TGlzdEFwcGxpZWQpO3ZhciBrLGIsXyx4LFMsVCxBLEQsSSxVLFAsTSxPPW8ubWRpYS5taW5mLnN0Ymwuc3RzZC5lbnRyaWVzWzBdO2lmKCFPKXRocm93IG5ldyBFcnJvcigidW5rbm93biB2aWRlbyBzdHNkIGVudHJ5Iik7aWYobS53aWR0aD1PLndpZHRoLG0uaGVpZ2h0PU8uaGVpZ2h0LE8ucGFzcCYmKG0uc2FyUmF0aW89W08ucGFzcC5oU3BhY2luZyxPLnBhc3AudlNwYWNpbmddKSxPLmF2MUMpbS5jb2RlY1R5cGU9dyxtLmNvZGVjPU8uYXYxQy5jb2RlYyxtLmF2MUM9Ty5hdjFDLmRhdGEsTy5jb2xyJiYobS5jb2xyPU8uY29sci5kYXRhKTtlbHNlIGlmKE8uaHZjQyltLmNvZGVjVHlwZT1CLG0uY29kZWM9Ty5odmNDLmNvZGVjLG0udnBzPU8uaHZjQy52cHMsbS5zcHM9Ty5odmNDLnNwcyxtLnBwcz1PLmh2Y0MucHBzLG0uaHZjQz1PLmh2Y0MuZGF0YTtlbHNlIGlmKE8uYXZjQyltLmNvZGVjPU8uYXZjQy5jb2RlYyxtLnNwcz1PLmF2Y0Muc3BzLG0ucHBzPU8uYXZjQy5wcHM7ZWxzZXtpZighTy52dmNDKXRocm93IG5ldyBFcnJvcigidW5rbm93biB2aWRlbyBzdHNkIGVudHJ5Iik7dmFyIFIseixMPSJlbmN2Ij09PU8udHlwZT9udWxsPT09KFI9Ty5zaW5mKXx8dm9pZCAwPT09Unx8bnVsbD09PSh6PVIuZnJtYSl8fHZvaWQgMD09PXo/dm9pZCAwOnouZGF0YV9mb3JtYXQ6Ty50eXBlLEY9Q2Uoe3NhbXBsZUVudHJ5Okx9KXx8Q2Uoe2NvbmZpZ0JveDoidnZjQyJ9KTtpZihudWxsPT1GfHwhRi5hcHBseVRyYWNrQ29uZmlnKXRocm93IG5ldyBFcnJvcigidmlkZW8gY29kZWMgcGFyc2VyIGlzIG5vdCByZWdpc3RlcmVkOiAiLmNvbmNhdChMfHwidnZjQyIpKTtGLmFwcGx5VHJhY2tDb25maWcoe3RyYWNrOm0sZW50cnk6Tyxjb25maWc6Ty52dmNDLHBhcnNlcjplfSl9aWYobS5wcmVzZW50PSEwLG0uZXh0PXt9LG0uZXh0LnN0c3M9bnVsbD09PShkPW8ubWRpYSl8fHZvaWQgMD09PWR8fG51bGw9PT0oZj1kLm1pbmYpfHx2b2lkIDA9PT1mfHxudWxsPT09KGg9Zi5zdGJsKXx8dm9pZCAwPT09aD92b2lkIDA6aC5zdHNzLG0uZXh0LmN0dHM9bnVsbD09PSh2PW8ubWRpYSl8fHZvaWQgMD09PXZ8fG51bGw9PT0ocD12Lm1pbmYpfHx2b2lkIDA9PT1wfHxudWxsPT09KHk9cC5zdGJsKXx8dm9pZCAwPT09eT92b2lkIDA6eS5jdHRzLE8mJiJlbmN2Ij09PU8udHlwZSltLmlzVmlkZW9FbmNyeXB0aW9uPSEwLE8uZGVmYXVsdF9LSUQ9bnVsbD09PShrPU8uc2luZil8fHZvaWQgMD09PWt8fG51bGw9PT0oYj1rLnNjaGkpfHx2b2lkIDA9PT1iP3ZvaWQgMDpiLnRlbmMuZGVmYXVsdF9LSUQsTy5kZWZhdWx0X0lzRW5jcnlwdGVkPW51bGw9PT0oXz1PLnNpbmYpfHx2b2lkIDA9PT1ffHxudWxsPT09KHg9Xy5zY2hpKXx8dm9pZCAwPT09eD92b2lkIDA6eC50ZW5jLmRlZmF1bHRfSXNFbmNyeXB0ZWQsTy5kZWZhdWx0X0lWX3NpemU9bnVsbD09PShTPU8uc2luZil8fHZvaWQgMD09PVN8fG51bGw9PT0oVD1TLnNjaGkpfHx2b2lkIDA9PT1UP3ZvaWQgMDpULnRlbmMuZGVmYXVsdF9JVl9zaXplLG0udmlkZW9TZW5jPW51bGw9PT0oQT1vLm1kaWEpfHx2b2lkIDA9PT1BfHxudWxsPT09KEQ9QS5taW5mKXx8dm9pZCAwPT09RHx8bnVsbD09PShJPUQuc3RibCl8fHZvaWQgMD09PUl8fG51bGw9PT0oVT1JLnNlbmMpfHx2b2lkIDA9PT1VP3ZvaWQgMDpVLnNhbXBsZXMsTy5kYXRhX2Zvcm1hdD1udWxsPT09KFA9Ty5zaW5mKXx8dm9pZCAwPT09UHx8bnVsbD09PShNPVAuZnJtYSl8fHZvaWQgMD09PU0/dm9pZCAwOk0uZGF0YV9mb3JtYXQsbS51c2VFTUU9dC51c2VFTUUsbS5raWRWYWx1ZT10LmtpZFZhbHVlLG0ucHNzaD10LnBzc2gsbS5lbmN2PU99aWYodSYmYSl7dmFyIFYsTixqLEcsSyxILHEsVyxZLFgsUT1hLFo9bnVsbD09PShWPXUudGtoZCl8fHZvaWQgMD09PVY/dm9pZCAwOlYudHJhY2tJZDtudWxsIT1aJiYoUS5pZD11LnRraGQudHJhY2tJZCksUS50a2hkRHVyYXRpb249dS50a2hkLmR1cmF0aW9uLFEubXZoZER1cnRpb249dC5tdmhkLmR1cmF0aW9uLFEubXZoZFRpbWVjYWxlPXQubXZoZC50aW1lc2NhbGUsUS50aW1lc2NhbGU9US5mb3JtYXRUaW1lc2NhbGU9dS5tZGlhLm1kaGQudGltZXNjYWxlLFEuZHVyYXRpb249dS5tZGlhLm1kaGQuZHVyYXRpb258fFEubXZoZER1cnRpb24vUS5tdmhkVGltZWNhbGUqUS50aW1lc2NhbGUsbnVsbCE9PShOPXUuZWR0cykmJnZvaWQgMCE9PU4mJk4uZWxzdCYmKFEuZWRpdExpc3Q9dS5lZHRzLmVsc3QsUS5lZGl0TGlzdEFwcGxpZWQ9dS5lZGl0TGlzdEFwcGxpZWQpO3ZhciBKLCQsZWUsdGUscmUsYWUsbmUsaWUsc2U9dS5tZGlhLm1pbmYuc3RibC5zdHNkLmVudHJpZXNbMF07c3dpdGNoKFEuc2FtcGxlU2l6ZT1zZS5zYW1wbGVTaXplLFEuc2FtcGxlUmF0ZT1mdW5jdGlvbihlKXt2YXIgdD0wO2lmKCJtcDRhIj09PWUudHlwZSl7dmFyIHI7aWYoZS5zYW1wbGVSYXRlPjApdD1lLnNhbXBsZVJhdGU7ZWxzZSB0PW51bGw9PT0ocj1lLmVzZHMpfHx2b2lkIDA9PT1yP3ZvaWQgMDpyLnNhbXBsZVJhdGV9ZWxzZSB0PWUuc2FtcGxlUmF0ZTtyZXR1cm4gdHx8MH0oc2UpLFEuY2hhbm5lbENvdW50PXNlLmNoYW5uZWxDb3VudCxRLnByZXNlbnQ9ITAsc2UudHlwZSl7Y2FzZSJhbGF3IjpRLmNvZGVjVHlwZT1RLmNvZGVjPUUsUS5zYW1wbGVSYXRlPThlMzticmVhaztjYXNlInVsYXciOlEuY29kZWNUeXBlPVEuY29kZWM9QyxRLnNhbXBsZVJhdGU9OGUzO2JyZWFrO2RlZmF1bHQ6US5zYW1wbGVEdXJhdGlvbj1oZS5nZXRGcmFtZUR1cmF0aW9uKFEuc2FtcGxlUmF0ZSxRLnRpbWVzY2FsZSksUS5zYW1wbGVSYXRlSW5kZXg9aGUuZ2V0UmF0ZUluZGV4QnlSYXRlKFEuc2FtcGxlUmF0ZSksUS5vYmplY3RUeXBlPShudWxsPT09KG49c2UuZXNkcyl8fHZvaWQgMD09PW4/dm9pZCAwOm4ub2JqZWN0VHlwZSl8fDIsc2UuZXNkcyYmKFEuY29uZmlnPUFycmF5LmZyb20oc2UuZXNkcy5jb25maWcpKSxRLmNvZGVjPShudWxsPT09KGk9c2UuZXNkcyl8fHZvaWQgMD09PWk/dm9pZCAwOmkuY29kZWMpfHwibXA0YS40MC4yIn1pZihRLnNhbXBsZUR1cmF0aW9uPWhlLmdldEZyYW1lRHVyYXRpb24oUS5zYW1wbGVSYXRlLFEudGltZXNjYWxlKSxRLm9iamVjdFR5cGU9KG51bGw9PT0oaj1zZS5lc2RzKXx8dm9pZCAwPT09aj92b2lkIDA6ai5vYmplY3RUeXBlKXx8MixzZS5lc2RzJiYoc2UuZXNkcy5jb25maWc/US5jb25maWc9QXJyYXkuZnJvbShzZS5lc2RzLmNvbmZpZyk6Y29uc29sZS53YXJuKCJlc2RzIGNvbmZpZyBpcyBudWxsIikpLFEuY29kZWM9KG51bGw9PT0oRz1zZS5lc2RzKXx8dm9pZCAwPT09Rz92b2lkIDA6Ry5jb2RlYyl8fCJtcDRhLjQwLjIiLFEuc2FtcGxlUmF0ZUluZGV4PWhlLmdldFJhdGVJbmRleEJ5UmF0ZShRLnNhbXBsZVJhdGUpLFEuZXh0PXt9LFEuZXh0LnN0c3M9bnVsbD09PShLPXUubWRpYSl8fHZvaWQgMD09PUt8fG51bGw9PT0oSD1LLm1pbmYpfHx2b2lkIDA9PT1IfHxudWxsPT09KHE9SC5zdGJsKXx8dm9pZCAwPT09cT92b2lkIDA6cS5zdHNzLFEuZXh0LmN0dHM9bnVsbD09PShXPXUubWRpYSl8fHZvaWQgMD09PVd8fG51bGw9PT0oWT1XLm1pbmYpfHx2b2lkIDA9PT1ZfHxudWxsPT09KFg9WS5zdGJsKXx8dm9pZCAwPT09WD92b2lkIDA6WC5jdHRzLFEucHJlc2VudD0hMCxzZSYmImVuY2EiPT09c2UudHlwZSlRLmlzQXVkaW9FbmNyeXB0aW9uPSEwLHNlLmRhdGFfZm9ybWF0PW51bGw9PT0oSj1zZS5zaW5mKXx8dm9pZCAwPT09Snx8bnVsbD09PSgkPUouZnJtYSl8fHZvaWQgMD09PSQ/dm9pZCAwOiQuZGF0YV9mb3JtYXQsc2UuZGVmYXVsdF9LSUQ9bnVsbD09PShlZT1zZS5zaW5mKXx8dm9pZCAwPT09ZWV8fG51bGw9PT0odGU9ZWUuc2NoaSl8fHZvaWQgMD09PXRlP3ZvaWQgMDp0ZS50ZW5jLmRlZmF1bHRfS0lELHNlLmRlZmF1bHRfSXNFbmNyeXB0ZWQ9bnVsbD09PShyZT1zZS5zaW5mKXx8dm9pZCAwPT09cmV8fG51bGw9PT0oYWU9cmUuc2NoaSl8fHZvaWQgMD09PWFlP3ZvaWQgMDphZS50ZW5jLmRlZmF1bHRfSXNFbmNyeXB0ZWQsc2UuZGVmYXVsdF9JVl9zaXplPW51bGw9PT0obmU9c2Uuc2luZil8fHZvaWQgMD09PW5lfHxudWxsPT09KGllPW5lLnNjaGkpfHx2b2lkIDA9PT1pZT92b2lkIDA6aWUudGVuYy5kZWZhdWx0X0lWX3NpemUsUS5hdWRpb1NlbmM9dS5tZGlhLm1pbmYuc3RibC5zZW5jJiZ1Lm1kaWEubWluZi5zdGJsLnNlbmMuc2FtcGxlcyxRLnVzZUVNRT10LnVzZUVNRSxRLmtpZFZhbHVlPXQua2lkVmFsdWUsUS5lbmNhPXNlfWlmKGEmJihhLmlzVmlkZW9FbmNyeXB0aW9uPSEhciYmci5pc1ZpZGVvRW5jcnlwdGlvbiksciYmKHIuaXNBdWRpb0VuY3J5cHRpb249ISFhJiZhLmlzQXVkaW9FbmNyeXB0aW9uKSxudWxsIT1yJiZyLmVuY3Z8fG51bGwhPWEmJmEuZW5jYSl7dmFyIG9lLHVlLGNlPW51bGw9PXJ8fG51bGw9PT0ob2U9ci5lbmN2KXx8dm9pZCAwPT09b2U/dm9pZCAwOm9lLmRlZmF1bHRfS0lELGxlPW51bGw9PWF8fG51bGw9PT0odWU9YS5lbmNhKXx8dm9pZCAwPT09dWU/dm9pZCAwOnVlLmRlZmF1bHRfS0lELGRlPWNlfHxsZT8oY2V8fGxlKS5qb2luKCIiKTpudWxsO3ImJihyLmtpZD1kZSksYSYmKGEua2lkPWRlKX1yZXR1cm4gciYmKHIuZmxhZ3M9Mzg0MSksYSYmKGEuZmxhZ3M9MTc5Mykse3ZpZGVvVHJhY2s6cixhdWRpb1RyYWNrOmF9fX19LHtrZXk6ImV2YWx1YXRlRGVmYXVsdER1cmF0aW9uIix2YWx1ZTpmdW5jdGlvbihlLHQscil7dmFyIGEsbj1udWxsPT10fHxudWxsPT09KGE9dC5zYW1wbGVzKXx8dm9pZCAwPT09YT92b2lkIDA6YS5sZW5ndGg7cmV0dXJuIG4/MTAyNCpuL3QudGltZXNjYWxlKmUudGltZXNjYWxlL3I6MTAyNH19LHtrZXk6Im1vb2ZUb1NhbXBsZXMiLHZhbHVlOmZ1bmN0aW9uKHQscixhKXt2YXIgbj17fTtyZXR1cm4gdC5tZmhkJiYociYmKHIuc2VxdWVuY2VOdW1iZXI9dC5tZmhkLnNlcXVlbmNlTnVtYmVyKSxhJiYoYS5zZXF1ZW5jZU51bWJlcj10Lm1maGQuc2VxdWVuY2VOdW1iZXIpKSx0LnRyYWYuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIGk9dC50ZmhkLHM9dC50ZmR0LG89dC50cnVuO2lmKGkmJm8pe3MmJihyJiZyLmlkPT09aS50cmFja0lkJiYoci5iYXNlTWVkaWFEZWNvZGVUaW1lPXMuYmFzZU1lZGlhRGVjb2RlVGltZSksYSYmYS5pZD09PWkudHJhY2tJZCYmKGEuYmFzZU1lZGlhRGVjb2RlVGltZT1zLmJhc2VNZWRpYURlY29kZVRpbWUpKTt2YXIgdT1pLmRlZmF1bHRTYW1wbGVTaXplfHwwLGM9aS5kZWZhdWx0U2FtcGxlRHVyYXRpb258fGUuZXZhbHVhdGVEZWZhdWx0RHVyYXRpb24ocixhLG8uc2FtcGxlcy5sZW5ndGh8fG8uc2FtcGxlQ291bnQpLGw9by5kYXRhT2Zmc2V0fHwwLGQ9MCxmPS0xO2lmKCFvLnNhbXBsZXMubGVuZ3RoJiZvLnNhbXBsZUNvdW50KXtuW2kudHJhY2tJZF09bmV3IEFycmF5KG8uc2FtcGxlQ291bnQpO2Zvcih2YXIgaD0wO2g8by5zYW1wbGVDb3VudDtoKyspbltpLnRyYWNrSWRdW2hdPXtvZmZzZXQ6bCxkdHM6ZCxkdXJhdGlvbjpjLHNpemU6dX0sZCs9YyxsKz11fWVsc2UgbltpLnRyYWNrSWRdPW8uc2FtcGxlcy5tYXAoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuKGU9e29mZnNldDpsLGR0czpkLHB0czpkKyhlLmN0c3x8MCksZHVyYXRpb246ZS5kdXJhdGlvbnx8YyxzaXplOmUuc2l6ZXx8dSxnb3BJZDpmLGtleWZyYW1lOjA9PT10fHxudWxsIT09ZS5mbGFncyYmdm9pZCAwIT09ZS5mbGFncyYmKDY1NTM2JmUuZmxhZ3MpPj4+MCE9NjU1MzZ9KS5rZXlmcmFtZSYmKGYrKyxlLmdvcElkPWYpLGQrPWUuZHVyYXRpb24sbCs9ZS5zaXplLGV9KSl9fSkpLG59fSx7a2V5OiJtb292VG9TYW1wbGVzIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1lLnRyYWs7aWYodCYmdC5sZW5ndGgpe3ZhciByPXQuZmluZCgoZnVuY3Rpb24oZSl7dmFyIHQscjtyZXR1cm4idmlkZSI9PT0obnVsbD09PSh0PWUubWRpYSl8fHZvaWQgMD09PXR8fG51bGw9PT0ocj10LmhkbHIpfHx2b2lkIDA9PT1yP3ZvaWQgMDpyLmhhbmRsZXJUeXBlKX0pKSxhPXQuZmluZCgoZnVuY3Rpb24oZSl7dmFyIHQscjtyZXR1cm4ic291biI9PT0obnVsbD09PSh0PWUubWRpYSl8fHZvaWQgMD09PXR8fG51bGw9PT0ocj10LmhkbHIpfHx2b2lkIDA9PT1yP3ZvaWQgMDpyLmhhbmRsZXJUeXBlKX0pKTtpZihyfHxhKXt2YXIgbixpO2lmKHIpe3ZhciBzLG8sdT1udWxsPT09KHM9ci5tZGlhKXx8dm9pZCAwPT09c3x8bnVsbD09PShvPXMubWluZil8fHZvaWQgMD09PW8/dm9pZCAwOm8uc3RibDtpZighdSlyZXR1cm47dmFyIGM9dS5zdHRzLGw9dS5zdHNjLGQ9dS5zdHN6LGY9dS5zdGNvLGg9dS5zdHNzLHY9dS5jdHRzO2lmKCEoYyYmbCYmZCYmZiYmaCkpcmV0dXJuO249amUoYyxsLGQsZix2LGgpfWlmKGEpe3ZhciBwLHksbSxnPW51bGw9PT0ocD1hLm1kaWEpfHx2b2lkIDA9PT1wfHxudWxsPT09KHk9cC5taW5mKXx8dm9pZCAwPT09eT92b2lkIDA6eS5zdGJsO2lmKCFnKXJldHVybjt2YXIgaz1udWxsPT09KG09YS5tZGlhLm1kaGQpfHx2b2lkIDA9PT1tP3ZvaWQgMDptLnRpbWVzY2FsZSxiPWcuc3R0cyxfPWcuc3RzYyx4PWcuc3Rzeix3PWcuc3RjbztpZighKGsmJmImJl8mJngmJncpKXJldHVybjtpPWplKGIsXyx4LHcpfXJldHVybnt2aWRlb1NhbXBsZXM6bixhdWRpb1NhbXBsZXM6aX19fX19XSksZX0oKTtmdW5jdGlvbiBqZShlLHQscixhLG4saSl7dmFyIHMsbyx1LGM9W10sbD1udWxsPT1uP3ZvaWQgMDpuLmVudHJpZXMsZD10LmVudHJpZXMsZj1hLmVudHJpZXMsaD1yLmVudHJ5U2l6ZXMsdj1udWxsPT1pP3ZvaWQgMDppLmVudHJpZXM7diYmKHM9e30sdi5mb3JFYWNoKChmdW5jdGlvbihlKXtzW2UtMV09ITB9KSkpLGwmJihvPVtdLGwuZm9yRWFjaCgoZnVuY3Rpb24oZSl7Zm9yKHZhciB0PWUuY291bnQscj1lLm9mZnNldCxhPTA7YTx0O2ErKylvLnB1c2gocil9KSkpO3ZhciBwPS0xLHk9MCxtPTAsZz0wLGs9MCxiPTAsXz1kWzBdLnNhbXBsZXNQZXJDaHVuayx4PWRbMV0/ZFsxXS5maXJzdENodW5rLTE6MS8wO3JldHVybiBlLmVudHJpZXMuZm9yRWFjaCgoZnVuY3Rpb24oZSl7Zm9yKHZhciB0PWUuY291bnQsYT1lLmRlbHRhLG49MDtuPHQ7bisrKXU9e2R0czp5LGR1cmF0aW9uOmEsc2l6ZTpoW21dfHxyLnNhbXBsZVNpemUsb2Zmc2V0OmZbZ10rYixpbmRleDptfSx2JiYodS5rZXlmcmFtZT1zW21dLHUua2V5ZnJhbWUmJnArKyx1LmdvcElkPXApLG8mJm08by5sZW5ndGgmJih1LnB0cz11LmR0cytvW21dKSxjLnB1c2godSkseSs9YSwrK208Xz9iKz11LnNpemU6KGcrKyxiPTAsZz49eCYmKGsrKyx4PWRbaysxXT9kW2srMV0uZmlyc3RDaHVuay0xOjEvMCksXys9ZFtrXS5zYW1wbGVzUGVyQ2h1bmspfSkpLGN9ZnVuY3Rpb24gR2UoZSx0KXtyZXR1cm4gZS5kYXRhUmVmZXJlbmNlSW5kZXg9bmUodCw2KSxlLndpZHRoPW5lKHQsMjQpLGUuaGVpZ2h0PW5lKHQsMjYpLGUuaG9yaXpyZXNvbHV0aW9uPWllKHQsMjgpLGUudmVydHJlc29sdXRpb249aWUodCwzMiksZS5mcmFtZUNvdW50PW5lKHQsNDApLGUuZGVwdGg9bmUodCw3NCksNzh9ZnVuY3Rpb24gS2UoZSx0KXtyZXR1cm4gZS5kYXRhUmVmZXJlbmNlSW5kZXg9bmUodCw2KSxlLmNoYW5uZWxDb3VudD1uZSh0LDE2KSxlLnNhbXBsZVNpemU9bmUodCwxOCksZS5zYW1wbGVSYXRlPWllKHQsMjQpLzY1NTM2LDI4fWZ1bmN0aW9uIEhlKGUsdCxyKXtpZihlKXtpZihlLnNpemUhPT1lLmRhdGEubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiYm94ICIuY29uY2F0KGUudHlwZSwiIHNpemUgIT09IGRhdGEubGVuZ3RoIikpO3ZhciBhPXtzdGFydDplLnN0YXJ0LHNpemU6ZS5zaXplLGhlYWRlclNpemU6ZS5oZWFkZXJTaXplLHR5cGU6ZS50eXBlfTtyZXR1cm4gdCYmKGEudmVyc2lvbj1lLmRhdGFbZS5oZWFkZXJTaXplXSxhLmZsYWdzPWZ1bmN0aW9uKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTowO3JldHVybihlW3RdPDwxNikrKGVbdCsxXTw8OCkrKGVbdCsyXXx8MCl9KGUuZGF0YSxlLmhlYWRlclNpemUrMSksYS5oZWFkZXJTaXplKz00KSxyKGEsZS5kYXRhLnN1YmFycmF5KGEuaGVhZGVyU2l6ZSksYS5zdGFydCthLmhlYWRlclNpemUpLGF9fXZhciBxZT1mdW5jdGlvbihlLHQscil7Zm9yKHZhciBhPVN0cmluZyhyKSxuPXQ+PjAsaT1NYXRoLmNlaWwobi9hLmxlbmd0aCkscz1bXSxvPVN0cmluZyhlKTtpLS07KXMucHVzaChhKTtyZXR1cm4gcy5qb2luKCIiKS5zdWJzdHJpbmcoMCxuLW8ubGVuZ3RoKStvfSxXZT1mdW5jdGlvbigpe2Zvcih2YXIgZT1bXSx0PWFyZ3VtZW50cy5sZW5ndGgscj1uZXcgQXJyYXkodCksYT0wO2E8dDthKyspclthXT1hcmd1bWVudHNbYV07cmV0dXJuIHIuZm9yRWFjaCgoZnVuY3Rpb24odCl7ZS5wdXNoKHFlKE51bWJlcih0KS50b1N0cmluZygxNiksMiwwKSl9KSksZVswXX07ZnVuY3Rpb24gWWUoZSl7Zm9yKHZhciB0PTAscj1hcmd1bWVudHMubGVuZ3RoLGE9bmV3IEFycmF5KHI+MT9yLTE6MCksbj0xO248cjtuKyspYVtuLTFdPWFyZ3VtZW50c1tuXTthLmZvckVhY2goKGZ1bmN0aW9uKGUpe3QrPWUubGVuZ3RofSkpO3ZhciBpPW5ldyBlKHQpLHM9MDtyZXR1cm4gYS5mb3JFYWNoKChmdW5jdGlvbihlKXtpLnNldChlLHMpLHMrPWUubGVuZ3RofSkpLGl9dmFyIFhlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3IodGhpcyxlKSx0aGlzLmJ1ZmZlcj1uZXcgVWludDhBcnJheSgwKX1yZXR1cm4gbihlLFt7a2V5OiJ3cml0ZSIsdmFsdWU6ZnVuY3Rpb24oKXtmb3IodmFyIGU9dGhpcyx0PWFyZ3VtZW50cy5sZW5ndGgscj1uZXcgQXJyYXkodCksYT0wO2E8dDthKyspclthXT1hcmd1bWVudHNbYV07ci5mb3JFYWNoKChmdW5jdGlvbih0KXt0P2UuYnVmZmVyPVllKFVpbnQ4QXJyYXksZS5idWZmZXIsdCk6d2luZG93LmNvbnNvbGUud2Fybih0KX0pKX19XSxbe2tleToid3JpdGVVaW50MTYiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgVWludDhBcnJheShbZT4+OCYyNTUsMjU1JmVdKX19LHtrZXk6IndyaXRlVWludDMyIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoW2U+PjI0LGU+PjE2JjI1NSxlPj44JjI1NSwyNTUmZV0pfX1dKSxlfSgpLFFlPU1hdGgucG93KDIsMzIpLTEsWmU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7cih0aGlzLGUpfXJldHVybiBuKGUsbnVsbCxbe2tleToiYm94Iix2YWx1ZTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9YXJndW1lbnRzLmxlbmd0aCxyPW5ldyBBcnJheSh0PjE/dC0xOjApLGE9MTthPHQ7YSsrKXJbYS0xXT1hcmd1bWVudHNbYV07dmFyIG49OCsocj1yLmZpbHRlcihCb29sZWFuKSkucmVkdWNlKChmdW5jdGlvbihlLHQpe3JldHVybiBlK3QuYnl0ZUxlbmd0aH0pLDApLGk9bmV3IFVpbnQ4QXJyYXkobik7aVswXT1uPj4yNCYyNTUsaVsxXT1uPj4xNiYyNTUsaVsyXT1uPj44JjI1NSxpWzNdPTI1NSZuLGkuc2V0KGUsNCk7dmFyIHM9ODtyZXR1cm4gci5mb3JFYWNoKChmdW5jdGlvbihlKXtpLnNldChlLHMpLHMrPWUuYnl0ZUxlbmd0aH0pKSxpfX0se2tleToidHlwZSIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIGUudHlwZXNbdF18fChlLnR5cGVzW3RdPVt0LmNoYXJDb2RlQXQoMCksdC5jaGFyQ29kZUF0KDEpLHQuY2hhckNvZGVBdCgyKSx0LmNoYXJDb2RlQXQoMyldKSxlLnR5cGVzW3RdfX0se2tleToiRnVsbEJveCIsdmFsdWU6ZnVuY3Rpb24odCxyLGEpe2Zvcih2YXIgbj1hcmd1bWVudHMubGVuZ3RoLGk9bmV3IEFycmF5KG4+Mz9uLTM6MCkscz0zO3M8bjtzKyspaVtzLTNdPWFyZ3VtZW50c1tzXTtyZXR1cm4gZS5ib3guYXBwbHkoZSxbdCxuZXcgVWludDhBcnJheShbcixhPj4xNiYyNTUsYT4+OCYyNTUsMjU1JmFdKV0uY29uY2F0KGkpKX19LHtrZXk6ImZ0eXAiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciByPXQuZmluZCgoZnVuY3Rpb24oZSl7cmV0dXJuIGUudHlwZT09PWJ9KSk7aWYoKG51bGw9PXI/dm9pZCAwOnIuY29kZWNUeXBlKT09PUIpcmV0dXJuIGUuRlRZUEhFVjE7dmFyIGE9Q2Uoe3RyYWNrOnJ9KTtyZXR1cm4gbnVsbCE9YSYmYS5idWlsZEZ0eXA/YS5idWlsZEZ0eXAoe3RyYWNrOnIsdHJhY2tzOnQsTVA0OmV9KTplLkZUWVBBVkMxfX0se2tleToiaW5pdFNlZ21lbnQiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiB0JiZ0Lmxlbmd0aD9yZShlLmZ0eXAodCksZS5tb292KHQpKTpuZXcgVWludDhBcnJheX19LHtrZXk6InBzc2giLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciByPW5ldyBVaW50OEFycmF5KFsxLDAsMCwwXS5jb25jYXQoWzE2LDExOSwyMzksMjM2LDE5MiwxNzgsNzcsMiwxNzIsMjI3LDYwLDMwLDgyLDIyNiwyNTEsNzVdLFswLDAsMCwxXSxkZSh0LmtpZCksWzAsMCwwLDBdKSk7cmV0dXJuIGUuYm94KGUudHlwZXMucHNzaCxyKX19LHtrZXk6Im1vb3YiLHZhbHVlOmZ1bmN0aW9uKHQpe2lmKHRbMF0udXNlRU1FJiYodFswXS5lbmN2fHx0WzBdLmVuY2EpKXt0WzBdLnBzc2h8fCh0WzBdLnBzc2g9e2tpZDp0WzBdLmtpZH0pO3ZhciByPXRoaXMucHNzaCh0WzBdLnBzc2gpO3JldHVybiBlLmJveC5hcHBseShlLFtlLnR5cGVzLm1vb3YsZS5tdmhkKHRbMF0ubXZoZER1cnRpb258fHRbMF0uZHVyYXRpb24sdFswXS5tdmhkVGltZWNhbGV8fHRbMF0udGltZXNjYWxlKSxlLm12ZXgodCldLmNvbmNhdCh5KHQubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gZS50cmFrKHQpfSkpKSxbcl0pKX1yZXR1cm4gZS5ib3guYXBwbHkoZSxbZS50eXBlcy5tb292LGUubXZoZCh0WzBdLm12aGREdXJ0aW9ufHx0WzBdLmR1cmF0aW9uLHRbMF0ubXZoZFRpbWVjYWxlfHx0WzBdLnRpbWVzY2FsZSldLmNvbmNhdCh5KHQubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gZS50cmFrKHQpfSkpKSxbZS5tdmV4KHQpXSkpfX0se2tleToibXZoZCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIHI9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjllNCxhPWUuYm94KGUudHlwZXMubXZoZCxuZXcgVWludDhBcnJheShbMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAscj4+MjQmMjU1LHI+PjE2JjI1NSxyPj44JjI1NSwyNTUmcix0Pj4yNCYyNTUsdD4+MTYmMjU1LHQ+PjgmMjU1LDI1NSZ0LDAsMSwwLDAsMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDY0LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDI1NSwyNTUsMjU1LDI1NV0pKTtyZXR1cm4gYX19LHtrZXk6InRyYWsiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiBlLmJveChlLnR5cGVzLnRyYWssZS50a2hkKHQuaWQsdC50a2hkRHVyYXRpb258fDAsdC53aWR0aCx0LmhlaWdodCksZS5tZGlhKHQpKX19LHtrZXk6InRraGQiLHZhbHVlOmZ1bmN0aW9uKHQscil7dmFyIGE9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOjAsbj1hcmd1bWVudHMubGVuZ3RoPjMmJnZvaWQgMCE9PWFyZ3VtZW50c1szXT9hcmd1bWVudHNbM106MCxpPWUuYm94KGUudHlwZXMudGtoZCxuZXcgVWludDhBcnJheShbMCwwLDAsNywwLDAsMCwwLDAsMCwwLDAsdD4+MjQmMjU1LHQ+PjE2JjI1NSx0Pj44JjI1NSwyNTUmdCwwLDAsMCwwLHI+PjI0JjI1NSxyPj4xNiYyNTUscj4+OCYyNTUsMjU1JnIsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMSwwLDAsMCwwLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsNjQsMCwwLDAsYT4+OCYyNTUsMjU1JmEsMCwwLG4+PjgmMjU1LDI1NSZuLDAsMF0pKTtyZXR1cm4gaX19LHtrZXk6ImVkdHMiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiBlLmJveChlLnR5cGVzLmVkdHMsZS5lbHN0KHQpKX19LHtrZXk6ImVsc3QiLHZhbHVlOmZ1bmN0aW9uKHQpe3QuZW50cmllczt2YXIgcj10LmVudHJpZXNEYXRhLGE9dC52ZXJzaW9uO3JldHVybiBlLkZ1bGxCb3goZS50eXBlcy5lbHN0LGEsMCxyKX19LHtrZXk6Im1kaWEiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiBlLmJveChlLnR5cGVzLm1kaWEsZS5tZGhkKHQuZHVyYXRpb24sdC50aW1lc2NhbGUpLGUuaGRscih0LnR5cGUpLGUubWluZih0KSl9fSx7a2V5OiJtZGhkIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgcj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06OWU0LGE9ZS5ib3goZS50eXBlcy5tZGhkLG5ldyBVaW50OEFycmF5KFswLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCxyPj4yNCYyNTUscj4+MTYmMjU1LHI+PjgmMjU1LDI1NSZyLHQ+PjI0JjI1NSx0Pj4xNiYyNTUsdD4+OCYyNTUsMjU1JnQsODUsMTk2LDAsMF0pKTtyZXR1cm4gYX19LHtrZXk6ImhkbHIiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiBlLmJveChlLnR5cGVzLmhkbHIsZS5IRExSX1RZUEVTW3RdKX19LHtrZXk6Im1pbmYiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiBlLmJveChlLnR5cGVzLm1pbmYsdC50eXBlPT09Yj9lLlZNSEQ6ZS5TTUhELGUuRElORixlLnN0YmwodCkpfX0se2tleToic3RibCIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIHQmJnQuZXh0LGUuYm94KGUudHlwZXMuc3RibCxlLnN0c2QodCksZS5TVFRTLFtdWzBdLGUuU1RTQyxlLlNUU1osZS5TVENPKX19LHtrZXk6InN0c2QiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciByO3JldHVybiByPSJhdWRpbyI9PT10LnR5cGU/dC51c2VFTUUmJnQuZW5jYT9lLmVuY2EodCk6dC5jb2RlY1R5cGU9PT1EP2Uub3B1cyh0KTplLm1wNGEodCk6dC51c2VFTUUmJnQuZW5jdj9lLmVuY3YodCk6dC5hdjFDP2UuYXYwMSh0KTplLmF2YzFoZXYxdnZjMSh0KSxlLmJveChlLnR5cGVzLnN0c2QsbmV3IFVpbnQ4QXJyYXkoWzAsMCwwLDAsMCwwLDAsMV0pLHIpfX0se2tleToiZW5jYSIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIHI9dC5lbmNhLmNoYW5uZWxDb3VudCxhPXQuZW5jYS5zYW1wbGVSYXRlLG49bmV3IFVpbnQ4QXJyYXkoWzAsMCwwLDAsMCwwLDAsMSwwLDAsMCwwLDAsMCwwLDAsMCxyLDAsMTYsMCwwLDAsMCxhPj44JjI1NSwyNTUmYSwwLDBdKSxpPWUuZXNkcyh0LmNvbmZpZykscz1lLnNpbmYodC5lbmNhKTtyZXR1cm4gZS5ib3goZS50eXBlcy5lbmNhLG4saSxzKX19LHtrZXk6ImVuY3YiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciByLGE9dC53aWR0aCxuPXQuaGVpZ2h0LGk9dC5zYXJSYXRpbyYmdC5zYXJSYXRpby5sZW5ndGg+MT90LnNhclJhdGlvWzBdOjAscz10LnNhclJhdGlvJiZ0LnNhclJhdGlvLmxlbmd0aD4xP3Quc2FyUmF0aW9bMV06MCxvPW5ldyBVaW50OEFycmF5KFswLDAsMCwwLDAsMCwwLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCxhPj44JjI1NSwyNTUmYSxuPj44JjI1NSwyNTUmbiwwLDcyLDAsMCwwLDcyLDAsMCwwLDAsMCwwLDAsMSwxOCwxMDAsOTcsMTA1LDEwOCwxMjEsMTA5LDExMSwxMTYsMTA1LDExMSwxMTAsNDcsMTA0LDEwOCwxMTUsNDYsMTA2LDExNSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMjQsMTcsMTddKSx1PUNlKHt0cmFjazp0fSk7aWYodC5jb2RlY1R5cGU9PT1CKXI9ZS5odmNDKHQpO2Vsc2UgaWYobnVsbCE9dSYmdS5idWlsZENvbmZpZ0JveClyPXUuYnVpbGRDb25maWdCb3goe3RyYWNrOnQsTVA0OmV9KTtlbHNle3ZhciBjLGwsZD10LnNwcyYmdC5zcHMubGVuZ3RoPjA/dC5zcHNbMF06W10sZj10LnBwcyYmdC5wcHMubGVuZ3RoPjA/dC5wcHNbMF06W10saD1uZXcgVWludDhBcnJheSgoYz0obD1bMSxkWzFdLGRbMl0sZFszXSwyNTUsMjI1LGQubGVuZ3RoPj4+OCYyNTUsMjU1JmQubGVuZ3RoXSkuY29uY2F0LmFwcGx5KGwseShkKSkuY29uY2F0KFsxLGYubGVuZ3RoPj4+OCYyNTUsMjU1JmYubGVuZ3RoXSkpLmNvbmNhdC5hcHBseShjLHkoZikpKTtyPWUuYm94KGUudHlwZXMuYXZjQyxoKX12YXIgdj1uZXcgVWludDhBcnJheShbMCwwLDg4LDU3LDAsMTUsMjAwLDE5MiwwLDQsODYsNzJdKSxwPWUuc2luZih0LmVuY3YpLG09W28scixlLmJveChlLnR5cGVzLmJ0cnQsdikscF07aWYodC5zYXJSYXRpbyYmdC5zYXJSYXRpby5sZW5ndGg+MSl7dmFyIGc9bmV3IFVpbnQ4QXJyYXkoW2k+PjI0LGk+PjE2JjI1NSxpPj44JjI1NSwyNTUmaSxzPj4yNCxzPj4xNiYyNTUscz4+OCYyNTUsMjU1JnNdKTttLnB1c2goZS5ib3goZS50eXBlcy5wYXNwLGcpKX1yZXR1cm4gZS5ib3guYXBwbHkoZSxbZS50eXBlcy5lbmN2XS5jb25jYXQobSkpfX0se2tleToic2NoaSIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIHI9bmV3IFVpbnQ4QXJyYXkoW10pLGE9ZS50ZW5jKHQpO3JldHVybiBlLmJveChlLnR5cGVzLnNjaGkscixhKX19LHtrZXk6InRlbmMiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciByPW5ldyBVaW50OEFycmF5KFswLDAsMCwwLDAsMCwyNTUmdC5kZWZhdWx0X0lzRW5jcnlwdGVkLDI1NSZ0LmRlZmF1bHRfSVZfc2l6ZV0uY29uY2F0KGRlKHQuZGVmYXVsdF9LSUQpKSk7cmV0dXJuIGUuYm94KGUudHlwZXMudGVuYyxyKX19LHtrZXk6InNpbmYiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciByPW5ldyBVaW50OEFycmF5KFtdKSxhPW5ldyBVaW50OEFycmF5KFt0LmRhdGFfZm9ybWF0LmNoYXJDb2RlQXQoMCksdC5kYXRhX2Zvcm1hdC5jaGFyQ29kZUF0KDEpLHQuZGF0YV9mb3JtYXQuY2hhckNvZGVBdCgyKSx0LmRhdGFfZm9ybWF0LmNoYXJDb2RlQXQoMyldKSxuPW5ldyBVaW50OEFycmF5KFswLDAsMCwwLDk5LDEwMSwxMTAsOTksMCwxLDAsMF0pLGk9ZS5zY2hpKHQpO3JldHVybiBlLmJveChlLnR5cGVzLnNpbmYscixlLmJveChlLnR5cGVzLmZybWEsYSksZS5ib3goZS50eXBlcy5zY2htLG4pLGkpfX0se2tleToiYXYwMSIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIGUuYm94KGUudHlwZXMuYXYwMSxuZXcgVWludDhBcnJheShbMCwwLDAsMCwwLDAsMCwxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsdC53aWR0aD4+OCYyNTUsMjU1JnQud2lkdGgsdC5oZWlnaHQ+PjgmMjU1LDI1NSZ0LmhlaWdodCwwLDcyLDAsMCwwLDcyLDAsMCwwLDAsMCwwLDAsMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwyNCwxNywxN10pLHQuYXYxQyx0LmNvbHIpfX0se2tleToiYXZjMWhldjF2dmMxIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgcixhLG47aWYodC5jb2RlY1R5cGU9PT1CKWE9ZS5odmNDKHQpLG49ZS50eXBlcy5odmMxO2Vsc2UgaWYobnVsbCE9PShyPUNlKHt0cmFjazp0fSkpJiZ2b2lkIDAhPT1yJiZyLmJ1aWxkQ29uZmlnQm94KXt2YXIgaT1DZSh7dHJhY2s6dH0pO2E9aS5idWlsZENvbmZpZ0JveCh7dHJhY2s6dCxNUDQ6ZX0pLG49ZS50eXBlKGkuZ2V0U2FtcGxlRW50cnlUeXBlP2kuZ2V0U2FtcGxlRW50cnlUeXBlKHt0cmFjazp0fSk6aS5zYW1wbGVFbnRyaWVzWzBdKX1lbHNlIGE9ZS5hdmNDKHQpLG49ZS50eXBlcy5hdmMxO3ZhciBzPVtuZXcgVWludDhBcnJheShbMCwwLDAsMCwwLDAsMCwxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsdC53aWR0aD4+OCYyNTUsMjU1JnQud2lkdGgsdC5oZWlnaHQ+PjgmMjU1LDI1NSZ0LmhlaWdodCwwLDcyLDAsMCwwLDcyLDAsMCwwLDAsMCwwLDAsMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwyNCwxNywxN10pLGFdO3JldHVybiB0LmNvZGVjVHlwZT09PUI/cy5wdXNoKGUuYm94KGUudHlwZXMuZmllbCxuZXcgVWludDhBcnJheShbMSwwXSkpKTp0LnNhclJhdGlvJiZ0LnNhclJhdGlvLmxlbmd0aD4xJiZzLnB1c2goZS5wYXNwKHQuc2FyUmF0aW8pKSxlLmJveC5hcHBseShlLFtuXS5jb25jYXQocykpfX0se2tleToiYXZjQyIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIHIsYSxuLGk9W10scz1bXTtyZXR1cm4gdC5zcHMuZm9yRWFjaCgoZnVuY3Rpb24oZSl7bj1lLmJ5dGVMZW5ndGgsaS5wdXNoKG4+Pj44JjI1NSksaS5wdXNoKDI1NSZuKSxpLnB1c2guYXBwbHkoaSx5KGUpKX0pKSx0LnBwcy5mb3JFYWNoKChmdW5jdGlvbihlKXtuPWUuYnl0ZUxlbmd0aCxzLnB1c2gobj4+PjgmMjU1KSxzLnB1c2goMjU1Jm4pLHMucHVzaC5hcHBseShzLHkoZSkpfSkpLGUuYm94KGUudHlwZXMuYXZjQyxuZXcgVWludDhBcnJheSgocj0oYT1bMSxpWzNdLGlbNF0saVs1XSwyNTUsMjI0fHQuc3BzLmxlbmd0aF0pLmNvbmNhdC5hcHBseShhLGkpLmNvbmNhdChbdC5wcHMubGVuZ3RoXSkpLmNvbmNhdC5hcHBseShyLHMpKSl9fSx7a2V5OiJ2dmNDIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgcj1DZSh7dHJhY2s6dH0pO3JldHVybiBudWxsIT1yJiZyLmJ1aWxkQ29uZmlnQm94P3IuYnVpbGRDb25maWdCb3goe3RyYWNrOnQsTVA0OmV9KTplLmJveChlLnR5cGVzLnZ2Y0MsbmV3IFVpbnQ4QXJyYXkodC52dmNDKSl9fSx7a2V5OiJodmNDIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgcj10Lmh2Y0M7aWYociBpbnN0YW5jZW9mIEFycmF5QnVmZmVyfHxyIGluc3RhbmNlb2YgVWludDhBcnJheSlyZXR1cm4gcjt2YXIgYSxuPXQudnBzLGk9dC5zcHMscz10LnBwcztpZihyKXt2YXIgbz1yLmdlbmVyYWxQcm9maWxlQ29tcGF0aWJpbGl0eUZsYWdzLHU9ci5nZW5lcmFsQ29uc3RyYWludEluZGljYXRvckZsYWdzLGM9KG4ubGVuZ3RoJiYxKSsoaS5sZW5ndGgmJjEpKyhzLmxlbmd0aCYmMSk7YT1bMSxyLmdlbmVyYWxQcm9maWxlU3BhY2U8PDZ8ci5nZW5lcmFsVGllckZsYWc8PDV8ci5nZW5lcmFsUHJvZmlsZUlkYyxvPj4+MjQsbz4+PjE2LG8+Pj44LG8sdVswXSx1WzFdLHVbMl0sdVszXSx1WzRdLHVbNV0sci5nZW5lcmFsTGV2ZWxJZGMsMjQwLDAsMjUyLDI1MnxyLmNocm9tYUZvcm1hdElkYywyNDh8ci5iaXREZXB0aEx1bWFNaW51czgsMjQ4fHIuYml0RGVwdGhDaHJvbWFNaW51czgsMCwwLHIubnVtVGVtcG9yYWxMYXllcnM8PDN8ci50ZW1wb3JhbElkTmVzdGVkPDwyfDMsY107dmFyIGw9ZnVuY3Rpb24oZSl7dmFyIHQ7YS5wdXNoKGUubGVuZ3RoPj44LGUubGVuZ3RoKSwodD1hKS5wdXNoLmFwcGx5KHQseShlKSl9O24ubGVuZ3RoJiYoYS5wdXNoKDE2MCwwLG4ubGVuZ3RoKSxuLmZvckVhY2gobCkpLGkubGVuZ3RoJiYoYS5wdXNoKDE2MSwwLGkubGVuZ3RoKSxpLmZvckVhY2gobCkpLHMubGVuZ3RoJiYoYS5wdXNoKDE2MiwwLHMubGVuZ3RoKSxzLmZvckVhY2gobCkpfWVsc2UgYT1bMSwxLDk2LDAsMCwwLDE0NCwwLDAsMCwwLDAsOTMsMjQwLDAsMjUyLDI1MywyNDgsMjQ4LDAsMCwxNSwzLDE2MCwwLDEsMCwyNCw2NCwxLDEyLDEsMjU1LDI1NSwxLDk2LDAsMCwzLDAsMTQ0LDAsMCwzLDAsMCwzLDAsOTMsMTUzLDE1Miw5LDE2MSwwLDEsMCw0NSw2NiwxLDEsMSw5NiwwLDAsMywwLDE0NCwwLDAsMywwLDAsMywwLDkzLDE2MCwyLDEyOCwxMjgsNDUsMjIsODksMTUzLDE2NCwxNDcsNDMsMTU0LDEyOCwxMjgsMTI4LDEzMCwwLDAsMywwLDIsMCwwLDMsMCw1MCwxNiwxNjIsMCwxLDAsNyw2OCwxLDE5MywxMTQsMTgwLDk4LDY0XTtyZXR1cm4gZS5ib3goZS50eXBlcy5odmNDLG5ldyBVaW50OEFycmF5KGEpKX19LHtrZXk6InBhc3AiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciByPXAodCwyKSxhPXJbMF0sbj1yWzFdO3JldHVybiBlLmJveChlLnR5cGVzLnBhc3AsbmV3IFVpbnQ4QXJyYXkoW2E+PjI0LGE+PjE2JjI1NSxhPj44JjI1NSwyNTUmYSxuPj4yNCxuPj4xNiYyNTUsbj4+OCYyNTUsMjU1Jm5dKSl9fSx7a2V5OiJtcDRhIix2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gZS5ib3goZS50eXBlcy5tcDRhLG5ldyBVaW50OEFycmF5KFswLDAsMCwwLDAsMCwwLDEsMCwwLDAsMCwwLDAsMCwwLDAsdC5jaGFubmVsQ291bnQsMCwxNiwwLDAsMCwwLHQuc2FtcGxlUmF0ZT4+OCYyNTUsMjU1JnQuc2FtcGxlUmF0ZSwwLDBdKSx0LmNvbmZpZy5sZW5ndGg/ZS5lc2RzKHQuY29uZmlnKTp2b2lkIDApfX0se2tleToiZXNkcyIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIHI9dC5sZW5ndGg7cmV0dXJuIGUuYm94KGUudHlwZXMuZXNkcyxuZXcgVWludDhBcnJheShbMCwwLDAsMCwzLDIzK3IsMCwwLDAsNCwxNStyLDY0LDIxLDAsNiwwLDAsMCwyMTgsMTkyLDAsMCwyMTgsMTkyLDVdLmNvbmNhdChbcl0pLmNvbmNhdCh0KS5jb25jYXQoWzYsMSwyXSkpKX19LHtrZXk6Im9wdXMiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciByPW5ldyBVaW50OEFycmF5KFswLDAsMCwwLDAsMCwwLDEsMCwwLDAsMCwwLDAsMCwwLDAsdC5jaGFubmVsQ291bnQsMCwxNiwwLDAsMCwwLHQuc2FtcGxlUmF0ZT4+OCYyNTUsMjU1JnQuc2FtcGxlUmF0ZSwwLDBdKSxhPXQuY29uZmlnLmxlbmd0aD9lLmRPcHModCk6W107cmV0dXJuIGUuYm94KGUudHlwZXMuT3B1cyxyLGEpfX0se2tleToiZE9wcyIsdmFsdWU6ZnVuY3Rpb24odCl7aWYodC5jb25maWcpcmV0dXJuIHQuY29uZmlnWzRdPXQuc2FtcGxlUmF0ZT4+PjI0JjI1NSx0LmNvbmZpZ1s1XT10LnNhbXBsZVJhdGU+Pj4xNiYyNTUsdC5jb25maWdbNl09dC5zYW1wbGVSYXRlPj4+OCYyNTUsdC5jb25maWdbN109MjU1JnQuc2FtcGxlUmF0ZSxlLmJveChlLnR5cGVzLmRPcHMsdC5jb25maWcpfX0se2tleToibXZleCIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIGUuYm94LmFwcGx5KGUsW2UudHlwZXMubXZleF0uY29uY2F0KHkodC5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBlLnRyZXgodC5pZCl9KSkpKSl9fSx7a2V5OiJ0cmV4Iix2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gZS5ib3goZS50eXBlcy50cmV4LG5ldyBVaW50OEFycmF5KFswLDAsMCwwLHQ+PjI0LHQ+PjE2JjI1NSx0Pj44JjI1NSwyNTUmdCwwLDAsMCwxLDAsMCwwLDAsMCwwLDAsMCwwLDEsMCwxXSkpfX0se2tleToidHJleDEiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiBlLmJveChlLnR5cGVzLnRyZXgsbmV3IFVpbnQ4QXJyYXkoWzAsMCwwLDAsdD4+MjQsdD4+MTYmMjU1LHQ+PjgmMjU1LDI1NSZ0LDAsMCwwLDEsMCwwLDIsMCwwLDAsMCwwLDAsMSwwLDBdKSl9fSx7a2V5OiJ0cmV4MiIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIGUuYm94KGUudHlwZXMudHJleCxuZXcgVWludDhBcnJheShbMCwwLDAsMCx0Pj4yNCx0Pj4xNiYyNTUsdD4+OCYyNTUsMjU1JnQsMCwwLDAsMSwwLDAsNCwwLDAsMCwwLDAsMiwwLDAsMF0pKX19LHtrZXk6Im1vb2YiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiBlLmJveC5hcHBseShlLFtlLnR5cGVzLm1vb2YsZS5tZmhkKHRbMF0uc2FtcGxlcz90WzBdLnNhbXBsZXNbMF0uZ29wSWQ6MCldLmNvbmNhdCh5KHQubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gZS50cmFmKHQpfSkpKSkpfX0se2tleToibWZoZCIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIGUuYm94KGUudHlwZXMubWZoZCxuZXcgVWludDhBcnJheShbMCwwLDAsMCx0Pj4yNCx0Pj4xNiYyNTUsdD4+OCYyNTUsMjU1JnRdKSl9fSx7a2V5OiJ0cmFmIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgcj1lLnRmaGQodC5pZCksYT1lLnRmZHQodC5iYXNlTWVkaWFEZWNvZGVUaW1lKSxuPTA7aWYodC5pc1ZpZGVvJiZ0LnZpZGVvU2VuYyYmdC52aWRlb1NlbmMuZm9yRWFjaCgoZnVuY3Rpb24oZSl7bis9OCxlLnN1YnNhbXBsZXMmJmUuc3Vic2FtcGxlcy5sZW5ndGgmJihuKz0yLG4rPTYqZS5zdWJzYW1wbGVzLmxlbmd0aCl9KSksdC52aWRlb1NlbmNMZW5ndGg9bix0LnVzZUVNRSYmKHQuaXNWaWRlb0VuY3J5cHRpb258fHQuaXNBdWRpb0VuY3J5cHRpb24pKXtpZih0LmlzVmlkZW9FbmNyeXB0aW9uKXtpZih0LmlzVmlkZW8pe3ZhciBpPWUuc2Fpeih0KSxzPWUuc2Fpbyh0KSxvPWUudHJ1bjEodCksdT1lLnNlbmModCk7cmV0dXJuIGUuYm94KGUudHlwZXMudHJhZixyLGEsaSxzLG8sdSl9aWYodC5pc0F1ZGlvRW5jcnlwdGlvbil7dmFyIGM9ZS5zYmdwKCksbD1lLnNhaXoodCksZD1lLnNhaW8odCksZj1lLnNlbmModCksaD1lLnRydW4xKHQpO3JldHVybiBlLmJveChlLnR5cGVzLnRyYWYscixhLGMsbCxkLGYsaCl9dmFyIHY9ZS5zYmdwKCkscD1lLnRydW4xKHQpO3JldHVybiBlLmJveChlLnR5cGVzLnRyYWYscixhLHYscCl9aWYodC5pc1ZpZGVvKXt2YXIgeT1lLnRydW4xKHQpO3JldHVybiBlLmJveChlLnR5cGVzLnRyYWYscixhLHkpfXZhciBtPWUuc2JncCgpLGc9ZS5zYWl6KHQpLGs9ZS5zYWlvKHQpLGI9ZS5zZW5jKHQpLF89ZS50cnVuMSh0KTtyZXR1cm4gZS5ib3goZS50eXBlcy50cmFmLHIsYSxtLGcsayxiLF8pfXZhciB4PWUuc2R0cCh0KTtyZXR1cm4gZS5ib3goZS50eXBlcy50cmFmLHIsYSx4LGUudHJ1bih0LnNhbXBsZXMseC5ieXRlTGVuZ3RoKzc2KSl9fSx7a2V5OiJzZHRwIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgcj1uZXcgWGU7cmV0dXJuIHQuc2FtcGxlcy5mb3JFYWNoKChmdW5jdGlvbihlKXtyLndyaXRlKG5ldyBVaW50OEFycmF5KHQuaXNWaWRlbz9bZS5rZXlmcmFtZT8zMjoxNl06WzE2XSkpfSkpLGUuYm94KGUudHlwZXMuc2R0cCx0aGlzLmV4dGVuc2lvbigwLDApLHIuYnVmZmVyKX19LHtrZXk6InRydW4xIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgcj1uZXcgWGUsYT1YZS53cml0ZVVpbnQzMih0LnNhbXBsZXMubGVuZ3RoKSxuPW51bGw7aWYodC5pc1ZpZGVvKXt2YXIgaT10LnZpZGVvU2VuY0xlbmd0aDtuPVhlLndyaXRlVWludDMyKDc2KzE2KnQuc2FtcGxlcy5sZW5ndGgraSs3NyksIXQuaXNWaWRlb0VuY3J5cHRpb24mJnQuaXNBdWRpb0VuY3J5cHRpb24mJihuPVhlLndyaXRlVWludDMyKDc2KzE2KnQuc2FtcGxlcy5sZW5ndGgrMjApKX1lbHNle3ZhciBzPTc2KzEyKnQuc2FtcGxlcy5sZW5ndGgrNTI7dC5pc0F1ZGlvRW5jcnlwdGlvbiYmKHM9NzYrMTIqdC5zYW1wbGVzLmxlbmd0aCs4KnQuYXVkaW9TZW5jLmxlbmd0aCsxMDUpLG49WGUud3JpdGVVaW50MzIocyl9cmV0dXJuIHQuc2FtcGxlcy5mb3JFYWNoKChmdW5jdGlvbihlKXtyLndyaXRlKFhlLndyaXRlVWludDMyKGUuZHVyYXRpb24pKSxyLndyaXRlKFhlLndyaXRlVWludDMyKGUuc2l6ZSkpLHIud3JpdGUoWGUud3JpdGVVaW50MzIoZS5rZXlmcmFtZT8zMzU1NDQzMjo2NTUzNikpLHQuaXNWaWRlbyYmci53cml0ZShYZS53cml0ZVVpbnQzMihlLmN0cz9lLmN0czowKSl9KSksZS5ib3goZS50eXBlcy50cnVuLHRoaXMuZXh0ZW5zaW9uKDAsdC5mbGFncyksYSxuLHIuYnVmZmVyKX19LHtrZXk6InNlbmMiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciByPW5ldyBYZSxhPXQuc2FtcGxlcy5sZW5ndGgsbj10LmlzVmlkZW8/MTY6OCxpPXQuaXNWaWRlbz8yOjAscz1bXSxvPTA7cmV0dXJuIHQuaXNWaWRlbz8ocz10LnZpZGVvU2VuYyxvPXQudmlkZW9TZW5jTGVuZ3RoKTpzPXQuYXVkaW9TZW5jLG89b3x8biphLHIud3JpdGUoWGUud3JpdGVVaW50MzIoMTYrbyksZS50eXBlcy5zZW5jLHRoaXMuZXh0ZW5zaW9uKDAsaSkpLHIud3JpdGUoWGUud3JpdGVVaW50MzIoYSkpLHMuZm9yRWFjaCgoZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTA7dDxlLkluaXRpYWxpemF0aW9uVmVjdG9yLmxlbmd0aDt0Kyspci53cml0ZShuZXcgVWludDhBcnJheShbZS5Jbml0aWFsaXphdGlvblZlY3Rvclt0XV0pKTtlLnN1YnNhbXBsZXMmJmUuc3Vic2FtcGxlcy5sZW5ndGgmJihyLndyaXRlKFhlLndyaXRlVWludDE2KGUuc3Vic2FtcGxlcy5sZW5ndGgpKSxlLnN1YnNhbXBsZXMuZm9yRWFjaCgoZnVuY3Rpb24oZSl7ci53cml0ZShYZS53cml0ZVVpbnQxNihlLkJ5dGVzT2ZDbGVhckRhdGEpKSxyLndyaXRlKFhlLndyaXRlVWludDMyKGUuQnl0ZXNPZlByb3RlY3RlZERhdGEpKX0pKSl9KSksci5idWZmZXJ9fSx7a2V5OiJzYWlvIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgcj0xMip0LnNhbXBsZXMubGVuZ3RoKzE0MTshdC5pc1ZpZGVvJiZ0LmlzQXVkaW9FbmNyeXB0aW9uJiYocj0xNDkpO3ZhciBhPW5ldyBVaW50OEFycmF5KFsxLDAsMCwwLDAsMCwwLDEsMCwwLDAsMCxyPj4yNCYyNTUscj4+MTYmMjU1LHI+PjgmMjU1LDI1NSZyXSk7cmV0dXJuIGUuYm94KGUudHlwZXMuc2FpbyxhKX19LHtrZXk6InNhaXoiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciByPXQuc2FtcGxlcy5sZW5ndGgsYT1uZXcgVWludDhBcnJheShbMCwwLDAsMCwxNixyPj4yNCYyNTUscj4+MTYmMjU1LHI+PjgmMjU1LDI1NSZyXSk7cmV0dXJuIGUuYm94KGUudHlwZXMuc2FpeixhKX19LHtrZXk6InNiZ3AiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9bmV3IFVpbnQ4QXJyYXkoWzExNCwxMTEsMTA4LDEwOCwwLDAsMCwxLDAsMCwxLDI1LDAsMCwwLDFdKTtyZXR1cm4gZS5ib3goZS50eXBlcy5zYmdwLHRoaXMuZXh0ZW5zaW9uKDAsMCksdCl9fSx7a2V5OiJleHRlbnNpb24iLHZhbHVlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIG5ldyBVaW50OEFycmF5KFtlLHQ+PjE2JjI1NSx0Pj44JjI1NSwyNTUmdF0pfX0se2tleToidGZoZCIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIGUuYm94KGUudHlwZXMudGZoZCxuZXcgVWludDhBcnJheShbMCwwLDAsMCx0Pj4yNCx0Pj4xNiYyNTUsdD4+OCYyNTUsMjU1JnRdKSl9fSx7a2V5OiJ0ZmR0Iix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgcj1NYXRoLmZsb29yKHQvKFFlKzEpKSxhPU1hdGguZmxvb3IodCUoUWUrMSkpO3JldHVybiBlLmJveChlLnR5cGVzLnRmZHQsbmV3IFVpbnQ4QXJyYXkoWzEsMCwwLDAscj4+MjQscj4+MTYmMjU1LHI+PjgmMjU1LDI1NSZyLGE+PjI0LGE+PjE2JjI1NSxhPj44JjI1NSwyNTUmYV0pKX19LHtrZXk6InRydW4iLHZhbHVlOmZ1bmN0aW9uKHQscil7dmFyIGE9dC5sZW5ndGgsbj0xMisxNiphO3IrPTgrbjt2YXIgaT1uZXcgVWludDhBcnJheShuKTtpLnNldChbMCwwLDE1LDEsYT4+PjI0JjI1NSxhPj4+MTYmMjU1LGE+Pj44JjI1NSwyNTUmYSxyPj4+MjQmMjU1LHI+Pj4xNiYyNTUscj4+PjgmMjU1LDI1NSZyXSwwKTtmb3IodmFyIHM9MDtzPGE7cysrKXt2YXIgbz10W3NdLHU9by5kdXJhdGlvbixjPW8uc2l6ZSxsPW8uZmxhZyxkPXZvaWQgMD09PWw/e306bCxmPW8uY3RzLGg9dm9pZCAwPT09Zj8wOmY7aS5zZXQoW3U+Pj4yNCYyNTUsdT4+PjE2JjI1NSx1Pj4+OCYyNTUsMjU1JnUsYz4+PjI0JjI1NSxjPj4+MTYmMjU1LGM+Pj44JjI1NSwyNTUmYyxkLmlzTGVhZGluZzw8MnwobnVsbD09PWQuZGVwZW5kc09ufHx2b2lkIDA9PT1kLmRlcGVuZHNPbj8xOmQuZGVwZW5kc09uKSxkLmlzRGVwZW5kZWRPbjw8NnxkLmhhc1JlZHVuZGFuY3k8PDR8ZC5wYWRkaW5nVmFsdWU8PDF8KG51bGw9PT1kLmlzTm9uU3luY1NhbXBsZXx8dm9pZCAwPT09ZC5pc05vblN5bmNTYW1wbGU/MTpkLmlzTm9uU3luY1NhbXBsZSksNjE0NDAmZC5kZWdyYWRhdGlvblByaW9yaXR5LDE1JmQuZGVncmFkYXRpb25Qcmlvcml0eSxoPj4+MjQmMjU1LGg+Pj4xNiYyNTUsaD4+PjgmMjU1LDI1NSZoXSwxMisxNipzKX1yZXR1cm4gZS5ib3goZS50eXBlcy50cnVuLGkpfX0se2tleToibW9vdk1QNCIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIGUuYm94LmFwcGx5KGUsW2UudHlwZXMubW9vdixlLm12aGQodFswXS5kdXJhdGlvbix0WzBdLnRpbWVzY2FsZSldLmNvbmNhdCh5KHQubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gZS50cmFja01QNCh0KX0pKSkpKX19LHtrZXk6InRyYWNrTVA0Iix2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gZS5ib3goZS50eXBlcy50cmFrLGUudGtoZCh0LmlkLHQuZHVyYXRpb24sdC53aWR0aCx0LmhlaWdodCksZS5tZGlhTVA0KHQpKX19LHtrZXk6Im1kaWFNUDQiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiBlLmJveChlLnR5cGVzLm1kaWEsZS5tZGhkKHQuZHVyYXRpb24sdC50aW1lc2NhbGUpLGUuaGRscih0LnR5cGUpLGUubWluZk1QNCh0KSl9fSx7a2V5OiJtaW5mTVA0Iix2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gZS5ib3goZS50eXBlcy5taW5mLHQudHlwZT09PWI/ZS5WTUhEOmUuU01IRCxlLkRJTkYsZS5zdGJsTVA0KHQpKX19LHtrZXk6InN0YmxNUDQiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciByPXQuZXh0LGE9W2Uuc3RzZCh0KSxlLnN0dHMoci5zdHRzKSxlLnN0c2Moci5zdHNjKSxlLnN0c3ooci5zdHN6KSxlLnN0Y28oci5zdGNvKV07cmV0dXJuIHIuc3Rzcy5sZW5ndGgmJmEucHVzaChlLnN0c3Moci5zdHNzKSksci5jdHRzLmxlbmd0aCYmYS5wdXNoKGUuY3R0cyhyLmN0dHMpKSxlLmJveC5hcHBseShlLFtlLnR5cGVzLnN0YmxdLmNvbmNhdChhKSl9fSx7a2V5OiJzdHRzIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgcj10Lmxlbmd0aCxhPW5ldyBVaW50OEFycmF5KDgqciksbj0wO3JldHVybiB0LmZvckVhY2goKGZ1bmN0aW9uKGUpe3ZhciB0PWUudmFsdWUscj1lLmNvdW50O2Euc2V0KFtyPj4yNCxyPj4xNiYyNTUscj4+OCYyNTUsMjU1JnIsdD4+MjQsdD4+MTYmMjU1LHQ+PjgmMjU1LDI1NSZ0XSxuKSxuKz04fSkpLGUuYm94KGUudHlwZXMuc3R0cyxyZShuZXcgVWludDhBcnJheShbMCwwLDAsMCxyPj4yNCxyPj4xNiYyNTUscj4+OCYyNTUsMjU1JnJdKSxhKSl9fSx7a2V5OiJzdHNjIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgcj10Lmxlbmd0aCxhPW5ldyBVaW50OEFycmF5KDEyKnIpLG49MDtyZXR1cm4gdC5mb3JFYWNoKChmdW5jdGlvbihlKXt2YXIgdD1lLmZpcnN0Q2h1bmsscj1lLnNhbXBsZXNQZXJDaHVuayxpPWUuc2FtcGxlRGVzY0luZGV4O2Euc2V0KFt0Pj4yNCx0Pj4xNiYyNTUsdD4+OCYyNTUsMjU1JnQscj4+MjQscj4+MTYmMjU1LHI+PjgmMjU1LDI1NSZyLGk+PjI0LGk+PjE2JjI1NSxpPj44JjI1NSwyNTUmaV0sbiksbis9MTJ9KSksZS5ib3goZS50eXBlcy5zdHNjLHJlKG5ldyBVaW50OEFycmF5KFswLDAsMCwwLHI+PjI0LHI+PjE2JjI1NSxyPj44JjI1NSwyNTUmcl0pLGEpKX19LHtrZXk6InN0c3oiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciByPXQubGVuZ3RoLGE9bmV3IFVpbnQ4QXJyYXkoNCpyKSxuPTA7cmV0dXJuIHQuZm9yRWFjaCgoZnVuY3Rpb24oZSl7YS5zZXQoW2U+PjI0LGU+PjE2JjI1NSxlPj44JjI1NSwyNTUmZV0sbiksbis9NH0pKSxlLmJveChlLnR5cGVzLnN0c3oscmUobmV3IFVpbnQ4QXJyYXkoWzAsMCwwLDAsMCwwLDAsMCxyPj4yNCxyPj4xNiYyNTUscj4+OCYyNTUsMjU1JnJdKSxhKSl9fSx7a2V5OiJzdGNvIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgcj10Lmxlbmd0aCxhPW5ldyBVaW50OEFycmF5KDQqciksbj0wO3JldHVybiB0LmZvckVhY2goKGZ1bmN0aW9uKGUpe2Euc2V0KFtlPj4yNCxlPj4xNiYyNTUsZT4+OCYyNTUsMjU1JmVdLG4pLG4rPTR9KSksZS5ib3goZS50eXBlcy5zdGNvLHJlKG5ldyBVaW50OEFycmF5KFswLDAsMCwwLHI+PjI0LHI+PjE2JjI1NSxyPj44JjI1NSwyNTUmcl0pLGEpKX19LHtrZXk6InN0c3MiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciByPXQubGVuZ3RoLGE9bmV3IFVpbnQ4QXJyYXkoNCpyKSxuPTA7cmV0dXJuIHQuZm9yRWFjaCgoZnVuY3Rpb24oZSl7YS5zZXQoW2U+PjI0LGU+PjE2JjI1NSxlPj44JjI1NSwyNTUmZV0sbiksbis9NH0pKSxlLmJveChlLnR5cGVzLnN0c3MscmUobmV3IFVpbnQ4QXJyYXkoWzAsMCwwLDAscj4+MjQscj4+MTYmMjU1LHI+PjgmMjU1LDI1NSZyXSksYSkpfX0se2tleToiY3R0cyIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIHI9dC5sZW5ndGgsYT1uZXcgVWludDhBcnJheSg4KnIpLG49MDtyZXR1cm4gdC5mb3JFYWNoKChmdW5jdGlvbihlKXt2YXIgdD1lLnZhbHVlLHI9ZS5jb3VudDthLnNldChbcj4+MjQscj4+MTYmMjU1LHI+PjgmMjU1LDI1NSZyLHQ+PjI0LHQ+PjE2JjI1NSx0Pj44JjI1NSwyNTUmdF0sbiksbis9OH0pKSxlLmJveChlLnR5cGVzLmN0dHMscmUobmV3IFVpbnQ4QXJyYXkoWzAsMCwwLDAscj4+MjQscj4+MTYmMjU1LHI+PjgmMjU1LDI1NSZyXSksYSkpfX0se2tleToic3R5cCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gZS5ib3goZS50eXBlcy5zdHlwLG5ldyBVaW50OEFycmF5KFsxMDksMTE1LDEwMCwxMDQsMCwwLDAsMCwxMDksMTE1LDEwMCwxMDQsMTA5LDExNSwxMDUsMTIwXSkpfX0se2tleToic2lkeCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIHI9dC50aW1lc2NhbGUsYT10LnNhbXBsZXNbMF0uZHVyYXRpb24sbj1hKnQuc2FtcGxlcy5sZW5ndGgsaT10LnNhbXBsZXNbMF0uc2FtcGxlT2Zmc2V0KmEscz04O3Quc2FtcGxlcy5mb3JFYWNoKChmdW5jdGlvbihlKXtzKz1lLnNpemV9KSk7dmFyIG89MDtpZih0LmlzVmlkZW8pe3ZhciB1LGM9MDt0LnZpZGVvU2VuYyYmKHU9dC52aWRlb1NlbmMpLHQuaXNWaWRlbyYmdS5mb3JFYWNoKChmdW5jdGlvbihlKXtjKz04LGUuc3Vic2FtcGxlcyYmZS5zdWJzYW1wbGVzLmxlbmd0aCYmKGMrPTIsYys9NiplLnN1YnNhbXBsZXMubGVuZ3RoKX0pKSx0LnZpZGVvU2VuY0xlbmd0aD1jLG89cysxNDErMTYqdC5zYW1wbGVzLmxlbmd0aCtjLHQudXNlRU1FJiZ0LmlzQXVkaW9FbmNyeXB0aW9uJiYhdC5pc1ZpZGVvRW5jcnlwdGlvbiYmKG89cysxNip0LnNhbXBsZXMubGVuZ3RoKzg0KX1lbHNlIG89cysxMTYrMTIqdC5zYW1wbGVzLmxlbmd0aCx0LnVzZUVNRSYmdC5pc0F1ZGlvRW5jcnlwdGlvbiYmKG89cysxNjkrMTIqdC5zYW1wbGVzLmxlbmd0aCs4KnQuYXVkaW9TZW5jLmxlbmd0aCk7dmFyIGw9bmV3IFVpbnQ4QXJyYXkoWzAsMCwwLDAsMCwwLDAsMjU1JnQuaWQscj4+MjQmMjU1LHI+PjE2JjI1NSxyPj44JjI1NSwyNTUmcixpPj4yNCYyNTUsaT4+MTYmMjU1LGk+PjgmMjU1LDI1NSZpLDAsMCwwLDAsMCwwLDAsMSwwLG8+PjE2JjI1NSxvPj44JjI1NSwyNTUmbyxuPj4yNCYyNTUsbj4+MTYmMjU1LG4+PjgmMjU1LDI1NSZuLDE0NCwwLDAsMF0pO3JldHVybiBlLmJveChlLnR5cGVzLnNpZHgsbCl9fSx7a2V5OiJtZGF0Iix2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gZS5ib3goZS50eXBlcy5tZGF0LHQpfX1dKSxlfSgpO2koWmUsInR5cGVzIixbIk9wdXMiLCJkT3BzIiwiYXYwMSIsImF2MUMiLCJhdmMxIiwiYXZjQyIsImh2YzEiLCJodmNDIiwiZGluZiIsImRyZWYiLCJlZHRzIiwiZWxzdCIsImVzZHMiLCJmdHlwIiwiaGRsciIsIm1kYXQiLCJtZGhkIiwibWRpYSIsIm1maGQiLCJtaW5mIiwibW9vZiIsIm1vb3YiLCJtcDRhIiwibXZleCIsIm12aGQiLCJwYXNwIiwic3RibCIsInN0Y28iLCJzdHNjIiwic3RzZCIsInN0c3oiLCJzdHRzIiwidGZkdCIsInRmaGQiLCJ0cmFmIiwidHJhayIsInRyZXgiLCJ0a2hkIiwidm1oZCIsInNtaGQiLCJjdHRzIiwic3RzcyIsInN0eXAiLCJwc3NoIiwic2lkeCIsInNiZ3AiLCJzYWl6Iiwic2FpbyIsInNlbmMiLCJ0cnVuIiwiZW5jdiIsImVuY2EiLCJzaW5mIiwiYnRydCIsImZybWEiLCJ0ZW5jIiwic2NobSIsInNjaGkiLCJtZWhkIiwiZmllbCIsInNkdHAiLCJ2dmMxIiwidnZpMSIsInZ2Y0MiXS5yZWR1Y2UoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGVbdF09W3QuY2hhckNvZGVBdCgwKSx0LmNoYXJDb2RlQXQoMSksdC5jaGFyQ29kZUF0KDIpLHQuY2hhckNvZGVBdCgzKV0sZX0pLE9iamVjdC5jcmVhdGUobnVsbCkpKSxpKFplLCJIRExSX1RZUEVTIix7dmlkZW86bmV3IFVpbnQ4QXJyYXkoWzAsMCwwLDAsMCwwLDAsMCwxMTgsMTA1LDEwMCwxMDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsODYsMTA1LDEwMCwxMDEsMTExLDcyLDk3LDExMCwxMDAsMTA4LDEwMSwxMTQsMF0pLGF1ZGlvOm5ldyBVaW50OEFycmF5KFswLDAsMCwwLDAsMCwwLDAsMTE1LDExMSwxMTcsMTEwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDgzLDExMSwxMTcsMTEwLDEwMCw3Miw5NywxMTAsMTAwLDEwOCwxMDEsMTE0LDBdKX0pLGkoWmUsIkZUWVBBVkMxIixaZS5ib3goWmUudHlwZXMuZnR5cCxuZXcgVWludDhBcnJheShbMTA1LDExNSwxMTEsMTA5LDAsMCwwLDEsMTA1LDExNSwxMTEsMTA5LDk3LDExOCw5OSw0OV0pKSksaShaZSwiRlRZUEhFVjEiLFplLmJveChaZS50eXBlcy5mdHlwLG5ldyBVaW50OEFycmF5KFsxMDUsMTE1LDExMSwxMDksMCwwLDAsMSwxMDUsMTE1LDExMSwxMDksMTA0LDEwMSwxMTgsNDldKSkpLGkoWmUsIkZUWVBWVkMxIixaZS5ib3goWmUudHlwZXMuZnR5cCxuZXcgVWludDhBcnJheShbMTA1LDExNSwxMTEsMTA5LDAsMCwwLDEsMTA1LDExNSwxMTEsMTA5LDExOCwxMTgsOTksNDldKSkpLGkoWmUsIkRJTkYiLFplLmJveChaZS50eXBlcy5kaW5mLFplLmJveChaZS50eXBlcy5kcmVmLG5ldyBVaW50OEFycmF5KFswLDAsMCwwLDAsMCwwLDEsMCwwLDAsMTIsMTE3LDExNCwxMDgsMzIsMCwwLDAsMV0pKSkpLGkoWmUsIlZNSEQiLFplLmJveChaZS50eXBlcy52bWhkLG5ldyBVaW50OEFycmF5KFswLDAsMCwxLDAsMCwwLDAsMCwwLDAsMF0pKSksaShaZSwiU01IRCIsWmUuYm94KFplLnR5cGVzLnNtaGQsbmV3IFVpbnQ4QXJyYXkoWzAsMCwwLDAsMCwwLDAsMF0pKSksaShaZSwiU3RibFRhYmxlIixuZXcgVWludDhBcnJheShbMCwwLDAsMCwwLDAsMCwwXSkpLGkoWmUsIlNUVFMiLFplLmJveChaZS50eXBlcy5zdHRzLFplLlN0YmxUYWJsZSkpLGkoWmUsIlNUU0MiLFplLmJveChaZS50eXBlcy5zdHNjLFplLlN0YmxUYWJsZSkpLGkoWmUsIlNUU1oiLFplLmJveChaZS50eXBlcy5zdHN6LG5ldyBVaW50OEFycmF5KFswLDAsMCwwLDAsMCwwLDAsMCwwLDAsMF0pKSksaShaZSwiU1RDTyIsWmUuYm94KFplLnR5cGVzLnN0Y28sWmUuU3RibFRhYmxlKSk7dmFyIEplPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LGEpe3IodGhpcyxlKSx0aGlzLm5hbWU9dHx8IiIsdGhpcy5fcHJlZml4PSJbIi5jb25jYXQodGhpcy5uYW1lLCJdIiksZS5kaXNhYmxlZD1hfXJldHVybiBuKGUsW3trZXk6ImRlYnVnIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0O2lmKCFlLmRpc2FibGVkKXtmb3IodmFyIHI9YXJndW1lbnRzLmxlbmd0aCxhPW5ldyBBcnJheShyKSxuPTA7bjxyO24rKylhW25dPWFyZ3VtZW50c1tuXTsodD1jb25zb2xlKS5kZWJ1Zy5hcHBseSh0LFt0aGlzLl9wcmVmaXhdLmNvbmNhdChhKSl9fX0se2tleToibG9nIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0O2lmKCFlLmRpc2FibGVkKXtmb3IodmFyIHI9YXJndW1lbnRzLmxlbmd0aCxhPW5ldyBBcnJheShyKSxuPTA7bjxyO24rKylhW25dPWFyZ3VtZW50c1tuXTsodD1jb25zb2xlKS5sb2cuYXBwbHkodCxbdGhpcy5fcHJlZml4XS5jb25jYXQoYSkpfX19LHtrZXk6Indhcm4iLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ7aWYoIWUuZGlzYWJsZWQpe2Zvcih2YXIgcj1hcmd1bWVudHMubGVuZ3RoLGE9bmV3IEFycmF5KHIpLG49MDtuPHI7bisrKWFbbl09YXJndW1lbnRzW25dOyh0PWNvbnNvbGUpLndhcm4uYXBwbHkodCxbdGhpcy5fcHJlZml4XS5jb25jYXQoYSkpfX19LHtrZXk6ImVycm9yIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0O2lmKCFlLmRpc2FibGVkKXtmb3IodmFyIHI9YXJndW1lbnRzLmxlbmd0aCxhPW5ldyBBcnJheShyKSxuPTA7bjxyO24rKylhW25dPWFyZ3VtZW50c1tuXTsodD1jb25zb2xlKS5lcnJvci5hcHBseSh0LFt0aGlzLl9wcmVmaXhdLmNvbmNhdChhKSl9fX0se2tleToidGFibGUiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ7ZS5kaXNhYmxlZHx8KGNvbnNvbGUuZ3JvdXAodGhpcy5fcHJlZml4KSwodD1jb25zb2xlKS50YWJsZS5hcHBseSh0LGFyZ3VtZW50cyksY29uc29sZS5ncm91cEVuZCgpKX19XSxbe2tleToiZW5hYmxlIix2YWx1ZTpmdW5jdGlvbigpe2UuZGlzYWJsZWQ9ITF9fSx7a2V5OiJkaXNhYmxlIix2YWx1ZTpmdW5jdGlvbigpe2UuZGlzYWJsZWQ9ITB9fV0pLGV9KCk7aShKZSwiZGlzYWJsZWQiLCEwKTt2YXIgJGUsZXQsdHQscnQsYXQsbnQsaXQsc3Q9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQsYSxuKXtyKHRoaXMsZSksdGhpcy52aWRlb1RyYWNrPXQsdGhpcy5hdWRpb1RyYWNrPWE7dmFyIGk9L0Nocm9tZVwvKFteLl0rKS8uZXhlYyhuYXZpZ2F0b3IudXNlckFnZW50KTt0aGlzLmZvcmNlRmlyc3RJRFI9aSYmTnVtYmVyKGlbMV0pPDUwLHRoaXMubG9nPW5ldyBKZSgiRk1QNFJlbXV4ZXIiLCFufHwhbi5vcGVuTG9nfHwhbi5vcGVuTG9nKX1yZXR1cm4gbihlLFt7a2V5OiJyZW11eCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZSx0LHIsYSxuLGk9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXSxzPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fSxvPXRoaXMudmlkZW9UcmFjayx1PXRoaXMuYXVkaW9UcmFjayxjPW8uZXhpc3QoKSxsPXUuZXhpc3QoKSxkPVtdO3JldHVybiBpJiYocyYmcy5pbml0TWVyZ2U/KGMmJmQucHVzaCh0aGlzLnZpZGVvVHJhY2spLGwmJmQucHVzaCh0aGlzLmF1ZGlvVHJhY2spLHI9WmUuaW5pdFNlZ21lbnQoZCkpOihjJiYoZT1aZS5pbml0U2VnbWVudChbdGhpcy52aWRlb1RyYWNrXSkpLGwmJih0PVplLmluaXRTZWdtZW50KFt0aGlzLmF1ZGlvVHJhY2tdKSkpKSxjJiZvLmhhc1NhbXBsZSgpJiYoYT10aGlzLl9yZW11eFZpZGVvKCkpLGwmJnUuaGFzU2FtcGxlKCkmJihuPXRoaXMuX3JlbXV4QXVkaW8oKSksby5zYW1wbGVzPVtdLHUuc2FtcGxlcz1bXSx7aW5pdFNlZ21lbnQ6cix2aWRlb0luaXRTZWdtZW50OmUsYXVkaW9Jbml0U2VnbWVudDp0LHZpZGVvU2VnbWVudDphLGF1ZGlvU2VnbWVudDpufX19LHtrZXk6Il9yZW11eFZpZGVvIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMudmlkZW9UcmFjazt0aGlzLmZvcmNlRmlyc3RJRFImJihlLnNhbXBsZXNbMF0uZmxhZz17ZGVwZW5kc09uOjIsaXNOb25TeW5jU2FtcGxlOjB9KTt2YXIgdD1lLnNhbXBsZXMscj0vYXYwMS8udGVzdChlLmNvZGVjKSxhPTA7cj90LmZvckVhY2goKGZ1bmN0aW9uKGUpe2ErPWUuZGF0YS5ieXRlTGVuZ3RofSkpOnQuZm9yRWFjaCgoZnVuY3Rpb24oZSl7YSs9ZS51bml0cy5yZWR1Y2UoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUrdC5ieXRlTGVuZ3RofSksMCksYSs9NCplLnVuaXRzLmxlbmd0aH0pKTt2YXIgbj1uZXcgVWludDhBcnJheShhKTtpZihyKWZvcih2YXIgaSxzPTAsbz10Lmxlbmd0aCx1PTA7czxvO3MrKylpPXRbc10sbi5zZXQoaS5kYXRhLHUpLGkuc2l6ZT1pLmRhdGEuYnl0ZUxlbmd0aCx1Kz1pLnNpemU7ZWxzZSBmb3IodmFyIGMsbD1uZXcgRGF0YVZpZXcobi5idWZmZXIpLGQ9ZnVuY3Rpb24oZSxyKXtyPXRbZl07dmFyIGE9MDtyLnVuaXRzLmZvckVhY2goKGZ1bmN0aW9uKHQpe2wuc2V0VWludDMyKGUsdC5ieXRlTGVuZ3RoKSxlKz00LG4uc2V0KHQsZSksZSs9dC5ieXRlTGVuZ3RoLGErPTQrdC5ieXRlTGVuZ3RofSkpLHIuc2l6ZT1hLHY9ZSxjPXJ9LGY9MCxoPXQubGVuZ3RoLHY9MDtmPGg7ZisrKWQodixjKTt2YXIgcD1aZS5tZGF0KG4pO3JldHVybiByZShaZS5tb29mKFtlXSkscCl9fSx7a2V5OiJfcmVtdXhBdWRpbyIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmF1ZGlvVHJhY2ssdD1uZXcgVWludDhBcnJheShlLnNhbXBsZXMucmVkdWNlKChmdW5jdGlvbihlLHQpe3JldHVybiBlK3Quc2l6ZX0pLDApKTtlLnNhbXBsZXMucmVkdWNlKChmdW5jdGlvbihlLHIpe3JldHVybiB0LnNldChyLmRhdGEsZSksZStyLnNpemV9KSwwKTt2YXIgcj1aZS5tZGF0KHQpO3JldHVybiByZShaZS5tb29mKFtlXSkscil9fSx7a2V5OiJyZXNldCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnZpZGVvVHJhY2sucmVzZXQoKSx0aGlzLmF1ZGlvVHJhY2sucmVzZXQoKX19XSksZX0oKSxvdD0obnVsbD09PSgkZT0idW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbFRoaXM/Z2xvYmFsVGhpczp2b2lkIDApfHx2b2lkIDA9PT0kZT92b2lkIDA6JGUuY3J5cHRvKXx8KG51bGw9PT0oZXQ9InVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOnZvaWQgMCl8fHZvaWQgMD09PWV0P3ZvaWQgMDpldC5jcnlwdG8pfHwobnVsbD09PSh0dD0idW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6dm9pZCAwKXx8dm9pZCAwPT09dHQ/dm9pZCAwOnR0LmNyeXB0byl8fChudWxsPT09KHJ0PSJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZj9zZWxmOnZvaWQgMCl8fHZvaWQgMD09PXJ0P3ZvaWQgMDpydC5jcnlwdG8pfHwobnVsbD09PShhdD0idW5kZWZpbmVkIiE9dHlwZW9mIGZyYW1lcz9mcmFtZXM6dm9pZCAwKXx8dm9pZCAwPT09YXR8fG51bGw9PT0obnQ9YXRbMF0pfHx2b2lkIDA9PT1udD92b2lkIDA6bnQuY3J5cHRvKTtpdD1vdD9mdW5jdGlvbihlKXtmb3IodmFyIHQ9W10scj0wO3I8ZTtyKz00KXQucHVzaChvdC5nZXRSYW5kb21WYWx1ZXMobmV3IFVpbnQzMkFycmF5KDEpKVswXSk7cmV0dXJuIG5ldyBjdCh0LGUpfTpmdW5jdGlvbihlKXtmb3IodmFyIHQscj1bXSxhPWZ1bmN0aW9uKGUpe3ZhciB0PWUscj05ODc2NTQzMjEsYT00Mjk0OTY3Mjk1O3JldHVybiBmdW5jdGlvbigpe3ZhciBlPSgocj0zNjk2OSooNjU1MzUmcikrKHI+PjE2KSZhKTw8MTYpKyh0PTE4ZTMqKDY1NTM1JnQpKyh0Pj4xNikmYSkmYTtyZXR1cm4gZS89NDI5NDk2NzI5NiwoZSs9LjUpKihNYXRoLnJhbmRvbSgpPi41PzE6LTEpfX0sbj0wO248ZTtuKz00KXt2YXIgaT1hKDQyOTQ5NjcyOTYqKHR8fE1hdGgucmFuZG9tKCkpKTt0PTk4NzY1NDA3MSppKCksci5wdXNoKDQyOTQ5NjcyOTYqaSgpfDApfXJldHVybiBuZXcgY3QocixlKX07dmFyIHV0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3IodGhpcyxlKX1yZXR1cm4gbihlLFt7a2V5OiJtaXhJbiIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5hc3NpZ24odGhpcyxlKX19LHtrZXk6ImNsb25lIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPW5ldyB0aGlzLmNvbnN0cnVjdG9yO3JldHVybiBPYmplY3QuYXNzaWduKGUsdGhpcyksZX19XSxbe2tleToiY3JlYXRlIix2YWx1ZTpmdW5jdGlvbigpe2Zvcih2YXIgZT1hcmd1bWVudHMubGVuZ3RoLHQ9bmV3IEFycmF5KGUpLHI9MDtyPGU7cisrKXRbcl09YXJndW1lbnRzW3JdO3JldHVybiBsKHRoaXMsdCl9fV0pLGV9KCksY3Q9ZnVuY3Rpb24oZSl7cyhhLGUpO3ZhciB0PWYoYSk7ZnVuY3Rpb24gYSgpe3ZhciBlLG49YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOltdLGk9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjQqbi5sZW5ndGg7cih0aGlzLGEpLGU9dC5jYWxsKHRoaXMpO3ZhciBzPW47aWYocyBpbnN0YW5jZW9mIEFycmF5QnVmZmVyJiYocz1uZXcgVWludDhBcnJheShzKSksKHMgaW5zdGFuY2VvZiBJbnQ4QXJyYXl8fHMgaW5zdGFuY2VvZiBVaW50OENsYW1wZWRBcnJheXx8cyBpbnN0YW5jZW9mIEludDE2QXJyYXl8fHMgaW5zdGFuY2VvZiBVaW50MTZBcnJheXx8cyBpbnN0YW5jZW9mIEludDMyQXJyYXl8fHMgaW5zdGFuY2VvZiBVaW50MzJBcnJheXx8cyBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheXx8cyBpbnN0YW5jZW9mIEZsb2F0NjRBcnJheSkmJihzPW5ldyBVaW50OEFycmF5KHMuYnVmZmVyLHMuYnl0ZU9mZnNldCxzLmJ5dGVMZW5ndGgpKSxzIGluc3RhbmNlb2YgVWludDhBcnJheSl7Zm9yKHZhciBvPXMuYnl0ZUxlbmd0aCx1PVtdLGM9MDtjPG87Yys9MSl1W2M+Pj4yXXw9c1tjXTw8MjQtYyU0Kjg7ZS53b3Jkcz11LGUuc2lnQnl0ZXM9b31lbHNlIGUud29yZHM9bixlLnNpZ0J5dGVzPWk7cmV0dXJuIGV9cmV0dXJuIG4oYSxbe2tleToidG9TdHJpbmciLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOmx0O3JldHVybiBlLnN0cmluZ2lmeSh0aGlzKX19LHtrZXk6ImNvbmNhdCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy53b3JkcyxyPWUud29yZHMsYT10aGlzLnNpZ0J5dGVzLG49ZS5zaWdCeXRlcztpZih0aGlzLmNsYW1wKCksYSU0KWZvcih2YXIgaT0wO2k8bjtpKz0xKXt2YXIgcz1yW2k+Pj4yXT4+PjI0LWklNCo4JjI1NTt0W2EraT4+PjJdfD1zPDwyNC0oYStpKSU0Kjh9ZWxzZSBmb3IodmFyIG89MDtvPG47bys9NCl0W2Erbz4+PjJdPXJbbz4+PjJdO3JldHVybiB0aGlzLnNpZ0J5dGVzKz1uLHRoaXN9fSx7a2V5OiJjbGFtcCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLndvcmRzLHQ9dGhpcy5zaWdCeXRlcztlW3Q+Pj4yXSY9NDI5NDk2NzI5NTw8MzItdCU0KjgsZS5sZW5ndGg9TWF0aC5jZWlsKHQvNCl9fSx7a2V5OiJjbG9uZSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT12KG8oYS5wcm90b3R5cGUpLCJjbG9uZSIsdGhpcykuY2FsbCh0aGlzKTtyZXR1cm4gZS53b3Jkcz10aGlzLndvcmRzLnNsaWNlKDApLGV9fV0pLGF9KHV0KTtpKGN0LCJyYW5kb20iLGl0KTtmb3IodmFyIGx0PXtzdHJpbmdpZnk6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PWUud29yZHMscj1lLnNpZ0J5dGVzLGE9W10sbj0wO248cjtuKz0xKXt2YXIgaT10W24+Pj4yXT4+PjI0LW4lNCo4JjI1NTthLnB1c2goKGk+Pj40KS50b1N0cmluZygxNikpLGEucHVzaCgoMTUmaSkudG9TdHJpbmcoMTYpKX1yZXR1cm4gYS5qb2luKCIiKX0scGFyc2U6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PWUubGVuZ3RoLHI9W10sYT0wO2E8dDthKz0yKXJbYT4+PjNdfD1wYXJzZUludChlLnN1YnN0cihhLDIpLDE2KTw8MjQtYSU4KjQ7cmV0dXJuIG5ldyBjdChyLHQvMil9fSxkdD1mdW5jdGlvbihlKXtmb3IodmFyIHQ9ZS5sZW5ndGgscj1bXSxhPTA7YTx0O2ErPTEpclthPj4+Ml18PSgyNTUmZS5jaGFyQ29kZUF0KGEpKTw8MjQtYSU0Kjg7cmV0dXJuIG5ldyBjdChyLHQpfSxmdD1mdW5jdGlvbihlKXtyZXR1cm4gZHQodW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KGUpKSl9LGh0PWZ1bmN0aW9uKGUpe3MoYSxlKTt2YXIgdD1mKGEpO2Z1bmN0aW9uIGEoKXt2YXIgZTtyZXR1cm4gcih0aGlzLGEpLChlPXQuY2FsbCh0aGlzKSkuX21pbkJ1ZmZlclNpemU9MCxlfXJldHVybiBuKGEsW3trZXk6InJlc2V0Iix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuX2RhdGE9bmV3IGN0LHRoaXMuX25EYXRhQnl0ZXM9MH19LHtrZXk6Il9hcHBlbmQiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PWU7InN0cmluZyI9PXR5cGVvZiB0JiYodD1mdCh0KSksdGhpcy5fZGF0YS5jb25jYXQodCksdGhpcy5fbkRhdGFCeXRlcys9dC5zaWdCeXRlc319LHtrZXk6Il9wcm9jZXNzIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdCxyPXRoaXMuX2RhdGEsYT10aGlzLmJsb2NrU2l6ZSxuPXIud29yZHMsaT1yLnNpZ0J5dGVzLHM9aS8oNCphKSxvPShzPWU/TWF0aC5jZWlsKHMpOk1hdGgubWF4KCgwfHMpLXRoaXMuX21pbkJ1ZmZlclNpemUsMCkpKmEsdT1NYXRoLm1pbig0Km8saSk7aWYobyl7Zm9yKHZhciBjPTA7YzxvO2MrPWEpdGhpcy5fZG9Qcm9jZXNzQmxvY2sobixjKTt0PW4uc3BsaWNlKDAsbyksci5zaWdCeXRlcy09dX1yZXR1cm4gbmV3IGN0KHQsdSl9fSx7a2V5OiJjbG9uZSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT12KG8oYS5wcm90b3R5cGUpLCJjbG9uZSIsdGhpcykuY2FsbCh0aGlzKTtyZXR1cm4gZS5fZGF0YT10aGlzLl9kYXRhLmNsb25lKCksZX19XSksYX0odXQpLHZ0PWZ1bmN0aW9uKGUpe3MoYSxlKTt2YXIgdD1mKGEpO2Z1bmN0aW9uIGEoZSl7dmFyIG47cmV0dXJuIHIodGhpcyxhKSwobj10LmNhbGwodGhpcykpLmJsb2NrU2l6ZT0xNixuLmNmZz1PYmplY3QuYXNzaWduKG5ldyB1dCxlKSxuLnJlc2V0KCksbn1yZXR1cm4gbihhLFt7a2V5OiJyZXNldCIsdmFsdWU6ZnVuY3Rpb24oKXt2KG8oYS5wcm90b3R5cGUpLCJyZXNldCIsdGhpcykuY2FsbCh0aGlzKSx0aGlzLl9kb1Jlc2V0KCl9fSx7a2V5OiJ1cGRhdGUiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9hcHBlbmQoZSksdGhpcy5fcHJvY2VzcygpLHRoaXN9fSx7a2V5OiJmaW5hbGl6ZSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJnRoaXMuX2FwcGVuZChlKSx0aGlzLl9kb0ZpbmFsaXplKCl9fV0sW3trZXk6Il9jcmVhdGVIZWxwZXIiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0LHIpe3JldHVybiBuZXcgZShyKS5maW5hbGl6ZSh0KX19fSx7a2V5OiJfY3JlYXRlSG1hY0hlbHBlciIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQscil7cmV0dXJuIG5ldyBwdChlLHIpLmZpbmFsaXplKHQpfX19XSksYX0oaHQpLHB0PWZ1bmN0aW9uKGUpe3MoYSxlKTt2YXIgdD1mKGEpO2Z1bmN0aW9uIGEoZSxuKXt2YXIgaTtyKHRoaXMsYSksaT10LmNhbGwodGhpcyk7dmFyIHM9bmV3IGU7aS5faGFzaGVyPXM7dmFyIG89bjsic3RyaW5nIj09dHlwZW9mIG8mJihvPWZ0KG8pKTt2YXIgdT1zLmJsb2NrU2l6ZSxjPTQqdTtvLnNpZ0J5dGVzPmMmJihvPXMuZmluYWxpemUobikpLG8uY2xhbXAoKTt2YXIgbD1vLmNsb25lKCk7aS5fb0tleT1sO3ZhciBkPW8uY2xvbmUoKTtpLl9pS2V5PWQ7Zm9yKHZhciBmPWwud29yZHMsaD1kLndvcmRzLHY9MDt2PHU7dis9MSlmW3ZdXj0xNTQ5NTU2ODI4LGhbdl1ePTkwOTUyMjQ4NjtyZXR1cm4gbC5zaWdCeXRlcz1jLGQuc2lnQnl0ZXM9YyxpLnJlc2V0KCksaX1yZXR1cm4gbihhLFt7a2V5OiJyZXNldCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9oYXNoZXI7ZS5yZXNldCgpLGUudXBkYXRlKHRoaXMuX2lLZXkpfX0se2tleToidXBkYXRlIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5faGFzaGVyLnVwZGF0ZShlKSx0aGlzfX0se2tleToiZmluYWxpemUiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX2hhc2hlcixyPXQuZmluYWxpemUoZSk7cmV0dXJuIHQucmVzZXQoKSx0LmZpbmFsaXplKHRoaXMuX29LZXkuY2xvbmUoKS5jb25jYXQocikpfX1dKSxhfSh1dCkseXQ9e3N0cmluZ2lmeTpmdW5jdGlvbihlKXt2YXIgdD1lLndvcmRzLHI9ZS5zaWdCeXRlcyxhPXRoaXMuX21hcDtlLmNsYW1wKCk7Zm9yKHZhciBuPVtdLGk9MDtpPHI7aSs9Mylmb3IodmFyIHM9KHRbaT4+PjJdPj4+MjQtaSU0KjgmMjU1KTw8MTZ8KHRbaSsxPj4+Ml0+Pj4yNC0oaSsxKSU0KjgmMjU1KTw8OHx0W2krMj4+PjJdPj4+MjQtKGkrMiklNCo4JjI1NSxvPTA7bzw0JiZpKy43NSpvPHI7bys9MSluLnB1c2goYS5jaGFyQXQocz4+PjYqKDMtbykmNjMpKTt2YXIgdT1hLmNoYXJBdCg2NCk7aWYodSlmb3IoO24ubGVuZ3RoJTQ7KW4ucHVzaCh1KTtyZXR1cm4gbi5qb2luKCIiKX0scGFyc2U6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5sZW5ndGgscj10aGlzLl9tYXAsYT10aGlzLl9yZXZlcnNlTWFwO2lmKCFhKXt0aGlzLl9yZXZlcnNlTWFwPVtdLGE9dGhpcy5fcmV2ZXJzZU1hcDtmb3IodmFyIG49MDtuPHIubGVuZ3RoO24rPTEpYVtyLmNoYXJDb2RlQXQobildPW59dmFyIGk9ci5jaGFyQXQoNjQpO2lmKGkpe3ZhciBzPWUuaW5kZXhPZihpKTstMSE9PXMmJih0PXMpfXJldHVybiBmdW5jdGlvbihlLHQscil7Zm9yKHZhciBhPVtdLG49MCxpPTA7aTx0O2krPTEpaWYoaSU0KXt2YXIgcz1yW2UuY2hhckNvZGVBdChpLTEpXTw8aSU0KjJ8cltlLmNoYXJDb2RlQXQoaSldPj4+Ni1pJTQqMjthW24+Pj4yXXw9czw8MjQtbiU0Kjgsbis9MX1yZXR1cm4gY3QuY3JlYXRlKGEsbil9KGUsdCxhKX0sX21hcDoiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLz0ifSxtdD1bXSxndD0wO2d0PDY0O2d0Kz0xKW10W2d0XT00Mjk0OTY3Mjk2Kk1hdGguYWJzKE1hdGguc2luKGd0KzEpKXwwO3ZhciBrdD1mdW5jdGlvbihlLHQscixhLG4saSxzKXt2YXIgbz1lKyh0JnJ8fnQmYSkrbitzO3JldHVybihvPDxpfG8+Pj4zMi1pKSt0fSxidD1mdW5jdGlvbihlLHQscixhLG4saSxzKXt2YXIgbz1lKyh0JmF8ciZ+YSkrbitzO3JldHVybihvPDxpfG8+Pj4zMi1pKSt0fSxfdD1mdW5jdGlvbihlLHQscixhLG4saSxzKXt2YXIgbz1lKyh0XnJeYSkrbitzO3JldHVybihvPDxpfG8+Pj4zMi1pKSt0fSx4dD1mdW5jdGlvbihlLHQscixhLG4saSxzKXt2YXIgbz1lKyhyXih0fH5hKSkrbitzO3JldHVybihvPDxpfG8+Pj4zMi1pKSt0fSx3dD1mdW5jdGlvbihlKXtzKGEsZSk7dmFyIHQ9ZihhKTtmdW5jdGlvbiBhKCl7cmV0dXJuIHIodGhpcyxhKSx0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gbihhLFt7a2V5OiJfZG9SZXNldCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLl9oYXNoPW5ldyBjdChbMTczMjU4NDE5Myw0MDIzMjMzNDE3LDI1NjIzODMxMDIsMjcxNzMzODc4XSl9fSx7a2V5OiJfZG9Qcm9jZXNzQmxvY2siLHZhbHVlOmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPWUsYT0wO2E8MTY7YSs9MSl7dmFyIG49dCthLGk9ZVtuXTtyW25dPTE2NzExOTM1JihpPDw4fGk+Pj4yNCl8NDI3ODI1NTM2MCYoaTw8MjR8aT4+PjgpfXZhciBzPXRoaXMuX2hhc2gud29yZHMsbz1yW3QrMF0sdT1yW3QrMV0sYz1yW3QrMl0sbD1yW3QrM10sZD1yW3QrNF0sZj1yW3QrNV0saD1yW3QrNl0sdj1yW3QrN10scD1yW3QrOF0seT1yW3QrOV0sbT1yW3QrMTBdLGc9clt0KzExXSxrPXJbdCsxMl0sYj1yW3QrMTNdLF89clt0KzE0XSx4PXJbdCsxNV0sdz1zWzBdLFM9c1sxXSxCPXNbMl0sVD1zWzNdO3c9a3QodyxTLEIsVCxvLDcsbXRbMF0pLFQ9a3QoVCx3LFMsQix1LDEyLG10WzFdKSxCPWt0KEIsVCx3LFMsYywxNyxtdFsyXSksUz1rdChTLEIsVCx3LGwsMjIsbXRbM10pLHc9a3QodyxTLEIsVCxkLDcsbXRbNF0pLFQ9a3QoVCx3LFMsQixmLDEyLG10WzVdKSxCPWt0KEIsVCx3LFMsaCwxNyxtdFs2XSksUz1rdChTLEIsVCx3LHYsMjIsbXRbN10pLHc9a3QodyxTLEIsVCxwLDcsbXRbOF0pLFQ9a3QoVCx3LFMsQix5LDEyLG10WzldKSxCPWt0KEIsVCx3LFMsbSwxNyxtdFsxMF0pLFM9a3QoUyxCLFQsdyxnLDIyLG10WzExXSksdz1rdCh3LFMsQixULGssNyxtdFsxMl0pLFQ9a3QoVCx3LFMsQixiLDEyLG10WzEzXSksQj1rdChCLFQsdyxTLF8sMTcsbXRbMTRdKSxTPWt0KFMsQixULHcseCwyMixtdFsxNV0pLHc9YnQodyxTLEIsVCx1LDUsbXRbMTZdKSxUPWJ0KFQsdyxTLEIsaCw5LG10WzE3XSksQj1idChCLFQsdyxTLGcsMTQsbXRbMThdKSxTPWJ0KFMsQixULHcsbywyMCxtdFsxOV0pLHc9YnQodyxTLEIsVCxmLDUsbXRbMjBdKSxUPWJ0KFQsdyxTLEIsbSw5LG10WzIxXSksQj1idChCLFQsdyxTLHgsMTQsbXRbMjJdKSxTPWJ0KFMsQixULHcsZCwyMCxtdFsyM10pLHc9YnQodyxTLEIsVCx5LDUsbXRbMjRdKSxUPWJ0KFQsdyxTLEIsXyw5LG10WzI1XSksQj1idChCLFQsdyxTLGwsMTQsbXRbMjZdKSxTPWJ0KFMsQixULHcscCwyMCxtdFsyN10pLHc9YnQodyxTLEIsVCxiLDUsbXRbMjhdKSxUPWJ0KFQsdyxTLEIsYyw5LG10WzI5XSksQj1idChCLFQsdyxTLHYsMTQsbXRbMzBdKSxTPWJ0KFMsQixULHcsaywyMCxtdFszMV0pLHc9X3QodyxTLEIsVCxmLDQsbXRbMzJdKSxUPV90KFQsdyxTLEIscCwxMSxtdFszM10pLEI9X3QoQixULHcsUyxnLDE2LG10WzM0XSksUz1fdChTLEIsVCx3LF8sMjMsbXRbMzVdKSx3PV90KHcsUyxCLFQsdSw0LG10WzM2XSksVD1fdChULHcsUyxCLGQsMTEsbXRbMzddKSxCPV90KEIsVCx3LFMsdiwxNixtdFszOF0pLFM9X3QoUyxCLFQsdyxtLDIzLG10WzM5XSksdz1fdCh3LFMsQixULGIsNCxtdFs0MF0pLFQ9X3QoVCx3LFMsQixvLDExLG10WzQxXSksQj1fdChCLFQsdyxTLGwsMTYsbXRbNDJdKSxTPV90KFMsQixULHcsaCwyMyxtdFs0M10pLHc9X3QodyxTLEIsVCx5LDQsbXRbNDRdKSxUPV90KFQsdyxTLEIsaywxMSxtdFs0NV0pLEI9X3QoQixULHcsUyx4LDE2LG10WzQ2XSksUz1fdChTLEIsVCx3LGMsMjMsbXRbNDddKSx3PXh0KHcsUyxCLFQsbyw2LG10WzQ4XSksVD14dChULHcsUyxCLHYsMTAsbXRbNDldKSxCPXh0KEIsVCx3LFMsXywxNSxtdFs1MF0pLFM9eHQoUyxCLFQsdyxmLDIxLG10WzUxXSksdz14dCh3LFMsQixULGssNixtdFs1Ml0pLFQ9eHQoVCx3LFMsQixsLDEwLG10WzUzXSksQj14dChCLFQsdyxTLG0sMTUsbXRbNTRdKSxTPXh0KFMsQixULHcsdSwyMSxtdFs1NV0pLHc9eHQodyxTLEIsVCxwLDYsbXRbNTZdKSxUPXh0KFQsdyxTLEIseCwxMCxtdFs1N10pLEI9eHQoQixULHcsUyxoLDE1LG10WzU4XSksUz14dChTLEIsVCx3LGIsMjEsbXRbNTldKSx3PXh0KHcsUyxCLFQsZCw2LG10WzYwXSksVD14dChULHcsUyxCLGcsMTAsbXRbNjFdKSxCPXh0KEIsVCx3LFMsYywxNSxtdFs2Ml0pLFM9eHQoUyxCLFQsdyx5LDIxLG10WzYzXSksc1swXT1zWzBdK3d8MCxzWzFdPXNbMV0rU3wwLHNbMl09c1syXStCfDAsc1szXT1zWzNdK1R8MH19LHtrZXk6Il9kb0ZpbmFsaXplIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX2RhdGEsdD1lLndvcmRzLHI9OCp0aGlzLl9uRGF0YUJ5dGVzLGE9OCplLnNpZ0J5dGVzO3RbYT4+PjVdfD0xMjg8PDI0LWElMzI7dmFyIG49TWF0aC5mbG9vcihyLzQyOTQ5NjcyOTYpLGk9cjt0WzE1KyhhKzY0Pj4+OTw8NCldPTE2NzExOTM1JihuPDw4fG4+Pj4yNCl8NDI3ODI1NTM2MCYobjw8MjR8bj4+PjgpLHRbMTQrKGErNjQ+Pj45PDw0KV09MTY3MTE5MzUmKGk8PDh8aT4+PjI0KXw0Mjc4MjU1MzYwJihpPDwyNHxpPj4+OCksZS5zaWdCeXRlcz00Kih0Lmxlbmd0aCsxKSx0aGlzLl9wcm9jZXNzKCk7Zm9yKHZhciBzPXRoaXMuX2hhc2gsbz1zLndvcmRzLHU9MDt1PDQ7dSs9MSl7dmFyIGM9b1t1XTtvW3VdPTE2NzExOTM1JihjPDw4fGM+Pj4yNCl8NDI3ODI1NTM2MCYoYzw8MjR8Yz4+PjgpfXJldHVybiBzfX0se2tleToiY2xvbmUiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dihvKGEucHJvdG90eXBlKSwiY2xvbmUiLHRoaXMpLmNhbGwodGhpcyk7cmV0dXJuIGUuX2hhc2g9dGhpcy5faGFzaC5jbG9uZSgpLGV9fV0pLGF9KHZ0KTt2dC5fY3JlYXRlSGVscGVyKHd0KSx2dC5fY3JlYXRlSG1hY0hlbHBlcih3dCk7dmFyIFN0PWZ1bmN0aW9uKGUpe3MoYSxlKTt2YXIgdD1mKGEpO2Z1bmN0aW9uIGEoZSl7dmFyIG47cmV0dXJuIHIodGhpcyxhKSwobj10LmNhbGwodGhpcykpLmNmZz1PYmplY3QuYXNzaWduKG5ldyB1dCx7a2V5U2l6ZTo0LGhhc2hlcjp3dCxpdGVyYXRpb25zOjF9LGUpLG59cmV0dXJuIG4oYSxbe2tleToiY29tcHV0ZSIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHIsYT10aGlzLmNmZyxuPWEuaGFzaGVyLmNyZWF0ZSgpLGk9Y3QuY3JlYXRlKCkscz1pLndvcmRzLG89YS5rZXlTaXplLHU9YS5pdGVyYXRpb25zO3MubGVuZ3RoPG87KXtyJiZuLnVwZGF0ZShyKSxyPW4udXBkYXRlKGUpLmZpbmFsaXplKHQpLG4ucmVzZXQoKTtmb3IodmFyIGM9MTtjPHU7Yys9MSlyPW4uZmluYWxpemUociksbi5yZXNldCgpO2kuY29uY2F0KHIpfXJldHVybiBpLnNpZ0J5dGVzPTQqbyxpfX1dKSxhfSh1dCksQnQ9ZnVuY3Rpb24oZSl7cyhhLGUpO3ZhciB0PWYoYSk7ZnVuY3Rpb24gYShlLG4saSl7dmFyIHM7cmV0dXJuIHIodGhpcyxhKSwocz10LmNhbGwodGhpcykpLmNmZz1PYmplY3QuYXNzaWduKG5ldyB1dCxpKSxzLl94Zm9ybU1vZGU9ZSxzLl9rZXk9bixzLnJlc2V0KCksc31yZXR1cm4gbihhLFt7a2V5OiJyZXNldCIsdmFsdWU6ZnVuY3Rpb24oKXt2KG8oYS5wcm90b3R5cGUpLCJyZXNldCIsdGhpcykuY2FsbCh0aGlzKSx0aGlzLl9kb1Jlc2V0KCl9fSx7a2V5OiJwcm9jZXNzIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fYXBwZW5kKGUpLHRoaXMuX3Byb2Nlc3MoKX19LHtrZXk6ImZpbmFsaXplIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmdGhpcy5fYXBwZW5kKGUpLHRoaXMuX2RvRmluYWxpemUoKX19XSxbe2tleToiY3JlYXRlRW5jcnlwdG9yIix2YWx1ZTpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLmNyZWF0ZSh0aGlzLl9FTkNfWEZPUk1fTU9ERSxlLHQpfX0se2tleToiY3JlYXRlRGVjcnlwdG9yIix2YWx1ZTpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLmNyZWF0ZSh0aGlzLl9ERUNfWEZPUk1fTU9ERSxlLHQpfX0se2tleToiX2NyZWF0ZUhlbHBlciIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZnVuY3Rpb24oZSl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBlP090OlB0fTtyZXR1cm57ZW5jcnlwdDpmdW5jdGlvbihyLGEsbil7cmV0dXJuIHQoYSkuZW5jcnlwdChlLHIsYSxuKX0sZGVjcnlwdDpmdW5jdGlvbihyLGEsbil7cmV0dXJuIHQoYSkuZGVjcnlwdChlLHIsYSxuKX19fX1dKSxhfShodCk7QnQuX0VOQ19YRk9STV9NT0RFPTEsQnQuX0RFQ19YRk9STV9NT0RFPTIsQnQua2V5U2l6ZT00LEJ0Lml2U2l6ZT00O3ZhciBUdD1mdW5jdGlvbihlKXtzKGEsZSk7dmFyIHQ9ZihhKTtmdW5jdGlvbiBhKGUsbil7dmFyIGk7cmV0dXJuIHIodGhpcyxhKSwoaT10LmNhbGwodGhpcykpLl9jaXBoZXI9ZSxpLl9pdj1uLGl9cmV0dXJuIG4oYSxudWxsLFt7a2V5OiJjcmVhdGVFbmNyeXB0b3IiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuRW5jcnlwdG9yLmNyZWF0ZShlLHQpfX0se2tleToiY3JlYXRlRGVjcnlwdG9yIix2YWx1ZTpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLkRlY3J5cHRvci5jcmVhdGUoZSx0KX19XSksYX0odXQpO2Z1bmN0aW9uIEF0KGUsdCxyKXt2YXIgYSxuPWUsaT10aGlzLl9pdjtpPyhhPWksdGhpcy5faXY9dm9pZCAwKTphPXRoaXMuX3ByZXZCbG9jaztmb3IodmFyIHM9MDtzPHI7cys9MSluW3Qrc11ePWFbc119dmFyIEV0PWZ1bmN0aW9uKGUpe3MoYSxlKTt2YXIgdD1mKGEpO2Z1bmN0aW9uIGEoKXtyZXR1cm4gcih0aGlzLGEpLHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiBuKGEpfShUdCk7RXQuRW5jcnlwdG9yPWZ1bmN0aW9uKGUpe3MoYSxlKTt2YXIgdD1mKGEpO2Z1bmN0aW9uIGEoKXtyZXR1cm4gcih0aGlzLGEpLHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiBuKGEsW3trZXk6InByb2Nlc3NCbG9jayIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzLl9jaXBoZXIsYT1yLmJsb2NrU2l6ZTtBdC5jYWxsKHRoaXMsZSx0LGEpLHIuZW5jcnlwdEJsb2NrKGUsdCksdGhpcy5fcHJldkJsb2NrPWUuc2xpY2UodCx0K2EpfX1dKSxhfShFdCksRXQuRGVjcnlwdG9yPWZ1bmN0aW9uKGUpe3MoYSxlKTt2YXIgdD1mKGEpO2Z1bmN0aW9uIGEoKXtyZXR1cm4gcih0aGlzLGEpLHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiBuKGEsW3trZXk6InByb2Nlc3NCbG9jayIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzLl9jaXBoZXIsYT1yLmJsb2NrU2l6ZSxuPWUuc2xpY2UodCx0K2EpO3IuZGVjcnlwdEJsb2NrKGUsdCksQXQuY2FsbCh0aGlzLGUsdCxhKSx0aGlzLl9wcmV2QmxvY2s9bn19XSksYX0oRXQpO3ZhciBDdD17cGFkOmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPTQqdCxhPXItZS5zaWdCeXRlcyVyLG49YTw8MjR8YTw8MTZ8YTw8OHxhLGk9W10scz0wO3M8YTtzKz00KWkucHVzaChuKTt2YXIgbz1jdC5jcmVhdGUoaSxhKTtlLmNvbmNhdChvKX0sdW5wYWQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZSxyPTI1NSZ0LndvcmRzW3Quc2lnQnl0ZXMtMT4+PjJdO3Quc2lnQnl0ZXMtPXJ9fSxEdD1mdW5jdGlvbihlKXtzKGEsZSk7dmFyIHQ9ZihhKTtmdW5jdGlvbiBhKGUsbixpKXt2YXIgcztyZXR1cm4gcih0aGlzLGEpLChzPXQuY2FsbCh0aGlzLGUsbixPYmplY3QuYXNzaWduKHttb2RlOkV0LHBhZGRpbmc6Q3R9LGkpKSkuYmxvY2tTaXplPTQsc31yZXR1cm4gbihhLFt7a2V5OiJyZXNldCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZTt2KG8oYS5wcm90b3R5cGUpLCJyZXNldCIsdGhpcykuY2FsbCh0aGlzKTt2YXIgdD10aGlzLmNmZyxyPXQuaXYsbj10Lm1vZGU7dGhpcy5feGZvcm1Nb2RlPT09dGhpcy5jb25zdHJ1Y3Rvci5fRU5DX1hGT1JNX01PREU/ZT1uLmNyZWF0ZUVuY3J5cHRvcjooZT1uLmNyZWF0ZURlY3J5cHRvcix0aGlzLl9taW5CdWZmZXJTaXplPTEpLHRoaXMuX21vZGU9ZS5jYWxsKG4sdGhpcyxyJiZyLndvcmRzKSx0aGlzLl9tb2RlLl9fY3JlYXRvcj1lfX0se2tleToiX2RvUHJvY2Vzc0Jsb2NrIix2YWx1ZTpmdW5jdGlvbihlLHQpe3RoaXMuX21vZGUucHJvY2Vzc0Jsb2NrKGUsdCl9fSx7a2V5OiJfZG9GaW5hbGl6ZSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZSx0PXRoaXMuY2ZnLnBhZGRpbmc7cmV0dXJuIHRoaXMuX3hmb3JtTW9kZT09PXRoaXMuY29uc3RydWN0b3IuX0VOQ19YRk9STV9NT0RFPyh0LnBhZCh0aGlzLl9kYXRhLHRoaXMuYmxvY2tTaXplKSxlPXRoaXMuX3Byb2Nlc3MoITApKTooZT10aGlzLl9wcm9jZXNzKCEwKSx0LnVucGFkKGUpKSxlfX1dKSxhfShCdCksSXQ9ZnVuY3Rpb24oZSl7cyhhLGUpO3ZhciB0PWYoYSk7ZnVuY3Rpb24gYShlKXt2YXIgbjtyZXR1cm4gcih0aGlzLGEpLChuPXQuY2FsbCh0aGlzKSkubWl4SW4oZSksbn1yZXR1cm4gbihhLFt7a2V5OiJ0b1N0cmluZyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuKGV8fHRoaXMuZm9ybWF0dGVyKS5zdHJpbmdpZnkodGhpcyl9fV0pLGF9KHV0KSxVdD17c3RyaW5naWZ5OmZ1bmN0aW9uKGUpe3ZhciB0PWUuY2lwaGVydGV4dCxyPWUuc2FsdDtyZXR1cm4ocj9jdC5jcmVhdGUoWzEzOTg4OTM2ODQsMTcwMTA3NjgzMV0pLmNvbmNhdChyKS5jb25jYXQodCk6dCkudG9TdHJpbmcoeXQpfSxwYXJzZTpmdW5jdGlvbihlKXt2YXIgdCxyPXl0LnBhcnNlKGUpLGE9ci53b3JkcztyZXR1cm4gMTM5ODg5MzY4ND09PWFbMF0mJjE3MDEwNzY4MzE9PT1hWzFdJiYodD1jdC5jcmVhdGUoYS5zbGljZSgyLDQpKSxhLnNwbGljZSgwLDQpLHIuc2lnQnl0ZXMtPTE2KSxJdC5jcmVhdGUoe2NpcGhlcnRleHQ6cixzYWx0OnR9KX19LFB0PWZ1bmN0aW9uKGUpe3MoYSxlKTt2YXIgdD1mKGEpO2Z1bmN0aW9uIGEoKXtyZXR1cm4gcih0aGlzLGEpLHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiBuKGEsbnVsbCxbe2tleToiZW5jcnlwdCIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIsYSl7dmFyIG49T2JqZWN0LmFzc2lnbihuZXcgdXQsdGhpcy5jZmcsYSksaT1lLmNyZWF0ZUVuY3J5cHRvcihyLG4pLHM9aS5maW5hbGl6ZSh0KSxvPWkuY2ZnO3JldHVybiBJdC5jcmVhdGUoe2NpcGhlcnRleHQ6cyxrZXk6cixpdjpvLml2LGFsZ29yaXRobTplLG1vZGU6by5tb2RlLHBhZGRpbmc6by5wYWRkaW5nLGJsb2NrU2l6ZTppLmJsb2NrU2l6ZSxmb3JtYXR0ZXI6bi5mb3JtYXR9KX19LHtrZXk6ImRlY3J5cHQiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyLGEpe3ZhciBuPXQsaT1PYmplY3QuYXNzaWduKG5ldyB1dCx0aGlzLmNmZyxhKTtyZXR1cm4gbj10aGlzLl9wYXJzZShuLGkuZm9ybWF0KSxlLmNyZWF0ZURlY3J5cHRvcihyLGkpLmZpbmFsaXplKG4uY2lwaGVydGV4dCl9fSx7a2V5OiJfcGFyc2UiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBlP3QucGFyc2UoZSx0aGlzKTplfX1dKSxhfSh1dCk7UHQuY2ZnPU9iamVjdC5hc3NpZ24obmV3IHV0LHtmb3JtYXQ6VXR9KTt2YXIgTXQ9e2V4ZWN1dGU6ZnVuY3Rpb24oZSx0LHIsYSxuKXt2YXIgaSxzPWE7c3x8KHM9Y3QucmFuZG9tKDgpKSxpPW4/U3QuY3JlYXRlKHtrZXlTaXplOnQrcixoYXNoZXI6bn0pLmNvbXB1dGUoZSxzKTpTdC5jcmVhdGUoe2tleVNpemU6dCtyfSkuY29tcHV0ZShlLHMpO3ZhciBvPWN0LmNyZWF0ZShpLndvcmRzLnNsaWNlKHQpLDQqcik7cmV0dXJuIGkuc2lnQnl0ZXM9NCp0LEl0LmNyZWF0ZSh7a2V5OmksaXY6byxzYWx0OnN9KX19LE90PWZ1bmN0aW9uKGUpe3MoYSxlKTt2YXIgdD1mKGEpO2Z1bmN0aW9uIGEoKXtyZXR1cm4gcih0aGlzLGEpLHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiBuKGEsbnVsbCxbe2tleToiZW5jcnlwdCIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIsYSl7dmFyIG49T2JqZWN0LmFzc2lnbihuZXcgdXQsdGhpcy5jZmcsYSksaT1uLmtkZi5leGVjdXRlKHIsZS5rZXlTaXplLGUuaXZTaXplLG4uc2FsdCxuLmhhc2hlcik7bi5pdj1pLml2O3ZhciBzPVB0LmVuY3J5cHQuY2FsbCh0aGlzLGUsdCxpLmtleSxuKTtyZXR1cm4gcy5taXhJbihpKSxzfX0se2tleToiZGVjcnlwdCIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIsYSl7dmFyIG49dCxpPU9iamVjdC5hc3NpZ24obmV3IHV0LHRoaXMuY2ZnLGEpO249dGhpcy5fcGFyc2UobixpLmZvcm1hdCk7dmFyIHM9aS5rZGYuZXhlY3V0ZShyLGUua2V5U2l6ZSxlLml2U2l6ZSxuLnNhbHQsaS5oYXNoZXIpO3JldHVybiBpLml2PXMuaXYsUHQuZGVjcnlwdC5jYWxsKHRoaXMsZSxuLHMua2V5LGkpfX1dKSxhfShQdCk7T3QuY2ZnPU9iamVjdC5hc3NpZ24oUHQuY2ZnLHtrZGY6TXR9KTtmb3IodmFyIFJ0PVtdLHp0PVtdLEx0PVtdLEZ0PVtdLFZ0PVtdLE50PVtdLGp0PVtdLEd0PVtdLEt0PVtdLEh0PVtdLHF0PVtdLFd0PTA7V3Q8MjU2O1d0Kz0xKXF0W1d0XT1XdDwxMjg/V3Q8PDE6V3Q8PDFeMjgzO2Zvcih2YXIgWXQ9MCxYdD0wLFF0PTA7UXQ8MjU2O1F0Kz0xKXt2YXIgWnQ9WHReWHQ8PDFeWHQ8PDJeWHQ8PDNeWHQ8PDQ7WnQ9WnQ+Pj44XjI1NSZadF45OSxSdFtZdF09WnQsenRbWnRdPVl0O3ZhciBKdD1xdFtZdF0sJHQ9cXRbSnRdLGVyPXF0WyR0XSx0cj0yNTcqcXRbWnRdXjE2ODQzMDA4Klp0O0x0W1l0XT10cjw8MjR8dHI+Pj44LEZ0W1l0XT10cjw8MTZ8dHI+Pj4xNixWdFtZdF09dHI8PDh8dHI+Pj4yNCxOdFtZdF09dHIsdHI9MTY4NDMwMDkqZXJeNjU1MzcqJHReMjU3Kkp0XjE2ODQzMDA4Kll0LGp0W1p0XT10cjw8MjR8dHI+Pj44LEd0W1p0XT10cjw8MTZ8dHI+Pj4xNixLdFtadF09dHI8PDh8dHI+Pj4yNCxIdFtadF09dHIsWXQ/KFl0PUp0XnF0W3F0W3F0W2VyXkp0XV1dLFh0Xj1xdFtxdFtYdF1dKTpZdD1YdD0xfXZhciBycj1bMCwxLDIsNCw4LDE2LDMyLDY0LDEyOCwyNyw1NF0sYXI9ZnVuY3Rpb24oZSl7cyhhLGUpO3ZhciB0PWYoYSk7ZnVuY3Rpb24gYSgpe3JldHVybiByKHRoaXMsYSksdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIG4oYSxbe2tleToiX2RvUmVzZXQiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU7aWYoIXRoaXMuX25Sb3VuZHN8fHRoaXMuX2tleVByaW9yUmVzZXQhPT10aGlzLl9rZXkpe3RoaXMuX2tleVByaW9yUmVzZXQ9dGhpcy5fa2V5O3ZhciB0PXRoaXMuX2tleVByaW9yUmVzZXQscj10LndvcmRzLGE9dC5zaWdCeXRlcy80O3RoaXMuX25Sb3VuZHM9YSs2O3ZhciBuPTQqKHRoaXMuX25Sb3VuZHMrMSk7dGhpcy5fa2V5U2NoZWR1bGU9W107Zm9yKHZhciBpPXRoaXMuX2tleVNjaGVkdWxlLHM9MDtzPG47cys9MSlzPGE/aVtzXT1yW3NdOihlPWlbcy0xXSxzJWE/YT42JiZzJWE9PTQmJihlPVJ0W2U+Pj4yNF08PDI0fFJ0W2U+Pj4xNiYyNTVdPDwxNnxSdFtlPj4+OCYyNTVdPDw4fFJ0WzI1NSZlXSk6KGU9UnRbKGU9ZTw8OHxlPj4+MjQpPj4+MjRdPDwyNHxSdFtlPj4+MTYmMjU1XTw8MTZ8UnRbZT4+PjgmMjU1XTw8OHxSdFsyNTUmZV0sZV49cnJbcy9hfDBdPDwyNCksaVtzXT1pW3MtYV1eZSk7dGhpcy5faW52S2V5U2NoZWR1bGU9W107Zm9yKHZhciBvPXRoaXMuX2ludktleVNjaGVkdWxlLHU9MDt1PG47dSs9MSl7dmFyIGM9bi11O2U9dSU0P2lbY106aVtjLTRdLG9bdV09dTw0fHxjPD00P2U6anRbUnRbZT4+PjI0XV1eR3RbUnRbZT4+PjE2JjI1NV1dXkt0W1J0W2U+Pj44JjI1NV1dXkh0W1J0WzI1NSZlXV19fX19LHtrZXk6ImVuY3J5cHRCbG9jayIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt0aGlzLl9kb0NyeXB0QmxvY2soZSx0LHRoaXMuX2tleVNjaGVkdWxlLEx0LEZ0LFZ0LE50LFJ0KX19LHtrZXk6ImRlY3J5cHRCbG9jayIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgcj1lLGE9clt0KzFdO3JbdCsxXT1yW3QrM10sclt0KzNdPWEsdGhpcy5fZG9DcnlwdEJsb2NrKHIsdCx0aGlzLl9pbnZLZXlTY2hlZHVsZSxqdCxHdCxLdCxIdCx6dCksYT1yW3QrMV0sclt0KzFdPXJbdCszXSxyW3QrM109YX19LHtrZXk6Il9kb0NyeXB0QmxvY2siLHZhbHVlOmZ1bmN0aW9uKGUsdCxyLGEsbixpLHMsbyl7Zm9yKHZhciB1PWUsYz10aGlzLl9uUm91bmRzLGw9dVt0XV5yWzBdLGQ9dVt0KzFdXnJbMV0sZj11W3QrMl1eclsyXSxoPXVbdCszXV5yWzNdLHY9NCxwPTE7cDxjO3ArPTEpe3ZhciB5PWFbbD4+PjI0XV5uW2Q+Pj4xNiYyNTVdXmlbZj4+PjgmMjU1XV5zWzI1NSZoXV5yW3ZdO3YrPTE7dmFyIG09YVtkPj4+MjRdXm5bZj4+PjE2JjI1NV1eaVtoPj4+OCYyNTVdXnNbMjU1JmxdXnJbdl07dis9MTt2YXIgZz1hW2Y+Pj4yNF1ebltoPj4+MTYmMjU1XV5pW2w+Pj44JjI1NV1ec1syNTUmZF1eclt2XTt2Kz0xO3ZhciBrPWFbaD4+PjI0XV5uW2w+Pj4xNiYyNTVdXmlbZD4+PjgmMjU1XV5zWzI1NSZmXV5yW3ZdO3YrPTEsbD15LGQ9bSxmPWcsaD1rfXZhciBiPShvW2w+Pj4yNF08PDI0fG9bZD4+PjE2JjI1NV08PDE2fG9bZj4+PjgmMjU1XTw8OHxvWzI1NSZoXSleclt2XTt2Kz0xO3ZhciBfPShvW2Q+Pj4yNF08PDI0fG9bZj4+PjE2JjI1NV08PDE2fG9baD4+PjgmMjU1XTw8OHxvWzI1NSZsXSleclt2XTt2Kz0xO3ZhciB4PShvW2Y+Pj4yNF08PDI0fG9baD4+PjE2JjI1NV08PDE2fG9bbD4+PjgmMjU1XTw8OHxvWzI1NSZkXSleclt2XTt2Kz0xO3ZhciB3PShvW2g+Pj4yNF08PDI0fG9bbD4+PjE2JjI1NV08PDE2fG9bZD4+PjgmMjU1XTw8OHxvWzI1NSZmXSleclt2XTt2Kz0xLHVbdF09Yix1W3QrMV09Xyx1W3QrMl09eCx1W3QrM109d319XSksYX0oRHQpO2FyLmtleVNpemU9ODt2YXIgbnI9RHQuX2NyZWF0ZUhlbHBlcihhciksaXI9ZnVuY3Rpb24oZSl7cyhhLGUpO3ZhciB0PWYoYSk7ZnVuY3Rpb24gYSgpe3JldHVybiByKHRoaXMsYSksdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIG4oYSl9KFR0KTtpci5FbmNyeXB0b3I9ZnVuY3Rpb24oZSl7cyhhLGUpO3ZhciB0PWYoYSk7ZnVuY3Rpb24gYSgpe3JldHVybiByKHRoaXMsYSksdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIG4oYSxbe2tleToicHJvY2Vzc0Jsb2NrIix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciByPWUsYT10aGlzLl9jaXBoZXIsbj1hLmJsb2NrU2l6ZSxpPXRoaXMuX2l2LHM9dGhpcy5fY291bnRlcjtpJiYodGhpcy5fY291bnRlcj1pLnNsaWNlKDApLHM9dGhpcy5fY291bnRlcix0aGlzLl9pdj12b2lkIDApO3ZhciBvPXMuc2xpY2UoMCk7YS5lbmNyeXB0QmxvY2sobywwKSxzW24tMV09c1tuLTFdKzF8MDtmb3IodmFyIHU9MDt1PG47dSs9MSlyW3QrdV1ePW9bdV19fV0pLGF9KGlyKSxpci5EZWNyeXB0b3I9aXIuRW5jcnlwdG9yO3ZhciBzcj17cGFkOmZ1bmN0aW9uKCl7fSx1bnBhZDpmdW5jdGlvbigpe319LG9yPXtkZWNyeXB0V29yZEFycmF5OmZ1bmN0aW9uKGUsdCxyKXt2YXIgYT1sdC5wYXJzZSh0KSxuPWx0LnBhcnNlKGxlKHIpKSxpPWN0LmNyZWF0ZShuZXcgVWludDhBcnJheShlKSkscz1uci5kZWNyeXB0KEl0LmNyZWF0ZSh7Y2lwaGVydGV4dDppfSksYSx7aXY6bixtb2RlOmlyLHBhZGRpbmc6c3J9KTtyZXR1cm4gb3Iud29yZEFycmF5VG9VaW50OEFycmF5KHMpfSx3b3JkQXJyYXlUb1VpbnQ4QXJyYXk6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PWUuc2lnQnl0ZXMscj1lLndvcmRzLGE9bmV3IFVpbnQ4QXJyYXkodCksbj0wLGk9MDtuIT09dDspe3ZhciBzPXJbaSsrXTtpZihhW24rK109KDQyNzgxOTAwODAmcyk+Pj4yNCxuPT09dClicmVhaztpZihhW24rK109KDE2NzExNjgwJnMpPj4+MTYsbj09PXQpYnJlYWs7aWYoYVtuKytdPSg2NTI4MCZzKT4+Pjgsbj09PXQpYnJlYWs7YVtuKytdPTI1NSZzfXJldHVybiBhfSxkZWNvZGVyQUVTQ1RSRGF0YTpmdW5jdGlvbihlLHQscil7aWYoZS52aWRlb1NlbmMpe3ZhciBhPWUua2lkVmFsdWUsbj1lLnZpZGVvU2VuYztlLnNhbXBsZXMuZm9yRWFjaCgoZnVuY3Rpb24odCxpKXt2YXIgcz1uW2ldLG89dC5kYXRhLHU9W10sYz1bXSxsPXMuSW5pdGlhbGl6YXRpb25WZWN0b3I7aWYocy5zdWJzYW1wbGVzJiZzLnN1YnNhbXBsZXMubGVuZ3RoKXMuc3Vic2FtcGxlcy5mb3JFYWNoKChmdW5jdGlvbihlKXt2YXIgdD1lLkJ5dGVzT2ZDbGVhckRhdGErZS5CeXRlc09mUHJvdGVjdGVkRGF0YSxyPW8uc2xpY2UoMCx0KTt1LnB1c2goci5zbGljZSgwLGUuQnl0ZXNPZkNsZWFyRGF0YSkpLGMucHVzaChyLnNsaWNlKGUuQnl0ZXNPZkNsZWFyRGF0YSkpLG89by5zbGljZSh0KX0pKTtlbHNle3ZhciBkPXQuc2l6ZTt1LnB1c2goby5zbGljZSgwLDApKSxjLnB1c2goby5zbGljZSgwLGQpKSxvPW8uc2xpY2UoZCl9dmFyIGY9bmV3IFhlO2Yud3JpdGUuYXBwbHkoZixjKTt2YXIgaD1yP3IoZi5idWZmZXIsYSxsKTpvci5kZWNyeXB0V29yZEFycmF5KGYuYnVmZmVyLGEsbCksdj1uZXcgWGU7dS5mb3JFYWNoKChmdW5jdGlvbihlLHQpe3ZhciByPWNbdF0ubGVuZ3RoLGE9aC5zbGljZSgwLHIpO3Yud3JpdGUoZSksdi53cml0ZShhKSxoPWguc2xpY2Uocil9KSksZS5zYW1wbGVzW2ldLmRhdGE9di5idWZmZXJ9KSl9aWYodC5hdWRpb1NlbmMpe3ZhciBpPXQua2lkVmFsdWUscz10LmF1ZGlvU2VuYzt0LnNhbXBsZXMuZm9yRWFjaCgoZnVuY3Rpb24oZSxhKXt2YXIgbj1zW2FdLG89cj9yKGUuZGF0YSxpLG4uSW5pdGlhbGl6YXRpb25WZWN0b3IpOm9yLmRlY3J5cHRXb3JkQXJyYXkoZS5kYXRhLGksbi5Jbml0aWFsaXphdGlvblZlY3Rvcik7dC5zYW1wbGVzW2FdLmRhdGE9b30pKX19fSx1cj1bInN0dHMiLCJzdHNjIiwic3RzeiIsInN0Y28iLCJjbzY0Iiwic3RzcyIsImN0dHMiXSxjcj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxhLG4scyl7dmFyIG8sdSxjPXRoaXM7aWYocih0aGlzLGUpLGkodGhpcywiX3ZpZGVvU2FtcGxlcyIsW10pLGkodGhpcywiX2F1ZGlvU2FtcGxlcyIsW10pLGkodGhpcywiX2xhc3RSZW1haW5CdWZmZXIiLFtdKSxpKHRoaXMsIl9sYXN0UmVtYWluQnVmZmVyU3RhcnRQb3MiLDApLGkodGhpcywidmlkZW9NYXhGcmFtZUlkeCIsLTEpLGkodGhpcywiYXVkaW9NYXhGcmFtZUlkeCIsLTEpLHRoaXMudmlkZW9UcmFjaz1uZXcgTCx0aGlzLmF1ZGlvVHJhY2s9bmV3IEYsdGhpcy5tZXRhZGF0YVRyYWNrPW58fG5ldyBILHRoaXMudmlkZW9TZWdtbmVudHM9dCx0aGlzLmF1ZGlvU2VnbW5lbnRzPWEsdGhpcy5sb2c9bmV3IEplKCJNUDREZW11eGVyIiwhc3x8IXMub3BlbkxvZ3x8IXMub3BlbkxvZyksdGhpcy5tZW1vcnlPcHQ9bnVsbD09cz92b2lkIDA6cy5tZW1vcnlPcHQsdGhpcy5tZW1vcnlPcHR8fCh0JiZ0LmZvckVhY2goKGZ1bmN0aW9uKGUpe3ZhciB0Oyh0PWMuX3ZpZGVvU2FtcGxlcykucHVzaC5hcHBseSh0LHkoZS5mcmFtZXMpKX0pKSxhJiZhLmZvckVhY2goKGZ1bmN0aW9uKGUpe3ZhciB0Oyh0PWMuX2F1ZGlvU2FtcGxlcykucHVzaC5hcHBseSh0LHkoZS5mcmFtZXMpKX0pKSksKG51bGw9PT0obz10aGlzLnZpZGVvU2VnbW5lbnRzKXx8dm9pZCAwPT09bz92b2lkIDA6by5sZW5ndGgpPjApe3ZhciBsPXRoaXMudmlkZW9TZWdtbmVudHNbdGhpcy52aWRlb1NlZ21uZW50cy5sZW5ndGgtMV0uZnJhbWVzO3RoaXMudmlkZW9NYXhGcmFtZUlkeD1sW2wubGVuZ3RoLTFdLmluZGV4fWlmKChudWxsPT09KHU9dGhpcy5hdWRpb1NlZ21uZW50cyl8fHZvaWQgMD09PXU/dm9pZCAwOnUubGVuZ3RoKT4wKXt2YXIgZD10aGlzLmF1ZGlvU2VnbW5lbnRzW3RoaXMuYXVkaW9TZWdtbmVudHMubGVuZ3RoLTFdLmZyYW1lczt0aGlzLmF1ZGlvTWF4RnJhbWVJZHg9ZFtkLmxlbmd0aC0xXS5pbmRleH19cmV0dXJuIG4oZSxbe2tleToiX21hcmtWaWRlb1NhbXBsZSIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQscj1DZSh7dHJhY2s6dGhpcy52aWRlb1RyYWNrfSk7bnVsbD09cnx8bnVsbD09PSh0PXIubWFya1NhbXBsZSl8fHZvaWQgMD09PXR8fHQuY2FsbChyLHtzYW1wbGU6ZSx0cmFjazp0aGlzLnZpZGVvVHJhY2ssZGVtdXhlcjp0aGlzfSl9fSx7a2V5OiJwYXJzZVNhbXBsZXMiLHZhbHVlOmZ1bmN0aW9uKGUpe2lmKCFlKXRocm93IG5ldyBFcnJvcigibW9vdiBpcyByZXF1aXJlZCIpO3RoaXMudmlkZW9UcmFjay5jb2RlY3x8dGhpcy5hdWRpb1RyYWNrLmNvZGVjfHwoTmUubW9vdlRvVHJhY2soZSx0aGlzLnZpZGVvVHJhY2ssdGhpcy5hdWRpb1RyYWNrKSx0aGlzLnZpZGVvU2VuYz10aGlzLnZpZGVvVHJhY2sudmlkZW9TZW5jLHRoaXMuYXVkaW9TZW5jPXRoaXMuYXVkaW9UcmFjay5hdWRpb1NlbmMsdGhpcy5tZW1vcnlPcHQmJnRoaXMuY2xlYXJCb3hFbnRyaWVzKGUpKX19LHtrZXk6ImRlbXV4Iix2YWx1ZTpmdW5jdGlvbihlLHQscixhLG4pe3RoaXMucGFyc2VTYW1wbGVzKG4pO3ZhciBpLHMsbyx1PXRoaXMudmlkZW9UcmFjayxjPXRoaXMuYXVkaW9UcmFjazt1LnNhbXBsZXM9W10sYy5zYW1wbGVzPVtdO3ZhciBsPXt9O2lmKHIpe3ZhciBkLGY9MDtpZih0aGlzLm1lbW9yeU9wdCYmdGhpcy52aWRlb1NlZ21uZW50cyYmIShsPXRoaXMuZ2V0RnJhbWVQb3NCeUlkeCgidmlkZW8iLHJbMF0pKSl0aHJvdyBuZXcgRXJyb3IoImNhbm5vdCBmb3VuZCB2aWRlbyBmcmFtZSAjIi5jb25jYXQoclswXSkpO2Zvcih2YXIgaD1sLHY9aC5mcmFtZUlkeCxwPWguc2VnbWVudElkeCx5PXJbMF0sbT1yWzFdO3k8PW07eSsrKXtpZighdGhpcy5fdmlkZW9TYW1wbGVzLmxlbmd0aCYmdGhpcy52aWRlb1NlZ21uZW50cyl7dmFyIGc9dGhpcy5nZXRGcmFtZUluZm8oInZpZGVvIixwLHYpO2k9Zy5zYW1wbGUscD1nLnNlZ21lbnRJZHgsdj1nLmZyYW1lSWR4fWVsc2UgaT10aGlzLl92aWRlb1NhbXBsZXNbeV07aWYoIWkpdGhyb3cgbmV3IEVycm9yKCJjYW5ub3QgZm91bmQgdmlkZW8gZnJhbWUgIyIuY29uY2F0KHkpKTtvPWkub2Zmc2V0LXQscz1lLnN1YmFycmF5KG8sbytpLnNpemUpLChkPW5ldyBWKCJudW1iZXIiPT10eXBlb2YgaS5wdHM/aS5wdHM6aS5kdHMsaS5kdHMpKS5kdXJhdGlvbj1pLmR1cmF0aW9uLGQuZ29wSWQ9aS5nb3BJZCxpLmtleWZyYW1lJiZkLnNldFRvS2V5ZnJhbWUoKTtmb3IodmFyIGs9MCxiPXMubGVuZ3RoLTE7azxiOylmPWllKHMsayksays9NCxkLnVuaXRzLnB1c2gocy5zdWJhcnJheShrLGsrZikpLGsrPWY7dGhpcy5fbWFya1ZpZGVvU2FtcGxlKGQpLHUuc2FtcGxlcy5wdXNoKGQpfXUuYmFzZU1lZGlhRGVjb2RlVGltZT11LnNhbXBsZXNbMF0uZHRzfWlmKGw9e30sYSl7aWYodGhpcy5tZW1vcnlPcHQmJnRoaXMuYXVkaW9TZWdtbmVudHMmJiEobD10aGlzLmdldEZyYW1lUG9zQnlJZHgoImF1ZGlvIixhWzBdKSkpdGhyb3cgbmV3IEVycm9yKCJjYW5ub3QgZm91bmQgdmlkZW8gZnJhbWUgIyIuY29uY2F0KGFbMF0pKTtmb3IodmFyIF89bCx4PV8uZnJhbWVJZHgsdz1fLnNlZ21lbnRJZHgsUz1hWzBdLEI9YVsxXTtTPD1CO1MrKyl7aWYoIXRoaXMuX2F1ZGlvU2FtcGxlcy5sZW5ndGgmJnRoaXMuYXVkaW9TZWdtbmVudHMpe3ZhciBUPXRoaXMuZ2V0RnJhbWVJbmZvKCJhdWRpbyIsdyx4KTtpPVQuc2FtcGxlLHc9VC5zZWdtZW50SWR4LHg9VC5mcmFtZUlkeH1lbHNlIGk9dGhpcy5fYXVkaW9TYW1wbGVzW1NdO2lmKCFpKXRocm93IG5ldyBFcnJvcigiY2Fubm90IGZvdW5kIHZpZGVvIGZyYW1lICMiLmNvbmNhdChTKSk7bz1pLm9mZnNldC10LHM9ZS5zdWJhcnJheShvLG8raS5zaXplKSxjLnNhbXBsZXMucHVzaChuZXcgTihpLmR0cyxzLGkuZHVyYXRpb24pKX1jLmJhc2VNZWRpYURlY29kZVRpbWU9Yy5zYW1wbGVzWzBdLmR0c31yZXR1cm57dmlkZW9UcmFjazp1LGF1ZGlvVHJhY2s6YyxtZXRhZGF0YVRyYWNrOnRoaXMubWV0YWRhdGFUcmFja319fSx7a2V5OiJkZW11eFBhcnQiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyLGEsbixpLHMsbyl7aWYodGhpcy5wYXJzZVNhbXBsZXMobiksdGhpcy52aWRlb1RyYWNrLnVzZUVNRT1pLHRoaXMuYXVkaW9UcmFjay51c2VFTUU9aSx0aGlzLl9sYXN0UmVtYWluQnVmZmVyJiZ0aGlzLl9sYXN0UmVtYWluQnVmZmVyLmJ5dGVMZW5ndGg+MCYmdD50aGlzLl9sYXN0UmVtYWluQnVmZmVyU3RhcnRQb3MmJnQ8PXRoaXMuX2xhc3RSZW1haW5CdWZmZXJTdGFydFBvcyt0aGlzLl9sYXN0UmVtYWluQnVmZmVyLmJ5dGVMZW5ndGgpZm9yKHZhciB1PTA7dTwyMDspdHJ5e3ZhciBjPXRoaXMuX2xhc3RSZW1haW5CdWZmZXIuc3ViYXJyYXkoMCx0LXRoaXMuX2xhc3RSZW1haW5CdWZmZXJTdGFydFBvcyksbD1uZXcgVWludDhBcnJheShlLmJ5dGVMZW5ndGgrYy5ieXRlTGVuZ3RoKTtsLnNldChjLDApLGwuc2V0KG5ldyBVaW50OEFycmF5KGUpLGMuYnl0ZUxlbmd0aCksZT1sLHQtPWMuYnl0ZUxlbmd0aCx0aGlzLl9sYXN0UmVtYWluQnVmZmVyPW51bGwsdGhpcy5fbGFzdFJlbWFpbkJ1ZmZlclN0YXJ0UG9zPTA7YnJlYWt9Y2F0Y2goeil7aWYoISh1PDIwKSl0aHJvdyBuZXcgRXJyb3IoIm5ldyBVaW50OEFycmF5IGVycm9yOiwiK3ouZXJyb3JNZXNzYWdlKTt1Kyt9dmFyIGQsZixoLHY9dGhpcy52aWRlb1RyYWNrLHA9dGhpcy5hdWRpb1RyYWNrO3Yuc2FtcGxlcz1bXSxwLnNhbXBsZXM9W10sdi52aWRlb1NlbmM9bnVsbCxwLmF1ZGlvU2VuYz1udWxsLChudWxsPT1yP3ZvaWQgMDpyWzFdKT50aGlzLnZpZGVvTWF4RnJhbWVJZHgmJnRoaXMudmlkZW9NYXhGcmFtZUlkeD4wJiYoclsxXT10aGlzLnZpZGVvTWF4RnJhbWVJZHgpLChudWxsPT1hP3ZvaWQgMDphWzFdKT50aGlzLmF1ZGlvTWF4RnJhbWVJZHgmJnRoaXMuYXVkaW9NYXhGcmFtZUlkeD4wJiYoYVsxXT10aGlzLmF1ZGlvTWF4RnJhbWVJZHgpO3ZhciB5PTAsbT0wLGc9e30saz1lLmJ5dGVMZW5ndGgrdDtpZigobnVsbD09cj92b2lkIDA6ci5sZW5ndGgpPjApe3ZhciBiO2lmKHRoaXMubWVtb3J5T3B0JiZ0aGlzLnZpZGVvU2VnbW5lbnRzJiYhKGc9dGhpcy5nZXRGcmFtZVBvc0J5SWR4KCJ2aWRlbyIsclswXSkpKXRocm93IG5ldyBFcnJvcigiY2Fubm90IGZvdW5kIHZpZGVvIGZyYW1lICMiLmNvbmNhdChyWzBdKSk7Zm9yKHZhciBfPWcseD1fLmZyYW1lSWR4LHc9Xy5zZWdtZW50SWR4LFM9clswXTtTPD1yWzFdO1MrKyl7aWYoIXRoaXMuX3ZpZGVvU2FtcGxlcy5sZW5ndGgmJnRoaXMudmlkZW9TZWdtbmVudHMpe3ZhciBCPXRoaXMuZ2V0RnJhbWVJbmZvKCJ2aWRlbyIsdyx4KTtkPUIuc2FtcGxlLHc9Qi5zZWdtZW50SWR4LHg9Qi5mcmFtZUlkeH1lbHNlIGQ9dGhpcy5fdmlkZW9TYW1wbGVzW1NdO2lmKCFkKXRocm93IG5ldyBFcnJvcigiY2Fubm90IGZvdW5kIHZpZGVvIGZyYW1lICMiLmNvbmNhdChTKSk7aWYodGhpcy5tZW1vcnlPcHQmJmQub2Zmc2V0K2Quc2l6ZT5rKWJyZWFrO2Qub2Zmc2V0Pj10JiZkLm9mZnNldCtkLnNpemU8PWsmJih5PShoPWQub2Zmc2V0LXQpK2Quc2l6ZSxmPWUuc3ViYXJyYXkoaCx5KSwoYj1uZXcgVigibnVtYmVyIj09dHlwZW9mIGQucHRzP2QucHRzOmQuZHRzLGQuZHRzKSkuZHVyYXRpb249ZC5kdXJhdGlvbixiLmdvcElkPWQuZ29wSWQsYi5zYW1wbGVPZmZzZXQ9ZC5pbmRleCxkLmtleWZyYW1lJiZiLnNldFRvS2V5ZnJhbWUoKSxiLmRhdGE9ZixiLnNpemU9ZC5zaXplLHYuc2FtcGxlcy5wdXNoKGIpKX12LnNhbXBsZXMubGVuZ3RoPjAmJih2LmdvcElkPXYuc2FtcGxlc1swXS5nb3BJZCx2LmJhc2VNZWRpYURlY29kZVRpbWU9di5zYW1wbGVzWzBdLmR0cyx2LnN0YXJ0UHRzPXYuc2FtcGxlc1swXS5wdHMvdi50aW1lc2NhbGUsdi5lbmRQdHM9di5zYW1wbGVzW3Yuc2FtcGxlcy5sZW5ndGgtMV0ucHRzL3YudGltZXNjYWxlLHYuc3RhcnREdHM9di5zYW1wbGVzWzBdLmR0cy92LnRpbWVzY2FsZSx2LmVuZER0cz12LnNhbXBsZXNbdi5zYW1wbGVzLmxlbmd0aC0xXS5kdHMvdi50aW1lc2NhbGUsdGhpcy52aWRlb1NlbmMmJih2LnZpZGVvU2VuYz10aGlzLnZpZGVvU2VuYy5zbGljZSh2LnNhbXBsZXNbMF0uc2FtcGxlT2Zmc2V0LHYuc2FtcGxlc1swXS5zYW1wbGVPZmZzZXQrdi5zYW1wbGVzLmxlbmd0aCksdi5raWRWYWx1ZT1zKSl9aWYoKG51bGw9PWE/dm9pZCAwOmEubGVuZ3RoKT4wKXtpZih0aGlzLm1lbW9yeU9wdCYmdGhpcy5hdWRpb1NlZ21uZW50cyYmIShnPXRoaXMuZ2V0RnJhbWVQb3NCeUlkeCgiYXVkaW8iLGFbMF0pKSl0aHJvdyBuZXcgRXJyb3IoImNhbm5vdCBmb3VuZCB2aWRlbyBmcmFtZSAjIi5jb25jYXQoYVswXSkpO2Zvcih2YXIgVD1nLEE9VC5mcmFtZUlkeCxFPVQuc2VnbWVudElkeCxDPWFbMF07Qzw9YVsxXTtDKyspe2lmKCF0aGlzLl9hdWRpb1NhbXBsZXMubGVuZ3RoJiZ0aGlzLmF1ZGlvU2VnbW5lbnRzKXt2YXIgRD10aGlzLmdldEZyYW1lSW5mbygiYXVkaW8iLEUsQSk7ZD1ELnNhbXBsZSxFPUQuc2VnbWVudElkeCxBPUQuZnJhbWVJZHh9ZWxzZSBkPXRoaXMuX2F1ZGlvU2FtcGxlc1tDXTtpZighZCl0aHJvdyBuZXcgRXJyb3IoImNhbm5vdCBmb3VuZCB2aWRlbyBmcmFtZSAjIi5jb25jYXQoQykpO2lmKHRoaXMubWVtb3J5T3B0JiZkLm9mZnNldCtkLnNpemU+aylicmVhaztkLm9mZnNldD49dCYmZC5vZmZzZXQrZC5zaXplPD1rJiYobT0oaD1kLm9mZnNldC10KStkLnNpemUsZj1lLnN1YmFycmF5KGgsbSkscC5zYW1wbGVzLnB1c2gobmV3IE4oZC5kdHMsZixkLmR1cmF0aW9uLGQuaW5kZXgpKSl9cC5zYW1wbGVzLmxlbmd0aD4wJiYocC5nb3BJZD1wLnNhbXBsZXNbMF0uZ29wSWR8fHYuZ29wSWQscC5iYXNlTWVkaWFEZWNvZGVUaW1lPXAuc2FtcGxlc1swXS5kdHMscC5zdGFydFB0cz1wLnNhbXBsZXNbMF0ucHRzL3AudGltZXNjYWxlLHAuZW5kUHRzPXAuc2FtcGxlc1twLnNhbXBsZXMubGVuZ3RoLTFdLnB0cy9wLnRpbWVzY2FsZSx0aGlzLmF1ZGlvU2VuYyYmKHAuYXVkaW9TZW5jPXRoaXMuYXVkaW9TZW5jLnNsaWNlKHAuc2FtcGxlc1swXS5zYW1wbGVPZmZzZXQscC5zYW1wbGVzWzBdLnNhbXBsZU9mZnNldCtwLnNhbXBsZXMubGVuZ3RoKSxwLmtpZFZhbHVlPXMpKX10aGlzLmRlY29kZXJEYXRhKHYscCxvKTtmb3IodmFyIEk9MCxVPTA7VTx2LnNhbXBsZXMubGVuZ3RoO1UrKyl7Zm9yKHZhciBQPTAsTT12LnNhbXBsZXNbVV0uZGF0YSxPPU0ubGVuZ3RoLTE7UDxPOylJPWllKE0sUCksUCs9NCx2LnNhbXBsZXNbVV0udW5pdHMucHVzaChNLnN1YmFycmF5KFAsUCtJKSksUCs9STt0aGlzLl9tYXJrVmlkZW9TYW1wbGUodi5zYW1wbGVzW1VdKX12YXIgUj1NYXRoLm1heCh5LG0pO3JldHVybiB0aGlzLl9sYXN0UmVtYWluQnVmZmVyPWUuc3ViYXJyYXkoUiksdGhpcy5fbGFzdFJlbWFpbkJ1ZmZlci5ieXRlTGVuZ3RoPjA/dGhpcy5fbGFzdFJlbWFpbkJ1ZmZlclN0YXJ0UG9zPXQrZS5ieXRlTGVuZ3RoLXRoaXMuX2xhc3RSZW1haW5CdWZmZXIuYnl0ZUxlbmd0aDp0aGlzLl9sYXN0UmVtYWluQnVmZmVyU3RhcnRQb3M9MCx7dmlkZW9UcmFjazp2LGF1ZGlvVHJhY2s6cCxtZXRhZGF0YVRyYWNrOnRoaXMubWV0YWRhdGFUcmFjayxsYXN0UmVtYWluQnVmZmVySW5mbzp7ZGF0YTp0aGlzLl9sYXN0UmVtYWluQnVmZmVyLHBvczp0aGlzLl9sYXN0UmVtYWluQnVmZmVyU3RhcnRQb3N9fX19LHtrZXk6InNldExhc3RSZW1haW5CdWZmZXJJbmZvIix2YWx1ZTpmdW5jdGlvbihlLHQpe3RoaXMuX2xhc3RSZW1haW5CdWZmZXI9ZSx0aGlzLl9sYXN0UmVtYWluQnVmZmVyU3RhcnRQb3M9dH19LHtrZXk6InJlc2V0Iix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuX2xhc3RSZW1haW5CdWZmZXI9bnVsbCx0aGlzLl9sYXN0UmVtYWluQnVmZmVyU3RhcnRQb3M9MCx0aGlzLnZpZGVvVHJhY2sucmVzZXQoKSx0aGlzLmF1ZGlvVHJhY2sucmVzZXQoKSx0aGlzLm1ldGFkYXRhVHJhY2sucmVzZXQoKX19LHtrZXk6ImRlY29kZXJEYXRhIix2YWx1ZTpmdW5jdGlvbihlLHQscil7ZS51c2VFTUV8fHQudXNlRU1FfHxvci5kZWNvZGVyQUVTQ1RSRGF0YShlLHQscil9fSx7a2V5OiJnZXRGcmFtZVBvc0J5SWR4Iix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciByPSJ2aWRlbyI9PT1lP3RoaXMudmlkZW9TZWdtbmVudHM6dGhpcy5hdWRpb1NlZ21uZW50cztpZighcnx8bnVsbD09cnx8IXIubGVuZ3RoKXJldHVybiBudWxsO2Zvcih2YXIgYSxuPTAsaT0wO2k8ci5sZW5ndGg7aSsrKXt2YXIgcyxvO2lmKGE9cltpXS5mcmFtZXMsdDw9KG51bGw9PT0ocz1yW2ldLmZyYW1lcyl8fHZvaWQgMD09PXM/dm9pZCAwOnNbKG51bGw9PT0obz1hKXx8dm9pZCAwPT09bz92b2lkIDA6by5sZW5ndGgpLTFdLmluZGV4KSl7bj1pO2JyZWFrfX1yZXR1cm57ZnJhbWVJZHg6YS5maW5kSW5kZXgoKGZ1bmN0aW9uKGUpe3JldHVybiBlLmluZGV4PT09dH0pKSxzZWdtZW50SWR4Om59fX0se2tleToiZ2V0RnJhbWVJbmZvIix2YWx1ZTpmdW5jdGlvbihlLHQscil7dmFyIGEsbixpLHMsbz0idmlkZW8iPT09ZT90aGlzLnZpZGVvU2VnbW5lbnRzOnRoaXMuYXVkaW9TZWdtbmVudHM7cmV0dXJuIG8/cjwobnVsbD09PShhPW9bdF0pfHx2b2lkIDA9PT1hfHxudWxsPT09KG49YS5mcmFtZXMpfHx2b2lkIDA9PT1uP3ZvaWQgMDpuLmxlbmd0aCk/e3NhbXBsZTpudWxsPT09KGk9b1t0XSl8fHZvaWQgMD09PWk/dm9pZCAwOmkuZnJhbWVzW3JdLHNlZ21lbnRJZHg6dCxmcmFtZUlkeDpyKzF9OntzYW1wbGU6bnVsbD09PShzPW9bdCsxXSl8fHZvaWQgMD09PXM/dm9pZCAwOnMuZnJhbWVzWzBdLHNlZ21lbnRJZHg6dCsxLGZyYW1lSWR4OjF9Ont9fX0se2tleToiY2xlYXJCb3hFbnRyaWVzIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLm1lbW9yeU9wdCYmZS50cmFrLmZvckVhY2goKGZ1bmN0aW9uKGUpe3VyLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciByPWUubWRpYS5taW5mLnN0YmxbdF07ciYmKHIuZW50cmllcyYmKHIuZW50cmllcz1udWxsKSxyLmVudHJ5U2l6ZXMmJihyLmVudHJ5U2l6ZXM9bnVsbCkpfSkpfSkpfX1dLFt7a2V5OiJwcm9iZSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIE5lLnByb2JlKGUpfX1dKSxlfSgpLGxyPXtub3dUaW1lOmZ1bmN0aW9uKCl7dHJ5e3JldHVybiBwYXJzZUludChwZXJmb3JtYW5jZS5ub3coKSwxMCl9Y2F0Y2goZSl7cmV0dXJuKG5ldyBEYXRlKS5nZXRUaW1lKCl9fSxjb25jYXREYXRhOmZ1bmN0aW9uKGUsdCl7dmFyIHI9W10sYT0wO2UmJnIucHVzaChlKSx0JiZyLnB1c2godCksci5ldmVyeSgoZnVuY3Rpb24oZSl7cmV0dXJuIGUmJihhKz1lLmJ5dGVMZW5ndGgpLCEwfSkpO3ZhciBuPW5ldyBVaW50OEFycmF5KGEpLGk9MDtyZXR1cm4gci5ldmVyeSgoZnVuY3Rpb24oZSl7cmV0dXJuIGUmJihuLnNldChlLGkpLGkrPWUuYnl0ZUxlbmd0aCksITB9KSksbn19O29ubWVzc2FnZT1mdW5jdGlvbihlKXt2YXIgcj1lLmRhdGE7c3dpdGNoKHIubWV0aG9kKXtjYXNlImluaXQiOnRoaXMuY29kZWNUeXBlPXIuYXJncy5jb2RlY1R5cGUsdGhpcy5vcGVubG9nPXIuYXJncy5vcGVuTG9nLHRoaXMuTVA0RGVtdXhlcj1udWxsLHRoaXMuRk1QNFJlbXV4ZXI9bnVsbCx0aGlzLl9uZWVkSW5pdFNlZ21lbnQ9ITAsdGhpcy5zdXBwb3J0SGV2Yz1yLmFyZ3Muc3VwcG9ydEhldmM7YnJlYWs7Y2FzZSJ0cmFuc211eCI6dmFyIGE9ZS5kYXRhLmFyZ3Msbj1uZXcgVWludDhBcnJheShlLmRhdGEuYnVmZmVyKTt0aGlzLk1QNERlbXV4ZXJ8fCh0aGlzLk1QNERlbXV4ZXI9bmV3IGNyKG51bGwsbnVsbCxudWxsLHtvcGVubG9nOnRoaXMub3BlbmxvZ30pKTt2YXIgaSxzPXRoaXMuTVA0RGVtdXhlci5kZW11eFBhcnQobixhLnN0YXJ0LGEudmlkZW9JZHgsYS5hdWRpb0lkeCxhLm1vb3YsYS51c2VFTUUsYS5raWRWYWx1ZSk7aWYodGhpcy5GTVA0UmVtdXhlcnx8ImgyNjUiPT09dGhpcy5jb2RlY1R5cGUmJiF0aGlzLnN1cHBvcnRIZXZjfHwodGhpcy5GTVA0UmVtdXhlcj1uZXcgc3QodGhpcy5NUDREZW11eGVyLnZpZGVvVHJhY2ssdGhpcy5NUDREZW11eGVyLmF1ZGlvVHJhY2sse29wZW5Mb2c6dGhpcy5vcGVubG9nfSkpLHRoaXMuRk1QNFJlbXV4ZXIpe3ZhciBvPXRoaXMuRk1QNFJlbXV4ZXIucmVtdXgodGhpcy5fbmVlZEluaXRTZWdtZW50LHtpbml0TWVyZ2U6ITB9KTtvLmluaXRTZWdtZW50JiYodGhpcy5fbmVlZEluaXRTZWdtZW50PSExKSxpPXtidWZmZXI6bHIuY29uY2F0RGF0YShvLmF1ZGlvU2VnbWVudCxvLnZpZGVvU2VnbWVudCkscmFuZ2U6YS5jb250ZXh0LnJhbmdlLHN0YXRlOmEuY29udGV4dC5zdGF0ZSxjb250ZXh0OntyYW5nZTphLmNvbnRleHQucmFuZ2UsZnJhZ0luZGV4OmEuY29udGV4dC5mcmFnSW5kZXgsc3RhcnRQdHM6TWF0aC5taW4ocy52aWRlb1RyYWNrLnN0YXJ0UHRzLHMuYXVkaW9UcmFjay5zdGFydFB0cyksZW5kUHRzOk1hdGgubWF4KHMudmlkZW9UcmFjay5lbmRQdHMscy5hdWRpb1RyYWNrLmVuZFB0cyl9LGluaXRTZWc6by5pbml0U2VnbWVudH19dGhpcy5wb3N0TWVzc2FnZSh7bWV0aG9kOiJ0cmFuc211eCIsaWQ6ZS5kYXRhLmlkLGFyZ3M6dCh7fSxpKX0pO2JyZWFrO2Nhc2UicmVzZXQiOnRoaXMuRk1QNFJlbXV4ZXImJnRoaXMuRk1QNFJlbXV4ZXIucmVzZXQoKSx0aGlzLk1QNERlbXV4ZXImJnRoaXMuTVA0RGVtdXhlci5yZXNldCgpLHRoaXMuRk1QNFJlbXV4ZXI9bnVsbCx0aGlzLk1QNERlbXV4ZXI9bnVsbCx0aGlzLl9uZWVkSW5pdFNlZ21lbnQ9ITB9fX0oKTsK",qn="undefined"!=typeof window&&window.Blob&&new Blob([atob(An)],{type:"text/javascript;charset=utf-8"});function $n(){var e=qn&&(window.URL||window.webkitURL).createObjectURL(qn);try{return e?new Worker(e,{}):new Worker("data:application/javascript;base64,"+An,{type:"module"})}finally{e&&(window.URL||window.webkitURL).revokeObjectURL(e)}}var ea=function(e){L(i,e);var t=M(i);function i(e){var n;return X(this,i),(n=t.call(this)).openlog=e.openLog,n.codecType=e.codecType,n.supportHevc=e.supportHevc,n.worker=new $n,n.worker.onmessage=function(e){n.emit(e.data.method,e.data)},n.worker.postMessage({method:"init",id:e.id||0,args:{openlog:n.openlog,supportHevc:n.supportHevc,codecType:n.codecType}}),n}return v(i,[{key:"transmux",value:function(e,t,i,n,a,s,r,l,d){var o=t.buffer;this.worker&&this.worker.postMessage({method:"transmux",id:e,buffer:o,args:{start:i,videoIdx:n,audioIdx:a,moov:s,useEME:r,kidValue:l,context:d}},[o])}},{key:"reset",value:function(){this.worker&&this.worker.postMessage({method:"reset"})}},{key:"destroy",value:function(){this.worker&&this.worker.terminate()}}]),i}(P),ta="error",ia="metaReady",na="moov_request_Progress",aa="update_load_fragmentIdx",sa=function(e){L(u,e);var t,i,n,a,s,r,l,d,o,c=M(u);function u(e,t){var i;if(X(this,u),G(R(i=c.call(this)),"onprogressDataArrive",function(){var e=f(Z().mark((function e(t,n,a){var s;return Z().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:t&&t.byteLength>0&&((s=i.timeRange[a.index].range)&&a.range[1]>=s[1]&&!n&&(n=!0),i.log("[mp4.loadFragment onprogressDataArrive ] receive data, >>> index,",a.index,",range,",JSON.stringify(a.range),", dataLen,",t.byteLength),i._mux(t,a.range[0],a.index,n)),n&&(i.timeRange[a.index].downloaded=!0,i.bufferLoadedPos=-1,i.log("[FragLoadDowned],fragmentIdx,",a.index,",rangeEnd,",a.range[1]));case 2:case"end":return e.stop()}}),e)})));return function(t,i,n){return e.apply(this,arguments)}}()),i.url=e,i.options=u.getDefaultConfig(),Object.keys(t).map((function(e){void 0!==t[e]&&null!==t[e]&&(i.options[e]=t[e])})),i.timeRange=[],i.CHUNK_SIZE=i.options.chunkSize,i.bufferLoaded=new Uint8Array(0),i.bufferLoadedPos=0,i.meta=null,i.videoTrak=null,i.audioTrak=null,i.canDownload=!0,i._loadSuccessCallBack=null,i._isPending=!1,i._metaLoading=!1,i.MP4Loader=new En(p(p({segmentDuration:i.options.segmentDuration,url:e,vid:t.vid,retry:i.options.retryCount,retryDelay:i.options.retryDelay,timeout:i.options.timeout},t.reqOptions),{},{preferMMS:i.options.preferMMS,memoryOpt:i.options.memoryOpt,openLog:_n()})),i.fMP4Demuxer=null,i.MP4Demuxer=null,i.FMP4Remuxer=null,i._needInitSegment=!0,i._switchBitRate=!1,i.enableWorker=i.options.enableWorker,i.enableWorker&&"undefined"!=typeof Worker)try{i.workerSequence=0,i.transmuxerWorkerControl=new ea({id:i.workerSequence,codecType:t.codecType,supportHevc:i.options.supportHevc,openLog:_n()}),i.transmuxerWorkerControl.on("transmux",(function(e){var t=e.args;i.log("[transmuxerworker end] ,range, ",JSON.stringify(t.range),",dataLen,",t.buffer.byteLength,t.context),i._loadSuccessCallBack&&i._loadSuccessCallBack(t)}))}catch(n){i.log("Error in worker:",n),i.enableWorker=!1,i.transmuxerWorkerControl=null}return i.enableWorker||(i.MP4Demuxer=null,i.FMP4Remuxer=null),i.seekTime=-1,i.changeBitRateTime=-1,i}return v(u,[{key:"changeBitRate",value:(o=f(Z().mark((function e(t){return Z().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return this.url=t.url,e.next=3,this.MP4Loader.changeUrl(this.url,this.options.vid+Date.now(),this.CHUNK_SIZE);case 3:this._switchBitRate=!0,this.log("[switchBitrate] changeUrl, bitRate,",this.url);case 5:case"end":return e.stop()}}),e,this)}))),function(e){return o.apply(this,arguments)})},{key:"log",value:function(e){for(var t=this.options,i=t&&t.vid?"[MP4] ".concat(t.vid," ").concat(e):"[MP4] ".concat(e),n=arguments.length,a=new Array(n>1?n-1:0),s=1;s<n;s++)a[s-1]=arguments[s];On.apply(void 0,[i].concat(a))}},{key:"errorHandler",value:(d=f(Z().mark((function e(t,i){var n,a,s,r;return Z().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:n=t.response,a=t.message,s=this.options?this.options.vid:"",r=null,this._isPending=!0,n?(r=new Tn("network",n.status,{httpText:n.httpText,message:a,url:n.url}),this.emit(ta,r)):(console.log("[MP4] [".concat(s,"] errorHandler,"),t),r=t,this.emit(ta,r));case 6:case"end":return e.stop()}}),e,this)}))),function(e,t){return d.apply(this,arguments)})},{key:"init",value:(l=f(Z().mark((function e(){return Z().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!this.url){e.next=3;break}return e.next=3,this.MP4Loader.changeUrl(this.url,this.options.vid+Date.now(),this.CHUNK_SIZE);case 3:return e.next=5,this.getMetaInfo();case 5:case"end":return e.stop()}}),e,this)}))),function(){return l.apply(this,arguments)})},{key:"getTimeRange",value:function(){for(var e=[],t=null,i=0;this.videoTrak&&i<this.videoTrak.length;i++)t={startTime:this.videoTrak[i].startTime,endTime:this.videoTrak[i].endTime,downloaded:!1,isLoading:!1},e.push(t);if(this.audioTrak&&this.audioTrak.length>e.length)for(var n=e.length;n<this.audioTrak.length;n++)t={startTime:Math.max(this.audioTrak[n].startTime,t?t.endTime:0),endTime:Math.max(this.audioTrak[n].endTime,t?t.endTime:0),downloaded:!1,isLoading:!1},e.push(t);return e}},{key:"getMetaInfo",value:(r=f(Z().mark((function e(){var t,i,n,a=this,s=arguments;return Z().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return t=!(s.length>0&&void 0!==s[0])||s[0],e.prev=1,this._metaLoading=!0,this.log("getMetaInfo start"),this.bufferLoaded=new Uint8Array(0),i=0,n=function(){var e=f(Z().mark((function e(n,s,r){var l;return Z().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:a.log("getMetaInfo onProgressHandle, dataLen,",n?n.byteLength:-1,", state,",s,",range,",JSON.stringify(r.range)),n&&r.range[0]===i&&(a.bufferLoaded=D(Uint8Array,a.bufferLoaded,new Uint8Array(n)),i+=n.byteLength),r.meta&&!a.meta&&(l=r.meta,a.videoTrak=l.videoSegments,a.audioTrak=l.audioSegments,a.timeRange=a.getTimeRange(),a.meta=p(p({},l.meta),{},{ext:{videoTrak:a.videoTrak,audioTrak:a.audioTrak}}),l.bufferLoaded=a.bufferLoaded,a.log("meta reach"),t&&a.emit(ia,a.meta)),a.meta&&s&&(a.log("[getMetaInfo req end]"),a._metaLoading=!1),a.meta&&(n||s)&&(a.log("emit moov_req_progress"),a.emit(na));case 5:case"end":return e.stop()}}),e)})));return function(t,i,n){return e.apply(this,arguments)}}(),e.next=9,this.MP4Loader.loadMetaProcess(this.MP4Loader.cache,[0,this.CHUNK_SIZE],n);case 9:e.next=15;break;case 11:e.prev=11,e.t0=e.catch(1),console.error("[MP4] trigger errorHandler getMetaInfo",null===e.t0||void 0===e.t0?void 0:e.t0.message),this.loadError(e.t0,"getMetaInfo");case 15:case"end":return e.stop()}}),e,this,[[1,11]])}))),function(){return r.apply(this,arguments)})},{key:"getFragmentIdx",value:function(e){var t,i;if(this.videoTrak.length){if(t=this.videoTrak.find((function(t){return t.startTime<=e&&t.endTime>e})),i=this.audioTrak.find((function(t){return t.startTime<=e&&t.endTime>e})),t&&i)return Math.min(t.index,i.index);if(t||i)return t?t.index:i.index;var n=Number.MAX_VALUE;return this.videoTrak&&this.videoTrak.length>0&&(n=this.videoTrak.length-1),this.audioTrak&&this.audioTrak.length>0&&(n=Math.min(this.audioTrak.length-1,n)),n}return(i=this.audioTrak.find((function(t){return t.startTime<=e&&t.endTime>e})))?i.index:0}},{key:"_checkHasMeta",value:(s=f(Z().mark((function e(){var t;return Z().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return this.log(" loadMeta start"),this._metaLoading=!0,e.next=4,this.MP4Loader.loadMeta(this.MP4Loader.cache,Math.round(this.CHUNK_SIZE/2));case 4:return t=e.sent,this._metaLoading=!1,this.videoTrak=t.videoSegments,this.audioTrak=t.audioSegments,this.meta=p(p({},t.meta),{},{ext:{videoTrak:this.videoTrak,audioTrak:this.audioTrak}}),this.timeRange=this.getTimeRange(),this.bufferLoaded=new Uint8Array(0),t.bufferLoaded=this.bufferLoaded,e.abrupt("return",!0);case 13:case"end":return e.stop()}}),e,this)}))),function(){return s.apply(this,arguments)})},{key:"resetFragmentLoadState",value:function(e){for(var t=0;t<this.timeRange.length;t++)t<e?(this.timeRange[t].downloaded=!0,this.timeRange[t].isLoading=!0):(this.timeRange[t].downloaded=!1,this.timeRange[t].isLoading=!1)}},{key:"getFragRange",value:function(e){var t,i,n,a,s=null;this.videoTrak&&(s=e<this.videoTrak.length?this.videoTrak[e]:this.videoTrak[this.videoTrak.length-1]);var r=null;this.audioTrak&&(r=e<this.audioTrak.length?this.audioTrak[e]:this.audioTrak[this.audioTrak.length-1]);var l=0,d=0;this.videoTrak&&e>=this.videoTrak.length-1&&(l=-1),this.audioTrak&&e>=this.audioTrak.length-1&&(d=-1);var o=[Math.min((null===(t=s)||void 0===t?void 0:t.range[0])||1/0,(null===(i=r)||void 0===i?void 0:i.range[0])||1/0),Math.max((null===(n=s)||void 0===n?void 0:n.range[1])+l||0,(null===(a=r)||void 0===a?void 0:a.range[1])+d||0)];return e<this.timeRange.length&&(this.timeRange[e].range=o),o}},{key:"load",value:(a=f(Z().mark((function e(t,i){var n,a,s;return Z().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(this._loadSuccessCallBack=i,!this._switchBitRate||this._metaLoading){e.next=12;break}return this.log("[switchBitrate], switch bitRate start load, time,",t>=this.videoTrak.length?this.audioTrak[t].startTime:this.videoTrak[t].startTime,", fragIndex,",t),e.next=5,this._checkHasMeta();case 5:n=e.sent,this.changeBitRateTime>0&&(this.timeRange[t].startTime<=this.changeBitRateTime&&this.changeBitRateTime<this.timeRange[t].endTime?this.log("[switchBitrate], not need update load fragIndex",t,",stTime,",this.changeBitRateTime):(t=this.getFragmentIdx(this.changeBitRateTime),this.log("[switchBitrate], need update load fragIndex",t,",stTime,",this.changeBitRateTime,",newBitrateTimeRange,",this.timeRange[t].startTime,"-",this.timeRange[t].endTime),this.emit(aa,t)),this.seekTime=this.changeBitRateTime,this.changeBitRateTime=-1),this.resetFragmentLoadState(t),this.log("[switchBitrate], reset timerange state,",t),this._needInitSegment=!0,this.resetTansmuxer(),n&&(this._switchBitRate=!1);case 12:if(!this._switchBitRate||!this._metaLoading){e.next=14;break}return e.abrupt("return");case 14:a=this.getFragRange(t),this.log("loadFragment,",t,",range,",JSON.stringify(a)),this.seekTime>0?(s=this.getSubRange(t,this.seekTime,a),this.loadFragment(t,s),this.seekTime=-1):this.loadFragment(t,a);case 17:case"end":return e.stop()}}),e,this)}))),function(e,t){return a.apply(this,arguments)})},{key:"getSubRange",value:function(e,t,i){var n=i[0],a=i[0],s=1,r=!1;if(this.log(">>>>>getSubRange time,",t,JSON.stringify(i)),this.videoTrak&&this.videoTrak.length>0){var l=e<this.videoTrak.length?this.videoTrak[e]:this.videoTrak[this.videoTrak.length-1];if(0===l.frames.length)return this.log(">>>>>getSubRange video, no frames"),i;var d=l.frames.filter(ra),o=this.meta.videoTimescale,c=d[0].startTime/o;this.log(">>>>>getSubRange video, startTime,",l.startTime,",endTime,",l.endTime);for(var u=0;u<d.length;u++)this.log(">>>>>getSubRange video keyFrameList, startTime,",d[u].startTime/o,",range,",d[u].offset);for(;s<d.length;s++){var m=d[s].startTime/o;if(c<=t&&t<m&&i[0]<d[s-1].offset){n=d[s-1].offset,r=!0,this.log(">>>>>getSubRange video end, startTime,",c,",endTime,",m,",startRange,",n,", keyFrameIndex,",s-1);break}c=m}!r&&c<=t&&t<l.endTime+.8&&(n=d[s-1].offset,this.log(">>>>>getSubRange video last, startTime,",c,",endTime,",l.endTime,",startRange,",n))}if(s=1,this.audioTrak&&this.audioTrak.length>0){var h=e<this.audioTrak.length?this.audioTrak[e]:this.audioTrak[this.audioTrak.length-1];if(0===h.frames.length)return this.log(">>>>>getSubRange video, no frames"),i;var p=h.frames,Z=this.meta.audioTimescale;s=Math.floor((t*Z-p[0].startTime)/h.frames[0].duration);for(var y=(s=Math.min(p.length-1,s))>0?p[s-1].startTime/Z:p[0].startTime/Z;s>=0&&s<p.length;)if(s>0&&y>t)y=p[s-=1].startTime/Z;else{var b=(p[s].startTime+p[s].duration)/Z;if(y<=t&&t<b&&i[0]<p[s].offset){a=p[s].offset,r=!0,this.log(">>>>>getSubRange audio end, startTime,",y,",endTime,",b,",startRange,",a,", index,",s);break}y=b,s++}}var f=[Math.min(a,n),i[1]];return this.log(">>>>>getSubRange finalRange ",JSON.stringify(f),",oldRange,",JSON.stringify(i)),f}},{key:"_mux",value:function(e,t,i,n){var a=this.getSamplesRange(i,"video"),s=this.getSamplesRange(i,"audio"),r=[t,t+e.byteLength];if(this.transmuxerWorkerControl&&!this.meta.isFragmentMP4){var l={range:r,state:n,fragIndex:i};this.log("[transmuxerworker start] ,range, ",JSON.stringify(r),",dataLen,",e.byteLength,l),this.transmuxerWorkerControl.transmux(this.workerSequence,e,t,a,s,this.meta.moov,this.useEME,this.kidValue,l)}else try{var d,o;this.meta.isFragmentMP4?(this.fMP4Demuxer||(this.fMP4Demuxer=new Wt),d=this.fMP4Demuxer.demuxPart(e,t,this.meta.moov)):(this.MP4Demuxer||(this.MP4Demuxer=new Hi(this.videoTrak,this.audioTrak,null,{openLog:_n(),memoryOpt:this.options.memoryOpt})),d=this.MP4Demuxer.demuxPart(e,t,a,s,this.meta.moov,this.useEME,this.kidValue)),this.FMP4Remuxer||this.checkCodecH265()&&!this.options.supportHevc||(this.FMP4Remuxer=new It(d.videoTrack,d.audioTrack,{openLog:_n()})),this.log("[mux], videoTimeRange,",d.videoTrack?[d.videoTrack.startPts,d.videoTrack.endPts]:null,",audioTimeRange,",d.audioTrack?[d.audioTrack.startPts,d.audioTrack.endPts]:null);var c=[Math.min(d.videoTrack.startPts,d.audioTrack.startPts),Math.max(d.videoTrack.endPts,d.audioTrack.endPts)];if(this.FMP4Remuxer){var u=this.FMP4Remuxer.remux(this._needInitSegment,{initMerge:!0,range:r});u.initSegment&&(this._needInitSegment=!1),o={buffer:In.concatData(u.audioSegment,u.videoSegment),range:r,state:n,context:{range:r,fragIndex:i,timeRange:c},initSeg:u.initSegment}}else o={videoTrack:d.videoTrack,audioTrack:d.audioTrack,buffer:null,range:r,state:n,context:{range:r,fragIndex:i,timeRange:c}};this._loadSuccessCallBack&&this._loadSuccessCallBack(o)}catch(h){console.error("mux err:",h);var m=new Mn(Rn.remux,kn.muxError,{msg:JSON.stringify(h)});this.errorHandler(m,"mux",{fragIndex:i,range:[t,t+e.byteLength]})}}},{key:"getSamplesRange",value:function(e,t){var i=[];switch(t){case"video":if(this.videoTrak&&e<this.videoTrak.length){var n=this.videoTrak[e].frames;if(!n.length)break;i.push(n[0].index),i.push(n[n.length-1].index)}break;case"audio":if(this.audioTrak&&e<this.audioTrak.length){var a=this.audioTrak[e].frames;if(!a.length)break;i.push(a[0].index),i.push(a[a.length-1].index)}break;default:console.warn("[getSamplesRange] type ",t," is invalid")}return i}},{key:"loadFragment",value:(n=f(Z().mark((function e(t,i){var n,a,s,r;return Z().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!(this._isPending||i.length>0&&0===i[0]&&0===i[1]||this.timeRange[t].isLoading)){e.next=2;break}return e.abrupt("return");case 2:if(this.log("[MP4.loadFragment] ,fragIndex,",t,",range ",i,",len ,",i[1]-i[0],", bufferLoaded_Len,",this.bufferLoaded.byteLength),!(i.length>=2&&i[1]&&i[1]>0&&i[1]<=this.bufferLoaded.byteLength)){e.next=13;break}this.timeRange[t].isLoading=!0,n=Math.max(i[0],this.bufferLoadedPos),a=new Uint8Array(this.bufferLoaded.slice(n,i[1])),this.log("[mp4.loadFragment] has all data: ",n,i[1]),this.timeRange[t].downloaded=!0,this.bufferLoadedPos=-1,this._mux(a,n,t,!0),e.next=34;break;case 13:if(!(i.length>=2&&i[0]&&i[0]<=this.bufferLoaded.byteLength)){e.next=29;break}if(this.timeRange[t].isLoading){e.next=27;break}if(s=Math.max(i[0],this.bufferLoadedPos),!((r=new Uint8Array(this.bufferLoaded.slice(s,i[1]))).byteLength>0)){e.next=22;break}return this.bufferLoadedPos=s+r.byteLength,this.log("[mp4.loadFragment] has part data: ",s,s+r.byteLength),this._mux(r,s,t,i[1]<=this.bufferLoadedPos),e.abrupt("return");case 22:if(this._metaLoading||this.timeRange[t].isLoading){e.next=27;break}return this.log("[mp4.loadFragment] ready to load part data >>> ",this.bufferLoaded.byteLength,i[1]),this.timeRange[t].isLoading=!0,e.next=27,this.startLoad([this.bufferLoaded.byteLength,i[1]],t);case 27:e.next=34;break;case 29:if(this._metaLoading&&!(i[0]>=this.CHUNK_SIZE)||this.timeRange[t].isLoading){e.next=34;break}return this.timeRange[t].isLoading=!0,this.log("[mp4.loadFragment],ready to load all data ,segmentIdx, ",t,",range >>> ",JSON.stringify(i)),e.next=34,this.startLoad(i,t);case 34:case"end":return e.stop()}}),e,this)}))),function(e,t){return n.apply(this,arguments)})},{key:"startLoad",value:(i=f(Z().mark((function e(t,i){return Z().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,this.MP4Loader.loadData(t,this.MP4Loader.cache,{index:i,onProgress:this.onprogressDataArrive,onProcessMinLen:this.options.onProcessMinLen});case 3:e.next=9;break;case 5:e.prev=5,e.t0=e.catch(0),console.error("[MP4] trigger errorHandler getMetaInfo",null===e.t0||void 0===e.t0?void 0:e.t0.message),this.loadError(e.t0,"loadFragment",{range:t,fragIndex:i});case 9:case"end":return e.stop()}}),e,this,[[0,5]])}))),function(e,t){return i.apply(this,arguments)})},{key:"loadError",value:function(e,t,i){var n;!e.response&&(e.response={}),e.isTimeout?e.response.status="timeout":null!=e&&null!==(n=e.response)&&void 0!==n&&n.status||(e.response.status="networkError"),this.errorHandler(e,t,i)}},{key:"cancelLoading",value:(t=f(Z().mark((function e(){return Z().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.MP4Loader;case 2:if(e.t0=e.sent,!e.t0){e.next=5;break}this.MP4Loader.cancel();case 5:case"end":return e.stop()}}),e,this)}))),function(){return t.apply(this,arguments)})},{key:"update",value:function(e){this.url=e}},{key:"checkCodecH265",value:function(){return this.meta&&(this.meta.videoCodec.indexOf("hvc1")>-1||this.meta.videoCodec.indexOf("hev1")>-1)}},{key:"destroy",value:function(){this.hasDestroyed||(this.resetTansmuxer(),this.transmuxerWorkerControl&&this.transmuxerWorkerControl.destroy(),this._isPending=!1,this._metaLoading=!1,this.bufferLoadedPos=0,this.bufferLoaded=new Uint8Array(0),this.MP4Loader&&(this.MP4Loader.cancel(),this.MP4Loader.destroy()),this.hasDestroyed=!0)}},{key:"resetTansmuxer",value:function(){this.MP4Demuxer&&this.MP4Demuxer.reset(),this.MP4Demuxer=null,this.FMP4Remuxer&&this.FMP4Remuxer.reset(),this.FMP4Remuxer=null,this.transmuxerWorkerControl&&this.transmuxerWorkerControl.reset()}}],[{key:"getDefaultConfig",value:function(){return{segmentDuration:5,onProcessMinLen:1024,chunkSize:8e5,retryCount:3,retryDelay:1e3,timeout:3e3,enableWorker:!1,playerId:"",vid:"",ext:{},preferMMS:!1}}}]),u}(P);function ra(e){if(e.keyframe)return e}var la=function(){function e(t){X(this,e),this.onTick_=t,this.cancelPending_=null}return v(e,[{key:"tickAfter",value:function(e){var t=this,i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;this.stop();var n=!0,a=null;this.cancelPending_=function(){window.clearTimeout(a),n=!1};var s=function(){n&&(t.onTick_(),i&&i())};return a=window.setTimeout(s,1e3*e),this}},{key:"tickEvery",value:function(e){var t=this;this.tickAfter(e,(function(){t.tickEvery(e)}))}},{key:"stop",value:function(){this.cancelPending_&&(this.cancelPending_(),this.cancelPending_=null)}}]),e}(),da=function(){function e(){var t,i;X(this,e);var n=new Promise((function(e,n){t=e,i=n}));return n.resolve=function(e){t(e),n.state="fulfilled"},n.reject=function(e){i(e),n.state="rejected",n.isBreak="DESTROYED"===e},n.state="pending",n}return v(e,[{key:"resolve",value:function(e){}},{key:"reject",value:function(e){}}]),e}(),oa=null,ca=null,ua=null,ma=null,ha=function(e){L(s,e);var t,i,n,a=M(s);function s(e){var t;return X(this,s),G(R(t=a.call(this,e)),"_onMp4DataCallBack",(function(){t._isMseInit&&t._onTimeUpdate()})),G(R(t),"_onMp4MetaReady",(function(e){var i=R(t).config,n=t.mp4.checkCodecH265();try{if(n&&!t.config.supportHevc){var a="browser not support HEVC",s=new m.Errors(t.player,{errorType:"runtime",errorTypeCode:Rn.runtime,errorCode:kn.h265Error,errorMessage:a,vid:i.vid,mediaError:{code:kn.h265Error,message:a}});t._errorHandler(s)}else t._initMse(e),t._initPromise.resolve()}catch(l){var r=new m.Errors(t.player,{errorType:"runtime",errorTypeCode:Rn.runtime,errorCode:kn.mse,errorMessage:null==l?void 0:l.message,vid:i.vid,mediaError:{code:kn.other1,message:null==l?void 0:l.message}});return void t._errorHandler(r)}t._loadData()})),G(R(t),"_onMp4Error",(function(e){var i=t.playerConfig.vid;console.error("[Index] _onMp4Error",i,e),t._errorHandler(e)})),G(R(t),"_loadDataSuccess",(function(e){if(!t.isDestroy&&t.mse){t.log("[loadFragment] _loadDataSuccess ",JSON.stringify(e.context.range),",dataLen,",e.buffer?e.buffer.byteLength:0,e.state);try{e.initSeg&&(t._appendInitSeg(e.initSeg),(!e.buffer||e.buffer.byteLength<1)&&(t.log("no data, must load data"),t._onTimeUpdate()));var i=e.buffer,n=e.state,a=e.context;if(t.mse&&n&&(!i||i.byteLength<=0)&&a.fragIndex===t.mp4.timeRange.length-1){var s=t.player.buffered;s&&s.length>0&&(t.bufferEndTime=s.end(s.length-1)),t._isEnded(),t.log("loaded ended !!!==>>>",JSON.stringify(a.range),", fragIndex,",a.fragIndex,", bufferEndTime,",t.bufferEndTime,",meta_duration,",t.mp4.meta.duration)}if(t.mse&&n&&a.fragIndex===t.mp4.timeRange.length-1&&(!i||i.byteLength<=0)){var r=t.player.buffered;r&&r.length>0&&(t.bufferEndTime=r.end(r.length-1)),t._isEnded(),t.log("load ended !!!==>>>",t.playerConfig.vid,JSON.stringify(a.range),", fragIndex,",a.fragIndex,", bufferEndTime,",t.bufferEndTime,",meta_duration,",t.mp4.meta.duration)}i&&t.mse&&i&&i.byteLength>0&&t._appendBuffer(sn.VIDEO,i,a,n)}catch(d){t.log("appendBuffer error",d);var l=new m.Errors(t.player,{errorType:"runtime",errorTypeCode:Rn.runtime,errorCode:kn.mse,vid:t.player.config.vid,errorMessage:d.message,mediaError:{code:kn.mse,message:d.message}});t._errorHandler(l)}null!=e&&e.state&&t._onTimeUpdate()}})),G(R(t),"_onWaiting",(function(){var e=R(t),i=e.player,n=e.config;clearTimeout(t._waitInBufferTimer),t._waitInBufferTimer=null;var a=i.currentTime,s=i.bufferedPoint;s.end>0&&s.end-i.currentTime>=2&&t._waitAdjustTimeCnt<n.waitJampBufferMaxCnt&&(t._waitInBufferTimer=setTimeout((function(){t._waitAdjustTimeCnt++,i.currentTime=i.currentTime+.5,t.log("[waitInBufferTimeout], waitAdjustTimeCnt,",t._waitAdjustTimeCnt,",curtime,",a,In.nowTime())}),n.waitingInBufferTimeOut))})),G(R(t),"_onSeeking",f(Z().mark((function e(){var i,n,a,s,r,l,d,o,c,u,m;return Z().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(i=R(t),n=i.player,a=i.mp4,s=n.currentTime,t.log("[seekTime], curTime,",s,",buffer,",n.buffered2.bufferedList),a&&a.meta){e.next=5;break}return e.abrupt("return");case 5:if(t.endofstream=!1,a.bufferLoadedPos=-1,a._metaLoading=!1,r=n.bufferedPoint,l=!1,d=0,!(r.end>0)){e.next=25;break}if(l=!0,!(a.meta.duration-r.end<.5)){e.next=17;break}return t._startProgress(),t.log("[seeking in buffered range], buffer end,",r.end,", duration,",a.meta.duration),e.abrupt("return");case 17:if(d=a.getFragmentIdx(r.end),t._curLoadSegmentIdx!==d){e.next=22;break}return t._startProgress(),t.log("[seeking in buffered range], seek fragIndex is current load segmentIdx",d),e.abrupt("return");case 22:a.seekTime=r.end,d<0&&(d=t._curLoadSegmentIdx),t.log("[seeking in buffered range], seekTime ",s,",bufferRange,",r.start,"-",r.end,", fragIndex,",d);case 25:return l||(a.seekTime=s,(d=a.getFragmentIdx(s))<0&&(d=t._curLoadSegmentIdx),t.log("[seekTime out buffer range], curTime,",s,", Idx,",d),o=R(t),(c=o.mse)&&c.isFull()&&(u=n.buffered2.bufferedList,m=u[u.length-1],c.clearOpQueues(sn.VIDEO),t._checkRemoveSourceBuffer([m.start,m.end],n.currentTime,!0,!0))),e.next=28,a.cancelLoading();case 28:a.resetFragmentLoadState(d),t._curLoadSegmentIdx=d,t._onTimeUpdate(),t._startProgress(),t._isEnded();case 33:case"end":return e.stop()}}),e)})))),G(R(t),"changeDefineCanPlay",(function(e,i,n,a){var s=R(t).player;s.ended?s.currentTime=0:(t.log("[oldChangeDefinition],this._changeDefState,",t._changeDefState),s.currentTime=t._changeDefState?t._changeDefState.currentTime:e,(t._changeDefState?t._changeDefState.paused:i)?s.pause():s.play(),t._changeDefState=null,s.emit(m.Events.AFTER_DEFINITION_CHANGE,{from:n,to:a}))})),G(R(t),"changeDefinition",function(){var e=f(Z().mark((function e(i,n){var a,s,r,l,d,o,c;return Z().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(a=R(t),s=a.player,r=a.config,l=a.mp4,n||(n=s.curDefinition),t._MSEError=!1,!r.witchBitRateWay){e.next=6;break}return t.oldChangeDefinition(i,n),e.abrupt("return");case 6:if(s.emit(m.Events.DEFINITION_CHANGE,{from:n,to:i}),d=s.currentTime,(o=l.getFragmentIdx(d))<0&&(o=t._curLoadSegmentIdx),t.log("switchBitrate:point,fragIndex,",o,",startTime,",l.timeRange[o].startTime,",currentTime,",s.currentTime),!l){e.next=16;break}return t.mp4.changeBitRateTime=d,e.next=15,l.cancelLoading();case 15:l._metaLoading&&(l._metaLoading=!1);case 16:return t._removeBuffeEndTime=l.timeRange[o].startTime,t._isChangeDefinition=!0,(c=s.getBufferedRange(s.buffered))[1]>0&&c[1]-s.currentTime>5&&(t.mse.clearOpQueues(sn.VIDEO),t.mse.remove(sn.VIDEO,s.currentTime+5,c[1])),t.log("switchBitrate: resetFragmentLoadState,",o),l.resetFragmentLoadState(o),t._curLoadSegmentIdx=o,e.next=25,t.mp4.changeBitRate(i);case 25:t._onTimeUpdate(),s.emit("RESOLUTION_UPDATE",i);case 27:case"end":return e.stop()}}),e)})));return function(t,i){return e.apply(this,arguments)}}()),G(R(t),"_replayHook",(function(){var e;return null===(e=t.player)||void 0===e||e.play(),!1})),G(R(t),"_retryHook",(function(){return t.beforePlayerInit(),!1})),t.mp4=null,t.mse=null,t._waitAdjustTimeCnt=0,t._lastCheckTime=In.nowTime(),t._removeBuffeEndTime=0,t._pendingPromises=[],t}return v(s,[{key:"afterCreate",value:function(){var e=this;window.__mp4player=this;try{m.BasePlugin.defineGetterOrSetter(this.player,{__url:{get:function(){try{return e.mse?e.mse.url:e.config.url}catch(t){return null}}}})}catch(t){}this._proxyPlayer()}},{key:"attachEvents",value:function(){this.off(m.Events.SEEKING,this._onSeeking),this.on(m.Events.SEEKING,this._onSeeking),this.on(m.Events.WAITING,this._onWaiting),this.off(m.Events.URL_CHANGE,this.switchURL),this.on(m.Events.URL_CHANGE,this.switchURL)}},{key:"detachEvents",value:function(){this.off(m.Events.SEEKING,this._onSeeking),this.off(m.Events.WAITING,this._onWaiting),this.off(m.Events.URL_CHANGE,this.switchURL)}},{key:"_proxyPlayer",value:function(){var e=this;"function"==typeof this.player.playNext&&(oa=this.player.playNext),this.player.playNext=function(){e.playNext.apply(e,arguments)},ca=this.player._startInit,ma=this.player.switchURL,ua=this.player.changeDefinition,this.player._startInit=this._playerStartInit.bind(this),this.player.switchURL=this.switchURL.bind(this),this.player.changeDefinition=this.changeDefinition.bind(this),this.player.removeHooks("replay",this._replayHook),this.player.removeHooks("retry",this._retryHook)}},{key:"_playerStartInit",value:function(e){var t=this,i=this.config,n=this.playerConfig;void 0===i.supportHevc&&null!==m.Sniffer&&void 0!==m.Sniffer&&m.Sniffer.isHevcSupported&&m.Sniffer.isHevcSupported()&&(i.supportHevc=!0);var a=this.initMp4();this._initPromise=a,this._addPendingPromise(this._initPromise),this.mse&&"String"===m.Util.typeOf(e)&&/^blob/.test(e)&&e!==this.mse.url&&(e=n.url),a.then((function(){t.mse&&(e=t.mse.url),t.attachEvents(),t._startProgress()})).catch((function(i){var n=!!t._initPromise&&t._initPromise.isBreak;if(!t.isDestroy&&!n){var a=i;a.errorCode||((a=new m.Errors(t.player,{errorType:Rn.RUNTIME,errorCode:(null==i?void 0:i.errorCode)||kn.other,vid:t.playerConfig.vid,errorMessage:(null==i?void 0:i.errorMessage)||(null==i?void 0:i.message),mediaError:{code:(null==i?void 0:i.httpCode)||kn.other,message:(null==i?void 0:i.errorMessage)||(null==i?void 0:i.message),errorType:null==i?void 0:i.errorType}})).url=e),t.useVideoLoad=!0,t.player.vtype="MP4_1",t.player.emit("playCatch",t.player.vtype,a)}})).finally((function(){if(t._initPromise){var i=t._initPromise.isBreak;i||(t._initPromise&&t._removePendingPromise(t._initPromise),t._initPromise=null,!t.isDestroy&&!i&&ca.call(t.player,e))}}))}},{key:"initMp4",value:function(){var e=this,t=this.player;t.config.vid||(t.config.vid=Date.now());var i=new da;return this.mp4&&(this.mp4.off(ia,this._onMp4MetaReady),this.mp4.off(ta,this._onMp4Error),this.mp4.off(na,this._onMp4DataCallBack),this.mp4.destroy(),this.mp4=null),this.mp4=new sa(t.config.url,p(p({},this.config),{},{vid:t.config.vid})),this.mp4.on(ia,this._onMp4MetaReady),this.mp4.on(ta,this._onMp4Error),this.mp4.on(na,this._onMp4DataCallBack),this.mp4.on(aa,(function(t){e._curLoadSegmentIdx=t,e.log("[update curLoadSegmentIdx]",t)})),this.mp4.init(),i}},{key:"setConfig",value:function(e){this.config=Object.assign(this.config,e)}},{key:"playNext",value:function(e){var t=this.player;this._defInited=!1,t.resetState(),t._currentTime=0,t._duration=0,t.isPlaying=!1,this._MSEError=!1,t.pause(),this._reset(),t.setConfig(e),this.log("[Index] playNext",e),t.play(),this.emit("playnext")}},{key:"checkDegrade",value:function(e){return!this.config.closeDowngrade||"networkError"===e.httpCode}},{key:"_errorHandler",value:function(e){var t,i=this.player,n=this.config;if(i&&!this.useVideoLoad){!e.url&&null!==(t=this.mp4)&&void 0!==t&&t.url&&(e.url=this.mp4.url);var a=i.paused;if(console.error("final error !!!!, ",n.vid,e),this.player.vtype="MP4_2",this.player.emit("playCatch",this.player.vtype,e),this.checkDegrade(e))this._initPromise?this._removeAndRejectInitPromise(e):this._startDegradedPlayback(e,a);else{this.player.pause(),this._reset();var s=i.currentTime;this.destroyMSE(),i.currentTime=s,this.emit("error",e)}}}},{key:"_startDegradedPlayback",value:function(e,t){var i=this;console.log(">>>_startDegradedPlayback");var n=this.player,a=this.playerConfig;this.useVideoLoad=!0,this.destroyMSE(),this._currentTime=n.currentTime,this.__onmetadataHandle=function(){i._currentTime&&(n.currentTime=i._currentTime),t?i.player.pause():i.player.play(),n.media.removeEventListener("loadedmetadata",i.__onmetadataHandle),i.__onmetadataHandle=null},n.media.addEventListener("loadedmetadata",this.__onmetadataHandle);var s=a.url;n.media.src=s}},{key:"_addPendingPromise",value:function(e){this._pendingPromises.push(e)}},{key:"_removePendingPromise",value:function(e){var t=this._pendingPromises.indexOf(e);t>-1&&this._pendingPromises.splice(t,1)}},{key:"_cancelPendingPromises",value:function(){this._pendingPromises.length>0&&this._pendingPromises.forEach((function(e){e.reject("DESTROYED")})),this._pendingPromises=[]}},{key:"_removeAndRejectInitPromise",value:function(e){this._initPromise&&(this._removePendingPromise(this._initPromise),this._initPromise.reject(e))}},{key:"_initMse",value:(n=f(Z().mark((function e(t){var i,n,a,s,r=this;return Z().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!this.mse){e.next=4;break}return e.next=3,this.mse.unbindMedia();case 3:this.mse=null;case 4:i=!!t.videoCodec,n=!!t.audioCodec,a=i&&n?'video/mp4; codecs="'.concat(t.videoCodec,', mp4a.40.5"'):i?'video/mp4; codecs="'.concat(t.videoCodec,'"'):'video/mp4; codecs="mp4a.40.5"',s=G({},sn.VIDEO,{mimeType:"video/mp4",codec:a}),this.mse=new sn(null,{preferMMS:this.config.preferMMS}),this.mse.bindMedia(this.player.video).then((function(){var e=Object.keys(s);try{for(var t=0;t<e.length;t++){var i=e[t];r.mse.createSource(i,s[i].codec)}}catch(n){console.error("MSE error: ",n),r._errorHandler(n)}r._isMseInit=!0,r._onTimeUpdate()}));case 11:case"end":return e.stop()}}),e,this)}))),function(e){return n.apply(this,arguments)})},{key:"destroyMSE",value:(i=f(Z().mark((function e(){var t;return Z().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,null===(t=this.mse)||void 0===t?void 0:t.unbindMedia();case 2:this.mse=null;case 3:case"end":return e.stop()}}),e,this)}))),function(){return i.apply(this,arguments)})},{key:"_onTimeUpdate",value:function(){var e=this,t=this.mse,i=this.mp4,n=this.player,a=this.config;if(i){var s=i.timeRange,r=n.getBufferedRange(n.buffered2);if(t&&i&&i.canDownload){In.nowTime()-this._lastCheckTime>1e3&&(this._lastCheckTime=In.nowTime(),this._loadStuckCheck(),this._checkRemoveSourceBuffer(r,n.currentTime));var l=n.paused?n.currentTime+a.minBufferLength:n.currentTime+a.maxBufferLength;r[1]-l<0&&s.every((function(t,i){return!!t.downloaded||(!e._isChangeDefinition&&t.endTime-t.startTime>1&&e._isInBuffer(t)?(t.downloaded=!0,t.isLoading=!0,e.log("onTimeUpdate, ".concat(i," download segment, has buffer"),t.startTime,t.endTime),!0):void(t.startTime-n.currentTime<a.maxBufferLength&&(e._curLoadSegmentIdx=i,e.log("[onTimeUpdate],load index==>>>, ",i,",IdxTimeRange, ",t.startTime,"-",t.endTime,",buffEnd, ",r[1],",playCurTime,",n.currentTime,", bufferLen,",r[1]-n.currentTime,",bufferRangeList,",e.player.buffered2?e.player.buffered2.bufferedList:null),e._loadData())))})),this._isEnded()}this.checkRemoveOldBitrateBuffer()}}},{key:"checkRemoveOldBitrateBuffer",value:function(){var e=this.mse,t=this.player;e&&this._removeBuffeEndTime>0&&t.currentTime>this._removeBuffeEndTime+1&&(this.log("remove old bitrate buffer",this._removeBuffeEndTime),e.remove(sn.VIDEO,0,this._removeBuffeEndTime-1),this._removeBuffeEndTime=0)}},{key:"_isInBuffer",value:function(e){for(var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,i=!1,n=this.player.video.buffered,a=0;a<n.length;a++){var s=n.start(a)-t,r=n.end(a)+t;if(s<=e.startTime&&e.endTime<=r){i=!0;break}}return i}},{key:"_loadData",value:(t=f(Z().mark((function e(){return Z().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(this.mp4&&this._isMseInit){e.next=3;break}return this.log("loadData, player.mp4 null",this._isMseInit),e.abrupt("return");case 3:return e.prev=3,e.next=6,this.mp4.load(this._curLoadSegmentIdx,this._loadDataSuccess);case 6:e.next=11;break;case 8:e.prev=8,e.t0=e.catch(3),console.error("[Index] _loadData error",this.playerConfig.vid,e.t0);case 11:case"end":return e.stop()}}),e,this,[[3,8]])}))),function(){return t.apply(this,arguments)})},{key:"_appendInitSeg",value:function(e){var t=this;this.mp4&&this.mse&&this.mse.append(sn.VIDEO,e,{vid:this.playerConfig.vid,range:null,dataLen:e.byteLength,isinit:!0}).then((function(e){t.log("appendInitSeg end ==>>>",null==e?void 0:e.context," costTime,",null==e?void 0:e.costtime)}))}},{key:"_appendBuffer",value:function(e,t){var i=this,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},a=arguments.length>3?arguments[3]:void 0,s=this.mse,r=this.config;s.append(e,t,{vid:r.vid,fragIndex:n.fragIndex,range:n.range,dataLen:t.byteLength,state:a}).then((function(e){if(i.log("player appendBuffer end ==>>>",e.context?e.context:null,", costTime,",e.costtime,", opt,",e.name,",bufferRange,",i.player.getBufferedRange()),i.mse&&n.state&&n.fragIndex===i.mp4.timeRange.length-1){var t=i.player.buffered;t&&t.length>0&&(i.bufferEndTime=t.end(t.length-1)),i._isEnded(),i.log("loaded ended !!!==>>>",n.range,", fragIndex,",n.fragIndex,", bufferEndTime,",i.bufferEndTime,",meta_duration,",i.mp4.meta.duration)}})).catch((function(e){if(console.log("[MSE error]",e),e&&null!=s&&s.isFull()){var t=i.player.getBufferedRange(i.player.buffered2);i._checkRemoveSourceBuffer(t,i.player.currentTime,!0)}}))}},{key:"_checkRemoveSourceBuffer",value:function(e,t,i){var n=this,a=this.mse,s=this.mp4,r=this.player;if(a&&s&&r&&(i&&(clearTimeout(this._removeBufferTimer),this._removeBufferTimer=null),e||(e=r.getBufferedRange(r.buffered2)),t||(t=r.currentTime),!(!i&&In.nowTime()-this._checkRemoveBufferLastTime<=this.config.removeBufferLen||this.endofstream)&&(this._checkRemoveBufferLastTime=In.nowTime(),e&&e[0]>=0&&(t-e[0]>this.config.removeBufferLen||a.isFull())))){var l=e[1],d=s.getFragmentIdx(l);if(d>=0&&s.timeRange[d].startTime<t){var o=Math.floor(Math.min(s.timeRange[d].startTime,e[1]));e[0]<o?(this.log("[checkremoveSourceBuffer], remove range==>>>",e[0],o),a.remove(sn.VIDEO,e[0],o)):a.isFull()&&!this._removeBufferTimer&&(this._removeBufferTimer=setTimeout((function(){n._checkRemoveSourceBuffer(null,null,!0)}),1e4))}}}},{key:"_isEnded",value:function(){var e=this.player,t=this.mp4,i=e.bufferedPoint,n=i?i.end:0;return!this.endofstream&&this.mse&&t.meta.duration-e.currentTime<.5&&(this.log("[check player isEnded],deal mse.endOfStream, currentTime,",e.currentTime,", bufferend,",n,", duration,",t.meta.duration),this.endofstream=!0,this.mse.endOfStream()),!!(t&&t.meta&&t.meta.duration-e.currentTime<.5)&&(this._stopProgress(),this.log("[check player isEnded],stopProgress and endOfStream,currentTime, ",e.currentTime,", bufferend,",n,", duration,",t.meta.duration),this.mse&&this.mse.endOfStream(),!0)}},{key:"switchURL",value:function(e){this.changeDefinition(e)}},{key:"oldChangeDefinition",value:function(e,t){var i=this,n=this.config,a=this.player;this.log("[oldChangeDefinition],currentTime,",a.currentTime,",from,",t,",to,",e);var s=a.currentTime,r=a.paused;this._changeDefState||(this._changeDefState={currentTime:s,paused:r},this.log("[oldChangeDefinition],currentTime,",a.currentTime,",pause,",r)),a.config.url=e.url,n.focusUserDefinition=!0,a.currentTime=0,a.pause(),this._reset(),this._isMseInit=!1,this._changeDefineCanPlay&&a.off("canplay",this._changeDefineCanPlay),this._changeDefineCanPlay=function(){i.changeDefineCanPlay(s,r,t,e),i._changeDefineCanPlay=null},a.once("canplay",this._changeDefineCanPlay),this.player.video.load(),this.initMp4()}},{key:"_loadStuckCheck",value:function(){var e=this,t=this.config,i=this.player;t.disableBufferBreakCheck||(i.currentTime-(this._lastCurrentTime||0)>.1||i.paused?1!==this._bufferBreakFlag&&2!==this._bufferBreakFlag||(this.log("视频没有卡死,重置卡死标记"),this._bufferBreakFlag=0,clearTimeout(this._bufferBreakTimer),this._bufferBreakFlag=null):this._bufferBreakFlag||(this._bufferBreakFlag=1,this.log("卡死计时开始! 持续".concat(t.waitingTimeOut,"毫秒则确认卡死")),this._bufferBreakTimer=setTimeout((function(){e.isDestroy||(1===e._bufferBreakFlag&&(e._bufferBreakFlag=2,e.log("确认卡死!!!"),e._errorHandler(new m.Errors(e.player,{errorType:"runtime",errorTypeCode:Rn.runtime,errorCode:kn.waitTimeout,errorMessage:"wait_timeout",vid:t.vid}))),e._bufferBreakTimer=null)}),t.waitingTimeOut)),this._lastCurrentTime=i.currentTime)}},{key:"isDestroy",get:function(){return!this.player}},{key:"_stopProgress",value:function(){this._hasStartProgress=!1,this._requestTimer&&(this._requestTimer.stop(),this._requestTimer=null),this._bufferBreakTimer&&(clearTimeout(this._bufferBreakTimer),this._bufferBreakTimer=null,this._bufferBreakFlag=void 0)}},{key:"_startProgress",value:function(){var e=this;this._hasStartProgress||(this._stopProgress(),this._requestTimer=new la((function(){e._requestTimer&&e._onTimeUpdate()})),this._requestTimer.tickEvery(this.config.tickInSeconds),this._hasStartProgress=!0)}},{key:"log",value:function(e){for(var t=this.playerConfig,i=t&&t.vid?"[Index]".concat(t.vid," ").concat(e):"[Index] ".concat(e),n=arguments.length,a=new Array(n>1?n-1:0),s=1;s<n;s++)a[s-1]=arguments[s];On.apply(void 0,[i].concat(a))}},{key:"_reset",value:function(){this._isMseInit=!1,this.endofstream=!1,this._curLoadSegmentIdx=0,this._removeBuffeEndTime=0,this._isChangeDefinition=!1,this._stopProgress(),this.mp4&&(this.mp4.off(ia,this._onMp4MetaReady),this.mp4.off(ta,this._onMp4Error),this.mp4.off(na,this._onMp4DataCallBack),this.mp4.destroy(),this.mp4=null),this.mse&&(this.mse.unbindMedia(),this.mse=null),this._unloadVideo()}},{key:"_unloadVideo",value:function(){var e=this.player;try{this.log("unloadVideo src ".concat(e.video.src)),e.video&&e.video.src&&(e.video.removeAttribute("src"),e.video.load())}catch(t){this.log("unloadVideo error",t)}}},{key:"destroy",value:function(){var e=this.player;e.removeHooks("replay",this._replayHook),e.removeHooks("retry",this._retryHook),this.detachEvents(),this._reset(),this.player.playNext=oa,this.player._startInit=ca,this.player.changeDefinition=ua,this.player.switchURL=ma,this._bufferBreakTimer&&clearInterval(this._bufferBreakTimer),this._removeBufferTimer&&(clearTimeout(this._removeBufferTimer),this._removeBufferTimer=null),this._waitInBufferTimer&&(clearTimeout(this._waitInBufferTimer),this._waitInBufferTimer=null)}}],[{key:"pluginName",get:function(){return"mp4Plugin"}},{key:"defaultConfig",get:function(){return{maxBufferLength:40,minBufferLength:5,disableBufferBreakCheck:!1,waitingTimeOut:15e3,waitingInBufferTimeOut:5e3,waitJampBufferMaxCnt:3,tickInSeconds:.1,reqOptions:null,closeDowngrade:!1,preferMMS:!1}}},{key:"version",get:function(){return"3.0.25-alpha.3"}}]),s}(m.BasePlugin);return ha}));
|
|
2
|
+
//# sourceMappingURL=index.min.js.map
|