{"version":3,"sources":["../../.yarn/cache/browser-pack-npm-6.1.0-67557e011b-9e5993d3ee.zip/node_modules/browser-pack/_prelude.js","public/js/app/holds.js"],"names":[],"mappings":"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","file":"holds.app.min.js","sourcesContent":["(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c=\"function\"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error(\"Cannot find module '\"+i+\"'\");throw a.code=\"MODULE_NOT_FOUND\",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u=\"function\"==typeof require&&require,i=0;i 30) {\n $('.js-bottomButton').addClass('Holds-wideButton');\n }\n\n // Shrink long prerelease date text\n var prereleaseDate = $('.js-prereleaseDate');\n if (prereleaseDate.first().text().length > 50) {\n prereleaseDate.css('font-size', '9pt');\n }\n});\n\n/**\n * Send suspended hold request\n * @param mediaId\n */\nwindow.suspendHold = function (mediaId, days = 0) {\n $.ajax({\n url: window.url(window.routes.mediaSuspendHold, { mediaId: mediaId }),\n type: 'PUT',\n data: {\n numberOfDays: featureManager.isEnabled('holdRedelivery')\n ? days\n : $('#select-suspension').val(), // Number of days set by user\n },\n success: function (data) {\n if (!featureManager.isEnabled('holdRedelivery')) {\n $('#suspension-modal').foundation('reveal', 'close');\n window.displaySuspendDate(\n mediaId,\n $('#select-suspension').val()\n );\n } else {\n window.displaySuspendDate(mediaId, days);\n }\n\n window.changeMenuOption(mediaId, true);\n },\n error: function (jqXHR, textStatus, errorThrown) {\n var response = JSON.parse(jqXHR.responseText);\n if (featureManager.isEnabled('holdRedelivery')) {\n $('.close-reveal-modal').click();\n } else {\n $('#suspension-modal').foundation('reveal', 'close');\n }\n\n if (response.errorCode && toaster) {\n var link =\n '' +\n window.html('pleaseContactSupport') +\n '';\n toaster.push(\n '' +\n window.html('genericError') +\n ' ' +\n window.text('error.' + response.errorCode, {\n link: link,\n }),\n 'error'\n );\n } else if (response.sessionExpired) {\n window.globalEvents.trigger('user:session:expired');\n }\n },\n });\n};\n\n/**\n * Send suspended hold removal request\n * @param mediaId\n */\nwindow.removeSuspendedHold = function (mediaId) {\n // Remove this when holdRelivery is no longer flagged\n // and replace the calls with removeSuspension(mediaId)\n $.ajax({\n url: window.url(window.routes.mediaRemoveHoldSuspension, {\n mediaId: mediaId,\n }),\n type: 'DELETE',\n success: function (data) {\n // Change any UI components here\n if (featureManager.isEnabled('holdRedelivery')) {\n $('.close-reveal-modal').click();\n $('.autoSuspendContainer').remove();\n } else {\n $('#remove-suspension-modal').foundation('reveal', 'close');\n }\n\n $('#suspendDate-' + mediaId).remove();\n window.changeMenuOption(mediaId, false);\n },\n error: function (jqXHR, textStatus, errorThrown) {\n $('#remove-suspension-modal').foundation('reveal', 'close');\n },\n });\n};\n\nwindow.callToRemoveSuspension = function (mediaId) {\n return new Promise((resolve, reject) =>\n $.ajax({\n url: window.url(window.routes.mediaRemoveHoldSuspension, {\n mediaId: mediaId,\n }),\n type: 'DELETE',\n })\n .done((response) => resolve(response))\n .fail((xhr, status, err) => reject(err))\n );\n};\n\nwindow.removeSuspension = function (mediaId) {\n let promise = window.callToRemoveSuspension(mediaId);\n\n promise\n .then((res) => {\n // Change any UI components here\n $('.close-reveal-modal').click();\n $('.autoSuspendContainer').remove();\n\n $('#suspendDate-' + mediaId).remove();\n window.changeMenuOption(mediaId, false);\n window.location.reload();\n })\n .catch(() => {\n if (toaster) {\n toaster.push(window.text('errorOccurred'), 'error');\n }\n $('#remove-suspension-modal').foundation('reveal', 'close');\n });\n};\n\nwindow.alterSuspendButton = function (that) {\n var mediaId = $(that).data('media-id');\n\n if (!featureManager.isEnabled('holdRedelivery')) {\n $('#suspend-hold').attr(\n 'onclick',\n 'window.suspendHold(' + mediaId + ')'\n );\n $('#remove-suspend').attr(\n 'onclick',\n 'window.removeSuspendedHold(' + mediaId + ')'\n );\n $('.mediaTitle')\n .text($(that).data('title'))\n .attr('aria-label', $(that).data('title'));\n\n if ($(that).attr('data-button') == 'edit-hold') {\n $('.remove-suspension-button').show();\n var suspendPeriod = $(that).attr('data-suspend-period');\n $('#select-suspension').val(suspendPeriod);\n } else {\n $('.remove-suspension-button').hide();\n }\n }\n};\n\n$('.title-contents').on(\n 'click',\n 'a[data-reveal-id=\"suspension-modal\"]',\n function () {\n window.alterSuspendButton(this);\n }\n);\n\n$('a[data-reveal-id=\"remove-suspension-modal\"]').on('click', function () {\n var mediaId = $(this).data('media-id');\n featureManager.isEnabled('holdRedelivery')\n ? $('#remove-suspend').attr(\n 'onclick',\n 'window.removeSuspension(' + mediaId + ')'\n )\n : $('#remove-suspend').attr(\n 'onclick',\n 'window.removeSuspendedHold(' + mediaId + ')'\n );\n $('.mediaTitle').text($(this).data('title'));\n});\n\nwindow.displaySuspendDate = function (mediaId, days) {\n var date = addDays(days);\n var suspendedUntilDate = window.html('accountHolds.suspendedUntil', {\n date: date,\n });\n if ($('#suspension-container-' + mediaId).length) {\n // element exists\n $('#suspendDate-' + mediaId).remove();\n $('#suspension-container-' + mediaId).append(\n '

' +\n suspendedUntilDate +\n '

'\n );\n } else {\n var container = $(\n 'div.title-container.' +\n mediaId +\n ' div.title-contents div.title-details-container'\n );\n var lastElem = container.children('div.holds-explanation-container');\n\n var dateContainer =\n '
' +\n '

' +\n suspendedUntilDate +\n '

' +\n '
';\n lastElem.after(dateContainer);\n }\n};\n\nwindow.changeMenuOption = function (mediaId, suspended) {\n if (suspended) {\n // If title is suspended, add \"Remove suspension\" option\n var suspendPeriod = +$('#select-suspension').val();\n\n $('a#edit-hold-' + mediaId).attr('data-suspend-period', suspendPeriod);\n\n $('a#suspend-' + mediaId)\n .html(\n \" Edit hold\"\n )\n .attr({\n id: 'edit-hold-' + mediaId,\n 'aria-label': window.html('accountHolds.editHold'),\n 'data-button': 'edit-hold',\n 'data-suspend-period': suspendPeriod,\n });\n } else {\n $('a#edit-hold-' + mediaId)\n .html(\n \" Suspend hold\"\n )\n .attr({\n 'aria-label': window.html('accountHolds.suspendHold'),\n 'data-button': 'suspend-hold',\n id: 'suspend-' + mediaId,\n });\n }\n};\n\n// Target select box problems for old Android devices\nif (bowser.android && parseInt(bowser.osversion, 10) < 4) {\n // Change the suspension modal position to \"fixed\" to allow the select to work\n $('#suspension-modal')\n .on('opened.fndtn.reveal', function () {\n $('#suspension-modal').css('position', 'fixed');\n })\n .on('closed.fndtn.reveal', function () {\n // Change the modal position back to absolute so it displays correctly the next time it's opened\n $('#suspension-modal').css('position', 'absolute');\n });\n\n // Hide and show the parent container of the select to re-render and show the user's selection\n // For whatever reason, $(this).parent() does not work here\n $('select').on('change', function () {\n $('.suspend-select-container').hide();\n setTimeout(function () {\n $('.suspend-select-container').show();\n }, 0);\n });\n}\n"],"preExistingComment":"//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy55YXJuL2NhY2hlL2Jyb3dzZXItcGFjay1ucG0tNi4xLjAtNjc1NTdlMDExYi05ZTU5OTNkM2VlLnppcC9ub2RlX21vZHVsZXMvYnJvd3Nlci1wYWNrL19wcmVsdWRlLmpzIiwicHVibGljL2pzL2FwcC9ob2xkcy5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0FDQUEsRUFBRSxRQUFGLEVBQVksS0FBWixDQUFrQixZQUFZO0FBQzFCO0FBQ0EsUUFBSSxFQUFFLGdCQUFGLEVBQW9CLEtBQXBCLEdBQTRCLElBQTVCLEdBQW1DLE1BQW5DLEdBQTRDLEVBQWhELEVBQW9EO0FBQ2hELFVBQUUsa0JBQUYsRUFBc0IsUUFBdEIsQ0FBK0Isa0JBQS9CO0FBQ0g7O0FBRUQ7QUFDQSxRQUFJLGlCQUFpQixFQUFFLG9CQUFGLENBQXJCO0FBQ0EsUUFBSSxlQUFlLEtBQWYsR0FBdUIsSUFBdkIsR0FBOEIsTUFBOUIsR0FBdUMsRUFBM0MsRUFBK0M7QUFDM0MsdUJBQWUsR0FBZixDQUFtQixXQUFuQixFQUFnQyxLQUFoQztBQUNIO0FBQ0osQ0FYRDs7QUFhQTs7OztBQUlBLE9BQU8sV0FBUCxHQUFxQixVQUFVLE9BQVYsRUFBNkI7QUFBQSxRQUFWLElBQVUsdUVBQUgsQ0FBRzs7QUFDOUMsTUFBRSxJQUFGLENBQU87QUFDSCxhQUFLLE9BQU8sR0FBUCxDQUFXLE9BQU8sTUFBUCxDQUFjLGdCQUF6QixFQUEyQyxFQUFFLFNBQVMsT0FBWCxFQUEzQyxDQURGO0FBRUgsY0FBTSxLQUZIO0FBR0gsY0FBTTtBQUNGLDBCQUFjLGVBQWUsU0FBZixDQUF5QixnQkFBekIsSUFDUixJQURRLEdBRVIsRUFBRSxvQkFBRixFQUF3QixHQUF4QixFQUhKLENBR21DO0FBSG5DLFNBSEg7QUFRSCxpQkFBUyxpQkFBVSxJQUFWLEVBQWdCO0FBQ3JCLGdCQUFJLENBQUMsZUFBZSxTQUFmLENBQXlCLGdCQUF6QixDQUFMLEVBQWlEO0FBQzdDLGtCQUFFLG1CQUFGLEVB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U0FKVjtBQVNIO0FBQ0osQ0E1QkQ7O0FBOEJBO0FBQ0EsSUFBSSxPQUFPLE9BQVAsSUFBa0IsU0FBUyxPQUFPLFNBQWhCLEVBQTJCLEVBQTNCLElBQWlDLENBQXZELEVBQTBEO0FBQ3REO0FBQ0EsTUFBRSxtQkFBRixFQUNLLEVBREwsQ0FDUSxxQkFEUixFQUMrQixZQUFZO0FBQ25DLFVBQUUsbUJBQUYsRUFBdUIsR0FBdkIsQ0FBMkIsVUFBM0IsRUFBdUMsT0FBdkM7QUFDSCxLQUhMLEVBSUssRUFKTCxDQUlRLHFCQUpSLEVBSStCLFlBQVk7QUFDbkM7QUFDQSxVQUFFLG1CQUFGLEVBQXVCLEdBQXZCLENBQTJCLFVBQTNCLEVBQXVDLFVBQXZDO0FBQ0gsS0FQTDs7QUFTQTtBQUNBO0FBQ0EsTUFBRSxRQUFGLEVBQVksRUFBWixDQUFlLFFBQWYsRUFBeUIsWUFBWTtBQUNqQyxVQUFFLDJCQUFGLEVBQStCLElBQS9CO0FBQ0EsbUJBQVcsWUFBWTtBQUNuQixjQUFFLDJCQUFGLEVBQStCLElBQS9CO0FBQ0gsU0FGRCxFQUVHLENBRkg7QUFHSCxLQUxEO0FBTUgiLCJmaWxlIjoiZ2VuZXJhdGVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbigpe2Z1bmN0aW9uIHIoZSxuLHQpe2Z1bmN0aW9uIG8oaSxmKXtpZighbltpXSl7aWYoIWVbaV0pe3ZhciBjPVwiZnVuY3Rpb25cIj09dHlwZW9mIHJlcXVpcmUmJnJlcXVpcmU7aWYoIWYmJmMpcmV0dXJuIGMoaSwhMCk7aWYodSlyZXR1cm4gdShpLCEwKTt2YXIgYT1uZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiK2krXCInXCIpO3Rocm93IGEuY29kZT1cIk1PRFVMRV9OT1RfRk9VTkRcIixhfXZhciBwPW5baV09e2V4cG9ydHM6e319O2VbaV1bMF0uY2FsbChwLmV4cG9ydHMsZnVuY3Rpb24ocil7dmFyIG49ZVtpXVsxXVtyXTtyZXR1cm4gbyhufHxyKX0scCxwLmV4cG9ydHMscixlLG4sdCl9cmV0dXJuIG5baV0uZXhwb3J0c31mb3IodmFyIHU9XCJmdW5jdGlvblwiPT10eXBlb2YgcmVxdWlyZSYmcmVxdWlyZSxpPTA7aTx0Lmxlbmd0aDtpKyspbyh0W2ldKTtyZXR1cm4gb31yZXR1cm4gcn0pKCkiLCIkKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbiAoKSB7XG4gICAgLy8gU2hyaW5rIGxvbmcgaG9sZHMgYWN0aW9uIGJ1dHRvbnNcbiAgICBpZiAoJCgnLmpzLWhvbGRBY3Rpb24nKS5maXJzdCgpLnRleHQoKS5sZW5ndGggPiAzMCkge1xuICAgICAgICAkKCcuanMtYm90dG9tQnV0dG9uJykuYWRkQ2xhc3MoJ0hvbGRzLXdpZGVCdXR0b24nKTtcbiAgICB9XG5cbiAgICAvLyBTaHJpbmsgbG9uZyBwcmVyZWxlYXNlIGRhdGUgdGV4dFxuICAgIHZhciBwcmVyZWxlYXNlRGF0ZSA9ICQoJy5qcy1wcmVyZWxlYXNlRGF0ZScpO1xuICAgIGlmIChwcmVyZWxlYXNlRGF0ZS5maXJzdCgpLnRleHQoKS5sZW5ndGggPiA1MCkge1xuICAgICAgICBwcmVyZWxlYXNlRGF0ZS5jc3MoJ2ZvbnQtc2l6ZScsICc5cHQnKTtcbiAgICB9XG59KTtcblxuLyoqXG4gKiBTZW5kIHN1c3BlbmRlZCBob2xkIHJlcXVlc3RcbiAqIEBwYXJhbSBtZWRpYUlkXG4gKi9cbndpbmRvdy5zdXNwZW5kSG9sZCA9IGZ1bmN0aW9uIChtZWRpYUlkLCBkYXlzID0gMCkge1xuICAgICQuYWpheCh7XG4gICAgICAgIHVybDogd2luZG93LnVybCh3aW5kb3cucm91dGVzLm1lZGlhU3VzcGVuZEhvbGQsIHsgbWVkaWFJZDogbWVkaWFJZCB9KSxcbiAgICAgICAgdHlwZTogJ1BVVCcsXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIG51bWJlck9mRGF5czogZmVhdHVyZU1hbmFnZXIuaXNFbmFibGVkKCdob2xkUmVkZWxpdmVyeScpXG4gICAgICAgICAgICAgICAgPyBkYXlzXG4gICAgICAgICAgICAgICAgOiAkKCcjc2VsZWN0LXN1c3BlbnNpb24nKS52YWwoKSwgLy8gTnVtYmVyIG9mIGRheXMgc2V0IGJ5IHVzZXJcbiAgICAgICAgfSxcbiAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgICAgIGlmICghZmVhdHVyZU1hbmFnZXIuaXNFbmFibGVkKCdob2xkUmVkZWxpdmVyeScpKSB7XG4gICAgICAgICAgICAgICAgJCgnI3N1c3BlbnNpb24tbW9kYWwnKS5mb3VuZGF0aW9uKCdyZXZlYWwnLCAnY2xvc2UnKTtcbiAgICAgICAgICAgICAgICB3aW5kb3cuZGlzcGxheVN1c3BlbmREYXRlKFxuICAgICAgICAgICAgICAgICAgICBtZWRpYUlkLFxuICAgICAgICAgICAgICAgICAgICAkKCcjc2VsZWN0LXN1c3BlbnNpb24nKS52YWwoKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHdpbmRvdy5kaXNwbGF5U3VzcGVuZERhdGUobWVkaWFJZCwgZGF5cyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHdpbmRvdy5jaGFuZ2VNZW51T3B0aW9uKG1lZGlhSWQsIHRydWUpO1xuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogZnVuY3Rpb24gKGpxWEhSLCB0ZXh0U3RhdHVzLCBlcnJvclRocm93bikge1xuICAgICAgICAgICAgdmFyIHJlc3BvbnNlID0gSlNPTi5wYXJzZShqcVhIUi5yZXNwb25zZVRleHQpO1xuICAgICAgICAgICAgaWYgKGZlYXR1cmVNYW5hZ2VyLmlzRW5hYmxlZCgnaG9sZFJlZGVsaXZlcnknKSkge1xuICAgICAgICAgICAgICAgICQoJy5jbG9zZS1yZXZlYWwtbW9kYWwnKS5jbGljaygpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAkKCcjc3VzcGVuc2lvbi1tb2RhbCcpLmZvdW5kYXRpb24oJ3JldmVhbCcsICdjbG9zZScpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAocmVzcG9uc2UuZXJyb3JDb2RlICYmIHRvYXN0ZXIpIHtcbiAgICAgICAgICAgICAgICB2YXIgbGluayA9XG4gICAgICAgICAgICAgICAgICAgICc8YSBjbGFzcz1cImJvbGRcIiBocmVmPVwiJyArXG4gICAgICAgICAgICAgICAgICAgIHdpbmRvdy51cmwod2luZG93LnJvdXRlcy5zdXBwb3J0TWVtYmVycykgK1xuICAgICAgICAgICAgICAgICAgICAnXCIgdGFiaW5kZXg9XCIwXCI+JyArXG4gICAgICAgICAgICAgICAgICAgIHdpbmRvdy5odG1sKCdwbGVhc2VDb250YWN0U3VwcG9ydCcpICtcbiAgICAgICAgICAgICAgICAgICAgJzwvYT4nO1xuICAgICAgICAgICAgICAgIHRvYXN0ZXIucHVzaChcbiAgICAgICAgICAgICAgICAgICAgJzxzdHJvbmc+JyArXG4gICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cuaHRtbCgnZ2VuZXJpY0Vycm9yJykgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJzwvc3Ryb25nPiAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy50ZXh0KCdlcnJvci4nICsgcmVzcG9uc2UuZXJyb3JDb2RlLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluazogbGluayxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAnZXJyb3InXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocmVzcG9uc2Uuc2Vzc2lvbkV4cGlyZWQpIHtcbiAgICAgICAgICAgICAgICB3aW5kb3cuZ2xvYmFsRXZlbnRzLnRyaWdnZXIoJ3VzZXI6c2Vzc2lvbjpleHBpcmVkJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgfSk7XG59O1xuXG4vKipcbiAqIFNlbmQgc3VzcGVuZGVkIGhvbGQgcmVtb3ZhbCByZXF1ZXN0XG4gKiBAcGFyYW0gbWVkaWFJZFxuICovXG53aW5kb3cucmVtb3ZlU3VzcGVuZGVkSG9sZCA9IGZ1bmN0aW9uIChtZWRpYUlkKSB7XG4gICAgLy8gUmVtb3ZlIHRoaXMgd2hlbiBob2xkUmVsaXZlcnkgaXMgbm8gbG9uZ2VyIGZsYWdnZWRcbiAgICAvLyBhbmQgcmVwbGFjZSB0aGUgY2FsbHMgd2l0aCByZW1vdmVTdXNwZW5zaW9uKG1lZGlhSWQpXG4gICAgJC5hamF4KHtcbiAgICAgICAgdXJsOiB3aW5kb3cudXJsKHdpbmRvdy5yb3V0ZXMubWVkaWFSZW1vdmVIb2xkU3VzcGVuc2lvbiwge1xuICAgICAgICAgICAgbWVkaWFJZDogbWVkaWFJZCxcbiAgICAgICAgfSksXG4gICAgICAgIHR5cGU6ICdERUxFVEUnLFxuICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICAgICAgLy8gQ2hhbmdlIGFueSBVSSBjb21wb25lbnRzIGhlcmVcbiAgICAgICAgICAgIGlmIChmZWF0dXJlTWFuYWdlci5pc0VuYWJsZWQoJ2hvbGRSZWRlbGl2ZXJ5JykpIHtcbiAgICAgICAgICAgICAgICAkKCcuY2xvc2UtcmV2ZWFsLW1vZGFsJykuY2xpY2soKTtcbiAgICAgICAgICAgICAgICAkKCcuYXV0b1N1c3BlbmRDb250YWluZXInKS5yZW1vdmUoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgJCgnI3JlbW92ZS1zdXNwZW5zaW9uLW1vZGFsJykuZm91bmRhdGlvbigncmV2ZWFsJywgJ2Nsb3NlJyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICQoJyNzdXNwZW5kRGF0ZS0nICsgbWVkaWFJZCkucmVtb3ZlKCk7XG4gICAgICAgICAgICB3aW5kb3cuY2hhbmdlTWVudU9wdGlvbihtZWRpYUlkLCBmYWxzZSk7XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiBmdW5jdGlvbiAoanFYSFIsIHRleHRTdGF0dXMsIGVycm9yVGhyb3duKSB7XG4gICAgICAgICAgICAkKCcjcmVtb3ZlLXN1c3BlbnNpb24tbW9kYWwnKS5mb3VuZGF0aW9uKCdyZXZlYWwnLCAnY2xvc2UnKTtcbiAgICAgICAgfSxcbiAgICB9KTtcbn07XG5cbndpbmRvdy5jYWxsVG9SZW1vdmVTdXNwZW5zaW9uID0gZnVuY3Rpb24gKG1lZGlhSWQpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT5cbiAgICAgICAgJC5hamF4KHtcbiAgICAgICAgICAgIHVybDogd2luZG93LnVybCh3aW5kb3cucm91dGVzLm1lZGlhUmVtb3ZlSG9sZFN1c3BlbnNpb24sIHtcbiAgICAgICAgICAgICAgICBtZWRpYUlkOiBtZWRpYUlkLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB0eXBlOiAnREVMRVRFJyxcbiAgICAgICAgfSlcbiAgICAgICAgICAgIC5kb25lKChyZXNwb25zZSkgPT4gcmVzb2x2ZShyZXNwb25zZSkpXG4gICAgICAgICAgICAuZmFpbCgoeGhyLCBzdGF0dXMsIGVycikgPT4gcmVqZWN0KGVycikpXG4gICAgKTtcbn07XG5cbndpbmRvdy5yZW1vdmVTdXNwZW5zaW9uID0gZnVuY3Rpb24gKG1lZGlhSWQpIHtcbiAgICBsZXQgcHJvbWlzZSA9IHdpbmRvdy5jYWxsVG9SZW1vdmVTdXNwZW5zaW9uKG1lZGlhSWQpO1xuXG4gICAgcHJvbWlzZVxuICAgICAgICAudGhlbigocmVzKSA9PiB7XG4gICAgICAgICAgICAvLyBDaGFuZ2UgYW55IFVJIGNvbXBvbmVudHMgaGVyZVxuICAgICAgICAgICAgJCgnLmNsb3NlLXJldmVhbC1tb2RhbCcpLmNsaWNrKCk7XG4gICAgICAgICAgICAkKCcuYXV0b1N1c3BlbmRDb250YWluZXInKS5yZW1vdmUoKTtcblxuICAgICAgICAgICAgJCgnI3N1c3BlbmREYXRlLScgKyBtZWRpYUlkKS5yZW1vdmUoKTtcbiAgICAgICAgICAgIHdpbmRvdy5jaGFuZ2VNZW51T3B0aW9uKG1lZGlhSWQsIGZhbHNlKTtcbiAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKTtcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKCgpID0+IHtcbiAgICAgICAgICAgIGlmICh0b2FzdGVyKSB7XG4gICAgICAgICAgICAgICAgdG9hc3Rlci5wdXNoKHdpbmRvdy50ZXh0KCdlcnJvck9jY3VycmVkJyksICdlcnJvcicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgJCgnI3JlbW92ZS1zdXNwZW5zaW9uLW1vZGFsJykuZm91bmRhdGlvbigncmV2ZWFsJywgJ2Nsb3NlJyk7XG4gICAgICAgIH0pO1xufTtcblxud2luZG93LmFsdGVyU3VzcGVuZEJ1dHRvbiA9IGZ1bmN0aW9uICh0aGF0KSB7XG4gICAgdmFyIG1lZGlhSWQgPSAkKHRoYXQpLmRhdGEoJ21lZGlhLWlkJyk7XG5cbiAgICBpZiAoIWZlYXR1cmVNYW5hZ2VyLmlzRW5hYmxlZCgnaG9sZFJlZGVsaXZlcnknKSkge1xuICAgICAgICAkKCcjc3VzcGVuZC1ob2xkJykuYXR0cihcbiAgICAgICAgICAgICdvbmNsaWNrJyxcbiAgICAgICAgICAgICd3aW5kb3cuc3VzcGVuZEhvbGQoJyArIG1lZGlhSWQgKyAnKSdcbiAgICAgICAgKTtcbiAgICAgICAgJCgnI3JlbW92ZS1zdXNwZW5kJykuYXR0cihcbiAgICAgICAgICAgICdvbmNsaWNrJyxcbiAgICAgICAgICAgICd3aW5kb3cucmVtb3ZlU3VzcGVuZGVkSG9sZCgnICsgbWVkaWFJZCArICcpJ1xuICAgICAgICApO1xuICAgICAgICAkKCcubWVkaWFUaXRsZScpXG4gICAgICAgICAgICAudGV4dCgkKHRoYXQpLmRhdGEoJ3RpdGxlJykpXG4gICAgICAgICAgICAuYXR0cignYXJpYS1sYWJlbCcsICQodGhhdCkuZGF0YSgndGl0bGUnKSk7XG5cbiAgICAgICAgaWYgKCQodGhhdCkuYXR0cignZGF0YS1idXR0b24nKSA9PSAnZWRpdC1ob2xkJykge1xuICAgICAgICAgICAgJCgnLnJlbW92ZS1zdXNwZW5zaW9uLWJ1dHRvbicpLnNob3coKTtcbiAgICAgICAgICAgIHZhciBzdXNwZW5kUGVyaW9kID0gJCh0aGF0KS5hdHRyKCdkYXRhLXN1c3BlbmQtcGVyaW9kJyk7XG4gICAgICAgICAgICAkKCcjc2VsZWN0LXN1c3BlbnNpb24nKS52YWwoc3VzcGVuZFBlcmlvZCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAkKCcucmVtb3ZlLXN1c3BlbnNpb24tYnV0dG9uJykuaGlkZSgpO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuJCgnLnRpdGxlLWNvbnRlbnRzJykub24oXG4gICAgJ2NsaWNrJyxcbiAgICAnYVtkYXRhLXJldmVhbC1pZD1cInN1c3BlbnNpb24tbW9kYWxcIl0nLFxuICAgIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgd2luZG93LmFsdGVyU3VzcGVuZEJ1dHRvbih0aGlzKTtcbiAgICB9XG4pO1xuXG4kKCdhW2RhdGEtcmV2ZWFsLWlkPVwicmVtb3ZlLXN1c3BlbnNpb24tbW9kYWxcIl0nKS5vbignY2xpY2snLCBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIG1lZGlhSWQgPSAkKHRoaXMpLmRhdGEoJ21lZGlhLWlkJyk7XG4gICAgZmVhdHVyZU1hbmFnZXIuaXNFbmFibGVkKCdob2xkUmVkZWxpdmVyeScpXG4gICAgICAgID8gJCgnI3JlbW92ZS1zdXNwZW5kJykuYXR0cihcbiAgICAgICAgICAgICAgJ29uY2xpY2snLFxuICAgICAgICAgICAgICAnd2luZG93LnJlbW92ZVN1c3BlbnNpb24oJyArIG1lZGlhSWQgKyAnKSdcbiAgICAgICAgICApXG4gICAgICAgIDogJCgnI3JlbW92ZS1zdXNwZW5kJykuYXR0cihcbiAgICAgICAgICAgICAgJ29uY2xpY2snLFxuICAgICAgICAgICAgICAnd2luZG93LnJlbW92ZVN1c3BlbmRlZEhvbGQoJyArIG1lZGlhSWQgKyAnKSdcbiAgICAgICAgICApO1xuICAgICQoJy5tZWRpYVRpdGxlJykudGV4dCgkKHRoaXMpLmRhdGEoJ3RpdGxlJykpO1xufSk7XG5cbndpbmRvdy5kaXNwbGF5U3VzcGVuZERhdGUgPSBmdW5jdGlvbiAobWVkaWFJZCwgZGF5cykge1xuICAgIHZhciBkYXRlID0gYWRkRGF5cyhkYXlzKTtcbiAgICB2YXIgc3VzcGVuZGVkVW50aWxEYXRlID0gd2luZG93Lmh0bWwoJ2FjY291bnRIb2xkcy5zdXNwZW5kZWRVbnRpbCcsIHtcbiAgICAgICAgZGF0ZTogZGF0ZSxcbiAgICB9KTtcbiAgICBpZiAoJCgnI3N1c3BlbnNpb24tY29udGFpbmVyLScgKyBtZWRpYUlkKS5sZW5ndGgpIHtcbiAgICAgICAgLy8gZWxlbWVudCBleGlzdHNcbiAgICAgICAgJCgnI3N1c3BlbmREYXRlLScgKyBtZWRpYUlkKS5yZW1vdmUoKTtcbiAgICAgICAgJCgnI3N1c3BlbnNpb24tY29udGFpbmVyLScgKyBtZWRpYUlkKS5hcHBlbmQoXG4gICAgICAgICAgICAnPGgzIGlkPVwic3VzcGVuZERhdGUtJyArXG4gICAgICAgICAgICAgICAgbWVkaWFJZCArXG4gICAgICAgICAgICAgICAgJ1wiIGNsYXNzPVwiaGVhZGVyLXh4eHNtYWxsXCI+PHNwYW4gY2xhc3M9XCJkYXRlLXRleHRcIj4nICtcbiAgICAgICAgICAgICAgICBzdXNwZW5kZWRVbnRpbERhdGUgK1xuICAgICAgICAgICAgICAgICc8L3NwYW4+PC9oMz4nXG4gICAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIGNvbnRhaW5lciA9ICQoXG4gICAgICAgICAgICAnZGl2LnRpdGxlLWNvbnRhaW5lci4nICtcbiAgICAgICAgICAgICAgICBtZWRpYUlkICtcbiAgICAgICAgICAgICAgICAnIGRpdi50aXRsZS1jb250ZW50cyBkaXYudGl0bGUtZGV0YWlscy1jb250YWluZXInXG4gICAgICAgICk7XG4gICAgICAgIHZhciBsYXN0RWxlbSA9IGNvbnRhaW5lci5jaGlsZHJlbignZGl2LmhvbGRzLWV4cGxhbmF0aW9uLWNvbnRhaW5lcicpO1xuXG4gICAgICAgIHZhciBkYXRlQ29udGFpbmVyID1cbiAgICAgICAgICAgICc8ZGl2IGNsYXNzPVwic3VzcGVuc2lvbi1kYXRlXCIgaWQ9XCJzdXNwZW5zaW9uLWNvbnRhaW5lci0nICtcbiAgICAgICAgICAgIG1lZGlhSWQgK1xuICAgICAgICAgICAgJ1wiPicgK1xuICAgICAgICAgICAgJzxoMyBpZD1cInN1c3BlbmREYXRlLScgK1xuICAgICAgICAgICAgbWVkaWFJZCArXG4gICAgICAgICAgICAnXCIgY2xhc3M9XCJoZWFkZXIteHh4c21hbGxcIj48c3BhbiBjbGFzcz1cImRhdGUtdGV4dFwiPicgK1xuICAgICAgICAgICAgc3VzcGVuZGVkVW50aWxEYXRlICtcbiAgICAgICAgICAgICc8L3NwYW4+PC9oMz4nICtcbiAgICAgICAgICAgICc8L2Rpdj4nO1xuICAgICAgICBsYXN0RWxlbS5hZnRlcihkYXRlQ29udGFpbmVyKTtcbiAgICB9XG59O1xuXG53aW5kb3cuY2hhbmdlTWVudU9wdGlvbiA9IGZ1bmN0aW9uIChtZWRpYUlkLCBzdXNwZW5kZWQpIHtcbiAgICBpZiAoc3VzcGVuZGVkKSB7XG4gICAgICAgIC8vIElmIHRpdGxlIGlzIHN1c3BlbmRlZCwgYWRkIFwiUmVtb3ZlIHN1c3BlbnNpb25cIiBvcHRpb25cbiAgICAgICAgdmFyIHN1c3BlbmRQZXJpb2QgPSArJCgnI3NlbGVjdC1zdXNwZW5zaW9uJykudmFsKCk7XG5cbiAgICAgICAgJCgnYSNlZGl0LWhvbGQtJyArIG1lZGlhSWQpLmF0dHIoJ2RhdGEtc3VzcGVuZC1wZXJpb2QnLCBzdXNwZW5kUGVyaW9kKTtcblxuICAgICAgICAkKCdhI3N1c3BlbmQtJyArIG1lZGlhSWQpXG4gICAgICAgICAgICAuaHRtbChcbiAgICAgICAgICAgICAgICBcIjxpIGNsYXNzPSdpY29uIGljb24tY2FsZW5kYXInIGFyaWEtaGlkZGVuPSd0cnVlJz48L2k+IEVkaXQgaG9sZFwiXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuYXR0cih7XG4gICAgICAgICAgICAgICAgaWQ6ICdlZGl0LWhvbGQtJyArIG1lZGlhSWQsXG4gICAgICAgICAgICAgICAgJ2FyaWEtbGFiZWwnOiB3aW5kb3cuaHRtbCgnYWNjb3VudEhvbGRzLmVkaXRIb2xkJyksXG4gICAgICAgICAgICAgICAgJ2RhdGEtYnV0dG9uJzogJ2VkaXQtaG9sZCcsXG4gICAgICAgICAgICAgICAgJ2RhdGEtc3VzcGVuZC1wZXJpb2QnOiBzdXNwZW5kUGVyaW9kLFxuICAgICAgICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgJCgnYSNlZGl0LWhvbGQtJyArIG1lZGlhSWQpXG4gICAgICAgICAgICAuaHRtbChcbiAgICAgICAgICAgICAgICBcIjxpIGNsYXNzPSdpY29uIGljb24tY2FsZW5kYXInIGFyaWEtaGlkZGVuPSd0cnVlJz48L2k+IFN1c3BlbmQgaG9sZFwiXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuYXR0cih7XG4gICAgICAgICAgICAgICAgJ2FyaWEtbGFiZWwnOiB3aW5kb3cuaHRtbCgnYWNjb3VudEhvbGRzLnN1c3BlbmRIb2xkJyksXG4gICAgICAgICAgICAgICAgJ2RhdGEtYnV0dG9uJzogJ3N1c3BlbmQtaG9sZCcsXG4gICAgICAgICAgICAgICAgaWQ6ICdzdXNwZW5kLScgKyBtZWRpYUlkLFxuICAgICAgICAgICAgfSk7XG4gICAgfVxufTtcblxuLy8gVGFyZ2V0IHNlbGVjdCBib3ggcHJvYmxlbXMgZm9yIG9sZCBBbmRyb2lkIGRldmljZXNcbmlmIChib3dzZXIuYW5kcm9pZCAmJiBwYXJzZUludChib3dzZXIub3N2ZXJzaW9uLCAxMCkgPCA0KSB7XG4gICAgLy8gQ2hhbmdlIHRoZSBzdXNwZW5zaW9uIG1vZGFsIHBvc2l0aW9uIHRvIFwiZml4ZWRcIiB0byBhbGxvdyB0aGUgc2VsZWN0IHRvIHdvcmtcbiAgICAkKCcjc3VzcGVuc2lvbi1tb2RhbCcpXG4gICAgICAgIC5vbignb3BlbmVkLmZuZHRuLnJldmVhbCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICQoJyNzdXNwZW5zaW9uLW1vZGFsJykuY3NzKCdwb3NpdGlvbicsICdmaXhlZCcpO1xuICAgICAgICB9KVxuICAgICAgICAub24oJ2Nsb3NlZC5mbmR0bi5yZXZlYWwnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAvLyBDaGFuZ2UgdGhlIG1vZGFsIHBvc2l0aW9uIGJhY2sgdG8gYWJzb2x1dGUgc28gaXQgZGlzcGxheXMgY29ycmVjdGx5IHRoZSBuZXh0IHRpbWUgaXQncyBvcGVuZWRcbiAgICAgICAgICAgICQoJyNzdXNwZW5zaW9uLW1vZGFsJykuY3NzKCdwb3NpdGlvbicsICdhYnNvbHV0ZScpO1xuICAgICAgICB9KTtcblxuICAgIC8vIEhpZGUgYW5kIHNob3cgdGhlIHBhcmVudCBjb250YWluZXIgb2YgdGhlIHNlbGVjdCB0byByZS1yZW5kZXIgYW5kIHNob3cgdGhlIHVzZXIncyBzZWxlY3Rpb25cbiAgICAvLyBGb3Igd2hhdGV2ZXIgcmVhc29uLCAkKHRoaXMpLnBhcmVudCgpIGRvZXMgbm90IHdvcmsgaGVyZVxuICAgICQoJ3NlbGVjdCcpLm9uKCdjaGFuZ2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICQoJy5zdXNwZW5kLXNlbGVjdC1jb250YWluZXInKS5oaWRlKCk7XG4gICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgJCgnLnN1c3BlbmQtc2VsZWN0LWNvbnRhaW5lcicpLnNob3coKTtcbiAgICAgICAgfSwgMCk7XG4gICAgfSk7XG59XG4iXX0="}