{"version":3,"sources":["webpack:///./node_modules/bcx-aurelia-reorderable-repeat/dist/reorderable-after-reordering.js","webpack:///./node_modules/bcx-aurelia-reorderable-repeat/dist/reorderable-repeat.js","webpack:///./node_modules/bcx-aurelia-reorderable-repeat/dist/simple-array-repeat-strategy.js","webpack:///./node_modules/bcx-aurelia-reorderable-repeat/dist/reorderable-dnd-preview.js","webpack:///./node_modules/bcx-aurelia-reorderable-repeat/dist/repeater-dnd-type.js","webpack:///./node_modules/bcx-aurelia-reorderable-repeat/dist/reorderable-group-for.js","webpack:///./node_modules/bcx-aurelia-reorderable-repeat/dist/reorderable-repeat-strategy-locator.js","webpack:///./node_modules/bcx-aurelia-reorderable-repeat/dist/reorderable-group.js","webpack:///./node_modules/bcx-aurelia-dnd/dist/preview-drawers.js","webpack:///./node_modules/bcx-aurelia-dnd/dist/index.js","webpack:///./node_modules/bcx-aurelia-reorderable-repeat/dist/reorderable-dnd-handler-selector.js","webpack:///./node_modules/bcx-aurelia-reorderable-repeat/dist/index.js","webpack:///./node_modules/bcx-aurelia-reorderable-repeat/dist/reorderable-group-map.js","webpack:///./node_modules/bcx-aurelia-reorderable-repeat/dist/reorderable-direction.js","webpack:///./node_modules/buffer/index.js"],"names":["exports","__esModule","ReorderableAfterReordering","_class","customAttribute","_dec","ReorderableRepeat","obj","_dec2","_class2","_descriptor","_descriptor2","_descriptor3","_descriptor4","_descriptor5","_aureliaDependencyInjection","_aureliaBinding","_aureliaTemplating","_aureliaTemplatingResources","_reorderableRepeatStrategyLocator","_bcxAureliaDnd","_aureliaEventAggregator","_aureliaTaskQueue","_repeaterDndType","default","_reorderableGroupMap","_initializerDefineProperty","target","property","descriptor","context","Object","defineProperty","enumerable","configurable","writable","value","initializer","call","_assertThisInitialized","self","ReferenceError","_setPrototypeOf","o","p","setPrototypeOf","__proto__","_applyDecoratedDescriptor","decorators","desc","keys","forEach","key","slice","reverse","reduce","decorator","undefined","seed","classes","cache","lookupClass","className","cached","lastIndex","RegExp","add","el","current","length","test","rm","replace","trim","inject","EventAggregator","TaskQueue","BindingEngine","DndService","BoundViewFactory","TargetInstruction","ViewSlot","ViewResources","ObserverLocator","ReorderableRepeatStrategyLocator","ReorderableGroupMap","templateController","_AbstractRepeater","subClass","superClass","ea","taskQueue","bindingEngine","dndService","viewFactory","instruction","viewSlot","viewResources","observerLocator","strategyLocator","groupMap","_this","this","local","viewsRequireLifecycle","repeaterId","type","lookupFunctions","ignoreMutation","sourceExpression","getItemsSourceExpression","BindingBehavior","Error","ValueConverter","isOneTime","group","_reorderableGroup","prototype","create","constructor","_proto","changes","items","bind","bindingContext","overrideContext","_this2","scope","matcherBinding","_captureAndRemoveMatcherBinding","arrayObserver","collectionObserver","subscribe","_itemsMutated","_subsribers","intention","views","v","firstChild","_this2$intention","item","fromIndex","fromRepeaterId","toIndex","toRepeaterId","change","splice","removedFromThisList","insertedToThisList","afterReordering","_reorderableAfterReorderingFunc","queueMicroTask","targetProperty","_typeBinding","createBinding","patchedItems","concat","patchedItemsChanged","unbind","remove","dispose","s","removeAllViews","intentionChanged","newIntention","patched","itemsChanged","_reload","typeChanged","_this3","strategy","getStrategy","instanceChanged","view","_unRegisterDnd","_registerDnd","instructions","instructionIds","i","expressions","viewCount","children","index","matcher","evaluate","addView","insertView","insert","moveView","sourceIndex","targetIndex","move","returnToCache","skipAnimation","_this4","removeAll","removeViews","viewsToRemove","_this5","removeMany","removeView","removeAt","updateBindings","j","bindings","updateOneTimeBinding","controllers","k","boundProperties","binding","_additionalAttribute","attribute","au","attributes","_getPlainAttribute","name","node","template","hasAttribute","getAttribute","targetId","bi","behaviorInstructions","find","attrName","exp","_reorderableDirection","attr","toLowerCase","_dndHandlerSelector","_dndPreviewFunc","func","getContextFor","funcCall","_","_this6","_dndHover","location","direction","model","mouseEndAt","targetElementRect","x","y","width","height","_updateIntention","handler","_this7","$index","handlerSelector","querySelector","_previewFunc","addSource","dndModel","dndPreview","dndElement","addTarget","dndCanDrop","draggingMe","inSameGroup","dndHover","dndDrop","removeSource","removeTarget","beforeTarget","_this$dndService","isProcessing","isUsingGroup","originalIndex","currentIndex","nextIndex","publish","AbstractRepeater","bindable","observable","SimpleArrayRepeatStrategy","getCollectionObserver","getArrayObserver","repeat","itemsLength","_standardProcessInstanceChanged","ii","createFullOverrideContext","ReorderableDndPreview","ref","ReorderableGroupFor","Element","element","resetIntention","Array","isArray","repeaterInfo","get","attached","detached","_this$dnd","dnd","isHoveringShallowly","defaultTargetIndex","_simpleArrayRepeatStrategy","matchers","strategies","addStrategy","ArrayRepeatStrategy","push","ReorderableGroup","defaultPreview","unknownTagPreview","liPreview","trPreview","tagName","parentNode","newTr","cloneNode","tdCount","childElementCount","computed","getComputedStyle","style","section","newSection","appendChild","table","newTable","tableComputed","newLi","flex","newUlOrOl","listStyleType","display","preview","len","computed_1","aurelia_event_aggregator_1","preview_drawers_1","doc","document","documentElement","_stylesInjected","whichMouseButton","e","te","touches","which","me","buttons","button","getPageRect","rect","getBoundingClientRect","left","getScroll","top","getRectWidth","getRectHeight","scrollProp","offsetProp","window","clientHeight","body","right","bottom","getParent","isInput","isEditable","contentEditable","getCoord","coord","host","targetTouches","changedTouches","getEventHost","missMap","pageX","pageY","DndSource","delegate","options","noPreview","hideCursor","centerPreviewToMousePosition","DndTarget","indexOfElementOrDelegate","array","delegateOrElement","dndSources","dndTargets","previewDrawers","createElement","innerHTML","head","childNodes","insertBefore","injectStyles","addPreviewDrawer","_grab","_release","_startBecauseMouseMoved","_preventGrabbed","_drag","_esc","addEventListener","passive","drawer","unshift","idx","dndTarget","canDrop","_sourceOf","indexOfHandler","_startListeningEventualMovements","_element","_stopListeningEventualMovements","removeEventListener","_startListeningMovements","_stopListeningMovements","_grabbed","preventDefault","_moveX","_moveY","metaKey","ctrlKey","dndSource","_startingSource","focus","_ungrab","shallowTarget","_landingTargets","_locationInfo","_cleanup","dndCanDrag","clientX","clientY","elementFromPoint","grabbed","_start","_sourceElementRect","_sourceElement","_offsetX","_offsetY","_renderPreviewImage","_noPreview","_sourcePreview","_hideCursor","_centerPreviewToMousePosition","_removePreviewImage","isHovering","_a","possibleTargets","filter","clientRect","getElementBehindPreview","_preview","indexOf","_updatePreviewLocation","Math","floor","targetElement","previewElementRect","mouseStartAt","sourceElementRect","customised","backgroundColor","removeChild","ReorderableDndHandlerSelector","configure","config","_aureliaPal","DOM","globalResources","_reorderableRepeat","ReorderableDirection","_reorderableGroupFor","_reorderableDndPreview","_reorderableDndHandlerSelector","_reorderableAfterReordering","_map","WeakMap","repeater","set","delete","base64","ieee754","kMaxLength","Buffer","TYPED_ARRAY_SUPPORT","createBuffer","that","RangeError","Uint8Array","arg","encodingOrOffset","allocUnsafe","from","TypeError","ArrayBuffer","byteOffset","byteLength","fromArrayLike","fromArrayBuffer","string","encoding","isEncoding","actual","write","fromString","isBuffer","checked","copy","buffer","val","data","fromObject","assertSize","size","toString","isView","loweredCase","utf8ToBytes","base64ToBytes","slowToString","start","end","hexSlice","utf8Slice","asciiSlice","latin1Slice","base64Slice","utf16leSlice","swap","b","n","m","bidirectionalIndexOf","dir","isNaN","arrayIndexOf","lastIndexOf","arr","indexSize","arrLength","valLength","String","read","buf","readUInt16BE","foundIndex","found","hexWrite","offset","Number","remaining","strLen","parsed","parseInt","substr","utf8Write","blitBuffer","asciiWrite","str","byteArray","charCodeAt","asciiToBytes","latin1Write","base64Write","ucs2Write","units","c","hi","lo","utf16leToBytes","fromByteArray","min","res","secondByte","thirdByte","fourthByte","tempCodePoint","firstByte","codePoint","bytesPerSequence","codePoints","fromCharCode","apply","decodeCodePointsArray","SlowBuffer","alloc","INSPECT_MAX_BYTES","global","foo","subarray","typedArraySupport","poolSize","_augment","Symbol","species","fill","allocUnsafeSlow","_isBuffer","compare","a","list","pos","swap16","swap32","swap64","arguments","equals","inspect","max","match","join","thisStart","thisEnd","thisCopy","targetCopy","includes","isFinite","toJSON","_arr","ret","out","toHex","bytes","checkOffset","ext","checkInt","objectWriteUInt16","littleEndian","objectWriteUInt32","checkIEEE754","writeFloat","noAssert","writeDouble","newBuf","sliceLen","readUIntLE","mul","readUIntBE","readUInt8","readUInt16LE","readUInt32LE","readUInt32BE","readIntLE","pow","readIntBE","readInt8","readInt16LE","readInt16BE","readInt32LE","readInt32BE","readFloatLE","readFloatBE","readDoubleLE","readDoubleBE","writeUIntLE","writeUIntBE","writeUInt8","writeUInt16LE","writeUInt16BE","writeUInt32LE","writeUInt32BE","writeIntLE","limit","sub","writeIntBE","writeInt8","writeInt16LE","writeInt16BE","writeInt32LE","writeInt32BE","writeFloatLE","writeFloatBE","writeDoubleLE","writeDoubleBE","targetStart","code","INVALID_BASE64_RE","Infinity","leadSurrogate","toByteArray","stringtrim","base64clean","src","dst"],"mappings":"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","file":"vendors~d18703f1.fe140fe7fba6a366549a.chunk.js","sourcesContent":["\"use strict\";\n\nexports.__esModule = true;\nexports.ReorderableAfterReordering = void 0;\n\nvar _aureliaTemplating = require(\"aurelia-templating\");\n\nvar _dec, _class;\n\n//Placeholder attribute to prohibit use of this attribute name in other places\nvar ReorderableAfterReordering = (_dec = (0, _aureliaTemplating.customAttribute)('reorderable-after-reordering'), _dec(_class = function ReorderableAfterReordering() {}) || _class);\nexports.ReorderableAfterReordering = ReorderableAfterReordering;\n//# sourceMappingURL=reorderable-after-reordering.js.map\n","\"use strict\";\n\nexports.__esModule = true;\nexports.ReorderableRepeat = void 0;\n\nvar _aureliaDependencyInjection = require(\"aurelia-dependency-injection\");\n\nvar _aureliaBinding = require(\"aurelia-binding\");\n\nvar _aureliaTemplating = require(\"aurelia-templating\");\n\nvar _aureliaTemplatingResources = require(\"aurelia-templating-resources\");\n\nvar _reorderableRepeatStrategyLocator = require(\"./reorderable-repeat-strategy-locator\");\n\nvar _bcxAureliaDnd = require(\"bcx-aurelia-dnd\");\n\nvar _aureliaEventAggregator = require(\"aurelia-event-aggregator\");\n\nvar _aureliaTaskQueue = require(\"aurelia-task-queue\");\n\nvar _repeaterDndType = _interopRequireDefault(require(\"./repeater-dnd-type\"));\n\nvar _reorderableGroupMap = require(\"./reorderable-group-map\");\n\nvar _dec, _dec2, _class, _class2, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5;\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _initializerDefineProperty(target, property, descriptor, context) { if (!descriptor) return; Object.defineProperty(target, property, { enumerable: descriptor.enumerable, configurable: descriptor.configurable, writable: descriptor.writable, value: descriptor.initializer ? descriptor.initializer.call(context) : void 0 }); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _applyDecoratedDescriptor(target, property, decorators, descriptor, context) { var desc = {}; Object.keys(descriptor).forEach(function (key) { desc[key] = descriptor[key]; }); desc.enumerable = !!desc.enumerable; desc.configurable = !!desc.configurable; if ('value' in desc || desc.initializer) { desc.writable = true; } desc = decorators.slice().reverse().reduce(function (desc, decorator) { return decorator(target, property, desc) || desc; }, desc); if (context && desc.initializer !== void 0) { desc.value = desc.initializer ? desc.initializer.call(context) : void 0; desc.initializer = undefined; } if (desc.initializer === void 0) { Object.defineProperty(target, property, desc); desc = null; } return desc; }\n\nfunction _initializerWarningHelper(descriptor, context) { throw new Error('Decorating class property failed. Please ensure that ' + 'proposal-class-properties is enabled and runs after the decorators transform.'); }\n\nvar seed = 0;\n\nvar classes = function () {\n  var cache = {};\n  var start = '(?:^|\\\\s)';\n  var end = '(?:\\\\s|$)';\n\n  function lookupClass(className) {\n    var cached = cache[className];\n\n    if (cached) {\n      cached.lastIndex = 0;\n    } else {\n      cache[className] = cached = new RegExp(start + className + end, 'g');\n    }\n\n    return cached;\n  }\n\n  function addClass(el, className) {\n    var current = el.className;\n\n    if (!current.length) {\n      el.className = className;\n    } else if (!lookupClass(className).test(current)) {\n      el.className += ' ' + className;\n    }\n  }\n\n  function rmClass(el, className) {\n    el.className = el.className.replace(lookupClass(className), ' ').trim();\n  }\n\n  return {\n    add: addClass,\n    rm: rmClass\n  };\n}();\n/**\n* Binding to iterate over Array to genereate a template for each iteration.\n*/\n\n\nvar ReorderableRepeat = (_dec = (0, _aureliaTemplating.customAttribute)('reorderable-repeat'), _dec2 = (0, _aureliaDependencyInjection.inject)(_aureliaEventAggregator.EventAggregator, _aureliaTaskQueue.TaskQueue, _aureliaBinding.BindingEngine, _bcxAureliaDnd.DndService, _aureliaTemplating.BoundViewFactory, _aureliaTemplating.TargetInstruction, _aureliaTemplating.ViewSlot, _aureliaTemplating.ViewResources, _aureliaBinding.ObserverLocator, _reorderableRepeatStrategyLocator.ReorderableRepeatStrategyLocator, _reorderableGroupMap.ReorderableGroupMap), _dec(_class = (0, _aureliaTemplating.templateController)(_class = _dec2(_class = (_class2 = /*#__PURE__*/function (_AbstractRepeater) {\n  _inheritsLoose(ReorderableRepeat, _AbstractRepeater);\n\n  /**\n  * List of items to bind the repeater to.\n  *\n  * @property items\n  */\n\n  /**\n  * Local variable which gets assigned on each iteration.\n  *\n  * @property local\n  */\n\n  /**\n  * Creates an instance of Repeat.\n  * @param viewFactory The factory generating the view\n  * @param instruction The instructions for how the element should be enhanced.\n  * @param viewResources Collection of resources used to compile the the views.\n  * @param viewSlot The slot the view is injected in to.\n  * @param observerLocator The observer locator instance.\n  * @param collectionStrategyLocator The strategy locator to locate best strategy to iterate the collection.\n  */\n  function ReorderableRepeat(ea, taskQueue, bindingEngine, dndService, viewFactory, instruction, viewSlot, viewResources, observerLocator, strategyLocator, groupMap) {\n    var _this;\n\n    _this = _AbstractRepeater.call(this, {\n      local: 'item',\n      viewsRequireLifecycle: (0, _aureliaTemplatingResources.viewsRequireLifecycle)(viewFactory)\n    }) || this;\n\n    _initializerDefineProperty(_this, \"items\", _descriptor, _assertThisInitialized(_this));\n\n    _initializerDefineProperty(_this, \"local\", _descriptor2, _assertThisInitialized(_this));\n\n    _initializerDefineProperty(_this, \"intention\", _descriptor3, _assertThisInitialized(_this));\n\n    _initializerDefineProperty(_this, \"patchedItems\", _descriptor4, _assertThisInitialized(_this));\n\n    _initializerDefineProperty(_this, \"type\", _descriptor5, _assertThisInitialized(_this));\n\n    _this.repeaterId = seed;\n    _this.type = _this.repeaterId;\n    seed += 1;\n    _this.ea = ea;\n    _this.taskQueue = taskQueue;\n    _this.bindingEngine = bindingEngine;\n    _this.dndService = dndService;\n    _this.viewFactory = viewFactory;\n    _this.instruction = instruction;\n    _this.viewSlot = viewSlot;\n    _this.lookupFunctions = viewResources.lookupFunctions;\n    _this.observerLocator = observerLocator;\n    _this.strategyLocator = strategyLocator;\n    _this.groupMap = groupMap;\n    _this.ignoreMutation = false;\n    _this.sourceExpression = (0, _aureliaTemplatingResources.getItemsSourceExpression)(_this.instruction, 'reorderable-repeat.for');\n\n    if (_this.sourceExpression instanceof _aureliaBinding.BindingBehavior) {\n      throw new Error('BindingBehavior is not supported in reorderable-repeat');\n    }\n\n    if (_this.sourceExpression instanceof _aureliaBinding.ValueConverter) {\n      throw new Error('ValueConverter is not supported in reorderable-repeat');\n    }\n\n    if ((0, _aureliaTemplatingResources.isOneTime)(_this.sourceExpression)) {\n      throw new Error('oneTime binding is not supported in reorderable-repeat');\n    }\n\n    _this.viewsRequireLifecycle = (0, _aureliaTemplatingResources.viewsRequireLifecycle)(viewFactory);\n    _this.group = _this._reorderableGroup();\n    return _this;\n  }\n\n  var _proto = ReorderableRepeat.prototype;\n\n  _proto.call = function call(context, changes) {\n    this[context](this.items, changes);\n  }\n  /**\n  * Binds the repeat to the binding context and override context.\n  * @param bindingContext The binding context.\n  * @param overrideContext An override context for binding.\n  */\n  ;\n\n  _proto.bind = function bind(bindingContext, overrideContext) {\n    var _this2 = this;\n\n    this.scope = {\n      bindingContext: bindingContext,\n      overrideContext: overrideContext\n    };\n    this.matcherBinding = this._captureAndRemoveMatcherBinding();\n    this.arrayObserver = this.bindingEngine.collectionObserver(this.items).subscribe(this._itemsMutated.bind(this));\n    this._subsribers = [this.ea.subscribe('dnd:willStart', function () {\n      _this2.intention = null;\n\n      _this2.views().forEach(function (v) {\n        classes.rm(v.firstChild, 'reorderable-repeat-reordering');\n        classes.rm(v.firstChild, 'reorderable-repeat-dragging-me');\n      });\n    }), this.ea.subscribe('dnd:didCancel', function () {\n      _this2.intention = null;\n\n      _this2.views().forEach(function (v) {\n        classes.rm(v.firstChild, 'reorderable-repeat-reordering');\n        classes.rm(v.firstChild, 'reorderable-repeat-dragging-me');\n      });\n    }), this.ea.subscribe('dnd:didEnd', function () {\n      _this2.views().forEach(function (v) {\n        classes.rm(v.firstChild, 'reorderable-repeat-reordering');\n        classes.rm(v.firstChild, 'reorderable-repeat-dragging-me');\n      });\n\n      if (!_this2.intention) return;\n      var _this2$intention = _this2.intention,\n          item = _this2$intention.item,\n          fromIndex = _this2$intention.fromIndex,\n          fromRepeaterId = _this2$intention.fromRepeaterId,\n          toIndex = _this2$intention.toIndex,\n          toRepeaterId = _this2$intention.toRepeaterId;\n      _this2.intention = null;\n      var repeaterId = (0, _repeaterDndType.default)(_this2.repeaterId);\n      if (repeaterId !== fromRepeaterId && repeaterId !== toRepeaterId) return; // no change\n\n      if (fromRepeaterId === toRepeaterId && fromIndex === toIndex) return;\n      var change = {\n        item: item,\n        fromIndex: fromIndex,\n        toIndex: toIndex\n      };\n\n      if (repeaterId === fromRepeaterId) {\n        _this2.items.splice(fromIndex, 1);\n\n        change.removedFromThisList = true;\n      }\n\n      if (repeaterId === toRepeaterId) {\n        _this2.items.splice(toIndex, 0, item);\n\n        change.insertedToThisList = true;\n      }\n\n      var afterReordering = _this2._reorderableAfterReorderingFunc();\n\n      if (afterReordering) {\n        // in group mode, wait for all models updated\n        // before hitting callback\n        _this2.taskQueue.queueMicroTask(function () {\n          afterReordering(_this2.items, change);\n        });\n      }\n    }), this.ea.subscribe('reorderable-group:intention-changed', function (intention) {\n      if (intention.type !== (0, _repeaterDndType.default)(_this2.type)) return; // avoid double trigger of intentionChanged;\n\n      if (_this2.intention && intention.type === _this2.intention.type && intention.fromIndex === _this2.intention.fromIndex && intention.fromRepeaterId === _this2.intention.fromRepeaterId && intention.toIndex === _this2.intention.toIndex && intention.toRepeaterId === _this2.intention.toRepeaterId) return; // sync intention from other repeater\n\n      _this2.intention = intention;\n    })];\n\n    if (typeof this.group === 'string') {\n      this.type = this.group;\n    } else if (this.group) {\n      // group is a binding expression or interpolation binding expression.\n      this.group.targetProperty = 'type', this._typeBinding = this.group.createBinding(this);\n\n      this._typeBinding.bind(this.scope);\n    }\n\n    this.patchedItems = [].concat(this.items);\n    this.patchedItemsChanged();\n  }\n  /**\n  * Unbinds the repeat\n  */\n  ;\n\n  _proto.unbind = function unbind() {\n    this.groupMap.remove(this);\n\n    if (this._typeBinding) {\n      this._typeBinding.unbind();\n\n      delete this._typeBinding;\n    }\n\n    if (this.arrayObserver) {\n      this.arrayObserver.dispose();\n      this.arrayObserver = null;\n    }\n\n    this._subsribers.forEach(function (s) {\n      return s.dispose();\n    });\n\n    this._subsribers = [];\n    this.removeAllViews(true, true);\n    this.scope = null;\n    this.items = null;\n    this.matcherBinding = null;\n  };\n\n  _proto.intentionChanged = function intentionChanged(newIntention) {\n    if (newIntention) {\n      var repeaterId = (0, _repeaterDndType.default)(this.repeaterId);\n      var item = newIntention.item,\n          fromIndex = newIntention.fromIndex,\n          fromRepeaterId = newIntention.fromRepeaterId,\n          toIndex = newIntention.toIndex,\n          toRepeaterId = newIntention.toRepeaterId;\n      var patched = [].concat(this.items);\n\n      if (repeaterId === fromRepeaterId) {\n        patched.splice(fromIndex, 1);\n      }\n\n      if (repeaterId === toRepeaterId) {\n        patched.splice(toIndex, 0, item);\n      }\n\n      this.patchedItems = patched;\n    } else {\n      this.patchedItems = [].concat(this.items);\n    }\n  } // every time the items property changes.\n  ;\n\n  _proto.itemsChanged = function itemsChanged() {\n    // still bound?\n    if (!this.scope) {\n      return;\n    }\n\n    if (this.arrayObserver) {\n      this.arrayObserver.dispose();\n      this.arrayObserver = null;\n    }\n\n    this.arrayObserver = this.bindingEngine.collectionObserver(this.items).subscribe(this._itemsMutated.bind(this));\n\n    if (this.intention === null) {\n      this.patchedItems = [].concat(this.items);\n    } else {\n      this.intention = null;\n    }\n  } // every time the items array add/delete.\n  ;\n\n  _proto._itemsMutated = function _itemsMutated() {\n    if (this.intention === null) {\n      this.patchedItems = [].concat(this.items);\n    } else {\n      this.intention = null;\n    }\n  };\n\n  _proto.patchedItemsChanged = function patchedItemsChanged() {\n    this._reload();\n  };\n\n  _proto.typeChanged = function typeChanged() {\n    this._reload();\n  };\n\n  _proto._reload = function _reload() {\n    var _this3 = this;\n\n    // still bound?\n    if (!this.scope) {\n      return;\n    }\n\n    if (!this.patchedItems) {\n      return;\n    }\n\n    this.strategy = this.strategyLocator.getStrategy(this.patchedItems);\n\n    if (!this.strategy) {\n      throw new Error(\"Value for '\" + this.sourceExpression + \"' is non-repeatable\");\n    }\n\n    this.strategy.instanceChanged(this, this.patchedItems);\n    this.taskQueue.queueMicroTask(function () {\n      // avoid this async task after unbind\n      if (!_this3.scope) {\n        return;\n      }\n\n      _this3.groupMap.remove(_this3);\n\n      _this3.views().forEach(function (view) {\n        _this3._unRegisterDnd(view);\n\n        _this3._registerDnd(view);\n      });\n\n      _this3.groupMap.add(_this3);\n    });\n  };\n\n  _proto._captureAndRemoveMatcherBinding = function _captureAndRemoveMatcherBinding() {\n    if (this.viewFactory.viewFactory) {\n      var instructions = this.viewFactory.viewFactory.instructions;\n      var instructionIds = Object.keys(instructions);\n\n      for (var i = 0; i < instructionIds.length; i++) {\n        var expressions = instructions[instructionIds[i]].expressions;\n\n        if (expressions) {\n          for (var ii = 0; i < expressions.length; i++) {\n            if (expressions[ii].targetProperty === 'matcher') {\n              var matcherBinding = expressions[ii];\n              expressions.splice(ii, 1);\n              return matcherBinding;\n            }\n          }\n        }\n      }\n    }\n\n    return undefined;\n  } // @override AbstractRepeater\n  ;\n\n  _proto.viewCount = function viewCount() {\n    return this.viewSlot.children.length;\n  };\n\n  _proto.views = function views() {\n    return this.viewSlot.children;\n  };\n\n  _proto.view = function view(index) {\n    return this.viewSlot.children[index];\n  };\n\n  _proto.matcher = function matcher() {\n    return this.matcherBinding ? this.matcherBinding.sourceExpression.evaluate(this.scope, this.matcherBinding.lookupFunctions) : null;\n  };\n\n  _proto.addView = function addView(bindingContext, overrideContext) {\n    var view = this.viewFactory.create();\n    view.bind(bindingContext, overrideContext);\n    this.viewSlot.add(view);\n  };\n\n  _proto.insertView = function insertView(index, bindingContext, overrideContext) {\n    var view = this.viewFactory.create();\n    view.bind(bindingContext, overrideContext);\n    this.viewSlot.insert(index, view);\n  };\n\n  _proto.moveView = function moveView(sourceIndex, targetIndex) {\n    this.viewSlot.move(sourceIndex, targetIndex);\n  };\n\n  _proto.removeAllViews = function removeAllViews(returnToCache, skipAnimation) {\n    var _this4 = this;\n\n    this.views().forEach(function (view) {\n      return _this4._unRegisterDnd(view);\n    });\n    return this.viewSlot.removeAll(returnToCache, skipAnimation);\n  };\n\n  _proto.removeViews = function removeViews(viewsToRemove, returnToCache, skipAnimation) {\n    var _this5 = this;\n\n    viewsToRemove.forEach(function (view) {\n      return _this5._unRegisterDnd(view);\n    });\n    return this.viewSlot.removeMany(viewsToRemove, returnToCache, skipAnimation);\n  };\n\n  _proto.removeView = function removeView(index, returnToCache, skipAnimation) {\n    this._unRegisterDnd(this.view(index));\n\n    return this.viewSlot.removeAt(index, returnToCache, skipAnimation);\n  };\n\n  _proto.updateBindings = function updateBindings(view) {\n    var j = view.bindings.length;\n\n    while (j--) {\n      (0, _aureliaTemplatingResources.updateOneTimeBinding)(view.bindings[j]);\n    }\n\n    j = view.controllers.length;\n\n    while (j--) {\n      var k = view.controllers[j].boundProperties.length;\n\n      while (k--) {\n        var binding = view.controllers[j].boundProperties[k].binding;\n        (0, _aureliaTemplatingResources.updateOneTimeBinding)(binding);\n      }\n    }\n  };\n\n  _proto._additionalAttribute = function _additionalAttribute(view, attribute) {\n    if (view && view.firstChild && view.firstChild.au && view.firstChild.au[attribute]) {\n      return view.firstChild.au[attribute].instruction.attributes[attribute];\n    } // Fall back to plain string attribute\n\n\n    return this._getPlainAttribute(attribute);\n  };\n\n  _proto._getPlainAttribute = function _getPlainAttribute(name) {\n    // only get the string value before view rendering\n    if (this.viewFactory && this.viewFactory.viewFactory) {\n      var node = this.viewFactory.viewFactory.template.firstChild;\n\n      if (node && node.hasAttribute(name)) {\n        return node.getAttribute(name);\n      }\n    }\n  };\n\n  _proto._reorderableGroup = function _reorderableGroup() {\n    if (this.viewFactory && this.viewFactory.viewFactory) {\n      var node = this.viewFactory.viewFactory.template.firstChild;\n      var targetId = node.getAttribute('au-target-id');\n      var instruction = this.viewFactory.viewFactory.instructions[targetId];\n\n      if (instruction) {\n        var bi = instruction.behaviorInstructions.find(function (bi) {\n          return bi.attrName === 'reorderable-group';\n        });\n\n        if (bi) {\n          var exp = bi.attributes && bi.attributes['reorderable-group'];\n\n          if (exp && typeof exp.createBinding === 'function') {\n            // binding expression or interpolation binding expression.\n            return exp;\n          }\n        }\n      }\n    }\n\n    return this._getPlainAttribute('reorderable-group');\n  };\n\n  _proto._reorderableDirection = function _reorderableDirection(view) {\n    var attr = this._additionalAttribute(view, 'reorderable-direction');\n\n    if (attr && attr.sourceExpression) {\n      attr = attr.sourceExpression.evaluate(this.scope);\n    }\n\n    if (typeof attr === 'string') {\n      return attr.toLowerCase() || 'down';\n    }\n\n    return 'down';\n  };\n\n  _proto._dndHandlerSelector = function _dndHandlerSelector(view) {\n    var attr = this._additionalAttribute(view, 'reorderable-dnd-handler-selector');\n\n    if (attr && attr.sourceExpression) {\n      attr = attr.sourceExpression.evaluate(this.scope);\n    }\n\n    if (typeof attr === 'string') {\n      return attr;\n    }\n  };\n\n  _proto._dndPreviewFunc = function _dndPreviewFunc(view) {\n    var func = this._additionalAttribute(view, 'reorderable-dnd-preview');\n\n    if (!func) {\n      return null;\n    } else if (typeof func === 'string') {\n      var context = (0, _aureliaBinding.getContextFor)(func, this.scope);\n      var funcCall = context[func];\n\n      if (typeof funcCall === 'function') {\n        return funcCall.bind(context);\n      }\n\n      throw new Error(\"'reorderable-dnd-preview' must be a function or evaluate to a function\");\n    } else if (func.sourceExpression) {\n      // TODO test preview\n      return function (_, scope) {\n        return func.sourceExpression.evaluate(scope);\n      };\n    } else {\n      throw new Error(\"'reorderable-dnd-preview' must be a function or evaluate to a function\");\n    }\n  };\n\n  _proto._reorderableAfterReorderingFunc = function _reorderableAfterReorderingFunc() {\n    var _this6 = this;\n\n    var func = this._additionalAttribute(this.view(0), 'reorderable-after-reordering');\n\n    if (!func) {\n      return null;\n    } else if (typeof func === 'string') {\n      var context = (0, _aureliaBinding.getContextFor)(func, this.scope);\n      var funcCall = context[func];\n\n      if (typeof funcCall === 'function') {\n        return funcCall.bind(context);\n      }\n\n      throw new Error(\"'reorderable-after-reordering' must be a function or evaluate to a function\");\n    } else if (func.sourceExpression) {\n      return function () {\n        return func.sourceExpression.evaluate(_this6.scope);\n      };\n    } else {\n      throw new Error(\"'reorderable-after-reordering' must be a function or evaluate to a function\");\n    }\n  };\n\n  _proto._dndHover = function _dndHover(location, index, direction) {\n    var repeaterId = (0, _repeaterDndType.default)(this.repeaterId); // bypass hovering on itself\n\n    if (this.intention && this.intention.toRepeaterId === repeaterId && this.intention.toIndex === index) {\n      return;\n    }\n\n    var model = this.dndService.model;\n    var mouseEndAt = location.mouseEndAt,\n        targetElementRect = location.targetElementRect;\n    var x = mouseEndAt.x - targetElementRect.x;\n    var y = mouseEndAt.y - targetElementRect.y;\n    var inLeastHalf;\n\n    if (direction === 'left') {\n      inLeastHalf = x > targetElementRect.width / 2;\n    } else if (direction === 'right') {\n      inLeastHalf = x < targetElementRect.width / 2;\n    } else if (direction === 'up') {\n      inLeastHalf = y > targetElementRect.height / 2;\n    } else\n      /* if (direction === 'down') */\n      {\n        inLeastHalf = y < targetElementRect.height / 2;\n      } // because of unknown size diff between items,\n    // check half size to avoid endless bouncing of swapping two items.\n\n\n    if (inLeastHalf || // or starting on itself\n    !this.intention && model.repeaterId === repeaterId && index === model.index) {\n      // hover over top half, user wants to move smth before this item.\n      this._updateIntention(index, true);\n    } else {\n      // hover over bottom half, user wants to move smth after this item.\n      this._updateIntention(index, false);\n    }\n  };\n\n  _proto._registerDnd = function _registerDnd(view) {\n    var _this7 = this;\n\n    var local = this.local;\n    var el = view.firstChild;\n    var item = view.bindingContext[local];\n    var index = view.overrideContext.$index;\n\n    var handlerSelector = this._dndHandlerSelector(view);\n\n    var handler;\n\n    if (handlerSelector) {\n      handler = el.querySelector(handlerSelector);\n    }\n\n    var repeaterId = (0, _repeaterDndType.default)(this.repeaterId);\n\n    var direction = this._reorderableDirection(view);\n\n    var _previewFunc = this._dndPreviewFunc(view);\n\n    this.dndService.addSource({\n      dndModel: function dndModel() {\n        return {\n          type: (0, _repeaterDndType.default)(_this7.type),\n          index: index,\n          item: item,\n          repeaterId: repeaterId\n        };\n      },\n      dndPreview: _previewFunc && function () {\n        return _previewFunc(item, view);\n      },\n      dndElement: el\n    }, handler && {\n      handler: handler\n    });\n    this.dndService.addTarget({\n      dndElement: el,\n      dndCanDrop: function dndCanDrop(model) {\n        if (model.type !== (0, _repeaterDndType.default)(_this7.type)) return false;\n        var intention = _this7.intention;\n        var inSameGroup = model.repeaterId === repeaterId;\n\n        _this7.taskQueue.queueMicroTask(function () {\n          classes.add(el, 'reorderable-repeat-reordering');\n        });\n\n        var draggingMe;\n\n        if (intention) {\n          draggingMe = intention.toRepeaterId === repeaterId && intention.toIndex === index;\n        } else if (inSameGroup) {\n          draggingMe = model.index === index;\n        }\n\n        if (draggingMe) {\n          // I am under dragging\n          _this7.taskQueue.queueMicroTask(function () {\n            classes.add(el, 'reorderable-repeat-dragging-me');\n          });\n        }\n\n        return true;\n      },\n      dndHover: function dndHover(location) {\n        _this7._dndHover(location, index, direction);\n      },\n      dndDrop: function dndDrop() {\n        /* no-op */\n      }\n    });\n  };\n\n  _proto._unRegisterDnd = function _unRegisterDnd(view) {\n    classes.rm(view.firstChild, 'reorderable-repeat-reordering');\n    classes.rm(view.firstChild, 'reorderable-repeat-dragging-me');\n    this.dndService.removeSource(view.firstChild);\n    this.dndService.removeTarget(view.firstChild);\n  };\n\n  _proto._updateIntention = function _updateIntention(targetIndex, beforeTarget) {\n    var _this$dndService = this.dndService,\n        isProcessing = _this$dndService.isProcessing,\n        model = _this$dndService.model;\n    if (!isProcessing) return;\n    if (model.type !== (0, _repeaterDndType.default)(this.type)) return;\n    var repeaterId = (0, _repeaterDndType.default)(this.repeaterId);\n    var isUsingGroup = model.type !== model.repeaterId;\n    var inSameGroup = model.repeaterId === repeaterId;\n    if (targetIndex < 0) return;\n    var originalIndex;\n    var currentIndex;\n    var nextIndex;\n\n    if (inSameGroup) {\n      if (this.intention) {\n        originalIndex = this.intention.fromIndex;\n        currentIndex = this.intention.toIndex;\n      } else {\n        originalIndex = model.index;\n        if (originalIndex < 0) return;\n        currentIndex = originalIndex;\n      }\n    } else {\n      if (this.intention && this.intention.toRepeaterId === repeaterId) {\n        originalIndex = this.intention.fromIndex;\n        currentIndex = this.intention.toIndex;\n      } else {\n        originalIndex = model.index;\n        if (originalIndex < 0) return;\n        currentIndex = targetIndex;\n      }\n    }\n\n    if (currentIndex < targetIndex) {\n      // grabbed item is currently above target\n      if (beforeTarget) {\n        nextIndex = targetIndex - 1;\n      } else {\n        nextIndex = targetIndex;\n      }\n    } else\n      /* if (currentIndex > targetIndex) or across repeaters */\n      {\n        // grabbed item is currently below target\n        if (beforeTarget) {\n          nextIndex = targetIndex;\n        } else {\n          nextIndex = targetIndex + 1;\n        }\n      }\n\n    if (!this.intention || this.intention.fromIndex !== originalIndex || this.intention.fromRepeaterId !== model.repeaterId || this.intention.toIndex !== nextIndex || this.intention.toRepeaterId !== repeaterId) {\n      this.intention = {\n        type: model.type,\n        item: model.item,\n        fromIndex: originalIndex,\n        fromRepeaterId: model.repeaterId,\n        toIndex: nextIndex,\n        toRepeaterId: repeaterId\n      };\n\n      if (isUsingGroup) {\n        // let other repeaters know\n        this.ea.publish('reorderable-group:intention-changed', this.intention);\n      }\n    }\n  };\n\n  return ReorderableRepeat;\n}(_aureliaTemplatingResources.AbstractRepeater), (_descriptor = _applyDecoratedDescriptor(_class2.prototype, \"items\", [_aureliaTemplating.bindable], {\n  configurable: true,\n  enumerable: true,\n  writable: true,\n  initializer: null\n}), _descriptor2 = _applyDecoratedDescriptor(_class2.prototype, \"local\", [_aureliaTemplating.bindable], {\n  configurable: true,\n  enumerable: true,\n  writable: true,\n  initializer: null\n}), _descriptor3 = _applyDecoratedDescriptor(_class2.prototype, \"intention\", [_aureliaBinding.observable], {\n  configurable: true,\n  enumerable: true,\n  writable: true,\n  initializer: function initializer() {\n    return null;\n  }\n}), _descriptor4 = _applyDecoratedDescriptor(_class2.prototype, \"patchedItems\", [_aureliaBinding.observable], {\n  configurable: true,\n  enumerable: true,\n  writable: true,\n  initializer: null\n}), _descriptor5 = _applyDecoratedDescriptor(_class2.prototype, \"type\", [_aureliaBinding.observable], {\n  configurable: true,\n  enumerable: true,\n  writable: true,\n  initializer: function initializer() {\n    return null;\n  }\n})), _class2)) || _class) || _class) || _class);\nexports.ReorderableRepeat = ReorderableRepeat;\n//# sourceMappingURL=reorderable-repeat.js.map\n","\"use strict\";\n\nexports.__esModule = true;\nexports.SimpleArrayRepeatStrategy = void 0;\n\nvar _aureliaTemplatingResources = require(\"aurelia-templating-resources\");\n\n// dumbest array repeat strategy\nvar SimpleArrayRepeatStrategy = /*#__PURE__*/function () {\n  function SimpleArrayRepeatStrategy() {}\n\n  var _proto = SimpleArrayRepeatStrategy.prototype;\n\n  _proto.getCollectionObserver = function getCollectionObserver(observerLocator, items) {\n    return observerLocator.getArrayObserver(items);\n  };\n\n  _proto.instanceChanged = function instanceChanged(repeat, items) {\n    repeat.removeAllViews(true, !repeat.viewsRequireLifecycle);\n    var itemsLength = items.length;\n\n    if (items && itemsLength > 0) {\n      this._standardProcessInstanceChanged(repeat, items);\n    }\n  };\n\n  _proto._standardProcessInstanceChanged = function _standardProcessInstanceChanged(repeat, items) {\n    for (var i = 0, ii = items.length; i < ii; i++) {\n      var overrideContext = (0, _aureliaTemplatingResources.createFullOverrideContext)(repeat, items[i], i, ii);\n      repeat.addView(overrideContext.bindingContext, overrideContext);\n    }\n  };\n\n  return SimpleArrayRepeatStrategy;\n}();\n\nexports.SimpleArrayRepeatStrategy = SimpleArrayRepeatStrategy;\n//# sourceMappingURL=simple-array-repeat-strategy.js.map\n","\"use strict\";\n\nexports.__esModule = true;\nexports.ReorderableDndPreview = void 0;\n\nvar _aureliaTemplating = require(\"aurelia-templating\");\n\nvar _dec, _class;\n\n//Placeholder attribute to prohibit use of this attribute name in other places\nvar ReorderableDndPreview = (_dec = (0, _aureliaTemplating.customAttribute)('reorderable-dnd-preview'), _dec(_class = function ReorderableDndPreview() {}) || _class);\nexports.ReorderableDndPreview = ReorderableDndPreview;\n//# sourceMappingURL=reorderable-dnd-preview.js.map\n","\"use strict\";\n\nexports.__esModule = true;\nexports.default = _default;\nvar prefix = 'bcx-aurelia-reorderable-repeat:';\n\nfunction _default(ref) {\n  return prefix + ref;\n}\n//# sourceMappingURL=repeater-dnd-type.js.map\n","\"use strict\";\n\nexports.__esModule = true;\nexports.ReorderableGroupFor = void 0;\n\nvar _aureliaDependencyInjection = require(\"aurelia-dependency-injection\");\n\nvar _aureliaTemplating = require(\"aurelia-templating\");\n\nvar _bcxAureliaDnd = require(\"bcx-aurelia-dnd\");\n\nvar _aureliaEventAggregator = require(\"aurelia-event-aggregator\");\n\nvar _reorderableGroupMap = require(\"./reorderable-group-map\");\n\nvar _repeaterDndType = _interopRequireDefault(require(\"./repeater-dnd-type\"));\n\nvar _dec, _dec2, _class;\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar example = 'reorderable-group-for.bind=\"arrayModel\"';\nvar ReorderableGroupFor = (_dec = (0, _aureliaTemplating.customAttribute)('reorderable-group-for'), _dec2 = (0, _aureliaDependencyInjection.inject)(Element, _aureliaEventAggregator.EventAggregator, _bcxAureliaDnd.DndService, _reorderableGroupMap.ReorderableGroupMap), _dec(_class = _dec2(_class = /*#__PURE__*/function () {\n  function ReorderableGroupFor(element, ea, dndService, groupMap) {\n    this.intention = null;\n    this.element = element;\n    this.ea = ea;\n    this.dndService = dndService;\n    this.groupMap = groupMap;\n    this.resetIntention = this.resetIntention.bind(this);\n  }\n\n  var _proto = ReorderableGroupFor.prototype;\n\n  _proto.bind = function bind() {\n    var _this = this;\n\n    var value = this.value;\n\n    if (!Array.isArray(value)) {\n      throw new Error('reorderable-group-for needs items to be an array. e.g. ' + example);\n    }\n\n    this._subsribers = [this.ea.subscribe('dnd:willStart', function () {\n      var repeaterInfo = _this.groupMap.get(value);\n\n      if (repeaterInfo) {\n        _this.group = (0, _repeaterDndType.default)(repeaterInfo.group());\n        _this.repeaterId = (0, _repeaterDndType.default)(repeaterInfo.repeaterId);\n      } else {\n        _this.group = null;\n        _this.repeaterId = null;\n      }\n\n      _this.resetIntention();\n    }), this.ea.subscribe('dnd:didEnd', this.resetIntention), this.ea.subscribe('reorderable-group:intention-changed', function (intention) {\n      if (intention.type !== _this.group) return; // sync intention from other repeater\n\n      _this.intention = intention;\n    })];\n  };\n\n  _proto.unbind = function unbind() {\n    this._subsribers.forEach(function (s) {\n      return s.dispose();\n    });\n\n    this._subsribers = [];\n  };\n\n  _proto.resetIntention = function resetIntention() {\n    this.intention = null;\n  };\n\n  _proto.attached = function attached() {\n    this.dndService.addTarget(this, {\n      element: this.element\n    });\n  };\n\n  _proto.detached = function detached() {\n    this.dndService.removeTarget(this);\n  };\n\n  _proto.dndCanDrop = function dndCanDrop(model) {\n    return model.type === this.group;\n  };\n\n  _proto.dndHover = function dndHover() {\n    if (!this.repeaterId) return;\n    var _this$dnd = this.dnd,\n        isHoveringShallowly = _this$dnd.isHoveringShallowly,\n        model = _this$dnd.model;\n    if (!isHoveringShallowly) return;\n    var type = model.type,\n        index = model.index,\n        item = model.item,\n        repeaterId = model.repeaterId;\n    var length = this.value ? this.value.length : 0;\n    var inSameGroup = model.repeaterId === this.repeaterId;\n    var defaultTargetIndex = inSameGroup ? length - 1 : length;\n\n    if (!this.intention || this.intention.toRepeaterId !== this.repeaterId) {\n      this.ea.publish('reorderable-group:intention-changed', {\n        type: type,\n        item: item,\n        fromIndex: index,\n        fromRepeaterId: repeaterId,\n        toIndex: defaultTargetIndex,\n        // move to last position\n        toRepeaterId: this.repeaterId\n      });\n    }\n  };\n\n  _proto.dndDrop = function dndDrop() {\n    /* no-op */\n  };\n\n  return ReorderableGroupFor;\n}()) || _class) || _class);\nexports.ReorderableGroupFor = ReorderableGroupFor;\n//# sourceMappingURL=reorderable-group-for.js.map\n","\"use strict\";\n\nexports.__esModule = true;\nexports.ReorderableRepeatStrategyLocator = void 0;\n\nvar _simpleArrayRepeatStrategy = require(\"./simple-array-repeat-strategy\");\n\nvar _aureliaTemplatingResources = require(\"aurelia-templating-resources\");\n\nvar ReorderableRepeatStrategyLocator = /*#__PURE__*/function () {\n  function ReorderableRepeatStrategyLocator() {\n    this.matchers = [];\n    this.strategies = [];\n    this.addStrategy(function (items) {\n      if (items instanceof Array) {\n        // Simple strategy is only for array of primitive value\n        return items.length === 0 || typeof items[0] !== 'object';\n      }\n    }, new _simpleArrayRepeatStrategy.SimpleArrayRepeatStrategy());\n    this.addStrategy(function (items) {\n      if (items instanceof Array) {\n        // Normal strategy is only for array of non-primitive value\n        return items.length && typeof items[0] === 'object';\n      }\n    }, new _aureliaTemplatingResources.ArrayRepeatStrategy());\n  }\n\n  var _proto = ReorderableRepeatStrategyLocator.prototype;\n\n  _proto.addStrategy = function addStrategy(matcher, strategy) {\n    this.matchers.push(matcher);\n    this.strategies.push(strategy);\n  };\n\n  _proto.getStrategy = function getStrategy(items) {\n    var matchers = this.matchers;\n\n    for (var i = 0, ii = matchers.length; i < ii; ++i) {\n      if (matchers[i](items)) {\n        return this.strategies[i];\n      }\n    }\n\n    return null;\n  };\n\n  return ReorderableRepeatStrategyLocator;\n}();\n\nexports.ReorderableRepeatStrategyLocator = ReorderableRepeatStrategyLocator;\n//# sourceMappingURL=reorderable-repeat-strategy-locator.js.map\n","\"use strict\";\n\nexports.__esModule = true;\nexports.ReorderableGroup = void 0;\n\nvar _aureliaTemplating = require(\"aurelia-templating\");\n\nvar _dec, _class;\n\n//Placeholder attribute to prohibit use of this attribute name in other places\nvar ReorderableGroup = (_dec = (0, _aureliaTemplating.customAttribute)('reorderable-group'), _dec(_class = function ReorderableGroup() {}) || _class);\nexports.ReorderableGroup = ReorderableGroup;\n//# sourceMappingURL=reorderable-group.js.map\n","\"use strict\";\nexports.__esModule = true;\nexports.defaultPreview = exports.unknownTagPreview = exports.liPreview = exports.trPreview = void 0;\nfunction trPreview(el) {\n    if (el.tagName !== 'TR')\n        return;\n    if (!el.parentNode)\n        return;\n    if (!el.parentNode.parentNode || el.parentNode.parentNode.tagName !== 'TABLE')\n        return;\n    var newTr = el.cloneNode(true);\n    var tdCount = el.childElementCount;\n    for (var i = 0; i < tdCount - 1; i++) {\n        var computed = getComputedStyle(el.children[i]);\n        newTr.children[i].style.width = computed.width;\n        newTr.children[i].style.height = computed.height;\n    }\n    var section = el.parentNode;\n    var newSection = section.cloneNode();\n    newSection.appendChild(newTr);\n    var table = section.parentNode;\n    var newTable = table.cloneNode();\n    newTable.appendChild(newSection);\n    var tableComputed = getComputedStyle(table);\n    newTable.style.width = tableComputed.width;\n    return newTable;\n}\nexports.trPreview = trPreview;\nfunction liPreview(el) {\n    if (el.tagName !== 'LI')\n        return;\n    if (!el.parentNode)\n        return;\n    var tagName = el.parentNode.tagName;\n    if (tagName !== 'UL' && tagName !== 'OL')\n        return;\n    var newLi = el.cloneNode(true);\n    var computed = getComputedStyle(el);\n    newLi.style.width = computed.width;\n    newLi.style.height = computed.height;\n    newLi.style.flex = '0 0 auto';\n    var newUlOrOl = el.parentNode.cloneNode();\n    newUlOrOl.appendChild(newLi);\n    newUlOrOl.style.width = 'auto';\n    newUlOrOl.style.height = 'auto';\n    newUlOrOl.style.listStyleType = 'none';\n    return newUlOrOl;\n}\nexports.liPreview = liPreview;\nfunction unknownTagPreview(el) {\n    var computed = getComputedStyle(el);\n    var isUnknownTag = computed.display === 'inline' &&\n        computed.width === 'auto' &&\n        computed.height === 'auto' &&\n        el.style.width === '' &&\n        el.style.height === '';\n    if (!isUnknownTag)\n        return;\n    var preview = el.cloneNode(true);\n    var len = el.childElementCount;\n    for (var i = 0; i < len; i++) {\n        var computed_1 = getComputedStyle(el.children[i]);\n        preview.children[i].style.width = computed_1.width;\n        preview.children[i].style.height = computed_1.height;\n    }\n    return preview;\n}\nexports.unknownTagPreview = unknownTagPreview;\nfunction defaultPreview(el) {\n    var preview = el.cloneNode(true);\n    var computed = getComputedStyle(el);\n    preview.style.width = computed.width;\n    preview.style.height = computed.height;\n    return preview;\n}\nexports.defaultPreview = defaultPreview;\n","\"use strict\";\nexports.__esModule = true;\nexports.DndService = void 0;\nvar aurelia_event_aggregator_1 = require(\"aurelia-event-aggregator\");\nvar preview_drawers_1 = require(\"./preview-drawers\");\nvar doc = document;\nvar documentElement = doc && doc.documentElement;\nvar css = \"\\n/* bcx-aurelia-dnd styles */\\n\\n/*\\nbcx-aurelia-dnd relies on html/body margin 0.\\nYour css stack should have done this.\\nAdded here as safe guard.\\n*/\\nhtml, body {\\n  margin: 0;\\n}\\n\\n.bcx-dnd-preview {\\n  position: absolute !important;\\n  margin: 0 !important;\\n  z-index: 9999 !important;\\n  opacity: 0.8;\\n  box-shadow: 0 0 16px gray;\\n}\\n\\n.bcx-dnd-preview .bcx-dnd-preview-hide {\\n  visibility: hidden !important;\\n}\\n\\n.bcx-dnd-hide {\\n  display: none !important;\\n}\\n\\n.bcx-dnd-hide-cursor .bcx-dnd-preview {\\n  cursor: none !important;\\n}\\n\\n.bcx-dnd-unselectable {\\n  -webkit-user-select: none !important;\\n  -moz-user-select: none !important;\\n  -ms-user-select: none !important;\\n  user-select: none !important;\\n}\\n\";\nvar _stylesInjected = false;\nfunction injectStyles() {\n    if (_stylesInjected)\n        return;\n    _stylesInjected = true;\n    var node = doc.createElement('style');\n    node.innerHTML = css;\n    node.type = 'text/css';\n    if (doc.head.childNodes.length > 0) {\n        doc.head.insertBefore(node, doc.head.childNodes[0]);\n    }\n    else {\n        doc.head.appendChild(node);\n    }\n}\nvar classes = (function () {\n    var cache = {};\n    var start = '(?:^|\\\\s)';\n    var end = '(?:\\\\s|$)';\n    function lookupClass(className) {\n        var cached = cache[className];\n        if (cached) {\n            cached.lastIndex = 0;\n        }\n        else {\n            cache[className] = cached = new RegExp(start + className + end, 'g');\n        }\n        return cached;\n    }\n    function addClass(el, className) {\n        var current = el.className;\n        if (!current.length) {\n            el.className = className;\n        }\n        else if (!lookupClass(className).test(current)) {\n            el.className += ' ' + className;\n        }\n    }\n    function rmClass(el, className) {\n        el.className = el.className.replace(lookupClass(className), ' ').trim();\n    }\n    return { add: addClass, rm: rmClass };\n}());\nfunction whichMouseButton(e) {\n    var te = e;\n    if (te.touches !== undefined) {\n        return te.touches.length;\n    }\n    if (e.which !== undefined && e.which !== 0) {\n        return e.which;\n    }\n    var me = e;\n    if (me.buttons !== undefined) {\n        return me.buttons;\n    }\n    var button = me.button;\n    if (button !== undefined) {\n        return button & 1 ? 1 : button & 2 ? 3 : (button & 4 ? 2 : 0);\n    }\n}\nfunction getPageRect(el) {\n    var rect = el.getBoundingClientRect();\n    return {\n        x: rect.left + getScroll('scrollLeft', 'pageXOffset'),\n        y: rect.top + getScroll('scrollTop', 'pageYOffset'),\n        width: getRectWidth(rect),\n        height: getRectHeight(rect)\n    };\n}\nfunction getScroll(scrollProp, offsetProp) {\n    if (typeof window[offsetProp] !== 'undefined') {\n        return window[offsetProp];\n    }\n    if (documentElement.clientHeight) {\n        return documentElement[scrollProp];\n    }\n    return doc.body[scrollProp];\n}\nfunction getElementBehindPreview(preview, x, y) {\n    var className = '';\n    if (preview) {\n        className = preview.className;\n        preview.className += ' bcx-dnd-hide';\n    }\n    var el = doc.elementFromPoint(x, y);\n    if (preview) {\n        preview.className = className;\n    }\n    return el;\n}\nfunction getRectWidth(rect) {\n    return rect.width || (rect.right - rect.left);\n}\nfunction getRectHeight(rect) {\n    return rect.height || (rect.bottom - rect.top);\n}\nfunction getParent(el) {\n    if (el.parentNode === doc)\n        return null;\n    return el.parentNode;\n}\nfunction isInput(el) {\n    return el.tagName === 'INPUT' ||\n        el.tagName === 'TEXTAREA' ||\n        el.tagName === 'SELECT' ||\n        isEditable(el);\n}\nfunction isEditable(el) {\n    if (!el) {\n        return false;\n    }\n    if (el.contentEditable === 'false') {\n        return false;\n    }\n    if (el.contentEditable === 'true') {\n        return true;\n    }\n    return isEditable(getParent(el));\n}\nfunction getEventHost(e) {\n    var te = e;\n    if (te.targetTouches && te.targetTouches.length) {\n        return te.targetTouches[0];\n    }\n    if (te.changedTouches && te.changedTouches.length) {\n        return te.changedTouches[0];\n    }\n    return e;\n}\nfunction getCoord(coord, e) {\n    var host = getEventHost(e);\n    var missMap = {\n        pageX: 'clientX',\n        pageY: 'clientY'\n    };\n    if (coord in missMap && !(coord in host) && missMap[coord] in host) {\n        coord = missMap[coord];\n    }\n    return host[coord];\n}\nvar DndSource = (function () {\n    function DndSource(delegate, options) {\n        if (options === void 0) { options = {}; }\n        if (!delegate) {\n            throw new Error(\"Missing delegate for dnd source.\");\n        }\n        if (typeof delegate.dndModel !== 'function') {\n            throw new Error(\"Missing dndModel() method on dnd source delegate.\");\n        }\n        this.delegate = delegate;\n        if (options.element) {\n            this.element = options.element;\n        }\n        else {\n            this.element = delegate.dndElement;\n        }\n        if (options.handler) {\n            if (!(options.handler instanceof Element)) {\n                throw new Error(\"specified handler is not a DOM element\");\n            }\n            this.handler = options.handler;\n        }\n        else {\n            this.handler = this.element;\n        }\n        if (!(this.element instanceof Element)) {\n            throw new Error(\"Missing dndElement or options.element on dnd source delegate.\");\n        }\n        this.noPreview = options.noPreview ? true : false;\n        this.hideCursor = options.hideCursor ? true : false;\n        this.centerPreviewToMousePosition = options.centerPreviewToMousePosition ? true : false;\n    }\n    return DndSource;\n}());\nvar DndTarget = (function () {\n    function DndTarget(delegate, options) {\n        if (options === void 0) { options = {}; }\n        if (!delegate) {\n            throw new Error(\"Missing delegate for dnd target.\");\n        }\n        if (typeof delegate.dndCanDrop !== 'function') {\n            throw new Error(\"Missing dndCanDrop() method on delegate.\");\n        }\n        if (typeof delegate.dndDrop !== 'function') {\n            throw new Error(\"Missing dndDrop() method on dnd target delegate.\");\n        }\n        this.delegate = delegate;\n        if (options.element) {\n            this.element = options.element;\n        }\n        else {\n            this.element = delegate.dndElement;\n        }\n        if (!(this.element instanceof Element)) {\n            throw new Error(\"Missing dndElement or options.element on dnd target delegate.\");\n        }\n        if (typeof delegate.dndHover === 'function') {\n            this.dndHover = delegate.dndHover.bind(delegate);\n        }\n    }\n    return DndTarget;\n}());\nfunction indexOfElementOrDelegate(array, delegateOrElement) {\n    var test = (delegateOrElement instanceof Element) ?\n        (function (o) { return o.element === delegateOrElement; }) :\n        (function (o) { return o.delegate === delegateOrElement; });\n    var len = array.length;\n    for (var i = 0; i < len; i += 1) {\n        if (test(array[i]))\n            return i;\n    }\n    return -1;\n}\nfunction indexOfHandler(array, handler) {\n    var test = (function (o) { return o.handler === handler; });\n    var len = array.length;\n    for (var i = 0; i < len; i += 1) {\n        if (test(array[i]))\n            return i;\n    }\n    return -1;\n}\nvar DndService = (function () {\n    function DndService(ea) {\n        this.ea = ea;\n        this.dndSources = [];\n        this.dndTargets = [];\n        this.previewDrawers = [];\n        injectStyles();\n        this.addPreviewDrawer(preview_drawers_1.defaultPreview);\n        this.addPreviewDrawer(preview_drawers_1.unknownTagPreview);\n        this.addPreviewDrawer(preview_drawers_1.liPreview);\n        this.addPreviewDrawer(preview_drawers_1.trPreview);\n        this._grab = this._grab.bind(this);\n        this._release = this._release.bind(this);\n        this._startBecauseMouseMoved = this._startBecauseMouseMoved.bind(this);\n        this._preventGrabbed = this._preventGrabbed.bind(this);\n        this._drag = this._drag.bind(this);\n        this._esc = this._esc.bind(this);\n        documentElement.addEventListener('mousedown', this._grab);\n        documentElement.addEventListener('touchstart', this._grab, { passive: false });\n        documentElement.addEventListener('mouseup', this._release);\n        documentElement.addEventListener('touchend', this._release);\n    }\n    DndService.prototype.addPreviewDrawer = function (drawer) {\n        this.previewDrawers.unshift(drawer);\n    };\n    DndService.prototype.addSource = function (delegate, options) {\n        if (options === void 0) { options = {}; }\n        this.dndSources.push(new DndSource(delegate, options));\n    };\n    DndService.prototype.removeSource = function (delegateOrElement) {\n        var idx = indexOfElementOrDelegate(this.dndSources, delegateOrElement);\n        if (idx >= 0) {\n            this.dndSources.splice(idx, 1);\n        }\n    };\n    DndService.prototype.addTarget = function (delegate, options) {\n        if (options === void 0) { options = {}; }\n        delegate.dnd = {\n            isProcessing: false\n        };\n        var dndTarget = new DndTarget(delegate, options);\n        if (this.isProcessing) {\n            var canDrop = dndTarget.delegate.dndCanDrop(this.model);\n            var dnd = dndTarget.delegate.dnd;\n            dnd.canDrop = canDrop;\n            dnd.isProcessing = true;\n            dnd.model = this.model;\n        }\n        this.dndTargets.push(dndTarget);\n    };\n    DndService.prototype.removeTarget = function (delegateOrElement) {\n        var idx = indexOfElementOrDelegate(this.dndTargets, delegateOrElement);\n        if (idx >= 0) {\n            var dndTarget = this.dndTargets[idx];\n            dndTarget.delegate.dnd = null;\n            this.dndTargets.splice(idx, 1);\n        }\n    };\n    DndService.prototype._sourceOf = function (element) {\n        var idx = indexOfHandler(this.dndSources, element);\n        return idx >= 0 ? this.dndSources[idx] : undefined;\n    };\n    DndService.prototype._startListeningEventualMovements = function () {\n        documentElement.addEventListener('mousemove', this._startBecauseMouseMoved);\n        documentElement.addEventListener('touchmove', this._startBecauseMouseMoved, { passive: false });\n        this._element && this._element.addEventListener('touchmove', this._startBecauseMouseMoved, { passive: false });\n        this._element && this._element.addEventListener('touchend', this._release, { passive: false });\n    };\n    DndService.prototype._stopListeningEventualMovements = function () {\n        documentElement.removeEventListener('mousemove', this._startBecauseMouseMoved);\n        documentElement.removeEventListener('touchmove', this._startBecauseMouseMoved);\n        this._element && this._element.removeEventListener('touchmove', this._startBecauseMouseMoved);\n    };\n    DndService.prototype._startListeningMovements = function () {\n        documentElement.addEventListener('selectstart', this._preventGrabbed);\n        documentElement.addEventListener('click', this._preventGrabbed);\n        documentElement.addEventListener('keydown', this._esc);\n        documentElement.addEventListener('mousemove', this._drag);\n        documentElement.addEventListener('touchmove', this._drag, { passive: false });\n        this._element && this._element.addEventListener('touchmove', this._drag, { passive: false });\n    };\n    DndService.prototype._stopListeningMovements = function () {\n        documentElement.removeEventListener('selectstart', this._preventGrabbed);\n        documentElement.removeEventListener('click', this._preventGrabbed);\n        documentElement.removeEventListener('keydown', this._esc);\n        documentElement.removeEventListener('mousemove', this._drag);\n        documentElement.removeEventListener('touchmove', this._drag);\n        this._element && this._element.removeEventListener('touchmove', this._drag);\n        this._element && this._element.removeEventListener('touchend', this._release);\n    };\n    DndService.prototype._preventGrabbed = function (e) {\n        if (this._grabbed) {\n            e.preventDefault();\n        }\n    };\n    DndService.prototype._grab = function (e) {\n        this._moveX = getCoord('clientX', e);\n        this._moveY = getCoord('clientY', e);\n        var ignore = whichMouseButton(e) !== 1 || e.metaKey || e.ctrlKey;\n        if (ignore) {\n            return;\n        }\n        var element = e.target;\n        this._element = element;\n        var dndSource = this._startingSource(element);\n        if (!dndSource)\n            return;\n        this._grabbed = dndSource;\n        this._startListeningEventualMovements();\n        if (e.type === 'mousedown') {\n            if (isInput(element)) {\n                element.focus();\n            }\n            else {\n                e.preventDefault();\n            }\n        }\n        else {\n            e.preventDefault();\n        }\n    };\n    DndService.prototype._ungrab = function () {\n        this._grabbed = undefined;\n        this._stopListeningEventualMovements();\n        this._stopListeningMovements();\n        this._element = undefined;\n    };\n    DndService.prototype._release = function (e) {\n        this._ungrab();\n        if (!this.isProcessing)\n            return;\n        this.ea && this.ea.publish('dnd:willEnd');\n        var shallowTarget = this._landingTargets(e).shallowTarget;\n        if (shallowTarget) {\n            shallowTarget.delegate.dndDrop(this._locationInfo(shallowTarget.element, e));\n        }\n        this._cleanup();\n        this.ea && this.ea.publish('dnd:didEnd');\n    };\n    DndService.prototype._startingSource = function (element) {\n        if (this.isProcessing) {\n            return;\n        }\n        var dndSource;\n        while (element) {\n            if (!element)\n                break;\n            var s = this._sourceOf(element);\n            if (s && (typeof s.delegate.dndCanDrag !== 'function' ||\n                s.delegate.dndCanDrag())) {\n                dndSource = s;\n                break;\n            }\n            element = getParent(element);\n        }\n        return dndSource;\n    };\n    DndService.prototype._startBecauseMouseMoved = function (e) {\n        if (!this._grabbed)\n            return;\n        if (whichMouseButton(e) === 0) {\n            this._cleanup();\n            return;\n        }\n        var clientX = getCoord('clientX', e);\n        var clientY = getCoord('clientY', e);\n        if (clientX !== undefined &&\n            clientX === this._moveX &&\n            clientY !== undefined &&\n            clientY === this._moveY) {\n            return;\n        }\n        var elementBehindCursor = doc.elementFromPoint(clientX, clientY);\n        if (isInput(elementBehindCursor)) {\n            return;\n        }\n        var grabbed = this._grabbed;\n        this._stopListeningEventualMovements();\n        this._startListeningMovements();\n        if (this.isProcessing)\n            this._cleanup();\n        this._start(grabbed);\n        this._sourceElementRect = getPageRect(this._sourceElement);\n        this._offsetX = getCoord('pageX', e) - this._sourceElementRect.x;\n        this._offsetY = getCoord('pageY', e) - this._sourceElementRect.y;\n        this._renderPreviewImage();\n        this._drag(e);\n    };\n    DndService.prototype._start = function (dndSource) {\n        var _this = this;\n        this.ea && this.ea.publish('dnd:willStart');\n        this.isProcessing = true;\n        this.model = dndSource.delegate.dndModel();\n        this._sourceElement = dndSource.element;\n        if (dndSource.noPreview) {\n            this._noPreview = true;\n        }\n        else if (dndSource.delegate.dndPreview) {\n            this._sourcePreview = dndSource.delegate.dndPreview(this.model);\n        }\n        if (!this._noPreview) {\n            if (dndSource.hideCursor) {\n                this._hideCursor = true;\n            }\n            if (dndSource.centerPreviewToMousePosition) {\n                this._centerPreviewToMousePosition = true;\n            }\n        }\n        this.dndTargets.forEach(function (dndTarget) {\n            var canDrop = dndTarget.delegate.dndCanDrop(_this.model);\n            var dnd = dndTarget.delegate.dnd;\n            dnd.canDrop = canDrop;\n            dnd.isProcessing = true;\n            dnd.model = _this.model;\n        });\n        this.ea && this.ea.publish('dnd:didStart');\n    };\n    DndService.prototype._cleanup = function () {\n        this._ungrab();\n        this._removePreviewImage();\n        this.isProcessing = undefined;\n        this.model = undefined;\n        this._sourceElement = undefined;\n        this._noPreview = undefined;\n        this._hideCursor = undefined;\n        this._centerPreviewToMousePosition = undefined;\n        this._sourcePreview = undefined;\n        this._sourceElementRect = undefined;\n        this._offsetX = 0;\n        this._offsetY = 0;\n        this.dndTargets.forEach(function (dndTarget) {\n            var dnd = dndTarget.delegate.dnd;\n            dnd.canDrop = undefined;\n            dnd.isProcessing = undefined;\n            dnd.isHoveringShallowly = undefined;\n            dnd.isHovering = undefined;\n            dnd.model = undefined;\n        });\n    };\n    DndService.prototype._landingTargets = function (e) {\n        var _a;\n        if (!this.isProcessing) {\n            return { shallowTarget: null, possibleTargets: [] };\n        }\n        var clientX = getCoord('clientX', e);\n        var clientY = getCoord('clientY', e);\n        var possibleTargets = this.dndTargets.filter(function (dndTarget) {\n            if (!dndTarget.delegate.dnd.canDrop)\n                return;\n            var clientRect = dndTarget.element.getBoundingClientRect();\n            return clientRect.left <= clientX &&\n                clientRect.right >= clientX &&\n                clientRect.top <= clientY &&\n                clientRect.bottom >= clientY;\n        });\n        var dndTarget;\n        var element = getElementBehindPreview(this._preview, clientX, clientY);\n        while (!dndTarget && element) {\n            var idx = indexOfElementOrDelegate(possibleTargets, element);\n            if (idx >= 0) {\n                dndTarget = possibleTargets[idx];\n            }\n            else {\n                element = getParent(element);\n            }\n        }\n        if (dndTarget) {\n            possibleTargets.splice(possibleTargets.indexOf(dndTarget), 1);\n        }\n        else if (possibleTargets.length > 0) {\n            _a = possibleTargets, dndTarget = _a[0], possibleTargets = _a.slice(1);\n        }\n        return { shallowTarget: dndTarget, possibleTargets: possibleTargets };\n    };\n    DndService.prototype._drag = function (e) {\n        var _this = this;\n        if (!this.isProcessing) {\n            return;\n        }\n        e.preventDefault();\n        this._updatePreviewLocation(e);\n        var _a = this._landingTargets(e), shallowTarget = _a.shallowTarget, possibleTargets = _a.possibleTargets;\n        this.dndTargets.forEach(function (dndTarget) {\n            var dnd = dndTarget.delegate.dnd;\n            if (!dnd.isProcessing)\n                return;\n            if (dndTarget === shallowTarget) {\n                dnd.isHoveringShallowly = true;\n                dnd.isHovering = true;\n                if (dndTarget.dndHover) {\n                    dndTarget.dndHover(_this._locationInfo(dndTarget.element, e));\n                }\n            }\n            else if (possibleTargets.indexOf(dndTarget) >= 0) {\n                dnd.isHoveringShallowly = false;\n                dnd.isHovering = true;\n                if (dndTarget.dndHover) {\n                    dndTarget.dndHover(_this._locationInfo(dndTarget.element, e));\n                }\n            }\n            else {\n                dnd.isHoveringShallowly = false;\n                dnd.isHovering = false;\n            }\n        });\n    };\n    DndService.prototype._esc = function (e) {\n        if (!this.isProcessing) {\n            return;\n        }\n        if (e.key === 'Escape') {\n            e.preventDefault();\n            this._cleanup();\n            this.ea && this.ea.publish('dnd:didCancel');\n        }\n    };\n    DndService.prototype._updatePreviewLocation = function (e) {\n        if (this._preview) {\n            var pageX = getCoord('pageX', e);\n            var pageY = getCoord('pageY', e);\n            if (this._centerPreviewToMousePosition) {\n                var rect = this._preview.getBoundingClientRect();\n                var width = getRectWidth(rect);\n                var height = getRectHeight(rect);\n                this._preview.style.left = (pageX - Math.floor(width / 2)) + 'px';\n                this._preview.style.top = (pageY - Math.floor(height / 2)) + 'px';\n            }\n            else {\n                this._preview.style.left = (pageX - this._offsetX) + 'px';\n                this._preview.style.top = (pageY - this._offsetY) + 'px';\n            }\n        }\n    };\n    DndService.prototype._locationInfo = function (targetElement, e) {\n        var mouseStartAt = {\n            x: this._sourceElementRect.x + this._offsetX,\n            y: this._sourceElementRect.y + this._offsetY\n        };\n        var pageX = getCoord('pageX', e);\n        var pageY = getCoord('pageY', e);\n        var mouseEndAt = { x: pageX, y: pageY };\n        var targetElementRect = getPageRect(targetElement);\n        var previewElementRect;\n        if (this._preview) {\n            previewElementRect = getPageRect(this._preview);\n        }\n        else {\n            previewElementRect = {\n                x: pageX - this._offsetX,\n                y: pageY - this._offsetY,\n                width: this._sourceElementRect.width,\n                height: this._sourceElementRect.height\n            };\n        }\n        return {\n            mouseStartAt: mouseStartAt,\n            mouseEndAt: mouseEndAt,\n            sourceElementRect: this._sourceElementRect,\n            targetElementRect: targetElementRect,\n            previewElementRect: previewElementRect\n        };\n    };\n    DndService.prototype._renderPreviewImage = function () {\n        if (this._preview)\n            return;\n        if (this._noPreview)\n            return;\n        var customised = !!this._sourcePreview;\n        if (customised) {\n            this._preview = this._sourcePreview;\n            this._sourcePreview = undefined;\n        }\n        else {\n            var el = this._sourceElement;\n            if (!el)\n                return;\n            for (var i = 0; i < this.previewDrawers.length; i++) {\n                this._preview = this.previewDrawers[i](el);\n                if (this._preview)\n                    break;\n            }\n            if (!this._preview)\n                return;\n        }\n        classes.add(this._preview, 'bcx-dnd-preview');\n        doc.body.appendChild(this._preview);\n        classes.add(doc.body, 'bcx-dnd-unselectable');\n        if (!customised && getComputedStyle(this._preview).backgroundColor === 'rgba(0, 0, 0, 0)') {\n            this._preview.style.backgroundColor = 'white';\n        }\n        if (this._hideCursor) {\n            classes.add(doc.body, 'bcx-dnd-hide-cursor');\n        }\n    };\n    DndService.prototype._removePreviewImage = function () {\n        if (this._preview) {\n            classes.rm(doc.body, 'bcx-dnd-unselectable');\n            classes.rm(doc.body, 'bcx-dnd-hide-cursor');\n            getParent(this._preview).removeChild(this._preview);\n            this._preview = null;\n        }\n    };\n    return DndService;\n}());\nexports.DndService = DndService;\nDndService['inject'] = [aurelia_event_aggregator_1.EventAggregator];\n","\"use strict\";\n\nexports.__esModule = true;\nexports.ReorderableDndHandlerSelector = void 0;\n\nvar _aureliaTemplating = require(\"aurelia-templating\");\n\nvar _dec, _class;\n\n//Placeholder attribute to prohibit use of this attribute name in other places\nvar ReorderableDndHandlerSelector = (_dec = (0, _aureliaTemplating.customAttribute)('reorderable-dnd-handler-selector'), _dec(_class = function ReorderableDndHandlerSelector() {}) || _class);\nexports.ReorderableDndHandlerSelector = ReorderableDndHandlerSelector;\n//# sourceMappingURL=reorderable-dnd-handler-selector.js.map\n","\"use strict\";\n\nexports.__esModule = true;\nexports.configure = configure;\n\nvar _aureliaPal = require(\"aurelia-pal\");\n\nvar _reorderableRepeat = require(\"./reorderable-repeat\");\n\nvar _reorderableDirection = require(\"./reorderable-direction\");\n\nvar _reorderableGroup = require(\"./reorderable-group\");\n\nvar _reorderableGroupFor = require(\"./reorderable-group-for\");\n\nvar _reorderableDndPreview = require(\"./reorderable-dnd-preview\");\n\nvar _reorderableDndHandlerSelector = require(\"./reorderable-dnd-handler-selector\");\n\nvar _reorderableAfterReordering = require(\"./reorderable-after-reordering\");\n\nvar css = \"\\n.reorderable-repeat-dragging-me {\\n  visibility: hidden;\\n}\\n\";\n\nfunction configure(config) {\n  _aureliaPal.DOM.injectStyles(css);\n\n  config.globalResources([_reorderableRepeat.ReorderableRepeat, _reorderableDirection.ReorderableDirection, _reorderableGroup.ReorderableGroup, _reorderableGroupFor.ReorderableGroupFor, _reorderableDndPreview.ReorderableDndPreview, _reorderableDndHandlerSelector.ReorderableDndHandlerSelector, _reorderableAfterReordering.ReorderableAfterReordering]);\n}\n//# sourceMappingURL=index.js.map\n","\"use strict\";\n\nexports.__esModule = true;\nexports.ReorderableGroupMap = void 0;\n\nvar ReorderableGroupMap = /*#__PURE__*/function () {\n  function ReorderableGroupMap() {\n    this._map = new WeakMap();\n  }\n\n  var _proto = ReorderableGroupMap.prototype;\n\n  _proto.add = function add(repeater) {\n    var repeaterId = repeater.repeaterId,\n        items = repeater.items;\n\n    this._map.set(items, {\n      group: function group() {\n        return repeater.type;\n      },\n      repeaterId: repeaterId\n    });\n  };\n\n  _proto.remove = function remove(repeater) {\n    var items = repeater.items;\n\n    this._map.delete(items);\n  };\n\n  _proto.get = function get(items) {\n    return this._map.get(items);\n  };\n\n  return ReorderableGroupMap;\n}();\n\nexports.ReorderableGroupMap = ReorderableGroupMap;\n//# sourceMappingURL=reorderable-group-map.js.map\n","\"use strict\";\n\nexports.__esModule = true;\nexports.ReorderableDirection = void 0;\n\nvar _aureliaTemplating = require(\"aurelia-templating\");\n\nvar _dec, _class;\n\n//Placeholder attribute to prohibit use of this attribute name in other places\nvar ReorderableDirection = (_dec = (0, _aureliaTemplating.customAttribute)('reorderable-direction'), _dec(_class = function ReorderableDirection() {}) || _class);\nexports.ReorderableDirection = ReorderableDirection;\n//# sourceMappingURL=reorderable-direction.js.map\n","/*!\n * The buffer module from node.js, for the browser.\n *\n * @author   Feross Aboukhadijeh <http://feross.org>\n * @license  MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nvar base64 = require('base64-js')\nvar ieee754 = require('ieee754')\nvar isArray = require('isarray')\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n *   === true    Use Uint8Array implementation (fastest)\n *   === false   Use Object implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * Due to various browser bugs, sometimes the Object implementation will be used even\n * when the browser supports typed arrays.\n *\n * Note:\n *\n *   - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,\n *     See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.\n *\n *   - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.\n *\n *   - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of\n *     incorrect length in some situations.\n\n * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they\n * get the Object implementation, which is slower but behaves correctly.\n */\nBuffer.TYPED_ARRAY_SUPPORT = global.TYPED_ARRAY_SUPPORT !== undefined\n  ? global.TYPED_ARRAY_SUPPORT\n  : typedArraySupport()\n\n/*\n * Export kMaxLength after typed array support is determined.\n */\nexports.kMaxLength = kMaxLength()\n\nfunction typedArraySupport () {\n  try {\n    var arr = new Uint8Array(1)\n    arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}\n    return arr.foo() === 42 && // typed array instances can be augmented\n        typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`\n        arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray`\n  } catch (e) {\n    return false\n  }\n}\n\nfunction kMaxLength () {\n  return Buffer.TYPED_ARRAY_SUPPORT\n    ? 0x7fffffff\n    : 0x3fffffff\n}\n\nfunction createBuffer (that, length) {\n  if (kMaxLength() < length) {\n    throw new RangeError('Invalid typed array length')\n  }\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    // Return an augmented `Uint8Array` instance, for best performance\n    that = new Uint8Array(length)\n    that.__proto__ = Buffer.prototype\n  } else {\n    // Fallback: Return an object instance of the Buffer class\n    if (that === null) {\n      that = new Buffer(length)\n    }\n    that.length = length\n  }\n\n  return that\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n  if (!Buffer.TYPED_ARRAY_SUPPORT && !(this instanceof Buffer)) {\n    return new Buffer(arg, encodingOrOffset, length)\n  }\n\n  // Common case.\n  if (typeof arg === 'number') {\n    if (typeof encodingOrOffset === 'string') {\n      throw new Error(\n        'If encoding is specified then the first argument must be a string'\n      )\n    }\n    return allocUnsafe(this, arg)\n  }\n  return from(this, arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\n// TODO: Legacy, not needed anymore. Remove in next major version.\nBuffer._augment = function (arr) {\n  arr.__proto__ = Buffer.prototype\n  return arr\n}\n\nfunction from (that, value, encodingOrOffset, length) {\n  if (typeof value === 'number') {\n    throw new TypeError('\"value\" argument must not be a number')\n  }\n\n  if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {\n    return fromArrayBuffer(that, value, encodingOrOffset, length)\n  }\n\n  if (typeof value === 'string') {\n    return fromString(that, value, encodingOrOffset)\n  }\n\n  return fromObject(that, value)\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n  return from(null, value, encodingOrOffset, length)\n}\n\nif (Buffer.TYPED_ARRAY_SUPPORT) {\n  Buffer.prototype.__proto__ = Uint8Array.prototype\n  Buffer.__proto__ = Uint8Array\n  if (typeof Symbol !== 'undefined' && Symbol.species &&\n      Buffer[Symbol.species] === Buffer) {\n    // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97\n    Object.defineProperty(Buffer, Symbol.species, {\n      value: null,\n      configurable: true\n    })\n  }\n}\n\nfunction assertSize (size) {\n  if (typeof size !== 'number') {\n    throw new TypeError('\"size\" argument must be a number')\n  } else if (size < 0) {\n    throw new RangeError('\"size\" argument must not be negative')\n  }\n}\n\nfunction alloc (that, size, fill, encoding) {\n  assertSize(size)\n  if (size <= 0) {\n    return createBuffer(that, size)\n  }\n  if (fill !== undefined) {\n    // Only pay attention to encoding if it's a string. This\n    // prevents accidentally sending in a number that would\n    // be interpretted as a start offset.\n    return typeof encoding === 'string'\n      ? createBuffer(that, size).fill(fill, encoding)\n      : createBuffer(that, size).fill(fill)\n  }\n  return createBuffer(that, size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n  return alloc(null, size, fill, encoding)\n}\n\nfunction allocUnsafe (that, size) {\n  assertSize(size)\n  that = createBuffer(that, size < 0 ? 0 : checked(size) | 0)\n  if (!Buffer.TYPED_ARRAY_SUPPORT) {\n    for (var i = 0; i < size; ++i) {\n      that[i] = 0\n    }\n  }\n  return that\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n  return allocUnsafe(null, size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n  return allocUnsafe(null, size)\n}\n\nfunction fromString (that, string, encoding) {\n  if (typeof encoding !== 'string' || encoding === '') {\n    encoding = 'utf8'\n  }\n\n  if (!Buffer.isEncoding(encoding)) {\n    throw new TypeError('\"encoding\" must be a valid string encoding')\n  }\n\n  var length = byteLength(string, encoding) | 0\n  that = createBuffer(that, length)\n\n  var actual = that.write(string, encoding)\n\n  if (actual !== length) {\n    // Writing a hex string, for example, that contains invalid characters will\n    // cause everything after the first invalid character to be ignored. (e.g.\n    // 'abxxcd' will be treated as 'ab')\n    that = that.slice(0, actual)\n  }\n\n  return that\n}\n\nfunction fromArrayLike (that, array) {\n  var length = array.length < 0 ? 0 : checked(array.length) | 0\n  that = createBuffer(that, length)\n  for (var i = 0; i < length; i += 1) {\n    that[i] = array[i] & 255\n  }\n  return that\n}\n\nfunction fromArrayBuffer (that, array, byteOffset, length) {\n  array.byteLength // this throws if `array` is not a valid ArrayBuffer\n\n  if (byteOffset < 0 || array.byteLength < byteOffset) {\n    throw new RangeError('\\'offset\\' is out of bounds')\n  }\n\n  if (array.byteLength < byteOffset + (length || 0)) {\n    throw new RangeError('\\'length\\' is out of bounds')\n  }\n\n  if (byteOffset === undefined && length === undefined) {\n    array = new Uint8Array(array)\n  } else if (length === undefined) {\n    array = new Uint8Array(array, byteOffset)\n  } else {\n    array = new Uint8Array(array, byteOffset, length)\n  }\n\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    // Return an augmented `Uint8Array` instance, for best performance\n    that = array\n    that.__proto__ = Buffer.prototype\n  } else {\n    // Fallback: Return an object instance of the Buffer class\n    that = fromArrayLike(that, array)\n  }\n  return that\n}\n\nfunction fromObject (that, obj) {\n  if (Buffer.isBuffer(obj)) {\n    var len = checked(obj.length) | 0\n    that = createBuffer(that, len)\n\n    if (that.length === 0) {\n      return that\n    }\n\n    obj.copy(that, 0, 0, len)\n    return that\n  }\n\n  if (obj) {\n    if ((typeof ArrayBuffer !== 'undefined' &&\n        obj.buffer instanceof ArrayBuffer) || 'length' in obj) {\n      if (typeof obj.length !== 'number' || isnan(obj.length)) {\n        return createBuffer(that, 0)\n      }\n      return fromArrayLike(that, obj)\n    }\n\n    if (obj.type === 'Buffer' && isArray(obj.data)) {\n      return fromArrayLike(that, obj.data)\n    }\n  }\n\n  throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')\n}\n\nfunction checked (length) {\n  // Note: cannot use `length < kMaxLength()` here because that fails when\n  // length is NaN (which is otherwise coerced to zero.)\n  if (length >= kMaxLength()) {\n    throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n                         'size: 0x' + kMaxLength().toString(16) + ' bytes')\n  }\n  return length | 0\n}\n\nfunction SlowBuffer (length) {\n  if (+length != length) { // eslint-disable-line eqeqeq\n    length = 0\n  }\n  return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n  return !!(b != null && b._isBuffer)\n}\n\nBuffer.compare = function compare (a, b) {\n  if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n    throw new TypeError('Arguments must be Buffers')\n  }\n\n  if (a === b) return 0\n\n  var x = a.length\n  var y = b.length\n\n  for (var i = 0, len = Math.min(x, y); i < len; ++i) {\n    if (a[i] !== b[i]) {\n      x = a[i]\n      y = b[i]\n      break\n    }\n  }\n\n  if (x < y) return -1\n  if (y < x) return 1\n  return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n  switch (String(encoding).toLowerCase()) {\n    case 'hex':\n    case 'utf8':\n    case 'utf-8':\n    case 'ascii':\n    case 'latin1':\n    case 'binary':\n    case 'base64':\n    case 'ucs2':\n    case 'ucs-2':\n    case 'utf16le':\n    case 'utf-16le':\n      return true\n    default:\n      return false\n  }\n}\n\nBuffer.concat = function concat (list, length) {\n  if (!isArray(list)) {\n    throw new TypeError('\"list\" argument must be an Array of Buffers')\n  }\n\n  if (list.length === 0) {\n    return Buffer.alloc(0)\n  }\n\n  var i\n  if (length === undefined) {\n    length = 0\n    for (i = 0; i < list.length; ++i) {\n      length += list[i].length\n    }\n  }\n\n  var buffer = Buffer.allocUnsafe(length)\n  var pos = 0\n  for (i = 0; i < list.length; ++i) {\n    var buf = list[i]\n    if (!Buffer.isBuffer(buf)) {\n      throw new TypeError('\"list\" argument must be an Array of Buffers')\n    }\n    buf.copy(buffer, pos)\n    pos += buf.length\n  }\n  return buffer\n}\n\nfunction byteLength (string, encoding) {\n  if (Buffer.isBuffer(string)) {\n    return string.length\n  }\n  if (typeof ArrayBuffer !== 'undefined' && typeof ArrayBuffer.isView === 'function' &&\n      (ArrayBuffer.isView(string) || string instanceof ArrayBuffer)) {\n    return string.byteLength\n  }\n  if (typeof string !== 'string') {\n    string = '' + string\n  }\n\n  var len = string.length\n  if (len === 0) return 0\n\n  // Use a for loop to avoid recursion\n  var loweredCase = false\n  for (;;) {\n    switch (encoding) {\n      case 'ascii':\n      case 'latin1':\n      case 'binary':\n        return len\n      case 'utf8':\n      case 'utf-8':\n      case undefined:\n        return utf8ToBytes(string).length\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return len * 2\n      case 'hex':\n        return len >>> 1\n      case 'base64':\n        return base64ToBytes(string).length\n      default:\n        if (loweredCase) return utf8ToBytes(string).length // assume utf8\n        encoding = ('' + encoding).toLowerCase()\n        loweredCase = true\n    }\n  }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n  var loweredCase = false\n\n  // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n  // property of a typed array.\n\n  // This behaves neither like String nor Uint8Array in that we set start/end\n  // to their upper/lower bounds if the value passed is out of range.\n  // undefined is handled specially as per ECMA-262 6th Edition,\n  // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n  if (start === undefined || start < 0) {\n    start = 0\n  }\n  // Return early if start > this.length. Done here to prevent potential uint32\n  // coercion fail below.\n  if (start > this.length) {\n    return ''\n  }\n\n  if (end === undefined || end > this.length) {\n    end = this.length\n  }\n\n  if (end <= 0) {\n    return ''\n  }\n\n  // Force coersion to uint32. This will also coerce falsey/NaN values to 0.\n  end >>>= 0\n  start >>>= 0\n\n  if (end <= start) {\n    return ''\n  }\n\n  if (!encoding) encoding = 'utf8'\n\n  while (true) {\n    switch (encoding) {\n      case 'hex':\n        return hexSlice(this, start, end)\n\n      case 'utf8':\n      case 'utf-8':\n        return utf8Slice(this, start, end)\n\n      case 'ascii':\n        return asciiSlice(this, start, end)\n\n      case 'latin1':\n      case 'binary':\n        return latin1Slice(this, start, end)\n\n      case 'base64':\n        return base64Slice(this, start, end)\n\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return utf16leSlice(this, start, end)\n\n      default:\n        if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n        encoding = (encoding + '').toLowerCase()\n        loweredCase = true\n    }\n  }\n}\n\n// The property is used by `Buffer.isBuffer` and `is-buffer` (in Safari 5-7) to detect\n// Buffer instances.\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n  var i = b[n]\n  b[n] = b[m]\n  b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n  var len = this.length\n  if (len % 2 !== 0) {\n    throw new RangeError('Buffer size must be a multiple of 16-bits')\n  }\n  for (var i = 0; i < len; i += 2) {\n    swap(this, i, i + 1)\n  }\n  return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n  var len = this.length\n  if (len % 4 !== 0) {\n    throw new RangeError('Buffer size must be a multiple of 32-bits')\n  }\n  for (var i = 0; i < len; i += 4) {\n    swap(this, i, i + 3)\n    swap(this, i + 1, i + 2)\n  }\n  return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n  var len = this.length\n  if (len % 8 !== 0) {\n    throw new RangeError('Buffer size must be a multiple of 64-bits')\n  }\n  for (var i = 0; i < len; i += 8) {\n    swap(this, i, i + 7)\n    swap(this, i + 1, i + 6)\n    swap(this, i + 2, i + 5)\n    swap(this, i + 3, i + 4)\n  }\n  return this\n}\n\nBuffer.prototype.toString = function toString () {\n  var length = this.length | 0\n  if (length === 0) return ''\n  if (arguments.length === 0) return utf8Slice(this, 0, length)\n  return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.equals = function equals (b) {\n  if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n  if (this === b) return true\n  return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n  var str = ''\n  var max = exports.INSPECT_MAX_BYTES\n  if (this.length > 0) {\n    str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')\n    if (this.length > max) str += ' ... '\n  }\n  return '<Buffer ' + str + '>'\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n  if (!Buffer.isBuffer(target)) {\n    throw new TypeError('Argument must be a Buffer')\n  }\n\n  if (start === undefined) {\n    start = 0\n  }\n  if (end === undefined) {\n    end = target ? target.length : 0\n  }\n  if (thisStart === undefined) {\n    thisStart = 0\n  }\n  if (thisEnd === undefined) {\n    thisEnd = this.length\n  }\n\n  if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n    throw new RangeError('out of range index')\n  }\n\n  if (thisStart >= thisEnd && start >= end) {\n    return 0\n  }\n  if (thisStart >= thisEnd) {\n    return -1\n  }\n  if (start >= end) {\n    return 1\n  }\n\n  start >>>= 0\n  end >>>= 0\n  thisStart >>>= 0\n  thisEnd >>>= 0\n\n  if (this === target) return 0\n\n  var x = thisEnd - thisStart\n  var y = end - start\n  var len = Math.min(x, y)\n\n  var thisCopy = this.slice(thisStart, thisEnd)\n  var targetCopy = target.slice(start, end)\n\n  for (var i = 0; i < len; ++i) {\n    if (thisCopy[i] !== targetCopy[i]) {\n      x = thisCopy[i]\n      y = targetCopy[i]\n      break\n    }\n  }\n\n  if (x < y) return -1\n  if (y < x) return 1\n  return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n  // Empty buffer means no match\n  if (buffer.length === 0) return -1\n\n  // Normalize byteOffset\n  if (typeof byteOffset === 'string') {\n    encoding = byteOffset\n    byteOffset = 0\n  } else if (byteOffset > 0x7fffffff) {\n    byteOffset = 0x7fffffff\n  } else if (byteOffset < -0x80000000) {\n    byteOffset = -0x80000000\n  }\n  byteOffset = +byteOffset  // Coerce to Number.\n  if (isNaN(byteOffset)) {\n    // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n    byteOffset = dir ? 0 : (buffer.length - 1)\n  }\n\n  // Normalize byteOffset: negative offsets start from the end of the buffer\n  if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n  if (byteOffset >= buffer.length) {\n    if (dir) return -1\n    else byteOffset = buffer.length - 1\n  } else if (byteOffset < 0) {\n    if (dir) byteOffset = 0\n    else return -1\n  }\n\n  // Normalize val\n  if (typeof val === 'string') {\n    val = Buffer.from(val, encoding)\n  }\n\n  // Finally, search either indexOf (if dir is true) or lastIndexOf\n  if (Buffer.isBuffer(val)) {\n    // Special case: looking for empty string/buffer always fails\n    if (val.length === 0) {\n      return -1\n    }\n    return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n  } else if (typeof val === 'number') {\n    val = val & 0xFF // Search for a byte value [0-255]\n    if (Buffer.TYPED_ARRAY_SUPPORT &&\n        typeof Uint8Array.prototype.indexOf === 'function') {\n      if (dir) {\n        return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n      } else {\n        return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n      }\n    }\n    return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)\n  }\n\n  throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n  var indexSize = 1\n  var arrLength = arr.length\n  var valLength = val.length\n\n  if (encoding !== undefined) {\n    encoding = String(encoding).toLowerCase()\n    if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n        encoding === 'utf16le' || encoding === 'utf-16le') {\n      if (arr.length < 2 || val.length < 2) {\n        return -1\n      }\n      indexSize = 2\n      arrLength /= 2\n      valLength /= 2\n      byteOffset /= 2\n    }\n  }\n\n  function read (buf, i) {\n    if (indexSize === 1) {\n      return buf[i]\n    } else {\n      return buf.readUInt16BE(i * indexSize)\n    }\n  }\n\n  var i\n  if (dir) {\n    var foundIndex = -1\n    for (i = byteOffset; i < arrLength; i++) {\n      if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n        if (foundIndex === -1) foundIndex = i\n        if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n      } else {\n        if (foundIndex !== -1) i -= i - foundIndex\n        foundIndex = -1\n      }\n    }\n  } else {\n    if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n    for (i = byteOffset; i >= 0; i--) {\n      var found = true\n      for (var j = 0; j < valLength; j++) {\n        if (read(arr, i + j) !== read(val, j)) {\n          found = false\n          break\n        }\n      }\n      if (found) return i\n    }\n  }\n\n  return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n  return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n  return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n  return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n  offset = Number(offset) || 0\n  var remaining = buf.length - offset\n  if (!length) {\n    length = remaining\n  } else {\n    length = Number(length)\n    if (length > remaining) {\n      length = remaining\n    }\n  }\n\n  // must be an even number of digits\n  var strLen = string.length\n  if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')\n\n  if (length > strLen / 2) {\n    length = strLen / 2\n  }\n  for (var i = 0; i < length; ++i) {\n    var parsed = parseInt(string.substr(i * 2, 2), 16)\n    if (isNaN(parsed)) return i\n    buf[offset + i] = parsed\n  }\n  return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n  return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n  return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction latin1Write (buf, string, offset, length) {\n  return asciiWrite(buf, string, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n  return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n  return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n  // Buffer#write(string)\n  if (offset === undefined) {\n    encoding = 'utf8'\n    length = this.length\n    offset = 0\n  // Buffer#write(string, encoding)\n  } else if (length === undefined && typeof offset === 'string') {\n    encoding = offset\n    length = this.length\n    offset = 0\n  // Buffer#write(string, offset[, length][, encoding])\n  } else if (isFinite(offset)) {\n    offset = offset | 0\n    if (isFinite(length)) {\n      length = length | 0\n      if (encoding === undefined) encoding = 'utf8'\n    } else {\n      encoding = length\n      length = undefined\n    }\n  // legacy write(string, encoding, offset, length) - remove in v0.13\n  } else {\n    throw new Error(\n      'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n    )\n  }\n\n  var remaining = this.length - offset\n  if (length === undefined || length > remaining) length = remaining\n\n  if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n    throw new RangeError('Attempt to write outside buffer bounds')\n  }\n\n  if (!encoding) encoding = 'utf8'\n\n  var loweredCase = false\n  for (;;) {\n    switch (encoding) {\n      case 'hex':\n        return hexWrite(this, string, offset, length)\n\n      case 'utf8':\n      case 'utf-8':\n        return utf8Write(this, string, offset, length)\n\n      case 'ascii':\n        return asciiWrite(this, string, offset, length)\n\n      case 'latin1':\n      case 'binary':\n        return latin1Write(this, string, offset, length)\n\n      case 'base64':\n        // Warning: maxLength not taken into account in base64Write\n        return base64Write(this, string, offset, length)\n\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return ucs2Write(this, string, offset, length)\n\n      default:\n        if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n        encoding = ('' + encoding).toLowerCase()\n        loweredCase = true\n    }\n  }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n  return {\n    type: 'Buffer',\n    data: Array.prototype.slice.call(this._arr || this, 0)\n  }\n}\n\nfunction base64Slice (buf, start, end) {\n  if (start === 0 && end === buf.length) {\n    return base64.fromByteArray(buf)\n  } else {\n    return base64.fromByteArray(buf.slice(start, end))\n  }\n}\n\nfunction utf8Slice (buf, start, end) {\n  end = Math.min(buf.length, end)\n  var res = []\n\n  var i = start\n  while (i < end) {\n    var firstByte = buf[i]\n    var codePoint = null\n    var bytesPerSequence = (firstByte > 0xEF) ? 4\n      : (firstByte > 0xDF) ? 3\n      : (firstByte > 0xBF) ? 2\n      : 1\n\n    if (i + bytesPerSequence <= end) {\n      var secondByte, thirdByte, fourthByte, tempCodePoint\n\n      switch (bytesPerSequence) {\n        case 1:\n          if (firstByte < 0x80) {\n            codePoint = firstByte\n          }\n          break\n        case 2:\n          secondByte = buf[i + 1]\n          if ((secondByte & 0xC0) === 0x80) {\n            tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n            if (tempCodePoint > 0x7F) {\n              codePoint = tempCodePoint\n            }\n          }\n          break\n        case 3:\n          secondByte = buf[i + 1]\n          thirdByte = buf[i + 2]\n          if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n            tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n            if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n              codePoint = tempCodePoint\n            }\n          }\n          break\n        case 4:\n          secondByte = buf[i + 1]\n          thirdByte = buf[i + 2]\n          fourthByte = buf[i + 3]\n          if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n            tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n            if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n              codePoint = tempCodePoint\n            }\n          }\n      }\n    }\n\n    if (codePoint === null) {\n      // we did not generate a valid codePoint so insert a\n      // replacement char (U+FFFD) and advance only 1 byte\n      codePoint = 0xFFFD\n      bytesPerSequence = 1\n    } else if (codePoint > 0xFFFF) {\n      // encode to utf16 (surrogate pair dance)\n      codePoint -= 0x10000\n      res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n      codePoint = 0xDC00 | codePoint & 0x3FF\n    }\n\n    res.push(codePoint)\n    i += bytesPerSequence\n  }\n\n  return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nvar MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n  var len = codePoints.length\n  if (len <= MAX_ARGUMENTS_LENGTH) {\n    return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n  }\n\n  // Decode in chunks to avoid \"call stack size exceeded\".\n  var res = ''\n  var i = 0\n  while (i < len) {\n    res += String.fromCharCode.apply(\n      String,\n      codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n    )\n  }\n  return res\n}\n\nfunction asciiSlice (buf, start, end) {\n  var ret = ''\n  end = Math.min(buf.length, end)\n\n  for (var i = start; i < end; ++i) {\n    ret += String.fromCharCode(buf[i] & 0x7F)\n  }\n  return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n  var ret = ''\n  end = Math.min(buf.length, end)\n\n  for (var i = start; i < end; ++i) {\n    ret += String.fromCharCode(buf[i])\n  }\n  return ret\n}\n\nfunction hexSlice (buf, start, end) {\n  var len = buf.length\n\n  if (!start || start < 0) start = 0\n  if (!end || end < 0 || end > len) end = len\n\n  var out = ''\n  for (var i = start; i < end; ++i) {\n    out += toHex(buf[i])\n  }\n  return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n  var bytes = buf.slice(start, end)\n  var res = ''\n  for (var i = 0; i < bytes.length; i += 2) {\n    res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256)\n  }\n  return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n  var len = this.length\n  start = ~~start\n  end = end === undefined ? len : ~~end\n\n  if (start < 0) {\n    start += len\n    if (start < 0) start = 0\n  } else if (start > len) {\n    start = len\n  }\n\n  if (end < 0) {\n    end += len\n    if (end < 0) end = 0\n  } else if (end > len) {\n    end = len\n  }\n\n  if (end < start) end = start\n\n  var newBuf\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    newBuf = this.subarray(start, end)\n    newBuf.__proto__ = Buffer.prototype\n  } else {\n    var sliceLen = end - start\n    newBuf = new Buffer(sliceLen, undefined)\n    for (var i = 0; i < sliceLen; ++i) {\n      newBuf[i] = this[i + start]\n    }\n  }\n\n  return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n  if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n  if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n  offset = offset | 0\n  byteLength = byteLength | 0\n  if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n  var val = this[offset]\n  var mul = 1\n  var i = 0\n  while (++i < byteLength && (mul *= 0x100)) {\n    val += this[offset + i] * mul\n  }\n\n  return val\n}\n\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n  offset = offset | 0\n  byteLength = byteLength | 0\n  if (!noAssert) {\n    checkOffset(offset, byteLength, this.length)\n  }\n\n  var val = this[offset + --byteLength]\n  var mul = 1\n  while (byteLength > 0 && (mul *= 0x100)) {\n    val += this[offset + --byteLength] * mul\n  }\n\n  return val\n}\n\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 1, this.length)\n  return this[offset]\n}\n\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return ((this[offset]) |\n      (this[offset + 1] << 8) |\n      (this[offset + 2] << 16)) +\n      (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return (this[offset] * 0x1000000) +\n    ((this[offset + 1] << 16) |\n    (this[offset + 2] << 8) |\n    this[offset + 3])\n}\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n  offset = offset | 0\n  byteLength = byteLength | 0\n  if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n  var val = this[offset]\n  var mul = 1\n  var i = 0\n  while (++i < byteLength && (mul *= 0x100)) {\n    val += this[offset + i] * mul\n  }\n  mul *= 0x80\n\n  if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n  return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n  offset = offset | 0\n  byteLength = byteLength | 0\n  if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n  var i = byteLength\n  var mul = 1\n  var val = this[offset + --i]\n  while (i > 0 && (mul *= 0x100)) {\n    val += this[offset + --i] * mul\n  }\n  mul *= 0x80\n\n  if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n  return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 1, this.length)\n  if (!(this[offset] & 0x80)) return (this[offset])\n  return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  var val = this[offset] | (this[offset + 1] << 8)\n  return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  var val = this[offset + 1] | (this[offset] << 8)\n  return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return (this[offset]) |\n    (this[offset + 1] << 8) |\n    (this[offset + 2] << 16) |\n    (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return (this[offset] << 24) |\n    (this[offset + 1] << 16) |\n    (this[offset + 2] << 8) |\n    (this[offset + 3])\n}\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length)\n  return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length)\n  return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 8, this.length)\n  return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 8, this.length)\n  return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n  if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n  if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n  if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset | 0\n  byteLength = byteLength | 0\n  if (!noAssert) {\n    var maxBytes = Math.pow(2, 8 * byteLength) - 1\n    checkInt(this, value, offset, byteLength, maxBytes, 0)\n  }\n\n  var mul = 1\n  var i = 0\n  this[offset] = value & 0xFF\n  while (++i < byteLength && (mul *= 0x100)) {\n    this[offset + i] = (value / mul) & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset | 0\n  byteLength = byteLength | 0\n  if (!noAssert) {\n    var maxBytes = Math.pow(2, 8 * byteLength) - 1\n    checkInt(this, value, offset, byteLength, maxBytes, 0)\n  }\n\n  var i = byteLength - 1\n  var mul = 1\n  this[offset + i] = value & 0xFF\n  while (--i >= 0 && (mul *= 0x100)) {\n    this[offset + i] = (value / mul) & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n  if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n  this[offset] = (value & 0xff)\n  return offset + 1\n}\n\nfunction objectWriteUInt16 (buf, value, offset, littleEndian) {\n  if (value < 0) value = 0xffff + value + 1\n  for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; ++i) {\n    buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>\n      (littleEndian ? i : 1 - i) * 8\n  }\n}\n\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value & 0xff)\n    this[offset + 1] = (value >>> 8)\n  } else {\n    objectWriteUInt16(this, value, offset, true)\n  }\n  return offset + 2\n}\n\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value >>> 8)\n    this[offset + 1] = (value & 0xff)\n  } else {\n    objectWriteUInt16(this, value, offset, false)\n  }\n  return offset + 2\n}\n\nfunction objectWriteUInt32 (buf, value, offset, littleEndian) {\n  if (value < 0) value = 0xffffffff + value + 1\n  for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; ++i) {\n    buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff\n  }\n}\n\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset + 3] = (value >>> 24)\n    this[offset + 2] = (value >>> 16)\n    this[offset + 1] = (value >>> 8)\n    this[offset] = (value & 0xff)\n  } else {\n    objectWriteUInt32(this, value, offset, true)\n  }\n  return offset + 4\n}\n\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value >>> 24)\n    this[offset + 1] = (value >>> 16)\n    this[offset + 2] = (value >>> 8)\n    this[offset + 3] = (value & 0xff)\n  } else {\n    objectWriteUInt32(this, value, offset, false)\n  }\n  return offset + 4\n}\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) {\n    var limit = Math.pow(2, 8 * byteLength - 1)\n\n    checkInt(this, value, offset, byteLength, limit - 1, -limit)\n  }\n\n  var i = 0\n  var mul = 1\n  var sub = 0\n  this[offset] = value & 0xFF\n  while (++i < byteLength && (mul *= 0x100)) {\n    if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n      sub = 1\n    }\n    this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) {\n    var limit = Math.pow(2, 8 * byteLength - 1)\n\n    checkInt(this, value, offset, byteLength, limit - 1, -limit)\n  }\n\n  var i = byteLength - 1\n  var mul = 1\n  var sub = 0\n  this[offset + i] = value & 0xFF\n  while (--i >= 0 && (mul *= 0x100)) {\n    if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n      sub = 1\n    }\n    this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n  if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n  if (value < 0) value = 0xff + value + 1\n  this[offset] = (value & 0xff)\n  return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value & 0xff)\n    this[offset + 1] = (value >>> 8)\n  } else {\n    objectWriteUInt16(this, value, offset, true)\n  }\n  return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value >>> 8)\n    this[offset + 1] = (value & 0xff)\n  } else {\n    objectWriteUInt16(this, value, offset, false)\n  }\n  return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value & 0xff)\n    this[offset + 1] = (value >>> 8)\n    this[offset + 2] = (value >>> 16)\n    this[offset + 3] = (value >>> 24)\n  } else {\n    objectWriteUInt32(this, value, offset, true)\n  }\n  return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n  if (value < 0) value = 0xffffffff + value + 1\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value >>> 24)\n    this[offset + 1] = (value >>> 16)\n    this[offset + 2] = (value >>> 8)\n    this[offset + 3] = (value & 0xff)\n  } else {\n    objectWriteUInt32(this, value, offset, false)\n  }\n  return offset + 4\n}\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n  if (offset + ext > buf.length) throw new RangeError('Index out of range')\n  if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n  if (!noAssert) {\n    checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n  }\n  ieee754.write(buf, value, offset, littleEndian, 23, 4)\n  return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n  return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n  return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n  if (!noAssert) {\n    checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n  }\n  ieee754.write(buf, value, offset, littleEndian, 52, 8)\n  return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n  return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n  return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n  if (!start) start = 0\n  if (!end && end !== 0) end = this.length\n  if (targetStart >= target.length) targetStart = target.length\n  if (!targetStart) targetStart = 0\n  if (end > 0 && end < start) end = start\n\n  // Copy 0 bytes; we're done\n  if (end === start) return 0\n  if (target.length === 0 || this.length === 0) return 0\n\n  // Fatal error conditions\n  if (targetStart < 0) {\n    throw new RangeError('targetStart out of bounds')\n  }\n  if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')\n  if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n  // Are we oob?\n  if (end > this.length) end = this.length\n  if (target.length - targetStart < end - start) {\n    end = target.length - targetStart + start\n  }\n\n  var len = end - start\n  var i\n\n  if (this === target && start < targetStart && targetStart < end) {\n    // descending copy from end\n    for (i = len - 1; i >= 0; --i) {\n      target[i + targetStart] = this[i + start]\n    }\n  } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {\n    // ascending copy from start\n    for (i = 0; i < len; ++i) {\n      target[i + targetStart] = this[i + start]\n    }\n  } else {\n    Uint8Array.prototype.set.call(\n      target,\n      this.subarray(start, start + len),\n      targetStart\n    )\n  }\n\n  return len\n}\n\n// Usage:\n//    buffer.fill(number[, offset[, end]])\n//    buffer.fill(buffer[, offset[, end]])\n//    buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n  // Handle string cases:\n  if (typeof val === 'string') {\n    if (typeof start === 'string') {\n      encoding = start\n      start = 0\n      end = this.length\n    } else if (typeof end === 'string') {\n      encoding = end\n      end = this.length\n    }\n    if (val.length === 1) {\n      var code = val.charCodeAt(0)\n      if (code < 256) {\n        val = code\n      }\n    }\n    if (encoding !== undefined && typeof encoding !== 'string') {\n      throw new TypeError('encoding must be a string')\n    }\n    if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n      throw new TypeError('Unknown encoding: ' + encoding)\n    }\n  } else if (typeof val === 'number') {\n    val = val & 255\n  }\n\n  // Invalid ranges are not set to a default, so can range check early.\n  if (start < 0 || this.length < start || this.length < end) {\n    throw new RangeError('Out of range index')\n  }\n\n  if (end <= start) {\n    return this\n  }\n\n  start = start >>> 0\n  end = end === undefined ? this.length : end >>> 0\n\n  if (!val) val = 0\n\n  var i\n  if (typeof val === 'number') {\n    for (i = start; i < end; ++i) {\n      this[i] = val\n    }\n  } else {\n    var bytes = Buffer.isBuffer(val)\n      ? val\n      : utf8ToBytes(new Buffer(val, encoding).toString())\n    var len = bytes.length\n    for (i = 0; i < end - start; ++i) {\n      this[i + start] = bytes[i % len]\n    }\n  }\n\n  return this\n}\n\n// HELPER FUNCTIONS\n// ================\n\nvar INVALID_BASE64_RE = /[^+\\/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n  // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n  str = stringtrim(str).replace(INVALID_BASE64_RE, '')\n  // Node converts strings with length < 2 to ''\n  if (str.length < 2) return ''\n  // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n  while (str.length % 4 !== 0) {\n    str = str + '='\n  }\n  return str\n}\n\nfunction stringtrim (str) {\n  if (str.trim) return str.trim()\n  return str.replace(/^\\s+|\\s+$/g, '')\n}\n\nfunction toHex (n) {\n  if (n < 16) return '0' + n.toString(16)\n  return n.toString(16)\n}\n\nfunction utf8ToBytes (string, units) {\n  units = units || Infinity\n  var codePoint\n  var length = string.length\n  var leadSurrogate = null\n  var bytes = []\n\n  for (var i = 0; i < length; ++i) {\n    codePoint = string.charCodeAt(i)\n\n    // is surrogate component\n    if (codePoint > 0xD7FF && codePoint < 0xE000) {\n      // last char was a lead\n      if (!leadSurrogate) {\n        // no lead yet\n        if (codePoint > 0xDBFF) {\n          // unexpected trail\n          if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n          continue\n        } else if (i + 1 === length) {\n          // unpaired lead\n          if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n          continue\n        }\n\n        // valid lead\n        leadSurrogate = codePoint\n\n        continue\n      }\n\n      // 2 leads in a row\n      if (codePoint < 0xDC00) {\n        if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n        leadSurrogate = codePoint\n        continue\n      }\n\n      // valid surrogate pair\n      codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n    } else if (leadSurrogate) {\n      // valid bmp char, but last char was a lead\n      if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n    }\n\n    leadSurrogate = null\n\n    // encode utf8\n    if (codePoint < 0x80) {\n      if ((units -= 1) < 0) break\n      bytes.push(codePoint)\n    } else if (codePoint < 0x800) {\n      if ((units -= 2) < 0) break\n      bytes.push(\n        codePoint >> 0x6 | 0xC0,\n        codePoint & 0x3F | 0x80\n      )\n    } else if (codePoint < 0x10000) {\n      if ((units -= 3) < 0) break\n      bytes.push(\n        codePoint >> 0xC | 0xE0,\n        codePoint >> 0x6 & 0x3F | 0x80,\n        codePoint & 0x3F | 0x80\n      )\n    } else if (codePoint < 0x110000) {\n      if ((units -= 4) < 0) break\n      bytes.push(\n        codePoint >> 0x12 | 0xF0,\n        codePoint >> 0xC & 0x3F | 0x80,\n        codePoint >> 0x6 & 0x3F | 0x80,\n        codePoint & 0x3F | 0x80\n      )\n    } else {\n      throw new Error('Invalid code point')\n    }\n  }\n\n  return bytes\n}\n\nfunction asciiToBytes (str) {\n  var byteArray = []\n  for (var i = 0; i < str.length; ++i) {\n    // Node's code seems to be doing this and not & 0x7F..\n    byteArray.push(str.charCodeAt(i) & 0xFF)\n  }\n  return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n  var c, hi, lo\n  var byteArray = []\n  for (var i = 0; i < str.length; ++i) {\n    if ((units -= 2) < 0) break\n\n    c = str.charCodeAt(i)\n    hi = c >> 8\n    lo = c % 256\n    byteArray.push(lo)\n    byteArray.push(hi)\n  }\n\n  return byteArray\n}\n\nfunction base64ToBytes (str) {\n  return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n  for (var i = 0; i < length; ++i) {\n    if ((i + offset >= dst.length) || (i >= src.length)) break\n    dst[i + offset] = src[i]\n  }\n  return i\n}\n\nfunction isnan (val) {\n  return val !== val // eslint-disable-line no-self-compare\n}\n"],"sourceRoot":""}