{"version":3,"sources":["node_modules/browser-pack/_prelude.js","node_modules/array-intersect/dist/array-intersect.js","node_modules/axios/index.js","node_modules/axios/lib/adapters/xhr.js","node_modules/axios/lib/axios.js","node_modules/axios/lib/cancel/Cancel.js","node_modules/axios/lib/cancel/CancelToken.js","node_modules/axios/lib/cancel/isCancel.js","node_modules/axios/lib/core/Axios.js","node_modules/axios/lib/core/InterceptorManager.js","node_modules/axios/lib/core/createError.js","node_modules/axios/lib/core/dispatchRequest.js","node_modules/axios/lib/core/enhanceError.js","node_modules/axios/lib/core/mergeConfig.js","node_modules/axios/lib/core/settle.js","node_modules/axios/lib/core/transformData.js","node_modules/axios/lib/defaults.js","node_modules/axios/lib/helpers/bind.js","node_modules/axios/lib/helpers/buildURL.js","node_modules/axios/lib/helpers/combineURLs.js","node_modules/axios/lib/helpers/cookies.js","node_modules/axios/lib/helpers/isAbsoluteURL.js","node_modules/axios/lib/helpers/isURLSameOrigin.js","node_modules/axios/lib/helpers/normalizeHeaderName.js","node_modules/axios/lib/helpers/parseHeaders.js","node_modules/axios/lib/helpers/spread.js","node_modules/axios/lib/utils.js","node_modules/axios/node_modules/is-buffer/index.js","node_modules/babel-helper-vue-jsx-merge-props/index.js","node_modules/babel-runtime/core-js/json/stringify.js","node_modules/babel-runtime/core-js/object/keys.js","node_modules/babel-runtime/core-js/promise.js","node_modules/babel-runtime/core-js/symbol.js","node_modules/babel-runtime/core-js/symbol/iterator.js","node_modules/babel-runtime/helpers/asyncToGenerator.js","node_modules/babel-runtime/helpers/classCallCheck.js","node_modules/babel-runtime/helpers/typeof.js","node_modules/babel-runtime/regenerator/index.js","node_modules/base64-js/index.js","node_modules/buffer/index.js","node_modules/buffer/node_modules/isarray/index.js","node_modules/core-js/library/fn/json/stringify.js","node_modules/core-js/library/fn/object/keys.js","node_modules/core-js/library/fn/promise.js","node_modules/core-js/library/fn/symbol/index.js","node_modules/core-js/library/fn/symbol/iterator.js","node_modules/core-js/library/modules/_a-function.js","node_modules/core-js/library/modules/_add-to-unscopables.js","node_modules/core-js/library/modules/_an-instance.js","node_modules/core-js/library/modules/_an-object.js","node_modules/core-js/library/modules/_array-includes.js","node_modules/core-js/library/modules/_classof.js","node_modules/core-js/library/modules/_cof.js","node_modules/core-js/library/modules/_core.js","node_modules/core-js/library/modules/_ctx.js","node_modules/core-js/library/modules/_defined.js","node_modules/core-js/library/modules/_descriptors.js","node_modules/core-js/library/modules/_dom-create.js","node_modules/core-js/library/modules/_enum-bug-keys.js","node_modules/core-js/library/modules/_enum-keys.js","node_modules/core-js/library/modules/_export.js","node_modules/core-js/library/modules/_fails.js","node_modules/core-js/library/modules/_for-of.js","node_modules/core-js/library/modules/_global.js","node_modules/core-js/library/modules/_has.js","node_modules/core-js/library/modules/_hide.js","node_modules/core-js/library/modules/_html.js","node_modules/core-js/library/modules/_ie8-dom-define.js","node_modules/core-js/library/modules/_invoke.js","node_modules/core-js/library/modules/_iobject.js","node_modules/core-js/library/modules/_is-array-iter.js","node_modules/core-js/library/modules/_is-array.js","node_modules/core-js/library/modules/_is-object.js","node_modules/core-js/library/modules/_iter-call.js","node_modules/core-js/library/modules/_iter-create.js","node_modules/core-js/library/modules/_iter-define.js","node_modules/core-js/library/modules/_iter-detect.js","node_modules/core-js/library/modules/_iter-step.js","node_modules/core-js/library/modules/_iterators.js","node_modules/core-js/library/modules/_library.js","node_modules/core-js/library/modules/_meta.js","node_modules/core-js/library/modules/_microtask.js","node_modules/core-js/library/modules/_new-promise-capability.js","node_modules/core-js/library/modules/_object-create.js","node_modules/core-js/library/modules/_object-dp.js","node_modules/core-js/library/modules/_object-dps.js","node_modules/core-js/library/modules/_object-gopd.js","node_modules/core-js/library/modules/_object-gopn-ext.js","node_modules/core-js/library/modules/_object-gopn.js","node_modules/core-js/library/modules/_object-gops.js","node_modules/core-js/library/modules/_object-gpo.js","node_modules/core-js/library/modules/_object-keys-internal.js","node_modules/core-js/library/modules/_object-keys.js","node_modules/core-js/library/modules/_object-pie.js","node_modules/core-js/library/modules/_object-sap.js","node_modules/core-js/library/modules/_perform.js","node_modules/core-js/library/modules/_promise-resolve.js","node_modules/core-js/library/modules/_property-desc.js","node_modules/core-js/library/modules/_redefine-all.js","node_modules/core-js/library/modules/_redefine.js","node_modules/core-js/library/modules/_set-species.js","node_modules/core-js/library/modules/_set-to-string-tag.js","node_modules/core-js/library/modules/_shared-key.js","node_modules/core-js/library/modules/_shared.js","node_modules/core-js/library/modules/_species-constructor.js","node_modules/core-js/library/modules/_string-at.js","node_modules/core-js/library/modules/_task.js","node_modules/core-js/library/modules/_to-absolute-index.js","node_modules/core-js/library/modules/_to-integer.js","node_modules/core-js/library/modules/_to-iobject.js","node_modules/core-js/library/modules/_to-length.js","node_modules/core-js/library/modules/_to-object.js","node_modules/core-js/library/modules/_to-primitive.js","node_modules/core-js/library/modules/_uid.js","node_modules/core-js/library/modules/_user-agent.js","node_modules/core-js/library/modules/_wks-define.js","node_modules/core-js/library/modules/_wks-ext.js","node_modules/core-js/library/modules/_wks.js","node_modules/core-js/library/modules/core.get-iterator-method.js","node_modules/core-js/library/modules/es6.array.iterator.js","node_modules/core-js/library/modules/es6.object.keys.js","node_modules/core-js/library/modules/es6.object.to-string.js","node_modules/core-js/library/modules/es6.promise.js","node_modules/core-js/library/modules/es6.string.iterator.js","node_modules/core-js/library/modules/es6.symbol.js","node_modules/core-js/library/modules/es7.promise.finally.js","node_modules/core-js/library/modules/es7.promise.try.js","node_modules/core-js/library/modules/es7.symbol.async-iterator.js","node_modules/core-js/library/modules/es7.symbol.observable.js","node_modules/core-js/library/modules/web.dom.iterable.js","node_modules/debounce/index.js","node_modules/decode-uri-component/index.js","node_modules/es6-promise/auto.js","node_modules/es6-promise/dist/es6-promise.js","node_modules/ieee754/index.js","node_modules/jquery/dist/jquery.js","node_modules/js-cookie/src/js.cookie.js","node_modules/magnific-popup/dist/jquery.magnific-popup.js","node_modules/merge/merge.js","node_modules/moment/moment.js","node_modules/mustache/mustache.js","node_modules/object-fit-images/dist/ofi.common-js.js","node_modules/polyfill-array-includes/index.js","node_modules/portal-vue/dist/portal-vue.js","node_modules/process/browser.js","node_modules/query-string/index.js","node_modules/query-string/node_modules/object-assign/index.js","node_modules/regenerator-runtime/runtime-module.js","node_modules/regenerator-runtime/runtime.js","node_modules/strict-uri-encode/index.js","node_modules/timers-browserify/main.js","node_modules/vue-hot-reload-api/dist/index.js","node_modules/vue-js-modal/dist/index.js","node_modules/vue-notification/dist/index.js","node_modules/vue-pagination-2/compiled/Pagination.js","node_modules/vue-pagination-2/compiled/bus.js","node_modules/vue-pagination-2/compiled/config.js","node_modules/vue-pagination-2/compiled/template.js","node_modules/vue-pagination-2/compiled/themes/bootstrap3.js","node_modules/vue-pagination-2/compiled/themes/bootstrap4.js","node_modules/vue-pagination-2/compiled/themes/bulma.js","node_modules/vue-pagination-2/index.js","node_modules/vue-router/dist/vue-router.common.js","node_modules/vue-tables-2/compiled/bus.js","node_modules/vue-tables-2/compiled/computed/all-columns.js","node_modules/vue-tables-2/compiled/computed/colspan.js","node_modules/vue-tables-2/compiled/computed/custom-q.js","node_modules/vue-tables-2/compiled/computed/datepicker-columns.js","node_modules/vue-tables-2/compiled/computed/filterable-columns.js","node_modules/vue-tables-2/compiled/computed/filtered-data.js","node_modules/vue-tables-2/compiled/computed/filtered-query.js","node_modules/vue-tables-2/compiled/computed/has-child-row.js","node_modules/vue-tables-2/compiled/computed/has-generic-filter.js","node_modules/vue-tables-2/compiled/computed/list-columns-object.js","node_modules/vue-tables-2/compiled/computed/opts.js","node_modules/vue-tables-2/compiled/computed/q.js","node_modules/vue-tables-2/compiled/computed/storage.js","node_modules/vue-tables-2/compiled/computed/table-data.js","node_modules/vue-tables-2/compiled/computed/templates-keys.js","node_modules/vue-tables-2/compiled/computed/total-pages.js","node_modules/vue-tables-2/compiled/config/defaults.js","node_modules/vue-tables-2/compiled/filters/custom-filters.js","node_modules/vue-tables-2/compiled/filters/format-date.js","node_modules/vue-tables-2/compiled/filters/highlight-matches.js","node_modules/vue-tables-2/compiled/filters/option-text.js","node_modules/vue-tables-2/compiled/helpers/is-empty.js","node_modules/vue-tables-2/compiled/helpers/is-valid-moment-object.js","node_modules/vue-tables-2/compiled/helpers/object-filled-keys-count.js","node_modules/vue-tables-2/compiled/helpers/resizeable-columns.js","node_modules/vue-tables-2/compiled/helpers/ucfirst.js","node_modules/vue-tables-2/compiled/index.js","node_modules/vue-tables-2/compiled/methods/apply-filters.js","node_modules/vue-tables-2/compiled/methods/cell-classes.js","node_modules/vue-tables-2/compiled/methods/child-row-toggler-class.js","node_modules/vue-tables-2/compiled/methods/client-search.js","node_modules/vue-tables-2/compiled/methods/column-class.js","node_modules/vue-tables-2/compiled/methods/currently-sorted.js","node_modules/vue-tables-2/compiled/methods/date-format.js","node_modules/vue-tables-2/compiled/methods/default-sort.js","node_modules/vue-tables-2/compiled/methods/dispatch.js","node_modules/vue-tables-2/compiled/methods/display.js","node_modules/vue-tables-2/compiled/methods/filterable.js","node_modules/vue-tables-2/compiled/methods/get-child-row-template.js","node_modules/vue-tables-2/compiled/methods/get-column-name.js","node_modules/vue-tables-2/compiled/methods/get-data.js","node_modules/vue-tables-2/compiled/methods/get-group-slot.js","node_modules/vue-tables-2/compiled/methods/get-heading-tooltip.js","node_modules/vue-tables-2/compiled/methods/get-heading.js","node_modules/vue-tables-2/compiled/methods/get-initial-date-range.js","node_modules/vue-tables-2/compiled/methods/get-name.js","node_modules/vue-tables-2/compiled/methods/get-open-child-rows.js","node_modules/vue-tables-2/compiled/methods/get-response-data.js","node_modules/vue-tables-2/compiled/methods/get-sort-fn.js","node_modules/vue-tables-2/compiled/methods/get-value.js","node_modules/vue-tables-2/compiled/methods/has-date-filters.js","node_modules/vue-tables-2/compiled/methods/init-custom-filters.js","node_modules/vue-tables-2/compiled/methods/init-date-filters.js","node_modules/vue-tables-2/compiled/methods/init-options.js","node_modules/vue-tables-2/compiled/methods/init-order-by.js","node_modules/vue-tables-2/compiled/methods/init-pagination.js","node_modules/vue-tables-2/compiled/methods/init-query.js","node_modules/vue-tables-2/compiled/methods/init-state.js","node_modules/vue-tables-2/compiled/methods/initial-order-ascending.js","node_modules/vue-tables-2/compiled/methods/is-date-filter.js","node_modules/vue-tables-2/compiled/methods/is-list-filter.js","node_modules/vue-tables-2/compiled/methods/is-text-filter.js","node_modules/vue-tables-2/compiled/methods/on-pagination.js","node_modules/vue-tables-2/compiled/methods/only-column.js","node_modules/vue-tables-2/compiled/methods/order-by-column.js","node_modules/vue-tables-2/compiled/methods/refresh.js","node_modules/vue-tables-2/compiled/methods/register-client-filters.js","node_modules/vue-tables-2/compiled/methods/register-server-filters.js","node_modules/vue-tables-2/compiled/methods/render.js","node_modules/vue-tables-2/compiled/methods/reset-query.js","node_modules/vue-tables-2/compiled/methods/row-was-clicked.js","node_modules/vue-tables-2/compiled/methods/send-request.js","node_modules/vue-tables-2/compiled/methods/server-search.js","node_modules/vue-tables-2/compiled/methods/set-columns-dropdown-close-listener.js","node_modules/vue-tables-2/compiled/methods/set-data.js","node_modules/vue-tables-2/compiled/methods/set-datepicker-text.js","node_modules/vue-tables-2/compiled/methods/set-filter.js","node_modules/vue-tables-2/compiled/methods/set-filters-dom.js","node_modules/vue-tables-2/compiled/methods/set-limit.js","node_modules/vue-tables-2/compiled/methods/set-order.js","node_modules/vue-tables-2/compiled/methods/set-page.js","node_modules/vue-tables-2/compiled/methods/set-user-multi-sort.js","node_modules/vue-tables-2/compiled/methods/should-show-column-on-init.js","node_modules/vue-tables-2/compiled/methods/sortable-chevron-class.js","node_modules/vue-tables-2/compiled/methods/sortable-class.js","node_modules/vue-tables-2/compiled/methods/sortable.js","node_modules/vue-tables-2/compiled/methods/toggle-child-row.js","node_modules/vue-tables-2/compiled/methods/toggle-column.js","node_modules/vue-tables-2/compiled/methods/toggle-columns-dropdown.js","node_modules/vue-tables-2/compiled/methods/toggle-group-direction.js","node_modules/vue-tables-2/compiled/methods/transform-date-strings-to-moment.js","node_modules/vue-tables-2/compiled/methods/update-state.js","node_modules/vue-tables-2/compiled/mixins/before-destroy.js","node_modules/vue-tables-2/compiled/mixins/computed.js","node_modules/vue-tables-2/compiled/mixins/created.js","node_modules/vue-tables-2/compiled/mixins/data.js","node_modules/vue-tables-2/compiled/mixins/methods.js","node_modules/vue-tables-2/compiled/modules/column-filters.js","node_modules/vue-tables-2/compiled/modules/columns-dropdown.js","node_modules/vue-tables-2/compiled/modules/date-filter.js","node_modules/vue-tables-2/compiled/modules/dropdown-item-wrapper.js","node_modules/vue-tables-2/compiled/modules/dropdown-pagination-count.js","node_modules/vue-tables-2/compiled/modules/dropdown-pagination.js","node_modules/vue-tables-2/compiled/modules/dropdown-wrapper.js","node_modules/vue-tables-2/compiled/modules/headings.js","node_modules/vue-tables-2/compiled/modules/list-filter.js","node_modules/vue-tables-2/compiled/modules/normal-filter.js","node_modules/vue-tables-2/compiled/modules/pagination.js","node_modules/vue-tables-2/compiled/modules/per-page-values.js","node_modules/vue-tables-2/compiled/modules/per-page.js","node_modules/vue-tables-2/compiled/modules/rows.js","node_modules/vue-tables-2/compiled/modules/sort-control.js","node_modules/vue-tables-2/compiled/modules/text-filter.js","node_modules/vue-tables-2/compiled/slots.js","node_modules/vue-tables-2/compiled/state/data.js","node_modules/vue-tables-2/compiled/state/mutations.js","node_modules/vue-tables-2/compiled/state/normal.js","node_modules/vue-tables-2/compiled/state/register-module.js","node_modules/vue-tables-2/compiled/state/state.js","node_modules/vue-tables-2/compiled/state/vuex.js","node_modules/vue-tables-2/compiled/table.js","node_modules/vue-tables-2/compiled/template-compiler.js","node_modules/vue-tables-2/compiled/templates/default.js","node_modules/vue-tables-2/compiled/templates/footer-pagination.js","node_modules/vue-tables-2/compiled/themes/bootstrap3.js","node_modules/vue-tables-2/compiled/themes/bootstrap4.js","node_modules/vue-tables-2/compiled/themes/bulma.js","node_modules/vue-tables-2/compiled/v-client-table.js","node_modules/vue-tables-2/compiled/v-server-table.js","node_modules/vue-tables-2/node_modules/clone/clone.js","node_modules/vue/dist/vue.common.js","node_modules/vue/dist/vue.common.prod.js","node_modules/vue/dist/vue.runtime.common.js","node_modules/vue/dist/vue.runtime.common.prod.js","node_modules/vueify/lib/insert-css.js","node_modules/vuejs-datepicker/dist/build.js","node_modules/vuex/dist/vuex.common.js","src/js/master.js","src/js/modules/analytics-actions.js","src/js/modules/branch-bar.js","src/js/modules/collection-maker.js","src/js/modules/custom-orderer-info.js","src/js/modules/custom-select.js","src/js/modules/filter-machine-accessories.js","src/js/modules/filter-news.js","src/js/modules/image-popup.js","src/js/modules/machine-search.js","src/js/modules/navigation.js","src/js/modules/select-material-language.js","src/js/modules/services/api.js","src/js/modules/services/data-service.js","src/js/modules/services/user-rights.js","src/js/modules/show-more-file-inputs.js","src/js/modules/video-popup.js","src/js/modules/vue/apps/app.vue","src/js/modules/vue/apps/common-settings.js","src/js/modules/vue/apps/complaints-app/index.js","src/js/modules/vue/apps/complaints-app/router/index.js","src/js/modules/vue/apps/customer-machines-app/router/index.js","src/js/modules/vue/apps/customers-app/index.js","src/js/modules/vue/apps/customers-app/router/index.js","src/js/modules/vue/apps/customers-app/view-home.vue","src/js/modules/vue/apps/forgotten-password-app/index.js","src/js/modules/vue/apps/forgotten-password-app/router/index.js","src/js/modules/vue/apps/own-company-app/router/index.js","src/js/modules/vue/apps/update-password-app/index.js","src/js/modules/vue/apps/update-password-app/router/index.js","src/js/modules/vue/apps/user-settings-app/index.js","src/js/modules/vue/apps/user-settings-app/router/index.js","src/js/modules/vue/apps/warranty-registrations-app/router/index.js","src/js/modules/vue/components/modal-company.vue","src/js/modules/vue/components/modal-complaint.vue","src/js/modules/vue/components/modal-user.vue","src/js/modules/vue/components/modal-warranty-registration.vue","src/js/modules/vue/components/the-1-column-layout.js","src/js/modules/vue/components/the-sidebar-layout.js","src/js/modules/vue/components/the-subheader.js","src/js/modules/vue/components/v-complaint-user-info.vue","src/js/modules/vue/components/v-currency-input.vue","src/js/modules/vue/components/v-data-items.vue","src/js/modules/vue/components/v-file.vue","src/js/modules/vue/components/v-form-field.vue","src/js/modules/vue/components/v-form.vue","src/js/modules/vue/components/v-modal-content.vue","src/js/modules/vue/components/v-number-input.vue","src/js/modules/vue/components/v-pass-strength.vue","src/js/modules/vue/components/view-change-password.vue","src/js/modules/vue/components/view-companies.vue","src/js/modules/vue/components/view-company.vue","src/js/modules/vue/components/view-complaint.vue","src/js/modules/vue/components/view-complaints.vue","src/js/modules/vue/components/view-customer-machine.vue","src/js/modules/vue/components/view-customer-machines.vue","src/js/modules/vue/components/view-edit-account.vue","src/js/modules/vue/components/view-forgotten-password.vue","src/js/modules/vue/components/view-update-password.vue","src/js/modules/vue/components/view-user-settings.vue","src/js/modules/vue/components/view-warranty-registration.vue","src/js/modules/vue/components/view-warranty-registrations.vue","src/js/modules/vue/store/index.js"],"names":[],"mappings":"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","file":"japa-extranet.min.js","sourceRoot":"/","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 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n rest[_key - 1] = arguments[_key];\n }\n\n return rest.reduce(function (accum, current) {\n return accum.filter(function (x) {\n return current.indexOf(x) !== -1;\n });\n }, first);\n};\n\nreturn intersect;\n\n})));\n","module.exports = require('./lib/axios');","'use strict';\n\nvar utils = require('./../utils');\nvar settle = require('./../core/settle');\nvar buildURL = require('./../helpers/buildURL');\nvar parseHeaders = require('./../helpers/parseHeaders');\nvar isURLSameOrigin = require('./../helpers/isURLSameOrigin');\nvar createError = require('../core/createError');\n\nmodule.exports = function xhrAdapter(config) {\n return new Promise(function dispatchXhrRequest(resolve, reject) {\n var requestData = config.data;\n var requestHeaders = config.headers;\n\n if (utils.isFormData(requestData)) {\n delete requestHeaders['Content-Type']; // Let the browser set it\n }\n\n var request = new XMLHttpRequest();\n\n // HTTP basic authentication\n if (config.auth) {\n var username = config.auth.username || '';\n var password = config.auth.password || '';\n requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);\n }\n\n request.open(config.method.toUpperCase(), buildURL(config.url, config.params, config.paramsSerializer), true);\n\n // Set the request timeout in MS\n request.timeout = config.timeout;\n\n // Listen for ready state\n request.onreadystatechange = function handleLoad() {\n if (!request || request.readyState !== 4) {\n return;\n }\n\n // The request errored out and we didn't get a response, this will be\n // handled by onerror instead\n // With one exception: request that using file: protocol, most browsers\n // will return status as 0 even though it's a successful request\n if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {\n return;\n }\n\n // Prepare the response\n var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;\n var responseData = !config.responseType || config.responseType === 'text' ? request.responseText : request.response;\n var response = {\n data: responseData,\n status: request.status,\n statusText: request.statusText,\n headers: responseHeaders,\n config: config,\n request: request\n };\n\n settle(resolve, reject, response);\n\n // Clean up request\n request = null;\n };\n\n // Handle browser request cancellation (as opposed to a manual cancellation)\n request.onabort = function handleAbort() {\n if (!request) {\n return;\n }\n\n reject(createError('Request aborted', config, 'ECONNABORTED', request));\n\n // Clean up request\n request = null;\n };\n\n // Handle low level network errors\n request.onerror = function handleError() {\n // Real errors are hidden from us by the browser\n // onerror should only fire if it's a network error\n reject(createError('Network Error', config, null, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle timeout\n request.ontimeout = function handleTimeout() {\n reject(createError('timeout of ' + config.timeout + 'ms exceeded', config, 'ECONNABORTED',\n request));\n\n // Clean up request\n request = null;\n };\n\n // Add xsrf header\n // This is only done if running in a standard browser environment.\n // Specifically not if we're in a web worker, or react-native.\n if (utils.isStandardBrowserEnv()) {\n var cookies = require('./../helpers/cookies');\n\n // Add xsrf header\n var xsrfValue = (config.withCredentials || isURLSameOrigin(config.url)) && config.xsrfCookieName ?\n cookies.read(config.xsrfCookieName) :\n undefined;\n\n if (xsrfValue) {\n requestHeaders[config.xsrfHeaderName] = xsrfValue;\n }\n }\n\n // Add headers to the request\n if ('setRequestHeader' in request) {\n utils.forEach(requestHeaders, function setRequestHeader(val, key) {\n if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\n // Remove Content-Type if data is undefined\n delete requestHeaders[key];\n } else {\n // Otherwise add header to the request\n request.setRequestHeader(key, val);\n }\n });\n }\n\n // Add withCredentials to request if needed\n if (config.withCredentials) {\n request.withCredentials = true;\n }\n\n // Add responseType to request if needed\n if (config.responseType) {\n try {\n request.responseType = config.responseType;\n } catch (e) {\n // Expected DOMException thrown by browsers not compatible XMLHttpRequest Level 2.\n // But, this can be suppressed for 'json' type as it can be parsed by default 'transformResponse' function.\n if (config.responseType !== 'json') {\n throw e;\n }\n }\n }\n\n // Handle progress if needed\n if (typeof config.onDownloadProgress === 'function') {\n request.addEventListener('progress', config.onDownloadProgress);\n }\n\n // Not all browsers support upload events\n if (typeof config.onUploadProgress === 'function' && request.upload) {\n request.upload.addEventListener('progress', config.onUploadProgress);\n }\n\n if (config.cancelToken) {\n // Handle cancellation\n config.cancelToken.promise.then(function onCanceled(cancel) {\n if (!request) {\n return;\n }\n\n request.abort();\n reject(cancel);\n // Clean up request\n request = null;\n });\n }\n\n if (requestData === undefined) {\n requestData = null;\n }\n\n // Send the request\n request.send(requestData);\n });\n};\n","'use strict';\n\nvar utils = require('./utils');\nvar bind = require('./helpers/bind');\nvar Axios = require('./core/Axios');\nvar mergeConfig = require('./core/mergeConfig');\nvar defaults = require('./defaults');\n\n/**\n * Create an instance of Axios\n *\n * @param {Object} defaultConfig The default config for the instance\n * @return {Axios} A new instance of Axios\n */\nfunction createInstance(defaultConfig) {\n var context = new Axios(defaultConfig);\n var instance = bind(Axios.prototype.request, context);\n\n // Copy axios.prototype to instance\n utils.extend(instance, Axios.prototype, context);\n\n // Copy context to instance\n utils.extend(instance, context);\n\n return instance;\n}\n\n// Create the default instance to be exported\nvar axios = createInstance(defaults);\n\n// Expose Axios class to allow class inheritance\naxios.Axios = Axios;\n\n// Factory for creating new instances\naxios.create = function create(instanceConfig) {\n return createInstance(mergeConfig(axios.defaults, instanceConfig));\n};\n\n// Expose Cancel & CancelToken\naxios.Cancel = require('./cancel/Cancel');\naxios.CancelToken = require('./cancel/CancelToken');\naxios.isCancel = require('./cancel/isCancel');\n\n// Expose all/spread\naxios.all = function all(promises) {\n return Promise.all(promises);\n};\naxios.spread = require('./helpers/spread');\n\nmodule.exports = axios;\n\n// Allow use of default import syntax in TypeScript\nmodule.exports.default = axios;\n","'use strict';\n\n/**\n * A `Cancel` is an object that is thrown when an operation is canceled.\n *\n * @class\n * @param {string=} message The message.\n */\nfunction Cancel(message) {\n this.message = message;\n}\n\nCancel.prototype.toString = function toString() {\n return 'Cancel' + (this.message ? ': ' + this.message : '');\n};\n\nCancel.prototype.__CANCEL__ = true;\n\nmodule.exports = Cancel;\n","'use strict';\n\nvar Cancel = require('./Cancel');\n\n/**\n * A `CancelToken` is an object that can be used to request cancellation of an operation.\n *\n * @class\n * @param {Function} executor The executor function.\n */\nfunction CancelToken(executor) {\n if (typeof executor !== 'function') {\n throw new TypeError('executor must be a function.');\n }\n\n var resolvePromise;\n this.promise = new Promise(function promiseExecutor(resolve) {\n resolvePromise = resolve;\n });\n\n var token = this;\n executor(function cancel(message) {\n if (token.reason) {\n // Cancellation has already been requested\n return;\n }\n\n token.reason = new Cancel(message);\n resolvePromise(token.reason);\n });\n}\n\n/**\n * Throws a `Cancel` if cancellation has been requested.\n */\nCancelToken.prototype.throwIfRequested = function throwIfRequested() {\n if (this.reason) {\n throw this.reason;\n }\n};\n\n/**\n * Returns an object that contains a new `CancelToken` and a function that, when called,\n * cancels the `CancelToken`.\n */\nCancelToken.source = function source() {\n var cancel;\n var token = new CancelToken(function executor(c) {\n cancel = c;\n });\n return {\n token: token,\n cancel: cancel\n };\n};\n\nmodule.exports = CancelToken;\n","'use strict';\n\nmodule.exports = function isCancel(value) {\n return !!(value && value.__CANCEL__);\n};\n","'use strict';\n\nvar utils = require('./../utils');\nvar buildURL = require('../helpers/buildURL');\nvar InterceptorManager = require('./InterceptorManager');\nvar dispatchRequest = require('./dispatchRequest');\nvar mergeConfig = require('./mergeConfig');\n\n/**\n * Create a new instance of Axios\n *\n * @param {Object} instanceConfig The default config for the instance\n */\nfunction Axios(instanceConfig) {\n this.defaults = instanceConfig;\n this.interceptors = {\n request: new InterceptorManager(),\n response: new InterceptorManager()\n };\n}\n\n/**\n * Dispatch a request\n *\n * @param {Object} config The config specific for this request (merged with this.defaults)\n */\nAxios.prototype.request = function request(config) {\n /*eslint no-param-reassign:0*/\n // Allow for axios('example/url'[, config]) a la fetch API\n if (typeof config === 'string') {\n config = arguments[1] || {};\n config.url = arguments[0];\n } else {\n config = config || {};\n }\n\n config = mergeConfig(this.defaults, config);\n config.method = config.method ? config.method.toLowerCase() : 'get';\n\n // Hook up interceptors middleware\n var chain = [dispatchRequest, undefined];\n var promise = Promise.resolve(config);\n\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n chain.unshift(interceptor.fulfilled, interceptor.rejected);\n });\n\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n chain.push(interceptor.fulfilled, interceptor.rejected);\n });\n\n while (chain.length) {\n promise = promise.then(chain.shift(), chain.shift());\n }\n\n return promise;\n};\n\nAxios.prototype.getUri = function getUri(config) {\n config = mergeConfig(this.defaults, config);\n return buildURL(config.url, config.params, config.paramsSerializer).replace(/^\\?/, '');\n};\n\n// Provide aliases for supported request methods\nutils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function(url, config) {\n return this.request(utils.merge(config || {}, {\n method: method,\n url: url\n }));\n };\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function(url, data, config) {\n return this.request(utils.merge(config || {}, {\n method: method,\n url: url,\n data: data\n }));\n };\n});\n\nmodule.exports = Axios;\n","'use strict';\n\nvar utils = require('./../utils');\n\nfunction InterceptorManager() {\n this.handlers = [];\n}\n\n/**\n * Add a new interceptor to the stack\n *\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\n * @param {Function} rejected The function to handle `reject` for a `Promise`\n *\n * @return {Number} An ID used to remove interceptor later\n */\nInterceptorManager.prototype.use = function use(fulfilled, rejected) {\n this.handlers.push({\n fulfilled: fulfilled,\n rejected: rejected\n });\n return this.handlers.length - 1;\n};\n\n/**\n * Remove an interceptor from the stack\n *\n * @param {Number} id The ID that was returned by `use`\n */\nInterceptorManager.prototype.eject = function eject(id) {\n if (this.handlers[id]) {\n this.handlers[id] = null;\n }\n};\n\n/**\n * Iterate over all the registered interceptors\n *\n * This method is particularly useful for skipping over any\n * interceptors that may have become `null` calling `eject`.\n *\n * @param {Function} fn The function to call for each interceptor\n */\nInterceptorManager.prototype.forEach = function forEach(fn) {\n utils.forEach(this.handlers, function forEachHandler(h) {\n if (h !== null) {\n fn(h);\n }\n });\n};\n\nmodule.exports = InterceptorManager;\n","'use strict';\n\nvar enhanceError = require('./enhanceError');\n\n/**\n * Create an Error with the specified message, config, error code, request and response.\n *\n * @param {string} message The error message.\n * @param {Object} config The config.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n * @returns {Error} The created error.\n */\nmodule.exports = function createError(message, config, code, request, response) {\n var error = new Error(message);\n return enhanceError(error, config, code, request, response);\n};\n","'use strict';\n\nvar utils = require('./../utils');\nvar transformData = require('./transformData');\nvar isCancel = require('../cancel/isCancel');\nvar defaults = require('../defaults');\nvar isAbsoluteURL = require('./../helpers/isAbsoluteURL');\nvar combineURLs = require('./../helpers/combineURLs');\n\n/**\n * Throws a `Cancel` if cancellation has been requested.\n */\nfunction throwIfCancellationRequested(config) {\n if (config.cancelToken) {\n config.cancelToken.throwIfRequested();\n }\n}\n\n/**\n * Dispatch a request to the server using the configured adapter.\n *\n * @param {object} config The config that is to be used for the request\n * @returns {Promise} The Promise to be fulfilled\n */\nmodule.exports = function dispatchRequest(config) {\n throwIfCancellationRequested(config);\n\n // Support baseURL config\n if (config.baseURL && !isAbsoluteURL(config.url)) {\n config.url = combineURLs(config.baseURL, config.url);\n }\n\n // Ensure headers exist\n config.headers = config.headers || {};\n\n // Transform request data\n config.data = transformData(\n config.data,\n config.headers,\n config.transformRequest\n );\n\n // Flatten headers\n config.headers = utils.merge(\n config.headers.common || {},\n config.headers[config.method] || {},\n config.headers || {}\n );\n\n utils.forEach(\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\n function cleanHeaderConfig(method) {\n delete config.headers[method];\n }\n );\n\n var adapter = config.adapter || defaults.adapter;\n\n return adapter(config).then(function onAdapterResolution(response) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n response.data = transformData(\n response.data,\n response.headers,\n config.transformResponse\n );\n\n return response;\n }, function onAdapterRejection(reason) {\n if (!isCancel(reason)) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n if (reason && reason.response) {\n reason.response.data = transformData(\n reason.response.data,\n reason.response.headers,\n config.transformResponse\n );\n }\n }\n\n return Promise.reject(reason);\n });\n};\n","'use strict';\n\n/**\n * Update an Error with the specified config, error code, and response.\n *\n * @param {Error} error The error to update.\n * @param {Object} config The config.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n * @returns {Error} The error.\n */\nmodule.exports = function enhanceError(error, config, code, request, response) {\n error.config = config;\n if (code) {\n error.code = code;\n }\n\n error.request = request;\n error.response = response;\n error.isAxiosError = true;\n\n error.toJSON = function() {\n return {\n // Standard\n message: this.message,\n name: this.name,\n // Microsoft\n description: this.description,\n number: this.number,\n // Mozilla\n fileName: this.fileName,\n lineNumber: this.lineNumber,\n columnNumber: this.columnNumber,\n stack: this.stack,\n // Axios\n config: this.config,\n code: this.code\n };\n };\n return error;\n};\n","'use strict';\n\nvar utils = require('../utils');\n\n/**\n * Config-specific merge-function which creates a new config-object\n * by merging two configuration objects together.\n *\n * @param {Object} config1\n * @param {Object} config2\n * @returns {Object} New object resulting from merging config2 to config1\n */\nmodule.exports = function mergeConfig(config1, config2) {\n // eslint-disable-next-line no-param-reassign\n config2 = config2 || {};\n var config = {};\n\n utils.forEach(['url', 'method', 'params', 'data'], function valueFromConfig2(prop) {\n if (typeof config2[prop] !== 'undefined') {\n config[prop] = config2[prop];\n }\n });\n\n utils.forEach(['headers', 'auth', 'proxy'], function mergeDeepProperties(prop) {\n if (utils.isObject(config2[prop])) {\n config[prop] = utils.deepMerge(config1[prop], config2[prop]);\n } else if (typeof config2[prop] !== 'undefined') {\n config[prop] = config2[prop];\n } else if (utils.isObject(config1[prop])) {\n config[prop] = utils.deepMerge(config1[prop]);\n } else if (typeof config1[prop] !== 'undefined') {\n config[prop] = config1[prop];\n }\n });\n\n utils.forEach([\n 'baseURL', 'transformRequest', 'transformResponse', 'paramsSerializer',\n 'timeout', 'withCredentials', 'adapter', 'responseType', 'xsrfCookieName',\n 'xsrfHeaderName', 'onUploadProgress', 'onDownloadProgress', 'maxContentLength',\n 'validateStatus', 'maxRedirects', 'httpAgent', 'httpsAgent', 'cancelToken',\n 'socketPath'\n ], function defaultToConfig2(prop) {\n if (typeof config2[prop] !== 'undefined') {\n config[prop] = config2[prop];\n } else if (typeof config1[prop] !== 'undefined') {\n config[prop] = config1[prop];\n }\n });\n\n return config;\n};\n","'use strict';\n\nvar createError = require('./createError');\n\n/**\n * Resolve or reject a Promise based on response status.\n *\n * @param {Function} resolve A function that resolves the promise.\n * @param {Function} reject A function that rejects the promise.\n * @param {object} response The response.\n */\nmodule.exports = function settle(resolve, reject, response) {\n var validateStatus = response.config.validateStatus;\n if (!validateStatus || validateStatus(response.status)) {\n resolve(response);\n } else {\n reject(createError(\n 'Request failed with status code ' + response.status,\n response.config,\n null,\n response.request,\n response\n ));\n }\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\n/**\n * Transform the data for a request or a response\n *\n * @param {Object|String} data The data to be transformed\n * @param {Array} headers The headers for the request or response\n * @param {Array|Function} fns A single function or Array of functions\n * @returns {*} The resulting transformed data\n */\nmodule.exports = function transformData(data, headers, fns) {\n /*eslint no-param-reassign:0*/\n utils.forEach(fns, function transform(fn) {\n data = fn(data, headers);\n });\n\n return data;\n};\n","'use strict';\n\nvar utils = require('./utils');\nvar normalizeHeaderName = require('./helpers/normalizeHeaderName');\n\nvar DEFAULT_CONTENT_TYPE = {\n 'Content-Type': 'application/x-www-form-urlencoded'\n};\n\nfunction setContentTypeIfUnset(headers, value) {\n if (!utils.isUndefined(headers) && utils.isUndefined(headers['Content-Type'])) {\n headers['Content-Type'] = value;\n }\n}\n\nfunction getDefaultAdapter() {\n var adapter;\n // Only Node.JS has a process variable that is of [[Class]] process\n if (typeof process !== 'undefined' && Object.prototype.toString.call(process) === '[object process]') {\n // For node use HTTP adapter\n adapter = require('./adapters/http');\n } else if (typeof XMLHttpRequest !== 'undefined') {\n // For browsers use XHR adapter\n adapter = require('./adapters/xhr');\n }\n return adapter;\n}\n\nvar defaults = {\n adapter: getDefaultAdapter(),\n\n transformRequest: [function transformRequest(data, headers) {\n normalizeHeaderName(headers, 'Accept');\n normalizeHeaderName(headers, 'Content-Type');\n if (utils.isFormData(data) ||\n utils.isArrayBuffer(data) ||\n utils.isBuffer(data) ||\n utils.isStream(data) ||\n utils.isFile(data) ||\n utils.isBlob(data)\n ) {\n return data;\n }\n if (utils.isArrayBufferView(data)) {\n return data.buffer;\n }\n if (utils.isURLSearchParams(data)) {\n setContentTypeIfUnset(headers, 'application/x-www-form-urlencoded;charset=utf-8');\n return data.toString();\n }\n if (utils.isObject(data)) {\n setContentTypeIfUnset(headers, 'application/json;charset=utf-8');\n return JSON.stringify(data);\n }\n return data;\n }],\n\n transformResponse: [function transformResponse(data) {\n /*eslint no-param-reassign:0*/\n if (typeof data === 'string') {\n try {\n data = JSON.parse(data);\n } catch (e) { /* Ignore */ }\n }\n return data;\n }],\n\n /**\n * A timeout in milliseconds to abort a request. If set to 0 (default) a\n * timeout is not created.\n */\n timeout: 0,\n\n xsrfCookieName: 'XSRF-TOKEN',\n xsrfHeaderName: 'X-XSRF-TOKEN',\n\n maxContentLength: -1,\n\n validateStatus: function validateStatus(status) {\n return status >= 200 && status < 300;\n }\n};\n\ndefaults.headers = {\n common: {\n 'Accept': 'application/json, text/plain, */*'\n }\n};\n\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\n defaults.headers[method] = {};\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n defaults.headers[method] = utils.merge(DEFAULT_CONTENT_TYPE);\n});\n\nmodule.exports = defaults;\n","'use strict';\n\nmodule.exports = function bind(fn, thisArg) {\n return function wrap() {\n var args = new Array(arguments.length);\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i];\n }\n return fn.apply(thisArg, args);\n };\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\nfunction encode(val) {\n return encodeURIComponent(val).\n replace(/%40/gi, '@').\n replace(/%3A/gi, ':').\n replace(/%24/g, '$').\n replace(/%2C/gi, ',').\n replace(/%20/g, '+').\n replace(/%5B/gi, '[').\n replace(/%5D/gi, ']');\n}\n\n/**\n * Build a URL by appending params to the end\n *\n * @param {string} url The base of the url (e.g., http://www.google.com)\n * @param {object} [params] The params to be appended\n * @returns {string} The formatted url\n */\nmodule.exports = function buildURL(url, params, paramsSerializer) {\n /*eslint no-param-reassign:0*/\n if (!params) {\n return url;\n }\n\n var serializedParams;\n if (paramsSerializer) {\n serializedParams = paramsSerializer(params);\n } else if (utils.isURLSearchParams(params)) {\n serializedParams = params.toString();\n } else {\n var parts = [];\n\n utils.forEach(params, function serialize(val, key) {\n if (val === null || typeof val === 'undefined') {\n return;\n }\n\n if (utils.isArray(val)) {\n key = key + '[]';\n } else {\n val = [val];\n }\n\n utils.forEach(val, function parseValue(v) {\n if (utils.isDate(v)) {\n v = v.toISOString();\n } else if (utils.isObject(v)) {\n v = JSON.stringify(v);\n }\n parts.push(encode(key) + '=' + encode(v));\n });\n });\n\n serializedParams = parts.join('&');\n }\n\n if (serializedParams) {\n var hashmarkIndex = url.indexOf('#');\n if (hashmarkIndex !== -1) {\n url = url.slice(0, hashmarkIndex);\n }\n\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n }\n\n return url;\n};\n","'use strict';\n\n/**\n * Creates a new URL by combining the specified URLs\n *\n * @param {string} baseURL The base URL\n * @param {string} relativeURL The relative URL\n * @returns {string} The combined URL\n */\nmodule.exports = function combineURLs(baseURL, relativeURL) {\n return relativeURL\n ? baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '')\n : baseURL;\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\nmodule.exports = (\n utils.isStandardBrowserEnv() ?\n\n // Standard browser envs support document.cookie\n (function standardBrowserEnv() {\n return {\n write: function write(name, value, expires, path, domain, secure) {\n var cookie = [];\n cookie.push(name + '=' + encodeURIComponent(value));\n\n if (utils.isNumber(expires)) {\n cookie.push('expires=' + new Date(expires).toGMTString());\n }\n\n if (utils.isString(path)) {\n cookie.push('path=' + path);\n }\n\n if (utils.isString(domain)) {\n cookie.push('domain=' + domain);\n }\n\n if (secure === true) {\n cookie.push('secure');\n }\n\n document.cookie = cookie.join('; ');\n },\n\n read: function read(name) {\n var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\n return (match ? decodeURIComponent(match[3]) : null);\n },\n\n remove: function remove(name) {\n this.write(name, '', Date.now() - 86400000);\n }\n };\n })() :\n\n // Non standard browser env (web workers, react-native) lack needed support.\n (function nonStandardBrowserEnv() {\n return {\n write: function write() {},\n read: function read() { return null; },\n remove: function remove() {}\n };\n })()\n);\n","'use strict';\n\n/**\n * Determines whether the specified URL is absolute\n *\n * @param {string} url The URL to test\n * @returns {boolean} True if the specified URL is absolute, otherwise false\n */\nmodule.exports = function isAbsoluteURL(url) {\n // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n // by any combination of letters, digits, plus, period, or hyphen.\n return /^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(url);\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\nmodule.exports = (\n utils.isStandardBrowserEnv() ?\n\n // Standard browser envs have full support of the APIs needed to test\n // whether the request URL is of the same origin as current location.\n (function standardBrowserEnv() {\n var msie = /(msie|trident)/i.test(navigator.userAgent);\n var urlParsingNode = document.createElement('a');\n var originURL;\n\n /**\n * Parse a URL to discover it's components\n *\n * @param {String} url The URL to be parsed\n * @returns {Object}\n */\n function resolveURL(url) {\n var href = url;\n\n if (msie) {\n // IE needs attribute set twice to normalize properties\n urlParsingNode.setAttribute('href', href);\n href = urlParsingNode.href;\n }\n\n urlParsingNode.setAttribute('href', href);\n\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\n return {\n href: urlParsingNode.href,\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\n host: urlParsingNode.host,\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\n hostname: urlParsingNode.hostname,\n port: urlParsingNode.port,\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\n urlParsingNode.pathname :\n '/' + urlParsingNode.pathname\n };\n }\n\n originURL = resolveURL(window.location.href);\n\n /**\n * Determine if a URL shares the same origin as the current location\n *\n * @param {String} requestURL The URL to test\n * @returns {boolean} True if URL shares the same origin, otherwise false\n */\n return function isURLSameOrigin(requestURL) {\n var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\n return (parsed.protocol === originURL.protocol &&\n parsed.host === originURL.host);\n };\n })() :\n\n // Non standard browser envs (web workers, react-native) lack needed support.\n (function nonStandardBrowserEnv() {\n return function isURLSameOrigin() {\n return true;\n };\n })()\n);\n","'use strict';\n\nvar utils = require('../utils');\n\nmodule.exports = function normalizeHeaderName(headers, normalizedName) {\n utils.forEach(headers, function processHeader(value, name) {\n if (name !== normalizedName && name.toUpperCase() === normalizedName.toUpperCase()) {\n headers[normalizedName] = value;\n delete headers[name];\n }\n });\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\n// Headers whose duplicates are ignored by node\n// c.f. https://nodejs.org/api/http.html#http_message_headers\nvar ignoreDuplicateOf = [\n 'age', 'authorization', 'content-length', 'content-type', 'etag',\n 'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since',\n 'last-modified', 'location', 'max-forwards', 'proxy-authorization',\n 'referer', 'retry-after', 'user-agent'\n];\n\n/**\n * Parse headers into an object\n *\n * ```\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\n * Content-Type: application/json\n * Connection: keep-alive\n * Transfer-Encoding: chunked\n * ```\n *\n * @param {String} headers Headers needing to be parsed\n * @returns {Object} Headers parsed into an object\n */\nmodule.exports = function parseHeaders(headers) {\n var parsed = {};\n var key;\n var val;\n var i;\n\n if (!headers) { return parsed; }\n\n utils.forEach(headers.split('\\n'), function parser(line) {\n i = line.indexOf(':');\n key = utils.trim(line.substr(0, i)).toLowerCase();\n val = utils.trim(line.substr(i + 1));\n\n if (key) {\n if (parsed[key] && ignoreDuplicateOf.indexOf(key) >= 0) {\n return;\n }\n if (key === 'set-cookie') {\n parsed[key] = (parsed[key] ? parsed[key] : []).concat([val]);\n } else {\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n }\n }\n });\n\n return parsed;\n};\n","'use strict';\n\n/**\n * Syntactic sugar for invoking a function and expanding an array for arguments.\n *\n * Common use case would be to use `Function.prototype.apply`.\n *\n * ```js\n * function f(x, y, z) {}\n * var args = [1, 2, 3];\n * f.apply(null, args);\n * ```\n *\n * With `spread` this example can be re-written.\n *\n * ```js\n * spread(function(x, y, z) {})([1, 2, 3]);\n * ```\n *\n * @param {Function} callback\n * @returns {Function}\n */\nmodule.exports = function spread(callback) {\n return function wrap(arr) {\n return callback.apply(null, arr);\n };\n};\n","'use strict';\n\nvar bind = require('./helpers/bind');\nvar isBuffer = require('is-buffer');\n\n/*global toString:true*/\n\n// utils is a library of generic helper functions non-specific to axios\n\nvar toString = Object.prototype.toString;\n\n/**\n * Determine if a value is an Array\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Array, otherwise false\n */\nfunction isArray(val) {\n return toString.call(val) === '[object Array]';\n}\n\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\nfunction isArrayBuffer(val) {\n return toString.call(val) === '[object ArrayBuffer]';\n}\n\n/**\n * Determine if a value is a FormData\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an FormData, otherwise false\n */\nfunction isFormData(val) {\n return (typeof FormData !== 'undefined') && (val instanceof FormData);\n}\n\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\nfunction isArrayBufferView(val) {\n var result;\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\n result = ArrayBuffer.isView(val);\n } else {\n result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);\n }\n return result;\n}\n\n/**\n * Determine if a value is a String\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a String, otherwise false\n */\nfunction isString(val) {\n return typeof val === 'string';\n}\n\n/**\n * Determine if a value is a Number\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Number, otherwise false\n */\nfunction isNumber(val) {\n return typeof val === 'number';\n}\n\n/**\n * Determine if a value is undefined\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if the value is undefined, otherwise false\n */\nfunction isUndefined(val) {\n return typeof val === 'undefined';\n}\n\n/**\n * Determine if a value is an Object\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Object, otherwise false\n */\nfunction isObject(val) {\n return val !== null && typeof val === 'object';\n}\n\n/**\n * Determine if a value is a Date\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Date, otherwise false\n */\nfunction isDate(val) {\n return toString.call(val) === '[object Date]';\n}\n\n/**\n * Determine if a value is a File\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a File, otherwise false\n */\nfunction isFile(val) {\n return toString.call(val) === '[object File]';\n}\n\n/**\n * Determine if a value is a Blob\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Blob, otherwise false\n */\nfunction isBlob(val) {\n return toString.call(val) === '[object Blob]';\n}\n\n/**\n * Determine if a value is a Function\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Function, otherwise false\n */\nfunction isFunction(val) {\n return toString.call(val) === '[object Function]';\n}\n\n/**\n * Determine if a value is a Stream\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Stream, otherwise false\n */\nfunction isStream(val) {\n return isObject(val) && isFunction(val.pipe);\n}\n\n/**\n * Determine if a value is a URLSearchParams object\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n */\nfunction isURLSearchParams(val) {\n return typeof URLSearchParams !== 'undefined' && val instanceof URLSearchParams;\n}\n\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n * @returns {String} The String freed of excess whitespace\n */\nfunction trim(str) {\n return str.replace(/^\\s*/, '').replace(/\\s*$/, '');\n}\n\n/**\n * Determine if we're running in a standard browser environment\n *\n * This allows axios to run in a web worker, and react-native.\n * Both environments support XMLHttpRequest, but not fully standard globals.\n *\n * web workers:\n * typeof window -> undefined\n * typeof document -> undefined\n *\n * react-native:\n * navigator.product -> 'ReactNative'\n * nativescript\n * navigator.product -> 'NativeScript' or 'NS'\n */\nfunction isStandardBrowserEnv() {\n if (typeof navigator !== 'undefined' && (navigator.product === 'ReactNative' ||\n navigator.product === 'NativeScript' ||\n navigator.product === 'NS')) {\n return false;\n }\n return (\n typeof window !== 'undefined' &&\n typeof document !== 'undefined'\n );\n}\n\n/**\n * Iterate over an Array or an Object invoking a function for each item.\n *\n * If `obj` is an Array callback will be called passing\n * the value, index, and complete array for each item.\n *\n * If 'obj' is an Object callback will be called passing\n * the value, key, and complete object for each property.\n *\n * @param {Object|Array} obj The object to iterate\n * @param {Function} fn The callback to invoke for each item\n */\nfunction forEach(obj, fn) {\n // Don't bother if no value provided\n if (obj === null || typeof obj === 'undefined') {\n return;\n }\n\n // Force an array if not already something iterable\n if (typeof obj !== 'object') {\n /*eslint no-param-reassign:0*/\n obj = [obj];\n }\n\n if (isArray(obj)) {\n // Iterate over array values\n for (var i = 0, l = obj.length; i < l; i++) {\n fn.call(null, obj[i], i, obj);\n }\n } else {\n // Iterate over object keys\n for (var key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n fn.call(null, obj[key], key, obj);\n }\n }\n }\n}\n\n/**\n * Accepts varargs expecting each argument to be an object, then\n * immutably merges the properties of each object and returns result.\n *\n * When multiple objects contain the same key the later object in\n * the arguments list will take precedence.\n *\n * Example:\n *\n * ```js\n * var result = merge({foo: 123}, {foo: 456});\n * console.log(result.foo); // outputs 456\n * ```\n *\n * @param {Object} obj1 Object to merge\n * @returns {Object} Result of all merge properties\n */\nfunction merge(/* obj1, obj2, obj3, ... */) {\n var result = {};\n function assignValue(val, key) {\n if (typeof result[key] === 'object' && typeof val === 'object') {\n result[key] = merge(result[key], val);\n } else {\n result[key] = val;\n }\n }\n\n for (var i = 0, l = arguments.length; i < l; i++) {\n forEach(arguments[i], assignValue);\n }\n return result;\n}\n\n/**\n * Function equal to merge with the difference being that no reference\n * to original objects is kept.\n *\n * @see merge\n * @param {Object} obj1 Object to merge\n * @returns {Object} Result of all merge properties\n */\nfunction deepMerge(/* obj1, obj2, obj3, ... */) {\n var result = {};\n function assignValue(val, key) {\n if (typeof result[key] === 'object' && typeof val === 'object') {\n result[key] = deepMerge(result[key], val);\n } else if (typeof val === 'object') {\n result[key] = deepMerge({}, val);\n } else {\n result[key] = val;\n }\n }\n\n for (var i = 0, l = arguments.length; i < l; i++) {\n forEach(arguments[i], assignValue);\n }\n return result;\n}\n\n/**\n * Extends object a by mutably adding to it the properties of object b.\n *\n * @param {Object} a The object to be extended\n * @param {Object} b The object to copy properties from\n * @param {Object} thisArg The object to bind function to\n * @return {Object} The resulting value of object a\n */\nfunction extend(a, b, thisArg) {\n forEach(b, function assignValue(val, key) {\n if (thisArg && typeof val === 'function') {\n a[key] = bind(val, thisArg);\n } else {\n a[key] = val;\n }\n });\n return a;\n}\n\nmodule.exports = {\n isArray: isArray,\n isArrayBuffer: isArrayBuffer,\n isBuffer: isBuffer,\n isFormData: isFormData,\n isArrayBufferView: isArrayBufferView,\n isString: isString,\n isNumber: isNumber,\n isObject: isObject,\n isUndefined: isUndefined,\n isDate: isDate,\n isFile: isFile,\n isBlob: isBlob,\n isFunction: isFunction,\n isStream: isStream,\n isURLSearchParams: isURLSearchParams,\n isStandardBrowserEnv: isStandardBrowserEnv,\n forEach: forEach,\n merge: merge,\n deepMerge: deepMerge,\n extend: extend,\n trim: trim\n};\n","/*!\n * Determine if an object is a Buffer\n *\n * @author Feross Aboukhadijeh \n * @license MIT\n */\n\nmodule.exports = function isBuffer (obj) {\n return obj != null && obj.constructor != null &&\n typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj)\n}\n","var nestRE = /^(attrs|props|on|nativeOn|class|style|hook)$/\n\nmodule.exports = function mergeJSXProps (objs) {\n return objs.reduce(function (a, b) {\n var aa, bb, key, nestedKey, temp\n for (key in b) {\n aa = a[key]\n bb = b[key]\n if (aa && nestRE.test(key)) {\n // normalize class\n if (key === 'class') {\n if (typeof aa === 'string') {\n temp = aa\n a[key] = aa = {}\n aa[temp] = true\n }\n if (typeof bb === 'string') {\n temp = bb\n b[key] = bb = {}\n bb[temp] = true\n }\n }\n if (key === 'on' || key === 'nativeOn' || key === 'hook') {\n // merge functions\n for (nestedKey in bb) {\n aa[nestedKey] = mergeFn(aa[nestedKey], bb[nestedKey])\n }\n } else if (Array.isArray(aa)) {\n a[key] = aa.concat(bb)\n } else if (Array.isArray(bb)) {\n a[key] = [aa].concat(bb)\n } else {\n for (nestedKey in bb) {\n aa[nestedKey] = bb[nestedKey]\n }\n }\n } else {\n a[key] = b[key]\n }\n }\n return a\n }, {})\n}\n\nfunction mergeFn (a, b) {\n return function () {\n a && a.apply(this, arguments)\n b && b.apply(this, arguments)\n }\n}\n","module.exports = { \"default\": require(\"core-js/library/fn/json/stringify\"), __esModule: true };","module.exports = { \"default\": require(\"core-js/library/fn/object/keys\"), __esModule: true };","module.exports = { \"default\": require(\"core-js/library/fn/promise\"), __esModule: true };","module.exports = { \"default\": require(\"core-js/library/fn/symbol\"), __esModule: true };","module.exports = { \"default\": require(\"core-js/library/fn/symbol/iterator\"), __esModule: true };","\"use strict\";\n\nexports.__esModule = true;\n\nvar _promise = require(\"../core-js/promise\");\n\nvar _promise2 = _interopRequireDefault(_promise);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = function (fn) {\n return function () {\n var gen = fn.apply(this, arguments);\n return new _promise2.default(function (resolve, reject) {\n function step(key, arg) {\n try {\n var info = gen[key](arg);\n var value = info.value;\n } catch (error) {\n reject(error);\n return;\n }\n\n if (info.done) {\n resolve(value);\n } else {\n return _promise2.default.resolve(value).then(function (value) {\n step(\"next\", value);\n }, function (err) {\n step(\"throw\", err);\n });\n }\n }\n\n return step(\"next\");\n });\n };\n};","\"use strict\";\n\nexports.__esModule = true;\n\nexports.default = function (instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n};","\"use strict\";\n\nexports.__esModule = true;\n\nvar _iterator = require(\"../core-js/symbol/iterator\");\n\nvar _iterator2 = _interopRequireDefault(_iterator);\n\nvar _symbol = require(\"../core-js/symbol\");\n\nvar _symbol2 = _interopRequireDefault(_symbol);\n\nvar _typeof = typeof _symbol2.default === \"function\" && typeof _iterator2.default === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof _symbol2.default === \"function\" && obj.constructor === _symbol2.default && obj !== _symbol2.default.prototype ? \"symbol\" : typeof obj; };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = typeof _symbol2.default === \"function\" && _typeof(_iterator2.default) === \"symbol\" ? function (obj) {\n return typeof obj === \"undefined\" ? \"undefined\" : _typeof(obj);\n} : function (obj) {\n return obj && typeof _symbol2.default === \"function\" && obj.constructor === _symbol2.default && obj !== _symbol2.default.prototype ? \"symbol\" : typeof obj === \"undefined\" ? \"undefined\" : _typeof(obj);\n};","module.exports = require(\"regenerator-runtime\");\n","'use strict'\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n lookup[i] = code[i]\n revLookup[code.charCodeAt(i)] = i\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction getLens (b64) {\n var len = b64.length\n\n if (len % 4 > 0) {\n throw new Error('Invalid string. Length must be a multiple of 4')\n }\n\n // Trim off extra bytes after placeholder bytes are found\n // See: https://github.com/beatgammit/base64-js/issues/42\n var validLen = b64.indexOf('=')\n if (validLen === -1) validLen = len\n\n var placeHoldersLen = validLen === len\n ? 0\n : 4 - (validLen % 4)\n\n return [validLen, placeHoldersLen]\n}\n\n// base64 is 4/3 + up to two characters of the original data\nfunction byteLength (b64) {\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction _byteLength (b64, validLen, placeHoldersLen) {\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction toByteArray (b64) {\n var tmp\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n\n var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))\n\n var curByte = 0\n\n // if there are placeholders, only get up to the last complete 4 chars\n var len = placeHoldersLen > 0\n ? validLen - 4\n : validLen\n\n var i\n for (i = 0; i < len; i += 4) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 18) |\n (revLookup[b64.charCodeAt(i + 1)] << 12) |\n (revLookup[b64.charCodeAt(i + 2)] << 6) |\n revLookup[b64.charCodeAt(i + 3)]\n arr[curByte++] = (tmp >> 16) & 0xFF\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 2) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 2) |\n (revLookup[b64.charCodeAt(i + 1)] >> 4)\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 1) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 10) |\n (revLookup[b64.charCodeAt(i + 1)] << 4) |\n (revLookup[b64.charCodeAt(i + 2)] >> 2)\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n return arr\n}\n\nfunction tripletToBase64 (num) {\n return lookup[num >> 18 & 0x3F] +\n lookup[num >> 12 & 0x3F] +\n lookup[num >> 6 & 0x3F] +\n lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n var tmp\n var output = []\n for (var i = start; i < end; i += 3) {\n tmp =\n ((uint8[i] << 16) & 0xFF0000) +\n ((uint8[i + 1] << 8) & 0xFF00) +\n (uint8[i + 2] & 0xFF)\n output.push(tripletToBase64(tmp))\n }\n return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n var tmp\n var len = uint8.length\n var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n var parts = []\n var maxChunkLength = 16383 // must be multiple of 3\n\n // go through the array every three bytes, we'll deal with trailing stuff later\n for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n parts.push(encodeChunk(\n uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)\n ))\n }\n\n // pad the end with zeros, but make sure to not forget the extra bytes\n if (extraBytes === 1) {\n tmp = uint8[len - 1]\n parts.push(\n lookup[tmp >> 2] +\n lookup[(tmp << 4) & 0x3F] +\n '=='\n )\n } else if (extraBytes === 2) {\n tmp = (uint8[len - 2] << 8) + uint8[len - 1]\n parts.push(\n lookup[tmp >> 10] +\n lookup[(tmp >> 4) & 0x3F] +\n lookup[(tmp << 2) & 0x3F] +\n '='\n )\n }\n\n return parts.join('')\n}\n","/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh \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 ''\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","var toString = {}.toString;\n\nmodule.exports = Array.isArray || function (arr) {\n return toString.call(arr) == '[object Array]';\n};\n","var core = require('../../modules/_core');\nvar $JSON = core.JSON || (core.JSON = { stringify: JSON.stringify });\nmodule.exports = function stringify(it) { // eslint-disable-line no-unused-vars\n return $JSON.stringify.apply($JSON, arguments);\n};\n","require('../../modules/es6.object.keys');\nmodule.exports = require('../../modules/_core').Object.keys;\n","require('../modules/es6.object.to-string');\nrequire('../modules/es6.string.iterator');\nrequire('../modules/web.dom.iterable');\nrequire('../modules/es6.promise');\nrequire('../modules/es7.promise.finally');\nrequire('../modules/es7.promise.try');\nmodule.exports = require('../modules/_core').Promise;\n","require('../../modules/es6.symbol');\nrequire('../../modules/es6.object.to-string');\nrequire('../../modules/es7.symbol.async-iterator');\nrequire('../../modules/es7.symbol.observable');\nmodule.exports = require('../../modules/_core').Symbol;\n","require('../../modules/es6.string.iterator');\nrequire('../../modules/web.dom.iterable');\nmodule.exports = require('../../modules/_wks-ext').f('iterator');\n","module.exports = function (it) {\n if (typeof it != 'function') throw TypeError(it + ' is not a function!');\n return it;\n};\n","module.exports = function () { /* empty */ };\n","module.exports = function (it, Constructor, name, forbiddenField) {\n if (!(it instanceof Constructor) || (forbiddenField !== undefined && forbiddenField in it)) {\n throw TypeError(name + ': incorrect invocation!');\n } return it;\n};\n","var isObject = require('./_is-object');\nmodule.exports = function (it) {\n if (!isObject(it)) throw TypeError(it + ' is not an object!');\n return it;\n};\n","// false -> Array#indexOf\n// true -> Array#includes\nvar toIObject = require('./_to-iobject');\nvar toLength = require('./_to-length');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nmodule.exports = function (IS_INCLUDES) {\n return function ($this, el, fromIndex) {\n var O = toIObject($this);\n var length = toLength(O.length);\n var index = toAbsoluteIndex(fromIndex, length);\n var value;\n // Array#includes uses SameValueZero equality algorithm\n // eslint-disable-next-line no-self-compare\n if (IS_INCLUDES && el != el) while (length > index) {\n value = O[index++];\n // eslint-disable-next-line no-self-compare\n if (value != value) return true;\n // Array#indexOf ignores holes, Array#includes - not\n } else for (;length > index; index++) if (IS_INCLUDES || index in O) {\n if (O[index] === el) return IS_INCLUDES || index || 0;\n } return !IS_INCLUDES && -1;\n };\n};\n","// getting tag from 19.1.3.6 Object.prototype.toString()\nvar cof = require('./_cof');\nvar TAG = require('./_wks')('toStringTag');\n// ES3 wrong here\nvar ARG = cof(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n try {\n return it[key];\n } catch (e) { /* empty */ }\n};\n\nmodule.exports = function (it) {\n var O, T, B;\n return it === undefined ? 'Undefined' : it === null ? 'Null'\n // @@toStringTag case\n : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T\n // builtinTag case\n : ARG ? cof(O)\n // ES3 arguments fallback\n : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;\n};\n","var toString = {}.toString;\n\nmodule.exports = function (it) {\n return toString.call(it).slice(8, -1);\n};\n","var core = module.exports = { version: '2.6.10' };\nif (typeof __e == 'number') __e = core; // eslint-disable-line no-undef\n","// optional / simple context binding\nvar aFunction = require('./_a-function');\nmodule.exports = function (fn, that, length) {\n aFunction(fn);\n if (that === undefined) return fn;\n switch (length) {\n case 1: return function (a) {\n return fn.call(that, a);\n };\n case 2: return function (a, b) {\n return fn.call(that, a, b);\n };\n case 3: return function (a, b, c) {\n return fn.call(that, a, b, c);\n };\n }\n return function (/* ...args */) {\n return fn.apply(that, arguments);\n };\n};\n","// 7.2.1 RequireObjectCoercible(argument)\nmodule.exports = function (it) {\n if (it == undefined) throw TypeError(\"Can't call method on \" + it);\n return it;\n};\n","// Thank's IE8 for his funny defineProperty\nmodule.exports = !require('./_fails')(function () {\n return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;\n});\n","var isObject = require('./_is-object');\nvar document = require('./_global').document;\n// typeof document.createElement is 'object' in old IE\nvar is = isObject(document) && isObject(document.createElement);\nmodule.exports = function (it) {\n return is ? document.createElement(it) : {};\n};\n","// IE 8- don't enum bug keys\nmodule.exports = (\n 'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'\n).split(',');\n","// all enumerable object keys, includes symbols\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nmodule.exports = function (it) {\n var result = getKeys(it);\n var getSymbols = gOPS.f;\n if (getSymbols) {\n var symbols = getSymbols(it);\n var isEnum = pIE.f;\n var i = 0;\n var key;\n while (symbols.length > i) if (isEnum.call(it, key = symbols[i++])) result.push(key);\n } return result;\n};\n","var global = require('./_global');\nvar core = require('./_core');\nvar ctx = require('./_ctx');\nvar hide = require('./_hide');\nvar has = require('./_has');\nvar PROTOTYPE = 'prototype';\n\nvar $export = function (type, name, source) {\n var IS_FORCED = type & $export.F;\n var IS_GLOBAL = type & $export.G;\n var IS_STATIC = type & $export.S;\n var IS_PROTO = type & $export.P;\n var IS_BIND = type & $export.B;\n var IS_WRAP = type & $export.W;\n var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});\n var expProto = exports[PROTOTYPE];\n var target = IS_GLOBAL ? global : IS_STATIC ? global[name] : (global[name] || {})[PROTOTYPE];\n var key, own, out;\n if (IS_GLOBAL) source = name;\n for (key in source) {\n // contains in native\n own = !IS_FORCED && target && target[key] !== undefined;\n if (own && has(exports, key)) continue;\n // export native or passed\n out = own ? target[key] : source[key];\n // prevent global pollution for namespaces\n exports[key] = IS_GLOBAL && typeof target[key] != 'function' ? source[key]\n // bind timers to global for call from export context\n : IS_BIND && own ? ctx(out, global)\n // wrap global constructors for prevent change them in library\n : IS_WRAP && target[key] == out ? (function (C) {\n var F = function (a, b, c) {\n if (this instanceof C) {\n switch (arguments.length) {\n case 0: return new C();\n case 1: return new C(a);\n case 2: return new C(a, b);\n } return new C(a, b, c);\n } return C.apply(this, arguments);\n };\n F[PROTOTYPE] = C[PROTOTYPE];\n return F;\n // make static versions for prototype methods\n })(out) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n // export proto methods to core.%CONSTRUCTOR%.methods.%NAME%\n if (IS_PROTO) {\n (exports.virtual || (exports.virtual = {}))[key] = out;\n // export proto methods to core.%CONSTRUCTOR%.prototype.%NAME%\n if (type & $export.R && expProto && !expProto[key]) hide(expProto, key, out);\n }\n }\n};\n// type bitmap\n$export.F = 1; // forced\n$export.G = 2; // global\n$export.S = 4; // static\n$export.P = 8; // proto\n$export.B = 16; // bind\n$export.W = 32; // wrap\n$export.U = 64; // safe\n$export.R = 128; // real proto method for `library`\nmodule.exports = $export;\n","module.exports = function (exec) {\n try {\n return !!exec();\n } catch (e) {\n return true;\n }\n};\n","var ctx = require('./_ctx');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar anObject = require('./_an-object');\nvar toLength = require('./_to-length');\nvar getIterFn = require('./core.get-iterator-method');\nvar BREAK = {};\nvar RETURN = {};\nvar exports = module.exports = function (iterable, entries, fn, that, ITERATOR) {\n var iterFn = ITERATOR ? function () { return iterable; } : getIterFn(iterable);\n var f = ctx(fn, that, entries ? 2 : 1);\n var index = 0;\n var length, step, iterator, result;\n if (typeof iterFn != 'function') throw TypeError(iterable + ' is not iterable!');\n // fast case for arrays with default iterator\n if (isArrayIter(iterFn)) for (length = toLength(iterable.length); length > index; index++) {\n result = entries ? f(anObject(step = iterable[index])[0], step[1]) : f(iterable[index]);\n if (result === BREAK || result === RETURN) return result;\n } else for (iterator = iterFn.call(iterable); !(step = iterator.next()).done;) {\n result = call(iterator, f, step.value, entries);\n if (result === BREAK || result === RETURN) return result;\n }\n};\nexports.BREAK = BREAK;\nexports.RETURN = RETURN;\n","// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n ? window : typeof self != 'undefined' && self.Math == Math ? self\n // eslint-disable-next-line no-new-func\n : Function('return this')();\nif (typeof __g == 'number') __g = global; // eslint-disable-line no-undef\n","var hasOwnProperty = {}.hasOwnProperty;\nmodule.exports = function (it, key) {\n return hasOwnProperty.call(it, key);\n};\n","var dP = require('./_object-dp');\nvar createDesc = require('./_property-desc');\nmodule.exports = require('./_descriptors') ? function (object, key, value) {\n return dP.f(object, key, createDesc(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n","var document = require('./_global').document;\nmodule.exports = document && document.documentElement;\n","module.exports = !require('./_descriptors') && !require('./_fails')(function () {\n return Object.defineProperty(require('./_dom-create')('div'), 'a', { get: function () { return 7; } }).a != 7;\n});\n","// fast apply, http://jsperf.lnkit.com/fast-apply/5\nmodule.exports = function (fn, args, that) {\n var un = that === undefined;\n switch (args.length) {\n case 0: return un ? fn()\n : fn.call(that);\n case 1: return un ? fn(args[0])\n : fn.call(that, args[0]);\n case 2: return un ? fn(args[0], args[1])\n : fn.call(that, args[0], args[1]);\n case 3: return un ? fn(args[0], args[1], args[2])\n : fn.call(that, args[0], args[1], args[2]);\n case 4: return un ? fn(args[0], args[1], args[2], args[3])\n : fn.call(that, args[0], args[1], args[2], args[3]);\n } return fn.apply(that, args);\n};\n","// fallback for non-array-like ES3 and non-enumerable old V8 strings\nvar cof = require('./_cof');\n// eslint-disable-next-line no-prototype-builtins\nmodule.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) {\n return cof(it) == 'String' ? it.split('') : Object(it);\n};\n","// check on default Array iterator\nvar Iterators = require('./_iterators');\nvar ITERATOR = require('./_wks')('iterator');\nvar ArrayProto = Array.prototype;\n\nmodule.exports = function (it) {\n return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it);\n};\n","// 7.2.2 IsArray(argument)\nvar cof = require('./_cof');\nmodule.exports = Array.isArray || function isArray(arg) {\n return cof(arg) == 'Array';\n};\n","module.exports = function (it) {\n return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n","// call something on iterator step with safe closing on error\nvar anObject = require('./_an-object');\nmodule.exports = function (iterator, fn, value, entries) {\n try {\n return entries ? fn(anObject(value)[0], value[1]) : fn(value);\n // 7.4.6 IteratorClose(iterator, completion)\n } catch (e) {\n var ret = iterator['return'];\n if (ret !== undefined) anObject(ret.call(iterator));\n throw e;\n }\n};\n","'use strict';\nvar create = require('./_object-create');\nvar descriptor = require('./_property-desc');\nvar setToStringTag = require('./_set-to-string-tag');\nvar IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\nrequire('./_hide')(IteratorPrototype, require('./_wks')('iterator'), function () { return this; });\n\nmodule.exports = function (Constructor, NAME, next) {\n Constructor.prototype = create(IteratorPrototype, { next: descriptor(1, next) });\n setToStringTag(Constructor, NAME + ' Iterator');\n};\n","'use strict';\nvar LIBRARY = require('./_library');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar hide = require('./_hide');\nvar Iterators = require('./_iterators');\nvar $iterCreate = require('./_iter-create');\nvar setToStringTag = require('./_set-to-string-tag');\nvar getPrototypeOf = require('./_object-gpo');\nvar ITERATOR = require('./_wks')('iterator');\nvar BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next`\nvar FF_ITERATOR = '@@iterator';\nvar KEYS = 'keys';\nvar VALUES = 'values';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) {\n $iterCreate(Constructor, NAME, next);\n var getMethod = function (kind) {\n if (!BUGGY && kind in proto) return proto[kind];\n switch (kind) {\n case KEYS: return function keys() { return new Constructor(this, kind); };\n case VALUES: return function values() { return new Constructor(this, kind); };\n } return function entries() { return new Constructor(this, kind); };\n };\n var TAG = NAME + ' Iterator';\n var DEF_VALUES = DEFAULT == VALUES;\n var VALUES_BUG = false;\n var proto = Base.prototype;\n var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT];\n var $default = $native || getMethod(DEFAULT);\n var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined;\n var $anyNative = NAME == 'Array' ? proto.entries || $native : $native;\n var methods, key, IteratorPrototype;\n // Fix native\n if ($anyNative) {\n IteratorPrototype = getPrototypeOf($anyNative.call(new Base()));\n if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) {\n // Set @@toStringTag to native iterators\n setToStringTag(IteratorPrototype, TAG, true);\n // fix for some old engines\n if (!LIBRARY && typeof IteratorPrototype[ITERATOR] != 'function') hide(IteratorPrototype, ITERATOR, returnThis);\n }\n }\n // fix Array#{values, @@iterator}.name in V8 / FF\n if (DEF_VALUES && $native && $native.name !== VALUES) {\n VALUES_BUG = true;\n $default = function values() { return $native.call(this); };\n }\n // Define iterator\n if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) {\n hide(proto, ITERATOR, $default);\n }\n // Plug for library\n Iterators[NAME] = $default;\n Iterators[TAG] = returnThis;\n if (DEFAULT) {\n methods = {\n values: DEF_VALUES ? $default : getMethod(VALUES),\n keys: IS_SET ? $default : getMethod(KEYS),\n entries: $entries\n };\n if (FORCED) for (key in methods) {\n if (!(key in proto)) redefine(proto, key, methods[key]);\n } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);\n }\n return methods;\n};\n","var ITERATOR = require('./_wks')('iterator');\nvar SAFE_CLOSING = false;\n\ntry {\n var riter = [7][ITERATOR]();\n riter['return'] = function () { SAFE_CLOSING = true; };\n // eslint-disable-next-line no-throw-literal\n Array.from(riter, function () { throw 2; });\n} catch (e) { /* empty */ }\n\nmodule.exports = function (exec, skipClosing) {\n if (!skipClosing && !SAFE_CLOSING) return false;\n var safe = false;\n try {\n var arr = [7];\n var iter = arr[ITERATOR]();\n iter.next = function () { return { done: safe = true }; };\n arr[ITERATOR] = function () { return iter; };\n exec(arr);\n } catch (e) { /* empty */ }\n return safe;\n};\n","module.exports = function (done, value) {\n return { value: value, done: !!done };\n};\n","module.exports = {};\n","module.exports = true;\n","var META = require('./_uid')('meta');\nvar isObject = require('./_is-object');\nvar has = require('./_has');\nvar setDesc = require('./_object-dp').f;\nvar id = 0;\nvar isExtensible = Object.isExtensible || function () {\n return true;\n};\nvar FREEZE = !require('./_fails')(function () {\n return isExtensible(Object.preventExtensions({}));\n});\nvar setMeta = function (it) {\n setDesc(it, META, { value: {\n i: 'O' + ++id, // object ID\n w: {} // weak collections IDs\n } });\n};\nvar fastKey = function (it, create) {\n // return primitive with prefix\n if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return 'F';\n // not necessary to add metadata\n if (!create) return 'E';\n // add missing metadata\n setMeta(it);\n // return object ID\n } return it[META].i;\n};\nvar getWeak = function (it, create) {\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return true;\n // not necessary to add metadata\n if (!create) return false;\n // add missing metadata\n setMeta(it);\n // return hash weak collections IDs\n } return it[META].w;\n};\n// add metadata on freeze-family methods calling\nvar onFreeze = function (it) {\n if (FREEZE && meta.NEED && isExtensible(it) && !has(it, META)) setMeta(it);\n return it;\n};\nvar meta = module.exports = {\n KEY: META,\n NEED: false,\n fastKey: fastKey,\n getWeak: getWeak,\n onFreeze: onFreeze\n};\n","var global = require('./_global');\nvar macrotask = require('./_task').set;\nvar Observer = global.MutationObserver || global.WebKitMutationObserver;\nvar process = global.process;\nvar Promise = global.Promise;\nvar isNode = require('./_cof')(process) == 'process';\n\nmodule.exports = function () {\n var head, last, notify;\n\n var flush = function () {\n var parent, fn;\n if (isNode && (parent = process.domain)) parent.exit();\n while (head) {\n fn = head.fn;\n head = head.next;\n try {\n fn();\n } catch (e) {\n if (head) notify();\n else last = undefined;\n throw e;\n }\n } last = undefined;\n if (parent) parent.enter();\n };\n\n // Node.js\n if (isNode) {\n notify = function () {\n process.nextTick(flush);\n };\n // browsers with MutationObserver, except iOS Safari - https://github.com/zloirock/core-js/issues/339\n } else if (Observer && !(global.navigator && global.navigator.standalone)) {\n var toggle = true;\n var node = document.createTextNode('');\n new Observer(flush).observe(node, { characterData: true }); // eslint-disable-line no-new\n notify = function () {\n node.data = toggle = !toggle;\n };\n // environments with maybe non-completely correct, but existent Promise\n } else if (Promise && Promise.resolve) {\n // Promise.resolve without an argument throws an error in LG WebOS 2\n var promise = Promise.resolve(undefined);\n notify = function () {\n promise.then(flush);\n };\n // for other environments - macrotask based on:\n // - setImmediate\n // - MessageChannel\n // - window.postMessag\n // - onreadystatechange\n // - setTimeout\n } else {\n notify = function () {\n // strange IE + webpack dev server bug - use .call(global)\n macrotask.call(global, flush);\n };\n }\n\n return function (fn) {\n var task = { fn: fn, next: undefined };\n if (last) last.next = task;\n if (!head) {\n head = task;\n notify();\n } last = task;\n };\n};\n","'use strict';\n// 25.4.1.5 NewPromiseCapability(C)\nvar aFunction = require('./_a-function');\n\nfunction PromiseCapability(C) {\n var resolve, reject;\n this.promise = new C(function ($$resolve, $$reject) {\n if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor');\n resolve = $$resolve;\n reject = $$reject;\n });\n this.resolve = aFunction(resolve);\n this.reject = aFunction(reject);\n}\n\nmodule.exports.f = function (C) {\n return new PromiseCapability(C);\n};\n","// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\nvar anObject = require('./_an-object');\nvar dPs = require('./_object-dps');\nvar enumBugKeys = require('./_enum-bug-keys');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar Empty = function () { /* empty */ };\nvar PROTOTYPE = 'prototype';\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar createDict = function () {\n // Thrash, waste and sodomy: IE GC bug\n var iframe = require('./_dom-create')('iframe');\n var i = enumBugKeys.length;\n var lt = '<';\n var gt = '>';\n var iframeDocument;\n iframe.style.display = 'none';\n require('./_html').appendChild(iframe);\n iframe.src = 'javascript:'; // eslint-disable-line no-script-url\n // createDict = iframe.contentWindow.Object;\n // html.removeChild(iframe);\n iframeDocument = iframe.contentWindow.document;\n iframeDocument.open();\n iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);\n iframeDocument.close();\n createDict = iframeDocument.F;\n while (i--) delete createDict[PROTOTYPE][enumBugKeys[i]];\n return createDict();\n};\n\nmodule.exports = Object.create || function create(O, Properties) {\n var result;\n if (O !== null) {\n Empty[PROTOTYPE] = anObject(O);\n result = new Empty();\n Empty[PROTOTYPE] = null;\n // add \"__proto__\" for Object.getPrototypeOf polyfill\n result[IE_PROTO] = O;\n } else result = createDict();\n return Properties === undefined ? result : dPs(result, Properties);\n};\n","var anObject = require('./_an-object');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar toPrimitive = require('./_to-primitive');\nvar dP = Object.defineProperty;\n\nexports.f = require('./_descriptors') ? Object.defineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPrimitive(P, true);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return dP(O, P, Attributes);\n } catch (e) { /* empty */ }\n if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};\n","var dP = require('./_object-dp');\nvar anObject = require('./_an-object');\nvar getKeys = require('./_object-keys');\n\nmodule.exports = require('./_descriptors') ? Object.defineProperties : function defineProperties(O, Properties) {\n anObject(O);\n var keys = getKeys(Properties);\n var length = keys.length;\n var i = 0;\n var P;\n while (length > i) dP.f(O, P = keys[i++], Properties[P]);\n return O;\n};\n","var pIE = require('./_object-pie');\nvar createDesc = require('./_property-desc');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar has = require('./_has');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nexports.f = require('./_descriptors') ? gOPD : function getOwnPropertyDescriptor(O, P) {\n O = toIObject(O);\n P = toPrimitive(P, true);\n if (IE8_DOM_DEFINE) try {\n return gOPD(O, P);\n } catch (e) { /* empty */ }\n if (has(O, P)) return createDesc(!pIE.f.call(O, P), O[P]);\n};\n","// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\nvar toIObject = require('./_to-iobject');\nvar gOPN = require('./_object-gopn').f;\nvar toString = {}.toString;\n\nvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\n ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function (it) {\n try {\n return gOPN(it);\n } catch (e) {\n return windowNames.slice();\n }\n};\n\nmodule.exports.f = function getOwnPropertyNames(it) {\n return windowNames && toString.call(it) == '[object Window]' ? getWindowNames(it) : gOPN(toIObject(it));\n};\n","// 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O)\nvar $keys = require('./_object-keys-internal');\nvar hiddenKeys = require('./_enum-bug-keys').concat('length', 'prototype');\n\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n return $keys(O, hiddenKeys);\n};\n","exports.f = Object.getOwnPropertySymbols;\n","// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)\nvar has = require('./_has');\nvar toObject = require('./_to-object');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar ObjectProto = Object.prototype;\n\nmodule.exports = Object.getPrototypeOf || function (O) {\n O = toObject(O);\n if (has(O, IE_PROTO)) return O[IE_PROTO];\n if (typeof O.constructor == 'function' && O instanceof O.constructor) {\n return O.constructor.prototype;\n } return O instanceof Object ? ObjectProto : null;\n};\n","var has = require('./_has');\nvar toIObject = require('./_to-iobject');\nvar arrayIndexOf = require('./_array-includes')(false);\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\n\nmodule.exports = function (object, names) {\n var O = toIObject(object);\n var i = 0;\n var result = [];\n var key;\n for (key in O) if (key != IE_PROTO) has(O, key) && result.push(key);\n // Don't enum bug & hidden keys\n while (names.length > i) if (has(O, key = names[i++])) {\n ~arrayIndexOf(result, key) || result.push(key);\n }\n return result;\n};\n","// 19.1.2.14 / 15.2.3.14 Object.keys(O)\nvar $keys = require('./_object-keys-internal');\nvar enumBugKeys = require('./_enum-bug-keys');\n\nmodule.exports = Object.keys || function keys(O) {\n return $keys(O, enumBugKeys);\n};\n","exports.f = {}.propertyIsEnumerable;\n","// most Object methods by ES6 should accept primitives\nvar $export = require('./_export');\nvar core = require('./_core');\nvar fails = require('./_fails');\nmodule.exports = function (KEY, exec) {\n var fn = (core.Object || {})[KEY] || Object[KEY];\n var exp = {};\n exp[KEY] = exec(fn);\n $export($export.S + $export.F * fails(function () { fn(1); }), 'Object', exp);\n};\n","module.exports = function (exec) {\n try {\n return { e: false, v: exec() };\n } catch (e) {\n return { e: true, v: e };\n }\n};\n","var anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar newPromiseCapability = require('./_new-promise-capability');\n\nmodule.exports = function (C, x) {\n anObject(C);\n if (isObject(x) && x.constructor === C) return x;\n var promiseCapability = newPromiseCapability.f(C);\n var resolve = promiseCapability.resolve;\n resolve(x);\n return promiseCapability.promise;\n};\n","module.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n","var hide = require('./_hide');\nmodule.exports = function (target, src, safe) {\n for (var key in src) {\n if (safe && target[key]) target[key] = src[key];\n else hide(target, key, src[key]);\n } return target;\n};\n","module.exports = require('./_hide');\n","'use strict';\nvar global = require('./_global');\nvar core = require('./_core');\nvar dP = require('./_object-dp');\nvar DESCRIPTORS = require('./_descriptors');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (KEY) {\n var C = typeof core[KEY] == 'function' ? core[KEY] : global[KEY];\n if (DESCRIPTORS && C && !C[SPECIES]) dP.f(C, SPECIES, {\n configurable: true,\n get: function () { return this; }\n });\n};\n","var def = require('./_object-dp').f;\nvar has = require('./_has');\nvar TAG = require('./_wks')('toStringTag');\n\nmodule.exports = function (it, tag, stat) {\n if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag });\n};\n","var shared = require('./_shared')('keys');\nvar uid = require('./_uid');\nmodule.exports = function (key) {\n return shared[key] || (shared[key] = uid(key));\n};\n","var core = require('./_core');\nvar global = require('./_global');\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || (global[SHARED] = {});\n\n(module.exports = function (key, value) {\n return store[key] || (store[key] = value !== undefined ? value : {});\n})('versions', []).push({\n version: core.version,\n mode: require('./_library') ? 'pure' : 'global',\n copyright: '© 2019 Denis Pushkarev (zloirock.ru)'\n});\n","// 7.3.20 SpeciesConstructor(O, defaultConstructor)\nvar anObject = require('./_an-object');\nvar aFunction = require('./_a-function');\nvar SPECIES = require('./_wks')('species');\nmodule.exports = function (O, D) {\n var C = anObject(O).constructor;\n var S;\n return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? D : aFunction(S);\n};\n","var toInteger = require('./_to-integer');\nvar defined = require('./_defined');\n// true -> String#at\n// false -> String#codePointAt\nmodule.exports = function (TO_STRING) {\n return function (that, pos) {\n var s = String(defined(that));\n var i = toInteger(pos);\n var l = s.length;\n var a, b;\n if (i < 0 || i >= l) return TO_STRING ? '' : undefined;\n a = s.charCodeAt(i);\n return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff\n ? TO_STRING ? s.charAt(i) : a\n : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;\n };\n};\n","var ctx = require('./_ctx');\nvar invoke = require('./_invoke');\nvar html = require('./_html');\nvar cel = require('./_dom-create');\nvar global = require('./_global');\nvar process = global.process;\nvar setTask = global.setImmediate;\nvar clearTask = global.clearImmediate;\nvar MessageChannel = global.MessageChannel;\nvar Dispatch = global.Dispatch;\nvar counter = 0;\nvar queue = {};\nvar ONREADYSTATECHANGE = 'onreadystatechange';\nvar defer, channel, port;\nvar run = function () {\n var id = +this;\n // eslint-disable-next-line no-prototype-builtins\n if (queue.hasOwnProperty(id)) {\n var fn = queue[id];\n delete queue[id];\n fn();\n }\n};\nvar listener = function (event) {\n run.call(event.data);\n};\n// Node.js 0.9+ & IE10+ has setImmediate, otherwise:\nif (!setTask || !clearTask) {\n setTask = function setImmediate(fn) {\n var args = [];\n var i = 1;\n while (arguments.length > i) args.push(arguments[i++]);\n queue[++counter] = function () {\n // eslint-disable-next-line no-new-func\n invoke(typeof fn == 'function' ? fn : Function(fn), args);\n };\n defer(counter);\n return counter;\n };\n clearTask = function clearImmediate(id) {\n delete queue[id];\n };\n // Node.js 0.8-\n if (require('./_cof')(process) == 'process') {\n defer = function (id) {\n process.nextTick(ctx(run, id, 1));\n };\n // Sphere (JS game engine) Dispatch API\n } else if (Dispatch && Dispatch.now) {\n defer = function (id) {\n Dispatch.now(ctx(run, id, 1));\n };\n // Browsers with MessageChannel, includes WebWorkers\n } else if (MessageChannel) {\n channel = new MessageChannel();\n port = channel.port2;\n channel.port1.onmessage = listener;\n defer = ctx(port.postMessage, port, 1);\n // Browsers with postMessage, skip WebWorkers\n // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'\n } else if (global.addEventListener && typeof postMessage == 'function' && !global.importScripts) {\n defer = function (id) {\n global.postMessage(id + '', '*');\n };\n global.addEventListener('message', listener, false);\n // IE8-\n } else if (ONREADYSTATECHANGE in cel('script')) {\n defer = function (id) {\n html.appendChild(cel('script'))[ONREADYSTATECHANGE] = function () {\n html.removeChild(this);\n run.call(id);\n };\n };\n // Rest old browsers\n } else {\n defer = function (id) {\n setTimeout(ctx(run, id, 1), 0);\n };\n }\n}\nmodule.exports = {\n set: setTask,\n clear: clearTask\n};\n","var toInteger = require('./_to-integer');\nvar max = Math.max;\nvar min = Math.min;\nmodule.exports = function (index, length) {\n index = toInteger(index);\n return index < 0 ? max(index + length, 0) : min(index, length);\n};\n","// 7.1.4 ToInteger\nvar ceil = Math.ceil;\nvar floor = Math.floor;\nmodule.exports = function (it) {\n return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);\n};\n","// to indexed object, toObject with fallback for non-array-like ES3 strings\nvar IObject = require('./_iobject');\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n return IObject(defined(it));\n};\n","// 7.1.15 ToLength\nvar toInteger = require('./_to-integer');\nvar min = Math.min;\nmodule.exports = function (it) {\n return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991\n};\n","// 7.1.13 ToObject(argument)\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n return Object(defined(it));\n};\n","// 7.1.1 ToPrimitive(input [, PreferredType])\nvar isObject = require('./_is-object');\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function (it, S) {\n if (!isObject(it)) return it;\n var fn, val;\n if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;\n if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n throw TypeError(\"Can't convert object to primitive value\");\n};\n","var id = 0;\nvar px = Math.random();\nmodule.exports = function (key) {\n return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));\n};\n","var global = require('./_global');\nvar navigator = global.navigator;\n\nmodule.exports = navigator && navigator.userAgent || '';\n","var global = require('./_global');\nvar core = require('./_core');\nvar LIBRARY = require('./_library');\nvar wksExt = require('./_wks-ext');\nvar defineProperty = require('./_object-dp').f;\nmodule.exports = function (name) {\n var $Symbol = core.Symbol || (core.Symbol = LIBRARY ? {} : global.Symbol || {});\n if (name.charAt(0) != '_' && !(name in $Symbol)) defineProperty($Symbol, name, { value: wksExt.f(name) });\n};\n","exports.f = require('./_wks');\n","var store = require('./_shared')('wks');\nvar uid = require('./_uid');\nvar Symbol = require('./_global').Symbol;\nvar USE_SYMBOL = typeof Symbol == 'function';\n\nvar $exports = module.exports = function (name) {\n return store[name] || (store[name] =\n USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));\n};\n\n$exports.store = store;\n","var classof = require('./_classof');\nvar ITERATOR = require('./_wks')('iterator');\nvar Iterators = require('./_iterators');\nmodule.exports = require('./_core').getIteratorMethod = function (it) {\n if (it != undefined) return it[ITERATOR]\n || it['@@iterator']\n || Iterators[classof(it)];\n};\n","'use strict';\nvar addToUnscopables = require('./_add-to-unscopables');\nvar step = require('./_iter-step');\nvar Iterators = require('./_iterators');\nvar toIObject = require('./_to-iobject');\n\n// 22.1.3.4 Array.prototype.entries()\n// 22.1.3.13 Array.prototype.keys()\n// 22.1.3.29 Array.prototype.values()\n// 22.1.3.30 Array.prototype[@@iterator]()\nmodule.exports = require('./_iter-define')(Array, 'Array', function (iterated, kind) {\n this._t = toIObject(iterated); // target\n this._i = 0; // next index\n this._k = kind; // kind\n// 22.1.5.2.1 %ArrayIteratorPrototype%.next()\n}, function () {\n var O = this._t;\n var kind = this._k;\n var index = this._i++;\n if (!O || index >= O.length) {\n this._t = undefined;\n return step(1);\n }\n if (kind == 'keys') return step(0, index);\n if (kind == 'values') return step(0, O[index]);\n return step(0, [index, O[index]]);\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)\nIterators.Arguments = Iterators.Array;\n\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n","// 19.1.2.14 Object.keys(O)\nvar toObject = require('./_to-object');\nvar $keys = require('./_object-keys');\n\nrequire('./_object-sap')('keys', function () {\n return function keys(it) {\n return $keys(toObject(it));\n };\n});\n","\n\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImVzNi5vYmplY3QudG8tc3RyaW5nLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJmaWxlIjoib3V0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiIl19","'use strict';\nvar LIBRARY = require('./_library');\nvar global = require('./_global');\nvar ctx = require('./_ctx');\nvar classof = require('./_classof');\nvar $export = require('./_export');\nvar isObject = require('./_is-object');\nvar aFunction = require('./_a-function');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar speciesConstructor = require('./_species-constructor');\nvar task = require('./_task').set;\nvar microtask = require('./_microtask')();\nvar newPromiseCapabilityModule = require('./_new-promise-capability');\nvar perform = require('./_perform');\nvar userAgent = require('./_user-agent');\nvar promiseResolve = require('./_promise-resolve');\nvar PROMISE = 'Promise';\nvar TypeError = global.TypeError;\nvar process = global.process;\nvar versions = process && process.versions;\nvar v8 = versions && versions.v8 || '';\nvar $Promise = global[PROMISE];\nvar isNode = classof(process) == 'process';\nvar empty = function () { /* empty */ };\nvar Internal, newGenericPromiseCapability, OwnPromiseCapability, Wrapper;\nvar newPromiseCapability = newGenericPromiseCapability = newPromiseCapabilityModule.f;\n\nvar USE_NATIVE = !!function () {\n try {\n // correct subclassing with @@species support\n var promise = $Promise.resolve(1);\n var FakePromise = (promise.constructor = {})[require('./_wks')('species')] = function (exec) {\n exec(empty, empty);\n };\n // unhandled rejections tracking support, NodeJS Promise without it fails @@species test\n return (isNode || typeof PromiseRejectionEvent == 'function')\n && promise.then(empty) instanceof FakePromise\n // v8 6.6 (Node 10 and Chrome 66) have a bug with resolving custom thenables\n // https://bugs.chromium.org/p/chromium/issues/detail?id=830565\n // we can't detect it synchronously, so just check versions\n && v8.indexOf('6.6') !== 0\n && userAgent.indexOf('Chrome/66') === -1;\n } catch (e) { /* empty */ }\n}();\n\n// helpers\nvar isThenable = function (it) {\n var then;\n return isObject(it) && typeof (then = it.then) == 'function' ? then : false;\n};\nvar notify = function (promise, isReject) {\n if (promise._n) return;\n promise._n = true;\n var chain = promise._c;\n microtask(function () {\n var value = promise._v;\n var ok = promise._s == 1;\n var i = 0;\n var run = function (reaction) {\n var handler = ok ? reaction.ok : reaction.fail;\n var resolve = reaction.resolve;\n var reject = reaction.reject;\n var domain = reaction.domain;\n var result, then, exited;\n try {\n if (handler) {\n if (!ok) {\n if (promise._h == 2) onHandleUnhandled(promise);\n promise._h = 1;\n }\n if (handler === true) result = value;\n else {\n if (domain) domain.enter();\n result = handler(value); // may throw\n if (domain) {\n domain.exit();\n exited = true;\n }\n }\n if (result === reaction.promise) {\n reject(TypeError('Promise-chain cycle'));\n } else if (then = isThenable(result)) {\n then.call(result, resolve, reject);\n } else resolve(result);\n } else reject(value);\n } catch (e) {\n if (domain && !exited) domain.exit();\n reject(e);\n }\n };\n while (chain.length > i) run(chain[i++]); // variable length - can't use forEach\n promise._c = [];\n promise._n = false;\n if (isReject && !promise._h) onUnhandled(promise);\n });\n};\nvar onUnhandled = function (promise) {\n task.call(global, function () {\n var value = promise._v;\n var unhandled = isUnhandled(promise);\n var result, handler, console;\n if (unhandled) {\n result = perform(function () {\n if (isNode) {\n process.emit('unhandledRejection', value, promise);\n } else if (handler = global.onunhandledrejection) {\n handler({ promise: promise, reason: value });\n } else if ((console = global.console) && console.error) {\n console.error('Unhandled promise rejection', value);\n }\n });\n // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should\n promise._h = isNode || isUnhandled(promise) ? 2 : 1;\n } promise._a = undefined;\n if (unhandled && result.e) throw result.v;\n });\n};\nvar isUnhandled = function (promise) {\n return promise._h !== 1 && (promise._a || promise._c).length === 0;\n};\nvar onHandleUnhandled = function (promise) {\n task.call(global, function () {\n var handler;\n if (isNode) {\n process.emit('rejectionHandled', promise);\n } else if (handler = global.onrejectionhandled) {\n handler({ promise: promise, reason: promise._v });\n }\n });\n};\nvar $reject = function (value) {\n var promise = this;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n promise._v = value;\n promise._s = 2;\n if (!promise._a) promise._a = promise._c.slice();\n notify(promise, true);\n};\nvar $resolve = function (value) {\n var promise = this;\n var then;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n try {\n if (promise === value) throw TypeError(\"Promise can't be resolved itself\");\n if (then = isThenable(value)) {\n microtask(function () {\n var wrapper = { _w: promise, _d: false }; // wrap\n try {\n then.call(value, ctx($resolve, wrapper, 1), ctx($reject, wrapper, 1));\n } catch (e) {\n $reject.call(wrapper, e);\n }\n });\n } else {\n promise._v = value;\n promise._s = 1;\n notify(promise, false);\n }\n } catch (e) {\n $reject.call({ _w: promise, _d: false }, e); // wrap\n }\n};\n\n// constructor polyfill\nif (!USE_NATIVE) {\n // 25.4.3.1 Promise(executor)\n $Promise = function Promise(executor) {\n anInstance(this, $Promise, PROMISE, '_h');\n aFunction(executor);\n Internal.call(this);\n try {\n executor(ctx($resolve, this, 1), ctx($reject, this, 1));\n } catch (err) {\n $reject.call(this, err);\n }\n };\n // eslint-disable-next-line no-unused-vars\n Internal = function Promise(executor) {\n this._c = []; // <- awaiting reactions\n this._a = undefined; // <- checked in isUnhandled reactions\n this._s = 0; // <- state\n this._d = false; // <- done\n this._v = undefined; // <- value\n this._h = 0; // <- rejection state, 0 - default, 1 - handled, 2 - unhandled\n this._n = false; // <- notify\n };\n Internal.prototype = require('./_redefine-all')($Promise.prototype, {\n // 25.4.5.3 Promise.prototype.then(onFulfilled, onRejected)\n then: function then(onFulfilled, onRejected) {\n var reaction = newPromiseCapability(speciesConstructor(this, $Promise));\n reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true;\n reaction.fail = typeof onRejected == 'function' && onRejected;\n reaction.domain = isNode ? process.domain : undefined;\n this._c.push(reaction);\n if (this._a) this._a.push(reaction);\n if (this._s) notify(this, false);\n return reaction.promise;\n },\n // 25.4.5.1 Promise.prototype.catch(onRejected)\n 'catch': function (onRejected) {\n return this.then(undefined, onRejected);\n }\n });\n OwnPromiseCapability = function () {\n var promise = new Internal();\n this.promise = promise;\n this.resolve = ctx($resolve, promise, 1);\n this.reject = ctx($reject, promise, 1);\n };\n newPromiseCapabilityModule.f = newPromiseCapability = function (C) {\n return C === $Promise || C === Wrapper\n ? new OwnPromiseCapability(C)\n : newGenericPromiseCapability(C);\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Promise: $Promise });\nrequire('./_set-to-string-tag')($Promise, PROMISE);\nrequire('./_set-species')(PROMISE);\nWrapper = require('./_core')[PROMISE];\n\n// statics\n$export($export.S + $export.F * !USE_NATIVE, PROMISE, {\n // 25.4.4.5 Promise.reject(r)\n reject: function reject(r) {\n var capability = newPromiseCapability(this);\n var $$reject = capability.reject;\n $$reject(r);\n return capability.promise;\n }\n});\n$export($export.S + $export.F * (LIBRARY || !USE_NATIVE), PROMISE, {\n // 25.4.4.6 Promise.resolve(x)\n resolve: function resolve(x) {\n return promiseResolve(LIBRARY && this === Wrapper ? $Promise : this, x);\n }\n});\n$export($export.S + $export.F * !(USE_NATIVE && require('./_iter-detect')(function (iter) {\n $Promise.all(iter)['catch'](empty);\n})), PROMISE, {\n // 25.4.4.1 Promise.all(iterable)\n all: function all(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var resolve = capability.resolve;\n var reject = capability.reject;\n var result = perform(function () {\n var values = [];\n var index = 0;\n var remaining = 1;\n forOf(iterable, false, function (promise) {\n var $index = index++;\n var alreadyCalled = false;\n values.push(undefined);\n remaining++;\n C.resolve(promise).then(function (value) {\n if (alreadyCalled) return;\n alreadyCalled = true;\n values[$index] = value;\n --remaining || resolve(values);\n }, reject);\n });\n --remaining || resolve(values);\n });\n if (result.e) reject(result.v);\n return capability.promise;\n },\n // 25.4.4.4 Promise.race(iterable)\n race: function race(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var reject = capability.reject;\n var result = perform(function () {\n forOf(iterable, false, function (promise) {\n C.resolve(promise).then(capability.resolve, reject);\n });\n });\n if (result.e) reject(result.v);\n return capability.promise;\n }\n});\n","'use strict';\nvar $at = require('./_string-at')(true);\n\n// 21.1.3.27 String.prototype[@@iterator]()\nrequire('./_iter-define')(String, 'String', function (iterated) {\n this._t = String(iterated); // target\n this._i = 0; // next index\n// 21.1.5.2.1 %StringIteratorPrototype%.next()\n}, function () {\n var O = this._t;\n var index = this._i;\n var point;\n if (index >= O.length) return { value: undefined, done: true };\n point = $at(O, index);\n this._i += point.length;\n return { value: point, done: false };\n});\n","'use strict';\n// ECMAScript 6 symbols shim\nvar global = require('./_global');\nvar has = require('./_has');\nvar DESCRIPTORS = require('./_descriptors');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar META = require('./_meta').KEY;\nvar $fails = require('./_fails');\nvar shared = require('./_shared');\nvar setToStringTag = require('./_set-to-string-tag');\nvar uid = require('./_uid');\nvar wks = require('./_wks');\nvar wksExt = require('./_wks-ext');\nvar wksDefine = require('./_wks-define');\nvar enumKeys = require('./_enum-keys');\nvar isArray = require('./_is-array');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar toObject = require('./_to-object');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar createDesc = require('./_property-desc');\nvar _create = require('./_object-create');\nvar gOPNExt = require('./_object-gopn-ext');\nvar $GOPD = require('./_object-gopd');\nvar $GOPS = require('./_object-gops');\nvar $DP = require('./_object-dp');\nvar $keys = require('./_object-keys');\nvar gOPD = $GOPD.f;\nvar dP = $DP.f;\nvar gOPN = gOPNExt.f;\nvar $Symbol = global.Symbol;\nvar $JSON = global.JSON;\nvar _stringify = $JSON && $JSON.stringify;\nvar PROTOTYPE = 'prototype';\nvar HIDDEN = wks('_hidden');\nvar TO_PRIMITIVE = wks('toPrimitive');\nvar isEnum = {}.propertyIsEnumerable;\nvar SymbolRegistry = shared('symbol-registry');\nvar AllSymbols = shared('symbols');\nvar OPSymbols = shared('op-symbols');\nvar ObjectProto = Object[PROTOTYPE];\nvar USE_NATIVE = typeof $Symbol == 'function' && !!$GOPS.f;\nvar QObject = global.QObject;\n// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173\nvar setter = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;\n\n// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687\nvar setSymbolDesc = DESCRIPTORS && $fails(function () {\n return _create(dP({}, 'a', {\n get: function () { return dP(this, 'a', { value: 7 }).a; }\n })).a != 7;\n}) ? function (it, key, D) {\n var protoDesc = gOPD(ObjectProto, key);\n if (protoDesc) delete ObjectProto[key];\n dP(it, key, D);\n if (protoDesc && it !== ObjectProto) dP(ObjectProto, key, protoDesc);\n} : dP;\n\nvar wrap = function (tag) {\n var sym = AllSymbols[tag] = _create($Symbol[PROTOTYPE]);\n sym._k = tag;\n return sym;\n};\n\nvar isSymbol = USE_NATIVE && typeof $Symbol.iterator == 'symbol' ? function (it) {\n return typeof it == 'symbol';\n} : function (it) {\n return it instanceof $Symbol;\n};\n\nvar $defineProperty = function defineProperty(it, key, D) {\n if (it === ObjectProto) $defineProperty(OPSymbols, key, D);\n anObject(it);\n key = toPrimitive(key, true);\n anObject(D);\n if (has(AllSymbols, key)) {\n if (!D.enumerable) {\n if (!has(it, HIDDEN)) dP(it, HIDDEN, createDesc(1, {}));\n it[HIDDEN][key] = true;\n } else {\n if (has(it, HIDDEN) && it[HIDDEN][key]) it[HIDDEN][key] = false;\n D = _create(D, { enumerable: createDesc(0, false) });\n } return setSymbolDesc(it, key, D);\n } return dP(it, key, D);\n};\nvar $defineProperties = function defineProperties(it, P) {\n anObject(it);\n var keys = enumKeys(P = toIObject(P));\n var i = 0;\n var l = keys.length;\n var key;\n while (l > i) $defineProperty(it, key = keys[i++], P[key]);\n return it;\n};\nvar $create = function create(it, P) {\n return P === undefined ? _create(it) : $defineProperties(_create(it), P);\n};\nvar $propertyIsEnumerable = function propertyIsEnumerable(key) {\n var E = isEnum.call(this, key = toPrimitive(key, true));\n if (this === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return false;\n return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key] ? E : true;\n};\nvar $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key) {\n it = toIObject(it);\n key = toPrimitive(key, true);\n if (it === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return;\n var D = gOPD(it, key);\n if (D && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key])) D.enumerable = true;\n return D;\n};\nvar $getOwnPropertyNames = function getOwnPropertyNames(it) {\n var names = gOPN(toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (!has(AllSymbols, key = names[i++]) && key != HIDDEN && key != META) result.push(key);\n } return result;\n};\nvar $getOwnPropertySymbols = function getOwnPropertySymbols(it) {\n var IS_OP = it === ObjectProto;\n var names = gOPN(IS_OP ? OPSymbols : toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (has(AllSymbols, key = names[i++]) && (IS_OP ? has(ObjectProto, key) : true)) result.push(AllSymbols[key]);\n } return result;\n};\n\n// 19.4.1.1 Symbol([description])\nif (!USE_NATIVE) {\n $Symbol = function Symbol() {\n if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor!');\n var tag = uid(arguments.length > 0 ? arguments[0] : undefined);\n var $set = function (value) {\n if (this === ObjectProto) $set.call(OPSymbols, value);\n if (has(this, HIDDEN) && has(this[HIDDEN], tag)) this[HIDDEN][tag] = false;\n setSymbolDesc(this, tag, createDesc(1, value));\n };\n if (DESCRIPTORS && setter) setSymbolDesc(ObjectProto, tag, { configurable: true, set: $set });\n return wrap(tag);\n };\n redefine($Symbol[PROTOTYPE], 'toString', function toString() {\n return this._k;\n });\n\n $GOPD.f = $getOwnPropertyDescriptor;\n $DP.f = $defineProperty;\n require('./_object-gopn').f = gOPNExt.f = $getOwnPropertyNames;\n require('./_object-pie').f = $propertyIsEnumerable;\n $GOPS.f = $getOwnPropertySymbols;\n\n if (DESCRIPTORS && !require('./_library')) {\n redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true);\n }\n\n wksExt.f = function (name) {\n return wrap(wks(name));\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Symbol: $Symbol });\n\nfor (var es6Symbols = (\n // 19.4.2.2, 19.4.2.3, 19.4.2.4, 19.4.2.6, 19.4.2.8, 19.4.2.9, 19.4.2.10, 19.4.2.11, 19.4.2.12, 19.4.2.13, 19.4.2.14\n 'hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables'\n).split(','), j = 0; es6Symbols.length > j;)wks(es6Symbols[j++]);\n\nfor (var wellKnownSymbols = $keys(wks.store), k = 0; wellKnownSymbols.length > k;) wksDefine(wellKnownSymbols[k++]);\n\n$export($export.S + $export.F * !USE_NATIVE, 'Symbol', {\n // 19.4.2.1 Symbol.for(key)\n 'for': function (key) {\n return has(SymbolRegistry, key += '')\n ? SymbolRegistry[key]\n : SymbolRegistry[key] = $Symbol(key);\n },\n // 19.4.2.5 Symbol.keyFor(sym)\n keyFor: function keyFor(sym) {\n if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol!');\n for (var key in SymbolRegistry) if (SymbolRegistry[key] === sym) return key;\n },\n useSetter: function () { setter = true; },\n useSimple: function () { setter = false; }\n});\n\n$export($export.S + $export.F * !USE_NATIVE, 'Object', {\n // 19.1.2.2 Object.create(O [, Properties])\n create: $create,\n // 19.1.2.4 Object.defineProperty(O, P, Attributes)\n defineProperty: $defineProperty,\n // 19.1.2.3 Object.defineProperties(O, Properties)\n defineProperties: $defineProperties,\n // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\n getOwnPropertyDescriptor: $getOwnPropertyDescriptor,\n // 19.1.2.7 Object.getOwnPropertyNames(O)\n getOwnPropertyNames: $getOwnPropertyNames,\n // 19.1.2.8 Object.getOwnPropertySymbols(O)\n getOwnPropertySymbols: $getOwnPropertySymbols\n});\n\n// Chrome 38 and 39 `Object.getOwnPropertySymbols` fails on primitives\n// https://bugs.chromium.org/p/v8/issues/detail?id=3443\nvar FAILS_ON_PRIMITIVES = $fails(function () { $GOPS.f(1); });\n\n$export($export.S + $export.F * FAILS_ON_PRIMITIVES, 'Object', {\n getOwnPropertySymbols: function getOwnPropertySymbols(it) {\n return $GOPS.f(toObject(it));\n }\n});\n\n// 24.3.2 JSON.stringify(value [, replacer [, space]])\n$JSON && $export($export.S + $export.F * (!USE_NATIVE || $fails(function () {\n var S = $Symbol();\n // MS Edge converts symbol values to JSON as {}\n // WebKit converts symbol values to JSON as null\n // V8 throws on boxed symbols\n return _stringify([S]) != '[null]' || _stringify({ a: S }) != '{}' || _stringify(Object(S)) != '{}';\n})), 'JSON', {\n stringify: function stringify(it) {\n var args = [it];\n var i = 1;\n var replacer, $replacer;\n while (arguments.length > i) args.push(arguments[i++]);\n $replacer = replacer = args[1];\n if (!isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined\n if (!isArray(replacer)) replacer = function (key, value) {\n if (typeof $replacer == 'function') value = $replacer.call(this, key, value);\n if (!isSymbol(value)) return value;\n };\n args[1] = replacer;\n return _stringify.apply($JSON, args);\n }\n});\n\n// 19.4.3.4 Symbol.prototype[@@toPrimitive](hint)\n$Symbol[PROTOTYPE][TO_PRIMITIVE] || require('./_hide')($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf);\n// 19.4.3.5 Symbol.prototype[@@toStringTag]\nsetToStringTag($Symbol, 'Symbol');\n// 20.2.1.9 Math[@@toStringTag]\nsetToStringTag(Math, 'Math', true);\n// 24.3.3 JSON[@@toStringTag]\nsetToStringTag(global.JSON, 'JSON', true);\n","// https://github.com/tc39/proposal-promise-finally\n'use strict';\nvar $export = require('./_export');\nvar core = require('./_core');\nvar global = require('./_global');\nvar speciesConstructor = require('./_species-constructor');\nvar promiseResolve = require('./_promise-resolve');\n\n$export($export.P + $export.R, 'Promise', { 'finally': function (onFinally) {\n var C = speciesConstructor(this, core.Promise || global.Promise);\n var isFunction = typeof onFinally == 'function';\n return this.then(\n isFunction ? function (x) {\n return promiseResolve(C, onFinally()).then(function () { return x; });\n } : onFinally,\n isFunction ? function (e) {\n return promiseResolve(C, onFinally()).then(function () { throw e; });\n } : onFinally\n );\n} });\n","'use strict';\n// https://github.com/tc39/proposal-promise-try\nvar $export = require('./_export');\nvar newPromiseCapability = require('./_new-promise-capability');\nvar perform = require('./_perform');\n\n$export($export.S, 'Promise', { 'try': function (callbackfn) {\n var promiseCapability = newPromiseCapability.f(this);\n var result = perform(callbackfn);\n (result.e ? promiseCapability.reject : promiseCapability.resolve)(result.v);\n return promiseCapability.promise;\n} });\n","require('./_wks-define')('asyncIterator');\n","require('./_wks-define')('observable');\n","require('./es6.array.iterator');\nvar global = require('./_global');\nvar hide = require('./_hide');\nvar Iterators = require('./_iterators');\nvar TO_STRING_TAG = require('./_wks')('toStringTag');\n\nvar DOMIterables = ('CSSRuleList,CSSStyleDeclaration,CSSValueList,ClientRectList,DOMRectList,DOMStringList,' +\n 'DOMTokenList,DataTransferItemList,FileList,HTMLAllCollection,HTMLCollection,HTMLFormElement,HTMLSelectElement,' +\n 'MediaList,MimeTypeArray,NamedNodeMap,NodeList,PaintRequestList,Plugin,PluginArray,SVGLengthList,SVGNumberList,' +\n 'SVGPathSegList,SVGPointList,SVGStringList,SVGTransformList,SourceBufferList,StyleSheetList,TextTrackCueList,' +\n 'TextTrackList,TouchList').split(',');\n\nfor (var i = 0; i < DOMIterables.length; i++) {\n var NAME = DOMIterables[i];\n var Collection = global[NAME];\n var proto = Collection && Collection.prototype;\n if (proto && !proto[TO_STRING_TAG]) hide(proto, TO_STRING_TAG, NAME);\n Iterators[NAME] = Iterators.Array;\n}\n","/**\n * Returns a function, that, as long as it continues to be invoked, will not\n * be triggered. The function will be called after it stops being called for\n * N milliseconds. If `immediate` is passed, trigger the function on the\n * leading edge, instead of the trailing. The function also has a property 'clear' \n * that is a function which will clear the timer to prevent previously scheduled executions. \n *\n * @source underscore.js\n * @see http://unscriptable.com/2009/03/20/debouncing-javascript-methods/\n * @param {Function} function to wrap\n * @param {Number} timeout in ms (`100`)\n * @param {Boolean} whether to execute at the beginning (`false`)\n * @api public\n */\nfunction debounce(func, wait, immediate){\n var timeout, args, context, timestamp, result;\n if (null == wait) wait = 100;\n\n function later() {\n var last = Date.now() - timestamp;\n\n if (last < wait && last >= 0) {\n timeout = setTimeout(later, wait - last);\n } else {\n timeout = null;\n if (!immediate) {\n result = func.apply(context, args);\n context = args = null;\n }\n }\n };\n\n var debounced = function(){\n context = this;\n args = arguments;\n timestamp = Date.now();\n var callNow = immediate && !timeout;\n if (!timeout) timeout = setTimeout(later, wait);\n if (callNow) {\n result = func.apply(context, args);\n context = args = null;\n }\n\n return result;\n };\n\n debounced.clear = function() {\n if (timeout) {\n clearTimeout(timeout);\n timeout = null;\n }\n };\n \n debounced.flush = function() {\n if (timeout) {\n result = func.apply(context, args);\n context = args = null;\n \n clearTimeout(timeout);\n timeout = null;\n }\n };\n\n return debounced;\n};\n\n// Adds compatibility for ES modules\ndebounce.debounce = debounce;\n\nmodule.exports = debounce;\n","'use strict';\nvar token = '%[a-f0-9]{2}';\nvar singleMatcher = new RegExp(token, 'gi');\nvar multiMatcher = new RegExp('(' + token + ')+', 'gi');\n\nfunction decodeComponents(components, split) {\n\ttry {\n\t\t// Try to decode the entire string first\n\t\treturn decodeURIComponent(components.join(''));\n\t} catch (err) {\n\t\t// Do nothing\n\t}\n\n\tif (components.length === 1) {\n\t\treturn components;\n\t}\n\n\tsplit = split || 1;\n\n\t// Split the array in 2 parts\n\tvar left = components.slice(0, split);\n\tvar right = components.slice(split);\n\n\treturn Array.prototype.concat.call([], decodeComponents(left), decodeComponents(right));\n}\n\nfunction decode(input) {\n\ttry {\n\t\treturn decodeURIComponent(input);\n\t} catch (err) {\n\t\tvar tokens = input.match(singleMatcher);\n\n\t\tfor (var i = 1; i < tokens.length; i++) {\n\t\t\tinput = decodeComponents(tokens, i).join('');\n\n\t\t\ttokens = input.match(singleMatcher);\n\t\t}\n\n\t\treturn input;\n\t}\n}\n\nfunction customDecodeURIComponent(input) {\n\t// Keep track of all the replacements and prefill the map with the `BOM`\n\tvar replaceMap = {\n\t\t'%FE%FF': '\\uFFFD\\uFFFD',\n\t\t'%FF%FE': '\\uFFFD\\uFFFD'\n\t};\n\n\tvar match = multiMatcher.exec(input);\n\twhile (match) {\n\t\ttry {\n\t\t\t// Decode as big chunks as possible\n\t\t\treplaceMap[match[0]] = decodeURIComponent(match[0]);\n\t\t} catch (err) {\n\t\t\tvar result = decode(match[0]);\n\n\t\t\tif (result !== match[0]) {\n\t\t\t\treplaceMap[match[0]] = result;\n\t\t\t}\n\t\t}\n\n\t\tmatch = multiMatcher.exec(input);\n\t}\n\n\t// Add `%C2` at the end of the map to make sure it does not replace the combinator before everything else\n\treplaceMap['%C2'] = '\\uFFFD';\n\n\tvar entries = Object.keys(replaceMap);\n\n\tfor (var i = 0; i < entries.length; i++) {\n\t\t// Replace all decoded components\n\t\tvar key = entries[i];\n\t\tinput = input.replace(new RegExp(key, 'g'), replaceMap[key]);\n\t}\n\n\treturn input;\n}\n\nmodule.exports = function (encodedURI) {\n\tif (typeof encodedURI !== 'string') {\n\t\tthrow new TypeError('Expected `encodedURI` to be of type `string`, got `' + typeof encodedURI + '`');\n\t}\n\n\ttry {\n\t\tencodedURI = encodedURI.replace(/\\+/g, ' ');\n\n\t\t// Try the built in decoder first\n\t\treturn decodeURIComponent(encodedURI);\n\t} catch (err) {\n\t\t// Fallback to a more advanced decoder\n\t\treturn customDecodeURIComponent(encodedURI);\n\t}\n};\n","// This file can be required in Browserify and Node.js for automatic polyfill\n// To use it: require('es6-promise/auto');\n'use strict';\nmodule.exports = require('./').polyfill();\n","/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license Licensed under MIT license\n * See https://raw.githubusercontent.com/stefanpenner/es6-promise/master/LICENSE\n * @version v4.2.8+1e68dce6\n */\n\n(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n\ttypeof define === 'function' && define.amd ? define(factory) :\n\t(global.ES6Promise = factory());\n}(this, (function () { 'use strict';\n\nfunction objectOrFunction(x) {\n var type = typeof x;\n return x !== null && (type === 'object' || type === 'function');\n}\n\nfunction isFunction(x) {\n return typeof x === 'function';\n}\n\n\n\nvar _isArray = void 0;\nif (Array.isArray) {\n _isArray = Array.isArray;\n} else {\n _isArray = function (x) {\n return Object.prototype.toString.call(x) === '[object Array]';\n };\n}\n\nvar isArray = _isArray;\n\nvar len = 0;\nvar vertxNext = void 0;\nvar customSchedulerFn = void 0;\n\nvar asap = function asap(callback, arg) {\n queue[len] = callback;\n queue[len + 1] = arg;\n len += 2;\n if (len === 2) {\n // If len is 2, that means that we need to schedule an async flush.\n // If additional callbacks are queued before the queue is flushed, they\n // will be processed by this flush that we are scheduling.\n if (customSchedulerFn) {\n customSchedulerFn(flush);\n } else {\n scheduleFlush();\n }\n }\n};\n\nfunction setScheduler(scheduleFn) {\n customSchedulerFn = scheduleFn;\n}\n\nfunction setAsap(asapFn) {\n asap = asapFn;\n}\n\nvar browserWindow = typeof window !== 'undefined' ? window : undefined;\nvar browserGlobal = browserWindow || {};\nvar BrowserMutationObserver = browserGlobal.MutationObserver || browserGlobal.WebKitMutationObserver;\nvar isNode = typeof self === 'undefined' && typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n\n// test for web worker but not in IE10\nvar isWorker = typeof Uint8ClampedArray !== 'undefined' && typeof importScripts !== 'undefined' && typeof MessageChannel !== 'undefined';\n\n// node\nfunction useNextTick() {\n // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n // see https://github.com/cujojs/when/issues/410 for details\n return function () {\n return process.nextTick(flush);\n };\n}\n\n// vertx\nfunction useVertxTimer() {\n if (typeof vertxNext !== 'undefined') {\n return function () {\n vertxNext(flush);\n };\n }\n\n return useSetTimeout();\n}\n\nfunction useMutationObserver() {\n var iterations = 0;\n var observer = new BrowserMutationObserver(flush);\n var node = document.createTextNode('');\n observer.observe(node, { characterData: true });\n\n return function () {\n node.data = iterations = ++iterations % 2;\n };\n}\n\n// web worker\nfunction useMessageChannel() {\n var channel = new MessageChannel();\n channel.port1.onmessage = flush;\n return function () {\n return channel.port2.postMessage(0);\n };\n}\n\nfunction useSetTimeout() {\n // Store setTimeout reference so es6-promise will be unaffected by\n // other code modifying setTimeout (like sinon.useFakeTimers())\n var globalSetTimeout = setTimeout;\n return function () {\n return globalSetTimeout(flush, 1);\n };\n}\n\nvar queue = new Array(1000);\nfunction flush() {\n for (var i = 0; i < len; i += 2) {\n var callback = queue[i];\n var arg = queue[i + 1];\n\n callback(arg);\n\n queue[i] = undefined;\n queue[i + 1] = undefined;\n }\n\n len = 0;\n}\n\nfunction attemptVertx() {\n try {\n var vertx = Function('return this')().require('vertx');\n vertxNext = vertx.runOnLoop || vertx.runOnContext;\n return useVertxTimer();\n } catch (e) {\n return useSetTimeout();\n }\n}\n\nvar scheduleFlush = void 0;\n// Decide what async method to use to triggering processing of queued callbacks:\nif (isNode) {\n scheduleFlush = useNextTick();\n} else if (BrowserMutationObserver) {\n scheduleFlush = useMutationObserver();\n} else if (isWorker) {\n scheduleFlush = useMessageChannel();\n} else if (browserWindow === undefined && typeof require === 'function') {\n scheduleFlush = attemptVertx();\n} else {\n scheduleFlush = useSetTimeout();\n}\n\nfunction then(onFulfillment, onRejection) {\n var parent = this;\n\n var child = new this.constructor(noop);\n\n if (child[PROMISE_ID] === undefined) {\n makePromise(child);\n }\n\n var _state = parent._state;\n\n\n if (_state) {\n var callback = arguments[_state - 1];\n asap(function () {\n return invokeCallback(_state, child, callback, parent._result);\n });\n } else {\n subscribe(parent, child, onFulfillment, onRejection);\n }\n\n return child;\n}\n\n/**\n `Promise.resolve` returns a promise that will become resolved with the\n passed `value`. It is shorthand for the following:\n\n ```javascript\n let promise = new Promise(function(resolve, reject){\n resolve(1);\n });\n\n promise.then(function(value){\n // value === 1\n });\n ```\n\n Instead of writing the above, your code now simply becomes the following:\n\n ```javascript\n let promise = Promise.resolve(1);\n\n promise.then(function(value){\n // value === 1\n });\n ```\n\n @method resolve\n @static\n @param {Any} value value that the returned promise will be resolved with\n Useful for tooling.\n @return {Promise} a promise that will become fulfilled with the given\n `value`\n*/\nfunction resolve$1(object) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (object && typeof object === 'object' && object.constructor === Constructor) {\n return object;\n }\n\n var promise = new Constructor(noop);\n resolve(promise, object);\n return promise;\n}\n\nvar PROMISE_ID = Math.random().toString(36).substring(2);\n\nfunction noop() {}\n\nvar PENDING = void 0;\nvar FULFILLED = 1;\nvar REJECTED = 2;\n\nfunction selfFulfillment() {\n return new TypeError(\"You cannot resolve a promise with itself\");\n}\n\nfunction cannotReturnOwn() {\n return new TypeError('A promises callback cannot return that same promise.');\n}\n\nfunction tryThen(then$$1, value, fulfillmentHandler, rejectionHandler) {\n try {\n then$$1.call(value, fulfillmentHandler, rejectionHandler);\n } catch (e) {\n return e;\n }\n}\n\nfunction handleForeignThenable(promise, thenable, then$$1) {\n asap(function (promise) {\n var sealed = false;\n var error = tryThen(then$$1, thenable, function (value) {\n if (sealed) {\n return;\n }\n sealed = true;\n if (thenable !== value) {\n resolve(promise, value);\n } else {\n fulfill(promise, value);\n }\n }, function (reason) {\n if (sealed) {\n return;\n }\n sealed = true;\n\n reject(promise, reason);\n }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n if (!sealed && error) {\n sealed = true;\n reject(promise, error);\n }\n }, promise);\n}\n\nfunction handleOwnThenable(promise, thenable) {\n if (thenable._state === FULFILLED) {\n fulfill(promise, thenable._result);\n } else if (thenable._state === REJECTED) {\n reject(promise, thenable._result);\n } else {\n subscribe(thenable, undefined, function (value) {\n return resolve(promise, value);\n }, function (reason) {\n return reject(promise, reason);\n });\n }\n}\n\nfunction handleMaybeThenable(promise, maybeThenable, then$$1) {\n if (maybeThenable.constructor === promise.constructor && then$$1 === then && maybeThenable.constructor.resolve === resolve$1) {\n handleOwnThenable(promise, maybeThenable);\n } else {\n if (then$$1 === undefined) {\n fulfill(promise, maybeThenable);\n } else if (isFunction(then$$1)) {\n handleForeignThenable(promise, maybeThenable, then$$1);\n } else {\n fulfill(promise, maybeThenable);\n }\n }\n}\n\nfunction resolve(promise, value) {\n if (promise === value) {\n reject(promise, selfFulfillment());\n } else if (objectOrFunction(value)) {\n var then$$1 = void 0;\n try {\n then$$1 = value.then;\n } catch (error) {\n reject(promise, error);\n return;\n }\n handleMaybeThenable(promise, value, then$$1);\n } else {\n fulfill(promise, value);\n }\n}\n\nfunction publishRejection(promise) {\n if (promise._onerror) {\n promise._onerror(promise._result);\n }\n\n publish(promise);\n}\n\nfunction fulfill(promise, value) {\n if (promise._state !== PENDING) {\n return;\n }\n\n promise._result = value;\n promise._state = FULFILLED;\n\n if (promise._subscribers.length !== 0) {\n asap(publish, promise);\n }\n}\n\nfunction reject(promise, reason) {\n if (promise._state !== PENDING) {\n return;\n }\n promise._state = REJECTED;\n promise._result = reason;\n\n asap(publishRejection, promise);\n}\n\nfunction subscribe(parent, child, onFulfillment, onRejection) {\n var _subscribers = parent._subscribers;\n var length = _subscribers.length;\n\n\n parent._onerror = null;\n\n _subscribers[length] = child;\n _subscribers[length + FULFILLED] = onFulfillment;\n _subscribers[length + REJECTED] = onRejection;\n\n if (length === 0 && parent._state) {\n asap(publish, parent);\n }\n}\n\nfunction publish(promise) {\n var subscribers = promise._subscribers;\n var settled = promise._state;\n\n if (subscribers.length === 0) {\n return;\n }\n\n var child = void 0,\n callback = void 0,\n detail = promise._result;\n\n for (var i = 0; i < subscribers.length; i += 3) {\n child = subscribers[i];\n callback = subscribers[i + settled];\n\n if (child) {\n invokeCallback(settled, child, callback, detail);\n } else {\n callback(detail);\n }\n }\n\n promise._subscribers.length = 0;\n}\n\nfunction invokeCallback(settled, promise, callback, detail) {\n var hasCallback = isFunction(callback),\n value = void 0,\n error = void 0,\n succeeded = true;\n\n if (hasCallback) {\n try {\n value = callback(detail);\n } catch (e) {\n succeeded = false;\n error = e;\n }\n\n if (promise === value) {\n reject(promise, cannotReturnOwn());\n return;\n }\n } else {\n value = detail;\n }\n\n if (promise._state !== PENDING) {\n // noop\n } else if (hasCallback && succeeded) {\n resolve(promise, value);\n } else if (succeeded === false) {\n reject(promise, error);\n } else if (settled === FULFILLED) {\n fulfill(promise, value);\n } else if (settled === REJECTED) {\n reject(promise, value);\n }\n}\n\nfunction initializePromise(promise, resolver) {\n try {\n resolver(function resolvePromise(value) {\n resolve(promise, value);\n }, function rejectPromise(reason) {\n reject(promise, reason);\n });\n } catch (e) {\n reject(promise, e);\n }\n}\n\nvar id = 0;\nfunction nextId() {\n return id++;\n}\n\nfunction makePromise(promise) {\n promise[PROMISE_ID] = id++;\n promise._state = undefined;\n promise._result = undefined;\n promise._subscribers = [];\n}\n\nfunction validationError() {\n return new Error('Array Methods must be provided an Array');\n}\n\nvar Enumerator = function () {\n function Enumerator(Constructor, input) {\n this._instanceConstructor = Constructor;\n this.promise = new Constructor(noop);\n\n if (!this.promise[PROMISE_ID]) {\n makePromise(this.promise);\n }\n\n if (isArray(input)) {\n this.length = input.length;\n this._remaining = input.length;\n\n this._result = new Array(this.length);\n\n if (this.length === 0) {\n fulfill(this.promise, this._result);\n } else {\n this.length = this.length || 0;\n this._enumerate(input);\n if (this._remaining === 0) {\n fulfill(this.promise, this._result);\n }\n }\n } else {\n reject(this.promise, validationError());\n }\n }\n\n Enumerator.prototype._enumerate = function _enumerate(input) {\n for (var i = 0; this._state === PENDING && i < input.length; i++) {\n this._eachEntry(input[i], i);\n }\n };\n\n Enumerator.prototype._eachEntry = function _eachEntry(entry, i) {\n var c = this._instanceConstructor;\n var resolve$$1 = c.resolve;\n\n\n if (resolve$$1 === resolve$1) {\n var _then = void 0;\n var error = void 0;\n var didError = false;\n try {\n _then = entry.then;\n } catch (e) {\n didError = true;\n error = e;\n }\n\n if (_then === then && entry._state !== PENDING) {\n this._settledAt(entry._state, i, entry._result);\n } else if (typeof _then !== 'function') {\n this._remaining--;\n this._result[i] = entry;\n } else if (c === Promise$1) {\n var promise = new c(noop);\n if (didError) {\n reject(promise, error);\n } else {\n handleMaybeThenable(promise, entry, _then);\n }\n this._willSettleAt(promise, i);\n } else {\n this._willSettleAt(new c(function (resolve$$1) {\n return resolve$$1(entry);\n }), i);\n }\n } else {\n this._willSettleAt(resolve$$1(entry), i);\n }\n };\n\n Enumerator.prototype._settledAt = function _settledAt(state, i, value) {\n var promise = this.promise;\n\n\n if (promise._state === PENDING) {\n this._remaining--;\n\n if (state === REJECTED) {\n reject(promise, value);\n } else {\n this._result[i] = value;\n }\n }\n\n if (this._remaining === 0) {\n fulfill(promise, this._result);\n }\n };\n\n Enumerator.prototype._willSettleAt = function _willSettleAt(promise, i) {\n var enumerator = this;\n\n subscribe(promise, undefined, function (value) {\n return enumerator._settledAt(FULFILLED, i, value);\n }, function (reason) {\n return enumerator._settledAt(REJECTED, i, reason);\n });\n };\n\n return Enumerator;\n}();\n\n/**\n `Promise.all` accepts an array of promises, and returns a new promise which\n is fulfilled with an array of fulfillment values for the passed promises, or\n rejected with the reason of the first passed promise to be rejected. It casts all\n elements of the passed iterable to promises as it runs this algorithm.\n\n Example:\n\n ```javascript\n let promise1 = resolve(1);\n let promise2 = resolve(2);\n let promise3 = resolve(3);\n let promises = [ promise1, promise2, promise3 ];\n\n Promise.all(promises).then(function(array){\n // The array here would be [ 1, 2, 3 ];\n });\n ```\n\n If any of the `promises` given to `all` are rejected, the first promise\n that is rejected will be given as an argument to the returned promises's\n rejection handler. For example:\n\n Example:\n\n ```javascript\n let promise1 = resolve(1);\n let promise2 = reject(new Error(\"2\"));\n let promise3 = reject(new Error(\"3\"));\n let promises = [ promise1, promise2, promise3 ];\n\n Promise.all(promises).then(function(array){\n // Code here never runs because there are rejected promises!\n }, function(error) {\n // error.message === \"2\"\n });\n ```\n\n @method all\n @static\n @param {Array} entries array of promises\n @param {String} label optional string for labeling the promise.\n Useful for tooling.\n @return {Promise} promise that is fulfilled when all `promises` have been\n fulfilled, or rejected if any of them become rejected.\n @static\n*/\nfunction all(entries) {\n return new Enumerator(this, entries).promise;\n}\n\n/**\n `Promise.race` returns a new promise which is settled in the same way as the\n first passed promise to settle.\n\n Example:\n\n ```javascript\n let promise1 = new Promise(function(resolve, reject){\n setTimeout(function(){\n resolve('promise 1');\n }, 200);\n });\n\n let promise2 = new Promise(function(resolve, reject){\n setTimeout(function(){\n resolve('promise 2');\n }, 100);\n });\n\n Promise.race([promise1, promise2]).then(function(result){\n // result === 'promise 2' because it was resolved before promise1\n // was resolved.\n });\n ```\n\n `Promise.race` is deterministic in that only the state of the first\n settled promise matters. For example, even if other promises given to the\n `promises` array argument are resolved, but the first settled promise has\n become rejected before the other promises became fulfilled, the returned\n promise will become rejected:\n\n ```javascript\n let promise1 = new Promise(function(resolve, reject){\n setTimeout(function(){\n resolve('promise 1');\n }, 200);\n });\n\n let promise2 = new Promise(function(resolve, reject){\n setTimeout(function(){\n reject(new Error('promise 2'));\n }, 100);\n });\n\n Promise.race([promise1, promise2]).then(function(result){\n // Code here never runs\n }, function(reason){\n // reason.message === 'promise 2' because promise 2 became rejected before\n // promise 1 became fulfilled\n });\n ```\n\n An example real-world use case is implementing timeouts:\n\n ```javascript\n Promise.race([ajax('foo.json'), timeout(5000)])\n ```\n\n @method race\n @static\n @param {Array} promises array of promises to observe\n Useful for tooling.\n @return {Promise} a promise which settles in the same way as the first passed\n promise to settle.\n*/\nfunction race(entries) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (!isArray(entries)) {\n return new Constructor(function (_, reject) {\n return reject(new TypeError('You must pass an array to race.'));\n });\n } else {\n return new Constructor(function (resolve, reject) {\n var length = entries.length;\n for (var i = 0; i < length; i++) {\n Constructor.resolve(entries[i]).then(resolve, reject);\n }\n });\n }\n}\n\n/**\n `Promise.reject` returns a promise rejected with the passed `reason`.\n It is shorthand for the following:\n\n ```javascript\n let promise = new Promise(function(resolve, reject){\n reject(new Error('WHOOPS'));\n });\n\n promise.then(function(value){\n // Code here doesn't run because the promise is rejected!\n }, function(reason){\n // reason.message === 'WHOOPS'\n });\n ```\n\n Instead of writing the above, your code now simply becomes the following:\n\n ```javascript\n let promise = Promise.reject(new Error('WHOOPS'));\n\n promise.then(function(value){\n // Code here doesn't run because the promise is rejected!\n }, function(reason){\n // reason.message === 'WHOOPS'\n });\n ```\n\n @method reject\n @static\n @param {Any} reason value that the returned promise will be rejected with.\n Useful for tooling.\n @return {Promise} a promise rejected with the given `reason`.\n*/\nfunction reject$1(reason) {\n /*jshint validthis:true */\n var Constructor = this;\n var promise = new Constructor(noop);\n reject(promise, reason);\n return promise;\n}\n\nfunction needsResolver() {\n throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n}\n\nfunction needsNew() {\n throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n}\n\n/**\n Promise objects represent the eventual result of an asynchronous operation. The\n primary way of interacting with a promise is through its `then` method, which\n registers callbacks to receive either a promise's eventual value or the reason\n why the promise cannot be fulfilled.\n\n Terminology\n -----------\n\n - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n - `thenable` is an object or function that defines a `then` method.\n - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n - `exception` is a value that is thrown using the throw statement.\n - `reason` is a value that indicates why a promise was rejected.\n - `settled` the final resting state of a promise, fulfilled or rejected.\n\n A promise can be in one of three states: pending, fulfilled, or rejected.\n\n Promises that are fulfilled have a fulfillment value and are in the fulfilled\n state. Promises that are rejected have a rejection reason and are in the\n rejected state. A fulfillment value is never a thenable.\n\n Promises can also be said to *resolve* a value. If this value is also a\n promise, then the original promise's settled state will match the value's\n settled state. So a promise that *resolves* a promise that rejects will\n itself reject, and a promise that *resolves* a promise that fulfills will\n itself fulfill.\n\n\n Basic Usage:\n ------------\n\n ```js\n let promise = new Promise(function(resolve, reject) {\n // on success\n resolve(value);\n\n // on failure\n reject(reason);\n });\n\n promise.then(function(value) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Advanced Usage:\n ---------------\n\n Promises shine when abstracting away asynchronous interactions such as\n `XMLHttpRequest`s.\n\n ```js\n function getJSON(url) {\n return new Promise(function(resolve, reject){\n let xhr = new XMLHttpRequest();\n\n xhr.open('GET', url);\n xhr.onreadystatechange = handler;\n xhr.responseType = 'json';\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send();\n\n function handler() {\n if (this.readyState === this.DONE) {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n }\n }\n };\n });\n }\n\n getJSON('/posts.json').then(function(json) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Unlike callbacks, promises are great composable primitives.\n\n ```js\n Promise.all([\n getJSON('/posts'),\n getJSON('/comments')\n ]).then(function(values){\n values[0] // => postsJSON\n values[1] // => commentsJSON\n\n return values;\n });\n ```\n\n @class Promise\n @param {Function} resolver\n Useful for tooling.\n @constructor\n*/\n\nvar Promise$1 = function () {\n function Promise(resolver) {\n this[PROMISE_ID] = nextId();\n this._result = this._state = undefined;\n this._subscribers = [];\n\n if (noop !== resolver) {\n typeof resolver !== 'function' && needsResolver();\n this instanceof Promise ? initializePromise(this, resolver) : needsNew();\n }\n }\n\n /**\n The primary way of interacting with a promise is through its `then` method,\n which registers callbacks to receive either a promise's eventual value or the\n reason why the promise cannot be fulfilled.\n ```js\n findUser().then(function(user){\n // user is available\n }, function(reason){\n // user is unavailable, and you are given the reason why\n });\n ```\n Chaining\n --------\n The return value of `then` is itself a promise. This second, 'downstream'\n promise is resolved with the return value of the first promise's fulfillment\n or rejection handler, or rejected if the handler throws an exception.\n ```js\n findUser().then(function (user) {\n return user.name;\n }, function (reason) {\n return 'default name';\n }).then(function (userName) {\n // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n // will be `'default name'`\n });\n findUser().then(function (user) {\n throw new Error('Found user, but still unhappy');\n }, function (reason) {\n throw new Error('`findUser` rejected and we're unhappy');\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n });\n ```\n If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n ```js\n findUser().then(function (user) {\n throw new PedagogicalException('Upstream error');\n }).then(function (value) {\n // never reached\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // The `PedgagocialException` is propagated all the way down to here\n });\n ```\n Assimilation\n ------------\n Sometimes the value you want to propagate to a downstream promise can only be\n retrieved asynchronously. This can be achieved by returning a promise in the\n fulfillment or rejection handler. The downstream promise will then be pending\n until the returned promise is settled. This is called *assimilation*.\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // The user's comments are now available\n });\n ```\n If the assimliated promise rejects, then the downstream promise will also reject.\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // If `findCommentsByAuthor` fulfills, we'll have the value here\n }, function (reason) {\n // If `findCommentsByAuthor` rejects, we'll have the reason here\n });\n ```\n Simple Example\n --------------\n Synchronous Example\n ```javascript\n let result;\n try {\n result = findResult();\n // success\n } catch(reason) {\n // failure\n }\n ```\n Errback Example\n ```js\n findResult(function(result, err){\n if (err) {\n // failure\n } else {\n // success\n }\n });\n ```\n Promise Example;\n ```javascript\n findResult().then(function(result){\n // success\n }, function(reason){\n // failure\n });\n ```\n Advanced Example\n --------------\n Synchronous Example\n ```javascript\n let author, books;\n try {\n author = findAuthor();\n books = findBooksByAuthor(author);\n // success\n } catch(reason) {\n // failure\n }\n ```\n Errback Example\n ```js\n function foundBooks(books) {\n }\n function failure(reason) {\n }\n findAuthor(function(author, err){\n if (err) {\n failure(err);\n // failure\n } else {\n try {\n findBoooksByAuthor(author, function(books, err) {\n if (err) {\n failure(err);\n } else {\n try {\n foundBooks(books);\n } catch(reason) {\n failure(reason);\n }\n }\n });\n } catch(error) {\n failure(err);\n }\n // success\n }\n });\n ```\n Promise Example;\n ```javascript\n findAuthor().\n then(findBooksByAuthor).\n then(function(books){\n // found books\n }).catch(function(reason){\n // something went wrong\n });\n ```\n @method then\n @param {Function} onFulfilled\n @param {Function} onRejected\n Useful for tooling.\n @return {Promise}\n */\n\n /**\n `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n as the catch block of a try/catch statement.\n ```js\n function findAuthor(){\n throw new Error('couldn't find that author');\n }\n // synchronous\n try {\n findAuthor();\n } catch(reason) {\n // something went wrong\n }\n // async with promises\n findAuthor().catch(function(reason){\n // something went wrong\n });\n ```\n @method catch\n @param {Function} onRejection\n Useful for tooling.\n @return {Promise}\n */\n\n\n Promise.prototype.catch = function _catch(onRejection) {\n return this.then(null, onRejection);\n };\n\n /**\n `finally` will be invoked regardless of the promise's fate just as native\n try/catch/finally behaves\n \n Synchronous example:\n \n ```js\n findAuthor() {\n if (Math.random() > 0.5) {\n throw new Error();\n }\n return new Author();\n }\n \n try {\n return findAuthor(); // succeed or fail\n } catch(error) {\n return findOtherAuther();\n } finally {\n // always runs\n // doesn't affect the return value\n }\n ```\n \n Asynchronous example:\n \n ```js\n findAuthor().catch(function(reason){\n return findOtherAuther();\n }).finally(function(){\n // author was either found, or not\n });\n ```\n \n @method finally\n @param {Function} callback\n @return {Promise}\n */\n\n\n Promise.prototype.finally = function _finally(callback) {\n var promise = this;\n var constructor = promise.constructor;\n\n if (isFunction(callback)) {\n return promise.then(function (value) {\n return constructor.resolve(callback()).then(function () {\n return value;\n });\n }, function (reason) {\n return constructor.resolve(callback()).then(function () {\n throw reason;\n });\n });\n }\n\n return promise.then(callback, callback);\n };\n\n return Promise;\n}();\n\nPromise$1.prototype.then = then;\nPromise$1.all = all;\nPromise$1.race = race;\nPromise$1.resolve = resolve$1;\nPromise$1.reject = reject$1;\nPromise$1._setScheduler = setScheduler;\nPromise$1._setAsap = setAsap;\nPromise$1._asap = asap;\n\n/*global self*/\nfunction polyfill() {\n var local = void 0;\n\n if (typeof global !== 'undefined') {\n local = global;\n } else if (typeof self !== 'undefined') {\n local = self;\n } else {\n try {\n local = Function('return this')();\n } catch (e) {\n throw new Error('polyfill failed because global object is unavailable in this environment');\n }\n }\n\n var P = local.Promise;\n\n if (P) {\n var promiseToString = null;\n try {\n promiseToString = Object.prototype.toString.call(P.resolve());\n } catch (e) {\n // silently ignored\n }\n\n if (promiseToString === '[object Promise]' && !P.cast) {\n return;\n }\n }\n\n local.Promise = Promise$1;\n}\n\n// Strange compat..\nPromise$1.polyfill = polyfill;\nPromise$1.Promise = Promise$1;\n\nreturn Promise$1;\n\n})));\n\n\n\n//# sourceMappingURL=es6-promise.map\n","exports.read = function (buffer, offset, isLE, mLen, nBytes) {\n var e, m\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var nBits = -7\n var i = isLE ? (nBytes - 1) : 0\n var d = isLE ? -1 : 1\n var s = buffer[offset + i]\n\n i += d\n\n e = s & ((1 << (-nBits)) - 1)\n s >>= (-nBits)\n nBits += eLen\n for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n m = e & ((1 << (-nBits)) - 1)\n e >>= (-nBits)\n nBits += mLen\n for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n if (e === 0) {\n e = 1 - eBias\n } else if (e === eMax) {\n return m ? NaN : ((s ? -1 : 1) * Infinity)\n } else {\n m = m + Math.pow(2, mLen)\n e = e - eBias\n }\n return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n var e, m, c\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n var i = isLE ? 0 : (nBytes - 1)\n var d = isLE ? 1 : -1\n var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n value = Math.abs(value)\n\n if (isNaN(value) || value === Infinity) {\n m = isNaN(value) ? 1 : 0\n e = eMax\n } else {\n e = Math.floor(Math.log(value) / Math.LN2)\n if (value * (c = Math.pow(2, -e)) < 1) {\n e--\n c *= 2\n }\n if (e + eBias >= 1) {\n value += rt / c\n } else {\n value += rt * Math.pow(2, 1 - eBias)\n }\n if (value * c >= 2) {\n e++\n c /= 2\n }\n\n if (e + eBias >= eMax) {\n m = 0\n e = eMax\n } else if (e + eBias >= 1) {\n m = ((value * c) - 1) * Math.pow(2, mLen)\n e = e + eBias\n } else {\n m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n e = 0\n }\n }\n\n for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n e = (e << mLen) | m\n eLen += mLen\n for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n buffer[offset + i - d] |= s * 128\n}\n","/*!\n * jQuery JavaScript Library v3.4.1\n * https://jquery.com/\n *\n * Includes Sizzle.js\n * https://sizzlejs.com/\n *\n * Copyright JS Foundation and other contributors\n * Released under the MIT license\n * https://jquery.org/license\n *\n * Date: 2019-05-01T21:04Z\n */\n( function( global, factory ) {\n\n\t\"use strict\";\n\n\tif ( typeof module === \"object\" && typeof module.exports === \"object\" ) {\n\n\t\t// For CommonJS and CommonJS-like environments where a proper `window`\n\t\t// is present, execute the factory and get jQuery.\n\t\t// For environments that do not have a `window` with a `document`\n\t\t// (such as Node.js), expose a factory as module.exports.\n\t\t// This accentuates the need for the creation of a real `window`.\n\t\t// e.g. var jQuery = require(\"jquery\")(window);\n\t\t// See ticket #14549 for more info.\n\t\tmodule.exports = global.document ?\n\t\t\tfactory( global, true ) :\n\t\t\tfunction( w ) {\n\t\t\t\tif ( !w.document ) {\n\t\t\t\t\tthrow new Error( \"jQuery requires a window with a document\" );\n\t\t\t\t}\n\t\t\t\treturn factory( w );\n\t\t\t};\n\t} else {\n\t\tfactory( global );\n\t}\n\n// Pass this if window is not defined yet\n} )( typeof window !== \"undefined\" ? window : this, function( window, noGlobal ) {\n\n// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1\n// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode\n// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common\n// enough that all such attempts are guarded in a try block.\n\"use strict\";\n\nvar arr = [];\n\nvar document = window.document;\n\nvar getProto = Object.getPrototypeOf;\n\nvar slice = arr.slice;\n\nvar concat = arr.concat;\n\nvar push = arr.push;\n\nvar indexOf = arr.indexOf;\n\nvar class2type = {};\n\nvar toString = class2type.toString;\n\nvar hasOwn = class2type.hasOwnProperty;\n\nvar fnToString = hasOwn.toString;\n\nvar ObjectFunctionString = fnToString.call( Object );\n\nvar support = {};\n\nvar isFunction = function isFunction( obj ) {\n\n // Support: Chrome <=57, Firefox <=52\n // In some browsers, typeof returns \"function\" for HTML elements\n // (i.e., `typeof document.createElement( \"object\" ) === \"function\"`).\n // We don't want to classify *any* DOM node as a function.\n return typeof obj === \"function\" && typeof obj.nodeType !== \"number\";\n };\n\n\nvar isWindow = function isWindow( obj ) {\n\t\treturn obj != null && obj === obj.window;\n\t};\n\n\n\n\n\tvar preservedScriptAttributes = {\n\t\ttype: true,\n\t\tsrc: true,\n\t\tnonce: true,\n\t\tnoModule: true\n\t};\n\n\tfunction DOMEval( code, node, doc ) {\n\t\tdoc = doc || document;\n\n\t\tvar i, val,\n\t\t\tscript = doc.createElement( \"script\" );\n\n\t\tscript.text = code;\n\t\tif ( node ) {\n\t\t\tfor ( i in preservedScriptAttributes ) {\n\n\t\t\t\t// Support: Firefox 64+, Edge 18+\n\t\t\t\t// Some browsers don't support the \"nonce\" property on scripts.\n\t\t\t\t// On the other hand, just using `getAttribute` is not enough as\n\t\t\t\t// the `nonce` attribute is reset to an empty string whenever it\n\t\t\t\t// becomes browsing-context connected.\n\t\t\t\t// See https://github.com/whatwg/html/issues/2369\n\t\t\t\t// See https://html.spec.whatwg.org/#nonce-attributes\n\t\t\t\t// The `node.getAttribute` check was added for the sake of\n\t\t\t\t// `jQuery.globalEval` so that it can fake a nonce-containing node\n\t\t\t\t// via an object.\n\t\t\t\tval = node[ i ] || node.getAttribute && node.getAttribute( i );\n\t\t\t\tif ( val ) {\n\t\t\t\t\tscript.setAttribute( i, val );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tdoc.head.appendChild( script ).parentNode.removeChild( script );\n\t}\n\n\nfunction toType( obj ) {\n\tif ( obj == null ) {\n\t\treturn obj + \"\";\n\t}\n\n\t// Support: Android <=2.3 only (functionish RegExp)\n\treturn typeof obj === \"object\" || typeof obj === \"function\" ?\n\t\tclass2type[ toString.call( obj ) ] || \"object\" :\n\t\ttypeof obj;\n}\n/* global Symbol */\n// Defining this global in .eslintrc.json would create a danger of using the global\n// unguarded in another place, it seems safer to define global only for this module\n\n\n\nvar\n\tversion = \"3.4.1\",\n\n\t// Define a local copy of jQuery\n\tjQuery = function( selector, context ) {\n\n\t\t// The jQuery object is actually just the init constructor 'enhanced'\n\t\t// Need init if jQuery is called (just allow error to be thrown if not included)\n\t\treturn new jQuery.fn.init( selector, context );\n\t},\n\n\t// Support: Android <=4.0 only\n\t// Make sure we trim BOM and NBSP\n\trtrim = /^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g;\n\njQuery.fn = jQuery.prototype = {\n\n\t// The current version of jQuery being used\n\tjquery: version,\n\n\tconstructor: jQuery,\n\n\t// The default length of a jQuery object is 0\n\tlength: 0,\n\n\ttoArray: function() {\n\t\treturn slice.call( this );\n\t},\n\n\t// Get the Nth element in the matched element set OR\n\t// Get the whole matched element set as a clean array\n\tget: function( num ) {\n\n\t\t// Return all the elements in a clean array\n\t\tif ( num == null ) {\n\t\t\treturn slice.call( this );\n\t\t}\n\n\t\t// Return just the one element from the set\n\t\treturn num < 0 ? this[ num + this.length ] : this[ num ];\n\t},\n\n\t// Take an array of elements and push it onto the stack\n\t// (returning the new matched element set)\n\tpushStack: function( elems ) {\n\n\t\t// Build a new jQuery matched element set\n\t\tvar ret = jQuery.merge( this.constructor(), elems );\n\n\t\t// Add the old object onto the stack (as a reference)\n\t\tret.prevObject = this;\n\n\t\t// Return the newly-formed element set\n\t\treturn ret;\n\t},\n\n\t// Execute a callback for every element in the matched set.\n\teach: function( callback ) {\n\t\treturn jQuery.each( this, callback );\n\t},\n\n\tmap: function( callback ) {\n\t\treturn this.pushStack( jQuery.map( this, function( elem, i ) {\n\t\t\treturn callback.call( elem, i, elem );\n\t\t} ) );\n\t},\n\n\tslice: function() {\n\t\treturn this.pushStack( slice.apply( this, arguments ) );\n\t},\n\n\tfirst: function() {\n\t\treturn this.eq( 0 );\n\t},\n\n\tlast: function() {\n\t\treturn this.eq( -1 );\n\t},\n\n\teq: function( i ) {\n\t\tvar len = this.length,\n\t\t\tj = +i + ( i < 0 ? len : 0 );\n\t\treturn this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );\n\t},\n\n\tend: function() {\n\t\treturn this.prevObject || this.constructor();\n\t},\n\n\t// For internal use only.\n\t// Behaves like an Array's method, not like a jQuery method.\n\tpush: push,\n\tsort: arr.sort,\n\tsplice: arr.splice\n};\n\njQuery.extend = jQuery.fn.extend = function() {\n\tvar options, name, src, copy, copyIsArray, clone,\n\t\ttarget = arguments[ 0 ] || {},\n\t\ti = 1,\n\t\tlength = arguments.length,\n\t\tdeep = false;\n\n\t// Handle a deep copy situation\n\tif ( typeof target === \"boolean\" ) {\n\t\tdeep = target;\n\n\t\t// Skip the boolean and the target\n\t\ttarget = arguments[ i ] || {};\n\t\ti++;\n\t}\n\n\t// Handle case when target is a string or something (possible in deep copy)\n\tif ( typeof target !== \"object\" && !isFunction( target ) ) {\n\t\ttarget = {};\n\t}\n\n\t// Extend jQuery itself if only one argument is passed\n\tif ( i === length ) {\n\t\ttarget = this;\n\t\ti--;\n\t}\n\n\tfor ( ; i < length; i++ ) {\n\n\t\t// Only deal with non-null/undefined values\n\t\tif ( ( options = arguments[ i ] ) != null ) {\n\n\t\t\t// Extend the base object\n\t\t\tfor ( name in options ) {\n\t\t\t\tcopy = options[ name ];\n\n\t\t\t\t// Prevent Object.prototype pollution\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif ( name === \"__proto__\" || target === copy ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\tif ( deep && copy && ( jQuery.isPlainObject( copy ) ||\n\t\t\t\t\t( copyIsArray = Array.isArray( copy ) ) ) ) {\n\t\t\t\t\tsrc = target[ name ];\n\n\t\t\t\t\t// Ensure proper type for the source value\n\t\t\t\t\tif ( copyIsArray && !Array.isArray( src ) ) {\n\t\t\t\t\t\tclone = [];\n\t\t\t\t\t} else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) {\n\t\t\t\t\t\tclone = {};\n\t\t\t\t\t} else {\n\t\t\t\t\t\tclone = src;\n\t\t\t\t\t}\n\t\t\t\t\tcopyIsArray = false;\n\n\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\ttarget[ name ] = jQuery.extend( deep, clone, copy );\n\n\t\t\t\t// Don't bring in undefined values\n\t\t\t\t} else if ( copy !== undefined ) {\n\t\t\t\t\ttarget[ name ] = copy;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\njQuery.extend( {\n\n\t// Unique for each copy of jQuery on the page\n\texpando: \"jQuery\" + ( version + Math.random() ).replace( /\\D/g, \"\" ),\n\n\t// Assume jQuery is ready without the ready module\n\tisReady: true,\n\n\terror: function( msg ) {\n\t\tthrow new Error( msg );\n\t},\n\n\tnoop: function() {},\n\n\tisPlainObject: function( obj ) {\n\t\tvar proto, Ctor;\n\n\t\t// Detect obvious negatives\n\t\t// Use toString instead of jQuery.type to catch host objects\n\t\tif ( !obj || toString.call( obj ) !== \"[object Object]\" ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tproto = getProto( obj );\n\n\t\t// Objects with no prototype (e.g., `Object.create( null )`) are plain\n\t\tif ( !proto ) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Objects with prototype are plain iff they were constructed by a global Object function\n\t\tCtor = hasOwn.call( proto, \"constructor\" ) && proto.constructor;\n\t\treturn typeof Ctor === \"function\" && fnToString.call( Ctor ) === ObjectFunctionString;\n\t},\n\n\tisEmptyObject: function( obj ) {\n\t\tvar name;\n\n\t\tfor ( name in obj ) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t},\n\n\t// Evaluates a script in a global context\n\tglobalEval: function( code, options ) {\n\t\tDOMEval( code, { nonce: options && options.nonce } );\n\t},\n\n\teach: function( obj, callback ) {\n\t\tvar length, i = 0;\n\n\t\tif ( isArrayLike( obj ) ) {\n\t\t\tlength = obj.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tfor ( i in obj ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn obj;\n\t},\n\n\t// Support: Android <=4.0 only\n\ttrim: function( text ) {\n\t\treturn text == null ?\n\t\t\t\"\" :\n\t\t\t( text + \"\" ).replace( rtrim, \"\" );\n\t},\n\n\t// results is for internal usage only\n\tmakeArray: function( arr, results ) {\n\t\tvar ret = results || [];\n\n\t\tif ( arr != null ) {\n\t\t\tif ( isArrayLike( Object( arr ) ) ) {\n\t\t\t\tjQuery.merge( ret,\n\t\t\t\t\ttypeof arr === \"string\" ?\n\t\t\t\t\t[ arr ] : arr\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tpush.call( ret, arr );\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\tinArray: function( elem, arr, i ) {\n\t\treturn arr == null ? -1 : indexOf.call( arr, elem, i );\n\t},\n\n\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t// push.apply(_, arraylike) throws on ancient WebKit\n\tmerge: function( first, second ) {\n\t\tvar len = +second.length,\n\t\t\tj = 0,\n\t\t\ti = first.length;\n\n\t\tfor ( ; j < len; j++ ) {\n\t\t\tfirst[ i++ ] = second[ j ];\n\t\t}\n\n\t\tfirst.length = i;\n\n\t\treturn first;\n\t},\n\n\tgrep: function( elems, callback, invert ) {\n\t\tvar callbackInverse,\n\t\t\tmatches = [],\n\t\t\ti = 0,\n\t\t\tlength = elems.length,\n\t\t\tcallbackExpect = !invert;\n\n\t\t// Go through the array, only saving the items\n\t\t// that pass the validator function\n\t\tfor ( ; i < length; i++ ) {\n\t\t\tcallbackInverse = !callback( elems[ i ], i );\n\t\t\tif ( callbackInverse !== callbackExpect ) {\n\t\t\t\tmatches.push( elems[ i ] );\n\t\t\t}\n\t\t}\n\n\t\treturn matches;\n\t},\n\n\t// arg is for internal usage only\n\tmap: function( elems, callback, arg ) {\n\t\tvar length, value,\n\t\t\ti = 0,\n\t\t\tret = [];\n\n\t\t// Go through the array, translating each of the items to their new values\n\t\tif ( isArrayLike( elems ) ) {\n\t\t\tlength = elems.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Go through every key on the object,\n\t\t} else {\n\t\t\tfor ( i in elems ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Flatten any nested arrays\n\t\treturn concat.apply( [], ret );\n\t},\n\n\t// A global GUID counter for objects\n\tguid: 1,\n\n\t// jQuery.support is not used in Core but other projects attach their\n\t// properties to it so it needs to exist.\n\tsupport: support\n} );\n\nif ( typeof Symbol === \"function\" ) {\n\tjQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];\n}\n\n// Populate the class2type map\njQuery.each( \"Boolean Number String Function Array Date RegExp Object Error Symbol\".split( \" \" ),\nfunction( i, name ) {\n\tclass2type[ \"[object \" + name + \"]\" ] = name.toLowerCase();\n} );\n\nfunction isArrayLike( obj ) {\n\n\t// Support: real iOS 8.2 only (not reproducible in simulator)\n\t// `in` check used to prevent JIT error (gh-2145)\n\t// hasOwn isn't used here due to false negatives\n\t// regarding Nodelist length in IE\n\tvar length = !!obj && \"length\" in obj && obj.length,\n\t\ttype = toType( obj );\n\n\tif ( isFunction( obj ) || isWindow( obj ) ) {\n\t\treturn false;\n\t}\n\n\treturn type === \"array\" || length === 0 ||\n\t\ttypeof length === \"number\" && length > 0 && ( length - 1 ) in obj;\n}\nvar Sizzle =\n/*!\n * Sizzle CSS Selector Engine v2.3.4\n * https://sizzlejs.com/\n *\n * Copyright JS Foundation and other contributors\n * Released under the MIT license\n * https://js.foundation/\n *\n * Date: 2019-04-08\n */\n(function( window ) {\n\nvar i,\n\tsupport,\n\tExpr,\n\tgetText,\n\tisXML,\n\ttokenize,\n\tcompile,\n\tselect,\n\toutermostContext,\n\tsortInput,\n\thasDuplicate,\n\n\t// Local document vars\n\tsetDocument,\n\tdocument,\n\tdocElem,\n\tdocumentIsHTML,\n\trbuggyQSA,\n\trbuggyMatches,\n\tmatches,\n\tcontains,\n\n\t// Instance-specific data\n\texpando = \"sizzle\" + 1 * new Date(),\n\tpreferredDoc = window.document,\n\tdirruns = 0,\n\tdone = 0,\n\tclassCache = createCache(),\n\ttokenCache = createCache(),\n\tcompilerCache = createCache(),\n\tnonnativeSelectorCache = createCache(),\n\tsortOrder = function( a, b ) {\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t}\n\t\treturn 0;\n\t},\n\n\t// Instance methods\n\thasOwn = ({}).hasOwnProperty,\n\tarr = [],\n\tpop = arr.pop,\n\tpush_native = arr.push,\n\tpush = arr.push,\n\tslice = arr.slice,\n\t// Use a stripped-down indexOf as it's faster than native\n\t// https://jsperf.com/thor-indexof-vs-for/5\n\tindexOf = function( list, elem ) {\n\t\tvar i = 0,\n\t\t\tlen = list.length;\n\t\tfor ( ; i < len; i++ ) {\n\t\t\tif ( list[i] === elem ) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t},\n\n\tbooleans = \"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped\",\n\n\t// Regular expressions\n\n\t// http://www.w3.org/TR/css3-selectors/#whitespace\n\twhitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",\n\n\t// http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier\n\tidentifier = \"(?:\\\\\\\\.|[\\\\w-]|[^\\0-\\\\xa0])+\",\n\n\t// Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors\n\tattributes = \"\\\\[\" + whitespace + \"*(\" + identifier + \")(?:\" + whitespace +\n\t\t// Operator (capture 2)\n\t\t\"*([*^$|!~]?=)\" + whitespace +\n\t\t// \"Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]\"\n\t\t\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" + whitespace +\n\t\t\"*\\\\]\",\n\n\tpseudos = \":(\" + identifier + \")(?:\\\\((\" +\n\t\t// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n\t\t// 1. quoted (capture 3; capture 4 or capture 5)\n\t\t\"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" +\n\t\t// 2. simple (capture 6)\n\t\t\"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" +\n\t\t// 3. anything else (capture 2)\n\t\t\".*\" +\n\t\t\")\\\\)|)\",\n\n\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n\trwhitespace = new RegExp( whitespace + \"+\", \"g\" ),\n\trtrim = new RegExp( \"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + whitespace + \"+$\", \"g\" ),\n\n\trcomma = new RegExp( \"^\" + whitespace + \"*,\" + whitespace + \"*\" ),\n\trcombinators = new RegExp( \"^\" + whitespace + \"*([>+~]|\" + whitespace + \")\" + whitespace + \"*\" ),\n\trdescend = new RegExp( whitespace + \"|>\" ),\n\n\trpseudo = new RegExp( pseudos ),\n\tridentifier = new RegExp( \"^\" + identifier + \"$\" ),\n\n\tmatchExpr = {\n\t\t\"ID\": new RegExp( \"^#(\" + identifier + \")\" ),\n\t\t\"CLASS\": new RegExp( \"^\\\\.(\" + identifier + \")\" ),\n\t\t\"TAG\": new RegExp( \"^(\" + identifier + \"|[*])\" ),\n\t\t\"ATTR\": new RegExp( \"^\" + attributes ),\n\t\t\"PSEUDO\": new RegExp( \"^\" + pseudos ),\n\t\t\"CHILD\": new RegExp( \"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" + whitespace +\n\t\t\t\"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" + whitespace +\n\t\t\t\"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\" ),\n\t\t\"bool\": new RegExp( \"^(?:\" + booleans + \")$\", \"i\" ),\n\t\t// For use in libraries implementing .is()\n\t\t// We use this for POS matching in `select`\n\t\t\"needsContext\": new RegExp( \"^\" + whitespace + \"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" +\n\t\t\twhitespace + \"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\" )\n\t},\n\n\trhtml = /HTML$/i,\n\trinputs = /^(?:input|select|textarea|button)$/i,\n\trheader = /^h\\d$/i,\n\n\trnative = /^[^{]+\\{\\s*\\[native \\w/,\n\n\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\n\trquickExpr = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n\n\trsibling = /[+~]/,\n\n\t// CSS escapes\n\t// http://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\trunescape = new RegExp( \"\\\\\\\\([\\\\da-f]{1,6}\" + whitespace + \"?|(\" + whitespace + \")|.)\", \"ig\" ),\n\tfunescape = function( _, escaped, escapedWhitespace ) {\n\t\tvar high = \"0x\" + escaped - 0x10000;\n\t\t// NaN means non-codepoint\n\t\t// Support: Firefox<24\n\t\t// Workaround erroneous numeric interpretation of +\"0x\"\n\t\treturn high !== high || escapedWhitespace ?\n\t\t\tescaped :\n\t\t\thigh < 0 ?\n\t\t\t\t// BMP codepoint\n\t\t\t\tString.fromCharCode( high + 0x10000 ) :\n\t\t\t\t// Supplemental Plane codepoint (surrogate pair)\n\t\t\t\tString.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );\n\t},\n\n\t// CSS string/identifier serialization\n\t// https://drafts.csswg.org/cssom/#common-serializing-idioms\n\trcssescape = /([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\0-\\x1f\\x7f-\\uFFFF\\w-]/g,\n\tfcssescape = function( ch, asCodePoint ) {\n\t\tif ( asCodePoint ) {\n\n\t\t\t// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER\n\t\t\tif ( ch === \"\\0\" ) {\n\t\t\t\treturn \"\\uFFFD\";\n\t\t\t}\n\n\t\t\t// Control characters and (dependent upon position) numbers get escaped as code points\n\t\t\treturn ch.slice( 0, -1 ) + \"\\\\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + \" \";\n\t\t}\n\n\t\t// Other potentially-special ASCII characters get backslash-escaped\n\t\treturn \"\\\\\" + ch;\n\t},\n\n\t// Used for iframes\n\t// See setDocument()\n\t// Removing the function wrapper causes a \"Permission Denied\"\n\t// error in IE\n\tunloadHandler = function() {\n\t\tsetDocument();\n\t},\n\n\tinDisabledFieldset = addCombinator(\n\t\tfunction( elem ) {\n\t\t\treturn elem.disabled === true && elem.nodeName.toLowerCase() === \"fieldset\";\n\t\t},\n\t\t{ dir: \"parentNode\", next: \"legend\" }\n\t);\n\n// Optimize for push.apply( _, NodeList )\ntry {\n\tpush.apply(\n\t\t(arr = slice.call( preferredDoc.childNodes )),\n\t\tpreferredDoc.childNodes\n\t);\n\t// Support: Android<4.0\n\t// Detect silently failing push.apply\n\tarr[ preferredDoc.childNodes.length ].nodeType;\n} catch ( e ) {\n\tpush = { apply: arr.length ?\n\n\t\t// Leverage slice if possible\n\t\tfunction( target, els ) {\n\t\t\tpush_native.apply( target, slice.call(els) );\n\t\t} :\n\n\t\t// Support: IE<9\n\t\t// Otherwise append directly\n\t\tfunction( target, els ) {\n\t\t\tvar j = target.length,\n\t\t\t\ti = 0;\n\t\t\t// Can't trust NodeList.length\n\t\t\twhile ( (target[j++] = els[i++]) ) {}\n\t\t\ttarget.length = j - 1;\n\t\t}\n\t};\n}\n\nfunction Sizzle( selector, context, results, seed ) {\n\tvar m, i, elem, nid, match, groups, newSelector,\n\t\tnewContext = context && context.ownerDocument,\n\n\t\t// nodeType defaults to 9, since context defaults to document\n\t\tnodeType = context ? context.nodeType : 9;\n\n\tresults = results || [];\n\n\t// Return early from calls with invalid selector or context\n\tif ( typeof selector !== \"string\" || !selector ||\n\t\tnodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {\n\n\t\treturn results;\n\t}\n\n\t// Try to shortcut find operations (as opposed to filters) in HTML documents\n\tif ( !seed ) {\n\n\t\tif ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {\n\t\t\tsetDocument( context );\n\t\t}\n\t\tcontext = context || document;\n\n\t\tif ( documentIsHTML ) {\n\n\t\t\t// If the selector is sufficiently simple, try using a \"get*By*\" DOM method\n\t\t\t// (excepting DocumentFragment context, where the methods don't exist)\n\t\t\tif ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) {\n\n\t\t\t\t// ID selector\n\t\t\t\tif ( (m = match[1]) ) {\n\n\t\t\t\t\t// Document context\n\t\t\t\t\tif ( nodeType === 9 ) {\n\t\t\t\t\t\tif ( (elem = context.getElementById( m )) ) {\n\n\t\t\t\t\t\t\t// Support: IE, Opera, Webkit\n\t\t\t\t\t\t\t// TODO: identify versions\n\t\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\t\tif ( elem.id === m ) {\n\t\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t// Element context\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// Support: IE, Opera, Webkit\n\t\t\t\t\t\t// TODO: identify versions\n\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\tif ( newContext && (elem = newContext.getElementById( m )) &&\n\t\t\t\t\t\t\tcontains( context, elem ) &&\n\t\t\t\t\t\t\telem.id === m ) {\n\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t// Type selector\n\t\t\t\t} else if ( match[2] ) {\n\t\t\t\t\tpush.apply( results, context.getElementsByTagName( selector ) );\n\t\t\t\t\treturn results;\n\n\t\t\t\t// Class selector\n\t\t\t\t} else if ( (m = match[3]) && support.getElementsByClassName &&\n\t\t\t\t\tcontext.getElementsByClassName ) {\n\n\t\t\t\t\tpush.apply( results, context.getElementsByClassName( m ) );\n\t\t\t\t\treturn results;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Take advantage of querySelectorAll\n\t\t\tif ( support.qsa &&\n\t\t\t\t!nonnativeSelectorCache[ selector + \" \" ] &&\n\t\t\t\t(!rbuggyQSA || !rbuggyQSA.test( selector )) &&\n\n\t\t\t\t// Support: IE 8 only\n\t\t\t\t// Exclude object elements\n\t\t\t\t(nodeType !== 1 || context.nodeName.toLowerCase() !== \"object\") ) {\n\n\t\t\t\tnewSelector = selector;\n\t\t\t\tnewContext = context;\n\n\t\t\t\t// qSA considers elements outside a scoping root when evaluating child or\n\t\t\t\t// descendant combinators, which is not what we want.\n\t\t\t\t// In such cases, we work around the behavior by prefixing every selector in the\n\t\t\t\t// list with an ID selector referencing the scope context.\n\t\t\t\t// Thanks to Andrew Dupont for this technique.\n\t\t\t\tif ( nodeType === 1 && rdescend.test( selector ) ) {\n\n\t\t\t\t\t// Capture the context ID, setting it first if necessary\n\t\t\t\t\tif ( (nid = context.getAttribute( \"id\" )) ) {\n\t\t\t\t\t\tnid = nid.replace( rcssescape, fcssescape );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcontext.setAttribute( \"id\", (nid = expando) );\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prefix every selector in the list\n\t\t\t\t\tgroups = tokenize( selector );\n\t\t\t\t\ti = groups.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tgroups[i] = \"#\" + nid + \" \" + toSelector( groups[i] );\n\t\t\t\t\t}\n\t\t\t\t\tnewSelector = groups.join( \",\" );\n\n\t\t\t\t\t// Expand context for sibling selectors\n\t\t\t\t\tnewContext = rsibling.test( selector ) && testContext( context.parentNode ) ||\n\t\t\t\t\t\tcontext;\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tpush.apply( results,\n\t\t\t\t\t\tnewContext.querySelectorAll( newSelector )\n\t\t\t\t\t);\n\t\t\t\t\treturn results;\n\t\t\t\t} catch ( qsaError ) {\n\t\t\t\t\tnonnativeSelectorCache( selector, true );\n\t\t\t\t} finally {\n\t\t\t\t\tif ( nid === expando ) {\n\t\t\t\t\t\tcontext.removeAttribute( \"id\" );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// All others\n\treturn select( selector.replace( rtrim, \"$1\" ), context, results, seed );\n}\n\n/**\n * Create key-value caches of limited size\n * @returns {function(string, object)} Returns the Object data after storing it on itself with\n *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n *\tdeleting the oldest entry\n */\nfunction createCache() {\n\tvar keys = [];\n\n\tfunction cache( key, value ) {\n\t\t// Use (key + \" \") to avoid collision with native prototype properties (see Issue #157)\n\t\tif ( keys.push( key + \" \" ) > Expr.cacheLength ) {\n\t\t\t// Only keep the most recent entries\n\t\t\tdelete cache[ keys.shift() ];\n\t\t}\n\t\treturn (cache[ key + \" \" ] = value);\n\t}\n\treturn cache;\n}\n\n/**\n * Mark a function for special use by Sizzle\n * @param {Function} fn The function to mark\n */\nfunction markFunction( fn ) {\n\tfn[ expando ] = true;\n\treturn fn;\n}\n\n/**\n * Support testing using an element\n * @param {Function} fn Passed the created element and returns a boolean result\n */\nfunction assert( fn ) {\n\tvar el = document.createElement(\"fieldset\");\n\n\ttry {\n\t\treturn !!fn( el );\n\t} catch (e) {\n\t\treturn false;\n\t} finally {\n\t\t// Remove from its parent by default\n\t\tif ( el.parentNode ) {\n\t\t\tel.parentNode.removeChild( el );\n\t\t}\n\t\t// release memory in IE\n\t\tel = null;\n\t}\n}\n\n/**\n * Adds the same handler for all of the specified attrs\n * @param {String} attrs Pipe-separated list of attributes\n * @param {Function} handler The method that will be applied\n */\nfunction addHandle( attrs, handler ) {\n\tvar arr = attrs.split(\"|\"),\n\t\ti = arr.length;\n\n\twhile ( i-- ) {\n\t\tExpr.attrHandle[ arr[i] ] = handler;\n\t}\n}\n\n/**\n * Checks document order of two siblings\n * @param {Element} a\n * @param {Element} b\n * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b\n */\nfunction siblingCheck( a, b ) {\n\tvar cur = b && a,\n\t\tdiff = cur && a.nodeType === 1 && b.nodeType === 1 &&\n\t\t\ta.sourceIndex - b.sourceIndex;\n\n\t// Use IE sourceIndex if available on both nodes\n\tif ( diff ) {\n\t\treturn diff;\n\t}\n\n\t// Check if b follows a\n\tif ( cur ) {\n\t\twhile ( (cur = cur.nextSibling) ) {\n\t\t\tif ( cur === b ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn a ? 1 : -1;\n}\n\n/**\n * Returns a function to use in pseudos for input types\n * @param {String} type\n */\nfunction createInputPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn name === \"input\" && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for buttons\n * @param {String} type\n */\nfunction createButtonPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn (name === \"input\" || name === \"button\") && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for :enabled/:disabled\n * @param {Boolean} disabled true for :disabled; false for :enabled\n */\nfunction createDisabledPseudo( disabled ) {\n\n\t// Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable\n\treturn function( elem ) {\n\n\t\t// Only certain elements can match :enabled or :disabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled\n\t\tif ( \"form\" in elem ) {\n\n\t\t\t// Check for inherited disabledness on relevant non-disabled elements:\n\t\t\t// * listed form-associated elements in a disabled fieldset\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#category-listed\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled\n\t\t\t// * option elements in a disabled optgroup\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled\n\t\t\t// All such elements have a \"form\" property.\n\t\t\tif ( elem.parentNode && elem.disabled === false ) {\n\n\t\t\t\t// Option elements defer to a parent optgroup if present\n\t\t\t\tif ( \"label\" in elem ) {\n\t\t\t\t\tif ( \"label\" in elem.parentNode ) {\n\t\t\t\t\t\treturn elem.parentNode.disabled === disabled;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn elem.disabled === disabled;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Support: IE 6 - 11\n\t\t\t\t// Use the isDisabled shortcut property to check for disabled fieldset ancestors\n\t\t\t\treturn elem.isDisabled === disabled ||\n\n\t\t\t\t\t// Where there is no isDisabled, check manually\n\t\t\t\t\t/* jshint -W018 */\n\t\t\t\t\telem.isDisabled !== !disabled &&\n\t\t\t\t\t\tinDisabledFieldset( elem ) === disabled;\n\t\t\t}\n\n\t\t\treturn elem.disabled === disabled;\n\n\t\t// Try to winnow out elements that can't be disabled before trusting the disabled property.\n\t\t// Some victims get caught in our net (label, legend, menu, track), but it shouldn't\n\t\t// even exist on them, let alone have a boolean value.\n\t\t} else if ( \"label\" in elem ) {\n\t\t\treturn elem.disabled === disabled;\n\t\t}\n\n\t\t// Remaining elements are neither :enabled nor :disabled\n\t\treturn false;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for positionals\n * @param {Function} fn\n */\nfunction createPositionalPseudo( fn ) {\n\treturn markFunction(function( argument ) {\n\t\targument = +argument;\n\t\treturn markFunction(function( seed, matches ) {\n\t\t\tvar j,\n\t\t\t\tmatchIndexes = fn( [], seed.length, argument ),\n\t\t\t\ti = matchIndexes.length;\n\n\t\t\t// Match elements found at the specified indexes\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( seed[ (j = matchIndexes[i]) ] ) {\n\t\t\t\t\tseed[j] = !(matches[j] = seed[j]);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t});\n}\n\n/**\n * Checks a node for validity as a Sizzle context\n * @param {Element|Object=} context\n * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\n */\nfunction testContext( context ) {\n\treturn context && typeof context.getElementsByTagName !== \"undefined\" && context;\n}\n\n// Expose support vars for convenience\nsupport = Sizzle.support = {};\n\n/**\n * Detects XML nodes\n * @param {Element|Object} elem An element or a document\n * @returns {Boolean} True iff elem is a non-HTML XML node\n */\nisXML = Sizzle.isXML = function( elem ) {\n\tvar namespace = elem.namespaceURI,\n\t\tdocElem = (elem.ownerDocument || elem).documentElement;\n\n\t// Support: IE <=8\n\t// Assume HTML when documentElement doesn't yet exist, such as inside loading iframes\n\t// https://bugs.jquery.com/ticket/4833\n\treturn !rhtml.test( namespace || docElem && docElem.nodeName || \"HTML\" );\n};\n\n/**\n * Sets document-related variables once based on the current document\n * @param {Element|Object} [doc] An element or document object to use to set the document\n * @returns {Object} Returns the current document\n */\nsetDocument = Sizzle.setDocument = function( node ) {\n\tvar hasCompare, subWindow,\n\t\tdoc = node ? node.ownerDocument || node : preferredDoc;\n\n\t// Return early if doc is invalid or already selected\n\tif ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {\n\t\treturn document;\n\t}\n\n\t// Update global variables\n\tdocument = doc;\n\tdocElem = document.documentElement;\n\tdocumentIsHTML = !isXML( document );\n\n\t// Support: IE 9-11, Edge\n\t// Accessing iframe documents after unload throws \"permission denied\" errors (jQuery #13936)\n\tif ( preferredDoc !== document &&\n\t\t(subWindow = document.defaultView) && subWindow.top !== subWindow ) {\n\n\t\t// Support: IE 11, Edge\n\t\tif ( subWindow.addEventListener ) {\n\t\t\tsubWindow.addEventListener( \"unload\", unloadHandler, false );\n\n\t\t// Support: IE 9 - 10 only\n\t\t} else if ( subWindow.attachEvent ) {\n\t\t\tsubWindow.attachEvent( \"onunload\", unloadHandler );\n\t\t}\n\t}\n\n\t/* Attributes\n\t---------------------------------------------------------------------- */\n\n\t// Support: IE<8\n\t// Verify that getAttribute really returns attributes and not properties\n\t// (excepting IE8 booleans)\n\tsupport.attributes = assert(function( el ) {\n\t\tel.className = \"i\";\n\t\treturn !el.getAttribute(\"className\");\n\t});\n\n\t/* getElement(s)By*\n\t---------------------------------------------------------------------- */\n\n\t// Check if getElementsByTagName(\"*\") returns only elements\n\tsupport.getElementsByTagName = assert(function( el ) {\n\t\tel.appendChild( document.createComment(\"\") );\n\t\treturn !el.getElementsByTagName(\"*\").length;\n\t});\n\n\t// Support: IE<9\n\tsupport.getElementsByClassName = rnative.test( document.getElementsByClassName );\n\n\t// Support: IE<10\n\t// Check if getElementById returns elements by name\n\t// The broken getElementById methods don't pick up programmatically-set names,\n\t// so use a roundabout getElementsByName test\n\tsupport.getById = assert(function( el ) {\n\t\tdocElem.appendChild( el ).id = expando;\n\t\treturn !document.getElementsByName || !document.getElementsByName( expando ).length;\n\t});\n\n\t// ID filter and find\n\tif ( support.getById ) {\n\t\tExpr.filter[\"ID\"] = function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn elem.getAttribute(\"id\") === attrId;\n\t\t\t};\n\t\t};\n\t\tExpr.find[\"ID\"] = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar elem = context.getElementById( id );\n\t\t\t\treturn elem ? [ elem ] : [];\n\t\t\t}\n\t\t};\n\t} else {\n\t\tExpr.filter[\"ID\"] = function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\tvar node = typeof elem.getAttributeNode !== \"undefined\" &&\n\t\t\t\t\telem.getAttributeNode(\"id\");\n\t\t\t\treturn node && node.value === attrId;\n\t\t\t};\n\t\t};\n\n\t\t// Support: IE 6 - 7 only\n\t\t// getElementById is not reliable as a find shortcut\n\t\tExpr.find[\"ID\"] = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar node, i, elems,\n\t\t\t\t\telem = context.getElementById( id );\n\n\t\t\t\tif ( elem ) {\n\n\t\t\t\t\t// Verify the id attribute\n\t\t\t\t\tnode = elem.getAttributeNode(\"id\");\n\t\t\t\t\tif ( node && node.value === id ) {\n\t\t\t\t\t\treturn [ elem ];\n\t\t\t\t\t}\n\n\t\t\t\t\t// Fall back on getElementsByName\n\t\t\t\t\telems = context.getElementsByName( id );\n\t\t\t\t\ti = 0;\n\t\t\t\t\twhile ( (elem = elems[i++]) ) {\n\t\t\t\t\t\tnode = elem.getAttributeNode(\"id\");\n\t\t\t\t\t\tif ( node && node.value === id ) {\n\t\t\t\t\t\t\treturn [ elem ];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn [];\n\t\t\t}\n\t\t};\n\t}\n\n\t// Tag\n\tExpr.find[\"TAG\"] = support.getElementsByTagName ?\n\t\tfunction( tag, context ) {\n\t\t\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\t\t\treturn context.getElementsByTagName( tag );\n\n\t\t\t// DocumentFragment nodes don't have gEBTN\n\t\t\t} else if ( support.qsa ) {\n\t\t\t\treturn context.querySelectorAll( tag );\n\t\t\t}\n\t\t} :\n\n\t\tfunction( tag, context ) {\n\t\t\tvar elem,\n\t\t\t\ttmp = [],\n\t\t\t\ti = 0,\n\t\t\t\t// By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too\n\t\t\t\tresults = context.getElementsByTagName( tag );\n\n\t\t\t// Filter out possible comments\n\t\t\tif ( tag === \"*\" ) {\n\t\t\t\twhile ( (elem = results[i++]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\ttmp.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn tmp;\n\t\t\t}\n\t\t\treturn results;\n\t\t};\n\n\t// Class\n\tExpr.find[\"CLASS\"] = support.getElementsByClassName && function( className, context ) {\n\t\tif ( typeof context.getElementsByClassName !== \"undefined\" && documentIsHTML ) {\n\t\t\treturn context.getElementsByClassName( className );\n\t\t}\n\t};\n\n\t/* QSA/matchesSelector\n\t---------------------------------------------------------------------- */\n\n\t// QSA and matchesSelector support\n\n\t// matchesSelector(:active) reports false when true (IE9/Opera 11.5)\n\trbuggyMatches = [];\n\n\t// qSa(:focus) reports false when true (Chrome 21)\n\t// We allow this because of a bug in IE8/9 that throws an error\n\t// whenever `document.activeElement` is accessed on an iframe\n\t// So, we allow :focus to pass through QSA all the time to avoid the IE error\n\t// See https://bugs.jquery.com/ticket/13378\n\trbuggyQSA = [];\n\n\tif ( (support.qsa = rnative.test( document.querySelectorAll )) ) {\n\t\t// Build QSA regex\n\t\t// Regex strategy adopted from Diego Perini\n\t\tassert(function( el ) {\n\t\t\t// Select is set to empty string on purpose\n\t\t\t// This is to test IE's treatment of not explicitly\n\t\t\t// setting a boolean content attribute,\n\t\t\t// since its presence should be enough\n\t\t\t// https://bugs.jquery.com/ticket/12359\n\t\t\tdocElem.appendChild( el ).innerHTML = \"\" +\n\t\t\t\t\"\";\n\n\t\t\t// Support: IE8, Opera 11-12.16\n\t\t\t// Nothing should be selected when empty strings follow ^= or $= or *=\n\t\t\t// The test attribute must be unknown in Opera but \"safe\" for WinRT\n\t\t\t// https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section\n\t\t\tif ( el.querySelectorAll(\"[msallowcapture^='']\").length ) {\n\t\t\t\trbuggyQSA.push( \"[*^$]=\" + whitespace + \"*(?:''|\\\"\\\")\" );\n\t\t\t}\n\n\t\t\t// Support: IE8\n\t\t\t// Boolean attributes and \"value\" are not treated correctly\n\t\t\tif ( !el.querySelectorAll(\"[selected]\").length ) {\n\t\t\t\trbuggyQSA.push( \"\\\\[\" + whitespace + \"*(?:value|\" + booleans + \")\" );\n\t\t\t}\n\n\t\t\t// Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+\n\t\t\tif ( !el.querySelectorAll( \"[id~=\" + expando + \"-]\" ).length ) {\n\t\t\t\trbuggyQSA.push(\"~=\");\n\t\t\t}\n\n\t\t\t// Webkit/Opera - :checked should return selected option elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( !el.querySelectorAll(\":checked\").length ) {\n\t\t\t\trbuggyQSA.push(\":checked\");\n\t\t\t}\n\n\t\t\t// Support: Safari 8+, iOS 8+\n\t\t\t// https://bugs.webkit.org/show_bug.cgi?id=136851\n\t\t\t// In-page `selector#id sibling-combinator selector` fails\n\t\t\tif ( !el.querySelectorAll( \"a#\" + expando + \"+*\" ).length ) {\n\t\t\t\trbuggyQSA.push(\".#.+[+~]\");\n\t\t\t}\n\t\t});\n\n\t\tassert(function( el ) {\n\t\t\tel.innerHTML = \"\" +\n\t\t\t\t\"\";\n\n\t\t\t// Support: Windows 8 Native Apps\n\t\t\t// The type and name attributes are restricted during .innerHTML assignment\n\t\t\tvar input = document.createElement(\"input\");\n\t\t\tinput.setAttribute( \"type\", \"hidden\" );\n\t\t\tel.appendChild( input ).setAttribute( \"name\", \"D\" );\n\n\t\t\t// Support: IE8\n\t\t\t// Enforce case-sensitivity of name attribute\n\t\t\tif ( el.querySelectorAll(\"[name=d]\").length ) {\n\t\t\t\trbuggyQSA.push( \"name\" + whitespace + \"*[*^$|!~]?=\" );\n\t\t\t}\n\n\t\t\t// FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( el.querySelectorAll(\":enabled\").length !== 2 ) {\n\t\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t\t}\n\n\t\t\t// Support: IE9-11+\n\t\t\t// IE's :disabled selector does not pick up the children of disabled fieldsets\n\t\t\tdocElem.appendChild( el ).disabled = true;\n\t\t\tif ( el.querySelectorAll(\":disabled\").length !== 2 ) {\n\t\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t\t}\n\n\t\t\t// Opera 10-11 does not throw on post-comma invalid pseudos\n\t\t\tel.querySelectorAll(\"*,:x\");\n\t\t\trbuggyQSA.push(\",.*:\");\n\t\t});\n\t}\n\n\tif ( (support.matchesSelector = rnative.test( (matches = docElem.matches ||\n\t\tdocElem.webkitMatchesSelector ||\n\t\tdocElem.mozMatchesSelector ||\n\t\tdocElem.oMatchesSelector ||\n\t\tdocElem.msMatchesSelector) )) ) {\n\n\t\tassert(function( el ) {\n\t\t\t// Check to see if it's possible to do matchesSelector\n\t\t\t// on a disconnected node (IE 9)\n\t\t\tsupport.disconnectedMatch = matches.call( el, \"*\" );\n\n\t\t\t// This should fail with an exception\n\t\t\t// Gecko does not error, returns false instead\n\t\t\tmatches.call( el, \"[s!='']:x\" );\n\t\t\trbuggyMatches.push( \"!=\", pseudos );\n\t\t});\n\t}\n\n\trbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join(\"|\") );\n\trbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join(\"|\") );\n\n\t/* Contains\n\t---------------------------------------------------------------------- */\n\thasCompare = rnative.test( docElem.compareDocumentPosition );\n\n\t// Element contains another\n\t// Purposefully self-exclusive\n\t// As in, an element does not contain itself\n\tcontains = hasCompare || rnative.test( docElem.contains ) ?\n\t\tfunction( a, b ) {\n\t\t\tvar adown = a.nodeType === 9 ? a.documentElement : a,\n\t\t\t\tbup = b && b.parentNode;\n\t\t\treturn a === bup || !!( bup && bup.nodeType === 1 && (\n\t\t\t\tadown.contains ?\n\t\t\t\t\tadown.contains( bup ) :\n\t\t\t\t\ta.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16\n\t\t\t));\n\t\t} :\n\t\tfunction( a, b ) {\n\t\t\tif ( b ) {\n\t\t\t\twhile ( (b = b.parentNode) ) {\n\t\t\t\t\tif ( b === a ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\n\t/* Sorting\n\t---------------------------------------------------------------------- */\n\n\t// Document order sorting\n\tsortOrder = hasCompare ?\n\tfunction( a, b ) {\n\n\t\t// Flag for duplicate removal\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\t// Sort on method existence if only one input has compareDocumentPosition\n\t\tvar compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n\t\tif ( compare ) {\n\t\t\treturn compare;\n\t\t}\n\n\t\t// Calculate position if both inputs belong to the same document\n\t\tcompare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ?\n\t\t\ta.compareDocumentPosition( b ) :\n\n\t\t\t// Otherwise we know they are disconnected\n\t\t\t1;\n\n\t\t// Disconnected nodes\n\t\tif ( compare & 1 ||\n\t\t\t(!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) {\n\n\t\t\t// Choose the first element that is related to our preferred document\n\t\t\tif ( a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t\tif ( b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\t// Maintain original order\n\t\t\treturn sortInput ?\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\t\t}\n\n\t\treturn compare & 4 ? -1 : 1;\n\t} :\n\tfunction( a, b ) {\n\t\t// Exit early if the nodes are identical\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\taup = a.parentNode,\n\t\t\tbup = b.parentNode,\n\t\t\tap = [ a ],\n\t\t\tbp = [ b ];\n\n\t\t// Parentless nodes are either documents or disconnected\n\t\tif ( !aup || !bup ) {\n\t\t\treturn a === document ? -1 :\n\t\t\t\tb === document ? 1 :\n\t\t\t\taup ? -1 :\n\t\t\t\tbup ? 1 :\n\t\t\t\tsortInput ?\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\n\t\t// If the nodes are siblings, we can do a quick check\n\t\t} else if ( aup === bup ) {\n\t\t\treturn siblingCheck( a, b );\n\t\t}\n\n\t\t// Otherwise we need full lists of their ancestors for comparison\n\t\tcur = a;\n\t\twhile ( (cur = cur.parentNode) ) {\n\t\t\tap.unshift( cur );\n\t\t}\n\t\tcur = b;\n\t\twhile ( (cur = cur.parentNode) ) {\n\t\t\tbp.unshift( cur );\n\t\t}\n\n\t\t// Walk down the tree looking for a discrepancy\n\t\twhile ( ap[i] === bp[i] ) {\n\t\t\ti++;\n\t\t}\n\n\t\treturn i ?\n\t\t\t// Do a sibling check if the nodes have a common ancestor\n\t\t\tsiblingCheck( ap[i], bp[i] ) :\n\n\t\t\t// Otherwise nodes in our document sort first\n\t\t\tap[i] === preferredDoc ? -1 :\n\t\t\tbp[i] === preferredDoc ? 1 :\n\t\t\t0;\n\t};\n\n\treturn document;\n};\n\nSizzle.matches = function( expr, elements ) {\n\treturn Sizzle( expr, null, null, elements );\n};\n\nSizzle.matchesSelector = function( elem, expr ) {\n\t// Set document vars if needed\n\tif ( ( elem.ownerDocument || elem ) !== document ) {\n\t\tsetDocument( elem );\n\t}\n\n\tif ( support.matchesSelector && documentIsHTML &&\n\t\t!nonnativeSelectorCache[ expr + \" \" ] &&\n\t\t( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&\n\t\t( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) {\n\n\t\ttry {\n\t\t\tvar ret = matches.call( elem, expr );\n\n\t\t\t// IE 9's matchesSelector returns false on disconnected nodes\n\t\t\tif ( ret || support.disconnectedMatch ||\n\t\t\t\t\t// As well, disconnected nodes are said to be in a document\n\t\t\t\t\t// fragment in IE 9\n\t\t\t\t\telem.document && elem.document.nodeType !== 11 ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\t\t} catch (e) {\n\t\t\tnonnativeSelectorCache( expr, true );\n\t\t}\n\t}\n\n\treturn Sizzle( expr, document, null, [ elem ] ).length > 0;\n};\n\nSizzle.contains = function( context, elem ) {\n\t// Set document vars if needed\n\tif ( ( context.ownerDocument || context ) !== document ) {\n\t\tsetDocument( context );\n\t}\n\treturn contains( context, elem );\n};\n\nSizzle.attr = function( elem, name ) {\n\t// Set document vars if needed\n\tif ( ( elem.ownerDocument || elem ) !== document ) {\n\t\tsetDocument( elem );\n\t}\n\n\tvar fn = Expr.attrHandle[ name.toLowerCase() ],\n\t\t// Don't get fooled by Object.prototype properties (jQuery #13807)\n\t\tval = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?\n\t\t\tfn( elem, name, !documentIsHTML ) :\n\t\t\tundefined;\n\n\treturn val !== undefined ?\n\t\tval :\n\t\tsupport.attributes || !documentIsHTML ?\n\t\t\telem.getAttribute( name ) :\n\t\t\t(val = elem.getAttributeNode(name)) && val.specified ?\n\t\t\t\tval.value :\n\t\t\t\tnull;\n};\n\nSizzle.escape = function( sel ) {\n\treturn (sel + \"\").replace( rcssescape, fcssescape );\n};\n\nSizzle.error = function( msg ) {\n\tthrow new Error( \"Syntax error, unrecognized expression: \" + msg );\n};\n\n/**\n * Document sorting and removing duplicates\n * @param {ArrayLike} results\n */\nSizzle.uniqueSort = function( results ) {\n\tvar elem,\n\t\tduplicates = [],\n\t\tj = 0,\n\t\ti = 0;\n\n\t// Unless we *know* we can detect duplicates, assume their presence\n\thasDuplicate = !support.detectDuplicates;\n\tsortInput = !support.sortStable && results.slice( 0 );\n\tresults.sort( sortOrder );\n\n\tif ( hasDuplicate ) {\n\t\twhile ( (elem = results[i++]) ) {\n\t\t\tif ( elem === results[ i ] ) {\n\t\t\t\tj = duplicates.push( i );\n\t\t\t}\n\t\t}\n\t\twhile ( j-- ) {\n\t\t\tresults.splice( duplicates[ j ], 1 );\n\t\t}\n\t}\n\n\t// Clear input after sorting to release objects\n\t// See https://github.com/jquery/sizzle/pull/225\n\tsortInput = null;\n\n\treturn results;\n};\n\n/**\n * Utility function for retrieving the text value of an array of DOM nodes\n * @param {Array|Element} elem\n */\ngetText = Sizzle.getText = function( elem ) {\n\tvar node,\n\t\tret = \"\",\n\t\ti = 0,\n\t\tnodeType = elem.nodeType;\n\n\tif ( !nodeType ) {\n\t\t// If no nodeType, this is expected to be an array\n\t\twhile ( (node = elem[i++]) ) {\n\t\t\t// Do not traverse comment nodes\n\t\t\tret += getText( node );\n\t\t}\n\t} else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {\n\t\t// Use textContent for elements\n\t\t// innerText usage removed for consistency of new lines (jQuery #11153)\n\t\tif ( typeof elem.textContent === \"string\" ) {\n\t\t\treturn elem.textContent;\n\t\t} else {\n\t\t\t// Traverse its children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tret += getText( elem );\n\t\t\t}\n\t\t}\n\t} else if ( nodeType === 3 || nodeType === 4 ) {\n\t\treturn elem.nodeValue;\n\t}\n\t// Do not include comment or processing instruction nodes\n\n\treturn ret;\n};\n\nExpr = Sizzle.selectors = {\n\n\t// Can be adjusted by the user\n\tcacheLength: 50,\n\n\tcreatePseudo: markFunction,\n\n\tmatch: matchExpr,\n\n\tattrHandle: {},\n\n\tfind: {},\n\n\trelative: {\n\t\t\">\": { dir: \"parentNode\", first: true },\n\t\t\" \": { dir: \"parentNode\" },\n\t\t\"+\": { dir: \"previousSibling\", first: true },\n\t\t\"~\": { dir: \"previousSibling\" }\n\t},\n\n\tpreFilter: {\n\t\t\"ATTR\": function( match ) {\n\t\t\tmatch[1] = match[1].replace( runescape, funescape );\n\n\t\t\t// Move the given value to match[3] whether quoted or unquoted\n\t\t\tmatch[3] = ( match[3] || match[4] || match[5] || \"\" ).replace( runescape, funescape );\n\n\t\t\tif ( match[2] === \"~=\" ) {\n\t\t\t\tmatch[3] = \" \" + match[3] + \" \";\n\t\t\t}\n\n\t\t\treturn match.slice( 0, 4 );\n\t\t},\n\n\t\t\"CHILD\": function( match ) {\n\t\t\t/* matches from matchExpr[\"CHILD\"]\n\t\t\t\t1 type (only|nth|...)\n\t\t\t\t2 what (child|of-type)\n\t\t\t\t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n\t\t\t\t4 xn-component of xn+y argument ([+-]?\\d*n|)\n\t\t\t\t5 sign of xn-component\n\t\t\t\t6 x of xn-component\n\t\t\t\t7 sign of y-component\n\t\t\t\t8 y of y-component\n\t\t\t*/\n\t\t\tmatch[1] = match[1].toLowerCase();\n\n\t\t\tif ( match[1].slice( 0, 3 ) === \"nth\" ) {\n\t\t\t\t// nth-* requires argument\n\t\t\t\tif ( !match[3] ) {\n\t\t\t\t\tSizzle.error( match[0] );\n\t\t\t\t}\n\n\t\t\t\t// numeric x and y parameters for Expr.filter.CHILD\n\t\t\t\t// remember that false/true cast respectively to 0/1\n\t\t\t\tmatch[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === \"even\" || match[3] === \"odd\" ) );\n\t\t\t\tmatch[5] = +( ( match[7] + match[8] ) || match[3] === \"odd\" );\n\n\t\t\t// other types prohibit arguments\n\t\t\t} else if ( match[3] ) {\n\t\t\t\tSizzle.error( match[0] );\n\t\t\t}\n\n\t\t\treturn match;\n\t\t},\n\n\t\t\"PSEUDO\": function( match ) {\n\t\t\tvar excess,\n\t\t\t\tunquoted = !match[6] && match[2];\n\n\t\t\tif ( matchExpr[\"CHILD\"].test( match[0] ) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\t// Accept quoted arguments as-is\n\t\t\tif ( match[3] ) {\n\t\t\t\tmatch[2] = match[4] || match[5] || \"\";\n\n\t\t\t// Strip excess characters from unquoted arguments\n\t\t\t} else if ( unquoted && rpseudo.test( unquoted ) &&\n\t\t\t\t// Get excess from tokenize (recursively)\n\t\t\t\t(excess = tokenize( unquoted, true )) &&\n\t\t\t\t// advance to the next closing parenthesis\n\t\t\t\t(excess = unquoted.indexOf( \")\", unquoted.length - excess ) - unquoted.length) ) {\n\n\t\t\t\t// excess is a negative index\n\t\t\t\tmatch[0] = match[0].slice( 0, excess );\n\t\t\t\tmatch[2] = unquoted.slice( 0, excess );\n\t\t\t}\n\n\t\t\t// Return only captures needed by the pseudo filter method (type and argument)\n\t\t\treturn match.slice( 0, 3 );\n\t\t}\n\t},\n\n\tfilter: {\n\n\t\t\"TAG\": function( nodeNameSelector ) {\n\t\t\tvar nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn nodeNameSelector === \"*\" ?\n\t\t\t\tfunction() { return true; } :\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === nodeName;\n\t\t\t\t};\n\t\t},\n\n\t\t\"CLASS\": function( className ) {\n\t\t\tvar pattern = classCache[ className + \" \" ];\n\n\t\t\treturn pattern ||\n\t\t\t\t(pattern = new RegExp( \"(^|\" + whitespace + \")\" + className + \"(\" + whitespace + \"|$)\" )) &&\n\t\t\t\tclassCache( className, function( elem ) {\n\t\t\t\t\treturn pattern.test( typeof elem.className === \"string\" && elem.className || typeof elem.getAttribute !== \"undefined\" && elem.getAttribute(\"class\") || \"\" );\n\t\t\t\t});\n\t\t},\n\n\t\t\"ATTR\": function( name, operator, check ) {\n\t\t\treturn function( elem ) {\n\t\t\t\tvar result = Sizzle.attr( elem, name );\n\n\t\t\t\tif ( result == null ) {\n\t\t\t\t\treturn operator === \"!=\";\n\t\t\t\t}\n\t\t\t\tif ( !operator ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tresult += \"\";\n\n\t\t\t\treturn operator === \"=\" ? result === check :\n\t\t\t\t\toperator === \"!=\" ? result !== check :\n\t\t\t\t\toperator === \"^=\" ? check && result.indexOf( check ) === 0 :\n\t\t\t\t\toperator === \"*=\" ? check && result.indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"$=\" ? check && result.slice( -check.length ) === check :\n\t\t\t\t\toperator === \"~=\" ? ( \" \" + result.replace( rwhitespace, \" \" ) + \" \" ).indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"|=\" ? result === check || result.slice( 0, check.length + 1 ) === check + \"-\" :\n\t\t\t\t\tfalse;\n\t\t\t};\n\t\t},\n\n\t\t\"CHILD\": function( type, what, argument, first, last ) {\n\t\t\tvar simple = type.slice( 0, 3 ) !== \"nth\",\n\t\t\t\tforward = type.slice( -4 ) !== \"last\",\n\t\t\t\tofType = what === \"of-type\";\n\n\t\t\treturn first === 1 && last === 0 ?\n\n\t\t\t\t// Shortcut for :nth-*(n)\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn !!elem.parentNode;\n\t\t\t\t} :\n\n\t\t\t\tfunction( elem, context, xml ) {\n\t\t\t\t\tvar cache, uniqueCache, outerCache, node, nodeIndex, start,\n\t\t\t\t\t\tdir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\n\t\t\t\t\t\tparent = elem.parentNode,\n\t\t\t\t\t\tname = ofType && elem.nodeName.toLowerCase(),\n\t\t\t\t\t\tuseCache = !xml && !ofType,\n\t\t\t\t\t\tdiff = false;\n\n\t\t\t\t\tif ( parent ) {\n\n\t\t\t\t\t\t// :(first|last|only)-(child|of-type)\n\t\t\t\t\t\tif ( simple ) {\n\t\t\t\t\t\t\twhile ( dir ) {\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\twhile ( (node = node[ dir ]) ) {\n\t\t\t\t\t\t\t\t\tif ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnode.nodeName.toLowerCase() === name :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) {\n\n\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// Reverse direction for :only-* (if we haven't yet done so)\n\t\t\t\t\t\t\t\tstart = dir = type === \"only\" && !start && \"nextSibling\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tstart = [ forward ? parent.firstChild : parent.lastChild ];\n\n\t\t\t\t\t\t// non-xml :nth-child(...) stores cache data on `parent`\n\t\t\t\t\t\tif ( forward && useCache ) {\n\n\t\t\t\t\t\t\t// Seek `elem` from a previously-cached index\n\n\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\tnode = parent;\n\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\tcache = uniqueCache[ type ] || [];\n\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\tdiff = nodeIndex && cache[ 2 ];\n\t\t\t\t\t\t\tnode = nodeIndex && parent.childNodes[ nodeIndex ];\n\n\t\t\t\t\t\t\twhile ( (node = ++nodeIndex && node && node[ dir ] ||\n\n\t\t\t\t\t\t\t\t// Fallback to seeking `elem` from the start\n\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop()) ) {\n\n\t\t\t\t\t\t\t\t// When found, cache indexes on `parent` and break\n\t\t\t\t\t\t\t\tif ( node.nodeType === 1 && ++diff && node === elem ) {\n\t\t\t\t\t\t\t\t\tuniqueCache[ type ] = [ dirruns, nodeIndex, diff ];\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Use previously-cached element index if available\n\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\t\tcache = uniqueCache[ type ] || [];\n\t\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\t\tdiff = nodeIndex;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// xml :nth-child(...)\n\t\t\t\t\t\t\t// or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\t\t\t\t\t\t\tif ( diff === false ) {\n\t\t\t\t\t\t\t\t// Use the same loop as above to seek `elem` from the start\n\t\t\t\t\t\t\t\twhile ( (node = ++nodeIndex && node && node[ dir ] ||\n\t\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop()) ) {\n\n\t\t\t\t\t\t\t\t\tif ( ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnode.nodeName.toLowerCase() === name :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) &&\n\t\t\t\t\t\t\t\t\t\t++diff ) {\n\n\t\t\t\t\t\t\t\t\t\t// Cache the index of each encountered element\n\t\t\t\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache[ type ] = [ dirruns, diff ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tif ( node === elem ) {\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Incorporate the offset, then check against cycle size\n\t\t\t\t\t\tdiff -= last;\n\t\t\t\t\t\treturn diff === first || ( diff % first === 0 && diff / first >= 0 );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t},\n\n\t\t\"PSEUDO\": function( pseudo, argument ) {\n\t\t\t// pseudo-class names are case-insensitive\n\t\t\t// http://www.w3.org/TR/selectors/#pseudo-classes\n\t\t\t// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n\t\t\t// Remember that setFilters inherits from pseudos\n\t\t\tvar args,\n\t\t\t\tfn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||\n\t\t\t\t\tSizzle.error( \"unsupported pseudo: \" + pseudo );\n\n\t\t\t// The user may use createPseudo to indicate that\n\t\t\t// arguments are needed to create the filter function\n\t\t\t// just as Sizzle does\n\t\t\tif ( fn[ expando ] ) {\n\t\t\t\treturn fn( argument );\n\t\t\t}\n\n\t\t\t// But maintain support for old signatures\n\t\t\tif ( fn.length > 1 ) {\n\t\t\t\targs = [ pseudo, pseudo, \"\", argument ];\n\t\t\t\treturn Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?\n\t\t\t\t\tmarkFunction(function( seed, matches ) {\n\t\t\t\t\t\tvar idx,\n\t\t\t\t\t\t\tmatched = fn( seed, argument ),\n\t\t\t\t\t\t\ti = matched.length;\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tidx = indexOf( seed, matched[i] );\n\t\t\t\t\t\t\tseed[ idx ] = !( matches[ idx ] = matched[i] );\n\t\t\t\t\t\t}\n\t\t\t\t\t}) :\n\t\t\t\t\tfunction( elem ) {\n\t\t\t\t\t\treturn fn( elem, 0, args );\n\t\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn fn;\n\t\t}\n\t},\n\n\tpseudos: {\n\t\t// Potentially complex pseudos\n\t\t\"not\": markFunction(function( selector ) {\n\t\t\t// Trim the selector passed to compile\n\t\t\t// to avoid treating leading and trailing\n\t\t\t// spaces as combinators\n\t\t\tvar input = [],\n\t\t\t\tresults = [],\n\t\t\t\tmatcher = compile( selector.replace( rtrim, \"$1\" ) );\n\n\t\t\treturn matcher[ expando ] ?\n\t\t\t\tmarkFunction(function( seed, matches, context, xml ) {\n\t\t\t\t\tvar elem,\n\t\t\t\t\t\tunmatched = matcher( seed, null, xml, [] ),\n\t\t\t\t\t\ti = seed.length;\n\n\t\t\t\t\t// Match elements unmatched by `matcher`\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( (elem = unmatched[i]) ) {\n\t\t\t\t\t\t\tseed[i] = !(matches[i] = elem);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}) :\n\t\t\t\tfunction( elem, context, xml ) {\n\t\t\t\t\tinput[0] = elem;\n\t\t\t\t\tmatcher( input, null, xml, results );\n\t\t\t\t\t// Don't keep the element (issue #299)\n\t\t\t\t\tinput[0] = null;\n\t\t\t\t\treturn !results.pop();\n\t\t\t\t};\n\t\t}),\n\n\t\t\"has\": markFunction(function( selector ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn Sizzle( selector, elem ).length > 0;\n\t\t\t};\n\t\t}),\n\n\t\t\"contains\": markFunction(function( text ) {\n\t\t\ttext = text.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn ( elem.textContent || getText( elem ) ).indexOf( text ) > -1;\n\t\t\t};\n\t\t}),\n\n\t\t// \"Whether an element is represented by a :lang() selector\n\t\t// is based solely on the element's language value\n\t\t// being equal to the identifier C,\n\t\t// or beginning with the identifier C immediately followed by \"-\".\n\t\t// The matching of C against the element's language value is performed case-insensitively.\n\t\t// The identifier C does not have to be a valid language name.\"\n\t\t// http://www.w3.org/TR/selectors/#lang-pseudo\n\t\t\"lang\": markFunction( function( lang ) {\n\t\t\t// lang value must be a valid identifier\n\t\t\tif ( !ridentifier.test(lang || \"\") ) {\n\t\t\t\tSizzle.error( \"unsupported lang: \" + lang );\n\t\t\t}\n\t\t\tlang = lang.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn function( elem ) {\n\t\t\t\tvar elemLang;\n\t\t\t\tdo {\n\t\t\t\t\tif ( (elemLang = documentIsHTML ?\n\t\t\t\t\t\telem.lang :\n\t\t\t\t\t\telem.getAttribute(\"xml:lang\") || elem.getAttribute(\"lang\")) ) {\n\n\t\t\t\t\t\telemLang = elemLang.toLowerCase();\n\t\t\t\t\t\treturn elemLang === lang || elemLang.indexOf( lang + \"-\" ) === 0;\n\t\t\t\t\t}\n\t\t\t\t} while ( (elem = elem.parentNode) && elem.nodeType === 1 );\n\t\t\t\treturn false;\n\t\t\t};\n\t\t}),\n\n\t\t// Miscellaneous\n\t\t\"target\": function( elem ) {\n\t\t\tvar hash = window.location && window.location.hash;\n\t\t\treturn hash && hash.slice( 1 ) === elem.id;\n\t\t},\n\n\t\t\"root\": function( elem ) {\n\t\t\treturn elem === docElem;\n\t\t},\n\n\t\t\"focus\": function( elem ) {\n\t\t\treturn elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);\n\t\t},\n\n\t\t// Boolean properties\n\t\t\"enabled\": createDisabledPseudo( false ),\n\t\t\"disabled\": createDisabledPseudo( true ),\n\n\t\t\"checked\": function( elem ) {\n\t\t\t// In CSS3, :checked should return both checked and selected elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\tvar nodeName = elem.nodeName.toLowerCase();\n\t\t\treturn (nodeName === \"input\" && !!elem.checked) || (nodeName === \"option\" && !!elem.selected);\n\t\t},\n\n\t\t\"selected\": function( elem ) {\n\t\t\t// Accessing this property makes selected-by-default\n\t\t\t// options in Safari work properly\n\t\t\tif ( elem.parentNode ) {\n\t\t\t\telem.parentNode.selectedIndex;\n\t\t\t}\n\n\t\t\treturn elem.selected === true;\n\t\t},\n\n\t\t// Contents\n\t\t\"empty\": function( elem ) {\n\t\t\t// http://www.w3.org/TR/selectors/#empty-pseudo\n\t\t\t// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\n\t\t\t// but not by others (comment: 8; processing instruction: 7; etc.)\n\t\t\t// nodeType < 6 works because attributes (2) do not appear as children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tif ( elem.nodeType < 6 ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\t\"parent\": function( elem ) {\n\t\t\treturn !Expr.pseudos[\"empty\"]( elem );\n\t\t},\n\n\t\t// Element/input types\n\t\t\"header\": function( elem ) {\n\t\t\treturn rheader.test( elem.nodeName );\n\t\t},\n\n\t\t\"input\": function( elem ) {\n\t\t\treturn rinputs.test( elem.nodeName );\n\t\t},\n\n\t\t\"button\": function( elem ) {\n\t\t\tvar name = elem.nodeName.toLowerCase();\n\t\t\treturn name === \"input\" && elem.type === \"button\" || name === \"button\";\n\t\t},\n\n\t\t\"text\": function( elem ) {\n\t\t\tvar attr;\n\t\t\treturn elem.nodeName.toLowerCase() === \"input\" &&\n\t\t\t\telem.type === \"text\" &&\n\n\t\t\t\t// Support: IE<8\n\t\t\t\t// New HTML5 attribute values (e.g., \"search\") appear with elem.type === \"text\"\n\t\t\t\t( (attr = elem.getAttribute(\"type\")) == null || attr.toLowerCase() === \"text\" );\n\t\t},\n\n\t\t// Position-in-collection\n\t\t\"first\": createPositionalPseudo(function() {\n\t\t\treturn [ 0 ];\n\t\t}),\n\n\t\t\"last\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\treturn [ length - 1 ];\n\t\t}),\n\n\t\t\"eq\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\treturn [ argument < 0 ? argument + length : argument ];\n\t\t}),\n\n\t\t\"even\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"odd\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\tvar i = 1;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"lt\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ?\n\t\t\t\targument + length :\n\t\t\t\targument > length ?\n\t\t\t\t\tlength :\n\t\t\t\t\targument;\n\t\t\tfor ( ; --i >= 0; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"gt\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; ++i < length; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t})\n\t}\n};\n\nExpr.pseudos[\"nth\"] = Expr.pseudos[\"eq\"];\n\n// Add button/input type pseudos\nfor ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {\n\tExpr.pseudos[ i ] = createInputPseudo( i );\n}\nfor ( i in { submit: true, reset: true } ) {\n\tExpr.pseudos[ i ] = createButtonPseudo( i );\n}\n\n// Easy API for creating new setFilters\nfunction setFilters() {}\nsetFilters.prototype = Expr.filters = Expr.pseudos;\nExpr.setFilters = new setFilters();\n\ntokenize = Sizzle.tokenize = function( selector, parseOnly ) {\n\tvar matched, match, tokens, type,\n\t\tsoFar, groups, preFilters,\n\t\tcached = tokenCache[ selector + \" \" ];\n\n\tif ( cached ) {\n\t\treturn parseOnly ? 0 : cached.slice( 0 );\n\t}\n\n\tsoFar = selector;\n\tgroups = [];\n\tpreFilters = Expr.preFilter;\n\n\twhile ( soFar ) {\n\n\t\t// Comma and first run\n\t\tif ( !matched || (match = rcomma.exec( soFar )) ) {\n\t\t\tif ( match ) {\n\t\t\t\t// Don't consume trailing commas as valid\n\t\t\t\tsoFar = soFar.slice( match[0].length ) || soFar;\n\t\t\t}\n\t\t\tgroups.push( (tokens = []) );\n\t\t}\n\n\t\tmatched = false;\n\n\t\t// Combinators\n\t\tif ( (match = rcombinators.exec( soFar )) ) {\n\t\t\tmatched = match.shift();\n\t\t\ttokens.push({\n\t\t\t\tvalue: matched,\n\t\t\t\t// Cast descendant combinators to space\n\t\t\t\ttype: match[0].replace( rtrim, \" \" )\n\t\t\t});\n\t\t\tsoFar = soFar.slice( matched.length );\n\t\t}\n\n\t\t// Filters\n\t\tfor ( type in Expr.filter ) {\n\t\t\tif ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||\n\t\t\t\t(match = preFilters[ type ]( match ))) ) {\n\t\t\t\tmatched = match.shift();\n\t\t\t\ttokens.push({\n\t\t\t\t\tvalue: matched,\n\t\t\t\t\ttype: type,\n\t\t\t\t\tmatches: match\n\t\t\t\t});\n\t\t\t\tsoFar = soFar.slice( matched.length );\n\t\t\t}\n\t\t}\n\n\t\tif ( !matched ) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\t// Return the length of the invalid excess\n\t// if we're just parsing\n\t// Otherwise, throw an error or return tokens\n\treturn parseOnly ?\n\t\tsoFar.length :\n\t\tsoFar ?\n\t\t\tSizzle.error( selector ) :\n\t\t\t// Cache the tokens\n\t\t\ttokenCache( selector, groups ).slice( 0 );\n};\n\nfunction toSelector( tokens ) {\n\tvar i = 0,\n\t\tlen = tokens.length,\n\t\tselector = \"\";\n\tfor ( ; i < len; i++ ) {\n\t\tselector += tokens[i].value;\n\t}\n\treturn selector;\n}\n\nfunction addCombinator( matcher, combinator, base ) {\n\tvar dir = combinator.dir,\n\t\tskip = combinator.next,\n\t\tkey = skip || dir,\n\t\tcheckNonElements = base && key === \"parentNode\",\n\t\tdoneName = done++;\n\n\treturn combinator.first ?\n\t\t// Check against closest ancestor/preceding element\n\t\tfunction( elem, context, xml ) {\n\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\treturn matcher( elem, context, xml );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t} :\n\n\t\t// Check against all ancestor/preceding elements\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar oldCache, uniqueCache, outerCache,\n\t\t\t\tnewCache = [ dirruns, doneName ];\n\n\t\t\t// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching\n\t\t\tif ( xml ) {\n\t\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\tif ( matcher( elem, context, xml ) ) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\touterCache = elem[ expando ] || (elem[ expando ] = {});\n\n\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\tuniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {});\n\n\t\t\t\t\t\tif ( skip && skip === elem.nodeName.toLowerCase() ) {\n\t\t\t\t\t\t\telem = elem[ dir ] || elem;\n\t\t\t\t\t\t} else if ( (oldCache = uniqueCache[ key ]) &&\n\t\t\t\t\t\t\toldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {\n\n\t\t\t\t\t\t\t// Assign to newCache so results back-propagate to previous elements\n\t\t\t\t\t\t\treturn (newCache[ 2 ] = oldCache[ 2 ]);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Reuse newcache so results back-propagate to previous elements\n\t\t\t\t\t\t\tuniqueCache[ key ] = newCache;\n\n\t\t\t\t\t\t\t// A match means we're done; a fail means we have to keep checking\n\t\t\t\t\t\t\tif ( (newCache[ 2 ] = matcher( elem, context, xml )) ) {\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n}\n\nfunction elementMatcher( matchers ) {\n\treturn matchers.length > 1 ?\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar i = matchers.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( !matchers[i]( elem, context, xml ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t} :\n\t\tmatchers[0];\n}\n\nfunction multipleContexts( selector, contexts, results ) {\n\tvar i = 0,\n\t\tlen = contexts.length;\n\tfor ( ; i < len; i++ ) {\n\t\tSizzle( selector, contexts[i], results );\n\t}\n\treturn results;\n}\n\nfunction condense( unmatched, map, filter, context, xml ) {\n\tvar elem,\n\t\tnewUnmatched = [],\n\t\ti = 0,\n\t\tlen = unmatched.length,\n\t\tmapped = map != null;\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( (elem = unmatched[i]) ) {\n\t\t\tif ( !filter || filter( elem, context, xml ) ) {\n\t\t\t\tnewUnmatched.push( elem );\n\t\t\t\tif ( mapped ) {\n\t\t\t\t\tmap.push( i );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn newUnmatched;\n}\n\nfunction setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {\n\tif ( postFilter && !postFilter[ expando ] ) {\n\t\tpostFilter = setMatcher( postFilter );\n\t}\n\tif ( postFinder && !postFinder[ expando ] ) {\n\t\tpostFinder = setMatcher( postFinder, postSelector );\n\t}\n\treturn markFunction(function( seed, results, context, xml ) {\n\t\tvar temp, i, elem,\n\t\t\tpreMap = [],\n\t\t\tpostMap = [],\n\t\t\tpreexisting = results.length,\n\n\t\t\t// Get initial elements from seed or context\n\t\t\telems = seed || multipleContexts( selector || \"*\", context.nodeType ? [ context ] : context, [] ),\n\n\t\t\t// Prefilter to get matcher input, preserving a map for seed-results synchronization\n\t\t\tmatcherIn = preFilter && ( seed || !selector ) ?\n\t\t\t\tcondense( elems, preMap, preFilter, context, xml ) :\n\t\t\t\telems,\n\n\t\t\tmatcherOut = matcher ?\n\t\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,\n\t\t\t\tpostFinder || ( seed ? preFilter : preexisting || postFilter ) ?\n\n\t\t\t\t\t// ...intermediate processing is necessary\n\t\t\t\t\t[] :\n\n\t\t\t\t\t// ...otherwise use results directly\n\t\t\t\t\tresults :\n\t\t\t\tmatcherIn;\n\n\t\t// Find primary matches\n\t\tif ( matcher ) {\n\t\t\tmatcher( matcherIn, matcherOut, context, xml );\n\t\t}\n\n\t\t// Apply postFilter\n\t\tif ( postFilter ) {\n\t\t\ttemp = condense( matcherOut, postMap );\n\t\t\tpostFilter( temp, [], context, xml );\n\n\t\t\t// Un-match failing elements by moving them back to matcherIn\n\t\t\ti = temp.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( (elem = temp[i]) ) {\n\t\t\t\t\tmatcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( seed ) {\n\t\t\tif ( postFinder || preFilter ) {\n\t\t\t\tif ( postFinder ) {\n\t\t\t\t\t// Get the final matcherOut by condensing this intermediate into postFinder contexts\n\t\t\t\t\ttemp = [];\n\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( (elem = matcherOut[i]) ) {\n\t\t\t\t\t\t\t// Restore matcherIn since elem is not yet a final match\n\t\t\t\t\t\t\ttemp.push( (matcherIn[i] = elem) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tpostFinder( null, (matcherOut = []), temp, xml );\n\t\t\t\t}\n\n\t\t\t\t// Move matched elements from seed to results to keep them synchronized\n\t\t\t\ti = matcherOut.length;\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tif ( (elem = matcherOut[i]) &&\n\t\t\t\t\t\t(temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) {\n\n\t\t\t\t\t\tseed[temp] = !(results[temp] = elem);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Add elements to results, through postFinder if defined\n\t\t} else {\n\t\t\tmatcherOut = condense(\n\t\t\t\tmatcherOut === results ?\n\t\t\t\t\tmatcherOut.splice( preexisting, matcherOut.length ) :\n\t\t\t\t\tmatcherOut\n\t\t\t);\n\t\t\tif ( postFinder ) {\n\t\t\t\tpostFinder( null, results, matcherOut, xml );\n\t\t\t} else {\n\t\t\t\tpush.apply( results, matcherOut );\n\t\t\t}\n\t\t}\n\t});\n}\n\nfunction matcherFromTokens( tokens ) {\n\tvar checkContext, matcher, j,\n\t\tlen = tokens.length,\n\t\tleadingRelative = Expr.relative[ tokens[0].type ],\n\t\timplicitRelative = leadingRelative || Expr.relative[\" \"],\n\t\ti = leadingRelative ? 1 : 0,\n\n\t\t// The foundational matcher ensures that elements are reachable from top-level context(s)\n\t\tmatchContext = addCombinator( function( elem ) {\n\t\t\treturn elem === checkContext;\n\t\t}, implicitRelative, true ),\n\t\tmatchAnyContext = addCombinator( function( elem ) {\n\t\t\treturn indexOf( checkContext, elem ) > -1;\n\t\t}, implicitRelative, true ),\n\t\tmatchers = [ function( elem, context, xml ) {\n\t\t\tvar ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || (\n\t\t\t\t(checkContext = context).nodeType ?\n\t\t\t\t\tmatchContext( elem, context, xml ) :\n\t\t\t\t\tmatchAnyContext( elem, context, xml ) );\n\t\t\t// Avoid hanging onto element (issue #299)\n\t\t\tcheckContext = null;\n\t\t\treturn ret;\n\t\t} ];\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( (matcher = Expr.relative[ tokens[i].type ]) ) {\n\t\t\tmatchers = [ addCombinator(elementMatcher( matchers ), matcher) ];\n\t\t} else {\n\t\t\tmatcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );\n\n\t\t\t// Return special upon seeing a positional matcher\n\t\t\tif ( matcher[ expando ] ) {\n\t\t\t\t// Find the next relative operator (if any) for proper handling\n\t\t\t\tj = ++i;\n\t\t\t\tfor ( ; j < len; j++ ) {\n\t\t\t\t\tif ( Expr.relative[ tokens[j].type ] ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn setMatcher(\n\t\t\t\t\ti > 1 && elementMatcher( matchers ),\n\t\t\t\t\ti > 1 && toSelector(\n\t\t\t\t\t\t// If the preceding token was a descendant combinator, insert an implicit any-element `*`\n\t\t\t\t\t\ttokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === \" \" ? \"*\" : \"\" })\n\t\t\t\t\t).replace( rtrim, \"$1\" ),\n\t\t\t\t\tmatcher,\n\t\t\t\t\ti < j && matcherFromTokens( tokens.slice( i, j ) ),\n\t\t\t\t\tj < len && matcherFromTokens( (tokens = tokens.slice( j )) ),\n\t\t\t\t\tj < len && toSelector( tokens )\n\t\t\t\t);\n\t\t\t}\n\t\t\tmatchers.push( matcher );\n\t\t}\n\t}\n\n\treturn elementMatcher( matchers );\n}\n\nfunction matcherFromGroupMatchers( elementMatchers, setMatchers ) {\n\tvar bySet = setMatchers.length > 0,\n\t\tbyElement = elementMatchers.length > 0,\n\t\tsuperMatcher = function( seed, context, xml, results, outermost ) {\n\t\t\tvar elem, j, matcher,\n\t\t\t\tmatchedCount = 0,\n\t\t\t\ti = \"0\",\n\t\t\t\tunmatched = seed && [],\n\t\t\t\tsetMatched = [],\n\t\t\t\tcontextBackup = outermostContext,\n\t\t\t\t// We must always have either seed elements or outermost context\n\t\t\t\telems = seed || byElement && Expr.find[\"TAG\"]( \"*\", outermost ),\n\t\t\t\t// Use integer dirruns iff this is the outermost matcher\n\t\t\t\tdirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1),\n\t\t\t\tlen = elems.length;\n\n\t\t\tif ( outermost ) {\n\t\t\t\toutermostContext = context === document || context || outermost;\n\t\t\t}\n\n\t\t\t// Add elements passing elementMatchers directly to results\n\t\t\t// Support: IE<9, Safari\n\t\t\t// Tolerate NodeList properties (IE: \"length\"; Safari: ) matching elements by id\n\t\t\tfor ( ; i !== len && (elem = elems[i]) != null; i++ ) {\n\t\t\t\tif ( byElement && elem ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\tif ( !context && elem.ownerDocument !== document ) {\n\t\t\t\t\t\tsetDocument( elem );\n\t\t\t\t\t\txml = !documentIsHTML;\n\t\t\t\t\t}\n\t\t\t\t\twhile ( (matcher = elementMatchers[j++]) ) {\n\t\t\t\t\t\tif ( matcher( elem, context || document, xml) ) {\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( outermost ) {\n\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Track unmatched elements for set filters\n\t\t\t\tif ( bySet ) {\n\t\t\t\t\t// They will have gone through all possible matchers\n\t\t\t\t\tif ( (elem = !matcher && elem) ) {\n\t\t\t\t\t\tmatchedCount--;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Lengthen the array for every element, matched or not\n\t\t\t\t\tif ( seed ) {\n\t\t\t\t\t\tunmatched.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// `i` is now the count of elements visited above, and adding it to `matchedCount`\n\t\t\t// makes the latter nonnegative.\n\t\t\tmatchedCount += i;\n\n\t\t\t// Apply set filters to unmatched elements\n\t\t\t// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`\n\t\t\t// equals `i`), unless we didn't visit _any_ elements in the above loop because we have\n\t\t\t// no element matchers and no seed.\n\t\t\t// Incrementing an initially-string \"0\" `i` allows `i` to remain a string only in that\n\t\t\t// case, which will result in a \"00\" `matchedCount` that differs from `i` but is also\n\t\t\t// numerically zero.\n\t\t\tif ( bySet && i !== matchedCount ) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ( (matcher = setMatchers[j++]) ) {\n\t\t\t\t\tmatcher( unmatched, setMatched, context, xml );\n\t\t\t\t}\n\n\t\t\t\tif ( seed ) {\n\t\t\t\t\t// Reintegrate element matches to eliminate the need for sorting\n\t\t\t\t\tif ( matchedCount > 0 ) {\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tif ( !(unmatched[i] || setMatched[i]) ) {\n\t\t\t\t\t\t\t\tsetMatched[i] = pop.call( results );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Discard index placeholder values to get only actual matches\n\t\t\t\t\tsetMatched = condense( setMatched );\n\t\t\t\t}\n\n\t\t\t\t// Add matches to results\n\t\t\t\tpush.apply( results, setMatched );\n\n\t\t\t\t// Seedless set matches succeeding multiple successful matchers stipulate sorting\n\t\t\t\tif ( outermost && !seed && setMatched.length > 0 &&\n\t\t\t\t\t( matchedCount + setMatchers.length ) > 1 ) {\n\n\t\t\t\t\tSizzle.uniqueSort( results );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override manipulation of globals by nested matchers\n\t\t\tif ( outermost ) {\n\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\toutermostContext = contextBackup;\n\t\t\t}\n\n\t\t\treturn unmatched;\n\t\t};\n\n\treturn bySet ?\n\t\tmarkFunction( superMatcher ) :\n\t\tsuperMatcher;\n}\n\ncompile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {\n\tvar i,\n\t\tsetMatchers = [],\n\t\telementMatchers = [],\n\t\tcached = compilerCache[ selector + \" \" ];\n\n\tif ( !cached ) {\n\t\t// Generate a function of recursive functions that can be used to check each element\n\t\tif ( !match ) {\n\t\t\tmatch = tokenize( selector );\n\t\t}\n\t\ti = match.length;\n\t\twhile ( i-- ) {\n\t\t\tcached = matcherFromTokens( match[i] );\n\t\t\tif ( cached[ expando ] ) {\n\t\t\t\tsetMatchers.push( cached );\n\t\t\t} else {\n\t\t\t\telementMatchers.push( cached );\n\t\t\t}\n\t\t}\n\n\t\t// Cache the compiled function\n\t\tcached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );\n\n\t\t// Save selector and tokenization\n\t\tcached.selector = selector;\n\t}\n\treturn cached;\n};\n\n/**\n * A low-level selection function that works with Sizzle's compiled\n * selector functions\n * @param {String|Function} selector A selector or a pre-compiled\n * selector function built with Sizzle.compile\n * @param {Element} context\n * @param {Array} [results]\n * @param {Array} [seed] A set of elements to match against\n */\nselect = Sizzle.select = function( selector, context, results, seed ) {\n\tvar i, tokens, token, type, find,\n\t\tcompiled = typeof selector === \"function\" && selector,\n\t\tmatch = !seed && tokenize( (selector = compiled.selector || selector) );\n\n\tresults = results || [];\n\n\t// Try to minimize operations if there is only one selector in the list and no seed\n\t// (the latter of which guarantees us context)\n\tif ( match.length === 1 ) {\n\n\t\t// Reduce context if the leading compound selector is an ID\n\t\ttokens = match[0] = match[0].slice( 0 );\n\t\tif ( tokens.length > 2 && (token = tokens[0]).type === \"ID\" &&\n\t\t\t\tcontext.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[1].type ] ) {\n\n\t\t\tcontext = ( Expr.find[\"ID\"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0];\n\t\t\tif ( !context ) {\n\t\t\t\treturn results;\n\n\t\t\t// Precompiled matchers will still verify ancestry, so step up a level\n\t\t\t} else if ( compiled ) {\n\t\t\t\tcontext = context.parentNode;\n\t\t\t}\n\n\t\t\tselector = selector.slice( tokens.shift().value.length );\n\t\t}\n\n\t\t// Fetch a seed set for right-to-left matching\n\t\ti = matchExpr[\"needsContext\"].test( selector ) ? 0 : tokens.length;\n\t\twhile ( i-- ) {\n\t\t\ttoken = tokens[i];\n\n\t\t\t// Abort if we hit a combinator\n\t\t\tif ( Expr.relative[ (type = token.type) ] ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( (find = Expr.find[ type ]) ) {\n\t\t\t\t// Search, expanding context for leading sibling combinators\n\t\t\t\tif ( (seed = find(\n\t\t\t\t\ttoken.matches[0].replace( runescape, funescape ),\n\t\t\t\t\trsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context\n\t\t\t\t)) ) {\n\n\t\t\t\t\t// If seed is empty or no tokens remain, we can return early\n\t\t\t\t\ttokens.splice( i, 1 );\n\t\t\t\t\tselector = seed.length && toSelector( tokens );\n\t\t\t\t\tif ( !selector ) {\n\t\t\t\t\t\tpush.apply( results, seed );\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Compile and execute a filtering function if one is not provided\n\t// Provide `match` to avoid retokenization if we modified the selector above\n\t( compiled || compile( selector, match ) )(\n\t\tseed,\n\t\tcontext,\n\t\t!documentIsHTML,\n\t\tresults,\n\t\t!context || rsibling.test( selector ) && testContext( context.parentNode ) || context\n\t);\n\treturn results;\n};\n\n// One-time assignments\n\n// Sort stability\nsupport.sortStable = expando.split(\"\").sort( sortOrder ).join(\"\") === expando;\n\n// Support: Chrome 14-35+\n// Always assume duplicates if they aren't passed to the comparison function\nsupport.detectDuplicates = !!hasDuplicate;\n\n// Initialize against the default document\nsetDocument();\n\n// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)\n// Detached nodes confoundingly follow *each other*\nsupport.sortDetached = assert(function( el ) {\n\t// Should return 1, but returns 4 (following)\n\treturn el.compareDocumentPosition( document.createElement(\"fieldset\") ) & 1;\n});\n\n// Support: IE<8\n// Prevent attribute/property \"interpolation\"\n// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx\nif ( !assert(function( el ) {\n\tel.innerHTML = \"\";\n\treturn el.firstChild.getAttribute(\"href\") === \"#\" ;\n}) ) {\n\taddHandle( \"type|href|height|width\", function( elem, name, isXML ) {\n\t\tif ( !isXML ) {\n\t\t\treturn elem.getAttribute( name, name.toLowerCase() === \"type\" ? 1 : 2 );\n\t\t}\n\t});\n}\n\n// Support: IE<9\n// Use defaultValue in place of getAttribute(\"value\")\nif ( !support.attributes || !assert(function( el ) {\n\tel.innerHTML = \"\";\n\tel.firstChild.setAttribute( \"value\", \"\" );\n\treturn el.firstChild.getAttribute( \"value\" ) === \"\";\n}) ) {\n\taddHandle( \"value\", function( elem, name, isXML ) {\n\t\tif ( !isXML && elem.nodeName.toLowerCase() === \"input\" ) {\n\t\t\treturn elem.defaultValue;\n\t\t}\n\t});\n}\n\n// Support: IE<9\n// Use getAttributeNode to fetch booleans when getAttribute lies\nif ( !assert(function( el ) {\n\treturn el.getAttribute(\"disabled\") == null;\n}) ) {\n\taddHandle( booleans, function( elem, name, isXML ) {\n\t\tvar val;\n\t\tif ( !isXML ) {\n\t\t\treturn elem[ name ] === true ? name.toLowerCase() :\n\t\t\t\t\t(val = elem.getAttributeNode( name )) && val.specified ?\n\t\t\t\t\tval.value :\n\t\t\t\tnull;\n\t\t}\n\t});\n}\n\nreturn Sizzle;\n\n})( window );\n\n\n\njQuery.find = Sizzle;\njQuery.expr = Sizzle.selectors;\n\n// Deprecated\njQuery.expr[ \":\" ] = jQuery.expr.pseudos;\njQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort;\njQuery.text = Sizzle.getText;\njQuery.isXMLDoc = Sizzle.isXML;\njQuery.contains = Sizzle.contains;\njQuery.escapeSelector = Sizzle.escape;\n\n\n\n\nvar dir = function( elem, dir, until ) {\n\tvar matched = [],\n\t\ttruncate = until !== undefined;\n\n\twhile ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {\n\t\tif ( elem.nodeType === 1 ) {\n\t\t\tif ( truncate && jQuery( elem ).is( until ) ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tmatched.push( elem );\n\t\t}\n\t}\n\treturn matched;\n};\n\n\nvar siblings = function( n, elem ) {\n\tvar matched = [];\n\n\tfor ( ; n; n = n.nextSibling ) {\n\t\tif ( n.nodeType === 1 && n !== elem ) {\n\t\t\tmatched.push( n );\n\t\t}\n\t}\n\n\treturn matched;\n};\n\n\nvar rneedsContext = jQuery.expr.match.needsContext;\n\n\n\nfunction nodeName( elem, name ) {\n\n return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n\n};\nvar rsingleTag = ( /^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i );\n\n\n\n// Implement the identical functionality for filter and not\nfunction winnow( elements, qualifier, not ) {\n\tif ( isFunction( qualifier ) ) {\n\t\treturn jQuery.grep( elements, function( elem, i ) {\n\t\t\treturn !!qualifier.call( elem, i, elem ) !== not;\n\t\t} );\n\t}\n\n\t// Single element\n\tif ( qualifier.nodeType ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( elem === qualifier ) !== not;\n\t\t} );\n\t}\n\n\t// Arraylike of elements (jQuery, arguments, Array)\n\tif ( typeof qualifier !== \"string\" ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( indexOf.call( qualifier, elem ) > -1 ) !== not;\n\t\t} );\n\t}\n\n\t// Filtered directly for both simple and complex selectors\n\treturn jQuery.filter( qualifier, elements, not );\n}\n\njQuery.filter = function( expr, elems, not ) {\n\tvar elem = elems[ 0 ];\n\n\tif ( not ) {\n\t\texpr = \":not(\" + expr + \")\";\n\t}\n\n\tif ( elems.length === 1 && elem.nodeType === 1 ) {\n\t\treturn jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [];\n\t}\n\n\treturn jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {\n\t\treturn elem.nodeType === 1;\n\t} ) );\n};\n\njQuery.fn.extend( {\n\tfind: function( selector ) {\n\t\tvar i, ret,\n\t\t\tlen = this.length,\n\t\t\tself = this;\n\n\t\tif ( typeof selector !== \"string\" ) {\n\t\t\treturn this.pushStack( jQuery( selector ).filter( function() {\n\t\t\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\t\t\tif ( jQuery.contains( self[ i ], this ) ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} ) );\n\t\t}\n\n\t\tret = this.pushStack( [] );\n\n\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\tjQuery.find( selector, self[ i ], ret );\n\t\t}\n\n\t\treturn len > 1 ? jQuery.uniqueSort( ret ) : ret;\n\t},\n\tfilter: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], false ) );\n\t},\n\tnot: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], true ) );\n\t},\n\tis: function( selector ) {\n\t\treturn !!winnow(\n\t\t\tthis,\n\n\t\t\t// If this is a positional/relative selector, check membership in the returned set\n\t\t\t// so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n\t\t\ttypeof selector === \"string\" && rneedsContext.test( selector ) ?\n\t\t\t\tjQuery( selector ) :\n\t\t\t\tselector || [],\n\t\t\tfalse\n\t\t).length;\n\t}\n} );\n\n\n// Initialize a jQuery object\n\n\n// A central reference to the root jQuery(document)\nvar rootjQuery,\n\n\t// A simple way to check for HTML strings\n\t// Prioritize #id over to avoid XSS via location.hash (#9521)\n\t// Strict HTML recognition (#11290: must start with <)\n\t// Shortcut simple #id case for speed\n\trquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/,\n\n\tinit = jQuery.fn.init = function( selector, context, root ) {\n\t\tvar match, elem;\n\n\t\t// HANDLE: $(\"\"), $(null), $(undefined), $(false)\n\t\tif ( !selector ) {\n\t\t\treturn this;\n\t\t}\n\n\t\t// Method init() accepts an alternate rootjQuery\n\t\t// so migrate can support jQuery.sub (gh-2101)\n\t\troot = root || rootjQuery;\n\n\t\t// Handle HTML strings\n\t\tif ( typeof selector === \"string\" ) {\n\t\t\tif ( selector[ 0 ] === \"<\" &&\n\t\t\t\tselector[ selector.length - 1 ] === \">\" &&\n\t\t\t\tselector.length >= 3 ) {\n\n\t\t\t\t// Assume that strings that start and end with <> are HTML and skip the regex check\n\t\t\t\tmatch = [ null, selector, null ];\n\n\t\t\t} else {\n\t\t\t\tmatch = rquickExpr.exec( selector );\n\t\t\t}\n\n\t\t\t// Match html or make sure no context is specified for #id\n\t\t\tif ( match && ( match[ 1 ] || !context ) ) {\n\n\t\t\t\t// HANDLE: $(html) -> $(array)\n\t\t\t\tif ( match[ 1 ] ) {\n\t\t\t\t\tcontext = context instanceof jQuery ? context[ 0 ] : context;\n\n\t\t\t\t\t// Option to run scripts is true for back-compat\n\t\t\t\t\t// Intentionally let the error be thrown if parseHTML is not present\n\t\t\t\t\tjQuery.merge( this, jQuery.parseHTML(\n\t\t\t\t\t\tmatch[ 1 ],\n\t\t\t\t\t\tcontext && context.nodeType ? context.ownerDocument || context : document,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t) );\n\n\t\t\t\t\t// HANDLE: $(html, props)\n\t\t\t\t\tif ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {\n\t\t\t\t\t\tfor ( match in context ) {\n\n\t\t\t\t\t\t\t// Properties of context are called as methods if possible\n\t\t\t\t\t\t\tif ( isFunction( this[ match ] ) ) {\n\t\t\t\t\t\t\t\tthis[ match ]( context[ match ] );\n\n\t\t\t\t\t\t\t// ...and otherwise set as attributes\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.attr( match, context[ match ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn this;\n\n\t\t\t\t// HANDLE: $(#id)\n\t\t\t\t} else {\n\t\t\t\t\telem = document.getElementById( match[ 2 ] );\n\n\t\t\t\t\tif ( elem ) {\n\n\t\t\t\t\t\t// Inject the element directly into the jQuery object\n\t\t\t\t\t\tthis[ 0 ] = elem;\n\t\t\t\t\t\tthis.length = 1;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\n\t\t\t// HANDLE: $(expr, $(...))\n\t\t\t} else if ( !context || context.jquery ) {\n\t\t\t\treturn ( context || root ).find( selector );\n\n\t\t\t// HANDLE: $(expr, context)\n\t\t\t// (which is just equivalent to: $(context).find(expr)\n\t\t\t} else {\n\t\t\t\treturn this.constructor( context ).find( selector );\n\t\t\t}\n\n\t\t// HANDLE: $(DOMElement)\n\t\t} else if ( selector.nodeType ) {\n\t\t\tthis[ 0 ] = selector;\n\t\t\tthis.length = 1;\n\t\t\treturn this;\n\n\t\t// HANDLE: $(function)\n\t\t// Shortcut for document ready\n\t\t} else if ( isFunction( selector ) ) {\n\t\t\treturn root.ready !== undefined ?\n\t\t\t\troot.ready( selector ) :\n\n\t\t\t\t// Execute immediately if ready is not present\n\t\t\t\tselector( jQuery );\n\t\t}\n\n\t\treturn jQuery.makeArray( selector, this );\n\t};\n\n// Give the init function the jQuery prototype for later instantiation\ninit.prototype = jQuery.fn;\n\n// Initialize central reference\nrootjQuery = jQuery( document );\n\n\nvar rparentsprev = /^(?:parents|prev(?:Until|All))/,\n\n\t// Methods guaranteed to produce a unique set when starting from a unique set\n\tguaranteedUnique = {\n\t\tchildren: true,\n\t\tcontents: true,\n\t\tnext: true,\n\t\tprev: true\n\t};\n\njQuery.fn.extend( {\n\thas: function( target ) {\n\t\tvar targets = jQuery( target, this ),\n\t\t\tl = targets.length;\n\n\t\treturn this.filter( function() {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tif ( jQuery.contains( this, targets[ i ] ) ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\tclosest: function( selectors, context ) {\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\tl = this.length,\n\t\t\tmatched = [],\n\t\t\ttargets = typeof selectors !== \"string\" && jQuery( selectors );\n\n\t\t// Positional selectors never match, since there's no _selection_ context\n\t\tif ( !rneedsContext.test( selectors ) ) {\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tfor ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {\n\n\t\t\t\t\t// Always skip document fragments\n\t\t\t\t\tif ( cur.nodeType < 11 && ( targets ?\n\t\t\t\t\t\ttargets.index( cur ) > -1 :\n\n\t\t\t\t\t\t// Don't pass non-elements to Sizzle\n\t\t\t\t\t\tcur.nodeType === 1 &&\n\t\t\t\t\t\t\tjQuery.find.matchesSelector( cur, selectors ) ) ) {\n\n\t\t\t\t\t\tmatched.push( cur );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );\n\t},\n\n\t// Determine the position of an element within the set\n\tindex: function( elem ) {\n\n\t\t// No argument, return index in parent\n\t\tif ( !elem ) {\n\t\t\treturn ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;\n\t\t}\n\n\t\t// Index in selector\n\t\tif ( typeof elem === \"string\" ) {\n\t\t\treturn indexOf.call( jQuery( elem ), this[ 0 ] );\n\t\t}\n\n\t\t// Locate the position of the desired element\n\t\treturn indexOf.call( this,\n\n\t\t\t// If it receives a jQuery object, the first element is used\n\t\t\telem.jquery ? elem[ 0 ] : elem\n\t\t);\n\t},\n\n\tadd: function( selector, context ) {\n\t\treturn this.pushStack(\n\t\t\tjQuery.uniqueSort(\n\t\t\t\tjQuery.merge( this.get(), jQuery( selector, context ) )\n\t\t\t)\n\t\t);\n\t},\n\n\taddBack: function( selector ) {\n\t\treturn this.add( selector == null ?\n\t\t\tthis.prevObject : this.prevObject.filter( selector )\n\t\t);\n\t}\n} );\n\nfunction sibling( cur, dir ) {\n\twhile ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}\n\treturn cur;\n}\n\njQuery.each( {\n\tparent: function( elem ) {\n\t\tvar parent = elem.parentNode;\n\t\treturn parent && parent.nodeType !== 11 ? parent : null;\n\t},\n\tparents: function( elem ) {\n\t\treturn dir( elem, \"parentNode\" );\n\t},\n\tparentsUntil: function( elem, i, until ) {\n\t\treturn dir( elem, \"parentNode\", until );\n\t},\n\tnext: function( elem ) {\n\t\treturn sibling( elem, \"nextSibling\" );\n\t},\n\tprev: function( elem ) {\n\t\treturn sibling( elem, \"previousSibling\" );\n\t},\n\tnextAll: function( elem ) {\n\t\treturn dir( elem, \"nextSibling\" );\n\t},\n\tprevAll: function( elem ) {\n\t\treturn dir( elem, \"previousSibling\" );\n\t},\n\tnextUntil: function( elem, i, until ) {\n\t\treturn dir( elem, \"nextSibling\", until );\n\t},\n\tprevUntil: function( elem, i, until ) {\n\t\treturn dir( elem, \"previousSibling\", until );\n\t},\n\tsiblings: function( elem ) {\n\t\treturn siblings( ( elem.parentNode || {} ).firstChild, elem );\n\t},\n\tchildren: function( elem ) {\n\t\treturn siblings( elem.firstChild );\n\t},\n\tcontents: function( elem ) {\n\t\tif ( typeof elem.contentDocument !== \"undefined\" ) {\n\t\t\treturn elem.contentDocument;\n\t\t}\n\n\t\t// Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only\n\t\t// Treat the template element as a regular one in browsers that\n\t\t// don't support it.\n\t\tif ( nodeName( elem, \"template\" ) ) {\n\t\t\telem = elem.content || elem;\n\t\t}\n\n\t\treturn jQuery.merge( [], elem.childNodes );\n\t}\n}, function( name, fn ) {\n\tjQuery.fn[ name ] = function( until, selector ) {\n\t\tvar matched = jQuery.map( this, fn, until );\n\n\t\tif ( name.slice( -5 ) !== \"Until\" ) {\n\t\t\tselector = until;\n\t\t}\n\n\t\tif ( selector && typeof selector === \"string\" ) {\n\t\t\tmatched = jQuery.filter( selector, matched );\n\t\t}\n\n\t\tif ( this.length > 1 ) {\n\n\t\t\t// Remove duplicates\n\t\t\tif ( !guaranteedUnique[ name ] ) {\n\t\t\t\tjQuery.uniqueSort( matched );\n\t\t\t}\n\n\t\t\t// Reverse order for parents* and prev-derivatives\n\t\t\tif ( rparentsprev.test( name ) ) {\n\t\t\t\tmatched.reverse();\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched );\n\t};\n} );\nvar rnothtmlwhite = ( /[^\\x20\\t\\r\\n\\f]+/g );\n\n\n\n// Convert String-formatted options into Object-formatted ones\nfunction createOptions( options ) {\n\tvar object = {};\n\tjQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) {\n\t\tobject[ flag ] = true;\n\t} );\n\treturn object;\n}\n\n/*\n * Create a callback list using the following parameters:\n *\n *\toptions: an optional list of space-separated options that will change how\n *\t\t\tthe callback list behaves or a more traditional option object\n *\n * By default a callback list will act like an event callback list and can be\n * \"fired\" multiple times.\n *\n * Possible options:\n *\n *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\n *\n *\tmemory:\t\t\twill keep track of previous values and will call any callback added\n *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\n *\t\t\t\t\tvalues (like a Deferred)\n *\n *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\n *\n *\tstopOnFalse:\tinterrupt callings when a callback returns false\n *\n */\njQuery.Callbacks = function( options ) {\n\n\t// Convert options from String-formatted to Object-formatted if needed\n\t// (we check in cache first)\n\toptions = typeof options === \"string\" ?\n\t\tcreateOptions( options ) :\n\t\tjQuery.extend( {}, options );\n\n\tvar // Flag to know if list is currently firing\n\t\tfiring,\n\n\t\t// Last fire value for non-forgettable lists\n\t\tmemory,\n\n\t\t// Flag to know if list was already fired\n\t\tfired,\n\n\t\t// Flag to prevent firing\n\t\tlocked,\n\n\t\t// Actual callback list\n\t\tlist = [],\n\n\t\t// Queue of execution data for repeatable lists\n\t\tqueue = [],\n\n\t\t// Index of currently firing callback (modified by add/remove as needed)\n\t\tfiringIndex = -1,\n\n\t\t// Fire callbacks\n\t\tfire = function() {\n\n\t\t\t// Enforce single-firing\n\t\t\tlocked = locked || options.once;\n\n\t\t\t// Execute callbacks for all pending executions,\n\t\t\t// respecting firingIndex overrides and runtime changes\n\t\t\tfired = firing = true;\n\t\t\tfor ( ; queue.length; firingIndex = -1 ) {\n\t\t\t\tmemory = queue.shift();\n\t\t\t\twhile ( ++firingIndex < list.length ) {\n\n\t\t\t\t\t// Run callback and check for early termination\n\t\t\t\t\tif ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&\n\t\t\t\t\t\toptions.stopOnFalse ) {\n\n\t\t\t\t\t\t// Jump to end and forget the data so .add doesn't re-fire\n\t\t\t\t\t\tfiringIndex = list.length;\n\t\t\t\t\t\tmemory = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Forget the data if we're done with it\n\t\t\tif ( !options.memory ) {\n\t\t\t\tmemory = false;\n\t\t\t}\n\n\t\t\tfiring = false;\n\n\t\t\t// Clean up if we're done firing for good\n\t\t\tif ( locked ) {\n\n\t\t\t\t// Keep an empty list if we have data for future add calls\n\t\t\t\tif ( memory ) {\n\t\t\t\t\tlist = [];\n\n\t\t\t\t// Otherwise, this object is spent\n\t\t\t\t} else {\n\t\t\t\t\tlist = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// Actual Callbacks object\n\t\tself = {\n\n\t\t\t// Add a callback or a collection of callbacks to the list\n\t\t\tadd: function() {\n\t\t\t\tif ( list ) {\n\n\t\t\t\t\t// If we have memory from a past run, we should fire after adding\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfiringIndex = list.length - 1;\n\t\t\t\t\t\tqueue.push( memory );\n\t\t\t\t\t}\n\n\t\t\t\t\t( function add( args ) {\n\t\t\t\t\t\tjQuery.each( args, function( _, arg ) {\n\t\t\t\t\t\t\tif ( isFunction( arg ) ) {\n\t\t\t\t\t\t\t\tif ( !options.unique || !self.has( arg ) ) {\n\t\t\t\t\t\t\t\t\tlist.push( arg );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if ( arg && arg.length && toType( arg ) !== \"string\" ) {\n\n\t\t\t\t\t\t\t\t// Inspect recursively\n\t\t\t\t\t\t\t\tadd( arg );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} );\n\t\t\t\t\t} )( arguments );\n\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Remove a callback from the list\n\t\t\tremove: function() {\n\t\t\t\tjQuery.each( arguments, function( _, arg ) {\n\t\t\t\t\tvar index;\n\t\t\t\t\twhile ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {\n\t\t\t\t\t\tlist.splice( index, 1 );\n\n\t\t\t\t\t\t// Handle firing indexes\n\t\t\t\t\t\tif ( index <= firingIndex ) {\n\t\t\t\t\t\t\tfiringIndex--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Check if a given callback is in the list.\n\t\t\t// If no argument is given, return whether or not list has callbacks attached.\n\t\t\thas: function( fn ) {\n\t\t\t\treturn fn ?\n\t\t\t\t\tjQuery.inArray( fn, list ) > -1 :\n\t\t\t\t\tlist.length > 0;\n\t\t\t},\n\n\t\t\t// Remove all callbacks from the list\n\t\t\tempty: function() {\n\t\t\t\tif ( list ) {\n\t\t\t\t\tlist = [];\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Disable .fire and .add\n\t\t\t// Abort any current/pending executions\n\t\t\t// Clear all callbacks and values\n\t\t\tdisable: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tlist = memory = \"\";\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tdisabled: function() {\n\t\t\t\treturn !list;\n\t\t\t},\n\n\t\t\t// Disable .fire\n\t\t\t// Also disable .add unless we have memory (since it would have no effect)\n\t\t\t// Abort any pending executions\n\t\t\tlock: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tif ( !memory && !firing ) {\n\t\t\t\t\tlist = memory = \"\";\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tlocked: function() {\n\t\t\t\treturn !!locked;\n\t\t\t},\n\n\t\t\t// Call all callbacks with the given context and arguments\n\t\t\tfireWith: function( context, args ) {\n\t\t\t\tif ( !locked ) {\n\t\t\t\t\targs = args || [];\n\t\t\t\t\targs = [ context, args.slice ? args.slice() : args ];\n\t\t\t\t\tqueue.push( args );\n\t\t\t\t\tif ( !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Call all the callbacks with the given arguments\n\t\t\tfire: function() {\n\t\t\t\tself.fireWith( this, arguments );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// To know if the callbacks have already been called at least once\n\t\t\tfired: function() {\n\t\t\t\treturn !!fired;\n\t\t\t}\n\t\t};\n\n\treturn self;\n};\n\n\nfunction Identity( v ) {\n\treturn v;\n}\nfunction Thrower( ex ) {\n\tthrow ex;\n}\n\nfunction adoptValue( value, resolve, reject, noValue ) {\n\tvar method;\n\n\ttry {\n\n\t\t// Check for promise aspect first to privilege synchronous behavior\n\t\tif ( value && isFunction( ( method = value.promise ) ) ) {\n\t\t\tmethod.call( value ).done( resolve ).fail( reject );\n\n\t\t// Other thenables\n\t\t} else if ( value && isFunction( ( method = value.then ) ) ) {\n\t\t\tmethod.call( value, resolve, reject );\n\n\t\t// Other non-thenables\n\t\t} else {\n\n\t\t\t// Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:\n\t\t\t// * false: [ value ].slice( 0 ) => resolve( value )\n\t\t\t// * true: [ value ].slice( 1 ) => resolve()\n\t\t\tresolve.apply( undefined, [ value ].slice( noValue ) );\n\t\t}\n\n\t// For Promises/A+, convert exceptions into rejections\n\t// Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in\n\t// Deferred#then to conditionally suppress rejection.\n\t} catch ( value ) {\n\n\t\t// Support: Android 4.0 only\n\t\t// Strict mode functions invoked without .call/.apply get global-object context\n\t\treject.apply( undefined, [ value ] );\n\t}\n}\n\njQuery.extend( {\n\n\tDeferred: function( func ) {\n\t\tvar tuples = [\n\n\t\t\t\t// action, add listener, callbacks,\n\t\t\t\t// ... .then handlers, argument index, [final state]\n\t\t\t\t[ \"notify\", \"progress\", jQuery.Callbacks( \"memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"memory\" ), 2 ],\n\t\t\t\t[ \"resolve\", \"done\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 0, \"resolved\" ],\n\t\t\t\t[ \"reject\", \"fail\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 1, \"rejected\" ]\n\t\t\t],\n\t\t\tstate = \"pending\",\n\t\t\tpromise = {\n\t\t\t\tstate: function() {\n\t\t\t\t\treturn state;\n\t\t\t\t},\n\t\t\t\talways: function() {\n\t\t\t\t\tdeferred.done( arguments ).fail( arguments );\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\t\"catch\": function( fn ) {\n\t\t\t\t\treturn promise.then( null, fn );\n\t\t\t\t},\n\n\t\t\t\t// Keep pipe for back-compat\n\t\t\t\tpipe: function( /* fnDone, fnFail, fnProgress */ ) {\n\t\t\t\t\tvar fns = arguments;\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\t\t\t\t\t\tjQuery.each( tuples, function( i, tuple ) {\n\n\t\t\t\t\t\t\t// Map tuples (progress, done, fail) to arguments (done, fail, progress)\n\t\t\t\t\t\t\tvar fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ];\n\n\t\t\t\t\t\t\t// deferred.progress(function() { bind to newDefer or newDefer.notify })\n\t\t\t\t\t\t\t// deferred.done(function() { bind to newDefer or newDefer.resolve })\n\t\t\t\t\t\t\t// deferred.fail(function() { bind to newDefer or newDefer.reject })\n\t\t\t\t\t\t\tdeferred[ tuple[ 1 ] ]( function() {\n\t\t\t\t\t\t\t\tvar returned = fn && fn.apply( this, arguments );\n\t\t\t\t\t\t\t\tif ( returned && isFunction( returned.promise ) ) {\n\t\t\t\t\t\t\t\t\treturned.promise()\n\t\t\t\t\t\t\t\t\t\t.progress( newDefer.notify )\n\t\t\t\t\t\t\t\t\t\t.done( newDefer.resolve )\n\t\t\t\t\t\t\t\t\t\t.fail( newDefer.reject );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tnewDefer[ tuple[ 0 ] + \"With\" ](\n\t\t\t\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t\t\t\tfn ? [ returned ] : arguments\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tfns = null;\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\t\t\t\tthen: function( onFulfilled, onRejected, onProgress ) {\n\t\t\t\t\tvar maxDepth = 0;\n\t\t\t\t\tfunction resolve( depth, deferred, handler, special ) {\n\t\t\t\t\t\treturn function() {\n\t\t\t\t\t\t\tvar that = this,\n\t\t\t\t\t\t\t\targs = arguments,\n\t\t\t\t\t\t\t\tmightThrow = function() {\n\t\t\t\t\t\t\t\t\tvar returned, then;\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.3\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-59\n\t\t\t\t\t\t\t\t\t// Ignore double-resolution attempts\n\t\t\t\t\t\t\t\t\tif ( depth < maxDepth ) {\n\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\treturned = handler.apply( that, args );\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.1\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-48\n\t\t\t\t\t\t\t\t\tif ( returned === deferred.promise() ) {\n\t\t\t\t\t\t\t\t\t\tthrow new TypeError( \"Thenable self-resolution\" );\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ sections 2.3.3.1, 3.5\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-54\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-75\n\t\t\t\t\t\t\t\t\t// Retrieve `then` only once\n\t\t\t\t\t\t\t\t\tthen = returned &&\n\n\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.4\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-64\n\t\t\t\t\t\t\t\t\t\t// Only check objects and functions for thenability\n\t\t\t\t\t\t\t\t\t\t( typeof returned === \"object\" ||\n\t\t\t\t\t\t\t\t\t\t\ttypeof returned === \"function\" ) &&\n\t\t\t\t\t\t\t\t\t\treturned.then;\n\n\t\t\t\t\t\t\t\t\t// Handle a returned thenable\n\t\t\t\t\t\t\t\t\tif ( isFunction( then ) ) {\n\n\t\t\t\t\t\t\t\t\t\t// Special processors (notify) just wait for resolution\n\t\t\t\t\t\t\t\t\t\tif ( special ) {\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special )\n\t\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t\t// Normal processors (resolve) also hook into progress\n\t\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t\t// ...and disregard older resolution values\n\t\t\t\t\t\t\t\t\t\t\tmaxDepth++;\n\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity,\n\t\t\t\t\t\t\t\t\t\t\t\t\tdeferred.notifyWith )\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Handle all other returned values\n\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\tif ( handler !== Identity ) {\n\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\targs = [ returned ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t// Process the value(s)\n\t\t\t\t\t\t\t\t\t\t// Default process is resolve\n\t\t\t\t\t\t\t\t\t\t( special || deferred.resolveWith )( that, args );\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\n\t\t\t\t\t\t\t\t// Only normal processors (resolve) catch and reject exceptions\n\t\t\t\t\t\t\t\tprocess = special ?\n\t\t\t\t\t\t\t\t\tmightThrow :\n\t\t\t\t\t\t\t\t\tfunction() {\n\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\tmightThrow();\n\t\t\t\t\t\t\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t\t\t\t\t\t\tif ( jQuery.Deferred.exceptionHook ) {\n\t\t\t\t\t\t\t\t\t\t\t\tjQuery.Deferred.exceptionHook( e,\n\t\t\t\t\t\t\t\t\t\t\t\t\tprocess.stackTrace );\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.4.1\n\t\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-61\n\t\t\t\t\t\t\t\t\t\t\t// Ignore post-resolution exceptions\n\t\t\t\t\t\t\t\t\t\t\tif ( depth + 1 >= maxDepth ) {\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\t\t\tif ( handler !== Thrower ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\t\t\targs = [ e ];\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\tdeferred.rejectWith( that, args );\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.1\n\t\t\t\t\t\t\t// https://promisesaplus.com/#point-57\n\t\t\t\t\t\t\t// Re-resolve promises immediately to dodge false rejection from\n\t\t\t\t\t\t\t// subsequent errors\n\t\t\t\t\t\t\tif ( depth ) {\n\t\t\t\t\t\t\t\tprocess();\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// Call an optional hook to record the stack, in case of exception\n\t\t\t\t\t\t\t\t// since it's otherwise lost when execution goes async\n\t\t\t\t\t\t\t\tif ( jQuery.Deferred.getStackHook ) {\n\t\t\t\t\t\t\t\t\tprocess.stackTrace = jQuery.Deferred.getStackHook();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\twindow.setTimeout( process );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\n\t\t\t\t\t\t// progress_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 0 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onProgress ) ?\n\t\t\t\t\t\t\t\t\tonProgress :\n\t\t\t\t\t\t\t\t\tIdentity,\n\t\t\t\t\t\t\t\tnewDefer.notifyWith\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// fulfilled_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 1 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onFulfilled ) ?\n\t\t\t\t\t\t\t\t\tonFulfilled :\n\t\t\t\t\t\t\t\t\tIdentity\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// rejected_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 2 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onRejected ) ?\n\t\t\t\t\t\t\t\t\tonRejected :\n\t\t\t\t\t\t\t\t\tThrower\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\n\t\t\t\t// Get a promise for this deferred\n\t\t\t\t// If obj is provided, the promise aspect is added to the object\n\t\t\t\tpromise: function( obj ) {\n\t\t\t\t\treturn obj != null ? jQuery.extend( obj, promise ) : promise;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdeferred = {};\n\n\t\t// Add list-specific methods\n\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\tvar list = tuple[ 2 ],\n\t\t\t\tstateString = tuple[ 5 ];\n\n\t\t\t// promise.progress = list.add\n\t\t\t// promise.done = list.add\n\t\t\t// promise.fail = list.add\n\t\t\tpromise[ tuple[ 1 ] ] = list.add;\n\n\t\t\t// Handle state\n\t\t\tif ( stateString ) {\n\t\t\t\tlist.add(\n\t\t\t\t\tfunction() {\n\n\t\t\t\t\t\t// state = \"resolved\" (i.e., fulfilled)\n\t\t\t\t\t\t// state = \"rejected\"\n\t\t\t\t\t\tstate = stateString;\n\t\t\t\t\t},\n\n\t\t\t\t\t// rejected_callbacks.disable\n\t\t\t\t\t// fulfilled_callbacks.disable\n\t\t\t\t\ttuples[ 3 - i ][ 2 ].disable,\n\n\t\t\t\t\t// rejected_handlers.disable\n\t\t\t\t\t// fulfilled_handlers.disable\n\t\t\t\t\ttuples[ 3 - i ][ 3 ].disable,\n\n\t\t\t\t\t// progress_callbacks.lock\n\t\t\t\t\ttuples[ 0 ][ 2 ].lock,\n\n\t\t\t\t\t// progress_handlers.lock\n\t\t\t\t\ttuples[ 0 ][ 3 ].lock\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// progress_handlers.fire\n\t\t\t// fulfilled_handlers.fire\n\t\t\t// rejected_handlers.fire\n\t\t\tlist.add( tuple[ 3 ].fire );\n\n\t\t\t// deferred.notify = function() { deferred.notifyWith(...) }\n\t\t\t// deferred.resolve = function() { deferred.resolveWith(...) }\n\t\t\t// deferred.reject = function() { deferred.rejectWith(...) }\n\t\t\tdeferred[ tuple[ 0 ] ] = function() {\n\t\t\t\tdeferred[ tuple[ 0 ] + \"With\" ]( this === deferred ? undefined : this, arguments );\n\t\t\t\treturn this;\n\t\t\t};\n\n\t\t\t// deferred.notifyWith = list.fireWith\n\t\t\t// deferred.resolveWith = list.fireWith\n\t\t\t// deferred.rejectWith = list.fireWith\n\t\t\tdeferred[ tuple[ 0 ] + \"With\" ] = list.fireWith;\n\t\t} );\n\n\t\t// Make the deferred a promise\n\t\tpromise.promise( deferred );\n\n\t\t// Call given func if any\n\t\tif ( func ) {\n\t\t\tfunc.call( deferred, deferred );\n\t\t}\n\n\t\t// All done!\n\t\treturn deferred;\n\t},\n\n\t// Deferred helper\n\twhen: function( singleValue ) {\n\t\tvar\n\n\t\t\t// count of uncompleted subordinates\n\t\t\tremaining = arguments.length,\n\n\t\t\t// count of unprocessed arguments\n\t\t\ti = remaining,\n\n\t\t\t// subordinate fulfillment data\n\t\t\tresolveContexts = Array( i ),\n\t\t\tresolveValues = slice.call( arguments ),\n\n\t\t\t// the master Deferred\n\t\t\tmaster = jQuery.Deferred(),\n\n\t\t\t// subordinate callback factory\n\t\t\tupdateFunc = function( i ) {\n\t\t\t\treturn function( value ) {\n\t\t\t\t\tresolveContexts[ i ] = this;\n\t\t\t\t\tresolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;\n\t\t\t\t\tif ( !( --remaining ) ) {\n\t\t\t\t\t\tmaster.resolveWith( resolveContexts, resolveValues );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t};\n\n\t\t// Single- and empty arguments are adopted like Promise.resolve\n\t\tif ( remaining <= 1 ) {\n\t\t\tadoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject,\n\t\t\t\t!remaining );\n\n\t\t\t// Use .then() to unwrap secondary thenables (cf. gh-3000)\n\t\t\tif ( master.state() === \"pending\" ||\n\t\t\t\tisFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) {\n\n\t\t\t\treturn master.then();\n\t\t\t}\n\t\t}\n\n\t\t// Multiple arguments are aggregated like Promise.all array elements\n\t\twhile ( i-- ) {\n\t\t\tadoptValue( resolveValues[ i ], updateFunc( i ), master.reject );\n\t\t}\n\n\t\treturn master.promise();\n\t}\n} );\n\n\n// These usually indicate a programmer mistake during development,\n// warn about them ASAP rather than swallowing them by default.\nvar rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;\n\njQuery.Deferred.exceptionHook = function( error, stack ) {\n\n\t// Support: IE 8 - 9 only\n\t// Console exists when dev tools are open, which can happen at any time\n\tif ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) {\n\t\twindow.console.warn( \"jQuery.Deferred exception: \" + error.message, error.stack, stack );\n\t}\n};\n\n\n\n\njQuery.readyException = function( error ) {\n\twindow.setTimeout( function() {\n\t\tthrow error;\n\t} );\n};\n\n\n\n\n// The deferred used on DOM ready\nvar readyList = jQuery.Deferred();\n\njQuery.fn.ready = function( fn ) {\n\n\treadyList\n\t\t.then( fn )\n\n\t\t// Wrap jQuery.readyException in a function so that the lookup\n\t\t// happens at the time of error handling instead of callback\n\t\t// registration.\n\t\t.catch( function( error ) {\n\t\t\tjQuery.readyException( error );\n\t\t} );\n\n\treturn this;\n};\n\njQuery.extend( {\n\n\t// Is the DOM ready to be used? Set to true once it occurs.\n\tisReady: false,\n\n\t// A counter to track how many items to wait for before\n\t// the ready event fires. See #6781\n\treadyWait: 1,\n\n\t// Handle when the DOM is ready\n\tready: function( wait ) {\n\n\t\t// Abort if there are pending holds or we're already ready\n\t\tif ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Remember that the DOM is ready\n\t\tjQuery.isReady = true;\n\n\t\t// If a normal DOM Ready event fired, decrement, and wait if need be\n\t\tif ( wait !== true && --jQuery.readyWait > 0 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If there are functions bound, to execute\n\t\treadyList.resolveWith( document, [ jQuery ] );\n\t}\n} );\n\njQuery.ready.then = readyList.then;\n\n// The ready event handler and self cleanup method\nfunction completed() {\n\tdocument.removeEventListener( \"DOMContentLoaded\", completed );\n\twindow.removeEventListener( \"load\", completed );\n\tjQuery.ready();\n}\n\n// Catch cases where $(document).ready() is called\n// after the browser event has already occurred.\n// Support: IE <=9 - 10 only\n// Older IE sometimes signals \"interactive\" too soon\nif ( document.readyState === \"complete\" ||\n\t( document.readyState !== \"loading\" && !document.documentElement.doScroll ) ) {\n\n\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\twindow.setTimeout( jQuery.ready );\n\n} else {\n\n\t// Use the handy event callback\n\tdocument.addEventListener( \"DOMContentLoaded\", completed );\n\n\t// A fallback to window.onload, that will always work\n\twindow.addEventListener( \"load\", completed );\n}\n\n\n\n\n// Multifunctional method to get and set values of a collection\n// The value/s can optionally be executed if it's a function\nvar access = function( elems, fn, key, value, chainable, emptyGet, raw ) {\n\tvar i = 0,\n\t\tlen = elems.length,\n\t\tbulk = key == null;\n\n\t// Sets many values\n\tif ( toType( key ) === \"object\" ) {\n\t\tchainable = true;\n\t\tfor ( i in key ) {\n\t\t\taccess( elems, fn, i, key[ i ], true, emptyGet, raw );\n\t\t}\n\n\t// Sets one value\n\t} else if ( value !== undefined ) {\n\t\tchainable = true;\n\n\t\tif ( !isFunction( value ) ) {\n\t\t\traw = true;\n\t\t}\n\n\t\tif ( bulk ) {\n\n\t\t\t// Bulk operations run against the entire set\n\t\t\tif ( raw ) {\n\t\t\t\tfn.call( elems, value );\n\t\t\t\tfn = null;\n\n\t\t\t// ...except when executing function values\n\t\t\t} else {\n\t\t\t\tbulk = fn;\n\t\t\t\tfn = function( elem, key, value ) {\n\t\t\t\t\treturn bulk.call( jQuery( elem ), value );\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tif ( fn ) {\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\tfn(\n\t\t\t\t\telems[ i ], key, raw ?\n\t\t\t\t\tvalue :\n\t\t\t\t\tvalue.call( elems[ i ], i, fn( elems[ i ], key ) )\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( chainable ) {\n\t\treturn elems;\n\t}\n\n\t// Gets\n\tif ( bulk ) {\n\t\treturn fn.call( elems );\n\t}\n\n\treturn len ? fn( elems[ 0 ], key ) : emptyGet;\n};\n\n\n// Matches dashed string for camelizing\nvar rmsPrefix = /^-ms-/,\n\trdashAlpha = /-([a-z])/g;\n\n// Used by camelCase as callback to replace()\nfunction fcamelCase( all, letter ) {\n\treturn letter.toUpperCase();\n}\n\n// Convert dashed to camelCase; used by the css and data modules\n// Support: IE <=9 - 11, Edge 12 - 15\n// Microsoft forgot to hump their vendor prefix (#9572)\nfunction camelCase( string ) {\n\treturn string.replace( rmsPrefix, \"ms-\" ).replace( rdashAlpha, fcamelCase );\n}\nvar acceptData = function( owner ) {\n\n\t// Accepts only:\n\t// - Node\n\t// - Node.ELEMENT_NODE\n\t// - Node.DOCUMENT_NODE\n\t// - Object\n\t// - Any\n\treturn owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );\n};\n\n\n\n\nfunction Data() {\n\tthis.expando = jQuery.expando + Data.uid++;\n}\n\nData.uid = 1;\n\nData.prototype = {\n\n\tcache: function( owner ) {\n\n\t\t// Check if the owner object already has a cache\n\t\tvar value = owner[ this.expando ];\n\n\t\t// If not, create one\n\t\tif ( !value ) {\n\t\t\tvalue = {};\n\n\t\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t\t// but we should not, see #8335.\n\t\t\t// Always return an empty object.\n\t\t\tif ( acceptData( owner ) ) {\n\n\t\t\t\t// If it is a node unlikely to be stringify-ed or looped over\n\t\t\t\t// use plain assignment\n\t\t\t\tif ( owner.nodeType ) {\n\t\t\t\t\towner[ this.expando ] = value;\n\n\t\t\t\t// Otherwise secure it in a non-enumerable property\n\t\t\t\t// configurable must be true to allow the property to be\n\t\t\t\t// deleted when data is removed\n\t\t\t\t} else {\n\t\t\t\t\tObject.defineProperty( owner, this.expando, {\n\t\t\t\t\t\tvalue: value,\n\t\t\t\t\t\tconfigurable: true\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn value;\n\t},\n\tset: function( owner, data, value ) {\n\t\tvar prop,\n\t\t\tcache = this.cache( owner );\n\n\t\t// Handle: [ owner, key, value ] args\n\t\t// Always use camelCase key (gh-2257)\n\t\tif ( typeof data === \"string\" ) {\n\t\t\tcache[ camelCase( data ) ] = value;\n\n\t\t// Handle: [ owner, { properties } ] args\n\t\t} else {\n\n\t\t\t// Copy the properties one-by-one to the cache object\n\t\t\tfor ( prop in data ) {\n\t\t\t\tcache[ camelCase( prop ) ] = data[ prop ];\n\t\t\t}\n\t\t}\n\t\treturn cache;\n\t},\n\tget: function( owner, key ) {\n\t\treturn key === undefined ?\n\t\t\tthis.cache( owner ) :\n\n\t\t\t// Always use camelCase key (gh-2257)\n\t\t\towner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ];\n\t},\n\taccess: function( owner, key, value ) {\n\n\t\t// In cases where either:\n\t\t//\n\t\t// 1. No key was specified\n\t\t// 2. A string key was specified, but no value provided\n\t\t//\n\t\t// Take the \"read\" path and allow the get method to determine\n\t\t// which value to return, respectively either:\n\t\t//\n\t\t// 1. The entire cache object\n\t\t// 2. The data stored at the key\n\t\t//\n\t\tif ( key === undefined ||\n\t\t\t\t( ( key && typeof key === \"string\" ) && value === undefined ) ) {\n\n\t\t\treturn this.get( owner, key );\n\t\t}\n\n\t\t// When the key is not a string, or both a key and value\n\t\t// are specified, set or extend (existing objects) with either:\n\t\t//\n\t\t// 1. An object of properties\n\t\t// 2. A key and value\n\t\t//\n\t\tthis.set( owner, key, value );\n\n\t\t// Since the \"set\" path can have two possible entry points\n\t\t// return the expected data based on which path was taken[*]\n\t\treturn value !== undefined ? value : key;\n\t},\n\tremove: function( owner, key ) {\n\t\tvar i,\n\t\t\tcache = owner[ this.expando ];\n\n\t\tif ( cache === undefined ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( key !== undefined ) {\n\n\t\t\t// Support array or space separated string of keys\n\t\t\tif ( Array.isArray( key ) ) {\n\n\t\t\t\t// If key is an array of keys...\n\t\t\t\t// We always set camelCase keys, so remove that.\n\t\t\t\tkey = key.map( camelCase );\n\t\t\t} else {\n\t\t\t\tkey = camelCase( key );\n\n\t\t\t\t// If a key with the spaces exists, use it.\n\t\t\t\t// Otherwise, create an array by matching non-whitespace\n\t\t\t\tkey = key in cache ?\n\t\t\t\t\t[ key ] :\n\t\t\t\t\t( key.match( rnothtmlwhite ) || [] );\n\t\t\t}\n\n\t\t\ti = key.length;\n\n\t\t\twhile ( i-- ) {\n\t\t\t\tdelete cache[ key[ i ] ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove the expando if there's no more data\n\t\tif ( key === undefined || jQuery.isEmptyObject( cache ) ) {\n\n\t\t\t// Support: Chrome <=35 - 45\n\t\t\t// Webkit & Blink performance suffers when deleting properties\n\t\t\t// from DOM nodes, so set to undefined instead\n\t\t\t// https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)\n\t\t\tif ( owner.nodeType ) {\n\t\t\t\towner[ this.expando ] = undefined;\n\t\t\t} else {\n\t\t\t\tdelete owner[ this.expando ];\n\t\t\t}\n\t\t}\n\t},\n\thasData: function( owner ) {\n\t\tvar cache = owner[ this.expando ];\n\t\treturn cache !== undefined && !jQuery.isEmptyObject( cache );\n\t}\n};\nvar dataPriv = new Data();\n\nvar dataUser = new Data();\n\n\n\n//\tImplementation Summary\n//\n//\t1. Enforce API surface and semantic compatibility with 1.9.x branch\n//\t2. Improve the module's maintainability by reducing the storage\n//\t\tpaths to a single mechanism.\n//\t3. Use the same single mechanism to support \"private\" and \"user\" data.\n//\t4. _Never_ expose \"private\" data to user code (TODO: Drop _data, _removeData)\n//\t5. Avoid exposing implementation details on user objects (eg. expando properties)\n//\t6. Provide a clear path for implementation upgrade to WeakMap in 2014\n\nvar rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\n\trmultiDash = /[A-Z]/g;\n\nfunction getData( data ) {\n\tif ( data === \"true\" ) {\n\t\treturn true;\n\t}\n\n\tif ( data === \"false\" ) {\n\t\treturn false;\n\t}\n\n\tif ( data === \"null\" ) {\n\t\treturn null;\n\t}\n\n\t// Only convert to a number if it doesn't change the string\n\tif ( data === +data + \"\" ) {\n\t\treturn +data;\n\t}\n\n\tif ( rbrace.test( data ) ) {\n\t\treturn JSON.parse( data );\n\t}\n\n\treturn data;\n}\n\nfunction dataAttr( elem, key, data ) {\n\tvar name;\n\n\t// If nothing was found internally, try to fetch any\n\t// data from the HTML5 data-* attribute\n\tif ( data === undefined && elem.nodeType === 1 ) {\n\t\tname = \"data-\" + key.replace( rmultiDash, \"-$&\" ).toLowerCase();\n\t\tdata = elem.getAttribute( name );\n\n\t\tif ( typeof data === \"string\" ) {\n\t\t\ttry {\n\t\t\t\tdata = getData( data );\n\t\t\t} catch ( e ) {}\n\n\t\t\t// Make sure we set the data so it isn't changed later\n\t\t\tdataUser.set( elem, key, data );\n\t\t} else {\n\t\t\tdata = undefined;\n\t\t}\n\t}\n\treturn data;\n}\n\njQuery.extend( {\n\thasData: function( elem ) {\n\t\treturn dataUser.hasData( elem ) || dataPriv.hasData( elem );\n\t},\n\n\tdata: function( elem, name, data ) {\n\t\treturn dataUser.access( elem, name, data );\n\t},\n\n\tremoveData: function( elem, name ) {\n\t\tdataUser.remove( elem, name );\n\t},\n\n\t// TODO: Now that all calls to _data and _removeData have been replaced\n\t// with direct calls to dataPriv methods, these can be deprecated.\n\t_data: function( elem, name, data ) {\n\t\treturn dataPriv.access( elem, name, data );\n\t},\n\n\t_removeData: function( elem, name ) {\n\t\tdataPriv.remove( elem, name );\n\t}\n} );\n\njQuery.fn.extend( {\n\tdata: function( key, value ) {\n\t\tvar i, name, data,\n\t\t\telem = this[ 0 ],\n\t\t\tattrs = elem && elem.attributes;\n\n\t\t// Gets all values\n\t\tif ( key === undefined ) {\n\t\t\tif ( this.length ) {\n\t\t\t\tdata = dataUser.get( elem );\n\n\t\t\t\tif ( elem.nodeType === 1 && !dataPriv.get( elem, \"hasDataAttrs\" ) ) {\n\t\t\t\t\ti = attrs.length;\n\t\t\t\t\twhile ( i-- ) {\n\n\t\t\t\t\t\t// Support: IE 11 only\n\t\t\t\t\t\t// The attrs elements can be null (#14894)\n\t\t\t\t\t\tif ( attrs[ i ] ) {\n\t\t\t\t\t\t\tname = attrs[ i ].name;\n\t\t\t\t\t\t\tif ( name.indexOf( \"data-\" ) === 0 ) {\n\t\t\t\t\t\t\t\tname = camelCase( name.slice( 5 ) );\n\t\t\t\t\t\t\t\tdataAttr( elem, name, data[ name ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.set( elem, \"hasDataAttrs\", true );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn data;\n\t\t}\n\n\t\t// Sets multiple values\n\t\tif ( typeof key === \"object\" ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tdataUser.set( this, key );\n\t\t\t} );\n\t\t}\n\n\t\treturn access( this, function( value ) {\n\t\t\tvar data;\n\n\t\t\t// The calling jQuery object (element matches) is not empty\n\t\t\t// (and therefore has an element appears at this[ 0 ]) and the\n\t\t\t// `value` parameter was not undefined. An empty jQuery object\n\t\t\t// will result in `undefined` for elem = this[ 0 ] which will\n\t\t\t// throw an exception if an attempt to read a data cache is made.\n\t\t\tif ( elem && value === undefined ) {\n\n\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t// The key will always be camelCased in Data\n\t\t\t\tdata = dataUser.get( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// Attempt to \"discover\" the data in\n\t\t\t\t// HTML5 custom data-* attrs\n\t\t\t\tdata = dataAttr( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// We tried really hard, but the data doesn't exist.\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Set the data...\n\t\t\tthis.each( function() {\n\n\t\t\t\t// We always store the camelCased key\n\t\t\t\tdataUser.set( this, key, value );\n\t\t\t} );\n\t\t}, null, value, arguments.length > 1, null, true );\n\t},\n\n\tremoveData: function( key ) {\n\t\treturn this.each( function() {\n\t\t\tdataUser.remove( this, key );\n\t\t} );\n\t}\n} );\n\n\njQuery.extend( {\n\tqueue: function( elem, type, data ) {\n\t\tvar queue;\n\n\t\tif ( elem ) {\n\t\t\ttype = ( type || \"fx\" ) + \"queue\";\n\t\t\tqueue = dataPriv.get( elem, type );\n\n\t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\n\t\t\tif ( data ) {\n\t\t\t\tif ( !queue || Array.isArray( data ) ) {\n\t\t\t\t\tqueue = dataPriv.access( elem, type, jQuery.makeArray( data ) );\n\t\t\t\t} else {\n\t\t\t\t\tqueue.push( data );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn queue || [];\n\t\t}\n\t},\n\n\tdequeue: function( elem, type ) {\n\t\ttype = type || \"fx\";\n\n\t\tvar queue = jQuery.queue( elem, type ),\n\t\t\tstartLength = queue.length,\n\t\t\tfn = queue.shift(),\n\t\t\thooks = jQuery._queueHooks( elem, type ),\n\t\t\tnext = function() {\n\t\t\t\tjQuery.dequeue( elem, type );\n\t\t\t};\n\n\t\t// If the fx queue is dequeued, always remove the progress sentinel\n\t\tif ( fn === \"inprogress\" ) {\n\t\t\tfn = queue.shift();\n\t\t\tstartLength--;\n\t\t}\n\n\t\tif ( fn ) {\n\n\t\t\t// Add a progress sentinel to prevent the fx queue from being\n\t\t\t// automatically dequeued\n\t\t\tif ( type === \"fx\" ) {\n\t\t\t\tqueue.unshift( \"inprogress\" );\n\t\t\t}\n\n\t\t\t// Clear up the last queue stop function\n\t\t\tdelete hooks.stop;\n\t\t\tfn.call( elem, next, hooks );\n\t\t}\n\n\t\tif ( !startLength && hooks ) {\n\t\t\thooks.empty.fire();\n\t\t}\n\t},\n\n\t// Not public - generate a queueHooks object, or return the current one\n\t_queueHooks: function( elem, type ) {\n\t\tvar key = type + \"queueHooks\";\n\t\treturn dataPriv.get( elem, key ) || dataPriv.access( elem, key, {\n\t\t\tempty: jQuery.Callbacks( \"once memory\" ).add( function() {\n\t\t\t\tdataPriv.remove( elem, [ type + \"queue\", key ] );\n\t\t\t} )\n\t\t} );\n\t}\n} );\n\njQuery.fn.extend( {\n\tqueue: function( type, data ) {\n\t\tvar setter = 2;\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tdata = type;\n\t\t\ttype = \"fx\";\n\t\t\tsetter--;\n\t\t}\n\n\t\tif ( arguments.length < setter ) {\n\t\t\treturn jQuery.queue( this[ 0 ], type );\n\t\t}\n\n\t\treturn data === undefined ?\n\t\t\tthis :\n\t\t\tthis.each( function() {\n\t\t\t\tvar queue = jQuery.queue( this, type, data );\n\n\t\t\t\t// Ensure a hooks for this queue\n\t\t\t\tjQuery._queueHooks( this, type );\n\n\t\t\t\tif ( type === \"fx\" && queue[ 0 ] !== \"inprogress\" ) {\n\t\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t\t}\n\t\t\t} );\n\t},\n\tdequeue: function( type ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.dequeue( this, type );\n\t\t} );\n\t},\n\tclearQueue: function( type ) {\n\t\treturn this.queue( type || \"fx\", [] );\n\t},\n\n\t// Get a promise resolved when queues of a certain type\n\t// are emptied (fx is the type by default)\n\tpromise: function( type, obj ) {\n\t\tvar tmp,\n\t\t\tcount = 1,\n\t\t\tdefer = jQuery.Deferred(),\n\t\t\telements = this,\n\t\t\ti = this.length,\n\t\t\tresolve = function() {\n\t\t\t\tif ( !( --count ) ) {\n\t\t\t\t\tdefer.resolveWith( elements, [ elements ] );\n\t\t\t\t}\n\t\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tobj = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\ttype = type || \"fx\";\n\n\t\twhile ( i-- ) {\n\t\t\ttmp = dataPriv.get( elements[ i ], type + \"queueHooks\" );\n\t\t\tif ( tmp && tmp.empty ) {\n\t\t\t\tcount++;\n\t\t\t\ttmp.empty.add( resolve );\n\t\t\t}\n\t\t}\n\t\tresolve();\n\t\treturn defer.promise( obj );\n\t}\n} );\nvar pnum = ( /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/ ).source;\n\nvar rcssNum = new RegExp( \"^(?:([+-])=|)(\" + pnum + \")([a-z%]*)$\", \"i\" );\n\n\nvar cssExpand = [ \"Top\", \"Right\", \"Bottom\", \"Left\" ];\n\nvar documentElement = document.documentElement;\n\n\n\n\tvar isAttached = function( elem ) {\n\t\t\treturn jQuery.contains( elem.ownerDocument, elem );\n\t\t},\n\t\tcomposed = { composed: true };\n\n\t// Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only\n\t// Check attachment across shadow DOM boundaries when possible (gh-3504)\n\t// Support: iOS 10.0-10.2 only\n\t// Early iOS 10 versions support `attachShadow` but not `getRootNode`,\n\t// leading to errors. We need to check for `getRootNode`.\n\tif ( documentElement.getRootNode ) {\n\t\tisAttached = function( elem ) {\n\t\t\treturn jQuery.contains( elem.ownerDocument, elem ) ||\n\t\t\t\telem.getRootNode( composed ) === elem.ownerDocument;\n\t\t};\n\t}\nvar isHiddenWithinTree = function( elem, el ) {\n\n\t\t// isHiddenWithinTree might be called from jQuery#filter function;\n\t\t// in that case, element will be second argument\n\t\telem = el || elem;\n\n\t\t// Inline style trumps all\n\t\treturn elem.style.display === \"none\" ||\n\t\t\telem.style.display === \"\" &&\n\n\t\t\t// Otherwise, check computed style\n\t\t\t// Support: Firefox <=43 - 45\n\t\t\t// Disconnected elements can have computed display: none, so first confirm that elem is\n\t\t\t// in the document.\n\t\t\tisAttached( elem ) &&\n\n\t\t\tjQuery.css( elem, \"display\" ) === \"none\";\n\t};\n\nvar swap = function( elem, options, callback, args ) {\n\tvar ret, name,\n\t\told = {};\n\n\t// Remember the old values, and insert the new ones\n\tfor ( name in options ) {\n\t\told[ name ] = elem.style[ name ];\n\t\telem.style[ name ] = options[ name ];\n\t}\n\n\tret = callback.apply( elem, args || [] );\n\n\t// Revert the old values\n\tfor ( name in options ) {\n\t\telem.style[ name ] = old[ name ];\n\t}\n\n\treturn ret;\n};\n\n\n\n\nfunction adjustCSS( elem, prop, valueParts, tween ) {\n\tvar adjusted, scale,\n\t\tmaxIterations = 20,\n\t\tcurrentValue = tween ?\n\t\t\tfunction() {\n\t\t\t\treturn tween.cur();\n\t\t\t} :\n\t\t\tfunction() {\n\t\t\t\treturn jQuery.css( elem, prop, \"\" );\n\t\t\t},\n\t\tinitial = currentValue(),\n\t\tunit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" ),\n\n\t\t// Starting value computation is required for potential unit mismatches\n\t\tinitialInUnit = elem.nodeType &&\n\t\t\t( jQuery.cssNumber[ prop ] || unit !== \"px\" && +initial ) &&\n\t\t\trcssNum.exec( jQuery.css( elem, prop ) );\n\n\tif ( initialInUnit && initialInUnit[ 3 ] !== unit ) {\n\n\t\t// Support: Firefox <=54\n\t\t// Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144)\n\t\tinitial = initial / 2;\n\n\t\t// Trust units reported by jQuery.css\n\t\tunit = unit || initialInUnit[ 3 ];\n\n\t\t// Iteratively approximate from a nonzero starting point\n\t\tinitialInUnit = +initial || 1;\n\n\t\twhile ( maxIterations-- ) {\n\n\t\t\t// Evaluate and update our best guess (doubling guesses that zero out).\n\t\t\t// Finish if the scale equals or crosses 1 (making the old*new product non-positive).\n\t\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\t\t\tif ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) {\n\t\t\t\tmaxIterations = 0;\n\t\t\t}\n\t\t\tinitialInUnit = initialInUnit / scale;\n\n\t\t}\n\n\t\tinitialInUnit = initialInUnit * 2;\n\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\n\t\t// Make sure we update the tween properties later on\n\t\tvalueParts = valueParts || [];\n\t}\n\n\tif ( valueParts ) {\n\t\tinitialInUnit = +initialInUnit || +initial || 0;\n\n\t\t// Apply relative offset (+=/-=) if specified\n\t\tadjusted = valueParts[ 1 ] ?\n\t\t\tinitialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :\n\t\t\t+valueParts[ 2 ];\n\t\tif ( tween ) {\n\t\t\ttween.unit = unit;\n\t\t\ttween.start = initialInUnit;\n\t\t\ttween.end = adjusted;\n\t\t}\n\t}\n\treturn adjusted;\n}\n\n\nvar defaultDisplayMap = {};\n\nfunction getDefaultDisplay( elem ) {\n\tvar temp,\n\t\tdoc = elem.ownerDocument,\n\t\tnodeName = elem.nodeName,\n\t\tdisplay = defaultDisplayMap[ nodeName ];\n\n\tif ( display ) {\n\t\treturn display;\n\t}\n\n\ttemp = doc.body.appendChild( doc.createElement( nodeName ) );\n\tdisplay = jQuery.css( temp, \"display\" );\n\n\ttemp.parentNode.removeChild( temp );\n\n\tif ( display === \"none\" ) {\n\t\tdisplay = \"block\";\n\t}\n\tdefaultDisplayMap[ nodeName ] = display;\n\n\treturn display;\n}\n\nfunction showHide( elements, show ) {\n\tvar display, elem,\n\t\tvalues = [],\n\t\tindex = 0,\n\t\tlength = elements.length;\n\n\t// Determine new display value for elements that need to change\n\tfor ( ; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tdisplay = elem.style.display;\n\t\tif ( show ) {\n\n\t\t\t// Since we force visibility upon cascade-hidden elements, an immediate (and slow)\n\t\t\t// check is required in this first loop unless we have a nonempty display value (either\n\t\t\t// inline or about-to-be-restored)\n\t\t\tif ( display === \"none\" ) {\n\t\t\t\tvalues[ index ] = dataPriv.get( elem, \"display\" ) || null;\n\t\t\t\tif ( !values[ index ] ) {\n\t\t\t\t\telem.style.display = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( elem.style.display === \"\" && isHiddenWithinTree( elem ) ) {\n\t\t\t\tvalues[ index ] = getDefaultDisplay( elem );\n\t\t\t}\n\t\t} else {\n\t\t\tif ( display !== \"none\" ) {\n\t\t\t\tvalues[ index ] = \"none\";\n\n\t\t\t\t// Remember what we're overwriting\n\t\t\t\tdataPriv.set( elem, \"display\", display );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Set the display of the elements in a second loop to avoid constant reflow\n\tfor ( index = 0; index < length; index++ ) {\n\t\tif ( values[ index ] != null ) {\n\t\t\telements[ index ].style.display = values[ index ];\n\t\t}\n\t}\n\n\treturn elements;\n}\n\njQuery.fn.extend( {\n\tshow: function() {\n\t\treturn showHide( this, true );\n\t},\n\thide: function() {\n\t\treturn showHide( this );\n\t},\n\ttoggle: function( state ) {\n\t\tif ( typeof state === \"boolean\" ) {\n\t\t\treturn state ? this.show() : this.hide();\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tif ( isHiddenWithinTree( this ) ) {\n\t\t\t\tjQuery( this ).show();\n\t\t\t} else {\n\t\t\t\tjQuery( this ).hide();\n\t\t\t}\n\t\t} );\n\t}\n} );\nvar rcheckableType = ( /^(?:checkbox|radio)$/i );\n\nvar rtagName = ( /<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)/i );\n\nvar rscriptType = ( /^$|^module$|\\/(?:java|ecma)script/i );\n\n\n\n// We have to close these tags to support XHTML (#13200)\nvar wrapMap = {\n\n\t// Support: IE <=9 only\n\toption: [ 1, \"\" ],\n\n\t// XHTML parsers do not magically insert elements in the\n\t// same way that tag soup parsers do. So we cannot shorten\n\t// this by omitting or other required elements.\n\tthead: [ 1, \"\", \"
\" ],\n\tcol: [ 2, \"\", \"
\" ],\n\ttr: [ 2, \"\", \"
\" ],\n\ttd: [ 3, \"\", \"
\" ],\n\n\t_default: [ 0, \"\", \"\" ]\n};\n\n// Support: IE <=9 only\nwrapMap.optgroup = wrapMap.option;\n\nwrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\nwrapMap.th = wrapMap.td;\n\n\nfunction getAll( context, tag ) {\n\n\t// Support: IE <=9 - 11 only\n\t// Use typeof to avoid zero-argument method invocation on host objects (#15151)\n\tvar ret;\n\n\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\tret = context.getElementsByTagName( tag || \"*\" );\n\n\t} else if ( typeof context.querySelectorAll !== \"undefined\" ) {\n\t\tret = context.querySelectorAll( tag || \"*\" );\n\n\t} else {\n\t\tret = [];\n\t}\n\n\tif ( tag === undefined || tag && nodeName( context, tag ) ) {\n\t\treturn jQuery.merge( [ context ], ret );\n\t}\n\n\treturn ret;\n}\n\n\n// Mark scripts as having already been evaluated\nfunction setGlobalEval( elems, refElements ) {\n\tvar i = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\tdataPriv.set(\n\t\t\telems[ i ],\n\t\t\t\"globalEval\",\n\t\t\t!refElements || dataPriv.get( refElements[ i ], \"globalEval\" )\n\t\t);\n\t}\n}\n\n\nvar rhtml = /<|&#?\\w+;/;\n\nfunction buildFragment( elems, context, scripts, selection, ignored ) {\n\tvar elem, tmp, tag, wrap, attached, j,\n\t\tfragment = context.createDocumentFragment(),\n\t\tnodes = [],\n\t\ti = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\telem = elems[ i ];\n\n\t\tif ( elem || elem === 0 ) {\n\n\t\t\t// Add nodes directly\n\t\t\tif ( toType( elem ) === \"object\" ) {\n\n\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );\n\n\t\t\t// Convert non-html into a text node\n\t\t\t} else if ( !rhtml.test( elem ) ) {\n\t\t\t\tnodes.push( context.createTextNode( elem ) );\n\n\t\t\t// Convert html into DOM nodes\n\t\t\t} else {\n\t\t\t\ttmp = tmp || fragment.appendChild( context.createElement( \"div\" ) );\n\n\t\t\t\t// Deserialize a standard representation\n\t\t\t\ttag = ( rtagName.exec( elem ) || [ \"\", \"\" ] )[ 1 ].toLowerCase();\n\t\t\t\twrap = wrapMap[ tag ] || wrapMap._default;\n\t\t\t\ttmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ];\n\n\t\t\t\t// Descend through wrappers to the right content\n\t\t\t\tj = wrap[ 0 ];\n\t\t\t\twhile ( j-- ) {\n\t\t\t\t\ttmp = tmp.lastChild;\n\t\t\t\t}\n\n\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, tmp.childNodes );\n\n\t\t\t\t// Remember the top-level container\n\t\t\t\ttmp = fragment.firstChild;\n\n\t\t\t\t// Ensure the created nodes are orphaned (#12392)\n\t\t\t\ttmp.textContent = \"\";\n\t\t\t}\n\t\t}\n\t}\n\n\t// Remove wrapper from fragment\n\tfragment.textContent = \"\";\n\n\ti = 0;\n\twhile ( ( elem = nodes[ i++ ] ) ) {\n\n\t\t// Skip elements already in the context collection (trac-4087)\n\t\tif ( selection && jQuery.inArray( elem, selection ) > -1 ) {\n\t\t\tif ( ignored ) {\n\t\t\t\tignored.push( elem );\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tattached = isAttached( elem );\n\n\t\t// Append to fragment\n\t\ttmp = getAll( fragment.appendChild( elem ), \"script\" );\n\n\t\t// Preserve script evaluation history\n\t\tif ( attached ) {\n\t\t\tsetGlobalEval( tmp );\n\t\t}\n\n\t\t// Capture executables\n\t\tif ( scripts ) {\n\t\t\tj = 0;\n\t\t\twhile ( ( elem = tmp[ j++ ] ) ) {\n\t\t\t\tif ( rscriptType.test( elem.type || \"\" ) ) {\n\t\t\t\t\tscripts.push( elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn fragment;\n}\n\n\n( function() {\n\tvar fragment = document.createDocumentFragment(),\n\t\tdiv = fragment.appendChild( document.createElement( \"div\" ) ),\n\t\tinput = document.createElement( \"input\" );\n\n\t// Support: Android 4.0 - 4.3 only\n\t// Check state lost if the name is set (#11217)\n\t// Support: Windows Web Apps (WWA)\n\t// `name` and `type` must use .setAttribute for WWA (#14901)\n\tinput.setAttribute( \"type\", \"radio\" );\n\tinput.setAttribute( \"checked\", \"checked\" );\n\tinput.setAttribute( \"name\", \"t\" );\n\n\tdiv.appendChild( input );\n\n\t// Support: Android <=4.1 only\n\t// Older WebKit doesn't clone checked state correctly in fragments\n\tsupport.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;\n\n\t// Support: IE <=11 only\n\t// Make sure textarea (and checkbox) defaultValue is properly cloned\n\tdiv.innerHTML = \"\";\n\tsupport.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;\n} )();\n\n\nvar\n\trkeyEvent = /^key/,\n\trmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/,\n\trtypenamespace = /^([^.]*)(?:\\.(.+)|)/;\n\nfunction returnTrue() {\n\treturn true;\n}\n\nfunction returnFalse() {\n\treturn false;\n}\n\n// Support: IE <=9 - 11+\n// focus() and blur() are asynchronous, except when they are no-op.\n// So expect focus to be synchronous when the element is already active,\n// and blur to be synchronous when the element is not already active.\n// (focus and blur are always synchronous in other supported browsers,\n// this just defines when we can count on it).\nfunction expectSync( elem, type ) {\n\treturn ( elem === safeActiveElement() ) === ( type === \"focus\" );\n}\n\n// Support: IE <=9 only\n// Accessing document.activeElement can throw unexpectedly\n// https://bugs.jquery.com/ticket/13393\nfunction safeActiveElement() {\n\ttry {\n\t\treturn document.activeElement;\n\t} catch ( err ) { }\n}\n\nfunction on( elem, types, selector, data, fn, one ) {\n\tvar origFn, type;\n\n\t// Types can be a map of types/handlers\n\tif ( typeof types === \"object\" ) {\n\n\t\t// ( types-Object, selector, data )\n\t\tif ( typeof selector !== \"string\" ) {\n\n\t\t\t// ( types-Object, data )\n\t\t\tdata = data || selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tfor ( type in types ) {\n\t\t\ton( elem, type, selector, data, types[ type ], one );\n\t\t}\n\t\treturn elem;\n\t}\n\n\tif ( data == null && fn == null ) {\n\n\t\t// ( types, fn )\n\t\tfn = selector;\n\t\tdata = selector = undefined;\n\t} else if ( fn == null ) {\n\t\tif ( typeof selector === \"string\" ) {\n\n\t\t\t// ( types, selector, fn )\n\t\t\tfn = data;\n\t\t\tdata = undefined;\n\t\t} else {\n\n\t\t\t// ( types, data, fn )\n\t\t\tfn = data;\n\t\t\tdata = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t}\n\tif ( fn === false ) {\n\t\tfn = returnFalse;\n\t} else if ( !fn ) {\n\t\treturn elem;\n\t}\n\n\tif ( one === 1 ) {\n\t\torigFn = fn;\n\t\tfn = function( event ) {\n\n\t\t\t// Can use an empty set, since event contains the info\n\t\t\tjQuery().off( event );\n\t\t\treturn origFn.apply( this, arguments );\n\t\t};\n\n\t\t// Use same guid so caller can remove using origFn\n\t\tfn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );\n\t}\n\treturn elem.each( function() {\n\t\tjQuery.event.add( this, types, fn, data, selector );\n\t} );\n}\n\n/*\n * Helper functions for managing events -- not part of the public interface.\n * Props to Dean Edwards' addEvent library for many of the ideas.\n */\njQuery.event = {\n\n\tglobal: {},\n\n\tadd: function( elem, types, handler, data, selector ) {\n\n\t\tvar handleObjIn, eventHandle, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.get( elem );\n\n\t\t// Don't attach events to noData or text/comment nodes (but allow plain objects)\n\t\tif ( !elemData ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Caller can pass in an object of custom data in lieu of the handler\n\t\tif ( handler.handler ) {\n\t\t\thandleObjIn = handler;\n\t\t\thandler = handleObjIn.handler;\n\t\t\tselector = handleObjIn.selector;\n\t\t}\n\n\t\t// Ensure that invalid selectors throw exceptions at attach time\n\t\t// Evaluate against documentElement in case elem is a non-element node (e.g., document)\n\t\tif ( selector ) {\n\t\t\tjQuery.find.matchesSelector( documentElement, selector );\n\t\t}\n\n\t\t// Make sure that the handler has a unique ID, used to find/remove it later\n\t\tif ( !handler.guid ) {\n\t\t\thandler.guid = jQuery.guid++;\n\t\t}\n\n\t\t// Init the element's event structure and main handler, if this is the first\n\t\tif ( !( events = elemData.events ) ) {\n\t\t\tevents = elemData.events = {};\n\t\t}\n\t\tif ( !( eventHandle = elemData.handle ) ) {\n\t\t\teventHandle = elemData.handle = function( e ) {\n\n\t\t\t\t// Discard the second event of a jQuery.event.trigger() and\n\t\t\t\t// when an event is called after a page has unloaded\n\t\t\t\treturn typeof jQuery !== \"undefined\" && jQuery.event.triggered !== e.type ?\n\t\t\t\t\tjQuery.event.dispatch.apply( elem, arguments ) : undefined;\n\t\t\t};\n\t\t}\n\n\t\t// Handle multiple events separated by a space\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// There *must* be a type, no attaching namespace-only handlers\n\t\t\tif ( !type ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// If event changes its type, use the special event handlers for the changed type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// If selector defined, determine special event api type, otherwise given type\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\n\t\t\t// Update special based on newly reset type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// handleObj is passed to all event handlers\n\t\t\thandleObj = jQuery.extend( {\n\t\t\t\ttype: type,\n\t\t\t\torigType: origType,\n\t\t\t\tdata: data,\n\t\t\t\thandler: handler,\n\t\t\t\tguid: handler.guid,\n\t\t\t\tselector: selector,\n\t\t\t\tneedsContext: selector && jQuery.expr.match.needsContext.test( selector ),\n\t\t\t\tnamespace: namespaces.join( \".\" )\n\t\t\t}, handleObjIn );\n\n\t\t\t// Init the event handler queue if we're the first\n\t\t\tif ( !( handlers = events[ type ] ) ) {\n\t\t\t\thandlers = events[ type ] = [];\n\t\t\t\thandlers.delegateCount = 0;\n\n\t\t\t\t// Only use addEventListener if the special events handler returns false\n\t\t\t\tif ( !special.setup ||\n\t\t\t\t\tspecial.setup.call( elem, data, namespaces, eventHandle ) === false ) {\n\n\t\t\t\t\tif ( elem.addEventListener ) {\n\t\t\t\t\t\telem.addEventListener( type, eventHandle );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( special.add ) {\n\t\t\t\tspecial.add.call( elem, handleObj );\n\n\t\t\t\tif ( !handleObj.handler.guid ) {\n\t\t\t\t\thandleObj.handler.guid = handler.guid;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add to the element's handler list, delegates in front\n\t\t\tif ( selector ) {\n\t\t\t\thandlers.splice( handlers.delegateCount++, 0, handleObj );\n\t\t\t} else {\n\t\t\t\thandlers.push( handleObj );\n\t\t\t}\n\n\t\t\t// Keep track of which events have ever been used, for event optimization\n\t\t\tjQuery.event.global[ type ] = true;\n\t\t}\n\n\t},\n\n\t// Detach an event or set of events from an element\n\tremove: function( elem, types, handler, selector, mappedTypes ) {\n\n\t\tvar j, origCount, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.hasData( elem ) && dataPriv.get( elem );\n\n\t\tif ( !elemData || !( events = elemData.events ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Once for each type.namespace in types; type may be omitted\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// Unbind all events (on this namespace, if provided) for the element\n\t\t\tif ( !type ) {\n\t\t\t\tfor ( type in events ) {\n\t\t\t\t\tjQuery.event.remove( elem, type + types[ t ], handler, selector, true );\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\t\t\thandlers = events[ type ] || [];\n\t\t\ttmp = tmp[ 2 ] &&\n\t\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" );\n\n\t\t\t// Remove matching events\n\t\t\torigCount = j = handlers.length;\n\t\t\twhile ( j-- ) {\n\t\t\t\thandleObj = handlers[ j ];\n\n\t\t\t\tif ( ( mappedTypes || origType === handleObj.origType ) &&\n\t\t\t\t\t( !handler || handler.guid === handleObj.guid ) &&\n\t\t\t\t\t( !tmp || tmp.test( handleObj.namespace ) ) &&\n\t\t\t\t\t( !selector || selector === handleObj.selector ||\n\t\t\t\t\t\tselector === \"**\" && handleObj.selector ) ) {\n\t\t\t\t\thandlers.splice( j, 1 );\n\n\t\t\t\t\tif ( handleObj.selector ) {\n\t\t\t\t\t\thandlers.delegateCount--;\n\t\t\t\t\t}\n\t\t\t\t\tif ( special.remove ) {\n\t\t\t\t\t\tspecial.remove.call( elem, handleObj );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove generic event handler if we removed something and no more handlers exist\n\t\t\t// (avoids potential for endless recursion during removal of special event handlers)\n\t\t\tif ( origCount && !handlers.length ) {\n\t\t\t\tif ( !special.teardown ||\n\t\t\t\t\tspecial.teardown.call( elem, namespaces, elemData.handle ) === false ) {\n\n\t\t\t\t\tjQuery.removeEvent( elem, type, elemData.handle );\n\t\t\t\t}\n\n\t\t\t\tdelete events[ type ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove data and the expando if it's no longer used\n\t\tif ( jQuery.isEmptyObject( events ) ) {\n\t\t\tdataPriv.remove( elem, \"handle events\" );\n\t\t}\n\t},\n\n\tdispatch: function( nativeEvent ) {\n\n\t\t// Make a writable jQuery.Event from the native event object\n\t\tvar event = jQuery.event.fix( nativeEvent );\n\n\t\tvar i, j, ret, matched, handleObj, handlerQueue,\n\t\t\targs = new Array( arguments.length ),\n\t\t\thandlers = ( dataPriv.get( this, \"events\" ) || {} )[ event.type ] || [],\n\t\t\tspecial = jQuery.event.special[ event.type ] || {};\n\n\t\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\n\t\targs[ 0 ] = event;\n\n\t\tfor ( i = 1; i < arguments.length; i++ ) {\n\t\t\targs[ i ] = arguments[ i ];\n\t\t}\n\n\t\tevent.delegateTarget = this;\n\n\t\t// Call the preDispatch hook for the mapped type, and let it bail if desired\n\t\tif ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine handlers\n\t\thandlerQueue = jQuery.event.handlers.call( this, event, handlers );\n\n\t\t// Run delegates first; they may want to stop propagation beneath us\n\t\ti = 0;\n\t\twhile ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tevent.currentTarget = matched.elem;\n\n\t\t\tj = 0;\n\t\t\twhile ( ( handleObj = matched.handlers[ j++ ] ) &&\n\t\t\t\t!event.isImmediatePropagationStopped() ) {\n\n\t\t\t\t// If the event is namespaced, then each handler is only invoked if it is\n\t\t\t\t// specially universal or its namespaces are a superset of the event's.\n\t\t\t\tif ( !event.rnamespace || handleObj.namespace === false ||\n\t\t\t\t\tevent.rnamespace.test( handleObj.namespace ) ) {\n\n\t\t\t\t\tevent.handleObj = handleObj;\n\t\t\t\t\tevent.data = handleObj.data;\n\n\t\t\t\t\tret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||\n\t\t\t\t\t\thandleObj.handler ).apply( matched.elem, args );\n\n\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\tif ( ( event.result = ret ) === false ) {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Call the postDispatch hook for the mapped type\n\t\tif ( special.postDispatch ) {\n\t\t\tspecial.postDispatch.call( this, event );\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\thandlers: function( event, handlers ) {\n\t\tvar i, handleObj, sel, matchedHandlers, matchedSelectors,\n\t\t\thandlerQueue = [],\n\t\t\tdelegateCount = handlers.delegateCount,\n\t\t\tcur = event.target;\n\n\t\t// Find delegate handlers\n\t\tif ( delegateCount &&\n\n\t\t\t// Support: IE <=9\n\t\t\t// Black-hole SVG instance trees (trac-13180)\n\t\t\tcur.nodeType &&\n\n\t\t\t// Support: Firefox <=42\n\t\t\t// Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)\n\t\t\t// https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click\n\t\t\t// Support: IE 11 only\n\t\t\t// ...but not arrow key \"clicks\" of radio inputs, which can have `button` -1 (gh-2343)\n\t\t\t!( event.type === \"click\" && event.button >= 1 ) ) {\n\n\t\t\tfor ( ; cur !== this; cur = cur.parentNode || this ) {\n\n\t\t\t\t// Don't check non-elements (#13208)\n\t\t\t\t// Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)\n\t\t\t\tif ( cur.nodeType === 1 && !( event.type === \"click\" && cur.disabled === true ) ) {\n\t\t\t\t\tmatchedHandlers = [];\n\t\t\t\t\tmatchedSelectors = {};\n\t\t\t\t\tfor ( i = 0; i < delegateCount; i++ ) {\n\t\t\t\t\t\thandleObj = handlers[ i ];\n\n\t\t\t\t\t\t// Don't conflict with Object.prototype properties (#13203)\n\t\t\t\t\t\tsel = handleObj.selector + \" \";\n\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] === undefined ) {\n\t\t\t\t\t\t\tmatchedSelectors[ sel ] = handleObj.needsContext ?\n\t\t\t\t\t\t\t\tjQuery( sel, this ).index( cur ) > -1 :\n\t\t\t\t\t\t\t\tjQuery.find( sel, this, null, [ cur ] ).length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] ) {\n\t\t\t\t\t\t\tmatchedHandlers.push( handleObj );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( matchedHandlers.length ) {\n\t\t\t\t\t\thandlerQueue.push( { elem: cur, handlers: matchedHandlers } );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Add the remaining (directly-bound) handlers\n\t\tcur = this;\n\t\tif ( delegateCount < handlers.length ) {\n\t\t\thandlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } );\n\t\t}\n\n\t\treturn handlerQueue;\n\t},\n\n\taddProp: function( name, hook ) {\n\t\tObject.defineProperty( jQuery.Event.prototype, name, {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: true,\n\n\t\t\tget: isFunction( hook ) ?\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\t\treturn hook( this.originalEvent );\n\t\t\t\t\t}\n\t\t\t\t} :\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\t\treturn this.originalEvent[ name ];\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\tset: function( value ) {\n\t\t\t\tObject.defineProperty( this, name, {\n\t\t\t\t\tenumerable: true,\n\t\t\t\t\tconfigurable: true,\n\t\t\t\t\twritable: true,\n\t\t\t\t\tvalue: value\n\t\t\t\t} );\n\t\t\t}\n\t\t} );\n\t},\n\n\tfix: function( originalEvent ) {\n\t\treturn originalEvent[ jQuery.expando ] ?\n\t\t\toriginalEvent :\n\t\t\tnew jQuery.Event( originalEvent );\n\t},\n\n\tspecial: {\n\t\tload: {\n\n\t\t\t// Prevent triggered image.load events from bubbling to window.load\n\t\t\tnoBubble: true\n\t\t},\n\t\tclick: {\n\n\t\t\t// Utilize native event to ensure correct state for checkable inputs\n\t\t\tsetup: function( data ) {\n\n\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\tvar el = this || data;\n\n\t\t\t\t// Claim the first handler\n\t\t\t\tif ( rcheckableType.test( el.type ) &&\n\t\t\t\t\tel.click && nodeName( el, \"input\" ) ) {\n\n\t\t\t\t\t// dataPriv.set( el, \"click\", ... )\n\t\t\t\t\tleverageNative( el, \"click\", returnTrue );\n\t\t\t\t}\n\n\t\t\t\t// Return false to allow normal processing in the caller\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\ttrigger: function( data ) {\n\n\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\tvar el = this || data;\n\n\t\t\t\t// Force setup before triggering a click\n\t\t\t\tif ( rcheckableType.test( el.type ) &&\n\t\t\t\t\tel.click && nodeName( el, \"input\" ) ) {\n\n\t\t\t\t\tleverageNative( el, \"click\" );\n\t\t\t\t}\n\n\t\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\t\treturn true;\n\t\t\t},\n\n\t\t\t// For cross-browser consistency, suppress native .click() on links\n\t\t\t// Also prevent it if we're currently inside a leveraged native-event stack\n\t\t\t_default: function( event ) {\n\t\t\t\tvar target = event.target;\n\t\t\t\treturn rcheckableType.test( target.type ) &&\n\t\t\t\t\ttarget.click && nodeName( target, \"input\" ) &&\n\t\t\t\t\tdataPriv.get( target, \"click\" ) ||\n\t\t\t\t\tnodeName( target, \"a\" );\n\t\t\t}\n\t\t},\n\n\t\tbeforeunload: {\n\t\t\tpostDispatch: function( event ) {\n\n\t\t\t\t// Support: Firefox 20+\n\t\t\t\t// Firefox doesn't alert if the returnValue field is not set.\n\t\t\t\tif ( event.result !== undefined && event.originalEvent ) {\n\t\t\t\t\tevent.originalEvent.returnValue = event.result;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n};\n\n// Ensure the presence of an event listener that handles manually-triggered\n// synthetic events by interrupting progress until reinvoked in response to\n// *native* events that it fires directly, ensuring that state changes have\n// already occurred before other listeners are invoked.\nfunction leverageNative( el, type, expectSync ) {\n\n\t// Missing expectSync indicates a trigger call, which must force setup through jQuery.event.add\n\tif ( !expectSync ) {\n\t\tif ( dataPriv.get( el, type ) === undefined ) {\n\t\t\tjQuery.event.add( el, type, returnTrue );\n\t\t}\n\t\treturn;\n\t}\n\n\t// Register the controller as a special universal handler for all event namespaces\n\tdataPriv.set( el, type, false );\n\tjQuery.event.add( el, type, {\n\t\tnamespace: false,\n\t\thandler: function( event ) {\n\t\t\tvar notAsync, result,\n\t\t\t\tsaved = dataPriv.get( this, type );\n\n\t\t\tif ( ( event.isTrigger & 1 ) && this[ type ] ) {\n\n\t\t\t\t// Interrupt processing of the outer synthetic .trigger()ed event\n\t\t\t\t// Saved data should be false in such cases, but might be a leftover capture object\n\t\t\t\t// from an async native handler (gh-4350)\n\t\t\t\tif ( !saved.length ) {\n\n\t\t\t\t\t// Store arguments for use when handling the inner native event\n\t\t\t\t\t// There will always be at least one argument (an event object), so this array\n\t\t\t\t\t// will not be confused with a leftover capture object.\n\t\t\t\t\tsaved = slice.call( arguments );\n\t\t\t\t\tdataPriv.set( this, type, saved );\n\n\t\t\t\t\t// Trigger the native event and capture its result\n\t\t\t\t\t// Support: IE <=9 - 11+\n\t\t\t\t\t// focus() and blur() are asynchronous\n\t\t\t\t\tnotAsync = expectSync( this, type );\n\t\t\t\t\tthis[ type ]();\n\t\t\t\t\tresult = dataPriv.get( this, type );\n\t\t\t\t\tif ( saved !== result || notAsync ) {\n\t\t\t\t\t\tdataPriv.set( this, type, false );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tresult = {};\n\t\t\t\t\t}\n\t\t\t\t\tif ( saved !== result ) {\n\n\t\t\t\t\t\t// Cancel the outer synthetic event\n\t\t\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\treturn result.value;\n\t\t\t\t\t}\n\n\t\t\t\t// If this is an inner synthetic event for an event with a bubbling surrogate\n\t\t\t\t// (focus or blur), assume that the surrogate already propagated from triggering the\n\t\t\t\t// native event and prevent that from happening again here.\n\t\t\t\t// This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the\n\t\t\t\t// bubbling surrogate propagates *after* the non-bubbling base), but that seems\n\t\t\t\t// less bad than duplication.\n\t\t\t\t} else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) {\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t}\n\n\t\t\t// If this is a native event triggered above, everything is now in order\n\t\t\t// Fire an inner synthetic event with the original arguments\n\t\t\t} else if ( saved.length ) {\n\n\t\t\t\t// ...and capture the result\n\t\t\t\tdataPriv.set( this, type, {\n\t\t\t\t\tvalue: jQuery.event.trigger(\n\n\t\t\t\t\t\t// Support: IE <=9 - 11+\n\t\t\t\t\t\t// Extend with the prototype to reset the above stopImmediatePropagation()\n\t\t\t\t\t\tjQuery.extend( saved[ 0 ], jQuery.Event.prototype ),\n\t\t\t\t\t\tsaved.slice( 1 ),\n\t\t\t\t\t\tthis\n\t\t\t\t\t)\n\t\t\t\t} );\n\n\t\t\t\t// Abort handling of the native event\n\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t}\n\t\t}\n\t} );\n}\n\njQuery.removeEvent = function( elem, type, handle ) {\n\n\t// This \"if\" is needed for plain objects\n\tif ( elem.removeEventListener ) {\n\t\telem.removeEventListener( type, handle );\n\t}\n};\n\njQuery.Event = function( src, props ) {\n\n\t// Allow instantiation without the 'new' keyword\n\tif ( !( this instanceof jQuery.Event ) ) {\n\t\treturn new jQuery.Event( src, props );\n\t}\n\n\t// Event object\n\tif ( src && src.type ) {\n\t\tthis.originalEvent = src;\n\t\tthis.type = src.type;\n\n\t\t// Events bubbling up the document may have been marked as prevented\n\t\t// by a handler lower down the tree; reflect the correct value.\n\t\tthis.isDefaultPrevented = src.defaultPrevented ||\n\t\t\t\tsrc.defaultPrevented === undefined &&\n\n\t\t\t\t// Support: Android <=2.3 only\n\t\t\t\tsrc.returnValue === false ?\n\t\t\treturnTrue :\n\t\t\treturnFalse;\n\n\t\t// Create target properties\n\t\t// Support: Safari <=6 - 7 only\n\t\t// Target should not be a text node (#504, #13143)\n\t\tthis.target = ( src.target && src.target.nodeType === 3 ) ?\n\t\t\tsrc.target.parentNode :\n\t\t\tsrc.target;\n\n\t\tthis.currentTarget = src.currentTarget;\n\t\tthis.relatedTarget = src.relatedTarget;\n\n\t// Event type\n\t} else {\n\t\tthis.type = src;\n\t}\n\n\t// Put explicitly provided properties onto the event object\n\tif ( props ) {\n\t\tjQuery.extend( this, props );\n\t}\n\n\t// Create a timestamp if incoming event doesn't have one\n\tthis.timeStamp = src && src.timeStamp || Date.now();\n\n\t// Mark it as fixed\n\tthis[ jQuery.expando ] = true;\n};\n\n// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\njQuery.Event.prototype = {\n\tconstructor: jQuery.Event,\n\tisDefaultPrevented: returnFalse,\n\tisPropagationStopped: returnFalse,\n\tisImmediatePropagationStopped: returnFalse,\n\tisSimulated: false,\n\n\tpreventDefault: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isDefaultPrevented = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.preventDefault();\n\t\t}\n\t},\n\tstopPropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isPropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopPropagation();\n\t\t}\n\t},\n\tstopImmediatePropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isImmediatePropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopImmediatePropagation();\n\t\t}\n\n\t\tthis.stopPropagation();\n\t}\n};\n\n// Includes all common event props including KeyEvent and MouseEvent specific props\njQuery.each( {\n\taltKey: true,\n\tbubbles: true,\n\tcancelable: true,\n\tchangedTouches: true,\n\tctrlKey: true,\n\tdetail: true,\n\teventPhase: true,\n\tmetaKey: true,\n\tpageX: true,\n\tpageY: true,\n\tshiftKey: true,\n\tview: true,\n\t\"char\": true,\n\tcode: true,\n\tcharCode: true,\n\tkey: true,\n\tkeyCode: true,\n\tbutton: true,\n\tbuttons: true,\n\tclientX: true,\n\tclientY: true,\n\toffsetX: true,\n\toffsetY: true,\n\tpointerId: true,\n\tpointerType: true,\n\tscreenX: true,\n\tscreenY: true,\n\ttargetTouches: true,\n\ttoElement: true,\n\ttouches: true,\n\n\twhich: function( event ) {\n\t\tvar button = event.button;\n\n\t\t// Add which for key events\n\t\tif ( event.which == null && rkeyEvent.test( event.type ) ) {\n\t\t\treturn event.charCode != null ? event.charCode : event.keyCode;\n\t\t}\n\n\t\t// Add which for click: 1 === left; 2 === middle; 3 === right\n\t\tif ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) {\n\t\t\tif ( button & 1 ) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\tif ( button & 2 ) {\n\t\t\t\treturn 3;\n\t\t\t}\n\n\t\t\tif ( button & 4 ) {\n\t\t\t\treturn 2;\n\t\t\t}\n\n\t\t\treturn 0;\n\t\t}\n\n\t\treturn event.which;\n\t}\n}, jQuery.event.addProp );\n\njQuery.each( { focus: \"focusin\", blur: \"focusout\" }, function( type, delegateType ) {\n\tjQuery.event.special[ type ] = {\n\n\t\t// Utilize native event if possible so blur/focus sequence is correct\n\t\tsetup: function() {\n\n\t\t\t// Claim the first handler\n\t\t\t// dataPriv.set( this, \"focus\", ... )\n\t\t\t// dataPriv.set( this, \"blur\", ... )\n\t\t\tleverageNative( this, type, expectSync );\n\n\t\t\t// Return false to allow normal processing in the caller\n\t\t\treturn false;\n\t\t},\n\t\ttrigger: function() {\n\n\t\t\t// Force setup before trigger\n\t\t\tleverageNative( this, type );\n\n\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\treturn true;\n\t\t},\n\n\t\tdelegateType: delegateType\n\t};\n} );\n\n// Create mouseenter/leave events using mouseover/out and event-time checks\n// so that event delegation works in jQuery.\n// Do the same for pointerenter/pointerleave and pointerover/pointerout\n//\n// Support: Safari 7 only\n// Safari sends mouseenter too often; see:\n// https://bugs.chromium.org/p/chromium/issues/detail?id=470258\n// for the description of the bug (it existed in older Chrome versions as well).\njQuery.each( {\n\tmouseenter: \"mouseover\",\n\tmouseleave: \"mouseout\",\n\tpointerenter: \"pointerover\",\n\tpointerleave: \"pointerout\"\n}, function( orig, fix ) {\n\tjQuery.event.special[ orig ] = {\n\t\tdelegateType: fix,\n\t\tbindType: fix,\n\n\t\thandle: function( event ) {\n\t\t\tvar ret,\n\t\t\t\ttarget = this,\n\t\t\t\trelated = event.relatedTarget,\n\t\t\t\thandleObj = event.handleObj;\n\n\t\t\t// For mouseenter/leave call the handler if related is outside the target.\n\t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\n\t\t\tif ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {\n\t\t\t\tevent.type = handleObj.origType;\n\t\t\t\tret = handleObj.handler.apply( this, arguments );\n\t\t\t\tevent.type = fix;\n\t\t\t}\n\t\t\treturn ret;\n\t\t}\n\t};\n} );\n\njQuery.fn.extend( {\n\n\ton: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn );\n\t},\n\tone: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn, 1 );\n\t},\n\toff: function( types, selector, fn ) {\n\t\tvar handleObj, type;\n\t\tif ( types && types.preventDefault && types.handleObj ) {\n\n\t\t\t// ( event ) dispatched jQuery.Event\n\t\t\thandleObj = types.handleObj;\n\t\t\tjQuery( types.delegateTarget ).off(\n\t\t\t\thandleObj.namespace ?\n\t\t\t\t\thandleObj.origType + \".\" + handleObj.namespace :\n\t\t\t\t\thandleObj.origType,\n\t\t\t\thandleObj.selector,\n\t\t\t\thandleObj.handler\n\t\t\t);\n\t\t\treturn this;\n\t\t}\n\t\tif ( typeof types === \"object\" ) {\n\n\t\t\t// ( types-object [, selector] )\n\t\t\tfor ( type in types ) {\n\t\t\t\tthis.off( type, selector, types[ type ] );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\tif ( selector === false || typeof selector === \"function\" ) {\n\n\t\t\t// ( types [, fn] )\n\t\t\tfn = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tif ( fn === false ) {\n\t\t\tfn = returnFalse;\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.remove( this, types, fn, selector );\n\t\t} );\n\t}\n} );\n\n\nvar\n\n\t/* eslint-disable max-len */\n\n\t// See https://github.com/eslint/eslint/issues/3229\n\trxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)[^>]*)\\/>/gi,\n\n\t/* eslint-enable */\n\n\t// Support: IE <=10 - 11, Edge 12 - 13 only\n\t// In IE/Edge using regex groups here causes severe slowdowns.\n\t// See https://connect.microsoft.com/IE/feedback/details/1736512/\n\trnoInnerhtml = /\\s*$/g;\n\n// Prefer a tbody over its parent table for containing new rows\nfunction manipulationTarget( elem, content ) {\n\tif ( nodeName( elem, \"table\" ) &&\n\t\tnodeName( content.nodeType !== 11 ? content : content.firstChild, \"tr\" ) ) {\n\n\t\treturn jQuery( elem ).children( \"tbody\" )[ 0 ] || elem;\n\t}\n\n\treturn elem;\n}\n\n// Replace/restore the type attribute of script elements for safe DOM manipulation\nfunction disableScript( elem ) {\n\telem.type = ( elem.getAttribute( \"type\" ) !== null ) + \"/\" + elem.type;\n\treturn elem;\n}\nfunction restoreScript( elem ) {\n\tif ( ( elem.type || \"\" ).slice( 0, 5 ) === \"true/\" ) {\n\t\telem.type = elem.type.slice( 5 );\n\t} else {\n\t\telem.removeAttribute( \"type\" );\n\t}\n\n\treturn elem;\n}\n\nfunction cloneCopyEvent( src, dest ) {\n\tvar i, l, type, pdataOld, pdataCur, udataOld, udataCur, events;\n\n\tif ( dest.nodeType !== 1 ) {\n\t\treturn;\n\t}\n\n\t// 1. Copy private data: events, handlers, etc.\n\tif ( dataPriv.hasData( src ) ) {\n\t\tpdataOld = dataPriv.access( src );\n\t\tpdataCur = dataPriv.set( dest, pdataOld );\n\t\tevents = pdataOld.events;\n\n\t\tif ( events ) {\n\t\t\tdelete pdataCur.handle;\n\t\t\tpdataCur.events = {};\n\n\t\t\tfor ( type in events ) {\n\t\t\t\tfor ( i = 0, l = events[ type ].length; i < l; i++ ) {\n\t\t\t\t\tjQuery.event.add( dest, type, events[ type ][ i ] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// 2. Copy user data\n\tif ( dataUser.hasData( src ) ) {\n\t\tudataOld = dataUser.access( src );\n\t\tudataCur = jQuery.extend( {}, udataOld );\n\n\t\tdataUser.set( dest, udataCur );\n\t}\n}\n\n// Fix IE bugs, see support tests\nfunction fixInput( src, dest ) {\n\tvar nodeName = dest.nodeName.toLowerCase();\n\n\t// Fails to persist the checked state of a cloned checkbox or radio button.\n\tif ( nodeName === \"input\" && rcheckableType.test( src.type ) ) {\n\t\tdest.checked = src.checked;\n\n\t// Fails to return the selected option to the default selected state when cloning options\n\t} else if ( nodeName === \"input\" || nodeName === \"textarea\" ) {\n\t\tdest.defaultValue = src.defaultValue;\n\t}\n}\n\nfunction domManip( collection, args, callback, ignored ) {\n\n\t// Flatten any nested arrays\n\targs = concat.apply( [], args );\n\n\tvar fragment, first, scripts, hasScripts, node, doc,\n\t\ti = 0,\n\t\tl = collection.length,\n\t\tiNoClone = l - 1,\n\t\tvalue = args[ 0 ],\n\t\tvalueIsFunction = isFunction( value );\n\n\t// We can't cloneNode fragments that contain checked, in WebKit\n\tif ( valueIsFunction ||\n\t\t\t( l > 1 && typeof value === \"string\" &&\n\t\t\t\t!support.checkClone && rchecked.test( value ) ) ) {\n\t\treturn collection.each( function( index ) {\n\t\t\tvar self = collection.eq( index );\n\t\t\tif ( valueIsFunction ) {\n\t\t\t\targs[ 0 ] = value.call( this, index, self.html() );\n\t\t\t}\n\t\t\tdomManip( self, args, callback, ignored );\n\t\t} );\n\t}\n\n\tif ( l ) {\n\t\tfragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );\n\t\tfirst = fragment.firstChild;\n\n\t\tif ( fragment.childNodes.length === 1 ) {\n\t\t\tfragment = first;\n\t\t}\n\n\t\t// Require either new content or an interest in ignored elements to invoke the callback\n\t\tif ( first || ignored ) {\n\t\t\tscripts = jQuery.map( getAll( fragment, \"script\" ), disableScript );\n\t\t\thasScripts = scripts.length;\n\n\t\t\t// Use the original fragment for the last item\n\t\t\t// instead of the first because it can end up\n\t\t\t// being emptied incorrectly in certain situations (#8070).\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tnode = fragment;\n\n\t\t\t\tif ( i !== iNoClone ) {\n\t\t\t\t\tnode = jQuery.clone( node, true, true );\n\n\t\t\t\t\t// Keep references to cloned scripts for later restoration\n\t\t\t\t\tif ( hasScripts ) {\n\n\t\t\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\t\tjQuery.merge( scripts, getAll( node, \"script\" ) );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcallback.call( collection[ i ], node, i );\n\t\t\t}\n\n\t\t\tif ( hasScripts ) {\n\t\t\t\tdoc = scripts[ scripts.length - 1 ].ownerDocument;\n\n\t\t\t\t// Reenable scripts\n\t\t\t\tjQuery.map( scripts, restoreScript );\n\n\t\t\t\t// Evaluate executable scripts on first document insertion\n\t\t\t\tfor ( i = 0; i < hasScripts; i++ ) {\n\t\t\t\t\tnode = scripts[ i ];\n\t\t\t\t\tif ( rscriptType.test( node.type || \"\" ) &&\n\t\t\t\t\t\t!dataPriv.access( node, \"globalEval\" ) &&\n\t\t\t\t\t\tjQuery.contains( doc, node ) ) {\n\n\t\t\t\t\t\tif ( node.src && ( node.type || \"\" ).toLowerCase() !== \"module\" ) {\n\n\t\t\t\t\t\t\t// Optional AJAX dependency, but won't run scripts if not present\n\t\t\t\t\t\t\tif ( jQuery._evalUrl && !node.noModule ) {\n\t\t\t\t\t\t\t\tjQuery._evalUrl( node.src, {\n\t\t\t\t\t\t\t\t\tnonce: node.nonce || node.getAttribute( \"nonce\" )\n\t\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tDOMEval( node.textContent.replace( rcleanScript, \"\" ), node, doc );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn collection;\n}\n\nfunction remove( elem, selector, keepData ) {\n\tvar node,\n\t\tnodes = selector ? jQuery.filter( selector, elem ) : elem,\n\t\ti = 0;\n\n\tfor ( ; ( node = nodes[ i ] ) != null; i++ ) {\n\t\tif ( !keepData && node.nodeType === 1 ) {\n\t\t\tjQuery.cleanData( getAll( node ) );\n\t\t}\n\n\t\tif ( node.parentNode ) {\n\t\t\tif ( keepData && isAttached( node ) ) {\n\t\t\t\tsetGlobalEval( getAll( node, \"script\" ) );\n\t\t\t}\n\t\t\tnode.parentNode.removeChild( node );\n\t\t}\n\t}\n\n\treturn elem;\n}\n\njQuery.extend( {\n\thtmlPrefilter: function( html ) {\n\t\treturn html.replace( rxhtmlTag, \"<$1>\" );\n\t},\n\n\tclone: function( elem, dataAndEvents, deepDataAndEvents ) {\n\t\tvar i, l, srcElements, destElements,\n\t\t\tclone = elem.cloneNode( true ),\n\t\t\tinPage = isAttached( elem );\n\n\t\t// Fix IE cloning issues\n\t\tif ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&\n\t\t\t\t!jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2\n\t\t\tdestElements = getAll( clone );\n\t\t\tsrcElements = getAll( elem );\n\n\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\tfixInput( srcElements[ i ], destElements[ i ] );\n\t\t\t}\n\t\t}\n\n\t\t// Copy the events from the original to the clone\n\t\tif ( dataAndEvents ) {\n\t\t\tif ( deepDataAndEvents ) {\n\t\t\t\tsrcElements = srcElements || getAll( elem );\n\t\t\t\tdestElements = destElements || getAll( clone );\n\n\t\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\t\tcloneCopyEvent( srcElements[ i ], destElements[ i ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcloneCopyEvent( elem, clone );\n\t\t\t}\n\t\t}\n\n\t\t// Preserve script evaluation history\n\t\tdestElements = getAll( clone, \"script\" );\n\t\tif ( destElements.length > 0 ) {\n\t\t\tsetGlobalEval( destElements, !inPage && getAll( elem, \"script\" ) );\n\t\t}\n\n\t\t// Return the cloned set\n\t\treturn clone;\n\t},\n\n\tcleanData: function( elems ) {\n\t\tvar data, elem, type,\n\t\t\tspecial = jQuery.event.special,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {\n\t\t\tif ( acceptData( elem ) ) {\n\t\t\t\tif ( ( data = elem[ dataPriv.expando ] ) ) {\n\t\t\t\t\tif ( data.events ) {\n\t\t\t\t\t\tfor ( type in data.events ) {\n\t\t\t\t\t\t\tif ( special[ type ] ) {\n\t\t\t\t\t\t\t\tjQuery.event.remove( elem, type );\n\n\t\t\t\t\t\t\t// This is a shortcut to avoid jQuery.event.remove's overhead\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tjQuery.removeEvent( elem, type, data.handle );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataPriv.expando ] = undefined;\n\t\t\t\t}\n\t\t\t\tif ( elem[ dataUser.expando ] ) {\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataUser.expando ] = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n} );\n\njQuery.fn.extend( {\n\tdetach: function( selector ) {\n\t\treturn remove( this, selector, true );\n\t},\n\n\tremove: function( selector ) {\n\t\treturn remove( this, selector );\n\t},\n\n\ttext: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\treturn value === undefined ?\n\t\t\t\tjQuery.text( this ) :\n\t\t\t\tthis.empty().each( function() {\n\t\t\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\t\t\tthis.textContent = value;\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t}, null, value, arguments.length );\n\t},\n\n\tappend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.appendChild( elem );\n\t\t\t}\n\t\t} );\n\t},\n\n\tprepend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.insertBefore( elem, target.firstChild );\n\t\t\t}\n\t\t} );\n\t},\n\n\tbefore: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this );\n\t\t\t}\n\t\t} );\n\t},\n\n\tafter: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this.nextSibling );\n\t\t\t}\n\t\t} );\n\t},\n\n\tempty: function() {\n\t\tvar elem,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = this[ i ] ) != null; i++ ) {\n\t\t\tif ( elem.nodeType === 1 ) {\n\n\t\t\t\t// Prevent memory leaks\n\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\n\t\t\t\t// Remove any remaining nodes\n\t\t\t\telem.textContent = \"\";\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tclone: function( dataAndEvents, deepDataAndEvents ) {\n\t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n\t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n\n\t\treturn this.map( function() {\n\t\t\treturn jQuery.clone( this, dataAndEvents, deepDataAndEvents );\n\t\t} );\n\t},\n\n\thtml: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\tvar elem = this[ 0 ] || {},\n\t\t\t\ti = 0,\n\t\t\t\tl = this.length;\n\n\t\t\tif ( value === undefined && elem.nodeType === 1 ) {\n\t\t\t\treturn elem.innerHTML;\n\t\t\t}\n\n\t\t\t// See if we can take a shortcut and just use innerHTML\n\t\t\tif ( typeof value === \"string\" && !rnoInnerhtml.test( value ) &&\n\t\t\t\t!wrapMap[ ( rtagName.exec( value ) || [ \"\", \"\" ] )[ 1 ].toLowerCase() ] ) {\n\n\t\t\t\tvalue = jQuery.htmlPrefilter( value );\n\n\t\t\t\ttry {\n\t\t\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\t\t\telem = this[ i ] || {};\n\n\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\t\t\t\t\t\t\telem.innerHTML = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\telem = 0;\n\n\t\t\t\t// If using innerHTML throws an exception, use the fallback method\n\t\t\t\t} catch ( e ) {}\n\t\t\t}\n\n\t\t\tif ( elem ) {\n\t\t\t\tthis.empty().append( value );\n\t\t\t}\n\t\t}, null, value, arguments.length );\n\t},\n\n\treplaceWith: function() {\n\t\tvar ignored = [];\n\n\t\t// Make the changes, replacing each non-ignored context element with the new content\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tvar parent = this.parentNode;\n\n\t\t\tif ( jQuery.inArray( this, ignored ) < 0 ) {\n\t\t\t\tjQuery.cleanData( getAll( this ) );\n\t\t\t\tif ( parent ) {\n\t\t\t\t\tparent.replaceChild( elem, this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Force callback invocation\n\t\t}, ignored );\n\t}\n} );\n\njQuery.each( {\n\tappendTo: \"append\",\n\tprependTo: \"prepend\",\n\tinsertBefore: \"before\",\n\tinsertAfter: \"after\",\n\treplaceAll: \"replaceWith\"\n}, function( name, original ) {\n\tjQuery.fn[ name ] = function( selector ) {\n\t\tvar elems,\n\t\t\tret = [],\n\t\t\tinsert = jQuery( selector ),\n\t\t\tlast = insert.length - 1,\n\t\t\ti = 0;\n\n\t\tfor ( ; i <= last; i++ ) {\n\t\t\telems = i === last ? this : this.clone( true );\n\t\t\tjQuery( insert[ i ] )[ original ]( elems );\n\n\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t// .get() because push.apply(_, arraylike) throws on ancient WebKit\n\t\t\tpush.apply( ret, elems.get() );\n\t\t}\n\n\t\treturn this.pushStack( ret );\n\t};\n} );\nvar rnumnonpx = new RegExp( \"^(\" + pnum + \")(?!px)[a-z%]+$\", \"i\" );\n\nvar getStyles = function( elem ) {\n\n\t\t// Support: IE <=11 only, Firefox <=30 (#15098, #14150)\n\t\t// IE throws on elements created in popups\n\t\t// FF meanwhile throws on frame elements through \"defaultView.getComputedStyle\"\n\t\tvar view = elem.ownerDocument.defaultView;\n\n\t\tif ( !view || !view.opener ) {\n\t\t\tview = window;\n\t\t}\n\n\t\treturn view.getComputedStyle( elem );\n\t};\n\nvar rboxStyle = new RegExp( cssExpand.join( \"|\" ), \"i\" );\n\n\n\n( function() {\n\n\t// Executing both pixelPosition & boxSizingReliable tests require only one layout\n\t// so they're executed at the same time to save the second computation.\n\tfunction computeStyleTests() {\n\n\t\t// This is a singleton, we need to execute it only once\n\t\tif ( !div ) {\n\t\t\treturn;\n\t\t}\n\n\t\tcontainer.style.cssText = \"position:absolute;left:-11111px;width:60px;\" +\n\t\t\t\"margin-top:1px;padding:0;border:0\";\n\t\tdiv.style.cssText =\n\t\t\t\"position:relative;display:block;box-sizing:border-box;overflow:scroll;\" +\n\t\t\t\"margin:auto;border:1px;padding:1px;\" +\n\t\t\t\"width:60%;top:1%\";\n\t\tdocumentElement.appendChild( container ).appendChild( div );\n\n\t\tvar divStyle = window.getComputedStyle( div );\n\t\tpixelPositionVal = divStyle.top !== \"1%\";\n\n\t\t// Support: Android 4.0 - 4.3 only, Firefox <=3 - 44\n\t\treliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12;\n\n\t\t// Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3\n\t\t// Some styles come back with percentage values, even though they shouldn't\n\t\tdiv.style.right = \"60%\";\n\t\tpixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36;\n\n\t\t// Support: IE 9 - 11 only\n\t\t// Detect misreporting of content dimensions for box-sizing:border-box elements\n\t\tboxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36;\n\n\t\t// Support: IE 9 only\n\t\t// Detect overflow:scroll screwiness (gh-3699)\n\t\t// Support: Chrome <=64\n\t\t// Don't get tricked when zoom affects offsetWidth (gh-4029)\n\t\tdiv.style.position = \"absolute\";\n\t\tscrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12;\n\n\t\tdocumentElement.removeChild( container );\n\n\t\t// Nullify the div so it wouldn't be stored in the memory and\n\t\t// it will also be a sign that checks already performed\n\t\tdiv = null;\n\t}\n\n\tfunction roundPixelMeasures( measure ) {\n\t\treturn Math.round( parseFloat( measure ) );\n\t}\n\n\tvar pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal,\n\t\treliableMarginLeftVal,\n\t\tcontainer = document.createElement( \"div\" ),\n\t\tdiv = document.createElement( \"div\" );\n\n\t// Finish early in limited (non-browser) environments\n\tif ( !div.style ) {\n\t\treturn;\n\t}\n\n\t// Support: IE <=9 - 11 only\n\t// Style of cloned element affects source element cloned (#8908)\n\tdiv.style.backgroundClip = \"content-box\";\n\tdiv.cloneNode( true ).style.backgroundClip = \"\";\n\tsupport.clearCloneStyle = div.style.backgroundClip === \"content-box\";\n\n\tjQuery.extend( support, {\n\t\tboxSizingReliable: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn boxSizingReliableVal;\n\t\t},\n\t\tpixelBoxStyles: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn pixelBoxStylesVal;\n\t\t},\n\t\tpixelPosition: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn pixelPositionVal;\n\t\t},\n\t\treliableMarginLeft: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn reliableMarginLeftVal;\n\t\t},\n\t\tscrollboxSize: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn scrollboxSizeVal;\n\t\t}\n\t} );\n} )();\n\n\nfunction curCSS( elem, name, computed ) {\n\tvar width, minWidth, maxWidth, ret,\n\n\t\t// Support: Firefox 51+\n\t\t// Retrieving style before computed somehow\n\t\t// fixes an issue with getting wrong values\n\t\t// on detached elements\n\t\tstyle = elem.style;\n\n\tcomputed = computed || getStyles( elem );\n\n\t// getPropertyValue is needed for:\n\t// .css('filter') (IE 9 only, #12537)\n\t// .css('--customProperty) (#3144)\n\tif ( computed ) {\n\t\tret = computed.getPropertyValue( name ) || computed[ name ];\n\n\t\tif ( ret === \"\" && !isAttached( elem ) ) {\n\t\t\tret = jQuery.style( elem, name );\n\t\t}\n\n\t\t// A tribute to the \"awesome hack by Dean Edwards\"\n\t\t// Android Browser returns percentage for some values,\n\t\t// but width seems to be reliably pixels.\n\t\t// This is against the CSSOM draft spec:\n\t\t// https://drafts.csswg.org/cssom/#resolved-values\n\t\tif ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) {\n\n\t\t\t// Remember the original values\n\t\t\twidth = style.width;\n\t\t\tminWidth = style.minWidth;\n\t\t\tmaxWidth = style.maxWidth;\n\n\t\t\t// Put in the new values to get a computed value out\n\t\t\tstyle.minWidth = style.maxWidth = style.width = ret;\n\t\t\tret = computed.width;\n\n\t\t\t// Revert the changed values\n\t\t\tstyle.width = width;\n\t\t\tstyle.minWidth = minWidth;\n\t\t\tstyle.maxWidth = maxWidth;\n\t\t}\n\t}\n\n\treturn ret !== undefined ?\n\n\t\t// Support: IE <=9 - 11 only\n\t\t// IE returns zIndex value as an integer.\n\t\tret + \"\" :\n\t\tret;\n}\n\n\nfunction addGetHookIf( conditionFn, hookFn ) {\n\n\t// Define the hook, we'll check on the first run if it's really needed.\n\treturn {\n\t\tget: function() {\n\t\t\tif ( conditionFn() ) {\n\n\t\t\t\t// Hook not needed (or it's not possible to use it due\n\t\t\t\t// to missing dependency), remove it.\n\t\t\t\tdelete this.get;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Hook needed; redefine it so that the support test is not executed again.\n\t\t\treturn ( this.get = hookFn ).apply( this, arguments );\n\t\t}\n\t};\n}\n\n\nvar cssPrefixes = [ \"Webkit\", \"Moz\", \"ms\" ],\n\temptyStyle = document.createElement( \"div\" ).style,\n\tvendorProps = {};\n\n// Return a vendor-prefixed property or undefined\nfunction vendorPropName( name ) {\n\n\t// Check for vendor prefixed names\n\tvar capName = name[ 0 ].toUpperCase() + name.slice( 1 ),\n\t\ti = cssPrefixes.length;\n\n\twhile ( i-- ) {\n\t\tname = cssPrefixes[ i ] + capName;\n\t\tif ( name in emptyStyle ) {\n\t\t\treturn name;\n\t\t}\n\t}\n}\n\n// Return a potentially-mapped jQuery.cssProps or vendor prefixed property\nfunction finalPropName( name ) {\n\tvar final = jQuery.cssProps[ name ] || vendorProps[ name ];\n\n\tif ( final ) {\n\t\treturn final;\n\t}\n\tif ( name in emptyStyle ) {\n\t\treturn name;\n\t}\n\treturn vendorProps[ name ] = vendorPropName( name ) || name;\n}\n\n\nvar\n\n\t// Swappable if display is none or starts with table\n\t// except \"table\", \"table-cell\", or \"table-caption\"\n\t// See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display\n\trdisplayswap = /^(none|table(?!-c[ea]).+)/,\n\trcustomProp = /^--/,\n\tcssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" },\n\tcssNormalTransform = {\n\t\tletterSpacing: \"0\",\n\t\tfontWeight: \"400\"\n\t};\n\nfunction setPositiveNumber( elem, value, subtract ) {\n\n\t// Any relative (+/-) values have already been\n\t// normalized at this point\n\tvar matches = rcssNum.exec( value );\n\treturn matches ?\n\n\t\t// Guard against undefined \"subtract\", e.g., when used as in cssHooks\n\t\tMath.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || \"px\" ) :\n\t\tvalue;\n}\n\nfunction boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) {\n\tvar i = dimension === \"width\" ? 1 : 0,\n\t\textra = 0,\n\t\tdelta = 0;\n\n\t// Adjustment may not be necessary\n\tif ( box === ( isBorderBox ? \"border\" : \"content\" ) ) {\n\t\treturn 0;\n\t}\n\n\tfor ( ; i < 4; i += 2 ) {\n\n\t\t// Both box models exclude margin\n\t\tif ( box === \"margin\" ) {\n\t\t\tdelta += jQuery.css( elem, box + cssExpand[ i ], true, styles );\n\t\t}\n\n\t\t// If we get here with a content-box, we're seeking \"padding\" or \"border\" or \"margin\"\n\t\tif ( !isBorderBox ) {\n\n\t\t\t// Add padding\n\t\t\tdelta += jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\n\t\t\t// For \"border\" or \"margin\", add border\n\t\t\tif ( box !== \"padding\" ) {\n\t\t\t\tdelta += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\n\t\t\t// But still keep track of it otherwise\n\t\t\t} else {\n\t\t\t\textra += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\n\t\t// If we get here with a border-box (content + padding + border), we're seeking \"content\" or\n\t\t// \"padding\" or \"margin\"\n\t\t} else {\n\n\t\t\t// For \"content\", subtract padding\n\t\t\tif ( box === \"content\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\t\t\t}\n\n\t\t\t// For \"content\" or \"padding\", subtract border\n\t\t\tif ( box !== \"margin\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Account for positive content-box scroll gutter when requested by providing computedVal\n\tif ( !isBorderBox && computedVal >= 0 ) {\n\n\t\t// offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border\n\t\t// Assuming integer scroll gutter, subtract the rest and round down\n\t\tdelta += Math.max( 0, Math.ceil(\n\t\t\telem[ \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -\n\t\t\tcomputedVal -\n\t\t\tdelta -\n\t\t\textra -\n\t\t\t0.5\n\n\t\t// If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter\n\t\t// Use an explicit zero to avoid NaN (gh-3964)\n\t\t) ) || 0;\n\t}\n\n\treturn delta;\n}\n\nfunction getWidthOrHeight( elem, dimension, extra ) {\n\n\t// Start with computed style\n\tvar styles = getStyles( elem ),\n\n\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322).\n\t\t// Fake content-box until we know it's needed to know the true value.\n\t\tboxSizingNeeded = !support.boxSizingReliable() || extra,\n\t\tisBorderBox = boxSizingNeeded &&\n\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\tvalueIsBorderBox = isBorderBox,\n\n\t\tval = curCSS( elem, dimension, styles ),\n\t\toffsetProp = \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 );\n\n\t// Support: Firefox <=54\n\t// Return a confounding non-pixel value or feign ignorance, as appropriate.\n\tif ( rnumnonpx.test( val ) ) {\n\t\tif ( !extra ) {\n\t\t\treturn val;\n\t\t}\n\t\tval = \"auto\";\n\t}\n\n\n\t// Fall back to offsetWidth/offsetHeight when value is \"auto\"\n\t// This happens for inline elements with no explicit setting (gh-3571)\n\t// Support: Android <=4.1 - 4.3 only\n\t// Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602)\n\t// Support: IE 9-11 only\n\t// Also use offsetWidth/offsetHeight for when box sizing is unreliable\n\t// We use getClientRects() to check for hidden/disconnected.\n\t// In those cases, the computed value can be trusted to be border-box\n\tif ( ( !support.boxSizingReliable() && isBorderBox ||\n\t\tval === \"auto\" ||\n\t\t!parseFloat( val ) && jQuery.css( elem, \"display\", false, styles ) === \"inline\" ) &&\n\t\telem.getClientRects().length ) {\n\n\t\tisBorderBox = jQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\";\n\n\t\t// Where available, offsetWidth/offsetHeight approximate border box dimensions.\n\t\t// Where not available (e.g., SVG), assume unreliable box-sizing and interpret the\n\t\t// retrieved value as a content box dimension.\n\t\tvalueIsBorderBox = offsetProp in elem;\n\t\tif ( valueIsBorderBox ) {\n\t\t\tval = elem[ offsetProp ];\n\t\t}\n\t}\n\n\t// Normalize \"\" and auto\n\tval = parseFloat( val ) || 0;\n\n\t// Adjust for the element's box model\n\treturn ( val +\n\t\tboxModelAdjustment(\n\t\t\telem,\n\t\t\tdimension,\n\t\t\textra || ( isBorderBox ? \"border\" : \"content\" ),\n\t\t\tvalueIsBorderBox,\n\t\t\tstyles,\n\n\t\t\t// Provide the current computed size to request scroll gutter calculation (gh-3589)\n\t\t\tval\n\t\t)\n\t) + \"px\";\n}\n\njQuery.extend( {\n\n\t// Add in style property hooks for overriding the default\n\t// behavior of getting and setting a style property\n\tcssHooks: {\n\t\topacity: {\n\t\t\tget: function( elem, computed ) {\n\t\t\t\tif ( computed ) {\n\n\t\t\t\t\t// We should always get a number back from opacity\n\t\t\t\t\tvar ret = curCSS( elem, \"opacity\" );\n\t\t\t\t\treturn ret === \"\" ? \"1\" : ret;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t// Don't automatically add \"px\" to these possibly-unitless properties\n\tcssNumber: {\n\t\t\"animationIterationCount\": true,\n\t\t\"columnCount\": true,\n\t\t\"fillOpacity\": true,\n\t\t\"flexGrow\": true,\n\t\t\"flexShrink\": true,\n\t\t\"fontWeight\": true,\n\t\t\"gridArea\": true,\n\t\t\"gridColumn\": true,\n\t\t\"gridColumnEnd\": true,\n\t\t\"gridColumnStart\": true,\n\t\t\"gridRow\": true,\n\t\t\"gridRowEnd\": true,\n\t\t\"gridRowStart\": true,\n\t\t\"lineHeight\": true,\n\t\t\"opacity\": true,\n\t\t\"order\": true,\n\t\t\"orphans\": true,\n\t\t\"widows\": true,\n\t\t\"zIndex\": true,\n\t\t\"zoom\": true\n\t},\n\n\t// Add in properties whose names you wish to fix before\n\t// setting or getting the value\n\tcssProps: {},\n\n\t// Get and set the style property on a DOM Node\n\tstyle: function( elem, name, value, extra ) {\n\n\t\t// Don't set styles on text and comment nodes\n\t\tif ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Make sure that we're working with the right name\n\t\tvar ret, type, hooks,\n\t\t\torigName = camelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name ),\n\t\t\tstyle = elem.style;\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to query the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Gets hook for the prefixed version, then unprefixed version\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// Check if we're setting a value\n\t\tif ( value !== undefined ) {\n\t\t\ttype = typeof value;\n\n\t\t\t// Convert \"+=\" or \"-=\" to relative numbers (#7345)\n\t\t\tif ( type === \"string\" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {\n\t\t\t\tvalue = adjustCSS( elem, name, ret );\n\n\t\t\t\t// Fixes bug #9237\n\t\t\t\ttype = \"number\";\n\t\t\t}\n\n\t\t\t// Make sure that null and NaN values aren't set (#7116)\n\t\t\tif ( value == null || value !== value ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If a number was passed in, add the unit (except for certain CSS properties)\n\t\t\t// The isCustomProp check can be removed in jQuery 4.0 when we only auto-append\n\t\t\t// \"px\" to a few hardcoded values.\n\t\t\tif ( type === \"number\" && !isCustomProp ) {\n\t\t\t\tvalue += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? \"\" : \"px\" );\n\t\t\t}\n\n\t\t\t// background-* props affect original clone's values\n\t\t\tif ( !support.clearCloneStyle && value === \"\" && name.indexOf( \"background\" ) === 0 ) {\n\t\t\t\tstyle[ name ] = \"inherit\";\n\t\t\t}\n\n\t\t\t// If a hook was provided, use that value, otherwise just set the specified value\n\t\t\tif ( !hooks || !( \"set\" in hooks ) ||\n\t\t\t\t( value = hooks.set( elem, value, extra ) ) !== undefined ) {\n\n\t\t\t\tif ( isCustomProp ) {\n\t\t\t\t\tstyle.setProperty( name, value );\n\t\t\t\t} else {\n\t\t\t\t\tstyle[ name ] = value;\n\t\t\t\t}\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// If a hook was provided get the non-computed value from there\n\t\t\tif ( hooks && \"get\" in hooks &&\n\t\t\t\t( ret = hooks.get( elem, false, extra ) ) !== undefined ) {\n\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\t// Otherwise just get the value from the style object\n\t\t\treturn style[ name ];\n\t\t}\n\t},\n\n\tcss: function( elem, name, extra, styles ) {\n\t\tvar val, num, hooks,\n\t\t\torigName = camelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name );\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to modify the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Try prefixed name followed by the unprefixed name\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// If a hook was provided get the computed value from there\n\t\tif ( hooks && \"get\" in hooks ) {\n\t\t\tval = hooks.get( elem, true, extra );\n\t\t}\n\n\t\t// Otherwise, if a way to get the computed value exists, use that\n\t\tif ( val === undefined ) {\n\t\t\tval = curCSS( elem, name, styles );\n\t\t}\n\n\t\t// Convert \"normal\" to computed value\n\t\tif ( val === \"normal\" && name in cssNormalTransform ) {\n\t\t\tval = cssNormalTransform[ name ];\n\t\t}\n\n\t\t// Make numeric if forced or a qualifier was provided and val looks numeric\n\t\tif ( extra === \"\" || extra ) {\n\t\t\tnum = parseFloat( val );\n\t\t\treturn extra === true || isFinite( num ) ? num || 0 : val;\n\t\t}\n\n\t\treturn val;\n\t}\n} );\n\njQuery.each( [ \"height\", \"width\" ], function( i, dimension ) {\n\tjQuery.cssHooks[ dimension ] = {\n\t\tget: function( elem, computed, extra ) {\n\t\t\tif ( computed ) {\n\n\t\t\t\t// Certain elements can have dimension info if we invisibly show them\n\t\t\t\t// but it must have a current display style that would benefit\n\t\t\t\treturn rdisplayswap.test( jQuery.css( elem, \"display\" ) ) &&\n\n\t\t\t\t\t// Support: Safari 8+\n\t\t\t\t\t// Table columns in Safari have non-zero offsetWidth & zero\n\t\t\t\t\t// getBoundingClientRect().width unless display is changed.\n\t\t\t\t\t// Support: IE <=11 only\n\t\t\t\t\t// Running getBoundingClientRect on a disconnected node\n\t\t\t\t\t// in IE throws an error.\n\t\t\t\t\t( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ?\n\t\t\t\t\t\tswap( elem, cssShow, function() {\n\t\t\t\t\t\t\treturn getWidthOrHeight( elem, dimension, extra );\n\t\t\t\t\t\t} ) :\n\t\t\t\t\t\tgetWidthOrHeight( elem, dimension, extra );\n\t\t\t}\n\t\t},\n\n\t\tset: function( elem, value, extra ) {\n\t\t\tvar matches,\n\t\t\t\tstyles = getStyles( elem ),\n\n\t\t\t\t// Only read styles.position if the test has a chance to fail\n\t\t\t\t// to avoid forcing a reflow.\n\t\t\t\tscrollboxSizeBuggy = !support.scrollboxSize() &&\n\t\t\t\t\tstyles.position === \"absolute\",\n\n\t\t\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991)\n\t\t\t\tboxSizingNeeded = scrollboxSizeBuggy || extra,\n\t\t\t\tisBorderBox = boxSizingNeeded &&\n\t\t\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\t\t\tsubtract = extra ?\n\t\t\t\t\tboxModelAdjustment(\n\t\t\t\t\t\telem,\n\t\t\t\t\t\tdimension,\n\t\t\t\t\t\textra,\n\t\t\t\t\t\tisBorderBox,\n\t\t\t\t\t\tstyles\n\t\t\t\t\t) :\n\t\t\t\t\t0;\n\n\t\t\t// Account for unreliable border-box dimensions by comparing offset* to computed and\n\t\t\t// faking a content-box to get border and padding (gh-3699)\n\t\t\tif ( isBorderBox && scrollboxSizeBuggy ) {\n\t\t\t\tsubtract -= Math.ceil(\n\t\t\t\t\telem[ \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -\n\t\t\t\t\tparseFloat( styles[ dimension ] ) -\n\t\t\t\t\tboxModelAdjustment( elem, dimension, \"border\", false, styles ) -\n\t\t\t\t\t0.5\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// Convert to pixels if value adjustment is needed\n\t\t\tif ( subtract && ( matches = rcssNum.exec( value ) ) &&\n\t\t\t\t( matches[ 3 ] || \"px\" ) !== \"px\" ) {\n\n\t\t\t\telem.style[ dimension ] = value;\n\t\t\t\tvalue = jQuery.css( elem, dimension );\n\t\t\t}\n\n\t\t\treturn setPositiveNumber( elem, value, subtract );\n\t\t}\n\t};\n} );\n\njQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft,\n\tfunction( elem, computed ) {\n\t\tif ( computed ) {\n\t\t\treturn ( parseFloat( curCSS( elem, \"marginLeft\" ) ) ||\n\t\t\t\telem.getBoundingClientRect().left -\n\t\t\t\t\tswap( elem, { marginLeft: 0 }, function() {\n\t\t\t\t\t\treturn elem.getBoundingClientRect().left;\n\t\t\t\t\t} )\n\t\t\t\t) + \"px\";\n\t\t}\n\t}\n);\n\n// These hooks are used by animate to expand properties\njQuery.each( {\n\tmargin: \"\",\n\tpadding: \"\",\n\tborder: \"Width\"\n}, function( prefix, suffix ) {\n\tjQuery.cssHooks[ prefix + suffix ] = {\n\t\texpand: function( value ) {\n\t\t\tvar i = 0,\n\t\t\t\texpanded = {},\n\n\t\t\t\t// Assumes a single number if not a string\n\t\t\t\tparts = typeof value === \"string\" ? value.split( \" \" ) : [ value ];\n\n\t\t\tfor ( ; i < 4; i++ ) {\n\t\t\t\texpanded[ prefix + cssExpand[ i ] + suffix ] =\n\t\t\t\t\tparts[ i ] || parts[ i - 2 ] || parts[ 0 ];\n\t\t\t}\n\n\t\t\treturn expanded;\n\t\t}\n\t};\n\n\tif ( prefix !== \"margin\" ) {\n\t\tjQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;\n\t}\n} );\n\njQuery.fn.extend( {\n\tcss: function( name, value ) {\n\t\treturn access( this, function( elem, name, value ) {\n\t\t\tvar styles, len,\n\t\t\t\tmap = {},\n\t\t\t\ti = 0;\n\n\t\t\tif ( Array.isArray( name ) ) {\n\t\t\t\tstyles = getStyles( elem );\n\t\t\t\tlen = name.length;\n\n\t\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\t\tmap[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );\n\t\t\t\t}\n\n\t\t\t\treturn map;\n\t\t\t}\n\n\t\t\treturn value !== undefined ?\n\t\t\t\tjQuery.style( elem, name, value ) :\n\t\t\t\tjQuery.css( elem, name );\n\t\t}, name, value, arguments.length > 1 );\n\t}\n} );\n\n\nfunction Tween( elem, options, prop, end, easing ) {\n\treturn new Tween.prototype.init( elem, options, prop, end, easing );\n}\njQuery.Tween = Tween;\n\nTween.prototype = {\n\tconstructor: Tween,\n\tinit: function( elem, options, prop, end, easing, unit ) {\n\t\tthis.elem = elem;\n\t\tthis.prop = prop;\n\t\tthis.easing = easing || jQuery.easing._default;\n\t\tthis.options = options;\n\t\tthis.start = this.now = this.cur();\n\t\tthis.end = end;\n\t\tthis.unit = unit || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" );\n\t},\n\tcur: function() {\n\t\tvar hooks = Tween.propHooks[ this.prop ];\n\n\t\treturn hooks && hooks.get ?\n\t\t\thooks.get( this ) :\n\t\t\tTween.propHooks._default.get( this );\n\t},\n\trun: function( percent ) {\n\t\tvar eased,\n\t\t\thooks = Tween.propHooks[ this.prop ];\n\n\t\tif ( this.options.duration ) {\n\t\t\tthis.pos = eased = jQuery.easing[ this.easing ](\n\t\t\t\tpercent, this.options.duration * percent, 0, 1, this.options.duration\n\t\t\t);\n\t\t} else {\n\t\t\tthis.pos = eased = percent;\n\t\t}\n\t\tthis.now = ( this.end - this.start ) * eased + this.start;\n\n\t\tif ( this.options.step ) {\n\t\t\tthis.options.step.call( this.elem, this.now, this );\n\t\t}\n\n\t\tif ( hooks && hooks.set ) {\n\t\t\thooks.set( this );\n\t\t} else {\n\t\t\tTween.propHooks._default.set( this );\n\t\t}\n\t\treturn this;\n\t}\n};\n\nTween.prototype.init.prototype = Tween.prototype;\n\nTween.propHooks = {\n\t_default: {\n\t\tget: function( tween ) {\n\t\t\tvar result;\n\n\t\t\t// Use a property on the element directly when it is not a DOM element,\n\t\t\t// or when there is no matching style property that exists.\n\t\t\tif ( tween.elem.nodeType !== 1 ||\n\t\t\t\ttween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {\n\t\t\t\treturn tween.elem[ tween.prop ];\n\t\t\t}\n\n\t\t\t// Passing an empty string as a 3rd parameter to .css will automatically\n\t\t\t// attempt a parseFloat and fallback to a string if the parse fails.\n\t\t\t// Simple values such as \"10px\" are parsed to Float;\n\t\t\t// complex values such as \"rotate(1rad)\" are returned as-is.\n\t\t\tresult = jQuery.css( tween.elem, tween.prop, \"\" );\n\n\t\t\t// Empty strings, null, undefined and \"auto\" are converted to 0.\n\t\t\treturn !result || result === \"auto\" ? 0 : result;\n\t\t},\n\t\tset: function( tween ) {\n\n\t\t\t// Use step hook for back compat.\n\t\t\t// Use cssHook if its there.\n\t\t\t// Use .style if available and use plain properties where available.\n\t\t\tif ( jQuery.fx.step[ tween.prop ] ) {\n\t\t\t\tjQuery.fx.step[ tween.prop ]( tween );\n\t\t\t} else if ( tween.elem.nodeType === 1 && (\n\t\t\t\t\tjQuery.cssHooks[ tween.prop ] ||\n\t\t\t\t\ttween.elem.style[ finalPropName( tween.prop ) ] != null ) ) {\n\t\t\t\tjQuery.style( tween.elem, tween.prop, tween.now + tween.unit );\n\t\t\t} else {\n\t\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t\t}\n\t\t}\n\t}\n};\n\n// Support: IE <=9 only\n// Panic based approach to setting things on disconnected nodes\nTween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {\n\tset: function( tween ) {\n\t\tif ( tween.elem.nodeType && tween.elem.parentNode ) {\n\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t}\n\t}\n};\n\njQuery.easing = {\n\tlinear: function( p ) {\n\t\treturn p;\n\t},\n\tswing: function( p ) {\n\t\treturn 0.5 - Math.cos( p * Math.PI ) / 2;\n\t},\n\t_default: \"swing\"\n};\n\njQuery.fx = Tween.prototype.init;\n\n// Back compat <1.8 extension point\njQuery.fx.step = {};\n\n\n\n\nvar\n\tfxNow, inProgress,\n\trfxtypes = /^(?:toggle|show|hide)$/,\n\trrun = /queueHooks$/;\n\nfunction schedule() {\n\tif ( inProgress ) {\n\t\tif ( document.hidden === false && window.requestAnimationFrame ) {\n\t\t\twindow.requestAnimationFrame( schedule );\n\t\t} else {\n\t\t\twindow.setTimeout( schedule, jQuery.fx.interval );\n\t\t}\n\n\t\tjQuery.fx.tick();\n\t}\n}\n\n// Animations created synchronously will run synchronously\nfunction createFxNow() {\n\twindow.setTimeout( function() {\n\t\tfxNow = undefined;\n\t} );\n\treturn ( fxNow = Date.now() );\n}\n\n// Generate parameters to create a standard animation\nfunction genFx( type, includeWidth ) {\n\tvar which,\n\t\ti = 0,\n\t\tattrs = { height: type };\n\n\t// If we include width, step value is 1 to do all cssExpand values,\n\t// otherwise step value is 2 to skip over Left and Right\n\tincludeWidth = includeWidth ? 1 : 0;\n\tfor ( ; i < 4; i += 2 - includeWidth ) {\n\t\twhich = cssExpand[ i ];\n\t\tattrs[ \"margin\" + which ] = attrs[ \"padding\" + which ] = type;\n\t}\n\n\tif ( includeWidth ) {\n\t\tattrs.opacity = attrs.width = type;\n\t}\n\n\treturn attrs;\n}\n\nfunction createTween( value, prop, animation ) {\n\tvar tween,\n\t\tcollection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ \"*\" ] ),\n\t\tindex = 0,\n\t\tlength = collection.length;\n\tfor ( ; index < length; index++ ) {\n\t\tif ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {\n\n\t\t\t// We're done with this property\n\t\t\treturn tween;\n\t\t}\n\t}\n}\n\nfunction defaultPrefilter( elem, props, opts ) {\n\tvar prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,\n\t\tisBox = \"width\" in props || \"height\" in props,\n\t\tanim = this,\n\t\torig = {},\n\t\tstyle = elem.style,\n\t\thidden = elem.nodeType && isHiddenWithinTree( elem ),\n\t\tdataShow = dataPriv.get( elem, \"fxshow\" );\n\n\t// Queue-skipping animations hijack the fx hooks\n\tif ( !opts.queue ) {\n\t\thooks = jQuery._queueHooks( elem, \"fx\" );\n\t\tif ( hooks.unqueued == null ) {\n\t\t\thooks.unqueued = 0;\n\t\t\toldfire = hooks.empty.fire;\n\t\t\thooks.empty.fire = function() {\n\t\t\t\tif ( !hooks.unqueued ) {\n\t\t\t\t\toldfire();\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\thooks.unqueued++;\n\n\t\tanim.always( function() {\n\n\t\t\t// Ensure the complete handler is called before this completes\n\t\t\tanim.always( function() {\n\t\t\t\thooks.unqueued--;\n\t\t\t\tif ( !jQuery.queue( elem, \"fx\" ).length ) {\n\t\t\t\t\thooks.empty.fire();\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\t}\n\n\t// Detect show/hide animations\n\tfor ( prop in props ) {\n\t\tvalue = props[ prop ];\n\t\tif ( rfxtypes.test( value ) ) {\n\t\t\tdelete props[ prop ];\n\t\t\ttoggle = toggle || value === \"toggle\";\n\t\t\tif ( value === ( hidden ? \"hide\" : \"show\" ) ) {\n\n\t\t\t\t// Pretend to be hidden if this is a \"show\" and\n\t\t\t\t// there is still data from a stopped show/hide\n\t\t\t\tif ( value === \"show\" && dataShow && dataShow[ prop ] !== undefined ) {\n\t\t\t\t\thidden = true;\n\n\t\t\t\t// Ignore all other no-op show/hide data\n\t\t\t\t} else {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\torig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );\n\t\t}\n\t}\n\n\t// Bail out if this is a no-op like .hide().hide()\n\tpropTween = !jQuery.isEmptyObject( props );\n\tif ( !propTween && jQuery.isEmptyObject( orig ) ) {\n\t\treturn;\n\t}\n\n\t// Restrict \"overflow\" and \"display\" styles during box animations\n\tif ( isBox && elem.nodeType === 1 ) {\n\n\t\t// Support: IE <=9 - 11, Edge 12 - 15\n\t\t// Record all 3 overflow attributes because IE does not infer the shorthand\n\t\t// from identically-valued overflowX and overflowY and Edge just mirrors\n\t\t// the overflowX value there.\n\t\topts.overflow = [ style.overflow, style.overflowX, style.overflowY ];\n\n\t\t// Identify a display type, preferring old show/hide data over the CSS cascade\n\t\trestoreDisplay = dataShow && dataShow.display;\n\t\tif ( restoreDisplay == null ) {\n\t\t\trestoreDisplay = dataPriv.get( elem, \"display\" );\n\t\t}\n\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\tif ( display === \"none\" ) {\n\t\t\tif ( restoreDisplay ) {\n\t\t\t\tdisplay = restoreDisplay;\n\t\t\t} else {\n\n\t\t\t\t// Get nonempty value(s) by temporarily forcing visibility\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t\trestoreDisplay = elem.style.display || restoreDisplay;\n\t\t\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\t\t\tshowHide( [ elem ] );\n\t\t\t}\n\t\t}\n\n\t\t// Animate inline elements as inline-block\n\t\tif ( display === \"inline\" || display === \"inline-block\" && restoreDisplay != null ) {\n\t\t\tif ( jQuery.css( elem, \"float\" ) === \"none\" ) {\n\n\t\t\t\t// Restore the original display value at the end of pure show/hide animations\n\t\t\t\tif ( !propTween ) {\n\t\t\t\t\tanim.done( function() {\n\t\t\t\t\t\tstyle.display = restoreDisplay;\n\t\t\t\t\t} );\n\t\t\t\t\tif ( restoreDisplay == null ) {\n\t\t\t\t\t\tdisplay = style.display;\n\t\t\t\t\t\trestoreDisplay = display === \"none\" ? \"\" : display;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tstyle.display = \"inline-block\";\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( opts.overflow ) {\n\t\tstyle.overflow = \"hidden\";\n\t\tanim.always( function() {\n\t\t\tstyle.overflow = opts.overflow[ 0 ];\n\t\t\tstyle.overflowX = opts.overflow[ 1 ];\n\t\t\tstyle.overflowY = opts.overflow[ 2 ];\n\t\t} );\n\t}\n\n\t// Implement show/hide animations\n\tpropTween = false;\n\tfor ( prop in orig ) {\n\n\t\t// General show/hide setup for this element animation\n\t\tif ( !propTween ) {\n\t\t\tif ( dataShow ) {\n\t\t\t\tif ( \"hidden\" in dataShow ) {\n\t\t\t\t\thidden = dataShow.hidden;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tdataShow = dataPriv.access( elem, \"fxshow\", { display: restoreDisplay } );\n\t\t\t}\n\n\t\t\t// Store hidden/visible for toggle so `.stop().toggle()` \"reverses\"\n\t\t\tif ( toggle ) {\n\t\t\t\tdataShow.hidden = !hidden;\n\t\t\t}\n\n\t\t\t// Show elements before animating them\n\t\t\tif ( hidden ) {\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t}\n\n\t\t\t/* eslint-disable no-loop-func */\n\n\t\t\tanim.done( function() {\n\n\t\t\t/* eslint-enable no-loop-func */\n\n\t\t\t\t// The final step of a \"hide\" animation is actually hiding the element\n\t\t\t\tif ( !hidden ) {\n\t\t\t\t\tshowHide( [ elem ] );\n\t\t\t\t}\n\t\t\t\tdataPriv.remove( elem, \"fxshow\" );\n\t\t\t\tfor ( prop in orig ) {\n\t\t\t\t\tjQuery.style( elem, prop, orig[ prop ] );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\t// Per-property setup\n\t\tpropTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );\n\t\tif ( !( prop in dataShow ) ) {\n\t\t\tdataShow[ prop ] = propTween.start;\n\t\t\tif ( hidden ) {\n\t\t\t\tpropTween.end = propTween.start;\n\t\t\t\tpropTween.start = 0;\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction propFilter( props, specialEasing ) {\n\tvar index, name, easing, value, hooks;\n\n\t// camelCase, specialEasing and expand cssHook pass\n\tfor ( index in props ) {\n\t\tname = camelCase( index );\n\t\teasing = specialEasing[ name ];\n\t\tvalue = props[ index ];\n\t\tif ( Array.isArray( value ) ) {\n\t\t\teasing = value[ 1 ];\n\t\t\tvalue = props[ index ] = value[ 0 ];\n\t\t}\n\n\t\tif ( index !== name ) {\n\t\t\tprops[ name ] = value;\n\t\t\tdelete props[ index ];\n\t\t}\n\n\t\thooks = jQuery.cssHooks[ name ];\n\t\tif ( hooks && \"expand\" in hooks ) {\n\t\t\tvalue = hooks.expand( value );\n\t\t\tdelete props[ name ];\n\n\t\t\t// Not quite $.extend, this won't overwrite existing keys.\n\t\t\t// Reusing 'index' because we have the correct \"name\"\n\t\t\tfor ( index in value ) {\n\t\t\t\tif ( !( index in props ) ) {\n\t\t\t\t\tprops[ index ] = value[ index ];\n\t\t\t\t\tspecialEasing[ index ] = easing;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tspecialEasing[ name ] = easing;\n\t\t}\n\t}\n}\n\nfunction Animation( elem, properties, options ) {\n\tvar result,\n\t\tstopped,\n\t\tindex = 0,\n\t\tlength = Animation.prefilters.length,\n\t\tdeferred = jQuery.Deferred().always( function() {\n\n\t\t\t// Don't match elem in the :animated selector\n\t\t\tdelete tick.elem;\n\t\t} ),\n\t\ttick = function() {\n\t\t\tif ( stopped ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar currentTime = fxNow || createFxNow(),\n\t\t\t\tremaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),\n\n\t\t\t\t// Support: Android 2.3 only\n\t\t\t\t// Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497)\n\t\t\t\ttemp = remaining / animation.duration || 0,\n\t\t\t\tpercent = 1 - temp,\n\t\t\t\tindex = 0,\n\t\t\t\tlength = animation.tweens.length;\n\n\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\tanimation.tweens[ index ].run( percent );\n\t\t\t}\n\n\t\t\tdeferred.notifyWith( elem, [ animation, percent, remaining ] );\n\n\t\t\t// If there's more to do, yield\n\t\t\tif ( percent < 1 && length ) {\n\t\t\t\treturn remaining;\n\t\t\t}\n\n\t\t\t// If this was an empty animation, synthesize a final progress notification\n\t\t\tif ( !length ) {\n\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t}\n\n\t\t\t// Resolve the animation and report its conclusion\n\t\t\tdeferred.resolveWith( elem, [ animation ] );\n\t\t\treturn false;\n\t\t},\n\t\tanimation = deferred.promise( {\n\t\t\telem: elem,\n\t\t\tprops: jQuery.extend( {}, properties ),\n\t\t\topts: jQuery.extend( true, {\n\t\t\t\tspecialEasing: {},\n\t\t\t\teasing: jQuery.easing._default\n\t\t\t}, options ),\n\t\t\toriginalProperties: properties,\n\t\t\toriginalOptions: options,\n\t\t\tstartTime: fxNow || createFxNow(),\n\t\t\tduration: options.duration,\n\t\t\ttweens: [],\n\t\t\tcreateTween: function( prop, end ) {\n\t\t\t\tvar tween = jQuery.Tween( elem, animation.opts, prop, end,\n\t\t\t\t\t\tanimation.opts.specialEasing[ prop ] || animation.opts.easing );\n\t\t\t\tanimation.tweens.push( tween );\n\t\t\t\treturn tween;\n\t\t\t},\n\t\t\tstop: function( gotoEnd ) {\n\t\t\t\tvar index = 0,\n\n\t\t\t\t\t// If we are going to the end, we want to run all the tweens\n\t\t\t\t\t// otherwise we skip this part\n\t\t\t\t\tlength = gotoEnd ? animation.tweens.length : 0;\n\t\t\t\tif ( stopped ) {\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t\tstopped = true;\n\t\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\t\tanimation.tweens[ index ].run( 1 );\n\t\t\t\t}\n\n\t\t\t\t// Resolve when we played the last frame; otherwise, reject\n\t\t\t\tif ( gotoEnd ) {\n\t\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t\t\tdeferred.resolveWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t} else {\n\t\t\t\t\tdeferred.rejectWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} ),\n\t\tprops = animation.props;\n\n\tpropFilter( props, animation.opts.specialEasing );\n\n\tfor ( ; index < length; index++ ) {\n\t\tresult = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );\n\t\tif ( result ) {\n\t\t\tif ( isFunction( result.stop ) ) {\n\t\t\t\tjQuery._queueHooks( animation.elem, animation.opts.queue ).stop =\n\t\t\t\t\tresult.stop.bind( result );\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\t}\n\n\tjQuery.map( props, createTween, animation );\n\n\tif ( isFunction( animation.opts.start ) ) {\n\t\tanimation.opts.start.call( elem, animation );\n\t}\n\n\t// Attach callbacks from options\n\tanimation\n\t\t.progress( animation.opts.progress )\n\t\t.done( animation.opts.done, animation.opts.complete )\n\t\t.fail( animation.opts.fail )\n\t\t.always( animation.opts.always );\n\n\tjQuery.fx.timer(\n\t\tjQuery.extend( tick, {\n\t\t\telem: elem,\n\t\t\tanim: animation,\n\t\t\tqueue: animation.opts.queue\n\t\t} )\n\t);\n\n\treturn animation;\n}\n\njQuery.Animation = jQuery.extend( Animation, {\n\n\ttweeners: {\n\t\t\"*\": [ function( prop, value ) {\n\t\t\tvar tween = this.createTween( prop, value );\n\t\t\tadjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );\n\t\t\treturn tween;\n\t\t} ]\n\t},\n\n\ttweener: function( props, callback ) {\n\t\tif ( isFunction( props ) ) {\n\t\t\tcallback = props;\n\t\t\tprops = [ \"*\" ];\n\t\t} else {\n\t\t\tprops = props.match( rnothtmlwhite );\n\t\t}\n\n\t\tvar prop,\n\t\t\tindex = 0,\n\t\t\tlength = props.length;\n\n\t\tfor ( ; index < length; index++ ) {\n\t\t\tprop = props[ index ];\n\t\t\tAnimation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];\n\t\t\tAnimation.tweeners[ prop ].unshift( callback );\n\t\t}\n\t},\n\n\tprefilters: [ defaultPrefilter ],\n\n\tprefilter: function( callback, prepend ) {\n\t\tif ( prepend ) {\n\t\t\tAnimation.prefilters.unshift( callback );\n\t\t} else {\n\t\t\tAnimation.prefilters.push( callback );\n\t\t}\n\t}\n} );\n\njQuery.speed = function( speed, easing, fn ) {\n\tvar opt = speed && typeof speed === \"object\" ? jQuery.extend( {}, speed ) : {\n\t\tcomplete: fn || !fn && easing ||\n\t\t\tisFunction( speed ) && speed,\n\t\tduration: speed,\n\t\teasing: fn && easing || easing && !isFunction( easing ) && easing\n\t};\n\n\t// Go to the end state if fx are off\n\tif ( jQuery.fx.off ) {\n\t\topt.duration = 0;\n\n\t} else {\n\t\tif ( typeof opt.duration !== \"number\" ) {\n\t\t\tif ( opt.duration in jQuery.fx.speeds ) {\n\t\t\t\topt.duration = jQuery.fx.speeds[ opt.duration ];\n\n\t\t\t} else {\n\t\t\t\topt.duration = jQuery.fx.speeds._default;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Normalize opt.queue - true/undefined/null -> \"fx\"\n\tif ( opt.queue == null || opt.queue === true ) {\n\t\topt.queue = \"fx\";\n\t}\n\n\t// Queueing\n\topt.old = opt.complete;\n\n\topt.complete = function() {\n\t\tif ( isFunction( opt.old ) ) {\n\t\t\topt.old.call( this );\n\t\t}\n\n\t\tif ( opt.queue ) {\n\t\t\tjQuery.dequeue( this, opt.queue );\n\t\t}\n\t};\n\n\treturn opt;\n};\n\njQuery.fn.extend( {\n\tfadeTo: function( speed, to, easing, callback ) {\n\n\t\t// Show any hidden elements after setting opacity to 0\n\t\treturn this.filter( isHiddenWithinTree ).css( \"opacity\", 0 ).show()\n\n\t\t\t// Animate to the value specified\n\t\t\t.end().animate( { opacity: to }, speed, easing, callback );\n\t},\n\tanimate: function( prop, speed, easing, callback ) {\n\t\tvar empty = jQuery.isEmptyObject( prop ),\n\t\t\toptall = jQuery.speed( speed, easing, callback ),\n\t\t\tdoAnimation = function() {\n\n\t\t\t\t// Operate on a copy of prop so per-property easing won't be lost\n\t\t\t\tvar anim = Animation( this, jQuery.extend( {}, prop ), optall );\n\n\t\t\t\t// Empty animations, or finishing resolves immediately\n\t\t\t\tif ( empty || dataPriv.get( this, \"finish\" ) ) {\n\t\t\t\t\tanim.stop( true );\n\t\t\t\t}\n\t\t\t};\n\t\t\tdoAnimation.finish = doAnimation;\n\n\t\treturn empty || optall.queue === false ?\n\t\t\tthis.each( doAnimation ) :\n\t\t\tthis.queue( optall.queue, doAnimation );\n\t},\n\tstop: function( type, clearQueue, gotoEnd ) {\n\t\tvar stopQueue = function( hooks ) {\n\t\t\tvar stop = hooks.stop;\n\t\t\tdelete hooks.stop;\n\t\t\tstop( gotoEnd );\n\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tgotoEnd = clearQueue;\n\t\t\tclearQueue = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\tif ( clearQueue && type !== false ) {\n\t\t\tthis.queue( type || \"fx\", [] );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar dequeue = true,\n\t\t\t\tindex = type != null && type + \"queueHooks\",\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tdata = dataPriv.get( this );\n\n\t\t\tif ( index ) {\n\t\t\t\tif ( data[ index ] && data[ index ].stop ) {\n\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( index in data ) {\n\t\t\t\t\tif ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {\n\t\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this &&\n\t\t\t\t\t( type == null || timers[ index ].queue === type ) ) {\n\n\t\t\t\t\ttimers[ index ].anim.stop( gotoEnd );\n\t\t\t\t\tdequeue = false;\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Start the next in the queue if the last step wasn't forced.\n\t\t\t// Timers currently will call their complete callbacks, which\n\t\t\t// will dequeue but only if they were gotoEnd.\n\t\t\tif ( dequeue || !gotoEnd ) {\n\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t}\n\t\t} );\n\t},\n\tfinish: function( type ) {\n\t\tif ( type !== false ) {\n\t\t\ttype = type || \"fx\";\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tvar index,\n\t\t\t\tdata = dataPriv.get( this ),\n\t\t\t\tqueue = data[ type + \"queue\" ],\n\t\t\t\thooks = data[ type + \"queueHooks\" ],\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tlength = queue ? queue.length : 0;\n\n\t\t\t// Enable finishing flag on private data\n\t\t\tdata.finish = true;\n\n\t\t\t// Empty the queue first\n\t\t\tjQuery.queue( this, type, [] );\n\n\t\t\tif ( hooks && hooks.stop ) {\n\t\t\t\thooks.stop.call( this, true );\n\t\t\t}\n\n\t\t\t// Look for any active animations, and finish them\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this && timers[ index ].queue === type ) {\n\t\t\t\t\ttimers[ index ].anim.stop( true );\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Look for any animations in the old queue and finish them\n\t\t\tfor ( index = 0; index < length; index++ ) {\n\t\t\t\tif ( queue[ index ] && queue[ index ].finish ) {\n\t\t\t\t\tqueue[ index ].finish.call( this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Turn off finishing flag\n\t\t\tdelete data.finish;\n\t\t} );\n\t}\n} );\n\njQuery.each( [ \"toggle\", \"show\", \"hide\" ], function( i, name ) {\n\tvar cssFn = jQuery.fn[ name ];\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn speed == null || typeof speed === \"boolean\" ?\n\t\t\tcssFn.apply( this, arguments ) :\n\t\t\tthis.animate( genFx( name, true ), speed, easing, callback );\n\t};\n} );\n\n// Generate shortcuts for custom animations\njQuery.each( {\n\tslideDown: genFx( \"show\" ),\n\tslideUp: genFx( \"hide\" ),\n\tslideToggle: genFx( \"toggle\" ),\n\tfadeIn: { opacity: \"show\" },\n\tfadeOut: { opacity: \"hide\" },\n\tfadeToggle: { opacity: \"toggle\" }\n}, function( name, props ) {\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn this.animate( props, speed, easing, callback );\n\t};\n} );\n\njQuery.timers = [];\njQuery.fx.tick = function() {\n\tvar timer,\n\t\ti = 0,\n\t\ttimers = jQuery.timers;\n\n\tfxNow = Date.now();\n\n\tfor ( ; i < timers.length; i++ ) {\n\t\ttimer = timers[ i ];\n\n\t\t// Run the timer and safely remove it when done (allowing for external removal)\n\t\tif ( !timer() && timers[ i ] === timer ) {\n\t\t\ttimers.splice( i--, 1 );\n\t\t}\n\t}\n\n\tif ( !timers.length ) {\n\t\tjQuery.fx.stop();\n\t}\n\tfxNow = undefined;\n};\n\njQuery.fx.timer = function( timer ) {\n\tjQuery.timers.push( timer );\n\tjQuery.fx.start();\n};\n\njQuery.fx.interval = 13;\njQuery.fx.start = function() {\n\tif ( inProgress ) {\n\t\treturn;\n\t}\n\n\tinProgress = true;\n\tschedule();\n};\n\njQuery.fx.stop = function() {\n\tinProgress = null;\n};\n\njQuery.fx.speeds = {\n\tslow: 600,\n\tfast: 200,\n\n\t// Default speed\n\t_default: 400\n};\n\n\n// Based off of the plugin by Clint Helfers, with permission.\n// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/\njQuery.fn.delay = function( time, type ) {\n\ttime = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;\n\ttype = type || \"fx\";\n\n\treturn this.queue( type, function( next, hooks ) {\n\t\tvar timeout = window.setTimeout( next, time );\n\t\thooks.stop = function() {\n\t\t\twindow.clearTimeout( timeout );\n\t\t};\n\t} );\n};\n\n\n( function() {\n\tvar input = document.createElement( \"input\" ),\n\t\tselect = document.createElement( \"select\" ),\n\t\topt = select.appendChild( document.createElement( \"option\" ) );\n\n\tinput.type = \"checkbox\";\n\n\t// Support: Android <=4.3 only\n\t// Default value for a checkbox should be \"on\"\n\tsupport.checkOn = input.value !== \"\";\n\n\t// Support: IE <=11 only\n\t// Must access selectedIndex to make default options select\n\tsupport.optSelected = opt.selected;\n\n\t// Support: IE <=11 only\n\t// An input loses its value after becoming a radio\n\tinput = document.createElement( \"input\" );\n\tinput.value = \"t\";\n\tinput.type = \"radio\";\n\tsupport.radioValue = input.value === \"t\";\n} )();\n\n\nvar boolHook,\n\tattrHandle = jQuery.expr.attrHandle;\n\njQuery.fn.extend( {\n\tattr: function( name, value ) {\n\t\treturn access( this, jQuery.attr, name, value, arguments.length > 1 );\n\t},\n\n\tremoveAttr: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.removeAttr( this, name );\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tattr: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set attributes on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Fallback to prop when attributes are not supported\n\t\tif ( typeof elem.getAttribute === \"undefined\" ) {\n\t\t\treturn jQuery.prop( elem, name, value );\n\t\t}\n\n\t\t// Attribute hooks are determined by the lowercase version\n\t\t// Grab necessary hook if one is defined\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\t\t\thooks = jQuery.attrHooks[ name.toLowerCase() ] ||\n\t\t\t\t( jQuery.expr.match.bool.test( name ) ? boolHook : undefined );\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( value === null ) {\n\t\t\t\tjQuery.removeAttr( elem, name );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\telem.setAttribute( name, value + \"\" );\n\t\t\treturn value;\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\tret = jQuery.find.attr( elem, name );\n\n\t\t// Non-existent attributes return null, we normalize to undefined\n\t\treturn ret == null ? undefined : ret;\n\t},\n\n\tattrHooks: {\n\t\ttype: {\n\t\t\tset: function( elem, value ) {\n\t\t\t\tif ( !support.radioValue && value === \"radio\" &&\n\t\t\t\t\tnodeName( elem, \"input\" ) ) {\n\t\t\t\t\tvar val = elem.value;\n\t\t\t\t\telem.setAttribute( \"type\", value );\n\t\t\t\t\tif ( val ) {\n\t\t\t\t\t\telem.value = val;\n\t\t\t\t\t}\n\t\t\t\t\treturn value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\tremoveAttr: function( elem, value ) {\n\t\tvar name,\n\t\t\ti = 0,\n\n\t\t\t// Attribute names can contain non-HTML whitespace characters\n\t\t\t// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2\n\t\t\tattrNames = value && value.match( rnothtmlwhite );\n\n\t\tif ( attrNames && elem.nodeType === 1 ) {\n\t\t\twhile ( ( name = attrNames[ i++ ] ) ) {\n\t\t\t\telem.removeAttribute( name );\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Hooks for boolean attributes\nboolHook = {\n\tset: function( elem, value, name ) {\n\t\tif ( value === false ) {\n\n\t\t\t// Remove boolean attributes when set to false\n\t\t\tjQuery.removeAttr( elem, name );\n\t\t} else {\n\t\t\telem.setAttribute( name, name );\n\t\t}\n\t\treturn name;\n\t}\n};\n\njQuery.each( jQuery.expr.match.bool.source.match( /\\w+/g ), function( i, name ) {\n\tvar getter = attrHandle[ name ] || jQuery.find.attr;\n\n\tattrHandle[ name ] = function( elem, name, isXML ) {\n\t\tvar ret, handle,\n\t\t\tlowercaseName = name.toLowerCase();\n\n\t\tif ( !isXML ) {\n\n\t\t\t// Avoid an infinite loop by temporarily removing this function from the getter\n\t\t\thandle = attrHandle[ lowercaseName ];\n\t\t\tattrHandle[ lowercaseName ] = ret;\n\t\t\tret = getter( elem, name, isXML ) != null ?\n\t\t\t\tlowercaseName :\n\t\t\t\tnull;\n\t\t\tattrHandle[ lowercaseName ] = handle;\n\t\t}\n\t\treturn ret;\n\t};\n} );\n\n\n\n\nvar rfocusable = /^(?:input|select|textarea|button)$/i,\n\trclickable = /^(?:a|area)$/i;\n\njQuery.fn.extend( {\n\tprop: function( name, value ) {\n\t\treturn access( this, jQuery.prop, name, value, arguments.length > 1 );\n\t},\n\n\tremoveProp: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tdelete this[ jQuery.propFix[ name ] || name ];\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tprop: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set properties on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// Fix name and attach hooks\n\t\t\tname = jQuery.propFix[ name ] || name;\n\t\t\thooks = jQuery.propHooks[ name ];\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\treturn ( elem[ name ] = value );\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\treturn elem[ name ];\n\t},\n\n\tpropHooks: {\n\t\ttabIndex: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\t// Support: IE <=9 - 11 only\n\t\t\t\t// elem.tabIndex doesn't always return the\n\t\t\t\t// correct value when it hasn't been explicitly set\n\t\t\t\t// https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/\n\t\t\t\t// Use proper attribute retrieval(#12072)\n\t\t\t\tvar tabindex = jQuery.find.attr( elem, \"tabindex\" );\n\n\t\t\t\tif ( tabindex ) {\n\t\t\t\t\treturn parseInt( tabindex, 10 );\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\trfocusable.test( elem.nodeName ) ||\n\t\t\t\t\trclickable.test( elem.nodeName ) &&\n\t\t\t\t\telem.href\n\t\t\t\t) {\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t},\n\n\tpropFix: {\n\t\t\"for\": \"htmlFor\",\n\t\t\"class\": \"className\"\n\t}\n} );\n\n// Support: IE <=11 only\n// Accessing the selectedIndex property\n// forces the browser to respect setting selected\n// on the option\n// The getter ensures a default option is selected\n// when in an optgroup\n// eslint rule \"no-unused-expressions\" is disabled for this code\n// since it considers such accessions noop\nif ( !support.optSelected ) {\n\tjQuery.propHooks.selected = {\n\t\tget: function( elem ) {\n\n\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent && parent.parentNode ) {\n\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\tset: function( elem ) {\n\n\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent ) {\n\t\t\t\tparent.selectedIndex;\n\n\t\t\t\tif ( parent.parentNode ) {\n\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\njQuery.each( [\n\t\"tabIndex\",\n\t\"readOnly\",\n\t\"maxLength\",\n\t\"cellSpacing\",\n\t\"cellPadding\",\n\t\"rowSpan\",\n\t\"colSpan\",\n\t\"useMap\",\n\t\"frameBorder\",\n\t\"contentEditable\"\n], function() {\n\tjQuery.propFix[ this.toLowerCase() ] = this;\n} );\n\n\n\n\n\t// Strip and collapse whitespace according to HTML spec\n\t// https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace\n\tfunction stripAndCollapse( value ) {\n\t\tvar tokens = value.match( rnothtmlwhite ) || [];\n\t\treturn tokens.join( \" \" );\n\t}\n\n\nfunction getClass( elem ) {\n\treturn elem.getAttribute && elem.getAttribute( \"class\" ) || \"\";\n}\n\nfunction classesToArray( value ) {\n\tif ( Array.isArray( value ) ) {\n\t\treturn value;\n\t}\n\tif ( typeof value === \"string\" ) {\n\t\treturn value.match( rnothtmlwhite ) || [];\n\t}\n\treturn [];\n}\n\njQuery.fn.extend( {\n\taddClass: function( value ) {\n\t\tvar classes, elem, cur, curValue, clazz, j, finalValue,\n\t\t\ti = 0;\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).addClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tclasses = classesToArray( value );\n\n\t\tif ( classes.length ) {\n\t\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\t\tcurValue = getClass( elem );\n\t\t\t\tcur = elem.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( ( clazz = classes[ j++ ] ) ) {\n\t\t\t\t\t\tif ( cur.indexOf( \" \" + clazz + \" \" ) < 0 ) {\n\t\t\t\t\t\t\tcur += clazz + \" \";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\telem.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tremoveClass: function( value ) {\n\t\tvar classes, elem, cur, curValue, clazz, j, finalValue,\n\t\t\ti = 0;\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tif ( !arguments.length ) {\n\t\t\treturn this.attr( \"class\", \"\" );\n\t\t}\n\n\t\tclasses = classesToArray( value );\n\n\t\tif ( classes.length ) {\n\t\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\t\tcurValue = getClass( elem );\n\n\t\t\t\t// This expression is here for better compressibility (see addClass)\n\t\t\t\tcur = elem.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( ( clazz = classes[ j++ ] ) ) {\n\n\t\t\t\t\t\t// Remove *all* instances\n\t\t\t\t\t\twhile ( cur.indexOf( \" \" + clazz + \" \" ) > -1 ) {\n\t\t\t\t\t\t\tcur = cur.replace( \" \" + clazz + \" \", \" \" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\telem.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\ttoggleClass: function( value, stateVal ) {\n\t\tvar type = typeof value,\n\t\t\tisValidValue = type === \"string\" || Array.isArray( value );\n\n\t\tif ( typeof stateVal === \"boolean\" && isValidValue ) {\n\t\t\treturn stateVal ? this.addClass( value ) : this.removeClass( value );\n\t\t}\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).toggleClass(\n\t\t\t\t\tvalue.call( this, i, getClass( this ), stateVal ),\n\t\t\t\t\tstateVal\n\t\t\t\t);\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar className, i, self, classNames;\n\n\t\t\tif ( isValidValue ) {\n\n\t\t\t\t// Toggle individual class names\n\t\t\t\ti = 0;\n\t\t\t\tself = jQuery( this );\n\t\t\t\tclassNames = classesToArray( value );\n\n\t\t\t\twhile ( ( className = classNames[ i++ ] ) ) {\n\n\t\t\t\t\t// Check each className given, space separated list\n\t\t\t\t\tif ( self.hasClass( className ) ) {\n\t\t\t\t\t\tself.removeClass( className );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself.addClass( className );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// Toggle whole class name\n\t\t\t} else if ( value === undefined || type === \"boolean\" ) {\n\t\t\t\tclassName = getClass( this );\n\t\t\t\tif ( className ) {\n\n\t\t\t\t\t// Store className if set\n\t\t\t\t\tdataPriv.set( this, \"__className__\", className );\n\t\t\t\t}\n\n\t\t\t\t// If the element has a class name or if we're passed `false`,\n\t\t\t\t// then remove the whole classname (if there was one, the above saved it).\n\t\t\t\t// Otherwise bring back whatever was previously saved (if anything),\n\t\t\t\t// falling back to the empty string if nothing was stored.\n\t\t\t\tif ( this.setAttribute ) {\n\t\t\t\t\tthis.setAttribute( \"class\",\n\t\t\t\t\t\tclassName || value === false ?\n\t\t\t\t\t\t\"\" :\n\t\t\t\t\t\tdataPriv.get( this, \"__className__\" ) || \"\"\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\thasClass: function( selector ) {\n\t\tvar className, elem,\n\t\t\ti = 0;\n\n\t\tclassName = \" \" + selector + \" \";\n\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\tif ( elem.nodeType === 1 &&\n\t\t\t\t( \" \" + stripAndCollapse( getClass( elem ) ) + \" \" ).indexOf( className ) > -1 ) {\n\t\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n} );\n\n\n\n\nvar rreturn = /\\r/g;\n\njQuery.fn.extend( {\n\tval: function( value ) {\n\t\tvar hooks, ret, valueIsFunction,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !arguments.length ) {\n\t\t\tif ( elem ) {\n\t\t\t\thooks = jQuery.valHooks[ elem.type ] ||\n\t\t\t\t\tjQuery.valHooks[ elem.nodeName.toLowerCase() ];\n\n\t\t\t\tif ( hooks &&\n\t\t\t\t\t\"get\" in hooks &&\n\t\t\t\t\t( ret = hooks.get( elem, \"value\" ) ) !== undefined\n\t\t\t\t) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\tret = elem.value;\n\n\t\t\t\t// Handle most common string cases\n\t\t\t\tif ( typeof ret === \"string\" ) {\n\t\t\t\t\treturn ret.replace( rreturn, \"\" );\n\t\t\t\t}\n\n\t\t\t\t// Handle cases where value is null/undef or number\n\t\t\t\treturn ret == null ? \"\" : ret;\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tvalueIsFunction = isFunction( value );\n\n\t\treturn this.each( function( i ) {\n\t\t\tvar val;\n\n\t\t\tif ( this.nodeType !== 1 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( valueIsFunction ) {\n\t\t\t\tval = value.call( this, i, jQuery( this ).val() );\n\t\t\t} else {\n\t\t\t\tval = value;\n\t\t\t}\n\n\t\t\t// Treat null/undefined as \"\"; convert numbers to string\n\t\t\tif ( val == null ) {\n\t\t\t\tval = \"\";\n\n\t\t\t} else if ( typeof val === \"number\" ) {\n\t\t\t\tval += \"\";\n\n\t\t\t} else if ( Array.isArray( val ) ) {\n\t\t\t\tval = jQuery.map( val, function( value ) {\n\t\t\t\t\treturn value == null ? \"\" : value + \"\";\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\thooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];\n\n\t\t\t// If set returns undefined, fall back to normal setting\n\t\t\tif ( !hooks || !( \"set\" in hooks ) || hooks.set( this, val, \"value\" ) === undefined ) {\n\t\t\t\tthis.value = val;\n\t\t\t}\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tvalHooks: {\n\t\toption: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\tvar val = jQuery.find.attr( elem, \"value\" );\n\t\t\t\treturn val != null ?\n\t\t\t\t\tval :\n\n\t\t\t\t\t// Support: IE <=10 - 11 only\n\t\t\t\t\t// option.text throws exceptions (#14686, #14858)\n\t\t\t\t\t// Strip and collapse whitespace\n\t\t\t\t\t// https://html.spec.whatwg.org/#strip-and-collapse-whitespace\n\t\t\t\t\tstripAndCollapse( jQuery.text( elem ) );\n\t\t\t}\n\t\t},\n\t\tselect: {\n\t\t\tget: function( elem ) {\n\t\t\t\tvar value, option, i,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tindex = elem.selectedIndex,\n\t\t\t\t\tone = elem.type === \"select-one\",\n\t\t\t\t\tvalues = one ? null : [],\n\t\t\t\t\tmax = one ? index + 1 : options.length;\n\n\t\t\t\tif ( index < 0 ) {\n\t\t\t\t\ti = max;\n\n\t\t\t\t} else {\n\t\t\t\t\ti = one ? index : 0;\n\t\t\t\t}\n\n\t\t\t\t// Loop through all the selected options\n\t\t\t\tfor ( ; i < max; i++ ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t// IE8-9 doesn't update selected after form reset (#2551)\n\t\t\t\t\tif ( ( option.selected || i === index ) &&\n\n\t\t\t\t\t\t\t// Don't return options that are disabled or in a disabled optgroup\n\t\t\t\t\t\t\t!option.disabled &&\n\t\t\t\t\t\t\t( !option.parentNode.disabled ||\n\t\t\t\t\t\t\t\t!nodeName( option.parentNode, \"optgroup\" ) ) ) {\n\n\t\t\t\t\t\t// Get the specific value for the option\n\t\t\t\t\t\tvalue = jQuery( option ).val();\n\n\t\t\t\t\t\t// We don't need an array for one selects\n\t\t\t\t\t\tif ( one ) {\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Multi-Selects return an array\n\t\t\t\t\t\tvalues.push( value );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn values;\n\t\t\t},\n\n\t\t\tset: function( elem, value ) {\n\t\t\t\tvar optionSet, option,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tvalues = jQuery.makeArray( value ),\n\t\t\t\t\ti = options.length;\n\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t/* eslint-disable no-cond-assign */\n\n\t\t\t\t\tif ( option.selected =\n\t\t\t\t\t\tjQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1\n\t\t\t\t\t) {\n\t\t\t\t\t\toptionSet = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t/* eslint-enable no-cond-assign */\n\t\t\t\t}\n\n\t\t\t\t// Force browsers to behave consistently when non-matching value is set\n\t\t\t\tif ( !optionSet ) {\n\t\t\t\t\telem.selectedIndex = -1;\n\t\t\t\t}\n\t\t\t\treturn values;\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Radios and checkboxes getter/setter\njQuery.each( [ \"radio\", \"checkbox\" ], function() {\n\tjQuery.valHooks[ this ] = {\n\t\tset: function( elem, value ) {\n\t\t\tif ( Array.isArray( value ) ) {\n\t\t\t\treturn ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );\n\t\t\t}\n\t\t}\n\t};\n\tif ( !support.checkOn ) {\n\t\tjQuery.valHooks[ this ].get = function( elem ) {\n\t\t\treturn elem.getAttribute( \"value\" ) === null ? \"on\" : elem.value;\n\t\t};\n\t}\n} );\n\n\n\n\n// Return jQuery for attributes-only inclusion\n\n\nsupport.focusin = \"onfocusin\" in window;\n\n\nvar rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,\n\tstopPropagationCallback = function( e ) {\n\t\te.stopPropagation();\n\t};\n\njQuery.extend( jQuery.event, {\n\n\ttrigger: function( event, data, elem, onlyHandlers ) {\n\n\t\tvar i, cur, tmp, bubbleType, ontype, handle, special, lastElement,\n\t\t\teventPath = [ elem || document ],\n\t\t\ttype = hasOwn.call( event, \"type\" ) ? event.type : event,\n\t\t\tnamespaces = hasOwn.call( event, \"namespace\" ) ? event.namespace.split( \".\" ) : [];\n\n\t\tcur = lastElement = tmp = elem = elem || document;\n\n\t\t// Don't do events on text and comment nodes\n\t\tif ( elem.nodeType === 3 || elem.nodeType === 8 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// focus/blur morphs to focusin/out; ensure we're not firing them right now\n\t\tif ( rfocusMorph.test( type + jQuery.event.triggered ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( type.indexOf( \".\" ) > -1 ) {\n\n\t\t\t// Namespaced trigger; create a regexp to match event type in handle()\n\t\t\tnamespaces = type.split( \".\" );\n\t\t\ttype = namespaces.shift();\n\t\t\tnamespaces.sort();\n\t\t}\n\t\tontype = type.indexOf( \":\" ) < 0 && \"on\" + type;\n\n\t\t// Caller can pass in a jQuery.Event object, Object, or just an event type string\n\t\tevent = event[ jQuery.expando ] ?\n\t\t\tevent :\n\t\t\tnew jQuery.Event( type, typeof event === \"object\" && event );\n\n\t\t// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\n\t\tevent.isTrigger = onlyHandlers ? 2 : 3;\n\t\tevent.namespace = namespaces.join( \".\" );\n\t\tevent.rnamespace = event.namespace ?\n\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" ) :\n\t\t\tnull;\n\n\t\t// Clean up the event in case it is being reused\n\t\tevent.result = undefined;\n\t\tif ( !event.target ) {\n\t\t\tevent.target = elem;\n\t\t}\n\n\t\t// Clone any incoming data and prepend the event, creating the handler arg list\n\t\tdata = data == null ?\n\t\t\t[ event ] :\n\t\t\tjQuery.makeArray( data, [ event ] );\n\n\t\t// Allow special events to draw outside the lines\n\t\tspecial = jQuery.event.special[ type ] || {};\n\t\tif ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine event propagation path in advance, per W3C events spec (#9951)\n\t\t// Bubble up to document, then to window; watch for a global ownerDocument var (#9724)\n\t\tif ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) {\n\n\t\t\tbubbleType = special.delegateType || type;\n\t\t\tif ( !rfocusMorph.test( bubbleType + type ) ) {\n\t\t\t\tcur = cur.parentNode;\n\t\t\t}\n\t\t\tfor ( ; cur; cur = cur.parentNode ) {\n\t\t\t\teventPath.push( cur );\n\t\t\t\ttmp = cur;\n\t\t\t}\n\n\t\t\t// Only add window if we got to document (e.g., not plain obj or detached DOM)\n\t\t\tif ( tmp === ( elem.ownerDocument || document ) ) {\n\t\t\t\teventPath.push( tmp.defaultView || tmp.parentWindow || window );\n\t\t\t}\n\t\t}\n\n\t\t// Fire handlers on the event path\n\t\ti = 0;\n\t\twhile ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tlastElement = cur;\n\t\t\tevent.type = i > 1 ?\n\t\t\t\tbubbleType :\n\t\t\t\tspecial.bindType || type;\n\n\t\t\t// jQuery handler\n\t\t\thandle = ( dataPriv.get( cur, \"events\" ) || {} )[ event.type ] &&\n\t\t\t\tdataPriv.get( cur, \"handle\" );\n\t\t\tif ( handle ) {\n\t\t\t\thandle.apply( cur, data );\n\t\t\t}\n\n\t\t\t// Native handler\n\t\t\thandle = ontype && cur[ ontype ];\n\t\t\tif ( handle && handle.apply && acceptData( cur ) ) {\n\t\t\t\tevent.result = handle.apply( cur, data );\n\t\t\t\tif ( event.result === false ) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tevent.type = type;\n\n\t\t// If nobody prevented the default action, do it now\n\t\tif ( !onlyHandlers && !event.isDefaultPrevented() ) {\n\n\t\t\tif ( ( !special._default ||\n\t\t\t\tspecial._default.apply( eventPath.pop(), data ) === false ) &&\n\t\t\t\tacceptData( elem ) ) {\n\n\t\t\t\t// Call a native DOM method on the target with the same name as the event.\n\t\t\t\t// Don't do default actions on window, that's where global variables be (#6170)\n\t\t\t\tif ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) {\n\n\t\t\t\t\t// Don't re-trigger an onFOO event when we call its FOO() method\n\t\t\t\t\ttmp = elem[ ontype ];\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prevent re-triggering of the same event, since we already bubbled it above\n\t\t\t\t\tjQuery.event.triggered = type;\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.addEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\telem[ type ]();\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.removeEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\tjQuery.event.triggered = undefined;\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = tmp;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\t// Piggyback on a donor event to simulate a different one\n\t// Used only for `focus(in | out)` events\n\tsimulate: function( type, elem, event ) {\n\t\tvar e = jQuery.extend(\n\t\t\tnew jQuery.Event(),\n\t\t\tevent,\n\t\t\t{\n\t\t\t\ttype: type,\n\t\t\t\tisSimulated: true\n\t\t\t}\n\t\t);\n\n\t\tjQuery.event.trigger( e, null, elem );\n\t}\n\n} );\n\njQuery.fn.extend( {\n\n\ttrigger: function( type, data ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.trigger( type, data, this );\n\t\t} );\n\t},\n\ttriggerHandler: function( type, data ) {\n\t\tvar elem = this[ 0 ];\n\t\tif ( elem ) {\n\t\t\treturn jQuery.event.trigger( type, data, elem, true );\n\t\t}\n\t}\n} );\n\n\n// Support: Firefox <=44\n// Firefox doesn't have focus(in | out) events\n// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787\n//\n// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1\n// focus(in | out) events fire after focus & blur events,\n// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order\n// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857\nif ( !support.focusin ) {\n\tjQuery.each( { focus: \"focusin\", blur: \"focusout\" }, function( orig, fix ) {\n\n\t\t// Attach a single capturing handler on the document while someone wants focusin/focusout\n\t\tvar handler = function( event ) {\n\t\t\tjQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) );\n\t\t};\n\n\t\tjQuery.event.special[ fix ] = {\n\t\t\tsetup: function() {\n\t\t\t\tvar doc = this.ownerDocument || this,\n\t\t\t\t\tattaches = dataPriv.access( doc, fix );\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.addEventListener( orig, handler, true );\n\t\t\t\t}\n\t\t\t\tdataPriv.access( doc, fix, ( attaches || 0 ) + 1 );\n\t\t\t},\n\t\t\tteardown: function() {\n\t\t\t\tvar doc = this.ownerDocument || this,\n\t\t\t\t\tattaches = dataPriv.access( doc, fix ) - 1;\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.removeEventListener( orig, handler, true );\n\t\t\t\t\tdataPriv.remove( doc, fix );\n\n\t\t\t\t} else {\n\t\t\t\t\tdataPriv.access( doc, fix, attaches );\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t} );\n}\nvar location = window.location;\n\nvar nonce = Date.now();\n\nvar rquery = ( /\\?/ );\n\n\n\n// Cross-browser xml parsing\njQuery.parseXML = function( data ) {\n\tvar xml;\n\tif ( !data || typeof data !== \"string\" ) {\n\t\treturn null;\n\t}\n\n\t// Support: IE 9 - 11 only\n\t// IE throws on parseFromString with invalid input.\n\ttry {\n\t\txml = ( new window.DOMParser() ).parseFromString( data, \"text/xml\" );\n\t} catch ( e ) {\n\t\txml = undefined;\n\t}\n\n\tif ( !xml || xml.getElementsByTagName( \"parsererror\" ).length ) {\n\t\tjQuery.error( \"Invalid XML: \" + data );\n\t}\n\treturn xml;\n};\n\n\nvar\n\trbracket = /\\[\\]$/,\n\trCRLF = /\\r?\\n/g,\n\trsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,\n\trsubmittable = /^(?:input|select|textarea|keygen)/i;\n\nfunction buildParams( prefix, obj, traditional, add ) {\n\tvar name;\n\n\tif ( Array.isArray( obj ) ) {\n\n\t\t// Serialize array item.\n\t\tjQuery.each( obj, function( i, v ) {\n\t\t\tif ( traditional || rbracket.test( prefix ) ) {\n\n\t\t\t\t// Treat each array item as a scalar.\n\t\t\t\tadd( prefix, v );\n\n\t\t\t} else {\n\n\t\t\t\t// Item is non-scalar (array or object), encode its numeric index.\n\t\t\t\tbuildParams(\n\t\t\t\t\tprefix + \"[\" + ( typeof v === \"object\" && v != null ? i : \"\" ) + \"]\",\n\t\t\t\t\tv,\n\t\t\t\t\ttraditional,\n\t\t\t\t\tadd\n\t\t\t\t);\n\t\t\t}\n\t\t} );\n\n\t} else if ( !traditional && toType( obj ) === \"object\" ) {\n\n\t\t// Serialize object item.\n\t\tfor ( name in obj ) {\n\t\t\tbuildParams( prefix + \"[\" + name + \"]\", obj[ name ], traditional, add );\n\t\t}\n\n\t} else {\n\n\t\t// Serialize scalar item.\n\t\tadd( prefix, obj );\n\t}\n}\n\n// Serialize an array of form elements or a set of\n// key/values into a query string\njQuery.param = function( a, traditional ) {\n\tvar prefix,\n\t\ts = [],\n\t\tadd = function( key, valueOrFunction ) {\n\n\t\t\t// If value is a function, invoke it and use its return value\n\t\t\tvar value = isFunction( valueOrFunction ) ?\n\t\t\t\tvalueOrFunction() :\n\t\t\t\tvalueOrFunction;\n\n\t\t\ts[ s.length ] = encodeURIComponent( key ) + \"=\" +\n\t\t\t\tencodeURIComponent( value == null ? \"\" : value );\n\t\t};\n\n\tif ( a == null ) {\n\t\treturn \"\";\n\t}\n\n\t// If an array was passed in, assume that it is an array of form elements.\n\tif ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {\n\n\t\t// Serialize the form elements\n\t\tjQuery.each( a, function() {\n\t\t\tadd( this.name, this.value );\n\t\t} );\n\n\t} else {\n\n\t\t// If traditional, encode the \"old\" way (the way 1.3.2 or older\n\t\t// did it), otherwise encode params recursively.\n\t\tfor ( prefix in a ) {\n\t\t\tbuildParams( prefix, a[ prefix ], traditional, add );\n\t\t}\n\t}\n\n\t// Return the resulting serialization\n\treturn s.join( \"&\" );\n};\n\njQuery.fn.extend( {\n\tserialize: function() {\n\t\treturn jQuery.param( this.serializeArray() );\n\t},\n\tserializeArray: function() {\n\t\treturn this.map( function() {\n\n\t\t\t// Can add propHook for \"elements\" to filter or add form elements\n\t\t\tvar elements = jQuery.prop( this, \"elements\" );\n\t\t\treturn elements ? jQuery.makeArray( elements ) : this;\n\t\t} )\n\t\t.filter( function() {\n\t\t\tvar type = this.type;\n\n\t\t\t// Use .is( \":disabled\" ) so that fieldset[disabled] works\n\t\t\treturn this.name && !jQuery( this ).is( \":disabled\" ) &&\n\t\t\t\trsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&\n\t\t\t\t( this.checked || !rcheckableType.test( type ) );\n\t\t} )\n\t\t.map( function( i, elem ) {\n\t\t\tvar val = jQuery( this ).val();\n\n\t\t\tif ( val == null ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tif ( Array.isArray( val ) ) {\n\t\t\t\treturn jQuery.map( val, function( val ) {\n\t\t\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t} ).get();\n\t}\n} );\n\n\nvar\n\tr20 = /%20/g,\n\trhash = /#.*$/,\n\trantiCache = /([?&])_=[^&]*/,\n\trheaders = /^(.*?):[ \\t]*([^\\r\\n]*)$/mg,\n\n\t// #7653, #8125, #8152: local protocol detection\n\trlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,\n\trnoContent = /^(?:GET|HEAD)$/,\n\trprotocol = /^\\/\\//,\n\n\t/* Prefilters\n\t * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\n\t * 2) These are called:\n\t * - BEFORE asking for a transport\n\t * - AFTER param serialization (s.data is a string if s.processData is true)\n\t * 3) key is the dataType\n\t * 4) the catchall symbol \"*\" can be used\n\t * 5) execution will start with transport dataType and THEN continue down to \"*\" if needed\n\t */\n\tprefilters = {},\n\n\t/* Transports bindings\n\t * 1) key is the dataType\n\t * 2) the catchall symbol \"*\" can be used\n\t * 3) selection will start with transport dataType and THEN go to \"*\" if needed\n\t */\n\ttransports = {},\n\n\t// Avoid comment-prolog char sequence (#10098); must appease lint and evade compression\n\tallTypes = \"*/\".concat( \"*\" ),\n\n\t// Anchor tag for parsing the document origin\n\toriginAnchor = document.createElement( \"a\" );\n\toriginAnchor.href = location.href;\n\n// Base \"constructor\" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\nfunction addToPrefiltersOrTransports( structure ) {\n\n\t// dataTypeExpression is optional and defaults to \"*\"\n\treturn function( dataTypeExpression, func ) {\n\n\t\tif ( typeof dataTypeExpression !== \"string\" ) {\n\t\t\tfunc = dataTypeExpression;\n\t\t\tdataTypeExpression = \"*\";\n\t\t}\n\n\t\tvar dataType,\n\t\t\ti = 0,\n\t\t\tdataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || [];\n\n\t\tif ( isFunction( func ) ) {\n\n\t\t\t// For each dataType in the dataTypeExpression\n\t\t\twhile ( ( dataType = dataTypes[ i++ ] ) ) {\n\n\t\t\t\t// Prepend if requested\n\t\t\t\tif ( dataType[ 0 ] === \"+\" ) {\n\t\t\t\t\tdataType = dataType.slice( 1 ) || \"*\";\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );\n\n\t\t\t\t// Otherwise append\n\t\t\t\t} else {\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).push( func );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\n// Base inspection function for prefilters and transports\nfunction inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {\n\n\tvar inspected = {},\n\t\tseekingTransport = ( structure === transports );\n\n\tfunction inspect( dataType ) {\n\t\tvar selected;\n\t\tinspected[ dataType ] = true;\n\t\tjQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {\n\t\t\tvar dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );\n\t\t\tif ( typeof dataTypeOrTransport === \"string\" &&\n\t\t\t\t!seekingTransport && !inspected[ dataTypeOrTransport ] ) {\n\n\t\t\t\toptions.dataTypes.unshift( dataTypeOrTransport );\n\t\t\t\tinspect( dataTypeOrTransport );\n\t\t\t\treturn false;\n\t\t\t} else if ( seekingTransport ) {\n\t\t\t\treturn !( selected = dataTypeOrTransport );\n\t\t\t}\n\t\t} );\n\t\treturn selected;\n\t}\n\n\treturn inspect( options.dataTypes[ 0 ] ) || !inspected[ \"*\" ] && inspect( \"*\" );\n}\n\n// A special extend for ajax options\n// that takes \"flat\" options (not to be deep extended)\n// Fixes #9887\nfunction ajaxExtend( target, src ) {\n\tvar key, deep,\n\t\tflatOptions = jQuery.ajaxSettings.flatOptions || {};\n\n\tfor ( key in src ) {\n\t\tif ( src[ key ] !== undefined ) {\n\t\t\t( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];\n\t\t}\n\t}\n\tif ( deep ) {\n\t\tjQuery.extend( true, target, deep );\n\t}\n\n\treturn target;\n}\n\n/* Handles responses to an ajax request:\n * - finds the right dataType (mediates between content-type and expected dataType)\n * - returns the corresponding response\n */\nfunction ajaxHandleResponses( s, jqXHR, responses ) {\n\n\tvar ct, type, finalDataType, firstDataType,\n\t\tcontents = s.contents,\n\t\tdataTypes = s.dataTypes;\n\n\t// Remove auto dataType and get content-type in the process\n\twhile ( dataTypes[ 0 ] === \"*\" ) {\n\t\tdataTypes.shift();\n\t\tif ( ct === undefined ) {\n\t\t\tct = s.mimeType || jqXHR.getResponseHeader( \"Content-Type\" );\n\t\t}\n\t}\n\n\t// Check if we're dealing with a known content-type\n\tif ( ct ) {\n\t\tfor ( type in contents ) {\n\t\t\tif ( contents[ type ] && contents[ type ].test( ct ) ) {\n\t\t\t\tdataTypes.unshift( type );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Check to see if we have a response for the expected dataType\n\tif ( dataTypes[ 0 ] in responses ) {\n\t\tfinalDataType = dataTypes[ 0 ];\n\t} else {\n\n\t\t// Try convertible dataTypes\n\t\tfor ( type in responses ) {\n\t\t\tif ( !dataTypes[ 0 ] || s.converters[ type + \" \" + dataTypes[ 0 ] ] ) {\n\t\t\t\tfinalDataType = type;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( !firstDataType ) {\n\t\t\t\tfirstDataType = type;\n\t\t\t}\n\t\t}\n\n\t\t// Or just use first one\n\t\tfinalDataType = finalDataType || firstDataType;\n\t}\n\n\t// If we found a dataType\n\t// We add the dataType to the list if needed\n\t// and return the corresponding response\n\tif ( finalDataType ) {\n\t\tif ( finalDataType !== dataTypes[ 0 ] ) {\n\t\t\tdataTypes.unshift( finalDataType );\n\t\t}\n\t\treturn responses[ finalDataType ];\n\t}\n}\n\n/* Chain conversions given the request and the original response\n * Also sets the responseXXX fields on the jqXHR instance\n */\nfunction ajaxConvert( s, response, jqXHR, isSuccess ) {\n\tvar conv2, current, conv, tmp, prev,\n\t\tconverters = {},\n\n\t\t// Work with a copy of dataTypes in case we need to modify it for conversion\n\t\tdataTypes = s.dataTypes.slice();\n\n\t// Create converters map with lowercased keys\n\tif ( dataTypes[ 1 ] ) {\n\t\tfor ( conv in s.converters ) {\n\t\t\tconverters[ conv.toLowerCase() ] = s.converters[ conv ];\n\t\t}\n\t}\n\n\tcurrent = dataTypes.shift();\n\n\t// Convert to each sequential dataType\n\twhile ( current ) {\n\n\t\tif ( s.responseFields[ current ] ) {\n\t\t\tjqXHR[ s.responseFields[ current ] ] = response;\n\t\t}\n\n\t\t// Apply the dataFilter if provided\n\t\tif ( !prev && isSuccess && s.dataFilter ) {\n\t\t\tresponse = s.dataFilter( response, s.dataType );\n\t\t}\n\n\t\tprev = current;\n\t\tcurrent = dataTypes.shift();\n\n\t\tif ( current ) {\n\n\t\t\t// There's only work to do if current dataType is non-auto\n\t\t\tif ( current === \"*\" ) {\n\n\t\t\t\tcurrent = prev;\n\n\t\t\t// Convert response if prev dataType is non-auto and differs from current\n\t\t\t} else if ( prev !== \"*\" && prev !== current ) {\n\n\t\t\t\t// Seek a direct converter\n\t\t\t\tconv = converters[ prev + \" \" + current ] || converters[ \"* \" + current ];\n\n\t\t\t\t// If none found, seek a pair\n\t\t\t\tif ( !conv ) {\n\t\t\t\t\tfor ( conv2 in converters ) {\n\n\t\t\t\t\t\t// If conv2 outputs current\n\t\t\t\t\t\ttmp = conv2.split( \" \" );\n\t\t\t\t\t\tif ( tmp[ 1 ] === current ) {\n\n\t\t\t\t\t\t\t// If prev can be converted to accepted input\n\t\t\t\t\t\t\tconv = converters[ prev + \" \" + tmp[ 0 ] ] ||\n\t\t\t\t\t\t\t\tconverters[ \"* \" + tmp[ 0 ] ];\n\t\t\t\t\t\t\tif ( conv ) {\n\n\t\t\t\t\t\t\t\t// Condense equivalence converters\n\t\t\t\t\t\t\t\tif ( conv === true ) {\n\t\t\t\t\t\t\t\t\tconv = converters[ conv2 ];\n\n\t\t\t\t\t\t\t\t// Otherwise, insert the intermediate dataType\n\t\t\t\t\t\t\t\t} else if ( converters[ conv2 ] !== true ) {\n\t\t\t\t\t\t\t\t\tcurrent = tmp[ 0 ];\n\t\t\t\t\t\t\t\t\tdataTypes.unshift( tmp[ 1 ] );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Apply converter (if not an equivalence)\n\t\t\t\tif ( conv !== true ) {\n\n\t\t\t\t\t// Unless errors are allowed to bubble, catch and return them\n\t\t\t\t\tif ( conv && s.throws ) {\n\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tstate: \"parsererror\",\n\t\t\t\t\t\t\t\terror: conv ? e : \"No conversion from \" + prev + \" to \" + current\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn { state: \"success\", data: response };\n}\n\njQuery.extend( {\n\n\t// Counter for holding the number of active queries\n\tactive: 0,\n\n\t// Last-Modified header cache for next request\n\tlastModified: {},\n\tetag: {},\n\n\tajaxSettings: {\n\t\turl: location.href,\n\t\ttype: \"GET\",\n\t\tisLocal: rlocalProtocol.test( location.protocol ),\n\t\tglobal: true,\n\t\tprocessData: true,\n\t\tasync: true,\n\t\tcontentType: \"application/x-www-form-urlencoded; charset=UTF-8\",\n\n\t\t/*\n\t\ttimeout: 0,\n\t\tdata: null,\n\t\tdataType: null,\n\t\tusername: null,\n\t\tpassword: null,\n\t\tcache: null,\n\t\tthrows: false,\n\t\ttraditional: false,\n\t\theaders: {},\n\t\t*/\n\n\t\taccepts: {\n\t\t\t\"*\": allTypes,\n\t\t\ttext: \"text/plain\",\n\t\t\thtml: \"text/html\",\n\t\t\txml: \"application/xml, text/xml\",\n\t\t\tjson: \"application/json, text/javascript\"\n\t\t},\n\n\t\tcontents: {\n\t\t\txml: /\\bxml\\b/,\n\t\t\thtml: /\\bhtml/,\n\t\t\tjson: /\\bjson\\b/\n\t\t},\n\n\t\tresponseFields: {\n\t\t\txml: \"responseXML\",\n\t\t\ttext: \"responseText\",\n\t\t\tjson: \"responseJSON\"\n\t\t},\n\n\t\t// Data converters\n\t\t// Keys separate source (or catchall \"*\") and destination types with a single space\n\t\tconverters: {\n\n\t\t\t// Convert anything to text\n\t\t\t\"* text\": String,\n\n\t\t\t// Text to html (true = no transformation)\n\t\t\t\"text html\": true,\n\n\t\t\t// Evaluate text as a json expression\n\t\t\t\"text json\": JSON.parse,\n\n\t\t\t// Parse text as xml\n\t\t\t\"text xml\": jQuery.parseXML\n\t\t},\n\n\t\t// For options that shouldn't be deep extended:\n\t\t// you can add your own custom options here if\n\t\t// and when you create one that shouldn't be\n\t\t// deep extended (see ajaxExtend)\n\t\tflatOptions: {\n\t\t\turl: true,\n\t\t\tcontext: true\n\t\t}\n\t},\n\n\t// Creates a full fledged settings object into target\n\t// with both ajaxSettings and settings fields.\n\t// If target is omitted, writes into ajaxSettings.\n\tajaxSetup: function( target, settings ) {\n\t\treturn settings ?\n\n\t\t\t// Building a settings object\n\t\t\tajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :\n\n\t\t\t// Extending ajaxSettings\n\t\t\tajaxExtend( jQuery.ajaxSettings, target );\n\t},\n\n\tajaxPrefilter: addToPrefiltersOrTransports( prefilters ),\n\tajaxTransport: addToPrefiltersOrTransports( transports ),\n\n\t// Main method\n\tajax: function( url, options ) {\n\n\t\t// If url is an object, simulate pre-1.5 signature\n\t\tif ( typeof url === \"object\" ) {\n\t\t\toptions = url;\n\t\t\turl = undefined;\n\t\t}\n\n\t\t// Force options to be an object\n\t\toptions = options || {};\n\n\t\tvar transport,\n\n\t\t\t// URL without anti-cache param\n\t\t\tcacheURL,\n\n\t\t\t// Response headers\n\t\t\tresponseHeadersString,\n\t\t\tresponseHeaders,\n\n\t\t\t// timeout handle\n\t\t\ttimeoutTimer,\n\n\t\t\t// Url cleanup var\n\t\t\turlAnchor,\n\n\t\t\t// Request state (becomes false upon send and true upon completion)\n\t\t\tcompleted,\n\n\t\t\t// To know if global events are to be dispatched\n\t\t\tfireGlobals,\n\n\t\t\t// Loop variable\n\t\t\ti,\n\n\t\t\t// uncached part of the url\n\t\t\tuncached,\n\n\t\t\t// Create the final options object\n\t\t\ts = jQuery.ajaxSetup( {}, options ),\n\n\t\t\t// Callbacks context\n\t\t\tcallbackContext = s.context || s,\n\n\t\t\t// Context for global events is callbackContext if it is a DOM node or jQuery collection\n\t\t\tglobalEventContext = s.context &&\n\t\t\t\t( callbackContext.nodeType || callbackContext.jquery ) ?\n\t\t\t\t\tjQuery( callbackContext ) :\n\t\t\t\t\tjQuery.event,\n\n\t\t\t// Deferreds\n\t\t\tdeferred = jQuery.Deferred(),\n\t\t\tcompleteDeferred = jQuery.Callbacks( \"once memory\" ),\n\n\t\t\t// Status-dependent callbacks\n\t\t\tstatusCode = s.statusCode || {},\n\n\t\t\t// Headers (they are sent all at once)\n\t\t\trequestHeaders = {},\n\t\t\trequestHeadersNames = {},\n\n\t\t\t// Default abort message\n\t\t\tstrAbort = \"canceled\",\n\n\t\t\t// Fake xhr\n\t\t\tjqXHR = {\n\t\t\t\treadyState: 0,\n\n\t\t\t\t// Builds headers hashtable if needed\n\t\t\t\tgetResponseHeader: function( key ) {\n\t\t\t\t\tvar match;\n\t\t\t\t\tif ( completed ) {\n\t\t\t\t\t\tif ( !responseHeaders ) {\n\t\t\t\t\t\t\tresponseHeaders = {};\n\t\t\t\t\t\t\twhile ( ( match = rheaders.exec( responseHeadersString ) ) ) {\n\t\t\t\t\t\t\t\tresponseHeaders[ match[ 1 ].toLowerCase() + \" \" ] =\n\t\t\t\t\t\t\t\t\t( responseHeaders[ match[ 1 ].toLowerCase() + \" \" ] || [] )\n\t\t\t\t\t\t\t\t\t\t.concat( match[ 2 ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmatch = responseHeaders[ key.toLowerCase() + \" \" ];\n\t\t\t\t\t}\n\t\t\t\t\treturn match == null ? null : match.join( \", \" );\n\t\t\t\t},\n\n\t\t\t\t// Raw string\n\t\t\t\tgetAllResponseHeaders: function() {\n\t\t\t\t\treturn completed ? responseHeadersString : null;\n\t\t\t\t},\n\n\t\t\t\t// Caches the header\n\t\t\t\tsetRequestHeader: function( name, value ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\tname = requestHeadersNames[ name.toLowerCase() ] =\n\t\t\t\t\t\t\trequestHeadersNames[ name.toLowerCase() ] || name;\n\t\t\t\t\t\trequestHeaders[ name ] = value;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Overrides response content-type header\n\t\t\t\toverrideMimeType: function( type ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\ts.mimeType = type;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tstatusCode: function( map ) {\n\t\t\t\t\tvar code;\n\t\t\t\t\tif ( map ) {\n\t\t\t\t\t\tif ( completed ) {\n\n\t\t\t\t\t\t\t// Execute the appropriate callbacks\n\t\t\t\t\t\t\tjqXHR.always( map[ jqXHR.status ] );\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Lazy-add the new callbacks in a way that preserves old ones\n\t\t\t\t\t\t\tfor ( code in map ) {\n\t\t\t\t\t\t\t\tstatusCode[ code ] = [ statusCode[ code ], map[ code ] ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Cancel the request\n\t\t\t\tabort: function( statusText ) {\n\t\t\t\t\tvar finalText = statusText || strAbort;\n\t\t\t\t\tif ( transport ) {\n\t\t\t\t\t\ttransport.abort( finalText );\n\t\t\t\t\t}\n\t\t\t\t\tdone( 0, finalText );\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t};\n\n\t\t// Attach deferreds\n\t\tdeferred.promise( jqXHR );\n\n\t\t// Add protocol if not provided (prefilters might expect it)\n\t\t// Handle falsy url in the settings object (#10093: consistency with old signature)\n\t\t// We also use the url parameter if available\n\t\ts.url = ( ( url || s.url || location.href ) + \"\" )\n\t\t\t.replace( rprotocol, location.protocol + \"//\" );\n\n\t\t// Alias method option to type as per ticket #12004\n\t\ts.type = options.method || options.type || s.method || s.type;\n\n\t\t// Extract dataTypes list\n\t\ts.dataTypes = ( s.dataType || \"*\" ).toLowerCase().match( rnothtmlwhite ) || [ \"\" ];\n\n\t\t// A cross-domain request is in order when the origin doesn't match the current origin.\n\t\tif ( s.crossDomain == null ) {\n\t\t\turlAnchor = document.createElement( \"a\" );\n\n\t\t\t// Support: IE <=8 - 11, Edge 12 - 15\n\t\t\t// IE throws exception on accessing the href property if url is malformed,\n\t\t\t// e.g. http://example.com:80x/\n\t\t\ttry {\n\t\t\t\turlAnchor.href = s.url;\n\n\t\t\t\t// Support: IE <=8 - 11 only\n\t\t\t\t// Anchor's host property isn't correctly set when s.url is relative\n\t\t\t\turlAnchor.href = urlAnchor.href;\n\t\t\t\ts.crossDomain = originAnchor.protocol + \"//\" + originAnchor.host !==\n\t\t\t\t\turlAnchor.protocol + \"//\" + urlAnchor.host;\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// If there is an error parsing the URL, assume it is crossDomain,\n\t\t\t\t// it can be rejected by the transport if it is invalid\n\t\t\t\ts.crossDomain = true;\n\t\t\t}\n\t\t}\n\n\t\t// Convert data if not already a string\n\t\tif ( s.data && s.processData && typeof s.data !== \"string\" ) {\n\t\t\ts.data = jQuery.param( s.data, s.traditional );\n\t\t}\n\n\t\t// Apply prefilters\n\t\tinspectPrefiltersOrTransports( prefilters, s, options, jqXHR );\n\n\t\t// If request was aborted inside a prefilter, stop there\n\t\tif ( completed ) {\n\t\t\treturn jqXHR;\n\t\t}\n\n\t\t// We can fire global events as of now if asked to\n\t\t// Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118)\n\t\tfireGlobals = jQuery.event && s.global;\n\n\t\t// Watch for a new set of requests\n\t\tif ( fireGlobals && jQuery.active++ === 0 ) {\n\t\t\tjQuery.event.trigger( \"ajaxStart\" );\n\t\t}\n\n\t\t// Uppercase the type\n\t\ts.type = s.type.toUpperCase();\n\n\t\t// Determine if request has content\n\t\ts.hasContent = !rnoContent.test( s.type );\n\n\t\t// Save the URL in case we're toying with the If-Modified-Since\n\t\t// and/or If-None-Match header later on\n\t\t// Remove hash to simplify url manipulation\n\t\tcacheURL = s.url.replace( rhash, \"\" );\n\n\t\t// More options handling for requests with no content\n\t\tif ( !s.hasContent ) {\n\n\t\t\t// Remember the hash so we can put it back\n\t\t\tuncached = s.url.slice( cacheURL.length );\n\n\t\t\t// If data is available and should be processed, append data to url\n\t\t\tif ( s.data && ( s.processData || typeof s.data === \"string\" ) ) {\n\t\t\t\tcacheURL += ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + s.data;\n\n\t\t\t\t// #9682: remove data so that it's not used in an eventual retry\n\t\t\t\tdelete s.data;\n\t\t\t}\n\n\t\t\t// Add or update anti-cache param if needed\n\t\t\tif ( s.cache === false ) {\n\t\t\t\tcacheURL = cacheURL.replace( rantiCache, \"$1\" );\n\t\t\t\tuncached = ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + \"_=\" + ( nonce++ ) + uncached;\n\t\t\t}\n\n\t\t\t// Put hash and anti-cache on the URL that will be requested (gh-1732)\n\t\t\ts.url = cacheURL + uncached;\n\n\t\t// Change '%20' to '+' if this is encoded form body content (gh-2658)\n\t\t} else if ( s.data && s.processData &&\n\t\t\t( s.contentType || \"\" ).indexOf( \"application/x-www-form-urlencoded\" ) === 0 ) {\n\t\t\ts.data = s.data.replace( r20, \"+\" );\n\t\t}\n\n\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\tif ( s.ifModified ) {\n\t\t\tif ( jQuery.lastModified[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-Modified-Since\", jQuery.lastModified[ cacheURL ] );\n\t\t\t}\n\t\t\tif ( jQuery.etag[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-None-Match\", jQuery.etag[ cacheURL ] );\n\t\t\t}\n\t\t}\n\n\t\t// Set the correct header, if data is being sent\n\t\tif ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {\n\t\t\tjqXHR.setRequestHeader( \"Content-Type\", s.contentType );\n\t\t}\n\n\t\t// Set the Accepts header for the server, depending on the dataType\n\t\tjqXHR.setRequestHeader(\n\t\t\t\"Accept\",\n\t\t\ts.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?\n\t\t\t\ts.accepts[ s.dataTypes[ 0 ] ] +\n\t\t\t\t\t( s.dataTypes[ 0 ] !== \"*\" ? \", \" + allTypes + \"; q=0.01\" : \"\" ) :\n\t\t\t\ts.accepts[ \"*\" ]\n\t\t);\n\n\t\t// Check for headers option\n\t\tfor ( i in s.headers ) {\n\t\t\tjqXHR.setRequestHeader( i, s.headers[ i ] );\n\t\t}\n\n\t\t// Allow custom headers/mimetypes and early abort\n\t\tif ( s.beforeSend &&\n\t\t\t( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) {\n\n\t\t\t// Abort if not done already and return\n\t\t\treturn jqXHR.abort();\n\t\t}\n\n\t\t// Aborting is no longer a cancellation\n\t\tstrAbort = \"abort\";\n\n\t\t// Install callbacks on deferreds\n\t\tcompleteDeferred.add( s.complete );\n\t\tjqXHR.done( s.success );\n\t\tjqXHR.fail( s.error );\n\n\t\t// Get transport\n\t\ttransport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );\n\n\t\t// If no transport, we auto-abort\n\t\tif ( !transport ) {\n\t\t\tdone( -1, \"No Transport\" );\n\t\t} else {\n\t\t\tjqXHR.readyState = 1;\n\n\t\t\t// Send global event\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxSend\", [ jqXHR, s ] );\n\t\t\t}\n\n\t\t\t// If request was aborted inside ajaxSend, stop there\n\t\t\tif ( completed ) {\n\t\t\t\treturn jqXHR;\n\t\t\t}\n\n\t\t\t// Timeout\n\t\t\tif ( s.async && s.timeout > 0 ) {\n\t\t\t\ttimeoutTimer = window.setTimeout( function() {\n\t\t\t\t\tjqXHR.abort( \"timeout\" );\n\t\t\t\t}, s.timeout );\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tcompleted = false;\n\t\t\t\ttransport.send( requestHeaders, done );\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// Rethrow post-completion exceptions\n\t\t\t\tif ( completed ) {\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\n\t\t\t\t// Propagate others as results\n\t\t\t\tdone( -1, e );\n\t\t\t}\n\t\t}\n\n\t\t// Callback for when everything is done\n\t\tfunction done( status, nativeStatusText, responses, headers ) {\n\t\t\tvar isSuccess, success, error, response, modified,\n\t\t\t\tstatusText = nativeStatusText;\n\n\t\t\t// Ignore repeat invocations\n\t\t\tif ( completed ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tcompleted = true;\n\n\t\t\t// Clear timeout if it exists\n\t\t\tif ( timeoutTimer ) {\n\t\t\t\twindow.clearTimeout( timeoutTimer );\n\t\t\t}\n\n\t\t\t// Dereference transport for early garbage collection\n\t\t\t// (no matter how long the jqXHR object will be used)\n\t\t\ttransport = undefined;\n\n\t\t\t// Cache response headers\n\t\t\tresponseHeadersString = headers || \"\";\n\n\t\t\t// Set readyState\n\t\t\tjqXHR.readyState = status > 0 ? 4 : 0;\n\n\t\t\t// Determine if successful\n\t\t\tisSuccess = status >= 200 && status < 300 || status === 304;\n\n\t\t\t// Get response data\n\t\t\tif ( responses ) {\n\t\t\t\tresponse = ajaxHandleResponses( s, jqXHR, responses );\n\t\t\t}\n\n\t\t\t// Convert no matter what (that way responseXXX fields are always set)\n\t\t\tresponse = ajaxConvert( s, response, jqXHR, isSuccess );\n\n\t\t\t// If successful, handle type chaining\n\t\t\tif ( isSuccess ) {\n\n\t\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\t\tif ( s.ifModified ) {\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"Last-Modified\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.lastModified[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"etag\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.etag[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// if no content\n\t\t\t\tif ( status === 204 || s.type === \"HEAD\" ) {\n\t\t\t\t\tstatusText = \"nocontent\";\n\n\t\t\t\t// if not modified\n\t\t\t\t} else if ( status === 304 ) {\n\t\t\t\t\tstatusText = \"notmodified\";\n\n\t\t\t\t// If we have data, let's convert it\n\t\t\t\t} else {\n\t\t\t\t\tstatusText = response.state;\n\t\t\t\t\tsuccess = response.data;\n\t\t\t\t\terror = response.error;\n\t\t\t\t\tisSuccess = !error;\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// Extract error from statusText and normalize for non-aborts\n\t\t\t\terror = statusText;\n\t\t\t\tif ( status || !statusText ) {\n\t\t\t\t\tstatusText = \"error\";\n\t\t\t\t\tif ( status < 0 ) {\n\t\t\t\t\t\tstatus = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set data for the fake xhr object\n\t\t\tjqXHR.status = status;\n\t\t\tjqXHR.statusText = ( nativeStatusText || statusText ) + \"\";\n\n\t\t\t// Success/Error\n\t\t\tif ( isSuccess ) {\n\t\t\t\tdeferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );\n\t\t\t} else {\n\t\t\t\tdeferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );\n\t\t\t}\n\n\t\t\t// Status-dependent callbacks\n\t\t\tjqXHR.statusCode( statusCode );\n\t\t\tstatusCode = undefined;\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( isSuccess ? \"ajaxSuccess\" : \"ajaxError\",\n\t\t\t\t\t[ jqXHR, s, isSuccess ? success : error ] );\n\t\t\t}\n\n\t\t\t// Complete\n\t\t\tcompleteDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxComplete\", [ jqXHR, s ] );\n\n\t\t\t\t// Handle the global AJAX counter\n\t\t\t\tif ( !( --jQuery.active ) ) {\n\t\t\t\t\tjQuery.event.trigger( \"ajaxStop\" );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn jqXHR;\n\t},\n\n\tgetJSON: function( url, data, callback ) {\n\t\treturn jQuery.get( url, data, callback, \"json\" );\n\t},\n\n\tgetScript: function( url, callback ) {\n\t\treturn jQuery.get( url, undefined, callback, \"script\" );\n\t}\n} );\n\njQuery.each( [ \"get\", \"post\" ], function( i, method ) {\n\tjQuery[ method ] = function( url, data, callback, type ) {\n\n\t\t// Shift arguments if data argument was omitted\n\t\tif ( isFunction( data ) ) {\n\t\t\ttype = type || callback;\n\t\t\tcallback = data;\n\t\t\tdata = undefined;\n\t\t}\n\n\t\t// The url can be an options object (which then must have .url)\n\t\treturn jQuery.ajax( jQuery.extend( {\n\t\t\turl: url,\n\t\t\ttype: method,\n\t\t\tdataType: type,\n\t\t\tdata: data,\n\t\t\tsuccess: callback\n\t\t}, jQuery.isPlainObject( url ) && url ) );\n\t};\n} );\n\n\njQuery._evalUrl = function( url, options ) {\n\treturn jQuery.ajax( {\n\t\turl: url,\n\n\t\t// Make this explicit, since user can override this through ajaxSetup (#11264)\n\t\ttype: \"GET\",\n\t\tdataType: \"script\",\n\t\tcache: true,\n\t\tasync: false,\n\t\tglobal: false,\n\n\t\t// Only evaluate the response if it is successful (gh-4126)\n\t\t// dataFilter is not invoked for failure responses, so using it instead\n\t\t// of the default converter is kludgy but it works.\n\t\tconverters: {\n\t\t\t\"text script\": function() {}\n\t\t},\n\t\tdataFilter: function( response ) {\n\t\t\tjQuery.globalEval( response, options );\n\t\t}\n\t} );\n};\n\n\njQuery.fn.extend( {\n\twrapAll: function( html ) {\n\t\tvar wrap;\n\n\t\tif ( this[ 0 ] ) {\n\t\t\tif ( isFunction( html ) ) {\n\t\t\t\thtml = html.call( this[ 0 ] );\n\t\t\t}\n\n\t\t\t// The elements to wrap the target around\n\t\t\twrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );\n\n\t\t\tif ( this[ 0 ].parentNode ) {\n\t\t\t\twrap.insertBefore( this[ 0 ] );\n\t\t\t}\n\n\t\t\twrap.map( function() {\n\t\t\t\tvar elem = this;\n\n\t\t\t\twhile ( elem.firstElementChild ) {\n\t\t\t\t\telem = elem.firstElementChild;\n\t\t\t\t}\n\n\t\t\t\treturn elem;\n\t\t\t} ).append( this );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\twrapInner: function( html ) {\n\t\tif ( isFunction( html ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).wrapInner( html.call( this, i ) );\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar self = jQuery( this ),\n\t\t\t\tcontents = self.contents();\n\n\t\t\tif ( contents.length ) {\n\t\t\t\tcontents.wrapAll( html );\n\n\t\t\t} else {\n\t\t\t\tself.append( html );\n\t\t\t}\n\t\t} );\n\t},\n\n\twrap: function( html ) {\n\t\tvar htmlIsFunction = isFunction( html );\n\n\t\treturn this.each( function( i ) {\n\t\t\tjQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html );\n\t\t} );\n\t},\n\n\tunwrap: function( selector ) {\n\t\tthis.parent( selector ).not( \"body\" ).each( function() {\n\t\t\tjQuery( this ).replaceWith( this.childNodes );\n\t\t} );\n\t\treturn this;\n\t}\n} );\n\n\njQuery.expr.pseudos.hidden = function( elem ) {\n\treturn !jQuery.expr.pseudos.visible( elem );\n};\njQuery.expr.pseudos.visible = function( elem ) {\n\treturn !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length );\n};\n\n\n\n\njQuery.ajaxSettings.xhr = function() {\n\ttry {\n\t\treturn new window.XMLHttpRequest();\n\t} catch ( e ) {}\n};\n\nvar xhrSuccessStatus = {\n\n\t\t// File protocol always yields status code 0, assume 200\n\t\t0: 200,\n\n\t\t// Support: IE <=9 only\n\t\t// #1450: sometimes IE returns 1223 when it should be 204\n\t\t1223: 204\n\t},\n\txhrSupported = jQuery.ajaxSettings.xhr();\n\nsupport.cors = !!xhrSupported && ( \"withCredentials\" in xhrSupported );\nsupport.ajax = xhrSupported = !!xhrSupported;\n\njQuery.ajaxTransport( function( options ) {\n\tvar callback, errorCallback;\n\n\t// Cross domain only allowed if supported through XMLHttpRequest\n\tif ( support.cors || xhrSupported && !options.crossDomain ) {\n\t\treturn {\n\t\t\tsend: function( headers, complete ) {\n\t\t\t\tvar i,\n\t\t\t\t\txhr = options.xhr();\n\n\t\t\t\txhr.open(\n\t\t\t\t\toptions.type,\n\t\t\t\t\toptions.url,\n\t\t\t\t\toptions.async,\n\t\t\t\t\toptions.username,\n\t\t\t\t\toptions.password\n\t\t\t\t);\n\n\t\t\t\t// Apply custom fields if provided\n\t\t\t\tif ( options.xhrFields ) {\n\t\t\t\t\tfor ( i in options.xhrFields ) {\n\t\t\t\t\t\txhr[ i ] = options.xhrFields[ i ];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Override mime type if needed\n\t\t\t\tif ( options.mimeType && xhr.overrideMimeType ) {\n\t\t\t\t\txhr.overrideMimeType( options.mimeType );\n\t\t\t\t}\n\n\t\t\t\t// X-Requested-With header\n\t\t\t\t// For cross-domain requests, seeing as conditions for a preflight are\n\t\t\t\t// akin to a jigsaw puzzle, we simply never set it to be sure.\n\t\t\t\t// (it can always be set on a per-request basis or even using ajaxSetup)\n\t\t\t\t// For same-domain requests, won't change header if already provided.\n\t\t\t\tif ( !options.crossDomain && !headers[ \"X-Requested-With\" ] ) {\n\t\t\t\t\theaders[ \"X-Requested-With\" ] = \"XMLHttpRequest\";\n\t\t\t\t}\n\n\t\t\t\t// Set headers\n\t\t\t\tfor ( i in headers ) {\n\t\t\t\t\txhr.setRequestHeader( i, headers[ i ] );\n\t\t\t\t}\n\n\t\t\t\t// Callback\n\t\t\t\tcallback = function( type ) {\n\t\t\t\t\treturn function() {\n\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\tcallback = errorCallback = xhr.onload =\n\t\t\t\t\t\t\t\txhr.onerror = xhr.onabort = xhr.ontimeout =\n\t\t\t\t\t\t\t\t\txhr.onreadystatechange = null;\n\n\t\t\t\t\t\t\tif ( type === \"abort\" ) {\n\t\t\t\t\t\t\t\txhr.abort();\n\t\t\t\t\t\t\t} else if ( type === \"error\" ) {\n\n\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t// On a manual native abort, IE9 throws\n\t\t\t\t\t\t\t\t// errors on any property access that is not readyState\n\t\t\t\t\t\t\t\tif ( typeof xhr.status !== \"number\" ) {\n\t\t\t\t\t\t\t\t\tcomplete( 0, \"error\" );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tcomplete(\n\n\t\t\t\t\t\t\t\t\t\t// File: protocol always yields status 0; see #8605, #14207\n\t\t\t\t\t\t\t\t\t\txhr.status,\n\t\t\t\t\t\t\t\t\t\txhr.statusText\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tcomplete(\n\t\t\t\t\t\t\t\t\txhrSuccessStatus[ xhr.status ] || xhr.status,\n\t\t\t\t\t\t\t\t\txhr.statusText,\n\n\t\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t\t// IE9 has no XHR2 but throws on binary (trac-11426)\n\t\t\t\t\t\t\t\t\t// For XHR2 non-text, let the caller handle it (gh-2498)\n\t\t\t\t\t\t\t\t\t( xhr.responseType || \"text\" ) !== \"text\" ||\n\t\t\t\t\t\t\t\t\ttypeof xhr.responseText !== \"string\" ?\n\t\t\t\t\t\t\t\t\t\t{ binary: xhr.response } :\n\t\t\t\t\t\t\t\t\t\t{ text: xhr.responseText },\n\t\t\t\t\t\t\t\t\txhr.getAllResponseHeaders()\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t};\n\n\t\t\t\t// Listen to events\n\t\t\t\txhr.onload = callback();\n\t\t\t\terrorCallback = xhr.onerror = xhr.ontimeout = callback( \"error\" );\n\n\t\t\t\t// Support: IE 9 only\n\t\t\t\t// Use onreadystatechange to replace onabort\n\t\t\t\t// to handle uncaught aborts\n\t\t\t\tif ( xhr.onabort !== undefined ) {\n\t\t\t\t\txhr.onabort = errorCallback;\n\t\t\t\t} else {\n\t\t\t\t\txhr.onreadystatechange = function() {\n\n\t\t\t\t\t\t// Check readyState before timeout as it changes\n\t\t\t\t\t\tif ( xhr.readyState === 4 ) {\n\n\t\t\t\t\t\t\t// Allow onerror to be called first,\n\t\t\t\t\t\t\t// but that will not handle a native abort\n\t\t\t\t\t\t\t// Also, save errorCallback to a variable\n\t\t\t\t\t\t\t// as xhr.onerror cannot be accessed\n\t\t\t\t\t\t\twindow.setTimeout( function() {\n\t\t\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\t\t\terrorCallback();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\t// Create the abort callback\n\t\t\t\tcallback = callback( \"abort\" );\n\n\t\t\t\ttry {\n\n\t\t\t\t\t// Do send the request (this may raise an exception)\n\t\t\t\t\txhr.send( options.hasContent && options.data || null );\n\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t// #14683: Only rethrow if this hasn't been notified as an error yet\n\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\tthrow e;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n} );\n\n\n\n\n// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432)\njQuery.ajaxPrefilter( function( s ) {\n\tif ( s.crossDomain ) {\n\t\ts.contents.script = false;\n\t}\n} );\n\n// Install script dataType\njQuery.ajaxSetup( {\n\taccepts: {\n\t\tscript: \"text/javascript, application/javascript, \" +\n\t\t\t\"application/ecmascript, application/x-ecmascript\"\n\t},\n\tcontents: {\n\t\tscript: /\\b(?:java|ecma)script\\b/\n\t},\n\tconverters: {\n\t\t\"text script\": function( text ) {\n\t\t\tjQuery.globalEval( text );\n\t\t\treturn text;\n\t\t}\n\t}\n} );\n\n// Handle cache's special case and crossDomain\njQuery.ajaxPrefilter( \"script\", function( s ) {\n\tif ( s.cache === undefined ) {\n\t\ts.cache = false;\n\t}\n\tif ( s.crossDomain ) {\n\t\ts.type = \"GET\";\n\t}\n} );\n\n// Bind script tag hack transport\njQuery.ajaxTransport( \"script\", function( s ) {\n\n\t// This transport only deals with cross domain or forced-by-attrs requests\n\tif ( s.crossDomain || s.scriptAttrs ) {\n\t\tvar script, callback;\n\t\treturn {\n\t\t\tsend: function( _, complete ) {\n\t\t\t\tscript = jQuery( \"\n","import Vue from 'vue';\nimport store from '../store';\nimport API from '../../services/api';\nimport userRights from '../../services/user-rights';\n\nimport VueTables from 'vue-tables-2';\nimport PortalVue from 'portal-vue';\nimport VModal from 'vue-js-modal'\nimport Notifications from 'vue-notification';\n\n// Global components\nimport '../components/the-subheader';\nimport '../components/the-sidebar-layout';\nimport '../components/the-1-column-layout';\n\nVue.use(Notifications);\nVue.use(PortalVue);\n//Vue.use(VueTables.ClientTable);\nVue.use(VueTables.ClientTable, {\n sortIcon: {\n is: 'icon--chevron-up-down--black',\n base: 'icon',\n up: 'icon--chevron-up--black',\n down: 'icon--chevron-down--black'\n }\n}, false, () => { return {\n framework: '',\n table: 'table v-data-table',\n row: 'v-data-table__row',\n column: 'v-data-table__col',\n label: '',\n input: 'v-data-table__input',\n select: 'v-data-table__select',\n field: 'v-data-table__field',\n inline: 'is-inline',\n right: 'is-pull-right',\n left: 'is-pull-left',\n center: 'text-center',\n contentCenter: '',\n small: '',\n nomargin: '',\n groupTr: 'v-data-table__info',\n button: 'btn btn-secondary',\n dropdown: {\n container: 'dropdown',\n trigger: 'dropdown-toggle',\n menu: 'dropdown-menu',\n content: '',\n item: '',\n caret: 'caret'\n },\n pagination: {\n nav: '',\n count: '',\n wrapper: '',\n list: 'pagination',\n item: 'page-item',\n link: 'page-link',\n next: '',\n prev: '',\n active: 'active'\n }\n}});\nVue.use(VModal, {\n dialog: true\n});\n\nVue.prototype.$api = new API();\nVue.prototype.$userRights = new userRights();\n\n// Global localization function {{loc('user.firstName')}}\nVue.mixin({\n data: function() {\n return {\n loc(keys) {\n if(!store.state.localization) {\n return '';\n }\n\n const keysOriginal = keys;\n\n if(!Array.isArray(keys)) {\n keys = keys.split('.');\n }\n\n let value;\n\n keys.forEach((key) => {\n value = value ? value[key] : store.state.localization[key];\n });\n\n if(typeof value === 'undefined' || value === null) {\n return 'missing: \"' + keysOriginal + '\"';\n }\n\n return value;\n }\n }\n }\n});\n\n","import Vue from 'vue';\nimport App from '../app.vue';\nimport Router from './router';\nimport store from '../../store';\n\nimport '../common-settings';\n\nexport default {\n init(elementId) {\n const element = document.getElementById(elementId);\n\n if(element) {\n\n const router = new Router({\n base: element.getAttribute('data-base-url'),\n pages: JSON.parse(element.getAttribute('data-pages'))\n });\n\n new Vue({\n el: '#' + elementId,\n router,\n store,\n mounted () {\n // Stuff to do when mounted\n },\n render: createElement => {\n return createElement(App)\n },\n created: () => {\n\n }\n })\n }\n }\n}\n","import Vue from 'vue'\nimport VueRouter from 'vue-router'\n\n// Views\nimport Complaints from '../../../components/view-complaints.vue';\nimport Complaint from '../../../components/view-complaint.vue';\nimport CustomerMachine from '../../../components/view-customer-machine.vue';\n\nVue.use(VueRouter)\n\nconst Router = (options) => {\n const routes = [\n { path: '/', name: 'complaints', component: Complaints },\n { path: '/:id', name: 'complaint', component: Complaint },\n { path: '/customer-machines/:serialNumber', name: 'customer-machine', component: CustomerMachine, beforeEnter(to, from, next) {\n const externalPage = options.pages && options.pages[to.name];\n if(externalPage) {\n location.href = externalPage.url + to.params.serialNumber;\n return;\n }\n next();\n }}\n ];\n\n const router = new VueRouter({\n mode: 'history',\n base: options.base,\n linkActiveClass: 'v-router-link__active',\n linkExactActiveClass: 'v-router-link__current',\n routes: routes\n });\n\n return router;\n}\n\nexport default Router;\n","import Vue from 'vue'\nimport VueRouter from 'vue-router'\n\n// Views\nimport CustomerMachines from '../../../components/view-customer-machines.vue';\nimport CustomerMachine from '../../../components/view-customer-machine.vue';\nimport Complaint from '../../../components/view-complaint.vue';\n\nVue.use(VueRouter)\n\nconst Router = (options) => {\n return new VueRouter({\n mode: 'history',\n base: options.base,\n linkActiveClass: 'v-router-link__active',\n linkExactActiveClass: 'v-router-link__current',\n routes: [\n { path: '/', name: 'customer-machines', component: CustomerMachines },\n { path: '/:serialNumber', name: 'customer-machine', component: CustomerMachine },\n { path: '/complaints/:id', name: 'complaint', component: Complaint, beforeEnter(to, from, next) {\n const externalPage = options.pages && options.pages[to.name];\n if(externalPage) {\n location.href = externalPage.url + to.params.id;\n return;\n }\n next();\n }}\n ]\n })\n}\n\nexport default Router;\n","import Vue from 'vue';\nimport App from '../app.vue';\nimport Router from './router';\nimport store from '../../store';\n\nimport '../common-settings';\n\nexport default {\n init(elementId) {\n const element = document.getElementById(elementId);\n\n if(element) {\n\n const router = new Router({\n base: element.getAttribute('data-base-url'),\n });\n\n new Vue({\n el: '#' + elementId,\n router,\n store,\n mounted () {\n // Stuff to do when mounted\n },\n render: createElement => {\n return createElement(App)\n },\n created: () => {\n\n }\n })\n }\n }\n}\n","import Vue from 'vue'\nimport VueRouter from 'vue-router'\n\n// Views\nimport Home from '../view-home.vue';\nimport Companies from '../../../components/view-companies.vue';\nimport Company from '../../../components/view-company.vue';\n\nVue.use(VueRouter)\n\nconst Router = (options) => {\n return new VueRouter({\n mode: 'history',\n base: options.base,\n linkActiveClass: 'v-router-link__active',\n linkExactActiveClass: 'v-router-link__current',\n routes: [\n { path: '/', name: 'home', component: Home },\n { path: '/companies/:parent', name: 'companies', component: Companies},\n { path: '/company/:id', name: 'company', component: Company}\n ]\n })\n}\n\nexport default Router;\n","\n\n\n","import Vue from 'vue';\nimport App from '../app.vue';\nimport Router from './router';\nimport store from '../../store';\n\nimport '../common-settings';\n\nexport default {\n init(elementId) {\n const element = document.getElementById(elementId);\n\n if(element) {\n\n const router = new Router({\n base: element.getAttribute('data-base-url')\n });\n\n new Vue({\n el: '#' + elementId,\n router,\n store,\n mounted () {\n //console.log(this);\n // Stuff to do when mounted\n },\n render: createElement => {\n return createElement(App)\n },\n created: () => {\n // We don't actually have subheader but we don't need it either\n store.commit('setSubheaderFound', true);\n store.commit('setNeedsLogginIn', false);\n }\n })\n }\n }\n}\n","import Vue from 'vue'\nimport VueRouter from 'vue-router'\n\n// Views\nimport ForgottenPassword from '../../../components/view-forgotten-password.vue';\n\nVue.use(VueRouter)\n\nconst Router = (options) => {\n return new VueRouter({\n mode: 'history',\n base: options.base,\n linkActiveClass: 'v-router-link__active',\n linkExactActiveClass: 'v-router-link__current',\n routes: [\n {\n path: '/', name: 'forgotten-password', component: ForgottenPassword\n }\n ]\n })\n}\n\nexport default Router;\n","import Vue from 'vue'\nimport VueRouter from 'vue-router'\n\n// Views\nimport Company from '../../../components/view-company.vue';\n\nVue.use(VueRouter)\n\nconst Router = (options) => {\n return new VueRouter({\n mode: 'history',\n base: options.base,\n linkActiveClass: 'v-router-link__active',\n linkExactActiveClass: 'v-router-link__current',\n routes: [\n { path: '/', name: 'company', component: Company },\n ]\n })\n}\n\nexport default Router;\n","import Vue from 'vue';\nimport App from '../app.vue';\nimport Router from './router';\nimport store from '../../store';\n\nimport '../common-settings';\n\nexport default {\n init(elementId) {\n const element = document.getElementById(elementId);\n\n if(element) {\n\n const router = new Router({\n base: element.getAttribute('data-base-url')\n });\n\n new Vue({\n el: '#' + elementId,\n router,\n store,\n mounted () {\n // Stuff to do when mounted\n },\n render: createElement => {\n return createElement(App)\n },\n created: () => {\n // We don't actually have subheader but we don't need it either\n store.commit('setSubheaderFound', true);\n store.commit('setNeedsLogginIn', false);\n }\n })\n }\n }\n}\n","import Vue from 'vue'\nimport VueRouter from 'vue-router'\n\n// Views\nimport UpdatePassword from '../../../components/view-update-password.vue';\n\nVue.use(VueRouter)\n\nconst Router = (options) => {\n return new VueRouter({\n mode: 'history',\n base: options.base,\n linkActiveClass: 'v-router-link__active',\n linkExactActiveClass: 'v-router-link__current',\n routes: [\n {\n path: '/', name: 'update-password', component: UpdatePassword\n }\n ]\n })\n}\n\nexport default Router;\n","import Vue from 'vue';\nimport App from '../app.vue';\nimport Router from './router';\nimport store from '../../store';\n\nimport '../common-settings';\n\nexport default {\n init(elementId) {\n const element = document.getElementById(elementId);\n\n if(element) {\n\n const router = new Router({\n base: element.getAttribute('data-base-url')\n });\n\n new Vue({\n el: '#' + elementId,\n router,\n store,\n mounted () {\n // Stuff to do when mounted\n },\n render: createElement => {\n return createElement(App)\n },\n created: () => {\n\n }\n })\n }\n }\n}\n","import Vue from 'vue'\nimport VueRouter from 'vue-router'\n\n// Views\nimport UserSettings from '../../../components/view-user-settings.vue';\nimport ChangePassword from '../../../components/view-change-password.vue';\nimport EditAccount from '../../../components/view-edit-account.vue';\n\nVue.use(VueRouter)\n\nconst Router = (options) => {\n return new VueRouter({\n mode: 'history',\n base: options.base,\n linkActiveClass: 'v-router-link__active',\n linkExactActiveClass: 'v-router-link__current',\n routes: [\n {\n path: '/', name: 'user-settings', component: UserSettings,\n children: [\n {\n // UserProfile will be rendered inside User's \n // when /user/:id/profile is matched\n name: 'change-password',\n path: 'change-password',\n component: ChangePassword\n },\n {\n // UserPosts will be rendered inside User's \n // when /user/:id/posts is matched\n name: 'edit-account',\n path: 'edit-account',\n component: EditAccount\n }\n ]\n }\n ]\n })\n}\n\nexport default Router;\n","import Vue from 'vue'\nimport VueRouter from 'vue-router'\n\n// Views\nimport WarrantyRegistrations from '../../../components/view-warranty-registrations.vue';\nimport WarrantyRegistration from '../../../components/view-warranty-registration.vue';\n\nVue.use(VueRouter)\n\nconst Router = (options) => {\n const routes = [\n { path: '/', name: 'warranty-registrations', component: WarrantyRegistrations },\n { path: '/:id', name: 'warranty-registration', component: WarrantyRegistration }\n ];\n\n const router = new VueRouter({\n mode: 'history',\n base: options.base,\n linkActiveClass: 'v-router-link__active',\n linkExactActiveClass: 'v-router-link__current',\n routes: routes\n });\n\n return router;\n}\n\nexport default Router;\n","\n\n\n","\n\n\n","\n\n\n","\n\n\n","import Vue from 'vue';\n\n/**\n * This uses template that is included in script tag\n **/\n\nVue.component('the-1-column-layout', {\n template: '#js-layout-1-column-template'\n});\n","import Vue from 'vue';\n\n/**\n * This uses template that is included in script tag\n **/\n\nVue.component('the-sidebar-layout', {\n template: '#js-layout-sidebar-template',\n props: ['sidebar-title'],\n computed: {\n hasSidebarTitle() {\n return this.$slots['sidebar-title'];\n }\n }\n});\n","import Vue from 'vue';\n\n/**\n * Subheader uses Stage template that is included in script tag\n **/\n\nVue.component('the-subheader', {\n template: '#js-subheader-template',\n data: function () {\n return {\n searchText: '',\n }\n },\n computed: {\n searchEnabled () {\n return this.$store.state.subheader.searchEnabled;\n },\n title () {\n return this.$store.state.subheader.title;\n },\n description () {\n return this.$store.state.subheader.description;\n },\n subtitle () {\n return this.$store.state.subheader.subtitle;\n }\n },\n watch: {\n searchText: function (value) {\n this.$store.commit('setSubheaderSearchText', this.searchText);\n }\n },\n mounted: function () {\n // Remove the original header once we're done loading\n const subheader = document.getElementById('js-subheader');\n if(subheader) {\n subheader.remove();\n }\n }\n});\n","\n\n\n\n","\n\n\n\n\n","\n\n\n\n\n","\n\n\n\n\n","\n\n\n\n\n","\n\n\n\n\n","\n\n\n\n\n","\n\n\n\n\n","\n\n\n\n\n\n\n","\n\n\n","\n\n\n\n\n","\n\n\n\n\n","\n\n\n\n","\n\n\n","\n\n\n","\n\n\n","\n\n\n","\n\n\n","\n\n\n","\n\n\n\n\n","\n\n\n\n","\n\n\n","import Vuex from 'vuex'\nimport Vue from 'vue'\n\nimport API from '../../services/api';\nimport dataService from '../../services/data-service';\n\nconst api = new API();\n\nVue.use(Vuex)\n\n\nconst stateHelper = {\n updateArray(res, stateArray, key) {\n\n res = Array.isArray(res) ? res : [res]; // Turn into array, so we can handle it same way\n const resIds = {};\n const added = [];\n\n res.forEach(item => {\n resIds[item[key]] = item;\n });\n\n // If already added, update\n for(let i=stateArray.length-1; i>=0; i--) {\n if(resIds[stateArray[i][key]]) {\n stateArray.splice(i, 1, resIds[stateArray[i][key]]);\n added.push(stateArray[i][key]);\n }\n }\n\n // Add new ones\n if(added.length !== res.length) {\n res.forEach(item => {\n if(added.indexOf(item[key]) === -1) {\n stateArray.push(item);\n }\n });\n }\n },\n removeFromArray(id, stateArray, key) {\n for(let i=stateArray.length-1; i>=0; i--) {\n if(stateArray[i][key] === id) {\n stateArray.splice(i, 1);\n return;\n }\n }\n }\n}\n\nconst store = new Vuex.Store({\n strict: process.env.NODE_ENV !== 'production',\n state: {\n language: '',\n user: {\n info: null,\n company: null,\n role: null\n },\n subheader: {\n title: '',\n description: '',\n searchEnabled: false,\n searchText: ''\n },\n customerMachines: [],\n customerMachineDetails: [],\n companies: [],\n users: [], // company id as key for an array of user objects\n complaints: [],\n warrantyRegistrations: [],\n warrantedSerialNumbers: [],\n loggedIn: false,\n needsLoggingIn: true,\n localization: null,\n preloading: true,\n countries: [],\n subheaderFound: false,\n subheaderSubtitle: '',\n subheaderTitle: '',\n subheaderDescription: '',\n notificationsQueue: [],\n notificationsMax: 6\n },\n mutations: {\n setLanguage(state, res) {\n state.language = res;\n },\n setCurrentUser(state, res) {\n state.user.info = res;\n state.user.role = res.role;\n },\n setCurrentUserCompany(state, res) {\n state.user.company = res;\n },\n setCurrentMachineOwner(state, res) {\n state.machine.customerNumber = res.customerNumber;\n state.machine.companyName = res.companyName;\n },\n setLoginStatus(state, res) {\n state.loggedIn = res;\n },\n setNeedsLogginIn(state, res) {\n state.needsLoggingIn = res;\n },\n setLocalization(state, res) {\n state.localization = res;\n },\n setPreloadingStatus(state, res) {\n state.preloading = res;\n },\n setCompanies(state, res) {\n stateHelper.updateArray(res, state.companies, 'id');\n },\n setCompany(state, res) {\n stateHelper.updateArray(res, state.companies, 'id');\n },\n setCountries(state, res) {\n state.countries = res\n },\n setSubheaderFound(state, res) {\n state.subheaderFound = res;\n },\n setSubheader(state, res) {\n state.subheader.subtitle = res.subtitle;\n state.subheader.title = res.title;\n state.subheader.description = res.description;\n state.subheader.searchEnabled = res.searchEnabled;\n },\n setSubheaderSearchText(state, res) {\n state.subheader.searchText = res;\n },\n setCustomerMachines(state, res) {\n stateHelper.updateArray(res, state.customerMachines, 'serialNumber');\n },\n setCustomerMachineDetails(state, res) {\n stateHelper.updateArray(res, state.customerMachineDetails, 'serialNumber');\n },\n addCompany(state, res) {\n state.companies.push(res);\n },\n updateCompany(state, res) {\n stateHelper.updateArray(res, state.companies, 'id');\n },\n deleteCompany(state, res) {\n stateHelper.removeFromArray(res, state.companies, 'id');\n },\n setComplaints(state, res) {\n stateHelper.updateArray(res, state.complaints, 'uuid');\n },\n setWarrantedSerialNumbers(state, res) {\n state.warrantedSerialNumbers = res;\n },\n addComplaint(state, res) {\n stateHelper.updateArray(res, state.complaints, 'uuid');\n },\n setWarrantyRegistrations(state, res) {\n stateHelper.updateArray(res, state.warrantyRegistrations, 'uuid');\n },\n addWarrantyRegistration(state, res) {\n stateHelper.updateArray(res, state.warrantyRegistrations, 'uuid');\n },\n setUsers(state, res) {\n stateHelper.updateArray(res, state.users, 'id');\n },\n addUser(state, res) {\n stateHelper.updateArray(res, state.users, 'id');\n },\n updateUser(state, res) {\n stateHelper.updateArray(res, state.users, 'id');\n },\n deleteUser(state, res) {\n stateHelper.removeFromArray(res, state.users, 'id');\n },\n addNotification(state, messages) {\n state.notificationsQueue.push(messages.join(', '))\n\n if (state.notificationsQueue.length > state.notificationsMax) {\n state.notificationsQueue.shift()\n }\n },\n updateAdditionalInformation(state, message) {\n state.additionalInformation = message\n }\n },\n actions: {\n getCountries(context) {\n // Only fetch countries once\n if(context.state.countries.length) {\n return;\n }\n\n return api.getCountries()\n .then(res => {\n if(res.result.countries) {\n context.commit('setCountries', res.result.countries);\n }\n });\n },\n getCurrentUser({ commit }) {\n return api.getCurrentUser()\n .then((res) => {\n // If we can get proper answer, we're logged in\n if(res.code === 200) {\n commit('setLoginStatus', true);\n }\n\n commit('setCurrentUser', res.result.user);\n commit('setCurrentUserCompany', res.result.company);\n });\n },\n getLocalization({commit}) {\n return api.getLocalization()\n .then(res => {\n if(res.result.localization) {\n commit('setLocalization', res.result.localization);\n }\n });\n },\n getComplaints({commit}, options) {\n if(!options) {\n return api.getComplaints({\n includeChildCompanies: true\n })\n .then(res => {\n if(res.result.complaints) {\n commit('setComplaints', res.result.complaints);\n }\n if(res.result.warrantedSerialNumbers) {\n commit('setWarrantedSerialNumbers', res.result.warrantedSerialNumbers)\n }\n });\n }\n\n return api.getComplaints(options)\n .then(res => {\n if(res.result.complaints) {\n commit('setComplaints', res.result.complaints);\n }\n });\n },\n getComplaint({commit}, complaintId) {\n return api.getComplaint(complaintId)\n .then(res => {\n if(res.result.complaint) {\n commit('setComplaints', res.result.complaint);\n }\n });\n },\n getWarrantyRegistrations({commit}, options) {\n if(!options) {\n return api.getWarrantyRegistrations({ includeChildCompanies: true })\n .then(res => {\n if(res.result.warrantyRegistrations) {\n commit('setWarrantyRegistrations', res.result.warrantyRegistrations);\n }\n });\n }\n\n return api.getWarrantyRegistrations(options)\n .then(res => {\n if(res.result.warrantyRegistrations) {\n commit('setWarrantyRegistrations', res.result.warrantyRegistrations);\n }\n });\n },\n getWarrantyRegistration({commit}, warrantyRegistrationId) {\n return api.getWarrantyRegistration(warrantyRegistrationId)\n .then(res => {\n if(res.result.warrantyRegistration) {\n commit('setWarrantyRegistrations', res.result.warrantyRegistration);\n }\n });\n },\n getCustomerMachines({commit}, companyId) {\n return api.getCustomerMachines({\n company: companyId,\n includeChildCompanies: true\n })\n .then(res => {\n if(res.result.customerMachines) {\n commit('setCustomerMachines', res.result.customerMachines);\n }\n });\n },\n getCustomerMachine({commit}, serialNumber) {\n return api.getCustomerMachine(serialNumber)\n .then(res => {\n if(res.result.customerMachine) {\n commit('setCustomerMachines', res.result.customerMachine);\n }\n });\n },\n getCustomerMachineDetails({commit}, serialNumber) {\n return api.getCustomerMachineDetails(serialNumber)\n .then(res => {\n if(res.result.customerMachineDetails) {\n commit('setCustomerMachineDetails', res.result.customerMachineDetails);\n }\n });\n },\n getChildCompanies(context) {\n return api.getCompanies({\n childrenOf: context.state.user.info.company,\n includeUsersOfRoles: ['retailer-admin']\n })\n .then(res => {\n if(res.result.companies) {\n res.result.companies.forEach(company => {\n company.users.forEach(user => {\n if(!company.contacts) {\n company.contacts = [];\n }\n });\n });\n context.commit('setCompanies', res.result.companies);\n }\n });\n },\n getCompany({commit}, companyId) {\n return api.getCompany(companyId)\n .then(res => {\n if(res.result.company) {\n commit('setCompany', res.result.company);\n }\n });\n },\n getCompanyUsers(context, companyId) {\n return api.getUsers({\n company: companyId\n })\n .then(res => {\n if(res.result.users) {\n context.commit('setUsers', res.result.users);\n }\n });\n },\n deleteCompany(context, companyId) {\n return api.deleteCompany(companyId)\n .then(res => {\n if(res.result.company) {\n context.commit('deleteCompany', res.result.company);\n }\n });\n },\n getUser({commit}, userId) {\n return api.getUser(userId)\n .then(res => {\n if(res.result.user) {\n commit('addUser', res.result.user);\n }\n });\n }\n },\n getters: {\n countrySelectOptions: state => {\n return state.countries.map(item => {\n return {\n value: item.countryCode,\n text: item.name\n };\n });\n },\n childCompanies: state => {\n\n var children = state.user.info.role === 'site-admin'\n ? state.companies.filter(Boolean) //clear null values\n : state.companies.filter(company => { return company.parent === state.user.company.id });\n\n return children;\n },\n childCompaniesOptions: state => {\n var filteredChildren = state.user.info.role === 'site-admin'\n ? state.companies.filter(Boolean) //clear null values\n : state.companies.filter(company => { return company.parent === state.user.company.id });\n\n return filteredChildren.map (item => {\n return {\n value: item.id,\n text: item.name\n };\n });\n\n }\n }\n});\n\ndataService.setVuexStore(store);\n\nexport default store\n"],"preExistingComment":"//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJub2RlX21vZHVsZXMvYXJyYXktaW50ZXJzZWN0L2Rpc3QvYXJyYXktaW50ZXJzZWN0LmpzIiwibm9kZV9tb2R1bGVzL2F4aW9zL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9hZGFwdGVycy94aHIuanMiLCJub2RlX21vZHVsZXMvYXhpb3MvbGliL2F4aW9zLmpzIiwibm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jYW5jZWwvQ2FuY2VsLmpzIiwibm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jYW5jZWwvQ2FuY2VsVG9rZW4uanMiLCJub2RlX21vZHVsZXMvYXhpb3MvbGliL2NhbmNlbC9pc0NhbmNlbC5qcyIsIm5vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9BeGlvcy5qcyIsIm5vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9JbnRlcmNlcHRvck1hbmFnZXIuanMiLCJub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvY3JlYXRlRXJyb3IuanMiLCJub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvZGlzcGF0Y2hSZXF1ZXN0LmpzIiwibm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL2VuaGFuY2VFcnJvci5qcyIsIm5vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9tZXJnZUNvbmZpZy5qcyIsIm5vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9zZXR0bGUuanMiLCJub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvdHJhbnNmb3JtRGF0YS5qcyIsIm5vZGVfbW9kdWxlcy9heGlvcy9saWIvZGVmYXVsdHMuanMiLCJub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvYmluZC5qcyIsIm5vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9idWlsZFVSTC5qcyIsIm5vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9jb21iaW5lVVJMcy5qcyIsIm5vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9jb29raWVzLmpzIiwibm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2lzQWJzb2x1dGVVUkwuanMiLCJub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvaXNVUkxTYW1lT3JpZ2luLmpzIiwibm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL25vcm1hbGl6ZUhlYWRlck5hbWUuanMiLCJub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvcGFyc2VIZWFkZXJzLmpzIiwibm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3NwcmVhZC5qcyIsIm5vZGVfbW9kdWxlcy9heGlvcy9saWIvdXRpbHMuanMiLCJub2RlX21vZHVsZXMvYXhpb3Mvbm9kZV9tb2R1bGVzL2lzLWJ1ZmZlci9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9iYWJlbC1oZWxwZXItdnVlLWpzeC1tZXJnZS1wcm9wcy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvanNvbi9zdHJpbmdpZnkuanMiLCJub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL29iamVjdC9rZXlzLmpzIiwibm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9wcm9taXNlLmpzIiwibm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9zeW1ib2wuanMiLCJub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL3N5bWJvbC9pdGVyYXRvci5qcyIsIm5vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvYXN5bmNUb0dlbmVyYXRvci5qcyIsIm5vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvY2xhc3NDYWxsQ2hlY2suanMiLCJub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL3R5cGVvZi5qcyIsIm5vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL3JlZ2VuZXJhdG9yL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2Jhc2U2NC1qcy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9idWZmZXIvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnVmZmVyL25vZGVfbW9kdWxlcy9pc2FycmF5L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9mbi9qc29uL3N0cmluZ2lmeS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvZm4vb2JqZWN0L2tleXMuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L2ZuL3Byb21pc2UuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L2ZuL3N5bWJvbC9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvZm4vc3ltYm9sL2l0ZXJhdG9yLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19hLWZ1bmN0aW9uLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19hZGQtdG8tdW5zY29wYWJsZXMuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2FuLWluc3RhbmNlLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19hbi1vYmplY3QuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2FycmF5LWluY2x1ZGVzLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19jbGFzc29mLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19jb2YuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2NvcmUuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2N0eC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fZGVmaW5lZC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fZGVzY3JpcHRvcnMuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2RvbS1jcmVhdGUuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2VudW0tYnVnLWtleXMuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2VudW0ta2V5cy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fZXhwb3J0LmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19mYWlscy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fZm9yLW9mLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19nbG9iYWwuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2hhcy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faGlkZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faHRtbC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faWU4LWRvbS1kZWZpbmUuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2ludm9rZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faW9iamVjdC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faXMtYXJyYXktaXRlci5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faXMtYXJyYXkuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2lzLW9iamVjdC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faXRlci1jYWxsLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19pdGVyLWNyZWF0ZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faXRlci1kZWZpbmUuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2l0ZXItZGV0ZWN0LmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19pdGVyLXN0ZXAuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2l0ZXJhdG9ycy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fbGlicmFyeS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fbWV0YS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fbWljcm90YXNrLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19uZXctcHJvbWlzZS1jYXBhYmlsaXR5LmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3QtY3JlYXRlLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3QtZHAuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX29iamVjdC1kcHMuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX29iamVjdC1nb3BkLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3QtZ29wbi1leHQuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX29iamVjdC1nb3BuLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3QtZ29wcy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fb2JqZWN0LWdwby5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fb2JqZWN0LWtleXMtaW50ZXJuYWwuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX29iamVjdC1rZXlzLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3QtcGllLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3Qtc2FwLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19wZXJmb3JtLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19wcm9taXNlLXJlc29sdmUuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3Byb3BlcnR5LWRlc2MuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3JlZGVmaW5lLWFsbC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fcmVkZWZpbmUuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3NldC1zcGVjaWVzLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19zZXQtdG8tc3RyaW5nLXRhZy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fc2hhcmVkLWtleS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fc2hhcmVkLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19zcGVjaWVzLWNvbnN0cnVjdG9yLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19zdHJpbmctYXQuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3Rhc2suanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3RvLWFic29sdXRlLWluZGV4LmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL190by1pbnRlZ2VyLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL190by1pb2JqZWN0LmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL190by1sZW5ndGguanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3RvLW9iamVjdC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fdG8tcHJpbWl0aXZlLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL191aWQuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3VzZXItYWdlbnQuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3drcy1kZWZpbmUuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3drcy1leHQuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3drcy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9jb3JlLmdldC1pdGVyYXRvci1tZXRob2QuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvZXM2LmFycmF5Lml0ZXJhdG9yLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2VzNi5vYmplY3Qua2V5cy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9lczYub2JqZWN0LnRvLXN0cmluZy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9lczYucHJvbWlzZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9lczYuc3RyaW5nLml0ZXJhdG9yLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2VzNi5zeW1ib2wuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvZXM3LnByb21pc2UuZmluYWxseS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9lczcucHJvbWlzZS50cnkuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvZXM3LnN5bWJvbC5hc3luYy1pdGVyYXRvci5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9lczcuc3ltYm9sLm9ic2VydmFibGUuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvd2ViLmRvbS5pdGVyYWJsZS5qcyIsIm5vZGVfbW9kdWxlcy9kZWJvdW5jZS9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9kZWNvZGUtdXJpLWNvbXBvbmVudC9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9lczYtcHJvbWlzZS9hdXRvLmpzIiwibm9kZV9tb2R1bGVzL2VzNi1wcm9taXNlL2Rpc3QvZXM2LXByb21pc2UuanMiLCJub2RlX21vZHVsZXMvaWVlZTc1NC9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9qcXVlcnkvZGlzdC9qcXVlcnkuanMiLCJub2RlX21vZHVsZXMvanMtY29va2llL3NyYy9qcy5jb29raWUuanMiLCJub2RlX21vZHVsZXMvbWFnbmlmaWMtcG9wdXAvZGlzdC9qcXVlcnkubWFnbmlmaWMtcG9wdXAuanMiLCJub2RlX21vZHVsZXMvbWVyZ2UvbWVyZ2UuanMiLCJub2RlX21vZHVsZXMvbW9tZW50L21vbWVudC5qcyIsIm5vZGVfbW9kdWxlcy9tdXN0YWNoZS9tdXN0YWNoZS5qcyIsIm5vZGVfbW9kdWxlcy9vYmplY3QtZml0LWltYWdlcy9kaXN0L29maS5jb21tb24tanMuanMiLCJub2RlX21vZHVsZXMvcG9seWZpbGwtYXJyYXktaW5jbHVkZXMvaW5kZXguanMiLCJub2RlX21vZHVsZXMvcG9ydGFsLXZ1ZS9kaXN0L3BvcnRhbC12dWUuanMiLCJub2RlX21vZHVsZXMvcHJvY2Vzcy9icm93c2VyLmpzIiwibm9kZV9tb2R1bGVzL3F1ZXJ5LXN0cmluZy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9xdWVyeS1zdHJpbmcvbm9kZV9tb2R1bGVzL29iamVjdC1hc3NpZ24vaW5kZXguanMiLCJub2RlX21vZHVsZXMvcmVnZW5lcmF0b3ItcnVudGltZS9ydW50aW1lLW1vZHVsZS5qcyIsIm5vZGVfbW9kdWxlcy9yZWdlbmVyYXRvci1ydW50aW1lL3J1bnRpbWUuanMiLCJub2RlX21vZHVsZXMvc3RyaWN0LXVyaS1lbmNvZGUvaW5kZXguanMiLCJub2RlX21vZHVsZXMvdGltZXJzLWJyb3dzZXJpZnkvbWFpbi5qcyIsIm5vZGVfbW9kdWxlcy92dWUtaG90LXJlbG9hZC1hcGkvZGlzdC9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy92dWUtanMtbW9kYWwvZGlzdC9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy92dWUtbm90aWZpY2F0aW9uL2Rpc3QvaW5kZXguanMiLCJub2RlX21vZHVsZXMvdnVlLXBhZ2luYXRpb24tMi9jb21waWxlZC9QYWdpbmF0aW9uLmpzIiwibm9kZV9tb2R1bGVzL3Z1ZS1wYWdpbmF0aW9uLTIvY29tcGlsZWQvYnVzLmpzIiwibm9kZV9tb2R1bGVzL3Z1ZS1wYWdpbmF0aW9uLTIvY29tcGlsZWQvY29uZmlnLmpzIiwibm9kZV9tb2R1bGVzL3Z1ZS1wYWdpbmF0aW9uLTIvY29tcGlsZWQvdGVtcGxhdGUuanMiLCJub2RlX21vZHVsZXMvdnVlLXBhZ2luYXRpb24tMi9jb21waWxlZC90aGVtZXMvYm9vdHN0cmFwMy5qcyIsIm5vZGVfbW9kdWxlcy92dWUtcGFnaW5hdGlvbi0yL2NvbXBpbGVkL3RoZW1lcy9ib290c3RyYXA0LmpzIiwibm9kZV9tb2R1bGVzL3Z1ZS1wYWdpbmF0aW9uLTIvY29tcGlsZWQvdGhlbWVzL2J1bG1hLmpzIiwibm9kZV9tb2R1bGVzL3Z1ZS1wYWdpbmF0aW9uLTIvaW5kZXguanMiLCJub2RlX21vZHVsZXMvdnVlLXJvdXRlci9kaXN0L3Z1ZS1yb3V0ZXIuY29tbW9uLmpzIiwibm9kZV9tb2R1bGVzL3Z1ZS10YWJsZXMtMi9jb21waWxlZC9idXMuanMiLCJub2RlX21vZHVsZXMvdnVlLXRhYmxlcy0yL2NvbXBpbGVkL2NvbXB1dGVkL2FsbC1jb2x1bW5zLmpzIiwibm9kZV9tb2R1bGVzL3Z1ZS10YWJsZXMtMi9jb21waWxlZC9jb21wdXRlZC9jb2xzcGFuLmpzIiwibm9kZV9tb2R1bGVzL3Z1ZS10YWJsZXMtMi9jb21waWxlZC9jb21wdXRlZC9jdXN0b20tcS5qcyIsIm5vZGVfbW9kdWxlcy92dWUtdGFibGVzLTIvY29tcGlsZWQvY29tcHV0ZWQvZGF0ZXBpY2tlci1jb2x1bW5zLmpzIiwibm9kZV9tb2R1bGVzL3Z1ZS10YWJsZXMtMi9jb21waWxlZC9jb21wdXRlZC9maWx0ZXJhYmxlLWNvbHVtbnMuanMiLCJub2RlX21vZHVsZXMvdnVlLXRhYmxlcy0yL2NvbXBpbGVkL2NvbXB1dGVkL2ZpbHRlcmVkLWRhdGEuanMiLCJub2RlX21vZHVsZXMvdnVlLXRhYmxlcy0yL2NvbXBpbGVkL2NvbXB1dGVkL2ZpbHRlcmVkLXF1ZXJ5LmpzIiwibm9kZV9tb2R1bGVzL3Z1ZS10YWJsZXMtMi9jb21waWxlZC9jb21wdXRlZC9oYXMtY2hpbGQtcm93LmpzIiwibm9kZV9tb2R1bGVzL3Z1ZS10YWJsZXMtMi9jb21waWxlZC9jb21wdXRlZC9oYXMtZ2VuZXJpYy1maWx0ZXIuanMiLCJub2RlX21vZHVsZXMvdnVlLXRhYmxlcy0yL2NvbXBpbGVkL2NvbXB1dGVkL2xpc3QtY29sdW1ucy1vYmplY3QuanMiLCJub2RlX21vZHVsZXMvdnVlLXRhYmxlcy0yL2NvbXBpbGVkL2NvbXB1dGVkL29wdHMuanMiLCJub2RlX21vZHVsZXMvdnVlLXRhYmxlcy0yL2NvbXBpbGVkL2NvbXB1dGVkL3EuanMiLCJub2RlX21vZHVsZXMvdnVlLXRhYmxlcy0yL2NvbXBpbGVkL2NvbXB1dGVkL3N0b3JhZ2UuanMiLCJub2RlX21vZHVsZXMvdnVlLXRhYmxlcy0yL2NvbXBpbGVkL2NvbXB1dGVkL3RhYmxlLWRhdGEuanMiLCJub2RlX21vZHVsZXMvdnVlLXRhYmxlcy0yL2NvbXBpbGVkL2NvbXB1dGVkL3RlbXBsYXRlcy1rZXlzLmpzIiwibm9kZV9tb2R1bGVzL3Z1ZS10YWJsZXMtMi9jb21waWxlZC9jb21wdXRlZC90b3RhbC1wYWdlcy5qcyIsIm5vZGVfbW9kdWxlcy92dWUtdGFibGVzLTIvY29tcGlsZWQvY29uZmlnL2RlZmF1bHRzLmpzIiwibm9kZV9tb2R1bGVzL3Z1ZS10YWJsZXMtMi9jb21waWxlZC9maWx0ZXJzL2N1c3RvbS1maWx0ZXJzLmpzIiwibm9kZV9tb2R1bGVzL3Z1ZS10YWJsZXMtMi9jb21waWxlZC9maWx0ZXJzL2Zvcm1hdC1kYXRlLmpzIiwibm9kZV9tb2R1bGVzL3Z1ZS10YWJsZXMtMi9jb21waWxlZC9maWx0ZXJzL2hpZ2hsaWdodC1tYXRjaGVzLmpzIiwibm9kZV9tb2R1bGVzL3Z1ZS10YWJsZXMtMi9jb21waWxlZC9maWx0ZXJzL29wdGlvbi10ZXh0LmpzIiwibm9kZV9tb2R1bGVzL3Z1ZS10YWJsZXMtMi9jb21waWxlZC9oZWxwZXJzL2lzLWVtcHR5LmpzIiwibm9kZV9tb2R1bGVzL3Z1ZS10YWJsZXMtMi9jb21waWxlZC9oZWxwZXJzL2lzLXZhbGlkLW1vbWVudC1vYmplY3QuanMiLCJub2RlX21vZHVsZXMvdnVlLXRhYmxlcy0yL2NvbXBpbGVkL2hlbHBlcnMvb2JqZWN0LWZpbGxlZC1rZXlzLWNvdW50LmpzIiwibm9kZV9tb2R1bGVzL3Z1ZS10YWJsZXMtMi9jb21waWxlZC9oZWxwZXJzL3Jlc2l6ZWFibGUtY29sdW1ucy5qcyIsIm5vZGVfbW9kdWxlcy92dWUtdGFibGVzLTIvY29tcGlsZWQvaGVscGVycy91Y2ZpcnN0LmpzIiwibm9kZV9tb2R1bGVzL3Z1ZS10YWJsZXMtMi9jb21waWxlZC9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy92dWUtdGFibGVzLTIvY29tcGlsZWQvbWV0aG9kcy9hcHBseS1maWx0ZXJzLmpzIiwibm9kZV9tb2R1bGVzL3Z1ZS10YWJsZXMtMi9jb21waWxlZC9tZXRob2RzL2NlbGwtY2xhc3Nlcy5qcyIsIm5vZGVfbW9kdWxlcy92dWUtdGFibGVzLTIvY29tcGlsZWQvbWV0aG9kcy9jaGlsZC1yb3ctdG9nZ2xlci1jbGFzcy5qcyIsIm5vZGVfbW9kdWxlcy92dWUtdGFibGVzLTIvY29tcGlsZWQvbWV0aG9kcy9jbGllbnQtc2VhcmNoLmpzIiwibm9kZV9tb2R1bGVzL3Z1ZS10YWJsZXMtMi9jb21waWxlZC9tZXRob2RzL2NvbHVtbi1jbGFzcy5qcyIsIm5vZGVfbW9kdWxlcy92dWUtdGFibGVzLTIvY29tcGlsZWQvbWV0aG9kcy9jdXJyZW50bHktc29ydGVkLmpzIiwibm9kZV9tb2R1bGVzL3Z1ZS10YWJsZXMtMi9jb21waWxlZC9tZXRob2RzL2RhdGUtZm9ybWF0LmpzIiwibm9kZV9tb2R1bGVzL3Z1ZS10YWJsZXMtMi9jb21waWxlZC9tZXRob2RzL2RlZmF1bHQtc29ydC5qcyIsIm5vZGVfbW9kdWxlcy92dWUtdGFibGVzLTIvY29tcGlsZWQvbWV0aG9kcy9kaXNwYXRjaC5qcyIsIm5vZGVfbW9kdWxlcy92dWUtdGFibGVzLTIvY29tcGlsZWQvbWV0aG9kcy9kaXNwbGF5LmpzIiwibm9kZV9tb2R1bGVzL3Z1ZS10YWJsZXMtMi9jb21waWxlZC9tZXRob2RzL2ZpbHRlcmFibGUuanMiLCJub2RlX21vZHVsZXMvdnVlLXRhYmxlcy0yL2NvbXBpbGVkL21ldGhvZHMvZ2V0LWNoaWxkLXJvdy10ZW1wbGF0ZS5qcyIsIm5vZGVfbW9kdWxlcy92dWUtdGFibGVzLTIvY29tcGlsZWQvbWV0aG9kcy9nZXQtY29sdW1uLW5hbWUuanMiLCJub2RlX21vZHVsZXMvdnVlLXRhYmxlcy0yL2NvbXBpbGVkL21ldGhvZHMvZ2V0LWRhdGEuanMiLCJub2RlX21vZHVsZXMvdnVlLXRhYmxlcy0yL2NvbXBpbGVkL21ldGhvZHMvZ2V0LWdyb3VwLXNsb3QuanMiLCJub2RlX21vZHVsZXMvdnVlLXRhYmxlcy0yL2NvbXBpbGVkL21ldGhvZHMvZ2V0LWhlYWRpbmctdG9vbHRpcC5qcyIsIm5vZGVfbW9kdWxlcy92dWUtdGFibGVzLTIvY29tcGlsZWQvbWV0aG9kcy9nZXQtaGVhZGluZy5qcyIsIm5vZGVfbW9kdWxlcy92dWUtdGFibGVzLTIvY29tcGlsZWQvbWV0aG9kcy9nZXQtaW5pdGlhbC1kYXRlLXJhbmdlLmpzIiwibm9kZV9tb2R1bGVzL3Z1ZS10YWJsZXMtMi9jb21waWxlZC9tZXRob2RzL2dldC1uYW1lLmpzIiwibm9kZV9tb2R1bGVzL3Z1ZS10YWJsZXMtMi9jb21waWxlZC9tZXRob2RzL2dldC1vcGVuLWNoaWxkLXJvd3MuanMiLCJub2RlX21vZHVsZXMvdnVlLXRhYmxlcy0yL2NvbXBpbGVkL21ldGhvZHMvZ2V0LXJlc3BvbnNlLWRhdGEuanMiLCJub2RlX21vZHVsZXMvdnVlLXRhYmxlcy0yL2NvbXBpbGVkL21ldGhvZHMvZ2V0LXNvcnQtZm4uanMiLCJub2RlX21vZHVsZXMvdnVlLXRhYmxlcy0yL2NvbXBpbGVkL21ldGhvZHMvZ2V0LXZhbHVlLmpzIiwibm9kZV9tb2R1bGVzL3Z1ZS10YWJsZXMtMi9jb21waWxlZC9tZXRob2RzL2hhcy1kYXRlLWZpbHRlcnMuanMiLCJub2RlX21vZHVsZXMvdnVlLXRhYmxlcy0yL2NvbXBpbGVkL21ldGhvZHMvaW5pdC1jdXN0b20tZmlsdGVycy5qcyIsIm5vZGVfbW9kdWxlcy92dWUtdGFibGVzLTIvY29tcGlsZWQvbWV0aG9kcy9pbml0LWRhdGUtZmlsdGVycy5qcyIsIm5vZGVfbW9kdWxlcy92dWUtdGFibGVzLTIvY29tcGlsZWQvbWV0aG9kcy9pbml0LW9wdGlvbnMuanMiLCJub2RlX21vZHVsZXMvdnVlLXRhYmxlcy0yL2NvbXBpbGVkL21ldGhvZHMvaW5pdC1vcmRlci1ieS5qcyIsIm5vZGVfbW9kdWxlcy92dWUtdGFibGVzLTIvY29tcGlsZWQvbWV0aG9kcy9pbml0LXBhZ2luYXRpb24uanMiLCJub2RlX21vZHVsZXMvdnVlLXRhYmxlcy0yL2NvbXBpbGVkL21ldGhvZHMvaW5pdC1xdWVyeS5qcyIsIm5vZGVfbW9kdWxlcy92dWUtdGFibGVzLTIvY29tcGlsZWQvbWV0aG9kcy9pbml0LXN0YXRlLmpzIiwibm9kZV9tb2R1bGVzL3Z1ZS10YWJsZXMtMi9jb21waWxlZC9tZXRob2RzL2luaXRpYWwtb3JkZXItYXNjZW5kaW5nLmpzIiwibm9kZV9tb2R1bGVzL3Z1ZS10YWJsZXMtMi9jb21waWxlZC9tZXRob2RzL2lzLWRhdGUtZmlsdGVyLmpzIiwibm9kZV9tb2R1bGVzL3Z1ZS10YWJsZXMtMi9jb21waWxlZC9tZXRob2RzL2lzLWxpc3QtZmlsdGVyLmpzIiwibm9kZV9tb2R1bGVzL3Z1ZS10YWJsZXMtMi9jb21waWxlZC9tZXRob2RzL2lzLXRleHQtZmlsdGVyLmpzIiwibm9kZV9tb2R1bGVzL3Z1ZS10YWJsZXMtMi9jb21waWxlZC9tZXRob2RzL29uLXBhZ2luYXRpb24uanMiLCJub2RlX21vZHVsZXMvdnVlLXRhYmxlcy0yL2NvbXBpbGVkL21ldGhvZHMvb25seS1jb2x1bW4uanMiLCJub2RlX21vZHVsZXMvdnVlLXRhYmxlcy0yL2NvbXBpbGVkL21ldGhvZHMvb3JkZXItYnktY29sdW1uLmpzIiwibm9kZV9tb2R1bGVzL3Z1ZS10YWJsZXMtMi9jb21waWxlZC9tZXRob2RzL3JlZnJlc2guanMiLCJub2RlX21vZHVsZXMvdnVlLXRhYmxlcy0yL2NvbXBpbGVkL21ldGhvZHMvcmVnaXN0ZXItY2xpZW50LWZpbHRlcnMuanMiLCJub2RlX21vZHVsZXMvdnVlLXRhYmxlcy0yL2NvbXBpbGVkL21ldGhvZHMvcmVnaXN0ZXItc2VydmVyLWZpbHRlcnMuanMiLCJub2RlX21vZHVsZXMvdnVlLXRhYmxlcy0yL2NvbXBpbGVkL21ldGhvZHMvcmVuZGVyLmpzIiwibm9kZV9tb2R1bGVzL3Z1ZS10YWJsZXMtMi9jb21waWxlZC9tZXRob2RzL3Jlc2V0LXF1ZXJ5LmpzIiwibm9kZV9tb2R1bGVzL3Z1ZS10YWJsZXMtMi9jb21waWxlZC9tZXRob2RzL3Jvdy13YXMtY2xpY2tlZC5qcyIsIm5vZGVfbW9kdWxlcy92dWUtdGFibGVzLTIvY29tcGlsZWQvbWV0aG9kcy9zZW5kLXJlcXVlc3QuanMiLCJub2RlX21vZHVsZXMvdnVlLXRhYmxlcy0yL2NvbXBpbGVkL21ldGhvZHMvc2VydmVyLXNlYXJjaC5qcyIsIm5vZGVfbW9kdWxlcy92dWUtdGFibGVzLTIvY29tcGlsZWQvbWV0aG9kcy9zZXQtY29sdW1ucy1kcm9wZG93bi1jbG9zZS1saXN0ZW5lci5qcyIsIm5vZGVfbW9kdWxlcy92dWUtdGFibGVzLTIvY29tcGlsZWQvbWV0aG9kcy9zZXQtZGF0YS5qcyIsIm5vZGVfbW9kdWxlcy92dWUtdGFibGVzLTIvY29tcGlsZWQvbWV0aG9kcy9zZXQtZGF0ZXBpY2tlci10ZXh0LmpzIiwibm9kZV9tb2R1bGVzL3Z1ZS10YWJsZXMtMi9jb21waWxlZC9tZXRob2RzL3NldC1maWx0ZXIuanMiLCJub2RlX21vZHVsZXMvdnVlLXRhYmxlcy0yL2NvbXBpbGVkL21ldGhvZHMvc2V0LWZpbHRlcnMtZG9tLmpzIiwibm9kZV9tb2R1bGVzL3Z1ZS10YWJsZXMtMi9jb21waWxlZC9tZXRob2RzL3NldC1saW1pdC5qcyIsIm5vZGVfbW9kdWxlcy92dWUtdGFibGVzLTIvY29tcGlsZWQvbWV0aG9kcy9zZXQtb3JkZXIuanMiLCJub2RlX21vZHVsZXMvdnVlLXRhYmxlcy0yL2NvbXBpbGVkL21ldGhvZHMvc2V0LXBhZ2UuanMiLCJub2RlX21vZHVsZXMvdnVlLXRhYmxlcy0yL2NvbXBpbGVkL21ldGhvZHMvc2V0LXVzZXItbXVsdGktc29ydC5qcyIsIm5vZGVfbW9kdWxlcy92dWUtdGFibGVzLTIvY29tcGlsZWQvbWV0aG9kcy9zaG91bGQtc2hvdy1jb2x1bW4tb24taW5pdC5qcyIsIm5vZGVfbW9kdWxlcy92dWUtdGFibGVzLTIvY29tcGlsZWQvbWV0aG9kcy9zb3J0YWJsZS1jaGV2cm9uLWNsYXNzLmpzIiwibm9kZV9tb2R1bGVzL3Z1ZS10YWJsZXMtMi9jb21waWxlZC9tZXRob2RzL3NvcnRhYmxlLWNsYXNzLmpzIiwibm9kZV9tb2R1bGVzL3Z1ZS10YWJsZXMtMi9jb21waWxlZC9tZXRob2RzL3NvcnRhYmxlLmpzIiwibm9kZV9tb2R1bGVzL3Z1ZS10YWJsZXMtMi9jb21waWxlZC9tZXRob2RzL3RvZ2dsZS1jaGlsZC1yb3cuanMiLCJub2RlX21vZHVsZXMvdnVlLXRhYmxlcy0yL2NvbXBpbGVkL21ldGhvZHMvdG9nZ2xlLWNvbHVtbi5qcyIsIm5vZGVfbW9kdWxlcy92dWUtdGFibGVzLTIvY29tcGlsZWQvbWV0aG9kcy90b2dnbGUtY29sdW1ucy1kcm9wZG93bi5qcyIsIm5vZGVfbW9kdWxlcy92dWUtdGFibGVzLTIvY29tcGlsZWQvbWV0aG9kcy90b2dnbGUtZ3JvdXAtZGlyZWN0aW9uLmpzIiwibm9kZV9tb2R1bGVzL3Z1ZS10YWJsZXMtMi9jb21waWxlZC9tZXRob2RzL3RyYW5zZm9ybS1kYXRlLXN0cmluZ3MtdG8tbW9tZW50LmpzIiwibm9kZV9tb2R1bGVzL3Z1ZS10YWJsZXMtMi9jb21waWxlZC9tZXRob2RzL3VwZGF0ZS1zdGF0ZS5qcyIsIm5vZGVfbW9kdWxlcy92dWUtdGFibGVzLTIvY29tcGlsZWQvbWl4aW5zL2JlZm9yZS1kZXN0cm95LmpzIiwibm9kZV9tb2R1bGVzL3Z1ZS10YWJsZXMtMi9jb21waWxlZC9taXhpbnMvY29tcHV0ZWQuanMiLCJub2RlX21vZHVsZXMvdnVlLXRhYmxlcy0yL2NvbXBpbGVkL21peGlucy9jcmVhdGVkLmpzIiwibm9kZV9tb2R1bGVzL3Z1ZS10YWJsZXMtMi9jb21waWxlZC9taXhpbnMvZGF0YS5qcyIsIm5vZGVfbW9kdWxlcy92dWUtdGFibGVzLTIvY29tcGlsZWQvbWl4aW5zL21ldGhvZHMuanMiLCJub2RlX21vZHVsZXMvdnVlLXRhYmxlcy0yL2NvbXBpbGVkL21vZHVsZXMvY29sdW1uLWZpbHRlcnMuanMiLCJub2RlX21vZHVsZXMvdnVlLXRhYmxlcy0yL2NvbXBpbGVkL21vZHVsZXMvY29sdW1ucy1kcm9wZG93bi5qcyIsIm5vZGVfbW9kdWxlcy92dWUtdGFibGVzLTIvY29tcGlsZWQvbW9kdWxlcy9kYXRlLWZpbHRlci5qcyIsIm5vZGVfbW9kdWxlcy92dWUtdGFibGVzLTIvY29tcGlsZWQvbW9kdWxlcy9kcm9wZG93bi1pdGVtLXdyYXBwZXIuanMiLCJub2RlX21vZHVsZXMvdnVlLXRhYmxlcy0yL2NvbXBpbGVkL21vZHVsZXMvZHJvcGRvd24tcGFnaW5hdGlvbi1jb3VudC5qcyIsIm5vZGVfbW9kdWxlcy92dWUtdGFibGVzLTIvY29tcGlsZWQvbW9kdWxlcy9kcm9wZG93bi1wYWdpbmF0aW9uLmpzIiwibm9kZV9tb2R1bGVzL3Z1ZS10YWJsZXMtMi9jb21waWxlZC9tb2R1bGVzL2Ryb3Bkb3duLXdyYXBwZXIuanMiLCJub2RlX21vZHVsZXMvdnVlLXRhYmxlcy0yL2NvbXBpbGVkL21vZHVsZXMvaGVhZGluZ3MuanMiLCJub2RlX21vZHVsZXMvdnVlLXRhYmxlcy0yL2NvbXBpbGVkL21vZHVsZXMvbGlzdC1maWx0ZXIuanMiLCJub2RlX21vZHVsZXMvdnVlLXRhYmxlcy0yL2NvbXBpbGVkL21vZHVsZXMvbm9ybWFsLWZpbHRlci5qcyIsIm5vZGVfbW9kdWxlcy92dWUtdGFibGVzLTIvY29tcGlsZWQvbW9kdWxlcy9wYWdpbmF0aW9uLmpzIiwibm9kZV9tb2R1bGVzL3Z1ZS10YWJsZXMtMi9jb21waWxlZC9tb2R1bGVzL3Blci1wYWdlLXZhbHVlcy5qcyIsIm5vZGVfbW9kdWxlcy92dWUtdGFibGVzLTIvY29tcGlsZWQvbW9kdWxlcy9wZXItcGFnZS5qcyIsIm5vZGVfbW9kdWxlcy92dWUtdGFibGVzLTIvY29tcGlsZWQvbW9kdWxlcy9yb3dzLmpzIiwibm9kZV9tb2R1bGVzL3Z1ZS10YWJsZXMtMi9jb21waWxlZC9tb2R1bGVzL3NvcnQtY29udHJvbC5qcyIsIm5vZGVfbW9kdWxlcy92dWUtdGFibGVzLTIvY29tcGlsZWQvbW9kdWxlcy90ZXh0LWZpbHRlci5qcyIsIm5vZGVfbW9kdWxlcy92dWUtdGFibGVzLTIvY29tcGlsZWQvc2xvdHMuanMiLCJub2RlX21vZHVsZXMvdnVlLXRhYmxlcy0yL2NvbXBpbGVkL3N0YXRlL2RhdGEuanMiLCJub2RlX21vZHVsZXMvdnVlLXRhYmxlcy0yL2NvbXBpbGVkL3N0YXRlL211dGF0aW9ucy5qcyIsIm5vZGVfbW9kdWxlcy92dWUtdGFibGVzLTIvY29tcGlsZWQvc3RhdGUvbm9ybWFsLmpzIiwibm9kZV9tb2R1bGVzL3Z1ZS10YWJsZXMtMi9jb21waWxlZC9zdGF0ZS9yZWdpc3Rlci1tb2R1bGUuanMiLCJub2RlX21vZHVsZXMvdnVlLXRhYmxlcy0yL2NvbXBpbGVkL3N0YXRlL3N0YXRlLmpzIiwibm9kZV9tb2R1bGVzL3Z1ZS10YWJsZXMtMi9jb21waWxlZC9zdGF0ZS92dWV4LmpzIiwibm9kZV9tb2R1bGVzL3Z1ZS10YWJsZXMtMi9jb21waWxlZC90YWJsZS5qcyIsIm5vZGVfbW9kdWxlcy92dWUtdGFibGVzLTIvY29tcGlsZWQvdGVtcGxhdGUtY29tcGlsZXIuanMiLCJub2RlX21vZHVsZXMvdnVlLXRhYmxlcy0yL2NvbXBpbGVkL3RlbXBsYXRlcy9kZWZhdWx0LmpzIiwibm9kZV9tb2R1bGVzL3Z1ZS10YWJsZXMtMi9jb21waWxlZC90ZW1wbGF0ZXMvZm9vdGVyLXBhZ2luYXRpb24uanMiLCJub2RlX21vZHVsZXMvdnVlLXRhYmxlcy0yL2NvbXBpbGVkL3RoZW1lcy9ib290c3RyYXAzLmpzIiwibm9kZV9tb2R1bGVzL3Z1ZS10YWJsZXMtMi9jb21waWxlZC90aGVtZXMvYm9vdHN0cmFwNC5qcyIsIm5vZGVfbW9kdWxlcy92dWUtdGFibGVzLTIvY29tcGlsZWQvdGhlbWVzL2J1bG1hLmpzIiwibm9kZV9tb2R1bGVzL3Z1ZS10YWJsZXMtMi9jb21waWxlZC92LWNsaWVudC10YWJsZS5qcyIsIm5vZGVfbW9kdWxlcy92dWUtdGFibGVzLTIvY29tcGlsZWQvdi1zZXJ2ZXItdGFibGUuanMiLCJub2RlX21vZHVsZXMvdnVlLXRhYmxlcy0yL25vZGVfbW9kdWxlcy9jbG9uZS9jbG9uZS5qcyIsIm5vZGVfbW9kdWxlcy92dWUvZGlzdC92dWUuY29tbW9uLmpzIiwibm9kZV9tb2R1bGVzL3Z1ZS9kaXN0L3Z1ZS5jb21tb24ucHJvZC5qcyIsIm5vZGVfbW9kdWxlcy92dWUvZGlzdC92dWUucnVudGltZS5jb21tb24uanMiLCJub2RlX21vZHVsZXMvdnVlL2Rpc3QvdnVlLnJ1bnRpbWUuY29tbW9uLnByb2QuanMiLCJub2RlX21vZHVsZXMvdnVlaWZ5L2xpYi9pbnNlcnQtY3NzLmpzIiwibm9kZV9tb2R1bGVzL3Z1ZWpzLWRhdGVwaWNrZXIvZGlzdC9idWlsZC5qcyIsIm5vZGVfbW9kdWxlcy92dWV4L2Rpc3QvdnVleC5jb21tb24uanMiLCJzcmMvanMvbWFzdGVyLmpzIiwic3JjL2pzL21vZHVsZXMvYW5hbHl0aWNzLWFjdGlvbnMuanMiLCJzcmMvanMvbW9kdWxlcy9icmFuY2gtYmFyLmpzIiwic3JjL2pzL21vZHVsZXMvY29sbGVjdGlvbi1tYWtlci5qcyIsInNyYy9qcy9tb2R1bGVzL2N1c3RvbS1vcmRlcmVyLWluZm8uanMiLCJzcmMvanMvbW9kdWxlcy9jdXN0b20tc2VsZWN0LmpzIiwic3JjL2pzL21vZHVsZXMvZmlsdGVyLW1hY2hpbmUtYWNjZXNzb3JpZXMuanMiLCJzcmMvanMvbW9kdWxlcy9maWx0ZXItbmV3cy5qcyIsInNyYy9qcy9tb2R1bGVzL2ltYWdlLXBvcHVwLmpzIiwic3JjL2pzL21vZHVsZXMvbWFjaGluZS1zZWFyY2guanMiLCJzcmMvanMvbW9kdWxlcy9uYXZpZ2F0aW9uLmpzIiwic3JjL2pzL21vZHVsZXMvc2VsZWN0LW1hdGVyaWFsLWxhbmd1YWdlLmpzIiwic3JjL2pzL21vZHVsZXMvc2VydmljZXMvYXBpLmpzIiwic3JjL2pzL21vZHVsZXMvc2VydmljZXMvZGF0YS1zZXJ2aWNlLmpzIiwic3JjL2pzL21vZHVsZXMvc2VydmljZXMvdXNlci1yaWdodHMuanMiLCJzcmMvanMvbW9kdWxlcy9zaG93LW1vcmUtZmlsZS1pbnB1dHMuanMiLCJzcmMvanMvbW9kdWxlcy92aWRlby1wb3B1cC5qcyIsInNyYy9qcy9tb2R1bGVzL3Z1ZS9hcHBzL2FwcC52dWUiLCJzcmMvanMvbW9kdWxlcy92dWUvYXBwcy9jb21tb24tc2V0dGluZ3MuanMiLCJzcmMvanMvbW9kdWxlcy92dWUvYXBwcy9jb21wbGFpbnRzLWFwcC9pbmRleC5qcyIsInNyYy9qcy9tb2R1bGVzL3Z1ZS9hcHBzL2NvbXBsYWludHMtYXBwL3JvdXRlci9pbmRleC5qcyIsInNyYy9qcy9tb2R1bGVzL3Z1ZS9hcHBzL2N1c3RvbWVyLW1hY2hpbmVzLWFwcC9yb3V0ZXIvaW5kZXguanMiLCJzcmMvanMvbW9kdWxlcy92dWUvYXBwcy9jdXN0b21lcnMtYXBwL2luZGV4LmpzIiwic3JjL2pzL21vZHVsZXMvdnVlL2FwcHMvY3VzdG9tZXJzLWFwcC9yb3V0ZXIvaW5kZXguanMiLCJzcmMvanMvbW9kdWxlcy92dWUvYXBwcy9jdXN0b21lcnMtYXBwL3ZpZXctaG9tZS52dWUiLCJzcmMvanMvbW9kdWxlcy92dWUvYXBwcy9mb3Jnb3R0ZW4tcGFzc3dvcmQtYXBwL2luZGV4LmpzIiwic3JjL2pzL21vZHVsZXMvdnVlL2FwcHMvZm9yZ290dGVuLXBhc3N3b3JkLWFwcC9yb3V0ZXIvaW5kZXguanMiLCJzcmMvanMvbW9kdWxlcy92dWUvYXBwcy9vd24tY29tcGFueS1hcHAvcm91dGVyL2luZGV4LmpzIiwic3JjL2pzL21vZHVsZXMvdnVlL2FwcHMvdXBkYXRlLXBhc3N3b3JkLWFwcC9pbmRleC5qcyIsInNyYy9qcy9tb2R1bGVzL3Z1ZS9hcHBzL3VwZGF0ZS1wYXNzd29yZC1hcHAvcm91dGVyL2luZGV4LmpzIiwic3JjL2pzL21vZHVsZXMvdnVlL2FwcHMvdXNlci1zZXR0aW5ncy1hcHAvaW5kZXguanMiLCJzcmMvanMvbW9kdWxlcy92dWUvYXBwcy91c2VyLXNldHRpbmdzLWFwcC9yb3V0ZXIvaW5kZXguanMiLCJzcmMvanMvbW9kdWxlcy92dWUvYXBwcy93YXJyYW50eS1yZWdpc3RyYXRpb25zLWFwcC9yb3V0ZXIvaW5kZXguanMiLCJzcmMvanMvbW9kdWxlcy92dWUvY29tcG9uZW50cy9tb2RhbC1jb21wYW55LnZ1ZSIsInNyYy9qcy9tb2R1bGVzL3Z1ZS9jb21wb25lbnRzL21vZGFsLWNvbXBsYWludC52dWUiLCJzcmMvanMvbW9kdWxlcy92dWUvY29tcG9uZW50cy9tb2RhbC11c2VyLnZ1ZSIsInNyYy9qcy9tb2R1bGVzL3Z1ZS9jb21wb25lbnRzL21vZGFsLXdhcnJhbnR5LXJlZ2lzdHJhdGlvbi52dWUiLCJzcmMvanMvbW9kdWxlcy92dWUvY29tcG9uZW50cy90aGUtMS1jb2x1bW4tbGF5b3V0LmpzIiwic3JjL2pzL21vZHVsZXMvdnVlL2NvbXBvbmVudHMvdGhlLXNpZGViYXItbGF5b3V0LmpzIiwic3JjL2pzL21vZHVsZXMvdnVlL2NvbXBvbmVudHMvdGhlLXN1YmhlYWRlci5qcyIsInNyYy9qcy9tb2R1bGVzL3Z1ZS9jb21wb25lbnRzL3YtY29tcGxhaW50LXVzZXItaW5mby52dWUiLCJzcmMvanMvbW9kdWxlcy92dWUvY29tcG9uZW50cy92LWN1cnJlbmN5LWlucHV0LnZ1ZSIsInNyYy9qcy9tb2R1bGVzL3Z1ZS9jb21wb25lbnRzL3YtZGF0YS1pdGVtcy52dWUiLCJzcmMvanMvbW9kdWxlcy92dWUvY29tcG9uZW50cy92LWZpbGUudnVlIiwic3JjL2pzL21vZHVsZXMvdnVlL2NvbXBvbmVudHMvdi1mb3JtLWZpZWxkLnZ1ZSIsInNyYy9qcy9tb2R1bGVzL3Z1ZS9jb21wb25lbnRzL3YtZm9ybS52dWUiLCJzcmMvanMvbW9kdWxlcy92dWUvY29tcG9uZW50cy92LW1vZGFsLWNvbnRlbnQudnVlIiwic3JjL2pzL21vZHVsZXMvdnVlL2NvbXBvbmVudHMvdi1udW1iZXItaW5wdXQudnVlIiwic3JjL2pzL21vZHVsZXMvdnVlL2NvbXBvbmVudHMvdi1wYXNzLXN0cmVuZ3RoLnZ1ZSIsInNyYy9qcy9tb2R1bGVzL3Z1ZS9jb21wb25lbnRzL3ZpZXctY2hhbmdlLXBhc3N3b3JkLnZ1ZSIsInNyYy9qcy9tb2R1bGVzL3Z1ZS9jb21wb25lbnRzL3ZpZXctY29tcGFuaWVzLnZ1ZSIsInNyYy9qcy9tb2R1bGVzL3Z1ZS9jb21wb25lbnRzL3ZpZXctY29tcGFueS52dWUiLCJzcmMvanMvbW9kdWxlcy92dWUvY29tcG9uZW50cy92aWV3LWNvbXBsYWludC52dWUiLCJzcmMvanMvbW9kdWxlcy92dWUvY29tcG9uZW50cy92aWV3LWNvbXBsYWludHMudnVlIiwic3JjL2pzL21vZHVsZXMvdnVlL2NvbXBvbmVudHMvdmlldy1jdXN0b21lci1tYWNoaW5lLnZ1ZSIsInNyYy9qcy9tb2R1bGVzL3Z1ZS9jb21wb25lbnRzL3ZpZXctY3VzdG9tZXItbWFjaGluZXMudnVlIiwic3JjL2pzL21vZHVsZXMvdnVlL2NvbXBvbmVudHMvdmlldy1lZGl0LWFjY291bnQudnVlIiwic3JjL2pzL21vZHVsZXMvdnVlL2NvbXBvbmVudHMvdmlldy1mb3Jnb3R0ZW4tcGFzc3dvcmQudnVlIiwic3JjL2pzL21vZHVsZXMvdnVlL2NvbXBvbmVudHMvdmlldy11cGRhdGUtcGFzc3dvcmQudnVlIiwic3JjL2pzL21vZHVsZXMvdnVlL2NvbXBvbmVudHMvdmlldy11c2VyLXNldHRpbmdzLnZ1ZSIsInNyYy9qcy9tb2R1bGVzL3Z1ZS9jb21wb25lbnRzL3ZpZXctd2FycmFudHktcmVnaXN0cmF0aW9uLnZ1ZSIsInNyYy9qcy9tb2R1bGVzL3Z1ZS9jb21wb25lbnRzL3ZpZXctd2FycmFudHktcmVnaXN0cmF0aW9ucy52dWUiLCJzcmMvanMvbW9kdWxlcy92dWUvc3RvcmUvaW5kZXguanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Q0NBQyxTQUFVLEVBQVEsR0FDQyxnQkFBWixVQUEwQyxtQkFBWCxRQUF5QixPQUFPLFFBQVUs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RSxFQUFFLEVBQUUsU0FBUyxHQUFHLE1BQU8sR0FBRSxJQUFJLEtBQUssS0FBSyxHQUFJLE9BQU8sSUFBRyxFQUFFLEVBQUUsU0FBUyxHQUFHLEdBQUksR0FBRSxHQUFHLEVBQUUsV0FBVyxXQUFXLE1BQU8sR0FBRSxTQUFTLFdBQVcsTUFBTyxHQUFHLE9BQU8sR0FBRSxFQUFFLEVBQUUsSUFBSSxHQUFHLEdBQUcsRUFBRSxFQUFFLFNBQVMsRUFBRSxHQUFHLE1BQU8sUUFBTyxVQUFVLGVBQWUsS0FBSyxFQUFFLElBQUksRUFBRSxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUUsTUFBTSxTQUFTLEVBQUUsRUFBRSxHQUFHLEdBQUksR0FBRSxFQUFFLEVBQUcsaUJBQWlCLEtBQUksSUFBSSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxTQUFRLEVBQUcsRUFBRSxHQUFHLFNBQVMsV0FBVyxHQUFFLE9BQVEsU0FBUyxFQUFFLEVBQUUsR0FBRyxHQUFJLEdBQUUsRUFBRSxFQUFHLGlCQUFpQixLQUFJLElBQUksRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsU0FBUSxFQUFHLEVBQUUsR0FBRyxTQUFTLFdBQVcsR0FBRSxPQUFRLFNBQVMsRUFBRSxFQUFFLEdBQUcsR0FBSSxHQUFFLEVBQUUsR0FBSSxpQkFBaUIsS0FBSSxJQUFJLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLFNBQVEsRUFBRyxFQUFFLEdBQUcsU0FBUyxXQUFXLEdBQUUsT0FBUSxTQUFTLEVBQUUsR0FBRyxFQUFFLFFBQVEsU0FBUyxHQUFHLEdBQUksS0FBSyxPQUFPLEdBQUUsU0FBUyxXQUFXLE1BQU8sTUFBSyxJQUFJLFNBQVMsR0FBRyxHQUFJLEdBQUUsU0FBUyxFQUFFLEdBQUcsR0FBSSxHQUFFLEVBQUUsSUFBSSxHQUFHLEVBQUUsRUFBRSxFQUFHLEtBQUksRUFBRSxNQUFPLEVBQUUsSUFBRyxHQUFHLGtCQUFtQixNQUFLLENBQUMsR0FBSSxJQUFHLEVBQUUsRUFBRSxtRUFBbUUsS0FBSyxTQUFTLG1CQUFtQixLQUFLLFVBQVUsTUFBTSxNQUFpRixRQUFPLEdBQUcsT0FBbEYsRUFBRSxRQUFRLElBQUksU0FBUyxHQUFHLE1BQU0saUJBQWlCLEVBQUUsV0FBVyxFQUFFLFNBQTRCLFFBQVEsSUFBSSxLQUFLLE1BQU0sR0FBSSxFQUFFLFFBQU8sR0FBRyxLQUFLLE9BQU8sRUFBRSxFQUFHLE9BQU8sR0FBRSxHQUFHLFVBQVUsRUFBRSxHQUFHLElBQUksRUFBRSxJQUFJLElBQUksS0FBSyxLQUFLLEVBQUUsRUFBRSxTQUFTLEVBQUUsR0FBRyxnQkFBaUIsS0FBSSxJQUFJLEtBQUssRUFBRSxLQUFNLEtBQUksR0FBSSxNQUFLLEVBQUUsRUFBRSxFQUFFLEtBQUssT0FBTyxJQUFJLENBQUMsR0FBSSxHQUFFLEtBQUssR0FBRyxFQUFHLGlCQUFpQixLQUFJLEVBQUUsSUFBRyxHQUFJLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLElBQUksQ0FBQyxHQUFJLEdBQUUsRUFBRSxFQUFHLGlCQUFpQixHQUFFLElBQUksRUFBRSxFQUFFLE1BQU0sSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsSUFBSSxFQUFFLEdBQUcsVUFBVSxFQUFFLEtBQUssRUFBRSxLQUFLLE1BQU0sSUFBSSxTQUFTLEVBQUUsRUFBRSxHQUFHLFlBQWEsU0FBUyxHQUFFLEVBQUUsR0FBRyxJQUFJLEdBQUksTUFBSyxLQUFLLEVBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxJQUFJLENBQUMsR0FBSSxHQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUcsTUFBTSxFQUFFLEdBQUcsVUFBVSxFQUFFLEdBQUksR0FBRSxHQUFHLEVBQUUsR0FBRyxNQUFNLEtBQUssR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLEdBQUcsRUFBRSxPQUFPLEtBQUssTUFBTyxHQUErZixRQUFTLEdBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxLQUFNLElBQUksR0FBRSxFQUFFLEVBQUUsRUFBRyxPQUFPLEdBQUUsR0FBRyxTQUFTLEdBQUcsSUFBSSxHQUFJLE1BQUssRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLElBQUksQ0FBQyxHQUFJLEdBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLEtBQUssT0FBTyxFQUFFLEtBQUssR0FBc0IsSUFBbkIsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLElBQUksS0FBUyxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sSUFBSSxDQUFDLEdBQUksRUFBRSxJQUFHLEtBQUssRUFBRSxFQUFFLElBQUksS0FBSyxDQUFDLElBQUksR0FBSSxHQUFFLEVBQUUsRUFBRSxFQUFFLE1BQU0sT0FBTyxJQUFJLEVBQUUsTUFBTSxXQUFZLEdBQUUsRUFBRSxPQUFPLFFBQVMsR0FBRSxHQUFHLElBQUksR0FBSSxHQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sSUFBSSxDQUFDLEdBQUksR0FBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBSSxJQUFHLEVBQUUsQ0FBQyxFQUFFLE1BQU8sS0FBSSxHQUFJLEdBQUUsRUFBRSxFQUFFLEVBQUUsTUFBTSxPQUFPLElBQUksRUFBRSxNQUFNLEdBQUcsRUFBRSxNQUFNLEdBQUksTUFBSyxFQUFFLEVBQUUsTUFBTSxPQUFPLElBQUksRUFBRSxNQUFNLEtBQUssRUFBRSxFQUFFLE1BQU0sSUFBSyxHQUFFLE1BQU0sT0FBTyxFQUFFLE1BQU0sU0FBUyxFQUFFLE1BQU0sT0FBTyxFQUFFLE1BQU0sWUFBWSxDQUFDLEdBQUksS0FBSyxLQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsTUFBTSxPQUFPLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxNQUFNLElBQUssR0FBRSxFQUFFLEtBQUssR0FBRyxFQUFFLEdBQUcsS0FBSyxFQUFFLE1BQU0sS0FBSyxRQUFTLEtBQUksR0FBSSxHQUFFLFNBQVMsY0FBYyxRQUFTLE9BQU8sR0FBRSxLQUFLLFdBQVcsRUFBRSxZQUFZLEdBQUcsRUFBRSxRQUFTLEdBQUUsR0FBRyxHQUFJLEdBQUUsRUFBRSxFQUFFLFNBQVMsY0FBYyxTQUFTLEVBQUUsTUFBTSxFQUFFLEdBQUcsS0FBTSxJQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsTUFBTyxFQUFFLEdBQUUsV0FBVyxZQUFZLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBSSxHQUFFLEdBQUksR0FBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsS0FBSyxLQUFLLEVBQUUsR0FBRSxHQUFJLEVBQUUsRUFBRSxLQUFLLEtBQUssRUFBRSxHQUFFLE9BQVMsR0FBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLEdBQUcsR0FBSSxHQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUsU0FBMk8sSUFBak8sR0FBRyxFQUFFLGFBQWEsUUFBUSxHQUFHLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxFQUFFLElBQUksSUFBSSxHQUFHLG1CQUFtQixFQUFFLFFBQVEsR0FBRyxNQUFNLEdBQUcsdURBQXVELEtBQUssU0FBUyxtQkFBbUIsS0FBSyxVQUFVLE1BQU0sT0FBVSxFQUFFLFdBQVcsRUFBRSxXQUFXLFFBQVEsTUFBTSxDQUFDLEtBQUssRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLFdBQVksR0FBRSxZQUFZLFNBQVMsZUFBZSxNQUFNLEtBQUssS0FBSyxHQUFHLEVBQUUsV0FBVyxFQUFFLFdBQVcsWUFBWSxHQUFJLE9BQU8sR0FBRSxHQUFHLFNBQVMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxVQUFVLE1BQU8sR0FBRSxFQUFFLE9BQVEsTUFBOEUsUUFBUyxHQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBSSxHQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUksSUFBRyxFQUFFLFdBQVcsRUFBRSxXQUFXLFFBQVEsRUFBRSxFQUFFLE9BQU8sQ0FB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QUcsR0FBRyxTQUFTLEVBQUUsT0FBTyxLQUFLLEVBQUUsTUFBTSxFQUFHLEtBQUksR0FBSSxHQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sSUFBSSxDQUFDLEdBQUksR0FBRSxFQUFFLEVBQUcsSUFBRyxFQUFFLE9BQU8sS0FBSyxHQUFHLE9BQU8sS0FBSyxFQUFFLEtBQUssTUFBTSxXQUFXLElBQUksT0FBTyxLQUFLLEdBQUcsTUFBTSxJQUFJLEVBQUcsU0FBUSxPQUFPLEtBQUssR0FBRyxNQUFNLEtBQUssRUFBRSxTQUFTLEdBQUcsR0FBRyxnQkFBaUIsR0FBRSxNQUFPLElBQUcsQ0FBRSxJQUFJLEdBQUUsRUFBRSxFQUFHLFFBQU8sTUFBTSxFQUFFLE1BQU0sT0FBTyxFQUFFLE9BQU8sRUFBRSxFQUFFLE9BQVcsR0FBRyxLQUFLLGFBQWEsT0FBTyxNQUFNLFVBQVMsRUFBRyxLQUFLLFFBQVEsT0FBTyxLQUFLLE9BQU8sUUFBUSxHQUFHLFdBQVcsS0FBSyxRQUFRLFNBQVEsR0FBSSxVQUFVLEtBQUssUUFBUSxTQUFRLEdBQUksV0FBVyxNQUFNLFFBQVEsUUFBUSxTQUFRLEdBQUksWUFBWSxLQUFLLFFBQVEsU0FBUSxHQUFJLE9BQU8sS0FBSyxRQUFRLFNBQVEsR0FBSSxtQkFBbUIsS0FBSyxPQUFPLFFBQVEsZ0JBQWdCLFlBQVksS0FBSyxRQUFRLGNBQWMsS0FBSyxRQUFRLFNBQVEsR0FBSSxTQUFTLE1BQU0sT0FBTyxPQUFPLFFBQVEsWUFBWSxVQUFVLEtBQUssT0FBTyxRQUFRLEVBQUUsVUFBVSxTQUFTLEdBQUcsTUFBTyxJQUFHLElBQUksV0FBVyxLQUFLLE9BQU8sUUFBUSxFQUFFLFVBQVUsU0FBUyxHQUFHLE1BQU8sSUFBRyxJQUFJLFVBQVUsS0FBSyxPQUFPLFFBQVEsRUFBQSxHQUFLLFdBQVcsS0FBSyxPQUFPLFFBQVEsRUFBQSxHQUFLLE9BQU8sTUFBTSxPQUFPLFFBQVEsUUFBUSxJQUFJLFVBQVUsR0FBRyxRQUFRLE1BQU0sT0FBTyxRQUFRLFFBQVEsSUFBSSxVQUFVLFNBQVMsR0FBRyxN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LEdBQUksWUFBWSxLQUFLLE9BQU8sUUFBUSxTQUFTLEtBQUssV0FBVyxPQUFPLFVBQVUsaUJBQWlCLE1BQU0sWUFBWSxVQUFVLFFBQVEsV0FBVyxNQUFPLE1BQUssT0FBTyxTQUFTLEtBQUssZ0JBQWdCLFlBQVksV0FBVyxPQUFPLEtBQUssT0FBTyxPQUFPLElBQUksS0FBSyxRQUFRLE9BQU8sUUFBUSxTQUFTLGFBQWEsU0FBUyxHQUFHLE9BQU8saUJBQWlCLFFBQVEsS0FBSyxTQUFTLEtBQUssT0FBTyxFQUFFLFdBQVcsS0FBSyxNQUFNLGdCQUFnQixJQUFJLGFBQWEsU0FBUyxHQUFHLE9BQU8sb0JBQW9CLFFBQVEsS0FBSyxTQUFTLEtBQUssVUFBVSxLQUFLLE1BQU0sZ0JBQWdCLElBQUksTUFBTSxTQUFTLEVBQUUsR0FBRyxHQUFJLEdBQUUsRUFBRSxVQUFVLFlBQVEsS0FBUyxVQUFVLEdBQUcsVUFBVSxHQUFHLFFBQVEsRUFBRSxLQUFLLFFBQVEsRUFBRyxJQUFHLGtCQUFtQixHQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsR0FBRyxPQUFPLElBQUksS0FBSyxPQUFPLEtBQUssV0FBVyxRQUFRLFNBQVMsR0FBRyxHQUFHLEtBQUssRUFBRSxPQUFPLEVBQUUsS0FBSyxRQUFRLE9BQU8sQ0FBQyxHQUFJLEdBQUUsSUFBSSxLQUFLLFFBQVEsT0FBTyxFQUFFLEtBQUssUUFBUSxVQUFVLFNBQVMsR0FBRyxNQUFPLEdBQUUsV0FBVyxJQUFJLEdBQUcsS0FBSyxNQUFNLEVBQUUsRUFBRSxnQkFBZ0IsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLE1BQUssRUFBRyxLQUFLLEtBQUssTUFBTyxHQUFFLFFBQVEsT0FBTyxnQkFBaUIsSUFBSSxHQUFFLEVBQUUsUUFBUSxFQUFFLFdBQVcsR0FBSSxHQUFFLEtBQUssRUFBRSxFQUFFLGVBQWUsRUFBRSxFQUFFLE1BQU0sSUFBSSxDQUFFLE9BQU8sR0FBRSxPQUFPLE9BQU8sR0FBRyxxQkFBcUIsRUFBRSxHQUFHLEVBQUUsT0FBTyxTQUFTLEdBQUcsTUFBTyxHQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsSUFBSSxJQUFJLEVBQUUsR0FBRyxJQUFJLE9BQU8sU0FBUyxHQUFHLEVBQUUsT0FBTyxFQUFFLE9BQU8sUUFBUSxFQUFFLFlBQVcsR0FBSSxFQUFFLGlCQUFpQixFQUFFLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxJQUFJLElBQUksWUFBWSxJQUFJLE1BQU0sU0FBUyxHQUFHLEVBQUUsT0FBTyxLQUFLLEVBQUUsV0FBVyxTQUFTLFlBQVksRUFBRSxnQkFBZSxHQUFJLEVBQUUsY0FBYyxNQUFPLEdBQUUsZUFBYyxDQUFHLElBQUksR0FBRSxHQUFHLEtBQUssV0FBVyxPQUFPLFlBQVksUUFBUSxXQUFXLEtBQUssTUFBTSxrQkFBa0IsTUFBTSxTQUFTLElBQUksU0FBUyxHQUFHLEdBQUksR0FBRSxLQUFLLEVBQUUsRUFBRSxVQUFVLFlBQVEsS0FBUyxVQUFVLEdBQUcsVUFBVSxNQUFNLEVBQUUsRUFBRSxVQUFVLFlBQVEsS0FBUyxVQUFVLEdBQUcsVUFBVSxNQUFNLEVBQUUsRUFBRSxVQUFVLFlBQVEsS0FBUyxVQUFVLEdBQUcsVUFBVSxNQUFNLEVBQUUsSUFBSSxFQUFFLEVBQUUsTUFBTSxrQkFBa0IsQ0FBRSxNQUFLLE9BQU8sTUFBTSxHQUFHLEVBQUUsV0FBVyxTQUFTLEdBQUcsSUFBSSxHQUFJLEdBQUUsRUFBRSxFQUFFLFVBQVUsT0FBTyxJQUFJLENBQUMsR0FBSSxHQUFFLE1BQU0sVUFBVSxHQUFHLFVBQVUsTUFBTSxFQUFFLE9BQU8sS0FBSyxFQUFHLG1CQUFtQixRQUFPLHdCQUF3QixFQUFFLEVBQUUsT0FBTyxPQUFPLHNCQUFzQixHQUFHLE9BQU8sU0FBUyxHQUFHLE1BQU8sUUFBTyx5QkFBeUIsRUFBRSxHQUFHLGVBQWUsRUFBRSxRQUFRLFNBQVMsR0FBRyxHQUFJLEdBQUUsRUFBRSxDQUFFLEdBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLElBQUssR0FBRSxPQUFPLGVBQWUsRUFBRSxHQUFHLE1BQU0sRUFBRSxZQUFXLEVBQUcsY0FBYSxFQUFHLFVBQVMsSUFBSyxFQUFFLEdBQUcsSUFBSSxNQUFPLE9BQU0sR0FBRyxLQUFLLElBQUksZUFBZSxFQUFFLFVBQVUsRUFBRSxlQUFlLElBQUksS0FBSyxVQUFVLFdBQVcsRUFBRSxPQUFPLEtBQUssTUFBTSxPQUFPLFNBQVMsR0FBRyxHQUFJLEdBQUUsS0FBSyxPQUFPLFVBQVUsU0FBUyxHQUFHLE1BQU8sR0FBRSxLQUFLLEtBQUssSUFBSSxHQUFHLEtBQUssT0FBTyxPQUFPLEVBQUUsTUFBTSxNQUFLLEVBQUcsS0FBSyxLQUFLLEtBQU0sR0FBRSxRQUFRLE9BQU8seUJBQTBCLElBQUksR0FBRSxFQUFFLE9BQTZPLEdBQUUsRUFBRSxFQUFFLHFCQUFxQixXQUFXLE1BQU8sSUFBSSxJQUFJLEdBQUUsU0FBUyxFQUFFLEVBQUUsR0FBRyxJQUFJLEVBQUUsbUJBQW1CLEVBQUUsc0JBQXNCLENBQUMsR0FBSSxJQUFHLEVBQUUsU0FBUyxjQUFjLE9BQU8sU0FBUyxLQUFLLFlBQVksR0FBRyxFQUFHLElBQUksSUFBRyxPQUFPLEVBQUUsT0FBTyxTQUFTLEdBQUcsTUFBTyxHQUFFLE1BQU0sT0FBTyxHQUFHLEdBQUksRUFBRSxPQUFPLEdBQUUsbUJBQW1CLEdBQUcsUUFBUSxTQUFTLEdBQUcsR0FBSSxHQUFFLEVBQUUsVUFBVSxZQUFRLEtBQVMsVUFBVSxHQUFHLFVBQVUsS0FBTSxLQUFJLEtBQUssVUFBVSxDQUFDLEtBQUssV0FBVSxFQUFHLEtBQUssTUFBTSxHQUFJLEdBQUUsS0FBSyxhQUFhLElBQUssSUFBSSxHQUFFLEVBQUUsZUFBZSxRQUFRLEVBQUUsRUFBRSxvQkFBb0IsRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBSSxHQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLGFBQWEsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFHLEdBQUUsRUFBRSxJQUFJLEVBQUUsU0FBUyxHQUFHLElBQUksR0FBSSxHQUFFLEVBQUUsRUFBRSxVQUFVLE9BQU8sSUFBSSxDQUFDLEdBQUksR0FBRSxNQUFNLFVBQVUsR0FBRyxVQUFVLE1BQU0sRUFBRSxPQUFPLEtBQUssRUFBRyxtQkFBbUIsUUFBTyx3QkFBd0IsRUFBRSxFQUFFLE9BQU8sT0FBTyxzQkFBc0IsR0FBRyxPQUFPLFNBQVMsR0FBRyxNQUFPLFFBQU8seUJBQXlCLEVBQUUsR0FBRyxlQUFlLEVBQUUsUUFBUSxTQUFTLEdBQUcsR0FBSSxHQUFFLEVBQUUsQ0FBRSxHQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxJQUFLLEdBQUUsT0FBTyxlQUFlLEVBQUUsR0FBRyxNQUFNLEVBQUUsWUFBVyxFQUFHLGNBQWEsRUFBRyxVQUFTLElBQUssRUFBRSxHQUFHLElBQUksTUFBTyxPQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsUUFBUSxLQUFLLGlIQUFrSCxHQUFFLFVBQVUsUUFBUSxLQUFLLFNBQVMsR0FBRyxJQUFJLEdBQUksR0FBRSxVQUFVLE9BQU8sRUFBRSxHQUFJLE9BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsR0FBRyxVQUFVLEVBQUcsUUFBTyxFQUFFLElBQUksSUFBSSxTQUFTLE1BQU8sVUFBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sU0FBUyxHQUFFLEVBQUcsSUFBSSxVQUFNLElBQVEsR0FBRyxPQUFPLEdBQUksS0FBSSxTQUFTLE1BQU8sR0FBRSxRQUFRLEVBQUUsVUFBTSxJQUFRLEdBQUcsT0FBTyxJQUFJLFFBQVEsS0FBSyw0SkFBNEosS0FBSyxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxTQUFTLEdBQUUsRUFBRyxJQUFJLE9BQU8sU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sU0FBUyxNQUFFLEdBQU8sS0FBSyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLFVBQVUsVUFBVSxHQUFHLEVBQUUsVUFBVSxFQUFFLFVBQVUsa0JBQWtCLEdBQUcsRUFBRSxPQUFPLFlBQVksV0FBVyxPQUFPLEVBQUUsZUFBZSxFQUFFLGFBQWEsS0FBSyxjQUFjLEVBQUUsRUFBRSxRQUFROzs7Q0NBOTR6QixTQUEyQyxFQUFNLEdBQzFCLGdCQUFaLFVBQTBDLGdCQUFYLFFBQ3hDLE9BQU8sUUFBVSxFQUFRLFFBQVEsUUFDUixrQkFBWCxTQUF5QixPQUFPLElBQzlDLFFBQVEsT0FBUSxHQUNVLGdCQUFaLFNBQ2QsUUFBUSxvQkFBc0IsRUFBUSxRQUFRLFFBRTlDLEVBQUssb0JBQXNCLEVBQVEsRUFBVSxNQUM1QyxLQUFNLFNBQVMsR0FDbEIsTUFBZ0IsVUFBVSxHQUtoQixRQUFTLEdBQW9CLEdBRzVCLEdBQUcsRUFBaUIsR0FDbkIsTUFBTyxHQUFpQixHQUFVLE9BR25DLElBQUksR0FBUyxFQUFpQixJQUM3QixFQUFHLEVBQ0gsR0FBRyxFQUNILFdBVUQsT0FOQSxHQUFRLEdBQVUsS0FBSyxFQUFPLFFBQVMsRUFBUSxFQUFPLFFBQVMsR0FHL0QsRUFBTyxHQUFJLEVBR0osRUFBTyxRQXZCZixHQUFJLEtBK0RKLE9BbkNBLEdBQW9CLEVBQUksRUFHeEIsRUFBb0IsRUFBSSxFQUd4QixFQUFvQixFQUFJLFNBQVMsR0FBUyxNQUFPLElBR2pELEVBQW9CLEVBQUksU0FBUyxFQUFTLEVBQU0sR0FDM0MsRUFBb0IsRUFBRSxFQUFTLElBQ2xDLE9BQU8sZUFBZSxFQUFTLEdBQzlCLGNBQWMsRUFDZCxZQUFZLEVBQ1osSUFBSyxLQU1SLEVBQW9CLEVBQUksU0FBUyxHQUNoQyxHQUFJLEdBQVMsR0FBVSxFQUFPLFdBQzdCLFdBQXdCLE1BQU8sR0FBZ0IsU0FDL0MsV0FBOEIsTUFBTyxHQUV0QyxPQURBLEdBQW9CLEVBQUUsRUFBUSxJQUFLLEdBQzVCLEdBSVIsRUFBb0IsRUFBSSxTQUFTLEVBQVEsR0FBWSxNQUFPLFFBQU8sVUFBVSxlQUFlLEtBQUssRUFBUSxJQUd6RyxFQUFvQixFQUFJLFNBR2pCLEVBQW9CLEVBQW9CLEVBQUksS0FLdkQsU0FBVSxFQUFRLEdBS3hCLEVBQU8sUUFBVSxTQUNmLEVBQ0EsRUFDQSxFQUNBLEdBRUEsR0FBSSxHQUNBLEVBQWdCLEVBQW1CLE1BR25DLFFBQWMsR0FBaUIsT0FDdEIsWUFBVCxHQUE4QixhQUFULElBQ3ZCLEVBQVcsRUFDWCxFQUFnQixFQUFpQixRQUluQyxJQUFJLEdBQW1DLGtCQUFsQixHQUNqQixFQUFjLFFBQ2QsQ0FjSixJQVhJLElBQ0YsRUFBUSxPQUFTLEVBQWlCLE9BQ2xDLEVBQVEsZ0JBQWtCLEVBQWlCLGlCQUl6QyxJQUNGLEVBQVEsU0FBVyxHQUlqQixFQUFZLENBQ2QsR0FBSSxHQUFXLE9BQU8sT0FBTyxFQUFRLFVBQVksS0FDakQsUUFBTyxLQUFLLEdBQVksUUFBUSxTQUFVLEdBQ3hDLEdBQUksR0FBUyxFQUFXLEVBQ3hCLEdBQVMsR0FBTyxXQUFjLE1BQU8sTUFFdkMsRUFBUSxTQUFXLEVBR3JCLE9BQ0UsU0FBVSxFQUNWLFFBQVMsRUFDVCxRQUFTLEtBT1AsU0FBVSxFQUFRLEVBQXFCLEdBRTdDLFlBQytCLEdBQW9CLEVBQUUsRUFBcUIsSUFBSyxXQUFhLE1BQU8sSUFDOUUsSUFBSSxHQUFvQyxFQUFvQixJQUN4RCxFQUE0QyxFQUFvQixFQUFFLEdBR3ZGLEVBQVMsR0FBSSxHQUEwQyxHQUFJLEtBQU0sc0JBSS9ELFNBQVUsRUFBUSxFQUFxQixHQUU3QyxZQUNBLFFBQU8sZUFBZSxFQUFxQixjQUFnQixPQUFPLEdBQzdDLElBQUksR0FBbUQsRUFBb0IsR0FDdkUsRUFBMkQsRUFBb0IsRUFBRSxHQUNqRixFQUF3QyxFQUFvQixHQUNqRixFQUE0QixrQkFBWCxTQUFvRCxnQkFBcEIsUUFBTyxTQUF3QixTQUFVLEdBQU8sYUFBYyxJQUFTLFNBQVUsR0FBTyxNQUFPLElBQXlCLGtCQUFYLFNBQXlCLEVBQUksY0FBZ0IsUUFBVSxJQUFRLE9BQU8sVUFBWSxlQUFrQixJQUtsUSxHQUNGLFFBQVMsU0FBaUIsR0FDeEIsR0FBSSxHQUFPLFVBQVUsT0FBUyxPQUFzQixLQUFqQixVQUFVLEdBQW1CLFVBQVUsS0FFMUUsS0FBSSxLQUFLLFVBQVQsQ0FJQSxLQUFLLFdBQVksRUFDakIsS0FBSyxPQUFTLEVBRWQsRUFBSSxVQUFVLEVBQUssZUFBaUIsZ0JBQWlCLEVBQXlELEVBRTlHLElBQUksR0FBUyxTQUFnQixHQUNMLGdCQUFYLEtBQ1QsR0FBVyxNQUFPLEdBQUksS0FBTSxJQUcwQyxnQkFBakQsS0FBWCxFQUF5QixZQUFjLEVBQVEsS0FDekQsRUFBc0QsRUFBRSxNQUFNLE1BQU8sR0FJekUsR0FBTyxNQUFRLFNBQVUsR0FDdkIsRUFBc0QsRUFBRSxNQUFNLFFBQVMsR0FHekUsSUFBSSxHQUFPLEVBQUssTUFBUSxRQUV4QixHQUFJLFVBQVUsSUFBTSxHQUFRLEVBQzVCLEVBQUksR0FBUSxJQUlhLEdBQTZCLFFBQUksR0FJeEQsU0FBVSxFQUFRLEVBQVMsR0FJakMsRUFBb0IsR0FFcEIsSUFBSSxHQUFZLEVBQW9CLEdBRWxDLEVBQW9CLEdBRXBCLEVBQW9CLElBRXBCLEtBRUEsS0FHRixHQUFPLFFBQVUsRUFBVSxTQUtyQixTQUFVLEVBQVEsRUFBcUIsR0FFN0MsWUFDQSxRQUFPLGVBQWUsRUFBcUIsY0FBZ0IsT0FBTyxJQUdyQyxFQUE2QixTQUN4RCxLQUFNLFdBQ04sT0FBUSxVQUtKLFNBQVUsRUFBUSxFQUFxQixHQUU3QyxZQVdBLFNBQVMsR0FBZ0IsRUFBSyxFQUFLLEdBQWlLLE1BQXBKLEtBQU8sR0FBTyxPQUFPLGVBQWUsRUFBSyxHQUFPLE1BQU8sRUFBTyxZQUFZLEVBQU0sY0FBYyxFQUFNLFVBQVUsSUFBa0IsRUFBSSxHQUFPLEVBQWdCLEVBVjNNLE9BQU8sZUFBZSxFQUFxQixjQUFnQixPQUFPLEdBQzdDLElBQUksR0FBdUMsRUFBb0IsR0FDM0QsRUFBd0MsRUFBb0IsR0FDNUQsRUFBc0MsRUFBb0IsR0FDMUQsRUFBMEMsRUFBb0IsR0FDOUQsRUFBbUQsRUFBb0IsSUFDdkUsRUFBMkQsRUFBb0IsRUFBRSxHQUNqRixFQUE4QyxFQUFvQixJQUNsRSxFQUFzRCxFQUFvQixFQUFFLEdBQzVFLEVBQXdDLEVBQW9CLEdBV2pGLEdBQ0YsS0FBTSxFQUNOLFVBQVcsR0FHVCxHQUNGLEtBQU0sZ0JBQ04sWUFDRSxjQUFlLEVBQXlELEVBQ3hFLFNBQVUsRUFBb0QsR0FFaEUsT0FDRSxPQUNFLEtBQU0sT0FDTixRQUFTLElBR1gsT0FDRSxNQUFPLE9BQVEsUUFDZixRQUFTLEtBR1gsU0FDRSxLQUFNLFFBQ04sU0FBUyxHQUdYLFVBQ0UsTUFBTyxPQUFRLE9BQ2YsUUFBUyxXQUNQLE1BQU8sR0FBeUQsRUFBRSxXQUl0RSxTQUNFLEtBQU0sT0FDTixRQUFTLG9CQUdYLGVBQ0UsS0FBTSxPQUNOLFFBQVMsTUFDVCxVQUFXLFNBQW1CLEdBQzVCLE1BQWlCLFFBQVYsR0FBNkIsYUFBVixJQUk5QixXQUNFLEtBQU0sT0FDTixRQUFTLFdBQ1AsTUFBTyxHQUF5RCxFQUFFLG9CQUl0RSxlQUNFLEtBQU0sT0FDTixRQUFTLEVBQXlELEVBQUUsY0FHdEUsT0FDRSxLQUFNLE9BQ04sUUFBUyxLQUdYLFVBQ0UsS0FBTSxPQUNOLFFBQVMsR0FHWCxVQUNFLEtBQU0sT0FDTixRQUFTLEtBR1gsT0FDRSxLQUFNLE9BQ04sUUFBUyxHQUdYLEtBQ0UsS0FBTSxPQUNOLFFBQVMsRUFBQSxHQUdYLGtCQUNFLEtBQU0sUUFDTixTQUFTLEdBR1gsY0FDRSxLQUFNLFFBQ04sU0FBUyxJQUdiLEtBQU0sV0FDSixPQUNFLFFBQ0EsU0FBVSxFQUE4QyxRQUFFLE9BQU8sV0FHckUsUUFBUyxXQUNQLEVBQXNELEVBQUUsSUFBSSxNQUFPLEtBQUssU0FDeEUsRUFBc0QsRUFBRSxJQUFJLFFBQVMsS0FBSyxZQUc1RSxVQUNFLFlBQWEsV0FDWCxNQUFPLEdBQW9CLEVBQUUsRUFBdUQsR0FBRyxLQUFLLFFBRTlGLEtBQU0sV0FDSixNQUE4QixhQUF2QixLQUFLLGVBRWQsY0FBZSxXQUNiLE1BQU8sTUFBSyxLQUFPLGdCQUFrQixZQUV2QyxPQUFRLFdBQ04sR0FBSSxHQUFtQixFQUFvQixFQUFFLEVBQTZELEdBQUcsS0FBSyxVQUM5RyxFQUFJLEVBQWlCLEVBQ3JCLEVBQUksRUFBaUIsRUFFckIsRUFBUSxLQUFLLFlBQVksTUFDekIsRUFBUyxLQUFLLFlBQVksS0FFMUIsRUFBUyxHQUNYLE1BQU8sRUFBUSxHQUNkLEVBQUcsTUFRTixPQU5VLFdBQU4sRUFDRixFQUFhLEtBQUksY0FBZ0IsRUFBUSxFQUFJLEVBQVMsSUFFdEQsRUFBTyxHQUFLLE1BR1AsR0FFVCxPQUFRLFdBQ04sTUFBTyxNQUFLLEtBQUssT0FBTyxTQUFVLEdBQ2hDLE1BQU8sR0FBRSxRQUFVLEVBQU0sYUFHN0IsU0FBVSxXQUNSLE1BQU8sTUFBSyxPQUFPLGVBQWUsWUFHdEMsU0FDRSxtQkFBb0IsU0FBNEIsR0FDMUMsS0FBSyxjQUNQLEtBQUssUUFBUSxJQUdqQixRQUFTLFNBQWlCLEdBQ3hCLEdBQUksR0FBUSxJQUlaLElBRkEsRUFBTSxNQUFRLEVBQU0sT0FBUyxHQUV6QixLQUFLLFFBQVUsRUFBTSxNQUF6QixDQUlBLEdBQUksRUFBTSxPQUFTLEVBQU0sTUFFdkIsV0FEQSxNQUFLLFlBSVAsSUFBSSxHQUFxQyxnQkFBbkIsR0FBTSxTQUF3QixFQUFNLFNBQVcsS0FBSyxTQUV0RSxFQUErQixnQkFBaEIsR0FBTSxNQUFxQixFQUFNLE1BQVEsS0FBSyxNQUU3RCxFQUFxRCxpQkFBM0IsR0FBTSxpQkFBaUMsRUFBTSxpQkFBbUIsS0FBSyxpQkFFL0YsRUFBUSxFQUFNLE1BQ2QsRUFBTyxFQUFNLEtBQ2IsRUFBTyxFQUFNLEtBQ2IsRUFBTyxFQUFNLEtBQ2IsRUFBSyxFQUFNLEdBR1gsR0FDRixHQUFJLEdBQU0sRUFBb0IsRUFBRSxFQUFnRCxLQUNoRixNQUFPLEVBQ1AsS0FBTSxFQUNOLEtBQU0sRUFDTixNQUFPLEVBQU0sS0FDYixNQUFPLEVBQ1AsT0FBUSxFQUFXLEVBQUksRUFDdkIsS0FBTSxFQUdKLElBQVksSUFDZCxFQUFLLE1BQVEsV0FBVyxXQUN0QixFQUFNLFFBQVEsSUFDYixFQUFLLFFBR1YsSUFBSSxHQUFZLEtBQUssU0FBVyxLQUFLLFNBQVcsS0FBSyxTQUVqRCxHQUFrQixFQUVsQixFQUFjLEtBQUssT0FBTyxLQUFLLFNBQVUsR0FDM0MsTUFBTyxHQUFLLFFBQVUsRUFBTSxPQUFTLEVBQUssT0FBUyxFQUFNLFNBRzlDLElBQW9CLEtBSTdCLEdBQ0YsS0FBSyxLQUFLLEtBQUssR0FFWCxLQUFLLE9BQU8sT0FBUyxLQUFLLE1BQzVCLEVBQWlCLEtBR25CLEtBQUssS0FBSyxRQUFRLEdBRWQsS0FBSyxPQUFPLE9BQVMsS0FBSyxNQUM1QixFQUFpQixLQUFLLE9BQU8sT0FBUyxLQUlsQixJQUFwQixHQUNGLEtBQUssUUFBUSxLQUFLLE9BQU8sT0FHN0IsVUFBVyxTQUFtQixHQUM1QixLQUFLLFlBQVksSUFFbkIsWUFBYSxTQUFxQixHQUNoQyxPQUFRLDRCQUE2QixLQUFLLFFBQVMsRUFBSyxPQUUxRCxtQkFBb0IsU0FBNEIsR0FDOUMsTUFBTyxNQUFLLEtBQU8sTUFBUyxXQUFZLE9BQVMsRUFBSyxNQUFRLE9BRWhFLFFBQVMsU0FBaUIsR0FDeEIsYUFBYSxFQUFLLE9BQ2xCLEVBQUssTUFBUSxFQUFNLFVBRWQsS0FBSyxNQUNSLEtBQUssU0FHVCxZQUFhLFNBQXFCLEdBQ2hDLEdBQUksR0FBTyxLQUFLLEtBQUssS0FBSyxTQUFVLEdBQ2xDLE1BQU8sR0FBRSxLQUFPLEdBR2QsSUFDRixLQUFLLFFBQVEsSUFHakIsV0FBWSxXQUNWLEtBQUssT0FBTyxRQUFRLEtBQUssVUFFM0IsYUFBYyxTQUFzQixFQUFPLEdBQ3pDLEdBQUksR0FBWSxLQUFLLFVBQVUsRUFFL0IsT0FBNEIsa0JBQWQsR0FBMkIsRUFBVSxLQUFLLEtBQU0sR0FBTSxHQUV0RSxNQUFPLFNBQWUsR0FDcEIsR0FBSSxHQUFLLEVBQUssR0FDVixFQUFXLEVBQUssU0FFaEIsRUFBWSxLQUFLLGFBQWEsUUFBUyxFQUUzQyxNQUFLLFNBQVMsRUFBSSxHQUNoQixTQUFVLEtBQUssTUFDZixTQUFVLEtBR2QsTUFBTyxTQUFlLEdBQ3BCLEdBQUksR0FBSyxFQUFNLEdBQ1gsRUFBVyxFQUFNLFNBRWpCLEVBQVksS0FBSyxhQUFhLFFBQVMsRUFFM0MsTUFBSyxTQUFTLEVBQUksR0FDaEIsU0FBVSxLQUFLLE1BQ2YsU0FBVSxLQUdkLE1BQU8sV0FDTCxLQUFLLEtBQU8sS0FBSyxLQUFLLE9BQU8sU0FBVSxHQUNyQyxNQUFPLEdBQUUsUUFBVSxFQUFNLGNBTUosR0FBNkIsUUFBSSxHQUl4RCxTQUFVLEVBQVEsRUFBcUIsR0FFN0MsWUFDQSxRQUFPLGVBQWUsRUFBcUIsY0FBZ0IsT0FBTyxJQUdyQyxFQUE2QixTQUN4RCxLQUFNLGdCQUNOLFNBQ0UsTUFBTyxTQUFlLEVBQUksR0FDeEIsS0FBSyxNQUFNLFNBQVcsR0FBSSxFQUFJLFNBQVUsS0FFMUMsTUFBTyxTQUFlLEVBQUksR0FDeEIsS0FBSyxNQUFNLFNBQVcsR0FBSSxFQUFJLFNBQVUsS0FFMUMsV0FBWSxXQUNWLEtBQUssTUFBTSxrQkFPWCxTQUFVLEVBQVEsRUFBcUIsR0FFN0MsWUFDNkIsR0FBdUIsR0FDbEQsVUFBVyxNQUFPLFNBQ2xCLGFBQWMsVUFDZCxtQkFDRSxNQUFPLFNBQWUsR0FHcEIsT0FDRSxRQUhXLEVBQUcsYUFHRyxHQUNqQixTQUFVLEVBQUcsS0FHakIsT0FDRSxPQUFRLEVBQ1IsU0FBVSxFQUFHLE9BT2IsU0FBVSxFQUFRLEVBQXFCLEdBRTdDLFlBRUEsSUFBSSxHQUE0QixrQkFBWCxTQUFvRCxnQkFBcEIsUUFBTyxTQUF3QixTQUFVLEdBQU8sYUFBYyxJQUFTLFNBQVUsR0FBTyxNQUFPLElBQXlCLGtCQUFYLFNBQXlCLEVBQUksY0FBZ0IsUUFBVSxJQUFRLE9BQU8sVUFBWSxlQUFrQixJQUlsUSxJQUNGLEtBQU0sS0FDTixPQUFRLEdBQUksUUFBTyw2QkFFbkIsS0FBTSxJQUNOLE9BQVEsR0FBSSxRQUFPLDRCQUVuQixLQUFNLEtBQ04sT0FBUSxHQUFJLFFBQU8sMkJBR2pCLEVBQVUsU0FBaUIsR0FDN0IsR0FBYyxTQUFWLEVBQ0YsT0FDRSxLQUFNLEVBQ04sTUFBTyxFQUlYLEtBQUssR0FBSSxHQUFJLEVBQUcsRUFBSSxFQUFNLE9BQVEsSUFBSyxDQUNyQyxHQUFJLEdBQU8sRUFBTSxFQUNqQixJQUFJLEVBQUssT0FBTyxLQUFLLEdBQ25CLE9BQ0UsS0FBTSxFQUFLLEtBQ1gsTUFBTyxXQUFXLElBS3hCLE9BQ0UsS0FBTSxHQUNOLE1BQU8sSUFJUCxFQUFRLFNBQWUsR0FDekIsV0FBeUIsS0FBVixFQUF3QixZQUFjLEVBQVEsSUFDM0QsSUFBSyxTQUNILE9BQVMsS0FBTSxLQUFNLE1BQU8sRUFDOUIsS0FBSyxTQUNILE1BQU8sR0FBUSxFQUNqQixTQUNFLE9BQVMsS0FBTSxHQUFJLE1BQU8sSUFJSCxHQUF1QixFQUFJLEdBSWxELFNBQVUsRUFBUSxFQUFxQixHQUU3QyxZQUMrQixHQUFvQixFQUFFLEVBQXFCLElBQUssV0FBYSxNQUFPLEtBRXBFLEVBQW9CLEVBQUUsRUFBcUIsSUFBSyxXQUFhLE1BQU8sSUFDbkcsSUFBSSxJQUNGLEdBQUksT0FBUSxTQUFVLFNBQ3RCLEdBQUksTUFBTyxXQUdULEVBQUssU0FBVSxHQUNqQixNQUFPLFlBQ0wsTUFBTyxPQUVULEdBRUUsRUFBUSxTQUFlLEdBQ3pCLE1BQXFCLGdCQUFWLE1BSUosRUFBTSxNQUFNLFNBQVMsT0FBTyxTQUFVLEdBQzNDLE1BQU8sTUFJUCxFQUFrQixTQUF5QixHQUN4QixnQkFBVixLQUNULEVBQVEsRUFBTSxHQUdoQixJQUFJLEdBQUksS0FDSixFQUFJLElBV1IsT0FUQSxHQUFNLFFBQVEsU0FBVSxJQUNXLElBQTdCLEVBQVcsRUFBRSxRQUFRLEtBQ3ZCLEVBQUksSUFFMkIsSUFBN0IsRUFBVyxFQUFFLFFBQVEsS0FDdkIsRUFBSSxNQUlDLEVBQUcsRUFBRyxFQUFHLEtBS2QsU0FBVSxFQUFRLEVBQVMsR0FFakMsRUFBVSxFQUFPLFFBQVUsRUFBb0IsTUFLL0MsRUFBUSxNQUFNLEVBQU8sRUFBRyw4d0JBQSt3QixNQU9qeUIsU0FBVSxFQUFRLEdBT3hCLEVBQU8sUUFBVSxXQUNoQixHQUFJLEtBMENKLE9BdkNBLEdBQUssU0FBVyxXQUVmLElBQUksR0FEQSxNQUNJLEVBQUksRUFBRyxFQUFJLEtBQUssT0FBUSxJQUFLLENBQ3BDLEdBQUksR0FBTyxLQUFLLEVBQ2IsR0FBSyxHQUNQLEVBQU8sS0FBSyxVQUFZLEVBQUssR0FBSyxJQUFNLEVBQUssR0FBSyxLQUVsRCxFQUFPLEtBQUssRUFBSyxJQUduQixNQUFPLEdBQU8sS0FBSyxLQUlwQixFQUFLLEVBQUksU0FBUyxFQUFTLEdBQ0osZ0JBQVosS0FDVCxJQUFZLEtBQU0sRUFBUyxLQUU1QixLQUFJLEdBREEsTUFDSSxFQUFJLEVBQUcsRUFBSSxLQUFLLE9BQVEsSUFBSyxDQUNwQyxHQUFJLEdBQUssS0FBSyxHQUFHLEVBQ0EsaUJBQVAsS0FDVCxFQUF1QixJQUFNLEdBRS9CLElBQUksRUFBSSxFQUFHLEVBQUksRUFBUSxPQUFRLElBQUssQ0FDbkMsR0FBSSxHQUFPLEVBQVEsRUFLRyxpQkFBWixHQUFLLElBQW9CLEVBQXVCLEVBQUssTUFDM0QsSUFBZSxFQUFLLEdBQ3RCLEVBQUssR0FBSyxFQUNELElBQ1QsRUFBSyxHQUFLLElBQU0sRUFBSyxHQUFLLFVBQVksRUFBYSxLQUVwRCxFQUFLLEtBQUssTUFJTixJQU1GLFNBQVUsRUFBUSxFQUFTLEdBRWpDLEdBQUksR0FBWSxFQUFvQixHQUVsQyxFQUFvQixHQUVwQixFQUFvQixJQUVwQixLQUVBLEtBR0YsR0FBTyxRQUFVLEVBQVUsU0FLckIsU0FBVSxFQUFRLEVBQVMsR0FFakMsR0FBSSxHQUFZLEVBQW9CLEdBRWxDLEVBQW9CLEdBRXBCLEVBQW9CLElBRXBCLEtBRUEsS0FHRixHQUFPLFFBQVUsRUFBVSxTQUtyQixTQUFVLEVBQVEsR0FFeEIsRUFBTyxTQUFTLE9BQU8sV0FBWSxHQUFJLEdBQUksS0FBUyxFQUFHLEVBQUksY0FDekQsUUFEK0UsRUFBSSxNQUFNLElBQUksR0FDbkYsb0JBQ1IsT0FDRSxLQUFPLEdBRVQsSUFDRSxNQUFTLEVBQUksTUFDYixNQUFTLEVBQUksTUFDYixjQUFlLEVBQUksY0FFbkIsRUFBSSxHQUFHLFlBQWEsSUFDeEIscUJBSUksU0FBVSxFQUFRLEdBRXhCLEVBQU8sU0FBUyxPQUFPLFdBQVksR0FBSSxHQUFJLEtBQVMsRUFBRyxFQUFJLGVBQW1CLEVBQUcsRUFBSSxNQUFNLElBQUksQ0FDN0YsT0FBTyxHQUFHLE9BQ1IsWUFBYSx5QkFDYixNQUFRLEVBQVUsU0FDaEIsRUFBRyxFQUFJLGVBQ1QsSUFBSyxZQUNMLE9BQ0UsS0FBUSxFQUFJLGVBRWQsSUFDRSxNQUFTLEVBQUksTUFDYixNQUFTLEVBQUksTUFDYixjQUFlLEVBQUksUUFFcEIsRUFBSSxHQUFJLEVBQVUsT0FBRyxTQUFTLEdBQy9CLE1BQU8sR0FBRyxPQUNSLElBQUssRUFBSyxHQUNWLFlBQWEsMkJBQ2IsTUFBUSxFQUFJLG1CQUFtQixHQUMvQixPQUNFLFVBQVcsRUFBSyxNQUVoQixFQUFJLEdBQUcsUUFBUyxFQUFHLE9BQ3JCLE1BQU8sRUFBSSxZQUFZLEdBQ3ZCLElBQ0UsTUFBUyxTQUFTLEdBQ2hCLE1BQU8sR0FBSSxtQkFBbUIsT0FHL0IsRUFBVSxNQUFJLEVBQUcsT0FDcEIsWUFBYSxxQkFDYixVQUNFLFVBQWEsRUFBSSxHQUFHLEVBQUssVUFFeEIsRUFBSSxLQUFNLEVBQUksR0FBRyxLQUFNLEVBQUcsT0FDN0IsWUFBYSx1QkFDYixVQUNFLFVBQWEsRUFBSSxHQUFHLEVBQUssYUFHM0IsS0FBUSxFQUNSLE1BQVMsV0FBYyxNQUFPLEdBQUksUUFBUSxPQUN2QyxLQUNILElBQUssSUFDVCxxQkFJSSxTQUFVLEVBQVEsR0FFeEIsRUFBTyxTQUFTLE9BQU8sV0FBWSxHQUFJLEdBQUksS0FBUyxFQUFHLEVBQUksY0FDekQsUUFEK0UsRUFBSSxNQUFNLElBQUksR0FDbkYsb0JBQ1IsT0FDRSxLQUFRLEVBQUksUUFFWixFQUFJLEdBQUcsWUFBYSxJQUN4QixxQkFJSSxTQUFVLEVBQVEsRUFBUyxHQUtqQyxHQUFJLEdBQVUsRUFBb0IsR0FDWixpQkFBWixLQUFzQixJQUFZLEVBQU8sRUFBRyxFQUFTLE1BQzVELEVBQVEsU0FBUSxFQUFPLFFBQVUsRUFBUSxPQUUvQixHQUFvQixJQUFJLFdBQVksR0FBUyxJQUlwRCxTQUFVLEVBQVEsRUFBUyxHQW1GakMsUUFBUyxHQUFnQixHQUN2QixJQUFLLEdBQUksR0FBSSxFQUFHLEVBQUksRUFBTyxPQUFRLElBQUssQ0FDdEMsR0FBSSxHQUFPLEVBQU8sR0FDZCxFQUFXLEVBQVksRUFBSyxHQUNoQyxJQUFJLEVBQVUsQ0FDWixFQUFTLE1BQ1QsS0FBSyxHQUFJLEdBQUksRUFBRyxFQUFJLEVBQVMsTUFBTSxPQUFRLElBQ3pDLEVBQVMsTUFBTSxHQUFHLEVBQUssTUFBTSxHQUUvQixNQUFPLEVBQUksRUFBSyxNQUFNLE9BQVEsSUFDNUIsRUFBUyxNQUFNLEtBQUssRUFBUyxFQUFLLE1BQU0sSUFFdEMsR0FBUyxNQUFNLE9BQVMsRUFBSyxNQUFNLFNBQ3JDLEVBQVMsTUFBTSxPQUFTLEVBQUssTUFBTSxZQUVoQyxDQUVMLElBQUssR0FERCxNQUNLLEVBQUksRUFBRyxFQUFJLEVBQUssTUFBTSxPQUFRLElBQ3JDLEVBQU0sS0FBSyxFQUFTLEVBQUssTUFBTSxJQUVqQyxHQUFZLEVBQUssS0FBUSxHQUFJLEVBQUssR0FBSSxLQUFNLEVBQUcsTUFBTyxLQUs1RCxRQUFTLEtBQ1AsR0FBSSxHQUFlLFNBQVMsY0FBYyxRQUcxQyxPQUZBLEdBQWEsS0FBTyxXQUNwQixFQUFLLFlBQVksR0FDVixFQUdULFFBQVMsR0FBVSxHQUNqQixHQUFJLEdBQVEsRUFDUixFQUFlLFNBQVMsY0FBYywyQkFBNkIsRUFBSSxHQUFLLEtBRWhGLElBQUksRUFBYyxDQUNoQixHQUFJLEVBR0YsTUFBTyxFQU9QLEdBQWEsV0FBVyxZQUFZLEdBSXhDLEdBQUksRUFBUyxDQUVYLEdBQUksR0FBYSxHQUNqQixHQUFlLElBQXFCLEVBQW1CLEtBQ3ZELEVBQVMsRUFBb0IsS0FBSyxLQUFNLEVBQWMsR0FBWSxHQUNsRSxFQUFTLEVBQW9CLEtBQUssS0FBTSxFQUFjLEdBQVksT0FHbEUsR0FBZSxJQUNmLEVBQVMsRUFBVyxLQUFLLEtBQU0sR0FDL0IsRUFBUyxXQUNQLEVBQWEsV0FBVyxZQUFZLEdBTXhDLE9BRkEsR0FBTyxHQUVBLFNBQXNCLEdBQzNCLEdBQUksRUFBUSxDQUNWLEdBQUksRUFBTyxNQUFRLEVBQUksS0FDbkIsRUFBTyxRQUFVLEVBQUksT0FDckIsRUFBTyxZQUFjLEVBQUksVUFDM0IsTUFFRixHQUFPLEVBQU0sT0FFYixNQWNOLFFBQVMsR0FBcUIsRUFBYyxFQUFPLEVBQVEsR0FDekQsR0FBSSxHQUFNLEVBQVMsR0FBSyxFQUFJLEdBRTVCLElBQUksRUFBYSxXQUNmLEVBQWEsV0FBVyxRQUFVLEVBQVksRUFBTyxPQUNoRCxDQUNMLEdBQUksR0FBVSxTQUFTLGVBQWUsR0FDbEMsRUFBYSxFQUFhLFVBQzFCLEdBQVcsSUFBUSxFQUFhLFlBQVksRUFBVyxJQUN2RCxFQUFXLE9BQ2IsRUFBYSxhQUFhLEVBQVMsRUFBVyxJQUU5QyxFQUFhLFlBQVksSUFLL0IsUUFBUyxHQUFZLEVBQWMsR0FDakMsR0FBSSxHQUFNLEVBQUksSUFDVixFQUFRLEVBQUksTUFDWixFQUFZLEVBQUksU0FjcEIsSUFaSSxHQUNGLEVBQWEsYUFBYSxRQUFTLEdBR2pDLElBR0YsR0FBTyxtQkFBcUIsRUFBVSxRQUFRLEdBQUssTUFFbkQsR0FBTyx1REFBeUQsS0FBSyxTQUFTLG1CQUFtQixLQUFLLFVBQVUsTUFBZ0IsT0FHOUgsRUFBYSxXQUNmLEVBQWEsV0FBVyxRQUFVLE1BQzdCLENBQ0wsS0FBTyxFQUFhLFlBQ2xCLEVBQWEsWUFBWSxFQUFhLFdBRXhDLEdBQWEsWUFBWSxTQUFTLGVBQWUsS0E5TXJELEdBQUksR0FBa0MsbUJBQWIsU0FFekIsSUFBcUIsbUJBQVYsUUFBeUIsUUFDN0IsRUFDSCxLQUFNLElBQUksT0FDViwwSkFLSixJQUFJLEdBQWUsRUFBb0IsSUFlbkMsS0FRQSxFQUFPLElBQWdCLFNBQVMsTUFBUSxTQUFTLHFCQUFxQixRQUFRLElBQzlFLEVBQW1CLEtBQ25CLEVBQW1CLEVBQ25CLEdBQWUsRUFDZixFQUFPLGFBSVAsRUFBK0IsbUJBQWQsWUFBNkIsZUFBZSxLQUFLLFVBQVUsVUFBVSxjQUUxRixHQUFPLFFBQVUsU0FBVSxFQUFVLEVBQU0sR0FDekMsRUFBZSxDQUVmLElBQUksR0FBUyxFQUFhLEVBQVUsRUFHcEMsT0FGQSxHQUFlLEdBRVIsU0FBaUIsR0FFdEIsSUFBSyxHQURELE1BQ0ssRUFBSSxFQUFHLEVBQUksRUFBTyxPQUFRLElBQUssQ0FDdEMsR0FBSSxHQUFPLEVBQU8sR0FDZCxFQUFXLEVBQVksRUFBSyxHQUNoQyxHQUFTLE9BQ1QsRUFBVSxLQUFLLEdBRWIsR0FDRixFQUFTLEVBQWEsRUFBVSxHQUNoQyxFQUFlLElBRWYsSUFFRixLQUFLLEdBQUksR0FBSSxFQUFHLEVBQUksRUFBVSxPQUFRLElBQUssQ0FDekMsR0FBSSxHQUFXLEVBQVUsRUFDekIsSUFBc0IsSUFBbEIsRUFBUyxLQUFZLENBQ3ZCLElBQUssR0FBSSxHQUFJLEVBQUcsRUFBSSxFQUFTLE1BQU0sT0FBUSxJQUN6QyxFQUFTLE1BQU0sV0FFVixHQUFZLEVBQVMsT0F3RnBDLElBQUksR0FBYyxXQUNoQixHQUFJLEtBRUosT0FBTyxVQUFVLEVBQU8sR0FFdEIsTUFEQSxHQUFVLEdBQVMsRUFDWixFQUFVLE9BQU8sU0FBUyxLQUFLLFdBbURwQyxTQUFVLEVBQVEsR0FNeEIsRUFBTyxRQUFVLFNBQXVCLEVBQVUsR0FHaEQsSUFBSyxHQUZELE1BQ0EsS0FDSyxFQUFJLEVBQUcsRUFBSSxFQUFLLE9BQVEsSUFBSyxDQUNwQyxHQUFJLEdBQU8sRUFBSyxHQUNaLEVBQUssRUFBSyxHQUNWLEVBQU0sRUFBSyxHQUNYLEVBQVEsRUFBSyxHQUNiLEVBQVksRUFBSyxHQUNqQixHQUNGLEdBQUksRUFBVyxJQUFNLEVBQ3JCLElBQUssRUFDTCxNQUFPLEVBQ1AsVUFBVyxFQUVSLEdBQVUsR0FHYixFQUFVLEdBQUksTUFBTSxLQUFLLEdBRnpCLEVBQU8sS0FBSyxFQUFVLElBQVEsR0FBSSxFQUFJLE9BQVEsS0FLbEQsTUFBTyxLQU1ILFNBQVUsRUFBUSxHQUV4QixFQUFPLFFBQVU7OztBQ3JvQ2pCLFlBWUEsU0FBUyx3QkFBdUIsR0FBTyxNQUFPLElBQU8sRUFBSSxXQUFhLEdBQVEsUUFBUyxHQUV2RixRQUFTLGlCQUFnQixFQUFLLEVBQUssR0FBaUssTUFBcEosS0FBTyxHQUFPLE9BQU8sZUFBZSxFQUFLLEdBQU8sTUFBTyxFQUFPLFlBQVksRUFBTSxjQUFjLEVBQU0sVUFBVSxJQUFrQixFQUFJLEdBQU8sRUFBZ0IsRUE2TTNNLFFBQVMsT0FBTSxFQUFPLEdBQ3BCLE1BQU8sT0FBTSxNQUFNLEVBQUcsTUFBTSxJQUFRLElBQUksU0FBVSxFQUFTLEdBQ3pELE1BQU8sR0FBUSxJQTNObkIsR0FBSSxTQUE0QixrQkFBWCxTQUFvRCxnQkFBcEIsUUFBTyxTQUF3QixTQUFVLEdBQU8sYUFBYyxJQUFTLFNBQVUsR0FBTyxNQUFPLElBQXlCLGtCQUFYLFNBQXlCLEVBQUksY0FBZ0IsUUFBVSxJQUFRLE9BQU8sVUFBWSxlQUFrQixJQUVsUSxRQUFVLFFBQVEsWUFFbEIsU0FBVyx1QkFBdUIsU0FFbEMsT0FBUyxRQUFRLFNBRWpCLFFBQVUsdUJBQXVCLFFBTWpDLFNBQVcsUUFBUSxpQkFDbkIsSUFBTSxRQUFRLFFBR2xCLFFBQU8sU0FDTCxPQUFRLFNBQVMsU0FBSyxJQUN0QixPQUNFLEtBQ0UsS0FBTSxPQUNOLFVBQVUsR0FFWixTQUNFLEtBQU0sT0FDTixVQUFVLEdBRVosU0FDRSxLQUFNLE9BQ04sUUFBUyxJQUVYLE1BQ0UsS0FBTSxTQUVSLFNBQ0UsS0FBTSxTQUdWLFFBQVMsV0FFUCxHQUFLLEtBQUssS0FBVixDQUVBLElBQUssS0FBSyxJQUNSLEtBQU0sSUFBSSxPQUFNLCtEQUdsQixJQUFJLEdBQU8sS0FBSyxHQUVaLE1BQUssT0FBTyxNQUFNLElBRXRCLEtBQUssT0FBTyxlQUFlLEtBQUssS0FDOUIsT0FDRSxLQUFNLEdBRVIsVUFBVyxtQkFBb0IsRUFBTyxZQUFhLFNBQW1CLEVBQU8sR0FDM0UsRUFBTSxLQUFPLFFBSW5CLEtBQU0sV0FDSixPQUNFLEtBQU0sRUFDTixVQUFXLElBR2YsVUFDRSxLQUFNLFdBQ0osT0FBTyxFQUFJLFFBQVEsVUFBUyxFQUFJLFNBQVMsV0FBWSxLQUFLLFVBRTVELE1BQU8sV0FFTCxHQUFpQyxXQUE3QixRQUFRLEtBQUssS0FBSyxPQUNwQixNQUFPLE1BQUssS0FBSyxLQUduQixJQUFJLElBQ0YsV0FBWSxRQUFRLHVCQUNwQixXQUFZLFFBQVEsdUJBQ3BCLE1BQU8sUUFBUSxrQkFHakIsUUFBeUMsS0FBckMsUUFBUSxFQUFPLEtBQUssS0FBSyxRQUMzQixLQUFNLCtCQUFpQyxLQUFLLEtBQUssTUFBUSxpQkFHM0QsT0FBTyxHQUFPLEtBQUssS0FBSyxRQUUxQixLQUFNLFdBQ0osTUFBTyxNQUFLLEtBQU8sS0FBSyxPQUFPLE1BQU0sS0FBSyxLQUFLLEtBQU8sS0FBSyxNQUc3RCxNQUFPLFdBQ0wsTUFBSyxNQUFLLFFBRUgsTUFBTSxLQUFLLGdCQUFpQixLQUFLLHlCQUUxQyxXQUFZLFdBQ1YsTUFBTyxNQUFLLFFBQVUsS0FBSyxLQUFLLEtBQUssUUFBVSxLQUFLLFNBQVcsR0FFakUsWUFBYSxXQUNYLE1BQU8sTUFBSyxLQUFLLEtBQUssV0FBYSxLQUFLLEtBQUssUUFFL0MsYUFBYyxXQUNaLE1BQU8sTUFBSyxLQUFLLEtBQUssS0FBTyxLQUFLLEtBQUssUUFFekMsZ0JBQWlCLFdBRWYsR0FBbUMsV0FBL0IsS0FBSyxLQUFLLGlCQUErQixDQUMzQyxHQUFJLEdBQVEsS0FBSyxLQUFPLEtBQUssS0FBSyxNQUFRLENBQzFDLE9BQU8sR0FBTyxFQUFJLEVBQU8sRUFHM0IsT0FBUSxLQUFLLGFBQWUsR0FBSyxLQUFLLEtBQUssTUFBUSxHQUVyRCxvQkFBcUIsV0FDbkIsTUFBTyxNQUFLLGdCQUFrQixLQUFLLEtBQUssT0FBUyxLQUFLLFdBQWEsS0FBSyxLQUFLLE1BQVEsS0FBSyxXQUFhLEtBQUssZ0JBQWtCLEdBRWhJLE1BQU8sV0FFTCxHQUFJLFNBQVMsS0FBSyxLQUFLLEtBQUssTUFBTSxPQUVoQyxNQUFJLE1BQUssWUFBYyxFQUFVLEdBRTFCLEtBQUssS0FBSyxNQUFNLE1BQU0sUUFBUSxTQUFVLEtBQUssTUFBTSxRQUFRLFVBQVcsS0FBSyxXQUdwRixJQUFJLEdBQVEsS0FBSyxLQUFLLE1BQU0sTUFBTSxNQUFNLEtBQ3BDLEdBQVEsS0FBSyxLQUFPLEdBQUssS0FBSyxRQUFVLEVBQ3hDLEVBQUssS0FBSyxNQUFRLEtBQUssV0FBYSxLQUFLLFFBQVUsRUFBTyxLQUFLLFFBQVUsQ0FHN0UsT0FBTyxHQUZDLEtBQUssSUFBb0IsR0FBaEIsS0FBSyxRQUFlLEVBQXVCLEdBQW5CLEtBQUssV0FBa0IsRUFBSSxFQUFHLEVBQU0sT0FBUyxJQUV0RSxRQUFRLFVBQVcsS0FBSyxhQUFhLEtBQUssVUFBVSxRQUFRLFNBQVUsS0FBSyxhQUFhLElBQU8sUUFBUSxPQUFRLEtBQUssYUFBYSxNQUdySixTQUNFLFFBQVMsU0FBaUIsR0FDcEIsS0FBSyxZQUFZLElBQ25CLEtBQUssU0FBUyxJQUdsQixTQUFVLFNBQWtCLEdBQ3RCLEtBQUssS0FDUCxLQUFLLE9BQU8sT0FBTyxLQUFLLElBQU0sWUFBYSxHQUUzQyxLQUFLLEtBQU8sRUFHZCxLQUFLLE1BQU0sV0FBWSxHQUVuQixLQUFLLEtBQ1AsSUFBSSxNQUFNLG1CQUFxQixLQUFLLElBQUssSUFJN0MsS0FBTSxXQUNKLEdBQUksR0FBTyxLQUFLLEtBQU8sQ0FJdkIsT0FIbUMsV0FBL0IsS0FBSyxLQUFLLGtCQUFpQyxLQUFLLFlBQVksS0FBVSxLQUFLLFVBQVUsSUFDdkYsS0FBSyxZQUVBLEtBQUssUUFBUSxJQUV0QixLQUFNLFdBQ0osR0FBSSxHQUFPLEtBQUssS0FBTyxDQU12QixPQUptQyxXQUEvQixLQUFLLEtBQUssa0JBQWlDLEtBQUssWUFBWSxLQUFVLEtBQUssVUFBVSxJQUN2RixLQUFLLFlBR0EsS0FBSyxRQUFRLElBRXRCLFVBQVcsU0FBbUIsR0FFNUIsR0FBSSxHQUFRLEtBQUssVUFDYixFQUFNLEVBQVEsS0FBSyxLQUFLLE1BQVEsQ0FFcEMsT0FBTyxJQUFRLEdBQVMsR0FBUSxHQUdsQyxVQUFXLFdBQ1QsTUFBTyxNQUFLLFNBQVMsSUFFdkIsVUFBVyxXQUNULE1BQU8sTUFBSyxVQUFVLElBRXhCLFNBQVUsU0FBa0IsR0FDMUIsS0FBSyxTQUFTLEtBQUssYUFBZSxFQUFJLEdBQWEsS0FBSyxLQUFLLE1BQVEsSUFFdkUsWUFBYSxTQUFxQixHQUNoQyxNQUFPLElBQVEsR0FBSyxHQUFRLEtBQUssWUFFbkMsYUFBYyxTQUFzQixHQUNsQyxNQUFvQixJQUFiLEdBQWtCLEtBQUssYUFBZSxLQUFLLGNBQTZCLEdBQWQsR0FBbUIsS0FBSyxhQUFlLEdBRTFHLGlCQUFrQixTQUEwQixHQUMxQyxNQUFPLE1BQUssWUFBWSxHQUFhLEdBQUssS0FBSyxNQUFNLFVBRXZELGtCQUFtQixTQUEyQixHQUM1QyxNQUFPLE1BQUssYUFBYSxHQUFhLEdBQUssS0FBSyxNQUFNLFVBRXhELFlBQWEsU0FBcUIsR0FDaEMsTUFBTyxNQUFLLE1BQVEsRUFBTyxLQUFLLE1BQU0sT0FBUyxJQUVqRCxhQUFjLFNBQXNCLEdBRWxDLE1BQUssTUFBSyxLQUFLLE9BRVIsRUFBSSxXQUFXLFFBQVEsd0JBQXlCLEtBRnpCLElBS2xDLGNBQWUsV0FDYixJQUFJLE9BQ0osSUFBSTs7O0FDdk5SLFlBTUEsU0FBUyx3QkFBdUIsR0FBTyxNQUFPLElBQU8sRUFBSSxXQUFhLEdBQVEsUUFBUyxHQUp2RixHQUFJLE1BQU8sUUFBUSxPQUVmLE1BQVEsdUJBQXVCLE1BSS9CLElBQU0sR0FBSSxPQUFNLE9BRXBCLFFBQU8sUUFBVTs7O0FDVmpCLFlBRUEsUUFBTyxlQUFlLFFBQVMsY0FDM0IsT0FBTyxJQUdYLFFBQVEsUUFBVSxXQUNkLE9BQ0ksUUFBUSxFQUNSLE1BQU8sR0FDUCxpQkFBa0IsUUFDbEIsZ0JBQWdCLEVBQ2hCLE1BQU8sYUFDUCxPQUNJLE1BQU8sdUVBQ1AsTUFBTyxRQUNQLEtBQU07OztBQ2hCbEIsWUFFQSxRQUFPLFFBQVUsV0FFZixNQUFPLFVBQVUsR0FFZixHQUFJLEdBQVEsS0FBSyxNQUNiLEVBQVksR0FDWixFQUFZLEdBQ1osRUFBWSxHQUNaLEVBQVcsR0FDWCxFQUFRLEtBQUssTUFBTSxJQUFJLFNBQVUsR0FFbkMsTUFBTyxHQUNMLE1BQ0UsTUFBUyxrQ0FBb0MsRUFBTSxLQUFPLElBQU0sS0FBSyxZQUFZLEdBQ2pGLElBQ0UsTUFBUyxLQUFLLFFBQVEsS0FBSyxLQUFNLE1BR3BDLEVBQ0MsS0FDRSxNQUFTLEVBQU0sS0FBTyxJQUFNLEtBQUssWUFBWSxHQUM3QyxPQUFTLEtBQU0scUJBQ2IsS0FBTSxZQUVULE9BR0wsS0FBSyxNQTJFUCxPQXpFSSxNQUFLLEtBQUssZ0JBQWtCLEtBQUssWUFBYyxJQUNqRCxFQUFZLEVBQ1YsTUFDRSxNQUFTLGtDQUFvQyxFQUFNLEtBQU8sS0FBcUIsSUFBZCxLQUFLLEtBQWEsRUFBTSxTQUFXLElBQU0sNkNBQzFHLElBQ0UsTUFBUyxLQUFLLFFBQVEsS0FBSyxLQUFNLE1BR3BDLEVBQ0MsS0FDRSxNQUFTLEVBQU0sS0FDZixPQUFTLEtBQU0sc0JBQ2IsU0FBd0IsSUFBZCxLQUFLLFFBRWxCLEtBQUssS0FBSyxNQUFNLFVBSXJCLEVBQVcsRUFDVCxNQUNFLE1BQVMsa0NBQW9DLEVBQU0sS0FBTyxLQUFPLEtBQUssT0FBUyxLQUFLLFdBQWEsRUFBTSxTQUFXLElBQU0sNkNBQ3hILElBQ0UsTUFBUyxLQUFLLFFBQVEsS0FBSyxLQUFNLEtBQUssZUFHekMsRUFDQyxLQUNFLE1BQVMsRUFBTSxLQUNmLE9BQVMsS0FBTSxzQkFDYixTQUFVLEtBQUssT0FBUyxLQUFLLGNBRWhDLEtBQUssS0FBSyxNQUFNLFVBS1ksVUFBL0IsS0FBSyxLQUFLLG1CQUVaLEVBQVksRUFDVixNQUNFLE1BQVMsa0NBQW9DLEVBQU0sS0FBTyxJQUFNLEVBQU0sS0FBTyw4Q0FBZ0QsS0FBSyxtQkFBbUIsR0FDckosSUFDRSxNQUFTLEtBQUssU0FBUyxLQUFLLE1BQU8sTUFHdEMsRUFDQyxLQUNFLE1BQVMsRUFBTSxLQUNmLE9BQVMsS0FBTSxzQkFDYixXQUFZLEtBQUssbUJBQW1CLE1BRXZDLFNBSUwsRUFBWSxFQUNWLE1BQ0UsTUFBUyxrQ0FBb0MsRUFBTSxLQUFPLElBQU0sRUFBTSxLQUFPLDhDQUFnRCxLQUFLLGtCQUFrQixHQUNwSixJQUNFLE1BQVMsS0FBSyxTQUFTLEtBQUssS0FBTSxNQUdyQyxFQUNDLEtBQ0UsTUFBUyxFQUFNLEtBQ2YsT0FBUyxLQUFNLHNCQUNiLFdBQVksS0FBSyxrQkFBa0IsTUFFdEMsVUFLQSxFQUNMLE9BQ0UsTUFBUyxpQkFBbUIsRUFBTSxVQUNuQyxFQUNDLE9BQ0UsTUFBUyxHQUFLLEVBQU0sTUFDckIsRUFDQyxNQUVFLGFBQ0UsS0FBTSxPQUNOLE1BQU8sS0FBSyxXQUFhLElBRzNCLE1BQVMsRUFBTSxLQUFPLCtCQUN2QixFQUFXLEVBQVcsRUFDckIsTUFDRSxNQUFTLGtDQUFvQyxFQUFNLEtBQU8sSUFBTSxFQUFNLEtBQU8sNkNBQStDLEtBQUssaUJBQWlCLEtBQUssS0FBTyxHQUM5SixJQUNFLE1BQVMsS0FBSyxLQUFLLEtBQUssU0FHM0IsRUFDQyxLQUNFLE1BQVMsRUFBTSxLQUNmLE9BQVMsS0FBTSxzQkFDYixXQUFZLEtBQUssaUJBQWlCLEtBQUssS0FBTyxNQUdqRCxRQUVGLEVBQU8sRUFDUixNQUNFLE1BQVMsa0NBQW9DLEVBQU0sS0FBTyxJQUFNLEVBQU0sS0FBTyw2Q0FBK0MsS0FBSyxpQkFBaUIsS0FBSyxLQUFPLEdBQzlKLElBQ0UsTUFBUyxLQUFLLEtBQUssS0FBSyxTQUczQixFQUNDLEtBQ0UsTUFBUyxFQUFNLEtBQ2YsT0FBUyxLQUFNLHNCQUNiLFdBQVksS0FBSyxpQkFBaUIsS0FBSyxLQUFPLE1BR2pELFFBRUYsRUFBVyxJQUNiLEVBQ0QsS0FFRSxhQUNFLEtBQU0sT0FDTixNQUFPLFNBQVMsS0FBSyxXQUd2QixNQUFTLHdCQUEwQixFQUFNLFFBQzFDLEtBQUs7OztBQ2pLaEIsWUFFQSxRQUFPLFNBQ0gsSUFBSyxHQUNMLE1BQU8sR0FDUCxRQUFTLEdBQ1QsS0FBTSxhQUNOLEtBQU0sWUFDTixLQUFNLFlBQ04sS0FBTSxHQUNOLEtBQU0sR0FDTixPQUFRLFNBQ1IsU0FBVTs7O0FDWmQsWUFFQSxRQUFPLFNBQ0gsSUFBSyxHQUNMLE1BQU8sR0FDUCxRQUFTLEdBQ1QsS0FBTSxhQUNOLEtBQU0sWUFDTixLQUFNLFlBQ04sS0FBTSxHQUNOLEtBQU0sR0FDTixPQUFRLFNBQ1IsU0FBVTs7O0FDWmQsWUFFQSxRQUFPLFNBQ0gsSUFBSyxHQUNMLE1BQU8sR0FDUCxRQUFTLGFBQ1QsS0FBTSxrQkFDTixLQUFNLEdBQ04sS0FBTSxrQkFDTixLQUFNLEdBQ04sS0FBTSxHQUNOLE9BQVEsYUFDUixTQUFVOzs7QUNaZCxHQUFJLFlBQWEsUUFBUSx5QkFDckIsZ0JBQWtCLFFBQVEsaUJBRTlCLFFBQU8sU0FDTCxXQUFXLFdBQ1gsZ0JBQWdCOzs7QUNBbEIsWUFJQSxTQUFTLFFBQVEsRUFBVyxHQUMxQixJQUFLLEVBQ0gsS0FBTSxJQUFJLE9BQU8sZ0JBQWtCLEdBSXZDLFFBQVMsTUFBTSxFQUFXLElBTTFCLFFBQVMsU0FBUyxHQUNoQixNQUFPLFFBQU8sVUFBVSxTQUFTLEtBQUssR0FBSyxRQUFRLFVBQVksRUFHakUsUUFBUyxpQkFBaUIsRUFBYSxHQUNyQyxNQUNFLGFBQWUsSUFFZCxJQUFRLEVBQUksT0FBUyxFQUFZLE1BQVEsRUFBSSxRQUFVLEVBQVksT0FJeEUsUUFBUyxRQUFRLEVBQUcsR0FDbEIsSUFBSyxHQUFJLEtBQU8sR0FDZCxFQUFFLEdBQU8sRUFBRSxFQUViLE9BQU8sR0E2R1QsUUFBUyxjQUFjLEVBQU8sR0FDNUIsYUFBZSxJQUNiLElBQUssWUFDSCxNQUNGLEtBQUssU0FDSCxNQUFPLEVBQ1QsS0FBSyxXQUNILE1BQU8sR0FBTyxFQUNoQixLQUFLLFVBQ0gsTUFBTyxHQUFTLEVBQU0sV0FBUyxJQTJCckMsUUFBUyxjQUNQLEVBQ0EsRUFDQSxPQUVvQixLQUFmLElBQXdCLEtBRTdCLElBQ0ksR0FEQSxFQUFRLEdBQWUsVUFFM0IsS0FDRSxFQUFjLEVBQU0sR0FBUyxJQUM3QixNQUFPLEdBRVAsS0FFRixJQUFLLEdBQUksS0FBTyxHQUNkLEVBQVksR0FBTyxFQUFXLEVBRWhDLE9BQU8sR0FHVCxRQUFTLFlBQVksR0FDbkIsR0FBSSxLQUlKLFFBRkEsRUFBUSxFQUFNLE9BQU8sUUFBUSxZQUFhLE1BTTFDLEVBQU0sTUFBTSxLQUFLLFFBQVEsU0FBVSxHQUNqQyxHQUFJLEdBQVEsRUFBTSxRQUFRLE1BQU8sS0FBSyxNQUFNLEtBQ3hDLEVBQU0sT0FBTyxFQUFNLFNBQ25CLEVBQU0sRUFBTSxPQUFTLEVBQ3JCLE9BQU8sRUFBTSxLQUFLLE1BQ2xCLFNBRWEsS0FBYixFQUFJLEdBQ04sRUFBSSxHQUFPLEVBQ0YsTUFBTSxRQUFRLEVBQUksSUFDM0IsRUFBSSxHQUFLLEtBQUssR0FFZCxFQUFJLElBQVEsRUFBSSxHQUFNLEtBSW5CLEdBbkJFLEVBc0JYLFFBQVMsZ0JBQWdCLEdBQ3ZCLEdBQUksR0FBTSxFQUFNLE9BQU8sS0FBSyxHQUFLLElBQUksU0FBVSxHQUM3QyxHQUFJLEdBQU0sRUFBSSxFQUVkLFFBQVksS0FBUixFQUNGLE1BQU8sRUFHVCxJQUFZLE9BQVIsRUFDRixNQUFPLFFBQU8sRUFHaEIsSUFBSSxNQUFNLFFBQVEsR0FBTSxDQUN0QixHQUFJLEtBV0osT0FWQSxHQUFJLFFBQVEsU0FBVSxPQUNQLEtBQVQsSUFHUyxPQUFULEVBQ0YsRUFBTyxLQUFLLE9BQU8sSUFFbkIsRUFBTyxLQUFLLE9BQU8sR0FBTyxJQUFNLE9BQU8sT0FHcEMsRUFBTyxLQUFLLEtBR3JCLE1BQU8sUUFBTyxHQUFPLElBQU0sT0FBTyxLQUNqQyxPQUFPLFNBQVUsR0FBSyxNQUFPLEdBQUUsT0FBUyxJQUFNLEtBQUssS0FBTyxJQUM3RCxPQUFPLEdBQU8sSUFBTSxFQUFPLEdBTzdCLFFBQVMsYUFDUCxFQUNBLEVBQ0EsRUFDQSxHQUVBLEdBQUksR0FBaUIsR0FBVSxFQUFPLFFBQVEsZUFFMUMsRUFBUSxFQUFTLFNBQ3JCLEtBQ0UsRUFBUSxNQUFNLEdBQ2QsTUFBTyxJQUVULEdBQUksSUFDRixLQUFNLEVBQVMsTUFBUyxHQUFVLEVBQU8sS0FDekMsS0FBTyxHQUFVLEVBQU8sU0FDeEIsS0FBTSxFQUFTLE1BQVEsSUFDdkIsS0FBTSxFQUFTLE1BQVEsR0FDdkIsTUFBTyxFQUNQLE9BQVEsRUFBUyxXQUNqQixTQUFVLFlBQVksRUFBVSxHQUNoQyxRQUFTLEVBQVMsWUFBWSxNQUtoQyxPQUhJLEtBQ0YsRUFBTSxlQUFpQixZQUFZLEVBQWdCLElBRTlDLE9BQU8sT0FBTyxHQUd2QixRQUFTLE9BQU8sR0FDZCxHQUFJLE1BQU0sUUFBUSxHQUNoQixNQUFPLEdBQU0sSUFBSSxNQUNaLElBQUksR0FBMEIsZ0JBQVYsR0FBb0IsQ0FDN0MsR0FBSSxLQUNKLEtBQUssR0FBSSxLQUFPLEdBQ2QsRUFBSSxHQUFPLE1BQU0sRUFBTSxHQUV6QixPQUFPLEdBRVAsTUFBTyxHQVNYLFFBQVMsYUFBYSxHQUVwQixJQURBLEdBQUksTUFDRyxHQUNMLEVBQUksUUFBUSxHQUNaLEVBQVMsRUFBTyxNQUVsQixPQUFPLEdBR1QsUUFBUyxhQUNQLEVBQ0EsR0FFQSxHQUFJLEdBQU8sRUFBSSxLQUNYLEVBQVEsRUFBSSxVQUFzQixLQUFWLElBQW1CLEtBQy9DLElBQUksR0FBTyxFQUFJLFNBQW9CLEtBQVQsSUFBa0IsRUFBTyxHQUVuRCxJQUFJLEdBQVksR0FBbUIsY0FDbkMsUUFBUSxHQUFRLEtBQU8sRUFBVSxHQUFTLEVBRzVDLFFBQVMsYUFBYSxFQUFHLEdBQ3ZCLE1BQUksS0FBTSxNQUNELElBQU0sSUFDSCxJQUVELEVBQUUsTUFBUSxFQUFFLEtBRW5CLEVBQUUsS0FBSyxRQUFRLGdCQUFpQixNQUFRLEVBQUUsS0FBSyxRQUFRLGdCQUFpQixLQUN4RSxFQUFFLE9BQVMsRUFBRSxNQUNiLGNBQWMsRUFBRSxNQUFPLEVBQUUsVUFFbEIsRUFBRSxPQUFRLEVBQUUsUUFFbkIsRUFBRSxPQUFTLEVBQUUsTUFDYixFQUFFLE9BQVMsRUFBRSxNQUNiLGNBQWMsRUFBRSxNQUFPLEVBQUUsUUFDekIsY0FBYyxFQUFFLE9BQVEsRUFBRSxVQU9oQyxRQUFTLGVBQWUsRUFBRyxHQUt6QixPQUpXLEtBQU4sSUFBZSxVQUNULEtBQU4sSUFBZSxPQUdmLElBQU0sRUFBSyxNQUFPLEtBQU0sQ0FDN0IsSUFBSSxHQUFRLE9BQU8sS0FBSyxHQUNwQixFQUFRLE9BQU8sS0FBSyxFQUN4QixPQUFJLEdBQU0sU0FBVyxFQUFNLFFBR3BCLEVBQU0sTUFBTSxTQUFVLEdBQzNCLEdBQUksR0FBTyxFQUFFLEdBQ1QsRUFBTyxFQUFFLEVBRWIsT0FBb0IsZ0JBQVQsSUFBcUMsZ0JBQVQsR0FDOUIsY0FBYyxFQUFNLEdBRXRCLE9BQU8sS0FBVSxPQUFPLEtBSW5DLFFBQVMsaUJBQWlCLEVBQVMsR0FDakMsTUFHUSxLQUZOLEVBQVEsS0FBSyxRQUFRLGdCQUFpQixLQUFLLFFBQ3pDLEVBQU8sS0FBSyxRQUFRLGdCQUFpQixTQUVyQyxFQUFPLE1BQVEsRUFBUSxPQUFTLEVBQU8sT0FDekMsY0FBYyxFQUFRLE1BQU8sRUFBTyxPQUl4QyxRQUFTLGVBQWUsRUFBUyxHQUMvQixJQUFLLEdBQUksS0FBTyxHQUNkLEtBQU0sSUFBTyxJQUNYLE9BQU8sQ0FHWCxRQUFPLEVBS1QsUUFBUyxhQUNQLEVBQ0EsRUFDQSxHQUVBLEdBQUksR0FBWSxFQUFTLE9BQU8sRUFDaEMsSUFBa0IsTUFBZCxFQUNGLE1BQU8sRUFHVCxJQUFrQixNQUFkLEdBQW1DLE1BQWQsRUFDdkIsTUFBTyxHQUFPLENBR2hCLElBQUksR0FBUSxFQUFLLE1BQU0sSUFLbEIsSUFBVyxFQUFNLEVBQU0sT0FBUyxJQUNuQyxFQUFNLEtBS1IsS0FBSyxHQURELEdBQVcsRUFBUyxRQUFRLE1BQU8sSUFBSSxNQUFNLEtBQ3hDLEVBQUksRUFBRyxFQUFJLEVBQVMsT0FBUSxJQUFLLENBQ3hDLEdBQUksR0FBVSxFQUFTLEVBQ1AsUUFBWixFQUNGLEVBQU0sTUFDZSxNQUFaLEdBQ1QsRUFBTSxLQUFLLEdBU2YsTUFKaUIsS0FBYixFQUFNLElBQ1IsRUFBTSxRQUFRLElBR1QsRUFBTSxLQUFLLEtBR3BCLFFBQVMsV0FBVyxHQUNsQixHQUFJLEdBQU8sR0FDUCxFQUFRLEdBRVIsRUFBWSxFQUFLLFFBQVEsSUFDekIsSUFBYSxJQUNmLEVBQU8sRUFBSyxNQUFNLEdBQ2xCLEVBQU8sRUFBSyxNQUFNLEVBQUcsR0FHdkIsSUFBSSxHQUFhLEVBQUssUUFBUSxJQU05QixPQUxJLElBQWMsSUFDaEIsRUFBUSxFQUFLLE1BQU0sRUFBYSxHQUNoQyxFQUFPLEVBQUssTUFBTSxFQUFHLEtBSXJCLEtBQU0sRUFDTixNQUFPLEVBQ1AsS0FBTSxHQUlWLFFBQVMsV0FBVyxHQUNsQixNQUFPLEdBQUssUUFBUSxRQUFTLEtBeUMvQixRQUFTLE9BQU8sRUFBSyxHQVFuQixJQVBBLEdBS0ksR0FMQSxLQUNBLEVBQU0sRUFDTixFQUFRLEVBQ1IsRUFBTyxHQUNQLEVBQW1CLEdBQVcsRUFBUSxXQUFhLElBR2YsT0FBaEMsRUFBTSxZQUFZLEtBQUssS0FBZSxDQUM1QyxHQUFJLEdBQUksRUFBSSxHQUNSLEVBQVUsRUFBSSxHQUNkLEVBQVMsRUFBSSxLQUtqQixJQUpBLEdBQVEsRUFBSSxNQUFNLEVBQU8sR0FDekIsRUFBUSxFQUFTLEVBQUUsT0FHZixFQUNGLEdBQVEsRUFBUSxPQURsQixDQUtBLEdBQUksR0FBTyxFQUFJLEdBQ1gsRUFBUyxFQUFJLEdBQ2IsRUFBTyxFQUFJLEdBQ1gsRUFBVSxFQUFJLEdBQ2QsRUFBUSxFQUFJLEdBQ1osRUFBVyxFQUFJLEdBQ2YsRUFBVyxFQUFJLEVBR2YsS0FDRixFQUFPLEtBQUssR0FDWixFQUFPLEdBR1QsSUFBSSxHQUFvQixNQUFWLEdBQTBCLE1BQVIsR0FBZ0IsSUFBUyxFQUNyRCxFQUFzQixNQUFiLEdBQWlDLE1BQWIsRUFDN0IsRUFBd0IsTUFBYixHQUFpQyxNQUFiLEVBQy9CLEVBQVksRUFBSSxJQUFNLEVBQ3RCLEVBQVUsR0FBVyxDQUV6QixHQUFPLE1BQ0wsS0FBTSxHQUFRLElBQ2QsT0FBUSxHQUFVLEdBQ2xCLFVBQVcsRUFDWCxTQUFVLEVBQ1YsT0FBUSxFQUNSLFFBQVMsRUFDVCxXQUFZLEVBQ1osUUFBUyxFQUFVLFlBQVksR0FBWSxFQUFXLEtBQU8sS0FBTyxhQUFhLEdBQWEsU0FjbEcsTUFUSSxHQUFRLEVBQUksU0FDZCxHQUFRLEVBQUksT0FBTyxJQUlqQixHQUNGLEVBQU8sS0FBSyxHQUdQLEVBVVQsUUFBUyxTQUFTLEVBQUssR0FDckIsTUFBTyxrQkFBaUIsTUFBTSxFQUFLLElBU3JDLFFBQVMsMEJBQTBCLEdBQ2pDLE1BQU8sV0FBVSxHQUFLLFFBQVEsVUFBVyxTQUFVLEdBQ2pELE1BQU8sSUFBTSxFQUFFLFdBQVcsR0FBRyxTQUFTLElBQUksZ0JBVTlDLFFBQVMsZ0JBQWdCLEdBQ3ZCLE1BQU8sV0FBVSxHQUFLLFFBQVEsUUFBUyxTQUFVLEdBQy9DLE1BQU8sSUFBTSxFQUFFLFdBQVcsR0FBRyxTQUFTLElBQUksZ0JBTzlDLFFBQVMsa0JBQWtCLEdBS3pCLElBQUssR0FIRCxHQUFVLEdBQUksT0FBTSxFQUFPLFFBR3RCLEVBQUksRUFBRyxFQUFJLEVBQU8sT0FBUSxJQUNSLGdCQUFkLEdBQU8sS0FDaEIsRUFBUSxHQUFLLEdBQUksUUFBTyxPQUFTLEVBQU8sR0FBRyxRQUFVLE1BSXpELE9BQU8sVUFBVSxFQUFLLEdBTXBCLElBQUssR0FMRCxHQUFPLEdBQ1AsRUFBTyxNQUNQLEVBQVUsTUFDVixFQUFTLEVBQVEsT0FBUyx5QkFBMkIsbUJBRWhELEVBQUksRUFBRyxFQUFJLEVBQU8sT0FBUSxJQUFLLENBQ3RDLEdBQUksR0FBUSxFQUFPLEVBRW5CLElBQXFCLGdCQUFWLEdBQVgsQ0FNQSxHQUNJLEdBREEsRUFBUSxFQUFLLEVBQU0sS0FHdkIsSUFBYSxNQUFULEVBQWUsQ0FDakIsR0FBSSxFQUFNLFNBQVUsQ0FFZCxFQUFNLFVBQ1IsR0FBUSxFQUFNLE9BR2hCLFVBRUEsS0FBTSxJQUFJLFdBQVUsYUFBZSxFQUFNLEtBQU8sbUJBSXBELEdBQUksUUFBUSxHQUFaLENBQ0UsSUFBSyxFQUFNLE9BQ1QsS0FBTSxJQUFJLFdBQVUsYUFBZSxFQUFNLEtBQU8sa0NBQW9DLEtBQUssVUFBVSxHQUFTLElBRzlHLElBQXFCLElBQWpCLEVBQU0sT0FBYyxDQUN0QixHQUFJLEVBQU0sU0FDUixRQUVBLE1BQU0sSUFBSSxXQUFVLGFBQWUsRUFBTSxLQUFPLHFCQUlwRCxJQUFLLEdBQUksR0FBSSxFQUFHLEVBQUksRUFBTSxPQUFRLElBQUssQ0FHckMsR0FGQSxFQUFVLEVBQU8sRUFBTSxLQUVsQixFQUFRLEdBQUcsS0FBSyxHQUNuQixLQUFNLElBQUksV0FBVSxpQkFBbUIsRUFBTSxLQUFPLGVBQWlCLEVBQU0sUUFBVSxvQkFBc0IsS0FBSyxVQUFVLEdBQVcsSUFHdkksS0FBZSxJQUFOLEVBQVUsRUFBTSxPQUFTLEVBQU0sV0FBYSxPQXBCekQsQ0E0QkEsR0FGQSxFQUFVLEVBQU0sU0FBVyxlQUFlLEdBQVMsRUFBTyxJQUVyRCxFQUFRLEdBQUcsS0FBSyxHQUNuQixLQUFNLElBQUksV0FBVSxhQUFlLEVBQU0sS0FBTyxlQUFpQixFQUFNLFFBQVUsb0JBQXNCLEVBQVUsSUFHbkgsSUFBUSxFQUFNLE9BQVMsT0FyRHJCLElBQVEsRUF3RFosTUFBTyxJQVVYLFFBQVMsY0FBYyxHQUNyQixNQUFPLEdBQUksUUFBUSw2QkFBOEIsUUFTbkQsUUFBUyxhQUFhLEdBQ3BCLE1BQU8sR0FBTSxRQUFRLGdCQUFpQixRQVV4QyxRQUFTLFlBQVksRUFBSSxHQUV2QixNQURBLEdBQUcsS0FBTyxFQUNILEVBU1QsUUFBUyxPQUFPLEdBQ2QsTUFBTyxHQUFRLFVBQVksR0FBSyxJQVVsQyxRQUFTLGdCQUFnQixFQUFNLEdBRTdCLEdBQUksR0FBUyxFQUFLLE9BQU8sTUFBTSxZQUUvQixJQUFJLEVBQ0YsSUFBSyxHQUFJLEdBQUksRUFBRyxFQUFJLEVBQU8sT0FBUSxJQUNqQyxFQUFLLE1BQ0gsS0FBTSxFQUNOLE9BQVEsS0FDUixVQUFXLEtBQ1gsVUFBVSxFQUNWLFFBQVEsRUFDUixTQUFTLEVBQ1QsVUFBVSxFQUNWLFFBQVMsTUFLZixPQUFPLFlBQVcsRUFBTSxHQVcxQixRQUFTLGVBQWUsRUFBTSxFQUFNLEdBR2xDLElBQUssR0FGRCxNQUVLLEVBQUksRUFBRyxFQUFJLEVBQUssT0FBUSxJQUMvQixFQUFNLEtBQUssYUFBYSxFQUFLLEdBQUksRUFBTSxHQUFTLE9BS2xELE9BQU8sWUFGTSxHQUFJLFFBQU8sTUFBUSxFQUFNLEtBQUssS0FBTyxJQUFLLE1BQU0sSUFFbkMsR0FXNUIsUUFBUyxnQkFBZ0IsRUFBTSxFQUFNLEdBQ25DLE1BQU8sZ0JBQWUsTUFBTSxFQUFNLEdBQVUsRUFBTSxHQVdwRCxRQUFTLGdCQUFnQixFQUFRLEVBQU0sR0FDaEMsUUFBUSxLQUNYLEVBQWtDLEdBQVEsRUFDMUMsTUFHRixFQUFVLEtBT1YsS0FBSyxHQUxELEdBQVMsRUFBUSxPQUNqQixHQUFzQixJQUFoQixFQUFRLElBQ2QsRUFBUSxHQUdILEVBQUksRUFBRyxFQUFJLEVBQU8sT0FBUSxJQUFLLENBQ3RDLEdBQUksR0FBUSxFQUFPLEVBRW5CLElBQXFCLGdCQUFWLEdBQ1QsR0FBUyxhQUFhLE9BQ2pCLENBQ0wsR0FBSSxHQUFTLGFBQWEsRUFBTSxRQUM1QixFQUFVLE1BQVEsRUFBTSxRQUFVLEdBRXRDLEdBQUssS0FBSyxHQUVOLEVBQU0sU0FDUixHQUFXLE1BQVEsRUFBUyxFQUFVLE1BT3BDLEVBSkEsRUFBTSxTQUNILEVBQU0sUUFHQyxFQUFTLElBQU0sRUFBVSxLQUZ6QixNQUFRLEVBQVMsSUFBTSxFQUFVLE1BS25DLEVBQVMsSUFBTSxFQUFVLElBR3JDLEdBQVMsR0FJYixHQUFJLEdBQVksYUFBYSxFQUFRLFdBQWEsS0FDOUMsRUFBb0IsRUFBTSxPQUFPLEVBQVUsVUFBWSxDQWtCM0QsT0FaSyxLQUNILEdBQVMsRUFBb0IsRUFBTSxNQUFNLEdBQUksRUFBVSxRQUFVLEdBQVMsTUFBUSxFQUFZLFdBSTlGLEdBREUsRUFDTyxJQUlBLEdBQVUsRUFBb0IsR0FBSyxNQUFRLEVBQVksTUFHM0QsV0FBVyxHQUFJLFFBQU8sSUFBTSxFQUFPLE1BQU0sSUFBVyxHQWU3RCxRQUFTLGNBQWMsRUFBTSxFQUFNLEdBUWpDLE1BUEssU0FBUSxLQUNYLEVBQWtDLEdBQVEsRUFDMUMsTUFHRixFQUFVLE1BRU4sWUFBZ0IsUUFDWCxlQUFlLEVBQTRCLEdBR2hELFFBQVEsR0FDSCxjQUFvQyxFQUE4QixFQUFRLEdBRzVFLGVBQXFDLEVBQThCLEVBQVEsR0FZcEYsUUFBUyxZQUNQLEVBQ0EsRUFDQSxHQUVBLEVBQVMsS0FDVCxLQUNFLEdBQUksR0FDRixtQkFBbUIsS0FDbEIsbUJBQW1CLEdBQVEsZUFBZSxRQUFRLEdBS3JELE9BRkksR0FBTyxZQUFhLEVBQU8sR0FBSyxFQUFPLFdBRXBDLEVBQU8sR0FBVSxRQUFRLElBQ2hDLE1BQU8sR0FJUCxNQUFPLEdBQ1AsY0FFTyxHQUFPLElBTWxCLFFBQVMsbUJBQ1AsRUFDQSxFQUNBLEVBQ0EsR0FFQSxHQUFJLEdBQXNCLGdCQUFSLElBQXFCLEtBQU0sR0FBUSxDQUVyRCxJQUFJLEVBQUssWUFDUCxNQUFPLEVBQ0YsSUFBSSxFQUFLLEtBQ2QsTUFBTyxXQUFXLEVBSXBCLEtBQUssRUFBSyxNQUFRLEVBQUssUUFBVSxFQUFTLENBQ3hDLEVBQU8sVUFBVyxHQUNsQixFQUFLLGFBQWMsQ0FDbkIsSUFBSSxHQUFTLE9BQU8sVUFBVyxFQUFRLFFBQVMsRUFBSyxPQUNyRCxJQUFJLEVBQVEsS0FDVixFQUFLLEtBQU8sRUFBUSxLQUNwQixFQUFLLE9BQVMsTUFDVCxJQUFJLEVBQVEsUUFBUSxPQUFRLENBQ2pDLEdBQUksR0FBVSxFQUFRLFFBQVEsRUFBUSxRQUFRLE9BQVMsR0FBRyxJQUMxRCxHQUFLLEtBQU8sV0FBVyxFQUFTLEVBQVMsUUFBVyxFQUFZLE1BSWxFLE1BQU8sR0FHVCxHQUFJLEdBQWEsVUFBVSxFQUFLLE1BQVEsSUFDcEMsRUFBWSxHQUFXLEVBQVEsTUFBUyxJQUN4QyxFQUFPLEVBQVcsS0FDbEIsWUFBWSxFQUFXLEtBQU0sRUFBVSxHQUFVLEVBQUssUUFDdEQsRUFFQSxFQUFRLGFBQ1YsRUFBVyxNQUNYLEVBQUssTUFDTCxHQUFVLEVBQU8sUUFBUSxZQUd2QixFQUFPLEVBQUssTUFBUSxFQUFXLElBS25DLE9BSkksSUFBMkIsTUFBbkIsRUFBSyxPQUFPLEtBQ3RCLEVBQU8sSUFBTSxJQUliLGFBQWEsRUFDYixLQUFNLEVBQ04sTUFBTyxFQUNQLEtBQU0sR0ErSlYsUUFBUyxZQUFZLEdBRW5CLEtBQUksRUFBRSxTQUFXLEVBQUUsUUFBVSxFQUFFLFNBQVcsRUFBRSxVQUV4QyxFQUFFLHNCQUVXLEtBQWIsRUFBRSxRQUFxQyxJQUFiLEVBQUUsUUFBaEMsQ0FFQSxHQUFJLEVBQUUsZUFBaUIsRUFBRSxjQUFjLGFBQWMsQ0FFbkQsR0FBSSxjQUFjLEtBREwsRUFBRSxjQUFjLGFBQWEsV0FDUixPQU1wQyxNQUhJLEdBQUUsZ0JBQ0osRUFBRSxrQkFFRyxHQUdULFFBQVMsWUFBWSxHQUNuQixHQUFJLEVBRUYsSUFBSyxHQURELEdBQ0ssRUFBSSxFQUFHLEVBQUksRUFBUyxPQUFRLElBQUssQ0FFeEMsR0FEQSxFQUFRLEVBQVMsR0FDQyxNQUFkLEVBQU0sSUFDUixNQUFPLEVBRVQsSUFBSSxFQUFNLFdBQWEsRUFBUSxXQUFXLEVBQU0sV0FDOUMsTUFBTyxJQVFmLFFBQVMsU0FBUyxHQUNoQixJQUFJLFFBQVEsV0FBYSxPQUFTLEVBQWxDLENBQ0EsUUFBUSxXQUFZLEVBRXBCLEtBQU8sQ0FFUCxJQUFJLEdBQVEsU0FBVSxHQUFLLFdBQWEsS0FBTixHQUU5QixFQUFtQixTQUFVLEVBQUksR0FDbkMsR0FBSSxHQUFJLEVBQUcsU0FBUyxZQUNoQixHQUFNLElBQU0sRUFBTSxFQUFJLEVBQUUsT0FBUyxFQUFNLEVBQUksRUFBRSx3QkFDL0MsRUFBRSxFQUFJLEdBSVYsR0FBSSxPQUNGLGFBQWMsV0FDUixFQUFNLEtBQUssU0FBUyxTQUN0QixLQUFLLFlBQWMsS0FDbkIsS0FBSyxRQUFVLEtBQUssU0FBUyxPQUM3QixLQUFLLFFBQVEsS0FBSyxNQUNsQixFQUFJLEtBQUssZUFBZSxLQUFNLFNBQVUsS0FBSyxRQUFRLFFBQVEsVUFFN0QsS0FBSyxZQUFlLEtBQUssU0FBVyxLQUFLLFFBQVEsYUFBZ0IsS0FFbkUsRUFBaUIsS0FBTSxPQUV6QixVQUFXLFdBQ1QsRUFBaUIsU0FJckIsT0FBTyxlQUFlLEVBQUksVUFBVyxXQUNuQyxJQUFLLFdBQWtCLE1BQU8sTUFBSyxZQUFZLFdBR2pELE9BQU8sZUFBZSxFQUFJLFVBQVcsVUFDbkMsSUFBSyxXQUFrQixNQUFPLE1BQUssWUFBWSxVQUdqRCxFQUFJLFVBQVUsYUFBYyxNQUM1QixFQUFJLFVBQVUsYUFBYyxLQUU1QixJQUFJLEdBQVMsRUFBSSxPQUFPLHFCQUV4QixHQUFPLGlCQUFtQixFQUFPLGlCQUFtQixFQUFPLGtCQUFvQixFQUFPLFNBU3hGLFFBQVMsZ0JBQ1AsRUFDQSxFQUNBLEVBQ0EsR0FHQSxHQUFJLEdBQVcsTUFFWCxFQUFVLEdBQWMsT0FBTyxPQUFPLE1BRXRDLEVBQVUsR0FBYyxPQUFPLE9BQU8sS0FFMUMsR0FBTyxRQUFRLFNBQVUsR0FDdkIsZUFBZSxFQUFVLEVBQVMsRUFBUyxJQUk3QyxLQUFLLEdBQUksR0FBSSxFQUFHLEVBQUksRUFBUyxPQUFRLEVBQUksRUFBRyxJQUN0QixNQUFoQixFQUFTLEtBQ1gsRUFBUyxLQUFLLEVBQVMsT0FBTyxFQUFHLEdBQUcsSUFDcEMsSUFDQSxJQWdCSixRQUNFLFNBQVUsRUFDVixRQUFTLEVBQ1QsUUFBUyxHQUliLFFBQVMsZ0JBQ1AsRUFDQSxFQUNBLEVBQ0EsRUFDQSxFQUNBLEdBRUEsR0FBSSxHQUFPLEVBQU0sS0FDYixFQUFPLEVBQU0sS0FXYixFQUNGLEVBQU0sd0JBQ0osRUFBaUIsY0FBYyxFQUFNLEVBQVEsRUFBb0IsT0FFbEMsa0JBQXhCLEdBQU0sZ0JBQ2YsRUFBb0IsVUFBWSxFQUFNLGNBR3hDLElBQUksSUFDRixLQUFNLEVBQ04sTUFBTyxrQkFBa0IsRUFBZ0IsR0FDekMsV0FBWSxFQUFNLGFBQWdCLFFBQVMsRUFBTSxXQUNqRCxhQUNBLEtBQU0sRUFDTixPQUFRLEVBQ1IsUUFBUyxFQUNULFNBQVUsRUFBTSxTQUNoQixZQUFhLEVBQU0sWUFDbkIsS0FBTSxFQUFNLFNBQ1osTUFDaUIsTUFBZixFQUFNLFNBRUYsRUFBTSxXQUNKLEVBQU0sT0FDSixRQUFTLEVBQU0sT0FvQzNCLElBakNJLEVBQU0sVUFvQlIsRUFBTSxTQUFTLFFBQVEsU0FBVSxHQUMvQixHQUFJLEdBQWUsRUFDZixVQUFXLEVBQVUsSUFBTyxFQUFVLFVBQ3RDLEVBQ0osZ0JBQWUsRUFBVSxFQUFTLEVBQVMsRUFBTyxFQUFRLEtBSXpELEVBQVEsRUFBTyxRQUNsQixFQUFTLEtBQUssRUFBTyxNQUNyQixFQUFRLEVBQU8sTUFBUSxPQUdMLEtBQWhCLEVBQU0sTUFFUixJQUFLLEdBREQsR0FBVSxNQUFNLFFBQVEsRUFBTSxPQUFTLEVBQU0sT0FBUyxFQUFNLE9BQ3ZELEVBQUksRUFBRyxFQUFJLEVBQVEsU0FBVSxFQUFHLENBQ3ZDLEdBQUksR0FBUSxFQUFRLEdBVWhCLEdBQ0YsS0FBTSxFQUNOLFNBQVUsRUFBTSxTQUVsQixnQkFDRSxFQUNBLEVBQ0EsRUFDQSxFQUNBLEVBQ0EsRUFBTyxNQUFRLEtBS2pCLElBQ0csRUFBUSxLQUNYLEVBQVEsR0FBUSxJQVd0QixRQUFTLG1CQUNQLEVBQ0EsR0FFQSxHQUFJLEdBQVEsZUFBZSxLQUFVLEVBV3JDLE9BQU8sR0FHVCxRQUFTLGVBQ1AsRUFDQSxFQUNBLEdBR0EsTUFESyxLQUFVLEVBQU8sRUFBSyxRQUFRLE1BQU8sS0FDMUIsTUFBWixFQUFLLEdBQXFCLEVBQ2hCLE1BQVYsRUFBeUIsRUFDdEIsVUFBWSxFQUFXLEtBQUksSUFBTSxHQU8xQyxRQUFTLGVBQ1AsRUFDQSxHQU9BLFFBQVMsR0FBVyxHQUNsQixlQUFlLEVBQVEsRUFBVSxFQUFTLEdBRzVDLFFBQVMsR0FDUCxFQUNBLEVBQ0EsR0FFQSxHQUFJLEdBQVcsa0JBQWtCLEVBQUssR0FBYyxFQUFPLEdBQ3ZELEVBQU8sRUFBUyxJQUVwQixJQUFJLEVBQU0sQ0FDUixHQUFJLEdBQVMsRUFBUSxFQUlyQixLQUFLLEVBQVUsTUFBTyxHQUFhLEtBQU0sRUFDekMsSUFBSSxHQUFhLEVBQU8sTUFBTSxLQUMzQixPQUFPLFNBQVUsR0FBTyxPQUFRLEVBQUksV0FDcEMsSUFBSSxTQUFVLEdBQU8sTUFBTyxHQUFJLE1BTW5DLElBSitCLGdCQUFwQixHQUFTLFNBQ2xCLEVBQVMsV0FHUCxHQUErQyxnQkFBeEIsR0FBYSxPQUN0QyxJQUFLLEdBQUksS0FBTyxHQUFhLFNBQ3JCLElBQU8sR0FBUyxTQUFXLEVBQVcsUUFBUSxJQUFRLElBQzFELEVBQVMsT0FBTyxHQUFPLEVBQWEsT0FBTyxHQU1qRCxPQURBLEdBQVMsS0FBTyxXQUFXLEVBQU8sS0FBTSxFQUFTLE9BQVMsZ0JBQW1CLEVBQU8sS0FDN0UsRUFBYSxFQUFRLEVBQVUsR0FDakMsR0FBSSxFQUFTLEtBQU0sQ0FDeEIsRUFBUyxTQUNULEtBQUssR0FBSSxHQUFJLEVBQUcsRUFBSSxFQUFTLE9BQVEsSUFBSyxDQUN4QyxHQUFJLEdBQU8sRUFBUyxHQUNoQixFQUFXLEVBQVEsRUFDdkIsSUFBSSxXQUFXLEVBQVMsTUFBTyxFQUFTLEtBQU0sRUFBUyxRQUNyRCxNQUFPLEdBQWEsRUFBVSxFQUFVLElBSzlDLE1BQU8sR0FBYSxLQUFNLEdBRzVCLFFBQVMsR0FDUCxFQUNBLEdBRUEsR0FBSSxHQUFtQixFQUFPLFNBQzFCLEVBQXVDLGtCQUFyQixHQUNsQixFQUFpQixZQUFZLEVBQVEsRUFBVSxLQUFNLElBQ3JELENBTUosSUFKd0IsZ0JBQWIsS0FDVCxHQUFhLEtBQU0sS0FHaEIsR0FBZ0MsZ0JBQWIsR0FNdEIsTUFBTyxHQUFhLEtBQU0sRUFHNUIsSUFBSSxHQUFLLEVBQ0wsRUFBTyxFQUFHLEtBQ1YsRUFBTyxFQUFHLEtBQ1YsRUFBUSxFQUFTLE1BQ2pCLEVBQU8sRUFBUyxLQUNoQixFQUFTLEVBQVMsTUFLdEIsSUFKQSxFQUFRLEVBQUcsZUFBZSxTQUFXLEVBQUcsTUFBUSxFQUNoRCxFQUFPLEVBQUcsZUFBZSxRQUFVLEVBQUcsS0FBTyxFQUM3QyxFQUFTLEVBQUcsZUFBZSxVQUFZLEVBQUcsT0FBUyxFQUUvQyxFQUFNLENBRVcsRUFBUSxFQUkzQixPQUFPLElBQ0wsYUFBYSxFQUNiLEtBQU0sRUFDTixNQUFPLEVBQ1AsS0FBTSxFQUNOLE9BQVEsT0FDUCxHQUFXLEdBQ1QsR0FBSSxFQUFNLENBRWYsR0FBSSxHQUFVLGtCQUFrQixFQUFNLEVBSXRDLE9BQU8sSUFDTCxhQUFhLEVBQ2IsS0FKaUIsV0FBVyxFQUFTLEVBQVMsNkJBQWdDLEVBQVUsS0FLeEYsTUFBTyxFQUNQLEtBQU0sT0FDTCxHQUFXLEdBS2QsTUFBTyxHQUFhLEtBQU0sR0FJOUIsUUFBUyxHQUNQLEVBQ0EsRUFDQSxHQUVBLEdBQUksR0FBYyxXQUFXLEVBQVMsRUFBUyxPQUFTLDRCQUErQixFQUFVLEtBQzdGLEVBQWUsR0FDakIsYUFBYSxFQUNiLEtBQU0sR0FFUixJQUFJLEVBQWMsQ0FDaEIsR0FBSSxHQUFVLEVBQWEsUUFDdkIsRUFBZ0IsRUFBUSxFQUFRLE9BQVMsRUFFN0MsT0FEQSxHQUFTLE9BQVMsRUFBYSxPQUN4QixFQUFhLEVBQWUsR0FFckMsTUFBTyxHQUFhLEtBQU0sR0FHNUIsUUFBUyxHQUNQLEVBQ0EsRUFDQSxHQUVBLE1BQUksSUFBVSxFQUFPLFNBQ1osRUFBUyxFQUFRLEdBQWtCLEdBRXhDLEdBQVUsRUFBTyxRQUNaLEVBQU0sRUFBUSxFQUFVLEVBQU8sU0FFakMsWUFBWSxFQUFRLEVBQVUsRUFBZ0IsR0F0SnZELEdBQUksR0FBTSxlQUFlLEdBQ3JCLEVBQVcsRUFBSSxTQUNmLEVBQVUsRUFBSSxRQUNkLEVBQVUsRUFBSSxPQXNKbEIsUUFDRSxNQUFPLEVBQ1AsVUFBVyxHQUlmLFFBQVMsWUFDUCxFQUNBLEVBQ0EsR0FFQSxHQUFJLEdBQUksRUFBSyxNQUFNLEVBRW5CLEtBQUssRUFDSCxPQUFPLENBQ0YsS0FBSyxFQUNWLE9BQU8sQ0FHVCxLQUFLLEdBQUksR0FBSSxFQUFHLEVBQU0sRUFBRSxPQUFRLEVBQUksSUFBTyxFQUFHLENBQzVDLEdBQUksR0FBTSxFQUFNLEtBQUssRUFBSSxHQUNyQixFQUFzQixnQkFBVCxHQUFFLEdBQWtCLG1CQUFtQixFQUFFLElBQU0sRUFBRSxFQUM5RCxLQUVGLEVBQU8sRUFBSSxNQUFRLGFBQWUsR0FJdEMsT0FBTyxFQUdULFFBQVMsbUJBQW1CLEVBQU0sR0FDaEMsTUFBTyxhQUFZLEVBQU0sRUFBTyxPQUFTLEVBQU8sT0FBTyxLQUFPLEtBQUssR0FXckUsUUFBUyxlQUNQLE1BQU8sTUFBSyxNQUFNLFFBQVEsR0FLNUIsUUFBUyxlQUNQLE1BQU8sTUFHVCxRQUFTLGFBQWEsR0FDcEIsTUFBUSxNQUFPLEVBT2pCLFFBQVMsZUFNUCxHQUFJLEdBQWtCLE9BQU8sU0FBUyxTQUFXLEtBQU8sT0FBTyxTQUFTLEtBQ3BFLEVBQWUsT0FBTyxTQUFTLEtBQUssUUFBUSxFQUFpQixHQUNqRSxRQUFPLFFBQVEsY0FBZSxJQUFLLGVBQWlCLEdBQUksR0FDeEQsT0FBTyxpQkFBaUIsV0FBWSxTQUFVLEdBQzVDLHFCQUNJLEVBQUUsT0FBUyxFQUFFLE1BQU0sS0FDckIsWUFBWSxFQUFFLE1BQU0sT0FLMUIsUUFBUyxjQUNQLEVBQ0EsRUFDQSxFQUNBLEdBRUEsR0FBSyxFQUFPLElBQVosQ0FJQSxHQUFJLEdBQVcsRUFBTyxRQUFRLGNBQ3pCLElBU0wsRUFBTyxJQUFJLFVBQVUsV0FDbkIsR0FBSSxHQUFXLG9CQUNYLEVBQWUsRUFBUyxLQUMxQixFQUNBLEVBQ0EsRUFDQSxFQUFRLEVBQVcsS0FHaEIsS0FJNEIsa0JBQXRCLEdBQWEsS0FDdEIsRUFDRyxLQUFLLFNBQVUsR0FDZCxpQkFBaUIsRUFBZ0IsS0FFbEMsTUFBTSxTQUFVLE1BTW5CLGlCQUFpQixFQUFjLE9BS3JDLFFBQVMsc0JBQ1AsR0FBSSxHQUFNLGFBQ04sS0FDRixjQUFjLElBQ1osRUFBRyxPQUFPLFlBQ1YsRUFBRyxPQUFPLGNBS2hCLFFBQVMscUJBQ1AsR0FBSSxHQUFNLGFBQ1YsSUFBSSxFQUNGLE1BQU8sZUFBYyxHQUl6QixRQUFTLG9CQUFvQixFQUFJLEdBQy9CLEdBQUksR0FBUSxTQUFTLGdCQUNqQixFQUFVLEVBQU0sd0JBQ2hCLEVBQVMsRUFBRyx1QkFDaEIsUUFDRSxFQUFHLEVBQU8sS0FBTyxFQUFRLEtBQU8sRUFBTyxFQUN2QyxFQUFHLEVBQU8sSUFBTSxFQUFRLElBQU0sRUFBTyxHQUl6QyxRQUFTLGlCQUFpQixHQUN4QixNQUFPLFVBQVMsRUFBSSxJQUFNLFNBQVMsRUFBSSxHQUd6QyxRQUFTLG1CQUFtQixHQUMxQixPQUNFLEVBQUcsU0FBUyxFQUFJLEdBQUssRUFBSSxFQUFJLE9BQU8sWUFDcEMsRUFBRyxTQUFTLEVBQUksR0FBSyxFQUFJLEVBQUksT0FBTyxhQUl4QyxRQUFTLGlCQUFpQixHQUN4QixPQUNFLEVBQUcsU0FBUyxFQUFJLEdBQUssRUFBSSxFQUFJLEVBQzdCLEVBQUcsU0FBUyxFQUFJLEdBQUssRUFBSSxFQUFJLEdBSWpDLFFBQVMsVUFBVSxHQUNqQixNQUFvQixnQkFBTixHQUtoQixRQUFTLGtCQUFrQixFQUFjLEdBQ3ZDLEdBQUksR0FBbUMsZ0JBQWpCLEVBQ3RCLElBQUksR0FBNkMsZ0JBQTFCLEdBQWEsU0FBdUIsQ0FHekQsR0FBSSxHQUFLLHVCQUF1QixLQUFLLEVBQWEsVUFDOUMsU0FBUyxlQUFlLEVBQWEsU0FBUyxNQUFNLElBQ3BELFNBQVMsY0FBYyxFQUFhLFNBRXhDLElBQUksRUFBSSxDQUNOLEdBQUksR0FDRixFQUFhLFFBQXlDLGdCQUF4QixHQUFhLE9BQ3ZDLEVBQWEsU0FFbkIsR0FBUyxnQkFBZ0IsR0FDekIsRUFBVyxtQkFBbUIsRUFBSSxPQUN6QixpQkFBZ0IsS0FDekIsRUFBVyxrQkFBa0IsUUFFdEIsSUFBWSxnQkFBZ0IsS0FDckMsRUFBVyxrQkFBa0IsR0FHM0IsSUFDRixPQUFPLFNBQVMsRUFBUyxFQUFHLEVBQVMsR0F1QnpDLFFBQVMsV0FBVyxFQUFLLEdBQ3ZCLG9CQUdBLElBQUksR0FBVSxPQUFPLE9BQ3JCLEtBQ00sRUFDRixFQUFRLGNBQWUsSUFBSyxlQUFpQixHQUFJLEdBRWpELEVBQVEsV0FBWSxJQUFLLFlBQVksZ0JBQWtCLEdBQUksR0FFN0QsTUFBTyxHQUNQLE9BQU8sU0FBUyxFQUFVLFVBQVksVUFBVSxJQUlwRCxRQUFTLGNBQWMsR0FDckIsVUFBVSxHQUFLLEdBS2pCLFFBQVMsVUFBVSxFQUFPLEVBQUksR0FDNUIsR0FBSSxHQUFPLFNBQVUsR0FDZixHQUFTLEVBQU0sT0FDakIsSUFFSSxFQUFNLEdBQ1IsRUFBRyxFQUFNLEdBQVEsV0FDZixFQUFLLEVBQVEsS0FHZixFQUFLLEVBQVEsR0FJbkIsR0FBSyxHQUtQLFFBQVMsd0JBQXdCLEdBQy9CLE1BQU8sVUFBVSxFQUFJLEVBQU0sR0FDekIsR0FBSSxJQUFXLEVBQ1gsRUFBVSxFQUNWLEVBQVEsSUFFWixtQkFBa0IsRUFBUyxTQUFVLEVBQUssRUFBRyxFQUFPLEdBTWxELEdBQW1CLGtCQUFSLFFBQWtDLEtBQVosRUFBSSxJQUFtQixDQUN0RCxHQUFXLEVBQ1gsR0FFQSxJQTBCSSxHQTFCQSxFQUFVLEtBQUssU0FBVSxHQUN2QixXQUFXLEtBQ2IsRUFBYyxFQUFZLFNBRzVCLEVBQUksU0FBa0Msa0JBQWhCLEdBQ2xCLEVBQ0EsS0FBSyxPQUFPLEdBQ2hCLEVBQU0sV0FBVyxHQUFPLElBQ3hCLEdBQ2UsR0FDYixNQUlBLEVBQVMsS0FBSyxTQUFVLEdBQzFCLEdBQUksR0FBTSxxQ0FBdUMsRUFBTSxLQUFPLENBRXpELEtBQ0gsRUFBUSxRQUFRLEdBQ1osRUFDQSxHQUFJLE9BQU0sR0FDZCxFQUFLLEtBS1QsS0FDRSxFQUFNLEVBQUksRUFBUyxHQUNuQixNQUFPLEdBQ1AsRUFBTyxHQUVULEdBQUksRUFDRixHQUF3QixrQkFBYixHQUFJLEtBQ2IsRUFBSSxLQUFLLEVBQVMsT0FDYixDQUVMLEdBQUksR0FBTyxFQUFJLFNBQ1gsSUFBNkIsa0JBQWQsR0FBSyxNQUN0QixFQUFLLEtBQUssRUFBUyxPQU94QixHQUFZLEtBSXJCLFFBQVMsbUJBQ1AsRUFDQSxHQUVBLE1BQU8sU0FBUSxFQUFRLElBQUksU0FBVSxHQUNuQyxNQUFPLFFBQU8sS0FBSyxFQUFFLFlBQVksSUFBSSxTQUFVLEdBQU8sTUFBTyxHQUMzRCxFQUFFLFdBQVcsR0FDYixFQUFFLFVBQVUsR0FDWixFQUFHLFFBS1QsUUFBUyxTQUFTLEdBQ2hCLE1BQU8sT0FBTSxVQUFVLE9BQU8sU0FBVSxHQU8xQyxRQUFTLFlBQVksR0FDbkIsTUFBTyxHQUFJLFlBQWUsV0FBeUMsV0FBNUIsRUFBSSxPQUFPLGFBT3BELFFBQVMsTUFBTSxHQUNiLEdBQUksSUFBUyxDQUNiLE9BQU8sWUFFTCxJQURBLEdBQUksTUFBVyxFQUFNLFVBQVUsT0FDdkIsS0FBUSxFQUFNLEdBQVEsVUFBVyxFQUV6QyxLQUFJLEVBRUosTUFEQSxJQUFTLEVBQ0YsRUFBRyxNQUFNLEtBQU0sSUEwTjFCLFFBQVMsZUFBZSxHQUN0QixJQUFLLEVBQ0gsR0FBSSxVQUFXLENBRWIsR0FBSSxHQUFTLFNBQVMsY0FBYyxPQUNwQyxHQUFRLEdBQVUsRUFBTyxhQUFhLFNBQVksSUFFbEQsRUFBTyxFQUFLLFFBQVEscUJBQXNCLFFBRTFDLEdBQU8sR0FRWCxPQUp1QixNQUFuQixFQUFLLE9BQU8sS0FDZCxFQUFPLElBQU0sR0FHUixFQUFLLFFBQVEsTUFBTyxJQUc3QixRQUFTLGNBQ1AsRUFDQSxHQUVBLEdBQUksR0FDQSxFQUFNLEtBQUssSUFBSSxFQUFRLE9BQVEsRUFBSyxPQUN4QyxLQUFLLEVBQUksRUFBRyxFQUFJLEdBQ1YsRUFBUSxLQUFPLEVBQUssR0FETCxLQUtyQixPQUNFLFFBQVMsRUFBSyxNQUFNLEVBQUcsR0FDdkIsVUFBVyxFQUFLLE1BQU0sR0FDdEIsWUFBYSxFQUFRLE1BQU0sSUFJL0IsUUFBUyxlQUNQLEVBQ0EsRUFDQSxFQUNBLEdBRUEsR0FBSSxHQUFTLGtCQUFrQixFQUFTLFNBQVUsRUFBSyxFQUFVLEVBQU8sR0FDdEUsR0FBSSxHQUFRLGFBQWEsRUFBSyxFQUM5QixJQUFJLEVBQ0YsTUFBTyxPQUFNLFFBQVEsR0FDakIsRUFBTSxJQUFJLFNBQVUsR0FBUyxNQUFPLEdBQUssRUFBTyxFQUFVLEVBQU8sS0FDakUsRUFBSyxFQUFPLEVBQVUsRUFBTyxJQUdyQyxPQUFPLFNBQVEsRUFBVSxFQUFPLFVBQVksR0FHOUMsUUFBUyxjQUNQLEVBQ0EsR0FNQSxNQUptQixrQkFBUixLQUVULEVBQU0sS0FBSyxPQUFPLElBRWIsRUFBSSxRQUFRLEdBR3JCLFFBQVMsb0JBQW9CLEdBQzNCLE1BQU8sZUFBYyxFQUFhLG1CQUFvQixXQUFXLEdBR25FLFFBQVMsb0JBQW9CLEdBQzNCLE1BQU8sZUFBYyxFQUFTLG9CQUFxQixXQUdyRCxRQUFTLFdBQVcsRUFBTyxHQUN6QixHQUFJLEVBQ0YsTUFBTyxZQUNMLE1BQU8sR0FBTSxNQUFNLEVBQVUsWUFLbkMsUUFBUyxvQkFDUCxFQUNBLEVBQ0EsR0FFQSxNQUFPLGVBQ0wsRUFDQSxtQkFDQSxTQUFVLEVBQU8sRUFBRyxFQUFPLEdBQ3pCLE1BQU8sZ0JBQWUsRUFBTyxFQUFPLEVBQUssRUFBSyxLQUtwRCxRQUFTLGdCQUNQLEVBQ0EsRUFDQSxFQUNBLEVBQ0EsR0FFQSxNQUFPLFVBQTBCLEVBQUksRUFBTSxHQUN6QyxNQUFPLEdBQU0sRUFBSSxFQUFNLFNBQVUsR0FDYixrQkFBUCxJQUNULEVBQUksS0FBSyxXQU1QLEtBQUssRUFBSSxFQUFNLFVBQVcsRUFBSyxLQUduQyxFQUFLLE1BS1gsUUFBUyxNQUNQLEVBQ0EsRUFDQSxFQUNBLEdBR0UsRUFBVSxLQUNULEVBQVUsR0FBSyxrQkFFaEIsRUFBRyxFQUFVLElBQ0osS0FDVCxXQUFXLFdBQ1QsS0FBSyxFQUFJLEVBQVcsRUFBSyxJQUN4QixJQW9GUCxRQUFTLGFBQWEsR0FDcEIsR0FBSSxHQUFPLFVBQVUsT0FBTyxTQUFTLFNBSXJDLE9BSEksSUFBK0IsSUFBdkIsRUFBSyxRQUFRLEtBQ3ZCLEVBQU8sRUFBSyxNQUFNLEVBQUssVUFFakIsR0FBUSxLQUFPLE9BQU8sU0FBUyxPQUFTLE9BQU8sU0FBUyxLQXFHbEUsUUFBUyxlQUFlLEdBQ3RCLEdBQUksR0FBVyxZQUFZLEVBQzNCLEtBQUssT0FBTyxLQUFLLEdBRWYsTUFEQSxRQUFPLFNBQVMsUUFBUSxVQUFVLEVBQU8sS0FBTyxLQUN6QyxFQUlYLFFBQVMsZUFDUCxHQUFJLEdBQU8sU0FDWCxPQUF1QixNQUFuQixFQUFLLE9BQU8sS0FHaEIsWUFBWSxJQUFNLElBQ1gsR0FHVCxRQUFTLFdBR1AsR0FBSSxHQUFPLE9BQU8sU0FBUyxLQUN2QixFQUFRLEVBQUssUUFBUSxJQUV6QixJQUFJLEVBQVEsRUFBSyxNQUFPLEVBRXhCLEdBQU8sRUFBSyxNQUFNLEVBQVEsRUFJMUIsSUFBSSxHQUFjLEVBQUssUUFBUSxJQUMvQixJQUFJLEVBQWMsRUFBRyxDQUNuQixHQUFJLEdBQVksRUFBSyxRQUFRLElBRTNCLEdBREUsR0FBYSxFQUNSLFVBQVUsRUFBSyxNQUFNLEVBQUcsSUFBYyxFQUFLLE1BQU0sR0FDMUMsVUFBVSxPQUV0QixJQUFlLElBQ2pCLEVBQU8sVUFBVSxFQUFLLE1BQU0sRUFBRyxJQUFnQixFQUFLLE1BQU0sR0FJOUQsT0FBTyxHQUdULFFBQVMsUUFBUSxHQUNmLEdBQUksR0FBTyxPQUFPLFNBQVMsS0FDdkIsRUFBSSxFQUFLLFFBQVEsSUFFckIsUUFEVyxHQUFLLEVBQUksRUFBSyxNQUFNLEVBQUcsR0FBSyxHQUN4QixJQUFNLEVBR3ZCLFFBQVMsVUFBVSxHQUNiLGtCQUNGLFVBQVUsT0FBTyxJQUVqQixPQUFPLFNBQVMsS0FBTyxFQUkzQixRQUFTLGFBQWEsR0FDaEIsa0JBQ0YsYUFBYSxPQUFPLElBRXBCLE9BQU8sU0FBUyxRQUFRLE9BQU8sSUF1U25DLFFBQVMsY0FBYyxFQUFNLEdBRTNCLE1BREEsR0FBSyxLQUFLLEdBQ0gsV0FDTCxHQUFJLEdBQUksRUFBSyxRQUFRLEVBQ2pCLElBQUssR0FBSyxFQUFLLE9BQU8sRUFBRyxJQUlqQyxRQUFTLFlBQVksRUFBTSxFQUFVLEdBQ25DLEdBQUksR0FBZ0IsU0FBVCxFQUFrQixJQUFNLEVBQVcsQ0FDOUMsT0FBTyxHQUFPLFVBQVUsRUFBTyxJQUFNLEdBQVEsRUFqeEYvQyxHQUFJLE9BQ0YsS0FBTSxhQUNOLFlBQVksRUFDWixPQUNFLE1BQ0UsS0FBTSxPQUNOLFFBQVMsWUFHYixPQUFRLFNBQWlCLEVBQUcsR0FDMUIsR0FBSSxHQUFRLEVBQUksTUFDWixFQUFXLEVBQUksU0FDZixFQUFTLEVBQUksT0FDYixFQUFPLEVBQUksSUFHZixHQUFLLFlBQWEsQ0FhbEIsS0FUQSxHQUFJLEdBQUksRUFBTyxlQUNYLEVBQU8sRUFBTSxLQUNiLEVBQVEsRUFBTyxPQUNmLEVBQVEsRUFBTyxtQkFBcUIsRUFBTyxxQkFJM0MsRUFBUSxFQUNSLEdBQVcsRUFDUixHQUFVLEVBQU8sY0FBZ0IsR0FBUSxDQUM5QyxHQUFJLEdBQVksRUFBTyxRQUFVLEVBQU8sT0FBTyxJQUMzQyxLQUNFLEVBQVUsWUFDWixJQUVFLEVBQVUsV0FBYSxFQUFPLFlBQ2hDLEdBQVcsSUFHZixFQUFTLEVBQU8sUUFLbEIsR0FIQSxFQUFLLGdCQUFrQixFQUduQixFQUNGLE1BQU8sR0FBRSxFQUFNLEdBQU8sRUFBTSxFQUc5QixJQUFJLEdBQVUsRUFBTSxRQUFRLEVBRTVCLEtBQUssRUFFSCxNQURBLEdBQU0sR0FBUSxLQUNQLEdBR1QsSUFBSSxHQUFZLEVBQU0sR0FBUSxFQUFRLFdBQVcsRUFJakQsR0FBSyxzQkFBd0IsU0FBVSxFQUFJLEdBRXpDLEdBQUksR0FBVSxFQUFRLFVBQVUsSUFFN0IsR0FBTyxJQUFZLElBQ2xCLEdBQU8sSUFBWSxLQUVyQixFQUFRLFVBQVUsR0FBUSxLQU01QixFQUFLLE9BQVMsRUFBSyxVQUFZLFNBQVcsU0FBVSxFQUFHLEdBQ3ZELEVBQVEsVUFBVSxHQUFRLEVBQU0sbUJBS2xDLEVBQUssS0FBSyxLQUFPLFNBQVUsR0FDckIsRUFBTSxLQUFLLFdBQ2IsRUFBTSxtQkFDTixFQUFNLG9CQUFzQixFQUFRLFVBQVUsS0FFOUMsRUFBUSxVQUFVLEdBQVEsRUFBTSxtQkFLcEMsSUFBSSxHQUFjLEVBQUssTUFBUSxhQUFhLEVBQU8sRUFBUSxPQUFTLEVBQVEsTUFBTSxHQUNsRixJQUFJLEVBQWEsQ0FFZixFQUFjLEVBQUssTUFBUSxVQUFXLEVBRXRDLElBQUksR0FBUSxFQUFLLE1BQVEsRUFBSyxTQUM5QixLQUFLLEdBQUksS0FBTyxHQUNULEVBQVUsT0FBVyxJQUFPLEdBQVUsUUFDekMsRUFBTSxHQUFPLEVBQVksU0FDbEIsR0FBWSxJQUt6QixNQUFPLEdBQUUsRUFBVyxFQUFNLEtBMkIxQixnQkFBa0IsV0FDbEIsc0JBQXdCLFNBQVUsR0FBSyxNQUFPLElBQU0sRUFBRSxXQUFXLEdBQUcsU0FBUyxLQUM3RSxRQUFVLE9BS1YsT0FBUyxTQUFVLEdBQU8sTUFBTyxvQkFBbUIsR0FDckQsUUFBUSxnQkFBaUIsdUJBQ3pCLFFBQVEsUUFBUyxNQUVoQixPQUFTLG1CQXFGVCxnQkFBa0IsT0E4Q2xCLE1BQVEsWUFBWSxNQUN0QixLQUFNLE1BK0pKLFFBQVUsTUFBTSxTQUFXLFNBQVUsR0FDdkMsTUFBOEMsa0JBQXZDLE9BQU8sVUFBVSxTQUFTLEtBQUssSUFNcEMsZUFBaUIsYUFDakIsUUFBVSxNQUNWLFVBQVksUUFDWixtQkFBcUIsaUJBQ3JCLGlCQUFtQixlQU9uQixZQUFjLEdBQUksU0FHcEIsVUFPQSwwR0FDQSxLQUFLLEtBQU0sSUErWWIsZ0JBQWUsTUFBUSxRQUN2QixlQUFlLFFBQVUsVUFDekIsZUFBZSxpQkFBbUIsbUJBQ2xDLGVBQWUsZUFBaUIsZ0JBS2hDLElBQUksb0JBQXFCLE9BQU8sT0FBTyxNQXlGbkMsU0FBVyxPQUFRLFFBQ25CLFlBQWMsT0FBUSxPQUV0QixLQUFPLGFBRVAsTUFDRixLQUFNLGFBQ04sT0FDRSxJQUNFLEtBQU0sUUFDTixVQUFVLEdBRVosS0FDRSxLQUFNLE9BQ04sUUFBUyxLQUVYLE1BQU8sUUFDUCxPQUFRLFFBQ1IsUUFBUyxRQUNULFlBQWEsT0FDYixpQkFBa0IsT0FDbEIsT0FDRSxLQUFNLFdBQ04sUUFBUyxVQUdiLE9BQVEsU0FBaUIsR0FDdkIsR0FBSSxHQUFTLEtBRVQsRUFBUyxLQUFLLFFBQ2QsRUFBVSxLQUFLLE9BQ2YsRUFBTSxFQUFPLFFBQ2YsS0FBSyxHQUNMLEVBQ0EsS0FBSyxRQUVILEVBQVcsRUFBSSxTQUNmLEVBQVEsRUFBSSxNQUNaLEVBQU8sRUFBSSxLQUVYLEtBQ0EsRUFBb0IsRUFBTyxRQUFRLGdCQUNuQyxFQUF5QixFQUFPLFFBQVEscUJBRXhDLEVBQ21CLE1BQXJCLEVBQTRCLHFCQUF1QixFQUNqRCxFQUN3QixNQUExQixFQUNJLDJCQUNBLEVBQ0YsRUFDa0IsTUFBcEIsS0FBSyxZQUFzQixFQUFzQixLQUFLLFlBQ3BELEVBQ3VCLE1BQXpCLEtBQUssaUJBQ0QsRUFDQSxLQUFLLGlCQUVQLEVBQWdCLEVBQU0sZUFDdEIsWUFBWSxLQUFNLGtCQUFrQixFQUFNLGdCQUFpQixLQUFNLEdBQ2pFLENBRUosR0FBUSxHQUFvQixZQUFZLEVBQVMsR0FDakQsRUFBUSxHQUFlLEtBQUssTUFDeEIsRUFBUSxHQUNSLGdCQUFnQixFQUFTLEVBRTdCLElBQUksR0FBVSxTQUFVLEdBQ2xCLFdBQVcsS0FDVCxFQUFPLFFBQ1QsRUFBTyxRQUFRLEVBQVUsTUFFekIsRUFBTyxLQUFLLEVBQVUsUUFLeEIsR0FBTyxNQUFPLFdBQ2QsT0FBTSxRQUFRLEtBQUssT0FDckIsS0FBSyxNQUFNLFFBQVEsU0FBVSxHQUMzQixFQUFHLEdBQUssSUFHVixFQUFHLEtBQUssT0FBUyxDQUduQixJQUFJLElBQVMsTUFBTyxHQUVoQixHQUNELEtBQUssYUFBYSxZQUNuQixLQUFLLGFBQWEsU0FDbEIsS0FBSyxhQUFhLFNBQ2hCLEtBQU0sRUFDTixNQUFPLEVBQ1AsU0FBVSxFQUNWLFNBQVUsRUFBUSxHQUNsQixjQUFlLEVBQVEsSUFHM0IsSUFBSSxFQUFZLENBQ2QsR0FBMEIsSUFBdEIsRUFBVyxPQUNiLE1BQU8sR0FBVyxFQUNiLElBQUksRUFBVyxPQUFTLElBQU0sRUFBVyxPQU85QyxNQUE2QixLQUF0QixFQUFXLE9BQWUsSUFBTSxFQUFFLFVBQVksR0FJekQsR0FBaUIsTUFBYixLQUFLLElBQ1AsRUFBSyxHQUFLLEVBQ1YsRUFBSyxPQUFVLEtBQU0sT0FDaEIsQ0FFTCxHQUFJLEdBQUksV0FBVyxLQUFLLE9BQU8sUUFDL0IsSUFBSSxFQUFHLENBRUwsRUFBRSxVQUFXLENBQ2IsSUFBSSxHQUFTLEVBQUUsS0FBTyxVQUFXLEVBQUUsS0FDbkMsR0FBTSxHQUFLLEVBQU0sTUFFakIsS0FBSyxHQUFJLEtBQVMsR0FBTSxHQUFJLENBQzFCLEdBQUksR0FBWSxFQUFNLEdBQUcsRUFDckIsS0FBUyxLQUNYLEVBQU0sR0FBRyxHQUFTLE1BQU0sUUFBUSxHQUFhLEdBQWEsSUFJOUQsSUFBSyxHQUFJLEtBQVcsR0FDZCxJQUFXLEdBQU0sR0FFbkIsRUFBTSxHQUFHLEdBQVMsS0FBSyxFQUFHLElBRTFCLEVBQU0sR0FBRyxHQUFXLEdBSVYsRUFBRSxLQUFLLE1BQVEsVUFBVyxFQUFFLEtBQUssUUFDeEMsS0FBTyxNQUdkLEdBQUssR0FBSyxFQUlkLE1BQU8sR0FBRSxLQUFLLElBQUssRUFBTSxLQUFLLE9BQU8sV0FzQ3JDLEtBb0RBLFVBQThCLG1CQUFYLFFBOFluQixLQUNGLFdBQWEsT0FBTyxhQUFlLE9BQU8sWUFBWSxJQUNsRCxPQUFPLFlBQ1AsS0FNRixLQUFPLGNBWVAsY0FBZ0IsT0FBTyxPQUFPLE1BcUg5Qix1QkFBeUIsT0FnQ3pCLGtCQUNGLFdBQ0EsV0FDRSxHQUFJLEdBQUssT0FBTyxVQUFVLFNBRTFCLFNBQ2lDLElBQTlCLEVBQUcsUUFBUSxnQkFBdUQsSUFBL0IsRUFBRyxRQUFRLGlCQUNkLElBQWpDLEVBQUcsUUFBUSxtQkFDZSxJQUExQixFQUFHLFFBQVEsWUFDc0IsSUFBakMsRUFBRyxRQUFRLG9CQUtOLE9BQU8sU0FBVyxhQUFlLFFBQU8sWUErSC9DLFVBQ2dCLGtCQUFYLFNBQ3VCLGdCQUF2QixRQUFPLFlBc0JaLHFCQUFxQyxTQUFVLEdBQ2pELFFBQVMsR0FBc0IsR0FDN0IsRUFBTSxLQUFLLE1BQ1gsS0FBSyxLQUFPLEtBQUssTUFBUSx1QkFFekIsS0FBSyxRQUFVLG9DQUF3QyxFQUEyQixTQUFJLG9CQUV0RixPQUFPLGVBQWUsS0FBTSxTQUMxQixPQUFPLEdBQUksSUFBUSxNQUNuQixVQUFVLEVBQ1YsY0FBYyxJQVdsQixNQUpLLEtBQVEsRUFBcUIsVUFBWSxHQUM5QyxFQUFxQixVQUFZLE9BQU8sT0FBUSxHQUFTLEVBQU0sV0FDL0QsRUFBcUIsVUFBVSxZQUFjLEVBRXRDLEdBQ1AsTUFHRixzQkFBcUIsTUFBUSxzQkFJN0IsSUFBSSxTQUFVLFNBQWtCLEVBQVEsR0FDdEMsS0FBSyxPQUFTLEVBQ2QsS0FBSyxLQUFPLGNBQWMsR0FFMUIsS0FBSyxRQUFVLE1BQ2YsS0FBSyxRQUFVLEtBQ2YsS0FBSyxPQUFRLEVBQ2IsS0FBSyxZQUNMLEtBQUssaUJBQ0wsS0FBSyxZQUdQLFNBQVEsVUFBVSxPQUFTLFNBQWlCLEdBQzFDLEtBQUssR0FBSyxHQUdaLFFBQVEsVUFBVSxRQUFVLFNBQWtCLEVBQUksR0FDNUMsS0FBSyxNQUNQLEtBRUEsS0FBSyxTQUFTLEtBQUssR0FDZixHQUNGLEtBQUssY0FBYyxLQUFLLEtBSzlCLFFBQVEsVUFBVSxRQUFVLFNBQWtCLEdBQzVDLEtBQUssU0FBUyxLQUFLLElBR3JCLFFBQVEsVUFBVSxhQUFlLFNBQy9CLEVBQ0EsRUFDQSxHQUVFLEdBQUksR0FBUyxLQUVYLEVBQVEsS0FBSyxPQUFPLE1BQU0sRUFBVSxLQUFLLFFBQzdDLE1BQUssa0JBQ0gsRUFDQSxXQUNFLEVBQU8sWUFBWSxHQUNuQixHQUFjLEVBQVcsR0FDekIsRUFBTyxZQUdGLEVBQU8sUUFDVixFQUFPLE9BQVEsRUFDZixFQUFPLFNBQVMsUUFBUSxTQUFVLEdBQ2hDLEVBQUcsT0FJVCxTQUFVLEdBQ0osR0FDRixFQUFRLEdBRU4sSUFBUSxFQUFPLFFBQ2pCLEVBQU8sT0FBUSxFQUNmLEVBQU8sY0FBYyxRQUFRLFNBQVUsR0FDckMsRUFBRyxTQU9iLFFBQVEsVUFBVSxrQkFBb0IsU0FBNEIsRUFBTyxFQUFZLEdBQ2pGLEdBQUksR0FBUyxLQUVYLEVBQVUsS0FBSyxRQUNmLEVBQVEsU0FBVSxJQUtmLGdCQUFnQixxQkFBc0IsSUFBUSxRQUFRLEtBQ3JELEVBQU8sU0FBUyxPQUNsQixFQUFPLFNBQVMsUUFBUSxTQUFVLEdBQ2hDLEVBQUcsTUFHTCxNQUFLLEVBQU8sMkNBQ1osUUFBUSxNQUFNLEtBR2xCLEdBQVcsRUFBUSxHQUVyQixJQUNFLFlBQVksRUFBTyxJQUVuQixFQUFNLFFBQVEsU0FBVyxFQUFRLFFBQVEsT0FHekMsTUFEQSxNQUFLLFlBQ0UsRUFBTSxHQUFJLHNCQUFxQixHQUd4QyxJQUFJLEdBQU0sYUFDUixLQUFLLFFBQVEsUUFDYixFQUFNLFNBRUYsRUFBVSxFQUFJLFFBQ2QsRUFBYyxFQUFJLFlBQ2xCLEVBQVksRUFBSSxVQUVsQixLQUFXLE9BRWIsbUJBQW1CLEdBRW5CLEtBQUssT0FBTyxZQUVaLG1CQUFtQixHQUVuQixFQUFVLElBQUksU0FBVSxHQUFLLE1BQU8sR0FBRSxjQUV0Qyx1QkFBdUIsR0FHekIsTUFBSyxRQUFVLENBQ2YsSUFBSSxHQUFXLFNBQVUsRUFBTSxHQUM3QixHQUFJLEVBQU8sVUFBWSxFQUNyQixNQUFPLElBRVQsS0FDRSxFQUFLLEVBQU8sRUFBUyxTQUFVLElBQ2xCLElBQVAsR0FBZ0IsUUFBUSxJQUUxQixFQUFPLFdBQVUsR0FDakIsRUFBTSxJQUVRLGdCQUFQLElBQ1EsZ0JBQVAsS0FDYyxnQkFBWixHQUFHLE1BQXdDLGdCQUFaLEdBQUcsT0FHNUMsSUFDa0IsZ0JBQVAsSUFBbUIsRUFBRyxRQUMvQixFQUFPLFFBQVEsR0FFZixFQUFPLEtBQUssSUFJZCxFQUFLLEtBR1QsTUFBTyxHQUNQLEVBQU0sSUFJVixVQUFTLEVBQU8sRUFBVSxXQUN4QixHQUFJLEtBTUosVUFGa0IsbUJBQW1CLEVBQVcsRUFIbEMsV0FBYyxNQUFPLEdBQU8sVUFBWSxJQUk5QixPQUFPLEVBQU8sT0FBTyxjQUM3QixFQUFVLFdBQ3hCLEdBQUksRUFBTyxVQUFZLEVBQ3JCLE1BQU8sSUFFVCxHQUFPLFFBQVUsS0FDakIsRUFBVyxHQUNQLEVBQU8sT0FBTyxLQUNoQixFQUFPLE9BQU8sSUFBSSxVQUFVLFdBQzFCLEVBQWEsUUFBUSxTQUFVLEdBQzdCLGFBUVosUUFBUSxVQUFVLFlBQWMsU0FBc0IsR0FDcEQsR0FBSSxHQUFPLEtBQUssT0FDaEIsTUFBSyxRQUFVLEVBQ2YsS0FBSyxJQUFNLEtBQUssR0FBRyxHQUNuQixLQUFLLE9BQU8sV0FBVyxRQUFRLFNBQVUsR0FDdkMsR0FBUSxFQUFLLEVBQU8sS0FnSnhCLElBQUksY0FBNkIsU0FBVSxHQUN6QyxRQUFTLEdBQWMsRUFBUSxHQUM3QixHQUFJLEdBQVMsSUFFYixHQUFRLEtBQUssS0FBTSxFQUFRLEVBRTNCLElBQUksR0FBZSxFQUFPLFFBQVEsZUFDOUIsRUFBaUIsbUJBQXFCLENBRXRDLElBQ0YsYUFHRixJQUFJLEdBQWUsWUFBWSxLQUFLLEtBQ3BDLFFBQU8saUJBQWlCLFdBQVksU0FBVSxHQUM1QyxHQUFJLEdBQVUsRUFBTyxRQUlqQixFQUFXLFlBQVksRUFBTyxLQUM5QixHQUFPLFVBQVksT0FBUyxJQUFhLEdBSTdDLEVBQU8sYUFBYSxFQUFVLFNBQVUsR0FDbEMsR0FDRixhQUFhLEVBQVEsRUFBTyxHQUFTLE9BaUQ3QyxNQTNDSyxLQUFVLEVBQWEsVUFBWSxHQUN4QyxFQUFhLFVBQVksT0FBTyxPQUFRLEdBQVcsRUFBUSxXQUMzRCxFQUFhLFVBQVUsWUFBYyxFQUVyQyxFQUFhLFVBQVUsR0FBSyxTQUFhLEdBQ3ZDLE9BQU8sUUFBUSxHQUFHLElBR3BCLEVBQWEsVUFBVSxLQUFPLFNBQWUsRUFBVSxFQUFZLEdBQ2pFLEdBQUksR0FBUyxLQUVULEVBQU0sS0FDTixFQUFZLEVBQUksT0FDcEIsTUFBSyxhQUFhLEVBQVUsU0FBVSxHQUNwQyxVQUFVLFVBQVUsRUFBTyxLQUFPLEVBQU0sV0FDeEMsYUFBYSxFQUFPLE9BQVEsRUFBTyxHQUFXLEdBQzlDLEdBQWMsRUFBVyxJQUN4QixJQUdMLEVBQWEsVUFBVSxRQUFVLFNBQWtCLEVBQVUsRUFBWSxHQUN2RSxHQUFJLEdBQVMsS0FFVCxFQUFNLEtBQ04sRUFBWSxFQUFJLE9BQ3BCLE1BQUssYUFBYSxFQUFVLFNBQVUsR0FDcEMsYUFBYSxVQUFVLEVBQU8sS0FBTyxFQUFNLFdBQzNDLGFBQWEsRUFBTyxPQUFRLEVBQU8sR0FBVyxHQUM5QyxHQUFjLEVBQVcsSUFDeEIsSUFHTCxFQUFhLFVBQVUsVUFBWSxTQUFvQixHQUNyRCxHQUFJLFlBQVksS0FBSyxRQUFVLEtBQUssUUFBUSxTQUFVLENBQ3BELEdBQUksR0FBVSxVQUFVLEtBQUssS0FBTyxLQUFLLFFBQVEsU0FDakQsR0FBTyxVQUFVLEdBQVcsYUFBYSxLQUk3QyxFQUFhLFVBQVUsbUJBQXFCLFdBQzFDLE1BQU8sYUFBWSxLQUFLLE9BR25CLEdBQ1AsU0FZRSxZQUE0QixTQUFVLEdBQ3hDLFFBQVMsR0FBYSxFQUFRLEVBQU0sR0FDbEMsRUFBUSxLQUFLLEtBQU0sRUFBUSxHQUV2QixHQUFZLGNBQWMsS0FBSyxPQUduQyxjQXNGRixNQW5GSyxLQUFVLEVBQVksVUFBWSxHQUN2QyxFQUFZLFVBQVksT0FBTyxPQUFRLEdBQVcsRUFBUSxXQUMxRCxFQUFZLFVBQVUsWUFBYyxFQUlwQyxFQUFZLFVBQVUsZUFBaUIsV0FDckMsR0FBSSxHQUFTLEtBRVQsRUFBUyxLQUFLLE9BQ2QsRUFBZSxFQUFPLFFBQVEsZUFDOUIsRUFBaUIsbUJBQXFCLENBRXRDLElBQ0YsY0FHRixPQUFPLGlCQUNMLGtCQUFvQixXQUFhLGFBQ2pDLFdBQ0UsR0FBSSxHQUFVLEVBQU8sT0FDaEIsZ0JBR0wsRUFBTyxhQUFhLFVBQVcsU0FBVSxHQUNuQyxHQUNGLGFBQWEsRUFBTyxPQUFRLEVBQU8sR0FBUyxHQUV6QyxtQkFDSCxZQUFZLEVBQU0sZUFPNUIsRUFBWSxVQUFVLEtBQU8sU0FBZSxFQUFVLEVBQVksR0FDaEUsR0FBSSxHQUFTLEtBRVQsRUFBTSxLQUNOLEVBQVksRUFBSSxPQUNwQixNQUFLLGFBQ0gsRUFDQSxTQUFVLEdBQ1IsU0FBUyxFQUFNLFVBQ2YsYUFBYSxFQUFPLE9BQVEsRUFBTyxHQUFXLEdBQzlDLEdBQWMsRUFBVyxJQUUzQixJQUlKLEVBQVksVUFBVSxRQUFVLFNBQWtCLEVBQVUsRUFBWSxHQUN0RSxHQUFJLEdBQVMsS0FFVCxFQUFNLEtBQ04sRUFBWSxFQUFJLE9BQ3BCLE1BQUssYUFDSCxFQUNBLFNBQVUsR0FDUixZQUFZLEVBQU0sVUFDbEIsYUFBYSxFQUFPLE9BQVEsRUFBTyxHQUFXLEdBQzlDLEdBQWMsRUFBVyxJQUUzQixJQUlKLEVBQVksVUFBVSxHQUFLLFNBQWEsR0FDdEMsT0FBTyxRQUFRLEdBQUcsSUFHcEIsRUFBWSxVQUFVLFVBQVksU0FBb0IsR0FDcEQsR0FBSSxHQUFVLEtBQUssUUFBUSxRQUN2QixhQUFjLElBQ2hCLEVBQU8sU0FBUyxHQUFXLFlBQVksS0FJM0MsRUFBWSxVQUFVLG1CQUFxQixXQUN6QyxNQUFPLFlBR0YsR0FDUCxTQXVFRSxnQkFBZ0MsU0FBVSxHQUM1QyxRQUFTLEdBQWlCLEVBQVEsR0FDaEMsRUFBUSxLQUFLLEtBQU0sRUFBUSxHQUMzQixLQUFLLFNBQ0wsS0FBSyxPQUFTLEVBaUVoQixNQTlESyxLQUFVLEVBQWdCLFVBQVksR0FDM0MsRUFBZ0IsVUFBWSxPQUFPLE9BQVEsR0FBVyxFQUFRLFdBQzlELEVBQWdCLFVBQVUsWUFBYyxFQUV4QyxFQUFnQixVQUFVLEtBQU8sU0FBZSxFQUFVLEVBQVksR0FDcEUsR0FBSSxHQUFTLElBRWIsTUFBSyxhQUNILEVBQ0EsU0FBVSxHQUNSLEVBQU8sTUFBUSxFQUFPLE1BQU0sTUFBTSxFQUFHLEVBQU8sTUFBUSxHQUFHLE9BQU8sR0FDOUQsRUFBTyxRQUNQLEdBQWMsRUFBVyxJQUUzQixJQUlKLEVBQWdCLFVBQVUsUUFBVSxTQUFrQixFQUFVLEVBQVksR0FDMUUsR0FBSSxHQUFTLElBRWIsTUFBSyxhQUNILEVBQ0EsU0FBVSxHQUNSLEVBQU8sTUFBUSxFQUFPLE1BQU0sTUFBTSxFQUFHLEVBQU8sT0FBTyxPQUFPLEdBQzFELEdBQWMsRUFBVyxJQUUzQixJQUlKLEVBQWdCLFVBQVUsR0FBSyxTQUFhLEdBQzFDLEdBQUksR0FBUyxLQUVULEVBQWMsS0FBSyxNQUFRLENBQy9CLE1BQUksRUFBYyxHQUFLLEdBQWUsS0FBSyxNQUFNLFFBQWpELENBR0EsR0FBSSxHQUFRLEtBQUssTUFBTSxFQUN2QixNQUFLLGtCQUNILEVBQ0EsV0FDRSxFQUFPLE1BQVEsRUFDZixFQUFPLFlBQVksSUFFckIsU0FBVSxHQUNKLGdCQUFnQixxQkFBc0IsS0FDeEMsRUFBTyxNQUFRLE9BTXZCLEVBQWdCLFVBQVUsbUJBQXFCLFdBQzdDLEdBQUksR0FBVSxLQUFLLE1BQU0sS0FBSyxNQUFNLE9BQVMsRUFDN0MsT0FBTyxHQUFVLEVBQVEsU0FBVyxLQUd0QyxFQUFnQixVQUFVLFVBQVksYUFJL0IsR0FDUCxTQU1FLFVBQVksU0FBb0IsT0FDakIsS0FBWixJQUFxQixNQUUxQixLQUFLLElBQU0sS0FDWCxLQUFLLFFBQ0wsS0FBSyxRQUFVLEVBQ2YsS0FBSyxlQUNMLEtBQUssZ0JBQ0wsS0FBSyxjQUNMLEtBQUssUUFBVSxjQUFjLEVBQVEsV0FBYyxLQUVuRCxJQUFJLEdBQU8sRUFBUSxNQUFRLE1BVTNCLFFBVEEsS0FBSyxTQUFvQixZQUFULElBQXVCLG9CQUEwQyxJQUFyQixFQUFRLFNBQ2hFLEtBQUssV0FDUCxFQUFPLFFBRUosWUFDSCxFQUFPLFlBRVQsS0FBSyxLQUFPLEVBRUosR0FDTixJQUFLLFVBQ0gsS0FBSyxRQUFVLEdBQUksY0FBYSxLQUFNLEVBQVEsS0FDOUMsTUFDRixLQUFLLE9BQ0gsS0FBSyxRQUFVLEdBQUksYUFBWSxLQUFNLEVBQVEsS0FBTSxLQUFLLFNBQ3hELE1BQ0YsS0FBSyxXQUNILEtBQUssUUFBVSxHQUFJLGlCQUFnQixLQUFNLEVBQVEsUUFTbkQsb0JBQXVCLGNBQWdCLGNBQWMsR0FFekQsV0FBVSxVQUFVLE1BQVEsU0FDMUIsRUFDQSxFQUNBLEdBRUEsTUFBTyxNQUFLLFFBQVEsTUFBTSxFQUFLLEVBQVMsSUFHMUMsbUJBQW1CLGFBQWEsSUFBTSxXQUNwQyxNQUFPLE1BQUssU0FBVyxLQUFLLFFBQVEsU0FHdEMsVUFBVSxVQUFVLEtBQU8sU0FBZSxHQUN0QyxHQUFJLEdBQVMsSUF1QmYsSUFmQSxLQUFLLEtBQUssS0FBSyxHQUlmLEVBQUksTUFBTSxpQkFBa0IsV0FFMUIsR0FBSSxHQUFRLEVBQU8sS0FBSyxRQUFRLEVBQzVCLElBQVMsR0FBSyxFQUFPLEtBQUssT0FBTyxFQUFPLEdBR3hDLEVBQU8sTUFBUSxJQUFPLEVBQU8sSUFBTSxFQUFPLEtBQUssSUFBTSxTQUt2RCxLQUFLLElBQVQsQ0FJQSxLQUFLLElBQU0sQ0FFWCxJQUFJLEdBQVUsS0FBSyxPQUVuQixJQUFJLFlBQW1CLGNBQ3JCLEVBQVEsYUFBYSxFQUFRLDBCQUN4QixJQUFJLFlBQW1CLGFBQWEsQ0FDekMsR0FBSSxHQUFvQixXQUN0QixFQUFRLGlCQUVWLEdBQVEsYUFDTixFQUFRLHFCQUNSLEVBQ0EsR0FJSixFQUFRLE9BQU8sU0FBVSxHQUN2QixFQUFPLEtBQUssUUFBUSxTQUFVLEdBQzVCLEVBQUksT0FBUyxRQUtuQixVQUFVLFVBQVUsV0FBYSxTQUFxQixHQUNwRCxNQUFPLGNBQWEsS0FBSyxZQUFhLElBR3hDLFVBQVUsVUFBVSxjQUFnQixTQUF3QixHQUMxRCxNQUFPLGNBQWEsS0FBSyxhQUFjLElBR3pDLFVBQVUsVUFBVSxVQUFZLFNBQW9CLEdBQ2xELE1BQU8sY0FBYSxLQUFLLFdBQVksSUFHdkMsVUFBVSxVQUFVLFFBQVUsU0FBa0IsRUFBSSxHQUNsRCxLQUFLLFFBQVEsUUFBUSxFQUFJLElBRzNCLFVBQVUsVUFBVSxRQUFVLFNBQWtCLEdBQzlDLEtBQUssUUFBUSxRQUFRLElBR3ZCLFVBQVUsVUFBVSxLQUFPLFNBQWUsRUFBVSxFQUFZLEdBQzVELEdBQUksR0FBUyxJQUdmLEtBQUssSUFBZSxHQUE4QixtQkFBWixTQUNwQyxNQUFPLElBQUksU0FBUSxTQUFVLEVBQVMsR0FDcEMsRUFBTyxRQUFRLEtBQUssRUFBVSxFQUFTLElBR3pDLE1BQUssUUFBUSxLQUFLLEVBQVUsRUFBWSxJQUk1QyxVQUFVLFVBQVUsUUFBVSxTQUFrQixFQUFVLEVBQVksR0FDbEUsR0FBSSxHQUFTLElBR2YsS0FBSyxJQUFlLEdBQThCLG1CQUFaLFNBQ3BDLE1BQU8sSUFBSSxTQUFRLFNBQVUsRUFBUyxHQUNwQyxFQUFPLFFBQVEsUUFBUSxFQUFVLEVBQVMsSUFHNUMsTUFBSyxRQUFRLFFBQVEsRUFBVSxFQUFZLElBSS9DLFVBQVUsVUFBVSxHQUFLLFNBQWEsR0FDcEMsS0FBSyxRQUFRLEdBQUcsSUFHbEIsVUFBVSxVQUFVLEtBQU8sV0FDekIsS0FBSyxJQUFJLElBR1gsVUFBVSxVQUFVLFFBQVUsV0FDNUIsS0FBSyxHQUFHLElBR1YsVUFBVSxVQUFVLHFCQUF1QixTQUErQixHQUN4RSxHQUFJLEdBQVEsRUFDUixFQUFHLFFBQ0QsRUFDQSxLQUFLLFFBQVEsR0FBSSxNQUNuQixLQUFLLFlBQ1QsT0FBSyxNQUdLLE9BQU8sU0FBVSxFQUFNLFFBQVEsSUFBSSxTQUFVLEdBQ3JELE1BQU8sUUFBTyxLQUFLLEVBQUUsWUFBWSxJQUFJLFNBQVUsR0FDN0MsTUFBTyxHQUFFLFdBQVcsWUFLMUIsVUFBVSxVQUFVLFFBQVUsU0FDNUIsRUFDQSxFQUNBLEdBRUEsRUFBVSxHQUFXLEtBQUssUUFBUSxPQUNsQyxJQUFJLEdBQVcsa0JBQ2IsRUFDQSxFQUNBLEVBQ0EsTUFFRSxFQUFRLEtBQUssTUFBTSxFQUFVLEdBQzdCLEVBQVcsRUFBTSxnQkFBa0IsRUFBTSxRQUc3QyxRQUNFLFNBQVUsRUFDVixNQUFPLEVBQ1AsS0FKUyxXQURBLEtBQUssUUFBUSxLQUNJLEVBQVUsS0FBSyxNQU16QyxhQUFjLEVBQ2QsU0FBVSxJQUlkLFVBQVUsVUFBVSxVQUFZLFNBQW9CLEdBQ2xELEtBQUssUUFBUSxVQUFVLEdBQ25CLEtBQUssUUFBUSxVQUFZLE9BQzNCLEtBQUssUUFBUSxhQUFhLEtBQUssUUFBUSx1QkFJM0MsT0FBTyxpQkFBa0IsVUFBVSxVQUFXLG9CQWU5QyxVQUFVLFFBQVUsUUFDcEIsVUFBVSxRQUFVLFFBRWhCLFdBQWEsT0FBTyxLQUN0QixPQUFPLElBQUksSUFBSSxXQUdqQixPQUFPLFFBQVU7OztBQ24wRmpCLFlBU0EsU0FBUyx3QkFBdUIsR0FBTyxNQUFPLElBQU8sRUFBSSxXQUFhLEdBQVEsUUFBVyxHQVB6RixPQUFPLGVBQWUsUUFBUyxjQUM3QixPQUFPLElBRVQsUUFBaUIsWUFBSSxFQUVyQixJQUFJLE1BQU8sdUJBQXVCLFFBQVEsUUFJdEMsSUFBTSxHQUFJLE1BQWMsUUFDeEIsU0FBVyxHQUNmLFNBQWlCLFFBQUk7OztBQ2JyQixZQUVBLFFBQU8sUUFBVSxXQUNmLEdBQUksR0FBUSxLQUVSLEVBQVUsS0FBSyxjQUVuQixPQUFLLElBQVksS0FBSyxvQkFPbEIsS0FBSyxvQkFDQSxLQUFLLFFBQVEsT0FBTyxTQUFVLEdBQ25DLE1BQU8sR0FBTSxtQkFBbUIsU0FBUyxLQUl6QyxLQUFLLEtBQUssSUFBWSxLQUFLLFFBRXhCLEtBQUssUUFBUSxPQUFPLFNBQVUsR0FDbkMsSUFBSyxFQUFNLHdCQUF3QixHQUNqQyxPQUFPLENBR1QsS0FBSyxFQUFRLEdBQVMsT0FBTyxDQUM3QixJQUFJLEdBQVEsRUFBUSxHQUNoQixFQUFXLEVBQU0sR0FDakIsSUFBWSxFQUFNLElBQU0sRUFBTSxhQUFlLEVBQU0sT0FBUyxFQUFNLElBQU0sRUFBTSxZQUFjLEVBQU0sR0FDdEcsT0FBbUIsT0FBWixHQUFxQixFQUFVLElBdkIvQixLQUFLLFFBQVEsT0FBTyxTQUFVLEdBQ25DLE1BQU8sR0FBTSx3QkFBd0I7OztBQ1QzQyxZQUVBLFFBQU8sUUFBVSxXQUNmLE1BQU8sTUFBSyxZQUFjLEtBQUssV0FBVyxPQUFTLEVBQUksS0FBSyxXQUFXOzs7QUNIekUsWUFFQSxRQUFPLFFBQVUsV0FDZixNQUFPLE1BQUssVUFBVSxLQUFLOzs7QUNIN0IsWUFFQSxJQUFJLFdBQVksUUFBUSxtQkFBNEIsT0FFcEQsUUFBTyxRQUFVLFdBQ2YsT0FBNkIsSUFBekIsS0FBSyxLQUFLLFdBQ0wsS0FBSyxLQUFLLGFBR1UsSUFBekIsS0FBSyxLQUFLLGNBSVAsVUFBVSxLQUFLLEtBQUssV0FBWSxLQUFLLEtBQUs7OztBQ2JuRCxZQUVBLFFBQU8sUUFBVSxXQUNmLE1BQU8sTUFBSyxLQUFLLFlBQWMsS0FBSyxLQUFLLFdBQVcsT0FBUyxLQUFLLEtBQUssV0FBYSxLQUFLOzs7QUNIM0YsWUFFQSxJQUFJLE9BQVEsUUFBUSxRQUVwQixRQUFPLFNBQ0wsSUFBSyxXQUNILEdBQUksR0FBTyxNQUFNLEtBQUssV0FDbEIsRUFBUyxLQUFLLFFBQVEsTUFDMUIsR0FBTyxLQUFLLE9BQU8sR0FFZixHQUVFLEtBQUssT0FBTSxLQUFLLEtBQU8sS0FBSyxNQUNoQyxFQUFPLEtBQUssS0FBSyxpQkFBaUIsS0FBSyxLQUFNLEVBQU0sSUFDMUMsS0FBSyxLQUFLLFVBQ25CLEVBQU8sS0FBSyxLQUFLLGlCQUFpQixLQUFLLEtBQU0sRUFBTSxLQUFLLEtBQUssVUFHM0QsS0FBSyxLQUNILEtBQUssT0FBUyxFQUFLLFFBQVEsS0FBSyxPQUFPLFlBQWEsRUFBSyxRQUU3RCxLQUFLLE1BQVEsRUFBSyxNQUdwQixJQUFJLElBQVUsS0FBSyxLQUFPLEdBQUssS0FBSyxLQUdwQyxPQUZBLE1BQUssZ0JBQWtCLEtBQUssTUFBTSxLQUFLLFVBQVUsSUFDakQsRUFBTyxFQUFLLE9BQU8sRUFBUSxLQUFLLE9BQ3pCLEtBQUssYUFBYSxJQUUzQixJQUFLLFNBQWEsR0FDaEIsUUFBUSxJQUFJOzs7QUM5QmhCLFlBRUEsU0FBUyxTQUFRLEdBQXdULE9BQXRPLFFBQXJELGtCQUFYLFNBQW9ELGdCQUFwQixRQUFPLFNBQW1DLFNBQWlCLEdBQU8sYUFBYyxJQUEyQixTQUFpQixHQUFPLE1BQU8sSUFBeUIsa0JBQVgsU0FBeUIsRUFBSSxjQUFnQixRQUFVLElBQVEsT0FBTyxVQUFZLGVBQWtCLEtBQXlCLEdBRXhWLE9BQU8sUUFBVSxXQUNmLEdBQTRCLFdBQXhCLFFBQVEsS0FBSyxRQUF1QixLQUFLLEtBQUssaUJBQ2hELE1BQU8sTUFBSyxLQUdkLElBQUksS0FFSixLQUFLLEdBQUksS0FBTyxNQUFLLE1BQ0ssS0FBcEIsS0FBSyxNQUFNLEtBQ2IsRUFBTyxHQUFPLEtBQUssTUFBTSxHQUk3QixPQUFPOzs7QUNqQlQsWUFFQSxRQUFPLFFBQVUsV0FDZixNQUFPLE1BQUssS0FBSyxVQUFZLEtBQUssYUFBYTs7O0FDSGpELFlBRUEsU0FBUyxTQUFRLEdBQXdULE9BQXRPLFFBQXJELGtCQUFYLFNBQW9ELGdCQUFwQixRQUFPLFNBQW1DLFNBQWlCLEdBQU8sYUFBYyxJQUEyQixTQUFpQixHQUFPLE1BQU8sSUFBeUIsa0JBQVgsU0FBeUIsRUFBSSxjQUFnQixRQUFVLElBQVEsT0FBTyxVQUFZLGVBQWtCLEtBQXlCLEdBRXhWLE9BQU8sUUFBVSxXQUNmLE9BQVEsS0FBSyxLQUFLLGlCQUFtRCxpQkFBekIsTUFBSyxLQUFLLFlBQTRCLEtBQUssS0FBSyxZQUFnRCxXQUFsQyxRQUFRLEtBQUssS0FBSyxhQUE0QixLQUFLLEtBQUssV0FBVzs7O0FDTC9LLFlBRUEsUUFBTyxRQUFVLFdBQ2YsR0FBSSxHQUFVLE9BQU8sS0FBSyxLQUFLLEtBQUssYUFDaEMsSUFPSixPQU5BLEdBQVEsUUFBUSxTQUFVLEdBQ3hCLEVBQUksTUFDSixLQUFLLEtBQUssWUFBWSxHQUFRLFFBQVEsU0FBVSxHQUM5QyxFQUFJLEdBQVEsRUFBSyxJQUFNLEVBQUssUUFFOUIsS0FBSyxPQUNBOzs7QUNYVCxZQUVBLFFBQU8sUUFBVSxXQUNmLEdBQUksR0FBVyxRQUFRLHVCQUV2QixPQUFPLE1BQUssWUFBWSxFQUFVLEtBQUssY0FBZSxLQUFLOzs7QUNMN0QsWUFFQSxRQUFPLFFBQVUsV0FDZixNQUFPLE1BQUssS0FBSyxlQUFpQixLQUFLLFVBQVUsS0FBSyxPQUFTLEtBQUs7OztBQ0h0RSxZQUVBLFFBQU8sUUFBVSxXQUNmLE1BQTRCLG1CQUFqQixpQkFDa0IsVUFBdEIsS0FBSyxLQUFLLFFBQXNCLGFBQWU7OztBQ0p4RCxZQUVBLFFBQU8sUUFBVSxXQUNmLE1BQU8sTUFBSzs7O0FDSGQsWUFFQSxRQUFPLFFBQVUsV0FDZixNQUFPLFFBQU8sS0FBSyxLQUFLLEtBQUs7OztBQ0gvQixZQUVBLFFBQU8sUUFBVSxXQUNmLE1BQU8sTUFBSyxLQUFLLEtBQUssTUFBUSxLQUFLOzs7QUNIckMsWUFFQSxRQUFPLFFBQVUsV0FDZixPQUNFLHlCQUF5QixFQUN6QixtQkFBbUIsRUFDbkIsZUFDQSxlQUNBLG1CQUNFLFFBQ0UsWUFBYSxVQUdqQiw4QkFDQSxZQUFhLEVBQ2IsUUFBUyxHQUNULGVBQWdCLEdBQUksR0FBSSxHQUFJLEtBQzVCLFNBQVMsRUFDVCxnQkFBZ0IsRUFDaEIsaUJBQWlCLEVBQ2pCLGtCQUFrQixFQUNsQixVQUNBLFVBQVUsRUFDVixZQUFZLEVBQ1osYUFDQSxlQUNBLG9CQUFvQixFQUNwQixpQkFDQSxhQUNBLFNBQVUsSUFDVixXQUFZLGFBQ1osdUJBQ0EsZ0JBQWdCLEVBQ2hCLE1BQU0sRUFDTixrQkFDQSxpQkFBaUIsRUFDakIsT0FDRSxNQUFPLHVFQUNQLE1BQU8sUUFDUCxLQUFNLE9BQ04sT0FBUSxVQUNSLGtCQUFtQixlQUNuQixNQUFPLFdBQ1AsS0FBTSxRQUNOLFVBQVcsc0JBQ1gsU0FBVSxxQkFDVixRQUFTLGFBQ1QsY0FBZSxrQkFDZixRQUFTLFdBRVgsVUFDRSxHQUFJLGlCQUNKLEtBQU0sWUFDTixHQUFJLHVCQUNKLEtBQU0sMEJBRVIsaUJBQWtCLFNBQTBCLEVBQU0sR0FDaEQsTUFBTyxHQUFLLEtBQUssS0FBSyxVQUFVLEtBRWxDLG1CQUNBLGlCQUNBLGdCQUNBLG9CQUFvQixFQUNwQixvQkFBb0IsRUFDcEIsZ0JBQWdCLEVBQ2hCLGtCQUFrQixFQUNsQixTQUFTLEVBQ1Qsb0JBQ0EsZ0JBQWdCLEVBQ2hCLFlBQ0Esb0JBQ0EsWUFDRSxVQUFVLEVBQ1YsTUFBTyxHQUNQLE1BQU0sRUFDTixNQUFPLFNBQ1AsSUFBSyxTQUVQLFVBQVUsRUFDVixzQkFBc0IsRUFDdEIscUJBQXFCLEVBQ3JCLFVBQVcsS0FDWCxpQkFBaUIsRUFDakIsZUFBZ0IsU0FBd0IsR0FDdEMsTUFBTyxJQUVULGdCQUFpQixTQUF5QixHQUN4QyxHQUFJLEdBQU8sS0FBSyxnQkFBZ0IsRUFDaEMsUUFDRSxLQUFNLEVBQUssS0FDWCxNQUFPLEVBQUssUUFHaEIsYUFDRSxNQUFPLFFBQ1AsTUFBTyxRQUNQLFFBQVMsVUFDVCxVQUFXLFlBQ1gsS0FBTSxPQUNOLFNBQVUsWUFFWixrQkFBa0IsRUFDbEIsZUFBZSxFQUNmLFdBQVcsRUFDWCxRQUFTLFFBQ1Qsa0JBQ0EsU0FBUyxFQUNULFNBQVMsRUFDVCxlQUNBLGdCQUFnQixFQUNoQixlQUFlLEVBQ2Ysa0JBQWtCLEVBQ2xCOzs7QUNoSEosWUFFQSxRQUFPLFFBQVUsU0FBVSxFQUFNLEVBQWUsR0FDOUMsR0FBSSxFQUNKLE9BQU8sR0FBSyxPQUFPLFNBQVUsR0FNM0IsTUFMQSxJQUFVLEVBQ1YsRUFBYyxRQUFRLFNBQVUsR0FDOUIsR0FBSSxHQUFRLEVBQWMsRUFBTyxLQUM3QixLQUFVLEVBQU8sU0FBUyxFQUFLLEtBQVEsR0FBVSxLQUVoRDs7O0FDVlgsWUFFQSxJQUFJLGFBQWMsUUFBUSxvQ0FFMUIsUUFBTyxRQUFVLFNBQVUsRUFBTyxHQUNoQyxNQUFLLGFBQVksR0FDVixFQUFNLE9BQU8sR0FEWTs7O0FDTGxDLFlBV0EsU0FBUyxTQUFRLEVBQU8sRUFBTyxHQUU3QixNQURhLFFBQU8sR0FBTyxNQUFNLEdBQ25CLElBQUksU0FBVSxHQUMxQixNQUFJLEdBQU0sS0FBSyxHQUNOLEVBQUUsT0FBUyxHQUdiLElBSVgsUUFBUyxhQUFZLEdBQ25CLE1BQW9CLGdCQUFOLEdBQWlCLEVBQUUsUUFBUSx5QkFBMEIsUUFBVSxFQXJCL0UsT0FBTyxRQUFVLFNBQVUsRUFBTyxFQUFRLEdBQ3hDLEdBQUksR0FBUSxLQUFLLEtBQUssZUFBaUIsS0FBSyxNQUFNLEdBQVUsS0FBSyxLQUNqRSxPQUFLLElBQ0wsRUFBUSxHQUFJLFFBQU8sSUFBTSxZQUFZLEdBQVMsSUFBSyxLQUM1QyxFQUFFLFFBQ1AsTUFBUyx3QkFDUixRQUFRLEVBQU8sRUFBTyxLQUpOOzs7QUNKckIsWUFFQSxRQUFPLFFBQVUsU0FBVSxFQUFPLEdBQ2hDLEdBQUksR0FBTyxLQUFLLGtCQUFrQixFQUNsQyxZQUEwQixLQUFmLEVBQUssR0FBOEIsRUFDdkMsRUFBSzs7O0FDTGQsWUFFQSxRQUFPLFFBQVUsU0FBVSxHQUV6QixHQUFXLE1BQVAsRUFBYSxPQUFPLENBR3hCLElBQUksRUFBSSxPQUFTLEVBQUcsT0FBTyxDQUMzQixJQUFtQixJQUFmLEVBQUksT0FBYyxPQUFPLENBRTdCLEtBQUssR0FBSSxLQUFPLEdBQ2QsR0FBSSxPQUFPLFVBQVUsZUFBZSxLQUFLLEVBQUssR0FBTSxPQUFPLENBRzdELFFBQU87OztBQ2RULFlBRUEsUUFBTyxRQUFVLFNBQVUsR0FDekIsTUFBTyxJQUE2QixrQkFBZixHQUFJLFNBQXlCLEVBQUk7OztBQ0h4RCxZQUVBLFNBQVMsU0FBUSxHQUF3VCxPQUF0TyxRQUFyRCxrQkFBWCxTQUFvRCxnQkFBcEIsUUFBTyxTQUFtQyxTQUFpQixHQUFPLGFBQWMsSUFBMkIsU0FBaUIsR0FBTyxNQUFPLElBQXlCLGtCQUFYLFNBQXlCLEVBQUksY0FBZ0IsUUFBVSxJQUFRLE9BQU8sVUFBWSxlQUFrQixLQUF5QixHQUV4VixPQUFPLFFBQVUsU0FBVSxHQUN6QixHQUFJLEdBQVEsQ0FFWixLQUFLLEdBQUksS0FBUSxHQUFLLEVBQ29CLFVBQXRCLFFBQVEsRUFBSSxLQUNYLEVBQUksTUFBVyxNQUFNLEVBQUksS0FBVSxFQUFJLEdBQU0sVUFBUyxJQUczRSxNQUFPOzs7QUNaVCxZQUVBLFFBQU8sUUFBVSxTQUFVLEVBQU8sRUFBYSxHQWlFN0MsUUFBUyxHQUFZLEdBQ25CLEdBQXNDLGNBQWxDLEVBQVksRUFBSyxjQUNuQixNQUFPLEVBR1QsSUFBSSxHQUFVLEVBQVksRUFBSyxnQkFDM0IsRUFBVyxFQUFZLEVBQUssZ0JBQ2hDLE9BQU8sVUFBUyxHQUFXLFNBQVMsR0FHdEMsUUFBUyxHQUFZLEVBQUssR0FDeEIsTUFBTyxRQUFPLGlCQUFpQixFQUFLLE1BQU0saUJBQWlCLEdBM0U3RCxHQUFJLEdBQU0sRUFBTSxxQkFBcUIsTUFBTSxHQUN2QyxFQUFPLEVBQU0sRUFBSSxhQUFXLEVBQ2hDLElBQUssRUFBTCxDQUNBLEVBQU0sTUFBTSxTQUFXLFFBS3ZCLEtBSkEsR0FBSSxHQUFjLEVBQU0sYUFDcEIsRUFBSSxHQUFlLEVBQXlCLEVBQUksRUFDaEQsRUFBTyxJQUFnQixFQUF5QixFQUFLLE9BQVMsRUFBSSxFQUFLLE9BRXBFLEVBQUksRUFBTSxJQUFLLENBQ3BCLEdBQUksR0EyQ04sU0FBbUIsR0FDakIsR0FBSSxHQUFNLFNBQVMsY0FBYyxNQVFqQyxPQVBBLEdBQUksTUFBTSxJQUFNLEVBQ2hCLEVBQUksTUFBTSxNQUFRLEVBQ2xCLEVBQUksTUFBTSxNQUFRLE1BQ2xCLEVBQUksTUFBTSxTQUFXLFdBQ3JCLEVBQUksTUFBTSxPQUFTLGFBQ25CLEVBQUksTUFBTSxXQUFhLE9BQ3ZCLEVBQUksTUFBTSxPQUFTLEVBQVMsS0FDckIsR0FwRGEsRUFDcEIsR0FBSSxVQUFZLGdCQUNoQixFQUFLLEdBQUcsWUFBWSxHQUNwQixFQUFLLEdBQUcsTUFBTSxTQUFXLFdBSTNCLFNBQXNCLEdBQ3BCLEdBQUksR0FBTyxFQUFRLEVBQVEsRUFBYSxDQUN4QyxHQUFJLGlCQUFpQixZQUFhLFNBQVUsR0FDMUMsRUFBRSxpQkFDRixFQUFFLGtCQUNGLEVBQVMsRUFBRSxPQUFPLGNBQ2xCLEVBQVMsRUFBTyxtQkFDaEIsRUFBUSxFQUFFLEtBQ1YsSUFBSSxHQUFVLEVBQVksRUFDMUIsR0FBYyxFQUFPLFlBQWMsRUFDL0IsSUFBUSxFQUFjLEVBQU8sWUFBYyxLQUtqRCxFQUFJLGlCQUFpQixXQUFZLFNBQVUsR0FDekMsRUFBRSxPQUFPLE1BQU0sWUFBYyxLQUUvQixTQUFTLGlCQUFpQixZQUFhLFNBQVUsR0FDL0MsR0FBSSxFQUFRLENBQ1YsR0FBSSxHQUFRLEVBQUUsTUFBUSxDQUNsQixLQUFRLEVBQU8sTUFBTSxNQUFRLEVBQWMsRUFBUSxNQUN2RCxFQUFPLE1BQU0sTUFBUSxFQUFjLEVBQVEsUUFHL0MsU0FBUyxpQkFBaUIsVUFBVyxTQUFVLEdBQzdDLEVBQUUsaUJBQ0YsRUFBRSxrQkFDRixNQUFTLEdBQ1QsTUFBUyxHQUNULE1BQVEsR0FDUixNQUFjLEdBQ2QsTUFBYyxNQW5DSDs7O0FDaEJqQixZQU9BLFNBQVMsVUFBUyxHQUNoQixNQUFPLEdBQUksT0FBTyxHQUFHLGNBQWdCLEVBQUksTUFBTSxHQU5qRCxPQUFPLGVBQWUsUUFBUyxjQUM3QixPQUFPLElBRVQsUUFBaUIsUUFBSTs7O0FDTHJCLFlBSUEsU0FBUyx3QkFBdUIsR0FBTyxNQUFPLElBQU8sRUFBSSxXQUFhLEdBQVEsUUFBVyxHQUZ6RixHQUFJLE1BQU8sdUJBQXVCLFFBQVEsVUFJdEMsWUFBYyxRQUFRLG9CQUV0QixZQUFjLFFBQVEsbUJBRTFCLFFBQU8sU0FDTCxZQUFhLFlBQ2IsWUFBYSxZQUNiLE1BQU8sS0FBYzs7O0FDYnZCLFlBRUEsU0FBUyxTQUFRLEdBQXdULE9BQXRPLFFBQXJELGtCQUFYLFNBQW9ELGdCQUFwQixRQUFPLFNBQW1DLFNBQWlCLEdBQU8sYUFBYyxJQUEyQixTQUFpQixHQUFPLE1BQU8sSUFBeUIsa0JBQVgsU0FBeUIsRUFBSSxjQUFnQixRQUFVLElBQVEsT0FBTyxVQUFZLGVBQWtCLEtBQXlCLEdBRXhWLE9BQU8sUUFBVSxTQUFVLEdBQ3pCLEdBQUksR0FBUSxJQUVaLEtBQ0UsTUFBTyxHQUFLLElBQUksU0FBVSxHQUN4QixJQUFLLEdBQUksS0FBVSxHQUNJLFdBQWpCLEVBQU0sU0FBcUIsRUFBSSxHQUFVLEVBQU0sV0FBVyxFQUFJLEdBQVMsRUFBTSxXQUFXLE1BRXhGLEVBQU0sYUFBYSxJQUFZLEVBQU0sS0FBSyxVQUFVLElBQVksRUFBTSxhQUFhLEtBQ3JGLEVBQUksR0FBVSxFQUFNLFdBQVcsRUFBSSxHQUFTLEdBSWhELE9BQU8sS0FFVCxNQUFPLEdBR1AsS0FGQSxTQUFRLE1BQU0saUVBQWlFLE9BQU8sUUFBUSxHQUFPLCtJQUNyRyxRQUFRLE1BQU0sY0FBZSxHQUN2QixHQUFJOzs7QUN0QmQsWUFFQSxRQUFPLFFBQVUsU0FBVSxFQUFRLEdBQ2pDLE1BQUssTUFBSyxLQUFLLFlBQVksR0FDcEIsS0FBSyxLQUFLLFlBQVksR0FBUSxPQUFPLFNBQVUsR0FDcEQsTUFBTyxHQUFLLFVBQVUsS0FDckIsSUFBSSxTQUFVLEdBQ2YsTUFBTyxHQUFZLFFBQ2xCLEtBQUssS0FMbUM7OztBQ0g3QyxZQUVBLFFBQU8sUUFBVSxTQUFVLEdBQ3pCLE1BQU8sTUFBSyxjQUFjLFNBQVMsR0FBUyxxQ0FBdUM7OztBQ0hyRixZQUVBLFNBQVMsU0FBUSxHQUF3VCxPQUF0TyxRQUFyRCxrQkFBWCxTQUFvRCxnQkFBcEIsUUFBTyxTQUFtQyxTQUFpQixHQUFPLGFBQWMsSUFBMkIsU0FBaUIsR0FBTyxNQUFPLElBQXlCLGtCQUFYLFNBQXlCLEVBQUksY0FBZ0IsUUFBVSxJQUFRLE9BQU8sVUFBWSxlQUFrQixLQUF5QixHQThFeFYsUUFBUyxpQkFBZ0IsR0FDdkIsTUFBSyxHQUNlLGdCQUFULEdBQTBCLEVBQU0sY0FFcEMsRUFIWSxHQU1yQixRQUFTLFlBQVcsRUFBTyxFQUFPLEdBTWhDLElBTEssU0FBVSxTQUFVLFdBQVcsUUFBUSxRQUFRLEtBQVcsSUFDN0QsRUFBUSxPQUFPLEdBQU8sZUFJcEIsRUFDRixNQUFPLElBQVMsQ0FJbEIsSUFBcUIsZ0JBQVYsR0FDVCxNQUFPLEdBQU0sUUFBUSxJQUFVLENBSWpDLElBQUksdUJBQXVCLEdBQVEsQ0FDakMsR0FBSSxHQUFRLE9BQU8sRUFBTSxNQUFPLHVCQUM1QixFQUFNLE9BQU8sRUFBTSxJQUFLLHNCQUM1QixPQUFPLElBQVMsR0FBUyxHQUFTLEVBR3BDLEdBQXVCLFdBQW5CLFFBQVEsR0FBcUIsQ0FDL0IsSUFBSyxHQUFJLEtBQU8sR0FDZCxHQUFJLFdBQVcsRUFBTyxFQUFNLElBQU8sT0FBTyxDQUc1QyxRQUFPLEVBR1QsTUFBTyxJQUFTLEdBQVMsR0FBUyxFQWpIcEMsR0FBSSwwQkFBMkIsUUFBUSx1Q0FFbkMsdUJBQXlCLFFBQVEscUNBRWpDLHNCQUF3QixRQUFRLDRCQUVwQyxRQUFPLFFBQVUsU0FBVSxFQUFNLEdBQy9CLEdBQUksRUFBRyxDQUNMLEdBQUksR0FBUyxLQUFLLEtBQ2xCLE1BQUssUUFBUSxHQUFHLEVBQ2hCLElBQUksR0FBTyxLQUFLLFFBQVEsRUFBRSxPQUFPLE1BQzdCLEVBQW9DLFdBQTVCLFFBQVEsRUFBRSxPQUFPLE9BQXNCLEVBQUUsT0FBTyxNQUFRLEdBQUssRUFBRSxPQUFPLEtBRTlFLEdBQ0YsRUFBTyxHQUFRLEVBRWYsRUFBUyxFQUdYLEtBQUssS0FBTyxLQUFLLE9BQU8sYUFBYyxHQUFVLEtBQUssTUFBUSxFQUM3RCxLQUFLLFlBQVksUUFBUyxHQUV0QixHQUNGLEtBQUssU0FBUyxVQUNaLEtBQU0sRUFDTixNQUFPLElBRVQsS0FBSyxTQUFTLFdBQVcsT0FBTyxHQUFPLElBRXZDLEtBQUssU0FBUyxTQUFVLEdBSTVCLEdBQUksR0FBUSxLQUFLLE1BQ2IsRUFBZ0IsRUFBWSxFQUFKLENBQzVCLEtBQUssS0FBSyxLQUFNLE1BQU8sRUFFbkIsTUFBSyxLQUFLLGlCQUNaLEVBQWUseUJBQXlCLEdBRzFDLElBQUksR0FDQSxFQUNBLEVBQ0EsRUFDQSxFQUNBLEVBQ0EsRUFBTyxzQkFBc0IsRUFBTSxLQUFLLEtBQUssY0FBZSxLQUFLLGNBQ3JFLE9BQUssR0FDRSxFQUFLLE9BQU8sU0FBVSxFQUFLLEdBdUJoQyxNQXRCQSxHQUFRLEVBQ1IsS0FBSyxrQkFBa0IsUUFBUSxTQUFVLEdBQ3ZDLEVBQWUsS0FBSyxLQUFLLFlBQVksUUFBUSxJQUFXLEdBQUssS0FBSyxLQUFLLGVBQ3ZFLEVBQWUsS0FBSyxhQUFhLElBQVcsS0FBSyxLQUFLLGVBQ3RELEVBQWEsS0FBSyxXQUFXLEdBQzdCLEVBQVEsS0FBSyxVQUFVLEVBQUssR0FFeEIsdUJBQXVCLEtBQVcsSUFDcEMsRUFBUSxFQUFNLE9BQU8sSUFHdkIsRUFBZSxLQUFLLEtBQUssZUFBaUIsRUFBTSxHQUFVLEdBQzFELEVBQWUsZ0JBQWdCLE1BR3pCLEtBQUssS0FBSyxnQkFBZ0IsR0FDeEIsS0FBSyxLQUFLLGdCQUFnQixHQUFRLEVBQUssS0FBSyxLQUFLLGVBQWlCLEVBQU0sR0FBVSxJQUFRLElBRTFGLFdBQVcsRUFBYyxFQUFPLElBQWUsTUFHdkQsS0FBSyxPQUNBLEdBQVMsR0FDaEIsS0FBSyxPQXpCbUI7OztBQ3BENUIsWUFFQSxRQUFPLFFBQVUsU0FBVSxHQUN6QixHQUFJLEdBQUksS0FBSyxLQUFLLGNBQ2xCLE9BQU8sR0FBRSxlQUFlLEdBQVUsRUFBRSxHQUFVOzs7QUNKaEQsWUFFQSxRQUFPLFFBQVUsU0FBVSxHQUN6QixHQUFJLEdBQWdCLE9BQU8sS0FBSyxLQUFLLGlCQUNyQyxPQUFLLEdBQWMsUUFBVSxLQUFLLFFBQVEsU0FBVyxJQUM1QyxLQUFLLGlCQUFpQixFQUFjLElBQUksT0FBTyxTQUFVLEdBQ2hFLE1BQU8sR0FBSSxRQUFVLElBQ3BCLE9BSGlFLEtBQUssUUFBUSxTQUFXOzs7QUNKOUYsWUFFQSxRQUFPLFFBQVUsU0FBVSxHQUN6QixNQUFJLE1BQUssS0FBSyxvQkFBb0IsZUFBZSxHQUN4QyxLQUFLLEtBQUssb0JBQW9CLEdBR2hDLEtBQUssS0FBSzs7O0FDUG5CLFlBRUEsUUFBTyxRQUFVLFNBQVUsRUFBUSxHQUNqQyxHQUFJLEdBQWEsVUFBVSxPQUFTLE9BQXNCLEtBQWpCLFVBQVUsR0FBbUIsVUFBVSxJQUFNLEVBQ2xGLEVBQU8sS0FBSyxZQUNaLEVBQVksS0FBSyxpQkFBaUIsS0FBSyxpQkFBaUIsUUFBVSxLQUFLLGlCQUFpQixLQUFLLGlCQUFpQixRQUFVLEtBQUssS0FBSyxhQUFhLEtBQUssaUJBQWlCLFFBQ3JLLEVBQU0sS0FBSyxpQkFBaUIsVUFDNUIsRUFBTyxJQUNYLE9BQU8sVUFBVSxFQUFHLEdBQ2xCLEdBR0ksR0FIQSxFQUFPLEVBQUssVUFBVSxFQUFHLElBQVcsR0FDcEMsRUFBTyxFQUFLLFVBQVUsRUFBRyxJQUFXLEdBQ3BDLEVBQU0sRUFBWSxHQUFLLENBSzNCLElBSG9CLGdCQUFULEtBQW1CLEVBQU8sRUFBSyxlQUN0QixnQkFBVCxLQUFtQixFQUFPLEVBQUssZUFFdEMsSUFBUyxHQUFRLEdBQWEsRUFBVSxFQUFhLEdBQUksQ0FDM0QsR0FBSSxHQUFXLEVBQVUsRUFBYSxFQVF0QyxPQUxFLE9BRGdDLEtBQXZCLEVBQVMsVUFDSCxFQUFTLFVBRVQsRUFBUyxTQUFXLEdBQU8sRUFHckMsRUFBSyxFQUFTLE9BQVEsRUFBYyxFQUFhLEdBQUcsRUFBRyxHQUdoRSxNQUFPLEdBQU8sRUFBTyxHQUFPOzs7QUM1QmhDLFlBSUEsU0FBUyx3QkFBdUIsR0FBTyxNQUFPLElBQU8sRUFBSSxXQUFhLEdBQVEsUUFBVyxHQUZ6RixHQUFJLE1BQU8sdUJBQXVCLFFBQVEsVUFJMUMsUUFBTyxRQUFVLFNBQVUsRUFBTyxHQUNoQyxHQUFJLEtBQUssS0FBTSxDQUNiLEdBQUksRUFBTSxNQUFNLE1BQU0sT0FBUyxFQUFHLE1BQ2xDLE1BQUssT0FBTyxFQUFNLGNBQWMsUUFBUSxJQUFLLEtBQU0sR0FHckQsS0FBSyxNQUFNLEVBQU8sR0FFbEIsS0FBYyxRQUFFLE1BQU0sY0FBYyxPQUFPLEdBQVEsR0FFL0MsS0FBSyxNQUNQLEtBQWMsUUFBRSxNQUFNLGNBQWMsT0FBTyxLQUFLLEtBQU0sS0FBSyxPQUFPLEdBQVE7OztBQ2pCOUUsWUFFQSxRQUFPLFFBQVUsU0FBVSxFQUFNLEdBQy9CLElBQUssS0FBSyxLQUFLLE1BQU8sTUFBTyxFQUM3QixJQUFJLEdBQU8sS0FBSyxLQUFLLE1BQU0sRUFDM0IsSUFBSSxFQUFjLElBQUssR0FBSSxLQUFPLEdBRWhDLEVBQU8sRUFBSyxRQUFRLElBQU0sRUFBTSxJQUFLLEVBQWEsR0FFcEQsT0FBTzs7O0FDVFQsWUFFQSxRQUFPLFFBQVUsU0FBVSxHQUN6QixRQUFLLEtBQUssS0FBSyxhQUN1QixpQkFBeEIsTUFBSyxLQUFLLFlBQTJCLEtBQUssS0FBSyxZQUFjLEtBQUssS0FBSyxXQUFXLFFBQVEsSUFBVzs7O0FDSnJILFlBRUEsUUFBTyxRQUFVLFNBQVUsRUFBRyxFQUFLLEdBRWpDLEdBQUksS0FBSyxhQUFhLFVBQVcsTUFBTyxNQUFLLGFBQWEsV0FDeEQsSUFBSyxFQUNMLE1BQU8sR0FFVCxJQUFJLEdBQVcsS0FBSyxLQUFLLFFBRXpCLE9BQXdCLGtCQUFiLEdBQWdDLEVBQVMsTUFBTSxNQUFPLEVBQUcsSUFFN0QsRUFBRSxHQUNQLE9BQ0UsS0FBTTs7O0FDZFosWUFFQSxRQUFPLFFBQVUsU0FBVSxHQUN6QixNQUFPLE9BQVMsRUFBTyxNQUFNLEtBQUssS0FBSzs7O0FDSHpDLFlBRUEsU0FBUyxpQkFBZ0IsRUFBSyxFQUFLLEdBQWlLLE1BQXBKLEtBQU8sR0FBTyxPQUFPLGVBQWUsRUFBSyxHQUFPLE1BQU8sRUFBTyxZQUFZLEVBQU0sY0FBYyxFQUFNLFVBQVUsSUFBa0IsRUFBSSxHQUFPLEVBQWdCLEVBRTNNLEdBQUksT0FBUSxRQUFRLFFBRXBCLFFBQU8sUUFBVSxTQUFVLEdBQ3pCLEdBQUksR0FFQSxFQUFpQixVQUFVLE9BQVMsT0FBc0IsS0FBakIsVUFBVSxHQUFtQixVQUFVLE1BQ2hGLElBQWMsVUFBVSxPQUFTLE9BQXNCLEtBQWpCLFVBQVUsS0FBbUIsVUFBVSxHQUM3RSxFQUFPLEtBQUssS0FBSyxZQUNqQixHQUFRLEtBQVksZ0JBQWdCLEVBQU8sRUFBSyxNQUFPLEtBQUssZUFBZ0IsZ0JBQWdCLEVBQU8sRUFBSyxNQUFPLEtBQUssT0FBUSxnQkFBZ0IsRUFBTyxFQUFLLFVBQVcsS0FBSyxRQUFRLFVBQVksRUFBSSxHQUFJLGdCQUFnQixFQUFPLEVBQUssS0FBTSxLQUFLLE1BQU8sZ0JBQWdCLEVBQU8sRUFBSyxTQUFVLEtBQUssS0FBSyxlQUFpQixFQUFJLEdBQUksRUFDM1QsTUFBSyxRQUFRLGVBQWUsV0FBYSxLQUFLLFFBQVEsU0FBUSxFQUFLLEVBQUssU0FBVyxLQUFLLFFBQVEsUUFDcEcsRUFBTyxNQUFNLEVBQU0sS0FBSyxLQUFLLE9BQVEsS0FBSyxjQUFlLEdBRXJELEtBQUssY0FBZ0IsS0FBSyxRQUFRLFFBQVUsS0FBSyxpQkFBaUIsS0FBSyxRQUFRLFVBQ2pGLEVBQUssVUFBWSxLQUFLLGlCQUFpQixLQUFLLFFBQVEsU0FHdEQsRUFBTyxLQUFLLEtBQUssZUFBZSxHQUU1QixHQUNGLEtBQUssU0FBUyxVQUFXLEVBRzNCLElBQUksR0FBVSxLQUFLLFlBQVksRUFDL0IsT0FBSSxHQUFvQixFQUNqQixFQUFRLEtBQUssU0FBVSxHQUM1QixNQUFPLE1BQUssUUFBUSxJQUNwQixLQUFLOzs7QUM5QlQsWUFFQSxRQUFPLFFBQVUsU0FBVSxHQUN6QixHQUFJLEtBQUssY0FBZ0IsS0FBSyxhQUEyQixhQUFHLENBQzFELEdBQUksR0FBTyxLQUFLLEtBQUssVUFBVSxLQUFLLFNBQVUsR0FDNUMsTUFBTyxHQUFJLFFBQVUsR0FFdkIsT0FBSyxHQUNFLEtBQUssYUFBMkIsYUFBRSxHQUR2QixHQUlwQixNQUFPOzs7QUNYVCxZQUVBLFFBQU8sUUFBVSxTQUFVLEVBQU8sR0FDaEMsR0FBcUIsZ0JBQVYsR0FBb0IsTUFBTyxFQUV0QyxPQUFLLE1BQUssS0FBSyxpQkFBaUIsZUFBZSxHQUVFLGtCQUF0QyxNQUFLLEtBQUssaUJBQWlCLEdBQ2hDLEVBQVUsS0FBSyxLQUFLLGlCQUFpQixHQUFPLEtBQUssS0FBSyxRQUFTLEdBSnpDLEdBUXJCLEtBQUssS0FBSyxpQkFBaUIsR0FSTjs7O0FDSjlCLFlBSUEsU0FBUyx3QkFBdUIsR0FBTyxNQUFPLElBQU8sRUFBSSxXQUFhLEdBQVEsUUFBVyxHQUZ6RixHQUFJLFVBQVcsdUJBQXVCLFFBQVEsc0JBSTlDLFFBQU8sUUFBVSxTQUFVLEVBQU8sR0FDaEMsR0FBcUIsZ0JBQVYsR0FBb0IsTUFBTyxFQUV0QyxRQUFnRCxLQUFyQyxLQUFLLE9BQU8sTUFBTSxPQUFPLElBQ2xDLE1BQU8sTUFBSyxPQUFPLE1BQU0sT0FBTyxHQUdsQyxJQUFJLElBQWlCLEVBQUksU0FBa0IsU0FBRyxFQUFNLE1BQU0sS0FBSyxLQUFLLEtBQ3BFLE9BQUssTUFBSyxLQUFLLFNBQVMsZUFBZSxHQUVFLGtCQUE5QixNQUFLLEtBQUssU0FBUyxHQUN4QixFQUFVLEtBQUssS0FBSyxTQUFTLEdBQU8sS0FBSyxLQUFLLFFBQVMsR0FDcEQsRUFHRixLQUFLLEtBQUssU0FBUyxHQVA0Qjs7O0FDZHhELFlBRUEsUUFBTyxRQUFVLFNBQVUsR0FDekIsV0FBNkMsS0FBbEMsS0FBSyxLQUFLLFlBQVksR0FDeEIsS0FBSyxLQUFLLFlBQVksU0FHRyxLQUF2QixLQUFLLE1BQU0sS0FBMkIsS0FBSyxNQUFNLEdBQVEsU0FFaEUsTUFBTyxPQUFPLEtBQUssTUFBTSxHQUFRLE1BQU8sdUJBQ3hDLElBQUssT0FBTyxLQUFLLE1BQU0sR0FBUSxJQUFLOzs7QUNWMUMsWUFFQSxRQUFPLFFBQVUsU0FBVSxHQUN6QixNQUFLLElBQ0wsRUFBTyxFQUFLLE1BQU0sTUFDbEIsRUFBSyxRQUNFLEVBQUssS0FBSyxNQUFNLE1BQU0sT0FBTyxLQUFLLE1BSHZCOzs7QUNIcEIsWUFFQSxRQUFPLFFBQVUsV0FDZixHQUFJLEdBQVEsS0FFUixFQUFPLFVBQVUsT0FBUyxPQUFzQixLQUFqQixVQUFVLEdBQW1CLFVBQVUsR0FBSyxJQUUvRSxLQUFLLEtBQUssS0FBSyxVQUEwQyxrQkFBdkIsTUFBSyxLQUFLLFNBQzFDLEtBQU0sSUFBSSxPQUFNLHVEQUdsQixJQUFJLEdBQU8sRUFBTyxLQUFLLGNBQWMsT0FBTyxTQUFVLEdBQ3BELE1BQU8sR0FBSyxTQUFTLEtBQ2xCLEtBQUssYUFDVixPQUFLLEdBQUssT0FDTyxLQUFLLFVBQVUsT0FBTyxTQUFVLEdBQy9DLE1BQStCLGFBQXhCLEVBQU0sU0FBUyxNQUF1QixFQUFLLFNBQVMsRUFBTSxLQUFLLEVBQU0sS0FBSzs7O0FDaEJyRixZQUVBLFFBQU8sUUFBVSxTQUFVLEdBQ3pCLE1BQXFCLG1CQUFWLE9BQThCLEVBQVMsS0FDM0M7OztBQ0pULFlBRUEsUUFBTyxRQUFVLFNBQVUsR0FDekIsR0FBSSxHQUFZLEtBQUssUUFBUSxTQUs3QixPQUpBLE1BQUssa0JBQ0gsT0FBUSxFQUNSLFVBQVcsT0FFaUMsS0FBbkMsS0FBSyxLQUFLLGNBQWMsR0FBK0IsS0FBSyxZQUFZLEVBQVEsR0FDcEYsS0FBSyxLQUFLLGNBQWMsR0FBUTs7O0FDVHpDLFlBRUEsUUFBTyxRQUFVLFNBQVUsRUFBSyxHQUM5QixJQUE2QixJQUF6QixFQUFPLFFBQVEsS0FBYSxNQUFPLEdBQUksRUFDM0MsSUFBSSxHQUFJLEVBQU8sTUFBTSxLQUNqQixFQUFRLEVBQUksRUFBRSxHQUNsQixLQUFLLEVBQU8sTUFBTyxFQUVuQixLQUFLLEdBQUksR0FBSSxFQUFHLEVBQUksRUFBRSxPQUFRLElBRzVCLE9BQXFCLE1BRnJCLEVBQVEsRUFBTSxFQUFFLEtBRWtCLE1BQU8sRUFHM0MsT0FBTzs7O0FDZFQsWUFFQSxTQUFTLFNBQVEsR0FBd1QsT0FBdE8sUUFBckQsa0JBQVgsU0FBb0QsZ0JBQXBCLFFBQU8sU0FBbUMsU0FBaUIsR0FBTyxhQUFjLElBQTJCLFNBQWlCLEdBQU8sTUFBTyxJQUF5QixrQkFBWCxTQUF5QixFQUFJLGNBQWdCLFFBQVUsSUFBUSxPQUFPLFVBQVksZUFBa0IsS0FBeUIsR0FFeFYsR0FBSSxjQUFlLFFBQVEsbUJBQTRCLE9BRXZELFFBQU8sUUFBVSxXQUNmLEdBQUksR0FBTyxLQUFLLElBQ2hCLE9BQU8sR0FBSyxZQUFZLFFBQVUsRUFBSyxpQkFBNkMsaUJBQW5CLEdBQUssWUFBMkIsRUFBSyxZQUEwQyxVQUE1QixRQUFRLEVBQUssYUFBMkIsYUFBYSxFQUFLLFdBQVksRUFBSyxhQUFhOzs7QUNSOU0sWUFFQSxRQUFPLFFBQVUsV0FDZixHQUVJLEdBRkEsS0FDQSxFQUFPLEtBQUssS0FBSyxXQU1yQixPQUpBLE1BQUssS0FBSyxjQUFjLFFBQVEsU0FBVSxHQUN4QyxFQUFxQixVQUFmLEtBQUssT0FBcUIsRUFBTyxLQUFPLEVBQzlDLEVBQWMsR0FBTyxFQUFLLGVBQWUsR0FBTyxFQUFLLEdBQU8sSUFDNUQsS0FBSyxPQUNBOzs7QUNWVCxZQUVBLElBQUksT0FBUSxRQUFRLFFBRXBCLFFBQU8sUUFBVSxXQUNmLEdBQWlCLG1CQUFOLFFBQTRELEtBQWhDLEVBQUUsS0FBSyxLQUFLLGdCQUVqRCxXQURBLFNBQVEsTUFBTSxrREFJaEIsSUFBSSxHQUdBLEVBQ0EsRUFIQSxFQUFPLEtBQ1AsRUFBUSxLQUFLLEtBQU8sS0FBSyxNQUFNLEtBQUssVUFBVSxLQUFLLFFBQVUsS0FBSyxNQUlsRSxFQUFTLFNBQWdCLEVBQU8sR0FDbEMsTUFBc0IsVUFBZixFQUFLLE9BQXFCLEVBQUssT0FBTyxFQUFLLEtBQU0sR0FBSyxFQUFLLGFBQWEsRUFBTyxJQUdwRixFQUFvQixNQUFNLFVBQVUsS0FBSyxLQUFLLG1CQUNoRCxpQkFBaUIsRUFDakIsa0JBQWtCLEdBRXBCLEdBQUssa0JBQWtCLFFBQVEsU0FBVSxHQUN2QyxHQUFJLEdBQVEsRUFBSyxxQkFBcUIsRUFFbEMsSUFDRixFQUFLLG1CQUFtQixFQUFRLEVBQU0sTUFBTyxFQUFNLEtBRW5ELEdBQ0UsVUFBVyxFQUFNLE1BQ2pCLFFBQVMsRUFBTSxNQUdqQixLQUdGLEVBQUssRUFBRSxFQUFLLEtBQUssS0FBSyxlQUFpQixFQUFFLGVBQWUsR0FBVSxXQUNsRSxNQUF3RSxLQUFqRCxFQUFLLEtBQUssMkJBQTJCLEdBQTBCLEVBQUssS0FBSywyQkFBMkIsTUFDM0gsRUFBZ0IsTUFBTSxVQUFVLEdBQzlCLFFBQ0UsT0FBUSxFQUFLLFdBQVcsTUFHNUIsRUFBWSxPQUFNLEVBQU0sSUFFSyxJQUF6QixFQUFjLFNBQ2hCLEVBQVUsV0FHWixFQUFHLGdCQUFnQixNQUFNLFVBQVUsRUFBVyxFQUFlLElBQzdELEVBQUcsR0FBRyx3QkFBeUIsU0FBVSxFQUFJLEdBQzNDLEVBQU0sSUFDSixNQUFPLEVBQU8sVUFBVSxPQUFPLHVCQUMvQixJQUFLLEVBQU8sUUFBUSxPQUFPLHdCQUV4QixFQUFLLE9BQU0sRUFBSyxNQUFRLEdBRTdCLEVBQUssbUJBQW1CLEVBQVEsRUFBTyxVQUFXLEVBQU8sU0FFekQsRUFBSyxZQUFZLFFBQVMsR0FDMUIsRUFBTyxHQUNMLFFBQ0UsS0FBTSxFQUFLLGVBQWUsR0FDMUIsTUFBTyxFQUFNLFFBSW5CLEVBQUcsR0FBRyx5QkFBMEIsU0FBVSxFQUFJLEdBQzVDLEVBQU0sR0FBVSxHQUNYLEVBQUssT0FBTSxFQUFLLE1BQVEsR0FDN0IsRUFBTyxhQUFhLFVBQ3BCLEVBQU8sV0FBVyxVQUNsQixFQUFLLFlBQVksUUFBUyxHQUMxQixFQUFFLE1BQU0sS0FBSywrQ0FBaUQsRUFBSyxRQUFRLFlBQ3pFLE9BQVEsRUFBSyxXQUFXLEtBQ3JCLFdBQ0wsRUFBTyxHQUNMLFFBQ0UsS0FBTSxFQUFLLGVBQWUsR0FDMUIsTUFBTyxFQUFNOzs7QUNqRnZCLFlBRUEsSUFBSSxPQUFRLFFBQVEsUUFFcEIsUUFBTyxRQUFVLFNBQVUsRUFBVSxFQUFlLEdBR2xELE1BRkksS0FBZSxFQUFXLE1BQU0sVUFBVSxFQUFVLElBQ3hELEVBQWUsTUFBTSxVQUFVLEVBQVU7OztBQ04zQyxZQUVBLFFBQU8sUUFBVSxXQUNWLEtBQUssS0FBSyxVQUNmLEtBQUssUUFBUSxPQUFTLEtBQUssS0FBSyxRQUFRLE9BQ3hDLEtBQUssUUFBUSxXQUFZLEtBQUssS0FBSyxRQUFRLGVBQWUsY0FBZSxLQUFLLEtBQUssUUFBUTs7O0FDTDdGLFlBRUEsUUFBTyxRQUFVLFdBQ2YsS0FBSyxLQUFPLEVBRVAsS0FBSyxLQUFLLFdBQVcsVUFDeEIsS0FBSyxNQUFNLFdBQVcsUUFBUTs7O0FDTmxDLFlBRUEsU0FBUyxTQUFRLEdBQXdULE9BQXRPLFFBQXJELGtCQUFYLFNBQW9ELGdCQUFwQixRQUFPLFNBQW1DLFNBQWlCLEdBQU8sYUFBYyxJQUEyQixTQUFpQixHQUFPLE1BQU8sSUFBeUIsa0JBQVgsU0FBeUIsRUFBSSxjQUFnQixRQUFVLElBQVEsT0FBTyxVQUFZLGVBQWtCLEtBQXlCLEdBYXhWLFFBQVMsaUJBQWdCLEVBQU0sR0FDN0IsTUFBSyxHQUFLLGVBQWUsT0FDUSxLQUF0QixFQUFLLEdBQVEsTUFBNkIsRUFBSyxJQUV4RCxNQUFPLEVBQUssR0FBUSxNQUFNLE9BQU8sdUJBQ2pDLElBQUssRUFBSyxHQUFRLElBQUksT0FBTyx3QkFKVSxHQVozQyxPQUFPLFFBQVUsV0FDZixHQUFJLEdBQU8sS0FBSyxLQUFLLFdBQ3JCLEtBQUssS0FBSyxLQUFLLGVBQWdCLE1BQU8sR0FBSyxlQUFlLFdBQWEsRUFBSyxRQUFVLEVBQ3RGLElBQUksS0FLSixRQUppQixLQUFLLEtBQUssWUFBK0MsVUFBakMsUUFBUSxLQUFLLEtBQUssWUFBMEIsS0FBSyxLQUFLLFdBQWEsS0FBSyxTQUN0RyxRQUFRLFNBQVUsR0FDM0IsRUFBTSxHQUFVLGdCQUFnQixFQUFNLElBQ3RDLEtBQUssT0FDQTs7O0FDWlQsWUFFQSxRQUFPLFFBQVUsV0FDZixHQUFJLElBQ0YsS0FBTSxFQUNOLE1BQU8sS0FBSyxNQUNaLFFBQVMsS0FBSyxRQUNkLFFBQVMsS0FBSyxLQUFLLFFBQ25CLGNBQWUsS0FBSyxjQUd0QixPQURBLE1BQUssUUFBUSxRQUFRLEtBQUssU0FBVSxLQUFLLFVBQVUsSUFDNUM7OztBQ1hULFlBRUEsUUFBTyxRQUFVLFNBQVUsR0FDekIsT0FBUSxLQUFLLEtBQUssaUJBQWlCLFNBQVM7OztBQ0g5QyxZQUVBLFFBQU8sUUFBVSxTQUFVLEdBQ3pCLE1BQU8sTUFBSyxNQUFNLGVBQWUsSUFBVyxLQUFLLEtBQUssWUFBWSxRQUFRLElBQVc7OztBQ0h2RixZQUVBLFFBQU8sUUFBVSxTQUFVLEdBQ3pCLE1BQU8sTUFBSyxNQUFNLGVBQWUsSUFBVyxLQUFLLEtBQUssWUFBWSxlQUFlOzs7QUNIbkYsWUFFQSxRQUFPLFFBQVUsU0FBVSxHQUN6QixNQUFPLE1BQUssTUFBTSxlQUFlLEtBQXFELEdBQTFDLEtBQUssS0FBSyxZQUFZLFFBQVEsS0FBa0IsS0FBSyxLQUFLLFlBQVksZUFBZTs7O0FDSG5JLFlBRUEsUUFBTyxRQUFVLFNBQVUsR0FDckIsS0FBSyxPQUNULEtBQUssUUFBUSxHQUNiLEtBQUssU0FBUyxhQUFjOzs7QUNMOUIsWUFFQSxRQUFPLFFBQVUsU0FBVSxHQUN6QixNQUEwQyxLQUFuQyxLQUFLLG1CQUFtQixRQUFnQixLQUFLLG1CQUFtQixLQUFPOzs7QUNIaEYsWUFFQSxRQUFPLFFBQVUsU0FBVSxFQUFTLEdBQzdCLEtBQUssU0FBUyxLQUVmLEdBQU0sRUFBRyxVQUFZLEtBQUssUUFBUSxRQUFVLEtBQUssYUFDbkQsS0FBSyxpQkFBaUIsSUFFdEIsS0FBSyxvQkFDTCxLQUFLLFFBQVEsVUFBWSxHQUFXLEtBQUssUUFBUSxRQUFVLEtBQUssUUFBUSxVQUFZLEtBQUssdUJBQXVCLEdBQ2hILEtBQUssUUFBUSxPQUFTLEVBQ3RCLEtBQUssWUFBWSxVQUFXLEtBQUssU0FDakMsS0FBSyxTQUFTLFNBQVUsS0FBSyxNQUFNLEtBQUssVUFBVSxLQUFLLFlBR3RDLFVBQWYsS0FBSyxRQUNQLEtBQUs7OztBQ2hCVCxZQUVBLFFBQU8sUUFBVSxXQUNmLEtBQUs7OztBQ0hQLFlBSUEsU0FBUyx3QkFBdUIsR0FBTyxNQUFPLElBQU8sRUFBSSxXQUFhLEdBQVEsUUFBVyxHQUZ6RixHQUFJLE1BQU8sdUJBQXVCLFFBQVEsVUFJMUMsUUFBTyxRQUFVLFdBQ2YsR0FBSSxHQUFRLEtBRVIsRUFBUSxZQUNSLE1BQUssT0FBTSxHQUFTLElBQU0sS0FBSyxNQUNuQyxLQUFLLEtBQUssY0FBYyxRQUFRLFNBQVUsR0FDeEMsS0FBYyxRQUFFLEtBQUssR0FBRyxPQUFPLEVBQU8sYUFBYSxPQUFPLEVBQU8sT0FFakUsS0FBYyxRQUFFLElBQUksR0FBRyxPQUFPLEVBQU8sYUFBYSxPQUFPLEVBQU8sTUFBTyxTQUFVLEdBQy9FLEVBQU0sY0FBYyxFQUFPLE1BQVEsRUFFbkMsRUFBTSxZQUFZLGdCQUFpQixFQUFNOzs7QUNqQi9DLFlBSUEsU0FBUyx3QkFBdUIsR0FBTyxNQUFPLElBQU8sRUFBSSxXQUFhLEdBQVEsUUFBVyxHQUZ6RixHQUFJLE1BQU8sdUJBQXVCLFFBQVEsVUFJMUMsUUFBTyxRQUFVLFdBQ2YsR0FBSSxHQUFRLFlBQ1IsTUFBSyxPQUFNLEdBQVMsSUFBTSxLQUFLLE1BQ25DLEtBQUssS0FBSyxjQUFjLFFBQVEsU0FBVSxHQUN4QyxLQUFjLFFBQUUsS0FBSyxHQUFHLE9BQU8sRUFBTyxhQUFhLE9BQU8sSUFFMUQsS0FBYyxRQUFFLElBQUksR0FBRyxPQUFPLEVBQU8sYUFBYSxPQUFPLEdBQVMsU0FBVSxHQUMxRSxLQUFLLGNBQWMsR0FBVSxFQUM3QixLQUFLLFlBQVksZ0JBQWlCLEtBQUssZUFDdkMsS0FBSyxXQUNMLEtBQUssUUFDUCxLQUFLOzs7QUNqQlQsWUFFQSxRQUFPLFFBQVUsU0FBVSxFQUFLLEVBQVEsRUFBTyxHQUM3QyxHQUFJLEdBQVEsS0FBSyxVQUFVLEVBQUssRUFFaEMsS0FBMkMsR0FBdkMsS0FBSyxjQUFjLFFBQVEsR0FDN0IsV0FBcUIsS0FBVixHQUEwQixLQUFLLEtBQUssbUJBQWdFLElBQTVDLEtBQUssa0JBQWtCLFFBQVEsR0FJM0YsS0FBSyxlQUFlLEVBQU8sRUFBUSxHQUhqQyxDQU1YLElBQUksR0FBVyxLQUFLLEtBQUssVUFBVSxFQVFuQyxPQVBBLEdBQThCLGtCQUFaLEdBQXlCLEVBQVMsTUFBTSxLQUFLLE9BQVEsRUFBRyxFQUFLLEVBQU8sSUFBVyxFQUFFLEdBQ2pHLE9BQ0UsS0FBTSxFQUNOLE9BQVEsRUFDUixNQUFPOzs7QUNsQmIsWUFFQSxRQUFPLFFBQVUsV0FDZixJQUFLLEdBQUksS0FBTyxNQUFLLE1BQ25CLEtBQUssTUFBTSxHQUFPOzs7QUNKdEIsWUFFQSxRQUFPLFFBQVUsU0FBVSxFQUFLLEVBQU8sR0FDckMsR0FBSSxHQUNBLEVBQUssS0FBSyxLQUFLLFNBR2pCLEdBRGlCLFVBQWYsS0FBSyxZQUF5QyxLQUFaLEVBQUksR0FDakMsS0FBSyxVQUFVLE9BQU8sU0FBVSxHQUNyQyxNQUFPLEdBQUksS0FBUSxFQUFFLEtBQ3BCLEdBRUksRUFHVCxLQUFLLFNBQVMsYUFDWixJQUFLLEVBQ0wsTUFBTyxFQUNQLE1BQU87OztBQ2pCWCxZQUVBLFFBQU8sUUFBVSxTQUFVLEdBQ3pCLEdBQXlDLGtCQUE5QixNQUFLLEtBQUssZ0JBQ25CLE1BQU8sTUFBSyxLQUFLLGdCQUFnQixLQUFLLEtBQU0sRUFHOUMsSUFBcUIsbUJBQVYsT0FBdUIsTUFBTyxPQUFNLElBQUksS0FBSyxLQUN0RCxPQUFRLElBQ0EsTUFBRSxTQUFVLEdBQ3BCLEtBQUssU0FBUyxRQUFTLElBQ3ZCLEtBQUssTUFDUCxRQUEwQixLQUFmLEtBQUssTUFBdUIsTUFBTyxNQUFLLE1BQU0sSUFBSSxLQUFLLEtBQ2hFLE9BQVEsSUFDUCxLQUFLLFNBQVUsR0FDaEIsTUFBTyxHQUFLLFFBQ1osS0FBSyxNQUFPLFNBQVUsR0FDdEIsS0FBSyxTQUFTLFFBQVMsSUFDdkIsS0FBSyxNQUNQLElBQWdCLG1CQUFMLEdBQWtCLE1BQU8sR0FBRSxRQUFRLEtBQUssSUFBSyxHQUFNLEtBQUssU0FBVSxHQUMzRSxLQUFLLFNBQVMsUUFBUyxJQUN2QixLQUFLLE1BQ1AsTUFBTTs7O0FDdEJSLFlBb0RBLFNBQVMsUUFBTyxFQUFNLEdBQ2hCLEVBQUssS0FDUCxFQUFLLE9BQU8sYUFBYyxJQUUxQixFQUFLLGlCQUVELEVBQUssS0FBSyxXQUFXLFVBQ3ZCLEVBQUssV0FLWCxRQUFTLFlBQVcsRUFBRyxFQUFNLEdBQzNCLE9BQVEsR0FBSyxJQUFTLEVBQUssWUFBWSxRQUFRLElBQVMsR0FBSyxPQUFPLEtBQUssRUFBSyxhQUFhLFFBQVEsSUFBUyxHQS9EOUcsT0FBTyxRQUFVLFNBQVUsRUFBRyxHQUU1QixHQUFJLEdBQVEsS0FBSyxLQUFPLEtBQUssTUFBTSxLQUFLLFVBQVUsS0FBSyxRQUFVLEtBQUssS0FFdEUsSUFBc0QsVUFBbEQsT0FBTyxVQUFVLFNBQVMsS0FBSyxHQUFHLE1BQU0sR0FBSSxHQUFnQixDQUM5RCxFQUFRLEtBQUssS0FBTyxLQUFLLE1BQU0sS0FBSyxVQUFVLElBQU0sRUFDL0MsS0FBSyxPQUFNLEtBQUssTUFBUSxFQUM3QixJQUFJLEdBQU8sRUFBVSxPQUFPLEtBQ3hCLEVBQVEsRUFBVSxPQUFPLEtBRXpCLElBQ0YsS0FBSyxTQUFTLFVBQ1osS0FBTSxFQUNOLE1BQU8sSUFFVCxLQUFLLFNBQVMsV0FBVyxPQUFPLEdBQU8sSUFFdkMsS0FBSyxTQUFTLFNBQVUsR0FHMUIsS0FBSyxZQUFZLFFBQVMsT0FDckIsSUFBSSxFQUFHLENBQ1osR0FBSSxHQUFRLEtBQUssUUFBUSxFQUFFLE9BQU8sTUFFOUIsRUFBUyxFQUFFLE9BQU8sS0FFbEIsR0FDRixFQUFNLEdBQVMsRUFFZixFQUFRLEVBR0wsS0FBSyxPQUFNLEtBQUssTUFBUSxHQUV6QixHQUNGLEtBQUssU0FBUyxVQUNaLEtBQU0sRUFDTixNQUFPLElBRVQsS0FBSyxTQUFTLFdBQVcsT0FBTyxHQUFRLElBRXhDLEtBQUssU0FBUyxTQUFVLEdBRzFCLEtBQUssWUFBWSxRQUFTLEdBRzVCLE1BQU8sUUFBTyxLQUFNOzs7QUNqRHRCLFlBRUEsUUFBTyxRQUFVLFdBQ2YsR0FBSSxHQUFRLElBRVosSUFBSSxLQUFLLEtBQUssZ0JBQWlCLENBQzdCLEdBQUksR0FBVyxTQUFrQixHQUMvQixNQUFPLEdBQUUsbUJBR1AsRUFBVSxXQUNSLEVBQU0seUJBQ1IsRUFBTSx3QkFBeUIsR0FJbkMsTUFBSyxNQUFNLGdCQUFnQixpQkFBaUIsUUFBUyxHQUNyRCxTQUFTLGlCQUFpQixRQUFTLEdBQ25DLEtBQUssTUFBTSxxQkFBc0IsV0FDL0IsU0FBUyxvQkFBb0IsUUFBUyxHQUV0QyxFQUFNLE1BQU0sZ0JBQWdCLG9CQUFvQixRQUFTOzs7QUNyQi9ELFlBRUEsU0FBUyxTQUFRLEdBQXdULE9BQXRPLFFBQXJELGtCQUFYLFNBQW9ELGdCQUFwQixRQUFPLFNBQW1DLFNBQWlCLEdBQU8sYUFBYyxJQUEyQixTQUFpQixHQUFPLE1BQU8sSUFBeUIsa0JBQVgsU0FBeUIsRUFBSSxjQUFnQixRQUFVLElBQVEsT0FBTyxVQUFZLGVBQWtCLEtBQXlCLEdBRXhWLE9BQU8sUUFBVSxTQUFVLEdBQ3pCLEdBQUksR0FBTyxLQUFLLEtBQUssZ0JBQWdCLEtBQUssS0FBTSxFQUdoRCxJQUZBLEtBQUssS0FBTyxLQUFLLGFBQWEsRUFBSyxNQUUvQixNQUFNLEVBQUssT0FHYixLQUZBLFNBQVEsTUFBTSxnRUFBZ0UsT0FBTyxRQUFRLEVBQUssU0FDbEcsUUFBUSxNQUFNLGVBQWdCLEVBQUssT0FDN0IsR0FBSSxNQUdaLE1BQUssTUFBUSxTQUFTLEVBQUssT0FDM0IsV0FBVyxXQUNULEtBQUssU0FBUyxTQUFVLElBQ3hCLEtBQUssTUFBTzs7O0FDakJoQixZQUVBLFFBQU8sUUFBVSxTQUFVLEVBQVEsRUFBTyxHQUN4QyxHQUFJLEdBQWEsS0FBSyxXQUFXLElBQ04sZ0JBQVgsR0FBc0IsRUFBRSxLQUFLLEtBQUssS0FBSyxlQUFpQixFQUFFLGVBQWUsR0FBVSxXQUFhLEdBQzdHLEtBQUssRUFBTSxPQUFPLEdBQWMsTUFBUSxFQUFJLE9BQU87OztBQ0x4RCxZQUVBLElBQUksT0FBUSxRQUFRLFFBRXBCLFFBQU8sUUFBVSxTQUFVLEdBQ3pCLElBQUssS0FBSyxLQUFLLFdBRWIsV0FEQSxTQUFRLEtBQUssZ0ZBTWYsSUFBSSxLQUFLLEtBQUssZ0JBQW9DLGdCQUFYLEdBRXJDLFdBREEsU0FBUSxLQUFLLHlHQU1mLEtBQUssS0FBSyxLQUFLLGdCQUFvQyxnQkFBWCxHQUV0QyxXQURBLFNBQVEsS0FBSyx5R0FLZixJQUFJLEdBQWUsS0FBSyxLQUFLLGVBQWlCLE1BQU0sS0FBSyxNQUFPLEdBQVUsQ0FFdEUsTUFBSyxLQUNQLEtBQUssT0FBTyxhQUFjLElBRTFCLEtBQUssTUFBUSxFQUNiLEtBQUssUUFBUSxHQUFHLElBR2xCLEtBQUssWUFBWSxRQUFTLEdBRTFCLEtBQUssZUFBZSxHQUVELFVBQWYsS0FBSyxRQUNQLEtBQUs7OztBQ3ZDVCxZQUVBLFNBQVMsU0FBUSxHQUF3VCxPQUF0TyxRQUFyRCxrQkFBWCxTQUFvRCxnQkFBcEIsUUFBTyxTQUFtQyxTQUFpQixHQUFPLGFBQWMsSUFBMkIsU0FBaUIsR0FBTyxNQUFPLElBQXlCLGtCQUFYLFNBQXlCLEVBQUksY0FBZ0IsUUFBVSxJQUFRLE9BQU8sVUFBWSxlQUFrQixLQUF5QixHQUV4VixPQUFPLFFBQVUsU0FBVSxHQUN6QixHQUFJLEVBRUosSUFBSSxLQUFLLEtBQUssZUFDWixJQUFLLEdBQUksS0FBVSxHQUFPLENBQ3hCLEdBQUksR0FBYSxLQUFLLGVBQWUsRUFFckMsSUFBSSxLQUFLLGFBQWEsR0FDcEIsR0FBSSxFQUFNLElBQXNDLFdBQTNCLFFBQVEsRUFBTSxJQUF1QixDQUN4RCxHQUFJLEdBQXVDLGdCQUF4QixHQUFNLEdBQVEsTUFBcUIsT0FBTyxFQUFNLEdBQVEsTUFBTyxjQUFnQixFQUFNLEdBQVEsTUFDNUcsRUFBbUMsZ0JBQXRCLEdBQU0sR0FBUSxJQUFtQixPQUFPLEVBQU0sR0FBUSxJQUFLLGNBQWdCLEVBQU0sR0FBUSxHQUUxRyxNQUFLLG1CQUFtQixFQUFRLEVBQU8sT0FFdkMsR0FBRSxLQUFLLEtBQUssS0FBSyxlQUFpQixFQUFFLGVBQWUsR0FBVSxXQUFXLEtBQUssK0NBQWlELEtBQUssUUFBUSxZQUN6SSxPQUFRLEtBQUssV0FBVyxLQUNyQixlQU1ULEdBQUssS0FBSyxJQUFJLGNBQWMsVUFBVSxPQUFPLEVBQVksT0FFckQsRUFDRixFQUFHLE1BQVEsRUFBTSxJQUMwQixJQUFsQyxLQUFLLFFBQVEsUUFBUSxJQUM5QixRQUFRLE1BQU0sd0RBQXdELE9BQU8sRUFBUSwwQkFHcEYsQ0FDTCxHQUFJLEdBQUssS0FBSyxJQUFJLGNBQWMsNEJBQzVCLEtBQUksRUFBRyxNQUFROzs7QUNwQ3ZCLFlBRUEsU0FBUyxTQUFRLEdBQXdULE9BQXRPLFFBQXJELGtCQUFYLFNBQW9ELGdCQUFwQixRQUFPLFNBQW1DLFNBQWlCLEdBQU8sYUFBYyxJQUEyQixTQUFpQixHQUFPLE1BQU8sSUFBeUIsa0JBQVgsU0FBeUIsRUFBSSxjQUFnQixRQUFVLElBQVEsT0FBTyxVQUFZLGVBQWtCLEtBQXlCLEdBRXhWLE9BQU8sUUFBVSxTQUFVLEdBQ3pCLEtBQUssTUFBdUIsV0FBZixRQUFRLEdBQWtCLEVBQUUsT0FBTyxNQUFRLEVBQ3hELEtBQUssWUFBWSxVQUFXLEtBQUssT0FDakMsS0FBSyxTQUFTLFFBQVMsU0FBUyxLQUFLLFFBQ3JDLEtBQUssUUFBUTs7O0FDUmYsWUFFQSxRQUFPLFFBQVUsU0FBVSxFQUFRLEdBQ2pDLEtBQUssUUFBUSxPQUFTLEVBQ3RCLEtBQUssUUFBUSxVQUFZLEVBQ3pCLEtBQUssWUFBWSxXQUNmLE9BQVEsRUFDUixVQUFXLElBR00sVUFBZixLQUFLLFFBQ1AsS0FBSzs7O0FDWFQsWUFFQSxRQUFPLFFBQVUsU0FBVSxFQUFNLEdBQy9CLEVBQU8sR0FBYyxLQUFLLE1BQU0sS0FBSyxNQUNoQyxLQUFLLEtBQUssV0FBVyxXQUFVLEtBQUssTUFBTSxXQUFXLEtBQU8sR0FDakUsS0FBSyxLQUFPLEVBQ1osS0FBSyxZQUFZLE9BQVEsR0FDTixVQUFmLEtBQUssUUFBdUIsR0FBZ0IsS0FBSzs7O0FDUHZELFlBZ0RBLFNBQVMsa0JBQWlCLEVBQU0sR0FDOUIsR0FBSSxJQUFRLEtBQUssTUFBTSxLQUFLLFVBQVUsSUFFdEMsT0FEQSxHQUFPLEVBQUssT0FBTyxFQUFVLEVBQUssU0FoRHBDLE9BQU8sUUFBVSxTQUFVLEdBQ3pCLEdBQUksR0FBYSxLQUFLLFFBQVEsT0FDMUIsRUFBYSxLQUFLLFFBQVEsU0FDekIsTUFBSyxpQkFBaUIsS0FBYSxLQUFLLGlCQUFpQixNQUM5RCxJQUFJLEdBQVEsS0FBSyxpQkFBaUIsRUFFbEMsSUFBSSxJQUFlLEdBQ1osRUFBTSxRQUFVLEVBRW5CLEtBQUssUUFBUSxXQUFhLEtBQUssUUFBUSxXQUd2QyxLQUFLLFFBQVUsRUFBTSxRQUNyQixLQUFLLG9CQUNMLEtBQUssaUJBQWlCLEtBQUssUUFBUSxRQUFVLE9BRTFDLENBQ0wsR0FBSSxHQUFZLEVBQU0sT0FBTyxTQUFVLEdBQ3JDLE1BQU8sR0FBSSxRQUFVLElBQ3BCLEVBRUMsR0FDRyxFQUFVLFVBUWIsRUFBVSxXQUFhLEVBQVUsV0FOakMsS0FBSyxpQkFBaUIsR0FBYyxFQUFNLE9BQU8sU0FBVSxHQUN6RCxNQUFPLEdBQUksUUFBVSxJQUVsQixLQUFLLGlCQUFpQixHQUFZLFNBQVEsS0FBSyxzQkFPdEQsRUFBTSxNQUNKLE9BQVEsRUFDUixXQUFXLElBTWpCLEtBQUssS0FBTyxLQUFLLE1BQ2pCLEtBQUssU0FBUyxTQUFVLGlCQUFpQixLQUFLLFFBQVMsS0FBSzs7O0FDN0M5RCxZQUVBLFFBQU8sUUFBVSxTQUFVLEdBQ3pCLE1BQUksTUFBSyxLQUFLLGVBQ0wsS0FBSyxLQUFLLGVBQWUsU0FBUyxJQUd2QyxLQUFLLEtBQUssZ0JBQ0osS0FBSyxLQUFLLGNBQWMsU0FBUzs7O0FDUjdDLFlBRUEsUUFBTyxRQUFVLFNBQVUsR0FDekIsR0FBSSxHQUFNLEtBQUssS0FBSyxTQUFTLEtBQU8sR0FDcEMsSUFBSyxLQUFLLFNBQVMsR0FBbkIsQ0FNQSxHQUpJLEtBQUssS0FBSyxTQUFTLEtBQU8sS0FBSyxpQkFBaUIsS0FDbEQsR0FBTyxLQUFLLEtBQUssU0FBUyxHQUFLLEtBRzdCLEtBQUssY0FBZ0IsS0FBSyxRQUFRLFFBQVUsS0FBSyxpQkFBaUIsS0FBSyxRQUFRLFFBQVMsQ0FDMUYsR0FBSSxHQUFNLEtBQUssaUJBQWlCLEtBQUssUUFBUSxRQUFRLE9BQU8sU0FBVSxHQUNwRSxNQUFPLEdBQUUsU0FBVyxJQUNuQixFQUNDLEtBQUssR0FBTyxFQUFJLFVBQVksS0FBSyxLQUFLLFNBQVMsR0FBSyxLQUFLLEtBQUssU0FBUyxNQU83RSxNQUpJLElBQVUsS0FBSyxRQUFRLFNBQ3pCLEdBQWlDLEdBQTFCLEtBQUssUUFBUSxVQUFpQixLQUFLLEtBQUssU0FBUyxHQUFLLEtBQUssS0FBSyxTQUFTLE1BRzNFOzs7QUNyQlQsWUFFQSxRQUFPLFFBQVUsU0FBVSxHQUN6QixHQUFJLEdBQUksS0FBSyxTQUFTLEdBQVUsdUJBQXlCLEVBRXpELE9BREEsSUFBSyxLQUFLLFlBQVk7OztBQ0p4QixZQUVBLFFBQU8sUUFBVSxTQUFVLEdBRXpCLFFBRDJDLGlCQUF0QixNQUFLLEtBQUssV0FBeUIsS0FBSyxLQUFLLFdBRTNELEtBQUssS0FBSyxTQUFTLFFBQVEsSUFBVzs7O0FDTC9DLFlBRUEsUUFBTyxRQUFVLFNBQVUsRUFBTyxHQUdoQyxHQUZJLEdBQUcsRUFBRSxrQkFFTCxLQUFLLGNBQWMsU0FBUyxHQUFRLENBQ3RDLEdBQUksR0FBUSxLQUFLLGNBQWMsUUFBUSxFQUN2QyxNQUFLLGNBQWMsT0FBTyxFQUFPLE9BRWpDLE1BQUssY0FBYyxLQUFLOzs7QUNUNUIsWUFFQSxRQUFPLFFBQVUsU0FBVSxHQUN6QixHQUFJLEdBQVEsSUFPWixJQUxLLEtBQUssc0JBQ1IsS0FBSyxtQkFBcUIsS0FBSyxNQUFNLEtBQUssVUFBVSxLQUFLLGFBQ3pELEtBQUsscUJBQXNCLEdBR3pCLEtBQUssbUJBQW1CLFNBQVMsR0FBUyxDQUU1QyxHQUF1QyxJQUFuQyxLQUFLLG1CQUFtQixPQUFjLE1BQzFDLElBQUksR0FBUSxLQUFLLG1CQUFtQixRQUFRLEVBQzVDLE1BQUssbUJBQW1CLE9BQU8sRUFBTyxPQUV0QyxNQUFLLG1CQUFtQixLQUFLLEVBRy9CLE1BQUssWUFBWSx1QkFBdUIsR0FDeEMsS0FBSyxZQUFZLHFCQUFzQixLQUFLLG9CQUM1QyxLQUFLLFVBQVUsV0FDYixFQUFNLGVBQWUsRUFBTTs7O0FDdEIvQixZQUVBLFFBQU8sUUFBVSxXQUNmLEtBQUssd0JBQTBCLEtBQUs7OztBQ0h0QyxZQUVBLFFBQU8sUUFBVSxXQUNYLEtBQUssUUFBUSxRQUFVLEtBQUssS0FBSyxRQUNuQyxLQUFLLFNBQVMsS0FBSyxLQUFLLFNBQVMsR0FFakMsS0FBSyxTQUFTLEtBQUssS0FBSyxTQUFVLEtBQUssUUFBUTs7O0FDTm5ELFlBRUEsUUFBTyxRQUFVLFdBQ2YsS0FBSyxLQUFLLFFBQVEsU0FBVSxFQUFLLEdBQy9CLEtBQUssS0FBSyxZQUFZLFFBQVEsU0FBVSxHQUN0QyxFQUFJLEdBQVUsRUFBSSxHQUFVLE9BQU8sRUFBSSxHQUFTLEtBQUssS0FBSyxnQkFBa0IsSUFDNUUsS0FBSyxRQUNQLEtBQUs7OztBQ1BULFlBRUEsUUFBTyxRQUFVLFNBQVUsRUFBSyxHQUM5QixHQUFLLEtBQUssS0FBSyxXQUFjLEtBQUssWUFBbEMsQ0FFQSxJQUNFLEdBQUksR0FBZSxLQUFLLE1BQU0sS0FBSyxRQUFRLFFBQVEsS0FBSyxXQUN4RCxNQUFPLEdBQ1AsR0FBSSxHQUFlLEtBQUssWUFHMUIsRUFBYSxHQUFPLEVBQ3BCLEtBQUssUUFBUSxRQUFRLEtBQUssU0FBVSxLQUFLLFVBQVU7OztBQ1pyRCxZQUlBLFNBQVMsd0JBQXVCLEdBQU8sTUFBTyxJQUFPLEVBQUksV0FBYSxHQUFRLFFBQVcsR0FGekYsR0FBSSxNQUFPLHVCQUF1QixRQUFRLFVBSTFDLFFBQU8sUUFBVSxXQUNmLEdBRUksR0FGQSxFQUFRLElBSVIsTUFBSyxLQUFLLGtCQUNaLEtBQWMsUUFBRSxPQUVoQixLQUFjLFFBQUUsWUFHZCxLQUFLLE9BQVMsS0FBSyxLQUFLLGVBQzFCLEtBQUssT0FBTyxpQkFBaUIsS0FBSyxNQUdoQyxLQUFLLEtBQUssZ0JBQ1osS0FBSyxrQkFBa0IsUUFBUSxTQUFVLElBQ3ZDLEVBQUssRUFBRSxFQUFNLEtBQUssS0FBSyxlQUFpQixFQUFFLGVBQWUsR0FBVSxXQUFXLEtBQUsscUJBQzNFLEVBQUc7OztBQ3hCakIsWUFFQSxRQUFPLFNBQ0wsa0JBQW1CLFFBQVEsbUNBQzNCLFdBQVksUUFBUSwyQkFDcEIsY0FBZSxRQUFRLDhCQUN2QixLQUFNLFFBQVEsb0JBQ2QsVUFBVyxRQUFRLDBCQUNuQixRQUFTLFFBQVEsdUJBQ2pCLGtCQUFtQixRQUFRLGtDQUMzQixrQkFBbUIsUUFBUSxrQ0FDM0IsWUFBYSxRQUFRLDZCQUNyQixRQUFTLFFBQVEsdUJBQ2pCLGlCQUFrQixRQUFRLGtDQUMxQixTQUFVLFdBRVIsTUFBTyxjQURHLEtBQUssS0FBTyxLQUFLLEtBQU8sS0FBSyxLQUd6QyxLQUFNLFdBQ0osTUFBTyxNQUFLOzs7QUNuQmhCLFlBb0JBLFNBQVMsbUJBQWtCLEdBQ3pCLEdBQ0ksR0FDQSxFQUNBLEVBSEEsSUFLSixLQUFLLEdBQUksS0FBVSxHQUFnQixDQUNqQyxFQUFXLFlBQVksRUFBZSxHQUV0QyxLQUNFLEVBQVMsVUFBVSxFQUFlLElBQ2xDLEVBQVEsU0FBUyxFQUFRLEdBQ3pCLEVBQUksR0FBVSxFQUFNLFFBQVEsSUFDNUIsTUFBTyxHQUNQLFFBQVEsS0FBSyxrQkFBb0IsSUFJckMsTUFBTyxHQUdULFFBQVMsVUFBUyxFQUFRLEdBQ3hCLEdBQUksSUFDRixTQUFVLEtBQU0sTUFDaEIsUUFBUyxJQUFLLE1BQ2QsUUFBUyxFQUFHLEtBQ1osU0FBVSxJQUFLLE1BQ2YsU0FBVSxJQUFLLEtBQ2YsU0FBVSxJQUFLLEtBQ2YsU0FBVSxFQUFHLEtBR2YsUUFBUSxHQUNOLElBQUssTUFDSCxPQUFRLEVBQVEsR0FBUSxHQUFJLEtBRTlCLEtBQUssTUFDSCxPQUFRLEVBQUcsRUFBUSxHQUFRLEdBRTdCLFNBQ0UsTUFBTyxHQUFRLElBSXJCLFFBQVMsYUFBWSxHQUNuQixHQUFJLEdBQVMsRUFBSSxNQUFNLElBQ3ZCLFFBQUssTUFBTyxNQUFPLE9BQU8sUUFBUSxFQUFPLEtBQU8sR0FBVSxFQUFPLEdBSW5FLFFBQVMsV0FBVSxHQUNqQixHQUFJLEdBQVMsRUFBSSxNQUFNLElBQ3ZCLE9BQU8sR0FBTyxPQUFTLEVBQUksRUFBTyxHQUFLLEVBQU8sR0F0RWhELEdBQUksVUFBVyxRQUFRLHVCQUVuQixtQkFBcUIsUUFBUSwyQkFFakMsUUFBTyxRQUFVLFNBQVUsR0FDckIsRUFBSyxLQUNQLG1CQUFtQixHQUVuQixFQUFLLE1BQVEsRUFBSyxLQUFLLFFBR3JCLFNBQVMsRUFBSyxLQUFLLGlCQUFxQyxtQkFBWCxVQUNqRCxFQUFLLGVBQWlCLGtCQUFrQixFQUFLLEtBQUssZ0JBQ2xELE9BQU8saUJBQWlCLFNBQVUsV0FDaEMsRUFBSyxZQUFjLE9BQU8sWUFDMUIsS0FBSzs7O0FDakJULFlBYUEsU0FBUyxVQUlQLElBQUssR0FIRCxHQUFPLEdBQ1AsRUFBVyxpRUFFTixFQUFJLEVBQUcsRUFBSSxFQUFHLElBQ3JCLEdBQVEsRUFBUyxPQUFPLEtBQUssTUFBTSxLQUFLLFNBQVcsRUFBUyxRQUc5RCxPQUFPLEdBbkJULE9BQU8sUUFBVSxXQUNmLE9BQ0UsR0FBSSxTQUNKLG1CQUNBLGlCQUNBLFlBQStCLG1CQUFYLFFBQXlCLE9BQU8sV0FBYSxLQUNqRSxvQkFDQTs7O0FDVEosWUFFQSxRQUFPLFNBQ0wsVUFBVyxRQUFRLHlCQUNuQixXQUFZLFFBQVEsMEJBQ3BCLGtCQUFtQixRQUFRLGtDQUMzQixZQUFhLFFBQVEsMkJBQ3JCLGNBQWUsUUFBUSw2QkFDdkIscUJBQXNCLFFBQVEscUNBQzlCLFFBQVMsUUFBUSxzQkFDakIsY0FBZSxRQUFRLDhCQUN2QixXQUFZLFFBQVEsMEJBQ3BCLGtCQUFtQixRQUFRLGtDQUMzQixTQUFVLFFBQVEsdUJBQ2xCLGFBQWMsUUFBUSw0QkFDdEIsWUFBYSxRQUFRLDRCQUNyQixnQkFBaUIsUUFBUSxnQ0FDekIsVUFBVyxRQUFRLHlCQUNuQixRQUFTLFFBQVEsdUJBQ2pCLFNBQVUsUUFBUSx3QkFDbEIsZUFBZ0IsUUFBUSw4QkFDeEIsV0FBWSxRQUFRLHlCQUNwQixhQUFjLFFBQVEsNkJBQ3RCLGFBQWMsUUFBUSw2QkFDdEIsYUFBYyxRQUFRLDZCQUN0QixlQUFnQixRQUFRLGdDQUN4QixXQUFZLFFBQVEsMEJBQ3BCLGVBQWdCLFFBQVEsK0JBQ3hCLGFBQWMsUUFBUSw0QkFDdEIsV0FBWSxRQUFRLDBCQUNwQixPQUFRLFFBQVEscUJBQ2hCLGNBQWUsUUFBUSw4QkFDdkIsU0FBVSxRQUFRLHdCQUNsQixpQkFBa0IsUUFBUSxrQ0FDMUIsU0FBVSxRQUFRLHVCQUNsQixlQUFnQixRQUFRLCtCQUN4QixxQkFBc0IsUUFBUSxzQ0FDOUIsWUFBYSxRQUFRLDJCQUNyQixnQkFBaUIsUUFBUSxnQ0FDekIsVUFBVyxRQUFRLDBCQUNuQixVQUFXLFFBQVEseUJBQ25CLFlBQWEsUUFBUSwyQkFDckIsWUFBYSxRQUFRLDJCQUNyQixRQUFTLFFBQVEsdUJBQ2pCLGFBQWMsUUFBUSw0QkFDdEIsaUJBQWtCLFFBQVEsa0NBQzFCLGFBQWMsUUFBUSwyQkFDdEIsZUFBZ0IsUUFBUSw4QkFDeEIsaUJBQWtCLFFBQVEsK0JBQzFCLHFCQUFzQixRQUFRLHFDQUM5Qix1QkFBd0IsUUFBUSxzQ0FDaEMsWUFBYSxRQUFRLDBCQUNyQixjQUFlLFFBQVEsNEJBQ3ZCLHNCQUF1QixRQUFRLHFDQUMvQixxQkFBc0IsUUFBUSxxQ0FDOUIsbUJBQW9CLFFBQVEsa0NBQzVCLHVCQUF3QixRQUFRLHNDQUNoQyxXQUFZLFFBQVEsMEJBQ3BCLGlDQUFrQyxRQUFRLGtEQUMxQyxVQUFXLFFBQVEsd0JBQ25CLGVBQWdCLFFBQVEsOEJBQ3hCLHdCQUF5QixRQUFROzs7QUM3RG5DLFlBSUEsU0FBUyx3QkFBdUIsR0FBTyxNQUFPLElBQU8sRUFBSSxXQUFhLEdBQVEsUUFBVyxHQUV6RixRQUFTLGlCQUFnQixFQUFLLEVBQUssR0FBaUssTUFBcEosS0FBTyxHQUFPLE9BQU8sZUFBZSxFQUFLLEdBQU8sTUFBTyxFQUFPLFlBQVksRUFBTSxjQUFjLEVBQU0sVUFBVSxJQUFrQixFQUFJLEdBQU8sRUFBZ0IsRUFKM00sR0FBSSxRQUFTLHVCQUF1QixRQUFRLFNBTTVDLFFBQU8sUUFBVSxTQUFVLEdBQ3pCLEdBQUksR0FBUSxJQUVaLE9BQU8sVUFBVSxHQUNmLElBQUssRUFBTSxLQUFLLGlCQUFtQixFQUFNLEtBQUssV0FBWSxNQUFPLEVBRWpFLElBQUksR0FBYSxRQUFRLGlCQUFpQixLQUFLLEVBQU8sRUFBRyxFQUFRLE9BRTdELEVBQWEsUUFBUSxpQkFBaUIsS0FBSyxFQUFPLEdBRWxELEVBQWEsUUFBUSxpQkFBaUIsS0FBSyxFQUFPLEVBQUcsRUFBUSxRQUU3RCxJQW1DSixPQWpDSSxHQUFNLGFBQWUsRUFBTSxLQUFLLHNCQUF3QixFQUFNLEtBQUsscUJBQXFCLEVBQVEsS0FBSyxFQUFFLE9BRTNHLEVBQU0sV0FBVyxJQUFJLFNBQVUsR0FDN0IsR0FBSSxHQUFTLEVBRWIsSUFBSSxFQUFNLFdBQVcsR0FDbkIsUUFBUSxHQUNOLElBQUssR0FBTSxhQUFhLEdBQ3RCLEVBQVMsRUFBVyxFQUNwQixNQUVGLEtBQUssR0FBTSxhQUFhLEdBQ3RCLEVBQVMsRUFBVyxFQUNwQixNQUVGLEtBQUssR0FBTSxhQUFhLEdBQ3RCLEVBQVMsRUFBVyxPQUs2QixLQUE1QyxFQUFNLE9BQU8sV0FBVyxPQUFPLE1BQ3hDLEVBQVMsRUFBUyxFQUFFLE9BQVEsRUFBUSxFQUFNLE9BQU8sV0FBVyxPQUFPLE1BQWEsRUFBTSxPQUFPLFdBQVcsT0FBTyxLQUdqSCxFQUFRLEtBQUssRUFBRSxNQUNiLE1BQVMsRUFBTSxZQUFZLEtBQ3pCLEVBQUUsTUFBTyxpQkFDWCxNQUFTLDRCQUNSLFFBQVMsY0FBZ0IsRUFBUyxvQkFBcUIsU0FHeEQsRUFBTSxjQUFnQixFQUFNLEtBQUssc0JBQXdCLEVBQU0sS0FBSyxxQkFBcUIsRUFBUSxLQUFLLEVBQUUsT0FDckcsRUFBRSxNQUNQLE1BQVMsMkJBQ1A7OztBQ3pEUixZQUVBLElBQUksaUJBQWtCLFFBQVEsc0JBRTFCLG9CQUFzQixRQUFRLDBCQUVsQyxRQUFPLFFBQVUsU0FBVSxHQUN6QixHQUFJLEdBQVEsSUFFWixPQUFPLFVBQVUsR0FDZixHQUFJLEdBQU8sRUFBTSxRQUFRLElBQUksU0FBVSxHQUNyQyxNQUFPLHFCQUFvQixFQUFHLEVBQVMsRUFBRSxLQUN2QyxNQUFTLEVBQVEsU0FBUyxLQUMxQixPQUNFLEtBQU0sS0FFUixJQUNFLE1BQVMsV0FDUCxNQUFPLEdBQU0sYUFBYSxPQUc1QixFQUFFLFNBQ0osT0FDRSxLQUFNLFdBQ04sU0FBVSxFQUFNLFlBQVksSUFFOUIsVUFDRSxNQUFTLEVBQ1QsUUFBVyxFQUFNLFdBQVcsU0FBUyxNQUVyQyxFQUFNLFdBQVcsT0FHdkIsT0FBTyxHQUFFLE9BQ1AsSUFBSyxrQkFDTCxNQUFTLEdBQUcsT0FBTyxFQUFRLFNBQVMsVUFBVyxLQUFLLE9BQU8sRUFBUSxNQUFPLGtDQUN4RSxFQUFFLFVBQ0osT0FDRSxLQUFNLFVBRVIsTUFBUyxHQUFHLE9BQU8sRUFBUSxPQUFRLEtBQUssT0FBTyxFQUFRLFNBQVMsU0FDaEUsSUFDRSxNQUFTLEVBQU0sdUJBQXVCLEtBQUssTUFFM0MsRUFBTSxRQUFRLFdBQVksRUFBRSxRQUM5QixNQUFTLEdBQUcsT0FBTyxFQUFRLEtBQU0sS0FBSyxPQUFPLEVBQVEsU0FDbkQsRUFBRSxLQUNKLE1BQVMsRUFBUSxTQUFTLFlBQ3BCLGdCQUFnQixLQUFLLEVBQU8sRUFBRyxFQUFTOzs7QUNoRHBELFlBRUEsUUFBTyxRQUFVLFNBQVUsR0FDekIsR0FBSSxHQUFRLElBRVosT0FBTyxVQUFVLEdBQ2YsTUFBTyxHQUFFLE9BQ1AsTUFBUyx5QkFDVCxPQUNFLEdBQUksY0FBZ0IsRUFBUyxhQUU3QixFQUFFLFFBQ0osTUFBUyxrQ0FDUCxFQUFNLFFBQVEsWUFDaEIsT0FBUSxFQUFNLFdBQVc7OztBQ2QvQixZQUVBLFFBQU8sUUFBVSxTQUFVLEVBQUcsRUFBUyxHQUNyQyxNQUEwQixVQUF0QixFQUFRLFVBQ0gsRUFHRixFQUFFLE1BQU87OztBQ1BsQixZQUVBLFFBQU8sUUFBVSxTQUFVLEdBQ3pCLEdBQUksR0FBUSxJQUVaLE9BQU8sWUFDTCxHQUFJLEVBQU0sTUFBUSxHQUFLLEVBQU0sS0FBSyxXQUFXLFNBQVUsQ0FDckQsR0FBSSxHQUFVLFNBQVMsRUFBTSxPQUN6QixHQUFRLEVBQU0sS0FBTyxHQUFLLEVBQVUsRUFDcEMsRUFBSyxFQUFNLE1BQVEsRUFBTSxXQUFhLEVBQU0sTUFBUSxFQUFPLEVBQVUsRUFFckUsRUFBUSxFQUFNLEtBQUssTUFBTSxNQUFNLE1BQU0sS0FFckMsRUFBSSxLQUFLLElBQW1CLEdBQWYsRUFBTSxNQUFhLEVBQXdCLEdBQXBCLEVBQU0sV0FBa0IsRUFBSSxFQUFHLEVBQU0sT0FBUyxHQUNsRixFQUFRLEVBQU0sR0FBRyxRQUFRLFVBQVcsRUFBTSxPQUFPLFFBQVEsU0FBVSxHQUFNLFFBQVEsT0FBUSxFQUM3RixPQUFPLEdBQUUsT0FDUCxNQUFTLGtCQUNQLEVBQUUsS0FDSixNQUFTLHlCQUNQLE1BR04sTUFBTzs7O0FDdEJYLFlBRUEsSUFBSSxVQUFXLFFBQVEsV0FFdkIsUUFBTyxRQUFVLFNBQVUsR0FDekIsR0FBSSxHQUFRLElBRVosT0FBTyxVQUFVLEVBQWEsR0FJNUIsSUFBSyxHQUZELEdBREEsS0FHSyxFQUFNLEVBQUcsR0FBTyxFQUFNLFdBQVksSUFBTyxDQUNoRCxHQUFJLEdBQVcsRUFBTSxNQUFRLENBQzdCLEdBQU0sS0FBSyxFQUFFLFVBQ1gsVUFDRSxNQUFTLEVBQ1QsU0FBWSxLQUVaLEtBR04sTUFBTyxHQUFFLFVBQ1AsTUFBUyxHQUFHLE9BQU8sRUFBYSx3QkFDaEMsYUFDRSxLQUFNLE9BQ04sTUFBTyxFQUFNLFdBQWEsSUFFNUIsT0FDRSxLQUFNLE9BQ04sR0FBSSxHQUVOLElBQUssT0FDTCxVQUNFLE1BQVMsRUFBTSxNQUVqQixJQUNFLE9BQVUsRUFBTSxRQUFRLEtBQUssRUFBTyxNQUFNLE1BRTFDOzs7QUN0Q1IsWUFFQSxRQUFPLFFBQVUsU0FBVSxFQUFHLEVBQVMsR0FDckMsTUFBMEIsVUFBdEIsRUFBUSxVQUNILEVBQUUsT0FDUCxNQUFTLEVBQVEsU0FBUyxLQUMxQixNQUFPLEtBQUssdUJBQXlCLGdCQUFrQixpQkFDckQsRUFBRSxPQUNKLE1BQVMsRUFBUSxTQUFTLFVBQ3hCLE1BR29CLGVBQXRCLEVBQVEsVUFDSCxFQUFFLE9BQ1AsTUFBUyxFQUFRLFNBQVMsS0FDMUIsTUFBTyxLQUFLLHVCQUF5QixnQkFBa0IsaUJBQ3JELElBR0MsRUFBRSxNQUNQLE1BQVMsRUFBUSxTQUFTLEtBQzFCLE1BQU8sS0FBSyx1QkFBeUIsZ0JBQWtCLGlCQUNyRDs7O0FDdEJOLFlBRUEsUUFBTyxRQUFVLFNBQVUsR0FDekIsR0FBSSxHQUFRLElBRVosT0FBTyxVQUFVLEdBQ2YsR0FBSSxHQUFPLEVBRVAsRUFBYyxRQUFRLGtCQUFrQixFQUFHLEdBRTNDLElBOEJKLE9BN0JJLEdBQU0sYUFBZSxFQUFNLEtBQUssc0JBQXdCLEVBQU0sS0FBSyxxQkFBcUIsRUFBUyxLQUFLLEVBQUUsT0FFNUcsRUFBTSxXQUFXLElBQUksU0FBVSxHQUM3QixFQUFTLEtBQUssRUFBRSxNQUNkLElBQ0UsU0FBWSxTQUFrQixHQUNkLFVBQVYsRUFBRSxLQUNKLEVBQUssY0FBYyxLQUFLLEVBQU0sRUFBUSxNQUcxQyxNQUFTLFNBQWUsR0FDSyxrQkFBdkIsRUFBRSxPQUFPLFdBQ1gsRUFBSyxjQUFjLEtBQUssRUFBTSxFQUFRLE9BSTVDLE1BQVMsS0FBSyxjQUFjLEdBQzVCLE9BQ0UsU0FBVSxPQUVWLEVBQUUsUUFDSixNQUFTLHFCQUNULE9BQ0UsTUFBTyxLQUFLLGtCQUFrQixFQUFRLE1BRXRDLEtBQUssV0FBVyxFQUFRLEtBQU0sRUFBWSxLQUFLLEtBQU0sT0FDekQsS0FBSyxJQUVILEVBQU0sY0FBZ0IsRUFBTSxLQUFLLHNCQUF3QixFQUFNLEtBQUsscUJBQXFCLEVBQVMsS0FBSyxFQUFFLE9BQ3RHOzs7QUN4Q1gsWUFFQSxRQUFPLFFBQVUsU0FBVSxFQUFHLEdBQzVCLEdBQUksR0FBUSxJQUVaLE9BQU8sVUFBVSxHQUNmLEdBQ0ksR0FEQSxLQUVBLEVBQXlCLFVBQWhCLEVBQU0sT0FBcUIsRUFBTSxPQUFPLEtBQUssRUFBTyxFQUFNLE1BQVEsRUFBTSxhQUFhLEtBQUssRUFldkcsT0Fia0IsR0FBTSxLQUFLLFlBQVksR0FBUSxPQUFPLFNBQVUsR0FDaEUsT0FBUSxFQUFLLE9BR0gsSUFBSSxTQUFVLEdBQ3hCLEVBQVcsRUFBTyxJQUFNLEVBQU0sTUFBTSxJQUFtQyxLQUF4QixFQUFNLE1BQU0sR0FDM0QsRUFBUSxLQUFLLEVBQUUsVUFDYixVQUNFLE1BQVMsRUFBTyxHQUNoQixTQUFZLEtBRVosRUFBTyxVQUVOLEVBQUUsT0FDUCxNQUFTLHlCQUNULE9BQ0UsR0FBSSxjQUFnQixFQUFTLGFBRTdCLEVBQUUsVUFDSixNQUFTLEVBQ1QsSUFDRSxPQUFVLEdBRVosT0FDRSxLQUFNLEVBQU0sZUFBZSxJQUU3QixVQUNFLE1BQVMsRUFBTSxNQUFNLE1BRXJCLEVBQUUsVUFDSixPQUNFLE1BQU8sTUFFUCxFQUFNLFFBQVEsaUJBQ2hCLE9BQVEsRUFBTSxLQUFLLFNBQVMsR0FBVSxFQUFNLEtBQUssU0FBUyxHQUFVLE1BQ2hFOzs7QUM3Q1YsWUFFQSxJQUFJLFVBQVcsUUFBUSxXQUV2QixRQUFPLFFBQVUsU0FBVSxHQUN6QixHQUFJLEdBQVEsSUFFWixPQUFPLFVBQVUsRUFBUyxHQUN4QixHQUFJLEdBQXlCLFVBQWhCLEVBQU0sT0FBcUIsRUFBTSxPQUFPLEtBQUssRUFBTyxFQUFNLE1BQVEsRUFBTSxhQUFhLEtBQUssRUFDdkcsT0FBTyxHQUFFLFNBQ1AsTUFBUyw0QkFBNEIsT0FBTyxFQUFRLE1BQU8sS0FBSyxPQUFPLEVBQVEsT0FDL0UsT0FDRSxLQUFNLE9BQ04sWUFBYSxFQUFNLFFBQVEscUJBQzNCLEdBQUksRUFDSixhQUFjLE9BRWhCLElBQ0UsTUFBUyxFQUFNLEtBQUssU0FBVyxTQUFTLEVBQVEsRUFBTSxLQUFLLFVBQVk7OztBQ2xCL0UsWUFFQSxRQUFPLFFBQVUsU0FBVSxHQUN6QixHQUFJLEdBQVEsSUFFWixPQUFPLFVBQVUsR0FDZixHQUFJLEVBQU0sS0FBSyxZQUFjLEVBQU0sS0FBSyxXQUFXLFNBQVUsTUFBTyxFQUNwRSxJQUFJLElBQ0YsTUFBTyxFQUNQLE1BQU8sRUFBTSxLQUFLLFdBQVcsTUFDN0IsaUJBQWtCLEVBQU0sS0FBSyxXQUFXLElBQ3hDLGVBQWdCLEVBQU0sS0FBSyxXQUFXLEtBQ3RDLE9BQ0UsTUFBTyxFQUFNLEtBQUssTUFBTSxNQUN4QixNQUFPLEVBQU0sS0FBSyxNQUFNLE1BQ3hCLEtBQU0sRUFBTSxLQUFLLE1BQU0sT0FHdkIsRUFBTyxFQUFNLEtBQU8sRUFBTSxLQUFPLEVBQU0sRUFDM0MsT0FBTyxHQUFFLGNBQ1AsSUFBSyxhQUNMLE9BQ0UsUUFBUyxFQUNULElBQU8sRUFDUCxLQUFNLEVBQU0sS0FDWixRQUFTLEVBQU0sTUFDZixXQUFZLFNBQVMsRUFBTSxRQUU3QixJQUNFLFNBQVksRUFBTSxjQUFjLEtBQUs7OztBQzdCN0MsWUFFQSxRQUFPLFFBQVUsU0FBVSxHQUN6QixHQUFJLEdBQVEsS0FFUixJQVlKLE9BWEEsTUFBSyxLQUFLLGNBQWMsTUFBTSxTQUFVLEdBQ3RDLEdBQUksR0FBYyxHQUFTLEVBQU0sTUFDN0IsRUFBVyxFQUFNLE9BQVMsR0FBUyxHQUFlLEVBQU0sTUFBUSxDQU9wRSxPQU5BLEdBQWMsS0FBSyxFQUFFLFVBQ25CLFVBQ0UsTUFBUyxFQUNULFNBQVksS0FFWixNQUNJLElBRUg7OztBQ2pCVCxZQUVBLFFBQU8sUUFBVSxTQUFVLEdBQ3pCLEdBQUksR0FBUSxJQUVaLE9BQU8sVUFBVSxFQUFlLEVBQUssR0FDbkMsTUFBTyxHQUFFLFVBQ1AsTUFBUyxFQUNULE9BQ0UsS0FBTSxRQUNOLEdBQUksR0FFTixVQUNFLE1BQVMsRUFBTSxPQUVqQixJQUNFLE9BQVUsRUFBTSxTQUFTLEtBQUssTUFFOUI7OztBQ2xCUixZQU1BLFNBQVMsd0JBQXVCLEdBQU8sTUFBTyxJQUFPLEVBQUksV0FBYSxHQUFRLFFBQVcsR0FvSnpGLFFBQVMsU0FBUSxFQUFLLEdBQ3BCLE1BQU8sVUFBVSxHQUNmLEdBQUksR0FBUyxJQUVULEdBQ0YsS0FBSyxRQUFRLE1BQ1gsR0FBSSxFQUFJLEtBQUssS0FBSyxXQUNsQixPQUFRLEVBQ1IsY0FBZSxFQUFJLEtBR3JCLEtBQUssUUFBVSxLQUFLLFFBQVEsT0FBTyxTQUFVLEdBQzNDLE1BQU8sR0FBRSxLQUFPLEVBQUksRUFBTyxLQUFLLGNBTXhDLFFBQVMsU0FBUSxFQUFLLEdBQ3BCLE1BQU8sWUFDTCxHQUFJLEdBQVMsSUFFYixPQUFPLE1BQUssUUFBUSxLQUFLLFNBQVUsR0FDakMsTUFBTyxHQUFFLEtBQU8sRUFBSSxFQUFPLEtBQUssWUFBYyxFQUFFLFNBQVcsS0FLakUsUUFBUyxXQUFVLEVBQUssR0FDdEIsTUFBTyxZQUNMLEdBQUksR0FBUyxLQUVULEVBQVUsS0FBSyxRQUFRLEtBQUssU0FBVSxHQUN4QyxNQUFPLEdBQUUsS0FBTyxFQUFJLEVBQU8sS0FBSyxhQUMvQixhQUNILEdBQUksR0FBVSxHQUlsQixRQUFTLGFBQVksRUFBSyxHQUN4QixNQUFPLFVBQVUsR0FDZixHQUFJLEdBQVMsS0FFVCxFQUFTLEVBQUksRUFDakIsR0FBSSxHQUFVLFNBQVMsRUFDdkIsSUFBSSxJQUFPLEVBQUksT0FBZ0IsU0FBRyxLQUFLLE1BQU0sSUFBSSxTQUFVLEdBQ3pELE1BQUksR0FBRSxFQUFPLEtBQUssYUFBZSxFQUFJLEVBQU8sS0FBSyxXQUN4QyxFQUdGLEdBRVQsTUFBSyxNQUFNLFFBQVMsR0FDcEIsS0FBSyxNQUFNLFVBQ1QsSUFBSyxFQUNMLE9BQVEsRUFDUixPQUFRLEVBQ1IsT0FBUSxFQUFJLE1BS2xCLFFBQVMsVUFBUyxHQUNoQixNQUFJLEdBQUksT0FDcUIsYUFBcEIsRUFBSSxPQUFPLEtBQXNCLEVBQUksT0FBTyxRQUFVLEVBQUksT0FBTyxNQUduRSxFQTNOVCxHQUFJLDhCQUErQix1QkFBdUIsUUFBUSxxQ0FFOUQsT0FBUyx1QkFBdUIsUUFBUSxTQUk1QyxRQUFPLFFBQVUsU0FBVSxHQUN6QixHQUFJLEdBQVEsSUFFWixPQUFPLFVBQVUsR0FDZixHQUFJLEVBYUosSUFYcUIsV0FBakIsRUFBTSxRQUNSLEVBQU8sRUFBTSxhQUVSLEVBQUssUUFBMkIsV0FBakIsRUFBTSxRQUFzQyxJQUFmLEVBQU0sTUFFckQsRUFBTSxRQUFRLEVBQU0sV0FBYSxFQUFNLFdBQWEsSUFHdEQsRUFBTyxFQUFNLFVBR0ssSUFBaEIsRUFBSyxPQUFjLENBQ3JCLEdBQUksR0FBVSxFQUFNLFdBQVcsTUFFL0IsT0FESSxHQUFNLGFBQWUsRUFBTSxLQUFLLHFCQUFxQixJQUNsRCxFQUFFLE1BQ1AsTUFBUywwQkFDUCxFQUFFLE1BQ0osTUFBUyxjQUNULE9BQ0UsU0FBVSxJQUNWLFFBQVMsRUFBTSxXQUVmLEVBQU0sUUFBUSxFQUFNLFFBQVUsVUFBWSxpQkFHaEQsR0FDSSxHQUVBLEVBQ0EsRUFFQSxFQUNBLEVBQ0EsRUFDQSxFQVRBLEtBRUEsRUFBUyxFQUFNLEtBQUssVUFHcEIsR0FBZSxFQUFNLEtBQU8sR0FBSyxFQUFNLEtBMEczQyxPQXJHQSxHQUFLLElBQUksU0FBVSxFQUFLLEdBeUJ0QixHQXhCSSxFQUFNLEtBQUssU0FBNEIsV0FBakIsRUFBTSxRQUF1QixFQUFJLEVBQU0sS0FBSyxXQUFhLElBQ2pGLEVBQVksRUFBTSxhQUFhLEVBQUksRUFBTSxLQUFLLFVBQzlDLEVBQWEsRUFBSSxFQUFNLEtBQUssU0FDNUIsRUFBaUIsRUFBTSxLQUFLLGFBQWUsRUFBRSxVQUMzQyxNQUFTLEVBQVEsT0FDakIsSUFDRSxNQUFTLEVBQU0sWUFBWSxLQUFLLEVBQU8sTUFFdkMsRUFBWSxFQUFFLFFBQ2hCLE1BQVMsRUFBTSxnQkFBZ0IsT0FDMUIsRUFDUCxFQUFLLEtBQUssRUFBRSxNQUNWLE1BQVMsRUFBUSxRQUNqQixJQUNFLE1BQVMsRUFBTSxzQkFBc0IsS0FBSyxNQUUxQyxFQUFFLE1BQ0osT0FDRSxRQUFTLEVBQU0sV0FFZixFQUFnQixPQUNwQixFQUFlLEVBQUksRUFBTSxLQUFLLFdBRzVCLEVBQU0sS0FBSyxlQUFnQixFQUFNLGdCQUFnQixTQUFTLEdBQTlELENBSUEsRUFBUSxFQUFjLEVBQVEsRUFDOUIsSUFNQSxJQUFJLEVBQU0sYUFBZSxFQUFNLEtBQUssb0JBQXFCLENBQ3ZELEdBQUksR0FBa0IsRUFBRSxNQUN0QixPQUNFLFNBQVUsS0FFWixJQUNFLFNBQVksU0FBa0IsR0FDZCxVQUFWLEVBQUUsS0FDSixFQUFNLGVBQWUsS0FBSyxFQUFPLEVBQUksT0FHekMsTUFBUyxFQUFNLGVBQWUsS0FBSyxFQUFPLEVBQUksT0FFOUMsRUFBRSxRQUNKLE1BQVMsZ0NBQWtDLEVBQU0scUJBQXFCLEVBQUksT0FFeEUsR0FBTSxLQUFLLHNCQUFzQixFQUFRLEtBQUssR0FHcEQsRUFBTSxXQUFXLElBQUksU0FBVSxHQUM3QixHQUFJLEdBQWMsRUFBTSxjQUFnQixFQUFNLGFBQWEsRUFFM0QsSUFBSSxFQUNGLEdBQUksSUFDRixJQUFLLEVBQ0wsT0FBUSxFQUNSLE1BQU8sRUFJUCxHQUFNLEtBQUssZ0JBQWdCLFNBQVMsS0FDdEMsRUFBZ0IsT0FBUyxZQUFZLEVBQUssR0FBUSxLQUFLLEdBQ3ZELEVBQWdCLFVBQVksUUFBUSxFQUFLLEdBQVEsS0FBSyxHQUN0RCxFQUFnQixXQUFhLFFBQVEsRUFBSyxHQUFRLEtBQUssR0FDdkQsRUFBZ0IsWUFBYyxVQUFVLEVBQUssR0FBUSxLQUFLLElBRzVELEVBQVEsS0FBSyxFQUFFLE1BQ2IsTUFBUyxHQUFHLE9BQU8sRUFBTSxZQUFZLEdBQVMsS0FBSyxPQUFPLEVBQU0sYUFBYSxFQUFRLElBQU0sT0FDM0YsT0FDRSxTQUFVLE9BRVYsRUFBYyxFQUFZLEdBQW1CLEVBQU0sT0FBTyxFQUFLLEVBQVEsRUFBTyxRQUdoRixFQUFNLGNBQWdCLEVBQU0sS0FBSyxzQkFBd0IsRUFBTSxLQUFLLHFCQUFxQixFQUFRLEtBQUssR0FDMUcsRUFBVyxFQUFNLEtBQUssaUJBQW1CLEVBQU0sS0FBSyxpQkFBaUIsR0FBTyxHQUM1RSxFQUFnQixFQUFNLEtBQUssc0JBQXdCLEVBQU0sS0FBSyxzQkFBc0IsTUFDcEYsRUFBSyxLQUFLLEVBQUUsTUFBTSxFQUFJLDZCQUFzQyxXQUMxRCxNQUFPLElBRVAsTUFBUyxrQkFBa0IsT0FBTyxHQUNsQyxJQUNFLE1BQVMsRUFBTSxjQUFjLEtBQUssRUFBTyxFQUFLLFFBRTVDLEVBQVMsT0FDZixFQUFLLEtBQUssRUFBTSxhQUFlLEVBQU0sY0FBYyxTQUFTLEVBQUksSUFBVyxFQUFFLE1BQzNFLE1BQVMsd0JBQXdCLE9BQU8sS0FDdEMsRUFBRSxNQUNKLE9BQ0UsUUFBUyxFQUFNLFFBQ2YsU0FBVSxPQUVWLEVBQU0scUJBQXFCLEVBQUcsRUFBSyxPQUFhLFFBRS9DOzs7QUN0SlgsWUFFQSxRQUFPLFFBQVUsU0FBVSxFQUFHLEdBQzVCLE1BQU8sVUFBVSxHQUNmLE1BQUssTUFBSyxTQUFTLEdBQ1osRUFBRSxRQUNQLE1BQVMsd0JBQXdCLE9BQU8sRUFBTyxLQUFLLE9BQU8sS0FBSyxxQkFBcUIsTUFGcEQ7OztBQ0p2QyxZQUVBLElBQUksVUFBVyxRQUFRLFdBRXZCLFFBQU8sUUFBVSxTQUFVLEVBQUcsR0FDNUIsR0FBSSxHQUFRLEtBRVIsRUFBd0IsVUFBZixLQUFLLE9BQXFCLEtBQUssT0FBTyxLQUFLLEtBQU0sS0FBSyxNQUFRLEtBQUssYUFBYSxLQUFLLEtBRWxHLElBQUksS0FBSyxLQUFLLFNBQ1osR0FBSSxHQUFrQixTQUFTLEVBQVEsS0FBSyxLQUFLLFVBRTdDLEVBQVUsU0FBaUIsR0FDWCxJQUFkLEVBQUUsVUFFWSxLQUFkLEVBQUUsU0FDSixFQUFnQixRQUNoQixFQUFPLFVBQU0sR0FBUSxZQUVyQixFQUFnQixVQUFNLEdBQVEsWUFLcEMsT0FBTyxVQUFVLEdBQ2YsTUFBTyxHQUFFLFNBQ1AsSUFDRSxNQUFTLEVBQU0sS0FBSyxTQUFXLEVBQVUsR0FFM0MsTUFBUyxFQUNULE9BQ0UsS0FBTSxFQUFNLGVBQWUsR0FDM0IsS0FBTSxPQUNOLFlBQWEsRUFBTSxRQUFRLFlBQ3pCLE9BQVEsRUFBTSxXQUFXLEtBRTNCLGFBQWM7OztBQ3BDdEIsWUFFQSxRQUFPLFFBQVUsV0FDZixPQUNFLGNBQWUsS0FBSyxPQUFPLGNBQWdCLEtBQUssT0FBTyxjQUFnQixHQUN2RSxhQUFjLEtBQUssT0FBTyxhQUFlLEtBQUssT0FBTyxhQUFlLEdBQ3BFLFlBQWEsS0FBSyxPQUFPLFlBQWMsS0FBSyxPQUFPLFlBQWMsR0FDakUsV0FBWSxLQUFLLE9BQU8sV0FBYSxLQUFLLE9BQU8sV0FBYSxHQUM5RCxZQUFhLEtBQUssT0FBTyxZQUFjLEtBQUssT0FBTyxZQUFjLEdBQ2pFLFdBQVksS0FBSyxPQUFPLFdBQWEsS0FBSyxPQUFPLFdBQWEsR0FDOUQsVUFBVyxLQUFLLE9BQU8sVUFBWSxLQUFLLE9BQU8sVUFBWSxHQUMzRCxhQUFjLEtBQUssT0FBTyxhQUFlLEtBQUssT0FBTyxhQUFlLEdBQ3BFLFlBQWEsS0FBSyxPQUFPLFlBQWMsS0FBSyxPQUFPLFlBQWMsR0FDakUsbUJBQW9CLEtBQUssT0FBTyxtQkFBcUIsS0FBSyxPQUFPLG1CQUFxQixHQUN0RixhQUFjLEtBQUssT0FBTyxhQUFlLEtBQUssT0FBTyxhQUFlLEdBQ3BFLFlBQWEsS0FBSyxPQUFPLFlBQWMsS0FBSyxPQUFPLFlBQWMsR0FDakUsV0FBWSxLQUFLLE9BQU8sV0FBYSxLQUFLLE9BQU8sV0FBYSxHQUM5RCxZQUFhLEtBQUssT0FBTyxZQUFjLEtBQUssT0FBTyxZQUFjLEdBQ2pFLFdBQVksS0FBSyxPQUFPLFdBQWEsS0FBSyxPQUFPLFdBQWE7OztBQ2xCbEUsWUFTQSxTQUFTLHdCQUF1QixHQUFPLE1BQU8sSUFBTyxFQUFJLFdBQWEsR0FBUSxRQUFXLEdBRXpGLFFBQVMsVUFBUyxFQUFTLEdBQ3pCLEdBQUksR0FBTyxVQUFVLE9BQVMsT0FBc0IsS0FBakIsVUFBVSxHQUFtQixVQUFVLEdBQUssRUFDM0UsR0FDRixNQUFNLEVBQ04sYUFBYSxFQUNiLHNCQUNBLHFCQUFxQixFQUNyQix3QkFBd0IsRUFDeEIsbUJBRUYsT0FBSSxHQUFnQixHQUNwQixHQUFPLEVBQUksT0FBZ0IsU0FBRyxHQUM1QixNQUFNLEVBQ04sTUFBTyxFQUNQLGlCQUNBLE1BQU8sS0FDUCxLQUFNLEVBQ04sTUFBTyxHQUNQLFlBQStCLG1CQUFYLFFBQXlCLE9BQU8sV0FBYSxLQUNqRSxTQUNFLFFBQVEsRUFDUixXQUFXLEtBR0QsVUFBVixJQUFvQixFQUFLLFNBQ3RCLEdBbENULE9BQU8sZUFBZSxRQUFTLGNBQzdCLE9BQU8sSUFFVCxRQUFpQixRQUFJLFFBRXJCLElBQUksUUFBUyx1QkFBdUIsUUFBUTs7O0FDUDVDLFlBU0EsU0FBUyx3QkFBdUIsR0FBTyxNQUFPLElBQU8sRUFBSSxXQUFhLEdBQVEsUUFBVyxHQUV6RixRQUFTLGlCQUFnQixFQUFLLEVBQUssR0FBaUssTUFBcEosS0FBTyxHQUFPLE9BQU8sZUFBZSxFQUFLLEdBQU8sTUFBTyxFQUFPLFlBQVksRUFBTSxjQUFjLEVBQU0sVUFBVSxJQUFrQixFQUFJLEdBQU8sRUFBZ0IsRUFFM00sUUFBUyxVQUFTLEdBQ2hCLEdBQUksR0FBTSxFQUVOLEVBQXVCLFVBQWYsRUFBSyxRQUFzQixLQUFXLGdCQUFnQixFQUFNLEdBQUcsT0FBTyxFQUFLLEtBQU0sYUFBYyxTQUFrQixFQUFPLEdBQ2xJLEdBQUksR0FBTyxFQUFLLEtBQUssZ0JBQWdCLEtBQUssRUFBTSxFQUNoRCxHQUFNLEtBQU8sRUFBSyxLQUNsQixFQUFNLE1BQVEsU0FBUyxFQUFLLFNBQzFCLGdCQUFnQixFQUFNLEdBQUcsT0FBTyxFQUFLLEtBQU0sWUFBYSxTQUFpQixFQUFPLE1BQWMsZ0JBQWdCLEVBQU0sR0FBRyxPQUFPLEVBQUssS0FBTSxXQUFZLFNBQWdCLEVBQU8sTUFBYyxnQkFBZ0IsRUFBTSxHQUFHLE9BQU8sRUFBSyxLQUFNLFVBQVcsU0FBZSxFQUFPLE1BQWMsR0FBUSxtQkFBb0IsR0FBRyxPQUFPLEVBQUssS0FBTSxjQUFlLFNBQW1CLEVBQU8sR0FDaFgsRUFBTSxNQUFRLEdBRWhCLE9BQU8sUUFBZ0IsUUFBRSxXQUFVLEdBQU8sS0FBdUIsZ0JBQWdCLEVBQWtCLEdBQUcsT0FBTyxFQUFLLEtBQU0sYUFBYyxTQUFrQixFQUFPLEdBQzdKLEVBQU0sS0FBTyxFQUNiLEVBQUssWUFBWSxPQUFRLEdBQ04sVUFBZixFQUFLLFFBQW9CLEVBQUssVUFDbEMsRUFBSyxPQUFPLGFBQWMsS0FDeEIsZ0JBQWdCLEVBQWtCLEdBQUcsT0FBTyxFQUFLLEtBQU0sZUFBZ0IsU0FBb0IsRUFBTyxHQUNwRyxFQUFNLEtBQU8sRUFDYixFQUFLLFlBQVksT0FBUSxHQUN6QixFQUFNLE1BQVEsRUFFSyxVQUFmLEVBQUssUUFDUCxFQUFLLFlBRUwsZ0JBQWdCLEVBQWtCLEdBQUcsT0FBTyxFQUFLLEtBQU0sZUFBZ0IsU0FBb0IsRUFBTyxNQUFXLGdCQUFnQixFQUFrQixHQUFHLE9BQU8sRUFBSyxLQUFNLHNCQUF1QixTQUEyQixFQUFPLEdBQy9OLEdBQUksR0FBUyxFQUFNLE9BQ2YsRUFBUSxFQUFNLEtBQ2xCLEdBQU0sY0FBYyxHQUFVLEVBQzlCLEVBQU0sS0FBTyxFQUNiLEVBQUssWUFBWSxPQUFRLEdBQ3pCLEVBQUssWUFBWSxnQkFBaUIsRUFBTSxlQUVyQixVQUFmLEVBQUssUUFDUCxFQUFLLFlBRUwsZ0JBQWdCLEVBQWtCLEdBQUcsT0FBTyxFQUFLLEtBQU0sY0FBZSxTQUFtQixFQUFPLEdBQ2xHLEdBQUksR0FBTyxFQUFNLEtBQ2IsRUFBUSxFQUFNLE1BQ2QsRUFBZ0IsRUFBTSxjQUN0QixFQUFRLEVBQU0sTUFDZCxFQUFVLEVBQU0sT0FDcEIsR0FBTSxjQUFnQixFQUN0QixFQUFNLE1BQVEsRUFDZCxFQUFNLEtBQU8sRUFDYixFQUFNLE1BQVEsRUFDZCxFQUFNLFVBQVksRUFBUSxVQUMxQixFQUFNLE9BQVMsRUFBUSxTQUNyQixnQkFBZ0IsRUFBa0IsR0FBRyxPQUFPLEVBQUssS0FBTSxjQUFlLFNBQW1CLEVBQU8sR0FDbEcsRUFBTSxLQUFPLEVBQ2IsRUFBSyxZQUFZLE9BQVEsR0FDekIsRUFBTSxNQUFRLEVBQ0ssVUFBZixFQUFLLFFBQW9CLEVBQUssWUFDaEMsZ0JBQWdCLEVBQWtCLEdBQUcsT0FBTyxFQUFLLEtBQU0sU0FBVSxTQUFjLEVBQU8sR0FDeEYsR0FBSSxHQUFTLEVBQU0sT0FDZixFQUFZLEVBQU0sU0FDdEIsR0FBTSxVQUFZLEVBQ2xCLEVBQU0sT0FBUyxFQUNJLFVBQWYsRUFBSyxRQUFvQixFQUFLLFlBQ2hDLGdCQUFnQixFQUFrQixHQUFHLE9BQU8sRUFBSyxLQUFNLFdBQVksU0FBZ0IsRUFBTyxNQUFXLGdCQUFnQixFQUFrQixHQUFHLE9BQU8sRUFBSyxLQUFNLGNBQWUsU0FBbUIsRUFBTyxNQUFVLGdCQUFnQixFQUFrQixHQUFHLE9BQU8sRUFBSyxLQUFNLFdBQVksU0FBZ0IsRUFBTyxNQUFVLGdCQUFnQixFQUFrQixHQUFHLE9BQU8sRUFBSyxLQUFNLFVBQVcsU0FBZSxFQUFPLE1BQVksR0FBbUIsR0FwRWhiLE9BQU8sZUFBZSxRQUFTLGNBQzdCLE9BQU8sSUFFVCxRQUFpQixRQUFJLFFBRXJCLElBQUksUUFBUyx1QkFBdUIsUUFBUTs7O0FDUDVDLFlBT0EsU0FBUyxZQUNQLE9BQ0UsVUFDRSxRQUFTLFdBQ1AsTUFBTyxNQUFLLFdBVHBCLE9BQU8sZUFBZSxRQUFTLGNBQzdCLE9BQU8sSUFFVCxRQUFpQixRQUFJOzs7QUNMckIsWUFRQSxTQUFTLHdCQUF1QixHQUFPLE1BQU8sSUFBTyxFQUFJLFdBQWEsR0FBUSxRQUFXLEdBTnpGLEdBQUksUUFBUyx1QkFBdUIsUUFBUSxZQUV4QyxXQUFhLHVCQUF1QixRQUFRLGdCQUU1QyxPQUFTLHVCQUF1QixRQUFRLFNBSTVDLFFBQU8sUUFBVSxTQUFVLEdBQ3pCLEdBQUksSUFDRixPQUFPLEVBQUksT0FBZ0IsU0FBRyxHQUM5QixXQUFXLEVBQUksV0FBb0IsU0FBRyxHQUdwQyxHQUFLLFFBQVUsRUFBSyxPQUFPLE9BQVMsRUFBSyxPQUFPLE1BQU0sRUFBSyxRQUM3RCxFQUFPLE1BQVEsT0FBZ0IsUUFBRSxVQUFVLEVBQU8sTUFBTyxFQUFLLE9BQU8sTUFBTSxFQUFLLE9BQ2hGLEVBQUssT0FBTyxpQkFBaUIsRUFBSyxPQUdwQyxFQUFLLE9BQU8sZUFBZSxFQUFLLEtBQU07OztBQ3JCeEMsWUFTQSxTQUFTLHdCQUF1QixHQUFPLE1BQU8sSUFBTyxFQUFJLFdBQWEsR0FBUSxRQUFXLEdBRXpGLFFBQVMsVUFBUyxHQUNoQixHQUFJLElBQ0YsS0FBTSxFQUFLLEtBQUssWUFBYyxFQUFLLEtBQUssWUFBYyxFQUN0RCxNQUFPLEVBQUssS0FBSyxRQUNqQixNQUFzQixVQUFmLEVBQUssT0FBcUIsRUFBSSxFQUFLLEtBQUssT0FDL0MsUUFBUyxFQUFLLFFBQ2QsS0FBcUIsVUFBZixFQUFLLE9BQXFCLEVBQUssUUFDckMsTUFBTyxFQUFLLFlBQ1osY0FBZSxFQUFLLG9CQUNwQixVQUFRLEVBQUssS0FBSyxVQUFXLEVBQUssS0FBSyxRQUFRLFNBQVMsRUFBSyxLQUFLLFFBQVEsT0FDMUUsV0FBVyxFQUFLLEtBQUssVUFBVyxFQUFLLEtBQUssUUFBUSxlQUFlLGNBQWUsRUFBSyxLQUFLLFFBQVEsVUFHcEcsWUFBNEMsS0FBakMsRUFBSyxPQUFPLE1BQU0sRUFBSyxPQUN6QixFQUFJLE9BQWdCLFVBQUcsRUFBTSxFQUFLLE9BQU8sTUFBTSxFQUFLLE1BQU8sR0FHN0QsRUExQlQsT0FBTyxlQUFlLFFBQVMsY0FDN0IsT0FBTyxJQUVULFFBQWlCLFFBQUksUUFFckIsSUFBSSxRQUFTLHVCQUF1QixRQUFROzs7QUNQNUMsWUFTQSxTQUFTLHdCQUF1QixHQUFPLE1BQU8sSUFBTyxFQUFJLFdBQWEsR0FBUSxRQUFXLEdBRXpGLFFBQVMsU0FBUSxHQUF3VCxPQUF0TyxRQUFyRCxrQkFBWCxTQUFvRCxnQkFBcEIsUUFBTyxTQUFtQyxTQUFpQixHQUFPLGFBQWMsSUFBMkIsU0FBaUIsR0FBTyxNQUFPLElBQXlCLGtCQUFYLFNBQXlCLEVBQUksY0FBZ0IsUUFBVSxJQUFRLE9BQU8sVUFBWSxlQUFrQixLQUF5QixHQUV4VixRQUFTLFVBQVMsR0FDaEIsR0FBSSxHQUFrQixVQUFWLEVBQXFCLGNBQWdCLGFBQ2pELE9BQU8sUUFBZ0IsUUFBRSxXQUFVLEdBQ2pDLE9BQ0UsTUFDRSxLQUFNLE9BQ04sVUFBVSxJQUdkLFVBQ0UsTUFBTyxXQUNMLE1BQU8sTUFBSyxPQUFPLE1BQU0sS0FBSyxPQUVoQyxLQUFNLFdBQ0osTUFBTyxNQUFLLE1BQU0sTUFFcEIsTUFBTyxXQUNMLE1BQU8sTUFBSyxNQUFNLE9BRXBCLFFBQVMsV0FDUCxNQUFPLE1BQUssTUFBTSxTQUVwQixVQUFXLFdBQ1QsTUFBTyxNQUFLLE1BQU0sTUFFcEIsS0FBTSxXQUNKLE1BQU8sTUFBSyxNQUFNLE1BRXBCLE1BQU8sV0FDTCxNQUFPLE1BQUssTUFBTSxPQUVwQixjQUFlLFdBQ2IsTUFBTyxNQUFLLE1BQU0sZUFFcEIsTUFBTyxXQUNMLE1BQU8sTUFBSyxNQUFNLE9BRXBCLFFBQVMsV0FDUCxPQUNFLE9BQVEsS0FBSyxNQUFNLE9BQ25CLFVBQVcsS0FBSyxNQUFNLGFBSTVCLFNBQ0UsT0FBUSxTQUFnQixFQUFRLEdBQzlCLE1BQU8sTUFBSyxPQUFPLE9BQU8sR0FBRyxPQUFPLEtBQUssS0FBTSxLQUFLLE9BQU8sR0FBUyxJQUV0RSxjQUFlLFNBQXVCLEVBQVEsR0FDNUMsR0FBSyxLQUFLLFNBQVMsR0FFbkIsR0FBSSxFQUFHLFVBQVksS0FBSyxRQUFRLFFBQVUsS0FBSyxhQUM3QyxLQUFLLGlCQUFpQixPQUNqQixDQUNMLEdBQUksR0FBWSxLQUFLLFFBQVEsU0FBVyxHQUFVLEtBQUssUUFBUSxVQUFZLEtBQUssdUJBQXVCLEdBQ25HLEdBQ0YsT0FBUSxFQUNSLFVBQVcsRUFFYixNQUFLLFlBQVksVUFBVyxHQUM1QixLQUFLLE9BQU8sT0FBUSxHQUNwQixLQUFLLFNBQVMsU0FBVSxLQUc1QixTQUFVLFNBQWtCLEdBQzFCLEdBQUksR0FBdUIsV0FBZixRQUFRLEdBQWtCLFNBQVMsRUFBRSxPQUFPLE9BQVMsQ0FDakUsTUFBSyxZQUFZLFVBQVcsR0FDNUIsS0FBSyxPQUFPLFlBQWEsR0FDekIsS0FBSyxTQUFTLFFBQVMsSUFFekIsU0FBVSxTQUFrQixFQUFRLEdBQ2xDLEtBQUssWUFBWSxXQUNmLE9BQVEsRUFDUixVQUFXLElBRWIsS0FBSyxPQUFPLFFBQ1YsT0FBUSxFQUNSLFVBQVcsS0FHZixRQUFTLFNBQWlCLEdBQ25CLElBQ0gsRUFBTyxLQUFLLE1BQU0sS0FBSyxPQUdwQixLQUFLLEtBQUssV0FBVyxXQUFVLEtBQUssTUFBTSxXQUFXLEtBQU8sR0FDakUsS0FBSyxPQUFPLFdBQVksTUFHM0IsR0FHTCxRQUFTLGVBQ1AsT0FDRSxTQUNFLFFBQVMsU0FBaUIsR0FDeEIsS0FBSyxPQUFPLFdBQVksR0FDeEIsV0FBVyxXQUNULEtBQUssU0FBUyxTQUFVLElBQ3hCLEtBQUssTUFBTyxNQU10QixRQUFTLGVBQ1AsU0FySEYsT0FBTyxlQUFlLFFBQVMsY0FDN0IsT0FBTyxJQUVULFFBQWlCLFFBQUksUUFFckIsSUFBSSxRQUFTLHVCQUF1QixRQUFROzs7QUNQNUMsWUFhQSxTQUFTLFlBQ1AsT0FDRSxRQUFTLFFBQ1QsU0FBVSxTQUNWLGNBQWUsZUFmbkIsT0FBTyxlQUFlLFFBQVMsY0FDN0IsT0FBTyxJQUVULFFBQWlCLFFBQUksUUFFckIsSUFBSSxTQUFVLFFBQVEsb0JBRWxCLFNBQVcsUUFBUSxxQkFFbkIsY0FBZ0IsUUFBUTs7O0FDWDVCLFlBRUEsU0FBUyxTQUFRLEdBQXdULE9BQXRPLFFBQXJELGtCQUFYLFNBQW9ELGdCQUFwQixRQUFPLFNBQW1DLFNBQWlCLEdBQU8sYUFBYyxJQUEyQixTQUFpQixHQUFPLE1BQU8sSUFBeUIsa0JBQVgsU0FBeUIsRUFBSSxjQUFnQixRQUFVLElBQVEsT0FBTyxVQUFZLGVBQWtCLEtBQXlCLEdBRXhWLE9BQU8sUUFBVSxTQUFVLEVBQVUsR0FDbkMsR0FBSSxJQUNGLFdBQVksUUFBUSx5QkFDcEIsV0FBWSxRQUFRLHlCQUNwQixNQUFPLFFBQVEscUJBRWIsR0FDRixRQUFXLFFBQVEsdUJBQ25CLGlCQUFrQixRQUFRLGlDQUU1QixPQUFPLFVBQVUsR0FDZixHQUFJLElBQ0YsS0FBTSxRQUFRLGtCQUFrQixLQUFLLEtBQU0sR0FDM0MsYUFBYyxRQUFRLDJCQUEyQixLQUFLLEtBQU0sR0FDNUQsbUJBQW9CLFFBQVEsaUNBQWlDLEtBQUssS0FBTSxHQUN4RSx3QkFBeUIsUUFBUSx1Q0FBdUMsS0FBSyxLQUFNLEdBQ25GLGNBQWUsUUFBUSw0QkFBNEIsS0FBSyxLQUFNLEdBQzlELFdBQVksUUFBUSx3QkFBd0IsS0FBSyxLQUFNLEdBQ3ZELFNBQVUsUUFBUSxzQkFBc0IsS0FBSyxLQUFNLEdBQ25ELFFBQVMsUUFBUSxzQkFBc0IsS0FBSyxLQUFNLEdBQ2xELGdCQUFpQixRQUFRLDhCQUE4QixLQUFLLEtBQU0sR0FHcEUsSUFBd0IsZ0JBQWIsTUFBMkIsRUFBVSxJQUE0QyxrQkFBeEIsR0FBVSxJQUM1RSxLQUFNLDJCQUE0QixPQUFPLEVBQVUsbUJBR3JELElBQXFCLGdCQUFWLE1BQXdCLEVBQU8sSUFBcUMsV0FBM0IsUUFBUSxFQUFPLEtBQ2pFLEtBQU0sd0JBQXlCLE9BQU8sRUFBTyxtQkFHL0MsSUFBSSxHQUEwQixnQkFBYixHQUF3QixFQUFVLEdBQVksRUFDM0QsRUFBdUIsZ0JBQVYsR0FBcUIsRUFBTyxHQUFTLElBRWxELEVBQVEsUUFBUSxXQUFXLEtBQUssS0FFcEMsT0FBTyxHQUFJLEtBQUssS0FBTSxFQUFHLEVBQVMsRUFBSzs7O0FDeEMzQyxZQUlBLFNBQVMsd0JBQXVCLEdBQU8sTUFBTyxJQUFPLEVBQUksV0FBYSxHQUFRLFFBQVcsR0FGekYsR0FBSSxRQUFTLHVCQUF1QixRQUFRLFNBSTVDLFFBQU8sUUFBVSxTQUFVLEVBQUcsRUFBUyxFQUFTLEdBQzlDLEdBQUksR0FBVyxxQkFBdUIsS0FBSyxHQUN2QyxFQUFRLGtDQUFvQyxLQUFLLEdBQ2pELEVBQVksb0JBQXNCLEtBQUssR0FFdkMsRUFBZ0IsUUFBUSw4QkFBOEIsS0FBSyxLQUFNLEdBRWpFLEVBQVUsS0FBSyxLQUFLLFFBQVUsRUFBRSxXQUFZLEtBQUssS0FBSyxVQUFZLEdBQ2xFLEVBQWdCLEtBQUssaUJBQW1CLEVBQUUsT0FDNUMsTUFBUyw0QkFDUCxFQUFFLFNBQ0osT0FDRSxJQUFPLEdBRVQsTUFBUyxFQUFRLFFBQ2YsS0FBSyxRQUFRLFlBQWEsRUFBUSxhQUFhLEVBQVMsS0FBYyxHQUN0RSxHQUFXLEtBQUssS0FBSyxvQkFBc0IsRUFBYyxPQUFTLEdBQUssS0FBSyxLQUFLLHlCQUEyQixFQUFFLE9BQ2hILE1BQVMsMkJBQ1AsRUFBRSxTQUNKLE1BQVMsRUFBUSxNQUNqQixPQUNFLElBQU8sS0FFUCxLQUFLLFFBQVEsV0FBWSxFQUFRLFFBQVEsRUFBZSxFQUFRLE9BQVEsS0FBZSxHQUN2RixFQUFxQixLQUFLLEtBQUssWUFBYyxLQUFLLEtBQUssV0FBVyxTQUFXLEVBQUUsT0FDakYsTUFBUyxrQ0FDUCxFQUFFLE9BQ0osTUFBUyxHQUFHLE9BQU8sRUFBUSxNQUFPLEtBQUssT0FBTyxFQUFRLE9BQVEsS0FBSyxPQUFPLEVBQVEsTUFBTyxtQ0FDekYsYUFDRSxLQUFNLE9BQ04sTUFBTyxLQUFLLFdBQWEsTUFFekIsRUFBRSxTQUNKLE9BQ0UsSUFBTyxLQUVQLEtBQUssUUFBUSxVQUFXLEVBQVEsbUJBQW1CLEVBQVEsT0FBUSxPQUFhLEdBQ2hGLEVBQWtCLEtBQUssS0FBSyxnQkFBa0IsRUFBRSxPQUNsRCxNQUFTLHdDQUNQLEVBQVEsZ0JBQWdCLEtBQWEsR0FDckMsRUFBaUIsS0FBSyxLQUFLLGVBQWlCLEVBQUUsU0FBVSxFQUFFLE1BQU8sRUFBUSxTQUFTLEVBQVEsV0FBYSxHQUN2RyxFQUFnQixHQUFpQixHQUFXLEdBQXNCLEdBQW1CLEVBQU0sY0FBZ0IsRUFBTSxhQUFlLEVBQU0sYUFBZSxFQUFNLFdBQzNKLEVBQVcsRUFBRSxPQUNmLE1BQVMsRUFBUSxJQUNqQixhQUNFLEtBQU0sT0FDTixNQUFPLE1BRVAsRUFBRSxPQUNKLE1BQVMsRUFBUSxTQUNmLEVBQUUsT0FDSixNQUFTLEdBQUcsT0FBTyxFQUFRLE1BQU8sS0FBSyxPQUFPLEVBQVEsT0FBUSxLQUFLLE9BQU8sRUFBUSxLQUFNLHdCQUN0RixFQUFNLGFBQWMsRUFBZSxFQUFNLGNBQWUsRUFBTSxtQkFBb0IsRUFBRSxPQUN0RixNQUFTLEdBQUcsT0FBTyxFQUFRLE1BQU8sS0FBSyxPQUFPLEVBQVEsT0FBUSxLQUFLLE9BQU8sRUFBUSxNQUFPLHVCQUN2RixFQUFNLFlBQWEsRUFBUyxFQUFNLGFBQWMsRUFBb0IsS0FDeEUsT0FBTyxHQUFFLE9BQ1AsTUFBUyx3QkFBMEIsS0FBSyxTQUN0QyxFQUFVLEVBQU0sWUFBYSxFQUFFLE9BQ2pDLE1BQVMscUJBQ1AsRUFBRSxTQUNKLE1BQVMsb0JBQW9CLE9BQU8sS0FBSyxLQUFLLEtBQU8sS0FBSyxLQUFLLEtBQU8sRUFBUSxPQUM5RSxPQUNFLFFBQVMsS0FBSyxLQUFLLFdBRW5CLEVBQVMsRUFBRSxTQUFVLEVBQU0sWUFBYSxFQUFFLE1BQU8sRUFBUSxTQUFTLEVBQVEsU0FBVSxFQUFNLGNBQWUsRUFBUSxjQUFjLEdBQVUsRUFBTSxlQUFnQixFQUFnQixFQUFNLFdBQVksRUFBRSxTQUFVLEVBQU0sWUFBYSxFQUFRLEtBQUssR0FBVSxFQUFNLGFBQWMsRUFBTSxjQUFlLEVBQU0sV0FBWSxFQUFRLFlBQVcsRUFBSSxPQUFnQixTQUFHLEVBQVEsWUFDdFcsUUFBUyxHQUFHLE9BQU8sRUFBUSxJQUFLLEtBQUssT0FBTyxFQUFRLE9BQVEsS0FBSyxPQUFPLEVBQVEsZUFDaEYsSUFBSyxFQUFRLE9BQ2IsTUFBTyxHQUFHLE9BQU8sRUFBUSxPQUFRLEtBQUssT0FBTyxFQUFRLFdBQ2xELEVBQVE7OztBQzFFZixZQUlBLFNBQVMsd0JBQXVCLEdBQU8sTUFBTyxJQUFPLEVBQUksV0FBYSxHQUFRLFFBQVcsR0FGekYsR0FBSSxRQUFTLHVCQUF1QixRQUFRLFNBSTVDLFFBQU8sUUFBVSxTQUFVLEVBQUcsRUFBUyxFQUFTLEdBQzlDLEdBQUksR0FBVyxxQkFBdUIsS0FBSyxHQUN2QyxFQUFZLG9CQUFzQixLQUFLLEdBRXZDLEVBQWdCLFFBQVEsOEJBQThCLEtBQUssS0FBTSxHQUVqRSxFQUFVLEtBQUssS0FBSyxRQUFVLEVBQUUsV0FBWSxLQUFLLEtBQUssVUFBWSxHQUNsRSxFQUFnQixLQUFLLGlCQUFtQixFQUFFLE9BQzVDLE1BQVMsNEJBQ1AsRUFBRSxTQUNKLE9BQ0UsSUFBTyxHQUVULE1BQVMsRUFBUSxRQUNmLEtBQUssUUFBUSxZQUFhLEVBQVEsYUFBYSxFQUFTLEtBQWMsR0FDdEUsRUFBVSxFQUFjLE9BQVMsRUFBSSxFQUFFLE9BQ3pDLE1BQVMsMkJBQ1AsRUFBRSxTQUNKLE1BQVMsRUFBUSxNQUNqQixPQUNFLElBQU8sS0FFUCxLQUFLLFFBQVEsV0FBWSxFQUFRLFFBQVEsRUFBZSxFQUFRLE9BQVEsS0FBZSxHQUN2RixFQUFrQixLQUFLLEtBQUssZ0JBQWtCLEVBQUUsT0FDbEQsTUFBUyx3Q0FDUCxFQUFRLGdCQUFnQixLQUFhLEdBQ3JDLEVBQWdCLEdBQWlCLEdBQVcsR0FBbUIsRUFBTSxjQUFnQixFQUFNLGFBQWUsRUFBTSxhQUFlLEVBQU0sV0FDckksRUFBVyxFQUFFLE9BQ2YsTUFBUyxFQUFRLElBQ2pCLGFBQ0UsS0FBTSxPQUNOLE1BQU8sTUFFUCxFQUFFLE9BQ0osTUFBUyxFQUFRLFNBQ2YsRUFBRSxPQUNKLE1BQVMsR0FBRyxPQUFPLEVBQVEsTUFBTyxLQUFLLE9BQU8sRUFBUSxPQUFRLEtBQUssT0FBTyxFQUFRLEtBQU0sd0JBQ3RGLEVBQU0sYUFBYyxFQUFlLEVBQU0sY0FBZSxFQUFNLG1CQUFvQixFQUFFLE9BQ3RGLE1BQVMsR0FBRyxPQUFPLEVBQVEsTUFBTyxLQUFLLE9BQU8sRUFBUSxPQUFRLEtBQUssT0FBTyxFQUFRLE1BQU8sdUJBQ3ZGLEVBQU0sWUFBYSxFQUFTLEVBQU0sYUFBYyxLQUNwRCxPQUFPLEdBQUUsT0FDUCxNQUFTLHdCQUEwQixLQUFLLFNBQ3RDLEVBQVUsRUFBTSxZQUFhLEVBQUUsT0FDakMsTUFBUyxxQkFDUCxFQUFFLFNBQ0osTUFBUyxvQkFBb0IsT0FBTyxLQUFLLEtBQUssS0FBTyxLQUFLLEtBQUssS0FBTyxFQUFRLE9BQzlFLE9BQ0UsUUFBUyxLQUFLLEtBQUssV0FFbkIsRUFBUyxFQUFFLFNBQVUsRUFBTSxZQUFhLEVBQUUsTUFBTyxFQUFRLFNBQVMsRUFBUSxTQUFVLEVBQU0sY0FBZSxFQUFRLGNBQWMsR0FBVSxFQUFNLGVBQWdCLEVBQUUsU0FBVSxFQUFFLE1BQU8sRUFBRSxNQUN4TCxPQUNFLFFBQVMsS0FBSyxXQUVkLEVBQVEsWUFBVyxFQUFJLE9BQWdCLFNBQUcsRUFBUSxZQUNwRCxLQUFNLEdBQUcsT0FBTyxFQUFRLFdBQVcsS0FBTSxLQUFLLE9BQU8sRUFBUSxNQUFPLEtBQUssT0FBTyxFQUFRLFVBQ3hGLE1BQU8sR0FBRyxPQUFPLEVBQVEsZUFDaEIsRUFBTSxXQUFZLEVBQUUsU0FBVSxFQUFNLFlBQWEsRUFBUSxLQUFLLEdBQVUsRUFBTSxhQUFjLEVBQU0sY0FBZSxFQUFNOzs7QUM5RHBJLFlBRUEsUUFBTyxRQUFVLFdBQ2YsT0FDRSxVQUFXLGFBQ1gsTUFBTyxpREFDUCxJQUFLLE1BQ0wsT0FBUSxZQUNSLE1BQU8sR0FDUCxNQUFPLGVBQ1AsT0FBUSxlQUNSLE1BQU8sYUFDUCxPQUFRLGNBQ1IsTUFBTyxhQUNQLEtBQU0sWUFDTixPQUFRLGNBQ1IsY0FBZSxHQUNmLE1BQU8sR0FDUCxTQUFVLEdBQ1YsUUFBUyxPQUNULE9BQVEsb0JBQ1IsVUFDRSxVQUFXLFdBQ1gsUUFBUyxrQkFDVCxLQUFNLGdCQUNOLFFBQVMsR0FDVCxLQUFNLEdBQ04sTUFBTyxTQUVULFlBQ0UsSUFBSyxHQUNMLE1BQU8sR0FDUCxRQUFTLEdBQ1QsS0FBTSxhQUNOLEtBQU0sWUFDTixLQUFNLFlBQ04sS0FBTSxHQUNOLEtBQU0sR0FDTixPQUFRLFNBQ1IsU0FBVTs7O0FDdkNoQixZQUVBLFFBQU8sUUFBVSxXQUNmLE9BQ0UsVUFBVyxhQUNYLE1BQU8saURBQ1AsSUFBSyxNQUNMLE9BQVEsWUFDUixNQUFPLEdBQ1AsTUFBTyxlQUNQLE9BQVEsZUFDUixNQUFPLGFBQ1AsT0FBUSxjQUNSLE1BQU8sY0FDUCxLQUFNLGFBQ04sT0FBUSxjQUNSLGNBQWUseUJBQ2YsU0FBVSxNQUNWLFFBQVMsYUFDVCxNQUFPLEdBQ1AsT0FBUSxvQkFDUixVQUNFLFVBQVcsV0FDWCxRQUFTLGtCQUNULEtBQU0sZ0JBQ04sUUFBUyxHQUNULEtBQU0sZ0JBQ04sTUFBTyxTQUVULFlBQ0UsSUFBSyxHQUNMLE1BQU8sR0FDUCxRQUFTLEdBQ1QsS0FBTSxhQUNOLEtBQU0sWUFDTixLQUFNLFlBQ04sS0FBTSxHQUNOLEtBQU0sR0FDTixPQUFRLFNBQ1IsU0FBVTs7O0FDdkNoQixZQUVBLFFBQU8sUUFBVSxXQUNmLE9BQ0UsVUFBVyxRQUNYLE1BQU8seURBQ1AsSUFBSyxVQUNMLE9BQVEsZUFDUixNQUFPLFFBQ1AsTUFBTyxRQUNQLE9BQVEsU0FDUixNQUFPLFFBQ1AsT0FBUSxnQkFDUixNQUFPLGtCQUNQLEtBQU0saUJBQ04sT0FBUSxvQkFDUixjQUFlLGNBQ2YsS0FBTSxPQUNOLE1BQU8sV0FDUCxTQUFVLGFBQ1YsT0FBUSxTQUNSLFFBQVMsY0FDVCxVQUNFLFVBQVcsV0FDWCxRQUFTLG1CQUNULEtBQU0sZ0JBQ04sUUFBUyxtQkFDVCxLQUFNLGdCQUNOLE1BQU8sb0JBRVQsWUFDRSxJQUFLLEdBQ0wsTUFBTyxHQUNQLFFBQVMsYUFDVCxLQUFNLGtCQUNOLEtBQU0sR0FDTixLQUFNLGtCQUNOLEtBQU0sR0FDTixLQUFNLEdBQ04sT0FBUSxhQUNSLFNBQVU7OztBQ3hDaEIsWUFnQkEsU0FBUyx3QkFBdUIsR0FBTyxNQUFPLElBQU8sRUFBSSxXQUFhLEdBQVEsUUFBVyxHQWR6RixHQUFJLGdCQUFpQixRQUFRLG9CQUV6QixNQUFRLHVCQUF1QixRQUFRLGlCQUV2QyxRQUFVLHVCQUF1QixRQUFRLG1CQUV6QyxPQUFTLHVCQUF1QixRQUFRLFVBRXhDLE9BQVMsdUJBQXVCLFFBQVEsWUFFeEMsT0FBUyx1QkFBdUIsUUFBUSxpQkFFeEMsbUJBQXFCLHVCQUF1QixRQUFRLGlDQUlwRCxNQUFRLFFBQVEsaUJBRWhCLFNBQVcsUUFBUSxvQkFFbkIsaUJBQW1CLFFBQVEsc0JBRS9CLFNBQVEsUUFBVSxTQUFVLEVBQUssRUFBZSxHQUM5QyxHQUFJLEdBQVEsVUFBVSxPQUFTLE9BQXNCLEtBQWpCLFVBQVUsR0FBbUIsVUFBVSxHQUFLLGFBQzVFLEVBQVcsVUFBVSxPQUFTLE9BQXNCLEtBQWpCLFVBQVUsR0FBbUIsVUFBVSxHQUFLLFVBRS9FLEVBQVMsT0FBZ0IsUUFBRSxXQUFVLEdBQU0sRUFBSSxPQUFnQixZQUNqRSxLQUFNLGVBQ04sWUFDRSxXQUFZLGVBQWUsWUFFN0IsT0FBUSxpQkFBaUIsS0FBSyxLQUFNLEVBQVUsR0FDOUMsT0FDRSxTQUNFLEtBQU0sTUFDTixVQUFVLEdBRVosTUFDRSxLQUFNLE1BQ04sVUFBVSxHQUVaLE1BQ0UsS0FBTSxPQUNOLFVBQVUsR0FFWixTQUNFLEtBQU0sT0FDTixVQUFVLEVBQ1YsUUFBVyxXQUNULFlBSU4sUUFBUyxXQUNQLFNBQVMsTUFFTCxLQUFLLEtBQUssZ0JBQWdCLEtBQUssK0JBRTlCLEtBQUssT0FDUixLQUFLLGNBQ0wsS0FBSyxNQUFRLEtBQUssWUFDbEIsS0FBSyxjQUFnQixLQUFLLHNCQUc5QixRQUFTLFdBQ1AsS0FBSyxlQUFlLEtBQUssT0FFckIsS0FBSyxLQUFLLG1CQUNaLEVBQUksbUJBQTRCLFNBQUcsS0FBSyxJQUFJLGNBQWMsU0FBVSxLQUFLLFlBQWEsS0FBSyxLQUFLLHNCQUdsRyxLQUFLLG1DQUVBLEtBQUssT0FDUixLQUFLLHdCQUNELEtBQUssUUFBUSxhQUFhLEtBQUssUUFBUSxLQUFLLFFBQVEsY0FHdEQsS0FBSyxLQUFLLFVBQVksS0FBSyxLQUFLLFVBQ2xDLEtBQUssUUFBUSxPQUFTLEtBQUssS0FBSyxTQUdsQyxLQUFLLFlBRUQsS0FBSyxrQkFDUCxLQUFLLG1CQUdULE9BQ0UsS0FBTSxRQUVSLEtBQU0sV0FDSixNQUFPLFFBQWdCLFFBQUUsVUFBVSxTQUNqQyxPQUFRLFNBQ1IsY0FBZSxFQUNmLG9CQUNBLEtBQU0sS0FBSyxRQUNWLEVBQUksT0FBZ0IsU0FBRyxFQUFTLFNBQVUsS0FBSyxRQUFRLGVBRTVELFVBQ0UsRUFBRyxRQUFRLGdCQUNYLFFBQVMsUUFBUSx1QkFDakIsV0FBWSxRQUFRLDBCQUNwQixhQUFjLFFBQVEsNEJBQ3RCLGFBQWMsV0FDWixNQUFPLE1BQUssS0FBSyxxQkFHckIsU0FDRSw2QkFBOEIsUUFBUSw4Q0FDdEMsc0JBQXVCLFFBQVEscUNBQy9CLE9BQVEsUUFBUSwyQkFDaEIsWUFBYSxRQUFRLDBCQUNyQixhQUFjLFFBQVEsNEJBQ3RCLFlBQWEsU0FBcUIsRUFBTyxHQUN2QyxFQUFFLGlCQUNGLElBQUksR0FBSSxLQUFLLGdCQUFnQixRQUFRLEVBRWpDLElBQUssRUFDUCxLQUFLLGdCQUFnQixPQUFPLEVBQUcsR0FFL0IsS0FBSyxnQkFBZ0IsS0FBSyxJQUc5QixnQkFBaUIsU0FBeUIsR0FDeEMsR0FBSSxHQUFNLEtBQUssS0FBSyxTQUFTLEtBQU8sR0FFcEMsT0FEQSxJQUFPLEtBQUssZ0JBQWdCLFFBQVEsSUFBVSxFQUFJLEtBQUssS0FBSyxTQUFTLEtBQU8sS0FBSyxLQUFLLFNBQVMsSUFHakcsVUFBVyxXQUNULEdBQUssS0FBSyxLQUFLLFVBQWYsQ0FFQSxJQUFLLEtBQUssUUFBUSxRQUFRLEtBQUssVUFHN0IsTUFGQSxNQUFLLGlCQUNMLEtBQUssYUFBYyxFQUlyQixJQUFJLEdBQVEsS0FBSyxNQUFNLEtBQUssUUFBUSxRQUFRLEtBQUssVUFDN0MsTUFBSyxLQUFLLFlBQVksS0FBSyxVQUFVLEVBQU0sT0FDL0MsS0FBSyxTQUFTLEVBQU0sUUFBUSxPQUFRLEVBQU0sUUFBUSxXQUU5QyxLQUFLLEtBQ1AsS0FBSyxPQUFPLFlBQWEsRUFBTSxTQUUvQixLQUFLLE1BQVEsRUFBTSxRQUdyQixLQUFLLFFBQVEsRUFBTSxNQUNuQixLQUFLLGFBQWMsRUFFZixFQUFNLHNCQUNSLEtBQUssbUJBQXFCLEVBQU0sbUJBQ2hDLEtBQUssb0JBQXNCLEVBQU0sMEJBT3JDLEVBQVEsR0FBVSxFQUFJLE1BQWUsWUFBTyxFQUFJLFFBQWlCLFVBR3JFLE9BRkEsR0FBUyxPQUFnQixRQUFFLFVBQVUsRUFBUSxHQUM3QyxFQUFJLFVBQVUsaUJBQWtCLEdBQ3pCOzs7QUNyS1QsWUFnQkEsU0FBUyx3QkFBdUIsR0FBTyxNQUFPLElBQU8sRUFBSSxXQUFhLEdBQVEsUUFBVyxHQWR6RixHQUFJLFFBQVMsdUJBQXVCLFFBQVEsVUFFeEMsT0FBUyx1QkFBdUIsUUFBUSxpQkFFeEMsTUFBUSx1QkFBdUIsUUFBUSxpQkFFdkMsUUFBVSx1QkFBdUIsUUFBUSxtQkFFekMsT0FBUyx1QkFBdUIsUUFBUSxZQUV4QyxlQUFpQixRQUFRLG9CQUV6QixtQkFBcUIsdUJBQXVCLFFBQVEsaUNBSXBELE1BQVEsUUFBUSxpQkFFaEIsU0FBVyxRQUFRLG9CQUVuQixpQkFBbUIsUUFBUSxzQkFFL0IsU0FBUSxRQUFVLFNBQVUsRUFBSyxFQUFlLEdBQzlDLEdBQUksR0FBUSxVQUFVLE9BQVMsT0FBc0IsS0FBakIsVUFBVSxHQUFtQixVQUFVLEdBQUssYUFDNUUsRUFBVyxVQUFVLE9BQVMsT0FBc0IsS0FBakIsVUFBVSxHQUFtQixVQUFVLEdBQUssVUFDL0UsRUFBUSxHQUFVLEVBQUksTUFBZSxTQUFHLFdBQVksRUFBSSxRQUFpQixXQUV6RSxFQUFTLE9BQWdCLFFBQUUsV0FBVSxHQUFNLEVBQUksT0FBZ0IsWUFDakUsS0FBTSxlQUNOLFlBQ0UsV0FBWSxlQUFlLFlBRTdCLE9BQVEsaUJBQWlCLEtBQUssS0FBTSxFQUFVLEdBQzlDLE9BQ0UsU0FDRSxLQUFNLE1BQ04sVUFBVSxHQUVaLEtBQ0UsS0FBTSxRQUVSLE1BQ0UsS0FBTSxPQUNOLFVBQVUsR0FFWixTQUNFLEtBQU0sT0FDTixVQUFVLEVBQ1YsUUFBVyxXQUNULFlBSU4sUUFBUyxXQUNQLElBQUssS0FBSyxLQUFLLGtCQUFvQixLQUFLLElBQ3RDLEtBQU0sMkZBR1IsVUFBUyxNQUVKLEtBQUssT0FDUixLQUFLLE1BQVEsS0FBSyxZQUNsQixLQUFLLGNBQ0wsS0FBSyxjQUFnQixLQUFLLHFCQUd4QixLQUFLLEtBQUsscUJBQ1osS0FBSyxZQUNMLEtBQUssU0FBUSxHQUFNLEtBQUssU0FBVSxHQUNoQyxLQUFLLFFBQVEsR0FDYixLQUFLLFNBQVUsRUFFWCxLQUFLLGtCQUNQLFdBQVcsV0FDVCxLQUFLLG1CQUNMLEtBQUssTUFBTyxJQUVoQixLQUFLLFNBR1gsUUFBUyxXQUNQLEtBQUssZUFBZSxLQUFLLE9BRXJCLEtBQUssS0FBSyxtQkFDWixFQUFJLG1CQUE0QixTQUFHLEtBQUssSUFBSSxjQUFjLFNBQVUsS0FBSyxZQUFhLEtBQUssS0FBSyxzQkFHbEcsS0FBSyxtQ0FFRCxLQUFLLE9BQ1QsS0FBSyx3QkFDRCxLQUFLLFFBQVEsYUFBYSxLQUFLLFFBQVEsS0FBSyxRQUFRLGFBQWEsS0FFdkUsS0FBTSxXQUNKLE1BQU8sUUFBZ0IsUUFBRSxVQUFVLFNBQ2pDLE9BQVEsU0FDUixTQUFTLEVBQ1QsaUJBQWlCLEVBQ2pCLGNBQWUsSUFDZCxFQUFJLE9BQWdCLFNBQUcsRUFBUyxTQUFVLEtBQUssUUFBUSxlQUU1RCxTQUNFLFFBQVMsUUFBUSxxQkFDakIsUUFBUyxRQUFRLHNCQUNqQixRQUFTLFFBQVEsc0JBQ2pCLGFBQWMsUUFBUSwyQkFDdEIsc0JBQXVCLFFBQVEscUNBQy9CLFVBQVcsV0FDVCxHQUFJLEdBQVEsSUFFWixJQUFLLEtBQUssS0FBSyxVQUFmLENBRUEsSUFBSyxLQUFLLFFBQVEsUUFBUSxLQUFLLFVBRzdCLE1BRkEsTUFBSyxpQkFDTCxLQUFLLGFBQWMsRUFJckIsSUFBSSxHQUFRLEtBQUssTUFBTSxLQUFLLFFBQVEsUUFBUSxLQUFLLFVBRTdDLE1BQUssS0FDUCxLQUFLLE9BQU8sYUFDVixNQUFPLEVBQU0sTUFDYixjQUFlLEVBQU0sY0FDckIsS0FBTSxFQUFNLEtBQ1osTUFBTyxFQUFNLFFBQ2IsUUFBUyxFQUFNLFdBR2pCLEtBQUssS0FBTyxFQUFNLEtBQ2xCLEtBQUssTUFBUSxFQUFNLE1BQ25CLEtBQUssY0FBZ0IsRUFBTSxjQUMzQixLQUFLLE1BQVEsRUFBTSxRQUNuQixLQUFLLFFBQVUsRUFBTSxVQUdsQixLQUFLLEtBQUssV0FBVyxVQUFZLEtBQUssTUFBTSxZQUMvQyxXQUFXLFdBQ1QsRUFBTSxNQUFNLFdBQVcsS0FBTyxFQUFNLE1BQ25DLEdBR0QsS0FBSyxLQUFLLFlBQ1osV0FBVyxXQUNULEVBQU0sZUFBZSxFQUFNLFFBQzFCLEdBR0wsS0FBSyxhQUFjLEtBR3ZCLE9BQ0UsSUFBSyxXQUNILEtBQUssWUFHVCxVQUNFLFdBQVksUUFBUSwwQkFDcEIsY0FBZSxRQUFRLDZCQUN2QixhQUFjLFdBQ1osTUFBTyxNQUFLLEtBQUssc0JBR3BCLEVBR0gsT0FEQSxHQUFJLFVBQVUsaUJBQWtCLEdBQ3pCOzs7O0FDeEtULEdBQUksT0FBUSxXQUNaLFlBRUEsU0FBUyxHQUFZLEVBQUssR0FDeEIsTUFBZSxPQUFSLEdBQWdCLFlBQWUsR0ErQ3hDLFFBQVMsR0FBTSxFQUFRLEVBQVUsRUFBTyxFQUFXLEdBcUJqRCxRQUFTLEdBQU8sRUFBUSxHQUV0QixHQUFlLE9BQVgsRUFDRixNQUFPLEtBRVQsSUFBYyxJQUFWLEVBQ0YsTUFBTyxFQUVULElBQUksR0FDQSxDQUNKLElBQXFCLGdCQUFWLEdBQ1QsTUFBTyxFQUdULElBQUksRUFBWSxFQUFRLEdBQ3RCLEVBQVEsR0FBSSxPQUNQLElBQUksRUFBWSxFQUFRLEdBQzdCLEVBQVEsR0FBSSxPQUNQLElBQUksRUFBWSxFQUFRLEdBQzdCLEVBQVEsR0FBSSxHQUFjLFNBQVUsRUFBUyxHQUMzQyxFQUFPLEtBQUssU0FBUyxHQUNuQixFQUFRLEVBQU8sRUFBTyxFQUFRLEtBQzdCLFNBQVMsR0FDVixFQUFPLEVBQU8sRUFBSyxFQUFRLFlBRzFCLElBQUksRUFBTSxVQUFVLEdBQ3pCLFNBQ0ssSUFBSSxFQUFNLFdBQVcsR0FDMUIsRUFBUSxHQUFJLFFBQU8sRUFBTyxPQUFRLEVBQWlCLElBQy9DLEVBQU8sWUFBVyxFQUFNLFVBQVksRUFBTyxlQUMxQyxJQUFJLEVBQU0sU0FBUyxHQUN4QixFQUFRLEdBQUksTUFBSyxFQUFPLGVBQ25CLENBQUEsR0FBSSxHQUFhLE9BQU8sU0FBUyxHQVN0QyxNQU5FLEdBRkUsT0FBTyxZQUVELE9BQU8sWUFBWSxFQUFPLFFBRzFCLEdBQUksUUFBTyxFQUFPLFFBRTVCLEVBQU8sS0FBSyxHQUNMLENBQ0UsR0FBWSxFQUFRLE9BQzdCLEVBQVEsT0FBTyxPQUFPLE9BRUUsS0FBYixHQUNULEVBQVEsT0FBTyxlQUFlLEdBQzlCLEVBQVEsT0FBTyxPQUFPLEtBR3RCLEVBQVEsT0FBTyxPQUFPLEdBQ3RCLEVBQVEsR0FJWixHQUFJLEVBQVUsQ0FDWixHQUFJLEdBQVEsRUFBVyxRQUFRLEVBRS9CLEtBQWMsR0FBVixFQUNGLE1BQU8sR0FBWSxFQUVyQixHQUFXLEtBQUssR0FDaEIsRUFBWSxLQUFLLEdBR2YsRUFBWSxFQUFRLElBQ3RCLEVBQU8sUUFBUSxTQUFTLEVBQU8sR0FDN0IsR0FBSSxHQUFXLEVBQU8sRUFBSyxFQUFRLEdBQy9CLEVBQWEsRUFBTyxFQUFPLEVBQVEsRUFDdkMsR0FBTSxJQUFJLEVBQVUsS0FHcEIsRUFBWSxFQUFRLElBQ3RCLEVBQU8sUUFBUSxTQUFTLEdBQ3RCLEdBQUksR0FBYSxFQUFPLEVBQU8sRUFBUSxFQUN2QyxHQUFNLElBQUksSUFJZCxLQUFLLEdBQUksS0FBSyxHQUFRLENBQ3BCLEdBQUksRUFDQSxLQUNGLEVBQVEsT0FBTyx5QkFBeUIsRUFBTyxJQUc3QyxHQUFzQixNQUFiLEVBQU0sTUFHbkIsRUFBTSxHQUFLLEVBQU8sRUFBTyxHQUFJLEVBQVEsSUFHdkMsR0FBSSxPQUFPLHNCQUVULElBQUssR0FERCxHQUFVLE9BQU8sc0JBQXNCLEdBQ2xDLEVBQUksRUFBRyxFQUFJLEVBQVEsT0FBUSxJQUFLLENBR3ZDLEdBQUksR0FBUyxFQUFRLEdBQ2pCLEVBQWEsT0FBTyx5QkFBeUIsRUFBUSxLQUNyRCxHQUFlLEVBQVcsWUFBZSxLQUc3QyxFQUFNLEdBQVUsRUFBTyxFQUFPLEdBQVMsRUFBUSxHQUMxQyxFQUFXLFlBQ2QsT0FBTyxlQUFlLEVBQU8sR0FDM0IsWUFBWSxLQU1wQixHQUFJLEVBRUYsSUFBSyxHQURELEdBQW1CLE9BQU8sb0JBQW9CLEdBQ3pDLEVBQUksRUFBRyxFQUFJLEVBQWlCLE9BQVEsSUFBSyxDQUNoRCxHQUFJLEdBQWUsRUFBaUIsR0FDaEMsRUFBYSxPQUFPLHlCQUF5QixFQUFRLEVBQ3JELElBQWMsRUFBVyxhQUc3QixFQUFNLEdBQWdCLEVBQU8sRUFBTyxHQUFlLEVBQVEsR0FDM0QsT0FBTyxlQUFlLEVBQU8sR0FDM0IsWUFBWSxLQUtsQixNQUFPLEdBbEplLGdCQUFiLEtBQ1QsRUFBUSxFQUFTLE1BQ2pCLEVBQVksRUFBUyxVQUNyQixFQUF1QixFQUFTLHFCQUNoQyxFQUFXLEVBQVMsU0FJdEIsSUFBSSxNQUNBLEtBRUEsRUFBNkIsbUJBQVYsT0EwSXZCLFlBeEl1QixLQUFaLElBQ1QsR0FBVyxPQUVPLEtBQVQsSUFDVCxFQUFRLEVBQUEsR0FvSUgsRUFBTyxFQUFRLEdBcUJ4QixRQUFTLEdBQVcsR0FDbEIsTUFBTyxRQUFPLFVBQVUsU0FBUyxLQUFLLEdBSXhDLFFBQVMsR0FBUyxHQUNoQixNQUFvQixnQkFBTixJQUFvQyxrQkFBbEIsRUFBVyxHQUk3QyxRQUFTLEdBQVUsR0FDakIsTUFBb0IsZ0JBQU4sSUFBb0MsbUJBQWxCLEVBQVcsR0FJN0MsUUFBUyxHQUFXLEdBQ2xCLE1BQW9CLGdCQUFOLElBQW9DLG9CQUFsQixFQUFXLEdBSTdDLFFBQVMsR0FBaUIsR0FDeEIsR0FBSSxHQUFRLEVBSVosT0FISSxHQUFHLFNBQVEsR0FBUyxLQUNwQixFQUFHLGFBQVksR0FBUyxLQUN4QixFQUFHLFlBQVcsR0FBUyxLQUNwQixFQWhQVCxHQUFJLEVBQ0osS0FDRSxFQUFZLElBQ1osTUFBTSxHQUdOLEVBQVksYUFHZCxHQUFJLEVBQ0osS0FDRSxFQUFZLElBQ1osTUFBTSxHQUNOLEVBQVksYUFHZCxHQUFJLEVBQ0osS0FDRSxFQUFnQixRQUNoQixNQUFNLEdBQ04sRUFBZ0IsYUFnT2xCLE1BeENBLEdBQU0sZUFBaUIsU0FBd0IsR0FDN0MsR0FBZSxPQUFYLEVBQ0YsTUFBTyxLQUVULElBQUksR0FBSSxZQUVSLE9BREEsR0FBRSxVQUFZLEVBQ1AsR0FBSSxJQVFiLEVBQU0sV0FBYSxFQUtuQixFQUFNLFNBQVcsRUFLakIsRUFBTSxVQUFZLEVBS2xCLEVBQU0sV0FBYSxFQVNuQixFQUFNLGlCQUFtQixFQUVsQixJQUdlLGlCQUFYLFNBQXVCLE9BQU8sVUFDdkMsT0FBTyxRQUFVOzs7OztBQzlQakIsT0FBTyxRQUFVLFFBQVE7Ozs7QUNJM0IsWUFBcUMsU0FBUyxHQUFFLEdBQUcsTUFBTyxPQUFNLEVBQUUsUUFBUyxHQUFFLEdBQUcsTUFBTyxPQUFNLEVBQUUsUUFBUyxHQUFFLEdBQUcsT0FBTSxJQUFLLEVBQUUsUUFBUyxHQUFFLEdBQUcsTUFBTSxnQkFBaUIsSUFBRyxnQkFBaUIsSUFBRyxnQkFBaUIsSUFBRyxpQkFBa0IsR0FBRSxRQUFTLEdBQUUsR0FBRyxNQUFPLFFBQU8sR0FBRyxnQkFBaUIsR0FBa0MsUUFBUyxHQUFFLEdBQUcsTUFBTSxvQkFBb0IsRUFBRSxLQUFLLEdBQUcsUUFBUyxHQUFFLEdBQUcsR0FBSSxHQUFFLFdBQVcsT0FBTyxHQUFJLE9BQU8sSUFBRyxHQUFHLEtBQUssTUFBTSxLQUFLLEdBQUcsU0FBUyxHQUFHLFFBQVMsR0FBRSxHQUFHLE1BQU8sR0FBRSxJQUFJLGtCQUFtQixHQUFFLE1BQU0sa0JBQW1CLEdBQUUsTUFBTSxRQUFTLEdBQUUsR0FBRyxNQUFPLE9BQU0sRUFBRSxHQUFHLE1BQU0sUUFBUSxJQUFJLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxLQUFLLFVBQVUsRUFBRSxLQUFLLEdBQUcsT0FBTyxHQUFHLFFBQVMsR0FBRSxHQUFHLEdBQUksR0FBRSxXQUFXLEVBQUcsT0FBTyxPQUFNLEdBQUcsRUFBRSxFQUFFLFFBQVMsR0FBRSxFQUFFLEdBQUcsSUFBSSxHQUFJLEdBQUUsT0FBTyxPQUFPLE1BQU0sRUFBRSxFQUFFLE1BQU0sS0FBSyxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sSUFBSSxFQUFFLEVBQUUsS0FBSSxDQUFHLE9BQU8sR0FBRSxTQUFTLEdBQUcsTUFBTyxHQUFFLEVBQUUsZ0JBQWdCLFNBQVMsR0FBRyxNQUFPLEdBQUUsSUFBbUUsUUFBUyxHQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsT0FBTyxDQUFDLEdBQUksR0FBRSxFQUFFLFFBQVEsRUFBRyxJQUFHLEdBQUcsRUFBRSxNQUFPLEdBQUUsT0FBTyxFQUFFLElBQTBDLFFBQVMsR0FBRSxFQUFFLEdBQUcsTUFBTyxHQUFFLEtBQUssRUFBRSxHQUFHLFFBQVMsR0FBRSxHQUFHLEdBQUksR0FBRSxPQUFPLE9BQU8sS0FBTSxPQUFPLFVBQVMsR0FBRyxNQUFPLEdBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxLQUFrYixRQUFTLEdBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFFLEtBQUksR0FBSSxHQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsR0FBSSxPQUFNLEdBQUcsS0FBSyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUcsT0FBTyxHQUFFLFFBQVMsR0FBRSxFQUFFLEdBQUcsSUFBSSxHQUFJLEtBQUssR0FBRSxFQUFFLEdBQUcsRUFBRSxFQUFHLE9BQU8sR0FBRSxRQUFTLEdBQUUsR0FBRyxJQUFJLEdBQUksTUFBSyxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sSUFBSSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsR0FBSSxPQUFPLEdBQUUsUUFBUyxHQUFFLEVBQUUsRUFBRSxJQUE0RCxRQUFTLEdBQUUsRUFBRSxHQUFHLEdBQUcsSUFBSSxFQUFFLE9BQU0sQ0FBRyxJQUFJLEdBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFHLEtBQUksSUFBSSxFQUFFLE9BQU8sSUFBSSxHQUFHLE9BQU8sS0FBSyxPQUFPLEVBQUcsS0FBSSxHQUFJLEdBQUUsTUFBTSxRQUFRLEdBQUcsRUFBRSxNQUFNLFFBQVEsRUFBRyxJQUFHLEdBQUcsRUFBRSxNQUFPLEdBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxNQUFNLFNBQVMsRUFBRSxHQUFHLE1BQU8sR0FBRSxFQUFFLEVBQUUsS0FBTSxJQUFHLFlBQWEsT0FBTSxZQUFhLE1BQUssTUFBTyxHQUFFLFlBQVksRUFBRSxTQUFVLElBQUcsR0FBRyxFQUFFLE9BQU0sQ0FBRyxJQUFJLEdBQUUsT0FBTyxLQUFLLEdBQUcsRUFBRSxPQUFPLEtBQUssRUFBRyxPQUFPLEdBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxNQUFNLFNBQVMsR0FBRyxNQUFPLEdBQUUsRUFBRSxHQUFHLEVBQUUsTUFBTSxNQUFNLEdBQUcsT0FBTSxHQUFJLFFBQVMsR0FBRSxFQUFFLEdBQUcsSUFBSSxHQUFJLEdBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxJQUFJLEdBQUcsRUFBRSxFQUFFLEdBQUcsR0FBRyxNQUFPLEVBQUUsUUFBTyxFQUFFLFFBQVMsR0FBRSxHQUFHLEdBQUksSUFBRSxDQUFHLE9BQU8sWUFBVyxJQUFJLEdBQUUsRUFBRyxFQUFFLE1BQU0sS0FBSyxhQUFpdEIsUUFBUyxHQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsT0FBTyxlQUFlLEVBQUUsR0FBRyxNQUFNLEVBQUUsYUFBYSxFQUFFLFVBQVMsRUFBRyxjQUFhLElBQWl6QixRQUFTLElBQUcsR0FBRyxNQUFNLGtCQUFtQixJQUFHLGNBQWMsS0FBSyxFQUFFLFlBQTRzQixRQUFTLElBQUcsR0FBRyxHQUFHLEtBQUssR0FBRyxHQUFHLE9BQU8sRUFBRSxRQUFTLE1BQUssR0FBRyxNQUFNLEdBQUcsT0FBTyxHQUFHLEdBQUcsT0FBTyxHQUF5cEIsUUFBUyxJQUFHLEdBQUcsTUFBTyxJQUFJLFFBQUcsT0FBTyxPQUFPLEdBQU8sT0FBTyxJQUFJLFFBQVMsSUFBRyxHQUFHLEdBQUksR0FBRSxHQUFJLElBQUcsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxTQUFTLFFBQVEsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxpQkFBaUIsRUFBRSxhQUFjLE9BQU8sR0FBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBUyxFQUFHLEVBQTRaLFFBQVMsSUFBRyxHQUFHLEdBQUcsRUFBeVAsUUFBUyxJQUFHLEVBQUUsR0FBRyxHQUFJLEVBQUUsSUFBRyxFQUFFLE1BQU0sWUFBYSxLQUFJLE1BQU8sR0FBRSxFQUFFLFdBQVcsRUFBRSxpQkFBa0IsSUFBRyxFQUFFLEVBQUUsT0FBTyxLQUFLLE9BQU8sTUFBTSxRQUFRLElBQUksRUFBRSxLQUFLLE9BQU8sYUFBYSxLQUFLLEVBQUUsU0FBUyxFQUFFLEdBQUksSUFBRyxJQUFJLEdBQUcsR0FBRyxFQUFFLFVBQVUsRUFBRSxRQUFTLElBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEdBQUksR0FBRSxHQUFJLElBQUcsRUFBRSxPQUFPLHlCQUF5QixFQUFFLEVBQUcsS0FBSSxJQUFHLElBQUssRUFBRSxhQUFhLENBQUMsR0FBSSxHQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUksS0FBSSxHQUFHLElBQUksVUFBVSxTQUFTLEVBQUUsRUFBRSxHQUFJLElBQUksSUFBRyxHQUFHLEdBQUcsRUFBRyxRQUFPLGVBQWUsRUFBRSxHQUFHLFlBQVcsRUFBRyxjQUFhLEVBQUcsSUFBSSxXQUFXLEdBQUksR0FBRSxFQUFFLEVBQUUsS0FBSyxHQUFHLENBQUUsT0FBTyxJQUFHLFNBQVMsRUFBRSxTQUFTLElBQUksRUFBRSxJQUFJLFNBQVMsTUFBTSxRQUFRLElBQUksUUFBUyxHQUFFLEdBQUcsSUFBSSxHQUFJLE9BQUUsR0FBTyxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsT0FBTyxJQUFJLFNBQVMsTUFBTSxRQUFRLElBQUksRUFBRSxJQUFJLEtBQUssR0FBRyxJQUFJLFNBQVMsR0FBRyxHQUFJLEdBQUUsRUFBRSxFQUFFLEtBQUssR0FBRyxDQUFFLEtBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksSUFBSSxFQUFFLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsR0FBRyxHQUFHLEdBQUcsRUFBRSxjQUFjLFFBQVMsSUFBRyxFQUFFLEVBQUUsR0FBRyxHQUFHLE1BQU0sUUFBUSxJQUFJLEVBQUUsR0FBRyxNQUFPLEdBQUUsT0FBTyxLQUFLLElBQUksRUFBRSxPQUFPLEdBQUcsRUFBRSxPQUFPLEVBQUUsRUFBRSxHQUFHLENBQUUsSUFBRyxJQUFLLE1BQUssSUFBSyxRQUFPLFdBQVcsTUFBTyxHQUFFLEdBQUcsRUFBRSxDQUFFLElBQUksR0FBRSxFQUFFLE1BQU8sT0FBTyxHQUFFLFFBQVEsR0FBRyxFQUFFLFFBQVEsRUFBRSxHQUFHLEdBQUcsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLElBQUksU0FBUyxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsUUFBUyxJQUFHLEVBQUUsR0FBRyxHQUFHLE1BQU0sUUFBUSxJQUFJLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsR0FBSSxHQUFFLEVBQUUsTUFBTyxHQUFFLFFBQVEsR0FBRyxFQUFFLFNBQVMsRUFBRSxFQUFFLFdBQVksR0FBRSxHQUFHLEdBQUcsRUFBRSxJQUFJLFdBQStNLFFBQVMsSUFBRyxFQUFFLEdBQUcsSUFBSSxFQUFFLE1BQU8sRUFBRSxLQUFJLEdBQUksR0FBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLFFBQVEsUUFBUSxHQUFHLE9BQU8sS0FBSyxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxJQUFJLFlBQVksRUFBRSxFQUFFLE1BQU0sRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsSUFBSSxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksR0FBRyxFQUFFLEdBQUcsR0FBRyxFQUFFLEVBQUUsR0FBSSxPQUFPLEdBQUUsUUFBUyxJQUFHLEVBQUUsRUFBRSxHQUFHLE1BQU8sR0FBRSxXQUFXLEdBQUksR0FBRSxrQkFBbUIsR0FBRSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsRUFBRSxrQkFBbUIsR0FBRSxFQUFFLEtBQUssRUFBRSxHQUFHLENBQUUsT0FBTyxHQUFFLEdBQUcsRUFBRSxHQUFHLEdBQUcsRUFBRSxFQUFFLFdBQVcsTUFBTyxJQUFHLGtCQUFtQixHQUFFLEVBQUUsS0FBSyxLQUFLLE1BQU0sRUFBRSxrQkFBbUIsR0FBRSxFQUFFLEtBQUssS0FBSyxNQUFNLElBQUksRUFBRSxFQUFFLFFBQVMsSUFBRyxFQUFFLEdBQUcsR0FBSSxHQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sR0FBRyxNQUFNLFFBQVEsR0FBRyxHQUFHLEdBQUcsQ0FBRSxPQUFPLEdBQUUsU0FBUyxHQUFHLElBQUksR0FBSSxNQUFLLEVBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxLQUFLLElBQUksRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxHQUFJLE9BQU8sSUFBRyxHQUFHLEVBQUUsUUFBUyxJQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBSSxHQUFFLE9BQU8sT0FBTyxHQUFHLEtBQU0sT0FBTyxHQUFFLEVBQUUsRUFBRSxHQUFHLEVBQXNrQixRQUFTLElBQUcsRUFBRSxFQUFFLEdBQTB0QixRQUFTLEdBQUUsR0FBRyxHQUFJLEdBQUUsR0FBRyxJQUFJLEVBQUcsR0FBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQXh3QixHQUFHLGtCQUFtQixLQUFJLEVBQUUsRUFBRSxTQUFTLFNBQVMsRUFBRSxHQUFHLEdBQUksR0FBRSxFQUFFLEtBQU0sSUFBRyxFQUFFLENBQUMsR0FBSSxHQUFFLEVBQUUsSUFBSyxJQUFHLE1BQU0sUUFBUSxHQUFHLElBQUksRUFBRSxFQUFFLE9BQU8sS0FBSyxpQkFBaUIsRUFBRSxFQUFFLE1BQU0sRUFBRSxFQUFFLEtBQUssS0FBSyxXQUFZLElBQUcsRUFBRSxHQUFHLElBQUksR0FBSSxLQUFLLEdBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLElBQUksRUFBRSxHQUFHLEdBQUcsS0FBSyxFQUFHLEdBQUUsTUFBTSxJQUFJLEdBQUcsU0FBUyxFQUFFLEdBQUcsR0FBSSxHQUFFLEVBQUUsTUFBTyxJQUFHLEVBQUUsQ0FBQyxHQUFJLEdBQUUsRUFBRSxTQUFVLElBQUcsTUFBTSxRQUFRLEdBQUcsSUFBSSxHQUFJLEdBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxJQUFJLEVBQUUsRUFBRSxLQUFLLEtBQUssRUFBRSxRQUFTLElBQUcsRUFBRSxHQUFHLElBQUksR0FBSSxLQUFLLEdBQUUsQ0FBQyxHQUFJLEdBQUUsRUFBRSxFQUFHLEdBQUUsR0FBRyxFQUFFLEdBQUcsR0FBRyxLQUFLLEdBQUcsSUFBSSxLQUFLLE1BQU0sR0FBRyxTQUFTLEdBQUcsR0FBSSxHQUFFLEVBQUUsVUFBVyxJQUFHLEVBQUUsSUFBSSxHQUFJLEtBQUssR0FBRSxDQUFDLEdBQUksR0FBRSxFQUFFLEVBQUcsbUJBQW1CLEtBQUksRUFBRSxJQUFJLEtBQUssRUFBRSxPQUFPLE1BQU0sSUFBSSxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLEVBQUUsUUFBUSxJQUFJLEVBQUUsUUFBUSxJQUFJLEdBQUksR0FBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLE9BQU8sRUFBRSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsRUFBRSxPQUFPLEdBQUcsRUFBRyxJQUFJLEdBQUUsSUFBSyxLQUFJLElBQUssR0FBRSxFQUFFLEVBQUcsS0FBSSxJQUFLLEdBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxFQUF1RCxPQUFPLEdBQUUsUUFBUyxJQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBRyxnQkFBaUIsR0FBRSxDQUFDLEdBQUksR0FBRSxFQUFFLEVBQUcsSUFBRyxFQUFFLEVBQUUsR0FBRyxNQUFPLEdBQUUsRUFBRyxJQUFJLEdBQUUsRUFBRSxFQUFHLElBQUcsRUFBRSxFQUFFLEdBQUcsTUFBTyxHQUFFLEVBQUcsSUFBSSxHQUFFLEVBQUUsRUFBRyxPQUFPLEdBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxRQUFTLElBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFJLEdBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLFFBQVEsRUFBRSxLQUFNLElBQUcsR0FBRyxFQUFFLEdBQUcsSUFBSSxFQUFFLEVBQUUsV0FBVyxHQUFFLE1BQVEsSUFBRyxLQUFLLEdBQUcsSUFBSSxFQUFFLEdBQUcsQ0FBQyxHQUFJLEdBQUUsR0FBRyxPQUFPLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxLQUFLLEdBQUUsR0FBSSxPQUFHLEtBQVMsRUFBRSxDQUFDLEVBQUUsU0FBUyxFQUFFLEVBQUUsR0FBRyxHQUFJLEVBQUUsRUFBRSxXQUFSLENBQTBCLEdBQUksR0FBRSxFQUFFLE9BQVEsT0FBRyxJQUFHLEVBQUUsU0FBUyxlQUFXLEtBQVMsRUFBRSxTQUFTLFVBQVUsUUFBSSxLQUFTLEVBQUUsT0FBTyxHQUFVLEVBQUUsT0FBTyxHQUFTLGtCQUFtQixJQUFHLGFBQWEsR0FBRyxFQUFFLE1BQU0sRUFBRSxLQUFLLEdBQUcsSUFBRyxFQUFFLEVBQUUsRUFBRyxJQUFJLEdBQUUsRUFBRyxLQUFHLEdBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxNQUFPLEdBQUUsUUFBUyxJQUFHLEdBQUcsR0FBSSxHQUFFLEdBQUcsRUFBRSxXQUFXLE1BQU0scUJBQXNCLE9BQU8sR0FBRSxFQUFFLEdBQUcsR0FBRyxRQUFTLElBQUcsRUFBRSxHQUFHLE1BQU8sSUFBRyxLQUFLLEdBQUcsR0FBRyxRQUFTLElBQUcsRUFBRSxHQUFHLElBQUksTUFBTSxRQUFRLEdBQUcsTUFBTyxJQUFHLEVBQUUsR0FBRyxHQUFHLENBQUUsS0FBSSxHQUFJLEdBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsSUFBSSxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsTUFBTyxFQUFFLFFBQU8sRUFBRSxRQUFTLElBQUcsRUFBRSxFQUFFLEdBQUcsSUFBSyxLQUFJLEdBQUcsRUFBRSxJQUFJLEdBQUksR0FBRSxFQUFFLEVBQUUsRUFBRSxTQUFTLENBQUMsR0FBSSxHQUFFLEVBQUUsU0FBUyxhQUFjLElBQUcsRUFBRSxJQUFJLEdBQUksR0FBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLElBQUksSUFBSSxJQUFHLElBQUssRUFBRSxHQUFHLEtBQUssRUFBRSxFQUFFLEVBQUUsR0FBRyxPQUFPLE1BQU0sR0FBRyxHQUFHLEVBQUUsRUFBRSx1QkFBdUIsR0FBRyxFQUFFLEVBQUUsR0FBRyxRQUFRLE1BQU0sUUFBUyxJQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFJLEVBQUUsTUFBSyxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLEtBQUssTUFBTSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLE1BQU0sU0FBUyxHQUFHLE1BQU8sSUFBRyxFQUFFLEVBQUUsRUFBRSxzQkFBc0IsRUFBRSxVQUFTLEdBQUksTUFBTSxHQUFHLEdBQUcsRUFBRSxFQUFFLEdBQUcsTUFBTyxHQUFFLFFBQVMsSUFBRyxFQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsYUFBYSxJQUFJLE1BQU8sR0FBRSxhQUFhLEtBQUssS0FBSyxFQUFFLEVBQUUsR0FBRyxNQUFNLEdBQUcsSUFBSSxHQUFHLEdBQUcsRUFBRSxLQUFLLHVCQUF1QixHQUFHLEVBQUUsRUFBRSxHQUFHLFFBQVMsSUFBRyxFQUFFLEVBQUUsR0FBRyxJQUFJLElBQUksR0FBRyxtQkFBb0IsU0FBUSxLQUFNLEVBQUUsU0FBUSxNQUFNLEdBQTRCLFFBQVMsTUFBSyxJQUFHLENBQUcsSUFBSSxHQUFFLEdBQUcsTUFBTSxFQUFHLElBQUcsT0FBTyxDQUFFLEtBQUksR0FBSSxHQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sSUFBSSxFQUFFLEtBQWlpQixRQUFTLElBQUcsRUFBRSxHQUFHLEdBQUksRUFBRSxJQUFHLEdBQUcsS0FBSyxXQUFXLEdBQUcsRUFBRSxJQUFJLEVBQUUsS0FBSyxHQUFHLE1BQU0sR0FBRyxHQUFHLEVBQUUsRUFBRSxnQkFBaUIsSUFBRyxFQUFFLEtBQUssS0FBSyxJQUFHLEVBQUcsT0FBTyxHQUFHLG1CQUFvQixTQUFRLE1BQU8sSUFBSSxTQUFRLFNBQVMsR0FBRyxFQUFFLElBQWtCLFFBQVMsSUFBRyxJQUFJLFFBQVMsR0FBRSxFQUFFLEdBQUcsR0FBSSxHQUFFLEVBQU0sRUFBRSxNQUFNLFFBQVEsRUFBRyxPQUFJLElBQUksRUFBRSxJQUFJLE9BQU8sU0FBUyxJQUFJLFlBQWEsS0FBL0MsQ0FBeUQsR0FBRyxFQUFFLE9BQU8sQ0FBQyxHQUFJLEdBQUUsRUFBRSxPQUFPLElBQUksRUFBRyxJQUFHLEVBQUUsSUFBSSxHQUFHLE1BQU8sR0FBRSxJQUFJLEdBQUcsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLE9BQU8sS0FBSyxFQUFFLEVBQUUsR0FBRyxPQUFRLEtBQUksRUFBRSxPQUFPLEtBQUssR0FBRyxFQUFFLEVBQUUsT0FBTyxLQUFLLEVBQUUsRUFBRSxFQUFFLElBQUksS0FBSSxFQUFFLElBQUksR0FBRyxRQUEwTCxRQUFTLElBQUcsRUFBRSxHQUFHLFFBQVMsS0FBSSxHQUFJLEdBQUUsVUFBVSxFQUFFLEVBQUUsR0FBSSxLQUFJLE1BQU0sUUFBUSxHQUFHLE1BQU8sSUFBRyxFQUFFLEtBQUssVUFBVSxFQUFFLGVBQWdCLEtBQUksR0FBSSxHQUFFLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sSUFBSSxHQUFHLEVBQUUsR0FBRyxLQUFLLEVBQUUsRUFBRSxnQkFBZ0IsTUFBTyxHQUFFLElBQUksRUFBRSxFQUFFLFFBQVMsSUFBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFJLEdBQUUsRUFBRSxFQUFFLENBQUUsS0FBSSxJQUFLLEdBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUUsUUFBUSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsVUFBVSxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxTQUFTLElBQUksSUFBSSxFQUFFLElBQUksRUFBRSxFQUFFLEdBQUcsR0FBSSxLQUFJLElBQUssR0FBRSxFQUFFLEVBQUUsS0FBSyxHQUFHLEVBQUUsR0FBRyxJQUFJLEtBQUssRUFBRSxHQUFHLEVBQUUsU0FBUyxRQUFTLElBQUcsRUFBRSxFQUFFLEdBQXVFLFFBQVMsS0FBSSxFQUFFLE1BQU0sS0FBSyxXQUFXLEVBQUUsRUFBRSxJQUFJLEdBQWpILEdBQUksRUFBRSxhQUFhLE1BQUssRUFBRSxFQUFFLEtBQUssT0FBTyxFQUFFLEtBQUssU0FBVSxJQUFJLEdBQUUsRUFBRSxFQUFtRCxHQUFFLEdBQUcsRUFBRSxJQUFJLElBQUksRUFBRSxFQUFFLE1BQU0sRUFBRSxFQUFFLFNBQVMsRUFBRSxHQUFHLElBQUksS0FBSyxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxRQUFPLEVBQUcsRUFBRSxHQUFHLEVBQUUsUUFBUyxJQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxFQUFFLEdBQUcsTUFBTyxHQUFFLEdBQUcsRUFBRSxHQUFHLFNBQVUsR0FBRSxJQUFHLENBQUcsSUFBRyxFQUFFLEVBQUUsR0FBRyxNQUFPLEdBQUUsR0FBRyxFQUFFLEdBQUcsU0FBVSxHQUFFLElBQUcsRUFBRyxPQUFNLEVBQUcsUUFBUyxJQUFHLEdBQUcsTUFBTyxHQUFFLElBQUksR0FBRyxJQUFJLE1BQU0sUUFBUSxHQUFHLFFBQVMsR0FBRSxFQUFFLEdBQUcsR0FBYSxHQUFFLEVBQUUsRUFBRSxFQUFmLElBQWlCLEtBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLElBQUksRUFBRSxFQUFFLEVBQUUsS0FBSyxpQkFBa0IsS0FBSSxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxHQUFHLE1BQU0sUUFBUSxHQUFHLEVBQUUsT0FBTyxJQUFJLElBQUksRUFBRSxFQUFFLEdBQUcsR0FBRyxJQUFJLElBQUksSUFBSSxLQUFLLEdBQUcsS0FBSyxFQUFFLEdBQUcsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLE1BQU0sRUFBRSxTQUFTLEVBQUUsS0FBSyxNQUFNLEVBQUUsSUFBSSxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsS0FBSyxHQUFHLEtBQUssR0FBRyxFQUFFLEtBQUssR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUUsV0FBVyxFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxJQUFJLFVBQVUsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEtBQUssSUFBSyxPQUFPLElBQUcsT0FBRyxHQUFPLFFBQVMsSUFBRyxHQUFHLE1BQU8sR0FBRSxJQUFJLEVBQUUsRUFBRSxRQUFPLElBQUssRUFBRSxVQUFVLFFBQVMsSUFBRyxFQUFFLEdBQUcsR0FBRyxFQUFFLENBQUMsSUFBSSxHQUFJLEdBQUUsT0FBTyxPQUFPLE1BQU0sRUFBRSxHQUFHLFFBQVEsUUFBUSxHQUFHLE9BQU8sS0FBSyxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxJQUFJLENBQUMsR0FBSSxHQUFFLEVBQUUsRUFBRyxJQUFHLFdBQVcsRUFBRSxDQUFDLElBQUksR0FBSSxHQUFFLEVBQUUsR0FBRyxLQUFLLEVBQUUsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLFdBQVcsRUFBRSxFQUFFLFVBQVUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLFVBQVUsRUFBRyxPQUFNLEVBQUUsRUFBRSxRQUFRLElBQUksR0FBRyxXQUFZLEdBQUUsR0FBRyxDQUFDLEdBQUksR0FBRSxFQUFFLEdBQUcsT0FBUSxHQUFFLEdBQUcsa0JBQW1CLEdBQUUsRUFBRSxLQUFLLEdBQUcsSUFBSSxNQUFPLElBQUcsUUFBUyxJQUFHLEVBQUUsR0FBRyxJQUFJLElBQUksRUFBRSxPQUFPLFFBQVMsS0FBSSxHQUFJLE1BQUssRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxJQUFJLENBQUMsR0FBSSxHQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsSUFBSyxJQUFHLEdBQUcsRUFBRSxPQUFPLEVBQUUsTUFBTSxZQUFhLEdBQUUsTUFBTSxLQUFLLEVBQUUsVUFBVSxHQUFHLEVBQUUsWUFBWSxJQUFJLEdBQUcsTUFBTSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsYUFBYSxLQUFLLE9BQU8sQ0FBQyxHQUFJLEdBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxLQUFLLEVBQUUsTUFBTyxjQUFhLEVBQUUsSUFBSSxFQUFFLEtBQUssTUFBTSxFQUFFLEVBQUUsY0FBYyxFQUFFLEtBQUssSUFBSSxJQUFJLEdBQUksS0FBSyxHQUFFLEVBQUUsR0FBRyxNQUFNLFdBQVksR0FBRSxFQUFHLE9BQU8sR0FBRSxRQUFTLElBQUcsR0FBRyxNQUFPLEdBQUUsWUFBWSxFQUFFLGNBQWMsTUFBTSxFQUFFLEtBQUssUUFBUyxJQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUksR0FBRSxFQUFFLE9BQU8sS0FBSyxHQUFHLE9BQU8sRUFBRSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsRUFBRSxHQUFHLEVBQUUsSUFBSyxJQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsWUFBWSxNQUFPLEdBQUUsV0FBWSxJQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsSUFBSSxFQUFFLE9BQU8sSUFBSSxFQUFFLFdBQVcsTUFBTyxFQUFFLEtBQUksR0FBSSxLQUFLLE1BQUssRUFBRSxFQUFFLElBQUksTUFBTSxFQUFFLEtBQUssRUFBRSxHQUFHLEdBQUcsRUFBRSxFQUFFLEVBQUUsU0FBVSxLQUFLLEtBQUksR0FBSSxLQUFLLEdBQUUsSUFBSyxLQUFJLEVBQUUsR0FBRyxHQUFHLEVBQUUsR0FBSSxPQUFPLElBQUcsT0FBTyxhQUFhLEtBQUssRUFBRSxZQUFZLEdBQUcsRUFBRSxFQUFFLFVBQVUsR0FBRyxFQUFFLEVBQUUsT0FBTyxHQUFHLEVBQUUsRUFBRSxhQUFhLEdBQUcsRUFBRSxRQUFTLElBQUcsRUFBRSxFQUFFLEdBQUcsR0FBSSxHQUFFLFdBQVcsR0FBSSxHQUFFLFVBQVUsT0FBTyxFQUFFLE1BQU0sS0FBSyxXQUFXLEtBQU0sUUFBTyxFQUFFLEdBQUcsZ0JBQWlCLEtBQUksTUFBTSxRQUFRLElBQUksR0FBRyxHQUFHLE1BQU0sSUFBSSxFQUFFLFFBQVEsSUFBSSxFQUFFLFFBQVEsRUFBRSxHQUFHLGVBQVcsR0FBTyxFQUFHLE9BQU8sR0FBRSxPQUFPLE9BQU8sZUFBZSxFQUFFLEdBQUcsSUFBSSxFQUFFLFlBQVcsRUFBRyxjQUFhLElBQUssRUFBRSxRQUFTLElBQUcsRUFBRSxHQUFHLE1BQU8sWUFBVyxNQUFPLEdBQUUsSUFBSSxRQUFTLElBQUcsRUFBRSxHQUFHLEdBQUksR0FBRSxFQUFFLEVBQUUsRUFBRSxDQUFFLElBQUcsTUFBTSxRQUFRLElBQUksZ0JBQWlCLEdBQUUsSUFBSSxFQUFFLEdBQUksT0FBTSxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxPQUFRLElBQUcsZ0JBQWlCLEdBQUUsSUFBSSxFQUFFLEdBQUksT0FBTSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsT0FBUSxJQUFHLEVBQUUsR0FBRyxHQUFHLElBQUksRUFBRSxPQUFPLFVBQVUsQ0FBQyxJQUFLLEtBQUksR0FBSSxHQUFFLEVBQUUsT0FBTyxZQUFZLEVBQUUsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsRUFBRSxXQUFZLEtBQUksRUFBRSxPQUFPLEtBQUssR0FBRyxFQUFFLEdBQUksT0FBTSxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUcsT0FBTyxHQUFFLEtBQUssTUFBTSxFQUFFLFVBQVMsRUFBRyxFQUFFLFFBQVMsSUFBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEdBQUksR0FBRSxFQUFFLEtBQUssYUFBYSxFQUFHLElBQUcsRUFBRSxNQUFNLElBQUksRUFBRSxFQUFFLEtBQUssR0FBRyxJQUFJLEVBQUUsRUFBRSxJQUFJLEdBQUcsRUFBRSxLQUFLLE9BQU8sSUFBSSxDQUFFLElBQUksR0FBRSxHQUFHLEVBQUUsSUFBSyxPQUFPLEdBQUUsS0FBSyxlQUFlLFlBQVksS0FBSyxHQUFHLEdBQUcsRUFBRSxRQUFTLElBQUcsR0FBRyxNQUFPLElBQUcsS0FBSyxTQUFTLFVBQVUsSUFBSSxFQUFFLFFBQVMsSUFBRyxFQUFFLEdBQUcsTUFBTyxPQUFNLFFBQVEsSUFBSSxJQUFJLEVBQUUsUUFBUSxHQUFHLElBQUksRUFBRSxRQUFTLElBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEdBQUksR0FBRSxFQUFFLFNBQVMsSUFBSSxDQUFFLE9BQU8sSUFBRyxJQUFJLEVBQUUsU0FBUyxHQUFHLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEtBQUssTUFBRSxHQUFPLFFBQVMsSUFBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBRyxHQUFLLEVBQUUsR0FBRyxDQUFDLEdBQUksRUFBRSxPQUFNLFFBQVEsS0FBSyxFQUFFLEVBQUUsR0FBZ1IsS0FBSSxHQUFJLEtBQUssSUFBblIsU0FBUyxHQUFHLEdBQUcsVUFBVSxHQUFHLFVBQVUsR0FBRyxFQUFFLEdBQUcsRUFBRSxNQUFNLENBQUMsR0FBSSxHQUFFLEVBQUUsT0FBTyxFQUFFLE1BQU0sSUFBSyxHQUFFLEdBQUcsRUFBRSxZQUFZLEVBQUUsRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLGFBQWEsRUFBRSxRQUFRLEVBQUUsVUFBVSxHQUFJLEdBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFHLEtBQUssSUFBRyxJQUFLLEtBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxLQUFLLEVBQUUsS0FBSyxFQUFFLFFBQVEsVUFBVSxHQUFHLFNBQVMsR0FBRyxFQUFFLEdBQUcsTUFBdUIsR0FBUSxNQUFPLEdBQUUsUUFBUyxJQUFHLEVBQUUsR0FBRyxHQUFJLEdBQUUsS0FBSyxlQUFlLEtBQUssaUJBQWlCLEVBQUUsRUFBRSxFQUFHLE9BQU8sS0FBSSxFQUFFLEdBQUcsR0FBRyxFQUFFLEVBQUUsR0FBRyxLQUFLLFNBQVMsZ0JBQWdCLEdBQUcsS0FBSyxLQUFLLGFBQWEsS0FBSyxNQUFNLGFBQWEsR0FBRSxHQUFJLEdBQUcsUUFBUyxJQUFHLEVBQUUsRUFBRSxHQUFHLE1BQU8sSUFBRyxFQUFFLFdBQVcsR0FBRyxFQUFFLElBQUksRUFBRSxLQUFJLEdBQUksRUFBRSxRQUFTLElBQUcsRUFBRSxFQUFFLEdBQUcsR0FBRyxNQUFNLFFBQVEsR0FBRyxJQUFJLEdBQUksR0FBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLElBQUksRUFBRSxJQUFJLGdCQUFpQixHQUFFLElBQUksR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsT0FBUSxJQUFHLEVBQUUsRUFBRSxHQUFHLFFBQVMsSUFBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLFVBQVMsRUFBRyxFQUFFLElBQUksRUFBRSxFQUFFLE9BQU8sRUFBRSxRQUFTLElBQUcsRUFBRSxHQUFHLEdBQUcsR0FBSyxFQUFFLEdBQUcsQ0FBQyxHQUFJLEdBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxLQUFLLEVBQUUsTUFBTyxLQUFJLEdBQUksS0FBSyxHQUFFLENBQUMsR0FBSSxHQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRyxHQUFFLEdBQUcsS0FBSyxPQUFPLEVBQUUsR0FBRyxHQUFRLE1BQU8sR0FBRSxRQUFTLElBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLElBQUksU0FBUyxFQUFHLEtBQUksR0FBSSxHQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sSUFBSSxDQUFDLEdBQUksR0FBRSxFQUFFLEVBQUcsT0FBTSxRQUFRLEdBQUcsR0FBRyxFQUFFLEVBQUUsR0FBRyxJQUFJLEVBQUUsUUFBUSxFQUFFLEdBQUcsT0FBTSxHQUFJLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxNQUFPLEtBQUksRUFBRSxLQUFLLEdBQUcsRUFBRSxRQUFTLElBQUcsRUFBRSxHQUFHLElBQUksR0FBSSxHQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sR0FBRyxFQUFFLENBQUMsR0FBSSxHQUFFLEVBQUUsRUFBRyxpQkFBaUIsSUFBRyxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxJQUFJLE1BQU8sR0FBRSxRQUFTLElBQUcsRUFBRSxHQUFHLE1BQU0sZ0JBQWlCLEdBQUUsRUFBRSxFQUFFLEVBQUUsUUFBUyxJQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsUUFBUyxJQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFJLEdBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxPQUFRLEdBQUUsRUFBRSxTQUFTLEVBQUUsT0FBTyxPQUFPLElBQUksVUFBVSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsVUFBVyxJQUFJLEdBQUUsRUFBRSxFQUFFLFdBQVcsR0FBRyxDQUFFLE1BQUssS0FBSyxFQUFFLEtBQUssTUFBTSxFQUFFLEtBQUssU0FBUyxFQUFFLEtBQUssT0FBTyxFQUFFLEtBQUssVUFBVSxFQUFFLElBQUksRUFBRSxLQUFLLFdBQVcsR0FBRyxFQUFFLE9BQU8sR0FBRyxLQUFLLE1BQU0sV0FBVyxNQUFPLEdBQUUsUUFBUSxHQUFHLEVBQUUsWUFBWSxFQUFFLE9BQU8sR0FBRyxFQUFFLElBQUksRUFBRSxRQUFRLE9BQU8sZUFBZSxLQUFLLGVBQWUsWUFBVyxFQUFHLElBQUksV0FBVyxNQUFPLElBQUcsRUFBRSxZQUFZLEtBQUssWUFBWSxJQUFJLEtBQUssU0FBUyxFQUFFLEtBQUssT0FBTyxLQUFLLFFBQVEsS0FBSyxhQUFhLEdBQUcsRUFBRSxZQUFZLEtBQUssU0FBUyxFQUFFLFNBQVMsS0FBSyxHQUFHLFNBQVMsRUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFJLEdBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRyxPQUFPLEtBQUksTUFBTSxRQUFRLEtBQUssRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLFVBQVUsR0FBRyxHQUFHLEtBQUssR0FBRyxTQUFTLEVBQUUsRUFBRSxFQUFFLEdBQUcsTUFBTyxJQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxJQUFJLFFBQVMsSUFBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBSSxHQUFFLEdBQUcsRUFBRyxPQUFPLEdBQUUsVUFBVSxFQUFFLEVBQUUsVUFBVSxFQUFFLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxVQUFVLEtBQUssRUFBRSxNQUFNLEVBQUUsUUFBUyxJQUFHLEVBQUUsR0FBRyxJQUFJLEdBQUksS0FBSyxHQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsR0FBeWtELFFBQVMsSUFBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsSUFBSSxFQUFFLEdBQUcsQ0FBQyxHQUFJLEdBQUUsRUFBRSxTQUFTLEtBQU0sSUFBRyxFQUFFLEtBQUssRUFBRSxFQUFFLE9BQU8sSUFBSSxrQkFBbUIsR0FBRSxDQUFDLEdBQUksRUFBRSxJQUFHLEVBQUUsRUFBRSxVQUFNLE1BQVUsRUFBRSxTQUFTLEVBQUUsR0FBRyxHQUFHLEVBQUUsRUFBRSxRQUFRLEVBQUUsRUFBRSxXQUFXLE1BQU8sR0FBRSxTQUFVLElBQUcsRUFBRSxFQUFFLFVBQVUsTUFBTyxHQUFFLFFBQVMsSUFBSSxHQUFFLEVBQThELElBQTNELEdBQUcsRUFBRSxFQUFFLFVBQVUsSUFBSSxFQUFFLE9BQU8sUUFBUSxJQUFJLEVBQUUsT0FBTyxLQUFLLEdBQU0sRUFBRSxFQUFFLFVBQVUsRUFBRSxFQUFFLGFBQWEsTUFBTyxHQUFFLFdBQVksSUFBRyxJQUFJLEVBQUUsRUFBRSxRQUFRLENBQUMsR0FBSSxHQUFFLEVBQUUsUUFBUSxHQUFHLEdBQUUsRUFBRyxFQUFFLEtBQUssRUFBRSxJQUFLLEdBQUUsSUFBSSxpQkFBaUIsV0FBVyxNQUFPLEdBQUUsRUFBRSxJQUFLLElBQUksR0FBRSxTQUFTLEdBQUcsSUFBSSxHQUFJLEdBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsSUFBSSxFQUFFLEdBQUcsY0FBZSxLQUFJLEVBQUUsT0FBTyxFQUFFLE9BQU8sSUFBSSxhQUFhLEdBQUcsRUFBRSxNQUFNLE9BQU8sSUFBSSxhQUFhLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxTQUFTLEdBQUcsRUFBRSxTQUFTLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxPQUFPLEVBQUUsR0FBRSxLQUFNLEVBQUUsRUFBRSxTQUFTLEdBQUcsRUFBRSxFQUFFLGFBQWEsRUFBRSxPQUFNLEVBQUcsR0FBRSxNQUFPLEVBQUUsRUFBRSxFQUFFLEVBQUcsT0FBTyxHQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxFQUFFLGFBQWEsRUFBRSxVQUFVLEtBQUssRUFBRSxHQUFHLEVBQUUsRUFBRSxTQUFTLEVBQUUsVUFBVSxHQUFHLEVBQUUsTUFBTSxJQUFJLEVBQUUsRUFBRSxXQUFXLEVBQUUsWUFBWSxHQUFHLEVBQUUsUUFBUSxHQUFHLElBQUksRUFBRSxNQUFNLEVBQUUsU0FBUSxFQUFHLEVBQUUsV0FBVyxXQUFXLEVBQUUsS0FBSyxFQUFFLEVBQUUsV0FBVyxFQUFFLEVBQUUsU0FBUyxFQUFFLFNBQVEsRUFBRyxHQUFFLEtBQU0sRUFBRSxPQUFPLE1BQU0sRUFBRSxFQUFFLFdBQVcsRUFBRSxXQUFXLFdBQVcsRUFBRSxLQUFLLEVBQUUsRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLFlBQVksR0FBRSxFQUFHLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsRUFBRSxJQUFJLE1BQU8sVUFBUyxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBSSxHQUFFLElBQUssT0FBTyxHQUFFLGFBQWEsRUFBRSxFQUFFLFdBQVcsS0FBSyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsSUFBSSxHQUFHLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFHLEdBQUUsTUFBTSxHQUFHLEdBQUcsRUFBRSxFQUFFLFFBQVEsU0FBUyxFQUFFLEdBQUcsR0FBSSxHQUFFLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxRQUFRLEVBQUUsRUFBRSxPQUFPLEVBQUUsTUFBTSxPQUFPLFNBQVMsRUFBRSxRQUFRLEVBQUUsV0FBVyxHQUFHLEVBQUUsTUFBTSxLQUFNLElBQUksR0FBRSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxNQUFNLFFBQVMsR0FBRSxJQUFJLE1BQU0sUUFBUSxJQUFJLElBQUksRUFBRSxRQUFRLEdBQUcsSUFBSSxLQUFLLEVBQUUsSUFBSSxHQUFHLE9BQU8sSUFBSSxFQUFFLEdBQUcsR0FBRyxFQUFFLFFBQVEsRUFBRyxJQUFJLEdBQUUsU0FBUyxFQUFFLEVBQUUsR0FBRyxHQUFJLEdBQUUsRUFBRSxRQUFRLEtBQU0sS0FBSSxFQUFFLEdBQUcsQ0FBQyxHQUFJLE1BQUssRUFBRSxFQUFFLE1BQU0sRUFBRSxFQUFFLEtBQU0sSUFBRyxFQUFFLElBQUksRUFBRSxHQUFHLElBQUksR0FBSSxLQUFLLEdBQUUsQ0FBQyxHQUFJLEdBQUUsRUFBRSxFQUFHLElBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRSxJQUFLLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRSxHQUFJLE1BQU8sS0FBSSxFQUFFLEVBQUcsSUFBRyxFQUFFLEVBQUUsUUFBUSxZQUFZLE1BQU8sVUFBUyxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBSSxHQUFFLEVBQUUsUUFBUSxLQUFLLEVBQUUsRUFBRSxLQUFNLElBQUcsRUFBRSxHQUFHLElBQUksR0FBSSxLQUFLLEdBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxFQUFFLEdBQUcsT0FBUSxHQUFFLEVBQUUsUUFBUSxHQUFHLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxRQUFRLEdBQUcsRUFBRSxFQUFFLE1BQU8sSUFBSSxHQUFFLEdBQUksSUFBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLE9BQU8sS0FBSyxLQUFLLEVBQUUsR0FBRyxFQUFHLElBQUcsWUFBYSxJQUFHLE1BQU8sSUFBRyxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUcsSUFBRyxNQUFNLFFBQVEsR0FBRyxDQUFDLElBQUksR0FBSSxHQUFFLEdBQUcsT0FBTyxFQUFFLEdBQUksT0FBTSxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLElBQUksRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxPQUFPLEVBQUcsT0FBTyxLQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRyxJQUFJLEdBQUUsRUFBRSxFQUFHLElBQUcsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLEVBQUUsUUFBUSxVQUFVLENBQUMsR0FBSSxHQUFFLEVBQUUsSUFBSyxNQUFLLElBQUksRUFBRSxLQUFLLElBQUksU0FBUyxHQUFHLElBQUksR0FBSSxHQUFFLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUUsR0FBRyxPQUFPLElBQUksQ0FBQyxHQUFJLEdBQUUsR0FBRyxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFHLEtBQUksR0FBRyxHQUFHLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxLQUFLLEVBQUcsSUFBSSxHQUFFLEVBQUUsUUFBUSxNQUFNLENBQUUsT0FBTyxJQUFJLElBQUcsaUJBQWlCLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLE1BQUUsT0FBTyxPQUFPLEdBQU8sR0FBRyxLQUFLLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsU0FBUyxHQUFHLEtBQUssUUFBUyxJQUFHLEVBQUUsR0FBRyxHQUFJLEdBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUksT0FBTyxHQUFFLFNBQVEsRUFBRyxFQUFnQixRQUFTLElBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsT0FBTyxNQUFNLFFBQVEsSUFBSSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxNQUFFLElBQVEsRUFBRSxLQUFLLEVBQUUsSUFBSSxTQUFTLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUUsUUFBUSxNQUFPLEtBQTZCLElBQXhCLEVBQUUsSUFBSSxFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUsS0FBUSxFQUFFLE1BQU8sS0FBSyxPQUFNLFFBQVEsSUFBSSxrQkFBbUIsR0FBRSxNQUFNLEVBQUUsT0FBTyxhQUFhLFFBQVEsRUFBRSxJQUFJLEVBQUUsT0FBTyxHQUFHLElBQUksR0FBRyxFQUFFLEdBQUcsR0FBRyxJQUFJLEtBQUssRUFBRSxTQUFTLEdBQUcsSUFBSSxHQUFJLEdBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxJQUFJLEdBQUcsTUFBTSxRQUFRLEVBQUUsSUFBSSxNQUFPLE9BQU0sVUFBVSxPQUFPLFNBQVMsRUFBRyxPQUFPLElBQUcsR0FBSSxJQUFJLEdBQUUsQ0FBRSxJQUFHLGdCQUFpQixHQUFFLENBQUMsR0FBSSxFQUFFLEdBQUUsRUFBRSxRQUFRLEVBQUUsT0FBTyxJQUFJLEVBQUUsZ0JBQWdCLEdBQUcsRUFBRSxFQUFFLGNBQWMsR0FBRyxHQUFJLElBQUcsRUFBRSxxQkFBcUIsR0FBRyxFQUFFLE1BQUUsT0FBTyxHQUFPLEdBQUcsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEdBQUcsRUFBRSxTQUFTLGFBQWEsSUFBSSxHQUFJLElBQUcsRUFBRSxFQUFFLE1BQUUsT0FBTyxHQUFPLEdBQUcsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQVEsR0FBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUcsT0FBTyxPQUFNLFFBQVEsR0FBRyxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksUUFBUyxHQUFFLEVBQUUsRUFBRSxHQUFtRCxHQUFoRCxFQUFFLEdBQUcsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLE1BQUUsR0FBTyxHQUFFLEdBQU8sRUFBRSxFQUFFLFVBQVUsSUFBSSxHQUFJLEdBQUUsRUFBRSxFQUFFLEVBQUUsU0FBUyxPQUFPLEVBQUUsRUFBRSxJQUFJLENBQUMsR0FBSSxHQUFFLEVBQUUsU0FBUyxFQUFHLEdBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxRQUFRLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLElBQUksU0FBUyxHQUFHLEVBQUUsRUFBRSxRQUFRLEdBQUcsRUFBRSxPQUFPLEVBQUUsRUFBRSxRQUFRLEdBQUcsRUFBRSxRQUFRLEdBQUcsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBa0IsUUFBUyxJQUFHLEVBQUUsR0FBRyxPQUFPLEVBQUUsWUFBWSxJQUFJLFdBQVcsRUFBRSxPQUFPLGdCQUFnQixFQUFFLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxPQUFPLEdBQUcsRUFBRSxRQUFTLElBQUcsR0FBRyxNQUFPLEdBQUUsV0FBVyxFQUFFLGFBQWEsUUFBUyxJQUFHLEdBQUcsR0FBRyxNQUFNLFFBQVEsR0FBRyxJQUFJLEdBQUksR0FBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLElBQUksQ0FBQyxHQUFJLEdBQUUsRUFBRSxFQUFHLElBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRSxtQkFBbUIsR0FBRyxJQUFJLE1BQU8sSUFBRyxRQUFTLElBQUcsRUFBRSxHQUFHLEdBQUcsSUFBSSxFQUFFLEdBQUcsUUFBUyxJQUFHLEVBQUUsR0FBRyxHQUFHLEtBQUssRUFBRSxHQUFHLFFBQVMsSUFBRyxFQUFFLEdBQUcsR0FBSSxHQUFFLEVBQUcsT0FBTyxTQUFTLEtBQUksT0FBTyxFQUFFLE1BQU0sS0FBSyxZQUFZLEVBQUUsS0FBSyxFQUFFLElBQUksUUFBUyxJQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEVBQUUsTUFBTSxHQUFHLEdBQUcsR0FBRyxHQUFHLE9BQUcsR0FBbUIsUUFBUyxJQUFHLEdBQUcsR0FBSSxHQUFFLEVBQUcsT0FBTyxJQUFHLEVBQUUsV0FBVyxHQUFHLEdBQUcsUUFBUyxJQUFHLEdBQUcsS0FBSyxJQUFJLEVBQUUsRUFBRSxVQUFVLEdBQUcsRUFBRSxVQUFVLE9BQU0sQ0FBRyxRQUFNLEVBQUcsUUFBUyxJQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsR0FBRyxFQUFFLGlCQUFnQixFQUFHLEdBQUcsR0FBRyxXQUFZLElBQUcsRUFBRSxnQkFBZ0IsTUFBTyxJQUFHLEVBQUUsV0FBVyxPQUFPLEVBQUUsVUFBVSxDQUFDLEVBQUUsV0FBVSxDQUFHLEtBQUksR0FBSSxHQUFFLEVBQUUsRUFBRSxFQUFFLFVBQVUsT0FBTyxJQUFJLEdBQUcsRUFBRSxVQUFVLEdBQUksSUFBRyxFQUFFLGNBQWMsUUFBUyxJQUFHLEVBQUUsR0FBRyxJQUFLLElBQUksR0FBRSxFQUFFLFNBQVMsR0FBRyxFQUFFLEVBQUUsT0FBUSxJQUFHLEVBQUUsSUFBSSxHQUFJLEdBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsSUFBSSxHQUFHLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFHLEdBQUUsZUFBZSxFQUFFLE1BQU0sUUFBUSxHQUFHLEtBQW1OLFFBQVMsTUFBSyxHQUFJLEdBQUUsQ0FBRSxLQUFJLEdBQUcsS0FBSyxJQUFHLEVBQUcsR0FBRyxLQUFLLFNBQVMsRUFBRSxHQUFHLE1BQU8sR0FBRSxHQUFHLEVBQUUsS0FBSyxHQUFHLEVBQUUsR0FBRyxHQUFHLE9BQU8sTUFBTSxFQUFFLEdBQUcsS0FBSyxRQUFRLEVBQUUsU0FBUyxFQUFFLEVBQUUsR0FBRyxHQUFHLEdBQUcsS0FBSyxFQUFFLEtBQU0sSUFBSSxHQUFFLEdBQUcsUUFBUSxFQUFFLEdBQUcsT0FBUSxJQUFHLEdBQUcsT0FBTyxHQUFHLE9BQU8sRUFBRSxNQUFNLEdBQUcsSUFBRyxFQUFHLFNBQVMsR0FBRyxJQUFJLEdBQUksR0FBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLElBQUksRUFBRSxHQUFHLFdBQVUsRUFBRyxHQUFHLEVBQUUsSUFBRyxJQUFLLEdBQUcsU0FBUyxHQUFrQixJQUFmLEdBQUksR0FBRSxFQUFFLE9BQVksS0FBSyxDQUFDLEdBQUksR0FBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUcsR0FBRSxXQUFXLEdBQUcsRUFBRSxhQUFhLEVBQUUsY0FBYyxHQUFHLEVBQUUsYUFBYSxHQUFHLElBQUksRUFBRSxVQUFVLEdBQUcsS0FBSyxTQUF1cEUsUUFBUyxJQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsSUFBSSxXQUFXLE1BQU8sTUFBSyxHQUFHLElBQUksR0FBRyxJQUFJLFNBQVMsR0FBRyxLQUFLLEdBQUcsR0FBRyxHQUFHLE9BQU8sZUFBZSxFQUFFLEVBQUUsSUFBSSxRQUFTLElBQUcsR0FBRyxFQUFFLFlBQWEsSUFBSSxHQUFFLEVBQUUsUUFBUyxHQUFFLE9BQU8sU0FBUyxFQUFFLEdBQUcsR0FBSSxHQUFFLEVBQUUsU0FBUyxjQUFjLEVBQUUsRUFBRSxVQUFVLEVBQUUsRUFBRSxTQUFTLFlBQWEsR0FBRSxTQUFTLElBQUcsRUFBc0YsS0FBSSxHQUFJLEtBQUssSUFBekYsU0FBUyxHQUFHLEVBQUUsS0FBSyxFQUFHLElBQUksR0FBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUcsSUFBRyxFQUFFLEVBQUUsR0FBRyxJQUFLLElBQUcsR0FBRyxFQUFFLFNBQVMsSUFBcUIsRUFBRyxLQUFHLElBQUssRUFBRSxFQUFFLE9BQU8sRUFBRSxTQUFTLFNBQVMsRUFBRSxHQUFHLEVBQUUsU0FBUyxLQUFNLEtBQUksR0FBSSxLQUFLLEdBQUUsRUFBRSxHQUFHLGtCQUFtQixHQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxJQUFJLEVBQUUsRUFBRSxTQUFTLEVBQUUsS0FBSyxTQUFTLEdBQUcsR0FBSSxHQUFFLEVBQUUsU0FBUyxJQUFLLEdBQUUsRUFBRSxFQUFFLE1BQU0sa0JBQW1CLEdBQUUsU0FBUyxFQUFFLEdBQUcsSUFBSyxLQUFJLE1BQU8sR0FBRSxLQUFLLEVBQUUsR0FBRyxNQUFNLEdBQUcsTUFBTyxJQUFHLEVBQUUsRUFBRSxhQUFhLFFBQVEsT0FBTyxFQUFFLEdBQUcsU0FBUyxLQUE4RSxLQUF4RSxHQUFJLEdBQUUsT0FBTyxLQUFLLEdBQUcsRUFBRSxFQUFFLFNBQVMsTUFBTSxHQUFHLEVBQUUsU0FBUyxRQUFRLEVBQUUsUUFBYSxLQUFLLENBQUMsR0FBSSxHQUFFLEVBQUUsRUFBRyxJQUFHLEVBQUUsRUFBRSxLQUFLLE1BQUUsR0FBTyxNQUFNLEdBQUcsRUFBRSxJQUFJLFdBQVcsS0FBSyxLQUFLLEdBQUcsR0FBRyxFQUFFLFFBQVEsSUFBSSxHQUFJLEVBQUUsSUFBRyxHQUFFLElBQUssR0FBRyxHQUFHLEVBQUUsVUFBUyxHQUFJLEVBQUUsVUFBVSxTQUFTLEVBQUUsR0FBRyxHQUFJLEdBQUUsRUFBRSxrQkFBa0IsT0FBTyxPQUFPLE1BQU0sRUFBRSxJQUFLLEtBQUksR0FBSSxLQUFLLEdBQUUsQ0FBQyxHQUFJLEdBQUUsRUFBRSxHQUFHLEVBQUUsa0JBQW1CLEdBQUUsRUFBRSxFQUFFLEdBQUksS0FBSSxFQUFFLEdBQUcsR0FBSSxJQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsS0FBSyxJQUFLLElBQUcsR0FBRyxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxRQUFRLEdBQUcsU0FBUyxFQUFFLEdBQUcsSUFBSSxHQUFJLEtBQUssR0FBRSxDQUFDLEdBQUksR0FBRSxFQUFFLEVBQUcsSUFBRyxNQUFNLFFBQVEsR0FBRyxJQUFJLEdBQUksR0FBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLElBQUksR0FBRyxFQUFFLEVBQUUsRUFBRSxRQUFTLElBQUcsRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFLE9BQXdCLFFBQVMsSUFBRyxFQUFFLEVBQUUsR0FBRyxHQUFJLElBQUcsSUFBSyxtQkFBbUIsSUFBRyxHQUFHLElBQUksRUFBRSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxJQUFJLEdBQUcsSUFBSSxFQUFFLElBQUksSUFBRyxJQUFLLEVBQUUsTUFBTSxHQUFHLEdBQUcsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLElBQUksRUFBRSxLQUFLLEdBQUcsT0FBTyxlQUFlLEVBQUUsRUFBRSxJQUFJLFFBQVMsSUFBRyxHQUFHLE1BQU8sWUFBVyxHQUFJLEdBQUUsS0FBSyxtQkFBbUIsS0FBSyxrQkFBa0IsRUFBRyxJQUFHLEVBQUUsTUFBTyxHQUFFLE9BQU8sRUFBRSxXQUFXLEdBQUcsUUFBUSxFQUFFLFNBQVMsRUFBRSxPQUFPLFFBQVMsSUFBRyxHQUFHLE1BQU8sWUFBVyxNQUFPLEdBQUUsS0FBSyxLQUFLLE9BQU8sUUFBUyxJQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsTUFBTyxHQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsRUFBRSxTQUFTLGdCQUFpQixLQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEVBQUUsR0FBWSxRQUFTLElBQUcsR0FBRyxHQUFJLEdBQUUsRUFBRSxPQUFRLElBQUcsRUFBRSxNQUFNLENBQUMsR0FBSSxHQUFFLEdBQUcsRUFBRSxNQUFPLElBQUcsSUFBSSxFQUFFLGFBQWEsQ0FBQyxFQUFFLGFBQWEsQ0FBRSxJQUFJLEdBQUUsU0FBUyxHQUFHLEdBQUksR0FBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLEVBQUUsYUFBYyxLQUFJLEdBQUksS0FBSyxHQUFFLEVBQUUsS0FBSyxFQUFFLEtBQUssSUFBSSxNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUksT0FBTyxJQUFHLEVBQUcsSUFBRyxFQUFFLEVBQUUsY0FBYyxJQUFJLEVBQUUsRUFBRSxRQUFRLEdBQUcsRUFBRSxFQUFFLGdCQUFnQixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sSUFBSSxNQUFPLEdBQUUsUUFBUyxJQUFHLEdBQUcsS0FBSyxNQUFNLEdBQUcsUUFBUyxJQUFHLEdBQUcsRUFBRSxJQUFJLENBQUUsSUFBSSxHQUFFLENBQUUsR0FBRSxPQUFPLFNBQVMsR0FBRyxFQUFFLEtBQU0sSUFBSSxHQUFFLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLFFBQVEsRUFBRSxTQUFVLElBQUcsRUFBRSxHQUFHLE1BQU8sR0FBRSxFQUFHLElBQUksR0FBRSxFQUFFLE1BQU0sRUFBRSxRQUFRLEtBQUssRUFBRSxTQUFTLEdBQUcsS0FBSyxNQUFNLEdBQUksUUFBTyxFQUFFLFVBQVUsT0FBTyxPQUFPLEVBQUUsWUFBWSxZQUFZLEVBQUUsRUFBRSxJQUFJLElBQUksRUFBRSxRQUFRLEdBQUcsRUFBRSxRQUFRLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxRQUFRLE9BQU8sU0FBUyxHQUFHLEdBQUksR0FBRSxFQUFFLFFBQVEsS0FBTSxLQUFJLEdBQUksS0FBSyxHQUFFLEdBQUcsRUFBRSxVQUFVLFNBQVMsSUFBSSxHQUFHLEVBQUUsUUFBUSxVQUFVLFNBQVMsR0FBRyxHQUFJLEdBQUUsRUFBRSxRQUFRLFFBQVMsS0FBSSxHQUFJLEtBQUssR0FBRSxHQUFHLEVBQUUsVUFBVSxFQUFFLEVBQUUsS0FBSyxHQUFHLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsUUFBUSxTQUFTLEdBQUcsRUFBRSxHQUFHLEVBQUUsS0FBSyxJQUFJLEVBQUUsUUFBUSxXQUFXLEdBQUcsR0FBRyxFQUFFLGFBQWEsRUFBRSxRQUFRLEVBQUUsY0FBYyxFQUFFLEVBQUUsY0FBYyxLQUFLLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxHQUFHLFFBQVMsSUFBRyxHQUFHLE1BQU8sS0FBSSxFQUFFLEtBQUssUUFBUSxNQUFNLEVBQUUsS0FBSyxRQUFTLElBQUcsRUFBRSxHQUFHLE1BQU8sT0FBTSxRQUFRLEdBQUcsRUFBRSxRQUFRLElBQUksRUFBRSxnQkFBaUIsR0FBRSxFQUFFLE1BQU0sS0FBSyxRQUFRLElBQUksR0FBRyxFQUFFLEVBQUUsb0JBQW9CLEVBQUUsS0FBSyxJQUFJLEVBQUUsS0FBSyxHQUFJLElBQUksR0FBRSxRQUFTLElBQUcsRUFBRSxHQUFHLEdBQUksR0FBRSxFQUFFLE1BQU0sRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFLE1BQU8sS0FBSSxHQUFJLEtBQUssR0FBRSxDQUFDLEdBQUksR0FBRSxFQUFFLEVBQUcsSUFBRyxFQUFFLENBQUMsR0FBSSxHQUFFLEdBQUcsRUFBRSxpQkFBa0IsS0FBSSxFQUFFLElBQUksR0FBRyxFQUFFLEVBQUUsRUFBRSxLQUFLLFFBQVMsSUFBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEdBQUksR0FBRSxFQUFFLElBQUksR0FBRyxHQUFHLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxrQkFBa0IsV0FBVyxFQUFFLEdBQUcsS0FBSyxFQUFFLEVBQUUsR0FBb2tPLFFBQVMsSUFBRyxHQUFHLElBQUksR0FBSSxHQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxxQkFBcUIsRUFBRSxFQUFFLGtCQUFrQixTQUFTLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxLQUFLLEdBQUksTUFBSyxFQUFFLEVBQUUsRUFBRSxTQUFTLEdBQUcsRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLEVBQUUsTUFBTyxPQUFPLFVBQVMsRUFBRSxHQUFHLE1BQUcsR0FBRSxJQUFJLEVBQUUsR0FBVSxHQUFHLEVBQUUsR0FBRyxJQUFVLElBQUksRUFBRSxZQUFZLEVBQUUsT0FBTyxRQUFTLElBQUcsRUFBRSxHQUFHLE9BQU8sWUFBWSxHQUFHLEVBQUUsWUFBWSxFQUFFLGFBQWEsTUFBTSxFQUFFLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxRQUFTLElBQUcsRUFBRSxHQUFHLE1BQU8sR0FBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsR0FBRyxHQUFHLFFBQVMsSUFBRyxHQUFHLE1BQU8sT0FBTSxRQUFRLEdBQUcsU0FBUyxHQUFHLElBQUksR0FBSSxHQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEdBQUcsRUFBRSxNQUFNLEtBQUssSUFBSSxJQUFJLEdBQUcsS0FBSyxHQUFHLEVBQUcsT0FBTyxJQUFHLEdBQUcsRUFBRSxHQUFHLFNBQVMsR0FBRyxHQUFJLEdBQUUsRUFBRyxLQUFJLEdBQUksS0FBSyxHQUFFLEVBQUUsS0FBSyxJQUFJLEdBQUcsS0FBSyxHQUFHLEVBQUcsT0FBTyxJQUFHLEdBQUcsZ0JBQWlCLEdBQUUsRUFBRSxHQUFnOUIsUUFBUyxJQUFHLEdBQUcsTUFBTyxJQUFHLEdBQUcsTUFBTSxTQUFTLEVBQUUsV0FBTyxHQUF3RixRQUFTLElBQUcsR0FBRyxHQUFHLGdCQUFpQixHQUFFLENBQWlDLE1BQTFCLFVBQVMsY0FBYyxJQUFhLFNBQVMsY0FBYyxPQUFPLE1BQU8sR0FBdTNCLFFBQVMsSUFBRyxFQUFFLEdBQUcsR0FBSSxHQUFFLEVBQUUsS0FBSyxHQUFJLElBQUcsRUFBRSxHQUFHLENBQUMsR0FBSSxHQUFFLEVBQUUsUUFBUSxFQUFFLEVBQUUsbUJBQW1CLEVBQUUsSUFBSSxFQUFFLEVBQUUsS0FBTSxHQUFFLE1BQU0sUUFBUSxFQUFFLElBQUksRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLEtBQUssSUFBSSxFQUFFLE9BQUcsSUFBUSxFQUFFLEtBQUssU0FBUyxNQUFNLFFBQVEsRUFBRSxJQUFJLEVBQUUsR0FBRyxRQUFRLEdBQUcsR0FBRyxFQUFFLEdBQUcsS0FBSyxHQUFHLEVBQUUsSUFBSSxHQUFHLEVBQUUsR0FBRyxHQUFnRixRQUFTLElBQUcsRUFBRSxHQUFHLE1BQU8sR0FBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxFQUFFLFFBQVEsRUFBRSxFQUFFLE9BQU8sU0FBUyxFQUFFLEdBQUcsR0FBRyxVQUFVLEVBQUUsSUFBSSxPQUFNLENBQUcsSUFBSSxHQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUssT0FBTyxLQUFJLEdBQUcsR0FBRyxJQUFJLEdBQUcsSUFBSSxFQUFFLElBQUksRUFBRSxFQUFFLHFCQUFxQixFQUFFLGVBQWUsRUFBRSxjQUFjLEVBQUUsRUFBRSxhQUFhLFFBQVEsUUFBUyxJQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUksR0FBRSxFQUFFLElBQUssS0FBSSxFQUFFLEVBQUUsR0FBRyxJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxPQUFPLEVBQUUsR0FBRyxFQUFHLE9BQU8sR0FBNkQsUUFBUyxJQUFHLEVBQUUsSUFBSSxFQUFFLEtBQUssWUFBWSxFQUFFLEtBQUssYUFBYSxTQUFTLEVBQUUsR0FBRyxHQUFJLEdBQUUsRUFBRSxFQUFFLEVBQUUsSUFBSSxHQUFHLEVBQUUsSUFBSSxHQUFHLEVBQUUsR0FBRyxFQUFFLEtBQUssV0FBVyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsS0FBSyxXQUFXLEVBQUUsU0FBUyxLQUFLLElBQUssS0FBSSxJQUFLLEdBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLElBQUksR0FBRyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksa0JBQWtCLEVBQUUsS0FBSyxLQUFLLEdBQUcsRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLFVBQVUsRUFBRSxLQUFLLEdBQUksSUFBRyxFQUFFLE9BQU8sQ0FBQyxHQUFJLEdBQUUsV0FBVyxJQUFJLEdBQUksR0FBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLElBQUksR0FBRyxFQUFFLEdBQUcsV0FBVyxFQUFFLEdBQUksR0FBRSxHQUFHLEVBQUUsU0FBUyxHQUFHLElBQXVHLEdBQW5HLEVBQUUsUUFBUSxHQUFHLEVBQUUsWUFBWSxXQUFXLElBQUksR0FBSSxHQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sSUFBSSxHQUFHLEVBQUUsR0FBRyxtQkFBbUIsRUFBRSxNQUFTLEVBQUUsSUFBSSxJQUFLLEdBQUUsRUFBRSxJQUFJLEdBQUcsRUFBRSxHQUFHLFNBQVMsRUFBRSxFQUFFLElBQUksRUFBRSxHQUE4QixRQUFTLElBQUcsRUFBRSxHQUFHLEdBQUksR0FBRSxFQUFFLEVBQUUsT0FBTyxPQUFPLEtBQU0sS0FBSSxFQUFFLE1BQU8sRUFBRSxLQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxLQUFLLEVBQUUsRUFBRSxJQUFJLFlBQVksRUFBRSxVQUFVLElBQUksRUFBRSxHQUFHLElBQUksRUFBRSxFQUFFLElBQUksR0FBRyxFQUFFLFNBQVMsYUFBYSxFQUFFLEtBQU0sT0FBTyxHQUFFLFFBQVMsSUFBRyxHQUFHLE1BQU8sR0FBRSxTQUFTLEVBQUUsS0FBSyxJQUFJLE9BQU8sS0FBSyxFQUFFLGVBQWUsS0FBSyxLQUFLLFFBQVMsSUFBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBSSxHQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRyxJQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxHQUFHLE1BQU0sR0FBRyxHQUFHLEVBQUUsRUFBRSxRQUFRLGFBQWEsRUFBRSxLQUFLLElBQUksRUFBRSxVQUF5QixRQUFTLElBQUcsRUFBRSxHQUFHLEdBQUksR0FBRSxFQUFFLGdCQUFpQixNQUFLLEVBQUUsS0FBSSxJQUFLLEVBQUUsS0FBSyxRQUFRLGNBQWMsRUFBRSxFQUFFLEtBQUssUUFBUSxFQUFFLEVBQUUsS0FBSyxRQUFRLENBQUMsR0FBSSxHQUFFLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEtBQUssVUFBVSxFQUFFLEVBQUUsS0FBSyxTQUFVLEtBQUksSUFBSyxHQUFFLEVBQUUsVUFBVSxFQUFFLEVBQUUsS0FBSyxNQUFNLEtBQUssSUFBSSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsS0FBSyxHQUFHLEdBQUcsRUFBRSxFQUFFLEVBQUcsS0FBSSxLQUFLLEdBQUcsSUFBSSxFQUFFLFFBQVEsRUFBRSxPQUFPLEdBQUcsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLEdBQUcsR0FBRyxFQUFFLGtCQUFrQixHQUFHLEdBQUcsSUFBSSxHQUFHLElBQUksRUFBRSxnQkFBZ0IsS0FBSyxRQUFTLElBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxRQUFRLFFBQVEsTUFBTSxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxFQUFFLGdCQUFnQixJQUFJLEVBQUUsb0JBQW9CLEdBQUcsVUFBVSxFQUFFLFFBQVEsT0FBTyxFQUFFLEVBQUUsYUFBYSxFQUFFLElBQUksR0FBRyxHQUFHLEVBQUUsYUFBYSxFQUFFLEdBQUcsRUFBRSxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsRUFBRSxrQkFBa0IsR0FBRyxHQUFHLElBQUksRUFBRSxlQUFlLEdBQUcsRUFBRSxHQUFHLEdBQUcsRUFBRSxFQUFFLEdBQUcsUUFBUyxJQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsR0FBRyxHQUFHLEVBQUUsZ0JBQWdCLE9BQU8sQ0FBQyxHQUFHLElBQUksR0FBRyxhQUFhLEVBQUUsU0FBUyxnQkFBZ0IsR0FBRyxLQUFLLElBQUksRUFBRSxPQUFPLENBQUMsR0FBSSxHQUFFLFNBQVMsR0FBRyxFQUFFLDJCQUEyQixFQUFFLG9CQUFvQixRQUFRLEdBQUksR0FBRSxpQkFBaUIsUUFBUSxHQUFHLEVBQUUsUUFBTyxFQUFHLEVBQUUsYUFBYSxFQUFFLElBQWlDLFFBQVMsSUFBRyxFQUFFLEdBQUcsR0FBSSxHQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsSUFBSyxNQUFLLEVBQUUsRUFBRSxjQUFjLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLEVBQUUsY0FBYyxFQUFFLEVBQUUsU0FBUyxDQUFDLEdBQUksR0FBRSxHQUFHLEdBQUcsRUFBRSxFQUFFLGtCQUFtQixHQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsR0FBRyxLQUFLLElBQUksRUFBRSxhQUFhLEVBQUUsYUFBYSxRQUFRLEdBQUcsRUFBRSxXQUFXLElBQXNFLFFBQVMsSUFBRyxHQUFvbUIsUUFBUyxNQUFLLElBQUksT0FBTyxLQUFLLEVBQUUsTUFBTSxFQUFFLEdBQUcsUUFBUSxFQUFFLEVBQUUsRUFBeHBCLEdBQUksR0FBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUUsRUFBRyxHQUFFLEVBQUcsR0FBRSxFQUFHLEdBQUUsRUFBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUUsS0FBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sSUFBSSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsV0FBVyxHQUFHLEVBQUUsS0FBSyxHQUFHLEtBQUssSUFBSSxHQUFFLE9BQVMsSUFBRyxFQUFFLEtBQUssR0FBRyxLQUFLLElBQUksR0FBRSxPQUFTLElBQUcsRUFBRSxLQUFLLEdBQUcsS0FBSyxJQUFJLEdBQUUsT0FBUyxJQUFHLEVBQUUsS0FBSyxHQUFHLEtBQUssSUFBSSxHQUFFLE9BQVMsSUFBRyxNQUFNLEdBQUcsTUFBTSxFQUFFLFdBQVcsRUFBRSxJQUFJLE1BQU0sRUFBRSxXQUFXLEVBQUUsSUFBSSxHQUFHLEdBQUcsRUFBRSxDQUFDLE9BQU8sR0FBRyxJQUFLLElBQUcsR0FBRSxDQUFHLE1BQU0sS0FBSyxJQUFHLEdBQUUsQ0FBRyxNQUFNLEtBQUssSUFBRyxHQUFFLENBQUcsTUFBTSxLQUFLLElBQUcsR0FBSSxNQUFNLEtBQUssSUFBRyxHQUFJLE1BQU0sS0FBSyxJQUFHLEdBQUksTUFBTSxLQUFLLElBQUcsR0FBSSxNQUFNLEtBQUssS0FBSSxHQUFJLE1BQU0sS0FBSyxLQUFJLElBQUksR0FBRyxLQUFLLEVBQUUsQ0FBQyxJQUFJLEdBQUksR0FBRSxFQUFFLEVBQUUsTUFBRSxHQUFPLEdBQUcsR0FBRyxPQUFPLEVBQUUsRUFBRSxPQUFPLElBQUksS0FBSyxHQUFHLEdBQUcsS0FBSyxLQUFLLEdBQUUsYUFBVSxLQUFTLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxHQUFHLFFBQVEsR0FBNkQsUUFBRyxLQUFTLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxHQUFHLE9BQU8sSUFBSSxHQUFHLElBQUksRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxJQUFJLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBSSxPQUFPLEdBQUUsUUFBUyxJQUFHLEVBQUUsR0FBRyxHQUFJLEdBQUUsRUFBRSxRQUFRLElBQUssSUFBRyxFQUFFLEVBQUUsTUFBTSxPQUFPLEVBQUUsTUFBTSxFQUFFLEdBQUksSUFBSSxHQUFFLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxFQUFFLE1BQU0sRUFBRSxFQUFHLE9BQU0sT0FBTyxFQUFFLE1BQU0sR0FBRyxNQUFNLEVBQUUsSUFBSSxFQUFFLEdBQUcsUUFBUyxJQUFHLEVBQUUsR0FBRyxRQUFRLE1BQU0sbUJBQW1CLEdBQUcsUUFBUyxJQUFHLEVBQUUsR0FBRyxNQUFPLEdBQUUsRUFBRSxJQUFJLFNBQVMsR0FBRyxNQUFPLEdBQUUsS0FBSyxPQUFPLFNBQVMsR0FBRyxNQUFPLFFBQU8sUUFBUyxJQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxXQUFXLEtBQUssSUFBSSxLQUFLLEVBQUUsTUFBTSxFQUFFLFFBQVEsR0FBRyxJQUFJLEVBQUUsT0FBTSxFQUFHLFFBQVMsSUFBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLGVBQWUsRUFBRSxpQkFBaUIsRUFBRSxRQUFRLEVBQUUsV0FBVyxLQUFLLElBQUksS0FBSyxFQUFFLE1BQU0sRUFBRSxRQUFRLEdBQUcsSUFBSSxFQUFFLE9BQU0sRUFBRyxRQUFTLElBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLFNBQVMsR0FBRyxFQUFFLEVBQUUsVUFBVSxLQUFLLElBQUksS0FBSyxFQUFFLE1BQU0sR0FBRyxJQUFJLFFBQVMsSUFBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUUsZ0JBQWdCLEtBQUssSUFBSSxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFLFVBQVUsR0FBRyxJQUFJLEVBQUUsT0FBTSxFQUFHLFFBQVMsSUFBRyxFQUFFLEVBQUUsR0FBRyxNQUFPLEdBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFBRSxRQUFTLElBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEdBQUksSUFBRyxFQUFFLEdBQUcsR0FBRyxNQUFNLEVBQUUsRUFBRSxJQUFJLEVBQUUsOEJBQThCLEVBQUUsSUFBSSxVQUFVLElBQUksRUFBRSxvQkFBcUIsR0FBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLEVBQUUsSUFBSSxFQUFFLDBCQUEwQixFQUFFLElBQUksVUFBVSxJQUFJLEVBQUUsWUFBWSxFQUFFLGdCQUFpQixHQUFFLFFBQVEsRUFBRSxHQUFHLElBQUksRUFBRSxJQUFJLEVBQUUsYUFBYyxHQUFFLEtBQUssRUFBRSxHQUFHLElBQUksRUFBRSxJQUFJLEVBQUUsZ0JBQWlCLEdBQUUsUUFBUSxFQUFFLEdBQUcsSUFBSSxFQUFFLElBQUksRUFBRSxjQUFlLEdBQUUsT0FBTyxFQUFFLEVBQUUsZUFBZSxFQUFFLGtCQUFrQixFQUFFLEVBQUUsU0FBUyxFQUFFLFVBQVcsSUFBSSxHQUFFLElBQUksTUFBTSxFQUFFLE9BQU8sUUFBUSxHQUFHLEVBQUcsS0FBSSxJQUFJLEVBQUUsVUFBVSxFQUFHLElBQUksR0FBRSxFQUFFLEVBQUcsT0FBTSxRQUFRLEdBQUcsRUFBRSxFQUFFLFFBQVEsR0FBRyxFQUFFLEtBQUssR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxFQUFFLE9BQU0sRUFBRyxRQUFTLElBQUcsRUFBRSxFQUFFLEdBQUcsR0FBSSxHQUFFLEdBQUcsRUFBRSxJQUFJLElBQUksR0FBRyxFQUFFLFVBQVUsRUFBRyxJQUFHLE1BQU0sRUFBRSxNQUFPLElBQUcsRUFBRyxLQUFHLElBQUssRUFBRSxDQUFDLEdBQUksR0FBRSxHQUFHLEVBQUUsRUFBRyxJQUFHLE1BQU0sRUFBRSxNQUFPLE1BQUssVUFBVSxJQUFJLFFBQVMsSUFBRyxFQUFFLEVBQUUsR0FBRyxHQUFJLEVBQUUsSUFBRyxPQUFPLEVBQUUsRUFBRSxTQUFTLElBQUksSUFBSSxHQUFJLEdBQUUsRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsSUFBSSxHQUFHLEVBQUUsR0FBRyxPQUFPLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxFQUFHLE9BQU0sTUFBTyxVQUFVLEdBQUUsU0FBUyxHQUFHLEVBQUUsUUFBUyxJQUFHLEVBQUUsR0FBRyxJQUFJLEdBQUksR0FBRSxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxJQUFJLENBQUMsR0FBSSxHQUFFLEVBQUUsRUFBRyxJQUFHLEVBQUUsS0FBSyxFQUFFLE1BQU0sTUFBTyxHQUFFLE9BQU8sRUFBRSxHQUFHLEdBQUcsUUFBUyxJQUFHLEVBQUUsR0FBRyxNQUFPLEtBQUksTUFBTSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsT0FBTyxNQUFNLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsUUFBUyxJQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUksR0FBRSxNQUFNLEVBQUUsRUFBRSxPQUFPLEVBQUUsS0FBTSxHQUFFLE9BQU8sRUFBRSw4Q0FBOEMsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFLLElBQUksR0FBRSxHQUFHLEVBQUUsRUFBRyxHQUFFLE9BQU8sTUFBTSxJQUFJLEVBQUUsSUFBSSxXQUFXLEtBQUssVUFBVSxHQUFHLFNBQVMsbUJBQW1CLEVBQUUsS0FBSyxRQUFTLElBQUcsRUFBRSxHQUFHLEdBQUksR0FBRSxTQUFTLEdBQUcsR0FBRyxFQUFFLEVBQUUsT0FBTyxHQUFHLEVBQUUsT0FBTyxFQUFFLFFBQVEsS0FBSyxHQUFHLEVBQUUsWUFBWSxLQUFLLEdBQUcsRUFBRSxPQUFPLEdBQUcsRUFBRSxZQUFZLE9BQU8sR0FBRyxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksSUFBSSxJQUFJLEVBQUUsTUFBTSxHQUFHLEdBQUcsTUFBTSxJQUFJLEVBQUUsSUFBSSxLQUFzQixLQUFoQixHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsR0FBUSxNQUFNLEdBQUcsR0FBRyxNQUFNLEdBQUcsSUFBSSxLQUFLLElBQUksR0FBRyxHQUFJLFFBQU8sSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLElBQUksRUFBRSxNQUFNLEdBQUcsRUFBRSxNQUFNLEVBQUcsT0FBTyxRQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsSUFBSSxLQUFLLEVBQUUsSUFBSSxLQUFLLEVBQUUsSUFBSSxRQUFTLE1BQUssTUFBTyxJQUFHLGFBQWEsSUFBSSxRQUFTLE1BQUssTUFBTyxLQUFJLEdBQUcsUUFBUyxJQUFHLEdBQUcsTUFBTyxNQUFLLEdBQUcsS0FBSyxFQUFFLFFBQVMsSUFBRyxHQUFHLEdBQUksR0FBRSxDQUFFLEtBQUksR0FBRyxJQUFJLE1BQU0sR0FBRyxHQUFHLEVBQUUsTUFBTSxHQUFHLE9BQVEsSUFBRyxLQUFLLEdBQUcsSUFBSSxLQUFLLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQyxHQUFHLEVBQUcsUUFBTyxRQUFTLElBQUcsR0FBRyxJQUFJLEdBQUksR0FBRSxHQUFHLE9BQU8sRUFBRSxRQUFRLEtBQThCLFFBQVMsSUFBRyxFQUFFLEVBQUUsR0FBRyxHQUFJLEdBQUUsRUFBRyxPQUFPLFNBQVMsS0FBSSxPQUFPLEVBQUUsTUFBTSxLQUFLLFlBQVksR0FBRyxFQUFFLEVBQUUsRUFBRSxJQUFzQyxRQUFTLElBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFJLEdBQUUsR0FBRyxFQUFFLENBQUUsR0FBRSxFQUFFLFNBQVMsU0FBUyxHQUFHLEdBQUcsRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFLFdBQVcsR0FBRyxFQUFFLFdBQVcsR0FBRyxFQUFFLE9BQU8sZ0JBQWdCLFNBQVMsTUFBTyxHQUFFLE1BQU0sS0FBSyxZQUFZLEdBQUcsaUJBQWlCLEVBQUUsRUFBRSxHQUFHLFFBQVEsRUFBRSxRQUFRLEdBQUcsR0FBRyxRQUFTLElBQUcsRUFBRSxFQUFFLEVBQUUsSUFBSSxHQUFHLElBQUksb0JBQW9CLEVBQUUsRUFBRSxVQUFVLEVBQUUsR0FBRyxRQUFTLElBQUcsRUFBRSxHQUFHLElBQUksRUFBRSxFQUFFLEtBQUssTUFBTSxFQUFFLEVBQUUsS0FBSyxJQUFJLENBQUMsR0FBSSxHQUFFLEVBQUUsS0FBSyxPQUFPLEVBQUUsRUFBRSxLQUFLLE1BQU8sSUFBRyxFQUFFLElBQUksU0FBUyxHQUFHLEdBQUcsRUFBRSxFQUFFLEtBQUssQ0FBQyxHQUFJLEdBQUUsRUFBRSxTQUFTLE9BQVEsR0FBRSxNQUFNLE9BQU8sRUFBRSxJQUFJLEVBQUUsY0FBZSxHQUFFLElBQUksRUFBRSxFQUFFLE9BQU8sRUFBRSxVQUFVLE9BQU8sRUFBRSxJQUFJLEVBQUUsa0JBQW1CLEdBQUUsTUFBTSxHQUFHLEdBQUcsRUFBRSxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsU0FBUyxPQUFHLElBQXdDLFFBQVMsSUFBRyxFQUFFLEdBQUcsSUFBSSxFQUFFLEVBQUUsS0FBSyxZQUFZLEVBQUUsRUFBRSxLQUFLLFVBQVUsQ0FBQyxHQUFJLEdBQUUsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsS0FBSyxhQUFhLEVBQUUsRUFBRSxLQUFLLFlBQWEsS0FBSSxJQUFLLEdBQUUsRUFBRSxVQUFVLEVBQUUsRUFBRSxLQUFLLFNBQVMsS0FBSyxJQUFJLEVBQUUsSUFBSyxLQUFJLEVBQUUsR0FBRyxHQUFJLEtBQUksSUFBSyxHQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsR0FBRyxnQkFBZ0IsR0FBRyxjQUFjLEVBQUUsQ0FBQyxHQUFHLEVBQUUsV0FBVyxFQUFFLFNBQVMsT0FBTyxHQUFHLElBQUksRUFBRSxHQUFHLFFBQVMsS0FBSSxFQUFFLFdBQVcsUUFBUSxFQUFFLFlBQVksRUFBRSxXQUFXLElBQUksR0FBRyxVQUFVLEdBQUcsYUFBYSxFQUFFLFFBQVEsQ0FBQyxFQUFFLE9BQU8sQ0FBRSxJQUFJLEdBQUUsRUFBRSxHQUFHLEdBQUcsT0FBTyxFQUFHLElBQUcsRUFBRSxLQUFLLEVBQUUsTUFBTSxPQUFRLElBQUcsY0FBYyxHQUFHLEdBQUcsRUFBRSxVQUFVLEVBQUUsRUFBRSxXQUFXLEVBQUUsR0FBRyxJQUFJLFNBQVMsY0FBYyxRQUFRLFVBQVUsUUFBUSxFQUFFLFFBQVMsS0FBSSxHQUFJLEdBQUUsR0FBRyxXQUFXLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxXQUFZLE1BQUssRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLGdCQUFpQixJQUFHLElBQUksRUFBRSxHQUFHLElBQUksRUFBRSxHQUFHLEVBQUUsTUFBTSxPQUFPLFFBQVMsSUFBRyxFQUFFLEdBQUcsT0FBTyxFQUFFLFlBQVksV0FBVyxFQUFFLFNBQVMsU0FBUyxFQUFFLEdBQUcsR0FBSSxJQUFFLENBQUcsS0FBSSxFQUFFLFNBQVMsZ0JBQWdCLEVBQUUsTUFBTSxJQUFJLE1BQU8sSUFBRyxFQUFFLFFBQVEsR0FBRyxFQUFFLElBQUksU0FBUyxFQUFFLEdBQUcsR0FBSSxHQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUsV0FBWSxJQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxPQUFPLE1BQU8sR0FBRSxLQUFLLEVBQUUsRUFBRyxJQUFHLEVBQUUsS0FBSyxNQUFPLEdBQUUsU0FBUyxFQUFFLE9BQU8sTUFBTyxLQUFJLEdBQUcsRUFBRSxJQUFnTSxRQUFTLElBQUcsR0FBRyxHQUFJLEdBQUUsR0FBRyxFQUFFLE1BQU8sT0FBTyxHQUFFLFlBQVksRUFBRSxFQUFFLFlBQVksR0FBRyxFQUFFLFFBQVMsSUFBRyxHQUFHLE1BQU8sT0FBTSxRQUFRLEdBQUcsRUFBRSxHQUFHLGdCQUFpQixHQUFFLEdBQUcsR0FBRyxFQUF5ZixRQUFTLElBQUcsRUFBRSxHQUFHLEdBQUksR0FBRSxFQUFFLEtBQUssRUFBRSxFQUFFLElBQUssTUFBSyxFQUFFLEVBQUUsY0FBYyxFQUFFLEVBQUUsUUFBUSxFQUFFLEVBQUUsY0FBYyxFQUFFLEVBQUUsUUFBUSxDQUFDLEdBQUksR0FBRSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxZQUFZLEVBQUUsRUFBRSxpQkFBaUIsRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLEtBQUssVUFBVyxHQUFFLEtBQUssZ0JBQWdCLEVBQUUsRUFBRSxRQUFRLEtBQUssR0FBRyxDQUFFLElBQUksR0FBRSxTQUFTLEVBQUUsR0FBbUIsSUFBSSxHQUFoQixHQUFFLEtBQWtCLEVBQUUsRUFBRSxFQUFFLG9CQUFvQixFQUFFLEVBQUUsa0JBQWtCLFNBQVMsRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRyxLQUFJLEdBQUksR0FBRSxFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFHLE9BQU8sSUFBRyxFQUFNLEtBQUksSUFBSyxHQUFFLEVBQUUsRUFBRSxLQUFLLEdBQUcsRUFBRSxFQUFFLEdBQUksS0FBSSxJQUFLLElBQUcsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEdBQUcsRUFBRSxFQUFFLE1BQU0sRUFBRSxHQUFHLElBQTBDLFFBQVMsSUFBRyxFQUFFLEdBQUcsR0FBRyxJQUFJLEVBQUUsRUFBRSxRQUFRLEdBQUcsRUFBRSxVQUFVLEVBQUUsUUFBUSxNQUFNLEVBQUUsRUFBRSxNQUFNLElBQUksUUFBUSxTQUFTLEdBQUcsTUFBTyxHQUFFLFVBQVUsSUFBSSxLQUFLLEVBQUUsVUFBVSxJQUFJLE9BQU8sQ0FBQyxHQUFJLEdBQUUsS0FBSyxFQUFFLGFBQWEsVUFBVSxJQUFJLEdBQUksR0FBRSxRQUFRLElBQUksRUFBRSxLQUFLLEdBQUcsRUFBRSxhQUFhLFNBQVMsRUFBRSxHQUFHLFNBQVMsUUFBUyxJQUFHLEVBQUUsR0FBRyxHQUFHLElBQUksRUFBRSxFQUFFLFFBQVEsR0FBRyxFQUFFLFVBQVUsRUFBRSxRQUFRLE1BQU0sRUFBRSxFQUFFLE1BQU0sSUFBSSxRQUFRLFNBQVMsR0FBRyxNQUFPLEdBQUUsVUFBVSxPQUFPLEtBQUssRUFBRSxVQUFVLE9BQU8sR0FBRyxFQUFFLFVBQVUsUUFBUSxFQUFFLGdCQUFnQixhQUFhLENBQUMsSUFBSSxHQUFJLEdBQUUsS0FBSyxFQUFFLGFBQWEsVUFBVSxJQUFJLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFFBQVEsSUFBSSxHQUFHLEVBQUUsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLEVBQUUsUUFBUSxFQUFFLGFBQWEsUUFBUSxHQUFHLEVBQUUsZ0JBQWdCLFVBQVUsUUFBUyxJQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxnQkFBaUIsR0FBRSxDQUFDLEdBQUksS0FBSyxRQUFNLElBQUssRUFBRSxLQUFLLEVBQUUsRUFBRSxHQUFHLEVBQUUsTUFBTSxNQUFNLEVBQUUsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBaUIsR0FBRSxHQUFHLE9BQUcsSUFBa3FCLFFBQVMsSUFBRyxHQUFHLEdBQUcsV0FBVyxHQUFHLEtBQUssUUFBUyxJQUFHLEVBQUUsR0FBRyxHQUFJLEdBQUUsRUFBRSxxQkFBcUIsRUFBRSxzQkFBdUIsR0FBRSxRQUFRLEdBQUcsSUFBSSxFQUFFLEtBQUs7NEJBQUcsR0FBRyxFQUFFLElBQUksUUFBUyxJQUFHLEVBQUUsR0FBRyxFQUFFLG9CQUFvQixFQUFFLEVBQUUsbUJBQW1CLEdBQUcsR0FBRyxFQUFFLEdBQUcsUUFBUyxJQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUksR0FBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsUUFBUSxFQUFFLEVBQUUsU0FBVSxLQUFJLEVBQUUsTUFBTyxJQUFJLElBQUksR0FBRSxJQUFJLEdBQUcsR0FBRyxHQUFHLEVBQUUsRUFBRSxFQUFFLFdBQVcsRUFBRSxvQkFBb0IsRUFBRSxHQUFHLEtBQUssRUFBRSxTQUFTLEdBQUcsRUFBRSxTQUFTLEtBQUssR0FBRyxHQUFHLElBQUssWUFBVyxXQUFXLEVBQUUsR0FBRyxLQUFLLEVBQUUsR0FBRyxFQUFFLGlCQUFpQixFQUFFLEdBQW1DLFFBQVMsSUFBRyxFQUFFLEdBQUcsR0FBSSxHQUFFLEVBQUUsT0FBTyxpQkFBaUIsR0FBRyxHQUFHLEVBQUUsR0FBRyxVQUFVLElBQUksTUFBTSxNQUFNLEdBQUcsRUFBRSxHQUFHLGFBQWEsSUFBSSxNQUFNLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxVQUFVLElBQUksTUFBTSxNQUFNLEdBQUcsRUFBRSxHQUFHLGFBQWEsSUFBSSxNQUFNLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFFLE9BQU8sS0FBSSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxRQUFRLElBQUksR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsUUFBUSxHQUFHLEdBQUcsRUFBRSxLQUFLLElBQUksRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBRyxNQUFNLElBQUksR0FBRyxFQUFFLE9BQU8sRUFBRSxPQUFPLEdBQUcsS0FBSyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsYUFBYSxJQUFJLElBQUksR0FBRyxLQUFLLEVBQUUsR0FBRyxjQUFjLFFBQVMsSUFBRyxFQUFFLEdBQUcsS0FBSyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsRUFBRSxPQUFPLEVBQUcsT0FBTyxNQUFLLElBQUksTUFBTSxLQUFLLEVBQUUsSUFBSSxTQUFTLEVBQUUsR0FBRyxNQUFPLElBQUcsR0FBRyxHQUFHLEVBQUUsT0FBTyxRQUFTLElBQUcsR0FBRyxNQUFPLEtBQUksT0FBTyxFQUFFLE1BQU0sR0FBRyxHQUFHLFFBQVEsSUFBSSxNQUFNLFFBQVMsSUFBRyxFQUFFLEdBQUcsR0FBSSxHQUFFLEVBQUUsR0FBSSxHQUFFLEVBQUUsWUFBWSxFQUFFLFNBQVMsV0FBVSxFQUFHLEVBQUUsV0FBWSxJQUFJLEdBQUUsR0FBRyxFQUFFLEtBQUssV0FBWSxLQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsV0FBVyxJQUFJLEVBQUUsU0FBUyxDQUFDLElBQUksR0FBSSxHQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsV0FBVyxFQUFFLEVBQUUsYUFBYSxFQUFFLEVBQUUsaUJBQWlCLEVBQUUsRUFBRSxZQUFZLEVBQUUsRUFBRSxjQUFjLEVBQUUsRUFBRSxrQkFBa0IsRUFBRSxFQUFFLFlBQVksRUFBRSxFQUFFLE1BQU0sRUFBRSxFQUFFLFdBQVcsRUFBRSxFQUFFLGVBQWUsRUFBRSxFQUFFLGFBQWEsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLFlBQVksRUFBRSxFQUFFLGdCQUFnQixFQUFFLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxHQUFHLE9BQU8sR0FBRyxFQUFFLFFBQVEsRUFBRSxFQUFFLFFBQVEsRUFBRSxFQUFFLE1BQU8sSUFBSSxJQUFHLEVBQUUsYUFBYSxFQUFFLFlBQWEsS0FBSSxHQUFHLEdBQUcsS0FBSyxFQUFFLENBQUMsR0FBSSxHQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLEVBQUUsR0FBRyxrQkFBbUIsR0FBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxNQUFNLEdBQUcsR0FBRSxJQUFLLElBQUksRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLEVBQUUsU0FBUyxFQUFFLFdBQVcsSUFBSSxHQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsSUFBSSxFQUFFLFdBQVcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsSUFBSSxHQUFHLEVBQUUsR0FBRyxFQUFFLFNBQVMsTUFBTyxHQUFFLEtBQUssTUFBTSxHQUFHLEVBQUUsU0FBUyxXQUFXLEdBQUksR0FBRSxFQUFFLFdBQVcsRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxJQUFLLElBQUcsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLElBQUksVUFBVSxFQUFFLElBQUksV0FBVyxHQUFHLEVBQUUsRUFBRSxLQUFLLEdBQUcsRUFBRSxHQUFHLElBQUksR0FBRyxFQUFFLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxXQUFXLEdBQUcsRUFBRSxHQUFHLEVBQUUsWUFBWSxHQUFHLEVBQUUsR0FBRyxJQUFJLEdBQUcsR0FBRyxXQUFXLEVBQUUsR0FBRyxHQUFHLEVBQUUsRUFBRSxRQUFRLEVBQUUsS0FBSyxPQUFPLEdBQUcsSUFBSSxHQUFHLEVBQUUsRUFBRSxJQUFJLEdBQUcsR0FBRyxNQUFNLFFBQVMsSUFBRyxFQUFFLEdBQXNpQixRQUFTLEtBQUksRUFBRSxhQUFhLEVBQUUsS0FBSyxNQUFNLEVBQUUsY0FBYyxFQUFFLFdBQVcsV0FBVyxFQUFFLFdBQVcsY0FBYyxFQUFFLEtBQUssR0FBRyxHQUFHLEVBQUUsR0FBRyxJQUFJLEdBQUcsRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsV0FBVyxHQUFHLEVBQUUsR0FBRyxFQUFFLFlBQVksR0FBRyxFQUFFLEdBQUcsSUFBSSxHQUFHLEdBQUcsV0FBVyxFQUFFLEdBQUcsR0FBRyxFQUFFLEVBQUUsUUFBUSxHQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsR0FBRyxLQUExeEIsR0FBSSxHQUFFLEVBQUUsR0FBSSxHQUFFLEVBQUUsWUFBWSxFQUFFLFNBQVMsV0FBVSxFQUFHLEVBQUUsV0FBWSxJQUFJLEdBQUUsR0FBRyxFQUFFLEtBQUssV0FBWSxJQUFHLEVBQUUsSUFBSSxJQUFJLEVBQUUsU0FBUyxNQUFPLElBQUksS0FBSSxFQUFFLEVBQUUsVUFBVSxDQUFDLEdBQUksR0FBRSxFQUFFLElBQUksRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFLFdBQVcsRUFBRSxFQUFFLGFBQWEsRUFBRSxFQUFFLGlCQUFpQixFQUFFLEVBQUUsWUFBWSxFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUsV0FBVyxFQUFFLEVBQUUsZUFBZSxFQUFFLEVBQUUsV0FBVyxFQUFFLEVBQUUsU0FBUyxHQUFFLElBQUssSUFBSSxFQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxNQUFNLEdBQUcsRUFBRSxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLFdBQVcsV0FBVyxFQUFFLFdBQVcsU0FBUyxFQUFFLEtBQUssTUFBTSxJQUFJLEdBQUcsRUFBRSxHQUFHLEdBQUcsRUFBRSxJQUFJLEVBQUUsV0FBVyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsRUFBRSxLQUFLLElBQUksR0FBRyxFQUFFLElBQUksRUFBRSxTQUFTLE1BQU8sR0FBRSxFQUFFLEdBQUcsS0FBaVEsUUFBUyxJQUFHLEdBQUcsTUFBTSxnQkFBaUIsS0FBSSxNQUFNLEdBQUcsUUFBUyxJQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsT0FBTSxDQUFHLElBQUksR0FBRSxFQUFFLEdBQUksT0FBTyxHQUFFLEdBQUcsR0FBRyxNQUFNLFFBQVEsR0FBRyxFQUFFLEdBQUcsSUFBSSxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsUUFBUyxJQUFHLEVBQUUsSUFBRyxJQUFLLEVBQUUsS0FBSyxNQUFNLEdBQUcsR0FBa3dNLFFBQVMsSUFBRyxFQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsRUFBRSxJQUFJLEdBQUcsSUFBSSxXQUFXLFdBQVcsR0FBRyxFQUFFLEVBQUUsSUFBSSxHQUFHLFFBQVMsSUFBRyxFQUFFLEVBQUUsR0FBRyxHQUFJLEdBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxRQUFTLEtBQUksR0FBRyxNQUFNLFFBQVEsR0FBRyxDQUFDLElBQUksR0FBSSxHQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxRQUFRLE9BQU8sRUFBRSxFQUFFLElBQUksR0FBRyxFQUFFLEVBQUUsUUFBUSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxLQUFLLEVBQUUsRUFBRSxXQUFXLElBQUksRUFBRSxTQUFTLE9BQVEsSUFBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLFlBQVksRUFBRSxnQkFBZ0IsSUFBSSxFQUFFLGNBQWMsR0FBSSxLQUFJLEVBQUUsZUFBZSxJQUFJLFFBQVMsSUFBRyxFQUFFLEdBQUcsTUFBTyxHQUFFLE1BQU0sU0FBUyxHQUFHLE9BQU8sRUFBRSxFQUFFLEtBQUssUUFBUyxJQUFHLEdBQUcsTUFBTSxVQUFXLEdBQUUsRUFBRSxPQUFPLEVBQUUsTUFBTSxRQUFTLElBQUcsR0FBRyxFQUFFLE9BQU8sV0FBVSxFQUFHLFFBQVMsSUFBRyxHQUFHLEVBQUUsT0FBTyxZQUFZLEVBQUUsT0FBTyxXQUFVLEVBQUcsR0FBRyxFQUFFLE9BQU8sVUFBVSxRQUFTLElBQUcsRUFBRSxHQUFHLEdBQUksR0FBRSxTQUFTLFlBQVksYUFBYyxHQUFFLFVBQVUsR0FBRSxHQUFHLEdBQUksRUFBRSxjQUFjLEdBQUcsUUFBUyxJQUFHLEdBQUcsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sRUFBRSxLQUFLLFdBQVcsRUFBRSxHQUFHLEVBQUUsa0JBQWtCLFFBQW8yQixRQUFTLElBQUcsR0FBRyxHQUFJLEdBQUUsR0FBRyxFQUFFLGdCQUFpQixPQUFPLElBQUcsRUFBRSxLQUFLLFFBQVEsU0FBUyxHQUFHLEdBQUcsRUFBRSxXQUFXLEVBQUUsUUFBUyxJQUFHLEdBQUcsR0FBSSxNQUFLLEVBQUUsRUFBRSxRQUFTLEtBQUksR0FBSSxLQUFLLEdBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxFQUFHLElBQUksR0FBRSxFQUFFLGdCQUFpQixLQUFJLEdBQUksS0FBSyxHQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRyxPQUFPLEdBQUUsUUFBUyxJQUFHLEVBQUUsR0FBRyxHQUFHLGlCQUFpQixLQUFLLEVBQUUsS0FBSyxNQUFPLEdBQUUsY0FBYyxNQUFNLEVBQUUsaUJBQWlCLFlBQW1uQyxRQUFTLElBQUcsR0FBRyxFQUFFLElBQUksU0FBUyxFQUFFLElBQUksVUFBVSxFQUFFLElBQUksVUFBVSxFQUFFLElBQUksV0FBVyxRQUFTLElBQUcsR0FBRyxFQUFFLEtBQUssT0FBTyxFQUFFLElBQUksd0JBQXdCLFFBQVMsSUFBRyxHQUFHLEdBQUksR0FBRSxFQUFFLEtBQUssSUFBSSxFQUFFLEVBQUUsS0FBSyxPQUFPLEVBQUUsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEVBQUUsSUFB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QUUsRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFLLEVBQUcsRUFBRSxHQUFHLE1BQU0sSUFBSSxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQUssRUFBRyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEVBQUUsSUFBdmxFLElBQUksR0FBSSxHQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsV0FBVyxFQUFFLEVBQUUsWUFBWSxFQUFFLEVBQUUsRUFBRSxrQkFBa0IsRUFBRSxFQUFFLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxFQUFFLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBSSxHQUFFLEVBQUUsRUFBRSxFQUFFLGNBQWMsRUFBRSxHQUFHLEtBQUssR0FBRyxHQUFHLEdBQUksUUFBTyxrQkFBa0IsRUFBRSxVQUFVLE1BQU0sRUFBRSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsRUFBRSxHQUFHLE1BQU8sR0FBRSxFQUFFLE9BQU8sR0FBRyxJQUFJLGFBQWEsSUFBSSxFQUFFLEVBQUUsUUFBUSxzQkFBc0IsTUFBTSxRQUFRLDRCQUE0QixPQUFPLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRSxNQUFNLElBQUksRUFBRSxPQUFPLEVBQUUsTUFBTSxHQUFHLElBQUssSUFBRyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sQ0FBQyxHQUFJLEdBQUUsRUFBRSxRQUFRLElBQUssSUFBRyxJQUFJLEVBQUUsQ0FBQyxHQUFHLEdBQUcsS0FBSyxHQUFHLENBQUMsR0FBSSxHQUFFLEVBQUUsUUFBUSxTQUFVLElBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxtQkFBbUIsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRyxXQUFVLEdBQUcsR0FBRyxLQUFLLEdBQUcsQ0FBQyxHQUFJLEdBQUUsRUFBRSxRQUFRLEtBQU0sSUFBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRyxXQUFVLEdBQUksR0FBRSxFQUFFLE1BQU0sR0FBSSxJQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxPQUFRLFVBQVMsR0FBSSxHQUFFLEVBQUUsTUFBTSxHQUFJLElBQUcsRUFBRSxDQUFDLEdBQUksR0FBRSxDQUFFLEdBQUUsRUFBRSxHQUFHLFFBQVEsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFHLFVBQVMsR0FBSSxHQUFpVyxXQUFhLEdBQUksR0FBRSxFQUFFLE1BQU0sR0FBSSxJQUFHLEVBQUUsQ0FBQyxHQUFJLEdBQUUsRUFBRSxHQUFHLFFBQVEsRUFBRSxHQUFHLFNBQVMsTUFBTSxFQUFHLEtBQUksRUFBRSxFQUFFLEdBQUcsVUFBVSxFQUFFLEVBQUUsTUFBTSxPQUFPLEVBQUUsRUFBRSxNQUFNLEtBQUssRUFBRSxNQUFNLE1BQU0sRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLEdBQUcsUUFBUSxFQUFFLElBQUksRUFBRSxFQUFFLE1BQU0sS0FBSyxFQUFHLElBQUcsRUFBRSxNQUFPLEdBQUUsV0FBVyxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsUUFBUSxFQUFFLElBQUksRUFBRSxLQUFubEIsSUFBRyxFQUFFLEVBQWlsQixTQUFXLEdBQUcsR0FBSSxHQUFFLEVBQUUsUUFBUSxFQUFFLEVBQUUsVUFBVyxLQUFJLE1BQU0sR0FBRyxHQUFHLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxJQUFJLEdBQUcsRUFBRSxHQUFJLEtBQUksR0FBSSxHQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLE9BQU8sRUFBRSxHQUFJLE9BQU0sR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxHQUFJLEdBQUUsRUFBRSxNQUFNLEdBQUcsRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxHQUFHLEVBQUUsTUFBTSxHQUFHLFNBQVMsRUFBRSxHQUFHLEVBQUUsNEJBQTRCLEVBQUUsb0JBQXFCLEdBQUUsSUFBSSxLQUFLLEVBQUUsR0FBRyxNQUFNLEdBQUcsRUFBRSxJQUFJLElBQUksRUFBRSxNQUFNLElBQUksRUFBRSxjQUFjLEVBQUUsY0FBYyxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sSUFBSSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsT0FBci9CLEdBQUcsR0FBRyxFQUFFLFFBQVEsSUFBSSxFQUFFLEVBQUcsV0FBVSxHQUFJLE9BQUUsR0FBTyxNQUFFLEdBQU8sTUFBRSxFQUFPLElBQUcsR0FBRyxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUUsTUFBTSxLQUFLLEdBQUcsS0FBSyxJQUFJLEdBQUcsS0FBSyxJQUFJLEdBQUcsS0FBSyxJQUFJLEdBQUcsS0FBSyxLQUFLLEVBQUUsRUFBRSxRQUFRLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFHLEdBQUUsRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEdBQUcsRUFBRSxFQUFFLFFBQVEsRUFBRSxPQUFPLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLE9BQU8sR0FBRyxHQUFHLElBQUksRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRyxRQUFraUMsS0FBSyxHQUFHLEtBQUssR0FBRyxXQUFXLEVBQUUsV0FBVyxXQUFXLEVBQUUsV0FBVyxpQkFBaUIsRUFBRSxpQkFBaUIscUJBQXFCLEVBQUUscUJBQXFCLDRCQUE0QixFQUFFLDRCQUE0QixrQkFBa0IsRUFBRSxTQUFTLGtCQUFrQixFQUFFLGtCQUFrQixNQUFNLFNBQVMsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEdBQUksR0FBRSxHQUFHLEVBQUUsSUFBSSxHQUFHLEVBQUcsSUFBRyxRQUFRLElBQUksRUFBRSxTQUFTLEdBQUcsSUFBSSxHQUFJLE1BQUssRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLElBQUksQ0FBQyxHQUFJLEdBQUUsRUFBRSxFQUFHLElBQUcsS0FBSyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsS0FBSyxRQUFRLEdBQUcsSUFBSSxFQUFFLEtBQUssSUFBSSxNQUFPLElBQUcsR0FBSSxJQUFJLEdBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFHLEtBQUksRUFBRSxHQUFHLEdBQUcsV0FBVyxFQUFFLEdBQUcsTUFBTSxXQUFXLEVBQUUsS0FBSyxFQUFFLFNBQVMsTUFBTSxvQkFBb0IsRUFBRSxTQUFTLE9BQU8sT0FBTyxFQUFFLFdBQVUsRUFBSSxLQUFJLEdBQUksR0FBRSxFQUFFLEVBQUUsR0FBRyxPQUFPLElBQUksRUFBRSxHQUFHLEdBQUcsRUFBRSxJQUFJLENBQUUsS0FBSyxTQUFTLEdBQUcsTUFBTSxHQUFHLEVBQUUsV0FBVyxFQUFFLEtBQUksSUFBSyxHQUFHLEVBQUUsTUFBTSxHQUFFLElBQUssR0FBRyxFQUFFLE9BQU8sR0FBRSxHQUFJLEVBQUUsU0FBUyxHQUFHLEdBQUksR0FBRSxFQUFFLFVBQVUsRUFBRSxFQUFFLE1BQU8sSUFBRyxFQUFFLElBQUksR0FBSSxHQUFFLEVBQUUsTUFBTSxHQUFJLE9BQU0sR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLEtBQUssRUFBRSxHQUFHLEtBQUssTUFBTSxLQUFLLFVBQVUsRUFBRSxHQUFHLFFBQVEsTUFBTSxFQUFFLEdBQUcsUUFBUSxFQUFFLEdBQUcsTUFBTSxFQUFFLEdBQUcsTUFBTSxFQUFFLEdBQUcsSUFBSSxFQUFFLEdBQUcsU0FBVSxHQUFFLE1BQU0sRUFBRSxPQUFNLElBQUssR0FBRyxFQUFFLFlBQVksR0FBRyxHQUFHLFNBQVMsR0FBRyxHQUFJLEdBQUUsR0FBRyxFQUFFLE9BQVEsSUFBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsR0FBRyxJQUFJLEVBQUUsTUFBTSxRQUFRLENBQUMsTUFBTSxHQUFHLEVBQUUsWUFBWSxFQUFFLE1BQUssRUFBSSxJQUFJLEdBQUUsR0FBRyxFQUFFLFlBQWEsS0FBSSxFQUFFLE9BQU8sS0FBSyxHQUFHLFNBQVMsR0FBRyxNQUFNLEdBQUcsRUFBRSxZQUFZLEVBQUUsTUFBSyxJQUFLLElBQUksSUFBSSxFQUFFLEdBQUcsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsS0FBSyxLQUFLLElBQUksU0FBUyxFQUFFLEVBQUUsR0FBRyxHQUFJLEdBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRyxHQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLEdBQUcsRUFBRSxJQUFJLE1BQU0sU0FBUyxFQUFFLEVBQUUsR0FBRyxHQUFHLEtBQUssR0FBRyxhQUFhLEVBQUUsS0FBSyxFQUFFLFNBQVMsY0FBYyxHQUFHLENBQUMsR0FBSSxHQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsVUFBWSxFQUFFLEdBQUcsRUFBRSxPQUFPLFlBQVksRUFBRSxHQUFHLEtBQUssVUFBVSxFQUFFLElBQUksRUFBRSxHQUFHLEdBQUcsRUFBRSxPQUFPLEVBQUUsYUFBYSxHQUFHLEdBQUcsS0FBSyxHQUFHLEdBQUcsSUFBSSxFQUFFLElBQUksR0FBRyxNQUFHLEdBQUcsYUFBYSxJQUFJLEVBQUUsRUFBRSxRQUFRLEdBQUcsT0FBTyxHQUFHLE1BQU0sSUFBSSxFQUFFLFNBQVMsRUFBRSxHQUFHLEdBQUksR0FBRSxFQUFFLEdBQUcsR0FBRyxFQUFHLElBQUcsRUFBRSxLQUFLLEdBQUcsQ0FBQyxJQUFJLEdBQUksR0FBRSxFQUFFLEVBQUUsS0FBSyxLQUFLLEVBQUUsRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLEtBQUssSUFBSSxFQUFFLEVBQUUsRUFBRSxPQUFPLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEtBQUssS0FBSyxVQUFVLElBQUssSUFBSSxHQUFFLEdBQUcsRUFBRSxHQUFHLE9BQVEsR0FBRSxLQUFLLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxXQUFXLElBQUksRUFBRSxFQUFFLEVBQUUsR0FBRyxPQUFPLE1BQU8sR0FBRSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsRUFBRSxNQUFNLElBQUksRUFBRSxLQUFLLEtBQUssVUFBVSxNQUFNLFdBQVcsRUFBRSxLQUFLLEtBQUssT0FBTyxLQUFLLEVBQUUsS0FBSyxHQUFHLEtBQUssRUFBRSxXQUFXLEVBQUUsV0FBVyxPQUFPLEVBQUUsT0FBTyxLQUFLLEdBQUcsTUFBTSxHQUFHLEVBQUUsUUFBUSxNQUFNLEVBQUUsRUFBRSxPQUFPLEdBQUcsT0FBTyxHQUFHLEtBQUssRUFBRSxLQUFLLElBQUksR0FBRyxFQUFFLEtBQUssTUFBSyxRQUFRLFNBQVMsRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBSSxJQUFHLEtBQUssRUFBRSxLQUFLLEVBQUUsV0FBVSxFQUFJLEdBQUUsU0FBUyxLQUFLLE9BQU8sRUFBRSxRQUFTLElBQUcsRUFBRSxHQUFHLEdBQUksR0FBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsVUFBVSxFQUFFLElBQUksR0FBRyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsY0FBYyxFQUFFLFVBQVUsT0FBTyxTQUFTLEdBQUcsR0FBSSxHQUFFLEdBQUcsRUFBRSxNQUFPLEtBQUksRUFBRSxJQUFJLEVBQUUsRUFBRSxTQUFTLFNBQVMsR0FBVyxJQUFSLEdBQUksR0FBRSxFQUFPLEdBQUcsQ0FBQyxPQUFHLEtBQVMsRUFBRSxJQUFJLE9BQU0sQ0FBRyxHQUFFLEVBQUUsT0FBTyxPQUFNLEdBQUksS0FBSyxHQUFHLFNBQVMsR0FBRyxHQUFJLEVBQUUsY0FBYSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLFVBQVUsR0FBRyxHQUFHLEVBQUUsZ0JBQWdCLEVBQUUsR0FBRyxFQUFFLGlCQUFpQixFQUFFLFVBQVUsRUFBRyxJQUFJLEdBQUUsR0FBRyxFQUFFLE9BQTRRLElBQXBRLElBQUksRUFBRSxXQUFXLE9BQU8sRUFBRSxZQUFZLEVBQUUsRUFBRSxxQkFBcUIsRUFBRSxTQUFTLFdBQVcsRUFBRSxTQUFTLGdCQUFnQixhQUFhLEVBQUUsS0FBSyxFQUFFLFdBQVcsR0FBRyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsR0FBRyxNQUFPLEdBQUUsWUFBWSxJQUFJLElBQUksRUFBRSxZQUFZLFVBQVUsSUFBSSxFQUFFLFlBQVksSUFBSSxFQUFFLFVBQWEsYUFBYSxFQUFFLElBQUksQ0FBQyxHQUFJLEdBQUUsR0FBRyxFQUFFLEdBQUksSUFBRyxFQUFFLENBQUMsR0FBSSxHQUFFLEdBQUcsR0FBRyxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsT0FBUSxHQUFFLFdBQVcsRUFBRSxFQUFFLGtCQUFrQixFQUFFLEVBQUUsVUFBVSxFQUFFLE9BQU8sUUFBUSxDQUFDLEdBQUksR0FBRSxHQUFHLEVBQUUsR0FBSSxJQUFHLEVBQUUsQ0FBQyxHQUFJLEdBQUUsRUFBRSxjQUFjLEVBQUUsZ0JBQWdCLEVBQUUsR0FBRyxHQUFHLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxRQUFRLEVBQUUsRUFBRSxHQUFHLEdBQUcsY0FBYyxFQUFHLEdBQUUsV0FBVyxFQUFFLEVBQUUsa0JBQWtCLEVBQUUsRUFBRSxTQUFTLEVBQUUsU0FBUyxPQUFPLFNBQVMsR0FBRyxJQUFJLEVBQUUsVUFBVSxNQUFPLEdBQUUsT0FBTyxHQUFFLElBQUssRUFBRSxVQUFVLEVBQUUsT0FBTyxHQUFHLEVBQUUsWUFBWSxFQUFFLE9BQU0sS0FBTSxHQUFHLFNBQVMsR0FBRyxTQUFTLEVBQUUsTUFBTSxFQUFFLFNBQVMsR0FBRyxFQUFFLFVBQVUsR0FBRyxTQUFTLEdBQUcsR0FBSSxJQUFHLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxVQUFVLEdBQUcsTUFBTSxHQUFHLEVBQUUscUJBQXFCLEVBQUUsZ0JBQWUsSUFBSyxFQUFHLEtBQUksR0FBSSxHQUFFLEVBQUUsRUFBRSxHQUFHLE9BQU8sSUFBSSxFQUFFLEdBQUcsR0FBRyxFQUFFLElBQUksQ0FBRSxPQUFPLFVBQVMsR0FBRyxHQUFJLEdBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsU0FBVSxLQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsSUFBSSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsS0FBSyxFQUFFLEVBQUUsR0FBRyxNQUFNLEdBQUcsS0FBSyxHQUFHLEdBQUcsRUFBRSxhQUFZLEdBQUksRUFBRSxHQUFHLEVBQUUsUUFBUSxHQUFHLFFBQVEsRUFBRSxFQUFFLFFBQVEsR0FBRyxLQUFLLEdBQUcsS0FBSyxHQUFHLEVBQUUsRUFBRSxRQUFRLEdBQUcsSUFBSSxFQUFFLEdBQUcsSUFBSSxFQUFFLEdBQUcsS0FBSyxNQUFNLEVBQUUsRUFBRSxNQUFNLEdBQUcsSUFBSSxJQUFJLEVBQUUsT0FBTyxHQUFHLGVBQWUsRUFBRSxFQUFFLE1BQU0sRUFBRSxhQUFhLEVBQUUsUUFBUSxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLGNBQWMsRUFBRSxJQUFJLEVBQUUsTUFBSyxFQUFHLEVBQUUsRUFBRSxJQUFHLElBQUssR0FBRyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsTUFBSyxFQUFHLEVBQUUsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksR0FBRyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsTUFBSyxFQUFHLEVBQUUsRUFBRSxPQUFPLEdBQUcsRUFBRSxPQUFPLEVBQUUsV0FBVyxHQUFHLEVBQUUsSUFBSSxFQUFFLFNBQVMsS0FBSyxHQUFHLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsT0FBUSxJQUFHLEdBQUcsS0FBSyxHQUFHLEVBQUUsRUFBRSxRQUFRLEdBQUcsS0FBSyxFQUFFLEdBQUcsS0FBSyxNQUFNLEVBQUUsRUFBRSxNQUFNLEdBQUcsSUFBSSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUUsRUFBRyxFQUFFLEVBQUUsR0FBRyxPQUFPLENBQUMsR0FBSSxJQUFHLEVBQUUsRUFBRSxRQUFRLEdBQUcsS0FBSyxNQUFNLElBQUksRUFBRSxHQUFHLEVBQUUsRUFBRyxJQUFFLEVBQUcsSUFBSSxFQUFFLEVBQUUsTUFBTSxJQUFJLEVBQUUsT0FBTyxJQUFJLEdBQUcsS0FBSyxLQUFLLEVBQUUsRUFBRSxNQUFNLEdBQUcsR0FBRyxHQUFFLElBQUssR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsUUFBUyxJQUFHLEVBQUUsRUFBRSxLQUFLLFVBQVUsR0FBRyxFQUFFLEtBQUssRUFBRSxXQUFXLFVBQVUsR0FBRyxHQUFHLEVBQUUsSUFBSSxFQUFFLFNBQVMsS0FBSyxJQUFJLEdBQUcsRUFBRSxFQUFFLE9BQU8sRUFBRSxLQUFLLEdBQUcsRUFBRSxRQUFTLElBQUcsR0FBRyxHQUFJLEVBQUUsSUFBRyxFQUFFLEdBQUcsRUFBRSxTQUFTLENBQUMsR0FBSSxHQUFFLFNBQVMsR0FBRyxHQUFJLEdBQUUsRUFBRSxNQUFNLEdBQUksSUFBSSxFQUFKLENBQWEsR0FBSSxLQUFLLEdBQUUsSUFBSSxFQUFFLEdBQUcsTUFBTyxJQUFJLEdBQUUsRUFBRSxHQUFHLE9BQU8sUUFBUSxHQUFHLElBQUksRUFBRSxFQUFFLE1BQU0sR0FBMEcsT0FBdEcsSUFBRyxFQUFFLE1BQU0sRUFBRSxRQUFRLEdBQUcsSUFBSSxPQUFPLEVBQUUsVUFBVSxFQUFFLEdBQUcsT0FBTyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsR0FBRyxTQUFTLEVBQUUsTUFBTSxFQUFTLElBQUcsRUFBRyxJQUFHLEVBQUUsRUFBRSxJQUFJLFFBQVMsSUFBRyxFQUFFLEdBQUcsRUFBRSxlQUFlLEVBQUUsaUJBQWlCLEVBQUUsYUFBYSxLQUFLLEdBQUcsUUFBUyxJQUFHLEdBQUcsR0FBSSxHQUFFLEVBQUUsS0FBSyxRQUFRLEdBQUcsR0FBSSxPQUFPLElBQUcsTUFBTSxFQUFFLEtBQUssS0FBSyxFQUFFLFdBQVcsR0FBRyxLQUFLLElBQUksS0FBSyxFQUFFLE1BQU0sR0FBRyxHQUFHLFNBQVEsSUFBSyxLQUFLLElBQUksRUFBRSxJQUFJLFNBQVEsR0FBSSxRQUFTLElBQUcsR0FBRyxHQUFJLEdBQUUsRUFBRSxNQUFNLEdBQUksSUFBRyxFQUFFLENBQUMsR0FBSSxLQUFLLE9BQU8sR0FBRSxRQUFRLFNBQVMsR0FBRyxFQUFFLEVBQUUsTUFBTSxLQUFJLElBQUssR0FBRyxRQUFTLElBQUcsR0FBRyxJQUFJLEdBQUksTUFBSyxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEdBQUcsTUFBTSxFQUFFLEdBQUcsS0FBTSxPQUFPLEdBQXFDLFFBQVMsSUFBRyxHQUFHLE1BQU8sSUFBRyxFQUFFLElBQUksRUFBRSxVQUFVLFFBQVEsRUFBRSxRQUE4eUYsUUFBUyxJQUFHLEVBQUUsR0FBRyxJQUFJLEdBQUcsR0FBRyxFQUFFLFlBQVksSUFBSSxHQUFHLEVBQUUsZUFBZSxFQUFFLFFBQVMsR0FBRSxHQUErUSxHQUE1USxFQUFFLE9BQU8sU0FBUyxHQUFHLE1BQUcsS0FBSSxFQUFFLE9BQWlCLElBQUksRUFBRSxTQUF1QixFQUFFLE1BQU0sRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLE9BQU8sR0FBRyxFQUFFLE1BQU0sU0FBUyxHQUFHLEtBQUssRUFBRSxRQUFRLENBQUMsR0FBRyxjQUFjLEVBQUUsRUFBRSxRQUFRLElBQUksT0FBTSxDQUFHLElBQUcsRUFBRSxJQUFJLE9BQU0sRUFBRyxPQUFNLEdBQUksS0FBSyxPQUFPLEtBQUssR0FBRyxNQUFNLFFBQU8sR0FBTSxJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUksR0FBRyxFQUFFLE1BQU0sU0FBUyxFQUFFLEtBQUssTUFBTSxFQUFFLFNBQVMsbUJBQW1CLE1BQU8sS0FBSSxHQUFJLEdBQUUsRUFBRSxFQUFFLEVBQUUsU0FBUyxPQUFPLEVBQUUsRUFBRSxJQUFJLENBQUMsR0FBSSxHQUFFLEVBQUUsU0FBUyxFQUFHLEdBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxRQUFPLEdBQUksR0FBRyxFQUFFLGFBQWEsSUFBSSxHQUFJLEdBQUUsRUFBRSxFQUFFLEVBQUUsYUFBYSxPQUFPLEVBQUUsRUFBRSxJQUFJLENBQUMsR0FBSSxHQUFFLEVBQUUsYUFBYSxHQUFHLEtBQU0sR0FBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLFFBQU8sTUFBTyxHQUFHLFFBQVMsR0FBRSxFQUFFLEdBQUcsR0FBRyxJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFlBQVksR0FBRyxFQUFFLFFBQVEsRUFBRSxTQUFTLFNBQVMsSUFBSSxFQUFFLFNBQVMsUUFBUSxJQUFJLEVBQUUsU0FBUyxHQUFHLE1BQU0sWUFBWSxFQUFFLFlBQVcsRUFBSSxJQUFHLEVBQUUsWUFBVyxFQUFHLEVBQUUsU0FBUyxJQUFJLEdBQUksR0FBRSxFQUFFLEVBQUUsRUFBRSxTQUFTLE9BQU8sRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLFNBQVMsR0FBRyxLQUFLLEVBQUUsSUFBSyxJQUFHLEVBQUUsYUFBYSxJQUFJLEdBQUksR0FBRSxFQUFFLEVBQUUsRUFBRSxhQUFhLE9BQU8sRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLGFBQWEsR0FBRyxNQUFNLEtBQUssR0FBRSxJQUFxNUIsUUFBUyxJQUFHLEVBQUUsR0FBRyxHQUFJLEdBQUUsRUFBRSxZQUFZLE1BQU0sRUFBRSxHQUFHLEVBQUUsRUFBRyxLQUFJLEdBQUksS0FBSyxHQUFFLENBQUMsR0FBSSxHQUFFLEdBQUcsRUFBRSxHQUFJLEdBQUUsSUFBSSxFQUFFLEdBQUcsUUFBUSxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksR0FBRyxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksTUFBTyxHQUFFLElBQUksRUFBRSxNQUFNLEdBQUcsR0FBRyxJQUFJLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sR0FBRyxHQUFHLEtBQUssRUFBRSxFQUFFLFFBQVMsSUFBRyxHQUFHLElBQUksRUFBRSxNQUFNLGNBQWUsSUFBRyxNQUFNLFFBQVEsR0FBRyxNQUFNLElBQUksRUFBRSxJQUFJLFNBQVMsR0FBRyxNQUFPLElBQUcsS0FBSyxLQUFLLEtBQUssR0FBSSxJQUFJLEdBQUUsR0FBRyxLQUFLLEVBQUUsT0FBTyxFQUFFLEdBQUcsS0FBSyxFQUFFLE9BQU8sRUFBRSxHQUFHLEtBQUssRUFBRSxNQUFNLFFBQVEsR0FBRyxJQUFLLElBQUcsRUFBRSxVQUFVLENBQUMsR0FBSSxHQUFFLEdBQUcsRUFBRSxHQUFHLElBQUssS0FBSSxHQUFJLEtBQUssR0FBRSxVQUFVLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxFQUFFLEtBQUssT0FBUSxJQUFHLFVBQVUsRUFBRSxDQUFDLEdBQUksR0FBRSxFQUFFLFNBQVUsSUFBRyxJQUFJLE9BQU8sUUFBUSxNQUFNLFFBQVEsT0FBTyxTQUFTLEdBQUcsT0FBTyxFQUFFLEtBQUssSUFBSSxTQUFTLEdBQUcsTUFBTSxVQUFVLEVBQUUsUUFBUSxLQUFLLFdBQVksR0FBRSxLQUFLLEVBQUcsT0FBTyxHQUFFLFNBQVMsR0FBRyxTQUFTLEdBQUcsTUFBTSxtQ0FBbUMsRUFBRSxJQUFJLElBQUksS0FBSyxNQUFNLGlCQUFpQixJQUFJLElBQUksR0FBRyxHQUFHLG9CQUFvQixHQUFHLEVBQUUsVUFBVSxFQUFFLE1BQU0sV0FBVyxFQUFFLFdBQVcsRUFBRSxNQUFNLFlBQVksRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE9BQU8sSUFBSSxNQUFPLElBQUcsRUFBRSxFQUFFLE1BQU0scUJBQXFCLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxPQUFPLElBQUksUUFBUyxJQUFHLEdBQUcsR0FBSSxHQUFFLFNBQVMsRUFBRSxHQUFJLElBQUcsRUFBRSxNQUFNLG9CQUFvQixDQUFFLElBQUksR0FBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEVBQUcsT0FBTSxxQkFBcUIsS0FBSyxVQUFVLEdBQUcsSUFBSSxLQUFLLFVBQVUsR0FBRyxlQUFlLEtBQUssVUFBVSxHQUFHLElBQW9sQixRQUFTLElBQUcsRUFBRSxHQUFHLEdBQUksR0FBRSxHQUFJLElBQUcsRUFBRyxRQUFPLE9BQU8sc0JBQXNCLEVBQUUsR0FBRyxFQUFFLEdBQUcsYUFBYSxJQUFJLGdCQUFnQixFQUFFLGlCQUFpQixRQUFTLElBQUcsRUFBRSxHQUFHLEdBQUcsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxPQUFPLEtBQUssRUFBRSxhQUFhLEVBQUUsZ0JBQWdCLE1BQU8sSUFBRyxFQUFFLEVBQUcsSUFBRyxFQUFFLE9BQU8sRUFBRSxjQUFjLE1BQU8sSUFBRyxFQUFFLEVBQUcsSUFBRyxFQUFFLE1BQU0sRUFBRSxhQUFhLE1BQU8sSUFBRyxFQUFFLEVBQUcsSUFBRyxFQUFFLEtBQUssRUFBRSxZQUFZLE1BQU8sSUFBRyxFQUFFLEVBQUcsSUFBRyxhQUFhLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxJQUFJLENBQUMsR0FBRyxTQUFTLEVBQUUsSUFBSSxNQUFPLFVBQVMsRUFBRSxHQUFHLEdBQUksR0FBRSxFQUFFLFVBQVUsWUFBWSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsTUFBTSxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxFQUFFLE9BQU8sRUFBRSxhQUFhLElBQUksRUFBRSxXQUFXLE9BQU8sRUFBRSxrQkFBa0IsSUFBSSxTQUFTLEdBQUcsT0FBTyxLQUFLLEVBQUUsRUFBRSxNQUFNLE1BQU0sRUFBRSxNQUFNLFFBQVEsRUFBRSxZQUFZLEtBQUssRUFBRSxFQUFFLFNBQVMsU0FBNkUsUUFBbEUsSUFBSSxHQUFHLElBQUksR0FBRyxTQUFTLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxJQUFJLEVBQUUsR0FBRyxTQUFTLElBQUksR0FBVSxFQUFFLEtBQUssRUFBRSxFQUFHLElBQUksRUFBRSxJQUFHLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxFQUFFLEdBQUcsR0FBSSxHQUFFLEVBQUUsZUFBZSxLQUFLLEdBQUcsRUFBRSxHQUFFLEVBQUksT0FBTSxNQUFNLEVBQUUsSUFBSSxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEtBQUssRUFBRSxVQUFVLEVBQUUsT0FBTyxDQUFDLEdBQUksS0FBSSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsZUFBZSxNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUksSUFBSSxHQUFFLEVBQUUsZUFBZSxLQUFLLEdBQUcsRUFBRSxHQUFFLEVBQUksR0FBRSxPQUFPLEVBQUUsSUFBSSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxJQUFJLElBQUksR0FBSSxHQUFFLEVBQUUsRUFBRSxFQUFFLFdBQVcsT0FBTyxJQUFJLEVBQUUsRUFBRSxXQUFXLEdBQUcsRUFBRSxFQUFHLE9BQU8sR0FBRSxNQUFPLElBQUcsRUFBRSxJQUFJLFNBQVMsUUFBUyxJQUFHLEVBQUUsR0FBRyxFQUFFLGlCQUFnQixDQUFHLElBQUksR0FBRSxFQUFFLEdBQUksT0FBTyxHQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLGdCQUFnQixLQUFLLHFCQUFxQixHQUFHLEVBQUUsR0FBRyxLQUFLLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsT0FBTyxJQUFJLEVBQUUsWUFBWSxRQUFRLElBQUksSUFBSSxRQUFTLElBQUcsRUFBRSxHQUFHLEdBQUcsRUFBRSxlQUFjLEVBQUcsRUFBRSxLQUFLLEVBQUUsWUFBWSxNQUFPLElBQUcsRUFBRSxFQUFHLElBQUcsRUFBRSxZQUFZLENBQUMsSUFBSSxHQUFJLEdBQUUsR0FBRyxFQUFFLEVBQUUsT0FBTyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsR0FBSSxPQUFNLEVBQUUsRUFBRSxPQUFPLE1BQU8sR0FBRSxNQUFNLEdBQUcsRUFBRSxHQUFHLElBQUksRUFBRSxTQUFTLElBQUksRUFBRSxJQUFJLEdBQUcsRUFBRSxHQUFHLE1BQU8sSUFBRyxFQUFFLEdBQUcsUUFBUyxJQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsTUFBTyxHQUFFLGFBQVksRUFBRyxRQUFTLEdBQUUsRUFBRSxFQUFFLEVBQUUsR0FBcUgsUUFBUyxHQUFFLEdBQUcsTUFBTyxHQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsS0FBSyxHQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsR0FBcEssSUFBSSxFQUFFLE9BQU8sTUFBTyxJQUFHLE1BQU8sSUFBSSxHQUFFLEVBQUUsT0FBUSxPQUFPLEdBQUUsSUFBSSxJQUFJLEVBQUUsSUFBSSxLQUFLLEVBQUUsRUFBRSxPQUFPLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxFQUFFLFFBQThELEVBQUUsYUFBYSxRQUFRLEVBQUUsRUFBRSxHQUFHLFFBQVMsSUFBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEdBQUksR0FBRSxFQUFFLElBQUksRUFBRSxFQUFFLE1BQU0sRUFBRSxFQUFFLFVBQVUsSUFBSSxFQUFFLFVBQVUsR0FBRyxFQUFFLEVBQUUsVUFBVSxJQUFJLEVBQUUsVUFBVSxFQUFHLE9BQU8sR0FBRSxjQUFhLEdBQUksR0FBRyxNQUFNLEtBQUssRUFBRSxjQUFjLEVBQUUsRUFBRSxFQUFFLGFBQWEsR0FBRyxJQUFJLEVBQUUsR0FBRyxLQUFLLFFBQVMsSUFBRyxFQUFFLEdBQUcsR0FBSSxHQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsR0FBRyxHQUFJLEdBQUUsRUFBRSxVQUFXLElBQUksRUFBSixDQUFhLEdBQUksR0FBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLGVBQWUsR0FBRSxDQUFHLEtBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLEdBQUcsR0FBRSxDQUFHLElBQUksR0FBRSxFQUFFLFdBQVcsRUFBRSxLQUFNLEtBQUksSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sSUFBSSxHQUFFLEVBQUcsR0FBRyxVQUFVLEVBQUUsS0FBSyxjQUFjLEVBQUUsUUFBUSxLQUFLLEVBQUUsTUFBTSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsS0FBSyxVQUFVLEVBQUUsT0FBTyxLQUFLLEVBQUUsSUFBSSxTQUFTLEVBQUUsYUFBYSxFQUFFLElBQUksSUFBSSxFQUFFLElBQUksS0FBSyxLQUFLLEVBQUUsVUFBVSxjQUFjLEtBQUssVUFBVSxFQUFFLFdBQVcsSUFBSSxNQUFNLE1BQUcsR0FBUyxFQUFFLE1BQU0sR0FBRyxHQUFH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LFdBQVcsRUFBRSxZQUFZLEVBQUUsYUFBYSxhQUFhLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxNQUFNLEdBQUcsRUFBRSxJQUFJLGFBQWEsYUFBYSxHQUFHLEVBQUUsSUFBSSxZQUFZLEdBQUcsRUFBRSxJQUFJLElBQUksRUFBRSxFQUFFLEdBQUcsYUFBYyxPQUFNLFNBQVMsRUFBRSxZQUFZLGFBQWEsT0FBTyxFQUFFLEVBQUUsSUFBSSxRQUFTLElBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEdBQUksR0FBRSxFQUFFLFFBQVMsSUFBRyxFQUFFLE9BQU8sQ0FBQyxHQUFJLEdBQUUsRUFBRSxFQUFHLElBQUcsSUFBSSxFQUFFLFFBQVEsRUFBRSxLQUFLLGFBQWEsRUFBRSxLQUFLLFNBQVMsRUFBRSxJQUFJLENBQUMsR0FBSSxHQUFFLEVBQUUsRUFBRSxlQUFlLEdBQUcsS0FBSyxLQUFLLEVBQUcsT0FBTSxJQUFJLEdBQUcsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFJLEdBQUUsRUFBRSxTQUFTLEVBQUUsR0FBRyxJQUFJLEdBQUksR0FBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxJQUFJLENBQUMsR0FBSSxHQUFFLEVBQUUsRUFBRyxJQUFHLElBQUksRUFBRSxLQUFLLENBQUMsR0FBRyxHQUFHLElBQUksRUFBRSxjQUFjLEVBQUUsYUFBYSxLQUFLLFNBQVMsR0FBRyxNQUFPLElBQUcsRUFBRSxTQUFTLENBQUMsRUFBRSxDQUFFLFFBQU8sRUFBRSxJQUFJLEVBQUUsY0FBYyxFQUFFLGFBQWEsS0FBSyxTQUFTLEdBQUcsTUFBTyxHQUFFLEVBQUUsWUFBWSxFQUFFLElBQUksTUFBTyxJQUFHLEVBQUUsRUFBRSxnQkFBZ0IsRUFBRSxFQUFFLEdBQUcsRUFBRyxPQUFNLElBQUksRUFBRSxJQUFJLFNBQVMsR0FBRyxNQUFPLEdBQUUsRUFBRSxLQUFLLEtBQUssS0FBSyxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssUUFBUyxJQUFHLEdBQUcsV0FBTyxLQUFTLEVBQUUsS0FBSyxhQUFhLEVBQUUsS0FBSyxTQUFTLEVBQUUsSUFBSSxRQUFTLElBQUcsRUFBRSxHQUFHLE1BQU8sS0FBSSxFQUFFLEtBQUssR0FBRyxFQUFFLEdBQUcsSUFBSSxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsRUFBRSxNQUFNLEtBQUssVUFBVSxFQUFFLE1BQU0sS0FBSyxPQUFPLEtBQUssRUFBRSxHQUFHLEtBQUssRUFBRSxXQUFXLEdBQUcsS0FBSyxVQUFVLEVBQUUsUUFBUSxHQUFJLElBQUksR0FBRSxFQUFFLFFBQVMsSUFBRyxHQUFHLElBQUksR0FBSSxHQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxJQUFJLENBQUMsR0FBSSxHQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxNQUFPLEdBQUUsUUFBUSxHQUFHLEVBQUUsS0FBSyxJQUFJLEVBQUUsSUFBSSxHQUFHLElBQUksRUFBRSxLQUFLLEtBQUssRUFBRSxJQUFJLE1BQU8sR0FBRSxJQUFJLEVBQUUsTUFBTSxHQUFHLEdBQUcsSUFBSSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxHQUFHLEdBQUcsS0FBSyxFQUFFLFFBQVMsSUFBRyxHQUFHLE1BQU8sR0FBRSxRQUFRLFVBQVUsV0FBVyxRQUFRLFVBQVUsV0FBK1AsUUFBUyxJQUFHLEVBQUUsR0FBRyxJQUFJLE1BQU8sSUFBSSxVQUFTLEdBQUcsTUFBTSxHQUFHLE1BQU8sR0FBRSxNQUFNLElBQUksRUFBRSxLQUFLLElBQUksR0FBRyxRQUFTLElBQUcsR0FBRyxHQUFJLEdBQUUsT0FBTyxPQUFPLEtBQU0sT0FBTyxVQUFTLEVBQUUsRUFBRSxJQUFJLEVBQUUsS0FBSyxJQUFJLFdBQVksR0FBRSxJQUFLLElBQUksR0FBRSxFQUFFLFdBQVcsT0FBTyxFQUFFLFlBQVksRUFBRSxDQUFFLElBQUcsRUFBRSxHQUFHLE1BQU8sR0FBRSxFQUFHLElBQUksR0FBRSxFQUFFLEVBQUUsR0FBRyxLQUFLLElBQUssT0FBTyxHQUFFLE9BQU8sR0FBRyxF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LEtBQUssSUFBSSxPQUFPLE9BQU8sTUFBTSxNQUFPLEdBQUUsVUFBVSxJQUFJLFNBQVMsR0FBRyxPQUFNLElBQUssS0FBSyxJQUFJLElBQUksRUFBRSxVQUFVLElBQUksU0FBUyxHQUFHLEtBQUssSUFBSSxJQUFHLEdBQUksRUFBRSxVQUFVLE1BQU0sV0FBVyxLQUFLLElBQUksT0FBTyxPQUFPLE9BQU8sSUFBSyxJQUFJLElBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxXQUFXLEtBQUssR0FBRyxLQUFLLEtBQUssUUFBUyxJQUFHLFVBQVUsT0FBTyxTQUFTLEdBQUcsS0FBSyxLQUFLLEtBQUssSUFBSSxHQUFHLFVBQVUsVUFBVSxTQUFTLEdBQUcsRUFBRSxLQUFLLEtBQUssSUFBSSxHQUFHLFVBQVUsT0FBTyxXQUFXLEdBQUcsUUFBUSxHQUFHLE9BQU8sT0FBTyxPQUFPLEdBQUcsVUFBVSxPQUFPLFdBQVcsSUFBSSxHQUFJLEdBQUUsS0FBSyxLQUFLLFFBQVEsRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxJQUFJLEVBQUUsR0FBRyxVQUFVLEdBQUcsT0FBTyxJQUFLLElBQUksT0FBaUcsR0FBRyxTQUFTLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxLQUFLLElBQUksRUFBRSxLQUFLLEtBQUssRUFBRSxLQUFLLFNBQVMsRUFBRSxLQUFLLEtBQUssRUFBRSxLQUFLLElBQUksRUFBRSxLQUFLLE9BQUcsR0FBTyxLQUFLLFFBQVEsRUFBRSxLQUFLLGNBQVUsR0FBTyxLQUFLLGNBQVUsR0FBTyxLQUFLLGNBQVUsR0FBTyxLQUFLLElBQUksR0FBRyxFQUFFLElBQUksS0FBSyxpQkFBaUIsRUFBRSxLQUFLLHNCQUFrQixHQUFPLEtBQUssV0FBTyxHQUFPLEtBQUssS0FBSSxFQUFHLEtBQUssVUFBUyxFQUFHLEtBQUssY0FBYSxFQUFHLEtBQUssV0FBVSxFQUFHLEtBQUssVUFBUyxFQUFHLEtBQUssUUFBTyxFQUFHLEtBQUssYUFBYSxFQUFFLEtBQUssY0FBVSxHQUFPLEtBQUssb0JBQW1CLEdBQUksSUFBSSxPQUFPLGNBQWEsR0FBSyxJQUFHLE1BQU0sSUFBSSxXQUFXLE1BQU8sTUFBSyxtQkFBbUIsT0FBTyxpQkFBaUIsR0FBRyxVQUFVLEdBQUksSUFBSSxJQUFHLFNBQVMsT0FBRyxLQUFTLElBQUksRUFBRSxHQUFJLElBQUksR0FBRSxHQUFJLEdBQUcsT0FBTyxHQUFFLEtBQUssRUFBRSxFQUFFLFdBQVUsRUFBRyxHQUFpWSxHQUFHLE1BQU0sVUFBVSxHQUFHLE9BQU8sT0FBTyxLQUFLLE9BQU8sTUFBTSxRQUFRLFVBQVUsU0FBUyxPQUFPLFdBQVcsUUFBUSxTQUFTLEdBQUcsR0FBSSxHQUFFLEdBQUcsRUFBRyxHQUFFLEdBQUcsRUFBRSxXQUFXLElBQUksR0FBSSxNQUFLLEVBQUUsVUFBVSxPQUFPLEtBQUssRUFBRSxHQUFHLFVBQVUsRUFBRyxJQUFJLEdBQUUsRUFBRSxFQUFFLE1BQU0sS0FBSyxHQUFHLEVBQUUsS0FBSyxNQUFPLFFBQU8sR0FBRyxJQUFJLE9BQU8sSUFBSSxVQUFVLEVBQUUsQ0FBRSxNQUFNLEtBQUksU0FBUyxFQUFFLEVBQUUsTUFBTSxHQUFHLE1BQU8sSUFBRyxFQUFFLGFBQWEsR0FBRyxFQUFFLElBQUksU0FBUyxLQUFNLElBQUksSUFBRyxPQUFPLG9CQUFvQixJQUFJLElBQUcsRUFBMkIsR0FBRyxTQUFTLEdBQUcsR0FBSSxFQUFFLE1BQUssTUFBTSxFQUFFLEtBQUssSUFBSSxHQUFJLElBQUcsS0FBSyxRQUFRLEVBQUUsRUFBRSxFQUFFLFNBQVMsTUFBTSxNQUFNLFFBQVEsSUFBSSxHQUFHLEVBQUUsR0FBRyxFQUFFLFVBQVUsR0FBRyxTQUFTLEVBQUUsRUFBRSxHQUFHLElBQUksR0FBSSxHQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLElBQUksQ0FBQyxHQUFJLEdBQUUsRUFBRSxFQUFHLEdBQUUsRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLEdBQUcsSUFBSSxLQUFLLGFBQWEsSUFBSSxLQUFLLEtBQUssR0FBaXFDLElBQUcsVUFBVSxLQUFLLFNBQVMsR0FBRyxJQUFJLEdBQUksR0FBRSxPQUFPLEtBQUssR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sSUFBSSxHQUFHLEVBQUUsRUFBRSxLQUFLLEdBQUcsVUFBVSxhQUFhLFNBQVMsR0FBRyxJQUFJLEdBQUksR0FBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxJQUFJLEdBQUcsRUFBRSxJQUFLLElBQUksSUFBRyxFQUFFLHFCQUE2ckIsSUFBRyxLQUFLLFNBQVMsRUFBRSxFQUFFLEdBQUcsTUFBTyxHQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsR0FBRyxrQkFBbUIsR0FBRSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsUUFBUSxTQUFTLEdBQUcsR0FBRyxHQUFHLEtBQUssRUFBRSxRQUFRLFNBQVMsR0FBRyxHQUFHLEVBQUUsS0FBSyxLQUFLLEdBQUcsTUFBTSxTQUFTLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBRyxJQUFJLElBQUksTUFBRSxJQUFRLElBQUksSUFBSSxNQUFFLEtBQVMsRUFBRSxNQUFPLFFBQU8sT0FBTyxHQUFHLEtBQU0sS0FBSSxFQUFFLE1BQU8sRUFBRSxJQUFJLEtBQUssS0FBSSxHQUFJLEtBQUssR0FBRSxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUksR0FBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUcsS0FBSSxNQUFNLFFBQVEsS0FBSyxHQUFHLElBQUksRUFBRSxHQUFHLEVBQUUsRUFBRSxPQUFPLEdBQUcsTUFBTSxRQUFRLEdBQUcsR0FBRyxHQUFHLE1BQU8sSUFBRyxHQUFHLE1BQU0sR0FBRyxRQUFRLEdBQUcsT0FBTyxHQUFHLFNBQVMsU0FBUyxFQUFFLEVBQUUsRUFBRSxHQUFHLElBQUksRUFBRSxNQUFPLEVBQUUsSUFBSSxHQUFFLE9BQU8sT0FBTyxLQUFNLE9BQU8sR0FBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLEVBQUUsR0FBRyxHQUFHLEdBQUcsUUFBUSxFQUFHLElBQUksSUFBRyxTQUFTLEVBQUUsR0FBRyxXQUFPLEtB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S0FBSyxNQUFLLEVBQUcsS0FBSyxHQUFHLEVBQUUsS0FBSyxLQUFLLEdBQUcsS0FBSyxRQUFPLEVBQUcsS0FBSyxNQUFNLEtBQUssS0FBSyxLQUFLLFFBQVEsS0FBSyxXQUFXLEtBQUssT0FBTyxHQUFJLElBQUcsS0FBSyxVQUFVLEdBQUksSUFBRyxLQUFLLFdBQVcsR0FBRyxrQkFBbUIsR0FBRSxLQUFLLE9BQU8sR0FBRyxLQUFLLE9BQU8sU0FBUyxHQUFHLElBQUksRUFBRSxLQUFLLEdBQUcsQ0FBQyxHQUFJLEdBQUUsRUFBRSxNQUFNLElBQUssT0FBTyxVQUFTLEdBQUcsSUFBSSxHQUFJLEdBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxJQUFJLENBQUMsSUFBSSxFQUFFLE1BQU8sR0FBRSxFQUFFLEVBQUUsSUFBSSxNQUFPLE1BQUssR0FBRyxLQUFLLFNBQVMsS0FBSyxPQUFPLElBQUksS0FBSyxNQUFNLEtBQUssU0FBSyxHQUFPLEtBQUssTUFBTyxJQUFHLFVBQVUsSUFBSSxXQUFXLEdBQUksRUFBRSxJQUFHLEtBQU0sSUFBSSxHQUFFLEtBQUssRUFBRyxLQUFJLEVBQUUsS0FBSyxPQUFPLEtBQUssRUFBRSxHQUFHLE1BQU0sR0FBRyxJQUFJLEtBQUssS0FBSyxLQUFNLEVBQUUsSUFBRyxFQUFFLEVBQUUsdUJBQXVCLEtBQUssV0FBVyxLQUFLLFFBQVEsS0FBSyxNQUFNLEdBQUcsR0FBRyxLQUFLLEtBQUssY0FBYyxNQUFPLElBQUcsR0FBRyxVQUFVLE9BQU8sU0FBUyxHQUFHLEdBQUksR0FBRSxFQUFFLEVBQUcsTUFBSyxVQUFVLElBQUksS0FBSyxLQUFLLFVBQVUsSUFBSSxHQUFHLEtBQUssUUFBUSxLQUFLLEdBQUcsS0FBSyxPQUFPLElBQUksSUFBSSxFQUFFLE9BQU8sUUFBUSxHQUFHLFVBQVUsWUFBWSxXQUFXLElBQUksR0FBSSxHQUFFLEtBQUssS0FBSyxPQUFPLEtBQUssQ0FBQyxHQUFJLEdBQUUsS0FBSyxLQUFLLEVBQUcsTUFBSyxVQUFVLElBQUksRUFBRSxLQUFLLEVBQUUsVUFBVSxNQUFNLEdBQUksR0FBRSxLQUFLLE1BQU8sTUFBSyxPQUFPLEtBQUssVUFBVSxLQUFLLFVBQVUsRUFBRSxLQUFLLFVBQVUsUUFBUSxFQUFFLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxRQUFRLEtBQUssUUFBUSxFQUFFLEtBQUssUUFBUSxPQUFPLEdBQUcsR0FBRyxVQUFVLE9BQU8sV0FBVyxLQUFLLEtBQUssS0FBSyxPQUFNLEVBQUcsS0FBSyxLQUFLLEtBQUssTUFBTSxTQUFTLEdBQUcsR0FBSSxHQUFFLEVBQUUsRUFBRyxJQUFHLE1BQU0sR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUcsRUFBRyxHQUFHLENBQUMsSUFBSSxHQUFJLEdBQUUsR0FBRyxPQUFPLEVBQUUsRUFBRSxJQUFJLEdBQUcsR0FBRyxHQUFHLEVBQUUsSUFBSSxHQUFJLElBQUcsT0FBTyxFQUFFLEVBQUUsRUFBRSxPQUFRLElBQUcsS0FBSyxFQUFHLE1BQUssSUFBRyxFQUFHLEdBQUcsT0FBTyxPQUFPLEdBQUcsVUFBVSxJQUFJLFdBQVcsR0FBRyxLQUFLLE9BQU8sQ0FBQyxHQUFJLEdBQUUsS0FBSyxLQUFNLElBQUcsSUFBSSxLQUFLLE9BQU8sRUFBRSxJQUFJLEtBQUssS0FBSyxDQUFDLEdBQUksR0FBRSxLQUFLLEtBQU0sSUFBRyxLQUFLLE1BQU0sRUFBRSxLQUFLLEtBQUssSUFBSSxLQUFLLEdBQUcsS0FBSyxLQUFLLEdBQUcsRUFBRSxHQUFHLE1BQU0sR0FBRyxHQUFHLEVBQUUsS0FBSyxHQUFHLHlCQUF5QixLQUFLLFdBQVcsU0FBVSxNQUFLLEdBQUcsS0FBSyxLQUFLLEdBQUcsRUFBRSxNQUFNLEdBQUcsVUFBVSxTQUFTLFdBQVcsS0FBSyxNQUFNLEtBQUssTUFBTSxLQUFLLE9BQU0sR0FBSSxHQUFHLFVBQVUsT0FBTyxXQUFXLElBQUksR0FBSSxHQUFFLEtBQUssS0FBSyxPQUFPLEtBQUssS0FBSyxLQUFLLEdBQUcsVUFBVSxHQUFHLFVBQVUsU0FBUyxXQUFXLEdBQUcsS0FBSyxPQUFPLENBQUMsS0FBSyxHQUFHLG1CQUFtQixFQUFFLEtBQUssR0FBRyxVQUFVLEtBQU0sS0FBSSxHQUFJLEdBQUUsS0FBSyxLQUFLLE9BQU8sS0FBSyxLQUFLLEtBQUssR0FBRyxVQUFVLEtBQU0sTUFBSyxRQUFPLEdBQUssSUFBSSxLQUFJLFlBQVcsRUFBRyxjQUFhLEVBQUcsSUFBSSxFQUFFLElBQUksR0FBaXZDLElBQUksTUFBSyxHQUFpZixHQUFHLEdBQXc4QyxTQUFTLEdBQUcsRUFBRSxVQUFVLE1BQU0sU0FBUyxHQUFHLEdBQUksR0FBRSxJQUFLLEdBQUUsS0FBSyxLQUFLLEVBQUUsUUFBTyxFQUFHLEdBQUcsRUFBRSxhQUFhLFNBQVMsRUFBRSxHQUFHLEdBQUksR0FBRSxFQUFFLFNBQVMsT0FBTyxPQUFPLEVBQUUsWUFBWSxTQUFTLEVBQUUsRUFBRSxZQUFhLEdBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxhQUFhLENBQUUsSUFBSSxHQUFFLEVBQUUsZ0JBQWlCLEdBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxpQkFBaUIsRUFBRSxVQUFVLEVBQUUsZ0JBQWdCLEVBQUUsU0FBUyxFQUFFLGNBQWMsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsa0JBQWtCLEVBQUUsR0FBRyxFQUFFLFNBQVMsR0FBRyxHQUFHLEVBQUUsYUFBYSxNQUFNLEdBQUcsRUFBRSxhQUFhLEVBQUUsRUFBRSxNQUFNLEVBQUUsU0FBUyxHQUFHLEdBQUksR0FBRSxFQUFFLFNBQVMsRUFBRSxFQUFFLE1BQU8sSUFBRyxJQUFJLEVBQUUsU0FBUyxDQUFDLEtBQUssRUFBRSxTQUFTLFVBQVUsRUFBRSxTQUFTLEVBQUUsRUFBRSxPQUFRLEdBQUUsVUFBVSxLQUFLLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxhQUFhLEVBQUUsU0FBUyxFQUFFLFNBQVMsS0FBSyxFQUFFLFVBQVUsS0FBSyxFQUFFLGlCQUFnQixFQUFHLEVBQUUsWUFBVyxFQUFHLEVBQUUsY0FBYSxFQUFHLEVBQUUsbUJBQWtCLEdBQUksR0FBRyxTQUFTLEdBQUcsRUFBRSxRQUFRLE9BQU8sT0FBTyxNQUFNLEVBQUUsZUFBYyxDQUFHLElBQUksR0FBRSxFQUFFLFNBQVMsZ0JBQWlCLElBQUcsR0FBRyxFQUFFLElBQUksR0FBRyxTQUFTLEdBQUcsRUFBRSxPQUFPLEtBQUssRUFBRSxhQUFhO21CQUFLLElBQUksR0FBRSxFQUFFLFNBQVMsRUFBRSxFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsR0FBRyxFQUFFLE9BQVEsR0FBRSxPQUFPLEdBQUcsRUFBRSxnQkFBZ0IsR0FBRyxFQUFFLGFBQWEsRUFBRSxFQUFFLEdBQUcsU0FBUyxFQUFFLEVBQUUsRUFBRSxHQUFHLE1BQU8sSUFBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUUsSUFBSyxFQUFFLGVBQWUsU0FBUyxFQUFFLEVBQUUsRUFBRSxHQUFHLE1BQU8sSUFBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUUsR0FBSyxJQUFJLEdBQUUsR0FBRyxFQUFFLElBQUssSUFBRyxFQUFFLFNBQVMsR0FBRyxFQUFFLE9BQU8sRUFBRSxNQUFLLEdBQUksR0FBRyxFQUFFLGFBQWEsRUFBRSxrQkFBa0IsRUFBRSxNQUFLLElBQUssR0FBRyxHQUFHLEVBQUUsZ0JBQWdCLFNBQVMsR0FBRyxHQUFJLEdBQUUsR0FBRyxFQUFFLFNBQVMsT0FBTyxFQUFHLEtBQUksSUFBRyxHQUFJLE9BQU8sS0FBSyxHQUFHLFFBQVEsU0FBUyxHQUFHLEdBQUcsRUFBRSxFQUFFLEVBQUUsTUFBTSxJQUFHLEtBQU0sR0FBRyxHQUFHLEdBQUcsU0FBUyxHQUFHLEdBQUksR0FBRSxFQUFFLFNBQVMsT0FBUSxLQUFJLEVBQUUsVUFBVSxrQkFBbUIsR0FBRSxFQUFFLEtBQUssR0FBRyxJQUFJLEdBQUcsR0FBRyxFQUFFLFdBQVcsRUFBRSxTQUFTLElBQUksRUFBRSxPQUFPLEVBQUUsU0FBUyxNQUFNLElBQUksU0FBUyxHQUFHLEdBQUksSUFBRyxJQUFJLFdBQVcsTUFBTyxNQUFLLFFBQVEsR0FBRyxJQUFJLFdBQVcsTUFBTyxNQUFLLFFBQVMsUUFBTyxlQUFlLEVBQUUsVUFBVSxRQUFRLEdBQUcsT0FBTyxlQUFlLEVBQUUsVUFBVSxTQUFTLEdBQUcsRUFBRSxVQUFVLEtBQUssR0FBRyxFQUFFLFVBQVUsUUFBUSxHQUFHLEVBQUUsVUFBVSxPQUFPLFNBQVMsRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLEdBQUcsTUFBTyxJQUFHLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxPQUFPLE1BQUssQ0FBRyxJQUFJLEdBQUUsR0FBSSxJQUFHLEtBQUssRUFBRSxFQUFFLEVBQUcsSUFBRyxFQUFFLFVBQVUsSUFBSSxFQUFFLEtBQUssS0FBSyxFQUFFLE9BQU8sTUFBTSxHQUFHLEdBQUcsRUFBRSxLQUFLLG1DQUFtQyxFQUFFLFdBQVcsS0FBSyxNQUFPLFlBQVcsRUFBRSxjQUFjLElBQUksU0FBUyxHQUFHLEdBQUksR0FBRSxRQUFTLEdBQUUsVUFBVSxJQUFJLFNBQVMsRUFBRSxHQUFHLEdBQUksR0FBRSxJQUFLLElBQUcsTUFBTSxRQUFRLEdBQUcsSUFBSSxHQUFJLEdBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLFFBQVEsRUFBRSxRQUFRLEtBQUssRUFBRSxRQUFRLFFBQVEsS0FBSyxHQUFHLEVBQUUsS0FBSyxLQUFLLEVBQUUsZUFBYyxFQUFJLE9BQU8sSUFBRyxFQUFFLFVBQVUsTUFBTSxTQUFTLEVBQUUsR0FBYyxRQUFTLEtBQUksRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxXQUE5QyxHQUFJLEdBQUUsSUFBbUQsT0FBTyxHQUFFLEdBQUcsRUFBRSxFQUFFLElBQUksRUFBRSxHQUFHLEdBQUcsRUFBRSxVQUFVLEtBQUssU0FBUyxFQUFFLEdBQUcsR0FBSSxHQUFFLElBQUssS0FBSSxVQUFVLE9BQU8sTUFBTyxHQUFFLFFBQVEsT0FBTyxPQUFPLE1BQU0sQ0FBRSxJQUFHLE1BQU0sUUFBUSxHQUFHLENBQUMsSUFBSSxHQUFJLEdBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUcsT0FBTyxHQUFFLEdBQUksR0FBRSxFQUFFLEVBQUUsUUFBUSxFQUFHLEtBQUksRUFBRSxNQUFPLEVBQUUsS0FBSSxFQUFFLE1BQU8sR0FBRSxRQUFRLEdBQUcsS0FBSyxDQUFFLEtBQUksR0FBSSxHQUFFLEVBQUUsT0FBTyxLQUFLLElBQUksRUFBRSxFQUFFLE1BQU0sR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLEVBQUcsT0FBTSxNQUFPLElBQUcsRUFBRSxVQUFVLE1BQU0sU0FBUyxHQUFHLEdBQUksR0FBRSxLQUFLLFFBQVEsRUFBRyxJQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsR0FBRyxDQUFFLEtBQUksR0FBSSxHQUFFLEVBQUUsVUFBVSxHQUFHLEVBQUUsc0JBQXNCLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLElBQUksR0FBRyxFQUFFLEdBQUcsS0FBSyxFQUFFLEtBQUssR0FBRyxNQUFPLFFBQU8sSUFBSSxTQUFTLEdBQUcsRUFBRSxVQUFVLFFBQVEsU0FBUyxFQUFFLEdBQUcsR0FBSSxHQUFFLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUcsR0FBRSxPQUFPLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsR0FBRSxHQUFJLElBQUksSUFBSSxFQUFFLFFBQVEsTUFBTSxFQUFFLE1BQU0sRUFBRSxJQUFJLFFBQVEsR0FBRyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFFBQVEsU0FBUyxFQUFFLFFBQVEsSUFBSSxFQUFFLE1BQU0sRUFBRSxVQUFVLGFBQWEsV0FBVyxLQUFLLFVBQVUsS0FBSyxTQUFTLFVBQVUsRUFBRSxVQUFVLFNBQVMsV0FBVyxHQUFJLEdBQUUsSUFBSyxLQUFJLEVBQUUsa0JBQWtCLENBQUMsR0FBRyxFQUFFLGlCQUFpQixFQUFFLG1CQUFrQixDQUFHLElBQUksR0FBRSxFQUFFLFNBQVMsR0FBRyxFQUFFLG1CQUFtQixFQUFFLFNBQVMsVUFBVSxFQUFFLEVBQUUsVUFBVSxHQUFHLEVBQUUsVUFBVSxFQUFFLFNBQVMsVUFBVyxLQUFJLEdBQUksR0FBRSxFQUFFLFVBQVUsT0FBTyxLQUFLLEVBQUUsVUFBVSxHQUFHLFVBQVcsR0FBRSxNQUFNLFFBQVEsRUFBRSxNQUFNLE9BQU8sVUFBVSxFQUFFLGNBQWEsRUFBRyxFQUFFLFVBQVUsRUFBRSxPQUFPLE1BQU0sR0FBRyxFQUFFLGFBQWEsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLElBQUksUUFBUSxNQUFNLEVBQUUsU0FBUyxFQUFFLE9BQU8sT0FBTyxTQUFTLElBQUksU0FBUyxHQUFHLEdBQUcsRUFBRSxXQUFXLEVBQUUsVUFBVSxVQUFVLFNBQVMsR0FBRyxNQUFPLElBQUcsRUFBRSxPQUFPLEVBQUUsVUFBVSxRQUFRLFdBQVcsR0FBSSxHQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsU0FBUyxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsWUFBYSxLQUFJLEVBQUUsYUFBYSxHQUFHLEVBQUUsS0FBSyxZQUFZLEVBQUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxPQUFPLENBQUUsS0FBSSxHQUFHLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUUsZ0JBQWdCLE1BQU0sR0FBRyxHQUFHLEVBQUUsRUFBRSxVQUFVLEVBQUUsRUFBRSxPQUFPLFFBQVEsR0FBRyxLQUFLLE1BQU8sT0FBTSxRQUFRLElBQUksSUFBSSxFQUFFLFNBQVMsRUFBRSxFQUFFLElBQUksWUFBYSxNQUFLLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxJQUFJLEdBQUksSUFBSSxLQUFJLE9BQU8sT0FBTyxPQUFPLElBQUksV0FBVyxLQUFLLGFBQWEsVUFBUyxFQUFHLE9BQU8sUUFBUSxHQUFHLFFBQVEsR0FBRyxLQUFLLE9BQU8sU0FBUyxRQUFRLFdBQVcsS0FBSyxNQUFNLE9BQU8sT0FBTyxNQUFNLEtBQUssU0FBUyxVQUFVLFdBQVcsSUFBSSxHQUFJLEtBQUssTUFBSyxNQUFNLEdBQUcsS0FBSyxNQUFNLEVBQUUsS0FBSyxPQUFPLFFBQVEsV0FBVyxHQUFJLEdBQUUsSUFBSyxNQUFLLE9BQU8sVUFBVSxTQUFTLEdBQUcsR0FBRyxFQUFFLFNBQVMsR0FBRyxNQUFPLElBQUcsRUFBRSxPQUFPLEtBQUssT0FBTyxVQUFVLFNBQVMsR0FBRyxHQUFHLEVBQUUsU0FBUyxHQUFHLE9BQU8sR0FBRyxFQUFFLFFBQVEsT0FBTyxXQUFXLEdBQUksR0FBRSxLQUFLLE9BQU8sUUFBUSxFQUFFLEdBQUcsR0FBRyxFQUFFLEdBQUcsRUFBRSxnQkFBaUIsSUFBRyxFQUFFLENBQUMsR0FBSSxHQUFFLEdBQUcsR0FBRyxFQUFFLEtBQUssUUFBUSxFQUFFLEtBQUssT0FBUSxJQUFHLEtBQUssSUFBSSxHQUFHLEVBQUUsS0FBSyxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsTUFBTyxFQUFFLElBQUksR0FBRSxLQUFLLE1BQU0sRUFBRSxLQUFLLEtBQUssRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEtBQUssS0FBSyxFQUFFLElBQUksS0FBSyxFQUFFLElBQUksSUFBSSxFQUFFLEdBQUksR0FBRSxJQUFJLEVBQUUsa0JBQWtCLEVBQUUsR0FBRyxrQkFBa0IsRUFBRSxFQUFFLEdBQUcsRUFBRSxLQUFLLEtBQUssRUFBRSxHQUFHLEVBQUUsRUFBRSxLQUFLLEdBQUcsS0FBSyxLQUFLLEVBQUUsT0FBTyxTQUFTLEtBQUssTUFBTSxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsS0FBSyxTQUFTLEVBQUUsS0FBSyxXQUFVLEVBQUcsTUFBTyxJQUFHLEdBQUcsRUFBRSxPQUFPLFNBQVMsR0FBRyxHQUFJLElBQUcsSUFBSSxXQUFXLE1BQU8sSUFBSSxRQUFPLGVBQWUsRUFBRSxTQUFTLEdBQUcsRUFBRSxNQUFNLEtBQUssR0FBRyxPQUFPLEVBQUUsYUFBYSxHQUFHLGVBQWUsSUFBSSxFQUFFLElBQUksR0FBRyxFQUFFLE9BQU8sR0FBRyxFQUFFLFNBQVMsR0FBRyxFQUFFLFdBQVcsU0FBUyxHQUFHLE1BQU8sSUFBRyxHQUFHLEdBQUcsRUFBRSxRQUFRLE9BQU8sT0FBTyxNQUFNLEVBQUUsUUFBUSxTQUFTLEdBQUcsRUFBRSxRQUFRLEVBQUUsS0FBSyxPQUFPLE9BQU8sUUFBUSxFQUFFLFFBQVEsTUFBTSxFQUFFLEVBQUUsRUFBRSxRQUFRLFdBQVcsSUFBSSxTQUFTLEdBQUcsRUFBRSxJQUFJLFNBQVMsR0FBRyxHQUFJLEdBQUUsS0FBSyxvQkFBb0IsS0FBSyxxQkFBc0IsSUFBRyxFQUFFLFFBQVEsSUFBSSxFQUFFLE1BQU8sS0FBSyxJQUFJLEdBQUUsRUFBRSxVQUFVLEVBQUcsT0FBTyxHQUFFLFFBQVEsTUFBTSxrQkFBbUIsR0FBRSxRQUFRLEVBQUUsUUFBUSxNQUFNLEVBQUUsR0FBRyxrQkFBbUIsSUFBRyxFQUFFLE1BQU0sS0FBSyxHQUFHLEVBQUUsS0FBSyxHQUFHLE9BQU8sR0FBRyxTQUFTLEdBQUcsRUFBRSxNQUFNLFNBQVMsR0FBRyxNQUFPLE1BQUssUUFBUSxHQUFHLEtBQUssUUFBUSxHQUFHLE9BQU8sR0FBRyxHQUFHLEdBQUcsU0FBUyxHQUFHLEVBQUUsUUFBUSxTQUFTLEdBQUcsRUFBRSxHQUFHLFNBQVMsRUFBRSxHQUFHLE1BQU8sSUFBRyxjQUFjLEdBQUcsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxFQUFFLEtBQUssUUFBUSxNQUFNLE9BQU8sSUFBSSxjQUFjLEdBQUcsa0JBQW1CLEtBQUksR0FBRyxLQUFLLEVBQUUsT0FBTyxJQUFJLEtBQUssUUFBUSxFQUFFLEtBQUssR0FBRyxFQUFFLEdBQUcsS0FBSyxRQUFRLEVBQUUsS0FBSyxPQUFPLElBQUksSUFBSSxPQUFPLGVBQWUsR0FBRyxVQUFVLGFBQWEsSUFBSSxLQUFLLE9BQU8sZUFBZSxHQUFHLFVBQVUsZUFBZSxJQUFJLFdBQVcsTUFBTyxNQUFLLFFBQVEs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QUUsRUFBRSxFQUFFLElBQUcsSUFBSyxFQUFFLEVBQUUsRUFBRSxHQUFHLENBQUMsR0FBSSxHQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsU0FBUyxFQUFFLEVBQUUsR0FBSSxHQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLGdCQUFnQixFQUFFLEdBQUcsR0FBRyxFQUFFLGNBQWMsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxJQUFJLElBQUksRUFBRSxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsSUFBSSxLQUFLLEVBQUUsSUFBSSxFQUFFLGVBQWUsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLElBQUksS0FBSyxRQUFTLEdBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxLQUFLLGlCQUFpQixFQUFFLEtBQUssTUFBTSxFQUFFLEVBQUUsS0FBSyxlQUFlLEVBQUUsS0FBSyxjQUFjLE1BQU0sRUFBRSxJQUFJLEVBQUUsa0JBQWtCLElBQUksRUFBRSxJQUFJLEVBQUUsRUFBRSxHQUFHLEVBQUUsS0FBSyxHQUFHLEdBQUcsRUFBRSxLQUFLLElBQUksUUFBUyxHQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxXQUFXLEtBQUssR0FBRyxFQUFFLGFBQWEsRUFBRSxFQUFFLEdBQUcsRUFBRSxZQUFZLEVBQUUsSUFBSSxRQUFTLEdBQUUsRUFBRSxFQUFFLEdBQUcsR0FBRyxNQUFNLFFBQVEsR0FBRyxJQUFJLEdBQUksR0FBRSxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLElBQUksTUFBSyxFQUFHLEVBQUUsT0FBUSxHQUFFLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsZUFBZSxPQUFPLEVBQUUsUUFBUSxRQUFTLEdBQUUsR0FBRyxLQUFLLEVBQUUsbUJBQW1CLEVBQUUsRUFBRSxrQkFBa0IsTUFBTyxPQUFPLEdBQUUsRUFBRSxLQUFLLFFBQVMsR0FBRSxFQUFFLEdBQUcsSUFBSSxHQUFJLEdBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxTQUFTLEVBQUUsRUFBRSxPQUFPLEdBQUcsR0FBRyxFQUFHLEdBQUUsRUFBRSxFQUFFLEtBQUssUUFBUSxFQUFFLEVBQUUsU0FBUyxFQUFFLE9BQU8sR0FBRyxHQUFHLEVBQUUsRUFBRSxTQUFTLEVBQUUsS0FBSyxJQUFJLFFBQVMsR0FBRSxHQUFHLEdBQUksRUFBRSxJQUFHLEVBQUUsRUFBRSxFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsSUFBSSxPQUFRLEtBQUksR0FBSSxHQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLFNBQVMsV0FBVyxFQUFFLGNBQWMsRUFBRSxJQUFJLEdBQUcsRUFBRSxFQUFFLE1BQU8sR0FBRSxFQUFFLEtBQUssSUFBSSxFQUFFLFNBQVMsSUFBSSxFQUFFLFdBQVcsRUFBRSxFQUFFLEVBQUUsU0FBUyxXQUFXLEVBQUUsY0FBYyxFQUFFLElBQUksR0FBRyxRQUFTLEdBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsS0FBSyxHQUFHLElBQUksRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRSxFQUFHLEVBQUUsR0FBRyxRQUFTLEdBQUUsR0FBRyxHQUFJLEdBQUUsRUFBRSxFQUFFLEVBQUUsSUFBSyxJQUFHLEVBQUUsR0FBRyxJQUFJLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxRQUFRLFNBQVMsRUFBRSxFQUFFLFFBQVEsR0FBRyxFQUFHLElBQUcsRUFBRSxFQUFFLEVBQUUsVUFBVSxJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsU0FBUyxTQUFTLEVBQUUsRUFBRSxFQUFFLFNBQVMsSUFBSSxRQUFTLEdBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxLQUFLLEdBQUcsSUFBSSxFQUFFLENBQUMsR0FBSSxHQUFFLEVBQUUsRUFBRyxHQUFFLEtBQUssRUFBRSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUUsT0FBTyxRQUFTLEdBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxNQUFNLENBQUMsR0FBSSxHQUFFLEVBQUUsRUFBRSxPQUFPLE9BQU8sQ0FBRSxLQUFJLEVBQUUsR0FBRyxFQUFFLFdBQVcsRUFBRSxFQUFFLFNBQVMsRUFBRSxHQUFHLFFBQVMsS0FBSSxLQUFLLEVBQUUsV0FBVyxFQUFFLEdBQUcsTUFBTyxHQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsSUFBSSxHQUFHLEVBQUUsRUFBRSxFQUFFLG9CQUFvQixFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxTQUFTLEVBQUUsRUFBRSxPQUFPLEdBQUcsRUFBRSxFQUFHLEdBQUUsRUFBRSxFQUFFLEtBQUssT0FBTyxFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUUsRUFBRSxHQUFHLFFBQVMsR0FBRSxFQUFFLEtBQUssUUFBUyxHQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsSUFBSSxHQUFJLEdBQUUsRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLEdBQUksR0FBRSxFQUFFLEVBQUcsSUFBRyxFQUFFLElBQUksR0FBRyxFQUFFLEdBQUcsTUFBTyxJQUFHLFFBQVMsR0FBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFHLElBQUksRUFBRSxDQUFDLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEVBQUUsR0FBRyxHQUFHLEdBQUksSUFBSSxHQUFFLEVBQUUsSUFBSSxFQUFFLEdBQUksSUFBRyxFQUFFLEVBQUUsb0JBQW9CLEVBQUUsRUFBRSxhQUFhLFVBQVUsRUFBRSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsb0JBQW1CLE1BQVEsSUFBRyxFQUFFLEVBQUUsV0FBVyxFQUFFLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsRUFBRSxXQUFXLEVBQUUsRUFBRSxTQUFTLEVBQUUsa0JBQWtCLEVBQUUsc0JBQXNCLENBQUMsR0FBSSxHQUFFLEVBQUUsRUFBRSxJQUFLLEdBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLFdBQVcsRUFBRSxFQUFFLEVBQUcsSUFBSSxHQUFFLEVBQUUsU0FBUyxFQUFFLEVBQUUsUUFBUyxJQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxTQUFTLEVBQUUsRUFBRSxPQUFPLEdBQUcsRUFBRSxFQUFHLEdBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLElBQUksR0FBRyxTQUFTLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxJQUFJLEdBQUksR0FBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksR0FBRyxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLElBQUksR0FBRyxFQUFFLElBQUksSUFBSSxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLElBQUksR0FBRyxFQUFFLElBQUksSUFBSSxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsYUFBYSxFQUFFLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsSUFBSSxHQUFHLEVBQUUsSUFBSSxJQUFJLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxhQUFhLEVBQUUsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksR0FBRyxFQUFFLElBQUksS0FBSyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEtBQUksRUFBRyxFQUFFLEdBQUcsR0FBRyxFQUFFLEVBQUUsR0FBRyxJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsT0FBRyxHQUFPLEdBQUcsRUFBRSxhQUFhLEVBQUUsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsS0FBSSxFQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksR0FBSSxHQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLElBQUksS0FBSyxFQUFFLEVBQUUsR0FBRyxJQUFJLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxPQUFPLEVBQUUsZUFBZSxFQUFFLElBQUksRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLEdBQUcsRUFBRSxFQUFFLE9BQU8sRUFBRSxlQUFlLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsZUFBZSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxZQUFZLEVBQUUsRUFBRSxLQUFLLFFBQVMsR0FBRSxFQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUUsUUFBUSxFQUFFLE9BQU8sS0FBSyxjQUFjLE1BQU8sS0FBSSxHQUFJLEdBQUUsRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLEVBQUUsR0FBRyxLQUFLLEtBQUssT0FBTyxFQUFFLElBQXVELFFBQVMsR0FBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEdBQUksR0FBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsUUFBUyxJQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsWUFBWSxFQUFFLEVBQUUsY0FBYyxNQUFPLEdBQUUsb0JBQW1CLEdBQUcsQ0FBRyxJQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxHQUFFLEdBQUksRUFBRSxFQUFFLEVBQUUsb0JBQW9CLE1BQU8sR0FBRSxFQUFFLElBQUcsQ0FBRyxJQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLEdBQUcsRUFBRSxnQkFBZ0IsR0FBRyxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxXQUFXLEVBQUUsRUFBRSxFQUFFLFlBQVksR0FBRyxJQUFJLEVBQUUsVUFBVSxPQUFNLE1BQU8sQ0FBQyxJQUFJLEdBQUksSUFBRSxFQUFHLEVBQUUsRUFBRSxXQUFXLEVBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxJQUFJLENBQUMsSUFBSSxJQUFJLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRSxDQUFHLE9BQU0sRUFBRSxFQUFFLFlBQVksSUFBSSxHQUFHLEVBQUUsT0FBTSxNQUFRLEdBQUUsRUFBRSxFQUFFLEVBQUcsSUFBRyxFQUFFLEdBQUcsQ0FBQyxHQUFJLElBQUUsQ0FBRyxLQUFJLEdBQUksS0FBSyxHQUFFLElBQUksRUFBRSxHQUFHLENBQUMsR0FBRSxFQUFHLEVBQUUsRUFBRSxFQUFHLFFBQU8sR0FBRyxFQUFFLE9BQU8sR0FBRyxFQUFFLFlBQWEsR0FBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFNLFFBQU0sRUFBaG9KLEdBQUksR0FBRSxFQUFFLEtBQUssRUFBRSxFQUFFLFFBQVEsRUFBRSxFQUFFLE9BQVEsS0FBSSxFQUFFLEVBQUUsRUFBRSxHQUFHLFNBQVMsRUFBRSxJQUFJLEVBQUUsR0FBRyxPQUFPLEVBQUUsRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRSxHQUFHLEdBQUcsTUFBTSxFQUFFLEdBQUcsSUFBSSxLQUFLLEVBQUUsR0FBRyxHQUFHLElBQWkySCxJQUFJLEdBQUUsRUFBRSwwQ0FBb3BCLE9BQU8sVUFBUyxFQUFFLEVBQUUsRUFBRSxHQUFHLElBQUksRUFBRSxHQUFHLENBQUMsR0FBSSxHQUFFLEdBQUUsRUFBRyxJQUFLLElBQUcsRUFBRSxHQUFHLEdBQUUsRUFBRyxFQUFFLEVBQUUsT0FBTyxDQUFDLEdBQUksR0FBRSxFQUFFLEVBQUUsU0FBVSxLQUFJLEdBQUcsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxLQUFLLEtBQUssT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsSUFBSSxFQUFFLFVBQVUsRUFBRSxhQUFhLEtBQUssRUFBRSxnQkFBZ0IsR0FBRyxHQUFFLEdBQUksRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLEdBQUcsTUFBTyxHQUFFLEVBQUUsR0FBRSxHQUFJLENBQUUsR0FBRSxFQUFFLEVBQUUsR0FBSSxJQUFHLEVBQUUsUUFBUSxHQUFHLHdCQUFvQixHQUFPLEdBQUcsR0FBSSxHQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsV0FBVyxFQUFHLElBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxTQUFTLEtBQUssRUFBRSxFQUFFLFlBQVksSUFBSSxFQUFFLEVBQUUsUUFBUSxJQUFJLEdBQUksR0FBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLEdBQUcsR0FBRyxDQUFDLElBQUksR0FBSSxHQUFFLEVBQUUsRUFBRSxFQUFFLFFBQVEsU0FBUyxFQUFFLEVBQUUsUUFBUSxHQUFHLEVBQUcsSUFBRyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQyxJQUFJLEdBQUksR0FBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLFNBQVMsRUFBRSxFQUFFLE9BQU8sR0FBRyxHQUFHLEVBQUcsSUFBSSxHQUFFLEVBQUUsS0FBSyxLQUFLLE1BQU8sSUFBRyxFQUFFLE9BQU8sSUFBSSxHQUFJLEdBQUUsRUFBRSxFQUFFLEVBQUUsSUFBSSxPQUFPLElBQUksRUFBRSxJQUFJLFNBQVUsSUFBRyxFQUFHLEdBQUUsRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLEdBQUcsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLE1BQU8sR0FBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsTUFBTSxRQUFRLEdBQUcsU0FBUyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxPQUFPLEdBQUcsU0FBUyxHQUFHLE9BQU8sU0FBUyxFQUFFLElBQUcsSUFBSyxFQUFFLEtBQUssS0FBSyxHQUFHLEVBQUUsR0FBRyxVQUFVLE9BQU8sS0FBTSxJQUFHLFNBQVMsaUJBQWlCLGtCQUFrQixXQUFXLEdBQUksR0FBRSxTQUFTLGFBQWMsSUFBRyxFQUFFLFFBQVEsR0FBRyxFQUFFLFVBQVcsSUFBSSxLQUFJLFNBQVMsU0FBUyxFQUFFLEVBQUUsRUFBRSxHQUFHLFdBQVcsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLElBQUksVUFBVSxHQUFHLEVBQUUsWUFBWSxXQUFXLEdBQUcsaUJBQWlCLEVBQUUsRUFBRSxLQUFLLEdBQUcsRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLGFBQWEsSUFBSSxLQUFLLEVBQUUsUUFBUSxNQUFNLGFBQWEsRUFBRSxLQUFLLEdBQUcsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxVQUFVLE9BQU8sRUFBRSxpQkFBaUIsbUJBQW1CLElBQUksRUFBRSxpQkFBaUIsaUJBQWlCLElBQUksRUFBRSxpQkFBaUIsU0FBUyxJQUFJLElBQUksRUFBRSxRQUFPLE1BQU8saUJBQWlCLFNBQVMsRUFBRSxFQUFFLEdBQUcsR0FBRyxXQUFXLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsUUFBUyxJQUFJLEdBQUUsRUFBRSxVQUFVLEVBQUUsRUFBRSxhQUFhLElBQUksS0FBSyxFQUFFLFFBQVEsR0FBTyxHQUFFLEtBQUssU0FBUyxFQUFFLEdBQUcsT0FBTyxFQUFFLEVBQUUsRUFBRSxRQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sS0FBSyxTQUFTLEdBQUcsTUFBTyxJQUFHLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxVQUFVLEdBQUcsRUFBRSxNQUFNLEtBQUssR0FBRyxFQUFFLGFBQTZ4QixJQUFJLE1BQU0sR0FBRyxNQUFNLEtBQUssU0FBUyxFQUFFLEVBQUUsR0FBRyxHQUFJLEdBQUUsRUFBRSxNQUFNLEdBQUcsRUFBRSxHQUFHLElBQUksTUFBTSxFQUFFLEtBQUssV0FBVyxFQUFFLEVBQUUsbUJBQW1CLFNBQVMsRUFBRSxNQUFNLFFBQVEsR0FBRyxFQUFFLE1BQU0sT0FBUSxJQUFHLEdBQUcsRUFBRSxLQUFLLE1BQUssRUFBRyxHQUFHLEVBQUUsV0FBVyxFQUFFLE1BQU0sUUFBUSxLQUFLLEVBQUUsTUFBTSxRQUFRLEVBQUUsRUFBRSxRQUFRLE9BQU8sU0FBUyxFQUFFLEVBQUUsR0FBRyxHQUFJLEdBQUUsRUFBRSxPQUFPLElBQUksRUFBRSxZQUFZLEVBQUUsR0FBRyxJQUFJLE1BQU0sRUFBRSxLQUFLLFlBQVksRUFBRSxLQUFLLE1BQUssRUFBRyxFQUFFLEdBQUcsRUFBRSxXQUFXLEVBQUUsTUFBTSxRQUFRLEVBQUUscUJBQXFCLEdBQUcsRUFBRSxXQUFXLEVBQUUsTUFBTSxRQUFRLFVBQVUsRUFBRSxNQUFNLFFBQVEsRUFBRSxFQUFFLG1CQUFtQixTQUFTLE9BQU8sU0FBUyxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsSUFBSSxFQUFFLE1BQU0sUUFBUSxFQUFFLHVCQUF1QixJQUFJLEtBQUssT0FBTyxPQUFPLFFBQVEsSUFBSSxRQUFRLEtBQUssT0FBTyxLQUFLLE9BQU8sV0FBVyxPQUFPLFdBQVcsT0FBTyxhQUFhLE9BQU8sYUFBYSxPQUFPLGlCQUFpQixPQUFPLGlCQUFpQixPQUFPLFlBQVksT0FBTyxrQkFBa0IsT0FBTyxjQUFjLE9BQU8sVUFBVSxPQUFPLE9BQU8sU0FBa1csR0FBRyxTQUFTLEdBQUcsTUFBTyxHQUFFLEtBQUssR0FBRyxJQUFJLEdBQUcsU0FBUyxHQUFHLE1BQU0sU0FBUyxFQUFFLE1BQU0sSUFBSSxLQUFLLGFBQWEsTUFBTSxHQUFHLFVBQVMsRUFBRyxPQUFPLFNBQVMsR0FBRyxHQUFJLEdBQUUsS0FBSyxFQUFFLEtBQUssT0FBTyxPQUFRLElBQUcsSUFBSSxFQUFFLEVBQUUsT0FBTyxLQUFLLE9BQU8sQ0FBQyxHQUFJLEdBQUUsS0FBSyxLQUFLLEVBQUUsRUFBRSxFQUFHLElBQUcsU0FBUyxHQUFHLEtBQUssRUFBRSxFQUFFLFFBQVEsR0FBRyxFQUFFLEtBQUssV0FBVyxPQUFNLEdBQUksS0FBSyxRQUFRLE1BQU8sRUFBRSxJQUFJLEdBQUUsR0FBRyxFQUFHLEtBQUksRUFBRSxNQUFPLEVBQUUsSUFBRyxLQUFLLFNBQVMsTUFBTyxJQUFHLEVBQUUsRUFBRyxJQUFJLEdBQUUsZ0JBQWdCLEtBQUssS0FBSyxHQUFJLEdBQUUsSUFBSSxNQUFNLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxLQUFLLElBQUksT0FBTyxFQUFFLEtBQUssUUFBUSxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLEdBQUksSUFBSSxJQUFHLEVBQUUsT0FBTyxFQUFFLFVBQVUsV0FBVyxHQUFHLE1BQU0sRUFBRSxLQUFLLE9BQU8sRUFBRSxHQUFHLEVBQUcsSUFBRyxFQUFFLEtBQUssWUFBWSxFQUFFLEtBQUssV0FBVyxLQUFLLE1BQU0sRUFBRSxLQUFLLE1BQUssR0FBSSxHQUFHLEVBQUUsT0FBTyxTQUFTLEVBQUUsR0FBRyxNQUFPLEdBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssR0FBRyxNQUFNLEVBQUUsb0JBQW9CLEVBQUUsa0JBQWtCLE9BQU8sV0FBVyxDQUFDLEdBQUksR0FBRSxFQUFFLEtBQUssV0FBVyxLQUFLLEVBQUcsSUFBRyxXQUFXLEVBQUUsTUFBTyxNQUFLLFVBQVMsRUFBRyxHQUFHLEVBQUUsYUFBYSxXQUFXLEVBQUUsVUFBUyxFQUFHLEVBQUUsaUJBQWlCLEdBQUcsRUFBRSxFQUFHLElBQUcsV0FBVyxFQUFFLENBQUMsR0FBRyxHQUFHLEdBQUcsTUFBTyxFQUFFLElBQUksR0FBRSxFQUFFLFdBQVcsSUFBSyxJQUFHLEVBQUUsYUFBYSxHQUFHLEdBQUcsRUFBRSxpQkFBaUIsR0FBRyxHQUFHLEVBQUUsYUFBYSxTQUFTLEdBQUcsRUFBRSxLQUFLLE1BQU8sTUFBSyxHQUFHLEdBQUcsSUFBSSxPQUFPLFVBQVUsUUFBUSxVQUFvVyxJQUFHLElBQUssSUFBSSxLQUFJLFdBQVcsR0FBRyxpQkFBaUIsTUFBTSxHQUFHLFlBQVksV0FBVyxHQUFJLEdBQUUsS0FBSyxFQUFFLEtBQUssT0FBUSxNQUFLLFFBQVEsU0FBUyxFQUFFLEdBQUcsR0FBSSxHQUFFLEdBQUcsRUFBRyxHQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsTUFBSyxHQUFHLEdBQUksRUFBRSxPQUFPLEVBQUUsS0FBSyxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsS0FBSyxPQUFPLFNBQVMsR0FBRyxJQUFJLEdBQUksR0FBRSxLQUFLLEtBQUssS0FBSyxPQUFPLEtBQUssS0FBSyxPQUFPLEVBQUUsT0FBTyxPQUFPLE1BQU0sRUFBRSxLQUFLLGFBQWEsS0FBSyxTQUFTLEVBQUUsS0FBSyxPQUFPLFlBQVksRUFBRSxLQUFLLFlBQVksRUFBRSxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLElBQUksQ0FBQyxHQUFJLEdBQUUsRUFBRSxFQUFHLEdBQUUsS0FBSyxNQUFNLEVBQUUsS0FBSyxJ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LEdBQUcsd0dBQXdHLEdBQUcsNkJBQTZCLEVBQUUsT0FBTyxLQUFLLEdBQUcsT0FBTyxHQUFHLFFBQVEsR0FBRyxJQUFJLEdBQUcsR0FBSSxRQUFPLEtBQUssSUFBSSxHQUFHLGFBQWEsR0FBRyxHQUFJLFFBQU8sUUFBUSxHQUFHLFVBQVUsR0FBRyxxQkFBcUIsR0FBRyxTQUFTLEdBQUcsUUFBUSxHQUFHLEVBQUUseUJBQXdCLEdBQUksTUFBTSxJQUFJLE9BQU8sSUFBSSxPQUFPLElBQUksU0FBUyxJQUFJLFFBQVEsSUFBSSxRQUFRLEtBQUssT0FBTyxLQUFLLFFBQVEsS0FBSyxHQUFHLDRCQUE0QixHQUFHLG1DQUFtQyxHQUFHLEVBQUUsZ0JBQWUsR0FBSSxHQUFHLFNBQVMsRUFBRSxHQUFHLE1BQU8sSUFBRyxHQUFHLElBQUksT0FBTyxFQUFFLElBQXFGLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLFlBQVksR0FBRyxZQUFZLEdBQUcscUNBQXFDLEdBQUcsaUNBQWlDLEdBQUcsV0FBVyxHQUFHLFdBQVcsR0FBRyxTQUFTLEdBQUcsa0JBQWtCLEdBQUcsd0JBQXdCLEdBQUcsa0JBQWtCLEdBQUcsU0FBUyxHQUFHLE9BQU8sR0FBRyxFQUFFLElBQUksR0FBRyxVQUEycVEsR0FBRyxlQUFlLEdBQUcsVUFBMkUsSUFBSSxHQUFHLElBQUksaUJBQWlCLFNBQVMsRUFBRSxHQUFHLEdBQUcsVUFBVSxFQUFFLElBQUksQ0FBQyxHQUFJLEdBQUUsRUFBRSxFQUFFLFFBQVMsS0FBSSxFQUFFLFdBQVcsTUFBTyxLQUFJLEVBQUUsVUFBVSxFQUFFLGtCQUFrQixFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsTUFBTSxJQUFJLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxVQUFVLFVBQVUsRUFBRSxDQUFDLEdBQUksR0FBRSxHQUFHLEVBQUUsUUFBTyxHQUFJLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxHQUFHLEVBQUUsTUFBTSxHQUFHLEVBQUUsVUFBUyxHQUFJLEVBQUUsR0FBRyxFQUFFLGFBQVksR0FBSSxFQUFFLEdBQUcsRUFBRyxJQUFHLEdBQUcsR0FBRyxFQUFFLE9BQU8sWUFBWSxHQUFHLEVBQUUsR0FBRyxFQUFFLFdBQVUsRUFBRyxFQUFFLEdBQUcsSUFBSSxFQUFFLGlCQUFpQixFQUFFLEdBQUcsR0FBRyxJQUFJLEVBQUUsR0FBRyxNQUFNLEdBQUksSUFBSSxHQUFFLEdBQUcsRUFBRyxJQUFHLEVBQUUsU0FBUSxHQUFJLEdBQUcsRUFBRSxPQUFPLFNBQVMsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLElBQUksSUFBSSxFQUFFLGNBQWMsRUFBRSxNQUFNLEdBQUksSUFBSSxHQUFFLEdBQUcsRUFBRyxPQUFPLElBQUcsRUFBRSxTQUFRLEdBQUksR0FBRyxFQUFFLFFBQVEsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsSUFBSSxFQUFFLE1BQU0sSUFBSSxFQUFFLEVBQUUsTUFBSyxFQUFHLElBQUksRUFBRSxPQUFPLEdBQUcsT0FBVyxHQUFHLEdBQUcsSUFBSSxZQUFXLEVBQUcsUUFBUSxHQUFHLFlBQVksTUFBTSxTQUFTLEVBQUUsRUFBRSxHQUFHLEdBQUksR0FBRSxFQUFFLE1BQU0sRUFBRSxFQUFFLFVBQVUsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLFNBQVMsSUFBSyxJQUFHLEVBQUUsVUFBVSxNQUFPLElBQUcsRUFBRSxFQUFFLElBQUcsQ0FBRyxJQUFHLFdBQVcsR0FBRyxTQUFTLEVBQUUsRUFBRSxHQUFHLEdBQUksR0FBRSw4S0FBOEssR0FBRyxFQUFFLE9BQU8sVUFBVSxPQUFPLEtBQU0sR0FBRSxFQUFFLElBQUksR0FBRyxFQUFFLDZEQUE2RCxHQUFHLEVBQUUsU0FBUyxFQUFFLE1BQUssSUFBSyxFQUFFLEVBQUUsT0FBUSxJQUFHLFVBQVUsR0FBRyxhQUFhLEdBQUcsU0FBUyxFQUFFLEVBQUUsR0FBRyxHQUFJLEdBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsVUFBVSxPQUFPLEVBQUUsR0FBRyxFQUFFLGVBQWUsT0FBTyxFQUFFLEdBQUcsRUFBRSxnQkFBZ0IsT0FBUSxJQUFHLEVBQUUsVUFBVSxpQkFBaUIsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLFFBQVEsU0FBUyxFQUFFLEtBQUssRUFBRSxJQUFJLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxHQUFHLEVBQUUsU0FBUyxXQUFXLEVBQUUseUNBQXlDLEVBQUUsTUFBTSxFQUFFLHFDQUFxQyxFQUFFLE1BQU0sRUFBRSxJQUFJLEdBQUcsNkNBQTZDLEdBQUcsRUFBRSxxQkFBcUIsbUJBQW1CLEdBQUcsRUFBRSw2Q0FBNkMsV0FBVyxHQUFHLEVBQUUsT0FBTyxJQUFJLE1BQUssSUFBSyxFQUFFLEVBQUUsT0FBUSxJQUFHLFVBQVUsR0FBRyxVQUFVLEdBQUcsU0FBUyxFQUFFLEVBQUUsR0FBRyxHQUFJLEdBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsVUFBVSxNQUFPLElBQUcsRUFBRSxVQUFVLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxHQUFHLEtBQUssR0FBRyxFQUFFLFNBQVMsR0FBRyxFQUFFLEdBQUcsTUFBSyxJQUFLLEVBQUUsRUFBRSxPQUFRLElBQUcsVUFBVSxHQUFHLGFBQWEsR0FBRyxTQUFTLEVBQUUsRUFBRSxHQUFHLEdBQUksR0FBRSxFQUFFLFNBQVMsS0FBSyxFQUFFLE1BQU0sRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLEtBQUssR0FBRyxHQUFHLFVBQVUsRUFBRSxFQUFFLEVBQUUsU0FBUyxVQUFVLEVBQUUsR0FBRyxRQUFRLEVBQUUscUJBQXNCLEtBQUksRUFBRSw4QkFBOEIsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFLLElBQUksR0FBRSxHQUFHLEVBQUUsRUFBRyxLQUFJLEVBQUUscUNBQXFDLEdBQUcsR0FBRyxFQUFFLFFBQVEsSUFBSSxFQUFFLEtBQUssR0FBRyxFQUFFLEVBQUUsRUFBRSxNQUFLLElBQUssR0FBRyxJQUFJLEdBQUcsRUFBRSxPQUFPLG1CQUFtQixFQUFFLEVBQUUsT0FBUSxLQUFJLEVBQUUsY0FBYyxHQUFHLE1BQU8sSUFBRyxFQUFFLEVBQUUsSUFBRyxDQUFHLFFBQU0sR0FBSSxLQUFLLFNBQVMsRUFBRSxHQUFHLEVBQUUsT0FBTyxHQUFHLEVBQUUsY0FBYyxNQUFNLEVBQUUsTUFBTSxJQUFJLElBQUksS0FBSyxTQUFTLEVBQUUsR0FBRyxFQUFFLE9BQU8sR0FBRyxFQUFFLFlBQVksTUFBTSxFQUFFLE1BQU0sSUFBSSxLQUFLLFNBQVMsU0FBUyxHQUFHLE1BQU0sUUFBUSxHQUFHLFdBQVcsR0FBRyxZQUFZLEdBQUcsaUJBQWlCLEdBQUcsY0FBYyxHQUFHLGdCQUFnQixHQUFHLFdBQVcsU0FBUyxHQUFHLE1BQU8sR0FBRSxPQUFPLFNBQVMsRUFBRSxHQUFHLE1BQU8sR0FBRSxPQUFPLEVBQUUscUJBQXFCLEtBQUssTUFBTSxLQUFLLEdBQUcsRUFBRSxTQUFTLEdBQUcsTUFBTyxHQUFFLGlGQUFpRixFQUFFLElBQUksRUFBRSxPQUFtaEMsR0FBRywwREFBMEQsR0FBRyxnQkFBZ0IsR0FBRywrRkFBK0YsSUFBSSxJQUFJLEdBQUcsSUFBSSxFQUFFLE1BQU0sR0FBRyxNQUFNLEdBQUcsR0FBRyxHQUFHLEtBQUssR0FBRyxNQUFNLEdBQUcsS0FBSyxHQUFHLFFBQVEsRUFBRSxLQUFLLElBQUksS0FBSyxNQUFNLFVBQVUsSUFBSSxNQUFNLE1BQU0sUUFBUSxPQUFPLElBQUksWUFBWSxJQUFJLEtBQUssV0FBVyxNQUFNLE9BQU8sYUFBYSxPQUFPLFFBQVEsY0FBYyxNQUFNLE9BQU8sYUFBYSxRQUFRLFlBQVksU0FBUyxRQUFRLEdBQUcsU0FBUyxHQUFHLE1BQU0sTUFBTSxFQUFFLGlCQUFpQixJQUFJLEtBQUssNEJBQTRCLFFBQVEsMkJBQTJCLEtBQUssR0FBRywwQ0FBMEMsS0FBSyxHQUFHLG1CQUFtQixNQUFNLEdBQUcsb0JBQW9CLElBQUksR0FBRyxrQkFBa0IsS0FBSyxHQUFHLG1CQUFtQixLQUFLLEdBQUcsNkNBQTZDLE9BQU8sR0FBRyw2Q0FBNkMsTUFBTSxHQUFHLDhDQUF1dEMsSUFBSSxHQUFHLFNBQVMsRUFBRSxHQUFHLEVBQUUsY0FBYyxTQUFTLEdBQUcsTUFBTSxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sTUFBTSxLQUFLLFNBQVMsRUFBRSxHQUFHLEVBQUUsU0FBUyxTQUFTLEdBQUcsTUFBTSxNQUFNLEVBQUUsS0FBSyxFQUFFLElBQUksS0FBSyxFQUFFLE1BQU0sS0FBSyxFQUFFLFdBQVcsRUFBRSxVQUFVLEtBQUssT0FBTyxVQUFVLEVBQUUsV0FBVyxFQUFFLFVBQVUsS0FBSyxRQUFRLElBQUksTUFBTSxNQUFNLEdBQUcsR0FBRyxTQUFTLEdBQUcsS0FBSyxRQUFRLEVBQUUsS0FBSyxLQUFLLEVBQUUsTUFBTSxHQUFHLEtBQUssV0FBVyxHQUFHLEVBQUUsUUFBUSxpQkFBaUIsS0FBSyxXQUFXLEdBQUcsRUFBRSxRQUFRLFdBQVcsS0FBSyxXQUFXLEVBQUUsS0FBSyxJQUFJLEVBQUUsV0FBWSxJQUFJLEdBQUUsRUFBRSxlQUFlLENBQUUsTUFBSyxlQUFlLFNBQVMsR0FBRyxRQUFRLEVBQUUsWUFBWSxFQUFFLEVBQUUsTUFBTSxLQUFLLE9BQU8sRUFBRSxLQUFLLG1CQUFtQixLQUFLLEtBQUksRUFBMi9LLElBQUksUUFBTyxNQUFNLGlNQUFpTSxNQUFNLEtBQUssS0FBSyxXQUFXLE1BQStYLElBQUksSUFBRyxHQUFHLElBQUksR0FBRyxTQUFTLEVBQUUsR0FBRyxHQUFJLEdBQUUsR0FBRyxFQUFFLE9BQU8sSUFBRyxJQUFLLEVBQUUsVUFBVSxHQUFHLEVBQUUsRUFBRyxJQUFJLEdBQUUsR0FBRyxFQUFFLEVBQUcsUUFBTyxJQUFJLEVBQUUsT0FBTyxFQUFFLE9BQU8sZ0JBQWdCLEVBQUUsa0JBQWtCLFNBQVMsR0FBRyxRQUFTLEdBQUUsRUFBRSxHQUFHLEdBQUksR0FBRSxPQUFPLE9BQU8sR0FBRyxLQUFLLElBQUssSUFBRyxFQUFFLElBQUksR0FBSSxLQUFLLEdBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxhQUFhLE9BQU8sRUFBRSxVQUFVLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxPQUFPLE9BQU8sRUFBRSxZQUFZLE1BQU0sRUFBRSxhQUFhLEVBQUUsWUFBWSxHQUFHLGVBQWUsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFJLEdBQUUsS0FBSyxTQUFTLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxHQUFHLEtBQUssR0FBSSxJQUFJLEdBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRyxPQUFPLEdBQUUsT0FBTyxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsT0FBTyxRQUFRLEVBQUUsbUJBQW1CLEdBQUcsTUFBTSxJQUFJLElBQUksR0FBRyxRQUFRLEdBQUcsb0JBQWlLLEtBQUssR0FBRyxJQUFHLEdBQUksS0FBSyxHQUFHLElBQUcsR0FBSSxHQUFHLEVBQUUsU0FBUyxHQUFHLEdBQUksR0FBRSxHQUFHLEVBQUcsT0FBTyxJQUFHLEVBQUUsWUFBWSxHQUFHLEdBQUcsVUFBVSxNQUFPLElBQUcsVUFBVSxPQUFPLFNBQVMsRUFBRSxHQUFHLElBQUksRUFBRSxHQUFHLEdBQUcsTUFBTSxTQUFTLE1BQU0sSUFBSSxTQUFTLGdCQUFnQixNQUFPLEtBQUssSUFBSSxHQUFFLEtBQUssUUFBUyxLQUFJLEVBQUUsT0FBTyxDQUFDLEdBQUksR0FBRSxFQUFFLFFBQVMsSUFBRyxFQUFFLEdBQUcsZ0JBQWlCLEdBQUUsTUFBTSxFQUFFLE9BQU8sS0FBSyxFQUFFLEdBQUcsUUFBUSxDQUFDLElBQUksRUFBRSxTQUFTLE1BQU8sS0FBSyxHQUFFLEVBQUUsY0FBZSxLQUFJLEVBQUUsU0FBUyxHQUFHLEdBQUcsRUFBRSxVQUFVLE1BQU8sR0FBRSxTQUFVLElBQUksR0FBRSxTQUFTLGNBQWMsTUFBTyxPQUFPLEdBQUUsWUFBWSxFQUFFLFdBQVUsSUFBSyxFQUFFLFdBQVcsR0FBSSxJQUFHLEVBQUUsQ0FBQyxHQUFJLEdBQUUsR0FBRyxHQUFHLG1CQUFrQixFQUFHLHFCQUFxQixHQUFHLDRCQUE0QixHQUFHLFdBQVcsRUFBRSxXQUFXLFNBQVMsRUFBRSxVQUFVLE1BQU0sRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLGVBQWdCLEdBQUUsT0FBTyxFQUFFLEVBQUUsZ0JBQWdCLEdBQUcsTUFBTyxJQUFHLEtBQUssS0FBSyxFQUFFLElBQUksR0FBRyxRQUFRLEdBQUcsT0FBTyxRQUFROzs7OztBQ0p6dTJGLE9BQU8sUUFBVSxRQUFROzs7O0FDSTNCLFlBQXFDLFNBQVMsR0FBRSxHQUFHLE1BQU8sT0FBTSxFQUFFLFFBQVMsR0FBRSxHQUFHLE1BQU8sT0FBTSxFQUFFLFFBQVMsR0FBRSxHQUFHLE9BQU0sSUFBSyxFQUFFLFFBQVMsR0FBRSxHQUFHLE1BQU0sZ0JBQWlCLElBQUcsZ0JBQWlCLElBQUcsZ0JBQWlCLElBQUcsaUJBQWtCLEdBQUUsUUFBUyxHQUFFLEdBQUcsTUFBTyxRQUFPLEdBQUcsZ0JBQWlCLEdBQWtDLFFBQVMsR0FBRSxHQUFHLE1BQU0sb0JBQW9CLEVBQUUsS0FBSyxHQUFHLFFBQVMsR0FBRSxHQUFHLEdBQUksR0FBRSxXQUFXLE9BQU8sR0FBSSxPQUFPLElBQUcsR0FBRyxLQUFLLE1BQU0sS0FBSyxHQUFHLFNBQVMsR0FBRyxRQUFTLEdBQUUsR0FBRyxNQUFPLEdBQUUsSUFBSSxrQkFBbUIsR0FBRSxNQUFNLGtCQUFtQixHQUFFLE1BQU0sUUFBUyxHQUFFLEdBQUcsTUFBTyxPQUFNLEVBQUUsR0FBRyxNQUFNLFFBQVEsSUFBSSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsS0FBSyxVQUFVLEVBQUUsS0FBSyxHQUFHLE9BQU8sR0FBRyxRQUFTLEdBQUUsR0FBRyxHQUFJLEdBQUUsV0FBVyxFQUFHLE9BQU8sT0FBTSxHQUFHLEVBQUUsRUFBRSxRQUFTLEdBQUUsRUFBRSxHQUFHLElBQUksR0FBSSxHQUFFLE9BQU8sT0FBTyxNQUFNLEVBQUUsRUFBRSxNQUFNLEtBQUssRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLElBQUksRUFBRSxFQUFFLEtBQUksQ0FBRyxPQUFPLEdBQUUsU0FBUyxHQUFHLE1BQU8sR0FBRSxFQUFFLGdCQUFnQixTQUFTLEdBQUcsTUFBTyxHQUFFLElBQTBDLFFBQVMsR0FBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLE9BQU8sQ0FBQyxHQUFJLEdBQUUsRUFBRSxRQUFRLEVBQUcsSUFBRyxHQUFHLEVBQUUsTUFBTyxHQUFFLE9BQU8sRUFBRSxJQUEwQyxRQUFTLEdBQUUsRUFBRSxHQUFHLE1BQU8sR0FBRSxLQUFLLEVBQUUsR0FBRyxRQUFTLEdBQUUsR0FBRyxHQUFJLEdBQUUsT0FBTyxPQUFPLEtBQU0sT0FBTyxVQUFTLEdBQUcsTUFBTyxHQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsS0FBa2IsUUFBUyxHQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBRSxLQUFJLEdBQUksR0FBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLEdBQUksT0FBTSxHQUFHLEtBQUssRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFHLE9BQU8sR0FBRSxRQUFTLEdBQUUsRUFBRSxHQUFHLElBQUksR0FBSSxLQUFLLEdBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRyxPQUFPLEdBQUUsUUFBUyxHQUFFLEdBQUcsSUFBSSxHQUFJLE1BQUssRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLElBQUksRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLEdBQUksT0FBTyxHQUFFLFFBQVMsR0FBRSxFQUFFLEVBQUUsSUFBNEQsUUFBUyxHQUFFLEVBQUUsR0FBRyxHQUFHLElBQUksRUFBRSxPQUFNLENBQUcsSUFBSSxHQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRyxLQUFJLElBQUksRUFBRSxPQUFPLElBQUksR0FBRyxPQUFPLEtBQUssT0FBTyxFQUFHLEtBQUksR0FBSSxHQUFFLE1BQU0sUUFBUSxHQUFHLEVBQUUsTUFBTSxRQUFRLEVBQUcsSUFBRyxHQUFHLEVBQUUsTUFBTyxHQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxTQUFTLEVBQUUsR0FBRyxNQUFPLEdBQUUsRUFBRSxFQUFFLEtBQU0sSUFBRyxZQUFhLE9BQU0sWUFBYSxNQUFLLE1BQU8sR0FBRSxZQUFZLEVBQUUsU0FBVSxJQUFHLEdBQUcsRUFBRSxPQUFNLENBQUcsSUFBSSxHQUFFLE9BQU8sS0FBSyxHQUFHLEVBQUUsT0FBTyxLQUFLLEVBQUcsT0FBTyxHQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxTQUFTLEdBQUcsTUFBTyxHQUFFLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxHQUFHLE9BQU0sR0FBSSxRQUFTLEdBQUUsRUFBRSxHQUFHLElBQUksR0FBSSxHQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sSUFBSSxHQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsTUFBTyxFQUFFLFFBQU8sRUFBRSxRQUFTLEdBQUUsR0FBRyxHQUFJLElBQUUsQ0FBRyxPQUFPLFlBQVcsSUFBSSxHQUFFLEVBQUcsRUFBRSxNQUFNLEtBQUssYUFBaWpCLFFBQVMsR0FBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLE9BQU8sZUFBZSxFQUFFLEdBQUcsTUFBTSxFQUFFLGFBQWEsRUFBRSxVQUFTLEVBQUcsY0FBYSxJQUF5OEIsUUFBUyxJQUFHLEdBQUcsTUFBTSxrQkFBbUIsSUFBRyxjQUFjLEtBQUssRUFBRSxZQUE0c0IsUUFBUyxJQUFHLEdBQUcsR0FBRyxLQUFLLEdBQUcsR0FBRyxPQUFPLEVBQUUsUUFBUyxNQUFLLEdBQUcsTUFBTSxHQUFHLE9BQU8sR0FBRyxHQUFHLE9BQU8sR0FBeXBCLFFBQVMsSUFBRyxHQUFHLE1BQU8sSUFBSSxRQUFHLE9BQU8sT0FBTyxHQUFPLE9BQU8sSUFBSSxRQUFTLElBQUcsR0FBRyxHQUFJLEdBQUUsR0FBSSxJQUFHLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsU0FBUyxRQUFRLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsaUJBQWlCLEVBQUUsYUFBYyxPQUFPLEdBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVMsRUFBRyxFQUE0WixRQUFTLElBQUcsR0FBRyxHQUFHLEVBQXlQLFFBQVMsSUFBRyxFQUFFLEdBQUcsR0FBSSxFQUFFLElBQUcsRUFBRSxNQUFNLFlBQWEsS0FBSSxNQUFPLEdBQUUsRUFBRSxXQUFXLEVBQUUsaUJBQWtCLElBQUcsRUFBRSxFQUFFLE9BQU8sS0FBSyxNQUFNLE1BQU0sUUFBUSxJQUFJLEVBQUUsS0FBSyxPQUFPLGFBQWEsS0FBSyxFQUFFLFNBQVMsRUFBRSxHQUFJLElBQUcsSUFBSSxHQUFHLEdBQUcsRUFBRSxVQUFVLEVBQUUsUUFBUyxJQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFJLEdBQUUsR0FBSSxJQUFHLEVBQUUsT0FBTyx5QkFBeUIsRUFBRSxFQUFHLEtBQUksSUFBRyxJQUFLLEVBQUUsYUFBYSxDQUFDLEdBQUksR0FBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFJLEtBQUksR0FBRyxJQUFJLFVBQVUsU0FBUyxFQUFFLEVBQUUsR0FBSSxJQUFJLElBQUcsR0FBRyxHQUFHLEVBQUcsUUFBTyxlQUFlLEVBQUUsR0FBRyxZQUFXLEVBQUcsY0FBYSxFQUFHLElBQUksV0FBVyxHQUFJLEdBQUUsRUFBRSxFQUFFLEtBQUssR0FBRyxDQUFFLE9BQU8sSUFBRyxTQUFTLEVBQUUsU0FBUyxJQUFJLEVBQUUsSUFBSSxTQUFTLE1BQU0sUUFBUSxJQUFJLFFBQVMsR0FBRSxHQUFHLElBQUksR0FBSSxPQUFFLEdBQU8sRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLE9BQU8sSUFBSSxTQUFTLE1BQU0sUUFBUSxJQUFJLEVBQUUsSUFBSSxLQUFLLEdBQUcsSUFBSSxTQUFTLEdBQUcsR0FBSSxHQUFFLEVBQUUsRUFBRSxLQUFLLEdBQUcsQ0FBRSxLQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLElBQUksRUFBRSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsR0FBRyxHQUFHLEVBQUUsY0FBYyxRQUFTLElBQUcsRUFBRSxFQUFFLEdBQUcsR0FBRyxNQUFNLFFBQVEsSUFBSSxFQUFFLEdBQUcsTUFBTyxHQUFFLE9BQU8sS0FBSyxJQUFJLEVBQUUsT0FBTyxHQUFHLEVBQUUsT0FBTyxFQUFFLEVBQUUsR0FBRyxDQUFFLElBQUcsSUFBSyxNQUFLLElBQUssUUFBTyxXQUFXLE1BQU8sR0FBRSxHQUFHLEVBQUUsQ0FBRSxJQUFJLEdBQUUsRUFBRSxNQUFPLE9BQU8sR0FBRSxRQUFRLEdBQUcsRUFBRSxRQUFRLEVBQUUsR0FBRyxHQUFHLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxJQUFJLFNBQVMsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLFFBQVMsSUFBRyxFQUFFLEdBQUcsR0FBRyxNQUFNLFFBQVEsSUFBSSxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLEdBQUksR0FBRSxFQUFFLE1BQU8sR0FBRSxRQUFRLEdBQUcsRUFBRSxTQUFTLEVBQUUsRUFBRSxXQUFZLEdBQUUsR0FBRyxHQUFHLEVBQUUsSUFBSSxXQUErTSxRQUFTLElBQUcsRUFBRSxHQUFHLElBQUksRUFBRSxNQUFPLEVBQUUsS0FBSSxHQUFJLEdBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxRQUFRLFFBQVEsR0FBRyxPQUFPLEtBQUssR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sSUFBSSxZQUFZLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLElBQUksR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLEdBQUcsRUFBRSxHQUFHLEdBQUcsRUFBRSxFQUFFLEdBQUksT0FBTyxHQUFFLFFBQVMsSUFBRyxFQUFFLEVBQUUsR0FBRyxNQUFPLEdBQUUsV0FBVyxHQUFJLEdBQUUsa0JBQW1CLEdBQUUsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEVBQUUsa0JBQW1CLEdBQUUsRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFFLE9BQU8sR0FBRSxHQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsRUFBRSxXQUFXLE1BQU8sSUFBRyxrQkFBbUIsR0FBRSxFQUFFLEtBQUssS0FBSyxNQUFNLEVBQUUsa0JBQW1CLEdBQUUsRUFBRSxLQUFLLEtBQUssTUFBTSxJQUFJLEVBQUUsRUFBRSxRQUFTLElBQUcsRUFBRSxHQUFHLEdBQUksR0FBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLEdBQUcsTUFBTSxRQUFRLEdBQUcsR0FBRyxHQUFHLENBQUUsT0FBTyxHQUFFLFNBQVMsR0FBRyxJQUFJLEdBQUksTUFBSyxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sS0FBSyxJQUFJLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsR0FBSSxPQUFPLElBQUcsR0FBRyxFQUFFLFFBQVMsSUFBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEdBQUksR0FBRSxPQUFPLE9BQU8sR0FBRyxLQUFNLE9BQU8sR0FBRSxFQUFFLEVBQUUsR0FBRyxFQUFza0IsUUFBUyxJQUFHLEVBQUUsRUFBRSxHQUEwdEIsUUFBUyxHQUFFLEdBQUcsR0FBSSxHQUFFLEdBQUcsSUFBSSxFQUFHLEdBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUF4d0IsR0FBRyxrQkFBbUIsS0FBSSxFQUFFLEVBQUUsU0FBUyxTQUFTLEVBQUUsR0FBRyxHQUFJLEdBQUUsRUFBRSxLQUFNLElBQUcsRUFBRSxDQUFDLEdBQUksR0FBRSxFQUFFLElBQUssSUFBRyxNQUFNLFFBQVEsR0FBRyxJQUFJLEVBQUUsRUFBRSxPQUFPLEtBQUssaUJBQWlCLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxLQUFLLEtBQUssV0FBWSxJQUFHLEVBQUUsR0FBRyxJQUFJLEdBQUksS0FBSyxHQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxJQUFJLEVBQUUsR0FBRyxHQUFHLEtBQUssRUFBRyxHQUFFLE1BQU0sSUFBSSxHQUFHLFNBQVMsRUFBRSxHQUFHLEdBQUksR0FBRSxFQUFFLE1BQU8sSUFBRyxFQUFFLENBQUMsR0FBSSxHQUFFLEVBQUUsU0FBVSxJQUFHLE1BQU0sUUFBUSxHQUFHLElBQUksR0FBSSxHQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sSUFBSSxFQUFFLEVBQUUsS0FBSyxLQUFLLEVBQUUsUUFBUyxJQUFHLEVBQUUsR0FBRyxJQUFJLEdBQUksS0FBSyxHQUFFLENBQUMsR0FBSSxHQUFFLEVBQUUsRUFBRyxHQUFFLEdBQUcsRUFBRSxHQUFHLEdBQUcsS0FBSyxHQUFHLElBQUksS0FBSyxNQUFNLEdBQUcsU0FBUyxHQUFHLEdBQUksR0FBRSxFQUFFLFVBQVcsSUFBRyxFQUFFLElBQUksR0FBSSxLQUFLLEdBQUUsQ0FBQyxHQUFJLEdBQUUsRUFBRSxFQUFHLG1CQUFtQixLQUFJLEVBQUUsSUFBSSxLQUFLLEVBQUUsT0FBTyxNQUFNLElBQUksRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxFQUFFLFFBQVEsSUFBSSxFQUFFLFFBQVEsSUFBSSxHQUFJLEdBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxPQUFPLEVBQUUsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEVBQUUsT0FBTyxHQUFHLEVBQUcsSUFBSSxHQUFFLElBQUssS0FBSSxJQUFLLEdBQUUsRUFBRSxFQUFHLEtBQUksSUFBSyxHQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBdUQsT0FBTyxHQUFFLFFBQVMsSUFBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEdBQUcsZ0JBQWlCLEdBQUUsQ0FBQyxHQUFJLEdBQUUsRUFBRSxFQUFHLElBQUcsRUFBRSxFQUFFLEdBQUcsTUFBTyxHQUFFLEVBQUcsSUFBSSxHQUFFLEVBQUUsRUFBRyxJQUFHLEVBQUUsRUFBRSxHQUFHLE1BQU8sR0FBRSxFQUFHLElBQUksR0FBRSxFQUFFLEVBQUcsT0FBTyxHQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksUUFBUyxJQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBSSxHQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxRQUFRLEVBQUUsS0FBTSxJQUFHLEdBQUcsRUFBRSxHQUFHLElBQUksRUFBRSxFQUFFLFdBQVcsR0FBRSxNQUFRLElBQUcsS0FBSyxHQUFHLElBQUksRUFBRSxHQUFHLENBQUMsR0FBSSxHQUFFLEdBQUcsT0FBTyxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsS0FBSyxHQUFFLEdBQUksT0FBRyxLQUFTLEVBQUUsQ0FBQyxFQUFFLFNBQVMsRUFBRSxFQUFFLEdBQUcsR0FBSSxFQUFFLEVBQUUsV0FBUixDQUEwQixHQUFJLEdBQUUsRUFBRSxPQUFRLE9BQUcsSUFBRyxFQUFFLFNBQVMsZUFBVyxLQUFTLEVBQUUsU0FBUyxVQUFVLFFBQUksS0FBUyxFQUFFLE9BQU8sR0FBVSxFQUFFLE9BQU8sR0FBUyxrQkFBbUIsSUFBRyxhQUFhLEdBQUcsRUFBRSxNQUFNLEVBQUUsS0FBSyxHQUFHLElBQUcsRUFBRSxFQUFFLEVBQUcsSUFBSSxHQUFFLEVBQUcsS0FBRyxHQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsTUFBTyxHQUFFLFFBQVMsSUFBRyxHQUFHLEdBQUksR0FBRSxHQUFHLEVBQUUsV0FBVyxNQUFNLHFCQUFzQixPQUFPLEdBQUUsRUFBRSxHQUFHLEdBQUcsUUFBUyxJQUFHLEVBQUUsR0FBRyxNQUFPLElBQUcsS0FBSyxHQUFHLEdBQUcsUUFBUyxJQUFHLEVBQUUsR0FBRyxJQUFJLE1BQU0sUUFBUSxHQUFHLE1BQU8sSUFBRyxFQUFFLEdBQUcsR0FBRyxDQUFFLEtBQUksR0FBSSxHQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLElBQUksR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLE1BQU8sRUFBRSxRQUFPLEVBQUUsUUFBUyxJQUFHLEVBQUUsRUFBRSxHQUFHLElBQUssS0FBSSxHQUFHLEVBQUUsSUFBSSxHQUFJLEdBQUUsRUFBRSxFQUFFLEVBQUUsU0FBUyxDQUFDLEdBQUksR0FBRSxFQUFFLFNBQVMsYUFBYyxJQUFHLEVBQUUsSUFBSSxHQUFJLEdBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxJQUFJLElBQUksSUFBRyxJQUFLLEVBQUUsR0FBRyxLQUFLLEVBQUUsRUFBRSxFQUFFLEdBQUcsT0FBTyxNQUFNLEdBQUcsR0FBRyxFQUFFLEVBQUUsdUJBQXVCLEdBQUcsRUFBRSxFQUFFLEdBQUcsUUFBUSxNQUFNLFFBQVMsSUFBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBSSxFQUFFLE1BQUssRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxLQUFLLE1BQU0sRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxNQUFNLFNBQVMsR0FBRyxNQUFPLElBQUcsRUFBRSxFQUFFLEVBQUUsc0JBQXNCLEVBQUUsVUFBUyxHQUFJLE1BQU0sR0FBRyxHQUFHLEVBQUUsRUFBRSxHQUFHLE1BQU8sR0FBRSxRQUFTLElBQUcsRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLGFBQWEsSUFBSSxNQUFPLEdBQUUsYUFBYSxLQUFLLEtBQUssRUFBRSxFQUFFLEdBQUcsTUFBTSxHQUFHLElBQUksR0FBRyxHQUFHLEVBQUUsS0FBSyx1QkFBdUIsR0FBRyxFQUFFLEVBQUUsR0FBRyxRQUFTLElBQUcsRUFBRSxFQUFFLEdBQUcsSUFBSSxJQUFJLEdBQUcsbUJBQW9CLFNBQVEsS0FBTSxFQUFFLFNBQVEsTUFBTSxHQUE0QixRQUFTLE1BQUssSUFBRyxDQUFHLElBQUksR0FBRSxHQUFHLE1BQU0sRUFBRyxJQUFHLE9BQU8sQ0FBRSxLQUFJLEdBQUksR0FBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLElBQUksRUFBRSxLQUFpaUIsUUFBUyxJQUFHLEVBQUUsR0FBRyxHQUFJLEVBQUUsSUFBRyxHQUFHLEtBQUssV0FBVyxHQUFHLEVBQUUsSUFBSSxFQUFFLEtBQUssR0FBRyxNQUFNLEdBQUcsR0FBRyxFQUFFLEVBQUUsZ0JBQWlCLElBQUcsRUFBRSxLQUFLLEtBQUssSUFBRyxFQUFHLE9BQU8sR0FBRyxtQkFBb0IsU0FBUSxNQUFPLElBQUksU0FBUSxTQUFTLEdBQUcsRUFBRSxJQUFrQixRQUFTLElBQUcsSUFBSSxRQUFTLEdBQUUsRUFBRSxHQUFHLEdBQUksR0FBRSxFQUFNLEVBQUUsTUFBTSxRQUFRLEVBQUcsT0FBSSxJQUFJLEVBQUUsSUFBSSxPQUFPLFNBQVMsSUFBSSxZQUFhLEtBQS9DLENBQXlELEdBQUcsRUFBRSxPQUFPLENBQUMsR0FBSSxHQUFFLEVBQUUsT0FBTyxJQUFJLEVBQUcsSUFBRyxFQUFFLElBQUksR0FBRyxNQUFPLEdBQUUsSUFBSSxHQUFHLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxPQUFPLEtBQUssRUFBRSxFQUFFLEdBQUcsT0FBUSxLQUFJLEVBQUUsT0FBTyxLQUFLLEdBQUcsRUFBRSxFQUFFLE9BQU8sS0FBSyxFQUFFLEVBQUUsRUFBRSxJQUFJLEtBQUksRUFBRSxJQUFJLEdBQUcsUUFBMEwsUUFBUyxJQUFHLEVBQUUsR0FBRyxRQUFTLEtBQUksR0FBSSxHQUFFLFVBQVUsRUFBRSxFQUFFLEdBQUksS0FBSSxNQUFNLFFBQVEsR0FBRyxNQUFPLElBQUcsRUFBRSxLQUFLLFVBQVUsRUFBRSxlQUFnQixLQUFJLEdBQUksR0FBRSxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLElBQUksR0FBRyxFQUFFLEdBQUcsS0FBSyxFQUFFLEVBQUUsZ0JBQWdCLE1BQU8sR0FBRSxJQUFJLEVBQUUsRUFBRSxRQUFTLElBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBSSxHQUFFLEVBQUUsRUFBRSxDQUFFLEtBQUksSUFBSyxHQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLFFBQVEsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFLFVBQVUsRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsU0FBUyxJQUFJLElBQUksRUFBRSxJQUFJLEVBQUUsRUFBRSxHQUFHLEdBQUksS0FBSSxJQUFLLEdBQUUsRUFBRSxFQUFFLEtBQUssR0FBRyxFQUFFLEdBQUcsSUFBSSxLQUFLLEVBQUUsR0FBRyxFQUFFLFNBQVMsUUFBUyxJQUFHLEVBQUUsRUFBRSxHQUF1RSxRQUFTLEtBQUksRUFBRSxNQUFNLEtBQUssV0FBVyxFQUFFLEVBQUUsSUFBSSxHQUFqSCxHQUFJLEVBQUUsYUFBYSxNQUFLLEVBQUUsRUFBRSxLQUFLLE9BQU8sRUFBRSxLQUFLLFNBQVUsSUFBSSxHQUFFLEVBQUUsRUFBbUQsR0FBRSxHQUFHLEVBQUUsSUFBSSxJQUFJLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxTQUFTLEVBQUUsR0FBRyxJQUFJLEtBQUssR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsUUFBTyxFQUFHLEVBQUUsR0FBRyxFQUFFLFFBQVMsSUFBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsRUFBRSxHQUFHLE1BQU8sR0FBRSxHQUFHLEVBQUUsR0FBRyxTQUFVLEdBQUUsSUFBRyxDQUFHLElBQUcsRUFBRSxFQUFFLEdBQUcsTUFBTyxHQUFFLEdBQUcsRUFBRSxHQUFHLFNBQVUsR0FBRSxJQUFHLEVBQUcsT0FBTSxFQUFHLFFBQVMsSUFBRyxHQUFHLE1BQU8sR0FBRSxJQUFJLEdBQUcsSUFBSSxNQUFNLFFBQVEsR0FBRyxRQUFTLEdBQUUsRUFBRSxHQUFHLEdBQWEsR0FBRSxFQUFFLEVBQUUsRUFBZixJQUFpQixLQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxJQUFJLEVBQUUsRUFBRSxFQUFFLEtBQUssaUJBQWtCLEtBQUksRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsR0FBRyxNQUFNLFFBQVEsR0FBRyxFQUFFLE9BQU8sSUFBSSxJQUFJLEVBQUUsRUFBRSxHQUFHLEdBQUcsSUFBSSxJQUFJLElBQUksS0FBSyxHQUFHLEtBQUssRUFBRSxHQUFHLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxNQUFNLEVBQUUsU0FBUyxFQUFFLEtBQUssTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxFQUFFLEtBQUssR0FBRyxLQUFLLEdBQUcsRUFBRSxLQUFLLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxFQUFFLFdBQVcsRUFBRSxFQUFFLE1BQU0sRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsSUFBSSxVQUFVLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxLQUFLLElBQUssT0FBTyxJQUFHLE9BQUcsR0FBTyxRQUFTLElBQUcsR0FBRyxNQUFPLEdBQUUsSUFBSSxFQUFFLEVBQUUsUUFBTyxJQUFLLEVBQUUsVUFBVSxRQUFTLElBQUcsRUFBRSxHQUFHLEdBQUcsRUFBRSxDQUFDLElBQUksR0FBSSxHQUFFLE9BQU8sT0FBTyxNQUFNLEVBQUUsR0FBRyxRQUFRLFFBQVEsR0FBRyxPQUFPLEtBQUssR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sSUFBSSxDQUFDLEdBQUksR0FBRSxFQUFFLEVBQUcsSUFBRyxXQUFXLEVBQUUsQ0FBQyxJQUFJLEdBQUksR0FBRSxFQUFFLEdBQUcsS0FBSyxFQUFFLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxXQUFXLEVBQUUsRUFBRSxVQUFVLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxVQUFVLEVBQUcsT0FBTSxFQUFFLEVBQUUsUUFBUSxJQUFJLEdBQUcsV0FBWSxHQUFFLEdBQUcsQ0FBQyxHQUFJLEdBQUUsRUFBRSxHQUFHLE9BQVEsR0FBRSxHQUFHLGtCQUFtQixHQUFFLEVBQUUsS0FBSyxHQUFHLElBQUksTUFBTyxJQUFHLFFBQVMsSUFBRyxFQUFFLEdBQUcsSUFBSSxJQUFJLEVBQUUsT0FBTyxRQUFTLEtBQUksR0FBSSxNQUFLLEVBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsSUFBSSxDQUFDLEdBQUksR0FBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLElBQUssSUFBRyxHQUFHLEVBQUUsT0FBTyxFQUFFLE1BQU0sWUFBYSxHQUFFLE1BQU0sS0FBSyxFQUFFLFVBQVUsR0FBRyxFQUFFLFlBQVksSUFBSSxHQUFHLE1BQU0sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLGFBQWEsS0FBSyxPQUFPLENBQUMsR0FBSSxHQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsS0FBSyxFQUFFLE1BQU8sY0FBYSxFQUFFLElBQUksRUFBRSxLQUFLLE1BQU0sRUFBRSxFQUFFLGNBQWMsRUFBRSxLQUFLLElBQUksSUFBSSxHQUFJLEtBQUssR0FBRSxFQUFFLEdBQUcsTUFBTSxXQUFZLEdBQUUsRUFBRyxPQUFPLEdBQUUsUUFBUyxJQUFHLEdBQUcsTUFBTyxHQUFFLFlBQVksRUFBRSxjQUFjLE1BQU0sRUFBRSxLQUFLLFFBQVMsSUFBRyxFQUFFLEVBQUUsR0FBRyxHQUFJLEdBQUUsRUFBRSxPQUFPLEtBQUssR0FBRyxPQUFPLEVBQUUsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLEVBQUUsR0FBRyxFQUFFLElBQUssSUFBRyxFQUFFLENBQUMsR0FBRyxFQUFFLFlBQVksTUFBTyxHQUFFLFdBQVksSUFBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLElBQUksRUFBRSxPQUFPLElBQUksRUFBRSxXQUFXLE1BQU8sRUFBRSxLQUFJLEdBQUksS0FBSyxNQUFLLEVBQUUsRUFBRSxJQUFJLE1BQU0sRUFBRSxLQUFLLEVBQUUsR0FBRyxHQUFHLEVBQUUsRUFBRSxFQUFFLFNBQVUsS0FBSyxLQUFJLEdBQUksS0FBSyxHQUFFLElBQUssS0FBSSxFQUFFLEdBQUcsR0FBRyxFQUFFLEdBQUksT0FBTyxJQUFHLE9BQU8sYUFBYSxLQUFLLEVBQUUsWUFBWSxHQUFHLEVBQUUsRUFBRSxVQUFVLEdBQUcsRUFBRSxFQUFFLE9BQU8sR0FBRyxFQUFFLEVBQUUsYUFBYSxHQUFHLEVBQUUsUUFBUyxJQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUksR0FBRSxXQUFXLEdBQUksR0FBRSxVQUFVLE9BQU8sRUFBRSxNQUFNLEtBQUssV0FBVyxLQUFNLFFBQU8sRUFBRSxHQUFHLGdCQUFpQixLQUFJLE1BQU0sUUFBUSxJQUFJLEdBQUcsR0FBRyxNQUFNLElBQUksRUFBRSxRQUFRLElBQUksRUFBRSxRQUFRLEVBQUUsR0FBRyxlQUFXLEdBQU8sRUFBRyxPQUFPLEdBQUUsT0FBTyxPQUFPLGVBQWUsRUFBRSxHQUFHLElBQUksRUFBRSxZQUFXLEVBQUcsY0FBYSxJQUFLLEVBQUUsUUFBUyxJQUFHLEVBQUUsR0FBRyxNQUFPLFlBQVcsTUFBTyxHQUFFLElBQUksUUFBUyxJQUFHLEVBQUUsR0FBRyxHQUFJLEdBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBRSxJQUFHLE1BQU0sUUFBUSxJQUFJLGdCQUFpQixHQUFFLElBQUksRUFBRSxHQUFJLE9BQU0sRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsT0FBUSxJQUFHLGdCQUFpQixHQUFFLElBQUksRUFBRSxHQUFJLE9BQU0sR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLE9BQVEsSUFBRyxFQUFFLEdBQUcsR0FBRyxJQUFJLEVBQUUsT0FBTyxVQUFVLENBQUMsSUFBSyxLQUFJLEdBQUksR0FBRSxFQUFFLE9BQU8sWUFBWSxFQUFFLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLEVBQUUsV0FBWSxLQUFJLEVBQUUsT0FBTyxLQUFLLEdBQUcsRUFBRSxHQUFJLE9BQU0sRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFHLE9BQU8sR0FBRSxLQUFLLE1BQU0sRUFBRSxVQUFTLEVBQUcsRUFBRSxRQUFTLElBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFJLEdBQUUsRUFBRSxLQUFLLGFBQWEsRUFBRyxJQUFHLEVBQUUsTUFBTSxJQUFJLEVBQUUsRUFBRSxLQUFLLEdBQUcsSUFBSSxFQUFFLEVBQUUsSUFBSSxHQUFHLEVBQUUsS0FBSyxPQUFPLElBQUksQ0FBRSxJQUFJLEdBQUUsR0FBRyxFQUFFLElBQUssT0FBTyxHQUFFLEtBQUssZUFBZSxZQUFZLEtBQUssR0FBRyxHQUFHLEVBQUUsUUFBUyxJQUFHLEdBQUcsTUFBTyxJQUFHLEtBQUssU0FBUyxVQUFVLElBQUksRUFBRSxRQUFTLElBQUcsRUFBRSxHQUFHLE1BQU8sT0FBTSxRQUFRLElBQUksSUFBSSxFQUFFLFFBQVEsR0FBRyxJQUFJLEVBQUUsUUFBUyxJQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFJLEdBQUUsRUFBRSxTQUFTLElBQUksQ0FBRSxPQUFPLElBQUcsSUFBSSxFQUFFLFNBQVMsR0FBRyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxLQUFLLE1BQUUsR0FBTyxRQUFTLElBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEdBQUcsR0FBSyxFQUFFLEdBQUcsQ0FBQyxHQUFJLEVBQUUsT0FBTSxRQUFRLEtBQUssRUFBRSxFQUFFLEdBQWdSLEtBQUksR0FBSSxLQUFLLElBQW5SLFNBQVMsR0FBRyxHQUFHLFVBQVUsR0FBRyxVQUFVLEdBQUcsRUFBRSxHQUFHLEVBQUUsTUFBTSxDQUFDLEdBQUksR0FBRSxFQUFFLE9BQU8sRUFBRSxNQUFNLElBQUssR0FBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLEVBQUUsR0FBRyxFQUFFLFdBQVcsRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFFLFVBQVUsR0FBSSxHQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRyxLQUFLLElBQUcsSUFBSyxLQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsS0FBSyxFQUFFLEtBQUssRUFBRSxRQUFRLFVBQVUsR0FBRyxTQUFTLEdBQUcsRUFBRSxHQUFHLE1BQXVCLEdBQVEsTUFBTyxHQUFFLFFBQVMsSUFBRyxFQUFFLEdBQUcsR0FBSSxHQUFFLEtBQUssZUFBZSxLQUFLLGlCQUFpQixFQUFFLEVBQUUsRUFBRyxPQUFPLEtBQUksRUFBRSxHQUFHLEdBQUcsRUFBRSxFQUFFLEdBQUcsS0FBSyxTQUFTLGdCQUFnQixHQUFHLEtBQUssS0FBSyxhQUFhLEtBQUssTUFBTSxhQUFhLEdBQUUsR0FBSSxHQUFHLFFBQVMsSUFBRyxFQUFFLEVBQUUsR0FBRyxNQUFPLElBQUcsRUFBRSxXQUFXLEdBQUcsRUFBRSxJQUFJLEVBQUUsS0FBSSxHQUFJLEVBQUUsUUFBUyxJQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsTUFBTSxRQUFRLEdBQUcsSUFBSSxHQUFJLEdBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxJQUFJLEVBQUUsSUFBSSxnQkFBaUIsR0FBRSxJQUFJLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLE9BQVEsSUFBRyxFQUFFLEVBQUUsR0FBRyxRQUFTLElBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxVQUFTLEVBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxPQUFPLEVBQUUsUUFBUyxJQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUssRUFBRSxHQUFHLENBQUMsR0FBSSxHQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsS0FBSyxFQUFFLE1BQU8sS0FBSSxHQUFJLEtBQUssR0FBRSxDQUFDLEdBQUksR0FBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUcsR0FBRSxHQUFHLEtBQUssT0FBTyxFQUFFLEdBQUcsR0FBUSxNQUFPLEdBQUUsUUFBUyxJQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxJQUFJLFNBQVMsRUFBRyxLQUFJLEdBQUksR0FBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLElBQUksQ0FBQyxHQUFJLEdBQUUsRUFBRSxFQUFHLE9BQU0sUUFBUSxHQUFHLEdBQUcsRUFBRSxFQUFFLEdBQUcsSUFBSSxFQUFFLFFBQVEsRUFBRSxHQUFHLE9BQU0sR0FBSSxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksTUFBTyxLQUFJLEVBQUUsS0FBSyxHQUFHLEVBQUUsUUFBUyxJQUFHLEVBQUUsR0FBRyxJQUFJLEdBQUksR0FBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLEdBQUcsRUFBRSxDQUFDLEdBQUksR0FBRSxFQUFFLEVBQUcsaUJBQWlCLElBQUcsSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsSUFBSSxNQUFPLEdBQUUsUUFBUyxJQUFHLEVBQUUsR0FBRyxNQUFNLGdCQUFpQixHQUFFLEVBQUUsRUFBRSxFQUFFLFFBQVMsSUFBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLFFBQVMsSUFBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBSSxHQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsT0FBUSxHQUFFLEVBQUUsU0FBUyxFQUFFLE9BQU8sT0FBTyxJQUFJLFVBQVUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLFVBQVcsSUFBSSxHQUFFLEVBQUUsRUFBRSxXQUFXLEdBQUcsQ0FBRSxNQUFLLEtBQUssRUFBRSxLQUFLLE1BQU0sRUFBRSxLQUFLLFNBQVMsRUFBRSxLQUFLLE9BQU8sRUFBRSxLQUFLLFVBQVUsRUFBRSxJQUFJLEVBQUUsS0FBSyxXQUFXLEdBQUcsRUFBRSxPQUFPLEdBQUcsS0FBSyxNQUFNLFdBQVcsTUFBTyxHQUFFLFFBQVEsR0FBRyxFQUFFLFlBQVksRUFBRSxPQUFPLEdBQUcsRUFBRSxJQUFJLEVBQUUsUUFBUSxPQUFPLGVBQWUsS0FBSyxlQUFlLFlBQVcsRUFBRyxJQUFJLFdBQVcsTUFBTyxJQUFHLEVBQUUsWUFBWSxLQUFLLFlBQVksSUFBSSxLQUFLLFNBQVMsRUFBRSxLQUFLLE9BQU8sS0FBSyxRQUFRLEtBQUssYUFBYSxHQUFHLEVBQUUsWUFBWSxLQUFLLFNBQVMsRUFBRSxTQUFTLEtBQUssR0FBRyxTQUFTLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBSSxHQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUcsT0FBTyxLQUFJLE1BQU0sUUFBUSxLQUFLLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxVQUFVLEdBQUcsR0FBRyxLQUFLLEdBQUcsU0FBUyxFQUFFLEVBQUUsRUFBRSxHQUFHLE1BQU8sSUFBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsSUFBSSxRQUFTLElBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEdBQUksR0FBRSxHQUFHLEVBQUcsT0FBTyxHQUFFLFVBQVUsRUFBRSxFQUFFLFVBQVUsRUFBRSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsVUFBVSxLQUFLLEVBQUUsTUFBTSxFQUFFLFFBQVMsSUFBRyxFQUFFLEdBQUcsSUFBSSxHQUFJLEtBQUssR0FBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEdBQXlrRCxRQUFTLElBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLElBQUksRUFBRSxHQUFHLENBQUMsR0FBSSxHQUFFLEVBQUUsU0FBUyxLQUFNLElBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRSxPQUFPLElBQUksa0JBQW1CLEdBQUUsQ0FBQyxHQUFJLEVBQUUsSUFBRyxFQUFFLEVBQUUsVUFBTSxNQUFVLEVBQUUsU0FBUyxFQUFFLEdBQUcsR0FBRyxFQUFFLEVBQUUsUUFBUSxFQUFFLEVBQUUsV0FBVyxNQUFPLEdBQUUsU0FBVSxJQUFHLEVBQUUsRUFBRSxVQUFVLE1BQU8sR0FBRSxRQUFTLElBQUksR0FBRSxFQUE4RCxJQUEzRCxHQUFHLEVBQUUsRUFBRSxVQUFVLElBQUksRUFBRSxPQUFPLFFBQVEsSUFBSSxFQUFFLE9BQU8sS0FBSyxHQUFNLEVBQUUsRUFBRSxVQUFVLEVBQUUsRUFBRSxhQUFhLE1BQU8sR0FBRSxXQUFZLElBQUcsSUFBSSxFQUFFLEVBQUUsUUFBUSxDQUFDLEdBQUksR0FBRSxFQUFFLFFBQVEsR0FBRyxHQUFFLEVBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSyxHQUFFLElBQUksaUJBQWlCLFdBQVcsTUFBTyxHQUFFLEVBQUUsSUFBSyxJQUFJLEdBQUUsU0FBUyxHQUFHLElBQUksR0FBSSxHQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLElBQUksRUFBRSxHQUFHLGNBQWUsS0FBSSxFQUFFLE9BQU8sRUFBRSxPQUFPLElBQUksYUFBYSxHQUFHLEVBQUUsTUFBTSxPQUFPLElBQUksYUFBYSxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsU0FBUyxHQUFHLEVBQUUsU0FBUyxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsT0FBTyxFQUFFLEdBQUUsS0FBTSxFQUFFLEVBQUUsU0FBUyxHQUFHLEVBQUUsRUFBRSxhQUFhLEVBQUUsT0FBTSxFQUFHLEdBQUUsTUFBTyxFQUFFLEVBQUUsRUFBRSxFQUFHLE9BQU8sR0FBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsRUFBRSxhQUFhLEVBQUUsVUFBVSxLQUFLLEVBQUUsR0FBRyxFQUFFLEVBQUUsU0FBUyxFQUFFLFVBQVUsR0FBRyxFQUFFLE1BQU0sSUFBSSxFQUFFLEVBQUUsV0FBVyxFQUFFLFlBQVksR0FBRyxFQUFFLFFBQVEsR0FBRyxJQUFJLEVBQUUsTUFBTSxFQUFFLFNBQVEsRUFBRyxFQUFFLFdBQVcsV0FBVyxFQUFFLEtBQUssRUFBRSxFQUFFLFdBQVcsRUFBRSxFQUFFLFNBQVMsRUFBRSxTQUFRLEVBQUcsR0FBRSxLQUFNLEVBQUUsT0FBTyxNQUFNLEVBQUUsRUFBRSxXQUFXLEVBQUUsV0FBVyxXQUFXLEVBQUUsS0FBSyxFQUFFLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxZQUFZLEdBQUUsRUFBRyxFQUFFLFFBQVEsRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLEVBQUUsSUFBSSxNQUFPLFVBQVMsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEdBQUksR0FBRSxJQUFLLE9BQU8sR0FBRSxhQUFhLEVBQUUsRUFBRSxXQUFXLEtBQUssRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLElBQUksR0FBRyxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRyxHQUFFLE1BQU0sR0FBRyxHQUFHLEVBQUUsRUFBRSxRQUFRLFNBQVMsRUFBRSxHQUFHLEdBQUksR0FBRSxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sUUFBUSxFQUFFLEVBQUUsT0FBTyxFQUFFLE1BQU0sT0FBTyxTQUFTLEVBQUUsUUFBUSxFQUFFLFdBQVcsR0FBRyxFQUFFLE1BQU0sS0FBTSxJQUFJLEdBQUUsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsTUFBTSxRQUFTLEdBQUUsSUFBSSxNQUFNLFFBQVEsSUFBSSxJQUFJLEVBQUUsUUFBUSxHQUFHLElBQUksS0FBSyxFQUFFLElBQUksR0FBRyxPQUFPLElBQUksRUFBRSxHQUFHLEdBQUcsRUFBRSxRQUFRLEVBQUcsSUFBSSxHQUFFLFNBQVMsRUFBRSxFQUFFLEdBQUcsR0FBSSxHQUFFLEVBQUUsUUFBUSxLQUFNLEtBQUksRUFBRSxHQUFHLENBQUMsR0FBSSxNQUFLLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxLQUFNLElBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxJQUFJLEdBQUksS0FBSyxHQUFFLENBQUMsR0FBSSxHQUFFLEVBQUUsRUFBRyxJQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUUsSUFBSyxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUUsR0FBSSxNQUFPLEtBQUksRUFBRSxFQUFHLElBQUcsRUFBRSxFQUFFLFFBQVEsWUFBWSxNQUFPLFVBQVMsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEdBQUksR0FBRSxFQUFFLFFBQVEsS0FBSyxFQUFFLEVBQUUsS0FBTSxJQUFHLEVBQUUsR0FBRyxJQUFJLEdBQUksS0FBSyxHQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsRUFBRSxHQUFHLE9BQVEsR0FBRSxFQUFFLFFBQVEsR0FBRyxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsUUFBUSxHQUFHLEVBQUUsRUFBRSxNQUFPLElBQUksR0FBRSxHQUFJLElBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxPQUFPLEtBQUssS0FBSyxFQUFFLEdBQUcsRUFBRyxJQUFHLFlBQWEsSUFBRyxNQUFPLElBQUcsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFHLElBQUcsTUFBTSxRQUFRLEdBQUcsQ0FBQyxJQUFJLEdBQUksR0FBRSxHQUFHLE9BQU8sRUFBRSxHQUFJLE9BQU0sRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxJQUFJLEVBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsT0FBTyxFQUFHLE9BQU8sS0FBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUcsSUFBSSxHQUFFLEVBQUUsRUFBRyxJQUFHLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxFQUFFLFFBQVEsVUFBVSxDQUFDLEdBQUksR0FBRSxFQUFFLElBQUssTUFBSyxJQUFJLEVBQUUsS0FBSyxJQUFJLFNBQVMsR0FBRyxJQUFJLEdBQUksR0FBRSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFLEdBQUcsT0FBTyxJQUFJLENBQUMsR0FBSSxHQUFFLEdBQUcsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRyxLQUFJLEdBQUcsR0FBRyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsS0FBSyxFQUFHLElBQUksR0FBRSxFQUFFLFFBQVEsTUFBTSxDQUFFLE9BQU8sSUFBSSxJQUFHLGlCQUFpQixFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxNQUFFLE9BQU8sT0FBTyxHQUFPLEdBQUcsS0FBSyxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLFNBQVMsR0FBRyxLQUFLLFFBQVMsSUFBRyxFQUFFLEdBQUcsR0FBSSxHQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFJLE9BQU8sR0FBRSxTQUFRLEVBQUcsRUFBZ0IsUUFBUyxJQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLE9BQU8sTUFBTSxRQUFRLElBQUksRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsTUFBRSxJQUFRLEVBQUUsS0FBSyxFQUFFLElBQUksU0FBUyxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLFFBQVEsTUFBTyxLQUE2QixJQUF4QixFQUFFLElBQUksRUFBRSxFQUFFLE1BQU0sRUFBRSxFQUFFLEtBQVEsRUFBRSxNQUFPLEtBQUssT0FBTSxRQUFRLElBQUksa0JBQW1CLEdBQUUsTUFBTSxFQUFFLE9BQU8sYUFBYSxRQUFRLEVBQUUsSUFBSSxFQUFFLE9BQU8sR0FBRyxJQUFJLEdBQUcsRUFBRSxHQUFHLEdBQUcsSUFBSSxLQUFLLEVBQUUsU0FBUyxHQUFHLElBQUksR0FBSSxHQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sSUFBSSxHQUFHLE1BQU0sUUFBUSxFQUFFLElBQUksTUFBTyxPQUFNLFVBQVUsT0FBTyxTQUFTLEVBQUcsT0FBTyxJQUFHLEdBQUksSUFBSSxHQUFFLENBQUUsSUFBRyxnQkFBaUIsR0FBRSxDQUFDLEdBQUksRUFBRSxHQUFFLEVBQUUsUUFBUSxFQUFFLE9BQU8sSUFBSSxFQUFFLGdCQUFnQixHQUFHLEVBQUUsRUFBRSxjQUFjLEdBQUcsR0FBSSxJQUFHLEVBQUUscUJBQXFCLEdBQUcsRUFBRSxNQUFFLE9BQU8sR0FBTyxHQUFHLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxHQUFHLEVBQUUsU0FBUyxhQUFhLElBQUksR0FBSSxJQUFHLEVBQUUsRUFBRSxNQUFFLE9BQU8sR0FBTyxHQUFHLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFRLEdBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFHLE9BQU8sT0FBTSxRQUFRLEdBQUcsRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLFFBQVMsR0FBRSxFQUFFLEVBQUUsR0FBbUQsR0FBaEQsRUFBRSxHQUFHLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxNQUFFLEdBQU8sR0FBRSxHQUFPLEVBQUUsRUFBRSxVQUFVLElBQUksR0FBSSxHQUFFLEVBQUUsRUFBRSxFQUFFLFNBQVMsT0FBTyxFQUFFLEVBQUUsSUFBSSxDQUFDLEdBQUksR0FBRSxFQUFFLFNBQVMsRUFBRyxHQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksUUFBUSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxJQUFJLFNBQVMsR0FBRyxFQUFFLEVBQUUsUUFBUSxHQUFHLEVBQUUsT0FBTyxFQUFFLEVBQUUsUUFBUSxHQUFHLEVBQUUsUUFBUSxHQUFHLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQWtCLFFBQVMsSUFBRyxFQUFFLEdBQUcsT0FBTyxFQUFFLFlBQVksSUFBSSxXQUFXLEVBQUUsT0FBTyxnQkFBZ0IsRUFBRSxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsT0FBTyxHQUFHLEVBQUUsUUFBUyxJQUFHLEdBQUcsTUFBTyxHQUFFLFdBQVcsRUFBRSxhQUFhLFFBQVMsSUFBRyxHQUFHLEdBQUcsTUFBTSxRQUFRLEdBQUcsSUFBSSxHQUFJLEdBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxJQUFJLENBQUMsR0FBSSxHQUFFLEVBQUUsRUFBRyxJQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsbUJBQW1CLEdBQUcsSUFBSSxNQUFPLElBQUcsUUFBUyxJQUFHLEVBQUUsR0FBRyxHQUFHLElBQUksRUFBRSxHQUFHLFFBQVMsSUFBRyxFQUFFLEdBQUcsR0FBRyxLQUFLLEVBQUUsR0FBRyxRQUFTLElBQUcsRUFBRSxHQUFHLEdBQUksR0FBRSxFQUFHLE9BQU8sU0FBUyxLQUFJLE9BQU8sRUFBRSxNQUFNLEtBQUssWUFBWSxFQUFFLEtBQUssRUFBRSxJQUFJLFFBQVMsSUFBRyxFQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxFQUFFLE1BQU0sR0FBRyxHQUFHLEdBQUcsR0FBRyxPQUFHLEdBQW1CLFFBQVMsSUFBRyxHQUFHLEdBQUksR0FBRSxFQUFHLE9BQU8sSUFBRyxFQUFFLFdBQVcsR0FBRyxHQUFHLFFBQVMsSUFBRyxHQUFHLEtBQUssSUFBSSxFQUFFLEVBQUUsVUFBVSxHQUFHLEVBQUUsVUFBVSxPQUFNLENBQUcsUUFBTSxFQUFHLFFBQVMsSUFBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEdBQUcsRUFBRSxpQkFBZ0IsRUFBRyxHQUFHLEdBQUcsV0FBWSxJQUFHLEVBQUUsZ0JBQWdCLE1BQU8sSUFBRyxFQUFFLFdBQVcsT0FBTyxFQUFFLFVBQVUsQ0FBQyxFQUFFLFdBQVUsQ0FBRyxLQUFJLEdBQUksR0FBRSxFQUFFLEVBQUUsRUFBRSxVQUFVLE9BQU8sSUFBSSxHQUFHLEVBQUUsVUFBVSxHQUFJLElBQUcsRUFBRSxjQUFjLFFBQVMsSUFBRyxFQUFFLEdBQUcsSUFBSyxJQUFJLEdBQUUsRUFBRSxTQUFTLEdBQUcsRUFBRSxFQUFFLE9BQVEsSUFBRyxFQUFFLElBQUksR0FBSSxHQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLElBQUksR0FBRyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRyxHQUFFLGVBQWUsRUFBRSxNQUFNLFFBQVEsR0FBRyxLQUFtTixRQUFTLE1BQUssR0FBSSxHQUFFLENBQUUsS0FBSSxHQUFHLEtBQUssSUFBRyxFQUFHLEdBQUcsS0FBSyxTQUFTLEVBQUUsR0FBRyxNQUFPLEdBQUUsR0FBRyxFQUFFLEtBQUssR0FBRyxFQUFFLEdBQUcsR0FBRyxPQUFPLE1BQU0sRUFBRSxHQUFHLEtBQUssUUFBUSxFQUFFLFNBQVMsRUFBRSxFQUFFLEdBQUcsR0FBRyxHQUFHLEtBQUssRUFBRSxLQUFNLElBQUksR0FBRSxHQUFHLFFBQVEsRUFBRSxHQUFHLE9BQVEsSUFBRyxHQUFHLE9BQU8sR0FBRyxPQUFPLEVBQUUsTUFBTSxHQUFHLElBQUcsRUFBRyxTQUFTLEdBQUcsSUFBSSxHQUFJLEdBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxJQUFJLEVBQUUsR0FBRyxXQUFVLEVBQUcsR0FBRyxFQUFFLElBQUcsSUFBSyxHQUFHLFNBQVMsR0FBa0IsSUFBZixHQUFJLEdBQUUsRUFBRSxPQUFZLEtBQUssQ0FBQyxHQUFJLEdBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFHLEdBQUUsV0FBVyxHQUFHLEVBQUUsYUFBYSxFQUFFLGNBQWMsR0FBRyxFQUFFLGFBQWEsR0FBRyxJQUFJLEVBQUUsVUFBVSxHQUFHLEtBQUssU0FBdXBFLFFBQVMsSUFBRyxFQUFFLEVBQUUsR0FBRyxHQUFHLElBQUksV0FBVyxNQUFPLE1BQUssR0FBRyxJQUFJLEdBQUcsSUFBSSxTQUFTLEdBQUcsS0FBSyxHQUFHLEdBQUcsR0FBRyxPQUFPLGVBQWUsRUFBRSxFQUFFLElBQUksUUFBUyxJQUFHLEdBQUcsRUFBRSxZQUFhLElBQUksR0FBRSxFQUFFLFFBQVMsR0FBRSxPQUFPLFNBQVMsRUFBRSxHQUFHLEdBQUksR0FBRSxFQUFFLFNBQVMsY0FBYyxFQUFFLEVBQUUsVUFBVSxFQUFFLEVBQUUsU0FBUyxZQUFhLEdBQUUsU0FBUyxJQUFHLEVBQXNGLEtBQUksR0FBSSxLQUFLLElBQXpGLFNBQVMsR0FBRyxFQUFFLEtBQUssRUFBRyxJQUFJLEdBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFHLElBQUcsRUFBRSxFQUFFLEdBQUcsSUFBSyxJQUFHLEdBQUcsRUFBRSxTQUFTLElBQXFCLEVBQUcsS0FBRyxJQUFLLEVBQUUsRUFBRSxPQUFPLEVBQUUsU0FBUyxTQUFTLEVBQUUsR0FBRyxFQUFFLFNBQVMsS0FBTSxLQUFJLEdBQUksS0FBSyxHQUFFLEVBQUUsR0FBRyxrQkFBbUIsR0FBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsSUFBSSxFQUFFLEVBQUUsU0FBUyxFQUFFLEtBQUssU0FBUyxHQUFHLEdBQUksR0FBRSxFQUFFLFNBQVMsSUFBSyxHQUFFLEVBQUUsRUFBRSxNQUFNLGtCQUFtQixHQUFFLFNBQVMsRUFBRSxHQUFHLElBQUssS0FBSSxNQUFPLEdBQUUsS0FBSyxFQUFFLEdBQUcsTUFBTSxHQUFHLE1BQU8sSUFBRyxFQUFFLEVBQUUsYUFBYSxRQUFRLE9BQU8sRUFBRSxHQUFHLFNBQVMsS0FBOEUsS0FBeEUsR0FBSSxHQUFFLE9BQU8sS0FBSyxHQUFHLEVBQUUsRUFBRSxTQUFTLE1BQU0sR0FBRyxFQUFFLFNBQVMsUUFBUSxFQUFFLFFBQWEsS0FBSyxDQUFDLEdBQUksR0FBRSxFQUFFLEVBQUcsSUFBRyxFQUFFLEVBQUUsS0FBSyxNQUFFLEdBQU8sTUFBTSxHQUFHLEVBQUUsSUFBSSxXQUFXLEtBQUssS0FBSyxHQUFHLEdBQUcsRUFBRSxRQUFRLElBQUksR0FBSSxFQUFFLElBQUcsR0FBRSxJQUFLLEdBQUcsR0FBRyxFQUFFLFVBQVMsR0FBSSxFQUFFLFVBQVUsU0FBUyxFQUFFLEdBQUcsR0FBSSxHQUFFLEVBQUUsa0JBQWtCLE9BQU8sT0FBTyxNQUFNLEVBQUUsR0FBSSxLQUFJLEdBQUksS0FBSyxHQUFFLENBQUMsR0FBSSxHQUFFLEVBQUUsR0FBRyxFQUFFLGtCQUFtQixHQUFFLEVBQUUsRUFBRSxHQUFJLEtBQUksRUFBRSxHQUFHLEdBQUksSUFBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEtBQUssSUFBSyxJQUFHLEdBQUcsRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsUUFBUSxHQUFHLFNBQVMsRUFBRSxHQUFHLElBQUksR0FBSSxLQUFLLEdBQUUsQ0FBQyxHQUFJLEdBQUUsRUFBRSxFQUFHLElBQUcsTUFBTSxRQUFRLEdBQUcsSUFBSSxHQUFJLEdBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxJQUFJLEdBQUcsRUFBRSxFQUFFLEVBQUUsUUFBUyxJQUFHLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxPQUF3QixRQUFTLElBQUcsRUFBRSxFQUFFLEdBQUcsR0FBSSxJQUFHLEdBQUksbUJBQW1CLElBQUcsR0FBRyxJQUFJLEVBQUUsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksSUFBSSxHQUFHLElBQUksRUFBRSxJQUFJLElBQUcsSUFBSyxFQUFFLE1BQU0sR0FBRyxHQUFHLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxJQUFJLEVBQUUsS0FBSyxHQUFHLE9BQU8sZUFBZSxFQUFFLEVBQUUsSUFBSSxRQUFTLElBQUcsR0FBRyxNQUFPLFlBQVcsR0FBSSxHQUFFLEtBQUssbUJBQW1CLEtBQUssa0JBQWtCLEVBQUcsSUFBRyxFQUFFLE1BQU8sR0FBRSxPQUFPLEVBQUUsV0FBVyxHQUFHLFFBQVEsRUFBRSxTQUFTLEVBQUUsT0FBTyxRQUFTLElBQUcsR0FBRyxNQUFPLFlBQVcsTUFBTyxHQUFFLEtBQUssS0FBSyxPQUFPLFFBQVMsSUFBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLE1BQU8sR0FBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLEVBQUUsU0FBUyxnQkFBaUIsS0FBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxFQUFFLEdBQVksUUFBUyxJQUFHLEdBQUcsR0FBSSxHQUFFLEVBQUUsT0FBUSxJQUFHLEVBQUUsTUFBTSxDQUFDLEdBQUksR0FBRSxHQUFHLEVBQUUsTUFBTyxJQUFHLElBQUksRUFBRSxhQUFhLENBQUMsRUFBRSxhQUFhLENBQUUsSUFBSSxHQUFFLFNBQVMsR0FBRyxHQUFJLEdBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxFQUFFLGFBQWMsS0FBSSxHQUFJLEtBQUssR0FBRSxFQUFFLEtBQUssRUFBRSxLQUFLLElBQUksTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFJLE9BQU8sSUFBRyxFQUFHLElBQUcsRUFBRSxFQUFFLGNBQWMsSUFBSSxFQUFFLEVBQUUsUUFBUSxHQUFHLEVBQUUsRUFBRSxnQkFBZ0IsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLElBQUksTUFBTyxHQUFFLFFBQVMsSUFBRyxHQUFHLEtBQUssTUFBTSxHQUFHLFFBQVMsSUFBRyxHQUFHLEVBQUUsSUFBSSxDQUFFLElBQUksR0FBRSxDQUFFLEdBQUUsT0FBTyxTQUFTLEdBQUcsRUFBRSxLQUFNLElBQUksR0FBRSxLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxRQUFRLEVBQUUsU0FBVSxJQUFHLEVBQUUsR0FBRyxNQUFPLEdBQUUsRUFBRyxJQUFJLEdBQUUsRUFBRSxNQUFNLEVBQUUsUUFBUSxLQUFLLEVBQUUsU0FBUyxHQUFHLEtBQUssTUFBTSxHQUFJLFFBQU8sRUFBRSxVQUFVLE9BQU8sT0FBTyxFQUFFLFlBQVksWUFBWSxFQUFFLEVBQUUsSUFBSSxJQUFJLEVBQUUsUUFBUSxHQUFHLEVBQUUsUUFBUSxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsUUFBUSxPQUFPLFNBQVMsR0FBRyxHQUFJLEdBQUUsRUFBRSxRQUFRLEtBQU0sS0FBSSxHQUFJLEtBQUssR0FBRSxHQUFHLEVBQUUsVUFBVSxTQUFTLElBQUksR0FBRyxFQUFFLFFBQVEsVUFBVSxTQUFTLEdBQUcsR0FBSSxHQUFFLEVBQUUsUUFBUSxRQUFTLEtBQUksR0FBSSxLQUFLLEdBQUUsR0FBRyxFQUFFLFVBQVUsRUFBRSxFQUFFLEtBQUssR0FBRyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFFBQVEsU0FBUyxHQUFHLEVBQUUsR0FBRyxFQUFFLEtBQUssSUFBSSxFQUFFLFFBQVEsV0FBVyxHQUFHLEdBQUcsRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFFLGNBQWMsRUFBRSxFQUFFLGNBQWMsS0FBSyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsR0FBRyxRQUFTLElBQUcsR0FBRyxNQUFPLEtBQUksRUFBRSxLQUFLLFFBQVEsTUFBTSxFQUFFLEtBQUssUUFBUyxJQUFHLEVBQUUsR0FBRyxNQUFPLE9BQU0sUUFBUSxHQUFHLEVBQUUsUUFBUSxJQUFJLEVBQUUsZ0JBQWlCLEdBQUUsRUFBRSxNQUFNLEtBQUssUUFBUSxJQUFJLEdBQUcsRUFBRSxFQUFFLG9CQUFvQixFQUFFLEtBQUssSUFBSSxFQUFFLEtBQUssR0FBSSxJQUFJLEdBQUUsUUFBUyxJQUFHLEVBQUUsR0FBRyxHQUFJLEdBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxNQUFPLEtBQUksR0FBSSxLQUFLLEdBQUUsQ0FBQyxHQUFJLEdBQUUsRUFBRSxFQUFHLElBQUcsRUFBRSxDQUFDLEdBQUksR0FBRSxHQUFHLEVBQUUsaUJBQWtCLEtBQUksRUFBRSxJQUFJLEdBQUcsRUFBRSxFQUFFLEVBQUUsS0FBSyxRQUFTLElBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFJLEdBQUUsRUFBRSxJQUFJLEdBQUcsR0FBRyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsa0JBQWtCLFdBQVcsRUFBRSxHQUFHLEtBQUssRUFBRSxFQUFFLEdBQW83TixRQUFTLElBQUcsR0FBRyxJQUFJLEdBQUksR0FBRSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUscUJBQXFCLEVBQUUsRUFBRSxrQkFBa0IsU0FBUyxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsS0FBSyxHQUFJLE1BQUssRUFBRSxFQUFFLEVBQUUsU0FBUyxHQUFHLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxFQUFFLE1BQU8sT0FBTyxVQUFTLEVBQUUsR0FBRyxNQUFHLEdBQUUsSUFBSSxFQUFFLEdBQVUsR0FBRyxFQUFFLEdBQUcsSUFBVSxJQUFJLEVBQUUsWUFBWSxFQUFFLE9BQU8sUUFBUyxJQUFHLEVBQUUsR0FBRyxPQUFPLFlBQVksR0FBRyxFQUFFLFlBQVksRUFBRSxhQUFhLE1BQU0sRUFBRSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sUUFBUyxJQUFHLEVBQUUsR0FBRyxNQUFPLEdBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEdBQUcsR0FBRyxRQUFTLElBQUcsR0FBRyxNQUFPLE9BQU0sUUFBUSxHQUFHLFNBQVMsR0FBRyxJQUFJLEdBQUksR0FBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxHQUFHLEVBQUUsTUFBTSxLQUFLLElBQUksSUFBSSxHQUFHLEtBQUssR0FBRyxFQUFHLE9BQU8sSUFBRyxHQUFHLEVBQUUsR0FBRyxTQUFTLEdBQUcsR0FBSSxHQUFFLEVBQUcsS0FBSSxHQUFJLEtBQUssR0FBRSxFQUFFLEtBQUssSUFBSSxHQUFHLEtBQUssR0FBRyxFQUFHLE9BQU8sSUFBRyxHQUFHLGdCQUFpQixHQUFFLEVBQUUsR0FBczVELFFBQVMsSUFBRyxFQUFFLEdBQUcsR0FBSSxHQUFFLEVBQUUsS0FBSyxHQUFJLElBQUcsRUFBRSxHQUFHLENBQUMsR0FBSSxHQUFFLEVBQUUsUUFBUSxFQUFFLEVBQUUsbUJBQW1CLEVBQUUsSUFBSSxFQUFFLEVBQUUsS0FBTSxHQUFFLE1BQU0sUUFBUSxFQUFFLElBQUksRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLEtBQUssSUFBSSxFQUFFLE9BQUcsSUFBUSxFQUFFLEtBQUssU0FBUyxNQUFNLFFBQVEsRUFBRSxJQUFJLEVBQUUsR0FBRyxRQUFRLEdBQUcsR0FBRyxFQUFFLEdBQUcsS0FBSyxHQUFHLEVBQUUsSUFBSSxHQUFHLEVBQUUsR0FBRyxHQUFnRixRQUFTLElBQUcsRUFBRSxHQUFHLE1BQU8sR0FBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxFQUFFLFFBQVEsRUFBRSxFQUFFLE9BQU8sU0FBUyxFQUFFLEdBQUcsR0FBRyxVQUFVLEVBQUUsSUFBSSxPQUFNLENBQUcsSUFBSSxHQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUssT0FBTyxLQUFJLEdBQUcsR0FBRyxJQUFJLEdBQUcsSUFBSSxFQUFFLElBQUksRUFBRSxFQUFFLHFCQUFxQixFQUFFLGVBQWUsRUFBRSxjQUFjLEVBQUUsRUFBRSxhQUFhLFFBQVEsUUFBUyxJQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUksR0FBRSxFQUFFLElBQUssS0FBSSxFQUFFLEVBQUUsR0FBRyxJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxPQUFPLEVBQUUsR0FBRyxFQUFHLE9BQU8sR0FBNkQsUUFBUyxJQUFHLEVBQUUsSUFBSSxFQUFFLEtBQUssWUFBWSxFQUFFLEtBQUssYUFBYSxTQUFTLEVBQUUsR0FBRyxHQUFJLEdBQUUsRUFBRSxFQUFFLEVBQUUsSUFBSSxHQUFHLEVBQUUsSUFBSSxHQUFHLEVBQUUsR0FBRyxFQUFFLEtBQUssV0FBVyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsS0FBSyxXQUFXLEVBQUUsU0FBUyxLQUFLLElBQUssS0FBSSxJQUFLLEdBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLElBQUksR0FBRyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksa0JBQWtCLEVBQUUsS0FBSyxLQUFLLEdBQUcsRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLFVBQVUsRUFBRSxLQUFLLEdBQUksSUFBRyxFQUFFLE9BQU8sQ0FBQyxHQUFJLEdBQUUsV0FBVyxJQUFJLEdBQUksR0FBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLElBQUksR0FBRyxFQUFFLEdBQUcsV0FBVyxFQUFFLEdBQUksR0FBRSxHQUFHLEVBQUUsU0FBUyxHQUFHLElBQXVHLEdBQW5HLEVBQUUsUUFBUSxHQUFHLEVBQUUsWUFBWSxXQUFXLElBQUksR0FBSSxHQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sSUFBSSxHQUFHLEVBQUUsR0FBRyxtQkFBbUIsRUFBRSxNQUFTLEVBQUUsSUFBSSxJQUFLLEdBQUUsRUFBRSxJQUFJLEdBQUcsRUFBRSxHQUFHLFNBQVMsRUFBRSxFQUFFLElBQUksRUFBRSxHQUE4QixRQUFTLElBQUcsRUFBRSxHQUFHLEdBQUksR0FBRSxFQUFFLEVBQUUsT0FBTyxPQUFPLEtBQU0sS0FBSSxFQUFFLE1BQU8sRUFBRSxLQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxLQUFLLEVBQUUsRUFBRSxJQUFJLFlBQVksRUFBRSxVQUFVLElBQUksRUFBRSxHQUFHLElBQUksRUFBRSxFQUFFLElBQUksR0FBRyxFQUFFLFNBQVMsYUFBYSxFQUFFLEtBQU0sT0FBTyxHQUFFLFFBQVMsSUFBRyxHQUFHLE1BQU8sR0FBRSxTQUFTLEVBQUUsS0FBSyxJQUFJLE9BQU8sS0FBSyxFQUFFLGVBQWUsS0FBSyxLQUFLLFFBQVMsSUFBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBSSxHQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRyxJQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxHQUFHLE1BQU0sR0FBRyxHQUFHLEVBQUUsRUFBRSxRQUFRLGFBQWEsRUFBRSxLQUFLLElBQUksRUFBRSxVQUF5QixRQUFTLElBQUcsRUFBRSxHQUFHLEdBQUksR0FBRSxFQUFFLGdCQUFpQixNQUFLLEVBQUUsS0FBSSxJQUFLLEVBQUUsS0FBSyxRQUFRLGNBQWMsRUFBRSxFQUFFLEtBQUssUUFBUSxFQUFFLEVBQUUsS0FBSyxRQUFRLENBQUMsR0FBSSxHQUFFLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEtBQUssVUFBVSxFQUFFLEVBQUUsS0FBSyxTQUFVLEtBQUksSUFBSyxHQUFFLEVBQUUsVUFBVSxFQUFFLEVBQUUsS0FBSyxNQUFNLEtBQUssSUFBSSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsS0FBSyxHQUFHLEdBQUcsRUFBRSxFQUFFLEVBQUcsS0FBSSxLQUFLLEdBQUcsSUFBSSxFQUFFLFFBQVEsRUFBRSxPQUFPLEdBQUcsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLEdBQUcsR0FBRyxFQUFFLGtCQUFrQixHQUFHLEdBQUcsSUFBSSxHQUFHLElBQUksRUFBRSxnQkFBZ0IsS0FBSyxRQUFTLElBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxRQUFRLFFBQVEsTUFBTSxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxFQUFFLGdCQUFnQixJQUFJLEVBQUUsb0JBQW9CLEdBQUcsVUFBVSxFQUFFLFFBQVEsT0FBTyxFQUFFLEVBQUUsYUFBYSxFQUFFLElBQUksR0FBRyxHQUFHLEVBQUUsYUFBYSxFQUFFLEdBQUcsRUFBRSxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsRUFBRSxrQkFBa0IsR0FBRyxHQUFHLElBQUksRUFBRSxlQUFlLEdBQUcsRUFBRSxHQUFHLEdBQUcsRUFBRSxFQUFFLEdBQUcsUUFBUyxJQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsR0FBRyxHQUFHLEVBQUUsZ0JBQWdCLE9BQU8sQ0FBQyxHQUFHLElBQUksR0FBRyxhQUFhLEVBQUUsU0FBUyxnQkFBZ0IsR0FBRyxLQUFLLElBQUksRUFBRSxPQUFPLENBQUMsR0FBSSxHQUFFLFNBQVMsR0FBRyxFQUFFLDJCQUEyQixFQUFFLG9CQUFvQixRQUFRLEdBQUksR0FBRSxpQkFBaUIsUUFBUSxHQUFHLEVBQUUsUUFBTyxFQUFHLEVBQUUsYUFBYSxFQUFFLElBQWlDLFFBQVMsSUFBRyxFQUFFLEdBQUcsR0FBSSxHQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsSUFBSyxNQUFLLEVBQUUsRUFBRSxjQUFjLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLEVBQUUsY0FBYyxFQUFFLEVBQUUsU0FBUyxDQUFDLEdBQUksR0FBRSxHQUFHLEdBQUcsRUFBRSxFQUFFLGtCQUFtQixHQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsR0FBRyxLQUFLLElBQUksRUFBRSxhQUFhLEVBQUUsYUFBYSxRQUFRLEdBQUcsRUFBRSxXQUFXLElBQXNELFFBQVMsSUFBRyxFQUFFLEVBQUUsR0FBRyxHQUFJLEdBQUUsRUFBRyxPQUFPLFNBQVMsS0FBSSxPQUFPLEVBQUUsTUFBTSxLQUFLLFlBQVksR0FBRyxFQUFFLEVBQUUsRUFBRSxJQUFzQyxRQUFTLElBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFJLEdBQUUsR0FBRyxFQUFFLENBQUUsR0FBRSxFQUFFLFNBQVMsU0FBUyxHQUFHLEdBQUcsRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFLFdBQVcsR0FBRyxFQUFFLFdBQVcsR0FBRyxFQUFFLE9BQU8sZ0JBQWdCLFNBQVMsTUFBTyxHQUFFLE1BQU0sS0FBSyxZQUFZLEdBQUcsaUJBQWlCLEVBQUUsRUFBRSxHQUFHLFFBQVEsRUFBRSxRQUFRLEdBQUcsR0FBRyxRQUFTLElBQUcsRUFBRSxFQUFFLEVBQUUsSUFBSSxHQUFHLElBQUksb0JBQW9CLEVBQUUsRUFBRSxVQUFVLEVBQUUsR0FBRyxRQUFTLElBQUcsRUFBRSxHQUFHLElBQUksRUFBRSxFQUFFLEtBQUssTUFBTSxFQUFFLEVBQUUsS0FBSyxJQUFJLENBQUMsR0FBSSxHQUFFLEVBQUUsS0FBSyxPQUFPLEVBQUUsRUFBRSxLQUFLLE1BQU8sSUFBRyxFQUFFLElBQUksU0FBUyxHQUFHLEdBQUcsRUFBRSxFQUFFLEtBQUssQ0FBQyxHQUFJLEdBQUUsRUFBRSxTQUFTLE9BQVEsR0FBRSxNQUFNLE9BQU8sRUFBRSxJQUFJLEVBQUUsY0FBZSxHQUFFLElBQUksRUFBRSxFQUFFLE9BQU8sRUFBRSxVQUFVLE9BQU8sRUFBRSxJQUFJLEVBQUUsa0JBQW1CLEdBQUUsTUFBTSxHQUFHLEdBQUcsRUFBRSxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsU0FBUyxPQUFHLElBQXdDLFFBQVMsSUFBRyxFQUFFLEdBQUcsSUFBSSxFQUFFLEVBQUUsS0FBSyxZQUFZLEVBQUUsRUFBRSxLQUFLLFVB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QUFJLEdBQUcsRUFBRSxFQUFFLE1BQU0sRUFBRSxHQUFHLElBQTBDLFFBQVMsSUFBRyxFQUFFLEdBQUcsR0FBRyxJQUFJLEVBQUUsRUFBRSxRQUFRLEdBQUcsRUFBRSxVQUFVLEVBQUUsUUFBUSxNQUFNLEVBQUUsRUFBRSxNQUFNLElBQUksUUFBUSxTQUFTLEdBQUcsTUFBTyxHQUFFLFVBQVUsSUFBSSxLQUFLLEVBQUUsVUFBVSxJQUFJLE9BQU8sQ0FBQyxHQUFJLEdBQUUsS0FBSyxFQUFFLGFBQWEsVUFBVSxJQUFJLEdBQUksR0FBRSxRQUFRLElBQUksRUFBRSxLQUFLLEdBQUcsRUFBRSxhQUFhLFNBQVMsRUFBRSxHQUFHLFNBQVMsUUFBUyxJQUFHLEVBQUUsR0FBRyxHQUFHLElBQUksRUFBRSxFQUFFLFFBQVEsR0FBRyxFQUFFLFVBQVUsRUFBRSxRQUFRLE1BQU0sRUFBRSxFQUFFLE1BQU0sSUFBSSxRQUFRLFNBQVMsR0FBRyxNQUFPLEdBQUUsVUFBVSxPQUFPLEtBQUssRUFBRSxVQUFVLE9BQU8sR0FBRyxFQUFFLFVBQVUsUUFBUSxFQUFFLGdCQUFnQixhQUFhLENBQUMsSUFBSSxHQUFJLEdBQUUsS0FBSyxFQUFFLGFBQWEsVUFBVSxJQUFJLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFFBQVEsSUFBSSxHQUFHLEVBQUUsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLEVBQUUsUUFBUSxFQUFFLGFBQWEsUUFBUSxHQUFHLEVBQUUsZ0JBQWdCLFVBQVUsUUFBUyxJQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxnQkFBaUIsR0FBRSxDQUFDLEdBQUksS0FBSyxRQUFNLElBQUssRUFBRSxLQUFLLEVBQUUsRUFBRSxHQUFHLEVBQUUsTUFBTSxNQUFNLEVBQUUsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBaUIsR0FBRSxHQUFHLE9BQUcsSUFBa3FCLFFBQVMsSUFBRyxHQUFHLEdBQUcsV0FBVyxHQUFHLEtBQUssUUFBUyxJQUFHLEVBQUUsR0FBRyxHQUFJLEdBQUUsRUFBRSxxQkFBcUIsRUFBRSxzQkFBdUIsR0FBRSxRQUFRLEdBQUcsSUFBSSxFQUFFLEtBQUssR0FBRyxHQUFHLEVBQUUsSUFBSSxRQUFTLElBQUcsRUFBRSxHQUFHLEVBQUUsb0JBQW9CLEVBQUUsRUFBRSxtQkFBbUIsR0FBRyxHQUFHLEVBQUUsR0FBRyxRQUFTLElBQUcsRUFBRSxFQUFFLEdBQUcsR0FBSSxHQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxRQUFRLEVBQUUsRUFBRSxTQUFVLEtBQUksRUFBRSxNQUFPLElBQUksSUFBSSxHQUFFLElBQUksR0FBRyxHQUFHLEdBQUcsRUFBRSxFQUFFLEVBQUUsV0FBVyxFQUFFLG9CQUFvQixFQUFFLEdBQUcsS0FBSyxFQUFFLFNBQVMsR0FBRyxFQUFFLFNBQVMsS0FBSyxHQUFHLEdBQUcsSUFBSyxZQUFXLFdBQVcsRUFBRSxHQUFHLEtBQUssRUFBRSxHQUFHLEVBQUUsaUJBQWlCLEVBQUUsR0FBbUMsUUFBUyxJQUFHLEVBQUUsR0FBRyxHQUFJLEdBQUUsRUFBRSxPQUFPLGlCQUFpQixHQUFHLEdBQUcsRUFBRSxHQUFHLFVBQVUsSUFBSSxNQUFNLE1BQU0sR0FBRyxFQUFFLEdBQUcsYUFBYSxJQUFJLE1BQU0sTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLFVBQVUsSUFBSSxNQUFNLE1BQU0sR0FBRyxFQUFFLEdBQUcsYUFBYSxJQUFJLE1BQU0sTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUUsT0FBTyxLQUFJLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLFFBQVEsSUFBSSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxRQUFRLEdBQUcsR0FBRyxFQUFFLEtBQUssSUFBSSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFHLE1BQU0sSUFBSSxHQUFHLEVBQUUsT0FBTyxFQUFFLE9BQU8sR0FBRyxLQUFLLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxhQUFhLElBQUksSUFBSSxHQUFHLEtBQUssRUFBRSxHQUFHLGNBQWMsUUFBUyxJQUFHLEVBQUUsR0FBRyxLQUFLLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxFQUFFLE9BQU8sRUFBRyxPQUFPLE1BQUssSUFBSSxNQUFNLEtBQUssRUFBRSxJQUFJLFNBQVMsRUFBRSxHQUFHLE1BQU8sSUFBRyxHQUFHLEdBQUcsRUFBRSxPQUFPLFFBQVMsSUFBRyxHQUFHLE1BQU8sS0FBSSxPQUFPLEVBQUUsTUFBTSxHQUFHLEdBQUcsUUFBUSxJQUFJLE1BQU0sUUFBUyxJQUFHLEVBQUUsR0FBRyxHQUFJLEdBQUUsRUFBRSxHQUFJLEdBQUUsRUFBRSxZQUFZLEVBQUUsU0FBUyxXQUFVLEVBQUcsRUFBRSxXQUFZLElBQUksR0FBRSxHQUFHLEVBQUUsS0FBSyxXQUFZLEtBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxXQUFXLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSSxHQUFJLEdBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxXQUFXLEVBQUUsRUFBRSxhQUFhLEVBQUUsRUFBRSxpQkFBaUIsRUFBRSxFQUFFLFlBQVksRUFBRSxFQUFFLGNBQWMsRUFBRSxFQUFFLGtCQUFrQixFQUFFLEVBQUUsWUFBWSxFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUsV0FBVyxFQUFFLEVBQUUsZUFBZSxFQUFFLEVBQUUsYUFBYSxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsWUFBWSxFQUFFLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLEdBQUcsT0FBTyxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsUUFBUSxFQUFFLEVBQUUsTUFBTyxJQUFJLElBQUcsRUFBRSxhQUFhLEVBQUUsWUFBYSxLQUFJLEdBQUcsR0FBRyxLQUFLLEVBQUUsQ0FBQyxHQUFJLEdBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsRUFBRSxHQUFHLGtCQUFtQixHQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLE1BQU0sR0FBRyxHQUFFLElBQUssSUFBSSxFQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsRUFBRSxTQUFTLEVBQUUsV0FBVyxJQUFJLEdBQUcsRUFBRSxHQUFHLEdBQUcsRUFBRSxJQUFJLEVBQUUsV0FBVyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsRUFBRSxJQUFJLEdBQUcsRUFBRSxHQUFHLEVBQUUsU0FBUyxNQUFPLEdBQUUsS0FBSyxNQUFNLEdBQUcsRUFBRSxTQUFTLFdBQVcsR0FBSSxHQUFFLEVBQUUsV0FBVyxFQUFFLEdBQUcsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLElBQUssSUFBRyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsSUFBSSxVQUFVLEVBQUUsSUFBSSxXQUFXLEdBQUcsRUFBRSxFQUFFLEtBQUssR0FBRyxFQUFFLEdBQUcsSUFBSSxHQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLFdBQVcsR0FBRyxFQUFFLEdBQUcsRUFBRSxZQUFZLEdBQUcsRUFBRSxHQUFHLElBQUksR0FBRyxHQUFHLFdBQVcsRUFBRSxHQUFHLEdBQUcsRUFBRSxFQUFFLFFBQVEsRUFBRSxLQUFLLE9BQU8sR0FBRyxJQUFJLEdBQUcsRUFBRSxFQUFFLElBQUksR0FBRyxHQUFHLE1BQU0sUUFBUyxJQUFHLEVBQUUsR0FBc2lCLFFBQVMsS0FBSSxFQUFFLGFBQWEsRUFBRSxLQUFLLE1BQU0sRUFBRSxjQUFjLEVBQUUsV0FBVyxXQUFXLEVBQUUsV0FBVyxjQUFjLEVBQUUsS0FBSyxHQUFHLEdBQUcsRUFBRSxHQUFHLElBQUksR0FBRyxFQUFFLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxXQUFXLEdBQUcsRUFBRSxHQUFHLEVBQUUsWUFBWSxHQUFHLEVBQUUsR0FBRyxJQUFJLEdBQUcsR0FBRyxXQUFXLEVBQUUsR0FBRyxHQUFHLEVBQUUsRUFBRSxRQUFRLEdBQUcsRUFBRSxFQUFFLEdBQUcsR0FBRyxHQUFHLEtBQTF4QixHQUFJLEdBQUUsRUFBRSxHQUFJLEdBQUUsRUFBRSxZQUFZLEVBQUUsU0FBUyxXQUFVLEVBQUcsRUFBRSxXQUFZLElBQUksR0FBRSxHQUFHLEVBQUUsS0FBSyxXQUFZLElBQUcsRUFBRSxJQUFJLElBQUksRUFBRSxTQUFTLE1BQU8sSUFBSSxLQUFJLEVBQUUsRUFBRSxVQUFVLENBQUMsR0FBSSxHQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsV0FBVyxFQUFFLEVBQUUsYUFBYSxFQUFFLEVBQUUsaUJBQWlCLEVBQUUsRUFBRSxZQUFZLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxXQUFXLEVBQUUsRUFBRSxlQUFlLEVBQUUsRUFBRSxXQUFXLEVBQUUsRUFBRSxTQUFTLEdBQUUsSUFBSyxJQUFJLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLE1BQU0sR0FBRyxFQUFFLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsV0FBVyxXQUFXLEVBQUUsV0FBVyxTQUFTLEVBQUUsS0FBSyxNQUFNLElBQUksR0FBRyxFQUFFLEdBQUcsR0FBRyxFQUFFLElBQUksRUFBRSxXQUFXLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxFQUFFLEtBQUssSUFBSSxHQUFHLEVBQUUsSUFBSSxFQUFFLFNBQVMsTUFBTyxHQUFFLEVBQUUsR0FBRyxLQUFpUSxRQUFTLElBQUcsR0FBRyxNQUFNLGdCQUFpQixLQUFJLE1BQU0sR0FBRyxRQUFTLElBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxPQUFNLENBQUcsSUFBSSxHQUFFLEVBQUUsR0FBSSxPQUFPLEdBQUUsR0FBRyxHQUFHLE1BQU0sUUFBUSxHQUFHLEVBQUUsR0FBRyxJQUFJLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxRQUFTLElBQUcsRUFBRSxJQUFHLElBQUssRUFBRSxLQUFLLE1BQU0sR0FBRyxHQUFrd00sUUFBUyxJQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxFQUFFLElBQUksR0FBRyxJQUFJLFdBQVcsV0FBVyxHQUFHLEVBQUUsRUFBRSxJQUFJLEdBQUcsUUFBUyxJQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUksR0FBRSxFQUFFLE1BQU0sRUFBRSxFQUFFLFFBQVMsS0FBSSxHQUFHLE1BQU0sUUFBUSxHQUFHLENBQUMsSUFBSSxHQUFJLEdBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLFFBQVEsT0FBTyxFQUFFLEVBQUUsSUFBSSxHQUFHLEVBQUUsRUFBRSxRQUFRLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEtBQUssRUFBRSxFQUFFLFdBQVcsSUFBSSxFQUFFLFNBQVMsT0FBUSxJQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsWUFBWSxFQUFFLGdCQUFnQixJQUFJLEVBQUUsY0FBYyxHQUFJLEtBQUksRUFBRSxlQUFlLElBQUksUUFBUyxJQUFHLEVBQUUsR0FBRyxNQUFPLEdBQUUsTUFBTSxTQUFTLEdBQUcsT0FBTyxFQUFFLEVBQUUsS0FBSyxRQUFTLElBQUcsR0FBRyxNQUFNLFVBQVcsR0FBRSxFQUFFLE9BQU8sRUFBRSxNQUFNLFFBQVMsSUFBRyxHQUFHLEVBQUUsT0FBTyxXQUFVLEVBQUcsUUFBUyxJQUFHLEdBQUcsRUFBRSxPQUFPLFlBQVksRUFBRSxPQUFPLFdBQVUsRUFBRyxHQUFHLEVBQUUsT0FBTyxVQUFVLFFBQVMsSUFBRyxFQUFFLEdBQUcsR0FBSSxHQUFFLFNBQVMsWUFBWTt3Q0FBYyxHQUFFLFVBQVUsR0FBRSxHQUFHLEdBQUksRUFBRSxjQUFjLEdBQUcsUUFBUyxJQUFHLEdBQUcsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sRUFBRSxLQUFLLFdBQVcsRUFBRSxHQUFHLEVBQUUsa0JBQWtCLFFBQW8yQixRQUFTLElBQUcsR0FBRyxHQUFJLEdBQUUsR0FBRyxFQUFFLGdCQUFpQixPQUFPLElBQUcs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QkFBdUIsS0FBSyxJQUFJLFFBQVEsR0FBRyxHQUFHLEdBQUcsY0FBYyxLQUFLLEdBQUcsR0FBRyxZQUFZLEtBQUssR0FBRyxHQUFHLEVBQUUsTUFBTSxtQkFBbUIsS0FBSyxNQUFNLEdBQUUsQ0FBRyxJQUFHLEVBQUUsSUFBSSxHQUFJLEtBQUssUUFBTyxlQUFlLEVBQUUsV0FBVyxJQUFJLFdBQVcsR0FBRSxLQUFNLE9BQU8saUJBQWlCLGVBQWUsS0FBSyxHQUFHLE1BQU0sSUFBSSxHQUFJLEdBQUUsV0FBVyxXQUFPLEtBQVMsSUFBSSxHQUFHLElBQUksR0FBRyxtQkFBb0IsU0FBUyxPQUFPLFNBQVMsV0FBVyxPQUFPLFFBQVEsSUFBSSxTQUFVLEdBQUcsR0FBRyxHQUFHLE9BQU8sNkJBQTZHLEdBQUcsR0FBRyxtQkFBb0IsU0FBUSxHQUFHLFNBQVMsbUJBQW9CLFVBQVMsR0FBRyxRQUFRLFFBQVMsSUFBRyxtQkFBb0IsTUFBSyxHQUFHLEtBQUssSUFBSSxXQUFXLFFBQVMsS0FBSSxLQUFLLElBQUksT0FBTyxPQUFPLE1BQU0sTUFBTyxHQUFFLFVBQVUsSUFBSSxTQUFTLEdBQUcsT0FBTSxJQUFLLEtBQUssSUFBSSxJQUFJLEVBQUUsVUFBVSxJQUFJLFNBQVMsR0FBRyxLQUFLLElBQUksSUFBRyxHQUFJLEVBQUUsVUFBVSxNQUFNLFdBQVcsS0FBSyxJQUFJLE9BQU8sT0FBTyxPQUFPLElBQUssSUFBSSxJQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsV0FBVyxLQUFLLEdBQUcsS0FBSyxLQUFLLFFBQVMsSUFBRyxVQUFVLE9BQU8sU0FBUyxHQUFHLEtBQUssS0FBSyxLQUFLLElBQUksR0FBRyxVQUFVLFVBQVUsU0FBUyxHQUFHLEVBQUUsS0FBSyxLQUFLLElBQUksR0FBRyxVQUFVLE9BQU8sV0FBVyxHQUFHLFFBQVEsR0FBRyxPQUFPLE9BQU8sT0FBTyxHQUFHLFVBQVUsT0FBTyxXQUFXLElBQUksR0FBSSxHQUFFLEtBQUssS0FBSyxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsSUFBSSxFQUFFLEdBQUcsVUFBVSxHQUFHLE9BQU8sSUFBSyxJQUFJLE9BQWlHLEdBQUcsU0FBUyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsS0FBSyxJQUFJLEVBQUUsS0FBSyxLQUFLLEVBQUUsS0FBSyxTQUFTLEVBQUUsS0FBSyxLQUFLLEVBQUUsS0FBSyxJQUFJLEVBQUUsS0FBSyxPQUFHLEdBQU8sS0FBSyxRQUFRLEVBQUUsS0FBSyxjQUFVLEdBQU8sS0FBSyxjQUFVLEdBQU8sS0FBSyxjQUFVLEdBQU8sS0FBSyxJQUFJLEdBQUcsRUFBRSxJQUFJLEtBQUssaUJBQWlCLEVBQUUsS0FBSyxzQkFBa0IsR0FBTyxLQUFLLFdBQU8sR0FBTyxLQUFLLEtBQUksRUFBRyxLQUFLLFVBQVMsRUFBRyxLQUFLLGNBQWEsRUFBRyxLQUFLLFdBQVUsRUFBRyxLQUFLLFVBQVMsRUFBRyxLQUFLLFFBQU8sRUFBRyxLQUFLLGFBQWEsRUFBRSxLQUFLLGNBQVUsR0FBTyxLQUFLLG9CQUFtQixHQUFJLElBQUksT0FBTyxjQUFhLEdBQUssSUFBRyxNQUFNLElBQUksV0FBVyxNQUFPLE1BQUssbUJBQW1CLE9BQU8saUJBQWlCLEdBQUcsVUFBVSxHQUFJLElBQUksSUFBRyxTQUFTLE9BQUcsS0FBUyxJQUFJLEVBQUUsR0FBSSxJQUFJLEdBQUUsR0FBSSxHQUFHLE9BQU8sR0FBRSxLQUFLLEVBQUUsRUFBRSxXQUFVLEVBQUcsR0FBaVksR0FBRyxNQUFNLFVBQVUsR0FBRyxPQUFPLE9BQU8sS0FBSyxPQUFPLE1BQU0sUUFBUSxVQUFVLFNBQVMsT0FBTyxXQUFXLFFBQVEsU0FBUyxHQUFHLEdBQUksR0FBRSxHQUFHLEVBQUcsR0FBRSxHQUFHLEVBQUUsV0FBVyxJQUFJLEdBQUksTUFBSyxFQUFFLFVBQVUsT0FBTyxLQUFLLEVBQUUsR0FBRyxVQUFVLEVBQUcsSUFBSSxHQUFFLEVBQUUsRUFBRSxNQUFNLEtBQUssR0FBRyxFQUFFLEtBQUssTUFBTyxRQUFPLEdBQUcsSUFBSSxPQUFPLElBQUksVUFBVSxFQUFFLENBQUUsTUFBTSxLQUFJLFNBQVMsRUFBRSxFQUFFLE1BQU0sR0FBRyxNQUFPLElBQUcsRUFBRSxhQUFhLEdBQUcsRUFBRSxJQUFJLFNBQVMsS0FBTSxJQUFJLElBQUcsT0FBTyxvQkFBb0IsSUFBSSxJQUFHLEVBQTJCLEdBQUcsU0FBUyxHQUFHLEdBQUksRUFBRSxNQUFLLE1BQU0sRUFBRSxLQUFLLElBQUksR0FBSSxJQUFHLEtBQUssUUFBUSxFQUFFLEVBQUUsRUFBRSxTQUFTLE1BQU0sTUFBTSxRQUFRLElBQUksR0FBRyxFQUFFLEdBQUcsRUFBRSxVQUFVLEdBQUcsU0FBUyxFQUFFLEVBQUUsR0FBRyxJQUFJLEdBQUksR0FBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxJQUFJLENBQUMsR0FBSSxHQUFFLEVBQUUsRUFBRyxHQUFFLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxHQUFHLElBQUksS0FBSyxhQUFhLElBQUksS0FBSyxLQUFLLEdBQWdxQyxJQUFHLFVBQVUsS0FBSyxTQUFTLEdBQUcsSUFBSSxHQUFJLEdBQUUsT0FBTyxLQUFLLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLElBQUksR0FBRyxFQUFFLEVBQUUsS0FBSyxHQUFHLFVBQVUsYUFBYSxTQUFTLEdBQUcsSUFBSSxHQUFJLEdBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsSUFBSSxHQUFHLEVBQUUsSUFBSyxJQUFJLElBQUcsRUFBRSxxQkFBNnJCLElBQUcsS0FBSyxTQUFTLEVBQUUsRUFBRSxHQUFHLE1BQU8sR0FBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsa0JBQW1CLEdBQUUsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLFFBQVEsU0FBUyxHQUFHLEdBQUcsR0FBRyxLQUFLLEVBQUUsUUFBUSxTQUFTLEdBQUcsR0FBRyxFQUFFLEtBQUssS0FBSyxHQUFHLE1BQU0sU0FBUyxFQUFFLEVBQUUsRUFBRSxHQUFHLEdBQUcsSUFBSSxJQUFJLE1BQUUsSUFBUSxJQUFJLElBQUksTUFBRSxLQUFTLEVBQUUsTUFBTyxRQUFPLE9BQU8sR0FBRyxLQUFNLEtBQUksRUFBRSxNQUFPLEVBQUUsSUFBSSxLQUFLLEtBQUksR0FBSSxLQUFLLEdBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFJLEdBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFHLEtBQUksTUFBTSxRQUFRLEtBQUssR0FBRyxJQUFJLEVBQUUsR0FBRyxFQUFFLEVBQUUsT0FBTyxHQUFHLE1BQU0sUUFBUSxHQUFHLEdBQUcsR0FBRyxNQUFPLElBQUcsR0FBRyxNQUFNLEdBQUcsUUFBUSxHQUFHLE9BQU8sR0FBRyxTQUFTLFNBQVMsRUFBRSxFQUFFLEVBQUUsR0FBRyxJQUFJLEVBQUUsTUFBTyxFQUFFLElBQUksR0FBRSxPQUFPLE9BQU8sS0FBTSxPQUFPLEdBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxFQUFFLEdBQUcsR0FBRyxHQUFHLFFBQVEsRUFBRyxJQUFJLElBQUcsU0FBUyxFQUFFLEdBQUcsV0FBTyxLQUFTLEVBQUUsRUFBRSxHQUF5d0UsR0FBRyxJQUFHLEVBQUcsTUFBTSxJQUFHLENBQXVGLElBQUcsbUJBQW9CLFVBQVMsR0FBRyxTQUFTLENBQUMsR0FBSSxJQUFHLFFBQVEsU0FBVSxJQUFHLFdBQVcsR0FBRyxLQUFLLElBQUksR0FBRyxXQUFXLElBQUksSUFBRyxNQUFRLElBQUcsR0FBRyxtQkFBb0Isb0JBQW1CLEdBQUcsbUJBQW1CLHlDQUF5QyxpQkFBaUIsV0FBVyxHQUFHLG1CQUFvQixlQUFjLEdBQUcsY0FBYyxXQUFXLGFBQWEsS0FBSyxXQUFXLFdBQVcsR0FBRyxRQUFRLENBQUMsR0FBSSxJQUFHLEVBQUUsR0FBRyxHQUFJLGtCQUFpQixJQUFJLEdBQUcsU0FBUyxlQUFlLE9BQU8sSUFBSyxJQUFHLFFBQVEsSUFBSSxlQUFjLElBQUssR0FBRyxXQUFXLElBQUksR0FBRyxHQUFHLEVBQUUsR0FBRyxLQUFLLE9BQU8sS0FBSyxJQUFHLEVBQW9NLEdBQUksSUFBRyxHQUFJLElBQTBTLEdBQUcsRUFBRSxTQUFTLEdBQUcsR0FBSSxHQUFFLE1BQU0sRUFBRSxPQUFPLEdBQUcsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sR0FBRyxHQUFHLE9BQU8sR0FBRyxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxHQUFHLEdBQUcsT0FBTyxFQUFHLFFBQU8sS0FBSyxFQUFFLEVBQUUsRUFBRSxNQUFNLEdBQUcsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLFFBQVEsSUFBNjZMLElBQUcsR0FBRyxVQUFXLElBQUksS0FBSSxLQUFLLFNBQVMsRUFBRSxHQUFHLEdBQUcsRUFBRSxvQkFBb0IsRUFBRSxrQkFBa0IsY0FBYyxFQUFFLEtBQUssVUFBVSxDQUFDLEdBQUksR0FBRSxDQUFFLElBQUcsU0FBUyxFQUFFLFFBQVMsRUFBRSxrQkFBa0IsU0FBUyxFQUFFLEdBQUcsR0FBSSxJQUFHLGNBQWEsRUFBRyxhQUFhLEVBQUUsT0FBTyxHQUFHLEVBQUUsRUFBRSxLQUFLLGNBQTZFLE9BQTlELEdBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsaUJBQXdCLEdBQUksR0FBRSxpQkFBaUIsS0FBSyxJQUFJLEVBQUUsS0FBSyxPQUFPLEVBQUUsRUFBRSxRQUFJLEdBQU8sSUFBSyxTQUFTLFNBQVMsRUFBRSxHQUFHLEdBQUksR0FBRSxFQUFFLGtCQUFrQixTQUFTLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFJLEdBQUUsRUFBRSxLQUFLLFlBQVksRUFBRSxFQUFFLGFBQWEsS0FBSyxJQUFJLEVBQUUsU0FBUyxJQUFJLElBQUksRUFBRSxTQUFTLEdBQUcsRUFBRSxhQUFhLE9BQU8sRUFBRSxNQUFNLEtBQUssR0FBRyxFQUFFLFNBQVMsaUJBQWlCLEVBQXNFLElBQW5FLEVBQUUsU0FBUyxhQUFhLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxTQUFTLEVBQUUsT0FBTyxPQUFPLEdBQU0sRUFBRSxTQUFTLGdCQUFnQixFQUFFLEVBQUUsT0FBTyxFQUFFLEtBQUssT0FBTyxFQUFFLEVBQUUsV0FBVyxHQUFHLEVBQUUsR0FBRyxFQUFFLFNBQVMsTUFBTSxDQUFDLElBQUcsRUFBSSxLQUFJLEdBQUksR0FBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLFNBQVMsY0FBYyxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sSUFBSSxDQUFDLEdBQUksR0FBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLFNBQVMsS0FBTSxHQUFFLEdBQUcsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLElBQUcsR0FBSSxFQUFFLFNBQVMsVUFBVSxFQUFFLEVBQUUsR0FBRyxDQUFFLElBQUksR0FBRSxFQUFFLFNBQVMsZ0JBQWlCLEdBQUUsU0FBUyxpQkFBaUIsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLElBQUksRUFBRSxPQUFPLEdBQUcsRUFBRSxFQUFFLFNBQVMsRUFBRSxpQkFBaUIsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLEVBQUUsV0FBVyxPQUFPLFNBQVMsR0FBRyxHQUFJLEdBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxFQUFFLGlCQUFrQixHQUFFLGFBQWEsRUFBRSxZQUFXLEVBQUcsR0FBRyxFQUFFLFlBQVksRUFBRSxLQUFLLFlBQVksRUFBRSxhQUFhLEVBQUUsR0FBRyxXQUFVLEVBQUcsR0FBRyxLQUFLLElBQUksR0FBRyxHQUFFLEtBQU0sUUFBUSxTQUFTLEdBQUcsR0FBSSxHQUFFLEVBQUUsaUJBQWtCLEdBQUUsZUFBZSxFQUFFLEtBQUssVUFBVSxRQUFTLEdBQUUsRUFBRSxHQUFHLEtBQUcsSUFBSSxFQUFFLGlCQUFnQixFQUFHLEdBQUcsS0FBZSxFQUFFLFdBQVUsQ0FBQyxFQUFFLFdBQVUsQ0FBRyxLQUFJLEdBQUksR0FBRSxFQUFFLEVBQUUsRUFBRSxVQUFVLE9BQU8sSUFBSSxFQUFFLEVBQUUsVUFBVSxHQUFJLElBQUcsRUFBRSxpQkFBaUIsR0FBRSxHQUFJLEVBQUUsY0FBYyxHQUFHLE9BQU8sS0FBSyxJQUF3akYsR0FBRyxFQUFFLEdBQUcsRUFBZ2dDLEdBQUcsR0FBRyxLQUFvZixHQUFHLEtBQXVmLE1BQU0sTUFBTSxNQUFNLElBQUcsRUFBRyxJQUFHLEVBQUcsR0FBRyxFQUFNLEdBQUcsRUFBRSxHQUFHLEtBQUssR0FBSSxJQUFHLElBQUksRUFBRSxDQUFDLEdBQUksSUFBRyxPQUFPLFdBQVksS0FBSSxrQkFBbUIsSUFBRyxLQUFLLEtBQUssU0FBUyxZQUFZLFNBQVMsWUFBWSxHQUFHLFdBQVcsTUFBTyxJQUFHLFFBQW9kLEdBQUksSUFBRyxFQUFFLEdBQUcsU0FBUyxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsS0FBSyxHQUFHLEVBQUUsSUFBSSxFQUFFLFNBQVMsTUFBTSxFQUFFLFVBQVUsS0FBSyxNQUFNLEdBQUcsS0FBSyxPQUFPLEVBQUUsS0FBSyxLQUFLLE9BQU8sRUFBRSxLQUFLLEtBQUssT0FBTyxFQUFFLEtBQUssS0FBSyxPQUFPLEVBQUUsS0FBSyxLQUFLLE9BQU8sRUFBRSxRQUFRLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssTUFBSyxFQUFHLEtBQUssR0FBRyxFQUFFLEtBQUssS0FBSyxHQUFHLEtBQUssUUFBTyxFQUFHLEtBQUssTUFBTSxLQUFLLEtBQUssS0FBSyxRQUFRLEtBQUssV0FBVyxLQUFLLE9BQU8sR0FBSSxJQUFHLEtBQUssVUFBVSxHQUFJLElBQUcsS0FBSyxXQUFXLEdBQUcsa0JBQW1CLEdBQUUsS0FBSyxPQUFPLEdBQUcsS0FBSyxPQUFPLFNBQVMsR0FBRyxJQUFJLEVBQUUsS0FBSyxHQUFHLENBQUMsR0FBSSxHQUFFLEVBQUUsTUFBTSxJQUFLLE9BQU8sVUFBUyxHQUFHLElBQUksR0FBSSxHQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sSUFBSSxDQUFDLElBQUksRUFBRSxNQUFPLEdBQUUsRUFBRSxFQUFFLElBQUksTUFBTyxNQUFLLEdBQUcsS0FBSyxTQUFTLEtBQUssT0FBTyxJQUFJLEtBQUssTUFBTSxLQUFLLFNBQUssR0FBTyxLQUFLLE1BQU8sSUFBRyxVQUFVLElBQUksV0FBVyxHQUFJLEVBQUUsSUFBRyxLQUFNLElBQUksR0FBRSxLQUFLLEVBQUcsS0FBSSxFQUFFLEtBQUssT0FBTyxLQUFLLEVBQUUsR0FBRyxNQUFNLEdBQUcsSUFBSSxLQUFLLEtBQUssS0FBTSxFQUFFLElBQUcsRUFBRSxFQUFFLHVCQUF1QixLQUFLLFdBQVcsS0FBSyxRQUFRLEtBQUssTUFBTSxHQUFHLEdBQUcsS0FBSyxLQUFLLGNBQWMsTUFBTyxJQUFHLEdBQUcsVUFBVSxPQUFPLFNBQVMsR0FBRyxHQUFJLEdBQUUsRUFBRSxFQUFHLE1BQUssVUFBVSxJQUFJLEtBQUssS0FBSyxVQUFVLElBQUksR0FBRyxLQUFLLFFBQVEsS0FBSyxHQUFHLEtBQUssT0FBTyxJQUFJLElBQUksRUFBRSxPQUFPLFFBQVEsR0FBRyxVQUFVLFlBQVksV0FBVyxJQUFJLEdBQUksR0FBRSxLQUFLLEtBQUssT0FBTyxLQUFLLENBQUMsR0FBSSxHQUFFLEtBQUssS0FBSyxFQUFHLE1BQUssVUFBVSxJQUFJLEVBQUUsS0FBSyxFQUFFLFVBQVUsTUFBTSxHQUFJLEdBQUUsS0FBSyxNQUFPLE1BQUssT0FBTyxLQUFLLFVBQVUsS0FBSyxVQUFVLEVBQUUsS0FBSyxVQUFVLFFBQVEsRUFBRSxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssUUFBUSxLQUFLLFFBQVEsRUFBRSxLQUFLLFFBQVEsT0FBTyxHQUFHLEdBQUcsVUFBVSxPQUFPLFdBQVcsS0FBSyxLQUFLLEtBQUssT0FBTSxFQUFHLEtBQUssS0FBSyxLQUFLLE1BQU0sU0FBUyxHQUFHLEdBQUksR0FBRSxFQUFFLEVBQUcsSUFBRyxNQUFNLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFHLEVBQUcsR0FBRyxDQUFDLElBQUksR0FBSSxHQUFFLEdBQUcsT0FBTyxFQUFFLEVBQUUsSUFBSSxHQUFHLEdBQUcsR0FBRyxFQUFFLElBQUksR0FBSSxJQUFHLE9BQU8sRUFBRSxFQUFFLEVBQUUsT0FBUSxJQUFHLEtBQUssRUFBRyxNQUFLLElBQUcsRUFBRyxHQUFHLE9BQU8sT0FBTyxHQUFHLFVBQVUsSUFBSSxXQUFXLEdBQUcsS0FBSyxPQUFPLENBQUMsR0FBSSxHQUFFLEtBQUssS0FBTSxJQUFHLElBQUksS0FBSyxPQUFPLEVBQUUsSUFBSSxLQUFLLEtBQUssQ0FBQyxHQUFJLEdBQUUsS0FBSyxLQUFNLElBQUcsS0FBSyxNQUFNLEVBQUUsS0FBSyxLQUFLLElBQUksS0FBSyxHQUFHLEtBQUssS0FBSyxHQUFHLEVBQUUsR0FBRyxNQUFNLEdBQUcsR0FBRyxFQUFFLEtBQUssR0FBRyx5QkFBeUIsS0FBSyxXQUFXLFNBQVUsTUFBSyxHQUFHLEtBQUssS0FBSyxHQUFHLEVBQUUsTUFBTSxHQUFHLFVBQVUsU0FBUyxXQUFXLEtBQUssTUFBTSxLQUFLLE1BQU0sS0FBSyxPQUFNLEdBQUksR0FBRyxVQUFVLE9BQU8sV0FBVyxJQUFJLEdBQUksR0FBRSxLQUFLLEtBQUssT0FBTyxLQUFLLEtBQUssS0FBSyxHQUFHLFVBQVUsR0FBRyxVQUFVLFNBQVMsV0FBVyxHQUFHLEtBQUssT0FBTyxDQUFDLEtBQUssR0FBRyxtQkFBbUIsRUFBRSxLQUFLLEdBQUcsVUFBVSxLQUFNLEtBQUksR0FBSSxHQUFFLEtBQUssS0FBSyxPQUFPLEtBQUssS0FBSyxLQUFLLEdBQUcsVUFBVSxLQUFNLE1BQUssUUFBTyxHQUFLLElBQUksS0FBSSxZQUFXLEVBQUcsY0FBYSxFQUFHLElBQUksRUFBRSxJQUFJLEdBQWd2QyxJQUFJLE1BQUssR0FBZ2YsR0FBRyxHQUF3OEMsU0FBUyxHQUFHLEVBQUUsVUFBVSxNQUFNLFNBQVMsR0FBRyxHQUFJLEdBQUUsSUFBSyxHQUFFLEtBQUssS0FBSyxFQUFFLFFBQU8sRUFBRyxHQUFHLEVBQUUsYUFBYSxTQUFTLEVBQUUsR0FBRyxHQUFJLEdBQUUsRUFBRSxTQUFTLE9BQU8sT0FBTyxFQUFFLFlBQVksU0FBUyxFQUFFLEVBQUUsWUFBYSxHQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsYUFBYSxDQUFFLElBQUksR0FBRSxFQUFFLGdCQUFpQixHQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsaUJBQWlCLEVBQUUsVUFBVSxFQUFFLGdCQUFnQixFQUFFLFNBQVMsRUFBRSxjQUFjLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGtCQUFrQixFQUFFLEdBQUcsRUFBRSxTQUFTLEdBQUcsR0FBRyxFQUFFLGFBQWEsTUFBTSxHQUFHLEVBQUUsYUFBYSxFQUFFLEVBQUUsTUFBTSxFQUFFLFNBQVMsR0FBRyxHQUFJLEdBQUUsRUFBRSxTQUFTLEVBQUUsRUFBRSxNQUFPLElBQUcsSUFBSSxFQUFFLFNBQVMsQ0FBQyxLQUFLLEVBQUUsU0FBUyxVQUFVLEVBQUUsU0FBUyxFQUFFLEVBQUUsT0FBUSxHQUFFLFVBQVUsS0FBSyxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUsYUFBYSxFQUFFLFNBQVMsRUFBRSxTQUFTLEtBQUssRUFBRSxVQUFVLEtBQUssRUFBRSxpQkFBZ0IsRUFBRyxFQUFFLFlBQVcsRUFBRyxFQUFFLGNBQWEsRUFBRyxFQUFFLG1CQUFrQixHQUFJLEdBQUcsU0FBUyxHQUFHLEVBQUUsUUFBUSxPQUFPLE9BQU8sTUFBTSxFQUFFLGVBQWMsQ0FBRyxJQUFJLEdBQUUsRUFBRSxTQUFTLGdCQUFpQixJQUFHLEdBQUcsRUFBRSxJQUFJLEdBQUcsU0FBUyxHQUFHLEVBQUUsT0FBTyxLQUFLLEVBQUUsYUFBYSxJQUFLLElBQUksR0FBRSxFQUFFLFNBQVMsRUFBRSxFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsR0FBRyxFQUFFLE9BQVEsR0FBRSxPQUFPLEdBQUcsRUFBRSxnQkFBZ0IsR0FBRyxFQUFFLGFBQWEsRUFBRSxFQUFFLEdBQUcsU0FBUyxFQUFFLEVBQUUsRUFBRSxHQUFHLE1BQU8sSUFBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUUsSUFBSyxFQUFFLGVBQWUsU0FBUyxFQUFFLEVBQUUsRUFBRSxHQUFHLE1BQU8sSUFBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUUsR0FBSyxJQUFJLEdBQUUsR0FBRyxFQUFFLElBQUssSUFBRyxFQUFFLFNBQVMsR0FBRyxFQUFFLE9BQU8sRUFBRSxNQUFLLEdBQUksR0FBRyxFQUFFLGFBQWEsRUFBRSxrQkFBa0IsRUFBRSxNQUFLLElBQUssR0FBRyxHQUFHLEVBQUUsZ0JBQWdCLFNBQVMsR0FBRyxHQUFJLEdBQUUsR0FBRyxFQUFFLFNBQVMsT0FBTyxFQUFHLEtBQUksSUFBRyxHQUFJLE9BQU8sS0FBSyxHQUFHLFFBQVEsU0FBUyxHQUFHLEdBQUcsRUFBRSxFQUFFLEVBQUUsTUFBTSxJQUFHLEtBQU0sR0FBRyxHQUFHLEdBQUcsU0FBUyxHQUFHLEdBQUksR0FBRSxFQUFFLFNBQVMsT0FBUSxLQUFJLEVBQUUsVUFBVSxrQkFBbUIsR0FBRSxFQUFFLEtBQUssR0FBRyxJQUFJLEdBQUcsR0FBRyxFQUFFLFdBQVcsRUFBRSxTQUFTLElBQUksRUFBRSxPQUFPLEVBQUUsU0FBUyxNQUFNLElBQUksU0FBUyxHQUFHLEdBQUksSUFBRyxJQUFJLFdBQVcsTUFBTyxNQUFLLFFBQVEsR0FBRyxJQUFJLFdBQVcsTUFBTyxNQUFLLFFBQVMsUUFBTyxlQUFlLEVBQUUsVUFBVSxRQUFRLEdBQUcsT0FBTyxlQUFlLEVBQUUsVUFBVSxTQUFTLEdBQUcsRUFBRSxVQUFVLEtBQUssR0FBRyxFQUFFLFVBQVUsUUFBUSxHQUFHLEVBQUUsVUFBVSxPQUFPLFNBQVMsRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLEdBQUcsTUFBTyxJQUFHLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxPQUFPLE1BQUssQ0FBRyxJQUFJLEdBQUUsR0FBSSxJQUFHLEtBQUssRUFBRSxFQUFFLEVBQUcsSUFBRyxFQUFFLFVBQVUsSUFBSSxFQUFFLEtBQUssS0FBSyxFQUFFLE9BQU8sTUFBTSxHQUFHLEdBQUcsRUFBRSxLQUFLLG1DQUFtQyxFQUFFLFdBQVcsS0FBSyxNQUFPLFlBQVcsRUFBRSxjQUFjLElBQUksU0FBUyxHQUFHLEdBQUksR0FBRSxRQUFTLEdBQUUsVUFBVSxJQUFJLFNBQVMsRUFBRSxHQUFHLEdBQUksR0FBRSxJQUFLLElBQUcsTUFBTSxRQUFRLEdBQUcsSUFBSSxHQUFJLEdBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLFFBQVEsRUFBRSxRQUFRLEtBQUssRUFBRSxRQUFRLFFBQVEsS0FBSyxHQUFHLEVBQUUsS0FBSyxLQUFLLEVBQUUsZUFBYyxFQUFJLE9BQU8sSUFBRyxFQUFFLFVBQVUsTUFBTSxTQUFTLEVBQUUsR0FBYyxRQUFTLEtBQUksRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxXQUE5QyxHQUFJLEdBQUUsSUFBbUQsT0FBTyxHQUFFLEdBQUcsRUFBRSxFQUFFLElBQUksRUFBRSxHQUFHLEdBQUcsRUFBRSxVQUFVLEtBQUssU0FBUyxFQUFFLEdBQUcsR0FBSSxHQUFFLElBQUssS0FBSSxVQUFVLE9BQU8sTUFBTyxHQUFFLFFBQVEsT0FBTyxPQUFPLE1BQU0sQ0FBRSxJQUFHLE1BQU0sUUFBUSxHQUFHLENBQUMsSUFBSSxHQUFJLEdBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUcsT0FBTyxHQUFFLEdBQUksR0FBRSxFQUFFLEVBQUUsUUFBUSxFQUFHLEtBQUksRUFBRSxNQUFPLEVBQUUsS0FBSSxFQUFFLE1BQU8sR0FBRSxRQUFRLEdBQUcsS0FBSyxDQUFFLEtBQUksR0FBSSxHQUFFLEVBQUUsT0FBTyxLQUFLLElBQUksRUFBRSxFQUFFLE1BQU0sR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLEVBQUcsT0FBTSxNQUFPLElBQUcsRUFBRSxVQUFVLE1BQU0sU0FBUyxHQUFHLEdBQUksR0FBRSxLQUFLLFFBQVEsRUFBRyxJQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsR0FBRyxDQUFFLEtBQUksR0FBSSxHQUFFLEVBQUUsVUFBVSxHQUFHLEVBQUUsc0JBQXNCLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLElBQUksR0FBRyxFQUFFLEdBQUcsS0FBSyxFQUFFLEtBQUssR0FBRyxNQUFPLFFBQU8sSUFBSSxTQUFTLEdBQUcsRUFBRSxVQUFVLFFBQVEsU0FBUyxFQUFFLEdBQUcsR0FBSSxHQUFFLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUcsR0FBRSxPQUFPLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsR0FBRSxHQUFJLElBQUksSUFBSSxFQUFFLFFBQVEsTUFBTSxFQUFFLE1BQU0sRUFBRSxJQUFJLFFBQVEsR0FBRyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFFBQVEsU0FBUyxFQUFFLFFBQVEsSUFBSSxFQUFFLE1BQU0sRUFBRSxVQUFVLGFBQWEsV0FBVyxLQUFLLFVBQVUsS0FBSyxTQUFTLFVBQVUsRUFBRSxVQUFVLFNBQVMsV0FBVyxHQUFJLEdBQUUsSUFBSyxLQUFJLEVBQUUsa0JBQWtCLENBQUMsR0FBRyxFQUFFLGlCQUFpQixFQUFFLG1CQUFrQixDQUFHLElBQUksR0FBRSxFQUFFLFNBQVMsR0FBRyxFQUFFLG1CQUFtQixFQUFFLFNBQVMsVUFBVSxFQUFFLEVBQUUsVUFBVSxHQUFHLEVBQUUsVUFBVSxFQUFFLFNBQVMsVUFBVyxLQUFJLEdBQUksR0FBRSxFQUFFLFVBQVUsT0FBTyxLQUFLLEVBQUUsVUFBVSxHQUFHLFVBQVcsR0FBRSxNQUFNLFFBQVEsRUFBRSxNQUFNLE9BQU8sVUFBVSxFQUFFLGNBQWEsRUFBRyxFQUFFLFVBQVUsRUFBRSxPQUFPLE1BQU0sR0FBRyxFQUFFLGFBQWEsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLElBQUksUUFBUSxNQUFNLEVBQUUsU0FBUyxFQUFFLE9BQU8sT0FBTyxTQUFTLElBQUksU0FBUyxHQUFHLEdBQUcsRUFBRSxXQUFXLEVBQUUsVUFBVSxVQUFVLFNBQVMsR0FBRyxNQUFPLElBQUcsRUFBRSxPQUFPLEVBQUUsVUFBVSxRQUFRLFdBQVcsR0FBSSxHQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsU0FBUyxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsWUFBYSxLQUFJLEVBQUUsYUFBYSxHQUFHLEVBQUUsS0FBSyxZQUFZLEVBQUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxPQUFPLENBQUUsS0FBSSxHQUFHLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUUsZ0JBQWdCLE1BQU0sR0FBRyxHQUFHLEVBQUUsRUFBRSxVQUFVLEVBQUUsRUFBRSxPQUFPLFFBQVEsR0FBRyxLQUFLLE1BQU8sT0FBTSxRQUFRLElBQUksSUFBSSxFQUFFLFNBQVMsRUFBRSxFQUFFLElBQUksWUFBYSxNQUFLLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxJQUFJLEdBQUksSUFBSSxLQUFJLE9BQU8sT0FBTyxPQUFPLElBQUksV0FBVyxLQUFLLGFBQWEsVUFBUyxFQUFHLE9BQU8sUUFBUSxHQUFHLFFBQVEsR0FBRyxLQUFLLE9BQU8sU0FBUyxRQUFRLFdBQVcsS0FBSyxNQUFNLE9BQU8sT0FBTyxNQUFNLEtBQUssU0FBUyxVQUFVLFdBQVcsSUFBSSxHQUFJLEtBQUssTUFBSyxNQUFNLEdBQUcsS0FBSyxNQUFNLEVBQUUsS0FBSyxPQUFPLFFBQVEsV0FBVyxHQUFJLEdBQUUsSUFBSyxNQUFLLE9BQU8sVUFBVSxTQUFTLEdBQUcsR0FBRyxFQUFFLFNBQVMsR0FBRyxNQUFPLElBQUcsRUFBRSxPQUFPLEtBQUssT0FBTyxVQUFVLFNBQVMsR0FBRyxHQUFHLEVBQUUsU0FBUyxHQUFHLE9BQU8sR0FBRyxFQUFFLFFBQVEsT0FBTyxXQUFXLEdBQUksR0FBRSxLQUFLLE9BQU8sUUFBUSxFQUFFLEdBQUcsR0FBRyxFQUFFLEdBQUcsRUFBRSxnQkFBaUIsSUFBRyxFQUFFLENBQUMsR0FBSSxHQUFFLEdBQUcsR0FBRyxFQUFFLEtBQUssUUFBUSxFQUFFLEtBQUssT0FBUSxJQUFHLEtBQUssSUFBSSxHQUFHLEVBQUUsS0FBSyxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsTUFBTyxFQUFFLElBQUksR0FBRSxLQUFLLE1BQU0sRUFBRSxLQUFLLEtBQUssRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEtBQUssS0FBSyxFQUFFLElBQUksS0FBSyxFQUFFLElBQUksSUFBSSxFQUFFLEdBQUksR0FBRSxJQUFJLEVBQUUsa0JBQWtCLEVBQUUsR0FBRyxrQkFBa0IsRUFBRSxFQUFFLEdBQUcsRUFBRSxLQUFLLEtBQUssRUFBRSxHQUFHLEVBQUUsRUFBRSxLQUFLLEdBQUcsS0FBSyxLQUFLLEVBQUUsT0FBTyxTQUFTLEtBQUssTUFBTSxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsS0FBSyxTQUFTLEVBQUUsS0FBSyxXQUFVLEVBQUcsTUFBTyxJQUFHLEdBQUcsRUFBRSxPQUFPLFNBQVMsR0FBRyxHQUFJLElBQUcsSUFBSSxXQUFXLE1BQU8sSUFBSSxRQUFPLGVBQWUsRUFBRSxTQUFTLEdBQUcsRUFBRSxNQUFNLEtBQUssR0FBRyxPQUFPLEVBQUUsYUFBYSxHQUFHLGVBQWUsSUFBSSxFQUFFLElBQUksR0FBRyxFQUFFLE9BQU8sR0FBRyxFQUFFLFNBQVMsR0FBRyxFQUFFLFdBQVcsU0FBUyxHQUFHLE1BQU8sSUFBRyxHQUFHLEdBQUcsRUFBRSxRQUFRLE9BQU8sT0FBTyxNQUFNLEVBQUUsUUFBUSxTQUFTLEdBQUcsRUFBRSxRQUFRLEVBQUUsS0FBSyxPQUFPLE9BQU8sUUFBUSxFQUFFLFFBQVEsTUFBTSxFQUFFLEVBQUUsRUFBRSxRQUFRLFdBQVcsSUFBSSxTQUFTLEdBQUcsRUFBRSxJQUFJLFNBQVMsR0FBRyxHQUFJLEdBQUUsS0FBSyxvQkFBb0IsS0FBSyxxQkFBc0IsSUFBRyxFQUFFLFFBQVEsSUFBSSxFQUFFLE1BQU8sS0FBSyxJQUFJLEdBQUUsRUFBRSxVQUFVLEVBQUcsT0FBTyxHQUFFLFFBQVEsTUFBTSxrQkFBbUIsR0FBRSxRQUFRLEVBQUUsUUFBUSxNQUFNLEVBQUUsR0FBRyxrQkFBbUIsSUFBRyxFQUFFLE1BQU0sS0FBSyxHQUFHLEVBQUUsS0FBSyxHQUFH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QUcsRUFBRSxhQUFhLEVBQUUsRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLElBQUksUUFBUyxHQUFFLEVBQUUsRUFBRSxHQUFHLEdBQUcsTUFBTSxRQUFRLEdBQUcsSUFBSSxHQUFJLEdBQUUsRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxJQUFJLE1BQUssRUFBRyxFQUFFLE9BQVEsR0FBRSxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFFLGVBQWUsT0FBTyxFQUFFLFFBQVEsUUFBUyxHQUFFLEdBQUcsS0FBSyxFQUFFLG1CQUFtQixFQUFFLEVBQUUsa0JBQWtCLE1BQU8sT0FBTyxHQUFFLEVBQUUsS0FBSyxRQUFTLEdBQUUsRUFBRSxHQUFHLElBQUksR0FBSSxHQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sU0FBUyxFQUFFLEVBQUUsT0FBTyxHQUFHLEdBQUcsRUFBRyxHQUFFLEVBQUUsRUFBRSxLQUFLLFFBQVEsRUFBRSxFQUFFLFNBQVMsRUFBRSxPQUFPLEdBQUcsR0FBRyxFQUFFLEVBQUUsU0FBUyxFQUFFLEtBQUssSUFBSSxRQUFTLEdBQUUsR0FBRyxHQUFJLEVBQUUsSUFBRyxFQUFFLEVBQUUsRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLElBQUksT0FBUSxLQUFJLEdBQUksR0FBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRSxTQUFTLFdBQVcsRUFBRSxjQUFjLEVBQUUsSUFBSSxHQUFHLEVBQUUsRUFBRSxNQUFPLEdBQUUsRUFBRSxLQUFLLElBQUksRUFBRSxTQUFTLElBQUksRUFBRSxXQUFXLEVBQUUsRUFBRSxFQUFFLFNBQVMsV0FBVyxFQUFFLGNBQWMsRUFBRSxJQUFJLEdBQUcsUUFBUyxHQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEtBQUssR0FBRyxJQUFJLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUUsRUFBRyxFQUFFLEdBQUcsUUFBUyxHQUFFLEdBQUcsR0FBSSxHQUFFLEVBQUUsRUFBRSxFQUFFLElBQUssSUFBRyxFQUFFLEdBQUcsSUFBSSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsUUFBUSxTQUFTLEVBQUUsRUFBRSxRQUFRLEdBQUcsRUFBRyxJQUFHLEVBQUUsRUFBRSxFQUFFLFVBQVUsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLFNBQVMsU0FBUyxFQUFFLEVBQUUsRUFBRSxTQUFTLElBQUksUUFBUyxHQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsS0FBSyxHQUFHLElBQUksRUFBRSxDQUFDLEdBQUksR0FBRSxFQUFFLEVBQUcsR0FBRSxLQUFLLEVBQUUsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLE9BQU8sUUFBUyxHQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUUsTUFBTSxDQUFDLEdBQUksR0FBRSxFQUFFLEVBQUUsT0FBTyxPQUFPLENBQUUsS0FBSSxFQUFFLEdBQUcsRUFBRSxXQUFXLEVBQUUsRUFBRSxTQUFTLEVBQUUsR0FBRyxRQUFTLEtBQUksS0FBSyxFQUFFLFdBQVcsRUFBRSxHQUFHLE1BQU8sR0FBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLElBQUksR0FBRyxFQUFFLEVBQUUsRUFBRSxvQkFBb0IsRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sU0FBUyxFQUFFLEVBQUUsT0FBTyxHQUFHLEVBQUUsRUFBRyxHQUFFLEVBQUUsRUFBRSxLQUFLLE9BQU8sRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLEVBQUUsR0FBRyxRQUFTLEdBQUUsRUFBRSxLQUFLLFFBQVMsR0FBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLElBQUksR0FBSSxHQUFFLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxHQUFJLEdBQUUsRUFBRSxFQUFHLElBQUcsRUFBRSxJQUFJLEdBQUcsRUFBRSxHQUFHLE1BQU8sSUFBRyxRQUFTLEdBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBRyxJQUFJLEVBQUUsQ0FBQyxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFLEdBQUcsR0FBRyxHQUFJLElBQUksR0FBRSxFQUFFLElBQUksRUFBRSxHQUFJLElBQUcsRUFBRSxFQUFFLG9CQUFvQixFQUFFLEVBQUUsYUFBYSxVQUFVLEVBQUUsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLG9CQUFtQixNQUFRLElBQUcsRUFBRSxFQUFFLFdBQVcsRUFBRSxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsV0FBVyxFQUFFLEVBQUUsU0FBUyxFQUFFLGtCQUFrQixFQUFFLHNCQUFzQixDQUFDLEdBQUksR0FBRSxFQUFFLEVBQUUsSUFBSyxHQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxXQUFXLEVBQUUsRUFBRSxFQUFHLElBQUksR0FBRSxFQUFFLFNBQVMsRUFBRSxFQUFFLFFBQVMsSUFBRyxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sU0FBUyxFQUFFLEVBQUUsT0FBTyxHQUFHLEVBQUUsRUFBRyxHQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FBRyxJQUFJLEdBQUcsU0FBUyxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsSUFBSSxHQUFJLEdBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLEdBQUcsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxJQUFJLEdBQUcsRUFBRSxJQUFJLElBQUksR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxJQUFJLEdBQUcsRUFBRSxJQUFJLElBQUksR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLGFBQWEsRUFBRSxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLElBQUksR0FBRyxFQUFFLElBQUksSUFBSSxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsYUFBYSxFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEdBQUcsRUFBRSxJQUFJLEtBQUssRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxLQUFJLEVBQUcsRUFBRSxHQUFHLEdBQUcsRUFBRSxFQUFFLEdBQUcsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLE9BQUcsR0FBTyxHQUFHLEVBQUUsYUFBYSxFQUFFLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEtBQUksRUFBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLEdBQUksR0FBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxJQUFJLEtBQUssRUFBRSxFQUFFLEdBQUcsSUFBSSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxJQUFJLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxHQUFHLEVBQUUsRUFBRSxPQUFPLEVBQUUsZUFBZSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLGVBQWUsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsWUFBWSxFQUFFLEVBQUUsS0FBSyxRQUFTLEdBQUUsRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLFFBQVEsRUFBRSxPQUFPLEtBQUssY0FBYyxNQUFPLEtBQUksR0FBSSxHQUFFLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxFQUFFLEdBQUcsS0FBSyxLQUFLLE9BQU8sRUFBRSxJQUF1RCxRQUFTLEdBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFJLEdBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFLFFBQVMsSUFBRyxFQUFFLEdBQUcsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLFlBQVksRUFBRSxFQUFFLGNBQWMsTUFBTyxHQUFFLG9CQUFtQixHQUFHLENBQUcsSUFBRyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsR0FBRSxHQUFJLEVBQUUsRUFBRSxFQUFFLG9CQUFvQixNQUFPLEdBQUUsRUFBRSxJQUFHLENBQUcsSUFBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsZ0JBQWdCLEdBQUcsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsV0FBVyxFQUFFLEVBQUUsRUFBRSxZQUFZLEdBQUcsSUFBSSxFQUFFLFVBQVUsT0FBTSxNQUFPLENBQUMsSUFBSSxHQUFJLElBQUUsRUFBRyxFQUFFLEVBQUUsV0FBVyxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sSUFBSSxDQUFDLElBQUksSUFBSSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUUsQ0FBRyxPQUFNLEVBQUUsRUFBRSxZQUFZLElBQUksR0FBRyxFQUFFLE9BQU0sTUFBUSxHQUFFLEVBQUUsRUFBRSxFQUFHLElBQUcsRUFBRSxHQUFHLENBQUMsR0FBSSxJQUFFLENBQUcsS0FBSSxHQUFJLEtBQUssR0FBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUUsRUFBRyxFQUFFLEVBQUUsRUFBRyxRQUFPLEdBQUcsRUFBRSxPQUFPLEdBQUcsRUFBRSxZQUFhLEdBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBTSxRQUFNLEVBQWhvSixHQUFJLEdBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxRQUFRLEVBQUUsRUFBRSxPQUFRLEtBQUksRUFBRSxFQUFFLEVBQUUsR0FBRyxTQUFTLEVBQUUsSUFBSSxFQUFFLEdBQUcsT0FBTyxFQUFFLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFHLE1BQU0sRUFBRSxHQUFHLElBQUksS0FBSyxFQUFFLEdBQUcsR0FBRyxJQUFpMkgsSUFBSSxHQUFFLEVBQUUsMENBQW9wQixPQUFPLFVBQVMsRUFBRSxFQUFFLEVBQUUsR0FBRyxJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUksR0FBRSxHQUFFLEVBQUcsSUFBSyxJQUFHLEVBQUUsR0FBRyxHQUFFLEVBQUcsRUFBRSxFQUFFLE9BQU8sQ0FBQyxHQUFJLEdBQUUsRUFBRSxFQUFFLFNBQVUsS0FBSSxHQUFHLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsS0FBSyxLQUFLLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLElBQUksRUFBRSxVQUFVLEVBQUUsYUFBYSxLQUFLLEVBQUUsZ0JBQWdCLEdBQUcsR0FBRSxHQUFJLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxHQUFHLE1BQU8sR0FBRSxFQUFFLEdBQUUsR0FBSSxDQUFFLEdBQUUsRUFBRSxFQUFFLEdBQUksSUFBRyxFQUFFLFFBQVEsR0FBRyx3QkFBb0IsR0FBTyxHQUFHLEdBQUksR0FBRSxFQUFFLElBQUksRUFBRSxFQUFFLFdBQVcsRUFBRyxJQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsU0FBUyxLQUFLLEVBQUUsRUFBRSxZQUFZLElBQUksRUFBRSxFQUFFLFFBQVEsSUFBSSxHQUFJLEdBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxHQUFHLEdBQUcsQ0FBQyxJQUFJLEdBQUksR0FBRSxFQUFFLEVBQUUsRUFBRSxRQUFRLFNBQVMsRUFBRSxFQUFFLFFBQVEsR0FBRyxFQUFHLElBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsSUFBSSxHQUFJLEdBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxTQUFTLEVBQUUsRUFBRSxPQUFPLEdBQUcsR0FBRyxFQUFHLElBQUksR0FBRSxFQUFFLEtBQUssS0FBSyxNQUFPLElBQUcsRUFBRSxPQUFPLElBQUksR0FBSSxHQUFFLEVBQUUsRUFBRSxFQUFFLElBQUksT0FBTyxJQUFJLEVBQUUsSUFBSSxTQUFVLElBQUcsRUFBRyxHQUFFLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxNQUFPLEdBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE1BQU0sUUFBUSxHQUFHLFNBQVMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsT0FBTyxHQUFHLFNBQVMsR0FBRyxPQUFPLFNBQVMsRUFBRSxJQUFHLElBQUssRUFBRSxLQUFLLEtBQUssR0FBRyxFQUFFLEdBQUcsVUFBVSxPQUFPLEtBQU0sSUFBRyxTQUFTLGlCQUFpQixrQkFBa0IsV0FBVyxHQUFJLEdBQUUsU0FBUyxhQUFjLElBQUcsRUFBRSxRQUFRLEdBQUcsRUFBRSxVQUFXLElBQUksS0FBSSxTQUFTLFNBQVMsRUFBRSxFQUFFLEVBQUUsR0FBRyxXQUFXLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxJQUFJLFVBQVUsR0FBRyxFQUFFLFlBQVksV0FBVyxHQUFHLGlCQUFpQixFQUFFLEVBQUUsS0FBSyxHQUFHLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxhQUFhLElBQUksS0FBSyxFQUFFLFFBQVEsTUFBTSxhQUFhLEVBQUUsS0FBSyxHQUFHLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsVUFBVSxPQUFPLEVBQUUsaUJBQWlCLG1CQUFtQixJQUFJLEVBQUUsaUJBQWlCLGlCQUFpQixJQUFJLEVBQUUsaUJBQWlCLFNBQVMsSUFBSSxJQUFJLEVBQUUsUUFBTyxNQUFPLGlCQUFpQixTQUFTLEVBQUUsRUFBRSxHQUFHLEdBQUcsV0FBVyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLFFBQVMsSUFBSSxHQUFFLEVBQUUsVUFBVSxFQUFFLEVBQUUsYUFBYSxJQUFJLEtBQUssRUFBRSxRQUFRLEdBQU8sR0FBRSxLQUFLLFNBQVMsRUFBRSxHQUFHLE9BQU8sRUFBRSxFQUFFLEVBQUUsUUFBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEtBQUssU0FBUyxHQUFHLE1BQU8sSUFBRyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsVUFBVSxHQUFHLEVBQUUsTUFBTSxLQUFLLEdBQUcsRUFBRSxhQUE2eEIsSUFBSSxNQUFNLEdBQUcsTUFBTSxLQUFLLFNBQVMsRUFBRSxFQUFFLEdBQUcsR0FBSSxHQUFFLEVBQUUsTUFBTSxHQUFHLEVBQUUsR0FBRyxJQUFJLE1BQU0sRUFBRSxLQUFLLFdBQVcsRUFBRSxFQUFFLG1CQUFtQixTQUFTLEVBQUUsTUFBTSxRQUFRLEdBQUcsRUFBRSxNQUFNLE9BQVEsSUFBRyxHQUFHLEVBQUUsS0FBSyxNQUFLLEVBQUcsR0FBRyxFQUFFLFdBQVcsRUFBRSxNQUFNLFFBQVEsS0FBSyxFQUFFLE1BQU0sUUFBUSxFQUFFLEVBQUUsUUFBUSxPQUFPLFNBQVMsRUFBRSxFQUFFLEdBQUcsR0FBSSxHQUFFLEVBQUUsT0FBTyxJQUFJLEVBQUUsWUFBWSxFQUFFLEdBQUcsSUFBSSxNQUFNLEVBQUUsS0FBSyxZQUFZLEVBQUUsS0FBSyxNQUFLLEVBQUcsRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLE1BQU0sUUFBUSxFQUFFLHFCQUFxQixHQUFHLEVBQUUsV0FBVyxFQUFFLE1BQU0sUUFBUSxVQUFVLEVBQUUsTUFBTSxRQUFRLEVBQUUsRUFBRSxtQkFBbUIsU0FBUyxPQUFPLFNBQVMsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLElBQUksRUFBRSxNQUFNLFFBQVEsRUFBRSx1QkFBdUIsSUFBSSxLQUFLLE9BQU8sT0FBTyxRQUFRLElBQUksUUFBUSxLQUFLLE9BQU8sS0FBSyxPQUFPLFdBQVcsT0FBTyxXQUFXLE9BQU8sYUFBYSxPQUFPLGFBQWEsT0FBTyxpQkFBaUIsT0FBTyxpQkFBaUIsT0FBTyxZQUFZLE9BQU8sa0JBQWtCLE9BQU8sY0FBYyxPQUFPLFVBQVUsT0FBTyxPQUFPLFNBQWtXLEdBQUcsU0FBUyxHQUFHLE1BQU8sR0FBRSxLQUFLLEdBQUcsSUFBSSxHQUFHLFNBQVMsR0FBRyxNQUFNLFNBQVMsRUFBRSxNQUFNLElBQUksS0FBSyxhQUFhLE1BQU0sR0FBRyxVQUFTLEVBQUcsT0FBTyxTQUFTLEdBQUcsR0FBSSxHQUFFLEtBQUssRUFBRSxLQUFLLE9BQU8sT0FBUSxJQUFHLElBQUksRUFBRSxFQUFFLE9BQU8sS0FBSyxPQUFPLENBQUMsR0FBSSxHQUFFLEtBQUssS0FBSyxFQUFFLEVBQUUsRUFBRyxJQUFHLFNBQVMsR0FBRyxLQUFLLEVBQUUsRUFBRSxRQUFRLEdBQUcsRUFBRSxLQUFLLFdBQVcsT0FBTSxHQUFJLEtBQUssUUFBUSxNQUFPLEVBQUUsSUFBSSxHQUFFLEdBQUcsRUFBRyxLQUFJLEVBQUUsTUFBTyxFQUFFLElBQUcsS0FBSyxTQUFTLE1BQU8sSUFBRyxFQUFFLEVBQUcsSUFBSSxHQUFFLGdCQUFnQixLQUFLLEtBQUssR0FBSSxHQUFFLElBQUksTUFBTSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsS0FBSyxJQUFJLE9BQU8sRUFBRSxLQUFLLFFBQVEsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxHQUFJLElBQUksSUFBRyxFQUFFLE9BQU8sRUFBRSxVQUFVLFdBQVcsR0FBRyxNQUFNLEVBQUUsS0FBSyxPQUFPLEVBQUUsR0FBRyxFQUFHLElBQUcsRUFBRSxLQUFLLFlBQVksRUFBRSxLQUFLLFdBQVcsS0FBSyxNQUFNLEVBQUUsS0FBSyxNQUFLLEdBQUksR0FBRyxFQUFFLE9BQU8sU0FBUyxFQUFFLEdBQUcsTUFBTyxHQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEdBQUcsTUFBTSxFQUFFLG9CQUFvQixFQUFFLGtCQUFrQixPQUFPLFdBQVcsQ0FBQyxHQUFJLEdBQUUsRUFBRSxLQUFLLFdBQVcsS0FBSyxFQUFHLElBQUcsV0FBVyxFQUFFLE1BQU8sTUFBSyxVQUFTLEVBQUcsR0FBRyxFQUFFLGFBQWEsV0FBVyxFQUFFLFVBQVMsRUFBRyxFQUFFLGlCQUFpQixHQUFHLEVBQUUsRUFBRyxJQUFHLFdBQVcsRUFBRSxDQUFDLEdBQUcsR0FBRyxHQUFHLE1BQU8sRUFBRSxJQUFJLEdBQUUsRUFBRSxXQUFXLElBQUssSUFBRyxFQUFFLGFBQWEsR0FBRyxHQUFHLEVBQUUsaUJBQWlCLEdBQUcsR0FBRyxFQUFFLGFBQWEsU0FBUyxHQUFHLEVBQUUsS0FBSyxNQUFPLE1BQUssR0FBRyxHQUFHLElBQUksT0FBTyxVQUFVLFFBQVEsVUFBb1csSUFBRyxJQUFLLElBQUksS0FBSSxXQUFXLEdBQUcsaUJBQWlCLE1BQU0sR0FBRyxZQUFZLFdBQVcsR0FBSSxHQUFFLEtBQUssRUFBRSxLQUFLLE9BQVEsTUFBSyxRQUFRLFNBQVMsRUFBRSxHQUFHLEdBQUksR0FBRSxHQUFHLEVBQUcsR0FBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLE1BQUssR0FBRyxHQUFJLEVBQUUsT0FBTyxFQUFFLEtBQUssSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLEtBQUssT0FBTyxTQUFTLEdBQUcsSUFBSSxHQUFJLEdBQUUsS0FBSyxLQUFLLEtBQUssT0FBTyxLQUFLLEtBQUssT0FBTyxFQUFFLE9BQU8sT0FBTyxNQUFNLEVBQUUsS0FBSyxhQUFhLEtBQUssU0FBUyxFQUFFLEtBQUssT0FBTyxZQUFZLEVBQUUsS0FBSyxZQUFZLEVBQUUsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxJQUFJLENBQUMsR0FBSSxHQUFFLEVBQUUsRUFBRyxHQUFFLEtBQUssTUFBTSxFQUFFLEtBQUssSUFBSSxPQUFPLEVBQUUsS0FBSyxRQUFRLGFBQWEsRUFBRSxLQUFLLEdBQUcsRUFBRSxFQUFFLEtBQUssR0FBRyxFQUFFLE9BQU8sRUFBRSxVQUFVLFdBQVcsR0FBRyxHQUFHLEVBQUUsQ0FBQyxJQUFJLEdBQUksTUFBSyxLQUFLLEVBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxJQUFJLENBQUMsR0FBSSxHQUFFLEVBQUUsRUFBRyxHQUFFLEtBQUssV0FBVyxFQUFFLEVBQUUsS0FBSyxJQUFJLEVBQUUsSUFBSSx3QkFBd0IsRUFBRSxFQUFFLEtBQUssRUFBRSxLQUFLLEdBQUcsRUFBRSxLQUFLLEdBQUcsS0FBSyxLQUFLLEVBQUUsRUFBRSxLQUFLLEdBQUcsS0FBSyxRQUFRLEVBQUUsTUFBTyxHQUFFLEVBQUUsS0FBSyxJQUFJLFFBQVEsV0FBVyxHQUFJLEdBQUUsS0FBSyxhQUFhLEVBQUUsS0FBSyxZQUFZLEtBQUssTUFBTSxLQUFLLE9BQVEsR0FBRSxRQUFRLEtBQUssUUFBUSxFQUFFLEdBQUcsSUFBSSxLQUFLLEVBQUUsUUFBUSxJQUFJLEVBQUUsUUFBUSxJQUFJLEVBQUUsUUFBUSxJQUFJLEtBQUssUUFBUSxTQUFTLEtBQUssYUFBYSxFQUFFLFFBQVEsU0FBUyxHQUFHLEdBQUcsRUFBRSxLQUFLLE1BQU0sQ0FBQyxHQUFJLEdBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxLQUFNLElBQUcsRUFBRSxHQUFHLEVBQUUs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QixPQUFPLFFBQVEsU0FBUyxHQUFHLFFBQVMsR0FBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLE1BQU8sR0FBRSxHQUFHLE9BQVEsSUFBSSxHQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsR0FBRSxFQUFHLFdBQVksT0FBTyxHQUFFLEdBQUcsS0FBSyxFQUFFLFFBQVEsRUFBRSxFQUFFLFFBQVEsR0FBRyxFQUFFLEdBQUUsRUFBRyxFQUFFLFFBQVEsR0FBSSxLQUFLLE9BQU8sR0FBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLFNBQVMsR0FBRyxNQUFPLElBQUcsRUFBRSxFQUFFLFNBQVMsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsSUFBSSxPQUFPLGVBQWUsRUFBRSxHQUFHLGNBQWEsRUFBRyxZQUFXLEVBQUcsSUFBSSxLQUFLLEVBQUUsRUFBRSxTQUFTLEdBQUcsR0FBSSxHQUFFLEdBQUcsRUFBRSxXQUFXLFdBQVcsTUFBTyxHQUFFLFNBQVMsV0FBVyxNQUFPLEdBQUcsT0FBTyxHQUFFLEVBQUUsRUFBRSxJQUFJLEdBQUcsR0FBRyxFQUFFLEVBQUUsU0FBUyxFQUFFLEdBQUcsTUFBTyxRQUFPLFVBQVUsZUFBZSxLQUFLLEVBQUUsSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxNQUFNLFNBQVMsRUFBRSxHQUFHLEdBQUksR0FBRSxFQUFFLFFBQVEsbUJBQW9CLFNBQVEsT0FBTyxNQUFNLEtBQUssT0FBTyxtQkFBb0IsT0FBTSxLQUFLLE1BQU0sS0FBSyxLQUFLLFNBQVMsZ0JBQWlCLGlCQUFpQixPQUFNLElBQUksSUFBSSxTQUFTLEVBQUUsR0FBRyxHQUFJLE1BQUssY0FBZSxHQUFFLFFBQVEsU0FBUyxFQUFFLEdBQUcsTUFBTyxHQUFFLEtBQUssRUFBRSxLQUFLLFNBQVMsRUFBRSxFQUFFLEdBQUcsR0FBSSxHQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsR0FBSSxHQUFFLFFBQVEsU0FBUyxHQUFHLE1BQU8sR0FBRSxFQUFFLE1BQU0sU0FBUyxFQUFFLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxHQUFHLFdBQVcsTUFBTyxJQUFHLE9BQU8sa0JBQWtCLEtBQUssSUFBSSxXQUFXLE1BQU8sTUFBSyxLQUFLLFNBQVMsRUFBRSxFQUFFLEdBQUcsR0FBSSxHQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBSSxHQUFFLFFBQVEsRUFBRSxHQUFHLFNBQVMsRUFBRSxFQUFFLEdBQUcsTUFBTyxHQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxLQUFLLFNBQVMsRUFBRSxFQUFFLEdBQUcsTUFBTyxHQUFFLEdBQUcsRUFBRSxJQUFJLFNBQVMsRUFBRSxFQUFFLEdBQUcsR0FBSSxHQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLE9BQU8sY0FBZSxHQUFFLEVBQUUsRUFBRSxHQUFHLE9BQU8sZUFBZSxTQUFTLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFFLEdBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxNQUFPLEdBQUUsRUFBRSxFQUFFLEdBQUcsTUFBTSxJQUFJLEdBQUcsT0FBUSxJQUFHLE9BQVEsR0FBRSxLQUFNLFdBQVUsMkJBQTRCLE9BQU0sU0FBVSxLQUFJLEVBQUUsR0FBRyxFQUFFLE9BQU8sSUFBSSxTQUFTLEVBQUUsRUFBRSxHQUFHLEdBQUksR0FBRSxFQUFFLElBQUksT0FBTyxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsR0FBRyxPQUFPLEVBQUUsa0JBQW1CLElBQUcsRUFBRSxRQUFRLFNBQVMsR0FBRyxNQUFPLEdBQUUsS0FBSyxFQUFFLEdBQUcsR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLEdBQUcsVUFBVSxNQUFNLE1BQU0sR0FBRyxTQUFTLEVBQUUsRUFBRSxHQUFHLEdBQUksR0FBRSxFQUFFLEVBQUcsR0FBRSxRQUFRLFNBQVMsR0FBRyxJQUFJLEVBQUUsR0FBRyxLQUFNLFdBQVUsRUFBRSxxQkFBc0IsT0FBTyxLQUFJLFNBQVMsRUFBRSxHQUFHLEVBQUUsUUFBUSxTQUFTLEdBQUcsSUFBSSxRQUFRLElBQUksTUFBTSxHQUFHLE9BQU0sS0FBTSxTQUFTLEVBQUUsR0FBRyxFQUFFLFFBQVEsU0FBUyxHQUFHLE1BQU0sZ0JBQWlCLEdBQUUsT0FBTyxFQUFFLGtCQUFtQixLQUFJLFNBQVMsRUFBRSxFQUFFLEdBQUcsR0FBSSxHQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsR0FBSSxHQUFFLFFBQVEsT0FBTyxNQUFNLFNBQVMsR0FBRyxNQUFPLEdBQUUsRUFBRSxLQUFLLFNBQVMsRUFBRSxHQUFHLEVBQUUsUUFBUSxTQUFTLEVBQUUsR0FBRyxPQUFPLGFBQWEsRUFBRSxHQUFHLGVBQWUsRUFBRSxHQUFHLFdBQVcsRUFBRSxHQUFHLE1BQU0sS0FBSyxTQUFTLEVBQUUsR0FBRyxHQUFJLEdBQUUsRUFBRSxFQUFFLEtBQUssUUFBUyxHQUFFLFFBQVEsU0FBUyxHQUFHLE1BQU0sVUFBVSxXQUFPLEtBQVMsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEdBQUcsU0FBUyxPQUFPLFNBQVMsRUFBRSxHQUFHLEdBQUksR0FBRSxFQUFFLFNBQVMsUUFBUSxRQUFTLGlCQUFpQixPQUFNLElBQUksSUFBSSxTQUFTLEVBQUUsR0FBRyxFQUFFLFFBQVEsU0FBUyxHQUFHLE9BQUcsSUFBUSxFQUFFLEtBQU0sV0FBVSx5QkFBeUIsRUFBRyxPQUFPLEtBQUksU0FBUyxFQUFFLEdBQUcsRUFBRSxRQUFRLGdHQUFnRyxNQUFNLE1BQU0sU0FBUyxFQUFFLEdBQUcsRUFBRSxZQUFZLFNBQVMsRUFBRSxHQUFHLEVBQUUsU0FBUSxHQUFJLFNBQVMsRUFBRSxHQUFHLEVBQUUsS0FBSyxzQkFBc0IsU0FBUyxFQUFFLEVBQUUsR0FBRyxHQUFJLEdBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsY0FBZSxHQUFFLFFBQVEsU0FBUyxFQUFFLEVBQUUsR0FBRyxJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxVQUFVLElBQUksRUFBRSxFQUFFLEdBQUcsY0FBYSxFQUFHLE1BQU0sTUFBTSxTQUFTLEVBQUUsRUFBRSxHQUFHLEdBQUksR0FBRSxFQUFFLElBQUksUUFBUSxFQUFFLEVBQUUsR0FBSSxHQUFFLFFBQVEsU0FBUyxHQUFHLE1BQU8sR0FBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLE1BQU0sU0FBUyxFQUFFLEVBQUUsR0FBRyxHQUFJLEdBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSx3QkFBd0IsRUFBRSx5QkFBMEIsR0FBRSxRQUFRLFNBQVMsR0FBRyxNQUFPLEdBQUUsS0FBSyxFQUFFLFNBQVMsU0FBUyxFQUFFLEdBQUcsR0FBSSxHQUFFLEtBQUssS0FBSyxFQUFFLEtBQUssS0FBTSxHQUFFLFFBQVEsU0FBUyxHQUFHLE1BQU8sT0FBTSxHQUFHLEdBQUcsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEtBQUssU0FBUyxFQUFFLEVBQUUsR0FBRyxHQUFJLEdBQUUsRUFBRSxFQUFHLEdBQUUsUUFBUSxTQUFTLEVBQUUsR0FBRyxJQUFJLEVBQUUsR0FBRyxNQUFPLEVBQUUsSUFBSSxHQUFFLENBQUUsSUFBRyxHQUFHLG1CQUFtQixFQUFFLEVBQUUsWUFBWSxFQUFFLEVBQUUsRUFBRSxLQUFLLElBQUksTUFBTyxFQUFFLElBQUcsbUJBQW1CLEVBQUUsRUFBRSxXQUFXLEVBQUUsRUFBRSxFQUFFLEtBQUssSUFBSSxNQUFPLEVBQUUsS0FBSSxHQUFHLG1CQUFtQixFQUFFLEVBQUUsWUFBWSxFQUFFLEVBQUUsRUFBRSxLQUFLLElBQUksTUFBTyxFQUFFLE1BQU0sV0FBVSw2Q0FBNkMsU0FBUyxFQUFFLEVBQUUsR0FBRyxHQUFJLEdBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxHQUFHLENBQUUsR0FBRSxRQUFRLFNBQVMsR0FBRyxHQUFJLEdBQUUsRUFBRSxTQUFTLEVBQUUsT0FBTyxLQUFLLEVBQUUsV0FBWSxNQUFLLEVBQUUsT0FBTyxJQUFJLElBQUssSUFBRyxFQUFFLEVBQUUsR0FBRyxNQUFNLEVBQUUsRUFBRSxPQUFPLFNBQVMsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsSUFBSSxTQUFTLEVBQUUsRUFBRSxHQUFHLFlBQWEsR0FBRSxHQUFHLGNBQWMsSUFBSSxTQUFTLFlBQVksUUFBUSxVQUFVLFdBQVcsWUFBWSxRQUFRLFFBQVEsTUFBTSxRQUFRLFFBQVEsV0FBVyxZQUFZLFVBQVUsV0FBVyxZQUFZLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLFFBQVEsTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxRQUFRLElBQUksU0FBUyxTQUFTLEtBQUksRUFBRyxRQUFRLFVBQVUsUUFBUSxTQUFTLE9BQU8sUUFBUSxPQUFPLFFBQVEsUUFBUSxRQUFRLFNBQVMsU0FBUyxTQUFTLFVBQVUsTUFBTSxRQUFRLFNBQVMsT0FBTyxRQUFRLE9BQU8sUUFBUSxRQUFRLFFBQVEsU0FBUyxTQUFTLFNBQVMsV0FBVyxNQUFNLE1BQU0sUUFBUSxTQUFTLFNBQVMsT0FBTyxPQUFPLFFBQVEsSUFBSSxTQUFTLFlBQVksUUFBUSxVQUFVLFNBQVMsV0FBVyxPQUFPLFFBQVEsTUFBTSxNQUFNLE1BQU0sU0FBUyxZQUFZLFdBQVcsVUFBVSxZQUFZLE1BQU0sS0FBSyxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLFFBQVEsTUFBTSxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxPQUFPLElBQUksU0FBUyxVQUFVLFFBQVEsVUFBVSxTQUFTLFVBQVUsT0FBTyxRQUFRLE1BQU0sT0FBTyxPQUFPLFNBQVMsWUFBWSxVQUFVLFdBQVcsWUFBWSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxRQUFRLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sUUFBUSxJQUFJLFNBQVMsUUFBUSxRQUFRLFVBQVUsUUFBUSxPQUFPLFNBQVMsUUFBUSxTQUFTLFNBQVMsV0FBVyxRQUFRLE9BQU8sUUFBUSxXQUFXLFlBQVksTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sUUFBUSxNQUFNLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLE9BQU8sSUFBSSxTQUFTLFNBQVMsUUFBUSxVQUFVLFNBQVMsVUFBVSxRQUFRLFFBQVEsTUFBTSxPQUFPLE9BQU8sU0FBUyxZQUFZLFVBQVUsV0FBVyxZQUFZLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLFFBQVEsTUFBTSxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxPQUFPLElBQUksU0FBUyxTQUFTLFFBQVEsVUFBVSxTQUFTLFVBQVUsT0FBTyxRQUFRLE1BQU0sT0FBTyxPQUFPLFNBQVMsWUFBWSxVQUFVLFdBQVcsWUFBWSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxRQUFRLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sUUFBUSxJQUFJLFNBQVMsV0FBVyxRQUFRLFVBQVUsVUFBVSxXQUFXLFFBQVEsU0FBUyxNQUFNLFFBQVEsUUFBUSxTQUFTLFlBQVksV0FBVyxXQUFXLGFBQWEsTUFBTSxPQUFPLFFBQVEsUUFBUSxNQUFNLE1BQU0sUUFBUSxRQUFRLE1BQU0sT0FBTyxNQUFNLE1BQU0sU0FBUyxNQUFNLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLE1BQU0sSUFBSSxTQUFTLFFBQVEsUUFBUSxVQUFVLGFBQWEsY0FBYyxVQUFVLFdBQVcsUUFBUSxVQUFVLFVBQVUsWUFBWSxjQUFjLFlBQVksWUFBWSxjQUFjLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE9BQU8sT0FBTyxNQUFNLE1BQU0sTUFBTSxNQUFNLFFBQVEsTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxRQUFRLElBQUksU0FBUyxVQUFVLFFBQVEsVUFBVSxVQUFVLFdBQVcsUUFBUSxRQUFRLE1BQU0sT0FBTyxPQUFPLFNBQVMsWUFBWSxVQUFVLFdBQVcsWUFBWSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxRQUFRLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sUUFBUSxJQUFJLFNBQVMsVUFBVSxRQUFRLFVBQVUsUUFBUSxVQUFVLFFBQVEsUUFBUSxPQUFPLFFBQVEsUUFBUSxTQUFTLGFBQWEsVUFBVSxZQUFZLGFBQWEsTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sUUFBUSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLFFBQVEsSUFBSSxTQUFTLFVBQVUsUUFBUSxVQUFVLFFBQVEsU0FBUyxPQUFPLFFBQVEsT0FBTyxPQUFPLFNBQVMsUUFBUSxXQUFXLFVBQVUsV0FBVyxZQUFZLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLFFBQVEsTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxRQUFRLElBQUksU0FBUyxTQUFTLFFBQVEsVUFBVSxXQUFXLFdBQVcsWUFBWSxXQUFXLFdBQVcsVUFBVSxXQUFXLFNBQVMsVUFBVSxVQUFVLFlBQVksWUFBWSxNQUFNLFFBQVEsUUFBUSxTQUFTLFFBQVEsUUFBUSxPQUFPLFFBQVEsTUFBTSxPQUFPLE9BQU8sU0FBUyxVQUFVLE1BQU0sS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssT0FBTyxJQUFJLFNBQVMsU0FBUyxRQUFRLFVBQVUsVUFBVSxVQUFVLE9BQU8sUUFBUSxNQUFNLE9BQU8sVUFBVSxPQUFPLFlBQVksVUFBVSxXQUFXLFlBQVksTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sT0FBTyxPQUFPLE9BQU8sTUFBTSxNQUFNLE1BQU0sUUFBUSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLFFBQVEsSUFBSSxTQUFTLFVBQVUsUUFBUSxVQUFVLFVBQVUsWUFBWSxRQUFRLFNBQVMsUUFBUSxTQUFTLFNBQVMsVUFBVSxhQUFhLFlBQVksV0FBVyxhQUFhLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLFFBQVEsTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxRQUFRLElBQUksU0FBUyxXQUFXLEtBQUksRUFBRyxRQUFRLFVBQVUsS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssTUFBTSxNQUFNLE9BQU8sTUFBTSxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxNQUFNLE1BQU0sUUFBUSxNQUFNLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLE1BQU0sSUFBSSxTQUFTLFNBQVMsS0FBSSxFQUFHLFFBQVEsVUFBVSxRQUFRLFNBQVMsTUFBTSxRQUFRLE1BQU0sT0FBTyxPQUFPLFNBQVMsU0FBUyxVQUFVLFNBQVMsU0FBUyxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxRQUFRLE1BQU0sSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksTUFBTSxJQUFJLFNBQVMsWUFBWSxLQUFJLEVBQUcsUUFBUSxVQUFVLFNBQVMsVUFBVSxVQUFVLFVBQVUsUUFBUSxTQUFTLFNBQVMsWUFBWSxhQUFhLFVBQVUsV0FBVyxZQUFZLE1BQU0sTUFBTSxPQUFPLE9BQU8sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLFFBQVEsTUFBTSxNQUFNLFFBQVEsTUFBTSxNQUFNLE1BQU0sS0FBSyxNQUFNLE1BQU0sTUFBTSxRQUFRLElBQUksU0FBUyxXQUFXLFFBQVEsVUFBVSxXQUFXLFVBQVUsU0FBUyxVQUFVLFVBQVUsU0FBUyxTQUFTLFVBQVUsUUFBUSxXQUFXLFVBQVUsWUFBWSxNQUFNLE1BQU0sT0FBTyxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxRQUFRLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sUUFBUSxJQUFJLFNBQVMsYUFBYSxRQUFRLFVBQVUsVUFBVSxXQUFXLFFBQVEsUUFBUSxNQUFNLE9BQU8sT0FBTyxVQUFVLFlBQVksVUFBVSxXQUFXLFlBQVksTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sUUFBUSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLFFBQVEsSUFBSSxTQUFTLFVBQVUsUUFBUSxVQUFVLFVBQVUsV0FBVyxRQUFRLFNBQVMsU0FBUyxTQUFTLFNBQVMsU0FBUyxZQUFZLFVBQVUsV0FBVyxZQUFZLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLFFBQVEsTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxRQUFRLElBQUksU0FBUyxZQUFZLFFBQVEsVUFBVSxTQUFTLFVBQVUsT0FBTyxRQUFRLE1BQU0sT0FBTyxPQUFPLFFBQVEsWUFBWSxVQUFVLFdBQVcsWUFBWSxNQUFNLE1BQU0sTUFBTSxPQUFPLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxRQUFRLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sUUFBUSxJQUFJLFNBQVMsVUFBVSxRQUFRLFVBQVUsVUFBVSxXQUFXLFFBQVEsTUFBTSxRQUFRLFNBQVMsTUFBTSxPQUFPLE1BQU0sS0FBSyxPQUFPLFNBQVMsTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxLQUFLLE1BQU0sUUFBUSxNQUFNLFNBQVMsU0FBUyxVQUFVLFdBQVcsVUFBVSxPQUFPLFNBQVMsSUFBSSxTQUFTLFNBQVMsS0FBSSxFQUFHLFFBQVEsVUFBVSxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxNQUFNLE1BQU0sT0FBTyxNQUFNLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLE1BQU0sTUFBTSxRQUFRLE1BQU0sSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksTUFBTSxJQUFJLFNBQVMsZ0JBQWdCLFFBQVEsVUFBVSxTQUFTLFVBQVUsUUFBUSxTQUFTLE1BQU0sT0FBTyxPQUFPLFNBQVMsWUFBWSxVQUFVLFdBQVcsWUFBWSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxRQUFRLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sUUFBUSxJQUFJLFNBQVMsYUFBYSxLQUFJLEVBQUcsUUFBUSxVQUFVLFNBQVMsVUFBVSxRQUFRLFdBQVcsU0FBUyxXQUFXLFFBQVEsWUFBWSxXQUFXLFNBQVMsWUFBWSxXQUFXLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxPQUFPLE9BQU8sTUFBTSxNQUFNLFFBQVEsTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxRQUFRLElBQUksU0FBUyxVQUFVLFFBQVEsVUFBVSxXQUFXLFlBQVksUUFBUSxVQUFVLFFBQVEsU0FBUyxTQUFTLFVBQVUsYUFBYSxXQUFXLFlBQVksYUFBYSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxRQUFRLE1BQU0sS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssT0FBTyxJQUFJLFNBQVMsV0FBVyxLQUFJLEVBQUcsUUFBUSxVQUFVLGVBQWUsZUFBZSxlQUFlLGVBQWUsZUFBZSxlQUFlLGVBQWUsZUFBZSxlQUFlLGdCQUFnQixnQkFBZ0IsaUJBQWlCLE1BQU0sVUFBVSxVQUFVLFVBQVUsVUFBVSxVQUFVLFVBQVUsVUFBVSxVQUFVLFVBQVUsV0FBVyxXQUFXLGFBQWEsTUFBTSxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxPQUFPLElBQUksU0FBUyxRQUFRLFFBQVEsVUFBVSxVQUFVLFdBQVcsUUFBUSxRQUFRLE1BQU0sT0FBTyxPQUFPLFdBQVcsWUFBWSxVQUFVLFdBQVcsWUFBWSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxRQUFRLE1BQU0sS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssT0FBTyxTQUFTLFNBQVMsbUJBQW1CLFFBQVEsVUFBVSxTQUFTLFVBQVUsT0FBTyxRQUFRLE1BQU0sT0FBTyxPQUFPLFNBQVMsWUFBWSxVQUFVLFdBQVcsWUFBWSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxRQUFRLE1BQU0sS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssT0FBTyxJQUFJLFNBQVMsU0FBUyxRQUFRLFVBQVUsVUFBVSxPQUFPLFNBQVMsV0FBVyxNQUFNLFdBQVcsU0FBUyxXQUFXLFdBQVcsY0FBYyxXQUFXLFlBQVksTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sUUFBUSxNQUFNLEtBQUssS0FBSyxLQUFLLEtBQUssTUFBTSxLQUFLLFFBQVEsU0FBUyxTQUFTLFlBQVksUUFBUSxVQUFVLFVBQVUsWUFBWSxRQUFRLFFBQVEsT0FBTyxRQUFRLFFBQVEsU0FBUyxXQUFXLFVBQVUsV0FBVyxZQUFZLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLFFBQVEsTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxRQUFRLElBQUksU0FBUyxXQUFXLFFBQVEsVUFBVSxXQUFXLFlBQVksU0FBUyxVQUFVLE1BQU0sUUFBUSxRQUFRLFNBQVMsYUFBYSxZQUFZLFlBQVksYUFBYSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxRQUFRLE1BQU0sSUFBSSxJQUFJLEtBQUssS0FBSyxJQUFJLElBQUksTUFBTSxJQUFJLFNBQVMsVUFBVSxRQUFRLFVBQVUsU0FBUyxVQUFVLE9BQU8sU0FBUyxNQUFNLE9BQU8sT0FBTyxTQUFTLFdBQVcsVUFBVSxTQUFTLFdBQVcsTUFBTSxNQUFNLE9BQU8sT0FBTyxNQUFNLE1BQU0sT0FBTyxPQUFPLE1BQU0sT0FBTyxNQUFNLE9BQU8sUUFBUSxNQUFNLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLE9BQU8sSUFBSSxTQUFTLFVBQVUsUUFBUSxVQUFVLFVBQVUsV0FBVyxPQUFPLFFBQVEsTUFBTSxPQUFPLE9BQU8sVUFBVSxZQUFZLFVBQVUsV0FBVyxZQUFZLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLFFBQVEsTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxRQUFRLElBQUksU0FBUyxZQUFZLFFBQVEsVUFBVSxTQUFTLFVBQVUsUUFBUSxRQUFRLE1BQU0sTUFBTSxNQUFNLFNBQVMsWUFBWSxVQUFVLFdBQVcsWUFBWSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxRQUFRLE1BQU0sS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssT0FBTyxTQUFTLFNBQVMsV0FBVyxRQUFRLFVBQVUsU0FBUyxVQUFVLFFBQVEsUUFBUSxNQUFNLFFBQVEsUUFBUSxTQUFTLFlBQVksVUFBVSxXQUFXLFlBQVksTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sUUFBUSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLFFBQVEsSUFBSSxTQUFTLFVBQVUsUUFBUSxVQUFVLFNBQVMsVUFBVSxPQUFPLFFBQVEsTUFBTSxNQUFNLE1BQU0sU0FBUyxZQUFZLFVBQVUsV0FBVyxZQUFZLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLFFBQVEsTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxRQUFRLFdBQVcsU0FBUyw2QkFBNkIsUUFBUSxVQUFVLFNBQVMsVUFBVSxPQUFPLFFBQVEsTUFBTSxNQUFNLE1BQU0sU0FBUyxZQUFZLFVBQVUsV0FBVyxZQUFZLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLFFBQVEsTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxRQUFRLElBQUksU0FBUyxPQUFPLFFBQVEsVUFBVSxTQUFTLGFBQWEsU0FBUyxTQUFTLFVBQVUsV0FBVyxVQUFVLFVBQVUsVUFBVSxTQUFTLFlBQVksV0FBVyxNQUFNLE9BQU8sT0FBTyxRQUFRLFFBQVEsT0FBTyxRQUFRLE9BQU8sT0FBTyxPQUFPLE9BQU8sT0FBTyxTQUFTLE1BQU0sS0FBSyxJQUFJLElBQUksSUFBSSxLQUFLLElBQUksTUFBTSxJQUFJLFNBQVMsVUFBVSxRQUFRLFVBQVUsT0FBTyxRQUFRLE9BQU8sUUFBUSxRQUFRLFVBQVUsU0FBUyxVQUFVLFFBQVEsT0FBTyxRQUFRLFVBQVUsTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sUUFBUSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLFFBQVEsSUFBSSxTQUFTLFVBQVUsUUFBUSxVQUFVLFNBQVMsUUFBUSxXQUFXLFVBQVUsVUFBVSxVQUFVLFNBQVMsVUFBVSxXQUFXLFVBQVUsV0FBVyxXQUFXLE1BQU0sTUFBTSxNQUFNLE1BQU0sT0FBTyxPQUFPLE1BQU0sTUFBTSxPQUFPLE1BQU0sT0FBTyxPQUFPLFNBQVMsTUFBTSxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxPQUFPLElBQUksU0FBUyxPQUFPLEtBQUksRUFBRyxRQUFRLFVBQVUsUUFBUSxRQUFRLE9BQU8sUUFBUSxNQUFNLE1BQU0sU0FBUyxPQUFPLFNBQVMsU0FBUyxRQUFRLFNBQVMsTUFBTSxRQUFRLFFBQVEsT0FBTyxRQUFRLE1BQU0sTUFBTSxTQUFTLE9BQU8sU0FBUyxTQUFTLFFBQVEsVUFBVSxNQUFNLFFBQVEsTUFBTSxPQUFPLE1BQU0sU0FBUyxPQUFPLFNBQVMsSUFBSSxTQUFTLGNBQWMsUUFBUSxVQUFVLFVBQVUsVUFBVSxVQUFVLFVBQVUsVUFBVSxVQUFVLFVBQVUsVUFBVSxVQUFVLFdBQVcsV0FBVyxZQUFZLE1BQU0sT0FBTyxPQUFPLE9BQU8sT0FBTyxPQUFPLE9BQU8sT0FBTyxPQUFPLE9BQU8sT0FBTyxPQUFPLFNBQVMsTUFBTSxLQUFLLFFBQVEsUUFBUSxRQUFRLFFBQVEsUUFBUSxVQUFVLElBQUksU0FBUyxVQUFVLEtBQUksRUFBRyxRQUFRLFVBQVUsS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxNQUFNLE9BQU8sTUFBTSxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLE1BQU0sUUFBUSxNQUFNLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLFNBQVMsU0FBUyxFQUFFLEdBQUcsR0FBSSxNQUFLLFFBQVMsR0FBRSxRQUFRLFNBQVMsR0FBRyxNQUFPLEdBQUUsS0FBSyxHQUFHLE1BQU0sR0FBRyxLQUFLLFNBQVMsRUFBRSxFQUFFLEdBQUcsR0FBSSxHQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxTQUFTLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxjQUFlLEdBQUUsUUFBUSxTQUFTLEdBQUcsTUFBTyxHQUFFLEVBQUUsY0FBYyxRQUFRLFNBQVMsRUFBRSxFQUFFLEdBQUcsR0FBSSxHQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxFQUFFLEdBQUcsR0FBSSxHQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxTQUFVLEtBQUksRUFBRSxFQUFHLEtBQUksSUFBSyxJQUFHLEdBQUcsR0FBRyxPQUFHLEtBQVMsRUFBRSxLQUFLLElBQUssS0FBSSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsR0FBRyxrQkFBbUIsR0FBRSxHQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLElBQUksRUFBRSxTQUFTLEdBQUcsR0FBSSxHQUFFLFNBQVMsRUFBRSxFQUFFLEdBQUcsR0FBRyxlQUFnQixHQUFFLENBQUMsT0FBTyxVQUFVLFFBQVEsSUFBSyxHQUFFLE1BQU8sSUFBSSxFQUFFLEtBQUssR0FBRSxNQUFPLElBQUksR0FBRSxFQUFHLEtBQUssR0FBRSxNQUFPLElBQUksR0FBRSxFQUFFLEdBQUcsTUFBTyxJQUFJLEdBQUUsRUFBRSxFQUFFLEdBQUcsTUFBTyxHQUFFLE1BQU0sS0FBSyxXQUFZLE9BQU8sR0FBRSxVQUFVLEVBQUUsVUFBVSxHQUFHLEdBQUcsR0FBRyxrQkFBbUIsR0FBRSxFQUFFLFNBQVMsS0FBSyxHQUFHLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxhQUFhLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxJQUFJLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxLQUFNLEdBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxHQUFHLFNBQVMsRUFBRSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLEdBQUcsV0FBVyxNQUFPLElBQUcsT0FBTyxlQUFlLEVBQUUsSUFBSSxPQUFPLEtBQUssSUFBSSxXQUFXLE1BQU8sTUFBSyxLQUFLLFNBQVMsRUFBRSxFQUFFLEdBQUcsWUFBYSxJQUFJLEdBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxHQUFHLFlBQVksT0FBTyxNQUFNLFdBQVcsUUFBUSxFQUFFLFdBQVcsTUFBTyxNQUFNLEdBQUUsUUFBUSxTQUFTLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRyxJQUFJLEdBQUUsRUFBRSxFQUFFLEVBQUUsU0FBUyxHQUFHLElBQUksR0FBRyxJQUFLLEdBQUUsTUFBTyxHQUFFLEVBQUcsUUFBTyxHQUFHLElBQUksT0FBTyxJQUFJLFNBQVMsTUFBTyxZQUFXLE1BQU8sSUFBSSxHQUFFLEtBQUssSUFBSSxNQUFPLFlBQVcsTUFBTyxJQUFJLEdBQUUsS0FBSyxLQUFLLEVBQUUsRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLEdBQUUsRUFBRyxFQUFFLEVBQUUsVUFBVSxFQUFFLEVBQUUsSUFBSSxFQUFFLGVBQWUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLFdBQVcsTUFBRSxHQUFPLEVBQUUsU0FBUyxFQUFFLEVBQUUsU0FBUyxFQUFFLENBQUUsSUFBRyxJQUFJLEVBQUUsRUFBRSxFQUFFLEtBQUssR0FBSSxRQUFPLE9BQU8sWUFBWSxFQUFFLEVBQUUsR0FBRSxHQUFJLEdBQUcsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsSUFBSSxHQUFHLEdBQUcsV0FBVyxFQUFFLE9BQU8sR0FBRSxFQUFHLEVBQUUsV0FBVyxNQUFPLEdBQUUsS0FBSyxRQUFRLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsT0FBTyxFQUFFLEVBQUUsRUFBRSxVQUFVLEtBQUssRUFBRSxFQUFFLEVBQUUsUUFBUSxRQUFRLEdBQUcsRUFBRSxJQUFJLElBQUssR0FBRSxJQUFLLElBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxRQUFTLEdBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxFQUFHLE9BQU8sS0FBSSxTQUFTLEVBQUUsRUFBRSxHQUFHLEdBQUksR0FBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLElBQUksWUFBWSxFQUFFLGFBQWEsRUFBRSxXQUFXLEdBQUksR0FBRSxFQUFFLEVBQUUsSUFBSSxVQUFVLEVBQUUsRUFBRSxNQUFPLEtBQUksRUFBRSxNQUFNLFFBQVEsT0FBTyxFQUFFLElBQUksWUFBWSxHQUFHLEVBQUUsSUFBSSxjQUFjLEVBQUUsRUFBRSxjQUFjLFNBQVMsRUFBRSxPQUFPLEVBQUUsTUFBTSx1Q0FBdUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLFdBQVksR0FBRSxVQUFVLEVBQUUsR0FBSSxPQUFPLEtBQUssR0FBRSxRQUFRLE9BQU8sUUFBUSxTQUFTLEVBQUUsR0FBRyxHQUFJLEVBQUUsT0FBTyxRQUFPLEdBQUcsRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLEdBQUksR0FBRSxFQUFFLFVBQVUsS0FBSyxFQUFFLEdBQUcsR0FBRyxFQUFFLFFBQUksS0FBUyxFQUFFLEVBQUUsRUFBRSxFQUFFLEtBQUssU0FBUyxFQUFFLEVBQUUsR0FBRyxHQUFJLEdBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxJQUFJLE9BQU8sU0FBUyxZQUFhLEdBQUUsRUFBRSxPQUFPLHFCQUFxQixTQUFTLEdBQUcsTUFBTyxHQUFFLEVBQUUsS0FBSyxTQUFTLEVBQUUsR0FBRyxFQUFFLEVBQUUsT0FBTyx1QkFBdUIsU0FBUyxFQUFFLEVBQUUsR0FBRyxHQUFJLEdBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxLQUFJLEdBQUksRUFBRSxFQUFFLElBQUksV0FBWSxHQUFFLFFBQVEsU0FBUyxFQUFFLEdBQUcsR0FBSSxHQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxJQUFLLEtBQUksSUFBSyxHQUFFLEdBQUcsR0FBRyxFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRyxNQUFLLEVBQUUsT0FBTyxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssR0FBSSxPQUFPLEtBQUksU0FBUyxFQUFFLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxJQUFJLFNBQVMsRUFBRSxFQUFFLEdBQUcsWUFBYSxRQUFPLGVBQWUsRUFBRSxjQUFjLE9BQU0sR0FBSyxJQUFJLEdBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxHQUFJLEdBQUUsU0FBUyxPQUFPLE9BQU8sVUFBVSxTQUFTLEdBQUcsTUFBTyxRQUFPLEdBQUcsWUFBYSxPQUFNLGdCQUFpQixJQUFHLGdCQUFpQixLQUFJLEtBQUssT0FBTyxRQUFRLE9BQU8sR0FBRyxPQUFPLFFBQVEsTUFBTSxPQUFPLFVBQVUsUUFBUSxlQUFlLFVBQVUsS0FBSyxPQUFPLFFBQVEsTUFBTSxVQUFVLFVBQVUsU0FBUyxHQUFHLE1BQU8sUUFBTyxHQUFHLFlBQWEsT0FBTSxnQkFBaUIsS0FBSSxjQUFjLFFBQVEsU0FBUyxPQUFPLFlBQVksT0FBTyxZQUFZLE9BQU8sT0FBTyxRQUFRLGVBQWUsT0FBTyxRQUFRLFlBQVksT0FBTyxRQUFRLGNBQWMsT0FBTyxRQUFRLFlBQVksUUFBUSxZQUFZLFFBQVEsZ0JBQWdCLE9BQU8sZUFBZSxRQUFRLG1CQUFtQixPQUFPLDBCQUEwQixPQUFPLGlCQUFpQixRQUFRLFlBQVksT0FBTyxlQUFlLFFBQVEsU0FBUyxRQUFRLGFBQWEsS0FBSyxPQUFPLFFBQVEsT0FBTyxhQUFhLEtBQUssT0FBTyxRQUFRLFNBQVMsS0FBSyxXQUFXLE9BQU8sZUFBZSxLQUFLLFNBQVMsR0FBSSxNQUFLLEtBQUssVUFBVSxHQUFJLE9BQU0sUUFBUSxHQUFHLGFBQWEsS0FBSyxhQUFZLEVBQUcsZUFBYyxFQUFHLGNBQWEsRUFBRyxlQUFlLElBQUksT0FBTyxNQUFNLFNBQVMsR0FBRyxLQUFLLFNBQVMsSUFBSSxTQUFTLFdBQVcsS0FBSyxlQUFlLFlBQVksV0FBVyxLQUFLLG1CQUFtQixVQUFVLG9CQUFvQixXQUFXLE1BQU8sTUFBSyxZQUFZLEtBQUssWUFBWSxLQUFLLGFBQWEsU0FBUyxXQUFXLE1BQU8sSUFBSSxNQUFLLEtBQUssZ0JBQWdCLGVBQWUsV0FBVyxNQUFPLE1BQUssYUFBYSxrQkFBbUIsTUFBSyxPQUFPLEtBQUssT0FBTyxLQUFLLGNBQWMsRUFBRSxFQUFFLFdBQVcsR0FBSSxNQUFLLEtBQUssY0FBYyxLQUFLLE9BQU8sS0FBSyxhQUFhLE1BQU0sWUFBWSxXQUFXLE1BQU8sR0FBRSxFQUFFLGFBQWEsS0FBSyxXQUFXLGNBQWMsV0FBVyxHQUFJLEdBQUUsS0FBSyxjQUFjLEtBQUssWUFBWSxPQUFPLFNBQVMsS0FBSyxZQUFZLE9BQU8sSUFBSyxPQUFPLEdBQUUsRUFBRSxpQkFBaUIsS0FBSyxTQUFTLFdBQVcsSUFBSSxTQUFTLFdBQVcsTUFBTyxNQUFLLFNBQVMsZUFBZSxVQUFVLFdBQVcsR0FBSSxHQUFFLEtBQUssU0FBUyxFQUFFLEdBQUksTUFBSyxFQUFFLGNBQWMsRUFBRSxXQUFXLEVBQUUsRUFBRSxXQUFXLEVBQUUsYUFBYyxPQUFPLE1BQUssWUFBWSxFQUFFLFNBQVMsRUFBRSxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUUsVUFBVSxXQUFXLFdBQVcsR0FBRyxLQUFLLFlBQVksQ0FBQyxHQUFJLEdBQUUsS0FBSyxZQUFZLEtBQUssT0FBUSxPQUFPLEdBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFPLE1BQUssWUFBWSxNQUFNLEtBQUssV0FBVyxJQUFJLEdBQUksR0FBRSxLQUFLLFNBQVMsS0FBSyxFQUFFLEdBQUksTUFBSyxFQUFFLGNBQWMsRUFBRSxXQUFXLEVBQUUsRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLEVBQUUsRUFBRSxZQUFZLEVBQUUsY0FBYyxFQUFFLFlBQVksRUFBRSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsTUFBTSxLQUFLLEVBQUUsVUFBVSxVQUFVLEVBQUUsVUFBVSxXQUFXLEtBQUssZUFBZSxHQUFHLFdBQVcsS0FBSyxlQUFlLEdBQUcsY0FBYyxLQUFLLGtCQUFrQixHQUFHLGlCQUFpQixLQUFLLGlCQUFpQixHQUFHLGVBQWUsS0FBSyxlQUFlLEdBQUcsUUFBUSxFQUFFLGtCQUFpQixHQUFLLE9BQU0sZUFBZSxVQUFVLElBQUksRUFBRSxVQUFVLElBQUksRUFBRSxTQUFTLFdBQVcsSUFBSSxFQUFFLFNBQVMsU0FBUyxJQUFJLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUcsT0FBTyxJQUFHLE9BQU8sV0FBVyxJQUFJLEdBQUksR0FBRSxLQUFLLFNBQVMsS0FBSyxFQUFFLEdBQUksTUFBSyxFQUFFLGNBQWMsRUFBRSxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLEVBQUUsRUFBRSxHQUFHLElBQUksRUFBRSxNQUFNLE1BQU0sRUFBRSxFQUFFLGFBQWEsRUFBRSxLQUFLLFlBQVksT0FBTyxVQUFVLFVBQVUsRUFBRSxVQUFVLFdBQVcsS0FBSyxnQkFBZ0IsR0FBRyxXQUFXLEtBQUssZ0JBQWdCLEtBQUssRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFHLE9BQU8sSUFBRyxNQUFNLFdBQVcsSUFBSSxHQUFJLEdBQUUsS0FBSyxTQUFTLEtBQUssRUFBRSxHQUFJ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V0FBWSxJQUFHLGdCQUFpQixHQUFFLE1BQU8sR0FBRSxFQUFHLE1BQU0sV0FBVSxpQkFBaUIsWUFBWSxTQUFTLEVBQUUsR0FBRyxNQUFNLFdBQVcsS0FBSyxHQUFHLEdBQUcsSUFBSSxHQUFHLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxJQUFJLEdBQUcsR0FBRyxJQUFJLGFBQWEsU0FBUyxHQUFHLE9BQU8sR0FBRyxJQUFLLEdBQUUsSUFBSyxJQUFHLElBQUssSUFBRyxNQUFNLElBQUssS0FBSyxHQUFFLElBQUssSUFBRyxNQUFNLElBQUssS0FBSyxHQUFFLElBQUssSUFBRyxNQUFNLElBQUssU0FBUSxNQUFNLE9BQU8sV0FBVyxTQUFTLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsYUFBYSxFQUFHLElBQUksR0FBRSxFQUFFLGNBQWMsRUFBRSxFQUFFLFdBQVcsRUFBRSxFQUFFLEVBQUUsU0FBVSxPQUFPLEdBQUUsUUFBUSxNQUFNLElBQUksR0FBRyxPQUFPLElBQUksUUFBUSxJQUFJLEdBQUcsUUFBUSxPQUFPLEdBQUcsUUFBUSxLQUFLLE9BQU8sR0FBRyxNQUFNLElBQUksUUFBUSxPQUFPLEtBQUssYUFBYSxFQUFFLFdBQVcsRUFBRSxPQUFPLFdBQVcsUUFBUSxNQUFNLEtBQUssaUJBQWlCLEVBQUUsV0FBVyxFQUFFLE9BQU8sT0FBTyxRQUFRLE1BQU0sSUFBSSxHQUFHLE9BQU8sSUFBSSxRQUFRLGFBQWEsR0FBRyxRQUFRLEtBQUssS0FBSyxhQUFhLEVBQUUsWUFBWSxRQUFRLGFBQWEsS0FBSyxlQUFlLEVBQUUsRUFBRSxRQUFRLGdCQUFnQixTQUFTLEVBQUUsR0FBRyxJQUFJLEdBQUksTUFBSyxHQUFHLEdBQUcsRUFBRSxLQUFLLEdBQUksTUFBSyxJQUFJLEVBQUUsR0FBSSxNQUFLLEdBQUcsUUFBUSxHQUFJLE1BQUssR0FBRyxVQUFVLEVBQUcsT0FBTyxNQUFLLFNBQVMsRUFBRSxFQUFFLEdBQUcsRUFBRSxTQUFTLFFBQVEsRUFBRSxJQUFJLFlBQVcsSUFBSyxTQUFTLEVBQUUsRUFBRSxHQUFHLEVBQUUsU0FBUyxRQUFRLEVBQUUsSUFBSSxZQUFXLElBQUssU0FBUyxFQUFFLEVBQUUsR0FBRyxZQUFhLFNBQVMsR0FBRSxHQUFHLE1BQU8sSUFBRyxFQUFFLFdBQVcsR0FBRyxRQUFRLEdBQUcsRUFBRSxZQUFXLENBQUcsSUFBSSxHQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsR0FBRyxFQUFFLGtCQUFtQixHQUFFLFNBQVMsZ0JBQWlCLEdBQUUsUUFBUSxTQUFTLEdBQUcsYUFBYyxJQUFHLFNBQVMsR0FBRyxNQUFPLElBQUcsa0JBQW1CLEdBQUUsU0FBUyxFQUFFLGNBQWMsRUFBRSxTQUFTLElBQUksRUFBRSxRQUFRLFVBQVUsZUFBZ0IsR0FBRyxHQUFFLFFBQVEsa0JBQW1CLEdBQUUsU0FBUyxXQUFXLEVBQUUsRUFBRSxTQUFTLFNBQVMsR0FBRyxXQUFPLEtBQVMsRUFBRSxZQUFZLEVBQUUsSUFBSSxTQUFTLEdBQUcsTUFBTyxJQUFHLGtCQUFtQixHQUFFLFNBQVMsRUFBRSxjQUFjLEVBQUUsU0FBUyxJQUFJLEVBQUUsUUFBUSxVQUFVLGFBQVMsS0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLFNBQVMsRUFBRSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksUUFBUSxTQUFTLEVBQUUsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLGFBQWEsU0FBUyxFQUFFLEdBQUcsRUFBRSxRQUFRLFNBQVMsR0FBRyxHQUFHLGtCQUFtQixHQUFFLEtBQU0sV0FBVSxFQUFFLHNCQUF1QixPQUFPLEtBQUksU0FBUyxFQUFFLEdBQUcsRUFBRSxRQUFRLGNBQWMsU0FBUyxFQUFFLEVBQUUsR0FBRyxHQUFJLEdBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxHQUFJLEdBQUUsUUFBUSxTQUFTLEdBQUcsTUFBTyxVQUFTLEVBQUUsRUFBRSxHQUFHLEdBQUksR0FBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUcsSUFBRyxHQUFHLEdBQUcsR0FBRyxLQUFLLEVBQUUsR0FBRyxJQUFJLEVBQUUsRUFBRSxPQUFPLEVBQUUsT0FBTSxNQUFRLE1BQUssRUFBRSxFQUFFLElBQUksSUFBSSxHQUFHLElBQUssS0FBSSxFQUFFLEtBQUssRUFBRSxNQUFPLElBQUcsR0FBRyxDQUFFLFFBQU8sSUFBSSxLQUFLLFNBQVMsRUFBRSxFQUFFLEdBQUcsR0FBSSxHQUFFLEVBQUUsR0FBSSxHQUFFLFFBQVEsU0FBUyxFQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsT0FBRyxLQUFTLEVBQUUsTUFBTyxFQUFFLFFBQU8sR0FBRyxJQUFLLEdBQUUsTUFBTyxVQUFTLEdBQUcsTUFBTyxHQUFFLEtBQUssRUFBRSxHQUFJLEtBQUssR0FBRSxNQUFPLFVBQVMsRUFBRSxHQUFHLE1BQU8sR0FBRSxLQUFLLEVBQUUsRUFBRSxHQUFJLEtBQUssR0FBRSxNQUFPLFVBQVMsRUFBRSxFQUFFLEdBQUcsTUFBTyxHQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsSUFBSSxNQUFPLFlBQVcsTUFBTyxHQUFFLE1BQU0sRUFBRSxjQUFjLFNBQVMsRUFBRSxFQUFFLEdBQUcsR0FBSSxHQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsR0FBSSxHQUFFLFFBQVEsU0FBUyxHQUFHLEdBQUksR0FBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUUsSUFBRyxFQUFFLElBQUksR0FBSSxHQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRyxPQUFPLEtBQUksU0FBUyxFQUFFLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxHQUFHLFVBQVUsU0FBUyxpQkFBaUIsU0FBUyxFQUFFLEVBQUUsR0FBRyxHQUFJLEdBQUUsRUFBRSxHQUFJLEdBQUUsUUFBUSxPQUFPLEtBQUsscUJBQXFCLEdBQUcsT0FBTyxTQUFTLEdBQUcsTUFBTSxVQUFVLEVBQUUsR0FBRyxFQUFFLE1BQU0sSUFBSSxPQUFPLEtBQUssU0FBUyxFQUFFLEVBQUUsR0FBRyxHQUFJLEdBQUUsRUFBRSxHQUFJLEdBQUUsUUFBUSxNQUFNLFNBQVMsU0FBUyxHQUFHLE1BQU0sU0FBUyxFQUFFLEtBQUssU0FBUyxFQUFFLEVBQUUsR0FBRyxZQUFhLElBQUksR0FBRSxFQUFFLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLElBQUksSUFBSyxHQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsWUFBWSxXQUFXLE1BQU8sUUFBTyxFQUFFLFFBQVEsU0FBUyxFQUFFLEVBQUUsR0FBRyxFQUFFLFVBQVUsRUFBRSxHQUFHLEtBQUssRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsZUFBZSxTQUFTLEVBQUUsR0FBRyxFQUFFLFFBQVEsU0FBUyxFQUFFLEdBQUcsT0FBTyxNQUFNLEVBQUUsT0FBTyxLQUFLLFNBQVMsRUFBRSxFQUFFLEdBQUcsR0FBSSxHQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRyxHQUFFLFFBQVEsU0FBUyxFQUFFLEdBQUcsSUFBSSxHQUFJLEdBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxNQUFPLEtBQUksU0FBUyxFQUFFLEVBQUUsR0FBRyxHQUFJLEdBQUUsRUFBRSxJQUFJLFFBQVEsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLGNBQWMsV0FBVyxPQUFNLEdBQUksR0FBRyxFQUFFLEdBQUcsV0FBVyxNQUFPLEdBQUUsT0FBTyx5QkFBeUIsRUFBRSxTQUFTLEdBQUcsRUFBRSxFQUFFLEdBQUcsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLEdBQUcsSUFBSSxFQUFFLEdBQUcsTUFBTSxnQkFBaUIsR0FBRSxHQUFHLGdCQUFpQixHQUFFLElBQUksS0FBSyxDQUFFLEtBQUksRUFBRSxFQUFFLEdBQUcsQ0FBQyxJQUFJLEVBQUUsR0FBRyxNQUFNLEdBQUksS0FBSSxFQUFFLE1BQU0sR0FBSSxHQUFFLEdBQUcsTUFBTyxHQUFFLEdBQUcsR0FBRyxFQUFFLFNBQVMsRUFBRSxHQUFHLElBQUksRUFBRSxFQUFFLEdBQUcsQ0FBQyxJQUFJLEVBQUUsR0FBRyxPQUFNLENBQUcsS0FBSSxFQUFFLE9BQU0sQ0FBRyxHQUFFLEdBQUcsTUFBTyxHQUFFLEdBQUcsR0FBRyxFQUFFLFNBQVMsR0FBRyxNQUFPLElBQUcsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLEdBQUcsR0FBRyxFQUFFLEVBQUUsU0FBUyxJQUFJLEVBQUUsTUFBSyxFQUFHLFFBQVEsRUFBRSxRQUFRLEVBQUUsU0FBUyxJQUFJLFNBQVMsRUFBRSxFQUFFLEdBQUcsR0FBSSxHQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBSSxHQUFFLFFBQVEsRUFBRSxHQUFHLE9BQU8saUJBQWlCLFNBQVMsRUFBRSxHQUFHLEVBQUUsRUFBRyxLQUFJLEdBQUksR0FBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsR0FBSSxPQUFPLEtBQUksU0FBUyxFQUFFLEVBQUUsR0FBRyxHQUFJLEdBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxJQUFJLEVBQUUsT0FBTyx3QkFBeUIsR0FBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxHQUFHLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUUsR0FBSSxFQUFFLElBQUksTUFBTyxHQUFFLEVBQUUsR0FBRyxNQUFNLElBQUksR0FBRyxFQUFFLEVBQUUsR0FBRyxNQUFPLElBQUcsRUFBRSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsTUFBTSxTQUFTLEVBQUUsRUFBRSxHQUFHLEdBQUksR0FBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLElBQUksRUFBRSxLQUFLLFNBQVMsRUFBRSxnQkFBaUIsU0FBUSxRQUFRLE9BQU8sb0JBQW9CLE9BQU8sb0JBQW9CLFdBQVcsRUFBRSxTQUFTLEdBQUcsSUFBSSxNQUFPLEdBQUUsR0FBRyxNQUFNLEdBQUcsTUFBTyxHQUFFLFNBQVUsR0FBRSxRQUFRLEVBQUUsU0FBUyxHQUFHLE1BQU8sSUFBRyxtQkFBbUIsRUFBRSxLQUFLLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxNQUFNLFNBQVMsRUFBRSxFQUFFLEdBQUcsR0FBSSxHQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsSUFBSSxZQUFZLEVBQUUsT0FBTyxTQUFVLEdBQUUsUUFBUSxPQUFPLGdCQUFnQixTQUFTLEdBQUcsTUFBTyxHQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsa0JBQW1CLEdBQUUsYUFBYSxZQUFhLEdBQUUsWUFBWSxFQUFFLFlBQVksVUFBVSxZQUFhLFFBQU8sRUFBRSxPQUFPLFNBQVMsRUFBRSxFQUFFLEdBQUcsR0FBSSxHQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsR0FBSSxHQUFFLFFBQVEsU0FBUyxHQUFHLE1BQU8sVUFBUyxFQUFFLEdBQUcsR0FBSSxHQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsTUFBTyxPQUFPLEdBQUUsR0FBRyxHQUFHLEVBQUUsRUFBRSxPQUFHLElBQVEsRUFBRSxFQUFFLFdBQVcsR0FBRyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxJQUFJLEVBQUUsRUFBRSxXQUFXLEVBQUUsSUFBSSxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUUsT0FBTyxHQUFHLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsT0FBTyxJQUFJLFVBQVUsU0FBUyxFQUFFLEVBQUUsR0FBRyxHQUFJLEdBQUUsRUFBRSxJQUFJLEVBQUUsS0FBSyxJQUFJLEVBQUUsS0FBSyxHQUFJLEdBQUUsUUFBUSxTQUFTLEVBQUUsR0FBRyxNQUFPLEdBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxLQUFLLFNBQVMsRUFBRSxFQUFFLEdBQUcsR0FBSSxHQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssR0FBSSxHQUFFLFFBQVEsU0FBUyxHQUFHLE1BQU8sR0FBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLGtCQUFrQixJQUFJLFNBQVMsRUFBRSxFQUFFLEdBQUcsR0FBSSxHQUFFLEVBQUUsR0FBSSxHQUFFLFFBQVEsU0FBUyxHQUFHLE1BQU8sUUFBTyxFQUFFLE1BQU0sU0FBUyxFQUFFLEVBQUUsR0FBRyxZQUFhLElBQUksR0FBRSxFQUFFLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUcsR0FBRSxRQUFRLEVBQUUsSUFBSSxNQUFNLFFBQVEsU0FBUyxFQUFFLEdBQUcsS0FBSyxHQUFHLEVBQUUsR0FBRyxLQUFLLEdBQUcsRUFBRSxLQUFLLEdBQUcsR0FBRyxXQUFXLEdBQUksR0FBRSxLQUFLLEdBQUcsRUFBRSxLQUFLLEdBQUcsRUFBRSxLQUFLLElBQUssUUFBTyxHQUFHLEdBQUcsRUFBRSxRQUFRLEtBQUssT0FBRyxHQUFPLEVBQUUsSUFBSSxRQUFRLEVBQUUsRUFBRSxFQUFFLEdBQUcsVUFBVSxFQUFFLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsRUFBRSxNQUFNLFVBQVUsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsWUFBWSxTQUFTLEVBQUUsS0FBSyxTQUFTLEVBQUUsRUFBRSxHQUFHLFlBQWEsSUFBSSxHQUFFLEVBQUUsS0FBSSxFQUFJLEdBQUUsSUFBSSxPQUFPLFNBQVMsU0FBUyxHQUFHLEtBQUssR0FBRyxPQUFPLEdBQUcsS0FBSyxHQUFHLEdBQUcsV0FBVyxHQUFJLEdBQUUsRUFBRSxLQUFLLEdBQUcsRUFBRSxLQUFLLEVBQUcsT0FBTyxJQUFHLEVBQUUsUUFBUSxVQUFNLEdBQU8sTUFBSyxJQUFLLEVBQUUsRUFBRSxFQUFFLEdBQUcsS0FBSyxJQUFJLEVBQUUsUUFBUSxNQUFNLEVBQUUsTUFBSyxPQUFRLFNBQVMsRUFBRSxFQUFFLEdBQUcsWUFBYSxJQUFJLEdBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxJQUFJLElBQUksRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFFLEVBQUUsV0FBVyxFQUFFLEVBQUUsZUFBZSxLQUFLLHFCQUFxQixFQUFFLEVBQUUsbUJBQW1CLEVBQUUsRUFBRSxXQUFXLEVBQUUsRUFBRSxjQUFjLEVBQUUsT0FBTyxVQUFVLEVBQUUsa0JBQW1CLEdBQUUsRUFBRSxFQUFFLFFBQVEsR0FBRyxJQUFJLEVBQUUsWUFBWSxFQUFFLFVBQVUsVUFBVSxFQUFFLEdBQUcsRUFBRSxXQUFXLE1BQU8sSUFBRyxFQUFFLEtBQUssS0FBSyxJQUFJLFdBQVcsTUFBTyxHQUFFLEtBQUssS0FBSyxNQUFNLElBQUksTUFBTSxJQUFJLFNBQVMsRUFBRSxFQUFFLEdBQUcsR0FBSSxHQUFFLEVBQUUsRUFBRSxFQUFHLFVBQVUsR0FBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBRyxJQUFJLEdBQUcsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsU0FBUyxHQUFHLEdBQUksR0FBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLFVBQVcsT0FBTyxHQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxnQkFBaUIsR0FBRSxTQUFTLFNBQVMsR0FBRyxNQUFNLGdCQUFpQixJQUFHLFNBQVMsR0FBRyxNQUFPLGFBQWEsSUFBRyxFQUFFLFNBQVMsRUFBRSxFQUFFLEdBQUcsTUFBTyxLQUFJLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUUsR0FBSSxFQUFFLEdBQUcsRUFBRSxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsRUFBRSxJQUFJLEVBQUUsR0FBRyxLQUFLLEVBQUUsR0FBRyxJQUFHLEdBQUksRUFBRSxFQUFFLEdBQUcsV0FBVyxFQUFFLEdBQUUsT0FBUSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxHQUFHLElBQUcsR0FBSSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLEVBQUcsS0FBSSxHQUFJLEdBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsR0FBSSxPQUFPLElBQUcsRUFBRSxTQUFTLEVBQUUsR0FBRyxXQUFPLEtBQVMsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsSUFBSSxFQUFFLFNBQVMsR0FBRyxHQUFJLEdBQUUsRUFBRSxLQUFLLEtBQUssRUFBRSxFQUFFLEdBQUUsR0FBSyxTQUFRLE9BQU8sR0FBRyxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsUUFBUSxJQUFJLEVBQUUsS0FBSyxLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsS0FBSyxJQUFJLEtBQUssR0FBRyxLQUFLLElBQUksRUFBRSxTQUFTLEVBQUUsR0FBRyxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFFLEdBQUksSUFBSSxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxHQUFHLENBQUMsR0FBSSxHQUFFLEVBQUUsRUFBRSxFQUFHLFFBQU8sSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLEdBQUcsS0FBSyxFQUFFLFlBQVcsR0FBSSxJQUFJLEVBQUUsU0FBUyxHQUFHLElBQUksR0FBSSxHQUFFLEVBQUUsRUFBRSxFQUFFLElBQUksS0FBSyxFQUFFLEVBQUUsRUFBRSxPQUFPLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLEdBQUcsR0FBRyxHQUFHLEdBQUcsRUFBRSxLQUFLLEVBQUcsT0FBTyxJQUFHLEVBQUUsU0FBUyxHQUFHLElBQUksR0FBSSxHQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxJQUFJLEtBQUssRUFBRSxFQUFFLEVBQUUsT0FBTyxJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEdBQUksT0FBTyxHQUFHLEtBQUksRUFBRSxXQUFXLEdBQUcsZUFBZ0IsR0FBRSxLQUFNLFdBQVUsK0JBQWdDLElBQUksR0FBRSxFQUFFLFVBQVUsT0FBTyxFQUFFLFVBQVUsT0FBRyxJQUFRLEVBQUUsU0FBUyxHQUFHLE9BQU8sR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsS0FBSyxJQUFJLEVBQUUsS0FBSyxHQUFHLEtBQUssS0FBSyxHQUFHLElBQUcsR0FBSSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsSUFBSyxPQUFPLElBQUcsR0FBRyxFQUFFLEVBQUUsR0FBRyxjQUFhLEVBQUcsSUFBSSxJQUFJLEVBQUUsSUFBSSxFQUFFLEVBQUUsVUFBVSxXQUFXLFdBQVcsTUFBTyxNQUFLLEtBQUssRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSx1QkFBdUIsR0FBRSxHQUFJLEVBQUUsRUFBRSxTQUFTLEdBQUcsTUFBTyxHQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEdBQUcsT0FBTyxHQUFJLEtBQUksR0FBSSxJQUFHLGlIQUFpSCxNQUFNLEtBQUssR0FBRyxFQUFFLEdBQUcsT0FBTyxJQUFJLEVBQUUsR0FBRyxNQUFPLEtBQUksR0FBSSxJQUFHLEVBQUUsRUFBRSxPQUFPLEdBQUcsRUFBRSxHQUFHLE9BQU8sSUFBSSxFQUFFLEdBQUcsTUFBTyxHQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxVQUFVLElBQUksU0FBUyxHQUFHLE1BQU8sR0FBRSxFQUFFLEdBQUcsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxPQUFPLFNBQVMsR0FBRyxHQUFHLEVBQUUsR0FBRyxNQUFPLEdBQUUsRUFBRSxFQUFHLE1BQU0sV0FBVSxFQUFFLHNCQUFzQixVQUFVLFdBQVcsR0FBRSxHQUFJLFVBQVUsV0FBVyxHQUFFLEtBQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsVUFBVSxPQUFPLEVBQUUsZUFBZSxFQUFFLGlCQUFpQixFQUFFLHlCQUF5QixFQUFFLG9CQUFvQixFQUFFLHNCQUFzQixJQUFJLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxJQUFJLEdBQUcsRUFBRSxXQUFXLEdBQUksR0FBRSxHQUFJLE9BQU0sVUFBVSxHQUFHLEtBQUssTUFBTSxHQUFHLEVBQUUsS0FBSyxNQUFNLEVBQUUsT0FBTyxPQUFPLFFBQVEsVUFBVSxTQUFTLEdBQUcsT0FBRyxLQUFTLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxHQUFJLEdBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxFQUFFLFVBQVUsT0FBTyxHQUFHLEVBQUUsS0FBSyxVQUFVLEtBQU0sT0FBTyxHQUFFLEVBQUUsR0FBRyxrQkFBbUIsS0FBSSxFQUFFLElBQUksR0FBRyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsR0FBRyxHQUFHLElBQUksRUFBRSxFQUFFLEtBQUssS0FBSyxFQUFFLEtBQUssRUFBRSxHQUFHLE1BQU8sS0FBSSxFQUFFLEdBQUcsRUFBRSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsVUFBVSxJQUFJLEVBQUUsR0FBRyxFQUFFLFVBQVUsRUFBRSxFQUFFLFVBQVUsU0FBUyxFQUFFLEVBQUUsVUFBVSxFQUFFLEtBQUssUUFBTyxHQUFJLEVBQUUsRUFBRSxLQUFLLFFBQU8sSUFBSyxTQUFTLEVBQUUsRUFBRSxHQUFHLEVBQUUsSUFBSSxrQkFBa0IsU0FBUyxFQUFFLEVBQUUsR0FBRyxFQUFFLElBQUksZUFBZSxTQUFTLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBSSxLQUFJLEdBQUksR0FBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEdBQUcsZUFBZSxHQUFHLFdBQVcsZUFBZSxZQUFZLGlCQUFpQixlQUFlLEVBQUUsRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLEdBQUksR0FBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsU0FBVSxLQUFJLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLFFBQVEsU0FBUyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsUUFBUSxFQUFFLEtBQUksR0FBSSxFQUFFLE1BQU0sRUFBRSxFQUFFLHduR0FBd25HLE1BQU0sU0FBUyxFQUFFLEdBQUcsUUFBUyxHQUFFLEVBQUUsR0FBRyxHQUFJLEdBQUUsRUFBRSxJQUFJLEdBQUcsRUFBRSxFQUFFLEVBQUcsS0FBSSxFQUFFLE1BQU8sRUFBRSxJQUFHLEdBQUcsa0JBQW1CLE1BQUssQ0FBQyxHQUFJLEdBQUUsRUFBRSxFQUFHLFFBQU8sR0FBRyxPQUFPLEVBQUUsUUFBUSxJQUFJLFNBQVMsR0FBRyxNQUFNLGlCQUFpQixFQUFFLFdBQVcsRUFBRSxTQUFTLFFBQVEsSUFBSSxLQUFLLE1BQU0sT0FBTyxHQUFHLEtBQUssTUFBTSxRQUFTLEdBQUUsR0FBRyxNQUFNLG1FQUFtRSxLQUFLLFNBQVMsbUJBQW1CLEtBQUssVUFBVSxNQUFNLE1BQU0sRUFBRSxRQUFRLFNBQVMsR0FBRyxHQUFJLEtBQUssT0FBTyxHQUFFLFNBQVMsV0FBVyxNQUFPLE1BQUssSUFBSSxTQUFTLEdBQUcsR0FBSSxHQUFFLEVBQUUsRUFBRSxFQUFHLE9BQU8sR0FBRSxHQUFHLFVBQVUsRUFBRSxHQUFHLElBQUksRUFBRSxJQUFJLElBQUksS0FBSyxLQUFLLEVBQUUsRUFBRSxTQUFTLEVBQUUsR0FBRyxnQkFBaUIsS0FBSSxJQUFJLEtBQUssRUFBRSxLQUFNLEtBQUksR0FBSSxNQUFLLEVBQUUsRUFBRSxFQUFFLEtBQUssT0FBTyxJQUFJLENBQUMsR0FBSSxHQUFFLEtBQUssR0FBRyxFQUFHLGlCQUFpQixLQUFJLEVBQUUsSUFBRyxHQUFJLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLElBQUksQ0FBQyxHQUFJLEdBQUUsRUFBRSxFQUFHLGlCQUFpQixHQUFFLElBQUksRUFBRSxFQUFFLE1BQU0sSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsSUFBSSxFQUFFLEdBQUcsVUFBVSxFQUFFLEtBQUssRUFBRSxLQUFLLE1BQU0sSUFBSSxTQUFTLEVBQUUsRUFBRSxHQUFHLFFBQVMsR0FBRSxHQUFHLEVBQUUsSUFBSSxHQUFJLEdBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxLQUFLLEtBQU0sR0FBRSxRQUFRLEVBQUUsU0FBUyxTQUFTLEVBQUUsRUFBRSxHQUFHLFFBQVMsR0FBRSxHQUFHLElBQUksR0FBSSxHQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sSUFBSSxDQUFDLEdBQUksR0FBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBSSxJQUFHLEVBQUUsQ0FBQyxFQUFFLE1BQU8sS0FBSSxHQUFJLEdBQUUsRUFBRSxFQUFFLEVBQUUsTUFBTSxPQUFPLElBQUksRUFBRSxNQUFNLEdBQUcsRUFBRSxNQUFNLEdBQUksTUFBSyxFQUFFLEVBQUUsTUFBTSxPQUFPLElBQUksRUFBRSxNQUFNLEtBQUssRUFBRSxFQUFFLE1BQU0sSUFBSyxHQUFFLE1BQU0sT0FBTyxFQUFFLE1BQU0sU0FBUyxFQUFFLE1BQU0sT0FBTyxFQUFFLE1BQU0sWUFBWSxDQUFDLElBQUksR0FBSSxNQUFLLEVBQUUsRUFBRSxFQUFFLEVBQUUsTUFBTSxPQUFPLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxNQUFNLElBQUssR0FBRSxFQUFFLEtBQUssR0FBRyxFQUFFLEdBQUcsS0FBSyxFQUFFLE1BQU0sS0FBSyxRQUFTLEtBQUksR0FBSSxHQUFFLFNBQVMsY0FBYyxRQUFTLE9BQU8sR0FBRSxLQUFLLFdBQVcsRUFBRSxZQUFZLEdBQUcsRUFBRSxRQUFTLEdBQUUsR0FBRyxHQUFJLEdBQUUsRUFBRSxFQUFFLFNBQVMsY0FBYywyQkFBMkIsRUFBRSxHQUFHLEtBQU0sSUFBRyxFQUFFLENBQUMsR0FBRyxFQUFFLE1BQU8sRUFBRSxHQUFFLFdBQVcsWUFBWSxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUksR0FBRSxHQUFJLEdBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLEtBQUssS0FBSyxFQUFFLEdBQUUsR0FBSSxFQUFFLEVBQUUsS0FBSyxLQUFLLEVBQUUsR0FBRSxPQUFTLEdBQUUsSUFBSSxFQUFFLEVBQUUsS0FBSyxLQUFLLEdBQUcsRUFBRSxXQUFXLEVBQUUsV0FBVyxZQUFZLEdBQUksT0FBTyxHQUFFLEdBQUcsU0FBUyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLFVBQVUsTUFBTyxHQUFFLEVBQUUsT0FBUSxNQUFLLFFBQVMsR0FBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEdBQUksR0FBRSxFQUFFLEdBQUcsRUFBRSxHQUFJLElBQUcsRUFBRSxXQUFXLEVBQUUsV0FBVyxRQUFRLEVBQUUsRUFBRSxPQUFPLENBQUMsR0FBSSxHQUFFLFNBQVMsZUFBZSxHQUFHLEVBQUUsRUFBRSxVQUFXLEdBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxFQUFFLElBQUksRUFBRSxZQUFZLElBQUksUUFBUyxHQUFFLEVBQUUsR0FBRyxHQUFJLEdBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxTQUFVLElBQUcsR0FBRyxFQUFFLGFBQWEsUUFBUSxHQUFHLElBQUksR0FBRyxtQkFBbUIsRUFBRSxRQUFRLEdBQUcsTUFBTSxHQUFHLHVEQUF1RCxLQUFLLFNBQVMsbUJBQW1CLEtBQUssVUFBVSxNQUFNLE9BQU8sRUFBRSxXQUFXLEVBQUUsV0FBVyxRQUFRLE1BQU0sQ0FBQyxLQUFLLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxXQUFZLEdBQUUsWUFBWSxTQUFTLGVBQWUsS0FBSyxHQUFJLEdBQUUsbUJBQW9CLFNBQVMsSUFBRyxtQkFBb0IsUUFBTyxRQUFRLEVBQUUsS0FBTSxJQUFJLE9BQU0sMEpBQTJKLElBQUksR0FBRSxFQUFFLElBQUksS0FBSyxFQUFFLElBQUksU0FBUyxNQUFNLFNBQVMscUJBQXFCLFFBQVEsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLEdBQUUsRUFBRyxFQUFFLGFBQWEsRUFBRSxtQkFBb0IsWUFBVyxlQUFlLEtBQUssVUFBVSxVQUFVLGNBQWUs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QSxHQUFBLEVBQUEsRUFBQSxTQUFBLGlCQUNBLEVBQUEsUUFDQSxFQUFBLE9BQUEsT0FBQSxxQkFBQSxHQUlBLEVBQUEsS0FBQSxFQUFBLE9BQUEsU0FBQSxvQkFHQSxLQUFBLE9BQUEsTUFBQSxnQkFDQSxFQUFBLEtBQUEsRUFBQSxPQUFBLFNBQUEsbUJBbkJBLEVBQUEsS0FBQSxHQUFBLEVBQUEsUUFBQSxJQUFBLEVBQUEsS0FBQSxJQXdCQSxFQUFBLE9BQUEsT0FBQSx1QkFBQSxFQXhCQSxLQUFBLElBQUEsSUFBQSxNQUFBLE1BQUEsR0FBQSxTQUFBLEVBQUEsUUFBQSxPQUFBLE1BMEJBLFVBQ0EsZ0JBQUEsV0FDQSxPQUFBLEtBQUEsT0FBQSxNQUFBLGdCQUVBLFdBQUEsV0FDQSxPQUFBLEtBQUEsT0FBQSxNQUFBLGdCQUFBLEtBQUEsT0FBQSxNQUFBLFVBRUEsV0FBQSxXQUNBLE1BQUEsTUFBQSxPQUFBLE1BQUEsWUFFQSxtQkFBQSxXQUNBLE1BQUEsTUFBQSxPQUFBLE1BQUEscUJBR0EsT0FDQSxvQkFDQSxRQUFBLFNBQUEsR0FDQSxHQUFBLEdBQUEsRUFBQSxFQUFBLE9BQUEsT0FFQSxLQUFBLEdBSUEsS0FBQSxTQUNBLE1BQUEsRUFDQSxNQUFBLGVBQ0EsU0FBQSxPQUdBLFdBQUEsRUFDQSxNQUFBLHVVQTdGQSxpQkFBQSxPQUFBLFdBQUEsR0FBQSxHQUFBLEtBQUEsRUFBQSxFQUFBLGVBQUEsRUFBQSxFQUFBLE1BQUEsSUFBQSxDQUFBLE9BQUEsR0FBQSxPQUFBLFlBQUEsd0JBQUEsRUFBQSxXQUFBLEVBQUEsT0FBQSxZQUFBLDZCQUFBLEVBQUEsT0FBQSxZQUFBLGdCQUFBLEVBQUEsZ0JBQUEsRUFBQSxpQkFBQSxFQUFBLEtBQUEsRUFBQSxHQUFBLEtBQUEsRUFBQSxXQUFBLEVBQUEsZUFBQSxFQUFBLE9BQUEsRUFBQSxLQUFBLEVBQUEsR0FBQSxFQUFBLEdBQUEsRUFBQSxJQUFBLG9CQUFBLEdBQUEsRUFBQSxHQUFBLEtBQUEsRUFBQSxpQkFBQSxPQUFBLE1BQUEsZUFBQSxTQUFBLGFB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QSxJQUFBLEtBQUEsWUFHQSxTQUNBLGtCQUFBLFdBQ0EsS0FBQSxhQUVBLGVBQUEsV0FBQSxHQUFBLEdBQUEsSUFDQSxNQUFBLGNBQ0EsS0FBQSxZQUNBLEtBQUEsUUFFQSxLQUFBLE9BQUEsWUFDQSxFQUFBLEVBQUEsU0FBQSxLQUFBLE9BQUEsV0FBQSxRQUFBLFNBQUEsR0FDQSxFQUFBLEtBQUEsR0FBQSxFQUFBLE9BQUEsVUFBQSxLQUlBLEtBQUEscUJBRUEsVUFBQSxXQUtBLE1BSEEsTUFBQSxVQUdBLFFBQUEsS0FBQSxPQUFBLFlBR0EsS0FBQSxPQUNBLE1BQUEsR0FDQSxNQUFBLEtBQUEsSUFBQSxRQUNBLEtBQUEsU0FFQSxLQUFBLE9BQ0EsTUFBQSxXQUNBLEtBQUEsV0FFQSxLQUFBLGlCQUNBLE1BQUEsR0FDQSxNQUFBLEtBQUEsSUFBQSxrQkFDQSxLQUFBLEtBQUEsc0JBQUEsT0FBQSxXQUVBLEtBQUEsYUFDQSxNQUFBLEdBQ0EsTUFBQSxLQUFBLElBQUEsY0FDQSxLQUFBLFNBRUEsS0FBQSxVQUNBLE1BQUEsR0FDQSxNQUFBLEtBQUEsSUFBQSxXQUNBLEtBQUEsU0FFQSxLQUFBLGFBQ0EsTUFBQSxHQUNBLE1BQUEsS0FBQSxJQUFBLGNBQ0EsS0FBQSxTQUVBLEtBQUEsYUFDQSxNQUFBLEdBQ0EsTUFBQSxLQUFBLElBQUEsY0FDQSxLQUFBLFNBRUEsS0FBQSxVQUNBLE1BQUEsS0FBQSxPQUFBLE1BQUEsS0FBQSxLQUFBLFNBQUEsS0FBQSxPQUFBLE1BQUEsS0FBQSxLQUFBLFFBQUEsYUFBQSxHQUNBLE1BQUEsS0FBQSxJQUFBLFdBQ0EsUUFBQSxLQUFBLE9BQUEsUUFBQSxxQkFDQSxLQUFBLFdBRUEsU0FBQSxLQUFBLE9BQUEsV0FDQSxLQUFBLFlBRUEsS0FBQSxPQUNBLE1BQUEsS0FBQSxLQUFBLEtBQ0EsTUFBQSxLQUFBLElBQUEsUUFDQSxLQUFBLFNBRUEsS0FBQSxPQUNBLE1BQUEsS0FBQSxLQUFBLEtBQ0EsS0FBQSxXQUVBLEtBQUEsS0FDQSxNQUFBLEtBQUEsS0FBQSxHQUNBLEtBQUEsV0FFQSxLQUFBLGlCQUNBLE1BQUEsS0FBQSxLQUFBLGVBQ0EsTUFBQSxLQUFBLElBQUEsa0JBQ0EsS0FBQSxLQUFBLHNCQUFBLE9BQUEsV0FFQSxLQUFBLGFBQ0EsTUFBQSxLQUFBLEtBQUEsV0FDQSxNQUFBLEtBQUEsSUFBQSxjQUNBLEtBQUEsU0FFQSxLQUFBLFVBQ0EsTUFBQSxLQUFBLEtBQUEsUUFDQSxNQUFBLEtBQUEsSUFBQSxXQUNBLEtBQUEsU0FFQSxLQUFBLGFBQ0EsTUFBQSxLQUFBLEtBQUEsV0FDQSxNQUFBLEtBQUEsSUFBQSxjQUNBLEtBQUEsU0FFQSxLQUFBLGFBQ0EsTUFBQSxLQUFBLEtBQUEsV0FDQSxNQUFBLEtBQUEsSUFBQSxjQUNBLEtBQUEsU0FFQSxLQUFBLFVBQ0EsTUFBQSxLQUFBLEtBQUEsU0FBQSxLQUFBLEtBQUEsUUFBQSxhQUFBLEdBQ0EsTUFBQSxLQUFBLElBQUEsV0FDQSxRQUFBLEtBQUEsT0FBQSxRQUFBLHFCQUNBLEtBQUEsZ0JBN0NBLElBaURBLEtBQUEsV0FDQSxLQUFBLE9BQUEsU0FBQSxnQkFDQSxLQUFBLGlCQUNBLEtBQUEsT0FBQSxLQUFBLEtBQUEsWUFFQSxNQUFBLFNBQUEsR0FDQSxLQUFBLFVBQ0EsSUFDQSxHQUNBLE9BQUEsV0FHQSxLQUFBLFFBQUEsSUFFQSxLQUFBLE9BQUEsS0FBQSxLQUFBLFlBRUEsV0FBQSxXQUFBLEdBQUEsR0FBQSxLQUNBLEVBQUEsSUFDQSxPQUFBLE1BQUEsS0FBQSxXQUFBLEtBQUEsVUFBQSxLQUFBLFNBQUEsR0FHQSxNQUFBLEVBQUEsT0FDQSxFQUFBLFdBQUEsRUFBQSxPQUFBLFFBR0EsTUFBQSxFQUFBLE9BQ0EsRUFBQSxPQUFBLE9BQUEsYUFBQSxFQUFBLE9BQUEsU0FDQSxFQUFBLE9BQUEsT0FBQSxnQkFJQSxjQUFBLFdBQUEsR0FBQSxHQUFBLEtBQ0EsRUFBQSxJQUVBLE9BQUEsTUFBQSxLQUFBLGNBQUEsS0FBQSxTQUFBLEdBQUEsS0FBQSxVQUFBLEtBQUEsU0FBQSxHQUdBLE1BQUEsRUFBQSxPQUNBLEVBQUEsV0FBQSxFQUFBLE9BQUEsUUFHQSxNQUFBLEVBQUEsT0FDQSxFQUFBLE9BQUEsT0FBQSxnQkFBQSxFQUFBLE9BQUEsU0FDQSxFQUFBLE9BQUEsT0FBQSxpQkFLQSxPQUNBLFVBQUEsV0FDQSxLQUFBLHNWQTlOQSxpQkFBQSxPQUFBLFdBQUEsR0FBQSxHQUFBLEtBQUEsRUFBQSxFQUFBLGVBQUEsRUFBQSxFQUFBLE1BQUEsSUFBQSxDQUFBLE9BQUEsR0FBQSxPQUFBLEVBQUEsU0FBQSxPQUFBLEtBQUEsRUFBQSxVQUFBLGtCQUFBLEVBQUEsT0FBQSxPQUFBLFlBQUEsS0FBQSxFQUFBLG1CQUFBLE9BQUEsTUFBQSxRQUFBLEVBQUEsVUFBQSxFQUFBLElBQUEsY0FBQSxFQUFBLElBQUEsZ0JBQUEsSUFBQSxNQUFBLEVBQUEsU0FBQSxFQUFBLFVBQUEsT0FBQSxPQUFBLEVBQUEsT0FBQSxZQUFBLEVBQUEsU0FBQSxjQUFBLEVBQUEsY0FBQSxFQUFBLE9BQUEsWUFBQSxvQkFBQSxPQUFBLEtBQUEsV0FBQSxLQUFBLFlBQUEsRUFBQSxVQUFBLFlBQUEsa0JBQUEsT0FBQSxLQUFBLFVBQUEsSUFBQSxNQUFBLEVBQUEsU0FBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsSUFBQSxjQUFBLEVBQUEsR0FBQSxLQUFBLFFBQUEsRUFBQSxVQUFBLEVBQUEsVUFBQSxZQUFBLGlCQUFBLE9BQUEsS0FBQSxVQUFBLElBQUEsTUFBQSxFQUFBLGNBQUEsRUFBQSxHQUFBLEVBQUEsR0FBQSxFQUFBLElBQUEsa0JBQUEsRUFBQSxLQUFBLEVBQUEsR0FBQSxLQUFBLFNBQUEsRUFBQSxVQUFBLEVBQUEsVUFBQSxZQUFBLGlCQUFBLE9BQUEsS0FBQSxVQUFBLElBQUEsTUFBQSxFQUFBLGlCQUFBLEVBQUEsR0FBQSxFQUFBLEdBQUEsRUFBQSxJQUFBLHFCQUFBLEVBQUEsVUFBQSxJQUFBLElBQUEsSUFBQSxpQkFBQTs7O3NTQ21CQSxFQUFBLFFBQUEsZ0NBQ0EsRUFBQSxRQUFBLHNDQUNBLEVBQUEsUUFBQSx3Q0FHQSxZQUNBLGtCQUFBLEVBQUEsUUFDQSx3QkFBQSxFQUFBLFFBQ0EsU0FBQSxFQUFBLFNBRUEsS0FBQSxpQkFDQSxPQUFBLFdBQUEsYUFBQSxjQUNBLEtBQUEsV0FDQSxPQUNBLGNBQ0EsWUFDQSxRQUNBLEtBQUEsWUFDQSxXQUFBLEVBQ0EsY0FBQSxFQUNBLFlBQUEsRUFDQSxtQkFBQSxHQUNBLG1CQUFBLEdBQ0EsaUJBQUEsS0FHQSxVQUNBLEtBQUEsV0FDQSxNQUFBLE1BQUEsT0FBQSxNQUFBLEtBQUEsTUFFQSxRQUFBLFdBQ0EsTUFBQSxNQUFBLE9BQUEsTUFBQSxLQUFBLFNBRUEsT0FBQSxXQUNBLE1BQUEsTUFBQSxhQUVBLFVBQUEsV0FDQSxNQUFBLE1BQUEsS0FBQSxJQUFBLEtBQUEsWUFHQSxTQUNBLFlBQUEsU0FBQSxHQUNBLGdCQUFBLEVBQUEsTUFDQSxLQUFBLFNBQUEsY0FFQSxLQUFBLGVBQUEsS0FBQSxTQUFBLGVBSUEsMEJBQUEsU0FBQSxHQUNBLEtBQUEsY0FDQSxLQUFBLE9BQUEsTUFBQSx1QkFDQSxTQUFBLEtBQ0EsS0FBQSxZQUNBLFlBQUEsRUFDQSxjQUNBLE1BQUEsZUFDQSxVQUFBLEtBQUEsSUFBQSxnREFLQSxrQkFBQSxXQUNBLEtBQUEsYUFFQSxlQUFBLFdBQUEsR0FBQSxHQUFBLElBQ0EsTUFBQSxjQUNBLEtBQUEsWUFDQSxLQUFBLFFBQ0EsS0FBQSxtQkFBQSxHQUNBLEtBQUEsaUJBQUEsR0FFQSxLQUFBLE9BQUEsWUFDQSxFQUFBLEVBQUEsU0FBQSxLQUFBLE9BQUEsV0FBQSxRQUFBLFNBQUEsR0FDQSxFQUFBLEtBQUEsR0FBQSxFQUFBLE9BQUEsVUFBQSxLQUlBLEtBQUEscUJBRUEsVUFBQSxXQUVBLEdBQUEsUUFBQSxLQUFBLE9BQUEsVUFDQSxRQUNBLEtBQUEsZUFDQSxNQUFBLEtBQUEsS0FBQSxhQUNBLE1BQUEsS0FBQSxJQUFBLGdCQUNBLEtBQUEsU0FFQSxLQUFBLE9BQ0EsTUFBQSxLQUFBLEtBQUEsTUFBQSxLQUFBLG1CQUNBLE1BQUEsS0FBQSxJQUFBLFFBQ0EsS0FBQSxTQUVBLEtBQUEsY0FDQSxNQUFBLEtBQUEsS0FBQSxZQUNBLE1BQUEsS0FBQSxJQUFBLG1DQUNBLEtBQUEsU0FFQSxLQUFBLGNBQ0EsTUFBQSxLQUFBLEtBQUEsYUFBQSxLQUFBLG1CQUNBLFlBQUEsS0FBQSxJQUFBLDJDQUNBLE1BQUEsS0FBQSxJQUFBLHFDQUNBLEtBQUEsYUFFQSxLQUFBLGtCQUNBLE1BQUEsS0FBQSxLQUFBLGdCQUNBLE1BQUEsS0FBQSxJQUFBLHlDQUNBLEtBQUEsU0FFQSxLQUFBLFlBQ0EsTUFBQSxLQUFBLEtBQUEsV0FBQSxLQUFBLGlCQUVBLE1BQUEsS0FBQSxJQUFBLG1DQUNBLEtBQUEsYUFFQSxLQUFBLGdCQUNBLE1BQUEsS0FBQSxLQUFBLGNBQ0EsTUFBQSxLQUFBLElBQUEsdUNBQ0EsS0FBQSxTQUVBLEtBQUEsY0FDQSxNQUFBLEtBQUEsSUFBQSxxQ0FDQSxLQUFBLGFBQ0EsU0FBQSxRQUNBLGNBQUEsU0FDQSxXQUFBLEVBQ0EsU0FDQSxTQUVBLE1BQUEsS0FBQSxJQUFBLDZCQUNBLFlBQUEsS0FBQSxJQUFBLDZCQUNBLEtBQUEsT0FDQSxLQUFBLFNBRUEsTUFBQSxLQUFBLElBQUEsMkJBQ0EsWUFBQSxLQUFBLElBQUEsMkJBQ0EsS0FBQSxPQUNBLEtBQUEsT0FFQSxNQUFBLEtBQUEsSUFBQSwrQkFDQSxZQUFBLEtBQUEsSUFBQSwrQkFDQSxLQUFBLFNBQ0EsS0FBQSxXQUVBLE1BQUEsS0FBQSxJQUFBLDhCQUNBLFlBQUEsS0FBQSxJQUFBLDhCQUNBLEtBQUEsV0FDQSxLQUFBLFlBR0EsS0FBQSxXQUNBLE1BQUEsS0FBQSxJQUFBLDhCQUNBLEtBQUEsYUFDQSxTQUFBLFFBQ0EsY0FBQSxRQUNBLFdBQUEsRUFDQSxTQUNBLFNBUUEsTUFBQSxLQUFBLElBQUEsMkJBQ0EsWUFBQSxLQUFBLElBQUEsMkJBQ0EsS0FBQSxTQUNBLEtBQUEsVUFFQSxNQUFBLEtBQUEsSUFBQSwyQkFDQSxZQUFBLEtBQUEsSUFBQSwyQkFDQSxLQUFBLFdBQ0EsS0FBQSxZQUdBLEtBQUEsUUFDQSxVQUFBLEVBQ0EsU0FDQSxLQUFBLFFBRUEsTUFBQSxPQUFBLFdBSUEsS0FBQSxXQUNBLEtBQUEsaUJBQ0EsS0FBQSxPQUFBLEtBQUEsS0FBQSxZQUVBLE1BQUEsU0FBQSxHQUNBLEtBQUEsVUFDQSxJQUNBLEdBQ0EsT0FBQSxXQUdBLEtBQUEsUUFBQSxJQUVBLEtBQUEsT0FBQSxLQUFBLEtBQUEsWUFFQSxlQUFBLFNBQUEsR0FBQSxHQUFBLEdBQUEsSUFBQSxRQUFBLEVBQUEsRUFBQSxTQUFBLEVBQUEsUUFBQSxLQUFBLFFBQUEsS0FBQSxHQUFBLEdBQUEsQ0FBQSxPQUFBLEdBQUEsUUFBQSxLQUFBLFNBQUEsR0FBQSxPQUFBLE9BQUEsRUFBQSxLQUFBLEVBQUEsTUFBQSxJQUFBLEdBQUEsTUFFQSxHQUFBLEVBQUEsU0FGQSxFQUFBLEtBQUEsRUFBQSxFQUFBLEtBQUEsbUJBQUEsRUFBQSxLQUFBLEdBQUEsR0FJQSxFQUFBLEVBQUEsS0FFQSxLQUFBLEVBQUEsTUFDQSxFQUFBLE9BQUEsZUFBQSxxQkFDQSxFQUFBLFNBQUEsS0FBQSxFQUFBLE9BQUEsZ0JBQUEsWUFDQSxFQUFBLG1CQUFBLEVBQUEsT0FBQSxnQkFBQSxZQUNBLEVBQUEsU0FBQSxZQUFBLEVBQUEsWUFDQSxFQUFBLEtBQUEsWUFBQSxFQUFBLFNBQUEsWUFDQSxFQUFBLFNBQUEsZ0JBQUEsRUFBQSxnQkFDQSxFQUFBLEtBQUEsZ0JBQUEsRUFBQSxTQUFBLGdCQUNBLEVBQUEsU0FBQSxVQUFBLEVBQUEsVUFDQSxFQUFBLEtBQUEsVUFBQSxFQUFBLFNBQUEsVUFDQSxFQUFBLFNBQUEsY0FBQSxFQUFBLGNBQ0EsRUFBQSxLQUFBLGNBQUEsRUFBQSxTQUFBLGNBQ0EsRUFBQSxLQUFBLGFBQUEsRUFDQSxFQUFBLFNBQUEsYUFBQSxHQW5CQSxNQUFBLEVBQUEsS0FBQSxDQUFBLEVBQUEsS0FBQSxDQUFBLE9BQUEsTUF3QkEsR0FBQSxtQkFBQSxHQUNBLEVBQUEsU0FBQSxLQUFBLEdBekJBLEVBQUEsT0FBQSxTQUFBLEtBQUEsR0FBQSxHQUFBLE1BQUEsRUFBQSxLQUFBLENBQUEsRUFBQSxLQUFBLEVBQUEsT0FBQSxNQThCQSxHQUFBLFNBQUEsS0FBQSxHQTlCQSxFQUFBLE9BQUEsU0FBQSxLQUFBLElBQUEsSUFBQSxNQUFBLE1BQUEsR0FBQSxTQUFBLEVBQUEsU0FrQ0EsYUFBQSxXQUFBLEdBQUEsR0FBQSxJQUFBLFFBQUEsRUFBQSxFQUFBLFNBQUEsRUFBQSxRQUFBLEtBQUEsUUFBQSxLQUFBLEdBQUEsR0FBQSxFQUFBLEVBQUEsRUFBQSxFQUFBLEVBQUEsQ0FBQSxPQUFBLEdBQUEsUUFBQSxLQUFBLFNBQUEsR0FBQSxPQUFBLE9BQUEsRUFBQSxLQUFBLEVBQUEsTUFBQSxJQUFBLEdBQUEsTUFDQSxHQUFBLFlBQUEsRUFEQSxFQUFBLEtBQUEsRUFBQSxFQUFBLEtBQUEsY0FJQSxhQUFBLEVBQUEsU0FBQSxhQUNBLFlBQUEsRUFBQSxTQUFBLFlBQ0EsZ0JBQUEsRUFBQSxTQUFBLGdCQUNBLFVBQUEsRUFBQSxTQUFBLFVBQ0EsY0FBQSxFQUFBLFNBQUEsY0FDQSxZQUFBLEVBQUEsU0FBQSxZQUNBLFlBQUEsRUFBQSxTQUFBLFlBQ0EsU0FBQSxFQUFBLFNBQUEsVUFYQSxLQUFBLEdBQUEsR0FHQSxFQUFBLEVBQUEsS0FIQSxNQUFBLEVBQUEsS0FBQSxDQUFBLEVBQUEsS0FBQSxDQUFBLE9BQUEsTUFpQkEsR0FBQSxXQUFBLEVBQUEsT0FBQSxPQUNBLEVBQUEsWUFBQSxFQWxCQSxFQUFBLE9BQUEsU0FBQSxLQUFBLEdBQUEsR0FBQSxNQUFBLEVBQUEsS0FBQSxDQUFBLEVBQUEsS0FBQSxFQUFBLE9BQUEsTUF1QkEsR0FBQSxZQUFBLEVBdkJBLEVBQUEsT0FBQSxTQUFBLEtBQUEsSUE0QkEsRUFBQSxFQUFBLE9BQUEsVUFDQSxFQUFBLEVBQUEsT0FBQSxVQUFBLEtBR0EsR0FDQSxNQUFBLHdCQUNBLGNBQUEsRUFDQSxrQkFBQSxFQUFBLFNBQUEsY0FFQSxtQkFBQSxZQUNBLFVBQUEsS0FBQSxHQUdBLEVBQUEsV0FBQSxFQUFBLFNBQUEsTUFBQSxPQUNBLEVBQUEsY0FBQSxFQUVBLEVBQUEsRUFBQSxFQUFBLEVBQUEsU0FBQSxNQUFBLE1BNUNBLEtBQUEsSUFBQSxLQUFBLEVBQUEsR0FBQSxDQUFBLEVBQUEsS0FBQSxFQUFBLE9BQUEsTUE2Q0EsR0FBQSxFQUFBLFNBQUEsTUFBQSxHQUVBLEVBQUEsZ0JBL0NBLEVBQUEsS0FBQSxHQUFBLEVBQUEsS0FBQSxpQkFBQSxHQWtEQSxLQUFBLEVBQUEsTUFsREEsS0FBQSxJQUFBLEdBaURBLEVBQUEsRUFBQSxLQWpEQSxNQUFBLEVBQUEsS0FBQSxDQUFBLEVBQUEsS0FBQSxFQUFBLE9BQUEsTUFzREEsR0FBQSxZQUFBLEVBdERBLEVBQUEsT0FBQSxTQUFBLEtBQUEsSUE0Q0EsSUE1Q0EsRUFBQSxLQUFBLEVBQUEsTUFBQSxLQUFBLElBNERBLEVBQUEsT0FBQSxPQUFBLGVBQUEsR0FHQSxFQUFBLE9BQUEsU0FBQSxlQUFBLEdBRUEsRUFBQSxZQUFBLEVBQ0EsRUFBQSxPQUFBLE9BQUEsV0FsRUEsS0FBQSxJQUFBLElBQUEsTUFBQSxNQUFBLEdBQUEsU0FBQSxFQUFBLFVBcUVBLE9BQ0EsVUFBQSxXQUNBLEtBQUEsc1ZBclVBLGlCQUFBLE9BQUEsV0FBQSxHQUFBLEdBQUEsS0FBQSxFQUFBLEVBQUEsZUFBQSxFQUFBLEVBQUEsTUFBQSxJQUFBLENBQUEsT0FBQSxHQUFBLFNBQUEsT0FBQSxLQUFBLEVBQUEsVUFBQSxrQkFBQSxFQUFBLE9BQUEsT0FBQSxZQUFBLEtBQUEsRUFBQSxtQkFBQSxPQUFBLE1BQUEsUUFBQSxFQUFBLFVBQUEsRUFBQSxJQUFBLGdCQUFBLEVBQUEsSUFBQSxrQkFBQSxJQUFBLE1BQUEsRUFBQSxTQUFBLEVBQUEseUJBQUEsT0FBQSxZQUFBLEVBQUEsS0FBQSxlQUFBLEVBQUEsV0FBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLFVBQUEsT0FBQSxPQUFBLEVBQUEsT0FBQSxZQUFBLEVBQUEsU0FBQSxjQUFBLEVBQUEsV0FBQSxVQUFBLEVBQUEsZUFBQSxFQUFBLE9BQUEsT0FBQSxLQUFBLFdBQUEsS0FBQSxZQUFBLEVBQUEsY0FBQSxFQUFBLEtBQUEsRUFBQSxHQUFBLEVBQUEsR0FBQSxFQUFBLElBQUEsa0JBQUEsS0FBQSxFQUFBLEdBQUEsRUFBQSxlQUFBLE1BQUEsRUFBQSxHQUFBLEVBQUEsZUFBQSxFQUFBLEtBQUEsRUFBQSxHQUFBLE9BQUEsRUFBQSxHQUFBLEtBQUEsRUFBQSxVQUFBLFlBQUEsa0JBQUEsT0FBQSxLQUFBLFVBQUEsSUFBQSxNQUFBLEVBQUEsU0FBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsSUFBQSxjQUFBLEVBQUEsR0FBQSxLQUFBLFFBQUEsRUFBQSxVQUFBLEVBQUEsVUFBQSxZQUFBLGlCQUFBLE9BQUEsU0FBQSxFQUFBLFdBQUEsS0FBQSxVQUFBLElBQUEsTUFBQSxFQUFBLGdCQUFBLEVBQUEsR0FBQSxFQUFBLEdBQUEsRUFBQSxJQUFBLG9CQUFBLEVBQUEsVUFBQSxJQUFBLElBQUEsaUJBQUE7OztzU0NrQkEsRUFBQSxRQUFBLGdDQUNBLEVBQUEsUUFBQSx3Q0FHQSxZQUNBLGtCQUFBLEVBQUEsUUFDQSxTQUFBLEVBQUEsU0FFQSxLQUFBLFlBQ0EsT0FBQSxXQUFBLGFBQUEsY0FDQSxLQUFBLFdBQ0EsT0FDQSxjQUNBLFlBQ0EsS0FBQSxPQUNBLFVBQUEsRUFDQSxVQUdBLFVBQ0EsT0FBQSxXQUVBLEdBQUEsS0FBQSxPQUFBLFFBQUEscUJBQ0EsTUFBQSxNQUFBLGFBR0EsVUFBQSxXQUNBLE1BQUEsTUFBQSxLQUFBLElBQUEsS0FBQSxXQUVBLFlBQUEsV0FFQSxNQUFBLE1BQUEsS0FBQSxLQUFBLEtBQUEsT0FBQSxNQUFBLEtBQUEsS0FBQSxLQUdBLFNBQ0EsZUFBQSxXQUFBLEdBQUEsR0FBQSxJQUNBLE1BQUEsY0FDQSxLQUFBLFlBQ0EsS0FBQSxRQUVBLEtBQUEsT0FBQSxZQUNBLEVBQUEsRUFBQSxTQUFBLEtBQUEsT0FBQSxXQUFBLFFBQUEsU0FBQSxHQUNBLEVBQUEsS0FBQSxHQUFBLEVBQUEsT0FBQSxVQUFBLEtBSUEsS0FBQSxxQkFFQSxrQkFBQSxXQUNBLEtBQUEsYUFFQSxVQUFBLFdBS0EsTUFIQSxNQUFBLFVBR0EsUUFBQSxLQUFBLE9BQUEsWUFFQSxLQUFBLFlBQ0EsTUFBQSxHQUNBLE1BQUEsS0FBQSxJQUFBLGFBQ0EsS0FBQSxTQUVBLEtBQUEsV0FDQSxNQUFBLEdBQ0EsTUFBQSxLQUFBLElBQUEsWUFDQSxLQUFBLFNBRUEsS0FBQSxXQUNBLE1BQUEsR0FDQSxNQUFBLEtBQUEsSUFBQSx5QkFDQSxLQUFBLFVBRUEsS0FBQSxVQUNBLE1BQUEsS0FBQSxLQUFBLFVBQ0EsTUFBQSxHQUNBLEtBQUEsV0FFQSxLQUFBLFFBQ0EsTUFBQSxHQUNBLE1BQUEsS0FBQSxJQUFBLFNBQ0EsS0FBQSxTQUVBLEtBQUEsT0FDQSxNQUFBLEdBQ0EsTUFBQSxLQUFBLElBQUEscUJBQ0EsVUFDQSxNQUFBLFdBQ0EsS0FBQSxLQUFBLElBQUEsb0JBRUEsTUFBQSxpQkFDQSxLQUFBLEtBQUEsSUFBQSx5QkFFQSxLQUFBLEtBQUEsWUFBQSxTQUFBLFdBRUEsS0FBQSxVQUNBLE1BQUEsS0FBQSxLQUFBLGFBQUEsR0FDQSxNQUFBLEtBQUEsSUFBQSxXQUNBLFFBQUEsS0FBQSxPQUFBLFFBQUEscUJBQ0EsS0FBQSxXQUVBLFNBQUEsS0FBQSxPQUFBLFlBRUEsS0FBQSxLQUNBLE1BQUEsS0FBQSxLQUFBLEdBQ0EsS0FBQSxXQUVBLEtBQUEsWUFDQSxNQUFBLEtBQUEsS0FBQSxVQUNBLE1BQUEsS0FBQSxJQUFBLGFBQ0EsS0FBQSxTQUVBLEtBQUEsV0FDQSxNQUFBLEtBQUEsS0FBQSxTQUNBLE1BQUEsS0FBQSxJQUFBLFlBQ0EsS0FBQSxTQUVBLEtBQUEsUUFDQSxNQUFBLEtBQUEsS0FBQSxNQUNBLE1BQUEsS0FBQSxJQUFBLFNBQ0EsS0FBQSxTQUVBLEtBQUEsT0FDQSxNQUFBLEtBQUEsS0FBQSxLQUNBLE1BQUEsS0FBQSxJQUFBLHFCQUNBLFVBQ0EsTUFBQSxXQUNBLEtBQUEsS0FBQSxJQUFBLG9CQUVBLE1BQUEsaUJBQ0EsS0FBQSxLQUFBLElBQUEseUJBRUEsS0FBQSxLQUFBLFlBQUEsU0FBQSxXQUVBLEtBQUEsVUFDQSxNQUFBLEtBQUEsS0FBQSxTQUFBLEtBQUEsS0FBQSxRQUFBLGFBQUEsR0FDQSxNQUFBLEtBQUEsSUFBQSxXQUNBLFFBQUEsS0FBQSxPQUFBLFFBQUEscUJBQ0EsS0FBQSxlQXJDQSxJQXlDQSxLQUFBLFdBQ0EsS0FBQSxPQUFBLFNBQUEsZ0JBQ0EsS0FBQSxpQkFDQSxLQUFBLE9BQUEsS0FBQSxLQUFBLFlBRUEsTUFBQSxTQUFBLEdBQ0EsS0FBQSxVQUNBLElBQ0EsR0FDQSxPQUFBLFdBR0EsS0FBQSxRQUFBLElBRUEsS0FBQSxPQUFBLEtBQUEsS0FBQSxZQUVBLFFBQUEsV0FBQSxHQUFBLEdBQUEsS0FDQSxFQUFBLElBQ0EsT0FBQSxNQUFBLEtBQUEsUUFBQSxLQUFBLFVBQUEsS0FBQSxTQUFBLEdBR0EsTUFBQSxFQUFBLE9BQ0EsRUFBQSxXQUFBLEVBQUEsT0FBQSxRQUdBLE1BQUEsRUFBQSxPQUNBLEVBQUEsT0FBQSxPQUFBLFVBQUEsRUFBQSxPQUFBLE1BQ0EsRUFBQSxPQUFBLE9BQUEsWUFDQSxFQUFBLGdCQUFBLEVBQUEsT0FBQSxVQUlBLGdCQUFBLFNBQUEsR0FBQSxHQUFBLEdBQUEsSUFBQSxRQUFBLEVBQUEsRUFBQSxTQUFBLEVBQUEsUUFBQSxLQUFBLFFBQUEsS0FBQSxHQUFBLEVBQUEsT0FBQSxHQUFBLFFBQUEsS0FBQSxTQUFBLEdBQUEsT0FBQSxPQUFBLEVBQUEsS0FBQSxFQUFBLE1BQUEsSUFBQSxHQUFBLEdBQUEsRUFBQSxNQUFBLENBQUEsRUFBQSxLQUFBLENBQUEsT0FBQSxNQUFBLEdBQUEsS0FBQSxFQUFBLEVBQUEsS0FBQSxVQUFBLEtBQUEsR0FFQSxFQUFBLEVBQUEsS0FDQSxNQUFBLEVBQUEsT0FDQSxFQUFBLE1BQUEsRUFBQSxPQUFBLE1BSkEsS0FBQSxHQUFBLE1BQUEsR0FBQSxPQUFBLFNBQUEsRUFBQSxLQUFBLGtCQVNBLE1BQUEsRUFBQSxNQUNBLFNBQUEsRUFBQSxXQUZBLEtBQUEsU0FBQSxHQUtBLEVBQUEsTUFBQSxHQUdBLE1BQUEsRUFBQSxPQUNBLEVBQUEsV0FBQSxFQUFBLE9BQUEsUUFHQSxNQUFBLEVBQUEsT0FDQSxFQUFBLGNBQUEsS0FyQkEsS0FBQSxHQUFBLElBQUEsTUFBQSxNQUFBLEdBQUEsU0FBQSxFQUFBLFNBeUJBLFdBQUEsV0FBQSxHQUFBLEdBQUEsS0FDQSxFQUFBLElBQ0EsT0FBQSxNQUFBLEtBQUEsV0FBQSxLQUFBLFNBQUEsR0FBQSxLQUFBLFVBQUEsS0FBQSxTQUFBLEdBR0EsTUFBQSxFQUFBLE9BQ0EsRUFBQSxXQUFBLEVBQUEsT0FBQSxRQUdBLE1BQUEsRUFBQSxPQUNBLEVBQUEsT0FBQSxPQUFBLGFBQUEsRUFBQSxPQUFBLE1BQ0EsRUFBQSxPQUFBLE9BQUEsaUJBS0EsT0FDQSxVQUFBLFdBQ0EsS0FBQSxzVkEzT0EsaUJBQUEsT0FBQSxXQUFBLEdBQUEsR0FBQSxLQUFBLEVBQUEsRUFBQSxlQUFBLEVBQUEsRUFBQSxNQUFBLElBQUEsQ0FBQSxPQUFBLEdBQUEsT0FBQSxFQUFBLFNBQUEsT0FBQSxLQUFBLEVBQUEsVUFBQSxrQkFBQSxFQUFBLE9BQUEsT0FBQSxZQUFBLEtBQUEsRUFBQSxtQkFBQSxPQUFBLE1BQUEsUUFBQSxFQUFBLFVBQUEsRUFBQSxJQUFBLFdBQUEsRUFBQSxJQUFBLGFBQUEsSUFBQSxNQUFBLEVBQUEsU0FBQSxFQUFBLFVBQUEsT0FBQSxPQUFBLEVBQUEsT0FBQSxZQUFBLEVBQUEsU0FBQSxjQUFBLEVBQUEsY0FBQSxFQUFBLE9BQUEsWUFBQSxvQkFBQSxPQUFBLEtBQUEsV0FBQSxLQUFBLFlBQUEsRUFBQSxVQUFBLFlBQUEsa0JBQUEsT0FBQSxLQUFBLFVBQUEsSUFBQSxNQUFBLEVBQUEsU0FBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsSUFBQSxjQUFBLEVBQUEsR0FBQSxLQUFBLFFBQUEsRUFBQSxVQUFBLEVBQUEsVUFBQSxZQUFBLGlCQUFBLE9BQUEsS0FBQSxVQUFBLElBQUEsTUFBQSxFQUFBLFdBQUEsRUFBQSxHQUFBLEVBQUEsR0FBQSxFQUFBLElBQUEsZUFBQSxFQUFBLEtBQUEsRUFBQSxHQUFBLEtBQUEsU0FBQSxFQUFBLFVBQUEsRUFBQSxVQUFBLFlBQUEsaUJBQUEsT0FBQSxLQUFBLFVBQUEsSUFBQSxNQUFBLEVBQUEsY0FBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsSUFBQSxrQkFBQSxFQUFBLFVBQUEsSUFBQSxJQUFBLElBQUEsaUJBQUE7OztzU0NlQSxFQUFBLFFBQUEsZ0NBQ0EsRUFBQSxRQUFBLHdDQUdBLFlBQ0Esa0JBQUEsRUFBQSxRQUNBLFNBQUEsRUFBQSxTQUVBLEtBQUEsNEJBQ0EsT0FBQSxXQUFBLGFBQUEsY0FDQSxLQUFBLFdBQ0EsT0FDQSxjQUNBLFlBQ0EsUUFDQSxLQUFBLHdCQUNBLFlBQUEsSUFHQSxVQUNBLE9BQUEsV0FDQSxNQUFBLE1BQUEsYUFFQSxVQUFBLFdBQ0EsTUFBQSxNQUFBLEtBQUEsSUFBQSxLQUFBLFlBR0EsU0FDQSxrQkFBQSxXQUNBLEtBQUEsYUFFQSxlQUFBLFdBQUEsR0FBQSxHQUFBLElBQ0EsTUFBQSxjQUNBLEtBQUEsWUFDQSxLQUFBLFFBRUEsS0FBQSxPQUFBLFlBQ0EsRUFBQSxFQUFBLFNBQUEsS0FBQSxPQUFBLFdBQUEsUUFBQSxTQUFBLEdBQ0EsRUFBQSxLQUFBLEdBQUEsRUFBQSxPQUFBLFVBQUEsS0FJQSxLQUFBLHFCQUVBLFVBQUEsV0FFQSxHQUFBLFFBQUEsS0FBQSxPQUFBLFVBQ0EsUUFDQSxLQUFBLHFCQUNBLFFBQUEsS0FBQSxJQUFBLHNCQUNBLEtBQUEsWUFHQSxLQUFBLGVBQ0EsTUFBQSxLQUFBLEtBQUEsYUFDQSxNQUFBLEtBQUEsSUFBQSxnQkFBQSxLQUNBLEtBQUEsU0FHQSxLQUFBLFVBQ0EsTUFBQSxLQUFBLEtBQUEsUUFDQSxNQUFBLEtBQUEsSUFBQSxnQkFBQSxLQUNBLEtBQUEsU0FHQSxLQUFBLGVBQ0EsTUFBQSxLQUFBLElBQUEsZ0NBQ0EsS0FBQSxhQUNBLFdBQUEsRUFDQSxXQUFBLEtBQUEsSUFBQSxVQUNBLFNBQ0EsU0FFQSxLQUFBLGVBQ0EsTUFBQSxLQUFBLEtBQUEsYUFDQSxNQUFBLEtBQUEsSUFBQSxnQkFBQSxLQUNBLEtBQUEsU0FHQSxLQUFBLFVBQ0EsTUFBQSxLQUFBLEtBQUEsUUFDQSxNQUFBLEtBQUEsSUFBQSxnQkFBQSxLQUNBLEtBQUEsV0FJQSxLQUFBLDZCQUNBLFFBQUEsS0FBQSxJQUFBLHVCQUNBLEtBQUEsWUFHQSxLQUFBLG9CQUNBLE1BQUEsS0FBQSxLQUFBLGtCQUNBLE1BQUEsS0FBQSxJQUFBLGFBQUEsS0FDQSxLQUFBLFNBR0EsS0FBQSxtQkFDQSxNQUFBLEtBQUEsS0FBQSxpQkFDQSxNQUFBLEtBQUEsSUFBQSxZQUFBLEtBQ0EsS0FBQSxTQUdBLEtBQUEsZ0JBQ0EsTUFBQSxLQUFBLEtBQUEsY0FDQSxNQUFBLEtBQUEsSUFBQSxTQUFBLEtBQ0EsS0FBQSxVQUdBLEtBQUEsZ0JBQ0EsTUFBQSxLQUFBLEtBQUEsY0FDQSxNQUFBLEtBQUEsSUFBQSxTQUNBLEtBQUEsU0FHQSxLQUFBLGVBQ0EsTUFBQSxLQUFBLEtBQUEsYUFDQSxNQUFBLEtBQUEsSUFBQSxvQkFBQSxLQUNBLEtBQUEsU0FHQSxLQUFBLGlCQUNBLE1BQUEsS0FBQSxLQUFBLGVBQ0EsTUFBQSxLQUFBLElBQUEsMEJBQ0EsS0FBQSxTQUdBLEtBQUEsd0JBQ0EsTUFBQSxLQUFBLEtBQUEsc0JBQ0EsTUFBQSxLQUFBLElBQUEsaUJBQ0EsS0FBQSxTQUdBLEtBQUEsMkJBQ0EsUUFBQSxLQUFBLElBQUEscUJBQ0EsS0FBQSxZQUdBLEtBQUEsa0JBQ0EsTUFBQSxLQUFBLE9BQUEsTUFBQSxLQUFBLEtBQUEsVUFDQSxNQUFBLEtBQUEsSUFBQSxhQUFBLEtBQ0EsS0FBQSxTQUdBLEtBQUEsaUJBQ0EsTUFBQSxLQUFBLE9BQUEsTUFBQSxLQUFBLEtBQUEsU0FDQSxNQUFBLEtBQUEsSUFBQSxZQUFBLEtBQ0EsS0FBQSxTQUdBLEtBQUEsY0FDQSxNQUFBLEtBQUEsT0FBQSxNQUFBLEtBQUEsS0FBQSxTQUNBLE1BQUEsS0FBQSxJQUFBLFNBQUEsS0FDQSxLQUFBLFVBR0EsS0FBQSxjQUNBLE1BQUEsS0FBQSxPQUFBLE1BQUEsS0FBQSxRQUFBLEtBQ0EsTUFBQSxLQUFBLElBQUEsU0FBQSxLQUNBLEtBQUEsU0FHQSxLQUFBLG1CQUNBLE1BQUEsS0FBQSxPQUFBLE1BQUEsS0FBQSxRQUFBLFdBQ0EsTUFBQSxLQUFBLElBQUEsY0FDQSxLQUFBLFNBR0EsS0FBQSxzQkFDQSxNQUFBLEtBQUEsT0FBQSxNQUFBLEtBQUEsUUFBQSxRQUNBLE1BQUEsS0FBQSxJQUFBLFdBQ0EsS0FBQSxTQUdBLEtBQUEsbUJBQ0EsTUFBQSxLQUFBLE9BQUEsTUFBQSxLQUFBLFFBQUEsV0FDQSxNQUFBLEtBQUEsSUFBQSxjQUNBLEtBQUEsU0FHQSxLQUFBLG1CQUNBLE1BQUEsS0FBQSxPQUFBLE1BQUEsS0FBQSxRQUFBLFdBQ0EsTUFBQSxLQUFBLElBQUEsY0FDQSxLQUFBLFNBR0EsS0FBQSxtQ0FDQSxRQUFBLEtBQUEsSUFBQSw2QkFDQSxLQUFBLFlBR0EsS0FBQSxpQkFDQSxNQUFBLEtBQUEsS0FBQSxlQUNBLE1BQUEsS0FBQSxJQUFBLG1EQUFBLEtBQ0EsS0FBQSxTQUdBLEtBQUEseUJBQ0EsTUFBQSxLQUFBLEtBQUEsdUJBQ0EsTUFBQSxLQUFBLElBQUEsbURBQUEsS0FDQSxLQUFBLFNBR0EsS0FBQSx5QkFDQSxNQUFBLEtBQUEsS0FBQSx1QkFDQSxNQUFBLEtBQUEsSUFBQSxtREFBQSxLQUNBLEtBQUEsU0FVQSxLQUFBLGdCQUNBLFFBQUEsSUFDQSxLQUFBLFlBR0EsS0FBQSxpQkFDQSxNQUFBLEtBQUEsS0FBQSxlQUNBLE1BQUEsS0FBQSxJQUFBLG1EQUFBLEtBQ0EsS0FBQSxTQUdBLEtBQUEsYUFDQSxNQUFBLEtBQUEsS0FBQSxXQUNBLE1BQUEsS0FBQSxJQUFBLG1CQUNBLEtBQUEsU0FHQSxLQUFBLG1DQUNBLE1BQUEsS0FBQSxLQUFBLGlDQUNBLE1BQUEsS0FBQSxJQUFBLG9DQUFBLE9BQ0EsS0FBQSxLQUFBLElBQUEsbUJBQUEsSUFDQSxLQUFBLFFBR0EsTUFBQSxPQUFBLFdBSUEsS0FBQSxXQUNBLEtBQUEsaUJBQ0EsS0FBQSxPQUFBLEtBQUEsS0FBQSxZQUVBLE1BQUEsU0FBQSxHQUNBLEtBQUEsVUFDQSxJQUNBLEdBQ0EsT0FBQSxXQUdBLEtBQUEsUUFBQSxJQUVBLEtBQUEsT0FBQSxLQUFBLEtBQUEsWUFFQSx3QkFBQSxXQUFBLEdBQUEsR0FBQSxJQUFBLFFBQUEsRUFBQSxFQUFBLFNBQUEsRUFBQSxRQUFBLEtBQUEsUUFBQSxLQUFBLEdBQUEsR0FBQSxFQUFBLENBQUEsT0FBQSxHQUFBLFFBQUEsS0FBQSxTQUFBLEdBQUEsT0FBQSxPQUFBLEVBQUEsS0FBQSxFQUFBLE1BQUEsSUFBQSxHQUFBLE1BQ0EsR0FBQSxZQUFBLEVBREEsRUFBQSxLQUFBLEVBQUEsRUFBQSxLQUFBLHlCQUlBLGFBQUEsRUFBQSxTQUFBLGFBQ0EsUUFBQSxFQUFBLFNBQUEsUUFDQSxhQUFBLEVBQUEsU0FBQSxhQUNBLGtCQUFBLEVBQUEsU0FBQSxrQkFDQSxpQkFBQSxFQUFBLFNBQUEsaUJBQ0EsY0FBQSxFQUFBLFNBQUEsY0FDQSxjQUFBLEVBQUEsU0FBQSxjQUNBLGFBQUEsRUFBQSxTQUFBLGFBQ0EsZUFBQSxFQUFBLFNBQUEsZUFDQSxzQkFBQSxFQUFBLFNBQUEsc0JBQ0EsZ0JBQUEsRUFBQSxTQUFBLGdCQUNBLGVBQUEsRUFBQSxTQUFBLGVBQ0EsWUFBQSxFQUFBLFNBQUEsWUFDQSxZQUFBLEVBQUEsU0FBQSxZQUNBLGlCQUFBLEVBQUEsU0FBQSxpQkFDQSxvQkFBQSxFQUFBLFNBQUEsb0JBQ0EsaUJBQUEsRUFBQSxTQUFBLGlCQUNBLGlCQUFBLEVBQUEsU0FBQSxpQkFDQSxlQUFBLEVBQUEsU0FBQSxlQUNBLHVCQUFBLEVBQUEsU0FBQSx1QkFDQSx1QkFBQSxFQUFBLFNBQUEsdUJBQ0EsMkJBQUEsRUFBQSxTQUFBLDJCQUNBLGVBQUEsRUFBQSxTQUFBLGVBQ0EsV0FBQSxFQUFBLFNBQUEsV0FDQSxpQ0FBQSxFQUFBLFNBQUEsa0NBNUJBLEtBQUEsR0FBQSxHQUdBLEVBQUEsRUFBQSxLQUhBLE1BQUEsRUFBQSxLQUFBLENBQUEsRUFBQSxLQUFBLENBQUEsT0FBQSxNQWdDQSxHQUFBLFdBQUEsRUFBQSxPQUFBLE9BQ0EsRUFBQSxZQUFBLEVBakNBLEVBQUEsT0FBQSxTQUFBLEtBQUEsR0FBQSxHQUFBLE1BQUEsRUFBQSxLQUFBLENBQUEsRUFBQSxLQUFBLEVBQUEsT0FBQSxNQXNDQSxHQUFBLFlBQUEsRUF0Q0EsRUFBQSxPQUFBLFNBQUEsS0FBQSxJQTBDQSxFQUFBLEVBQUEsT0FBQSxxQkFDQSxFQUFBLEVBQUEsT0FBQSxxQkFBQSxLQUdBLEVBQUEsT0FBQSxPQUFBLDBCQUFBLEdBR0EsRUFBQSxPQUFBLFNBQUEsMEJBQUEsR0FFQSxFQUFBLFlBQUEsRUFDQSxFQUFBLE9BQUEsT0FBQSxXQXBEQSxLQUFBLElBQUEsSUFBQSxNQUFBLE1BQUEsR0FBQSxTQUFBLEVBQUEsVUF1REEsT0FDQSxVQUFBLFdBQ0EsS0FBQSxzVkEzVUEsaUJBQUEsT0FBQSxXQUFBLEdBQUEsR0FBQSxLQUFBLEVBQUEsRUFBQSxlQUFBLEVBQUEsRUFBQSxNQUFBLElBQUEsQ0FBQSxPQUFBLEdBQUEsU0FBQSxPQUFBLEtBQUEsRUFBQSxVQUFBLGtCQUFBLEVBQUEsT0FBQSxPQUFBLFlBQUEsS0FBQSxFQUFBLG1CQUFBLE9BQUEsTUFBQSxRQUFBLEVBQUEsVUFBQSxFQUFBLElBQUEsMkJBQUEsRUFBQSxJQUFBLDZCQUFBLElBQUEsTUFBQSxFQUFBLFNBQUEsRUFBQSxVQUFBLE9BQUEsT0FBQSxFQUFBLE9BQUEsWUFBQSxFQUFBLFNBQUEsY0FBQSxFQUFBLGNBQUEsRUFBQSxPQUFBLE9BQUEsS0FBQSxXQUFBLEtBQUEsWUFBQSxFQUFBLFVBQUEsWUFBQSxrQkFBQSxPQUFBLEtBQUEsVUFBQSxJQUFBLE1BQUEsRUFBQSxTQUFBLEVBQUEsR0FBQSxFQUFBLEdBQUEsRUFBQSxJQUFBLGNBQUEsRUFBQSxHQUFBLEtBQUEsUUFBQSxFQUFBLFVBQUEsRUFBQSxVQUFBLFlBQUEsaUJBQUEsT0FBQSxTQUFBLEVBQUEsV0FBQSxLQUFBLFVBQUEsSUFBQSxNQUFBLEVBQUEsMkJBQUEsRUFBQSxHQUFBLEVBQUEsR0FBQSxFQUFBLElBQUEsK0JBQUEsRUFBQSxVQUFBLElBQUEsSUFBQSxpQkFBQTs7O3FGQ0FBLEdBQUEsTUFBQSxRQUFBLHlDQU1BLE9BQUEsUUFBSSxVQUFVLHVCQUNaLFNBQVU7OztxRkNQWixHQUFBLE1BQUEsUUFBQSx5Q0FNQSxPQUFBLFFBQUksVUFBVSxzQkFDWixTQUFVLDhCQUNWLE9BQVEsaUJBQ1IsVUFDRSxnQkFEUSxXQUVOLE1BQU8sTUFBSyxPQUFPOzs7cUZDWHpCLEdBQUEsTUFBQSxRQUFBLHlDQU1BLE9BQUEsUUFBSSxVQUFVLGlCQUNaLFNBQVUseUJBQ1YsS0FBTSxXQUNKLE9BQ0UsV0FBWSxLQUdoQixVQUNFLGNBRFEsV0FFTixNQUFPLE1BQUssT0FBTyxNQUFNLFVBQVUsZUFFckMsTUFKUSxXQUtOLE1BQU8sTUFBSyxPQUFPLE1BQU0sVUFBVSxPQUVyQyxZQVBRLFdBUU4sTUFBTyxNQUFLLE9BQU8sTUFBTSxVQUFVLGFBRXJDLFNBVlEsV0FXTixNQUFPLE1BQUssT0FBTyxNQUFNLFVBQVUsV0FHdkMsT0FDRSxXQUFZLFNBQVUsR0FDcEIsS0FBSyxPQUFPLE9BQU8seUJBQTBCLEtBQUssY0FHdEQsUUFBUyxXQUVQLEdBQU0sR0FBWSxTQUFTLGVBQWUsZUFDdkMsSUFDRCxFQUFVOzs7aUdDckJoQixLQUFBLHFCQUNBLE9BQUEsVUFBQSxZQUFBLGdCQUNBLEtBQUEsV0FDQSxPQUNBLFVBQUEsT0FHQSxVQUNBLEtBQUEsV0FBQSxHQUFBLEdBQUEsSUFFQSxJQUFBLEtBQUEsT0FBQSxTQUNBLE1BQUEsTUFBQSxPQUFBLFFBR0EsSUFBQSxHQUFBLEtBQUEsT0FBQSxNQUFBLE1BQUEsT0FBQSxTQUFBLEdBQUEsTUFBQSxHQUFBLEtBQUEsRUFBQSxPQUFBLFNBQUEsRUFPQSxPQUxBLEtBQ0EsS0FBQSxVQUFBLEVBQUEsUUFDQSxLQUFBLE9BQUEsU0FBQSxhQUFBLEtBQUEsWUFHQSxPQUVBLFFBQUEsV0FBQSxHQUFBLEdBQUEsSUFFQSxPQUFBLE1BQUEsT0FBQSxZQUNBLEtBQUEsT0FBQSxZQUVBLEtBQUEsT0FBQSxNQUFBLFVBQUEsT0FBQSxTQUFBLEdBQUEsTUFBQSxHQUFBLEtBQUEsRUFBQSxZQUFBLFNBS0EsUUFBQSxXQUdBLEdBQUEsS0FBQSxPQUFBLFNBQ0EsTUFBQSxNQUFBLE9BQUEsUUFHQSxNQUFBLE9BQUEsUUFDQSxLQUFBLE9BQUEsU0FBQSxVQUFBLEtBQUEsT0FBQSxTQUdBLE9BQ0EsT0FBQSxTQUFBLEdBQ0EsR0FDQSxLQUFBLE9BQUEsU0FBQSxVQUFBLHdVQTdEQSxpQkFBQSxPQUFBLFdBQUEsR0FBQSxHQUFBLEtBQUEsRUFBQSxFQUFBLGVBQUEsRUFBQSxFQUFBLE1BQUEsSUFBQSxDQUFBLE9BQUEsR0FBQSxPQUFBLEVBQUEsS0FBQSxFQUFBLFVBQUEsRUFBQSxHQUFBLEVBQUEsR0FBQSxFQUFBLElBQUEsY0FBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLEdBQUEsRUFBQSxLQUFBLFdBQUEsSUFBQSxFQUFBLEdBQUEsRUFBQSxLQUFBLFdBQUEsRUFBQSxNQUFBLEVBQUEsR0FBQSxLQUFBLEVBQUEsVUFBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsSUFBQSxvQkFBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLEdBQUEsRUFBQSxRQUFBLE9BQUEsRUFBQSxNQUFBLEVBQUEsR0FBQSxLQUFBLEVBQUEsVUFBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsSUFBQSxlQUFBLEVBQUEsR0FBQSxLQUFBLEVBQUEsR0FBQSxFQUFBLFFBQUEsU0FBQSxLQUFBLEVBQUEsR0FBQSxFQUFBLFFBQUEsWUFBQSxJQUFBLEVBQUEsR0FBQSxFQUFBLFFBQUEsWUFBQSxLQUFBLEVBQUEsR0FBQSxFQUFBLFFBQUEsU0FBQSxFQUFBLFFBQUEsUUFBQSxPQUFBLEVBQUEsTUFBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLFVBQUEsRUFBQSxHQUFBLEVBQUEsR0FBQSxFQUFBLElBQUEsYUFBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLEdBQUEsRUFBQSxLQUFBLFFBQUEsRUFBQSxNQUFBLEVBQUEsR0FBQSxLQUFBLEVBQUEsVUFBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsSUFBQSxhQUFBLEVBQUEsR0FBQSxLQUFBLEVBQUEsR0FBQSxFQUFBLEtBQUEsVUFBQSxhQUFBLGlCQUFBOzs7aUdDUUEsS0FBQSxpQkFDQSxPQUFBLFFBQUEsZUFBQSxlQUFBLGVBQ0EsS0FBQSxXQUNBLE9BQ0EsZUFBQSxFQUNBLFFBQUEsSUFDQSxlQUFBLElBQ0EsU0FBQSxNQUdBLFVBQ0EsY0FDQSxJQUFBLFdBQ0EsR0FBQSxHQUFBLEtBQUEsS0FPQSxPQUxBLFFBQUEsS0FBQSxRQUNBLEtBQUEsTUFBQSxRQUFBLEdBQ0EsRUFBQSxHQUdBLEtBQUEsY0FDQSxLQUFBLHFCQUFBLEdBQUEsSUFHQSxFQUFBLEVBQUEsV0FFQSxFQUFBLFdBQUEsRUFBQSxRQUFBLEtBQUEsTUFBQSxRQUFBLEdBR0EsTUFBQSxLQUNBLEVBQUEsR0FHQSxLQUFBLE1BQUEsUUFBQSxXQUFBLElBRUEsS0FBQSxxQkFBQSxHQUFBLEtBR0EsSUFBQSxTQUFBLEdBRUEsR0FBQSxHQUFBLEdBQUEsUUFBQSxhQUFBLEtBQ0EsRUFBQSxFQUFBLFFBQUEsRUFBQSxHQUlBLE1BQUEsTUFBQSxRQUFBLE1BSUEsU0FDQSxxQkFBQSxTQUFBLEVBQUEsR0FDQSxHQUFBLEdBQUEsRUFBQSxXQUVBLEVBQUEsR0FBQSxRQUFBLGFBQUEsSUFRQSxPQVBBLEdBQUEsRUFBQSxRQUFBLEVBQUEsSUFFQSxNQUFBLEtBQUEsVUFDQSxFQUFBLEVBQUEsUUFBQSxLQUFBLE1BSUEsR0FBQSxJQUFBLEVBR0EsR0FBQSxFQUFBLElBQUEsS0FBQSxTQUFBLElBRkEsS0FLQSxRQUFBLFdBQ0EsS0FBQSxRQUFBLEtBQUEsYUFBQSxLQUFBLFFBQ0EsS0FBQSxlQUFBLE1BQUEsS0FBQSxRQUFBLElBQUEsd1VBOUVBLGlCQUFBLE9BQUEsV0FBQSxHQUFBLEdBQUEsS0FBQSxFQUFBLEVBQUEsZUFBQSxFQUFBLEVBQUEsTUFBQSxJQUFBLENBQUEsT0FBQSxHQUFBLFFBQUEsRUFBQSxZQUFBLEVBQUEsUUFBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsaUJBQUEsRUFBQSxTQUFBLGFBQUEsS0FBQSxRQUFBLFFBQUEsVUFBQSxNQUFBLEVBQUEsYUFBQSxXQUFBLGlCQUFBLE1BQUEsRUFBQSxXQUFBLE9BQUEsS0FBQSxRQUFBLFVBQUEsTUFBQSxFQUFBLGNBQUEsSUFBQSxLQUFBLFNBQUEsR0FBQSxFQUFBLGVBQUEsR0FBQSxNQUFBLFNBQUEsR0FBQSxFQUFBLGVBQUEsR0FBQSxRQUFBLFNBQUEsR0FBQSxJQUFBLEVBQUEsS0FBQSxRQUFBLFFBQUEsRUFBQSxHQUFBLEVBQUEsUUFBQSxRQUFBLEdBQUEsRUFBQSxJQUFBLFNBQUEsTUFBQSxLQUFBLEdBQUEsa0JBQUEsTUFBQSxTQUFBLEdBQUEsRUFBQSxPQUFBLFlBQUEsRUFBQSxhQUFBLEVBQUEsT0FBQSxjQUFBLGlCQUFBOzs7a0lDeUNBLElBQUEsR0FBQSxRQUFBLGlDQUNBLEVBQUEsUUFBQSxnREFHQSxZQUNBLG1CQUFBLEVBQUEsUUFDQSxpQkFBQSxFQUFBLFNBRUEsS0FBQSxhQUNBLEtBQUEsV0FDQSxPQUNBLFNBQ0EsYUFDQSxVQUNBLEtBQUEsR0FDQSxPQUFBLHlCQUlBLE9BQ0EsU0FBQSxPQUNBLGNBQUEsT0FDQSxTQUFBLFNBQ0EsT0FBQSxNQUNBLEtBQUEsTUFDQSxVQUFBLFFBQ0EsV0FBQSxPQUNBLE9BQUEsT0FDQSxVQUNBLFNBQUEsRUFDQSxLQUFBLFVBR0EsVUFDQSxVQUFBLFdBQ0EsT0FBQSxLQUFBLGFBSUEsS0FBQSxNQUFBLFFBRUEsU0FBQSxXQUFBLEdBQUEsR0FBQSxLQUNBLEVBQUEsQ0FTQSxPQVJBLE1BQUEsTUFBQSxRQUFBLFNBQUEsR0FDQSxHQUFBLEdBQUEsRUFBQSxFQUFBLGdCQUFBLEVBQ0EsR0FBQSxFQUFBLEVBQUEsV0FBQSxHQUFBLENBQ0EsaUJBQUEsS0FDQSxHQUFBLEtBSUEsSUFHQSxTQUNBLGtCQUFBLFNBQUEsRUFBQSxHQUNBLEdBQUEsR0FBQSxLQUFBLFVBQUEsRUFFQSxPQUFBLElBQUEsRUFBQSxJQUFBLEVBQUEsR0FBQSxjQUVBLFFBQUEsV0FDQSxHQUFBLEtBQ0EsTUFBQSxPQUFBLFFBQUEsU0FBQSxHQUNBLEVBQUEsRUFBQSxNQUFBLE9BR0EsS0FBQSxNQUFBLEtBQUEsSUFFQSxXQUFBLFNBQUEsR0FDQSxLQUFBLE1BQUEsT0FBQSxFQUFBLEdBQ0Esa0JBQUEsTUFBQSxVQUNBLEtBQUEsU0FBQSxLQUFBLFFBR0EsT0FBQSxTQUFBLEdBQ0Esa0JBQUEsTUFBQSxVQUNBLEtBQUEsU0FBQSxLQUFBLFNBSUEsUUFBQSxXQUNBLEtBQUEsTUFBQSxLQUFBLFVBRUEsT0FDQSxLQUFBLFdBQ0EsS0FBQSxNQUFBLEtBQUEsVUFFQSxPQUFBLFdBQ0EsS0FBQSxVQUFBLEtBQUEsZ1ZBaklBLGlCQUFBLE9BQUEsV0FBQSxHQUFBLEdBQUEsS0FBQSxFQUFBLEVBQUEsZUFBQSxFQUFBLEVBQUEsTUFBQSxJQUFBLENBQUEsT0FBQSxHQUFBLE9BQUEsWUFBQSxpQkFBQSxFQUFBLFVBQUEsRUFBQSxTQUFBLFlBQUEsOEJBQUEsRUFBQSxTQUFBLEVBQUEsR0FBQSxFQUFBLE9BQUEsU0FBQSxHQUFBLE1BQUEsR0FBQSxNQUFBLElBQUEsRUFBQSxPQUFBLEVBQUEsR0FBQSxhQUFBLEVBQUEsR0FBQSxFQUFBLE9BQUEsZ0JBQUEsRUFBQSxHQUFBLEtBQUEsRUFBQSxTQUFBLEVBQUEsTUFBQSxFQUFBLEdBQUEsT0FBQSxFQUFBLE1BQUEsR0FBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLEdBQUEsRUFBQSxNQUFBLFNBQUEsRUFBQSxHQUFBLE1BQUEsR0FBQSxNQUFBLElBQUEsSUFBQSxFQUFBLEdBQUEsRUFBQSxPQUFBLFNBQUEsR0FBQSxNQUFBLEdBQUEsTUFBQSxJQUFBLEVBQUEsS0FBQSxZQUFBLHFCQUFBLEVBQUEsR0FBQSxFQUFBLGtCQUFBLEVBQUEsRUFBQSxNQUFBLFNBQUEsRUFBQSxHQUFBLE1BQUEsR0FBQSxRQUFBLElBQUEsRUFBQSxZQUFBLHdCQUFBLEVBQUEsR0FBQSxlQUFBLEVBQUEsR0FBQSxJQUFBLEVBQUEsVUFBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLFNBQUEsRUFBQSxPQUFBLFdBQUEsRUFBQSxLQUFBLEVBQUEsa0JBQUEsT0FBQSxjQUFBLHNCQUFBLGVBQUEsS0FBQSxPQUFBLE1BQUEsRUFBQSxFQUFBLE1BQUEsU0FBQSxTQUFBLEdBQUEsRUFBQSxLQUFBLEVBQUEsRUFBQSxLQUFBLElBQUEsV0FBQSxzQkFBQSxFQUFBLEtBQUEsRUFBQSxHQUFBLEtBQUEsYUFBQSxFQUFBLEtBQUEsRUFBQSxvQkFBQSxPQUFBLGNBQUEsc0JBQUEsZUFBQSxLQUFBLE9BQUEsTUFBQSxFQUFBLEVBQUEsTUFBQSxTQUFBLFNBQUEsR0FBQSxFQUFBLEtBQUEsRUFBQSxFQUFBLEtBQUEsSUFBQSxXQUFBLHNCQUFBLEVBQUEsS0FBQSxFQUFBLEdBQUEsS0FBQSxTQUFBLEVBQUEsS0FBQSxFQUFBLFNBQUEsYUFBQSxLQUFBLFFBQUEsUUFBQSxVQUFBLE1BQUEsRUFBQSxFQUFBLE1BQUEsV0FBQSxxQkFBQSxZQUFBLHNCQUFBLE9BQUEsWUFBQSxFQUFBLGFBQUEsVUFBQSxNQUFBLEVBQUEsRUFBQSxPQUFBLElBQUEsUUFBQSxTQUFBLEdBQUEsSUFBQSxFQUFBLEtBQUEsUUFBQSxRQUFBLEVBQUEsR0FBQSxFQUFBLFFBQUEsUUFBQSxHQUFBLEVBQUEsSUFBQSxTQUFBLE1BQUEsS0FBQSxHQUFBLGtCQUFBLE1BQUEsU0FBQSxHQUFBLEVBQUEsT0FBQSxXQUFBLEVBQUEsS0FBQSxFQUFBLEVBQUEsS0FBQSxFQUFBLE9BQUEsV0FBQSxFQUFBLE1BQUEsR0FBQSxFQUFBLEtBQUEsRUFBQSxHQUFBLEtBQUEsRUFBQSxTQUFBLEVBQUEsS0FBQSxFQUFBLE9BQUEsV0FBQSxFQUFBLEtBQUEsRUFBQSxrQkFBQSxPQUFBLGdCQUFBLEVBQUEsY0FBQSxzQkFBQSxlQUFBLEtBQUEsT0FBQSxNQUFBLEVBQUEsRUFBQSxNQUFBLFNBQUEsU0FBQSxHQUFBLEVBQUEsS0FBQSxFQUFBLEVBQUEsS0FBQSxJQUFBLFdBQUEsc0JBQUEsRUFBQSxLQUFBLEVBQUEsR0FBQSxLQUFBLGFBQUEsRUFBQSxLQUFBLEVBQUEsb0JBQUEsT0FBQSxnQkFBQSxFQUFBLGNBQUEsc0JBQUEsZUFBQSxLQUFBLE9BQUEsTUFBQSxFQUFBLEVBQUEsTUFBQSxTQUFBLFNBQUEsR0FBQSxFQUFBLEtBQUEsRUFBQSxFQUFBLEtBQUEsSUFBQSxXQUFBLHNCQUFBLEVBQUEsS0FBQSxFQUFBLEdBQUEsS0FBQSxTQUFBLEVBQUEsS0FBQSxFQUFBLFFBQUEsRUFBQSxHQUFBLEVBQUEsR0FBQSxFQUFBLEVBQUEsVUFBQSxFQUFBLE1BQUEsSUFBQSxLQUFBLEVBQUEsR0FBQSxLQUFBLEVBQUEsU0FBQSxFQUFBLE1BQUEsWUFBQSxzRUFBQSxFQUFBLFVBQUEsWUFBQSw0Q0FBQSxJQUFBLE1BQUEsU0FBQSxHQUFBLE1BQUEsR0FBQSxXQUFBLE9BQUEsRUFBQSxHQUFBLEVBQUEsR0FBQSxFQUFBLElBQUEsZ0JBQUEsRUFBQSxNQUFBLEtBQUEsRUFBQSxHQUFBLEtBQUEsRUFBQSxTQUFBLEVBQUEsTUFBQSxFQUFBLEdBQUEsRUFBQSxPQUFBLFNBQUEsR0FBQSxNQUFBLEdBQUEsTUFBQSxJQUFBLEVBQUEsT0FBQSxFQUFBLFdBQUEsRUFBQSxLQUFBLEVBQUEsT0FBQSxFQUFBLEdBQUEsV0FBQSxFQUFBLG9CQUFBLE9BQUEsZ0JBQUEsRUFBQSxNQUFBLEVBQUEsU0FBQSxlQUFBLFFBQUEsR0FBQSxFQUFBLE9BQUEsRUFBQSxHQUFBLFdBQUEsRUFBQSxHQUFBLEtBQUEsRUFBQSxTQUFBLEVBQUEsTUFBQSxFQUFBLEdBQUEsT0FBQSxFQUFBLE1BQUEsR0FBQSxFQUFBLE1BQUEsR0FBQSxFQUFBLEtBQUEsRUFBQSxHQUFBLEtBQUEsRUFBQSxTQUFBLEVBQUEsVUFBQSxZQUFBLDBDQUFBLElBQUEsTUFBQSxTQUFBLEdBQUEsTUFBQSxHQUFBLGNBQUEsRUFBQSxHQUFBLEVBQUEsR0FBQSxFQUFBLFlBQUEsRUFBQSxJQUFBLGNBQUEsRUFBQSxRQUFBLGlCQUFBOzs7aUdDbUJBLEtBQUEsUUFDQSxLQUFBLFdBQ0EsT0FDQSxlQUdBLE9BQUEsV0FBQSxZQUFBLG9CQUNBLFVBQ0EsYUFBQSxXQUNBLFFBQUEsS0FBQSxnQkFBQSxLQUFBLGdCQUFBLEtBQUEsVUFBQSxTQUdBLFNBQ0EsV0FBQSxTQUFBLEdBQ0EsS0FBQSxVQUFBLE9BQUEsRUFBQSxHQUNBLEtBQUEsU0FBQSxLQUFBLFlBRUEsZUFBQSxXQUNBLEtBQUEsTUFBQSxVQUFBLFNBR0EsVUFBQSxTQUFBLEdBQ0EsR0FBQSxHQUFBLHNHQUNBLFNBQUEsRUFBQSxPQUFBLE1BQUEsSUFFQSxhQUFBLFNBQUEsR0FHQSxJQUFBLEdBSEEsR0FBQSxLQUNBLEVBQUEsRUFBQSxPQUFBLE9BQUEsRUFBQSxhQUFBLFVBRUEsRUFBQSxFQUFBLEVBQUEsRUFBQSxPQUFBLEtBSEEsU0FBQSxHQUlBLEdBQUEsR0FBQSxFQUFBLEdBQ0EsRUFBQSxHQUFBLFdBRUEsR0FBQSxpQkFBQSxPQUFBLFlBQ0EsRUFBQSxjQUFBLEVBQUEsVUFBQSxFQUFBLFVBQ0EsRUFBQSxVQUFBLE1BQ0EsS0FBQSxFQUFBLE9BQ0EsS0FBQSxFQUNBLEtBQUEsRUFBQSxLQUNBLEtBQUEsRUFBQSxLQUNBLEtBQUEsRUFBQSxPQUdBLGtCQUFBLEdBQUEsVUFDQSxFQUFBLFNBQUEsRUFBQSxjQUdBLEdBRUEsRUFBQSxjQUFBLElBcEJBLHdVQS9DQSxpQkFBQSxPQUFBLFdBQUEsR0FBQSxHQUFBLEtBQUEsRUFBQSxFQUFBLGVBQUEsRUFBQSxFQUFBLE1BQUEsSUFBQSxDQUFBLE9BQUEsR0FBQSxPQUFBLFlBQUEsV0FBQSxFQUFBLFVBQUEsWUFBQSxnQ0FBQSxPQUFBLFNBQUEsRUFBQSxjQUFBLElBQUEsTUFBQSxFQUFBLGtCQUFBLEVBQUEsR0FBQSxFQUFBLEdBQUEsRUFBQSxJQUFBLGdCQUFBLEVBQUEsR0FBQSxLQUFBLEVBQUEsU0FBQSxJQUFBLFlBQUEsWUFBQSxxQkFBQSxPQUFBLFNBQUEsRUFBQSxhQUFBLEtBQUEsT0FBQSxXQUFBLEVBQUEsVUFBQSxJQUFBLE9BQUEsRUFBQSxnQkFBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLFVBQUEsT0FBQSxFQUFBLE9BQUEsWUFBQSxrQkFBQSxFQUFBLE1BQUEsWUFBQSx3QkFBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsSUFBQSxrQkFBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLFNBQUEsWUFBQSxTQUFBLEVBQUEsR0FBQSxFQUFBLFVBQUEsU0FBQSxFQUFBLEdBQUEsTUFBQSxHQUFBLE1BQUEsSUFBQSxJQUFBLEVBQUEsTUFBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsU0FBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLE1BQUEsWUFBQSw2QkFBQSxFQUFBLFVBQUEsWUFBQSx1Q0FBQSxJQUFBLE1BQUEsU0FBQSxHQUFBLE1BQUEsR0FBQSxXQUFBLE9BQUEsRUFBQSxHQUFBLEVBQUEsR0FBQSxFQUFBLElBQUEsd0JBQUEsS0FBQSxFQUFBLFFBQUEsaUJBQUE7Ozs0RUNzRUEsUUFBQSxLQUNBLEdBQUEsR0FBQSxXQUNBLE9BQUEsT0FBQSxFQUFBLEtBQUEsVUFBQSxHQUFBLFNBQUEsSUFBQSxVQUFBLEdBR0EsT0FBQSxLQUFBLElBQUEsSUFBQSxJQUFBLElBQUEsSUFBQSxJQUFBLElBQUEsSUFBQSxJQUFBLElBQUEsMERBVkEsSUFBQSxHQUFBLFFBQUEsZ0NBQ0EsRUFBQSxRQUFBLHVCQUNBLEVBQUEsUUFBQSwyQkFDQSxFQUFBLFFBQUEsOENBVUEsWUFDQSxrQkFBQSxFQUFBLFFBQ0EsV0FBQSxFQUFBLFFBQ0EsU0FBQSxFQUFBLFFBQ0EsZUFBQSxFQUFBLFNBRUEsT0FBQSxhQUFBLFdBQUEsYUFBQSxZQUFBLFdBQ0EsS0FBQSxXQUNBLE9BQ0EsWUFBQSxJQUNBLFdBQUEsS0FHQSxTQUNBLEtBQUEsU0FBQSxHQUNBLE1BQUEsU0FBQSxFQUFBLFdBRUEsZUFBQSxXQUNBLEtBQUEsU0FBQSxLQUFBLFVBQUEsTUFBQSxLQUFBLFVBQUEsTUFDQSxLQUFBLFdBQUEsS0FBQSxVQUFBLE1BRUEsa0JBQUEsTUFBQSxVQUNBLEtBQUEsU0FBQSxLQUFBLFdBR0EsWUFBQSxXQUNBLGtCQUFBLE1BQUEsUUFDQSxLQUFBLE9BQUEsS0FBQSxZQUdBLGNBQUEsU0FBQSxHQUNBLEtBQUEsVUFBQSxNQUFBLEVBQ0EsS0FBQSxtQkFHQSxVQUNBLFNBQUEsV0FDQSxNQUFBLE1BQUEsT0FBQSxNQUFBLFVBRUEsY0FBQSxXQUNBLEdBQUEsR0FBQSxLQUFBLFdBQUEsS0FBQSxVQUFBLEtBRUEsT0FBQSxJQUFBLEVBQUEsY0FFQSxXQUFBLFdBQ0EsR0FBQSxHQUFBLEtBQUEsV0FBQSxLQUFBLFVBQUEsS0FFQSxPQUFBLElBQUEsRUFBQSxPQUFBLE1BRUEsbUJBQUEsV0FDQSxNQUFBLGFBQUEsS0FBQSxVQUFBLE1BQUEsS0FBQSxZQUFBLElBRUEsbUJBQUEsV0FFQSxJQUFBLEdBQUEsR0FBQSxFQUFBLEVBQUEsS0FBQSxVQUFBLFFBQUEsT0FBQSxJQUNBLEdBQUEsS0FBQSxZQUFBLEtBQUEsVUFBQSxRQUFBLEdBQUEsTUFDQSxNQUFBLE1BQUEsVUFBQSxRQUFBLEdBQUEsSUFHQSxPQUFBLEtBR0EsUUFBQSxXQUNBLEtBQUEsa0JBRUEsT0FFQSxVQUFBLFdBQ0EsS0FBQSxzVkFsSkEsaUJBQUEsT0FBQSxXQUFBLEdBQUEsR0FBQSxLQUFBLEVBQUEsRUFBQSxlQUFBLEVBQUEsRUFBQSxNQUFBLElBQUEsQ0FBQSxPQUFBLEdBQUEsT0FBQSxZQUFBLGlCQUFBLFdBQUEsRUFBQSxVQUFBLE1BQUEsWUFBQSxFQUFBLFVBQUEsTUFBQSxTQUFBLEVBQUEsVUFBQSxLQUFBLEVBQUEsU0FBQSxZQUFBLHNCQUFBLE9BQUEsSUFBQSxFQUFBLGVBQUEsRUFBQSxHQUFBLEVBQUEsR0FBQSxFQUFBLFVBQUEsVUFBQSxFQUFBLEtBQUEsRUFBQSxHQUFBLEtBQUEsUUFBQSxFQUFBLFVBQUEsS0FBQSxFQUFBLFNBQUEsWUFBQSx3QkFBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsVUFBQSxVQUFBLEVBQUEsS0FBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLFVBQUEsS0FBQSxFQUFBLE9BQUEsVUFBQSxVQUFBLEVBQUEsR0FBQSxFQUFBLEtBQUEsRUFBQSxVQUFBLFVBQUEsRUFBQSxLQUFBLEVBQUEsR0FBQSxLQUFBLEVBQUEsY0FBQSxPQUFBLEVBQUEsS0FBQSxZQUFBLHdCQUFBLEVBQUEsR0FBQSxFQUFBLGNBQUEsU0FBQSxFQUFBLEdBQUEsTUFBQSxHQUFBLFFBQUEsSUFBQSxJQUFBLEVBQUEsR0FBQSxFQUFBLEdBQUEsSUFBQSxFQUFBLFVBQUEsR0FBQSxFQUFBLEtBQUEsRUFBQSxHQUFBLEtBQUEsU0FBQSxFQUFBLFVBQUEsS0FBQSxFQUFBLFNBQUEsYUFBQSxLQUFBLFFBQUEsUUFBQSxVQUFBLE1BQUEsRUFBQSxVQUFBLE1BQUEsV0FBQSxvQkFBQSxZQUFBLHFCQUFBLE9BQUEsR0FBQSxFQUFBLFlBQUEsS0FBQSxPQUFBLFlBQUEsRUFBQSxVQUFBLGFBQUEsVUFBQSxNQUFBLEVBQUEsVUFBQSxPQUFBLElBQUEsS0FBQSxFQUFBLFlBQUEsT0FBQSxTQUFBLEdBQUEsRUFBQSxPQUFBLFdBQUEsRUFBQSxLQUFBLEVBQUEsVUFBQSxRQUFBLEVBQUEsT0FBQSxRQUFBLEVBQUEsZ0JBQUEsUUFBQSxTQUFBLEdBQUEsSUFBQSxFQUFBLEtBQUEsUUFBQSxRQUFBLEVBQUEsR0FBQSxFQUFBLFFBQUEsUUFBQSxHQUFBLEVBQUEsSUFBQSxTQUFBLE1BQUEsS0FBQSxHQUFBLHFCQUFBLEVBQUEsS0FBQSxFQUFBLEdBQUEsS0FBQSxhQUFBLEVBQUEsVUFBQSxLQUFBLEVBQUEsWUFBQSxhQUFBLEtBQUEsUUFBQSxRQUFBLFVBQUEsTUFBQSxFQUFBLFVBQUEsTUFBQSxXQUFBLG9CQUFBLFlBQUEscUJBQUEsT0FBQSxHQUFBLEVBQUEsWUFBQSxZQUFBLEVBQUEsVUFBQSxhQUFBLFVBQUEsTUFBQSxFQUFBLFVBQUEsT0FBQSxJQUFBLE9BQUEsU0FBQSxHQUFBLEVBQUEsT0FBQSxXQUFBLEVBQUEsS0FBQSxFQUFBLFVBQUEsUUFBQSxFQUFBLE9BQUEsUUFBQSxFQUFBLG1CQUFBLEVBQUEsS0FBQSxFQUFBLEdBQUEsS0FBQSxTQUFBLEVBQUEsVUFBQSxLQUFBLEVBQUEsY0FBQSxZQUFBLHFCQUFBLE9BQUEsU0FBQSxFQUFBLFNBQUEsT0FBQSxhQUFBLGdCQUFBLEVBQUEsR0FBQSxFQUFBLGFBQUEsSUFBQSxNQUFBLEVBQUEsZ0JBQUEsT0FBQSxNQUFBLEVBQUEsVUFBQSxNQUFBLFNBQUEsU0FBQSxHQUFBLEVBQUEsS0FBQSxFQUFBLFVBQUEsUUFBQSxJQUFBLFdBQUEscUJBQUEsRUFBQSxLQUFBLEVBQUEsR0FBQSxLQUFBLFVBQUEsRUFBQSxVQUFBLEtBQUEsRUFBQSxTQUFBLGFBQUEsS0FBQSxRQUFBLFFBQUEsVUFBQSxNQUFBLEVBQUEsVUFBQSxNQUFBLFdBQUEsb0JBQUEsWUFBQSxzQkFBQSxPQUFBLEdBQUEsRUFBQSxZQUFBLEtBQUEsU0FBQSxVQUFBLE1BQUEsRUFBQSxVQUFBLE9BQUEsSUFBQSxPQUFBLFNBQUEsR0FBQSxFQUFBLE9BQUEsV0FBQSxFQUFBLEtBQUEsRUFBQSxVQUFBLFFBQUEsRUFBQSxPQUFBLFFBQUEsRUFBQSxtQkFBQSxFQUFBLEtBQUEsRUFBQSxHQUFBLEtBQUEsc0JBQUEsRUFBQSxVQUFBLEtBQUEsRUFBQSxtQkFBQSxPQUFBLFNBQUEsRUFBQSxjQUFBLEVBQUEsU0FBQSxhQUFBLEtBQUEsUUFBQSxRQUFBLFVBQUEsTUFBQSxFQUFBLFVBQUEsTUFBQSxXQUFBLG9CQUFBLFlBQUEseURBQUEsT0FBQSxhQUFBLGVBQUEsR0FBQSxFQUFBLFlBQUEsS0FBQSxZQUFBLFVBQUEsTUFBQSxFQUFBLFVBQUEsT0FBQSxJQUFBLE9BQUEsU0FBQSxHQUFBLEVBQUEsT0FBQSxXQUFBLEVBQUEsS0FBQSxFQUFBLFVBQUEsUUFBQSxFQUFBLE9BQUEsUUFBQSxFQUFBLHFCQUFBLEVBQUEsS0FBQSxFQUFBLEdBQUEsS0FBQSxhQUFBLEVBQUEsVUFBQSxLQUFBLEVBQUEsU0FBQSxhQUFBLEtBQUEsUUFBQSxRQUFBLFVBQUEsTUFBQSxFQUFBLFVBQUEsTUFBQSxXQUFBLG9CQUFBLFlBQUEseUJBQUEsT0FBQSxhQUFBLGVBQUEsR0FBQSxFQUFBLFlBQUEsS0FBQSxZQUFBLFVBQUEsTUFBQSxFQUFBLFVBQUEsT0FBQSxJQUFBLE9BQUEsU0FBQSxHQUFBLEVBQUEsT0FBQSxXQUFBLEVBQUEsS0FBQSxFQUFBLFVBQUEsUUFBQSxFQUFBLE9BQUEsUUFBQSxFQUFBLG1CQUFBLEVBQUEsS0FBQSxFQUFBLEdBQUEsS0FBQSxXQUFBLEVBQUEsVUFBQSxLQUFBLEVBQUEsU0FBQSxhQUFBLEtBQUEsUUFBQSxRQUFBLFVBQUEsTUFBQSxFQUFBLFVBQUEsTUFBQSxXQUFBLG9CQUFBLE9BQUEsS0FBQSxVQUFBLFVBQUEsTUFBQSxFQUFBLFVBQUEsT0FBQSxJQUFBLE1BQUEsU0FBQSxHQUFBLEVBQUEsT0FBQSxXQUFBLEVBQUEsS0FBQSxFQUFBLFVBQUEsUUFBQSxFQUFBLE9BQUEsV0FBQSxFQUFBLEtBQUEsRUFBQSxHQUFBLEtBQUEsVUFBQSxFQUFBLFVBQUEsS0FBQSxFQUFBLE9BQUEsWUFBQSxvRUFBQSxFQUFBLE9BQUEsWUFBQSwwRkFBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLFFBQUEsWUFBQSxrREFBQSxPQUFBLEdBQUEsRUFBQSxlQUFBLEVBQUEsR0FBQSxFQUFBLEdBQUEsRUFBQSx1QkFBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLFVBQUEsYUFBQSxLQUFBLFFBQUEsUUFBQSxVQUFBLE1BQUEsRUFBQSxVQUFBLE1BQUEsV0FBQSxvQkFBQSxZQUFBLGdJQUFBLE9BQUEsR0FBQSxFQUFBLGFBQUEsSUFBQSxRQUFBLFNBQUEsR0FBQSxHQUFBLEdBQUEsTUFBQSxVQUFBLE9BQUEsS0FBQSxFQUFBLE9BQUEsUUFBQSxTQUFBLEdBQUEsTUFBQSxHQUFBLFdBQUEsSUFBQSxTQUFBLEdBQUEsTUFBQSxVQUFBLEdBQUEsRUFBQSxPQUFBLEVBQUEsT0FBQSxHQUFBLEtBQUEsRUFBQSxVQUFBLFFBQUEsRUFBQSxPQUFBLFNBQUEsRUFBQSxFQUFBLEtBQUEsRUFBQSxtQkFBQSxFQUFBLFVBQUEsT0FBQSxTQUFBLEdBQUEsTUFBQSxNQUFBLEVBQUEsR0FBQSxFQUFBLEdBQUEsRUFBQSxJQUFBLGlDQUFBLEVBQUEsR0FBQSxLQUFBLEVBQUEsR0FBQSxFQUFBLFVBQUEsUUFBQSxTQUFBLEdBQUEsTUFBQSxHQUFBLFVBQUEsSUFBQSxFQUFBLEtBQUEsT0FBQSxTQUFBLHFCQUFBLEtBQUEsRUFBQSxNQUFBLFVBQUEsTUFBQSxFQUFBLFNBQUEsRUFBQSxHQUFBLGFBQUEsRUFBQSxHQUFBLEVBQUEsTUFBQSxpQkFBQSxLQUFBLEVBQUEsS0FBQSxFQUFBLEdBQUEsS0FBQSxXQUFBLEVBQUEsVUFBQSxLQUFBLEVBQUEsT0FBQSxZQUFBLDRCQUFBLEVBQUEsTUFBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsVUFBQSxjQUFBLEVBQUEsS0FBQSxFQUFBLEdBQUEsS0FBQSxRQUFBLEVBQUEsVUFBQSxLQUFBLEVBQUEsT0FBQSxZQUFBLHdCQUFBLEVBQUEsU0FBQSxZQUFBLG9CQUFBLEVBQUEsU0FBQSxhQUFBLEtBQUEsUUFBQSxRQUFBLFVBQUEsTUFBQSxFQUFBLFVBQUEsTUFBQSxXQUFBLG9CQUFBLE9BQUEsS0FBQSxRQUFBLEdBQUEsRUFBQSxZQUFBLEtBQUEsRUFBQSxZQUFBLE1BQUEsS0FBQSxVQUFBLFFBQUEsRUFBQSxHQUFBLEVBQUEsVUFBQSxNQUFBLE1BQUEsSUFBQSxRQUFBLFNBQUEsR0FBQSxNQUFBLEdBQUEsS0FBQSxFQUFBLFVBQUEsUUFBQSxNQUFBLEVBQUEsbUJBQUEsRUFBQSxHQUFBLElBQUEsRUFBQSxHQUFBLEVBQUEsSUFBQSxvQkFBQSxPQUFBLEVBQUEsR0FBQSxLQUFBLEVBQUEsU0FBQSxZQUFBLG9CQUFBLEVBQUEsU0FBQSxhQUFBLEtBQUEsUUFBQSxRQUFBLFVBQUEsTUFBQSxFQUFBLFVBQUEsTUFBQSxXQUFBLG9CQUFBLE9BQUEsS0FBQSxRQUFBLEdBQUEsRUFBQSxZQUFBLEtBQUEsRUFBQSxZQUFBLE1BQUEsS0FBQSxVQUFBLFFBQUEsRUFBQSxHQUFBLEVBQUEsVUFBQSxNQUFBLE1BQUEsSUFBQSxRQUFBLFNBQUEsR0FBQSxNQUFBLEdBQUEsS0FBQSxFQUFBLFVBQUEsUUFBQSxNQUFBLEVBQUEsbUJBQUEsRUFBQSxHQUFBLElBQUEsRUFBQSxHQUFBLEVBQUEsSUFBQSxtQkFBQSxTQUFBLEVBQUEsS0FBQSxFQUFBLEdBQUEsS0FBQSxlQUFBLEVBQUEsVUFBQSxLQUFBLEVBQUEsZ0JBQUEsT0FBQSxhQUFBLEVBQUEsVUFBQSxVQUFBLFlBQUEsRUFBQSxVQUFBLFNBQUEsaUJBQUEsRUFBQSxVQUFBLGNBQUEsT0FBQSxFQUFBLFVBQUEsT0FBQSxLQUFBLEVBQUEsVUFBQSxNQUFBLE9BQUEsRUFBQSxXQUFBLGVBQUEsRUFBQSxVQUFBLGNBQUEsRUFBQSxLQUFBLEVBQUEsR0FBQSxLQUFBLFNBQUEsRUFBQSxVQUFBLEtBQUEsRUFBQSxVQUFBLE9BQUEsbUJBQUEsRUFBQSxVQUFBLGVBQUEsV0FBQSxFQUFBLFVBQUEsU0FBQSxZQUFBLEVBQUEsaUJBQUEsRUFBQSxNQUFBLElBQUEsaUJBQUE7OzsrRUNVQSxJQUFBLEdBQUEsUUFBQSw4RkFHQSxZQUNBLGVBQUEsRUFBQSxTQUVBLE9BQUEsU0FBQSxZQUFBLGNBQUEsWUFBQSxXQUNBLFNBRUEsZ0JBQUEsaVZBbkJBLGlCQUFBLE9BQUEsV0FBQSxHQUFBLEdBQUEsS0FBQSxFQUFBLEVBQUEsZUFBQSxFQUFBLEVBQUEsTUFBQSxJQUFBLENBQUEsT0FBQSxHQUFBLFFBQUEsWUFBQSxTQUFBLE9BQUEsT0FBQSxHQUFBLE9BQUEsUUFBQSxJQUFBLE9BQUEsU0FBQSxHQUFBLE1BQUEsR0FBQSxpQkFBQSxFQUFBLGdCQUFBLE9BQUEsRUFBQSxHQUFBLEVBQUEsT0FBQSxTQUFBLEdBQUEsTUFBQSxHQUFBLGdCQUFBLElBQUEsRUFBQSxLQUFBLE9BQUEsYUFBQSxFQUFBLFlBQUEsRUFBQSxTQUFBLGNBQUEsRUFBQSxXQUFBLFlBQUEsRUFBQSxTQUFBLFVBQUEsRUFBQSxZQUFBLEVBQUEsR0FBQSxLQUFBLEVBQUEsR0FBQSxXQUFBLEVBQUEsR0FBQSxLQUFBLEVBQUEsV0FBQSwwQkFBQSxFQUFB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QUVBLEVBQUEsRUFBQSxFQUFBLEVBQUEsT0FBQSxJQUNBLEVBQUEsRUFBQSxLQUFBLEVBQUEsRUFBQSxLQUFBLEdBQUEsRUFDQSxHQUFBLEVBQUEsRUFBQSxFQUFBLEdBSUEsSUFBQSxJQUNBLE9BQUEsS0FBQSxLQUFBLEdBQ0EsTUFBQSxRQUFBLEtBQUEsR0FDQSxNQUFBLFFBQUEsS0FBQSxHQUNBLFNBQUEsS0FBQSxLQUFBLElBR0EsRUFBQSxDQUNBLEtBQUEsR0FBQSxLQUFBLEdBQ0EsSUFBQSxJQUFBLEVBQUEsR0FBQSxFQUFBLENBU0EsT0FQQSxJQUFBLElBQUEsRUFBQSxHQUdBLEVBQUEsUUE3QkEsSUE4QkEsR0FBQSxFQUFBLE9BOUJBLEdBaUNBLEdBRUEsY0FBQSxXQUNBLEdBQUEsR0FBQSxLQUFBLGFBRUEsT0FBQSxHQUFBLEdBQ0EsWUFHQSxFQUFBLEdBQ0EsVUFHQSxHQUFBLEdBQ0EsVUFHQSxFQUFBLEVBQ0EsY0FEQSx3VUF2RUEsaUJBQUEsT0FBQSxXQUFBLEdBQUEsR0FBQSxLQUFBLEVBQUEsRUFBQSxlQUFBLEVBQUEsRUFBQSxNQUFBLElBQUEsQ0FBQSxPQUFBLEdBQUEsT0FBQSxZQUFBLGtCQUFBLE1BQUEsRUFBQSxnQkFBQSxFQUFBLEdBQUEsV0FBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLEdBQUEsR0FBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLE9BQUEsWUFBQSxzREFBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsSUFBQSx5QkFBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLE9BQUEsWUFBQSxzREFBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsSUFBQSx5QkFBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLE9BQUEsWUFBQSxzREFBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsSUFBQSx5QkFBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLE9BQUEsWUFBQSx3REFBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsSUFBQSw0QkFBQSxJQUFBLGlCQUFBLGlCQUFBLFdBQUEsR0FBQSxHQUFBLEtBQUEsRUFBQSxFQUFBLGVBQUEsRUFBQSxFQUFBLE1BQUEsSUFBQSxDQUFBLE9BQUEsR0FBQSxPQUFBLFlBQUEseUJBQUEsRUFBQSxPQUFBLFlBQUE7OztnUENpQkEsRUFBQSxRQUFBLHdDQUdBLFlBQ0EsU0FBQSxFQUFBLFNBRUEsS0FBQSxxQkFDQSxLQUFBLFdBQ0EsT0FDQSxjQUNBLFlBQ0EsaUJBQUEsRUFDQSxNQUFBLEtBQ0EsY0FBQSxFQUNBLFdBQUEsS0FHQSxVQUNBLE9BQUEsV0FDQSxRQUNBLEtBQUEsa0JBQ0EsTUFBQSxHQUNBLE1BQUEsS0FBQSxJQUFBLG1CQUNBLEtBQUEsYUFFQSxLQUFBLGNBQ0EsTUFBQSxHQUNBLE1BQUEsS0FBQSxJQUFBLGVBQ0EsS0FBQSxzQkFFQSxLQUFBLHFCQUNBLE1BQUEsR0FDQSxNQUFBLEtBQUEsSUFBQSxvQkFDQSxLQUFBLGVBSUEsU0FDQSxLQUFBLFdBQUEsR0FBQSxHQUFBLElBQUEsUUFBQSxFQUFBLEVBQUEsU0FBQSxFQUFBLFFBQUEsS0FBQSxRQUFBLEtBQUEsR0FBQSxFQUFBLE9BQUEsR0FBQSxRQUFBLEtBQUEsU0FBQSxHQUFBLE9BQUEsT0FBQSxFQUFBLEtBQUEsRUFBQSxNQUFBLElBQUEsR0FBQSxNQUNBLEdBQUEsRUFFQSxFQUFBLGNBQUEsRUFIQSxFQUFBLE9BQUEsU0FBQSxFQUFBLEtBQUEsZ0JBTUEsZ0JBQUEsRUFBQSxTQUFBLGdCQUNBLFlBQUEsRUFBQSxTQUFBLFlBQ0EsbUJBQUEsRUFBQSxTQUFBLHFCQUhBLEtBQUEsU0FBQSxHQU1BLEVBQUEsY0FBQSxFQUdBLE1BQUEsRUFBQSxPQUNBLEVBQUEsV0FBQSxFQUFBLE9BQUEsUUFHQSxNQUFBLEVBQUEsT0FDQSxFQUFBLGlCQUFBLEtBbkJBLEtBQUEsR0FBQSxJQUFBLE1BQUEsTUFBQSxHQUFBLFNBQUEsRUFBQSw2VUF2REEsaUJBQUEsT0FBQSxXQUFBLEdBQUEsR0FBQSxLQUFBLEVBQUEsRUFBQSxlQUFBLEVBQUEsRUFBQSxNQUFBLElBQUEsQ0FBQSxPQUFBLEdBQUEsT0FBQSxFQUFBLGdCQUFBLEVBQUEsT0FBQSxFQUFBLE1BQUEsVUFBQSxVQUFBLEVBQUEsR0FBQSxFQUFBLElBQUEsbURBQUEsRUFBQSxPQUFBLEVBQUEsVUFBQSxPQUFBLE9BQUEsRUFBQSxPQUFBLFlBQUEsRUFBQSxTQUFBLGNBQUEsRUFBQSxjQUFBLEVBQUEsT0FBQSxPQUFBLEtBQUEsV0FBQSxLQUFBLFlBQUEsRUFBQSxVQUFBLFlBQUEsaUJBQUEsT0FBQSxTQUFBLEVBQUEsYUFBQSxLQUFBLFVBQUEsSUFBQSxNQUFBLEVBQUEsUUFBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsSUFBQSwyQkFBQSxNQUFBLGlCQUFBOzs7dWJDOEJBLGdCQUFBLEVBQUEsU0FBQSxLQUFBLFdBR0EsT0FDQSxXQUFBLEdBQ0EsZUFBQSxPQUFBLFdBQUEsV0FDQSxTQUFBLE9BQUEsV0FBQSxXQUNBLFVBQUEsT0FBQSxXQUFBLFdBQ0EsWUFBQSxPQUFBLFdBQUEsV0FDQSxTQUFBLE9BR0EsVUFDQSxRQUFBLFdBRUEsT0FDQSxZQUFBLEVBQ0EsVUFDQSxLQUFBLEtBQUEsSUFBQSxRQUNBLFNBQUEsS0FBQSxJQUFBLFlBQ0EsUUFBQSxLQUFBLElBQUEsWUFGQSxPQUtBLE1BQUEsS0FBQSxJQUFBLG1CQUNBLE1BQUEsS0FBQSxJQUFBLFdBQ0EsVUFBQSxLQUFBLElBQUEsd0JBSUEsWUFBQSxXQUVBLEdBQUEsWUFDQSxNQUFBLE9BQUEsUUFBQSxlQUFBLFFBQUEsU0FBQSxHQUNBLEVBQUEsTUFDQSxLQUFBLEVBQUEsS0FDQSxHQUFBLEVBQUEsR0FDQSxTQUFBLEVBQUEsTUFBQSxFQUFBLE1BQUEsSUFBQSxTQUFBLEdBQ0EsTUFBQSxHQUFBLFNBQUEsS0FBQSxFQUFBLGVBQUEsUUFBQSxNQUFBLEVBQUEsUUFBQSxFQUFBLFFBQUEsS0FBQSxVQU1BLGFBQUEsV0FFQSxHQUFBLEdBQUEsS0FDQSxFQUFBLEtBQUEsT0FBQSxNQUFBLFVBQUEsV0FDQSxFQUFBLEtBQUEsa0JBR0EsR0FBQSxHQUFBLEdBQUEsUUFBQSxFQUFBLGlDQUdBLElBQUEsR0FBQSxHQUFBLEVBQUEsRUFBQSxFQUFBLGNBQUEsT0FBQSxFQUFBLEVBQUEsSUFBQSxDQUNBLEdBQUEsR0FBQSxFQUFBLGNBQUEsbUJBR0EsT0FBQSxFQUdBLE9BQUEsSUFHQSxNQUFBLElBRUEsY0FBQSxXQUNBLE1BQUEsTUFBQSxXQXJEQSxTQXlEQSxXQUFBLFdBQ0EsS0FBQSxNQUFBLGdCQUFBLFNBREEsUUFBQSxXQUtBLEtBQUEsT0FBQSxTQUFBLHdEQUdBLFNBQUEsR0FDQSxNQUFBLEtBQUEsSUFBQSx1Q0FDQSxZQUFBLEtBQUEsSUFBQSw2Q0FDQSxlQUFBLHdVQS9HQSxpQkFBQSxPQUFBLFdBQUEsR0FBQSxHQUFBLEtBQUEsRUFBQSxFQUFBLGVBQUEsRUFBQSxFQUFBLE1BQUEsSUFBQSxDQUFBLE9BQUEsR0FBQSx1QkFBQSxFQUFBLE9BQUEsYUFBQSxNQUFBLFFBQUEsZ0JBQUEsVUFBQSxFQUFBLFFBQUEsRUFBQSxHQUFBLEVBQUEsR0FBQSxLQUFBLElBQUEsZUFBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLE9BQUEsWUFBQSxvREFBQSxhQUFBLE1BQUEsT0FBQSxTQUFBLGNBQUEsRUFBQSxRQUFBLFlBQUEsb0RBQUEsRUFBQSxHQUFBLEVBQUEsR0FBQSxFQUFBLGtCQUFBLEVBQUEsR0FBQSxLQUFBLEVBQUEsVUFBQSxhQUFBLEtBQUEsUUFBQSxRQUFBLFVBQUEsTUFBQSxFQUFBLFNBQUEsV0FBQSxhQUFBLFlBQUEsMkZBQUEsSUFBQSxRQUFBLFNBQUEsR0FBQSxHQUFBLEdBQUEsTUFBQSxVQUFBLE9BQUEsS0FBQSxFQUFBLE9BQUEsUUFBQSxTQUFBLEdBQUEsTUFBQSxHQUFBLFdBQUEsSUFBQSxTQUFBLEdBQUEsTUFBQSxVQUFBLEdBQUEsRUFBQSxPQUFBLEVBQUEsT0FBQSxHQUFBLFNBQUEsRUFBQSxPQUFBLFNBQUEsRUFBQSxFQUFBLElBQUEsU0FBQSxHQUFBLE1BQUEsR0FBQSxNQUFBLE1BQUEsU0FBQSxFQUFBLE9BQUEsWUFBQSxFQUFBLFVBQUEsT0FBQSxLQUFBLEdBQUEsTUFBQSxRQUFBLEVBQUEsR0FBQSxRQUFBLEVBQUEsR0FBQSxLQUFBLEVBQUEsVUFBQSxPQUFBLEtBQUEsR0FBQSxNQUFBLFFBQUEsRUFBQSxHQUFBLGNBQUEsRUFBQSxHQUFBLEtBQUEsRUFBQSxrQkFBQSxJQUFBLFFBQUEsT0FBQSxRQUFBLEVBQUEsUUFBQSxLQUFBLEVBQUEsYUFBQSxRQUFBLEVBQUEsU0FBQSxZQUFBLEVBQUEsS0FBQSxJQUFBLE9BQUEsR0FBQSxTQUFBLEdBQUEsTUFBQSxHQUFBLGVBQUEsT0FBQSxJQUFBLEtBQUEsVUFBQSxRQUFBLEdBQUEsRUFBQSxJQUFBLFFBQUEsRUFBQSxHQUFBLEVBQUEsR0FBQSxFQUFBLElBQUEsWUFBQSxJQUFBLFdBQUEsR0FBQSxTQUFBLEdBQUEsTUFBQSxHQUFBLFNBQUEsRUFBQSxHQUFBLEVBQUEsSUFBQSxTQUFBLFNBQUEsRUFBQSxHQUFBLE1BQUEsR0FBQSxPQUFBLElBQUEsSUFBQSxFQUFBLEdBQUEsYUFBQSxFQUFBLEdBQUEsR0FBQSxnQkFBQSxTQUFBLEVBQUEsR0FBQSxLQUFBLEVBQUEsVUFBQSxZQUFBLGlCQUFBLElBQUEsTUFBQSxFQUFBLGNBQUEsRUFBQSxHQUFBLEVBQUEsR0FBQSxFQUFBLElBQUEsa0JBQUEsRUFBQSxHQUFBLEtBQUEsRUFBQSxpQkFBQSxJQUFBLGtCQUFBLE9BQUEsYUFBQSxVQUFBLElBQUEsaUJBQUE7OztrSUM0Q0EsSUFBQSxHQUFBLFFBQUEsOEJBQ0EsRUFBQSxRQUFBLDRDQUdBLFlBQ0EsZ0JBQUEsRUFBQSxRQUNBLGFBQUEsRUFBQSxTQUVBLEtBQUEsV0FDQSxPQUNBLFdBQUEsR0FDQSxlQUFBLFlBQUEsV0FBQSxXQUFBLFFBQUEsUUFDQSxRQUFBLE1BQ0EsU0FBQSxPQUFBLFdBQUEsUUFBQSxPQUFBLFdBQ0EsVUFBQSxPQUFBLFdBQUEsUUFBQSxRQUNBLFlBQUEsT0FBQSxXQUFBLFFBQUEsUUFDQSxnQkFDQSxjQUFBLEVBQ0EsVUFBQSxLQUNBLFNBQUEsT0FHQSxVQUNBLFFBQUEsV0FDQSxPQUNBLFlBQUEsRUFDQSxVQUNBLEtBQUEsS0FBQSxJQUFBLFFBQ0EsU0FBQSxLQUFBLElBQUEsU0FDQSxNQUFBLEtBQUEsSUFBQSxTQUNBLEtBQUEsS0FBQSxJQUFBLFNBRUEsT0FDQSxNQUFBLEtBQUEsSUFBQSxtQkFDQSxNQUFBLEtBQUEsSUFBQSxXQUNBLFVBQUEsS0FBQSxJQUFBLHdCQUlBLFFBQUEsV0FDQSxJQUFBLEdBQUEsR0FBQSxFQUFBLEVBQUEsS0FBQSxPQUFBLE1BQUEsVUFBQSxPQUFBLEVBQUEsRUFBQSxJQUNBLEdBQUEsS0FBQSxPQUFBLE1BQUEsVUFBQSxHQUFBLEtBQUEsS0FBQSxVQUNBLE1BQUEsTUFBQSxPQUFBLE1BQUEsVUFBQSxFQUdBLFFBQ0EsYUFHQSxlQUFBLFdBRUEsTUFBQSxNQUFBLFlBQUEsU0FBQSxPQUFBLE9BQUEsb0JBQUEsS0FBQSxPQUFBLE1BQUEsS0FBQSxPQUVBLFdBQUEsV0FHQSxNQUFBLFlBQUEsS0FBQSxRQUFBLE1BR0EsS0FBQSxZQUFBLFNBQUEsT0FBQSxPQUFBLHlCQUFBLEtBQUEsT0FBQSxNQUFBLEtBQUEsT0FHQSxpQkFBQSxXQUdBLE1BQUEsTUFBQSxZQUFBLEtBQUEsT0FBQSxNQUFBLEtBQUEsUUFBQSxPQUtBLEtBQUEsWUFBQSxTQUFBLE9BQUEsT0FBQSxzQkFBQSxLQUFBLE9BQUEsTUFBQSxLQUFBLE9BQUEsS0FBQSxhQUFBLFNBTUEsYUFBQSxXQUNBLE9BQUEsS0FBQSxRQUFBLE1BQ0EsSUFBQSxXQUNBLE1BQUEsTUFBQSxZQUFBLFNBQUEsT0FBQSxPQUFBLG1DQUFBLEtBQUEsT0FBQSxNQUFBLEtBQUEsS0FFQSxLQUFBLFdBQ0EsTUFBQSxNQUFBLFlBQUEsU0FBQSxPQUFBLE9BQUEsbUNBQUEsS0FBQSxPQUFBLE1BQUEsS0FBQSxNQUlBLE9BQUEsR0FFQSxhQUFBLFdBQUEsR0FBQSxHQUFBLElBQ0EsT0FBQSxNQUFBLE9BQUEsTUFBQSxNQUFBLE9BQUEsU0FBQSxHQUNBLE1BQUEsR0FBQSxVQUFBLEVBQUEsUUFBQSxNQUdBLGFBQUEsV0FDQSxPQUNBLFVBQUEsS0FBQSxRQUFBLEdBQ0EsWUFBQSxLQUFBLFFBQUEsU0FBQSxLQUFBLFFBQUEsUUFBQSxhQUFBLEdBQ0EsT0FBQSxLQUFBLFFBQUEsUUFBQSxRQUFBLEtBR0EsYUFBQSxXQUFBLEdBQUEsR0FBQSxLQUNBLEVBQUEsS0FDQSxFQUFBLEtBQUEsT0FBQSxNQUFBLFVBQUEsV0FDQSxFQUFBLEtBQUEsWUFZQSxJQVRBLEVBQUEsSUFBQSxTQUFBLEdBRUEsR0FBQSxHQUFBLEVBQUEsS0FBQSxRQUFBLG1CQUFBLElBQUEsUUFBQSxvQkFBQSxTQUFBLEdBQ0EsTUFBQSxHQUFBLEdBQUEsZ0JBQUEsUUFBQSxVQUFBLEdBR0EsT0FEQSxHQUFBLGVBQUEsSUFBQSxFQUFBLEVBQUEsSUFBQSxjQUFBLEdBQUEsR0FDQSxJQUdBLEVBQUEsQ0FDQSxHQUFBLEdBQUEsR0FBQSxRQUFBLEVBQUEsSUFFQSxPQUFBLEdBQUEsT0FBQSxTQUFBLEdBQ0EsSUFBQSxHQUFBLEdBQUEsRUFBQSxFQUFBLEVBQUEsY0FBQSxPQUFBLEVBQUEsRUFBQSxJQUFBLENBQ0EsR0FBQSxHQUFBLEVBQUEsY0FBQSxFQUVBLElBQUEsRUFBQSxLQUFBLEVBQUEsSUFDQSxPQUFBLEVBR0EsT0FBQSxJQUdBLE1BQUEsSUFFQSxjQUFBLFdBQ0EsTUFBQSxNQUFBLFdBR0EsU0FDQSxjQUFBLFNBQUEsR0FFQSxNQUFBLEdBQUEsS0FBQSxLQUFBLE9BQUEsTUFBQSxLQUFBLEtBQUEsSUFFQSxjQUFBLFdBQUEsR0FBQSxHQUFBLEtBQ0EsRUFBQSxLQUFBLElBQUEsc0JBQUEsUUFBQSxhQUFBLEtBQUEsUUFBQSxLQUVBLElBQUEsUUFBQSxHQUNBLE1BQUEsTUFBQSxLQUFBLGNBQUEsS0FBQSxRQUFBLElBQUEsS0FBQSxTQUFBLEdBQ0EsTUFBQSxFQUFBLE9BQ0EsRUFBQSxPQUFBLE9BQUEsZ0JBQUEsRUFBQSxRQUFBLElBQ0EsRUFBQSxRQUFBLFNBQUEsS0FBQSxhQUtBLFlBQUEsV0FDQSxLQUFBLE1BQUEsYUFBQSxRQUVBLFNBQUEsU0FBQSxHQUNBLEtBQUEsYUFBQSxFQUNBLEtBQUEsTUFBQSxjQUFBLFFBRUEsUUFBQSxXQUNBLEtBQUEsTUFBQSxhQUFBLFFBRUEsV0FBQSxTQUFBLEdBQUEsR0FBQSxHQUFBLEtBQ0EsRUFBQSxLQUFBLElBQUEsc0JBQUEsUUFBQSxhQUFBLEVBQUEsU0FBQSxLQUFBLEVBQUEsVUFFQSxJQUFBLFFBQUEsR0FDQSxNQUFBLE1BQUEsS0FBQSxXQUFBLEVBQUEsSUFBQSxLQUFBLFNBQUEsR0FDQSxNQUFBLEVBQUEsTUFDQSxFQUFBLE9BQUEsT0FBQSxhQUFBLEVBQUEsT0FLQSxhQUFBLFNBQUEsR0FDQSxNQUFBLFVBQUEsR0FFQSxXQUFBLFNBQUEsR0FDQSxNQUFBLE9BQUEsSUFHQSxRQUFBLFdBR0EsS0FBQSxVQUFBLEtBQUEsT0FBQSxPQUFBLElBQUEsS0FBQSxPQUFBLE1BQUEsS0FBQSxRQUFBLEdBQ0EsS0FBQSxPQUFBLE9BQUEsS0FDQSxLQUFBLGNBQUEsR0FHQSxLQUFBLE9BQUEsU0FBQSxhQUFBLEtBQUEsV0FDQSxLQUFBLE9BQUEsU0FBQSxrQkFBQSxLQUFBLFdBRUEsS0FBQSxPQUFBLE9BQUEsZ0JBQ0EsTUFBQSxHQUNBLFlBQUEsR0FDQSxlQUFBLHdVQTlPQSxpQkFBQSxPQUFBLFdBQUEsR0FBQSxHQUFBLEtBQUEsRUFBQSxFQUFBLGVBQUEsRUFBQSxFQUFBLE1BQUEsSUFBQSxDQUFBLE9BQUEsR0FBQSxzQkFBQSxFQUFBLE9BQUEsT0FBQSxLQUFBLGlCQUFBLEtBQUEsa0JBQUEsRUFBQSxHQUFBLEVBQUEsR0FBQSxFQUFBLFFBQUEsU0FBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLE9BQUEsT0FBQSxLQUFBLFdBQUEsS0FBQSxZQUFBLEVBQUEsS0FBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsUUFBQSxVQUFBLEVBQUEsTUFBQSxFQUFBLEdBQUEsU0FBQSxFQUFBLEdBQUEsRUFBQSxRQUFBLFlBQUEsSUFBQSxFQUFBLEdBQUEsRUFBQSxRQUFBLGFBQUEsRUFBQSxNQUFBLEVBQUEsR0FBQSxTQUFBLEVBQUEsR0FBQSxFQUFBLFFBQUEsUUFBQSxTQUFBLEVBQUEsR0FBQSxLQUFBLEVBQUEsS0FBQSxFQUFBLEdBQUEsV0FBQSxFQUFBLEdBQUEsRUFBQSxJQUFBLGVBQUEsS0FBQSxFQUFBLEdBQUEsRUFBQSxRQUFBLGFBQUEsRUFBQSxNQUFBLEVBQUEsR0FBQSxXQUFBLEVBQUEsR0FBQSxFQUFBLElBQUEsbUJBQUEsS0FBQSxFQUFBLEdBQUEsRUFBQSxRQUFBLGdCQUFBLFlBQUEsRUFBQSxHQUFBLEtBQUEsRUFBQSxlQUFBLEVBQUEsVUFBQSxZQUFBLGlCQUFBLElBQUEsTUFBQSxFQUFBLGVBQUEsRUFBQSxHQUFBLEVBQUEsR0FBQSxFQUFBLElBQUEsbUJBQUEsRUFBQSxLQUFBLEVBQUEsR0FBQSxLQUFBLEVBQUEsaUJBQUEsRUFBQSxVQUFBLFlBQUEsaUJBQUEsSUFBQSxNQUFBLEVBQUEsaUJBQUEsRUFBQSxHQUFBLEVBQUEsR0FBQSxFQUFBLElBQUEscUJBQUEsRUFBQSxPQUFBLEVBQUEsR0FBQSxLQUFBLEVBQUEsT0FBQSxhQUFBLE1BQUEsUUFBQSxnQkFBQSxVQUFBLEVBQUEsUUFBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEtBQUEsSUFBQSxlQUFBLEVBQUEsR0FBQSxLQUFBLEVBQUEsT0FBQSxZQUFBLG9EQUFBLGFBQUEsTUFBQSxPQUFBLFNBQUEsY0FBQSxFQUFBLFFBQUEsWUFBQSxvREFBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsa0JBQUEsRUFBQSxHQUFBLEtBQUEsRUFBQSxVQUFBLGFBQUEsS0FBQSxRQUFBLFFBQUEsVUFBQSxNQUFBLEVBQUEsU0FBQSxXQUFBLGFBQUEsWUFBQSwyRkFBQSxJQUFBLFFBQUEsU0FBQSxHQUFBLEdBQUEsR0FBQSxNQUFBLFVBQUEsT0FBQSxLQUFBLEVBQUEsT0FBQSxRQUFBLFNBQUEsR0FBQSxNQUFBLEdBQUEsV0FBQSxJQUFBLFNBQUEsR0FBQSxNQUFBLFVBQUEsR0FBQSxFQUFBLE9BQUEsRUFBQSxPQUFBLEdBQUEsU0FBQSxFQUFBLE9BQUEsU0FBQSxFQUFBLEVBQUEsSUFBQSxTQUFBLEdBQUEsTUFBQSxHQUFBLE1BQUEsTUFBQSxTQUFBLEVBQUEsT0FBQSxZQUFBLEVBQUEsVUFBQSxPQUFBLEtBQUEsR0FBQSxNQUFBLFFBQUEsRUFBQSxHQUFBLFFBQUEsRUFBQSxHQUFBLEtBQUEsRUFBQSxVQUFBLE9BQUEsS0FBQSxHQUFBLE1BQUEsUUFBQSxFQUFBLEdBQUEsY0FBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLGtCQUFBLElBQUEsUUFBQSxPQUFBLFFBQUEsRUFBQSxRQUFBLEtBQUEsRUFBQSxhQUFBLFFBQUEsRUFBQSxTQUFBLFlBQUEsRUFBQSxLQUFBLElBQUEsT0FBQSxHQUFBLFNBQUEsR0FBQSxNQUFBLEdBQUEsVUFBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsSUFBQSxVQUFBLEtBQUEsRUFBQSxHQUFBLEVBQUEsSUFBQSxpQkFBQSxJQUFBLFdBQUEsR0FBQSxTQUFBLEdBQUEsTUFBQSxHQUFBLEtBQUEsT0FBQSxLQUFBLEVBQUEsYUFBQSxFQUFBLElBQUEsYUFBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsSUFBQSxnQkFBQSxJQUFBLFFBQUEsR0FBQSxTQUFBLEdBQUEsTUFBQSxHQUFBLEtBQUEsT0FBQSxLQUFBLEVBQUEsV0FBQSxFQUFBLElBQUEsVUFBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsSUFBQSxhQUFBLElBQUEsT0FBQSxHQUFBLFNBQUEsR0FBQSxNQUFBLEdBQUEsV0FBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsSUFBQSxzQkFBQSxJQUFBLFVBQUEsR0FBQSxTQUFBLEdBQUEsTUFBQSxHQUFBLGFBQUEsRUFBQSxVQUFBLEVBQUEsVUFBQSxZQUFBLE1BQUEsSUFBQSxNQUFBLFNBQUEsR0FBQSxNQUFBLEdBQUEsU0FBQSxFQUFBLFNBQUEsRUFBQSxHQUFBLEVBQUEsR0FBQSxFQUFBLElBQUEsZ0JBQUEsRUFBQSxHQUFBLEtBQUEsRUFBQSxjQUFBLEVBQUEsS0FBQSxFQUFBLFVBQUEsWUFBQSxNQUFBLElBQUEsTUFBQSxTQUFBLEdBQUEsTUFBQSxHQUFBLFdBQUEsRUFBQSxTQUFBLEVBQUEsR0FBQSxFQUFBLEdBQUEsRUFBQSxJQUFBLGtCQUFBLEVBQUEsT0FBQSxFQUFBLFFBQUEsTUFBQSxLQUFBLEVBQUEsR0FBQSxLQUFBLEVBQUEsV0FBQSxFQUFBLFVBQUEsWUFBQSxpQkFBQSxJQUFBLE1BQUEsRUFBQSxXQUFBLEVBQUEsR0FBQSxFQUFBLEdBQUEsRUFBQSxJQUFBLGVBQUEsRUFBQSxLQUFBLEVBQUEsR0FBQSxLQUFBLEVBQUEsaUJBQUEsSUFBQSxlQUFBLE9BQUEsYUFBQSxPQUFBLGFBQUEsRUFBQSxXQUFBLEVBQUEsR0FBQSxLQUFBLEVBQUEsY0FBQSxJQUFBLGVBQUEsT0FBQSxhQUFBLE1BQUEsYUFBQSxFQUFBLGdCQUFBLEVBQUEsR0FBQSxLQUFBLEVBQUEsY0FBQSxJQUFBLGdCQUFBLE9BQUEsYUFBQSxPQUFBLGFBQUEsRUFBQSxpQkFBQSxJQUFBLGlCQUFBOzs7a0lDeUNBLElBQUEsR0FBQSxRQUFBLHNDQUNBLEVBQUEsUUFBQSw4Q0FHQSxLQUFBLGdCQUNBLFlBQ0Esd0JBQUEsRUFBQSxRQUNBLGVBQUEsRUFBQSxTQUVBLEtBQUEsV0FDQSxPQUNBLFlBQUEsT0FHQSxVQUNBLFNBQUEsV0FDQSxNQUFBLE1BQUEsV0FBQSxLQUFBLFVBQUEsV0FFQSxnQkFBQSxXQUNBLE1BQUEsTUFBQSxXQUFBLEtBQUEsVUFBQSxrQkFFQSxpQkFBQSxXQUNBLE1BQUEsTUFBQSxXQUFBLEtBQUEsVUFBQSxlQUVBLGdCQUFBLFdBQ0EsTUFBQSxNQUFBLFdBQUEsS0FBQSxVQUFBLGNBRUEsVUFBQSxXQUFBLEdBQUEsR0FBQSxJQUNBLE9BQUEsTUFBQSxPQUFBLE1BQUEsV0FBQSxPQUFBLFNBQUEsR0FBQSxNQUFBLEdBQUEsT0FBQSxFQUFBLGNBQUEsSUFFQSxnQkFBQSxXQUNBLE9BQ0EsU0FBQSxRQUNBLFdBQUEsRUFDQSxTQUNBLFNBQ0EsTUFBQSxLQUFBLElBQUEsNkJBQ0EsWUFBQSxLQUFBLElBQUEsNkJBQ0EsS0FBQSxPQUNBLEtBQUEsU0FFQSxNQUFBLEtBQUEsSUFBQSwyQkFDQSxZQUFBLEtBQUEsSUFBQSwyQkFDQSxLQUFBLE9BQ0EsS0FBQSxPQUVBLE1BQUEsS0FBQSxJQUFBLCtCQUNBLFlBQUEsS0FBQSxJQUFBLCtCQUNBLEtBQUEsU0FDQSxLQUFBLFdBRUEsTUFBQSxLQUFBLElBQUEsOEJBQ0EsWUFBQSxLQUFBLElBQUEsOEJBQ0EsS0FBQSxXQUNBLEtBQUEsWUFJQSxhQUFBLFdBQ0EsT0FDQSxTQUFBLFFBQ0EsV0FBQSxFQUNBLFNBQ0EsU0FDQSxNQUFBLEtBQUEsSUFBQSwwQkFDQSxZQUFBLEtBQUEsSUFBQSwwQkFDQSxLQUFBLE9BQ0EsS0FBQSxTQUVBLE1BQUEsS0FBQSxJQUFBLDJCQUNBLFlBQUEsS0FBQSxJQUFBLDJCQUNBLEtBQUEsU0FDQSxLQUFBLFVBRUEsTUFBQSxLQUFBLElBQUEsMkJBQ0EsWUFBQSxLQUFBLElBQUEsMkJBQ0EsS0FBQSxXQUNBLEtBQUEsWUFJQSxZQUFBLFdBQ0EsR0FBQSxHQUFBLENBZUEsT0FUQSxNQUFBLFVBQUEsWUFBQSxRQUFBLFNBQUEsR0FDQSxHQUFBLEVBQUEsT0FBQSxFQUFBLFFBSUEsS0FBQSxVQUFBLFNBQUEsUUFBQSxTQUFBLEdBQ0EsR0FBQSxFQUFBLE1BQUEsRUFBQSxRQUdBLElBR0EsU0FDQSxXQUFBLFNBQUEsR0FDQSxHQUFBLEdBQUEsRUFlQSxPQVpBLEdBQUEsUUFBQSxNQUFBLElBR0EsTUFBQSxRQUVBLFFBQUEsU0FBQSxHQUNBLEdBQUEsTUFFQSxHQUFBLEVBQUEsUUFBQSxNQUFBLFFBQ0EsR0FBQSxTQUdBLEdBRUEsTUFBQSxTQUFBLEdBQ0EsRUFBQSxpQkFDQSxPQUFBLFVBR0EsUUFBQSxXQUVBLEtBQUEsWUFBQSxLQUFBLE9BQUEsT0FBQSxHQUVBLEtBQUEsT0FBQSxTQUFBLGVBQUEsS0FBQSxpVkF4S0EsaUJBQUEsT0FBQSxXQUFBLEdBQUEsR0FBQSxLQUFBLEVBQUEsRUFBQSxlQUFBLEVBQUEsRUFBQSxNQUFBLElBQUEsQ0FBQSxPQUFBLEdBQUEsVUFBQSxFQUFBLHVCQUFBLEVBQUEsTUFBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsSUFBQSxXQUFBLEtBQUEsRUFBQSxHQUFBLEVBQUEsVUFBQSxPQUFBLFNBQUEsRUFBQSxHQUFBLEtBQUEsRUFBQSxLQUFBLEVBQUEsVUFBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsSUFBQSxtQkFBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLEdBQUEsRUFBQSxVQUFBLFNBQUEsRUFBQSxHQUFBLEtBQUEsRUFBQSxLQUFBLEVBQUEsVUFBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsSUFBQSxvQkFBQSxFQUFBLEdBQUEsTUFBQSxFQUFBLGVBQUEsT0FBQSxJQUFBLEtBQUEsbUJBQUEsUUFBQSxhQUFBLEVBQUEsVUFBQSxrQkFBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsVUFBQSxpQkFBQSxFQUFBLE1BQUEsRUFBQSxHQUFBLEtBQUEsRUFBQSxVQUFBLEVBQUEsR0FBQSxFQUFBLEdBQUEsRUFBQSxJQUFBLDZCQUFBLEVBQUEsR0FBQSxLQUFBLEVBQUEsR0FBQSxFQUFBLFVBQUEsY0FBQSxTQUFBLEdBQUEsRUFBQSxHQUFBLEtBQUEsRUFBQSxVQUFBLGFBQUEsRUFBQSxPQUFBLFlBQUEsd0JBQUEsRUFBQSxNQUFBLEVBQUEsR0FBQSxFQUFBLEdBQUEsRUFBQSxJQUFBLG9CQUFBLEVBQUEsR0FBQSxLQUFBLEVBQUEsS0FBQSxVQUFBLFVBQUEsRUFBQSxHQUFBLEVBQUEsdUJBQUEsRUFBQSxLQUFBLEVBQUEsR0FBQSxLQUFBLEVBQUEsVUFBQSxLQUFBLEVBQUEseUJBQUEsT0FBQSxZQUFBLEVBQUEsVUFBQSxLQUFBLGVBQUEsRUFBQSxVQUFBLFdBQUEsRUFBQSxLQUFBLEVBQUEsR0FBQSxFQUFBLEdBQUEsRUFBQSxJQUFBLCtCQUFBLEVBQUEsR0FBQSxLQUFBLEVBQUEsTUFBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsSUFBQSxzQ0FBQSxPQUFBLEVBQUEsR0FBQSxLQUFBLEVBQUEsT0FBQSxVQUFBLFVBQUEsRUFBQSxHQUFBLEVBQUEsb0JBQUEsRUFBQSxHQUFBLEtBQUEsRUFBQSxNQUFBLEVBQUEsR0FBQSxFQUFBLEdBQUEsRUFBQSxJQUFBLHNDQUFBLE9BQUEsRUFBQSxHQUFBLEtBQUEsRUFBQSxVQUFBLGdCQUFBLEVBQUEsT0FBQSxVQUFBLFVBQUEsRUFBQSxHQUFBLEVBQUEsb0JBQUEsRUFBQSxnQkFBQSxPQUFBLGFBQUEsRUFBQSxhQUFBLEVBQUEsZ0JBQUEsVUFBQSxjQUFBLFNBQUEsWUFBQSxFQUFBLGdCQUFBLFNBQUEsT0FBQSxFQUFBLGdCQUFBLE9BQUEsS0FBQSxFQUFBLFVBQUEsWUFBQSxnQkFBQSxLQUFBLEVBQUEsR0FBQSxLQUFBLEVBQUEsTUFBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsSUFBQSwrQkFBQSxPQUFBLEVBQUEsR0FBQSxLQUFBLEVBQUEsVUFBQSxTQUFBLEVBQUEsT0FBQSxVQUFBLFVBQUEsRUFBQSxHQUFBLEVBQUEsYUFBQSxFQUFBLGdCQUFBLE9BQUEsYUFBQSxFQUFBLGFBQUEsRUFBQSxhQUFBLFVBQUEsWUFBQSxFQUFBLGFBQUEsU0FBQSxPQUFBLEVBQUEsYUFBQSxPQUFBLEtBQUEsRUFBQSxVQUFBLFNBQUEsZ0JBQUEsS0FBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLFlBQUEsRUFBQSxPQUFBLEVBQUEsR0FBQSxFQUFBLEdBQUEsRUFBQSxJQUFBLGVBQUEsTUFBQSxFQUFBLG9CQUFBLE9BQUEsZ0JBQUEsRUFBQSxNQUFBLEVBQUEsWUFBQSxlQUFBLFFBQUEsR0FBQSxFQUFBLEtBQUEsRUFBQSxHQUFBLEtBQUEsRUFBQSxNQUFBLEVBQUEsR0FBQSxFQUFBLEdBQUEsRUFBQSxJQUFBLFVBQUEsT0FBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLFVBQUEsTUFBQSxPQUFBLEVBQUEsTUFBQSxFQUFBLEdBQUEsRUFBQSxVQUFBLE1BQUEsU0FBQSxHQUFBLE1BQUEsR0FBQSxPQUFBLElBQUEsRUFBQSxNQUFBLEVBQUEsS0FBQSxPQUFBLEtBQUEsRUFBQSxJQUFBLE9BQUEsWUFBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsYUFBQSxHQUFBLEVBQUEsS0FBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsSUFBQSxlQUFBLEVBQUEsR0FBQSxLQUFBLEVBQUEsS0FBQSxZQUFBLGlCQUFBLEVBQUEsTUFBQSxFQUFBLEtBQUEsT0FBQSxLQUFBLEtBQUEsSUFBQSxNQUFBLEVBQUEsU0FBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsSUFBQSx3QkFBQSxHQUFBLEVBQUEsTUFBQSxpQkFBQTs7O2tJQ1lBLElBQUEsR0FBQSxRQUFBLHVCQUNBLEVBQUEsUUFBQSxpREFHQSxLQUFBLGlCQUNBLFlBQ0Esa0JBQUEsRUFBQSxRQUNBLFNBQUEsRUFBQSxTQUVBLEtBQUEsV0FDQSxPQUNBLFlBQ0EsY0FDQSxXQUFBLEdBQ0EsZUFBQSxPQUFBLGVBQUEsWUFBQSxTQUFBLFFBQ0EsU0FBQSxPQUFBLGVBQUEsWUFBQSxTQUFBLFFBQ0EsVUFBQSxPQUFBLGVBQUEsWUFBQSxTQUFBLFFBQ0EsWUFBQSxPQUFBLGVBQUEsWUFBQSxTQUFBLFVBR0EsVUFDQSxXQUFBLFdBQ0EsUUFDQSxLQUFBLFFBQ0EsVUFBQSxFQUNBLFNBQ0EsS0FBQSxVQUdBLFFBQUEsV0FDQSxPQUNBLFlBQUEsRUFDQSxVQUNBLEtBQUEsS0FBQSxJQUFBLGVBQ0EsYUFBQSxLQUFBLElBQUEsZ0JBQ0EsVUFBQSxLQUFBLElBQUEsc0JBQ0EsT0FBQSxLQUFBLElBQUEsVUFDQSxLQUFBLEtBQUEsSUFBQSxtQkFLQSxXQUFBLFdBQ0EsTUFBQSxNQUFBLE9BQUEsTUFBQSxXQUFBLElBQUEsU0FBQSxHQUNBLE9BQ0EsS0FBQSxFQUFBLEtBQ0EsYUFBQSxFQUFBLGFBQ0EsU0FBQSxFQUFBLFNBQ0EsT0FBQSxFQUFBLFFBQUEsRUFBQSxPQUFBLEtBQ0EsVUFBQSxFQUFBLFdBQUEsRUFBQSxVQUFBLFVBQ0EsS0FBQSxFQUFBLFNBS0EsYUFBQSxXQUNBLEdBQUEsR0FBQSxLQUNBLEVBQUEsS0FBQSxPQUFBLE1BQUEsVUFBQSxXQUNBLEVBQUEsS0FBQSxVQUVBLElBQUEsRUFBQSxDQUNBLEdBQUEsR0FBQSxHQUFBLFFBQUEsRUFBQSxJQUVBLE9BQUEsR0FBQSxPQUFBLFNBQUEsR0FDQSxJQUFBLEdBQUEsR0FBQSxFQUFBLEVBQUEsRUFBQSxjQUFBLE9BQUEsRUFBQSxFQUFBLElBQUEsQ0FDQSxHQUFBLEdBQUEsRUFBQSxjQUFBLEVBRUEsSUFBQSxFQUFBLEtBQUEsRUFBQSxJQUNBLE9BQUEsRUFHQSxPQUFBLElBR0EsTUFBQSxLQUdBLFNBQ0EsYUFBQSxXQUNBLEtBQUEsTUFBQSxrQkFBQSxTQUdBLFFBQUEsV0FDQSxLQUFBLE9BQUEsU0FBQSxpQkFFQSxLQUFBLE9BQUEsT0FBQSxnQkFDQSxTQUFBLEdBQ0EsTUFBQSxLQUFBLElBQUEsd0NBQ0EsWUFBQSxHQUNBLGVBQUEsd1VBdEdBLGlCQUFBLE9BQUEsV0FBQSxHQUFBLEdBQUEsS0FBQSxFQUFBLEVBQUEsZUFBQSxFQUFBLEVBQUEsTUFBQSxJQUFBLENBQUEsT0FBQSxHQUFBLHVCQUFBLEVBQUEsT0FBQSxZQUFBLGdCQUFBLEVBQUEsVUFBQSxZQUFBLGlCQUFBLElBQUEsTUFBQSxFQUFBLGdCQUFBLEVBQUEsR0FBQSxFQUFBLEdBQUEsRUFBQSxJQUFBLHNCQUFBLEVBQUEsTUFBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLGtCQUFBLE9BQUEsUUFBQSxFQUFBLFFBQUEsS0FBQSxFQUFBLGFBQUEsUUFBQSxFQUFBLFNBQUEsWUFBQSxFQUFBLEtBQUEsSUFBQSxPQUFBLEdBQUEsU0FBQSxHQUFBLE1BQUEsR0FBQSxlQUFBLE9BQUEsSUFBQSxLQUFBLFlBQUEsUUFBQSxHQUFBLEVBQUEsSUFBQSxVQUFBLEVBQUEsR0FBQSxFQUFBLEdBQUEsRUFBQSxJQUFBLFlBQUEsSUFBQSxlQUFBLEdBQUEsU0FBQSxHQUFBLE1BQUEsR0FBQSxlQUFBLE9BQUEsSUFBQSxLQUFBLG1CQUFBLFFBQUEsYUFBQSxFQUFBLElBQUEsa0JBQUEsRUFBQSxHQUFBLEVBQUEsR0FBQSxFQUFBLElBQUEsdUJBQUEsRUFBQSxHQUFBLEtBQUEsRUFBQSxtQkFBQSxJQUFBLG9CQUFBLE9BQUEsYUFBQSxVQUFBLElBQUEsaUJBQUE7OztnUEM2SEEsRUFBQSxRQUFBLHdDQUdBLFlBQ0EsU0FBQSxFQUFBLFNBRUEsS0FBQSxzQkFDQSxLQUFBLFdBQ0EsT0FDQSxhQUFBLEdBQ0EsZUFBQSxPQUFBLGVBQUEsWUFBQSxTQUFBLGdCQUNBLFNBQUEsT0FBQSxlQUFBLFlBQUEsU0FBQSxnQkFDQSxVQUFBLE9BQUEsZUFBQSxZQUFBLFNBQUEsZ0JBQ0EsWUFBQSxPQUFBLGVBQUEsWUFBQSxTQUFBLGdCQUNBLFNBQUEsS0FDQSxZQUNBLGNBQ0EsaUJBQUEsRUFDQSwyQkFBQSxFQUNBLGlCQUFBLEVBQ0EsY0FBQSxFQUNBLGlCQUFBLEVBQ0Esc0JBQUEsR0FDQSxpQkFBQSxFQUNBLG1CQUFBLEVBQ0EsY0FBQSxFQUNBLHFCQUFBLEVBQ0EsV0FBQSxFQUNBLGNBQUEsSUFHQSxVQUNBLE9BQUEsV0FDQSxNQUFBLE1BQUEsT0FBQSxRQUFBLHdCQUVBLEtBQUEsS0FDQSxNQUFBLEtBQUEsT0FBQSxNQUFBLEtBQUEsS0FBQSxHQUNBLE1BQUEsS0FDQSxLQUFBLFdBRUEsS0FBQSxpQkFDQSxNQUFBLEtBQUEsUUFBQSxlQUNBLE1BQUEsS0FBQSxJQUFBLFdBQ0EsUUFBQSxLQUFBLE9BQUEsUUFBQSxzQkFDQSxLQUFBLFdBRUEsS0FBQSxlQUNBLE1BQUEsS0FBQSxhQUNBLE1BQUEsS0FBQSxJQUFBLGdCQUNBLEtBQUEsYUFLQSxLQUFBLEtBQ0EsTUFBQSxHQUNBLE1BQUEsS0FBQSxJQUFBLFdBQ0EsS0FBQSxTQUVBLEtBQUEsZUFDQSxNQUFBLEtBQUEsYUFDQSxNQUFBLEtBQUEsSUFBQSxnQkFDQSxLQUFBLFlBR0EsdUJBQUEsV0FDQSxHQUFBLEdBQUEsS0FDQSxFQUFBLEtBQUEsT0FBQSxNQUFBLFVBQUEsV0FDQSxFQUFBLEtBQUEsVUFFQSxJQUFBLEVBQUEsQ0FDQSxHQUFBLEdBQUEsR0FBQSxRQUFBLEVBQUEsSUFFQSxPQUFBLEdBQUEsT0FBQSxTQUFBLEdBQ0EsSUFBQSxHQUFBLEdBQUEsRUFBQSxFQUFBLEVBQUEsY0FBQSxPQUFBLEVBQUEsRUFBQSxJQUFBLENBQ0EsR0FBQSxHQUFBLEVBQUEsY0FBQSxFQUVBLElBQUEsRUFBQSxLQUFBLEVBQUEsSUFDQSxPQUFBLEVBR0EsT0FBQSxJQUdBLE1BQUEsSUFFQSxrQkFBQSxXQUNBLE9BQ0EsWUFBQSxFQUNBLFVBQ0EsS0FBQSxLQUFBLElBQUEsZUFDQSxhQUFBLEtBQUEsSUFBQSxnQkFDQSxVQUFBLEtBQUEsSUFBQSxzQkFDQSxPQUFBLEtBQUEsSUFBQSxVQUNBLGFBQUEsS0FBQSxJQUFBLDBCQUVBLE9BQ0EsTUFBQSxLQUFBLElBQUEsbUJBQ0EsTUFBQSxLQUFBLElBQUEsV0FDQSxVQUFBLEtBQUEsSUFBQSx3QkFJQSxRQUFBLFdBQ0EsT0FDQSxZQUFBLEVBQ0EsVUFDQSxLQUFBLEtBQUEsSUFBQSxlQUNBLGFBQUEsS0FBQSxJQUFBLGdCQUNBLFVBQUEsS0FBQSxJQUFBLHNCQUNBLE9BQUEsS0FBQSxJQUFBLFVBQ0EsYUFBQSxLQUFBLElBQUEscUJBRUEsT0FDQSxNQUFBLEtBQUEsSUFBQSxtQkFDQSxNQUFBLEtBQUEsSUFBQSxXQUNBLFVBQUEsS0FBQSxJQUFBLHdCQUlBLFdBQUEsV0FBQSxHQUFBLEdBQUEsSUFDQSxPQUFBLE1BQUEsT0FBQSxNQUFBLFdBQUEsT0FBQSxTQUFBLEdBQUEsTUFBQSxHQUFBLGVBQUEsRUFBQSxlQUFBLElBQUEsU0FBQSxHQUNBLE9BQ0EsS0FBQSxFQUFBLEtBQ0EsYUFBQSxFQUFBLGFBQ0EsU0FBQSxFQUFBLFNBQ0EsT0FBQSxFQUFBLFFBQUEsRUFBQSxPQUFBLEtBQ0EsVUFBQSxFQUFBLFdBQUEsRUFBQSxVQUFBLFVBQ0EsYUFBQSxFQUFBLGlCQUlBLFFBQUEsV0FDQSxJQUFBLEdBQUEsR0FBQSxFQUFBLEVBQUEsS0FBQSxPQUFBLE1BQUEsaUJBQUEsT0FBQSxFQUFBLEVBQUEsSUFDQSxHQUFBLEtBQUEsT0FBQSxNQUFBLGlCQUFBLEdBQUEsZUFBQSxLQUFBLGFBUUEsTUFQQSxNQUFBLE9BQUEsT0FBQSxnQkFDQSxTQUFBLEdBQ0EsTUFBQSxLQUFBLE9BQUEsTUFBQSxpQkFBQSxHQUFBLGlCQUNBLFlBQUEsR0FDQSxlQUFBLElBRUEsS0FBQSxzQkFBQSxLQUFBLE9BQUEsTUFBQSxpQkFBQSxHQUFBLHNCQUNBLEtBQUEsT0FBQSxNQUFBLGlCQUFBLEVBS0EsUUFDQSxXQUNBLGtCQUdBLGVBQUEsV0FDQSxJQUFBLEdBQUEsR0FBQSxFQUFBLEVBQUEsS0FBQSxPQUFBLE1BQUEsdUJBQUEsT0FBQSxFQUFBLEVBQUEsSUFDQSxHQUFBLEtBQUEsT0FBQSxNQUFBLHVCQUFBLEdBQUEsZUFBQSxLQUFBLGFBQ0EsTUFBQSxNQUFBLE9BQUEsTUFBQSx1QkFBQSxFQUtBLFlBR0EsU0FDQSxPQUFBLFdBQUEsR0FBQSxHQUFBLElBQUEsUUFBQSxFQUFBLEVBQUEsU0FBQSxFQUFBLFFBQUEsS0FBQSxRQUFBLEtBQUEsTUFBQSxHQUFBLFFBQUEsS0FBQSxTQUFBLEdBQUEsT0FBQSxPQUFBLEVBQUEsS0FBQSxFQUFBLE1BQUEsSUFBQSxHQUFBLE1BQ0EsR0FBQSxjQUFBLEVBREEsRUFBQSxPQUFBLFNBQUEsRUFBQSxLQUFBLDJCQUFBLEVBQUEsU0FBQSxhQUFBLEVBQUEsVUFBQSxLQUFBLFNBQUEsR0FHQSxFQUFBLGNBQUEsRUFHQSxNQUFBLEVBQUEsT0FDQSxFQUFBLFdBQUEsRUFBQSxPQUFBLFFBSUEsTUFBQSxFQUFBLE9BQ0EsRUFBQSxxQkFBQSxFQUNBLEVBQUEsT0FBQSxTQUFBLHFCQUFBLEVBQUEsY0FDQSxFQUFBLFdBQUEsS0FkQSxLQUFBLEdBQUEsSUFBQSxNQUFBLE1BQUEsR0FBQSxTQUFBLEVBQUEsU0FxQkEsZUFBQSxXQUNBLEtBQUEsaUJBQUEsRUFDQSxLQUFBLFVBQUEsV0FDQSxHQUFBLEdBQUEsU0FBQSxlQUFBLFdBQ0EsR0FBQSxRQUNBLEVBQUEsTUFBQSxPQUFBLEVBQUEsYUFBQSxRQUlBLFlBQUEsU0FBQSxHQUNBLEtBQUEsY0FBQSxFQUNBLEtBQUEsaUJBQUEsRUFDQSxLQUFBLHNCQUFBLEVBQUEsT0FBQSxLQUNBLElBQUEsR0FBQSxFQUFBLE1BQ0EsR0FBQSxNQUFBLE9BQUEsT0FDQSxFQUFBLE1BQUEsT0FBQSxFQUFBLGFBQUEsTUFHQSxLQUFBLFdBQUEsR0FBQSxHQUFBLElBQUEsUUFBQSxFQUFBLEVBQUEsU0FBQSxFQUFBLFFBQUEsS0FBQSxRQUFBLEtBQUEsR0FBQSxFQUFBLE9BQUEsR0FBQSxRQUFBLEtBQUEsU0FBQSxHQUFBLE9BQUEsT0FBQSxFQUFBLEtBQUEsRUFBQSxNQUFBLElBQUEsR0FBQSxNQUNBLEdBQUEsY0FBQSxFQUVBLEdBQ0Esc0JBQUEsRUFBQSx1QkFKQSxFQUFBLE9BQUEsU0FBQSxFQUFBLEtBQUEsK0JBQUEsRUFBQSxhQUFBLEdBQUEsS0FBQSxTQUFBLEdBVUEsTUFBQSxFQUFBLE1BQUEsTUFBQSxFQUFBLE9BQ0EsUUFBQSxNQUFBLEVBQUEsT0FBQSxRQUNBLEVBQUEsbUJBQUEsR0FHQSxNQUFBLEVBQUEsT0FDQSxFQUFBLG1CQUFBLEVBQ0EsRUFBQSxPQUFBLFNBQUEscUJBQUEsRUFBQSxlQUdBLEVBQUEsaUJBQUEsRUFFQSxXQUFBLFdBQ0EsRUFBQSxpQkFBQSxFQUNBLEVBQUEsaUJBQUEsRUFBQSxrQkFDQSxFQUFBLGVBQUEsRUFBQSxtQkFDQSxPQTFCQSxLQUFBLEdBQUEsSUFBQSxNQUFBLE1BQUEsR0FBQSxTQUFBLEVBQUEsVUFnQ0EsUUFBQSxXQUtBLEtBQUEsa0JBQUEsS0FBQSxZQUFBLFNBQUEsT0FBQSxPQUFBLG9CQUFBLEtBQUEsT0FBQSxNQUFBLEtBQUEsTUFLQSxLQUFBLDRCQUFBLEtBQUEsWUFBQSxTQUFBLE9BQUEsT0FBQSxrQkFBQSxLQUFBLE9BQUEsTUFBQSxLQUFBLE1BS0EsS0FBQSxhQUFBLEtBQUEsT0FBQSxPQUFBLGFBRUEsS0FBQSxPQUFBLFNBQUEscUJBQUEsS0FBQSxjQUNBLEtBQUEsT0FBQSxTQUFBLDRCQUFBLEtBQUEsY0FDQSxLQUFBLE9BQUEsU0FBQSxxQkFDQSxLQUFBLE9BQUEsU0FBQSxpQkFDQSxhQUFBLEtBQUEsYUFDQSx1QkFBQSxJQUdBLEtBQUEsT0FBQSxPQUFBLGdCQUNBLFNBQUEsR0FDQSxNQUFBLEdBQ0EsWUFBQSxHQUNBLGVBQUEsd1VBcllBLGlCQUFBLE9BQUEsV0FBQSxHQUFBLEdBQUEsS0FBQSxFQUFBLEVBQUEsZUFBQSxFQUFBLEVBQUEsTUFBQSxJQUFBLENBQUEsT0FBQSxHQUFBLHVCQUFBLEVBQUEsUUFBQSxhQUFBLEVBQUEsT0FBQSxPQUFBLElBQUEsRUFBQSxRQUFBLGdCQUFBLEVBQUEsS0FBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLE1BQUEsRUFBQSxHQUFBLEVBQUEsR0FBQSxFQUFBLElBQUEscURBQUEsRUFBQSxHQUFBLEtBQUEsRUFBQSxPQUFBLFlBQUEsUUFBQSxFQUFBLE9BQUEsWUFBQSx1QkFBQSxFQUFBLFNBQUEsWUFBQSxVQUFBLEVBQUEsTUFBQSxFQUFBLE1BQUEsWUFBQSxxQkFBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsSUFBQSxpQkFBQSxPQUFBLEVBQUEsR0FBQSxLQUFBLEVBQUEsTUFBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsUUFBQSxtQkFBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLFFBQUEsc0JBQUEsRUFBQSxRQUFBLHFCQUFBLFVBQUEsRUFBQSxNQUFBLEVBQUEsTUFBQSxZQUFBLHFCQUFBLEVBQUEsR0FBQSxFQUFBLEdBQUEsRUFBQSxJQUFBLHFCQUFBLE9BQUEsRUFBQSxHQUFBLEtBQUEsRUFBQSxNQUFBLEVBQUEsR0FBQSxFQUFBLEdBQUEsRUFBQSxRQUFBLHFCQUFBLGdCQUFBLEVBQUEsS0FBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLFFBQUEsY0FBQSxFQUFBLFFBQUEsYUFBQSxVQUFBLEVBQUEsTUFBQSxFQUFBLE1BQUEsWUFBQSxxQkFBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsSUFBQSxzQ0FBQSxPQUFBLEVBQUEsR0FBQSxLQUFBLEVBQUEsTUFBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsUUFBQSxhQUFBLGdCQUFBLEVBQUEsS0FBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLFFBQUEsV0FBQSxFQUFBLFFBQUEsVUFBQSxVQUFBLEVBQUEsTUFBQSxFQUFBLE1BQUEsWUFBQSxxQkFBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsSUFBQSxxQkFBQSxPQUFBLEVBQUEsR0FBQSxLQUFBLEVBQUEsTUFBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsUUFBQSxVQUFBLGdCQUFBLEVBQUEsS0FBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLFFBQUEsbUJBQUEsRUFBQSxRQUFBLGtCQUFBLFVBQUEsRUFBQSxNQUFBLEVBQUEsTUFBQSxZQUFBLHFCQUFBLEVBQUEsR0FBQSxFQUFBLEdBQUEsRUFBQSxJQUFBLHNCQUFBLE9BQUEsRUFBQSxHQUFBLEtBQUEsRUFBQSxNQUFBLEVBQUEsR0FBQSxFQUFBLEdBQUEsRUFBQSxRQUFBLGtCQUFBLGdCQUFBLEVBQUEsS0FBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLE1BQUEsRUFBQSxNQUFBLFlBQUEscUJBQUEsRUFBQSxHQUFBLEVBQUEsR0FBQSxFQUFBLElBQUEsWUFBQSxPQUFBLEVBQUEsR0FBQSxLQUFBLEVBQUEsUUFBQSxxQkFBQSxFQUFBLE1BQUEsRUFBQSxHQUFBLEVBQUEsR0FBQSxFQUFBLFFBQUEseUJBQUEsRUFBQSxNQUFBLEVBQUEsR0FBQSxFQUFBLEdBQUEsRUFBQSxRQUFBLGtCQUFBLEVBQUEsR0FBQSxLQUFBLEVBQUEsTUFBQSxFQUFBLE1BQUEsWUFBQSxxQkFBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsSUFBQSxZQUFBLE9BQUEsRUFBQSxHQUFBLEtBQUEsRUFBQSxNQUFBLEVBQUEsR0FBQSxFQUFBLEdBQUEsRUFBQSxRQUFBLFFBQUEsV0FBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLE1BQUEsRUFBQSxNQUFBLFlBQUEsd0JBQUEsRUFBQSxHQUFBLEVBQUEsR0FBQSxFQUFBLElBQUEsMEJBQUEsT0FBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLE1BQUEsRUFBQSxPQUFBLFlBQUEsbUNBQUEsRUFBQSxnQkFBQSxFQUFBLE9BQUEsWUFBQSxpQ0FBQSxFQUFBLFlBQUEsWUFBQSwwQ0FBQSxPQUFBLEdBQUEsWUFBQSxVQUFBLE1BQUEsRUFBQSx1QkFBQSxJQUFBLE1BQUEsRUFBQSxlQUFBLEVBQUEsR0FBQSxLQUFBLEVBQUEsT0FBQSxZQUFBLFdBQUEsRUFBQSxVQUFBLFlBQUEsMkJBQUEsTUFBQSxFQUFBLGdCQUFBLFVBQUEsWUFBQSxPQUFBLFNBQUEsRUFBQSxjQUFBLElBQUEsTUFBQSxFQUFBLFFBQUEsRUFBQSxHQUFBLHlCQUFBLEVBQUEsR0FBQSxFQUFBLElBQUEsU0FBQSwwQkFBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLE9BQUEsWUFBQSxnQkFBQSxNQUFBLEVBQUEsZ0JBQUEsVUFBQSxjQUFBLEVBQUEsR0FBQSx5QkFBQSxFQUFBLEdBQUEsRUFBQSxrQkFBQSxFQUFBLElBQUEscUJBQUEsRUFBQSxJQUFBLGlCQUFBLDhCQUFBLEVBQUEsT0FBQSxZQUFBLGNBQUEsRUFBQSxPQUFBLEVBQUEsR0FBQSxFQUFBLEdBQUEsRUFBQSxRQUFBLDRCQUFBLEVBQUEsR0FBQSxLQUFBLEVBQUEsT0FBQSxZQUFBLHdCQUFBLEVBQUEsMEJBQUEsRUFBQSxRQUFBLFlBQUEsMkJBQUEsT0FBQSxLQUFBLFVBQUEsSUFBQSxNQUFBLEVBQUEsa0JBQUEsRUFBQSxlQUFBLEVBQUEsR0FBQSxLQUFBLEVBQUEsUUFBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLE9BQUEsWUFBQSx1QkFBQSxFQUFBLFFBQUEsWUFBQSxFQUFBLEtBQUEsWUFBQSxpQkFBQSxPQUFBLEtBQUEsRUFBQSxRQUFBLFlBQUEsT0FBQSxZQUFBLEVBQUEsR0FBQSxhQUFBLEVBQUEsR0FBQSxFQUFBLElBQUEsbURBQUEsY0FBQSxFQUFBLFNBQUEsRUFBQSxHQUFBLEtBQUEsRUFBQSxnQkFBQSxFQUFBLE9BQUEsWUFBQSxpQkFBQSxFQUFBLE9BQUEsWUFBQSxRQUFBLEVBQUEsT0FBQSxZQUFBLHVCQUFBLEVBQUEsVUFBQSxZQUFBLGlCQUFBLE9BQUEsT0FBQSxVQUFBLElBQUEsTUFBQSxTQUFBLEdBQUEsRUFBQSxxQkFBQSxFQUFBLEVBQUEsV0FBQSxFQUFBLGNBQUEsRUFBQSxHQUFBLGVBQUEsRUFBQSxHQUFBLEVBQUEsSUFBQSxnREFBQSxvQkFBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLE9BQUEsWUFBQSxRQUFBLEVBQUEsT0FBQSxZQUFBLHVCQUFBLEVBQUEsb0JBQUEsRUFBQSxPQUFBLFlBQUEsWUFBQSxFQUFBLE9BQUEsWUFBQSxZQUFBLEVBQUEsR0FBQSxpQkFBQSxFQUFBLEdBQUEsRUFBQSxJQUFBLG1EQUFBLG9CQUFBLEVBQUEsT0FBQSxZQUFBLHdCQUFBLEVBQUEsVUFBQSxFQUFBLE9BQUEsWUFBQSxjQUFBLEVBQUEsTUFBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsSUFBQSxrREFBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLFVBQUEsT0FBQSxPQUFBLEVBQUEsT0FBQSxZQUFBLEVBQUEsU0FBQSxjQUFBLEVBQUEsY0FBQSxFQUFBLE9BQUEsWUFBQSxvQkFBQSxPQUFBLEtBQUEsV0FBQSxLQUFBLFlBQUEsRUFBQSxVQUFBLFlBQUEsaUJBQUEsT0FBQSxTQUFBLEVBQUEsYUFBQSxLQUFBLFVBQUEsSUFBQSxNQUFBLEVBQUEsVUFBQSxFQUFBLEdBQUEsdUJBQUEsRUFBQSxHQUFBLEVBQUEsSUFBQSxzQkFBQSw2QkFBQSxHQUFBLEVBQUEsYUFBQSxFQUFBLEtBQUEsRUFBQSxHQUFBLEtBQUEsRUFBQSxXQUFBLE9BQUEsRUFBQSxPQUFBLEVBQUEsTUFBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsSUFBQSxrQkFBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLGtCQUFBLE9BQUEsUUFBQSxFQUFBLFFBQUEsS0FBQSxFQUFBLHVCQUFBLFFBQUEsRUFBQSxTQUFBLFlBQUEsRUFBQSxLQUFBLElBQUEsT0FBQSxHQUFBLFNBQUEsR0FBQSxNQUFBLEdBQUEsZUFBQSxPQUFBLElBQUEsS0FBQSxZQUFBLFFBQUEsR0FBQSxFQUFBLElBQUEsVUFBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsSUFBQSxZQUFBLE1BQUEsRUFBQSxlQUFBLEdBQUEsRUFBQSxRQUFBLGlCQUFBOzs7c1BDMkJBLEVBQUEsUUFBQSx1QkFDQSxFQUFBLFFBQUEsdUJBQ0EsRUFBQSxRQUFBLGlCQUNBLEVBQUEsUUFBQSxrQ0FHQSxLQUFBLHVCQUNBLFlBQ0EsU0FBQSxFQUFBLFNBRUEsS0FBQSxXQUNBLE9BQ0EsY0FDQSxZQUNBLFlBQ0EsYUFBQSxHQUNBLFVBQUEsR0FDQSxrQkFBQSxHQUNBLGdCQUFBLEdBQ0EsUUFBQSxHQUNBLGVBQUEsR0FDQSxhQUFBLElBRUEsa0JBQUEsRUFDQSxXQUFBLEdBQ0EsZUFBQSxtQkFBQSxlQUFBLGdDQUFBLGNBQUEscUJBQUEsV0FDQSxTQUFBLG1CQUFBLGVBQUEsdUJBQUEsY0FBQSxZQUFBLFdBQ0EsVUFBQSxtQkFBQSxlQUFBLHVCQUFBLGNBQUEsWUFBQSxXQUNBLFlBQUEsbUJBQUEsZUFBQSx1QkFBQSxjQUFBLFlBQUEsV0FDQSxTQUFBLE9BR0EsVUFDQSxhQUFBLFdBRUEsTUFBQSxNQUFBLG1CQUtBLEtBQUEsZUFDQSxNQUFBLEtBQUEsV0FBQSxhQUNBLE1BQUEsS0FBQSxJQUFBLGdCQUNBLEtBQUEsU0FFQSxLQUFBLG9CQUNBLE1BQUEsS0FBQSxXQUFBLGtCQUFBLEdBQUEsTUFBQSxLQUFBLFdBQUEsbUJBQUEsR0FDQSxNQUFBLEtBQUEsSUFBQSxxQkFDQSxLQUFBLFNBRUEsS0FBQSxrQkFDQSxNQUFBLEtBQUEsV0FBQSxnQkFBQSxHQUFBLE1BQUEsS0FBQSxXQUFBLGlCQUFBLEdBQ0EsTUFBQSxLQUFBLElBQUEsbUJBQ0EsS0FBQSxTQUVBLEtBQUEsWUFDQSxNQUFBLEtBQUEsV0FBQSxVQUNBLE1BQUEsS0FBQSxJQUFBLGdCQUNBLFFBQUEsS0FBQSxtQkFDQSxLQUFBLFdBRUEsS0FBQSxVQUNBLE1BQUEsS0FBQSxXQUFBLFFBQ0EsTUFBQSxLQUFBLElBQUEsV0FDQSxRQUFBLEtBQUEsZUFDQSxLQUFBLFdBRUEsS0FBQSxpQkFDQSxNQUFBLEtBQUEsV0FBQSxlQUFBLEdBQUEsTUFBQSxLQUFBLFdBQUEsZ0JBQUEsR0FDQSxNQUFBLEtBQUEsSUFBQSxrQkFDQSxLQUFBLFNBRUEsS0FBQSxlQUNBLE1BQUEsS0FBQSxXQUFBLGFBQUEsR0FBQSxNQUFBLEtBQUEsV0FBQSxjQUFBLEdBQ0EsTUFBQSxLQUFBLElBQUEsZ0JBQ0EsS0FBQSxhQUdBLGVBQUEsV0FDQSxHQUFBLE1BQ0EsSUFzQkEsT0FwQkEsR0FBQSxNQUNBLE1BQUEsR0FDQSxLQUFBLE9BR0EsS0FBQSxPQUFBLE1BQUEsaUJBQUEsUUFBQSxTQUFBLEdBQ0EsT0FBQSxFQUFBLFVBQ0EsSUFBQSxFQUFBLFFBQUEsRUFBQSxRQUFBLGVBRUEsRUFBQSxNQUNBLE1BQUEsRUFBQSxRQUFBLFlBQ0EsS0FBQSxFQUFBLFFBQUEsT0FHQSxFQUFBLEtBQUEsRUFBQSxRQUFBLGdCQUtBLEVBQUEsS0FBQSxTQUFBLEVBQUEsR0FBQSxNQUFBLEdBQUEsS0FBQSxFQUFBLEtBQUEsR0FBQSxJQUNBLEdBRUEsbUJBQUEsV0FDQSxHQUFBLE1BQ0EsSUFxQkEsT0FuQkEsR0FBQSxNQUNBLE1BQUEsR0FDQSxLQUFBLE9BR0EsS0FBQSxPQUFBLE1BQUEsaUJBQUEsUUFBQSxTQUFBLElBQ0EsSUFBQSxFQUFBLFFBQUEsRUFBQSxxQkFBQSxPQUFBLEVBQUEsdUJBRUEsT0FBQSxFQUFBLG9CQUNBLEVBQUEsTUFDQSxNQUFBLEVBQUEsbUJBQ0EsS0FBQSxFQUFBLHVCQUlBLEVBQUEsS0FBQSxFQUFBLHVCQUdBLEVBQUEsS0FBQSxTQUFBLEVBQUEsR0FBQSxNQUFBLEdBQUEsS0FBQSxFQUFBLEtBQUEsR0FBQSxJQUNBLEdBRUEsWUFBQSxXQUNBLEdBQUEsS0FjQSxPQVpBLE1BQUEsT0FBQSxNQUFBLGlCQUFBLFFBQUEsU0FBQSxHQUNBLEdBQUEsR0FBQSxLQUFBLE9BQUEsRUFBQSxFQUFBLFNBQUEsR0FDQSxHQUFBLFlBQUEsT0FBQSxFQUFBLFFBQUEsR0FBQSxFQUFBLFFBQUEsWUFDQSxFQUFBLFFBQUEsT0FBQSxFQUFBLFFBQUEsR0FBQSxFQUFBLFFBQUEsS0FDQSxFQUFBLDhCQUFBLEVBQUEsYUFBQSxVQUNBLEVBQUEscUJBQUEsRUFBQSxhQUFBLEtBQ0EsRUFBQSxtQkFBQSxFQUFBLFVBQUEsVUFDQSxFQUFBLFVBQUEsRUFBQSxVQUFBLEtBQ0EsRUFBQSxZQUFBLElBQUEsRUFBQSxxQkFBQSxFQUFBLHFCQUFBLEVBQUEsWUFDQSxFQUFBLEtBQUEsS0FHQSxHQUVBLFFBQUEsV0FDQSxPQUNBLFlBQUEsRUFDQSxVQUNBLGlCQUFBLEtBQUEsSUFBQSxnQkFDQSxhQUFBLEtBQUEsSUFBQSxnQkFDQSxxQkFBQSxLQUFBLElBQUEscUNBQ0EsWUFBQSxLQUFBLElBQUEsV0FDQSxRQUFBLEtBQUEsSUFBQSxXQUNBLFVBQUEsS0FBQSxJQUFBLHFCQUVBLE9BQ0EsTUFBQSxLQUFBLElBQUEsbUJBQ0EsTUFBQSxLQUFBLElBQUEsV0FDQSxVQUFBLEtBQUEsSUFBQSxzQkFFQSxLQUFBLHFCQUlBLGFBQUEsV0FBQSxHQUFBLEdBQUEsS0FHQSxHQURBLEtBQUEsT0FBQSxNQUFBLFVBQUEsV0FDQSxLQUFBLFlBQ0EsTUFBQSxVQUVBLE9BQUEsR0FBQSxPQUFBLFNBQUEsR0FDQSxJQUFBLEdBQUEsS0FBQSxHQUFBLFdBQ0EsT0FBQSxHQUNBLElBQUEsZUFDQSxHQUFBLEVBQUEsV0FBQSxhQUFBLENBSUEsSUFIQSxHQUFBLFFBQUEsRUFBQSxXQUFBLGFBQUEsS0FHQSxLQUFBLEVBQUEsY0FDQSxPQUFBLEVBR0EsS0FDQSxLQUFBLG9CQUNBLEdBQUEsRUFBQSxXQUFBLHFCQUVBLEVBQUEsc0JBQUEsRUFBQSxXQUFBLG1CQUFBLEVBQUEscUJBQUEsRUFBQSxXQUFBLG1CQUNBLE9BQUEsQ0FHQSxNQUNBLEtBQUEsa0JBQ0EsR0FBQSxFQUFBLFdBQUEsbUJBRUEsRUFBQSxzQkFBQSxFQUFBLFdBQUEsaUJBQUEsRUFBQSxxQkFBQSxFQUFBLFdBQUEsaUJBQ0EsT0FBQSxDQUdBLE1BQ0EsS0FBQSxpQkFDQSxHQUFBLEVBQUEsV0FBQSxrQkFFQSxFQUFBLFdBQUEsRUFBQSxXQUFBLGdCQUFBLEVBQUEsVUFBQSxFQUFBLFdBQUEsZ0JBQ0EsT0FBQSxDQUdBLE1BQ0EsS0FBQSxlQUNBLEdBQUEsRUFBQSxXQUFBLGdCQUVBLEVBQUEsV0FBQSxFQUFBLFdBQUEsY0FBQSxFQUFBLFVBQUEsRUFBQSxXQUFBLGNBQ0EsT0FBQSxDQUdBLE1BQ0EsS0FBQSxZQUVBLEdBQUEsRUFBQSxXQUFBLFdBQUEsRUFBQSxxQkFBQSxFQUFBLFdBQUEsVUFDQSxPQUFBLENBRUEsTUFDQSxLQUFBLFVBRUEsR0FBQSxFQUFBLFdBQUEsU0FBQSxFQUFBLGNBQUEsRUFBQSxXQUFBLFFBQ0EsT0FBQSxFQU9BLE9BQUEsS0FJQSxjQUFBLFdBQ0EsTUFBQSxNQUFBLFdBR0EsU0FFQSxlQUFBLFNBQUEsR0FDQSxHQUNBLElBQ0EsYUFBQSxFQUFBLGFBQ0EsVUFBQSxFQUFBLFVBQUEsRUFBQSxVQUFBLEdBQ0EsUUFBQSxFQUFBLFFBQUEsRUFBQSxRQUFBLEdBQ0Esa0JBQUEsR0FDQSxnQkFBQSxHQUNBLGVBQUEsR0FDQSxhQUFBLEdBR0EsSUFBQSxFQUFBLGtCQUFBLENBQ0EsR0FBQSxJQUFBLEVBQUEsRUFBQSxTQUFBLEVBQUEsbUJBQUEsT0FaQSxVQWFBLEdBQUEsa0JBQUEsTUFFQSxHQUFBLGtCQUFBLEVBR0EsSUFBQSxFQUFBLGdCQUFBLENBQ0EsR0FBQSxJQUFBLEVBQUEsRUFBQSxTQUFBLEVBQUEsaUJBQUEsT0FuQkEsVUFvQkEsR0FBQSxnQkFBQSxNQUVBLEdBQUEsZ0JBQUEsRUFHQSxJQUFBLEVBQUEsZUFBQSxDQUNBLEdBQUEsSUFBQSxFQUFBLEVBQUEsU0FBQSxFQUFBLGdCQUFBLE9BMUJBLFVBMkJBLEdBQUEsZUFBQSxNQUVBLEdBQUEsZUFBQSxFQUdBLElBQUEsRUFBQSxhQUFBLENBQ0EsR0FBQSxJQUFBLEVBQUEsRUFBQSxTQUFBLEVBQUEsY0FBQSxPQWpDQSxVQWtDQSxHQUFBLGFBQUEsTUFFQSxHQUFBLGFBQUEsRUFHQSxNQUFBLGlCQUFBLEdBQ0EsS0FBQSxZQUNBLEtBQUEsTUFBQSxNQUFBLFFBQUEsSUFHQSxpQkFBQSxTQUFBLEdBQUEsR0FBQSxHQUFBLE1BQ0EsRUFBQSxFQUFBLFNBQUEsR0FBQSxRQUFBLFNBQUEsR0FDQSxFQUFBLFdBQUEsR0FBQSxFQUFBLE1BR0EsVUFBQSxXQUFBLEdBQUEsR0FBQSxLQUNBLE1BR0EsRUFBQSxFQUFBLFNBQUEsS0FBQSxZQUFBLFFBQUEsU0FBQSxHQUNBLEdBQUEsR0FBQSxFQUFBLFdBQUEsRUFDQSxNQUFBLElBQ0EsRUFBQSxHQUFBLEtBSUEsS0FBQSxvQkFDQSxFQUFBLEVBQUEsU0FBQSxHQUFBLE9BQ0EsS0FBQSxRQUFBLFNBQUEsT0FBQSxRQUFBLEVBQUEsUUFBQSxVQUFBLE1BS0EsS0FBQSxRQUFBLFNBQUEsV0FBQSxNQUFBLFNBQUEsUUFLQSxXQUFBLFlBQ0EsRUFBQSxFQUFBLFNBQUEsa0JBQUEsWUFBQSxpQkFHQSxRQUFBLFdBRUEsR0FBQSxHQUFBLEtBQUEsT0FBQSxNQUFBLE9BRUEsSUFBQSxFQUFBLENBQ0EsR0FBQSxHQUFBLEVBQUEsUUFBQSxNQUFBLEVBQ0EsSUFDQSxLQUFBLGlCQUFBLEdBSUEsS0FBQSxrQkFBQSxFQUVBLEtBQUEsT0FBQSxTQUFBLHNCQUFBLEtBQUEsT0FBQSxNQUFBLEtBQUEsUUFBQSxJQUFBLEtBQUEsWUFFQSxFQUFBLEVBQUEsU0FBQSxZQUFBLFNBR0EsS0FBQSxPQUFBLE9BQUEsZ0JBQ0EsU0FBQSxHQUNBLE1BQUEsS0FBQSxJQUFBLDhDQUNBLFlBQUEsS0FBQSxJQUFBLG9EQUNBLGVBQUEsS0FHQSxFQUFBLEVBQUEsU0FBQSxRQUFBLFNBQUEsTUFDQSxFQUFBLEVBQUEsU0FBQSx1QkFBQSxRQUFBLFlBQUEsU0FBQSxnQ0FLQSxFQUFBLEVBQUEsU0FBQSxRQUFBLE9BQUEsWUFDQSxFQUFBLEVBQUEsU0FBQSxRQUFBLFNBQUEsS0FDQSxFQUFBLEVBQUEsU0FBQSx1QkFBQSxRQUFBLFlBQUEsU0FBQSxnQ0FJQSxFQUFBLEVBQUEsU0FBQSx1QkFBQSxRQUFBLFlBQUEsWUFBQSxxV0FoWUEsaUJBQUEsT0FBQSxXQUFBLEdBQUEsR0FBQSxLQUFBLEVBQUEsRUFBQSxlQUFBLEVBQUEsRUFBQSxNQUFBLElBQUEsQ0FBQSxPQUFBLEdBQUEsc0JBQUEsRUFBQSxPQUFBLFlBQUEscUJBQUEsT0FBQSxLQUFBLGlCQUFBLElBQUEsTUFBQSxFQUFBLFlBQUEsS0FBQSxrQkFBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsSUFBQSxxQkFBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLE9BQUEsWUFBQSw0QkFBQSxPQUFBLEtBQUEsV0FBQSxLQUFBLFlBQUEsRUFBQSxVQUFBLE9BQUEsT0FBQSxFQUFBLGFBQUEsWUFBQSxFQUFBLFNBQUEsY0FBQSxFQUFBLFdBQUEsWUFBQSxFQUFBLG1CQUFBLEdBQUEsRUFBQSxHQUFBLEtBQUEsRUFBQSxPQUFBLFlBQUEsY0FBQSxhQUFBLE1BQUEsUUFBQSxnQkFBQSxVQUFBLEVBQUEsT0FBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEtBQUEsSUFBQSxlQUFBLEVBQUEsR0FBQSxLQUFBLEVBQUEsT0FBQSxZQUFBLHlDQUFBLGFBQUEsTUFBQSxXQUFBLEVBQUEsT0FBQSxZQUFBLDJFQUFBLEVBQUEsUUFBQSxZQUFBLG9EQUFBLEVBQUEsR0FBQSxFQUFBLEdBQUEsRUFBQSxrQkFBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLFVBQUEsYUFBQSxLQUFBLFFBQUEsUUFBQSxVQUFBLE1BQUEsRUFBQSxTQUFBLFdBQUEsYUFBQSxZQUFBLDJGQUFBLElBQUEsUUFBQSxTQUFBLEdBQUEsR0FBQSxHQUFBLE1BQUEsVUFBQSxPQUFBLEtBQUEsRUFBQSxPQUFBLFFBQUEsU0FBQSxHQUFBLE1BQUEsR0FBQSxXQUFBLElBQUEsU0FBQSxHQUFBLE1BQUEsVUFBQSxHQUFBLEVBQUEsT0FBQSxFQUFBLE9BQUEsR0FBQSxTQUFBLEVBQUEsT0FBQSxTQUFBLEVBQUEsRUFBQSxJQUFBLFNBQUEsR0FBQSxNQUFBLEdBQUEsTUFBQSxNQUFBLFNBQUEsRUFBQSxPQUFBLFlBQUEsRUFBQSxVQUFBLE9BQUEsS0FBQSxHQUFBLE1BQUEsUUFBQSxFQUFBLEdBQUEsUUFBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLFVBQUEsT0FBQSxLQUFBLEdBQUEsTUFBQSxRQUFBLEVBQUEsR0FBQSxnQkFBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLGtCQUFBLElBQUEsUUFBQSxPQUFBLFFBQUEsRUFBQSxRQUFBLEtBQUEsRUFBQSxhQUFBLFFBQUEsRUFBQSxTQUFBLFlBQUEsRUFBQSxLQUFBLElBQUEsZUFBQSxHQUFBLFNBQUEsR0FBQSxNQUFBLEdBQUEsZUFBQSxPQUFBLElBQUEsS0FBQSxtQkFBQSxRQUFBLGFBQUEsRUFBQSxJQUFBLGtCQUFBLEVBQUEsR0FBQSxFQUFBLEdBQUEsRUFBQSxJQUFBLG9CQUFBLElBQUEsdUJBQUEsR0FBQSxTQUFBLEdBQUEsTUFBQSxHQUFBLFVBQUEsRUFBQSxHQUFBLEVBQUEsR0FBQSxFQUFBLElBQUEsd0NBQUEsRUFBQSxHQUFBLEtBQUEsRUFBQSxPQUFBLFlBQUEsYUFBQSxJQUFBLGlCQUFBOzs7Z1BDaUJBLEVBQUEsUUFBQSx3Q0FHQSxZQUNBLFNBQUEsRUFBQSxTQUVBLEtBQUEsa0JBQ0EsS0FBQSxXQUNBLE9BQ0EsY0FDQSxZQUNBLGdCQUFBLEVBQ0EsY0FBQSxJQUdBLFVBQ0EsT0FBQSxXQUNBLE1BQUEsTUFBQSxPQUFBLFFBQUEsdUJBRUEsS0FBQSxLQUNBLE1BQUEsS0FBQSxPQUFBLE1BQUEsS0FBQSxLQUFBLEdBQ0EsTUFBQSxLQUFBLElBQUEsYUFDQSxLQUFBLFdBRUEsS0FBQSxPQUNBLE1BQUEsS0FBQSxPQUFBLE1BQUEsS0FBQSxLQUNBLE1BQUEsS0FBQSxJQUFBLFFBQ0EsS0FBQSxXQUVBLEtBQUEsWUFDQSxNQUFBLEtBQUEsT0FBQSxNQUFBLEtBQUEsS0FBQSxVQUNBLE1BQUEsS0FBQSxJQUFBLGFBQ0EsS0FBQSxTQUVBLEtBQUEsV0FDQSxNQUFBLEtBQUEsT0FBQSxNQUFBLEtBQUEsS0FBQSxTQUNBLE1BQUEsS0FBQSxJQUFBLFlBQ0EsS0FBQSxTQUVBLEtBQUEsUUFDQSxNQUFBLEtBQUEsT0FBQSxNQUFBLEtBQUEsS0FBQSxNQUNBLE1BQUEsS0FBQSxJQUFBLFNBQ0EsS0FBQSxTQUVBLEtBQUEsVUFDQSxNQUFBLEtBQUEsT0FBQSxNQUFBLEtBQUEsS0FBQSxTQUFBLEtBQUEsT0FBQSxNQUFBLEtBQUEsS0FBQSxRQUFBLGFBQUEsR0FDQSxNQUFBLEtBQUEsSUFBQSxXQUNBLFFBQUEsS0FBQSxPQUFBLFFBQUEscUJBQ0EsS0FBQSxnQkFPQSxTQUNBLE9BQUEsV0FBQSxHQUFBLEdBQUEsSUFBQSxRQUFBLEVBQUEsRUFBQSxTQUFBLEVBQUEsUUFBQSxLQUFBLFFBQUEsS0FBQSxNQUFBLEdBQUEsUUFBQSxLQUFBLFNBQUEsR0FBQSxPQUFBLE9BQUEsRUFBQSxLQUFBLEVBQUEsTUFBQSxJQUFBLEdBQUEsTUFDQSxHQUFBLGNBQUEsRUFEQSxFQUFBLE9BQUEsU0FBQSxFQUFBLEtBQUEsV0FBQSxFQUFBLFNBQUEsR0FBQSxFQUFBLFVBQUEsS0FBQSxTQUFBLEdBSUEsRUFBQSxjQUFBLEVBR0EsTUFBQSxFQUFBLE9BQ0EsRUFBQSxXQUFBLEVBQUEsT0FBQSxRQUdBLE1BQUEsRUFBQSxPQUNBLEVBQUEsT0FBQSxPQUFBLGlCQUFBLEVBQUEsT0FBQSxNQUNBLEVBQUEsZ0JBQUEsS0FiQSxLQUFBLEdBQUEsSUFBQSxNQUFBLE1BQUEsR0FBQSxTQUFBLEVBQUEsVUFtQkEsUUFBQSxXQUNBLEtBQUEsT0FBQSxTQUFBLG9WQTdGQSxpQkFBQSxPQUFBLFdBQUEsR0FBQSxHQUFBLEtBQUEsRUFBQSxFQUFBLGVBQUEsRUFBQSxFQUFBLE1BQUEsSUFBQSxDQUFBLE9BQUEsR0FBQSxPQUFBLEVBQUEsZUFBQSxFQUFBLE9BQUEsRUFBQSxNQUFBLFVBQUEsVUFBQSxFQUFBLEdBQUEsRUFBQSxJQUFBLCtDQUFBLEVBQUEsT0FBQSxFQUFBLFVBQUEsT0FBQSxPQUFBLEVBQUEsT0FBQSxZQUFBLEVBQUEsU0FBQSxjQUFBLEVBQUEsY0FBQSxFQUFBLE9BQUEsWUFBQSxvQkFBQSxPQUFBLEtBQUEsV0FBQSxLQUFBLFlBQUEsRUFBQSxVQUFBLFlBQUEsaUJBQUEsT0FBQSxTQUFBLEVBQUEsYUFBQSxLQUFBLFVBQUEsSUFBQSxNQUFBLEVBQUEsVUFBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsSUFBQSw4QkFBQSxNQUFBLGlCQUFBOzs7Z1BDa0JBLEVBQUEsUUFBQSx3Q0FHQSxZQUNBLFNBQUEsRUFBQSxTQUVBLEtBQUEscUJBQ0EsS0FBQSxXQUNBLE9BQ0EsY0FDQSxZQUNBLGNBQUEsRUFDQSxNQUFBLEtBQ0EsY0FBQSxJQUdBLFVBQ0EsT0FBQSxXQUNBLFFBQ0EsS0FBQSxRQUNBLE1BQUEsR0FDQSxNQUFBLEtBQUEsSUFBQSxTQUNBLEtBQUEsV0FFQSxLQUFBLFdBQ0EsTUFBQSxHQUNBLE1BQUEsS0FBQSxJQUFBLFlBQ0EsS0FBQSxXQUlBLFNBQ0EsS0FBQSxXQUFBLEdBQUEsR0FBQSxJQUFBLFFBQUEsRUFBQSxFQUFBLFNBQUEsRUFBQSxRQUFBLEtBQUEsUUFBQSxLQUFBLEdBQUEsR0FBQSxDQUFBLE9BQUEsR0FBQSxRQUFBLEtBQUEsU0FBQSxHQUFBLE9BQUEsT0FBQSxFQUFBLEtBQUEsRUFBQSxNQUFBLElBQUEsR0FBQSxHQUNBLEVBQUEsRUFFQSxFQUFBLGNBQUEsRUFIQSxFQUFBLE1BQUEsQ0FBQSxFQUFBLEtBQUEsQ0FBQSxPQUFBLE1BQUEsR0FBQSxLQUFBLEVBQUEsRUFBQSxLQUFBLFVBQUEsS0FBQSxHQU1BLEVBQUEsRUFBQSxLQUNBLE1BQUEsRUFBQSxPQUNBLEVBQUEsTUFBQSxFQUFBLE9BQUEsTUFSQSxLQUFBLEdBQUEsTUFBQSxHQUFBLE9BQUEsU0FBQSxFQUFBLEtBQUEsZ0JBYUEsTUFBQSxFQUFBLE1BQ0EsU0FBQSxFQUFBLFNBQUEsV0FGQSxLQUFBLFNBQUEsR0FLQSxFQUFBLGNBQUEsRUFDQSxFQUFBLE1BQUEsR0FHQSxNQUFBLEVBQUEsT0FDQSxFQUFBLFdBQUEsRUFBQSxPQUFBLFFBR0EsTUFBQSxFQUFBLE9BQ0EsRUFBQSxjQUFBLEtBMUJBLEtBQUEsR0FBQSxJQUFBLE1BQUEsTUFBQSxHQUFBLFNBQUEsRUFBQSxVQStCQSxRQUFBLFdBQUEsR0FBQSxHQUFBLElBQ0EsTUFBQSxLQUFBLFdBQUEsS0FBQSxTQUFBLEdBQ0EsTUFBQSxFQUFBLE9BQ0EsRUFBQSxNQUFBLEVBQUEsT0FBQSxTQUdBLEtBQUEsT0FBQSxPQUFBLGdCQUNBLFNBQUEsR0FDQSxNQUFBLEtBQUEsSUFBQSwrQ0FDQSxZQUFBLEdBQ0EsZUFBQSx3VUEzRkEsaUJBQUEsT0FBQSxXQUFBLEdBQUEsR0FBQSxLQUFBLEVBQUEsRUFBQSxlQUFBLEVBQUEsRUFBQSxNQUFBLElBQUEsQ0FBQSxPQUFBLEdBQUEsT0FBQSxFQUFBLGFBQUEsRUFBQSxPQUFBLEVBQUEsR0FBQSxTQUFBLEVBQUEsR0FBQSxFQUFBLElBQUEsOENBQUEsVUFBQSxFQUFBLE9BQUEsRUFBQSxVQUFBLE9BQUEsT0FBQSxFQUFBLE9BQUEsWUFBQSxFQUFBLFNBQUEsY0FBQSxFQUFBLGNBQUEsRUFBQSxPQUFBLE9BQUEsS0FBQSxXQUFBLEtBQUEsWUFBQSxFQUFBLFVBQUEsWUFBQSxpQkFBQSxPQUFBLFNBQUEsRUFBQSxhQUFBLEtBQUEsVUFBQSxJQUFBLE1BQUEsRUFBQSxRQUFBLEVBQUEsR0FBQSxFQUFBLEdBQUEsRUFBQSxJQUFBLDZCQUFBLE1BQUEsaUJBQUE7OztnUENvQkEsRUFBQSxRQUFBLHdDQUdBLFlBQ0EsU0FBQSxFQUFBLFNBRUEsS0FBQSxxQkFDQSxLQUFBLFdBQ0EsT0FDQSxjQUNBLFlBQ0EsaUJBQUEsRUFDQSxNQUFBLEtBQ0EsY0FBQSxFQUNBLFdBQUEsR0FDQSxjQUFBLElBR0EsVUFDQSxhQUFBLFdBQ0EsT0FBQSxLQUFBLFlBQUEsS0FBQSxjQUVBLE9BQUEsV0FDQSxRQUNBLEtBQUEsUUFDQSxNQUFBLEdBQ0EsTUFBQSxLQUFBLFdBQ0EsS0FBQSxXQUVBLEtBQUEsY0FDQSxNQUFBLEdBQ0EsTUFBQSxLQUFBLElBQUEsZUFDQSxLQUFBLHNCQUVBLEtBQUEscUJBQ0EsTUFBQSxHQUNBLE1BQUEsS0FBQSxJQUFBLG9CQUNBLEtBQUEsZUFJQSxTQUNBLEtBQUEsV0FBQSxHQUFBLEdBQUEsSUFBQSxRQUFBLEVBQUEsRUFBQSxTQUFBLEVBQUEsUUFBQSxLQUFBLFFBQUEsS0FBQSxHQUFBLEVBQUEsT0FBQSxHQUFBLFFBQUEsS0FBQSxTQUFBLEdBQUEsT0FBQSxPQUFBLEVBQUEsS0FBQSxFQUFBLE1BQUEsSUFBQSxHQUFBLE1BQ0EsR0FBQSxFQUVBLEVBQUEsY0FBQSxFQUhBLEVBQUEsT0FBQSxTQUFBLEVBQUEsS0FBQSxnQkFNQSxNQUFBLEVBQUEsV0FDQSxZQUFBLEVBQUEsU0FBQSxZQUNBLG1CQUFBLEVBQUEsU0FBQSxxQkFIQSxLQUFBLFNBQUEsR0FNQSxFQUFBLGNBQUEsRUFHQSxNQUFBLEVBQUEsT0FDQSxFQUFBLFdBQUEsRUFBQSxPQUFBLE9BRUEsRUFBQSxPQUFBLE9BQUEsUUFDQSxFQUFBLGNBQUEsSUFJQSxNQUFBLEVBQUEsT0FDQSxFQUFBLGlCQUFBLEtBdkJBLEtBQUEsR0FBQSxJQUFBLE1BQUEsTUFBQSxHQUFBLFNBQUEsRUFBQSxVQTRCQSxRQUFBLFdBQ0EsS0FBQSxXQUFBLEtBQUEsT0FBQSxNQUFBLCtVQTNGQSxpQkFBQSxPQUFBLFdBQUEsR0FBQSxHQUFBLEtBQUEsRUFBQSxFQUFBLGVBQUEsRUFBQSxFQUFBLE1BQUEsSUFBQSxDQUFBLE9BQUEsR0FBQSxPQUFBLEVBQUEsYUFBQSxFQUFBLEtBQUEsVUFBQSxVQUFBLEVBQUEsR0FBQSxFQUFBLElBQUEsOENBQUEsRUFBQSxPQUFBLEVBQUEsZ0JBQUEsRUFBQSxPQUFBLEVBQUEsS0FBQSxVQUFBLFVBQUEsRUFBQSxHQUFBLEVBQUEsSUFBQSxtREFBQSxFQUFBLE9BQUEsRUFBQSxVQUFBLE9BQUEsT0FBQSxFQUFBLE9BQUEsWUFBQSxFQUFBLFNBQUEsY0FBQSxFQUFBLGNBQUEsRUFBQSxPQUFBLE9BQUEsS0FBQSxXQUFBLEtBQUEsWUFBQSxFQUFBLFVBQUEsWUFBQSxpQkFBQSxPQUFBLFNBQUEsRUFBQSxhQUFBLEtBQUEsVUFBQSxJQUFBLE1BQUEsRUFBQSxRQUFBLEVBQUEsR0FBQSxFQUFBLEdBQUEsRUFBQSxJQUFBLDJCQUFBLFFBQUEsaUJBQUE7OztpR0NhQSxLQUFBLG1CQUNBLEtBQUEsV0FDQSxVQUdBLFlBRUEsV0FFQSxRQUFBLFdBQ0EsS0FBQSxPQUFBLE9BQUEsZ0JBQ0EsU0FBQSxHQUNBLE1BQUEsR0FDQSxZQUFBLEdBQ0EsZUFBQSx3VUEzQkEsaUJBQUEsT0FBQSxXQUFBLEdBQUEsR0FBQSxLQUFBLEVBQUEsRUFBQSxlQUFBLEVBQUEsRUFBQSxNQUFBLElBQUEsQ0FBQSxPQUFBLEdBQUEsc0JBQUEsRUFBQSxPQUFBLFlBQUEsd0JBQUEsT0FBQSxLQUFBLFdBQUEsS0FBQSxZQUFBLEVBQUEsZUFBQSxZQUFBLGdCQUFBLE9BQUEsSUFBQSxLQUFBLHNCQUFBLEVBQUEsR0FBQSxFQUFBLEdBQUEsRUFBQSxJQUFBLHNCQUFBLEVBQUEsTUFBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLGVBQUEsWUFBQSxnQkFBQSxPQUFBLElBQUEsS0FBQSxtQkFBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsSUFBQSwrQkFBQSxHQUFBLEVBQUEsR0FBQSxLQUFBLEVBQUEsZ0JBQUEsSUFBQSxpQkFBQTs7O2lHQytEQSxLQUFBLDJCQUNBLEtBQUEsV0FDQSxPQUNBLHVCQUFBLE9BR0EsVUFDQSxxQkFBQSxXQUFBLEdBQUEsR0FBQSxLQUNBLEVBQUEsS0FBQSxPQUFBLE1BQUEsc0JBQUEsT0FBQSxTQUFBLEdBQUEsTUFBQSxHQUFBLE9BQUEsRUFBQSx5QkFBQSxFQUVBLElBQUEsSUFDQSxFQUFBLGVBQUEsS0FBQSxFQUFBLFdBQUEsS0FBQSxJQUFBLG1CQUFBLEtBQUEsSUFBQSxrQkFDQSxFQUFBLGFBQUEsV0FBQSxDQUNBLEdBQUEsR0FBQSxHQUFBLE1BQUEsRUFBQSxhQUFBLE1BQ0EsRUFBQSxFQUFBLGNBQ0EsRUFBQSxFQUFBLFdBQUEsQ0FDQSxHQUFBLEVBQUEsV0FDQSxFQUFBLEdBQUEsRUFBQSxPQUFBLElBQUEsRUFBQSxDQUNBLElBQUEsR0FBQSxFQUFBLFNBQ0EsR0FBQSxFQUFBLFdBQ0EsRUFBQSxHQUFBLEVBQUEsT0FBQSxJQUFBLEVBQUEsRUFDQSxFQUFBLHNCQUFBLEVBQUEsSUFBQSxFQUFBLElBQUEsRUFJQSxNQUFBLEtBR0EsU0FDQSxNQUFBLFNBQUEsR0FDQSxFQUFBLGlCQUNBLE9BQUEsVUFHQSxRQUFBLFdBRUEsS0FBQSx1QkFBQSxLQUFBLE9BQUEsT0FBQSxHQUVBLEtBQUEsT0FBQSxTQUFBLDBCQUFBLEtBQUEsd0JBRUEsS0FBQSxPQUFBLE9BQUEsZ0JBQ0EsU0FBQSxHQUNBLE1BQUEsS0FBQSxJQUFBLG1EQUNBLFlBQUEsR0FDQSxlQUFBLEdBR0EsSUFBQSxHQUFBLFNBQUEsdUJBQUEsZUFDQSxHQUFBLFNBQ0EsRUFBQSxFQUFBLEdBQ0EsRUFBQSxVQUFBLElBQUEscVZBaEhBLGlCQUFBLE9BQUEsV0FBQSxHQUFBLEdBQUEsS0FBQSxFQUFBLEVBQUEsZUFBQSxFQUFBLEVBQUEsTUFBQSxJQUFBLENBQUEsT0FBQSxHQUFBLHFCQUFBLEVBQUEsdUJBQUEsRUFBQSxNQUFBLEVBQUEsR0FBQSxTQUFBLEVBQUEsR0FBQSxFQUFBLElBQUEseUJBQUEsVUFBQSxFQUFBLFFBQUEsYUFBQSxZQUFBLE9BQUEsY0FBQSxNQUFBLE1BQUEsd0JBQUEsRUFBQSxHQUFBLFlBQUEsRUFBQSxHQUFBLEVBQUEscUJBQUEsTUFBQSxlQUFBLEVBQUEsR0FBQSxLQUFBLEVBQUEsTUFBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsSUFBQSwwQkFBQSxFQUFBLE1BQUEsRUFBQSxHQUFBLEtBQUEsRUFBQSxLQUFBLEVBQUEsVUFBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsSUFBQSxvQkFBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLEdBQUEsRUFBQSxxQkFBQSxlQUFBLEVBQUEsTUFBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLFVBQUEsRUFBQSxHQUFBLEVBQUEsR0FBQSxFQUFBLElBQUEsb0JBQUEsRUFBQSxHQUFBLEtBQUEsRUFBQSxHQUFBLEVBQUEscUJBQUEsVUFBQSxFQUFBLE1BQUEsRUFBQSxHQUFBLEtBQUEsRUFBQSxVQUFBLEVBQUEsR0FBQSxFQUFBLEdBQUEsRUFBQSxJQUFBLHdCQUFBLEVBQUEsR0FBQSxLQUFBLEVBQUEsR0FBQSxFQUFBLHFCQUFBLHdCQUFBLEVBQUEsUUFBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLE1BQUEsRUFBQSxHQUFBLEVBQUEsR0FBQSxFQUFBLElBQUEsMkJBQUEsRUFBQSxHQUFBLEtBQUEsRUFBQSxNQUFBLEVBQUEsR0FBQSxLQUFBLEVBQUEsS0FBQSxFQUFBLFVBQUEsRUFBQSxHQUFBLEVBQUEsR0FBQSxFQUFBLElBQUEsaUJBQUEsRUFBQSxHQUFBLEtBQUEsRUFBQSxHQUFBLEVBQUEscUJBQUEsb0JBQUEsRUFBQSxNQUFBLEVBQUEsR0FBQSxLQUFBLEVBQUEsVUFBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsSUFBQSxnQkFBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLEdBQUEsRUFBQSxxQkFBQSxtQkFBQSxFQUFBLE1BQUEsRUFBQSxHQUFBLEtBQUEsRUFBQSxVQUFBLEVBQUEsR0FBQSxFQUFBLEdBQUEsRUFBQSxJQUFBLGFBQUEsRUFBQSxHQUFBLEtBQUEsRUFBQSxHQUFBLEVBQUEscUJBQUEsZ0JBQUEsRUFBQSxNQUFBLEVBQUEsR0FBQSxLQUFBLEVBQUEscUJBQUEsY0FBQSxFQUFBLFFBQUEsRUFBQSxVQUFBLEVBQUEsR0FBQSxFQUFBLEdBQUEsRUFBQSxJQUFBLGFBQUEsRUFBQSxHQUFBLEtBQUEsRUFBQSxHQUFBLEVBQUEscUJBQUEsZ0JBQUEsRUFBQSxRQUFBLEVBQUEsS0FBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLHFCQUFBLGVBQUEsRUFBQSxRQUFBLEVBQUEsVUFBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsSUFBQSw4QkFBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLEdBQUEsRUFBQSxxQkFBQSxpQkFBQSxFQUFBLFFBQUEsRUFBQSxLQUFBLEVBQUEsR0FBQSxLQUFBLEVBQUEscUJBQUEsc0JBQUEsRUFBQSxRQUFBLEVBQUEsVUFBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsSUFBQSxxQkFBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLEdBQUEsRUFBQSxxQkFBQSx3QkFBQSxFQUFBLFFBQUEsRUFBQSxPQUFBLEVBQUEsR0FBQSxLQUFBLEVBQUEsTUFBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsSUFBQSx5QkFBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLE1BQUEsRUFBQSxHQUFBLEtBQUEsRUFBQSxLQUFBLEVBQUEsVUFBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsSUFBQSxpQkFBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLEdBQUEsRUFBQSxxQkFBQSxrQkFBQSxFQUFBLE1BQUEsRUFBQSxHQUFBLEtBQUEsRUFBQSxVQUFBLEVBQUEsR0FBQSxFQUFBLEdBQUEsRUFBQSxJQUFBLGdCQUFBLEVBQUEsR0FBQSxLQUFBLEVBQUEsR0FBQSxFQUFBLHFCQUFBLGlCQUFBLEVBQUEsTUFBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLFVBQUEsRUFBQSxHQUFBLEVBQUEsR0FBQSxFQUFBLElBQUEsYUFBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLEdBQUEsRUFBQSxxQkFBQSxjQUFBLEVBQUEsTUFBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLFVBQUEsRUFBQSxHQUFBLEVBQUEsR0FBQSxFQUFBLElBQUEsYUFBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLEdBQUEsRUFBQSxxQkFBQSxjQUFBLEVBQUEsTUFBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLHFCQUFBLGlCQUFBLEVBQUEsUUFBQSxFQUFBLFVBQUEsRUFBQSxHQUFBLEVBQUEsR0FBQSxFQUFBLElBQUEsa0JBQUEsRUFBQSxHQUFBLEtBQUEsRUFBQSxHQUFBLEVBQUEscUJBQUEsbUJBQUEsRUFBQSxRQUFBLEVBQUEsS0FBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLHFCQUFBLG9CQUFBLEVBQUEsUUFBQSxFQUFBLFVBQUEsRUFBQSxHQUFBLEVBQUEsR0FBQSxFQUFBLElBQUEsZUFBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLEdBQUEsRUFBQSxxQkFBQSxzQkFBQSxFQUFBLFFBQUEsRUFBQSxLQUFBLEVBQUEsR0FBQSxLQUFBLEVBQUEscUJBQUEsaUJBQUEsRUFBQSxRQUFBLEVBQUEsVUFBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsSUFBQSxrQkFBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLEdBQUEsRUFBQSxxQkFBQSxtQkFBQSxFQUFBLFFBQUEsRUFBQSxLQUFBLEVBQUEsR0FBQSxLQUFBLEVBQUEscUJBQUEsaUJBQUEsRUFBQSxRQUFBLEVBQUEsVUFBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsSUFBQSxrQkFBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLEdBQUEsRUFBQSxxQkFBQSxtQkFBQSxFQUFBLFFBQUEsRUFBQSxPQUFBLEVBQUEsR0FBQSxLQUFBLEVBQUEsTUFBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsSUFBQSxpQ0FBQSxFQUFBLE1BQUEsRUFBQSxHQUFBLEtBQUEsRUFBQSxLQUFBLEVBQUEsVUFBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsSUFBQSx1REFBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLEdBQUEsRUFBQSxJQUFBLHFCQUFBLEVBQUEsTUFBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLFVBQUEsRUFBQSxHQUFBLEVBQUEsR0FBQSxFQUFBLElBQUEsdURBQUEsRUFBQSxHQUFBLEtBQUEsRUFBQSxHQUFBLEVBQUEsSUFBQSxxQkFBQSxFQUFBLE1BQUEsRUFBQSxHQUFBLEtBQUEsRUFBQSxVQUFBLEVBQUEsR0FBQSxFQUFBLEdBQUEsRUFBQSxJQUFBLHVEQUFBLEVBQUEsR0FBQSxLQUFBLEVBQUEsR0FBQSxFQUFBLElBQUEscUJBQUEsRUFBQSxNQUFBLEVBQUEsR0FBQSxLQUFBLEVBQUEsVUFBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsSUFBQSwyREFBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLEdBQUEsRUFBQSxJQUFBLHFCQUFBLEVBQUEsUUFBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLE1BQUEsRUFBQSxHQUFBLEtBQUEsRUFBQSxLQUFBLEVBQUEsVUFBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsSUFBQSx1REFBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLEdBQUEsRUFBQSxJQUFBLHFCQUFBLEVBQUEsUUFBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLEtBQUEsRUFBQSxVQUFBLEVBQUEsR0FBQSxFQUFBLEdBQUEsRUFBQSxJQUFBLHVCQUFBLEVBQUEsR0FBQSxLQUFBLEVBQUEsR0FBQSxFQUFBLHFCQUFBLGlCQUFBLEVBQUEsUUFBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLEtBQUEsWUFBQSxpQkFBQSxFQUFBLE1BQUEsRUFBQSxLQUFBLE9BQUEsS0FBQSxLQUFBLElBQUEsTUFBQSxFQUFBLFNBQUEsRUFBQSxHQUFBLEVBQUEsR0FBQSxFQUFBLElBQUEseUJBQUEsRUFBQSxNQUFBLGlCQUFBOzs7a0lDY0EsSUFBQSxHQUFBLFFBQUEsdUJBQ0EsRUFBQSxRQUFBLDRDQUVBLEVBQUEsUUFBQSxrQ0FHQSxLQUFBLDRCQUNBLFlBQ0EsOEJBQUEsRUFBQSxRQUNBLFNBQUEsRUFBQSxTQUVBLEtBQUEsV0FDQSxPQUNBLFlBQ0EsY0FDQSxXQUFBLEdBQ0EsZUFBQSxPQUFBLGVBQUEsdUJBQUEsZUFDQSxTQUFBLE9BQUEsZUFBQSx1QkFBQSxlQUNBLFVBQUEsT0FBQSxlQUFBLHVCQUFBLGVBQ0EsWUFBQSxPQUFBLGVBQUEsdUJBQUEsaUJBR0EsVUFDQSxRQUFBLFdBQ0EsT0FDQSxZQUFBLEVBQ0EsVUFDQSxLQUFBLEtBQUEsSUFBQSwwQkFDQSxhQUFBLEtBQUEsSUFBQSxnQkFDQSxxQkFBQSxLQUFBLElBQUEsd0JBQ0EsWUFBQSxLQUFBLElBQUEsbUJBS0Esc0JBQUEsV0FDQSxNQUFBLE1BQUEsT0FBQSxNQUFBLHNCQUFBLElBQUEsU0FBQSxHQUNBLE9BQ0EsS0FBQSxFQUFBLEtBQ0EsYUFBQSxFQUFBLGFBQ0EscUJBQUEsRUFBQSxXQUFBLEVBQUEsVUFBQSxVQUNBLFlBQUEsRUFBQSxnQkFLQSxhQUFBLFdBQ0EsR0FBQSxHQUFBLEtBQ0EsRUFBQSxLQUFBLE9BQUEsTUFBQSxVQUFBLFdBQ0EsRUFBQSxLQUFBLHFCQUVBLElBQUEsRUFBQSxDQUNBLEdBQUEsR0FBQSxHQUFBLFFBQUEsRUFBQSxJQUVBLE9BQUEsR0FBQSxPQUFBLFNBQUEsR0FDQSxJQUFBLEdBQUEsR0FBQSxFQUFBLEVBQUEsRUFBQSxjQUFBLE9BQUEsRUFBQSxFQUFBLElBQUEsQ0FDQSxHQUFBLEdBQUEsRUFBQSxjQUFBLEVBRUEsSUFBQSxFQUFBLEtBQUEsRUFBQSxJQUNBLE9BQUEsRUFHQSxPQUFBLElBR0EsTUFBQSxLQUdBLFNBQ0Esd0JBQUEsV0FDQSxLQUFBLE1BQUEsNkJBQUEsU0FHQSxRQUFBLFdBQ0EsS0FBQSxPQUFBLFNBQUEsNEJBQUEsS0FBQSxZQUVBLEVBQUEsRUFBQSxTQUFBLFlBQUEsU0FHQSxLQUFBLE9BQUEsT0FBQSxnQkFDQSxTQUFBLEdBQ0EsTUFBQSxLQUFBLElBQUEsbURBQ0EsWUFBQSxHQUNBLGVBQUEsd1VBbEdBLGlCQUFBLE9BQUEsV0FBQSxHQUFBLEdBQUEsS0FBQSxFQUFBLEVBQUEsZUFBQSxFQUFBLEVBQUEsTUFBQSxJQUFBLENBQUEsT0FBQSxHQUFBLHVCQUFBLEVBQUEsT0FBQSxZQUFBLGdCQUFBLEVBQUEsVUFBQSxZQUFBLGlCQUFBLElBQUEsTUFBQSxFQUFBLDJCQUFBLEVBQUEsR0FBQSxFQUFBLEdBQUEsRUFBQSxJQUFBLGlDQUFBLEVBQUEsTUFBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLGtCQUFBLE9BQUEsUUFBQSxFQUFBLFFBQUEsS0FBQSxFQUFBLGFBQUEsUUFBQSxFQUFBLFNBQUEsWUFBQSxFQUFBLEtBQUEsSUFBQSxPQUFBLEdBQUEsU0FBQSxHQUFBLE1BQUEsR0FBQSxlQUFBLE9BQUEsSUFBQSxLQUFBLHdCQUFBLFFBQUEsR0FBQSxFQUFBLElBQUEsVUFBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsSUFBQSxlQUFBLEVBQUEsR0FBQSxLQUFBLEVBQUEsK0JBQUEsSUFBQSwrQkFBQSxPQUFBLGFBQUEsU0FBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLE9BQUEsWUFBQSxnQkFBQSxF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LEVBQUksT0FBTyxPQUNaLEVBQVEsT0FBTyxXQUFZLEVBQUksT0FBTyxVQUk1QyxjQXhKTyxTQXdKTyxFQUFTLEdBQ3JCLE1BQU8sS0FBSSxjQUFjLEdBQ3hCLEtBQUssU0FBQSxHQUNELEVBQUksT0FBTyxTQUNaLEVBQVEsT0FBTyxnQkFBaUIsRUFBSSxPQUFPLFlBSWpELFFBaEtPLFNBQUEsRUFnS1csR0FBUSxHQUFqQixHQUFpQixFQUFqQixNQUNQLE9BQU8sS0FBSSxRQUFRLEdBQ2xCLEtBQUssU0FBQSxHQUNELEVBQUksT0FBTyxNQUNaLEVBQU8sVUFBVyxFQUFJLE9BQU8sVUFLckMsU0FDRSxxQkFBc0IsU0FBQSxHQUNwQixNQUFPLEdBQU0sVUFBVSxJQUFJLFNBQUEsR0FDekIsT0FDRSxNQUFPLEVBQUssWUFDWixLQUFNLEVBQUssU0FJakIsZUFBZ0IsU0FBQSxHQU1kLE1BSndDLGVBQXpCLEVBQU0sS0FBSyxLQUFLLEtBQ2pCLEVBQU0sVUFBVSxPQUFPLFNBQ3ZCLEVBQU0sVUFBVSxPQUFPLFNBQUEsR0FBYSxNQUFPLEdBQVEsU0FBVyxFQUFNLEtBQUssUUFBUSxNQUlqRyxzQkFBdUIsU0FBQSxHQUtyQixPQUpnRCxlQUF6QixFQUFNLEtBQUssS0FBSyxLQUN6QixFQUFNLFVBQVUsT0FBTyxTQUN2QixFQUFNLFVBQVUsT0FBTyxTQUFBLEdBQWEsTUFBTyxHQUFRLFNBQVcsRUFBTSxLQUFLLFFBQVEsTUFFdkUsSUFBSyxTQUFBLEdBQzNCLE9BQ0UsTUFBTyxFQUFLLEdBQ1osS0FBTSxFQUFLLFdBUXJCLGVBQUEsUUFBWSxhQUFhLHVCQUVWIiwiZmlsZSI6ImdlbmVyYXRlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24oKXtmdW5jdGlvbiByKGUsbix0KXtmdW5jdGlvbiBvKGksZil7aWYoIW5baV0pe2lmKCFlW2ldKXt2YXIgYz1cImZ1bmN0aW9uXCI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlO2lmKCFmJiZjKXJldHVybiBjKGksITApO2lmKHUpcmV0dXJuIHUoaSwhMCk7dmFyIGE9bmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIitpK1wiJ1wiKTt0aHJvdyBhLmNvZGU9XCJNT0RVTEVfTk9UX0ZPVU5EXCIsYX12YXIgcD1uW2ldPXtleHBvcnRzOnt9fTtlW2ldWzBdLmNhbGwocC5leHBvcnRzLGZ1bmN0aW9uKHIpe3ZhciBuPWVbaV1bMV1bcl07cmV0dXJuIG8obnx8cil9LHAscC5leHBvcnRzLHIsZSxuLHQpfXJldHVybiBuW2ldLmV4cG9ydHN9Zm9yKHZhciB1PVwiZnVuY3Rpb25cIj09dHlwZW9mIHJlcXVpcmUmJnJlcXVpcmUsaT0wO2k8dC5sZW5ndGg7aSsrKW8odFtpXSk7cmV0dXJuIG99cmV0dXJuIHJ9KSgpIiwiKGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcblx0dHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnID8gbW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCkgOlxuXHR0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoZmFjdG9yeSkgOlxuXHQoZ2xvYmFsLkFycmF5SW50ZXJzZWN0ID0gZmFjdG9yeSgpKTtcbn0odGhpcywgKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnO1xuXG52YXIgaW50ZXJzZWN0ID0gZnVuY3Rpb24gaW50ZXJzZWN0KGZpcnN0KSB7XG4gIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCByZXN0ID0gbmV3IEFycmF5KF9sZW4gPiAxID8gX2xlbiAtIDEgOiAwKSwgX2tleSA9IDE7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICByZXN0W19rZXkgLSAxXSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgfVxuXG4gIHJldHVybiByZXN0LnJlZHVjZShmdW5jdGlvbiAoYWNjdW0sIGN1cnJlbnQpIHtcbiAgICByZXR1cm4gYWNjdW0uZmlsdGVyKGZ1bmN0aW9uICh4KSB7XG4gICAgICByZXR1cm4gY3VycmVudC5pbmRleE9mKHgpICE9PSAtMTtcbiAgICB9KTtcbiAgfSwgZmlyc3QpO1xufTtcblxucmV0dXJuIGludGVyc2VjdDtcblxufSkpKTtcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9saWIvYXhpb3MnKTsiLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcbnZhciBzZXR0bGUgPSByZXF1aXJlKCcuLy4uL2NvcmUvc2V0dGxlJyk7XG52YXIgYnVpbGRVUkwgPSByZXF1aXJlKCcuLy4uL2hlbHBlcnMvYnVpbGRVUkwnKTtcbnZhciBwYXJzZUhlYWRlcnMgPSByZXF1aXJlKCcuLy4uL2hlbHBlcnMvcGFyc2VIZWFkZXJzJyk7XG52YXIgaXNVUkxTYW1lT3JpZ2luID0gcmVxdWlyZSgnLi8uLi9oZWxwZXJzL2lzVVJMU2FtZU9yaWdpbicpO1xudmFyIGNyZWF0ZUVycm9yID0gcmVxdWlyZSgnLi4vY29yZS9jcmVhdGVFcnJvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHhockFkYXB0ZXIoY29uZmlnKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiBkaXNwYXRjaFhoclJlcXVlc3QocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgdmFyIHJlcXVlc3REYXRhID0gY29uZmlnLmRhdGE7XG4gICAgdmFyIHJlcXVlc3RIZWFkZXJzID0gY29uZmlnLmhlYWRlcnM7XG5cbiAgICBpZiAodXRpbHMuaXNGb3JtRGF0YShyZXF1ZXN0RGF0YSkpIHtcbiAgICAgIGRlbGV0ZSByZXF1ZXN0SGVhZGVyc1snQ29udGVudC1UeXBlJ107IC8vIExldCB0aGUgYnJvd3NlciBzZXQgaXRcbiAgICB9XG5cbiAgICB2YXIgcmVxdWVzdCA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuXG4gICAgLy8gSFRUUCBiYXNpYyBhdXRoZW50aWNhdGlvblxuICAgIGlmIChjb25maWcuYXV0aCkge1xuICAgICAgdmFyIHVzZXJuYW1lID0gY29uZmlnLmF1dGgudXNlcm5hbWUgfHwgJyc7XG4gICAgICB2YXIgcGFzc3dvcmQgPSBjb25maWcuYXV0aC5wYXNzd29yZCB8fCAnJztcbiAgICAgIHJlcXVlc3RIZWFkZXJzLkF1dGhvcml6YXRpb24gPSAnQmFzaWMgJyArIGJ0b2EodXNlcm5hbWUgKyAnOicgKyBwYXNzd29yZCk7XG4gICAgfVxuXG4gICAgcmVxdWVzdC5vcGVuKGNvbmZpZy5tZXRob2QudG9VcHBlckNhc2UoKSwgYnVpbGRVUkwoY29uZmlnLnVybCwgY29uZmlnLnBhcmFtcywgY29uZmlnLnBhcmFtc1NlcmlhbGl6ZXIpLCB0cnVlKTtcblxuICAgIC8vIFNldCB0aGUgcmVxdWVzdCB0aW1lb3V0IGluIE1TXG4gICAgcmVxdWVzdC50aW1lb3V0ID0gY29uZmlnLnRpbWVvdXQ7XG5cbiAgICAvLyBMaXN0ZW4gZm9yIHJlYWR5IHN0YXRlXG4gICAgcmVxdWVzdC5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbiBoYW5kbGVMb2FkKCkge1xuICAgICAgaWYgKCFyZXF1ZXN0IHx8IHJlcXVlc3QucmVhZHlTdGF0ZSAhPT0gNCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIFRoZSByZXF1ZXN0IGVycm9yZWQgb3V0IGFuZCB3ZSBkaWRuJ3QgZ2V0IGEgcmVzcG9uc2UsIHRoaXMgd2lsbCBiZVxuICAgICAgLy8gaGFuZGxlZCBieSBvbmVycm9yIGluc3RlYWRcbiAgICAgIC8vIFdpdGggb25lIGV4Y2VwdGlvbjogcmVxdWVzdCB0aGF0IHVzaW5nIGZpbGU6IHByb3RvY29sLCBtb3N0IGJyb3dzZXJzXG4gICAgICAvLyB3aWxsIHJldHVybiBzdGF0dXMgYXMgMCBldmVuIHRob3VnaCBpdCdzIGEgc3VjY2Vzc2Z1bCByZXF1ZXN0XG4gICAgICBpZiAocmVxdWVzdC5zdGF0dXMgPT09IDAgJiYgIShyZXF1ZXN0LnJlc3BvbnNlVVJMICYmIHJlcXVlc3QucmVzcG9uc2VVUkwuaW5kZXhPZignZmlsZTonKSA9PT0gMCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBQcmVwYXJlIHRoZSByZXNwb25zZVxuICAgICAgdmFyIHJlc3BvbnNlSGVhZGVycyA9ICdnZXRBbGxSZXNwb25zZUhlYWRlcnMnIGluIHJlcXVlc3QgPyBwYXJzZUhlYWRlcnMocmVxdWVzdC5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSkgOiBudWxsO1xuICAgICAgdmFyIHJlc3BvbnNlRGF0YSA9ICFjb25maWcucmVzcG9uc2VUeXBlIHx8IGNvbmZpZy5yZXNwb25zZVR5cGUgPT09ICd0ZXh0JyA/IHJlcXVlc3QucmVzcG9uc2VUZXh0IDogcmVxdWVzdC5yZXNwb25zZTtcbiAgICAgIHZhciByZXNwb25zZSA9IHtcbiAgICAgICAgZGF0YTogcmVzcG9uc2VEYXRhLFxuICAgICAgICBzdGF0dXM6IHJlcXVlc3Quc3RhdHVzLFxuICAgICAgICBzdGF0dXNUZXh0OiByZXF1ZXN0LnN0YXR1c1RleHQsXG4gICAgICAgIGhlYWRlcnM6IHJlc3BvbnNlSGVhZGVycyxcbiAgICAgICAgY29uZmlnOiBjb25maWcsXG4gICAgICAgIHJlcXVlc3Q6IHJlcXVlc3RcbiAgICAgIH07XG5cbiAgICAgIHNldHRsZShyZXNvbHZlLCByZWplY3QsIHJlc3BvbnNlKTtcblxuICAgICAgLy8gQ2xlYW4gdXAgcmVxdWVzdFxuICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgfTtcblxuICAgIC8vIEhhbmRsZSBicm93c2VyIHJlcXVlc3QgY2FuY2VsbGF0aW9uIChhcyBvcHBvc2VkIHRvIGEgbWFudWFsIGNhbmNlbGxhdGlvbilcbiAgICByZXF1ZXN0Lm9uYWJvcnQgPSBmdW5jdGlvbiBoYW5kbGVBYm9ydCgpIHtcbiAgICAgIGlmICghcmVxdWVzdCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHJlamVjdChjcmVhdGVFcnJvcignUmVxdWVzdCBhYm9ydGVkJywgY29uZmlnLCAnRUNPTk5BQk9SVEVEJywgcmVxdWVzdCkpO1xuXG4gICAgICAvLyBDbGVhbiB1cCByZXF1ZXN0XG4gICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICB9O1xuXG4gICAgLy8gSGFuZGxlIGxvdyBsZXZlbCBuZXR3b3JrIGVycm9yc1xuICAgIHJlcXVlc3Qub25lcnJvciA9IGZ1bmN0aW9uIGhhbmRsZUVycm9yKCkge1xuICAgICAgLy8gUmVhbCBlcnJvcnMgYXJlIGhpZGRlbiBmcm9tIHVzIGJ5IHRoZSBicm93c2VyXG4gICAgICAvLyBvbmVycm9yIHNob3VsZCBvbmx5IGZpcmUgaWYgaXQncyBhIG5ldHdvcmsgZXJyb3JcbiAgICAgIHJlamVjdChjcmVhdGVFcnJvcignTmV0d29yayBFcnJvcicsIGNvbmZpZywgbnVsbCwgcmVxdWVzdCkpO1xuXG4gICAgICAvLyBDbGVhbiB1cCByZXF1ZXN0XG4gICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICB9O1xuXG4gICAgLy8gSGFuZGxlIHRpbWVvdXRcbiAgICByZXF1ZXN0Lm9udGltZW91dCA9IGZ1bmN0aW9uIGhhbmRsZVRpbWVvdXQoKSB7XG4gICAgICByZWplY3QoY3JlYXRlRXJyb3IoJ3RpbWVvdXQgb2YgJyArIGNvbmZpZy50aW1lb3V0ICsgJ21zIGV4Y2VlZGVkJywgY29uZmlnLCAnRUNPTk5BQk9SVEVEJyxcbiAgICAgICAgcmVxdWVzdCkpO1xuXG4gICAgICAvLyBDbGVhbiB1cCByZXF1ZXN0XG4gICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICB9O1xuXG4gICAgLy8gQWRkIHhzcmYgaGVhZGVyXG4gICAgLy8gVGhpcyBpcyBvbmx5IGRvbmUgaWYgcnVubmluZyBpbiBhIHN0YW5kYXJkIGJyb3dzZXIgZW52aXJvbm1lbnQuXG4gICAgLy8gU3BlY2lmaWNhbGx5IG5vdCBpZiB3ZSdyZSBpbiBhIHdlYiB3b3JrZXIsIG9yIHJlYWN0LW5hdGl2ZS5cbiAgICBpZiAodXRpbHMuaXNTdGFuZGFyZEJyb3dzZXJFbnYoKSkge1xuICAgICAgdmFyIGNvb2tpZXMgPSByZXF1aXJlKCcuLy4uL2hlbHBlcnMvY29va2llcycpO1xuXG4gICAgICAvLyBBZGQgeHNyZiBoZWFkZXJcbiAgICAgIHZhciB4c3JmVmFsdWUgPSAoY29uZmlnLndpdGhDcmVkZW50aWFscyB8fCBpc1VSTFNhbWVPcmlnaW4oY29uZmlnLnVybCkpICYmIGNvbmZpZy54c3JmQ29va2llTmFtZSA/XG4gICAgICAgIGNvb2tpZXMucmVhZChjb25maWcueHNyZkNvb2tpZU5hbWUpIDpcbiAgICAgICAgdW5kZWZpbmVkO1xuXG4gICAgICBpZiAoeHNyZlZhbHVlKSB7XG4gICAgICAgIHJlcXVlc3RIZWFkZXJzW2NvbmZpZy54c3JmSGVhZGVyTmFtZV0gPSB4c3JmVmFsdWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQWRkIGhlYWRlcnMgdG8gdGhlIHJlcXVlc3RcbiAgICBpZiAoJ3NldFJlcXVlc3RIZWFkZXInIGluIHJlcXVlc3QpIHtcbiAgICAgIHV0aWxzLmZvckVhY2gocmVxdWVzdEhlYWRlcnMsIGZ1bmN0aW9uIHNldFJlcXVlc3RIZWFkZXIodmFsLCBrZXkpIHtcbiAgICAgICAgaWYgKHR5cGVvZiByZXF1ZXN0RGF0YSA9PT0gJ3VuZGVmaW5lZCcgJiYga2V5LnRvTG93ZXJDYXNlKCkgPT09ICdjb250ZW50LXR5cGUnKSB7XG4gICAgICAgICAgLy8gUmVtb3ZlIENvbnRlbnQtVHlwZSBpZiBkYXRhIGlzIHVuZGVmaW5lZFxuICAgICAgICAgIGRlbGV0ZSByZXF1ZXN0SGVhZGVyc1trZXldO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIE90aGVyd2lzZSBhZGQgaGVhZGVyIHRvIHRoZSByZXF1ZXN0XG4gICAgICAgICAgcmVxdWVzdC5zZXRSZXF1ZXN0SGVhZGVyKGtleSwgdmFsKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gQWRkIHdpdGhDcmVkZW50aWFscyB0byByZXF1ZXN0IGlmIG5lZWRlZFxuICAgIGlmIChjb25maWcud2l0aENyZWRlbnRpYWxzKSB7XG4gICAgICByZXF1ZXN0LndpdGhDcmVkZW50aWFscyA9IHRydWU7XG4gICAgfVxuXG4gICAgLy8gQWRkIHJlc3BvbnNlVHlwZSB0byByZXF1ZXN0IGlmIG5lZWRlZFxuICAgIGlmIChjb25maWcucmVzcG9uc2VUeXBlKSB7XG4gICAgICB0cnkge1xuICAgICAgICByZXF1ZXN0LnJlc3BvbnNlVHlwZSA9IGNvbmZpZy5yZXNwb25zZVR5cGU7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIC8vIEV4cGVjdGVkIERPTUV4Y2VwdGlvbiB0aHJvd24gYnkgYnJvd3NlcnMgbm90IGNvbXBhdGlibGUgWE1MSHR0cFJlcXVlc3QgTGV2ZWwgMi5cbiAgICAgICAgLy8gQnV0LCB0aGlzIGNhbiBiZSBzdXBwcmVzc2VkIGZvciAnanNvbicgdHlwZSBhcyBpdCBjYW4gYmUgcGFyc2VkIGJ5IGRlZmF1bHQgJ3RyYW5zZm9ybVJlc3BvbnNlJyBmdW5jdGlvbi5cbiAgICAgICAgaWYgKGNvbmZpZy5yZXNwb25zZVR5cGUgIT09ICdqc29uJykge1xuICAgICAgICAgIHRocm93IGU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgcHJvZ3Jlc3MgaWYgbmVlZGVkXG4gICAgaWYgKHR5cGVvZiBjb25maWcub25Eb3dubG9hZFByb2dyZXNzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXF1ZXN0LmFkZEV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgY29uZmlnLm9uRG93bmxvYWRQcm9ncmVzcyk7XG4gICAgfVxuXG4gICAgLy8gTm90IGFsbCBicm93c2VycyBzdXBwb3J0IHVwbG9hZCBldmVudHNcbiAgICBpZiAodHlwZW9mIGNvbmZpZy5vblVwbG9hZFByb2dyZXNzID09PSAnZnVuY3Rpb24nICYmIHJlcXVlc3QudXBsb2FkKSB7XG4gICAgICByZXF1ZXN0LnVwbG9hZC5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIGNvbmZpZy5vblVwbG9hZFByb2dyZXNzKTtcbiAgICB9XG5cbiAgICBpZiAoY29uZmlnLmNhbmNlbFRva2VuKSB7XG4gICAgICAvLyBIYW5kbGUgY2FuY2VsbGF0aW9uXG4gICAgICBjb25maWcuY2FuY2VsVG9rZW4ucHJvbWlzZS50aGVuKGZ1bmN0aW9uIG9uQ2FuY2VsZWQoY2FuY2VsKSB7XG4gICAgICAgIGlmICghcmVxdWVzdCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlcXVlc3QuYWJvcnQoKTtcbiAgICAgICAgcmVqZWN0KGNhbmNlbCk7XG4gICAgICAgIC8vIENsZWFuIHVwIHJlcXVlc3RcbiAgICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAocmVxdWVzdERhdGEgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmVxdWVzdERhdGEgPSBudWxsO1xuICAgIH1cblxuICAgIC8vIFNlbmQgdGhlIHJlcXVlc3RcbiAgICByZXF1ZXN0LnNlbmQocmVxdWVzdERhdGEpO1xuICB9KTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vdXRpbHMnKTtcbnZhciBiaW5kID0gcmVxdWlyZSgnLi9oZWxwZXJzL2JpbmQnKTtcbnZhciBBeGlvcyA9IHJlcXVpcmUoJy4vY29yZS9BeGlvcycpO1xudmFyIG1lcmdlQ29uZmlnID0gcmVxdWlyZSgnLi9jb3JlL21lcmdlQ29uZmlnJyk7XG52YXIgZGVmYXVsdHMgPSByZXF1aXJlKCcuL2RlZmF1bHRzJyk7XG5cbi8qKlxuICogQ3JlYXRlIGFuIGluc3RhbmNlIG9mIEF4aW9zXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGRlZmF1bHRDb25maWcgVGhlIGRlZmF1bHQgY29uZmlnIGZvciB0aGUgaW5zdGFuY2VcbiAqIEByZXR1cm4ge0F4aW9zfSBBIG5ldyBpbnN0YW5jZSBvZiBBeGlvc1xuICovXG5mdW5jdGlvbiBjcmVhdGVJbnN0YW5jZShkZWZhdWx0Q29uZmlnKSB7XG4gIHZhciBjb250ZXh0ID0gbmV3IEF4aW9zKGRlZmF1bHRDb25maWcpO1xuICB2YXIgaW5zdGFuY2UgPSBiaW5kKEF4aW9zLnByb3RvdHlwZS5yZXF1ZXN0LCBjb250ZXh0KTtcblxuICAvLyBDb3B5IGF4aW9zLnByb3RvdHlwZSB0byBpbnN0YW5jZVxuICB1dGlscy5leHRlbmQoaW5zdGFuY2UsIEF4aW9zLnByb3RvdHlwZSwgY29udGV4dCk7XG5cbiAgLy8gQ29weSBjb250ZXh0IHRvIGluc3RhbmNlXG4gIHV0aWxzLmV4dGVuZChpbnN0YW5jZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGluc3RhbmNlO1xufVxuXG4vLyBDcmVhdGUgdGhlIGRlZmF1bHQgaW5zdGFuY2UgdG8gYmUgZXhwb3J0ZWRcbnZhciBheGlvcyA9IGNyZWF0ZUluc3RhbmNlKGRlZmF1bHRzKTtcblxuLy8gRXhwb3NlIEF4aW9zIGNsYXNzIHRvIGFsbG93IGNsYXNzIGluaGVyaXRhbmNlXG5heGlvcy5BeGlvcyA9IEF4aW9zO1xuXG4vLyBGYWN0b3J5IGZvciBjcmVhdGluZyBuZXcgaW5zdGFuY2VzXG5heGlvcy5jcmVhdGUgPSBmdW5jdGlvbiBjcmVhdGUoaW5zdGFuY2VDb25maWcpIHtcbiAgcmV0dXJuIGNyZWF0ZUluc3RhbmNlKG1lcmdlQ29uZmlnKGF4aW9zLmRlZmF1bHRzLCBpbnN0YW5jZUNvbmZpZykpO1xufTtcblxuLy8gRXhwb3NlIENhbmNlbCAmIENhbmNlbFRva2VuXG5heGlvcy5DYW5jZWwgPSByZXF1aXJlKCcuL2NhbmNlbC9DYW5jZWwnKTtcbmF4aW9zLkNhbmNlbFRva2VuID0gcmVxdWlyZSgnLi9jYW5jZWwvQ2FuY2VsVG9rZW4nKTtcbmF4aW9zLmlzQ2FuY2VsID0gcmVxdWlyZSgnLi9jYW5jZWwvaXNDYW5jZWwnKTtcblxuLy8gRXhwb3NlIGFsbC9zcHJlYWRcbmF4aW9zLmFsbCA9IGZ1bmN0aW9uIGFsbChwcm9taXNlcykge1xuICByZXR1cm4gUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xufTtcbmF4aW9zLnNwcmVhZCA9IHJlcXVpcmUoJy4vaGVscGVycy9zcHJlYWQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBheGlvcztcblxuLy8gQWxsb3cgdXNlIG9mIGRlZmF1bHQgaW1wb3J0IHN5bnRheCBpbiBUeXBlU2NyaXB0XG5tb2R1bGUuZXhwb3J0cy5kZWZhdWx0ID0gYXhpb3M7XG4iLCIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogQSBgQ2FuY2VsYCBpcyBhbiBvYmplY3QgdGhhdCBpcyB0aHJvd24gd2hlbiBhbiBvcGVyYXRpb24gaXMgY2FuY2VsZWQuXG4gKlxuICogQGNsYXNzXG4gKiBAcGFyYW0ge3N0cmluZz19IG1lc3NhZ2UgVGhlIG1lc3NhZ2UuXG4gKi9cbmZ1bmN0aW9uIENhbmNlbChtZXNzYWdlKSB7XG4gIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XG59XG5cbkNhbmNlbC5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgcmV0dXJuICdDYW5jZWwnICsgKHRoaXMubWVzc2FnZSA/ICc6ICcgKyB0aGlzLm1lc3NhZ2UgOiAnJyk7XG59O1xuXG5DYW5jZWwucHJvdG90eXBlLl9fQ0FOQ0VMX18gPSB0cnVlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IENhbmNlbDtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIENhbmNlbCA9IHJlcXVpcmUoJy4vQ2FuY2VsJyk7XG5cbi8qKlxuICogQSBgQ2FuY2VsVG9rZW5gIGlzIGFuIG9iamVjdCB0aGF0IGNhbiBiZSB1c2VkIHRvIHJlcXVlc3QgY2FuY2VsbGF0aW9uIG9mIGFuIG9wZXJhdGlvbi5cbiAqXG4gKiBAY2xhc3NcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGV4ZWN1dG9yIFRoZSBleGVjdXRvciBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gQ2FuY2VsVG9rZW4oZXhlY3V0b3IpIHtcbiAgaWYgKHR5cGVvZiBleGVjdXRvciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2V4ZWN1dG9yIG11c3QgYmUgYSBmdW5jdGlvbi4nKTtcbiAgfVxuXG4gIHZhciByZXNvbHZlUHJvbWlzZTtcbiAgdGhpcy5wcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24gcHJvbWlzZUV4ZWN1dG9yKHJlc29sdmUpIHtcbiAgICByZXNvbHZlUHJvbWlzZSA9IHJlc29sdmU7XG4gIH0pO1xuXG4gIHZhciB0b2tlbiA9IHRoaXM7XG4gIGV4ZWN1dG9yKGZ1bmN0aW9uIGNhbmNlbChtZXNzYWdlKSB7XG4gICAgaWYgKHRva2VuLnJlYXNvbikge1xuICAgICAgLy8gQ2FuY2VsbGF0aW9uIGhhcyBhbHJlYWR5IGJlZW4gcmVxdWVzdGVkXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdG9rZW4ucmVhc29uID0gbmV3IENhbmNlbChtZXNzYWdlKTtcbiAgICByZXNvbHZlUHJvbWlzZSh0b2tlbi5yZWFzb24pO1xuICB9KTtcbn1cblxuLyoqXG4gKiBUaHJvd3MgYSBgQ2FuY2VsYCBpZiBjYW5jZWxsYXRpb24gaGFzIGJlZW4gcmVxdWVzdGVkLlxuICovXG5DYW5jZWxUb2tlbi5wcm90b3R5cGUudGhyb3dJZlJlcXVlc3RlZCA9IGZ1bmN0aW9uIHRocm93SWZSZXF1ZXN0ZWQoKSB7XG4gIGlmICh0aGlzLnJlYXNvbikge1xuICAgIHRocm93IHRoaXMucmVhc29uO1xuICB9XG59O1xuXG4vKipcbiAqIFJldHVybnMgYW4gb2JqZWN0IHRoYXQgY29udGFpbnMgYSBuZXcgYENhbmNlbFRva2VuYCBhbmQgYSBmdW5jdGlvbiB0aGF0LCB3aGVuIGNhbGxlZCxcbiAqIGNhbmNlbHMgdGhlIGBDYW5jZWxUb2tlbmAuXG4gKi9cbkNhbmNlbFRva2VuLnNvdXJjZSA9IGZ1bmN0aW9uIHNvdXJjZSgpIHtcbiAgdmFyIGNhbmNlbDtcbiAgdmFyIHRva2VuID0gbmV3IENhbmNlbFRva2VuKGZ1bmN0aW9uIGV4ZWN1dG9yKGMpIHtcbiAgICBjYW5jZWwgPSBjO1xuICB9KTtcbiAgcmV0dXJuIHtcbiAgICB0b2tlbjogdG9rZW4sXG4gICAgY2FuY2VsOiBjYW5jZWxcbiAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gQ2FuY2VsVG9rZW47XG4iLCIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNDYW5jZWwodmFsdWUpIHtcbiAgcmV0dXJuICEhKHZhbHVlICYmIHZhbHVlLl9fQ0FOQ0VMX18pO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi8uLi91dGlscycpO1xudmFyIGJ1aWxkVVJMID0gcmVxdWlyZSgnLi4vaGVscGVycy9idWlsZFVSTCcpO1xudmFyIEludGVyY2VwdG9yTWFuYWdlciA9IHJlcXVpcmUoJy4vSW50ZXJjZXB0b3JNYW5hZ2VyJyk7XG52YXIgZGlzcGF0Y2hSZXF1ZXN0ID0gcmVxdWlyZSgnLi9kaXNwYXRjaFJlcXVlc3QnKTtcbnZhciBtZXJnZUNvbmZpZyA9IHJlcXVpcmUoJy4vbWVyZ2VDb25maWcnKTtcblxuLyoqXG4gKiBDcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgQXhpb3NcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gaW5zdGFuY2VDb25maWcgVGhlIGRlZmF1bHQgY29uZmlnIGZvciB0aGUgaW5zdGFuY2VcbiAqL1xuZnVuY3Rpb24gQXhpb3MoaW5zdGFuY2VDb25maWcpIHtcbiAgdGhpcy5kZWZhdWx0cyA9IGluc3RhbmNlQ29uZmlnO1xuICB0aGlzLmludGVyY2VwdG9ycyA9IHtcbiAgICByZXF1ZXN0OiBuZXcgSW50ZXJjZXB0b3JNYW5hZ2VyKCksXG4gICAgcmVzcG9uc2U6IG5ldyBJbnRlcmNlcHRvck1hbmFnZXIoKVxuICB9O1xufVxuXG4vKipcbiAqIERpc3BhdGNoIGEgcmVxdWVzdFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcgVGhlIGNvbmZpZyBzcGVjaWZpYyBmb3IgdGhpcyByZXF1ZXN0IChtZXJnZWQgd2l0aCB0aGlzLmRlZmF1bHRzKVxuICovXG5BeGlvcy5wcm90b3R5cGUucmVxdWVzdCA9IGZ1bmN0aW9uIHJlcXVlc3QoY29uZmlnKSB7XG4gIC8qZXNsaW50IG5vLXBhcmFtLXJlYXNzaWduOjAqL1xuICAvLyBBbGxvdyBmb3IgYXhpb3MoJ2V4YW1wbGUvdXJsJ1ssIGNvbmZpZ10pIGEgbGEgZmV0Y2ggQVBJXG4gIGlmICh0eXBlb2YgY29uZmlnID09PSAnc3RyaW5nJykge1xuICAgIGNvbmZpZyA9IGFyZ3VtZW50c1sxXSB8fCB7fTtcbiAgICBjb25maWcudXJsID0gYXJndW1lbnRzWzBdO1xuICB9IGVsc2Uge1xuICAgIGNvbmZpZyA9IGNvbmZpZyB8fCB7fTtcbiAgfVxuXG4gIGNvbmZpZyA9IG1lcmdlQ29uZmlnKHRoaXMuZGVmYXVsdHMsIGNvbmZpZyk7XG4gIGNvbmZpZy5tZXRob2QgPSBjb25maWcubWV0aG9kID8gY29uZmlnLm1ldGhvZC50b0xvd2VyQ2FzZSgpIDogJ2dldCc7XG5cbiAgLy8gSG9vayB1cCBpbnRlcmNlcHRvcnMgbWlkZGxld2FyZVxuICB2YXIgY2hhaW4gPSBbZGlzcGF0Y2hSZXF1ZXN0LCB1bmRlZmluZWRdO1xuICB2YXIgcHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZShjb25maWcpO1xuXG4gIHRoaXMuaW50ZXJjZXB0b3JzLnJlcXVlc3QuZm9yRWFjaChmdW5jdGlvbiB1bnNoaWZ0UmVxdWVzdEludGVyY2VwdG9ycyhpbnRlcmNlcHRvcikge1xuICAgIGNoYWluLnVuc2hpZnQoaW50ZXJjZXB0b3IuZnVsZmlsbGVkLCBpbnRlcmNlcHRvci5yZWplY3RlZCk7XG4gIH0pO1xuXG4gIHRoaXMuaW50ZXJjZXB0b3JzLnJlc3BvbnNlLmZvckVhY2goZnVuY3Rpb24gcHVzaFJlc3BvbnNlSW50ZXJjZXB0b3JzKGludGVyY2VwdG9yKSB7XG4gICAgY2hhaW4ucHVzaChpbnRlcmNlcHRvci5mdWxmaWxsZWQsIGludGVyY2VwdG9yLnJlamVjdGVkKTtcbiAgfSk7XG5cbiAgd2hpbGUgKGNoYWluLmxlbmd0aCkge1xuICAgIHByb21pc2UgPSBwcm9taXNlLnRoZW4oY2hhaW4uc2hpZnQoKSwgY2hhaW4uc2hpZnQoKSk7XG4gIH1cblxuICByZXR1cm4gcHJvbWlzZTtcbn07XG5cbkF4aW9zLnByb3RvdHlwZS5nZXRVcmkgPSBmdW5jdGlvbiBnZXRVcmkoY29uZmlnKSB7XG4gIGNvbmZpZyA9IG1lcmdlQ29uZmlnKHRoaXMuZGVmYXVsdHMsIGNvbmZpZyk7XG4gIHJldHVybiBidWlsZFVSTChjb25maWcudXJsLCBjb25maWcucGFyYW1zLCBjb25maWcucGFyYW1zU2VyaWFsaXplcikucmVwbGFjZSgvXlxcPy8sICcnKTtcbn07XG5cbi8vIFByb3ZpZGUgYWxpYXNlcyBmb3Igc3VwcG9ydGVkIHJlcXVlc3QgbWV0aG9kc1xudXRpbHMuZm9yRWFjaChbJ2RlbGV0ZScsICdnZXQnLCAnaGVhZCcsICdvcHRpb25zJ10sIGZ1bmN0aW9uIGZvckVhY2hNZXRob2ROb0RhdGEobWV0aG9kKSB7XG4gIC8qZXNsaW50IGZ1bmMtbmFtZXM6MCovXG4gIEF4aW9zLnByb3RvdHlwZVttZXRob2RdID0gZnVuY3Rpb24odXJsLCBjb25maWcpIHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KHV0aWxzLm1lcmdlKGNvbmZpZyB8fCB7fSwge1xuICAgICAgbWV0aG9kOiBtZXRob2QsXG4gICAgICB1cmw6IHVybFxuICAgIH0pKTtcbiAgfTtcbn0pO1xuXG51dGlscy5mb3JFYWNoKFsncG9zdCcsICdwdXQnLCAncGF0Y2gnXSwgZnVuY3Rpb24gZm9yRWFjaE1ldGhvZFdpdGhEYXRhKG1ldGhvZCkge1xuICAvKmVzbGludCBmdW5jLW5hbWVzOjAqL1xuICBBeGlvcy5wcm90b3R5cGVbbWV0aG9kXSA9IGZ1bmN0aW9uKHVybCwgZGF0YSwgY29uZmlnKSB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdCh1dGlscy5tZXJnZShjb25maWcgfHwge30sIHtcbiAgICAgIG1ldGhvZDogbWV0aG9kLFxuICAgICAgdXJsOiB1cmwsXG4gICAgICBkYXRhOiBkYXRhXG4gICAgfSkpO1xuICB9O1xufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gQXhpb3M7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcblxuZnVuY3Rpb24gSW50ZXJjZXB0b3JNYW5hZ2VyKCkge1xuICB0aGlzLmhhbmRsZXJzID0gW107XG59XG5cbi8qKlxuICogQWRkIGEgbmV3IGludGVyY2VwdG9yIHRvIHRoZSBzdGFja1xuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bGZpbGxlZCBUaGUgZnVuY3Rpb24gdG8gaGFuZGxlIGB0aGVuYCBmb3IgYSBgUHJvbWlzZWBcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHJlamVjdGVkIFRoZSBmdW5jdGlvbiB0byBoYW5kbGUgYHJlamVjdGAgZm9yIGEgYFByb21pc2VgXG4gKlxuICogQHJldHVybiB7TnVtYmVyfSBBbiBJRCB1c2VkIHRvIHJlbW92ZSBpbnRlcmNlcHRvciBsYXRlclxuICovXG5JbnRlcmNlcHRvck1hbmFnZXIucHJvdG90eXBlLnVzZSA9IGZ1bmN0aW9uIHVzZShmdWxmaWxsZWQsIHJlamVjdGVkKSB7XG4gIHRoaXMuaGFuZGxlcnMucHVzaCh7XG4gICAgZnVsZmlsbGVkOiBmdWxmaWxsZWQsXG4gICAgcmVqZWN0ZWQ6IHJlamVjdGVkXG4gIH0pO1xuICByZXR1cm4gdGhpcy5oYW5kbGVycy5sZW5ndGggLSAxO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgYW4gaW50ZXJjZXB0b3IgZnJvbSB0aGUgc3RhY2tcbiAqXG4gKiBAcGFyYW0ge051bWJlcn0gaWQgVGhlIElEIHRoYXQgd2FzIHJldHVybmVkIGJ5IGB1c2VgXG4gKi9cbkludGVyY2VwdG9yTWFuYWdlci5wcm90b3R5cGUuZWplY3QgPSBmdW5jdGlvbiBlamVjdChpZCkge1xuICBpZiAodGhpcy5oYW5kbGVyc1tpZF0pIHtcbiAgICB0aGlzLmhhbmRsZXJzW2lkXSA9IG51bGw7XG4gIH1cbn07XG5cbi8qKlxuICogSXRlcmF0ZSBvdmVyIGFsbCB0aGUgcmVnaXN0ZXJlZCBpbnRlcmNlcHRvcnNcbiAqXG4gKiBUaGlzIG1ldGhvZCBpcyBwYXJ0aWN1bGFybHkgdXNlZnVsIGZvciBza2lwcGluZyBvdmVyIGFueVxuICogaW50ZXJjZXB0b3JzIHRoYXQgbWF5IGhhdmUgYmVjb21lIGBudWxsYCBjYWxsaW5nIGBlamVjdGAuXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gVGhlIGZ1bmN0aW9uIHRvIGNhbGwgZm9yIGVhY2ggaW50ZXJjZXB0b3JcbiAqL1xuSW50ZXJjZXB0b3JNYW5hZ2VyLnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24gZm9yRWFjaChmbikge1xuICB1dGlscy5mb3JFYWNoKHRoaXMuaGFuZGxlcnMsIGZ1bmN0aW9uIGZvckVhY2hIYW5kbGVyKGgpIHtcbiAgICBpZiAoaCAhPT0gbnVsbCkge1xuICAgICAgZm4oaCk7XG4gICAgfVxuICB9KTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gSW50ZXJjZXB0b3JNYW5hZ2VyO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgZW5oYW5jZUVycm9yID0gcmVxdWlyZSgnLi9lbmhhbmNlRXJyb3InKTtcblxuLyoqXG4gKiBDcmVhdGUgYW4gRXJyb3Igd2l0aCB0aGUgc3BlY2lmaWVkIG1lc3NhZ2UsIGNvbmZpZywgZXJyb3IgY29kZSwgcmVxdWVzdCBhbmQgcmVzcG9uc2UuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2UgVGhlIGVycm9yIG1lc3NhZ2UuXG4gKiBAcGFyYW0ge09iamVjdH0gY29uZmlnIFRoZSBjb25maWcuXG4gKiBAcGFyYW0ge3N0cmluZ30gW2NvZGVdIFRoZSBlcnJvciBjb2RlIChmb3IgZXhhbXBsZSwgJ0VDT05OQUJPUlRFRCcpLlxuICogQHBhcmFtIHtPYmplY3R9IFtyZXF1ZXN0XSBUaGUgcmVxdWVzdC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbcmVzcG9uc2VdIFRoZSByZXNwb25zZS5cbiAqIEByZXR1cm5zIHtFcnJvcn0gVGhlIGNyZWF0ZWQgZXJyb3IuXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gY3JlYXRlRXJyb3IobWVzc2FnZSwgY29uZmlnLCBjb2RlLCByZXF1ZXN0LCByZXNwb25zZSkge1xuICB2YXIgZXJyb3IgPSBuZXcgRXJyb3IobWVzc2FnZSk7XG4gIHJldHVybiBlbmhhbmNlRXJyb3IoZXJyb3IsIGNvbmZpZywgY29kZSwgcmVxdWVzdCwgcmVzcG9uc2UpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi8uLi91dGlscycpO1xudmFyIHRyYW5zZm9ybURhdGEgPSByZXF1aXJlKCcuL3RyYW5zZm9ybURhdGEnKTtcbnZhciBpc0NhbmNlbCA9IHJlcXVpcmUoJy4uL2NhbmNlbC9pc0NhbmNlbCcpO1xudmFyIGRlZmF1bHRzID0gcmVxdWlyZSgnLi4vZGVmYXVsdHMnKTtcbnZhciBpc0Fic29sdXRlVVJMID0gcmVxdWlyZSgnLi8uLi9oZWxwZXJzL2lzQWJzb2x1dGVVUkwnKTtcbnZhciBjb21iaW5lVVJMcyA9IHJlcXVpcmUoJy4vLi4vaGVscGVycy9jb21iaW5lVVJMcycpO1xuXG4vKipcbiAqIFRocm93cyBhIGBDYW5jZWxgIGlmIGNhbmNlbGxhdGlvbiBoYXMgYmVlbiByZXF1ZXN0ZWQuXG4gKi9cbmZ1bmN0aW9uIHRocm93SWZDYW5jZWxsYXRpb25SZXF1ZXN0ZWQoY29uZmlnKSB7XG4gIGlmIChjb25maWcuY2FuY2VsVG9rZW4pIHtcbiAgICBjb25maWcuY2FuY2VsVG9rZW4udGhyb3dJZlJlcXVlc3RlZCgpO1xuICB9XG59XG5cbi8qKlxuICogRGlzcGF0Y2ggYSByZXF1ZXN0IHRvIHRoZSBzZXJ2ZXIgdXNpbmcgdGhlIGNvbmZpZ3VyZWQgYWRhcHRlci5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gY29uZmlnIFRoZSBjb25maWcgdGhhdCBpcyB0byBiZSB1c2VkIGZvciB0aGUgcmVxdWVzdFxuICogQHJldHVybnMge1Byb21pc2V9IFRoZSBQcm9taXNlIHRvIGJlIGZ1bGZpbGxlZFxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGRpc3BhdGNoUmVxdWVzdChjb25maWcpIHtcbiAgdGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZChjb25maWcpO1xuXG4gIC8vIFN1cHBvcnQgYmFzZVVSTCBjb25maWdcbiAgaWYgKGNvbmZpZy5iYXNlVVJMICYmICFpc0Fic29sdXRlVVJMKGNvbmZpZy51cmwpKSB7XG4gICAgY29uZmlnLnVybCA9IGNvbWJpbmVVUkxzKGNvbmZpZy5iYXNlVVJMLCBjb25maWcudXJsKTtcbiAgfVxuXG4gIC8vIEVuc3VyZSBoZWFkZXJzIGV4aXN0XG4gIGNvbmZpZy5oZWFkZXJzID0gY29uZmlnLmhlYWRlcnMgfHwge307XG5cbiAgLy8gVHJhbnNmb3JtIHJlcXVlc3QgZGF0YVxuICBjb25maWcuZGF0YSA9IHRyYW5zZm9ybURhdGEoXG4gICAgY29uZmlnLmRhdGEsXG4gICAgY29uZmlnLmhlYWRlcnMsXG4gICAgY29uZmlnLnRyYW5zZm9ybVJlcXVlc3RcbiAgKTtcblxuICAvLyBGbGF0dGVuIGhlYWRlcnNcbiAgY29uZmlnLmhlYWRlcnMgPSB1dGlscy5tZXJnZShcbiAgICBjb25maWcuaGVhZGVycy5jb21tb24gfHwge30sXG4gICAgY29uZmlnLmhlYWRlcnNbY29uZmlnLm1ldGhvZF0gfHwge30sXG4gICAgY29uZmlnLmhlYWRlcnMgfHwge31cbiAgKTtcblxuICB1dGlscy5mb3JFYWNoKFxuICAgIFsnZGVsZXRlJywgJ2dldCcsICdoZWFkJywgJ3Bvc3QnLCAncHV0JywgJ3BhdGNoJywgJ2NvbW1vbiddLFxuICAgIGZ1bmN0aW9uIGNsZWFuSGVhZGVyQ29uZmlnKG1ldGhvZCkge1xuICAgICAgZGVsZXRlIGNvbmZpZy5oZWFkZXJzW21ldGhvZF07XG4gICAgfVxuICApO1xuXG4gIHZhciBhZGFwdGVyID0gY29uZmlnLmFkYXB0ZXIgfHwgZGVmYXVsdHMuYWRhcHRlcjtcblxuICByZXR1cm4gYWRhcHRlcihjb25maWcpLnRoZW4oZnVuY3Rpb24gb25BZGFwdGVyUmVzb2x1dGlvbihyZXNwb25zZSkge1xuICAgIHRocm93SWZDYW5jZWxsYXRpb25SZXF1ZXN0ZWQoY29uZmlnKTtcblxuICAgIC8vIFRyYW5zZm9ybSByZXNwb25zZSBkYXRhXG4gICAgcmVzcG9uc2UuZGF0YSA9IHRyYW5zZm9ybURhdGEoXG4gICAgICByZXNwb25zZS5kYXRhLFxuICAgICAgcmVzcG9uc2UuaGVhZGVycyxcbiAgICAgIGNvbmZpZy50cmFuc2Zvcm1SZXNwb25zZVxuICAgICk7XG5cbiAgICByZXR1cm4gcmVzcG9uc2U7XG4gIH0sIGZ1bmN0aW9uIG9uQWRhcHRlclJlamVjdGlvbihyZWFzb24pIHtcbiAgICBpZiAoIWlzQ2FuY2VsKHJlYXNvbikpIHtcbiAgICAgIHRocm93SWZDYW5jZWxsYXRpb25SZXF1ZXN0ZWQoY29uZmlnKTtcblxuICAgICAgLy8gVHJhbnNmb3JtIHJlc3BvbnNlIGRhdGFcbiAgICAgIGlmIChyZWFzb24gJiYgcmVhc29uLnJlc3BvbnNlKSB7XG4gICAgICAgIHJlYXNvbi5yZXNwb25zZS5kYXRhID0gdHJhbnNmb3JtRGF0YShcbiAgICAgICAgICByZWFzb24ucmVzcG9uc2UuZGF0YSxcbiAgICAgICAgICByZWFzb24ucmVzcG9uc2UuaGVhZGVycyxcbiAgICAgICAgICBjb25maWcudHJhbnNmb3JtUmVzcG9uc2VcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QocmVhc29uKTtcbiAgfSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIFVwZGF0ZSBhbiBFcnJvciB3aXRoIHRoZSBzcGVjaWZpZWQgY29uZmlnLCBlcnJvciBjb2RlLCBhbmQgcmVzcG9uc2UuXG4gKlxuICogQHBhcmFtIHtFcnJvcn0gZXJyb3IgVGhlIGVycm9yIHRvIHVwZGF0ZS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcgVGhlIGNvbmZpZy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbY29kZV0gVGhlIGVycm9yIGNvZGUgKGZvciBleGFtcGxlLCAnRUNPTk5BQk9SVEVEJykuXG4gKiBAcGFyYW0ge09iamVjdH0gW3JlcXVlc3RdIFRoZSByZXF1ZXN0LlxuICogQHBhcmFtIHtPYmplY3R9IFtyZXNwb25zZV0gVGhlIHJlc3BvbnNlLlxuICogQHJldHVybnMge0Vycm9yfSBUaGUgZXJyb3IuXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZW5oYW5jZUVycm9yKGVycm9yLCBjb25maWcsIGNvZGUsIHJlcXVlc3QsIHJlc3BvbnNlKSB7XG4gIGVycm9yLmNvbmZpZyA9IGNvbmZpZztcbiAgaWYgKGNvZGUpIHtcbiAgICBlcnJvci5jb2RlID0gY29kZTtcbiAgfVxuXG4gIGVycm9yLnJlcXVlc3QgPSByZXF1ZXN0O1xuICBlcnJvci5yZXNwb25zZSA9IHJlc3BvbnNlO1xuICBlcnJvci5pc0F4aW9zRXJyb3IgPSB0cnVlO1xuXG4gIGVycm9yLnRvSlNPTiA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB7XG4gICAgICAvLyBTdGFuZGFyZFxuICAgICAgbWVzc2FnZTogdGhpcy5tZXNzYWdlLFxuICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgLy8gTWljcm9zb2Z0XG4gICAgICBkZXNjcmlwdGlvbjogdGhpcy5kZXNjcmlwdGlvbixcbiAgICAgIG51bWJlcjogdGhpcy5udW1iZXIsXG4gICAgICAvLyBNb3ppbGxhXG4gICAgICBmaWxlTmFtZTogdGhpcy5maWxlTmFtZSxcbiAgICAgIGxpbmVOdW1iZXI6IHRoaXMubGluZU51bWJlcixcbiAgICAgIGNvbHVtbk51bWJlcjogdGhpcy5jb2x1bW5OdW1iZXIsXG4gICAgICBzdGFjazogdGhpcy5zdGFjayxcbiAgICAgIC8vIEF4aW9zXG4gICAgICBjb25maWc6IHRoaXMuY29uZmlnLFxuICAgICAgY29kZTogdGhpcy5jb2RlXG4gICAgfTtcbiAgfTtcbiAgcmV0dXJuIGVycm9yO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBDb25maWctc3BlY2lmaWMgbWVyZ2UtZnVuY3Rpb24gd2hpY2ggY3JlYXRlcyBhIG5ldyBjb25maWctb2JqZWN0XG4gKiBieSBtZXJnaW5nIHR3byBjb25maWd1cmF0aW9uIG9iamVjdHMgdG9nZXRoZXIuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZzFcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcyXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBOZXcgb2JqZWN0IHJlc3VsdGluZyBmcm9tIG1lcmdpbmcgY29uZmlnMiB0byBjb25maWcxXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gbWVyZ2VDb25maWcoY29uZmlnMSwgY29uZmlnMikge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgY29uZmlnMiA9IGNvbmZpZzIgfHwge307XG4gIHZhciBjb25maWcgPSB7fTtcblxuICB1dGlscy5mb3JFYWNoKFsndXJsJywgJ21ldGhvZCcsICdwYXJhbXMnLCAnZGF0YSddLCBmdW5jdGlvbiB2YWx1ZUZyb21Db25maWcyKHByb3ApIHtcbiAgICBpZiAodHlwZW9mIGNvbmZpZzJbcHJvcF0gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBjb25maWdbcHJvcF0gPSBjb25maWcyW3Byb3BdO1xuICAgIH1cbiAgfSk7XG5cbiAgdXRpbHMuZm9yRWFjaChbJ2hlYWRlcnMnLCAnYXV0aCcsICdwcm94eSddLCBmdW5jdGlvbiBtZXJnZURlZXBQcm9wZXJ0aWVzKHByb3ApIHtcbiAgICBpZiAodXRpbHMuaXNPYmplY3QoY29uZmlnMltwcm9wXSkpIHtcbiAgICAgIGNvbmZpZ1twcm9wXSA9IHV0aWxzLmRlZXBNZXJnZShjb25maWcxW3Byb3BdLCBjb25maWcyW3Byb3BdKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBjb25maWcyW3Byb3BdICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgY29uZmlnW3Byb3BdID0gY29uZmlnMltwcm9wXTtcbiAgICB9IGVsc2UgaWYgKHV0aWxzLmlzT2JqZWN0KGNvbmZpZzFbcHJvcF0pKSB7XG4gICAgICBjb25maWdbcHJvcF0gPSB1dGlscy5kZWVwTWVyZ2UoY29uZmlnMVtwcm9wXSk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgY29uZmlnMVtwcm9wXSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGNvbmZpZ1twcm9wXSA9IGNvbmZpZzFbcHJvcF07XG4gICAgfVxuICB9KTtcblxuICB1dGlscy5mb3JFYWNoKFtcbiAgICAnYmFzZVVSTCcsICd0cmFuc2Zvcm1SZXF1ZXN0JywgJ3RyYW5zZm9ybVJlc3BvbnNlJywgJ3BhcmFtc1NlcmlhbGl6ZXInLFxuICAgICd0aW1lb3V0JywgJ3dpdGhDcmVkZW50aWFscycsICdhZGFwdGVyJywgJ3Jlc3BvbnNlVHlwZScsICd4c3JmQ29va2llTmFtZScsXG4gICAgJ3hzcmZIZWFkZXJOYW1lJywgJ29uVXBsb2FkUHJvZ3Jlc3MnLCAnb25Eb3dubG9hZFByb2dyZXNzJywgJ21heENvbnRlbnRMZW5ndGgnLFxuICAgICd2YWxpZGF0ZVN0YXR1cycsICdtYXhSZWRpcmVjdHMnLCAnaHR0cEFnZW50JywgJ2h0dHBzQWdlbnQnLCAnY2FuY2VsVG9rZW4nLFxuICAgICdzb2NrZXRQYXRoJ1xuICBdLCBmdW5jdGlvbiBkZWZhdWx0VG9Db25maWcyKHByb3ApIHtcbiAgICBpZiAodHlwZW9mIGNvbmZpZzJbcHJvcF0gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBjb25maWdbcHJvcF0gPSBjb25maWcyW3Byb3BdO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGNvbmZpZzFbcHJvcF0gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBjb25maWdbcHJvcF0gPSBjb25maWcxW3Byb3BdO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIGNvbmZpZztcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBjcmVhdGVFcnJvciA9IHJlcXVpcmUoJy4vY3JlYXRlRXJyb3InKTtcblxuLyoqXG4gKiBSZXNvbHZlIG9yIHJlamVjdCBhIFByb21pc2UgYmFzZWQgb24gcmVzcG9uc2Ugc3RhdHVzLlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHJlc29sdmUgQSBmdW5jdGlvbiB0aGF0IHJlc29sdmVzIHRoZSBwcm9taXNlLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcmVqZWN0IEEgZnVuY3Rpb24gdGhhdCByZWplY3RzIHRoZSBwcm9taXNlLlxuICogQHBhcmFtIHtvYmplY3R9IHJlc3BvbnNlIFRoZSByZXNwb25zZS5cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCByZXNwb25zZSkge1xuICB2YXIgdmFsaWRhdGVTdGF0dXMgPSByZXNwb25zZS5jb25maWcudmFsaWRhdGVTdGF0dXM7XG4gIGlmICghdmFsaWRhdGVTdGF0dXMgfHwgdmFsaWRhdGVTdGF0dXMocmVzcG9uc2Uuc3RhdHVzKSkge1xuICAgIHJlc29sdmUocmVzcG9uc2UpO1xuICB9IGVsc2Uge1xuICAgIHJlamVjdChjcmVhdGVFcnJvcihcbiAgICAgICdSZXF1ZXN0IGZhaWxlZCB3aXRoIHN0YXR1cyBjb2RlICcgKyByZXNwb25zZS5zdGF0dXMsXG4gICAgICByZXNwb25zZS5jb25maWcsXG4gICAgICBudWxsLFxuICAgICAgcmVzcG9uc2UucmVxdWVzdCxcbiAgICAgIHJlc3BvbnNlXG4gICAgKSk7XG4gIH1cbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBUcmFuc2Zvcm0gdGhlIGRhdGEgZm9yIGEgcmVxdWVzdCBvciBhIHJlc3BvbnNlXG4gKlxuICogQHBhcmFtIHtPYmplY3R8U3RyaW5nfSBkYXRhIFRoZSBkYXRhIHRvIGJlIHRyYW5zZm9ybWVkXG4gKiBAcGFyYW0ge0FycmF5fSBoZWFkZXJzIFRoZSBoZWFkZXJzIGZvciB0aGUgcmVxdWVzdCBvciByZXNwb25zZVxuICogQHBhcmFtIHtBcnJheXxGdW5jdGlvbn0gZm5zIEEgc2luZ2xlIGZ1bmN0aW9uIG9yIEFycmF5IG9mIGZ1bmN0aW9uc1xuICogQHJldHVybnMgeyp9IFRoZSByZXN1bHRpbmcgdHJhbnNmb3JtZWQgZGF0YVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHRyYW5zZm9ybURhdGEoZGF0YSwgaGVhZGVycywgZm5zKSB7XG4gIC8qZXNsaW50IG5vLXBhcmFtLXJlYXNzaWduOjAqL1xuICB1dGlscy5mb3JFYWNoKGZucywgZnVuY3Rpb24gdHJhbnNmb3JtKGZuKSB7XG4gICAgZGF0YSA9IGZuKGRhdGEsIGhlYWRlcnMpO1xuICB9KTtcblxuICByZXR1cm4gZGF0YTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vdXRpbHMnKTtcbnZhciBub3JtYWxpemVIZWFkZXJOYW1lID0gcmVxdWlyZSgnLi9oZWxwZXJzL25vcm1hbGl6ZUhlYWRlck5hbWUnKTtcblxudmFyIERFRkFVTFRfQ09OVEVOVF9UWVBFID0ge1xuICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCdcbn07XG5cbmZ1bmN0aW9uIHNldENvbnRlbnRUeXBlSWZVbnNldChoZWFkZXJzLCB2YWx1ZSkge1xuICBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKGhlYWRlcnMpICYmIHV0aWxzLmlzVW5kZWZpbmVkKGhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddKSkge1xuICAgIGhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddID0gdmFsdWU7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0RGVmYXVsdEFkYXB0ZXIoKSB7XG4gIHZhciBhZGFwdGVyO1xuICAvLyBPbmx5IE5vZGUuSlMgaGFzIGEgcHJvY2VzcyB2YXJpYWJsZSB0aGF0IGlzIG9mIFtbQ2xhc3NdXSBwcm9jZXNzXG4gIGlmICh0eXBlb2YgcHJvY2VzcyAhPT0gJ3VuZGVmaW5lZCcgJiYgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHByb2Nlc3MpID09PSAnW29iamVjdCBwcm9jZXNzXScpIHtcbiAgICAvLyBGb3Igbm9kZSB1c2UgSFRUUCBhZGFwdGVyXG4gICAgYWRhcHRlciA9IHJlcXVpcmUoJy4vYWRhcHRlcnMvaHR0cCcpO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBYTUxIdHRwUmVxdWVzdCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAvLyBGb3IgYnJvd3NlcnMgdXNlIFhIUiBhZGFwdGVyXG4gICAgYWRhcHRlciA9IHJlcXVpcmUoJy4vYWRhcHRlcnMveGhyJyk7XG4gIH1cbiAgcmV0dXJuIGFkYXB0ZXI7XG59XG5cbnZhciBkZWZhdWx0cyA9IHtcbiAgYWRhcHRlcjogZ2V0RGVmYXVsdEFkYXB0ZXIoKSxcblxuICB0cmFuc2Zvcm1SZXF1ZXN0OiBbZnVuY3Rpb24gdHJhbnNmb3JtUmVxdWVzdChkYXRhLCBoZWFkZXJzKSB7XG4gICAgbm9ybWFsaXplSGVhZGVyTmFtZShoZWFkZXJzLCAnQWNjZXB0Jyk7XG4gICAgbm9ybWFsaXplSGVhZGVyTmFtZShoZWFkZXJzLCAnQ29udGVudC1UeXBlJyk7XG4gICAgaWYgKHV0aWxzLmlzRm9ybURhdGEoZGF0YSkgfHxcbiAgICAgIHV0aWxzLmlzQXJyYXlCdWZmZXIoZGF0YSkgfHxcbiAgICAgIHV0aWxzLmlzQnVmZmVyKGRhdGEpIHx8XG4gICAgICB1dGlscy5pc1N0cmVhbShkYXRhKSB8fFxuICAgICAgdXRpbHMuaXNGaWxlKGRhdGEpIHx8XG4gICAgICB1dGlscy5pc0Jsb2IoZGF0YSlcbiAgICApIHtcbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cbiAgICBpZiAodXRpbHMuaXNBcnJheUJ1ZmZlclZpZXcoZGF0YSkpIHtcbiAgICAgIHJldHVybiBkYXRhLmJ1ZmZlcjtcbiAgICB9XG4gICAgaWYgKHV0aWxzLmlzVVJMU2VhcmNoUGFyYW1zKGRhdGEpKSB7XG4gICAgICBzZXRDb250ZW50VHlwZUlmVW5zZXQoaGVhZGVycywgJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PXV0Zi04Jyk7XG4gICAgICByZXR1cm4gZGF0YS50b1N0cmluZygpO1xuICAgIH1cbiAgICBpZiAodXRpbHMuaXNPYmplY3QoZGF0YSkpIHtcbiAgICAgIHNldENvbnRlbnRUeXBlSWZVbnNldChoZWFkZXJzLCAnYXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04Jyk7XG4gICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoZGF0YSk7XG4gICAgfVxuICAgIHJldHVybiBkYXRhO1xuICB9XSxcblxuICB0cmFuc2Zvcm1SZXNwb25zZTogW2Z1bmN0aW9uIHRyYW5zZm9ybVJlc3BvbnNlKGRhdGEpIHtcbiAgICAvKmVzbGludCBuby1wYXJhbS1yZWFzc2lnbjowKi9cbiAgICBpZiAodHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnKSB7XG4gICAgICB0cnkge1xuICAgICAgICBkYXRhID0gSlNPTi5wYXJzZShkYXRhKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHsgLyogSWdub3JlICovIH1cbiAgICB9XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1dLFxuXG4gIC8qKlxuICAgKiBBIHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzIHRvIGFib3J0IGEgcmVxdWVzdC4gSWYgc2V0IHRvIDAgKGRlZmF1bHQpIGFcbiAgICogdGltZW91dCBpcyBub3QgY3JlYXRlZC5cbiAgICovXG4gIHRpbWVvdXQ6IDAsXG5cbiAgeHNyZkNvb2tpZU5hbWU6ICdYU1JGLVRPS0VOJyxcbiAgeHNyZkhlYWRlck5hbWU6ICdYLVhTUkYtVE9LRU4nLFxuXG4gIG1heENvbnRlbnRMZW5ndGg6IC0xLFxuXG4gIHZhbGlkYXRlU3RhdHVzOiBmdW5jdGlvbiB2YWxpZGF0ZVN0YXR1cyhzdGF0dXMpIHtcbiAgICByZXR1cm4gc3RhdHVzID49IDIwMCAmJiBzdGF0dXMgPCAzMDA7XG4gIH1cbn07XG5cbmRlZmF1bHRzLmhlYWRlcnMgPSB7XG4gIGNvbW1vbjoge1xuICAgICdBY2NlcHQnOiAnYXBwbGljYXRpb24vanNvbiwgdGV4dC9wbGFpbiwgKi8qJ1xuICB9XG59O1xuXG51dGlscy5mb3JFYWNoKFsnZGVsZXRlJywgJ2dldCcsICdoZWFkJ10sIGZ1bmN0aW9uIGZvckVhY2hNZXRob2ROb0RhdGEobWV0aG9kKSB7XG4gIGRlZmF1bHRzLmhlYWRlcnNbbWV0aG9kXSA9IHt9O1xufSk7XG5cbnV0aWxzLmZvckVhY2goWydwb3N0JywgJ3B1dCcsICdwYXRjaCddLCBmdW5jdGlvbiBmb3JFYWNoTWV0aG9kV2l0aERhdGEobWV0aG9kKSB7XG4gIGRlZmF1bHRzLmhlYWRlcnNbbWV0aG9kXSA9IHV0aWxzLm1lcmdlKERFRkFVTFRfQ09OVEVOVF9UWVBFKTtcbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGRlZmF1bHRzO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGJpbmQoZm4sIHRoaXNBcmcpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHdyYXAoKSB7XG4gICAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBhcmdzW2ldID0gYXJndW1lbnRzW2ldO1xuICAgIH1cbiAgICByZXR1cm4gZm4uYXBwbHkodGhpc0FyZywgYXJncyk7XG4gIH07XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XG5cbmZ1bmN0aW9uIGVuY29kZSh2YWwpIHtcbiAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudCh2YWwpLlxuICAgIHJlcGxhY2UoLyU0MC9naSwgJ0AnKS5cbiAgICByZXBsYWNlKC8lM0EvZ2ksICc6JykuXG4gICAgcmVwbGFjZSgvJTI0L2csICckJykuXG4gICAgcmVwbGFjZSgvJTJDL2dpLCAnLCcpLlxuICAgIHJlcGxhY2UoLyUyMC9nLCAnKycpLlxuICAgIHJlcGxhY2UoLyU1Qi9naSwgJ1snKS5cbiAgICByZXBsYWNlKC8lNUQvZ2ksICddJyk7XG59XG5cbi8qKlxuICogQnVpbGQgYSBVUkwgYnkgYXBwZW5kaW5nIHBhcmFtcyB0byB0aGUgZW5kXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHVybCBUaGUgYmFzZSBvZiB0aGUgdXJsIChlLmcuLCBodHRwOi8vd3d3Lmdvb2dsZS5jb20pXG4gKiBAcGFyYW0ge29iamVjdH0gW3BhcmFtc10gVGhlIHBhcmFtcyB0byBiZSBhcHBlbmRlZFxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGZvcm1hdHRlZCB1cmxcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBidWlsZFVSTCh1cmwsIHBhcmFtcywgcGFyYW1zU2VyaWFsaXplcikge1xuICAvKmVzbGludCBuby1wYXJhbS1yZWFzc2lnbjowKi9cbiAgaWYgKCFwYXJhbXMpIHtcbiAgICByZXR1cm4gdXJsO1xuICB9XG5cbiAgdmFyIHNlcmlhbGl6ZWRQYXJhbXM7XG4gIGlmIChwYXJhbXNTZXJpYWxpemVyKSB7XG4gICAgc2VyaWFsaXplZFBhcmFtcyA9IHBhcmFtc1NlcmlhbGl6ZXIocGFyYW1zKTtcbiAgfSBlbHNlIGlmICh1dGlscy5pc1VSTFNlYXJjaFBhcmFtcyhwYXJhbXMpKSB7XG4gICAgc2VyaWFsaXplZFBhcmFtcyA9IHBhcmFtcy50b1N0cmluZygpO1xuICB9IGVsc2Uge1xuICAgIHZhciBwYXJ0cyA9IFtdO1xuXG4gICAgdXRpbHMuZm9yRWFjaChwYXJhbXMsIGZ1bmN0aW9uIHNlcmlhbGl6ZSh2YWwsIGtleSkge1xuICAgICAgaWYgKHZhbCA9PT0gbnVsbCB8fCB0eXBlb2YgdmFsID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICh1dGlscy5pc0FycmF5KHZhbCkpIHtcbiAgICAgICAga2V5ID0ga2V5ICsgJ1tdJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhbCA9IFt2YWxdO1xuICAgICAgfVxuXG4gICAgICB1dGlscy5mb3JFYWNoKHZhbCwgZnVuY3Rpb24gcGFyc2VWYWx1ZSh2KSB7XG4gICAgICAgIGlmICh1dGlscy5pc0RhdGUodikpIHtcbiAgICAgICAgICB2ID0gdi50b0lTT1N0cmluZygpO1xuICAgICAgICB9IGVsc2UgaWYgKHV0aWxzLmlzT2JqZWN0KHYpKSB7XG4gICAgICAgICAgdiA9IEpTT04uc3RyaW5naWZ5KHYpO1xuICAgICAgICB9XG4gICAgICAgIHBhcnRzLnB1c2goZW5jb2RlKGtleSkgKyAnPScgKyBlbmNvZGUodikpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBzZXJpYWxpemVkUGFyYW1zID0gcGFydHMuam9pbignJicpO1xuICB9XG5cbiAgaWYgKHNlcmlhbGl6ZWRQYXJhbXMpIHtcbiAgICB2YXIgaGFzaG1hcmtJbmRleCA9IHVybC5pbmRleE9mKCcjJyk7XG4gICAgaWYgKGhhc2htYXJrSW5kZXggIT09IC0xKSB7XG4gICAgICB1cmwgPSB1cmwuc2xpY2UoMCwgaGFzaG1hcmtJbmRleCk7XG4gICAgfVxuXG4gICAgdXJsICs9ICh1cmwuaW5kZXhPZignPycpID09PSAtMSA/ICc/JyA6ICcmJykgKyBzZXJpYWxpemVkUGFyYW1zO1xuICB9XG5cbiAgcmV0dXJuIHVybDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBVUkwgYnkgY29tYmluaW5nIHRoZSBzcGVjaWZpZWQgVVJMc1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBiYXNlVVJMIFRoZSBiYXNlIFVSTFxuICogQHBhcmFtIHtzdHJpbmd9IHJlbGF0aXZlVVJMIFRoZSByZWxhdGl2ZSBVUkxcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBjb21iaW5lZCBVUkxcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBjb21iaW5lVVJMcyhiYXNlVVJMLCByZWxhdGl2ZVVSTCkge1xuICByZXR1cm4gcmVsYXRpdmVVUkxcbiAgICA/IGJhc2VVUkwucmVwbGFjZSgvXFwvKyQvLCAnJykgKyAnLycgKyByZWxhdGl2ZVVSTC5yZXBsYWNlKC9eXFwvKy8sICcnKVxuICAgIDogYmFzZVVSTDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSAoXG4gIHV0aWxzLmlzU3RhbmRhcmRCcm93c2VyRW52KCkgP1xuXG4gIC8vIFN0YW5kYXJkIGJyb3dzZXIgZW52cyBzdXBwb3J0IGRvY3VtZW50LmNvb2tpZVxuICAgIChmdW5jdGlvbiBzdGFuZGFyZEJyb3dzZXJFbnYoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB3cml0ZTogZnVuY3Rpb24gd3JpdGUobmFtZSwgdmFsdWUsIGV4cGlyZXMsIHBhdGgsIGRvbWFpbiwgc2VjdXJlKSB7XG4gICAgICAgICAgdmFyIGNvb2tpZSA9IFtdO1xuICAgICAgICAgIGNvb2tpZS5wdXNoKG5hbWUgKyAnPScgKyBlbmNvZGVVUklDb21wb25lbnQodmFsdWUpKTtcblxuICAgICAgICAgIGlmICh1dGlscy5pc051bWJlcihleHBpcmVzKSkge1xuICAgICAgICAgICAgY29va2llLnB1c2goJ2V4cGlyZXM9JyArIG5ldyBEYXRlKGV4cGlyZXMpLnRvR01UU3RyaW5nKCkpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh1dGlscy5pc1N0cmluZyhwYXRoKSkge1xuICAgICAgICAgICAgY29va2llLnB1c2goJ3BhdGg9JyArIHBhdGgpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh1dGlscy5pc1N0cmluZyhkb21haW4pKSB7XG4gICAgICAgICAgICBjb29raWUucHVzaCgnZG9tYWluPScgKyBkb21haW4pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChzZWN1cmUgPT09IHRydWUpIHtcbiAgICAgICAgICAgIGNvb2tpZS5wdXNoKCdzZWN1cmUnKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBkb2N1bWVudC5jb29raWUgPSBjb29raWUuam9pbignOyAnKTtcbiAgICAgICAgfSxcblxuICAgICAgICByZWFkOiBmdW5jdGlvbiByZWFkKG5hbWUpIHtcbiAgICAgICAgICB2YXIgbWF0Y2ggPSBkb2N1bWVudC5jb29raWUubWF0Y2gobmV3IFJlZ0V4cCgnKF58O1xcXFxzKikoJyArIG5hbWUgKyAnKT0oW147XSopJykpO1xuICAgICAgICAgIHJldHVybiAobWF0Y2ggPyBkZWNvZGVVUklDb21wb25lbnQobWF0Y2hbM10pIDogbnVsbCk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgcmVtb3ZlOiBmdW5jdGlvbiByZW1vdmUobmFtZSkge1xuICAgICAgICAgIHRoaXMud3JpdGUobmFtZSwgJycsIERhdGUubm93KCkgLSA4NjQwMDAwMCk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfSkoKSA6XG5cbiAgLy8gTm9uIHN0YW5kYXJkIGJyb3dzZXIgZW52ICh3ZWIgd29ya2VycywgcmVhY3QtbmF0aXZlKSBsYWNrIG5lZWRlZCBzdXBwb3J0LlxuICAgIChmdW5jdGlvbiBub25TdGFuZGFyZEJyb3dzZXJFbnYoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB3cml0ZTogZnVuY3Rpb24gd3JpdGUoKSB7fSxcbiAgICAgICAgcmVhZDogZnVuY3Rpb24gcmVhZCgpIHsgcmV0dXJuIG51bGw7IH0sXG4gICAgICAgIHJlbW92ZTogZnVuY3Rpb24gcmVtb3ZlKCkge31cbiAgICAgIH07XG4gICAgfSkoKVxuKTtcbiIsIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHNwZWNpZmllZCBVUkwgaXMgYWJzb2x1dGVcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdXJsIFRoZSBVUkwgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIHNwZWNpZmllZCBVUkwgaXMgYWJzb2x1dGUsIG90aGVyd2lzZSBmYWxzZVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzQWJzb2x1dGVVUkwodXJsKSB7XG4gIC8vIEEgVVJMIGlzIGNvbnNpZGVyZWQgYWJzb2x1dGUgaWYgaXQgYmVnaW5zIHdpdGggXCI8c2NoZW1lPjovL1wiIG9yIFwiLy9cIiAocHJvdG9jb2wtcmVsYXRpdmUgVVJMKS5cbiAgLy8gUkZDIDM5ODYgZGVmaW5lcyBzY2hlbWUgbmFtZSBhcyBhIHNlcXVlbmNlIG9mIGNoYXJhY3RlcnMgYmVnaW5uaW5nIHdpdGggYSBsZXR0ZXIgYW5kIGZvbGxvd2VkXG4gIC8vIGJ5IGFueSBjb21iaW5hdGlvbiBvZiBsZXR0ZXJzLCBkaWdpdHMsIHBsdXMsIHBlcmlvZCwgb3IgaHlwaGVuLlxuICByZXR1cm4gL14oW2Etel1bYS16XFxkXFwrXFwtXFwuXSo6KT9cXC9cXC8vaS50ZXN0KHVybCk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gKFxuICB1dGlscy5pc1N0YW5kYXJkQnJvd3NlckVudigpID9cblxuICAvLyBTdGFuZGFyZCBicm93c2VyIGVudnMgaGF2ZSBmdWxsIHN1cHBvcnQgb2YgdGhlIEFQSXMgbmVlZGVkIHRvIHRlc3RcbiAgLy8gd2hldGhlciB0aGUgcmVxdWVzdCBVUkwgaXMgb2YgdGhlIHNhbWUgb3JpZ2luIGFzIGN1cnJlbnQgbG9jYXRpb24uXG4gICAgKGZ1bmN0aW9uIHN0YW5kYXJkQnJvd3NlckVudigpIHtcbiAgICAgIHZhciBtc2llID0gLyhtc2llfHRyaWRlbnQpL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtcbiAgICAgIHZhciB1cmxQYXJzaW5nTm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcbiAgICAgIHZhciBvcmlnaW5VUkw7XG5cbiAgICAgIC8qKlxuICAgICogUGFyc2UgYSBVUkwgdG8gZGlzY292ZXIgaXQncyBjb21wb25lbnRzXG4gICAgKlxuICAgICogQHBhcmFtIHtTdHJpbmd9IHVybCBUaGUgVVJMIHRvIGJlIHBhcnNlZFxuICAgICogQHJldHVybnMge09iamVjdH1cbiAgICAqL1xuICAgICAgZnVuY3Rpb24gcmVzb2x2ZVVSTCh1cmwpIHtcbiAgICAgICAgdmFyIGhyZWYgPSB1cmw7XG5cbiAgICAgICAgaWYgKG1zaWUpIHtcbiAgICAgICAgLy8gSUUgbmVlZHMgYXR0cmlidXRlIHNldCB0d2ljZSB0byBub3JtYWxpemUgcHJvcGVydGllc1xuICAgICAgICAgIHVybFBhcnNpbmdOb2RlLnNldEF0dHJpYnV0ZSgnaHJlZicsIGhyZWYpO1xuICAgICAgICAgIGhyZWYgPSB1cmxQYXJzaW5nTm9kZS5ocmVmO1xuICAgICAgICB9XG5cbiAgICAgICAgdXJsUGFyc2luZ05vZGUuc2V0QXR0cmlidXRlKCdocmVmJywgaHJlZik7XG5cbiAgICAgICAgLy8gdXJsUGFyc2luZ05vZGUgcHJvdmlkZXMgdGhlIFVybFV0aWxzIGludGVyZmFjZSAtIGh0dHA6Ly91cmwuc3BlYy53aGF0d2cub3JnLyN1cmx1dGlsc1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGhyZWY6IHVybFBhcnNpbmdOb2RlLmhyZWYsXG4gICAgICAgICAgcHJvdG9jb2w6IHVybFBhcnNpbmdOb2RlLnByb3RvY29sID8gdXJsUGFyc2luZ05vZGUucHJvdG9jb2wucmVwbGFjZSgvOiQvLCAnJykgOiAnJyxcbiAgICAgICAgICBob3N0OiB1cmxQYXJzaW5nTm9kZS5ob3N0LFxuICAgICAgICAgIHNlYXJjaDogdXJsUGFyc2luZ05vZGUuc2VhcmNoID8gdXJsUGFyc2luZ05vZGUuc2VhcmNoLnJlcGxhY2UoL15cXD8vLCAnJykgOiAnJyxcbiAgICAgICAgICBoYXNoOiB1cmxQYXJzaW5nTm9kZS5oYXNoID8gdXJsUGFyc2luZ05vZGUuaGFzaC5yZXBsYWNlKC9eIy8sICcnKSA6ICcnLFxuICAgICAgICAgIGhvc3RuYW1lOiB1cmxQYXJzaW5nTm9kZS5ob3N0bmFtZSxcbiAgICAgICAgICBwb3J0OiB1cmxQYXJzaW5nTm9kZS5wb3J0LFxuICAgICAgICAgIHBhdGhuYW1lOiAodXJsUGFyc2luZ05vZGUucGF0aG5hbWUuY2hhckF0KDApID09PSAnLycpID9cbiAgICAgICAgICAgIHVybFBhcnNpbmdOb2RlLnBhdGhuYW1lIDpcbiAgICAgICAgICAgICcvJyArIHVybFBhcnNpbmdOb2RlLnBhdGhuYW1lXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIG9yaWdpblVSTCA9IHJlc29sdmVVUkwod2luZG93LmxvY2F0aW9uLmhyZWYpO1xuXG4gICAgICAvKipcbiAgICAqIERldGVybWluZSBpZiBhIFVSTCBzaGFyZXMgdGhlIHNhbWUgb3JpZ2luIGFzIHRoZSBjdXJyZW50IGxvY2F0aW9uXG4gICAgKlxuICAgICogQHBhcmFtIHtTdHJpbmd9IHJlcXVlc3RVUkwgVGhlIFVSTCB0byB0ZXN0XG4gICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiBVUkwgc2hhcmVzIHRoZSBzYW1lIG9yaWdpbiwgb3RoZXJ3aXNlIGZhbHNlXG4gICAgKi9cbiAgICAgIHJldHVybiBmdW5jdGlvbiBpc1VSTFNhbWVPcmlnaW4ocmVxdWVzdFVSTCkge1xuICAgICAgICB2YXIgcGFyc2VkID0gKHV0aWxzLmlzU3RyaW5nKHJlcXVlc3RVUkwpKSA/IHJlc29sdmVVUkwocmVxdWVzdFVSTCkgOiByZXF1ZXN0VVJMO1xuICAgICAgICByZXR1cm4gKHBhcnNlZC5wcm90b2NvbCA9PT0gb3JpZ2luVVJMLnByb3RvY29sICYmXG4gICAgICAgICAgICBwYXJzZWQuaG9zdCA9PT0gb3JpZ2luVVJMLmhvc3QpO1xuICAgICAgfTtcbiAgICB9KSgpIDpcblxuICAvLyBOb24gc3RhbmRhcmQgYnJvd3NlciBlbnZzICh3ZWIgd29ya2VycywgcmVhY3QtbmF0aXZlKSBsYWNrIG5lZWRlZCBzdXBwb3J0LlxuICAgIChmdW5jdGlvbiBub25TdGFuZGFyZEJyb3dzZXJFbnYoKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gaXNVUkxTYW1lT3JpZ2luKCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH07XG4gICAgfSkoKVxuKTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBub3JtYWxpemVIZWFkZXJOYW1lKGhlYWRlcnMsIG5vcm1hbGl6ZWROYW1lKSB7XG4gIHV0aWxzLmZvckVhY2goaGVhZGVycywgZnVuY3Rpb24gcHJvY2Vzc0hlYWRlcih2YWx1ZSwgbmFtZSkge1xuICAgIGlmIChuYW1lICE9PSBub3JtYWxpemVkTmFtZSAmJiBuYW1lLnRvVXBwZXJDYXNlKCkgPT09IG5vcm1hbGl6ZWROYW1lLnRvVXBwZXJDYXNlKCkpIHtcbiAgICAgIGhlYWRlcnNbbm9ybWFsaXplZE5hbWVdID0gdmFsdWU7XG4gICAgICBkZWxldGUgaGVhZGVyc1tuYW1lXTtcbiAgICB9XG4gIH0pO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi8uLi91dGlscycpO1xuXG4vLyBIZWFkZXJzIHdob3NlIGR1cGxpY2F0ZXMgYXJlIGlnbm9yZWQgYnkgbm9kZVxuLy8gYy5mLiBodHRwczovL25vZGVqcy5vcmcvYXBpL2h0dHAuaHRtbCNodHRwX21lc3NhZ2VfaGVhZGVyc1xudmFyIGlnbm9yZUR1cGxpY2F0ZU9mID0gW1xuICAnYWdlJywgJ2F1dGhvcml6YXRpb24nLCAnY29udGVudC1sZW5ndGgnLCAnY29udGVudC10eXBlJywgJ2V0YWcnLFxuICAnZXhwaXJlcycsICdmcm9tJywgJ2hvc3QnLCAnaWYtbW9kaWZpZWQtc2luY2UnLCAnaWYtdW5tb2RpZmllZC1zaW5jZScsXG4gICdsYXN0LW1vZGlmaWVkJywgJ2xvY2F0aW9uJywgJ21heC1mb3J3YXJkcycsICdwcm94eS1hdXRob3JpemF0aW9uJyxcbiAgJ3JlZmVyZXInLCAncmV0cnktYWZ0ZXInLCAndXNlci1hZ2VudCdcbl07XG5cbi8qKlxuICogUGFyc2UgaGVhZGVycyBpbnRvIGFuIG9iamVjdFxuICpcbiAqIGBgYFxuICogRGF0ZTogV2VkLCAyNyBBdWcgMjAxNCAwODo1ODo0OSBHTVRcbiAqIENvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vanNvblxuICogQ29ubmVjdGlvbjoga2VlcC1hbGl2ZVxuICogVHJhbnNmZXItRW5jb2Rpbmc6IGNodW5rZWRcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBoZWFkZXJzIEhlYWRlcnMgbmVlZGluZyB0byBiZSBwYXJzZWRcbiAqIEByZXR1cm5zIHtPYmplY3R9IEhlYWRlcnMgcGFyc2VkIGludG8gYW4gb2JqZWN0XG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gcGFyc2VIZWFkZXJzKGhlYWRlcnMpIHtcbiAgdmFyIHBhcnNlZCA9IHt9O1xuICB2YXIga2V5O1xuICB2YXIgdmFsO1xuICB2YXIgaTtcblxuICBpZiAoIWhlYWRlcnMpIHsgcmV0dXJuIHBhcnNlZDsgfVxuXG4gIHV0aWxzLmZvckVhY2goaGVhZGVycy5zcGxpdCgnXFxuJyksIGZ1bmN0aW9uIHBhcnNlcihsaW5lKSB7XG4gICAgaSA9IGxpbmUuaW5kZXhPZignOicpO1xuICAgIGtleSA9IHV0aWxzLnRyaW0obGluZS5zdWJzdHIoMCwgaSkpLnRvTG93ZXJDYXNlKCk7XG4gICAgdmFsID0gdXRpbHMudHJpbShsaW5lLnN1YnN0cihpICsgMSkpO1xuXG4gICAgaWYgKGtleSkge1xuICAgICAgaWYgKHBhcnNlZFtrZXldICYmIGlnbm9yZUR1cGxpY2F0ZU9mLmluZGV4T2Yoa2V5KSA+PSAwKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChrZXkgPT09ICdzZXQtY29va2llJykge1xuICAgICAgICBwYXJzZWRba2V5XSA9IChwYXJzZWRba2V5XSA/IHBhcnNlZFtrZXldIDogW10pLmNvbmNhdChbdmFsXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYXJzZWRba2V5XSA9IHBhcnNlZFtrZXldID8gcGFyc2VkW2tleV0gKyAnLCAnICsgdmFsIDogdmFsO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHBhcnNlZDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogU3ludGFjdGljIHN1Z2FyIGZvciBpbnZva2luZyBhIGZ1bmN0aW9uIGFuZCBleHBhbmRpbmcgYW4gYXJyYXkgZm9yIGFyZ3VtZW50cy5cbiAqXG4gKiBDb21tb24gdXNlIGNhc2Ugd291bGQgYmUgdG8gdXNlIGBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHlgLlxuICpcbiAqICBgYGBqc1xuICogIGZ1bmN0aW9uIGYoeCwgeSwgeikge31cbiAqICB2YXIgYXJncyA9IFsxLCAyLCAzXTtcbiAqICBmLmFwcGx5KG51bGwsIGFyZ3MpO1xuICogIGBgYFxuICpcbiAqIFdpdGggYHNwcmVhZGAgdGhpcyBleGFtcGxlIGNhbiBiZSByZS13cml0dGVuLlxuICpcbiAqICBgYGBqc1xuICogIHNwcmVhZChmdW5jdGlvbih4LCB5LCB6KSB7fSkoWzEsIDIsIDNdKTtcbiAqICBgYGBcbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHJldHVybnMge0Z1bmN0aW9ufVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHNwcmVhZChjYWxsYmFjaykge1xuICByZXR1cm4gZnVuY3Rpb24gd3JhcChhcnIpIHtcbiAgICByZXR1cm4gY2FsbGJhY2suYXBwbHkobnVsbCwgYXJyKTtcbiAgfTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBiaW5kID0gcmVxdWlyZSgnLi9oZWxwZXJzL2JpbmQnKTtcbnZhciBpc0J1ZmZlciA9IHJlcXVpcmUoJ2lzLWJ1ZmZlcicpO1xuXG4vKmdsb2JhbCB0b1N0cmluZzp0cnVlKi9cblxuLy8gdXRpbHMgaXMgYSBsaWJyYXJ5IG9mIGdlbmVyaWMgaGVscGVyIGZ1bmN0aW9ucyBub24tc3BlY2lmaWMgdG8gYXhpb3NcblxudmFyIHRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhbiBBcnJheVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGFuIEFycmF5LCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNBcnJheSh2YWwpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwodmFsKSA9PT0gJ1tvYmplY3QgQXJyYXldJztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhbiBBcnJheUJ1ZmZlclxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGFuIEFycmF5QnVmZmVyLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNBcnJheUJ1ZmZlcih2YWwpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwodmFsKSA9PT0gJ1tvYmplY3QgQXJyYXlCdWZmZXJdJztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEZvcm1EYXRhXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYW4gRm9ybURhdGEsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0Zvcm1EYXRhKHZhbCkge1xuICByZXR1cm4gKHR5cGVvZiBGb3JtRGF0YSAhPT0gJ3VuZGVmaW5lZCcpICYmICh2YWwgaW5zdGFuY2VvZiBGb3JtRGF0YSk7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSB2aWV3IG9uIGFuIEFycmF5QnVmZmVyXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSB2aWV3IG9uIGFuIEFycmF5QnVmZmVyLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNBcnJheUJ1ZmZlclZpZXcodmFsKSB7XG4gIHZhciByZXN1bHQ7XG4gIGlmICgodHlwZW9mIEFycmF5QnVmZmVyICE9PSAndW5kZWZpbmVkJykgJiYgKEFycmF5QnVmZmVyLmlzVmlldykpIHtcbiAgICByZXN1bHQgPSBBcnJheUJ1ZmZlci5pc1ZpZXcodmFsKTtcbiAgfSBlbHNlIHtcbiAgICByZXN1bHQgPSAodmFsKSAmJiAodmFsLmJ1ZmZlcikgJiYgKHZhbC5idWZmZXIgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcik7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIFN0cmluZ1xuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgU3RyaW5nLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNTdHJpbmcodmFsKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsID09PSAnc3RyaW5nJztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIE51bWJlclxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgTnVtYmVyLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNOdW1iZXIodmFsKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsID09PSAnbnVtYmVyJztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyB1bmRlZmluZWRcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgdmFsdWUgaXMgdW5kZWZpbmVkLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNVbmRlZmluZWQodmFsKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsID09PSAndW5kZWZpbmVkJztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhbiBPYmplY3RcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhbiBPYmplY3QsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc09iamVjdCh2YWwpIHtcbiAgcmV0dXJuIHZhbCAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsID09PSAnb2JqZWN0Jztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIERhdGVcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIERhdGUsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0RhdGUodmFsKSB7XG4gIHJldHVybiB0b1N0cmluZy5jYWxsKHZhbCkgPT09ICdbb2JqZWN0IERhdGVdJztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEZpbGVcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEZpbGUsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0ZpbGUodmFsKSB7XG4gIHJldHVybiB0b1N0cmluZy5jYWxsKHZhbCkgPT09ICdbb2JqZWN0IEZpbGVdJztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEJsb2JcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEJsb2IsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0Jsb2IodmFsKSB7XG4gIHJldHVybiB0b1N0cmluZy5jYWxsKHZhbCkgPT09ICdbb2JqZWN0IEJsb2JdJztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEZ1bmN0aW9uXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBGdW5jdGlvbiwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzRnVuY3Rpb24odmFsKSB7XG4gIHJldHVybiB0b1N0cmluZy5jYWxsKHZhbCkgPT09ICdbb2JqZWN0IEZ1bmN0aW9uXSc7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBTdHJlYW1cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIFN0cmVhbSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzU3RyZWFtKHZhbCkge1xuICByZXR1cm4gaXNPYmplY3QodmFsKSAmJiBpc0Z1bmN0aW9uKHZhbC5waXBlKTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIFVSTFNlYXJjaFBhcmFtcyBvYmplY3RcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIFVSTFNlYXJjaFBhcmFtcyBvYmplY3QsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc1VSTFNlYXJjaFBhcmFtcyh2YWwpIHtcbiAgcmV0dXJuIHR5cGVvZiBVUkxTZWFyY2hQYXJhbXMgIT09ICd1bmRlZmluZWQnICYmIHZhbCBpbnN0YW5jZW9mIFVSTFNlYXJjaFBhcmFtcztcbn1cblxuLyoqXG4gKiBUcmltIGV4Y2VzcyB3aGl0ZXNwYWNlIG9mZiB0aGUgYmVnaW5uaW5nIGFuZCBlbmQgb2YgYSBzdHJpbmdcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyIFRoZSBTdHJpbmcgdG8gdHJpbVxuICogQHJldHVybnMge1N0cmluZ30gVGhlIFN0cmluZyBmcmVlZCBvZiBleGNlc3Mgd2hpdGVzcGFjZVxuICovXG5mdW5jdGlvbiB0cmltKHN0cikge1xuICByZXR1cm4gc3RyLnJlcGxhY2UoL15cXHMqLywgJycpLnJlcGxhY2UoL1xccyokLywgJycpO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiB3ZSdyZSBydW5uaW5nIGluIGEgc3RhbmRhcmQgYnJvd3NlciBlbnZpcm9ubWVudFxuICpcbiAqIFRoaXMgYWxsb3dzIGF4aW9zIHRvIHJ1biBpbiBhIHdlYiB3b3JrZXIsIGFuZCByZWFjdC1uYXRpdmUuXG4gKiBCb3RoIGVudmlyb25tZW50cyBzdXBwb3J0IFhNTEh0dHBSZXF1ZXN0LCBidXQgbm90IGZ1bGx5IHN0YW5kYXJkIGdsb2JhbHMuXG4gKlxuICogd2ViIHdvcmtlcnM6XG4gKiAgdHlwZW9mIHdpbmRvdyAtPiB1bmRlZmluZWRcbiAqICB0eXBlb2YgZG9jdW1lbnQgLT4gdW5kZWZpbmVkXG4gKlxuICogcmVhY3QtbmF0aXZlOlxuICogIG5hdmlnYXRvci5wcm9kdWN0IC0+ICdSZWFjdE5hdGl2ZSdcbiAqIG5hdGl2ZXNjcmlwdFxuICogIG5hdmlnYXRvci5wcm9kdWN0IC0+ICdOYXRpdmVTY3JpcHQnIG9yICdOUydcbiAqL1xuZnVuY3Rpb24gaXNTdGFuZGFyZEJyb3dzZXJFbnYoKSB7XG4gIGlmICh0eXBlb2YgbmF2aWdhdG9yICE9PSAndW5kZWZpbmVkJyAmJiAobmF2aWdhdG9yLnByb2R1Y3QgPT09ICdSZWFjdE5hdGl2ZScgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXZpZ2F0b3IucHJvZHVjdCA9PT0gJ05hdGl2ZVNjcmlwdCcgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXZpZ2F0b3IucHJvZHVjdCA9PT0gJ05TJykpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIChcbiAgICB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJlxuICAgIHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCdcbiAgKTtcbn1cblxuLyoqXG4gKiBJdGVyYXRlIG92ZXIgYW4gQXJyYXkgb3IgYW4gT2JqZWN0IGludm9raW5nIGEgZnVuY3Rpb24gZm9yIGVhY2ggaXRlbS5cbiAqXG4gKiBJZiBgb2JqYCBpcyBhbiBBcnJheSBjYWxsYmFjayB3aWxsIGJlIGNhbGxlZCBwYXNzaW5nXG4gKiB0aGUgdmFsdWUsIGluZGV4LCBhbmQgY29tcGxldGUgYXJyYXkgZm9yIGVhY2ggaXRlbS5cbiAqXG4gKiBJZiAnb2JqJyBpcyBhbiBPYmplY3QgY2FsbGJhY2sgd2lsbCBiZSBjYWxsZWQgcGFzc2luZ1xuICogdGhlIHZhbHVlLCBrZXksIGFuZCBjb21wbGV0ZSBvYmplY3QgZm9yIGVhY2ggcHJvcGVydHkuXG4gKlxuICogQHBhcmFtIHtPYmplY3R8QXJyYXl9IG9iaiBUaGUgb2JqZWN0IHRvIGl0ZXJhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBjYWxsYmFjayB0byBpbnZva2UgZm9yIGVhY2ggaXRlbVxuICovXG5mdW5jdGlvbiBmb3JFYWNoKG9iaiwgZm4pIHtcbiAgLy8gRG9uJ3QgYm90aGVyIGlmIG5vIHZhbHVlIHByb3ZpZGVkXG4gIGlmIChvYmogPT09IG51bGwgfHwgdHlwZW9mIG9iaiA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBGb3JjZSBhbiBhcnJheSBpZiBub3QgYWxyZWFkeSBzb21ldGhpbmcgaXRlcmFibGVcbiAgaWYgKHR5cGVvZiBvYmogIT09ICdvYmplY3QnKSB7XG4gICAgLyplc2xpbnQgbm8tcGFyYW0tcmVhc3NpZ246MCovXG4gICAgb2JqID0gW29ial07XG4gIH1cblxuICBpZiAoaXNBcnJheShvYmopKSB7XG4gICAgLy8gSXRlcmF0ZSBvdmVyIGFycmF5IHZhbHVlc1xuICAgIGZvciAodmFyIGkgPSAwLCBsID0gb2JqLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgZm4uY2FsbChudWxsLCBvYmpbaV0sIGksIG9iaik7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIEl0ZXJhdGUgb3ZlciBvYmplY3Qga2V5c1xuICAgIGZvciAodmFyIGtleSBpbiBvYmopIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXkpKSB7XG4gICAgICAgIGZuLmNhbGwobnVsbCwgb2JqW2tleV0sIGtleSwgb2JqKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBBY2NlcHRzIHZhcmFyZ3MgZXhwZWN0aW5nIGVhY2ggYXJndW1lbnQgdG8gYmUgYW4gb2JqZWN0LCB0aGVuXG4gKiBpbW11dGFibHkgbWVyZ2VzIHRoZSBwcm9wZXJ0aWVzIG9mIGVhY2ggb2JqZWN0IGFuZCByZXR1cm5zIHJlc3VsdC5cbiAqXG4gKiBXaGVuIG11bHRpcGxlIG9iamVjdHMgY29udGFpbiB0aGUgc2FtZSBrZXkgdGhlIGxhdGVyIG9iamVjdCBpblxuICogdGhlIGFyZ3VtZW50cyBsaXN0IHdpbGwgdGFrZSBwcmVjZWRlbmNlLlxuICpcbiAqIEV4YW1wbGU6XG4gKlxuICogYGBganNcbiAqIHZhciByZXN1bHQgPSBtZXJnZSh7Zm9vOiAxMjN9LCB7Zm9vOiA0NTZ9KTtcbiAqIGNvbnNvbGUubG9nKHJlc3VsdC5mb28pOyAvLyBvdXRwdXRzIDQ1NlxuICogYGBgXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9iajEgT2JqZWN0IHRvIG1lcmdlXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXN1bHQgb2YgYWxsIG1lcmdlIHByb3BlcnRpZXNcbiAqL1xuZnVuY3Rpb24gbWVyZ2UoLyogb2JqMSwgb2JqMiwgb2JqMywgLi4uICovKSB7XG4gIHZhciByZXN1bHQgPSB7fTtcbiAgZnVuY3Rpb24gYXNzaWduVmFsdWUodmFsLCBrZXkpIHtcbiAgICBpZiAodHlwZW9mIHJlc3VsdFtrZXldID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgdmFsID09PSAnb2JqZWN0Jykge1xuICAgICAgcmVzdWx0W2tleV0gPSBtZXJnZShyZXN1bHRba2V5XSwgdmFsKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0W2tleV0gPSB2YWw7XG4gICAgfVxuICB9XG5cbiAgZm9yICh2YXIgaSA9IDAsIGwgPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgZm9yRWFjaChhcmd1bWVudHNbaV0sIGFzc2lnblZhbHVlKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIEZ1bmN0aW9uIGVxdWFsIHRvIG1lcmdlIHdpdGggdGhlIGRpZmZlcmVuY2UgYmVpbmcgdGhhdCBubyByZWZlcmVuY2VcbiAqIHRvIG9yaWdpbmFsIG9iamVjdHMgaXMga2VwdC5cbiAqXG4gKiBAc2VlIG1lcmdlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqMSBPYmplY3QgdG8gbWVyZ2VcbiAqIEByZXR1cm5zIHtPYmplY3R9IFJlc3VsdCBvZiBhbGwgbWVyZ2UgcHJvcGVydGllc1xuICovXG5mdW5jdGlvbiBkZWVwTWVyZ2UoLyogb2JqMSwgb2JqMiwgb2JqMywgLi4uICovKSB7XG4gIHZhciByZXN1bHQgPSB7fTtcbiAgZnVuY3Rpb24gYXNzaWduVmFsdWUodmFsLCBrZXkpIHtcbiAgICBpZiAodHlwZW9mIHJlc3VsdFtrZXldID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgdmFsID09PSAnb2JqZWN0Jykge1xuICAgICAgcmVzdWx0W2tleV0gPSBkZWVwTWVyZ2UocmVzdWx0W2tleV0sIHZhbCk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsID09PSAnb2JqZWN0Jykge1xuICAgICAgcmVzdWx0W2tleV0gPSBkZWVwTWVyZ2Uoe30sIHZhbCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdFtrZXldID0gdmFsO1xuICAgIH1cbiAgfVxuXG4gIGZvciAodmFyIGkgPSAwLCBsID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIGZvckVhY2goYXJndW1lbnRzW2ldLCBhc3NpZ25WYWx1ZSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBFeHRlbmRzIG9iamVjdCBhIGJ5IG11dGFibHkgYWRkaW5nIHRvIGl0IHRoZSBwcm9wZXJ0aWVzIG9mIG9iamVjdCBiLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBhIFRoZSBvYmplY3QgdG8gYmUgZXh0ZW5kZWRcbiAqIEBwYXJhbSB7T2JqZWN0fSBiIFRoZSBvYmplY3QgdG8gY29weSBwcm9wZXJ0aWVzIGZyb21cbiAqIEBwYXJhbSB7T2JqZWN0fSB0aGlzQXJnIFRoZSBvYmplY3QgdG8gYmluZCBmdW5jdGlvbiB0b1xuICogQHJldHVybiB7T2JqZWN0fSBUaGUgcmVzdWx0aW5nIHZhbHVlIG9mIG9iamVjdCBhXG4gKi9cbmZ1bmN0aW9uIGV4dGVuZChhLCBiLCB0aGlzQXJnKSB7XG4gIGZvckVhY2goYiwgZnVuY3Rpb24gYXNzaWduVmFsdWUodmFsLCBrZXkpIHtcbiAgICBpZiAodGhpc0FyZyAmJiB0eXBlb2YgdmFsID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBhW2tleV0gPSBiaW5kKHZhbCwgdGhpc0FyZyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFba2V5XSA9IHZhbDtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gYTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGlzQXJyYXk6IGlzQXJyYXksXG4gIGlzQXJyYXlCdWZmZXI6IGlzQXJyYXlCdWZmZXIsXG4gIGlzQnVmZmVyOiBpc0J1ZmZlcixcbiAgaXNGb3JtRGF0YTogaXNGb3JtRGF0YSxcbiAgaXNBcnJheUJ1ZmZlclZpZXc6IGlzQXJyYXlCdWZmZXJWaWV3LFxuICBpc1N0cmluZzogaXNTdHJpbmcsXG4gIGlzTnVtYmVyOiBpc051bWJlcixcbiAgaXNPYmplY3Q6IGlzT2JqZWN0LFxuICBpc1VuZGVmaW5lZDogaXNVbmRlZmluZWQsXG4gIGlzRGF0ZTogaXNEYXRlLFxuICBpc0ZpbGU6IGlzRmlsZSxcbiAgaXNCbG9iOiBpc0Jsb2IsXG4gIGlzRnVuY3Rpb246IGlzRnVuY3Rpb24sXG4gIGlzU3RyZWFtOiBpc1N0cmVhbSxcbiAgaXNVUkxTZWFyY2hQYXJhbXM6IGlzVVJMU2VhcmNoUGFyYW1zLFxuICBpc1N0YW5kYXJkQnJvd3NlckVudjogaXNTdGFuZGFyZEJyb3dzZXJFbnYsXG4gIGZvckVhY2g6IGZvckVhY2gsXG4gIG1lcmdlOiBtZXJnZSxcbiAgZGVlcE1lcmdlOiBkZWVwTWVyZ2UsXG4gIGV4dGVuZDogZXh0ZW5kLFxuICB0cmltOiB0cmltXG59O1xuIiwiLyohXG4gKiBEZXRlcm1pbmUgaWYgYW4gb2JqZWN0IGlzIGEgQnVmZmVyXG4gKlxuICogQGF1dGhvciAgIEZlcm9zcyBBYm91a2hhZGlqZWggPGh0dHBzOi8vZmVyb3NzLm9yZz5cbiAqIEBsaWNlbnNlICBNSVRcbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzQnVmZmVyIChvYmopIHtcbiAgcmV0dXJuIG9iaiAhPSBudWxsICYmIG9iai5jb25zdHJ1Y3RvciAhPSBudWxsICYmXG4gICAgdHlwZW9mIG9iai5jb25zdHJ1Y3Rvci5pc0J1ZmZlciA9PT0gJ2Z1bmN0aW9uJyAmJiBvYmouY29uc3RydWN0b3IuaXNCdWZmZXIob2JqKVxufVxuIiwidmFyIG5lc3RSRSA9IC9eKGF0dHJzfHByb3BzfG9ufG5hdGl2ZU9ufGNsYXNzfHN0eWxlfGhvb2spJC9cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBtZXJnZUpTWFByb3BzIChvYmpzKSB7XG4gIHJldHVybiBvYmpzLnJlZHVjZShmdW5jdGlvbiAoYSwgYikge1xuICAgIHZhciBhYSwgYmIsIGtleSwgbmVzdGVkS2V5LCB0ZW1wXG4gICAgZm9yIChrZXkgaW4gYikge1xuICAgICAgYWEgPSBhW2tleV1cbiAgICAgIGJiID0gYltrZXldXG4gICAgICBpZiAoYWEgJiYgbmVzdFJFLnRlc3Qoa2V5KSkge1xuICAgICAgICAvLyBub3JtYWxpemUgY2xhc3NcbiAgICAgICAgaWYgKGtleSA9PT0gJ2NsYXNzJykge1xuICAgICAgICAgIGlmICh0eXBlb2YgYWEgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICB0ZW1wID0gYWFcbiAgICAgICAgICAgIGFba2V5XSA9IGFhID0ge31cbiAgICAgICAgICAgIGFhW3RlbXBdID0gdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodHlwZW9mIGJiID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgdGVtcCA9IGJiXG4gICAgICAgICAgICBiW2tleV0gPSBiYiA9IHt9XG4gICAgICAgICAgICBiYlt0ZW1wXSA9IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGtleSA9PT0gJ29uJyB8fCBrZXkgPT09ICduYXRpdmVPbicgfHwga2V5ID09PSAnaG9vaycpIHtcbiAgICAgICAgICAvLyBtZXJnZSBmdW5jdGlvbnNcbiAgICAgICAgICBmb3IgKG5lc3RlZEtleSBpbiBiYikge1xuICAgICAgICAgICAgYWFbbmVzdGVkS2V5XSA9IG1lcmdlRm4oYWFbbmVzdGVkS2V5XSwgYmJbbmVzdGVkS2V5XSlcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShhYSkpIHtcbiAgICAgICAgICBhW2tleV0gPSBhYS5jb25jYXQoYmIpXG4gICAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShiYikpIHtcbiAgICAgICAgICBhW2tleV0gPSBbYWFdLmNvbmNhdChiYilcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBmb3IgKG5lc3RlZEtleSBpbiBiYikge1xuICAgICAgICAgICAgYWFbbmVzdGVkS2V5XSA9IGJiW25lc3RlZEtleV1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFba2V5XSA9IGJba2V5XVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYVxuICB9LCB7fSlcbn1cblxuZnVuY3Rpb24gbWVyZ2VGbiAoYSwgYikge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIGEgJiYgYS5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG4gICAgYiAmJiBiLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbiAgfVxufVxuIiwibW9kdWxlLmV4cG9ydHMgPSB7IFwiZGVmYXVsdFwiOiByZXF1aXJlKFwiY29yZS1qcy9saWJyYXJ5L2ZuL2pzb24vc3RyaW5naWZ5XCIpLCBfX2VzTW9kdWxlOiB0cnVlIH07IiwibW9kdWxlLmV4cG9ydHMgPSB7IFwiZGVmYXVsdFwiOiByZXF1aXJlKFwiY29yZS1qcy9saWJyYXJ5L2ZuL29iamVjdC9rZXlzXCIpLCBfX2VzTW9kdWxlOiB0cnVlIH07IiwibW9kdWxlLmV4cG9ydHMgPSB7IFwiZGVmYXVsdFwiOiByZXF1aXJlKFwiY29yZS1qcy9saWJyYXJ5L2ZuL3Byb21pc2VcIiksIF9fZXNNb2R1bGU6IHRydWUgfTsiLCJtb2R1bGUuZXhwb3J0cyA9IHsgXCJkZWZhdWx0XCI6IHJlcXVpcmUoXCJjb3JlLWpzL2xpYnJhcnkvZm4vc3ltYm9sXCIpLCBfX2VzTW9kdWxlOiB0cnVlIH07IiwibW9kdWxlLmV4cG9ydHMgPSB7IFwiZGVmYXVsdFwiOiByZXF1aXJlKFwiY29yZS1qcy9saWJyYXJ5L2ZuL3N5bWJvbC9pdGVyYXRvclwiKSwgX19lc01vZHVsZTogdHJ1ZSB9OyIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXG52YXIgX3Byb21pc2UgPSByZXF1aXJlKFwiLi4vY29yZS1qcy9wcm9taXNlXCIpO1xuXG52YXIgX3Byb21pc2UyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfcHJvbWlzZSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbmV4cG9ydHMuZGVmYXVsdCA9IGZ1bmN0aW9uIChmbikge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHZhciBnZW4gPSBmbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIHJldHVybiBuZXcgX3Byb21pc2UyLmRlZmF1bHQoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgZnVuY3Rpb24gc3RlcChrZXksIGFyZykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHZhciBpbmZvID0gZ2VuW2tleV0oYXJnKTtcbiAgICAgICAgICB2YXIgdmFsdWUgPSBpbmZvLnZhbHVlO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGluZm8uZG9uZSkge1xuICAgICAgICAgIHJlc29sdmUodmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBfcHJvbWlzZTIuZGVmYXVsdC5yZXNvbHZlKHZhbHVlKS50aGVuKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgc3RlcChcIm5leHRcIiwgdmFsdWUpO1xuICAgICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIHN0ZXAoXCJ0aHJvd1wiLCBlcnIpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBzdGVwKFwibmV4dFwiKTtcbiAgICB9KTtcbiAgfTtcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cbmV4cG9ydHMuZGVmYXVsdCA9IGZ1bmN0aW9uIChpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHtcbiAgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpO1xuICB9XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXG52YXIgX2l0ZXJhdG9yID0gcmVxdWlyZShcIi4uL2NvcmUtanMvc3ltYm9sL2l0ZXJhdG9yXCIpO1xuXG52YXIgX2l0ZXJhdG9yMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2l0ZXJhdG9yKTtcblxudmFyIF9zeW1ib2wgPSByZXF1aXJlKFwiLi4vY29yZS1qcy9zeW1ib2xcIik7XG5cbnZhciBfc3ltYm9sMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3N5bWJvbCk7XG5cbnZhciBfdHlwZW9mID0gdHlwZW9mIF9zeW1ib2wyLmRlZmF1bHQgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgX2l0ZXJhdG9yMi5kZWZhdWx0ID09PSBcInN5bWJvbFwiID8gZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfSA6IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgX3N5bWJvbDIuZGVmYXVsdCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gX3N5bWJvbDIuZGVmYXVsdCAmJiBvYmogIT09IF9zeW1ib2wyLmRlZmF1bHQucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbmV4cG9ydHMuZGVmYXVsdCA9IHR5cGVvZiBfc3ltYm9sMi5kZWZhdWx0ID09PSBcImZ1bmN0aW9uXCIgJiYgX3R5cGVvZihfaXRlcmF0b3IyLmRlZmF1bHQpID09PSBcInN5bWJvbFwiID8gZnVuY3Rpb24gKG9iaikge1xuICByZXR1cm4gdHlwZW9mIG9iaiA9PT0gXCJ1bmRlZmluZWRcIiA/IFwidW5kZWZpbmVkXCIgOiBfdHlwZW9mKG9iaik7XG59IDogZnVuY3Rpb24gKG9iaikge1xuICByZXR1cm4gb2JqICYmIHR5cGVvZiBfc3ltYm9sMi5kZWZhdWx0ID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBfc3ltYm9sMi5kZWZhdWx0ICYmIG9iaiAhPT0gX3N5bWJvbDIuZGVmYXVsdC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iaiA9PT0gXCJ1bmRlZmluZWRcIiA/IFwidW5kZWZpbmVkXCIgOiBfdHlwZW9mKG9iaik7XG59OyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInJlZ2VuZXJhdG9yLXJ1bnRpbWVcIik7XG4iLCIndXNlIHN0cmljdCdcblxuZXhwb3J0cy5ieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aFxuZXhwb3J0cy50b0J5dGVBcnJheSA9IHRvQnl0ZUFycmF5XG5leHBvcnRzLmZyb21CeXRlQXJyYXkgPSBmcm9tQnl0ZUFycmF5XG5cbnZhciBsb29rdXAgPSBbXVxudmFyIHJldkxvb2t1cCA9IFtdXG52YXIgQXJyID0gdHlwZW9mIFVpbnQ4QXJyYXkgIT09ICd1bmRlZmluZWQnID8gVWludDhBcnJheSA6IEFycmF5XG5cbnZhciBjb2RlID0gJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8nXG5mb3IgKHZhciBpID0gMCwgbGVuID0gY29kZS5sZW5ndGg7IGkgPCBsZW47ICsraSkge1xuICBsb29rdXBbaV0gPSBjb2RlW2ldXG4gIHJldkxvb2t1cFtjb2RlLmNoYXJDb2RlQXQoaSldID0gaVxufVxuXG4vLyBTdXBwb3J0IGRlY29kaW5nIFVSTC1zYWZlIGJhc2U2NCBzdHJpbmdzLCBhcyBOb2RlLmpzIGRvZXMuXG4vLyBTZWU6IGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0Jhc2U2NCNVUkxfYXBwbGljYXRpb25zXG5yZXZMb29rdXBbJy0nLmNoYXJDb2RlQXQoMCldID0gNjJcbnJldkxvb2t1cFsnXycuY2hhckNvZGVBdCgwKV0gPSA2M1xuXG5mdW5jdGlvbiBnZXRMZW5zIChiNjQpIHtcbiAgdmFyIGxlbiA9IGI2NC5sZW5ndGhcblxuICBpZiAobGVuICUgNCA+IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgc3RyaW5nLiBMZW5ndGggbXVzdCBiZSBhIG11bHRpcGxlIG9mIDQnKVxuICB9XG5cbiAgLy8gVHJpbSBvZmYgZXh0cmEgYnl0ZXMgYWZ0ZXIgcGxhY2Vob2xkZXIgYnl0ZXMgYXJlIGZvdW5kXG4gIC8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2JlYXRnYW1taXQvYmFzZTY0LWpzL2lzc3Vlcy80MlxuICB2YXIgdmFsaWRMZW4gPSBiNjQuaW5kZXhPZignPScpXG4gIGlmICh2YWxpZExlbiA9PT0gLTEpIHZhbGlkTGVuID0gbGVuXG5cbiAgdmFyIHBsYWNlSG9sZGVyc0xlbiA9IHZhbGlkTGVuID09PSBsZW5cbiAgICA/IDBcbiAgICA6IDQgLSAodmFsaWRMZW4gJSA0KVxuXG4gIHJldHVybiBbdmFsaWRMZW4sIHBsYWNlSG9sZGVyc0xlbl1cbn1cblxuLy8gYmFzZTY0IGlzIDQvMyArIHVwIHRvIHR3byBjaGFyYWN0ZXJzIG9mIHRoZSBvcmlnaW5hbCBkYXRhXG5mdW5jdGlvbiBieXRlTGVuZ3RoIChiNjQpIHtcbiAgdmFyIGxlbnMgPSBnZXRMZW5zKGI2NClcbiAgdmFyIHZhbGlkTGVuID0gbGVuc1swXVxuICB2YXIgcGxhY2VIb2xkZXJzTGVuID0gbGVuc1sxXVxuICByZXR1cm4gKCh2YWxpZExlbiArIHBsYWNlSG9sZGVyc0xlbikgKiAzIC8gNCkgLSBwbGFjZUhvbGRlcnNMZW5cbn1cblxuZnVuY3Rpb24gX2J5dGVMZW5ndGggKGI2NCwgdmFsaWRMZW4sIHBsYWNlSG9sZGVyc0xlbikge1xuICByZXR1cm4gKCh2YWxpZExlbiArIHBsYWNlSG9sZGVyc0xlbikgKiAzIC8gNCkgLSBwbGFjZUhvbGRlcnNMZW5cbn1cblxuZnVuY3Rpb24gdG9CeXRlQXJyYXkgKGI2NCkge1xuICB2YXIgdG1wXG4gIHZhciBsZW5zID0gZ2V0TGVucyhiNjQpXG4gIHZhciB2YWxpZExlbiA9IGxlbnNbMF1cbiAgdmFyIHBsYWNlSG9sZGVyc0xlbiA9IGxlbnNbMV1cblxuICB2YXIgYXJyID0gbmV3IEFycihfYnl0ZUxlbmd0aChiNjQsIHZhbGlkTGVuLCBwbGFjZUhvbGRlcnNMZW4pKVxuXG4gIHZhciBjdXJCeXRlID0gMFxuXG4gIC8vIGlmIHRoZXJlIGFyZSBwbGFjZWhvbGRlcnMsIG9ubHkgZ2V0IHVwIHRvIHRoZSBsYXN0IGNvbXBsZXRlIDQgY2hhcnNcbiAgdmFyIGxlbiA9IHBsYWNlSG9sZGVyc0xlbiA+IDBcbiAgICA/IHZhbGlkTGVuIC0gNFxuICAgIDogdmFsaWRMZW5cblxuICB2YXIgaVxuICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpICs9IDQpIHtcbiAgICB0bXAgPVxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpKV0gPDwgMTgpIHxcbiAgICAgIChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSArIDEpXSA8PCAxMikgfFxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpICsgMildIDw8IDYpIHxcbiAgICAgIHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpICsgMyldXG4gICAgYXJyW2N1ckJ5dGUrK10gPSAodG1wID4+IDE2KSAmIDB4RkZcbiAgICBhcnJbY3VyQnl0ZSsrXSA9ICh0bXAgPj4gOCkgJiAweEZGXG4gICAgYXJyW2N1ckJ5dGUrK10gPSB0bXAgJiAweEZGXG4gIH1cblxuICBpZiAocGxhY2VIb2xkZXJzTGVuID09PSAyKSB7XG4gICAgdG1wID1cbiAgICAgIChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSldIDw8IDIpIHxcbiAgICAgIChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSArIDEpXSA+PiA0KVxuICAgIGFycltjdXJCeXRlKytdID0gdG1wICYgMHhGRlxuICB9XG5cbiAgaWYgKHBsYWNlSG9sZGVyc0xlbiA9PT0gMSkge1xuICAgIHRtcCA9XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkpXSA8PCAxMCkgfFxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpICsgMSldIDw8IDQpIHxcbiAgICAgIChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSArIDIpXSA+PiAyKVxuICAgIGFycltjdXJCeXRlKytdID0gKHRtcCA+PiA4KSAmIDB4RkZcbiAgICBhcnJbY3VyQnl0ZSsrXSA9IHRtcCAmIDB4RkZcbiAgfVxuXG4gIHJldHVybiBhcnJcbn1cblxuZnVuY3Rpb24gdHJpcGxldFRvQmFzZTY0IChudW0pIHtcbiAgcmV0dXJuIGxvb2t1cFtudW0gPj4gMTggJiAweDNGXSArXG4gICAgbG9va3VwW251bSA+PiAxMiAmIDB4M0ZdICtcbiAgICBsb29rdXBbbnVtID4+IDYgJiAweDNGXSArXG4gICAgbG9va3VwW251bSAmIDB4M0ZdXG59XG5cbmZ1bmN0aW9uIGVuY29kZUNodW5rICh1aW50OCwgc3RhcnQsIGVuZCkge1xuICB2YXIgdG1wXG4gIHZhciBvdXRwdXQgPSBbXVxuICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPCBlbmQ7IGkgKz0gMykge1xuICAgIHRtcCA9XG4gICAgICAoKHVpbnQ4W2ldIDw8IDE2KSAmIDB4RkYwMDAwKSArXG4gICAgICAoKHVpbnQ4W2kgKyAxXSA8PCA4KSAmIDB4RkYwMCkgK1xuICAgICAgKHVpbnQ4W2kgKyAyXSAmIDB4RkYpXG4gICAgb3V0cHV0LnB1c2godHJpcGxldFRvQmFzZTY0KHRtcCkpXG4gIH1cbiAgcmV0dXJuIG91dHB1dC5qb2luKCcnKVxufVxuXG5mdW5jdGlvbiBmcm9tQnl0ZUFycmF5ICh1aW50OCkge1xuICB2YXIgdG1wXG4gIHZhciBsZW4gPSB1aW50OC5sZW5ndGhcbiAgdmFyIGV4dHJhQnl0ZXMgPSBsZW4gJSAzIC8vIGlmIHdlIGhhdmUgMSBieXRlIGxlZnQsIHBhZCAyIGJ5dGVzXG4gIHZhciBwYXJ0cyA9IFtdXG4gIHZhciBtYXhDaHVua0xlbmd0aCA9IDE2MzgzIC8vIG11c3QgYmUgbXVsdGlwbGUgb2YgM1xuXG4gIC8vIGdvIHRocm91Z2ggdGhlIGFycmF5IGV2ZXJ5IHRocmVlIGJ5dGVzLCB3ZSdsbCBkZWFsIHdpdGggdHJhaWxpbmcgc3R1ZmYgbGF0ZXJcbiAgZm9yICh2YXIgaSA9IDAsIGxlbjIgPSBsZW4gLSBleHRyYUJ5dGVzOyBpIDwgbGVuMjsgaSArPSBtYXhDaHVua0xlbmd0aCkge1xuICAgIHBhcnRzLnB1c2goZW5jb2RlQ2h1bmsoXG4gICAgICB1aW50OCwgaSwgKGkgKyBtYXhDaHVua0xlbmd0aCkgPiBsZW4yID8gbGVuMiA6IChpICsgbWF4Q2h1bmtMZW5ndGgpXG4gICAgKSlcbiAgfVxuXG4gIC8vIHBhZCB0aGUgZW5kIHdpdGggemVyb3MsIGJ1dCBtYWtlIHN1cmUgdG8gbm90IGZvcmdldCB0aGUgZXh0cmEgYnl0ZXNcbiAgaWYgKGV4dHJhQnl0ZXMgPT09IDEpIHtcbiAgICB0bXAgPSB1aW50OFtsZW4gLSAxXVxuICAgIHBhcnRzLnB1c2goXG4gICAgICBsb29rdXBbdG1wID4+IDJdICtcbiAgICAgIGxvb2t1cFsodG1wIDw8IDQpICYgMHgzRl0gK1xuICAgICAgJz09J1xuICAgIClcbiAgfSBlbHNlIGlmIChleHRyYUJ5dGVzID09PSAyKSB7XG4gICAgdG1wID0gKHVpbnQ4W2xlbiAtIDJdIDw8IDgpICsgdWludDhbbGVuIC0gMV1cbiAgICBwYXJ0cy5wdXNoKFxuICAgICAgbG9va3VwW3RtcCA+PiAxMF0gK1xuICAgICAgbG9va3VwWyh0bXAgPj4gNCkgJiAweDNGXSArXG4gICAgICBsb29rdXBbKHRtcCA8PCAyKSAmIDB4M0ZdICtcbiAgICAgICc9J1xuICAgIClcbiAgfVxuXG4gIHJldHVybiBwYXJ0cy5qb2luKCcnKVxufVxuIiwiLyohXG4gKiBUaGUgYnVmZmVyIG1vZHVsZSBmcm9tIG5vZGUuanMsIGZvciB0aGUgYnJvd3Nlci5cbiAqXG4gKiBAYXV0aG9yICAgRmVyb3NzIEFib3VraGFkaWplaCA8aHR0cDovL2Zlcm9zcy5vcmc+XG4gKiBAbGljZW5zZSAgTUlUXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLXByb3RvICovXG5cbid1c2Ugc3RyaWN0J1xuXG52YXIgYmFzZTY0ID0gcmVxdWlyZSgnYmFzZTY0LWpzJylcbnZhciBpZWVlNzU0ID0gcmVxdWlyZSgnaWVlZTc1NCcpXG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJ2lzYXJyYXknKVxuXG5leHBvcnRzLkJ1ZmZlciA9IEJ1ZmZlclxuZXhwb3J0cy5TbG93QnVmZmVyID0gU2xvd0J1ZmZlclxuZXhwb3J0cy5JTlNQRUNUX01BWF9CWVRFUyA9IDUwXG5cbi8qKlxuICogSWYgYEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUYDpcbiAqICAgPT09IHRydWUgICAgVXNlIFVpbnQ4QXJyYXkgaW1wbGVtZW50YXRpb24gKGZhc3Rlc3QpXG4gKiAgID09PSBmYWxzZSAgIFVzZSBPYmplY3QgaW1wbGVtZW50YXRpb24gKG1vc3QgY29tcGF0aWJsZSwgZXZlbiBJRTYpXG4gKlxuICogQnJvd3NlcnMgdGhhdCBzdXBwb3J0IHR5cGVkIGFycmF5cyBhcmUgSUUgMTArLCBGaXJlZm94IDQrLCBDaHJvbWUgNyssIFNhZmFyaSA1LjErLFxuICogT3BlcmEgMTEuNissIGlPUyA0LjIrLlxuICpcbiAqIER1ZSB0byB2YXJpb3VzIGJyb3dzZXIgYnVncywgc29tZXRpbWVzIHRoZSBPYmplY3QgaW1wbGVtZW50YXRpb24gd2lsbCBiZSB1c2VkIGV2ZW5cbiAqIHdoZW4gdGhlIGJyb3dzZXIgc3VwcG9ydHMgdHlwZWQgYXJyYXlzLlxuICpcbiAqIE5vdGU6XG4gKlxuICogICAtIEZpcmVmb3ggNC0yOSBsYWNrcyBzdXBwb3J0IGZvciBhZGRpbmcgbmV3IHByb3BlcnRpZXMgdG8gYFVpbnQ4QXJyYXlgIGluc3RhbmNlcyxcbiAqICAgICBTZWU6IGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTY5NTQzOC5cbiAqXG4gKiAgIC0gQ2hyb21lIDktMTAgaXMgbWlzc2luZyB0aGUgYFR5cGVkQXJyYXkucHJvdG90eXBlLnN1YmFycmF5YCBmdW5jdGlvbi5cbiAqXG4gKiAgIC0gSUUxMCBoYXMgYSBicm9rZW4gYFR5cGVkQXJyYXkucHJvdG90eXBlLnN1YmFycmF5YCBmdW5jdGlvbiB3aGljaCByZXR1cm5zIGFycmF5cyBvZlxuICogICAgIGluY29ycmVjdCBsZW5ndGggaW4gc29tZSBzaXR1YXRpb25zLlxuXG4gKiBXZSBkZXRlY3QgdGhlc2UgYnVnZ3kgYnJvd3NlcnMgYW5kIHNldCBgQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlRgIHRvIGBmYWxzZWAgc28gdGhleVxuICogZ2V0IHRoZSBPYmplY3QgaW1wbGVtZW50YXRpb24sIHdoaWNoIGlzIHNsb3dlciBidXQgYmVoYXZlcyBjb3JyZWN0bHkuXG4gKi9cbkJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUID0gZ2xvYmFsLlRZUEVEX0FSUkFZX1NVUFBPUlQgIT09IHVuZGVmaW5lZFxuICA/IGdsb2JhbC5UWVBFRF9BUlJBWV9TVVBQT1JUXG4gIDogdHlwZWRBcnJheVN1cHBvcnQoKVxuXG4vKlxuICogRXhwb3J0IGtNYXhMZW5ndGggYWZ0ZXIgdHlwZWQgYXJyYXkgc3VwcG9ydCBpcyBkZXRlcm1pbmVkLlxuICovXG5leHBvcnRzLmtNYXhMZW5ndGggPSBrTWF4TGVuZ3RoKClcblxuZnVuY3Rpb24gdHlwZWRBcnJheVN1cHBvcnQgKCkge1xuICB0cnkge1xuICAgIHZhciBhcnIgPSBuZXcgVWludDhBcnJheSgxKVxuICAgIGFyci5fX3Byb3RvX18gPSB7X19wcm90b19fOiBVaW50OEFycmF5LnByb3RvdHlwZSwgZm9vOiBmdW5jdGlvbiAoKSB7IHJldHVybiA0MiB9fVxuICAgIHJldHVybiBhcnIuZm9vKCkgPT09IDQyICYmIC8vIHR5cGVkIGFycmF5IGluc3RhbmNlcyBjYW4gYmUgYXVnbWVudGVkXG4gICAgICAgIHR5cGVvZiBhcnIuc3ViYXJyYXkgPT09ICdmdW5jdGlvbicgJiYgLy8gY2hyb21lIDktMTAgbGFjayBgc3ViYXJyYXlgXG4gICAgICAgIGFyci5zdWJhcnJheSgxLCAxKS5ieXRlTGVuZ3RoID09PSAwIC8vIGllMTAgaGFzIGJyb2tlbiBgc3ViYXJyYXlgXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxufVxuXG5mdW5jdGlvbiBrTWF4TGVuZ3RoICgpIHtcbiAgcmV0dXJuIEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUXG4gICAgPyAweDdmZmZmZmZmXG4gICAgOiAweDNmZmZmZmZmXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUJ1ZmZlciAodGhhdCwgbGVuZ3RoKSB7XG4gIGlmIChrTWF4TGVuZ3RoKCkgPCBsZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignSW52YWxpZCB0eXBlZCBhcnJheSBsZW5ndGgnKVxuICB9XG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIC8vIFJldHVybiBhbiBhdWdtZW50ZWQgYFVpbnQ4QXJyYXlgIGluc3RhbmNlLCBmb3IgYmVzdCBwZXJmb3JtYW5jZVxuICAgIHRoYXQgPSBuZXcgVWludDhBcnJheShsZW5ndGgpXG4gICAgdGhhdC5fX3Byb3RvX18gPSBCdWZmZXIucHJvdG90eXBlXG4gIH0gZWxzZSB7XG4gICAgLy8gRmFsbGJhY2s6IFJldHVybiBhbiBvYmplY3QgaW5zdGFuY2Ugb2YgdGhlIEJ1ZmZlciBjbGFzc1xuICAgIGlmICh0aGF0ID09PSBudWxsKSB7XG4gICAgICB0aGF0ID0gbmV3IEJ1ZmZlcihsZW5ndGgpXG4gICAgfVxuICAgIHRoYXQubGVuZ3RoID0gbGVuZ3RoXG4gIH1cblxuICByZXR1cm4gdGhhdFxufVxuXG4vKipcbiAqIFRoZSBCdWZmZXIgY29uc3RydWN0b3IgcmV0dXJucyBpbnN0YW5jZXMgb2YgYFVpbnQ4QXJyYXlgIHRoYXQgaGF2ZSB0aGVpclxuICogcHJvdG90eXBlIGNoYW5nZWQgdG8gYEJ1ZmZlci5wcm90b3R5cGVgLiBGdXJ0aGVybW9yZSwgYEJ1ZmZlcmAgaXMgYSBzdWJjbGFzcyBvZlxuICogYFVpbnQ4QXJyYXlgLCBzbyB0aGUgcmV0dXJuZWQgaW5zdGFuY2VzIHdpbGwgaGF2ZSBhbGwgdGhlIG5vZGUgYEJ1ZmZlcmAgbWV0aG9kc1xuICogYW5kIHRoZSBgVWludDhBcnJheWAgbWV0aG9kcy4gU3F1YXJlIGJyYWNrZXQgbm90YXRpb24gd29ya3MgYXMgZXhwZWN0ZWQgLS0gaXRcbiAqIHJldHVybnMgYSBzaW5nbGUgb2N0ZXQuXG4gKlxuICogVGhlIGBVaW50OEFycmF5YCBwcm90b3R5cGUgcmVtYWlucyB1bm1vZGlmaWVkLlxuICovXG5cbmZ1bmN0aW9uIEJ1ZmZlciAoYXJnLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpIHtcbiAgaWYgKCFCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCAmJiAhKHRoaXMgaW5zdGFuY2VvZiBCdWZmZXIpKSB7XG4gICAgcmV0dXJuIG5ldyBCdWZmZXIoYXJnLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpXG4gIH1cblxuICAvLyBDb21tb24gY2FzZS5cbiAgaWYgKHR5cGVvZiBhcmcgPT09ICdudW1iZXInKSB7XG4gICAgaWYgKHR5cGVvZiBlbmNvZGluZ09yT2Zmc2V0ID09PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnSWYgZW5jb2RpbmcgaXMgc3BlY2lmaWVkIHRoZW4gdGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYSBzdHJpbmcnXG4gICAgICApXG4gICAgfVxuICAgIHJldHVybiBhbGxvY1Vuc2FmZSh0aGlzLCBhcmcpXG4gIH1cbiAgcmV0dXJuIGZyb20odGhpcywgYXJnLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpXG59XG5cbkJ1ZmZlci5wb29sU2l6ZSA9IDgxOTIgLy8gbm90IHVzZWQgYnkgdGhpcyBpbXBsZW1lbnRhdGlvblxuXG4vLyBUT0RPOiBMZWdhY3ksIG5vdCBuZWVkZWQgYW55bW9yZS4gUmVtb3ZlIGluIG5leHQgbWFqb3IgdmVyc2lvbi5cbkJ1ZmZlci5fYXVnbWVudCA9IGZ1bmN0aW9uIChhcnIpIHtcbiAgYXJyLl9fcHJvdG9fXyA9IEJ1ZmZlci5wcm90b3R5cGVcbiAgcmV0dXJuIGFyclxufVxuXG5mdW5jdGlvbiBmcm9tICh0aGF0LCB2YWx1ZSwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignXCJ2YWx1ZVwiIGFyZ3VtZW50IG11c3Qgbm90IGJlIGEgbnVtYmVyJylcbiAgfVxuXG4gIGlmICh0eXBlb2YgQXJyYXlCdWZmZXIgIT09ICd1bmRlZmluZWQnICYmIHZhbHVlIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpIHtcbiAgICByZXR1cm4gZnJvbUFycmF5QnVmZmVyKHRoYXQsIHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpXG4gIH1cblxuICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBmcm9tU3RyaW5nKHRoYXQsIHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0KVxuICB9XG5cbiAgcmV0dXJuIGZyb21PYmplY3QodGhhdCwgdmFsdWUpXG59XG5cbi8qKlxuICogRnVuY3Rpb25hbGx5IGVxdWl2YWxlbnQgdG8gQnVmZmVyKGFyZywgZW5jb2RpbmcpIGJ1dCB0aHJvd3MgYSBUeXBlRXJyb3JcbiAqIGlmIHZhbHVlIGlzIGEgbnVtYmVyLlxuICogQnVmZmVyLmZyb20oc3RyWywgZW5jb2RpbmddKVxuICogQnVmZmVyLmZyb20oYXJyYXkpXG4gKiBCdWZmZXIuZnJvbShidWZmZXIpXG4gKiBCdWZmZXIuZnJvbShhcnJheUJ1ZmZlclssIGJ5dGVPZmZzZXRbLCBsZW5ndGhdXSlcbiAqKi9cbkJ1ZmZlci5mcm9tID0gZnVuY3Rpb24gKHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGZyb20obnVsbCwgdmFsdWUsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aClcbn1cblxuaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gIEJ1ZmZlci5wcm90b3R5cGUuX19wcm90b19fID0gVWludDhBcnJheS5wcm90b3R5cGVcbiAgQnVmZmVyLl9fcHJvdG9fXyA9IFVpbnQ4QXJyYXlcbiAgaWYgKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC5zcGVjaWVzICYmXG4gICAgICBCdWZmZXJbU3ltYm9sLnNwZWNpZXNdID09PSBCdWZmZXIpIHtcbiAgICAvLyBGaXggc3ViYXJyYXkoKSBpbiBFUzIwMTYuIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2Zlcm9zcy9idWZmZXIvcHVsbC85N1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShCdWZmZXIsIFN5bWJvbC5zcGVjaWVzLCB7XG4gICAgICB2YWx1ZTogbnVsbCxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pXG4gIH1cbn1cblxuZnVuY3Rpb24gYXNzZXJ0U2l6ZSAoc2l6ZSkge1xuICBpZiAodHlwZW9mIHNpemUgIT09ICdudW1iZXInKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignXCJzaXplXCIgYXJndW1lbnQgbXVzdCBiZSBhIG51bWJlcicpXG4gIH0gZWxzZSBpZiAoc2l6ZSA8IDApIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignXCJzaXplXCIgYXJndW1lbnQgbXVzdCBub3QgYmUgbmVnYXRpdmUnKVxuICB9XG59XG5cbmZ1bmN0aW9uIGFsbG9jICh0aGF0LCBzaXplLCBmaWxsLCBlbmNvZGluZykge1xuICBhc3NlcnRTaXplKHNpemUpXG4gIGlmIChzaXplIDw9IDApIHtcbiAgICByZXR1cm4gY3JlYXRlQnVmZmVyKHRoYXQsIHNpemUpXG4gIH1cbiAgaWYgKGZpbGwgIT09IHVuZGVmaW5lZCkge1xuICAgIC8vIE9ubHkgcGF5IGF0dGVudGlvbiB0byBlbmNvZGluZyBpZiBpdCdzIGEgc3RyaW5nLiBUaGlzXG4gICAgLy8gcHJldmVudHMgYWNjaWRlbnRhbGx5IHNlbmRpbmcgaW4gYSBudW1iZXIgdGhhdCB3b3VsZFxuICAgIC8vIGJlIGludGVycHJldHRlZCBhcyBhIHN0YXJ0IG9mZnNldC5cbiAgICByZXR1cm4gdHlwZW9mIGVuY29kaW5nID09PSAnc3RyaW5nJ1xuICAgICAgPyBjcmVhdGVCdWZmZXIodGhhdCwgc2l6ZSkuZmlsbChmaWxsLCBlbmNvZGluZylcbiAgICAgIDogY3JlYXRlQnVmZmVyKHRoYXQsIHNpemUpLmZpbGwoZmlsbClcbiAgfVxuICByZXR1cm4gY3JlYXRlQnVmZmVyKHRoYXQsIHNpemUpXG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBmaWxsZWQgQnVmZmVyIGluc3RhbmNlLlxuICogYWxsb2Moc2l6ZVssIGZpbGxbLCBlbmNvZGluZ11dKVxuICoqL1xuQnVmZmVyLmFsbG9jID0gZnVuY3Rpb24gKHNpemUsIGZpbGwsIGVuY29kaW5nKSB7XG4gIHJldHVybiBhbGxvYyhudWxsLCBzaXplLCBmaWxsLCBlbmNvZGluZylcbn1cblxuZnVuY3Rpb24gYWxsb2NVbnNhZmUgKHRoYXQsIHNpemUpIHtcbiAgYXNzZXJ0U2l6ZShzaXplKVxuICB0aGF0ID0gY3JlYXRlQnVmZmVyKHRoYXQsIHNpemUgPCAwID8gMCA6IGNoZWNrZWQoc2l6ZSkgfCAwKVxuICBpZiAoIUJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzaXplOyArK2kpIHtcbiAgICAgIHRoYXRbaV0gPSAwXG4gICAgfVxuICB9XG4gIHJldHVybiB0aGF0XG59XG5cbi8qKlxuICogRXF1aXZhbGVudCB0byBCdWZmZXIobnVtKSwgYnkgZGVmYXVsdCBjcmVhdGVzIGEgbm9uLXplcm8tZmlsbGVkIEJ1ZmZlciBpbnN0YW5jZS5cbiAqICovXG5CdWZmZXIuYWxsb2NVbnNhZmUgPSBmdW5jdGlvbiAoc2l6ZSkge1xuICByZXR1cm4gYWxsb2NVbnNhZmUobnVsbCwgc2l6ZSlcbn1cbi8qKlxuICogRXF1aXZhbGVudCB0byBTbG93QnVmZmVyKG51bSksIGJ5IGRlZmF1bHQgY3JlYXRlcyBhIG5vbi16ZXJvLWZpbGxlZCBCdWZmZXIgaW5zdGFuY2UuXG4gKi9cbkJ1ZmZlci5hbGxvY1Vuc2FmZVNsb3cgPSBmdW5jdGlvbiAoc2l6ZSkge1xuICByZXR1cm4gYWxsb2NVbnNhZmUobnVsbCwgc2l6ZSlcbn1cblxuZnVuY3Rpb24gZnJvbVN0cmluZyAodGhhdCwgc3RyaW5nLCBlbmNvZGluZykge1xuICBpZiAodHlwZW9mIGVuY29kaW5nICE9PSAnc3RyaW5nJyB8fCBlbmNvZGluZyA9PT0gJycpIHtcbiAgICBlbmNvZGluZyA9ICd1dGY4J1xuICB9XG5cbiAgaWYgKCFCdWZmZXIuaXNFbmNvZGluZyhlbmNvZGluZykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdcImVuY29kaW5nXCIgbXVzdCBiZSBhIHZhbGlkIHN0cmluZyBlbmNvZGluZycpXG4gIH1cblxuICB2YXIgbGVuZ3RoID0gYnl0ZUxlbmd0aChzdHJpbmcsIGVuY29kaW5nKSB8IDBcbiAgdGhhdCA9IGNyZWF0ZUJ1ZmZlcih0aGF0LCBsZW5ndGgpXG5cbiAgdmFyIGFjdHVhbCA9IHRoYXQud3JpdGUoc3RyaW5nLCBlbmNvZGluZylcblxuICBpZiAoYWN0dWFsICE9PSBsZW5ndGgpIHtcbiAgICAvLyBXcml0aW5nIGEgaGV4IHN0cmluZywgZm9yIGV4YW1wbGUsIHRoYXQgY29udGFpbnMgaW52YWxpZCBjaGFyYWN0ZXJzIHdpbGxcbiAgICAvLyBjYXVzZSBldmVyeXRoaW5nIGFmdGVyIHRoZSBmaXJzdCBpbnZhbGlkIGNoYXJhY3RlciB0byBiZSBpZ25vcmVkLiAoZS5nLlxuICAgIC8vICdhYnh4Y2QnIHdpbGwgYmUgdHJlYXRlZCBhcyAnYWInKVxuICAgIHRoYXQgPSB0aGF0LnNsaWNlKDAsIGFjdHVhbClcbiAgfVxuXG4gIHJldHVybiB0aGF0XG59XG5cbmZ1bmN0aW9uIGZyb21BcnJheUxpa2UgKHRoYXQsIGFycmF5KSB7XG4gIHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGggPCAwID8gMCA6IGNoZWNrZWQoYXJyYXkubGVuZ3RoKSB8IDBcbiAgdGhhdCA9IGNyZWF0ZUJ1ZmZlcih0aGF0LCBsZW5ndGgpXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpICs9IDEpIHtcbiAgICB0aGF0W2ldID0gYXJyYXlbaV0gJiAyNTVcbiAgfVxuICByZXR1cm4gdGhhdFxufVxuXG5mdW5jdGlvbiBmcm9tQXJyYXlCdWZmZXIgKHRoYXQsIGFycmF5LCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgYXJyYXkuYnl0ZUxlbmd0aCAvLyB0aGlzIHRocm93cyBpZiBgYXJyYXlgIGlzIG5vdCBhIHZhbGlkIEFycmF5QnVmZmVyXG5cbiAgaWYgKGJ5dGVPZmZzZXQgPCAwIHx8IGFycmF5LmJ5dGVMZW5ndGggPCBieXRlT2Zmc2V0KSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1xcJ29mZnNldFxcJyBpcyBvdXQgb2YgYm91bmRzJylcbiAgfVxuXG4gIGlmIChhcnJheS5ieXRlTGVuZ3RoIDwgYnl0ZU9mZnNldCArIChsZW5ndGggfHwgMCkpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignXFwnbGVuZ3RoXFwnIGlzIG91dCBvZiBib3VuZHMnKVxuICB9XG5cbiAgaWYgKGJ5dGVPZmZzZXQgPT09IHVuZGVmaW5lZCAmJiBsZW5ndGggPT09IHVuZGVmaW5lZCkge1xuICAgIGFycmF5ID0gbmV3IFVpbnQ4QXJyYXkoYXJyYXkpXG4gIH0gZWxzZSBpZiAobGVuZ3RoID09PSB1bmRlZmluZWQpIHtcbiAgICBhcnJheSA9IG5ldyBVaW50OEFycmF5KGFycmF5LCBieXRlT2Zmc2V0KVxuICB9IGVsc2Uge1xuICAgIGFycmF5ID0gbmV3IFVpbnQ4QXJyYXkoYXJyYXksIGJ5dGVPZmZzZXQsIGxlbmd0aClcbiAgfVxuXG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIC8vIFJldHVybiBhbiBhdWdtZW50ZWQgYFVpbnQ4QXJyYXlgIGluc3RhbmNlLCBmb3IgYmVzdCBwZXJmb3JtYW5jZVxuICAgIHRoYXQgPSBhcnJheVxuICAgIHRoYXQuX19wcm90b19fID0gQnVmZmVyLnByb3RvdHlwZVxuICB9IGVsc2Uge1xuICAgIC8vIEZhbGxiYWNrOiBSZXR1cm4gYW4gb2JqZWN0IGluc3RhbmNlIG9mIHRoZSBCdWZmZXIgY2xhc3NcbiAgICB0aGF0ID0gZnJvbUFycmF5TGlrZSh0aGF0LCBhcnJheSlcbiAgfVxuICByZXR1cm4gdGhhdFxufVxuXG5mdW5jdGlvbiBmcm9tT2JqZWN0ICh0aGF0LCBvYmopIHtcbiAgaWYgKEJ1ZmZlci5pc0J1ZmZlcihvYmopKSB7XG4gICAgdmFyIGxlbiA9IGNoZWNrZWQob2JqLmxlbmd0aCkgfCAwXG4gICAgdGhhdCA9IGNyZWF0ZUJ1ZmZlcih0aGF0LCBsZW4pXG5cbiAgICBpZiAodGhhdC5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiB0aGF0XG4gICAgfVxuXG4gICAgb2JqLmNvcHkodGhhdCwgMCwgMCwgbGVuKVxuICAgIHJldHVybiB0aGF0XG4gIH1cblxuICBpZiAob2JqKSB7XG4gICAgaWYgKCh0eXBlb2YgQXJyYXlCdWZmZXIgIT09ICd1bmRlZmluZWQnICYmXG4gICAgICAgIG9iai5idWZmZXIgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikgfHwgJ2xlbmd0aCcgaW4gb2JqKSB7XG4gICAgICBpZiAodHlwZW9mIG9iai5sZW5ndGggIT09ICdudW1iZXInIHx8IGlzbmFuKG9iai5sZW5ndGgpKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVCdWZmZXIodGhhdCwgMClcbiAgICAgIH1cbiAgICAgIHJldHVybiBmcm9tQXJyYXlMaWtlKHRoYXQsIG9iailcbiAgICB9XG5cbiAgICBpZiAob2JqLnR5cGUgPT09ICdCdWZmZXInICYmIGlzQXJyYXkob2JqLmRhdGEpKSB7XG4gICAgICByZXR1cm4gZnJvbUFycmF5TGlrZSh0aGF0LCBvYmouZGF0YSlcbiAgICB9XG4gIH1cblxuICB0aHJvdyBuZXcgVHlwZUVycm9yKCdGaXJzdCBhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nLCBCdWZmZXIsIEFycmF5QnVmZmVyLCBBcnJheSwgb3IgYXJyYXktbGlrZSBvYmplY3QuJylcbn1cblxuZnVuY3Rpb24gY2hlY2tlZCAobGVuZ3RoKSB7XG4gIC8vIE5vdGU6IGNhbm5vdCB1c2UgYGxlbmd0aCA8IGtNYXhMZW5ndGgoKWAgaGVyZSBiZWNhdXNlIHRoYXQgZmFpbHMgd2hlblxuICAvLyBsZW5ndGggaXMgTmFOICh3aGljaCBpcyBvdGhlcndpc2UgY29lcmNlZCB0byB6ZXJvLilcbiAgaWYgKGxlbmd0aCA+PSBrTWF4TGVuZ3RoKCkpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignQXR0ZW1wdCB0byBhbGxvY2F0ZSBCdWZmZXIgbGFyZ2VyIHRoYW4gbWF4aW11bSAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAnc2l6ZTogMHgnICsga01heExlbmd0aCgpLnRvU3RyaW5nKDE2KSArICcgYnl0ZXMnKVxuICB9XG4gIHJldHVybiBsZW5ndGggfCAwXG59XG5cbmZ1bmN0aW9uIFNsb3dCdWZmZXIgKGxlbmd0aCkge1xuICBpZiAoK2xlbmd0aCAhPSBsZW5ndGgpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBlcWVxZXFcbiAgICBsZW5ndGggPSAwXG4gIH1cbiAgcmV0dXJuIEJ1ZmZlci5hbGxvYygrbGVuZ3RoKVxufVxuXG5CdWZmZXIuaXNCdWZmZXIgPSBmdW5jdGlvbiBpc0J1ZmZlciAoYikge1xuICByZXR1cm4gISEoYiAhPSBudWxsICYmIGIuX2lzQnVmZmVyKVxufVxuXG5CdWZmZXIuY29tcGFyZSA9IGZ1bmN0aW9uIGNvbXBhcmUgKGEsIGIpIHtcbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoYSkgfHwgIUJ1ZmZlci5pc0J1ZmZlcihiKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50cyBtdXN0IGJlIEJ1ZmZlcnMnKVxuICB9XG5cbiAgaWYgKGEgPT09IGIpIHJldHVybiAwXG5cbiAgdmFyIHggPSBhLmxlbmd0aFxuICB2YXIgeSA9IGIubGVuZ3RoXG5cbiAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IE1hdGgubWluKHgsIHkpOyBpIDwgbGVuOyArK2kpIHtcbiAgICBpZiAoYVtpXSAhPT0gYltpXSkge1xuICAgICAgeCA9IGFbaV1cbiAgICAgIHkgPSBiW2ldXG4gICAgICBicmVha1xuICAgIH1cbiAgfVxuXG4gIGlmICh4IDwgeSkgcmV0dXJuIC0xXG4gIGlmICh5IDwgeCkgcmV0dXJuIDFcbiAgcmV0dXJuIDBcbn1cblxuQnVmZmVyLmlzRW5jb2RpbmcgPSBmdW5jdGlvbiBpc0VuY29kaW5nIChlbmNvZGluZykge1xuICBzd2l0Y2ggKFN0cmluZyhlbmNvZGluZykudG9Mb3dlckNhc2UoKSkge1xuICAgIGNhc2UgJ2hleCc6XG4gICAgY2FzZSAndXRmOCc6XG4gICAgY2FzZSAndXRmLTgnOlxuICAgIGNhc2UgJ2FzY2lpJzpcbiAgICBjYXNlICdsYXRpbjEnOlxuICAgIGNhc2UgJ2JpbmFyeSc6XG4gICAgY2FzZSAnYmFzZTY0JzpcbiAgICBjYXNlICd1Y3MyJzpcbiAgICBjYXNlICd1Y3MtMic6XG4gICAgY2FzZSAndXRmMTZsZSc6XG4gICAgY2FzZSAndXRmLTE2bGUnOlxuICAgICAgcmV0dXJuIHRydWVcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGZhbHNlXG4gIH1cbn1cblxuQnVmZmVyLmNvbmNhdCA9IGZ1bmN0aW9uIGNvbmNhdCAobGlzdCwgbGVuZ3RoKSB7XG4gIGlmICghaXNBcnJheShsaXN0KSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1wibGlzdFwiIGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXkgb2YgQnVmZmVycycpXG4gIH1cblxuICBpZiAobGlzdC5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gQnVmZmVyLmFsbG9jKDApXG4gIH1cblxuICB2YXIgaVxuICBpZiAobGVuZ3RoID09PSB1bmRlZmluZWQpIHtcbiAgICBsZW5ndGggPSAwXG4gICAgZm9yIChpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyArK2kpIHtcbiAgICAgIGxlbmd0aCArPSBsaXN0W2ldLmxlbmd0aFxuICAgIH1cbiAgfVxuXG4gIHZhciBidWZmZXIgPSBCdWZmZXIuYWxsb2NVbnNhZmUobGVuZ3RoKVxuICB2YXIgcG9zID0gMFxuICBmb3IgKGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7ICsraSkge1xuICAgIHZhciBidWYgPSBsaXN0W2ldXG4gICAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoYnVmKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignXCJsaXN0XCIgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheSBvZiBCdWZmZXJzJylcbiAgICB9XG4gICAgYnVmLmNvcHkoYnVmZmVyLCBwb3MpXG4gICAgcG9zICs9IGJ1Zi5sZW5ndGhcbiAgfVxuICByZXR1cm4gYnVmZmVyXG59XG5cbmZ1bmN0aW9uIGJ5dGVMZW5ndGggKHN0cmluZywgZW5jb2RpbmcpIHtcbiAgaWYgKEJ1ZmZlci5pc0J1ZmZlcihzdHJpbmcpKSB7XG4gICAgcmV0dXJuIHN0cmluZy5sZW5ndGhcbiAgfVxuICBpZiAodHlwZW9mIEFycmF5QnVmZmVyICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgQXJyYXlCdWZmZXIuaXNWaWV3ID09PSAnZnVuY3Rpb24nICYmXG4gICAgICAoQXJyYXlCdWZmZXIuaXNWaWV3KHN0cmluZykgfHwgc3RyaW5nIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpKSB7XG4gICAgcmV0dXJuIHN0cmluZy5ieXRlTGVuZ3RoXG4gIH1cbiAgaWYgKHR5cGVvZiBzdHJpbmcgIT09ICdzdHJpbmcnKSB7XG4gICAgc3RyaW5nID0gJycgKyBzdHJpbmdcbiAgfVxuXG4gIHZhciBsZW4gPSBzdHJpbmcubGVuZ3RoXG4gIGlmIChsZW4gPT09IDApIHJldHVybiAwXG5cbiAgLy8gVXNlIGEgZm9yIGxvb3AgdG8gYXZvaWQgcmVjdXJzaW9uXG4gIHZhciBsb3dlcmVkQ2FzZSA9IGZhbHNlXG4gIGZvciAoOzspIHtcbiAgICBzd2l0Y2ggKGVuY29kaW5nKSB7XG4gICAgICBjYXNlICdhc2NpaSc6XG4gICAgICBjYXNlICdsYXRpbjEnOlxuICAgICAgY2FzZSAnYmluYXJ5JzpcbiAgICAgICAgcmV0dXJuIGxlblxuICAgICAgY2FzZSAndXRmOCc6XG4gICAgICBjYXNlICd1dGYtOCc6XG4gICAgICBjYXNlIHVuZGVmaW5lZDpcbiAgICAgICAgcmV0dXJuIHV0ZjhUb0J5dGVzKHN0cmluZykubGVuZ3RoXG4gICAgICBjYXNlICd1Y3MyJzpcbiAgICAgIGNhc2UgJ3Vjcy0yJzpcbiAgICAgIGNhc2UgJ3V0ZjE2bGUnOlxuICAgICAgY2FzZSAndXRmLTE2bGUnOlxuICAgICAgICByZXR1cm4gbGVuICogMlxuICAgICAgY2FzZSAnaGV4JzpcbiAgICAgICAgcmV0dXJuIGxlbiA+Pj4gMVxuICAgICAgY2FzZSAnYmFzZTY0JzpcbiAgICAgICAgcmV0dXJuIGJhc2U2NFRvQnl0ZXMoc3RyaW5nKS5sZW5ndGhcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmIChsb3dlcmVkQ2FzZSkgcmV0dXJuIHV0ZjhUb0J5dGVzKHN0cmluZykubGVuZ3RoIC8vIGFzc3VtZSB1dGY4XG4gICAgICAgIGVuY29kaW5nID0gKCcnICsgZW5jb2RpbmcpLnRvTG93ZXJDYXNlKClcbiAgICAgICAgbG93ZXJlZENhc2UgPSB0cnVlXG4gICAgfVxuICB9XG59XG5CdWZmZXIuYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGhcblxuZnVuY3Rpb24gc2xvd1RvU3RyaW5nIChlbmNvZGluZywgc3RhcnQsIGVuZCkge1xuICB2YXIgbG93ZXJlZENhc2UgPSBmYWxzZVxuXG4gIC8vIE5vIG5lZWQgdG8gdmVyaWZ5IHRoYXQgXCJ0aGlzLmxlbmd0aCA8PSBNQVhfVUlOVDMyXCIgc2luY2UgaXQncyBhIHJlYWQtb25seVxuICAvLyBwcm9wZXJ0eSBvZiBhIHR5cGVkIGFycmF5LlxuXG4gIC8vIFRoaXMgYmVoYXZlcyBuZWl0aGVyIGxpa2UgU3RyaW5nIG5vciBVaW50OEFycmF5IGluIHRoYXQgd2Ugc2V0IHN0YXJ0L2VuZFxuICAvLyB0byB0aGVpciB1cHBlci9sb3dlciBib3VuZHMgaWYgdGhlIHZhbHVlIHBhc3NlZCBpcyBvdXQgb2YgcmFuZ2UuXG4gIC8vIHVuZGVmaW5lZCBpcyBoYW5kbGVkIHNwZWNpYWxseSBhcyBwZXIgRUNNQS0yNjIgNnRoIEVkaXRpb24sXG4gIC8vIFNlY3Rpb24gMTMuMy4zLjcgUnVudGltZSBTZW1hbnRpY3M6IEtleWVkQmluZGluZ0luaXRpYWxpemF0aW9uLlxuICBpZiAoc3RhcnQgPT09IHVuZGVmaW5lZCB8fCBzdGFydCA8IDApIHtcbiAgICBzdGFydCA9IDBcbiAgfVxuICAvLyBSZXR1cm4gZWFybHkgaWYgc3RhcnQgPiB0aGlzLmxlbmd0aC4gRG9uZSBoZXJlIHRvIHByZXZlbnQgcG90ZW50aWFsIHVpbnQzMlxuICAvLyBjb2VyY2lvbiBmYWlsIGJlbG93LlxuICBpZiAoc3RhcnQgPiB0aGlzLmxlbmd0aCkge1xuICAgIHJldHVybiAnJ1xuICB9XG5cbiAgaWYgKGVuZCA9PT0gdW5kZWZpbmVkIHx8IGVuZCA+IHRoaXMubGVuZ3RoKSB7XG4gICAgZW5kID0gdGhpcy5sZW5ndGhcbiAgfVxuXG4gIGlmIChlbmQgPD0gMCkge1xuICAgIHJldHVybiAnJ1xuICB9XG5cbiAgLy8gRm9yY2UgY29lcnNpb24gdG8gdWludDMyLiBUaGlzIHdpbGwgYWxzbyBjb2VyY2UgZmFsc2V5L05hTiB2YWx1ZXMgdG8gMC5cbiAgZW5kID4+Pj0gMFxuICBzdGFydCA+Pj49IDBcblxuICBpZiAoZW5kIDw9IHN0YXJ0KSB7XG4gICAgcmV0dXJuICcnXG4gIH1cblxuICBpZiAoIWVuY29kaW5nKSBlbmNvZGluZyA9ICd1dGY4J1xuXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgc3dpdGNoIChlbmNvZGluZykge1xuICAgICAgY2FzZSAnaGV4JzpcbiAgICAgICAgcmV0dXJuIGhleFNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpXG5cbiAgICAgIGNhc2UgJ3V0ZjgnOlxuICAgICAgY2FzZSAndXRmLTgnOlxuICAgICAgICByZXR1cm4gdXRmOFNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpXG5cbiAgICAgIGNhc2UgJ2FzY2lpJzpcbiAgICAgICAgcmV0dXJuIGFzY2lpU2xpY2UodGhpcywgc3RhcnQsIGVuZClcblxuICAgICAgY2FzZSAnbGF0aW4xJzpcbiAgICAgIGNhc2UgJ2JpbmFyeSc6XG4gICAgICAgIHJldHVybiBsYXRpbjFTbGljZSh0aGlzLCBzdGFydCwgZW5kKVxuXG4gICAgICBjYXNlICdiYXNlNjQnOlxuICAgICAgICByZXR1cm4gYmFzZTY0U2xpY2UodGhpcywgc3RhcnQsIGVuZClcblxuICAgICAgY2FzZSAndWNzMic6XG4gICAgICBjYXNlICd1Y3MtMic6XG4gICAgICBjYXNlICd1dGYxNmxlJzpcbiAgICAgIGNhc2UgJ3V0Zi0xNmxlJzpcbiAgICAgICAgcmV0dXJuIHV0ZjE2bGVTbGljZSh0aGlzLCBzdGFydCwgZW5kKVxuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAobG93ZXJlZENhc2UpIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Vua25vd24gZW5jb2Rpbmc6ICcgKyBlbmNvZGluZylcbiAgICAgICAgZW5jb2RpbmcgPSAoZW5jb2RpbmcgKyAnJykudG9Mb3dlckNhc2UoKVxuICAgICAgICBsb3dlcmVkQ2FzZSA9IHRydWVcbiAgICB9XG4gIH1cbn1cblxuLy8gVGhlIHByb3BlcnR5IGlzIHVzZWQgYnkgYEJ1ZmZlci5pc0J1ZmZlcmAgYW5kIGBpcy1idWZmZXJgIChpbiBTYWZhcmkgNS03KSB0byBkZXRlY3Rcbi8vIEJ1ZmZlciBpbnN0YW5jZXMuXG5CdWZmZXIucHJvdG90eXBlLl9pc0J1ZmZlciA9IHRydWVcblxuZnVuY3Rpb24gc3dhcCAoYiwgbiwgbSkge1xuICB2YXIgaSA9IGJbbl1cbiAgYltuXSA9IGJbbV1cbiAgYlttXSA9IGlcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5zd2FwMTYgPSBmdW5jdGlvbiBzd2FwMTYgKCkge1xuICB2YXIgbGVuID0gdGhpcy5sZW5ndGhcbiAgaWYgKGxlbiAlIDIgIT09IDApIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDE2LWJpdHMnKVxuICB9XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpICs9IDIpIHtcbiAgICBzd2FwKHRoaXMsIGksIGkgKyAxKVxuICB9XG4gIHJldHVybiB0aGlzXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuc3dhcDMyID0gZnVuY3Rpb24gc3dhcDMyICgpIHtcbiAgdmFyIGxlbiA9IHRoaXMubGVuZ3RoXG4gIGlmIChsZW4gJSA0ICE9PSAwKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0J1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAzMi1iaXRzJylcbiAgfVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSArPSA0KSB7XG4gICAgc3dhcCh0aGlzLCBpLCBpICsgMylcbiAgICBzd2FwKHRoaXMsIGkgKyAxLCBpICsgMilcbiAgfVxuICByZXR1cm4gdGhpc1xufVxuXG5CdWZmZXIucHJvdG90eXBlLnN3YXA2NCA9IGZ1bmN0aW9uIHN3YXA2NCAoKSB7XG4gIHZhciBsZW4gPSB0aGlzLmxlbmd0aFxuICBpZiAobGVuICUgOCAhPT0gMCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNjQtYml0cycpXG4gIH1cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkgKz0gOCkge1xuICAgIHN3YXAodGhpcywgaSwgaSArIDcpXG4gICAgc3dhcCh0aGlzLCBpICsgMSwgaSArIDYpXG4gICAgc3dhcCh0aGlzLCBpICsgMiwgaSArIDUpXG4gICAgc3dhcCh0aGlzLCBpICsgMywgaSArIDQpXG4gIH1cbiAgcmV0dXJuIHRoaXNcbn1cblxuQnVmZmVyLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nICgpIHtcbiAgdmFyIGxlbmd0aCA9IHRoaXMubGVuZ3RoIHwgMFxuICBpZiAobGVuZ3RoID09PSAwKSByZXR1cm4gJydcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApIHJldHVybiB1dGY4U2xpY2UodGhpcywgMCwgbGVuZ3RoKVxuICByZXR1cm4gc2xvd1RvU3RyaW5nLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5lcXVhbHMgPSBmdW5jdGlvbiBlcXVhbHMgKGIpIHtcbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoYikpIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXInKVxuICBpZiAodGhpcyA9PT0gYikgcmV0dXJuIHRydWVcbiAgcmV0dXJuIEJ1ZmZlci5jb21wYXJlKHRoaXMsIGIpID09PSAwXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuaW5zcGVjdCA9IGZ1bmN0aW9uIGluc3BlY3QgKCkge1xuICB2YXIgc3RyID0gJydcbiAgdmFyIG1heCA9IGV4cG9ydHMuSU5TUEVDVF9NQVhfQllURVNcbiAgaWYgKHRoaXMubGVuZ3RoID4gMCkge1xuICAgIHN0ciA9IHRoaXMudG9TdHJpbmcoJ2hleCcsIDAsIG1heCkubWF0Y2goLy57Mn0vZykuam9pbignICcpXG4gICAgaWYgKHRoaXMubGVuZ3RoID4gbWF4KSBzdHIgKz0gJyAuLi4gJ1xuICB9XG4gIHJldHVybiAnPEJ1ZmZlciAnICsgc3RyICsgJz4nXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuY29tcGFyZSA9IGZ1bmN0aW9uIGNvbXBhcmUgKHRhcmdldCwgc3RhcnQsIGVuZCwgdGhpc1N0YXJ0LCB0aGlzRW5kKSB7XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKHRhcmdldCkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyJylcbiAgfVxuXG4gIGlmIChzdGFydCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgc3RhcnQgPSAwXG4gIH1cbiAgaWYgKGVuZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgZW5kID0gdGFyZ2V0ID8gdGFyZ2V0Lmxlbmd0aCA6IDBcbiAgfVxuICBpZiAodGhpc1N0YXJ0ID09PSB1bmRlZmluZWQpIHtcbiAgICB0aGlzU3RhcnQgPSAwXG4gIH1cbiAgaWYgKHRoaXNFbmQgPT09IHVuZGVmaW5lZCkge1xuICAgIHRoaXNFbmQgPSB0aGlzLmxlbmd0aFxuICB9XG5cbiAgaWYgKHN0YXJ0IDwgMCB8fCBlbmQgPiB0YXJnZXQubGVuZ3RoIHx8IHRoaXNTdGFydCA8IDAgfHwgdGhpc0VuZCA+IHRoaXMubGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ291dCBvZiByYW5nZSBpbmRleCcpXG4gIH1cblxuICBpZiAodGhpc1N0YXJ0ID49IHRoaXNFbmQgJiYgc3RhcnQgPj0gZW5kKSB7XG4gICAgcmV0dXJuIDBcbiAgfVxuICBpZiAodGhpc1N0YXJ0ID49IHRoaXNFbmQpIHtcbiAgICByZXR1cm4gLTFcbiAgfVxuICBpZiAoc3RhcnQgPj0gZW5kKSB7XG4gICAgcmV0dXJuIDFcbiAgfVxuXG4gIHN0YXJ0ID4+Pj0gMFxuICBlbmQgPj4+PSAwXG4gIHRoaXNTdGFydCA+Pj49IDBcbiAgdGhpc0VuZCA+Pj49IDBcblxuICBpZiAodGhpcyA9PT0gdGFyZ2V0KSByZXR1cm4gMFxuXG4gIHZhciB4ID0gdGhpc0VuZCAtIHRoaXNTdGFydFxuICB2YXIgeSA9IGVuZCAtIHN0YXJ0XG4gIHZhciBsZW4gPSBNYXRoLm1pbih4LCB5KVxuXG4gIHZhciB0aGlzQ29weSA9IHRoaXMuc2xpY2UodGhpc1N0YXJ0LCB0aGlzRW5kKVxuICB2YXIgdGFyZ2V0Q29weSA9IHRhcmdldC5zbGljZShzdGFydCwgZW5kKVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyArK2kpIHtcbiAgICBpZiAodGhpc0NvcHlbaV0gIT09IHRhcmdldENvcHlbaV0pIHtcbiAgICAgIHggPSB0aGlzQ29weVtpXVxuICAgICAgeSA9IHRhcmdldENvcHlbaV1cbiAgICAgIGJyZWFrXG4gICAgfVxuICB9XG5cbiAgaWYgKHggPCB5KSByZXR1cm4gLTFcbiAgaWYgKHkgPCB4KSByZXR1cm4gMVxuICByZXR1cm4gMFxufVxuXG4vLyBGaW5kcyBlaXRoZXIgdGhlIGZpcnN0IGluZGV4IG9mIGB2YWxgIGluIGBidWZmZXJgIGF0IG9mZnNldCA+PSBgYnl0ZU9mZnNldGAsXG4vLyBPUiB0aGUgbGFzdCBpbmRleCBvZiBgdmFsYCBpbiBgYnVmZmVyYCBhdCBvZmZzZXQgPD0gYGJ5dGVPZmZzZXRgLlxuLy9cbi8vIEFyZ3VtZW50czpcbi8vIC0gYnVmZmVyIC0gYSBCdWZmZXIgdG8gc2VhcmNoXG4vLyAtIHZhbCAtIGEgc3RyaW5nLCBCdWZmZXIsIG9yIG51bWJlclxuLy8gLSBieXRlT2Zmc2V0IC0gYW4gaW5kZXggaW50byBgYnVmZmVyYDsgd2lsbCBiZSBjbGFtcGVkIHRvIGFuIGludDMyXG4vLyAtIGVuY29kaW5nIC0gYW4gb3B0aW9uYWwgZW5jb2RpbmcsIHJlbGV2YW50IGlzIHZhbCBpcyBhIHN0cmluZ1xuLy8gLSBkaXIgLSB0cnVlIGZvciBpbmRleE9mLCBmYWxzZSBmb3IgbGFzdEluZGV4T2ZcbmZ1bmN0aW9uIGJpZGlyZWN0aW9uYWxJbmRleE9mIChidWZmZXIsIHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcsIGRpcikge1xuICAvLyBFbXB0eSBidWZmZXIgbWVhbnMgbm8gbWF0Y2hcbiAgaWYgKGJ1ZmZlci5sZW5ndGggPT09IDApIHJldHVybiAtMVxuXG4gIC8vIE5vcm1hbGl6ZSBieXRlT2Zmc2V0XG4gIGlmICh0eXBlb2YgYnl0ZU9mZnNldCA9PT0gJ3N0cmluZycpIHtcbiAgICBlbmNvZGluZyA9IGJ5dGVPZmZzZXRcbiAgICBieXRlT2Zmc2V0ID0gMFxuICB9IGVsc2UgaWYgKGJ5dGVPZmZzZXQgPiAweDdmZmZmZmZmKSB7XG4gICAgYnl0ZU9mZnNldCA9IDB4N2ZmZmZmZmZcbiAgfSBlbHNlIGlmIChieXRlT2Zmc2V0IDwgLTB4ODAwMDAwMDApIHtcbiAgICBieXRlT2Zmc2V0ID0gLTB4ODAwMDAwMDBcbiAgfVxuICBieXRlT2Zmc2V0ID0gK2J5dGVPZmZzZXQgIC8vIENvZXJjZSB0byBOdW1iZXIuXG4gIGlmIChpc05hTihieXRlT2Zmc2V0KSkge1xuICAgIC8vIGJ5dGVPZmZzZXQ6IGl0IGl0J3MgdW5kZWZpbmVkLCBudWxsLCBOYU4sIFwiZm9vXCIsIGV0Yywgc2VhcmNoIHdob2xlIGJ1ZmZlclxuICAgIGJ5dGVPZmZzZXQgPSBkaXIgPyAwIDogKGJ1ZmZlci5sZW5ndGggLSAxKVxuICB9XG5cbiAgLy8gTm9ybWFsaXplIGJ5dGVPZmZzZXQ6IG5lZ2F0aXZlIG9mZnNldHMgc3RhcnQgZnJvbSB0aGUgZW5kIG9mIHRoZSBidWZmZXJcbiAgaWYgKGJ5dGVPZmZzZXQgPCAwKSBieXRlT2Zmc2V0ID0gYnVmZmVyLmxlbmd0aCArIGJ5dGVPZmZzZXRcbiAgaWYgKGJ5dGVPZmZzZXQgPj0gYnVmZmVyLmxlbmd0aCkge1xuICAgIGlmIChkaXIpIHJldHVybiAtMVxuICAgIGVsc2UgYnl0ZU9mZnNldCA9IGJ1ZmZlci5sZW5ndGggLSAxXG4gIH0gZWxzZSBpZiAoYnl0ZU9mZnNldCA8IDApIHtcbiAgICBpZiAoZGlyKSBieXRlT2Zmc2V0ID0gMFxuICAgIGVsc2UgcmV0dXJuIC0xXG4gIH1cblxuICAvLyBOb3JtYWxpemUgdmFsXG4gIGlmICh0eXBlb2YgdmFsID09PSAnc3RyaW5nJykge1xuICAgIHZhbCA9IEJ1ZmZlci5mcm9tKHZhbCwgZW5jb2RpbmcpXG4gIH1cblxuICAvLyBGaW5hbGx5LCBzZWFyY2ggZWl0aGVyIGluZGV4T2YgKGlmIGRpciBpcyB0cnVlKSBvciBsYXN0SW5kZXhPZlxuICBpZiAoQnVmZmVyLmlzQnVmZmVyKHZhbCkpIHtcbiAgICAvLyBTcGVjaWFsIGNhc2U6IGxvb2tpbmcgZm9yIGVtcHR5IHN0cmluZy9idWZmZXIgYWx3YXlzIGZhaWxzXG4gICAgaWYgKHZhbC5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiAtMVxuICAgIH1cbiAgICByZXR1cm4gYXJyYXlJbmRleE9mKGJ1ZmZlciwgdmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZywgZGlyKVxuICB9IGVsc2UgaWYgKHR5cGVvZiB2YWwgPT09ICdudW1iZXInKSB7XG4gICAgdmFsID0gdmFsICYgMHhGRiAvLyBTZWFyY2ggZm9yIGEgYnl0ZSB2YWx1ZSBbMC0yNTVdXG4gICAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUICYmXG4gICAgICAgIHR5cGVvZiBVaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBpZiAoZGlyKSB7XG4gICAgICAgIHJldHVybiBVaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mLmNhbGwoYnVmZmVyLCB2YWwsIGJ5dGVPZmZzZXQpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gVWludDhBcnJheS5wcm90b3R5cGUubGFzdEluZGV4T2YuY2FsbChidWZmZXIsIHZhbCwgYnl0ZU9mZnNldClcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGFycmF5SW5kZXhPZihidWZmZXIsIFsgdmFsIF0sIGJ5dGVPZmZzZXQsIGVuY29kaW5nLCBkaXIpXG4gIH1cblxuICB0aHJvdyBuZXcgVHlwZUVycm9yKCd2YWwgbXVzdCBiZSBzdHJpbmcsIG51bWJlciBvciBCdWZmZXInKVxufVxuXG5mdW5jdGlvbiBhcnJheUluZGV4T2YgKGFyciwgdmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZywgZGlyKSB7XG4gIHZhciBpbmRleFNpemUgPSAxXG4gIHZhciBhcnJMZW5ndGggPSBhcnIubGVuZ3RoXG4gIHZhciB2YWxMZW5ndGggPSB2YWwubGVuZ3RoXG5cbiAgaWYgKGVuY29kaW5nICE9PSB1bmRlZmluZWQpIHtcbiAgICBlbmNvZGluZyA9IFN0cmluZyhlbmNvZGluZykudG9Mb3dlckNhc2UoKVxuICAgIGlmIChlbmNvZGluZyA9PT0gJ3VjczInIHx8IGVuY29kaW5nID09PSAndWNzLTInIHx8XG4gICAgICAgIGVuY29kaW5nID09PSAndXRmMTZsZScgfHwgZW5jb2RpbmcgPT09ICd1dGYtMTZsZScpIHtcbiAgICAgIGlmIChhcnIubGVuZ3RoIDwgMiB8fCB2YWwubGVuZ3RoIDwgMikge1xuICAgICAgICByZXR1cm4gLTFcbiAgICAgIH1cbiAgICAgIGluZGV4U2l6ZSA9IDJcbiAgICAgIGFyckxlbmd0aCAvPSAyXG4gICAgICB2YWxMZW5ndGggLz0gMlxuICAgICAgYnl0ZU9mZnNldCAvPSAyXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcmVhZCAoYnVmLCBpKSB7XG4gICAgaWYgKGluZGV4U2l6ZSA9PT0gMSkge1xuICAgICAgcmV0dXJuIGJ1ZltpXVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gYnVmLnJlYWRVSW50MTZCRShpICogaW5kZXhTaXplKVxuICAgIH1cbiAgfVxuXG4gIHZhciBpXG4gIGlmIChkaXIpIHtcbiAgICB2YXIgZm91bmRJbmRleCA9IC0xXG4gICAgZm9yIChpID0gYnl0ZU9mZnNldDsgaSA8IGFyckxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAocmVhZChhcnIsIGkpID09PSByZWFkKHZhbCwgZm91bmRJbmRleCA9PT0gLTEgPyAwIDogaSAtIGZvdW5kSW5kZXgpKSB7XG4gICAgICAgIGlmIChmb3VuZEluZGV4ID09PSAtMSkgZm91bmRJbmRleCA9IGlcbiAgICAgICAgaWYgKGkgLSBmb3VuZEluZGV4ICsgMSA9PT0gdmFsTGVuZ3RoKSByZXR1cm4gZm91bmRJbmRleCAqIGluZGV4U2l6ZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGZvdW5kSW5kZXggIT09IC0xKSBpIC09IGkgLSBmb3VuZEluZGV4XG4gICAgICAgIGZvdW5kSW5kZXggPSAtMVxuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAoYnl0ZU9mZnNldCArIHZhbExlbmd0aCA+IGFyckxlbmd0aCkgYnl0ZU9mZnNldCA9IGFyckxlbmd0aCAtIHZhbExlbmd0aFxuICAgIGZvciAoaSA9IGJ5dGVPZmZzZXQ7IGkgPj0gMDsgaS0tKSB7XG4gICAgICB2YXIgZm91bmQgPSB0cnVlXG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHZhbExlbmd0aDsgaisrKSB7XG4gICAgICAgIGlmIChyZWFkKGFyciwgaSArIGopICE9PSByZWFkKHZhbCwgaikpIHtcbiAgICAgICAgICBmb3VuZCA9IGZhbHNlXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGZvdW5kKSByZXR1cm4gaVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiAtMVxufVxuXG5CdWZmZXIucHJvdG90eXBlLmluY2x1ZGVzID0gZnVuY3Rpb24gaW5jbHVkZXMgKHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcpIHtcbiAgcmV0dXJuIHRoaXMuaW5kZXhPZih2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nKSAhPT0gLTFcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5pbmRleE9mID0gZnVuY3Rpb24gaW5kZXhPZiAodmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZykge1xuICByZXR1cm4gYmlkaXJlY3Rpb25hbEluZGV4T2YodGhpcywgdmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZywgdHJ1ZSlcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5sYXN0SW5kZXhPZiA9IGZ1bmN0aW9uIGxhc3RJbmRleE9mICh2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nKSB7XG4gIHJldHVybiBiaWRpcmVjdGlvbmFsSW5kZXhPZih0aGlzLCB2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nLCBmYWxzZSlcbn1cblxuZnVuY3Rpb24gaGV4V3JpdGUgKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCkge1xuICBvZmZzZXQgPSBOdW1iZXIob2Zmc2V0KSB8fCAwXG4gIHZhciByZW1haW5pbmcgPSBidWYubGVuZ3RoIC0gb2Zmc2V0XG4gIGlmICghbGVuZ3RoKSB7XG4gICAgbGVuZ3RoID0gcmVtYWluaW5nXG4gIH0gZWxzZSB7XG4gICAgbGVuZ3RoID0gTnVtYmVyKGxlbmd0aClcbiAgICBpZiAobGVuZ3RoID4gcmVtYWluaW5nKSB7XG4gICAgICBsZW5ndGggPSByZW1haW5pbmdcbiAgICB9XG4gIH1cblxuICAvLyBtdXN0IGJlIGFuIGV2ZW4gbnVtYmVyIG9mIGRpZ2l0c1xuICB2YXIgc3RyTGVuID0gc3RyaW5nLmxlbmd0aFxuICBpZiAoc3RyTGVuICUgMiAhPT0gMCkgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCBoZXggc3RyaW5nJylcblxuICBpZiAobGVuZ3RoID4gc3RyTGVuIC8gMikge1xuICAgIGxlbmd0aCA9IHN0ckxlbiAvIDJcbiAgfVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7XG4gICAgdmFyIHBhcnNlZCA9IHBhcnNlSW50KHN0cmluZy5zdWJzdHIoaSAqIDIsIDIpLCAxNilcbiAgICBpZiAoaXNOYU4ocGFyc2VkKSkgcmV0dXJuIGlcbiAgICBidWZbb2Zmc2V0ICsgaV0gPSBwYXJzZWRcbiAgfVxuICByZXR1cm4gaVxufVxuXG5mdW5jdGlvbiB1dGY4V3JpdGUgKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCkge1xuICByZXR1cm4gYmxpdEJ1ZmZlcih1dGY4VG9CeXRlcyhzdHJpbmcsIGJ1Zi5sZW5ndGggLSBvZmZzZXQpLCBidWYsIG9mZnNldCwgbGVuZ3RoKVxufVxuXG5mdW5jdGlvbiBhc2NpaVdyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGJsaXRCdWZmZXIoYXNjaWlUb0J5dGVzKHN0cmluZyksIGJ1Ziwgb2Zmc2V0LCBsZW5ndGgpXG59XG5cbmZ1bmN0aW9uIGxhdGluMVdyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGFzY2lpV3JpdGUoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxufVxuXG5mdW5jdGlvbiBiYXNlNjRXcml0ZSAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBibGl0QnVmZmVyKGJhc2U2NFRvQnl0ZXMoc3RyaW5nKSwgYnVmLCBvZmZzZXQsIGxlbmd0aClcbn1cblxuZnVuY3Rpb24gdWNzMldyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGJsaXRCdWZmZXIodXRmMTZsZVRvQnl0ZXMoc3RyaW5nLCBidWYubGVuZ3RoIC0gb2Zmc2V0KSwgYnVmLCBvZmZzZXQsIGxlbmd0aClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uIHdyaXRlIChzdHJpbmcsIG9mZnNldCwgbGVuZ3RoLCBlbmNvZGluZykge1xuICAvLyBCdWZmZXIjd3JpdGUoc3RyaW5nKVxuICBpZiAob2Zmc2V0ID09PSB1bmRlZmluZWQpIHtcbiAgICBlbmNvZGluZyA9ICd1dGY4J1xuICAgIGxlbmd0aCA9IHRoaXMubGVuZ3RoXG4gICAgb2Zmc2V0ID0gMFxuICAvLyBCdWZmZXIjd3JpdGUoc3RyaW5nLCBlbmNvZGluZylcbiAgfSBlbHNlIGlmIChsZW5ndGggPT09IHVuZGVmaW5lZCAmJiB0eXBlb2Ygb2Zmc2V0ID09PSAnc3RyaW5nJykge1xuICAgIGVuY29kaW5nID0gb2Zmc2V0XG4gICAgbGVuZ3RoID0gdGhpcy5sZW5ndGhcbiAgICBvZmZzZXQgPSAwXG4gIC8vIEJ1ZmZlciN3cml0ZShzdHJpbmcsIG9mZnNldFssIGxlbmd0aF1bLCBlbmNvZGluZ10pXG4gIH0gZWxzZSBpZiAoaXNGaW5pdGUob2Zmc2V0KSkge1xuICAgIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgICBpZiAoaXNGaW5pdGUobGVuZ3RoKSkge1xuICAgICAgbGVuZ3RoID0gbGVuZ3RoIHwgMFxuICAgICAgaWYgKGVuY29kaW5nID09PSB1bmRlZmluZWQpIGVuY29kaW5nID0gJ3V0ZjgnXG4gICAgfSBlbHNlIHtcbiAgICAgIGVuY29kaW5nID0gbGVuZ3RoXG4gICAgICBsZW5ndGggPSB1bmRlZmluZWRcbiAgICB9XG4gIC8vIGxlZ2FjeSB3cml0ZShzdHJpbmcsIGVuY29kaW5nLCBvZmZzZXQsIGxlbmd0aCkgLSByZW1vdmUgaW4gdjAuMTNcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAnQnVmZmVyLndyaXRlKHN0cmluZywgZW5jb2RpbmcsIG9mZnNldFssIGxlbmd0aF0pIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQnXG4gICAgKVxuICB9XG5cbiAgdmFyIHJlbWFpbmluZyA9IHRoaXMubGVuZ3RoIC0gb2Zmc2V0XG4gIGlmIChsZW5ndGggPT09IHVuZGVmaW5lZCB8fCBsZW5ndGggPiByZW1haW5pbmcpIGxlbmd0aCA9IHJlbWFpbmluZ1xuXG4gIGlmICgoc3RyaW5nLmxlbmd0aCA+IDAgJiYgKGxlbmd0aCA8IDAgfHwgb2Zmc2V0IDwgMCkpIHx8IG9mZnNldCA+IHRoaXMubGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0F0dGVtcHQgdG8gd3JpdGUgb3V0c2lkZSBidWZmZXIgYm91bmRzJylcbiAgfVxuXG4gIGlmICghZW5jb2RpbmcpIGVuY29kaW5nID0gJ3V0ZjgnXG5cbiAgdmFyIGxvd2VyZWRDYXNlID0gZmFsc2VcbiAgZm9yICg7Oykge1xuICAgIHN3aXRjaCAoZW5jb2RpbmcpIHtcbiAgICAgIGNhc2UgJ2hleCc6XG4gICAgICAgIHJldHVybiBoZXhXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxuXG4gICAgICBjYXNlICd1dGY4JzpcbiAgICAgIGNhc2UgJ3V0Zi04JzpcbiAgICAgICAgcmV0dXJuIHV0ZjhXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxuXG4gICAgICBjYXNlICdhc2NpaSc6XG4gICAgICAgIHJldHVybiBhc2NpaVdyaXRlKHRoaXMsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpXG5cbiAgICAgIGNhc2UgJ2xhdGluMSc6XG4gICAgICBjYXNlICdiaW5hcnknOlxuICAgICAgICByZXR1cm4gbGF0aW4xV3JpdGUodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcblxuICAgICAgY2FzZSAnYmFzZTY0JzpcbiAgICAgICAgLy8gV2FybmluZzogbWF4TGVuZ3RoIG5vdCB0YWtlbiBpbnRvIGFjY291bnQgaW4gYmFzZTY0V3JpdGVcbiAgICAgICAgcmV0dXJuIGJhc2U2NFdyaXRlKHRoaXMsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpXG5cbiAgICAgIGNhc2UgJ3VjczInOlxuICAgICAgY2FzZSAndWNzLTInOlxuICAgICAgY2FzZSAndXRmMTZsZSc6XG4gICAgICBjYXNlICd1dGYtMTZsZSc6XG4gICAgICAgIHJldHVybiB1Y3MyV3JpdGUodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKGxvd2VyZWRDYXNlKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbmtub3duIGVuY29kaW5nOiAnICsgZW5jb2RpbmcpXG4gICAgICAgIGVuY29kaW5nID0gKCcnICsgZW5jb2RpbmcpLnRvTG93ZXJDYXNlKClcbiAgICAgICAgbG93ZXJlZENhc2UgPSB0cnVlXG4gICAgfVxuICB9XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gdG9KU09OICgpIHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiAnQnVmZmVyJyxcbiAgICBkYXRhOiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0aGlzLl9hcnIgfHwgdGhpcywgMClcbiAgfVxufVxuXG5mdW5jdGlvbiBiYXNlNjRTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIGlmIChzdGFydCA9PT0gMCAmJiBlbmQgPT09IGJ1Zi5sZW5ndGgpIHtcbiAgICByZXR1cm4gYmFzZTY0LmZyb21CeXRlQXJyYXkoYnVmKVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBiYXNlNjQuZnJvbUJ5dGVBcnJheShidWYuc2xpY2Uoc3RhcnQsIGVuZCkpXG4gIH1cbn1cblxuZnVuY3Rpb24gdXRmOFNsaWNlIChidWYsIHN0YXJ0LCBlbmQpIHtcbiAgZW5kID0gTWF0aC5taW4oYnVmLmxlbmd0aCwgZW5kKVxuICB2YXIgcmVzID0gW11cblxuICB2YXIgaSA9IHN0YXJ0XG4gIHdoaWxlIChpIDwgZW5kKSB7XG4gICAgdmFyIGZpcnN0Qnl0ZSA9IGJ1ZltpXVxuICAgIHZhciBjb2RlUG9pbnQgPSBudWxsXG4gICAgdmFyIGJ5dGVzUGVyU2VxdWVuY2UgPSAoZmlyc3RCeXRlID4gMHhFRikgPyA0XG4gICAgICA6IChmaXJzdEJ5dGUgPiAweERGKSA/IDNcbiAgICAgIDogKGZpcnN0Qnl0ZSA+IDB4QkYpID8gMlxuICAgICAgOiAxXG5cbiAgICBpZiAoaSArIGJ5dGVzUGVyU2VxdWVuY2UgPD0gZW5kKSB7XG4gICAgICB2YXIgc2Vjb25kQnl0ZSwgdGhpcmRCeXRlLCBmb3VydGhCeXRlLCB0ZW1wQ29kZVBvaW50XG5cbiAgICAgIHN3aXRjaCAoYnl0ZXNQZXJTZXF1ZW5jZSkge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgaWYgKGZpcnN0Qnl0ZSA8IDB4ODApIHtcbiAgICAgICAgICAgIGNvZGVQb2ludCA9IGZpcnN0Qnl0ZVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgc2Vjb25kQnl0ZSA9IGJ1ZltpICsgMV1cbiAgICAgICAgICBpZiAoKHNlY29uZEJ5dGUgJiAweEMwKSA9PT0gMHg4MCkge1xuICAgICAgICAgICAgdGVtcENvZGVQb2ludCA9IChmaXJzdEJ5dGUgJiAweDFGKSA8PCAweDYgfCAoc2Vjb25kQnl0ZSAmIDB4M0YpXG4gICAgICAgICAgICBpZiAodGVtcENvZGVQb2ludCA+IDB4N0YpIHtcbiAgICAgICAgICAgICAgY29kZVBvaW50ID0gdGVtcENvZGVQb2ludFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgc2Vjb25kQnl0ZSA9IGJ1ZltpICsgMV1cbiAgICAgICAgICB0aGlyZEJ5dGUgPSBidWZbaSArIDJdXG4gICAgICAgICAgaWYgKChzZWNvbmRCeXRlICYgMHhDMCkgPT09IDB4ODAgJiYgKHRoaXJkQnl0ZSAmIDB4QzApID09PSAweDgwKSB7XG4gICAgICAgICAgICB0ZW1wQ29kZVBvaW50ID0gKGZpcnN0Qnl0ZSAmIDB4RikgPDwgMHhDIHwgKHNlY29uZEJ5dGUgJiAweDNGKSA8PCAweDYgfCAodGhpcmRCeXRlICYgMHgzRilcbiAgICAgICAgICAgIGlmICh0ZW1wQ29kZVBvaW50ID4gMHg3RkYgJiYgKHRlbXBDb2RlUG9pbnQgPCAweEQ4MDAgfHwgdGVtcENvZGVQb2ludCA+IDB4REZGRikpIHtcbiAgICAgICAgICAgICAgY29kZVBvaW50ID0gdGVtcENvZGVQb2ludFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgc2Vjb25kQnl0ZSA9IGJ1ZltpICsgMV1cbiAgICAgICAgICB0aGlyZEJ5dGUgPSBidWZbaSArIDJdXG4gICAgICAgICAgZm91cnRoQnl0ZSA9IGJ1ZltpICsgM11cbiAgICAgICAgICBpZiAoKHNlY29uZEJ5dGUgJiAweEMwKSA9PT0gMHg4MCAmJiAodGhpcmRCeXRlICYgMHhDMCkgPT09IDB4ODAgJiYgKGZvdXJ0aEJ5dGUgJiAweEMwKSA9PT0gMHg4MCkge1xuICAgICAgICAgICAgdGVtcENvZGVQb2ludCA9IChmaXJzdEJ5dGUgJiAweEYpIDw8IDB4MTIgfCAoc2Vjb25kQnl0ZSAmIDB4M0YpIDw8IDB4QyB8ICh0aGlyZEJ5dGUgJiAweDNGKSA8PCAweDYgfCAoZm91cnRoQnl0ZSAmIDB4M0YpXG4gICAgICAgICAgICBpZiAodGVtcENvZGVQb2ludCA+IDB4RkZGRiAmJiB0ZW1wQ29kZVBvaW50IDwgMHgxMTAwMDApIHtcbiAgICAgICAgICAgICAgY29kZVBvaW50ID0gdGVtcENvZGVQb2ludFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY29kZVBvaW50ID09PSBudWxsKSB7XG4gICAgICAvLyB3ZSBkaWQgbm90IGdlbmVyYXRlIGEgdmFsaWQgY29kZVBvaW50IHNvIGluc2VydCBhXG4gICAgICAvLyByZXBsYWNlbWVudCBjaGFyIChVK0ZGRkQpIGFuZCBhZHZhbmNlIG9ubHkgMSBieXRlXG4gICAgICBjb2RlUG9pbnQgPSAweEZGRkRcbiAgICAgIGJ5dGVzUGVyU2VxdWVuY2UgPSAxXG4gICAgfSBlbHNlIGlmIChjb2RlUG9pbnQgPiAweEZGRkYpIHtcbiAgICAgIC8vIGVuY29kZSB0byB1dGYxNiAoc3Vycm9nYXRlIHBhaXIgZGFuY2UpXG4gICAgICBjb2RlUG9pbnQgLT0gMHgxMDAwMFxuICAgICAgcmVzLnB1c2goY29kZVBvaW50ID4+PiAxMCAmIDB4M0ZGIHwgMHhEODAwKVxuICAgICAgY29kZVBvaW50ID0gMHhEQzAwIHwgY29kZVBvaW50ICYgMHgzRkZcbiAgICB9XG5cbiAgICByZXMucHVzaChjb2RlUG9pbnQpXG4gICAgaSArPSBieXRlc1BlclNlcXVlbmNlXG4gIH1cblxuICByZXR1cm4gZGVjb2RlQ29kZVBvaW50c0FycmF5KHJlcylcbn1cblxuLy8gQmFzZWQgb24gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMjI3NDcyNzIvNjgwNzQyLCB0aGUgYnJvd3NlciB3aXRoXG4vLyB0aGUgbG93ZXN0IGxpbWl0IGlzIENocm9tZSwgd2l0aCAweDEwMDAwIGFyZ3MuXG4vLyBXZSBnbyAxIG1hZ25pdHVkZSBsZXNzLCBmb3Igc2FmZXR5XG52YXIgTUFYX0FSR1VNRU5UU19MRU5HVEggPSAweDEwMDBcblxuZnVuY3Rpb24gZGVjb2RlQ29kZVBvaW50c0FycmF5IChjb2RlUG9pbnRzKSB7XG4gIHZhciBsZW4gPSBjb2RlUG9pbnRzLmxlbmd0aFxuICBpZiAobGVuIDw9IE1BWF9BUkdVTUVOVFNfTEVOR1RIKSB7XG4gICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLCBjb2RlUG9pbnRzKSAvLyBhdm9pZCBleHRyYSBzbGljZSgpXG4gIH1cblxuICAvLyBEZWNvZGUgaW4gY2h1bmtzIHRvIGF2b2lkIFwiY2FsbCBzdGFjayBzaXplIGV4Y2VlZGVkXCIuXG4gIHZhciByZXMgPSAnJ1xuICB2YXIgaSA9IDBcbiAgd2hpbGUgKGkgPCBsZW4pIHtcbiAgICByZXMgKz0gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShcbiAgICAgIFN0cmluZyxcbiAgICAgIGNvZGVQb2ludHMuc2xpY2UoaSwgaSArPSBNQVhfQVJHVU1FTlRTX0xFTkdUSClcbiAgICApXG4gIH1cbiAgcmV0dXJuIHJlc1xufVxuXG5mdW5jdGlvbiBhc2NpaVNsaWNlIChidWYsIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIHJldCA9ICcnXG4gIGVuZCA9IE1hdGgubWluKGJ1Zi5sZW5ndGgsIGVuZClcblxuICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPCBlbmQ7ICsraSkge1xuICAgIHJldCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGJ1ZltpXSAmIDB4N0YpXG4gIH1cbiAgcmV0dXJuIHJldFxufVxuXG5mdW5jdGlvbiBsYXRpbjFTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIHZhciByZXQgPSAnJ1xuICBlbmQgPSBNYXRoLm1pbihidWYubGVuZ3RoLCBlbmQpXG5cbiAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgZW5kOyArK2kpIHtcbiAgICByZXQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShidWZbaV0pXG4gIH1cbiAgcmV0dXJuIHJldFxufVxuXG5mdW5jdGlvbiBoZXhTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIHZhciBsZW4gPSBidWYubGVuZ3RoXG5cbiAgaWYgKCFzdGFydCB8fCBzdGFydCA8IDApIHN0YXJ0ID0gMFxuICBpZiAoIWVuZCB8fCBlbmQgPCAwIHx8IGVuZCA+IGxlbikgZW5kID0gbGVuXG5cbiAgdmFyIG91dCA9ICcnXG4gIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGVuZDsgKytpKSB7XG4gICAgb3V0ICs9IHRvSGV4KGJ1ZltpXSlcbiAgfVxuICByZXR1cm4gb3V0XG59XG5cbmZ1bmN0aW9uIHV0ZjE2bGVTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIHZhciBieXRlcyA9IGJ1Zi5zbGljZShzdGFydCwgZW5kKVxuICB2YXIgcmVzID0gJydcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBieXRlcy5sZW5ndGg7IGkgKz0gMikge1xuICAgIHJlcyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGJ5dGVzW2ldICsgYnl0ZXNbaSArIDFdICogMjU2KVxuICB9XG4gIHJldHVybiByZXNcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5zbGljZSA9IGZ1bmN0aW9uIHNsaWNlIChzdGFydCwgZW5kKSB7XG4gIHZhciBsZW4gPSB0aGlzLmxlbmd0aFxuICBzdGFydCA9IH5+c3RhcnRcbiAgZW5kID0gZW5kID09PSB1bmRlZmluZWQgPyBsZW4gOiB+fmVuZFxuXG4gIGlmIChzdGFydCA8IDApIHtcbiAgICBzdGFydCArPSBsZW5cbiAgICBpZiAoc3RhcnQgPCAwKSBzdGFydCA9IDBcbiAgfSBlbHNlIGlmIChzdGFydCA+IGxlbikge1xuICAgIHN0YXJ0ID0gbGVuXG4gIH1cblxuICBpZiAoZW5kIDwgMCkge1xuICAgIGVuZCArPSBsZW5cbiAgICBpZiAoZW5kIDwgMCkgZW5kID0gMFxuICB9IGVsc2UgaWYgKGVuZCA+IGxlbikge1xuICAgIGVuZCA9IGxlblxuICB9XG5cbiAgaWYgKGVuZCA8IHN0YXJ0KSBlbmQgPSBzdGFydFxuXG4gIHZhciBuZXdCdWZcbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgbmV3QnVmID0gdGhpcy5zdWJhcnJheShzdGFydCwgZW5kKVxuICAgIG5ld0J1Zi5fX3Byb3RvX18gPSBCdWZmZXIucHJvdG90eXBlXG4gIH0gZWxzZSB7XG4gICAgdmFyIHNsaWNlTGVuID0gZW5kIC0gc3RhcnRcbiAgICBuZXdCdWYgPSBuZXcgQnVmZmVyKHNsaWNlTGVuLCB1bmRlZmluZWQpXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzbGljZUxlbjsgKytpKSB7XG4gICAgICBuZXdCdWZbaV0gPSB0aGlzW2kgKyBzdGFydF1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV3QnVmXG59XG5cbi8qXG4gKiBOZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IGJ1ZmZlciBpc24ndCB0cnlpbmcgdG8gd3JpdGUgb3V0IG9mIGJvdW5kcy5cbiAqL1xuZnVuY3Rpb24gY2hlY2tPZmZzZXQgKG9mZnNldCwgZXh0LCBsZW5ndGgpIHtcbiAgaWYgKChvZmZzZXQgJSAxKSAhPT0gMCB8fCBvZmZzZXQgPCAwKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignb2Zmc2V0IGlzIG5vdCB1aW50JylcbiAgaWYgKG9mZnNldCArIGV4dCA+IGxlbmd0aCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RyeWluZyB0byBhY2Nlc3MgYmV5b25kIGJ1ZmZlciBsZW5ndGgnKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50TEUgPSBmdW5jdGlvbiByZWFkVUludExFIChvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgYnl0ZUxlbmd0aCwgdGhpcy5sZW5ndGgpXG5cbiAgdmFyIHZhbCA9IHRoaXNbb2Zmc2V0XVxuICB2YXIgbXVsID0gMVxuICB2YXIgaSA9IDBcbiAgd2hpbGUgKCsraSA8IGJ5dGVMZW5ndGggJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICB2YWwgKz0gdGhpc1tvZmZzZXQgKyBpXSAqIG11bFxuICB9XG5cbiAgcmV0dXJuIHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50QkUgPSBmdW5jdGlvbiByZWFkVUludEJFIChvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggfCAwXG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICBjaGVja09mZnNldChvZmZzZXQsIGJ5dGVMZW5ndGgsIHRoaXMubGVuZ3RoKVxuICB9XG5cbiAgdmFyIHZhbCA9IHRoaXNbb2Zmc2V0ICsgLS1ieXRlTGVuZ3RoXVxuICB2YXIgbXVsID0gMVxuICB3aGlsZSAoYnl0ZUxlbmd0aCA+IDAgJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICB2YWwgKz0gdGhpc1tvZmZzZXQgKyAtLWJ5dGVMZW5ndGhdICogbXVsXG4gIH1cblxuICByZXR1cm4gdmFsXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnQ4ID0gZnVuY3Rpb24gcmVhZFVJbnQ4IChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMSwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiB0aGlzW29mZnNldF1cbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludDE2TEUgPSBmdW5jdGlvbiByZWFkVUludDE2TEUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCAyLCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuIHRoaXNbb2Zmc2V0XSB8ICh0aGlzW29mZnNldCArIDFdIDw8IDgpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnQxNkJFID0gZnVuY3Rpb24gcmVhZFVJbnQxNkJFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMiwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiAodGhpc1tvZmZzZXRdIDw8IDgpIHwgdGhpc1tvZmZzZXQgKyAxXVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50MzJMRSA9IGZ1bmN0aW9uIHJlYWRVSW50MzJMRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDQsIHRoaXMubGVuZ3RoKVxuXG4gIHJldHVybiAoKHRoaXNbb2Zmc2V0XSkgfFxuICAgICAgKHRoaXNbb2Zmc2V0ICsgMV0gPDwgOCkgfFxuICAgICAgKHRoaXNbb2Zmc2V0ICsgMl0gPDwgMTYpKSArXG4gICAgICAodGhpc1tvZmZzZXQgKyAzXSAqIDB4MTAwMDAwMClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludDMyQkUgPSBmdW5jdGlvbiByZWFkVUludDMyQkUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aClcblxuICByZXR1cm4gKHRoaXNbb2Zmc2V0XSAqIDB4MTAwMDAwMCkgK1xuICAgICgodGhpc1tvZmZzZXQgKyAxXSA8PCAxNikgfFxuICAgICh0aGlzW29mZnNldCArIDJdIDw8IDgpIHxcbiAgICB0aGlzW29mZnNldCArIDNdKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnRMRSA9IGZ1bmN0aW9uIHJlYWRJbnRMRSAob2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoIHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIGJ5dGVMZW5ndGgsIHRoaXMubGVuZ3RoKVxuXG4gIHZhciB2YWwgPSB0aGlzW29mZnNldF1cbiAgdmFyIG11bCA9IDFcbiAgdmFyIGkgPSAwXG4gIHdoaWxlICgrK2kgPCBieXRlTGVuZ3RoICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgdmFsICs9IHRoaXNbb2Zmc2V0ICsgaV0gKiBtdWxcbiAgfVxuICBtdWwgKj0gMHg4MFxuXG4gIGlmICh2YWwgPj0gbXVsKSB2YWwgLT0gTWF0aC5wb3coMiwgOCAqIGJ5dGVMZW5ndGgpXG5cbiAgcmV0dXJuIHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnRCRSA9IGZ1bmN0aW9uIHJlYWRJbnRCRSAob2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoIHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIGJ5dGVMZW5ndGgsIHRoaXMubGVuZ3RoKVxuXG4gIHZhciBpID0gYnl0ZUxlbmd0aFxuICB2YXIgbXVsID0gMVxuICB2YXIgdmFsID0gdGhpc1tvZmZzZXQgKyAtLWldXG4gIHdoaWxlIChpID4gMCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIHZhbCArPSB0aGlzW29mZnNldCArIC0taV0gKiBtdWxcbiAgfVxuICBtdWwgKj0gMHg4MFxuXG4gIGlmICh2YWwgPj0gbXVsKSB2YWwgLT0gTWF0aC5wb3coMiwgOCAqIGJ5dGVMZW5ndGgpXG5cbiAgcmV0dXJuIHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnQ4ID0gZnVuY3Rpb24gcmVhZEludDggKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCAxLCB0aGlzLmxlbmd0aClcbiAgaWYgKCEodGhpc1tvZmZzZXRdICYgMHg4MCkpIHJldHVybiAodGhpc1tvZmZzZXRdKVxuICByZXR1cm4gKCgweGZmIC0gdGhpc1tvZmZzZXRdICsgMSkgKiAtMSlcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50MTZMRSA9IGZ1bmN0aW9uIHJlYWRJbnQxNkxFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMiwgdGhpcy5sZW5ndGgpXG4gIHZhciB2YWwgPSB0aGlzW29mZnNldF0gfCAodGhpc1tvZmZzZXQgKyAxXSA8PCA4KVxuICByZXR1cm4gKHZhbCAmIDB4ODAwMCkgPyB2YWwgfCAweEZGRkYwMDAwIDogdmFsXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludDE2QkUgPSBmdW5jdGlvbiByZWFkSW50MTZCRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDIsIHRoaXMubGVuZ3RoKVxuICB2YXIgdmFsID0gdGhpc1tvZmZzZXQgKyAxXSB8ICh0aGlzW29mZnNldF0gPDwgOClcbiAgcmV0dXJuICh2YWwgJiAweDgwMDApID8gdmFsIHwgMHhGRkZGMDAwMCA6IHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnQzMkxFID0gZnVuY3Rpb24gcmVhZEludDMyTEUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aClcblxuICByZXR1cm4gKHRoaXNbb2Zmc2V0XSkgfFxuICAgICh0aGlzW29mZnNldCArIDFdIDw8IDgpIHxcbiAgICAodGhpc1tvZmZzZXQgKyAyXSA8PCAxNikgfFxuICAgICh0aGlzW29mZnNldCArIDNdIDw8IDI0KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnQzMkJFID0gZnVuY3Rpb24gcmVhZEludDMyQkUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aClcblxuICByZXR1cm4gKHRoaXNbb2Zmc2V0XSA8PCAyNCkgfFxuICAgICh0aGlzW29mZnNldCArIDFdIDw8IDE2KSB8XG4gICAgKHRoaXNbb2Zmc2V0ICsgMl0gPDwgOCkgfFxuICAgICh0aGlzW29mZnNldCArIDNdKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRGbG9hdExFID0gZnVuY3Rpb24gcmVhZEZsb2F0TEUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuIGllZWU3NTQucmVhZCh0aGlzLCBvZmZzZXQsIHRydWUsIDIzLCA0KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRGbG9hdEJFID0gZnVuY3Rpb24gcmVhZEZsb2F0QkUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuIGllZWU3NTQucmVhZCh0aGlzLCBvZmZzZXQsIGZhbHNlLCAyMywgNClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkRG91YmxlTEUgPSBmdW5jdGlvbiByZWFkRG91YmxlTEUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA4LCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuIGllZWU3NTQucmVhZCh0aGlzLCBvZmZzZXQsIHRydWUsIDUyLCA4KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWREb3VibGVCRSA9IGZ1bmN0aW9uIHJlYWREb3VibGVCRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDgsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gaWVlZTc1NC5yZWFkKHRoaXMsIG9mZnNldCwgZmFsc2UsIDUyLCA4KVxufVxuXG5mdW5jdGlvbiBjaGVja0ludCAoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBleHQsIG1heCwgbWluKSB7XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKGJ1ZikpIHRocm93IG5ldyBUeXBlRXJyb3IoJ1wiYnVmZmVyXCIgYXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciBpbnN0YW5jZScpXG4gIGlmICh2YWx1ZSA+IG1heCB8fCB2YWx1ZSA8IG1pbikgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1widmFsdWVcIiBhcmd1bWVudCBpcyBvdXQgb2YgYm91bmRzJylcbiAgaWYgKG9mZnNldCArIGV4dCA+IGJ1Zi5sZW5ndGgpIHRocm93IG5ldyBSYW5nZUVycm9yKCdJbmRleCBvdXQgb2YgcmFuZ2UnKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludExFID0gZnVuY3Rpb24gd3JpdGVVSW50TEUgKHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggfCAwXG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICB2YXIgbWF4Qnl0ZXMgPSBNYXRoLnBvdygyLCA4ICogYnl0ZUxlbmd0aCkgLSAxXG4gICAgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbWF4Qnl0ZXMsIDApXG4gIH1cblxuICB2YXIgbXVsID0gMVxuICB2YXIgaSA9IDBcbiAgdGhpc1tvZmZzZXRdID0gdmFsdWUgJiAweEZGXG4gIHdoaWxlICgrK2kgPCBieXRlTGVuZ3RoICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgdGhpc1tvZmZzZXQgKyBpXSA9ICh2YWx1ZSAvIG11bCkgJiAweEZGXG4gIH1cblxuICByZXR1cm4gb2Zmc2V0ICsgYnl0ZUxlbmd0aFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludEJFID0gZnVuY3Rpb24gd3JpdGVVSW50QkUgKHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggfCAwXG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICB2YXIgbWF4Qnl0ZXMgPSBNYXRoLnBvdygyLCA4ICogYnl0ZUxlbmd0aCkgLSAxXG4gICAgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbWF4Qnl0ZXMsIDApXG4gIH1cblxuICB2YXIgaSA9IGJ5dGVMZW5ndGggLSAxXG4gIHZhciBtdWwgPSAxXG4gIHRoaXNbb2Zmc2V0ICsgaV0gPSB2YWx1ZSAmIDB4RkZcbiAgd2hpbGUgKC0taSA+PSAwICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgdGhpc1tvZmZzZXQgKyBpXSA9ICh2YWx1ZSAvIG11bCkgJiAweEZGXG4gIH1cblxuICByZXR1cm4gb2Zmc2V0ICsgYnl0ZUxlbmd0aFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludDggPSBmdW5jdGlvbiB3cml0ZVVJbnQ4ICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDEsIDB4ZmYsIDApXG4gIGlmICghQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHZhbHVlID0gTWF0aC5mbG9vcih2YWx1ZSlcbiAgdGhpc1tvZmZzZXRdID0gKHZhbHVlICYgMHhmZilcbiAgcmV0dXJuIG9mZnNldCArIDFcbn1cblxuZnVuY3Rpb24gb2JqZWN0V3JpdGVVSW50MTYgKGJ1ZiwgdmFsdWUsIG9mZnNldCwgbGl0dGxlRW5kaWFuKSB7XG4gIGlmICh2YWx1ZSA8IDApIHZhbHVlID0gMHhmZmZmICsgdmFsdWUgKyAxXG4gIGZvciAodmFyIGkgPSAwLCBqID0gTWF0aC5taW4oYnVmLmxlbmd0aCAtIG9mZnNldCwgMik7IGkgPCBqOyArK2kpIHtcbiAgICBidWZbb2Zmc2V0ICsgaV0gPSAodmFsdWUgJiAoMHhmZiA8PCAoOCAqIChsaXR0bGVFbmRpYW4gPyBpIDogMSAtIGkpKSkpID4+PlxuICAgICAgKGxpdHRsZUVuZGlhbiA/IGkgOiAxIC0gaSkgKiA4XG4gIH1cbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnQxNkxFID0gZnVuY3Rpb24gd3JpdGVVSW50MTZMRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAyLCAweGZmZmYsIDApXG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSAmIDB4ZmYpXG4gICAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gOClcbiAgfSBlbHNlIHtcbiAgICBvYmplY3RXcml0ZVVJbnQxNih0aGlzLCB2YWx1ZSwgb2Zmc2V0LCB0cnVlKVxuICB9XG4gIHJldHVybiBvZmZzZXQgKyAyXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50MTZCRSA9IGZ1bmN0aW9uIHdyaXRlVUludDE2QkUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMiwgMHhmZmZmLCAwKVxuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICB0aGlzW29mZnNldF0gPSAodmFsdWUgPj4+IDgpXG4gICAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIH0gZWxzZSB7XG4gICAgb2JqZWN0V3JpdGVVSW50MTYodGhpcywgdmFsdWUsIG9mZnNldCwgZmFsc2UpXG4gIH1cbiAgcmV0dXJuIG9mZnNldCArIDJcbn1cblxuZnVuY3Rpb24gb2JqZWN0V3JpdGVVSW50MzIgKGJ1ZiwgdmFsdWUsIG9mZnNldCwgbGl0dGxlRW5kaWFuKSB7XG4gIGlmICh2YWx1ZSA8IDApIHZhbHVlID0gMHhmZmZmZmZmZiArIHZhbHVlICsgMVxuICBmb3IgKHZhciBpID0gMCwgaiA9IE1hdGgubWluKGJ1Zi5sZW5ndGggLSBvZmZzZXQsIDQpOyBpIDwgajsgKytpKSB7XG4gICAgYnVmW29mZnNldCArIGldID0gKHZhbHVlID4+PiAobGl0dGxlRW5kaWFuID8gaSA6IDMgLSBpKSAqIDgpICYgMHhmZlxuICB9XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50MzJMRSA9IGZ1bmN0aW9uIHdyaXRlVUludDMyTEUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgNCwgMHhmZmZmZmZmZiwgMClcbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgdGhpc1tvZmZzZXQgKyAzXSA9ICh2YWx1ZSA+Pj4gMjQpXG4gICAgdGhpc1tvZmZzZXQgKyAyXSA9ICh2YWx1ZSA+Pj4gMTYpXG4gICAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gOClcbiAgICB0aGlzW29mZnNldF0gPSAodmFsdWUgJiAweGZmKVxuICB9IGVsc2Uge1xuICAgIG9iamVjdFdyaXRlVUludDMyKHRoaXMsIHZhbHVlLCBvZmZzZXQsIHRydWUpXG4gIH1cbiAgcmV0dXJuIG9mZnNldCArIDRcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnQzMkJFID0gZnVuY3Rpb24gd3JpdGVVSW50MzJCRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCA0LCAweGZmZmZmZmZmLCAwKVxuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICB0aGlzW29mZnNldF0gPSAodmFsdWUgPj4+IDI0KVxuICAgIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgPj4+IDE2KVxuICAgIHRoaXNbb2Zmc2V0ICsgMl0gPSAodmFsdWUgPj4+IDgpXG4gICAgdGhpc1tvZmZzZXQgKyAzXSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIH0gZWxzZSB7XG4gICAgb2JqZWN0V3JpdGVVSW50MzIodGhpcywgdmFsdWUsIG9mZnNldCwgZmFsc2UpXG4gIH1cbiAgcmV0dXJuIG9mZnNldCArIDRcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludExFID0gZnVuY3Rpb24gd3JpdGVJbnRMRSAodmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgdmFyIGxpbWl0ID0gTWF0aC5wb3coMiwgOCAqIGJ5dGVMZW5ndGggLSAxKVxuXG4gICAgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbGltaXQgLSAxLCAtbGltaXQpXG4gIH1cblxuICB2YXIgaSA9IDBcbiAgdmFyIG11bCA9IDFcbiAgdmFyIHN1YiA9IDBcbiAgdGhpc1tvZmZzZXRdID0gdmFsdWUgJiAweEZGXG4gIHdoaWxlICgrK2kgPCBieXRlTGVuZ3RoICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgaWYgKHZhbHVlIDwgMCAmJiBzdWIgPT09IDAgJiYgdGhpc1tvZmZzZXQgKyBpIC0gMV0gIT09IDApIHtcbiAgICAgIHN1YiA9IDFcbiAgICB9XG4gICAgdGhpc1tvZmZzZXQgKyBpXSA9ICgodmFsdWUgLyBtdWwpID4+IDApIC0gc3ViICYgMHhGRlxuICB9XG5cbiAgcmV0dXJuIG9mZnNldCArIGJ5dGVMZW5ndGhcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludEJFID0gZnVuY3Rpb24gd3JpdGVJbnRCRSAodmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgdmFyIGxpbWl0ID0gTWF0aC5wb3coMiwgOCAqIGJ5dGVMZW5ndGggLSAxKVxuXG4gICAgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbGltaXQgLSAxLCAtbGltaXQpXG4gIH1cblxuICB2YXIgaSA9IGJ5dGVMZW5ndGggLSAxXG4gIHZhciBtdWwgPSAxXG4gIHZhciBzdWIgPSAwXG4gIHRoaXNbb2Zmc2V0ICsgaV0gPSB2YWx1ZSAmIDB4RkZcbiAgd2hpbGUgKC0taSA+PSAwICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgaWYgKHZhbHVlIDwgMCAmJiBzdWIgPT09IDAgJiYgdGhpc1tvZmZzZXQgKyBpICsgMV0gIT09IDApIHtcbiAgICAgIHN1YiA9IDFcbiAgICB9XG4gICAgdGhpc1tvZmZzZXQgKyBpXSA9ICgodmFsdWUgLyBtdWwpID4+IDApIC0gc3ViICYgMHhGRlxuICB9XG5cbiAgcmV0dXJuIG9mZnNldCArIGJ5dGVMZW5ndGhcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludDggPSBmdW5jdGlvbiB3cml0ZUludDggKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMSwgMHg3ZiwgLTB4ODApXG4gIGlmICghQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHZhbHVlID0gTWF0aC5mbG9vcih2YWx1ZSlcbiAgaWYgKHZhbHVlIDwgMCkgdmFsdWUgPSAweGZmICsgdmFsdWUgKyAxXG4gIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIHJldHVybiBvZmZzZXQgKyAxXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnQxNkxFID0gZnVuY3Rpb24gd3JpdGVJbnQxNkxFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDIsIDB4N2ZmZiwgLTB4ODAwMClcbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgdGhpc1tvZmZzZXRdID0gKHZhbHVlICYgMHhmZilcbiAgICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlID4+PiA4KVxuICB9IGVsc2Uge1xuICAgIG9iamVjdFdyaXRlVUludDE2KHRoaXMsIHZhbHVlLCBvZmZzZXQsIHRydWUpXG4gIH1cbiAgcmV0dXJuIG9mZnNldCArIDJcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludDE2QkUgPSBmdW5jdGlvbiB3cml0ZUludDE2QkUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMiwgMHg3ZmZmLCAtMHg4MDAwKVxuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICB0aGlzW29mZnNldF0gPSAodmFsdWUgPj4+IDgpXG4gICAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIH0gZWxzZSB7XG4gICAgb2JqZWN0V3JpdGVVSW50MTYodGhpcywgdmFsdWUsIG9mZnNldCwgZmFsc2UpXG4gIH1cbiAgcmV0dXJuIG9mZnNldCArIDJcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludDMyTEUgPSBmdW5jdGlvbiB3cml0ZUludDMyTEUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgNCwgMHg3ZmZmZmZmZiwgLTB4ODAwMDAwMDApXG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSAmIDB4ZmYpXG4gICAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gOClcbiAgICB0aGlzW29mZnNldCArIDJdID0gKHZhbHVlID4+PiAxNilcbiAgICB0aGlzW29mZnNldCArIDNdID0gKHZhbHVlID4+PiAyNClcbiAgfSBlbHNlIHtcbiAgICBvYmplY3RXcml0ZVVJbnQzMih0aGlzLCB2YWx1ZSwgb2Zmc2V0LCB0cnVlKVxuICB9XG4gIHJldHVybiBvZmZzZXQgKyA0XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnQzMkJFID0gZnVuY3Rpb24gd3JpdGVJbnQzMkJFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDQsIDB4N2ZmZmZmZmYsIC0weDgwMDAwMDAwKVxuICBpZiAodmFsdWUgPCAwKSB2YWx1ZSA9IDB4ZmZmZmZmZmYgKyB2YWx1ZSArIDFcbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgdGhpc1tvZmZzZXRdID0gKHZhbHVlID4+PiAyNClcbiAgICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlID4+PiAxNilcbiAgICB0aGlzW29mZnNldCArIDJdID0gKHZhbHVlID4+PiA4KVxuICAgIHRoaXNbb2Zmc2V0ICsgM10gPSAodmFsdWUgJiAweGZmKVxuICB9IGVsc2Uge1xuICAgIG9iamVjdFdyaXRlVUludDMyKHRoaXMsIHZhbHVlLCBvZmZzZXQsIGZhbHNlKVxuICB9XG4gIHJldHVybiBvZmZzZXQgKyA0XG59XG5cbmZ1bmN0aW9uIGNoZWNrSUVFRTc1NCAoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBleHQsIG1heCwgbWluKSB7XG4gIGlmIChvZmZzZXQgKyBleHQgPiBidWYubGVuZ3RoKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignSW5kZXggb3V0IG9mIHJhbmdlJylcbiAgaWYgKG9mZnNldCA8IDApIHRocm93IG5ldyBSYW5nZUVycm9yKCdJbmRleCBvdXQgb2YgcmFuZ2UnKVxufVxuXG5mdW5jdGlvbiB3cml0ZUZsb2F0IChidWYsIHZhbHVlLCBvZmZzZXQsIGxpdHRsZUVuZGlhbiwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIGNoZWNrSUVFRTc1NChidWYsIHZhbHVlLCBvZmZzZXQsIDQsIDMuNDAyODIzNDY2Mzg1Mjg4NmUrMzgsIC0zLjQwMjgyMzQ2NjM4NTI4ODZlKzM4KVxuICB9XG4gIGllZWU3NTQud3JpdGUoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBsaXR0bGVFbmRpYW4sIDIzLCA0KVxuICByZXR1cm4gb2Zmc2V0ICsgNFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlRmxvYXRMRSA9IGZ1bmN0aW9uIHdyaXRlRmxvYXRMRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgcmV0dXJuIHdyaXRlRmxvYXQodGhpcywgdmFsdWUsIG9mZnNldCwgdHJ1ZSwgbm9Bc3NlcnQpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVGbG9hdEJFID0gZnVuY3Rpb24gd3JpdGVGbG9hdEJFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICByZXR1cm4gd3JpdGVGbG9hdCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBmYWxzZSwgbm9Bc3NlcnQpXG59XG5cbmZ1bmN0aW9uIHdyaXRlRG91YmxlIChidWYsIHZhbHVlLCBvZmZzZXQsIGxpdHRsZUVuZGlhbiwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIGNoZWNrSUVFRTc1NChidWYsIHZhbHVlLCBvZmZzZXQsIDgsIDEuNzk3NjkzMTM0ODYyMzE1N0UrMzA4LCAtMS43OTc2OTMxMzQ4NjIzMTU3RSszMDgpXG4gIH1cbiAgaWVlZTc1NC53cml0ZShidWYsIHZhbHVlLCBvZmZzZXQsIGxpdHRsZUVuZGlhbiwgNTIsIDgpXG4gIHJldHVybiBvZmZzZXQgKyA4XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVEb3VibGVMRSA9IGZ1bmN0aW9uIHdyaXRlRG91YmxlTEUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHJldHVybiB3cml0ZURvdWJsZSh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCB0cnVlLCBub0Fzc2VydClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZURvdWJsZUJFID0gZnVuY3Rpb24gd3JpdGVEb3VibGVCRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgcmV0dXJuIHdyaXRlRG91YmxlKHRoaXMsIHZhbHVlLCBvZmZzZXQsIGZhbHNlLCBub0Fzc2VydClcbn1cblxuLy8gY29weSh0YXJnZXRCdWZmZXIsIHRhcmdldFN0YXJ0PTAsIHNvdXJjZVN0YXJ0PTAsIHNvdXJjZUVuZD1idWZmZXIubGVuZ3RoKVxuQnVmZmVyLnByb3RvdHlwZS5jb3B5ID0gZnVuY3Rpb24gY29weSAodGFyZ2V0LCB0YXJnZXRTdGFydCwgc3RhcnQsIGVuZCkge1xuICBpZiAoIXN0YXJ0KSBzdGFydCA9IDBcbiAgaWYgKCFlbmQgJiYgZW5kICE9PSAwKSBlbmQgPSB0aGlzLmxlbmd0aFxuICBpZiAodGFyZ2V0U3RhcnQgPj0gdGFyZ2V0Lmxlbmd0aCkgdGFyZ2V0U3RhcnQgPSB0YXJnZXQubGVuZ3RoXG4gIGlmICghdGFyZ2V0U3RhcnQpIHRhcmdldFN0YXJ0ID0gMFxuICBpZiAoZW5kID4gMCAmJiBlbmQgPCBzdGFydCkgZW5kID0gc3RhcnRcblxuICAvLyBDb3B5IDAgYnl0ZXM7IHdlJ3JlIGRvbmVcbiAgaWYgKGVuZCA9PT0gc3RhcnQpIHJldHVybiAwXG4gIGlmICh0YXJnZXQubGVuZ3RoID09PSAwIHx8IHRoaXMubGVuZ3RoID09PSAwKSByZXR1cm4gMFxuXG4gIC8vIEZhdGFsIGVycm9yIGNvbmRpdGlvbnNcbiAgaWYgKHRhcmdldFN0YXJ0IDwgMCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCd0YXJnZXRTdGFydCBvdXQgb2YgYm91bmRzJylcbiAgfVxuICBpZiAoc3RhcnQgPCAwIHx8IHN0YXJ0ID49IHRoaXMubGVuZ3RoKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignc291cmNlU3RhcnQgb3V0IG9mIGJvdW5kcycpXG4gIGlmIChlbmQgPCAwKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignc291cmNlRW5kIG91dCBvZiBib3VuZHMnKVxuXG4gIC8vIEFyZSB3ZSBvb2I/XG4gIGlmIChlbmQgPiB0aGlzLmxlbmd0aCkgZW5kID0gdGhpcy5sZW5ndGhcbiAgaWYgKHRhcmdldC5sZW5ndGggLSB0YXJnZXRTdGFydCA8IGVuZCAtIHN0YXJ0KSB7XG4gICAgZW5kID0gdGFyZ2V0Lmxlbmd0aCAtIHRhcmdldFN0YXJ0ICsgc3RhcnRcbiAgfVxuXG4gIHZhciBsZW4gPSBlbmQgLSBzdGFydFxuICB2YXIgaVxuXG4gIGlmICh0aGlzID09PSB0YXJnZXQgJiYgc3RhcnQgPCB0YXJnZXRTdGFydCAmJiB0YXJnZXRTdGFydCA8IGVuZCkge1xuICAgIC8vIGRlc2NlbmRpbmcgY29weSBmcm9tIGVuZFxuICAgIGZvciAoaSA9IGxlbiAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICB0YXJnZXRbaSArIHRhcmdldFN0YXJ0XSA9IHRoaXNbaSArIHN0YXJ0XVxuICAgIH1cbiAgfSBlbHNlIGlmIChsZW4gPCAxMDAwIHx8ICFCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIC8vIGFzY2VuZGluZyBjb3B5IGZyb20gc3RhcnRcbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyArK2kpIHtcbiAgICAgIHRhcmdldFtpICsgdGFyZ2V0U3RhcnRdID0gdGhpc1tpICsgc3RhcnRdXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIFVpbnQ4QXJyYXkucHJvdG90eXBlLnNldC5jYWxsKFxuICAgICAgdGFyZ2V0LFxuICAgICAgdGhpcy5zdWJhcnJheShzdGFydCwgc3RhcnQgKyBsZW4pLFxuICAgICAgdGFyZ2V0U3RhcnRcbiAgICApXG4gIH1cblxuICByZXR1cm4gbGVuXG59XG5cbi8vIFVzYWdlOlxuLy8gICAgYnVmZmVyLmZpbGwobnVtYmVyWywgb2Zmc2V0WywgZW5kXV0pXG4vLyAgICBidWZmZXIuZmlsbChidWZmZXJbLCBvZmZzZXRbLCBlbmRdXSlcbi8vICAgIGJ1ZmZlci5maWxsKHN0cmluZ1ssIG9mZnNldFssIGVuZF1dWywgZW5jb2RpbmddKVxuQnVmZmVyLnByb3RvdHlwZS5maWxsID0gZnVuY3Rpb24gZmlsbCAodmFsLCBzdGFydCwgZW5kLCBlbmNvZGluZykge1xuICAvLyBIYW5kbGUgc3RyaW5nIGNhc2VzOlxuICBpZiAodHlwZW9mIHZhbCA9PT0gJ3N0cmluZycpIHtcbiAgICBpZiAodHlwZW9mIHN0YXJ0ID09PSAnc3RyaW5nJykge1xuICAgICAgZW5jb2RpbmcgPSBzdGFydFxuICAgICAgc3RhcnQgPSAwXG4gICAgICBlbmQgPSB0aGlzLmxlbmd0aFxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGVuZCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGVuY29kaW5nID0gZW5kXG4gICAgICBlbmQgPSB0aGlzLmxlbmd0aFxuICAgIH1cbiAgICBpZiAodmFsLmxlbmd0aCA9PT0gMSkge1xuICAgICAgdmFyIGNvZGUgPSB2YWwuY2hhckNvZGVBdCgwKVxuICAgICAgaWYgKGNvZGUgPCAyNTYpIHtcbiAgICAgICAgdmFsID0gY29kZVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoZW5jb2RpbmcgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgZW5jb2RpbmcgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdlbmNvZGluZyBtdXN0IGJlIGEgc3RyaW5nJylcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBlbmNvZGluZyA9PT0gJ3N0cmluZycgJiYgIUJ1ZmZlci5pc0VuY29kaW5nKGVuY29kaW5nKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVW5rbm93biBlbmNvZGluZzogJyArIGVuY29kaW5nKVxuICAgIH1cbiAgfSBlbHNlIGlmICh0eXBlb2YgdmFsID09PSAnbnVtYmVyJykge1xuICAgIHZhbCA9IHZhbCAmIDI1NVxuICB9XG5cbiAgLy8gSW52YWxpZCByYW5nZXMgYXJlIG5vdCBzZXQgdG8gYSBkZWZhdWx0LCBzbyBjYW4gcmFuZ2UgY2hlY2sgZWFybHkuXG4gIGlmIChzdGFydCA8IDAgfHwgdGhpcy5sZW5ndGggPCBzdGFydCB8fCB0aGlzLmxlbmd0aCA8IGVuZCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdPdXQgb2YgcmFuZ2UgaW5kZXgnKVxuICB9XG5cbiAgaWYgKGVuZCA8PSBzdGFydCkge1xuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICBzdGFydCA9IHN0YXJ0ID4+PiAwXG4gIGVuZCA9IGVuZCA9PT0gdW5kZWZpbmVkID8gdGhpcy5sZW5ndGggOiBlbmQgPj4+IDBcblxuICBpZiAoIXZhbCkgdmFsID0gMFxuXG4gIHZhciBpXG4gIGlmICh0eXBlb2YgdmFsID09PSAnbnVtYmVyJykge1xuICAgIGZvciAoaSA9IHN0YXJ0OyBpIDwgZW5kOyArK2kpIHtcbiAgICAgIHRoaXNbaV0gPSB2YWxcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdmFyIGJ5dGVzID0gQnVmZmVyLmlzQnVmZmVyKHZhbClcbiAgICAgID8gdmFsXG4gICAgICA6IHV0ZjhUb0J5dGVzKG5ldyBCdWZmZXIodmFsLCBlbmNvZGluZykudG9TdHJpbmcoKSlcbiAgICB2YXIgbGVuID0gYnl0ZXMubGVuZ3RoXG4gICAgZm9yIChpID0gMDsgaSA8IGVuZCAtIHN0YXJ0OyArK2kpIHtcbiAgICAgIHRoaXNbaSArIHN0YXJ0XSA9IGJ5dGVzW2kgJSBsZW5dXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRoaXNcbn1cblxuLy8gSEVMUEVSIEZVTkNUSU9OU1xuLy8gPT09PT09PT09PT09PT09PVxuXG52YXIgSU5WQUxJRF9CQVNFNjRfUkUgPSAvW14rXFwvMC05QS1aYS16LV9dL2dcblxuZnVuY3Rpb24gYmFzZTY0Y2xlYW4gKHN0cikge1xuICAvLyBOb2RlIHN0cmlwcyBvdXQgaW52YWxpZCBjaGFyYWN0ZXJzIGxpa2UgXFxuIGFuZCBcXHQgZnJvbSB0aGUgc3RyaW5nLCBiYXNlNjQtanMgZG9lcyBub3RcbiAgc3RyID0gc3RyaW5ndHJpbShzdHIpLnJlcGxhY2UoSU5WQUxJRF9CQVNFNjRfUkUsICcnKVxuICAvLyBOb2RlIGNvbnZlcnRzIHN0cmluZ3Mgd2l0aCBsZW5ndGggPCAyIHRvICcnXG4gIGlmIChzdHIubGVuZ3RoIDwgMikgcmV0dXJuICcnXG4gIC8vIE5vZGUgYWxsb3dzIGZvciBub24tcGFkZGVkIGJhc2U2NCBzdHJpbmdzIChtaXNzaW5nIHRyYWlsaW5nID09PSksIGJhc2U2NC1qcyBkb2VzIG5vdFxuICB3aGlsZSAoc3RyLmxlbmd0aCAlIDQgIT09IDApIHtcbiAgICBzdHIgPSBzdHIgKyAnPSdcbiAgfVxuICByZXR1cm4gc3RyXG59XG5cbmZ1bmN0aW9uIHN0cmluZ3RyaW0gKHN0cikge1xuICBpZiAoc3RyLnRyaW0pIHJldHVybiBzdHIudHJpbSgpXG4gIHJldHVybiBzdHIucmVwbGFjZSgvXlxccyt8XFxzKyQvZywgJycpXG59XG5cbmZ1bmN0aW9uIHRvSGV4IChuKSB7XG4gIGlmIChuIDwgMTYpIHJldHVybiAnMCcgKyBuLnRvU3RyaW5nKDE2KVxuICByZXR1cm4gbi50b1N0cmluZygxNilcbn1cblxuZnVuY3Rpb24gdXRmOFRvQnl0ZXMgKHN0cmluZywgdW5pdHMpIHtcbiAgdW5pdHMgPSB1bml0cyB8fCBJbmZpbml0eVxuICB2YXIgY29kZVBvaW50XG4gIHZhciBsZW5ndGggPSBzdHJpbmcubGVuZ3RoXG4gIHZhciBsZWFkU3Vycm9nYXRlID0gbnVsbFxuICB2YXIgYnl0ZXMgPSBbXVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiAgICBjb2RlUG9pbnQgPSBzdHJpbmcuY2hhckNvZGVBdChpKVxuXG4gICAgLy8gaXMgc3Vycm9nYXRlIGNvbXBvbmVudFxuICAgIGlmIChjb2RlUG9pbnQgPiAweEQ3RkYgJiYgY29kZVBvaW50IDwgMHhFMDAwKSB7XG4gICAgICAvLyBsYXN0IGNoYXIgd2FzIGEgbGVhZFxuICAgICAgaWYgKCFsZWFkU3Vycm9nYXRlKSB7XG4gICAgICAgIC8vIG5vIGxlYWQgeWV0XG4gICAgICAgIGlmIChjb2RlUG9pbnQgPiAweERCRkYpIHtcbiAgICAgICAgICAvLyB1bmV4cGVjdGVkIHRyYWlsXG4gICAgICAgICAgaWYgKCh1bml0cyAtPSAzKSA+IC0xKSBieXRlcy5wdXNoKDB4RUYsIDB4QkYsIDB4QkQpXG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfSBlbHNlIGlmIChpICsgMSA9PT0gbGVuZ3RoKSB7XG4gICAgICAgICAgLy8gdW5wYWlyZWQgbGVhZFxuICAgICAgICAgIGlmICgodW5pdHMgLT0gMykgPiAtMSkgYnl0ZXMucHVzaCgweEVGLCAweEJGLCAweEJEKVxuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cblxuICAgICAgICAvLyB2YWxpZCBsZWFkXG4gICAgICAgIGxlYWRTdXJyb2dhdGUgPSBjb2RlUG9pbnRcblxuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICAvLyAyIGxlYWRzIGluIGEgcm93XG4gICAgICBpZiAoY29kZVBvaW50IDwgMHhEQzAwKSB7XG4gICAgICAgIGlmICgodW5pdHMgLT0gMykgPiAtMSkgYnl0ZXMucHVzaCgweEVGLCAweEJGLCAweEJEKVxuICAgICAgICBsZWFkU3Vycm9nYXRlID0gY29kZVBvaW50XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIC8vIHZhbGlkIHN1cnJvZ2F0ZSBwYWlyXG4gICAgICBjb2RlUG9pbnQgPSAobGVhZFN1cnJvZ2F0ZSAtIDB4RDgwMCA8PCAxMCB8IGNvZGVQb2ludCAtIDB4REMwMCkgKyAweDEwMDAwXG4gICAgfSBlbHNlIGlmIChsZWFkU3Vycm9nYXRlKSB7XG4gICAgICAvLyB2YWxpZCBibXAgY2hhciwgYnV0IGxhc3QgY2hhciB3YXMgYSBsZWFkXG4gICAgICBpZiAoKHVuaXRzIC09IDMpID4gLTEpIGJ5dGVzLnB1c2goMHhFRiwgMHhCRiwgMHhCRClcbiAgICB9XG5cbiAgICBsZWFkU3Vycm9nYXRlID0gbnVsbFxuXG4gICAgLy8gZW5jb2RlIHV0ZjhcbiAgICBpZiAoY29kZVBvaW50IDwgMHg4MCkge1xuICAgICAgaWYgKCh1bml0cyAtPSAxKSA8IDApIGJyZWFrXG4gICAgICBieXRlcy5wdXNoKGNvZGVQb2ludClcbiAgICB9IGVsc2UgaWYgKGNvZGVQb2ludCA8IDB4ODAwKSB7XG4gICAgICBpZiAoKHVuaXRzIC09IDIpIDwgMCkgYnJlYWtcbiAgICAgIGJ5dGVzLnB1c2goXG4gICAgICAgIGNvZGVQb2ludCA+PiAweDYgfCAweEMwLFxuICAgICAgICBjb2RlUG9pbnQgJiAweDNGIHwgMHg4MFxuICAgICAgKVxuICAgIH0gZWxzZSBpZiAoY29kZVBvaW50IDwgMHgxMDAwMCkge1xuICAgICAgaWYgKCh1bml0cyAtPSAzKSA8IDApIGJyZWFrXG4gICAgICBieXRlcy5wdXNoKFxuICAgICAgICBjb2RlUG9pbnQgPj4gMHhDIHwgMHhFMCxcbiAgICAgICAgY29kZVBvaW50ID4+IDB4NiAmIDB4M0YgfCAweDgwLFxuICAgICAgICBjb2RlUG9pbnQgJiAweDNGIHwgMHg4MFxuICAgICAgKVxuICAgIH0gZWxzZSBpZiAoY29kZVBvaW50IDwgMHgxMTAwMDApIHtcbiAgICAgIGlmICgodW5pdHMgLT0gNCkgPCAwKSBicmVha1xuICAgICAgYnl0ZXMucHVzaChcbiAgICAgICAgY29kZVBvaW50ID4+IDB4MTIgfCAweEYwLFxuICAgICAgICBjb2RlUG9pbnQgPj4gMHhDICYgMHgzRiB8IDB4ODAsXG4gICAgICAgIGNvZGVQb2ludCA+PiAweDYgJiAweDNGIHwgMHg4MCxcbiAgICAgICAgY29kZVBvaW50ICYgMHgzRiB8IDB4ODBcbiAgICAgIClcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGNvZGUgcG9pbnQnKVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBieXRlc1xufVxuXG5mdW5jdGlvbiBhc2NpaVRvQnl0ZXMgKHN0cikge1xuICB2YXIgYnl0ZUFycmF5ID0gW11cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyArK2kpIHtcbiAgICAvLyBOb2RlJ3MgY29kZSBzZWVtcyB0byBiZSBkb2luZyB0aGlzIGFuZCBub3QgJiAweDdGLi5cbiAgICBieXRlQXJyYXkucHVzaChzdHIuY2hhckNvZGVBdChpKSAmIDB4RkYpXG4gIH1cbiAgcmV0dXJuIGJ5dGVBcnJheVxufVxuXG5mdW5jdGlvbiB1dGYxNmxlVG9CeXRlcyAoc3RyLCB1bml0cykge1xuICB2YXIgYywgaGksIGxvXG4gIHZhciBieXRlQXJyYXkgPSBbXVxuICBmb3IgKHZhciBpID0gMDsgaSA8IHN0ci5sZW5ndGg7ICsraSkge1xuICAgIGlmICgodW5pdHMgLT0gMikgPCAwKSBicmVha1xuXG4gICAgYyA9IHN0ci5jaGFyQ29kZUF0KGkpXG4gICAgaGkgPSBjID4+IDhcbiAgICBsbyA9IGMgJSAyNTZcbiAgICBieXRlQXJyYXkucHVzaChsbylcbiAgICBieXRlQXJyYXkucHVzaChoaSlcbiAgfVxuXG4gIHJldHVybiBieXRlQXJyYXlcbn1cblxuZnVuY3Rpb24gYmFzZTY0VG9CeXRlcyAoc3RyKSB7XG4gIHJldHVybiBiYXNlNjQudG9CeXRlQXJyYXkoYmFzZTY0Y2xlYW4oc3RyKSlcbn1cblxuZnVuY3Rpb24gYmxpdEJ1ZmZlciAoc3JjLCBkc3QsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiAgICBpZiAoKGkgKyBvZmZzZXQgPj0gZHN0Lmxlbmd0aCkgfHwgKGkgPj0gc3JjLmxlbmd0aCkpIGJyZWFrXG4gICAgZHN0W2kgKyBvZmZzZXRdID0gc3JjW2ldXG4gIH1cbiAgcmV0dXJuIGlcbn1cblxuZnVuY3Rpb24gaXNuYW4gKHZhbCkge1xuICByZXR1cm4gdmFsICE9PSB2YWwgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1zZWxmLWNvbXBhcmVcbn1cbiIsInZhciB0b1N0cmluZyA9IHt9LnRvU3RyaW5nO1xuXG5tb2R1bGUuZXhwb3J0cyA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gKGFycikge1xuICByZXR1cm4gdG9TdHJpbmcuY2FsbChhcnIpID09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9tb2R1bGVzL19jb3JlJyk7XG52YXIgJEpTT04gPSBjb3JlLkpTT04gfHwgKGNvcmUuSlNPTiA9IHsgc3RyaW5naWZ5OiBKU09OLnN0cmluZ2lmeSB9KTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gc3RyaW5naWZ5KGl0KSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgcmV0dXJuICRKU09OLnN0cmluZ2lmeS5hcHBseSgkSlNPTiwgYXJndW1lbnRzKTtcbn07XG4iLCJyZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzNi5vYmplY3Qua2V5cycpO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi8uLi9tb2R1bGVzL19jb3JlJykuT2JqZWN0LmtleXM7XG4iLCJyZXF1aXJlKCcuLi9tb2R1bGVzL2VzNi5vYmplY3QudG8tc3RyaW5nJyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzNi5zdHJpbmcuaXRlcmF0b3InKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvd2ViLmRvbS5pdGVyYWJsZScpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lczYucHJvbWlzZScpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lczcucHJvbWlzZS5maW5hbGx5Jyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzNy5wcm9taXNlLnRyeScpO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi9tb2R1bGVzL19jb3JlJykuUHJvbWlzZTtcbiIsInJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXM2LnN5bWJvbCcpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lczYub2JqZWN0LnRvLXN0cmluZycpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lczcuc3ltYm9sLmFzeW5jLWl0ZXJhdG9yJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzNy5zeW1ib2wub2JzZXJ2YWJsZScpO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi8uLi9tb2R1bGVzL19jb3JlJykuU3ltYm9sO1xuIiwicmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lczYuc3RyaW5nLml0ZXJhdG9yJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL3dlYi5kb20uaXRlcmFibGUnKTtcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9fd2tzLWV4dCcpLmYoJ2l0ZXJhdG9yJyk7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAodHlwZW9mIGl0ICE9ICdmdW5jdGlvbicpIHRocm93IFR5cGVFcnJvcihpdCArICcgaXMgbm90IGEgZnVuY3Rpb24hJyk7XG4gIHJldHVybiBpdDtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCBDb25zdHJ1Y3RvciwgbmFtZSwgZm9yYmlkZGVuRmllbGQpIHtcbiAgaWYgKCEoaXQgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikgfHwgKGZvcmJpZGRlbkZpZWxkICE9PSB1bmRlZmluZWQgJiYgZm9yYmlkZGVuRmllbGQgaW4gaXQpKSB7XG4gICAgdGhyb3cgVHlwZUVycm9yKG5hbWUgKyAnOiBpbmNvcnJlY3QgaW52b2NhdGlvbiEnKTtcbiAgfSByZXR1cm4gaXQ7XG59O1xuIiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoIWlzT2JqZWN0KGl0KSkgdGhyb3cgVHlwZUVycm9yKGl0ICsgJyBpcyBub3QgYW4gb2JqZWN0IScpO1xuICByZXR1cm4gaXQ7XG59O1xuIiwiLy8gZmFsc2UgLT4gQXJyYXkjaW5kZXhPZlxuLy8gdHJ1ZSAgLT4gQXJyYXkjaW5jbHVkZXNcbnZhciB0b0lPYmplY3QgPSByZXF1aXJlKCcuL190by1pb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciB0b0Fic29sdXRlSW5kZXggPSByZXF1aXJlKCcuL190by1hYnNvbHV0ZS1pbmRleCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoSVNfSU5DTFVERVMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgkdGhpcywgZWwsIGZyb21JbmRleCkge1xuICAgIHZhciBPID0gdG9JT2JqZWN0KCR0aGlzKTtcbiAgICB2YXIgbGVuZ3RoID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICAgIHZhciBpbmRleCA9IHRvQWJzb2x1dGVJbmRleChmcm9tSW5kZXgsIGxlbmd0aCk7XG4gICAgdmFyIHZhbHVlO1xuICAgIC8vIEFycmF5I2luY2x1ZGVzIHVzZXMgU2FtZVZhbHVlWmVybyBlcXVhbGl0eSBhbGdvcml0aG1cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgaWYgKElTX0lOQ0xVREVTICYmIGVsICE9IGVsKSB3aGlsZSAobGVuZ3RoID4gaW5kZXgpIHtcbiAgICAgIHZhbHVlID0gT1tpbmRleCsrXTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICAgIGlmICh2YWx1ZSAhPSB2YWx1ZSkgcmV0dXJuIHRydWU7XG4gICAgLy8gQXJyYXkjaW5kZXhPZiBpZ25vcmVzIGhvbGVzLCBBcnJheSNpbmNsdWRlcyAtIG5vdFxuICAgIH0gZWxzZSBmb3IgKDtsZW5ndGggPiBpbmRleDsgaW5kZXgrKykgaWYgKElTX0lOQ0xVREVTIHx8IGluZGV4IGluIE8pIHtcbiAgICAgIGlmIChPW2luZGV4XSA9PT0gZWwpIHJldHVybiBJU19JTkNMVURFUyB8fCBpbmRleCB8fCAwO1xuICAgIH0gcmV0dXJuICFJU19JTkNMVURFUyAmJiAtMTtcbiAgfTtcbn07XG4iLCIvLyBnZXR0aW5nIHRhZyBmcm9tIDE5LjEuMy42IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcoKVxudmFyIGNvZiA9IHJlcXVpcmUoJy4vX2NvZicpO1xudmFyIFRBRyA9IHJlcXVpcmUoJy4vX3drcycpKCd0b1N0cmluZ1RhZycpO1xuLy8gRVMzIHdyb25nIGhlcmVcbnZhciBBUkcgPSBjb2YoZnVuY3Rpb24gKCkgeyByZXR1cm4gYXJndW1lbnRzOyB9KCkpID09ICdBcmd1bWVudHMnO1xuXG4vLyBmYWxsYmFjayBmb3IgSUUxMSBTY3JpcHQgQWNjZXNzIERlbmllZCBlcnJvclxudmFyIHRyeUdldCA9IGZ1bmN0aW9uIChpdCwga2V5KSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGl0W2tleV07XG4gIH0gY2F0Y2ggKGUpIHsgLyogZW1wdHkgKi8gfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIE8sIFQsIEI7XG4gIHJldHVybiBpdCA9PT0gdW5kZWZpbmVkID8gJ1VuZGVmaW5lZCcgOiBpdCA9PT0gbnVsbCA/ICdOdWxsJ1xuICAgIC8vIEBAdG9TdHJpbmdUYWcgY2FzZVxuICAgIDogdHlwZW9mIChUID0gdHJ5R2V0KE8gPSBPYmplY3QoaXQpLCBUQUcpKSA9PSAnc3RyaW5nJyA/IFRcbiAgICAvLyBidWlsdGluVGFnIGNhc2VcbiAgICA6IEFSRyA/IGNvZihPKVxuICAgIC8vIEVTMyBhcmd1bWVudHMgZmFsbGJhY2tcbiAgICA6IChCID0gY29mKE8pKSA9PSAnT2JqZWN0JyAmJiB0eXBlb2YgTy5jYWxsZWUgPT0gJ2Z1bmN0aW9uJyA/ICdBcmd1bWVudHMnIDogQjtcbn07XG4iLCJ2YXIgdG9TdHJpbmcgPSB7fS50b1N0cmluZztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwoaXQpLnNsaWNlKDgsIC0xKTtcbn07XG4iLCJ2YXIgY29yZSA9IG1vZHVsZS5leHBvcnRzID0geyB2ZXJzaW9uOiAnMi42LjEwJyB9O1xuaWYgKHR5cGVvZiBfX2UgPT0gJ251bWJlcicpIF9fZSA9IGNvcmU7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5kZWZcbiIsIi8vIG9wdGlvbmFsIC8gc2ltcGxlIGNvbnRleHQgYmluZGluZ1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGZuLCB0aGF0LCBsZW5ndGgpIHtcbiAgYUZ1bmN0aW9uKGZuKTtcbiAgaWYgKHRoYXQgPT09IHVuZGVmaW5lZCkgcmV0dXJuIGZuO1xuICBzd2l0Y2ggKGxlbmd0aCkge1xuICAgIGNhc2UgMTogcmV0dXJuIGZ1bmN0aW9uIChhKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhKTtcbiAgICB9O1xuICAgIGNhc2UgMjogcmV0dXJuIGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhLCBiKTtcbiAgICB9O1xuICAgIGNhc2UgMzogcmV0dXJuIGZ1bmN0aW9uIChhLCBiLCBjKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhLCBiLCBjKTtcbiAgICB9O1xuICB9XG4gIHJldHVybiBmdW5jdGlvbiAoLyogLi4uYXJncyAqLykge1xuICAgIHJldHVybiBmbi5hcHBseSh0aGF0LCBhcmd1bWVudHMpO1xuICB9O1xufTtcbiIsIi8vIDcuMi4xIFJlcXVpcmVPYmplY3RDb2VyY2libGUoYXJndW1lbnQpXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoaXQgPT0gdW5kZWZpbmVkKSB0aHJvdyBUeXBlRXJyb3IoXCJDYW4ndCBjYWxsIG1ldGhvZCBvbiAgXCIgKyBpdCk7XG4gIHJldHVybiBpdDtcbn07XG4iLCIvLyBUaGFuaydzIElFOCBmb3IgaGlzIGZ1bm55IGRlZmluZVByb3BlcnR5XG5tb2R1bGUuZXhwb3J0cyA9ICFyZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwgJ2EnLCB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfSB9KS5hICE9IDc7XG59KTtcbiIsInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIGRvY3VtZW50ID0gcmVxdWlyZSgnLi9fZ2xvYmFsJykuZG9jdW1lbnQ7XG4vLyB0eXBlb2YgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCBpcyAnb2JqZWN0JyBpbiBvbGQgSUVcbnZhciBpcyA9IGlzT2JqZWN0KGRvY3VtZW50KSAmJiBpc09iamVjdChkb2N1bWVudC5jcmVhdGVFbGVtZW50KTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpcyA/IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoaXQpIDoge307XG59O1xuIiwiLy8gSUUgOC0gZG9uJ3QgZW51bSBidWcga2V5c1xubW9kdWxlLmV4cG9ydHMgPSAoXG4gICdjb25zdHJ1Y3RvcixoYXNPd25Qcm9wZXJ0eSxpc1Byb3RvdHlwZU9mLHByb3BlcnR5SXNFbnVtZXJhYmxlLHRvTG9jYWxlU3RyaW5nLHRvU3RyaW5nLHZhbHVlT2YnXG4pLnNwbGl0KCcsJyk7XG4iLCIvLyBhbGwgZW51bWVyYWJsZSBvYmplY3Qga2V5cywgaW5jbHVkZXMgc3ltYm9sc1xudmFyIGdldEtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cycpO1xudmFyIGdPUFMgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wcycpO1xudmFyIHBJRSA9IHJlcXVpcmUoJy4vX29iamVjdC1waWUnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciByZXN1bHQgPSBnZXRLZXlzKGl0KTtcbiAgdmFyIGdldFN5bWJvbHMgPSBnT1BTLmY7XG4gIGlmIChnZXRTeW1ib2xzKSB7XG4gICAgdmFyIHN5bWJvbHMgPSBnZXRTeW1ib2xzKGl0KTtcbiAgICB2YXIgaXNFbnVtID0gcElFLmY7XG4gICAgdmFyIGkgPSAwO1xuICAgIHZhciBrZXk7XG4gICAgd2hpbGUgKHN5bWJvbHMubGVuZ3RoID4gaSkgaWYgKGlzRW51bS5jYWxsKGl0LCBrZXkgPSBzeW1ib2xzW2krK10pKSByZXN1bHQucHVzaChrZXkpO1xuICB9IHJldHVybiByZXN1bHQ7XG59O1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIGNvcmUgPSByZXF1aXJlKCcuL19jb3JlJyk7XG52YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG52YXIgaGlkZSA9IHJlcXVpcmUoJy4vX2hpZGUnKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciBQUk9UT1RZUEUgPSAncHJvdG90eXBlJztcblxudmFyICRleHBvcnQgPSBmdW5jdGlvbiAodHlwZSwgbmFtZSwgc291cmNlKSB7XG4gIHZhciBJU19GT1JDRUQgPSB0eXBlICYgJGV4cG9ydC5GO1xuICB2YXIgSVNfR0xPQkFMID0gdHlwZSAmICRleHBvcnQuRztcbiAgdmFyIElTX1NUQVRJQyA9IHR5cGUgJiAkZXhwb3J0LlM7XG4gIHZhciBJU19QUk9UTyA9IHR5cGUgJiAkZXhwb3J0LlA7XG4gIHZhciBJU19CSU5EID0gdHlwZSAmICRleHBvcnQuQjtcbiAgdmFyIElTX1dSQVAgPSB0eXBlICYgJGV4cG9ydC5XO1xuICB2YXIgZXhwb3J0cyA9IElTX0dMT0JBTCA/IGNvcmUgOiBjb3JlW25hbWVdIHx8IChjb3JlW25hbWVdID0ge30pO1xuICB2YXIgZXhwUHJvdG8gPSBleHBvcnRzW1BST1RPVFlQRV07XG4gIHZhciB0YXJnZXQgPSBJU19HTE9CQUwgPyBnbG9iYWwgOiBJU19TVEFUSUMgPyBnbG9iYWxbbmFtZV0gOiAoZ2xvYmFsW25hbWVdIHx8IHt9KVtQUk9UT1RZUEVdO1xuICB2YXIga2V5LCBvd24sIG91dDtcbiAgaWYgKElTX0dMT0JBTCkgc291cmNlID0gbmFtZTtcbiAgZm9yIChrZXkgaW4gc291cmNlKSB7XG4gICAgLy8gY29udGFpbnMgaW4gbmF0aXZlXG4gICAgb3duID0gIUlTX0ZPUkNFRCAmJiB0YXJnZXQgJiYgdGFyZ2V0W2tleV0gIT09IHVuZGVmaW5lZDtcbiAgICBpZiAob3duICYmIGhhcyhleHBvcnRzLCBrZXkpKSBjb250aW51ZTtcbiAgICAvLyBleHBvcnQgbmF0aXZlIG9yIHBhc3NlZFxuICAgIG91dCA9IG93biA/IHRhcmdldFtrZXldIDogc291cmNlW2tleV07XG4gICAgLy8gcHJldmVudCBnbG9iYWwgcG9sbHV0aW9uIGZvciBuYW1lc3BhY2VzXG4gICAgZXhwb3J0c1trZXldID0gSVNfR0xPQkFMICYmIHR5cGVvZiB0YXJnZXRba2V5XSAhPSAnZnVuY3Rpb24nID8gc291cmNlW2tleV1cbiAgICAvLyBiaW5kIHRpbWVycyB0byBnbG9iYWwgZm9yIGNhbGwgZnJvbSBleHBvcnQgY29udGV4dFxuICAgIDogSVNfQklORCAmJiBvd24gPyBjdHgob3V0LCBnbG9iYWwpXG4gICAgLy8gd3JhcCBnbG9iYWwgY29uc3RydWN0b3JzIGZvciBwcmV2ZW50IGNoYW5nZSB0aGVtIGluIGxpYnJhcnlcbiAgICA6IElTX1dSQVAgJiYgdGFyZ2V0W2tleV0gPT0gb3V0ID8gKGZ1bmN0aW9uIChDKSB7XG4gICAgICB2YXIgRiA9IGZ1bmN0aW9uIChhLCBiLCBjKSB7XG4gICAgICAgIGlmICh0aGlzIGluc3RhbmNlb2YgQykge1xuICAgICAgICAgIHN3aXRjaCAoYXJndW1lbnRzLmxlbmd0aCkge1xuICAgICAgICAgICAgY2FzZSAwOiByZXR1cm4gbmV3IEMoKTtcbiAgICAgICAgICAgIGNhc2UgMTogcmV0dXJuIG5ldyBDKGEpO1xuICAgICAgICAgICAgY2FzZSAyOiByZXR1cm4gbmV3IEMoYSwgYik7XG4gICAgICAgICAgfSByZXR1cm4gbmV3IEMoYSwgYiwgYyk7XG4gICAgICAgIH0gcmV0dXJuIEMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgIH07XG4gICAgICBGW1BST1RPVFlQRV0gPSBDW1BST1RPVFlQRV07XG4gICAgICByZXR1cm4gRjtcbiAgICAvLyBtYWtlIHN0YXRpYyB2ZXJzaW9ucyBmb3IgcHJvdG90eXBlIG1ldGhvZHNcbiAgICB9KShvdXQpIDogSVNfUFJPVE8gJiYgdHlwZW9mIG91dCA9PSAnZnVuY3Rpb24nID8gY3R4KEZ1bmN0aW9uLmNhbGwsIG91dCkgOiBvdXQ7XG4gICAgLy8gZXhwb3J0IHByb3RvIG1ldGhvZHMgdG8gY29yZS4lQ09OU1RSVUNUT1IlLm1ldGhvZHMuJU5BTUUlXG4gICAgaWYgKElTX1BST1RPKSB7XG4gICAgICAoZXhwb3J0cy52aXJ0dWFsIHx8IChleHBvcnRzLnZpcnR1YWwgPSB7fSkpW2tleV0gPSBvdXQ7XG4gICAgICAvLyBleHBvcnQgcHJvdG8gbWV0aG9kcyB0byBjb3JlLiVDT05TVFJVQ1RPUiUucHJvdG90eXBlLiVOQU1FJVxuICAgICAgaWYgKHR5cGUgJiAkZXhwb3J0LlIgJiYgZXhwUHJvdG8gJiYgIWV4cFByb3RvW2tleV0pIGhpZGUoZXhwUHJvdG8sIGtleSwgb3V0KTtcbiAgICB9XG4gIH1cbn07XG4vLyB0eXBlIGJpdG1hcFxuJGV4cG9ydC5GID0gMTsgICAvLyBmb3JjZWRcbiRleHBvcnQuRyA9IDI7ICAgLy8gZ2xvYmFsXG4kZXhwb3J0LlMgPSA0OyAgIC8vIHN0YXRpY1xuJGV4cG9ydC5QID0gODsgICAvLyBwcm90b1xuJGV4cG9ydC5CID0gMTY7ICAvLyBiaW5kXG4kZXhwb3J0LlcgPSAzMjsgIC8vIHdyYXBcbiRleHBvcnQuVSA9IDY0OyAgLy8gc2FmZVxuJGV4cG9ydC5SID0gMTI4OyAvLyByZWFsIHByb3RvIG1ldGhvZCBmb3IgYGxpYnJhcnlgXG5tb2R1bGUuZXhwb3J0cyA9ICRleHBvcnQ7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChleGVjKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuICEhZXhlYygpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn07XG4iLCJ2YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4vX2l0ZXItY2FsbCcpO1xudmFyIGlzQXJyYXlJdGVyID0gcmVxdWlyZSgnLi9faXMtYXJyYXktaXRlcicpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciBnZXRJdGVyRm4gPSByZXF1aXJlKCcuL2NvcmUuZ2V0LWl0ZXJhdG9yLW1ldGhvZCcpO1xudmFyIEJSRUFLID0ge307XG52YXIgUkVUVVJOID0ge307XG52YXIgZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0ZXJhYmxlLCBlbnRyaWVzLCBmbiwgdGhhdCwgSVRFUkFUT1IpIHtcbiAgdmFyIGl0ZXJGbiA9IElURVJBVE9SID8gZnVuY3Rpb24gKCkgeyByZXR1cm4gaXRlcmFibGU7IH0gOiBnZXRJdGVyRm4oaXRlcmFibGUpO1xuICB2YXIgZiA9IGN0eChmbiwgdGhhdCwgZW50cmllcyA/IDIgOiAxKTtcbiAgdmFyIGluZGV4ID0gMDtcbiAgdmFyIGxlbmd0aCwgc3RlcCwgaXRlcmF0b3IsIHJlc3VsdDtcbiAgaWYgKHR5cGVvZiBpdGVyRm4gIT0gJ2Z1bmN0aW9uJykgdGhyb3cgVHlwZUVycm9yKGl0ZXJhYmxlICsgJyBpcyBub3QgaXRlcmFibGUhJyk7XG4gIC8vIGZhc3QgY2FzZSBmb3IgYXJyYXlzIHdpdGggZGVmYXVsdCBpdGVyYXRvclxuICBpZiAoaXNBcnJheUl0ZXIoaXRlckZuKSkgZm9yIChsZW5ndGggPSB0b0xlbmd0aChpdGVyYWJsZS5sZW5ndGgpOyBsZW5ndGggPiBpbmRleDsgaW5kZXgrKykge1xuICAgIHJlc3VsdCA9IGVudHJpZXMgPyBmKGFuT2JqZWN0KHN0ZXAgPSBpdGVyYWJsZVtpbmRleF0pWzBdLCBzdGVwWzFdKSA6IGYoaXRlcmFibGVbaW5kZXhdKTtcbiAgICBpZiAocmVzdWx0ID09PSBCUkVBSyB8fCByZXN1bHQgPT09IFJFVFVSTikgcmV0dXJuIHJlc3VsdDtcbiAgfSBlbHNlIGZvciAoaXRlcmF0b3IgPSBpdGVyRm4uY2FsbChpdGVyYWJsZSk7ICEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZTspIHtcbiAgICByZXN1bHQgPSBjYWxsKGl0ZXJhdG9yLCBmLCBzdGVwLnZhbHVlLCBlbnRyaWVzKTtcbiAgICBpZiAocmVzdWx0ID09PSBCUkVBSyB8fCByZXN1bHQgPT09IFJFVFVSTikgcmV0dXJuIHJlc3VsdDtcbiAgfVxufTtcbmV4cG9ydHMuQlJFQUsgPSBCUkVBSztcbmV4cG9ydHMuUkVUVVJOID0gUkVUVVJOO1xuIiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzg2I2lzc3VlY29tbWVudC0xMTU3NTkwMjhcbnZhciBnbG9iYWwgPSBtb2R1bGUuZXhwb3J0cyA9IHR5cGVvZiB3aW5kb3cgIT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93Lk1hdGggPT0gTWF0aFxuICA/IHdpbmRvdyA6IHR5cGVvZiBzZWxmICE9ICd1bmRlZmluZWQnICYmIHNlbGYuTWF0aCA9PSBNYXRoID8gc2VsZlxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3LWZ1bmNcbiAgOiBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuaWYgKHR5cGVvZiBfX2cgPT0gJ251bWJlcicpIF9fZyA9IGdsb2JhbDsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bmRlZlxuIiwidmFyIGhhc093blByb3BlcnR5ID0ge30uaGFzT3duUHJvcGVydHk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwga2V5KSB7XG4gIHJldHVybiBoYXNPd25Qcm9wZXJ0eS5jYWxsKGl0LCBrZXkpO1xufTtcbiIsInZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpO1xudmFyIGNyZWF0ZURlc2MgPSByZXF1aXJlKCcuL19wcm9wZXJ0eS1kZXNjJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgPyBmdW5jdGlvbiAob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIHJldHVybiBkUC5mKG9iamVjdCwga2V5LCBjcmVhdGVEZXNjKDEsIHZhbHVlKSk7XG59IDogZnVuY3Rpb24gKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICBvYmplY3Rba2V5XSA9IHZhbHVlO1xuICByZXR1cm4gb2JqZWN0O1xufTtcbiIsInZhciBkb2N1bWVudCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpLmRvY3VtZW50O1xubW9kdWxlLmV4cG9ydHMgPSBkb2N1bWVudCAmJiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG4iLCJtb2R1bGUuZXhwb3J0cyA9ICFyZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpICYmICFyZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyZXF1aXJlKCcuL19kb20tY3JlYXRlJykoJ2RpdicpLCAnYScsIHsgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9IH0pLmEgIT0gNztcbn0pO1xuIiwiLy8gZmFzdCBhcHBseSwgaHR0cDovL2pzcGVyZi5sbmtpdC5jb20vZmFzdC1hcHBseS81XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChmbiwgYXJncywgdGhhdCkge1xuICB2YXIgdW4gPSB0aGF0ID09PSB1bmRlZmluZWQ7XG4gIHN3aXRjaCAoYXJncy5sZW5ndGgpIHtcbiAgICBjYXNlIDA6IHJldHVybiB1biA/IGZuKClcbiAgICAgICAgICAgICAgICAgICAgICA6IGZuLmNhbGwodGhhdCk7XG4gICAgY2FzZSAxOiByZXR1cm4gdW4gPyBmbihhcmdzWzBdKVxuICAgICAgICAgICAgICAgICAgICAgIDogZm4uY2FsbCh0aGF0LCBhcmdzWzBdKTtcbiAgICBjYXNlIDI6IHJldHVybiB1biA/IGZuKGFyZ3NbMF0sIGFyZ3NbMV0pXG4gICAgICAgICAgICAgICAgICAgICAgOiBmbi5jYWxsKHRoYXQsIGFyZ3NbMF0sIGFyZ3NbMV0pO1xuICAgIGNhc2UgMzogcmV0dXJuIHVuID8gZm4oYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSlcbiAgICAgICAgICAgICAgICAgICAgICA6IGZuLmNhbGwodGhhdCwgYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSk7XG4gICAgY2FzZSA0OiByZXR1cm4gdW4gPyBmbihhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdLCBhcmdzWzNdKVxuICAgICAgICAgICAgICAgICAgICAgIDogZm4uY2FsbCh0aGF0LCBhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdLCBhcmdzWzNdKTtcbiAgfSByZXR1cm4gZm4uYXBwbHkodGhhdCwgYXJncyk7XG59O1xuIiwiLy8gZmFsbGJhY2sgZm9yIG5vbi1hcnJheS1saWtlIEVTMyBhbmQgbm9uLWVudW1lcmFibGUgb2xkIFY4IHN0cmluZ3NcbnZhciBjb2YgPSByZXF1aXJlKCcuL19jb2YnKTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnNcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0KCd6JykucHJvcGVydHlJc0VudW1lcmFibGUoMCkgPyBPYmplY3QgOiBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGNvZihpdCkgPT0gJ1N0cmluZycgPyBpdC5zcGxpdCgnJykgOiBPYmplY3QoaXQpO1xufTtcbiIsIi8vIGNoZWNrIG9uIGRlZmF1bHQgQXJyYXkgaXRlcmF0b3JcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuL19pdGVyYXRvcnMnKTtcbnZhciBJVEVSQVRPUiA9IHJlcXVpcmUoJy4vX3drcycpKCdpdGVyYXRvcicpO1xudmFyIEFycmF5UHJvdG8gPSBBcnJheS5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCAhPT0gdW5kZWZpbmVkICYmIChJdGVyYXRvcnMuQXJyYXkgPT09IGl0IHx8IEFycmF5UHJvdG9bSVRFUkFUT1JdID09PSBpdCk7XG59O1xuIiwiLy8gNy4yLjIgSXNBcnJheShhcmd1bWVudClcbnZhciBjb2YgPSByZXF1aXJlKCcuL19jb2YnKTtcbm1vZHVsZS5leHBvcnRzID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiBpc0FycmF5KGFyZykge1xuICByZXR1cm4gY29mKGFyZykgPT0gJ0FycmF5Jztcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gdHlwZW9mIGl0ID09PSAnb2JqZWN0JyA/IGl0ICE9PSBudWxsIDogdHlwZW9mIGl0ID09PSAnZnVuY3Rpb24nO1xufTtcbiIsIi8vIGNhbGwgc29tZXRoaW5nIG9uIGl0ZXJhdG9yIHN0ZXAgd2l0aCBzYWZlIGNsb3Npbmcgb24gZXJyb3JcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXRlcmF0b3IsIGZuLCB2YWx1ZSwgZW50cmllcykge1xuICB0cnkge1xuICAgIHJldHVybiBlbnRyaWVzID8gZm4oYW5PYmplY3QodmFsdWUpWzBdLCB2YWx1ZVsxXSkgOiBmbih2YWx1ZSk7XG4gIC8vIDcuNC42IEl0ZXJhdG9yQ2xvc2UoaXRlcmF0b3IsIGNvbXBsZXRpb24pXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICB2YXIgcmV0ID0gaXRlcmF0b3JbJ3JldHVybiddO1xuICAgIGlmIChyZXQgIT09IHVuZGVmaW5lZCkgYW5PYmplY3QocmV0LmNhbGwoaXRlcmF0b3IpKTtcbiAgICB0aHJvdyBlO1xuICB9XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGNyZWF0ZSA9IHJlcXVpcmUoJy4vX29iamVjdC1jcmVhdGUnKTtcbnZhciBkZXNjcmlwdG9yID0gcmVxdWlyZSgnLi9fcHJvcGVydHktZGVzYycpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi9fc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBJdGVyYXRvclByb3RvdHlwZSA9IHt9O1xuXG4vLyAyNS4xLjIuMS4xICVJdGVyYXRvclByb3RvdHlwZSVbQEBpdGVyYXRvcl0oKVxucmVxdWlyZSgnLi9faGlkZScpKEl0ZXJhdG9yUHJvdG90eXBlLCByZXF1aXJlKCcuL193a3MnKSgnaXRlcmF0b3InKSwgZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBOQU1FLCBuZXh0KSB7XG4gIENvbnN0cnVjdG9yLnByb3RvdHlwZSA9IGNyZWF0ZShJdGVyYXRvclByb3RvdHlwZSwgeyBuZXh0OiBkZXNjcmlwdG9yKDEsIG5leHQpIH0pO1xuICBzZXRUb1N0cmluZ1RhZyhDb25zdHJ1Y3RvciwgTkFNRSArICcgSXRlcmF0b3InKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgTElCUkFSWSA9IHJlcXVpcmUoJy4vX2xpYnJhcnknKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuL19yZWRlZmluZScpO1xudmFyIGhpZGUgPSByZXF1aXJlKCcuL19oaWRlJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi9faXRlcmF0b3JzJyk7XG52YXIgJGl0ZXJDcmVhdGUgPSByZXF1aXJlKCcuL19pdGVyLWNyZWF0ZScpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi9fc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4vX29iamVjdC1ncG8nKTtcbnZhciBJVEVSQVRPUiA9IHJlcXVpcmUoJy4vX3drcycpKCdpdGVyYXRvcicpO1xudmFyIEJVR0dZID0gIShbXS5rZXlzICYmICduZXh0JyBpbiBbXS5rZXlzKCkpOyAvLyBTYWZhcmkgaGFzIGJ1Z2d5IGl0ZXJhdG9ycyB3L28gYG5leHRgXG52YXIgRkZfSVRFUkFUT1IgPSAnQEBpdGVyYXRvcic7XG52YXIgS0VZUyA9ICdrZXlzJztcbnZhciBWQUxVRVMgPSAndmFsdWVzJztcblxudmFyIHJldHVyblRoaXMgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChCYXNlLCBOQU1FLCBDb25zdHJ1Y3RvciwgbmV4dCwgREVGQVVMVCwgSVNfU0VULCBGT1JDRUQpIHtcbiAgJGl0ZXJDcmVhdGUoQ29uc3RydWN0b3IsIE5BTUUsIG5leHQpO1xuICB2YXIgZ2V0TWV0aG9kID0gZnVuY3Rpb24gKGtpbmQpIHtcbiAgICBpZiAoIUJVR0dZICYmIGtpbmQgaW4gcHJvdG8pIHJldHVybiBwcm90b1traW5kXTtcbiAgICBzd2l0Y2ggKGtpbmQpIHtcbiAgICAgIGNhc2UgS0VZUzogcmV0dXJuIGZ1bmN0aW9uIGtleXMoKSB7IHJldHVybiBuZXcgQ29uc3RydWN0b3IodGhpcywga2luZCk7IH07XG4gICAgICBjYXNlIFZBTFVFUzogcmV0dXJuIGZ1bmN0aW9uIHZhbHVlcygpIHsgcmV0dXJuIG5ldyBDb25zdHJ1Y3Rvcih0aGlzLCBraW5kKTsgfTtcbiAgICB9IHJldHVybiBmdW5jdGlvbiBlbnRyaWVzKCkgeyByZXR1cm4gbmV3IENvbnN0cnVjdG9yKHRoaXMsIGtpbmQpOyB9O1xuICB9O1xuICB2YXIgVEFHID0gTkFNRSArICcgSXRlcmF0b3InO1xuICB2YXIgREVGX1ZBTFVFUyA9IERFRkFVTFQgPT0gVkFMVUVTO1xuICB2YXIgVkFMVUVTX0JVRyA9IGZhbHNlO1xuICB2YXIgcHJvdG8gPSBCYXNlLnByb3RvdHlwZTtcbiAgdmFyICRuYXRpdmUgPSBwcm90b1tJVEVSQVRPUl0gfHwgcHJvdG9bRkZfSVRFUkFUT1JdIHx8IERFRkFVTFQgJiYgcHJvdG9bREVGQVVMVF07XG4gIHZhciAkZGVmYXVsdCA9ICRuYXRpdmUgfHwgZ2V0TWV0aG9kKERFRkFVTFQpO1xuICB2YXIgJGVudHJpZXMgPSBERUZBVUxUID8gIURFRl9WQUxVRVMgPyAkZGVmYXVsdCA6IGdldE1ldGhvZCgnZW50cmllcycpIDogdW5kZWZpbmVkO1xuICB2YXIgJGFueU5hdGl2ZSA9IE5BTUUgPT0gJ0FycmF5JyA/IHByb3RvLmVudHJpZXMgfHwgJG5hdGl2ZSA6ICRuYXRpdmU7XG4gIHZhciBtZXRob2RzLCBrZXksIEl0ZXJhdG9yUHJvdG90eXBlO1xuICAvLyBGaXggbmF0aXZlXG4gIGlmICgkYW55TmF0aXZlKSB7XG4gICAgSXRlcmF0b3JQcm90b3R5cGUgPSBnZXRQcm90b3R5cGVPZigkYW55TmF0aXZlLmNhbGwobmV3IEJhc2UoKSkpO1xuICAgIGlmIChJdGVyYXRvclByb3RvdHlwZSAhPT0gT2JqZWN0LnByb3RvdHlwZSAmJiBJdGVyYXRvclByb3RvdHlwZS5uZXh0KSB7XG4gICAgICAvLyBTZXQgQEB0b1N0cmluZ1RhZyB0byBuYXRpdmUgaXRlcmF0b3JzXG4gICAgICBzZXRUb1N0cmluZ1RhZyhJdGVyYXRvclByb3RvdHlwZSwgVEFHLCB0cnVlKTtcbiAgICAgIC8vIGZpeCBmb3Igc29tZSBvbGQgZW5naW5lc1xuICAgICAgaWYgKCFMSUJSQVJZICYmIHR5cGVvZiBJdGVyYXRvclByb3RvdHlwZVtJVEVSQVRPUl0gIT0gJ2Z1bmN0aW9uJykgaGlkZShJdGVyYXRvclByb3RvdHlwZSwgSVRFUkFUT1IsIHJldHVyblRoaXMpO1xuICAgIH1cbiAgfVxuICAvLyBmaXggQXJyYXkje3ZhbHVlcywgQEBpdGVyYXRvcn0ubmFtZSBpbiBWOCAvIEZGXG4gIGlmIChERUZfVkFMVUVTICYmICRuYXRpdmUgJiYgJG5hdGl2ZS5uYW1lICE9PSBWQUxVRVMpIHtcbiAgICBWQUxVRVNfQlVHID0gdHJ1ZTtcbiAgICAkZGVmYXVsdCA9IGZ1bmN0aW9uIHZhbHVlcygpIHsgcmV0dXJuICRuYXRpdmUuY2FsbCh0aGlzKTsgfTtcbiAgfVxuICAvLyBEZWZpbmUgaXRlcmF0b3JcbiAgaWYgKCghTElCUkFSWSB8fCBGT1JDRUQpICYmIChCVUdHWSB8fCBWQUxVRVNfQlVHIHx8ICFwcm90b1tJVEVSQVRPUl0pKSB7XG4gICAgaGlkZShwcm90bywgSVRFUkFUT1IsICRkZWZhdWx0KTtcbiAgfVxuICAvLyBQbHVnIGZvciBsaWJyYXJ5XG4gIEl0ZXJhdG9yc1tOQU1FXSA9ICRkZWZhdWx0O1xuICBJdGVyYXRvcnNbVEFHXSA9IHJldHVyblRoaXM7XG4gIGlmIChERUZBVUxUKSB7XG4gICAgbWV0aG9kcyA9IHtcbiAgICAgIHZhbHVlczogREVGX1ZBTFVFUyA/ICRkZWZhdWx0IDogZ2V0TWV0aG9kKFZBTFVFUyksXG4gICAgICBrZXlzOiBJU19TRVQgPyAkZGVmYXVsdCA6IGdldE1ldGhvZChLRVlTKSxcbiAgICAgIGVudHJpZXM6ICRlbnRyaWVzXG4gICAgfTtcbiAgICBpZiAoRk9SQ0VEKSBmb3IgKGtleSBpbiBtZXRob2RzKSB7XG4gICAgICBpZiAoIShrZXkgaW4gcHJvdG8pKSByZWRlZmluZShwcm90bywga2V5LCBtZXRob2RzW2tleV0pO1xuICAgIH0gZWxzZSAkZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIChCVUdHWSB8fCBWQUxVRVNfQlVHKSwgTkFNRSwgbWV0aG9kcyk7XG4gIH1cbiAgcmV0dXJuIG1ldGhvZHM7XG59O1xuIiwidmFyIElURVJBVE9SID0gcmVxdWlyZSgnLi9fd2tzJykoJ2l0ZXJhdG9yJyk7XG52YXIgU0FGRV9DTE9TSU5HID0gZmFsc2U7XG5cbnRyeSB7XG4gIHZhciByaXRlciA9IFs3XVtJVEVSQVRPUl0oKTtcbiAgcml0ZXJbJ3JldHVybiddID0gZnVuY3Rpb24gKCkgeyBTQUZFX0NMT1NJTkcgPSB0cnVlOyB9O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdGhyb3ctbGl0ZXJhbFxuICBBcnJheS5mcm9tKHJpdGVyLCBmdW5jdGlvbiAoKSB7IHRocm93IDI7IH0pO1xufSBjYXRjaCAoZSkgeyAvKiBlbXB0eSAqLyB9XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGV4ZWMsIHNraXBDbG9zaW5nKSB7XG4gIGlmICghc2tpcENsb3NpbmcgJiYgIVNBRkVfQ0xPU0lORykgcmV0dXJuIGZhbHNlO1xuICB2YXIgc2FmZSA9IGZhbHNlO1xuICB0cnkge1xuICAgIHZhciBhcnIgPSBbN107XG4gICAgdmFyIGl0ZXIgPSBhcnJbSVRFUkFUT1JdKCk7XG4gICAgaXRlci5uZXh0ID0gZnVuY3Rpb24gKCkgeyByZXR1cm4geyBkb25lOiBzYWZlID0gdHJ1ZSB9OyB9O1xuICAgIGFycltJVEVSQVRPUl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiBpdGVyOyB9O1xuICAgIGV4ZWMoYXJyKTtcbiAgfSBjYXRjaCAoZSkgeyAvKiBlbXB0eSAqLyB9XG4gIHJldHVybiBzYWZlO1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGRvbmUsIHZhbHVlKSB7XG4gIHJldHVybiB7IHZhbHVlOiB2YWx1ZSwgZG9uZTogISFkb25lIH07XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSB7fTtcbiIsIm1vZHVsZS5leHBvcnRzID0gdHJ1ZTtcbiIsInZhciBNRVRBID0gcmVxdWlyZSgnLi9fdWlkJykoJ21ldGEnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyIHNldERlc2MgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKS5mO1xudmFyIGlkID0gMDtcbnZhciBpc0V4dGVuc2libGUgPSBPYmplY3QuaXNFeHRlbnNpYmxlIHx8IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRydWU7XG59O1xudmFyIEZSRUVaRSA9ICFyZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGlzRXh0ZW5zaWJsZShPYmplY3QucHJldmVudEV4dGVuc2lvbnMoe30pKTtcbn0pO1xudmFyIHNldE1ldGEgPSBmdW5jdGlvbiAoaXQpIHtcbiAgc2V0RGVzYyhpdCwgTUVUQSwgeyB2YWx1ZToge1xuICAgIGk6ICdPJyArICsraWQsIC8vIG9iamVjdCBJRFxuICAgIHc6IHt9ICAgICAgICAgIC8vIHdlYWsgY29sbGVjdGlvbnMgSURzXG4gIH0gfSk7XG59O1xudmFyIGZhc3RLZXkgPSBmdW5jdGlvbiAoaXQsIGNyZWF0ZSkge1xuICAvLyByZXR1cm4gcHJpbWl0aXZlIHdpdGggcHJlZml4XG4gIGlmICghaXNPYmplY3QoaXQpKSByZXR1cm4gdHlwZW9mIGl0ID09ICdzeW1ib2wnID8gaXQgOiAodHlwZW9mIGl0ID09ICdzdHJpbmcnID8gJ1MnIDogJ1AnKSArIGl0O1xuICBpZiAoIWhhcyhpdCwgTUVUQSkpIHtcbiAgICAvLyBjYW4ndCBzZXQgbWV0YWRhdGEgdG8gdW5jYXVnaHQgZnJvemVuIG9iamVjdFxuICAgIGlmICghaXNFeHRlbnNpYmxlKGl0KSkgcmV0dXJuICdGJztcbiAgICAvLyBub3QgbmVjZXNzYXJ5IHRvIGFkZCBtZXRhZGF0YVxuICAgIGlmICghY3JlYXRlKSByZXR1cm4gJ0UnO1xuICAgIC8vIGFkZCBtaXNzaW5nIG1ldGFkYXRhXG4gICAgc2V0TWV0YShpdCk7XG4gIC8vIHJldHVybiBvYmplY3QgSURcbiAgfSByZXR1cm4gaXRbTUVUQV0uaTtcbn07XG52YXIgZ2V0V2VhayA9IGZ1bmN0aW9uIChpdCwgY3JlYXRlKSB7XG4gIGlmICghaGFzKGl0LCBNRVRBKSkge1xuICAgIC8vIGNhbid0IHNldCBtZXRhZGF0YSB0byB1bmNhdWdodCBmcm96ZW4gb2JqZWN0XG4gICAgaWYgKCFpc0V4dGVuc2libGUoaXQpKSByZXR1cm4gdHJ1ZTtcbiAgICAvLyBub3QgbmVjZXNzYXJ5IHRvIGFkZCBtZXRhZGF0YVxuICAgIGlmICghY3JlYXRlKSByZXR1cm4gZmFsc2U7XG4gICAgLy8gYWRkIG1pc3NpbmcgbWV0YWRhdGFcbiAgICBzZXRNZXRhKGl0KTtcbiAgLy8gcmV0dXJuIGhhc2ggd2VhayBjb2xsZWN0aW9ucyBJRHNcbiAgfSByZXR1cm4gaXRbTUVUQV0udztcbn07XG4vLyBhZGQgbWV0YWRhdGEgb24gZnJlZXplLWZhbWlseSBtZXRob2RzIGNhbGxpbmdcbnZhciBvbkZyZWV6ZSA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoRlJFRVpFICYmIG1ldGEuTkVFRCAmJiBpc0V4dGVuc2libGUoaXQpICYmICFoYXMoaXQsIE1FVEEpKSBzZXRNZXRhKGl0KTtcbiAgcmV0dXJuIGl0O1xufTtcbnZhciBtZXRhID0gbW9kdWxlLmV4cG9ydHMgPSB7XG4gIEtFWTogTUVUQSxcbiAgTkVFRDogZmFsc2UsXG4gIGZhc3RLZXk6IGZhc3RLZXksXG4gIGdldFdlYWs6IGdldFdlYWssXG4gIG9uRnJlZXplOiBvbkZyZWV6ZVxufTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBtYWNyb3Rhc2sgPSByZXF1aXJlKCcuL190YXNrJykuc2V0O1xudmFyIE9ic2VydmVyID0gZ2xvYmFsLk11dGF0aW9uT2JzZXJ2ZXIgfHwgZ2xvYmFsLldlYktpdE11dGF0aW9uT2JzZXJ2ZXI7XG52YXIgcHJvY2VzcyA9IGdsb2JhbC5wcm9jZXNzO1xudmFyIFByb21pc2UgPSBnbG9iYWwuUHJvbWlzZTtcbnZhciBpc05vZGUgPSByZXF1aXJlKCcuL19jb2YnKShwcm9jZXNzKSA9PSAncHJvY2Vzcyc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICB2YXIgaGVhZCwgbGFzdCwgbm90aWZ5O1xuXG4gIHZhciBmbHVzaCA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcGFyZW50LCBmbjtcbiAgICBpZiAoaXNOb2RlICYmIChwYXJlbnQgPSBwcm9jZXNzLmRvbWFpbikpIHBhcmVudC5leGl0KCk7XG4gICAgd2hpbGUgKGhlYWQpIHtcbiAgICAgIGZuID0gaGVhZC5mbjtcbiAgICAgIGhlYWQgPSBoZWFkLm5leHQ7XG4gICAgICB0cnkge1xuICAgICAgICBmbigpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBpZiAoaGVhZCkgbm90aWZ5KCk7XG4gICAgICAgIGVsc2UgbGFzdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhyb3cgZTtcbiAgICAgIH1cbiAgICB9IGxhc3QgPSB1bmRlZmluZWQ7XG4gICAgaWYgKHBhcmVudCkgcGFyZW50LmVudGVyKCk7XG4gIH07XG5cbiAgLy8gTm9kZS5qc1xuICBpZiAoaXNOb2RlKSB7XG4gICAgbm90aWZ5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgcHJvY2Vzcy5uZXh0VGljayhmbHVzaCk7XG4gICAgfTtcbiAgLy8gYnJvd3NlcnMgd2l0aCBNdXRhdGlvbk9ic2VydmVyLCBleGNlcHQgaU9TIFNhZmFyaSAtIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy8zMzlcbiAgfSBlbHNlIGlmIChPYnNlcnZlciAmJiAhKGdsb2JhbC5uYXZpZ2F0b3IgJiYgZ2xvYmFsLm5hdmlnYXRvci5zdGFuZGFsb25lKSkge1xuICAgIHZhciB0b2dnbGUgPSB0cnVlO1xuICAgIHZhciBub2RlID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJycpO1xuICAgIG5ldyBPYnNlcnZlcihmbHVzaCkub2JzZXJ2ZShub2RlLCB7IGNoYXJhY3RlckRhdGE6IHRydWUgfSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgbm90aWZ5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgbm9kZS5kYXRhID0gdG9nZ2xlID0gIXRvZ2dsZTtcbiAgICB9O1xuICAvLyBlbnZpcm9ubWVudHMgd2l0aCBtYXliZSBub24tY29tcGxldGVseSBjb3JyZWN0LCBidXQgZXhpc3RlbnQgUHJvbWlzZVxuICB9IGVsc2UgaWYgKFByb21pc2UgJiYgUHJvbWlzZS5yZXNvbHZlKSB7XG4gICAgLy8gUHJvbWlzZS5yZXNvbHZlIHdpdGhvdXQgYW4gYXJndW1lbnQgdGhyb3dzIGFuIGVycm9yIGluIExHIFdlYk9TIDJcbiAgICB2YXIgcHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpO1xuICAgIG5vdGlmeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHByb21pc2UudGhlbihmbHVzaCk7XG4gICAgfTtcbiAgLy8gZm9yIG90aGVyIGVudmlyb25tZW50cyAtIG1hY3JvdGFzayBiYXNlZCBvbjpcbiAgLy8gLSBzZXRJbW1lZGlhdGVcbiAgLy8gLSBNZXNzYWdlQ2hhbm5lbFxuICAvLyAtIHdpbmRvdy5wb3N0TWVzc2FnXG4gIC8vIC0gb25yZWFkeXN0YXRlY2hhbmdlXG4gIC8vIC0gc2V0VGltZW91dFxuICB9IGVsc2Uge1xuICAgIG5vdGlmeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIHN0cmFuZ2UgSUUgKyB3ZWJwYWNrIGRldiBzZXJ2ZXIgYnVnIC0gdXNlIC5jYWxsKGdsb2JhbClcbiAgICAgIG1hY3JvdGFzay5jYWxsKGdsb2JhbCwgZmx1c2gpO1xuICAgIH07XG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb24gKGZuKSB7XG4gICAgdmFyIHRhc2sgPSB7IGZuOiBmbiwgbmV4dDogdW5kZWZpbmVkIH07XG4gICAgaWYgKGxhc3QpIGxhc3QubmV4dCA9IHRhc2s7XG4gICAgaWYgKCFoZWFkKSB7XG4gICAgICBoZWFkID0gdGFzaztcbiAgICAgIG5vdGlmeSgpO1xuICAgIH0gbGFzdCA9IHRhc2s7XG4gIH07XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gMjUuNC4xLjUgTmV3UHJvbWlzZUNhcGFiaWxpdHkoQylcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG5cbmZ1bmN0aW9uIFByb21pc2VDYXBhYmlsaXR5KEMpIHtcbiAgdmFyIHJlc29sdmUsIHJlamVjdDtcbiAgdGhpcy5wcm9taXNlID0gbmV3IEMoZnVuY3Rpb24gKCQkcmVzb2x2ZSwgJCRyZWplY3QpIHtcbiAgICBpZiAocmVzb2x2ZSAhPT0gdW5kZWZpbmVkIHx8IHJlamVjdCAhPT0gdW5kZWZpbmVkKSB0aHJvdyBUeXBlRXJyb3IoJ0JhZCBQcm9taXNlIGNvbnN0cnVjdG9yJyk7XG4gICAgcmVzb2x2ZSA9ICQkcmVzb2x2ZTtcbiAgICByZWplY3QgPSAkJHJlamVjdDtcbiAgfSk7XG4gIHRoaXMucmVzb2x2ZSA9IGFGdW5jdGlvbihyZXNvbHZlKTtcbiAgdGhpcy5yZWplY3QgPSBhRnVuY3Rpb24ocmVqZWN0KTtcbn1cblxubW9kdWxlLmV4cG9ydHMuZiA9IGZ1bmN0aW9uIChDKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZUNhcGFiaWxpdHkoQyk7XG59O1xuIiwiLy8gMTkuMS4yLjIgLyAxNS4yLjMuNSBPYmplY3QuY3JlYXRlKE8gWywgUHJvcGVydGllc10pXG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBkUHMgPSByZXF1aXJlKCcuL19vYmplY3QtZHBzJyk7XG52YXIgZW51bUJ1Z0tleXMgPSByZXF1aXJlKCcuL19lbnVtLWJ1Zy1rZXlzJyk7XG52YXIgSUVfUFJPVE8gPSByZXF1aXJlKCcuL19zaGFyZWQta2V5JykoJ0lFX1BST1RPJyk7XG52YXIgRW1wdHkgPSBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH07XG52YXIgUFJPVE9UWVBFID0gJ3Byb3RvdHlwZSc7XG5cbi8vIENyZWF0ZSBvYmplY3Qgd2l0aCBmYWtlIGBudWxsYCBwcm90b3R5cGU6IHVzZSBpZnJhbWUgT2JqZWN0IHdpdGggY2xlYXJlZCBwcm90b3R5cGVcbnZhciBjcmVhdGVEaWN0ID0gZnVuY3Rpb24gKCkge1xuICAvLyBUaHJhc2gsIHdhc3RlIGFuZCBzb2RvbXk6IElFIEdDIGJ1Z1xuICB2YXIgaWZyYW1lID0gcmVxdWlyZSgnLi9fZG9tLWNyZWF0ZScpKCdpZnJhbWUnKTtcbiAgdmFyIGkgPSBlbnVtQnVnS2V5cy5sZW5ndGg7XG4gIHZhciBsdCA9ICc8JztcbiAgdmFyIGd0ID0gJz4nO1xuICB2YXIgaWZyYW1lRG9jdW1lbnQ7XG4gIGlmcmFtZS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICByZXF1aXJlKCcuL19odG1sJykuYXBwZW5kQ2hpbGQoaWZyYW1lKTtcbiAgaWZyYW1lLnNyYyA9ICdqYXZhc2NyaXB0Oic7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tc2NyaXB0LXVybFxuICAvLyBjcmVhdGVEaWN0ID0gaWZyYW1lLmNvbnRlbnRXaW5kb3cuT2JqZWN0O1xuICAvLyBodG1sLnJlbW92ZUNoaWxkKGlmcmFtZSk7XG4gIGlmcmFtZURvY3VtZW50ID0gaWZyYW1lLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQ7XG4gIGlmcmFtZURvY3VtZW50Lm9wZW4oKTtcbiAgaWZyYW1lRG9jdW1lbnQud3JpdGUobHQgKyAnc2NyaXB0JyArIGd0ICsgJ2RvY3VtZW50LkY9T2JqZWN0JyArIGx0ICsgJy9zY3JpcHQnICsgZ3QpO1xuICBpZnJhbWVEb2N1bWVudC5jbG9zZSgpO1xuICBjcmVhdGVEaWN0ID0gaWZyYW1lRG9jdW1lbnQuRjtcbiAgd2hpbGUgKGktLSkgZGVsZXRlIGNyZWF0ZURpY3RbUFJPVE9UWVBFXVtlbnVtQnVnS2V5c1tpXV07XG4gIHJldHVybiBjcmVhdGVEaWN0KCk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5jcmVhdGUgfHwgZnVuY3Rpb24gY3JlYXRlKE8sIFByb3BlcnRpZXMpIHtcbiAgdmFyIHJlc3VsdDtcbiAgaWYgKE8gIT09IG51bGwpIHtcbiAgICBFbXB0eVtQUk9UT1RZUEVdID0gYW5PYmplY3QoTyk7XG4gICAgcmVzdWx0ID0gbmV3IEVtcHR5KCk7XG4gICAgRW1wdHlbUFJPVE9UWVBFXSA9IG51bGw7XG4gICAgLy8gYWRkIFwiX19wcm90b19fXCIgZm9yIE9iamVjdC5nZXRQcm90b3R5cGVPZiBwb2x5ZmlsbFxuICAgIHJlc3VsdFtJRV9QUk9UT10gPSBPO1xuICB9IGVsc2UgcmVzdWx0ID0gY3JlYXRlRGljdCgpO1xuICByZXR1cm4gUHJvcGVydGllcyA9PT0gdW5kZWZpbmVkID8gcmVzdWx0IDogZFBzKHJlc3VsdCwgUHJvcGVydGllcyk7XG59O1xuIiwidmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgSUU4X0RPTV9ERUZJTkUgPSByZXF1aXJlKCcuL19pZTgtZG9tLWRlZmluZScpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9fdG8tcHJpbWl0aXZlJyk7XG52YXIgZFAgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG5cbmV4cG9ydHMuZiA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkgOiBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICBQID0gdG9QcmltaXRpdmUoUCwgdHJ1ZSk7XG4gIGFuT2JqZWN0KEF0dHJpYnV0ZXMpO1xuICBpZiAoSUU4X0RPTV9ERUZJTkUpIHRyeSB7XG4gICAgcmV0dXJuIGRQKE8sIFAsIEF0dHJpYnV0ZXMpO1xuICB9IGNhdGNoIChlKSB7IC8qIGVtcHR5ICovIH1cbiAgaWYgKCdnZXQnIGluIEF0dHJpYnV0ZXMgfHwgJ3NldCcgaW4gQXR0cmlidXRlcykgdGhyb3cgVHlwZUVycm9yKCdBY2Nlc3NvcnMgbm90IHN1cHBvcnRlZCEnKTtcbiAgaWYgKCd2YWx1ZScgaW4gQXR0cmlidXRlcykgT1tQXSA9IEF0dHJpYnV0ZXMudmFsdWU7XG4gIHJldHVybiBPO1xufTtcbiIsInZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgZ2V0S2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzIDogZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyhPLCBQcm9wZXJ0aWVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICB2YXIga2V5cyA9IGdldEtleXMoUHJvcGVydGllcyk7XG4gIHZhciBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgdmFyIGkgPSAwO1xuICB2YXIgUDtcbiAgd2hpbGUgKGxlbmd0aCA+IGkpIGRQLmYoTywgUCA9IGtleXNbaSsrXSwgUHJvcGVydGllc1tQXSk7XG4gIHJldHVybiBPO1xufTtcbiIsInZhciBwSUUgPSByZXF1aXJlKCcuL19vYmplY3QtcGllJyk7XG52YXIgY3JlYXRlRGVzYyA9IHJlcXVpcmUoJy4vX3Byb3BlcnR5LWRlc2MnKTtcbnZhciB0b0lPYmplY3QgPSByZXF1aXJlKCcuL190by1pb2JqZWN0Jyk7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuL190by1wcmltaXRpdmUnKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciBJRThfRE9NX0RFRklORSA9IHJlcXVpcmUoJy4vX2llOC1kb20tZGVmaW5lJyk7XG52YXIgZ09QRCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbmV4cG9ydHMuZiA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgPyBnT1BEIDogZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApIHtcbiAgTyA9IHRvSU9iamVjdChPKTtcbiAgUCA9IHRvUHJpbWl0aXZlKFAsIHRydWUpO1xuICBpZiAoSUU4X0RPTV9ERUZJTkUpIHRyeSB7XG4gICAgcmV0dXJuIGdPUEQoTywgUCk7XG4gIH0gY2F0Y2ggKGUpIHsgLyogZW1wdHkgKi8gfVxuICBpZiAoaGFzKE8sIFApKSByZXR1cm4gY3JlYXRlRGVzYyghcElFLmYuY2FsbChPLCBQKSwgT1tQXSk7XG59O1xuIiwiLy8gZmFsbGJhY2sgZm9yIElFMTEgYnVnZ3kgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMgd2l0aCBpZnJhbWUgYW5kIHdpbmRvd1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciBnT1BOID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcG4nKS5mO1xudmFyIHRvU3RyaW5nID0ge30udG9TdHJpbmc7XG5cbnZhciB3aW5kb3dOYW1lcyA9IHR5cGVvZiB3aW5kb3cgPT0gJ29iamVjdCcgJiYgd2luZG93ICYmIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzXG4gID8gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMod2luZG93KSA6IFtdO1xuXG52YXIgZ2V0V2luZG93TmFtZXMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gZ09QTihpdCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gd2luZG93TmFtZXMuc2xpY2UoKTtcbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMuZiA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5TmFtZXMoaXQpIHtcbiAgcmV0dXJuIHdpbmRvd05hbWVzICYmIHRvU3RyaW5nLmNhbGwoaXQpID09ICdbb2JqZWN0IFdpbmRvd10nID8gZ2V0V2luZG93TmFtZXMoaXQpIDogZ09QTih0b0lPYmplY3QoaXQpKTtcbn07XG4iLCIvLyAxOS4xLjIuNyAvIDE1LjIuMy40IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKE8pXG52YXIgJGtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cy1pbnRlcm5hbCcpO1xudmFyIGhpZGRlbktleXMgPSByZXF1aXJlKCcuL19lbnVtLWJ1Zy1rZXlzJykuY29uY2F0KCdsZW5ndGgnLCAncHJvdG90eXBlJyk7XG5cbmV4cG9ydHMuZiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzIHx8IGZ1bmN0aW9uIGdldE93blByb3BlcnR5TmFtZXMoTykge1xuICByZXR1cm4gJGtleXMoTywgaGlkZGVuS2V5cyk7XG59O1xuIiwiZXhwb3J0cy5mID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbiIsIi8vIDE5LjEuMi45IC8gMTUuMi4zLjIgT2JqZWN0LmdldFByb3RvdHlwZU9mKE8pXG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciBJRV9QUk9UTyA9IHJlcXVpcmUoJy4vX3NoYXJlZC1rZXknKSgnSUVfUFJPVE8nKTtcbnZhciBPYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmdldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIChPKSB7XG4gIE8gPSB0b09iamVjdChPKTtcbiAgaWYgKGhhcyhPLCBJRV9QUk9UTykpIHJldHVybiBPW0lFX1BST1RPXTtcbiAgaWYgKHR5cGVvZiBPLmNvbnN0cnVjdG9yID09ICdmdW5jdGlvbicgJiYgTyBpbnN0YW5jZW9mIE8uY29uc3RydWN0b3IpIHtcbiAgICByZXR1cm4gTy5jb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG4gIH0gcmV0dXJuIE8gaW5zdGFuY2VvZiBPYmplY3QgPyBPYmplY3RQcm90byA6IG51bGw7XG59O1xuIiwidmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciBhcnJheUluZGV4T2YgPSByZXF1aXJlKCcuL19hcnJheS1pbmNsdWRlcycpKGZhbHNlKTtcbnZhciBJRV9QUk9UTyA9IHJlcXVpcmUoJy4vX3NoYXJlZC1rZXknKSgnSUVfUFJPVE8nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqZWN0LCBuYW1lcykge1xuICB2YXIgTyA9IHRvSU9iamVjdChvYmplY3QpO1xuICB2YXIgaSA9IDA7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgdmFyIGtleTtcbiAgZm9yIChrZXkgaW4gTykgaWYgKGtleSAhPSBJRV9QUk9UTykgaGFzKE8sIGtleSkgJiYgcmVzdWx0LnB1c2goa2V5KTtcbiAgLy8gRG9uJ3QgZW51bSBidWcgJiBoaWRkZW4ga2V5c1xuICB3aGlsZSAobmFtZXMubGVuZ3RoID4gaSkgaWYgKGhhcyhPLCBrZXkgPSBuYW1lc1tpKytdKSkge1xuICAgIH5hcnJheUluZGV4T2YocmVzdWx0LCBrZXkpIHx8IHJlc3VsdC5wdXNoKGtleSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCIvLyAxOS4xLjIuMTQgLyAxNS4yLjMuMTQgT2JqZWN0LmtleXMoTylcbnZhciAka2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzLWludGVybmFsJyk7XG52YXIgZW51bUJ1Z0tleXMgPSByZXF1aXJlKCcuL19lbnVtLWJ1Zy1rZXlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmtleXMgfHwgZnVuY3Rpb24ga2V5cyhPKSB7XG4gIHJldHVybiAka2V5cyhPLCBlbnVtQnVnS2V5cyk7XG59O1xuIiwiZXhwb3J0cy5mID0ge30ucHJvcGVydHlJc0VudW1lcmFibGU7XG4iLCIvLyBtb3N0IE9iamVjdCBtZXRob2RzIGJ5IEVTNiBzaG91bGQgYWNjZXB0IHByaW1pdGl2ZXNcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgY29yZSA9IHJlcXVpcmUoJy4vX2NvcmUnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChLRVksIGV4ZWMpIHtcbiAgdmFyIGZuID0gKGNvcmUuT2JqZWN0IHx8IHt9KVtLRVldIHx8IE9iamVjdFtLRVldO1xuICB2YXIgZXhwID0ge307XG4gIGV4cFtLRVldID0gZXhlYyhmbik7XG4gICRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogZmFpbHMoZnVuY3Rpb24gKCkgeyBmbigxKTsgfSksICdPYmplY3QnLCBleHApO1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGV4ZWMpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4geyBlOiBmYWxzZSwgdjogZXhlYygpIH07XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4geyBlOiB0cnVlLCB2OiBlIH07XG4gIH1cbn07XG4iLCJ2YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIG5ld1Byb21pc2VDYXBhYmlsaXR5ID0gcmVxdWlyZSgnLi9fbmV3LXByb21pc2UtY2FwYWJpbGl0eScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChDLCB4KSB7XG4gIGFuT2JqZWN0KEMpO1xuICBpZiAoaXNPYmplY3QoeCkgJiYgeC5jb25zdHJ1Y3RvciA9PT0gQykgcmV0dXJuIHg7XG4gIHZhciBwcm9taXNlQ2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5LmYoQyk7XG4gIHZhciByZXNvbHZlID0gcHJvbWlzZUNhcGFiaWxpdHkucmVzb2x2ZTtcbiAgcmVzb2x2ZSh4KTtcbiAgcmV0dXJuIHByb21pc2VDYXBhYmlsaXR5LnByb21pc2U7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYml0bWFwLCB2YWx1ZSkge1xuICByZXR1cm4ge1xuICAgIGVudW1lcmFibGU6ICEoYml0bWFwICYgMSksXG4gICAgY29uZmlndXJhYmxlOiAhKGJpdG1hcCAmIDIpLFxuICAgIHdyaXRhYmxlOiAhKGJpdG1hcCAmIDQpLFxuICAgIHZhbHVlOiB2YWx1ZVxuICB9O1xufTtcbiIsInZhciBoaWRlID0gcmVxdWlyZSgnLi9faGlkZScpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGFyZ2V0LCBzcmMsIHNhZmUpIHtcbiAgZm9yICh2YXIga2V5IGluIHNyYykge1xuICAgIGlmIChzYWZlICYmIHRhcmdldFtrZXldKSB0YXJnZXRba2V5XSA9IHNyY1trZXldO1xuICAgIGVsc2UgaGlkZSh0YXJnZXQsIGtleSwgc3JjW2tleV0pO1xuICB9IHJldHVybiB0YXJnZXQ7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19oaWRlJyk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgY29yZSA9IHJlcXVpcmUoJy4vX2NvcmUnKTtcbnZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKTtcbnZhciBTUEVDSUVTID0gcmVxdWlyZSgnLi9fd2tzJykoJ3NwZWNpZXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoS0VZKSB7XG4gIHZhciBDID0gdHlwZW9mIGNvcmVbS0VZXSA9PSAnZnVuY3Rpb24nID8gY29yZVtLRVldIDogZ2xvYmFsW0tFWV07XG4gIGlmIChERVNDUklQVE9SUyAmJiBDICYmICFDW1NQRUNJRVNdKSBkUC5mKEMsIFNQRUNJRVMsIHtcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9XG4gIH0pO1xufTtcbiIsInZhciBkZWYgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKS5mO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyIFRBRyA9IHJlcXVpcmUoJy4vX3drcycpKCd0b1N0cmluZ1RhZycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwgdGFnLCBzdGF0KSB7XG4gIGlmIChpdCAmJiAhaGFzKGl0ID0gc3RhdCA/IGl0IDogaXQucHJvdG90eXBlLCBUQUcpKSBkZWYoaXQsIFRBRywgeyBjb25maWd1cmFibGU6IHRydWUsIHZhbHVlOiB0YWcgfSk7XG59O1xuIiwidmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4vX3NoYXJlZCcpKCdrZXlzJyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi9fdWlkJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgcmV0dXJuIHNoYXJlZFtrZXldIHx8IChzaGFyZWRba2V5XSA9IHVpZChrZXkpKTtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4vX2NvcmUnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBTSEFSRUQgPSAnX19jb3JlLWpzX3NoYXJlZF9fJztcbnZhciBzdG9yZSA9IGdsb2JhbFtTSEFSRURdIHx8IChnbG9iYWxbU0hBUkVEXSA9IHt9KTtcblxuKG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgcmV0dXJuIHN0b3JlW2tleV0gfHwgKHN0b3JlW2tleV0gPSB2YWx1ZSAhPT0gdW5kZWZpbmVkID8gdmFsdWUgOiB7fSk7XG59KSgndmVyc2lvbnMnLCBbXSkucHVzaCh7XG4gIHZlcnNpb246IGNvcmUudmVyc2lvbixcbiAgbW9kZTogcmVxdWlyZSgnLi9fbGlicmFyeScpID8gJ3B1cmUnIDogJ2dsb2JhbCcsXG4gIGNvcHlyaWdodDogJ8KpIDIwMTkgRGVuaXMgUHVzaGthcmV2ICh6bG9pcm9jay5ydSknXG59KTtcbiIsIi8vIDcuMy4yMCBTcGVjaWVzQ29uc3RydWN0b3IoTywgZGVmYXVsdENvbnN0cnVjdG9yKVxudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyIFNQRUNJRVMgPSByZXF1aXJlKCcuL193a3MnKSgnc3BlY2llcycpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTywgRCkge1xuICB2YXIgQyA9IGFuT2JqZWN0KE8pLmNvbnN0cnVjdG9yO1xuICB2YXIgUztcbiAgcmV0dXJuIEMgPT09IHVuZGVmaW5lZCB8fCAoUyA9IGFuT2JqZWN0KEMpW1NQRUNJRVNdKSA9PSB1bmRlZmluZWQgPyBEIDogYUZ1bmN0aW9uKFMpO1xufTtcbiIsInZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcbi8vIHRydWUgIC0+IFN0cmluZyNhdFxuLy8gZmFsc2UgLT4gU3RyaW5nI2NvZGVQb2ludEF0XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChUT19TVFJJTkcpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICh0aGF0LCBwb3MpIHtcbiAgICB2YXIgcyA9IFN0cmluZyhkZWZpbmVkKHRoYXQpKTtcbiAgICB2YXIgaSA9IHRvSW50ZWdlcihwb3MpO1xuICAgIHZhciBsID0gcy5sZW5ndGg7XG4gICAgdmFyIGEsIGI7XG4gICAgaWYgKGkgPCAwIHx8IGkgPj0gbCkgcmV0dXJuIFRPX1NUUklORyA/ICcnIDogdW5kZWZpbmVkO1xuICAgIGEgPSBzLmNoYXJDb2RlQXQoaSk7XG4gICAgcmV0dXJuIGEgPCAweGQ4MDAgfHwgYSA+IDB4ZGJmZiB8fCBpICsgMSA9PT0gbCB8fCAoYiA9IHMuY2hhckNvZGVBdChpICsgMSkpIDwgMHhkYzAwIHx8IGIgPiAweGRmZmZcbiAgICAgID8gVE9fU1RSSU5HID8gcy5jaGFyQXQoaSkgOiBhXG4gICAgICA6IFRPX1NUUklORyA/IHMuc2xpY2UoaSwgaSArIDIpIDogKGEgLSAweGQ4MDAgPDwgMTApICsgKGIgLSAweGRjMDApICsgMHgxMDAwMDtcbiAgfTtcbn07XG4iLCJ2YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG52YXIgaW52b2tlID0gcmVxdWlyZSgnLi9faW52b2tlJyk7XG52YXIgaHRtbCA9IHJlcXVpcmUoJy4vX2h0bWwnKTtcbnZhciBjZWwgPSByZXF1aXJlKCcuL19kb20tY3JlYXRlJyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgcHJvY2VzcyA9IGdsb2JhbC5wcm9jZXNzO1xudmFyIHNldFRhc2sgPSBnbG9iYWwuc2V0SW1tZWRpYXRlO1xudmFyIGNsZWFyVGFzayA9IGdsb2JhbC5jbGVhckltbWVkaWF0ZTtcbnZhciBNZXNzYWdlQ2hhbm5lbCA9IGdsb2JhbC5NZXNzYWdlQ2hhbm5lbDtcbnZhciBEaXNwYXRjaCA9IGdsb2JhbC5EaXNwYXRjaDtcbnZhciBjb3VudGVyID0gMDtcbnZhciBxdWV1ZSA9IHt9O1xudmFyIE9OUkVBRFlTVEFURUNIQU5HRSA9ICdvbnJlYWR5c3RhdGVjaGFuZ2UnO1xudmFyIGRlZmVyLCBjaGFubmVsLCBwb3J0O1xudmFyIHJ1biA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGlkID0gK3RoaXM7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnNcbiAgaWYgKHF1ZXVlLmhhc093blByb3BlcnR5KGlkKSkge1xuICAgIHZhciBmbiA9IHF1ZXVlW2lkXTtcbiAgICBkZWxldGUgcXVldWVbaWRdO1xuICAgIGZuKCk7XG4gIH1cbn07XG52YXIgbGlzdGVuZXIgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgcnVuLmNhbGwoZXZlbnQuZGF0YSk7XG59O1xuLy8gTm9kZS5qcyAwLjkrICYgSUUxMCsgaGFzIHNldEltbWVkaWF0ZSwgb3RoZXJ3aXNlOlxuaWYgKCFzZXRUYXNrIHx8ICFjbGVhclRhc2spIHtcbiAgc2V0VGFzayA9IGZ1bmN0aW9uIHNldEltbWVkaWF0ZShmbikge1xuICAgIHZhciBhcmdzID0gW107XG4gICAgdmFyIGkgPSAxO1xuICAgIHdoaWxlIChhcmd1bWVudHMubGVuZ3RoID4gaSkgYXJncy5wdXNoKGFyZ3VtZW50c1tpKytdKTtcbiAgICBxdWV1ZVsrK2NvdW50ZXJdID0gZnVuY3Rpb24gKCkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5ldy1mdW5jXG4gICAgICBpbnZva2UodHlwZW9mIGZuID09ICdmdW5jdGlvbicgPyBmbiA6IEZ1bmN0aW9uKGZuKSwgYXJncyk7XG4gICAgfTtcbiAgICBkZWZlcihjb3VudGVyKTtcbiAgICByZXR1cm4gY291bnRlcjtcbiAgfTtcbiAgY2xlYXJUYXNrID0gZnVuY3Rpb24gY2xlYXJJbW1lZGlhdGUoaWQpIHtcbiAgICBkZWxldGUgcXVldWVbaWRdO1xuICB9O1xuICAvLyBOb2RlLmpzIDAuOC1cbiAgaWYgKHJlcXVpcmUoJy4vX2NvZicpKHByb2Nlc3MpID09ICdwcm9jZXNzJykge1xuICAgIGRlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICBwcm9jZXNzLm5leHRUaWNrKGN0eChydW4sIGlkLCAxKSk7XG4gICAgfTtcbiAgLy8gU3BoZXJlIChKUyBnYW1lIGVuZ2luZSkgRGlzcGF0Y2ggQVBJXG4gIH0gZWxzZSBpZiAoRGlzcGF0Y2ggJiYgRGlzcGF0Y2gubm93KSB7XG4gICAgZGVmZXIgPSBmdW5jdGlvbiAoaWQpIHtcbiAgICAgIERpc3BhdGNoLm5vdyhjdHgocnVuLCBpZCwgMSkpO1xuICAgIH07XG4gIC8vIEJyb3dzZXJzIHdpdGggTWVzc2FnZUNoYW5uZWwsIGluY2x1ZGVzIFdlYldvcmtlcnNcbiAgfSBlbHNlIGlmIChNZXNzYWdlQ2hhbm5lbCkge1xuICAgIGNoYW5uZWwgPSBuZXcgTWVzc2FnZUNoYW5uZWwoKTtcbiAgICBwb3J0ID0gY2hhbm5lbC5wb3J0MjtcbiAgICBjaGFubmVsLnBvcnQxLm9ubWVzc2FnZSA9IGxpc3RlbmVyO1xuICAgIGRlZmVyID0gY3R4KHBvcnQucG9zdE1lc3NhZ2UsIHBvcnQsIDEpO1xuICAvLyBCcm93c2VycyB3aXRoIHBvc3RNZXNzYWdlLCBza2lwIFdlYldvcmtlcnNcbiAgLy8gSUU4IGhhcyBwb3N0TWVzc2FnZSwgYnV0IGl0J3Mgc3luYyAmIHR5cGVvZiBpdHMgcG9zdE1lc3NhZ2UgaXMgJ29iamVjdCdcbiAgfSBlbHNlIGlmIChnbG9iYWwuYWRkRXZlbnRMaXN0ZW5lciAmJiB0eXBlb2YgcG9zdE1lc3NhZ2UgPT0gJ2Z1bmN0aW9uJyAmJiAhZ2xvYmFsLmltcG9ydFNjcmlwdHMpIHtcbiAgICBkZWZlciA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgZ2xvYmFsLnBvc3RNZXNzYWdlKGlkICsgJycsICcqJyk7XG4gICAgfTtcbiAgICBnbG9iYWwuYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIGxpc3RlbmVyLCBmYWxzZSk7XG4gIC8vIElFOC1cbiAgfSBlbHNlIGlmIChPTlJFQURZU1RBVEVDSEFOR0UgaW4gY2VsKCdzY3JpcHQnKSkge1xuICAgIGRlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICBodG1sLmFwcGVuZENoaWxkKGNlbCgnc2NyaXB0JykpW09OUkVBRFlTVEFURUNIQU5HRV0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGh0bWwucmVtb3ZlQ2hpbGQodGhpcyk7XG4gICAgICAgIHJ1bi5jYWxsKGlkKTtcbiAgICAgIH07XG4gICAgfTtcbiAgLy8gUmVzdCBvbGQgYnJvd3NlcnNcbiAgfSBlbHNlIHtcbiAgICBkZWZlciA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgc2V0VGltZW91dChjdHgocnVuLCBpZCwgMSksIDApO1xuICAgIH07XG4gIH1cbn1cbm1vZHVsZS5leHBvcnRzID0ge1xuICBzZXQ6IHNldFRhc2ssXG4gIGNsZWFyOiBjbGVhclRhc2tcbn07XG4iLCJ2YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi9fdG8taW50ZWdlcicpO1xudmFyIG1heCA9IE1hdGgubWF4O1xudmFyIG1pbiA9IE1hdGgubWluO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaW5kZXgsIGxlbmd0aCkge1xuICBpbmRleCA9IHRvSW50ZWdlcihpbmRleCk7XG4gIHJldHVybiBpbmRleCA8IDAgPyBtYXgoaW5kZXggKyBsZW5ndGgsIDApIDogbWluKGluZGV4LCBsZW5ndGgpO1xufTtcbiIsIi8vIDcuMS40IFRvSW50ZWdlclxudmFyIGNlaWwgPSBNYXRoLmNlaWw7XG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGlzTmFOKGl0ID0gK2l0KSA/IDAgOiAoaXQgPiAwID8gZmxvb3IgOiBjZWlsKShpdCk7XG59O1xuIiwiLy8gdG8gaW5kZXhlZCBvYmplY3QsIHRvT2JqZWN0IHdpdGggZmFsbGJhY2sgZm9yIG5vbi1hcnJheS1saWtlIEVTMyBzdHJpbmdzXG52YXIgSU9iamVjdCA9IHJlcXVpcmUoJy4vX2lvYmplY3QnKTtcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIElPYmplY3QoZGVmaW5lZChpdCkpO1xufTtcbiIsIi8vIDcuMS4xNSBUb0xlbmd0aFxudmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbnZhciBtaW4gPSBNYXRoLm1pbjtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCA+IDAgPyBtaW4odG9JbnRlZ2VyKGl0KSwgMHgxZmZmZmZmZmZmZmZmZikgOiAwOyAvLyBwb3coMiwgNTMpIC0gMSA9PSA5MDA3MTk5MjU0NzQwOTkxXG59O1xuIiwiLy8gNy4xLjEzIFRvT2JqZWN0KGFyZ3VtZW50KVxudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gT2JqZWN0KGRlZmluZWQoaXQpKTtcbn07XG4iLCIvLyA3LjEuMSBUb1ByaW1pdGl2ZShpbnB1dCBbLCBQcmVmZXJyZWRUeXBlXSlcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xuLy8gaW5zdGVhZCBvZiB0aGUgRVM2IHNwZWMgdmVyc2lvbiwgd2UgZGlkbid0IGltcGxlbWVudCBAQHRvUHJpbWl0aXZlIGNhc2Vcbi8vIGFuZCB0aGUgc2Vjb25kIGFyZ3VtZW50IC0gZmxhZyAtIHByZWZlcnJlZCB0eXBlIGlzIGEgc3RyaW5nXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwgUykge1xuICBpZiAoIWlzT2JqZWN0KGl0KSkgcmV0dXJuIGl0O1xuICB2YXIgZm4sIHZhbDtcbiAgaWYgKFMgJiYgdHlwZW9mIChmbiA9IGl0LnRvU3RyaW5nKSA9PSAnZnVuY3Rpb24nICYmICFpc09iamVjdCh2YWwgPSBmbi5jYWxsKGl0KSkpIHJldHVybiB2YWw7XG4gIGlmICh0eXBlb2YgKGZuID0gaXQudmFsdWVPZikgPT0gJ2Z1bmN0aW9uJyAmJiAhaXNPYmplY3QodmFsID0gZm4uY2FsbChpdCkpKSByZXR1cm4gdmFsO1xuICBpZiAoIVMgJiYgdHlwZW9mIChmbiA9IGl0LnRvU3RyaW5nKSA9PSAnZnVuY3Rpb24nICYmICFpc09iamVjdCh2YWwgPSBmbi5jYWxsKGl0KSkpIHJldHVybiB2YWw7XG4gIHRocm93IFR5cGVFcnJvcihcIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZVwiKTtcbn07XG4iLCJ2YXIgaWQgPSAwO1xudmFyIHB4ID0gTWF0aC5yYW5kb20oKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICByZXR1cm4gJ1N5bWJvbCgnLmNvbmNhdChrZXkgPT09IHVuZGVmaW5lZCA/ICcnIDoga2V5LCAnKV8nLCAoKytpZCArIHB4KS50b1N0cmluZygzNikpO1xufTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBuYXZpZ2F0b3IgPSBnbG9iYWwubmF2aWdhdG9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IG5hdmlnYXRvciAmJiBuYXZpZ2F0b3IudXNlckFnZW50IHx8ICcnO1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIGNvcmUgPSByZXF1aXJlKCcuL19jb3JlJyk7XG52YXIgTElCUkFSWSA9IHJlcXVpcmUoJy4vX2xpYnJhcnknKTtcbnZhciB3a3NFeHQgPSByZXF1aXJlKCcuL193a3MtZXh0Jyk7XG52YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKS5mO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobmFtZSkge1xuICB2YXIgJFN5bWJvbCA9IGNvcmUuU3ltYm9sIHx8IChjb3JlLlN5bWJvbCA9IExJQlJBUlkgPyB7fSA6IGdsb2JhbC5TeW1ib2wgfHwge30pO1xuICBpZiAobmFtZS5jaGFyQXQoMCkgIT0gJ18nICYmICEobmFtZSBpbiAkU3ltYm9sKSkgZGVmaW5lUHJvcGVydHkoJFN5bWJvbCwgbmFtZSwgeyB2YWx1ZTogd2tzRXh0LmYobmFtZSkgfSk7XG59O1xuIiwiZXhwb3J0cy5mID0gcmVxdWlyZSgnLi9fd2tzJyk7XG4iLCJ2YXIgc3RvcmUgPSByZXF1aXJlKCcuL19zaGFyZWQnKSgnd2tzJyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi9fdWlkJyk7XG52YXIgU3ltYm9sID0gcmVxdWlyZSgnLi9fZ2xvYmFsJykuU3ltYm9sO1xudmFyIFVTRV9TWU1CT0wgPSB0eXBlb2YgU3ltYm9sID09ICdmdW5jdGlvbic7XG5cbnZhciAkZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgcmV0dXJuIHN0b3JlW25hbWVdIHx8IChzdG9yZVtuYW1lXSA9XG4gICAgVVNFX1NZTUJPTCAmJiBTeW1ib2xbbmFtZV0gfHwgKFVTRV9TWU1CT0wgPyBTeW1ib2wgOiB1aWQpKCdTeW1ib2wuJyArIG5hbWUpKTtcbn07XG5cbiRleHBvcnRzLnN0b3JlID0gc3RvcmU7XG4iLCJ2YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4vX2NsYXNzb2YnKTtcbnZhciBJVEVSQVRPUiA9IHJlcXVpcmUoJy4vX3drcycpKCdpdGVyYXRvcicpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4vX2l0ZXJhdG9ycycpO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19jb3JlJykuZ2V0SXRlcmF0b3JNZXRob2QgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKGl0ICE9IHVuZGVmaW5lZCkgcmV0dXJuIGl0W0lURVJBVE9SXVxuICAgIHx8IGl0WydAQGl0ZXJhdG9yJ11cbiAgICB8fCBJdGVyYXRvcnNbY2xhc3NvZihpdCldO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBhZGRUb1Vuc2NvcGFibGVzID0gcmVxdWlyZSgnLi9fYWRkLXRvLXVuc2NvcGFibGVzJyk7XG52YXIgc3RlcCA9IHJlcXVpcmUoJy4vX2l0ZXItc3RlcCcpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4vX2l0ZXJhdG9ycycpO1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcblxuLy8gMjIuMS4zLjQgQXJyYXkucHJvdG90eXBlLmVudHJpZXMoKVxuLy8gMjIuMS4zLjEzIEFycmF5LnByb3RvdHlwZS5rZXlzKClcbi8vIDIyLjEuMy4yOSBBcnJheS5wcm90b3R5cGUudmFsdWVzKClcbi8vIDIyLjEuMy4zMCBBcnJheS5wcm90b3R5cGVbQEBpdGVyYXRvcl0oKVxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19pdGVyLWRlZmluZScpKEFycmF5LCAnQXJyYXknLCBmdW5jdGlvbiAoaXRlcmF0ZWQsIGtpbmQpIHtcbiAgdGhpcy5fdCA9IHRvSU9iamVjdChpdGVyYXRlZCk7IC8vIHRhcmdldFxuICB0aGlzLl9pID0gMDsgICAgICAgICAgICAgICAgICAgLy8gbmV4dCBpbmRleFxuICB0aGlzLl9rID0ga2luZDsgICAgICAgICAgICAgICAgLy8ga2luZFxuLy8gMjIuMS41LjIuMSAlQXJyYXlJdGVyYXRvclByb3RvdHlwZSUubmV4dCgpXG59LCBmdW5jdGlvbiAoKSB7XG4gIHZhciBPID0gdGhpcy5fdDtcbiAgdmFyIGtpbmQgPSB0aGlzLl9rO1xuICB2YXIgaW5kZXggPSB0aGlzLl9pKys7XG4gIGlmICghTyB8fCBpbmRleCA+PSBPLmxlbmd0aCkge1xuICAgIHRoaXMuX3QgPSB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHN0ZXAoMSk7XG4gIH1cbiAgaWYgKGtpbmQgPT0gJ2tleXMnKSByZXR1cm4gc3RlcCgwLCBpbmRleCk7XG4gIGlmIChraW5kID09ICd2YWx1ZXMnKSByZXR1cm4gc3RlcCgwLCBPW2luZGV4XSk7XG4gIHJldHVybiBzdGVwKDAsIFtpbmRleCwgT1tpbmRleF1dKTtcbn0sICd2YWx1ZXMnKTtcblxuLy8gYXJndW1lbnRzTGlzdFtAQGl0ZXJhdG9yXSBpcyAlQXJyYXlQcm90b192YWx1ZXMlICg5LjQuNC42LCA5LjQuNC43KVxuSXRlcmF0b3JzLkFyZ3VtZW50cyA9IEl0ZXJhdG9ycy5BcnJheTtcblxuYWRkVG9VbnNjb3BhYmxlcygna2V5cycpO1xuYWRkVG9VbnNjb3BhYmxlcygndmFsdWVzJyk7XG5hZGRUb1Vuc2NvcGFibGVzKCdlbnRyaWVzJyk7XG4iLCIvLyAxOS4xLjIuMTQgT2JqZWN0LmtleXMoTylcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyICRrZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMnKTtcblxucmVxdWlyZSgnLi9fb2JqZWN0LXNhcCcpKCdrZXlzJywgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gZnVuY3Rpb24ga2V5cyhpdCkge1xuICAgIHJldHVybiAka2V5cyh0b09iamVjdChpdCkpO1xuICB9O1xufSk7XG4iLCJcblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYkltVnpOaTV2WW1wbFkzUXVkRzh0YzNSeWFXNW5MbXB6SWwwc0ltNWhiV1Z6SWpwYlhTd2liV0Z3Y0dsdVozTWlPaUlpTENKbWFXeGxJam9pYjNWMExtcHpJaXdpYzI5MWNtTmxjME52Ym5SbGJuUWlPbHNpSWwxOSIsIid1c2Ugc3RyaWN0JztcbnZhciBMSUJSQVJZID0gcmVxdWlyZSgnLi9fbGlicmFyeScpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuL19jbGFzc29mJyk7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyIGFuSW5zdGFuY2UgPSByZXF1aXJlKCcuL19hbi1pbnN0YW5jZScpO1xudmFyIGZvck9mID0gcmVxdWlyZSgnLi9fZm9yLW9mJyk7XG52YXIgc3BlY2llc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi9fc3BlY2llcy1jb25zdHJ1Y3RvcicpO1xudmFyIHRhc2sgPSByZXF1aXJlKCcuL190YXNrJykuc2V0O1xudmFyIG1pY3JvdGFzayA9IHJlcXVpcmUoJy4vX21pY3JvdGFzaycpKCk7XG52YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUgPSByZXF1aXJlKCcuL19uZXctcHJvbWlzZS1jYXBhYmlsaXR5Jyk7XG52YXIgcGVyZm9ybSA9IHJlcXVpcmUoJy4vX3BlcmZvcm0nKTtcbnZhciB1c2VyQWdlbnQgPSByZXF1aXJlKCcuL191c2VyLWFnZW50Jyk7XG52YXIgcHJvbWlzZVJlc29sdmUgPSByZXF1aXJlKCcuL19wcm9taXNlLXJlc29sdmUnKTtcbnZhciBQUk9NSVNFID0gJ1Byb21pc2UnO1xudmFyIFR5cGVFcnJvciA9IGdsb2JhbC5UeXBlRXJyb3I7XG52YXIgcHJvY2VzcyA9IGdsb2JhbC5wcm9jZXNzO1xudmFyIHZlcnNpb25zID0gcHJvY2VzcyAmJiBwcm9jZXNzLnZlcnNpb25zO1xudmFyIHY4ID0gdmVyc2lvbnMgJiYgdmVyc2lvbnMudjggfHwgJyc7XG52YXIgJFByb21pc2UgPSBnbG9iYWxbUFJPTUlTRV07XG52YXIgaXNOb2RlID0gY2xhc3NvZihwcm9jZXNzKSA9PSAncHJvY2Vzcyc7XG52YXIgZW1wdHkgPSBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH07XG52YXIgSW50ZXJuYWwsIG5ld0dlbmVyaWNQcm9taXNlQ2FwYWJpbGl0eSwgT3duUHJvbWlzZUNhcGFiaWxpdHksIFdyYXBwZXI7XG52YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHkgPSBuZXdHZW5lcmljUHJvbWlzZUNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZS5mO1xuXG52YXIgVVNFX05BVElWRSA9ICEhZnVuY3Rpb24gKCkge1xuICB0cnkge1xuICAgIC8vIGNvcnJlY3Qgc3ViY2xhc3Npbmcgd2l0aCBAQHNwZWNpZXMgc3VwcG9ydFxuICAgIHZhciBwcm9taXNlID0gJFByb21pc2UucmVzb2x2ZSgxKTtcbiAgICB2YXIgRmFrZVByb21pc2UgPSAocHJvbWlzZS5jb25zdHJ1Y3RvciA9IHt9KVtyZXF1aXJlKCcuL193a3MnKSgnc3BlY2llcycpXSA9IGZ1bmN0aW9uIChleGVjKSB7XG4gICAgICBleGVjKGVtcHR5LCBlbXB0eSk7XG4gICAgfTtcbiAgICAvLyB1bmhhbmRsZWQgcmVqZWN0aW9ucyB0cmFja2luZyBzdXBwb3J0LCBOb2RlSlMgUHJvbWlzZSB3aXRob3V0IGl0IGZhaWxzIEBAc3BlY2llcyB0ZXN0XG4gICAgcmV0dXJuIChpc05vZGUgfHwgdHlwZW9mIFByb21pc2VSZWplY3Rpb25FdmVudCA9PSAnZnVuY3Rpb24nKVxuICAgICAgJiYgcHJvbWlzZS50aGVuKGVtcHR5KSBpbnN0YW5jZW9mIEZha2VQcm9taXNlXG4gICAgICAvLyB2OCA2LjYgKE5vZGUgMTAgYW5kIENocm9tZSA2NikgaGF2ZSBhIGJ1ZyB3aXRoIHJlc29sdmluZyBjdXN0b20gdGhlbmFibGVzXG4gICAgICAvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD04MzA1NjVcbiAgICAgIC8vIHdlIGNhbid0IGRldGVjdCBpdCBzeW5jaHJvbm91c2x5LCBzbyBqdXN0IGNoZWNrIHZlcnNpb25zXG4gICAgICAmJiB2OC5pbmRleE9mKCc2LjYnKSAhPT0gMFxuICAgICAgJiYgdXNlckFnZW50LmluZGV4T2YoJ0Nocm9tZS82NicpID09PSAtMTtcbiAgfSBjYXRjaCAoZSkgeyAvKiBlbXB0eSAqLyB9XG59KCk7XG5cbi8vIGhlbHBlcnNcbnZhciBpc1RoZW5hYmxlID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciB0aGVuO1xuICByZXR1cm4gaXNPYmplY3QoaXQpICYmIHR5cGVvZiAodGhlbiA9IGl0LnRoZW4pID09ICdmdW5jdGlvbicgPyB0aGVuIDogZmFsc2U7XG59O1xudmFyIG5vdGlmeSA9IGZ1bmN0aW9uIChwcm9taXNlLCBpc1JlamVjdCkge1xuICBpZiAocHJvbWlzZS5fbikgcmV0dXJuO1xuICBwcm9taXNlLl9uID0gdHJ1ZTtcbiAgdmFyIGNoYWluID0gcHJvbWlzZS5fYztcbiAgbWljcm90YXNrKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgdmFsdWUgPSBwcm9taXNlLl92O1xuICAgIHZhciBvayA9IHByb21pc2UuX3MgPT0gMTtcbiAgICB2YXIgaSA9IDA7XG4gICAgdmFyIHJ1biA9IGZ1bmN0aW9uIChyZWFjdGlvbikge1xuICAgICAgdmFyIGhhbmRsZXIgPSBvayA/IHJlYWN0aW9uLm9rIDogcmVhY3Rpb24uZmFpbDtcbiAgICAgIHZhciByZXNvbHZlID0gcmVhY3Rpb24ucmVzb2x2ZTtcbiAgICAgIHZhciByZWplY3QgPSByZWFjdGlvbi5yZWplY3Q7XG4gICAgICB2YXIgZG9tYWluID0gcmVhY3Rpb24uZG9tYWluO1xuICAgICAgdmFyIHJlc3VsdCwgdGhlbiwgZXhpdGVkO1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKGhhbmRsZXIpIHtcbiAgICAgICAgICBpZiAoIW9rKSB7XG4gICAgICAgICAgICBpZiAocHJvbWlzZS5faCA9PSAyKSBvbkhhbmRsZVVuaGFuZGxlZChwcm9taXNlKTtcbiAgICAgICAgICAgIHByb21pc2UuX2ggPSAxO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaGFuZGxlciA9PT0gdHJ1ZSkgcmVzdWx0ID0gdmFsdWU7XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAoZG9tYWluKSBkb21haW4uZW50ZXIoKTtcbiAgICAgICAgICAgIHJlc3VsdCA9IGhhbmRsZXIodmFsdWUpOyAvLyBtYXkgdGhyb3dcbiAgICAgICAgICAgIGlmIChkb21haW4pIHtcbiAgICAgICAgICAgICAgZG9tYWluLmV4aXQoKTtcbiAgICAgICAgICAgICAgZXhpdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHJlc3VsdCA9PT0gcmVhY3Rpb24ucHJvbWlzZSkge1xuICAgICAgICAgICAgcmVqZWN0KFR5cGVFcnJvcignUHJvbWlzZS1jaGFpbiBjeWNsZScpKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHRoZW4gPSBpc1RoZW5hYmxlKHJlc3VsdCkpIHtcbiAgICAgICAgICAgIHRoZW4uY2FsbChyZXN1bHQsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgfSBlbHNlIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgfSBlbHNlIHJlamVjdCh2YWx1ZSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGlmIChkb21haW4gJiYgIWV4aXRlZCkgZG9tYWluLmV4aXQoKTtcbiAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgfVxuICAgIH07XG4gICAgd2hpbGUgKGNoYWluLmxlbmd0aCA+IGkpIHJ1bihjaGFpbltpKytdKTsgLy8gdmFyaWFibGUgbGVuZ3RoIC0gY2FuJ3QgdXNlIGZvckVhY2hcbiAgICBwcm9taXNlLl9jID0gW107XG4gICAgcHJvbWlzZS5fbiA9IGZhbHNlO1xuICAgIGlmIChpc1JlamVjdCAmJiAhcHJvbWlzZS5faCkgb25VbmhhbmRsZWQocHJvbWlzZSk7XG4gIH0pO1xufTtcbnZhciBvblVuaGFuZGxlZCA9IGZ1bmN0aW9uIChwcm9taXNlKSB7XG4gIHRhc2suY2FsbChnbG9iYWwsIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgdmFsdWUgPSBwcm9taXNlLl92O1xuICAgIHZhciB1bmhhbmRsZWQgPSBpc1VuaGFuZGxlZChwcm9taXNlKTtcbiAgICB2YXIgcmVzdWx0LCBoYW5kbGVyLCBjb25zb2xlO1xuICAgIGlmICh1bmhhbmRsZWQpIHtcbiAgICAgIHJlc3VsdCA9IHBlcmZvcm0oZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoaXNOb2RlKSB7XG4gICAgICAgICAgcHJvY2Vzcy5lbWl0KCd1bmhhbmRsZWRSZWplY3Rpb24nLCB2YWx1ZSwgcHJvbWlzZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoaGFuZGxlciA9IGdsb2JhbC5vbnVuaGFuZGxlZHJlamVjdGlvbikge1xuICAgICAgICAgIGhhbmRsZXIoeyBwcm9taXNlOiBwcm9taXNlLCByZWFzb246IHZhbHVlIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKChjb25zb2xlID0gZ2xvYmFsLmNvbnNvbGUpICYmIGNvbnNvbGUuZXJyb3IpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdVbmhhbmRsZWQgcHJvbWlzZSByZWplY3Rpb24nLCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgLy8gQnJvd3NlcnMgc2hvdWxkIG5vdCB0cmlnZ2VyIGByZWplY3Rpb25IYW5kbGVkYCBldmVudCBpZiBpdCB3YXMgaGFuZGxlZCBoZXJlLCBOb2RlSlMgLSBzaG91bGRcbiAgICAgIHByb21pc2UuX2ggPSBpc05vZGUgfHwgaXNVbmhhbmRsZWQocHJvbWlzZSkgPyAyIDogMTtcbiAgICB9IHByb21pc2UuX2EgPSB1bmRlZmluZWQ7XG4gICAgaWYgKHVuaGFuZGxlZCAmJiByZXN1bHQuZSkgdGhyb3cgcmVzdWx0LnY7XG4gIH0pO1xufTtcbnZhciBpc1VuaGFuZGxlZCA9IGZ1bmN0aW9uIChwcm9taXNlKSB7XG4gIHJldHVybiBwcm9taXNlLl9oICE9PSAxICYmIChwcm9taXNlLl9hIHx8IHByb21pc2UuX2MpLmxlbmd0aCA9PT0gMDtcbn07XG52YXIgb25IYW5kbGVVbmhhbmRsZWQgPSBmdW5jdGlvbiAocHJvbWlzZSkge1xuICB0YXNrLmNhbGwoZ2xvYmFsLCBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGhhbmRsZXI7XG4gICAgaWYgKGlzTm9kZSkge1xuICAgICAgcHJvY2Vzcy5lbWl0KCdyZWplY3Rpb25IYW5kbGVkJywgcHJvbWlzZSk7XG4gICAgfSBlbHNlIGlmIChoYW5kbGVyID0gZ2xvYmFsLm9ucmVqZWN0aW9uaGFuZGxlZCkge1xuICAgICAgaGFuZGxlcih7IHByb21pc2U6IHByb21pc2UsIHJlYXNvbjogcHJvbWlzZS5fdiB9KTtcbiAgICB9XG4gIH0pO1xufTtcbnZhciAkcmVqZWN0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gIHZhciBwcm9taXNlID0gdGhpcztcbiAgaWYgKHByb21pc2UuX2QpIHJldHVybjtcbiAgcHJvbWlzZS5fZCA9IHRydWU7XG4gIHByb21pc2UgPSBwcm9taXNlLl93IHx8IHByb21pc2U7IC8vIHVud3JhcFxuICBwcm9taXNlLl92ID0gdmFsdWU7XG4gIHByb21pc2UuX3MgPSAyO1xuICBpZiAoIXByb21pc2UuX2EpIHByb21pc2UuX2EgPSBwcm9taXNlLl9jLnNsaWNlKCk7XG4gIG5vdGlmeShwcm9taXNlLCB0cnVlKTtcbn07XG52YXIgJHJlc29sdmUgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgdmFyIHByb21pc2UgPSB0aGlzO1xuICB2YXIgdGhlbjtcbiAgaWYgKHByb21pc2UuX2QpIHJldHVybjtcbiAgcHJvbWlzZS5fZCA9IHRydWU7XG4gIHByb21pc2UgPSBwcm9taXNlLl93IHx8IHByb21pc2U7IC8vIHVud3JhcFxuICB0cnkge1xuICAgIGlmIChwcm9taXNlID09PSB2YWx1ZSkgdGhyb3cgVHlwZUVycm9yKFwiUHJvbWlzZSBjYW4ndCBiZSByZXNvbHZlZCBpdHNlbGZcIik7XG4gICAgaWYgKHRoZW4gPSBpc1RoZW5hYmxlKHZhbHVlKSkge1xuICAgICAgbWljcm90YXNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHdyYXBwZXIgPSB7IF93OiBwcm9taXNlLCBfZDogZmFsc2UgfTsgLy8gd3JhcFxuICAgICAgICB0cnkge1xuICAgICAgICAgIHRoZW4uY2FsbCh2YWx1ZSwgY3R4KCRyZXNvbHZlLCB3cmFwcGVyLCAxKSwgY3R4KCRyZWplY3QsIHdyYXBwZXIsIDEpKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICRyZWplY3QuY2FsbCh3cmFwcGVyLCBlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHByb21pc2UuX3YgPSB2YWx1ZTtcbiAgICAgIHByb21pc2UuX3MgPSAxO1xuICAgICAgbm90aWZ5KHByb21pc2UsIGZhbHNlKTtcbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICAkcmVqZWN0LmNhbGwoeyBfdzogcHJvbWlzZSwgX2Q6IGZhbHNlIH0sIGUpOyAvLyB3cmFwXG4gIH1cbn07XG5cbi8vIGNvbnN0cnVjdG9yIHBvbHlmaWxsXG5pZiAoIVVTRV9OQVRJVkUpIHtcbiAgLy8gMjUuNC4zLjEgUHJvbWlzZShleGVjdXRvcilcbiAgJFByb21pc2UgPSBmdW5jdGlvbiBQcm9taXNlKGV4ZWN1dG9yKSB7XG4gICAgYW5JbnN0YW5jZSh0aGlzLCAkUHJvbWlzZSwgUFJPTUlTRSwgJ19oJyk7XG4gICAgYUZ1bmN0aW9uKGV4ZWN1dG9yKTtcbiAgICBJbnRlcm5hbC5jYWxsKHRoaXMpO1xuICAgIHRyeSB7XG4gICAgICBleGVjdXRvcihjdHgoJHJlc29sdmUsIHRoaXMsIDEpLCBjdHgoJHJlamVjdCwgdGhpcywgMSkpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgJHJlamVjdC5jYWxsKHRoaXMsIGVycik7XG4gICAgfVxuICB9O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgSW50ZXJuYWwgPSBmdW5jdGlvbiBQcm9taXNlKGV4ZWN1dG9yKSB7XG4gICAgdGhpcy5fYyA9IFtdOyAgICAgICAgICAgICAvLyA8LSBhd2FpdGluZyByZWFjdGlvbnNcbiAgICB0aGlzLl9hID0gdW5kZWZpbmVkOyAgICAgIC8vIDwtIGNoZWNrZWQgaW4gaXNVbmhhbmRsZWQgcmVhY3Rpb25zXG4gICAgdGhpcy5fcyA9IDA7ICAgICAgICAgICAgICAvLyA8LSBzdGF0ZVxuICAgIHRoaXMuX2QgPSBmYWxzZTsgICAgICAgICAgLy8gPC0gZG9uZVxuICAgIHRoaXMuX3YgPSB1bmRlZmluZWQ7ICAgICAgLy8gPC0gdmFsdWVcbiAgICB0aGlzLl9oID0gMDsgICAgICAgICAgICAgIC8vIDwtIHJlamVjdGlvbiBzdGF0ZSwgMCAtIGRlZmF1bHQsIDEgLSBoYW5kbGVkLCAyIC0gdW5oYW5kbGVkXG4gICAgdGhpcy5fbiA9IGZhbHNlOyAgICAgICAgICAvLyA8LSBub3RpZnlcbiAgfTtcbiAgSW50ZXJuYWwucHJvdG90eXBlID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUtYWxsJykoJFByb21pc2UucHJvdG90eXBlLCB7XG4gICAgLy8gMjUuNC41LjMgUHJvbWlzZS5wcm90b3R5cGUudGhlbihvbkZ1bGZpbGxlZCwgb25SZWplY3RlZClcbiAgICB0aGVuOiBmdW5jdGlvbiB0aGVuKG9uRnVsZmlsbGVkLCBvblJlamVjdGVkKSB7XG4gICAgICB2YXIgcmVhY3Rpb24gPSBuZXdQcm9taXNlQ2FwYWJpbGl0eShzcGVjaWVzQ29uc3RydWN0b3IodGhpcywgJFByb21pc2UpKTtcbiAgICAgIHJlYWN0aW9uLm9rID0gdHlwZW9mIG9uRnVsZmlsbGVkID09ICdmdW5jdGlvbicgPyBvbkZ1bGZpbGxlZCA6IHRydWU7XG4gICAgICByZWFjdGlvbi5mYWlsID0gdHlwZW9mIG9uUmVqZWN0ZWQgPT0gJ2Z1bmN0aW9uJyAmJiBvblJlamVjdGVkO1xuICAgICAgcmVhY3Rpb24uZG9tYWluID0gaXNOb2RlID8gcHJvY2Vzcy5kb21haW4gOiB1bmRlZmluZWQ7XG4gICAgICB0aGlzLl9jLnB1c2gocmVhY3Rpb24pO1xuICAgICAgaWYgKHRoaXMuX2EpIHRoaXMuX2EucHVzaChyZWFjdGlvbik7XG4gICAgICBpZiAodGhpcy5fcykgbm90aWZ5KHRoaXMsIGZhbHNlKTtcbiAgICAgIHJldHVybiByZWFjdGlvbi5wcm9taXNlO1xuICAgIH0sXG4gICAgLy8gMjUuNC41LjEgUHJvbWlzZS5wcm90b3R5cGUuY2F0Y2gob25SZWplY3RlZClcbiAgICAnY2F0Y2gnOiBmdW5jdGlvbiAob25SZWplY3RlZCkge1xuICAgICAgcmV0dXJuIHRoaXMudGhlbih1bmRlZmluZWQsIG9uUmVqZWN0ZWQpO1xuICAgIH1cbiAgfSk7XG4gIE93blByb21pc2VDYXBhYmlsaXR5ID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBwcm9taXNlID0gbmV3IEludGVybmFsKCk7XG4gICAgdGhpcy5wcm9taXNlID0gcHJvbWlzZTtcbiAgICB0aGlzLnJlc29sdmUgPSBjdHgoJHJlc29sdmUsIHByb21pc2UsIDEpO1xuICAgIHRoaXMucmVqZWN0ID0gY3R4KCRyZWplY3QsIHByb21pc2UsIDEpO1xuICB9O1xuICBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZS5mID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkgPSBmdW5jdGlvbiAoQykge1xuICAgIHJldHVybiBDID09PSAkUHJvbWlzZSB8fCBDID09PSBXcmFwcGVyXG4gICAgICA/IG5ldyBPd25Qcm9taXNlQ2FwYWJpbGl0eShDKVxuICAgICAgOiBuZXdHZW5lcmljUHJvbWlzZUNhcGFiaWxpdHkoQyk7XG4gIH07XG59XG5cbiRleHBvcnQoJGV4cG9ydC5HICsgJGV4cG9ydC5XICsgJGV4cG9ydC5GICogIVVTRV9OQVRJVkUsIHsgUHJvbWlzZTogJFByb21pc2UgfSk7XG5yZXF1aXJlKCcuL19zZXQtdG8tc3RyaW5nLXRhZycpKCRQcm9taXNlLCBQUk9NSVNFKTtcbnJlcXVpcmUoJy4vX3NldC1zcGVjaWVzJykoUFJPTUlTRSk7XG5XcmFwcGVyID0gcmVxdWlyZSgnLi9fY29yZScpW1BST01JU0VdO1xuXG4vLyBzdGF0aWNzXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFVU0VfTkFUSVZFLCBQUk9NSVNFLCB7XG4gIC8vIDI1LjQuNC41IFByb21pc2UucmVqZWN0KHIpXG4gIHJlamVjdDogZnVuY3Rpb24gcmVqZWN0KHIpIHtcbiAgICB2YXIgY2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5KHRoaXMpO1xuICAgIHZhciAkJHJlamVjdCA9IGNhcGFiaWxpdHkucmVqZWN0O1xuICAgICQkcmVqZWN0KHIpO1xuICAgIHJldHVybiBjYXBhYmlsaXR5LnByb21pc2U7XG4gIH1cbn0pO1xuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAoTElCUkFSWSB8fCAhVVNFX05BVElWRSksIFBST01JU0UsIHtcbiAgLy8gMjUuNC40LjYgUHJvbWlzZS5yZXNvbHZlKHgpXG4gIHJlc29sdmU6IGZ1bmN0aW9uIHJlc29sdmUoeCkge1xuICAgIHJldHVybiBwcm9taXNlUmVzb2x2ZShMSUJSQVJZICYmIHRoaXMgPT09IFdyYXBwZXIgPyAkUHJvbWlzZSA6IHRoaXMsIHgpO1xuICB9XG59KTtcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIShVU0VfTkFUSVZFICYmIHJlcXVpcmUoJy4vX2l0ZXItZGV0ZWN0JykoZnVuY3Rpb24gKGl0ZXIpIHtcbiAgJFByb21pc2UuYWxsKGl0ZXIpWydjYXRjaCddKGVtcHR5KTtcbn0pKSwgUFJPTUlTRSwge1xuICAvLyAyNS40LjQuMSBQcm9taXNlLmFsbChpdGVyYWJsZSlcbiAgYWxsOiBmdW5jdGlvbiBhbGwoaXRlcmFibGUpIHtcbiAgICB2YXIgQyA9IHRoaXM7XG4gICAgdmFyIGNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eShDKTtcbiAgICB2YXIgcmVzb2x2ZSA9IGNhcGFiaWxpdHkucmVzb2x2ZTtcbiAgICB2YXIgcmVqZWN0ID0gY2FwYWJpbGl0eS5yZWplY3Q7XG4gICAgdmFyIHJlc3VsdCA9IHBlcmZvcm0oZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHZhbHVlcyA9IFtdO1xuICAgICAgdmFyIGluZGV4ID0gMDtcbiAgICAgIHZhciByZW1haW5pbmcgPSAxO1xuICAgICAgZm9yT2YoaXRlcmFibGUsIGZhbHNlLCBmdW5jdGlvbiAocHJvbWlzZSkge1xuICAgICAgICB2YXIgJGluZGV4ID0gaW5kZXgrKztcbiAgICAgICAgdmFyIGFscmVhZHlDYWxsZWQgPSBmYWxzZTtcbiAgICAgICAgdmFsdWVzLnB1c2godW5kZWZpbmVkKTtcbiAgICAgICAgcmVtYWluaW5nKys7XG4gICAgICAgIEMucmVzb2x2ZShwcm9taXNlKS50aGVuKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgIGlmIChhbHJlYWR5Q2FsbGVkKSByZXR1cm47XG4gICAgICAgICAgYWxyZWFkeUNhbGxlZCA9IHRydWU7XG4gICAgICAgICAgdmFsdWVzWyRpbmRleF0gPSB2YWx1ZTtcbiAgICAgICAgICAtLXJlbWFpbmluZyB8fCByZXNvbHZlKHZhbHVlcyk7XG4gICAgICAgIH0sIHJlamVjdCk7XG4gICAgICB9KTtcbiAgICAgIC0tcmVtYWluaW5nIHx8IHJlc29sdmUodmFsdWVzKTtcbiAgICB9KTtcbiAgICBpZiAocmVzdWx0LmUpIHJlamVjdChyZXN1bHQudik7XG4gICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfSxcbiAgLy8gMjUuNC40LjQgUHJvbWlzZS5yYWNlKGl0ZXJhYmxlKVxuICByYWNlOiBmdW5jdGlvbiByYWNlKGl0ZXJhYmxlKSB7XG4gICAgdmFyIEMgPSB0aGlzO1xuICAgIHZhciBjYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkoQyk7XG4gICAgdmFyIHJlamVjdCA9IGNhcGFiaWxpdHkucmVqZWN0O1xuICAgIHZhciByZXN1bHQgPSBwZXJmb3JtKGZ1bmN0aW9uICgpIHtcbiAgICAgIGZvck9mKGl0ZXJhYmxlLCBmYWxzZSwgZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgICAgICAgQy5yZXNvbHZlKHByb21pc2UpLnRoZW4oY2FwYWJpbGl0eS5yZXNvbHZlLCByZWplY3QpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgaWYgKHJlc3VsdC5lKSByZWplY3QocmVzdWx0LnYpO1xuICAgIHJldHVybiBjYXBhYmlsaXR5LnByb21pc2U7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRhdCA9IHJlcXVpcmUoJy4vX3N0cmluZy1hdCcpKHRydWUpO1xuXG4vLyAyMS4xLjMuMjcgU3RyaW5nLnByb3RvdHlwZVtAQGl0ZXJhdG9yXSgpXG5yZXF1aXJlKCcuL19pdGVyLWRlZmluZScpKFN0cmluZywgJ1N0cmluZycsIGZ1bmN0aW9uIChpdGVyYXRlZCkge1xuICB0aGlzLl90ID0gU3RyaW5nKGl0ZXJhdGVkKTsgLy8gdGFyZ2V0XG4gIHRoaXMuX2kgPSAwOyAgICAgICAgICAgICAgICAvLyBuZXh0IGluZGV4XG4vLyAyMS4xLjUuMi4xICVTdHJpbmdJdGVyYXRvclByb3RvdHlwZSUubmV4dCgpXG59LCBmdW5jdGlvbiAoKSB7XG4gIHZhciBPID0gdGhpcy5fdDtcbiAgdmFyIGluZGV4ID0gdGhpcy5faTtcbiAgdmFyIHBvaW50O1xuICBpZiAoaW5kZXggPj0gTy5sZW5ndGgpIHJldHVybiB7IHZhbHVlOiB1bmRlZmluZWQsIGRvbmU6IHRydWUgfTtcbiAgcG9pbnQgPSAkYXQoTywgaW5kZXgpO1xuICB0aGlzLl9pICs9IHBvaW50Lmxlbmd0aDtcbiAgcmV0dXJuIHsgdmFsdWU6IHBvaW50LCBkb25lOiBmYWxzZSB9O1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBFQ01BU2NyaXB0IDYgc3ltYm9scyBzaGltXG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lJyk7XG52YXIgTUVUQSA9IHJlcXVpcmUoJy4vX21ldGEnKS5LRVk7XG52YXIgJGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuL19zaGFyZWQnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4vX3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi9fdWlkJyk7XG52YXIgd2tzID0gcmVxdWlyZSgnLi9fd2tzJyk7XG52YXIgd2tzRXh0ID0gcmVxdWlyZSgnLi9fd2tzLWV4dCcpO1xudmFyIHdrc0RlZmluZSA9IHJlcXVpcmUoJy4vX3drcy1kZWZpbmUnKTtcbnZhciBlbnVtS2V5cyA9IHJlcXVpcmUoJy4vX2VudW0ta2V5cycpO1xudmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuL19pcy1hcnJheScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xudmFyIGNyZWF0ZURlc2MgPSByZXF1aXJlKCcuL19wcm9wZXJ0eS1kZXNjJyk7XG52YXIgX2NyZWF0ZSA9IHJlcXVpcmUoJy4vX29iamVjdC1jcmVhdGUnKTtcbnZhciBnT1BORXh0ID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcG4tZXh0Jyk7XG52YXIgJEdPUEQgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpO1xudmFyICRHT1BTID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcHMnKTtcbnZhciAkRFAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcbnZhciAka2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzJyk7XG52YXIgZ09QRCA9ICRHT1BELmY7XG52YXIgZFAgPSAkRFAuZjtcbnZhciBnT1BOID0gZ09QTkV4dC5mO1xudmFyICRTeW1ib2wgPSBnbG9iYWwuU3ltYm9sO1xudmFyICRKU09OID0gZ2xvYmFsLkpTT047XG52YXIgX3N0cmluZ2lmeSA9ICRKU09OICYmICRKU09OLnN0cmluZ2lmeTtcbnZhciBQUk9UT1RZUEUgPSAncHJvdG90eXBlJztcbnZhciBISURERU4gPSB3a3MoJ19oaWRkZW4nKTtcbnZhciBUT19QUklNSVRJVkUgPSB3a3MoJ3RvUHJpbWl0aXZlJyk7XG52YXIgaXNFbnVtID0ge30ucHJvcGVydHlJc0VudW1lcmFibGU7XG52YXIgU3ltYm9sUmVnaXN0cnkgPSBzaGFyZWQoJ3N5bWJvbC1yZWdpc3RyeScpO1xudmFyIEFsbFN5bWJvbHMgPSBzaGFyZWQoJ3N5bWJvbHMnKTtcbnZhciBPUFN5bWJvbHMgPSBzaGFyZWQoJ29wLXN5bWJvbHMnKTtcbnZhciBPYmplY3RQcm90byA9IE9iamVjdFtQUk9UT1RZUEVdO1xudmFyIFVTRV9OQVRJVkUgPSB0eXBlb2YgJFN5bWJvbCA9PSAnZnVuY3Rpb24nICYmICEhJEdPUFMuZjtcbnZhciBRT2JqZWN0ID0gZ2xvYmFsLlFPYmplY3Q7XG4vLyBEb24ndCB1c2Ugc2V0dGVycyBpbiBRdCBTY3JpcHQsIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy8xNzNcbnZhciBzZXR0ZXIgPSAhUU9iamVjdCB8fCAhUU9iamVjdFtQUk9UT1RZUEVdIHx8ICFRT2JqZWN0W1BST1RPVFlQRV0uZmluZENoaWxkO1xuXG4vLyBmYWxsYmFjayBmb3Igb2xkIEFuZHJvaWQsIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvdjgvaXNzdWVzL2RldGFpbD9pZD02ODdcbnZhciBzZXRTeW1ib2xEZXNjID0gREVTQ1JJUFRPUlMgJiYgJGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIF9jcmVhdGUoZFAoe30sICdhJywge1xuICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZFAodGhpcywgJ2EnLCB7IHZhbHVlOiA3IH0pLmE7IH1cbiAgfSkpLmEgIT0gNztcbn0pID8gZnVuY3Rpb24gKGl0LCBrZXksIEQpIHtcbiAgdmFyIHByb3RvRGVzYyA9IGdPUEQoT2JqZWN0UHJvdG8sIGtleSk7XG4gIGlmIChwcm90b0Rlc2MpIGRlbGV0ZSBPYmplY3RQcm90b1trZXldO1xuICBkUChpdCwga2V5LCBEKTtcbiAgaWYgKHByb3RvRGVzYyAmJiBpdCAhPT0gT2JqZWN0UHJvdG8pIGRQKE9iamVjdFByb3RvLCBrZXksIHByb3RvRGVzYyk7XG59IDogZFA7XG5cbnZhciB3cmFwID0gZnVuY3Rpb24gKHRhZykge1xuICB2YXIgc3ltID0gQWxsU3ltYm9sc1t0YWddID0gX2NyZWF0ZSgkU3ltYm9sW1BST1RPVFlQRV0pO1xuICBzeW0uX2sgPSB0YWc7XG4gIHJldHVybiBzeW07XG59O1xuXG52YXIgaXNTeW1ib2wgPSBVU0VfTkFUSVZFICYmIHR5cGVvZiAkU3ltYm9sLml0ZXJhdG9yID09ICdzeW1ib2wnID8gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0eXBlb2YgaXQgPT0gJ3N5bWJvbCc7XG59IDogZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCBpbnN0YW5jZW9mICRTeW1ib2w7XG59O1xuXG52YXIgJGRlZmluZVByb3BlcnR5ID0gZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkoaXQsIGtleSwgRCkge1xuICBpZiAoaXQgPT09IE9iamVjdFByb3RvKSAkZGVmaW5lUHJvcGVydHkoT1BTeW1ib2xzLCBrZXksIEQpO1xuICBhbk9iamVjdChpdCk7XG4gIGtleSA9IHRvUHJpbWl0aXZlKGtleSwgdHJ1ZSk7XG4gIGFuT2JqZWN0KEQpO1xuICBpZiAoaGFzKEFsbFN5bWJvbHMsIGtleSkpIHtcbiAgICBpZiAoIUQuZW51bWVyYWJsZSkge1xuICAgICAgaWYgKCFoYXMoaXQsIEhJRERFTikpIGRQKGl0LCBISURERU4sIGNyZWF0ZURlc2MoMSwge30pKTtcbiAgICAgIGl0W0hJRERFTl1ba2V5XSA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChoYXMoaXQsIEhJRERFTikgJiYgaXRbSElEREVOXVtrZXldKSBpdFtISURERU5dW2tleV0gPSBmYWxzZTtcbiAgICAgIEQgPSBfY3JlYXRlKEQsIHsgZW51bWVyYWJsZTogY3JlYXRlRGVzYygwLCBmYWxzZSkgfSk7XG4gICAgfSByZXR1cm4gc2V0U3ltYm9sRGVzYyhpdCwga2V5LCBEKTtcbiAgfSByZXR1cm4gZFAoaXQsIGtleSwgRCk7XG59O1xudmFyICRkZWZpbmVQcm9wZXJ0aWVzID0gZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyhpdCwgUCkge1xuICBhbk9iamVjdChpdCk7XG4gIHZhciBrZXlzID0gZW51bUtleXMoUCA9IHRvSU9iamVjdChQKSk7XG4gIHZhciBpID0gMDtcbiAgdmFyIGwgPSBrZXlzLmxlbmd0aDtcbiAgdmFyIGtleTtcbiAgd2hpbGUgKGwgPiBpKSAkZGVmaW5lUHJvcGVydHkoaXQsIGtleSA9IGtleXNbaSsrXSwgUFtrZXldKTtcbiAgcmV0dXJuIGl0O1xufTtcbnZhciAkY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKGl0LCBQKSB7XG4gIHJldHVybiBQID09PSB1bmRlZmluZWQgPyBfY3JlYXRlKGl0KSA6ICRkZWZpbmVQcm9wZXJ0aWVzKF9jcmVhdGUoaXQpLCBQKTtcbn07XG52YXIgJHByb3BlcnR5SXNFbnVtZXJhYmxlID0gZnVuY3Rpb24gcHJvcGVydHlJc0VudW1lcmFibGUoa2V5KSB7XG4gIHZhciBFID0gaXNFbnVtLmNhbGwodGhpcywga2V5ID0gdG9QcmltaXRpdmUoa2V5LCB0cnVlKSk7XG4gIGlmICh0aGlzID09PSBPYmplY3RQcm90byAmJiBoYXMoQWxsU3ltYm9scywga2V5KSAmJiAhaGFzKE9QU3ltYm9scywga2V5KSkgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gRSB8fCAhaGFzKHRoaXMsIGtleSkgfHwgIWhhcyhBbGxTeW1ib2xzLCBrZXkpIHx8IGhhcyh0aGlzLCBISURERU4pICYmIHRoaXNbSElEREVOXVtrZXldID8gRSA6IHRydWU7XG59O1xudmFyICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoaXQsIGtleSkge1xuICBpdCA9IHRvSU9iamVjdChpdCk7XG4gIGtleSA9IHRvUHJpbWl0aXZlKGtleSwgdHJ1ZSk7XG4gIGlmIChpdCA9PT0gT2JqZWN0UHJvdG8gJiYgaGFzKEFsbFN5bWJvbHMsIGtleSkgJiYgIWhhcyhPUFN5bWJvbHMsIGtleSkpIHJldHVybjtcbiAgdmFyIEQgPSBnT1BEKGl0LCBrZXkpO1xuICBpZiAoRCAmJiBoYXMoQWxsU3ltYm9scywga2V5KSAmJiAhKGhhcyhpdCwgSElEREVOKSAmJiBpdFtISURERU5dW2tleV0pKSBELmVudW1lcmFibGUgPSB0cnVlO1xuICByZXR1cm4gRDtcbn07XG52YXIgJGdldE93blByb3BlcnR5TmFtZXMgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eU5hbWVzKGl0KSB7XG4gIHZhciBuYW1lcyA9IGdPUE4odG9JT2JqZWN0KGl0KSk7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgdmFyIGkgPSAwO1xuICB2YXIga2V5O1xuICB3aGlsZSAobmFtZXMubGVuZ3RoID4gaSkge1xuICAgIGlmICghaGFzKEFsbFN5bWJvbHMsIGtleSA9IG5hbWVzW2krK10pICYmIGtleSAhPSBISURERU4gJiYga2V5ICE9IE1FVEEpIHJlc3VsdC5wdXNoKGtleSk7XG4gIH0gcmV0dXJuIHJlc3VsdDtcbn07XG52YXIgJGdldE93blByb3BlcnR5U3ltYm9scyA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5U3ltYm9scyhpdCkge1xuICB2YXIgSVNfT1AgPSBpdCA9PT0gT2JqZWN0UHJvdG87XG4gIHZhciBuYW1lcyA9IGdPUE4oSVNfT1AgPyBPUFN5bWJvbHMgOiB0b0lPYmplY3QoaXQpKTtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICB2YXIgaSA9IDA7XG4gIHZhciBrZXk7XG4gIHdoaWxlIChuYW1lcy5sZW5ndGggPiBpKSB7XG4gICAgaWYgKGhhcyhBbGxTeW1ib2xzLCBrZXkgPSBuYW1lc1tpKytdKSAmJiAoSVNfT1AgPyBoYXMoT2JqZWN0UHJvdG8sIGtleSkgOiB0cnVlKSkgcmVzdWx0LnB1c2goQWxsU3ltYm9sc1trZXldKTtcbiAgfSByZXR1cm4gcmVzdWx0O1xufTtcblxuLy8gMTkuNC4xLjEgU3ltYm9sKFtkZXNjcmlwdGlvbl0pXG5pZiAoIVVTRV9OQVRJVkUpIHtcbiAgJFN5bWJvbCA9IGZ1bmN0aW9uIFN5bWJvbCgpIHtcbiAgICBpZiAodGhpcyBpbnN0YW5jZW9mICRTeW1ib2wpIHRocm93IFR5cGVFcnJvcignU3ltYm9sIGlzIG5vdCBhIGNvbnN0cnVjdG9yIScpO1xuICAgIHZhciB0YWcgPSB1aWQoYXJndW1lbnRzLmxlbmd0aCA+IDAgPyBhcmd1bWVudHNbMF0gOiB1bmRlZmluZWQpO1xuICAgIHZhciAkc2V0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICBpZiAodGhpcyA9PT0gT2JqZWN0UHJvdG8pICRzZXQuY2FsbChPUFN5bWJvbHMsIHZhbHVlKTtcbiAgICAgIGlmIChoYXModGhpcywgSElEREVOKSAmJiBoYXModGhpc1tISURERU5dLCB0YWcpKSB0aGlzW0hJRERFTl1bdGFnXSA9IGZhbHNlO1xuICAgICAgc2V0U3ltYm9sRGVzYyh0aGlzLCB0YWcsIGNyZWF0ZURlc2MoMSwgdmFsdWUpKTtcbiAgICB9O1xuICAgIGlmIChERVNDUklQVE9SUyAmJiBzZXR0ZXIpIHNldFN5bWJvbERlc2MoT2JqZWN0UHJvdG8sIHRhZywgeyBjb25maWd1cmFibGU6IHRydWUsIHNldDogJHNldCB9KTtcbiAgICByZXR1cm4gd3JhcCh0YWcpO1xuICB9O1xuICByZWRlZmluZSgkU3ltYm9sW1BST1RPVFlQRV0sICd0b1N0cmluZycsIGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiB0aGlzLl9rO1xuICB9KTtcblxuICAkR09QRC5mID0gJGdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbiAgJERQLmYgPSAkZGVmaW5lUHJvcGVydHk7XG4gIHJlcXVpcmUoJy4vX29iamVjdC1nb3BuJykuZiA9IGdPUE5FeHQuZiA9ICRnZXRPd25Qcm9wZXJ0eU5hbWVzO1xuICByZXF1aXJlKCcuL19vYmplY3QtcGllJykuZiA9ICRwcm9wZXJ0eUlzRW51bWVyYWJsZTtcbiAgJEdPUFMuZiA9ICRnZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG5cbiAgaWYgKERFU0NSSVBUT1JTICYmICFyZXF1aXJlKCcuL19saWJyYXJ5JykpIHtcbiAgICByZWRlZmluZShPYmplY3RQcm90bywgJ3Byb3BlcnR5SXNFbnVtZXJhYmxlJywgJHByb3BlcnR5SXNFbnVtZXJhYmxlLCB0cnVlKTtcbiAgfVxuXG4gIHdrc0V4dC5mID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICByZXR1cm4gd3JhcCh3a3MobmFtZSkpO1xuICB9O1xufVxuXG4kZXhwb3J0KCRleHBvcnQuRyArICRleHBvcnQuVyArICRleHBvcnQuRiAqICFVU0VfTkFUSVZFLCB7IFN5bWJvbDogJFN5bWJvbCB9KTtcblxuZm9yICh2YXIgZXM2U3ltYm9scyA9IChcbiAgLy8gMTkuNC4yLjIsIDE5LjQuMi4zLCAxOS40LjIuNCwgMTkuNC4yLjYsIDE5LjQuMi44LCAxOS40LjIuOSwgMTkuNC4yLjEwLCAxOS40LjIuMTEsIDE5LjQuMi4xMiwgMTkuNC4yLjEzLCAxOS40LjIuMTRcbiAgJ2hhc0luc3RhbmNlLGlzQ29uY2F0U3ByZWFkYWJsZSxpdGVyYXRvcixtYXRjaCxyZXBsYWNlLHNlYXJjaCxzcGVjaWVzLHNwbGl0LHRvUHJpbWl0aXZlLHRvU3RyaW5nVGFnLHVuc2NvcGFibGVzJ1xuKS5zcGxpdCgnLCcpLCBqID0gMDsgZXM2U3ltYm9scy5sZW5ndGggPiBqOyl3a3MoZXM2U3ltYm9sc1tqKytdKTtcblxuZm9yICh2YXIgd2VsbEtub3duU3ltYm9scyA9ICRrZXlzKHdrcy5zdG9yZSksIGsgPSAwOyB3ZWxsS25vd25TeW1ib2xzLmxlbmd0aCA+IGs7KSB3a3NEZWZpbmUod2VsbEtub3duU3ltYm9sc1trKytdKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhVVNFX05BVElWRSwgJ1N5bWJvbCcsIHtcbiAgLy8gMTkuNC4yLjEgU3ltYm9sLmZvcihrZXkpXG4gICdmb3InOiBmdW5jdGlvbiAoa2V5KSB7XG4gICAgcmV0dXJuIGhhcyhTeW1ib2xSZWdpc3RyeSwga2V5ICs9ICcnKVxuICAgICAgPyBTeW1ib2xSZWdpc3RyeVtrZXldXG4gICAgICA6IFN5bWJvbFJlZ2lzdHJ5W2tleV0gPSAkU3ltYm9sKGtleSk7XG4gIH0sXG4gIC8vIDE5LjQuMi41IFN5bWJvbC5rZXlGb3Ioc3ltKVxuICBrZXlGb3I6IGZ1bmN0aW9uIGtleUZvcihzeW0pIHtcbiAgICBpZiAoIWlzU3ltYm9sKHN5bSkpIHRocm93IFR5cGVFcnJvcihzeW0gKyAnIGlzIG5vdCBhIHN5bWJvbCEnKTtcbiAgICBmb3IgKHZhciBrZXkgaW4gU3ltYm9sUmVnaXN0cnkpIGlmIChTeW1ib2xSZWdpc3RyeVtrZXldID09PSBzeW0pIHJldHVybiBrZXk7XG4gIH0sXG4gIHVzZVNldHRlcjogZnVuY3Rpb24gKCkgeyBzZXR0ZXIgPSB0cnVlOyB9LFxuICB1c2VTaW1wbGU6IGZ1bmN0aW9uICgpIHsgc2V0dGVyID0gZmFsc2U7IH1cbn0pO1xuXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFVU0VfTkFUSVZFLCAnT2JqZWN0Jywge1xuICAvLyAxOS4xLjIuMiBPYmplY3QuY3JlYXRlKE8gWywgUHJvcGVydGllc10pXG4gIGNyZWF0ZTogJGNyZWF0ZSxcbiAgLy8gMTkuMS4yLjQgT2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpXG4gIGRlZmluZVByb3BlcnR5OiAkZGVmaW5lUHJvcGVydHksXG4gIC8vIDE5LjEuMi4zIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKE8sIFByb3BlcnRpZXMpXG4gIGRlZmluZVByb3BlcnRpZXM6ICRkZWZpbmVQcm9wZXJ0aWVzLFxuICAvLyAxOS4xLjIuNiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApXG4gIGdldE93blByb3BlcnR5RGVzY3JpcHRvcjogJGdldE93blByb3BlcnR5RGVzY3JpcHRvcixcbiAgLy8gMTkuMS4yLjcgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoTylcbiAgZ2V0T3duUHJvcGVydHlOYW1lczogJGdldE93blByb3BlcnR5TmFtZXMsXG4gIC8vIDE5LjEuMi44IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoTylcbiAgZ2V0T3duUHJvcGVydHlTeW1ib2xzOiAkZ2V0T3duUHJvcGVydHlTeW1ib2xzXG59KTtcblxuLy8gQ2hyb21lIDM4IGFuZCAzOSBgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9sc2AgZmFpbHMgb24gcHJpbWl0aXZlc1xuLy8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzQ0M1xudmFyIEZBSUxTX09OX1BSSU1JVElWRVMgPSAkZmFpbHMoZnVuY3Rpb24gKCkgeyAkR09QUy5mKDEpOyB9KTtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiBGQUlMU19PTl9QUklNSVRJVkVTLCAnT2JqZWN0Jywge1xuICBnZXRPd25Qcm9wZXJ0eVN5bWJvbHM6IGZ1bmN0aW9uIGdldE93blByb3BlcnR5U3ltYm9scyhpdCkge1xuICAgIHJldHVybiAkR09QUy5mKHRvT2JqZWN0KGl0KSk7XG4gIH1cbn0pO1xuXG4vLyAyNC4zLjIgSlNPTi5zdHJpbmdpZnkodmFsdWUgWywgcmVwbGFjZXIgWywgc3BhY2VdXSlcbiRKU09OICYmICRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogKCFVU0VfTkFUSVZFIHx8ICRmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciBTID0gJFN5bWJvbCgpO1xuICAvLyBNUyBFZGdlIGNvbnZlcnRzIHN5bWJvbCB2YWx1ZXMgdG8gSlNPTiBhcyB7fVxuICAvLyBXZWJLaXQgY29udmVydHMgc3ltYm9sIHZhbHVlcyB0byBKU09OIGFzIG51bGxcbiAgLy8gVjggdGhyb3dzIG9uIGJveGVkIHN5bWJvbHNcbiAgcmV0dXJuIF9zdHJpbmdpZnkoW1NdKSAhPSAnW251bGxdJyB8fCBfc3RyaW5naWZ5KHsgYTogUyB9KSAhPSAne30nIHx8IF9zdHJpbmdpZnkoT2JqZWN0KFMpKSAhPSAne30nO1xufSkpLCAnSlNPTicsIHtcbiAgc3RyaW5naWZ5OiBmdW5jdGlvbiBzdHJpbmdpZnkoaXQpIHtcbiAgICB2YXIgYXJncyA9IFtpdF07XG4gICAgdmFyIGkgPSAxO1xuICAgIHZhciByZXBsYWNlciwgJHJlcGxhY2VyO1xuICAgIHdoaWxlIChhcmd1bWVudHMubGVuZ3RoID4gaSkgYXJncy5wdXNoKGFyZ3VtZW50c1tpKytdKTtcbiAgICAkcmVwbGFjZXIgPSByZXBsYWNlciA9IGFyZ3NbMV07XG4gICAgaWYgKCFpc09iamVjdChyZXBsYWNlcikgJiYgaXQgPT09IHVuZGVmaW5lZCB8fCBpc1N5bWJvbChpdCkpIHJldHVybjsgLy8gSUU4IHJldHVybnMgc3RyaW5nIG9uIHVuZGVmaW5lZFxuICAgIGlmICghaXNBcnJheShyZXBsYWNlcikpIHJlcGxhY2VyID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICAgIGlmICh0eXBlb2YgJHJlcGxhY2VyID09ICdmdW5jdGlvbicpIHZhbHVlID0gJHJlcGxhY2VyLmNhbGwodGhpcywga2V5LCB2YWx1ZSk7XG4gICAgICBpZiAoIWlzU3ltYm9sKHZhbHVlKSkgcmV0dXJuIHZhbHVlO1xuICAgIH07XG4gICAgYXJnc1sxXSA9IHJlcGxhY2VyO1xuICAgIHJldHVybiBfc3RyaW5naWZ5LmFwcGx5KCRKU09OLCBhcmdzKTtcbiAgfVxufSk7XG5cbi8vIDE5LjQuMy40IFN5bWJvbC5wcm90b3R5cGVbQEB0b1ByaW1pdGl2ZV0oaGludClcbiRTeW1ib2xbUFJPVE9UWVBFXVtUT19QUklNSVRJVkVdIHx8IHJlcXVpcmUoJy4vX2hpZGUnKSgkU3ltYm9sW1BST1RPVFlQRV0sIFRPX1BSSU1JVElWRSwgJFN5bWJvbFtQUk9UT1RZUEVdLnZhbHVlT2YpO1xuLy8gMTkuNC4zLjUgU3ltYm9sLnByb3RvdHlwZVtAQHRvU3RyaW5nVGFnXVxuc2V0VG9TdHJpbmdUYWcoJFN5bWJvbCwgJ1N5bWJvbCcpO1xuLy8gMjAuMi4xLjkgTWF0aFtAQHRvU3RyaW5nVGFnXVxuc2V0VG9TdHJpbmdUYWcoTWF0aCwgJ01hdGgnLCB0cnVlKTtcbi8vIDI0LjMuMyBKU09OW0BAdG9TdHJpbmdUYWddXG5zZXRUb1N0cmluZ1RhZyhnbG9iYWwuSlNPTiwgJ0pTT04nLCB0cnVlKTtcbiIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXByb21pc2UtZmluYWxseVxuJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBjb3JlID0gcmVxdWlyZSgnLi9fY29yZScpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIHNwZWNpZXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4vX3NwZWNpZXMtY29uc3RydWN0b3InKTtcbnZhciBwcm9taXNlUmVzb2x2ZSA9IHJlcXVpcmUoJy4vX3Byb21pc2UtcmVzb2x2ZScpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuUiwgJ1Byb21pc2UnLCB7ICdmaW5hbGx5JzogZnVuY3Rpb24gKG9uRmluYWxseSkge1xuICB2YXIgQyA9IHNwZWNpZXNDb25zdHJ1Y3Rvcih0aGlzLCBjb3JlLlByb21pc2UgfHwgZ2xvYmFsLlByb21pc2UpO1xuICB2YXIgaXNGdW5jdGlvbiA9IHR5cGVvZiBvbkZpbmFsbHkgPT0gJ2Z1bmN0aW9uJztcbiAgcmV0dXJuIHRoaXMudGhlbihcbiAgICBpc0Z1bmN0aW9uID8gZnVuY3Rpb24gKHgpIHtcbiAgICAgIHJldHVybiBwcm9taXNlUmVzb2x2ZShDLCBvbkZpbmFsbHkoKSkudGhlbihmdW5jdGlvbiAoKSB7IHJldHVybiB4OyB9KTtcbiAgICB9IDogb25GaW5hbGx5LFxuICAgIGlzRnVuY3Rpb24gPyBmdW5jdGlvbiAoZSkge1xuICAgICAgcmV0dXJuIHByb21pc2VSZXNvbHZlKEMsIG9uRmluYWxseSgpKS50aGVuKGZ1bmN0aW9uICgpIHsgdGhyb3cgZTsgfSk7XG4gICAgfSA6IG9uRmluYWxseVxuICApO1xufSB9KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXByb21pc2UtdHJ5XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIG5ld1Byb21pc2VDYXBhYmlsaXR5ID0gcmVxdWlyZSgnLi9fbmV3LXByb21pc2UtY2FwYWJpbGl0eScpO1xudmFyIHBlcmZvcm0gPSByZXF1aXJlKCcuL19wZXJmb3JtJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUHJvbWlzZScsIHsgJ3RyeSc6IGZ1bmN0aW9uIChjYWxsYmFja2ZuKSB7XG4gIHZhciBwcm9taXNlQ2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5LmYodGhpcyk7XG4gIHZhciByZXN1bHQgPSBwZXJmb3JtKGNhbGxiYWNrZm4pO1xuICAocmVzdWx0LmUgPyBwcm9taXNlQ2FwYWJpbGl0eS5yZWplY3QgOiBwcm9taXNlQ2FwYWJpbGl0eS5yZXNvbHZlKShyZXN1bHQudik7XG4gIHJldHVybiBwcm9taXNlQ2FwYWJpbGl0eS5wcm9taXNlO1xufSB9KTtcbiIsInJlcXVpcmUoJy4vX3drcy1kZWZpbmUnKSgnYXN5bmNJdGVyYXRvcicpO1xuIiwicmVxdWlyZSgnLi9fd2tzLWRlZmluZScpKCdvYnNlcnZhYmxlJyk7XG4iLCJyZXF1aXJlKCcuL2VzNi5hcnJheS5pdGVyYXRvcicpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIGhpZGUgPSByZXF1aXJlKCcuL19oaWRlJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi9faXRlcmF0b3JzJyk7XG52YXIgVE9fU1RSSU5HX1RBRyA9IHJlcXVpcmUoJy4vX3drcycpKCd0b1N0cmluZ1RhZycpO1xuXG52YXIgRE9NSXRlcmFibGVzID0gKCdDU1NSdWxlTGlzdCxDU1NTdHlsZURlY2xhcmF0aW9uLENTU1ZhbHVlTGlzdCxDbGllbnRSZWN0TGlzdCxET01SZWN0TGlzdCxET01TdHJpbmdMaXN0LCcgK1xuICAnRE9NVG9rZW5MaXN0LERhdGFUcmFuc2Zlckl0ZW1MaXN0LEZpbGVMaXN0LEhUTUxBbGxDb2xsZWN0aW9uLEhUTUxDb2xsZWN0aW9uLEhUTUxGb3JtRWxlbWVudCxIVE1MU2VsZWN0RWxlbWVudCwnICtcbiAgJ01lZGlhTGlzdCxNaW1lVHlwZUFycmF5LE5hbWVkTm9kZU1hcCxOb2RlTGlzdCxQYWludFJlcXVlc3RMaXN0LFBsdWdpbixQbHVnaW5BcnJheSxTVkdMZW5ndGhMaXN0LFNWR051bWJlckxpc3QsJyArXG4gICdTVkdQYXRoU2VnTGlzdCxTVkdQb2ludExpc3QsU1ZHU3RyaW5nTGlzdCxTVkdUcmFuc2Zvcm1MaXN0LFNvdXJjZUJ1ZmZlckxpc3QsU3R5bGVTaGVldExpc3QsVGV4dFRyYWNrQ3VlTGlzdCwnICtcbiAgJ1RleHRUcmFja0xpc3QsVG91Y2hMaXN0Jykuc3BsaXQoJywnKTtcblxuZm9yICh2YXIgaSA9IDA7IGkgPCBET01JdGVyYWJsZXMubGVuZ3RoOyBpKyspIHtcbiAgdmFyIE5BTUUgPSBET01JdGVyYWJsZXNbaV07XG4gIHZhciBDb2xsZWN0aW9uID0gZ2xvYmFsW05BTUVdO1xuICB2YXIgcHJvdG8gPSBDb2xsZWN0aW9uICYmIENvbGxlY3Rpb24ucHJvdG90eXBlO1xuICBpZiAocHJvdG8gJiYgIXByb3RvW1RPX1NUUklOR19UQUddKSBoaWRlKHByb3RvLCBUT19TVFJJTkdfVEFHLCBOQU1FKTtcbiAgSXRlcmF0b3JzW05BTUVdID0gSXRlcmF0b3JzLkFycmF5O1xufVxuIiwiLyoqXG4gKiBSZXR1cm5zIGEgZnVuY3Rpb24sIHRoYXQsIGFzIGxvbmcgYXMgaXQgY29udGludWVzIHRvIGJlIGludm9rZWQsIHdpbGwgbm90XG4gKiBiZSB0cmlnZ2VyZWQuIFRoZSBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBhZnRlciBpdCBzdG9wcyBiZWluZyBjYWxsZWQgZm9yXG4gKiBOIG1pbGxpc2Vjb25kcy4gSWYgYGltbWVkaWF0ZWAgaXMgcGFzc2VkLCB0cmlnZ2VyIHRoZSBmdW5jdGlvbiBvbiB0aGVcbiAqIGxlYWRpbmcgZWRnZSwgaW5zdGVhZCBvZiB0aGUgdHJhaWxpbmcuIFRoZSBmdW5jdGlvbiBhbHNvIGhhcyBhIHByb3BlcnR5ICdjbGVhcicgXG4gKiB0aGF0IGlzIGEgZnVuY3Rpb24gd2hpY2ggd2lsbCBjbGVhciB0aGUgdGltZXIgdG8gcHJldmVudCBwcmV2aW91c2x5IHNjaGVkdWxlZCBleGVjdXRpb25zLiBcbiAqXG4gKiBAc291cmNlIHVuZGVyc2NvcmUuanNcbiAqIEBzZWUgaHR0cDovL3Vuc2NyaXB0YWJsZS5jb20vMjAwOS8wMy8yMC9kZWJvdW5jaW5nLWphdmFzY3JpcHQtbWV0aG9kcy9cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmN0aW9uIHRvIHdyYXBcbiAqIEBwYXJhbSB7TnVtYmVyfSB0aW1lb3V0IGluIG1zIChgMTAwYClcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gd2hldGhlciB0byBleGVjdXRlIGF0IHRoZSBiZWdpbm5pbmcgKGBmYWxzZWApXG4gKiBAYXBpIHB1YmxpY1xuICovXG5mdW5jdGlvbiBkZWJvdW5jZShmdW5jLCB3YWl0LCBpbW1lZGlhdGUpe1xuICB2YXIgdGltZW91dCwgYXJncywgY29udGV4dCwgdGltZXN0YW1wLCByZXN1bHQ7XG4gIGlmIChudWxsID09IHdhaXQpIHdhaXQgPSAxMDA7XG5cbiAgZnVuY3Rpb24gbGF0ZXIoKSB7XG4gICAgdmFyIGxhc3QgPSBEYXRlLm5vdygpIC0gdGltZXN0YW1wO1xuXG4gICAgaWYgKGxhc3QgPCB3YWl0ICYmIGxhc3QgPj0gMCkge1xuICAgICAgdGltZW91dCA9IHNldFRpbWVvdXQobGF0ZXIsIHdhaXQgLSBsYXN0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGltZW91dCA9IG51bGw7XG4gICAgICBpZiAoIWltbWVkaWF0ZSkge1xuICAgICAgICByZXN1bHQgPSBmdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3MpO1xuICAgICAgICBjb250ZXh0ID0gYXJncyA9IG51bGw7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIHZhciBkZWJvdW5jZWQgPSBmdW5jdGlvbigpe1xuICAgIGNvbnRleHQgPSB0aGlzO1xuICAgIGFyZ3MgPSBhcmd1bWVudHM7XG4gICAgdGltZXN0YW1wID0gRGF0ZS5ub3coKTtcbiAgICB2YXIgY2FsbE5vdyA9IGltbWVkaWF0ZSAmJiAhdGltZW91dDtcbiAgICBpZiAoIXRpbWVvdXQpIHRpbWVvdXQgPSBzZXRUaW1lb3V0KGxhdGVyLCB3YWl0KTtcbiAgICBpZiAoY2FsbE5vdykge1xuICAgICAgcmVzdWx0ID0gZnVuYy5hcHBseShjb250ZXh0LCBhcmdzKTtcbiAgICAgIGNvbnRleHQgPSBhcmdzID0gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIGRlYm91bmNlZC5jbGVhciA9IGZ1bmN0aW9uKCkge1xuICAgIGlmICh0aW1lb3V0KSB7XG4gICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICB0aW1lb3V0ID0gbnVsbDtcbiAgICB9XG4gIH07XG4gIFxuICBkZWJvdW5jZWQuZmx1c2ggPSBmdW5jdGlvbigpIHtcbiAgICBpZiAodGltZW91dCkge1xuICAgICAgcmVzdWx0ID0gZnVuYy5hcHBseShjb250ZXh0LCBhcmdzKTtcbiAgICAgIGNvbnRleHQgPSBhcmdzID0gbnVsbDtcbiAgICAgIFxuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgdGltZW91dCA9IG51bGw7XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBkZWJvdW5jZWQ7XG59O1xuXG4vLyBBZGRzIGNvbXBhdGliaWxpdHkgZm9yIEVTIG1vZHVsZXNcbmRlYm91bmNlLmRlYm91bmNlID0gZGVib3VuY2U7XG5cbm1vZHVsZS5leHBvcnRzID0gZGVib3VuY2U7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgdG9rZW4gPSAnJVthLWYwLTldezJ9JztcbnZhciBzaW5nbGVNYXRjaGVyID0gbmV3IFJlZ0V4cCh0b2tlbiwgJ2dpJyk7XG52YXIgbXVsdGlNYXRjaGVyID0gbmV3IFJlZ0V4cCgnKCcgKyB0b2tlbiArICcpKycsICdnaScpO1xuXG5mdW5jdGlvbiBkZWNvZGVDb21wb25lbnRzKGNvbXBvbmVudHMsIHNwbGl0KSB7XG5cdHRyeSB7XG5cdFx0Ly8gVHJ5IHRvIGRlY29kZSB0aGUgZW50aXJlIHN0cmluZyBmaXJzdFxuXHRcdHJldHVybiBkZWNvZGVVUklDb21wb25lbnQoY29tcG9uZW50cy5qb2luKCcnKSk7XG5cdH0gY2F0Y2ggKGVycikge1xuXHRcdC8vIERvIG5vdGhpbmdcblx0fVxuXG5cdGlmIChjb21wb25lbnRzLmxlbmd0aCA9PT0gMSkge1xuXHRcdHJldHVybiBjb21wb25lbnRzO1xuXHR9XG5cblx0c3BsaXQgPSBzcGxpdCB8fCAxO1xuXG5cdC8vIFNwbGl0IHRoZSBhcnJheSBpbiAyIHBhcnRzXG5cdHZhciBsZWZ0ID0gY29tcG9uZW50cy5zbGljZSgwLCBzcGxpdCk7XG5cdHZhciByaWdodCA9IGNvbXBvbmVudHMuc2xpY2Uoc3BsaXQpO1xuXG5cdHJldHVybiBBcnJheS5wcm90b3R5cGUuY29uY2F0LmNhbGwoW10sIGRlY29kZUNvbXBvbmVudHMobGVmdCksIGRlY29kZUNvbXBvbmVudHMocmlnaHQpKTtcbn1cblxuZnVuY3Rpb24gZGVjb2RlKGlucHV0KSB7XG5cdHRyeSB7XG5cdFx0cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChpbnB1dCk7XG5cdH0gY2F0Y2ggKGVycikge1xuXHRcdHZhciB0b2tlbnMgPSBpbnB1dC5tYXRjaChzaW5nbGVNYXRjaGVyKTtcblxuXHRcdGZvciAodmFyIGkgPSAxOyBpIDwgdG9rZW5zLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRpbnB1dCA9IGRlY29kZUNvbXBvbmVudHModG9rZW5zLCBpKS5qb2luKCcnKTtcblxuXHRcdFx0dG9rZW5zID0gaW5wdXQubWF0Y2goc2luZ2xlTWF0Y2hlcik7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGlucHV0O1xuXHR9XG59XG5cbmZ1bmN0aW9uIGN1c3RvbURlY29kZVVSSUNvbXBvbmVudChpbnB1dCkge1xuXHQvLyBLZWVwIHRyYWNrIG9mIGFsbCB0aGUgcmVwbGFjZW1lbnRzIGFuZCBwcmVmaWxsIHRoZSBtYXAgd2l0aCB0aGUgYEJPTWBcblx0dmFyIHJlcGxhY2VNYXAgPSB7XG5cdFx0JyVGRSVGRic6ICdcXHVGRkZEXFx1RkZGRCcsXG5cdFx0JyVGRiVGRSc6ICdcXHVGRkZEXFx1RkZGRCdcblx0fTtcblxuXHR2YXIgbWF0Y2ggPSBtdWx0aU1hdGNoZXIuZXhlYyhpbnB1dCk7XG5cdHdoaWxlIChtYXRjaCkge1xuXHRcdHRyeSB7XG5cdFx0XHQvLyBEZWNvZGUgYXMgYmlnIGNodW5rcyBhcyBwb3NzaWJsZVxuXHRcdFx0cmVwbGFjZU1hcFttYXRjaFswXV0gPSBkZWNvZGVVUklDb21wb25lbnQobWF0Y2hbMF0pO1xuXHRcdH0gY2F0Y2ggKGVycikge1xuXHRcdFx0dmFyIHJlc3VsdCA9IGRlY29kZShtYXRjaFswXSk7XG5cblx0XHRcdGlmIChyZXN1bHQgIT09IG1hdGNoWzBdKSB7XG5cdFx0XHRcdHJlcGxhY2VNYXBbbWF0Y2hbMF1dID0gcmVzdWx0O1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdG1hdGNoID0gbXVsdGlNYXRjaGVyLmV4ZWMoaW5wdXQpO1xuXHR9XG5cblx0Ly8gQWRkIGAlQzJgIGF0IHRoZSBlbmQgb2YgdGhlIG1hcCB0byBtYWtlIHN1cmUgaXQgZG9lcyBub3QgcmVwbGFjZSB0aGUgY29tYmluYXRvciBiZWZvcmUgZXZlcnl0aGluZyBlbHNlXG5cdHJlcGxhY2VNYXBbJyVDMiddID0gJ1xcdUZGRkQnO1xuXG5cdHZhciBlbnRyaWVzID0gT2JqZWN0LmtleXMocmVwbGFjZU1hcCk7XG5cblx0Zm9yICh2YXIgaSA9IDA7IGkgPCBlbnRyaWVzLmxlbmd0aDsgaSsrKSB7XG5cdFx0Ly8gUmVwbGFjZSBhbGwgZGVjb2RlZCBjb21wb25lbnRzXG5cdFx0dmFyIGtleSA9IGVudHJpZXNbaV07XG5cdFx0aW5wdXQgPSBpbnB1dC5yZXBsYWNlKG5ldyBSZWdFeHAoa2V5LCAnZycpLCByZXBsYWNlTWFwW2tleV0pO1xuXHR9XG5cblx0cmV0dXJuIGlucHV0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChlbmNvZGVkVVJJKSB7XG5cdGlmICh0eXBlb2YgZW5jb2RlZFVSSSAhPT0gJ3N0cmluZycpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBgZW5jb2RlZFVSSWAgdG8gYmUgb2YgdHlwZSBgc3RyaW5nYCwgZ290IGAnICsgdHlwZW9mIGVuY29kZWRVUkkgKyAnYCcpO1xuXHR9XG5cblx0dHJ5IHtcblx0XHRlbmNvZGVkVVJJID0gZW5jb2RlZFVSSS5yZXBsYWNlKC9cXCsvZywgJyAnKTtcblxuXHRcdC8vIFRyeSB0aGUgYnVpbHQgaW4gZGVjb2RlciBmaXJzdFxuXHRcdHJldHVybiBkZWNvZGVVUklDb21wb25lbnQoZW5jb2RlZFVSSSk7XG5cdH0gY2F0Y2ggKGVycikge1xuXHRcdC8vIEZhbGxiYWNrIHRvIGEgbW9yZSBhZHZhbmNlZCBkZWNvZGVyXG5cdFx0cmV0dXJuIGN1c3RvbURlY29kZVVSSUNvbXBvbmVudChlbmNvZGVkVVJJKTtcblx0fVxufTtcbiIsIi8vIFRoaXMgZmlsZSBjYW4gYmUgcmVxdWlyZWQgaW4gQnJvd3NlcmlmeSBhbmQgTm9kZS5qcyBmb3IgYXV0b21hdGljIHBvbHlmaWxsXG4vLyBUbyB1c2UgaXQ6ICByZXF1aXJlKCdlczYtcHJvbWlzZS9hdXRvJyk7XG4ndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vJykucG9seWZpbGwoKTtcbiIsIi8qIVxuICogQG92ZXJ2aWV3IGVzNi1wcm9taXNlIC0gYSB0aW55IGltcGxlbWVudGF0aW9uIG9mIFByb21pc2VzL0ErLlxuICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIDIwMTQgWWVodWRhIEthdHosIFRvbSBEYWxlLCBTdGVmYW4gUGVubmVyIGFuZCBjb250cmlidXRvcnMgKENvbnZlcnNpb24gdG8gRVM2IEFQSSBieSBKYWtlIEFyY2hpYmFsZClcbiAqIEBsaWNlbnNlICAgTGljZW5zZWQgdW5kZXIgTUlUIGxpY2Vuc2VcbiAqICAgICAgICAgICAgU2VlIGh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9zdGVmYW5wZW5uZXIvZXM2LXByb21pc2UvbWFzdGVyL0xJQ0VOU0VcbiAqIEB2ZXJzaW9uICAgdjQuMi44KzFlNjhkY2U2XG4gKi9cblxuKGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcblx0dHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnID8gbW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCkgOlxuXHR0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoZmFjdG9yeSkgOlxuXHQoZ2xvYmFsLkVTNlByb21pc2UgPSBmYWN0b3J5KCkpO1xufSh0aGlzLCAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7XG5cbmZ1bmN0aW9uIG9iamVjdE9yRnVuY3Rpb24oeCkge1xuICB2YXIgdHlwZSA9IHR5cGVvZiB4O1xuICByZXR1cm4geCAhPT0gbnVsbCAmJiAodHlwZSA9PT0gJ29iamVjdCcgfHwgdHlwZSA9PT0gJ2Z1bmN0aW9uJyk7XG59XG5cbmZ1bmN0aW9uIGlzRnVuY3Rpb24oeCkge1xuICByZXR1cm4gdHlwZW9mIHggPT09ICdmdW5jdGlvbic7XG59XG5cblxuXG52YXIgX2lzQXJyYXkgPSB2b2lkIDA7XG5pZiAoQXJyYXkuaXNBcnJheSkge1xuICBfaXNBcnJheSA9IEFycmF5LmlzQXJyYXk7XG59IGVsc2Uge1xuICBfaXNBcnJheSA9IGZ1bmN0aW9uICh4KSB7XG4gICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh4KSA9PT0gJ1tvYmplY3QgQXJyYXldJztcbiAgfTtcbn1cblxudmFyIGlzQXJyYXkgPSBfaXNBcnJheTtcblxudmFyIGxlbiA9IDA7XG52YXIgdmVydHhOZXh0ID0gdm9pZCAwO1xudmFyIGN1c3RvbVNjaGVkdWxlckZuID0gdm9pZCAwO1xuXG52YXIgYXNhcCA9IGZ1bmN0aW9uIGFzYXAoY2FsbGJhY2ssIGFyZykge1xuICBxdWV1ZVtsZW5dID0gY2FsbGJhY2s7XG4gIHF1ZXVlW2xlbiArIDFdID0gYXJnO1xuICBsZW4gKz0gMjtcbiAgaWYgKGxlbiA9PT0gMikge1xuICAgIC8vIElmIGxlbiBpcyAyLCB0aGF0IG1lYW5zIHRoYXQgd2UgbmVlZCB0byBzY2hlZHVsZSBhbiBhc3luYyBmbHVzaC5cbiAgICAvLyBJZiBhZGRpdGlvbmFsIGNhbGxiYWNrcyBhcmUgcXVldWVkIGJlZm9yZSB0aGUgcXVldWUgaXMgZmx1c2hlZCwgdGhleVxuICAgIC8vIHdpbGwgYmUgcHJvY2Vzc2VkIGJ5IHRoaXMgZmx1c2ggdGhhdCB3ZSBhcmUgc2NoZWR1bGluZy5cbiAgICBpZiAoY3VzdG9tU2NoZWR1bGVyRm4pIHtcbiAgICAgIGN1c3RvbVNjaGVkdWxlckZuKGZsdXNoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2NoZWR1bGVGbHVzaCgpO1xuICAgIH1cbiAgfVxufTtcblxuZnVuY3Rpb24gc2V0U2NoZWR1bGVyKHNjaGVkdWxlRm4pIHtcbiAgY3VzdG9tU2NoZWR1bGVyRm4gPSBzY2hlZHVsZUZuO1xufVxuXG5mdW5jdGlvbiBzZXRBc2FwKGFzYXBGbikge1xuICBhc2FwID0gYXNhcEZuO1xufVxuXG52YXIgYnJvd3NlcldpbmRvdyA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gd2luZG93IDogdW5kZWZpbmVkO1xudmFyIGJyb3dzZXJHbG9iYWwgPSBicm93c2VyV2luZG93IHx8IHt9O1xudmFyIEJyb3dzZXJNdXRhdGlvbk9ic2VydmVyID0gYnJvd3Nlckdsb2JhbC5NdXRhdGlvbk9ic2VydmVyIHx8IGJyb3dzZXJHbG9iYWwuV2ViS2l0TXV0YXRpb25PYnNlcnZlcjtcbnZhciBpc05vZGUgPSB0eXBlb2Ygc2VsZiA9PT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIHByb2Nlc3MgIT09ICd1bmRlZmluZWQnICYmIHt9LnRvU3RyaW5nLmNhbGwocHJvY2VzcykgPT09ICdbb2JqZWN0IHByb2Nlc3NdJztcblxuLy8gdGVzdCBmb3Igd2ViIHdvcmtlciBidXQgbm90IGluIElFMTBcbnZhciBpc1dvcmtlciA9IHR5cGVvZiBVaW50OENsYW1wZWRBcnJheSAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIGltcG9ydFNjcmlwdHMgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBNZXNzYWdlQ2hhbm5lbCAhPT0gJ3VuZGVmaW5lZCc7XG5cbi8vIG5vZGVcbmZ1bmN0aW9uIHVzZU5leHRUaWNrKCkge1xuICAvLyBub2RlIHZlcnNpb24gMC4xMC54IGRpc3BsYXlzIGEgZGVwcmVjYXRpb24gd2FybmluZyB3aGVuIG5leHRUaWNrIGlzIHVzZWQgcmVjdXJzaXZlbHlcbiAgLy8gc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9jdWpvanMvd2hlbi9pc3N1ZXMvNDEwIGZvciBkZXRhaWxzXG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHByb2Nlc3MubmV4dFRpY2soZmx1c2gpO1xuICB9O1xufVxuXG4vLyB2ZXJ0eFxuZnVuY3Rpb24gdXNlVmVydHhUaW1lcigpIHtcbiAgaWYgKHR5cGVvZiB2ZXJ0eE5leHQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIHZlcnR4TmV4dChmbHVzaCk7XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiB1c2VTZXRUaW1lb3V0KCk7XG59XG5cbmZ1bmN0aW9uIHVzZU11dGF0aW9uT2JzZXJ2ZXIoKSB7XG4gIHZhciBpdGVyYXRpb25zID0gMDtcbiAgdmFyIG9ic2VydmVyID0gbmV3IEJyb3dzZXJNdXRhdGlvbk9ic2VydmVyKGZsdXNoKTtcbiAgdmFyIG5vZGUgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnJyk7XG4gIG9ic2VydmVyLm9ic2VydmUobm9kZSwgeyBjaGFyYWN0ZXJEYXRhOiB0cnVlIH0pO1xuXG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgbm9kZS5kYXRhID0gaXRlcmF0aW9ucyA9ICsraXRlcmF0aW9ucyAlIDI7XG4gIH07XG59XG5cbi8vIHdlYiB3b3JrZXJcbmZ1bmN0aW9uIHVzZU1lc3NhZ2VDaGFubmVsKCkge1xuICB2YXIgY2hhbm5lbCA9IG5ldyBNZXNzYWdlQ2hhbm5lbCgpO1xuICBjaGFubmVsLnBvcnQxLm9ubWVzc2FnZSA9IGZsdXNoO1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBjaGFubmVsLnBvcnQyLnBvc3RNZXNzYWdlKDApO1xuICB9O1xufVxuXG5mdW5jdGlvbiB1c2VTZXRUaW1lb3V0KCkge1xuICAvLyBTdG9yZSBzZXRUaW1lb3V0IHJlZmVyZW5jZSBzbyBlczYtcHJvbWlzZSB3aWxsIGJlIHVuYWZmZWN0ZWQgYnlcbiAgLy8gb3RoZXIgY29kZSBtb2RpZnlpbmcgc2V0VGltZW91dCAobGlrZSBzaW5vbi51c2VGYWtlVGltZXJzKCkpXG4gIHZhciBnbG9iYWxTZXRUaW1lb3V0ID0gc2V0VGltZW91dDtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gZ2xvYmFsU2V0VGltZW91dChmbHVzaCwgMSk7XG4gIH07XG59XG5cbnZhciBxdWV1ZSA9IG5ldyBBcnJheSgxMDAwKTtcbmZ1bmN0aW9uIGZsdXNoKCkge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSArPSAyKSB7XG4gICAgdmFyIGNhbGxiYWNrID0gcXVldWVbaV07XG4gICAgdmFyIGFyZyA9IHF1ZXVlW2kgKyAxXTtcblxuICAgIGNhbGxiYWNrKGFyZyk7XG5cbiAgICBxdWV1ZVtpXSA9IHVuZGVmaW5lZDtcbiAgICBxdWV1ZVtpICsgMV0gPSB1bmRlZmluZWQ7XG4gIH1cblxuICBsZW4gPSAwO1xufVxuXG5mdW5jdGlvbiBhdHRlbXB0VmVydHgoKSB7XG4gIHRyeSB7XG4gICAgdmFyIHZlcnR4ID0gRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKS5yZXF1aXJlKCd2ZXJ0eCcpO1xuICAgIHZlcnR4TmV4dCA9IHZlcnR4LnJ1bk9uTG9vcCB8fCB2ZXJ0eC5ydW5PbkNvbnRleHQ7XG4gICAgcmV0dXJuIHVzZVZlcnR4VGltZXIoKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiB1c2VTZXRUaW1lb3V0KCk7XG4gIH1cbn1cblxudmFyIHNjaGVkdWxlRmx1c2ggPSB2b2lkIDA7XG4vLyBEZWNpZGUgd2hhdCBhc3luYyBtZXRob2QgdG8gdXNlIHRvIHRyaWdnZXJpbmcgcHJvY2Vzc2luZyBvZiBxdWV1ZWQgY2FsbGJhY2tzOlxuaWYgKGlzTm9kZSkge1xuICBzY2hlZHVsZUZsdXNoID0gdXNlTmV4dFRpY2soKTtcbn0gZWxzZSBpZiAoQnJvd3Nlck11dGF0aW9uT2JzZXJ2ZXIpIHtcbiAgc2NoZWR1bGVGbHVzaCA9IHVzZU11dGF0aW9uT2JzZXJ2ZXIoKTtcbn0gZWxzZSBpZiAoaXNXb3JrZXIpIHtcbiAgc2NoZWR1bGVGbHVzaCA9IHVzZU1lc3NhZ2VDaGFubmVsKCk7XG59IGVsc2UgaWYgKGJyb3dzZXJXaW5kb3cgPT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJykge1xuICBzY2hlZHVsZUZsdXNoID0gYXR0ZW1wdFZlcnR4KCk7XG59IGVsc2Uge1xuICBzY2hlZHVsZUZsdXNoID0gdXNlU2V0VGltZW91dCgpO1xufVxuXG5mdW5jdGlvbiB0aGVuKG9uRnVsZmlsbG1lbnQsIG9uUmVqZWN0aW9uKSB7XG4gIHZhciBwYXJlbnQgPSB0aGlzO1xuXG4gIHZhciBjaGlsZCA9IG5ldyB0aGlzLmNvbnN0cnVjdG9yKG5vb3ApO1xuXG4gIGlmIChjaGlsZFtQUk9NSVNFX0lEXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgbWFrZVByb21pc2UoY2hpbGQpO1xuICB9XG5cbiAgdmFyIF9zdGF0ZSA9IHBhcmVudC5fc3RhdGU7XG5cblxuICBpZiAoX3N0YXRlKSB7XG4gICAgdmFyIGNhbGxiYWNrID0gYXJndW1lbnRzW19zdGF0ZSAtIDFdO1xuICAgIGFzYXAoZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGludm9rZUNhbGxiYWNrKF9zdGF0ZSwgY2hpbGQsIGNhbGxiYWNrLCBwYXJlbnQuX3Jlc3VsdCk7XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgc3Vic2NyaWJlKHBhcmVudCwgY2hpbGQsIG9uRnVsZmlsbG1lbnQsIG9uUmVqZWN0aW9uKTtcbiAgfVxuXG4gIHJldHVybiBjaGlsZDtcbn1cblxuLyoqXG4gIGBQcm9taXNlLnJlc29sdmVgIHJldHVybnMgYSBwcm9taXNlIHRoYXQgd2lsbCBiZWNvbWUgcmVzb2x2ZWQgd2l0aCB0aGVcbiAgcGFzc2VkIGB2YWx1ZWAuIEl0IGlzIHNob3J0aGFuZCBmb3IgdGhlIGZvbGxvd2luZzpcblxuICBgYGBqYXZhc2NyaXB0XG4gIGxldCBwcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KXtcbiAgICByZXNvbHZlKDEpO1xuICB9KTtcblxuICBwcm9taXNlLnRoZW4oZnVuY3Rpb24odmFsdWUpe1xuICAgIC8vIHZhbHVlID09PSAxXG4gIH0pO1xuICBgYGBcblxuICBJbnN0ZWFkIG9mIHdyaXRpbmcgdGhlIGFib3ZlLCB5b3VyIGNvZGUgbm93IHNpbXBseSBiZWNvbWVzIHRoZSBmb2xsb3dpbmc6XG5cbiAgYGBgamF2YXNjcmlwdFxuICBsZXQgcHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZSgxKTtcblxuICBwcm9taXNlLnRoZW4oZnVuY3Rpb24odmFsdWUpe1xuICAgIC8vIHZhbHVlID09PSAxXG4gIH0pO1xuICBgYGBcblxuICBAbWV0aG9kIHJlc29sdmVcbiAgQHN0YXRpY1xuICBAcGFyYW0ge0FueX0gdmFsdWUgdmFsdWUgdGhhdCB0aGUgcmV0dXJuZWQgcHJvbWlzZSB3aWxsIGJlIHJlc29sdmVkIHdpdGhcbiAgVXNlZnVsIGZvciB0b29saW5nLlxuICBAcmV0dXJuIHtQcm9taXNlfSBhIHByb21pc2UgdGhhdCB3aWxsIGJlY29tZSBmdWxmaWxsZWQgd2l0aCB0aGUgZ2l2ZW5cbiAgYHZhbHVlYFxuKi9cbmZ1bmN0aW9uIHJlc29sdmUkMShvYmplY3QpIHtcbiAgLypqc2hpbnQgdmFsaWR0aGlzOnRydWUgKi9cbiAgdmFyIENvbnN0cnVjdG9yID0gdGhpcztcblxuICBpZiAob2JqZWN0ICYmIHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnICYmIG9iamVjdC5jb25zdHJ1Y3RvciA9PT0gQ29uc3RydWN0b3IpIHtcbiAgICByZXR1cm4gb2JqZWN0O1xuICB9XG5cbiAgdmFyIHByb21pc2UgPSBuZXcgQ29uc3RydWN0b3Iobm9vcCk7XG4gIHJlc29sdmUocHJvbWlzZSwgb2JqZWN0KTtcbiAgcmV0dXJuIHByb21pc2U7XG59XG5cbnZhciBQUk9NSVNFX0lEID0gTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyaW5nKDIpO1xuXG5mdW5jdGlvbiBub29wKCkge31cblxudmFyIFBFTkRJTkcgPSB2b2lkIDA7XG52YXIgRlVMRklMTEVEID0gMTtcbnZhciBSRUpFQ1RFRCA9IDI7XG5cbmZ1bmN0aW9uIHNlbGZGdWxmaWxsbWVudCgpIHtcbiAgcmV0dXJuIG5ldyBUeXBlRXJyb3IoXCJZb3UgY2Fubm90IHJlc29sdmUgYSBwcm9taXNlIHdpdGggaXRzZWxmXCIpO1xufVxuXG5mdW5jdGlvbiBjYW5ub3RSZXR1cm5Pd24oKSB7XG4gIHJldHVybiBuZXcgVHlwZUVycm9yKCdBIHByb21pc2VzIGNhbGxiYWNrIGNhbm5vdCByZXR1cm4gdGhhdCBzYW1lIHByb21pc2UuJyk7XG59XG5cbmZ1bmN0aW9uIHRyeVRoZW4odGhlbiQkMSwgdmFsdWUsIGZ1bGZpbGxtZW50SGFuZGxlciwgcmVqZWN0aW9uSGFuZGxlcikge1xuICB0cnkge1xuICAgIHRoZW4kJDEuY2FsbCh2YWx1ZSwgZnVsZmlsbG1lbnRIYW5kbGVyLCByZWplY3Rpb25IYW5kbGVyKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGhhbmRsZUZvcmVpZ25UaGVuYWJsZShwcm9taXNlLCB0aGVuYWJsZSwgdGhlbiQkMSkge1xuICBhc2FwKGZ1bmN0aW9uIChwcm9taXNlKSB7XG4gICAgdmFyIHNlYWxlZCA9IGZhbHNlO1xuICAgIHZhciBlcnJvciA9IHRyeVRoZW4odGhlbiQkMSwgdGhlbmFibGUsIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgaWYgKHNlYWxlZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBzZWFsZWQgPSB0cnVlO1xuICAgICAgaWYgKHRoZW5hYmxlICE9PSB2YWx1ZSkge1xuICAgICAgICByZXNvbHZlKHByb21pc2UsIHZhbHVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZ1bGZpbGwocHJvbWlzZSwgdmFsdWUpO1xuICAgICAgfVxuICAgIH0sIGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICAgIGlmIChzZWFsZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgc2VhbGVkID0gdHJ1ZTtcblxuICAgICAgcmVqZWN0KHByb21pc2UsIHJlYXNvbik7XG4gICAgfSwgJ1NldHRsZTogJyArIChwcm9taXNlLl9sYWJlbCB8fCAnIHVua25vd24gcHJvbWlzZScpKTtcblxuICAgIGlmICghc2VhbGVkICYmIGVycm9yKSB7XG4gICAgICBzZWFsZWQgPSB0cnVlO1xuICAgICAgcmVqZWN0KHByb21pc2UsIGVycm9yKTtcbiAgICB9XG4gIH0sIHByb21pc2UpO1xufVxuXG5mdW5jdGlvbiBoYW5kbGVPd25UaGVuYWJsZShwcm9taXNlLCB0aGVuYWJsZSkge1xuICBpZiAodGhlbmFibGUuX3N0YXRlID09PSBGVUxGSUxMRUQpIHtcbiAgICBmdWxmaWxsKHByb21pc2UsIHRoZW5hYmxlLl9yZXN1bHQpO1xuICB9IGVsc2UgaWYgKHRoZW5hYmxlLl9zdGF0ZSA9PT0gUkVKRUNURUQpIHtcbiAgICByZWplY3QocHJvbWlzZSwgdGhlbmFibGUuX3Jlc3VsdCk7XG4gIH0gZWxzZSB7XG4gICAgc3Vic2NyaWJlKHRoZW5hYmxlLCB1bmRlZmluZWQsIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgcmV0dXJuIHJlc29sdmUocHJvbWlzZSwgdmFsdWUpO1xuICAgIH0sIGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICAgIHJldHVybiByZWplY3QocHJvbWlzZSwgcmVhc29uKTtcbiAgICB9KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBoYW5kbGVNYXliZVRoZW5hYmxlKHByb21pc2UsIG1heWJlVGhlbmFibGUsIHRoZW4kJDEpIHtcbiAgaWYgKG1heWJlVGhlbmFibGUuY29uc3RydWN0b3IgPT09IHByb21pc2UuY29uc3RydWN0b3IgJiYgdGhlbiQkMSA9PT0gdGhlbiAmJiBtYXliZVRoZW5hYmxlLmNvbnN0cnVjdG9yLnJlc29sdmUgPT09IHJlc29sdmUkMSkge1xuICAgIGhhbmRsZU93blRoZW5hYmxlKHByb21pc2UsIG1heWJlVGhlbmFibGUpO1xuICB9IGVsc2Uge1xuICAgIGlmICh0aGVuJCQxID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGZ1bGZpbGwocHJvbWlzZSwgbWF5YmVUaGVuYWJsZSk7XG4gICAgfSBlbHNlIGlmIChpc0Z1bmN0aW9uKHRoZW4kJDEpKSB7XG4gICAgICBoYW5kbGVGb3JlaWduVGhlbmFibGUocHJvbWlzZSwgbWF5YmVUaGVuYWJsZSwgdGhlbiQkMSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZ1bGZpbGwocHJvbWlzZSwgbWF5YmVUaGVuYWJsZSk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHJlc29sdmUocHJvbWlzZSwgdmFsdWUpIHtcbiAgaWYgKHByb21pc2UgPT09IHZhbHVlKSB7XG4gICAgcmVqZWN0KHByb21pc2UsIHNlbGZGdWxmaWxsbWVudCgpKTtcbiAgfSBlbHNlIGlmIChvYmplY3RPckZ1bmN0aW9uKHZhbHVlKSkge1xuICAgIHZhciB0aGVuJCQxID0gdm9pZCAwO1xuICAgIHRyeSB7XG4gICAgICB0aGVuJCQxID0gdmFsdWUudGhlbjtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcmVqZWN0KHByb21pc2UsIGVycm9yKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaGFuZGxlTWF5YmVUaGVuYWJsZShwcm9taXNlLCB2YWx1ZSwgdGhlbiQkMSk7XG4gIH0gZWxzZSB7XG4gICAgZnVsZmlsbChwcm9taXNlLCB2YWx1ZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcHVibGlzaFJlamVjdGlvbihwcm9taXNlKSB7XG4gIGlmIChwcm9taXNlLl9vbmVycm9yKSB7XG4gICAgcHJvbWlzZS5fb25lcnJvcihwcm9taXNlLl9yZXN1bHQpO1xuICB9XG5cbiAgcHVibGlzaChwcm9taXNlKTtcbn1cblxuZnVuY3Rpb24gZnVsZmlsbChwcm9taXNlLCB2YWx1ZSkge1xuICBpZiAocHJvbWlzZS5fc3RhdGUgIT09IFBFTkRJTkcpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBwcm9taXNlLl9yZXN1bHQgPSB2YWx1ZTtcbiAgcHJvbWlzZS5fc3RhdGUgPSBGVUxGSUxMRUQ7XG5cbiAgaWYgKHByb21pc2UuX3N1YnNjcmliZXJzLmxlbmd0aCAhPT0gMCkge1xuICAgIGFzYXAocHVibGlzaCwgcHJvbWlzZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVqZWN0KHByb21pc2UsIHJlYXNvbikge1xuICBpZiAocHJvbWlzZS5fc3RhdGUgIT09IFBFTkRJTkcpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgcHJvbWlzZS5fc3RhdGUgPSBSRUpFQ1RFRDtcbiAgcHJvbWlzZS5fcmVzdWx0ID0gcmVhc29uO1xuXG4gIGFzYXAocHVibGlzaFJlamVjdGlvbiwgcHJvbWlzZSk7XG59XG5cbmZ1bmN0aW9uIHN1YnNjcmliZShwYXJlbnQsIGNoaWxkLCBvbkZ1bGZpbGxtZW50LCBvblJlamVjdGlvbikge1xuICB2YXIgX3N1YnNjcmliZXJzID0gcGFyZW50Ll9zdWJzY3JpYmVycztcbiAgdmFyIGxlbmd0aCA9IF9zdWJzY3JpYmVycy5sZW5ndGg7XG5cblxuICBwYXJlbnQuX29uZXJyb3IgPSBudWxsO1xuXG4gIF9zdWJzY3JpYmVyc1tsZW5ndGhdID0gY2hpbGQ7XG4gIF9zdWJzY3JpYmVyc1tsZW5ndGggKyBGVUxGSUxMRURdID0gb25GdWxmaWxsbWVudDtcbiAgX3N1YnNjcmliZXJzW2xlbmd0aCArIFJFSkVDVEVEXSA9IG9uUmVqZWN0aW9uO1xuXG4gIGlmIChsZW5ndGggPT09IDAgJiYgcGFyZW50Ll9zdGF0ZSkge1xuICAgIGFzYXAocHVibGlzaCwgcGFyZW50KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwdWJsaXNoKHByb21pc2UpIHtcbiAgdmFyIHN1YnNjcmliZXJzID0gcHJvbWlzZS5fc3Vic2NyaWJlcnM7XG4gIHZhciBzZXR0bGVkID0gcHJvbWlzZS5fc3RhdGU7XG5cbiAgaWYgKHN1YnNjcmliZXJzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBjaGlsZCA9IHZvaWQgMCxcbiAgICAgIGNhbGxiYWNrID0gdm9pZCAwLFxuICAgICAgZGV0YWlsID0gcHJvbWlzZS5fcmVzdWx0O1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgc3Vic2NyaWJlcnMubGVuZ3RoOyBpICs9IDMpIHtcbiAgICBjaGlsZCA9IHN1YnNjcmliZXJzW2ldO1xuICAgIGNhbGxiYWNrID0gc3Vic2NyaWJlcnNbaSArIHNldHRsZWRdO1xuXG4gICAgaWYgKGNoaWxkKSB7XG4gICAgICBpbnZva2VDYWxsYmFjayhzZXR0bGVkLCBjaGlsZCwgY2FsbGJhY2ssIGRldGFpbCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNhbGxiYWNrKGRldGFpbCk7XG4gICAgfVxuICB9XG5cbiAgcHJvbWlzZS5fc3Vic2NyaWJlcnMubGVuZ3RoID0gMDtcbn1cblxuZnVuY3Rpb24gaW52b2tlQ2FsbGJhY2soc2V0dGxlZCwgcHJvbWlzZSwgY2FsbGJhY2ssIGRldGFpbCkge1xuICB2YXIgaGFzQ2FsbGJhY2sgPSBpc0Z1bmN0aW9uKGNhbGxiYWNrKSxcbiAgICAgIHZhbHVlID0gdm9pZCAwLFxuICAgICAgZXJyb3IgPSB2b2lkIDAsXG4gICAgICBzdWNjZWVkZWQgPSB0cnVlO1xuXG4gIGlmIChoYXNDYWxsYmFjaykge1xuICAgIHRyeSB7XG4gICAgICB2YWx1ZSA9IGNhbGxiYWNrKGRldGFpbCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgc3VjY2VlZGVkID0gZmFsc2U7XG4gICAgICBlcnJvciA9IGU7XG4gICAgfVxuXG4gICAgaWYgKHByb21pc2UgPT09IHZhbHVlKSB7XG4gICAgICByZWplY3QocHJvbWlzZSwgY2Fubm90UmV0dXJuT3duKCkpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB2YWx1ZSA9IGRldGFpbDtcbiAgfVxuXG4gIGlmIChwcm9taXNlLl9zdGF0ZSAhPT0gUEVORElORykge1xuICAgIC8vIG5vb3BcbiAgfSBlbHNlIGlmIChoYXNDYWxsYmFjayAmJiBzdWNjZWVkZWQpIHtcbiAgICByZXNvbHZlKHByb21pc2UsIHZhbHVlKTtcbiAgfSBlbHNlIGlmIChzdWNjZWVkZWQgPT09IGZhbHNlKSB7XG4gICAgcmVqZWN0KHByb21pc2UsIGVycm9yKTtcbiAgfSBlbHNlIGlmIChzZXR0bGVkID09PSBGVUxGSUxMRUQpIHtcbiAgICBmdWxmaWxsKHByb21pc2UsIHZhbHVlKTtcbiAgfSBlbHNlIGlmIChzZXR0bGVkID09PSBSRUpFQ1RFRCkge1xuICAgIHJlamVjdChwcm9taXNlLCB2YWx1ZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaW5pdGlhbGl6ZVByb21pc2UocHJvbWlzZSwgcmVzb2x2ZXIpIHtcbiAgdHJ5IHtcbiAgICByZXNvbHZlcihmdW5jdGlvbiByZXNvbHZlUHJvbWlzZSh2YWx1ZSkge1xuICAgICAgcmVzb2x2ZShwcm9taXNlLCB2YWx1ZSk7XG4gICAgfSwgZnVuY3Rpb24gcmVqZWN0UHJvbWlzZShyZWFzb24pIHtcbiAgICAgIHJlamVjdChwcm9taXNlLCByZWFzb24pO1xuICAgIH0pO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmVqZWN0KHByb21pc2UsIGUpO1xuICB9XG59XG5cbnZhciBpZCA9IDA7XG5mdW5jdGlvbiBuZXh0SWQoKSB7XG4gIHJldHVybiBpZCsrO1xufVxuXG5mdW5jdGlvbiBtYWtlUHJvbWlzZShwcm9taXNlKSB7XG4gIHByb21pc2VbUFJPTUlTRV9JRF0gPSBpZCsrO1xuICBwcm9taXNlLl9zdGF0ZSA9IHVuZGVmaW5lZDtcbiAgcHJvbWlzZS5fcmVzdWx0ID0gdW5kZWZpbmVkO1xuICBwcm9taXNlLl9zdWJzY3JpYmVycyA9IFtdO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0aW9uRXJyb3IoKSB7XG4gIHJldHVybiBuZXcgRXJyb3IoJ0FycmF5IE1ldGhvZHMgbXVzdCBiZSBwcm92aWRlZCBhbiBBcnJheScpO1xufVxuXG52YXIgRW51bWVyYXRvciA9IGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gRW51bWVyYXRvcihDb25zdHJ1Y3RvciwgaW5wdXQpIHtcbiAgICB0aGlzLl9pbnN0YW5jZUNvbnN0cnVjdG9yID0gQ29uc3RydWN0b3I7XG4gICAgdGhpcy5wcm9taXNlID0gbmV3IENvbnN0cnVjdG9yKG5vb3ApO1xuXG4gICAgaWYgKCF0aGlzLnByb21pc2VbUFJPTUlTRV9JRF0pIHtcbiAgICAgIG1ha2VQcm9taXNlKHRoaXMucHJvbWlzZSk7XG4gICAgfVxuXG4gICAgaWYgKGlzQXJyYXkoaW5wdXQpKSB7XG4gICAgICB0aGlzLmxlbmd0aCA9IGlucHV0Lmxlbmd0aDtcbiAgICAgIHRoaXMuX3JlbWFpbmluZyA9IGlucHV0Lmxlbmd0aDtcblxuICAgICAgdGhpcy5fcmVzdWx0ID0gbmV3IEFycmF5KHRoaXMubGVuZ3RoKTtcblxuICAgICAgaWYgKHRoaXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGZ1bGZpbGwodGhpcy5wcm9taXNlLCB0aGlzLl9yZXN1bHQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5sZW5ndGggPSB0aGlzLmxlbmd0aCB8fCAwO1xuICAgICAgICB0aGlzLl9lbnVtZXJhdGUoaW5wdXQpO1xuICAgICAgICBpZiAodGhpcy5fcmVtYWluaW5nID09PSAwKSB7XG4gICAgICAgICAgZnVsZmlsbCh0aGlzLnByb21pc2UsIHRoaXMuX3Jlc3VsdCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmVqZWN0KHRoaXMucHJvbWlzZSwgdmFsaWRhdGlvbkVycm9yKCkpO1xuICAgIH1cbiAgfVxuXG4gIEVudW1lcmF0b3IucHJvdG90eXBlLl9lbnVtZXJhdGUgPSBmdW5jdGlvbiBfZW51bWVyYXRlKGlucHV0KSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IHRoaXMuX3N0YXRlID09PSBQRU5ESU5HICYmIGkgPCBpbnB1dC5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5fZWFjaEVudHJ5KGlucHV0W2ldLCBpKTtcbiAgICB9XG4gIH07XG5cbiAgRW51bWVyYXRvci5wcm90b3R5cGUuX2VhY2hFbnRyeSA9IGZ1bmN0aW9uIF9lYWNoRW50cnkoZW50cnksIGkpIHtcbiAgICB2YXIgYyA9IHRoaXMuX2luc3RhbmNlQ29uc3RydWN0b3I7XG4gICAgdmFyIHJlc29sdmUkJDEgPSBjLnJlc29sdmU7XG5cblxuICAgIGlmIChyZXNvbHZlJCQxID09PSByZXNvbHZlJDEpIHtcbiAgICAgIHZhciBfdGhlbiA9IHZvaWQgMDtcbiAgICAgIHZhciBlcnJvciA9IHZvaWQgMDtcbiAgICAgIHZhciBkaWRFcnJvciA9IGZhbHNlO1xuICAgICAgdHJ5IHtcbiAgICAgICAgX3RoZW4gPSBlbnRyeS50aGVuO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBkaWRFcnJvciA9IHRydWU7XG4gICAgICAgIGVycm9yID0gZTtcbiAgICAgIH1cblxuICAgICAgaWYgKF90aGVuID09PSB0aGVuICYmIGVudHJ5Ll9zdGF0ZSAhPT0gUEVORElORykge1xuICAgICAgICB0aGlzLl9zZXR0bGVkQXQoZW50cnkuX3N0YXRlLCBpLCBlbnRyeS5fcmVzdWx0KTtcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIF90aGVuICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRoaXMuX3JlbWFpbmluZy0tO1xuICAgICAgICB0aGlzLl9yZXN1bHRbaV0gPSBlbnRyeTtcbiAgICAgIH0gZWxzZSBpZiAoYyA9PT0gUHJvbWlzZSQxKSB7XG4gICAgICAgIHZhciBwcm9taXNlID0gbmV3IGMobm9vcCk7XG4gICAgICAgIGlmIChkaWRFcnJvcikge1xuICAgICAgICAgIHJlamVjdChwcm9taXNlLCBlcnJvcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaGFuZGxlTWF5YmVUaGVuYWJsZShwcm9taXNlLCBlbnRyeSwgX3RoZW4pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3dpbGxTZXR0bGVBdChwcm9taXNlLCBpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX3dpbGxTZXR0bGVBdChuZXcgYyhmdW5jdGlvbiAocmVzb2x2ZSQkMSkge1xuICAgICAgICAgIHJldHVybiByZXNvbHZlJCQxKGVudHJ5KTtcbiAgICAgICAgfSksIGkpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl93aWxsU2V0dGxlQXQocmVzb2x2ZSQkMShlbnRyeSksIGkpO1xuICAgIH1cbiAgfTtcblxuICBFbnVtZXJhdG9yLnByb3RvdHlwZS5fc2V0dGxlZEF0ID0gZnVuY3Rpb24gX3NldHRsZWRBdChzdGF0ZSwgaSwgdmFsdWUpIHtcbiAgICB2YXIgcHJvbWlzZSA9IHRoaXMucHJvbWlzZTtcblxuXG4gICAgaWYgKHByb21pc2UuX3N0YXRlID09PSBQRU5ESU5HKSB7XG4gICAgICB0aGlzLl9yZW1haW5pbmctLTtcblxuICAgICAgaWYgKHN0YXRlID09PSBSRUpFQ1RFRCkge1xuICAgICAgICByZWplY3QocHJvbWlzZSwgdmFsdWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fcmVzdWx0W2ldID0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3JlbWFpbmluZyA9PT0gMCkge1xuICAgICAgZnVsZmlsbChwcm9taXNlLCB0aGlzLl9yZXN1bHQpO1xuICAgIH1cbiAgfTtcblxuICBFbnVtZXJhdG9yLnByb3RvdHlwZS5fd2lsbFNldHRsZUF0ID0gZnVuY3Rpb24gX3dpbGxTZXR0bGVBdChwcm9taXNlLCBpKSB7XG4gICAgdmFyIGVudW1lcmF0b3IgPSB0aGlzO1xuXG4gICAgc3Vic2NyaWJlKHByb21pc2UsIHVuZGVmaW5lZCwgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICByZXR1cm4gZW51bWVyYXRvci5fc2V0dGxlZEF0KEZVTEZJTExFRCwgaSwgdmFsdWUpO1xuICAgIH0sIGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICAgIHJldHVybiBlbnVtZXJhdG9yLl9zZXR0bGVkQXQoUkVKRUNURUQsIGksIHJlYXNvbik7XG4gICAgfSk7XG4gIH07XG5cbiAgcmV0dXJuIEVudW1lcmF0b3I7XG59KCk7XG5cbi8qKlxuICBgUHJvbWlzZS5hbGxgIGFjY2VwdHMgYW4gYXJyYXkgb2YgcHJvbWlzZXMsIGFuZCByZXR1cm5zIGEgbmV3IHByb21pc2Ugd2hpY2hcbiAgaXMgZnVsZmlsbGVkIHdpdGggYW4gYXJyYXkgb2YgZnVsZmlsbG1lbnQgdmFsdWVzIGZvciB0aGUgcGFzc2VkIHByb21pc2VzLCBvclxuICByZWplY3RlZCB3aXRoIHRoZSByZWFzb24gb2YgdGhlIGZpcnN0IHBhc3NlZCBwcm9taXNlIHRvIGJlIHJlamVjdGVkLiBJdCBjYXN0cyBhbGxcbiAgZWxlbWVudHMgb2YgdGhlIHBhc3NlZCBpdGVyYWJsZSB0byBwcm9taXNlcyBhcyBpdCBydW5zIHRoaXMgYWxnb3JpdGhtLlxuXG4gIEV4YW1wbGU6XG5cbiAgYGBgamF2YXNjcmlwdFxuICBsZXQgcHJvbWlzZTEgPSByZXNvbHZlKDEpO1xuICBsZXQgcHJvbWlzZTIgPSByZXNvbHZlKDIpO1xuICBsZXQgcHJvbWlzZTMgPSByZXNvbHZlKDMpO1xuICBsZXQgcHJvbWlzZXMgPSBbIHByb21pc2UxLCBwcm9taXNlMiwgcHJvbWlzZTMgXTtcblxuICBQcm9taXNlLmFsbChwcm9taXNlcykudGhlbihmdW5jdGlvbihhcnJheSl7XG4gICAgLy8gVGhlIGFycmF5IGhlcmUgd291bGQgYmUgWyAxLCAyLCAzIF07XG4gIH0pO1xuICBgYGBcblxuICBJZiBhbnkgb2YgdGhlIGBwcm9taXNlc2AgZ2l2ZW4gdG8gYGFsbGAgYXJlIHJlamVjdGVkLCB0aGUgZmlyc3QgcHJvbWlzZVxuICB0aGF0IGlzIHJlamVjdGVkIHdpbGwgYmUgZ2l2ZW4gYXMgYW4gYXJndW1lbnQgdG8gdGhlIHJldHVybmVkIHByb21pc2VzJ3NcbiAgcmVqZWN0aW9uIGhhbmRsZXIuIEZvciBleGFtcGxlOlxuXG4gIEV4YW1wbGU6XG5cbiAgYGBgamF2YXNjcmlwdFxuICBsZXQgcHJvbWlzZTEgPSByZXNvbHZlKDEpO1xuICBsZXQgcHJvbWlzZTIgPSByZWplY3QobmV3IEVycm9yKFwiMlwiKSk7XG4gIGxldCBwcm9taXNlMyA9IHJlamVjdChuZXcgRXJyb3IoXCIzXCIpKTtcbiAgbGV0IHByb21pc2VzID0gWyBwcm9taXNlMSwgcHJvbWlzZTIsIHByb21pc2UzIF07XG5cbiAgUHJvbWlzZS5hbGwocHJvbWlzZXMpLnRoZW4oZnVuY3Rpb24oYXJyYXkpe1xuICAgIC8vIENvZGUgaGVyZSBuZXZlciBydW5zIGJlY2F1c2UgdGhlcmUgYXJlIHJlamVjdGVkIHByb21pc2VzIVxuICB9LCBmdW5jdGlvbihlcnJvcikge1xuICAgIC8vIGVycm9yLm1lc3NhZ2UgPT09IFwiMlwiXG4gIH0pO1xuICBgYGBcblxuICBAbWV0aG9kIGFsbFxuICBAc3RhdGljXG4gIEBwYXJhbSB7QXJyYXl9IGVudHJpZXMgYXJyYXkgb2YgcHJvbWlzZXNcbiAgQHBhcmFtIHtTdHJpbmd9IGxhYmVsIG9wdGlvbmFsIHN0cmluZyBmb3IgbGFiZWxpbmcgdGhlIHByb21pc2UuXG4gIFVzZWZ1bCBmb3IgdG9vbGluZy5cbiAgQHJldHVybiB7UHJvbWlzZX0gcHJvbWlzZSB0aGF0IGlzIGZ1bGZpbGxlZCB3aGVuIGFsbCBgcHJvbWlzZXNgIGhhdmUgYmVlblxuICBmdWxmaWxsZWQsIG9yIHJlamVjdGVkIGlmIGFueSBvZiB0aGVtIGJlY29tZSByZWplY3RlZC5cbiAgQHN0YXRpY1xuKi9cbmZ1bmN0aW9uIGFsbChlbnRyaWVzKSB7XG4gIHJldHVybiBuZXcgRW51bWVyYXRvcih0aGlzLCBlbnRyaWVzKS5wcm9taXNlO1xufVxuXG4vKipcbiAgYFByb21pc2UucmFjZWAgcmV0dXJucyBhIG5ldyBwcm9taXNlIHdoaWNoIGlzIHNldHRsZWQgaW4gdGhlIHNhbWUgd2F5IGFzIHRoZVxuICBmaXJzdCBwYXNzZWQgcHJvbWlzZSB0byBzZXR0bGUuXG5cbiAgRXhhbXBsZTpcblxuICBgYGBqYXZhc2NyaXB0XG4gIGxldCBwcm9taXNlMSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCl7XG4gICAgc2V0VGltZW91dChmdW5jdGlvbigpe1xuICAgICAgcmVzb2x2ZSgncHJvbWlzZSAxJyk7XG4gICAgfSwgMjAwKTtcbiAgfSk7XG5cbiAgbGV0IHByb21pc2UyID0gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KXtcbiAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7XG4gICAgICByZXNvbHZlKCdwcm9taXNlIDInKTtcbiAgICB9LCAxMDApO1xuICB9KTtcblxuICBQcm9taXNlLnJhY2UoW3Byb21pc2UxLCBwcm9taXNlMl0pLnRoZW4oZnVuY3Rpb24ocmVzdWx0KXtcbiAgICAvLyByZXN1bHQgPT09ICdwcm9taXNlIDInIGJlY2F1c2UgaXQgd2FzIHJlc29sdmVkIGJlZm9yZSBwcm9taXNlMVxuICAgIC8vIHdhcyByZXNvbHZlZC5cbiAgfSk7XG4gIGBgYFxuXG4gIGBQcm9taXNlLnJhY2VgIGlzIGRldGVybWluaXN0aWMgaW4gdGhhdCBvbmx5IHRoZSBzdGF0ZSBvZiB0aGUgZmlyc3RcbiAgc2V0dGxlZCBwcm9taXNlIG1hdHRlcnMuIEZvciBleGFtcGxlLCBldmVuIGlmIG90aGVyIHByb21pc2VzIGdpdmVuIHRvIHRoZVxuICBgcHJvbWlzZXNgIGFycmF5IGFyZ3VtZW50IGFyZSByZXNvbHZlZCwgYnV0IHRoZSBmaXJzdCBzZXR0bGVkIHByb21pc2UgaGFzXG4gIGJlY29tZSByZWplY3RlZCBiZWZvcmUgdGhlIG90aGVyIHByb21pc2VzIGJlY2FtZSBmdWxmaWxsZWQsIHRoZSByZXR1cm5lZFxuICBwcm9taXNlIHdpbGwgYmVjb21lIHJlamVjdGVkOlxuXG4gIGBgYGphdmFzY3JpcHRcbiAgbGV0IHByb21pc2UxID0gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KXtcbiAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7XG4gICAgICByZXNvbHZlKCdwcm9taXNlIDEnKTtcbiAgICB9LCAyMDApO1xuICB9KTtcblxuICBsZXQgcHJvbWlzZTIgPSBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3Qpe1xuICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKXtcbiAgICAgIHJlamVjdChuZXcgRXJyb3IoJ3Byb21pc2UgMicpKTtcbiAgICB9LCAxMDApO1xuICB9KTtcblxuICBQcm9taXNlLnJhY2UoW3Byb21pc2UxLCBwcm9taXNlMl0pLnRoZW4oZnVuY3Rpb24ocmVzdWx0KXtcbiAgICAvLyBDb2RlIGhlcmUgbmV2ZXIgcnVuc1xuICB9LCBmdW5jdGlvbihyZWFzb24pe1xuICAgIC8vIHJlYXNvbi5tZXNzYWdlID09PSAncHJvbWlzZSAyJyBiZWNhdXNlIHByb21pc2UgMiBiZWNhbWUgcmVqZWN0ZWQgYmVmb3JlXG4gICAgLy8gcHJvbWlzZSAxIGJlY2FtZSBmdWxmaWxsZWRcbiAgfSk7XG4gIGBgYFxuXG4gIEFuIGV4YW1wbGUgcmVhbC13b3JsZCB1c2UgY2FzZSBpcyBpbXBsZW1lbnRpbmcgdGltZW91dHM6XG5cbiAgYGBgamF2YXNjcmlwdFxuICBQcm9taXNlLnJhY2UoW2FqYXgoJ2Zvby5qc29uJyksIHRpbWVvdXQoNTAwMCldKVxuICBgYGBcblxuICBAbWV0aG9kIHJhY2VcbiAgQHN0YXRpY1xuICBAcGFyYW0ge0FycmF5fSBwcm9taXNlcyBhcnJheSBvZiBwcm9taXNlcyB0byBvYnNlcnZlXG4gIFVzZWZ1bCBmb3IgdG9vbGluZy5cbiAgQHJldHVybiB7UHJvbWlzZX0gYSBwcm9taXNlIHdoaWNoIHNldHRsZXMgaW4gdGhlIHNhbWUgd2F5IGFzIHRoZSBmaXJzdCBwYXNzZWRcbiAgcHJvbWlzZSB0byBzZXR0bGUuXG4qL1xuZnVuY3Rpb24gcmFjZShlbnRyaWVzKSB7XG4gIC8qanNoaW50IHZhbGlkdGhpczp0cnVlICovXG4gIHZhciBDb25zdHJ1Y3RvciA9IHRoaXM7XG5cbiAgaWYgKCFpc0FycmF5KGVudHJpZXMpKSB7XG4gICAgcmV0dXJuIG5ldyBDb25zdHJ1Y3RvcihmdW5jdGlvbiAoXywgcmVqZWN0KSB7XG4gICAgICByZXR1cm4gcmVqZWN0KG5ldyBUeXBlRXJyb3IoJ1lvdSBtdXN0IHBhc3MgYW4gYXJyYXkgdG8gcmFjZS4nKSk7XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG5ldyBDb25zdHJ1Y3RvcihmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICB2YXIgbGVuZ3RoID0gZW50cmllcy5sZW5ndGg7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgIENvbnN0cnVjdG9yLnJlc29sdmUoZW50cmllc1tpXSkudGhlbihyZXNvbHZlLCByZWplY3QpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICBgUHJvbWlzZS5yZWplY3RgIHJldHVybnMgYSBwcm9taXNlIHJlamVjdGVkIHdpdGggdGhlIHBhc3NlZCBgcmVhc29uYC5cbiAgSXQgaXMgc2hvcnRoYW5kIGZvciB0aGUgZm9sbG93aW5nOlxuXG4gIGBgYGphdmFzY3JpcHRcbiAgbGV0IHByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3Qpe1xuICAgIHJlamVjdChuZXcgRXJyb3IoJ1dIT09QUycpKTtcbiAgfSk7XG5cbiAgcHJvbWlzZS50aGVuKGZ1bmN0aW9uKHZhbHVlKXtcbiAgICAvLyBDb2RlIGhlcmUgZG9lc24ndCBydW4gYmVjYXVzZSB0aGUgcHJvbWlzZSBpcyByZWplY3RlZCFcbiAgfSwgZnVuY3Rpb24ocmVhc29uKXtcbiAgICAvLyByZWFzb24ubWVzc2FnZSA9PT0gJ1dIT09QUydcbiAgfSk7XG4gIGBgYFxuXG4gIEluc3RlYWQgb2Ygd3JpdGluZyB0aGUgYWJvdmUsIHlvdXIgY29kZSBub3cgc2ltcGx5IGJlY29tZXMgdGhlIGZvbGxvd2luZzpcblxuICBgYGBqYXZhc2NyaXB0XG4gIGxldCBwcm9taXNlID0gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCdXSE9PUFMnKSk7XG5cbiAgcHJvbWlzZS50aGVuKGZ1bmN0aW9uKHZhbHVlKXtcbiAgICAvLyBDb2RlIGhlcmUgZG9lc24ndCBydW4gYmVjYXVzZSB0aGUgcHJvbWlzZSBpcyByZWplY3RlZCFcbiAgfSwgZnVuY3Rpb24ocmVhc29uKXtcbiAgICAvLyByZWFzb24ubWVzc2FnZSA9PT0gJ1dIT09QUydcbiAgfSk7XG4gIGBgYFxuXG4gIEBtZXRob2QgcmVqZWN0XG4gIEBzdGF0aWNcbiAgQHBhcmFtIHtBbnl9IHJlYXNvbiB2YWx1ZSB0aGF0IHRoZSByZXR1cm5lZCBwcm9taXNlIHdpbGwgYmUgcmVqZWN0ZWQgd2l0aC5cbiAgVXNlZnVsIGZvciB0b29saW5nLlxuICBAcmV0dXJuIHtQcm9taXNlfSBhIHByb21pc2UgcmVqZWN0ZWQgd2l0aCB0aGUgZ2l2ZW4gYHJlYXNvbmAuXG4qL1xuZnVuY3Rpb24gcmVqZWN0JDEocmVhc29uKSB7XG4gIC8qanNoaW50IHZhbGlkdGhpczp0cnVlICovXG4gIHZhciBDb25zdHJ1Y3RvciA9IHRoaXM7XG4gIHZhciBwcm9taXNlID0gbmV3IENvbnN0cnVjdG9yKG5vb3ApO1xuICByZWplY3QocHJvbWlzZSwgcmVhc29uKTtcbiAgcmV0dXJuIHByb21pc2U7XG59XG5cbmZ1bmN0aW9uIG5lZWRzUmVzb2x2ZXIoKSB7XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoJ1lvdSBtdXN0IHBhc3MgYSByZXNvbHZlciBmdW5jdGlvbiBhcyB0aGUgZmlyc3QgYXJndW1lbnQgdG8gdGhlIHByb21pc2UgY29uc3RydWN0b3InKTtcbn1cblxuZnVuY3Rpb24gbmVlZHNOZXcoKSB7XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJGYWlsZWQgdG8gY29uc3RydWN0ICdQcm9taXNlJzogUGxlYXNlIHVzZSB0aGUgJ25ldycgb3BlcmF0b3IsIHRoaXMgb2JqZWN0IGNvbnN0cnVjdG9yIGNhbm5vdCBiZSBjYWxsZWQgYXMgYSBmdW5jdGlvbi5cIik7XG59XG5cbi8qKlxuICBQcm9taXNlIG9iamVjdHMgcmVwcmVzZW50IHRoZSBldmVudHVhbCByZXN1bHQgb2YgYW4gYXN5bmNocm9ub3VzIG9wZXJhdGlvbi4gVGhlXG4gIHByaW1hcnkgd2F5IG9mIGludGVyYWN0aW5nIHdpdGggYSBwcm9taXNlIGlzIHRocm91Z2ggaXRzIGB0aGVuYCBtZXRob2QsIHdoaWNoXG4gIHJlZ2lzdGVycyBjYWxsYmFja3MgdG8gcmVjZWl2ZSBlaXRoZXIgYSBwcm9taXNlJ3MgZXZlbnR1YWwgdmFsdWUgb3IgdGhlIHJlYXNvblxuICB3aHkgdGhlIHByb21pc2UgY2Fubm90IGJlIGZ1bGZpbGxlZC5cblxuICBUZXJtaW5vbG9neVxuICAtLS0tLS0tLS0tLVxuXG4gIC0gYHByb21pc2VgIGlzIGFuIG9iamVjdCBvciBmdW5jdGlvbiB3aXRoIGEgYHRoZW5gIG1ldGhvZCB3aG9zZSBiZWhhdmlvciBjb25mb3JtcyB0byB0aGlzIHNwZWNpZmljYXRpb24uXG4gIC0gYHRoZW5hYmxlYCBpcyBhbiBvYmplY3Qgb3IgZnVuY3Rpb24gdGhhdCBkZWZpbmVzIGEgYHRoZW5gIG1ldGhvZC5cbiAgLSBgdmFsdWVgIGlzIGFueSBsZWdhbCBKYXZhU2NyaXB0IHZhbHVlIChpbmNsdWRpbmcgdW5kZWZpbmVkLCBhIHRoZW5hYmxlLCBvciBhIHByb21pc2UpLlxuICAtIGBleGNlcHRpb25gIGlzIGEgdmFsdWUgdGhhdCBpcyB0aHJvd24gdXNpbmcgdGhlIHRocm93IHN0YXRlbWVudC5cbiAgLSBgcmVhc29uYCBpcyBhIHZhbHVlIHRoYXQgaW5kaWNhdGVzIHdoeSBhIHByb21pc2Ugd2FzIHJlamVjdGVkLlxuICAtIGBzZXR0bGVkYCB0aGUgZmluYWwgcmVzdGluZyBzdGF0ZSBvZiBhIHByb21pc2UsIGZ1bGZpbGxlZCBvciByZWplY3RlZC5cblxuICBBIHByb21pc2UgY2FuIGJlIGluIG9uZSBvZiB0aHJlZSBzdGF0ZXM6IHBlbmRpbmcsIGZ1bGZpbGxlZCwgb3IgcmVqZWN0ZWQuXG5cbiAgUHJvbWlzZXMgdGhhdCBhcmUgZnVsZmlsbGVkIGhhdmUgYSBmdWxmaWxsbWVudCB2YWx1ZSBhbmQgYXJlIGluIHRoZSBmdWxmaWxsZWRcbiAgc3RhdGUuICBQcm9taXNlcyB0aGF0IGFyZSByZWplY3RlZCBoYXZlIGEgcmVqZWN0aW9uIHJlYXNvbiBhbmQgYXJlIGluIHRoZVxuICByZWplY3RlZCBzdGF0ZS4gIEEgZnVsZmlsbG1lbnQgdmFsdWUgaXMgbmV2ZXIgYSB0aGVuYWJsZS5cblxuICBQcm9taXNlcyBjYW4gYWxzbyBiZSBzYWlkIHRvICpyZXNvbHZlKiBhIHZhbHVlLiAgSWYgdGhpcyB2YWx1ZSBpcyBhbHNvIGFcbiAgcHJvbWlzZSwgdGhlbiB0aGUgb3JpZ2luYWwgcHJvbWlzZSdzIHNldHRsZWQgc3RhdGUgd2lsbCBtYXRjaCB0aGUgdmFsdWUnc1xuICBzZXR0bGVkIHN0YXRlLiAgU28gYSBwcm9taXNlIHRoYXQgKnJlc29sdmVzKiBhIHByb21pc2UgdGhhdCByZWplY3RzIHdpbGxcbiAgaXRzZWxmIHJlamVjdCwgYW5kIGEgcHJvbWlzZSB0aGF0ICpyZXNvbHZlcyogYSBwcm9taXNlIHRoYXQgZnVsZmlsbHMgd2lsbFxuICBpdHNlbGYgZnVsZmlsbC5cblxuXG4gIEJhc2ljIFVzYWdlOlxuICAtLS0tLS0tLS0tLS1cblxuICBgYGBqc1xuICBsZXQgcHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgIC8vIG9uIHN1Y2Nlc3NcbiAgICByZXNvbHZlKHZhbHVlKTtcblxuICAgIC8vIG9uIGZhaWx1cmVcbiAgICByZWplY3QocmVhc29uKTtcbiAgfSk7XG5cbiAgcHJvbWlzZS50aGVuKGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgLy8gb24gZnVsZmlsbG1lbnRcbiAgfSwgZnVuY3Rpb24ocmVhc29uKSB7XG4gICAgLy8gb24gcmVqZWN0aW9uXG4gIH0pO1xuICBgYGBcblxuICBBZHZhbmNlZCBVc2FnZTpcbiAgLS0tLS0tLS0tLS0tLS0tXG5cbiAgUHJvbWlzZXMgc2hpbmUgd2hlbiBhYnN0cmFjdGluZyBhd2F5IGFzeW5jaHJvbm91cyBpbnRlcmFjdGlvbnMgc3VjaCBhc1xuICBgWE1MSHR0cFJlcXVlc3Rgcy5cblxuICBgYGBqc1xuICBmdW5jdGlvbiBnZXRKU09OKHVybCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3Qpe1xuICAgICAgbGV0IHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuXG4gICAgICB4aHIub3BlbignR0VUJywgdXJsKTtcbiAgICAgIHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBoYW5kbGVyO1xuICAgICAgeGhyLnJlc3BvbnNlVHlwZSA9ICdqc29uJztcbiAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKCdBY2NlcHQnLCAnYXBwbGljYXRpb24vanNvbicpO1xuICAgICAgeGhyLnNlbmQoKTtcblxuICAgICAgZnVuY3Rpb24gaGFuZGxlcigpIHtcbiAgICAgICAgaWYgKHRoaXMucmVhZHlTdGF0ZSA9PT0gdGhpcy5ET05FKSB7XG4gICAgICAgICAgaWYgKHRoaXMuc3RhdHVzID09PSAyMDApIHtcbiAgICAgICAgICAgIHJlc29sdmUodGhpcy5yZXNwb25zZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoJ2dldEpTT046IGAnICsgdXJsICsgJ2AgZmFpbGVkIHdpdGggc3RhdHVzOiBbJyArIHRoaXMuc3RhdHVzICsgJ10nKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0SlNPTignL3Bvc3RzLmpzb24nKS50aGVuKGZ1bmN0aW9uKGpzb24pIHtcbiAgICAvLyBvbiBmdWxmaWxsbWVudFxuICB9LCBmdW5jdGlvbihyZWFzb24pIHtcbiAgICAvLyBvbiByZWplY3Rpb25cbiAgfSk7XG4gIGBgYFxuXG4gIFVubGlrZSBjYWxsYmFja3MsIHByb21pc2VzIGFyZSBncmVhdCBjb21wb3NhYmxlIHByaW1pdGl2ZXMuXG5cbiAgYGBganNcbiAgUHJvbWlzZS5hbGwoW1xuICAgIGdldEpTT04oJy9wb3N0cycpLFxuICAgIGdldEpTT04oJy9jb21tZW50cycpXG4gIF0pLnRoZW4oZnVuY3Rpb24odmFsdWVzKXtcbiAgICB2YWx1ZXNbMF0gLy8gPT4gcG9zdHNKU09OXG4gICAgdmFsdWVzWzFdIC8vID0+IGNvbW1lbnRzSlNPTlxuXG4gICAgcmV0dXJuIHZhbHVlcztcbiAgfSk7XG4gIGBgYFxuXG4gIEBjbGFzcyBQcm9taXNlXG4gIEBwYXJhbSB7RnVuY3Rpb259IHJlc29sdmVyXG4gIFVzZWZ1bCBmb3IgdG9vbGluZy5cbiAgQGNvbnN0cnVjdG9yXG4qL1xuXG52YXIgUHJvbWlzZSQxID0gZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBQcm9taXNlKHJlc29sdmVyKSB7XG4gICAgdGhpc1tQUk9NSVNFX0lEXSA9IG5leHRJZCgpO1xuICAgIHRoaXMuX3Jlc3VsdCA9IHRoaXMuX3N0YXRlID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuX3N1YnNjcmliZXJzID0gW107XG5cbiAgICBpZiAobm9vcCAhPT0gcmVzb2x2ZXIpIHtcbiAgICAgIHR5cGVvZiByZXNvbHZlciAhPT0gJ2Z1bmN0aW9uJyAmJiBuZWVkc1Jlc29sdmVyKCk7XG4gICAgICB0aGlzIGluc3RhbmNlb2YgUHJvbWlzZSA/IGluaXRpYWxpemVQcm9taXNlKHRoaXMsIHJlc29sdmVyKSA6IG5lZWRzTmV3KCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gIFRoZSBwcmltYXJ5IHdheSBvZiBpbnRlcmFjdGluZyB3aXRoIGEgcHJvbWlzZSBpcyB0aHJvdWdoIGl0cyBgdGhlbmAgbWV0aG9kLFxuICB3aGljaCByZWdpc3RlcnMgY2FsbGJhY2tzIHRvIHJlY2VpdmUgZWl0aGVyIGEgcHJvbWlzZSdzIGV2ZW50dWFsIHZhbHVlIG9yIHRoZVxuICByZWFzb24gd2h5IHRoZSBwcm9taXNlIGNhbm5vdCBiZSBmdWxmaWxsZWQuXG4gICBgYGBqc1xuICBmaW5kVXNlcigpLnRoZW4oZnVuY3Rpb24odXNlcil7XG4gICAgLy8gdXNlciBpcyBhdmFpbGFibGVcbiAgfSwgZnVuY3Rpb24ocmVhc29uKXtcbiAgICAvLyB1c2VyIGlzIHVuYXZhaWxhYmxlLCBhbmQgeW91IGFyZSBnaXZlbiB0aGUgcmVhc29uIHdoeVxuICB9KTtcbiAgYGBgXG4gICBDaGFpbmluZ1xuICAtLS0tLS0tLVxuICAgVGhlIHJldHVybiB2YWx1ZSBvZiBgdGhlbmAgaXMgaXRzZWxmIGEgcHJvbWlzZS4gIFRoaXMgc2Vjb25kLCAnZG93bnN0cmVhbSdcbiAgcHJvbWlzZSBpcyByZXNvbHZlZCB3aXRoIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIGZpcnN0IHByb21pc2UncyBmdWxmaWxsbWVudFxuICBvciByZWplY3Rpb24gaGFuZGxlciwgb3IgcmVqZWN0ZWQgaWYgdGhlIGhhbmRsZXIgdGhyb3dzIGFuIGV4Y2VwdGlvbi5cbiAgIGBgYGpzXG4gIGZpbmRVc2VyKCkudGhlbihmdW5jdGlvbiAodXNlcikge1xuICAgIHJldHVybiB1c2VyLm5hbWU7XG4gIH0sIGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICByZXR1cm4gJ2RlZmF1bHQgbmFtZSc7XG4gIH0pLnRoZW4oZnVuY3Rpb24gKHVzZXJOYW1lKSB7XG4gICAgLy8gSWYgYGZpbmRVc2VyYCBmdWxmaWxsZWQsIGB1c2VyTmFtZWAgd2lsbCBiZSB0aGUgdXNlcidzIG5hbWUsIG90aGVyd2lzZSBpdFxuICAgIC8vIHdpbGwgYmUgYCdkZWZhdWx0IG5hbWUnYFxuICB9KTtcbiAgIGZpbmRVc2VyKCkudGhlbihmdW5jdGlvbiAodXNlcikge1xuICAgIHRocm93IG5ldyBFcnJvcignRm91bmQgdXNlciwgYnV0IHN0aWxsIHVuaGFwcHknKTtcbiAgfSwgZnVuY3Rpb24gKHJlYXNvbikge1xuICAgIHRocm93IG5ldyBFcnJvcignYGZpbmRVc2VyYCByZWplY3RlZCBhbmQgd2UncmUgdW5oYXBweScpO1xuICB9KS50aGVuKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgIC8vIG5ldmVyIHJlYWNoZWRcbiAgfSwgZnVuY3Rpb24gKHJlYXNvbikge1xuICAgIC8vIGlmIGBmaW5kVXNlcmAgZnVsZmlsbGVkLCBgcmVhc29uYCB3aWxsIGJlICdGb3VuZCB1c2VyLCBidXQgc3RpbGwgdW5oYXBweScuXG4gICAgLy8gSWYgYGZpbmRVc2VyYCByZWplY3RlZCwgYHJlYXNvbmAgd2lsbCBiZSAnYGZpbmRVc2VyYCByZWplY3RlZCBhbmQgd2UncmUgdW5oYXBweScuXG4gIH0pO1xuICBgYGBcbiAgSWYgdGhlIGRvd25zdHJlYW0gcHJvbWlzZSBkb2VzIG5vdCBzcGVjaWZ5IGEgcmVqZWN0aW9uIGhhbmRsZXIsIHJlamVjdGlvbiByZWFzb25zIHdpbGwgYmUgcHJvcGFnYXRlZCBmdXJ0aGVyIGRvd25zdHJlYW0uXG4gICBgYGBqc1xuICBmaW5kVXNlcigpLnRoZW4oZnVuY3Rpb24gKHVzZXIpIHtcbiAgICB0aHJvdyBuZXcgUGVkYWdvZ2ljYWxFeGNlcHRpb24oJ1Vwc3RyZWFtIGVycm9yJyk7XG4gIH0pLnRoZW4oZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgLy8gbmV2ZXIgcmVhY2hlZFxuICB9KS50aGVuKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgIC8vIG5ldmVyIHJlYWNoZWRcbiAgfSwgZnVuY3Rpb24gKHJlYXNvbikge1xuICAgIC8vIFRoZSBgUGVkZ2Fnb2NpYWxFeGNlcHRpb25gIGlzIHByb3BhZ2F0ZWQgYWxsIHRoZSB3YXkgZG93biB0byBoZXJlXG4gIH0pO1xuICBgYGBcbiAgIEFzc2ltaWxhdGlvblxuICAtLS0tLS0tLS0tLS1cbiAgIFNvbWV0aW1lcyB0aGUgdmFsdWUgeW91IHdhbnQgdG8gcHJvcGFnYXRlIHRvIGEgZG93bnN0cmVhbSBwcm9taXNlIGNhbiBvbmx5IGJlXG4gIHJldHJpZXZlZCBhc3luY2hyb25vdXNseS4gVGhpcyBjYW4gYmUgYWNoaWV2ZWQgYnkgcmV0dXJuaW5nIGEgcHJvbWlzZSBpbiB0aGVcbiAgZnVsZmlsbG1lbnQgb3IgcmVqZWN0aW9uIGhhbmRsZXIuIFRoZSBkb3duc3RyZWFtIHByb21pc2Ugd2lsbCB0aGVuIGJlIHBlbmRpbmdcbiAgdW50aWwgdGhlIHJldHVybmVkIHByb21pc2UgaXMgc2V0dGxlZC4gVGhpcyBpcyBjYWxsZWQgKmFzc2ltaWxhdGlvbiouXG4gICBgYGBqc1xuICBmaW5kVXNlcigpLnRoZW4oZnVuY3Rpb24gKHVzZXIpIHtcbiAgICByZXR1cm4gZmluZENvbW1lbnRzQnlBdXRob3IodXNlcik7XG4gIH0pLnRoZW4oZnVuY3Rpb24gKGNvbW1lbnRzKSB7XG4gICAgLy8gVGhlIHVzZXIncyBjb21tZW50cyBhcmUgbm93IGF2YWlsYWJsZVxuICB9KTtcbiAgYGBgXG4gICBJZiB0aGUgYXNzaW1saWF0ZWQgcHJvbWlzZSByZWplY3RzLCB0aGVuIHRoZSBkb3duc3RyZWFtIHByb21pc2Ugd2lsbCBhbHNvIHJlamVjdC5cbiAgIGBgYGpzXG4gIGZpbmRVc2VyKCkudGhlbihmdW5jdGlvbiAodXNlcikge1xuICAgIHJldHVybiBmaW5kQ29tbWVudHNCeUF1dGhvcih1c2VyKTtcbiAgfSkudGhlbihmdW5jdGlvbiAoY29tbWVudHMpIHtcbiAgICAvLyBJZiBgZmluZENvbW1lbnRzQnlBdXRob3JgIGZ1bGZpbGxzLCB3ZSdsbCBoYXZlIHRoZSB2YWx1ZSBoZXJlXG4gIH0sIGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICAvLyBJZiBgZmluZENvbW1lbnRzQnlBdXRob3JgIHJlamVjdHMsIHdlJ2xsIGhhdmUgdGhlIHJlYXNvbiBoZXJlXG4gIH0pO1xuICBgYGBcbiAgIFNpbXBsZSBFeGFtcGxlXG4gIC0tLS0tLS0tLS0tLS0tXG4gICBTeW5jaHJvbm91cyBFeGFtcGxlXG4gICBgYGBqYXZhc2NyaXB0XG4gIGxldCByZXN1bHQ7XG4gICB0cnkge1xuICAgIHJlc3VsdCA9IGZpbmRSZXN1bHQoKTtcbiAgICAvLyBzdWNjZXNzXG4gIH0gY2F0Y2gocmVhc29uKSB7XG4gICAgLy8gZmFpbHVyZVxuICB9XG4gIGBgYFxuICAgRXJyYmFjayBFeGFtcGxlXG4gICBgYGBqc1xuICBmaW5kUmVzdWx0KGZ1bmN0aW9uKHJlc3VsdCwgZXJyKXtcbiAgICBpZiAoZXJyKSB7XG4gICAgICAvLyBmYWlsdXJlXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHN1Y2Nlc3NcbiAgICB9XG4gIH0pO1xuICBgYGBcbiAgIFByb21pc2UgRXhhbXBsZTtcbiAgIGBgYGphdmFzY3JpcHRcbiAgZmluZFJlc3VsdCgpLnRoZW4oZnVuY3Rpb24ocmVzdWx0KXtcbiAgICAvLyBzdWNjZXNzXG4gIH0sIGZ1bmN0aW9uKHJlYXNvbil7XG4gICAgLy8gZmFpbHVyZVxuICB9KTtcbiAgYGBgXG4gICBBZHZhbmNlZCBFeGFtcGxlXG4gIC0tLS0tLS0tLS0tLS0tXG4gICBTeW5jaHJvbm91cyBFeGFtcGxlXG4gICBgYGBqYXZhc2NyaXB0XG4gIGxldCBhdXRob3IsIGJvb2tzO1xuICAgdHJ5IHtcbiAgICBhdXRob3IgPSBmaW5kQXV0aG9yKCk7XG4gICAgYm9va3MgID0gZmluZEJvb2tzQnlBdXRob3IoYXV0aG9yKTtcbiAgICAvLyBzdWNjZXNzXG4gIH0gY2F0Y2gocmVhc29uKSB7XG4gICAgLy8gZmFpbHVyZVxuICB9XG4gIGBgYFxuICAgRXJyYmFjayBFeGFtcGxlXG4gICBgYGBqc1xuICAgZnVuY3Rpb24gZm91bmRCb29rcyhib29rcykge1xuICAgfVxuICAgZnVuY3Rpb24gZmFpbHVyZShyZWFzb24pIHtcbiAgIH1cbiAgIGZpbmRBdXRob3IoZnVuY3Rpb24oYXV0aG9yLCBlcnIpe1xuICAgIGlmIChlcnIpIHtcbiAgICAgIGZhaWx1cmUoZXJyKTtcbiAgICAgIC8vIGZhaWx1cmVcbiAgICB9IGVsc2Uge1xuICAgICAgdHJ5IHtcbiAgICAgICAgZmluZEJvb29rc0J5QXV0aG9yKGF1dGhvciwgZnVuY3Rpb24oYm9va3MsIGVycikge1xuICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgIGZhaWx1cmUoZXJyKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgZm91bmRCb29rcyhib29rcyk7XG4gICAgICAgICAgICB9IGNhdGNoKHJlYXNvbikge1xuICAgICAgICAgICAgICBmYWlsdXJlKHJlYXNvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2goZXJyb3IpIHtcbiAgICAgICAgZmFpbHVyZShlcnIpO1xuICAgICAgfVxuICAgICAgLy8gc3VjY2Vzc1xuICAgIH1cbiAgfSk7XG4gIGBgYFxuICAgUHJvbWlzZSBFeGFtcGxlO1xuICAgYGBgamF2YXNjcmlwdFxuICBmaW5kQXV0aG9yKCkuXG4gICAgdGhlbihmaW5kQm9va3NCeUF1dGhvcikuXG4gICAgdGhlbihmdW5jdGlvbihib29rcyl7XG4gICAgICAvLyBmb3VuZCBib29rc1xuICB9KS5jYXRjaChmdW5jdGlvbihyZWFzb24pe1xuICAgIC8vIHNvbWV0aGluZyB3ZW50IHdyb25nXG4gIH0pO1xuICBgYGBcbiAgIEBtZXRob2QgdGhlblxuICBAcGFyYW0ge0Z1bmN0aW9ufSBvbkZ1bGZpbGxlZFxuICBAcGFyYW0ge0Z1bmN0aW9ufSBvblJlamVjdGVkXG4gIFVzZWZ1bCBmb3IgdG9vbGluZy5cbiAgQHJldHVybiB7UHJvbWlzZX1cbiAgKi9cblxuICAvKipcbiAgYGNhdGNoYCBpcyBzaW1wbHkgc3VnYXIgZm9yIGB0aGVuKHVuZGVmaW5lZCwgb25SZWplY3Rpb24pYCB3aGljaCBtYWtlcyBpdCB0aGUgc2FtZVxuICBhcyB0aGUgY2F0Y2ggYmxvY2sgb2YgYSB0cnkvY2F0Y2ggc3RhdGVtZW50LlxuICBgYGBqc1xuICBmdW5jdGlvbiBmaW5kQXV0aG9yKCl7XG4gIHRocm93IG5ldyBFcnJvcignY291bGRuJ3QgZmluZCB0aGF0IGF1dGhvcicpO1xuICB9XG4gIC8vIHN5bmNocm9ub3VzXG4gIHRyeSB7XG4gIGZpbmRBdXRob3IoKTtcbiAgfSBjYXRjaChyZWFzb24pIHtcbiAgLy8gc29tZXRoaW5nIHdlbnQgd3JvbmdcbiAgfVxuICAvLyBhc3luYyB3aXRoIHByb21pc2VzXG4gIGZpbmRBdXRob3IoKS5jYXRjaChmdW5jdGlvbihyZWFzb24pe1xuICAvLyBzb21ldGhpbmcgd2VudCB3cm9uZ1xuICB9KTtcbiAgYGBgXG4gIEBtZXRob2QgY2F0Y2hcbiAgQHBhcmFtIHtGdW5jdGlvbn0gb25SZWplY3Rpb25cbiAgVXNlZnVsIGZvciB0b29saW5nLlxuICBAcmV0dXJuIHtQcm9taXNlfVxuICAqL1xuXG5cbiAgUHJvbWlzZS5wcm90b3R5cGUuY2F0Y2ggPSBmdW5jdGlvbiBfY2F0Y2gob25SZWplY3Rpb24pIHtcbiAgICByZXR1cm4gdGhpcy50aGVuKG51bGwsIG9uUmVqZWN0aW9uKTtcbiAgfTtcblxuICAvKipcbiAgICBgZmluYWxseWAgd2lsbCBiZSBpbnZva2VkIHJlZ2FyZGxlc3Mgb2YgdGhlIHByb21pc2UncyBmYXRlIGp1c3QgYXMgbmF0aXZlXG4gICAgdHJ5L2NhdGNoL2ZpbmFsbHkgYmVoYXZlc1xuICBcbiAgICBTeW5jaHJvbm91cyBleGFtcGxlOlxuICBcbiAgICBgYGBqc1xuICAgIGZpbmRBdXRob3IoKSB7XG4gICAgICBpZiAoTWF0aC5yYW5kb20oKSA+IDAuNSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBuZXcgQXV0aG9yKCk7XG4gICAgfVxuICBcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGZpbmRBdXRob3IoKTsgLy8gc3VjY2VlZCBvciBmYWlsXG4gICAgfSBjYXRjaChlcnJvcikge1xuICAgICAgcmV0dXJuIGZpbmRPdGhlckF1dGhlcigpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICAvLyBhbHdheXMgcnVuc1xuICAgICAgLy8gZG9lc24ndCBhZmZlY3QgdGhlIHJldHVybiB2YWx1ZVxuICAgIH1cbiAgICBgYGBcbiAgXG4gICAgQXN5bmNocm9ub3VzIGV4YW1wbGU6XG4gIFxuICAgIGBgYGpzXG4gICAgZmluZEF1dGhvcigpLmNhdGNoKGZ1bmN0aW9uKHJlYXNvbil7XG4gICAgICByZXR1cm4gZmluZE90aGVyQXV0aGVyKCk7XG4gICAgfSkuZmluYWxseShmdW5jdGlvbigpe1xuICAgICAgLy8gYXV0aG9yIHdhcyBlaXRoZXIgZm91bmQsIG9yIG5vdFxuICAgIH0pO1xuICAgIGBgYFxuICBcbiAgICBAbWV0aG9kIGZpbmFsbHlcbiAgICBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xuICAgIEByZXR1cm4ge1Byb21pc2V9XG4gICovXG5cblxuICBQcm9taXNlLnByb3RvdHlwZS5maW5hbGx5ID0gZnVuY3Rpb24gX2ZpbmFsbHkoY2FsbGJhY2spIHtcbiAgICB2YXIgcHJvbWlzZSA9IHRoaXM7XG4gICAgdmFyIGNvbnN0cnVjdG9yID0gcHJvbWlzZS5jb25zdHJ1Y3RvcjtcblxuICAgIGlmIChpc0Z1bmN0aW9uKGNhbGxiYWNrKSkge1xuICAgICAgcmV0dXJuIHByb21pc2UudGhlbihmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGNvbnN0cnVjdG9yLnJlc29sdmUoY2FsbGJhY2soKSkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9KTtcbiAgICAgIH0sIGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICAgICAgcmV0dXJuIGNvbnN0cnVjdG9yLnJlc29sdmUoY2FsbGJhY2soKSkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgdGhyb3cgcmVhc29uO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBwcm9taXNlLnRoZW4oY2FsbGJhY2ssIGNhbGxiYWNrKTtcbiAgfTtcblxuICByZXR1cm4gUHJvbWlzZTtcbn0oKTtcblxuUHJvbWlzZSQxLnByb3RvdHlwZS50aGVuID0gdGhlbjtcblByb21pc2UkMS5hbGwgPSBhbGw7XG5Qcm9taXNlJDEucmFjZSA9IHJhY2U7XG5Qcm9taXNlJDEucmVzb2x2ZSA9IHJlc29sdmUkMTtcblByb21pc2UkMS5yZWplY3QgPSByZWplY3QkMTtcblByb21pc2UkMS5fc2V0U2NoZWR1bGVyID0gc2V0U2NoZWR1bGVyO1xuUHJvbWlzZSQxLl9zZXRBc2FwID0gc2V0QXNhcDtcblByb21pc2UkMS5fYXNhcCA9IGFzYXA7XG5cbi8qZ2xvYmFsIHNlbGYqL1xuZnVuY3Rpb24gcG9seWZpbGwoKSB7XG4gIHZhciBsb2NhbCA9IHZvaWQgMDtcblxuICBpZiAodHlwZW9mIGdsb2JhbCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBsb2NhbCA9IGdsb2JhbDtcbiAgfSBlbHNlIGlmICh0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBsb2NhbCA9IHNlbGY7XG4gIH0gZWxzZSB7XG4gICAgdHJ5IHtcbiAgICAgIGxvY2FsID0gRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3BvbHlmaWxsIGZhaWxlZCBiZWNhdXNlIGdsb2JhbCBvYmplY3QgaXMgdW5hdmFpbGFibGUgaW4gdGhpcyBlbnZpcm9ubWVudCcpO1xuICAgIH1cbiAgfVxuXG4gIHZhciBQID0gbG9jYWwuUHJvbWlzZTtcblxuICBpZiAoUCkge1xuICAgIHZhciBwcm9taXNlVG9TdHJpbmcgPSBudWxsO1xuICAgIHRyeSB7XG4gICAgICBwcm9taXNlVG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoUC5yZXNvbHZlKCkpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIHNpbGVudGx5IGlnbm9yZWRcbiAgICB9XG5cbiAgICBpZiAocHJvbWlzZVRvU3RyaW5nID09PSAnW29iamVjdCBQcm9taXNlXScgJiYgIVAuY2FzdCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIGxvY2FsLlByb21pc2UgPSBQcm9taXNlJDE7XG59XG5cbi8vIFN0cmFuZ2UgY29tcGF0Li5cblByb21pc2UkMS5wb2x5ZmlsbCA9IHBvbHlmaWxsO1xuUHJvbWlzZSQxLlByb21pc2UgPSBQcm9taXNlJDE7XG5cbnJldHVybiBQcm9taXNlJDE7XG5cbn0pKSk7XG5cblxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1lczYtcHJvbWlzZS5tYXBcbiIsImV4cG9ydHMucmVhZCA9IGZ1bmN0aW9uIChidWZmZXIsIG9mZnNldCwgaXNMRSwgbUxlbiwgbkJ5dGVzKSB7XG4gIHZhciBlLCBtXG4gIHZhciBlTGVuID0gKG5CeXRlcyAqIDgpIC0gbUxlbiAtIDFcbiAgdmFyIGVNYXggPSAoMSA8PCBlTGVuKSAtIDFcbiAgdmFyIGVCaWFzID0gZU1heCA+PiAxXG4gIHZhciBuQml0cyA9IC03XG4gIHZhciBpID0gaXNMRSA/IChuQnl0ZXMgLSAxKSA6IDBcbiAgdmFyIGQgPSBpc0xFID8gLTEgOiAxXG4gIHZhciBzID0gYnVmZmVyW29mZnNldCArIGldXG5cbiAgaSArPSBkXG5cbiAgZSA9IHMgJiAoKDEgPDwgKC1uQml0cykpIC0gMSlcbiAgcyA+Pj0gKC1uQml0cylcbiAgbkJpdHMgKz0gZUxlblxuICBmb3IgKDsgbkJpdHMgPiAwOyBlID0gKGUgKiAyNTYpICsgYnVmZmVyW29mZnNldCArIGldLCBpICs9IGQsIG5CaXRzIC09IDgpIHt9XG5cbiAgbSA9IGUgJiAoKDEgPDwgKC1uQml0cykpIC0gMSlcbiAgZSA+Pj0gKC1uQml0cylcbiAgbkJpdHMgKz0gbUxlblxuICBmb3IgKDsgbkJpdHMgPiAwOyBtID0gKG0gKiAyNTYpICsgYnVmZmVyW29mZnNldCArIGldLCBpICs9IGQsIG5CaXRzIC09IDgpIHt9XG5cbiAgaWYgKGUgPT09IDApIHtcbiAgICBlID0gMSAtIGVCaWFzXG4gIH0gZWxzZSBpZiAoZSA9PT0gZU1heCkge1xuICAgIHJldHVybiBtID8gTmFOIDogKChzID8gLTEgOiAxKSAqIEluZmluaXR5KVxuICB9IGVsc2Uge1xuICAgIG0gPSBtICsgTWF0aC5wb3coMiwgbUxlbilcbiAgICBlID0gZSAtIGVCaWFzXG4gIH1cbiAgcmV0dXJuIChzID8gLTEgOiAxKSAqIG0gKiBNYXRoLnBvdygyLCBlIC0gbUxlbilcbn1cblxuZXhwb3J0cy53cml0ZSA9IGZ1bmN0aW9uIChidWZmZXIsIHZhbHVlLCBvZmZzZXQsIGlzTEUsIG1MZW4sIG5CeXRlcykge1xuICB2YXIgZSwgbSwgY1xuICB2YXIgZUxlbiA9IChuQnl0ZXMgKiA4KSAtIG1MZW4gLSAxXG4gIHZhciBlTWF4ID0gKDEgPDwgZUxlbikgLSAxXG4gIHZhciBlQmlhcyA9IGVNYXggPj4gMVxuICB2YXIgcnQgPSAobUxlbiA9PT0gMjMgPyBNYXRoLnBvdygyLCAtMjQpIC0gTWF0aC5wb3coMiwgLTc3KSA6IDApXG4gIHZhciBpID0gaXNMRSA/IDAgOiAobkJ5dGVzIC0gMSlcbiAgdmFyIGQgPSBpc0xFID8gMSA6IC0xXG4gIHZhciBzID0gdmFsdWUgPCAwIHx8ICh2YWx1ZSA9PT0gMCAmJiAxIC8gdmFsdWUgPCAwKSA/IDEgOiAwXG5cbiAgdmFsdWUgPSBNYXRoLmFicyh2YWx1ZSlcblxuICBpZiAoaXNOYU4odmFsdWUpIHx8IHZhbHVlID09PSBJbmZpbml0eSkge1xuICAgIG0gPSBpc05hTih2YWx1ZSkgPyAxIDogMFxuICAgIGUgPSBlTWF4XG4gIH0gZWxzZSB7XG4gICAgZSA9IE1hdGguZmxvb3IoTWF0aC5sb2codmFsdWUpIC8gTWF0aC5MTjIpXG4gICAgaWYgKHZhbHVlICogKGMgPSBNYXRoLnBvdygyLCAtZSkpIDwgMSkge1xuICAgICAgZS0tXG4gICAgICBjICo9IDJcbiAgICB9XG4gICAgaWYgKGUgKyBlQmlhcyA+PSAxKSB7XG4gICAgICB2YWx1ZSArPSBydCAvIGNcbiAgICB9IGVsc2Uge1xuICAgICAgdmFsdWUgKz0gcnQgKiBNYXRoLnBvdygyLCAxIC0gZUJpYXMpXG4gICAgfVxuICAgIGlmICh2YWx1ZSAqIGMgPj0gMikge1xuICAgICAgZSsrXG4gICAgICBjIC89IDJcbiAgICB9XG5cbiAgICBpZiAoZSArIGVCaWFzID49IGVNYXgpIHtcbiAgICAgIG0gPSAwXG4gICAgICBlID0gZU1heFxuICAgIH0gZWxzZSBpZiAoZSArIGVCaWFzID49IDEpIHtcbiAgICAgIG0gPSAoKHZhbHVlICogYykgLSAxKSAqIE1hdGgucG93KDIsIG1MZW4pXG4gICAgICBlID0gZSArIGVCaWFzXG4gICAgfSBlbHNlIHtcbiAgICAgIG0gPSB2YWx1ZSAqIE1hdGgucG93KDIsIGVCaWFzIC0gMSkgKiBNYXRoLnBvdygyLCBtTGVuKVxuICAgICAgZSA9IDBcbiAgICB9XG4gIH1cblxuICBmb3IgKDsgbUxlbiA+PSA4OyBidWZmZXJbb2Zmc2V0ICsgaV0gPSBtICYgMHhmZiwgaSArPSBkLCBtIC89IDI1NiwgbUxlbiAtPSA4KSB7fVxuXG4gIGUgPSAoZSA8PCBtTGVuKSB8IG1cbiAgZUxlbiArPSBtTGVuXG4gIGZvciAoOyBlTGVuID4gMDsgYnVmZmVyW29mZnNldCArIGldID0gZSAmIDB4ZmYsIGkgKz0gZCwgZSAvPSAyNTYsIGVMZW4gLT0gOCkge31cblxuICBidWZmZXJbb2Zmc2V0ICsgaSAtIGRdIHw9IHMgKiAxMjhcbn1cbiIsIi8qIVxuICogalF1ZXJ5IEphdmFTY3JpcHQgTGlicmFyeSB2My40LjFcbiAqIGh0dHBzOi8vanF1ZXJ5LmNvbS9cbiAqXG4gKiBJbmNsdWRlcyBTaXp6bGUuanNcbiAqIGh0dHBzOi8vc2l6emxlanMuY29tL1xuICpcbiAqIENvcHlyaWdodCBKUyBGb3VuZGF0aW9uIGFuZCBvdGhlciBjb250cmlidXRvcnNcbiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZVxuICogaHR0cHM6Ly9qcXVlcnkub3JnL2xpY2Vuc2VcbiAqXG4gKiBEYXRlOiAyMDE5LTA1LTAxVDIxOjA0WlxuICovXG4oIGZ1bmN0aW9uKCBnbG9iYWwsIGZhY3RvcnkgKSB7XG5cblx0XCJ1c2Ugc3RyaWN0XCI7XG5cblx0aWYgKCB0eXBlb2YgbW9kdWxlID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBtb2R1bGUuZXhwb3J0cyA9PT0gXCJvYmplY3RcIiApIHtcblxuXHRcdC8vIEZvciBDb21tb25KUyBhbmQgQ29tbW9uSlMtbGlrZSBlbnZpcm9ubWVudHMgd2hlcmUgYSBwcm9wZXIgYHdpbmRvd2Bcblx0XHQvLyBpcyBwcmVzZW50LCBleGVjdXRlIHRoZSBmYWN0b3J5IGFuZCBnZXQgalF1ZXJ5LlxuXHRcdC8vIEZvciBlbnZpcm9ubWVudHMgdGhhdCBkbyBub3QgaGF2ZSBhIGB3aW5kb3dgIHdpdGggYSBgZG9jdW1lbnRgXG5cdFx0Ly8gKHN1Y2ggYXMgTm9kZS5qcyksIGV4cG9zZSBhIGZhY3RvcnkgYXMgbW9kdWxlLmV4cG9ydHMuXG5cdFx0Ly8gVGhpcyBhY2NlbnR1YXRlcyB0aGUgbmVlZCBmb3IgdGhlIGNyZWF0aW9uIG9mIGEgcmVhbCBgd2luZG93YC5cblx0XHQvLyBlLmcuIHZhciBqUXVlcnkgPSByZXF1aXJlKFwianF1ZXJ5XCIpKHdpbmRvdyk7XG5cdFx0Ly8gU2VlIHRpY2tldCAjMTQ1NDkgZm9yIG1vcmUgaW5mby5cblx0XHRtb2R1bGUuZXhwb3J0cyA9IGdsb2JhbC5kb2N1bWVudCA/XG5cdFx0XHRmYWN0b3J5KCBnbG9iYWwsIHRydWUgKSA6XG5cdFx0XHRmdW5jdGlvbiggdyApIHtcblx0XHRcdFx0aWYgKCAhdy5kb2N1bWVudCApIHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoIFwialF1ZXJ5IHJlcXVpcmVzIGEgd2luZG93IHdpdGggYSBkb2N1bWVudFwiICk7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIGZhY3RvcnkoIHcgKTtcblx0XHRcdH07XG5cdH0gZWxzZSB7XG5cdFx0ZmFjdG9yeSggZ2xvYmFsICk7XG5cdH1cblxuLy8gUGFzcyB0aGlzIGlmIHdpbmRvdyBpcyBub3QgZGVmaW5lZCB5ZXRcbn0gKSggdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiA/IHdpbmRvdyA6IHRoaXMsIGZ1bmN0aW9uKCB3aW5kb3csIG5vR2xvYmFsICkge1xuXG4vLyBFZGdlIDw9IDEyIC0gMTMrLCBGaXJlZm94IDw9MTggLSA0NSssIElFIDEwIC0gMTEsIFNhZmFyaSA1LjEgLSA5KywgaU9TIDYgLSA5LjFcbi8vIHRocm93IGV4Y2VwdGlvbnMgd2hlbiBub24tc3RyaWN0IGNvZGUgKGUuZy4sIEFTUC5ORVQgNC41KSBhY2Nlc3NlcyBzdHJpY3QgbW9kZVxuLy8gYXJndW1lbnRzLmNhbGxlZS5jYWxsZXIgKHRyYWMtMTMzMzUpLiBCdXQgYXMgb2YgalF1ZXJ5IDMuMCAoMjAxNiksIHN0cmljdCBtb2RlIHNob3VsZCBiZSBjb21tb25cbi8vIGVub3VnaCB0aGF0IGFsbCBzdWNoIGF0dGVtcHRzIGFyZSBndWFyZGVkIGluIGEgdHJ5IGJsb2NrLlxuXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBhcnIgPSBbXTtcblxudmFyIGRvY3VtZW50ID0gd2luZG93LmRvY3VtZW50O1xuXG52YXIgZ2V0UHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Y7XG5cbnZhciBzbGljZSA9IGFyci5zbGljZTtcblxudmFyIGNvbmNhdCA9IGFyci5jb25jYXQ7XG5cbnZhciBwdXNoID0gYXJyLnB1c2g7XG5cbnZhciBpbmRleE9mID0gYXJyLmluZGV4T2Y7XG5cbnZhciBjbGFzczJ0eXBlID0ge307XG5cbnZhciB0b1N0cmluZyA9IGNsYXNzMnR5cGUudG9TdHJpbmc7XG5cbnZhciBoYXNPd24gPSBjbGFzczJ0eXBlLmhhc093blByb3BlcnR5O1xuXG52YXIgZm5Ub1N0cmluZyA9IGhhc093bi50b1N0cmluZztcblxudmFyIE9iamVjdEZ1bmN0aW9uU3RyaW5nID0gZm5Ub1N0cmluZy5jYWxsKCBPYmplY3QgKTtcblxudmFyIHN1cHBvcnQgPSB7fTtcblxudmFyIGlzRnVuY3Rpb24gPSBmdW5jdGlvbiBpc0Z1bmN0aW9uKCBvYmogKSB7XG5cbiAgICAgIC8vIFN1cHBvcnQ6IENocm9tZSA8PTU3LCBGaXJlZm94IDw9NTJcbiAgICAgIC8vIEluIHNvbWUgYnJvd3NlcnMsIHR5cGVvZiByZXR1cm5zIFwiZnVuY3Rpb25cIiBmb3IgSFRNTCA8b2JqZWN0PiBlbGVtZW50c1xuICAgICAgLy8gKGkuZS4sIGB0eXBlb2YgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJvYmplY3RcIiApID09PSBcImZ1bmN0aW9uXCJgKS5cbiAgICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gY2xhc3NpZnkgKmFueSogRE9NIG5vZGUgYXMgYSBmdW5jdGlvbi5cbiAgICAgIHJldHVybiB0eXBlb2Ygb2JqID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIG9iai5ub2RlVHlwZSAhPT0gXCJudW1iZXJcIjtcbiAgfTtcblxuXG52YXIgaXNXaW5kb3cgPSBmdW5jdGlvbiBpc1dpbmRvdyggb2JqICkge1xuXHRcdHJldHVybiBvYmogIT0gbnVsbCAmJiBvYmogPT09IG9iai53aW5kb3c7XG5cdH07XG5cblxuXG5cblx0dmFyIHByZXNlcnZlZFNjcmlwdEF0dHJpYnV0ZXMgPSB7XG5cdFx0dHlwZTogdHJ1ZSxcblx0XHRzcmM6IHRydWUsXG5cdFx0bm9uY2U6IHRydWUsXG5cdFx0bm9Nb2R1bGU6IHRydWVcblx0fTtcblxuXHRmdW5jdGlvbiBET01FdmFsKCBjb2RlLCBub2RlLCBkb2MgKSB7XG5cdFx0ZG9jID0gZG9jIHx8IGRvY3VtZW50O1xuXG5cdFx0dmFyIGksIHZhbCxcblx0XHRcdHNjcmlwdCA9IGRvYy5jcmVhdGVFbGVtZW50KCBcInNjcmlwdFwiICk7XG5cblx0XHRzY3JpcHQudGV4dCA9IGNvZGU7XG5cdFx0aWYgKCBub2RlICkge1xuXHRcdFx0Zm9yICggaSBpbiBwcmVzZXJ2ZWRTY3JpcHRBdHRyaWJ1dGVzICkge1xuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IEZpcmVmb3ggNjQrLCBFZGdlIDE4K1xuXHRcdFx0XHQvLyBTb21lIGJyb3dzZXJzIGRvbid0IHN1cHBvcnQgdGhlIFwibm9uY2VcIiBwcm9wZXJ0eSBvbiBzY3JpcHRzLlxuXHRcdFx0XHQvLyBPbiB0aGUgb3RoZXIgaGFuZCwganVzdCB1c2luZyBgZ2V0QXR0cmlidXRlYCBpcyBub3QgZW5vdWdoIGFzXG5cdFx0XHRcdC8vIHRoZSBgbm9uY2VgIGF0dHJpYnV0ZSBpcyByZXNldCB0byBhbiBlbXB0eSBzdHJpbmcgd2hlbmV2ZXIgaXRcblx0XHRcdFx0Ly8gYmVjb21lcyBicm93c2luZy1jb250ZXh0IGNvbm5lY3RlZC5cblx0XHRcdFx0Ly8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS93aGF0d2cvaHRtbC9pc3N1ZXMvMjM2OVxuXHRcdFx0XHQvLyBTZWUgaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy8jbm9uY2UtYXR0cmlidXRlc1xuXHRcdFx0XHQvLyBUaGUgYG5vZGUuZ2V0QXR0cmlidXRlYCBjaGVjayB3YXMgYWRkZWQgZm9yIHRoZSBzYWtlIG9mXG5cdFx0XHRcdC8vIGBqUXVlcnkuZ2xvYmFsRXZhbGAgc28gdGhhdCBpdCBjYW4gZmFrZSBhIG5vbmNlLWNvbnRhaW5pbmcgbm9kZVxuXHRcdFx0XHQvLyB2aWEgYW4gb2JqZWN0LlxuXHRcdFx0XHR2YWwgPSBub2RlWyBpIF0gfHwgbm9kZS5nZXRBdHRyaWJ1dGUgJiYgbm9kZS5nZXRBdHRyaWJ1dGUoIGkgKTtcblx0XHRcdFx0aWYgKCB2YWwgKSB7XG5cdFx0XHRcdFx0c2NyaXB0LnNldEF0dHJpYnV0ZSggaSwgdmFsICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0ZG9jLmhlYWQuYXBwZW5kQ2hpbGQoIHNjcmlwdCApLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoIHNjcmlwdCApO1xuXHR9XG5cblxuZnVuY3Rpb24gdG9UeXBlKCBvYmogKSB7XG5cdGlmICggb2JqID09IG51bGwgKSB7XG5cdFx0cmV0dXJuIG9iaiArIFwiXCI7XG5cdH1cblxuXHQvLyBTdXBwb3J0OiBBbmRyb2lkIDw9Mi4zIG9ubHkgKGZ1bmN0aW9uaXNoIFJlZ0V4cClcblx0cmV0dXJuIHR5cGVvZiBvYmogPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIG9iaiA9PT0gXCJmdW5jdGlvblwiID9cblx0XHRjbGFzczJ0eXBlWyB0b1N0cmluZy5jYWxsKCBvYmogKSBdIHx8IFwib2JqZWN0XCIgOlxuXHRcdHR5cGVvZiBvYmo7XG59XG4vKiBnbG9iYWwgU3ltYm9sICovXG4vLyBEZWZpbmluZyB0aGlzIGdsb2JhbCBpbiAuZXNsaW50cmMuanNvbiB3b3VsZCBjcmVhdGUgYSBkYW5nZXIgb2YgdXNpbmcgdGhlIGdsb2JhbFxuLy8gdW5ndWFyZGVkIGluIGFub3RoZXIgcGxhY2UsIGl0IHNlZW1zIHNhZmVyIHRvIGRlZmluZSBnbG9iYWwgb25seSBmb3IgdGhpcyBtb2R1bGVcblxuXG5cbnZhclxuXHR2ZXJzaW9uID0gXCIzLjQuMVwiLFxuXG5cdC8vIERlZmluZSBhIGxvY2FsIGNvcHkgb2YgalF1ZXJ5XG5cdGpRdWVyeSA9IGZ1bmN0aW9uKCBzZWxlY3RvciwgY29udGV4dCApIHtcblxuXHRcdC8vIFRoZSBqUXVlcnkgb2JqZWN0IGlzIGFjdHVhbGx5IGp1c3QgdGhlIGluaXQgY29uc3RydWN0b3IgJ2VuaGFuY2VkJ1xuXHRcdC8vIE5lZWQgaW5pdCBpZiBqUXVlcnkgaXMgY2FsbGVkIChqdXN0IGFsbG93IGVycm9yIHRvIGJlIHRocm93biBpZiBub3QgaW5jbHVkZWQpXG5cdFx0cmV0dXJuIG5ldyBqUXVlcnkuZm4uaW5pdCggc2VsZWN0b3IsIGNvbnRleHQgKTtcblx0fSxcblxuXHQvLyBTdXBwb3J0OiBBbmRyb2lkIDw9NC4wIG9ubHlcblx0Ly8gTWFrZSBzdXJlIHdlIHRyaW0gQk9NIGFuZCBOQlNQXG5cdHJ0cmltID0gL15bXFxzXFx1RkVGRlxceEEwXSt8W1xcc1xcdUZFRkZcXHhBMF0rJC9nO1xuXG5qUXVlcnkuZm4gPSBqUXVlcnkucHJvdG90eXBlID0ge1xuXG5cdC8vIFRoZSBjdXJyZW50IHZlcnNpb24gb2YgalF1ZXJ5IGJlaW5nIHVzZWRcblx0anF1ZXJ5OiB2ZXJzaW9uLFxuXG5cdGNvbnN0cnVjdG9yOiBqUXVlcnksXG5cblx0Ly8gVGhlIGRlZmF1bHQgbGVuZ3RoIG9mIGEgalF1ZXJ5IG9iamVjdCBpcyAwXG5cdGxlbmd0aDogMCxcblxuXHR0b0FycmF5OiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gc2xpY2UuY2FsbCggdGhpcyApO1xuXHR9LFxuXG5cdC8vIEdldCB0aGUgTnRoIGVsZW1lbnQgaW4gdGhlIG1hdGNoZWQgZWxlbWVudCBzZXQgT1Jcblx0Ly8gR2V0IHRoZSB3aG9sZSBtYXRjaGVkIGVsZW1lbnQgc2V0IGFzIGEgY2xlYW4gYXJyYXlcblx0Z2V0OiBmdW5jdGlvbiggbnVtICkge1xuXG5cdFx0Ly8gUmV0dXJuIGFsbCB0aGUgZWxlbWVudHMgaW4gYSBjbGVhbiBhcnJheVxuXHRcdGlmICggbnVtID09IG51bGwgKSB7XG5cdFx0XHRyZXR1cm4gc2xpY2UuY2FsbCggdGhpcyApO1xuXHRcdH1cblxuXHRcdC8vIFJldHVybiBqdXN0IHRoZSBvbmUgZWxlbWVudCBmcm9tIHRoZSBzZXRcblx0XHRyZXR1cm4gbnVtIDwgMCA/IHRoaXNbIG51bSArIHRoaXMubGVuZ3RoIF0gOiB0aGlzWyBudW0gXTtcblx0fSxcblxuXHQvLyBUYWtlIGFuIGFycmF5IG9mIGVsZW1lbnRzIGFuZCBwdXNoIGl0IG9udG8gdGhlIHN0YWNrXG5cdC8vIChyZXR1cm5pbmcgdGhlIG5ldyBtYXRjaGVkIGVsZW1lbnQgc2V0KVxuXHRwdXNoU3RhY2s6IGZ1bmN0aW9uKCBlbGVtcyApIHtcblxuXHRcdC8vIEJ1aWxkIGEgbmV3IGpRdWVyeSBtYXRjaGVkIGVsZW1lbnQgc2V0XG5cdFx0dmFyIHJldCA9IGpRdWVyeS5tZXJnZSggdGhpcy5jb25zdHJ1Y3RvcigpLCBlbGVtcyApO1xuXG5cdFx0Ly8gQWRkIHRoZSBvbGQgb2JqZWN0IG9udG8gdGhlIHN0YWNrIChhcyBhIHJlZmVyZW5jZSlcblx0XHRyZXQucHJldk9iamVjdCA9IHRoaXM7XG5cblx0XHQvLyBSZXR1cm4gdGhlIG5ld2x5LWZvcm1lZCBlbGVtZW50IHNldFxuXHRcdHJldHVybiByZXQ7XG5cdH0sXG5cblx0Ly8gRXhlY3V0ZSBhIGNhbGxiYWNrIGZvciBldmVyeSBlbGVtZW50IGluIHRoZSBtYXRjaGVkIHNldC5cblx0ZWFjaDogZnVuY3Rpb24oIGNhbGxiYWNrICkge1xuXHRcdHJldHVybiBqUXVlcnkuZWFjaCggdGhpcywgY2FsbGJhY2sgKTtcblx0fSxcblxuXHRtYXA6IGZ1bmN0aW9uKCBjYWxsYmFjayApIHtcblx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soIGpRdWVyeS5tYXAoIHRoaXMsIGZ1bmN0aW9uKCBlbGVtLCBpICkge1xuXHRcdFx0cmV0dXJuIGNhbGxiYWNrLmNhbGwoIGVsZW0sIGksIGVsZW0gKTtcblx0XHR9ICkgKTtcblx0fSxcblxuXHRzbGljZTogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKCBzbGljZS5hcHBseSggdGhpcywgYXJndW1lbnRzICkgKTtcblx0fSxcblxuXHRmaXJzdDogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMuZXEoIDAgKTtcblx0fSxcblxuXHRsYXN0OiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5lcSggLTEgKTtcblx0fSxcblxuXHRlcTogZnVuY3Rpb24oIGkgKSB7XG5cdFx0dmFyIGxlbiA9IHRoaXMubGVuZ3RoLFxuXHRcdFx0aiA9ICtpICsgKCBpIDwgMCA/IGxlbiA6IDAgKTtcblx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soIGogPj0gMCAmJiBqIDwgbGVuID8gWyB0aGlzWyBqIF0gXSA6IFtdICk7XG5cdH0sXG5cblx0ZW5kOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5wcmV2T2JqZWN0IHx8IHRoaXMuY29uc3RydWN0b3IoKTtcblx0fSxcblxuXHQvLyBGb3IgaW50ZXJuYWwgdXNlIG9ubHkuXG5cdC8vIEJlaGF2ZXMgbGlrZSBhbiBBcnJheSdzIG1ldGhvZCwgbm90IGxpa2UgYSBqUXVlcnkgbWV0aG9kLlxuXHRwdXNoOiBwdXNoLFxuXHRzb3J0OiBhcnIuc29ydCxcblx0c3BsaWNlOiBhcnIuc3BsaWNlXG59O1xuXG5qUXVlcnkuZXh0ZW5kID0galF1ZXJ5LmZuLmV4dGVuZCA9IGZ1bmN0aW9uKCkge1xuXHR2YXIgb3B0aW9ucywgbmFtZSwgc3JjLCBjb3B5LCBjb3B5SXNBcnJheSwgY2xvbmUsXG5cdFx0dGFyZ2V0ID0gYXJndW1lbnRzWyAwIF0gfHwge30sXG5cdFx0aSA9IDEsXG5cdFx0bGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aCxcblx0XHRkZWVwID0gZmFsc2U7XG5cblx0Ly8gSGFuZGxlIGEgZGVlcCBjb3B5IHNpdHVhdGlvblxuXHRpZiAoIHR5cGVvZiB0YXJnZXQgPT09IFwiYm9vbGVhblwiICkge1xuXHRcdGRlZXAgPSB0YXJnZXQ7XG5cblx0XHQvLyBTa2lwIHRoZSBib29sZWFuIGFuZCB0aGUgdGFyZ2V0XG5cdFx0dGFyZ2V0ID0gYXJndW1lbnRzWyBpIF0gfHwge307XG5cdFx0aSsrO1xuXHR9XG5cblx0Ly8gSGFuZGxlIGNhc2Ugd2hlbiB0YXJnZXQgaXMgYSBzdHJpbmcgb3Igc29tZXRoaW5nIChwb3NzaWJsZSBpbiBkZWVwIGNvcHkpXG5cdGlmICggdHlwZW9mIHRhcmdldCAhPT0gXCJvYmplY3RcIiAmJiAhaXNGdW5jdGlvbiggdGFyZ2V0ICkgKSB7XG5cdFx0dGFyZ2V0ID0ge307XG5cdH1cblxuXHQvLyBFeHRlbmQgalF1ZXJ5IGl0c2VsZiBpZiBvbmx5IG9uZSBhcmd1bWVudCBpcyBwYXNzZWRcblx0aWYgKCBpID09PSBsZW5ndGggKSB7XG5cdFx0dGFyZ2V0ID0gdGhpcztcblx0XHRpLS07XG5cdH1cblxuXHRmb3IgKCA7IGkgPCBsZW5ndGg7IGkrKyApIHtcblxuXHRcdC8vIE9ubHkgZGVhbCB3aXRoIG5vbi1udWxsL3VuZGVmaW5lZCB2YWx1ZXNcblx0XHRpZiAoICggb3B0aW9ucyA9IGFyZ3VtZW50c1sgaSBdICkgIT0gbnVsbCApIHtcblxuXHRcdFx0Ly8gRXh0ZW5kIHRoZSBiYXNlIG9iamVjdFxuXHRcdFx0Zm9yICggbmFtZSBpbiBvcHRpb25zICkge1xuXHRcdFx0XHRjb3B5ID0gb3B0aW9uc1sgbmFtZSBdO1xuXG5cdFx0XHRcdC8vIFByZXZlbnQgT2JqZWN0LnByb3RvdHlwZSBwb2xsdXRpb25cblx0XHRcdFx0Ly8gUHJldmVudCBuZXZlci1lbmRpbmcgbG9vcFxuXHRcdFx0XHRpZiAoIG5hbWUgPT09IFwiX19wcm90b19fXCIgfHwgdGFyZ2V0ID09PSBjb3B5ICkge1xuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gUmVjdXJzZSBpZiB3ZSdyZSBtZXJnaW5nIHBsYWluIG9iamVjdHMgb3IgYXJyYXlzXG5cdFx0XHRcdGlmICggZGVlcCAmJiBjb3B5ICYmICggalF1ZXJ5LmlzUGxhaW5PYmplY3QoIGNvcHkgKSB8fFxuXHRcdFx0XHRcdCggY29weUlzQXJyYXkgPSBBcnJheS5pc0FycmF5KCBjb3B5ICkgKSApICkge1xuXHRcdFx0XHRcdHNyYyA9IHRhcmdldFsgbmFtZSBdO1xuXG5cdFx0XHRcdFx0Ly8gRW5zdXJlIHByb3BlciB0eXBlIGZvciB0aGUgc291cmNlIHZhbHVlXG5cdFx0XHRcdFx0aWYgKCBjb3B5SXNBcnJheSAmJiAhQXJyYXkuaXNBcnJheSggc3JjICkgKSB7XG5cdFx0XHRcdFx0XHRjbG9uZSA9IFtdO1xuXHRcdFx0XHRcdH0gZWxzZSBpZiAoICFjb3B5SXNBcnJheSAmJiAhalF1ZXJ5LmlzUGxhaW5PYmplY3QoIHNyYyApICkge1xuXHRcdFx0XHRcdFx0Y2xvbmUgPSB7fTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0Y2xvbmUgPSBzcmM7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGNvcHlJc0FycmF5ID0gZmFsc2U7XG5cblx0XHRcdFx0XHQvLyBOZXZlciBtb3ZlIG9yaWdpbmFsIG9iamVjdHMsIGNsb25lIHRoZW1cblx0XHRcdFx0XHR0YXJnZXRbIG5hbWUgXSA9IGpRdWVyeS5leHRlbmQoIGRlZXAsIGNsb25lLCBjb3B5ICk7XG5cblx0XHRcdFx0Ly8gRG9uJ3QgYnJpbmcgaW4gdW5kZWZpbmVkIHZhbHVlc1xuXHRcdFx0XHR9IGVsc2UgaWYgKCBjb3B5ICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdFx0dGFyZ2V0WyBuYW1lIF0gPSBjb3B5O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gUmV0dXJuIHRoZSBtb2RpZmllZCBvYmplY3Rcblx0cmV0dXJuIHRhcmdldDtcbn07XG5cbmpRdWVyeS5leHRlbmQoIHtcblxuXHQvLyBVbmlxdWUgZm9yIGVhY2ggY29weSBvZiBqUXVlcnkgb24gdGhlIHBhZ2Vcblx0ZXhwYW5kbzogXCJqUXVlcnlcIiArICggdmVyc2lvbiArIE1hdGgucmFuZG9tKCkgKS5yZXBsYWNlKCAvXFxEL2csIFwiXCIgKSxcblxuXHQvLyBBc3N1bWUgalF1ZXJ5IGlzIHJlYWR5IHdpdGhvdXQgdGhlIHJlYWR5IG1vZHVsZVxuXHRpc1JlYWR5OiB0cnVlLFxuXG5cdGVycm9yOiBmdW5jdGlvbiggbXNnICkge1xuXHRcdHRocm93IG5ldyBFcnJvciggbXNnICk7XG5cdH0sXG5cblx0bm9vcDogZnVuY3Rpb24oKSB7fSxcblxuXHRpc1BsYWluT2JqZWN0OiBmdW5jdGlvbiggb2JqICkge1xuXHRcdHZhciBwcm90bywgQ3RvcjtcblxuXHRcdC8vIERldGVjdCBvYnZpb3VzIG5lZ2F0aXZlc1xuXHRcdC8vIFVzZSB0b1N0cmluZyBpbnN0ZWFkIG9mIGpRdWVyeS50eXBlIHRvIGNhdGNoIGhvc3Qgb2JqZWN0c1xuXHRcdGlmICggIW9iaiB8fCB0b1N0cmluZy5jYWxsKCBvYmogKSAhPT0gXCJbb2JqZWN0IE9iamVjdF1cIiApIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRwcm90byA9IGdldFByb3RvKCBvYmogKTtcblxuXHRcdC8vIE9iamVjdHMgd2l0aCBubyBwcm90b3R5cGUgKGUuZy4sIGBPYmplY3QuY3JlYXRlKCBudWxsIClgKSBhcmUgcGxhaW5cblx0XHRpZiAoICFwcm90byApIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblxuXHRcdC8vIE9iamVjdHMgd2l0aCBwcm90b3R5cGUgYXJlIHBsYWluIGlmZiB0aGV5IHdlcmUgY29uc3RydWN0ZWQgYnkgYSBnbG9iYWwgT2JqZWN0IGZ1bmN0aW9uXG5cdFx0Q3RvciA9IGhhc093bi5jYWxsKCBwcm90bywgXCJjb25zdHJ1Y3RvclwiICkgJiYgcHJvdG8uY29uc3RydWN0b3I7XG5cdFx0cmV0dXJuIHR5cGVvZiBDdG9yID09PSBcImZ1bmN0aW9uXCIgJiYgZm5Ub1N0cmluZy5jYWxsKCBDdG9yICkgPT09IE9iamVjdEZ1bmN0aW9uU3RyaW5nO1xuXHR9LFxuXG5cdGlzRW1wdHlPYmplY3Q6IGZ1bmN0aW9uKCBvYmogKSB7XG5cdFx0dmFyIG5hbWU7XG5cblx0XHRmb3IgKCBuYW1lIGluIG9iaiApIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0sXG5cblx0Ly8gRXZhbHVhdGVzIGEgc2NyaXB0IGluIGEgZ2xvYmFsIGNvbnRleHRcblx0Z2xvYmFsRXZhbDogZnVuY3Rpb24oIGNvZGUsIG9wdGlvbnMgKSB7XG5cdFx0RE9NRXZhbCggY29kZSwgeyBub25jZTogb3B0aW9ucyAmJiBvcHRpb25zLm5vbmNlIH0gKTtcblx0fSxcblxuXHRlYWNoOiBmdW5jdGlvbiggb2JqLCBjYWxsYmFjayApIHtcblx0XHR2YXIgbGVuZ3RoLCBpID0gMDtcblxuXHRcdGlmICggaXNBcnJheUxpa2UoIG9iaiApICkge1xuXHRcdFx0bGVuZ3RoID0gb2JqLmxlbmd0aDtcblx0XHRcdGZvciAoIDsgaSA8IGxlbmd0aDsgaSsrICkge1xuXHRcdFx0XHRpZiAoIGNhbGxiYWNrLmNhbGwoIG9ialsgaSBdLCBpLCBvYmpbIGkgXSApID09PSBmYWxzZSApIHtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRmb3IgKCBpIGluIG9iaiApIHtcblx0XHRcdFx0aWYgKCBjYWxsYmFjay5jYWxsKCBvYmpbIGkgXSwgaSwgb2JqWyBpIF0gKSA9PT0gZmFsc2UgKSB7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gb2JqO1xuXHR9LFxuXG5cdC8vIFN1cHBvcnQ6IEFuZHJvaWQgPD00LjAgb25seVxuXHR0cmltOiBmdW5jdGlvbiggdGV4dCApIHtcblx0XHRyZXR1cm4gdGV4dCA9PSBudWxsID9cblx0XHRcdFwiXCIgOlxuXHRcdFx0KCB0ZXh0ICsgXCJcIiApLnJlcGxhY2UoIHJ0cmltLCBcIlwiICk7XG5cdH0sXG5cblx0Ly8gcmVzdWx0cyBpcyBmb3IgaW50ZXJuYWwgdXNhZ2Ugb25seVxuXHRtYWtlQXJyYXk6IGZ1bmN0aW9uKCBhcnIsIHJlc3VsdHMgKSB7XG5cdFx0dmFyIHJldCA9IHJlc3VsdHMgfHwgW107XG5cblx0XHRpZiAoIGFyciAhPSBudWxsICkge1xuXHRcdFx0aWYgKCBpc0FycmF5TGlrZSggT2JqZWN0KCBhcnIgKSApICkge1xuXHRcdFx0XHRqUXVlcnkubWVyZ2UoIHJldCxcblx0XHRcdFx0XHR0eXBlb2YgYXJyID09PSBcInN0cmluZ1wiID9cblx0XHRcdFx0XHRbIGFyciBdIDogYXJyXG5cdFx0XHRcdCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRwdXNoLmNhbGwoIHJldCwgYXJyICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJldDtcblx0fSxcblxuXHRpbkFycmF5OiBmdW5jdGlvbiggZWxlbSwgYXJyLCBpICkge1xuXHRcdHJldHVybiBhcnIgPT0gbnVsbCA/IC0xIDogaW5kZXhPZi5jYWxsKCBhcnIsIGVsZW0sIGkgKTtcblx0fSxcblxuXHQvLyBTdXBwb3J0OiBBbmRyb2lkIDw9NC4wIG9ubHksIFBoYW50b21KUyAxIG9ubHlcblx0Ly8gcHVzaC5hcHBseShfLCBhcnJheWxpa2UpIHRocm93cyBvbiBhbmNpZW50IFdlYktpdFxuXHRtZXJnZTogZnVuY3Rpb24oIGZpcnN0LCBzZWNvbmQgKSB7XG5cdFx0dmFyIGxlbiA9ICtzZWNvbmQubGVuZ3RoLFxuXHRcdFx0aiA9IDAsXG5cdFx0XHRpID0gZmlyc3QubGVuZ3RoO1xuXG5cdFx0Zm9yICggOyBqIDwgbGVuOyBqKysgKSB7XG5cdFx0XHRmaXJzdFsgaSsrIF0gPSBzZWNvbmRbIGogXTtcblx0XHR9XG5cblx0XHRmaXJzdC5sZW5ndGggPSBpO1xuXG5cdFx0cmV0dXJuIGZpcnN0O1xuXHR9LFxuXG5cdGdyZXA6IGZ1bmN0aW9uKCBlbGVtcywgY2FsbGJhY2ssIGludmVydCApIHtcblx0XHR2YXIgY2FsbGJhY2tJbnZlcnNlLFxuXHRcdFx0bWF0Y2hlcyA9IFtdLFxuXHRcdFx0aSA9IDAsXG5cdFx0XHRsZW5ndGggPSBlbGVtcy5sZW5ndGgsXG5cdFx0XHRjYWxsYmFja0V4cGVjdCA9ICFpbnZlcnQ7XG5cblx0XHQvLyBHbyB0aHJvdWdoIHRoZSBhcnJheSwgb25seSBzYXZpbmcgdGhlIGl0ZW1zXG5cdFx0Ly8gdGhhdCBwYXNzIHRoZSB2YWxpZGF0b3IgZnVuY3Rpb25cblx0XHRmb3IgKCA7IGkgPCBsZW5ndGg7IGkrKyApIHtcblx0XHRcdGNhbGxiYWNrSW52ZXJzZSA9ICFjYWxsYmFjayggZWxlbXNbIGkgXSwgaSApO1xuXHRcdFx0aWYgKCBjYWxsYmFja0ludmVyc2UgIT09IGNhbGxiYWNrRXhwZWN0ICkge1xuXHRcdFx0XHRtYXRjaGVzLnB1c2goIGVsZW1zWyBpIF0gKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gbWF0Y2hlcztcblx0fSxcblxuXHQvLyBhcmcgaXMgZm9yIGludGVybmFsIHVzYWdlIG9ubHlcblx0bWFwOiBmdW5jdGlvbiggZWxlbXMsIGNhbGxiYWNrLCBhcmcgKSB7XG5cdFx0dmFyIGxlbmd0aCwgdmFsdWUsXG5cdFx0XHRpID0gMCxcblx0XHRcdHJldCA9IFtdO1xuXG5cdFx0Ly8gR28gdGhyb3VnaCB0aGUgYXJyYXksIHRyYW5zbGF0aW5nIGVhY2ggb2YgdGhlIGl0ZW1zIHRvIHRoZWlyIG5ldyB2YWx1ZXNcblx0XHRpZiAoIGlzQXJyYXlMaWtlKCBlbGVtcyApICkge1xuXHRcdFx0bGVuZ3RoID0gZWxlbXMubGVuZ3RoO1xuXHRcdFx0Zm9yICggOyBpIDwgbGVuZ3RoOyBpKysgKSB7XG5cdFx0XHRcdHZhbHVlID0gY2FsbGJhY2soIGVsZW1zWyBpIF0sIGksIGFyZyApO1xuXG5cdFx0XHRcdGlmICggdmFsdWUgIT0gbnVsbCApIHtcblx0XHRcdFx0XHRyZXQucHVzaCggdmFsdWUgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0Ly8gR28gdGhyb3VnaCBldmVyeSBrZXkgb24gdGhlIG9iamVjdCxcblx0XHR9IGVsc2Uge1xuXHRcdFx0Zm9yICggaSBpbiBlbGVtcyApIHtcblx0XHRcdFx0dmFsdWUgPSBjYWxsYmFjayggZWxlbXNbIGkgXSwgaSwgYXJnICk7XG5cblx0XHRcdFx0aWYgKCB2YWx1ZSAhPSBudWxsICkge1xuXHRcdFx0XHRcdHJldC5wdXNoKCB2YWx1ZSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gRmxhdHRlbiBhbnkgbmVzdGVkIGFycmF5c1xuXHRcdHJldHVybiBjb25jYXQuYXBwbHkoIFtdLCByZXQgKTtcblx0fSxcblxuXHQvLyBBIGdsb2JhbCBHVUlEIGNvdW50ZXIgZm9yIG9iamVjdHNcblx0Z3VpZDogMSxcblxuXHQvLyBqUXVlcnkuc3VwcG9ydCBpcyBub3QgdXNlZCBpbiBDb3JlIGJ1dCBvdGhlciBwcm9qZWN0cyBhdHRhY2ggdGhlaXJcblx0Ly8gcHJvcGVydGllcyB0byBpdCBzbyBpdCBuZWVkcyB0byBleGlzdC5cblx0c3VwcG9ydDogc3VwcG9ydFxufSApO1xuXG5pZiAoIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiApIHtcblx0alF1ZXJ5LmZuWyBTeW1ib2wuaXRlcmF0b3IgXSA9IGFyclsgU3ltYm9sLml0ZXJhdG9yIF07XG59XG5cbi8vIFBvcHVsYXRlIHRoZSBjbGFzczJ0eXBlIG1hcFxualF1ZXJ5LmVhY2goIFwiQm9vbGVhbiBOdW1iZXIgU3RyaW5nIEZ1bmN0aW9uIEFycmF5IERhdGUgUmVnRXhwIE9iamVjdCBFcnJvciBTeW1ib2xcIi5zcGxpdCggXCIgXCIgKSxcbmZ1bmN0aW9uKCBpLCBuYW1lICkge1xuXHRjbGFzczJ0eXBlWyBcIltvYmplY3QgXCIgKyBuYW1lICsgXCJdXCIgXSA9IG5hbWUudG9Mb3dlckNhc2UoKTtcbn0gKTtcblxuZnVuY3Rpb24gaXNBcnJheUxpa2UoIG9iaiApIHtcblxuXHQvLyBTdXBwb3J0OiByZWFsIGlPUyA4LjIgb25seSAobm90IHJlcHJvZHVjaWJsZSBpbiBzaW11bGF0b3IpXG5cdC8vIGBpbmAgY2hlY2sgdXNlZCB0byBwcmV2ZW50IEpJVCBlcnJvciAoZ2gtMjE0NSlcblx0Ly8gaGFzT3duIGlzbid0IHVzZWQgaGVyZSBkdWUgdG8gZmFsc2UgbmVnYXRpdmVzXG5cdC8vIHJlZ2FyZGluZyBOb2RlbGlzdCBsZW5ndGggaW4gSUVcblx0dmFyIGxlbmd0aCA9ICEhb2JqICYmIFwibGVuZ3RoXCIgaW4gb2JqICYmIG9iai5sZW5ndGgsXG5cdFx0dHlwZSA9IHRvVHlwZSggb2JqICk7XG5cblx0aWYgKCBpc0Z1bmN0aW9uKCBvYmogKSB8fCBpc1dpbmRvdyggb2JqICkgKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0cmV0dXJuIHR5cGUgPT09IFwiYXJyYXlcIiB8fCBsZW5ndGggPT09IDAgfHxcblx0XHR0eXBlb2YgbGVuZ3RoID09PSBcIm51bWJlclwiICYmIGxlbmd0aCA+IDAgJiYgKCBsZW5ndGggLSAxICkgaW4gb2JqO1xufVxudmFyIFNpenpsZSA9XG4vKiFcbiAqIFNpenpsZSBDU1MgU2VsZWN0b3IgRW5naW5lIHYyLjMuNFxuICogaHR0cHM6Ly9zaXp6bGVqcy5jb20vXG4gKlxuICogQ29weXJpZ2h0IEpTIEZvdW5kYXRpb24gYW5kIG90aGVyIGNvbnRyaWJ1dG9yc1xuICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlXG4gKiBodHRwczovL2pzLmZvdW5kYXRpb24vXG4gKlxuICogRGF0ZTogMjAxOS0wNC0wOFxuICovXG4oZnVuY3Rpb24oIHdpbmRvdyApIHtcblxudmFyIGksXG5cdHN1cHBvcnQsXG5cdEV4cHIsXG5cdGdldFRleHQsXG5cdGlzWE1MLFxuXHR0b2tlbml6ZSxcblx0Y29tcGlsZSxcblx0c2VsZWN0LFxuXHRvdXRlcm1vc3RDb250ZXh0LFxuXHRzb3J0SW5wdXQsXG5cdGhhc0R1cGxpY2F0ZSxcblxuXHQvLyBMb2NhbCBkb2N1bWVudCB2YXJzXG5cdHNldERvY3VtZW50LFxuXHRkb2N1bWVudCxcblx0ZG9jRWxlbSxcblx0ZG9jdW1lbnRJc0hUTUwsXG5cdHJidWdneVFTQSxcblx0cmJ1Z2d5TWF0Y2hlcyxcblx0bWF0Y2hlcyxcblx0Y29udGFpbnMsXG5cblx0Ly8gSW5zdGFuY2Utc3BlY2lmaWMgZGF0YVxuXHRleHBhbmRvID0gXCJzaXp6bGVcIiArIDEgKiBuZXcgRGF0ZSgpLFxuXHRwcmVmZXJyZWREb2MgPSB3aW5kb3cuZG9jdW1lbnQsXG5cdGRpcnJ1bnMgPSAwLFxuXHRkb25lID0gMCxcblx0Y2xhc3NDYWNoZSA9IGNyZWF0ZUNhY2hlKCksXG5cdHRva2VuQ2FjaGUgPSBjcmVhdGVDYWNoZSgpLFxuXHRjb21waWxlckNhY2hlID0gY3JlYXRlQ2FjaGUoKSxcblx0bm9ubmF0aXZlU2VsZWN0b3JDYWNoZSA9IGNyZWF0ZUNhY2hlKCksXG5cdHNvcnRPcmRlciA9IGZ1bmN0aW9uKCBhLCBiICkge1xuXHRcdGlmICggYSA9PT0gYiApIHtcblx0XHRcdGhhc0R1cGxpY2F0ZSA9IHRydWU7XG5cdFx0fVxuXHRcdHJldHVybiAwO1xuXHR9LFxuXG5cdC8vIEluc3RhbmNlIG1ldGhvZHNcblx0aGFzT3duID0gKHt9KS5oYXNPd25Qcm9wZXJ0eSxcblx0YXJyID0gW10sXG5cdHBvcCA9IGFyci5wb3AsXG5cdHB1c2hfbmF0aXZlID0gYXJyLnB1c2gsXG5cdHB1c2ggPSBhcnIucHVzaCxcblx0c2xpY2UgPSBhcnIuc2xpY2UsXG5cdC8vIFVzZSBhIHN0cmlwcGVkLWRvd24gaW5kZXhPZiBhcyBpdCdzIGZhc3RlciB0aGFuIG5hdGl2ZVxuXHQvLyBodHRwczovL2pzcGVyZi5jb20vdGhvci1pbmRleG9mLXZzLWZvci81XG5cdGluZGV4T2YgPSBmdW5jdGlvbiggbGlzdCwgZWxlbSApIHtcblx0XHR2YXIgaSA9IDAsXG5cdFx0XHRsZW4gPSBsaXN0Lmxlbmd0aDtcblx0XHRmb3IgKCA7IGkgPCBsZW47IGkrKyApIHtcblx0XHRcdGlmICggbGlzdFtpXSA9PT0gZWxlbSApIHtcblx0XHRcdFx0cmV0dXJuIGk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiAtMTtcblx0fSxcblxuXHRib29sZWFucyA9IFwiY2hlY2tlZHxzZWxlY3RlZHxhc3luY3xhdXRvZm9jdXN8YXV0b3BsYXl8Y29udHJvbHN8ZGVmZXJ8ZGlzYWJsZWR8aGlkZGVufGlzbWFwfGxvb3B8bXVsdGlwbGV8b3BlbnxyZWFkb25seXxyZXF1aXJlZHxzY29wZWRcIixcblxuXHQvLyBSZWd1bGFyIGV4cHJlc3Npb25zXG5cblx0Ly8gaHR0cDovL3d3dy53My5vcmcvVFIvY3NzMy1zZWxlY3RvcnMvI3doaXRlc3BhY2Vcblx0d2hpdGVzcGFjZSA9IFwiW1xcXFx4MjBcXFxcdFxcXFxyXFxcXG5cXFxcZl1cIixcblxuXHQvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9DU1MyMS9zeW5kYXRhLmh0bWwjdmFsdWUtZGVmLWlkZW50aWZpZXJcblx0aWRlbnRpZmllciA9IFwiKD86XFxcXFxcXFwufFtcXFxcdy1dfFteXFwwLVxcXFx4YTBdKStcIixcblxuXHQvLyBBdHRyaWJ1dGUgc2VsZWN0b3JzOiBodHRwOi8vd3d3LnczLm9yZy9UUi9zZWxlY3RvcnMvI2F0dHJpYnV0ZS1zZWxlY3RvcnNcblx0YXR0cmlidXRlcyA9IFwiXFxcXFtcIiArIHdoaXRlc3BhY2UgKyBcIiooXCIgKyBpZGVudGlmaWVyICsgXCIpKD86XCIgKyB3aGl0ZXNwYWNlICtcblx0XHQvLyBPcGVyYXRvciAoY2FwdHVyZSAyKVxuXHRcdFwiKihbKl4kfCF+XT89KVwiICsgd2hpdGVzcGFjZSArXG5cdFx0Ly8gXCJBdHRyaWJ1dGUgdmFsdWVzIG11c3QgYmUgQ1NTIGlkZW50aWZpZXJzIFtjYXB0dXJlIDVdIG9yIHN0cmluZ3MgW2NhcHR1cmUgMyBvciBjYXB0dXJlIDRdXCJcblx0XHRcIiooPzonKCg/OlxcXFxcXFxcLnxbXlxcXFxcXFxcJ10pKiknfFxcXCIoKD86XFxcXFxcXFwufFteXFxcXFxcXFxcXFwiXSkqKVxcXCJ8KFwiICsgaWRlbnRpZmllciArIFwiKSl8KVwiICsgd2hpdGVzcGFjZSArXG5cdFx0XCIqXFxcXF1cIixcblxuXHRwc2V1ZG9zID0gXCI6KFwiICsgaWRlbnRpZmllciArIFwiKSg/OlxcXFwoKFwiICtcblx0XHQvLyBUbyByZWR1Y2UgdGhlIG51bWJlciBvZiBzZWxlY3RvcnMgbmVlZGluZyB0b2tlbml6ZSBpbiB0aGUgcHJlRmlsdGVyLCBwcmVmZXIgYXJndW1lbnRzOlxuXHRcdC8vIDEuIHF1b3RlZCAoY2FwdHVyZSAzOyBjYXB0dXJlIDQgb3IgY2FwdHVyZSA1KVxuXHRcdFwiKCcoKD86XFxcXFxcXFwufFteXFxcXFxcXFwnXSkqKSd8XFxcIigoPzpcXFxcXFxcXC58W15cXFxcXFxcXFxcXCJdKSopXFxcIil8XCIgK1xuXHRcdC8vIDIuIHNpbXBsZSAoY2FwdHVyZSA2KVxuXHRcdFwiKCg/OlxcXFxcXFxcLnxbXlxcXFxcXFxcKClbXFxcXF1dfFwiICsgYXR0cmlidXRlcyArIFwiKSopfFwiICtcblx0XHQvLyAzLiBhbnl0aGluZyBlbHNlIChjYXB0dXJlIDIpXG5cdFx0XCIuKlwiICtcblx0XHRcIilcXFxcKXwpXCIsXG5cblx0Ly8gTGVhZGluZyBhbmQgbm9uLWVzY2FwZWQgdHJhaWxpbmcgd2hpdGVzcGFjZSwgY2FwdHVyaW5nIHNvbWUgbm9uLXdoaXRlc3BhY2UgY2hhcmFjdGVycyBwcmVjZWRpbmcgdGhlIGxhdHRlclxuXHRyd2hpdGVzcGFjZSA9IG5ldyBSZWdFeHAoIHdoaXRlc3BhY2UgKyBcIitcIiwgXCJnXCIgKSxcblx0cnRyaW0gPSBuZXcgUmVnRXhwKCBcIl5cIiArIHdoaXRlc3BhY2UgKyBcIit8KCg/Ol58W15cXFxcXFxcXF0pKD86XFxcXFxcXFwuKSopXCIgKyB3aGl0ZXNwYWNlICsgXCIrJFwiLCBcImdcIiApLFxuXG5cdHJjb21tYSA9IG5ldyBSZWdFeHAoIFwiXlwiICsgd2hpdGVzcGFjZSArIFwiKixcIiArIHdoaXRlc3BhY2UgKyBcIipcIiApLFxuXHRyY29tYmluYXRvcnMgPSBuZXcgUmVnRXhwKCBcIl5cIiArIHdoaXRlc3BhY2UgKyBcIiooWz4rfl18XCIgKyB3aGl0ZXNwYWNlICsgXCIpXCIgKyB3aGl0ZXNwYWNlICsgXCIqXCIgKSxcblx0cmRlc2NlbmQgPSBuZXcgUmVnRXhwKCB3aGl0ZXNwYWNlICsgXCJ8PlwiICksXG5cblx0cnBzZXVkbyA9IG5ldyBSZWdFeHAoIHBzZXVkb3MgKSxcblx0cmlkZW50aWZpZXIgPSBuZXcgUmVnRXhwKCBcIl5cIiArIGlkZW50aWZpZXIgKyBcIiRcIiApLFxuXG5cdG1hdGNoRXhwciA9IHtcblx0XHRcIklEXCI6IG5ldyBSZWdFeHAoIFwiXiMoXCIgKyBpZGVudGlmaWVyICsgXCIpXCIgKSxcblx0XHRcIkNMQVNTXCI6IG5ldyBSZWdFeHAoIFwiXlxcXFwuKFwiICsgaWRlbnRpZmllciArIFwiKVwiICksXG5cdFx0XCJUQUdcIjogbmV3IFJlZ0V4cCggXCJeKFwiICsgaWRlbnRpZmllciArIFwifFsqXSlcIiApLFxuXHRcdFwiQVRUUlwiOiBuZXcgUmVnRXhwKCBcIl5cIiArIGF0dHJpYnV0ZXMgKSxcblx0XHRcIlBTRVVET1wiOiBuZXcgUmVnRXhwKCBcIl5cIiArIHBzZXVkb3MgKSxcblx0XHRcIkNISUxEXCI6IG5ldyBSZWdFeHAoIFwiXjoob25seXxmaXJzdHxsYXN0fG50aHxudGgtbGFzdCktKGNoaWxkfG9mLXR5cGUpKD86XFxcXChcIiArIHdoaXRlc3BhY2UgK1xuXHRcdFx0XCIqKGV2ZW58b2RkfCgoWystXXwpKFxcXFxkKilufClcIiArIHdoaXRlc3BhY2UgKyBcIiooPzooWystXXwpXCIgKyB3aGl0ZXNwYWNlICtcblx0XHRcdFwiKihcXFxcZCspfCkpXCIgKyB3aGl0ZXNwYWNlICsgXCIqXFxcXCl8KVwiLCBcImlcIiApLFxuXHRcdFwiYm9vbFwiOiBuZXcgUmVnRXhwKCBcIl4oPzpcIiArIGJvb2xlYW5zICsgXCIpJFwiLCBcImlcIiApLFxuXHRcdC8vIEZvciB1c2UgaW4gbGlicmFyaWVzIGltcGxlbWVudGluZyAuaXMoKVxuXHRcdC8vIFdlIHVzZSB0aGlzIGZvciBQT1MgbWF0Y2hpbmcgaW4gYHNlbGVjdGBcblx0XHRcIm5lZWRzQ29udGV4dFwiOiBuZXcgUmVnRXhwKCBcIl5cIiArIHdoaXRlc3BhY2UgKyBcIipbPit+XXw6KGV2ZW58b2RkfGVxfGd0fGx0fG50aHxmaXJzdHxsYXN0KSg/OlxcXFwoXCIgK1xuXHRcdFx0d2hpdGVzcGFjZSArIFwiKigoPzotXFxcXGQpP1xcXFxkKilcIiArIHdoaXRlc3BhY2UgKyBcIipcXFxcKXwpKD89W14tXXwkKVwiLCBcImlcIiApXG5cdH0sXG5cblx0cmh0bWwgPSAvSFRNTCQvaSxcblx0cmlucHV0cyA9IC9eKD86aW5wdXR8c2VsZWN0fHRleHRhcmVhfGJ1dHRvbikkL2ksXG5cdHJoZWFkZXIgPSAvXmhcXGQkL2ksXG5cblx0cm5hdGl2ZSA9IC9eW157XStcXHtcXHMqXFxbbmF0aXZlIFxcdy8sXG5cblx0Ly8gRWFzaWx5LXBhcnNlYWJsZS9yZXRyaWV2YWJsZSBJRCBvciBUQUcgb3IgQ0xBU1Mgc2VsZWN0b3JzXG5cdHJxdWlja0V4cHIgPSAvXig/OiMoW1xcdy1dKyl8KFxcdyspfFxcLihbXFx3LV0rKSkkLyxcblxuXHRyc2libGluZyA9IC9bK35dLyxcblxuXHQvLyBDU1MgZXNjYXBlc1xuXHQvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9DU1MyMS9zeW5kYXRhLmh0bWwjZXNjYXBlZC1jaGFyYWN0ZXJzXG5cdHJ1bmVzY2FwZSA9IG5ldyBSZWdFeHAoIFwiXFxcXFxcXFwoW1xcXFxkYS1mXXsxLDZ9XCIgKyB3aGl0ZXNwYWNlICsgXCI/fChcIiArIHdoaXRlc3BhY2UgKyBcIil8LilcIiwgXCJpZ1wiICksXG5cdGZ1bmVzY2FwZSA9IGZ1bmN0aW9uKCBfLCBlc2NhcGVkLCBlc2NhcGVkV2hpdGVzcGFjZSApIHtcblx0XHR2YXIgaGlnaCA9IFwiMHhcIiArIGVzY2FwZWQgLSAweDEwMDAwO1xuXHRcdC8vIE5hTiBtZWFucyBub24tY29kZXBvaW50XG5cdFx0Ly8gU3VwcG9ydDogRmlyZWZveDwyNFxuXHRcdC8vIFdvcmthcm91bmQgZXJyb25lb3VzIG51bWVyaWMgaW50ZXJwcmV0YXRpb24gb2YgK1wiMHhcIlxuXHRcdHJldHVybiBoaWdoICE9PSBoaWdoIHx8IGVzY2FwZWRXaGl0ZXNwYWNlID9cblx0XHRcdGVzY2FwZWQgOlxuXHRcdFx0aGlnaCA8IDAgP1xuXHRcdFx0XHQvLyBCTVAgY29kZXBvaW50XG5cdFx0XHRcdFN0cmluZy5mcm9tQ2hhckNvZGUoIGhpZ2ggKyAweDEwMDAwICkgOlxuXHRcdFx0XHQvLyBTdXBwbGVtZW50YWwgUGxhbmUgY29kZXBvaW50IChzdXJyb2dhdGUgcGFpcilcblx0XHRcdFx0U3RyaW5nLmZyb21DaGFyQ29kZSggaGlnaCA+PiAxMCB8IDB4RDgwMCwgaGlnaCAmIDB4M0ZGIHwgMHhEQzAwICk7XG5cdH0sXG5cblx0Ly8gQ1NTIHN0cmluZy9pZGVudGlmaWVyIHNlcmlhbGl6YXRpb25cblx0Ly8gaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL2Nzc29tLyNjb21tb24tc2VyaWFsaXppbmctaWRpb21zXG5cdHJjc3Nlc2NhcGUgPSAvKFtcXDAtXFx4MWZcXHg3Zl18Xi0/XFxkKXxeLSR8W15cXDAtXFx4MWZcXHg3Zi1cXHVGRkZGXFx3LV0vZyxcblx0ZmNzc2VzY2FwZSA9IGZ1bmN0aW9uKCBjaCwgYXNDb2RlUG9pbnQgKSB7XG5cdFx0aWYgKCBhc0NvZGVQb2ludCApIHtcblxuXHRcdFx0Ly8gVSswMDAwIE5VTEwgYmVjb21lcyBVK0ZGRkQgUkVQTEFDRU1FTlQgQ0hBUkFDVEVSXG5cdFx0XHRpZiAoIGNoID09PSBcIlxcMFwiICkge1xuXHRcdFx0XHRyZXR1cm4gXCJcXHVGRkZEXCI7XG5cdFx0XHR9XG5cblx0XHRcdC8vIENvbnRyb2wgY2hhcmFjdGVycyBhbmQgKGRlcGVuZGVudCB1cG9uIHBvc2l0aW9uKSBudW1iZXJzIGdldCBlc2NhcGVkIGFzIGNvZGUgcG9pbnRzXG5cdFx0XHRyZXR1cm4gY2guc2xpY2UoIDAsIC0xICkgKyBcIlxcXFxcIiArIGNoLmNoYXJDb2RlQXQoIGNoLmxlbmd0aCAtIDEgKS50b1N0cmluZyggMTYgKSArIFwiIFwiO1xuXHRcdH1cblxuXHRcdC8vIE90aGVyIHBvdGVudGlhbGx5LXNwZWNpYWwgQVNDSUkgY2hhcmFjdGVycyBnZXQgYmFja3NsYXNoLWVzY2FwZWRcblx0XHRyZXR1cm4gXCJcXFxcXCIgKyBjaDtcblx0fSxcblxuXHQvLyBVc2VkIGZvciBpZnJhbWVzXG5cdC8vIFNlZSBzZXREb2N1bWVudCgpXG5cdC8vIFJlbW92aW5nIHRoZSBmdW5jdGlvbiB3cmFwcGVyIGNhdXNlcyBhIFwiUGVybWlzc2lvbiBEZW5pZWRcIlxuXHQvLyBlcnJvciBpbiBJRVxuXHR1bmxvYWRIYW5kbGVyID0gZnVuY3Rpb24oKSB7XG5cdFx0c2V0RG9jdW1lbnQoKTtcblx0fSxcblxuXHRpbkRpc2FibGVkRmllbGRzZXQgPSBhZGRDb21iaW5hdG9yKFxuXHRcdGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuIGVsZW0uZGlzYWJsZWQgPT09IHRydWUgJiYgZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSBcImZpZWxkc2V0XCI7XG5cdFx0fSxcblx0XHR7IGRpcjogXCJwYXJlbnROb2RlXCIsIG5leHQ6IFwibGVnZW5kXCIgfVxuXHQpO1xuXG4vLyBPcHRpbWl6ZSBmb3IgcHVzaC5hcHBseSggXywgTm9kZUxpc3QgKVxudHJ5IHtcblx0cHVzaC5hcHBseShcblx0XHQoYXJyID0gc2xpY2UuY2FsbCggcHJlZmVycmVkRG9jLmNoaWxkTm9kZXMgKSksXG5cdFx0cHJlZmVycmVkRG9jLmNoaWxkTm9kZXNcblx0KTtcblx0Ly8gU3VwcG9ydDogQW5kcm9pZDw0LjBcblx0Ly8gRGV0ZWN0IHNpbGVudGx5IGZhaWxpbmcgcHVzaC5hcHBseVxuXHRhcnJbIHByZWZlcnJlZERvYy5jaGlsZE5vZGVzLmxlbmd0aCBdLm5vZGVUeXBlO1xufSBjYXRjaCAoIGUgKSB7XG5cdHB1c2ggPSB7IGFwcGx5OiBhcnIubGVuZ3RoID9cblxuXHRcdC8vIExldmVyYWdlIHNsaWNlIGlmIHBvc3NpYmxlXG5cdFx0ZnVuY3Rpb24oIHRhcmdldCwgZWxzICkge1xuXHRcdFx0cHVzaF9uYXRpdmUuYXBwbHkoIHRhcmdldCwgc2xpY2UuY2FsbChlbHMpICk7XG5cdFx0fSA6XG5cblx0XHQvLyBTdXBwb3J0OiBJRTw5XG5cdFx0Ly8gT3RoZXJ3aXNlIGFwcGVuZCBkaXJlY3RseVxuXHRcdGZ1bmN0aW9uKCB0YXJnZXQsIGVscyApIHtcblx0XHRcdHZhciBqID0gdGFyZ2V0Lmxlbmd0aCxcblx0XHRcdFx0aSA9IDA7XG5cdFx0XHQvLyBDYW4ndCB0cnVzdCBOb2RlTGlzdC5sZW5ndGhcblx0XHRcdHdoaWxlICggKHRhcmdldFtqKytdID0gZWxzW2krK10pICkge31cblx0XHRcdHRhcmdldC5sZW5ndGggPSBqIC0gMTtcblx0XHR9XG5cdH07XG59XG5cbmZ1bmN0aW9uIFNpenpsZSggc2VsZWN0b3IsIGNvbnRleHQsIHJlc3VsdHMsIHNlZWQgKSB7XG5cdHZhciBtLCBpLCBlbGVtLCBuaWQsIG1hdGNoLCBncm91cHMsIG5ld1NlbGVjdG9yLFxuXHRcdG5ld0NvbnRleHQgPSBjb250ZXh0ICYmIGNvbnRleHQub3duZXJEb2N1bWVudCxcblxuXHRcdC8vIG5vZGVUeXBlIGRlZmF1bHRzIHRvIDksIHNpbmNlIGNvbnRleHQgZGVmYXVsdHMgdG8gZG9jdW1lbnRcblx0XHRub2RlVHlwZSA9IGNvbnRleHQgPyBjb250ZXh0Lm5vZGVUeXBlIDogOTtcblxuXHRyZXN1bHRzID0gcmVzdWx0cyB8fCBbXTtcblxuXHQvLyBSZXR1cm4gZWFybHkgZnJvbSBjYWxscyB3aXRoIGludmFsaWQgc2VsZWN0b3Igb3IgY29udGV4dFxuXHRpZiAoIHR5cGVvZiBzZWxlY3RvciAhPT0gXCJzdHJpbmdcIiB8fCAhc2VsZWN0b3IgfHxcblx0XHRub2RlVHlwZSAhPT0gMSAmJiBub2RlVHlwZSAhPT0gOSAmJiBub2RlVHlwZSAhPT0gMTEgKSB7XG5cblx0XHRyZXR1cm4gcmVzdWx0cztcblx0fVxuXG5cdC8vIFRyeSB0byBzaG9ydGN1dCBmaW5kIG9wZXJhdGlvbnMgKGFzIG9wcG9zZWQgdG8gZmlsdGVycykgaW4gSFRNTCBkb2N1bWVudHNcblx0aWYgKCAhc2VlZCApIHtcblxuXHRcdGlmICggKCBjb250ZXh0ID8gY29udGV4dC5vd25lckRvY3VtZW50IHx8IGNvbnRleHQgOiBwcmVmZXJyZWREb2MgKSAhPT0gZG9jdW1lbnQgKSB7XG5cdFx0XHRzZXREb2N1bWVudCggY29udGV4dCApO1xuXHRcdH1cblx0XHRjb250ZXh0ID0gY29udGV4dCB8fCBkb2N1bWVudDtcblxuXHRcdGlmICggZG9jdW1lbnRJc0hUTUwgKSB7XG5cblx0XHRcdC8vIElmIHRoZSBzZWxlY3RvciBpcyBzdWZmaWNpZW50bHkgc2ltcGxlLCB0cnkgdXNpbmcgYSBcImdldCpCeSpcIiBET00gbWV0aG9kXG5cdFx0XHQvLyAoZXhjZXB0aW5nIERvY3VtZW50RnJhZ21lbnQgY29udGV4dCwgd2hlcmUgdGhlIG1ldGhvZHMgZG9uJ3QgZXhpc3QpXG5cdFx0XHRpZiAoIG5vZGVUeXBlICE9PSAxMSAmJiAobWF0Y2ggPSBycXVpY2tFeHByLmV4ZWMoIHNlbGVjdG9yICkpICkge1xuXG5cdFx0XHRcdC8vIElEIHNlbGVjdG9yXG5cdFx0XHRcdGlmICggKG0gPSBtYXRjaFsxXSkgKSB7XG5cblx0XHRcdFx0XHQvLyBEb2N1bWVudCBjb250ZXh0XG5cdFx0XHRcdFx0aWYgKCBub2RlVHlwZSA9PT0gOSApIHtcblx0XHRcdFx0XHRcdGlmICggKGVsZW0gPSBjb250ZXh0LmdldEVsZW1lbnRCeUlkKCBtICkpICkge1xuXG5cdFx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFLCBPcGVyYSwgV2Via2l0XG5cdFx0XHRcdFx0XHRcdC8vIFRPRE86IGlkZW50aWZ5IHZlcnNpb25zXG5cdFx0XHRcdFx0XHRcdC8vIGdldEVsZW1lbnRCeUlkIGNhbiBtYXRjaCBlbGVtZW50cyBieSBuYW1lIGluc3RlYWQgb2YgSURcblx0XHRcdFx0XHRcdFx0aWYgKCBlbGVtLmlkID09PSBtICkge1xuXHRcdFx0XHRcdFx0XHRcdHJlc3VsdHMucHVzaCggZWxlbSApO1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybiByZXN1bHRzO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0cztcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIEVsZW1lbnQgY29udGV4dFxuXHRcdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFLCBPcGVyYSwgV2Via2l0XG5cdFx0XHRcdFx0XHQvLyBUT0RPOiBpZGVudGlmeSB2ZXJzaW9uc1xuXHRcdFx0XHRcdFx0Ly8gZ2V0RWxlbWVudEJ5SWQgY2FuIG1hdGNoIGVsZW1lbnRzIGJ5IG5hbWUgaW5zdGVhZCBvZiBJRFxuXHRcdFx0XHRcdFx0aWYgKCBuZXdDb250ZXh0ICYmIChlbGVtID0gbmV3Q29udGV4dC5nZXRFbGVtZW50QnlJZCggbSApKSAmJlxuXHRcdFx0XHRcdFx0XHRjb250YWlucyggY29udGV4dCwgZWxlbSApICYmXG5cdFx0XHRcdFx0XHRcdGVsZW0uaWQgPT09IG0gKSB7XG5cblx0XHRcdFx0XHRcdFx0cmVzdWx0cy5wdXNoKCBlbGVtICk7XG5cdFx0XHRcdFx0XHRcdHJldHVybiByZXN1bHRzO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBUeXBlIHNlbGVjdG9yXG5cdFx0XHRcdH0gZWxzZSBpZiAoIG1hdGNoWzJdICkge1xuXHRcdFx0XHRcdHB1c2guYXBwbHkoIHJlc3VsdHMsIGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIHNlbGVjdG9yICkgKTtcblx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0cztcblxuXHRcdFx0XHQvLyBDbGFzcyBzZWxlY3RvclxuXHRcdFx0XHR9IGVsc2UgaWYgKCAobSA9IG1hdGNoWzNdKSAmJiBzdXBwb3J0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUgJiZcblx0XHRcdFx0XHRjb250ZXh0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUgKSB7XG5cblx0XHRcdFx0XHRwdXNoLmFwcGx5KCByZXN1bHRzLCBjb250ZXh0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoIG0gKSApO1xuXHRcdFx0XHRcdHJldHVybiByZXN1bHRzO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIFRha2UgYWR2YW50YWdlIG9mIHF1ZXJ5U2VsZWN0b3JBbGxcblx0XHRcdGlmICggc3VwcG9ydC5xc2EgJiZcblx0XHRcdFx0IW5vbm5hdGl2ZVNlbGVjdG9yQ2FjaGVbIHNlbGVjdG9yICsgXCIgXCIgXSAmJlxuXHRcdFx0XHQoIXJidWdneVFTQSB8fCAhcmJ1Z2d5UVNBLnRlc3QoIHNlbGVjdG9yICkpICYmXG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgOCBvbmx5XG5cdFx0XHRcdC8vIEV4Y2x1ZGUgb2JqZWN0IGVsZW1lbnRzXG5cdFx0XHRcdChub2RlVHlwZSAhPT0gMSB8fCBjb250ZXh0Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgIT09IFwib2JqZWN0XCIpICkge1xuXG5cdFx0XHRcdG5ld1NlbGVjdG9yID0gc2VsZWN0b3I7XG5cdFx0XHRcdG5ld0NvbnRleHQgPSBjb250ZXh0O1xuXG5cdFx0XHRcdC8vIHFTQSBjb25zaWRlcnMgZWxlbWVudHMgb3V0c2lkZSBhIHNjb3Bpbmcgcm9vdCB3aGVuIGV2YWx1YXRpbmcgY2hpbGQgb3Jcblx0XHRcdFx0Ly8gZGVzY2VuZGFudCBjb21iaW5hdG9ycywgd2hpY2ggaXMgbm90IHdoYXQgd2Ugd2FudC5cblx0XHRcdFx0Ly8gSW4gc3VjaCBjYXNlcywgd2Ugd29yayBhcm91bmQgdGhlIGJlaGF2aW9yIGJ5IHByZWZpeGluZyBldmVyeSBzZWxlY3RvciBpbiB0aGVcblx0XHRcdFx0Ly8gbGlzdCB3aXRoIGFuIElEIHNlbGVjdG9yIHJlZmVyZW5jaW5nIHRoZSBzY29wZSBjb250ZXh0LlxuXHRcdFx0XHQvLyBUaGFua3MgdG8gQW5kcmV3IER1cG9udCBmb3IgdGhpcyB0ZWNobmlxdWUuXG5cdFx0XHRcdGlmICggbm9kZVR5cGUgPT09IDEgJiYgcmRlc2NlbmQudGVzdCggc2VsZWN0b3IgKSApIHtcblxuXHRcdFx0XHRcdC8vIENhcHR1cmUgdGhlIGNvbnRleHQgSUQsIHNldHRpbmcgaXQgZmlyc3QgaWYgbmVjZXNzYXJ5XG5cdFx0XHRcdFx0aWYgKCAobmlkID0gY29udGV4dC5nZXRBdHRyaWJ1dGUoIFwiaWRcIiApKSApIHtcblx0XHRcdFx0XHRcdG5pZCA9IG5pZC5yZXBsYWNlKCByY3NzZXNjYXBlLCBmY3NzZXNjYXBlICk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGNvbnRleHQuc2V0QXR0cmlidXRlKCBcImlkXCIsIChuaWQgPSBleHBhbmRvKSApO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIFByZWZpeCBldmVyeSBzZWxlY3RvciBpbiB0aGUgbGlzdFxuXHRcdFx0XHRcdGdyb3VwcyA9IHRva2VuaXplKCBzZWxlY3RvciApO1xuXHRcdFx0XHRcdGkgPSBncm91cHMubGVuZ3RoO1xuXHRcdFx0XHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0XHRcdFx0Z3JvdXBzW2ldID0gXCIjXCIgKyBuaWQgKyBcIiBcIiArIHRvU2VsZWN0b3IoIGdyb3Vwc1tpXSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRuZXdTZWxlY3RvciA9IGdyb3Vwcy5qb2luKCBcIixcIiApO1xuXG5cdFx0XHRcdFx0Ly8gRXhwYW5kIGNvbnRleHQgZm9yIHNpYmxpbmcgc2VsZWN0b3JzXG5cdFx0XHRcdFx0bmV3Q29udGV4dCA9IHJzaWJsaW5nLnRlc3QoIHNlbGVjdG9yICkgJiYgdGVzdENvbnRleHQoIGNvbnRleHQucGFyZW50Tm9kZSApIHx8XG5cdFx0XHRcdFx0XHRjb250ZXh0O1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRwdXNoLmFwcGx5KCByZXN1bHRzLFxuXHRcdFx0XHRcdFx0bmV3Q29udGV4dC5xdWVyeVNlbGVjdG9yQWxsKCBuZXdTZWxlY3RvciApXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0cztcblx0XHRcdFx0fSBjYXRjaCAoIHFzYUVycm9yICkge1xuXHRcdFx0XHRcdG5vbm5hdGl2ZVNlbGVjdG9yQ2FjaGUoIHNlbGVjdG9yLCB0cnVlICk7XG5cdFx0XHRcdH0gZmluYWxseSB7XG5cdFx0XHRcdFx0aWYgKCBuaWQgPT09IGV4cGFuZG8gKSB7XG5cdFx0XHRcdFx0XHRjb250ZXh0LnJlbW92ZUF0dHJpYnV0ZSggXCJpZFwiICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gQWxsIG90aGVyc1xuXHRyZXR1cm4gc2VsZWN0KCBzZWxlY3Rvci5yZXBsYWNlKCBydHJpbSwgXCIkMVwiICksIGNvbnRleHQsIHJlc3VsdHMsIHNlZWQgKTtcbn1cblxuLyoqXG4gKiBDcmVhdGUga2V5LXZhbHVlIGNhY2hlcyBvZiBsaW1pdGVkIHNpemVcbiAqIEByZXR1cm5zIHtmdW5jdGlvbihzdHJpbmcsIG9iamVjdCl9IFJldHVybnMgdGhlIE9iamVjdCBkYXRhIGFmdGVyIHN0b3JpbmcgaXQgb24gaXRzZWxmIHdpdGhcbiAqXHRwcm9wZXJ0eSBuYW1lIHRoZSAoc3BhY2Utc3VmZml4ZWQpIHN0cmluZyBhbmQgKGlmIHRoZSBjYWNoZSBpcyBsYXJnZXIgdGhhbiBFeHByLmNhY2hlTGVuZ3RoKVxuICpcdGRlbGV0aW5nIHRoZSBvbGRlc3QgZW50cnlcbiAqL1xuZnVuY3Rpb24gY3JlYXRlQ2FjaGUoKSB7XG5cdHZhciBrZXlzID0gW107XG5cblx0ZnVuY3Rpb24gY2FjaGUoIGtleSwgdmFsdWUgKSB7XG5cdFx0Ly8gVXNlIChrZXkgKyBcIiBcIikgdG8gYXZvaWQgY29sbGlzaW9uIHdpdGggbmF0aXZlIHByb3RvdHlwZSBwcm9wZXJ0aWVzIChzZWUgSXNzdWUgIzE1Nylcblx0XHRpZiAoIGtleXMucHVzaCgga2V5ICsgXCIgXCIgKSA+IEV4cHIuY2FjaGVMZW5ndGggKSB7XG5cdFx0XHQvLyBPbmx5IGtlZXAgdGhlIG1vc3QgcmVjZW50IGVudHJpZXNcblx0XHRcdGRlbGV0ZSBjYWNoZVsga2V5cy5zaGlmdCgpIF07XG5cdFx0fVxuXHRcdHJldHVybiAoY2FjaGVbIGtleSArIFwiIFwiIF0gPSB2YWx1ZSk7XG5cdH1cblx0cmV0dXJuIGNhY2hlO1xufVxuXG4vKipcbiAqIE1hcmsgYSBmdW5jdGlvbiBmb3Igc3BlY2lhbCB1c2UgYnkgU2l6emxlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgZnVuY3Rpb24gdG8gbWFya1xuICovXG5mdW5jdGlvbiBtYXJrRnVuY3Rpb24oIGZuICkge1xuXHRmblsgZXhwYW5kbyBdID0gdHJ1ZTtcblx0cmV0dXJuIGZuO1xufVxuXG4vKipcbiAqIFN1cHBvcnQgdGVzdGluZyB1c2luZyBhbiBlbGVtZW50XG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBQYXNzZWQgdGhlIGNyZWF0ZWQgZWxlbWVudCBhbmQgcmV0dXJucyBhIGJvb2xlYW4gcmVzdWx0XG4gKi9cbmZ1bmN0aW9uIGFzc2VydCggZm4gKSB7XG5cdHZhciBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJmaWVsZHNldFwiKTtcblxuXHR0cnkge1xuXHRcdHJldHVybiAhIWZuKCBlbCApO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9IGZpbmFsbHkge1xuXHRcdC8vIFJlbW92ZSBmcm9tIGl0cyBwYXJlbnQgYnkgZGVmYXVsdFxuXHRcdGlmICggZWwucGFyZW50Tm9kZSApIHtcblx0XHRcdGVsLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoIGVsICk7XG5cdFx0fVxuXHRcdC8vIHJlbGVhc2UgbWVtb3J5IGluIElFXG5cdFx0ZWwgPSBudWxsO1xuXHR9XG59XG5cbi8qKlxuICogQWRkcyB0aGUgc2FtZSBoYW5kbGVyIGZvciBhbGwgb2YgdGhlIHNwZWNpZmllZCBhdHRyc1xuICogQHBhcmFtIHtTdHJpbmd9IGF0dHJzIFBpcGUtc2VwYXJhdGVkIGxpc3Qgb2YgYXR0cmlidXRlc1xuICogQHBhcmFtIHtGdW5jdGlvbn0gaGFuZGxlciBUaGUgbWV0aG9kIHRoYXQgd2lsbCBiZSBhcHBsaWVkXG4gKi9cbmZ1bmN0aW9uIGFkZEhhbmRsZSggYXR0cnMsIGhhbmRsZXIgKSB7XG5cdHZhciBhcnIgPSBhdHRycy5zcGxpdChcInxcIiksXG5cdFx0aSA9IGFyci5sZW5ndGg7XG5cblx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0RXhwci5hdHRySGFuZGxlWyBhcnJbaV0gXSA9IGhhbmRsZXI7XG5cdH1cbn1cblxuLyoqXG4gKiBDaGVja3MgZG9jdW1lbnQgb3JkZXIgb2YgdHdvIHNpYmxpbmdzXG4gKiBAcGFyYW0ge0VsZW1lbnR9IGFcbiAqIEBwYXJhbSB7RWxlbWVudH0gYlxuICogQHJldHVybnMge051bWJlcn0gUmV0dXJucyBsZXNzIHRoYW4gMCBpZiBhIHByZWNlZGVzIGIsIGdyZWF0ZXIgdGhhbiAwIGlmIGEgZm9sbG93cyBiXG4gKi9cbmZ1bmN0aW9uIHNpYmxpbmdDaGVjayggYSwgYiApIHtcblx0dmFyIGN1ciA9IGIgJiYgYSxcblx0XHRkaWZmID0gY3VyICYmIGEubm9kZVR5cGUgPT09IDEgJiYgYi5ub2RlVHlwZSA9PT0gMSAmJlxuXHRcdFx0YS5zb3VyY2VJbmRleCAtIGIuc291cmNlSW5kZXg7XG5cblx0Ly8gVXNlIElFIHNvdXJjZUluZGV4IGlmIGF2YWlsYWJsZSBvbiBib3RoIG5vZGVzXG5cdGlmICggZGlmZiApIHtcblx0XHRyZXR1cm4gZGlmZjtcblx0fVxuXG5cdC8vIENoZWNrIGlmIGIgZm9sbG93cyBhXG5cdGlmICggY3VyICkge1xuXHRcdHdoaWxlICggKGN1ciA9IGN1ci5uZXh0U2libGluZykgKSB7XG5cdFx0XHRpZiAoIGN1ciA9PT0gYiApIHtcblx0XHRcdFx0cmV0dXJuIC0xO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiBhID8gMSA6IC0xO1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBmdW5jdGlvbiB0byB1c2UgaW4gcHNldWRvcyBmb3IgaW5wdXQgdHlwZXNcbiAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUlucHV0UHNldWRvKCB0eXBlICkge1xuXHRyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0dmFyIG5hbWUgPSBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG5cdFx0cmV0dXJuIG5hbWUgPT09IFwiaW5wdXRcIiAmJiBlbGVtLnR5cGUgPT09IHR5cGU7XG5cdH07XG59XG5cbi8qKlxuICogUmV0dXJucyBhIGZ1bmN0aW9uIHRvIHVzZSBpbiBwc2V1ZG9zIGZvciBidXR0b25zXG4gKiBAcGFyYW0ge1N0cmluZ30gdHlwZVxuICovXG5mdW5jdGlvbiBjcmVhdGVCdXR0b25Qc2V1ZG8oIHR5cGUgKSB7XG5cdHJldHVybiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHR2YXIgbmFtZSA9IGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcblx0XHRyZXR1cm4gKG5hbWUgPT09IFwiaW5wdXRcIiB8fCBuYW1lID09PSBcImJ1dHRvblwiKSAmJiBlbGVtLnR5cGUgPT09IHR5cGU7XG5cdH07XG59XG5cbi8qKlxuICogUmV0dXJucyBhIGZ1bmN0aW9uIHRvIHVzZSBpbiBwc2V1ZG9zIGZvciA6ZW5hYmxlZC86ZGlzYWJsZWRcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gZGlzYWJsZWQgdHJ1ZSBmb3IgOmRpc2FibGVkOyBmYWxzZSBmb3IgOmVuYWJsZWRcbiAqL1xuZnVuY3Rpb24gY3JlYXRlRGlzYWJsZWRQc2V1ZG8oIGRpc2FibGVkICkge1xuXG5cdC8vIEtub3duIDpkaXNhYmxlZCBmYWxzZSBwb3NpdGl2ZXM6IGZpZWxkc2V0W2Rpc2FibGVkXSA+IGxlZ2VuZDpudGgtb2YtdHlwZShuKzIpIDpjYW4tZGlzYWJsZVxuXHRyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7XG5cblx0XHQvLyBPbmx5IGNlcnRhaW4gZWxlbWVudHMgY2FuIG1hdGNoIDplbmFibGVkIG9yIDpkaXNhYmxlZFxuXHRcdC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3NjcmlwdGluZy5odG1sI3NlbGVjdG9yLWVuYWJsZWRcblx0XHQvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zY3JpcHRpbmcuaHRtbCNzZWxlY3Rvci1kaXNhYmxlZFxuXHRcdGlmICggXCJmb3JtXCIgaW4gZWxlbSApIHtcblxuXHRcdFx0Ly8gQ2hlY2sgZm9yIGluaGVyaXRlZCBkaXNhYmxlZG5lc3Mgb24gcmVsZXZhbnQgbm9uLWRpc2FibGVkIGVsZW1lbnRzOlxuXHRcdFx0Ly8gKiBsaXN0ZWQgZm9ybS1hc3NvY2lhdGVkIGVsZW1lbnRzIGluIGEgZGlzYWJsZWQgZmllbGRzZXRcblx0XHRcdC8vICAgaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvZm9ybXMuaHRtbCNjYXRlZ29yeS1saXN0ZWRcblx0XHRcdC8vICAgaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvZm9ybXMuaHRtbCNjb25jZXB0LWZlLWRpc2FibGVkXG5cdFx0XHQvLyAqIG9wdGlvbiBlbGVtZW50cyBpbiBhIGRpc2FibGVkIG9wdGdyb3VwXG5cdFx0XHQvLyAgIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2Zvcm1zLmh0bWwjY29uY2VwdC1vcHRpb24tZGlzYWJsZWRcblx0XHRcdC8vIEFsbCBzdWNoIGVsZW1lbnRzIGhhdmUgYSBcImZvcm1cIiBwcm9wZXJ0eS5cblx0XHRcdGlmICggZWxlbS5wYXJlbnROb2RlICYmIGVsZW0uZGlzYWJsZWQgPT09IGZhbHNlICkge1xuXG5cdFx0XHRcdC8vIE9wdGlvbiBlbGVtZW50cyBkZWZlciB0byBhIHBhcmVudCBvcHRncm91cCBpZiBwcmVzZW50XG5cdFx0XHRcdGlmICggXCJsYWJlbFwiIGluIGVsZW0gKSB7XG5cdFx0XHRcdFx0aWYgKCBcImxhYmVsXCIgaW4gZWxlbS5wYXJlbnROb2RlICkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGVsZW0ucGFyZW50Tm9kZS5kaXNhYmxlZCA9PT0gZGlzYWJsZWQ7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHJldHVybiBlbGVtLmRpc2FibGVkID09PSBkaXNhYmxlZDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA2IC0gMTFcblx0XHRcdFx0Ly8gVXNlIHRoZSBpc0Rpc2FibGVkIHNob3J0Y3V0IHByb3BlcnR5IHRvIGNoZWNrIGZvciBkaXNhYmxlZCBmaWVsZHNldCBhbmNlc3RvcnNcblx0XHRcdFx0cmV0dXJuIGVsZW0uaXNEaXNhYmxlZCA9PT0gZGlzYWJsZWQgfHxcblxuXHRcdFx0XHRcdC8vIFdoZXJlIHRoZXJlIGlzIG5vIGlzRGlzYWJsZWQsIGNoZWNrIG1hbnVhbGx5XG5cdFx0XHRcdFx0LyoganNoaW50IC1XMDE4ICovXG5cdFx0XHRcdFx0ZWxlbS5pc0Rpc2FibGVkICE9PSAhZGlzYWJsZWQgJiZcblx0XHRcdFx0XHRcdGluRGlzYWJsZWRGaWVsZHNldCggZWxlbSApID09PSBkaXNhYmxlZDtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGVsZW0uZGlzYWJsZWQgPT09IGRpc2FibGVkO1xuXG5cdFx0Ly8gVHJ5IHRvIHdpbm5vdyBvdXQgZWxlbWVudHMgdGhhdCBjYW4ndCBiZSBkaXNhYmxlZCBiZWZvcmUgdHJ1c3RpbmcgdGhlIGRpc2FibGVkIHByb3BlcnR5LlxuXHRcdC8vIFNvbWUgdmljdGltcyBnZXQgY2F1Z2h0IGluIG91ciBuZXQgKGxhYmVsLCBsZWdlbmQsIG1lbnUsIHRyYWNrKSwgYnV0IGl0IHNob3VsZG4ndFxuXHRcdC8vIGV2ZW4gZXhpc3Qgb24gdGhlbSwgbGV0IGFsb25lIGhhdmUgYSBib29sZWFuIHZhbHVlLlxuXHRcdH0gZWxzZSBpZiAoIFwibGFiZWxcIiBpbiBlbGVtICkge1xuXHRcdFx0cmV0dXJuIGVsZW0uZGlzYWJsZWQgPT09IGRpc2FibGVkO1xuXHRcdH1cblxuXHRcdC8vIFJlbWFpbmluZyBlbGVtZW50cyBhcmUgbmVpdGhlciA6ZW5hYmxlZCBub3IgOmRpc2FibGVkXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9O1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBmdW5jdGlvbiB0byB1c2UgaW4gcHNldWRvcyBmb3IgcG9zaXRpb25hbHNcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oIGZuICkge1xuXHRyZXR1cm4gbWFya0Z1bmN0aW9uKGZ1bmN0aW9uKCBhcmd1bWVudCApIHtcblx0XHRhcmd1bWVudCA9ICthcmd1bWVudDtcblx0XHRyZXR1cm4gbWFya0Z1bmN0aW9uKGZ1bmN0aW9uKCBzZWVkLCBtYXRjaGVzICkge1xuXHRcdFx0dmFyIGosXG5cdFx0XHRcdG1hdGNoSW5kZXhlcyA9IGZuKCBbXSwgc2VlZC5sZW5ndGgsIGFyZ3VtZW50ICksXG5cdFx0XHRcdGkgPSBtYXRjaEluZGV4ZXMubGVuZ3RoO1xuXG5cdFx0XHQvLyBNYXRjaCBlbGVtZW50cyBmb3VuZCBhdCB0aGUgc3BlY2lmaWVkIGluZGV4ZXNcblx0XHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0XHRpZiAoIHNlZWRbIChqID0gbWF0Y2hJbmRleGVzW2ldKSBdICkge1xuXHRcdFx0XHRcdHNlZWRbal0gPSAhKG1hdGNoZXNbal0gPSBzZWVkW2pdKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHR9KTtcbn1cblxuLyoqXG4gKiBDaGVja3MgYSBub2RlIGZvciB2YWxpZGl0eSBhcyBhIFNpenpsZSBjb250ZXh0XG4gKiBAcGFyYW0ge0VsZW1lbnR8T2JqZWN0PX0gY29udGV4dFxuICogQHJldHVybnMge0VsZW1lbnR8T2JqZWN0fEJvb2xlYW59IFRoZSBpbnB1dCBub2RlIGlmIGFjY2VwdGFibGUsIG90aGVyd2lzZSBhIGZhbHN5IHZhbHVlXG4gKi9cbmZ1bmN0aW9uIHRlc3RDb250ZXh0KCBjb250ZXh0ICkge1xuXHRyZXR1cm4gY29udGV4dCAmJiB0eXBlb2YgY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSAhPT0gXCJ1bmRlZmluZWRcIiAmJiBjb250ZXh0O1xufVxuXG4vLyBFeHBvc2Ugc3VwcG9ydCB2YXJzIGZvciBjb252ZW5pZW5jZVxuc3VwcG9ydCA9IFNpenpsZS5zdXBwb3J0ID0ge307XG5cbi8qKlxuICogRGV0ZWN0cyBYTUwgbm9kZXNcbiAqIEBwYXJhbSB7RWxlbWVudHxPYmplY3R9IGVsZW0gQW4gZWxlbWVudCBvciBhIGRvY3VtZW50XG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gVHJ1ZSBpZmYgZWxlbSBpcyBhIG5vbi1IVE1MIFhNTCBub2RlXG4gKi9cbmlzWE1MID0gU2l6emxlLmlzWE1MID0gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdHZhciBuYW1lc3BhY2UgPSBlbGVtLm5hbWVzcGFjZVVSSSxcblx0XHRkb2NFbGVtID0gKGVsZW0ub3duZXJEb2N1bWVudCB8fCBlbGVtKS5kb2N1bWVudEVsZW1lbnQ7XG5cblx0Ly8gU3VwcG9ydDogSUUgPD04XG5cdC8vIEFzc3VtZSBIVE1MIHdoZW4gZG9jdW1lbnRFbGVtZW50IGRvZXNuJ3QgeWV0IGV4aXN0LCBzdWNoIGFzIGluc2lkZSBsb2FkaW5nIGlmcmFtZXNcblx0Ly8gaHR0cHM6Ly9idWdzLmpxdWVyeS5jb20vdGlja2V0LzQ4MzNcblx0cmV0dXJuICFyaHRtbC50ZXN0KCBuYW1lc3BhY2UgfHwgZG9jRWxlbSAmJiBkb2NFbGVtLm5vZGVOYW1lIHx8IFwiSFRNTFwiICk7XG59O1xuXG4vKipcbiAqIFNldHMgZG9jdW1lbnQtcmVsYXRlZCB2YXJpYWJsZXMgb25jZSBiYXNlZCBvbiB0aGUgY3VycmVudCBkb2N1bWVudFxuICogQHBhcmFtIHtFbGVtZW50fE9iamVjdH0gW2RvY10gQW4gZWxlbWVudCBvciBkb2N1bWVudCBvYmplY3QgdG8gdXNlIHRvIHNldCB0aGUgZG9jdW1lbnRcbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGN1cnJlbnQgZG9jdW1lbnRcbiAqL1xuc2V0RG9jdW1lbnQgPSBTaXp6bGUuc2V0RG9jdW1lbnQgPSBmdW5jdGlvbiggbm9kZSApIHtcblx0dmFyIGhhc0NvbXBhcmUsIHN1YldpbmRvdyxcblx0XHRkb2MgPSBub2RlID8gbm9kZS5vd25lckRvY3VtZW50IHx8IG5vZGUgOiBwcmVmZXJyZWREb2M7XG5cblx0Ly8gUmV0dXJuIGVhcmx5IGlmIGRvYyBpcyBpbnZhbGlkIG9yIGFscmVhZHkgc2VsZWN0ZWRcblx0aWYgKCBkb2MgPT09IGRvY3VtZW50IHx8IGRvYy5ub2RlVHlwZSAhPT0gOSB8fCAhZG9jLmRvY3VtZW50RWxlbWVudCApIHtcblx0XHRyZXR1cm4gZG9jdW1lbnQ7XG5cdH1cblxuXHQvLyBVcGRhdGUgZ2xvYmFsIHZhcmlhYmxlc1xuXHRkb2N1bWVudCA9IGRvYztcblx0ZG9jRWxlbSA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcblx0ZG9jdW1lbnRJc0hUTUwgPSAhaXNYTUwoIGRvY3VtZW50ICk7XG5cblx0Ly8gU3VwcG9ydDogSUUgOS0xMSwgRWRnZVxuXHQvLyBBY2Nlc3NpbmcgaWZyYW1lIGRvY3VtZW50cyBhZnRlciB1bmxvYWQgdGhyb3dzIFwicGVybWlzc2lvbiBkZW5pZWRcIiBlcnJvcnMgKGpRdWVyeSAjMTM5MzYpXG5cdGlmICggcHJlZmVycmVkRG9jICE9PSBkb2N1bWVudCAmJlxuXHRcdChzdWJXaW5kb3cgPSBkb2N1bWVudC5kZWZhdWx0VmlldykgJiYgc3ViV2luZG93LnRvcCAhPT0gc3ViV2luZG93ICkge1xuXG5cdFx0Ly8gU3VwcG9ydDogSUUgMTEsIEVkZ2Vcblx0XHRpZiAoIHN1YldpbmRvdy5hZGRFdmVudExpc3RlbmVyICkge1xuXHRcdFx0c3ViV2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIFwidW5sb2FkXCIsIHVubG9hZEhhbmRsZXIsIGZhbHNlICk7XG5cblx0XHQvLyBTdXBwb3J0OiBJRSA5IC0gMTAgb25seVxuXHRcdH0gZWxzZSBpZiAoIHN1YldpbmRvdy5hdHRhY2hFdmVudCApIHtcblx0XHRcdHN1YldpbmRvdy5hdHRhY2hFdmVudCggXCJvbnVubG9hZFwiLCB1bmxvYWRIYW5kbGVyICk7XG5cdFx0fVxuXHR9XG5cblx0LyogQXR0cmlidXRlc1xuXHQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cblx0Ly8gU3VwcG9ydDogSUU8OFxuXHQvLyBWZXJpZnkgdGhhdCBnZXRBdHRyaWJ1dGUgcmVhbGx5IHJldHVybnMgYXR0cmlidXRlcyBhbmQgbm90IHByb3BlcnRpZXNcblx0Ly8gKGV4Y2VwdGluZyBJRTggYm9vbGVhbnMpXG5cdHN1cHBvcnQuYXR0cmlidXRlcyA9IGFzc2VydChmdW5jdGlvbiggZWwgKSB7XG5cdFx0ZWwuY2xhc3NOYW1lID0gXCJpXCI7XG5cdFx0cmV0dXJuICFlbC5nZXRBdHRyaWJ1dGUoXCJjbGFzc05hbWVcIik7XG5cdH0pO1xuXG5cdC8qIGdldEVsZW1lbnQocylCeSpcblx0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG5cdC8vIENoZWNrIGlmIGdldEVsZW1lbnRzQnlUYWdOYW1lKFwiKlwiKSByZXR1cm5zIG9ubHkgZWxlbWVudHNcblx0c3VwcG9ydC5nZXRFbGVtZW50c0J5VGFnTmFtZSA9IGFzc2VydChmdW5jdGlvbiggZWwgKSB7XG5cdFx0ZWwuYXBwZW5kQ2hpbGQoIGRvY3VtZW50LmNyZWF0ZUNvbW1lbnQoXCJcIikgKTtcblx0XHRyZXR1cm4gIWVsLmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiKlwiKS5sZW5ndGg7XG5cdH0pO1xuXG5cdC8vIFN1cHBvcnQ6IElFPDlcblx0c3VwcG9ydC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lID0gcm5hdGl2ZS50ZXN0KCBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lICk7XG5cblx0Ly8gU3VwcG9ydDogSUU8MTBcblx0Ly8gQ2hlY2sgaWYgZ2V0RWxlbWVudEJ5SWQgcmV0dXJucyBlbGVtZW50cyBieSBuYW1lXG5cdC8vIFRoZSBicm9rZW4gZ2V0RWxlbWVudEJ5SWQgbWV0aG9kcyBkb24ndCBwaWNrIHVwIHByb2dyYW1tYXRpY2FsbHktc2V0IG5hbWVzLFxuXHQvLyBzbyB1c2UgYSByb3VuZGFib3V0IGdldEVsZW1lbnRzQnlOYW1lIHRlc3Rcblx0c3VwcG9ydC5nZXRCeUlkID0gYXNzZXJ0KGZ1bmN0aW9uKCBlbCApIHtcblx0XHRkb2NFbGVtLmFwcGVuZENoaWxkKCBlbCApLmlkID0gZXhwYW5kbztcblx0XHRyZXR1cm4gIWRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lIHx8ICFkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZSggZXhwYW5kbyApLmxlbmd0aDtcblx0fSk7XG5cblx0Ly8gSUQgZmlsdGVyIGFuZCBmaW5kXG5cdGlmICggc3VwcG9ydC5nZXRCeUlkICkge1xuXHRcdEV4cHIuZmlsdGVyW1wiSURcIl0gPSBmdW5jdGlvbiggaWQgKSB7XG5cdFx0XHR2YXIgYXR0cklkID0gaWQucmVwbGFjZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKTtcblx0XHRcdHJldHVybiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0cmV0dXJuIGVsZW0uZ2V0QXR0cmlidXRlKFwiaWRcIikgPT09IGF0dHJJZDtcblx0XHRcdH07XG5cdFx0fTtcblx0XHRFeHByLmZpbmRbXCJJRFwiXSA9IGZ1bmN0aW9uKCBpZCwgY29udGV4dCApIHtcblx0XHRcdGlmICggdHlwZW9mIGNvbnRleHQuZ2V0RWxlbWVudEJ5SWQgIT09IFwidW5kZWZpbmVkXCIgJiYgZG9jdW1lbnRJc0hUTUwgKSB7XG5cdFx0XHRcdHZhciBlbGVtID0gY29udGV4dC5nZXRFbGVtZW50QnlJZCggaWQgKTtcblx0XHRcdFx0cmV0dXJuIGVsZW0gPyBbIGVsZW0gXSA6IFtdO1xuXHRcdFx0fVxuXHRcdH07XG5cdH0gZWxzZSB7XG5cdFx0RXhwci5maWx0ZXJbXCJJRFwiXSA9ICBmdW5jdGlvbiggaWQgKSB7XG5cdFx0XHR2YXIgYXR0cklkID0gaWQucmVwbGFjZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKTtcblx0XHRcdHJldHVybiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0dmFyIG5vZGUgPSB0eXBlb2YgZWxlbS5nZXRBdHRyaWJ1dGVOb2RlICE9PSBcInVuZGVmaW5lZFwiICYmXG5cdFx0XHRcdFx0ZWxlbS5nZXRBdHRyaWJ1dGVOb2RlKFwiaWRcIik7XG5cdFx0XHRcdHJldHVybiBub2RlICYmIG5vZGUudmFsdWUgPT09IGF0dHJJZDtcblx0XHRcdH07XG5cdFx0fTtcblxuXHRcdC8vIFN1cHBvcnQ6IElFIDYgLSA3IG9ubHlcblx0XHQvLyBnZXRFbGVtZW50QnlJZCBpcyBub3QgcmVsaWFibGUgYXMgYSBmaW5kIHNob3J0Y3V0XG5cdFx0RXhwci5maW5kW1wiSURcIl0gPSBmdW5jdGlvbiggaWQsIGNvbnRleHQgKSB7XG5cdFx0XHRpZiAoIHR5cGVvZiBjb250ZXh0LmdldEVsZW1lbnRCeUlkICE9PSBcInVuZGVmaW5lZFwiICYmIGRvY3VtZW50SXNIVE1MICkge1xuXHRcdFx0XHR2YXIgbm9kZSwgaSwgZWxlbXMsXG5cdFx0XHRcdFx0ZWxlbSA9IGNvbnRleHQuZ2V0RWxlbWVudEJ5SWQoIGlkICk7XG5cblx0XHRcdFx0aWYgKCBlbGVtICkge1xuXG5cdFx0XHRcdFx0Ly8gVmVyaWZ5IHRoZSBpZCBhdHRyaWJ1dGVcblx0XHRcdFx0XHRub2RlID0gZWxlbS5nZXRBdHRyaWJ1dGVOb2RlKFwiaWRcIik7XG5cdFx0XHRcdFx0aWYgKCBub2RlICYmIG5vZGUudmFsdWUgPT09IGlkICkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIFsgZWxlbSBdO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIEZhbGwgYmFjayBvbiBnZXRFbGVtZW50c0J5TmFtZVxuXHRcdFx0XHRcdGVsZW1zID0gY29udGV4dC5nZXRFbGVtZW50c0J5TmFtZSggaWQgKTtcblx0XHRcdFx0XHRpID0gMDtcblx0XHRcdFx0XHR3aGlsZSAoIChlbGVtID0gZWxlbXNbaSsrXSkgKSB7XG5cdFx0XHRcdFx0XHRub2RlID0gZWxlbS5nZXRBdHRyaWJ1dGVOb2RlKFwiaWRcIik7XG5cdFx0XHRcdFx0XHRpZiAoIG5vZGUgJiYgbm9kZS52YWx1ZSA9PT0gaWQgKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBbIGVsZW0gXTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gW107XG5cdFx0XHR9XG5cdFx0fTtcblx0fVxuXG5cdC8vIFRhZ1xuXHRFeHByLmZpbmRbXCJUQUdcIl0gPSBzdXBwb3J0LmdldEVsZW1lbnRzQnlUYWdOYW1lID9cblx0XHRmdW5jdGlvbiggdGFnLCBjb250ZXh0ICkge1xuXHRcdFx0aWYgKCB0eXBlb2YgY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSAhPT0gXCJ1bmRlZmluZWRcIiApIHtcblx0XHRcdFx0cmV0dXJuIGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIHRhZyApO1xuXG5cdFx0XHQvLyBEb2N1bWVudEZyYWdtZW50IG5vZGVzIGRvbid0IGhhdmUgZ0VCVE5cblx0XHRcdH0gZWxzZSBpZiAoIHN1cHBvcnQucXNhICkge1xuXHRcdFx0XHRyZXR1cm4gY29udGV4dC5xdWVyeVNlbGVjdG9yQWxsKCB0YWcgKTtcblx0XHRcdH1cblx0XHR9IDpcblxuXHRcdGZ1bmN0aW9uKCB0YWcsIGNvbnRleHQgKSB7XG5cdFx0XHR2YXIgZWxlbSxcblx0XHRcdFx0dG1wID0gW10sXG5cdFx0XHRcdGkgPSAwLFxuXHRcdFx0XHQvLyBCeSBoYXBweSBjb2luY2lkZW5jZSwgYSAoYnJva2VuKSBnRUJUTiBhcHBlYXJzIG9uIERvY3VtZW50RnJhZ21lbnQgbm9kZXMgdG9vXG5cdFx0XHRcdHJlc3VsdHMgPSBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lKCB0YWcgKTtcblxuXHRcdFx0Ly8gRmlsdGVyIG91dCBwb3NzaWJsZSBjb21tZW50c1xuXHRcdFx0aWYgKCB0YWcgPT09IFwiKlwiICkge1xuXHRcdFx0XHR3aGlsZSAoIChlbGVtID0gcmVzdWx0c1tpKytdKSApIHtcblx0XHRcdFx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7XG5cdFx0XHRcdFx0XHR0bXAucHVzaCggZWxlbSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiB0bXA7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gcmVzdWx0cztcblx0XHR9O1xuXG5cdC8vIENsYXNzXG5cdEV4cHIuZmluZFtcIkNMQVNTXCJdID0gc3VwcG9ydC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lICYmIGZ1bmN0aW9uKCBjbGFzc05hbWUsIGNvbnRleHQgKSB7XG5cdFx0aWYgKCB0eXBlb2YgY29udGV4dC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lICE9PSBcInVuZGVmaW5lZFwiICYmIGRvY3VtZW50SXNIVE1MICkge1xuXHRcdFx0cmV0dXJuIGNvbnRleHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSggY2xhc3NOYW1lICk7XG5cdFx0fVxuXHR9O1xuXG5cdC8qIFFTQS9tYXRjaGVzU2VsZWN0b3Jcblx0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG5cdC8vIFFTQSBhbmQgbWF0Y2hlc1NlbGVjdG9yIHN1cHBvcnRcblxuXHQvLyBtYXRjaGVzU2VsZWN0b3IoOmFjdGl2ZSkgcmVwb3J0cyBmYWxzZSB3aGVuIHRydWUgKElFOS9PcGVyYSAxMS41KVxuXHRyYnVnZ3lNYXRjaGVzID0gW107XG5cblx0Ly8gcVNhKDpmb2N1cykgcmVwb3J0cyBmYWxzZSB3aGVuIHRydWUgKENocm9tZSAyMSlcblx0Ly8gV2UgYWxsb3cgdGhpcyBiZWNhdXNlIG9mIGEgYnVnIGluIElFOC85IHRoYXQgdGhyb3dzIGFuIGVycm9yXG5cdC8vIHdoZW5ldmVyIGBkb2N1bWVudC5hY3RpdmVFbGVtZW50YCBpcyBhY2Nlc3NlZCBvbiBhbiBpZnJhbWVcblx0Ly8gU28sIHdlIGFsbG93IDpmb2N1cyB0byBwYXNzIHRocm91Z2ggUVNBIGFsbCB0aGUgdGltZSB0byBhdm9pZCB0aGUgSUUgZXJyb3Jcblx0Ly8gU2VlIGh0dHBzOi8vYnVncy5qcXVlcnkuY29tL3RpY2tldC8xMzM3OFxuXHRyYnVnZ3lRU0EgPSBbXTtcblxuXHRpZiAoIChzdXBwb3J0LnFzYSA9IHJuYXRpdmUudGVzdCggZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCApKSApIHtcblx0XHQvLyBCdWlsZCBRU0EgcmVnZXhcblx0XHQvLyBSZWdleCBzdHJhdGVneSBhZG9wdGVkIGZyb20gRGllZ28gUGVyaW5pXG5cdFx0YXNzZXJ0KGZ1bmN0aW9uKCBlbCApIHtcblx0XHRcdC8vIFNlbGVjdCBpcyBzZXQgdG8gZW1wdHkgc3RyaW5nIG9uIHB1cnBvc2Vcblx0XHRcdC8vIFRoaXMgaXMgdG8gdGVzdCBJRSdzIHRyZWF0bWVudCBvZiBub3QgZXhwbGljaXRseVxuXHRcdFx0Ly8gc2V0dGluZyBhIGJvb2xlYW4gY29udGVudCBhdHRyaWJ1dGUsXG5cdFx0XHQvLyBzaW5jZSBpdHMgcHJlc2VuY2Ugc2hvdWxkIGJlIGVub3VnaFxuXHRcdFx0Ly8gaHR0cHM6Ly9idWdzLmpxdWVyeS5jb20vdGlja2V0LzEyMzU5XG5cdFx0XHRkb2NFbGVtLmFwcGVuZENoaWxkKCBlbCApLmlubmVySFRNTCA9IFwiPGEgaWQ9J1wiICsgZXhwYW5kbyArIFwiJz48L2E+XCIgK1xuXHRcdFx0XHRcIjxzZWxlY3QgaWQ9J1wiICsgZXhwYW5kbyArIFwiLVxcclxcXFwnIG1zYWxsb3djYXB0dXJlPScnPlwiICtcblx0XHRcdFx0XCI8b3B0aW9uIHNlbGVjdGVkPScnPjwvb3B0aW9uPjwvc2VsZWN0PlwiO1xuXG5cdFx0XHQvLyBTdXBwb3J0OiBJRTgsIE9wZXJhIDExLTEyLjE2XG5cdFx0XHQvLyBOb3RoaW5nIHNob3VsZCBiZSBzZWxlY3RlZCB3aGVuIGVtcHR5IHN0cmluZ3MgZm9sbG93IF49IG9yICQ9IG9yICo9XG5cdFx0XHQvLyBUaGUgdGVzdCBhdHRyaWJ1dGUgbXVzdCBiZSB1bmtub3duIGluIE9wZXJhIGJ1dCBcInNhZmVcIiBmb3IgV2luUlRcblx0XHRcdC8vIGh0dHBzOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvaWUvaGg0NjUzODguYXNweCNhdHRyaWJ1dGVfc2VjdGlvblxuXHRcdFx0aWYgKCBlbC5xdWVyeVNlbGVjdG9yQWxsKFwiW21zYWxsb3djYXB0dXJlXj0nJ11cIikubGVuZ3RoICkge1xuXHRcdFx0XHRyYnVnZ3lRU0EucHVzaCggXCJbKl4kXT1cIiArIHdoaXRlc3BhY2UgKyBcIiooPzonJ3xcXFwiXFxcIilcIiApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBTdXBwb3J0OiBJRThcblx0XHRcdC8vIEJvb2xlYW4gYXR0cmlidXRlcyBhbmQgXCJ2YWx1ZVwiIGFyZSBub3QgdHJlYXRlZCBjb3JyZWN0bHlcblx0XHRcdGlmICggIWVsLnF1ZXJ5U2VsZWN0b3JBbGwoXCJbc2VsZWN0ZWRdXCIpLmxlbmd0aCApIHtcblx0XHRcdFx0cmJ1Z2d5UVNBLnB1c2goIFwiXFxcXFtcIiArIHdoaXRlc3BhY2UgKyBcIiooPzp2YWx1ZXxcIiArIGJvb2xlYW5zICsgXCIpXCIgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU3VwcG9ydDogQ2hyb21lPDI5LCBBbmRyb2lkPDQuNCwgU2FmYXJpPDcuMCssIGlPUzw3LjArLCBQaGFudG9tSlM8MS45LjgrXG5cdFx0XHRpZiAoICFlbC5xdWVyeVNlbGVjdG9yQWxsKCBcIltpZH49XCIgKyBleHBhbmRvICsgXCItXVwiICkubGVuZ3RoICkge1xuXHRcdFx0XHRyYnVnZ3lRU0EucHVzaChcIn49XCIpO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBXZWJraXQvT3BlcmEgLSA6Y2hlY2tlZCBzaG91bGQgcmV0dXJuIHNlbGVjdGVkIG9wdGlvbiBlbGVtZW50c1xuXHRcdFx0Ly8gaHR0cDovL3d3dy53My5vcmcvVFIvMjAxMS9SRUMtY3NzMy1zZWxlY3RvcnMtMjAxMTA5MjkvI2NoZWNrZWRcblx0XHRcdC8vIElFOCB0aHJvd3MgZXJyb3IgaGVyZSBhbmQgd2lsbCBub3Qgc2VlIGxhdGVyIHRlc3RzXG5cdFx0XHRpZiAoICFlbC5xdWVyeVNlbGVjdG9yQWxsKFwiOmNoZWNrZWRcIikubGVuZ3RoICkge1xuXHRcdFx0XHRyYnVnZ3lRU0EucHVzaChcIjpjaGVja2VkXCIpO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBTdXBwb3J0OiBTYWZhcmkgOCssIGlPUyA4K1xuXHRcdFx0Ly8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNjg1MVxuXHRcdFx0Ly8gSW4tcGFnZSBgc2VsZWN0b3IjaWQgc2libGluZy1jb21iaW5hdG9yIHNlbGVjdG9yYCBmYWlsc1xuXHRcdFx0aWYgKCAhZWwucXVlcnlTZWxlY3RvckFsbCggXCJhI1wiICsgZXhwYW5kbyArIFwiKypcIiApLmxlbmd0aCApIHtcblx0XHRcdFx0cmJ1Z2d5UVNBLnB1c2goXCIuIy4rWyt+XVwiKTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdGFzc2VydChmdW5jdGlvbiggZWwgKSB7XG5cdFx0XHRlbC5pbm5lckhUTUwgPSBcIjxhIGhyZWY9JycgZGlzYWJsZWQ9J2Rpc2FibGVkJz48L2E+XCIgK1xuXHRcdFx0XHRcIjxzZWxlY3QgZGlzYWJsZWQ9J2Rpc2FibGVkJz48b3B0aW9uLz48L3NlbGVjdD5cIjtcblxuXHRcdFx0Ly8gU3VwcG9ydDogV2luZG93cyA4IE5hdGl2ZSBBcHBzXG5cdFx0XHQvLyBUaGUgdHlwZSBhbmQgbmFtZSBhdHRyaWJ1dGVzIGFyZSByZXN0cmljdGVkIGR1cmluZyAuaW5uZXJIVE1MIGFzc2lnbm1lbnRcblx0XHRcdHZhciBpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiKTtcblx0XHRcdGlucHV0LnNldEF0dHJpYnV0ZSggXCJ0eXBlXCIsIFwiaGlkZGVuXCIgKTtcblx0XHRcdGVsLmFwcGVuZENoaWxkKCBpbnB1dCApLnNldEF0dHJpYnV0ZSggXCJuYW1lXCIsIFwiRFwiICk7XG5cblx0XHRcdC8vIFN1cHBvcnQ6IElFOFxuXHRcdFx0Ly8gRW5mb3JjZSBjYXNlLXNlbnNpdGl2aXR5IG9mIG5hbWUgYXR0cmlidXRlXG5cdFx0XHRpZiAoIGVsLnF1ZXJ5U2VsZWN0b3JBbGwoXCJbbmFtZT1kXVwiKS5sZW5ndGggKSB7XG5cdFx0XHRcdHJidWdneVFTQS5wdXNoKCBcIm5hbWVcIiArIHdoaXRlc3BhY2UgKyBcIipbKl4kfCF+XT89XCIgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gRkYgMy41IC0gOmVuYWJsZWQvOmRpc2FibGVkIGFuZCBoaWRkZW4gZWxlbWVudHMgKGhpZGRlbiBlbGVtZW50cyBhcmUgc3RpbGwgZW5hYmxlZClcblx0XHRcdC8vIElFOCB0aHJvd3MgZXJyb3IgaGVyZSBhbmQgd2lsbCBub3Qgc2VlIGxhdGVyIHRlc3RzXG5cdFx0XHRpZiAoIGVsLnF1ZXJ5U2VsZWN0b3JBbGwoXCI6ZW5hYmxlZFwiKS5sZW5ndGggIT09IDIgKSB7XG5cdFx0XHRcdHJidWdneVFTQS5wdXNoKCBcIjplbmFibGVkXCIsIFwiOmRpc2FibGVkXCIgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU3VwcG9ydDogSUU5LTExK1xuXHRcdFx0Ly8gSUUncyA6ZGlzYWJsZWQgc2VsZWN0b3IgZG9lcyBub3QgcGljayB1cCB0aGUgY2hpbGRyZW4gb2YgZGlzYWJsZWQgZmllbGRzZXRzXG5cdFx0XHRkb2NFbGVtLmFwcGVuZENoaWxkKCBlbCApLmRpc2FibGVkID0gdHJ1ZTtcblx0XHRcdGlmICggZWwucXVlcnlTZWxlY3RvckFsbChcIjpkaXNhYmxlZFwiKS5sZW5ndGggIT09IDIgKSB7XG5cdFx0XHRcdHJidWdneVFTQS5wdXNoKCBcIjplbmFibGVkXCIsIFwiOmRpc2FibGVkXCIgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gT3BlcmEgMTAtMTEgZG9lcyBub3QgdGhyb3cgb24gcG9zdC1jb21tYSBpbnZhbGlkIHBzZXVkb3Ncblx0XHRcdGVsLnF1ZXJ5U2VsZWN0b3JBbGwoXCIqLDp4XCIpO1xuXHRcdFx0cmJ1Z2d5UVNBLnB1c2goXCIsLio6XCIpO1xuXHRcdH0pO1xuXHR9XG5cblx0aWYgKCAoc3VwcG9ydC5tYXRjaGVzU2VsZWN0b3IgPSBybmF0aXZlLnRlc3QoIChtYXRjaGVzID0gZG9jRWxlbS5tYXRjaGVzIHx8XG5cdFx0ZG9jRWxlbS53ZWJraXRNYXRjaGVzU2VsZWN0b3IgfHxcblx0XHRkb2NFbGVtLm1vek1hdGNoZXNTZWxlY3RvciB8fFxuXHRcdGRvY0VsZW0ub01hdGNoZXNTZWxlY3RvciB8fFxuXHRcdGRvY0VsZW0ubXNNYXRjaGVzU2VsZWN0b3IpICkpICkge1xuXG5cdFx0YXNzZXJ0KGZ1bmN0aW9uKCBlbCApIHtcblx0XHRcdC8vIENoZWNrIHRvIHNlZSBpZiBpdCdzIHBvc3NpYmxlIHRvIGRvIG1hdGNoZXNTZWxlY3RvclxuXHRcdFx0Ly8gb24gYSBkaXNjb25uZWN0ZWQgbm9kZSAoSUUgOSlcblx0XHRcdHN1cHBvcnQuZGlzY29ubmVjdGVkTWF0Y2ggPSBtYXRjaGVzLmNhbGwoIGVsLCBcIipcIiApO1xuXG5cdFx0XHQvLyBUaGlzIHNob3VsZCBmYWlsIHdpdGggYW4gZXhjZXB0aW9uXG5cdFx0XHQvLyBHZWNrbyBkb2VzIG5vdCBlcnJvciwgcmV0dXJucyBmYWxzZSBpbnN0ZWFkXG5cdFx0XHRtYXRjaGVzLmNhbGwoIGVsLCBcIltzIT0nJ106eFwiICk7XG5cdFx0XHRyYnVnZ3lNYXRjaGVzLnB1c2goIFwiIT1cIiwgcHNldWRvcyApO1xuXHRcdH0pO1xuXHR9XG5cblx0cmJ1Z2d5UVNBID0gcmJ1Z2d5UVNBLmxlbmd0aCAmJiBuZXcgUmVnRXhwKCByYnVnZ3lRU0Euam9pbihcInxcIikgKTtcblx0cmJ1Z2d5TWF0Y2hlcyA9IHJidWdneU1hdGNoZXMubGVuZ3RoICYmIG5ldyBSZWdFeHAoIHJidWdneU1hdGNoZXMuam9pbihcInxcIikgKTtcblxuXHQvKiBDb250YWluc1xuXHQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cdGhhc0NvbXBhcmUgPSBybmF0aXZlLnRlc3QoIGRvY0VsZW0uY29tcGFyZURvY3VtZW50UG9zaXRpb24gKTtcblxuXHQvLyBFbGVtZW50IGNvbnRhaW5zIGFub3RoZXJcblx0Ly8gUHVycG9zZWZ1bGx5IHNlbGYtZXhjbHVzaXZlXG5cdC8vIEFzIGluLCBhbiBlbGVtZW50IGRvZXMgbm90IGNvbnRhaW4gaXRzZWxmXG5cdGNvbnRhaW5zID0gaGFzQ29tcGFyZSB8fCBybmF0aXZlLnRlc3QoIGRvY0VsZW0uY29udGFpbnMgKSA/XG5cdFx0ZnVuY3Rpb24oIGEsIGIgKSB7XG5cdFx0XHR2YXIgYWRvd24gPSBhLm5vZGVUeXBlID09PSA5ID8gYS5kb2N1bWVudEVsZW1lbnQgOiBhLFxuXHRcdFx0XHRidXAgPSBiICYmIGIucGFyZW50Tm9kZTtcblx0XHRcdHJldHVybiBhID09PSBidXAgfHwgISEoIGJ1cCAmJiBidXAubm9kZVR5cGUgPT09IDEgJiYgKFxuXHRcdFx0XHRhZG93bi5jb250YWlucyA/XG5cdFx0XHRcdFx0YWRvd24uY29udGFpbnMoIGJ1cCApIDpcblx0XHRcdFx0XHRhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uICYmIGEuY29tcGFyZURvY3VtZW50UG9zaXRpb24oIGJ1cCApICYgMTZcblx0XHRcdCkpO1xuXHRcdH0gOlxuXHRcdGZ1bmN0aW9uKCBhLCBiICkge1xuXHRcdFx0aWYgKCBiICkge1xuXHRcdFx0XHR3aGlsZSAoIChiID0gYi5wYXJlbnROb2RlKSApIHtcblx0XHRcdFx0XHRpZiAoIGIgPT09IGEgKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9O1xuXG5cdC8qIFNvcnRpbmdcblx0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG5cdC8vIERvY3VtZW50IG9yZGVyIHNvcnRpbmdcblx0c29ydE9yZGVyID0gaGFzQ29tcGFyZSA/XG5cdGZ1bmN0aW9uKCBhLCBiICkge1xuXG5cdFx0Ly8gRmxhZyBmb3IgZHVwbGljYXRlIHJlbW92YWxcblx0XHRpZiAoIGEgPT09IGIgKSB7XG5cdFx0XHRoYXNEdXBsaWNhdGUgPSB0cnVlO1xuXHRcdFx0cmV0dXJuIDA7XG5cdFx0fVxuXG5cdFx0Ly8gU29ydCBvbiBtZXRob2QgZXhpc3RlbmNlIGlmIG9ubHkgb25lIGlucHV0IGhhcyBjb21wYXJlRG9jdW1lbnRQb3NpdGlvblxuXHRcdHZhciBjb21wYXJlID0gIWEuY29tcGFyZURvY3VtZW50UG9zaXRpb24gLSAhYi5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbjtcblx0XHRpZiAoIGNvbXBhcmUgKSB7XG5cdFx0XHRyZXR1cm4gY29tcGFyZTtcblx0XHR9XG5cblx0XHQvLyBDYWxjdWxhdGUgcG9zaXRpb24gaWYgYm90aCBpbnB1dHMgYmVsb25nIHRvIHRoZSBzYW1lIGRvY3VtZW50XG5cdFx0Y29tcGFyZSA9ICggYS5vd25lckRvY3VtZW50IHx8IGEgKSA9PT0gKCBiLm93bmVyRG9jdW1lbnQgfHwgYiApID9cblx0XHRcdGEuY29tcGFyZURvY3VtZW50UG9zaXRpb24oIGIgKSA6XG5cblx0XHRcdC8vIE90aGVyd2lzZSB3ZSBrbm93IHRoZXkgYXJlIGRpc2Nvbm5lY3RlZFxuXHRcdFx0MTtcblxuXHRcdC8vIERpc2Nvbm5lY3RlZCBub2Rlc1xuXHRcdGlmICggY29tcGFyZSAmIDEgfHxcblx0XHRcdCghc3VwcG9ydC5zb3J0RGV0YWNoZWQgJiYgYi5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiggYSApID09PSBjb21wYXJlKSApIHtcblxuXHRcdFx0Ly8gQ2hvb3NlIHRoZSBmaXJzdCBlbGVtZW50IHRoYXQgaXMgcmVsYXRlZCB0byBvdXIgcHJlZmVycmVkIGRvY3VtZW50XG5cdFx0XHRpZiAoIGEgPT09IGRvY3VtZW50IHx8IGEub3duZXJEb2N1bWVudCA9PT0gcHJlZmVycmVkRG9jICYmIGNvbnRhaW5zKHByZWZlcnJlZERvYywgYSkgKSB7XG5cdFx0XHRcdHJldHVybiAtMTtcblx0XHRcdH1cblx0XHRcdGlmICggYiA9PT0gZG9jdW1lbnQgfHwgYi5vd25lckRvY3VtZW50ID09PSBwcmVmZXJyZWREb2MgJiYgY29udGFpbnMocHJlZmVycmVkRG9jLCBiKSApIHtcblx0XHRcdFx0cmV0dXJuIDE7XG5cdFx0XHR9XG5cblx0XHRcdC8vIE1haW50YWluIG9yaWdpbmFsIG9yZGVyXG5cdFx0XHRyZXR1cm4gc29ydElucHV0ID9cblx0XHRcdFx0KCBpbmRleE9mKCBzb3J0SW5wdXQsIGEgKSAtIGluZGV4T2YoIHNvcnRJbnB1dCwgYiApICkgOlxuXHRcdFx0XHQwO1xuXHRcdH1cblxuXHRcdHJldHVybiBjb21wYXJlICYgNCA/IC0xIDogMTtcblx0fSA6XG5cdGZ1bmN0aW9uKCBhLCBiICkge1xuXHRcdC8vIEV4aXQgZWFybHkgaWYgdGhlIG5vZGVzIGFyZSBpZGVudGljYWxcblx0XHRpZiAoIGEgPT09IGIgKSB7XG5cdFx0XHRoYXNEdXBsaWNhdGUgPSB0cnVlO1xuXHRcdFx0cmV0dXJuIDA7XG5cdFx0fVxuXG5cdFx0dmFyIGN1cixcblx0XHRcdGkgPSAwLFxuXHRcdFx0YXVwID0gYS5wYXJlbnROb2RlLFxuXHRcdFx0YnVwID0gYi5wYXJlbnROb2RlLFxuXHRcdFx0YXAgPSBbIGEgXSxcblx0XHRcdGJwID0gWyBiIF07XG5cblx0XHQvLyBQYXJlbnRsZXNzIG5vZGVzIGFyZSBlaXRoZXIgZG9jdW1lbnRzIG9yIGRpc2Nvbm5lY3RlZFxuXHRcdGlmICggIWF1cCB8fCAhYnVwICkge1xuXHRcdFx0cmV0dXJuIGEgPT09IGRvY3VtZW50ID8gLTEgOlxuXHRcdFx0XHRiID09PSBkb2N1bWVudCA/IDEgOlxuXHRcdFx0XHRhdXAgPyAtMSA6XG5cdFx0XHRcdGJ1cCA/IDEgOlxuXHRcdFx0XHRzb3J0SW5wdXQgP1xuXHRcdFx0XHQoIGluZGV4T2YoIHNvcnRJbnB1dCwgYSApIC0gaW5kZXhPZiggc29ydElucHV0LCBiICkgKSA6XG5cdFx0XHRcdDA7XG5cblx0XHQvLyBJZiB0aGUgbm9kZXMgYXJlIHNpYmxpbmdzLCB3ZSBjYW4gZG8gYSBxdWljayBjaGVja1xuXHRcdH0gZWxzZSBpZiAoIGF1cCA9PT0gYnVwICkge1xuXHRcdFx0cmV0dXJuIHNpYmxpbmdDaGVjayggYSwgYiApO1xuXHRcdH1cblxuXHRcdC8vIE90aGVyd2lzZSB3ZSBuZWVkIGZ1bGwgbGlzdHMgb2YgdGhlaXIgYW5jZXN0b3JzIGZvciBjb21wYXJpc29uXG5cdFx0Y3VyID0gYTtcblx0XHR3aGlsZSAoIChjdXIgPSBjdXIucGFyZW50Tm9kZSkgKSB7XG5cdFx0XHRhcC51bnNoaWZ0KCBjdXIgKTtcblx0XHR9XG5cdFx0Y3VyID0gYjtcblx0XHR3aGlsZSAoIChjdXIgPSBjdXIucGFyZW50Tm9kZSkgKSB7XG5cdFx0XHRicC51bnNoaWZ0KCBjdXIgKTtcblx0XHR9XG5cblx0XHQvLyBXYWxrIGRvd24gdGhlIHRyZWUgbG9va2luZyBmb3IgYSBkaXNjcmVwYW5jeVxuXHRcdHdoaWxlICggYXBbaV0gPT09IGJwW2ldICkge1xuXHRcdFx0aSsrO1xuXHRcdH1cblxuXHRcdHJldHVybiBpID9cblx0XHRcdC8vIERvIGEgc2libGluZyBjaGVjayBpZiB0aGUgbm9kZXMgaGF2ZSBhIGNvbW1vbiBhbmNlc3RvclxuXHRcdFx0c2libGluZ0NoZWNrKCBhcFtpXSwgYnBbaV0gKSA6XG5cblx0XHRcdC8vIE90aGVyd2lzZSBub2RlcyBpbiBvdXIgZG9jdW1lbnQgc29ydCBmaXJzdFxuXHRcdFx0YXBbaV0gPT09IHByZWZlcnJlZERvYyA/IC0xIDpcblx0XHRcdGJwW2ldID09PSBwcmVmZXJyZWREb2MgPyAxIDpcblx0XHRcdDA7XG5cdH07XG5cblx0cmV0dXJuIGRvY3VtZW50O1xufTtcblxuU2l6emxlLm1hdGNoZXMgPSBmdW5jdGlvbiggZXhwciwgZWxlbWVudHMgKSB7XG5cdHJldHVybiBTaXp6bGUoIGV4cHIsIG51bGwsIG51bGwsIGVsZW1lbnRzICk7XG59O1xuXG5TaXp6bGUubWF0Y2hlc1NlbGVjdG9yID0gZnVuY3Rpb24oIGVsZW0sIGV4cHIgKSB7XG5cdC8vIFNldCBkb2N1bWVudCB2YXJzIGlmIG5lZWRlZFxuXHRpZiAoICggZWxlbS5vd25lckRvY3VtZW50IHx8IGVsZW0gKSAhPT0gZG9jdW1lbnQgKSB7XG5cdFx0c2V0RG9jdW1lbnQoIGVsZW0gKTtcblx0fVxuXG5cdGlmICggc3VwcG9ydC5tYXRjaGVzU2VsZWN0b3IgJiYgZG9jdW1lbnRJc0hUTUwgJiZcblx0XHQhbm9ubmF0aXZlU2VsZWN0b3JDYWNoZVsgZXhwciArIFwiIFwiIF0gJiZcblx0XHQoICFyYnVnZ3lNYXRjaGVzIHx8ICFyYnVnZ3lNYXRjaGVzLnRlc3QoIGV4cHIgKSApICYmXG5cdFx0KCAhcmJ1Z2d5UVNBICAgICB8fCAhcmJ1Z2d5UVNBLnRlc3QoIGV4cHIgKSApICkge1xuXG5cdFx0dHJ5IHtcblx0XHRcdHZhciByZXQgPSBtYXRjaGVzLmNhbGwoIGVsZW0sIGV4cHIgKTtcblxuXHRcdFx0Ly8gSUUgOSdzIG1hdGNoZXNTZWxlY3RvciByZXR1cm5zIGZhbHNlIG9uIGRpc2Nvbm5lY3RlZCBub2Rlc1xuXHRcdFx0aWYgKCByZXQgfHwgc3VwcG9ydC5kaXNjb25uZWN0ZWRNYXRjaCB8fFxuXHRcdFx0XHRcdC8vIEFzIHdlbGwsIGRpc2Nvbm5lY3RlZCBub2RlcyBhcmUgc2FpZCB0byBiZSBpbiBhIGRvY3VtZW50XG5cdFx0XHRcdFx0Ly8gZnJhZ21lbnQgaW4gSUUgOVxuXHRcdFx0XHRcdGVsZW0uZG9jdW1lbnQgJiYgZWxlbS5kb2N1bWVudC5ub2RlVHlwZSAhPT0gMTEgKSB7XG5cdFx0XHRcdHJldHVybiByZXQ7XG5cdFx0XHR9XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0bm9ubmF0aXZlU2VsZWN0b3JDYWNoZSggZXhwciwgdHJ1ZSApO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBTaXp6bGUoIGV4cHIsIGRvY3VtZW50LCBudWxsLCBbIGVsZW0gXSApLmxlbmd0aCA+IDA7XG59O1xuXG5TaXp6bGUuY29udGFpbnMgPSBmdW5jdGlvbiggY29udGV4dCwgZWxlbSApIHtcblx0Ly8gU2V0IGRvY3VtZW50IHZhcnMgaWYgbmVlZGVkXG5cdGlmICggKCBjb250ZXh0Lm93bmVyRG9jdW1lbnQgfHwgY29udGV4dCApICE9PSBkb2N1bWVudCApIHtcblx0XHRzZXREb2N1bWVudCggY29udGV4dCApO1xuXHR9XG5cdHJldHVybiBjb250YWlucyggY29udGV4dCwgZWxlbSApO1xufTtcblxuU2l6emxlLmF0dHIgPSBmdW5jdGlvbiggZWxlbSwgbmFtZSApIHtcblx0Ly8gU2V0IGRvY3VtZW50IHZhcnMgaWYgbmVlZGVkXG5cdGlmICggKCBlbGVtLm93bmVyRG9jdW1lbnQgfHwgZWxlbSApICE9PSBkb2N1bWVudCApIHtcblx0XHRzZXREb2N1bWVudCggZWxlbSApO1xuXHR9XG5cblx0dmFyIGZuID0gRXhwci5hdHRySGFuZGxlWyBuYW1lLnRvTG93ZXJDYXNlKCkgXSxcblx0XHQvLyBEb24ndCBnZXQgZm9vbGVkIGJ5IE9iamVjdC5wcm90b3R5cGUgcHJvcGVydGllcyAoalF1ZXJ5ICMxMzgwNylcblx0XHR2YWwgPSBmbiAmJiBoYXNPd24uY2FsbCggRXhwci5hdHRySGFuZGxlLCBuYW1lLnRvTG93ZXJDYXNlKCkgKSA/XG5cdFx0XHRmbiggZWxlbSwgbmFtZSwgIWRvY3VtZW50SXNIVE1MICkgOlxuXHRcdFx0dW5kZWZpbmVkO1xuXG5cdHJldHVybiB2YWwgIT09IHVuZGVmaW5lZCA/XG5cdFx0dmFsIDpcblx0XHRzdXBwb3J0LmF0dHJpYnV0ZXMgfHwgIWRvY3VtZW50SXNIVE1MID9cblx0XHRcdGVsZW0uZ2V0QXR0cmlidXRlKCBuYW1lICkgOlxuXHRcdFx0KHZhbCA9IGVsZW0uZ2V0QXR0cmlidXRlTm9kZShuYW1lKSkgJiYgdmFsLnNwZWNpZmllZCA/XG5cdFx0XHRcdHZhbC52YWx1ZSA6XG5cdFx0XHRcdG51bGw7XG59O1xuXG5TaXp6bGUuZXNjYXBlID0gZnVuY3Rpb24oIHNlbCApIHtcblx0cmV0dXJuIChzZWwgKyBcIlwiKS5yZXBsYWNlKCByY3NzZXNjYXBlLCBmY3NzZXNjYXBlICk7XG59O1xuXG5TaXp6bGUuZXJyb3IgPSBmdW5jdGlvbiggbXNnICkge1xuXHR0aHJvdyBuZXcgRXJyb3IoIFwiU3ludGF4IGVycm9yLCB1bnJlY29nbml6ZWQgZXhwcmVzc2lvbjogXCIgKyBtc2cgKTtcbn07XG5cbi8qKlxuICogRG9jdW1lbnQgc29ydGluZyBhbmQgcmVtb3ZpbmcgZHVwbGljYXRlc1xuICogQHBhcmFtIHtBcnJheUxpa2V9IHJlc3VsdHNcbiAqL1xuU2l6emxlLnVuaXF1ZVNvcnQgPSBmdW5jdGlvbiggcmVzdWx0cyApIHtcblx0dmFyIGVsZW0sXG5cdFx0ZHVwbGljYXRlcyA9IFtdLFxuXHRcdGogPSAwLFxuXHRcdGkgPSAwO1xuXG5cdC8vIFVubGVzcyB3ZSAqa25vdyogd2UgY2FuIGRldGVjdCBkdXBsaWNhdGVzLCBhc3N1bWUgdGhlaXIgcHJlc2VuY2Vcblx0aGFzRHVwbGljYXRlID0gIXN1cHBvcnQuZGV0ZWN0RHVwbGljYXRlcztcblx0c29ydElucHV0ID0gIXN1cHBvcnQuc29ydFN0YWJsZSAmJiByZXN1bHRzLnNsaWNlKCAwICk7XG5cdHJlc3VsdHMuc29ydCggc29ydE9yZGVyICk7XG5cblx0aWYgKCBoYXNEdXBsaWNhdGUgKSB7XG5cdFx0d2hpbGUgKCAoZWxlbSA9IHJlc3VsdHNbaSsrXSkgKSB7XG5cdFx0XHRpZiAoIGVsZW0gPT09IHJlc3VsdHNbIGkgXSApIHtcblx0XHRcdFx0aiA9IGR1cGxpY2F0ZXMucHVzaCggaSApO1xuXHRcdFx0fVxuXHRcdH1cblx0XHR3aGlsZSAoIGotLSApIHtcblx0XHRcdHJlc3VsdHMuc3BsaWNlKCBkdXBsaWNhdGVzWyBqIF0sIDEgKTtcblx0XHR9XG5cdH1cblxuXHQvLyBDbGVhciBpbnB1dCBhZnRlciBzb3J0aW5nIHRvIHJlbGVhc2Ugb2JqZWN0c1xuXHQvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2pxdWVyeS9zaXp6bGUvcHVsbC8yMjVcblx0c29ydElucHV0ID0gbnVsbDtcblxuXHRyZXR1cm4gcmVzdWx0cztcbn07XG5cbi8qKlxuICogVXRpbGl0eSBmdW5jdGlvbiBmb3IgcmV0cmlldmluZyB0aGUgdGV4dCB2YWx1ZSBvZiBhbiBhcnJheSBvZiBET00gbm9kZXNcbiAqIEBwYXJhbSB7QXJyYXl8RWxlbWVudH0gZWxlbVxuICovXG5nZXRUZXh0ID0gU2l6emxlLmdldFRleHQgPSBmdW5jdGlvbiggZWxlbSApIHtcblx0dmFyIG5vZGUsXG5cdFx0cmV0ID0gXCJcIixcblx0XHRpID0gMCxcblx0XHRub2RlVHlwZSA9IGVsZW0ubm9kZVR5cGU7XG5cblx0aWYgKCAhbm9kZVR5cGUgKSB7XG5cdFx0Ly8gSWYgbm8gbm9kZVR5cGUsIHRoaXMgaXMgZXhwZWN0ZWQgdG8gYmUgYW4gYXJyYXlcblx0XHR3aGlsZSAoIChub2RlID0gZWxlbVtpKytdKSApIHtcblx0XHRcdC8vIERvIG5vdCB0cmF2ZXJzZSBjb21tZW50IG5vZGVzXG5cdFx0XHRyZXQgKz0gZ2V0VGV4dCggbm9kZSApO1xuXHRcdH1cblx0fSBlbHNlIGlmICggbm9kZVR5cGUgPT09IDEgfHwgbm9kZVR5cGUgPT09IDkgfHwgbm9kZVR5cGUgPT09IDExICkge1xuXHRcdC8vIFVzZSB0ZXh0Q29udGVudCBmb3IgZWxlbWVudHNcblx0XHQvLyBpbm5lclRleHQgdXNhZ2UgcmVtb3ZlZCBmb3IgY29uc2lzdGVuY3kgb2YgbmV3IGxpbmVzIChqUXVlcnkgIzExMTUzKVxuXHRcdGlmICggdHlwZW9mIGVsZW0udGV4dENvbnRlbnQgPT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRyZXR1cm4gZWxlbS50ZXh0Q29udGVudDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gVHJhdmVyc2UgaXRzIGNoaWxkcmVuXG5cdFx0XHRmb3IgKCBlbGVtID0gZWxlbS5maXJzdENoaWxkOyBlbGVtOyBlbGVtID0gZWxlbS5uZXh0U2libGluZyApIHtcblx0XHRcdFx0cmV0ICs9IGdldFRleHQoIGVsZW0gKTtcblx0XHRcdH1cblx0XHR9XG5cdH0gZWxzZSBpZiAoIG5vZGVUeXBlID09PSAzIHx8IG5vZGVUeXBlID09PSA0ICkge1xuXHRcdHJldHVybiBlbGVtLm5vZGVWYWx1ZTtcblx0fVxuXHQvLyBEbyBub3QgaW5jbHVkZSBjb21tZW50IG9yIHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb24gbm9kZXNcblxuXHRyZXR1cm4gcmV0O1xufTtcblxuRXhwciA9IFNpenpsZS5zZWxlY3RvcnMgPSB7XG5cblx0Ly8gQ2FuIGJlIGFkanVzdGVkIGJ5IHRoZSB1c2VyXG5cdGNhY2hlTGVuZ3RoOiA1MCxcblxuXHRjcmVhdGVQc2V1ZG86IG1hcmtGdW5jdGlvbixcblxuXHRtYXRjaDogbWF0Y2hFeHByLFxuXG5cdGF0dHJIYW5kbGU6IHt9LFxuXG5cdGZpbmQ6IHt9LFxuXG5cdHJlbGF0aXZlOiB7XG5cdFx0XCI+XCI6IHsgZGlyOiBcInBhcmVudE5vZGVcIiwgZmlyc3Q6IHRydWUgfSxcblx0XHRcIiBcIjogeyBkaXI6IFwicGFyZW50Tm9kZVwiIH0sXG5cdFx0XCIrXCI6IHsgZGlyOiBcInByZXZpb3VzU2libGluZ1wiLCBmaXJzdDogdHJ1ZSB9LFxuXHRcdFwiflwiOiB7IGRpcjogXCJwcmV2aW91c1NpYmxpbmdcIiB9XG5cdH0sXG5cblx0cHJlRmlsdGVyOiB7XG5cdFx0XCJBVFRSXCI6IGZ1bmN0aW9uKCBtYXRjaCApIHtcblx0XHRcdG1hdGNoWzFdID0gbWF0Y2hbMV0ucmVwbGFjZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKTtcblxuXHRcdFx0Ly8gTW92ZSB0aGUgZ2l2ZW4gdmFsdWUgdG8gbWF0Y2hbM10gd2hldGhlciBxdW90ZWQgb3IgdW5xdW90ZWRcblx0XHRcdG1hdGNoWzNdID0gKCBtYXRjaFszXSB8fCBtYXRjaFs0XSB8fCBtYXRjaFs1XSB8fCBcIlwiICkucmVwbGFjZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKTtcblxuXHRcdFx0aWYgKCBtYXRjaFsyXSA9PT0gXCJ+PVwiICkge1xuXHRcdFx0XHRtYXRjaFszXSA9IFwiIFwiICsgbWF0Y2hbM10gKyBcIiBcIjtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIG1hdGNoLnNsaWNlKCAwLCA0ICk7XG5cdFx0fSxcblxuXHRcdFwiQ0hJTERcIjogZnVuY3Rpb24oIG1hdGNoICkge1xuXHRcdFx0LyogbWF0Y2hlcyBmcm9tIG1hdGNoRXhwcltcIkNISUxEXCJdXG5cdFx0XHRcdDEgdHlwZSAob25seXxudGh8Li4uKVxuXHRcdFx0XHQyIHdoYXQgKGNoaWxkfG9mLXR5cGUpXG5cdFx0XHRcdDMgYXJndW1lbnQgKGV2ZW58b2RkfFxcZCp8XFxkKm4oWystXVxcZCspP3wuLi4pXG5cdFx0XHRcdDQgeG4tY29tcG9uZW50IG9mIHhuK3kgYXJndW1lbnQgKFsrLV0/XFxkKm58KVxuXHRcdFx0XHQ1IHNpZ24gb2YgeG4tY29tcG9uZW50XG5cdFx0XHRcdDYgeCBvZiB4bi1jb21wb25lbnRcblx0XHRcdFx0NyBzaWduIG9mIHktY29tcG9uZW50XG5cdFx0XHRcdDggeSBvZiB5LWNvbXBvbmVudFxuXHRcdFx0Ki9cblx0XHRcdG1hdGNoWzFdID0gbWF0Y2hbMV0udG9Mb3dlckNhc2UoKTtcblxuXHRcdFx0aWYgKCBtYXRjaFsxXS5zbGljZSggMCwgMyApID09PSBcIm50aFwiICkge1xuXHRcdFx0XHQvLyBudGgtKiByZXF1aXJlcyBhcmd1bWVudFxuXHRcdFx0XHRpZiAoICFtYXRjaFszXSApIHtcblx0XHRcdFx0XHRTaXp6bGUuZXJyb3IoIG1hdGNoWzBdICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBudW1lcmljIHggYW5kIHkgcGFyYW1ldGVycyBmb3IgRXhwci5maWx0ZXIuQ0hJTERcblx0XHRcdFx0Ly8gcmVtZW1iZXIgdGhhdCBmYWxzZS90cnVlIGNhc3QgcmVzcGVjdGl2ZWx5IHRvIDAvMVxuXHRcdFx0XHRtYXRjaFs0XSA9ICsoIG1hdGNoWzRdID8gbWF0Y2hbNV0gKyAobWF0Y2hbNl0gfHwgMSkgOiAyICogKCBtYXRjaFszXSA9PT0gXCJldmVuXCIgfHwgbWF0Y2hbM10gPT09IFwib2RkXCIgKSApO1xuXHRcdFx0XHRtYXRjaFs1XSA9ICsoICggbWF0Y2hbN10gKyBtYXRjaFs4XSApIHx8IG1hdGNoWzNdID09PSBcIm9kZFwiICk7XG5cblx0XHRcdC8vIG90aGVyIHR5cGVzIHByb2hpYml0IGFyZ3VtZW50c1xuXHRcdFx0fSBlbHNlIGlmICggbWF0Y2hbM10gKSB7XG5cdFx0XHRcdFNpenpsZS5lcnJvciggbWF0Y2hbMF0gKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIG1hdGNoO1xuXHRcdH0sXG5cblx0XHRcIlBTRVVET1wiOiBmdW5jdGlvbiggbWF0Y2ggKSB7XG5cdFx0XHR2YXIgZXhjZXNzLFxuXHRcdFx0XHR1bnF1b3RlZCA9ICFtYXRjaFs2XSAmJiBtYXRjaFsyXTtcblxuXHRcdFx0aWYgKCBtYXRjaEV4cHJbXCJDSElMRFwiXS50ZXN0KCBtYXRjaFswXSApICkge1xuXHRcdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQWNjZXB0IHF1b3RlZCBhcmd1bWVudHMgYXMtaXNcblx0XHRcdGlmICggbWF0Y2hbM10gKSB7XG5cdFx0XHRcdG1hdGNoWzJdID0gbWF0Y2hbNF0gfHwgbWF0Y2hbNV0gfHwgXCJcIjtcblxuXHRcdFx0Ly8gU3RyaXAgZXhjZXNzIGNoYXJhY3RlcnMgZnJvbSB1bnF1b3RlZCBhcmd1bWVudHNcblx0XHRcdH0gZWxzZSBpZiAoIHVucXVvdGVkICYmIHJwc2V1ZG8udGVzdCggdW5xdW90ZWQgKSAmJlxuXHRcdFx0XHQvLyBHZXQgZXhjZXNzIGZyb20gdG9rZW5pemUgKHJlY3Vyc2l2ZWx5KVxuXHRcdFx0XHQoZXhjZXNzID0gdG9rZW5pemUoIHVucXVvdGVkLCB0cnVlICkpICYmXG5cdFx0XHRcdC8vIGFkdmFuY2UgdG8gdGhlIG5leHQgY2xvc2luZyBwYXJlbnRoZXNpc1xuXHRcdFx0XHQoZXhjZXNzID0gdW5xdW90ZWQuaW5kZXhPZiggXCIpXCIsIHVucXVvdGVkLmxlbmd0aCAtIGV4Y2VzcyApIC0gdW5xdW90ZWQubGVuZ3RoKSApIHtcblxuXHRcdFx0XHQvLyBleGNlc3MgaXMgYSBuZWdhdGl2ZSBpbmRleFxuXHRcdFx0XHRtYXRjaFswXSA9IG1hdGNoWzBdLnNsaWNlKCAwLCBleGNlc3MgKTtcblx0XHRcdFx0bWF0Y2hbMl0gPSB1bnF1b3RlZC5zbGljZSggMCwgZXhjZXNzICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFJldHVybiBvbmx5IGNhcHR1cmVzIG5lZWRlZCBieSB0aGUgcHNldWRvIGZpbHRlciBtZXRob2QgKHR5cGUgYW5kIGFyZ3VtZW50KVxuXHRcdFx0cmV0dXJuIG1hdGNoLnNsaWNlKCAwLCAzICk7XG5cdFx0fVxuXHR9LFxuXG5cdGZpbHRlcjoge1xuXG5cdFx0XCJUQUdcIjogZnVuY3Rpb24oIG5vZGVOYW1lU2VsZWN0b3IgKSB7XG5cdFx0XHR2YXIgbm9kZU5hbWUgPSBub2RlTmFtZVNlbGVjdG9yLnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICkudG9Mb3dlckNhc2UoKTtcblx0XHRcdHJldHVybiBub2RlTmFtZVNlbGVjdG9yID09PSBcIipcIiA/XG5cdFx0XHRcdGZ1bmN0aW9uKCkgeyByZXR1cm4gdHJ1ZTsgfSA6XG5cdFx0XHRcdGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0XHRcdHJldHVybiBlbGVtLm5vZGVOYW1lICYmIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gbm9kZU5hbWU7XG5cdFx0XHRcdH07XG5cdFx0fSxcblxuXHRcdFwiQ0xBU1NcIjogZnVuY3Rpb24oIGNsYXNzTmFtZSApIHtcblx0XHRcdHZhciBwYXR0ZXJuID0gY2xhc3NDYWNoZVsgY2xhc3NOYW1lICsgXCIgXCIgXTtcblxuXHRcdFx0cmV0dXJuIHBhdHRlcm4gfHxcblx0XHRcdFx0KHBhdHRlcm4gPSBuZXcgUmVnRXhwKCBcIihefFwiICsgd2hpdGVzcGFjZSArIFwiKVwiICsgY2xhc3NOYW1lICsgXCIoXCIgKyB3aGl0ZXNwYWNlICsgXCJ8JClcIiApKSAmJlxuXHRcdFx0XHRjbGFzc0NhY2hlKCBjbGFzc05hbWUsIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0XHRcdHJldHVybiBwYXR0ZXJuLnRlc3QoIHR5cGVvZiBlbGVtLmNsYXNzTmFtZSA9PT0gXCJzdHJpbmdcIiAmJiBlbGVtLmNsYXNzTmFtZSB8fCB0eXBlb2YgZWxlbS5nZXRBdHRyaWJ1dGUgIT09IFwidW5kZWZpbmVkXCIgJiYgZWxlbS5nZXRBdHRyaWJ1dGUoXCJjbGFzc1wiKSB8fCBcIlwiICk7XG5cdFx0XHRcdH0pO1xuXHRcdH0sXG5cblx0XHRcIkFUVFJcIjogZnVuY3Rpb24oIG5hbWUsIG9wZXJhdG9yLCBjaGVjayApIHtcblx0XHRcdHJldHVybiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0dmFyIHJlc3VsdCA9IFNpenpsZS5hdHRyKCBlbGVtLCBuYW1lICk7XG5cblx0XHRcdFx0aWYgKCByZXN1bHQgPT0gbnVsbCApIHtcblx0XHRcdFx0XHRyZXR1cm4gb3BlcmF0b3IgPT09IFwiIT1cIjtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoICFvcGVyYXRvciApIHtcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJlc3VsdCArPSBcIlwiO1xuXG5cdFx0XHRcdHJldHVybiBvcGVyYXRvciA9PT0gXCI9XCIgPyByZXN1bHQgPT09IGNoZWNrIDpcblx0XHRcdFx0XHRvcGVyYXRvciA9PT0gXCIhPVwiID8gcmVzdWx0ICE9PSBjaGVjayA6XG5cdFx0XHRcdFx0b3BlcmF0b3IgPT09IFwiXj1cIiA/IGNoZWNrICYmIHJlc3VsdC5pbmRleE9mKCBjaGVjayApID09PSAwIDpcblx0XHRcdFx0XHRvcGVyYXRvciA9PT0gXCIqPVwiID8gY2hlY2sgJiYgcmVzdWx0LmluZGV4T2YoIGNoZWNrICkgPiAtMSA6XG5cdFx0XHRcdFx0b3BlcmF0b3IgPT09IFwiJD1cIiA/IGNoZWNrICYmIHJlc3VsdC5zbGljZSggLWNoZWNrLmxlbmd0aCApID09PSBjaGVjayA6XG5cdFx0XHRcdFx0b3BlcmF0b3IgPT09IFwifj1cIiA/ICggXCIgXCIgKyByZXN1bHQucmVwbGFjZSggcndoaXRlc3BhY2UsIFwiIFwiICkgKyBcIiBcIiApLmluZGV4T2YoIGNoZWNrICkgPiAtMSA6XG5cdFx0XHRcdFx0b3BlcmF0b3IgPT09IFwifD1cIiA/IHJlc3VsdCA9PT0gY2hlY2sgfHwgcmVzdWx0LnNsaWNlKCAwLCBjaGVjay5sZW5ndGggKyAxICkgPT09IGNoZWNrICsgXCItXCIgOlxuXHRcdFx0XHRcdGZhbHNlO1xuXHRcdFx0fTtcblx0XHR9LFxuXG5cdFx0XCJDSElMRFwiOiBmdW5jdGlvbiggdHlwZSwgd2hhdCwgYXJndW1lbnQsIGZpcnN0LCBsYXN0ICkge1xuXHRcdFx0dmFyIHNpbXBsZSA9IHR5cGUuc2xpY2UoIDAsIDMgKSAhPT0gXCJudGhcIixcblx0XHRcdFx0Zm9yd2FyZCA9IHR5cGUuc2xpY2UoIC00ICkgIT09IFwibGFzdFwiLFxuXHRcdFx0XHRvZlR5cGUgPSB3aGF0ID09PSBcIm9mLXR5cGVcIjtcblxuXHRcdFx0cmV0dXJuIGZpcnN0ID09PSAxICYmIGxhc3QgPT09IDAgP1xuXG5cdFx0XHRcdC8vIFNob3J0Y3V0IGZvciA6bnRoLSoobilcblx0XHRcdFx0ZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRcdFx0cmV0dXJuICEhZWxlbS5wYXJlbnROb2RlO1xuXHRcdFx0XHR9IDpcblxuXHRcdFx0XHRmdW5jdGlvbiggZWxlbSwgY29udGV4dCwgeG1sICkge1xuXHRcdFx0XHRcdHZhciBjYWNoZSwgdW5pcXVlQ2FjaGUsIG91dGVyQ2FjaGUsIG5vZGUsIG5vZGVJbmRleCwgc3RhcnQsXG5cdFx0XHRcdFx0XHRkaXIgPSBzaW1wbGUgIT09IGZvcndhcmQgPyBcIm5leHRTaWJsaW5nXCIgOiBcInByZXZpb3VzU2libGluZ1wiLFxuXHRcdFx0XHRcdFx0cGFyZW50ID0gZWxlbS5wYXJlbnROb2RlLFxuXHRcdFx0XHRcdFx0bmFtZSA9IG9mVHlwZSAmJiBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCksXG5cdFx0XHRcdFx0XHR1c2VDYWNoZSA9ICF4bWwgJiYgIW9mVHlwZSxcblx0XHRcdFx0XHRcdGRpZmYgPSBmYWxzZTtcblxuXHRcdFx0XHRcdGlmICggcGFyZW50ICkge1xuXG5cdFx0XHRcdFx0XHQvLyA6KGZpcnN0fGxhc3R8b25seSktKGNoaWxkfG9mLXR5cGUpXG5cdFx0XHRcdFx0XHRpZiAoIHNpbXBsZSApIHtcblx0XHRcdFx0XHRcdFx0d2hpbGUgKCBkaXIgKSB7XG5cdFx0XHRcdFx0XHRcdFx0bm9kZSA9IGVsZW07XG5cdFx0XHRcdFx0XHRcdFx0d2hpbGUgKCAobm9kZSA9IG5vZGVbIGRpciBdKSApIHtcblx0XHRcdFx0XHRcdFx0XHRcdGlmICggb2ZUeXBlID9cblx0XHRcdFx0XHRcdFx0XHRcdFx0bm9kZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSBuYW1lIDpcblx0XHRcdFx0XHRcdFx0XHRcdFx0bm9kZS5ub2RlVHlwZSA9PT0gMSApIHtcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdC8vIFJldmVyc2UgZGlyZWN0aW9uIGZvciA6b25seS0qIChpZiB3ZSBoYXZlbid0IHlldCBkb25lIHNvKVxuXHRcdFx0XHRcdFx0XHRcdHN0YXJ0ID0gZGlyID0gdHlwZSA9PT0gXCJvbmx5XCIgJiYgIXN0YXJ0ICYmIFwibmV4dFNpYmxpbmdcIjtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0c3RhcnQgPSBbIGZvcndhcmQgPyBwYXJlbnQuZmlyc3RDaGlsZCA6IHBhcmVudC5sYXN0Q2hpbGQgXTtcblxuXHRcdFx0XHRcdFx0Ly8gbm9uLXhtbCA6bnRoLWNoaWxkKC4uLikgc3RvcmVzIGNhY2hlIGRhdGEgb24gYHBhcmVudGBcblx0XHRcdFx0XHRcdGlmICggZm9yd2FyZCAmJiB1c2VDYWNoZSApIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBTZWVrIGBlbGVtYCBmcm9tIGEgcHJldmlvdXNseS1jYWNoZWQgaW5kZXhcblxuXHRcdFx0XHRcdFx0XHQvLyAuLi5pbiBhIGd6aXAtZnJpZW5kbHkgd2F5XG5cdFx0XHRcdFx0XHRcdG5vZGUgPSBwYXJlbnQ7XG5cdFx0XHRcdFx0XHRcdG91dGVyQ2FjaGUgPSBub2RlWyBleHBhbmRvIF0gfHwgKG5vZGVbIGV4cGFuZG8gXSA9IHt9KTtcblxuXHRcdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA8OSBvbmx5XG5cdFx0XHRcdFx0XHRcdC8vIERlZmVuZCBhZ2FpbnN0IGNsb25lZCBhdHRyb3BlcnRpZXMgKGpRdWVyeSBnaC0xNzA5KVxuXHRcdFx0XHRcdFx0XHR1bmlxdWVDYWNoZSA9IG91dGVyQ2FjaGVbIG5vZGUudW5pcXVlSUQgXSB8fFxuXHRcdFx0XHRcdFx0XHRcdChvdXRlckNhY2hlWyBub2RlLnVuaXF1ZUlEIF0gPSB7fSk7XG5cblx0XHRcdFx0XHRcdFx0Y2FjaGUgPSB1bmlxdWVDYWNoZVsgdHlwZSBdIHx8IFtdO1xuXHRcdFx0XHRcdFx0XHRub2RlSW5kZXggPSBjYWNoZVsgMCBdID09PSBkaXJydW5zICYmIGNhY2hlWyAxIF07XG5cdFx0XHRcdFx0XHRcdGRpZmYgPSBub2RlSW5kZXggJiYgY2FjaGVbIDIgXTtcblx0XHRcdFx0XHRcdFx0bm9kZSA9IG5vZGVJbmRleCAmJiBwYXJlbnQuY2hpbGROb2Rlc1sgbm9kZUluZGV4IF07XG5cblx0XHRcdFx0XHRcdFx0d2hpbGUgKCAobm9kZSA9ICsrbm9kZUluZGV4ICYmIG5vZGUgJiYgbm9kZVsgZGlyIF0gfHxcblxuXHRcdFx0XHRcdFx0XHRcdC8vIEZhbGxiYWNrIHRvIHNlZWtpbmcgYGVsZW1gIGZyb20gdGhlIHN0YXJ0XG5cdFx0XHRcdFx0XHRcdFx0KGRpZmYgPSBub2RlSW5kZXggPSAwKSB8fCBzdGFydC5wb3AoKSkgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHQvLyBXaGVuIGZvdW5kLCBjYWNoZSBpbmRleGVzIG9uIGBwYXJlbnRgIGFuZCBicmVha1xuXHRcdFx0XHRcdFx0XHRcdGlmICggbm9kZS5ub2RlVHlwZSA9PT0gMSAmJiArK2RpZmYgJiYgbm9kZSA9PT0gZWxlbSApIHtcblx0XHRcdFx0XHRcdFx0XHRcdHVuaXF1ZUNhY2hlWyB0eXBlIF0gPSBbIGRpcnJ1bnMsIG5vZGVJbmRleCwgZGlmZiBdO1xuXHRcdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdC8vIFVzZSBwcmV2aW91c2x5LWNhY2hlZCBlbGVtZW50IGluZGV4IGlmIGF2YWlsYWJsZVxuXHRcdFx0XHRcdFx0XHRpZiAoIHVzZUNhY2hlICkge1xuXHRcdFx0XHRcdFx0XHRcdC8vIC4uLmluIGEgZ3ppcC1mcmllbmRseSB3YXlcblx0XHRcdFx0XHRcdFx0XHRub2RlID0gZWxlbTtcblx0XHRcdFx0XHRcdFx0XHRvdXRlckNhY2hlID0gbm9kZVsgZXhwYW5kbyBdIHx8IChub2RlWyBleHBhbmRvIF0gPSB7fSk7XG5cblx0XHRcdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA8OSBvbmx5XG5cdFx0XHRcdFx0XHRcdFx0Ly8gRGVmZW5kIGFnYWluc3QgY2xvbmVkIGF0dHJvcGVydGllcyAoalF1ZXJ5IGdoLTE3MDkpXG5cdFx0XHRcdFx0XHRcdFx0dW5pcXVlQ2FjaGUgPSBvdXRlckNhY2hlWyBub2RlLnVuaXF1ZUlEIF0gfHxcblx0XHRcdFx0XHRcdFx0XHRcdChvdXRlckNhY2hlWyBub2RlLnVuaXF1ZUlEIF0gPSB7fSk7XG5cblx0XHRcdFx0XHRcdFx0XHRjYWNoZSA9IHVuaXF1ZUNhY2hlWyB0eXBlIF0gfHwgW107XG5cdFx0XHRcdFx0XHRcdFx0bm9kZUluZGV4ID0gY2FjaGVbIDAgXSA9PT0gZGlycnVucyAmJiBjYWNoZVsgMSBdO1xuXHRcdFx0XHRcdFx0XHRcdGRpZmYgPSBub2RlSW5kZXg7XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHQvLyB4bWwgOm50aC1jaGlsZCguLi4pXG5cdFx0XHRcdFx0XHRcdC8vIG9yIDpudGgtbGFzdC1jaGlsZCguLi4pIG9yIDpudGgoLWxhc3QpPy1vZi10eXBlKC4uLilcblx0XHRcdFx0XHRcdFx0aWYgKCBkaWZmID09PSBmYWxzZSApIHtcblx0XHRcdFx0XHRcdFx0XHQvLyBVc2UgdGhlIHNhbWUgbG9vcCBhcyBhYm92ZSB0byBzZWVrIGBlbGVtYCBmcm9tIHRoZSBzdGFydFxuXHRcdFx0XHRcdFx0XHRcdHdoaWxlICggKG5vZGUgPSArK25vZGVJbmRleCAmJiBub2RlICYmIG5vZGVbIGRpciBdIHx8XG5cdFx0XHRcdFx0XHRcdFx0XHQoZGlmZiA9IG5vZGVJbmRleCA9IDApIHx8IHN0YXJ0LnBvcCgpKSApIHtcblxuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKCAoIG9mVHlwZSA/XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG5vZGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gbmFtZSA6XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG5vZGUubm9kZVR5cGUgPT09IDEgKSAmJlxuXHRcdFx0XHRcdFx0XHRcdFx0XHQrK2RpZmYgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gQ2FjaGUgdGhlIGluZGV4IG9mIGVhY2ggZW5jb3VudGVyZWQgZWxlbWVudFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoIHVzZUNhY2hlICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG91dGVyQ2FjaGUgPSBub2RlWyBleHBhbmRvIF0gfHwgKG5vZGVbIGV4cGFuZG8gXSA9IHt9KTtcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDw5IG9ubHlcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBEZWZlbmQgYWdhaW5zdCBjbG9uZWQgYXR0cm9wZXJ0aWVzIChqUXVlcnkgZ2gtMTcwOSlcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR1bmlxdWVDYWNoZSA9IG91dGVyQ2FjaGVbIG5vZGUudW5pcXVlSUQgXSB8fFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0KG91dGVyQ2FjaGVbIG5vZGUudW5pcXVlSUQgXSA9IHt9KTtcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHVuaXF1ZUNhY2hlWyB0eXBlIF0gPSBbIGRpcnJ1bnMsIGRpZmYgXTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmICggbm9kZSA9PT0gZWxlbSApIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHQvLyBJbmNvcnBvcmF0ZSB0aGUgb2Zmc2V0LCB0aGVuIGNoZWNrIGFnYWluc3QgY3ljbGUgc2l6ZVxuXHRcdFx0XHRcdFx0ZGlmZiAtPSBsYXN0O1xuXHRcdFx0XHRcdFx0cmV0dXJuIGRpZmYgPT09IGZpcnN0IHx8ICggZGlmZiAlIGZpcnN0ID09PSAwICYmIGRpZmYgLyBmaXJzdCA+PSAwICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9O1xuXHRcdH0sXG5cblx0XHRcIlBTRVVET1wiOiBmdW5jdGlvbiggcHNldWRvLCBhcmd1bWVudCApIHtcblx0XHRcdC8vIHBzZXVkby1jbGFzcyBuYW1lcyBhcmUgY2FzZS1pbnNlbnNpdGl2ZVxuXHRcdFx0Ly8gaHR0cDovL3d3dy53My5vcmcvVFIvc2VsZWN0b3JzLyNwc2V1ZG8tY2xhc3Nlc1xuXHRcdFx0Ly8gUHJpb3JpdGl6ZSBieSBjYXNlIHNlbnNpdGl2aXR5IGluIGNhc2UgY3VzdG9tIHBzZXVkb3MgYXJlIGFkZGVkIHdpdGggdXBwZXJjYXNlIGxldHRlcnNcblx0XHRcdC8vIFJlbWVtYmVyIHRoYXQgc2V0RmlsdGVycyBpbmhlcml0cyBmcm9tIHBzZXVkb3Ncblx0XHRcdHZhciBhcmdzLFxuXHRcdFx0XHRmbiA9IEV4cHIucHNldWRvc1sgcHNldWRvIF0gfHwgRXhwci5zZXRGaWx0ZXJzWyBwc2V1ZG8udG9Mb3dlckNhc2UoKSBdIHx8XG5cdFx0XHRcdFx0U2l6emxlLmVycm9yKCBcInVuc3VwcG9ydGVkIHBzZXVkbzogXCIgKyBwc2V1ZG8gKTtcblxuXHRcdFx0Ly8gVGhlIHVzZXIgbWF5IHVzZSBjcmVhdGVQc2V1ZG8gdG8gaW5kaWNhdGUgdGhhdFxuXHRcdFx0Ly8gYXJndW1lbnRzIGFyZSBuZWVkZWQgdG8gY3JlYXRlIHRoZSBmaWx0ZXIgZnVuY3Rpb25cblx0XHRcdC8vIGp1c3QgYXMgU2l6emxlIGRvZXNcblx0XHRcdGlmICggZm5bIGV4cGFuZG8gXSApIHtcblx0XHRcdFx0cmV0dXJuIGZuKCBhcmd1bWVudCApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBCdXQgbWFpbnRhaW4gc3VwcG9ydCBmb3Igb2xkIHNpZ25hdHVyZXNcblx0XHRcdGlmICggZm4ubGVuZ3RoID4gMSApIHtcblx0XHRcdFx0YXJncyA9IFsgcHNldWRvLCBwc2V1ZG8sIFwiXCIsIGFyZ3VtZW50IF07XG5cdFx0XHRcdHJldHVybiBFeHByLnNldEZpbHRlcnMuaGFzT3duUHJvcGVydHkoIHBzZXVkby50b0xvd2VyQ2FzZSgpICkgP1xuXHRcdFx0XHRcdG1hcmtGdW5jdGlvbihmdW5jdGlvbiggc2VlZCwgbWF0Y2hlcyApIHtcblx0XHRcdFx0XHRcdHZhciBpZHgsXG5cdFx0XHRcdFx0XHRcdG1hdGNoZWQgPSBmbiggc2VlZCwgYXJndW1lbnQgKSxcblx0XHRcdFx0XHRcdFx0aSA9IG1hdGNoZWQubGVuZ3RoO1xuXHRcdFx0XHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRcdFx0XHRcdGlkeCA9IGluZGV4T2YoIHNlZWQsIG1hdGNoZWRbaV0gKTtcblx0XHRcdFx0XHRcdFx0c2VlZFsgaWR4IF0gPSAhKCBtYXRjaGVzWyBpZHggXSA9IG1hdGNoZWRbaV0gKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KSA6XG5cdFx0XHRcdFx0ZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZm4oIGVsZW0sIDAsIGFyZ3MgKTtcblx0XHRcdFx0XHR9O1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZm47XG5cdFx0fVxuXHR9LFxuXG5cdHBzZXVkb3M6IHtcblx0XHQvLyBQb3RlbnRpYWxseSBjb21wbGV4IHBzZXVkb3Ncblx0XHRcIm5vdFwiOiBtYXJrRnVuY3Rpb24oZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdFx0Ly8gVHJpbSB0aGUgc2VsZWN0b3IgcGFzc2VkIHRvIGNvbXBpbGVcblx0XHRcdC8vIHRvIGF2b2lkIHRyZWF0aW5nIGxlYWRpbmcgYW5kIHRyYWlsaW5nXG5cdFx0XHQvLyBzcGFjZXMgYXMgY29tYmluYXRvcnNcblx0XHRcdHZhciBpbnB1dCA9IFtdLFxuXHRcdFx0XHRyZXN1bHRzID0gW10sXG5cdFx0XHRcdG1hdGNoZXIgPSBjb21waWxlKCBzZWxlY3Rvci5yZXBsYWNlKCBydHJpbSwgXCIkMVwiICkgKTtcblxuXHRcdFx0cmV0dXJuIG1hdGNoZXJbIGV4cGFuZG8gXSA/XG5cdFx0XHRcdG1hcmtGdW5jdGlvbihmdW5jdGlvbiggc2VlZCwgbWF0Y2hlcywgY29udGV4dCwgeG1sICkge1xuXHRcdFx0XHRcdHZhciBlbGVtLFxuXHRcdFx0XHRcdFx0dW5tYXRjaGVkID0gbWF0Y2hlciggc2VlZCwgbnVsbCwgeG1sLCBbXSApLFxuXHRcdFx0XHRcdFx0aSA9IHNlZWQubGVuZ3RoO1xuXG5cdFx0XHRcdFx0Ly8gTWF0Y2ggZWxlbWVudHMgdW5tYXRjaGVkIGJ5IGBtYXRjaGVyYFxuXHRcdFx0XHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0XHRcdFx0aWYgKCAoZWxlbSA9IHVubWF0Y2hlZFtpXSkgKSB7XG5cdFx0XHRcdFx0XHRcdHNlZWRbaV0gPSAhKG1hdGNoZXNbaV0gPSBlbGVtKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pIDpcblx0XHRcdFx0ZnVuY3Rpb24oIGVsZW0sIGNvbnRleHQsIHhtbCApIHtcblx0XHRcdFx0XHRpbnB1dFswXSA9IGVsZW07XG5cdFx0XHRcdFx0bWF0Y2hlciggaW5wdXQsIG51bGwsIHhtbCwgcmVzdWx0cyApO1xuXHRcdFx0XHRcdC8vIERvbid0IGtlZXAgdGhlIGVsZW1lbnQgKGlzc3VlICMyOTkpXG5cdFx0XHRcdFx0aW5wdXRbMF0gPSBudWxsO1xuXHRcdFx0XHRcdHJldHVybiAhcmVzdWx0cy5wb3AoKTtcblx0XHRcdFx0fTtcblx0XHR9KSxcblxuXHRcdFwiaGFzXCI6IG1hcmtGdW5jdGlvbihmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRcdHJldHVybiBTaXp6bGUoIHNlbGVjdG9yLCBlbGVtICkubGVuZ3RoID4gMDtcblx0XHRcdH07XG5cdFx0fSksXG5cblx0XHRcImNvbnRhaW5zXCI6IG1hcmtGdW5jdGlvbihmdW5jdGlvbiggdGV4dCApIHtcblx0XHRcdHRleHQgPSB0ZXh0LnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICk7XG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRcdHJldHVybiAoIGVsZW0udGV4dENvbnRlbnQgfHwgZ2V0VGV4dCggZWxlbSApICkuaW5kZXhPZiggdGV4dCApID4gLTE7XG5cdFx0XHR9O1xuXHRcdH0pLFxuXG5cdFx0Ly8gXCJXaGV0aGVyIGFuIGVsZW1lbnQgaXMgcmVwcmVzZW50ZWQgYnkgYSA6bGFuZygpIHNlbGVjdG9yXG5cdFx0Ly8gaXMgYmFzZWQgc29sZWx5IG9uIHRoZSBlbGVtZW50J3MgbGFuZ3VhZ2UgdmFsdWVcblx0XHQvLyBiZWluZyBlcXVhbCB0byB0aGUgaWRlbnRpZmllciBDLFxuXHRcdC8vIG9yIGJlZ2lubmluZyB3aXRoIHRoZSBpZGVudGlmaWVyIEMgaW1tZWRpYXRlbHkgZm9sbG93ZWQgYnkgXCItXCIuXG5cdFx0Ly8gVGhlIG1hdGNoaW5nIG9mIEMgYWdhaW5zdCB0aGUgZWxlbWVudCdzIGxhbmd1YWdlIHZhbHVlIGlzIHBlcmZvcm1lZCBjYXNlLWluc2Vuc2l0aXZlbHkuXG5cdFx0Ly8gVGhlIGlkZW50aWZpZXIgQyBkb2VzIG5vdCBoYXZlIHRvIGJlIGEgdmFsaWQgbGFuZ3VhZ2UgbmFtZS5cIlxuXHRcdC8vIGh0dHA6Ly93d3cudzMub3JnL1RSL3NlbGVjdG9ycy8jbGFuZy1wc2V1ZG9cblx0XHRcImxhbmdcIjogbWFya0Z1bmN0aW9uKCBmdW5jdGlvbiggbGFuZyApIHtcblx0XHRcdC8vIGxhbmcgdmFsdWUgbXVzdCBiZSBhIHZhbGlkIGlkZW50aWZpZXJcblx0XHRcdGlmICggIXJpZGVudGlmaWVyLnRlc3QobGFuZyB8fCBcIlwiKSApIHtcblx0XHRcdFx0U2l6emxlLmVycm9yKCBcInVuc3VwcG9ydGVkIGxhbmc6IFwiICsgbGFuZyApO1xuXHRcdFx0fVxuXHRcdFx0bGFuZyA9IGxhbmcucmVwbGFjZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKS50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0XHR2YXIgZWxlbUxhbmc7XG5cdFx0XHRcdGRvIHtcblx0XHRcdFx0XHRpZiAoIChlbGVtTGFuZyA9IGRvY3VtZW50SXNIVE1MID9cblx0XHRcdFx0XHRcdGVsZW0ubGFuZyA6XG5cdFx0XHRcdFx0XHRlbGVtLmdldEF0dHJpYnV0ZShcInhtbDpsYW5nXCIpIHx8IGVsZW0uZ2V0QXR0cmlidXRlKFwibGFuZ1wiKSkgKSB7XG5cblx0XHRcdFx0XHRcdGVsZW1MYW5nID0gZWxlbUxhbmcudG9Mb3dlckNhc2UoKTtcblx0XHRcdFx0XHRcdHJldHVybiBlbGVtTGFuZyA9PT0gbGFuZyB8fCBlbGVtTGFuZy5pbmRleE9mKCBsYW5nICsgXCItXCIgKSA9PT0gMDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gd2hpbGUgKCAoZWxlbSA9IGVsZW0ucGFyZW50Tm9kZSkgJiYgZWxlbS5ub2RlVHlwZSA9PT0gMSApO1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9O1xuXHRcdH0pLFxuXG5cdFx0Ly8gTWlzY2VsbGFuZW91c1xuXHRcdFwidGFyZ2V0XCI6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0dmFyIGhhc2ggPSB3aW5kb3cubG9jYXRpb24gJiYgd2luZG93LmxvY2F0aW9uLmhhc2g7XG5cdFx0XHRyZXR1cm4gaGFzaCAmJiBoYXNoLnNsaWNlKCAxICkgPT09IGVsZW0uaWQ7XG5cdFx0fSxcblxuXHRcdFwicm9vdFwiOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiBlbGVtID09PSBkb2NFbGVtO1xuXHRcdH0sXG5cblx0XHRcImZvY3VzXCI6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuIGVsZW0gPT09IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgJiYgKCFkb2N1bWVudC5oYXNGb2N1cyB8fCBkb2N1bWVudC5oYXNGb2N1cygpKSAmJiAhIShlbGVtLnR5cGUgfHwgZWxlbS5ocmVmIHx8IH5lbGVtLnRhYkluZGV4KTtcblx0XHR9LFxuXG5cdFx0Ly8gQm9vbGVhbiBwcm9wZXJ0aWVzXG5cdFx0XCJlbmFibGVkXCI6IGNyZWF0ZURpc2FibGVkUHNldWRvKCBmYWxzZSApLFxuXHRcdFwiZGlzYWJsZWRcIjogY3JlYXRlRGlzYWJsZWRQc2V1ZG8oIHRydWUgKSxcblxuXHRcdFwiY2hlY2tlZFwiOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdC8vIEluIENTUzMsIDpjaGVja2VkIHNob3VsZCByZXR1cm4gYm90aCBjaGVja2VkIGFuZCBzZWxlY3RlZCBlbGVtZW50c1xuXHRcdFx0Ly8gaHR0cDovL3d3dy53My5vcmcvVFIvMjAxMS9SRUMtY3NzMy1zZWxlY3RvcnMtMjAxMTA5MjkvI2NoZWNrZWRcblx0XHRcdHZhciBub2RlTmFtZSA9IGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcblx0XHRcdHJldHVybiAobm9kZU5hbWUgPT09IFwiaW5wdXRcIiAmJiAhIWVsZW0uY2hlY2tlZCkgfHwgKG5vZGVOYW1lID09PSBcIm9wdGlvblwiICYmICEhZWxlbS5zZWxlY3RlZCk7XG5cdFx0fSxcblxuXHRcdFwic2VsZWN0ZWRcIjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHQvLyBBY2Nlc3NpbmcgdGhpcyBwcm9wZXJ0eSBtYWtlcyBzZWxlY3RlZC1ieS1kZWZhdWx0XG5cdFx0XHQvLyBvcHRpb25zIGluIFNhZmFyaSB3b3JrIHByb3Blcmx5XG5cdFx0XHRpZiAoIGVsZW0ucGFyZW50Tm9kZSApIHtcblx0XHRcdFx0ZWxlbS5wYXJlbnROb2RlLnNlbGVjdGVkSW5kZXg7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBlbGVtLnNlbGVjdGVkID09PSB0cnVlO1xuXHRcdH0sXG5cblx0XHQvLyBDb250ZW50c1xuXHRcdFwiZW1wdHlcIjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHQvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9zZWxlY3RvcnMvI2VtcHR5LXBzZXVkb1xuXHRcdFx0Ly8gOmVtcHR5IGlzIG5lZ2F0ZWQgYnkgZWxlbWVudCAoMSkgb3IgY29udGVudCBub2RlcyAodGV4dDogMzsgY2RhdGE6IDQ7IGVudGl0eSByZWY6IDUpLFxuXHRcdFx0Ly8gICBidXQgbm90IGJ5IG90aGVycyAoY29tbWVudDogODsgcHJvY2Vzc2luZyBpbnN0cnVjdGlvbjogNzsgZXRjLilcblx0XHRcdC8vIG5vZGVUeXBlIDwgNiB3b3JrcyBiZWNhdXNlIGF0dHJpYnV0ZXMgKDIpIGRvIG5vdCBhcHBlYXIgYXMgY2hpbGRyZW5cblx0XHRcdGZvciAoIGVsZW0gPSBlbGVtLmZpcnN0Q2hpbGQ7IGVsZW07IGVsZW0gPSBlbGVtLm5leHRTaWJsaW5nICkge1xuXHRcdFx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPCA2ICkge1xuXHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fSxcblxuXHRcdFwicGFyZW50XCI6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuICFFeHByLnBzZXVkb3NbXCJlbXB0eVwiXSggZWxlbSApO1xuXHRcdH0sXG5cblx0XHQvLyBFbGVtZW50L2lucHV0IHR5cGVzXG5cdFx0XCJoZWFkZXJcIjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gcmhlYWRlci50ZXN0KCBlbGVtLm5vZGVOYW1lICk7XG5cdFx0fSxcblxuXHRcdFwiaW5wdXRcIjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gcmlucHV0cy50ZXN0KCBlbGVtLm5vZGVOYW1lICk7XG5cdFx0fSxcblxuXHRcdFwiYnV0dG9uXCI6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0dmFyIG5hbWUgPSBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG5cdFx0XHRyZXR1cm4gbmFtZSA9PT0gXCJpbnB1dFwiICYmIGVsZW0udHlwZSA9PT0gXCJidXR0b25cIiB8fCBuYW1lID09PSBcImJ1dHRvblwiO1xuXHRcdH0sXG5cblx0XHRcInRleHRcIjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHR2YXIgYXR0cjtcblx0XHRcdHJldHVybiBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09IFwiaW5wdXRcIiAmJlxuXHRcdFx0XHRlbGVtLnR5cGUgPT09IFwidGV4dFwiICYmXG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogSUU8OFxuXHRcdFx0XHQvLyBOZXcgSFRNTDUgYXR0cmlidXRlIHZhbHVlcyAoZS5nLiwgXCJzZWFyY2hcIikgYXBwZWFyIHdpdGggZWxlbS50eXBlID09PSBcInRleHRcIlxuXHRcdFx0XHQoIChhdHRyID0gZWxlbS5nZXRBdHRyaWJ1dGUoXCJ0eXBlXCIpKSA9PSBudWxsIHx8IGF0dHIudG9Mb3dlckNhc2UoKSA9PT0gXCJ0ZXh0XCIgKTtcblx0XHR9LFxuXG5cdFx0Ly8gUG9zaXRpb24taW4tY29sbGVjdGlvblxuXHRcdFwiZmlyc3RcIjogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyhmdW5jdGlvbigpIHtcblx0XHRcdHJldHVybiBbIDAgXTtcblx0XHR9KSxcblxuXHRcdFwibGFzdFwiOiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKGZ1bmN0aW9uKCBtYXRjaEluZGV4ZXMsIGxlbmd0aCApIHtcblx0XHRcdHJldHVybiBbIGxlbmd0aCAtIDEgXTtcblx0XHR9KSxcblxuXHRcdFwiZXFcIjogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyhmdW5jdGlvbiggbWF0Y2hJbmRleGVzLCBsZW5ndGgsIGFyZ3VtZW50ICkge1xuXHRcdFx0cmV0dXJuIFsgYXJndW1lbnQgPCAwID8gYXJndW1lbnQgKyBsZW5ndGggOiBhcmd1bWVudCBdO1xuXHRcdH0pLFxuXG5cdFx0XCJldmVuXCI6IGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oZnVuY3Rpb24oIG1hdGNoSW5kZXhlcywgbGVuZ3RoICkge1xuXHRcdFx0dmFyIGkgPSAwO1xuXHRcdFx0Zm9yICggOyBpIDwgbGVuZ3RoOyBpICs9IDIgKSB7XG5cdFx0XHRcdG1hdGNoSW5kZXhlcy5wdXNoKCBpICk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gbWF0Y2hJbmRleGVzO1xuXHRcdH0pLFxuXG5cdFx0XCJvZGRcIjogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyhmdW5jdGlvbiggbWF0Y2hJbmRleGVzLCBsZW5ndGggKSB7XG5cdFx0XHR2YXIgaSA9IDE7XG5cdFx0XHRmb3IgKCA7IGkgPCBsZW5ndGg7IGkgKz0gMiApIHtcblx0XHRcdFx0bWF0Y2hJbmRleGVzLnB1c2goIGkgKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBtYXRjaEluZGV4ZXM7XG5cdFx0fSksXG5cblx0XHRcImx0XCI6IGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oZnVuY3Rpb24oIG1hdGNoSW5kZXhlcywgbGVuZ3RoLCBhcmd1bWVudCApIHtcblx0XHRcdHZhciBpID0gYXJndW1lbnQgPCAwID9cblx0XHRcdFx0YXJndW1lbnQgKyBsZW5ndGggOlxuXHRcdFx0XHRhcmd1bWVudCA+IGxlbmd0aCA/XG5cdFx0XHRcdFx0bGVuZ3RoIDpcblx0XHRcdFx0XHRhcmd1bWVudDtcblx0XHRcdGZvciAoIDsgLS1pID49IDA7ICkge1xuXHRcdFx0XHRtYXRjaEluZGV4ZXMucHVzaCggaSApO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIG1hdGNoSW5kZXhlcztcblx0XHR9KSxcblxuXHRcdFwiZ3RcIjogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyhmdW5jdGlvbiggbWF0Y2hJbmRleGVzLCBsZW5ndGgsIGFyZ3VtZW50ICkge1xuXHRcdFx0dmFyIGkgPSBhcmd1bWVudCA8IDAgPyBhcmd1bWVudCArIGxlbmd0aCA6IGFyZ3VtZW50O1xuXHRcdFx0Zm9yICggOyArK2kgPCBsZW5ndGg7ICkge1xuXHRcdFx0XHRtYXRjaEluZGV4ZXMucHVzaCggaSApO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIG1hdGNoSW5kZXhlcztcblx0XHR9KVxuXHR9XG59O1xuXG5FeHByLnBzZXVkb3NbXCJudGhcIl0gPSBFeHByLnBzZXVkb3NbXCJlcVwiXTtcblxuLy8gQWRkIGJ1dHRvbi9pbnB1dCB0eXBlIHBzZXVkb3NcbmZvciAoIGkgaW4geyByYWRpbzogdHJ1ZSwgY2hlY2tib3g6IHRydWUsIGZpbGU6IHRydWUsIHBhc3N3b3JkOiB0cnVlLCBpbWFnZTogdHJ1ZSB9ICkge1xuXHRFeHByLnBzZXVkb3NbIGkgXSA9IGNyZWF0ZUlucHV0UHNldWRvKCBpICk7XG59XG5mb3IgKCBpIGluIHsgc3VibWl0OiB0cnVlLCByZXNldDogdHJ1ZSB9ICkge1xuXHRFeHByLnBzZXVkb3NbIGkgXSA9IGNyZWF0ZUJ1dHRvblBzZXVkbyggaSApO1xufVxuXG4vLyBFYXN5IEFQSSBmb3IgY3JlYXRpbmcgbmV3IHNldEZpbHRlcnNcbmZ1bmN0aW9uIHNldEZpbHRlcnMoKSB7fVxuc2V0RmlsdGVycy5wcm90b3R5cGUgPSBFeHByLmZpbHRlcnMgPSBFeHByLnBzZXVkb3M7XG5FeHByLnNldEZpbHRlcnMgPSBuZXcgc2V0RmlsdGVycygpO1xuXG50b2tlbml6ZSA9IFNpenpsZS50b2tlbml6ZSA9IGZ1bmN0aW9uKCBzZWxlY3RvciwgcGFyc2VPbmx5ICkge1xuXHR2YXIgbWF0Y2hlZCwgbWF0Y2gsIHRva2VucywgdHlwZSxcblx0XHRzb0ZhciwgZ3JvdXBzLCBwcmVGaWx0ZXJzLFxuXHRcdGNhY2hlZCA9IHRva2VuQ2FjaGVbIHNlbGVjdG9yICsgXCIgXCIgXTtcblxuXHRpZiAoIGNhY2hlZCApIHtcblx0XHRyZXR1cm4gcGFyc2VPbmx5ID8gMCA6IGNhY2hlZC5zbGljZSggMCApO1xuXHR9XG5cblx0c29GYXIgPSBzZWxlY3Rvcjtcblx0Z3JvdXBzID0gW107XG5cdHByZUZpbHRlcnMgPSBFeHByLnByZUZpbHRlcjtcblxuXHR3aGlsZSAoIHNvRmFyICkge1xuXG5cdFx0Ly8gQ29tbWEgYW5kIGZpcnN0IHJ1blxuXHRcdGlmICggIW1hdGNoZWQgfHwgKG1hdGNoID0gcmNvbW1hLmV4ZWMoIHNvRmFyICkpICkge1xuXHRcdFx0aWYgKCBtYXRjaCApIHtcblx0XHRcdFx0Ly8gRG9uJ3QgY29uc3VtZSB0cmFpbGluZyBjb21tYXMgYXMgdmFsaWRcblx0XHRcdFx0c29GYXIgPSBzb0Zhci5zbGljZSggbWF0Y2hbMF0ubGVuZ3RoICkgfHwgc29GYXI7XG5cdFx0XHR9XG5cdFx0XHRncm91cHMucHVzaCggKHRva2VucyA9IFtdKSApO1xuXHRcdH1cblxuXHRcdG1hdGNoZWQgPSBmYWxzZTtcblxuXHRcdC8vIENvbWJpbmF0b3JzXG5cdFx0aWYgKCAobWF0Y2ggPSByY29tYmluYXRvcnMuZXhlYyggc29GYXIgKSkgKSB7XG5cdFx0XHRtYXRjaGVkID0gbWF0Y2guc2hpZnQoKTtcblx0XHRcdHRva2Vucy5wdXNoKHtcblx0XHRcdFx0dmFsdWU6IG1hdGNoZWQsXG5cdFx0XHRcdC8vIENhc3QgZGVzY2VuZGFudCBjb21iaW5hdG9ycyB0byBzcGFjZVxuXHRcdFx0XHR0eXBlOiBtYXRjaFswXS5yZXBsYWNlKCBydHJpbSwgXCIgXCIgKVxuXHRcdFx0fSk7XG5cdFx0XHRzb0ZhciA9IHNvRmFyLnNsaWNlKCBtYXRjaGVkLmxlbmd0aCApO1xuXHRcdH1cblxuXHRcdC8vIEZpbHRlcnNcblx0XHRmb3IgKCB0eXBlIGluIEV4cHIuZmlsdGVyICkge1xuXHRcdFx0aWYgKCAobWF0Y2ggPSBtYXRjaEV4cHJbIHR5cGUgXS5leGVjKCBzb0ZhciApKSAmJiAoIXByZUZpbHRlcnNbIHR5cGUgXSB8fFxuXHRcdFx0XHQobWF0Y2ggPSBwcmVGaWx0ZXJzWyB0eXBlIF0oIG1hdGNoICkpKSApIHtcblx0XHRcdFx0bWF0Y2hlZCA9IG1hdGNoLnNoaWZ0KCk7XG5cdFx0XHRcdHRva2Vucy5wdXNoKHtcblx0XHRcdFx0XHR2YWx1ZTogbWF0Y2hlZCxcblx0XHRcdFx0XHR0eXBlOiB0eXBlLFxuXHRcdFx0XHRcdG1hdGNoZXM6IG1hdGNoXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRzb0ZhciA9IHNvRmFyLnNsaWNlKCBtYXRjaGVkLmxlbmd0aCApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmICggIW1hdGNoZWQgKSB7XG5cdFx0XHRicmVhaztcblx0XHR9XG5cdH1cblxuXHQvLyBSZXR1cm4gdGhlIGxlbmd0aCBvZiB0aGUgaW52YWxpZCBleGNlc3Ncblx0Ly8gaWYgd2UncmUganVzdCBwYXJzaW5nXG5cdC8vIE90aGVyd2lzZSwgdGhyb3cgYW4gZXJyb3Igb3IgcmV0dXJuIHRva2Vuc1xuXHRyZXR1cm4gcGFyc2VPbmx5ID9cblx0XHRzb0Zhci5sZW5ndGggOlxuXHRcdHNvRmFyID9cblx0XHRcdFNpenpsZS5lcnJvciggc2VsZWN0b3IgKSA6XG5cdFx0XHQvLyBDYWNoZSB0aGUgdG9rZW5zXG5cdFx0XHR0b2tlbkNhY2hlKCBzZWxlY3RvciwgZ3JvdXBzICkuc2xpY2UoIDAgKTtcbn07XG5cbmZ1bmN0aW9uIHRvU2VsZWN0b3IoIHRva2VucyApIHtcblx0dmFyIGkgPSAwLFxuXHRcdGxlbiA9IHRva2Vucy5sZW5ndGgsXG5cdFx0c2VsZWN0b3IgPSBcIlwiO1xuXHRmb3IgKCA7IGkgPCBsZW47IGkrKyApIHtcblx0XHRzZWxlY3RvciArPSB0b2tlbnNbaV0udmFsdWU7XG5cdH1cblx0cmV0dXJuIHNlbGVjdG9yO1xufVxuXG5mdW5jdGlvbiBhZGRDb21iaW5hdG9yKCBtYXRjaGVyLCBjb21iaW5hdG9yLCBiYXNlICkge1xuXHR2YXIgZGlyID0gY29tYmluYXRvci5kaXIsXG5cdFx0c2tpcCA9IGNvbWJpbmF0b3IubmV4dCxcblx0XHRrZXkgPSBza2lwIHx8IGRpcixcblx0XHRjaGVja05vbkVsZW1lbnRzID0gYmFzZSAmJiBrZXkgPT09IFwicGFyZW50Tm9kZVwiLFxuXHRcdGRvbmVOYW1lID0gZG9uZSsrO1xuXG5cdHJldHVybiBjb21iaW5hdG9yLmZpcnN0ID9cblx0XHQvLyBDaGVjayBhZ2FpbnN0IGNsb3Nlc3QgYW5jZXN0b3IvcHJlY2VkaW5nIGVsZW1lbnRcblx0XHRmdW5jdGlvbiggZWxlbSwgY29udGV4dCwgeG1sICkge1xuXHRcdFx0d2hpbGUgKCAoZWxlbSA9IGVsZW1bIGRpciBdKSApIHtcblx0XHRcdFx0aWYgKCBlbGVtLm5vZGVUeXBlID09PSAxIHx8IGNoZWNrTm9uRWxlbWVudHMgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIG1hdGNoZXIoIGVsZW0sIGNvbnRleHQsIHhtbCApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fSA6XG5cblx0XHQvLyBDaGVjayBhZ2FpbnN0IGFsbCBhbmNlc3Rvci9wcmVjZWRpbmcgZWxlbWVudHNcblx0XHRmdW5jdGlvbiggZWxlbSwgY29udGV4dCwgeG1sICkge1xuXHRcdFx0dmFyIG9sZENhY2hlLCB1bmlxdWVDYWNoZSwgb3V0ZXJDYWNoZSxcblx0XHRcdFx0bmV3Q2FjaGUgPSBbIGRpcnJ1bnMsIGRvbmVOYW1lIF07XG5cblx0XHRcdC8vIFdlIGNhbid0IHNldCBhcmJpdHJhcnkgZGF0YSBvbiBYTUwgbm9kZXMsIHNvIHRoZXkgZG9uJ3QgYmVuZWZpdCBmcm9tIGNvbWJpbmF0b3IgY2FjaGluZ1xuXHRcdFx0aWYgKCB4bWwgKSB7XG5cdFx0XHRcdHdoaWxlICggKGVsZW0gPSBlbGVtWyBkaXIgXSkgKSB7XG5cdFx0XHRcdFx0aWYgKCBlbGVtLm5vZGVUeXBlID09PSAxIHx8IGNoZWNrTm9uRWxlbWVudHMgKSB7XG5cdFx0XHRcdFx0XHRpZiAoIG1hdGNoZXIoIGVsZW0sIGNvbnRleHQsIHhtbCApICkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHdoaWxlICggKGVsZW0gPSBlbGVtWyBkaXIgXSkgKSB7XG5cdFx0XHRcdFx0aWYgKCBlbGVtLm5vZGVUeXBlID09PSAxIHx8IGNoZWNrTm9uRWxlbWVudHMgKSB7XG5cdFx0XHRcdFx0XHRvdXRlckNhY2hlID0gZWxlbVsgZXhwYW5kbyBdIHx8IChlbGVtWyBleHBhbmRvIF0gPSB7fSk7XG5cblx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDw5IG9ubHlcblx0XHRcdFx0XHRcdC8vIERlZmVuZCBhZ2FpbnN0IGNsb25lZCBhdHRyb3BlcnRpZXMgKGpRdWVyeSBnaC0xNzA5KVxuXHRcdFx0XHRcdFx0dW5pcXVlQ2FjaGUgPSBvdXRlckNhY2hlWyBlbGVtLnVuaXF1ZUlEIF0gfHwgKG91dGVyQ2FjaGVbIGVsZW0udW5pcXVlSUQgXSA9IHt9KTtcblxuXHRcdFx0XHRcdFx0aWYgKCBza2lwICYmIHNraXAgPT09IGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSApIHtcblx0XHRcdFx0XHRcdFx0ZWxlbSA9IGVsZW1bIGRpciBdIHx8IGVsZW07XG5cdFx0XHRcdFx0XHR9IGVsc2UgaWYgKCAob2xkQ2FjaGUgPSB1bmlxdWVDYWNoZVsga2V5IF0pICYmXG5cdFx0XHRcdFx0XHRcdG9sZENhY2hlWyAwIF0gPT09IGRpcnJ1bnMgJiYgb2xkQ2FjaGVbIDEgXSA9PT0gZG9uZU5hbWUgKSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gQXNzaWduIHRvIG5ld0NhY2hlIHNvIHJlc3VsdHMgYmFjay1wcm9wYWdhdGUgdG8gcHJldmlvdXMgZWxlbWVudHNcblx0XHRcdFx0XHRcdFx0cmV0dXJuIChuZXdDYWNoZVsgMiBdID0gb2xkQ2FjaGVbIDIgXSk7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHQvLyBSZXVzZSBuZXdjYWNoZSBzbyByZXN1bHRzIGJhY2stcHJvcGFnYXRlIHRvIHByZXZpb3VzIGVsZW1lbnRzXG5cdFx0XHRcdFx0XHRcdHVuaXF1ZUNhY2hlWyBrZXkgXSA9IG5ld0NhY2hlO1xuXG5cdFx0XHRcdFx0XHRcdC8vIEEgbWF0Y2ggbWVhbnMgd2UncmUgZG9uZTsgYSBmYWlsIG1lYW5zIHdlIGhhdmUgdG8ga2VlcCBjaGVja2luZ1xuXHRcdFx0XHRcdFx0XHRpZiAoIChuZXdDYWNoZVsgMiBdID0gbWF0Y2hlciggZWxlbSwgY29udGV4dCwgeG1sICkpICkge1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fTtcbn1cblxuZnVuY3Rpb24gZWxlbWVudE1hdGNoZXIoIG1hdGNoZXJzICkge1xuXHRyZXR1cm4gbWF0Y2hlcnMubGVuZ3RoID4gMSA/XG5cdFx0ZnVuY3Rpb24oIGVsZW0sIGNvbnRleHQsIHhtbCApIHtcblx0XHRcdHZhciBpID0gbWF0Y2hlcnMubGVuZ3RoO1xuXHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRcdGlmICggIW1hdGNoZXJzW2ldKCBlbGVtLCBjb250ZXh0LCB4bWwgKSApIHtcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH0gOlxuXHRcdG1hdGNoZXJzWzBdO1xufVxuXG5mdW5jdGlvbiBtdWx0aXBsZUNvbnRleHRzKCBzZWxlY3RvciwgY29udGV4dHMsIHJlc3VsdHMgKSB7XG5cdHZhciBpID0gMCxcblx0XHRsZW4gPSBjb250ZXh0cy5sZW5ndGg7XG5cdGZvciAoIDsgaSA8IGxlbjsgaSsrICkge1xuXHRcdFNpenpsZSggc2VsZWN0b3IsIGNvbnRleHRzW2ldLCByZXN1bHRzICk7XG5cdH1cblx0cmV0dXJuIHJlc3VsdHM7XG59XG5cbmZ1bmN0aW9uIGNvbmRlbnNlKCB1bm1hdGNoZWQsIG1hcCwgZmlsdGVyLCBjb250ZXh0LCB4bWwgKSB7XG5cdHZhciBlbGVtLFxuXHRcdG5ld1VubWF0Y2hlZCA9IFtdLFxuXHRcdGkgPSAwLFxuXHRcdGxlbiA9IHVubWF0Y2hlZC5sZW5ndGgsXG5cdFx0bWFwcGVkID0gbWFwICE9IG51bGw7XG5cblx0Zm9yICggOyBpIDwgbGVuOyBpKysgKSB7XG5cdFx0aWYgKCAoZWxlbSA9IHVubWF0Y2hlZFtpXSkgKSB7XG5cdFx0XHRpZiAoICFmaWx0ZXIgfHwgZmlsdGVyKCBlbGVtLCBjb250ZXh0LCB4bWwgKSApIHtcblx0XHRcdFx0bmV3VW5tYXRjaGVkLnB1c2goIGVsZW0gKTtcblx0XHRcdFx0aWYgKCBtYXBwZWQgKSB7XG5cdFx0XHRcdFx0bWFwLnB1c2goIGkgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiBuZXdVbm1hdGNoZWQ7XG59XG5cbmZ1bmN0aW9uIHNldE1hdGNoZXIoIHByZUZpbHRlciwgc2VsZWN0b3IsIG1hdGNoZXIsIHBvc3RGaWx0ZXIsIHBvc3RGaW5kZXIsIHBvc3RTZWxlY3RvciApIHtcblx0aWYgKCBwb3N0RmlsdGVyICYmICFwb3N0RmlsdGVyWyBleHBhbmRvIF0gKSB7XG5cdFx0cG9zdEZpbHRlciA9IHNldE1hdGNoZXIoIHBvc3RGaWx0ZXIgKTtcblx0fVxuXHRpZiAoIHBvc3RGaW5kZXIgJiYgIXBvc3RGaW5kZXJbIGV4cGFuZG8gXSApIHtcblx0XHRwb3N0RmluZGVyID0gc2V0TWF0Y2hlciggcG9zdEZpbmRlciwgcG9zdFNlbGVjdG9yICk7XG5cdH1cblx0cmV0dXJuIG1hcmtGdW5jdGlvbihmdW5jdGlvbiggc2VlZCwgcmVzdWx0cywgY29udGV4dCwgeG1sICkge1xuXHRcdHZhciB0ZW1wLCBpLCBlbGVtLFxuXHRcdFx0cHJlTWFwID0gW10sXG5cdFx0XHRwb3N0TWFwID0gW10sXG5cdFx0XHRwcmVleGlzdGluZyA9IHJlc3VsdHMubGVuZ3RoLFxuXG5cdFx0XHQvLyBHZXQgaW5pdGlhbCBlbGVtZW50cyBmcm9tIHNlZWQgb3IgY29udGV4dFxuXHRcdFx0ZWxlbXMgPSBzZWVkIHx8IG11bHRpcGxlQ29udGV4dHMoIHNlbGVjdG9yIHx8IFwiKlwiLCBjb250ZXh0Lm5vZGVUeXBlID8gWyBjb250ZXh0IF0gOiBjb250ZXh0LCBbXSApLFxuXG5cdFx0XHQvLyBQcmVmaWx0ZXIgdG8gZ2V0IG1hdGNoZXIgaW5wdXQsIHByZXNlcnZpbmcgYSBtYXAgZm9yIHNlZWQtcmVzdWx0cyBzeW5jaHJvbml6YXRpb25cblx0XHRcdG1hdGNoZXJJbiA9IHByZUZpbHRlciAmJiAoIHNlZWQgfHwgIXNlbGVjdG9yICkgP1xuXHRcdFx0XHRjb25kZW5zZSggZWxlbXMsIHByZU1hcCwgcHJlRmlsdGVyLCBjb250ZXh0LCB4bWwgKSA6XG5cdFx0XHRcdGVsZW1zLFxuXG5cdFx0XHRtYXRjaGVyT3V0ID0gbWF0Y2hlciA/XG5cdFx0XHRcdC8vIElmIHdlIGhhdmUgYSBwb3N0RmluZGVyLCBvciBmaWx0ZXJlZCBzZWVkLCBvciBub24tc2VlZCBwb3N0RmlsdGVyIG9yIHByZWV4aXN0aW5nIHJlc3VsdHMsXG5cdFx0XHRcdHBvc3RGaW5kZXIgfHwgKCBzZWVkID8gcHJlRmlsdGVyIDogcHJlZXhpc3RpbmcgfHwgcG9zdEZpbHRlciApID9cblxuXHRcdFx0XHRcdC8vIC4uLmludGVybWVkaWF0ZSBwcm9jZXNzaW5nIGlzIG5lY2Vzc2FyeVxuXHRcdFx0XHRcdFtdIDpcblxuXHRcdFx0XHRcdC8vIC4uLm90aGVyd2lzZSB1c2UgcmVzdWx0cyBkaXJlY3RseVxuXHRcdFx0XHRcdHJlc3VsdHMgOlxuXHRcdFx0XHRtYXRjaGVySW47XG5cblx0XHQvLyBGaW5kIHByaW1hcnkgbWF0Y2hlc1xuXHRcdGlmICggbWF0Y2hlciApIHtcblx0XHRcdG1hdGNoZXIoIG1hdGNoZXJJbiwgbWF0Y2hlck91dCwgY29udGV4dCwgeG1sICk7XG5cdFx0fVxuXG5cdFx0Ly8gQXBwbHkgcG9zdEZpbHRlclxuXHRcdGlmICggcG9zdEZpbHRlciApIHtcblx0XHRcdHRlbXAgPSBjb25kZW5zZSggbWF0Y2hlck91dCwgcG9zdE1hcCApO1xuXHRcdFx0cG9zdEZpbHRlciggdGVtcCwgW10sIGNvbnRleHQsIHhtbCApO1xuXG5cdFx0XHQvLyBVbi1tYXRjaCBmYWlsaW5nIGVsZW1lbnRzIGJ5IG1vdmluZyB0aGVtIGJhY2sgdG8gbWF0Y2hlckluXG5cdFx0XHRpID0gdGVtcC5sZW5ndGg7XG5cdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0aWYgKCAoZWxlbSA9IHRlbXBbaV0pICkge1xuXHRcdFx0XHRcdG1hdGNoZXJPdXRbIHBvc3RNYXBbaV0gXSA9ICEobWF0Y2hlckluWyBwb3N0TWFwW2ldIF0gPSBlbGVtKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmICggc2VlZCApIHtcblx0XHRcdGlmICggcG9zdEZpbmRlciB8fCBwcmVGaWx0ZXIgKSB7XG5cdFx0XHRcdGlmICggcG9zdEZpbmRlciApIHtcblx0XHRcdFx0XHQvLyBHZXQgdGhlIGZpbmFsIG1hdGNoZXJPdXQgYnkgY29uZGVuc2luZyB0aGlzIGludGVybWVkaWF0ZSBpbnRvIHBvc3RGaW5kZXIgY29udGV4dHNcblx0XHRcdFx0XHR0ZW1wID0gW107XG5cdFx0XHRcdFx0aSA9IG1hdGNoZXJPdXQubGVuZ3RoO1xuXHRcdFx0XHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0XHRcdFx0aWYgKCAoZWxlbSA9IG1hdGNoZXJPdXRbaV0pICkge1xuXHRcdFx0XHRcdFx0XHQvLyBSZXN0b3JlIG1hdGNoZXJJbiBzaW5jZSBlbGVtIGlzIG5vdCB5ZXQgYSBmaW5hbCBtYXRjaFxuXHRcdFx0XHRcdFx0XHR0ZW1wLnB1c2goIChtYXRjaGVySW5baV0gPSBlbGVtKSApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRwb3N0RmluZGVyKCBudWxsLCAobWF0Y2hlck91dCA9IFtdKSwgdGVtcCwgeG1sICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBNb3ZlIG1hdGNoZWQgZWxlbWVudHMgZnJvbSBzZWVkIHRvIHJlc3VsdHMgdG8ga2VlcCB0aGVtIHN5bmNocm9uaXplZFxuXHRcdFx0XHRpID0gbWF0Y2hlck91dC5sZW5ndGg7XG5cdFx0XHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0XHRcdGlmICggKGVsZW0gPSBtYXRjaGVyT3V0W2ldKSAmJlxuXHRcdFx0XHRcdFx0KHRlbXAgPSBwb3N0RmluZGVyID8gaW5kZXhPZiggc2VlZCwgZWxlbSApIDogcHJlTWFwW2ldKSA+IC0xICkge1xuXG5cdFx0XHRcdFx0XHRzZWVkW3RlbXBdID0gIShyZXN1bHRzW3RlbXBdID0gZWxlbSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHQvLyBBZGQgZWxlbWVudHMgdG8gcmVzdWx0cywgdGhyb3VnaCBwb3N0RmluZGVyIGlmIGRlZmluZWRcblx0XHR9IGVsc2Uge1xuXHRcdFx0bWF0Y2hlck91dCA9IGNvbmRlbnNlKFxuXHRcdFx0XHRtYXRjaGVyT3V0ID09PSByZXN1bHRzID9cblx0XHRcdFx0XHRtYXRjaGVyT3V0LnNwbGljZSggcHJlZXhpc3RpbmcsIG1hdGNoZXJPdXQubGVuZ3RoICkgOlxuXHRcdFx0XHRcdG1hdGNoZXJPdXRcblx0XHRcdCk7XG5cdFx0XHRpZiAoIHBvc3RGaW5kZXIgKSB7XG5cdFx0XHRcdHBvc3RGaW5kZXIoIG51bGwsIHJlc3VsdHMsIG1hdGNoZXJPdXQsIHhtbCApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cHVzaC5hcHBseSggcmVzdWx0cywgbWF0Y2hlck91dCApO1xuXHRcdFx0fVxuXHRcdH1cblx0fSk7XG59XG5cbmZ1bmN0aW9uIG1hdGNoZXJGcm9tVG9rZW5zKCB0b2tlbnMgKSB7XG5cdHZhciBjaGVja0NvbnRleHQsIG1hdGNoZXIsIGosXG5cdFx0bGVuID0gdG9rZW5zLmxlbmd0aCxcblx0XHRsZWFkaW5nUmVsYXRpdmUgPSBFeHByLnJlbGF0aXZlWyB0b2tlbnNbMF0udHlwZSBdLFxuXHRcdGltcGxpY2l0UmVsYXRpdmUgPSBsZWFkaW5nUmVsYXRpdmUgfHwgRXhwci5yZWxhdGl2ZVtcIiBcIl0sXG5cdFx0aSA9IGxlYWRpbmdSZWxhdGl2ZSA/IDEgOiAwLFxuXG5cdFx0Ly8gVGhlIGZvdW5kYXRpb25hbCBtYXRjaGVyIGVuc3VyZXMgdGhhdCBlbGVtZW50cyBhcmUgcmVhY2hhYmxlIGZyb20gdG9wLWxldmVsIGNvbnRleHQocylcblx0XHRtYXRjaENvbnRleHQgPSBhZGRDb21iaW5hdG9yKCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiBlbGVtID09PSBjaGVja0NvbnRleHQ7XG5cdFx0fSwgaW1wbGljaXRSZWxhdGl2ZSwgdHJ1ZSApLFxuXHRcdG1hdGNoQW55Q29udGV4dCA9IGFkZENvbWJpbmF0b3IoIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuIGluZGV4T2YoIGNoZWNrQ29udGV4dCwgZWxlbSApID4gLTE7XG5cdFx0fSwgaW1wbGljaXRSZWxhdGl2ZSwgdHJ1ZSApLFxuXHRcdG1hdGNoZXJzID0gWyBmdW5jdGlvbiggZWxlbSwgY29udGV4dCwgeG1sICkge1xuXHRcdFx0dmFyIHJldCA9ICggIWxlYWRpbmdSZWxhdGl2ZSAmJiAoIHhtbCB8fCBjb250ZXh0ICE9PSBvdXRlcm1vc3RDb250ZXh0ICkgKSB8fCAoXG5cdFx0XHRcdChjaGVja0NvbnRleHQgPSBjb250ZXh0KS5ub2RlVHlwZSA/XG5cdFx0XHRcdFx0bWF0Y2hDb250ZXh0KCBlbGVtLCBjb250ZXh0LCB4bWwgKSA6XG5cdFx0XHRcdFx0bWF0Y2hBbnlDb250ZXh0KCBlbGVtLCBjb250ZXh0LCB4bWwgKSApO1xuXHRcdFx0Ly8gQXZvaWQgaGFuZ2luZyBvbnRvIGVsZW1lbnQgKGlzc3VlICMyOTkpXG5cdFx0XHRjaGVja0NvbnRleHQgPSBudWxsO1xuXHRcdFx0cmV0dXJuIHJldDtcblx0XHR9IF07XG5cblx0Zm9yICggOyBpIDwgbGVuOyBpKysgKSB7XG5cdFx0aWYgKCAobWF0Y2hlciA9IEV4cHIucmVsYXRpdmVbIHRva2Vuc1tpXS50eXBlIF0pICkge1xuXHRcdFx0bWF0Y2hlcnMgPSBbIGFkZENvbWJpbmF0b3IoZWxlbWVudE1hdGNoZXIoIG1hdGNoZXJzICksIG1hdGNoZXIpIF07XG5cdFx0fSBlbHNlIHtcblx0XHRcdG1hdGNoZXIgPSBFeHByLmZpbHRlclsgdG9rZW5zW2ldLnR5cGUgXS5hcHBseSggbnVsbCwgdG9rZW5zW2ldLm1hdGNoZXMgKTtcblxuXHRcdFx0Ly8gUmV0dXJuIHNwZWNpYWwgdXBvbiBzZWVpbmcgYSBwb3NpdGlvbmFsIG1hdGNoZXJcblx0XHRcdGlmICggbWF0Y2hlclsgZXhwYW5kbyBdICkge1xuXHRcdFx0XHQvLyBGaW5kIHRoZSBuZXh0IHJlbGF0aXZlIG9wZXJhdG9yIChpZiBhbnkpIGZvciBwcm9wZXIgaGFuZGxpbmdcblx0XHRcdFx0aiA9ICsraTtcblx0XHRcdFx0Zm9yICggOyBqIDwgbGVuOyBqKysgKSB7XG5cdFx0XHRcdFx0aWYgKCBFeHByLnJlbGF0aXZlWyB0b2tlbnNbal0udHlwZSBdICkge1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBzZXRNYXRjaGVyKFxuXHRcdFx0XHRcdGkgPiAxICYmIGVsZW1lbnRNYXRjaGVyKCBtYXRjaGVycyApLFxuXHRcdFx0XHRcdGkgPiAxICYmIHRvU2VsZWN0b3IoXG5cdFx0XHRcdFx0XHQvLyBJZiB0aGUgcHJlY2VkaW5nIHRva2VuIHdhcyBhIGRlc2NlbmRhbnQgY29tYmluYXRvciwgaW5zZXJ0IGFuIGltcGxpY2l0IGFueS1lbGVtZW50IGAqYFxuXHRcdFx0XHRcdFx0dG9rZW5zLnNsaWNlKCAwLCBpIC0gMSApLmNvbmNhdCh7IHZhbHVlOiB0b2tlbnNbIGkgLSAyIF0udHlwZSA9PT0gXCIgXCIgPyBcIipcIiA6IFwiXCIgfSlcblx0XHRcdFx0XHQpLnJlcGxhY2UoIHJ0cmltLCBcIiQxXCIgKSxcblx0XHRcdFx0XHRtYXRjaGVyLFxuXHRcdFx0XHRcdGkgPCBqICYmIG1hdGNoZXJGcm9tVG9rZW5zKCB0b2tlbnMuc2xpY2UoIGksIGogKSApLFxuXHRcdFx0XHRcdGogPCBsZW4gJiYgbWF0Y2hlckZyb21Ub2tlbnMoICh0b2tlbnMgPSB0b2tlbnMuc2xpY2UoIGogKSkgKSxcblx0XHRcdFx0XHRqIDwgbGVuICYmIHRvU2VsZWN0b3IoIHRva2VucyApXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0XHRtYXRjaGVycy5wdXNoKCBtYXRjaGVyICk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGVsZW1lbnRNYXRjaGVyKCBtYXRjaGVycyApO1xufVxuXG5mdW5jdGlvbiBtYXRjaGVyRnJvbUdyb3VwTWF0Y2hlcnMoIGVsZW1lbnRNYXRjaGVycywgc2V0TWF0Y2hlcnMgKSB7XG5cdHZhciBieVNldCA9IHNldE1hdGNoZXJzLmxlbmd0aCA+IDAsXG5cdFx0YnlFbGVtZW50ID0gZWxlbWVudE1hdGNoZXJzLmxlbmd0aCA+IDAsXG5cdFx0c3VwZXJNYXRjaGVyID0gZnVuY3Rpb24oIHNlZWQsIGNvbnRleHQsIHhtbCwgcmVzdWx0cywgb3V0ZXJtb3N0ICkge1xuXHRcdFx0dmFyIGVsZW0sIGosIG1hdGNoZXIsXG5cdFx0XHRcdG1hdGNoZWRDb3VudCA9IDAsXG5cdFx0XHRcdGkgPSBcIjBcIixcblx0XHRcdFx0dW5tYXRjaGVkID0gc2VlZCAmJiBbXSxcblx0XHRcdFx0c2V0TWF0Y2hlZCA9IFtdLFxuXHRcdFx0XHRjb250ZXh0QmFja3VwID0gb3V0ZXJtb3N0Q29udGV4dCxcblx0XHRcdFx0Ly8gV2UgbXVzdCBhbHdheXMgaGF2ZSBlaXRoZXIgc2VlZCBlbGVtZW50cyBvciBvdXRlcm1vc3QgY29udGV4dFxuXHRcdFx0XHRlbGVtcyA9IHNlZWQgfHwgYnlFbGVtZW50ICYmIEV4cHIuZmluZFtcIlRBR1wiXSggXCIqXCIsIG91dGVybW9zdCApLFxuXHRcdFx0XHQvLyBVc2UgaW50ZWdlciBkaXJydW5zIGlmZiB0aGlzIGlzIHRoZSBvdXRlcm1vc3QgbWF0Y2hlclxuXHRcdFx0XHRkaXJydW5zVW5pcXVlID0gKGRpcnJ1bnMgKz0gY29udGV4dEJhY2t1cCA9PSBudWxsID8gMSA6IE1hdGgucmFuZG9tKCkgfHwgMC4xKSxcblx0XHRcdFx0bGVuID0gZWxlbXMubGVuZ3RoO1xuXG5cdFx0XHRpZiAoIG91dGVybW9zdCApIHtcblx0XHRcdFx0b3V0ZXJtb3N0Q29udGV4dCA9IGNvbnRleHQgPT09IGRvY3VtZW50IHx8IGNvbnRleHQgfHwgb3V0ZXJtb3N0O1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBBZGQgZWxlbWVudHMgcGFzc2luZyBlbGVtZW50TWF0Y2hlcnMgZGlyZWN0bHkgdG8gcmVzdWx0c1xuXHRcdFx0Ly8gU3VwcG9ydDogSUU8OSwgU2FmYXJpXG5cdFx0XHQvLyBUb2xlcmF0ZSBOb2RlTGlzdCBwcm9wZXJ0aWVzIChJRTogXCJsZW5ndGhcIjsgU2FmYXJpOiA8bnVtYmVyPikgbWF0Y2hpbmcgZWxlbWVudHMgYnkgaWRcblx0XHRcdGZvciAoIDsgaSAhPT0gbGVuICYmIChlbGVtID0gZWxlbXNbaV0pICE9IG51bGw7IGkrKyApIHtcblx0XHRcdFx0aWYgKCBieUVsZW1lbnQgJiYgZWxlbSApIHtcblx0XHRcdFx0XHRqID0gMDtcblx0XHRcdFx0XHRpZiAoICFjb250ZXh0ICYmIGVsZW0ub3duZXJEb2N1bWVudCAhPT0gZG9jdW1lbnQgKSB7XG5cdFx0XHRcdFx0XHRzZXREb2N1bWVudCggZWxlbSApO1xuXHRcdFx0XHRcdFx0eG1sID0gIWRvY3VtZW50SXNIVE1MO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHR3aGlsZSAoIChtYXRjaGVyID0gZWxlbWVudE1hdGNoZXJzW2orK10pICkge1xuXHRcdFx0XHRcdFx0aWYgKCBtYXRjaGVyKCBlbGVtLCBjb250ZXh0IHx8IGRvY3VtZW50LCB4bWwpICkge1xuXHRcdFx0XHRcdFx0XHRyZXN1bHRzLnB1c2goIGVsZW0gKTtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmICggb3V0ZXJtb3N0ICkge1xuXHRcdFx0XHRcdFx0ZGlycnVucyA9IGRpcnJ1bnNVbmlxdWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gVHJhY2sgdW5tYXRjaGVkIGVsZW1lbnRzIGZvciBzZXQgZmlsdGVyc1xuXHRcdFx0XHRpZiAoIGJ5U2V0ICkge1xuXHRcdFx0XHRcdC8vIFRoZXkgd2lsbCBoYXZlIGdvbmUgdGhyb3VnaCBhbGwgcG9zc2libGUgbWF0Y2hlcnNcblx0XHRcdFx0XHRpZiAoIChlbGVtID0gIW1hdGNoZXIgJiYgZWxlbSkgKSB7XG5cdFx0XHRcdFx0XHRtYXRjaGVkQ291bnQtLTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBMZW5ndGhlbiB0aGUgYXJyYXkgZm9yIGV2ZXJ5IGVsZW1lbnQsIG1hdGNoZWQgb3Igbm90XG5cdFx0XHRcdFx0aWYgKCBzZWVkICkge1xuXHRcdFx0XHRcdFx0dW5tYXRjaGVkLnB1c2goIGVsZW0gKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gYGlgIGlzIG5vdyB0aGUgY291bnQgb2YgZWxlbWVudHMgdmlzaXRlZCBhYm92ZSwgYW5kIGFkZGluZyBpdCB0byBgbWF0Y2hlZENvdW50YFxuXHRcdFx0Ly8gbWFrZXMgdGhlIGxhdHRlciBub25uZWdhdGl2ZS5cblx0XHRcdG1hdGNoZWRDb3VudCArPSBpO1xuXG5cdFx0XHQvLyBBcHBseSBzZXQgZmlsdGVycyB0byB1bm1hdGNoZWQgZWxlbWVudHNcblx0XHRcdC8vIE5PVEU6IFRoaXMgY2FuIGJlIHNraXBwZWQgaWYgdGhlcmUgYXJlIG5vIHVubWF0Y2hlZCBlbGVtZW50cyAoaS5lLiwgYG1hdGNoZWRDb3VudGBcblx0XHRcdC8vIGVxdWFscyBgaWApLCB1bmxlc3Mgd2UgZGlkbid0IHZpc2l0IF9hbnlfIGVsZW1lbnRzIGluIHRoZSBhYm92ZSBsb29wIGJlY2F1c2Ugd2UgaGF2ZVxuXHRcdFx0Ly8gbm8gZWxlbWVudCBtYXRjaGVycyBhbmQgbm8gc2VlZC5cblx0XHRcdC8vIEluY3JlbWVudGluZyBhbiBpbml0aWFsbHktc3RyaW5nIFwiMFwiIGBpYCBhbGxvd3MgYGlgIHRvIHJlbWFpbiBhIHN0cmluZyBvbmx5IGluIHRoYXRcblx0XHRcdC8vIGNhc2UsIHdoaWNoIHdpbGwgcmVzdWx0IGluIGEgXCIwMFwiIGBtYXRjaGVkQ291bnRgIHRoYXQgZGlmZmVycyBmcm9tIGBpYCBidXQgaXMgYWxzb1xuXHRcdFx0Ly8gbnVtZXJpY2FsbHkgemVyby5cblx0XHRcdGlmICggYnlTZXQgJiYgaSAhPT0gbWF0Y2hlZENvdW50ICkge1xuXHRcdFx0XHRqID0gMDtcblx0XHRcdFx0d2hpbGUgKCAobWF0Y2hlciA9IHNldE1hdGNoZXJzW2orK10pICkge1xuXHRcdFx0XHRcdG1hdGNoZXIoIHVubWF0Y2hlZCwgc2V0TWF0Y2hlZCwgY29udGV4dCwgeG1sICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoIHNlZWQgKSB7XG5cdFx0XHRcdFx0Ly8gUmVpbnRlZ3JhdGUgZWxlbWVudCBtYXRjaGVzIHRvIGVsaW1pbmF0ZSB0aGUgbmVlZCBmb3Igc29ydGluZ1xuXHRcdFx0XHRcdGlmICggbWF0Y2hlZENvdW50ID4gMCApIHtcblx0XHRcdFx0XHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0XHRcdFx0XHRpZiAoICEodW5tYXRjaGVkW2ldIHx8IHNldE1hdGNoZWRbaV0pICkge1xuXHRcdFx0XHRcdFx0XHRcdHNldE1hdGNoZWRbaV0gPSBwb3AuY2FsbCggcmVzdWx0cyApO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gRGlzY2FyZCBpbmRleCBwbGFjZWhvbGRlciB2YWx1ZXMgdG8gZ2V0IG9ubHkgYWN0dWFsIG1hdGNoZXNcblx0XHRcdFx0XHRzZXRNYXRjaGVkID0gY29uZGVuc2UoIHNldE1hdGNoZWQgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIEFkZCBtYXRjaGVzIHRvIHJlc3VsdHNcblx0XHRcdFx0cHVzaC5hcHBseSggcmVzdWx0cywgc2V0TWF0Y2hlZCApO1xuXG5cdFx0XHRcdC8vIFNlZWRsZXNzIHNldCBtYXRjaGVzIHN1Y2NlZWRpbmcgbXVsdGlwbGUgc3VjY2Vzc2Z1bCBtYXRjaGVycyBzdGlwdWxhdGUgc29ydGluZ1xuXHRcdFx0XHRpZiAoIG91dGVybW9zdCAmJiAhc2VlZCAmJiBzZXRNYXRjaGVkLmxlbmd0aCA+IDAgJiZcblx0XHRcdFx0XHQoIG1hdGNoZWRDb3VudCArIHNldE1hdGNoZXJzLmxlbmd0aCApID4gMSApIHtcblxuXHRcdFx0XHRcdFNpenpsZS51bmlxdWVTb3J0KCByZXN1bHRzICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gT3ZlcnJpZGUgbWFuaXB1bGF0aW9uIG9mIGdsb2JhbHMgYnkgbmVzdGVkIG1hdGNoZXJzXG5cdFx0XHRpZiAoIG91dGVybW9zdCApIHtcblx0XHRcdFx0ZGlycnVucyA9IGRpcnJ1bnNVbmlxdWU7XG5cdFx0XHRcdG91dGVybW9zdENvbnRleHQgPSBjb250ZXh0QmFja3VwO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gdW5tYXRjaGVkO1xuXHRcdH07XG5cblx0cmV0dXJuIGJ5U2V0ID9cblx0XHRtYXJrRnVuY3Rpb24oIHN1cGVyTWF0Y2hlciApIDpcblx0XHRzdXBlck1hdGNoZXI7XG59XG5cbmNvbXBpbGUgPSBTaXp6bGUuY29tcGlsZSA9IGZ1bmN0aW9uKCBzZWxlY3RvciwgbWF0Y2ggLyogSW50ZXJuYWwgVXNlIE9ubHkgKi8gKSB7XG5cdHZhciBpLFxuXHRcdHNldE1hdGNoZXJzID0gW10sXG5cdFx0ZWxlbWVudE1hdGNoZXJzID0gW10sXG5cdFx0Y2FjaGVkID0gY29tcGlsZXJDYWNoZVsgc2VsZWN0b3IgKyBcIiBcIiBdO1xuXG5cdGlmICggIWNhY2hlZCApIHtcblx0XHQvLyBHZW5lcmF0ZSBhIGZ1bmN0aW9uIG9mIHJlY3Vyc2l2ZSBmdW5jdGlvbnMgdGhhdCBjYW4gYmUgdXNlZCB0byBjaGVjayBlYWNoIGVsZW1lbnRcblx0XHRpZiAoICFtYXRjaCApIHtcblx0XHRcdG1hdGNoID0gdG9rZW5pemUoIHNlbGVjdG9yICk7XG5cdFx0fVxuXHRcdGkgPSBtYXRjaC5sZW5ndGg7XG5cdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRjYWNoZWQgPSBtYXRjaGVyRnJvbVRva2VucyggbWF0Y2hbaV0gKTtcblx0XHRcdGlmICggY2FjaGVkWyBleHBhbmRvIF0gKSB7XG5cdFx0XHRcdHNldE1hdGNoZXJzLnB1c2goIGNhY2hlZCApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZWxlbWVudE1hdGNoZXJzLnB1c2goIGNhY2hlZCApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIENhY2hlIHRoZSBjb21waWxlZCBmdW5jdGlvblxuXHRcdGNhY2hlZCA9IGNvbXBpbGVyQ2FjaGUoIHNlbGVjdG9yLCBtYXRjaGVyRnJvbUdyb3VwTWF0Y2hlcnMoIGVsZW1lbnRNYXRjaGVycywgc2V0TWF0Y2hlcnMgKSApO1xuXG5cdFx0Ly8gU2F2ZSBzZWxlY3RvciBhbmQgdG9rZW5pemF0aW9uXG5cdFx0Y2FjaGVkLnNlbGVjdG9yID0gc2VsZWN0b3I7XG5cdH1cblx0cmV0dXJuIGNhY2hlZDtcbn07XG5cbi8qKlxuICogQSBsb3ctbGV2ZWwgc2VsZWN0aW9uIGZ1bmN0aW9uIHRoYXQgd29ya3Mgd2l0aCBTaXp6bGUncyBjb21waWxlZFxuICogIHNlbGVjdG9yIGZ1bmN0aW9uc1xuICogQHBhcmFtIHtTdHJpbmd8RnVuY3Rpb259IHNlbGVjdG9yIEEgc2VsZWN0b3Igb3IgYSBwcmUtY29tcGlsZWRcbiAqICBzZWxlY3RvciBmdW5jdGlvbiBidWlsdCB3aXRoIFNpenpsZS5jb21waWxlXG4gKiBAcGFyYW0ge0VsZW1lbnR9IGNvbnRleHRcbiAqIEBwYXJhbSB7QXJyYXl9IFtyZXN1bHRzXVxuICogQHBhcmFtIHtBcnJheX0gW3NlZWRdIEEgc2V0IG9mIGVsZW1lbnRzIHRvIG1hdGNoIGFnYWluc3RcbiAqL1xuc2VsZWN0ID0gU2l6emxlLnNlbGVjdCA9IGZ1bmN0aW9uKCBzZWxlY3RvciwgY29udGV4dCwgcmVzdWx0cywgc2VlZCApIHtcblx0dmFyIGksIHRva2VucywgdG9rZW4sIHR5cGUsIGZpbmQsXG5cdFx0Y29tcGlsZWQgPSB0eXBlb2Ygc2VsZWN0b3IgPT09IFwiZnVuY3Rpb25cIiAmJiBzZWxlY3Rvcixcblx0XHRtYXRjaCA9ICFzZWVkICYmIHRva2VuaXplKCAoc2VsZWN0b3IgPSBjb21waWxlZC5zZWxlY3RvciB8fCBzZWxlY3RvcikgKTtcblxuXHRyZXN1bHRzID0gcmVzdWx0cyB8fCBbXTtcblxuXHQvLyBUcnkgdG8gbWluaW1pemUgb3BlcmF0aW9ucyBpZiB0aGVyZSBpcyBvbmx5IG9uZSBzZWxlY3RvciBpbiB0aGUgbGlzdCBhbmQgbm8gc2VlZFxuXHQvLyAodGhlIGxhdHRlciBvZiB3aGljaCBndWFyYW50ZWVzIHVzIGNvbnRleHQpXG5cdGlmICggbWF0Y2gubGVuZ3RoID09PSAxICkge1xuXG5cdFx0Ly8gUmVkdWNlIGNvbnRleHQgaWYgdGhlIGxlYWRpbmcgY29tcG91bmQgc2VsZWN0b3IgaXMgYW4gSURcblx0XHR0b2tlbnMgPSBtYXRjaFswXSA9IG1hdGNoWzBdLnNsaWNlKCAwICk7XG5cdFx0aWYgKCB0b2tlbnMubGVuZ3RoID4gMiAmJiAodG9rZW4gPSB0b2tlbnNbMF0pLnR5cGUgPT09IFwiSURcIiAmJlxuXHRcdFx0XHRjb250ZXh0Lm5vZGVUeXBlID09PSA5ICYmIGRvY3VtZW50SXNIVE1MICYmIEV4cHIucmVsYXRpdmVbIHRva2Vuc1sxXS50eXBlIF0gKSB7XG5cblx0XHRcdGNvbnRleHQgPSAoIEV4cHIuZmluZFtcIklEXCJdKCB0b2tlbi5tYXRjaGVzWzBdLnJlcGxhY2UocnVuZXNjYXBlLCBmdW5lc2NhcGUpLCBjb250ZXh0ICkgfHwgW10gKVswXTtcblx0XHRcdGlmICggIWNvbnRleHQgKSB7XG5cdFx0XHRcdHJldHVybiByZXN1bHRzO1xuXG5cdFx0XHQvLyBQcmVjb21waWxlZCBtYXRjaGVycyB3aWxsIHN0aWxsIHZlcmlmeSBhbmNlc3RyeSwgc28gc3RlcCB1cCBhIGxldmVsXG5cdFx0XHR9IGVsc2UgaWYgKCBjb21waWxlZCApIHtcblx0XHRcdFx0Y29udGV4dCA9IGNvbnRleHQucGFyZW50Tm9kZTtcblx0XHRcdH1cblxuXHRcdFx0c2VsZWN0b3IgPSBzZWxlY3Rvci5zbGljZSggdG9rZW5zLnNoaWZ0KCkudmFsdWUubGVuZ3RoICk7XG5cdFx0fVxuXG5cdFx0Ly8gRmV0Y2ggYSBzZWVkIHNldCBmb3IgcmlnaHQtdG8tbGVmdCBtYXRjaGluZ1xuXHRcdGkgPSBtYXRjaEV4cHJbXCJuZWVkc0NvbnRleHRcIl0udGVzdCggc2VsZWN0b3IgKSA/IDAgOiB0b2tlbnMubGVuZ3RoO1xuXHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0dG9rZW4gPSB0b2tlbnNbaV07XG5cblx0XHRcdC8vIEFib3J0IGlmIHdlIGhpdCBhIGNvbWJpbmF0b3Jcblx0XHRcdGlmICggRXhwci5yZWxhdGl2ZVsgKHR5cGUgPSB0b2tlbi50eXBlKSBdICkge1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHRcdGlmICggKGZpbmQgPSBFeHByLmZpbmRbIHR5cGUgXSkgKSB7XG5cdFx0XHRcdC8vIFNlYXJjaCwgZXhwYW5kaW5nIGNvbnRleHQgZm9yIGxlYWRpbmcgc2libGluZyBjb21iaW5hdG9yc1xuXHRcdFx0XHRpZiAoIChzZWVkID0gZmluZChcblx0XHRcdFx0XHR0b2tlbi5tYXRjaGVzWzBdLnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICksXG5cdFx0XHRcdFx0cnNpYmxpbmcudGVzdCggdG9rZW5zWzBdLnR5cGUgKSAmJiB0ZXN0Q29udGV4dCggY29udGV4dC5wYXJlbnROb2RlICkgfHwgY29udGV4dFxuXHRcdFx0XHQpKSApIHtcblxuXHRcdFx0XHRcdC8vIElmIHNlZWQgaXMgZW1wdHkgb3Igbm8gdG9rZW5zIHJlbWFpbiwgd2UgY2FuIHJldHVybiBlYXJseVxuXHRcdFx0XHRcdHRva2Vucy5zcGxpY2UoIGksIDEgKTtcblx0XHRcdFx0XHRzZWxlY3RvciA9IHNlZWQubGVuZ3RoICYmIHRvU2VsZWN0b3IoIHRva2VucyApO1xuXHRcdFx0XHRcdGlmICggIXNlbGVjdG9yICkge1xuXHRcdFx0XHRcdFx0cHVzaC5hcHBseSggcmVzdWx0cywgc2VlZCApO1xuXHRcdFx0XHRcdFx0cmV0dXJuIHJlc3VsdHM7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBDb21waWxlIGFuZCBleGVjdXRlIGEgZmlsdGVyaW5nIGZ1bmN0aW9uIGlmIG9uZSBpcyBub3QgcHJvdmlkZWRcblx0Ly8gUHJvdmlkZSBgbWF0Y2hgIHRvIGF2b2lkIHJldG9rZW5pemF0aW9uIGlmIHdlIG1vZGlmaWVkIHRoZSBzZWxlY3RvciBhYm92ZVxuXHQoIGNvbXBpbGVkIHx8IGNvbXBpbGUoIHNlbGVjdG9yLCBtYXRjaCApICkoXG5cdFx0c2VlZCxcblx0XHRjb250ZXh0LFxuXHRcdCFkb2N1bWVudElzSFRNTCxcblx0XHRyZXN1bHRzLFxuXHRcdCFjb250ZXh0IHx8IHJzaWJsaW5nLnRlc3QoIHNlbGVjdG9yICkgJiYgdGVzdENvbnRleHQoIGNvbnRleHQucGFyZW50Tm9kZSApIHx8IGNvbnRleHRcblx0KTtcblx0cmV0dXJuIHJlc3VsdHM7XG59O1xuXG4vLyBPbmUtdGltZSBhc3NpZ25tZW50c1xuXG4vLyBTb3J0IHN0YWJpbGl0eVxuc3VwcG9ydC5zb3J0U3RhYmxlID0gZXhwYW5kby5zcGxpdChcIlwiKS5zb3J0KCBzb3J0T3JkZXIgKS5qb2luKFwiXCIpID09PSBleHBhbmRvO1xuXG4vLyBTdXBwb3J0OiBDaHJvbWUgMTQtMzUrXG4vLyBBbHdheXMgYXNzdW1lIGR1cGxpY2F0ZXMgaWYgdGhleSBhcmVuJ3QgcGFzc2VkIHRvIHRoZSBjb21wYXJpc29uIGZ1bmN0aW9uXG5zdXBwb3J0LmRldGVjdER1cGxpY2F0ZXMgPSAhIWhhc0R1cGxpY2F0ZTtcblxuLy8gSW5pdGlhbGl6ZSBhZ2FpbnN0IHRoZSBkZWZhdWx0IGRvY3VtZW50XG5zZXREb2N1bWVudCgpO1xuXG4vLyBTdXBwb3J0OiBXZWJraXQ8NTM3LjMyIC0gU2FmYXJpIDYuMC4zL0Nocm9tZSAyNSAoZml4ZWQgaW4gQ2hyb21lIDI3KVxuLy8gRGV0YWNoZWQgbm9kZXMgY29uZm91bmRpbmdseSBmb2xsb3cgKmVhY2ggb3RoZXIqXG5zdXBwb3J0LnNvcnREZXRhY2hlZCA9IGFzc2VydChmdW5jdGlvbiggZWwgKSB7XG5cdC8vIFNob3VsZCByZXR1cm4gMSwgYnV0IHJldHVybnMgNCAoZm9sbG93aW5nKVxuXHRyZXR1cm4gZWwuY29tcGFyZURvY3VtZW50UG9zaXRpb24oIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJmaWVsZHNldFwiKSApICYgMTtcbn0pO1xuXG4vLyBTdXBwb3J0OiBJRTw4XG4vLyBQcmV2ZW50IGF0dHJpYnV0ZS9wcm9wZXJ0eSBcImludGVycG9sYXRpb25cIlxuLy8gaHR0cHM6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS9tczUzNjQyOSUyOFZTLjg1JTI5LmFzcHhcbmlmICggIWFzc2VydChmdW5jdGlvbiggZWwgKSB7XG5cdGVsLmlubmVySFRNTCA9IFwiPGEgaHJlZj0nIyc+PC9hPlwiO1xuXHRyZXR1cm4gZWwuZmlyc3RDaGlsZC5nZXRBdHRyaWJ1dGUoXCJocmVmXCIpID09PSBcIiNcIiA7XG59KSApIHtcblx0YWRkSGFuZGxlKCBcInR5cGV8aHJlZnxoZWlnaHR8d2lkdGhcIiwgZnVuY3Rpb24oIGVsZW0sIG5hbWUsIGlzWE1MICkge1xuXHRcdGlmICggIWlzWE1MICkge1xuXHRcdFx0cmV0dXJuIGVsZW0uZ2V0QXR0cmlidXRlKCBuYW1lLCBuYW1lLnRvTG93ZXJDYXNlKCkgPT09IFwidHlwZVwiID8gMSA6IDIgKTtcblx0XHR9XG5cdH0pO1xufVxuXG4vLyBTdXBwb3J0OiBJRTw5XG4vLyBVc2UgZGVmYXVsdFZhbHVlIGluIHBsYWNlIG9mIGdldEF0dHJpYnV0ZShcInZhbHVlXCIpXG5pZiAoICFzdXBwb3J0LmF0dHJpYnV0ZXMgfHwgIWFzc2VydChmdW5jdGlvbiggZWwgKSB7XG5cdGVsLmlubmVySFRNTCA9IFwiPGlucHV0Lz5cIjtcblx0ZWwuZmlyc3RDaGlsZC5zZXRBdHRyaWJ1dGUoIFwidmFsdWVcIiwgXCJcIiApO1xuXHRyZXR1cm4gZWwuZmlyc3RDaGlsZC5nZXRBdHRyaWJ1dGUoIFwidmFsdWVcIiApID09PSBcIlwiO1xufSkgKSB7XG5cdGFkZEhhbmRsZSggXCJ2YWx1ZVwiLCBmdW5jdGlvbiggZWxlbSwgbmFtZSwgaXNYTUwgKSB7XG5cdFx0aWYgKCAhaXNYTUwgJiYgZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSBcImlucHV0XCIgKSB7XG5cdFx0XHRyZXR1cm4gZWxlbS5kZWZhdWx0VmFsdWU7XG5cdFx0fVxuXHR9KTtcbn1cblxuLy8gU3VwcG9ydDogSUU8OVxuLy8gVXNlIGdldEF0dHJpYnV0ZU5vZGUgdG8gZmV0Y2ggYm9vbGVhbnMgd2hlbiBnZXRBdHRyaWJ1dGUgbGllc1xuaWYgKCAhYXNzZXJ0KGZ1bmN0aW9uKCBlbCApIHtcblx0cmV0dXJuIGVsLmdldEF0dHJpYnV0ZShcImRpc2FibGVkXCIpID09IG51bGw7XG59KSApIHtcblx0YWRkSGFuZGxlKCBib29sZWFucywgZnVuY3Rpb24oIGVsZW0sIG5hbWUsIGlzWE1MICkge1xuXHRcdHZhciB2YWw7XG5cdFx0aWYgKCAhaXNYTUwgKSB7XG5cdFx0XHRyZXR1cm4gZWxlbVsgbmFtZSBdID09PSB0cnVlID8gbmFtZS50b0xvd2VyQ2FzZSgpIDpcblx0XHRcdFx0XHQodmFsID0gZWxlbS5nZXRBdHRyaWJ1dGVOb2RlKCBuYW1lICkpICYmIHZhbC5zcGVjaWZpZWQgP1xuXHRcdFx0XHRcdHZhbC52YWx1ZSA6XG5cdFx0XHRcdG51bGw7XG5cdFx0fVxuXHR9KTtcbn1cblxucmV0dXJuIFNpenpsZTtcblxufSkoIHdpbmRvdyApO1xuXG5cblxualF1ZXJ5LmZpbmQgPSBTaXp6bGU7XG5qUXVlcnkuZXhwciA9IFNpenpsZS5zZWxlY3RvcnM7XG5cbi8vIERlcHJlY2F0ZWRcbmpRdWVyeS5leHByWyBcIjpcIiBdID0galF1ZXJ5LmV4cHIucHNldWRvcztcbmpRdWVyeS51bmlxdWVTb3J0ID0galF1ZXJ5LnVuaXF1ZSA9IFNpenpsZS51bmlxdWVTb3J0O1xualF1ZXJ5LnRleHQgPSBTaXp6bGUuZ2V0VGV4dDtcbmpRdWVyeS5pc1hNTERvYyA9IFNpenpsZS5pc1hNTDtcbmpRdWVyeS5jb250YWlucyA9IFNpenpsZS5jb250YWlucztcbmpRdWVyeS5lc2NhcGVTZWxlY3RvciA9IFNpenpsZS5lc2NhcGU7XG5cblxuXG5cbnZhciBkaXIgPSBmdW5jdGlvbiggZWxlbSwgZGlyLCB1bnRpbCApIHtcblx0dmFyIG1hdGNoZWQgPSBbXSxcblx0XHR0cnVuY2F0ZSA9IHVudGlsICE9PSB1bmRlZmluZWQ7XG5cblx0d2hpbGUgKCAoIGVsZW0gPSBlbGVtWyBkaXIgXSApICYmIGVsZW0ubm9kZVR5cGUgIT09IDkgKSB7XG5cdFx0aWYgKCBlbGVtLm5vZGVUeXBlID09PSAxICkge1xuXHRcdFx0aWYgKCB0cnVuY2F0ZSAmJiBqUXVlcnkoIGVsZW0gKS5pcyggdW50aWwgKSApIHtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHRtYXRjaGVkLnB1c2goIGVsZW0gKTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIG1hdGNoZWQ7XG59O1xuXG5cbnZhciBzaWJsaW5ncyA9IGZ1bmN0aW9uKCBuLCBlbGVtICkge1xuXHR2YXIgbWF0Y2hlZCA9IFtdO1xuXG5cdGZvciAoIDsgbjsgbiA9IG4ubmV4dFNpYmxpbmcgKSB7XG5cdFx0aWYgKCBuLm5vZGVUeXBlID09PSAxICYmIG4gIT09IGVsZW0gKSB7XG5cdFx0XHRtYXRjaGVkLnB1c2goIG4gKTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gbWF0Y2hlZDtcbn07XG5cblxudmFyIHJuZWVkc0NvbnRleHQgPSBqUXVlcnkuZXhwci5tYXRjaC5uZWVkc0NvbnRleHQ7XG5cblxuXG5mdW5jdGlvbiBub2RlTmFtZSggZWxlbSwgbmFtZSApIHtcblxuICByZXR1cm4gZWxlbS5ub2RlTmFtZSAmJiBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09IG5hbWUudG9Mb3dlckNhc2UoKTtcblxufTtcbnZhciByc2luZ2xlVGFnID0gKCAvXjwoW2Etel1bXlxcL1xcMD46XFx4MjBcXHRcXHJcXG5cXGZdKilbXFx4MjBcXHRcXHJcXG5cXGZdKlxcLz8+KD86PFxcL1xcMT58KSQvaSApO1xuXG5cblxuLy8gSW1wbGVtZW50IHRoZSBpZGVudGljYWwgZnVuY3Rpb25hbGl0eSBmb3IgZmlsdGVyIGFuZCBub3RcbmZ1bmN0aW9uIHdpbm5vdyggZWxlbWVudHMsIHF1YWxpZmllciwgbm90ICkge1xuXHRpZiAoIGlzRnVuY3Rpb24oIHF1YWxpZmllciApICkge1xuXHRcdHJldHVybiBqUXVlcnkuZ3JlcCggZWxlbWVudHMsIGZ1bmN0aW9uKCBlbGVtLCBpICkge1xuXHRcdFx0cmV0dXJuICEhcXVhbGlmaWVyLmNhbGwoIGVsZW0sIGksIGVsZW0gKSAhPT0gbm90O1xuXHRcdH0gKTtcblx0fVxuXG5cdC8vIFNpbmdsZSBlbGVtZW50XG5cdGlmICggcXVhbGlmaWVyLm5vZGVUeXBlICkge1xuXHRcdHJldHVybiBqUXVlcnkuZ3JlcCggZWxlbWVudHMsIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuICggZWxlbSA9PT0gcXVhbGlmaWVyICkgIT09IG5vdDtcblx0XHR9ICk7XG5cdH1cblxuXHQvLyBBcnJheWxpa2Ugb2YgZWxlbWVudHMgKGpRdWVyeSwgYXJndW1lbnRzLCBBcnJheSlcblx0aWYgKCB0eXBlb2YgcXVhbGlmaWVyICE9PSBcInN0cmluZ1wiICkge1xuXHRcdHJldHVybiBqUXVlcnkuZ3JlcCggZWxlbWVudHMsIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuICggaW5kZXhPZi5jYWxsKCBxdWFsaWZpZXIsIGVsZW0gKSA+IC0xICkgIT09IG5vdDtcblx0XHR9ICk7XG5cdH1cblxuXHQvLyBGaWx0ZXJlZCBkaXJlY3RseSBmb3IgYm90aCBzaW1wbGUgYW5kIGNvbXBsZXggc2VsZWN0b3JzXG5cdHJldHVybiBqUXVlcnkuZmlsdGVyKCBxdWFsaWZpZXIsIGVsZW1lbnRzLCBub3QgKTtcbn1cblxualF1ZXJ5LmZpbHRlciA9IGZ1bmN0aW9uKCBleHByLCBlbGVtcywgbm90ICkge1xuXHR2YXIgZWxlbSA9IGVsZW1zWyAwIF07XG5cblx0aWYgKCBub3QgKSB7XG5cdFx0ZXhwciA9IFwiOm5vdChcIiArIGV4cHIgKyBcIilcIjtcblx0fVxuXG5cdGlmICggZWxlbXMubGVuZ3RoID09PSAxICYmIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7XG5cdFx0cmV0dXJuIGpRdWVyeS5maW5kLm1hdGNoZXNTZWxlY3RvciggZWxlbSwgZXhwciApID8gWyBlbGVtIF0gOiBbXTtcblx0fVxuXG5cdHJldHVybiBqUXVlcnkuZmluZC5tYXRjaGVzKCBleHByLCBqUXVlcnkuZ3JlcCggZWxlbXMsIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHJldHVybiBlbGVtLm5vZGVUeXBlID09PSAxO1xuXHR9ICkgKTtcbn07XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0ZmluZDogZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdHZhciBpLCByZXQsXG5cdFx0XHRsZW4gPSB0aGlzLmxlbmd0aCxcblx0XHRcdHNlbGYgPSB0aGlzO1xuXG5cdFx0aWYgKCB0eXBlb2Ygc2VsZWN0b3IgIT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soIGpRdWVyeSggc2VsZWN0b3IgKS5maWx0ZXIoIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRmb3IgKCBpID0gMDsgaSA8IGxlbjsgaSsrICkge1xuXHRcdFx0XHRcdGlmICggalF1ZXJ5LmNvbnRhaW5zKCBzZWxmWyBpIF0sIHRoaXMgKSApIHtcblx0XHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSApICk7XG5cdFx0fVxuXG5cdFx0cmV0ID0gdGhpcy5wdXNoU3RhY2soIFtdICk7XG5cblx0XHRmb3IgKCBpID0gMDsgaSA8IGxlbjsgaSsrICkge1xuXHRcdFx0alF1ZXJ5LmZpbmQoIHNlbGVjdG9yLCBzZWxmWyBpIF0sIHJldCApO1xuXHRcdH1cblxuXHRcdHJldHVybiBsZW4gPiAxID8galF1ZXJ5LnVuaXF1ZVNvcnQoIHJldCApIDogcmV0O1xuXHR9LFxuXHRmaWx0ZXI6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soIHdpbm5vdyggdGhpcywgc2VsZWN0b3IgfHwgW10sIGZhbHNlICkgKTtcblx0fSxcblx0bm90OiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKCB3aW5ub3coIHRoaXMsIHNlbGVjdG9yIHx8IFtdLCB0cnVlICkgKTtcblx0fSxcblx0aXM6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHRyZXR1cm4gISF3aW5ub3coXG5cdFx0XHR0aGlzLFxuXG5cdFx0XHQvLyBJZiB0aGlzIGlzIGEgcG9zaXRpb25hbC9yZWxhdGl2ZSBzZWxlY3RvciwgY2hlY2sgbWVtYmVyc2hpcCBpbiB0aGUgcmV0dXJuZWQgc2V0XG5cdFx0XHQvLyBzbyAkKFwicDpmaXJzdFwiKS5pcyhcInA6bGFzdFwiKSB3b24ndCByZXR1cm4gdHJ1ZSBmb3IgYSBkb2Mgd2l0aCB0d28gXCJwXCIuXG5cdFx0XHR0eXBlb2Ygc2VsZWN0b3IgPT09IFwic3RyaW5nXCIgJiYgcm5lZWRzQ29udGV4dC50ZXN0KCBzZWxlY3RvciApID9cblx0XHRcdFx0alF1ZXJ5KCBzZWxlY3RvciApIDpcblx0XHRcdFx0c2VsZWN0b3IgfHwgW10sXG5cdFx0XHRmYWxzZVxuXHRcdCkubGVuZ3RoO1xuXHR9XG59ICk7XG5cblxuLy8gSW5pdGlhbGl6ZSBhIGpRdWVyeSBvYmplY3RcblxuXG4vLyBBIGNlbnRyYWwgcmVmZXJlbmNlIHRvIHRoZSByb290IGpRdWVyeShkb2N1bWVudClcbnZhciByb290alF1ZXJ5LFxuXG5cdC8vIEEgc2ltcGxlIHdheSB0byBjaGVjayBmb3IgSFRNTCBzdHJpbmdzXG5cdC8vIFByaW9yaXRpemUgI2lkIG92ZXIgPHRhZz4gdG8gYXZvaWQgWFNTIHZpYSBsb2NhdGlvbi5oYXNoICgjOTUyMSlcblx0Ly8gU3RyaWN0IEhUTUwgcmVjb2duaXRpb24gKCMxMTI5MDogbXVzdCBzdGFydCB3aXRoIDwpXG5cdC8vIFNob3J0Y3V0IHNpbXBsZSAjaWQgY2FzZSBmb3Igc3BlZWRcblx0cnF1aWNrRXhwciA9IC9eKD86XFxzKig8W1xcd1xcV10rPilbXj5dKnwjKFtcXHctXSspKSQvLFxuXG5cdGluaXQgPSBqUXVlcnkuZm4uaW5pdCA9IGZ1bmN0aW9uKCBzZWxlY3RvciwgY29udGV4dCwgcm9vdCApIHtcblx0XHR2YXIgbWF0Y2gsIGVsZW07XG5cblx0XHQvLyBIQU5ETEU6ICQoXCJcIiksICQobnVsbCksICQodW5kZWZpbmVkKSwgJChmYWxzZSlcblx0XHRpZiAoICFzZWxlY3RvciApIHtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblxuXHRcdC8vIE1ldGhvZCBpbml0KCkgYWNjZXB0cyBhbiBhbHRlcm5hdGUgcm9vdGpRdWVyeVxuXHRcdC8vIHNvIG1pZ3JhdGUgY2FuIHN1cHBvcnQgalF1ZXJ5LnN1YiAoZ2gtMjEwMSlcblx0XHRyb290ID0gcm9vdCB8fCByb290alF1ZXJ5O1xuXG5cdFx0Ly8gSGFuZGxlIEhUTUwgc3RyaW5nc1xuXHRcdGlmICggdHlwZW9mIHNlbGVjdG9yID09PSBcInN0cmluZ1wiICkge1xuXHRcdFx0aWYgKCBzZWxlY3RvclsgMCBdID09PSBcIjxcIiAmJlxuXHRcdFx0XHRzZWxlY3Rvclsgc2VsZWN0b3IubGVuZ3RoIC0gMSBdID09PSBcIj5cIiAmJlxuXHRcdFx0XHRzZWxlY3Rvci5sZW5ndGggPj0gMyApIHtcblxuXHRcdFx0XHQvLyBBc3N1bWUgdGhhdCBzdHJpbmdzIHRoYXQgc3RhcnQgYW5kIGVuZCB3aXRoIDw+IGFyZSBIVE1MIGFuZCBza2lwIHRoZSByZWdleCBjaGVja1xuXHRcdFx0XHRtYXRjaCA9IFsgbnVsbCwgc2VsZWN0b3IsIG51bGwgXTtcblxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0bWF0Y2ggPSBycXVpY2tFeHByLmV4ZWMoIHNlbGVjdG9yICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIE1hdGNoIGh0bWwgb3IgbWFrZSBzdXJlIG5vIGNvbnRleHQgaXMgc3BlY2lmaWVkIGZvciAjaWRcblx0XHRcdGlmICggbWF0Y2ggJiYgKCBtYXRjaFsgMSBdIHx8ICFjb250ZXh0ICkgKSB7XG5cblx0XHRcdFx0Ly8gSEFORExFOiAkKGh0bWwpIC0+ICQoYXJyYXkpXG5cdFx0XHRcdGlmICggbWF0Y2hbIDEgXSApIHtcblx0XHRcdFx0XHRjb250ZXh0ID0gY29udGV4dCBpbnN0YW5jZW9mIGpRdWVyeSA/IGNvbnRleHRbIDAgXSA6IGNvbnRleHQ7XG5cblx0XHRcdFx0XHQvLyBPcHRpb24gdG8gcnVuIHNjcmlwdHMgaXMgdHJ1ZSBmb3IgYmFjay1jb21wYXRcblx0XHRcdFx0XHQvLyBJbnRlbnRpb25hbGx5IGxldCB0aGUgZXJyb3IgYmUgdGhyb3duIGlmIHBhcnNlSFRNTCBpcyBub3QgcHJlc2VudFxuXHRcdFx0XHRcdGpRdWVyeS5tZXJnZSggdGhpcywgalF1ZXJ5LnBhcnNlSFRNTChcblx0XHRcdFx0XHRcdG1hdGNoWyAxIF0sXG5cdFx0XHRcdFx0XHRjb250ZXh0ICYmIGNvbnRleHQubm9kZVR5cGUgPyBjb250ZXh0Lm93bmVyRG9jdW1lbnQgfHwgY29udGV4dCA6IGRvY3VtZW50LFxuXHRcdFx0XHRcdFx0dHJ1ZVxuXHRcdFx0XHRcdCkgKTtcblxuXHRcdFx0XHRcdC8vIEhBTkRMRTogJChodG1sLCBwcm9wcylcblx0XHRcdFx0XHRpZiAoIHJzaW5nbGVUYWcudGVzdCggbWF0Y2hbIDEgXSApICYmIGpRdWVyeS5pc1BsYWluT2JqZWN0KCBjb250ZXh0ICkgKSB7XG5cdFx0XHRcdFx0XHRmb3IgKCBtYXRjaCBpbiBjb250ZXh0ICkge1xuXG5cdFx0XHRcdFx0XHRcdC8vIFByb3BlcnRpZXMgb2YgY29udGV4dCBhcmUgY2FsbGVkIGFzIG1ldGhvZHMgaWYgcG9zc2libGVcblx0XHRcdFx0XHRcdFx0aWYgKCBpc0Z1bmN0aW9uKCB0aGlzWyBtYXRjaCBdICkgKSB7XG5cdFx0XHRcdFx0XHRcdFx0dGhpc1sgbWF0Y2ggXSggY29udGV4dFsgbWF0Y2ggXSApO1xuXG5cdFx0XHRcdFx0XHRcdC8vIC4uLmFuZCBvdGhlcndpc2Ugc2V0IGFzIGF0dHJpYnV0ZXNcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHR0aGlzLmF0dHIoIG1hdGNoLCBjb250ZXh0WyBtYXRjaCBdICk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRyZXR1cm4gdGhpcztcblxuXHRcdFx0XHQvLyBIQU5ETEU6ICQoI2lkKVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGVsZW0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCggbWF0Y2hbIDIgXSApO1xuXG5cdFx0XHRcdFx0aWYgKCBlbGVtICkge1xuXG5cdFx0XHRcdFx0XHQvLyBJbmplY3QgdGhlIGVsZW1lbnQgZGlyZWN0bHkgaW50byB0aGUgalF1ZXJ5IG9iamVjdFxuXHRcdFx0XHRcdFx0dGhpc1sgMCBdID0gZWxlbTtcblx0XHRcdFx0XHRcdHRoaXMubGVuZ3RoID0gMTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHRcdH1cblxuXHRcdFx0Ly8gSEFORExFOiAkKGV4cHIsICQoLi4uKSlcblx0XHRcdH0gZWxzZSBpZiAoICFjb250ZXh0IHx8IGNvbnRleHQuanF1ZXJ5ICkge1xuXHRcdFx0XHRyZXR1cm4gKCBjb250ZXh0IHx8IHJvb3QgKS5maW5kKCBzZWxlY3RvciApO1xuXG5cdFx0XHQvLyBIQU5ETEU6ICQoZXhwciwgY29udGV4dClcblx0XHRcdC8vICh3aGljaCBpcyBqdXN0IGVxdWl2YWxlbnQgdG86ICQoY29udGV4dCkuZmluZChleHByKVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuY29uc3RydWN0b3IoIGNvbnRleHQgKS5maW5kKCBzZWxlY3RvciApO1xuXHRcdFx0fVxuXG5cdFx0Ly8gSEFORExFOiAkKERPTUVsZW1lbnQpXG5cdFx0fSBlbHNlIGlmICggc2VsZWN0b3Iubm9kZVR5cGUgKSB7XG5cdFx0XHR0aGlzWyAwIF0gPSBzZWxlY3Rvcjtcblx0XHRcdHRoaXMubGVuZ3RoID0gMTtcblx0XHRcdHJldHVybiB0aGlzO1xuXG5cdFx0Ly8gSEFORExFOiAkKGZ1bmN0aW9uKVxuXHRcdC8vIFNob3J0Y3V0IGZvciBkb2N1bWVudCByZWFkeVxuXHRcdH0gZWxzZSBpZiAoIGlzRnVuY3Rpb24oIHNlbGVjdG9yICkgKSB7XG5cdFx0XHRyZXR1cm4gcm9vdC5yZWFkeSAhPT0gdW5kZWZpbmVkID9cblx0XHRcdFx0cm9vdC5yZWFkeSggc2VsZWN0b3IgKSA6XG5cblx0XHRcdFx0Ly8gRXhlY3V0ZSBpbW1lZGlhdGVseSBpZiByZWFkeSBpcyBub3QgcHJlc2VudFxuXHRcdFx0XHRzZWxlY3RvciggalF1ZXJ5ICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGpRdWVyeS5tYWtlQXJyYXkoIHNlbGVjdG9yLCB0aGlzICk7XG5cdH07XG5cbi8vIEdpdmUgdGhlIGluaXQgZnVuY3Rpb24gdGhlIGpRdWVyeSBwcm90b3R5cGUgZm9yIGxhdGVyIGluc3RhbnRpYXRpb25cbmluaXQucHJvdG90eXBlID0galF1ZXJ5LmZuO1xuXG4vLyBJbml0aWFsaXplIGNlbnRyYWwgcmVmZXJlbmNlXG5yb290alF1ZXJ5ID0galF1ZXJ5KCBkb2N1bWVudCApO1xuXG5cbnZhciBycGFyZW50c3ByZXYgPSAvXig/OnBhcmVudHN8cHJldig/OlVudGlsfEFsbCkpLyxcblxuXHQvLyBNZXRob2RzIGd1YXJhbnRlZWQgdG8gcHJvZHVjZSBhIHVuaXF1ZSBzZXQgd2hlbiBzdGFydGluZyBmcm9tIGEgdW5pcXVlIHNldFxuXHRndWFyYW50ZWVkVW5pcXVlID0ge1xuXHRcdGNoaWxkcmVuOiB0cnVlLFxuXHRcdGNvbnRlbnRzOiB0cnVlLFxuXHRcdG5leHQ6IHRydWUsXG5cdFx0cHJldjogdHJ1ZVxuXHR9O1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdGhhczogZnVuY3Rpb24oIHRhcmdldCApIHtcblx0XHR2YXIgdGFyZ2V0cyA9IGpRdWVyeSggdGFyZ2V0LCB0aGlzICksXG5cdFx0XHRsID0gdGFyZ2V0cy5sZW5ndGg7XG5cblx0XHRyZXR1cm4gdGhpcy5maWx0ZXIoIGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIGkgPSAwO1xuXHRcdFx0Zm9yICggOyBpIDwgbDsgaSsrICkge1xuXHRcdFx0XHRpZiAoIGpRdWVyeS5jb250YWlucyggdGhpcywgdGFyZ2V0c1sgaSBdICkgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9ICk7XG5cdH0sXG5cblx0Y2xvc2VzdDogZnVuY3Rpb24oIHNlbGVjdG9ycywgY29udGV4dCApIHtcblx0XHR2YXIgY3VyLFxuXHRcdFx0aSA9IDAsXG5cdFx0XHRsID0gdGhpcy5sZW5ndGgsXG5cdFx0XHRtYXRjaGVkID0gW10sXG5cdFx0XHR0YXJnZXRzID0gdHlwZW9mIHNlbGVjdG9ycyAhPT0gXCJzdHJpbmdcIiAmJiBqUXVlcnkoIHNlbGVjdG9ycyApO1xuXG5cdFx0Ly8gUG9zaXRpb25hbCBzZWxlY3RvcnMgbmV2ZXIgbWF0Y2gsIHNpbmNlIHRoZXJlJ3Mgbm8gX3NlbGVjdGlvbl8gY29udGV4dFxuXHRcdGlmICggIXJuZWVkc0NvbnRleHQudGVzdCggc2VsZWN0b3JzICkgKSB7XG5cdFx0XHRmb3IgKCA7IGkgPCBsOyBpKysgKSB7XG5cdFx0XHRcdGZvciAoIGN1ciA9IHRoaXNbIGkgXTsgY3VyICYmIGN1ciAhPT0gY29udGV4dDsgY3VyID0gY3VyLnBhcmVudE5vZGUgKSB7XG5cblx0XHRcdFx0XHQvLyBBbHdheXMgc2tpcCBkb2N1bWVudCBmcmFnbWVudHNcblx0XHRcdFx0XHRpZiAoIGN1ci5ub2RlVHlwZSA8IDExICYmICggdGFyZ2V0cyA/XG5cdFx0XHRcdFx0XHR0YXJnZXRzLmluZGV4KCBjdXIgKSA+IC0xIDpcblxuXHRcdFx0XHRcdFx0Ly8gRG9uJ3QgcGFzcyBub24tZWxlbWVudHMgdG8gU2l6emxlXG5cdFx0XHRcdFx0XHRjdXIubm9kZVR5cGUgPT09IDEgJiZcblx0XHRcdFx0XHRcdFx0alF1ZXJ5LmZpbmQubWF0Y2hlc1NlbGVjdG9yKCBjdXIsIHNlbGVjdG9ycyApICkgKSB7XG5cblx0XHRcdFx0XHRcdG1hdGNoZWQucHVzaCggY3VyICk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soIG1hdGNoZWQubGVuZ3RoID4gMSA/IGpRdWVyeS51bmlxdWVTb3J0KCBtYXRjaGVkICkgOiBtYXRjaGVkICk7XG5cdH0sXG5cblx0Ly8gRGV0ZXJtaW5lIHRoZSBwb3NpdGlvbiBvZiBhbiBlbGVtZW50IHdpdGhpbiB0aGUgc2V0XG5cdGluZGV4OiBmdW5jdGlvbiggZWxlbSApIHtcblxuXHRcdC8vIE5vIGFyZ3VtZW50LCByZXR1cm4gaW5kZXggaW4gcGFyZW50XG5cdFx0aWYgKCAhZWxlbSApIHtcblx0XHRcdHJldHVybiAoIHRoaXNbIDAgXSAmJiB0aGlzWyAwIF0ucGFyZW50Tm9kZSApID8gdGhpcy5maXJzdCgpLnByZXZBbGwoKS5sZW5ndGggOiAtMTtcblx0XHR9XG5cblx0XHQvLyBJbmRleCBpbiBzZWxlY3RvclxuXHRcdGlmICggdHlwZW9mIGVsZW0gPT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRyZXR1cm4gaW5kZXhPZi5jYWxsKCBqUXVlcnkoIGVsZW0gKSwgdGhpc1sgMCBdICk7XG5cdFx0fVxuXG5cdFx0Ly8gTG9jYXRlIHRoZSBwb3NpdGlvbiBvZiB0aGUgZGVzaXJlZCBlbGVtZW50XG5cdFx0cmV0dXJuIGluZGV4T2YuY2FsbCggdGhpcyxcblxuXHRcdFx0Ly8gSWYgaXQgcmVjZWl2ZXMgYSBqUXVlcnkgb2JqZWN0LCB0aGUgZmlyc3QgZWxlbWVudCBpcyB1c2VkXG5cdFx0XHRlbGVtLmpxdWVyeSA/IGVsZW1bIDAgXSA6IGVsZW1cblx0XHQpO1xuXHR9LFxuXG5cdGFkZDogZnVuY3Rpb24oIHNlbGVjdG9yLCBjb250ZXh0ICkge1xuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayhcblx0XHRcdGpRdWVyeS51bmlxdWVTb3J0KFxuXHRcdFx0XHRqUXVlcnkubWVyZ2UoIHRoaXMuZ2V0KCksIGpRdWVyeSggc2VsZWN0b3IsIGNvbnRleHQgKSApXG5cdFx0XHQpXG5cdFx0KTtcblx0fSxcblxuXHRhZGRCYWNrOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cdFx0cmV0dXJuIHRoaXMuYWRkKCBzZWxlY3RvciA9PSBudWxsID9cblx0XHRcdHRoaXMucHJldk9iamVjdCA6IHRoaXMucHJldk9iamVjdC5maWx0ZXIoIHNlbGVjdG9yIClcblx0XHQpO1xuXHR9XG59ICk7XG5cbmZ1bmN0aW9uIHNpYmxpbmcoIGN1ciwgZGlyICkge1xuXHR3aGlsZSAoICggY3VyID0gY3VyWyBkaXIgXSApICYmIGN1ci5ub2RlVHlwZSAhPT0gMSApIHt9XG5cdHJldHVybiBjdXI7XG59XG5cbmpRdWVyeS5lYWNoKCB7XG5cdHBhcmVudDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0dmFyIHBhcmVudCA9IGVsZW0ucGFyZW50Tm9kZTtcblx0XHRyZXR1cm4gcGFyZW50ICYmIHBhcmVudC5ub2RlVHlwZSAhPT0gMTEgPyBwYXJlbnQgOiBudWxsO1xuXHR9LFxuXHRwYXJlbnRzOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRyZXR1cm4gZGlyKCBlbGVtLCBcInBhcmVudE5vZGVcIiApO1xuXHR9LFxuXHRwYXJlbnRzVW50aWw6IGZ1bmN0aW9uKCBlbGVtLCBpLCB1bnRpbCApIHtcblx0XHRyZXR1cm4gZGlyKCBlbGVtLCBcInBhcmVudE5vZGVcIiwgdW50aWwgKTtcblx0fSxcblx0bmV4dDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0cmV0dXJuIHNpYmxpbmcoIGVsZW0sIFwibmV4dFNpYmxpbmdcIiApO1xuXHR9LFxuXHRwcmV2OiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRyZXR1cm4gc2libGluZyggZWxlbSwgXCJwcmV2aW91c1NpYmxpbmdcIiApO1xuXHR9LFxuXHRuZXh0QWxsOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRyZXR1cm4gZGlyKCBlbGVtLCBcIm5leHRTaWJsaW5nXCIgKTtcblx0fSxcblx0cHJldkFsbDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0cmV0dXJuIGRpciggZWxlbSwgXCJwcmV2aW91c1NpYmxpbmdcIiApO1xuXHR9LFxuXHRuZXh0VW50aWw6IGZ1bmN0aW9uKCBlbGVtLCBpLCB1bnRpbCApIHtcblx0XHRyZXR1cm4gZGlyKCBlbGVtLCBcIm5leHRTaWJsaW5nXCIsIHVudGlsICk7XG5cdH0sXG5cdHByZXZVbnRpbDogZnVuY3Rpb24oIGVsZW0sIGksIHVudGlsICkge1xuXHRcdHJldHVybiBkaXIoIGVsZW0sIFwicHJldmlvdXNTaWJsaW5nXCIsIHVudGlsICk7XG5cdH0sXG5cdHNpYmxpbmdzOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRyZXR1cm4gc2libGluZ3MoICggZWxlbS5wYXJlbnROb2RlIHx8IHt9ICkuZmlyc3RDaGlsZCwgZWxlbSApO1xuXHR9LFxuXHRjaGlsZHJlbjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0cmV0dXJuIHNpYmxpbmdzKCBlbGVtLmZpcnN0Q2hpbGQgKTtcblx0fSxcblx0Y29udGVudHM6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdGlmICggdHlwZW9mIGVsZW0uY29udGVudERvY3VtZW50ICE9PSBcInVuZGVmaW5lZFwiICkge1xuXHRcdFx0cmV0dXJuIGVsZW0uY29udGVudERvY3VtZW50O1xuXHRcdH1cblxuXHRcdC8vIFN1cHBvcnQ6IElFIDkgLSAxMSBvbmx5LCBpT1MgNyBvbmx5LCBBbmRyb2lkIEJyb3dzZXIgPD00LjMgb25seVxuXHRcdC8vIFRyZWF0IHRoZSB0ZW1wbGF0ZSBlbGVtZW50IGFzIGEgcmVndWxhciBvbmUgaW4gYnJvd3NlcnMgdGhhdFxuXHRcdC8vIGRvbid0IHN1cHBvcnQgaXQuXG5cdFx0aWYgKCBub2RlTmFtZSggZWxlbSwgXCJ0ZW1wbGF0ZVwiICkgKSB7XG5cdFx0XHRlbGVtID0gZWxlbS5jb250ZW50IHx8IGVsZW07XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGpRdWVyeS5tZXJnZSggW10sIGVsZW0uY2hpbGROb2RlcyApO1xuXHR9XG59LCBmdW5jdGlvbiggbmFtZSwgZm4gKSB7XG5cdGpRdWVyeS5mblsgbmFtZSBdID0gZnVuY3Rpb24oIHVudGlsLCBzZWxlY3RvciApIHtcblx0XHR2YXIgbWF0Y2hlZCA9IGpRdWVyeS5tYXAoIHRoaXMsIGZuLCB1bnRpbCApO1xuXG5cdFx0aWYgKCBuYW1lLnNsaWNlKCAtNSApICE9PSBcIlVudGlsXCIgKSB7XG5cdFx0XHRzZWxlY3RvciA9IHVudGlsO1xuXHRcdH1cblxuXHRcdGlmICggc2VsZWN0b3IgJiYgdHlwZW9mIHNlbGVjdG9yID09PSBcInN0cmluZ1wiICkge1xuXHRcdFx0bWF0Y2hlZCA9IGpRdWVyeS5maWx0ZXIoIHNlbGVjdG9yLCBtYXRjaGVkICk7XG5cdFx0fVxuXG5cdFx0aWYgKCB0aGlzLmxlbmd0aCA+IDEgKSB7XG5cblx0XHRcdC8vIFJlbW92ZSBkdXBsaWNhdGVzXG5cdFx0XHRpZiAoICFndWFyYW50ZWVkVW5pcXVlWyBuYW1lIF0gKSB7XG5cdFx0XHRcdGpRdWVyeS51bmlxdWVTb3J0KCBtYXRjaGVkICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFJldmVyc2Ugb3JkZXIgZm9yIHBhcmVudHMqIGFuZCBwcmV2LWRlcml2YXRpdmVzXG5cdFx0XHRpZiAoIHJwYXJlbnRzcHJldi50ZXN0KCBuYW1lICkgKSB7XG5cdFx0XHRcdG1hdGNoZWQucmV2ZXJzZSgpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggbWF0Y2hlZCApO1xuXHR9O1xufSApO1xudmFyIHJub3RodG1sd2hpdGUgPSAoIC9bXlxceDIwXFx0XFxyXFxuXFxmXSsvZyApO1xuXG5cblxuLy8gQ29udmVydCBTdHJpbmctZm9ybWF0dGVkIG9wdGlvbnMgaW50byBPYmplY3QtZm9ybWF0dGVkIG9uZXNcbmZ1bmN0aW9uIGNyZWF0ZU9wdGlvbnMoIG9wdGlvbnMgKSB7XG5cdHZhciBvYmplY3QgPSB7fTtcblx0alF1ZXJ5LmVhY2goIG9wdGlvbnMubWF0Y2goIHJub3RodG1sd2hpdGUgKSB8fCBbXSwgZnVuY3Rpb24oIF8sIGZsYWcgKSB7XG5cdFx0b2JqZWN0WyBmbGFnIF0gPSB0cnVlO1xuXHR9ICk7XG5cdHJldHVybiBvYmplY3Q7XG59XG5cbi8qXG4gKiBDcmVhdGUgYSBjYWxsYmFjayBsaXN0IHVzaW5nIHRoZSBmb2xsb3dpbmcgcGFyYW1ldGVyczpcbiAqXG4gKlx0b3B0aW9uczogYW4gb3B0aW9uYWwgbGlzdCBvZiBzcGFjZS1zZXBhcmF0ZWQgb3B0aW9ucyB0aGF0IHdpbGwgY2hhbmdlIGhvd1xuICpcdFx0XHR0aGUgY2FsbGJhY2sgbGlzdCBiZWhhdmVzIG9yIGEgbW9yZSB0cmFkaXRpb25hbCBvcHRpb24gb2JqZWN0XG4gKlxuICogQnkgZGVmYXVsdCBhIGNhbGxiYWNrIGxpc3Qgd2lsbCBhY3QgbGlrZSBhbiBldmVudCBjYWxsYmFjayBsaXN0IGFuZCBjYW4gYmVcbiAqIFwiZmlyZWRcIiBtdWx0aXBsZSB0aW1lcy5cbiAqXG4gKiBQb3NzaWJsZSBvcHRpb25zOlxuICpcbiAqXHRvbmNlOlx0XHRcdHdpbGwgZW5zdXJlIHRoZSBjYWxsYmFjayBsaXN0IGNhbiBvbmx5IGJlIGZpcmVkIG9uY2UgKGxpa2UgYSBEZWZlcnJlZClcbiAqXG4gKlx0bWVtb3J5Olx0XHRcdHdpbGwga2VlcCB0cmFjayBvZiBwcmV2aW91cyB2YWx1ZXMgYW5kIHdpbGwgY2FsbCBhbnkgY2FsbGJhY2sgYWRkZWRcbiAqXHRcdFx0XHRcdGFmdGVyIHRoZSBsaXN0IGhhcyBiZWVuIGZpcmVkIHJpZ2h0IGF3YXkgd2l0aCB0aGUgbGF0ZXN0IFwibWVtb3JpemVkXCJcbiAqXHRcdFx0XHRcdHZhbHVlcyAobGlrZSBhIERlZmVycmVkKVxuICpcbiAqXHR1bmlxdWU6XHRcdFx0d2lsbCBlbnN1cmUgYSBjYWxsYmFjayBjYW4gb25seSBiZSBhZGRlZCBvbmNlIChubyBkdXBsaWNhdGUgaW4gdGhlIGxpc3QpXG4gKlxuICpcdHN0b3BPbkZhbHNlOlx0aW50ZXJydXB0IGNhbGxpbmdzIHdoZW4gYSBjYWxsYmFjayByZXR1cm5zIGZhbHNlXG4gKlxuICovXG5qUXVlcnkuQ2FsbGJhY2tzID0gZnVuY3Rpb24oIG9wdGlvbnMgKSB7XG5cblx0Ly8gQ29udmVydCBvcHRpb25zIGZyb20gU3RyaW5nLWZvcm1hdHRlZCB0byBPYmplY3QtZm9ybWF0dGVkIGlmIG5lZWRlZFxuXHQvLyAod2UgY2hlY2sgaW4gY2FjaGUgZmlyc3QpXG5cdG9wdGlvbnMgPSB0eXBlb2Ygb3B0aW9ucyA9PT0gXCJzdHJpbmdcIiA/XG5cdFx0Y3JlYXRlT3B0aW9ucyggb3B0aW9ucyApIDpcblx0XHRqUXVlcnkuZXh0ZW5kKCB7fSwgb3B0aW9ucyApO1xuXG5cdHZhciAvLyBGbGFnIHRvIGtub3cgaWYgbGlzdCBpcyBjdXJyZW50bHkgZmlyaW5nXG5cdFx0ZmlyaW5nLFxuXG5cdFx0Ly8gTGFzdCBmaXJlIHZhbHVlIGZvciBub24tZm9yZ2V0dGFibGUgbGlzdHNcblx0XHRtZW1vcnksXG5cblx0XHQvLyBGbGFnIHRvIGtub3cgaWYgbGlzdCB3YXMgYWxyZWFkeSBmaXJlZFxuXHRcdGZpcmVkLFxuXG5cdFx0Ly8gRmxhZyB0byBwcmV2ZW50IGZpcmluZ1xuXHRcdGxvY2tlZCxcblxuXHRcdC8vIEFjdHVhbCBjYWxsYmFjayBsaXN0XG5cdFx0bGlzdCA9IFtdLFxuXG5cdFx0Ly8gUXVldWUgb2YgZXhlY3V0aW9uIGRhdGEgZm9yIHJlcGVhdGFibGUgbGlzdHNcblx0XHRxdWV1ZSA9IFtdLFxuXG5cdFx0Ly8gSW5kZXggb2YgY3VycmVudGx5IGZpcmluZyBjYWxsYmFjayAobW9kaWZpZWQgYnkgYWRkL3JlbW92ZSBhcyBuZWVkZWQpXG5cdFx0ZmlyaW5nSW5kZXggPSAtMSxcblxuXHRcdC8vIEZpcmUgY2FsbGJhY2tzXG5cdFx0ZmlyZSA9IGZ1bmN0aW9uKCkge1xuXG5cdFx0XHQvLyBFbmZvcmNlIHNpbmdsZS1maXJpbmdcblx0XHRcdGxvY2tlZCA9IGxvY2tlZCB8fCBvcHRpb25zLm9uY2U7XG5cblx0XHRcdC8vIEV4ZWN1dGUgY2FsbGJhY2tzIGZvciBhbGwgcGVuZGluZyBleGVjdXRpb25zLFxuXHRcdFx0Ly8gcmVzcGVjdGluZyBmaXJpbmdJbmRleCBvdmVycmlkZXMgYW5kIHJ1bnRpbWUgY2hhbmdlc1xuXHRcdFx0ZmlyZWQgPSBmaXJpbmcgPSB0cnVlO1xuXHRcdFx0Zm9yICggOyBxdWV1ZS5sZW5ndGg7IGZpcmluZ0luZGV4ID0gLTEgKSB7XG5cdFx0XHRcdG1lbW9yeSA9IHF1ZXVlLnNoaWZ0KCk7XG5cdFx0XHRcdHdoaWxlICggKytmaXJpbmdJbmRleCA8IGxpc3QubGVuZ3RoICkge1xuXG5cdFx0XHRcdFx0Ly8gUnVuIGNhbGxiYWNrIGFuZCBjaGVjayBmb3IgZWFybHkgdGVybWluYXRpb25cblx0XHRcdFx0XHRpZiAoIGxpc3RbIGZpcmluZ0luZGV4IF0uYXBwbHkoIG1lbW9yeVsgMCBdLCBtZW1vcnlbIDEgXSApID09PSBmYWxzZSAmJlxuXHRcdFx0XHRcdFx0b3B0aW9ucy5zdG9wT25GYWxzZSApIHtcblxuXHRcdFx0XHRcdFx0Ly8gSnVtcCB0byBlbmQgYW5kIGZvcmdldCB0aGUgZGF0YSBzbyAuYWRkIGRvZXNuJ3QgcmUtZmlyZVxuXHRcdFx0XHRcdFx0ZmlyaW5nSW5kZXggPSBsaXN0Lmxlbmd0aDtcblx0XHRcdFx0XHRcdG1lbW9yeSA9IGZhbHNlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBGb3JnZXQgdGhlIGRhdGEgaWYgd2UncmUgZG9uZSB3aXRoIGl0XG5cdFx0XHRpZiAoICFvcHRpb25zLm1lbW9yeSApIHtcblx0XHRcdFx0bWVtb3J5ID0gZmFsc2U7XG5cdFx0XHR9XG5cblx0XHRcdGZpcmluZyA9IGZhbHNlO1xuXG5cdFx0XHQvLyBDbGVhbiB1cCBpZiB3ZSdyZSBkb25lIGZpcmluZyBmb3IgZ29vZFxuXHRcdFx0aWYgKCBsb2NrZWQgKSB7XG5cblx0XHRcdFx0Ly8gS2VlcCBhbiBlbXB0eSBsaXN0IGlmIHdlIGhhdmUgZGF0YSBmb3IgZnV0dXJlIGFkZCBjYWxsc1xuXHRcdFx0XHRpZiAoIG1lbW9yeSApIHtcblx0XHRcdFx0XHRsaXN0ID0gW107XG5cblx0XHRcdFx0Ly8gT3RoZXJ3aXNlLCB0aGlzIG9iamVjdCBpcyBzcGVudFxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGxpc3QgPSBcIlwiO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdC8vIEFjdHVhbCBDYWxsYmFja3Mgb2JqZWN0XG5cdFx0c2VsZiA9IHtcblxuXHRcdFx0Ly8gQWRkIGEgY2FsbGJhY2sgb3IgYSBjb2xsZWN0aW9uIG9mIGNhbGxiYWNrcyB0byB0aGUgbGlzdFxuXHRcdFx0YWRkOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0aWYgKCBsaXN0ICkge1xuXG5cdFx0XHRcdFx0Ly8gSWYgd2UgaGF2ZSBtZW1vcnkgZnJvbSBhIHBhc3QgcnVuLCB3ZSBzaG91bGQgZmlyZSBhZnRlciBhZGRpbmdcblx0XHRcdFx0XHRpZiAoIG1lbW9yeSAmJiAhZmlyaW5nICkge1xuXHRcdFx0XHRcdFx0ZmlyaW5nSW5kZXggPSBsaXN0Lmxlbmd0aCAtIDE7XG5cdFx0XHRcdFx0XHRxdWV1ZS5wdXNoKCBtZW1vcnkgKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQoIGZ1bmN0aW9uIGFkZCggYXJncyApIHtcblx0XHRcdFx0XHRcdGpRdWVyeS5lYWNoKCBhcmdzLCBmdW5jdGlvbiggXywgYXJnICkge1xuXHRcdFx0XHRcdFx0XHRpZiAoIGlzRnVuY3Rpb24oIGFyZyApICkge1xuXHRcdFx0XHRcdFx0XHRcdGlmICggIW9wdGlvbnMudW5pcXVlIHx8ICFzZWxmLmhhcyggYXJnICkgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRsaXN0LnB1c2goIGFyZyApO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmICggYXJnICYmIGFyZy5sZW5ndGggJiYgdG9UeXBlKCBhcmcgKSAhPT0gXCJzdHJpbmdcIiApIHtcblxuXHRcdFx0XHRcdFx0XHRcdC8vIEluc3BlY3QgcmVjdXJzaXZlbHlcblx0XHRcdFx0XHRcdFx0XHRhZGQoIGFyZyApO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9ICk7XG5cdFx0XHRcdFx0fSApKCBhcmd1bWVudHMgKTtcblxuXHRcdFx0XHRcdGlmICggbWVtb3J5ICYmICFmaXJpbmcgKSB7XG5cdFx0XHRcdFx0XHRmaXJlKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0fSxcblxuXHRcdFx0Ly8gUmVtb3ZlIGEgY2FsbGJhY2sgZnJvbSB0aGUgbGlzdFxuXHRcdFx0cmVtb3ZlOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0alF1ZXJ5LmVhY2goIGFyZ3VtZW50cywgZnVuY3Rpb24oIF8sIGFyZyApIHtcblx0XHRcdFx0XHR2YXIgaW5kZXg7XG5cdFx0XHRcdFx0d2hpbGUgKCAoIGluZGV4ID0galF1ZXJ5LmluQXJyYXkoIGFyZywgbGlzdCwgaW5kZXggKSApID4gLTEgKSB7XG5cdFx0XHRcdFx0XHRsaXN0LnNwbGljZSggaW5kZXgsIDEgKTtcblxuXHRcdFx0XHRcdFx0Ly8gSGFuZGxlIGZpcmluZyBpbmRleGVzXG5cdFx0XHRcdFx0XHRpZiAoIGluZGV4IDw9IGZpcmluZ0luZGV4ICkge1xuXHRcdFx0XHRcdFx0XHRmaXJpbmdJbmRleC0tO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSApO1xuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH0sXG5cblx0XHRcdC8vIENoZWNrIGlmIGEgZ2l2ZW4gY2FsbGJhY2sgaXMgaW4gdGhlIGxpc3QuXG5cdFx0XHQvLyBJZiBubyBhcmd1bWVudCBpcyBnaXZlbiwgcmV0dXJuIHdoZXRoZXIgb3Igbm90IGxpc3QgaGFzIGNhbGxiYWNrcyBhdHRhY2hlZC5cblx0XHRcdGhhczogZnVuY3Rpb24oIGZuICkge1xuXHRcdFx0XHRyZXR1cm4gZm4gP1xuXHRcdFx0XHRcdGpRdWVyeS5pbkFycmF5KCBmbiwgbGlzdCApID4gLTEgOlxuXHRcdFx0XHRcdGxpc3QubGVuZ3RoID4gMDtcblx0XHRcdH0sXG5cblx0XHRcdC8vIFJlbW92ZSBhbGwgY2FsbGJhY2tzIGZyb20gdGhlIGxpc3Rcblx0XHRcdGVtcHR5OiBmdW5jdGlvbigpIHtcblx0XHRcdFx0aWYgKCBsaXN0ICkge1xuXHRcdFx0XHRcdGxpc3QgPSBbXTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH0sXG5cblx0XHRcdC8vIERpc2FibGUgLmZpcmUgYW5kIC5hZGRcblx0XHRcdC8vIEFib3J0IGFueSBjdXJyZW50L3BlbmRpbmcgZXhlY3V0aW9uc1xuXHRcdFx0Ly8gQ2xlYXIgYWxsIGNhbGxiYWNrcyBhbmQgdmFsdWVzXG5cdFx0XHRkaXNhYmxlOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0bG9ja2VkID0gcXVldWUgPSBbXTtcblx0XHRcdFx0bGlzdCA9IG1lbW9yeSA9IFwiXCI7XG5cdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0fSxcblx0XHRcdGRpc2FibGVkOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0cmV0dXJuICFsaXN0O1xuXHRcdFx0fSxcblxuXHRcdFx0Ly8gRGlzYWJsZSAuZmlyZVxuXHRcdFx0Ly8gQWxzbyBkaXNhYmxlIC5hZGQgdW5sZXNzIHdlIGhhdmUgbWVtb3J5IChzaW5jZSBpdCB3b3VsZCBoYXZlIG5vIGVmZmVjdClcblx0XHRcdC8vIEFib3J0IGFueSBwZW5kaW5nIGV4ZWN1dGlvbnNcblx0XHRcdGxvY2s6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRsb2NrZWQgPSBxdWV1ZSA9IFtdO1xuXHRcdFx0XHRpZiAoICFtZW1vcnkgJiYgIWZpcmluZyApIHtcblx0XHRcdFx0XHRsaXN0ID0gbWVtb3J5ID0gXCJcIjtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH0sXG5cdFx0XHRsb2NrZWQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRyZXR1cm4gISFsb2NrZWQ7XG5cdFx0XHR9LFxuXG5cdFx0XHQvLyBDYWxsIGFsbCBjYWxsYmFja3Mgd2l0aCB0aGUgZ2l2ZW4gY29udGV4dCBhbmQgYXJndW1lbnRzXG5cdFx0XHRmaXJlV2l0aDogZnVuY3Rpb24oIGNvbnRleHQsIGFyZ3MgKSB7XG5cdFx0XHRcdGlmICggIWxvY2tlZCApIHtcblx0XHRcdFx0XHRhcmdzID0gYXJncyB8fCBbXTtcblx0XHRcdFx0XHRhcmdzID0gWyBjb250ZXh0LCBhcmdzLnNsaWNlID8gYXJncy5zbGljZSgpIDogYXJncyBdO1xuXHRcdFx0XHRcdHF1ZXVlLnB1c2goIGFyZ3MgKTtcblx0XHRcdFx0XHRpZiAoICFmaXJpbmcgKSB7XG5cdFx0XHRcdFx0XHRmaXJlKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0fSxcblxuXHRcdFx0Ly8gQ2FsbCBhbGwgdGhlIGNhbGxiYWNrcyB3aXRoIHRoZSBnaXZlbiBhcmd1bWVudHNcblx0XHRcdGZpcmU6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRzZWxmLmZpcmVXaXRoKCB0aGlzLCBhcmd1bWVudHMgKTtcblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9LFxuXG5cdFx0XHQvLyBUbyBrbm93IGlmIHRoZSBjYWxsYmFja3MgaGF2ZSBhbHJlYWR5IGJlZW4gY2FsbGVkIGF0IGxlYXN0IG9uY2Vcblx0XHRcdGZpcmVkOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0cmV0dXJuICEhZmlyZWQ7XG5cdFx0XHR9XG5cdFx0fTtcblxuXHRyZXR1cm4gc2VsZjtcbn07XG5cblxuZnVuY3Rpb24gSWRlbnRpdHkoIHYgKSB7XG5cdHJldHVybiB2O1xufVxuZnVuY3Rpb24gVGhyb3dlciggZXggKSB7XG5cdHRocm93IGV4O1xufVxuXG5mdW5jdGlvbiBhZG9wdFZhbHVlKCB2YWx1ZSwgcmVzb2x2ZSwgcmVqZWN0LCBub1ZhbHVlICkge1xuXHR2YXIgbWV0aG9kO1xuXG5cdHRyeSB7XG5cblx0XHQvLyBDaGVjayBmb3IgcHJvbWlzZSBhc3BlY3QgZmlyc3QgdG8gcHJpdmlsZWdlIHN5bmNocm9ub3VzIGJlaGF2aW9yXG5cdFx0aWYgKCB2YWx1ZSAmJiBpc0Z1bmN0aW9uKCAoIG1ldGhvZCA9IHZhbHVlLnByb21pc2UgKSApICkge1xuXHRcdFx0bWV0aG9kLmNhbGwoIHZhbHVlICkuZG9uZSggcmVzb2x2ZSApLmZhaWwoIHJlamVjdCApO1xuXG5cdFx0Ly8gT3RoZXIgdGhlbmFibGVzXG5cdFx0fSBlbHNlIGlmICggdmFsdWUgJiYgaXNGdW5jdGlvbiggKCBtZXRob2QgPSB2YWx1ZS50aGVuICkgKSApIHtcblx0XHRcdG1ldGhvZC5jYWxsKCB2YWx1ZSwgcmVzb2x2ZSwgcmVqZWN0ICk7XG5cblx0XHQvLyBPdGhlciBub24tdGhlbmFibGVzXG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0Ly8gQ29udHJvbCBgcmVzb2x2ZWAgYXJndW1lbnRzIGJ5IGxldHRpbmcgQXJyYXkjc2xpY2UgY2FzdCBib29sZWFuIGBub1ZhbHVlYCB0byBpbnRlZ2VyOlxuXHRcdFx0Ly8gKiBmYWxzZTogWyB2YWx1ZSBdLnNsaWNlKCAwICkgPT4gcmVzb2x2ZSggdmFsdWUgKVxuXHRcdFx0Ly8gKiB0cnVlOiBbIHZhbHVlIF0uc2xpY2UoIDEgKSA9PiByZXNvbHZlKClcblx0XHRcdHJlc29sdmUuYXBwbHkoIHVuZGVmaW5lZCwgWyB2YWx1ZSBdLnNsaWNlKCBub1ZhbHVlICkgKTtcblx0XHR9XG5cblx0Ly8gRm9yIFByb21pc2VzL0ErLCBjb252ZXJ0IGV4Y2VwdGlvbnMgaW50byByZWplY3Rpb25zXG5cdC8vIFNpbmNlIGpRdWVyeS53aGVuIGRvZXNuJ3QgdW53cmFwIHRoZW5hYmxlcywgd2UgY2FuIHNraXAgdGhlIGV4dHJhIGNoZWNrcyBhcHBlYXJpbmcgaW5cblx0Ly8gRGVmZXJyZWQjdGhlbiB0byBjb25kaXRpb25hbGx5IHN1cHByZXNzIHJlamVjdGlvbi5cblx0fSBjYXRjaCAoIHZhbHVlICkge1xuXG5cdFx0Ly8gU3VwcG9ydDogQW5kcm9pZCA0LjAgb25seVxuXHRcdC8vIFN0cmljdCBtb2RlIGZ1bmN0aW9ucyBpbnZva2VkIHdpdGhvdXQgLmNhbGwvLmFwcGx5IGdldCBnbG9iYWwtb2JqZWN0IGNvbnRleHRcblx0XHRyZWplY3QuYXBwbHkoIHVuZGVmaW5lZCwgWyB2YWx1ZSBdICk7XG5cdH1cbn1cblxualF1ZXJ5LmV4dGVuZCgge1xuXG5cdERlZmVycmVkOiBmdW5jdGlvbiggZnVuYyApIHtcblx0XHR2YXIgdHVwbGVzID0gW1xuXG5cdFx0XHRcdC8vIGFjdGlvbiwgYWRkIGxpc3RlbmVyLCBjYWxsYmFja3MsXG5cdFx0XHRcdC8vIC4uLiAudGhlbiBoYW5kbGVycywgYXJndW1lbnQgaW5kZXgsIFtmaW5hbCBzdGF0ZV1cblx0XHRcdFx0WyBcIm5vdGlmeVwiLCBcInByb2dyZXNzXCIsIGpRdWVyeS5DYWxsYmFja3MoIFwibWVtb3J5XCIgKSxcblx0XHRcdFx0XHRqUXVlcnkuQ2FsbGJhY2tzKCBcIm1lbW9yeVwiICksIDIgXSxcblx0XHRcdFx0WyBcInJlc29sdmVcIiwgXCJkb25lXCIsIGpRdWVyeS5DYWxsYmFja3MoIFwib25jZSBtZW1vcnlcIiApLFxuXHRcdFx0XHRcdGpRdWVyeS5DYWxsYmFja3MoIFwib25jZSBtZW1vcnlcIiApLCAwLCBcInJlc29sdmVkXCIgXSxcblx0XHRcdFx0WyBcInJlamVjdFwiLCBcImZhaWxcIiwgalF1ZXJ5LkNhbGxiYWNrcyggXCJvbmNlIG1lbW9yeVwiICksXG5cdFx0XHRcdFx0alF1ZXJ5LkNhbGxiYWNrcyggXCJvbmNlIG1lbW9yeVwiICksIDEsIFwicmVqZWN0ZWRcIiBdXG5cdFx0XHRdLFxuXHRcdFx0c3RhdGUgPSBcInBlbmRpbmdcIixcblx0XHRcdHByb21pc2UgPSB7XG5cdFx0XHRcdHN0YXRlOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRyZXR1cm4gc3RhdGU7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdGFsd2F5czogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0ZGVmZXJyZWQuZG9uZSggYXJndW1lbnRzICkuZmFpbCggYXJndW1lbnRzICk7XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdFwiY2F0Y2hcIjogZnVuY3Rpb24oIGZuICkge1xuXHRcdFx0XHRcdHJldHVybiBwcm9taXNlLnRoZW4oIG51bGwsIGZuICk7XG5cdFx0XHRcdH0sXG5cblx0XHRcdFx0Ly8gS2VlcCBwaXBlIGZvciBiYWNrLWNvbXBhdFxuXHRcdFx0XHRwaXBlOiBmdW5jdGlvbiggLyogZm5Eb25lLCBmbkZhaWwsIGZuUHJvZ3Jlc3MgKi8gKSB7XG5cdFx0XHRcdFx0dmFyIGZucyA9IGFyZ3VtZW50cztcblxuXHRcdFx0XHRcdHJldHVybiBqUXVlcnkuRGVmZXJyZWQoIGZ1bmN0aW9uKCBuZXdEZWZlciApIHtcblx0XHRcdFx0XHRcdGpRdWVyeS5lYWNoKCB0dXBsZXMsIGZ1bmN0aW9uKCBpLCB0dXBsZSApIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBNYXAgdHVwbGVzIChwcm9ncmVzcywgZG9uZSwgZmFpbCkgdG8gYXJndW1lbnRzIChkb25lLCBmYWlsLCBwcm9ncmVzcylcblx0XHRcdFx0XHRcdFx0dmFyIGZuID0gaXNGdW5jdGlvbiggZm5zWyB0dXBsZVsgNCBdIF0gKSAmJiBmbnNbIHR1cGxlWyA0IF0gXTtcblxuXHRcdFx0XHRcdFx0XHQvLyBkZWZlcnJlZC5wcm9ncmVzcyhmdW5jdGlvbigpIHsgYmluZCB0byBuZXdEZWZlciBvciBuZXdEZWZlci5ub3RpZnkgfSlcblx0XHRcdFx0XHRcdFx0Ly8gZGVmZXJyZWQuZG9uZShmdW5jdGlvbigpIHsgYmluZCB0byBuZXdEZWZlciBvciBuZXdEZWZlci5yZXNvbHZlIH0pXG5cdFx0XHRcdFx0XHRcdC8vIGRlZmVycmVkLmZhaWwoZnVuY3Rpb24oKSB7IGJpbmQgdG8gbmV3RGVmZXIgb3IgbmV3RGVmZXIucmVqZWN0IH0pXG5cdFx0XHRcdFx0XHRcdGRlZmVycmVkWyB0dXBsZVsgMSBdIF0oIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0XHRcdHZhciByZXR1cm5lZCA9IGZuICYmIGZuLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTtcblx0XHRcdFx0XHRcdFx0XHRpZiAoIHJldHVybmVkICYmIGlzRnVuY3Rpb24oIHJldHVybmVkLnByb21pc2UgKSApIHtcblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybmVkLnByb21pc2UoKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQucHJvZ3Jlc3MoIG5ld0RlZmVyLm5vdGlmeSApXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC5kb25lKCBuZXdEZWZlci5yZXNvbHZlIClcblx0XHRcdFx0XHRcdFx0XHRcdFx0LmZhaWwoIG5ld0RlZmVyLnJlamVjdCApO1xuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRuZXdEZWZlclsgdHVwbGVbIDAgXSArIFwiV2l0aFwiIF0oXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGZuID8gWyByZXR1cm5lZCBdIDogYXJndW1lbnRzXG5cdFx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSApO1xuXHRcdFx0XHRcdFx0fSApO1xuXHRcdFx0XHRcdFx0Zm5zID0gbnVsbDtcblx0XHRcdFx0XHR9ICkucHJvbWlzZSgpO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHR0aGVuOiBmdW5jdGlvbiggb25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQsIG9uUHJvZ3Jlc3MgKSB7XG5cdFx0XHRcdFx0dmFyIG1heERlcHRoID0gMDtcblx0XHRcdFx0XHRmdW5jdGlvbiByZXNvbHZlKCBkZXB0aCwgZGVmZXJyZWQsIGhhbmRsZXIsIHNwZWNpYWwgKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRcdHZhciB0aGF0ID0gdGhpcyxcblx0XHRcdFx0XHRcdFx0XHRhcmdzID0gYXJndW1lbnRzLFxuXHRcdFx0XHRcdFx0XHRcdG1pZ2h0VGhyb3cgPSBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHZhciByZXR1cm5lZCwgdGhlbjtcblxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogUHJvbWlzZXMvQSsgc2VjdGlvbiAyLjMuMy4zLjNcblx0XHRcdFx0XHRcdFx0XHRcdC8vIGh0dHBzOi8vcHJvbWlzZXNhcGx1cy5jb20vI3BvaW50LTU5XG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBJZ25vcmUgZG91YmxlLXJlc29sdXRpb24gYXR0ZW1wdHNcblx0XHRcdFx0XHRcdFx0XHRcdGlmICggZGVwdGggPCBtYXhEZXB0aCApIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm5lZCA9IGhhbmRsZXIuYXBwbHkoIHRoYXQsIGFyZ3MgKTtcblxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogUHJvbWlzZXMvQSsgc2VjdGlvbiAyLjMuMVxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gaHR0cHM6Ly9wcm9taXNlc2FwbHVzLmNvbS8jcG9pbnQtNDhcblx0XHRcdFx0XHRcdFx0XHRcdGlmICggcmV0dXJuZWQgPT09IGRlZmVycmVkLnByb21pc2UoKSApIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvciggXCJUaGVuYWJsZSBzZWxmLXJlc29sdXRpb25cIiApO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBQcm9taXNlcy9BKyBzZWN0aW9ucyAyLjMuMy4xLCAzLjVcblx0XHRcdFx0XHRcdFx0XHRcdC8vIGh0dHBzOi8vcHJvbWlzZXNhcGx1cy5jb20vI3BvaW50LTU0XG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBodHRwczovL3Byb21pc2VzYXBsdXMuY29tLyNwb2ludC03NVxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gUmV0cmlldmUgYHRoZW5gIG9ubHkgb25jZVxuXHRcdFx0XHRcdFx0XHRcdFx0dGhlbiA9IHJldHVybmVkICYmXG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogUHJvbWlzZXMvQSsgc2VjdGlvbiAyLjMuNFxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBodHRwczovL3Byb21pc2VzYXBsdXMuY29tLyNwb2ludC02NFxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBPbmx5IGNoZWNrIG9iamVjdHMgYW5kIGZ1bmN0aW9ucyBmb3IgdGhlbmFiaWxpdHlcblx0XHRcdFx0XHRcdFx0XHRcdFx0KCB0eXBlb2YgcmV0dXJuZWQgPT09IFwib2JqZWN0XCIgfHxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0eXBlb2YgcmV0dXJuZWQgPT09IFwiZnVuY3Rpb25cIiApICYmXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybmVkLnRoZW47XG5cblx0XHRcdFx0XHRcdFx0XHRcdC8vIEhhbmRsZSBhIHJldHVybmVkIHRoZW5hYmxlXG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoIGlzRnVuY3Rpb24oIHRoZW4gKSApIHtcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBTcGVjaWFsIHByb2Nlc3NvcnMgKG5vdGlmeSkganVzdCB3YWl0IGZvciByZXNvbHV0aW9uXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmICggc3BlY2lhbCApIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aGVuLmNhbGwoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm5lZCxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJlc29sdmUoIG1heERlcHRoLCBkZWZlcnJlZCwgSWRlbnRpdHksIHNwZWNpYWwgKSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJlc29sdmUoIG1heERlcHRoLCBkZWZlcnJlZCwgVGhyb3dlciwgc3BlY2lhbCApXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0KTtcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBOb3JtYWwgcHJvY2Vzc29ycyAocmVzb2x2ZSkgYWxzbyBob29rIGludG8gcHJvZ3Jlc3Ncblx0XHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIC4uLmFuZCBkaXNyZWdhcmQgb2xkZXIgcmVzb2x1dGlvbiB2YWx1ZXNcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRtYXhEZXB0aCsrO1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhlbi5jYWxsKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuZWQsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXNvbHZlKCBtYXhEZXB0aCwgZGVmZXJyZWQsIElkZW50aXR5LCBzcGVjaWFsICksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXNvbHZlKCBtYXhEZXB0aCwgZGVmZXJyZWQsIFRocm93ZXIsIHNwZWNpYWwgKSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJlc29sdmUoIG1heERlcHRoLCBkZWZlcnJlZCwgSWRlbnRpdHksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRlZmVycmVkLm5vdGlmeVdpdGggKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gSGFuZGxlIGFsbCBvdGhlciByZXR1cm5lZCB2YWx1ZXNcblx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gT25seSBzdWJzdGl0dXRlIGhhbmRsZXJzIHBhc3Mgb24gY29udGV4dFxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBhbmQgbXVsdGlwbGUgdmFsdWVzIChub24tc3BlYyBiZWhhdmlvcilcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKCBoYW5kbGVyICE9PSBJZGVudGl0eSApIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aGF0ID0gdW5kZWZpbmVkO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFyZ3MgPSBbIHJldHVybmVkIF07XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBQcm9jZXNzIHRoZSB2YWx1ZShzKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBEZWZhdWx0IHByb2Nlc3MgaXMgcmVzb2x2ZVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQoIHNwZWNpYWwgfHwgZGVmZXJyZWQucmVzb2x2ZVdpdGggKSggdGhhdCwgYXJncyApO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH0sXG5cblx0XHRcdFx0XHRcdFx0XHQvLyBPbmx5IG5vcm1hbCBwcm9jZXNzb3JzIChyZXNvbHZlKSBjYXRjaCBhbmQgcmVqZWN0IGV4Y2VwdGlvbnNcblx0XHRcdFx0XHRcdFx0XHRwcm9jZXNzID0gc3BlY2lhbCA/XG5cdFx0XHRcdFx0XHRcdFx0XHRtaWdodFRocm93IDpcblx0XHRcdFx0XHRcdFx0XHRcdGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG1pZ2h0VGhyb3coKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fSBjYXRjaCAoIGUgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoIGpRdWVyeS5EZWZlcnJlZC5leGNlcHRpb25Ib29rICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0alF1ZXJ5LkRlZmVycmVkLmV4Y2VwdGlvbkhvb2soIGUsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHByb2Nlc3Muc3RhY2tUcmFjZSApO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IFByb21pc2VzL0ErIHNlY3Rpb24gMi4zLjMuMy40LjFcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBodHRwczovL3Byb21pc2VzYXBsdXMuY29tLyNwb2ludC02MVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIElnbm9yZSBwb3N0LXJlc29sdXRpb24gZXhjZXB0aW9uc1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmICggZGVwdGggKyAxID49IG1heERlcHRoICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBPbmx5IHN1YnN0aXR1dGUgaGFuZGxlcnMgcGFzcyBvbiBjb250ZXh0XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBhbmQgbXVsdGlwbGUgdmFsdWVzIChub24tc3BlYyBiZWhhdmlvcilcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmICggaGFuZGxlciAhPT0gVGhyb3dlciApIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhhdCA9IHVuZGVmaW5lZDtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YXJncyA9IFsgZSBdO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkZWZlcnJlZC5yZWplY3RXaXRoKCB0aGF0LCBhcmdzICk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR9O1xuXG5cdFx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IFByb21pc2VzL0ErIHNlY3Rpb24gMi4zLjMuMy4xXG5cdFx0XHRcdFx0XHRcdC8vIGh0dHBzOi8vcHJvbWlzZXNhcGx1cy5jb20vI3BvaW50LTU3XG5cdFx0XHRcdFx0XHRcdC8vIFJlLXJlc29sdmUgcHJvbWlzZXMgaW1tZWRpYXRlbHkgdG8gZG9kZ2UgZmFsc2UgcmVqZWN0aW9uIGZyb21cblx0XHRcdFx0XHRcdFx0Ly8gc3Vic2VxdWVudCBlcnJvcnNcblx0XHRcdFx0XHRcdFx0aWYgKCBkZXB0aCApIHtcblx0XHRcdFx0XHRcdFx0XHRwcm9jZXNzKCk7XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHRcdFx0XHQvLyBDYWxsIGFuIG9wdGlvbmFsIGhvb2sgdG8gcmVjb3JkIHRoZSBzdGFjaywgaW4gY2FzZSBvZiBleGNlcHRpb25cblx0XHRcdFx0XHRcdFx0XHQvLyBzaW5jZSBpdCdzIG90aGVyd2lzZSBsb3N0IHdoZW4gZXhlY3V0aW9uIGdvZXMgYXN5bmNcblx0XHRcdFx0XHRcdFx0XHRpZiAoIGpRdWVyeS5EZWZlcnJlZC5nZXRTdGFja0hvb2sgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRwcm9jZXNzLnN0YWNrVHJhY2UgPSBqUXVlcnkuRGVmZXJyZWQuZ2V0U3RhY2tIb29rKCk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdHdpbmRvdy5zZXRUaW1lb3V0KCBwcm9jZXNzICk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0cmV0dXJuIGpRdWVyeS5EZWZlcnJlZCggZnVuY3Rpb24oIG5ld0RlZmVyICkge1xuXG5cdFx0XHRcdFx0XHQvLyBwcm9ncmVzc19oYW5kbGVycy5hZGQoIC4uLiApXG5cdFx0XHRcdFx0XHR0dXBsZXNbIDAgXVsgMyBdLmFkZChcblx0XHRcdFx0XHRcdFx0cmVzb2x2ZShcblx0XHRcdFx0XHRcdFx0XHQwLFxuXHRcdFx0XHRcdFx0XHRcdG5ld0RlZmVyLFxuXHRcdFx0XHRcdFx0XHRcdGlzRnVuY3Rpb24oIG9uUHJvZ3Jlc3MgKSA/XG5cdFx0XHRcdFx0XHRcdFx0XHRvblByb2dyZXNzIDpcblx0XHRcdFx0XHRcdFx0XHRcdElkZW50aXR5LFxuXHRcdFx0XHRcdFx0XHRcdG5ld0RlZmVyLm5vdGlmeVdpdGhcblx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0KTtcblxuXHRcdFx0XHRcdFx0Ly8gZnVsZmlsbGVkX2hhbmRsZXJzLmFkZCggLi4uIClcblx0XHRcdFx0XHRcdHR1cGxlc1sgMSBdWyAzIF0uYWRkKFxuXHRcdFx0XHRcdFx0XHRyZXNvbHZlKFxuXHRcdFx0XHRcdFx0XHRcdDAsXG5cdFx0XHRcdFx0XHRcdFx0bmV3RGVmZXIsXG5cdFx0XHRcdFx0XHRcdFx0aXNGdW5jdGlvbiggb25GdWxmaWxsZWQgKSA/XG5cdFx0XHRcdFx0XHRcdFx0XHRvbkZ1bGZpbGxlZCA6XG5cdFx0XHRcdFx0XHRcdFx0XHRJZGVudGl0eVxuXHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHQpO1xuXG5cdFx0XHRcdFx0XHQvLyByZWplY3RlZF9oYW5kbGVycy5hZGQoIC4uLiApXG5cdFx0XHRcdFx0XHR0dXBsZXNbIDIgXVsgMyBdLmFkZChcblx0XHRcdFx0XHRcdFx0cmVzb2x2ZShcblx0XHRcdFx0XHRcdFx0XHQwLFxuXHRcdFx0XHRcdFx0XHRcdG5ld0RlZmVyLFxuXHRcdFx0XHRcdFx0XHRcdGlzRnVuY3Rpb24oIG9uUmVqZWN0ZWQgKSA/XG5cdFx0XHRcdFx0XHRcdFx0XHRvblJlamVjdGVkIDpcblx0XHRcdFx0XHRcdFx0XHRcdFRocm93ZXJcblx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9ICkucHJvbWlzZSgpO1xuXHRcdFx0XHR9LFxuXG5cdFx0XHRcdC8vIEdldCBhIHByb21pc2UgZm9yIHRoaXMgZGVmZXJyZWRcblx0XHRcdFx0Ly8gSWYgb2JqIGlzIHByb3ZpZGVkLCB0aGUgcHJvbWlzZSBhc3BlY3QgaXMgYWRkZWQgdG8gdGhlIG9iamVjdFxuXHRcdFx0XHRwcm9taXNlOiBmdW5jdGlvbiggb2JqICkge1xuXHRcdFx0XHRcdHJldHVybiBvYmogIT0gbnVsbCA/IGpRdWVyeS5leHRlbmQoIG9iaiwgcHJvbWlzZSApIDogcHJvbWlzZTtcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdGRlZmVycmVkID0ge307XG5cblx0XHQvLyBBZGQgbGlzdC1zcGVjaWZpYyBtZXRob2RzXG5cdFx0alF1ZXJ5LmVhY2goIHR1cGxlcywgZnVuY3Rpb24oIGksIHR1cGxlICkge1xuXHRcdFx0dmFyIGxpc3QgPSB0dXBsZVsgMiBdLFxuXHRcdFx0XHRzdGF0ZVN0cmluZyA9IHR1cGxlWyA1IF07XG5cblx0XHRcdC8vIHByb21pc2UucHJvZ3Jlc3MgPSBsaXN0LmFkZFxuXHRcdFx0Ly8gcHJvbWlzZS5kb25lID0gbGlzdC5hZGRcblx0XHRcdC8vIHByb21pc2UuZmFpbCA9IGxpc3QuYWRkXG5cdFx0XHRwcm9taXNlWyB0dXBsZVsgMSBdIF0gPSBsaXN0LmFkZDtcblxuXHRcdFx0Ly8gSGFuZGxlIHN0YXRlXG5cdFx0XHRpZiAoIHN0YXRlU3RyaW5nICkge1xuXHRcdFx0XHRsaXN0LmFkZChcblx0XHRcdFx0XHRmdW5jdGlvbigpIHtcblxuXHRcdFx0XHRcdFx0Ly8gc3RhdGUgPSBcInJlc29sdmVkXCIgKGkuZS4sIGZ1bGZpbGxlZClcblx0XHRcdFx0XHRcdC8vIHN0YXRlID0gXCJyZWplY3RlZFwiXG5cdFx0XHRcdFx0XHRzdGF0ZSA9IHN0YXRlU3RyaW5nO1xuXHRcdFx0XHRcdH0sXG5cblx0XHRcdFx0XHQvLyByZWplY3RlZF9jYWxsYmFja3MuZGlzYWJsZVxuXHRcdFx0XHRcdC8vIGZ1bGZpbGxlZF9jYWxsYmFja3MuZGlzYWJsZVxuXHRcdFx0XHRcdHR1cGxlc1sgMyAtIGkgXVsgMiBdLmRpc2FibGUsXG5cblx0XHRcdFx0XHQvLyByZWplY3RlZF9oYW5kbGVycy5kaXNhYmxlXG5cdFx0XHRcdFx0Ly8gZnVsZmlsbGVkX2hhbmRsZXJzLmRpc2FibGVcblx0XHRcdFx0XHR0dXBsZXNbIDMgLSBpIF1bIDMgXS5kaXNhYmxlLFxuXG5cdFx0XHRcdFx0Ly8gcHJvZ3Jlc3NfY2FsbGJhY2tzLmxvY2tcblx0XHRcdFx0XHR0dXBsZXNbIDAgXVsgMiBdLmxvY2ssXG5cblx0XHRcdFx0XHQvLyBwcm9ncmVzc19oYW5kbGVycy5sb2NrXG5cdFx0XHRcdFx0dHVwbGVzWyAwIF1bIDMgXS5sb2NrXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIHByb2dyZXNzX2hhbmRsZXJzLmZpcmVcblx0XHRcdC8vIGZ1bGZpbGxlZF9oYW5kbGVycy5maXJlXG5cdFx0XHQvLyByZWplY3RlZF9oYW5kbGVycy5maXJlXG5cdFx0XHRsaXN0LmFkZCggdHVwbGVbIDMgXS5maXJlICk7XG5cblx0XHRcdC8vIGRlZmVycmVkLm5vdGlmeSA9IGZ1bmN0aW9uKCkgeyBkZWZlcnJlZC5ub3RpZnlXaXRoKC4uLikgfVxuXHRcdFx0Ly8gZGVmZXJyZWQucmVzb2x2ZSA9IGZ1bmN0aW9uKCkgeyBkZWZlcnJlZC5yZXNvbHZlV2l0aCguLi4pIH1cblx0XHRcdC8vIGRlZmVycmVkLnJlamVjdCA9IGZ1bmN0aW9uKCkgeyBkZWZlcnJlZC5yZWplY3RXaXRoKC4uLikgfVxuXHRcdFx0ZGVmZXJyZWRbIHR1cGxlWyAwIF0gXSA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRkZWZlcnJlZFsgdHVwbGVbIDAgXSArIFwiV2l0aFwiIF0oIHRoaXMgPT09IGRlZmVycmVkID8gdW5kZWZpbmVkIDogdGhpcywgYXJndW1lbnRzICk7XG5cdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0fTtcblxuXHRcdFx0Ly8gZGVmZXJyZWQubm90aWZ5V2l0aCA9IGxpc3QuZmlyZVdpdGhcblx0XHRcdC8vIGRlZmVycmVkLnJlc29sdmVXaXRoID0gbGlzdC5maXJlV2l0aFxuXHRcdFx0Ly8gZGVmZXJyZWQucmVqZWN0V2l0aCA9IGxpc3QuZmlyZVdpdGhcblx0XHRcdGRlZmVycmVkWyB0dXBsZVsgMCBdICsgXCJXaXRoXCIgXSA9IGxpc3QuZmlyZVdpdGg7XG5cdFx0fSApO1xuXG5cdFx0Ly8gTWFrZSB0aGUgZGVmZXJyZWQgYSBwcm9taXNlXG5cdFx0cHJvbWlzZS5wcm9taXNlKCBkZWZlcnJlZCApO1xuXG5cdFx0Ly8gQ2FsbCBnaXZlbiBmdW5jIGlmIGFueVxuXHRcdGlmICggZnVuYyApIHtcblx0XHRcdGZ1bmMuY2FsbCggZGVmZXJyZWQsIGRlZmVycmVkICk7XG5cdFx0fVxuXG5cdFx0Ly8gQWxsIGRvbmUhXG5cdFx0cmV0dXJuIGRlZmVycmVkO1xuXHR9LFxuXG5cdC8vIERlZmVycmVkIGhlbHBlclxuXHR3aGVuOiBmdW5jdGlvbiggc2luZ2xlVmFsdWUgKSB7XG5cdFx0dmFyXG5cblx0XHRcdC8vIGNvdW50IG9mIHVuY29tcGxldGVkIHN1Ym9yZGluYXRlc1xuXHRcdFx0cmVtYWluaW5nID0gYXJndW1lbnRzLmxlbmd0aCxcblxuXHRcdFx0Ly8gY291bnQgb2YgdW5wcm9jZXNzZWQgYXJndW1lbnRzXG5cdFx0XHRpID0gcmVtYWluaW5nLFxuXG5cdFx0XHQvLyBzdWJvcmRpbmF0ZSBmdWxmaWxsbWVudCBkYXRhXG5cdFx0XHRyZXNvbHZlQ29udGV4dHMgPSBBcnJheSggaSApLFxuXHRcdFx0cmVzb2x2ZVZhbHVlcyA9IHNsaWNlLmNhbGwoIGFyZ3VtZW50cyApLFxuXG5cdFx0XHQvLyB0aGUgbWFzdGVyIERlZmVycmVkXG5cdFx0XHRtYXN0ZXIgPSBqUXVlcnkuRGVmZXJyZWQoKSxcblxuXHRcdFx0Ly8gc3Vib3JkaW5hdGUgY2FsbGJhY2sgZmFjdG9yeVxuXHRcdFx0dXBkYXRlRnVuYyA9IGZ1bmN0aW9uKCBpICkge1xuXHRcdFx0XHRyZXR1cm4gZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdFx0XHRcdHJlc29sdmVDb250ZXh0c1sgaSBdID0gdGhpcztcblx0XHRcdFx0XHRyZXNvbHZlVmFsdWVzWyBpIF0gPSBhcmd1bWVudHMubGVuZ3RoID4gMSA/IHNsaWNlLmNhbGwoIGFyZ3VtZW50cyApIDogdmFsdWU7XG5cdFx0XHRcdFx0aWYgKCAhKCAtLXJlbWFpbmluZyApICkge1xuXHRcdFx0XHRcdFx0bWFzdGVyLnJlc29sdmVXaXRoKCByZXNvbHZlQ29udGV4dHMsIHJlc29sdmVWYWx1ZXMgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH07XG5cdFx0XHR9O1xuXG5cdFx0Ly8gU2luZ2xlLSBhbmQgZW1wdHkgYXJndW1lbnRzIGFyZSBhZG9wdGVkIGxpa2UgUHJvbWlzZS5yZXNvbHZlXG5cdFx0aWYgKCByZW1haW5pbmcgPD0gMSApIHtcblx0XHRcdGFkb3B0VmFsdWUoIHNpbmdsZVZhbHVlLCBtYXN0ZXIuZG9uZSggdXBkYXRlRnVuYyggaSApICkucmVzb2x2ZSwgbWFzdGVyLnJlamVjdCxcblx0XHRcdFx0IXJlbWFpbmluZyApO1xuXG5cdFx0XHQvLyBVc2UgLnRoZW4oKSB0byB1bndyYXAgc2Vjb25kYXJ5IHRoZW5hYmxlcyAoY2YuIGdoLTMwMDApXG5cdFx0XHRpZiAoIG1hc3Rlci5zdGF0ZSgpID09PSBcInBlbmRpbmdcIiB8fFxuXHRcdFx0XHRpc0Z1bmN0aW9uKCByZXNvbHZlVmFsdWVzWyBpIF0gJiYgcmVzb2x2ZVZhbHVlc1sgaSBdLnRoZW4gKSApIHtcblxuXHRcdFx0XHRyZXR1cm4gbWFzdGVyLnRoZW4oKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBNdWx0aXBsZSBhcmd1bWVudHMgYXJlIGFnZ3JlZ2F0ZWQgbGlrZSBQcm9taXNlLmFsbCBhcnJheSBlbGVtZW50c1xuXHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0YWRvcHRWYWx1ZSggcmVzb2x2ZVZhbHVlc1sgaSBdLCB1cGRhdGVGdW5jKCBpICksIG1hc3Rlci5yZWplY3QgKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gbWFzdGVyLnByb21pc2UoKTtcblx0fVxufSApO1xuXG5cbi8vIFRoZXNlIHVzdWFsbHkgaW5kaWNhdGUgYSBwcm9ncmFtbWVyIG1pc3Rha2UgZHVyaW5nIGRldmVsb3BtZW50LFxuLy8gd2FybiBhYm91dCB0aGVtIEFTQVAgcmF0aGVyIHRoYW4gc3dhbGxvd2luZyB0aGVtIGJ5IGRlZmF1bHQuXG52YXIgcmVycm9yTmFtZXMgPSAvXihFdmFsfEludGVybmFsfFJhbmdlfFJlZmVyZW5jZXxTeW50YXh8VHlwZXxVUkkpRXJyb3IkLztcblxualF1ZXJ5LkRlZmVycmVkLmV4Y2VwdGlvbkhvb2sgPSBmdW5jdGlvbiggZXJyb3IsIHN0YWNrICkge1xuXG5cdC8vIFN1cHBvcnQ6IElFIDggLSA5IG9ubHlcblx0Ly8gQ29uc29sZSBleGlzdHMgd2hlbiBkZXYgdG9vbHMgYXJlIG9wZW4sIHdoaWNoIGNhbiBoYXBwZW4gYXQgYW55IHRpbWVcblx0aWYgKCB3aW5kb3cuY29uc29sZSAmJiB3aW5kb3cuY29uc29sZS53YXJuICYmIGVycm9yICYmIHJlcnJvck5hbWVzLnRlc3QoIGVycm9yLm5hbWUgKSApIHtcblx0XHR3aW5kb3cuY29uc29sZS53YXJuKCBcImpRdWVyeS5EZWZlcnJlZCBleGNlcHRpb246IFwiICsgZXJyb3IubWVzc2FnZSwgZXJyb3Iuc3RhY2ssIHN0YWNrICk7XG5cdH1cbn07XG5cblxuXG5cbmpRdWVyeS5yZWFkeUV4Y2VwdGlvbiA9IGZ1bmN0aW9uKCBlcnJvciApIHtcblx0d2luZG93LnNldFRpbWVvdXQoIGZ1bmN0aW9uKCkge1xuXHRcdHRocm93IGVycm9yO1xuXHR9ICk7XG59O1xuXG5cblxuXG4vLyBUaGUgZGVmZXJyZWQgdXNlZCBvbiBET00gcmVhZHlcbnZhciByZWFkeUxpc3QgPSBqUXVlcnkuRGVmZXJyZWQoKTtcblxualF1ZXJ5LmZuLnJlYWR5ID0gZnVuY3Rpb24oIGZuICkge1xuXG5cdHJlYWR5TGlzdFxuXHRcdC50aGVuKCBmbiApXG5cblx0XHQvLyBXcmFwIGpRdWVyeS5yZWFkeUV4Y2VwdGlvbiBpbiBhIGZ1bmN0aW9uIHNvIHRoYXQgdGhlIGxvb2t1cFxuXHRcdC8vIGhhcHBlbnMgYXQgdGhlIHRpbWUgb2YgZXJyb3IgaGFuZGxpbmcgaW5zdGVhZCBvZiBjYWxsYmFja1xuXHRcdC8vIHJlZ2lzdHJhdGlvbi5cblx0XHQuY2F0Y2goIGZ1bmN0aW9uKCBlcnJvciApIHtcblx0XHRcdGpRdWVyeS5yZWFkeUV4Y2VwdGlvbiggZXJyb3IgKTtcblx0XHR9ICk7XG5cblx0cmV0dXJuIHRoaXM7XG59O1xuXG5qUXVlcnkuZXh0ZW5kKCB7XG5cblx0Ly8gSXMgdGhlIERPTSByZWFkeSB0byBiZSB1c2VkPyBTZXQgdG8gdHJ1ZSBvbmNlIGl0IG9jY3Vycy5cblx0aXNSZWFkeTogZmFsc2UsXG5cblx0Ly8gQSBjb3VudGVyIHRvIHRyYWNrIGhvdyBtYW55IGl0ZW1zIHRvIHdhaXQgZm9yIGJlZm9yZVxuXHQvLyB0aGUgcmVhZHkgZXZlbnQgZmlyZXMuIFNlZSAjNjc4MVxuXHRyZWFkeVdhaXQ6IDEsXG5cblx0Ly8gSGFuZGxlIHdoZW4gdGhlIERPTSBpcyByZWFkeVxuXHRyZWFkeTogZnVuY3Rpb24oIHdhaXQgKSB7XG5cblx0XHQvLyBBYm9ydCBpZiB0aGVyZSBhcmUgcGVuZGluZyBob2xkcyBvciB3ZSdyZSBhbHJlYWR5IHJlYWR5XG5cdFx0aWYgKCB3YWl0ID09PSB0cnVlID8gLS1qUXVlcnkucmVhZHlXYWl0IDogalF1ZXJ5LmlzUmVhZHkgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gUmVtZW1iZXIgdGhhdCB0aGUgRE9NIGlzIHJlYWR5XG5cdFx0alF1ZXJ5LmlzUmVhZHkgPSB0cnVlO1xuXG5cdFx0Ly8gSWYgYSBub3JtYWwgRE9NIFJlYWR5IGV2ZW50IGZpcmVkLCBkZWNyZW1lbnQsIGFuZCB3YWl0IGlmIG5lZWQgYmVcblx0XHRpZiAoIHdhaXQgIT09IHRydWUgJiYgLS1qUXVlcnkucmVhZHlXYWl0ID4gMCApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBJZiB0aGVyZSBhcmUgZnVuY3Rpb25zIGJvdW5kLCB0byBleGVjdXRlXG5cdFx0cmVhZHlMaXN0LnJlc29sdmVXaXRoKCBkb2N1bWVudCwgWyBqUXVlcnkgXSApO1xuXHR9XG59ICk7XG5cbmpRdWVyeS5yZWFkeS50aGVuID0gcmVhZHlMaXN0LnRoZW47XG5cbi8vIFRoZSByZWFkeSBldmVudCBoYW5kbGVyIGFuZCBzZWxmIGNsZWFudXAgbWV0aG9kXG5mdW5jdGlvbiBjb21wbGV0ZWQoKSB7XG5cdGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIFwiRE9NQ29udGVudExvYWRlZFwiLCBjb21wbGV0ZWQgKTtcblx0d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoIFwibG9hZFwiLCBjb21wbGV0ZWQgKTtcblx0alF1ZXJ5LnJlYWR5KCk7XG59XG5cbi8vIENhdGNoIGNhc2VzIHdoZXJlICQoZG9jdW1lbnQpLnJlYWR5KCkgaXMgY2FsbGVkXG4vLyBhZnRlciB0aGUgYnJvd3NlciBldmVudCBoYXMgYWxyZWFkeSBvY2N1cnJlZC5cbi8vIFN1cHBvcnQ6IElFIDw9OSAtIDEwIG9ubHlcbi8vIE9sZGVyIElFIHNvbWV0aW1lcyBzaWduYWxzIFwiaW50ZXJhY3RpdmVcIiB0b28gc29vblxuaWYgKCBkb2N1bWVudC5yZWFkeVN0YXRlID09PSBcImNvbXBsZXRlXCIgfHxcblx0KCBkb2N1bWVudC5yZWFkeVN0YXRlICE9PSBcImxvYWRpbmdcIiAmJiAhZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmRvU2Nyb2xsICkgKSB7XG5cblx0Ly8gSGFuZGxlIGl0IGFzeW5jaHJvbm91c2x5IHRvIGFsbG93IHNjcmlwdHMgdGhlIG9wcG9ydHVuaXR5IHRvIGRlbGF5IHJlYWR5XG5cdHdpbmRvdy5zZXRUaW1lb3V0KCBqUXVlcnkucmVhZHkgKTtcblxufSBlbHNlIHtcblxuXHQvLyBVc2UgdGhlIGhhbmR5IGV2ZW50IGNhbGxiYWNrXG5cdGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIFwiRE9NQ29udGVudExvYWRlZFwiLCBjb21wbGV0ZWQgKTtcblxuXHQvLyBBIGZhbGxiYWNrIHRvIHdpbmRvdy5vbmxvYWQsIHRoYXQgd2lsbCBhbHdheXMgd29ya1xuXHR3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lciggXCJsb2FkXCIsIGNvbXBsZXRlZCApO1xufVxuXG5cblxuXG4vLyBNdWx0aWZ1bmN0aW9uYWwgbWV0aG9kIHRvIGdldCBhbmQgc2V0IHZhbHVlcyBvZiBhIGNvbGxlY3Rpb25cbi8vIFRoZSB2YWx1ZS9zIGNhbiBvcHRpb25hbGx5IGJlIGV4ZWN1dGVkIGlmIGl0J3MgYSBmdW5jdGlvblxudmFyIGFjY2VzcyA9IGZ1bmN0aW9uKCBlbGVtcywgZm4sIGtleSwgdmFsdWUsIGNoYWluYWJsZSwgZW1wdHlHZXQsIHJhdyApIHtcblx0dmFyIGkgPSAwLFxuXHRcdGxlbiA9IGVsZW1zLmxlbmd0aCxcblx0XHRidWxrID0ga2V5ID09IG51bGw7XG5cblx0Ly8gU2V0cyBtYW55IHZhbHVlc1xuXHRpZiAoIHRvVHlwZSgga2V5ICkgPT09IFwib2JqZWN0XCIgKSB7XG5cdFx0Y2hhaW5hYmxlID0gdHJ1ZTtcblx0XHRmb3IgKCBpIGluIGtleSApIHtcblx0XHRcdGFjY2VzcyggZWxlbXMsIGZuLCBpLCBrZXlbIGkgXSwgdHJ1ZSwgZW1wdHlHZXQsIHJhdyApO1xuXHRcdH1cblxuXHQvLyBTZXRzIG9uZSB2YWx1ZVxuXHR9IGVsc2UgaWYgKCB2YWx1ZSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdGNoYWluYWJsZSA9IHRydWU7XG5cblx0XHRpZiAoICFpc0Z1bmN0aW9uKCB2YWx1ZSApICkge1xuXHRcdFx0cmF3ID0gdHJ1ZTtcblx0XHR9XG5cblx0XHRpZiAoIGJ1bGsgKSB7XG5cblx0XHRcdC8vIEJ1bGsgb3BlcmF0aW9ucyBydW4gYWdhaW5zdCB0aGUgZW50aXJlIHNldFxuXHRcdFx0aWYgKCByYXcgKSB7XG5cdFx0XHRcdGZuLmNhbGwoIGVsZW1zLCB2YWx1ZSApO1xuXHRcdFx0XHRmbiA9IG51bGw7XG5cblx0XHRcdC8vIC4uLmV4Y2VwdCB3aGVuIGV4ZWN1dGluZyBmdW5jdGlvbiB2YWx1ZXNcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGJ1bGsgPSBmbjtcblx0XHRcdFx0Zm4gPSBmdW5jdGlvbiggZWxlbSwga2V5LCB2YWx1ZSApIHtcblx0XHRcdFx0XHRyZXR1cm4gYnVsay5jYWxsKCBqUXVlcnkoIGVsZW0gKSwgdmFsdWUgKTtcblx0XHRcdFx0fTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoIGZuICkge1xuXHRcdFx0Zm9yICggOyBpIDwgbGVuOyBpKysgKSB7XG5cdFx0XHRcdGZuKFxuXHRcdFx0XHRcdGVsZW1zWyBpIF0sIGtleSwgcmF3ID9cblx0XHRcdFx0XHR2YWx1ZSA6XG5cdFx0XHRcdFx0dmFsdWUuY2FsbCggZWxlbXNbIGkgXSwgaSwgZm4oIGVsZW1zWyBpIF0sIGtleSApIClcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRpZiAoIGNoYWluYWJsZSApIHtcblx0XHRyZXR1cm4gZWxlbXM7XG5cdH1cblxuXHQvLyBHZXRzXG5cdGlmICggYnVsayApIHtcblx0XHRyZXR1cm4gZm4uY2FsbCggZWxlbXMgKTtcblx0fVxuXG5cdHJldHVybiBsZW4gPyBmbiggZWxlbXNbIDAgXSwga2V5ICkgOiBlbXB0eUdldDtcbn07XG5cblxuLy8gTWF0Y2hlcyBkYXNoZWQgc3RyaW5nIGZvciBjYW1lbGl6aW5nXG52YXIgcm1zUHJlZml4ID0gL14tbXMtLyxcblx0cmRhc2hBbHBoYSA9IC8tKFthLXpdKS9nO1xuXG4vLyBVc2VkIGJ5IGNhbWVsQ2FzZSBhcyBjYWxsYmFjayB0byByZXBsYWNlKClcbmZ1bmN0aW9uIGZjYW1lbENhc2UoIGFsbCwgbGV0dGVyICkge1xuXHRyZXR1cm4gbGV0dGVyLnRvVXBwZXJDYXNlKCk7XG59XG5cbi8vIENvbnZlcnQgZGFzaGVkIHRvIGNhbWVsQ2FzZTsgdXNlZCBieSB0aGUgY3NzIGFuZCBkYXRhIG1vZHVsZXNcbi8vIFN1cHBvcnQ6IElFIDw9OSAtIDExLCBFZGdlIDEyIC0gMTVcbi8vIE1pY3Jvc29mdCBmb3Jnb3QgdG8gaHVtcCB0aGVpciB2ZW5kb3IgcHJlZml4ICgjOTU3MilcbmZ1bmN0aW9uIGNhbWVsQ2FzZSggc3RyaW5nICkge1xuXHRyZXR1cm4gc3RyaW5nLnJlcGxhY2UoIHJtc1ByZWZpeCwgXCJtcy1cIiApLnJlcGxhY2UoIHJkYXNoQWxwaGEsIGZjYW1lbENhc2UgKTtcbn1cbnZhciBhY2NlcHREYXRhID0gZnVuY3Rpb24oIG93bmVyICkge1xuXG5cdC8vIEFjY2VwdHMgb25seTpcblx0Ly8gIC0gTm9kZVxuXHQvLyAgICAtIE5vZGUuRUxFTUVOVF9OT0RFXG5cdC8vICAgIC0gTm9kZS5ET0NVTUVOVF9OT0RFXG5cdC8vICAtIE9iamVjdFxuXHQvLyAgICAtIEFueVxuXHRyZXR1cm4gb3duZXIubm9kZVR5cGUgPT09IDEgfHwgb3duZXIubm9kZVR5cGUgPT09IDkgfHwgISggK293bmVyLm5vZGVUeXBlICk7XG59O1xuXG5cblxuXG5mdW5jdGlvbiBEYXRhKCkge1xuXHR0aGlzLmV4cGFuZG8gPSBqUXVlcnkuZXhwYW5kbyArIERhdGEudWlkKys7XG59XG5cbkRhdGEudWlkID0gMTtcblxuRGF0YS5wcm90b3R5cGUgPSB7XG5cblx0Y2FjaGU6IGZ1bmN0aW9uKCBvd25lciApIHtcblxuXHRcdC8vIENoZWNrIGlmIHRoZSBvd25lciBvYmplY3QgYWxyZWFkeSBoYXMgYSBjYWNoZVxuXHRcdHZhciB2YWx1ZSA9IG93bmVyWyB0aGlzLmV4cGFuZG8gXTtcblxuXHRcdC8vIElmIG5vdCwgY3JlYXRlIG9uZVxuXHRcdGlmICggIXZhbHVlICkge1xuXHRcdFx0dmFsdWUgPSB7fTtcblxuXHRcdFx0Ly8gV2UgY2FuIGFjY2VwdCBkYXRhIGZvciBub24tZWxlbWVudCBub2RlcyBpbiBtb2Rlcm4gYnJvd3NlcnMsXG5cdFx0XHQvLyBidXQgd2Ugc2hvdWxkIG5vdCwgc2VlICM4MzM1LlxuXHRcdFx0Ly8gQWx3YXlzIHJldHVybiBhbiBlbXB0eSBvYmplY3QuXG5cdFx0XHRpZiAoIGFjY2VwdERhdGEoIG93bmVyICkgKSB7XG5cblx0XHRcdFx0Ly8gSWYgaXQgaXMgYSBub2RlIHVubGlrZWx5IHRvIGJlIHN0cmluZ2lmeS1lZCBvciBsb29wZWQgb3ZlclxuXHRcdFx0XHQvLyB1c2UgcGxhaW4gYXNzaWdubWVudFxuXHRcdFx0XHRpZiAoIG93bmVyLm5vZGVUeXBlICkge1xuXHRcdFx0XHRcdG93bmVyWyB0aGlzLmV4cGFuZG8gXSA9IHZhbHVlO1xuXG5cdFx0XHRcdC8vIE90aGVyd2lzZSBzZWN1cmUgaXQgaW4gYSBub24tZW51bWVyYWJsZSBwcm9wZXJ0eVxuXHRcdFx0XHQvLyBjb25maWd1cmFibGUgbXVzdCBiZSB0cnVlIHRvIGFsbG93IHRoZSBwcm9wZXJ0eSB0byBiZVxuXHRcdFx0XHQvLyBkZWxldGVkIHdoZW4gZGF0YSBpcyByZW1vdmVkXG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KCBvd25lciwgdGhpcy5leHBhbmRvLCB7XG5cdFx0XHRcdFx0XHR2YWx1ZTogdmFsdWUsXG5cdFx0XHRcdFx0XHRjb25maWd1cmFibGU6IHRydWVcblx0XHRcdFx0XHR9ICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gdmFsdWU7XG5cdH0sXG5cdHNldDogZnVuY3Rpb24oIG93bmVyLCBkYXRhLCB2YWx1ZSApIHtcblx0XHR2YXIgcHJvcCxcblx0XHRcdGNhY2hlID0gdGhpcy5jYWNoZSggb3duZXIgKTtcblxuXHRcdC8vIEhhbmRsZTogWyBvd25lciwga2V5LCB2YWx1ZSBdIGFyZ3Ncblx0XHQvLyBBbHdheXMgdXNlIGNhbWVsQ2FzZSBrZXkgKGdoLTIyNTcpXG5cdFx0aWYgKCB0eXBlb2YgZGF0YSA9PT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdGNhY2hlWyBjYW1lbENhc2UoIGRhdGEgKSBdID0gdmFsdWU7XG5cblx0XHQvLyBIYW5kbGU6IFsgb3duZXIsIHsgcHJvcGVydGllcyB9IF0gYXJnc1xuXHRcdH0gZWxzZSB7XG5cblx0XHRcdC8vIENvcHkgdGhlIHByb3BlcnRpZXMgb25lLWJ5LW9uZSB0byB0aGUgY2FjaGUgb2JqZWN0XG5cdFx0XHRmb3IgKCBwcm9wIGluIGRhdGEgKSB7XG5cdFx0XHRcdGNhY2hlWyBjYW1lbENhc2UoIHByb3AgKSBdID0gZGF0YVsgcHJvcCBdO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gY2FjaGU7XG5cdH0sXG5cdGdldDogZnVuY3Rpb24oIG93bmVyLCBrZXkgKSB7XG5cdFx0cmV0dXJuIGtleSA9PT0gdW5kZWZpbmVkID9cblx0XHRcdHRoaXMuY2FjaGUoIG93bmVyICkgOlxuXG5cdFx0XHQvLyBBbHdheXMgdXNlIGNhbWVsQ2FzZSBrZXkgKGdoLTIyNTcpXG5cdFx0XHRvd25lclsgdGhpcy5leHBhbmRvIF0gJiYgb3duZXJbIHRoaXMuZXhwYW5kbyBdWyBjYW1lbENhc2UoIGtleSApIF07XG5cdH0sXG5cdGFjY2VzczogZnVuY3Rpb24oIG93bmVyLCBrZXksIHZhbHVlICkge1xuXG5cdFx0Ly8gSW4gY2FzZXMgd2hlcmUgZWl0aGVyOlxuXHRcdC8vXG5cdFx0Ly8gICAxLiBObyBrZXkgd2FzIHNwZWNpZmllZFxuXHRcdC8vICAgMi4gQSBzdHJpbmcga2V5IHdhcyBzcGVjaWZpZWQsIGJ1dCBubyB2YWx1ZSBwcm92aWRlZFxuXHRcdC8vXG5cdFx0Ly8gVGFrZSB0aGUgXCJyZWFkXCIgcGF0aCBhbmQgYWxsb3cgdGhlIGdldCBtZXRob2QgdG8gZGV0ZXJtaW5lXG5cdFx0Ly8gd2hpY2ggdmFsdWUgdG8gcmV0dXJuLCByZXNwZWN0aXZlbHkgZWl0aGVyOlxuXHRcdC8vXG5cdFx0Ly8gICAxLiBUaGUgZW50aXJlIGNhY2hlIG9iamVjdFxuXHRcdC8vICAgMi4gVGhlIGRhdGEgc3RvcmVkIGF0IHRoZSBrZXlcblx0XHQvL1xuXHRcdGlmICgga2V5ID09PSB1bmRlZmluZWQgfHxcblx0XHRcdFx0KCAoIGtleSAmJiB0eXBlb2Yga2V5ID09PSBcInN0cmluZ1wiICkgJiYgdmFsdWUgPT09IHVuZGVmaW5lZCApICkge1xuXG5cdFx0XHRyZXR1cm4gdGhpcy5nZXQoIG93bmVyLCBrZXkgKTtcblx0XHR9XG5cblx0XHQvLyBXaGVuIHRoZSBrZXkgaXMgbm90IGEgc3RyaW5nLCBvciBib3RoIGEga2V5IGFuZCB2YWx1ZVxuXHRcdC8vIGFyZSBzcGVjaWZpZWQsIHNldCBvciBleHRlbmQgKGV4aXN0aW5nIG9iamVjdHMpIHdpdGggZWl0aGVyOlxuXHRcdC8vXG5cdFx0Ly8gICAxLiBBbiBvYmplY3Qgb2YgcHJvcGVydGllc1xuXHRcdC8vICAgMi4gQSBrZXkgYW5kIHZhbHVlXG5cdFx0Ly9cblx0XHR0aGlzLnNldCggb3duZXIsIGtleSwgdmFsdWUgKTtcblxuXHRcdC8vIFNpbmNlIHRoZSBcInNldFwiIHBhdGggY2FuIGhhdmUgdHdvIHBvc3NpYmxlIGVudHJ5IHBvaW50c1xuXHRcdC8vIHJldHVybiB0aGUgZXhwZWN0ZWQgZGF0YSBiYXNlZCBvbiB3aGljaCBwYXRoIHdhcyB0YWtlblsqXVxuXHRcdHJldHVybiB2YWx1ZSAhPT0gdW5kZWZpbmVkID8gdmFsdWUgOiBrZXk7XG5cdH0sXG5cdHJlbW92ZTogZnVuY3Rpb24oIG93bmVyLCBrZXkgKSB7XG5cdFx0dmFyIGksXG5cdFx0XHRjYWNoZSA9IG93bmVyWyB0aGlzLmV4cGFuZG8gXTtcblxuXHRcdGlmICggY2FjaGUgPT09IHVuZGVmaW5lZCApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpZiAoIGtleSAhPT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHQvLyBTdXBwb3J0IGFycmF5IG9yIHNwYWNlIHNlcGFyYXRlZCBzdHJpbmcgb2Yga2V5c1xuXHRcdFx0aWYgKCBBcnJheS5pc0FycmF5KCBrZXkgKSApIHtcblxuXHRcdFx0XHQvLyBJZiBrZXkgaXMgYW4gYXJyYXkgb2Yga2V5cy4uLlxuXHRcdFx0XHQvLyBXZSBhbHdheXMgc2V0IGNhbWVsQ2FzZSBrZXlzLCBzbyByZW1vdmUgdGhhdC5cblx0XHRcdFx0a2V5ID0ga2V5Lm1hcCggY2FtZWxDYXNlICk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRrZXkgPSBjYW1lbENhc2UoIGtleSApO1xuXG5cdFx0XHRcdC8vIElmIGEga2V5IHdpdGggdGhlIHNwYWNlcyBleGlzdHMsIHVzZSBpdC5cblx0XHRcdFx0Ly8gT3RoZXJ3aXNlLCBjcmVhdGUgYW4gYXJyYXkgYnkgbWF0Y2hpbmcgbm9uLXdoaXRlc3BhY2Vcblx0XHRcdFx0a2V5ID0ga2V5IGluIGNhY2hlID9cblx0XHRcdFx0XHRbIGtleSBdIDpcblx0XHRcdFx0XHQoIGtleS5tYXRjaCggcm5vdGh0bWx3aGl0ZSApIHx8IFtdICk7XG5cdFx0XHR9XG5cblx0XHRcdGkgPSBrZXkubGVuZ3RoO1xuXG5cdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0ZGVsZXRlIGNhY2hlWyBrZXlbIGkgXSBdO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIFJlbW92ZSB0aGUgZXhwYW5kbyBpZiB0aGVyZSdzIG5vIG1vcmUgZGF0YVxuXHRcdGlmICgga2V5ID09PSB1bmRlZmluZWQgfHwgalF1ZXJ5LmlzRW1wdHlPYmplY3QoIGNhY2hlICkgKSB7XG5cblx0XHRcdC8vIFN1cHBvcnQ6IENocm9tZSA8PTM1IC0gNDVcblx0XHRcdC8vIFdlYmtpdCAmIEJsaW5rIHBlcmZvcm1hbmNlIHN1ZmZlcnMgd2hlbiBkZWxldGluZyBwcm9wZXJ0aWVzXG5cdFx0XHQvLyBmcm9tIERPTSBub2Rlcywgc28gc2V0IHRvIHVuZGVmaW5lZCBpbnN0ZWFkXG5cdFx0XHQvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD0zNzg2MDcgKGJ1ZyByZXN0cmljdGVkKVxuXHRcdFx0aWYgKCBvd25lci5ub2RlVHlwZSApIHtcblx0XHRcdFx0b3duZXJbIHRoaXMuZXhwYW5kbyBdID0gdW5kZWZpbmVkO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZGVsZXRlIG93bmVyWyB0aGlzLmV4cGFuZG8gXTtcblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cdGhhc0RhdGE6IGZ1bmN0aW9uKCBvd25lciApIHtcblx0XHR2YXIgY2FjaGUgPSBvd25lclsgdGhpcy5leHBhbmRvIF07XG5cdFx0cmV0dXJuIGNhY2hlICE9PSB1bmRlZmluZWQgJiYgIWpRdWVyeS5pc0VtcHR5T2JqZWN0KCBjYWNoZSApO1xuXHR9XG59O1xudmFyIGRhdGFQcml2ID0gbmV3IERhdGEoKTtcblxudmFyIGRhdGFVc2VyID0gbmV3IERhdGEoKTtcblxuXG5cbi8vXHRJbXBsZW1lbnRhdGlvbiBTdW1tYXJ5XG4vL1xuLy9cdDEuIEVuZm9yY2UgQVBJIHN1cmZhY2UgYW5kIHNlbWFudGljIGNvbXBhdGliaWxpdHkgd2l0aCAxLjkueCBicmFuY2hcbi8vXHQyLiBJbXByb3ZlIHRoZSBtb2R1bGUncyBtYWludGFpbmFiaWxpdHkgYnkgcmVkdWNpbmcgdGhlIHN0b3JhZ2Vcbi8vXHRcdHBhdGhzIHRvIGEgc2luZ2xlIG1lY2hhbmlzbS5cbi8vXHQzLiBVc2UgdGhlIHNhbWUgc2luZ2xlIG1lY2hhbmlzbSB0byBzdXBwb3J0IFwicHJpdmF0ZVwiIGFuZCBcInVzZXJcIiBkYXRhLlxuLy9cdDQuIF9OZXZlcl8gZXhwb3NlIFwicHJpdmF0ZVwiIGRhdGEgdG8gdXNlciBjb2RlIChUT0RPOiBEcm9wIF9kYXRhLCBfcmVtb3ZlRGF0YSlcbi8vXHQ1LiBBdm9pZCBleHBvc2luZyBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIG9uIHVzZXIgb2JqZWN0cyAoZWcuIGV4cGFuZG8gcHJvcGVydGllcylcbi8vXHQ2LiBQcm92aWRlIGEgY2xlYXIgcGF0aCBmb3IgaW1wbGVtZW50YXRpb24gdXBncmFkZSB0byBXZWFrTWFwIGluIDIwMTRcblxudmFyIHJicmFjZSA9IC9eKD86XFx7W1xcd1xcV10qXFx9fFxcW1tcXHdcXFddKlxcXSkkLyxcblx0cm11bHRpRGFzaCA9IC9bQS1aXS9nO1xuXG5mdW5jdGlvbiBnZXREYXRhKCBkYXRhICkge1xuXHRpZiAoIGRhdGEgPT09IFwidHJ1ZVwiICkge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0aWYgKCBkYXRhID09PSBcImZhbHNlXCIgKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0aWYgKCBkYXRhID09PSBcIm51bGxcIiApIHtcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdC8vIE9ubHkgY29udmVydCB0byBhIG51bWJlciBpZiBpdCBkb2Vzbid0IGNoYW5nZSB0aGUgc3RyaW5nXG5cdGlmICggZGF0YSA9PT0gK2RhdGEgKyBcIlwiICkge1xuXHRcdHJldHVybiArZGF0YTtcblx0fVxuXG5cdGlmICggcmJyYWNlLnRlc3QoIGRhdGEgKSApIHtcblx0XHRyZXR1cm4gSlNPTi5wYXJzZSggZGF0YSApO1xuXHR9XG5cblx0cmV0dXJuIGRhdGE7XG59XG5cbmZ1bmN0aW9uIGRhdGFBdHRyKCBlbGVtLCBrZXksIGRhdGEgKSB7XG5cdHZhciBuYW1lO1xuXG5cdC8vIElmIG5vdGhpbmcgd2FzIGZvdW5kIGludGVybmFsbHksIHRyeSB0byBmZXRjaCBhbnlcblx0Ly8gZGF0YSBmcm9tIHRoZSBIVE1MNSBkYXRhLSogYXR0cmlidXRlXG5cdGlmICggZGF0YSA9PT0gdW5kZWZpbmVkICYmIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7XG5cdFx0bmFtZSA9IFwiZGF0YS1cIiArIGtleS5yZXBsYWNlKCBybXVsdGlEYXNoLCBcIi0kJlwiICkudG9Mb3dlckNhc2UoKTtcblx0XHRkYXRhID0gZWxlbS5nZXRBdHRyaWJ1dGUoIG5hbWUgKTtcblxuXHRcdGlmICggdHlwZW9mIGRhdGEgPT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRkYXRhID0gZ2V0RGF0YSggZGF0YSApO1xuXHRcdFx0fSBjYXRjaCAoIGUgKSB7fVxuXG5cdFx0XHQvLyBNYWtlIHN1cmUgd2Ugc2V0IHRoZSBkYXRhIHNvIGl0IGlzbid0IGNoYW5nZWQgbGF0ZXJcblx0XHRcdGRhdGFVc2VyLnNldCggZWxlbSwga2V5LCBkYXRhICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGRhdGEgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBkYXRhO1xufVxuXG5qUXVlcnkuZXh0ZW5kKCB7XG5cdGhhc0RhdGE6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHJldHVybiBkYXRhVXNlci5oYXNEYXRhKCBlbGVtICkgfHwgZGF0YVByaXYuaGFzRGF0YSggZWxlbSApO1xuXHR9LFxuXG5cdGRhdGE6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCBkYXRhICkge1xuXHRcdHJldHVybiBkYXRhVXNlci5hY2Nlc3MoIGVsZW0sIG5hbWUsIGRhdGEgKTtcblx0fSxcblxuXHRyZW1vdmVEYXRhOiBmdW5jdGlvbiggZWxlbSwgbmFtZSApIHtcblx0XHRkYXRhVXNlci5yZW1vdmUoIGVsZW0sIG5hbWUgKTtcblx0fSxcblxuXHQvLyBUT0RPOiBOb3cgdGhhdCBhbGwgY2FsbHMgdG8gX2RhdGEgYW5kIF9yZW1vdmVEYXRhIGhhdmUgYmVlbiByZXBsYWNlZFxuXHQvLyB3aXRoIGRpcmVjdCBjYWxscyB0byBkYXRhUHJpdiBtZXRob2RzLCB0aGVzZSBjYW4gYmUgZGVwcmVjYXRlZC5cblx0X2RhdGE6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCBkYXRhICkge1xuXHRcdHJldHVybiBkYXRhUHJpdi5hY2Nlc3MoIGVsZW0sIG5hbWUsIGRhdGEgKTtcblx0fSxcblxuXHRfcmVtb3ZlRGF0YTogZnVuY3Rpb24oIGVsZW0sIG5hbWUgKSB7XG5cdFx0ZGF0YVByaXYucmVtb3ZlKCBlbGVtLCBuYW1lICk7XG5cdH1cbn0gKTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRkYXRhOiBmdW5jdGlvbigga2V5LCB2YWx1ZSApIHtcblx0XHR2YXIgaSwgbmFtZSwgZGF0YSxcblx0XHRcdGVsZW0gPSB0aGlzWyAwIF0sXG5cdFx0XHRhdHRycyA9IGVsZW0gJiYgZWxlbS5hdHRyaWJ1dGVzO1xuXG5cdFx0Ly8gR2V0cyBhbGwgdmFsdWVzXG5cdFx0aWYgKCBrZXkgPT09IHVuZGVmaW5lZCApIHtcblx0XHRcdGlmICggdGhpcy5sZW5ndGggKSB7XG5cdFx0XHRcdGRhdGEgPSBkYXRhVXNlci5nZXQoIGVsZW0gKTtcblxuXHRcdFx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgJiYgIWRhdGFQcml2LmdldCggZWxlbSwgXCJoYXNEYXRhQXR0cnNcIiApICkge1xuXHRcdFx0XHRcdGkgPSBhdHRycy5sZW5ndGg7XG5cdFx0XHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cblx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDExIG9ubHlcblx0XHRcdFx0XHRcdC8vIFRoZSBhdHRycyBlbGVtZW50cyBjYW4gYmUgbnVsbCAoIzE0ODk0KVxuXHRcdFx0XHRcdFx0aWYgKCBhdHRyc1sgaSBdICkge1xuXHRcdFx0XHRcdFx0XHRuYW1lID0gYXR0cnNbIGkgXS5uYW1lO1xuXHRcdFx0XHRcdFx0XHRpZiAoIG5hbWUuaW5kZXhPZiggXCJkYXRhLVwiICkgPT09IDAgKSB7XG5cdFx0XHRcdFx0XHRcdFx0bmFtZSA9IGNhbWVsQ2FzZSggbmFtZS5zbGljZSggNSApICk7XG5cdFx0XHRcdFx0XHRcdFx0ZGF0YUF0dHIoIGVsZW0sIG5hbWUsIGRhdGFbIG5hbWUgXSApO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGRhdGFQcml2LnNldCggZWxlbSwgXCJoYXNEYXRhQXR0cnNcIiwgdHJ1ZSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBkYXRhO1xuXHRcdH1cblxuXHRcdC8vIFNldHMgbXVsdGlwbGUgdmFsdWVzXG5cdFx0aWYgKCB0eXBlb2Yga2V5ID09PSBcIm9iamVjdFwiICkge1xuXHRcdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGRhdGFVc2VyLnNldCggdGhpcywga2V5ICk7XG5cdFx0XHR9ICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGFjY2VzcyggdGhpcywgZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdFx0dmFyIGRhdGE7XG5cblx0XHRcdC8vIFRoZSBjYWxsaW5nIGpRdWVyeSBvYmplY3QgKGVsZW1lbnQgbWF0Y2hlcykgaXMgbm90IGVtcHR5XG5cdFx0XHQvLyAoYW5kIHRoZXJlZm9yZSBoYXMgYW4gZWxlbWVudCBhcHBlYXJzIGF0IHRoaXNbIDAgXSkgYW5kIHRoZVxuXHRcdFx0Ly8gYHZhbHVlYCBwYXJhbWV0ZXIgd2FzIG5vdCB1bmRlZmluZWQuIEFuIGVtcHR5IGpRdWVyeSBvYmplY3Rcblx0XHRcdC8vIHdpbGwgcmVzdWx0IGluIGB1bmRlZmluZWRgIGZvciBlbGVtID0gdGhpc1sgMCBdIHdoaWNoIHdpbGxcblx0XHRcdC8vIHRocm93IGFuIGV4Y2VwdGlvbiBpZiBhbiBhdHRlbXB0IHRvIHJlYWQgYSBkYXRhIGNhY2hlIGlzIG1hZGUuXG5cdFx0XHRpZiAoIGVsZW0gJiYgdmFsdWUgPT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0XHQvLyBBdHRlbXB0IHRvIGdldCBkYXRhIGZyb20gdGhlIGNhY2hlXG5cdFx0XHRcdC8vIFRoZSBrZXkgd2lsbCBhbHdheXMgYmUgY2FtZWxDYXNlZCBpbiBEYXRhXG5cdFx0XHRcdGRhdGEgPSBkYXRhVXNlci5nZXQoIGVsZW0sIGtleSApO1xuXHRcdFx0XHRpZiAoIGRhdGEgIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0XHRyZXR1cm4gZGF0YTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIEF0dGVtcHQgdG8gXCJkaXNjb3ZlclwiIHRoZSBkYXRhIGluXG5cdFx0XHRcdC8vIEhUTUw1IGN1c3RvbSBkYXRhLSogYXR0cnNcblx0XHRcdFx0ZGF0YSA9IGRhdGFBdHRyKCBlbGVtLCBrZXkgKTtcblx0XHRcdFx0aWYgKCBkYXRhICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGRhdGE7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBXZSB0cmllZCByZWFsbHkgaGFyZCwgYnV0IHRoZSBkYXRhIGRvZXNuJ3QgZXhpc3QuXG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU2V0IHRoZSBkYXRhLi4uXG5cdFx0XHR0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXG5cdFx0XHRcdC8vIFdlIGFsd2F5cyBzdG9yZSB0aGUgY2FtZWxDYXNlZCBrZXlcblx0XHRcdFx0ZGF0YVVzZXIuc2V0KCB0aGlzLCBrZXksIHZhbHVlICk7XG5cdFx0XHR9ICk7XG5cdFx0fSwgbnVsbCwgdmFsdWUsIGFyZ3VtZW50cy5sZW5ndGggPiAxLCBudWxsLCB0cnVlICk7XG5cdH0sXG5cblx0cmVtb3ZlRGF0YTogZnVuY3Rpb24oIGtleSApIHtcblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdGRhdGFVc2VyLnJlbW92ZSggdGhpcywga2V5ICk7XG5cdFx0fSApO1xuXHR9XG59ICk7XG5cblxualF1ZXJ5LmV4dGVuZCgge1xuXHRxdWV1ZTogZnVuY3Rpb24oIGVsZW0sIHR5cGUsIGRhdGEgKSB7XG5cdFx0dmFyIHF1ZXVlO1xuXG5cdFx0aWYgKCBlbGVtICkge1xuXHRcdFx0dHlwZSA9ICggdHlwZSB8fCBcImZ4XCIgKSArIFwicXVldWVcIjtcblx0XHRcdHF1ZXVlID0gZGF0YVByaXYuZ2V0KCBlbGVtLCB0eXBlICk7XG5cblx0XHRcdC8vIFNwZWVkIHVwIGRlcXVldWUgYnkgZ2V0dGluZyBvdXQgcXVpY2tseSBpZiB0aGlzIGlzIGp1c3QgYSBsb29rdXBcblx0XHRcdGlmICggZGF0YSApIHtcblx0XHRcdFx0aWYgKCAhcXVldWUgfHwgQXJyYXkuaXNBcnJheSggZGF0YSApICkge1xuXHRcdFx0XHRcdHF1ZXVlID0gZGF0YVByaXYuYWNjZXNzKCBlbGVtLCB0eXBlLCBqUXVlcnkubWFrZUFycmF5KCBkYXRhICkgKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRxdWV1ZS5wdXNoKCBkYXRhICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiBxdWV1ZSB8fCBbXTtcblx0XHR9XG5cdH0sXG5cblx0ZGVxdWV1ZTogZnVuY3Rpb24oIGVsZW0sIHR5cGUgKSB7XG5cdFx0dHlwZSA9IHR5cGUgfHwgXCJmeFwiO1xuXG5cdFx0dmFyIHF1ZXVlID0galF1ZXJ5LnF1ZXVlKCBlbGVtLCB0eXBlICksXG5cdFx0XHRzdGFydExlbmd0aCA9IHF1ZXVlLmxlbmd0aCxcblx0XHRcdGZuID0gcXVldWUuc2hpZnQoKSxcblx0XHRcdGhvb2tzID0galF1ZXJ5Ll9xdWV1ZUhvb2tzKCBlbGVtLCB0eXBlICksXG5cdFx0XHRuZXh0ID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGpRdWVyeS5kZXF1ZXVlKCBlbGVtLCB0eXBlICk7XG5cdFx0XHR9O1xuXG5cdFx0Ly8gSWYgdGhlIGZ4IHF1ZXVlIGlzIGRlcXVldWVkLCBhbHdheXMgcmVtb3ZlIHRoZSBwcm9ncmVzcyBzZW50aW5lbFxuXHRcdGlmICggZm4gPT09IFwiaW5wcm9ncmVzc1wiICkge1xuXHRcdFx0Zm4gPSBxdWV1ZS5zaGlmdCgpO1xuXHRcdFx0c3RhcnRMZW5ndGgtLTtcblx0XHR9XG5cblx0XHRpZiAoIGZuICkge1xuXG5cdFx0XHQvLyBBZGQgYSBwcm9ncmVzcyBzZW50aW5lbCB0byBwcmV2ZW50IHRoZSBmeCBxdWV1ZSBmcm9tIGJlaW5nXG5cdFx0XHQvLyBhdXRvbWF0aWNhbGx5IGRlcXVldWVkXG5cdFx0XHRpZiAoIHR5cGUgPT09IFwiZnhcIiApIHtcblx0XHRcdFx0cXVldWUudW5zaGlmdCggXCJpbnByb2dyZXNzXCIgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQ2xlYXIgdXAgdGhlIGxhc3QgcXVldWUgc3RvcCBmdW5jdGlvblxuXHRcdFx0ZGVsZXRlIGhvb2tzLnN0b3A7XG5cdFx0XHRmbi5jYWxsKCBlbGVtLCBuZXh0LCBob29rcyApO1xuXHRcdH1cblxuXHRcdGlmICggIXN0YXJ0TGVuZ3RoICYmIGhvb2tzICkge1xuXHRcdFx0aG9va3MuZW1wdHkuZmlyZSgpO1xuXHRcdH1cblx0fSxcblxuXHQvLyBOb3QgcHVibGljIC0gZ2VuZXJhdGUgYSBxdWV1ZUhvb2tzIG9iamVjdCwgb3IgcmV0dXJuIHRoZSBjdXJyZW50IG9uZVxuXHRfcXVldWVIb29rczogZnVuY3Rpb24oIGVsZW0sIHR5cGUgKSB7XG5cdFx0dmFyIGtleSA9IHR5cGUgKyBcInF1ZXVlSG9va3NcIjtcblx0XHRyZXR1cm4gZGF0YVByaXYuZ2V0KCBlbGVtLCBrZXkgKSB8fCBkYXRhUHJpdi5hY2Nlc3MoIGVsZW0sIGtleSwge1xuXHRcdFx0ZW1wdHk6IGpRdWVyeS5DYWxsYmFja3MoIFwib25jZSBtZW1vcnlcIiApLmFkZCggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGRhdGFQcml2LnJlbW92ZSggZWxlbSwgWyB0eXBlICsgXCJxdWV1ZVwiLCBrZXkgXSApO1xuXHRcdFx0fSApXG5cdFx0fSApO1xuXHR9XG59ICk7XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0cXVldWU6IGZ1bmN0aW9uKCB0eXBlLCBkYXRhICkge1xuXHRcdHZhciBzZXR0ZXIgPSAyO1xuXG5cdFx0aWYgKCB0eXBlb2YgdHlwZSAhPT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdGRhdGEgPSB0eXBlO1xuXHRcdFx0dHlwZSA9IFwiZnhcIjtcblx0XHRcdHNldHRlci0tO1xuXHRcdH1cblxuXHRcdGlmICggYXJndW1lbnRzLmxlbmd0aCA8IHNldHRlciApIHtcblx0XHRcdHJldHVybiBqUXVlcnkucXVldWUoIHRoaXNbIDAgXSwgdHlwZSApO1xuXHRcdH1cblxuXHRcdHJldHVybiBkYXRhID09PSB1bmRlZmluZWQgP1xuXHRcdFx0dGhpcyA6XG5cdFx0XHR0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHR2YXIgcXVldWUgPSBqUXVlcnkucXVldWUoIHRoaXMsIHR5cGUsIGRhdGEgKTtcblxuXHRcdFx0XHQvLyBFbnN1cmUgYSBob29rcyBmb3IgdGhpcyBxdWV1ZVxuXHRcdFx0XHRqUXVlcnkuX3F1ZXVlSG9va3MoIHRoaXMsIHR5cGUgKTtcblxuXHRcdFx0XHRpZiAoIHR5cGUgPT09IFwiZnhcIiAmJiBxdWV1ZVsgMCBdICE9PSBcImlucHJvZ3Jlc3NcIiApIHtcblx0XHRcdFx0XHRqUXVlcnkuZGVxdWV1ZSggdGhpcywgdHlwZSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9ICk7XG5cdH0sXG5cdGRlcXVldWU6IGZ1bmN0aW9uKCB0eXBlICkge1xuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0alF1ZXJ5LmRlcXVldWUoIHRoaXMsIHR5cGUgKTtcblx0XHR9ICk7XG5cdH0sXG5cdGNsZWFyUXVldWU6IGZ1bmN0aW9uKCB0eXBlICkge1xuXHRcdHJldHVybiB0aGlzLnF1ZXVlKCB0eXBlIHx8IFwiZnhcIiwgW10gKTtcblx0fSxcblxuXHQvLyBHZXQgYSBwcm9taXNlIHJlc29sdmVkIHdoZW4gcXVldWVzIG9mIGEgY2VydGFpbiB0eXBlXG5cdC8vIGFyZSBlbXB0aWVkIChmeCBpcyB0aGUgdHlwZSBieSBkZWZhdWx0KVxuXHRwcm9taXNlOiBmdW5jdGlvbiggdHlwZSwgb2JqICkge1xuXHRcdHZhciB0bXAsXG5cdFx0XHRjb3VudCA9IDEsXG5cdFx0XHRkZWZlciA9IGpRdWVyeS5EZWZlcnJlZCgpLFxuXHRcdFx0ZWxlbWVudHMgPSB0aGlzLFxuXHRcdFx0aSA9IHRoaXMubGVuZ3RoLFxuXHRcdFx0cmVzb2x2ZSA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRpZiAoICEoIC0tY291bnQgKSApIHtcblx0XHRcdFx0XHRkZWZlci5yZXNvbHZlV2l0aCggZWxlbWVudHMsIFsgZWxlbWVudHMgXSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXG5cdFx0aWYgKCB0eXBlb2YgdHlwZSAhPT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdG9iaiA9IHR5cGU7XG5cdFx0XHR0eXBlID0gdW5kZWZpbmVkO1xuXHRcdH1cblx0XHR0eXBlID0gdHlwZSB8fCBcImZ4XCI7XG5cblx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdHRtcCA9IGRhdGFQcml2LmdldCggZWxlbWVudHNbIGkgXSwgdHlwZSArIFwicXVldWVIb29rc1wiICk7XG5cdFx0XHRpZiAoIHRtcCAmJiB0bXAuZW1wdHkgKSB7XG5cdFx0XHRcdGNvdW50Kys7XG5cdFx0XHRcdHRtcC5lbXB0eS5hZGQoIHJlc29sdmUgKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmVzb2x2ZSgpO1xuXHRcdHJldHVybiBkZWZlci5wcm9taXNlKCBvYmogKTtcblx0fVxufSApO1xudmFyIHBudW0gPSAoIC9bKy1dPyg/OlxcZCpcXC58KVxcZCsoPzpbZUVdWystXT9cXGQrfCkvICkuc291cmNlO1xuXG52YXIgcmNzc051bSA9IG5ldyBSZWdFeHAoIFwiXig/OihbKy1dKT18KShcIiArIHBudW0gKyBcIikoW2EteiVdKikkXCIsIFwiaVwiICk7XG5cblxudmFyIGNzc0V4cGFuZCA9IFsgXCJUb3BcIiwgXCJSaWdodFwiLCBcIkJvdHRvbVwiLCBcIkxlZnRcIiBdO1xuXG52YXIgZG9jdW1lbnRFbGVtZW50ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuXG5cblxuXHR2YXIgaXNBdHRhY2hlZCA9IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuIGpRdWVyeS5jb250YWlucyggZWxlbS5vd25lckRvY3VtZW50LCBlbGVtICk7XG5cdFx0fSxcblx0XHRjb21wb3NlZCA9IHsgY29tcG9zZWQ6IHRydWUgfTtcblxuXHQvLyBTdXBwb3J0OiBJRSA5IC0gMTErLCBFZGdlIDEyIC0gMTgrLCBpT1MgMTAuMCAtIDEwLjIgb25seVxuXHQvLyBDaGVjayBhdHRhY2htZW50IGFjcm9zcyBzaGFkb3cgRE9NIGJvdW5kYXJpZXMgd2hlbiBwb3NzaWJsZSAoZ2gtMzUwNClcblx0Ly8gU3VwcG9ydDogaU9TIDEwLjAtMTAuMiBvbmx5XG5cdC8vIEVhcmx5IGlPUyAxMCB2ZXJzaW9ucyBzdXBwb3J0IGBhdHRhY2hTaGFkb3dgIGJ1dCBub3QgYGdldFJvb3ROb2RlYCxcblx0Ly8gbGVhZGluZyB0byBlcnJvcnMuIFdlIG5lZWQgdG8gY2hlY2sgZm9yIGBnZXRSb290Tm9kZWAuXG5cdGlmICggZG9jdW1lbnRFbGVtZW50LmdldFJvb3ROb2RlICkge1xuXHRcdGlzQXR0YWNoZWQgPSBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiBqUXVlcnkuY29udGFpbnMoIGVsZW0ub3duZXJEb2N1bWVudCwgZWxlbSApIHx8XG5cdFx0XHRcdGVsZW0uZ2V0Um9vdE5vZGUoIGNvbXBvc2VkICkgPT09IGVsZW0ub3duZXJEb2N1bWVudDtcblx0XHR9O1xuXHR9XG52YXIgaXNIaWRkZW5XaXRoaW5UcmVlID0gZnVuY3Rpb24oIGVsZW0sIGVsICkge1xuXG5cdFx0Ly8gaXNIaWRkZW5XaXRoaW5UcmVlIG1pZ2h0IGJlIGNhbGxlZCBmcm9tIGpRdWVyeSNmaWx0ZXIgZnVuY3Rpb247XG5cdFx0Ly8gaW4gdGhhdCBjYXNlLCBlbGVtZW50IHdpbGwgYmUgc2Vjb25kIGFyZ3VtZW50XG5cdFx0ZWxlbSA9IGVsIHx8IGVsZW07XG5cblx0XHQvLyBJbmxpbmUgc3R5bGUgdHJ1bXBzIGFsbFxuXHRcdHJldHVybiBlbGVtLnN0eWxlLmRpc3BsYXkgPT09IFwibm9uZVwiIHx8XG5cdFx0XHRlbGVtLnN0eWxlLmRpc3BsYXkgPT09IFwiXCIgJiZcblxuXHRcdFx0Ly8gT3RoZXJ3aXNlLCBjaGVjayBjb21wdXRlZCBzdHlsZVxuXHRcdFx0Ly8gU3VwcG9ydDogRmlyZWZveCA8PTQzIC0gNDVcblx0XHRcdC8vIERpc2Nvbm5lY3RlZCBlbGVtZW50cyBjYW4gaGF2ZSBjb21wdXRlZCBkaXNwbGF5OiBub25lLCBzbyBmaXJzdCBjb25maXJtIHRoYXQgZWxlbSBpc1xuXHRcdFx0Ly8gaW4gdGhlIGRvY3VtZW50LlxuXHRcdFx0aXNBdHRhY2hlZCggZWxlbSApICYmXG5cblx0XHRcdGpRdWVyeS5jc3MoIGVsZW0sIFwiZGlzcGxheVwiICkgPT09IFwibm9uZVwiO1xuXHR9O1xuXG52YXIgc3dhcCA9IGZ1bmN0aW9uKCBlbGVtLCBvcHRpb25zLCBjYWxsYmFjaywgYXJncyApIHtcblx0dmFyIHJldCwgbmFtZSxcblx0XHRvbGQgPSB7fTtcblxuXHQvLyBSZW1lbWJlciB0aGUgb2xkIHZhbHVlcywgYW5kIGluc2VydCB0aGUgbmV3IG9uZXNcblx0Zm9yICggbmFtZSBpbiBvcHRpb25zICkge1xuXHRcdG9sZFsgbmFtZSBdID0gZWxlbS5zdHlsZVsgbmFtZSBdO1xuXHRcdGVsZW0uc3R5bGVbIG5hbWUgXSA9IG9wdGlvbnNbIG5hbWUgXTtcblx0fVxuXG5cdHJldCA9IGNhbGxiYWNrLmFwcGx5KCBlbGVtLCBhcmdzIHx8IFtdICk7XG5cblx0Ly8gUmV2ZXJ0IHRoZSBvbGQgdmFsdWVzXG5cdGZvciAoIG5hbWUgaW4gb3B0aW9ucyApIHtcblx0XHRlbGVtLnN0eWxlWyBuYW1lIF0gPSBvbGRbIG5hbWUgXTtcblx0fVxuXG5cdHJldHVybiByZXQ7XG59O1xuXG5cblxuXG5mdW5jdGlvbiBhZGp1c3RDU1MoIGVsZW0sIHByb3AsIHZhbHVlUGFydHMsIHR3ZWVuICkge1xuXHR2YXIgYWRqdXN0ZWQsIHNjYWxlLFxuXHRcdG1heEl0ZXJhdGlvbnMgPSAyMCxcblx0XHRjdXJyZW50VmFsdWUgPSB0d2VlbiA/XG5cdFx0XHRmdW5jdGlvbigpIHtcblx0XHRcdFx0cmV0dXJuIHR3ZWVuLmN1cigpO1xuXHRcdFx0fSA6XG5cdFx0XHRmdW5jdGlvbigpIHtcblx0XHRcdFx0cmV0dXJuIGpRdWVyeS5jc3MoIGVsZW0sIHByb3AsIFwiXCIgKTtcblx0XHRcdH0sXG5cdFx0aW5pdGlhbCA9IGN1cnJlbnRWYWx1ZSgpLFxuXHRcdHVuaXQgPSB2YWx1ZVBhcnRzICYmIHZhbHVlUGFydHNbIDMgXSB8fCAoIGpRdWVyeS5jc3NOdW1iZXJbIHByb3AgXSA/IFwiXCIgOiBcInB4XCIgKSxcblxuXHRcdC8vIFN0YXJ0aW5nIHZhbHVlIGNvbXB1dGF0aW9uIGlzIHJlcXVpcmVkIGZvciBwb3RlbnRpYWwgdW5pdCBtaXNtYXRjaGVzXG5cdFx0aW5pdGlhbEluVW5pdCA9IGVsZW0ubm9kZVR5cGUgJiZcblx0XHRcdCggalF1ZXJ5LmNzc051bWJlclsgcHJvcCBdIHx8IHVuaXQgIT09IFwicHhcIiAmJiAraW5pdGlhbCApICYmXG5cdFx0XHRyY3NzTnVtLmV4ZWMoIGpRdWVyeS5jc3MoIGVsZW0sIHByb3AgKSApO1xuXG5cdGlmICggaW5pdGlhbEluVW5pdCAmJiBpbml0aWFsSW5Vbml0WyAzIF0gIT09IHVuaXQgKSB7XG5cblx0XHQvLyBTdXBwb3J0OiBGaXJlZm94IDw9NTRcblx0XHQvLyBIYWx2ZSB0aGUgaXRlcmF0aW9uIHRhcmdldCB2YWx1ZSB0byBwcmV2ZW50IGludGVyZmVyZW5jZSBmcm9tIENTUyB1cHBlciBib3VuZHMgKGdoLTIxNDQpXG5cdFx0aW5pdGlhbCA9IGluaXRpYWwgLyAyO1xuXG5cdFx0Ly8gVHJ1c3QgdW5pdHMgcmVwb3J0ZWQgYnkgalF1ZXJ5LmNzc1xuXHRcdHVuaXQgPSB1bml0IHx8IGluaXRpYWxJblVuaXRbIDMgXTtcblxuXHRcdC8vIEl0ZXJhdGl2ZWx5IGFwcHJveGltYXRlIGZyb20gYSBub256ZXJvIHN0YXJ0aW5nIHBvaW50XG5cdFx0aW5pdGlhbEluVW5pdCA9ICtpbml0aWFsIHx8IDE7XG5cblx0XHR3aGlsZSAoIG1heEl0ZXJhdGlvbnMtLSApIHtcblxuXHRcdFx0Ly8gRXZhbHVhdGUgYW5kIHVwZGF0ZSBvdXIgYmVzdCBndWVzcyAoZG91YmxpbmcgZ3Vlc3NlcyB0aGF0IHplcm8gb3V0KS5cblx0XHRcdC8vIEZpbmlzaCBpZiB0aGUgc2NhbGUgZXF1YWxzIG9yIGNyb3NzZXMgMSAobWFraW5nIHRoZSBvbGQqbmV3IHByb2R1Y3Qgbm9uLXBvc2l0aXZlKS5cblx0XHRcdGpRdWVyeS5zdHlsZSggZWxlbSwgcHJvcCwgaW5pdGlhbEluVW5pdCArIHVuaXQgKTtcblx0XHRcdGlmICggKCAxIC0gc2NhbGUgKSAqICggMSAtICggc2NhbGUgPSBjdXJyZW50VmFsdWUoKSAvIGluaXRpYWwgfHwgMC41ICkgKSA8PSAwICkge1xuXHRcdFx0XHRtYXhJdGVyYXRpb25zID0gMDtcblx0XHRcdH1cblx0XHRcdGluaXRpYWxJblVuaXQgPSBpbml0aWFsSW5Vbml0IC8gc2NhbGU7XG5cblx0XHR9XG5cblx0XHRpbml0aWFsSW5Vbml0ID0gaW5pdGlhbEluVW5pdCAqIDI7XG5cdFx0alF1ZXJ5LnN0eWxlKCBlbGVtLCBwcm9wLCBpbml0aWFsSW5Vbml0ICsgdW5pdCApO1xuXG5cdFx0Ly8gTWFrZSBzdXJlIHdlIHVwZGF0ZSB0aGUgdHdlZW4gcHJvcGVydGllcyBsYXRlciBvblxuXHRcdHZhbHVlUGFydHMgPSB2YWx1ZVBhcnRzIHx8IFtdO1xuXHR9XG5cblx0aWYgKCB2YWx1ZVBhcnRzICkge1xuXHRcdGluaXRpYWxJblVuaXQgPSAraW5pdGlhbEluVW5pdCB8fCAraW5pdGlhbCB8fCAwO1xuXG5cdFx0Ly8gQXBwbHkgcmVsYXRpdmUgb2Zmc2V0ICgrPS8tPSkgaWYgc3BlY2lmaWVkXG5cdFx0YWRqdXN0ZWQgPSB2YWx1ZVBhcnRzWyAxIF0gP1xuXHRcdFx0aW5pdGlhbEluVW5pdCArICggdmFsdWVQYXJ0c1sgMSBdICsgMSApICogdmFsdWVQYXJ0c1sgMiBdIDpcblx0XHRcdCt2YWx1ZVBhcnRzWyAyIF07XG5cdFx0aWYgKCB0d2VlbiApIHtcblx0XHRcdHR3ZWVuLnVuaXQgPSB1bml0O1xuXHRcdFx0dHdlZW4uc3RhcnQgPSBpbml0aWFsSW5Vbml0O1xuXHRcdFx0dHdlZW4uZW5kID0gYWRqdXN0ZWQ7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBhZGp1c3RlZDtcbn1cblxuXG52YXIgZGVmYXVsdERpc3BsYXlNYXAgPSB7fTtcblxuZnVuY3Rpb24gZ2V0RGVmYXVsdERpc3BsYXkoIGVsZW0gKSB7XG5cdHZhciB0ZW1wLFxuXHRcdGRvYyA9IGVsZW0ub3duZXJEb2N1bWVudCxcblx0XHRub2RlTmFtZSA9IGVsZW0ubm9kZU5hbWUsXG5cdFx0ZGlzcGxheSA9IGRlZmF1bHREaXNwbGF5TWFwWyBub2RlTmFtZSBdO1xuXG5cdGlmICggZGlzcGxheSApIHtcblx0XHRyZXR1cm4gZGlzcGxheTtcblx0fVxuXG5cdHRlbXAgPSBkb2MuYm9keS5hcHBlbmRDaGlsZCggZG9jLmNyZWF0ZUVsZW1lbnQoIG5vZGVOYW1lICkgKTtcblx0ZGlzcGxheSA9IGpRdWVyeS5jc3MoIHRlbXAsIFwiZGlzcGxheVwiICk7XG5cblx0dGVtcC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKCB0ZW1wICk7XG5cblx0aWYgKCBkaXNwbGF5ID09PSBcIm5vbmVcIiApIHtcblx0XHRkaXNwbGF5ID0gXCJibG9ja1wiO1xuXHR9XG5cdGRlZmF1bHREaXNwbGF5TWFwWyBub2RlTmFtZSBdID0gZGlzcGxheTtcblxuXHRyZXR1cm4gZGlzcGxheTtcbn1cblxuZnVuY3Rpb24gc2hvd0hpZGUoIGVsZW1lbnRzLCBzaG93ICkge1xuXHR2YXIgZGlzcGxheSwgZWxlbSxcblx0XHR2YWx1ZXMgPSBbXSxcblx0XHRpbmRleCA9IDAsXG5cdFx0bGVuZ3RoID0gZWxlbWVudHMubGVuZ3RoO1xuXG5cdC8vIERldGVybWluZSBuZXcgZGlzcGxheSB2YWx1ZSBmb3IgZWxlbWVudHMgdGhhdCBuZWVkIHRvIGNoYW5nZVxuXHRmb3IgKCA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrICkge1xuXHRcdGVsZW0gPSBlbGVtZW50c1sgaW5kZXggXTtcblx0XHRpZiAoICFlbGVtLnN0eWxlICkge1xuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXG5cdFx0ZGlzcGxheSA9IGVsZW0uc3R5bGUuZGlzcGxheTtcblx0XHRpZiAoIHNob3cgKSB7XG5cblx0XHRcdC8vIFNpbmNlIHdlIGZvcmNlIHZpc2liaWxpdHkgdXBvbiBjYXNjYWRlLWhpZGRlbiBlbGVtZW50cywgYW4gaW1tZWRpYXRlIChhbmQgc2xvdylcblx0XHRcdC8vIGNoZWNrIGlzIHJlcXVpcmVkIGluIHRoaXMgZmlyc3QgbG9vcCB1bmxlc3Mgd2UgaGF2ZSBhIG5vbmVtcHR5IGRpc3BsYXkgdmFsdWUgKGVpdGhlclxuXHRcdFx0Ly8gaW5saW5lIG9yIGFib3V0LXRvLWJlLXJlc3RvcmVkKVxuXHRcdFx0aWYgKCBkaXNwbGF5ID09PSBcIm5vbmVcIiApIHtcblx0XHRcdFx0dmFsdWVzWyBpbmRleCBdID0gZGF0YVByaXYuZ2V0KCBlbGVtLCBcImRpc3BsYXlcIiApIHx8IG51bGw7XG5cdFx0XHRcdGlmICggIXZhbHVlc1sgaW5kZXggXSApIHtcblx0XHRcdFx0XHRlbGVtLnN0eWxlLmRpc3BsYXkgPSBcIlwiO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRpZiAoIGVsZW0uc3R5bGUuZGlzcGxheSA9PT0gXCJcIiAmJiBpc0hpZGRlbldpdGhpblRyZWUoIGVsZW0gKSApIHtcblx0XHRcdFx0dmFsdWVzWyBpbmRleCBdID0gZ2V0RGVmYXVsdERpc3BsYXkoIGVsZW0gKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0aWYgKCBkaXNwbGF5ICE9PSBcIm5vbmVcIiApIHtcblx0XHRcdFx0dmFsdWVzWyBpbmRleCBdID0gXCJub25lXCI7XG5cblx0XHRcdFx0Ly8gUmVtZW1iZXIgd2hhdCB3ZSdyZSBvdmVyd3JpdGluZ1xuXHRcdFx0XHRkYXRhUHJpdi5zZXQoIGVsZW0sIFwiZGlzcGxheVwiLCBkaXNwbGF5ICk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gU2V0IHRoZSBkaXNwbGF5IG9mIHRoZSBlbGVtZW50cyBpbiBhIHNlY29uZCBsb29wIHRvIGF2b2lkIGNvbnN0YW50IHJlZmxvd1xuXHRmb3IgKCBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrICkge1xuXHRcdGlmICggdmFsdWVzWyBpbmRleCBdICE9IG51bGwgKSB7XG5cdFx0XHRlbGVtZW50c1sgaW5kZXggXS5zdHlsZS5kaXNwbGF5ID0gdmFsdWVzWyBpbmRleCBdO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBlbGVtZW50cztcbn1cblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRzaG93OiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gc2hvd0hpZGUoIHRoaXMsIHRydWUgKTtcblx0fSxcblx0aGlkZTogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHNob3dIaWRlKCB0aGlzICk7XG5cdH0sXG5cdHRvZ2dsZTogZnVuY3Rpb24oIHN0YXRlICkge1xuXHRcdGlmICggdHlwZW9mIHN0YXRlID09PSBcImJvb2xlYW5cIiApIHtcblx0XHRcdHJldHVybiBzdGF0ZSA/IHRoaXMuc2hvdygpIDogdGhpcy5oaWRlKCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRpZiAoIGlzSGlkZGVuV2l0aGluVHJlZSggdGhpcyApICkge1xuXHRcdFx0XHRqUXVlcnkoIHRoaXMgKS5zaG93KCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRqUXVlcnkoIHRoaXMgKS5oaWRlKCk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9XG59ICk7XG52YXIgcmNoZWNrYWJsZVR5cGUgPSAoIC9eKD86Y2hlY2tib3h8cmFkaW8pJC9pICk7XG5cbnZhciBydGFnTmFtZSA9ICggLzwoW2Etel1bXlxcL1xcMD5cXHgyMFxcdFxcclxcblxcZl0qKS9pICk7XG5cbnZhciByc2NyaXB0VHlwZSA9ICggL14kfF5tb2R1bGUkfFxcLyg/OmphdmF8ZWNtYSlzY3JpcHQvaSApO1xuXG5cblxuLy8gV2UgaGF2ZSB0byBjbG9zZSB0aGVzZSB0YWdzIHRvIHN1cHBvcnQgWEhUTUwgKCMxMzIwMClcbnZhciB3cmFwTWFwID0ge1xuXG5cdC8vIFN1cHBvcnQ6IElFIDw9OSBvbmx5XG5cdG9wdGlvbjogWyAxLCBcIjxzZWxlY3QgbXVsdGlwbGU9J211bHRpcGxlJz5cIiwgXCI8L3NlbGVjdD5cIiBdLFxuXG5cdC8vIFhIVE1MIHBhcnNlcnMgZG8gbm90IG1hZ2ljYWxseSBpbnNlcnQgZWxlbWVudHMgaW4gdGhlXG5cdC8vIHNhbWUgd2F5IHRoYXQgdGFnIHNvdXAgcGFyc2VycyBkby4gU28gd2UgY2Fubm90IHNob3J0ZW5cblx0Ly8gdGhpcyBieSBvbWl0dGluZyA8dGJvZHk+IG9yIG90aGVyIHJlcXVpcmVkIGVsZW1lbnRzLlxuXHR0aGVhZDogWyAxLCBcIjx0YWJsZT5cIiwgXCI8L3RhYmxlPlwiIF0sXG5cdGNvbDogWyAyLCBcIjx0YWJsZT48Y29sZ3JvdXA+XCIsIFwiPC9jb2xncm91cD48L3RhYmxlPlwiIF0sXG5cdHRyOiBbIDIsIFwiPHRhYmxlPjx0Ym9keT5cIiwgXCI8L3Rib2R5PjwvdGFibGU+XCIgXSxcblx0dGQ6IFsgMywgXCI8dGFibGU+PHRib2R5Pjx0cj5cIiwgXCI8L3RyPjwvdGJvZHk+PC90YWJsZT5cIiBdLFxuXG5cdF9kZWZhdWx0OiBbIDAsIFwiXCIsIFwiXCIgXVxufTtcblxuLy8gU3VwcG9ydDogSUUgPD05IG9ubHlcbndyYXBNYXAub3B0Z3JvdXAgPSB3cmFwTWFwLm9wdGlvbjtcblxud3JhcE1hcC50Ym9keSA9IHdyYXBNYXAudGZvb3QgPSB3cmFwTWFwLmNvbGdyb3VwID0gd3JhcE1hcC5jYXB0aW9uID0gd3JhcE1hcC50aGVhZDtcbndyYXBNYXAudGggPSB3cmFwTWFwLnRkO1xuXG5cbmZ1bmN0aW9uIGdldEFsbCggY29udGV4dCwgdGFnICkge1xuXG5cdC8vIFN1cHBvcnQ6IElFIDw9OSAtIDExIG9ubHlcblx0Ly8gVXNlIHR5cGVvZiB0byBhdm9pZCB6ZXJvLWFyZ3VtZW50IG1ldGhvZCBpbnZvY2F0aW9uIG9uIGhvc3Qgb2JqZWN0cyAoIzE1MTUxKVxuXHR2YXIgcmV0O1xuXG5cdGlmICggdHlwZW9mIGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUgIT09IFwidW5kZWZpbmVkXCIgKSB7XG5cdFx0cmV0ID0gY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSggdGFnIHx8IFwiKlwiICk7XG5cblx0fSBlbHNlIGlmICggdHlwZW9mIGNvbnRleHQucXVlcnlTZWxlY3RvckFsbCAhPT0gXCJ1bmRlZmluZWRcIiApIHtcblx0XHRyZXQgPSBjb250ZXh0LnF1ZXJ5U2VsZWN0b3JBbGwoIHRhZyB8fCBcIipcIiApO1xuXG5cdH0gZWxzZSB7XG5cdFx0cmV0ID0gW107XG5cdH1cblxuXHRpZiAoIHRhZyA9PT0gdW5kZWZpbmVkIHx8IHRhZyAmJiBub2RlTmFtZSggY29udGV4dCwgdGFnICkgKSB7XG5cdFx0cmV0dXJuIGpRdWVyeS5tZXJnZSggWyBjb250ZXh0IF0sIHJldCApO1xuXHR9XG5cblx0cmV0dXJuIHJldDtcbn1cblxuXG4vLyBNYXJrIHNjcmlwdHMgYXMgaGF2aW5nIGFscmVhZHkgYmVlbiBldmFsdWF0ZWRcbmZ1bmN0aW9uIHNldEdsb2JhbEV2YWwoIGVsZW1zLCByZWZFbGVtZW50cyApIHtcblx0dmFyIGkgPSAwLFxuXHRcdGwgPSBlbGVtcy5sZW5ndGg7XG5cblx0Zm9yICggOyBpIDwgbDsgaSsrICkge1xuXHRcdGRhdGFQcml2LnNldChcblx0XHRcdGVsZW1zWyBpIF0sXG5cdFx0XHRcImdsb2JhbEV2YWxcIixcblx0XHRcdCFyZWZFbGVtZW50cyB8fCBkYXRhUHJpdi5nZXQoIHJlZkVsZW1lbnRzWyBpIF0sIFwiZ2xvYmFsRXZhbFwiIClcblx0XHQpO1xuXHR9XG59XG5cblxudmFyIHJodG1sID0gLzx8JiM/XFx3KzsvO1xuXG5mdW5jdGlvbiBidWlsZEZyYWdtZW50KCBlbGVtcywgY29udGV4dCwgc2NyaXB0cywgc2VsZWN0aW9uLCBpZ25vcmVkICkge1xuXHR2YXIgZWxlbSwgdG1wLCB0YWcsIHdyYXAsIGF0dGFjaGVkLCBqLFxuXHRcdGZyYWdtZW50ID0gY29udGV4dC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksXG5cdFx0bm9kZXMgPSBbXSxcblx0XHRpID0gMCxcblx0XHRsID0gZWxlbXMubGVuZ3RoO1xuXG5cdGZvciAoIDsgaSA8IGw7IGkrKyApIHtcblx0XHRlbGVtID0gZWxlbXNbIGkgXTtcblxuXHRcdGlmICggZWxlbSB8fCBlbGVtID09PSAwICkge1xuXG5cdFx0XHQvLyBBZGQgbm9kZXMgZGlyZWN0bHlcblx0XHRcdGlmICggdG9UeXBlKCBlbGVtICkgPT09IFwib2JqZWN0XCIgKSB7XG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogQW5kcm9pZCA8PTQuMCBvbmx5LCBQaGFudG9tSlMgMSBvbmx5XG5cdFx0XHRcdC8vIHB1c2guYXBwbHkoXywgYXJyYXlsaWtlKSB0aHJvd3Mgb24gYW5jaWVudCBXZWJLaXRcblx0XHRcdFx0alF1ZXJ5Lm1lcmdlKCBub2RlcywgZWxlbS5ub2RlVHlwZSA/IFsgZWxlbSBdIDogZWxlbSApO1xuXG5cdFx0XHQvLyBDb252ZXJ0IG5vbi1odG1sIGludG8gYSB0ZXh0IG5vZGVcblx0XHRcdH0gZWxzZSBpZiAoICFyaHRtbC50ZXN0KCBlbGVtICkgKSB7XG5cdFx0XHRcdG5vZGVzLnB1c2goIGNvbnRleHQuY3JlYXRlVGV4dE5vZGUoIGVsZW0gKSApO1xuXG5cdFx0XHQvLyBDb252ZXJ0IGh0bWwgaW50byBET00gbm9kZXNcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRtcCA9IHRtcCB8fCBmcmFnbWVudC5hcHBlbmRDaGlsZCggY29udGV4dC5jcmVhdGVFbGVtZW50KCBcImRpdlwiICkgKTtcblxuXHRcdFx0XHQvLyBEZXNlcmlhbGl6ZSBhIHN0YW5kYXJkIHJlcHJlc2VudGF0aW9uXG5cdFx0XHRcdHRhZyA9ICggcnRhZ05hbWUuZXhlYyggZWxlbSApIHx8IFsgXCJcIiwgXCJcIiBdIClbIDEgXS50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0XHR3cmFwID0gd3JhcE1hcFsgdGFnIF0gfHwgd3JhcE1hcC5fZGVmYXVsdDtcblx0XHRcdFx0dG1wLmlubmVySFRNTCA9IHdyYXBbIDEgXSArIGpRdWVyeS5odG1sUHJlZmlsdGVyKCBlbGVtICkgKyB3cmFwWyAyIF07XG5cblx0XHRcdFx0Ly8gRGVzY2VuZCB0aHJvdWdoIHdyYXBwZXJzIHRvIHRoZSByaWdodCBjb250ZW50XG5cdFx0XHRcdGogPSB3cmFwWyAwIF07XG5cdFx0XHRcdHdoaWxlICggai0tICkge1xuXHRcdFx0XHRcdHRtcCA9IHRtcC5sYXN0Q2hpbGQ7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBBbmRyb2lkIDw9NC4wIG9ubHksIFBoYW50b21KUyAxIG9ubHlcblx0XHRcdFx0Ly8gcHVzaC5hcHBseShfLCBhcnJheWxpa2UpIHRocm93cyBvbiBhbmNpZW50IFdlYktpdFxuXHRcdFx0XHRqUXVlcnkubWVyZ2UoIG5vZGVzLCB0bXAuY2hpbGROb2RlcyApO1xuXG5cdFx0XHRcdC8vIFJlbWVtYmVyIHRoZSB0b3AtbGV2ZWwgY29udGFpbmVyXG5cdFx0XHRcdHRtcCA9IGZyYWdtZW50LmZpcnN0Q2hpbGQ7XG5cblx0XHRcdFx0Ly8gRW5zdXJlIHRoZSBjcmVhdGVkIG5vZGVzIGFyZSBvcnBoYW5lZCAoIzEyMzkyKVxuXHRcdFx0XHR0bXAudGV4dENvbnRlbnQgPSBcIlwiO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIFJlbW92ZSB3cmFwcGVyIGZyb20gZnJhZ21lbnRcblx0ZnJhZ21lbnQudGV4dENvbnRlbnQgPSBcIlwiO1xuXG5cdGkgPSAwO1xuXHR3aGlsZSAoICggZWxlbSA9IG5vZGVzWyBpKysgXSApICkge1xuXG5cdFx0Ly8gU2tpcCBlbGVtZW50cyBhbHJlYWR5IGluIHRoZSBjb250ZXh0IGNvbGxlY3Rpb24gKHRyYWMtNDA4Nylcblx0XHRpZiAoIHNlbGVjdGlvbiAmJiBqUXVlcnkuaW5BcnJheSggZWxlbSwgc2VsZWN0aW9uICkgPiAtMSApIHtcblx0XHRcdGlmICggaWdub3JlZCApIHtcblx0XHRcdFx0aWdub3JlZC5wdXNoKCBlbGVtICk7XG5cdFx0XHR9XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cblx0XHRhdHRhY2hlZCA9IGlzQXR0YWNoZWQoIGVsZW0gKTtcblxuXHRcdC8vIEFwcGVuZCB0byBmcmFnbWVudFxuXHRcdHRtcCA9IGdldEFsbCggZnJhZ21lbnQuYXBwZW5kQ2hpbGQoIGVsZW0gKSwgXCJzY3JpcHRcIiApO1xuXG5cdFx0Ly8gUHJlc2VydmUgc2NyaXB0IGV2YWx1YXRpb24gaGlzdG9yeVxuXHRcdGlmICggYXR0YWNoZWQgKSB7XG5cdFx0XHRzZXRHbG9iYWxFdmFsKCB0bXAgKTtcblx0XHR9XG5cblx0XHQvLyBDYXB0dXJlIGV4ZWN1dGFibGVzXG5cdFx0aWYgKCBzY3JpcHRzICkge1xuXHRcdFx0aiA9IDA7XG5cdFx0XHR3aGlsZSAoICggZWxlbSA9IHRtcFsgaisrIF0gKSApIHtcblx0XHRcdFx0aWYgKCByc2NyaXB0VHlwZS50ZXN0KCBlbGVtLnR5cGUgfHwgXCJcIiApICkge1xuXHRcdFx0XHRcdHNjcmlwdHMucHVzaCggZWxlbSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGZyYWdtZW50O1xufVxuXG5cbiggZnVuY3Rpb24oKSB7XG5cdHZhciBmcmFnbWVudCA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxcblx0XHRkaXYgPSBmcmFnbWVudC5hcHBlbmRDaGlsZCggZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJkaXZcIiApICksXG5cdFx0aW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImlucHV0XCIgKTtcblxuXHQvLyBTdXBwb3J0OiBBbmRyb2lkIDQuMCAtIDQuMyBvbmx5XG5cdC8vIENoZWNrIHN0YXRlIGxvc3QgaWYgdGhlIG5hbWUgaXMgc2V0ICgjMTEyMTcpXG5cdC8vIFN1cHBvcnQ6IFdpbmRvd3MgV2ViIEFwcHMgKFdXQSlcblx0Ly8gYG5hbWVgIGFuZCBgdHlwZWAgbXVzdCB1c2UgLnNldEF0dHJpYnV0ZSBmb3IgV1dBICgjMTQ5MDEpXG5cdGlucHV0LnNldEF0dHJpYnV0ZSggXCJ0eXBlXCIsIFwicmFkaW9cIiApO1xuXHRpbnB1dC5zZXRBdHRyaWJ1dGUoIFwiY2hlY2tlZFwiLCBcImNoZWNrZWRcIiApO1xuXHRpbnB1dC5zZXRBdHRyaWJ1dGUoIFwibmFtZVwiLCBcInRcIiApO1xuXG5cdGRpdi5hcHBlbmRDaGlsZCggaW5wdXQgKTtcblxuXHQvLyBTdXBwb3J0OiBBbmRyb2lkIDw9NC4xIG9ubHlcblx0Ly8gT2xkZXIgV2ViS2l0IGRvZXNuJ3QgY2xvbmUgY2hlY2tlZCBzdGF0ZSBjb3JyZWN0bHkgaW4gZnJhZ21lbnRzXG5cdHN1cHBvcnQuY2hlY2tDbG9uZSA9IGRpdi5jbG9uZU5vZGUoIHRydWUgKS5jbG9uZU5vZGUoIHRydWUgKS5sYXN0Q2hpbGQuY2hlY2tlZDtcblxuXHQvLyBTdXBwb3J0OiBJRSA8PTExIG9ubHlcblx0Ly8gTWFrZSBzdXJlIHRleHRhcmVhIChhbmQgY2hlY2tib3gpIGRlZmF1bHRWYWx1ZSBpcyBwcm9wZXJseSBjbG9uZWRcblx0ZGl2LmlubmVySFRNTCA9IFwiPHRleHRhcmVhPng8L3RleHRhcmVhPlwiO1xuXHRzdXBwb3J0Lm5vQ2xvbmVDaGVja2VkID0gISFkaXYuY2xvbmVOb2RlKCB0cnVlICkubGFzdENoaWxkLmRlZmF1bHRWYWx1ZTtcbn0gKSgpO1xuXG5cbnZhclxuXHRya2V5RXZlbnQgPSAvXmtleS8sXG5cdHJtb3VzZUV2ZW50ID0gL14oPzptb3VzZXxwb2ludGVyfGNvbnRleHRtZW51fGRyYWd8ZHJvcCl8Y2xpY2svLFxuXHRydHlwZW5hbWVzcGFjZSA9IC9eKFteLl0qKSg/OlxcLiguKyl8KS87XG5cbmZ1bmN0aW9uIHJldHVyblRydWUoKSB7XG5cdHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiByZXR1cm5GYWxzZSgpIHtcblx0cmV0dXJuIGZhbHNlO1xufVxuXG4vLyBTdXBwb3J0OiBJRSA8PTkgLSAxMStcbi8vIGZvY3VzKCkgYW5kIGJsdXIoKSBhcmUgYXN5bmNocm9ub3VzLCBleGNlcHQgd2hlbiB0aGV5IGFyZSBuby1vcC5cbi8vIFNvIGV4cGVjdCBmb2N1cyB0byBiZSBzeW5jaHJvbm91cyB3aGVuIHRoZSBlbGVtZW50IGlzIGFscmVhZHkgYWN0aXZlLFxuLy8gYW5kIGJsdXIgdG8gYmUgc3luY2hyb25vdXMgd2hlbiB0aGUgZWxlbWVudCBpcyBub3QgYWxyZWFkeSBhY3RpdmUuXG4vLyAoZm9jdXMgYW5kIGJsdXIgYXJlIGFsd2F5cyBzeW5jaHJvbm91cyBpbiBvdGhlciBzdXBwb3J0ZWQgYnJvd3NlcnMsXG4vLyB0aGlzIGp1c3QgZGVmaW5lcyB3aGVuIHdlIGNhbiBjb3VudCBvbiBpdCkuXG5mdW5jdGlvbiBleHBlY3RTeW5jKCBlbGVtLCB0eXBlICkge1xuXHRyZXR1cm4gKCBlbGVtID09PSBzYWZlQWN0aXZlRWxlbWVudCgpICkgPT09ICggdHlwZSA9PT0gXCJmb2N1c1wiICk7XG59XG5cbi8vIFN1cHBvcnQ6IElFIDw9OSBvbmx5XG4vLyBBY2Nlc3NpbmcgZG9jdW1lbnQuYWN0aXZlRWxlbWVudCBjYW4gdGhyb3cgdW5leHBlY3RlZGx5XG4vLyBodHRwczovL2J1Z3MuanF1ZXJ5LmNvbS90aWNrZXQvMTMzOTNcbmZ1bmN0aW9uIHNhZmVBY3RpdmVFbGVtZW50KCkge1xuXHR0cnkge1xuXHRcdHJldHVybiBkb2N1bWVudC5hY3RpdmVFbGVtZW50O1xuXHR9IGNhdGNoICggZXJyICkgeyB9XG59XG5cbmZ1bmN0aW9uIG9uKCBlbGVtLCB0eXBlcywgc2VsZWN0b3IsIGRhdGEsIGZuLCBvbmUgKSB7XG5cdHZhciBvcmlnRm4sIHR5cGU7XG5cblx0Ly8gVHlwZXMgY2FuIGJlIGEgbWFwIG9mIHR5cGVzL2hhbmRsZXJzXG5cdGlmICggdHlwZW9mIHR5cGVzID09PSBcIm9iamVjdFwiICkge1xuXG5cdFx0Ly8gKCB0eXBlcy1PYmplY3QsIHNlbGVjdG9yLCBkYXRhIClcblx0XHRpZiAoIHR5cGVvZiBzZWxlY3RvciAhPT0gXCJzdHJpbmdcIiApIHtcblxuXHRcdFx0Ly8gKCB0eXBlcy1PYmplY3QsIGRhdGEgKVxuXHRcdFx0ZGF0YSA9IGRhdGEgfHwgc2VsZWN0b3I7XG5cdFx0XHRzZWxlY3RvciA9IHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0Zm9yICggdHlwZSBpbiB0eXBlcyApIHtcblx0XHRcdG9uKCBlbGVtLCB0eXBlLCBzZWxlY3RvciwgZGF0YSwgdHlwZXNbIHR5cGUgXSwgb25lICk7XG5cdFx0fVxuXHRcdHJldHVybiBlbGVtO1xuXHR9XG5cblx0aWYgKCBkYXRhID09IG51bGwgJiYgZm4gPT0gbnVsbCApIHtcblxuXHRcdC8vICggdHlwZXMsIGZuIClcblx0XHRmbiA9IHNlbGVjdG9yO1xuXHRcdGRhdGEgPSBzZWxlY3RvciA9IHVuZGVmaW5lZDtcblx0fSBlbHNlIGlmICggZm4gPT0gbnVsbCApIHtcblx0XHRpZiAoIHR5cGVvZiBzZWxlY3RvciA9PT0gXCJzdHJpbmdcIiApIHtcblxuXHRcdFx0Ly8gKCB0eXBlcywgc2VsZWN0b3IsIGZuIClcblx0XHRcdGZuID0gZGF0YTtcblx0XHRcdGRhdGEgPSB1bmRlZmluZWQ7XG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0Ly8gKCB0eXBlcywgZGF0YSwgZm4gKVxuXHRcdFx0Zm4gPSBkYXRhO1xuXHRcdFx0ZGF0YSA9IHNlbGVjdG9yO1xuXHRcdFx0c2VsZWN0b3IgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXHR9XG5cdGlmICggZm4gPT09IGZhbHNlICkge1xuXHRcdGZuID0gcmV0dXJuRmFsc2U7XG5cdH0gZWxzZSBpZiAoICFmbiApIHtcblx0XHRyZXR1cm4gZWxlbTtcblx0fVxuXG5cdGlmICggb25lID09PSAxICkge1xuXHRcdG9yaWdGbiA9IGZuO1xuXHRcdGZuID0gZnVuY3Rpb24oIGV2ZW50ICkge1xuXG5cdFx0XHQvLyBDYW4gdXNlIGFuIGVtcHR5IHNldCwgc2luY2UgZXZlbnQgY29udGFpbnMgdGhlIGluZm9cblx0XHRcdGpRdWVyeSgpLm9mZiggZXZlbnQgKTtcblx0XHRcdHJldHVybiBvcmlnRm4uYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApO1xuXHRcdH07XG5cblx0XHQvLyBVc2Ugc2FtZSBndWlkIHNvIGNhbGxlciBjYW4gcmVtb3ZlIHVzaW5nIG9yaWdGblxuXHRcdGZuLmd1aWQgPSBvcmlnRm4uZ3VpZCB8fCAoIG9yaWdGbi5ndWlkID0galF1ZXJ5Lmd1aWQrKyApO1xuXHR9XG5cdHJldHVybiBlbGVtLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdGpRdWVyeS5ldmVudC5hZGQoIHRoaXMsIHR5cGVzLCBmbiwgZGF0YSwgc2VsZWN0b3IgKTtcblx0fSApO1xufVxuXG4vKlxuICogSGVscGVyIGZ1bmN0aW9ucyBmb3IgbWFuYWdpbmcgZXZlbnRzIC0tIG5vdCBwYXJ0IG9mIHRoZSBwdWJsaWMgaW50ZXJmYWNlLlxuICogUHJvcHMgdG8gRGVhbiBFZHdhcmRzJyBhZGRFdmVudCBsaWJyYXJ5IGZvciBtYW55IG9mIHRoZSBpZGVhcy5cbiAqL1xualF1ZXJ5LmV2ZW50ID0ge1xuXG5cdGdsb2JhbDoge30sXG5cblx0YWRkOiBmdW5jdGlvbiggZWxlbSwgdHlwZXMsIGhhbmRsZXIsIGRhdGEsIHNlbGVjdG9yICkge1xuXG5cdFx0dmFyIGhhbmRsZU9iakluLCBldmVudEhhbmRsZSwgdG1wLFxuXHRcdFx0ZXZlbnRzLCB0LCBoYW5kbGVPYmosXG5cdFx0XHRzcGVjaWFsLCBoYW5kbGVycywgdHlwZSwgbmFtZXNwYWNlcywgb3JpZ1R5cGUsXG5cdFx0XHRlbGVtRGF0YSA9IGRhdGFQcml2LmdldCggZWxlbSApO1xuXG5cdFx0Ly8gRG9uJ3QgYXR0YWNoIGV2ZW50cyB0byBub0RhdGEgb3IgdGV4dC9jb21tZW50IG5vZGVzIChidXQgYWxsb3cgcGxhaW4gb2JqZWN0cylcblx0XHRpZiAoICFlbGVtRGF0YSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBDYWxsZXIgY2FuIHBhc3MgaW4gYW4gb2JqZWN0IG9mIGN1c3RvbSBkYXRhIGluIGxpZXUgb2YgdGhlIGhhbmRsZXJcblx0XHRpZiAoIGhhbmRsZXIuaGFuZGxlciApIHtcblx0XHRcdGhhbmRsZU9iakluID0gaGFuZGxlcjtcblx0XHRcdGhhbmRsZXIgPSBoYW5kbGVPYmpJbi5oYW5kbGVyO1xuXHRcdFx0c2VsZWN0b3IgPSBoYW5kbGVPYmpJbi5zZWxlY3Rvcjtcblx0XHR9XG5cblx0XHQvLyBFbnN1cmUgdGhhdCBpbnZhbGlkIHNlbGVjdG9ycyB0aHJvdyBleGNlcHRpb25zIGF0IGF0dGFjaCB0aW1lXG5cdFx0Ly8gRXZhbHVhdGUgYWdhaW5zdCBkb2N1bWVudEVsZW1lbnQgaW4gY2FzZSBlbGVtIGlzIGEgbm9uLWVsZW1lbnQgbm9kZSAoZS5nLiwgZG9jdW1lbnQpXG5cdFx0aWYgKCBzZWxlY3RvciApIHtcblx0XHRcdGpRdWVyeS5maW5kLm1hdGNoZXNTZWxlY3RvciggZG9jdW1lbnRFbGVtZW50LCBzZWxlY3RvciApO1xuXHRcdH1cblxuXHRcdC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSBoYW5kbGVyIGhhcyBhIHVuaXF1ZSBJRCwgdXNlZCB0byBmaW5kL3JlbW92ZSBpdCBsYXRlclxuXHRcdGlmICggIWhhbmRsZXIuZ3VpZCApIHtcblx0XHRcdGhhbmRsZXIuZ3VpZCA9IGpRdWVyeS5ndWlkKys7XG5cdFx0fVxuXG5cdFx0Ly8gSW5pdCB0aGUgZWxlbWVudCdzIGV2ZW50IHN0cnVjdHVyZSBhbmQgbWFpbiBoYW5kbGVyLCBpZiB0aGlzIGlzIHRoZSBmaXJzdFxuXHRcdGlmICggISggZXZlbnRzID0gZWxlbURhdGEuZXZlbnRzICkgKSB7XG5cdFx0XHRldmVudHMgPSBlbGVtRGF0YS5ldmVudHMgPSB7fTtcblx0XHR9XG5cdFx0aWYgKCAhKCBldmVudEhhbmRsZSA9IGVsZW1EYXRhLmhhbmRsZSApICkge1xuXHRcdFx0ZXZlbnRIYW5kbGUgPSBlbGVtRGF0YS5oYW5kbGUgPSBmdW5jdGlvbiggZSApIHtcblxuXHRcdFx0XHQvLyBEaXNjYXJkIHRoZSBzZWNvbmQgZXZlbnQgb2YgYSBqUXVlcnkuZXZlbnQudHJpZ2dlcigpIGFuZFxuXHRcdFx0XHQvLyB3aGVuIGFuIGV2ZW50IGlzIGNhbGxlZCBhZnRlciBhIHBhZ2UgaGFzIHVubG9hZGVkXG5cdFx0XHRcdHJldHVybiB0eXBlb2YgalF1ZXJ5ICE9PSBcInVuZGVmaW5lZFwiICYmIGpRdWVyeS5ldmVudC50cmlnZ2VyZWQgIT09IGUudHlwZSA/XG5cdFx0XHRcdFx0alF1ZXJ5LmV2ZW50LmRpc3BhdGNoLmFwcGx5KCBlbGVtLCBhcmd1bWVudHMgKSA6IHVuZGVmaW5lZDtcblx0XHRcdH07XG5cdFx0fVxuXG5cdFx0Ly8gSGFuZGxlIG11bHRpcGxlIGV2ZW50cyBzZXBhcmF0ZWQgYnkgYSBzcGFjZVxuXHRcdHR5cGVzID0gKCB0eXBlcyB8fCBcIlwiICkubWF0Y2goIHJub3RodG1sd2hpdGUgKSB8fCBbIFwiXCIgXTtcblx0XHR0ID0gdHlwZXMubGVuZ3RoO1xuXHRcdHdoaWxlICggdC0tICkge1xuXHRcdFx0dG1wID0gcnR5cGVuYW1lc3BhY2UuZXhlYyggdHlwZXNbIHQgXSApIHx8IFtdO1xuXHRcdFx0dHlwZSA9IG9yaWdUeXBlID0gdG1wWyAxIF07XG5cdFx0XHRuYW1lc3BhY2VzID0gKCB0bXBbIDIgXSB8fCBcIlwiICkuc3BsaXQoIFwiLlwiICkuc29ydCgpO1xuXG5cdFx0XHQvLyBUaGVyZSAqbXVzdCogYmUgYSB0eXBlLCBubyBhdHRhY2hpbmcgbmFtZXNwYWNlLW9ubHkgaGFuZGxlcnNcblx0XHRcdGlmICggIXR5cGUgKSB7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBJZiBldmVudCBjaGFuZ2VzIGl0cyB0eXBlLCB1c2UgdGhlIHNwZWNpYWwgZXZlbnQgaGFuZGxlcnMgZm9yIHRoZSBjaGFuZ2VkIHR5cGVcblx0XHRcdHNwZWNpYWwgPSBqUXVlcnkuZXZlbnQuc3BlY2lhbFsgdHlwZSBdIHx8IHt9O1xuXG5cdFx0XHQvLyBJZiBzZWxlY3RvciBkZWZpbmVkLCBkZXRlcm1pbmUgc3BlY2lhbCBldmVudCBhcGkgdHlwZSwgb3RoZXJ3aXNlIGdpdmVuIHR5cGVcblx0XHRcdHR5cGUgPSAoIHNlbGVjdG9yID8gc3BlY2lhbC5kZWxlZ2F0ZVR5cGUgOiBzcGVjaWFsLmJpbmRUeXBlICkgfHwgdHlwZTtcblxuXHRcdFx0Ly8gVXBkYXRlIHNwZWNpYWwgYmFzZWQgb24gbmV3bHkgcmVzZXQgdHlwZVxuXHRcdFx0c3BlY2lhbCA9IGpRdWVyeS5ldmVudC5zcGVjaWFsWyB0eXBlIF0gfHwge307XG5cblx0XHRcdC8vIGhhbmRsZU9iaiBpcyBwYXNzZWQgdG8gYWxsIGV2ZW50IGhhbmRsZXJzXG5cdFx0XHRoYW5kbGVPYmogPSBqUXVlcnkuZXh0ZW5kKCB7XG5cdFx0XHRcdHR5cGU6IHR5cGUsXG5cdFx0XHRcdG9yaWdUeXBlOiBvcmlnVHlwZSxcblx0XHRcdFx0ZGF0YTogZGF0YSxcblx0XHRcdFx0aGFuZGxlcjogaGFuZGxlcixcblx0XHRcdFx0Z3VpZDogaGFuZGxlci5ndWlkLFxuXHRcdFx0XHRzZWxlY3Rvcjogc2VsZWN0b3IsXG5cdFx0XHRcdG5lZWRzQ29udGV4dDogc2VsZWN0b3IgJiYgalF1ZXJ5LmV4cHIubWF0Y2gubmVlZHNDb250ZXh0LnRlc3QoIHNlbGVjdG9yICksXG5cdFx0XHRcdG5hbWVzcGFjZTogbmFtZXNwYWNlcy5qb2luKCBcIi5cIiApXG5cdFx0XHR9LCBoYW5kbGVPYmpJbiApO1xuXG5cdFx0XHQvLyBJbml0IHRoZSBldmVudCBoYW5kbGVyIHF1ZXVlIGlmIHdlJ3JlIHRoZSBmaXJzdFxuXHRcdFx0aWYgKCAhKCBoYW5kbGVycyA9IGV2ZW50c1sgdHlwZSBdICkgKSB7XG5cdFx0XHRcdGhhbmRsZXJzID0gZXZlbnRzWyB0eXBlIF0gPSBbXTtcblx0XHRcdFx0aGFuZGxlcnMuZGVsZWdhdGVDb3VudCA9IDA7XG5cblx0XHRcdFx0Ly8gT25seSB1c2UgYWRkRXZlbnRMaXN0ZW5lciBpZiB0aGUgc3BlY2lhbCBldmVudHMgaGFuZGxlciByZXR1cm5zIGZhbHNlXG5cdFx0XHRcdGlmICggIXNwZWNpYWwuc2V0dXAgfHxcblx0XHRcdFx0XHRzcGVjaWFsLnNldHVwLmNhbGwoIGVsZW0sIGRhdGEsIG5hbWVzcGFjZXMsIGV2ZW50SGFuZGxlICkgPT09IGZhbHNlICkge1xuXG5cdFx0XHRcdFx0aWYgKCBlbGVtLmFkZEV2ZW50TGlzdGVuZXIgKSB7XG5cdFx0XHRcdFx0XHRlbGVtLmFkZEV2ZW50TGlzdGVuZXIoIHR5cGUsIGV2ZW50SGFuZGxlICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGlmICggc3BlY2lhbC5hZGQgKSB7XG5cdFx0XHRcdHNwZWNpYWwuYWRkLmNhbGwoIGVsZW0sIGhhbmRsZU9iaiApO1xuXG5cdFx0XHRcdGlmICggIWhhbmRsZU9iai5oYW5kbGVyLmd1aWQgKSB7XG5cdFx0XHRcdFx0aGFuZGxlT2JqLmhhbmRsZXIuZ3VpZCA9IGhhbmRsZXIuZ3VpZDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBBZGQgdG8gdGhlIGVsZW1lbnQncyBoYW5kbGVyIGxpc3QsIGRlbGVnYXRlcyBpbiBmcm9udFxuXHRcdFx0aWYgKCBzZWxlY3RvciApIHtcblx0XHRcdFx0aGFuZGxlcnMuc3BsaWNlKCBoYW5kbGVycy5kZWxlZ2F0ZUNvdW50KyssIDAsIGhhbmRsZU9iaiApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aGFuZGxlcnMucHVzaCggaGFuZGxlT2JqICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEtlZXAgdHJhY2sgb2Ygd2hpY2ggZXZlbnRzIGhhdmUgZXZlciBiZWVuIHVzZWQsIGZvciBldmVudCBvcHRpbWl6YXRpb25cblx0XHRcdGpRdWVyeS5ldmVudC5nbG9iYWxbIHR5cGUgXSA9IHRydWU7XG5cdFx0fVxuXG5cdH0sXG5cblx0Ly8gRGV0YWNoIGFuIGV2ZW50IG9yIHNldCBvZiBldmVudHMgZnJvbSBhbiBlbGVtZW50XG5cdHJlbW92ZTogZnVuY3Rpb24oIGVsZW0sIHR5cGVzLCBoYW5kbGVyLCBzZWxlY3RvciwgbWFwcGVkVHlwZXMgKSB7XG5cblx0XHR2YXIgaiwgb3JpZ0NvdW50LCB0bXAsXG5cdFx0XHRldmVudHMsIHQsIGhhbmRsZU9iaixcblx0XHRcdHNwZWNpYWwsIGhhbmRsZXJzLCB0eXBlLCBuYW1lc3BhY2VzLCBvcmlnVHlwZSxcblx0XHRcdGVsZW1EYXRhID0gZGF0YVByaXYuaGFzRGF0YSggZWxlbSApICYmIGRhdGFQcml2LmdldCggZWxlbSApO1xuXG5cdFx0aWYgKCAhZWxlbURhdGEgfHwgISggZXZlbnRzID0gZWxlbURhdGEuZXZlbnRzICkgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gT25jZSBmb3IgZWFjaCB0eXBlLm5hbWVzcGFjZSBpbiB0eXBlczsgdHlwZSBtYXkgYmUgb21pdHRlZFxuXHRcdHR5cGVzID0gKCB0eXBlcyB8fCBcIlwiICkubWF0Y2goIHJub3RodG1sd2hpdGUgKSB8fCBbIFwiXCIgXTtcblx0XHR0ID0gdHlwZXMubGVuZ3RoO1xuXHRcdHdoaWxlICggdC0tICkge1xuXHRcdFx0dG1wID0gcnR5cGVuYW1lc3BhY2UuZXhlYyggdHlwZXNbIHQgXSApIHx8IFtdO1xuXHRcdFx0dHlwZSA9IG9yaWdUeXBlID0gdG1wWyAxIF07XG5cdFx0XHRuYW1lc3BhY2VzID0gKCB0bXBbIDIgXSB8fCBcIlwiICkuc3BsaXQoIFwiLlwiICkuc29ydCgpO1xuXG5cdFx0XHQvLyBVbmJpbmQgYWxsIGV2ZW50cyAob24gdGhpcyBuYW1lc3BhY2UsIGlmIHByb3ZpZGVkKSBmb3IgdGhlIGVsZW1lbnRcblx0XHRcdGlmICggIXR5cGUgKSB7XG5cdFx0XHRcdGZvciAoIHR5cGUgaW4gZXZlbnRzICkge1xuXHRcdFx0XHRcdGpRdWVyeS5ldmVudC5yZW1vdmUoIGVsZW0sIHR5cGUgKyB0eXBlc1sgdCBdLCBoYW5kbGVyLCBzZWxlY3RvciwgdHJ1ZSApO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXG5cdFx0XHRzcGVjaWFsID0galF1ZXJ5LmV2ZW50LnNwZWNpYWxbIHR5cGUgXSB8fCB7fTtcblx0XHRcdHR5cGUgPSAoIHNlbGVjdG9yID8gc3BlY2lhbC5kZWxlZ2F0ZVR5cGUgOiBzcGVjaWFsLmJpbmRUeXBlICkgfHwgdHlwZTtcblx0XHRcdGhhbmRsZXJzID0gZXZlbnRzWyB0eXBlIF0gfHwgW107XG5cdFx0XHR0bXAgPSB0bXBbIDIgXSAmJlxuXHRcdFx0XHRuZXcgUmVnRXhwKCBcIihefFxcXFwuKVwiICsgbmFtZXNwYWNlcy5qb2luKCBcIlxcXFwuKD86LipcXFxcLnwpXCIgKSArIFwiKFxcXFwufCQpXCIgKTtcblxuXHRcdFx0Ly8gUmVtb3ZlIG1hdGNoaW5nIGV2ZW50c1xuXHRcdFx0b3JpZ0NvdW50ID0gaiA9IGhhbmRsZXJzLmxlbmd0aDtcblx0XHRcdHdoaWxlICggai0tICkge1xuXHRcdFx0XHRoYW5kbGVPYmogPSBoYW5kbGVyc1sgaiBdO1xuXG5cdFx0XHRcdGlmICggKCBtYXBwZWRUeXBlcyB8fCBvcmlnVHlwZSA9PT0gaGFuZGxlT2JqLm9yaWdUeXBlICkgJiZcblx0XHRcdFx0XHQoICFoYW5kbGVyIHx8IGhhbmRsZXIuZ3VpZCA9PT0gaGFuZGxlT2JqLmd1aWQgKSAmJlxuXHRcdFx0XHRcdCggIXRtcCB8fCB0bXAudGVzdCggaGFuZGxlT2JqLm5hbWVzcGFjZSApICkgJiZcblx0XHRcdFx0XHQoICFzZWxlY3RvciB8fCBzZWxlY3RvciA9PT0gaGFuZGxlT2JqLnNlbGVjdG9yIHx8XG5cdFx0XHRcdFx0XHRzZWxlY3RvciA9PT0gXCIqKlwiICYmIGhhbmRsZU9iai5zZWxlY3RvciApICkge1xuXHRcdFx0XHRcdGhhbmRsZXJzLnNwbGljZSggaiwgMSApO1xuXG5cdFx0XHRcdFx0aWYgKCBoYW5kbGVPYmouc2VsZWN0b3IgKSB7XG5cdFx0XHRcdFx0XHRoYW5kbGVycy5kZWxlZ2F0ZUNvdW50LS07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmICggc3BlY2lhbC5yZW1vdmUgKSB7XG5cdFx0XHRcdFx0XHRzcGVjaWFsLnJlbW92ZS5jYWxsKCBlbGVtLCBoYW5kbGVPYmogKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gUmVtb3ZlIGdlbmVyaWMgZXZlbnQgaGFuZGxlciBpZiB3ZSByZW1vdmVkIHNvbWV0aGluZyBhbmQgbm8gbW9yZSBoYW5kbGVycyBleGlzdFxuXHRcdFx0Ly8gKGF2b2lkcyBwb3RlbnRpYWwgZm9yIGVuZGxlc3MgcmVjdXJzaW9uIGR1cmluZyByZW1vdmFsIG9mIHNwZWNpYWwgZXZlbnQgaGFuZGxlcnMpXG5cdFx0XHRpZiAoIG9yaWdDb3VudCAmJiAhaGFuZGxlcnMubGVuZ3RoICkge1xuXHRcdFx0XHRpZiAoICFzcGVjaWFsLnRlYXJkb3duIHx8XG5cdFx0XHRcdFx0c3BlY2lhbC50ZWFyZG93bi5jYWxsKCBlbGVtLCBuYW1lc3BhY2VzLCBlbGVtRGF0YS5oYW5kbGUgKSA9PT0gZmFsc2UgKSB7XG5cblx0XHRcdFx0XHRqUXVlcnkucmVtb3ZlRXZlbnQoIGVsZW0sIHR5cGUsIGVsZW1EYXRhLmhhbmRsZSApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0ZGVsZXRlIGV2ZW50c1sgdHlwZSBdO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIFJlbW92ZSBkYXRhIGFuZCB0aGUgZXhwYW5kbyBpZiBpdCdzIG5vIGxvbmdlciB1c2VkXG5cdFx0aWYgKCBqUXVlcnkuaXNFbXB0eU9iamVjdCggZXZlbnRzICkgKSB7XG5cdFx0XHRkYXRhUHJpdi5yZW1vdmUoIGVsZW0sIFwiaGFuZGxlIGV2ZW50c1wiICk7XG5cdFx0fVxuXHR9LFxuXG5cdGRpc3BhdGNoOiBmdW5jdGlvbiggbmF0aXZlRXZlbnQgKSB7XG5cblx0XHQvLyBNYWtlIGEgd3JpdGFibGUgalF1ZXJ5LkV2ZW50IGZyb20gdGhlIG5hdGl2ZSBldmVudCBvYmplY3Rcblx0XHR2YXIgZXZlbnQgPSBqUXVlcnkuZXZlbnQuZml4KCBuYXRpdmVFdmVudCApO1xuXG5cdFx0dmFyIGksIGosIHJldCwgbWF0Y2hlZCwgaGFuZGxlT2JqLCBoYW5kbGVyUXVldWUsXG5cdFx0XHRhcmdzID0gbmV3IEFycmF5KCBhcmd1bWVudHMubGVuZ3RoICksXG5cdFx0XHRoYW5kbGVycyA9ICggZGF0YVByaXYuZ2V0KCB0aGlzLCBcImV2ZW50c1wiICkgfHwge30gKVsgZXZlbnQudHlwZSBdIHx8IFtdLFxuXHRcdFx0c3BlY2lhbCA9IGpRdWVyeS5ldmVudC5zcGVjaWFsWyBldmVudC50eXBlIF0gfHwge307XG5cblx0XHQvLyBVc2UgdGhlIGZpeC1lZCBqUXVlcnkuRXZlbnQgcmF0aGVyIHRoYW4gdGhlIChyZWFkLW9ubHkpIG5hdGl2ZSBldmVudFxuXHRcdGFyZ3NbIDAgXSA9IGV2ZW50O1xuXG5cdFx0Zm9yICggaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKysgKSB7XG5cdFx0XHRhcmdzWyBpIF0gPSBhcmd1bWVudHNbIGkgXTtcblx0XHR9XG5cblx0XHRldmVudC5kZWxlZ2F0ZVRhcmdldCA9IHRoaXM7XG5cblx0XHQvLyBDYWxsIHRoZSBwcmVEaXNwYXRjaCBob29rIGZvciB0aGUgbWFwcGVkIHR5cGUsIGFuZCBsZXQgaXQgYmFpbCBpZiBkZXNpcmVkXG5cdFx0aWYgKCBzcGVjaWFsLnByZURpc3BhdGNoICYmIHNwZWNpYWwucHJlRGlzcGF0Y2guY2FsbCggdGhpcywgZXZlbnQgKSA9PT0gZmFsc2UgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gRGV0ZXJtaW5lIGhhbmRsZXJzXG5cdFx0aGFuZGxlclF1ZXVlID0galF1ZXJ5LmV2ZW50LmhhbmRsZXJzLmNhbGwoIHRoaXMsIGV2ZW50LCBoYW5kbGVycyApO1xuXG5cdFx0Ly8gUnVuIGRlbGVnYXRlcyBmaXJzdDsgdGhleSBtYXkgd2FudCB0byBzdG9wIHByb3BhZ2F0aW9uIGJlbmVhdGggdXNcblx0XHRpID0gMDtcblx0XHR3aGlsZSAoICggbWF0Y2hlZCA9IGhhbmRsZXJRdWV1ZVsgaSsrIF0gKSAmJiAhZXZlbnQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSApIHtcblx0XHRcdGV2ZW50LmN1cnJlbnRUYXJnZXQgPSBtYXRjaGVkLmVsZW07XG5cblx0XHRcdGogPSAwO1xuXHRcdFx0d2hpbGUgKCAoIGhhbmRsZU9iaiA9IG1hdGNoZWQuaGFuZGxlcnNbIGorKyBdICkgJiZcblx0XHRcdFx0IWV2ZW50LmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkKCkgKSB7XG5cblx0XHRcdFx0Ly8gSWYgdGhlIGV2ZW50IGlzIG5hbWVzcGFjZWQsIHRoZW4gZWFjaCBoYW5kbGVyIGlzIG9ubHkgaW52b2tlZCBpZiBpdCBpc1xuXHRcdFx0XHQvLyBzcGVjaWFsbHkgdW5pdmVyc2FsIG9yIGl0cyBuYW1lc3BhY2VzIGFyZSBhIHN1cGVyc2V0IG9mIHRoZSBldmVudCdzLlxuXHRcdFx0XHRpZiAoICFldmVudC5ybmFtZXNwYWNlIHx8IGhhbmRsZU9iai5uYW1lc3BhY2UgPT09IGZhbHNlIHx8XG5cdFx0XHRcdFx0ZXZlbnQucm5hbWVzcGFjZS50ZXN0KCBoYW5kbGVPYmoubmFtZXNwYWNlICkgKSB7XG5cblx0XHRcdFx0XHRldmVudC5oYW5kbGVPYmogPSBoYW5kbGVPYmo7XG5cdFx0XHRcdFx0ZXZlbnQuZGF0YSA9IGhhbmRsZU9iai5kYXRhO1xuXG5cdFx0XHRcdFx0cmV0ID0gKCAoIGpRdWVyeS5ldmVudC5zcGVjaWFsWyBoYW5kbGVPYmoub3JpZ1R5cGUgXSB8fCB7fSApLmhhbmRsZSB8fFxuXHRcdFx0XHRcdFx0aGFuZGxlT2JqLmhhbmRsZXIgKS5hcHBseSggbWF0Y2hlZC5lbGVtLCBhcmdzICk7XG5cblx0XHRcdFx0XHRpZiAoIHJldCAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRcdFx0aWYgKCAoIGV2ZW50LnJlc3VsdCA9IHJldCApID09PSBmYWxzZSApIHtcblx0XHRcdFx0XHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdFx0XHRcdFx0ZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gQ2FsbCB0aGUgcG9zdERpc3BhdGNoIGhvb2sgZm9yIHRoZSBtYXBwZWQgdHlwZVxuXHRcdGlmICggc3BlY2lhbC5wb3N0RGlzcGF0Y2ggKSB7XG5cdFx0XHRzcGVjaWFsLnBvc3REaXNwYXRjaC5jYWxsKCB0aGlzLCBldmVudCApO1xuXHRcdH1cblxuXHRcdHJldHVybiBldmVudC5yZXN1bHQ7XG5cdH0sXG5cblx0aGFuZGxlcnM6IGZ1bmN0aW9uKCBldmVudCwgaGFuZGxlcnMgKSB7XG5cdFx0dmFyIGksIGhhbmRsZU9iaiwgc2VsLCBtYXRjaGVkSGFuZGxlcnMsIG1hdGNoZWRTZWxlY3RvcnMsXG5cdFx0XHRoYW5kbGVyUXVldWUgPSBbXSxcblx0XHRcdGRlbGVnYXRlQ291bnQgPSBoYW5kbGVycy5kZWxlZ2F0ZUNvdW50LFxuXHRcdFx0Y3VyID0gZXZlbnQudGFyZ2V0O1xuXG5cdFx0Ly8gRmluZCBkZWxlZ2F0ZSBoYW5kbGVyc1xuXHRcdGlmICggZGVsZWdhdGVDb3VudCAmJlxuXG5cdFx0XHQvLyBTdXBwb3J0OiBJRSA8PTlcblx0XHRcdC8vIEJsYWNrLWhvbGUgU1ZHIDx1c2U+IGluc3RhbmNlIHRyZWVzICh0cmFjLTEzMTgwKVxuXHRcdFx0Y3VyLm5vZGVUeXBlICYmXG5cblx0XHRcdC8vIFN1cHBvcnQ6IEZpcmVmb3ggPD00MlxuXHRcdFx0Ly8gU3VwcHJlc3Mgc3BlYy12aW9sYXRpbmcgY2xpY2tzIGluZGljYXRpbmcgYSBub24tcHJpbWFyeSBwb2ludGVyIGJ1dHRvbiAodHJhYy0zODYxKVxuXHRcdFx0Ly8gaHR0cHM6Ly93d3cudzMub3JnL1RSL0RPTS1MZXZlbC0zLUV2ZW50cy8jZXZlbnQtdHlwZS1jbGlja1xuXHRcdFx0Ly8gU3VwcG9ydDogSUUgMTEgb25seVxuXHRcdFx0Ly8gLi4uYnV0IG5vdCBhcnJvdyBrZXkgXCJjbGlja3NcIiBvZiByYWRpbyBpbnB1dHMsIHdoaWNoIGNhbiBoYXZlIGBidXR0b25gIC0xIChnaC0yMzQzKVxuXHRcdFx0ISggZXZlbnQudHlwZSA9PT0gXCJjbGlja1wiICYmIGV2ZW50LmJ1dHRvbiA+PSAxICkgKSB7XG5cblx0XHRcdGZvciAoIDsgY3VyICE9PSB0aGlzOyBjdXIgPSBjdXIucGFyZW50Tm9kZSB8fCB0aGlzICkge1xuXG5cdFx0XHRcdC8vIERvbid0IGNoZWNrIG5vbi1lbGVtZW50cyAoIzEzMjA4KVxuXHRcdFx0XHQvLyBEb24ndCBwcm9jZXNzIGNsaWNrcyBvbiBkaXNhYmxlZCBlbGVtZW50cyAoIzY5MTEsICM4MTY1LCAjMTEzODIsICMxMTc2NClcblx0XHRcdFx0aWYgKCBjdXIubm9kZVR5cGUgPT09IDEgJiYgISggZXZlbnQudHlwZSA9PT0gXCJjbGlja1wiICYmIGN1ci5kaXNhYmxlZCA9PT0gdHJ1ZSApICkge1xuXHRcdFx0XHRcdG1hdGNoZWRIYW5kbGVycyA9IFtdO1xuXHRcdFx0XHRcdG1hdGNoZWRTZWxlY3RvcnMgPSB7fTtcblx0XHRcdFx0XHRmb3IgKCBpID0gMDsgaSA8IGRlbGVnYXRlQ291bnQ7IGkrKyApIHtcblx0XHRcdFx0XHRcdGhhbmRsZU9iaiA9IGhhbmRsZXJzWyBpIF07XG5cblx0XHRcdFx0XHRcdC8vIERvbid0IGNvbmZsaWN0IHdpdGggT2JqZWN0LnByb3RvdHlwZSBwcm9wZXJ0aWVzICgjMTMyMDMpXG5cdFx0XHRcdFx0XHRzZWwgPSBoYW5kbGVPYmouc2VsZWN0b3IgKyBcIiBcIjtcblxuXHRcdFx0XHRcdFx0aWYgKCBtYXRjaGVkU2VsZWN0b3JzWyBzZWwgXSA9PT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRcdFx0XHRtYXRjaGVkU2VsZWN0b3JzWyBzZWwgXSA9IGhhbmRsZU9iai5uZWVkc0NvbnRleHQgP1xuXHRcdFx0XHRcdFx0XHRcdGpRdWVyeSggc2VsLCB0aGlzICkuaW5kZXgoIGN1ciApID4gLTEgOlxuXHRcdFx0XHRcdFx0XHRcdGpRdWVyeS5maW5kKCBzZWwsIHRoaXMsIG51bGwsIFsgY3VyIF0gKS5sZW5ndGg7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRpZiAoIG1hdGNoZWRTZWxlY3RvcnNbIHNlbCBdICkge1xuXHRcdFx0XHRcdFx0XHRtYXRjaGVkSGFuZGxlcnMucHVzaCggaGFuZGxlT2JqICk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmICggbWF0Y2hlZEhhbmRsZXJzLmxlbmd0aCApIHtcblx0XHRcdFx0XHRcdGhhbmRsZXJRdWV1ZS5wdXNoKCB7IGVsZW06IGN1ciwgaGFuZGxlcnM6IG1hdGNoZWRIYW5kbGVycyB9ICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gQWRkIHRoZSByZW1haW5pbmcgKGRpcmVjdGx5LWJvdW5kKSBoYW5kbGVyc1xuXHRcdGN1ciA9IHRoaXM7XG5cdFx0aWYgKCBkZWxlZ2F0ZUNvdW50IDwgaGFuZGxlcnMubGVuZ3RoICkge1xuXHRcdFx0aGFuZGxlclF1ZXVlLnB1c2goIHsgZWxlbTogY3VyLCBoYW5kbGVyczogaGFuZGxlcnMuc2xpY2UoIGRlbGVnYXRlQ291bnQgKSB9ICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGhhbmRsZXJRdWV1ZTtcblx0fSxcblxuXHRhZGRQcm9wOiBmdW5jdGlvbiggbmFtZSwgaG9vayApIHtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoIGpRdWVyeS5FdmVudC5wcm90b3R5cGUsIG5hbWUsIHtcblx0XHRcdGVudW1lcmFibGU6IHRydWUsXG5cdFx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cblx0XHRcdGdldDogaXNGdW5jdGlvbiggaG9vayApID9cblx0XHRcdFx0ZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0aWYgKCB0aGlzLm9yaWdpbmFsRXZlbnQgKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBob29rKCB0aGlzLm9yaWdpbmFsRXZlbnQgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gOlxuXHRcdFx0XHRmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRpZiAoIHRoaXMub3JpZ2luYWxFdmVudCApIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHRoaXMub3JpZ2luYWxFdmVudFsgbmFtZSBdO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblxuXHRcdFx0c2V0OiBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eSggdGhpcywgbmFtZSwge1xuXHRcdFx0XHRcdGVudW1lcmFibGU6IHRydWUsXG5cdFx0XHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlLFxuXHRcdFx0XHRcdHdyaXRhYmxlOiB0cnVlLFxuXHRcdFx0XHRcdHZhbHVlOiB2YWx1ZVxuXHRcdFx0XHR9ICk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9LFxuXG5cdGZpeDogZnVuY3Rpb24oIG9yaWdpbmFsRXZlbnQgKSB7XG5cdFx0cmV0dXJuIG9yaWdpbmFsRXZlbnRbIGpRdWVyeS5leHBhbmRvIF0gP1xuXHRcdFx0b3JpZ2luYWxFdmVudCA6XG5cdFx0XHRuZXcgalF1ZXJ5LkV2ZW50KCBvcmlnaW5hbEV2ZW50ICk7XG5cdH0sXG5cblx0c3BlY2lhbDoge1xuXHRcdGxvYWQ6IHtcblxuXHRcdFx0Ly8gUHJldmVudCB0cmlnZ2VyZWQgaW1hZ2UubG9hZCBldmVudHMgZnJvbSBidWJibGluZyB0byB3aW5kb3cubG9hZFxuXHRcdFx0bm9CdWJibGU6IHRydWVcblx0XHR9LFxuXHRcdGNsaWNrOiB7XG5cblx0XHRcdC8vIFV0aWxpemUgbmF0aXZlIGV2ZW50IHRvIGVuc3VyZSBjb3JyZWN0IHN0YXRlIGZvciBjaGVja2FibGUgaW5wdXRzXG5cdFx0XHRzZXR1cDogZnVuY3Rpb24oIGRhdGEgKSB7XG5cblx0XHRcdFx0Ly8gRm9yIG11dHVhbCBjb21wcmVzc2liaWxpdHkgd2l0aCBfZGVmYXVsdCwgcmVwbGFjZSBgdGhpc2AgYWNjZXNzIHdpdGggYSBsb2NhbCB2YXIuXG5cdFx0XHRcdC8vIGB8fCBkYXRhYCBpcyBkZWFkIGNvZGUgbWVhbnQgb25seSB0byBwcmVzZXJ2ZSB0aGUgdmFyaWFibGUgdGhyb3VnaCBtaW5pZmljYXRpb24uXG5cdFx0XHRcdHZhciBlbCA9IHRoaXMgfHwgZGF0YTtcblxuXHRcdFx0XHQvLyBDbGFpbSB0aGUgZmlyc3QgaGFuZGxlclxuXHRcdFx0XHRpZiAoIHJjaGVja2FibGVUeXBlLnRlc3QoIGVsLnR5cGUgKSAmJlxuXHRcdFx0XHRcdGVsLmNsaWNrICYmIG5vZGVOYW1lKCBlbCwgXCJpbnB1dFwiICkgKSB7XG5cblx0XHRcdFx0XHQvLyBkYXRhUHJpdi5zZXQoIGVsLCBcImNsaWNrXCIsIC4uLiApXG5cdFx0XHRcdFx0bGV2ZXJhZ2VOYXRpdmUoIGVsLCBcImNsaWNrXCIsIHJldHVyblRydWUgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFJldHVybiBmYWxzZSB0byBhbGxvdyBub3JtYWwgcHJvY2Vzc2luZyBpbiB0aGUgY2FsbGVyXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH0sXG5cdFx0XHR0cmlnZ2VyOiBmdW5jdGlvbiggZGF0YSApIHtcblxuXHRcdFx0XHQvLyBGb3IgbXV0dWFsIGNvbXByZXNzaWJpbGl0eSB3aXRoIF9kZWZhdWx0LCByZXBsYWNlIGB0aGlzYCBhY2Nlc3Mgd2l0aCBhIGxvY2FsIHZhci5cblx0XHRcdFx0Ly8gYHx8IGRhdGFgIGlzIGRlYWQgY29kZSBtZWFudCBvbmx5IHRvIHByZXNlcnZlIHRoZSB2YXJpYWJsZSB0aHJvdWdoIG1pbmlmaWNhdGlvbi5cblx0XHRcdFx0dmFyIGVsID0gdGhpcyB8fCBkYXRhO1xuXG5cdFx0XHRcdC8vIEZvcmNlIHNldHVwIGJlZm9yZSB0cmlnZ2VyaW5nIGEgY2xpY2tcblx0XHRcdFx0aWYgKCByY2hlY2thYmxlVHlwZS50ZXN0KCBlbC50eXBlICkgJiZcblx0XHRcdFx0XHRlbC5jbGljayAmJiBub2RlTmFtZSggZWwsIFwiaW5wdXRcIiApICkge1xuXG5cdFx0XHRcdFx0bGV2ZXJhZ2VOYXRpdmUoIGVsLCBcImNsaWNrXCIgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFJldHVybiBub24tZmFsc2UgdG8gYWxsb3cgbm9ybWFsIGV2ZW50LXBhdGggcHJvcGFnYXRpb25cblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9LFxuXG5cdFx0XHQvLyBGb3IgY3Jvc3MtYnJvd3NlciBjb25zaXN0ZW5jeSwgc3VwcHJlc3MgbmF0aXZlIC5jbGljaygpIG9uIGxpbmtzXG5cdFx0XHQvLyBBbHNvIHByZXZlbnQgaXQgaWYgd2UncmUgY3VycmVudGx5IGluc2lkZSBhIGxldmVyYWdlZCBuYXRpdmUtZXZlbnQgc3RhY2tcblx0XHRcdF9kZWZhdWx0OiBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0XHRcdHZhciB0YXJnZXQgPSBldmVudC50YXJnZXQ7XG5cdFx0XHRcdHJldHVybiByY2hlY2thYmxlVHlwZS50ZXN0KCB0YXJnZXQudHlwZSApICYmXG5cdFx0XHRcdFx0dGFyZ2V0LmNsaWNrICYmIG5vZGVOYW1lKCB0YXJnZXQsIFwiaW5wdXRcIiApICYmXG5cdFx0XHRcdFx0ZGF0YVByaXYuZ2V0KCB0YXJnZXQsIFwiY2xpY2tcIiApIHx8XG5cdFx0XHRcdFx0bm9kZU5hbWUoIHRhcmdldCwgXCJhXCIgKTtcblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0YmVmb3JldW5sb2FkOiB7XG5cdFx0XHRwb3N0RGlzcGF0Y2g6IGZ1bmN0aW9uKCBldmVudCApIHtcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBGaXJlZm94IDIwK1xuXHRcdFx0XHQvLyBGaXJlZm94IGRvZXNuJ3QgYWxlcnQgaWYgdGhlIHJldHVyblZhbHVlIGZpZWxkIGlzIG5vdCBzZXQuXG5cdFx0XHRcdGlmICggZXZlbnQucmVzdWx0ICE9PSB1bmRlZmluZWQgJiYgZXZlbnQub3JpZ2luYWxFdmVudCApIHtcblx0XHRcdFx0XHRldmVudC5vcmlnaW5hbEV2ZW50LnJldHVyblZhbHVlID0gZXZlbnQucmVzdWx0O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59O1xuXG4vLyBFbnN1cmUgdGhlIHByZXNlbmNlIG9mIGFuIGV2ZW50IGxpc3RlbmVyIHRoYXQgaGFuZGxlcyBtYW51YWxseS10cmlnZ2VyZWRcbi8vIHN5bnRoZXRpYyBldmVudHMgYnkgaW50ZXJydXB0aW5nIHByb2dyZXNzIHVudGlsIHJlaW52b2tlZCBpbiByZXNwb25zZSB0b1xuLy8gKm5hdGl2ZSogZXZlbnRzIHRoYXQgaXQgZmlyZXMgZGlyZWN0bHksIGVuc3VyaW5nIHRoYXQgc3RhdGUgY2hhbmdlcyBoYXZlXG4vLyBhbHJlYWR5IG9jY3VycmVkIGJlZm9yZSBvdGhlciBsaXN0ZW5lcnMgYXJlIGludm9rZWQuXG5mdW5jdGlvbiBsZXZlcmFnZU5hdGl2ZSggZWwsIHR5cGUsIGV4cGVjdFN5bmMgKSB7XG5cblx0Ly8gTWlzc2luZyBleHBlY3RTeW5jIGluZGljYXRlcyBhIHRyaWdnZXIgY2FsbCwgd2hpY2ggbXVzdCBmb3JjZSBzZXR1cCB0aHJvdWdoIGpRdWVyeS5ldmVudC5hZGRcblx0aWYgKCAhZXhwZWN0U3luYyApIHtcblx0XHRpZiAoIGRhdGFQcml2LmdldCggZWwsIHR5cGUgKSA9PT0gdW5kZWZpbmVkICkge1xuXHRcdFx0alF1ZXJ5LmV2ZW50LmFkZCggZWwsIHR5cGUsIHJldHVyblRydWUgKTtcblx0XHR9XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0Ly8gUmVnaXN0ZXIgdGhlIGNvbnRyb2xsZXIgYXMgYSBzcGVjaWFsIHVuaXZlcnNhbCBoYW5kbGVyIGZvciBhbGwgZXZlbnQgbmFtZXNwYWNlc1xuXHRkYXRhUHJpdi5zZXQoIGVsLCB0eXBlLCBmYWxzZSApO1xuXHRqUXVlcnkuZXZlbnQuYWRkKCBlbCwgdHlwZSwge1xuXHRcdG5hbWVzcGFjZTogZmFsc2UsXG5cdFx0aGFuZGxlcjogZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdFx0dmFyIG5vdEFzeW5jLCByZXN1bHQsXG5cdFx0XHRcdHNhdmVkID0gZGF0YVByaXYuZ2V0KCB0aGlzLCB0eXBlICk7XG5cblx0XHRcdGlmICggKCBldmVudC5pc1RyaWdnZXIgJiAxICkgJiYgdGhpc1sgdHlwZSBdICkge1xuXG5cdFx0XHRcdC8vIEludGVycnVwdCBwcm9jZXNzaW5nIG9mIHRoZSBvdXRlciBzeW50aGV0aWMgLnRyaWdnZXIoKWVkIGV2ZW50XG5cdFx0XHRcdC8vIFNhdmVkIGRhdGEgc2hvdWxkIGJlIGZhbHNlIGluIHN1Y2ggY2FzZXMsIGJ1dCBtaWdodCBiZSBhIGxlZnRvdmVyIGNhcHR1cmUgb2JqZWN0XG5cdFx0XHRcdC8vIGZyb20gYW4gYXN5bmMgbmF0aXZlIGhhbmRsZXIgKGdoLTQzNTApXG5cdFx0XHRcdGlmICggIXNhdmVkLmxlbmd0aCApIHtcblxuXHRcdFx0XHRcdC8vIFN0b3JlIGFyZ3VtZW50cyBmb3IgdXNlIHdoZW4gaGFuZGxpbmcgdGhlIGlubmVyIG5hdGl2ZSBldmVudFxuXHRcdFx0XHRcdC8vIFRoZXJlIHdpbGwgYWx3YXlzIGJlIGF0IGxlYXN0IG9uZSBhcmd1bWVudCAoYW4gZXZlbnQgb2JqZWN0KSwgc28gdGhpcyBhcnJheVxuXHRcdFx0XHRcdC8vIHdpbGwgbm90IGJlIGNvbmZ1c2VkIHdpdGggYSBsZWZ0b3ZlciBjYXB0dXJlIG9iamVjdC5cblx0XHRcdFx0XHRzYXZlZCA9IHNsaWNlLmNhbGwoIGFyZ3VtZW50cyApO1xuXHRcdFx0XHRcdGRhdGFQcml2LnNldCggdGhpcywgdHlwZSwgc2F2ZWQgKTtcblxuXHRcdFx0XHRcdC8vIFRyaWdnZXIgdGhlIG5hdGl2ZSBldmVudCBhbmQgY2FwdHVyZSBpdHMgcmVzdWx0XG5cdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPD05IC0gMTErXG5cdFx0XHRcdFx0Ly8gZm9jdXMoKSBhbmQgYmx1cigpIGFyZSBhc3luY2hyb25vdXNcblx0XHRcdFx0XHRub3RBc3luYyA9IGV4cGVjdFN5bmMoIHRoaXMsIHR5cGUgKTtcblx0XHRcdFx0XHR0aGlzWyB0eXBlIF0oKTtcblx0XHRcdFx0XHRyZXN1bHQgPSBkYXRhUHJpdi5nZXQoIHRoaXMsIHR5cGUgKTtcblx0XHRcdFx0XHRpZiAoIHNhdmVkICE9PSByZXN1bHQgfHwgbm90QXN5bmMgKSB7XG5cdFx0XHRcdFx0XHRkYXRhUHJpdi5zZXQoIHRoaXMsIHR5cGUsIGZhbHNlICk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHJlc3VsdCA9IHt9O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAoIHNhdmVkICE9PSByZXN1bHQgKSB7XG5cblx0XHRcdFx0XHRcdC8vIENhbmNlbCB0aGUgb3V0ZXIgc3ludGhldGljIGV2ZW50XG5cdFx0XHRcdFx0XHRldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcblx0XHRcdFx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0LnZhbHVlO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBJZiB0aGlzIGlzIGFuIGlubmVyIHN5bnRoZXRpYyBldmVudCBmb3IgYW4gZXZlbnQgd2l0aCBhIGJ1YmJsaW5nIHN1cnJvZ2F0ZVxuXHRcdFx0XHQvLyAoZm9jdXMgb3IgYmx1ciksIGFzc3VtZSB0aGF0IHRoZSBzdXJyb2dhdGUgYWxyZWFkeSBwcm9wYWdhdGVkIGZyb20gdHJpZ2dlcmluZyB0aGVcblx0XHRcdFx0Ly8gbmF0aXZlIGV2ZW50IGFuZCBwcmV2ZW50IHRoYXQgZnJvbSBoYXBwZW5pbmcgYWdhaW4gaGVyZS5cblx0XHRcdFx0Ly8gVGhpcyB0ZWNobmljYWxseSBnZXRzIHRoZSBvcmRlcmluZyB3cm9uZyB3LnIudC4gdG8gYC50cmlnZ2VyKClgIChpbiB3aGljaCB0aGVcblx0XHRcdFx0Ly8gYnViYmxpbmcgc3Vycm9nYXRlIHByb3BhZ2F0ZXMgKmFmdGVyKiB0aGUgbm9uLWJ1YmJsaW5nIGJhc2UpLCBidXQgdGhhdCBzZWVtc1xuXHRcdFx0XHQvLyBsZXNzIGJhZCB0aGFuIGR1cGxpY2F0aW9uLlxuXHRcdFx0XHR9IGVsc2UgaWYgKCAoIGpRdWVyeS5ldmVudC5zcGVjaWFsWyB0eXBlIF0gfHwge30gKS5kZWxlZ2F0ZVR5cGUgKSB7XG5cdFx0XHRcdFx0ZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0Ly8gSWYgdGhpcyBpcyBhIG5hdGl2ZSBldmVudCB0cmlnZ2VyZWQgYWJvdmUsIGV2ZXJ5dGhpbmcgaXMgbm93IGluIG9yZGVyXG5cdFx0XHQvLyBGaXJlIGFuIGlubmVyIHN5bnRoZXRpYyBldmVudCB3aXRoIHRoZSBvcmlnaW5hbCBhcmd1bWVudHNcblx0XHRcdH0gZWxzZSBpZiAoIHNhdmVkLmxlbmd0aCApIHtcblxuXHRcdFx0XHQvLyAuLi5hbmQgY2FwdHVyZSB0aGUgcmVzdWx0XG5cdFx0XHRcdGRhdGFQcml2LnNldCggdGhpcywgdHlwZSwge1xuXHRcdFx0XHRcdHZhbHVlOiBqUXVlcnkuZXZlbnQudHJpZ2dlcihcblxuXHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPD05IC0gMTErXG5cdFx0XHRcdFx0XHQvLyBFeHRlbmQgd2l0aCB0aGUgcHJvdG90eXBlIHRvIHJlc2V0IHRoZSBhYm92ZSBzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKVxuXHRcdFx0XHRcdFx0alF1ZXJ5LmV4dGVuZCggc2F2ZWRbIDAgXSwgalF1ZXJ5LkV2ZW50LnByb3RvdHlwZSApLFxuXHRcdFx0XHRcdFx0c2F2ZWQuc2xpY2UoIDEgKSxcblx0XHRcdFx0XHRcdHRoaXNcblx0XHRcdFx0XHQpXG5cdFx0XHRcdH0gKTtcblxuXHRcdFx0XHQvLyBBYm9ydCBoYW5kbGluZyBvZiB0aGUgbmF0aXZlIGV2ZW50XG5cdFx0XHRcdGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuXHRcdFx0fVxuXHRcdH1cblx0fSApO1xufVxuXG5qUXVlcnkucmVtb3ZlRXZlbnQgPSBmdW5jdGlvbiggZWxlbSwgdHlwZSwgaGFuZGxlICkge1xuXG5cdC8vIFRoaXMgXCJpZlwiIGlzIG5lZWRlZCBmb3IgcGxhaW4gb2JqZWN0c1xuXHRpZiAoIGVsZW0ucmVtb3ZlRXZlbnRMaXN0ZW5lciApIHtcblx0XHRlbGVtLnJlbW92ZUV2ZW50TGlzdGVuZXIoIHR5cGUsIGhhbmRsZSApO1xuXHR9XG59O1xuXG5qUXVlcnkuRXZlbnQgPSBmdW5jdGlvbiggc3JjLCBwcm9wcyApIHtcblxuXHQvLyBBbGxvdyBpbnN0YW50aWF0aW9uIHdpdGhvdXQgdGhlICduZXcnIGtleXdvcmRcblx0aWYgKCAhKCB0aGlzIGluc3RhbmNlb2YgalF1ZXJ5LkV2ZW50ICkgKSB7XG5cdFx0cmV0dXJuIG5ldyBqUXVlcnkuRXZlbnQoIHNyYywgcHJvcHMgKTtcblx0fVxuXG5cdC8vIEV2ZW50IG9iamVjdFxuXHRpZiAoIHNyYyAmJiBzcmMudHlwZSApIHtcblx0XHR0aGlzLm9yaWdpbmFsRXZlbnQgPSBzcmM7XG5cdFx0dGhpcy50eXBlID0gc3JjLnR5cGU7XG5cblx0XHQvLyBFdmVudHMgYnViYmxpbmcgdXAgdGhlIGRvY3VtZW50IG1heSBoYXZlIGJlZW4gbWFya2VkIGFzIHByZXZlbnRlZFxuXHRcdC8vIGJ5IGEgaGFuZGxlciBsb3dlciBkb3duIHRoZSB0cmVlOyByZWZsZWN0IHRoZSBjb3JyZWN0IHZhbHVlLlxuXHRcdHRoaXMuaXNEZWZhdWx0UHJldmVudGVkID0gc3JjLmRlZmF1bHRQcmV2ZW50ZWQgfHxcblx0XHRcdFx0c3JjLmRlZmF1bHRQcmV2ZW50ZWQgPT09IHVuZGVmaW5lZCAmJlxuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQgPD0yLjMgb25seVxuXHRcdFx0XHRzcmMucmV0dXJuVmFsdWUgPT09IGZhbHNlID9cblx0XHRcdHJldHVyblRydWUgOlxuXHRcdFx0cmV0dXJuRmFsc2U7XG5cblx0XHQvLyBDcmVhdGUgdGFyZ2V0IHByb3BlcnRpZXNcblx0XHQvLyBTdXBwb3J0OiBTYWZhcmkgPD02IC0gNyBvbmx5XG5cdFx0Ly8gVGFyZ2V0IHNob3VsZCBub3QgYmUgYSB0ZXh0IG5vZGUgKCM1MDQsICMxMzE0Mylcblx0XHR0aGlzLnRhcmdldCA9ICggc3JjLnRhcmdldCAmJiBzcmMudGFyZ2V0Lm5vZGVUeXBlID09PSAzICkgP1xuXHRcdFx0c3JjLnRhcmdldC5wYXJlbnROb2RlIDpcblx0XHRcdHNyYy50YXJnZXQ7XG5cblx0XHR0aGlzLmN1cnJlbnRUYXJnZXQgPSBzcmMuY3VycmVudFRhcmdldDtcblx0XHR0aGlzLnJlbGF0ZWRUYXJnZXQgPSBzcmMucmVsYXRlZFRhcmdldDtcblxuXHQvLyBFdmVudCB0eXBlXG5cdH0gZWxzZSB7XG5cdFx0dGhpcy50eXBlID0gc3JjO1xuXHR9XG5cblx0Ly8gUHV0IGV4cGxpY2l0bHkgcHJvdmlkZWQgcHJvcGVydGllcyBvbnRvIHRoZSBldmVudCBvYmplY3Rcblx0aWYgKCBwcm9wcyApIHtcblx0XHRqUXVlcnkuZXh0ZW5kKCB0aGlzLCBwcm9wcyApO1xuXHR9XG5cblx0Ly8gQ3JlYXRlIGEgdGltZXN0YW1wIGlmIGluY29taW5nIGV2ZW50IGRvZXNuJ3QgaGF2ZSBvbmVcblx0dGhpcy50aW1lU3RhbXAgPSBzcmMgJiYgc3JjLnRpbWVTdGFtcCB8fCBEYXRlLm5vdygpO1xuXG5cdC8vIE1hcmsgaXQgYXMgZml4ZWRcblx0dGhpc1sgalF1ZXJ5LmV4cGFuZG8gXSA9IHRydWU7XG59O1xuXG4vLyBqUXVlcnkuRXZlbnQgaXMgYmFzZWQgb24gRE9NMyBFdmVudHMgYXMgc3BlY2lmaWVkIGJ5IHRoZSBFQ01BU2NyaXB0IExhbmd1YWdlIEJpbmRpbmdcbi8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi8yMDAzL1dELURPTS1MZXZlbC0zLUV2ZW50cy0yMDAzMDMzMS9lY21hLXNjcmlwdC1iaW5kaW5nLmh0bWxcbmpRdWVyeS5FdmVudC5wcm90b3R5cGUgPSB7XG5cdGNvbnN0cnVjdG9yOiBqUXVlcnkuRXZlbnQsXG5cdGlzRGVmYXVsdFByZXZlbnRlZDogcmV0dXJuRmFsc2UsXG5cdGlzUHJvcGFnYXRpb25TdG9wcGVkOiByZXR1cm5GYWxzZSxcblx0aXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQ6IHJldHVybkZhbHNlLFxuXHRpc1NpbXVsYXRlZDogZmFsc2UsXG5cblx0cHJldmVudERlZmF1bHQ6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBlID0gdGhpcy5vcmlnaW5hbEV2ZW50O1xuXG5cdFx0dGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQgPSByZXR1cm5UcnVlO1xuXG5cdFx0aWYgKCBlICYmICF0aGlzLmlzU2ltdWxhdGVkICkge1xuXHRcdFx0ZS5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdH1cblx0fSxcblx0c3RvcFByb3BhZ2F0aW9uOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgZSA9IHRoaXMub3JpZ2luYWxFdmVudDtcblxuXHRcdHRoaXMuaXNQcm9wYWdhdGlvblN0b3BwZWQgPSByZXR1cm5UcnVlO1xuXG5cdFx0aWYgKCBlICYmICF0aGlzLmlzU2ltdWxhdGVkICkge1xuXHRcdFx0ZS5zdG9wUHJvcGFnYXRpb24oKTtcblx0XHR9XG5cdH0sXG5cdHN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbjogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGUgPSB0aGlzLm9yaWdpbmFsRXZlbnQ7XG5cblx0XHR0aGlzLmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkID0gcmV0dXJuVHJ1ZTtcblxuXHRcdGlmICggZSAmJiAhdGhpcy5pc1NpbXVsYXRlZCApIHtcblx0XHRcdGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG5cdFx0fVxuXG5cdFx0dGhpcy5zdG9wUHJvcGFnYXRpb24oKTtcblx0fVxufTtcblxuLy8gSW5jbHVkZXMgYWxsIGNvbW1vbiBldmVudCBwcm9wcyBpbmNsdWRpbmcgS2V5RXZlbnQgYW5kIE1vdXNlRXZlbnQgc3BlY2lmaWMgcHJvcHNcbmpRdWVyeS5lYWNoKCB7XG5cdGFsdEtleTogdHJ1ZSxcblx0YnViYmxlczogdHJ1ZSxcblx0Y2FuY2VsYWJsZTogdHJ1ZSxcblx0Y2hhbmdlZFRvdWNoZXM6IHRydWUsXG5cdGN0cmxLZXk6IHRydWUsXG5cdGRldGFpbDogdHJ1ZSxcblx0ZXZlbnRQaGFzZTogdHJ1ZSxcblx0bWV0YUtleTogdHJ1ZSxcblx0cGFnZVg6IHRydWUsXG5cdHBhZ2VZOiB0cnVlLFxuXHRzaGlmdEtleTogdHJ1ZSxcblx0dmlldzogdHJ1ZSxcblx0XCJjaGFyXCI6IHRydWUsXG5cdGNvZGU6IHRydWUsXG5cdGNoYXJDb2RlOiB0cnVlLFxuXHRrZXk6IHRydWUsXG5cdGtleUNvZGU6IHRydWUsXG5cdGJ1dHRvbjogdHJ1ZSxcblx0YnV0dG9uczogdHJ1ZSxcblx0Y2xpZW50WDogdHJ1ZSxcblx0Y2xpZW50WTogdHJ1ZSxcblx0b2Zmc2V0WDogdHJ1ZSxcblx0b2Zmc2V0WTogdHJ1ZSxcblx0cG9pbnRlcklkOiB0cnVlLFxuXHRwb2ludGVyVHlwZTogdHJ1ZSxcblx0c2NyZWVuWDogdHJ1ZSxcblx0c2NyZWVuWTogdHJ1ZSxcblx0dGFyZ2V0VG91Y2hlczogdHJ1ZSxcblx0dG9FbGVtZW50OiB0cnVlLFxuXHR0b3VjaGVzOiB0cnVlLFxuXG5cdHdoaWNoOiBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0dmFyIGJ1dHRvbiA9IGV2ZW50LmJ1dHRvbjtcblxuXHRcdC8vIEFkZCB3aGljaCBmb3Iga2V5IGV2ZW50c1xuXHRcdGlmICggZXZlbnQud2hpY2ggPT0gbnVsbCAmJiBya2V5RXZlbnQudGVzdCggZXZlbnQudHlwZSApICkge1xuXHRcdFx0cmV0dXJuIGV2ZW50LmNoYXJDb2RlICE9IG51bGwgPyBldmVudC5jaGFyQ29kZSA6IGV2ZW50LmtleUNvZGU7XG5cdFx0fVxuXG5cdFx0Ly8gQWRkIHdoaWNoIGZvciBjbGljazogMSA9PT0gbGVmdDsgMiA9PT0gbWlkZGxlOyAzID09PSByaWdodFxuXHRcdGlmICggIWV2ZW50LndoaWNoICYmIGJ1dHRvbiAhPT0gdW5kZWZpbmVkICYmIHJtb3VzZUV2ZW50LnRlc3QoIGV2ZW50LnR5cGUgKSApIHtcblx0XHRcdGlmICggYnV0dG9uICYgMSApIHtcblx0XHRcdFx0cmV0dXJuIDE7XG5cdFx0XHR9XG5cblx0XHRcdGlmICggYnV0dG9uICYgMiApIHtcblx0XHRcdFx0cmV0dXJuIDM7XG5cdFx0XHR9XG5cblx0XHRcdGlmICggYnV0dG9uICYgNCApIHtcblx0XHRcdFx0cmV0dXJuIDI7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiAwO1xuXHRcdH1cblxuXHRcdHJldHVybiBldmVudC53aGljaDtcblx0fVxufSwgalF1ZXJ5LmV2ZW50LmFkZFByb3AgKTtcblxualF1ZXJ5LmVhY2goIHsgZm9jdXM6IFwiZm9jdXNpblwiLCBibHVyOiBcImZvY3Vzb3V0XCIgfSwgZnVuY3Rpb24oIHR5cGUsIGRlbGVnYXRlVHlwZSApIHtcblx0alF1ZXJ5LmV2ZW50LnNwZWNpYWxbIHR5cGUgXSA9IHtcblxuXHRcdC8vIFV0aWxpemUgbmF0aXZlIGV2ZW50IGlmIHBvc3NpYmxlIHNvIGJsdXIvZm9jdXMgc2VxdWVuY2UgaXMgY29ycmVjdFxuXHRcdHNldHVwOiBmdW5jdGlvbigpIHtcblxuXHRcdFx0Ly8gQ2xhaW0gdGhlIGZpcnN0IGhhbmRsZXJcblx0XHRcdC8vIGRhdGFQcml2LnNldCggdGhpcywgXCJmb2N1c1wiLCAuLi4gKVxuXHRcdFx0Ly8gZGF0YVByaXYuc2V0KCB0aGlzLCBcImJsdXJcIiwgLi4uIClcblx0XHRcdGxldmVyYWdlTmF0aXZlKCB0aGlzLCB0eXBlLCBleHBlY3RTeW5jICk7XG5cblx0XHRcdC8vIFJldHVybiBmYWxzZSB0byBhbGxvdyBub3JtYWwgcHJvY2Vzc2luZyBpbiB0aGUgY2FsbGVyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fSxcblx0XHR0cmlnZ2VyOiBmdW5jdGlvbigpIHtcblxuXHRcdFx0Ly8gRm9yY2Ugc2V0dXAgYmVmb3JlIHRyaWdnZXJcblx0XHRcdGxldmVyYWdlTmF0aXZlKCB0aGlzLCB0eXBlICk7XG5cblx0XHRcdC8vIFJldHVybiBub24tZmFsc2UgdG8gYWxsb3cgbm9ybWFsIGV2ZW50LXBhdGggcHJvcGFnYXRpb25cblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH0sXG5cblx0XHRkZWxlZ2F0ZVR5cGU6IGRlbGVnYXRlVHlwZVxuXHR9O1xufSApO1xuXG4vLyBDcmVhdGUgbW91c2VlbnRlci9sZWF2ZSBldmVudHMgdXNpbmcgbW91c2VvdmVyL291dCBhbmQgZXZlbnQtdGltZSBjaGVja3Ncbi8vIHNvIHRoYXQgZXZlbnQgZGVsZWdhdGlvbiB3b3JrcyBpbiBqUXVlcnkuXG4vLyBEbyB0aGUgc2FtZSBmb3IgcG9pbnRlcmVudGVyL3BvaW50ZXJsZWF2ZSBhbmQgcG9pbnRlcm92ZXIvcG9pbnRlcm91dFxuLy9cbi8vIFN1cHBvcnQ6IFNhZmFyaSA3IG9ubHlcbi8vIFNhZmFyaSBzZW5kcyBtb3VzZWVudGVyIHRvbyBvZnRlbjsgc2VlOlxuLy8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9NDcwMjU4XG4vLyBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBidWcgKGl0IGV4aXN0ZWQgaW4gb2xkZXIgQ2hyb21lIHZlcnNpb25zIGFzIHdlbGwpLlxualF1ZXJ5LmVhY2goIHtcblx0bW91c2VlbnRlcjogXCJtb3VzZW92ZXJcIixcblx0bW91c2VsZWF2ZTogXCJtb3VzZW91dFwiLFxuXHRwb2ludGVyZW50ZXI6IFwicG9pbnRlcm92ZXJcIixcblx0cG9pbnRlcmxlYXZlOiBcInBvaW50ZXJvdXRcIlxufSwgZnVuY3Rpb24oIG9yaWcsIGZpeCApIHtcblx0alF1ZXJ5LmV2ZW50LnNwZWNpYWxbIG9yaWcgXSA9IHtcblx0XHRkZWxlZ2F0ZVR5cGU6IGZpeCxcblx0XHRiaW5kVHlwZTogZml4LFxuXG5cdFx0aGFuZGxlOiBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0XHR2YXIgcmV0LFxuXHRcdFx0XHR0YXJnZXQgPSB0aGlzLFxuXHRcdFx0XHRyZWxhdGVkID0gZXZlbnQucmVsYXRlZFRhcmdldCxcblx0XHRcdFx0aGFuZGxlT2JqID0gZXZlbnQuaGFuZGxlT2JqO1xuXG5cdFx0XHQvLyBGb3IgbW91c2VlbnRlci9sZWF2ZSBjYWxsIHRoZSBoYW5kbGVyIGlmIHJlbGF0ZWQgaXMgb3V0c2lkZSB0aGUgdGFyZ2V0LlxuXHRcdFx0Ly8gTkI6IE5vIHJlbGF0ZWRUYXJnZXQgaWYgdGhlIG1vdXNlIGxlZnQvZW50ZXJlZCB0aGUgYnJvd3NlciB3aW5kb3dcblx0XHRcdGlmICggIXJlbGF0ZWQgfHwgKCByZWxhdGVkICE9PSB0YXJnZXQgJiYgIWpRdWVyeS5jb250YWlucyggdGFyZ2V0LCByZWxhdGVkICkgKSApIHtcblx0XHRcdFx0ZXZlbnQudHlwZSA9IGhhbmRsZU9iai5vcmlnVHlwZTtcblx0XHRcdFx0cmV0ID0gaGFuZGxlT2JqLmhhbmRsZXIuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApO1xuXHRcdFx0XHRldmVudC50eXBlID0gZml4O1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHJldDtcblx0XHR9XG5cdH07XG59ICk7XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblxuXHRvbjogZnVuY3Rpb24oIHR5cGVzLCBzZWxlY3RvciwgZGF0YSwgZm4gKSB7XG5cdFx0cmV0dXJuIG9uKCB0aGlzLCB0eXBlcywgc2VsZWN0b3IsIGRhdGEsIGZuICk7XG5cdH0sXG5cdG9uZTogZnVuY3Rpb24oIHR5cGVzLCBzZWxlY3RvciwgZGF0YSwgZm4gKSB7XG5cdFx0cmV0dXJuIG9uKCB0aGlzLCB0eXBlcywgc2VsZWN0b3IsIGRhdGEsIGZuLCAxICk7XG5cdH0sXG5cdG9mZjogZnVuY3Rpb24oIHR5cGVzLCBzZWxlY3RvciwgZm4gKSB7XG5cdFx0dmFyIGhhbmRsZU9iaiwgdHlwZTtcblx0XHRpZiAoIHR5cGVzICYmIHR5cGVzLnByZXZlbnREZWZhdWx0ICYmIHR5cGVzLmhhbmRsZU9iaiApIHtcblxuXHRcdFx0Ly8gKCBldmVudCApICBkaXNwYXRjaGVkIGpRdWVyeS5FdmVudFxuXHRcdFx0aGFuZGxlT2JqID0gdHlwZXMuaGFuZGxlT2JqO1xuXHRcdFx0alF1ZXJ5KCB0eXBlcy5kZWxlZ2F0ZVRhcmdldCApLm9mZihcblx0XHRcdFx0aGFuZGxlT2JqLm5hbWVzcGFjZSA/XG5cdFx0XHRcdFx0aGFuZGxlT2JqLm9yaWdUeXBlICsgXCIuXCIgKyBoYW5kbGVPYmoubmFtZXNwYWNlIDpcblx0XHRcdFx0XHRoYW5kbGVPYmoub3JpZ1R5cGUsXG5cdFx0XHRcdGhhbmRsZU9iai5zZWxlY3Rvcixcblx0XHRcdFx0aGFuZGxlT2JqLmhhbmRsZXJcblx0XHRcdCk7XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9XG5cdFx0aWYgKCB0eXBlb2YgdHlwZXMgPT09IFwib2JqZWN0XCIgKSB7XG5cblx0XHRcdC8vICggdHlwZXMtb2JqZWN0IFssIHNlbGVjdG9yXSApXG5cdFx0XHRmb3IgKCB0eXBlIGluIHR5cGVzICkge1xuXHRcdFx0XHR0aGlzLm9mZiggdHlwZSwgc2VsZWN0b3IsIHR5cGVzWyB0eXBlIF0gKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblx0XHRpZiAoIHNlbGVjdG9yID09PSBmYWxzZSB8fCB0eXBlb2Ygc2VsZWN0b3IgPT09IFwiZnVuY3Rpb25cIiApIHtcblxuXHRcdFx0Ly8gKCB0eXBlcyBbLCBmbl0gKVxuXHRcdFx0Zm4gPSBzZWxlY3Rvcjtcblx0XHRcdHNlbGVjdG9yID0gdW5kZWZpbmVkO1xuXHRcdH1cblx0XHRpZiAoIGZuID09PSBmYWxzZSApIHtcblx0XHRcdGZuID0gcmV0dXJuRmFsc2U7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0alF1ZXJ5LmV2ZW50LnJlbW92ZSggdGhpcywgdHlwZXMsIGZuLCBzZWxlY3RvciApO1xuXHRcdH0gKTtcblx0fVxufSApO1xuXG5cbnZhclxuXG5cdC8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4gKi9cblxuXHQvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2VzbGludC9lc2xpbnQvaXNzdWVzLzMyMjlcblx0cnhodG1sVGFnID0gLzwoPyFhcmVhfGJyfGNvbHxlbWJlZHxocnxpbWd8aW5wdXR8bGlua3xtZXRhfHBhcmFtKSgoW2Etel1bXlxcL1xcMD5cXHgyMFxcdFxcclxcblxcZl0qKVtePl0qKVxcLz4vZ2ksXG5cblx0LyogZXNsaW50LWVuYWJsZSAqL1xuXG5cdC8vIFN1cHBvcnQ6IElFIDw9MTAgLSAxMSwgRWRnZSAxMiAtIDEzIG9ubHlcblx0Ly8gSW4gSUUvRWRnZSB1c2luZyByZWdleCBncm91cHMgaGVyZSBjYXVzZXMgc2V2ZXJlIHNsb3dkb3ducy5cblx0Ly8gU2VlIGh0dHBzOi8vY29ubmVjdC5taWNyb3NvZnQuY29tL0lFL2ZlZWRiYWNrL2RldGFpbHMvMTczNjUxMi9cblx0cm5vSW5uZXJodG1sID0gLzxzY3JpcHR8PHN0eWxlfDxsaW5rL2ksXG5cblx0Ly8gY2hlY2tlZD1cImNoZWNrZWRcIiBvciBjaGVja2VkXG5cdHJjaGVja2VkID0gL2NoZWNrZWRcXHMqKD86W149XXw9XFxzKi5jaGVja2VkLikvaSxcblx0cmNsZWFuU2NyaXB0ID0gL15cXHMqPCEoPzpcXFtDREFUQVxcW3wtLSl8KD86XFxdXFxdfC0tKT5cXHMqJC9nO1xuXG4vLyBQcmVmZXIgYSB0Ym9keSBvdmVyIGl0cyBwYXJlbnQgdGFibGUgZm9yIGNvbnRhaW5pbmcgbmV3IHJvd3NcbmZ1bmN0aW9uIG1hbmlwdWxhdGlvblRhcmdldCggZWxlbSwgY29udGVudCApIHtcblx0aWYgKCBub2RlTmFtZSggZWxlbSwgXCJ0YWJsZVwiICkgJiZcblx0XHRub2RlTmFtZSggY29udGVudC5ub2RlVHlwZSAhPT0gMTEgPyBjb250ZW50IDogY29udGVudC5maXJzdENoaWxkLCBcInRyXCIgKSApIHtcblxuXHRcdHJldHVybiBqUXVlcnkoIGVsZW0gKS5jaGlsZHJlbiggXCJ0Ym9keVwiIClbIDAgXSB8fCBlbGVtO1xuXHR9XG5cblx0cmV0dXJuIGVsZW07XG59XG5cbi8vIFJlcGxhY2UvcmVzdG9yZSB0aGUgdHlwZSBhdHRyaWJ1dGUgb2Ygc2NyaXB0IGVsZW1lbnRzIGZvciBzYWZlIERPTSBtYW5pcHVsYXRpb25cbmZ1bmN0aW9uIGRpc2FibGVTY3JpcHQoIGVsZW0gKSB7XG5cdGVsZW0udHlwZSA9ICggZWxlbS5nZXRBdHRyaWJ1dGUoIFwidHlwZVwiICkgIT09IG51bGwgKSArIFwiL1wiICsgZWxlbS50eXBlO1xuXHRyZXR1cm4gZWxlbTtcbn1cbmZ1bmN0aW9uIHJlc3RvcmVTY3JpcHQoIGVsZW0gKSB7XG5cdGlmICggKCBlbGVtLnR5cGUgfHwgXCJcIiApLnNsaWNlKCAwLCA1ICkgPT09IFwidHJ1ZS9cIiApIHtcblx0XHRlbGVtLnR5cGUgPSBlbGVtLnR5cGUuc2xpY2UoIDUgKTtcblx0fSBlbHNlIHtcblx0XHRlbGVtLnJlbW92ZUF0dHJpYnV0ZSggXCJ0eXBlXCIgKTtcblx0fVxuXG5cdHJldHVybiBlbGVtO1xufVxuXG5mdW5jdGlvbiBjbG9uZUNvcHlFdmVudCggc3JjLCBkZXN0ICkge1xuXHR2YXIgaSwgbCwgdHlwZSwgcGRhdGFPbGQsIHBkYXRhQ3VyLCB1ZGF0YU9sZCwgdWRhdGFDdXIsIGV2ZW50cztcblxuXHRpZiAoIGRlc3Qubm9kZVR5cGUgIT09IDEgKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0Ly8gMS4gQ29weSBwcml2YXRlIGRhdGE6IGV2ZW50cywgaGFuZGxlcnMsIGV0Yy5cblx0aWYgKCBkYXRhUHJpdi5oYXNEYXRhKCBzcmMgKSApIHtcblx0XHRwZGF0YU9sZCA9IGRhdGFQcml2LmFjY2Vzcyggc3JjICk7XG5cdFx0cGRhdGFDdXIgPSBkYXRhUHJpdi5zZXQoIGRlc3QsIHBkYXRhT2xkICk7XG5cdFx0ZXZlbnRzID0gcGRhdGFPbGQuZXZlbnRzO1xuXG5cdFx0aWYgKCBldmVudHMgKSB7XG5cdFx0XHRkZWxldGUgcGRhdGFDdXIuaGFuZGxlO1xuXHRcdFx0cGRhdGFDdXIuZXZlbnRzID0ge307XG5cblx0XHRcdGZvciAoIHR5cGUgaW4gZXZlbnRzICkge1xuXHRcdFx0XHRmb3IgKCBpID0gMCwgbCA9IGV2ZW50c1sgdHlwZSBdLmxlbmd0aDsgaSA8IGw7IGkrKyApIHtcblx0XHRcdFx0XHRqUXVlcnkuZXZlbnQuYWRkKCBkZXN0LCB0eXBlLCBldmVudHNbIHR5cGUgXVsgaSBdICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyAyLiBDb3B5IHVzZXIgZGF0YVxuXHRpZiAoIGRhdGFVc2VyLmhhc0RhdGEoIHNyYyApICkge1xuXHRcdHVkYXRhT2xkID0gZGF0YVVzZXIuYWNjZXNzKCBzcmMgKTtcblx0XHR1ZGF0YUN1ciA9IGpRdWVyeS5leHRlbmQoIHt9LCB1ZGF0YU9sZCApO1xuXG5cdFx0ZGF0YVVzZXIuc2V0KCBkZXN0LCB1ZGF0YUN1ciApO1xuXHR9XG59XG5cbi8vIEZpeCBJRSBidWdzLCBzZWUgc3VwcG9ydCB0ZXN0c1xuZnVuY3Rpb24gZml4SW5wdXQoIHNyYywgZGVzdCApIHtcblx0dmFyIG5vZGVOYW1lID0gZGVzdC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuXG5cdC8vIEZhaWxzIHRvIHBlcnNpc3QgdGhlIGNoZWNrZWQgc3RhdGUgb2YgYSBjbG9uZWQgY2hlY2tib3ggb3IgcmFkaW8gYnV0dG9uLlxuXHRpZiAoIG5vZGVOYW1lID09PSBcImlucHV0XCIgJiYgcmNoZWNrYWJsZVR5cGUudGVzdCggc3JjLnR5cGUgKSApIHtcblx0XHRkZXN0LmNoZWNrZWQgPSBzcmMuY2hlY2tlZDtcblxuXHQvLyBGYWlscyB0byByZXR1cm4gdGhlIHNlbGVjdGVkIG9wdGlvbiB0byB0aGUgZGVmYXVsdCBzZWxlY3RlZCBzdGF0ZSB3aGVuIGNsb25pbmcgb3B0aW9uc1xuXHR9IGVsc2UgaWYgKCBub2RlTmFtZSA9PT0gXCJpbnB1dFwiIHx8IG5vZGVOYW1lID09PSBcInRleHRhcmVhXCIgKSB7XG5cdFx0ZGVzdC5kZWZhdWx0VmFsdWUgPSBzcmMuZGVmYXVsdFZhbHVlO1xuXHR9XG59XG5cbmZ1bmN0aW9uIGRvbU1hbmlwKCBjb2xsZWN0aW9uLCBhcmdzLCBjYWxsYmFjaywgaWdub3JlZCApIHtcblxuXHQvLyBGbGF0dGVuIGFueSBuZXN0ZWQgYXJyYXlzXG5cdGFyZ3MgPSBjb25jYXQuYXBwbHkoIFtdLCBhcmdzICk7XG5cblx0dmFyIGZyYWdtZW50LCBmaXJzdCwgc2NyaXB0cywgaGFzU2NyaXB0cywgbm9kZSwgZG9jLFxuXHRcdGkgPSAwLFxuXHRcdGwgPSBjb2xsZWN0aW9uLmxlbmd0aCxcblx0XHRpTm9DbG9uZSA9IGwgLSAxLFxuXHRcdHZhbHVlID0gYXJnc1sgMCBdLFxuXHRcdHZhbHVlSXNGdW5jdGlvbiA9IGlzRnVuY3Rpb24oIHZhbHVlICk7XG5cblx0Ly8gV2UgY2FuJ3QgY2xvbmVOb2RlIGZyYWdtZW50cyB0aGF0IGNvbnRhaW4gY2hlY2tlZCwgaW4gV2ViS2l0XG5cdGlmICggdmFsdWVJc0Z1bmN0aW9uIHx8XG5cdFx0XHQoIGwgPiAxICYmIHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiAmJlxuXHRcdFx0XHQhc3VwcG9ydC5jaGVja0Nsb25lICYmIHJjaGVja2VkLnRlc3QoIHZhbHVlICkgKSApIHtcblx0XHRyZXR1cm4gY29sbGVjdGlvbi5lYWNoKCBmdW5jdGlvbiggaW5kZXggKSB7XG5cdFx0XHR2YXIgc2VsZiA9IGNvbGxlY3Rpb24uZXEoIGluZGV4ICk7XG5cdFx0XHRpZiAoIHZhbHVlSXNGdW5jdGlvbiApIHtcblx0XHRcdFx0YXJnc1sgMCBdID0gdmFsdWUuY2FsbCggdGhpcywgaW5kZXgsIHNlbGYuaHRtbCgpICk7XG5cdFx0XHR9XG5cdFx0XHRkb21NYW5pcCggc2VsZiwgYXJncywgY2FsbGJhY2ssIGlnbm9yZWQgKTtcblx0XHR9ICk7XG5cdH1cblxuXHRpZiAoIGwgKSB7XG5cdFx0ZnJhZ21lbnQgPSBidWlsZEZyYWdtZW50KCBhcmdzLCBjb2xsZWN0aW9uWyAwIF0ub3duZXJEb2N1bWVudCwgZmFsc2UsIGNvbGxlY3Rpb24sIGlnbm9yZWQgKTtcblx0XHRmaXJzdCA9IGZyYWdtZW50LmZpcnN0Q2hpbGQ7XG5cblx0XHRpZiAoIGZyYWdtZW50LmNoaWxkTm9kZXMubGVuZ3RoID09PSAxICkge1xuXHRcdFx0ZnJhZ21lbnQgPSBmaXJzdDtcblx0XHR9XG5cblx0XHQvLyBSZXF1aXJlIGVpdGhlciBuZXcgY29udGVudCBvciBhbiBpbnRlcmVzdCBpbiBpZ25vcmVkIGVsZW1lbnRzIHRvIGludm9rZSB0aGUgY2FsbGJhY2tcblx0XHRpZiAoIGZpcnN0IHx8IGlnbm9yZWQgKSB7XG5cdFx0XHRzY3JpcHRzID0galF1ZXJ5Lm1hcCggZ2V0QWxsKCBmcmFnbWVudCwgXCJzY3JpcHRcIiApLCBkaXNhYmxlU2NyaXB0ICk7XG5cdFx0XHRoYXNTY3JpcHRzID0gc2NyaXB0cy5sZW5ndGg7XG5cblx0XHRcdC8vIFVzZSB0aGUgb3JpZ2luYWwgZnJhZ21lbnQgZm9yIHRoZSBsYXN0IGl0ZW1cblx0XHRcdC8vIGluc3RlYWQgb2YgdGhlIGZpcnN0IGJlY2F1c2UgaXQgY2FuIGVuZCB1cFxuXHRcdFx0Ly8gYmVpbmcgZW1wdGllZCBpbmNvcnJlY3RseSBpbiBjZXJ0YWluIHNpdHVhdGlvbnMgKCM4MDcwKS5cblx0XHRcdGZvciAoIDsgaSA8IGw7IGkrKyApIHtcblx0XHRcdFx0bm9kZSA9IGZyYWdtZW50O1xuXG5cdFx0XHRcdGlmICggaSAhPT0gaU5vQ2xvbmUgKSB7XG5cdFx0XHRcdFx0bm9kZSA9IGpRdWVyeS5jbG9uZSggbm9kZSwgdHJ1ZSwgdHJ1ZSApO1xuXG5cdFx0XHRcdFx0Ly8gS2VlcCByZWZlcmVuY2VzIHRvIGNsb25lZCBzY3JpcHRzIGZvciBsYXRlciByZXN0b3JhdGlvblxuXHRcdFx0XHRcdGlmICggaGFzU2NyaXB0cyApIHtcblxuXHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogQW5kcm9pZCA8PTQuMCBvbmx5LCBQaGFudG9tSlMgMSBvbmx5XG5cdFx0XHRcdFx0XHQvLyBwdXNoLmFwcGx5KF8sIGFycmF5bGlrZSkgdGhyb3dzIG9uIGFuY2llbnQgV2ViS2l0XG5cdFx0XHRcdFx0XHRqUXVlcnkubWVyZ2UoIHNjcmlwdHMsIGdldEFsbCggbm9kZSwgXCJzY3JpcHRcIiApICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y2FsbGJhY2suY2FsbCggY29sbGVjdGlvblsgaSBdLCBub2RlLCBpICk7XG5cdFx0XHR9XG5cblx0XHRcdGlmICggaGFzU2NyaXB0cyApIHtcblx0XHRcdFx0ZG9jID0gc2NyaXB0c1sgc2NyaXB0cy5sZW5ndGggLSAxIF0ub3duZXJEb2N1bWVudDtcblxuXHRcdFx0XHQvLyBSZWVuYWJsZSBzY3JpcHRzXG5cdFx0XHRcdGpRdWVyeS5tYXAoIHNjcmlwdHMsIHJlc3RvcmVTY3JpcHQgKTtcblxuXHRcdFx0XHQvLyBFdmFsdWF0ZSBleGVjdXRhYmxlIHNjcmlwdHMgb24gZmlyc3QgZG9jdW1lbnQgaW5zZXJ0aW9uXG5cdFx0XHRcdGZvciAoIGkgPSAwOyBpIDwgaGFzU2NyaXB0czsgaSsrICkge1xuXHRcdFx0XHRcdG5vZGUgPSBzY3JpcHRzWyBpIF07XG5cdFx0XHRcdFx0aWYgKCByc2NyaXB0VHlwZS50ZXN0KCBub2RlLnR5cGUgfHwgXCJcIiApICYmXG5cdFx0XHRcdFx0XHQhZGF0YVByaXYuYWNjZXNzKCBub2RlLCBcImdsb2JhbEV2YWxcIiApICYmXG5cdFx0XHRcdFx0XHRqUXVlcnkuY29udGFpbnMoIGRvYywgbm9kZSApICkge1xuXG5cdFx0XHRcdFx0XHRpZiAoIG5vZGUuc3JjICYmICggbm9kZS50eXBlIHx8IFwiXCIgKS50b0xvd2VyQ2FzZSgpICAhPT0gXCJtb2R1bGVcIiApIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBPcHRpb25hbCBBSkFYIGRlcGVuZGVuY3ksIGJ1dCB3b24ndCBydW4gc2NyaXB0cyBpZiBub3QgcHJlc2VudFxuXHRcdFx0XHRcdFx0XHRpZiAoIGpRdWVyeS5fZXZhbFVybCAmJiAhbm9kZS5ub01vZHVsZSApIHtcblx0XHRcdFx0XHRcdFx0XHRqUXVlcnkuX2V2YWxVcmwoIG5vZGUuc3JjLCB7XG5cdFx0XHRcdFx0XHRcdFx0XHRub25jZTogbm9kZS5ub25jZSB8fCBub2RlLmdldEF0dHJpYnV0ZSggXCJub25jZVwiIClcblx0XHRcdFx0XHRcdFx0XHR9ICk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdERPTUV2YWwoIG5vZGUudGV4dENvbnRlbnQucmVwbGFjZSggcmNsZWFuU2NyaXB0LCBcIlwiICksIG5vZGUsIGRvYyApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiBjb2xsZWN0aW9uO1xufVxuXG5mdW5jdGlvbiByZW1vdmUoIGVsZW0sIHNlbGVjdG9yLCBrZWVwRGF0YSApIHtcblx0dmFyIG5vZGUsXG5cdFx0bm9kZXMgPSBzZWxlY3RvciA/IGpRdWVyeS5maWx0ZXIoIHNlbGVjdG9yLCBlbGVtICkgOiBlbGVtLFxuXHRcdGkgPSAwO1xuXG5cdGZvciAoIDsgKCBub2RlID0gbm9kZXNbIGkgXSApICE9IG51bGw7IGkrKyApIHtcblx0XHRpZiAoICFrZWVwRGF0YSAmJiBub2RlLm5vZGVUeXBlID09PSAxICkge1xuXHRcdFx0alF1ZXJ5LmNsZWFuRGF0YSggZ2V0QWxsKCBub2RlICkgKTtcblx0XHR9XG5cblx0XHRpZiAoIG5vZGUucGFyZW50Tm9kZSApIHtcblx0XHRcdGlmICgga2VlcERhdGEgJiYgaXNBdHRhY2hlZCggbm9kZSApICkge1xuXHRcdFx0XHRzZXRHbG9iYWxFdmFsKCBnZXRBbGwoIG5vZGUsIFwic2NyaXB0XCIgKSApO1xuXHRcdFx0fVxuXHRcdFx0bm9kZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKCBub2RlICk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGVsZW07XG59XG5cbmpRdWVyeS5leHRlbmQoIHtcblx0aHRtbFByZWZpbHRlcjogZnVuY3Rpb24oIGh0bWwgKSB7XG5cdFx0cmV0dXJuIGh0bWwucmVwbGFjZSggcnhodG1sVGFnLCBcIjwkMT48LyQyPlwiICk7XG5cdH0sXG5cblx0Y2xvbmU6IGZ1bmN0aW9uKCBlbGVtLCBkYXRhQW5kRXZlbnRzLCBkZWVwRGF0YUFuZEV2ZW50cyApIHtcblx0XHR2YXIgaSwgbCwgc3JjRWxlbWVudHMsIGRlc3RFbGVtZW50cyxcblx0XHRcdGNsb25lID0gZWxlbS5jbG9uZU5vZGUoIHRydWUgKSxcblx0XHRcdGluUGFnZSA9IGlzQXR0YWNoZWQoIGVsZW0gKTtcblxuXHRcdC8vIEZpeCBJRSBjbG9uaW5nIGlzc3Vlc1xuXHRcdGlmICggIXN1cHBvcnQubm9DbG9uZUNoZWNrZWQgJiYgKCBlbGVtLm5vZGVUeXBlID09PSAxIHx8IGVsZW0ubm9kZVR5cGUgPT09IDExICkgJiZcblx0XHRcdFx0IWpRdWVyeS5pc1hNTERvYyggZWxlbSApICkge1xuXG5cdFx0XHQvLyBXZSBlc2NoZXcgU2l6emxlIGhlcmUgZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnM6IGh0dHBzOi8vanNwZXJmLmNvbS9nZXRhbGwtdnMtc2l6emxlLzJcblx0XHRcdGRlc3RFbGVtZW50cyA9IGdldEFsbCggY2xvbmUgKTtcblx0XHRcdHNyY0VsZW1lbnRzID0gZ2V0QWxsKCBlbGVtICk7XG5cblx0XHRcdGZvciAoIGkgPSAwLCBsID0gc3JjRWxlbWVudHMubGVuZ3RoOyBpIDwgbDsgaSsrICkge1xuXHRcdFx0XHRmaXhJbnB1dCggc3JjRWxlbWVudHNbIGkgXSwgZGVzdEVsZW1lbnRzWyBpIF0gKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBDb3B5IHRoZSBldmVudHMgZnJvbSB0aGUgb3JpZ2luYWwgdG8gdGhlIGNsb25lXG5cdFx0aWYgKCBkYXRhQW5kRXZlbnRzICkge1xuXHRcdFx0aWYgKCBkZWVwRGF0YUFuZEV2ZW50cyApIHtcblx0XHRcdFx0c3JjRWxlbWVudHMgPSBzcmNFbGVtZW50cyB8fCBnZXRBbGwoIGVsZW0gKTtcblx0XHRcdFx0ZGVzdEVsZW1lbnRzID0gZGVzdEVsZW1lbnRzIHx8IGdldEFsbCggY2xvbmUgKTtcblxuXHRcdFx0XHRmb3IgKCBpID0gMCwgbCA9IHNyY0VsZW1lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKyApIHtcblx0XHRcdFx0XHRjbG9uZUNvcHlFdmVudCggc3JjRWxlbWVudHNbIGkgXSwgZGVzdEVsZW1lbnRzWyBpIF0gKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y2xvbmVDb3B5RXZlbnQoIGVsZW0sIGNsb25lICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gUHJlc2VydmUgc2NyaXB0IGV2YWx1YXRpb24gaGlzdG9yeVxuXHRcdGRlc3RFbGVtZW50cyA9IGdldEFsbCggY2xvbmUsIFwic2NyaXB0XCIgKTtcblx0XHRpZiAoIGRlc3RFbGVtZW50cy5sZW5ndGggPiAwICkge1xuXHRcdFx0c2V0R2xvYmFsRXZhbCggZGVzdEVsZW1lbnRzLCAhaW5QYWdlICYmIGdldEFsbCggZWxlbSwgXCJzY3JpcHRcIiApICk7XG5cdFx0fVxuXG5cdFx0Ly8gUmV0dXJuIHRoZSBjbG9uZWQgc2V0XG5cdFx0cmV0dXJuIGNsb25lO1xuXHR9LFxuXG5cdGNsZWFuRGF0YTogZnVuY3Rpb24oIGVsZW1zICkge1xuXHRcdHZhciBkYXRhLCBlbGVtLCB0eXBlLFxuXHRcdFx0c3BlY2lhbCA9IGpRdWVyeS5ldmVudC5zcGVjaWFsLFxuXHRcdFx0aSA9IDA7XG5cblx0XHRmb3IgKCA7ICggZWxlbSA9IGVsZW1zWyBpIF0gKSAhPT0gdW5kZWZpbmVkOyBpKysgKSB7XG5cdFx0XHRpZiAoIGFjY2VwdERhdGEoIGVsZW0gKSApIHtcblx0XHRcdFx0aWYgKCAoIGRhdGEgPSBlbGVtWyBkYXRhUHJpdi5leHBhbmRvIF0gKSApIHtcblx0XHRcdFx0XHRpZiAoIGRhdGEuZXZlbnRzICkge1xuXHRcdFx0XHRcdFx0Zm9yICggdHlwZSBpbiBkYXRhLmV2ZW50cyApIHtcblx0XHRcdFx0XHRcdFx0aWYgKCBzcGVjaWFsWyB0eXBlIF0gKSB7XG5cdFx0XHRcdFx0XHRcdFx0alF1ZXJ5LmV2ZW50LnJlbW92ZSggZWxlbSwgdHlwZSApO1xuXG5cdFx0XHRcdFx0XHRcdC8vIFRoaXMgaXMgYSBzaG9ydGN1dCB0byBhdm9pZCBqUXVlcnkuZXZlbnQucmVtb3ZlJ3Mgb3ZlcmhlYWRcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRqUXVlcnkucmVtb3ZlRXZlbnQoIGVsZW0sIHR5cGUsIGRhdGEuaGFuZGxlICk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBTdXBwb3J0OiBDaHJvbWUgPD0zNSAtIDQ1K1xuXHRcdFx0XHRcdC8vIEFzc2lnbiB1bmRlZmluZWQgaW5zdGVhZCBvZiB1c2luZyBkZWxldGUsIHNlZSBEYXRhI3JlbW92ZVxuXHRcdFx0XHRcdGVsZW1bIGRhdGFQcml2LmV4cGFuZG8gXSA9IHVuZGVmaW5lZDtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoIGVsZW1bIGRhdGFVc2VyLmV4cGFuZG8gXSApIHtcblxuXHRcdFx0XHRcdC8vIFN1cHBvcnQ6IENocm9tZSA8PTM1IC0gNDUrXG5cdFx0XHRcdFx0Ly8gQXNzaWduIHVuZGVmaW5lZCBpbnN0ZWFkIG9mIHVzaW5nIGRlbGV0ZSwgc2VlIERhdGEjcmVtb3ZlXG5cdFx0XHRcdFx0ZWxlbVsgZGF0YVVzZXIuZXhwYW5kbyBdID0gdW5kZWZpbmVkO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59ICk7XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0ZGV0YWNoOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cdFx0cmV0dXJuIHJlbW92ZSggdGhpcywgc2VsZWN0b3IsIHRydWUgKTtcblx0fSxcblxuXHRyZW1vdmU6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHRyZXR1cm4gcmVtb3ZlKCB0aGlzLCBzZWxlY3RvciApO1xuXHR9LFxuXG5cdHRleHQ6IGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHRyZXR1cm4gYWNjZXNzKCB0aGlzLCBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0XHRyZXR1cm4gdmFsdWUgPT09IHVuZGVmaW5lZCA/XG5cdFx0XHRcdGpRdWVyeS50ZXh0KCB0aGlzICkgOlxuXHRcdFx0XHR0aGlzLmVtcHR5KCkuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0aWYgKCB0aGlzLm5vZGVUeXBlID09PSAxIHx8IHRoaXMubm9kZVR5cGUgPT09IDExIHx8IHRoaXMubm9kZVR5cGUgPT09IDkgKSB7XG5cdFx0XHRcdFx0XHR0aGlzLnRleHRDb250ZW50ID0gdmFsdWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9ICk7XG5cdFx0fSwgbnVsbCwgdmFsdWUsIGFyZ3VtZW50cy5sZW5ndGggKTtcblx0fSxcblxuXHRhcHBlbmQ6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBkb21NYW5pcCggdGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdGlmICggdGhpcy5ub2RlVHlwZSA9PT0gMSB8fCB0aGlzLm5vZGVUeXBlID09PSAxMSB8fCB0aGlzLm5vZGVUeXBlID09PSA5ICkge1xuXHRcdFx0XHR2YXIgdGFyZ2V0ID0gbWFuaXB1bGF0aW9uVGFyZ2V0KCB0aGlzLCBlbGVtICk7XG5cdFx0XHRcdHRhcmdldC5hcHBlbmRDaGlsZCggZWxlbSApO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0fSxcblxuXHRwcmVwZW5kOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gZG9tTWFuaXAoIHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRpZiAoIHRoaXMubm9kZVR5cGUgPT09IDEgfHwgdGhpcy5ub2RlVHlwZSA9PT0gMTEgfHwgdGhpcy5ub2RlVHlwZSA9PT0gOSApIHtcblx0XHRcdFx0dmFyIHRhcmdldCA9IG1hbmlwdWxhdGlvblRhcmdldCggdGhpcywgZWxlbSApO1xuXHRcdFx0XHR0YXJnZXQuaW5zZXJ0QmVmb3JlKCBlbGVtLCB0YXJnZXQuZmlyc3RDaGlsZCApO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0fSxcblxuXHRiZWZvcmU6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBkb21NYW5pcCggdGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdGlmICggdGhpcy5wYXJlbnROb2RlICkge1xuXHRcdFx0XHR0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKCBlbGVtLCB0aGlzICk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9LFxuXG5cdGFmdGVyOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gZG9tTWFuaXAoIHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRpZiAoIHRoaXMucGFyZW50Tm9kZSApIHtcblx0XHRcdFx0dGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZSggZWxlbSwgdGhpcy5uZXh0U2libGluZyApO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0fSxcblxuXHRlbXB0eTogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGVsZW0sXG5cdFx0XHRpID0gMDtcblxuXHRcdGZvciAoIDsgKCBlbGVtID0gdGhpc1sgaSBdICkgIT0gbnVsbDsgaSsrICkge1xuXHRcdFx0aWYgKCBlbGVtLm5vZGVUeXBlID09PSAxICkge1xuXG5cdFx0XHRcdC8vIFByZXZlbnQgbWVtb3J5IGxlYWtzXG5cdFx0XHRcdGpRdWVyeS5jbGVhbkRhdGEoIGdldEFsbCggZWxlbSwgZmFsc2UgKSApO1xuXG5cdFx0XHRcdC8vIFJlbW92ZSBhbnkgcmVtYWluaW5nIG5vZGVzXG5cdFx0XHRcdGVsZW0udGV4dENvbnRlbnQgPSBcIlwiO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGNsb25lOiBmdW5jdGlvbiggZGF0YUFuZEV2ZW50cywgZGVlcERhdGFBbmRFdmVudHMgKSB7XG5cdFx0ZGF0YUFuZEV2ZW50cyA9IGRhdGFBbmRFdmVudHMgPT0gbnVsbCA/IGZhbHNlIDogZGF0YUFuZEV2ZW50cztcblx0XHRkZWVwRGF0YUFuZEV2ZW50cyA9IGRlZXBEYXRhQW5kRXZlbnRzID09IG51bGwgPyBkYXRhQW5kRXZlbnRzIDogZGVlcERhdGFBbmRFdmVudHM7XG5cblx0XHRyZXR1cm4gdGhpcy5tYXAoIGZ1bmN0aW9uKCkge1xuXHRcdFx0cmV0dXJuIGpRdWVyeS5jbG9uZSggdGhpcywgZGF0YUFuZEV2ZW50cywgZGVlcERhdGFBbmRFdmVudHMgKTtcblx0XHR9ICk7XG5cdH0sXG5cblx0aHRtbDogZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdHJldHVybiBhY2Nlc3MoIHRoaXMsIGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHRcdHZhciBlbGVtID0gdGhpc1sgMCBdIHx8IHt9LFxuXHRcdFx0XHRpID0gMCxcblx0XHRcdFx0bCA9IHRoaXMubGVuZ3RoO1xuXG5cdFx0XHRpZiAoIHZhbHVlID09PSB1bmRlZmluZWQgJiYgZWxlbS5ub2RlVHlwZSA9PT0gMSApIHtcblx0XHRcdFx0cmV0dXJuIGVsZW0uaW5uZXJIVE1MO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBTZWUgaWYgd2UgY2FuIHRha2UgYSBzaG9ydGN1dCBhbmQganVzdCB1c2UgaW5uZXJIVE1MXG5cdFx0XHRpZiAoIHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiAmJiAhcm5vSW5uZXJodG1sLnRlc3QoIHZhbHVlICkgJiZcblx0XHRcdFx0IXdyYXBNYXBbICggcnRhZ05hbWUuZXhlYyggdmFsdWUgKSB8fCBbIFwiXCIsIFwiXCIgXSApWyAxIF0udG9Mb3dlckNhc2UoKSBdICkge1xuXG5cdFx0XHRcdHZhbHVlID0galF1ZXJ5Lmh0bWxQcmVmaWx0ZXIoIHZhbHVlICk7XG5cblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRmb3IgKCA7IGkgPCBsOyBpKysgKSB7XG5cdFx0XHRcdFx0XHRlbGVtID0gdGhpc1sgaSBdIHx8IHt9O1xuXG5cdFx0XHRcdFx0XHQvLyBSZW1vdmUgZWxlbWVudCBub2RlcyBhbmQgcHJldmVudCBtZW1vcnkgbGVha3Ncblx0XHRcdFx0XHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSApIHtcblx0XHRcdFx0XHRcdFx0alF1ZXJ5LmNsZWFuRGF0YSggZ2V0QWxsKCBlbGVtLCBmYWxzZSApICk7XG5cdFx0XHRcdFx0XHRcdGVsZW0uaW5uZXJIVE1MID0gdmFsdWU7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0ZWxlbSA9IDA7XG5cblx0XHRcdFx0Ly8gSWYgdXNpbmcgaW5uZXJIVE1MIHRocm93cyBhbiBleGNlcHRpb24sIHVzZSB0aGUgZmFsbGJhY2sgbWV0aG9kXG5cdFx0XHRcdH0gY2F0Y2ggKCBlICkge31cblx0XHRcdH1cblxuXHRcdFx0aWYgKCBlbGVtICkge1xuXHRcdFx0XHR0aGlzLmVtcHR5KCkuYXBwZW5kKCB2YWx1ZSApO1xuXHRcdFx0fVxuXHRcdH0sIG51bGwsIHZhbHVlLCBhcmd1bWVudHMubGVuZ3RoICk7XG5cdH0sXG5cblx0cmVwbGFjZVdpdGg6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBpZ25vcmVkID0gW107XG5cblx0XHQvLyBNYWtlIHRoZSBjaGFuZ2VzLCByZXBsYWNpbmcgZWFjaCBub24taWdub3JlZCBjb250ZXh0IGVsZW1lbnQgd2l0aCB0aGUgbmV3IGNvbnRlbnRcblx0XHRyZXR1cm4gZG9tTWFuaXAoIHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHR2YXIgcGFyZW50ID0gdGhpcy5wYXJlbnROb2RlO1xuXG5cdFx0XHRpZiAoIGpRdWVyeS5pbkFycmF5KCB0aGlzLCBpZ25vcmVkICkgPCAwICkge1xuXHRcdFx0XHRqUXVlcnkuY2xlYW5EYXRhKCBnZXRBbGwoIHRoaXMgKSApO1xuXHRcdFx0XHRpZiAoIHBhcmVudCApIHtcblx0XHRcdFx0XHRwYXJlbnQucmVwbGFjZUNoaWxkKCBlbGVtLCB0aGlzICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdC8vIEZvcmNlIGNhbGxiYWNrIGludm9jYXRpb25cblx0XHR9LCBpZ25vcmVkICk7XG5cdH1cbn0gKTtcblxualF1ZXJ5LmVhY2goIHtcblx0YXBwZW5kVG86IFwiYXBwZW5kXCIsXG5cdHByZXBlbmRUbzogXCJwcmVwZW5kXCIsXG5cdGluc2VydEJlZm9yZTogXCJiZWZvcmVcIixcblx0aW5zZXJ0QWZ0ZXI6IFwiYWZ0ZXJcIixcblx0cmVwbGFjZUFsbDogXCJyZXBsYWNlV2l0aFwiXG59LCBmdW5jdGlvbiggbmFtZSwgb3JpZ2luYWwgKSB7XG5cdGpRdWVyeS5mblsgbmFtZSBdID0gZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdHZhciBlbGVtcyxcblx0XHRcdHJldCA9IFtdLFxuXHRcdFx0aW5zZXJ0ID0galF1ZXJ5KCBzZWxlY3RvciApLFxuXHRcdFx0bGFzdCA9IGluc2VydC5sZW5ndGggLSAxLFxuXHRcdFx0aSA9IDA7XG5cblx0XHRmb3IgKCA7IGkgPD0gbGFzdDsgaSsrICkge1xuXHRcdFx0ZWxlbXMgPSBpID09PSBsYXN0ID8gdGhpcyA6IHRoaXMuY2xvbmUoIHRydWUgKTtcblx0XHRcdGpRdWVyeSggaW5zZXJ0WyBpIF0gKVsgb3JpZ2luYWwgXSggZWxlbXMgKTtcblxuXHRcdFx0Ly8gU3VwcG9ydDogQW5kcm9pZCA8PTQuMCBvbmx5LCBQaGFudG9tSlMgMSBvbmx5XG5cdFx0XHQvLyAuZ2V0KCkgYmVjYXVzZSBwdXNoLmFwcGx5KF8sIGFycmF5bGlrZSkgdGhyb3dzIG9uIGFuY2llbnQgV2ViS2l0XG5cdFx0XHRwdXNoLmFwcGx5KCByZXQsIGVsZW1zLmdldCgpICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKCByZXQgKTtcblx0fTtcbn0gKTtcbnZhciBybnVtbm9ucHggPSBuZXcgUmVnRXhwKCBcIl4oXCIgKyBwbnVtICsgXCIpKD8hcHgpW2EteiVdKyRcIiwgXCJpXCIgKTtcblxudmFyIGdldFN0eWxlcyA9IGZ1bmN0aW9uKCBlbGVtICkge1xuXG5cdFx0Ly8gU3VwcG9ydDogSUUgPD0xMSBvbmx5LCBGaXJlZm94IDw9MzAgKCMxNTA5OCwgIzE0MTUwKVxuXHRcdC8vIElFIHRocm93cyBvbiBlbGVtZW50cyBjcmVhdGVkIGluIHBvcHVwc1xuXHRcdC8vIEZGIG1lYW53aGlsZSB0aHJvd3Mgb24gZnJhbWUgZWxlbWVudHMgdGhyb3VnaCBcImRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGVcIlxuXHRcdHZhciB2aWV3ID0gZWxlbS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3O1xuXG5cdFx0aWYgKCAhdmlldyB8fCAhdmlldy5vcGVuZXIgKSB7XG5cdFx0XHR2aWV3ID0gd2luZG93O1xuXHRcdH1cblxuXHRcdHJldHVybiB2aWV3LmdldENvbXB1dGVkU3R5bGUoIGVsZW0gKTtcblx0fTtcblxudmFyIHJib3hTdHlsZSA9IG5ldyBSZWdFeHAoIGNzc0V4cGFuZC5qb2luKCBcInxcIiApLCBcImlcIiApO1xuXG5cblxuKCBmdW5jdGlvbigpIHtcblxuXHQvLyBFeGVjdXRpbmcgYm90aCBwaXhlbFBvc2l0aW9uICYgYm94U2l6aW5nUmVsaWFibGUgdGVzdHMgcmVxdWlyZSBvbmx5IG9uZSBsYXlvdXRcblx0Ly8gc28gdGhleSdyZSBleGVjdXRlZCBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgdGhlIHNlY29uZCBjb21wdXRhdGlvbi5cblx0ZnVuY3Rpb24gY29tcHV0ZVN0eWxlVGVzdHMoKSB7XG5cblx0XHQvLyBUaGlzIGlzIGEgc2luZ2xldG9uLCB3ZSBuZWVkIHRvIGV4ZWN1dGUgaXQgb25seSBvbmNlXG5cdFx0aWYgKCAhZGl2ICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNvbnRhaW5lci5zdHlsZS5jc3NUZXh0ID0gXCJwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0Oi0xMTExMXB4O3dpZHRoOjYwcHg7XCIgK1xuXHRcdFx0XCJtYXJnaW4tdG9wOjFweDtwYWRkaW5nOjA7Ym9yZGVyOjBcIjtcblx0XHRkaXYuc3R5bGUuY3NzVGV4dCA9XG5cdFx0XHRcInBvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94O292ZXJmbG93OnNjcm9sbDtcIiArXG5cdFx0XHRcIm1hcmdpbjphdXRvO2JvcmRlcjoxcHg7cGFkZGluZzoxcHg7XCIgK1xuXHRcdFx0XCJ3aWR0aDo2MCU7dG9wOjElXCI7XG5cdFx0ZG9jdW1lbnRFbGVtZW50LmFwcGVuZENoaWxkKCBjb250YWluZXIgKS5hcHBlbmRDaGlsZCggZGl2ICk7XG5cblx0XHR2YXIgZGl2U3R5bGUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSggZGl2ICk7XG5cdFx0cGl4ZWxQb3NpdGlvblZhbCA9IGRpdlN0eWxlLnRvcCAhPT0gXCIxJVwiO1xuXG5cdFx0Ly8gU3VwcG9ydDogQW5kcm9pZCA0LjAgLSA0LjMgb25seSwgRmlyZWZveCA8PTMgLSA0NFxuXHRcdHJlbGlhYmxlTWFyZ2luTGVmdFZhbCA9IHJvdW5kUGl4ZWxNZWFzdXJlcyggZGl2U3R5bGUubWFyZ2luTGVmdCApID09PSAxMjtcblxuXHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQgNC4wIC0gNC4zIG9ubHksIFNhZmFyaSA8PTkuMSAtIDEwLjEsIGlPUyA8PTcuMCAtIDkuM1xuXHRcdC8vIFNvbWUgc3R5bGVzIGNvbWUgYmFjayB3aXRoIHBlcmNlbnRhZ2UgdmFsdWVzLCBldmVuIHRob3VnaCB0aGV5IHNob3VsZG4ndFxuXHRcdGRpdi5zdHlsZS5yaWdodCA9IFwiNjAlXCI7XG5cdFx0cGl4ZWxCb3hTdHlsZXNWYWwgPSByb3VuZFBpeGVsTWVhc3VyZXMoIGRpdlN0eWxlLnJpZ2h0ICkgPT09IDM2O1xuXG5cdFx0Ly8gU3VwcG9ydDogSUUgOSAtIDExIG9ubHlcblx0XHQvLyBEZXRlY3QgbWlzcmVwb3J0aW5nIG9mIGNvbnRlbnQgZGltZW5zaW9ucyBmb3IgYm94LXNpemluZzpib3JkZXItYm94IGVsZW1lbnRzXG5cdFx0Ym94U2l6aW5nUmVsaWFibGVWYWwgPSByb3VuZFBpeGVsTWVhc3VyZXMoIGRpdlN0eWxlLndpZHRoICkgPT09IDM2O1xuXG5cdFx0Ly8gU3VwcG9ydDogSUUgOSBvbmx5XG5cdFx0Ly8gRGV0ZWN0IG92ZXJmbG93OnNjcm9sbCBzY3Jld2luZXNzIChnaC0zNjk5KVxuXHRcdC8vIFN1cHBvcnQ6IENocm9tZSA8PTY0XG5cdFx0Ly8gRG9uJ3QgZ2V0IHRyaWNrZWQgd2hlbiB6b29tIGFmZmVjdHMgb2Zmc2V0V2lkdGggKGdoLTQwMjkpXG5cdFx0ZGl2LnN0eWxlLnBvc2l0aW9uID0gXCJhYnNvbHV0ZVwiO1xuXHRcdHNjcm9sbGJveFNpemVWYWwgPSByb3VuZFBpeGVsTWVhc3VyZXMoIGRpdi5vZmZzZXRXaWR0aCAvIDMgKSA9PT0gMTI7XG5cblx0XHRkb2N1bWVudEVsZW1lbnQucmVtb3ZlQ2hpbGQoIGNvbnRhaW5lciApO1xuXG5cdFx0Ly8gTnVsbGlmeSB0aGUgZGl2IHNvIGl0IHdvdWxkbid0IGJlIHN0b3JlZCBpbiB0aGUgbWVtb3J5IGFuZFxuXHRcdC8vIGl0IHdpbGwgYWxzbyBiZSBhIHNpZ24gdGhhdCBjaGVja3MgYWxyZWFkeSBwZXJmb3JtZWRcblx0XHRkaXYgPSBudWxsO1xuXHR9XG5cblx0ZnVuY3Rpb24gcm91bmRQaXhlbE1lYXN1cmVzKCBtZWFzdXJlICkge1xuXHRcdHJldHVybiBNYXRoLnJvdW5kKCBwYXJzZUZsb2F0KCBtZWFzdXJlICkgKTtcblx0fVxuXG5cdHZhciBwaXhlbFBvc2l0aW9uVmFsLCBib3hTaXppbmdSZWxpYWJsZVZhbCwgc2Nyb2xsYm94U2l6ZVZhbCwgcGl4ZWxCb3hTdHlsZXNWYWwsXG5cdFx0cmVsaWFibGVNYXJnaW5MZWZ0VmFsLFxuXHRcdGNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiZGl2XCIgKSxcblx0XHRkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImRpdlwiICk7XG5cblx0Ly8gRmluaXNoIGVhcmx5IGluIGxpbWl0ZWQgKG5vbi1icm93c2VyKSBlbnZpcm9ubWVudHNcblx0aWYgKCAhZGl2LnN0eWxlICkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdC8vIFN1cHBvcnQ6IElFIDw9OSAtIDExIG9ubHlcblx0Ly8gU3R5bGUgb2YgY2xvbmVkIGVsZW1lbnQgYWZmZWN0cyBzb3VyY2UgZWxlbWVudCBjbG9uZWQgKCM4OTA4KVxuXHRkaXYuc3R5bGUuYmFja2dyb3VuZENsaXAgPSBcImNvbnRlbnQtYm94XCI7XG5cdGRpdi5jbG9uZU5vZGUoIHRydWUgKS5zdHlsZS5iYWNrZ3JvdW5kQ2xpcCA9IFwiXCI7XG5cdHN1cHBvcnQuY2xlYXJDbG9uZVN0eWxlID0gZGl2LnN0eWxlLmJhY2tncm91bmRDbGlwID09PSBcImNvbnRlbnQtYm94XCI7XG5cblx0alF1ZXJ5LmV4dGVuZCggc3VwcG9ydCwge1xuXHRcdGJveFNpemluZ1JlbGlhYmxlOiBmdW5jdGlvbigpIHtcblx0XHRcdGNvbXB1dGVTdHlsZVRlc3RzKCk7XG5cdFx0XHRyZXR1cm4gYm94U2l6aW5nUmVsaWFibGVWYWw7XG5cdFx0fSxcblx0XHRwaXhlbEJveFN0eWxlczogZnVuY3Rpb24oKSB7XG5cdFx0XHRjb21wdXRlU3R5bGVUZXN0cygpO1xuXHRcdFx0cmV0dXJuIHBpeGVsQm94U3R5bGVzVmFsO1xuXHRcdH0sXG5cdFx0cGl4ZWxQb3NpdGlvbjogZnVuY3Rpb24oKSB7XG5cdFx0XHRjb21wdXRlU3R5bGVUZXN0cygpO1xuXHRcdFx0cmV0dXJuIHBpeGVsUG9zaXRpb25WYWw7XG5cdFx0fSxcblx0XHRyZWxpYWJsZU1hcmdpbkxlZnQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0Y29tcHV0ZVN0eWxlVGVzdHMoKTtcblx0XHRcdHJldHVybiByZWxpYWJsZU1hcmdpbkxlZnRWYWw7XG5cdFx0fSxcblx0XHRzY3JvbGxib3hTaXplOiBmdW5jdGlvbigpIHtcblx0XHRcdGNvbXB1dGVTdHlsZVRlc3RzKCk7XG5cdFx0XHRyZXR1cm4gc2Nyb2xsYm94U2l6ZVZhbDtcblx0XHR9XG5cdH0gKTtcbn0gKSgpO1xuXG5cbmZ1bmN0aW9uIGN1ckNTUyggZWxlbSwgbmFtZSwgY29tcHV0ZWQgKSB7XG5cdHZhciB3aWR0aCwgbWluV2lkdGgsIG1heFdpZHRoLCByZXQsXG5cblx0XHQvLyBTdXBwb3J0OiBGaXJlZm94IDUxK1xuXHRcdC8vIFJldHJpZXZpbmcgc3R5bGUgYmVmb3JlIGNvbXB1dGVkIHNvbWVob3dcblx0XHQvLyBmaXhlcyBhbiBpc3N1ZSB3aXRoIGdldHRpbmcgd3JvbmcgdmFsdWVzXG5cdFx0Ly8gb24gZGV0YWNoZWQgZWxlbWVudHNcblx0XHRzdHlsZSA9IGVsZW0uc3R5bGU7XG5cblx0Y29tcHV0ZWQgPSBjb21wdXRlZCB8fCBnZXRTdHlsZXMoIGVsZW0gKTtcblxuXHQvLyBnZXRQcm9wZXJ0eVZhbHVlIGlzIG5lZWRlZCBmb3I6XG5cdC8vICAgLmNzcygnZmlsdGVyJykgKElFIDkgb25seSwgIzEyNTM3KVxuXHQvLyAgIC5jc3MoJy0tY3VzdG9tUHJvcGVydHkpICgjMzE0NClcblx0aWYgKCBjb21wdXRlZCApIHtcblx0XHRyZXQgPSBjb21wdXRlZC5nZXRQcm9wZXJ0eVZhbHVlKCBuYW1lICkgfHwgY29tcHV0ZWRbIG5hbWUgXTtcblxuXHRcdGlmICggcmV0ID09PSBcIlwiICYmICFpc0F0dGFjaGVkKCBlbGVtICkgKSB7XG5cdFx0XHRyZXQgPSBqUXVlcnkuc3R5bGUoIGVsZW0sIG5hbWUgKTtcblx0XHR9XG5cblx0XHQvLyBBIHRyaWJ1dGUgdG8gdGhlIFwiYXdlc29tZSBoYWNrIGJ5IERlYW4gRWR3YXJkc1wiXG5cdFx0Ly8gQW5kcm9pZCBCcm93c2VyIHJldHVybnMgcGVyY2VudGFnZSBmb3Igc29tZSB2YWx1ZXMsXG5cdFx0Ly8gYnV0IHdpZHRoIHNlZW1zIHRvIGJlIHJlbGlhYmx5IHBpeGVscy5cblx0XHQvLyBUaGlzIGlzIGFnYWluc3QgdGhlIENTU09NIGRyYWZ0IHNwZWM6XG5cdFx0Ly8gaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL2Nzc29tLyNyZXNvbHZlZC12YWx1ZXNcblx0XHRpZiAoICFzdXBwb3J0LnBpeGVsQm94U3R5bGVzKCkgJiYgcm51bW5vbnB4LnRlc3QoIHJldCApICYmIHJib3hTdHlsZS50ZXN0KCBuYW1lICkgKSB7XG5cblx0XHRcdC8vIFJlbWVtYmVyIHRoZSBvcmlnaW5hbCB2YWx1ZXNcblx0XHRcdHdpZHRoID0gc3R5bGUud2lkdGg7XG5cdFx0XHRtaW5XaWR0aCA9IHN0eWxlLm1pbldpZHRoO1xuXHRcdFx0bWF4V2lkdGggPSBzdHlsZS5tYXhXaWR0aDtcblxuXHRcdFx0Ly8gUHV0IGluIHRoZSBuZXcgdmFsdWVzIHRvIGdldCBhIGNvbXB1dGVkIHZhbHVlIG91dFxuXHRcdFx0c3R5bGUubWluV2lkdGggPSBzdHlsZS5tYXhXaWR0aCA9IHN0eWxlLndpZHRoID0gcmV0O1xuXHRcdFx0cmV0ID0gY29tcHV0ZWQud2lkdGg7XG5cblx0XHRcdC8vIFJldmVydCB0aGUgY2hhbmdlZCB2YWx1ZXNcblx0XHRcdHN0eWxlLndpZHRoID0gd2lkdGg7XG5cdFx0XHRzdHlsZS5taW5XaWR0aCA9IG1pbldpZHRoO1xuXHRcdFx0c3R5bGUubWF4V2lkdGggPSBtYXhXaWR0aDtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gcmV0ICE9PSB1bmRlZmluZWQgP1xuXG5cdFx0Ly8gU3VwcG9ydDogSUUgPD05IC0gMTEgb25seVxuXHRcdC8vIElFIHJldHVybnMgekluZGV4IHZhbHVlIGFzIGFuIGludGVnZXIuXG5cdFx0cmV0ICsgXCJcIiA6XG5cdFx0cmV0O1xufVxuXG5cbmZ1bmN0aW9uIGFkZEdldEhvb2tJZiggY29uZGl0aW9uRm4sIGhvb2tGbiApIHtcblxuXHQvLyBEZWZpbmUgdGhlIGhvb2ssIHdlJ2xsIGNoZWNrIG9uIHRoZSBmaXJzdCBydW4gaWYgaXQncyByZWFsbHkgbmVlZGVkLlxuXHRyZXR1cm4ge1xuXHRcdGdldDogZnVuY3Rpb24oKSB7XG5cdFx0XHRpZiAoIGNvbmRpdGlvbkZuKCkgKSB7XG5cblx0XHRcdFx0Ly8gSG9vayBub3QgbmVlZGVkIChvciBpdCdzIG5vdCBwb3NzaWJsZSB0byB1c2UgaXQgZHVlXG5cdFx0XHRcdC8vIHRvIG1pc3NpbmcgZGVwZW5kZW5jeSksIHJlbW92ZSBpdC5cblx0XHRcdFx0ZGVsZXRlIHRoaXMuZ2V0O1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdC8vIEhvb2sgbmVlZGVkOyByZWRlZmluZSBpdCBzbyB0aGF0IHRoZSBzdXBwb3J0IHRlc3QgaXMgbm90IGV4ZWN1dGVkIGFnYWluLlxuXHRcdFx0cmV0dXJuICggdGhpcy5nZXQgPSBob29rRm4gKS5hcHBseSggdGhpcywgYXJndW1lbnRzICk7XG5cdFx0fVxuXHR9O1xufVxuXG5cbnZhciBjc3NQcmVmaXhlcyA9IFsgXCJXZWJraXRcIiwgXCJNb3pcIiwgXCJtc1wiIF0sXG5cdGVtcHR5U3R5bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImRpdlwiICkuc3R5bGUsXG5cdHZlbmRvclByb3BzID0ge307XG5cbi8vIFJldHVybiBhIHZlbmRvci1wcmVmaXhlZCBwcm9wZXJ0eSBvciB1bmRlZmluZWRcbmZ1bmN0aW9uIHZlbmRvclByb3BOYW1lKCBuYW1lICkge1xuXG5cdC8vIENoZWNrIGZvciB2ZW5kb3IgcHJlZml4ZWQgbmFtZXNcblx0dmFyIGNhcE5hbWUgPSBuYW1lWyAwIF0udG9VcHBlckNhc2UoKSArIG5hbWUuc2xpY2UoIDEgKSxcblx0XHRpID0gY3NzUHJlZml4ZXMubGVuZ3RoO1xuXG5cdHdoaWxlICggaS0tICkge1xuXHRcdG5hbWUgPSBjc3NQcmVmaXhlc1sgaSBdICsgY2FwTmFtZTtcblx0XHRpZiAoIG5hbWUgaW4gZW1wdHlTdHlsZSApIHtcblx0XHRcdHJldHVybiBuYW1lO1xuXHRcdH1cblx0fVxufVxuXG4vLyBSZXR1cm4gYSBwb3RlbnRpYWxseS1tYXBwZWQgalF1ZXJ5LmNzc1Byb3BzIG9yIHZlbmRvciBwcmVmaXhlZCBwcm9wZXJ0eVxuZnVuY3Rpb24gZmluYWxQcm9wTmFtZSggbmFtZSApIHtcblx0dmFyIGZpbmFsID0galF1ZXJ5LmNzc1Byb3BzWyBuYW1lIF0gfHwgdmVuZG9yUHJvcHNbIG5hbWUgXTtcblxuXHRpZiAoIGZpbmFsICkge1xuXHRcdHJldHVybiBmaW5hbDtcblx0fVxuXHRpZiAoIG5hbWUgaW4gZW1wdHlTdHlsZSApIHtcblx0XHRyZXR1cm4gbmFtZTtcblx0fVxuXHRyZXR1cm4gdmVuZG9yUHJvcHNbIG5hbWUgXSA9IHZlbmRvclByb3BOYW1lKCBuYW1lICkgfHwgbmFtZTtcbn1cblxuXG52YXJcblxuXHQvLyBTd2FwcGFibGUgaWYgZGlzcGxheSBpcyBub25lIG9yIHN0YXJ0cyB3aXRoIHRhYmxlXG5cdC8vIGV4Y2VwdCBcInRhYmxlXCIsIFwidGFibGUtY2VsbFwiLCBvciBcInRhYmxlLWNhcHRpb25cIlxuXHQvLyBTZWUgaGVyZSBmb3IgZGlzcGxheSB2YWx1ZXM6IGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvQ1NTL2Rpc3BsYXlcblx0cmRpc3BsYXlzd2FwID0gL14obm9uZXx0YWJsZSg/IS1jW2VhXSkuKykvLFxuXHRyY3VzdG9tUHJvcCA9IC9eLS0vLFxuXHRjc3NTaG93ID0geyBwb3NpdGlvbjogXCJhYnNvbHV0ZVwiLCB2aXNpYmlsaXR5OiBcImhpZGRlblwiLCBkaXNwbGF5OiBcImJsb2NrXCIgfSxcblx0Y3NzTm9ybWFsVHJhbnNmb3JtID0ge1xuXHRcdGxldHRlclNwYWNpbmc6IFwiMFwiLFxuXHRcdGZvbnRXZWlnaHQ6IFwiNDAwXCJcblx0fTtcblxuZnVuY3Rpb24gc2V0UG9zaXRpdmVOdW1iZXIoIGVsZW0sIHZhbHVlLCBzdWJ0cmFjdCApIHtcblxuXHQvLyBBbnkgcmVsYXRpdmUgKCsvLSkgdmFsdWVzIGhhdmUgYWxyZWFkeSBiZWVuXG5cdC8vIG5vcm1hbGl6ZWQgYXQgdGhpcyBwb2ludFxuXHR2YXIgbWF0Y2hlcyA9IHJjc3NOdW0uZXhlYyggdmFsdWUgKTtcblx0cmV0dXJuIG1hdGNoZXMgP1xuXG5cdFx0Ly8gR3VhcmQgYWdhaW5zdCB1bmRlZmluZWQgXCJzdWJ0cmFjdFwiLCBlLmcuLCB3aGVuIHVzZWQgYXMgaW4gY3NzSG9va3Ncblx0XHRNYXRoLm1heCggMCwgbWF0Y2hlc1sgMiBdIC0gKCBzdWJ0cmFjdCB8fCAwICkgKSArICggbWF0Y2hlc1sgMyBdIHx8IFwicHhcIiApIDpcblx0XHR2YWx1ZTtcbn1cblxuZnVuY3Rpb24gYm94TW9kZWxBZGp1c3RtZW50KCBlbGVtLCBkaW1lbnNpb24sIGJveCwgaXNCb3JkZXJCb3gsIHN0eWxlcywgY29tcHV0ZWRWYWwgKSB7XG5cdHZhciBpID0gZGltZW5zaW9uID09PSBcIndpZHRoXCIgPyAxIDogMCxcblx0XHRleHRyYSA9IDAsXG5cdFx0ZGVsdGEgPSAwO1xuXG5cdC8vIEFkanVzdG1lbnQgbWF5IG5vdCBiZSBuZWNlc3Nhcnlcblx0aWYgKCBib3ggPT09ICggaXNCb3JkZXJCb3ggPyBcImJvcmRlclwiIDogXCJjb250ZW50XCIgKSApIHtcblx0XHRyZXR1cm4gMDtcblx0fVxuXG5cdGZvciAoIDsgaSA8IDQ7IGkgKz0gMiApIHtcblxuXHRcdC8vIEJvdGggYm94IG1vZGVscyBleGNsdWRlIG1hcmdpblxuXHRcdGlmICggYm94ID09PSBcIm1hcmdpblwiICkge1xuXHRcdFx0ZGVsdGEgKz0galF1ZXJ5LmNzcyggZWxlbSwgYm94ICsgY3NzRXhwYW5kWyBpIF0sIHRydWUsIHN0eWxlcyApO1xuXHRcdH1cblxuXHRcdC8vIElmIHdlIGdldCBoZXJlIHdpdGggYSBjb250ZW50LWJveCwgd2UncmUgc2Vla2luZyBcInBhZGRpbmdcIiBvciBcImJvcmRlclwiIG9yIFwibWFyZ2luXCJcblx0XHRpZiAoICFpc0JvcmRlckJveCApIHtcblxuXHRcdFx0Ly8gQWRkIHBhZGRpbmdcblx0XHRcdGRlbHRhICs9IGpRdWVyeS5jc3MoIGVsZW0sIFwicGFkZGluZ1wiICsgY3NzRXhwYW5kWyBpIF0sIHRydWUsIHN0eWxlcyApO1xuXG5cdFx0XHQvLyBGb3IgXCJib3JkZXJcIiBvciBcIm1hcmdpblwiLCBhZGQgYm9yZGVyXG5cdFx0XHRpZiAoIGJveCAhPT0gXCJwYWRkaW5nXCIgKSB7XG5cdFx0XHRcdGRlbHRhICs9IGpRdWVyeS5jc3MoIGVsZW0sIFwiYm9yZGVyXCIgKyBjc3NFeHBhbmRbIGkgXSArIFwiV2lkdGhcIiwgdHJ1ZSwgc3R5bGVzICk7XG5cblx0XHRcdC8vIEJ1dCBzdGlsbCBrZWVwIHRyYWNrIG9mIGl0IG90aGVyd2lzZVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZXh0cmEgKz0galF1ZXJ5LmNzcyggZWxlbSwgXCJib3JkZXJcIiArIGNzc0V4cGFuZFsgaSBdICsgXCJXaWR0aFwiLCB0cnVlLCBzdHlsZXMgKTtcblx0XHRcdH1cblxuXHRcdC8vIElmIHdlIGdldCBoZXJlIHdpdGggYSBib3JkZXItYm94IChjb250ZW50ICsgcGFkZGluZyArIGJvcmRlciksIHdlJ3JlIHNlZWtpbmcgXCJjb250ZW50XCIgb3Jcblx0XHQvLyBcInBhZGRpbmdcIiBvciBcIm1hcmdpblwiXG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0Ly8gRm9yIFwiY29udGVudFwiLCBzdWJ0cmFjdCBwYWRkaW5nXG5cdFx0XHRpZiAoIGJveCA9PT0gXCJjb250ZW50XCIgKSB7XG5cdFx0XHRcdGRlbHRhIC09IGpRdWVyeS5jc3MoIGVsZW0sIFwicGFkZGluZ1wiICsgY3NzRXhwYW5kWyBpIF0sIHRydWUsIHN0eWxlcyApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBGb3IgXCJjb250ZW50XCIgb3IgXCJwYWRkaW5nXCIsIHN1YnRyYWN0IGJvcmRlclxuXHRcdFx0aWYgKCBib3ggIT09IFwibWFyZ2luXCIgKSB7XG5cdFx0XHRcdGRlbHRhIC09IGpRdWVyeS5jc3MoIGVsZW0sIFwiYm9yZGVyXCIgKyBjc3NFeHBhbmRbIGkgXSArIFwiV2lkdGhcIiwgdHJ1ZSwgc3R5bGVzICk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gQWNjb3VudCBmb3IgcG9zaXRpdmUgY29udGVudC1ib3ggc2Nyb2xsIGd1dHRlciB3aGVuIHJlcXVlc3RlZCBieSBwcm92aWRpbmcgY29tcHV0ZWRWYWxcblx0aWYgKCAhaXNCb3JkZXJCb3ggJiYgY29tcHV0ZWRWYWwgPj0gMCApIHtcblxuXHRcdC8vIG9mZnNldFdpZHRoL29mZnNldEhlaWdodCBpcyBhIHJvdW5kZWQgc3VtIG9mIGNvbnRlbnQsIHBhZGRpbmcsIHNjcm9sbCBndXR0ZXIsIGFuZCBib3JkZXJcblx0XHQvLyBBc3N1bWluZyBpbnRlZ2VyIHNjcm9sbCBndXR0ZXIsIHN1YnRyYWN0IHRoZSByZXN0IGFuZCByb3VuZCBkb3duXG5cdFx0ZGVsdGEgKz0gTWF0aC5tYXgoIDAsIE1hdGguY2VpbChcblx0XHRcdGVsZW1bIFwib2Zmc2V0XCIgKyBkaW1lbnNpb25bIDAgXS50b1VwcGVyQ2FzZSgpICsgZGltZW5zaW9uLnNsaWNlKCAxICkgXSAtXG5cdFx0XHRjb21wdXRlZFZhbCAtXG5cdFx0XHRkZWx0YSAtXG5cdFx0XHRleHRyYSAtXG5cdFx0XHQwLjVcblxuXHRcdC8vIElmIG9mZnNldFdpZHRoL29mZnNldEhlaWdodCBpcyB1bmtub3duLCB0aGVuIHdlIGNhbid0IGRldGVybWluZSBjb250ZW50LWJveCBzY3JvbGwgZ3V0dGVyXG5cdFx0Ly8gVXNlIGFuIGV4cGxpY2l0IHplcm8gdG8gYXZvaWQgTmFOIChnaC0zOTY0KVxuXHRcdCkgKSB8fCAwO1xuXHR9XG5cblx0cmV0dXJuIGRlbHRhO1xufVxuXG5mdW5jdGlvbiBnZXRXaWR0aE9ySGVpZ2h0KCBlbGVtLCBkaW1lbnNpb24sIGV4dHJhICkge1xuXG5cdC8vIFN0YXJ0IHdpdGggY29tcHV0ZWQgc3R5bGVcblx0dmFyIHN0eWxlcyA9IGdldFN0eWxlcyggZWxlbSApLFxuXG5cdFx0Ly8gVG8gYXZvaWQgZm9yY2luZyBhIHJlZmxvdywgb25seSBmZXRjaCBib3hTaXppbmcgaWYgd2UgbmVlZCBpdCAoZ2gtNDMyMikuXG5cdFx0Ly8gRmFrZSBjb250ZW50LWJveCB1bnRpbCB3ZSBrbm93IGl0J3MgbmVlZGVkIHRvIGtub3cgdGhlIHRydWUgdmFsdWUuXG5cdFx0Ym94U2l6aW5nTmVlZGVkID0gIXN1cHBvcnQuYm94U2l6aW5nUmVsaWFibGUoKSB8fCBleHRyYSxcblx0XHRpc0JvcmRlckJveCA9IGJveFNpemluZ05lZWRlZCAmJlxuXHRcdFx0alF1ZXJ5LmNzcyggZWxlbSwgXCJib3hTaXppbmdcIiwgZmFsc2UsIHN0eWxlcyApID09PSBcImJvcmRlci1ib3hcIixcblx0XHR2YWx1ZUlzQm9yZGVyQm94ID0gaXNCb3JkZXJCb3gsXG5cblx0XHR2YWwgPSBjdXJDU1MoIGVsZW0sIGRpbWVuc2lvbiwgc3R5bGVzICksXG5cdFx0b2Zmc2V0UHJvcCA9IFwib2Zmc2V0XCIgKyBkaW1lbnNpb25bIDAgXS50b1VwcGVyQ2FzZSgpICsgZGltZW5zaW9uLnNsaWNlKCAxICk7XG5cblx0Ly8gU3VwcG9ydDogRmlyZWZveCA8PTU0XG5cdC8vIFJldHVybiBhIGNvbmZvdW5kaW5nIG5vbi1waXhlbCB2YWx1ZSBvciBmZWlnbiBpZ25vcmFuY2UsIGFzIGFwcHJvcHJpYXRlLlxuXHRpZiAoIHJudW1ub25weC50ZXN0KCB2YWwgKSApIHtcblx0XHRpZiAoICFleHRyYSApIHtcblx0XHRcdHJldHVybiB2YWw7XG5cdFx0fVxuXHRcdHZhbCA9IFwiYXV0b1wiO1xuXHR9XG5cblxuXHQvLyBGYWxsIGJhY2sgdG8gb2Zmc2V0V2lkdGgvb2Zmc2V0SGVpZ2h0IHdoZW4gdmFsdWUgaXMgXCJhdXRvXCJcblx0Ly8gVGhpcyBoYXBwZW5zIGZvciBpbmxpbmUgZWxlbWVudHMgd2l0aCBubyBleHBsaWNpdCBzZXR0aW5nIChnaC0zNTcxKVxuXHQvLyBTdXBwb3J0OiBBbmRyb2lkIDw9NC4xIC0gNC4zIG9ubHlcblx0Ly8gQWxzbyB1c2Ugb2Zmc2V0V2lkdGgvb2Zmc2V0SGVpZ2h0IGZvciBtaXNyZXBvcnRlZCBpbmxpbmUgZGltZW5zaW9ucyAoZ2gtMzYwMilcblx0Ly8gU3VwcG9ydDogSUUgOS0xMSBvbmx5XG5cdC8vIEFsc28gdXNlIG9mZnNldFdpZHRoL29mZnNldEhlaWdodCBmb3Igd2hlbiBib3ggc2l6aW5nIGlzIHVucmVsaWFibGVcblx0Ly8gV2UgdXNlIGdldENsaWVudFJlY3RzKCkgdG8gY2hlY2sgZm9yIGhpZGRlbi9kaXNjb25uZWN0ZWQuXG5cdC8vIEluIHRob3NlIGNhc2VzLCB0aGUgY29tcHV0ZWQgdmFsdWUgY2FuIGJlIHRydXN0ZWQgdG8gYmUgYm9yZGVyLWJveFxuXHRpZiAoICggIXN1cHBvcnQuYm94U2l6aW5nUmVsaWFibGUoKSAmJiBpc0JvcmRlckJveCB8fFxuXHRcdHZhbCA9PT0gXCJhdXRvXCIgfHxcblx0XHQhcGFyc2VGbG9hdCggdmFsICkgJiYgalF1ZXJ5LmNzcyggZWxlbSwgXCJkaXNwbGF5XCIsIGZhbHNlLCBzdHlsZXMgKSA9PT0gXCJpbmxpbmVcIiApICYmXG5cdFx0ZWxlbS5nZXRDbGllbnRSZWN0cygpLmxlbmd0aCApIHtcblxuXHRcdGlzQm9yZGVyQm94ID0galF1ZXJ5LmNzcyggZWxlbSwgXCJib3hTaXppbmdcIiwgZmFsc2UsIHN0eWxlcyApID09PSBcImJvcmRlci1ib3hcIjtcblxuXHRcdC8vIFdoZXJlIGF2YWlsYWJsZSwgb2Zmc2V0V2lkdGgvb2Zmc2V0SGVpZ2h0IGFwcHJveGltYXRlIGJvcmRlciBib3ggZGltZW5zaW9ucy5cblx0XHQvLyBXaGVyZSBub3QgYXZhaWxhYmxlIChlLmcuLCBTVkcpLCBhc3N1bWUgdW5yZWxpYWJsZSBib3gtc2l6aW5nIGFuZCBpbnRlcnByZXQgdGhlXG5cdFx0Ly8gcmV0cmlldmVkIHZhbHVlIGFzIGEgY29udGVudCBib3ggZGltZW5zaW9uLlxuXHRcdHZhbHVlSXNCb3JkZXJCb3ggPSBvZmZzZXRQcm9wIGluIGVsZW07XG5cdFx0aWYgKCB2YWx1ZUlzQm9yZGVyQm94ICkge1xuXHRcdFx0dmFsID0gZWxlbVsgb2Zmc2V0UHJvcCBdO1xuXHRcdH1cblx0fVxuXG5cdC8vIE5vcm1hbGl6ZSBcIlwiIGFuZCBhdXRvXG5cdHZhbCA9IHBhcnNlRmxvYXQoIHZhbCApIHx8IDA7XG5cblx0Ly8gQWRqdXN0IGZvciB0aGUgZWxlbWVudCdzIGJveCBtb2RlbFxuXHRyZXR1cm4gKCB2YWwgK1xuXHRcdGJveE1vZGVsQWRqdXN0bWVudChcblx0XHRcdGVsZW0sXG5cdFx0XHRkaW1lbnNpb24sXG5cdFx0XHRleHRyYSB8fCAoIGlzQm9yZGVyQm94ID8gXCJib3JkZXJcIiA6IFwiY29udGVudFwiICksXG5cdFx0XHR2YWx1ZUlzQm9yZGVyQm94LFxuXHRcdFx0c3R5bGVzLFxuXG5cdFx0XHQvLyBQcm92aWRlIHRoZSBjdXJyZW50IGNvbXB1dGVkIHNpemUgdG8gcmVxdWVzdCBzY3JvbGwgZ3V0dGVyIGNhbGN1bGF0aW9uIChnaC0zNTg5KVxuXHRcdFx0dmFsXG5cdFx0KVxuXHQpICsgXCJweFwiO1xufVxuXG5qUXVlcnkuZXh0ZW5kKCB7XG5cblx0Ly8gQWRkIGluIHN0eWxlIHByb3BlcnR5IGhvb2tzIGZvciBvdmVycmlkaW5nIHRoZSBkZWZhdWx0XG5cdC8vIGJlaGF2aW9yIG9mIGdldHRpbmcgYW5kIHNldHRpbmcgYSBzdHlsZSBwcm9wZXJ0eVxuXHRjc3NIb29rczoge1xuXHRcdG9wYWNpdHk6IHtcblx0XHRcdGdldDogZnVuY3Rpb24oIGVsZW0sIGNvbXB1dGVkICkge1xuXHRcdFx0XHRpZiAoIGNvbXB1dGVkICkge1xuXG5cdFx0XHRcdFx0Ly8gV2Ugc2hvdWxkIGFsd2F5cyBnZXQgYSBudW1iZXIgYmFjayBmcm9tIG9wYWNpdHlcblx0XHRcdFx0XHR2YXIgcmV0ID0gY3VyQ1NTKCBlbGVtLCBcIm9wYWNpdHlcIiApO1xuXHRcdFx0XHRcdHJldHVybiByZXQgPT09IFwiXCIgPyBcIjFcIiA6IHJldDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fSxcblxuXHQvLyBEb24ndCBhdXRvbWF0aWNhbGx5IGFkZCBcInB4XCIgdG8gdGhlc2UgcG9zc2libHktdW5pdGxlc3MgcHJvcGVydGllc1xuXHRjc3NOdW1iZXI6IHtcblx0XHRcImFuaW1hdGlvbkl0ZXJhdGlvbkNvdW50XCI6IHRydWUsXG5cdFx0XCJjb2x1bW5Db3VudFwiOiB0cnVlLFxuXHRcdFwiZmlsbE9wYWNpdHlcIjogdHJ1ZSxcblx0XHRcImZsZXhHcm93XCI6IHRydWUsXG5cdFx0XCJmbGV4U2hyaW5rXCI6IHRydWUsXG5cdFx0XCJmb250V2VpZ2h0XCI6IHRydWUsXG5cdFx0XCJncmlkQXJlYVwiOiB0cnVlLFxuXHRcdFwiZ3JpZENvbHVtblwiOiB0cnVlLFxuXHRcdFwiZ3JpZENvbHVtbkVuZFwiOiB0cnVlLFxuXHRcdFwiZ3JpZENvbHVtblN0YXJ0XCI6IHRydWUsXG5cdFx0XCJncmlkUm93XCI6IHRydWUsXG5cdFx0XCJncmlkUm93RW5kXCI6IHRydWUsXG5cdFx0XCJncmlkUm93U3RhcnRcIjogdHJ1ZSxcblx0XHRcImxpbmVIZWlnaHRcIjogdHJ1ZSxcblx0XHRcIm9wYWNpdHlcIjogdHJ1ZSxcblx0XHRcIm9yZGVyXCI6IHRydWUsXG5cdFx0XCJvcnBoYW5zXCI6IHRydWUsXG5cdFx0XCJ3aWRvd3NcIjogdHJ1ZSxcblx0XHRcInpJbmRleFwiOiB0cnVlLFxuXHRcdFwiem9vbVwiOiB0cnVlXG5cdH0sXG5cblx0Ly8gQWRkIGluIHByb3BlcnRpZXMgd2hvc2UgbmFtZXMgeW91IHdpc2ggdG8gZml4IGJlZm9yZVxuXHQvLyBzZXR0aW5nIG9yIGdldHRpbmcgdGhlIHZhbHVlXG5cdGNzc1Byb3BzOiB7fSxcblxuXHQvLyBHZXQgYW5kIHNldCB0aGUgc3R5bGUgcHJvcGVydHkgb24gYSBET00gTm9kZVxuXHRzdHlsZTogZnVuY3Rpb24oIGVsZW0sIG5hbWUsIHZhbHVlLCBleHRyYSApIHtcblxuXHRcdC8vIERvbid0IHNldCBzdHlsZXMgb24gdGV4dCBhbmQgY29tbWVudCBub2Rlc1xuXHRcdGlmICggIWVsZW0gfHwgZWxlbS5ub2RlVHlwZSA9PT0gMyB8fCBlbGVtLm5vZGVUeXBlID09PSA4IHx8ICFlbGVtLnN0eWxlICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIE1ha2Ugc3VyZSB0aGF0IHdlJ3JlIHdvcmtpbmcgd2l0aCB0aGUgcmlnaHQgbmFtZVxuXHRcdHZhciByZXQsIHR5cGUsIGhvb2tzLFxuXHRcdFx0b3JpZ05hbWUgPSBjYW1lbENhc2UoIG5hbWUgKSxcblx0XHRcdGlzQ3VzdG9tUHJvcCA9IHJjdXN0b21Qcm9wLnRlc3QoIG5hbWUgKSxcblx0XHRcdHN0eWxlID0gZWxlbS5zdHlsZTtcblxuXHRcdC8vIE1ha2Ugc3VyZSB0aGF0IHdlJ3JlIHdvcmtpbmcgd2l0aCB0aGUgcmlnaHQgbmFtZS4gV2UgZG9uJ3Rcblx0XHQvLyB3YW50IHRvIHF1ZXJ5IHRoZSB2YWx1ZSBpZiBpdCBpcyBhIENTUyBjdXN0b20gcHJvcGVydHlcblx0XHQvLyBzaW5jZSB0aGV5IGFyZSB1c2VyLWRlZmluZWQuXG5cdFx0aWYgKCAhaXNDdXN0b21Qcm9wICkge1xuXHRcdFx0bmFtZSA9IGZpbmFsUHJvcE5hbWUoIG9yaWdOYW1lICk7XG5cdFx0fVxuXG5cdFx0Ly8gR2V0cyBob29rIGZvciB0aGUgcHJlZml4ZWQgdmVyc2lvbiwgdGhlbiB1bnByZWZpeGVkIHZlcnNpb25cblx0XHRob29rcyA9IGpRdWVyeS5jc3NIb29rc1sgbmFtZSBdIHx8IGpRdWVyeS5jc3NIb29rc1sgb3JpZ05hbWUgXTtcblxuXHRcdC8vIENoZWNrIGlmIHdlJ3JlIHNldHRpbmcgYSB2YWx1ZVxuXHRcdGlmICggdmFsdWUgIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdHR5cGUgPSB0eXBlb2YgdmFsdWU7XG5cblx0XHRcdC8vIENvbnZlcnQgXCIrPVwiIG9yIFwiLT1cIiB0byByZWxhdGl2ZSBudW1iZXJzICgjNzM0NSlcblx0XHRcdGlmICggdHlwZSA9PT0gXCJzdHJpbmdcIiAmJiAoIHJldCA9IHJjc3NOdW0uZXhlYyggdmFsdWUgKSApICYmIHJldFsgMSBdICkge1xuXHRcdFx0XHR2YWx1ZSA9IGFkanVzdENTUyggZWxlbSwgbmFtZSwgcmV0ICk7XG5cblx0XHRcdFx0Ly8gRml4ZXMgYnVnICM5MjM3XG5cdFx0XHRcdHR5cGUgPSBcIm51bWJlclwiO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBNYWtlIHN1cmUgdGhhdCBudWxsIGFuZCBOYU4gdmFsdWVzIGFyZW4ndCBzZXQgKCM3MTE2KVxuXHRcdFx0aWYgKCB2YWx1ZSA9PSBudWxsIHx8IHZhbHVlICE9PSB2YWx1ZSApIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBJZiBhIG51bWJlciB3YXMgcGFzc2VkIGluLCBhZGQgdGhlIHVuaXQgKGV4Y2VwdCBmb3IgY2VydGFpbiBDU1MgcHJvcGVydGllcylcblx0XHRcdC8vIFRoZSBpc0N1c3RvbVByb3AgY2hlY2sgY2FuIGJlIHJlbW92ZWQgaW4galF1ZXJ5IDQuMCB3aGVuIHdlIG9ubHkgYXV0by1hcHBlbmRcblx0XHRcdC8vIFwicHhcIiB0byBhIGZldyBoYXJkY29kZWQgdmFsdWVzLlxuXHRcdFx0aWYgKCB0eXBlID09PSBcIm51bWJlclwiICYmICFpc0N1c3RvbVByb3AgKSB7XG5cdFx0XHRcdHZhbHVlICs9IHJldCAmJiByZXRbIDMgXSB8fCAoIGpRdWVyeS5jc3NOdW1iZXJbIG9yaWdOYW1lIF0gPyBcIlwiIDogXCJweFwiICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIGJhY2tncm91bmQtKiBwcm9wcyBhZmZlY3Qgb3JpZ2luYWwgY2xvbmUncyB2YWx1ZXNcblx0XHRcdGlmICggIXN1cHBvcnQuY2xlYXJDbG9uZVN0eWxlICYmIHZhbHVlID09PSBcIlwiICYmIG5hbWUuaW5kZXhPZiggXCJiYWNrZ3JvdW5kXCIgKSA9PT0gMCApIHtcblx0XHRcdFx0c3R5bGVbIG5hbWUgXSA9IFwiaW5oZXJpdFwiO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBJZiBhIGhvb2sgd2FzIHByb3ZpZGVkLCB1c2UgdGhhdCB2YWx1ZSwgb3RoZXJ3aXNlIGp1c3Qgc2V0IHRoZSBzcGVjaWZpZWQgdmFsdWVcblx0XHRcdGlmICggIWhvb2tzIHx8ICEoIFwic2V0XCIgaW4gaG9va3MgKSB8fFxuXHRcdFx0XHQoIHZhbHVlID0gaG9va3Muc2V0KCBlbGVtLCB2YWx1ZSwgZXh0cmEgKSApICE9PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdFx0aWYgKCBpc0N1c3RvbVByb3AgKSB7XG5cdFx0XHRcdFx0c3R5bGUuc2V0UHJvcGVydHkoIG5hbWUsIHZhbHVlICk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0c3R5bGVbIG5hbWUgXSA9IHZhbHVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHR9IGVsc2Uge1xuXG5cdFx0XHQvLyBJZiBhIGhvb2sgd2FzIHByb3ZpZGVkIGdldCB0aGUgbm9uLWNvbXB1dGVkIHZhbHVlIGZyb20gdGhlcmVcblx0XHRcdGlmICggaG9va3MgJiYgXCJnZXRcIiBpbiBob29rcyAmJlxuXHRcdFx0XHQoIHJldCA9IGhvb2tzLmdldCggZWxlbSwgZmFsc2UsIGV4dHJhICkgKSAhPT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRcdHJldHVybiByZXQ7XG5cdFx0XHR9XG5cblx0XHRcdC8vIE90aGVyd2lzZSBqdXN0IGdldCB0aGUgdmFsdWUgZnJvbSB0aGUgc3R5bGUgb2JqZWN0XG5cdFx0XHRyZXR1cm4gc3R5bGVbIG5hbWUgXTtcblx0XHR9XG5cdH0sXG5cblx0Y3NzOiBmdW5jdGlvbiggZWxlbSwgbmFtZSwgZXh0cmEsIHN0eWxlcyApIHtcblx0XHR2YXIgdmFsLCBudW0sIGhvb2tzLFxuXHRcdFx0b3JpZ05hbWUgPSBjYW1lbENhc2UoIG5hbWUgKSxcblx0XHRcdGlzQ3VzdG9tUHJvcCA9IHJjdXN0b21Qcm9wLnRlc3QoIG5hbWUgKTtcblxuXHRcdC8vIE1ha2Ugc3VyZSB0aGF0IHdlJ3JlIHdvcmtpbmcgd2l0aCB0aGUgcmlnaHQgbmFtZS4gV2UgZG9uJ3Rcblx0XHQvLyB3YW50IHRvIG1vZGlmeSB0aGUgdmFsdWUgaWYgaXQgaXMgYSBDU1MgY3VzdG9tIHByb3BlcnR5XG5cdFx0Ly8gc2luY2UgdGhleSBhcmUgdXNlci1kZWZpbmVkLlxuXHRcdGlmICggIWlzQ3VzdG9tUHJvcCApIHtcblx0XHRcdG5hbWUgPSBmaW5hbFByb3BOYW1lKCBvcmlnTmFtZSApO1xuXHRcdH1cblxuXHRcdC8vIFRyeSBwcmVmaXhlZCBuYW1lIGZvbGxvd2VkIGJ5IHRoZSB1bnByZWZpeGVkIG5hbWVcblx0XHRob29rcyA9IGpRdWVyeS5jc3NIb29rc1sgbmFtZSBdIHx8IGpRdWVyeS5jc3NIb29rc1sgb3JpZ05hbWUgXTtcblxuXHRcdC8vIElmIGEgaG9vayB3YXMgcHJvdmlkZWQgZ2V0IHRoZSBjb21wdXRlZCB2YWx1ZSBmcm9tIHRoZXJlXG5cdFx0aWYgKCBob29rcyAmJiBcImdldFwiIGluIGhvb2tzICkge1xuXHRcdFx0dmFsID0gaG9va3MuZ2V0KCBlbGVtLCB0cnVlLCBleHRyYSApO1xuXHRcdH1cblxuXHRcdC8vIE90aGVyd2lzZSwgaWYgYSB3YXkgdG8gZ2V0IHRoZSBjb21wdXRlZCB2YWx1ZSBleGlzdHMsIHVzZSB0aGF0XG5cdFx0aWYgKCB2YWwgPT09IHVuZGVmaW5lZCApIHtcblx0XHRcdHZhbCA9IGN1ckNTUyggZWxlbSwgbmFtZSwgc3R5bGVzICk7XG5cdFx0fVxuXG5cdFx0Ly8gQ29udmVydCBcIm5vcm1hbFwiIHRvIGNvbXB1dGVkIHZhbHVlXG5cdFx0aWYgKCB2YWwgPT09IFwibm9ybWFsXCIgJiYgbmFtZSBpbiBjc3NOb3JtYWxUcmFuc2Zvcm0gKSB7XG5cdFx0XHR2YWwgPSBjc3NOb3JtYWxUcmFuc2Zvcm1bIG5hbWUgXTtcblx0XHR9XG5cblx0XHQvLyBNYWtlIG51bWVyaWMgaWYgZm9yY2VkIG9yIGEgcXVhbGlmaWVyIHdhcyBwcm92aWRlZCBhbmQgdmFsIGxvb2tzIG51bWVyaWNcblx0XHRpZiAoIGV4dHJhID09PSBcIlwiIHx8IGV4dHJhICkge1xuXHRcdFx0bnVtID0gcGFyc2VGbG9hdCggdmFsICk7XG5cdFx0XHRyZXR1cm4gZXh0cmEgPT09IHRydWUgfHwgaXNGaW5pdGUoIG51bSApID8gbnVtIHx8IDAgOiB2YWw7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHZhbDtcblx0fVxufSApO1xuXG5qUXVlcnkuZWFjaCggWyBcImhlaWdodFwiLCBcIndpZHRoXCIgXSwgZnVuY3Rpb24oIGksIGRpbWVuc2lvbiApIHtcblx0alF1ZXJ5LmNzc0hvb2tzWyBkaW1lbnNpb24gXSA9IHtcblx0XHRnZXQ6IGZ1bmN0aW9uKCBlbGVtLCBjb21wdXRlZCwgZXh0cmEgKSB7XG5cdFx0XHRpZiAoIGNvbXB1dGVkICkge1xuXG5cdFx0XHRcdC8vIENlcnRhaW4gZWxlbWVudHMgY2FuIGhhdmUgZGltZW5zaW9uIGluZm8gaWYgd2UgaW52aXNpYmx5IHNob3cgdGhlbVxuXHRcdFx0XHQvLyBidXQgaXQgbXVzdCBoYXZlIGEgY3VycmVudCBkaXNwbGF5IHN0eWxlIHRoYXQgd291bGQgYmVuZWZpdFxuXHRcdFx0XHRyZXR1cm4gcmRpc3BsYXlzd2FwLnRlc3QoIGpRdWVyeS5jc3MoIGVsZW0sIFwiZGlzcGxheVwiICkgKSAmJlxuXG5cdFx0XHRcdFx0Ly8gU3VwcG9ydDogU2FmYXJpIDgrXG5cdFx0XHRcdFx0Ly8gVGFibGUgY29sdW1ucyBpbiBTYWZhcmkgaGF2ZSBub24temVybyBvZmZzZXRXaWR0aCAmIHplcm9cblx0XHRcdFx0XHQvLyBnZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCB1bmxlc3MgZGlzcGxheSBpcyBjaGFuZ2VkLlxuXHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDw9MTEgb25seVxuXHRcdFx0XHRcdC8vIFJ1bm5pbmcgZ2V0Qm91bmRpbmdDbGllbnRSZWN0IG9uIGEgZGlzY29ubmVjdGVkIG5vZGVcblx0XHRcdFx0XHQvLyBpbiBJRSB0aHJvd3MgYW4gZXJyb3IuXG5cdFx0XHRcdFx0KCAhZWxlbS5nZXRDbGllbnRSZWN0cygpLmxlbmd0aCB8fCAhZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCApID9cblx0XHRcdFx0XHRcdHN3YXAoIGVsZW0sIGNzc1Nob3csIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gZ2V0V2lkdGhPckhlaWdodCggZWxlbSwgZGltZW5zaW9uLCBleHRyYSApO1xuXHRcdFx0XHRcdFx0fSApIDpcblx0XHRcdFx0XHRcdGdldFdpZHRoT3JIZWlnaHQoIGVsZW0sIGRpbWVuc2lvbiwgZXh0cmEgKTtcblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0c2V0OiBmdW5jdGlvbiggZWxlbSwgdmFsdWUsIGV4dHJhICkge1xuXHRcdFx0dmFyIG1hdGNoZXMsXG5cdFx0XHRcdHN0eWxlcyA9IGdldFN0eWxlcyggZWxlbSApLFxuXG5cdFx0XHRcdC8vIE9ubHkgcmVhZCBzdHlsZXMucG9zaXRpb24gaWYgdGhlIHRlc3QgaGFzIGEgY2hhbmNlIHRvIGZhaWxcblx0XHRcdFx0Ly8gdG8gYXZvaWQgZm9yY2luZyBhIHJlZmxvdy5cblx0XHRcdFx0c2Nyb2xsYm94U2l6ZUJ1Z2d5ID0gIXN1cHBvcnQuc2Nyb2xsYm94U2l6ZSgpICYmXG5cdFx0XHRcdFx0c3R5bGVzLnBvc2l0aW9uID09PSBcImFic29sdXRlXCIsXG5cblx0XHRcdFx0Ly8gVG8gYXZvaWQgZm9yY2luZyBhIHJlZmxvdywgb25seSBmZXRjaCBib3hTaXppbmcgaWYgd2UgbmVlZCBpdCAoZ2gtMzk5MSlcblx0XHRcdFx0Ym94U2l6aW5nTmVlZGVkID0gc2Nyb2xsYm94U2l6ZUJ1Z2d5IHx8IGV4dHJhLFxuXHRcdFx0XHRpc0JvcmRlckJveCA9IGJveFNpemluZ05lZWRlZCAmJlxuXHRcdFx0XHRcdGpRdWVyeS5jc3MoIGVsZW0sIFwiYm94U2l6aW5nXCIsIGZhbHNlLCBzdHlsZXMgKSA9PT0gXCJib3JkZXItYm94XCIsXG5cdFx0XHRcdHN1YnRyYWN0ID0gZXh0cmEgP1xuXHRcdFx0XHRcdGJveE1vZGVsQWRqdXN0bWVudChcblx0XHRcdFx0XHRcdGVsZW0sXG5cdFx0XHRcdFx0XHRkaW1lbnNpb24sXG5cdFx0XHRcdFx0XHRleHRyYSxcblx0XHRcdFx0XHRcdGlzQm9yZGVyQm94LFxuXHRcdFx0XHRcdFx0c3R5bGVzXG5cdFx0XHRcdFx0KSA6XG5cdFx0XHRcdFx0MDtcblxuXHRcdFx0Ly8gQWNjb3VudCBmb3IgdW5yZWxpYWJsZSBib3JkZXItYm94IGRpbWVuc2lvbnMgYnkgY29tcGFyaW5nIG9mZnNldCogdG8gY29tcHV0ZWQgYW5kXG5cdFx0XHQvLyBmYWtpbmcgYSBjb250ZW50LWJveCB0byBnZXQgYm9yZGVyIGFuZCBwYWRkaW5nIChnaC0zNjk5KVxuXHRcdFx0aWYgKCBpc0JvcmRlckJveCAmJiBzY3JvbGxib3hTaXplQnVnZ3kgKSB7XG5cdFx0XHRcdHN1YnRyYWN0IC09IE1hdGguY2VpbChcblx0XHRcdFx0XHRlbGVtWyBcIm9mZnNldFwiICsgZGltZW5zaW9uWyAwIF0udG9VcHBlckNhc2UoKSArIGRpbWVuc2lvbi5zbGljZSggMSApIF0gLVxuXHRcdFx0XHRcdHBhcnNlRmxvYXQoIHN0eWxlc1sgZGltZW5zaW9uIF0gKSAtXG5cdFx0XHRcdFx0Ym94TW9kZWxBZGp1c3RtZW50KCBlbGVtLCBkaW1lbnNpb24sIFwiYm9yZGVyXCIsIGZhbHNlLCBzdHlsZXMgKSAtXG5cdFx0XHRcdFx0MC41XG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIENvbnZlcnQgdG8gcGl4ZWxzIGlmIHZhbHVlIGFkanVzdG1lbnQgaXMgbmVlZGVkXG5cdFx0XHRpZiAoIHN1YnRyYWN0ICYmICggbWF0Y2hlcyA9IHJjc3NOdW0uZXhlYyggdmFsdWUgKSApICYmXG5cdFx0XHRcdCggbWF0Y2hlc1sgMyBdIHx8IFwicHhcIiApICE9PSBcInB4XCIgKSB7XG5cblx0XHRcdFx0ZWxlbS5zdHlsZVsgZGltZW5zaW9uIF0gPSB2YWx1ZTtcblx0XHRcdFx0dmFsdWUgPSBqUXVlcnkuY3NzKCBlbGVtLCBkaW1lbnNpb24gKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHNldFBvc2l0aXZlTnVtYmVyKCBlbGVtLCB2YWx1ZSwgc3VidHJhY3QgKTtcblx0XHR9XG5cdH07XG59ICk7XG5cbmpRdWVyeS5jc3NIb29rcy5tYXJnaW5MZWZ0ID0gYWRkR2V0SG9va0lmKCBzdXBwb3J0LnJlbGlhYmxlTWFyZ2luTGVmdCxcblx0ZnVuY3Rpb24oIGVsZW0sIGNvbXB1dGVkICkge1xuXHRcdGlmICggY29tcHV0ZWQgKSB7XG5cdFx0XHRyZXR1cm4gKCBwYXJzZUZsb2F0KCBjdXJDU1MoIGVsZW0sIFwibWFyZ2luTGVmdFwiICkgKSB8fFxuXHRcdFx0XHRlbGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQgLVxuXHRcdFx0XHRcdHN3YXAoIGVsZW0sIHsgbWFyZ2luTGVmdDogMCB9LCBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdHJldHVybiBlbGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQ7XG5cdFx0XHRcdFx0fSApXG5cdFx0XHRcdCkgKyBcInB4XCI7XG5cdFx0fVxuXHR9XG4pO1xuXG4vLyBUaGVzZSBob29rcyBhcmUgdXNlZCBieSBhbmltYXRlIHRvIGV4cGFuZCBwcm9wZXJ0aWVzXG5qUXVlcnkuZWFjaCgge1xuXHRtYXJnaW46IFwiXCIsXG5cdHBhZGRpbmc6IFwiXCIsXG5cdGJvcmRlcjogXCJXaWR0aFwiXG59LCBmdW5jdGlvbiggcHJlZml4LCBzdWZmaXggKSB7XG5cdGpRdWVyeS5jc3NIb29rc1sgcHJlZml4ICsgc3VmZml4IF0gPSB7XG5cdFx0ZXhwYW5kOiBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0XHR2YXIgaSA9IDAsXG5cdFx0XHRcdGV4cGFuZGVkID0ge30sXG5cblx0XHRcdFx0Ly8gQXNzdW1lcyBhIHNpbmdsZSBudW1iZXIgaWYgbm90IGEgc3RyaW5nXG5cdFx0XHRcdHBhcnRzID0gdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiID8gdmFsdWUuc3BsaXQoIFwiIFwiICkgOiBbIHZhbHVlIF07XG5cblx0XHRcdGZvciAoIDsgaSA8IDQ7IGkrKyApIHtcblx0XHRcdFx0ZXhwYW5kZWRbIHByZWZpeCArIGNzc0V4cGFuZFsgaSBdICsgc3VmZml4IF0gPVxuXHRcdFx0XHRcdHBhcnRzWyBpIF0gfHwgcGFydHNbIGkgLSAyIF0gfHwgcGFydHNbIDAgXTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGV4cGFuZGVkO1xuXHRcdH1cblx0fTtcblxuXHRpZiAoIHByZWZpeCAhPT0gXCJtYXJnaW5cIiApIHtcblx0XHRqUXVlcnkuY3NzSG9va3NbIHByZWZpeCArIHN1ZmZpeCBdLnNldCA9IHNldFBvc2l0aXZlTnVtYmVyO1xuXHR9XG59ICk7XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0Y3NzOiBmdW5jdGlvbiggbmFtZSwgdmFsdWUgKSB7XG5cdFx0cmV0dXJuIGFjY2VzcyggdGhpcywgZnVuY3Rpb24oIGVsZW0sIG5hbWUsIHZhbHVlICkge1xuXHRcdFx0dmFyIHN0eWxlcywgbGVuLFxuXHRcdFx0XHRtYXAgPSB7fSxcblx0XHRcdFx0aSA9IDA7XG5cblx0XHRcdGlmICggQXJyYXkuaXNBcnJheSggbmFtZSApICkge1xuXHRcdFx0XHRzdHlsZXMgPSBnZXRTdHlsZXMoIGVsZW0gKTtcblx0XHRcdFx0bGVuID0gbmFtZS5sZW5ndGg7XG5cblx0XHRcdFx0Zm9yICggOyBpIDwgbGVuOyBpKysgKSB7XG5cdFx0XHRcdFx0bWFwWyBuYW1lWyBpIF0gXSA9IGpRdWVyeS5jc3MoIGVsZW0sIG5hbWVbIGkgXSwgZmFsc2UsIHN0eWxlcyApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIG1hcDtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHZhbHVlICE9PSB1bmRlZmluZWQgP1xuXHRcdFx0XHRqUXVlcnkuc3R5bGUoIGVsZW0sIG5hbWUsIHZhbHVlICkgOlxuXHRcdFx0XHRqUXVlcnkuY3NzKCBlbGVtLCBuYW1lICk7XG5cdFx0fSwgbmFtZSwgdmFsdWUsIGFyZ3VtZW50cy5sZW5ndGggPiAxICk7XG5cdH1cbn0gKTtcblxuXG5mdW5jdGlvbiBUd2VlbiggZWxlbSwgb3B0aW9ucywgcHJvcCwgZW5kLCBlYXNpbmcgKSB7XG5cdHJldHVybiBuZXcgVHdlZW4ucHJvdG90eXBlLmluaXQoIGVsZW0sIG9wdGlvbnMsIHByb3AsIGVuZCwgZWFzaW5nICk7XG59XG5qUXVlcnkuVHdlZW4gPSBUd2VlbjtcblxuVHdlZW4ucHJvdG90eXBlID0ge1xuXHRjb25zdHJ1Y3RvcjogVHdlZW4sXG5cdGluaXQ6IGZ1bmN0aW9uKCBlbGVtLCBvcHRpb25zLCBwcm9wLCBlbmQsIGVhc2luZywgdW5pdCApIHtcblx0XHR0aGlzLmVsZW0gPSBlbGVtO1xuXHRcdHRoaXMucHJvcCA9IHByb3A7XG5cdFx0dGhpcy5lYXNpbmcgPSBlYXNpbmcgfHwgalF1ZXJ5LmVhc2luZy5fZGVmYXVsdDtcblx0XHR0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuXHRcdHRoaXMuc3RhcnQgPSB0aGlzLm5vdyA9IHRoaXMuY3VyKCk7XG5cdFx0dGhpcy5lbmQgPSBlbmQ7XG5cdFx0dGhpcy51bml0ID0gdW5pdCB8fCAoIGpRdWVyeS5jc3NOdW1iZXJbIHByb3AgXSA/IFwiXCIgOiBcInB4XCIgKTtcblx0fSxcblx0Y3VyOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgaG9va3MgPSBUd2Vlbi5wcm9wSG9va3NbIHRoaXMucHJvcCBdO1xuXG5cdFx0cmV0dXJuIGhvb2tzICYmIGhvb2tzLmdldCA/XG5cdFx0XHRob29rcy5nZXQoIHRoaXMgKSA6XG5cdFx0XHRUd2Vlbi5wcm9wSG9va3MuX2RlZmF1bHQuZ2V0KCB0aGlzICk7XG5cdH0sXG5cdHJ1bjogZnVuY3Rpb24oIHBlcmNlbnQgKSB7XG5cdFx0dmFyIGVhc2VkLFxuXHRcdFx0aG9va3MgPSBUd2Vlbi5wcm9wSG9va3NbIHRoaXMucHJvcCBdO1xuXG5cdFx0aWYgKCB0aGlzLm9wdGlvbnMuZHVyYXRpb24gKSB7XG5cdFx0XHR0aGlzLnBvcyA9IGVhc2VkID0galF1ZXJ5LmVhc2luZ1sgdGhpcy5lYXNpbmcgXShcblx0XHRcdFx0cGVyY2VudCwgdGhpcy5vcHRpb25zLmR1cmF0aW9uICogcGVyY2VudCwgMCwgMSwgdGhpcy5vcHRpb25zLmR1cmF0aW9uXG5cdFx0XHQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnBvcyA9IGVhc2VkID0gcGVyY2VudDtcblx0XHR9XG5cdFx0dGhpcy5ub3cgPSAoIHRoaXMuZW5kIC0gdGhpcy5zdGFydCApICogZWFzZWQgKyB0aGlzLnN0YXJ0O1xuXG5cdFx0aWYgKCB0aGlzLm9wdGlvbnMuc3RlcCApIHtcblx0XHRcdHRoaXMub3B0aW9ucy5zdGVwLmNhbGwoIHRoaXMuZWxlbSwgdGhpcy5ub3csIHRoaXMgKTtcblx0XHR9XG5cblx0XHRpZiAoIGhvb2tzICYmIGhvb2tzLnNldCApIHtcblx0XHRcdGhvb2tzLnNldCggdGhpcyApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRUd2Vlbi5wcm9wSG9va3MuX2RlZmF1bHQuc2V0KCB0aGlzICk7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG59O1xuXG5Ud2Vlbi5wcm90b3R5cGUuaW5pdC5wcm90b3R5cGUgPSBUd2Vlbi5wcm90b3R5cGU7XG5cblR3ZWVuLnByb3BIb29rcyA9IHtcblx0X2RlZmF1bHQ6IHtcblx0XHRnZXQ6IGZ1bmN0aW9uKCB0d2VlbiApIHtcblx0XHRcdHZhciByZXN1bHQ7XG5cblx0XHRcdC8vIFVzZSBhIHByb3BlcnR5IG9uIHRoZSBlbGVtZW50IGRpcmVjdGx5IHdoZW4gaXQgaXMgbm90IGEgRE9NIGVsZW1lbnQsXG5cdFx0XHQvLyBvciB3aGVuIHRoZXJlIGlzIG5vIG1hdGNoaW5nIHN0eWxlIHByb3BlcnR5IHRoYXQgZXhpc3RzLlxuXHRcdFx0aWYgKCB0d2Vlbi5lbGVtLm5vZGVUeXBlICE9PSAxIHx8XG5cdFx0XHRcdHR3ZWVuLmVsZW1bIHR3ZWVuLnByb3AgXSAhPSBudWxsICYmIHR3ZWVuLmVsZW0uc3R5bGVbIHR3ZWVuLnByb3AgXSA9PSBudWxsICkge1xuXHRcdFx0XHRyZXR1cm4gdHdlZW4uZWxlbVsgdHdlZW4ucHJvcCBdO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBQYXNzaW5nIGFuIGVtcHR5IHN0cmluZyBhcyBhIDNyZCBwYXJhbWV0ZXIgdG8gLmNzcyB3aWxsIGF1dG9tYXRpY2FsbHlcblx0XHRcdC8vIGF0dGVtcHQgYSBwYXJzZUZsb2F0IGFuZCBmYWxsYmFjayB0byBhIHN0cmluZyBpZiB0aGUgcGFyc2UgZmFpbHMuXG5cdFx0XHQvLyBTaW1wbGUgdmFsdWVzIHN1Y2ggYXMgXCIxMHB4XCIgYXJlIHBhcnNlZCB0byBGbG9hdDtcblx0XHRcdC8vIGNvbXBsZXggdmFsdWVzIHN1Y2ggYXMgXCJyb3RhdGUoMXJhZClcIiBhcmUgcmV0dXJuZWQgYXMtaXMuXG5cdFx0XHRyZXN1bHQgPSBqUXVlcnkuY3NzKCB0d2Vlbi5lbGVtLCB0d2Vlbi5wcm9wLCBcIlwiICk7XG5cblx0XHRcdC8vIEVtcHR5IHN0cmluZ3MsIG51bGwsIHVuZGVmaW5lZCBhbmQgXCJhdXRvXCIgYXJlIGNvbnZlcnRlZCB0byAwLlxuXHRcdFx0cmV0dXJuICFyZXN1bHQgfHwgcmVzdWx0ID09PSBcImF1dG9cIiA/IDAgOiByZXN1bHQ7XG5cdFx0fSxcblx0XHRzZXQ6IGZ1bmN0aW9uKCB0d2VlbiApIHtcblxuXHRcdFx0Ly8gVXNlIHN0ZXAgaG9vayBmb3IgYmFjayBjb21wYXQuXG5cdFx0XHQvLyBVc2UgY3NzSG9vayBpZiBpdHMgdGhlcmUuXG5cdFx0XHQvLyBVc2UgLnN0eWxlIGlmIGF2YWlsYWJsZSBhbmQgdXNlIHBsYWluIHByb3BlcnRpZXMgd2hlcmUgYXZhaWxhYmxlLlxuXHRcdFx0aWYgKCBqUXVlcnkuZnguc3RlcFsgdHdlZW4ucHJvcCBdICkge1xuXHRcdFx0XHRqUXVlcnkuZnguc3RlcFsgdHdlZW4ucHJvcCBdKCB0d2VlbiApO1xuXHRcdFx0fSBlbHNlIGlmICggdHdlZW4uZWxlbS5ub2RlVHlwZSA9PT0gMSAmJiAoXG5cdFx0XHRcdFx0alF1ZXJ5LmNzc0hvb2tzWyB0d2Vlbi5wcm9wIF0gfHxcblx0XHRcdFx0XHR0d2Vlbi5lbGVtLnN0eWxlWyBmaW5hbFByb3BOYW1lKCB0d2Vlbi5wcm9wICkgXSAhPSBudWxsICkgKSB7XG5cdFx0XHRcdGpRdWVyeS5zdHlsZSggdHdlZW4uZWxlbSwgdHdlZW4ucHJvcCwgdHdlZW4ubm93ICsgdHdlZW4udW5pdCApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dHdlZW4uZWxlbVsgdHdlZW4ucHJvcCBdID0gdHdlZW4ubm93O1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufTtcblxuLy8gU3VwcG9ydDogSUUgPD05IG9ubHlcbi8vIFBhbmljIGJhc2VkIGFwcHJvYWNoIHRvIHNldHRpbmcgdGhpbmdzIG9uIGRpc2Nvbm5lY3RlZCBub2Rlc1xuVHdlZW4ucHJvcEhvb2tzLnNjcm9sbFRvcCA9IFR3ZWVuLnByb3BIb29rcy5zY3JvbGxMZWZ0ID0ge1xuXHRzZXQ6IGZ1bmN0aW9uKCB0d2VlbiApIHtcblx0XHRpZiAoIHR3ZWVuLmVsZW0ubm9kZVR5cGUgJiYgdHdlZW4uZWxlbS5wYXJlbnROb2RlICkge1xuXHRcdFx0dHdlZW4uZWxlbVsgdHdlZW4ucHJvcCBdID0gdHdlZW4ubm93O1xuXHRcdH1cblx0fVxufTtcblxualF1ZXJ5LmVhc2luZyA9IHtcblx0bGluZWFyOiBmdW5jdGlvbiggcCApIHtcblx0XHRyZXR1cm4gcDtcblx0fSxcblx0c3dpbmc6IGZ1bmN0aW9uKCBwICkge1xuXHRcdHJldHVybiAwLjUgLSBNYXRoLmNvcyggcCAqIE1hdGguUEkgKSAvIDI7XG5cdH0sXG5cdF9kZWZhdWx0OiBcInN3aW5nXCJcbn07XG5cbmpRdWVyeS5meCA9IFR3ZWVuLnByb3RvdHlwZS5pbml0O1xuXG4vLyBCYWNrIGNvbXBhdCA8MS44IGV4dGVuc2lvbiBwb2ludFxualF1ZXJ5LmZ4LnN0ZXAgPSB7fTtcblxuXG5cblxudmFyXG5cdGZ4Tm93LCBpblByb2dyZXNzLFxuXHRyZnh0eXBlcyA9IC9eKD86dG9nZ2xlfHNob3d8aGlkZSkkLyxcblx0cnJ1biA9IC9xdWV1ZUhvb2tzJC87XG5cbmZ1bmN0aW9uIHNjaGVkdWxlKCkge1xuXHRpZiAoIGluUHJvZ3Jlc3MgKSB7XG5cdFx0aWYgKCBkb2N1bWVudC5oaWRkZW4gPT09IGZhbHNlICYmIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgKSB7XG5cdFx0XHR3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKCBzY2hlZHVsZSApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR3aW5kb3cuc2V0VGltZW91dCggc2NoZWR1bGUsIGpRdWVyeS5meC5pbnRlcnZhbCApO1xuXHRcdH1cblxuXHRcdGpRdWVyeS5meC50aWNrKCk7XG5cdH1cbn1cblxuLy8gQW5pbWF0aW9ucyBjcmVhdGVkIHN5bmNocm9ub3VzbHkgd2lsbCBydW4gc3luY2hyb25vdXNseVxuZnVuY3Rpb24gY3JlYXRlRnhOb3coKSB7XG5cdHdpbmRvdy5zZXRUaW1lb3V0KCBmdW5jdGlvbigpIHtcblx0XHRmeE5vdyA9IHVuZGVmaW5lZDtcblx0fSApO1xuXHRyZXR1cm4gKCBmeE5vdyA9IERhdGUubm93KCkgKTtcbn1cblxuLy8gR2VuZXJhdGUgcGFyYW1ldGVycyB0byBjcmVhdGUgYSBzdGFuZGFyZCBhbmltYXRpb25cbmZ1bmN0aW9uIGdlbkZ4KCB0eXBlLCBpbmNsdWRlV2lkdGggKSB7XG5cdHZhciB3aGljaCxcblx0XHRpID0gMCxcblx0XHRhdHRycyA9IHsgaGVpZ2h0OiB0eXBlIH07XG5cblx0Ly8gSWYgd2UgaW5jbHVkZSB3aWR0aCwgc3RlcCB2YWx1ZSBpcyAxIHRvIGRvIGFsbCBjc3NFeHBhbmQgdmFsdWVzLFxuXHQvLyBvdGhlcndpc2Ugc3RlcCB2YWx1ZSBpcyAyIHRvIHNraXAgb3ZlciBMZWZ0IGFuZCBSaWdodFxuXHRpbmNsdWRlV2lkdGggPSBpbmNsdWRlV2lkdGggPyAxIDogMDtcblx0Zm9yICggOyBpIDwgNDsgaSArPSAyIC0gaW5jbHVkZVdpZHRoICkge1xuXHRcdHdoaWNoID0gY3NzRXhwYW5kWyBpIF07XG5cdFx0YXR0cnNbIFwibWFyZ2luXCIgKyB3aGljaCBdID0gYXR0cnNbIFwicGFkZGluZ1wiICsgd2hpY2ggXSA9IHR5cGU7XG5cdH1cblxuXHRpZiAoIGluY2x1ZGVXaWR0aCApIHtcblx0XHRhdHRycy5vcGFjaXR5ID0gYXR0cnMud2lkdGggPSB0eXBlO1xuXHR9XG5cblx0cmV0dXJuIGF0dHJzO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVUd2VlbiggdmFsdWUsIHByb3AsIGFuaW1hdGlvbiApIHtcblx0dmFyIHR3ZWVuLFxuXHRcdGNvbGxlY3Rpb24gPSAoIEFuaW1hdGlvbi50d2VlbmVyc1sgcHJvcCBdIHx8IFtdICkuY29uY2F0KCBBbmltYXRpb24udHdlZW5lcnNbIFwiKlwiIF0gKSxcblx0XHRpbmRleCA9IDAsXG5cdFx0bGVuZ3RoID0gY29sbGVjdGlvbi5sZW5ndGg7XG5cdGZvciAoIDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KysgKSB7XG5cdFx0aWYgKCAoIHR3ZWVuID0gY29sbGVjdGlvblsgaW5kZXggXS5jYWxsKCBhbmltYXRpb24sIHByb3AsIHZhbHVlICkgKSApIHtcblxuXHRcdFx0Ly8gV2UncmUgZG9uZSB3aXRoIHRoaXMgcHJvcGVydHlcblx0XHRcdHJldHVybiB0d2Vlbjtcblx0XHR9XG5cdH1cbn1cblxuZnVuY3Rpb24gZGVmYXVsdFByZWZpbHRlciggZWxlbSwgcHJvcHMsIG9wdHMgKSB7XG5cdHZhciBwcm9wLCB2YWx1ZSwgdG9nZ2xlLCBob29rcywgb2xkZmlyZSwgcHJvcFR3ZWVuLCByZXN0b3JlRGlzcGxheSwgZGlzcGxheSxcblx0XHRpc0JveCA9IFwid2lkdGhcIiBpbiBwcm9wcyB8fCBcImhlaWdodFwiIGluIHByb3BzLFxuXHRcdGFuaW0gPSB0aGlzLFxuXHRcdG9yaWcgPSB7fSxcblx0XHRzdHlsZSA9IGVsZW0uc3R5bGUsXG5cdFx0aGlkZGVuID0gZWxlbS5ub2RlVHlwZSAmJiBpc0hpZGRlbldpdGhpblRyZWUoIGVsZW0gKSxcblx0XHRkYXRhU2hvdyA9IGRhdGFQcml2LmdldCggZWxlbSwgXCJmeHNob3dcIiApO1xuXG5cdC8vIFF1ZXVlLXNraXBwaW5nIGFuaW1hdGlvbnMgaGlqYWNrIHRoZSBmeCBob29rc1xuXHRpZiAoICFvcHRzLnF1ZXVlICkge1xuXHRcdGhvb2tzID0galF1ZXJ5Ll9xdWV1ZUhvb2tzKCBlbGVtLCBcImZ4XCIgKTtcblx0XHRpZiAoIGhvb2tzLnVucXVldWVkID09IG51bGwgKSB7XG5cdFx0XHRob29rcy51bnF1ZXVlZCA9IDA7XG5cdFx0XHRvbGRmaXJlID0gaG9va3MuZW1wdHkuZmlyZTtcblx0XHRcdGhvb2tzLmVtcHR5LmZpcmUgPSBmdW5jdGlvbigpIHtcblx0XHRcdFx0aWYgKCAhaG9va3MudW5xdWV1ZWQgKSB7XG5cdFx0XHRcdFx0b2xkZmlyZSgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdH1cblx0XHRob29rcy51bnF1ZXVlZCsrO1xuXG5cdFx0YW5pbS5hbHdheXMoIGZ1bmN0aW9uKCkge1xuXG5cdFx0XHQvLyBFbnN1cmUgdGhlIGNvbXBsZXRlIGhhbmRsZXIgaXMgY2FsbGVkIGJlZm9yZSB0aGlzIGNvbXBsZXRlc1xuXHRcdFx0YW5pbS5hbHdheXMoIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRob29rcy51bnF1ZXVlZC0tO1xuXHRcdFx0XHRpZiAoICFqUXVlcnkucXVldWUoIGVsZW0sIFwiZnhcIiApLmxlbmd0aCApIHtcblx0XHRcdFx0XHRob29rcy5lbXB0eS5maXJlKCk7XG5cdFx0XHRcdH1cblx0XHRcdH0gKTtcblx0XHR9ICk7XG5cdH1cblxuXHQvLyBEZXRlY3Qgc2hvdy9oaWRlIGFuaW1hdGlvbnNcblx0Zm9yICggcHJvcCBpbiBwcm9wcyApIHtcblx0XHR2YWx1ZSA9IHByb3BzWyBwcm9wIF07XG5cdFx0aWYgKCByZnh0eXBlcy50ZXN0KCB2YWx1ZSApICkge1xuXHRcdFx0ZGVsZXRlIHByb3BzWyBwcm9wIF07XG5cdFx0XHR0b2dnbGUgPSB0b2dnbGUgfHwgdmFsdWUgPT09IFwidG9nZ2xlXCI7XG5cdFx0XHRpZiAoIHZhbHVlID09PSAoIGhpZGRlbiA/IFwiaGlkZVwiIDogXCJzaG93XCIgKSApIHtcblxuXHRcdFx0XHQvLyBQcmV0ZW5kIHRvIGJlIGhpZGRlbiBpZiB0aGlzIGlzIGEgXCJzaG93XCIgYW5kXG5cdFx0XHRcdC8vIHRoZXJlIGlzIHN0aWxsIGRhdGEgZnJvbSBhIHN0b3BwZWQgc2hvdy9oaWRlXG5cdFx0XHRcdGlmICggdmFsdWUgPT09IFwic2hvd1wiICYmIGRhdGFTaG93ICYmIGRhdGFTaG93WyBwcm9wIF0gIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0XHRoaWRkZW4gPSB0cnVlO1xuXG5cdFx0XHRcdC8vIElnbm9yZSBhbGwgb3RoZXIgbm8tb3Agc2hvdy9oaWRlIGRhdGFcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0b3JpZ1sgcHJvcCBdID0gZGF0YVNob3cgJiYgZGF0YVNob3dbIHByb3AgXSB8fCBqUXVlcnkuc3R5bGUoIGVsZW0sIHByb3AgKTtcblx0XHR9XG5cdH1cblxuXHQvLyBCYWlsIG91dCBpZiB0aGlzIGlzIGEgbm8tb3AgbGlrZSAuaGlkZSgpLmhpZGUoKVxuXHRwcm9wVHdlZW4gPSAhalF1ZXJ5LmlzRW1wdHlPYmplY3QoIHByb3BzICk7XG5cdGlmICggIXByb3BUd2VlbiAmJiBqUXVlcnkuaXNFbXB0eU9iamVjdCggb3JpZyApICkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdC8vIFJlc3RyaWN0IFwib3ZlcmZsb3dcIiBhbmQgXCJkaXNwbGF5XCIgc3R5bGVzIGR1cmluZyBib3ggYW5pbWF0aW9uc1xuXHRpZiAoIGlzQm94ICYmIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7XG5cblx0XHQvLyBTdXBwb3J0OiBJRSA8PTkgLSAxMSwgRWRnZSAxMiAtIDE1XG5cdFx0Ly8gUmVjb3JkIGFsbCAzIG92ZXJmbG93IGF0dHJpYnV0ZXMgYmVjYXVzZSBJRSBkb2VzIG5vdCBpbmZlciB0aGUgc2hvcnRoYW5kXG5cdFx0Ly8gZnJvbSBpZGVudGljYWxseS12YWx1ZWQgb3ZlcmZsb3dYIGFuZCBvdmVyZmxvd1kgYW5kIEVkZ2UganVzdCBtaXJyb3JzXG5cdFx0Ly8gdGhlIG92ZXJmbG93WCB2YWx1ZSB0aGVyZS5cblx0XHRvcHRzLm92ZXJmbG93ID0gWyBzdHlsZS5vdmVyZmxvdywgc3R5bGUub3ZlcmZsb3dYLCBzdHlsZS5vdmVyZmxvd1kgXTtcblxuXHRcdC8vIElkZW50aWZ5IGEgZGlzcGxheSB0eXBlLCBwcmVmZXJyaW5nIG9sZCBzaG93L2hpZGUgZGF0YSBvdmVyIHRoZSBDU1MgY2FzY2FkZVxuXHRcdHJlc3RvcmVEaXNwbGF5ID0gZGF0YVNob3cgJiYgZGF0YVNob3cuZGlzcGxheTtcblx0XHRpZiAoIHJlc3RvcmVEaXNwbGF5ID09IG51bGwgKSB7XG5cdFx0XHRyZXN0b3JlRGlzcGxheSA9IGRhdGFQcml2LmdldCggZWxlbSwgXCJkaXNwbGF5XCIgKTtcblx0XHR9XG5cdFx0ZGlzcGxheSA9IGpRdWVyeS5jc3MoIGVsZW0sIFwiZGlzcGxheVwiICk7XG5cdFx0aWYgKCBkaXNwbGF5ID09PSBcIm5vbmVcIiApIHtcblx0XHRcdGlmICggcmVzdG9yZURpc3BsYXkgKSB7XG5cdFx0XHRcdGRpc3BsYXkgPSByZXN0b3JlRGlzcGxheTtcblx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0Ly8gR2V0IG5vbmVtcHR5IHZhbHVlKHMpIGJ5IHRlbXBvcmFyaWx5IGZvcmNpbmcgdmlzaWJpbGl0eVxuXHRcdFx0XHRzaG93SGlkZSggWyBlbGVtIF0sIHRydWUgKTtcblx0XHRcdFx0cmVzdG9yZURpc3BsYXkgPSBlbGVtLnN0eWxlLmRpc3BsYXkgfHwgcmVzdG9yZURpc3BsYXk7XG5cdFx0XHRcdGRpc3BsYXkgPSBqUXVlcnkuY3NzKCBlbGVtLCBcImRpc3BsYXlcIiApO1xuXHRcdFx0XHRzaG93SGlkZSggWyBlbGVtIF0gKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBBbmltYXRlIGlubGluZSBlbGVtZW50cyBhcyBpbmxpbmUtYmxvY2tcblx0XHRpZiAoIGRpc3BsYXkgPT09IFwiaW5saW5lXCIgfHwgZGlzcGxheSA9PT0gXCJpbmxpbmUtYmxvY2tcIiAmJiByZXN0b3JlRGlzcGxheSAhPSBudWxsICkge1xuXHRcdFx0aWYgKCBqUXVlcnkuY3NzKCBlbGVtLCBcImZsb2F0XCIgKSA9PT0gXCJub25lXCIgKSB7XG5cblx0XHRcdFx0Ly8gUmVzdG9yZSB0aGUgb3JpZ2luYWwgZGlzcGxheSB2YWx1ZSBhdCB0aGUgZW5kIG9mIHB1cmUgc2hvdy9oaWRlIGFuaW1hdGlvbnNcblx0XHRcdFx0aWYgKCAhcHJvcFR3ZWVuICkge1xuXHRcdFx0XHRcdGFuaW0uZG9uZSggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRzdHlsZS5kaXNwbGF5ID0gcmVzdG9yZURpc3BsYXk7XG5cdFx0XHRcdFx0fSApO1xuXHRcdFx0XHRcdGlmICggcmVzdG9yZURpc3BsYXkgPT0gbnVsbCApIHtcblx0XHRcdFx0XHRcdGRpc3BsYXkgPSBzdHlsZS5kaXNwbGF5O1xuXHRcdFx0XHRcdFx0cmVzdG9yZURpc3BsYXkgPSBkaXNwbGF5ID09PSBcIm5vbmVcIiA/IFwiXCIgOiBkaXNwbGF5O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRzdHlsZS5kaXNwbGF5ID0gXCJpbmxpbmUtYmxvY2tcIjtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRpZiAoIG9wdHMub3ZlcmZsb3cgKSB7XG5cdFx0c3R5bGUub3ZlcmZsb3cgPSBcImhpZGRlblwiO1xuXHRcdGFuaW0uYWx3YXlzKCBmdW5jdGlvbigpIHtcblx0XHRcdHN0eWxlLm92ZXJmbG93ID0gb3B0cy5vdmVyZmxvd1sgMCBdO1xuXHRcdFx0c3R5bGUub3ZlcmZsb3dYID0gb3B0cy5vdmVyZmxvd1sgMSBdO1xuXHRcdFx0c3R5bGUub3ZlcmZsb3dZID0gb3B0cy5vdmVyZmxvd1sgMiBdO1xuXHRcdH0gKTtcblx0fVxuXG5cdC8vIEltcGxlbWVudCBzaG93L2hpZGUgYW5pbWF0aW9uc1xuXHRwcm9wVHdlZW4gPSBmYWxzZTtcblx0Zm9yICggcHJvcCBpbiBvcmlnICkge1xuXG5cdFx0Ly8gR2VuZXJhbCBzaG93L2hpZGUgc2V0dXAgZm9yIHRoaXMgZWxlbWVudCBhbmltYXRpb25cblx0XHRpZiAoICFwcm9wVHdlZW4gKSB7XG5cdFx0XHRpZiAoIGRhdGFTaG93ICkge1xuXHRcdFx0XHRpZiAoIFwiaGlkZGVuXCIgaW4gZGF0YVNob3cgKSB7XG5cdFx0XHRcdFx0aGlkZGVuID0gZGF0YVNob3cuaGlkZGVuO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRkYXRhU2hvdyA9IGRhdGFQcml2LmFjY2VzcyggZWxlbSwgXCJmeHNob3dcIiwgeyBkaXNwbGF5OiByZXN0b3JlRGlzcGxheSB9ICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFN0b3JlIGhpZGRlbi92aXNpYmxlIGZvciB0b2dnbGUgc28gYC5zdG9wKCkudG9nZ2xlKClgIFwicmV2ZXJzZXNcIlxuXHRcdFx0aWYgKCB0b2dnbGUgKSB7XG5cdFx0XHRcdGRhdGFTaG93LmhpZGRlbiA9ICFoaWRkZW47XG5cdFx0XHR9XG5cblx0XHRcdC8vIFNob3cgZWxlbWVudHMgYmVmb3JlIGFuaW1hdGluZyB0aGVtXG5cdFx0XHRpZiAoIGhpZGRlbiApIHtcblx0XHRcdFx0c2hvd0hpZGUoIFsgZWxlbSBdLCB0cnVlICk7XG5cdFx0XHR9XG5cblx0XHRcdC8qIGVzbGludC1kaXNhYmxlIG5vLWxvb3AtZnVuYyAqL1xuXG5cdFx0XHRhbmltLmRvbmUoIGZ1bmN0aW9uKCkge1xuXG5cdFx0XHQvKiBlc2xpbnQtZW5hYmxlIG5vLWxvb3AtZnVuYyAqL1xuXG5cdFx0XHRcdC8vIFRoZSBmaW5hbCBzdGVwIG9mIGEgXCJoaWRlXCIgYW5pbWF0aW9uIGlzIGFjdHVhbGx5IGhpZGluZyB0aGUgZWxlbWVudFxuXHRcdFx0XHRpZiAoICFoaWRkZW4gKSB7XG5cdFx0XHRcdFx0c2hvd0hpZGUoIFsgZWxlbSBdICk7XG5cdFx0XHRcdH1cblx0XHRcdFx0ZGF0YVByaXYucmVtb3ZlKCBlbGVtLCBcImZ4c2hvd1wiICk7XG5cdFx0XHRcdGZvciAoIHByb3AgaW4gb3JpZyApIHtcblx0XHRcdFx0XHRqUXVlcnkuc3R5bGUoIGVsZW0sIHByb3AsIG9yaWdbIHByb3AgXSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9ICk7XG5cdFx0fVxuXG5cdFx0Ly8gUGVyLXByb3BlcnR5IHNldHVwXG5cdFx0cHJvcFR3ZWVuID0gY3JlYXRlVHdlZW4oIGhpZGRlbiA/IGRhdGFTaG93WyBwcm9wIF0gOiAwLCBwcm9wLCBhbmltICk7XG5cdFx0aWYgKCAhKCBwcm9wIGluIGRhdGFTaG93ICkgKSB7XG5cdFx0XHRkYXRhU2hvd1sgcHJvcCBdID0gcHJvcFR3ZWVuLnN0YXJ0O1xuXHRcdFx0aWYgKCBoaWRkZW4gKSB7XG5cdFx0XHRcdHByb3BUd2Vlbi5lbmQgPSBwcm9wVHdlZW4uc3RhcnQ7XG5cdFx0XHRcdHByb3BUd2Vlbi5zdGFydCA9IDA7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59XG5cbmZ1bmN0aW9uIHByb3BGaWx0ZXIoIHByb3BzLCBzcGVjaWFsRWFzaW5nICkge1xuXHR2YXIgaW5kZXgsIG5hbWUsIGVhc2luZywgdmFsdWUsIGhvb2tzO1xuXG5cdC8vIGNhbWVsQ2FzZSwgc3BlY2lhbEVhc2luZyBhbmQgZXhwYW5kIGNzc0hvb2sgcGFzc1xuXHRmb3IgKCBpbmRleCBpbiBwcm9wcyApIHtcblx0XHRuYW1lID0gY2FtZWxDYXNlKCBpbmRleCApO1xuXHRcdGVhc2luZyA9IHNwZWNpYWxFYXNpbmdbIG5hbWUgXTtcblx0XHR2YWx1ZSA9IHByb3BzWyBpbmRleCBdO1xuXHRcdGlmICggQXJyYXkuaXNBcnJheSggdmFsdWUgKSApIHtcblx0XHRcdGVhc2luZyA9IHZhbHVlWyAxIF07XG5cdFx0XHR2YWx1ZSA9IHByb3BzWyBpbmRleCBdID0gdmFsdWVbIDAgXTtcblx0XHR9XG5cblx0XHRpZiAoIGluZGV4ICE9PSBuYW1lICkge1xuXHRcdFx0cHJvcHNbIG5hbWUgXSA9IHZhbHVlO1xuXHRcdFx0ZGVsZXRlIHByb3BzWyBpbmRleCBdO1xuXHRcdH1cblxuXHRcdGhvb2tzID0galF1ZXJ5LmNzc0hvb2tzWyBuYW1lIF07XG5cdFx0aWYgKCBob29rcyAmJiBcImV4cGFuZFwiIGluIGhvb2tzICkge1xuXHRcdFx0dmFsdWUgPSBob29rcy5leHBhbmQoIHZhbHVlICk7XG5cdFx0XHRkZWxldGUgcHJvcHNbIG5hbWUgXTtcblxuXHRcdFx0Ly8gTm90IHF1aXRlICQuZXh0ZW5kLCB0aGlzIHdvbid0IG92ZXJ3cml0ZSBleGlzdGluZyBrZXlzLlxuXHRcdFx0Ly8gUmV1c2luZyAnaW5kZXgnIGJlY2F1c2Ugd2UgaGF2ZSB0aGUgY29ycmVjdCBcIm5hbWVcIlxuXHRcdFx0Zm9yICggaW5kZXggaW4gdmFsdWUgKSB7XG5cdFx0XHRcdGlmICggISggaW5kZXggaW4gcHJvcHMgKSApIHtcblx0XHRcdFx0XHRwcm9wc1sgaW5kZXggXSA9IHZhbHVlWyBpbmRleCBdO1xuXHRcdFx0XHRcdHNwZWNpYWxFYXNpbmdbIGluZGV4IF0gPSBlYXNpbmc7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0c3BlY2lhbEVhc2luZ1sgbmFtZSBdID0gZWFzaW5nO1xuXHRcdH1cblx0fVxufVxuXG5mdW5jdGlvbiBBbmltYXRpb24oIGVsZW0sIHByb3BlcnRpZXMsIG9wdGlvbnMgKSB7XG5cdHZhciByZXN1bHQsXG5cdFx0c3RvcHBlZCxcblx0XHRpbmRleCA9IDAsXG5cdFx0bGVuZ3RoID0gQW5pbWF0aW9uLnByZWZpbHRlcnMubGVuZ3RoLFxuXHRcdGRlZmVycmVkID0galF1ZXJ5LkRlZmVycmVkKCkuYWx3YXlzKCBmdW5jdGlvbigpIHtcblxuXHRcdFx0Ly8gRG9uJ3QgbWF0Y2ggZWxlbSBpbiB0aGUgOmFuaW1hdGVkIHNlbGVjdG9yXG5cdFx0XHRkZWxldGUgdGljay5lbGVtO1xuXHRcdH0gKSxcblx0XHR0aWNrID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRpZiAoIHN0b3BwZWQgKSB7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHRcdHZhciBjdXJyZW50VGltZSA9IGZ4Tm93IHx8IGNyZWF0ZUZ4Tm93KCksXG5cdFx0XHRcdHJlbWFpbmluZyA9IE1hdGgubWF4KCAwLCBhbmltYXRpb24uc3RhcnRUaW1lICsgYW5pbWF0aW9uLmR1cmF0aW9uIC0gY3VycmVudFRpbWUgKSxcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBBbmRyb2lkIDIuMyBvbmx5XG5cdFx0XHRcdC8vIEFyY2hhaWMgY3Jhc2ggYnVnIHdvbid0IGFsbG93IHVzIHRvIHVzZSBgMSAtICggMC41IHx8IDAgKWAgKCMxMjQ5Nylcblx0XHRcdFx0dGVtcCA9IHJlbWFpbmluZyAvIGFuaW1hdGlvbi5kdXJhdGlvbiB8fCAwLFxuXHRcdFx0XHRwZXJjZW50ID0gMSAtIHRlbXAsXG5cdFx0XHRcdGluZGV4ID0gMCxcblx0XHRcdFx0bGVuZ3RoID0gYW5pbWF0aW9uLnR3ZWVucy5sZW5ndGg7XG5cblx0XHRcdGZvciAoIDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KysgKSB7XG5cdFx0XHRcdGFuaW1hdGlvbi50d2VlbnNbIGluZGV4IF0ucnVuKCBwZXJjZW50ICk7XG5cdFx0XHR9XG5cblx0XHRcdGRlZmVycmVkLm5vdGlmeVdpdGgoIGVsZW0sIFsgYW5pbWF0aW9uLCBwZXJjZW50LCByZW1haW5pbmcgXSApO1xuXG5cdFx0XHQvLyBJZiB0aGVyZSdzIG1vcmUgdG8gZG8sIHlpZWxkXG5cdFx0XHRpZiAoIHBlcmNlbnQgPCAxICYmIGxlbmd0aCApIHtcblx0XHRcdFx0cmV0dXJuIHJlbWFpbmluZztcblx0XHRcdH1cblxuXHRcdFx0Ly8gSWYgdGhpcyB3YXMgYW4gZW1wdHkgYW5pbWF0aW9uLCBzeW50aGVzaXplIGEgZmluYWwgcHJvZ3Jlc3Mgbm90aWZpY2F0aW9uXG5cdFx0XHRpZiAoICFsZW5ndGggKSB7XG5cdFx0XHRcdGRlZmVycmVkLm5vdGlmeVdpdGgoIGVsZW0sIFsgYW5pbWF0aW9uLCAxLCAwIF0gKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gUmVzb2x2ZSB0aGUgYW5pbWF0aW9uIGFuZCByZXBvcnQgaXRzIGNvbmNsdXNpb25cblx0XHRcdGRlZmVycmVkLnJlc29sdmVXaXRoKCBlbGVtLCBbIGFuaW1hdGlvbiBdICk7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fSxcblx0XHRhbmltYXRpb24gPSBkZWZlcnJlZC5wcm9taXNlKCB7XG5cdFx0XHRlbGVtOiBlbGVtLFxuXHRcdFx0cHJvcHM6IGpRdWVyeS5leHRlbmQoIHt9LCBwcm9wZXJ0aWVzICksXG5cdFx0XHRvcHRzOiBqUXVlcnkuZXh0ZW5kKCB0cnVlLCB7XG5cdFx0XHRcdHNwZWNpYWxFYXNpbmc6IHt9LFxuXHRcdFx0XHRlYXNpbmc6IGpRdWVyeS5lYXNpbmcuX2RlZmF1bHRcblx0XHRcdH0sIG9wdGlvbnMgKSxcblx0XHRcdG9yaWdpbmFsUHJvcGVydGllczogcHJvcGVydGllcyxcblx0XHRcdG9yaWdpbmFsT3B0aW9uczogb3B0aW9ucyxcblx0XHRcdHN0YXJ0VGltZTogZnhOb3cgfHwgY3JlYXRlRnhOb3coKSxcblx0XHRcdGR1cmF0aW9uOiBvcHRpb25zLmR1cmF0aW9uLFxuXHRcdFx0dHdlZW5zOiBbXSxcblx0XHRcdGNyZWF0ZVR3ZWVuOiBmdW5jdGlvbiggcHJvcCwgZW5kICkge1xuXHRcdFx0XHR2YXIgdHdlZW4gPSBqUXVlcnkuVHdlZW4oIGVsZW0sIGFuaW1hdGlvbi5vcHRzLCBwcm9wLCBlbmQsXG5cdFx0XHRcdFx0XHRhbmltYXRpb24ub3B0cy5zcGVjaWFsRWFzaW5nWyBwcm9wIF0gfHwgYW5pbWF0aW9uLm9wdHMuZWFzaW5nICk7XG5cdFx0XHRcdGFuaW1hdGlvbi50d2VlbnMucHVzaCggdHdlZW4gKTtcblx0XHRcdFx0cmV0dXJuIHR3ZWVuO1xuXHRcdFx0fSxcblx0XHRcdHN0b3A6IGZ1bmN0aW9uKCBnb3RvRW5kICkge1xuXHRcdFx0XHR2YXIgaW5kZXggPSAwLFxuXG5cdFx0XHRcdFx0Ly8gSWYgd2UgYXJlIGdvaW5nIHRvIHRoZSBlbmQsIHdlIHdhbnQgdG8gcnVuIGFsbCB0aGUgdHdlZW5zXG5cdFx0XHRcdFx0Ly8gb3RoZXJ3aXNlIHdlIHNraXAgdGhpcyBwYXJ0XG5cdFx0XHRcdFx0bGVuZ3RoID0gZ290b0VuZCA/IGFuaW1hdGlvbi50d2VlbnMubGVuZ3RoIDogMDtcblx0XHRcdFx0aWYgKCBzdG9wcGVkICkge1xuXHRcdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHN0b3BwZWQgPSB0cnVlO1xuXHRcdFx0XHRmb3IgKCA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrICkge1xuXHRcdFx0XHRcdGFuaW1hdGlvbi50d2VlbnNbIGluZGV4IF0ucnVuKCAxICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBSZXNvbHZlIHdoZW4gd2UgcGxheWVkIHRoZSBsYXN0IGZyYW1lOyBvdGhlcndpc2UsIHJlamVjdFxuXHRcdFx0XHRpZiAoIGdvdG9FbmQgKSB7XG5cdFx0XHRcdFx0ZGVmZXJyZWQubm90aWZ5V2l0aCggZWxlbSwgWyBhbmltYXRpb24sIDEsIDAgXSApO1xuXHRcdFx0XHRcdGRlZmVycmVkLnJlc29sdmVXaXRoKCBlbGVtLCBbIGFuaW1hdGlvbiwgZ290b0VuZCBdICk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0ZGVmZXJyZWQucmVqZWN0V2l0aCggZWxlbSwgWyBhbmltYXRpb24sIGdvdG9FbmQgXSApO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0fVxuXHRcdH0gKSxcblx0XHRwcm9wcyA9IGFuaW1hdGlvbi5wcm9wcztcblxuXHRwcm9wRmlsdGVyKCBwcm9wcywgYW5pbWF0aW9uLm9wdHMuc3BlY2lhbEVhc2luZyApO1xuXG5cdGZvciAoIDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KysgKSB7XG5cdFx0cmVzdWx0ID0gQW5pbWF0aW9uLnByZWZpbHRlcnNbIGluZGV4IF0uY2FsbCggYW5pbWF0aW9uLCBlbGVtLCBwcm9wcywgYW5pbWF0aW9uLm9wdHMgKTtcblx0XHRpZiAoIHJlc3VsdCApIHtcblx0XHRcdGlmICggaXNGdW5jdGlvbiggcmVzdWx0LnN0b3AgKSApIHtcblx0XHRcdFx0alF1ZXJ5Ll9xdWV1ZUhvb2tzKCBhbmltYXRpb24uZWxlbSwgYW5pbWF0aW9uLm9wdHMucXVldWUgKS5zdG9wID1cblx0XHRcdFx0XHRyZXN1bHQuc3RvcC5iaW5kKCByZXN1bHQgKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0fVxuXHR9XG5cblx0alF1ZXJ5Lm1hcCggcHJvcHMsIGNyZWF0ZVR3ZWVuLCBhbmltYXRpb24gKTtcblxuXHRpZiAoIGlzRnVuY3Rpb24oIGFuaW1hdGlvbi5vcHRzLnN0YXJ0ICkgKSB7XG5cdFx0YW5pbWF0aW9uLm9wdHMuc3RhcnQuY2FsbCggZWxlbSwgYW5pbWF0aW9uICk7XG5cdH1cblxuXHQvLyBBdHRhY2ggY2FsbGJhY2tzIGZyb20gb3B0aW9uc1xuXHRhbmltYXRpb25cblx0XHQucHJvZ3Jlc3MoIGFuaW1hdGlvbi5vcHRzLnByb2dyZXNzIClcblx0XHQuZG9uZSggYW5pbWF0aW9uLm9wdHMuZG9uZSwgYW5pbWF0aW9uLm9wdHMuY29tcGxldGUgKVxuXHRcdC5mYWlsKCBhbmltYXRpb24ub3B0cy5mYWlsIClcblx0XHQuYWx3YXlzKCBhbmltYXRpb24ub3B0cy5hbHdheXMgKTtcblxuXHRqUXVlcnkuZngudGltZXIoXG5cdFx0alF1ZXJ5LmV4dGVuZCggdGljaywge1xuXHRcdFx0ZWxlbTogZWxlbSxcblx0XHRcdGFuaW06IGFuaW1hdGlvbixcblx0XHRcdHF1ZXVlOiBhbmltYXRpb24ub3B0cy5xdWV1ZVxuXHRcdH0gKVxuXHQpO1xuXG5cdHJldHVybiBhbmltYXRpb247XG59XG5cbmpRdWVyeS5BbmltYXRpb24gPSBqUXVlcnkuZXh0ZW5kKCBBbmltYXRpb24sIHtcblxuXHR0d2VlbmVyczoge1xuXHRcdFwiKlwiOiBbIGZ1bmN0aW9uKCBwcm9wLCB2YWx1ZSApIHtcblx0XHRcdHZhciB0d2VlbiA9IHRoaXMuY3JlYXRlVHdlZW4oIHByb3AsIHZhbHVlICk7XG5cdFx0XHRhZGp1c3RDU1MoIHR3ZWVuLmVsZW0sIHByb3AsIHJjc3NOdW0uZXhlYyggdmFsdWUgKSwgdHdlZW4gKTtcblx0XHRcdHJldHVybiB0d2Vlbjtcblx0XHR9IF1cblx0fSxcblxuXHR0d2VlbmVyOiBmdW5jdGlvbiggcHJvcHMsIGNhbGxiYWNrICkge1xuXHRcdGlmICggaXNGdW5jdGlvbiggcHJvcHMgKSApIHtcblx0XHRcdGNhbGxiYWNrID0gcHJvcHM7XG5cdFx0XHRwcm9wcyA9IFsgXCIqXCIgXTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cHJvcHMgPSBwcm9wcy5tYXRjaCggcm5vdGh0bWx3aGl0ZSApO1xuXHRcdH1cblxuXHRcdHZhciBwcm9wLFxuXHRcdFx0aW5kZXggPSAwLFxuXHRcdFx0bGVuZ3RoID0gcHJvcHMubGVuZ3RoO1xuXG5cdFx0Zm9yICggOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKyApIHtcblx0XHRcdHByb3AgPSBwcm9wc1sgaW5kZXggXTtcblx0XHRcdEFuaW1hdGlvbi50d2VlbmVyc1sgcHJvcCBdID0gQW5pbWF0aW9uLnR3ZWVuZXJzWyBwcm9wIF0gfHwgW107XG5cdFx0XHRBbmltYXRpb24udHdlZW5lcnNbIHByb3AgXS51bnNoaWZ0KCBjYWxsYmFjayApO1xuXHRcdH1cblx0fSxcblxuXHRwcmVmaWx0ZXJzOiBbIGRlZmF1bHRQcmVmaWx0ZXIgXSxcblxuXHRwcmVmaWx0ZXI6IGZ1bmN0aW9uKCBjYWxsYmFjaywgcHJlcGVuZCApIHtcblx0XHRpZiAoIHByZXBlbmQgKSB7XG5cdFx0XHRBbmltYXRpb24ucHJlZmlsdGVycy51bnNoaWZ0KCBjYWxsYmFjayApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRBbmltYXRpb24ucHJlZmlsdGVycy5wdXNoKCBjYWxsYmFjayApO1xuXHRcdH1cblx0fVxufSApO1xuXG5qUXVlcnkuc3BlZWQgPSBmdW5jdGlvbiggc3BlZWQsIGVhc2luZywgZm4gKSB7XG5cdHZhciBvcHQgPSBzcGVlZCAmJiB0eXBlb2Ygc3BlZWQgPT09IFwib2JqZWN0XCIgPyBqUXVlcnkuZXh0ZW5kKCB7fSwgc3BlZWQgKSA6IHtcblx0XHRjb21wbGV0ZTogZm4gfHwgIWZuICYmIGVhc2luZyB8fFxuXHRcdFx0aXNGdW5jdGlvbiggc3BlZWQgKSAmJiBzcGVlZCxcblx0XHRkdXJhdGlvbjogc3BlZWQsXG5cdFx0ZWFzaW5nOiBmbiAmJiBlYXNpbmcgfHwgZWFzaW5nICYmICFpc0Z1bmN0aW9uKCBlYXNpbmcgKSAmJiBlYXNpbmdcblx0fTtcblxuXHQvLyBHbyB0byB0aGUgZW5kIHN0YXRlIGlmIGZ4IGFyZSBvZmZcblx0aWYgKCBqUXVlcnkuZngub2ZmICkge1xuXHRcdG9wdC5kdXJhdGlvbiA9IDA7XG5cblx0fSBlbHNlIHtcblx0XHRpZiAoIHR5cGVvZiBvcHQuZHVyYXRpb24gIT09IFwibnVtYmVyXCIgKSB7XG5cdFx0XHRpZiAoIG9wdC5kdXJhdGlvbiBpbiBqUXVlcnkuZnguc3BlZWRzICkge1xuXHRcdFx0XHRvcHQuZHVyYXRpb24gPSBqUXVlcnkuZnguc3BlZWRzWyBvcHQuZHVyYXRpb24gXTtcblxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0b3B0LmR1cmF0aW9uID0galF1ZXJ5LmZ4LnNwZWVkcy5fZGVmYXVsdDtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBOb3JtYWxpemUgb3B0LnF1ZXVlIC0gdHJ1ZS91bmRlZmluZWQvbnVsbCAtPiBcImZ4XCJcblx0aWYgKCBvcHQucXVldWUgPT0gbnVsbCB8fCBvcHQucXVldWUgPT09IHRydWUgKSB7XG5cdFx0b3B0LnF1ZXVlID0gXCJmeFwiO1xuXHR9XG5cblx0Ly8gUXVldWVpbmdcblx0b3B0Lm9sZCA9IG9wdC5jb21wbGV0ZTtcblxuXHRvcHQuY29tcGxldGUgPSBmdW5jdGlvbigpIHtcblx0XHRpZiAoIGlzRnVuY3Rpb24oIG9wdC5vbGQgKSApIHtcblx0XHRcdG9wdC5vbGQuY2FsbCggdGhpcyApO1xuXHRcdH1cblxuXHRcdGlmICggb3B0LnF1ZXVlICkge1xuXHRcdFx0alF1ZXJ5LmRlcXVldWUoIHRoaXMsIG9wdC5xdWV1ZSApO1xuXHRcdH1cblx0fTtcblxuXHRyZXR1cm4gb3B0O1xufTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRmYWRlVG86IGZ1bmN0aW9uKCBzcGVlZCwgdG8sIGVhc2luZywgY2FsbGJhY2sgKSB7XG5cblx0XHQvLyBTaG93IGFueSBoaWRkZW4gZWxlbWVudHMgYWZ0ZXIgc2V0dGluZyBvcGFjaXR5IHRvIDBcblx0XHRyZXR1cm4gdGhpcy5maWx0ZXIoIGlzSGlkZGVuV2l0aGluVHJlZSApLmNzcyggXCJvcGFjaXR5XCIsIDAgKS5zaG93KClcblxuXHRcdFx0Ly8gQW5pbWF0ZSB0byB0aGUgdmFsdWUgc3BlY2lmaWVkXG5cdFx0XHQuZW5kKCkuYW5pbWF0ZSggeyBvcGFjaXR5OiB0byB9LCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayApO1xuXHR9LFxuXHRhbmltYXRlOiBmdW5jdGlvbiggcHJvcCwgc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKSB7XG5cdFx0dmFyIGVtcHR5ID0galF1ZXJ5LmlzRW1wdHlPYmplY3QoIHByb3AgKSxcblx0XHRcdG9wdGFsbCA9IGpRdWVyeS5zcGVlZCggc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKSxcblx0XHRcdGRvQW5pbWF0aW9uID0gZnVuY3Rpb24oKSB7XG5cblx0XHRcdFx0Ly8gT3BlcmF0ZSBvbiBhIGNvcHkgb2YgcHJvcCBzbyBwZXItcHJvcGVydHkgZWFzaW5nIHdvbid0IGJlIGxvc3Rcblx0XHRcdFx0dmFyIGFuaW0gPSBBbmltYXRpb24oIHRoaXMsIGpRdWVyeS5leHRlbmQoIHt9LCBwcm9wICksIG9wdGFsbCApO1xuXG5cdFx0XHRcdC8vIEVtcHR5IGFuaW1hdGlvbnMsIG9yIGZpbmlzaGluZyByZXNvbHZlcyBpbW1lZGlhdGVseVxuXHRcdFx0XHRpZiAoIGVtcHR5IHx8IGRhdGFQcml2LmdldCggdGhpcywgXCJmaW5pc2hcIiApICkge1xuXHRcdFx0XHRcdGFuaW0uc3RvcCggdHJ1ZSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdFx0ZG9BbmltYXRpb24uZmluaXNoID0gZG9BbmltYXRpb247XG5cblx0XHRyZXR1cm4gZW1wdHkgfHwgb3B0YWxsLnF1ZXVlID09PSBmYWxzZSA/XG5cdFx0XHR0aGlzLmVhY2goIGRvQW5pbWF0aW9uICkgOlxuXHRcdFx0dGhpcy5xdWV1ZSggb3B0YWxsLnF1ZXVlLCBkb0FuaW1hdGlvbiApO1xuXHR9LFxuXHRzdG9wOiBmdW5jdGlvbiggdHlwZSwgY2xlYXJRdWV1ZSwgZ290b0VuZCApIHtcblx0XHR2YXIgc3RvcFF1ZXVlID0gZnVuY3Rpb24oIGhvb2tzICkge1xuXHRcdFx0dmFyIHN0b3AgPSBob29rcy5zdG9wO1xuXHRcdFx0ZGVsZXRlIGhvb2tzLnN0b3A7XG5cdFx0XHRzdG9wKCBnb3RvRW5kICk7XG5cdFx0fTtcblxuXHRcdGlmICggdHlwZW9mIHR5cGUgIT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRnb3RvRW5kID0gY2xlYXJRdWV1ZTtcblx0XHRcdGNsZWFyUXVldWUgPSB0eXBlO1xuXHRcdFx0dHlwZSA9IHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0aWYgKCBjbGVhclF1ZXVlICYmIHR5cGUgIT09IGZhbHNlICkge1xuXHRcdFx0dGhpcy5xdWV1ZSggdHlwZSB8fCBcImZ4XCIsIFtdICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgZGVxdWV1ZSA9IHRydWUsXG5cdFx0XHRcdGluZGV4ID0gdHlwZSAhPSBudWxsICYmIHR5cGUgKyBcInF1ZXVlSG9va3NcIixcblx0XHRcdFx0dGltZXJzID0galF1ZXJ5LnRpbWVycyxcblx0XHRcdFx0ZGF0YSA9IGRhdGFQcml2LmdldCggdGhpcyApO1xuXG5cdFx0XHRpZiAoIGluZGV4ICkge1xuXHRcdFx0XHRpZiAoIGRhdGFbIGluZGV4IF0gJiYgZGF0YVsgaW5kZXggXS5zdG9wICkge1xuXHRcdFx0XHRcdHN0b3BRdWV1ZSggZGF0YVsgaW5kZXggXSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRmb3IgKCBpbmRleCBpbiBkYXRhICkge1xuXHRcdFx0XHRcdGlmICggZGF0YVsgaW5kZXggXSAmJiBkYXRhWyBpbmRleCBdLnN0b3AgJiYgcnJ1bi50ZXN0KCBpbmRleCApICkge1xuXHRcdFx0XHRcdFx0c3RvcFF1ZXVlKCBkYXRhWyBpbmRleCBdICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGZvciAoIGluZGV4ID0gdGltZXJzLmxlbmd0aDsgaW5kZXgtLTsgKSB7XG5cdFx0XHRcdGlmICggdGltZXJzWyBpbmRleCBdLmVsZW0gPT09IHRoaXMgJiZcblx0XHRcdFx0XHQoIHR5cGUgPT0gbnVsbCB8fCB0aW1lcnNbIGluZGV4IF0ucXVldWUgPT09IHR5cGUgKSApIHtcblxuXHRcdFx0XHRcdHRpbWVyc1sgaW5kZXggXS5hbmltLnN0b3AoIGdvdG9FbmQgKTtcblx0XHRcdFx0XHRkZXF1ZXVlID0gZmFsc2U7XG5cdFx0XHRcdFx0dGltZXJzLnNwbGljZSggaW5kZXgsIDEgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBTdGFydCB0aGUgbmV4dCBpbiB0aGUgcXVldWUgaWYgdGhlIGxhc3Qgc3RlcCB3YXNuJ3QgZm9yY2VkLlxuXHRcdFx0Ly8gVGltZXJzIGN1cnJlbnRseSB3aWxsIGNhbGwgdGhlaXIgY29tcGxldGUgY2FsbGJhY2tzLCB3aGljaFxuXHRcdFx0Ly8gd2lsbCBkZXF1ZXVlIGJ1dCBvbmx5IGlmIHRoZXkgd2VyZSBnb3RvRW5kLlxuXHRcdFx0aWYgKCBkZXF1ZXVlIHx8ICFnb3RvRW5kICkge1xuXHRcdFx0XHRqUXVlcnkuZGVxdWV1ZSggdGhpcywgdHlwZSApO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0fSxcblx0ZmluaXNoOiBmdW5jdGlvbiggdHlwZSApIHtcblx0XHRpZiAoIHR5cGUgIT09IGZhbHNlICkge1xuXHRcdFx0dHlwZSA9IHR5cGUgfHwgXCJmeFwiO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBpbmRleCxcblx0XHRcdFx0ZGF0YSA9IGRhdGFQcml2LmdldCggdGhpcyApLFxuXHRcdFx0XHRxdWV1ZSA9IGRhdGFbIHR5cGUgKyBcInF1ZXVlXCIgXSxcblx0XHRcdFx0aG9va3MgPSBkYXRhWyB0eXBlICsgXCJxdWV1ZUhvb2tzXCIgXSxcblx0XHRcdFx0dGltZXJzID0galF1ZXJ5LnRpbWVycyxcblx0XHRcdFx0bGVuZ3RoID0gcXVldWUgPyBxdWV1ZS5sZW5ndGggOiAwO1xuXG5cdFx0XHQvLyBFbmFibGUgZmluaXNoaW5nIGZsYWcgb24gcHJpdmF0ZSBkYXRhXG5cdFx0XHRkYXRhLmZpbmlzaCA9IHRydWU7XG5cblx0XHRcdC8vIEVtcHR5IHRoZSBxdWV1ZSBmaXJzdFxuXHRcdFx0alF1ZXJ5LnF1ZXVlKCB0aGlzLCB0eXBlLCBbXSApO1xuXG5cdFx0XHRpZiAoIGhvb2tzICYmIGhvb2tzLnN0b3AgKSB7XG5cdFx0XHRcdGhvb2tzLnN0b3AuY2FsbCggdGhpcywgdHJ1ZSApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBMb29rIGZvciBhbnkgYWN0aXZlIGFuaW1hdGlvbnMsIGFuZCBmaW5pc2ggdGhlbVxuXHRcdFx0Zm9yICggaW5kZXggPSB0aW1lcnMubGVuZ3RoOyBpbmRleC0tOyApIHtcblx0XHRcdFx0aWYgKCB0aW1lcnNbIGluZGV4IF0uZWxlbSA9PT0gdGhpcyAmJiB0aW1lcnNbIGluZGV4IF0ucXVldWUgPT09IHR5cGUgKSB7XG5cdFx0XHRcdFx0dGltZXJzWyBpbmRleCBdLmFuaW0uc3RvcCggdHJ1ZSApO1xuXHRcdFx0XHRcdHRpbWVycy5zcGxpY2UoIGluZGV4LCAxICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gTG9vayBmb3IgYW55IGFuaW1hdGlvbnMgaW4gdGhlIG9sZCBxdWV1ZSBhbmQgZmluaXNoIHRoZW1cblx0XHRcdGZvciAoIGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KysgKSB7XG5cdFx0XHRcdGlmICggcXVldWVbIGluZGV4IF0gJiYgcXVldWVbIGluZGV4IF0uZmluaXNoICkge1xuXHRcdFx0XHRcdHF1ZXVlWyBpbmRleCBdLmZpbmlzaC5jYWxsKCB0aGlzICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gVHVybiBvZmYgZmluaXNoaW5nIGZsYWdcblx0XHRcdGRlbGV0ZSBkYXRhLmZpbmlzaDtcblx0XHR9ICk7XG5cdH1cbn0gKTtcblxualF1ZXJ5LmVhY2goIFsgXCJ0b2dnbGVcIiwgXCJzaG93XCIsIFwiaGlkZVwiIF0sIGZ1bmN0aW9uKCBpLCBuYW1lICkge1xuXHR2YXIgY3NzRm4gPSBqUXVlcnkuZm5bIG5hbWUgXTtcblx0alF1ZXJ5LmZuWyBuYW1lIF0gPSBmdW5jdGlvbiggc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKSB7XG5cdFx0cmV0dXJuIHNwZWVkID09IG51bGwgfHwgdHlwZW9mIHNwZWVkID09PSBcImJvb2xlYW5cIiA/XG5cdFx0XHRjc3NGbi5hcHBseSggdGhpcywgYXJndW1lbnRzICkgOlxuXHRcdFx0dGhpcy5hbmltYXRlKCBnZW5GeCggbmFtZSwgdHJ1ZSApLCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayApO1xuXHR9O1xufSApO1xuXG4vLyBHZW5lcmF0ZSBzaG9ydGN1dHMgZm9yIGN1c3RvbSBhbmltYXRpb25zXG5qUXVlcnkuZWFjaCgge1xuXHRzbGlkZURvd246IGdlbkZ4KCBcInNob3dcIiApLFxuXHRzbGlkZVVwOiBnZW5GeCggXCJoaWRlXCIgKSxcblx0c2xpZGVUb2dnbGU6IGdlbkZ4KCBcInRvZ2dsZVwiICksXG5cdGZhZGVJbjogeyBvcGFjaXR5OiBcInNob3dcIiB9LFxuXHRmYWRlT3V0OiB7IG9wYWNpdHk6IFwiaGlkZVwiIH0sXG5cdGZhZGVUb2dnbGU6IHsgb3BhY2l0eTogXCJ0b2dnbGVcIiB9XG59LCBmdW5jdGlvbiggbmFtZSwgcHJvcHMgKSB7XG5cdGpRdWVyeS5mblsgbmFtZSBdID0gZnVuY3Rpb24oIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICkge1xuXHRcdHJldHVybiB0aGlzLmFuaW1hdGUoIHByb3BzLCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayApO1xuXHR9O1xufSApO1xuXG5qUXVlcnkudGltZXJzID0gW107XG5qUXVlcnkuZngudGljayA9IGZ1bmN0aW9uKCkge1xuXHR2YXIgdGltZXIsXG5cdFx0aSA9IDAsXG5cdFx0dGltZXJzID0galF1ZXJ5LnRpbWVycztcblxuXHRmeE5vdyA9IERhdGUubm93KCk7XG5cblx0Zm9yICggOyBpIDwgdGltZXJzLmxlbmd0aDsgaSsrICkge1xuXHRcdHRpbWVyID0gdGltZXJzWyBpIF07XG5cblx0XHQvLyBSdW4gdGhlIHRpbWVyIGFuZCBzYWZlbHkgcmVtb3ZlIGl0IHdoZW4gZG9uZSAoYWxsb3dpbmcgZm9yIGV4dGVybmFsIHJlbW92YWwpXG5cdFx0aWYgKCAhdGltZXIoKSAmJiB0aW1lcnNbIGkgXSA9PT0gdGltZXIgKSB7XG5cdFx0XHR0aW1lcnMuc3BsaWNlKCBpLS0sIDEgKTtcblx0XHR9XG5cdH1cblxuXHRpZiAoICF0aW1lcnMubGVuZ3RoICkge1xuXHRcdGpRdWVyeS5meC5zdG9wKCk7XG5cdH1cblx0ZnhOb3cgPSB1bmRlZmluZWQ7XG59O1xuXG5qUXVlcnkuZngudGltZXIgPSBmdW5jdGlvbiggdGltZXIgKSB7XG5cdGpRdWVyeS50aW1lcnMucHVzaCggdGltZXIgKTtcblx0alF1ZXJ5LmZ4LnN0YXJ0KCk7XG59O1xuXG5qUXVlcnkuZnguaW50ZXJ2YWwgPSAxMztcbmpRdWVyeS5meC5zdGFydCA9IGZ1bmN0aW9uKCkge1xuXHRpZiAoIGluUHJvZ3Jlc3MgKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0aW5Qcm9ncmVzcyA9IHRydWU7XG5cdHNjaGVkdWxlKCk7XG59O1xuXG5qUXVlcnkuZnguc3RvcCA9IGZ1bmN0aW9uKCkge1xuXHRpblByb2dyZXNzID0gbnVsbDtcbn07XG5cbmpRdWVyeS5meC5zcGVlZHMgPSB7XG5cdHNsb3c6IDYwMCxcblx0ZmFzdDogMjAwLFxuXG5cdC8vIERlZmF1bHQgc3BlZWRcblx0X2RlZmF1bHQ6IDQwMFxufTtcblxuXG4vLyBCYXNlZCBvZmYgb2YgdGhlIHBsdWdpbiBieSBDbGludCBIZWxmZXJzLCB3aXRoIHBlcm1pc3Npb24uXG4vLyBodHRwczovL3dlYi5hcmNoaXZlLm9yZy93ZWIvMjAxMDAzMjQwMTQ3NDcvaHR0cDovL2JsaW5kc2lnbmFscy5jb20vaW5kZXgucGhwLzIwMDkvMDcvanF1ZXJ5LWRlbGF5L1xualF1ZXJ5LmZuLmRlbGF5ID0gZnVuY3Rpb24oIHRpbWUsIHR5cGUgKSB7XG5cdHRpbWUgPSBqUXVlcnkuZnggPyBqUXVlcnkuZnguc3BlZWRzWyB0aW1lIF0gfHwgdGltZSA6IHRpbWU7XG5cdHR5cGUgPSB0eXBlIHx8IFwiZnhcIjtcblxuXHRyZXR1cm4gdGhpcy5xdWV1ZSggdHlwZSwgZnVuY3Rpb24oIG5leHQsIGhvb2tzICkge1xuXHRcdHZhciB0aW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQoIG5leHQsIHRpbWUgKTtcblx0XHRob29rcy5zdG9wID0gZnVuY3Rpb24oKSB7XG5cdFx0XHR3aW5kb3cuY2xlYXJUaW1lb3V0KCB0aW1lb3V0ICk7XG5cdFx0fTtcblx0fSApO1xufTtcblxuXG4oIGZ1bmN0aW9uKCkge1xuXHR2YXIgaW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImlucHV0XCIgKSxcblx0XHRzZWxlY3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcInNlbGVjdFwiICksXG5cdFx0b3B0ID0gc2VsZWN0LmFwcGVuZENoaWxkKCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcIm9wdGlvblwiICkgKTtcblxuXHRpbnB1dC50eXBlID0gXCJjaGVja2JveFwiO1xuXG5cdC8vIFN1cHBvcnQ6IEFuZHJvaWQgPD00LjMgb25seVxuXHQvLyBEZWZhdWx0IHZhbHVlIGZvciBhIGNoZWNrYm94IHNob3VsZCBiZSBcIm9uXCJcblx0c3VwcG9ydC5jaGVja09uID0gaW5wdXQudmFsdWUgIT09IFwiXCI7XG5cblx0Ly8gU3VwcG9ydDogSUUgPD0xMSBvbmx5XG5cdC8vIE11c3QgYWNjZXNzIHNlbGVjdGVkSW5kZXggdG8gbWFrZSBkZWZhdWx0IG9wdGlvbnMgc2VsZWN0XG5cdHN1cHBvcnQub3B0U2VsZWN0ZWQgPSBvcHQuc2VsZWN0ZWQ7XG5cblx0Ly8gU3VwcG9ydDogSUUgPD0xMSBvbmx5XG5cdC8vIEFuIGlucHV0IGxvc2VzIGl0cyB2YWx1ZSBhZnRlciBiZWNvbWluZyBhIHJhZGlvXG5cdGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJpbnB1dFwiICk7XG5cdGlucHV0LnZhbHVlID0gXCJ0XCI7XG5cdGlucHV0LnR5cGUgPSBcInJhZGlvXCI7XG5cdHN1cHBvcnQucmFkaW9WYWx1ZSA9IGlucHV0LnZhbHVlID09PSBcInRcIjtcbn0gKSgpO1xuXG5cbnZhciBib29sSG9vayxcblx0YXR0ckhhbmRsZSA9IGpRdWVyeS5leHByLmF0dHJIYW5kbGU7XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0YXR0cjogZnVuY3Rpb24oIG5hbWUsIHZhbHVlICkge1xuXHRcdHJldHVybiBhY2Nlc3MoIHRoaXMsIGpRdWVyeS5hdHRyLCBuYW1lLCB2YWx1ZSwgYXJndW1lbnRzLmxlbmd0aCA+IDEgKTtcblx0fSxcblxuXHRyZW1vdmVBdHRyOiBmdW5jdGlvbiggbmFtZSApIHtcblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdGpRdWVyeS5yZW1vdmVBdHRyKCB0aGlzLCBuYW1lICk7XG5cdFx0fSApO1xuXHR9XG59ICk7XG5cbmpRdWVyeS5leHRlbmQoIHtcblx0YXR0cjogZnVuY3Rpb24oIGVsZW0sIG5hbWUsIHZhbHVlICkge1xuXHRcdHZhciByZXQsIGhvb2tzLFxuXHRcdFx0blR5cGUgPSBlbGVtLm5vZGVUeXBlO1xuXG5cdFx0Ly8gRG9uJ3QgZ2V0L3NldCBhdHRyaWJ1dGVzIG9uIHRleHQsIGNvbW1lbnQgYW5kIGF0dHJpYnV0ZSBub2Rlc1xuXHRcdGlmICggblR5cGUgPT09IDMgfHwgblR5cGUgPT09IDggfHwgblR5cGUgPT09IDIgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gRmFsbGJhY2sgdG8gcHJvcCB3aGVuIGF0dHJpYnV0ZXMgYXJlIG5vdCBzdXBwb3J0ZWRcblx0XHRpZiAoIHR5cGVvZiBlbGVtLmdldEF0dHJpYnV0ZSA9PT0gXCJ1bmRlZmluZWRcIiApIHtcblx0XHRcdHJldHVybiBqUXVlcnkucHJvcCggZWxlbSwgbmFtZSwgdmFsdWUgKTtcblx0XHR9XG5cblx0XHQvLyBBdHRyaWJ1dGUgaG9va3MgYXJlIGRldGVybWluZWQgYnkgdGhlIGxvd2VyY2FzZSB2ZXJzaW9uXG5cdFx0Ly8gR3JhYiBuZWNlc3NhcnkgaG9vayBpZiBvbmUgaXMgZGVmaW5lZFxuXHRcdGlmICggblR5cGUgIT09IDEgfHwgIWpRdWVyeS5pc1hNTERvYyggZWxlbSApICkge1xuXHRcdFx0aG9va3MgPSBqUXVlcnkuYXR0ckhvb2tzWyBuYW1lLnRvTG93ZXJDYXNlKCkgXSB8fFxuXHRcdFx0XHQoIGpRdWVyeS5leHByLm1hdGNoLmJvb2wudGVzdCggbmFtZSApID8gYm9vbEhvb2sgOiB1bmRlZmluZWQgKTtcblx0XHR9XG5cblx0XHRpZiAoIHZhbHVlICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRpZiAoIHZhbHVlID09PSBudWxsICkge1xuXHRcdFx0XHRqUXVlcnkucmVtb3ZlQXR0ciggZWxlbSwgbmFtZSApO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGlmICggaG9va3MgJiYgXCJzZXRcIiBpbiBob29rcyAmJlxuXHRcdFx0XHQoIHJldCA9IGhvb2tzLnNldCggZWxlbSwgdmFsdWUsIG5hbWUgKSApICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdHJldHVybiByZXQ7XG5cdFx0XHR9XG5cblx0XHRcdGVsZW0uc2V0QXR0cmlidXRlKCBuYW1lLCB2YWx1ZSArIFwiXCIgKTtcblx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHR9XG5cblx0XHRpZiAoIGhvb2tzICYmIFwiZ2V0XCIgaW4gaG9va3MgJiYgKCByZXQgPSBob29rcy5nZXQoIGVsZW0sIG5hbWUgKSApICE9PSBudWxsICkge1xuXHRcdFx0cmV0dXJuIHJldDtcblx0XHR9XG5cblx0XHRyZXQgPSBqUXVlcnkuZmluZC5hdHRyKCBlbGVtLCBuYW1lICk7XG5cblx0XHQvLyBOb24tZXhpc3RlbnQgYXR0cmlidXRlcyByZXR1cm4gbnVsbCwgd2Ugbm9ybWFsaXplIHRvIHVuZGVmaW5lZFxuXHRcdHJldHVybiByZXQgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IHJldDtcblx0fSxcblxuXHRhdHRySG9va3M6IHtcblx0XHR0eXBlOiB7XG5cdFx0XHRzZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSApIHtcblx0XHRcdFx0aWYgKCAhc3VwcG9ydC5yYWRpb1ZhbHVlICYmIHZhbHVlID09PSBcInJhZGlvXCIgJiZcblx0XHRcdFx0XHRub2RlTmFtZSggZWxlbSwgXCJpbnB1dFwiICkgKSB7XG5cdFx0XHRcdFx0dmFyIHZhbCA9IGVsZW0udmFsdWU7XG5cdFx0XHRcdFx0ZWxlbS5zZXRBdHRyaWJ1dGUoIFwidHlwZVwiLCB2YWx1ZSApO1xuXHRcdFx0XHRcdGlmICggdmFsICkge1xuXHRcdFx0XHRcdFx0ZWxlbS52YWx1ZSA9IHZhbDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIHZhbHVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXG5cdHJlbW92ZUF0dHI6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSApIHtcblx0XHR2YXIgbmFtZSxcblx0XHRcdGkgPSAwLFxuXG5cdFx0XHQvLyBBdHRyaWJ1dGUgbmFtZXMgY2FuIGNvbnRhaW4gbm9uLUhUTUwgd2hpdGVzcGFjZSBjaGFyYWN0ZXJzXG5cdFx0XHQvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zeW50YXguaHRtbCNhdHRyaWJ1dGVzLTJcblx0XHRcdGF0dHJOYW1lcyA9IHZhbHVlICYmIHZhbHVlLm1hdGNoKCBybm90aHRtbHdoaXRlICk7XG5cblx0XHRpZiAoIGF0dHJOYW1lcyAmJiBlbGVtLm5vZGVUeXBlID09PSAxICkge1xuXHRcdFx0d2hpbGUgKCAoIG5hbWUgPSBhdHRyTmFtZXNbIGkrKyBdICkgKSB7XG5cdFx0XHRcdGVsZW0ucmVtb3ZlQXR0cmlidXRlKCBuYW1lICk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59ICk7XG5cbi8vIEhvb2tzIGZvciBib29sZWFuIGF0dHJpYnV0ZXNcbmJvb2xIb29rID0ge1xuXHRzZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSwgbmFtZSApIHtcblx0XHRpZiAoIHZhbHVlID09PSBmYWxzZSApIHtcblxuXHRcdFx0Ly8gUmVtb3ZlIGJvb2xlYW4gYXR0cmlidXRlcyB3aGVuIHNldCB0byBmYWxzZVxuXHRcdFx0alF1ZXJ5LnJlbW92ZUF0dHIoIGVsZW0sIG5hbWUgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0ZWxlbS5zZXRBdHRyaWJ1dGUoIG5hbWUsIG5hbWUgKTtcblx0XHR9XG5cdFx0cmV0dXJuIG5hbWU7XG5cdH1cbn07XG5cbmpRdWVyeS5lYWNoKCBqUXVlcnkuZXhwci5tYXRjaC5ib29sLnNvdXJjZS5tYXRjaCggL1xcdysvZyApLCBmdW5jdGlvbiggaSwgbmFtZSApIHtcblx0dmFyIGdldHRlciA9IGF0dHJIYW5kbGVbIG5hbWUgXSB8fCBqUXVlcnkuZmluZC5hdHRyO1xuXG5cdGF0dHJIYW5kbGVbIG5hbWUgXSA9IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCBpc1hNTCApIHtcblx0XHR2YXIgcmV0LCBoYW5kbGUsXG5cdFx0XHRsb3dlcmNhc2VOYW1lID0gbmFtZS50b0xvd2VyQ2FzZSgpO1xuXG5cdFx0aWYgKCAhaXNYTUwgKSB7XG5cblx0XHRcdC8vIEF2b2lkIGFuIGluZmluaXRlIGxvb3AgYnkgdGVtcG9yYXJpbHkgcmVtb3ZpbmcgdGhpcyBmdW5jdGlvbiBmcm9tIHRoZSBnZXR0ZXJcblx0XHRcdGhhbmRsZSA9IGF0dHJIYW5kbGVbIGxvd2VyY2FzZU5hbWUgXTtcblx0XHRcdGF0dHJIYW5kbGVbIGxvd2VyY2FzZU5hbWUgXSA9IHJldDtcblx0XHRcdHJldCA9IGdldHRlciggZWxlbSwgbmFtZSwgaXNYTUwgKSAhPSBudWxsID9cblx0XHRcdFx0bG93ZXJjYXNlTmFtZSA6XG5cdFx0XHRcdG51bGw7XG5cdFx0XHRhdHRySGFuZGxlWyBsb3dlcmNhc2VOYW1lIF0gPSBoYW5kbGU7XG5cdFx0fVxuXHRcdHJldHVybiByZXQ7XG5cdH07XG59ICk7XG5cblxuXG5cbnZhciByZm9jdXNhYmxlID0gL14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8YnV0dG9uKSQvaSxcblx0cmNsaWNrYWJsZSA9IC9eKD86YXxhcmVhKSQvaTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRwcm9wOiBmdW5jdGlvbiggbmFtZSwgdmFsdWUgKSB7XG5cdFx0cmV0dXJuIGFjY2VzcyggdGhpcywgalF1ZXJ5LnByb3AsIG5hbWUsIHZhbHVlLCBhcmd1bWVudHMubGVuZ3RoID4gMSApO1xuXHR9LFxuXG5cdHJlbW92ZVByb3A6IGZ1bmN0aW9uKCBuYW1lICkge1xuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0ZGVsZXRlIHRoaXNbIGpRdWVyeS5wcm9wRml4WyBuYW1lIF0gfHwgbmFtZSBdO1xuXHRcdH0gKTtcblx0fVxufSApO1xuXG5qUXVlcnkuZXh0ZW5kKCB7XG5cdHByb3A6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCB2YWx1ZSApIHtcblx0XHR2YXIgcmV0LCBob29rcyxcblx0XHRcdG5UeXBlID0gZWxlbS5ub2RlVHlwZTtcblxuXHRcdC8vIERvbid0IGdldC9zZXQgcHJvcGVydGllcyBvbiB0ZXh0LCBjb21tZW50IGFuZCBhdHRyaWJ1dGUgbm9kZXNcblx0XHRpZiAoIG5UeXBlID09PSAzIHx8IG5UeXBlID09PSA4IHx8IG5UeXBlID09PSAyICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmICggblR5cGUgIT09IDEgfHwgIWpRdWVyeS5pc1hNTERvYyggZWxlbSApICkge1xuXG5cdFx0XHQvLyBGaXggbmFtZSBhbmQgYXR0YWNoIGhvb2tzXG5cdFx0XHRuYW1lID0galF1ZXJ5LnByb3BGaXhbIG5hbWUgXSB8fCBuYW1lO1xuXHRcdFx0aG9va3MgPSBqUXVlcnkucHJvcEhvb2tzWyBuYW1lIF07XG5cdFx0fVxuXG5cdFx0aWYgKCB2YWx1ZSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0aWYgKCBob29rcyAmJiBcInNldFwiIGluIGhvb2tzICYmXG5cdFx0XHRcdCggcmV0ID0gaG9va3Muc2V0KCBlbGVtLCB2YWx1ZSwgbmFtZSApICkgIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0cmV0dXJuIHJldDtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuICggZWxlbVsgbmFtZSBdID0gdmFsdWUgKTtcblx0XHR9XG5cblx0XHRpZiAoIGhvb2tzICYmIFwiZ2V0XCIgaW4gaG9va3MgJiYgKCByZXQgPSBob29rcy5nZXQoIGVsZW0sIG5hbWUgKSApICE9PSBudWxsICkge1xuXHRcdFx0cmV0dXJuIHJldDtcblx0XHR9XG5cblx0XHRyZXR1cm4gZWxlbVsgbmFtZSBdO1xuXHR9LFxuXG5cdHByb3BIb29rczoge1xuXHRcdHRhYkluZGV4OiB7XG5cdFx0XHRnZXQ6IGZ1bmN0aW9uKCBlbGVtICkge1xuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDw9OSAtIDExIG9ubHlcblx0XHRcdFx0Ly8gZWxlbS50YWJJbmRleCBkb2Vzbid0IGFsd2F5cyByZXR1cm4gdGhlXG5cdFx0XHRcdC8vIGNvcnJlY3QgdmFsdWUgd2hlbiBpdCBoYXNuJ3QgYmVlbiBleHBsaWNpdGx5IHNldFxuXHRcdFx0XHQvLyBodHRwczovL3dlYi5hcmNoaXZlLm9yZy93ZWIvMjAxNDExMTYyMzMzNDcvaHR0cDovL2ZsdWlkcHJvamVjdC5vcmcvYmxvZy8yMDA4LzAxLzA5L2dldHRpbmctc2V0dGluZy1hbmQtcmVtb3ZpbmctdGFiaW5kZXgtdmFsdWVzLXdpdGgtamF2YXNjcmlwdC9cblx0XHRcdFx0Ly8gVXNlIHByb3BlciBhdHRyaWJ1dGUgcmV0cmlldmFsKCMxMjA3Milcblx0XHRcdFx0dmFyIHRhYmluZGV4ID0galF1ZXJ5LmZpbmQuYXR0ciggZWxlbSwgXCJ0YWJpbmRleFwiICk7XG5cblx0XHRcdFx0aWYgKCB0YWJpbmRleCApIHtcblx0XHRcdFx0XHRyZXR1cm4gcGFyc2VJbnQoIHRhYmluZGV4LCAxMCApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdHJmb2N1c2FibGUudGVzdCggZWxlbS5ub2RlTmFtZSApIHx8XG5cdFx0XHRcdFx0cmNsaWNrYWJsZS50ZXN0KCBlbGVtLm5vZGVOYW1lICkgJiZcblx0XHRcdFx0XHRlbGVtLmhyZWZcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0cmV0dXJuIDA7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gLTE7XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXG5cdHByb3BGaXg6IHtcblx0XHRcImZvclwiOiBcImh0bWxGb3JcIixcblx0XHRcImNsYXNzXCI6IFwiY2xhc3NOYW1lXCJcblx0fVxufSApO1xuXG4vLyBTdXBwb3J0OiBJRSA8PTExIG9ubHlcbi8vIEFjY2Vzc2luZyB0aGUgc2VsZWN0ZWRJbmRleCBwcm9wZXJ0eVxuLy8gZm9yY2VzIHRoZSBicm93c2VyIHRvIHJlc3BlY3Qgc2V0dGluZyBzZWxlY3RlZFxuLy8gb24gdGhlIG9wdGlvblxuLy8gVGhlIGdldHRlciBlbnN1cmVzIGEgZGVmYXVsdCBvcHRpb24gaXMgc2VsZWN0ZWRcbi8vIHdoZW4gaW4gYW4gb3B0Z3JvdXBcbi8vIGVzbGludCBydWxlIFwibm8tdW51c2VkLWV4cHJlc3Npb25zXCIgaXMgZGlzYWJsZWQgZm9yIHRoaXMgY29kZVxuLy8gc2luY2UgaXQgY29uc2lkZXJzIHN1Y2ggYWNjZXNzaW9ucyBub29wXG5pZiAoICFzdXBwb3J0Lm9wdFNlbGVjdGVkICkge1xuXHRqUXVlcnkucHJvcEhvb2tzLnNlbGVjdGVkID0ge1xuXHRcdGdldDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cblx0XHRcdC8qIGVzbGludCBuby11bnVzZWQtZXhwcmVzc2lvbnM6IFwib2ZmXCIgKi9cblxuXHRcdFx0dmFyIHBhcmVudCA9IGVsZW0ucGFyZW50Tm9kZTtcblx0XHRcdGlmICggcGFyZW50ICYmIHBhcmVudC5wYXJlbnROb2RlICkge1xuXHRcdFx0XHRwYXJlbnQucGFyZW50Tm9kZS5zZWxlY3RlZEluZGV4O1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0fSxcblx0XHRzZXQ6IGZ1bmN0aW9uKCBlbGVtICkge1xuXG5cdFx0XHQvKiBlc2xpbnQgbm8tdW51c2VkLWV4cHJlc3Npb25zOiBcIm9mZlwiICovXG5cblx0XHRcdHZhciBwYXJlbnQgPSBlbGVtLnBhcmVudE5vZGU7XG5cdFx0XHRpZiAoIHBhcmVudCApIHtcblx0XHRcdFx0cGFyZW50LnNlbGVjdGVkSW5kZXg7XG5cblx0XHRcdFx0aWYgKCBwYXJlbnQucGFyZW50Tm9kZSApIHtcblx0XHRcdFx0XHRwYXJlbnQucGFyZW50Tm9kZS5zZWxlY3RlZEluZGV4O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xufVxuXG5qUXVlcnkuZWFjaCggW1xuXHRcInRhYkluZGV4XCIsXG5cdFwicmVhZE9ubHlcIixcblx0XCJtYXhMZW5ndGhcIixcblx0XCJjZWxsU3BhY2luZ1wiLFxuXHRcImNlbGxQYWRkaW5nXCIsXG5cdFwicm93U3BhblwiLFxuXHRcImNvbFNwYW5cIixcblx0XCJ1c2VNYXBcIixcblx0XCJmcmFtZUJvcmRlclwiLFxuXHRcImNvbnRlbnRFZGl0YWJsZVwiXG5dLCBmdW5jdGlvbigpIHtcblx0alF1ZXJ5LnByb3BGaXhbIHRoaXMudG9Mb3dlckNhc2UoKSBdID0gdGhpcztcbn0gKTtcblxuXG5cblxuXHQvLyBTdHJpcCBhbmQgY29sbGFwc2Ugd2hpdGVzcGFjZSBhY2NvcmRpbmcgdG8gSFRNTCBzcGVjXG5cdC8vIGh0dHBzOi8vaW5mcmEuc3BlYy53aGF0d2cub3JnLyNzdHJpcC1hbmQtY29sbGFwc2UtYXNjaWktd2hpdGVzcGFjZVxuXHRmdW5jdGlvbiBzdHJpcEFuZENvbGxhcHNlKCB2YWx1ZSApIHtcblx0XHR2YXIgdG9rZW5zID0gdmFsdWUubWF0Y2goIHJub3RodG1sd2hpdGUgKSB8fCBbXTtcblx0XHRyZXR1cm4gdG9rZW5zLmpvaW4oIFwiIFwiICk7XG5cdH1cblxuXG5mdW5jdGlvbiBnZXRDbGFzcyggZWxlbSApIHtcblx0cmV0dXJuIGVsZW0uZ2V0QXR0cmlidXRlICYmIGVsZW0uZ2V0QXR0cmlidXRlKCBcImNsYXNzXCIgKSB8fCBcIlwiO1xufVxuXG5mdW5jdGlvbiBjbGFzc2VzVG9BcnJheSggdmFsdWUgKSB7XG5cdGlmICggQXJyYXkuaXNBcnJheSggdmFsdWUgKSApIHtcblx0XHRyZXR1cm4gdmFsdWU7XG5cdH1cblx0aWYgKCB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgKSB7XG5cdFx0cmV0dXJuIHZhbHVlLm1hdGNoKCBybm90aHRtbHdoaXRlICkgfHwgW107XG5cdH1cblx0cmV0dXJuIFtdO1xufVxuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdGFkZENsYXNzOiBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0dmFyIGNsYXNzZXMsIGVsZW0sIGN1ciwgY3VyVmFsdWUsIGNsYXp6LCBqLCBmaW5hbFZhbHVlLFxuXHRcdFx0aSA9IDA7XG5cblx0XHRpZiAoIGlzRnVuY3Rpb24oIHZhbHVlICkgKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbiggaiApIHtcblx0XHRcdFx0alF1ZXJ5KCB0aGlzICkuYWRkQ2xhc3MoIHZhbHVlLmNhbGwoIHRoaXMsIGosIGdldENsYXNzKCB0aGlzICkgKSApO1xuXHRcdFx0fSApO1xuXHRcdH1cblxuXHRcdGNsYXNzZXMgPSBjbGFzc2VzVG9BcnJheSggdmFsdWUgKTtcblxuXHRcdGlmICggY2xhc3Nlcy5sZW5ndGggKSB7XG5cdFx0XHR3aGlsZSAoICggZWxlbSA9IHRoaXNbIGkrKyBdICkgKSB7XG5cdFx0XHRcdGN1clZhbHVlID0gZ2V0Q2xhc3MoIGVsZW0gKTtcblx0XHRcdFx0Y3VyID0gZWxlbS5ub2RlVHlwZSA9PT0gMSAmJiAoIFwiIFwiICsgc3RyaXBBbmRDb2xsYXBzZSggY3VyVmFsdWUgKSArIFwiIFwiICk7XG5cblx0XHRcdFx0aWYgKCBjdXIgKSB7XG5cdFx0XHRcdFx0aiA9IDA7XG5cdFx0XHRcdFx0d2hpbGUgKCAoIGNsYXp6ID0gY2xhc3Nlc1sgaisrIF0gKSApIHtcblx0XHRcdFx0XHRcdGlmICggY3VyLmluZGV4T2YoIFwiIFwiICsgY2xhenogKyBcIiBcIiApIDwgMCApIHtcblx0XHRcdFx0XHRcdFx0Y3VyICs9IGNsYXp6ICsgXCIgXCI7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gT25seSBhc3NpZ24gaWYgZGlmZmVyZW50IHRvIGF2b2lkIHVubmVlZGVkIHJlbmRlcmluZy5cblx0XHRcdFx0XHRmaW5hbFZhbHVlID0gc3RyaXBBbmRDb2xsYXBzZSggY3VyICk7XG5cdFx0XHRcdFx0aWYgKCBjdXJWYWx1ZSAhPT0gZmluYWxWYWx1ZSApIHtcblx0XHRcdFx0XHRcdGVsZW0uc2V0QXR0cmlidXRlKCBcImNsYXNzXCIsIGZpbmFsVmFsdWUgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRyZW1vdmVDbGFzczogZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdHZhciBjbGFzc2VzLCBlbGVtLCBjdXIsIGN1clZhbHVlLCBjbGF6eiwgaiwgZmluYWxWYWx1ZSxcblx0XHRcdGkgPSAwO1xuXG5cdFx0aWYgKCBpc0Z1bmN0aW9uKCB2YWx1ZSApICkge1xuXHRcdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oIGogKSB7XG5cdFx0XHRcdGpRdWVyeSggdGhpcyApLnJlbW92ZUNsYXNzKCB2YWx1ZS5jYWxsKCB0aGlzLCBqLCBnZXRDbGFzcyggdGhpcyApICkgKTtcblx0XHRcdH0gKTtcblx0XHR9XG5cblx0XHRpZiAoICFhcmd1bWVudHMubGVuZ3RoICkge1xuXHRcdFx0cmV0dXJuIHRoaXMuYXR0ciggXCJjbGFzc1wiLCBcIlwiICk7XG5cdFx0fVxuXG5cdFx0Y2xhc3NlcyA9IGNsYXNzZXNUb0FycmF5KCB2YWx1ZSApO1xuXG5cdFx0aWYgKCBjbGFzc2VzLmxlbmd0aCApIHtcblx0XHRcdHdoaWxlICggKCBlbGVtID0gdGhpc1sgaSsrIF0gKSApIHtcblx0XHRcdFx0Y3VyVmFsdWUgPSBnZXRDbGFzcyggZWxlbSApO1xuXG5cdFx0XHRcdC8vIFRoaXMgZXhwcmVzc2lvbiBpcyBoZXJlIGZvciBiZXR0ZXIgY29tcHJlc3NpYmlsaXR5IChzZWUgYWRkQ2xhc3MpXG5cdFx0XHRcdGN1ciA9IGVsZW0ubm9kZVR5cGUgPT09IDEgJiYgKCBcIiBcIiArIHN0cmlwQW5kQ29sbGFwc2UoIGN1clZhbHVlICkgKyBcIiBcIiApO1xuXG5cdFx0XHRcdGlmICggY3VyICkge1xuXHRcdFx0XHRcdGogPSAwO1xuXHRcdFx0XHRcdHdoaWxlICggKCBjbGF6eiA9IGNsYXNzZXNbIGorKyBdICkgKSB7XG5cblx0XHRcdFx0XHRcdC8vIFJlbW92ZSAqYWxsKiBpbnN0YW5jZXNcblx0XHRcdFx0XHRcdHdoaWxlICggY3VyLmluZGV4T2YoIFwiIFwiICsgY2xhenogKyBcIiBcIiApID4gLTEgKSB7XG5cdFx0XHRcdFx0XHRcdGN1ciA9IGN1ci5yZXBsYWNlKCBcIiBcIiArIGNsYXp6ICsgXCIgXCIsIFwiIFwiICk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gT25seSBhc3NpZ24gaWYgZGlmZmVyZW50IHRvIGF2b2lkIHVubmVlZGVkIHJlbmRlcmluZy5cblx0XHRcdFx0XHRmaW5hbFZhbHVlID0gc3RyaXBBbmRDb2xsYXBzZSggY3VyICk7XG5cdFx0XHRcdFx0aWYgKCBjdXJWYWx1ZSAhPT0gZmluYWxWYWx1ZSApIHtcblx0XHRcdFx0XHRcdGVsZW0uc2V0QXR0cmlidXRlKCBcImNsYXNzXCIsIGZpbmFsVmFsdWUgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHR0b2dnbGVDbGFzczogZnVuY3Rpb24oIHZhbHVlLCBzdGF0ZVZhbCApIHtcblx0XHR2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZSxcblx0XHRcdGlzVmFsaWRWYWx1ZSA9IHR5cGUgPT09IFwic3RyaW5nXCIgfHwgQXJyYXkuaXNBcnJheSggdmFsdWUgKTtcblxuXHRcdGlmICggdHlwZW9mIHN0YXRlVmFsID09PSBcImJvb2xlYW5cIiAmJiBpc1ZhbGlkVmFsdWUgKSB7XG5cdFx0XHRyZXR1cm4gc3RhdGVWYWwgPyB0aGlzLmFkZENsYXNzKCB2YWx1ZSApIDogdGhpcy5yZW1vdmVDbGFzcyggdmFsdWUgKTtcblx0XHR9XG5cblx0XHRpZiAoIGlzRnVuY3Rpb24oIHZhbHVlICkgKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbiggaSApIHtcblx0XHRcdFx0alF1ZXJ5KCB0aGlzICkudG9nZ2xlQ2xhc3MoXG5cdFx0XHRcdFx0dmFsdWUuY2FsbCggdGhpcywgaSwgZ2V0Q2xhc3MoIHRoaXMgKSwgc3RhdGVWYWwgKSxcblx0XHRcdFx0XHRzdGF0ZVZhbFxuXHRcdFx0XHQpO1xuXHRcdFx0fSApO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIGNsYXNzTmFtZSwgaSwgc2VsZiwgY2xhc3NOYW1lcztcblxuXHRcdFx0aWYgKCBpc1ZhbGlkVmFsdWUgKSB7XG5cblx0XHRcdFx0Ly8gVG9nZ2xlIGluZGl2aWR1YWwgY2xhc3MgbmFtZXNcblx0XHRcdFx0aSA9IDA7XG5cdFx0XHRcdHNlbGYgPSBqUXVlcnkoIHRoaXMgKTtcblx0XHRcdFx0Y2xhc3NOYW1lcyA9IGNsYXNzZXNUb0FycmF5KCB2YWx1ZSApO1xuXG5cdFx0XHRcdHdoaWxlICggKCBjbGFzc05hbWUgPSBjbGFzc05hbWVzWyBpKysgXSApICkge1xuXG5cdFx0XHRcdFx0Ly8gQ2hlY2sgZWFjaCBjbGFzc05hbWUgZ2l2ZW4sIHNwYWNlIHNlcGFyYXRlZCBsaXN0XG5cdFx0XHRcdFx0aWYgKCBzZWxmLmhhc0NsYXNzKCBjbGFzc05hbWUgKSApIHtcblx0XHRcdFx0XHRcdHNlbGYucmVtb3ZlQ2xhc3MoIGNsYXNzTmFtZSApO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRzZWxmLmFkZENsYXNzKCBjbGFzc05hbWUgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0Ly8gVG9nZ2xlIHdob2xlIGNsYXNzIG5hbWVcblx0XHRcdH0gZWxzZSBpZiAoIHZhbHVlID09PSB1bmRlZmluZWQgfHwgdHlwZSA9PT0gXCJib29sZWFuXCIgKSB7XG5cdFx0XHRcdGNsYXNzTmFtZSA9IGdldENsYXNzKCB0aGlzICk7XG5cdFx0XHRcdGlmICggY2xhc3NOYW1lICkge1xuXG5cdFx0XHRcdFx0Ly8gU3RvcmUgY2xhc3NOYW1lIGlmIHNldFxuXHRcdFx0XHRcdGRhdGFQcml2LnNldCggdGhpcywgXCJfX2NsYXNzTmFtZV9fXCIsIGNsYXNzTmFtZSApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gSWYgdGhlIGVsZW1lbnQgaGFzIGEgY2xhc3MgbmFtZSBvciBpZiB3ZSdyZSBwYXNzZWQgYGZhbHNlYCxcblx0XHRcdFx0Ly8gdGhlbiByZW1vdmUgdGhlIHdob2xlIGNsYXNzbmFtZSAoaWYgdGhlcmUgd2FzIG9uZSwgdGhlIGFib3ZlIHNhdmVkIGl0KS5cblx0XHRcdFx0Ly8gT3RoZXJ3aXNlIGJyaW5nIGJhY2sgd2hhdGV2ZXIgd2FzIHByZXZpb3VzbHkgc2F2ZWQgKGlmIGFueXRoaW5nKSxcblx0XHRcdFx0Ly8gZmFsbGluZyBiYWNrIHRvIHRoZSBlbXB0eSBzdHJpbmcgaWYgbm90aGluZyB3YXMgc3RvcmVkLlxuXHRcdFx0XHRpZiAoIHRoaXMuc2V0QXR0cmlidXRlICkge1xuXHRcdFx0XHRcdHRoaXMuc2V0QXR0cmlidXRlKCBcImNsYXNzXCIsXG5cdFx0XHRcdFx0XHRjbGFzc05hbWUgfHwgdmFsdWUgPT09IGZhbHNlID9cblx0XHRcdFx0XHRcdFwiXCIgOlxuXHRcdFx0XHRcdFx0ZGF0YVByaXYuZ2V0KCB0aGlzLCBcIl9fY2xhc3NOYW1lX19cIiApIHx8IFwiXCJcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9LFxuXG5cdGhhc0NsYXNzOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cdFx0dmFyIGNsYXNzTmFtZSwgZWxlbSxcblx0XHRcdGkgPSAwO1xuXG5cdFx0Y2xhc3NOYW1lID0gXCIgXCIgKyBzZWxlY3RvciArIFwiIFwiO1xuXHRcdHdoaWxlICggKCBlbGVtID0gdGhpc1sgaSsrIF0gKSApIHtcblx0XHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSAmJlxuXHRcdFx0XHQoIFwiIFwiICsgc3RyaXBBbmRDb2xsYXBzZSggZ2V0Q2xhc3MoIGVsZW0gKSApICsgXCIgXCIgKS5pbmRleE9mKCBjbGFzc05hbWUgKSA+IC0xICkge1xuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxufSApO1xuXG5cblxuXG52YXIgcnJldHVybiA9IC9cXHIvZztcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHR2YWw6IGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHR2YXIgaG9va3MsIHJldCwgdmFsdWVJc0Z1bmN0aW9uLFxuXHRcdFx0ZWxlbSA9IHRoaXNbIDAgXTtcblxuXHRcdGlmICggIWFyZ3VtZW50cy5sZW5ndGggKSB7XG5cdFx0XHRpZiAoIGVsZW0gKSB7XG5cdFx0XHRcdGhvb2tzID0galF1ZXJ5LnZhbEhvb2tzWyBlbGVtLnR5cGUgXSB8fFxuXHRcdFx0XHRcdGpRdWVyeS52YWxIb29rc1sgZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpIF07XG5cblx0XHRcdFx0aWYgKCBob29rcyAmJlxuXHRcdFx0XHRcdFwiZ2V0XCIgaW4gaG9va3MgJiZcblx0XHRcdFx0XHQoIHJldCA9IGhvb2tzLmdldCggZWxlbSwgXCJ2YWx1ZVwiICkgKSAhPT0gdW5kZWZpbmVkXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdHJldHVybiByZXQ7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXQgPSBlbGVtLnZhbHVlO1xuXG5cdFx0XHRcdC8vIEhhbmRsZSBtb3N0IGNvbW1vbiBzdHJpbmcgY2FzZXNcblx0XHRcdFx0aWYgKCB0eXBlb2YgcmV0ID09PSBcInN0cmluZ1wiICkge1xuXHRcdFx0XHRcdHJldHVybiByZXQucmVwbGFjZSggcnJldHVybiwgXCJcIiApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gSGFuZGxlIGNhc2VzIHdoZXJlIHZhbHVlIGlzIG51bGwvdW5kZWYgb3IgbnVtYmVyXG5cdFx0XHRcdHJldHVybiByZXQgPT0gbnVsbCA/IFwiXCIgOiByZXQ7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHR2YWx1ZUlzRnVuY3Rpb24gPSBpc0Z1bmN0aW9uKCB2YWx1ZSApO1xuXG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oIGkgKSB7XG5cdFx0XHR2YXIgdmFsO1xuXG5cdFx0XHRpZiAoIHRoaXMubm9kZVR5cGUgIT09IDEgKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCB2YWx1ZUlzRnVuY3Rpb24gKSB7XG5cdFx0XHRcdHZhbCA9IHZhbHVlLmNhbGwoIHRoaXMsIGksIGpRdWVyeSggdGhpcyApLnZhbCgpICk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR2YWwgPSB2YWx1ZTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gVHJlYXQgbnVsbC91bmRlZmluZWQgYXMgXCJcIjsgY29udmVydCBudW1iZXJzIHRvIHN0cmluZ1xuXHRcdFx0aWYgKCB2YWwgPT0gbnVsbCApIHtcblx0XHRcdFx0dmFsID0gXCJcIjtcblxuXHRcdFx0fSBlbHNlIGlmICggdHlwZW9mIHZhbCA9PT0gXCJudW1iZXJcIiApIHtcblx0XHRcdFx0dmFsICs9IFwiXCI7XG5cblx0XHRcdH0gZWxzZSBpZiAoIEFycmF5LmlzQXJyYXkoIHZhbCApICkge1xuXHRcdFx0XHR2YWwgPSBqUXVlcnkubWFwKCB2YWwsIGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHRcdFx0XHRyZXR1cm4gdmFsdWUgPT0gbnVsbCA/IFwiXCIgOiB2YWx1ZSArIFwiXCI7XG5cdFx0XHRcdH0gKTtcblx0XHRcdH1cblxuXHRcdFx0aG9va3MgPSBqUXVlcnkudmFsSG9va3NbIHRoaXMudHlwZSBdIHx8IGpRdWVyeS52YWxIb29rc1sgdGhpcy5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpIF07XG5cblx0XHRcdC8vIElmIHNldCByZXR1cm5zIHVuZGVmaW5lZCwgZmFsbCBiYWNrIHRvIG5vcm1hbCBzZXR0aW5nXG5cdFx0XHRpZiAoICFob29rcyB8fCAhKCBcInNldFwiIGluIGhvb2tzICkgfHwgaG9va3Muc2V0KCB0aGlzLCB2YWwsIFwidmFsdWVcIiApID09PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdHRoaXMudmFsdWUgPSB2YWw7XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9XG59ICk7XG5cbmpRdWVyeS5leHRlbmQoIHtcblx0dmFsSG9va3M6IHtcblx0XHRvcHRpb246IHtcblx0XHRcdGdldDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cblx0XHRcdFx0dmFyIHZhbCA9IGpRdWVyeS5maW5kLmF0dHIoIGVsZW0sIFwidmFsdWVcIiApO1xuXHRcdFx0XHRyZXR1cm4gdmFsICE9IG51bGwgP1xuXHRcdFx0XHRcdHZhbCA6XG5cblx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA8PTEwIC0gMTEgb25seVxuXHRcdFx0XHRcdC8vIG9wdGlvbi50ZXh0IHRocm93cyBleGNlcHRpb25zICgjMTQ2ODYsICMxNDg1OClcblx0XHRcdFx0XHQvLyBTdHJpcCBhbmQgY29sbGFwc2Ugd2hpdGVzcGFjZVxuXHRcdFx0XHRcdC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvI3N0cmlwLWFuZC1jb2xsYXBzZS13aGl0ZXNwYWNlXG5cdFx0XHRcdFx0c3RyaXBBbmRDb2xsYXBzZSggalF1ZXJ5LnRleHQoIGVsZW0gKSApO1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0c2VsZWN0OiB7XG5cdFx0XHRnZXQ6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0XHR2YXIgdmFsdWUsIG9wdGlvbiwgaSxcblx0XHRcdFx0XHRvcHRpb25zID0gZWxlbS5vcHRpb25zLFxuXHRcdFx0XHRcdGluZGV4ID0gZWxlbS5zZWxlY3RlZEluZGV4LFxuXHRcdFx0XHRcdG9uZSA9IGVsZW0udHlwZSA9PT0gXCJzZWxlY3Qtb25lXCIsXG5cdFx0XHRcdFx0dmFsdWVzID0gb25lID8gbnVsbCA6IFtdLFxuXHRcdFx0XHRcdG1heCA9IG9uZSA/IGluZGV4ICsgMSA6IG9wdGlvbnMubGVuZ3RoO1xuXG5cdFx0XHRcdGlmICggaW5kZXggPCAwICkge1xuXHRcdFx0XHRcdGkgPSBtYXg7XG5cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRpID0gb25lID8gaW5kZXggOiAwO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gTG9vcCB0aHJvdWdoIGFsbCB0aGUgc2VsZWN0ZWQgb3B0aW9uc1xuXHRcdFx0XHRmb3IgKCA7IGkgPCBtYXg7IGkrKyApIHtcblx0XHRcdFx0XHRvcHRpb24gPSBvcHRpb25zWyBpIF07XG5cblx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA8PTkgb25seVxuXHRcdFx0XHRcdC8vIElFOC05IGRvZXNuJ3QgdXBkYXRlIHNlbGVjdGVkIGFmdGVyIGZvcm0gcmVzZXQgKCMyNTUxKVxuXHRcdFx0XHRcdGlmICggKCBvcHRpb24uc2VsZWN0ZWQgfHwgaSA9PT0gaW5kZXggKSAmJlxuXG5cdFx0XHRcdFx0XHRcdC8vIERvbid0IHJldHVybiBvcHRpb25zIHRoYXQgYXJlIGRpc2FibGVkIG9yIGluIGEgZGlzYWJsZWQgb3B0Z3JvdXBcblx0XHRcdFx0XHRcdFx0IW9wdGlvbi5kaXNhYmxlZCAmJlxuXHRcdFx0XHRcdFx0XHQoICFvcHRpb24ucGFyZW50Tm9kZS5kaXNhYmxlZCB8fFxuXHRcdFx0XHRcdFx0XHRcdCFub2RlTmFtZSggb3B0aW9uLnBhcmVudE5vZGUsIFwib3B0Z3JvdXBcIiApICkgKSB7XG5cblx0XHRcdFx0XHRcdC8vIEdldCB0aGUgc3BlY2lmaWMgdmFsdWUgZm9yIHRoZSBvcHRpb25cblx0XHRcdFx0XHRcdHZhbHVlID0galF1ZXJ5KCBvcHRpb24gKS52YWwoKTtcblxuXHRcdFx0XHRcdFx0Ly8gV2UgZG9uJ3QgbmVlZCBhbiBhcnJheSBmb3Igb25lIHNlbGVjdHNcblx0XHRcdFx0XHRcdGlmICggb25lICkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdmFsdWU7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdC8vIE11bHRpLVNlbGVjdHMgcmV0dXJuIGFuIGFycmF5XG5cdFx0XHRcdFx0XHR2YWx1ZXMucHVzaCggdmFsdWUgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gdmFsdWVzO1xuXHRcdFx0fSxcblxuXHRcdFx0c2V0OiBmdW5jdGlvbiggZWxlbSwgdmFsdWUgKSB7XG5cdFx0XHRcdHZhciBvcHRpb25TZXQsIG9wdGlvbixcblx0XHRcdFx0XHRvcHRpb25zID0gZWxlbS5vcHRpb25zLFxuXHRcdFx0XHRcdHZhbHVlcyA9IGpRdWVyeS5tYWtlQXJyYXkoIHZhbHVlICksXG5cdFx0XHRcdFx0aSA9IG9wdGlvbnMubGVuZ3RoO1xuXG5cdFx0XHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0XHRcdG9wdGlvbiA9IG9wdGlvbnNbIGkgXTtcblxuXHRcdFx0XHRcdC8qIGVzbGludC1kaXNhYmxlIG5vLWNvbmQtYXNzaWduICovXG5cblx0XHRcdFx0XHRpZiAoIG9wdGlvbi5zZWxlY3RlZCA9XG5cdFx0XHRcdFx0XHRqUXVlcnkuaW5BcnJheSggalF1ZXJ5LnZhbEhvb2tzLm9wdGlvbi5nZXQoIG9wdGlvbiApLCB2YWx1ZXMgKSA+IC0xXG5cdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRvcHRpb25TZXQgPSB0cnVlO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8qIGVzbGludC1lbmFibGUgbm8tY29uZC1hc3NpZ24gKi9cblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIEZvcmNlIGJyb3dzZXJzIHRvIGJlaGF2ZSBjb25zaXN0ZW50bHkgd2hlbiBub24tbWF0Y2hpbmcgdmFsdWUgaXMgc2V0XG5cdFx0XHRcdGlmICggIW9wdGlvblNldCApIHtcblx0XHRcdFx0XHRlbGVtLnNlbGVjdGVkSW5kZXggPSAtMTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gdmFsdWVzO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufSApO1xuXG4vLyBSYWRpb3MgYW5kIGNoZWNrYm94ZXMgZ2V0dGVyL3NldHRlclxualF1ZXJ5LmVhY2goIFsgXCJyYWRpb1wiLCBcImNoZWNrYm94XCIgXSwgZnVuY3Rpb24oKSB7XG5cdGpRdWVyeS52YWxIb29rc1sgdGhpcyBdID0ge1xuXHRcdHNldDogZnVuY3Rpb24oIGVsZW0sIHZhbHVlICkge1xuXHRcdFx0aWYgKCBBcnJheS5pc0FycmF5KCB2YWx1ZSApICkge1xuXHRcdFx0XHRyZXR1cm4gKCBlbGVtLmNoZWNrZWQgPSBqUXVlcnkuaW5BcnJheSggalF1ZXJ5KCBlbGVtICkudmFsKCksIHZhbHVlICkgPiAtMSApO1xuXHRcdFx0fVxuXHRcdH1cblx0fTtcblx0aWYgKCAhc3VwcG9ydC5jaGVja09uICkge1xuXHRcdGpRdWVyeS52YWxIb29rc1sgdGhpcyBdLmdldCA9IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuIGVsZW0uZ2V0QXR0cmlidXRlKCBcInZhbHVlXCIgKSA9PT0gbnVsbCA/IFwib25cIiA6IGVsZW0udmFsdWU7XG5cdFx0fTtcblx0fVxufSApO1xuXG5cblxuXG4vLyBSZXR1cm4galF1ZXJ5IGZvciBhdHRyaWJ1dGVzLW9ubHkgaW5jbHVzaW9uXG5cblxuc3VwcG9ydC5mb2N1c2luID0gXCJvbmZvY3VzaW5cIiBpbiB3aW5kb3c7XG5cblxudmFyIHJmb2N1c01vcnBoID0gL14oPzpmb2N1c2luZm9jdXN8Zm9jdXNvdXRibHVyKSQvLFxuXHRzdG9wUHJvcGFnYXRpb25DYWxsYmFjayA9IGZ1bmN0aW9uKCBlICkge1xuXHRcdGUuc3RvcFByb3BhZ2F0aW9uKCk7XG5cdH07XG5cbmpRdWVyeS5leHRlbmQoIGpRdWVyeS5ldmVudCwge1xuXG5cdHRyaWdnZXI6IGZ1bmN0aW9uKCBldmVudCwgZGF0YSwgZWxlbSwgb25seUhhbmRsZXJzICkge1xuXG5cdFx0dmFyIGksIGN1ciwgdG1wLCBidWJibGVUeXBlLCBvbnR5cGUsIGhhbmRsZSwgc3BlY2lhbCwgbGFzdEVsZW1lbnQsXG5cdFx0XHRldmVudFBhdGggPSBbIGVsZW0gfHwgZG9jdW1lbnQgXSxcblx0XHRcdHR5cGUgPSBoYXNPd24uY2FsbCggZXZlbnQsIFwidHlwZVwiICkgPyBldmVudC50eXBlIDogZXZlbnQsXG5cdFx0XHRuYW1lc3BhY2VzID0gaGFzT3duLmNhbGwoIGV2ZW50LCBcIm5hbWVzcGFjZVwiICkgPyBldmVudC5uYW1lc3BhY2Uuc3BsaXQoIFwiLlwiICkgOiBbXTtcblxuXHRcdGN1ciA9IGxhc3RFbGVtZW50ID0gdG1wID0gZWxlbSA9IGVsZW0gfHwgZG9jdW1lbnQ7XG5cblx0XHQvLyBEb24ndCBkbyBldmVudHMgb24gdGV4dCBhbmQgY29tbWVudCBub2Rlc1xuXHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMyB8fCBlbGVtLm5vZGVUeXBlID09PSA4ICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIGZvY3VzL2JsdXIgbW9ycGhzIHRvIGZvY3VzaW4vb3V0OyBlbnN1cmUgd2UncmUgbm90IGZpcmluZyB0aGVtIHJpZ2h0IG5vd1xuXHRcdGlmICggcmZvY3VzTW9ycGgudGVzdCggdHlwZSArIGpRdWVyeS5ldmVudC50cmlnZ2VyZWQgKSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpZiAoIHR5cGUuaW5kZXhPZiggXCIuXCIgKSA+IC0xICkge1xuXG5cdFx0XHQvLyBOYW1lc3BhY2VkIHRyaWdnZXI7IGNyZWF0ZSBhIHJlZ2V4cCB0byBtYXRjaCBldmVudCB0eXBlIGluIGhhbmRsZSgpXG5cdFx0XHRuYW1lc3BhY2VzID0gdHlwZS5zcGxpdCggXCIuXCIgKTtcblx0XHRcdHR5cGUgPSBuYW1lc3BhY2VzLnNoaWZ0KCk7XG5cdFx0XHRuYW1lc3BhY2VzLnNvcnQoKTtcblx0XHR9XG5cdFx0b250eXBlID0gdHlwZS5pbmRleE9mKCBcIjpcIiApIDwgMCAmJiBcIm9uXCIgKyB0eXBlO1xuXG5cdFx0Ly8gQ2FsbGVyIGNhbiBwYXNzIGluIGEgalF1ZXJ5LkV2ZW50IG9iamVjdCwgT2JqZWN0LCBvciBqdXN0IGFuIGV2ZW50IHR5cGUgc3RyaW5nXG5cdFx0ZXZlbnQgPSBldmVudFsgalF1ZXJ5LmV4cGFuZG8gXSA/XG5cdFx0XHRldmVudCA6XG5cdFx0XHRuZXcgalF1ZXJ5LkV2ZW50KCB0eXBlLCB0eXBlb2YgZXZlbnQgPT09IFwib2JqZWN0XCIgJiYgZXZlbnQgKTtcblxuXHRcdC8vIFRyaWdnZXIgYml0bWFzazogJiAxIGZvciBuYXRpdmUgaGFuZGxlcnM7ICYgMiBmb3IgalF1ZXJ5IChhbHdheXMgdHJ1ZSlcblx0XHRldmVudC5pc1RyaWdnZXIgPSBvbmx5SGFuZGxlcnMgPyAyIDogMztcblx0XHRldmVudC5uYW1lc3BhY2UgPSBuYW1lc3BhY2VzLmpvaW4oIFwiLlwiICk7XG5cdFx0ZXZlbnQucm5hbWVzcGFjZSA9IGV2ZW50Lm5hbWVzcGFjZSA/XG5cdFx0XHRuZXcgUmVnRXhwKCBcIihefFxcXFwuKVwiICsgbmFtZXNwYWNlcy5qb2luKCBcIlxcXFwuKD86LipcXFxcLnwpXCIgKSArIFwiKFxcXFwufCQpXCIgKSA6XG5cdFx0XHRudWxsO1xuXG5cdFx0Ly8gQ2xlYW4gdXAgdGhlIGV2ZW50IGluIGNhc2UgaXQgaXMgYmVpbmcgcmV1c2VkXG5cdFx0ZXZlbnQucmVzdWx0ID0gdW5kZWZpbmVkO1xuXHRcdGlmICggIWV2ZW50LnRhcmdldCApIHtcblx0XHRcdGV2ZW50LnRhcmdldCA9IGVsZW07XG5cdFx0fVxuXG5cdFx0Ly8gQ2xvbmUgYW55IGluY29taW5nIGRhdGEgYW5kIHByZXBlbmQgdGhlIGV2ZW50LCBjcmVhdGluZyB0aGUgaGFuZGxlciBhcmcgbGlzdFxuXHRcdGRhdGEgPSBkYXRhID09IG51bGwgP1xuXHRcdFx0WyBldmVudCBdIDpcblx0XHRcdGpRdWVyeS5tYWtlQXJyYXkoIGRhdGEsIFsgZXZlbnQgXSApO1xuXG5cdFx0Ly8gQWxsb3cgc3BlY2lhbCBldmVudHMgdG8gZHJhdyBvdXRzaWRlIHRoZSBsaW5lc1xuXHRcdHNwZWNpYWwgPSBqUXVlcnkuZXZlbnQuc3BlY2lhbFsgdHlwZSBdIHx8IHt9O1xuXHRcdGlmICggIW9ubHlIYW5kbGVycyAmJiBzcGVjaWFsLnRyaWdnZXIgJiYgc3BlY2lhbC50cmlnZ2VyLmFwcGx5KCBlbGVtLCBkYXRhICkgPT09IGZhbHNlICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIERldGVybWluZSBldmVudCBwcm9wYWdhdGlvbiBwYXRoIGluIGFkdmFuY2UsIHBlciBXM0MgZXZlbnRzIHNwZWMgKCM5OTUxKVxuXHRcdC8vIEJ1YmJsZSB1cCB0byBkb2N1bWVudCwgdGhlbiB0byB3aW5kb3c7IHdhdGNoIGZvciBhIGdsb2JhbCBvd25lckRvY3VtZW50IHZhciAoIzk3MjQpXG5cdFx0aWYgKCAhb25seUhhbmRsZXJzICYmICFzcGVjaWFsLm5vQnViYmxlICYmICFpc1dpbmRvdyggZWxlbSApICkge1xuXG5cdFx0XHRidWJibGVUeXBlID0gc3BlY2lhbC5kZWxlZ2F0ZVR5cGUgfHwgdHlwZTtcblx0XHRcdGlmICggIXJmb2N1c01vcnBoLnRlc3QoIGJ1YmJsZVR5cGUgKyB0eXBlICkgKSB7XG5cdFx0XHRcdGN1ciA9IGN1ci5wYXJlbnROb2RlO1xuXHRcdFx0fVxuXHRcdFx0Zm9yICggOyBjdXI7IGN1ciA9IGN1ci5wYXJlbnROb2RlICkge1xuXHRcdFx0XHRldmVudFBhdGgucHVzaCggY3VyICk7XG5cdFx0XHRcdHRtcCA9IGN1cjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gT25seSBhZGQgd2luZG93IGlmIHdlIGdvdCB0byBkb2N1bWVudCAoZS5nLiwgbm90IHBsYWluIG9iaiBvciBkZXRhY2hlZCBET00pXG5cdFx0XHRpZiAoIHRtcCA9PT0gKCBlbGVtLm93bmVyRG9jdW1lbnQgfHwgZG9jdW1lbnQgKSApIHtcblx0XHRcdFx0ZXZlbnRQYXRoLnB1c2goIHRtcC5kZWZhdWx0VmlldyB8fCB0bXAucGFyZW50V2luZG93IHx8IHdpbmRvdyApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIEZpcmUgaGFuZGxlcnMgb24gdGhlIGV2ZW50IHBhdGhcblx0XHRpID0gMDtcblx0XHR3aGlsZSAoICggY3VyID0gZXZlbnRQYXRoWyBpKysgXSApICYmICFldmVudC5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpICkge1xuXHRcdFx0bGFzdEVsZW1lbnQgPSBjdXI7XG5cdFx0XHRldmVudC50eXBlID0gaSA+IDEgP1xuXHRcdFx0XHRidWJibGVUeXBlIDpcblx0XHRcdFx0c3BlY2lhbC5iaW5kVHlwZSB8fCB0eXBlO1xuXG5cdFx0XHQvLyBqUXVlcnkgaGFuZGxlclxuXHRcdFx0aGFuZGxlID0gKCBkYXRhUHJpdi5nZXQoIGN1ciwgXCJldmVudHNcIiApIHx8IHt9IClbIGV2ZW50LnR5cGUgXSAmJlxuXHRcdFx0XHRkYXRhUHJpdi5nZXQoIGN1ciwgXCJoYW5kbGVcIiApO1xuXHRcdFx0aWYgKCBoYW5kbGUgKSB7XG5cdFx0XHRcdGhhbmRsZS5hcHBseSggY3VyLCBkYXRhICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIE5hdGl2ZSBoYW5kbGVyXG5cdFx0XHRoYW5kbGUgPSBvbnR5cGUgJiYgY3VyWyBvbnR5cGUgXTtcblx0XHRcdGlmICggaGFuZGxlICYmIGhhbmRsZS5hcHBseSAmJiBhY2NlcHREYXRhKCBjdXIgKSApIHtcblx0XHRcdFx0ZXZlbnQucmVzdWx0ID0gaGFuZGxlLmFwcGx5KCBjdXIsIGRhdGEgKTtcblx0XHRcdFx0aWYgKCBldmVudC5yZXN1bHQgPT09IGZhbHNlICkge1xuXHRcdFx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0ZXZlbnQudHlwZSA9IHR5cGU7XG5cblx0XHQvLyBJZiBub2JvZHkgcHJldmVudGVkIHRoZSBkZWZhdWx0IGFjdGlvbiwgZG8gaXQgbm93XG5cdFx0aWYgKCAhb25seUhhbmRsZXJzICYmICFldmVudC5pc0RlZmF1bHRQcmV2ZW50ZWQoKSApIHtcblxuXHRcdFx0aWYgKCAoICFzcGVjaWFsLl9kZWZhdWx0IHx8XG5cdFx0XHRcdHNwZWNpYWwuX2RlZmF1bHQuYXBwbHkoIGV2ZW50UGF0aC5wb3AoKSwgZGF0YSApID09PSBmYWxzZSApICYmXG5cdFx0XHRcdGFjY2VwdERhdGEoIGVsZW0gKSApIHtcblxuXHRcdFx0XHQvLyBDYWxsIGEgbmF0aXZlIERPTSBtZXRob2Qgb24gdGhlIHRhcmdldCB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgdGhlIGV2ZW50LlxuXHRcdFx0XHQvLyBEb24ndCBkbyBkZWZhdWx0IGFjdGlvbnMgb24gd2luZG93LCB0aGF0J3Mgd2hlcmUgZ2xvYmFsIHZhcmlhYmxlcyBiZSAoIzYxNzApXG5cdFx0XHRcdGlmICggb250eXBlICYmIGlzRnVuY3Rpb24oIGVsZW1bIHR5cGUgXSApICYmICFpc1dpbmRvdyggZWxlbSApICkge1xuXG5cdFx0XHRcdFx0Ly8gRG9uJ3QgcmUtdHJpZ2dlciBhbiBvbkZPTyBldmVudCB3aGVuIHdlIGNhbGwgaXRzIEZPTygpIG1ldGhvZFxuXHRcdFx0XHRcdHRtcCA9IGVsZW1bIG9udHlwZSBdO1xuXG5cdFx0XHRcdFx0aWYgKCB0bXAgKSB7XG5cdFx0XHRcdFx0XHRlbGVtWyBvbnR5cGUgXSA9IG51bGw7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gUHJldmVudCByZS10cmlnZ2VyaW5nIG9mIHRoZSBzYW1lIGV2ZW50LCBzaW5jZSB3ZSBhbHJlYWR5IGJ1YmJsZWQgaXQgYWJvdmVcblx0XHRcdFx0XHRqUXVlcnkuZXZlbnQudHJpZ2dlcmVkID0gdHlwZTtcblxuXHRcdFx0XHRcdGlmICggZXZlbnQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSApIHtcblx0XHRcdFx0XHRcdGxhc3RFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoIHR5cGUsIHN0b3BQcm9wYWdhdGlvbkNhbGxiYWNrICk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0ZWxlbVsgdHlwZSBdKCk7XG5cblx0XHRcdFx0XHRpZiAoIGV2ZW50LmlzUHJvcGFnYXRpb25TdG9wcGVkKCkgKSB7XG5cdFx0XHRcdFx0XHRsYXN0RWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCB0eXBlLCBzdG9wUHJvcGFnYXRpb25DYWxsYmFjayApO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGpRdWVyeS5ldmVudC50cmlnZ2VyZWQgPSB1bmRlZmluZWQ7XG5cblx0XHRcdFx0XHRpZiAoIHRtcCApIHtcblx0XHRcdFx0XHRcdGVsZW1bIG9udHlwZSBdID0gdG1wO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBldmVudC5yZXN1bHQ7XG5cdH0sXG5cblx0Ly8gUGlnZ3liYWNrIG9uIGEgZG9ub3IgZXZlbnQgdG8gc2ltdWxhdGUgYSBkaWZmZXJlbnQgb25lXG5cdC8vIFVzZWQgb25seSBmb3IgYGZvY3VzKGluIHwgb3V0KWAgZXZlbnRzXG5cdHNpbXVsYXRlOiBmdW5jdGlvbiggdHlwZSwgZWxlbSwgZXZlbnQgKSB7XG5cdFx0dmFyIGUgPSBqUXVlcnkuZXh0ZW5kKFxuXHRcdFx0bmV3IGpRdWVyeS5FdmVudCgpLFxuXHRcdFx0ZXZlbnQsXG5cdFx0XHR7XG5cdFx0XHRcdHR5cGU6IHR5cGUsXG5cdFx0XHRcdGlzU2ltdWxhdGVkOiB0cnVlXG5cdFx0XHR9XG5cdFx0KTtcblxuXHRcdGpRdWVyeS5ldmVudC50cmlnZ2VyKCBlLCBudWxsLCBlbGVtICk7XG5cdH1cblxufSApO1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cblx0dHJpZ2dlcjogZnVuY3Rpb24oIHR5cGUsIGRhdGEgKSB7XG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRqUXVlcnkuZXZlbnQudHJpZ2dlciggdHlwZSwgZGF0YSwgdGhpcyApO1xuXHRcdH0gKTtcblx0fSxcblx0dHJpZ2dlckhhbmRsZXI6IGZ1bmN0aW9uKCB0eXBlLCBkYXRhICkge1xuXHRcdHZhciBlbGVtID0gdGhpc1sgMCBdO1xuXHRcdGlmICggZWxlbSApIHtcblx0XHRcdHJldHVybiBqUXVlcnkuZXZlbnQudHJpZ2dlciggdHlwZSwgZGF0YSwgZWxlbSwgdHJ1ZSApO1xuXHRcdH1cblx0fVxufSApO1xuXG5cbi8vIFN1cHBvcnQ6IEZpcmVmb3ggPD00NFxuLy8gRmlyZWZveCBkb2Vzbid0IGhhdmUgZm9jdXMoaW4gfCBvdXQpIGV2ZW50c1xuLy8gUmVsYXRlZCB0aWNrZXQgLSBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD02ODc3ODdcbi8vXG4vLyBTdXBwb3J0OiBDaHJvbWUgPD00OCAtIDQ5LCBTYWZhcmkgPD05LjAgLSA5LjFcbi8vIGZvY3VzKGluIHwgb3V0KSBldmVudHMgZmlyZSBhZnRlciBmb2N1cyAmIGJsdXIgZXZlbnRzLFxuLy8gd2hpY2ggaXMgc3BlYyB2aW9sYXRpb24gLSBodHRwOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMy1FdmVudHMvI2V2ZW50cy1mb2N1c2V2ZW50LWV2ZW50LW9yZGVyXG4vLyBSZWxhdGVkIHRpY2tldCAtIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTQ0OTg1N1xuaWYgKCAhc3VwcG9ydC5mb2N1c2luICkge1xuXHRqUXVlcnkuZWFjaCggeyBmb2N1czogXCJmb2N1c2luXCIsIGJsdXI6IFwiZm9jdXNvdXRcIiB9LCBmdW5jdGlvbiggb3JpZywgZml4ICkge1xuXG5cdFx0Ly8gQXR0YWNoIGEgc2luZ2xlIGNhcHR1cmluZyBoYW5kbGVyIG9uIHRoZSBkb2N1bWVudCB3aGlsZSBzb21lb25lIHdhbnRzIGZvY3VzaW4vZm9jdXNvdXRcblx0XHR2YXIgaGFuZGxlciA9IGZ1bmN0aW9uKCBldmVudCApIHtcblx0XHRcdGpRdWVyeS5ldmVudC5zaW11bGF0ZSggZml4LCBldmVudC50YXJnZXQsIGpRdWVyeS5ldmVudC5maXgoIGV2ZW50ICkgKTtcblx0XHR9O1xuXG5cdFx0alF1ZXJ5LmV2ZW50LnNwZWNpYWxbIGZpeCBdID0ge1xuXHRcdFx0c2V0dXA6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHR2YXIgZG9jID0gdGhpcy5vd25lckRvY3VtZW50IHx8IHRoaXMsXG5cdFx0XHRcdFx0YXR0YWNoZXMgPSBkYXRhUHJpdi5hY2Nlc3MoIGRvYywgZml4ICk7XG5cblx0XHRcdFx0aWYgKCAhYXR0YWNoZXMgKSB7XG5cdFx0XHRcdFx0ZG9jLmFkZEV2ZW50TGlzdGVuZXIoIG9yaWcsIGhhbmRsZXIsIHRydWUgKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRkYXRhUHJpdi5hY2Nlc3MoIGRvYywgZml4LCAoIGF0dGFjaGVzIHx8IDAgKSArIDEgKTtcblx0XHRcdH0sXG5cdFx0XHR0ZWFyZG93bjogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHZhciBkb2MgPSB0aGlzLm93bmVyRG9jdW1lbnQgfHwgdGhpcyxcblx0XHRcdFx0XHRhdHRhY2hlcyA9IGRhdGFQcml2LmFjY2VzcyggZG9jLCBmaXggKSAtIDE7XG5cblx0XHRcdFx0aWYgKCAhYXR0YWNoZXMgKSB7XG5cdFx0XHRcdFx0ZG9jLnJlbW92ZUV2ZW50TGlzdGVuZXIoIG9yaWcsIGhhbmRsZXIsIHRydWUgKTtcblx0XHRcdFx0XHRkYXRhUHJpdi5yZW1vdmUoIGRvYywgZml4ICk7XG5cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRkYXRhUHJpdi5hY2Nlc3MoIGRvYywgZml4LCBhdHRhY2hlcyApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fTtcblx0fSApO1xufVxudmFyIGxvY2F0aW9uID0gd2luZG93LmxvY2F0aW9uO1xuXG52YXIgbm9uY2UgPSBEYXRlLm5vdygpO1xuXG52YXIgcnF1ZXJ5ID0gKCAvXFw/LyApO1xuXG5cblxuLy8gQ3Jvc3MtYnJvd3NlciB4bWwgcGFyc2luZ1xualF1ZXJ5LnBhcnNlWE1MID0gZnVuY3Rpb24oIGRhdGEgKSB7XG5cdHZhciB4bWw7XG5cdGlmICggIWRhdGEgfHwgdHlwZW9mIGRhdGEgIT09IFwic3RyaW5nXCIgKSB7XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHQvLyBTdXBwb3J0OiBJRSA5IC0gMTEgb25seVxuXHQvLyBJRSB0aHJvd3Mgb24gcGFyc2VGcm9tU3RyaW5nIHdpdGggaW52YWxpZCBpbnB1dC5cblx0dHJ5IHtcblx0XHR4bWwgPSAoIG5ldyB3aW5kb3cuRE9NUGFyc2VyKCkgKS5wYXJzZUZyb21TdHJpbmcoIGRhdGEsIFwidGV4dC94bWxcIiApO1xuXHR9IGNhdGNoICggZSApIHtcblx0XHR4bWwgPSB1bmRlZmluZWQ7XG5cdH1cblxuXHRpZiAoICF4bWwgfHwgeG1sLmdldEVsZW1lbnRzQnlUYWdOYW1lKCBcInBhcnNlcmVycm9yXCIgKS5sZW5ndGggKSB7XG5cdFx0alF1ZXJ5LmVycm9yKCBcIkludmFsaWQgWE1MOiBcIiArIGRhdGEgKTtcblx0fVxuXHRyZXR1cm4geG1sO1xufTtcblxuXG52YXJcblx0cmJyYWNrZXQgPSAvXFxbXFxdJC8sXG5cdHJDUkxGID0gL1xccj9cXG4vZyxcblx0cnN1Ym1pdHRlclR5cGVzID0gL14oPzpzdWJtaXR8YnV0dG9ufGltYWdlfHJlc2V0fGZpbGUpJC9pLFxuXHRyc3VibWl0dGFibGUgPSAvXig/OmlucHV0fHNlbGVjdHx0ZXh0YXJlYXxrZXlnZW4pL2k7XG5cbmZ1bmN0aW9uIGJ1aWxkUGFyYW1zKCBwcmVmaXgsIG9iaiwgdHJhZGl0aW9uYWwsIGFkZCApIHtcblx0dmFyIG5hbWU7XG5cblx0aWYgKCBBcnJheS5pc0FycmF5KCBvYmogKSApIHtcblxuXHRcdC8vIFNlcmlhbGl6ZSBhcnJheSBpdGVtLlxuXHRcdGpRdWVyeS5lYWNoKCBvYmosIGZ1bmN0aW9uKCBpLCB2ICkge1xuXHRcdFx0aWYgKCB0cmFkaXRpb25hbCB8fCByYnJhY2tldC50ZXN0KCBwcmVmaXggKSApIHtcblxuXHRcdFx0XHQvLyBUcmVhdCBlYWNoIGFycmF5IGl0ZW0gYXMgYSBzY2FsYXIuXG5cdFx0XHRcdGFkZCggcHJlZml4LCB2ICk7XG5cblx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0Ly8gSXRlbSBpcyBub24tc2NhbGFyIChhcnJheSBvciBvYmplY3QpLCBlbmNvZGUgaXRzIG51bWVyaWMgaW5kZXguXG5cdFx0XHRcdGJ1aWxkUGFyYW1zKFxuXHRcdFx0XHRcdHByZWZpeCArIFwiW1wiICsgKCB0eXBlb2YgdiA9PT0gXCJvYmplY3RcIiAmJiB2ICE9IG51bGwgPyBpIDogXCJcIiApICsgXCJdXCIsXG5cdFx0XHRcdFx0dixcblx0XHRcdFx0XHR0cmFkaXRpb25hbCxcblx0XHRcdFx0XHRhZGRcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9ICk7XG5cblx0fSBlbHNlIGlmICggIXRyYWRpdGlvbmFsICYmIHRvVHlwZSggb2JqICkgPT09IFwib2JqZWN0XCIgKSB7XG5cblx0XHQvLyBTZXJpYWxpemUgb2JqZWN0IGl0ZW0uXG5cdFx0Zm9yICggbmFtZSBpbiBvYmogKSB7XG5cdFx0XHRidWlsZFBhcmFtcyggcHJlZml4ICsgXCJbXCIgKyBuYW1lICsgXCJdXCIsIG9ialsgbmFtZSBdLCB0cmFkaXRpb25hbCwgYWRkICk7XG5cdFx0fVxuXG5cdH0gZWxzZSB7XG5cblx0XHQvLyBTZXJpYWxpemUgc2NhbGFyIGl0ZW0uXG5cdFx0YWRkKCBwcmVmaXgsIG9iaiApO1xuXHR9XG59XG5cbi8vIFNlcmlhbGl6ZSBhbiBhcnJheSBvZiBmb3JtIGVsZW1lbnRzIG9yIGEgc2V0IG9mXG4vLyBrZXkvdmFsdWVzIGludG8gYSBxdWVyeSBzdHJpbmdcbmpRdWVyeS5wYXJhbSA9IGZ1bmN0aW9uKCBhLCB0cmFkaXRpb25hbCApIHtcblx0dmFyIHByZWZpeCxcblx0XHRzID0gW10sXG5cdFx0YWRkID0gZnVuY3Rpb24oIGtleSwgdmFsdWVPckZ1bmN0aW9uICkge1xuXG5cdFx0XHQvLyBJZiB2YWx1ZSBpcyBhIGZ1bmN0aW9uLCBpbnZva2UgaXQgYW5kIHVzZSBpdHMgcmV0dXJuIHZhbHVlXG5cdFx0XHR2YXIgdmFsdWUgPSBpc0Z1bmN0aW9uKCB2YWx1ZU9yRnVuY3Rpb24gKSA/XG5cdFx0XHRcdHZhbHVlT3JGdW5jdGlvbigpIDpcblx0XHRcdFx0dmFsdWVPckZ1bmN0aW9uO1xuXG5cdFx0XHRzWyBzLmxlbmd0aCBdID0gZW5jb2RlVVJJQ29tcG9uZW50KCBrZXkgKSArIFwiPVwiICtcblx0XHRcdFx0ZW5jb2RlVVJJQ29tcG9uZW50KCB2YWx1ZSA9PSBudWxsID8gXCJcIiA6IHZhbHVlICk7XG5cdFx0fTtcblxuXHRpZiAoIGEgPT0gbnVsbCApIHtcblx0XHRyZXR1cm4gXCJcIjtcblx0fVxuXG5cdC8vIElmIGFuIGFycmF5IHdhcyBwYXNzZWQgaW4sIGFzc3VtZSB0aGF0IGl0IGlzIGFuIGFycmF5IG9mIGZvcm0gZWxlbWVudHMuXG5cdGlmICggQXJyYXkuaXNBcnJheSggYSApIHx8ICggYS5qcXVlcnkgJiYgIWpRdWVyeS5pc1BsYWluT2JqZWN0KCBhICkgKSApIHtcblxuXHRcdC8vIFNlcmlhbGl6ZSB0aGUgZm9ybSBlbGVtZW50c1xuXHRcdGpRdWVyeS5lYWNoKCBhLCBmdW5jdGlvbigpIHtcblx0XHRcdGFkZCggdGhpcy5uYW1lLCB0aGlzLnZhbHVlICk7XG5cdFx0fSApO1xuXG5cdH0gZWxzZSB7XG5cblx0XHQvLyBJZiB0cmFkaXRpb25hbCwgZW5jb2RlIHRoZSBcIm9sZFwiIHdheSAodGhlIHdheSAxLjMuMiBvciBvbGRlclxuXHRcdC8vIGRpZCBpdCksIG90aGVyd2lzZSBlbmNvZGUgcGFyYW1zIHJlY3Vyc2l2ZWx5LlxuXHRcdGZvciAoIHByZWZpeCBpbiBhICkge1xuXHRcdFx0YnVpbGRQYXJhbXMoIHByZWZpeCwgYVsgcHJlZml4IF0sIHRyYWRpdGlvbmFsLCBhZGQgKTtcblx0XHR9XG5cdH1cblxuXHQvLyBSZXR1cm4gdGhlIHJlc3VsdGluZyBzZXJpYWxpemF0aW9uXG5cdHJldHVybiBzLmpvaW4oIFwiJlwiICk7XG59O1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdHNlcmlhbGl6ZTogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIGpRdWVyeS5wYXJhbSggdGhpcy5zZXJpYWxpemVBcnJheSgpICk7XG5cdH0sXG5cdHNlcmlhbGl6ZUFycmF5OiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5tYXAoIGZ1bmN0aW9uKCkge1xuXG5cdFx0XHQvLyBDYW4gYWRkIHByb3BIb29rIGZvciBcImVsZW1lbnRzXCIgdG8gZmlsdGVyIG9yIGFkZCBmb3JtIGVsZW1lbnRzXG5cdFx0XHR2YXIgZWxlbWVudHMgPSBqUXVlcnkucHJvcCggdGhpcywgXCJlbGVtZW50c1wiICk7XG5cdFx0XHRyZXR1cm4gZWxlbWVudHMgPyBqUXVlcnkubWFrZUFycmF5KCBlbGVtZW50cyApIDogdGhpcztcblx0XHR9IClcblx0XHQuZmlsdGVyKCBmdW5jdGlvbigpIHtcblx0XHRcdHZhciB0eXBlID0gdGhpcy50eXBlO1xuXG5cdFx0XHQvLyBVc2UgLmlzKCBcIjpkaXNhYmxlZFwiICkgc28gdGhhdCBmaWVsZHNldFtkaXNhYmxlZF0gd29ya3Ncblx0XHRcdHJldHVybiB0aGlzLm5hbWUgJiYgIWpRdWVyeSggdGhpcyApLmlzKCBcIjpkaXNhYmxlZFwiICkgJiZcblx0XHRcdFx0cnN1Ym1pdHRhYmxlLnRlc3QoIHRoaXMubm9kZU5hbWUgKSAmJiAhcnN1Ym1pdHRlclR5cGVzLnRlc3QoIHR5cGUgKSAmJlxuXHRcdFx0XHQoIHRoaXMuY2hlY2tlZCB8fCAhcmNoZWNrYWJsZVR5cGUudGVzdCggdHlwZSApICk7XG5cdFx0fSApXG5cdFx0Lm1hcCggZnVuY3Rpb24oIGksIGVsZW0gKSB7XG5cdFx0XHR2YXIgdmFsID0galF1ZXJ5KCB0aGlzICkudmFsKCk7XG5cblx0XHRcdGlmICggdmFsID09IG51bGwgKSB7XG5cdFx0XHRcdHJldHVybiBudWxsO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIEFycmF5LmlzQXJyYXkoIHZhbCApICkge1xuXHRcdFx0XHRyZXR1cm4galF1ZXJ5Lm1hcCggdmFsLCBmdW5jdGlvbiggdmFsICkge1xuXHRcdFx0XHRcdHJldHVybiB7IG5hbWU6IGVsZW0ubmFtZSwgdmFsdWU6IHZhbC5yZXBsYWNlKCByQ1JMRiwgXCJcXHJcXG5cIiApIH07XG5cdFx0XHRcdH0gKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHsgbmFtZTogZWxlbS5uYW1lLCB2YWx1ZTogdmFsLnJlcGxhY2UoIHJDUkxGLCBcIlxcclxcblwiICkgfTtcblx0XHR9ICkuZ2V0KCk7XG5cdH1cbn0gKTtcblxuXG52YXJcblx0cjIwID0gLyUyMC9nLFxuXHRyaGFzaCA9IC8jLiokLyxcblx0cmFudGlDYWNoZSA9IC8oWz8mXSlfPVteJl0qLyxcblx0cmhlYWRlcnMgPSAvXiguKj8pOlsgXFx0XSooW15cXHJcXG5dKikkL21nLFxuXG5cdC8vICM3NjUzLCAjODEyNSwgIzgxNTI6IGxvY2FsIHByb3RvY29sIGRldGVjdGlvblxuXHRybG9jYWxQcm90b2NvbCA9IC9eKD86YWJvdXR8YXBwfGFwcC1zdG9yYWdlfC4rLWV4dGVuc2lvbnxmaWxlfHJlc3x3aWRnZXQpOiQvLFxuXHRybm9Db250ZW50ID0gL14oPzpHRVR8SEVBRCkkLyxcblx0cnByb3RvY29sID0gL15cXC9cXC8vLFxuXG5cdC8qIFByZWZpbHRlcnNcblx0ICogMSkgVGhleSBhcmUgdXNlZnVsIHRvIGludHJvZHVjZSBjdXN0b20gZGF0YVR5cGVzIChzZWUgYWpheC9qc29ucC5qcyBmb3IgYW4gZXhhbXBsZSlcblx0ICogMikgVGhlc2UgYXJlIGNhbGxlZDpcblx0ICogICAgLSBCRUZPUkUgYXNraW5nIGZvciBhIHRyYW5zcG9ydFxuXHQgKiAgICAtIEFGVEVSIHBhcmFtIHNlcmlhbGl6YXRpb24gKHMuZGF0YSBpcyBhIHN0cmluZyBpZiBzLnByb2Nlc3NEYXRhIGlzIHRydWUpXG5cdCAqIDMpIGtleSBpcyB0aGUgZGF0YVR5cGVcblx0ICogNCkgdGhlIGNhdGNoYWxsIHN5bWJvbCBcIipcIiBjYW4gYmUgdXNlZFxuXHQgKiA1KSBleGVjdXRpb24gd2lsbCBzdGFydCB3aXRoIHRyYW5zcG9ydCBkYXRhVHlwZSBhbmQgVEhFTiBjb250aW51ZSBkb3duIHRvIFwiKlwiIGlmIG5lZWRlZFxuXHQgKi9cblx0cHJlZmlsdGVycyA9IHt9LFxuXG5cdC8qIFRyYW5zcG9ydHMgYmluZGluZ3Ncblx0ICogMSkga2V5IGlzIHRoZSBkYXRhVHlwZVxuXHQgKiAyKSB0aGUgY2F0Y2hhbGwgc3ltYm9sIFwiKlwiIGNhbiBiZSB1c2VkXG5cdCAqIDMpIHNlbGVjdGlvbiB3aWxsIHN0YXJ0IHdpdGggdHJhbnNwb3J0IGRhdGFUeXBlIGFuZCBUSEVOIGdvIHRvIFwiKlwiIGlmIG5lZWRlZFxuXHQgKi9cblx0dHJhbnNwb3J0cyA9IHt9LFxuXG5cdC8vIEF2b2lkIGNvbW1lbnQtcHJvbG9nIGNoYXIgc2VxdWVuY2UgKCMxMDA5OCk7IG11c3QgYXBwZWFzZSBsaW50IGFuZCBldmFkZSBjb21wcmVzc2lvblxuXHRhbGxUeXBlcyA9IFwiKi9cIi5jb25jYXQoIFwiKlwiICksXG5cblx0Ly8gQW5jaG9yIHRhZyBmb3IgcGFyc2luZyB0aGUgZG9jdW1lbnQgb3JpZ2luXG5cdG9yaWdpbkFuY2hvciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiYVwiICk7XG5cdG9yaWdpbkFuY2hvci5ocmVmID0gbG9jYXRpb24uaHJlZjtcblxuLy8gQmFzZSBcImNvbnN0cnVjdG9yXCIgZm9yIGpRdWVyeS5hamF4UHJlZmlsdGVyIGFuZCBqUXVlcnkuYWpheFRyYW5zcG9ydFxuZnVuY3Rpb24gYWRkVG9QcmVmaWx0ZXJzT3JUcmFuc3BvcnRzKCBzdHJ1Y3R1cmUgKSB7XG5cblx0Ly8gZGF0YVR5cGVFeHByZXNzaW9uIGlzIG9wdGlvbmFsIGFuZCBkZWZhdWx0cyB0byBcIipcIlxuXHRyZXR1cm4gZnVuY3Rpb24oIGRhdGFUeXBlRXhwcmVzc2lvbiwgZnVuYyApIHtcblxuXHRcdGlmICggdHlwZW9mIGRhdGFUeXBlRXhwcmVzc2lvbiAhPT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdGZ1bmMgPSBkYXRhVHlwZUV4cHJlc3Npb247XG5cdFx0XHRkYXRhVHlwZUV4cHJlc3Npb24gPSBcIipcIjtcblx0XHR9XG5cblx0XHR2YXIgZGF0YVR5cGUsXG5cdFx0XHRpID0gMCxcblx0XHRcdGRhdGFUeXBlcyA9IGRhdGFUeXBlRXhwcmVzc2lvbi50b0xvd2VyQ2FzZSgpLm1hdGNoKCBybm90aHRtbHdoaXRlICkgfHwgW107XG5cblx0XHRpZiAoIGlzRnVuY3Rpb24oIGZ1bmMgKSApIHtcblxuXHRcdFx0Ly8gRm9yIGVhY2ggZGF0YVR5cGUgaW4gdGhlIGRhdGFUeXBlRXhwcmVzc2lvblxuXHRcdFx0d2hpbGUgKCAoIGRhdGFUeXBlID0gZGF0YVR5cGVzWyBpKysgXSApICkge1xuXG5cdFx0XHRcdC8vIFByZXBlbmQgaWYgcmVxdWVzdGVkXG5cdFx0XHRcdGlmICggZGF0YVR5cGVbIDAgXSA9PT0gXCIrXCIgKSB7XG5cdFx0XHRcdFx0ZGF0YVR5cGUgPSBkYXRhVHlwZS5zbGljZSggMSApIHx8IFwiKlwiO1xuXHRcdFx0XHRcdCggc3RydWN0dXJlWyBkYXRhVHlwZSBdID0gc3RydWN0dXJlWyBkYXRhVHlwZSBdIHx8IFtdICkudW5zaGlmdCggZnVuYyApO1xuXG5cdFx0XHRcdC8vIE90aGVyd2lzZSBhcHBlbmRcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQoIHN0cnVjdHVyZVsgZGF0YVR5cGUgXSA9IHN0cnVjdHVyZVsgZGF0YVR5cGUgXSB8fCBbXSApLnB1c2goIGZ1bmMgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fTtcbn1cblxuLy8gQmFzZSBpbnNwZWN0aW9uIGZ1bmN0aW9uIGZvciBwcmVmaWx0ZXJzIGFuZCB0cmFuc3BvcnRzXG5mdW5jdGlvbiBpbnNwZWN0UHJlZmlsdGVyc09yVHJhbnNwb3J0cyggc3RydWN0dXJlLCBvcHRpb25zLCBvcmlnaW5hbE9wdGlvbnMsIGpxWEhSICkge1xuXG5cdHZhciBpbnNwZWN0ZWQgPSB7fSxcblx0XHRzZWVraW5nVHJhbnNwb3J0ID0gKCBzdHJ1Y3R1cmUgPT09IHRyYW5zcG9ydHMgKTtcblxuXHRmdW5jdGlvbiBpbnNwZWN0KCBkYXRhVHlwZSApIHtcblx0XHR2YXIgc2VsZWN0ZWQ7XG5cdFx0aW5zcGVjdGVkWyBkYXRhVHlwZSBdID0gdHJ1ZTtcblx0XHRqUXVlcnkuZWFjaCggc3RydWN0dXJlWyBkYXRhVHlwZSBdIHx8IFtdLCBmdW5jdGlvbiggXywgcHJlZmlsdGVyT3JGYWN0b3J5ICkge1xuXHRcdFx0dmFyIGRhdGFUeXBlT3JUcmFuc3BvcnQgPSBwcmVmaWx0ZXJPckZhY3RvcnkoIG9wdGlvbnMsIG9yaWdpbmFsT3B0aW9ucywganFYSFIgKTtcblx0XHRcdGlmICggdHlwZW9mIGRhdGFUeXBlT3JUcmFuc3BvcnQgPT09IFwic3RyaW5nXCIgJiZcblx0XHRcdFx0IXNlZWtpbmdUcmFuc3BvcnQgJiYgIWluc3BlY3RlZFsgZGF0YVR5cGVPclRyYW5zcG9ydCBdICkge1xuXG5cdFx0XHRcdG9wdGlvbnMuZGF0YVR5cGVzLnVuc2hpZnQoIGRhdGFUeXBlT3JUcmFuc3BvcnQgKTtcblx0XHRcdFx0aW5zcGVjdCggZGF0YVR5cGVPclRyYW5zcG9ydCApO1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9IGVsc2UgaWYgKCBzZWVraW5nVHJhbnNwb3J0ICkge1xuXHRcdFx0XHRyZXR1cm4gISggc2VsZWN0ZWQgPSBkYXRhVHlwZU9yVHJhbnNwb3J0ICk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXHRcdHJldHVybiBzZWxlY3RlZDtcblx0fVxuXG5cdHJldHVybiBpbnNwZWN0KCBvcHRpb25zLmRhdGFUeXBlc1sgMCBdICkgfHwgIWluc3BlY3RlZFsgXCIqXCIgXSAmJiBpbnNwZWN0KCBcIipcIiApO1xufVxuXG4vLyBBIHNwZWNpYWwgZXh0ZW5kIGZvciBhamF4IG9wdGlvbnNcbi8vIHRoYXQgdGFrZXMgXCJmbGF0XCIgb3B0aW9ucyAobm90IHRvIGJlIGRlZXAgZXh0ZW5kZWQpXG4vLyBGaXhlcyAjOTg4N1xuZnVuY3Rpb24gYWpheEV4dGVuZCggdGFyZ2V0LCBzcmMgKSB7XG5cdHZhciBrZXksIGRlZXAsXG5cdFx0ZmxhdE9wdGlvbnMgPSBqUXVlcnkuYWpheFNldHRpbmdzLmZsYXRPcHRpb25zIHx8IHt9O1xuXG5cdGZvciAoIGtleSBpbiBzcmMgKSB7XG5cdFx0aWYgKCBzcmNbIGtleSBdICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHQoIGZsYXRPcHRpb25zWyBrZXkgXSA/IHRhcmdldCA6ICggZGVlcCB8fCAoIGRlZXAgPSB7fSApICkgKVsga2V5IF0gPSBzcmNbIGtleSBdO1xuXHRcdH1cblx0fVxuXHRpZiAoIGRlZXAgKSB7XG5cdFx0alF1ZXJ5LmV4dGVuZCggdHJ1ZSwgdGFyZ2V0LCBkZWVwICk7XG5cdH1cblxuXHRyZXR1cm4gdGFyZ2V0O1xufVxuXG4vKiBIYW5kbGVzIHJlc3BvbnNlcyB0byBhbiBhamF4IHJlcXVlc3Q6XG4gKiAtIGZpbmRzIHRoZSByaWdodCBkYXRhVHlwZSAobWVkaWF0ZXMgYmV0d2VlbiBjb250ZW50LXR5cGUgYW5kIGV4cGVjdGVkIGRhdGFUeXBlKVxuICogLSByZXR1cm5zIHRoZSBjb3JyZXNwb25kaW5nIHJlc3BvbnNlXG4gKi9cbmZ1bmN0aW9uIGFqYXhIYW5kbGVSZXNwb25zZXMoIHMsIGpxWEhSLCByZXNwb25zZXMgKSB7XG5cblx0dmFyIGN0LCB0eXBlLCBmaW5hbERhdGFUeXBlLCBmaXJzdERhdGFUeXBlLFxuXHRcdGNvbnRlbnRzID0gcy5jb250ZW50cyxcblx0XHRkYXRhVHlwZXMgPSBzLmRhdGFUeXBlcztcblxuXHQvLyBSZW1vdmUgYXV0byBkYXRhVHlwZSBhbmQgZ2V0IGNvbnRlbnQtdHlwZSBpbiB0aGUgcHJvY2Vzc1xuXHR3aGlsZSAoIGRhdGFUeXBlc1sgMCBdID09PSBcIipcIiApIHtcblx0XHRkYXRhVHlwZXMuc2hpZnQoKTtcblx0XHRpZiAoIGN0ID09PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRjdCA9IHMubWltZVR5cGUgfHwganFYSFIuZ2V0UmVzcG9uc2VIZWFkZXIoIFwiQ29udGVudC1UeXBlXCIgKTtcblx0XHR9XG5cdH1cblxuXHQvLyBDaGVjayBpZiB3ZSdyZSBkZWFsaW5nIHdpdGggYSBrbm93biBjb250ZW50LXR5cGVcblx0aWYgKCBjdCApIHtcblx0XHRmb3IgKCB0eXBlIGluIGNvbnRlbnRzICkge1xuXHRcdFx0aWYgKCBjb250ZW50c1sgdHlwZSBdICYmIGNvbnRlbnRzWyB0eXBlIF0udGVzdCggY3QgKSApIHtcblx0XHRcdFx0ZGF0YVR5cGVzLnVuc2hpZnQoIHR5cGUgKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gQ2hlY2sgdG8gc2VlIGlmIHdlIGhhdmUgYSByZXNwb25zZSBmb3IgdGhlIGV4cGVjdGVkIGRhdGFUeXBlXG5cdGlmICggZGF0YVR5cGVzWyAwIF0gaW4gcmVzcG9uc2VzICkge1xuXHRcdGZpbmFsRGF0YVR5cGUgPSBkYXRhVHlwZXNbIDAgXTtcblx0fSBlbHNlIHtcblxuXHRcdC8vIFRyeSBjb252ZXJ0aWJsZSBkYXRhVHlwZXNcblx0XHRmb3IgKCB0eXBlIGluIHJlc3BvbnNlcyApIHtcblx0XHRcdGlmICggIWRhdGFUeXBlc1sgMCBdIHx8IHMuY29udmVydGVyc1sgdHlwZSArIFwiIFwiICsgZGF0YVR5cGVzWyAwIF0gXSApIHtcblx0XHRcdFx0ZmluYWxEYXRhVHlwZSA9IHR5cGU7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCAhZmlyc3REYXRhVHlwZSApIHtcblx0XHRcdFx0Zmlyc3REYXRhVHlwZSA9IHR5cGU7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gT3IganVzdCB1c2UgZmlyc3Qgb25lXG5cdFx0ZmluYWxEYXRhVHlwZSA9IGZpbmFsRGF0YVR5cGUgfHwgZmlyc3REYXRhVHlwZTtcblx0fVxuXG5cdC8vIElmIHdlIGZvdW5kIGEgZGF0YVR5cGVcblx0Ly8gV2UgYWRkIHRoZSBkYXRhVHlwZSB0byB0aGUgbGlzdCBpZiBuZWVkZWRcblx0Ly8gYW5kIHJldHVybiB0aGUgY29ycmVzcG9uZGluZyByZXNwb25zZVxuXHRpZiAoIGZpbmFsRGF0YVR5cGUgKSB7XG5cdFx0aWYgKCBmaW5hbERhdGFUeXBlICE9PSBkYXRhVHlwZXNbIDAgXSApIHtcblx0XHRcdGRhdGFUeXBlcy51bnNoaWZ0KCBmaW5hbERhdGFUeXBlICk7XG5cdFx0fVxuXHRcdHJldHVybiByZXNwb25zZXNbIGZpbmFsRGF0YVR5cGUgXTtcblx0fVxufVxuXG4vKiBDaGFpbiBjb252ZXJzaW9ucyBnaXZlbiB0aGUgcmVxdWVzdCBhbmQgdGhlIG9yaWdpbmFsIHJlc3BvbnNlXG4gKiBBbHNvIHNldHMgdGhlIHJlc3BvbnNlWFhYIGZpZWxkcyBvbiB0aGUganFYSFIgaW5zdGFuY2VcbiAqL1xuZnVuY3Rpb24gYWpheENvbnZlcnQoIHMsIHJlc3BvbnNlLCBqcVhIUiwgaXNTdWNjZXNzICkge1xuXHR2YXIgY29udjIsIGN1cnJlbnQsIGNvbnYsIHRtcCwgcHJldixcblx0XHRjb252ZXJ0ZXJzID0ge30sXG5cblx0XHQvLyBXb3JrIHdpdGggYSBjb3B5IG9mIGRhdGFUeXBlcyBpbiBjYXNlIHdlIG5lZWQgdG8gbW9kaWZ5IGl0IGZvciBjb252ZXJzaW9uXG5cdFx0ZGF0YVR5cGVzID0gcy5kYXRhVHlwZXMuc2xpY2UoKTtcblxuXHQvLyBDcmVhdGUgY29udmVydGVycyBtYXAgd2l0aCBsb3dlcmNhc2VkIGtleXNcblx0aWYgKCBkYXRhVHlwZXNbIDEgXSApIHtcblx0XHRmb3IgKCBjb252IGluIHMuY29udmVydGVycyApIHtcblx0XHRcdGNvbnZlcnRlcnNbIGNvbnYudG9Mb3dlckNhc2UoKSBdID0gcy5jb252ZXJ0ZXJzWyBjb252IF07XG5cdFx0fVxuXHR9XG5cblx0Y3VycmVudCA9IGRhdGFUeXBlcy5zaGlmdCgpO1xuXG5cdC8vIENvbnZlcnQgdG8gZWFjaCBzZXF1ZW50aWFsIGRhdGFUeXBlXG5cdHdoaWxlICggY3VycmVudCApIHtcblxuXHRcdGlmICggcy5yZXNwb25zZUZpZWxkc1sgY3VycmVudCBdICkge1xuXHRcdFx0anFYSFJbIHMucmVzcG9uc2VGaWVsZHNbIGN1cnJlbnQgXSBdID0gcmVzcG9uc2U7XG5cdFx0fVxuXG5cdFx0Ly8gQXBwbHkgdGhlIGRhdGFGaWx0ZXIgaWYgcHJvdmlkZWRcblx0XHRpZiAoICFwcmV2ICYmIGlzU3VjY2VzcyAmJiBzLmRhdGFGaWx0ZXIgKSB7XG5cdFx0XHRyZXNwb25zZSA9IHMuZGF0YUZpbHRlciggcmVzcG9uc2UsIHMuZGF0YVR5cGUgKTtcblx0XHR9XG5cblx0XHRwcmV2ID0gY3VycmVudDtcblx0XHRjdXJyZW50ID0gZGF0YVR5cGVzLnNoaWZ0KCk7XG5cblx0XHRpZiAoIGN1cnJlbnQgKSB7XG5cblx0XHRcdC8vIFRoZXJlJ3Mgb25seSB3b3JrIHRvIGRvIGlmIGN1cnJlbnQgZGF0YVR5cGUgaXMgbm9uLWF1dG9cblx0XHRcdGlmICggY3VycmVudCA9PT0gXCIqXCIgKSB7XG5cblx0XHRcdFx0Y3VycmVudCA9IHByZXY7XG5cblx0XHRcdC8vIENvbnZlcnQgcmVzcG9uc2UgaWYgcHJldiBkYXRhVHlwZSBpcyBub24tYXV0byBhbmQgZGlmZmVycyBmcm9tIGN1cnJlbnRcblx0XHRcdH0gZWxzZSBpZiAoIHByZXYgIT09IFwiKlwiICYmIHByZXYgIT09IGN1cnJlbnQgKSB7XG5cblx0XHRcdFx0Ly8gU2VlayBhIGRpcmVjdCBjb252ZXJ0ZXJcblx0XHRcdFx0Y29udiA9IGNvbnZlcnRlcnNbIHByZXYgKyBcIiBcIiArIGN1cnJlbnQgXSB8fCBjb252ZXJ0ZXJzWyBcIiogXCIgKyBjdXJyZW50IF07XG5cblx0XHRcdFx0Ly8gSWYgbm9uZSBmb3VuZCwgc2VlayBhIHBhaXJcblx0XHRcdFx0aWYgKCAhY29udiApIHtcblx0XHRcdFx0XHRmb3IgKCBjb252MiBpbiBjb252ZXJ0ZXJzICkge1xuXG5cdFx0XHRcdFx0XHQvLyBJZiBjb252MiBvdXRwdXRzIGN1cnJlbnRcblx0XHRcdFx0XHRcdHRtcCA9IGNvbnYyLnNwbGl0KCBcIiBcIiApO1xuXHRcdFx0XHRcdFx0aWYgKCB0bXBbIDEgXSA9PT0gY3VycmVudCApIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBJZiBwcmV2IGNhbiBiZSBjb252ZXJ0ZWQgdG8gYWNjZXB0ZWQgaW5wdXRcblx0XHRcdFx0XHRcdFx0Y29udiA9IGNvbnZlcnRlcnNbIHByZXYgKyBcIiBcIiArIHRtcFsgMCBdIF0gfHxcblx0XHRcdFx0XHRcdFx0XHRjb252ZXJ0ZXJzWyBcIiogXCIgKyB0bXBbIDAgXSBdO1xuXHRcdFx0XHRcdFx0XHRpZiAoIGNvbnYgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHQvLyBDb25kZW5zZSBlcXVpdmFsZW5jZSBjb252ZXJ0ZXJzXG5cdFx0XHRcdFx0XHRcdFx0aWYgKCBjb252ID09PSB0cnVlICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0Y29udiA9IGNvbnZlcnRlcnNbIGNvbnYyIF07XG5cblx0XHRcdFx0XHRcdFx0XHQvLyBPdGhlcndpc2UsIGluc2VydCB0aGUgaW50ZXJtZWRpYXRlIGRhdGFUeXBlXG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmICggY29udmVydGVyc1sgY29udjIgXSAhPT0gdHJ1ZSApIHtcblx0XHRcdFx0XHRcdFx0XHRcdGN1cnJlbnQgPSB0bXBbIDAgXTtcblx0XHRcdFx0XHRcdFx0XHRcdGRhdGFUeXBlcy51bnNoaWZ0KCB0bXBbIDEgXSApO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIEFwcGx5IGNvbnZlcnRlciAoaWYgbm90IGFuIGVxdWl2YWxlbmNlKVxuXHRcdFx0XHRpZiAoIGNvbnYgIT09IHRydWUgKSB7XG5cblx0XHRcdFx0XHQvLyBVbmxlc3MgZXJyb3JzIGFyZSBhbGxvd2VkIHRvIGJ1YmJsZSwgY2F0Y2ggYW5kIHJldHVybiB0aGVtXG5cdFx0XHRcdFx0aWYgKCBjb252ICYmIHMudGhyb3dzICkge1xuXHRcdFx0XHRcdFx0cmVzcG9uc2UgPSBjb252KCByZXNwb25zZSApO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0XHRyZXNwb25zZSA9IGNvbnYoIHJlc3BvbnNlICk7XG5cdFx0XHRcdFx0XHR9IGNhdGNoICggZSApIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRcdFx0XHRzdGF0ZTogXCJwYXJzZXJlcnJvclwiLFxuXHRcdFx0XHRcdFx0XHRcdGVycm9yOiBjb252ID8gZSA6IFwiTm8gY29udmVyc2lvbiBmcm9tIFwiICsgcHJldiArIFwiIHRvIFwiICsgY3VycmVudFxuXHRcdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiB7IHN0YXRlOiBcInN1Y2Nlc3NcIiwgZGF0YTogcmVzcG9uc2UgfTtcbn1cblxualF1ZXJ5LmV4dGVuZCgge1xuXG5cdC8vIENvdW50ZXIgZm9yIGhvbGRpbmcgdGhlIG51bWJlciBvZiBhY3RpdmUgcXVlcmllc1xuXHRhY3RpdmU6IDAsXG5cblx0Ly8gTGFzdC1Nb2RpZmllZCBoZWFkZXIgY2FjaGUgZm9yIG5leHQgcmVxdWVzdFxuXHRsYXN0TW9kaWZpZWQ6IHt9LFxuXHRldGFnOiB7fSxcblxuXHRhamF4U2V0dGluZ3M6IHtcblx0XHR1cmw6IGxvY2F0aW9uLmhyZWYsXG5cdFx0dHlwZTogXCJHRVRcIixcblx0XHRpc0xvY2FsOiBybG9jYWxQcm90b2NvbC50ZXN0KCBsb2NhdGlvbi5wcm90b2NvbCApLFxuXHRcdGdsb2JhbDogdHJ1ZSxcblx0XHRwcm9jZXNzRGF0YTogdHJ1ZSxcblx0XHRhc3luYzogdHJ1ZSxcblx0XHRjb250ZW50VHlwZTogXCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7IGNoYXJzZXQ9VVRGLThcIixcblxuXHRcdC8qXG5cdFx0dGltZW91dDogMCxcblx0XHRkYXRhOiBudWxsLFxuXHRcdGRhdGFUeXBlOiBudWxsLFxuXHRcdHVzZXJuYW1lOiBudWxsLFxuXHRcdHBhc3N3b3JkOiBudWxsLFxuXHRcdGNhY2hlOiBudWxsLFxuXHRcdHRocm93czogZmFsc2UsXG5cdFx0dHJhZGl0aW9uYWw6IGZhbHNlLFxuXHRcdGhlYWRlcnM6IHt9LFxuXHRcdCovXG5cblx0XHRhY2NlcHRzOiB7XG5cdFx0XHRcIipcIjogYWxsVHlwZXMsXG5cdFx0XHR0ZXh0OiBcInRleHQvcGxhaW5cIixcblx0XHRcdGh0bWw6IFwidGV4dC9odG1sXCIsXG5cdFx0XHR4bWw6IFwiYXBwbGljYXRpb24veG1sLCB0ZXh0L3htbFwiLFxuXHRcdFx0anNvbjogXCJhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L2phdmFzY3JpcHRcIlxuXHRcdH0sXG5cblx0XHRjb250ZW50czoge1xuXHRcdFx0eG1sOiAvXFxieG1sXFxiLyxcblx0XHRcdGh0bWw6IC9cXGJodG1sLyxcblx0XHRcdGpzb246IC9cXGJqc29uXFxiL1xuXHRcdH0sXG5cblx0XHRyZXNwb25zZUZpZWxkczoge1xuXHRcdFx0eG1sOiBcInJlc3BvbnNlWE1MXCIsXG5cdFx0XHR0ZXh0OiBcInJlc3BvbnNlVGV4dFwiLFxuXHRcdFx0anNvbjogXCJyZXNwb25zZUpTT05cIlxuXHRcdH0sXG5cblx0XHQvLyBEYXRhIGNvbnZlcnRlcnNcblx0XHQvLyBLZXlzIHNlcGFyYXRlIHNvdXJjZSAob3IgY2F0Y2hhbGwgXCIqXCIpIGFuZCBkZXN0aW5hdGlvbiB0eXBlcyB3aXRoIGEgc2luZ2xlIHNwYWNlXG5cdFx0Y29udmVydGVyczoge1xuXG5cdFx0XHQvLyBDb252ZXJ0IGFueXRoaW5nIHRvIHRleHRcblx0XHRcdFwiKiB0ZXh0XCI6IFN0cmluZyxcblxuXHRcdFx0Ly8gVGV4dCB0byBodG1sICh0cnVlID0gbm8gdHJhbnNmb3JtYXRpb24pXG5cdFx0XHRcInRleHQgaHRtbFwiOiB0cnVlLFxuXG5cdFx0XHQvLyBFdmFsdWF0ZSB0ZXh0IGFzIGEganNvbiBleHByZXNzaW9uXG5cdFx0XHRcInRleHQganNvblwiOiBKU09OLnBhcnNlLFxuXG5cdFx0XHQvLyBQYXJzZSB0ZXh0IGFzIHhtbFxuXHRcdFx0XCJ0ZXh0IHhtbFwiOiBqUXVlcnkucGFyc2VYTUxcblx0XHR9LFxuXG5cdFx0Ly8gRm9yIG9wdGlvbnMgdGhhdCBzaG91bGRuJ3QgYmUgZGVlcCBleHRlbmRlZDpcblx0XHQvLyB5b3UgY2FuIGFkZCB5b3VyIG93biBjdXN0b20gb3B0aW9ucyBoZXJlIGlmXG5cdFx0Ly8gYW5kIHdoZW4geW91IGNyZWF0ZSBvbmUgdGhhdCBzaG91bGRuJ3QgYmVcblx0XHQvLyBkZWVwIGV4dGVuZGVkIChzZWUgYWpheEV4dGVuZClcblx0XHRmbGF0T3B0aW9uczoge1xuXHRcdFx0dXJsOiB0cnVlLFxuXHRcdFx0Y29udGV4dDogdHJ1ZVxuXHRcdH1cblx0fSxcblxuXHQvLyBDcmVhdGVzIGEgZnVsbCBmbGVkZ2VkIHNldHRpbmdzIG9iamVjdCBpbnRvIHRhcmdldFxuXHQvLyB3aXRoIGJvdGggYWpheFNldHRpbmdzIGFuZCBzZXR0aW5ncyBmaWVsZHMuXG5cdC8vIElmIHRhcmdldCBpcyBvbWl0dGVkLCB3cml0ZXMgaW50byBhamF4U2V0dGluZ3MuXG5cdGFqYXhTZXR1cDogZnVuY3Rpb24oIHRhcmdldCwgc2V0dGluZ3MgKSB7XG5cdFx0cmV0dXJuIHNldHRpbmdzID9cblxuXHRcdFx0Ly8gQnVpbGRpbmcgYSBzZXR0aW5ncyBvYmplY3Rcblx0XHRcdGFqYXhFeHRlbmQoIGFqYXhFeHRlbmQoIHRhcmdldCwgalF1ZXJ5LmFqYXhTZXR0aW5ncyApLCBzZXR0aW5ncyApIDpcblxuXHRcdFx0Ly8gRXh0ZW5kaW5nIGFqYXhTZXR0aW5nc1xuXHRcdFx0YWpheEV4dGVuZCggalF1ZXJ5LmFqYXhTZXR0aW5ncywgdGFyZ2V0ICk7XG5cdH0sXG5cblx0YWpheFByZWZpbHRlcjogYWRkVG9QcmVmaWx0ZXJzT3JUcmFuc3BvcnRzKCBwcmVmaWx0ZXJzICksXG5cdGFqYXhUcmFuc3BvcnQ6IGFkZFRvUHJlZmlsdGVyc09yVHJhbnNwb3J0cyggdHJhbnNwb3J0cyApLFxuXG5cdC8vIE1haW4gbWV0aG9kXG5cdGFqYXg6IGZ1bmN0aW9uKCB1cmwsIG9wdGlvbnMgKSB7XG5cblx0XHQvLyBJZiB1cmwgaXMgYW4gb2JqZWN0LCBzaW11bGF0ZSBwcmUtMS41IHNpZ25hdHVyZVxuXHRcdGlmICggdHlwZW9mIHVybCA9PT0gXCJvYmplY3RcIiApIHtcblx0XHRcdG9wdGlvbnMgPSB1cmw7XG5cdFx0XHR1cmwgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXG5cdFx0Ly8gRm9yY2Ugb3B0aW9ucyB0byBiZSBhbiBvYmplY3Rcblx0XHRvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuXHRcdHZhciB0cmFuc3BvcnQsXG5cblx0XHRcdC8vIFVSTCB3aXRob3V0IGFudGktY2FjaGUgcGFyYW1cblx0XHRcdGNhY2hlVVJMLFxuXG5cdFx0XHQvLyBSZXNwb25zZSBoZWFkZXJzXG5cdFx0XHRyZXNwb25zZUhlYWRlcnNTdHJpbmcsXG5cdFx0XHRyZXNwb25zZUhlYWRlcnMsXG5cblx0XHRcdC8vIHRpbWVvdXQgaGFuZGxlXG5cdFx0XHR0aW1lb3V0VGltZXIsXG5cblx0XHRcdC8vIFVybCBjbGVhbnVwIHZhclxuXHRcdFx0dXJsQW5jaG9yLFxuXG5cdFx0XHQvLyBSZXF1ZXN0IHN0YXRlIChiZWNvbWVzIGZhbHNlIHVwb24gc2VuZCBhbmQgdHJ1ZSB1cG9uIGNvbXBsZXRpb24pXG5cdFx0XHRjb21wbGV0ZWQsXG5cblx0XHRcdC8vIFRvIGtub3cgaWYgZ2xvYmFsIGV2ZW50cyBhcmUgdG8gYmUgZGlzcGF0Y2hlZFxuXHRcdFx0ZmlyZUdsb2JhbHMsXG5cblx0XHRcdC8vIExvb3AgdmFyaWFibGVcblx0XHRcdGksXG5cblx0XHRcdC8vIHVuY2FjaGVkIHBhcnQgb2YgdGhlIHVybFxuXHRcdFx0dW5jYWNoZWQsXG5cblx0XHRcdC8vIENyZWF0ZSB0aGUgZmluYWwgb3B0aW9ucyBvYmplY3Rcblx0XHRcdHMgPSBqUXVlcnkuYWpheFNldHVwKCB7fSwgb3B0aW9ucyApLFxuXG5cdFx0XHQvLyBDYWxsYmFja3MgY29udGV4dFxuXHRcdFx0Y2FsbGJhY2tDb250ZXh0ID0gcy5jb250ZXh0IHx8IHMsXG5cblx0XHRcdC8vIENvbnRleHQgZm9yIGdsb2JhbCBldmVudHMgaXMgY2FsbGJhY2tDb250ZXh0IGlmIGl0IGlzIGEgRE9NIG5vZGUgb3IgalF1ZXJ5IGNvbGxlY3Rpb25cblx0XHRcdGdsb2JhbEV2ZW50Q29udGV4dCA9IHMuY29udGV4dCAmJlxuXHRcdFx0XHQoIGNhbGxiYWNrQ29udGV4dC5ub2RlVHlwZSB8fCBjYWxsYmFja0NvbnRleHQuanF1ZXJ5ICkgP1xuXHRcdFx0XHRcdGpRdWVyeSggY2FsbGJhY2tDb250ZXh0ICkgOlxuXHRcdFx0XHRcdGpRdWVyeS5ldmVudCxcblxuXHRcdFx0Ly8gRGVmZXJyZWRzXG5cdFx0XHRkZWZlcnJlZCA9IGpRdWVyeS5EZWZlcnJlZCgpLFxuXHRcdFx0Y29tcGxldGVEZWZlcnJlZCA9IGpRdWVyeS5DYWxsYmFja3MoIFwib25jZSBtZW1vcnlcIiApLFxuXG5cdFx0XHQvLyBTdGF0dXMtZGVwZW5kZW50IGNhbGxiYWNrc1xuXHRcdFx0c3RhdHVzQ29kZSA9IHMuc3RhdHVzQ29kZSB8fCB7fSxcblxuXHRcdFx0Ly8gSGVhZGVycyAodGhleSBhcmUgc2VudCBhbGwgYXQgb25jZSlcblx0XHRcdHJlcXVlc3RIZWFkZXJzID0ge30sXG5cdFx0XHRyZXF1ZXN0SGVhZGVyc05hbWVzID0ge30sXG5cblx0XHRcdC8vIERlZmF1bHQgYWJvcnQgbWVzc2FnZVxuXHRcdFx0c3RyQWJvcnQgPSBcImNhbmNlbGVkXCIsXG5cblx0XHRcdC8vIEZha2UgeGhyXG5cdFx0XHRqcVhIUiA9IHtcblx0XHRcdFx0cmVhZHlTdGF0ZTogMCxcblxuXHRcdFx0XHQvLyBCdWlsZHMgaGVhZGVycyBoYXNodGFibGUgaWYgbmVlZGVkXG5cdFx0XHRcdGdldFJlc3BvbnNlSGVhZGVyOiBmdW5jdGlvbigga2V5ICkge1xuXHRcdFx0XHRcdHZhciBtYXRjaDtcblx0XHRcdFx0XHRpZiAoIGNvbXBsZXRlZCApIHtcblx0XHRcdFx0XHRcdGlmICggIXJlc3BvbnNlSGVhZGVycyApIHtcblx0XHRcdFx0XHRcdFx0cmVzcG9uc2VIZWFkZXJzID0ge307XG5cdFx0XHRcdFx0XHRcdHdoaWxlICggKCBtYXRjaCA9IHJoZWFkZXJzLmV4ZWMoIHJlc3BvbnNlSGVhZGVyc1N0cmluZyApICkgKSB7XG5cdFx0XHRcdFx0XHRcdFx0cmVzcG9uc2VIZWFkZXJzWyBtYXRjaFsgMSBdLnRvTG93ZXJDYXNlKCkgKyBcIiBcIiBdID1cblx0XHRcdFx0XHRcdFx0XHRcdCggcmVzcG9uc2VIZWFkZXJzWyBtYXRjaFsgMSBdLnRvTG93ZXJDYXNlKCkgKyBcIiBcIiBdIHx8IFtdIClcblx0XHRcdFx0XHRcdFx0XHRcdFx0LmNvbmNhdCggbWF0Y2hbIDIgXSApO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRtYXRjaCA9IHJlc3BvbnNlSGVhZGVyc1sga2V5LnRvTG93ZXJDYXNlKCkgKyBcIiBcIiBdO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gbWF0Y2ggPT0gbnVsbCA/IG51bGwgOiBtYXRjaC5qb2luKCBcIiwgXCIgKTtcblx0XHRcdFx0fSxcblxuXHRcdFx0XHQvLyBSYXcgc3RyaW5nXG5cdFx0XHRcdGdldEFsbFJlc3BvbnNlSGVhZGVyczogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGNvbXBsZXRlZCA/IHJlc3BvbnNlSGVhZGVyc1N0cmluZyA6IG51bGw7XG5cdFx0XHRcdH0sXG5cblx0XHRcdFx0Ly8gQ2FjaGVzIHRoZSBoZWFkZXJcblx0XHRcdFx0c2V0UmVxdWVzdEhlYWRlcjogZnVuY3Rpb24oIG5hbWUsIHZhbHVlICkge1xuXHRcdFx0XHRcdGlmICggY29tcGxldGVkID09IG51bGwgKSB7XG5cdFx0XHRcdFx0XHRuYW1lID0gcmVxdWVzdEhlYWRlcnNOYW1lc1sgbmFtZS50b0xvd2VyQ2FzZSgpIF0gPVxuXHRcdFx0XHRcdFx0XHRyZXF1ZXN0SGVhZGVyc05hbWVzWyBuYW1lLnRvTG93ZXJDYXNlKCkgXSB8fCBuYW1lO1xuXHRcdFx0XHRcdFx0cmVxdWVzdEhlYWRlcnNbIG5hbWUgXSA9IHZhbHVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdFx0fSxcblxuXHRcdFx0XHQvLyBPdmVycmlkZXMgcmVzcG9uc2UgY29udGVudC10eXBlIGhlYWRlclxuXHRcdFx0XHRvdmVycmlkZU1pbWVUeXBlOiBmdW5jdGlvbiggdHlwZSApIHtcblx0XHRcdFx0XHRpZiAoIGNvbXBsZXRlZCA9PSBudWxsICkge1xuXHRcdFx0XHRcdFx0cy5taW1lVHlwZSA9IHR5cGU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0XHR9LFxuXG5cdFx0XHRcdC8vIFN0YXR1cy1kZXBlbmRlbnQgY2FsbGJhY2tzXG5cdFx0XHRcdHN0YXR1c0NvZGU6IGZ1bmN0aW9uKCBtYXAgKSB7XG5cdFx0XHRcdFx0dmFyIGNvZGU7XG5cdFx0XHRcdFx0aWYgKCBtYXAgKSB7XG5cdFx0XHRcdFx0XHRpZiAoIGNvbXBsZXRlZCApIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBFeGVjdXRlIHRoZSBhcHByb3ByaWF0ZSBjYWxsYmFja3Ncblx0XHRcdFx0XHRcdFx0anFYSFIuYWx3YXlzKCBtYXBbIGpxWEhSLnN0YXR1cyBdICk7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0XHRcdC8vIExhenktYWRkIHRoZSBuZXcgY2FsbGJhY2tzIGluIGEgd2F5IHRoYXQgcHJlc2VydmVzIG9sZCBvbmVzXG5cdFx0XHRcdFx0XHRcdGZvciAoIGNvZGUgaW4gbWFwICkge1xuXHRcdFx0XHRcdFx0XHRcdHN0YXR1c0NvZGVbIGNvZGUgXSA9IFsgc3RhdHVzQ29kZVsgY29kZSBdLCBtYXBbIGNvZGUgXSBdO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0XHR9LFxuXG5cdFx0XHRcdC8vIENhbmNlbCB0aGUgcmVxdWVzdFxuXHRcdFx0XHRhYm9ydDogZnVuY3Rpb24oIHN0YXR1c1RleHQgKSB7XG5cdFx0XHRcdFx0dmFyIGZpbmFsVGV4dCA9IHN0YXR1c1RleHQgfHwgc3RyQWJvcnQ7XG5cdFx0XHRcdFx0aWYgKCB0cmFuc3BvcnQgKSB7XG5cdFx0XHRcdFx0XHR0cmFuc3BvcnQuYWJvcnQoIGZpbmFsVGV4dCApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRkb25lKCAwLCBmaW5hbFRleHQgKTtcblx0XHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdFx0fVxuXHRcdFx0fTtcblxuXHRcdC8vIEF0dGFjaCBkZWZlcnJlZHNcblx0XHRkZWZlcnJlZC5wcm9taXNlKCBqcVhIUiApO1xuXG5cdFx0Ly8gQWRkIHByb3RvY29sIGlmIG5vdCBwcm92aWRlZCAocHJlZmlsdGVycyBtaWdodCBleHBlY3QgaXQpXG5cdFx0Ly8gSGFuZGxlIGZhbHN5IHVybCBpbiB0aGUgc2V0dGluZ3Mgb2JqZWN0ICgjMTAwOTM6IGNvbnNpc3RlbmN5IHdpdGggb2xkIHNpZ25hdHVyZSlcblx0XHQvLyBXZSBhbHNvIHVzZSB0aGUgdXJsIHBhcmFtZXRlciBpZiBhdmFpbGFibGVcblx0XHRzLnVybCA9ICggKCB1cmwgfHwgcy51cmwgfHwgbG9jYXRpb24uaHJlZiApICsgXCJcIiApXG5cdFx0XHQucmVwbGFjZSggcnByb3RvY29sLCBsb2NhdGlvbi5wcm90b2NvbCArIFwiLy9cIiApO1xuXG5cdFx0Ly8gQWxpYXMgbWV0aG9kIG9wdGlvbiB0byB0eXBlIGFzIHBlciB0aWNrZXQgIzEyMDA0XG5cdFx0cy50eXBlID0gb3B0aW9ucy5tZXRob2QgfHwgb3B0aW9ucy50eXBlIHx8IHMubWV0aG9kIHx8IHMudHlwZTtcblxuXHRcdC8vIEV4dHJhY3QgZGF0YVR5cGVzIGxpc3Rcblx0XHRzLmRhdGFUeXBlcyA9ICggcy5kYXRhVHlwZSB8fCBcIipcIiApLnRvTG93ZXJDYXNlKCkubWF0Y2goIHJub3RodG1sd2hpdGUgKSB8fCBbIFwiXCIgXTtcblxuXHRcdC8vIEEgY3Jvc3MtZG9tYWluIHJlcXVlc3QgaXMgaW4gb3JkZXIgd2hlbiB0aGUgb3JpZ2luIGRvZXNuJ3QgbWF0Y2ggdGhlIGN1cnJlbnQgb3JpZ2luLlxuXHRcdGlmICggcy5jcm9zc0RvbWFpbiA9PSBudWxsICkge1xuXHRcdFx0dXJsQW5jaG9yID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJhXCIgKTtcblxuXHRcdFx0Ly8gU3VwcG9ydDogSUUgPD04IC0gMTEsIEVkZ2UgMTIgLSAxNVxuXHRcdFx0Ly8gSUUgdGhyb3dzIGV4Y2VwdGlvbiBvbiBhY2Nlc3NpbmcgdGhlIGhyZWYgcHJvcGVydHkgaWYgdXJsIGlzIG1hbGZvcm1lZCxcblx0XHRcdC8vIGUuZy4gaHR0cDovL2V4YW1wbGUuY29tOjgweC9cblx0XHRcdHRyeSB7XG5cdFx0XHRcdHVybEFuY2hvci5ocmVmID0gcy51cmw7XG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPD04IC0gMTEgb25seVxuXHRcdFx0XHQvLyBBbmNob3IncyBob3N0IHByb3BlcnR5IGlzbid0IGNvcnJlY3RseSBzZXQgd2hlbiBzLnVybCBpcyByZWxhdGl2ZVxuXHRcdFx0XHR1cmxBbmNob3IuaHJlZiA9IHVybEFuY2hvci5ocmVmO1xuXHRcdFx0XHRzLmNyb3NzRG9tYWluID0gb3JpZ2luQW5jaG9yLnByb3RvY29sICsgXCIvL1wiICsgb3JpZ2luQW5jaG9yLmhvc3QgIT09XG5cdFx0XHRcdFx0dXJsQW5jaG9yLnByb3RvY29sICsgXCIvL1wiICsgdXJsQW5jaG9yLmhvc3Q7XG5cdFx0XHR9IGNhdGNoICggZSApIHtcblxuXHRcdFx0XHQvLyBJZiB0aGVyZSBpcyBhbiBlcnJvciBwYXJzaW5nIHRoZSBVUkwsIGFzc3VtZSBpdCBpcyBjcm9zc0RvbWFpbixcblx0XHRcdFx0Ly8gaXQgY2FuIGJlIHJlamVjdGVkIGJ5IHRoZSB0cmFuc3BvcnQgaWYgaXQgaXMgaW52YWxpZFxuXHRcdFx0XHRzLmNyb3NzRG9tYWluID0gdHJ1ZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBDb252ZXJ0IGRhdGEgaWYgbm90IGFscmVhZHkgYSBzdHJpbmdcblx0XHRpZiAoIHMuZGF0YSAmJiBzLnByb2Nlc3NEYXRhICYmIHR5cGVvZiBzLmRhdGEgIT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRzLmRhdGEgPSBqUXVlcnkucGFyYW0oIHMuZGF0YSwgcy50cmFkaXRpb25hbCApO1xuXHRcdH1cblxuXHRcdC8vIEFwcGx5IHByZWZpbHRlcnNcblx0XHRpbnNwZWN0UHJlZmlsdGVyc09yVHJhbnNwb3J0cyggcHJlZmlsdGVycywgcywgb3B0aW9ucywganFYSFIgKTtcblxuXHRcdC8vIElmIHJlcXVlc3Qgd2FzIGFib3J0ZWQgaW5zaWRlIGEgcHJlZmlsdGVyLCBzdG9wIHRoZXJlXG5cdFx0aWYgKCBjb21wbGV0ZWQgKSB7XG5cdFx0XHRyZXR1cm4ganFYSFI7XG5cdFx0fVxuXG5cdFx0Ly8gV2UgY2FuIGZpcmUgZ2xvYmFsIGV2ZW50cyBhcyBvZiBub3cgaWYgYXNrZWQgdG9cblx0XHQvLyBEb24ndCBmaXJlIGV2ZW50cyBpZiBqUXVlcnkuZXZlbnQgaXMgdW5kZWZpbmVkIGluIGFuIEFNRC11c2FnZSBzY2VuYXJpbyAoIzE1MTE4KVxuXHRcdGZpcmVHbG9iYWxzID0galF1ZXJ5LmV2ZW50ICYmIHMuZ2xvYmFsO1xuXG5cdFx0Ly8gV2F0Y2ggZm9yIGEgbmV3IHNldCBvZiByZXF1ZXN0c1xuXHRcdGlmICggZmlyZUdsb2JhbHMgJiYgalF1ZXJ5LmFjdGl2ZSsrID09PSAwICkge1xuXHRcdFx0alF1ZXJ5LmV2ZW50LnRyaWdnZXIoIFwiYWpheFN0YXJ0XCIgKTtcblx0XHR9XG5cblx0XHQvLyBVcHBlcmNhc2UgdGhlIHR5cGVcblx0XHRzLnR5cGUgPSBzLnR5cGUudG9VcHBlckNhc2UoKTtcblxuXHRcdC8vIERldGVybWluZSBpZiByZXF1ZXN0IGhhcyBjb250ZW50XG5cdFx0cy5oYXNDb250ZW50ID0gIXJub0NvbnRlbnQudGVzdCggcy50eXBlICk7XG5cblx0XHQvLyBTYXZlIHRoZSBVUkwgaW4gY2FzZSB3ZSdyZSB0b3lpbmcgd2l0aCB0aGUgSWYtTW9kaWZpZWQtU2luY2Vcblx0XHQvLyBhbmQvb3IgSWYtTm9uZS1NYXRjaCBoZWFkZXIgbGF0ZXIgb25cblx0XHQvLyBSZW1vdmUgaGFzaCB0byBzaW1wbGlmeSB1cmwgbWFuaXB1bGF0aW9uXG5cdFx0Y2FjaGVVUkwgPSBzLnVybC5yZXBsYWNlKCByaGFzaCwgXCJcIiApO1xuXG5cdFx0Ly8gTW9yZSBvcHRpb25zIGhhbmRsaW5nIGZvciByZXF1ZXN0cyB3aXRoIG5vIGNvbnRlbnRcblx0XHRpZiAoICFzLmhhc0NvbnRlbnQgKSB7XG5cblx0XHRcdC8vIFJlbWVtYmVyIHRoZSBoYXNoIHNvIHdlIGNhbiBwdXQgaXQgYmFja1xuXHRcdFx0dW5jYWNoZWQgPSBzLnVybC5zbGljZSggY2FjaGVVUkwubGVuZ3RoICk7XG5cblx0XHRcdC8vIElmIGRhdGEgaXMgYXZhaWxhYmxlIGFuZCBzaG91bGQgYmUgcHJvY2Vzc2VkLCBhcHBlbmQgZGF0YSB0byB1cmxcblx0XHRcdGlmICggcy5kYXRhICYmICggcy5wcm9jZXNzRGF0YSB8fCB0eXBlb2Ygcy5kYXRhID09PSBcInN0cmluZ1wiICkgKSB7XG5cdFx0XHRcdGNhY2hlVVJMICs9ICggcnF1ZXJ5LnRlc3QoIGNhY2hlVVJMICkgPyBcIiZcIiA6IFwiP1wiICkgKyBzLmRhdGE7XG5cblx0XHRcdFx0Ly8gIzk2ODI6IHJlbW92ZSBkYXRhIHNvIHRoYXQgaXQncyBub3QgdXNlZCBpbiBhbiBldmVudHVhbCByZXRyeVxuXHRcdFx0XHRkZWxldGUgcy5kYXRhO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBBZGQgb3IgdXBkYXRlIGFudGktY2FjaGUgcGFyYW0gaWYgbmVlZGVkXG5cdFx0XHRpZiAoIHMuY2FjaGUgPT09IGZhbHNlICkge1xuXHRcdFx0XHRjYWNoZVVSTCA9IGNhY2hlVVJMLnJlcGxhY2UoIHJhbnRpQ2FjaGUsIFwiJDFcIiApO1xuXHRcdFx0XHR1bmNhY2hlZCA9ICggcnF1ZXJ5LnRlc3QoIGNhY2hlVVJMICkgPyBcIiZcIiA6IFwiP1wiICkgKyBcIl89XCIgKyAoIG5vbmNlKysgKSArIHVuY2FjaGVkO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBQdXQgaGFzaCBhbmQgYW50aS1jYWNoZSBvbiB0aGUgVVJMIHRoYXQgd2lsbCBiZSByZXF1ZXN0ZWQgKGdoLTE3MzIpXG5cdFx0XHRzLnVybCA9IGNhY2hlVVJMICsgdW5jYWNoZWQ7XG5cblx0XHQvLyBDaGFuZ2UgJyUyMCcgdG8gJysnIGlmIHRoaXMgaXMgZW5jb2RlZCBmb3JtIGJvZHkgY29udGVudCAoZ2gtMjY1OClcblx0XHR9IGVsc2UgaWYgKCBzLmRhdGEgJiYgcy5wcm9jZXNzRGF0YSAmJlxuXHRcdFx0KCBzLmNvbnRlbnRUeXBlIHx8IFwiXCIgKS5pbmRleE9mKCBcImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZFwiICkgPT09IDAgKSB7XG5cdFx0XHRzLmRhdGEgPSBzLmRhdGEucmVwbGFjZSggcjIwLCBcIitcIiApO1xuXHRcdH1cblxuXHRcdC8vIFNldCB0aGUgSWYtTW9kaWZpZWQtU2luY2UgYW5kL29yIElmLU5vbmUtTWF0Y2ggaGVhZGVyLCBpZiBpbiBpZk1vZGlmaWVkIG1vZGUuXG5cdFx0aWYgKCBzLmlmTW9kaWZpZWQgKSB7XG5cdFx0XHRpZiAoIGpRdWVyeS5sYXN0TW9kaWZpZWRbIGNhY2hlVVJMIF0gKSB7XG5cdFx0XHRcdGpxWEhSLnNldFJlcXVlc3RIZWFkZXIoIFwiSWYtTW9kaWZpZWQtU2luY2VcIiwgalF1ZXJ5Lmxhc3RNb2RpZmllZFsgY2FjaGVVUkwgXSApO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCBqUXVlcnkuZXRhZ1sgY2FjaGVVUkwgXSApIHtcblx0XHRcdFx0anFYSFIuc2V0UmVxdWVzdEhlYWRlciggXCJJZi1Ob25lLU1hdGNoXCIsIGpRdWVyeS5ldGFnWyBjYWNoZVVSTCBdICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gU2V0IHRoZSBjb3JyZWN0IGhlYWRlciwgaWYgZGF0YSBpcyBiZWluZyBzZW50XG5cdFx0aWYgKCBzLmRhdGEgJiYgcy5oYXNDb250ZW50ICYmIHMuY29udGVudFR5cGUgIT09IGZhbHNlIHx8IG9wdGlvbnMuY29udGVudFR5cGUgKSB7XG5cdFx0XHRqcVhIUi5zZXRSZXF1ZXN0SGVhZGVyKCBcIkNvbnRlbnQtVHlwZVwiLCBzLmNvbnRlbnRUeXBlICk7XG5cdFx0fVxuXG5cdFx0Ly8gU2V0IHRoZSBBY2NlcHRzIGhlYWRlciBmb3IgdGhlIHNlcnZlciwgZGVwZW5kaW5nIG9uIHRoZSBkYXRhVHlwZVxuXHRcdGpxWEhSLnNldFJlcXVlc3RIZWFkZXIoXG5cdFx0XHRcIkFjY2VwdFwiLFxuXHRcdFx0cy5kYXRhVHlwZXNbIDAgXSAmJiBzLmFjY2VwdHNbIHMuZGF0YVR5cGVzWyAwIF0gXSA/XG5cdFx0XHRcdHMuYWNjZXB0c1sgcy5kYXRhVHlwZXNbIDAgXSBdICtcblx0XHRcdFx0XHQoIHMuZGF0YVR5cGVzWyAwIF0gIT09IFwiKlwiID8gXCIsIFwiICsgYWxsVHlwZXMgKyBcIjsgcT0wLjAxXCIgOiBcIlwiICkgOlxuXHRcdFx0XHRzLmFjY2VwdHNbIFwiKlwiIF1cblx0XHQpO1xuXG5cdFx0Ly8gQ2hlY2sgZm9yIGhlYWRlcnMgb3B0aW9uXG5cdFx0Zm9yICggaSBpbiBzLmhlYWRlcnMgKSB7XG5cdFx0XHRqcVhIUi5zZXRSZXF1ZXN0SGVhZGVyKCBpLCBzLmhlYWRlcnNbIGkgXSApO1xuXHRcdH1cblxuXHRcdC8vIEFsbG93IGN1c3RvbSBoZWFkZXJzL21pbWV0eXBlcyBhbmQgZWFybHkgYWJvcnRcblx0XHRpZiAoIHMuYmVmb3JlU2VuZCAmJlxuXHRcdFx0KCBzLmJlZm9yZVNlbmQuY2FsbCggY2FsbGJhY2tDb250ZXh0LCBqcVhIUiwgcyApID09PSBmYWxzZSB8fCBjb21wbGV0ZWQgKSApIHtcblxuXHRcdFx0Ly8gQWJvcnQgaWYgbm90IGRvbmUgYWxyZWFkeSBhbmQgcmV0dXJuXG5cdFx0XHRyZXR1cm4ganFYSFIuYWJvcnQoKTtcblx0XHR9XG5cblx0XHQvLyBBYm9ydGluZyBpcyBubyBsb25nZXIgYSBjYW5jZWxsYXRpb25cblx0XHRzdHJBYm9ydCA9IFwiYWJvcnRcIjtcblxuXHRcdC8vIEluc3RhbGwgY2FsbGJhY2tzIG9uIGRlZmVycmVkc1xuXHRcdGNvbXBsZXRlRGVmZXJyZWQuYWRkKCBzLmNvbXBsZXRlICk7XG5cdFx0anFYSFIuZG9uZSggcy5zdWNjZXNzICk7XG5cdFx0anFYSFIuZmFpbCggcy5lcnJvciApO1xuXG5cdFx0Ly8gR2V0IHRyYW5zcG9ydFxuXHRcdHRyYW5zcG9ydCA9IGluc3BlY3RQcmVmaWx0ZXJzT3JUcmFuc3BvcnRzKCB0cmFuc3BvcnRzLCBzLCBvcHRpb25zLCBqcVhIUiApO1xuXG5cdFx0Ly8gSWYgbm8gdHJhbnNwb3J0LCB3ZSBhdXRvLWFib3J0XG5cdFx0aWYgKCAhdHJhbnNwb3J0ICkge1xuXHRcdFx0ZG9uZSggLTEsIFwiTm8gVHJhbnNwb3J0XCIgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0anFYSFIucmVhZHlTdGF0ZSA9IDE7XG5cblx0XHRcdC8vIFNlbmQgZ2xvYmFsIGV2ZW50XG5cdFx0XHRpZiAoIGZpcmVHbG9iYWxzICkge1xuXHRcdFx0XHRnbG9iYWxFdmVudENvbnRleHQudHJpZ2dlciggXCJhamF4U2VuZFwiLCBbIGpxWEhSLCBzIF0gKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gSWYgcmVxdWVzdCB3YXMgYWJvcnRlZCBpbnNpZGUgYWpheFNlbmQsIHN0b3AgdGhlcmVcblx0XHRcdGlmICggY29tcGxldGVkICkge1xuXHRcdFx0XHRyZXR1cm4ganFYSFI7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFRpbWVvdXRcblx0XHRcdGlmICggcy5hc3luYyAmJiBzLnRpbWVvdXQgPiAwICkge1xuXHRcdFx0XHR0aW1lb3V0VGltZXIgPSB3aW5kb3cuc2V0VGltZW91dCggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0anFYSFIuYWJvcnQoIFwidGltZW91dFwiICk7XG5cdFx0XHRcdH0sIHMudGltZW91dCApO1xuXHRcdFx0fVxuXG5cdFx0XHR0cnkge1xuXHRcdFx0XHRjb21wbGV0ZWQgPSBmYWxzZTtcblx0XHRcdFx0dHJhbnNwb3J0LnNlbmQoIHJlcXVlc3RIZWFkZXJzLCBkb25lICk7XG5cdFx0XHR9IGNhdGNoICggZSApIHtcblxuXHRcdFx0XHQvLyBSZXRocm93IHBvc3QtY29tcGxldGlvbiBleGNlcHRpb25zXG5cdFx0XHRcdGlmICggY29tcGxldGVkICkge1xuXHRcdFx0XHRcdHRocm93IGU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBQcm9wYWdhdGUgb3RoZXJzIGFzIHJlc3VsdHNcblx0XHRcdFx0ZG9uZSggLTEsIGUgKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBDYWxsYmFjayBmb3Igd2hlbiBldmVyeXRoaW5nIGlzIGRvbmVcblx0XHRmdW5jdGlvbiBkb25lKCBzdGF0dXMsIG5hdGl2ZVN0YXR1c1RleHQsIHJlc3BvbnNlcywgaGVhZGVycyApIHtcblx0XHRcdHZhciBpc1N1Y2Nlc3MsIHN1Y2Nlc3MsIGVycm9yLCByZXNwb25zZSwgbW9kaWZpZWQsXG5cdFx0XHRcdHN0YXR1c1RleHQgPSBuYXRpdmVTdGF0dXNUZXh0O1xuXG5cdFx0XHQvLyBJZ25vcmUgcmVwZWF0IGludm9jYXRpb25zXG5cdFx0XHRpZiAoIGNvbXBsZXRlZCApIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRjb21wbGV0ZWQgPSB0cnVlO1xuXG5cdFx0XHQvLyBDbGVhciB0aW1lb3V0IGlmIGl0IGV4aXN0c1xuXHRcdFx0aWYgKCB0aW1lb3V0VGltZXIgKSB7XG5cdFx0XHRcdHdpbmRvdy5jbGVhclRpbWVvdXQoIHRpbWVvdXRUaW1lciApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBEZXJlZmVyZW5jZSB0cmFuc3BvcnQgZm9yIGVhcmx5IGdhcmJhZ2UgY29sbGVjdGlvblxuXHRcdFx0Ly8gKG5vIG1hdHRlciBob3cgbG9uZyB0aGUganFYSFIgb2JqZWN0IHdpbGwgYmUgdXNlZClcblx0XHRcdHRyYW5zcG9ydCA9IHVuZGVmaW5lZDtcblxuXHRcdFx0Ly8gQ2FjaGUgcmVzcG9uc2UgaGVhZGVyc1xuXHRcdFx0cmVzcG9uc2VIZWFkZXJzU3RyaW5nID0gaGVhZGVycyB8fCBcIlwiO1xuXG5cdFx0XHQvLyBTZXQgcmVhZHlTdGF0ZVxuXHRcdFx0anFYSFIucmVhZHlTdGF0ZSA9IHN0YXR1cyA+IDAgPyA0IDogMDtcblxuXHRcdFx0Ly8gRGV0ZXJtaW5lIGlmIHN1Y2Nlc3NmdWxcblx0XHRcdGlzU3VjY2VzcyA9IHN0YXR1cyA+PSAyMDAgJiYgc3RhdHVzIDwgMzAwIHx8IHN0YXR1cyA9PT0gMzA0O1xuXG5cdFx0XHQvLyBHZXQgcmVzcG9uc2UgZGF0YVxuXHRcdFx0aWYgKCByZXNwb25zZXMgKSB7XG5cdFx0XHRcdHJlc3BvbnNlID0gYWpheEhhbmRsZVJlc3BvbnNlcyggcywganFYSFIsIHJlc3BvbnNlcyApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBDb252ZXJ0IG5vIG1hdHRlciB3aGF0ICh0aGF0IHdheSByZXNwb25zZVhYWCBmaWVsZHMgYXJlIGFsd2F5cyBzZXQpXG5cdFx0XHRyZXNwb25zZSA9IGFqYXhDb252ZXJ0KCBzLCByZXNwb25zZSwganFYSFIsIGlzU3VjY2VzcyApO1xuXG5cdFx0XHQvLyBJZiBzdWNjZXNzZnVsLCBoYW5kbGUgdHlwZSBjaGFpbmluZ1xuXHRcdFx0aWYgKCBpc1N1Y2Nlc3MgKSB7XG5cblx0XHRcdFx0Ly8gU2V0IHRoZSBJZi1Nb2RpZmllZC1TaW5jZSBhbmQvb3IgSWYtTm9uZS1NYXRjaCBoZWFkZXIsIGlmIGluIGlmTW9kaWZpZWQgbW9kZS5cblx0XHRcdFx0aWYgKCBzLmlmTW9kaWZpZWQgKSB7XG5cdFx0XHRcdFx0bW9kaWZpZWQgPSBqcVhIUi5nZXRSZXNwb25zZUhlYWRlciggXCJMYXN0LU1vZGlmaWVkXCIgKTtcblx0XHRcdFx0XHRpZiAoIG1vZGlmaWVkICkge1xuXHRcdFx0XHRcdFx0alF1ZXJ5Lmxhc3RNb2RpZmllZFsgY2FjaGVVUkwgXSA9IG1vZGlmaWVkO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRtb2RpZmllZCA9IGpxWEhSLmdldFJlc3BvbnNlSGVhZGVyKCBcImV0YWdcIiApO1xuXHRcdFx0XHRcdGlmICggbW9kaWZpZWQgKSB7XG5cdFx0XHRcdFx0XHRqUXVlcnkuZXRhZ1sgY2FjaGVVUkwgXSA9IG1vZGlmaWVkO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIGlmIG5vIGNvbnRlbnRcblx0XHRcdFx0aWYgKCBzdGF0dXMgPT09IDIwNCB8fCBzLnR5cGUgPT09IFwiSEVBRFwiICkge1xuXHRcdFx0XHRcdHN0YXR1c1RleHQgPSBcIm5vY29udGVudFwiO1xuXG5cdFx0XHRcdC8vIGlmIG5vdCBtb2RpZmllZFxuXHRcdFx0XHR9IGVsc2UgaWYgKCBzdGF0dXMgPT09IDMwNCApIHtcblx0XHRcdFx0XHRzdGF0dXNUZXh0ID0gXCJub3Rtb2RpZmllZFwiO1xuXG5cdFx0XHRcdC8vIElmIHdlIGhhdmUgZGF0YSwgbGV0J3MgY29udmVydCBpdFxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHN0YXR1c1RleHQgPSByZXNwb25zZS5zdGF0ZTtcblx0XHRcdFx0XHRzdWNjZXNzID0gcmVzcG9uc2UuZGF0YTtcblx0XHRcdFx0XHRlcnJvciA9IHJlc3BvbnNlLmVycm9yO1xuXHRcdFx0XHRcdGlzU3VjY2VzcyA9ICFlcnJvcjtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHQvLyBFeHRyYWN0IGVycm9yIGZyb20gc3RhdHVzVGV4dCBhbmQgbm9ybWFsaXplIGZvciBub24tYWJvcnRzXG5cdFx0XHRcdGVycm9yID0gc3RhdHVzVGV4dDtcblx0XHRcdFx0aWYgKCBzdGF0dXMgfHwgIXN0YXR1c1RleHQgKSB7XG5cdFx0XHRcdFx0c3RhdHVzVGV4dCA9IFwiZXJyb3JcIjtcblx0XHRcdFx0XHRpZiAoIHN0YXR1cyA8IDAgKSB7XG5cdFx0XHRcdFx0XHRzdGF0dXMgPSAwO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBTZXQgZGF0YSBmb3IgdGhlIGZha2UgeGhyIG9iamVjdFxuXHRcdFx0anFYSFIuc3RhdHVzID0gc3RhdHVzO1xuXHRcdFx0anFYSFIuc3RhdHVzVGV4dCA9ICggbmF0aXZlU3RhdHVzVGV4dCB8fCBzdGF0dXNUZXh0ICkgKyBcIlwiO1xuXG5cdFx0XHQvLyBTdWNjZXNzL0Vycm9yXG5cdFx0XHRpZiAoIGlzU3VjY2VzcyApIHtcblx0XHRcdFx0ZGVmZXJyZWQucmVzb2x2ZVdpdGgoIGNhbGxiYWNrQ29udGV4dCwgWyBzdWNjZXNzLCBzdGF0dXNUZXh0LCBqcVhIUiBdICk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRkZWZlcnJlZC5yZWplY3RXaXRoKCBjYWxsYmFja0NvbnRleHQsIFsganFYSFIsIHN0YXR1c1RleHQsIGVycm9yIF0gKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU3RhdHVzLWRlcGVuZGVudCBjYWxsYmFja3Ncblx0XHRcdGpxWEhSLnN0YXR1c0NvZGUoIHN0YXR1c0NvZGUgKTtcblx0XHRcdHN0YXR1c0NvZGUgPSB1bmRlZmluZWQ7XG5cblx0XHRcdGlmICggZmlyZUdsb2JhbHMgKSB7XG5cdFx0XHRcdGdsb2JhbEV2ZW50Q29udGV4dC50cmlnZ2VyKCBpc1N1Y2Nlc3MgPyBcImFqYXhTdWNjZXNzXCIgOiBcImFqYXhFcnJvclwiLFxuXHRcdFx0XHRcdFsganFYSFIsIHMsIGlzU3VjY2VzcyA/IHN1Y2Nlc3MgOiBlcnJvciBdICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIENvbXBsZXRlXG5cdFx0XHRjb21wbGV0ZURlZmVycmVkLmZpcmVXaXRoKCBjYWxsYmFja0NvbnRleHQsIFsganFYSFIsIHN0YXR1c1RleHQgXSApO1xuXG5cdFx0XHRpZiAoIGZpcmVHbG9iYWxzICkge1xuXHRcdFx0XHRnbG9iYWxFdmVudENvbnRleHQudHJpZ2dlciggXCJhamF4Q29tcGxldGVcIiwgWyBqcVhIUiwgcyBdICk7XG5cblx0XHRcdFx0Ly8gSGFuZGxlIHRoZSBnbG9iYWwgQUpBWCBjb3VudGVyXG5cdFx0XHRcdGlmICggISggLS1qUXVlcnkuYWN0aXZlICkgKSB7XG5cdFx0XHRcdFx0alF1ZXJ5LmV2ZW50LnRyaWdnZXIoIFwiYWpheFN0b3BcIiApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGpxWEhSO1xuXHR9LFxuXG5cdGdldEpTT046IGZ1bmN0aW9uKCB1cmwsIGRhdGEsIGNhbGxiYWNrICkge1xuXHRcdHJldHVybiBqUXVlcnkuZ2V0KCB1cmwsIGRhdGEsIGNhbGxiYWNrLCBcImpzb25cIiApO1xuXHR9LFxuXG5cdGdldFNjcmlwdDogZnVuY3Rpb24oIHVybCwgY2FsbGJhY2sgKSB7XG5cdFx0cmV0dXJuIGpRdWVyeS5nZXQoIHVybCwgdW5kZWZpbmVkLCBjYWxsYmFjaywgXCJzY3JpcHRcIiApO1xuXHR9XG59ICk7XG5cbmpRdWVyeS5lYWNoKCBbIFwiZ2V0XCIsIFwicG9zdFwiIF0sIGZ1bmN0aW9uKCBpLCBtZXRob2QgKSB7XG5cdGpRdWVyeVsgbWV0aG9kIF0gPSBmdW5jdGlvbiggdXJsLCBkYXRhLCBjYWxsYmFjaywgdHlwZSApIHtcblxuXHRcdC8vIFNoaWZ0IGFyZ3VtZW50cyBpZiBkYXRhIGFyZ3VtZW50IHdhcyBvbWl0dGVkXG5cdFx0aWYgKCBpc0Z1bmN0aW9uKCBkYXRhICkgKSB7XG5cdFx0XHR0eXBlID0gdHlwZSB8fCBjYWxsYmFjaztcblx0XHRcdGNhbGxiYWNrID0gZGF0YTtcblx0XHRcdGRhdGEgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXG5cdFx0Ly8gVGhlIHVybCBjYW4gYmUgYW4gb3B0aW9ucyBvYmplY3QgKHdoaWNoIHRoZW4gbXVzdCBoYXZlIC51cmwpXG5cdFx0cmV0dXJuIGpRdWVyeS5hamF4KCBqUXVlcnkuZXh0ZW5kKCB7XG5cdFx0XHR1cmw6IHVybCxcblx0XHRcdHR5cGU6IG1ldGhvZCxcblx0XHRcdGRhdGFUeXBlOiB0eXBlLFxuXHRcdFx0ZGF0YTogZGF0YSxcblx0XHRcdHN1Y2Nlc3M6IGNhbGxiYWNrXG5cdFx0fSwgalF1ZXJ5LmlzUGxhaW5PYmplY3QoIHVybCApICYmIHVybCApICk7XG5cdH07XG59ICk7XG5cblxualF1ZXJ5Ll9ldmFsVXJsID0gZnVuY3Rpb24oIHVybCwgb3B0aW9ucyApIHtcblx0cmV0dXJuIGpRdWVyeS5hamF4KCB7XG5cdFx0dXJsOiB1cmwsXG5cblx0XHQvLyBNYWtlIHRoaXMgZXhwbGljaXQsIHNpbmNlIHVzZXIgY2FuIG92ZXJyaWRlIHRoaXMgdGhyb3VnaCBhamF4U2V0dXAgKCMxMTI2NClcblx0XHR0eXBlOiBcIkdFVFwiLFxuXHRcdGRhdGFUeXBlOiBcInNjcmlwdFwiLFxuXHRcdGNhY2hlOiB0cnVlLFxuXHRcdGFzeW5jOiBmYWxzZSxcblx0XHRnbG9iYWw6IGZhbHNlLFxuXG5cdFx0Ly8gT25seSBldmFsdWF0ZSB0aGUgcmVzcG9uc2UgaWYgaXQgaXMgc3VjY2Vzc2Z1bCAoZ2gtNDEyNilcblx0XHQvLyBkYXRhRmlsdGVyIGlzIG5vdCBpbnZva2VkIGZvciBmYWlsdXJlIHJlc3BvbnNlcywgc28gdXNpbmcgaXQgaW5zdGVhZFxuXHRcdC8vIG9mIHRoZSBkZWZhdWx0IGNvbnZlcnRlciBpcyBrbHVkZ3kgYnV0IGl0IHdvcmtzLlxuXHRcdGNvbnZlcnRlcnM6IHtcblx0XHRcdFwidGV4dCBzY3JpcHRcIjogZnVuY3Rpb24oKSB7fVxuXHRcdH0sXG5cdFx0ZGF0YUZpbHRlcjogZnVuY3Rpb24oIHJlc3BvbnNlICkge1xuXHRcdFx0alF1ZXJ5Lmdsb2JhbEV2YWwoIHJlc3BvbnNlLCBvcHRpb25zICk7XG5cdFx0fVxuXHR9ICk7XG59O1xuXG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0d3JhcEFsbDogZnVuY3Rpb24oIGh0bWwgKSB7XG5cdFx0dmFyIHdyYXA7XG5cblx0XHRpZiAoIHRoaXNbIDAgXSApIHtcblx0XHRcdGlmICggaXNGdW5jdGlvbiggaHRtbCApICkge1xuXHRcdFx0XHRodG1sID0gaHRtbC5jYWxsKCB0aGlzWyAwIF0gKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gVGhlIGVsZW1lbnRzIHRvIHdyYXAgdGhlIHRhcmdldCBhcm91bmRcblx0XHRcdHdyYXAgPSBqUXVlcnkoIGh0bWwsIHRoaXNbIDAgXS5vd25lckRvY3VtZW50ICkuZXEoIDAgKS5jbG9uZSggdHJ1ZSApO1xuXG5cdFx0XHRpZiAoIHRoaXNbIDAgXS5wYXJlbnROb2RlICkge1xuXHRcdFx0XHR3cmFwLmluc2VydEJlZm9yZSggdGhpc1sgMCBdICk7XG5cdFx0XHR9XG5cblx0XHRcdHdyYXAubWFwKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0dmFyIGVsZW0gPSB0aGlzO1xuXG5cdFx0XHRcdHdoaWxlICggZWxlbS5maXJzdEVsZW1lbnRDaGlsZCApIHtcblx0XHRcdFx0XHRlbGVtID0gZWxlbS5maXJzdEVsZW1lbnRDaGlsZDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiBlbGVtO1xuXHRcdFx0fSApLmFwcGVuZCggdGhpcyApO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHdyYXBJbm5lcjogZnVuY3Rpb24oIGh0bWwgKSB7XG5cdFx0aWYgKCBpc0Z1bmN0aW9uKCBodG1sICkgKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbiggaSApIHtcblx0XHRcdFx0alF1ZXJ5KCB0aGlzICkud3JhcElubmVyKCBodG1sLmNhbGwoIHRoaXMsIGkgKSApO1xuXHRcdFx0fSApO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIHNlbGYgPSBqUXVlcnkoIHRoaXMgKSxcblx0XHRcdFx0Y29udGVudHMgPSBzZWxmLmNvbnRlbnRzKCk7XG5cblx0XHRcdGlmICggY29udGVudHMubGVuZ3RoICkge1xuXHRcdFx0XHRjb250ZW50cy53cmFwQWxsKCBodG1sICk7XG5cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHNlbGYuYXBwZW5kKCBodG1sICk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9LFxuXG5cdHdyYXA6IGZ1bmN0aW9uKCBodG1sICkge1xuXHRcdHZhciBodG1sSXNGdW5jdGlvbiA9IGlzRnVuY3Rpb24oIGh0bWwgKTtcblxuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCBpICkge1xuXHRcdFx0alF1ZXJ5KCB0aGlzICkud3JhcEFsbCggaHRtbElzRnVuY3Rpb24gPyBodG1sLmNhbGwoIHRoaXMsIGkgKSA6IGh0bWwgKTtcblx0XHR9ICk7XG5cdH0sXG5cblx0dW53cmFwOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cdFx0dGhpcy5wYXJlbnQoIHNlbGVjdG9yICkubm90KCBcImJvZHlcIiApLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0alF1ZXJ5KCB0aGlzICkucmVwbGFjZVdpdGgoIHRoaXMuY2hpbGROb2RlcyApO1xuXHRcdH0gKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxufSApO1xuXG5cbmpRdWVyeS5leHByLnBzZXVkb3MuaGlkZGVuID0gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdHJldHVybiAhalF1ZXJ5LmV4cHIucHNldWRvcy52aXNpYmxlKCBlbGVtICk7XG59O1xualF1ZXJ5LmV4cHIucHNldWRvcy52aXNpYmxlID0gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdHJldHVybiAhISggZWxlbS5vZmZzZXRXaWR0aCB8fCBlbGVtLm9mZnNldEhlaWdodCB8fCBlbGVtLmdldENsaWVudFJlY3RzKCkubGVuZ3RoICk7XG59O1xuXG5cblxuXG5qUXVlcnkuYWpheFNldHRpbmdzLnhociA9IGZ1bmN0aW9uKCkge1xuXHR0cnkge1xuXHRcdHJldHVybiBuZXcgd2luZG93LlhNTEh0dHBSZXF1ZXN0KCk7XG5cdH0gY2F0Y2ggKCBlICkge31cbn07XG5cbnZhciB4aHJTdWNjZXNzU3RhdHVzID0ge1xuXG5cdFx0Ly8gRmlsZSBwcm90b2NvbCBhbHdheXMgeWllbGRzIHN0YXR1cyBjb2RlIDAsIGFzc3VtZSAyMDBcblx0XHQwOiAyMDAsXG5cblx0XHQvLyBTdXBwb3J0OiBJRSA8PTkgb25seVxuXHRcdC8vICMxNDUwOiBzb21ldGltZXMgSUUgcmV0dXJucyAxMjIzIHdoZW4gaXQgc2hvdWxkIGJlIDIwNFxuXHRcdDEyMjM6IDIwNFxuXHR9LFxuXHR4aHJTdXBwb3J0ZWQgPSBqUXVlcnkuYWpheFNldHRpbmdzLnhocigpO1xuXG5zdXBwb3J0LmNvcnMgPSAhIXhoclN1cHBvcnRlZCAmJiAoIFwid2l0aENyZWRlbnRpYWxzXCIgaW4geGhyU3VwcG9ydGVkICk7XG5zdXBwb3J0LmFqYXggPSB4aHJTdXBwb3J0ZWQgPSAhIXhoclN1cHBvcnRlZDtcblxualF1ZXJ5LmFqYXhUcmFuc3BvcnQoIGZ1bmN0aW9uKCBvcHRpb25zICkge1xuXHR2YXIgY2FsbGJhY2ssIGVycm9yQ2FsbGJhY2s7XG5cblx0Ly8gQ3Jvc3MgZG9tYWluIG9ubHkgYWxsb3dlZCBpZiBzdXBwb3J0ZWQgdGhyb3VnaCBYTUxIdHRwUmVxdWVzdFxuXHRpZiAoIHN1cHBvcnQuY29ycyB8fCB4aHJTdXBwb3J0ZWQgJiYgIW9wdGlvbnMuY3Jvc3NEb21haW4gKSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHNlbmQ6IGZ1bmN0aW9uKCBoZWFkZXJzLCBjb21wbGV0ZSApIHtcblx0XHRcdFx0dmFyIGksXG5cdFx0XHRcdFx0eGhyID0gb3B0aW9ucy54aHIoKTtcblxuXHRcdFx0XHR4aHIub3Blbihcblx0XHRcdFx0XHRvcHRpb25zLnR5cGUsXG5cdFx0XHRcdFx0b3B0aW9ucy51cmwsXG5cdFx0XHRcdFx0b3B0aW9ucy5hc3luYyxcblx0XHRcdFx0XHRvcHRpb25zLnVzZXJuYW1lLFxuXHRcdFx0XHRcdG9wdGlvbnMucGFzc3dvcmRcblx0XHRcdFx0KTtcblxuXHRcdFx0XHQvLyBBcHBseSBjdXN0b20gZmllbGRzIGlmIHByb3ZpZGVkXG5cdFx0XHRcdGlmICggb3B0aW9ucy54aHJGaWVsZHMgKSB7XG5cdFx0XHRcdFx0Zm9yICggaSBpbiBvcHRpb25zLnhockZpZWxkcyApIHtcblx0XHRcdFx0XHRcdHhoclsgaSBdID0gb3B0aW9ucy54aHJGaWVsZHNbIGkgXTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBPdmVycmlkZSBtaW1lIHR5cGUgaWYgbmVlZGVkXG5cdFx0XHRcdGlmICggb3B0aW9ucy5taW1lVHlwZSAmJiB4aHIub3ZlcnJpZGVNaW1lVHlwZSApIHtcblx0XHRcdFx0XHR4aHIub3ZlcnJpZGVNaW1lVHlwZSggb3B0aW9ucy5taW1lVHlwZSApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gWC1SZXF1ZXN0ZWQtV2l0aCBoZWFkZXJcblx0XHRcdFx0Ly8gRm9yIGNyb3NzLWRvbWFpbiByZXF1ZXN0cywgc2VlaW5nIGFzIGNvbmRpdGlvbnMgZm9yIGEgcHJlZmxpZ2h0IGFyZVxuXHRcdFx0XHQvLyBha2luIHRvIGEgamlnc2F3IHB1enpsZSwgd2Ugc2ltcGx5IG5ldmVyIHNldCBpdCB0byBiZSBzdXJlLlxuXHRcdFx0XHQvLyAoaXQgY2FuIGFsd2F5cyBiZSBzZXQgb24gYSBwZXItcmVxdWVzdCBiYXNpcyBvciBldmVuIHVzaW5nIGFqYXhTZXR1cClcblx0XHRcdFx0Ly8gRm9yIHNhbWUtZG9tYWluIHJlcXVlc3RzLCB3b24ndCBjaGFuZ2UgaGVhZGVyIGlmIGFscmVhZHkgcHJvdmlkZWQuXG5cdFx0XHRcdGlmICggIW9wdGlvbnMuY3Jvc3NEb21haW4gJiYgIWhlYWRlcnNbIFwiWC1SZXF1ZXN0ZWQtV2l0aFwiIF0gKSB7XG5cdFx0XHRcdFx0aGVhZGVyc1sgXCJYLVJlcXVlc3RlZC1XaXRoXCIgXSA9IFwiWE1MSHR0cFJlcXVlc3RcIjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFNldCBoZWFkZXJzXG5cdFx0XHRcdGZvciAoIGkgaW4gaGVhZGVycyApIHtcblx0XHRcdFx0XHR4aHIuc2V0UmVxdWVzdEhlYWRlciggaSwgaGVhZGVyc1sgaSBdICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBDYWxsYmFja1xuXHRcdFx0XHRjYWxsYmFjayA9IGZ1bmN0aW9uKCB0eXBlICkge1xuXHRcdFx0XHRcdHJldHVybiBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdGlmICggY2FsbGJhY2sgKSB7XG5cdFx0XHRcdFx0XHRcdGNhbGxiYWNrID0gZXJyb3JDYWxsYmFjayA9IHhoci5vbmxvYWQgPVxuXHRcdFx0XHRcdFx0XHRcdHhoci5vbmVycm9yID0geGhyLm9uYWJvcnQgPSB4aHIub250aW1lb3V0ID1cblx0XHRcdFx0XHRcdFx0XHRcdHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBudWxsO1xuXG5cdFx0XHRcdFx0XHRcdGlmICggdHlwZSA9PT0gXCJhYm9ydFwiICkge1xuXHRcdFx0XHRcdFx0XHRcdHhoci5hYm9ydCgpO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKCB0eXBlID09PSBcImVycm9yXCIgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA8PTkgb25seVxuXHRcdFx0XHRcdFx0XHRcdC8vIE9uIGEgbWFudWFsIG5hdGl2ZSBhYm9ydCwgSUU5IHRocm93c1xuXHRcdFx0XHRcdFx0XHRcdC8vIGVycm9ycyBvbiBhbnkgcHJvcGVydHkgYWNjZXNzIHRoYXQgaXMgbm90IHJlYWR5U3RhdGVcblx0XHRcdFx0XHRcdFx0XHRpZiAoIHR5cGVvZiB4aHIuc3RhdHVzICE9PSBcIm51bWJlclwiICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0Y29tcGxldGUoIDAsIFwiZXJyb3JcIiApO1xuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRjb21wbGV0ZShcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBGaWxlOiBwcm90b2NvbCBhbHdheXMgeWllbGRzIHN0YXR1cyAwOyBzZWUgIzg2MDUsICMxNDIwN1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR4aHIuc3RhdHVzLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHR4aHIuc3RhdHVzVGV4dFxuXHRcdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0Y29tcGxldGUoXG5cdFx0XHRcdFx0XHRcdFx0XHR4aHJTdWNjZXNzU3RhdHVzWyB4aHIuc3RhdHVzIF0gfHwgeGhyLnN0YXR1cyxcblx0XHRcdFx0XHRcdFx0XHRcdHhoci5zdGF0dXNUZXh0LFxuXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA8PTkgb25seVxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gSUU5IGhhcyBubyBYSFIyIGJ1dCB0aHJvd3Mgb24gYmluYXJ5ICh0cmFjLTExNDI2KVxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gRm9yIFhIUjIgbm9uLXRleHQsIGxldCB0aGUgY2FsbGVyIGhhbmRsZSBpdCAoZ2gtMjQ5OClcblx0XHRcdFx0XHRcdFx0XHRcdCggeGhyLnJlc3BvbnNlVHlwZSB8fCBcInRleHRcIiApICE9PSBcInRleHRcIiAgfHxcblx0XHRcdFx0XHRcdFx0XHRcdHR5cGVvZiB4aHIucmVzcG9uc2VUZXh0ICE9PSBcInN0cmluZ1wiID9cblx0XHRcdFx0XHRcdFx0XHRcdFx0eyBiaW5hcnk6IHhoci5yZXNwb25zZSB9IDpcblx0XHRcdFx0XHRcdFx0XHRcdFx0eyB0ZXh0OiB4aHIucmVzcG9uc2VUZXh0IH0sXG5cdFx0XHRcdFx0XHRcdFx0XHR4aHIuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKClcblx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0fTtcblxuXHRcdFx0XHQvLyBMaXN0ZW4gdG8gZXZlbnRzXG5cdFx0XHRcdHhoci5vbmxvYWQgPSBjYWxsYmFjaygpO1xuXHRcdFx0XHRlcnJvckNhbGxiYWNrID0geGhyLm9uZXJyb3IgPSB4aHIub250aW1lb3V0ID0gY2FsbGJhY2soIFwiZXJyb3JcIiApO1xuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDkgb25seVxuXHRcdFx0XHQvLyBVc2Ugb25yZWFkeXN0YXRlY2hhbmdlIHRvIHJlcGxhY2Ugb25hYm9ydFxuXHRcdFx0XHQvLyB0byBoYW5kbGUgdW5jYXVnaHQgYWJvcnRzXG5cdFx0XHRcdGlmICggeGhyLm9uYWJvcnQgIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0XHR4aHIub25hYm9ydCA9IGVycm9yQ2FsbGJhY2s7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0eGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKCkge1xuXG5cdFx0XHRcdFx0XHQvLyBDaGVjayByZWFkeVN0YXRlIGJlZm9yZSB0aW1lb3V0IGFzIGl0IGNoYW5nZXNcblx0XHRcdFx0XHRcdGlmICggeGhyLnJlYWR5U3RhdGUgPT09IDQgKSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gQWxsb3cgb25lcnJvciB0byBiZSBjYWxsZWQgZmlyc3QsXG5cdFx0XHRcdFx0XHRcdC8vIGJ1dCB0aGF0IHdpbGwgbm90IGhhbmRsZSBhIG5hdGl2ZSBhYm9ydFxuXHRcdFx0XHRcdFx0XHQvLyBBbHNvLCBzYXZlIGVycm9yQ2FsbGJhY2sgdG8gYSB2YXJpYWJsZVxuXHRcdFx0XHRcdFx0XHQvLyBhcyB4aHIub25lcnJvciBjYW5ub3QgYmUgYWNjZXNzZWRcblx0XHRcdFx0XHRcdFx0d2luZG93LnNldFRpbWVvdXQoIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0XHRcdGlmICggY2FsbGJhY2sgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRlcnJvckNhbGxiYWNrKCk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9ICk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIENyZWF0ZSB0aGUgYWJvcnQgY2FsbGJhY2tcblx0XHRcdFx0Y2FsbGJhY2sgPSBjYWxsYmFjayggXCJhYm9ydFwiICk7XG5cblx0XHRcdFx0dHJ5IHtcblxuXHRcdFx0XHRcdC8vIERvIHNlbmQgdGhlIHJlcXVlc3QgKHRoaXMgbWF5IHJhaXNlIGFuIGV4Y2VwdGlvbilcblx0XHRcdFx0XHR4aHIuc2VuZCggb3B0aW9ucy5oYXNDb250ZW50ICYmIG9wdGlvbnMuZGF0YSB8fCBudWxsICk7XG5cdFx0XHRcdH0gY2F0Y2ggKCBlICkge1xuXG5cdFx0XHRcdFx0Ly8gIzE0NjgzOiBPbmx5IHJldGhyb3cgaWYgdGhpcyBoYXNuJ3QgYmVlbiBub3RpZmllZCBhcyBhbiBlcnJvciB5ZXRcblx0XHRcdFx0XHRpZiAoIGNhbGxiYWNrICkge1xuXHRcdFx0XHRcdFx0dGhyb3cgZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cblx0XHRcdGFib3J0OiBmdW5jdGlvbigpIHtcblx0XHRcdFx0aWYgKCBjYWxsYmFjayApIHtcblx0XHRcdFx0XHRjYWxsYmFjaygpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fTtcblx0fVxufSApO1xuXG5cblxuXG4vLyBQcmV2ZW50IGF1dG8tZXhlY3V0aW9uIG9mIHNjcmlwdHMgd2hlbiBubyBleHBsaWNpdCBkYXRhVHlwZSB3YXMgcHJvdmlkZWQgKFNlZSBnaC0yNDMyKVxualF1ZXJ5LmFqYXhQcmVmaWx0ZXIoIGZ1bmN0aW9uKCBzICkge1xuXHRpZiAoIHMuY3Jvc3NEb21haW4gKSB7XG5cdFx0cy5jb250ZW50cy5zY3JpcHQgPSBmYWxzZTtcblx0fVxufSApO1xuXG4vLyBJbnN0YWxsIHNjcmlwdCBkYXRhVHlwZVxualF1ZXJ5LmFqYXhTZXR1cCgge1xuXHRhY2NlcHRzOiB7XG5cdFx0c2NyaXB0OiBcInRleHQvamF2YXNjcmlwdCwgYXBwbGljYXRpb24vamF2YXNjcmlwdCwgXCIgK1xuXHRcdFx0XCJhcHBsaWNhdGlvbi9lY21hc2NyaXB0LCBhcHBsaWNhdGlvbi94LWVjbWFzY3JpcHRcIlxuXHR9LFxuXHRjb250ZW50czoge1xuXHRcdHNjcmlwdDogL1xcYig/OmphdmF8ZWNtYSlzY3JpcHRcXGIvXG5cdH0sXG5cdGNvbnZlcnRlcnM6IHtcblx0XHRcInRleHQgc2NyaXB0XCI6IGZ1bmN0aW9uKCB0ZXh0ICkge1xuXHRcdFx0alF1ZXJ5Lmdsb2JhbEV2YWwoIHRleHQgKTtcblx0XHRcdHJldHVybiB0ZXh0O1xuXHRcdH1cblx0fVxufSApO1xuXG4vLyBIYW5kbGUgY2FjaGUncyBzcGVjaWFsIGNhc2UgYW5kIGNyb3NzRG9tYWluXG5qUXVlcnkuYWpheFByZWZpbHRlciggXCJzY3JpcHRcIiwgZnVuY3Rpb24oIHMgKSB7XG5cdGlmICggcy5jYWNoZSA9PT0gdW5kZWZpbmVkICkge1xuXHRcdHMuY2FjaGUgPSBmYWxzZTtcblx0fVxuXHRpZiAoIHMuY3Jvc3NEb21haW4gKSB7XG5cdFx0cy50eXBlID0gXCJHRVRcIjtcblx0fVxufSApO1xuXG4vLyBCaW5kIHNjcmlwdCB0YWcgaGFjayB0cmFuc3BvcnRcbmpRdWVyeS5hamF4VHJhbnNwb3J0KCBcInNjcmlwdFwiLCBmdW5jdGlvbiggcyApIHtcblxuXHQvLyBUaGlzIHRyYW5zcG9ydCBvbmx5IGRlYWxzIHdpdGggY3Jvc3MgZG9tYWluIG9yIGZvcmNlZC1ieS1hdHRycyByZXF1ZXN0c1xuXHRpZiAoIHMuY3Jvc3NEb21haW4gfHwgcy5zY3JpcHRBdHRycyApIHtcblx0XHR2YXIgc2NyaXB0LCBjYWxsYmFjaztcblx0XHRyZXR1cm4ge1xuXHRcdFx0c2VuZDogZnVuY3Rpb24oIF8sIGNvbXBsZXRlICkge1xuXHRcdFx0XHRzY3JpcHQgPSBqUXVlcnkoIFwiPHNjcmlwdD5cIiApXG5cdFx0XHRcdFx0LmF0dHIoIHMuc2NyaXB0QXR0cnMgfHwge30gKVxuXHRcdFx0XHRcdC5wcm9wKCB7IGNoYXJzZXQ6IHMuc2NyaXB0Q2hhcnNldCwgc3JjOiBzLnVybCB9IClcblx0XHRcdFx0XHQub24oIFwibG9hZCBlcnJvclwiLCBjYWxsYmFjayA9IGZ1bmN0aW9uKCBldnQgKSB7XG5cdFx0XHRcdFx0XHRzY3JpcHQucmVtb3ZlKCk7XG5cdFx0XHRcdFx0XHRjYWxsYmFjayA9IG51bGw7XG5cdFx0XHRcdFx0XHRpZiAoIGV2dCApIHtcblx0XHRcdFx0XHRcdFx0Y29tcGxldGUoIGV2dC50eXBlID09PSBcImVycm9yXCIgPyA0MDQgOiAyMDAsIGV2dC50eXBlICk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSApO1xuXG5cdFx0XHRcdC8vIFVzZSBuYXRpdmUgRE9NIG1hbmlwdWxhdGlvbiB0byBhdm9pZCBvdXIgZG9tTWFuaXAgQUpBWCB0cmlja2VyeVxuXHRcdFx0XHRkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKCBzY3JpcHRbIDAgXSApO1xuXHRcdFx0fSxcblx0XHRcdGFib3J0OiBmdW5jdGlvbigpIHtcblx0XHRcdFx0aWYgKCBjYWxsYmFjayApIHtcblx0XHRcdFx0XHRjYWxsYmFjaygpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fTtcblx0fVxufSApO1xuXG5cblxuXG52YXIgb2xkQ2FsbGJhY2tzID0gW10sXG5cdHJqc29ucCA9IC8oPSlcXD8oPz0mfCQpfFxcP1xcPy87XG5cbi8vIERlZmF1bHQganNvbnAgc2V0dGluZ3NcbmpRdWVyeS5hamF4U2V0dXAoIHtcblx0anNvbnA6IFwiY2FsbGJhY2tcIixcblx0anNvbnBDYWxsYmFjazogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGNhbGxiYWNrID0gb2xkQ2FsbGJhY2tzLnBvcCgpIHx8ICggalF1ZXJ5LmV4cGFuZG8gKyBcIl9cIiArICggbm9uY2UrKyApICk7XG5cdFx0dGhpc1sgY2FsbGJhY2sgXSA9IHRydWU7XG5cdFx0cmV0dXJuIGNhbGxiYWNrO1xuXHR9XG59ICk7XG5cbi8vIERldGVjdCwgbm9ybWFsaXplIG9wdGlvbnMgYW5kIGluc3RhbGwgY2FsbGJhY2tzIGZvciBqc29ucCByZXF1ZXN0c1xualF1ZXJ5LmFqYXhQcmVmaWx0ZXIoIFwianNvbiBqc29ucFwiLCBmdW5jdGlvbiggcywgb3JpZ2luYWxTZXR0aW5ncywganFYSFIgKSB7XG5cblx0dmFyIGNhbGxiYWNrTmFtZSwgb3ZlcndyaXR0ZW4sIHJlc3BvbnNlQ29udGFpbmVyLFxuXHRcdGpzb25Qcm9wID0gcy5qc29ucCAhPT0gZmFsc2UgJiYgKCByanNvbnAudGVzdCggcy51cmwgKSA/XG5cdFx0XHRcInVybFwiIDpcblx0XHRcdHR5cGVvZiBzLmRhdGEgPT09IFwic3RyaW5nXCIgJiZcblx0XHRcdFx0KCBzLmNvbnRlbnRUeXBlIHx8IFwiXCIgKVxuXHRcdFx0XHRcdC5pbmRleE9mKCBcImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZFwiICkgPT09IDAgJiZcblx0XHRcdFx0cmpzb25wLnRlc3QoIHMuZGF0YSApICYmIFwiZGF0YVwiXG5cdFx0KTtcblxuXHQvLyBIYW5kbGUgaWZmIHRoZSBleHBlY3RlZCBkYXRhIHR5cGUgaXMgXCJqc29ucFwiIG9yIHdlIGhhdmUgYSBwYXJhbWV0ZXIgdG8gc2V0XG5cdGlmICgganNvblByb3AgfHwgcy5kYXRhVHlwZXNbIDAgXSA9PT0gXCJqc29ucFwiICkge1xuXG5cdFx0Ly8gR2V0IGNhbGxiYWNrIG5hbWUsIHJlbWVtYmVyaW5nIHByZWV4aXN0aW5nIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCBpdFxuXHRcdGNhbGxiYWNrTmFtZSA9IHMuanNvbnBDYWxsYmFjayA9IGlzRnVuY3Rpb24oIHMuanNvbnBDYWxsYmFjayApID9cblx0XHRcdHMuanNvbnBDYWxsYmFjaygpIDpcblx0XHRcdHMuanNvbnBDYWxsYmFjaztcblxuXHRcdC8vIEluc2VydCBjYWxsYmFjayBpbnRvIHVybCBvciBmb3JtIGRhdGFcblx0XHRpZiAoIGpzb25Qcm9wICkge1xuXHRcdFx0c1sganNvblByb3AgXSA9IHNbIGpzb25Qcm9wIF0ucmVwbGFjZSggcmpzb25wLCBcIiQxXCIgKyBjYWxsYmFja05hbWUgKTtcblx0XHR9IGVsc2UgaWYgKCBzLmpzb25wICE9PSBmYWxzZSApIHtcblx0XHRcdHMudXJsICs9ICggcnF1ZXJ5LnRlc3QoIHMudXJsICkgPyBcIiZcIiA6IFwiP1wiICkgKyBzLmpzb25wICsgXCI9XCIgKyBjYWxsYmFja05hbWU7XG5cdFx0fVxuXG5cdFx0Ly8gVXNlIGRhdGEgY29udmVydGVyIHRvIHJldHJpZXZlIGpzb24gYWZ0ZXIgc2NyaXB0IGV4ZWN1dGlvblxuXHRcdHMuY29udmVydGVyc1sgXCJzY3JpcHQganNvblwiIF0gPSBmdW5jdGlvbigpIHtcblx0XHRcdGlmICggIXJlc3BvbnNlQ29udGFpbmVyICkge1xuXHRcdFx0XHRqUXVlcnkuZXJyb3IoIGNhbGxiYWNrTmFtZSArIFwiIHdhcyBub3QgY2FsbGVkXCIgKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiByZXNwb25zZUNvbnRhaW5lclsgMCBdO1xuXHRcdH07XG5cblx0XHQvLyBGb3JjZSBqc29uIGRhdGFUeXBlXG5cdFx0cy5kYXRhVHlwZXNbIDAgXSA9IFwianNvblwiO1xuXG5cdFx0Ly8gSW5zdGFsbCBjYWxsYmFja1xuXHRcdG92ZXJ3cml0dGVuID0gd2luZG93WyBjYWxsYmFja05hbWUgXTtcblx0XHR3aW5kb3dbIGNhbGxiYWNrTmFtZSBdID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRyZXNwb25zZUNvbnRhaW5lciA9IGFyZ3VtZW50cztcblx0XHR9O1xuXG5cdFx0Ly8gQ2xlYW4tdXAgZnVuY3Rpb24gKGZpcmVzIGFmdGVyIGNvbnZlcnRlcnMpXG5cdFx0anFYSFIuYWx3YXlzKCBmdW5jdGlvbigpIHtcblxuXHRcdFx0Ly8gSWYgcHJldmlvdXMgdmFsdWUgZGlkbid0IGV4aXN0IC0gcmVtb3ZlIGl0XG5cdFx0XHRpZiAoIG92ZXJ3cml0dGVuID09PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdGpRdWVyeSggd2luZG93ICkucmVtb3ZlUHJvcCggY2FsbGJhY2tOYW1lICk7XG5cblx0XHRcdC8vIE90aGVyd2lzZSByZXN0b3JlIHByZWV4aXN0aW5nIHZhbHVlXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR3aW5kb3dbIGNhbGxiYWNrTmFtZSBdID0gb3ZlcndyaXR0ZW47XG5cdFx0XHR9XG5cblx0XHRcdC8vIFNhdmUgYmFjayBhcyBmcmVlXG5cdFx0XHRpZiAoIHNbIGNhbGxiYWNrTmFtZSBdICkge1xuXG5cdFx0XHRcdC8vIE1ha2Ugc3VyZSB0aGF0IHJlLXVzaW5nIHRoZSBvcHRpb25zIGRvZXNuJ3Qgc2NyZXcgdGhpbmdzIGFyb3VuZFxuXHRcdFx0XHRzLmpzb25wQ2FsbGJhY2sgPSBvcmlnaW5hbFNldHRpbmdzLmpzb25wQ2FsbGJhY2s7XG5cblx0XHRcdFx0Ly8gU2F2ZSB0aGUgY2FsbGJhY2sgbmFtZSBmb3IgZnV0dXJlIHVzZVxuXHRcdFx0XHRvbGRDYWxsYmFja3MucHVzaCggY2FsbGJhY2tOYW1lICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIENhbGwgaWYgaXQgd2FzIGEgZnVuY3Rpb24gYW5kIHdlIGhhdmUgYSByZXNwb25zZVxuXHRcdFx0aWYgKCByZXNwb25zZUNvbnRhaW5lciAmJiBpc0Z1bmN0aW9uKCBvdmVyd3JpdHRlbiApICkge1xuXHRcdFx0XHRvdmVyd3JpdHRlbiggcmVzcG9uc2VDb250YWluZXJbIDAgXSApO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXNwb25zZUNvbnRhaW5lciA9IG92ZXJ3cml0dGVuID0gdW5kZWZpbmVkO1xuXHRcdH0gKTtcblxuXHRcdC8vIERlbGVnYXRlIHRvIHNjcmlwdFxuXHRcdHJldHVybiBcInNjcmlwdFwiO1xuXHR9XG59ICk7XG5cblxuXG5cbi8vIFN1cHBvcnQ6IFNhZmFyaSA4IG9ubHlcbi8vIEluIFNhZmFyaSA4IGRvY3VtZW50cyBjcmVhdGVkIHZpYSBkb2N1bWVudC5pbXBsZW1lbnRhdGlvbi5jcmVhdGVIVE1MRG9jdW1lbnRcbi8vIGNvbGxhcHNlIHNpYmxpbmcgZm9ybXM6IHRoZSBzZWNvbmQgb25lIGJlY29tZXMgYSBjaGlsZCBvZiB0aGUgZmlyc3Qgb25lLlxuLy8gQmVjYXVzZSBvZiB0aGF0LCB0aGlzIHNlY3VyaXR5IG1lYXN1cmUgaGFzIHRvIGJlIGRpc2FibGVkIGluIFNhZmFyaSA4LlxuLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNzMzN1xuc3VwcG9ydC5jcmVhdGVIVE1MRG9jdW1lbnQgPSAoIGZ1bmN0aW9uKCkge1xuXHR2YXIgYm9keSA9IGRvY3VtZW50LmltcGxlbWVudGF0aW9uLmNyZWF0ZUhUTUxEb2N1bWVudCggXCJcIiApLmJvZHk7XG5cdGJvZHkuaW5uZXJIVE1MID0gXCI8Zm9ybT48L2Zvcm0+PGZvcm0+PC9mb3JtPlwiO1xuXHRyZXR1cm4gYm9keS5jaGlsZE5vZGVzLmxlbmd0aCA9PT0gMjtcbn0gKSgpO1xuXG5cbi8vIEFyZ3VtZW50IFwiZGF0YVwiIHNob3VsZCBiZSBzdHJpbmcgb2YgaHRtbFxuLy8gY29udGV4dCAob3B0aW9uYWwpOiBJZiBzcGVjaWZpZWQsIHRoZSBmcmFnbWVudCB3aWxsIGJlIGNyZWF0ZWQgaW4gdGhpcyBjb250ZXh0LFxuLy8gZGVmYXVsdHMgdG8gZG9jdW1lbnRcbi8vIGtlZXBTY3JpcHRzIChvcHRpb25hbCk6IElmIHRydWUsIHdpbGwgaW5jbHVkZSBzY3JpcHRzIHBhc3NlZCBpbiB0aGUgaHRtbCBzdHJpbmdcbmpRdWVyeS5wYXJzZUhUTUwgPSBmdW5jdGlvbiggZGF0YSwgY29udGV4dCwga2VlcFNjcmlwdHMgKSB7XG5cdGlmICggdHlwZW9mIGRhdGEgIT09IFwic3RyaW5nXCIgKSB7XG5cdFx0cmV0dXJuIFtdO1xuXHR9XG5cdGlmICggdHlwZW9mIGNvbnRleHQgPT09IFwiYm9vbGVhblwiICkge1xuXHRcdGtlZXBTY3JpcHRzID0gY29udGV4dDtcblx0XHRjb250ZXh0ID0gZmFsc2U7XG5cdH1cblxuXHR2YXIgYmFzZSwgcGFyc2VkLCBzY3JpcHRzO1xuXG5cdGlmICggIWNvbnRleHQgKSB7XG5cblx0XHQvLyBTdG9wIHNjcmlwdHMgb3IgaW5saW5lIGV2ZW50IGhhbmRsZXJzIGZyb20gYmVpbmcgZXhlY3V0ZWQgaW1tZWRpYXRlbHlcblx0XHQvLyBieSB1c2luZyBkb2N1bWVudC5pbXBsZW1lbnRhdGlvblxuXHRcdGlmICggc3VwcG9ydC5jcmVhdGVIVE1MRG9jdW1lbnQgKSB7XG5cdFx0XHRjb250ZXh0ID0gZG9jdW1lbnQuaW1wbGVtZW50YXRpb24uY3JlYXRlSFRNTERvY3VtZW50KCBcIlwiICk7XG5cblx0XHRcdC8vIFNldCB0aGUgYmFzZSBocmVmIGZvciB0aGUgY3JlYXRlZCBkb2N1bWVudFxuXHRcdFx0Ly8gc28gYW55IHBhcnNlZCBlbGVtZW50cyB3aXRoIFVSTHNcblx0XHRcdC8vIGFyZSBiYXNlZCBvbiB0aGUgZG9jdW1lbnQncyBVUkwgKGdoLTI5NjUpXG5cdFx0XHRiYXNlID0gY29udGV4dC5jcmVhdGVFbGVtZW50KCBcImJhc2VcIiApO1xuXHRcdFx0YmFzZS5ocmVmID0gZG9jdW1lbnQubG9jYXRpb24uaHJlZjtcblx0XHRcdGNvbnRleHQuaGVhZC5hcHBlbmRDaGlsZCggYmFzZSApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb250ZXh0ID0gZG9jdW1lbnQ7XG5cdFx0fVxuXHR9XG5cblx0cGFyc2VkID0gcnNpbmdsZVRhZy5leGVjKCBkYXRhICk7XG5cdHNjcmlwdHMgPSAha2VlcFNjcmlwdHMgJiYgW107XG5cblx0Ly8gU2luZ2xlIHRhZ1xuXHRpZiAoIHBhcnNlZCApIHtcblx0XHRyZXR1cm4gWyBjb250ZXh0LmNyZWF0ZUVsZW1lbnQoIHBhcnNlZFsgMSBdICkgXTtcblx0fVxuXG5cdHBhcnNlZCA9IGJ1aWxkRnJhZ21lbnQoIFsgZGF0YSBdLCBjb250ZXh0LCBzY3JpcHRzICk7XG5cblx0aWYgKCBzY3JpcHRzICYmIHNjcmlwdHMubGVuZ3RoICkge1xuXHRcdGpRdWVyeSggc2NyaXB0cyApLnJlbW92ZSgpO1xuXHR9XG5cblx0cmV0dXJuIGpRdWVyeS5tZXJnZSggW10sIHBhcnNlZC5jaGlsZE5vZGVzICk7XG59O1xuXG5cbi8qKlxuICogTG9hZCBhIHVybCBpbnRvIGEgcGFnZVxuICovXG5qUXVlcnkuZm4ubG9hZCA9IGZ1bmN0aW9uKCB1cmwsIHBhcmFtcywgY2FsbGJhY2sgKSB7XG5cdHZhciBzZWxlY3RvciwgdHlwZSwgcmVzcG9uc2UsXG5cdFx0c2VsZiA9IHRoaXMsXG5cdFx0b2ZmID0gdXJsLmluZGV4T2YoIFwiIFwiICk7XG5cblx0aWYgKCBvZmYgPiAtMSApIHtcblx0XHRzZWxlY3RvciA9IHN0cmlwQW5kQ29sbGFwc2UoIHVybC5zbGljZSggb2ZmICkgKTtcblx0XHR1cmwgPSB1cmwuc2xpY2UoIDAsIG9mZiApO1xuXHR9XG5cblx0Ly8gSWYgaXQncyBhIGZ1bmN0aW9uXG5cdGlmICggaXNGdW5jdGlvbiggcGFyYW1zICkgKSB7XG5cblx0XHQvLyBXZSBhc3N1bWUgdGhhdCBpdCdzIHRoZSBjYWxsYmFja1xuXHRcdGNhbGxiYWNrID0gcGFyYW1zO1xuXHRcdHBhcmFtcyA9IHVuZGVmaW5lZDtcblxuXHQvLyBPdGhlcndpc2UsIGJ1aWxkIGEgcGFyYW0gc3RyaW5nXG5cdH0gZWxzZSBpZiAoIHBhcmFtcyAmJiB0eXBlb2YgcGFyYW1zID09PSBcIm9iamVjdFwiICkge1xuXHRcdHR5cGUgPSBcIlBPU1RcIjtcblx0fVxuXG5cdC8vIElmIHdlIGhhdmUgZWxlbWVudHMgdG8gbW9kaWZ5LCBtYWtlIHRoZSByZXF1ZXN0XG5cdGlmICggc2VsZi5sZW5ndGggPiAwICkge1xuXHRcdGpRdWVyeS5hamF4KCB7XG5cdFx0XHR1cmw6IHVybCxcblxuXHRcdFx0Ly8gSWYgXCJ0eXBlXCIgdmFyaWFibGUgaXMgdW5kZWZpbmVkLCB0aGVuIFwiR0VUXCIgbWV0aG9kIHdpbGwgYmUgdXNlZC5cblx0XHRcdC8vIE1ha2UgdmFsdWUgb2YgdGhpcyBmaWVsZCBleHBsaWNpdCBzaW5jZVxuXHRcdFx0Ly8gdXNlciBjYW4gb3ZlcnJpZGUgaXQgdGhyb3VnaCBhamF4U2V0dXAgbWV0aG9kXG5cdFx0XHR0eXBlOiB0eXBlIHx8IFwiR0VUXCIsXG5cdFx0XHRkYXRhVHlwZTogXCJodG1sXCIsXG5cdFx0XHRkYXRhOiBwYXJhbXNcblx0XHR9ICkuZG9uZSggZnVuY3Rpb24oIHJlc3BvbnNlVGV4dCApIHtcblxuXHRcdFx0Ly8gU2F2ZSByZXNwb25zZSBmb3IgdXNlIGluIGNvbXBsZXRlIGNhbGxiYWNrXG5cdFx0XHRyZXNwb25zZSA9IGFyZ3VtZW50cztcblxuXHRcdFx0c2VsZi5odG1sKCBzZWxlY3RvciA/XG5cblx0XHRcdFx0Ly8gSWYgYSBzZWxlY3RvciB3YXMgc3BlY2lmaWVkLCBsb2NhdGUgdGhlIHJpZ2h0IGVsZW1lbnRzIGluIGEgZHVtbXkgZGl2XG5cdFx0XHRcdC8vIEV4Y2x1ZGUgc2NyaXB0cyB0byBhdm9pZCBJRSAnUGVybWlzc2lvbiBEZW5pZWQnIGVycm9yc1xuXHRcdFx0XHRqUXVlcnkoIFwiPGRpdj5cIiApLmFwcGVuZCggalF1ZXJ5LnBhcnNlSFRNTCggcmVzcG9uc2VUZXh0ICkgKS5maW5kKCBzZWxlY3RvciApIDpcblxuXHRcdFx0XHQvLyBPdGhlcndpc2UgdXNlIHRoZSBmdWxsIHJlc3VsdFxuXHRcdFx0XHRyZXNwb25zZVRleHQgKTtcblxuXHRcdC8vIElmIHRoZSByZXF1ZXN0IHN1Y2NlZWRzLCB0aGlzIGZ1bmN0aW9uIGdldHMgXCJkYXRhXCIsIFwic3RhdHVzXCIsIFwianFYSFJcIlxuXHRcdC8vIGJ1dCB0aGV5IGFyZSBpZ25vcmVkIGJlY2F1c2UgcmVzcG9uc2Ugd2FzIHNldCBhYm92ZS5cblx0XHQvLyBJZiBpdCBmYWlscywgdGhpcyBmdW5jdGlvbiBnZXRzIFwianFYSFJcIiwgXCJzdGF0dXNcIiwgXCJlcnJvclwiXG5cdFx0fSApLmFsd2F5cyggY2FsbGJhY2sgJiYgZnVuY3Rpb24oIGpxWEhSLCBzdGF0dXMgKSB7XG5cdFx0XHRzZWxmLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRjYWxsYmFjay5hcHBseSggdGhpcywgcmVzcG9uc2UgfHwgWyBqcVhIUi5yZXNwb25zZVRleHQsIHN0YXR1cywganFYSFIgXSApO1xuXHRcdFx0fSApO1xuXHRcdH0gKTtcblx0fVxuXG5cdHJldHVybiB0aGlzO1xufTtcblxuXG5cblxuLy8gQXR0YWNoIGEgYnVuY2ggb2YgZnVuY3Rpb25zIGZvciBoYW5kbGluZyBjb21tb24gQUpBWCBldmVudHNcbmpRdWVyeS5lYWNoKCBbXG5cdFwiYWpheFN0YXJ0XCIsXG5cdFwiYWpheFN0b3BcIixcblx0XCJhamF4Q29tcGxldGVcIixcblx0XCJhamF4RXJyb3JcIixcblx0XCJhamF4U3VjY2Vzc1wiLFxuXHRcImFqYXhTZW5kXCJcbl0sIGZ1bmN0aW9uKCBpLCB0eXBlICkge1xuXHRqUXVlcnkuZm5bIHR5cGUgXSA9IGZ1bmN0aW9uKCBmbiApIHtcblx0XHRyZXR1cm4gdGhpcy5vbiggdHlwZSwgZm4gKTtcblx0fTtcbn0gKTtcblxuXG5cblxualF1ZXJ5LmV4cHIucHNldWRvcy5hbmltYXRlZCA9IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRyZXR1cm4galF1ZXJ5LmdyZXAoIGpRdWVyeS50aW1lcnMsIGZ1bmN0aW9uKCBmbiApIHtcblx0XHRyZXR1cm4gZWxlbSA9PT0gZm4uZWxlbTtcblx0fSApLmxlbmd0aDtcbn07XG5cblxuXG5cbmpRdWVyeS5vZmZzZXQgPSB7XG5cdHNldE9mZnNldDogZnVuY3Rpb24oIGVsZW0sIG9wdGlvbnMsIGkgKSB7XG5cdFx0dmFyIGN1clBvc2l0aW9uLCBjdXJMZWZ0LCBjdXJDU1NUb3AsIGN1clRvcCwgY3VyT2Zmc2V0LCBjdXJDU1NMZWZ0LCBjYWxjdWxhdGVQb3NpdGlvbixcblx0XHRcdHBvc2l0aW9uID0galF1ZXJ5LmNzcyggZWxlbSwgXCJwb3NpdGlvblwiICksXG5cdFx0XHRjdXJFbGVtID0galF1ZXJ5KCBlbGVtICksXG5cdFx0XHRwcm9wcyA9IHt9O1xuXG5cdFx0Ly8gU2V0IHBvc2l0aW9uIGZpcnN0LCBpbi1jYXNlIHRvcC9sZWZ0IGFyZSBzZXQgZXZlbiBvbiBzdGF0aWMgZWxlbVxuXHRcdGlmICggcG9zaXRpb24gPT09IFwic3RhdGljXCIgKSB7XG5cdFx0XHRlbGVtLnN0eWxlLnBvc2l0aW9uID0gXCJyZWxhdGl2ZVwiO1xuXHRcdH1cblxuXHRcdGN1ck9mZnNldCA9IGN1ckVsZW0ub2Zmc2V0KCk7XG5cdFx0Y3VyQ1NTVG9wID0galF1ZXJ5LmNzcyggZWxlbSwgXCJ0b3BcIiApO1xuXHRcdGN1ckNTU0xlZnQgPSBqUXVlcnkuY3NzKCBlbGVtLCBcImxlZnRcIiApO1xuXHRcdGNhbGN1bGF0ZVBvc2l0aW9uID0gKCBwb3NpdGlvbiA9PT0gXCJhYnNvbHV0ZVwiIHx8IHBvc2l0aW9uID09PSBcImZpeGVkXCIgKSAmJlxuXHRcdFx0KCBjdXJDU1NUb3AgKyBjdXJDU1NMZWZ0ICkuaW5kZXhPZiggXCJhdXRvXCIgKSA+IC0xO1xuXG5cdFx0Ly8gTmVlZCB0byBiZSBhYmxlIHRvIGNhbGN1bGF0ZSBwb3NpdGlvbiBpZiBlaXRoZXJcblx0XHQvLyB0b3Agb3IgbGVmdCBpcyBhdXRvIGFuZCBwb3NpdGlvbiBpcyBlaXRoZXIgYWJzb2x1dGUgb3IgZml4ZWRcblx0XHRpZiAoIGNhbGN1bGF0ZVBvc2l0aW9uICkge1xuXHRcdFx0Y3VyUG9zaXRpb24gPSBjdXJFbGVtLnBvc2l0aW9uKCk7XG5cdFx0XHRjdXJUb3AgPSBjdXJQb3NpdGlvbi50b3A7XG5cdFx0XHRjdXJMZWZ0ID0gY3VyUG9zaXRpb24ubGVmdDtcblxuXHRcdH0gZWxzZSB7XG5cdFx0XHRjdXJUb3AgPSBwYXJzZUZsb2F0KCBjdXJDU1NUb3AgKSB8fCAwO1xuXHRcdFx0Y3VyTGVmdCA9IHBhcnNlRmxvYXQoIGN1ckNTU0xlZnQgKSB8fCAwO1xuXHRcdH1cblxuXHRcdGlmICggaXNGdW5jdGlvbiggb3B0aW9ucyApICkge1xuXG5cdFx0XHQvLyBVc2UgalF1ZXJ5LmV4dGVuZCBoZXJlIHRvIGFsbG93IG1vZGlmaWNhdGlvbiBvZiBjb29yZGluYXRlcyBhcmd1bWVudCAoZ2gtMTg0OClcblx0XHRcdG9wdGlvbnMgPSBvcHRpb25zLmNhbGwoIGVsZW0sIGksIGpRdWVyeS5leHRlbmQoIHt9LCBjdXJPZmZzZXQgKSApO1xuXHRcdH1cblxuXHRcdGlmICggb3B0aW9ucy50b3AgIT0gbnVsbCApIHtcblx0XHRcdHByb3BzLnRvcCA9ICggb3B0aW9ucy50b3AgLSBjdXJPZmZzZXQudG9wICkgKyBjdXJUb3A7XG5cdFx0fVxuXHRcdGlmICggb3B0aW9ucy5sZWZ0ICE9IG51bGwgKSB7XG5cdFx0XHRwcm9wcy5sZWZ0ID0gKCBvcHRpb25zLmxlZnQgLSBjdXJPZmZzZXQubGVmdCApICsgY3VyTGVmdDtcblx0XHR9XG5cblx0XHRpZiAoIFwidXNpbmdcIiBpbiBvcHRpb25zICkge1xuXHRcdFx0b3B0aW9ucy51c2luZy5jYWxsKCBlbGVtLCBwcm9wcyApO1xuXG5cdFx0fSBlbHNlIHtcblx0XHRcdGN1ckVsZW0uY3NzKCBwcm9wcyApO1xuXHRcdH1cblx0fVxufTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXG5cdC8vIG9mZnNldCgpIHJlbGF0ZXMgYW4gZWxlbWVudCdzIGJvcmRlciBib3ggdG8gdGhlIGRvY3VtZW50IG9yaWdpblxuXHRvZmZzZXQ6IGZ1bmN0aW9uKCBvcHRpb25zICkge1xuXG5cdFx0Ly8gUHJlc2VydmUgY2hhaW5pbmcgZm9yIHNldHRlclxuXHRcdGlmICggYXJndW1lbnRzLmxlbmd0aCApIHtcblx0XHRcdHJldHVybiBvcHRpb25zID09PSB1bmRlZmluZWQgP1xuXHRcdFx0XHR0aGlzIDpcblx0XHRcdFx0dGhpcy5lYWNoKCBmdW5jdGlvbiggaSApIHtcblx0XHRcdFx0XHRqUXVlcnkub2Zmc2V0LnNldE9mZnNldCggdGhpcywgb3B0aW9ucywgaSApO1xuXHRcdFx0XHR9ICk7XG5cdFx0fVxuXG5cdFx0dmFyIHJlY3QsIHdpbixcblx0XHRcdGVsZW0gPSB0aGlzWyAwIF07XG5cblx0XHRpZiAoICFlbGVtICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIFJldHVybiB6ZXJvcyBmb3IgZGlzY29ubmVjdGVkIGFuZCBoaWRkZW4gKGRpc3BsYXk6IG5vbmUpIGVsZW1lbnRzIChnaC0yMzEwKVxuXHRcdC8vIFN1cHBvcnQ6IElFIDw9MTEgb25seVxuXHRcdC8vIFJ1bm5pbmcgZ2V0Qm91bmRpbmdDbGllbnRSZWN0IG9uIGFcblx0XHQvLyBkaXNjb25uZWN0ZWQgbm9kZSBpbiBJRSB0aHJvd3MgYW4gZXJyb3Jcblx0XHRpZiAoICFlbGVtLmdldENsaWVudFJlY3RzKCkubGVuZ3RoICkge1xuXHRcdFx0cmV0dXJuIHsgdG9wOiAwLCBsZWZ0OiAwIH07XG5cdFx0fVxuXG5cdFx0Ly8gR2V0IGRvY3VtZW50LXJlbGF0aXZlIHBvc2l0aW9uIGJ5IGFkZGluZyB2aWV3cG9ydCBzY3JvbGwgdG8gdmlld3BvcnQtcmVsYXRpdmUgZ0JDUlxuXHRcdHJlY3QgPSBlbGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXHRcdHdpbiA9IGVsZW0ub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlldztcblx0XHRyZXR1cm4ge1xuXHRcdFx0dG9wOiByZWN0LnRvcCArIHdpbi5wYWdlWU9mZnNldCxcblx0XHRcdGxlZnQ6IHJlY3QubGVmdCArIHdpbi5wYWdlWE9mZnNldFxuXHRcdH07XG5cdH0sXG5cblx0Ly8gcG9zaXRpb24oKSByZWxhdGVzIGFuIGVsZW1lbnQncyBtYXJnaW4gYm94IHRvIGl0cyBvZmZzZXQgcGFyZW50J3MgcGFkZGluZyBib3hcblx0Ly8gVGhpcyBjb3JyZXNwb25kcyB0byB0aGUgYmVoYXZpb3Igb2YgQ1NTIGFic29sdXRlIHBvc2l0aW9uaW5nXG5cdHBvc2l0aW9uOiBmdW5jdGlvbigpIHtcblx0XHRpZiAoICF0aGlzWyAwIF0gKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dmFyIG9mZnNldFBhcmVudCwgb2Zmc2V0LCBkb2MsXG5cdFx0XHRlbGVtID0gdGhpc1sgMCBdLFxuXHRcdFx0cGFyZW50T2Zmc2V0ID0geyB0b3A6IDAsIGxlZnQ6IDAgfTtcblxuXHRcdC8vIHBvc2l0aW9uOmZpeGVkIGVsZW1lbnRzIGFyZSBvZmZzZXQgZnJvbSB0aGUgdmlld3BvcnQsIHdoaWNoIGl0c2VsZiBhbHdheXMgaGFzIHplcm8gb2Zmc2V0XG5cdFx0aWYgKCBqUXVlcnkuY3NzKCBlbGVtLCBcInBvc2l0aW9uXCIgKSA9PT0gXCJmaXhlZFwiICkge1xuXG5cdFx0XHQvLyBBc3N1bWUgcG9zaXRpb246Zml4ZWQgaW1wbGllcyBhdmFpbGFiaWxpdHkgb2YgZ2V0Qm91bmRpbmdDbGllbnRSZWN0XG5cdFx0XHRvZmZzZXQgPSBlbGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG5cdFx0fSBlbHNlIHtcblx0XHRcdG9mZnNldCA9IHRoaXMub2Zmc2V0KCk7XG5cblx0XHRcdC8vIEFjY291bnQgZm9yIHRoZSAqcmVhbCogb2Zmc2V0IHBhcmVudCwgd2hpY2ggY2FuIGJlIHRoZSBkb2N1bWVudCBvciBpdHMgcm9vdCBlbGVtZW50XG5cdFx0XHQvLyB3aGVuIGEgc3RhdGljYWxseSBwb3NpdGlvbmVkIGVsZW1lbnQgaXMgaWRlbnRpZmllZFxuXHRcdFx0ZG9jID0gZWxlbS5vd25lckRvY3VtZW50O1xuXHRcdFx0b2Zmc2V0UGFyZW50ID0gZWxlbS5vZmZzZXRQYXJlbnQgfHwgZG9jLmRvY3VtZW50RWxlbWVudDtcblx0XHRcdHdoaWxlICggb2Zmc2V0UGFyZW50ICYmXG5cdFx0XHRcdCggb2Zmc2V0UGFyZW50ID09PSBkb2MuYm9keSB8fCBvZmZzZXRQYXJlbnQgPT09IGRvYy5kb2N1bWVudEVsZW1lbnQgKSAmJlxuXHRcdFx0XHRqUXVlcnkuY3NzKCBvZmZzZXRQYXJlbnQsIFwicG9zaXRpb25cIiApID09PSBcInN0YXRpY1wiICkge1xuXG5cdFx0XHRcdG9mZnNldFBhcmVudCA9IG9mZnNldFBhcmVudC5wYXJlbnROb2RlO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCBvZmZzZXRQYXJlbnQgJiYgb2Zmc2V0UGFyZW50ICE9PSBlbGVtICYmIG9mZnNldFBhcmVudC5ub2RlVHlwZSA9PT0gMSApIHtcblxuXHRcdFx0XHQvLyBJbmNvcnBvcmF0ZSBib3JkZXJzIGludG8gaXRzIG9mZnNldCwgc2luY2UgdGhleSBhcmUgb3V0c2lkZSBpdHMgY29udGVudCBvcmlnaW5cblx0XHRcdFx0cGFyZW50T2Zmc2V0ID0galF1ZXJ5KCBvZmZzZXRQYXJlbnQgKS5vZmZzZXQoKTtcblx0XHRcdFx0cGFyZW50T2Zmc2V0LnRvcCArPSBqUXVlcnkuY3NzKCBvZmZzZXRQYXJlbnQsIFwiYm9yZGVyVG9wV2lkdGhcIiwgdHJ1ZSApO1xuXHRcdFx0XHRwYXJlbnRPZmZzZXQubGVmdCArPSBqUXVlcnkuY3NzKCBvZmZzZXRQYXJlbnQsIFwiYm9yZGVyTGVmdFdpZHRoXCIsIHRydWUgKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBTdWJ0cmFjdCBwYXJlbnQgb2Zmc2V0cyBhbmQgZWxlbWVudCBtYXJnaW5zXG5cdFx0cmV0dXJuIHtcblx0XHRcdHRvcDogb2Zmc2V0LnRvcCAtIHBhcmVudE9mZnNldC50b3AgLSBqUXVlcnkuY3NzKCBlbGVtLCBcIm1hcmdpblRvcFwiLCB0cnVlICksXG5cdFx0XHRsZWZ0OiBvZmZzZXQubGVmdCAtIHBhcmVudE9mZnNldC5sZWZ0IC0galF1ZXJ5LmNzcyggZWxlbSwgXCJtYXJnaW5MZWZ0XCIsIHRydWUgKVxuXHRcdH07XG5cdH0sXG5cblx0Ly8gVGhpcyBtZXRob2Qgd2lsbCByZXR1cm4gZG9jdW1lbnRFbGVtZW50IGluIHRoZSBmb2xsb3dpbmcgY2FzZXM6XG5cdC8vIDEpIEZvciB0aGUgZWxlbWVudCBpbnNpZGUgdGhlIGlmcmFtZSB3aXRob3V0IG9mZnNldFBhcmVudCwgdGhpcyBtZXRob2Qgd2lsbCByZXR1cm5cblx0Ly8gICAgZG9jdW1lbnRFbGVtZW50IG9mIHRoZSBwYXJlbnQgd2luZG93XG5cdC8vIDIpIEZvciB0aGUgaGlkZGVuIG9yIGRldGFjaGVkIGVsZW1lbnRcblx0Ly8gMykgRm9yIGJvZHkgb3IgaHRtbCBlbGVtZW50LCBpLmUuIGluIGNhc2Ugb2YgdGhlIGh0bWwgbm9kZSAtIGl0IHdpbGwgcmV0dXJuIGl0c2VsZlxuXHQvL1xuXHQvLyBidXQgdGhvc2UgZXhjZXB0aW9ucyB3ZXJlIG5ldmVyIHByZXNlbnRlZCBhcyBhIHJlYWwgbGlmZSB1c2UtY2FzZXNcblx0Ly8gYW5kIG1pZ2h0IGJlIGNvbnNpZGVyZWQgYXMgbW9yZSBwcmVmZXJhYmxlIHJlc3VsdHMuXG5cdC8vXG5cdC8vIFRoaXMgbG9naWMsIGhvd2V2ZXIsIGlzIG5vdCBndWFyYW50ZWVkIGFuZCBjYW4gY2hhbmdlIGF0IGFueSBwb2ludCBpbiB0aGUgZnV0dXJlXG5cdG9mZnNldFBhcmVudDogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMubWFwKCBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBvZmZzZXRQYXJlbnQgPSB0aGlzLm9mZnNldFBhcmVudDtcblxuXHRcdFx0d2hpbGUgKCBvZmZzZXRQYXJlbnQgJiYgalF1ZXJ5LmNzcyggb2Zmc2V0UGFyZW50LCBcInBvc2l0aW9uXCIgKSA9PT0gXCJzdGF0aWNcIiApIHtcblx0XHRcdFx0b2Zmc2V0UGFyZW50ID0gb2Zmc2V0UGFyZW50Lm9mZnNldFBhcmVudDtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIG9mZnNldFBhcmVudCB8fCBkb2N1bWVudEVsZW1lbnQ7XG5cdFx0fSApO1xuXHR9XG59ICk7XG5cbi8vIENyZWF0ZSBzY3JvbGxMZWZ0IGFuZCBzY3JvbGxUb3AgbWV0aG9kc1xualF1ZXJ5LmVhY2goIHsgc2Nyb2xsTGVmdDogXCJwYWdlWE9mZnNldFwiLCBzY3JvbGxUb3A6IFwicGFnZVlPZmZzZXRcIiB9LCBmdW5jdGlvbiggbWV0aG9kLCBwcm9wICkge1xuXHR2YXIgdG9wID0gXCJwYWdlWU9mZnNldFwiID09PSBwcm9wO1xuXG5cdGpRdWVyeS5mblsgbWV0aG9kIF0gPSBmdW5jdGlvbiggdmFsICkge1xuXHRcdHJldHVybiBhY2Nlc3MoIHRoaXMsIGZ1bmN0aW9uKCBlbGVtLCBtZXRob2QsIHZhbCApIHtcblxuXHRcdFx0Ly8gQ29hbGVzY2UgZG9jdW1lbnRzIGFuZCB3aW5kb3dzXG5cdFx0XHR2YXIgd2luO1xuXHRcdFx0aWYgKCBpc1dpbmRvdyggZWxlbSApICkge1xuXHRcdFx0XHR3aW4gPSBlbGVtO1xuXHRcdFx0fSBlbHNlIGlmICggZWxlbS5ub2RlVHlwZSA9PT0gOSApIHtcblx0XHRcdFx0d2luID0gZWxlbS5kZWZhdWx0Vmlldztcblx0XHRcdH1cblxuXHRcdFx0aWYgKCB2YWwgPT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0cmV0dXJuIHdpbiA/IHdpblsgcHJvcCBdIDogZWxlbVsgbWV0aG9kIF07XG5cdFx0XHR9XG5cblx0XHRcdGlmICggd2luICkge1xuXHRcdFx0XHR3aW4uc2Nyb2xsVG8oXG5cdFx0XHRcdFx0IXRvcCA/IHZhbCA6IHdpbi5wYWdlWE9mZnNldCxcblx0XHRcdFx0XHR0b3AgPyB2YWwgOiB3aW4ucGFnZVlPZmZzZXRcblx0XHRcdFx0KTtcblxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZWxlbVsgbWV0aG9kIF0gPSB2YWw7XG5cdFx0XHR9XG5cdFx0fSwgbWV0aG9kLCB2YWwsIGFyZ3VtZW50cy5sZW5ndGggKTtcblx0fTtcbn0gKTtcblxuLy8gU3VwcG9ydDogU2FmYXJpIDw9NyAtIDkuMSwgQ2hyb21lIDw9MzcgLSA0OVxuLy8gQWRkIHRoZSB0b3AvbGVmdCBjc3NIb29rcyB1c2luZyBqUXVlcnkuZm4ucG9zaXRpb25cbi8vIFdlYmtpdCBidWc6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yOTA4NFxuLy8gQmxpbmsgYnVnOiBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD01ODkzNDdcbi8vIGdldENvbXB1dGVkU3R5bGUgcmV0dXJucyBwZXJjZW50IHdoZW4gc3BlY2lmaWVkIGZvciB0b3AvbGVmdC9ib3R0b20vcmlnaHQ7XG4vLyByYXRoZXIgdGhhbiBtYWtlIHRoZSBjc3MgbW9kdWxlIGRlcGVuZCBvbiB0aGUgb2Zmc2V0IG1vZHVsZSwganVzdCBjaGVjayBmb3IgaXQgaGVyZVxualF1ZXJ5LmVhY2goIFsgXCJ0b3BcIiwgXCJsZWZ0XCIgXSwgZnVuY3Rpb24oIGksIHByb3AgKSB7XG5cdGpRdWVyeS5jc3NIb29rc1sgcHJvcCBdID0gYWRkR2V0SG9va0lmKCBzdXBwb3J0LnBpeGVsUG9zaXRpb24sXG5cdFx0ZnVuY3Rpb24oIGVsZW0sIGNvbXB1dGVkICkge1xuXHRcdFx0aWYgKCBjb21wdXRlZCApIHtcblx0XHRcdFx0Y29tcHV0ZWQgPSBjdXJDU1MoIGVsZW0sIHByb3AgKTtcblxuXHRcdFx0XHQvLyBJZiBjdXJDU1MgcmV0dXJucyBwZXJjZW50YWdlLCBmYWxsYmFjayB0byBvZmZzZXRcblx0XHRcdFx0cmV0dXJuIHJudW1ub25weC50ZXN0KCBjb21wdXRlZCApID9cblx0XHRcdFx0XHRqUXVlcnkoIGVsZW0gKS5wb3NpdGlvbigpWyBwcm9wIF0gKyBcInB4XCIgOlxuXHRcdFx0XHRcdGNvbXB1dGVkO1xuXHRcdFx0fVxuXHRcdH1cblx0KTtcbn0gKTtcblxuXG4vLyBDcmVhdGUgaW5uZXJIZWlnaHQsIGlubmVyV2lkdGgsIGhlaWdodCwgd2lkdGgsIG91dGVySGVpZ2h0IGFuZCBvdXRlcldpZHRoIG1ldGhvZHNcbmpRdWVyeS5lYWNoKCB7IEhlaWdodDogXCJoZWlnaHRcIiwgV2lkdGg6IFwid2lkdGhcIiB9LCBmdW5jdGlvbiggbmFtZSwgdHlwZSApIHtcblx0alF1ZXJ5LmVhY2goIHsgcGFkZGluZzogXCJpbm5lclwiICsgbmFtZSwgY29udGVudDogdHlwZSwgXCJcIjogXCJvdXRlclwiICsgbmFtZSB9LFxuXHRcdGZ1bmN0aW9uKCBkZWZhdWx0RXh0cmEsIGZ1bmNOYW1lICkge1xuXG5cdFx0Ly8gTWFyZ2luIGlzIG9ubHkgZm9yIG91dGVySGVpZ2h0LCBvdXRlcldpZHRoXG5cdFx0alF1ZXJ5LmZuWyBmdW5jTmFtZSBdID0gZnVuY3Rpb24oIG1hcmdpbiwgdmFsdWUgKSB7XG5cdFx0XHR2YXIgY2hhaW5hYmxlID0gYXJndW1lbnRzLmxlbmd0aCAmJiAoIGRlZmF1bHRFeHRyYSB8fCB0eXBlb2YgbWFyZ2luICE9PSBcImJvb2xlYW5cIiApLFxuXHRcdFx0XHRleHRyYSA9IGRlZmF1bHRFeHRyYSB8fCAoIG1hcmdpbiA9PT0gdHJ1ZSB8fCB2YWx1ZSA9PT0gdHJ1ZSA/IFwibWFyZ2luXCIgOiBcImJvcmRlclwiICk7XG5cblx0XHRcdHJldHVybiBhY2Nlc3MoIHRoaXMsIGZ1bmN0aW9uKCBlbGVtLCB0eXBlLCB2YWx1ZSApIHtcblx0XHRcdFx0dmFyIGRvYztcblxuXHRcdFx0XHRpZiAoIGlzV2luZG93KCBlbGVtICkgKSB7XG5cblx0XHRcdFx0XHQvLyAkKCB3aW5kb3cgKS5vdXRlcldpZHRoL0hlaWdodCByZXR1cm4gdy9oIGluY2x1ZGluZyBzY3JvbGxiYXJzIChnaC0xNzI5KVxuXHRcdFx0XHRcdHJldHVybiBmdW5jTmFtZS5pbmRleE9mKCBcIm91dGVyXCIgKSA9PT0gMCA/XG5cdFx0XHRcdFx0XHRlbGVtWyBcImlubmVyXCIgKyBuYW1lIF0gOlxuXHRcdFx0XHRcdFx0ZWxlbS5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnRbIFwiY2xpZW50XCIgKyBuYW1lIF07XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBHZXQgZG9jdW1lbnQgd2lkdGggb3IgaGVpZ2h0XG5cdFx0XHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gOSApIHtcblx0XHRcdFx0XHRkb2MgPSBlbGVtLmRvY3VtZW50RWxlbWVudDtcblxuXHRcdFx0XHRcdC8vIEVpdGhlciBzY3JvbGxbV2lkdGgvSGVpZ2h0XSBvciBvZmZzZXRbV2lkdGgvSGVpZ2h0XSBvciBjbGllbnRbV2lkdGgvSGVpZ2h0XSxcblx0XHRcdFx0XHQvLyB3aGljaGV2ZXIgaXMgZ3JlYXRlc3Rcblx0XHRcdFx0XHRyZXR1cm4gTWF0aC5tYXgoXG5cdFx0XHRcdFx0XHRlbGVtLmJvZHlbIFwic2Nyb2xsXCIgKyBuYW1lIF0sIGRvY1sgXCJzY3JvbGxcIiArIG5hbWUgXSxcblx0XHRcdFx0XHRcdGVsZW0uYm9keVsgXCJvZmZzZXRcIiArIG5hbWUgXSwgZG9jWyBcIm9mZnNldFwiICsgbmFtZSBdLFxuXHRcdFx0XHRcdFx0ZG9jWyBcImNsaWVudFwiICsgbmFtZSBdXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiB2YWx1ZSA9PT0gdW5kZWZpbmVkID9cblxuXHRcdFx0XHRcdC8vIEdldCB3aWR0aCBvciBoZWlnaHQgb24gdGhlIGVsZW1lbnQsIHJlcXVlc3RpbmcgYnV0IG5vdCBmb3JjaW5nIHBhcnNlRmxvYXRcblx0XHRcdFx0XHRqUXVlcnkuY3NzKCBlbGVtLCB0eXBlLCBleHRyYSApIDpcblxuXHRcdFx0XHRcdC8vIFNldCB3aWR0aCBvciBoZWlnaHQgb24gdGhlIGVsZW1lbnRcblx0XHRcdFx0XHRqUXVlcnkuc3R5bGUoIGVsZW0sIHR5cGUsIHZhbHVlLCBleHRyYSApO1xuXHRcdFx0fSwgdHlwZSwgY2hhaW5hYmxlID8gbWFyZ2luIDogdW5kZWZpbmVkLCBjaGFpbmFibGUgKTtcblx0XHR9O1xuXHR9ICk7XG59ICk7XG5cblxualF1ZXJ5LmVhY2goICggXCJibHVyIGZvY3VzIGZvY3VzaW4gZm9jdXNvdXQgcmVzaXplIHNjcm9sbCBjbGljayBkYmxjbGljayBcIiArXG5cdFwibW91c2Vkb3duIG1vdXNldXAgbW91c2Vtb3ZlIG1vdXNlb3ZlciBtb3VzZW91dCBtb3VzZWVudGVyIG1vdXNlbGVhdmUgXCIgK1xuXHRcImNoYW5nZSBzZWxlY3Qgc3VibWl0IGtleWRvd24ga2V5cHJlc3Mga2V5dXAgY29udGV4dG1lbnVcIiApLnNwbGl0KCBcIiBcIiApLFxuXHRmdW5jdGlvbiggaSwgbmFtZSApIHtcblxuXHQvLyBIYW5kbGUgZXZlbnQgYmluZGluZ1xuXHRqUXVlcnkuZm5bIG5hbWUgXSA9IGZ1bmN0aW9uKCBkYXRhLCBmbiApIHtcblx0XHRyZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA+IDAgP1xuXHRcdFx0dGhpcy5vbiggbmFtZSwgbnVsbCwgZGF0YSwgZm4gKSA6XG5cdFx0XHR0aGlzLnRyaWdnZXIoIG5hbWUgKTtcblx0fTtcbn0gKTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRob3ZlcjogZnVuY3Rpb24oIGZuT3ZlciwgZm5PdXQgKSB7XG5cdFx0cmV0dXJuIHRoaXMubW91c2VlbnRlciggZm5PdmVyICkubW91c2VsZWF2ZSggZm5PdXQgfHwgZm5PdmVyICk7XG5cdH1cbn0gKTtcblxuXG5cblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXG5cdGJpbmQ6IGZ1bmN0aW9uKCB0eXBlcywgZGF0YSwgZm4gKSB7XG5cdFx0cmV0dXJuIHRoaXMub24oIHR5cGVzLCBudWxsLCBkYXRhLCBmbiApO1xuXHR9LFxuXHR1bmJpbmQ6IGZ1bmN0aW9uKCB0eXBlcywgZm4gKSB7XG5cdFx0cmV0dXJuIHRoaXMub2ZmKCB0eXBlcywgbnVsbCwgZm4gKTtcblx0fSxcblxuXHRkZWxlZ2F0ZTogZnVuY3Rpb24oIHNlbGVjdG9yLCB0eXBlcywgZGF0YSwgZm4gKSB7XG5cdFx0cmV0dXJuIHRoaXMub24oIHR5cGVzLCBzZWxlY3RvciwgZGF0YSwgZm4gKTtcblx0fSxcblx0dW5kZWxlZ2F0ZTogZnVuY3Rpb24oIHNlbGVjdG9yLCB0eXBlcywgZm4gKSB7XG5cblx0XHQvLyAoIG5hbWVzcGFjZSApIG9yICggc2VsZWN0b3IsIHR5cGVzIFssIGZuXSApXG5cdFx0cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPT09IDEgP1xuXHRcdFx0dGhpcy5vZmYoIHNlbGVjdG9yLCBcIioqXCIgKSA6XG5cdFx0XHR0aGlzLm9mZiggdHlwZXMsIHNlbGVjdG9yIHx8IFwiKipcIiwgZm4gKTtcblx0fVxufSApO1xuXG4vLyBCaW5kIGEgZnVuY3Rpb24gdG8gYSBjb250ZXh0LCBvcHRpb25hbGx5IHBhcnRpYWxseSBhcHBseWluZyBhbnlcbi8vIGFyZ3VtZW50cy5cbi8vIGpRdWVyeS5wcm94eSBpcyBkZXByZWNhdGVkIHRvIHByb21vdGUgc3RhbmRhcmRzIChzcGVjaWZpY2FsbHkgRnVuY3Rpb24jYmluZClcbi8vIEhvd2V2ZXIsIGl0IGlzIG5vdCBzbGF0ZWQgZm9yIHJlbW92YWwgYW55IHRpbWUgc29vblxualF1ZXJ5LnByb3h5ID0gZnVuY3Rpb24oIGZuLCBjb250ZXh0ICkge1xuXHR2YXIgdG1wLCBhcmdzLCBwcm94eTtcblxuXHRpZiAoIHR5cGVvZiBjb250ZXh0ID09PSBcInN0cmluZ1wiICkge1xuXHRcdHRtcCA9IGZuWyBjb250ZXh0IF07XG5cdFx0Y29udGV4dCA9IGZuO1xuXHRcdGZuID0gdG1wO1xuXHR9XG5cblx0Ly8gUXVpY2sgY2hlY2sgdG8gZGV0ZXJtaW5lIGlmIHRhcmdldCBpcyBjYWxsYWJsZSwgaW4gdGhlIHNwZWNcblx0Ly8gdGhpcyB0aHJvd3MgYSBUeXBlRXJyb3IsIGJ1dCB3ZSB3aWxsIGp1c3QgcmV0dXJuIHVuZGVmaW5lZC5cblx0aWYgKCAhaXNGdW5jdGlvbiggZm4gKSApIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cblx0Ly8gU2ltdWxhdGVkIGJpbmRcblx0YXJncyA9IHNsaWNlLmNhbGwoIGFyZ3VtZW50cywgMiApO1xuXHRwcm94eSA9IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBmbi5hcHBseSggY29udGV4dCB8fCB0aGlzLCBhcmdzLmNvbmNhdCggc2xpY2UuY2FsbCggYXJndW1lbnRzICkgKSApO1xuXHR9O1xuXG5cdC8vIFNldCB0aGUgZ3VpZCBvZiB1bmlxdWUgaGFuZGxlciB0byB0aGUgc2FtZSBvZiBvcmlnaW5hbCBoYW5kbGVyLCBzbyBpdCBjYW4gYmUgcmVtb3ZlZFxuXHRwcm94eS5ndWlkID0gZm4uZ3VpZCA9IGZuLmd1aWQgfHwgalF1ZXJ5Lmd1aWQrKztcblxuXHRyZXR1cm4gcHJveHk7XG59O1xuXG5qUXVlcnkuaG9sZFJlYWR5ID0gZnVuY3Rpb24oIGhvbGQgKSB7XG5cdGlmICggaG9sZCApIHtcblx0XHRqUXVlcnkucmVhZHlXYWl0Kys7XG5cdH0gZWxzZSB7XG5cdFx0alF1ZXJ5LnJlYWR5KCB0cnVlICk7XG5cdH1cbn07XG5qUXVlcnkuaXNBcnJheSA9IEFycmF5LmlzQXJyYXk7XG5qUXVlcnkucGFyc2VKU09OID0gSlNPTi5wYXJzZTtcbmpRdWVyeS5ub2RlTmFtZSA9IG5vZGVOYW1lO1xualF1ZXJ5LmlzRnVuY3Rpb24gPSBpc0Z1bmN0aW9uO1xualF1ZXJ5LmlzV2luZG93ID0gaXNXaW5kb3c7XG5qUXVlcnkuY2FtZWxDYXNlID0gY2FtZWxDYXNlO1xualF1ZXJ5LnR5cGUgPSB0b1R5cGU7XG5cbmpRdWVyeS5ub3cgPSBEYXRlLm5vdztcblxualF1ZXJ5LmlzTnVtZXJpYyA9IGZ1bmN0aW9uKCBvYmogKSB7XG5cblx0Ly8gQXMgb2YgalF1ZXJ5IDMuMCwgaXNOdW1lcmljIGlzIGxpbWl0ZWQgdG9cblx0Ly8gc3RyaW5ncyBhbmQgbnVtYmVycyAocHJpbWl0aXZlcyBvciBvYmplY3RzKVxuXHQvLyB0aGF0IGNhbiBiZSBjb2VyY2VkIHRvIGZpbml0ZSBudW1iZXJzIChnaC0yNjYyKVxuXHR2YXIgdHlwZSA9IGpRdWVyeS50eXBlKCBvYmogKTtcblx0cmV0dXJuICggdHlwZSA9PT0gXCJudW1iZXJcIiB8fCB0eXBlID09PSBcInN0cmluZ1wiICkgJiZcblxuXHRcdC8vIHBhcnNlRmxvYXQgTmFOcyBudW1lcmljLWNhc3QgZmFsc2UgcG9zaXRpdmVzIChcIlwiKVxuXHRcdC8vIC4uLmJ1dCBtaXNpbnRlcnByZXRzIGxlYWRpbmctbnVtYmVyIHN0cmluZ3MsIHBhcnRpY3VsYXJseSBoZXggbGl0ZXJhbHMgKFwiMHguLi5cIilcblx0XHQvLyBzdWJ0cmFjdGlvbiBmb3JjZXMgaW5maW5pdGllcyB0byBOYU5cblx0XHQhaXNOYU4oIG9iaiAtIHBhcnNlRmxvYXQoIG9iaiApICk7XG59O1xuXG5cblxuXG4vLyBSZWdpc3RlciBhcyBhIG5hbWVkIEFNRCBtb2R1bGUsIHNpbmNlIGpRdWVyeSBjYW4gYmUgY29uY2F0ZW5hdGVkIHdpdGggb3RoZXJcbi8vIGZpbGVzIHRoYXQgbWF5IHVzZSBkZWZpbmUsIGJ1dCBub3QgdmlhIGEgcHJvcGVyIGNvbmNhdGVuYXRpb24gc2NyaXB0IHRoYXRcbi8vIHVuZGVyc3RhbmRzIGFub255bW91cyBBTUQgbW9kdWxlcy4gQSBuYW1lZCBBTUQgaXMgc2FmZXN0IGFuZCBtb3N0IHJvYnVzdFxuLy8gd2F5IHRvIHJlZ2lzdGVyLiBMb3dlcmNhc2UganF1ZXJ5IGlzIHVzZWQgYmVjYXVzZSBBTUQgbW9kdWxlIG5hbWVzIGFyZVxuLy8gZGVyaXZlZCBmcm9tIGZpbGUgbmFtZXMsIGFuZCBqUXVlcnkgaXMgbm9ybWFsbHkgZGVsaXZlcmVkIGluIGEgbG93ZXJjYXNlXG4vLyBmaWxlIG5hbWUuIERvIHRoaXMgYWZ0ZXIgY3JlYXRpbmcgdGhlIGdsb2JhbCBzbyB0aGF0IGlmIGFuIEFNRCBtb2R1bGUgd2FudHNcbi8vIHRvIGNhbGwgbm9Db25mbGljdCB0byBoaWRlIHRoaXMgdmVyc2lvbiBvZiBqUXVlcnksIGl0IHdpbGwgd29yay5cblxuLy8gTm90ZSB0aGF0IGZvciBtYXhpbXVtIHBvcnRhYmlsaXR5LCBsaWJyYXJpZXMgdGhhdCBhcmUgbm90IGpRdWVyeSBzaG91bGRcbi8vIGRlY2xhcmUgdGhlbXNlbHZlcyBhcyBhbm9ueW1vdXMgbW9kdWxlcywgYW5kIGF2b2lkIHNldHRpbmcgYSBnbG9iYWwgaWYgYW5cbi8vIEFNRCBsb2FkZXIgaXMgcHJlc2VudC4galF1ZXJ5IGlzIGEgc3BlY2lhbCBjYXNlLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlXG4vLyBodHRwczovL2dpdGh1Yi5jb20vanJidXJrZS9yZXF1aXJlanMvd2lraS9VcGRhdGluZy1leGlzdGluZy1saWJyYXJpZXMjd2lraS1hbm9uXG5cbmlmICggdHlwZW9mIGRlZmluZSA9PT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQgKSB7XG5cdGRlZmluZSggXCJqcXVlcnlcIiwgW10sIGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBqUXVlcnk7XG5cdH0gKTtcbn1cblxuXG5cblxudmFyXG5cblx0Ly8gTWFwIG92ZXIgalF1ZXJ5IGluIGNhc2Ugb2Ygb3ZlcndyaXRlXG5cdF9qUXVlcnkgPSB3aW5kb3cualF1ZXJ5LFxuXG5cdC8vIE1hcCBvdmVyIHRoZSAkIGluIGNhc2Ugb2Ygb3ZlcndyaXRlXG5cdF8kID0gd2luZG93LiQ7XG5cbmpRdWVyeS5ub0NvbmZsaWN0ID0gZnVuY3Rpb24oIGRlZXAgKSB7XG5cdGlmICggd2luZG93LiQgPT09IGpRdWVyeSApIHtcblx0XHR3aW5kb3cuJCA9IF8kO1xuXHR9XG5cblx0aWYgKCBkZWVwICYmIHdpbmRvdy5qUXVlcnkgPT09IGpRdWVyeSApIHtcblx0XHR3aW5kb3cualF1ZXJ5ID0gX2pRdWVyeTtcblx0fVxuXG5cdHJldHVybiBqUXVlcnk7XG59O1xuXG4vLyBFeHBvc2UgalF1ZXJ5IGFuZCAkIGlkZW50aWZpZXJzLCBldmVuIGluIEFNRFxuLy8gKCM3MTAyI2NvbW1lbnQ6MTAsIGh0dHBzOi8vZ2l0aHViLmNvbS9qcXVlcnkvanF1ZXJ5L3B1bGwvNTU3KVxuLy8gYW5kIENvbW1vbkpTIGZvciBicm93c2VyIGVtdWxhdG9ycyAoIzEzNTY2KVxuaWYgKCAhbm9HbG9iYWwgKSB7XG5cdHdpbmRvdy5qUXVlcnkgPSB3aW5kb3cuJCA9IGpRdWVyeTtcbn1cblxuXG5cblxucmV0dXJuIGpRdWVyeTtcbn0gKTtcbiIsIi8qIVxuICogSmF2YVNjcmlwdCBDb29raWUgdjIuMi4xXG4gKiBodHRwczovL2dpdGh1Yi5jb20vanMtY29va2llL2pzLWNvb2tpZVxuICpcbiAqIENvcHlyaWdodCAyMDA2LCAyMDE1IEtsYXVzIEhhcnRsICYgRmFnbmVyIEJyYWNrXG4gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2VcbiAqL1xuOyhmdW5jdGlvbiAoZmFjdG9yeSkge1xuXHR2YXIgcmVnaXN0ZXJlZEluTW9kdWxlTG9hZGVyO1xuXHRpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7XG5cdFx0ZGVmaW5lKGZhY3RvcnkpO1xuXHRcdHJlZ2lzdGVyZWRJbk1vZHVsZUxvYWRlciA9IHRydWU7XG5cdH1cblx0aWYgKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jykge1xuXHRcdG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpO1xuXHRcdHJlZ2lzdGVyZWRJbk1vZHVsZUxvYWRlciA9IHRydWU7XG5cdH1cblx0aWYgKCFyZWdpc3RlcmVkSW5Nb2R1bGVMb2FkZXIpIHtcblx0XHR2YXIgT2xkQ29va2llcyA9IHdpbmRvdy5Db29raWVzO1xuXHRcdHZhciBhcGkgPSB3aW5kb3cuQ29va2llcyA9IGZhY3RvcnkoKTtcblx0XHRhcGkubm9Db25mbGljdCA9IGZ1bmN0aW9uICgpIHtcblx0XHRcdHdpbmRvdy5Db29raWVzID0gT2xkQ29va2llcztcblx0XHRcdHJldHVybiBhcGk7XG5cdFx0fTtcblx0fVxufShmdW5jdGlvbiAoKSB7XG5cdGZ1bmN0aW9uIGV4dGVuZCAoKSB7XG5cdFx0dmFyIGkgPSAwO1xuXHRcdHZhciByZXN1bHQgPSB7fTtcblx0XHRmb3IgKDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuXHRcdFx0dmFyIGF0dHJpYnV0ZXMgPSBhcmd1bWVudHNbIGkgXTtcblx0XHRcdGZvciAodmFyIGtleSBpbiBhdHRyaWJ1dGVzKSB7XG5cdFx0XHRcdHJlc3VsdFtrZXldID0gYXR0cmlidXRlc1trZXldO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0ZnVuY3Rpb24gZGVjb2RlIChzKSB7XG5cdFx0cmV0dXJuIHMucmVwbGFjZSgvKCVbMC05QS1aXXsyfSkrL2csIGRlY29kZVVSSUNvbXBvbmVudCk7XG5cdH1cblxuXHRmdW5jdGlvbiBpbml0IChjb252ZXJ0ZXIpIHtcblx0XHRmdW5jdGlvbiBhcGkoKSB7fVxuXG5cdFx0ZnVuY3Rpb24gc2V0IChrZXksIHZhbHVlLCBhdHRyaWJ1dGVzKSB7XG5cdFx0XHRpZiAodHlwZW9mIGRvY3VtZW50ID09PSAndW5kZWZpbmVkJykge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGF0dHJpYnV0ZXMgPSBleHRlbmQoe1xuXHRcdFx0XHRwYXRoOiAnLydcblx0XHRcdH0sIGFwaS5kZWZhdWx0cywgYXR0cmlidXRlcyk7XG5cblx0XHRcdGlmICh0eXBlb2YgYXR0cmlidXRlcy5leHBpcmVzID09PSAnbnVtYmVyJykge1xuXHRcdFx0XHRhdHRyaWJ1dGVzLmV4cGlyZXMgPSBuZXcgRGF0ZShuZXcgRGF0ZSgpICogMSArIGF0dHJpYnV0ZXMuZXhwaXJlcyAqIDg2NGUrNSk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFdlJ3JlIHVzaW5nIFwiZXhwaXJlc1wiIGJlY2F1c2UgXCJtYXgtYWdlXCIgaXMgbm90IHN1cHBvcnRlZCBieSBJRVxuXHRcdFx0YXR0cmlidXRlcy5leHBpcmVzID0gYXR0cmlidXRlcy5leHBpcmVzID8gYXR0cmlidXRlcy5leHBpcmVzLnRvVVRDU3RyaW5nKCkgOiAnJztcblxuXHRcdFx0dHJ5IHtcblx0XHRcdFx0dmFyIHJlc3VsdCA9IEpTT04uc3RyaW5naWZ5KHZhbHVlKTtcblx0XHRcdFx0aWYgKC9eW1xce1xcW10vLnRlc3QocmVzdWx0KSkge1xuXHRcdFx0XHRcdHZhbHVlID0gcmVzdWx0O1xuXHRcdFx0XHR9XG5cdFx0XHR9IGNhdGNoIChlKSB7fVxuXG5cdFx0XHR2YWx1ZSA9IGNvbnZlcnRlci53cml0ZSA/XG5cdFx0XHRcdGNvbnZlcnRlci53cml0ZSh2YWx1ZSwga2V5KSA6XG5cdFx0XHRcdGVuY29kZVVSSUNvbXBvbmVudChTdHJpbmcodmFsdWUpKVxuXHRcdFx0XHRcdC5yZXBsYWNlKC8lKDIzfDI0fDI2fDJCfDNBfDNDfDNFfDNEfDJGfDNGfDQwfDVCfDVEfDVFfDYwfDdCfDdEfDdDKS9nLCBkZWNvZGVVUklDb21wb25lbnQpO1xuXG5cdFx0XHRrZXkgPSBlbmNvZGVVUklDb21wb25lbnQoU3RyaW5nKGtleSkpXG5cdFx0XHRcdC5yZXBsYWNlKC8lKDIzfDI0fDI2fDJCfDVFfDYwfDdDKS9nLCBkZWNvZGVVUklDb21wb25lbnQpXG5cdFx0XHRcdC5yZXBsYWNlKC9bXFwoXFwpXS9nLCBlc2NhcGUpO1xuXG5cdFx0XHR2YXIgc3RyaW5naWZpZWRBdHRyaWJ1dGVzID0gJyc7XG5cdFx0XHRmb3IgKHZhciBhdHRyaWJ1dGVOYW1lIGluIGF0dHJpYnV0ZXMpIHtcblx0XHRcdFx0aWYgKCFhdHRyaWJ1dGVzW2F0dHJpYnV0ZU5hbWVdKSB7XG5cdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdH1cblx0XHRcdFx0c3RyaW5naWZpZWRBdHRyaWJ1dGVzICs9ICc7ICcgKyBhdHRyaWJ1dGVOYW1lO1xuXHRcdFx0XHRpZiAoYXR0cmlidXRlc1thdHRyaWJ1dGVOYW1lXSA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gQ29uc2lkZXJzIFJGQyA2MjY1IHNlY3Rpb24gNS4yOlxuXHRcdFx0XHQvLyAuLi5cblx0XHRcdFx0Ly8gMy4gIElmIHRoZSByZW1haW5pbmcgdW5wYXJzZWQtYXR0cmlidXRlcyBjb250YWlucyBhICV4M0IgKFwiO1wiKVxuXHRcdFx0XHQvLyAgICAgY2hhcmFjdGVyOlxuXHRcdFx0XHQvLyBDb25zdW1lIHRoZSBjaGFyYWN0ZXJzIG9mIHRoZSB1bnBhcnNlZC1hdHRyaWJ1dGVzIHVwIHRvLFxuXHRcdFx0XHQvLyBub3QgaW5jbHVkaW5nLCB0aGUgZmlyc3QgJXgzQiAoXCI7XCIpIGNoYXJhY3Rlci5cblx0XHRcdFx0Ly8gLi4uXG5cdFx0XHRcdHN0cmluZ2lmaWVkQXR0cmlidXRlcyArPSAnPScgKyBhdHRyaWJ1dGVzW2F0dHJpYnV0ZU5hbWVdLnNwbGl0KCc7JylbMF07XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiAoZG9jdW1lbnQuY29va2llID0ga2V5ICsgJz0nICsgdmFsdWUgKyBzdHJpbmdpZmllZEF0dHJpYnV0ZXMpO1xuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIGdldCAoa2V5LCBqc29uKSB7XG5cdFx0XHRpZiAodHlwZW9mIGRvY3VtZW50ID09PSAndW5kZWZpbmVkJykge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdHZhciBqYXIgPSB7fTtcblx0XHRcdC8vIFRvIHByZXZlbnQgdGhlIGZvciBsb29wIGluIHRoZSBmaXJzdCBwbGFjZSBhc3NpZ24gYW4gZW1wdHkgYXJyYXlcblx0XHRcdC8vIGluIGNhc2UgdGhlcmUgYXJlIG5vIGNvb2tpZXMgYXQgYWxsLlxuXHRcdFx0dmFyIGNvb2tpZXMgPSBkb2N1bWVudC5jb29raWUgPyBkb2N1bWVudC5jb29raWUuc3BsaXQoJzsgJykgOiBbXTtcblx0XHRcdHZhciBpID0gMDtcblxuXHRcdFx0Zm9yICg7IGkgPCBjb29raWVzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdHZhciBwYXJ0cyA9IGNvb2tpZXNbaV0uc3BsaXQoJz0nKTtcblx0XHRcdFx0dmFyIGNvb2tpZSA9IHBhcnRzLnNsaWNlKDEpLmpvaW4oJz0nKTtcblxuXHRcdFx0XHRpZiAoIWpzb24gJiYgY29va2llLmNoYXJBdCgwKSA9PT0gJ1wiJykge1xuXHRcdFx0XHRcdGNvb2tpZSA9IGNvb2tpZS5zbGljZSgxLCAtMSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdHZhciBuYW1lID0gZGVjb2RlKHBhcnRzWzBdKTtcblx0XHRcdFx0XHRjb29raWUgPSAoY29udmVydGVyLnJlYWQgfHwgY29udmVydGVyKShjb29raWUsIG5hbWUpIHx8XG5cdFx0XHRcdFx0XHRkZWNvZGUoY29va2llKTtcblxuXHRcdFx0XHRcdGlmIChqc29uKSB7XG5cdFx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0XHRjb29raWUgPSBKU09OLnBhcnNlKGNvb2tpZSk7XG5cdFx0XHRcdFx0XHR9IGNhdGNoIChlKSB7fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGphcltuYW1lXSA9IGNvb2tpZTtcblxuXHRcdFx0XHRcdGlmIChrZXkgPT09IG5hbWUpIHtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBjYXRjaCAoZSkge31cblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGtleSA/IGphcltrZXldIDogamFyO1xuXHRcdH1cblxuXHRcdGFwaS5zZXQgPSBzZXQ7XG5cdFx0YXBpLmdldCA9IGZ1bmN0aW9uIChrZXkpIHtcblx0XHRcdHJldHVybiBnZXQoa2V5LCBmYWxzZSAvKiByZWFkIGFzIHJhdyAqLyk7XG5cdFx0fTtcblx0XHRhcGkuZ2V0SlNPTiA9IGZ1bmN0aW9uIChrZXkpIHtcblx0XHRcdHJldHVybiBnZXQoa2V5LCB0cnVlIC8qIHJlYWQgYXMganNvbiAqLyk7XG5cdFx0fTtcblx0XHRhcGkucmVtb3ZlID0gZnVuY3Rpb24gKGtleSwgYXR0cmlidXRlcykge1xuXHRcdFx0c2V0KGtleSwgJycsIGV4dGVuZChhdHRyaWJ1dGVzLCB7XG5cdFx0XHRcdGV4cGlyZXM6IC0xXG5cdFx0XHR9KSk7XG5cdFx0fTtcblxuXHRcdGFwaS5kZWZhdWx0cyA9IHt9O1xuXG5cdFx0YXBpLndpdGhDb252ZXJ0ZXIgPSBpbml0O1xuXG5cdFx0cmV0dXJuIGFwaTtcblx0fVxuXG5cdHJldHVybiBpbml0KGZ1bmN0aW9uICgpIHt9KTtcbn0pKTtcbiIsIi8qISBNYWduaWZpYyBQb3B1cCAtIHYxLjEuMCAtIDIwMTYtMDItMjBcbiogaHR0cDovL2RpbXNlbWVub3YuY29tL3BsdWdpbnMvbWFnbmlmaWMtcG9wdXAvXG4qIENvcHlyaWdodCAoYykgMjAxNiBEbWl0cnkgU2VtZW5vdjsgKi9cbjsoZnVuY3Rpb24gKGZhY3RvcnkpIHsgXG5pZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7IFxuIC8vIEFNRC4gUmVnaXN0ZXIgYXMgYW4gYW5vbnltb3VzIG1vZHVsZS4gXG4gZGVmaW5lKFsnanF1ZXJ5J10sIGZhY3RvcnkpOyBcbiB9IGVsc2UgaWYgKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JykgeyBcbiAvLyBOb2RlL0NvbW1vbkpTIFxuIGZhY3RvcnkocmVxdWlyZSgnanF1ZXJ5JykpOyBcbiB9IGVsc2UgeyBcbiAvLyBCcm93c2VyIGdsb2JhbHMgXG4gZmFjdG9yeSh3aW5kb3cualF1ZXJ5IHx8IHdpbmRvdy5aZXB0byk7IFxuIH0gXG4gfShmdW5jdGlvbigkKSB7IFxuXG4vKj4+Y29yZSovXG4vKipcbiAqIFxuICogTWFnbmlmaWMgUG9wdXAgQ29yZSBKUyBmaWxlXG4gKiBcbiAqL1xuXG5cbi8qKlxuICogUHJpdmF0ZSBzdGF0aWMgY29uc3RhbnRzXG4gKi9cbnZhciBDTE9TRV9FVkVOVCA9ICdDbG9zZScsXG5cdEJFRk9SRV9DTE9TRV9FVkVOVCA9ICdCZWZvcmVDbG9zZScsXG5cdEFGVEVSX0NMT1NFX0VWRU5UID0gJ0FmdGVyQ2xvc2UnLFxuXHRCRUZPUkVfQVBQRU5EX0VWRU5UID0gJ0JlZm9yZUFwcGVuZCcsXG5cdE1BUktVUF9QQVJTRV9FVkVOVCA9ICdNYXJrdXBQYXJzZScsXG5cdE9QRU5fRVZFTlQgPSAnT3BlbicsXG5cdENIQU5HRV9FVkVOVCA9ICdDaGFuZ2UnLFxuXHROUyA9ICdtZnAnLFxuXHRFVkVOVF9OUyA9ICcuJyArIE5TLFxuXHRSRUFEWV9DTEFTUyA9ICdtZnAtcmVhZHknLFxuXHRSRU1PVklOR19DTEFTUyA9ICdtZnAtcmVtb3ZpbmcnLFxuXHRQUkVWRU5UX0NMT1NFX0NMQVNTID0gJ21mcC1wcmV2ZW50LWNsb3NlJztcblxuXG4vKipcbiAqIFByaXZhdGUgdmFycyBcbiAqL1xuLypqc2hpbnQgLVcwNzkgKi9cbnZhciBtZnAsIC8vIEFzIHdlIGhhdmUgb25seSBvbmUgaW5zdGFuY2Ugb2YgTWFnbmlmaWNQb3B1cCBvYmplY3QsIHdlIGRlZmluZSBpdCBsb2NhbGx5IHRvIG5vdCB0byB1c2UgJ3RoaXMnXG5cdE1hZ25pZmljUG9wdXAgPSBmdW5jdGlvbigpe30sXG5cdF9pc0pRID0gISEod2luZG93LmpRdWVyeSksXG5cdF9wcmV2U3RhdHVzLFxuXHRfd2luZG93ID0gJCh3aW5kb3cpLFxuXHRfZG9jdW1lbnQsXG5cdF9wcmV2Q29udGVudFR5cGUsXG5cdF93cmFwQ2xhc3Nlcyxcblx0X2N1cnJQb3B1cFR5cGU7XG5cblxuLyoqXG4gKiBQcml2YXRlIGZ1bmN0aW9uc1xuICovXG52YXIgX21mcE9uID0gZnVuY3Rpb24obmFtZSwgZikge1xuXHRcdG1mcC5ldi5vbihOUyArIG5hbWUgKyBFVkVOVF9OUywgZik7XG5cdH0sXG5cdF9nZXRFbCA9IGZ1bmN0aW9uKGNsYXNzTmFtZSwgYXBwZW5kVG8sIGh0bWwsIHJhdykge1xuXHRcdHZhciBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuXHRcdGVsLmNsYXNzTmFtZSA9ICdtZnAtJytjbGFzc05hbWU7XG5cdFx0aWYoaHRtbCkge1xuXHRcdFx0ZWwuaW5uZXJIVE1MID0gaHRtbDtcblx0XHR9XG5cdFx0aWYoIXJhdykge1xuXHRcdFx0ZWwgPSAkKGVsKTtcblx0XHRcdGlmKGFwcGVuZFRvKSB7XG5cdFx0XHRcdGVsLmFwcGVuZFRvKGFwcGVuZFRvKTtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYoYXBwZW5kVG8pIHtcblx0XHRcdGFwcGVuZFRvLmFwcGVuZENoaWxkKGVsKTtcblx0XHR9XG5cdFx0cmV0dXJuIGVsO1xuXHR9LFxuXHRfbWZwVHJpZ2dlciA9IGZ1bmN0aW9uKGUsIGRhdGEpIHtcblx0XHRtZnAuZXYudHJpZ2dlckhhbmRsZXIoTlMgKyBlLCBkYXRhKTtcblxuXHRcdGlmKG1mcC5zdC5jYWxsYmFja3MpIHtcblx0XHRcdC8vIGNvbnZlcnRzIFwibWZwRXZlbnROYW1lXCIgdG8gXCJldmVudE5hbWVcIiBjYWxsYmFjayBhbmQgdHJpZ2dlcnMgaXQgaWYgaXQncyBwcmVzZW50XG5cdFx0XHRlID0gZS5jaGFyQXQoMCkudG9Mb3dlckNhc2UoKSArIGUuc2xpY2UoMSk7XG5cdFx0XHRpZihtZnAuc3QuY2FsbGJhY2tzW2VdKSB7XG5cdFx0XHRcdG1mcC5zdC5jYWxsYmFja3NbZV0uYXBwbHkobWZwLCAkLmlzQXJyYXkoZGF0YSkgPyBkYXRhIDogW2RhdGFdKTtcblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cdF9nZXRDbG9zZUJ0biA9IGZ1bmN0aW9uKHR5cGUpIHtcblx0XHRpZih0eXBlICE9PSBfY3VyclBvcHVwVHlwZSB8fCAhbWZwLmN1cnJUZW1wbGF0ZS5jbG9zZUJ0bikge1xuXHRcdFx0bWZwLmN1cnJUZW1wbGF0ZS5jbG9zZUJ0biA9ICQoIG1mcC5zdC5jbG9zZU1hcmt1cC5yZXBsYWNlKCcldGl0bGUlJywgbWZwLnN0LnRDbG9zZSApICk7XG5cdFx0XHRfY3VyclBvcHVwVHlwZSA9IHR5cGU7XG5cdFx0fVxuXHRcdHJldHVybiBtZnAuY3VyclRlbXBsYXRlLmNsb3NlQnRuO1xuXHR9LFxuXHQvLyBJbml0aWFsaXplIE1hZ25pZmljIFBvcHVwIG9ubHkgd2hlbiBjYWxsZWQgYXQgbGVhc3Qgb25jZVxuXHRfY2hlY2tJbnN0YW5jZSA9IGZ1bmN0aW9uKCkge1xuXHRcdGlmKCEkLm1hZ25pZmljUG9wdXAuaW5zdGFuY2UpIHtcblx0XHRcdC8qanNoaW50IC1XMDIwICovXG5cdFx0XHRtZnAgPSBuZXcgTWFnbmlmaWNQb3B1cCgpO1xuXHRcdFx0bWZwLmluaXQoKTtcblx0XHRcdCQubWFnbmlmaWNQb3B1cC5pbnN0YW5jZSA9IG1mcDtcblx0XHR9XG5cdH0sXG5cdC8vIENTUyB0cmFuc2l0aW9uIGRldGVjdGlvbiwgaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy83MjY0ODk5L2RldGVjdC1jc3MtdHJhbnNpdGlvbnMtdXNpbmctamF2YXNjcmlwdC1hbmQtd2l0aG91dC1tb2Rlcm5penJcblx0c3VwcG9ydHNUcmFuc2l0aW9ucyA9IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgncCcpLnN0eWxlLCAvLyAncycgZm9yIHN0eWxlLiBiZXR0ZXIgdG8gY3JlYXRlIGFuIGVsZW1lbnQgaWYgYm9keSB5ZXQgdG8gZXhpc3Rcblx0XHRcdHYgPSBbJ21zJywnTycsJ01veicsJ1dlYmtpdCddOyAvLyAndicgZm9yIHZlbmRvclxuXG5cdFx0aWYoIHNbJ3RyYW5zaXRpb24nXSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0cmV0dXJuIHRydWU7IFxuXHRcdH1cblx0XHRcdFxuXHRcdHdoaWxlKCB2Lmxlbmd0aCApIHtcblx0XHRcdGlmKCB2LnBvcCgpICsgJ1RyYW5zaXRpb24nIGluIHMgKSB7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRcdFx0XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9O1xuXG5cblxuLyoqXG4gKiBQdWJsaWMgZnVuY3Rpb25zXG4gKi9cbk1hZ25pZmljUG9wdXAucHJvdG90eXBlID0ge1xuXG5cdGNvbnN0cnVjdG9yOiBNYWduaWZpY1BvcHVwLFxuXG5cdC8qKlxuXHQgKiBJbml0aWFsaXplcyBNYWduaWZpYyBQb3B1cCBwbHVnaW4uIFxuXHQgKiBUaGlzIGZ1bmN0aW9uIGlzIHRyaWdnZXJlZCBvbmx5IG9uY2Ugd2hlbiAkLmZuLm1hZ25pZmljUG9wdXAgb3IgJC5tYWduaWZpY1BvcHVwIGlzIGV4ZWN1dGVkXG5cdCAqL1xuXHRpbml0OiBmdW5jdGlvbigpIHtcblx0XHR2YXIgYXBwVmVyc2lvbiA9IG5hdmlnYXRvci5hcHBWZXJzaW9uO1xuXHRcdG1mcC5pc0xvd0lFID0gbWZwLmlzSUU4ID0gZG9jdW1lbnQuYWxsICYmICFkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyO1xuXHRcdG1mcC5pc0FuZHJvaWQgPSAoL2FuZHJvaWQvZ2kpLnRlc3QoYXBwVmVyc2lvbik7XG5cdFx0bWZwLmlzSU9TID0gKC9pcGhvbmV8aXBhZHxpcG9kL2dpKS50ZXN0KGFwcFZlcnNpb24pO1xuXHRcdG1mcC5zdXBwb3J0c1RyYW5zaXRpb24gPSBzdXBwb3J0c1RyYW5zaXRpb25zKCk7XG5cblx0XHQvLyBXZSBkaXNhYmxlIGZpeGVkIHBvc2l0aW9uZWQgbGlnaHRib3ggb24gZGV2aWNlcyB0aGF0IGRvbid0IGhhbmRsZSBpdCBuaWNlbHkuXG5cdFx0Ly8gSWYgeW91IGtub3cgYSBiZXR0ZXIgd2F5IG9mIGRldGVjdGluZyB0aGlzIC0gbGV0IG1lIGtub3cuXG5cdFx0bWZwLnByb2JhYmx5TW9iaWxlID0gKG1mcC5pc0FuZHJvaWQgfHwgbWZwLmlzSU9TIHx8IC8oT3BlcmEgTWluaSl8S2luZGxlfHdlYk9TfEJsYWNrQmVycnl8KE9wZXJhIE1vYmkpfChXaW5kb3dzIFBob25lKXxJRU1vYmlsZS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkgKTtcblx0XHRfZG9jdW1lbnQgPSAkKGRvY3VtZW50KTtcblxuXHRcdG1mcC5wb3B1cHNDYWNoZSA9IHt9O1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBPcGVucyBwb3B1cFxuXHQgKiBAcGFyYW0gIGRhdGEgW2Rlc2NyaXB0aW9uXVxuXHQgKi9cblx0b3BlbjogZnVuY3Rpb24oZGF0YSkge1xuXG5cdFx0dmFyIGk7XG5cblx0XHRpZihkYXRhLmlzT2JqID09PSBmYWxzZSkgeyBcblx0XHRcdC8vIGNvbnZlcnQgalF1ZXJ5IGNvbGxlY3Rpb24gdG8gYXJyYXkgdG8gYXZvaWQgY29uZmxpY3RzIGxhdGVyXG5cdFx0XHRtZnAuaXRlbXMgPSBkYXRhLml0ZW1zLnRvQXJyYXkoKTtcblxuXHRcdFx0bWZwLmluZGV4ID0gMDtcblx0XHRcdHZhciBpdGVtcyA9IGRhdGEuaXRlbXMsXG5cdFx0XHRcdGl0ZW07XG5cdFx0XHRmb3IoaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRpdGVtID0gaXRlbXNbaV07XG5cdFx0XHRcdGlmKGl0ZW0ucGFyc2VkKSB7XG5cdFx0XHRcdFx0aXRlbSA9IGl0ZW0uZWxbMF07XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYoaXRlbSA9PT0gZGF0YS5lbFswXSkge1xuXHRcdFx0XHRcdG1mcC5pbmRleCA9IGk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0bWZwLml0ZW1zID0gJC5pc0FycmF5KGRhdGEuaXRlbXMpID8gZGF0YS5pdGVtcyA6IFtkYXRhLml0ZW1zXTtcblx0XHRcdG1mcC5pbmRleCA9IGRhdGEuaW5kZXggfHwgMDtcblx0XHR9XG5cblx0XHQvLyBpZiBwb3B1cCBpcyBhbHJlYWR5IG9wZW5lZCAtIHdlIGp1c3QgdXBkYXRlIHRoZSBjb250ZW50XG5cdFx0aWYobWZwLmlzT3Blbikge1xuXHRcdFx0bWZwLnVwZGF0ZUl0ZW1IVE1MKCk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdFxuXHRcdG1mcC50eXBlcyA9IFtdOyBcblx0XHRfd3JhcENsYXNzZXMgPSAnJztcblx0XHRpZihkYXRhLm1haW5FbCAmJiBkYXRhLm1haW5FbC5sZW5ndGgpIHtcblx0XHRcdG1mcC5ldiA9IGRhdGEubWFpbkVsLmVxKDApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRtZnAuZXYgPSBfZG9jdW1lbnQ7XG5cdFx0fVxuXG5cdFx0aWYoZGF0YS5rZXkpIHtcblx0XHRcdGlmKCFtZnAucG9wdXBzQ2FjaGVbZGF0YS5rZXldKSB7XG5cdFx0XHRcdG1mcC5wb3B1cHNDYWNoZVtkYXRhLmtleV0gPSB7fTtcblx0XHRcdH1cblx0XHRcdG1mcC5jdXJyVGVtcGxhdGUgPSBtZnAucG9wdXBzQ2FjaGVbZGF0YS5rZXldO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRtZnAuY3VyclRlbXBsYXRlID0ge307XG5cdFx0fVxuXG5cblxuXHRcdG1mcC5zdCA9ICQuZXh0ZW5kKHRydWUsIHt9LCAkLm1hZ25pZmljUG9wdXAuZGVmYXVsdHMsIGRhdGEgKTsgXG5cdFx0bWZwLmZpeGVkQ29udGVudFBvcyA9IG1mcC5zdC5maXhlZENvbnRlbnRQb3MgPT09ICdhdXRvJyA/ICFtZnAucHJvYmFibHlNb2JpbGUgOiBtZnAuc3QuZml4ZWRDb250ZW50UG9zO1xuXG5cdFx0aWYobWZwLnN0Lm1vZGFsKSB7XG5cdFx0XHRtZnAuc3QuY2xvc2VPbkNvbnRlbnRDbGljayA9IGZhbHNlO1xuXHRcdFx0bWZwLnN0LmNsb3NlT25CZ0NsaWNrID0gZmFsc2U7XG5cdFx0XHRtZnAuc3Quc2hvd0Nsb3NlQnRuID0gZmFsc2U7XG5cdFx0XHRtZnAuc3QuZW5hYmxlRXNjYXBlS2V5ID0gZmFsc2U7XG5cdFx0fVxuXHRcdFxuXG5cdFx0Ly8gQnVpbGRpbmcgbWFya3VwXG5cdFx0Ly8gbWFpbiBjb250YWluZXJzIGFyZSBjcmVhdGVkIG9ubHkgb25jZVxuXHRcdGlmKCFtZnAuYmdPdmVybGF5KSB7XG5cblx0XHRcdC8vIERhcmsgb3ZlcmxheVxuXHRcdFx0bWZwLmJnT3ZlcmxheSA9IF9nZXRFbCgnYmcnKS5vbignY2xpY2snK0VWRU5UX05TLCBmdW5jdGlvbigpIHtcblx0XHRcdFx0bWZwLmNsb3NlKCk7XG5cdFx0XHR9KTtcblxuXHRcdFx0bWZwLndyYXAgPSBfZ2V0RWwoJ3dyYXAnKS5hdHRyKCd0YWJpbmRleCcsIC0xKS5vbignY2xpY2snK0VWRU5UX05TLCBmdW5jdGlvbihlKSB7XG5cdFx0XHRcdGlmKG1mcC5fY2hlY2tJZkNsb3NlKGUudGFyZ2V0KSkge1xuXHRcdFx0XHRcdG1mcC5jbG9zZSgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblxuXHRcdFx0bWZwLmNvbnRhaW5lciA9IF9nZXRFbCgnY29udGFpbmVyJywgbWZwLndyYXApO1xuXHRcdH1cblxuXHRcdG1mcC5jb250ZW50Q29udGFpbmVyID0gX2dldEVsKCdjb250ZW50Jyk7XG5cdFx0aWYobWZwLnN0LnByZWxvYWRlcikge1xuXHRcdFx0bWZwLnByZWxvYWRlciA9IF9nZXRFbCgncHJlbG9hZGVyJywgbWZwLmNvbnRhaW5lciwgbWZwLnN0LnRMb2FkaW5nKTtcblx0XHR9XG5cblxuXHRcdC8vIEluaXRpYWxpemluZyBtb2R1bGVzXG5cdFx0dmFyIG1vZHVsZXMgPSAkLm1hZ25pZmljUG9wdXAubW9kdWxlcztcblx0XHRmb3IoaSA9IDA7IGkgPCBtb2R1bGVzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHR2YXIgbiA9IG1vZHVsZXNbaV07XG5cdFx0XHRuID0gbi5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIG4uc2xpY2UoMSk7XG5cdFx0XHRtZnBbJ2luaXQnK25dLmNhbGwobWZwKTtcblx0XHR9XG5cdFx0X21mcFRyaWdnZXIoJ0JlZm9yZU9wZW4nKTtcblxuXG5cdFx0aWYobWZwLnN0LnNob3dDbG9zZUJ0bikge1xuXHRcdFx0Ly8gQ2xvc2UgYnV0dG9uXG5cdFx0XHRpZighbWZwLnN0LmNsb3NlQnRuSW5zaWRlKSB7XG5cdFx0XHRcdG1mcC53cmFwLmFwcGVuZCggX2dldENsb3NlQnRuKCkgKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdF9tZnBPbihNQVJLVVBfUEFSU0VfRVZFTlQsIGZ1bmN0aW9uKGUsIHRlbXBsYXRlLCB2YWx1ZXMsIGl0ZW0pIHtcblx0XHRcdFx0XHR2YWx1ZXMuY2xvc2VfcmVwbGFjZVdpdGggPSBfZ2V0Q2xvc2VCdG4oaXRlbS50eXBlKTtcblx0XHRcdFx0fSk7XG5cdFx0XHRcdF93cmFwQ2xhc3NlcyArPSAnIG1mcC1jbG9zZS1idG4taW4nO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmKG1mcC5zdC5hbGlnblRvcCkge1xuXHRcdFx0X3dyYXBDbGFzc2VzICs9ICcgbWZwLWFsaWduLXRvcCc7XG5cdFx0fVxuXG5cdFxuXG5cdFx0aWYobWZwLmZpeGVkQ29udGVudFBvcykge1xuXHRcdFx0bWZwLndyYXAuY3NzKHtcblx0XHRcdFx0b3ZlcmZsb3c6IG1mcC5zdC5vdmVyZmxvd1ksXG5cdFx0XHRcdG92ZXJmbG93WDogJ2hpZGRlbicsXG5cdFx0XHRcdG92ZXJmbG93WTogbWZwLnN0Lm92ZXJmbG93WVxuXHRcdFx0fSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdG1mcC53cmFwLmNzcyh7IFxuXHRcdFx0XHR0b3A6IF93aW5kb3cuc2Nyb2xsVG9wKCksXG5cdFx0XHRcdHBvc2l0aW9uOiAnYWJzb2x1dGUnXG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0aWYoIG1mcC5zdC5maXhlZEJnUG9zID09PSBmYWxzZSB8fCAobWZwLnN0LmZpeGVkQmdQb3MgPT09ICdhdXRvJyAmJiAhbWZwLmZpeGVkQ29udGVudFBvcykgKSB7XG5cdFx0XHRtZnAuYmdPdmVybGF5LmNzcyh7XG5cdFx0XHRcdGhlaWdodDogX2RvY3VtZW50LmhlaWdodCgpLFxuXHRcdFx0XHRwb3NpdGlvbjogJ2Fic29sdXRlJ1xuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0XG5cblx0XHRpZihtZnAuc3QuZW5hYmxlRXNjYXBlS2V5KSB7XG5cdFx0XHQvLyBDbG9zZSBvbiBFU0Mga2V5XG5cdFx0XHRfZG9jdW1lbnQub24oJ2tleXVwJyArIEVWRU5UX05TLCBmdW5jdGlvbihlKSB7XG5cdFx0XHRcdGlmKGUua2V5Q29kZSA9PT0gMjcpIHtcblx0XHRcdFx0XHRtZnAuY2xvc2UoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0X3dpbmRvdy5vbigncmVzaXplJyArIEVWRU5UX05TLCBmdW5jdGlvbigpIHtcblx0XHRcdG1mcC51cGRhdGVTaXplKCk7XG5cdFx0fSk7XG5cblxuXHRcdGlmKCFtZnAuc3QuY2xvc2VPbkNvbnRlbnRDbGljaykge1xuXHRcdFx0X3dyYXBDbGFzc2VzICs9ICcgbWZwLWF1dG8tY3Vyc29yJztcblx0XHR9XG5cdFx0XG5cdFx0aWYoX3dyYXBDbGFzc2VzKVxuXHRcdFx0bWZwLndyYXAuYWRkQ2xhc3MoX3dyYXBDbGFzc2VzKTtcblxuXG5cdFx0Ly8gdGhpcyB0cmlnZ2VycyByZWNhbGN1bGF0aW9uIG9mIGxheW91dCwgc28gd2UgZ2V0IGl0IG9uY2UgdG8gbm90IHRvIHRyaWdnZXIgdHdpY2Vcblx0XHR2YXIgd2luZG93SGVpZ2h0ID0gbWZwLndIID0gX3dpbmRvdy5oZWlnaHQoKTtcblxuXHRcdFxuXHRcdHZhciB3aW5kb3dTdHlsZXMgPSB7fTtcblxuXHRcdGlmKCBtZnAuZml4ZWRDb250ZW50UG9zICkge1xuICAgICAgICAgICAgaWYobWZwLl9oYXNTY3JvbGxCYXIod2luZG93SGVpZ2h0KSl7XG4gICAgICAgICAgICAgICAgdmFyIHMgPSBtZnAuX2dldFNjcm9sbGJhclNpemUoKTtcbiAgICAgICAgICAgICAgICBpZihzKSB7XG4gICAgICAgICAgICAgICAgICAgIHdpbmRvd1N0eWxlcy5tYXJnaW5SaWdodCA9IHM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cblx0XHRpZihtZnAuZml4ZWRDb250ZW50UG9zKSB7XG5cdFx0XHRpZighbWZwLmlzSUU3KSB7XG5cdFx0XHRcdHdpbmRvd1N0eWxlcy5vdmVyZmxvdyA9ICdoaWRkZW4nO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly8gaWU3IGRvdWJsZS1zY3JvbGwgYnVnXG5cdFx0XHRcdCQoJ2JvZHksIGh0bWwnKS5jc3MoJ292ZXJmbG93JywgJ2hpZGRlbicpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdFxuXHRcdFxuXHRcdHZhciBjbGFzc2VzVG9hZGQgPSBtZnAuc3QubWFpbkNsYXNzO1xuXHRcdGlmKG1mcC5pc0lFNykge1xuXHRcdFx0Y2xhc3Nlc1RvYWRkICs9ICcgbWZwLWllNyc7XG5cdFx0fVxuXHRcdGlmKGNsYXNzZXNUb2FkZCkge1xuXHRcdFx0bWZwLl9hZGRDbGFzc1RvTUZQKCBjbGFzc2VzVG9hZGQgKTtcblx0XHR9XG5cblx0XHQvLyBhZGQgY29udGVudFxuXHRcdG1mcC51cGRhdGVJdGVtSFRNTCgpO1xuXG5cdFx0X21mcFRyaWdnZXIoJ0J1aWxkQ29udHJvbHMnKTtcblxuXHRcdC8vIHJlbW92ZSBzY3JvbGxiYXIsIGFkZCBtYXJnaW4gZS50LmNcblx0XHQkKCdodG1sJykuY3NzKHdpbmRvd1N0eWxlcyk7XG5cdFx0XG5cdFx0Ly8gYWRkIGV2ZXJ5dGhpbmcgdG8gRE9NXG5cdFx0bWZwLmJnT3ZlcmxheS5hZGQobWZwLndyYXApLnByZXBlbmRUbyggbWZwLnN0LnByZXBlbmRUbyB8fCAkKGRvY3VtZW50LmJvZHkpICk7XG5cblx0XHQvLyBTYXZlIGxhc3QgZm9jdXNlZCBlbGVtZW50XG5cdFx0bWZwLl9sYXN0Rm9jdXNlZEVsID0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtcblx0XHRcblx0XHQvLyBXYWl0IGZvciBuZXh0IGN5Y2xlIHRvIGFsbG93IENTUyB0cmFuc2l0aW9uXG5cdFx0c2V0VGltZW91dChmdW5jdGlvbigpIHtcblx0XHRcdFxuXHRcdFx0aWYobWZwLmNvbnRlbnQpIHtcblx0XHRcdFx0bWZwLl9hZGRDbGFzc1RvTUZQKFJFQURZX0NMQVNTKTtcblx0XHRcdFx0bWZwLl9zZXRGb2N1cygpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly8gaWYgY29udGVudCBpcyBub3QgZGVmaW5lZCAobm90IGxvYWRlZCBlLnQuYykgd2UgYWRkIGNsYXNzIG9ubHkgZm9yIEJHXG5cdFx0XHRcdG1mcC5iZ092ZXJsYXkuYWRkQ2xhc3MoUkVBRFlfQ0xBU1MpO1xuXHRcdFx0fVxuXHRcdFx0XG5cdFx0XHQvLyBUcmFwIHRoZSBmb2N1cyBpbiBwb3B1cFxuXHRcdFx0X2RvY3VtZW50Lm9uKCdmb2N1c2luJyArIEVWRU5UX05TLCBtZnAuX29uRm9jdXNJbik7XG5cblx0XHR9LCAxNik7XG5cblx0XHRtZnAuaXNPcGVuID0gdHJ1ZTtcblx0XHRtZnAudXBkYXRlU2l6ZSh3aW5kb3dIZWlnaHQpO1xuXHRcdF9tZnBUcmlnZ2VyKE9QRU5fRVZFTlQpO1xuXG5cdFx0cmV0dXJuIGRhdGE7XG5cdH0sXG5cblx0LyoqXG5cdCAqIENsb3NlcyB0aGUgcG9wdXBcblx0ICovXG5cdGNsb3NlOiBmdW5jdGlvbigpIHtcblx0XHRpZighbWZwLmlzT3BlbikgcmV0dXJuO1xuXHRcdF9tZnBUcmlnZ2VyKEJFRk9SRV9DTE9TRV9FVkVOVCk7XG5cblx0XHRtZnAuaXNPcGVuID0gZmFsc2U7XG5cdFx0Ly8gZm9yIENTUzMgYW5pbWF0aW9uXG5cdFx0aWYobWZwLnN0LnJlbW92YWxEZWxheSAmJiAhbWZwLmlzTG93SUUgJiYgbWZwLnN1cHBvcnRzVHJhbnNpdGlvbiApICB7XG5cdFx0XHRtZnAuX2FkZENsYXNzVG9NRlAoUkVNT1ZJTkdfQ0xBU1MpO1xuXHRcdFx0c2V0VGltZW91dChmdW5jdGlvbigpIHtcblx0XHRcdFx0bWZwLl9jbG9zZSgpO1xuXHRcdFx0fSwgbWZwLnN0LnJlbW92YWxEZWxheSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdG1mcC5fY2xvc2UoKTtcblx0XHR9XG5cdH0sXG5cblx0LyoqXG5cdCAqIEhlbHBlciBmb3IgY2xvc2UoKSBmdW5jdGlvblxuXHQgKi9cblx0X2Nsb3NlOiBmdW5jdGlvbigpIHtcblx0XHRfbWZwVHJpZ2dlcihDTE9TRV9FVkVOVCk7XG5cblx0XHR2YXIgY2xhc3Nlc1RvUmVtb3ZlID0gUkVNT1ZJTkdfQ0xBU1MgKyAnICcgKyBSRUFEWV9DTEFTUyArICcgJztcblxuXHRcdG1mcC5iZ092ZXJsYXkuZGV0YWNoKCk7XG5cdFx0bWZwLndyYXAuZGV0YWNoKCk7XG5cdFx0bWZwLmNvbnRhaW5lci5lbXB0eSgpO1xuXG5cdFx0aWYobWZwLnN0Lm1haW5DbGFzcykge1xuXHRcdFx0Y2xhc3Nlc1RvUmVtb3ZlICs9IG1mcC5zdC5tYWluQ2xhc3MgKyAnICc7XG5cdFx0fVxuXG5cdFx0bWZwLl9yZW1vdmVDbGFzc0Zyb21NRlAoY2xhc3Nlc1RvUmVtb3ZlKTtcblxuXHRcdGlmKG1mcC5maXhlZENvbnRlbnRQb3MpIHtcblx0XHRcdHZhciB3aW5kb3dTdHlsZXMgPSB7bWFyZ2luUmlnaHQ6ICcnfTtcblx0XHRcdGlmKG1mcC5pc0lFNykge1xuXHRcdFx0XHQkKCdib2R5LCBodG1sJykuY3NzKCdvdmVyZmxvdycsICcnKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHdpbmRvd1N0eWxlcy5vdmVyZmxvdyA9ICcnO1xuXHRcdFx0fVxuXHRcdFx0JCgnaHRtbCcpLmNzcyh3aW5kb3dTdHlsZXMpO1xuXHRcdH1cblx0XHRcblx0XHRfZG9jdW1lbnQub2ZmKCdrZXl1cCcgKyBFVkVOVF9OUyArICcgZm9jdXNpbicgKyBFVkVOVF9OUyk7XG5cdFx0bWZwLmV2Lm9mZihFVkVOVF9OUyk7XG5cblx0XHQvLyBjbGVhbiB1cCBET00gZWxlbWVudHMgdGhhdCBhcmVuJ3QgcmVtb3ZlZFxuXHRcdG1mcC53cmFwLmF0dHIoJ2NsYXNzJywgJ21mcC13cmFwJykucmVtb3ZlQXR0cignc3R5bGUnKTtcblx0XHRtZnAuYmdPdmVybGF5LmF0dHIoJ2NsYXNzJywgJ21mcC1iZycpO1xuXHRcdG1mcC5jb250YWluZXIuYXR0cignY2xhc3MnLCAnbWZwLWNvbnRhaW5lcicpO1xuXG5cdFx0Ly8gcmVtb3ZlIGNsb3NlIGJ1dHRvbiBmcm9tIHRhcmdldCBlbGVtZW50XG5cdFx0aWYobWZwLnN0LnNob3dDbG9zZUJ0biAmJlxuXHRcdCghbWZwLnN0LmNsb3NlQnRuSW5zaWRlIHx8IG1mcC5jdXJyVGVtcGxhdGVbbWZwLmN1cnJJdGVtLnR5cGVdID09PSB0cnVlKSkge1xuXHRcdFx0aWYobWZwLmN1cnJUZW1wbGF0ZS5jbG9zZUJ0bilcblx0XHRcdFx0bWZwLmN1cnJUZW1wbGF0ZS5jbG9zZUJ0bi5kZXRhY2goKTtcblx0XHR9XG5cblxuXHRcdGlmKG1mcC5zdC5hdXRvRm9jdXNMYXN0ICYmIG1mcC5fbGFzdEZvY3VzZWRFbCkge1xuXHRcdFx0JChtZnAuX2xhc3RGb2N1c2VkRWwpLmZvY3VzKCk7IC8vIHB1dCB0YWIgZm9jdXMgYmFja1xuXHRcdH1cblx0XHRtZnAuY3Vyckl0ZW0gPSBudWxsO1x0XG5cdFx0bWZwLmNvbnRlbnQgPSBudWxsO1xuXHRcdG1mcC5jdXJyVGVtcGxhdGUgPSBudWxsO1xuXHRcdG1mcC5wcmV2SGVpZ2h0ID0gMDtcblxuXHRcdF9tZnBUcmlnZ2VyKEFGVEVSX0NMT1NFX0VWRU5UKTtcblx0fSxcblx0XG5cdHVwZGF0ZVNpemU6IGZ1bmN0aW9uKHdpbkhlaWdodCkge1xuXG5cdFx0aWYobWZwLmlzSU9TKSB7XG5cdFx0XHQvLyBmaXhlcyBpT1MgbmF2IGJhcnMgaHR0cHM6Ly9naXRodWIuY29tL2RpbXNlbWVub3YvTWFnbmlmaWMtUG9wdXAvaXNzdWVzLzJcblx0XHRcdHZhciB6b29tTGV2ZWwgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGggLyB3aW5kb3cuaW5uZXJXaWR0aDtcblx0XHRcdHZhciBoZWlnaHQgPSB3aW5kb3cuaW5uZXJIZWlnaHQgKiB6b29tTGV2ZWw7XG5cdFx0XHRtZnAud3JhcC5jc3MoJ2hlaWdodCcsIGhlaWdodCk7XG5cdFx0XHRtZnAud0ggPSBoZWlnaHQ7XG5cdFx0fSBlbHNlIHtcblx0XHRcdG1mcC53SCA9IHdpbkhlaWdodCB8fCBfd2luZG93LmhlaWdodCgpO1xuXHRcdH1cblx0XHQvLyBGaXhlcyAjODQ6IHBvcHVwIGluY29ycmVjdGx5IHBvc2l0aW9uZWQgd2l0aCBwb3NpdGlvbjpyZWxhdGl2ZSBvbiBib2R5XG5cdFx0aWYoIW1mcC5maXhlZENvbnRlbnRQb3MpIHtcblx0XHRcdG1mcC53cmFwLmNzcygnaGVpZ2h0JywgbWZwLndIKTtcblx0XHR9XG5cblx0XHRfbWZwVHJpZ2dlcignUmVzaXplJyk7XG5cblx0fSxcblxuXHQvKipcblx0ICogU2V0IGNvbnRlbnQgb2YgcG9wdXAgYmFzZWQgb24gY3VycmVudCBpbmRleFxuXHQgKi9cblx0dXBkYXRlSXRlbUhUTUw6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBpdGVtID0gbWZwLml0ZW1zW21mcC5pbmRleF07XG5cblx0XHQvLyBEZXRhY2ggYW5kIHBlcmZvcm0gbW9kaWZpY2F0aW9uc1xuXHRcdG1mcC5jb250ZW50Q29udGFpbmVyLmRldGFjaCgpO1xuXG5cdFx0aWYobWZwLmNvbnRlbnQpXG5cdFx0XHRtZnAuY29udGVudC5kZXRhY2goKTtcblxuXHRcdGlmKCFpdGVtLnBhcnNlZCkge1xuXHRcdFx0aXRlbSA9IG1mcC5wYXJzZUVsKCBtZnAuaW5kZXggKTtcblx0XHR9XG5cblx0XHR2YXIgdHlwZSA9IGl0ZW0udHlwZTtcblxuXHRcdF9tZnBUcmlnZ2VyKCdCZWZvcmVDaGFuZ2UnLCBbbWZwLmN1cnJJdGVtID8gbWZwLmN1cnJJdGVtLnR5cGUgOiAnJywgdHlwZV0pO1xuXHRcdC8vIEJlZm9yZUNoYW5nZSBldmVudCB3b3JrcyBsaWtlIHNvOlxuXHRcdC8vIF9tZnBPbignQmVmb3JlQ2hhbmdlJywgZnVuY3Rpb24oZSwgcHJldlR5cGUsIG5ld1R5cGUpIHsgfSk7XG5cblx0XHRtZnAuY3Vyckl0ZW0gPSBpdGVtO1xuXG5cdFx0aWYoIW1mcC5jdXJyVGVtcGxhdGVbdHlwZV0pIHtcblx0XHRcdHZhciBtYXJrdXAgPSBtZnAuc3RbdHlwZV0gPyBtZnAuc3RbdHlwZV0ubWFya3VwIDogZmFsc2U7XG5cblx0XHRcdC8vIGFsbG93cyB0byBtb2RpZnkgbWFya3VwXG5cdFx0XHRfbWZwVHJpZ2dlcignRmlyc3RNYXJrdXBQYXJzZScsIG1hcmt1cCk7XG5cblx0XHRcdGlmKG1hcmt1cCkge1xuXHRcdFx0XHRtZnAuY3VyclRlbXBsYXRlW3R5cGVdID0gJChtYXJrdXApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly8gaWYgdGhlcmUgaXMgbm8gbWFya3VwIGZvdW5kIHdlIGp1c3QgZGVmaW5lIHRoYXQgdGVtcGxhdGUgaXMgcGFyc2VkXG5cdFx0XHRcdG1mcC5jdXJyVGVtcGxhdGVbdHlwZV0gPSB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmKF9wcmV2Q29udGVudFR5cGUgJiYgX3ByZXZDb250ZW50VHlwZSAhPT0gaXRlbS50eXBlKSB7XG5cdFx0XHRtZnAuY29udGFpbmVyLnJlbW92ZUNsYXNzKCdtZnAtJytfcHJldkNvbnRlbnRUeXBlKyctaG9sZGVyJyk7XG5cdFx0fVxuXG5cdFx0dmFyIG5ld0NvbnRlbnQgPSBtZnBbJ2dldCcgKyB0eXBlLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgdHlwZS5zbGljZSgxKV0oaXRlbSwgbWZwLmN1cnJUZW1wbGF0ZVt0eXBlXSk7XG5cdFx0bWZwLmFwcGVuZENvbnRlbnQobmV3Q29udGVudCwgdHlwZSk7XG5cblx0XHRpdGVtLnByZWxvYWRlZCA9IHRydWU7XG5cblx0XHRfbWZwVHJpZ2dlcihDSEFOR0VfRVZFTlQsIGl0ZW0pO1xuXHRcdF9wcmV2Q29udGVudFR5cGUgPSBpdGVtLnR5cGU7XG5cblx0XHQvLyBBcHBlbmQgY29udGFpbmVyIGJhY2sgYWZ0ZXIgaXRzIGNvbnRlbnQgY2hhbmdlZFxuXHRcdG1mcC5jb250YWluZXIucHJlcGVuZChtZnAuY29udGVudENvbnRhaW5lcik7XG5cblx0XHRfbWZwVHJpZ2dlcignQWZ0ZXJDaGFuZ2UnKTtcblx0fSxcblxuXG5cdC8qKlxuXHQgKiBTZXQgSFRNTCBjb250ZW50IG9mIHBvcHVwXG5cdCAqL1xuXHRhcHBlbmRDb250ZW50OiBmdW5jdGlvbihuZXdDb250ZW50LCB0eXBlKSB7XG5cdFx0bWZwLmNvbnRlbnQgPSBuZXdDb250ZW50O1xuXG5cdFx0aWYobmV3Q29udGVudCkge1xuXHRcdFx0aWYobWZwLnN0LnNob3dDbG9zZUJ0biAmJiBtZnAuc3QuY2xvc2VCdG5JbnNpZGUgJiZcblx0XHRcdFx0bWZwLmN1cnJUZW1wbGF0ZVt0eXBlXSA9PT0gdHJ1ZSkge1xuXHRcdFx0XHQvLyBpZiB0aGVyZSBpcyBubyBtYXJrdXAsIHdlIGp1c3QgYXBwZW5kIGNsb3NlIGJ1dHRvbiBlbGVtZW50IGluc2lkZVxuXHRcdFx0XHRpZighbWZwLmNvbnRlbnQuZmluZCgnLm1mcC1jbG9zZScpLmxlbmd0aCkge1xuXHRcdFx0XHRcdG1mcC5jb250ZW50LmFwcGVuZChfZ2V0Q2xvc2VCdG4oKSk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG1mcC5jb250ZW50ID0gbmV3Q29udGVudDtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0bWZwLmNvbnRlbnQgPSAnJztcblx0XHR9XG5cblx0XHRfbWZwVHJpZ2dlcihCRUZPUkVfQVBQRU5EX0VWRU5UKTtcblx0XHRtZnAuY29udGFpbmVyLmFkZENsYXNzKCdtZnAtJyt0eXBlKyctaG9sZGVyJyk7XG5cblx0XHRtZnAuY29udGVudENvbnRhaW5lci5hcHBlbmQobWZwLmNvbnRlbnQpO1xuXHR9LFxuXG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgTWFnbmlmaWMgUG9wdXAgZGF0YSBvYmplY3QgYmFzZWQgb24gZ2l2ZW4gZGF0YVxuXHQgKiBAcGFyYW0gIHtpbnR9IGluZGV4IEluZGV4IG9mIGl0ZW0gdG8gcGFyc2Vcblx0ICovXG5cdHBhcnNlRWw6IGZ1bmN0aW9uKGluZGV4KSB7XG5cdFx0dmFyIGl0ZW0gPSBtZnAuaXRlbXNbaW5kZXhdLFxuXHRcdFx0dHlwZTtcblxuXHRcdGlmKGl0ZW0udGFnTmFtZSkge1xuXHRcdFx0aXRlbSA9IHsgZWw6ICQoaXRlbSkgfTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dHlwZSA9IGl0ZW0udHlwZTtcblx0XHRcdGl0ZW0gPSB7IGRhdGE6IGl0ZW0sIHNyYzogaXRlbS5zcmMgfTtcblx0XHR9XG5cblx0XHRpZihpdGVtLmVsKSB7XG5cdFx0XHR2YXIgdHlwZXMgPSBtZnAudHlwZXM7XG5cblx0XHRcdC8vIGNoZWNrIGZvciAnbWZwLVRZUEUnIGNsYXNzXG5cdFx0XHRmb3IodmFyIGkgPSAwOyBpIDwgdHlwZXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0aWYoIGl0ZW0uZWwuaGFzQ2xhc3MoJ21mcC0nK3R5cGVzW2ldKSApIHtcblx0XHRcdFx0XHR0eXBlID0gdHlwZXNbaV07XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0aXRlbS5zcmMgPSBpdGVtLmVsLmF0dHIoJ2RhdGEtbWZwLXNyYycpO1xuXHRcdFx0aWYoIWl0ZW0uc3JjKSB7XG5cdFx0XHRcdGl0ZW0uc3JjID0gaXRlbS5lbC5hdHRyKCdocmVmJyk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aXRlbS50eXBlID0gdHlwZSB8fCBtZnAuc3QudHlwZSB8fCAnaW5saW5lJztcblx0XHRpdGVtLmluZGV4ID0gaW5kZXg7XG5cdFx0aXRlbS5wYXJzZWQgPSB0cnVlO1xuXHRcdG1mcC5pdGVtc1tpbmRleF0gPSBpdGVtO1xuXHRcdF9tZnBUcmlnZ2VyKCdFbGVtZW50UGFyc2UnLCBpdGVtKTtcblxuXHRcdHJldHVybiBtZnAuaXRlbXNbaW5kZXhdO1xuXHR9LFxuXG5cblx0LyoqXG5cdCAqIEluaXRpYWxpemVzIHNpbmdsZSBwb3B1cCBvciBhIGdyb3VwIG9mIHBvcHVwc1xuXHQgKi9cblx0YWRkR3JvdXA6IGZ1bmN0aW9uKGVsLCBvcHRpb25zKSB7XG5cdFx0dmFyIGVIYW5kbGVyID0gZnVuY3Rpb24oZSkge1xuXHRcdFx0ZS5tZnBFbCA9IHRoaXM7XG5cdFx0XHRtZnAuX29wZW5DbGljayhlLCBlbCwgb3B0aW9ucyk7XG5cdFx0fTtcblxuXHRcdGlmKCFvcHRpb25zKSB7XG5cdFx0XHRvcHRpb25zID0ge307XG5cdFx0fVxuXG5cdFx0dmFyIGVOYW1lID0gJ2NsaWNrLm1hZ25pZmljUG9wdXAnO1xuXHRcdG9wdGlvbnMubWFpbkVsID0gZWw7XG5cblx0XHRpZihvcHRpb25zLml0ZW1zKSB7XG5cdFx0XHRvcHRpb25zLmlzT2JqID0gdHJ1ZTtcblx0XHRcdGVsLm9mZihlTmFtZSkub24oZU5hbWUsIGVIYW5kbGVyKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0b3B0aW9ucy5pc09iaiA9IGZhbHNlO1xuXHRcdFx0aWYob3B0aW9ucy5kZWxlZ2F0ZSkge1xuXHRcdFx0XHRlbC5vZmYoZU5hbWUpLm9uKGVOYW1lLCBvcHRpb25zLmRlbGVnYXRlICwgZUhhbmRsZXIpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0b3B0aW9ucy5pdGVtcyA9IGVsO1xuXHRcdFx0XHRlbC5vZmYoZU5hbWUpLm9uKGVOYW1lLCBlSGFuZGxlcik7XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXHRfb3BlbkNsaWNrOiBmdW5jdGlvbihlLCBlbCwgb3B0aW9ucykge1xuXHRcdHZhciBtaWRDbGljayA9IG9wdGlvbnMubWlkQ2xpY2sgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMubWlkQ2xpY2sgOiAkLm1hZ25pZmljUG9wdXAuZGVmYXVsdHMubWlkQ2xpY2s7XG5cblxuXHRcdGlmKCFtaWRDbGljayAmJiAoIGUud2hpY2ggPT09IDIgfHwgZS5jdHJsS2V5IHx8IGUubWV0YUtleSB8fCBlLmFsdEtleSB8fCBlLnNoaWZ0S2V5ICkgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dmFyIGRpc2FibGVPbiA9IG9wdGlvbnMuZGlzYWJsZU9uICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLmRpc2FibGVPbiA6ICQubWFnbmlmaWNQb3B1cC5kZWZhdWx0cy5kaXNhYmxlT247XG5cblx0XHRpZihkaXNhYmxlT24pIHtcblx0XHRcdGlmKCQuaXNGdW5jdGlvbihkaXNhYmxlT24pKSB7XG5cdFx0XHRcdGlmKCAhZGlzYWJsZU9uLmNhbGwobWZwKSApIHtcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHsgLy8gZWxzZSBpdCdzIG51bWJlclxuXHRcdFx0XHRpZiggX3dpbmRvdy53aWR0aCgpIDwgZGlzYWJsZU9uICkge1xuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYoZS50eXBlKSB7XG5cdFx0XHRlLnByZXZlbnREZWZhdWx0KCk7XG5cblx0XHRcdC8vIFRoaXMgd2lsbCBwcmV2ZW50IHBvcHVwIGZyb20gY2xvc2luZyBpZiBlbGVtZW50IGlzIGluc2lkZSBhbmQgcG9wdXAgaXMgYWxyZWFkeSBvcGVuZWRcblx0XHRcdGlmKG1mcC5pc09wZW4pIHtcblx0XHRcdFx0ZS5zdG9wUHJvcGFnYXRpb24oKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRvcHRpb25zLmVsID0gJChlLm1mcEVsKTtcblx0XHRpZihvcHRpb25zLmRlbGVnYXRlKSB7XG5cdFx0XHRvcHRpb25zLml0ZW1zID0gZWwuZmluZChvcHRpb25zLmRlbGVnYXRlKTtcblx0XHR9XG5cdFx0bWZwLm9wZW4ob3B0aW9ucyk7XG5cdH0sXG5cblxuXHQvKipcblx0ICogVXBkYXRlcyB0ZXh0IG9uIHByZWxvYWRlclxuXHQgKi9cblx0dXBkYXRlU3RhdHVzOiBmdW5jdGlvbihzdGF0dXMsIHRleHQpIHtcblxuXHRcdGlmKG1mcC5wcmVsb2FkZXIpIHtcblx0XHRcdGlmKF9wcmV2U3RhdHVzICE9PSBzdGF0dXMpIHtcblx0XHRcdFx0bWZwLmNvbnRhaW5lci5yZW1vdmVDbGFzcygnbWZwLXMtJytfcHJldlN0YXR1cyk7XG5cdFx0XHR9XG5cblx0XHRcdGlmKCF0ZXh0ICYmIHN0YXR1cyA9PT0gJ2xvYWRpbmcnKSB7XG5cdFx0XHRcdHRleHQgPSBtZnAuc3QudExvYWRpbmc7XG5cdFx0XHR9XG5cblx0XHRcdHZhciBkYXRhID0ge1xuXHRcdFx0XHRzdGF0dXM6IHN0YXR1cyxcblx0XHRcdFx0dGV4dDogdGV4dFxuXHRcdFx0fTtcblx0XHRcdC8vIGFsbG93cyB0byBtb2RpZnkgc3RhdHVzXG5cdFx0XHRfbWZwVHJpZ2dlcignVXBkYXRlU3RhdHVzJywgZGF0YSk7XG5cblx0XHRcdHN0YXR1cyA9IGRhdGEuc3RhdHVzO1xuXHRcdFx0dGV4dCA9IGRhdGEudGV4dDtcblxuXHRcdFx0bWZwLnByZWxvYWRlci5odG1sKHRleHQpO1xuXG5cdFx0XHRtZnAucHJlbG9hZGVyLmZpbmQoJ2EnKS5vbignY2xpY2snLCBmdW5jdGlvbihlKSB7XG5cdFx0XHRcdGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG5cdFx0XHR9KTtcblxuXHRcdFx0bWZwLmNvbnRhaW5lci5hZGRDbGFzcygnbWZwLXMtJytzdGF0dXMpO1xuXHRcdFx0X3ByZXZTdGF0dXMgPSBzdGF0dXM7XG5cdFx0fVxuXHR9LFxuXG5cblx0Lypcblx0XHRcIlByaXZhdGVcIiBoZWxwZXJzIHRoYXQgYXJlbid0IHByaXZhdGUgYXQgYWxsXG5cdCAqL1xuXHQvLyBDaGVjayB0byBjbG9zZSBwb3B1cCBvciBub3Rcblx0Ly8gXCJ0YXJnZXRcIiBpcyBhbiBlbGVtZW50IHRoYXQgd2FzIGNsaWNrZWRcblx0X2NoZWNrSWZDbG9zZTogZnVuY3Rpb24odGFyZ2V0KSB7XG5cblx0XHRpZigkKHRhcmdldCkuaGFzQ2xhc3MoUFJFVkVOVF9DTE9TRV9DTEFTUykpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHR2YXIgY2xvc2VPbkNvbnRlbnQgPSBtZnAuc3QuY2xvc2VPbkNvbnRlbnRDbGljaztcblx0XHR2YXIgY2xvc2VPbkJnID0gbWZwLnN0LmNsb3NlT25CZ0NsaWNrO1xuXG5cdFx0aWYoY2xvc2VPbkNvbnRlbnQgJiYgY2xvc2VPbkJnKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9IGVsc2Uge1xuXG5cdFx0XHQvLyBXZSBjbG9zZSB0aGUgcG9wdXAgaWYgY2xpY2sgaXMgb24gY2xvc2UgYnV0dG9uIG9yIG9uIHByZWxvYWRlci4gT3IgaWYgdGhlcmUgaXMgbm8gY29udGVudC5cblx0XHRcdGlmKCFtZnAuY29udGVudCB8fCAkKHRhcmdldCkuaGFzQ2xhc3MoJ21mcC1jbG9zZScpIHx8IChtZnAucHJlbG9hZGVyICYmIHRhcmdldCA9PT0gbWZwLnByZWxvYWRlclswXSkgKSB7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBpZiBjbGljayBpcyBvdXRzaWRlIHRoZSBjb250ZW50XG5cdFx0XHRpZiggICh0YXJnZXQgIT09IG1mcC5jb250ZW50WzBdICYmICEkLmNvbnRhaW5zKG1mcC5jb250ZW50WzBdLCB0YXJnZXQpKSAgKSB7XG5cdFx0XHRcdGlmKGNsb3NlT25CZykge1xuXHRcdFx0XHRcdC8vIGxhc3QgY2hlY2ssIGlmIHRoZSBjbGlja2VkIGVsZW1lbnQgaXMgaW4gRE9NLCAoaW4gY2FzZSBpdCdzIHJlbW92ZWQgb25jbGljaylcblx0XHRcdFx0XHRpZiggJC5jb250YWlucyhkb2N1bWVudCwgdGFyZ2V0KSApIHtcblx0XHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmKGNsb3NlT25Db250ZW50KSB7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fSxcblx0X2FkZENsYXNzVG9NRlA6IGZ1bmN0aW9uKGNOYW1lKSB7XG5cdFx0bWZwLmJnT3ZlcmxheS5hZGRDbGFzcyhjTmFtZSk7XG5cdFx0bWZwLndyYXAuYWRkQ2xhc3MoY05hbWUpO1xuXHR9LFxuXHRfcmVtb3ZlQ2xhc3NGcm9tTUZQOiBmdW5jdGlvbihjTmFtZSkge1xuXHRcdHRoaXMuYmdPdmVybGF5LnJlbW92ZUNsYXNzKGNOYW1lKTtcblx0XHRtZnAud3JhcC5yZW1vdmVDbGFzcyhjTmFtZSk7XG5cdH0sXG5cdF9oYXNTY3JvbGxCYXI6IGZ1bmN0aW9uKHdpbkhlaWdodCkge1xuXHRcdHJldHVybiAoICAobWZwLmlzSUU3ID8gX2RvY3VtZW50LmhlaWdodCgpIDogZG9jdW1lbnQuYm9keS5zY3JvbGxIZWlnaHQpID4gKHdpbkhlaWdodCB8fCBfd2luZG93LmhlaWdodCgpKSApO1xuXHR9LFxuXHRfc2V0Rm9jdXM6IGZ1bmN0aW9uKCkge1xuXHRcdChtZnAuc3QuZm9jdXMgPyBtZnAuY29udGVudC5maW5kKG1mcC5zdC5mb2N1cykuZXEoMCkgOiBtZnAud3JhcCkuZm9jdXMoKTtcblx0fSxcblx0X29uRm9jdXNJbjogZnVuY3Rpb24oZSkge1xuXHRcdGlmKCBlLnRhcmdldCAhPT0gbWZwLndyYXBbMF0gJiYgISQuY29udGFpbnMobWZwLndyYXBbMF0sIGUudGFyZ2V0KSApIHtcblx0XHRcdG1mcC5fc2V0Rm9jdXMoKTtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdH0sXG5cdF9wYXJzZU1hcmt1cDogZnVuY3Rpb24odGVtcGxhdGUsIHZhbHVlcywgaXRlbSkge1xuXHRcdHZhciBhcnI7XG5cdFx0aWYoaXRlbS5kYXRhKSB7XG5cdFx0XHR2YWx1ZXMgPSAkLmV4dGVuZChpdGVtLmRhdGEsIHZhbHVlcyk7XG5cdFx0fVxuXHRcdF9tZnBUcmlnZ2VyKE1BUktVUF9QQVJTRV9FVkVOVCwgW3RlbXBsYXRlLCB2YWx1ZXMsIGl0ZW1dICk7XG5cblx0XHQkLmVhY2godmFsdWVzLCBmdW5jdGlvbihrZXksIHZhbHVlKSB7XG5cdFx0XHRpZih2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PSBmYWxzZSkge1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblx0XHRcdGFyciA9IGtleS5zcGxpdCgnXycpO1xuXHRcdFx0aWYoYXJyLmxlbmd0aCA+IDEpIHtcblx0XHRcdFx0dmFyIGVsID0gdGVtcGxhdGUuZmluZChFVkVOVF9OUyArICctJythcnJbMF0pO1xuXG5cdFx0XHRcdGlmKGVsLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHR2YXIgYXR0ciA9IGFyclsxXTtcblx0XHRcdFx0XHRpZihhdHRyID09PSAncmVwbGFjZVdpdGgnKSB7XG5cdFx0XHRcdFx0XHRpZihlbFswXSAhPT0gdmFsdWVbMF0pIHtcblx0XHRcdFx0XHRcdFx0ZWwucmVwbGFjZVdpdGgodmFsdWUpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0gZWxzZSBpZihhdHRyID09PSAnaW1nJykge1xuXHRcdFx0XHRcdFx0aWYoZWwuaXMoJ2ltZycpKSB7XG5cdFx0XHRcdFx0XHRcdGVsLmF0dHIoJ3NyYycsIHZhbHVlKTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdGVsLnJlcGxhY2VXaXRoKCAkKCc8aW1nPicpLmF0dHIoJ3NyYycsIHZhbHVlKS5hdHRyKCdjbGFzcycsIGVsLmF0dHIoJ2NsYXNzJykpICk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGVsLmF0dHIoYXJyWzFdLCB2YWx1ZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRlbXBsYXRlLmZpbmQoRVZFTlRfTlMgKyAnLScra2V5KS5odG1sKHZhbHVlKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fSxcblxuXHRfZ2V0U2Nyb2xsYmFyU2l6ZTogZnVuY3Rpb24oKSB7XG5cdFx0Ly8gdGh4IERhdmlkXG5cdFx0aWYobWZwLnNjcm9sbGJhclNpemUgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dmFyIHNjcm9sbERpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG5cdFx0XHRzY3JvbGxEaXYuc3R5bGUuY3NzVGV4dCA9ICd3aWR0aDogOTlweDsgaGVpZ2h0OiA5OXB4OyBvdmVyZmxvdzogc2Nyb2xsOyBwb3NpdGlvbjogYWJzb2x1dGU7IHRvcDogLTk5OTlweDsnO1xuXHRcdFx0ZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChzY3JvbGxEaXYpO1xuXHRcdFx0bWZwLnNjcm9sbGJhclNpemUgPSBzY3JvbGxEaXYub2Zmc2V0V2lkdGggLSBzY3JvbGxEaXYuY2xpZW50V2lkdGg7XG5cdFx0XHRkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHNjcm9sbERpdik7XG5cdFx0fVxuXHRcdHJldHVybiBtZnAuc2Nyb2xsYmFyU2l6ZTtcblx0fVxuXG59OyAvKiBNYWduaWZpY1BvcHVwIGNvcmUgcHJvdG90eXBlIGVuZCAqL1xuXG5cblxuXG4vKipcbiAqIFB1YmxpYyBzdGF0aWMgZnVuY3Rpb25zXG4gKi9cbiQubWFnbmlmaWNQb3B1cCA9IHtcblx0aW5zdGFuY2U6IG51bGwsXG5cdHByb3RvOiBNYWduaWZpY1BvcHVwLnByb3RvdHlwZSxcblx0bW9kdWxlczogW10sXG5cblx0b3BlbjogZnVuY3Rpb24ob3B0aW9ucywgaW5kZXgpIHtcblx0XHRfY2hlY2tJbnN0YW5jZSgpO1xuXG5cdFx0aWYoIW9wdGlvbnMpIHtcblx0XHRcdG9wdGlvbnMgPSB7fTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0b3B0aW9ucyA9ICQuZXh0ZW5kKHRydWUsIHt9LCBvcHRpb25zKTtcblx0XHR9XG5cblx0XHRvcHRpb25zLmlzT2JqID0gdHJ1ZTtcblx0XHRvcHRpb25zLmluZGV4ID0gaW5kZXggfHwgMDtcblx0XHRyZXR1cm4gdGhpcy5pbnN0YW5jZS5vcGVuKG9wdGlvbnMpO1xuXHR9LFxuXG5cdGNsb3NlOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gJC5tYWduaWZpY1BvcHVwLmluc3RhbmNlICYmICQubWFnbmlmaWNQb3B1cC5pbnN0YW5jZS5jbG9zZSgpO1xuXHR9LFxuXG5cdHJlZ2lzdGVyTW9kdWxlOiBmdW5jdGlvbihuYW1lLCBtb2R1bGUpIHtcblx0XHRpZihtb2R1bGUub3B0aW9ucykge1xuXHRcdFx0JC5tYWduaWZpY1BvcHVwLmRlZmF1bHRzW25hbWVdID0gbW9kdWxlLm9wdGlvbnM7XG5cdFx0fVxuXHRcdCQuZXh0ZW5kKHRoaXMucHJvdG8sIG1vZHVsZS5wcm90byk7XG5cdFx0dGhpcy5tb2R1bGVzLnB1c2gobmFtZSk7XG5cdH0sXG5cblx0ZGVmYXVsdHM6IHtcblxuXHRcdC8vIEluZm8gYWJvdXQgb3B0aW9ucyBpcyBpbiBkb2NzOlxuXHRcdC8vIGh0dHA6Ly9kaW1zZW1lbm92LmNvbS9wbHVnaW5zL21hZ25pZmljLXBvcHVwL2RvY3VtZW50YXRpb24uaHRtbCNvcHRpb25zXG5cblx0XHRkaXNhYmxlT246IDAsXG5cblx0XHRrZXk6IG51bGwsXG5cblx0XHRtaWRDbGljazogZmFsc2UsXG5cblx0XHRtYWluQ2xhc3M6ICcnLFxuXG5cdFx0cHJlbG9hZGVyOiB0cnVlLFxuXG5cdFx0Zm9jdXM6ICcnLCAvLyBDU1Mgc2VsZWN0b3Igb2YgaW5wdXQgdG8gZm9jdXMgYWZ0ZXIgcG9wdXAgaXMgb3BlbmVkXG5cblx0XHRjbG9zZU9uQ29udGVudENsaWNrOiBmYWxzZSxcblxuXHRcdGNsb3NlT25CZ0NsaWNrOiB0cnVlLFxuXG5cdFx0Y2xvc2VCdG5JbnNpZGU6IHRydWUsXG5cblx0XHRzaG93Q2xvc2VCdG46IHRydWUsXG5cblx0XHRlbmFibGVFc2NhcGVLZXk6IHRydWUsXG5cblx0XHRtb2RhbDogZmFsc2UsXG5cblx0XHRhbGlnblRvcDogZmFsc2UsXG5cblx0XHRyZW1vdmFsRGVsYXk6IDAsXG5cblx0XHRwcmVwZW5kVG86IG51bGwsXG5cblx0XHRmaXhlZENvbnRlbnRQb3M6ICdhdXRvJyxcblxuXHRcdGZpeGVkQmdQb3M6ICdhdXRvJyxcblxuXHRcdG92ZXJmbG93WTogJ2F1dG8nLFxuXG5cdFx0Y2xvc2VNYXJrdXA6ICc8YnV0dG9uIHRpdGxlPVwiJXRpdGxlJVwiIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cIm1mcC1jbG9zZVwiPiYjMjE1OzwvYnV0dG9uPicsXG5cblx0XHR0Q2xvc2U6ICdDbG9zZSAoRXNjKScsXG5cblx0XHR0TG9hZGluZzogJ0xvYWRpbmcuLi4nLFxuXG5cdFx0YXV0b0ZvY3VzTGFzdDogdHJ1ZVxuXG5cdH1cbn07XG5cblxuXG4kLmZuLm1hZ25pZmljUG9wdXAgPSBmdW5jdGlvbihvcHRpb25zKSB7XG5cdF9jaGVja0luc3RhbmNlKCk7XG5cblx0dmFyIGpxRWwgPSAkKHRoaXMpO1xuXG5cdC8vIFdlIGNhbGwgc29tZSBBUEkgbWV0aG9kIG9mIGZpcnN0IHBhcmFtIGlzIGEgc3RyaW5nXG5cdGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gXCJzdHJpbmdcIiApIHtcblxuXHRcdGlmKG9wdGlvbnMgPT09ICdvcGVuJykge1xuXHRcdFx0dmFyIGl0ZW1zLFxuXHRcdFx0XHRpdGVtT3B0cyA9IF9pc0pRID8ganFFbC5kYXRhKCdtYWduaWZpY1BvcHVwJykgOiBqcUVsWzBdLm1hZ25pZmljUG9wdXAsXG5cdFx0XHRcdGluZGV4ID0gcGFyc2VJbnQoYXJndW1lbnRzWzFdLCAxMCkgfHwgMDtcblxuXHRcdFx0aWYoaXRlbU9wdHMuaXRlbXMpIHtcblx0XHRcdFx0aXRlbXMgPSBpdGVtT3B0cy5pdGVtc1tpbmRleF07XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRpdGVtcyA9IGpxRWw7XG5cdFx0XHRcdGlmKGl0ZW1PcHRzLmRlbGVnYXRlKSB7XG5cdFx0XHRcdFx0aXRlbXMgPSBpdGVtcy5maW5kKGl0ZW1PcHRzLmRlbGVnYXRlKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpdGVtcyA9IGl0ZW1zLmVxKCBpbmRleCApO1xuXHRcdFx0fVxuXHRcdFx0bWZwLl9vcGVuQ2xpY2soe21mcEVsOml0ZW1zfSwganFFbCwgaXRlbU9wdHMpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRpZihtZnAuaXNPcGVuKVxuXHRcdFx0XHRtZnBbb3B0aW9uc10uYXBwbHkobWZwLCBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpKTtcblx0XHR9XG5cblx0fSBlbHNlIHtcblx0XHQvLyBjbG9uZSBvcHRpb25zIG9ialxuXHRcdG9wdGlvbnMgPSAkLmV4dGVuZCh0cnVlLCB7fSwgb3B0aW9ucyk7XG5cblx0XHQvKlxuXHRcdCAqIEFzIFplcHRvIGRvZXNuJ3Qgc3VwcG9ydCAuZGF0YSgpIG1ldGhvZCBmb3Igb2JqZWN0c1xuXHRcdCAqIGFuZCBpdCB3b3JrcyBvbmx5IGluIG5vcm1hbCBicm93c2Vyc1xuXHRcdCAqIHdlIGFzc2lnbiBcIm9wdGlvbnNcIiBvYmplY3QgZGlyZWN0bHkgdG8gdGhlIERPTSBlbGVtZW50LiBGVFchXG5cdFx0ICovXG5cdFx0aWYoX2lzSlEpIHtcblx0XHRcdGpxRWwuZGF0YSgnbWFnbmlmaWNQb3B1cCcsIG9wdGlvbnMpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRqcUVsWzBdLm1hZ25pZmljUG9wdXAgPSBvcHRpb25zO1xuXHRcdH1cblxuXHRcdG1mcC5hZGRHcm91cChqcUVsLCBvcHRpb25zKTtcblxuXHR9XG5cdHJldHVybiBqcUVsO1xufTtcblxuLyo+PmNvcmUqL1xuXG4vKj4+aW5saW5lKi9cblxudmFyIElOTElORV9OUyA9ICdpbmxpbmUnLFxuXHRfaGlkZGVuQ2xhc3MsXG5cdF9pbmxpbmVQbGFjZWhvbGRlcixcblx0X2xhc3RJbmxpbmVFbGVtZW50LFxuXHRfcHV0SW5saW5lRWxlbWVudHNCYWNrID0gZnVuY3Rpb24oKSB7XG5cdFx0aWYoX2xhc3RJbmxpbmVFbGVtZW50KSB7XG5cdFx0XHRfaW5saW5lUGxhY2Vob2xkZXIuYWZ0ZXIoIF9sYXN0SW5saW5lRWxlbWVudC5hZGRDbGFzcyhfaGlkZGVuQ2xhc3MpICkuZGV0YWNoKCk7XG5cdFx0XHRfbGFzdElubGluZUVsZW1lbnQgPSBudWxsO1xuXHRcdH1cblx0fTtcblxuJC5tYWduaWZpY1BvcHVwLnJlZ2lzdGVyTW9kdWxlKElOTElORV9OUywge1xuXHRvcHRpb25zOiB7XG5cdFx0aGlkZGVuQ2xhc3M6ICdoaWRlJywgLy8gd2lsbCBiZSBhcHBlbmRlZCB3aXRoIGBtZnAtYCBwcmVmaXhcblx0XHRtYXJrdXA6ICcnLFxuXHRcdHROb3RGb3VuZDogJ0NvbnRlbnQgbm90IGZvdW5kJ1xuXHR9LFxuXHRwcm90bzoge1xuXG5cdFx0aW5pdElubGluZTogZnVuY3Rpb24oKSB7XG5cdFx0XHRtZnAudHlwZXMucHVzaChJTkxJTkVfTlMpO1xuXG5cdFx0XHRfbWZwT24oQ0xPU0VfRVZFTlQrJy4nK0lOTElORV9OUywgZnVuY3Rpb24oKSB7XG5cdFx0XHRcdF9wdXRJbmxpbmVFbGVtZW50c0JhY2soKTtcblx0XHRcdH0pO1xuXHRcdH0sXG5cblx0XHRnZXRJbmxpbmU6IGZ1bmN0aW9uKGl0ZW0sIHRlbXBsYXRlKSB7XG5cblx0XHRcdF9wdXRJbmxpbmVFbGVtZW50c0JhY2soKTtcblxuXHRcdFx0aWYoaXRlbS5zcmMpIHtcblx0XHRcdFx0dmFyIGlubGluZVN0ID0gbWZwLnN0LmlubGluZSxcblx0XHRcdFx0XHRlbCA9ICQoaXRlbS5zcmMpO1xuXG5cdFx0XHRcdGlmKGVsLmxlbmd0aCkge1xuXG5cdFx0XHRcdFx0Ly8gSWYgdGFyZ2V0IGVsZW1lbnQgaGFzIHBhcmVudCAtIHdlIHJlcGxhY2UgaXQgd2l0aCBwbGFjZWhvbGRlciBhbmQgcHV0IGl0IGJhY2sgYWZ0ZXIgcG9wdXAgaXMgY2xvc2VkXG5cdFx0XHRcdFx0dmFyIHBhcmVudCA9IGVsWzBdLnBhcmVudE5vZGU7XG5cdFx0XHRcdFx0aWYocGFyZW50ICYmIHBhcmVudC50YWdOYW1lKSB7XG5cdFx0XHRcdFx0XHRpZighX2lubGluZVBsYWNlaG9sZGVyKSB7XG5cdFx0XHRcdFx0XHRcdF9oaWRkZW5DbGFzcyA9IGlubGluZVN0LmhpZGRlbkNsYXNzO1xuXHRcdFx0XHRcdFx0XHRfaW5saW5lUGxhY2Vob2xkZXIgPSBfZ2V0RWwoX2hpZGRlbkNsYXNzKTtcblx0XHRcdFx0XHRcdFx0X2hpZGRlbkNsYXNzID0gJ21mcC0nK19oaWRkZW5DbGFzcztcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdC8vIHJlcGxhY2UgdGFyZ2V0IGlubGluZSBlbGVtZW50IHdpdGggcGxhY2Vob2xkZXJcblx0XHRcdFx0XHRcdF9sYXN0SW5saW5lRWxlbWVudCA9IGVsLmFmdGVyKF9pbmxpbmVQbGFjZWhvbGRlcikuZGV0YWNoKCkucmVtb3ZlQ2xhc3MoX2hpZGRlbkNsYXNzKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRtZnAudXBkYXRlU3RhdHVzKCdyZWFkeScpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdG1mcC51cGRhdGVTdGF0dXMoJ2Vycm9yJywgaW5saW5lU3QudE5vdEZvdW5kKTtcblx0XHRcdFx0XHRlbCA9ICQoJzxkaXY+Jyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpdGVtLmlubGluZUVsZW1lbnQgPSBlbDtcblx0XHRcdFx0cmV0dXJuIGVsO1xuXHRcdFx0fVxuXG5cdFx0XHRtZnAudXBkYXRlU3RhdHVzKCdyZWFkeScpO1xuXHRcdFx0bWZwLl9wYXJzZU1hcmt1cCh0ZW1wbGF0ZSwge30sIGl0ZW0pO1xuXHRcdFx0cmV0dXJuIHRlbXBsYXRlO1xuXHRcdH1cblx0fVxufSk7XG5cbi8qPj5pbmxpbmUqL1xuXG4vKj4+YWpheCovXG52YXIgQUpBWF9OUyA9ICdhamF4Jyxcblx0X2FqYXhDdXIsXG5cdF9yZW1vdmVBamF4Q3Vyc29yID0gZnVuY3Rpb24oKSB7XG5cdFx0aWYoX2FqYXhDdXIpIHtcblx0XHRcdCQoZG9jdW1lbnQuYm9keSkucmVtb3ZlQ2xhc3MoX2FqYXhDdXIpO1xuXHRcdH1cblx0fSxcblx0X2Rlc3Ryb3lBamF4UmVxdWVzdCA9IGZ1bmN0aW9uKCkge1xuXHRcdF9yZW1vdmVBamF4Q3Vyc29yKCk7XG5cdFx0aWYobWZwLnJlcSkge1xuXHRcdFx0bWZwLnJlcS5hYm9ydCgpO1xuXHRcdH1cblx0fTtcblxuJC5tYWduaWZpY1BvcHVwLnJlZ2lzdGVyTW9kdWxlKEFKQVhfTlMsIHtcblxuXHRvcHRpb25zOiB7XG5cdFx0c2V0dGluZ3M6IG51bGwsXG5cdFx0Y3Vyc29yOiAnbWZwLWFqYXgtY3VyJyxcblx0XHR0RXJyb3I6ICc8YSBocmVmPVwiJXVybCVcIj5UaGUgY29udGVudDwvYT4gY291bGQgbm90IGJlIGxvYWRlZC4nXG5cdH0sXG5cblx0cHJvdG86IHtcblx0XHRpbml0QWpheDogZnVuY3Rpb24oKSB7XG5cdFx0XHRtZnAudHlwZXMucHVzaChBSkFYX05TKTtcblx0XHRcdF9hamF4Q3VyID0gbWZwLnN0LmFqYXguY3Vyc29yO1xuXG5cdFx0XHRfbWZwT24oQ0xPU0VfRVZFTlQrJy4nK0FKQVhfTlMsIF9kZXN0cm95QWpheFJlcXVlc3QpO1xuXHRcdFx0X21mcE9uKCdCZWZvcmVDaGFuZ2UuJyArIEFKQVhfTlMsIF9kZXN0cm95QWpheFJlcXVlc3QpO1xuXHRcdH0sXG5cdFx0Z2V0QWpheDogZnVuY3Rpb24oaXRlbSkge1xuXG5cdFx0XHRpZihfYWpheEN1cikge1xuXHRcdFx0XHQkKGRvY3VtZW50LmJvZHkpLmFkZENsYXNzKF9hamF4Q3VyKTtcblx0XHRcdH1cblxuXHRcdFx0bWZwLnVwZGF0ZVN0YXR1cygnbG9hZGluZycpO1xuXG5cdFx0XHR2YXIgb3B0cyA9ICQuZXh0ZW5kKHtcblx0XHRcdFx0dXJsOiBpdGVtLnNyYyxcblx0XHRcdFx0c3VjY2VzczogZnVuY3Rpb24oZGF0YSwgdGV4dFN0YXR1cywganFYSFIpIHtcblx0XHRcdFx0XHR2YXIgdGVtcCA9IHtcblx0XHRcdFx0XHRcdGRhdGE6ZGF0YSxcblx0XHRcdFx0XHRcdHhocjpqcVhIUlxuXHRcdFx0XHRcdH07XG5cblx0XHRcdFx0XHRfbWZwVHJpZ2dlcignUGFyc2VBamF4JywgdGVtcCk7XG5cblx0XHRcdFx0XHRtZnAuYXBwZW5kQ29udGVudCggJCh0ZW1wLmRhdGEpLCBBSkFYX05TICk7XG5cblx0XHRcdFx0XHRpdGVtLmZpbmlzaGVkID0gdHJ1ZTtcblxuXHRcdFx0XHRcdF9yZW1vdmVBamF4Q3Vyc29yKCk7XG5cblx0XHRcdFx0XHRtZnAuX3NldEZvY3VzKCk7XG5cblx0XHRcdFx0XHRzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0bWZwLndyYXAuYWRkQ2xhc3MoUkVBRFlfQ0xBU1MpO1xuXHRcdFx0XHRcdH0sIDE2KTtcblxuXHRcdFx0XHRcdG1mcC51cGRhdGVTdGF0dXMoJ3JlYWR5Jyk7XG5cblx0XHRcdFx0XHRfbWZwVHJpZ2dlcignQWpheENvbnRlbnRBZGRlZCcpO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHRlcnJvcjogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0X3JlbW92ZUFqYXhDdXJzb3IoKTtcblx0XHRcdFx0XHRpdGVtLmZpbmlzaGVkID0gaXRlbS5sb2FkRXJyb3IgPSB0cnVlO1xuXHRcdFx0XHRcdG1mcC51cGRhdGVTdGF0dXMoJ2Vycm9yJywgbWZwLnN0LmFqYXgudEVycm9yLnJlcGxhY2UoJyV1cmwlJywgaXRlbS5zcmMpKTtcblx0XHRcdFx0fVxuXHRcdFx0fSwgbWZwLnN0LmFqYXguc2V0dGluZ3MpO1xuXG5cdFx0XHRtZnAucmVxID0gJC5hamF4KG9wdHMpO1xuXG5cdFx0XHRyZXR1cm4gJyc7XG5cdFx0fVxuXHR9XG59KTtcblxuLyo+PmFqYXgqL1xuXG4vKj4+aW1hZ2UqL1xudmFyIF9pbWdJbnRlcnZhbCxcblx0X2dldFRpdGxlID0gZnVuY3Rpb24oaXRlbSkge1xuXHRcdGlmKGl0ZW0uZGF0YSAmJiBpdGVtLmRhdGEudGl0bGUgIT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiBpdGVtLmRhdGEudGl0bGU7XG5cblx0XHR2YXIgc3JjID0gbWZwLnN0LmltYWdlLnRpdGxlU3JjO1xuXG5cdFx0aWYoc3JjKSB7XG5cdFx0XHRpZigkLmlzRnVuY3Rpb24oc3JjKSkge1xuXHRcdFx0XHRyZXR1cm4gc3JjLmNhbGwobWZwLCBpdGVtKTtcblx0XHRcdH0gZWxzZSBpZihpdGVtLmVsKSB7XG5cdFx0XHRcdHJldHVybiBpdGVtLmVsLmF0dHIoc3JjKSB8fCAnJztcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuICcnO1xuXHR9O1xuXG4kLm1hZ25pZmljUG9wdXAucmVnaXN0ZXJNb2R1bGUoJ2ltYWdlJywge1xuXG5cdG9wdGlvbnM6IHtcblx0XHRtYXJrdXA6ICc8ZGl2IGNsYXNzPVwibWZwLWZpZ3VyZVwiPicrXG5cdFx0XHRcdFx0JzxkaXYgY2xhc3M9XCJtZnAtY2xvc2VcIj48L2Rpdj4nK1xuXHRcdFx0XHRcdCc8ZmlndXJlPicrXG5cdFx0XHRcdFx0XHQnPGRpdiBjbGFzcz1cIm1mcC1pbWdcIj48L2Rpdj4nK1xuXHRcdFx0XHRcdFx0JzxmaWdjYXB0aW9uPicrXG5cdFx0XHRcdFx0XHRcdCc8ZGl2IGNsYXNzPVwibWZwLWJvdHRvbS1iYXJcIj4nK1xuXHRcdFx0XHRcdFx0XHRcdCc8ZGl2IGNsYXNzPVwibWZwLXRpdGxlXCI+PC9kaXY+Jytcblx0XHRcdFx0XHRcdFx0XHQnPGRpdiBjbGFzcz1cIm1mcC1jb3VudGVyXCI+PC9kaXY+Jytcblx0XHRcdFx0XHRcdFx0JzwvZGl2PicrXG5cdFx0XHRcdFx0XHQnPC9maWdjYXB0aW9uPicrXG5cdFx0XHRcdFx0JzwvZmlndXJlPicrXG5cdFx0XHRcdCc8L2Rpdj4nLFxuXHRcdGN1cnNvcjogJ21mcC16b29tLW91dC1jdXInLFxuXHRcdHRpdGxlU3JjOiAndGl0bGUnLFxuXHRcdHZlcnRpY2FsRml0OiB0cnVlLFxuXHRcdHRFcnJvcjogJzxhIGhyZWY9XCIldXJsJVwiPlRoZSBpbWFnZTwvYT4gY291bGQgbm90IGJlIGxvYWRlZC4nXG5cdH0sXG5cblx0cHJvdG86IHtcblx0XHRpbml0SW1hZ2U6IGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIGltZ1N0ID0gbWZwLnN0LmltYWdlLFxuXHRcdFx0XHRucyA9ICcuaW1hZ2UnO1xuXG5cdFx0XHRtZnAudHlwZXMucHVzaCgnaW1hZ2UnKTtcblxuXHRcdFx0X21mcE9uKE9QRU5fRVZFTlQrbnMsIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRpZihtZnAuY3Vyckl0ZW0udHlwZSA9PT0gJ2ltYWdlJyAmJiBpbWdTdC5jdXJzb3IpIHtcblx0XHRcdFx0XHQkKGRvY3VtZW50LmJvZHkpLmFkZENsYXNzKGltZ1N0LmN1cnNvcik7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXG5cdFx0XHRfbWZwT24oQ0xPU0VfRVZFTlQrbnMsIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRpZihpbWdTdC5jdXJzb3IpIHtcblx0XHRcdFx0XHQkKGRvY3VtZW50LmJvZHkpLnJlbW92ZUNsYXNzKGltZ1N0LmN1cnNvcik7XG5cdFx0XHRcdH1cblx0XHRcdFx0X3dpbmRvdy5vZmYoJ3Jlc2l6ZScgKyBFVkVOVF9OUyk7XG5cdFx0XHR9KTtcblxuXHRcdFx0X21mcE9uKCdSZXNpemUnK25zLCBtZnAucmVzaXplSW1hZ2UpO1xuXHRcdFx0aWYobWZwLmlzTG93SUUpIHtcblx0XHRcdFx0X21mcE9uKCdBZnRlckNoYW5nZScsIG1mcC5yZXNpemVJbWFnZSk7XG5cdFx0XHR9XG5cdFx0fSxcblx0XHRyZXNpemVJbWFnZTogZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgaXRlbSA9IG1mcC5jdXJySXRlbTtcblx0XHRcdGlmKCFpdGVtIHx8ICFpdGVtLmltZykgcmV0dXJuO1xuXG5cdFx0XHRpZihtZnAuc3QuaW1hZ2UudmVydGljYWxGaXQpIHtcblx0XHRcdFx0dmFyIGRlY3IgPSAwO1xuXHRcdFx0XHQvLyBmaXggYm94LXNpemluZyBpbiBpZTcvOFxuXHRcdFx0XHRpZihtZnAuaXNMb3dJRSkge1xuXHRcdFx0XHRcdGRlY3IgPSBwYXJzZUludChpdGVtLmltZy5jc3MoJ3BhZGRpbmctdG9wJyksIDEwKSArIHBhcnNlSW50KGl0ZW0uaW1nLmNzcygncGFkZGluZy1ib3R0b20nKSwxMCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aXRlbS5pbWcuY3NzKCdtYXgtaGVpZ2h0JywgbWZwLndILWRlY3IpO1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0X29uSW1hZ2VIYXNTaXplOiBmdW5jdGlvbihpdGVtKSB7XG5cdFx0XHRpZihpdGVtLmltZykge1xuXG5cdFx0XHRcdGl0ZW0uaGFzU2l6ZSA9IHRydWU7XG5cblx0XHRcdFx0aWYoX2ltZ0ludGVydmFsKSB7XG5cdFx0XHRcdFx0Y2xlYXJJbnRlcnZhbChfaW1nSW50ZXJ2YWwpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aXRlbS5pc0NoZWNraW5nSW1nU2l6ZSA9IGZhbHNlO1xuXG5cdFx0XHRcdF9tZnBUcmlnZ2VyKCdJbWFnZUhhc1NpemUnLCBpdGVtKTtcblxuXHRcdFx0XHRpZihpdGVtLmltZ0hpZGRlbikge1xuXHRcdFx0XHRcdGlmKG1mcC5jb250ZW50KVxuXHRcdFx0XHRcdFx0bWZwLmNvbnRlbnQucmVtb3ZlQ2xhc3MoJ21mcC1sb2FkaW5nJyk7XG5cblx0XHRcdFx0XHRpdGVtLmltZ0hpZGRlbiA9IGZhbHNlO1xuXHRcdFx0XHR9XG5cblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogRnVuY3Rpb24gdGhhdCBsb29wcyB1bnRpbCB0aGUgaW1hZ2UgaGFzIHNpemUgdG8gZGlzcGxheSBlbGVtZW50cyB0aGF0IHJlbHkgb24gaXQgYXNhcFxuXHRcdCAqL1xuXHRcdGZpbmRJbWFnZVNpemU6IGZ1bmN0aW9uKGl0ZW0pIHtcblxuXHRcdFx0dmFyIGNvdW50ZXIgPSAwLFxuXHRcdFx0XHRpbWcgPSBpdGVtLmltZ1swXSxcblx0XHRcdFx0bWZwU2V0SW50ZXJ2YWwgPSBmdW5jdGlvbihkZWxheSkge1xuXG5cdFx0XHRcdFx0aWYoX2ltZ0ludGVydmFsKSB7XG5cdFx0XHRcdFx0XHRjbGVhckludGVydmFsKF9pbWdJbnRlcnZhbCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdC8vIGRlY2VsZXJhdGluZyBpbnRlcnZhbCB0aGF0IGNoZWNrcyBmb3Igc2l6ZSBvZiBhbiBpbWFnZVxuXHRcdFx0XHRcdF9pbWdJbnRlcnZhbCA9IHNldEludGVydmFsKGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0aWYoaW1nLm5hdHVyYWxXaWR0aCA+IDApIHtcblx0XHRcdFx0XHRcdFx0bWZwLl9vbkltYWdlSGFzU2l6ZShpdGVtKTtcblx0XHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRpZihjb3VudGVyID4gMjAwKSB7XG5cdFx0XHRcdFx0XHRcdGNsZWFySW50ZXJ2YWwoX2ltZ0ludGVydmFsKTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0Y291bnRlcisrO1xuXHRcdFx0XHRcdFx0aWYoY291bnRlciA9PT0gMykge1xuXHRcdFx0XHRcdFx0XHRtZnBTZXRJbnRlcnZhbCgxMCk7XG5cdFx0XHRcdFx0XHR9IGVsc2UgaWYoY291bnRlciA9PT0gNDApIHtcblx0XHRcdFx0XHRcdFx0bWZwU2V0SW50ZXJ2YWwoNTApO1xuXHRcdFx0XHRcdFx0fSBlbHNlIGlmKGNvdW50ZXIgPT09IDEwMCkge1xuXHRcdFx0XHRcdFx0XHRtZnBTZXRJbnRlcnZhbCg1MDApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0sIGRlbGF5KTtcblx0XHRcdFx0fTtcblxuXHRcdFx0bWZwU2V0SW50ZXJ2YWwoMSk7XG5cdFx0fSxcblxuXHRcdGdldEltYWdlOiBmdW5jdGlvbihpdGVtLCB0ZW1wbGF0ZSkge1xuXG5cdFx0XHR2YXIgZ3VhcmQgPSAwLFxuXG5cdFx0XHRcdC8vIGltYWdlIGxvYWQgY29tcGxldGUgaGFuZGxlclxuXHRcdFx0XHRvbkxvYWRDb21wbGV0ZSA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdGlmKGl0ZW0pIHtcblx0XHRcdFx0XHRcdGlmIChpdGVtLmltZ1swXS5jb21wbGV0ZSkge1xuXHRcdFx0XHRcdFx0XHRpdGVtLmltZy5vZmYoJy5tZnBsb2FkZXInKTtcblxuXHRcdFx0XHRcdFx0XHRpZihpdGVtID09PSBtZnAuY3Vyckl0ZW0pe1xuXHRcdFx0XHRcdFx0XHRcdG1mcC5fb25JbWFnZUhhc1NpemUoaXRlbSk7XG5cblx0XHRcdFx0XHRcdFx0XHRtZnAudXBkYXRlU3RhdHVzKCdyZWFkeScpO1xuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0aXRlbS5oYXNTaXplID0gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0aXRlbS5sb2FkZWQgPSB0cnVlO1xuXG5cdFx0XHRcdFx0XHRcdF9tZnBUcmlnZ2VyKCdJbWFnZUxvYWRDb21wbGV0ZScpO1xuXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRlbHNlIHtcblx0XHRcdFx0XHRcdFx0Ly8gaWYgaW1hZ2UgY29tcGxldGUgY2hlY2sgZmFpbHMgMjAwIHRpbWVzICgyMCBzZWMpLCB3ZSBhc3N1bWUgdGhhdCB0aGVyZSB3YXMgYW4gZXJyb3IuXG5cdFx0XHRcdFx0XHRcdGd1YXJkKys7XG5cdFx0XHRcdFx0XHRcdGlmKGd1YXJkIDwgMjAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0c2V0VGltZW91dChvbkxvYWRDb21wbGV0ZSwxMDApO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdG9uTG9hZEVycm9yKCk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cblx0XHRcdFx0Ly8gaW1hZ2UgZXJyb3IgaGFuZGxlclxuXHRcdFx0XHRvbkxvYWRFcnJvciA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdGlmKGl0ZW0pIHtcblx0XHRcdFx0XHRcdGl0ZW0uaW1nLm9mZignLm1mcGxvYWRlcicpO1xuXHRcdFx0XHRcdFx0aWYoaXRlbSA9PT0gbWZwLmN1cnJJdGVtKXtcblx0XHRcdFx0XHRcdFx0bWZwLl9vbkltYWdlSGFzU2l6ZShpdGVtKTtcblx0XHRcdFx0XHRcdFx0bWZwLnVwZGF0ZVN0YXR1cygnZXJyb3InLCBpbWdTdC50RXJyb3IucmVwbGFjZSgnJXVybCUnLCBpdGVtLnNyYykgKTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0aXRlbS5oYXNTaXplID0gdHJ1ZTtcblx0XHRcdFx0XHRcdGl0ZW0ubG9hZGVkID0gdHJ1ZTtcblx0XHRcdFx0XHRcdGl0ZW0ubG9hZEVycm9yID0gdHJ1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdGltZ1N0ID0gbWZwLnN0LmltYWdlO1xuXG5cblx0XHRcdHZhciBlbCA9IHRlbXBsYXRlLmZpbmQoJy5tZnAtaW1nJyk7XG5cdFx0XHRpZihlbC5sZW5ndGgpIHtcblx0XHRcdFx0dmFyIGltZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2ltZycpO1xuXHRcdFx0XHRpbWcuY2xhc3NOYW1lID0gJ21mcC1pbWcnO1xuXHRcdFx0XHRpZihpdGVtLmVsICYmIGl0ZW0uZWwuZmluZCgnaW1nJykubGVuZ3RoKSB7XG5cdFx0XHRcdFx0aW1nLmFsdCA9IGl0ZW0uZWwuZmluZCgnaW1nJykuYXR0cignYWx0Jyk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aXRlbS5pbWcgPSAkKGltZykub24oJ2xvYWQubWZwbG9hZGVyJywgb25Mb2FkQ29tcGxldGUpLm9uKCdlcnJvci5tZnBsb2FkZXInLCBvbkxvYWRFcnJvcik7XG5cdFx0XHRcdGltZy5zcmMgPSBpdGVtLnNyYztcblxuXHRcdFx0XHQvLyB3aXRob3V0IGNsb25lKCkgXCJlcnJvclwiIGV2ZW50IGlzIG5vdCBmaXJpbmcgd2hlbiBJTUcgaXMgcmVwbGFjZWQgYnkgbmV3IElNR1xuXHRcdFx0XHQvLyBUT0RPOiBmaW5kIGEgd2F5IHRvIGF2b2lkIHN1Y2ggY2xvbmluZ1xuXHRcdFx0XHRpZihlbC5pcygnaW1nJykpIHtcblx0XHRcdFx0XHRpdGVtLmltZyA9IGl0ZW0uaW1nLmNsb25lKCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpbWcgPSBpdGVtLmltZ1swXTtcblx0XHRcdFx0aWYoaW1nLm5hdHVyYWxXaWR0aCA+IDApIHtcblx0XHRcdFx0XHRpdGVtLmhhc1NpemUgPSB0cnVlO1xuXHRcdFx0XHR9IGVsc2UgaWYoIWltZy53aWR0aCkge1xuXHRcdFx0XHRcdGl0ZW0uaGFzU2l6ZSA9IGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdG1mcC5fcGFyc2VNYXJrdXAodGVtcGxhdGUsIHtcblx0XHRcdFx0dGl0bGU6IF9nZXRUaXRsZShpdGVtKSxcblx0XHRcdFx0aW1nX3JlcGxhY2VXaXRoOiBpdGVtLmltZ1xuXHRcdFx0fSwgaXRlbSk7XG5cblx0XHRcdG1mcC5yZXNpemVJbWFnZSgpO1xuXG5cdFx0XHRpZihpdGVtLmhhc1NpemUpIHtcblx0XHRcdFx0aWYoX2ltZ0ludGVydmFsKSBjbGVhckludGVydmFsKF9pbWdJbnRlcnZhbCk7XG5cblx0XHRcdFx0aWYoaXRlbS5sb2FkRXJyb3IpIHtcblx0XHRcdFx0XHR0ZW1wbGF0ZS5hZGRDbGFzcygnbWZwLWxvYWRpbmcnKTtcblx0XHRcdFx0XHRtZnAudXBkYXRlU3RhdHVzKCdlcnJvcicsIGltZ1N0LnRFcnJvci5yZXBsYWNlKCcldXJsJScsIGl0ZW0uc3JjKSApO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHRlbXBsYXRlLnJlbW92ZUNsYXNzKCdtZnAtbG9hZGluZycpO1xuXHRcdFx0XHRcdG1mcC51cGRhdGVTdGF0dXMoJ3JlYWR5Jyk7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHRlbXBsYXRlO1xuXHRcdFx0fVxuXG5cdFx0XHRtZnAudXBkYXRlU3RhdHVzKCdsb2FkaW5nJyk7XG5cdFx0XHRpdGVtLmxvYWRpbmcgPSB0cnVlO1xuXG5cdFx0XHRpZighaXRlbS5oYXNTaXplKSB7XG5cdFx0XHRcdGl0ZW0uaW1nSGlkZGVuID0gdHJ1ZTtcblx0XHRcdFx0dGVtcGxhdGUuYWRkQ2xhc3MoJ21mcC1sb2FkaW5nJyk7XG5cdFx0XHRcdG1mcC5maW5kSW1hZ2VTaXplKGl0ZW0pO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gdGVtcGxhdGU7XG5cdFx0fVxuXHR9XG59KTtcblxuLyo+PmltYWdlKi9cblxuLyo+Pnpvb20qL1xudmFyIGhhc01velRyYW5zZm9ybSxcblx0Z2V0SGFzTW96VHJhbnNmb3JtID0gZnVuY3Rpb24oKSB7XG5cdFx0aWYoaGFzTW96VHJhbnNmb3JtID09PSB1bmRlZmluZWQpIHtcblx0XHRcdGhhc01velRyYW5zZm9ybSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3AnKS5zdHlsZS5Nb3pUcmFuc2Zvcm0gIT09IHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0cmV0dXJuIGhhc01velRyYW5zZm9ybTtcblx0fTtcblxuJC5tYWduaWZpY1BvcHVwLnJlZ2lzdGVyTW9kdWxlKCd6b29tJywge1xuXG5cdG9wdGlvbnM6IHtcblx0XHRlbmFibGVkOiBmYWxzZSxcblx0XHRlYXNpbmc6ICdlYXNlLWluLW91dCcsXG5cdFx0ZHVyYXRpb246IDMwMCxcblx0XHRvcGVuZXI6IGZ1bmN0aW9uKGVsZW1lbnQpIHtcblx0XHRcdHJldHVybiBlbGVtZW50LmlzKCdpbWcnKSA/IGVsZW1lbnQgOiBlbGVtZW50LmZpbmQoJ2ltZycpO1xuXHRcdH1cblx0fSxcblxuXHRwcm90bzoge1xuXG5cdFx0aW5pdFpvb206IGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIHpvb21TdCA9IG1mcC5zdC56b29tLFxuXHRcdFx0XHRucyA9ICcuem9vbScsXG5cdFx0XHRcdGltYWdlO1xuXG5cdFx0XHRpZighem9vbVN0LmVuYWJsZWQgfHwgIW1mcC5zdXBwb3J0c1RyYW5zaXRpb24pIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHR2YXIgZHVyYXRpb24gPSB6b29tU3QuZHVyYXRpb24sXG5cdFx0XHRcdGdldEVsVG9BbmltYXRlID0gZnVuY3Rpb24oaW1hZ2UpIHtcblx0XHRcdFx0XHR2YXIgbmV3SW1nID0gaW1hZ2UuY2xvbmUoKS5yZW1vdmVBdHRyKCdzdHlsZScpLnJlbW92ZUF0dHIoJ2NsYXNzJykuYWRkQ2xhc3MoJ21mcC1hbmltYXRlZC1pbWFnZScpLFxuXHRcdFx0XHRcdFx0dHJhbnNpdGlvbiA9ICdhbGwgJysoem9vbVN0LmR1cmF0aW9uLzEwMDApKydzICcgKyB6b29tU3QuZWFzaW5nLFxuXHRcdFx0XHRcdFx0Y3NzT2JqID0ge1xuXHRcdFx0XHRcdFx0XHRwb3NpdGlvbjogJ2ZpeGVkJyxcblx0XHRcdFx0XHRcdFx0ekluZGV4OiA5OTk5LFxuXHRcdFx0XHRcdFx0XHRsZWZ0OiAwLFxuXHRcdFx0XHRcdFx0XHR0b3A6IDAsXG5cdFx0XHRcdFx0XHRcdCctd2Via2l0LWJhY2tmYWNlLXZpc2liaWxpdHknOiAnaGlkZGVuJ1xuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdHQgPSAndHJhbnNpdGlvbic7XG5cblx0XHRcdFx0XHRjc3NPYmpbJy13ZWJraXQtJyt0XSA9IGNzc09ialsnLW1vei0nK3RdID0gY3NzT2JqWyctby0nK3RdID0gY3NzT2JqW3RdID0gdHJhbnNpdGlvbjtcblxuXHRcdFx0XHRcdG5ld0ltZy5jc3MoY3NzT2JqKTtcblx0XHRcdFx0XHRyZXR1cm4gbmV3SW1nO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHRzaG93TWFpbkNvbnRlbnQgPSBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRtZnAuY29udGVudC5jc3MoJ3Zpc2liaWxpdHknLCAndmlzaWJsZScpO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHRvcGVuVGltZW91dCxcblx0XHRcdFx0YW5pbWF0ZWRJbWc7XG5cblx0XHRcdF9tZnBPbignQnVpbGRDb250cm9scycrbnMsIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRpZihtZnAuX2FsbG93Wm9vbSgpKSB7XG5cblx0XHRcdFx0XHRjbGVhclRpbWVvdXQob3BlblRpbWVvdXQpO1xuXHRcdFx0XHRcdG1mcC5jb250ZW50LmNzcygndmlzaWJpbGl0eScsICdoaWRkZW4nKTtcblxuXHRcdFx0XHRcdC8vIEJhc2ljYWxseSwgYWxsIGNvZGUgYmVsb3cgZG9lcyBpcyBjbG9uZXMgZXhpc3RpbmcgaW1hZ2UsIHB1dHMgaW4gb24gdG9wIG9mIHRoZSBjdXJyZW50IG9uZSBhbmQgYW5pbWF0ZWQgaXRcblxuXHRcdFx0XHRcdGltYWdlID0gbWZwLl9nZXRJdGVtVG9ab29tKCk7XG5cblx0XHRcdFx0XHRpZighaW1hZ2UpIHtcblx0XHRcdFx0XHRcdHNob3dNYWluQ29udGVudCgpO1xuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGFuaW1hdGVkSW1nID0gZ2V0RWxUb0FuaW1hdGUoaW1hZ2UpO1xuXG5cdFx0XHRcdFx0YW5pbWF0ZWRJbWcuY3NzKCBtZnAuX2dldE9mZnNldCgpICk7XG5cblx0XHRcdFx0XHRtZnAud3JhcC5hcHBlbmQoYW5pbWF0ZWRJbWcpO1xuXG5cdFx0XHRcdFx0b3BlblRpbWVvdXQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0YW5pbWF0ZWRJbWcuY3NzKCBtZnAuX2dldE9mZnNldCggdHJ1ZSApICk7XG5cdFx0XHRcdFx0XHRvcGVuVGltZW91dCA9IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG5cblx0XHRcdFx0XHRcdFx0c2hvd01haW5Db250ZW50KCk7XG5cblx0XHRcdFx0XHRcdFx0c2V0VGltZW91dChmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdFx0XHRhbmltYXRlZEltZy5yZW1vdmUoKTtcblx0XHRcdFx0XHRcdFx0XHRpbWFnZSA9IGFuaW1hdGVkSW1nID0gbnVsbDtcblx0XHRcdFx0XHRcdFx0XHRfbWZwVHJpZ2dlcignWm9vbUFuaW1hdGlvbkVuZGVkJyk7XG5cdFx0XHRcdFx0XHRcdH0sIDE2KTsgLy8gYXZvaWQgYmxpbmsgd2hlbiBzd2l0Y2hpbmcgaW1hZ2VzXG5cblx0XHRcdFx0XHRcdH0sIGR1cmF0aW9uKTsgLy8gdGhpcyB0aW1lb3V0IGVxdWFscyBhbmltYXRpb24gZHVyYXRpb25cblxuXHRcdFx0XHRcdH0sIDE2KTsgLy8gYnkgYWRkaW5nIHRoaXMgdGltZW91dCB3ZSBhdm9pZCBzaG9ydCBnbGl0Y2ggYXQgdGhlIGJlZ2lubmluZyBvZiBhbmltYXRpb25cblxuXG5cdFx0XHRcdFx0Ly8gTG90cyBvZiB0aW1lb3V0cy4uLlxuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdF9tZnBPbihCRUZPUkVfQ0xPU0VfRVZFTlQrbnMsIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRpZihtZnAuX2FsbG93Wm9vbSgpKSB7XG5cblx0XHRcdFx0XHRjbGVhclRpbWVvdXQob3BlblRpbWVvdXQpO1xuXG5cdFx0XHRcdFx0bWZwLnN0LnJlbW92YWxEZWxheSA9IGR1cmF0aW9uO1xuXG5cdFx0XHRcdFx0aWYoIWltYWdlKSB7XG5cdFx0XHRcdFx0XHRpbWFnZSA9IG1mcC5fZ2V0SXRlbVRvWm9vbSgpO1xuXHRcdFx0XHRcdFx0aWYoIWltYWdlKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGFuaW1hdGVkSW1nID0gZ2V0RWxUb0FuaW1hdGUoaW1hZ2UpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGFuaW1hdGVkSW1nLmNzcyggbWZwLl9nZXRPZmZzZXQodHJ1ZSkgKTtcblx0XHRcdFx0XHRtZnAud3JhcC5hcHBlbmQoYW5pbWF0ZWRJbWcpO1xuXHRcdFx0XHRcdG1mcC5jb250ZW50LmNzcygndmlzaWJpbGl0eScsICdoaWRkZW4nKTtcblxuXHRcdFx0XHRcdHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRhbmltYXRlZEltZy5jc3MoIG1mcC5fZ2V0T2Zmc2V0KCkgKTtcblx0XHRcdFx0XHR9LCAxNik7XG5cdFx0XHRcdH1cblxuXHRcdFx0fSk7XG5cblx0XHRcdF9tZnBPbihDTE9TRV9FVkVOVCtucywgZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGlmKG1mcC5fYWxsb3dab29tKCkpIHtcblx0XHRcdFx0XHRzaG93TWFpbkNvbnRlbnQoKTtcblx0XHRcdFx0XHRpZihhbmltYXRlZEltZykge1xuXHRcdFx0XHRcdFx0YW5pbWF0ZWRJbWcucmVtb3ZlKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGltYWdlID0gbnVsbDtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fSxcblxuXHRcdF9hbGxvd1pvb206IGZ1bmN0aW9uKCkge1xuXHRcdFx0cmV0dXJuIG1mcC5jdXJySXRlbS50eXBlID09PSAnaW1hZ2UnO1xuXHRcdH0sXG5cblx0XHRfZ2V0SXRlbVRvWm9vbTogZnVuY3Rpb24oKSB7XG5cdFx0XHRpZihtZnAuY3Vyckl0ZW0uaGFzU2l6ZSkge1xuXHRcdFx0XHRyZXR1cm4gbWZwLmN1cnJJdGVtLmltZztcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0Ly8gR2V0IGVsZW1lbnQgcG9zdGlvbiByZWxhdGl2ZSB0byB2aWV3cG9ydFxuXHRcdF9nZXRPZmZzZXQ6IGZ1bmN0aW9uKGlzTGFyZ2UpIHtcblx0XHRcdHZhciBlbDtcblx0XHRcdGlmKGlzTGFyZ2UpIHtcblx0XHRcdFx0ZWwgPSBtZnAuY3Vyckl0ZW0uaW1nO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZWwgPSBtZnAuc3Quem9vbS5vcGVuZXIobWZwLmN1cnJJdGVtLmVsIHx8IG1mcC5jdXJySXRlbSk7XG5cdFx0XHR9XG5cblx0XHRcdHZhciBvZmZzZXQgPSBlbC5vZmZzZXQoKTtcblx0XHRcdHZhciBwYWRkaW5nVG9wID0gcGFyc2VJbnQoZWwuY3NzKCdwYWRkaW5nLXRvcCcpLDEwKTtcblx0XHRcdHZhciBwYWRkaW5nQm90dG9tID0gcGFyc2VJbnQoZWwuY3NzKCdwYWRkaW5nLWJvdHRvbScpLDEwKTtcblx0XHRcdG9mZnNldC50b3AgLT0gKCAkKHdpbmRvdykuc2Nyb2xsVG9wKCkgLSBwYWRkaW5nVG9wICk7XG5cblxuXHRcdFx0LypcblxuXHRcdFx0QW5pbWF0aW5nIGxlZnQgKyB0b3AgKyB3aWR0aC9oZWlnaHQgbG9va3MgZ2xpdGNoeSBpbiBGaXJlZm94LCBidXQgcGVyZmVjdCBpbiBDaHJvbWUuIEFuZCB2aWNlLXZlcnNhLlxuXG5cdFx0XHQgKi9cblx0XHRcdHZhciBvYmogPSB7XG5cdFx0XHRcdHdpZHRoOiBlbC53aWR0aCgpLFxuXHRcdFx0XHQvLyBmaXggWmVwdG8gaGVpZ2h0K3BhZGRpbmcgaXNzdWVcblx0XHRcdFx0aGVpZ2h0OiAoX2lzSlEgPyBlbC5pbm5lckhlaWdodCgpIDogZWxbMF0ub2Zmc2V0SGVpZ2h0KSAtIHBhZGRpbmdCb3R0b20gLSBwYWRkaW5nVG9wXG5cdFx0XHR9O1xuXG5cdFx0XHQvLyBJIGhhdGUgdG8gZG8gdGhpcywgYnV0IHRoZXJlIGlzIG5vIGFub3RoZXIgb3B0aW9uXG5cdFx0XHRpZiggZ2V0SGFzTW96VHJhbnNmb3JtKCkgKSB7XG5cdFx0XHRcdG9ialsnLW1vei10cmFuc2Zvcm0nXSA9IG9ialsndHJhbnNmb3JtJ10gPSAndHJhbnNsYXRlKCcgKyBvZmZzZXQubGVmdCArICdweCwnICsgb2Zmc2V0LnRvcCArICdweCknO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0b2JqLmxlZnQgPSBvZmZzZXQubGVmdDtcblx0XHRcdFx0b2JqLnRvcCA9IG9mZnNldC50b3A7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gb2JqO1xuXHRcdH1cblxuXHR9XG59KTtcblxuXG5cbi8qPj56b29tKi9cblxuLyo+PmlmcmFtZSovXG5cbnZhciBJRlJBTUVfTlMgPSAnaWZyYW1lJyxcblx0X2VtcHR5UGFnZSA9ICcvL2Fib3V0OmJsYW5rJyxcblxuXHRfZml4SWZyYW1lQnVncyA9IGZ1bmN0aW9uKGlzU2hvd2luZykge1xuXHRcdGlmKG1mcC5jdXJyVGVtcGxhdGVbSUZSQU1FX05TXSkge1xuXHRcdFx0dmFyIGVsID0gbWZwLmN1cnJUZW1wbGF0ZVtJRlJBTUVfTlNdLmZpbmQoJ2lmcmFtZScpO1xuXHRcdFx0aWYoZWwubGVuZ3RoKSB7XG5cdFx0XHRcdC8vIHJlc2V0IHNyYyBhZnRlciB0aGUgcG9wdXAgaXMgY2xvc2VkIHRvIGF2b2lkIFwidmlkZW8ga2VlcHMgcGxheWluZyBhZnRlciBwb3B1cCBpcyBjbG9zZWRcIiBidWdcblx0XHRcdFx0aWYoIWlzU2hvd2luZykge1xuXHRcdFx0XHRcdGVsWzBdLnNyYyA9IF9lbXB0eVBhZ2U7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBJRTggYmxhY2sgc2NyZWVuIGJ1ZyBmaXhcblx0XHRcdFx0aWYobWZwLmlzSUU4KSB7XG5cdFx0XHRcdFx0ZWwuY3NzKCdkaXNwbGF5JywgaXNTaG93aW5nID8gJ2Jsb2NrJyA6ICdub25lJyk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH07XG5cbiQubWFnbmlmaWNQb3B1cC5yZWdpc3Rlck1vZHVsZShJRlJBTUVfTlMsIHtcblxuXHRvcHRpb25zOiB7XG5cdFx0bWFya3VwOiAnPGRpdiBjbGFzcz1cIm1mcC1pZnJhbWUtc2NhbGVyXCI+Jytcblx0XHRcdFx0XHQnPGRpdiBjbGFzcz1cIm1mcC1jbG9zZVwiPjwvZGl2PicrXG5cdFx0XHRcdFx0JzxpZnJhbWUgY2xhc3M9XCJtZnAtaWZyYW1lXCIgc3JjPVwiLy9hYm91dDpibGFua1wiIGZyYW1lYm9yZGVyPVwiMFwiIGFsbG93ZnVsbHNjcmVlbj48L2lmcmFtZT4nK1xuXHRcdFx0XHQnPC9kaXY+JyxcblxuXHRcdHNyY0FjdGlvbjogJ2lmcmFtZV9zcmMnLFxuXG5cdFx0Ly8gd2UgZG9uJ3QgY2FyZSBhbmQgc3VwcG9ydCBvbmx5IG9uZSBkZWZhdWx0IHR5cGUgb2YgVVJMIGJ5IGRlZmF1bHRcblx0XHRwYXR0ZXJuczoge1xuXHRcdFx0eW91dHViZToge1xuXHRcdFx0XHRpbmRleDogJ3lvdXR1YmUuY29tJyxcblx0XHRcdFx0aWQ6ICd2PScsXG5cdFx0XHRcdHNyYzogJy8vd3d3LnlvdXR1YmUuY29tL2VtYmVkLyVpZCU/YXV0b3BsYXk9MSdcblx0XHRcdH0sXG5cdFx0XHR2aW1lbzoge1xuXHRcdFx0XHRpbmRleDogJ3ZpbWVvLmNvbS8nLFxuXHRcdFx0XHRpZDogJy8nLFxuXHRcdFx0XHRzcmM6ICcvL3BsYXllci52aW1lby5jb20vdmlkZW8vJWlkJT9hdXRvcGxheT0xJ1xuXHRcdFx0fSxcblx0XHRcdGdtYXBzOiB7XG5cdFx0XHRcdGluZGV4OiAnLy9tYXBzLmdvb2dsZS4nLFxuXHRcdFx0XHRzcmM6ICclaWQlJm91dHB1dD1lbWJlZCdcblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cblx0cHJvdG86IHtcblx0XHRpbml0SWZyYW1lOiBmdW5jdGlvbigpIHtcblx0XHRcdG1mcC50eXBlcy5wdXNoKElGUkFNRV9OUyk7XG5cblx0XHRcdF9tZnBPbignQmVmb3JlQ2hhbmdlJywgZnVuY3Rpb24oZSwgcHJldlR5cGUsIG5ld1R5cGUpIHtcblx0XHRcdFx0aWYocHJldlR5cGUgIT09IG5ld1R5cGUpIHtcblx0XHRcdFx0XHRpZihwcmV2VHlwZSA9PT0gSUZSQU1FX05TKSB7XG5cdFx0XHRcdFx0XHRfZml4SWZyYW1lQnVncygpOyAvLyBpZnJhbWUgaWYgcmVtb3ZlZFxuXHRcdFx0XHRcdH0gZWxzZSBpZihuZXdUeXBlID09PSBJRlJBTUVfTlMpIHtcblx0XHRcdFx0XHRcdF9maXhJZnJhbWVCdWdzKHRydWUpOyAvLyBpZnJhbWUgaXMgc2hvd2luZ1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fS8vIGVsc2Uge1xuXHRcdFx0XHRcdC8vIGlmcmFtZSBzb3VyY2UgaXMgc3dpdGNoZWQsIGRvbid0IGRvIGFueXRoaW5nXG5cdFx0XHRcdC8vfVxuXHRcdFx0fSk7XG5cblx0XHRcdF9tZnBPbihDTE9TRV9FVkVOVCArICcuJyArIElGUkFNRV9OUywgZnVuY3Rpb24oKSB7XG5cdFx0XHRcdF9maXhJZnJhbWVCdWdzKCk7XG5cdFx0XHR9KTtcblx0XHR9LFxuXG5cdFx0Z2V0SWZyYW1lOiBmdW5jdGlvbihpdGVtLCB0ZW1wbGF0ZSkge1xuXHRcdFx0dmFyIGVtYmVkU3JjID0gaXRlbS5zcmM7XG5cdFx0XHR2YXIgaWZyYW1lU3QgPSBtZnAuc3QuaWZyYW1lO1xuXG5cdFx0XHQkLmVhY2goaWZyYW1lU3QucGF0dGVybnMsIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRpZihlbWJlZFNyYy5pbmRleE9mKCB0aGlzLmluZGV4ICkgPiAtMSkge1xuXHRcdFx0XHRcdGlmKHRoaXMuaWQpIHtcblx0XHRcdFx0XHRcdGlmKHR5cGVvZiB0aGlzLmlkID09PSAnc3RyaW5nJykge1xuXHRcdFx0XHRcdFx0XHRlbWJlZFNyYyA9IGVtYmVkU3JjLnN1YnN0cihlbWJlZFNyYy5sYXN0SW5kZXhPZih0aGlzLmlkKSt0aGlzLmlkLmxlbmd0aCwgZW1iZWRTcmMubGVuZ3RoKTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdGVtYmVkU3JjID0gdGhpcy5pZC5jYWxsKCB0aGlzLCBlbWJlZFNyYyApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRlbWJlZFNyYyA9IHRoaXMuc3JjLnJlcGxhY2UoJyVpZCUnLCBlbWJlZFNyYyApO1xuXHRcdFx0XHRcdHJldHVybiBmYWxzZTsgLy8gYnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXG5cdFx0XHR2YXIgZGF0YU9iaiA9IHt9O1xuXHRcdFx0aWYoaWZyYW1lU3Quc3JjQWN0aW9uKSB7XG5cdFx0XHRcdGRhdGFPYmpbaWZyYW1lU3Quc3JjQWN0aW9uXSA9IGVtYmVkU3JjO1xuXHRcdFx0fVxuXHRcdFx0bWZwLl9wYXJzZU1hcmt1cCh0ZW1wbGF0ZSwgZGF0YU9iaiwgaXRlbSk7XG5cblx0XHRcdG1mcC51cGRhdGVTdGF0dXMoJ3JlYWR5Jyk7XG5cblx0XHRcdHJldHVybiB0ZW1wbGF0ZTtcblx0XHR9XG5cdH1cbn0pO1xuXG5cblxuLyo+PmlmcmFtZSovXG5cbi8qPj5nYWxsZXJ5Ki9cbi8qKlxuICogR2V0IGxvb3BlZCBpbmRleCBkZXBlbmRpbmcgb24gbnVtYmVyIG9mIHNsaWRlc1xuICovXG52YXIgX2dldExvb3BlZElkID0gZnVuY3Rpb24oaW5kZXgpIHtcblx0XHR2YXIgbnVtU2xpZGVzID0gbWZwLml0ZW1zLmxlbmd0aDtcblx0XHRpZihpbmRleCA+IG51bVNsaWRlcyAtIDEpIHtcblx0XHRcdHJldHVybiBpbmRleCAtIG51bVNsaWRlcztcblx0XHR9IGVsc2UgIGlmKGluZGV4IDwgMCkge1xuXHRcdFx0cmV0dXJuIG51bVNsaWRlcyArIGluZGV4O1xuXHRcdH1cblx0XHRyZXR1cm4gaW5kZXg7XG5cdH0sXG5cdF9yZXBsYWNlQ3VyclRvdGFsID0gZnVuY3Rpb24odGV4dCwgY3VyciwgdG90YWwpIHtcblx0XHRyZXR1cm4gdGV4dC5yZXBsYWNlKC8lY3VyciUvZ2ksIGN1cnIgKyAxKS5yZXBsYWNlKC8ldG90YWwlL2dpLCB0b3RhbCk7XG5cdH07XG5cbiQubWFnbmlmaWNQb3B1cC5yZWdpc3Rlck1vZHVsZSgnZ2FsbGVyeScsIHtcblxuXHRvcHRpb25zOiB7XG5cdFx0ZW5hYmxlZDogZmFsc2UsXG5cdFx0YXJyb3dNYXJrdXA6ICc8YnV0dG9uIHRpdGxlPVwiJXRpdGxlJVwiIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cIm1mcC1hcnJvdyBtZnAtYXJyb3ctJWRpciVcIj48L2J1dHRvbj4nLFxuXHRcdHByZWxvYWQ6IFswLDJdLFxuXHRcdG5hdmlnYXRlQnlJbWdDbGljazogdHJ1ZSxcblx0XHRhcnJvd3M6IHRydWUsXG5cblx0XHR0UHJldjogJ1ByZXZpb3VzIChMZWZ0IGFycm93IGtleSknLFxuXHRcdHROZXh0OiAnTmV4dCAoUmlnaHQgYXJyb3cga2V5KScsXG5cdFx0dENvdW50ZXI6ICclY3VyciUgb2YgJXRvdGFsJSdcblx0fSxcblxuXHRwcm90bzoge1xuXHRcdGluaXRHYWxsZXJ5OiBmdW5jdGlvbigpIHtcblxuXHRcdFx0dmFyIGdTdCA9IG1mcC5zdC5nYWxsZXJ5LFxuXHRcdFx0XHRucyA9ICcubWZwLWdhbGxlcnknO1xuXG5cdFx0XHRtZnAuZGlyZWN0aW9uID0gdHJ1ZTsgLy8gdHJ1ZSAtIG5leHQsIGZhbHNlIC0gcHJldlxuXG5cdFx0XHRpZighZ1N0IHx8ICFnU3QuZW5hYmxlZCApIHJldHVybiBmYWxzZTtcblxuXHRcdFx0X3dyYXBDbGFzc2VzICs9ICcgbWZwLWdhbGxlcnknO1xuXG5cdFx0XHRfbWZwT24oT1BFTl9FVkVOVCtucywgZnVuY3Rpb24oKSB7XG5cblx0XHRcdFx0aWYoZ1N0Lm5hdmlnYXRlQnlJbWdDbGljaykge1xuXHRcdFx0XHRcdG1mcC53cmFwLm9uKCdjbGljaycrbnMsICcubWZwLWltZycsIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0aWYobWZwLml0ZW1zLmxlbmd0aCA+IDEpIHtcblx0XHRcdFx0XHRcdFx0bWZwLm5leHQoKTtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0X2RvY3VtZW50Lm9uKCdrZXlkb3duJytucywgZnVuY3Rpb24oZSkge1xuXHRcdFx0XHRcdGlmIChlLmtleUNvZGUgPT09IDM3KSB7XG5cdFx0XHRcdFx0XHRtZnAucHJldigpO1xuXHRcdFx0XHRcdH0gZWxzZSBpZiAoZS5rZXlDb2RlID09PSAzOSkge1xuXHRcdFx0XHRcdFx0bWZwLm5leHQoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cblx0XHRcdF9tZnBPbignVXBkYXRlU3RhdHVzJytucywgZnVuY3Rpb24oZSwgZGF0YSkge1xuXHRcdFx0XHRpZihkYXRhLnRleHQpIHtcblx0XHRcdFx0XHRkYXRhLnRleHQgPSBfcmVwbGFjZUN1cnJUb3RhbChkYXRhLnRleHQsIG1mcC5jdXJySXRlbS5pbmRleCwgbWZwLml0ZW1zLmxlbmd0aCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXG5cdFx0XHRfbWZwT24oTUFSS1VQX1BBUlNFX0VWRU5UK25zLCBmdW5jdGlvbihlLCBlbGVtZW50LCB2YWx1ZXMsIGl0ZW0pIHtcblx0XHRcdFx0dmFyIGwgPSBtZnAuaXRlbXMubGVuZ3RoO1xuXHRcdFx0XHR2YWx1ZXMuY291bnRlciA9IGwgPiAxID8gX3JlcGxhY2VDdXJyVG90YWwoZ1N0LnRDb3VudGVyLCBpdGVtLmluZGV4LCBsKSA6ICcnO1xuXHRcdFx0fSk7XG5cblx0XHRcdF9tZnBPbignQnVpbGRDb250cm9scycgKyBucywgZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGlmKG1mcC5pdGVtcy5sZW5ndGggPiAxICYmIGdTdC5hcnJvd3MgJiYgIW1mcC5hcnJvd0xlZnQpIHtcblx0XHRcdFx0XHR2YXIgbWFya3VwID0gZ1N0LmFycm93TWFya3VwLFxuXHRcdFx0XHRcdFx0YXJyb3dMZWZ0ID0gbWZwLmFycm93TGVmdCA9ICQoIG1hcmt1cC5yZXBsYWNlKC8ldGl0bGUlL2dpLCBnU3QudFByZXYpLnJlcGxhY2UoLyVkaXIlL2dpLCAnbGVmdCcpICkuYWRkQ2xhc3MoUFJFVkVOVF9DTE9TRV9DTEFTUyksXG5cdFx0XHRcdFx0XHRhcnJvd1JpZ2h0ID0gbWZwLmFycm93UmlnaHQgPSAkKCBtYXJrdXAucmVwbGFjZSgvJXRpdGxlJS9naSwgZ1N0LnROZXh0KS5yZXBsYWNlKC8lZGlyJS9naSwgJ3JpZ2h0JykgKS5hZGRDbGFzcyhQUkVWRU5UX0NMT1NFX0NMQVNTKTtcblxuXHRcdFx0XHRcdGFycm93TGVmdC5jbGljayhmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdG1mcC5wcmV2KCk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0YXJyb3dSaWdodC5jbGljayhmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdG1mcC5uZXh0KCk7XG5cdFx0XHRcdFx0fSk7XG5cblx0XHRcdFx0XHRtZnAuY29udGFpbmVyLmFwcGVuZChhcnJvd0xlZnQuYWRkKGFycm93UmlnaHQpKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cblx0XHRcdF9tZnBPbihDSEFOR0VfRVZFTlQrbnMsIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRpZihtZnAuX3ByZWxvYWRUaW1lb3V0KSBjbGVhclRpbWVvdXQobWZwLl9wcmVsb2FkVGltZW91dCk7XG5cblx0XHRcdFx0bWZwLl9wcmVsb2FkVGltZW91dCA9IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0bWZwLnByZWxvYWROZWFyYnlJbWFnZXMoKTtcblx0XHRcdFx0XHRtZnAuX3ByZWxvYWRUaW1lb3V0ID0gbnVsbDtcblx0XHRcdFx0fSwgMTYpO1xuXHRcdFx0fSk7XG5cblxuXHRcdFx0X21mcE9uKENMT1NFX0VWRU5UK25zLCBmdW5jdGlvbigpIHtcblx0XHRcdFx0X2RvY3VtZW50Lm9mZihucyk7XG5cdFx0XHRcdG1mcC53cmFwLm9mZignY2xpY2snK25zKTtcblx0XHRcdFx0bWZwLmFycm93UmlnaHQgPSBtZnAuYXJyb3dMZWZ0ID0gbnVsbDtcblx0XHRcdH0pO1xuXG5cdFx0fSxcblx0XHRuZXh0OiBmdW5jdGlvbigpIHtcblx0XHRcdG1mcC5kaXJlY3Rpb24gPSB0cnVlO1xuXHRcdFx0bWZwLmluZGV4ID0gX2dldExvb3BlZElkKG1mcC5pbmRleCArIDEpO1xuXHRcdFx0bWZwLnVwZGF0ZUl0ZW1IVE1MKCk7XG5cdFx0fSxcblx0XHRwcmV2OiBmdW5jdGlvbigpIHtcblx0XHRcdG1mcC5kaXJlY3Rpb24gPSBmYWxzZTtcblx0XHRcdG1mcC5pbmRleCA9IF9nZXRMb29wZWRJZChtZnAuaW5kZXggLSAxKTtcblx0XHRcdG1mcC51cGRhdGVJdGVtSFRNTCgpO1xuXHRcdH0sXG5cdFx0Z29UbzogZnVuY3Rpb24obmV3SW5kZXgpIHtcblx0XHRcdG1mcC5kaXJlY3Rpb24gPSAobmV3SW5kZXggPj0gbWZwLmluZGV4KTtcblx0XHRcdG1mcC5pbmRleCA9IG5ld0luZGV4O1xuXHRcdFx0bWZwLnVwZGF0ZUl0ZW1IVE1MKCk7XG5cdFx0fSxcblx0XHRwcmVsb2FkTmVhcmJ5SW1hZ2VzOiBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBwID0gbWZwLnN0LmdhbGxlcnkucHJlbG9hZCxcblx0XHRcdFx0cHJlbG9hZEJlZm9yZSA9IE1hdGgubWluKHBbMF0sIG1mcC5pdGVtcy5sZW5ndGgpLFxuXHRcdFx0XHRwcmVsb2FkQWZ0ZXIgPSBNYXRoLm1pbihwWzFdLCBtZnAuaXRlbXMubGVuZ3RoKSxcblx0XHRcdFx0aTtcblxuXHRcdFx0Zm9yKGkgPSAxOyBpIDw9IChtZnAuZGlyZWN0aW9uID8gcHJlbG9hZEFmdGVyIDogcHJlbG9hZEJlZm9yZSk7IGkrKykge1xuXHRcdFx0XHRtZnAuX3ByZWxvYWRJdGVtKG1mcC5pbmRleCtpKTtcblx0XHRcdH1cblx0XHRcdGZvcihpID0gMTsgaSA8PSAobWZwLmRpcmVjdGlvbiA/IHByZWxvYWRCZWZvcmUgOiBwcmVsb2FkQWZ0ZXIpOyBpKyspIHtcblx0XHRcdFx0bWZwLl9wcmVsb2FkSXRlbShtZnAuaW5kZXgtaSk7XG5cdFx0XHR9XG5cdFx0fSxcblx0XHRfcHJlbG9hZEl0ZW06IGZ1bmN0aW9uKGluZGV4KSB7XG5cdFx0XHRpbmRleCA9IF9nZXRMb29wZWRJZChpbmRleCk7XG5cblx0XHRcdGlmKG1mcC5pdGVtc1tpbmRleF0ucHJlbG9hZGVkKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0dmFyIGl0ZW0gPSBtZnAuaXRlbXNbaW5kZXhdO1xuXHRcdFx0aWYoIWl0ZW0ucGFyc2VkKSB7XG5cdFx0XHRcdGl0ZW0gPSBtZnAucGFyc2VFbCggaW5kZXggKTtcblx0XHRcdH1cblxuXHRcdFx0X21mcFRyaWdnZXIoJ0xhenlMb2FkJywgaXRlbSk7XG5cblx0XHRcdGlmKGl0ZW0udHlwZSA9PT0gJ2ltYWdlJykge1xuXHRcdFx0XHRpdGVtLmltZyA9ICQoJzxpbWcgY2xhc3M9XCJtZnAtaW1nXCIgLz4nKS5vbignbG9hZC5tZnBsb2FkZXInLCBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRpdGVtLmhhc1NpemUgPSB0cnVlO1xuXHRcdFx0XHR9KS5vbignZXJyb3IubWZwbG9hZGVyJywgZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0aXRlbS5oYXNTaXplID0gdHJ1ZTtcblx0XHRcdFx0XHRpdGVtLmxvYWRFcnJvciA9IHRydWU7XG5cdFx0XHRcdFx0X21mcFRyaWdnZXIoJ0xhenlMb2FkRXJyb3InLCBpdGVtKTtcblx0XHRcdFx0fSkuYXR0cignc3JjJywgaXRlbS5zcmMpO1xuXHRcdFx0fVxuXG5cblx0XHRcdGl0ZW0ucHJlbG9hZGVkID0gdHJ1ZTtcblx0XHR9XG5cdH1cbn0pO1xuXG4vKj4+Z2FsbGVyeSovXG5cbi8qPj5yZXRpbmEqL1xuXG52YXIgUkVUSU5BX05TID0gJ3JldGluYSc7XG5cbiQubWFnbmlmaWNQb3B1cC5yZWdpc3Rlck1vZHVsZShSRVRJTkFfTlMsIHtcblx0b3B0aW9uczoge1xuXHRcdHJlcGxhY2VTcmM6IGZ1bmN0aW9uKGl0ZW0pIHtcblx0XHRcdHJldHVybiBpdGVtLnNyYy5yZXBsYWNlKC9cXC5cXHcrJC8sIGZ1bmN0aW9uKG0pIHsgcmV0dXJuICdAMngnICsgbTsgfSk7XG5cdFx0fSxcblx0XHRyYXRpbzogMSAvLyBGdW5jdGlvbiBvciBudW1iZXIuICBTZXQgdG8gMSB0byBkaXNhYmxlLlxuXHR9LFxuXHRwcm90bzoge1xuXHRcdGluaXRSZXRpbmE6IGZ1bmN0aW9uKCkge1xuXHRcdFx0aWYod2luZG93LmRldmljZVBpeGVsUmF0aW8gPiAxKSB7XG5cblx0XHRcdFx0dmFyIHN0ID0gbWZwLnN0LnJldGluYSxcblx0XHRcdFx0XHRyYXRpbyA9IHN0LnJhdGlvO1xuXG5cdFx0XHRcdHJhdGlvID0gIWlzTmFOKHJhdGlvKSA/IHJhdGlvIDogcmF0aW8oKTtcblxuXHRcdFx0XHRpZihyYXRpbyA+IDEpIHtcblx0XHRcdFx0XHRfbWZwT24oJ0ltYWdlSGFzU2l6ZScgKyAnLicgKyBSRVRJTkFfTlMsIGZ1bmN0aW9uKGUsIGl0ZW0pIHtcblx0XHRcdFx0XHRcdGl0ZW0uaW1nLmNzcyh7XG5cdFx0XHRcdFx0XHRcdCdtYXgtd2lkdGgnOiBpdGVtLmltZ1swXS5uYXR1cmFsV2lkdGggLyByYXRpbyxcblx0XHRcdFx0XHRcdFx0J3dpZHRoJzogJzEwMCUnXG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRfbWZwT24oJ0VsZW1lbnRQYXJzZScgKyAnLicgKyBSRVRJTkFfTlMsIGZ1bmN0aW9uKGUsIGl0ZW0pIHtcblx0XHRcdFx0XHRcdGl0ZW0uc3JjID0gc3QucmVwbGFjZVNyYyhpdGVtLCByYXRpbyk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdH1cblx0fVxufSk7XG5cbi8qPj5yZXRpbmEqL1xuIF9jaGVja0luc3RhbmNlKCk7IH0pKTsiLCIvKiFcclxuICogQG5hbWUgSmF2YVNjcmlwdC9Ob2RlSlMgTWVyZ2UgdjEuMi4xXHJcbiAqIEBhdXRob3IgeWVpa29zXHJcbiAqIEByZXBvc2l0b3J5IGh0dHBzOi8vZ2l0aHViLmNvbS95ZWlrb3MvanMubWVyZ2VcclxuXHJcbiAqIENvcHlyaWdodCAyMDE0IHllaWtvcyAtIE1JVCBsaWNlbnNlXHJcbiAqIGh0dHBzOi8vcmF3LmdpdGh1Yi5jb20veWVpa29zL2pzLm1lcmdlL21hc3Rlci9MSUNFTlNFXHJcbiAqL1xyXG5cclxuOyhmdW5jdGlvbihpc05vZGUpIHtcclxuXHJcblx0LyoqXHJcblx0ICogTWVyZ2Ugb25lIG9yIG1vcmUgb2JqZWN0cyBcclxuXHQgKiBAcGFyYW0gYm9vbD8gY2xvbmVcclxuXHQgKiBAcGFyYW0gbWl4ZWQsLi4uIGFyZ3VtZW50c1xyXG5cdCAqIEByZXR1cm4gb2JqZWN0XHJcblx0ICovXHJcblxyXG5cdHZhciBQdWJsaWMgPSBmdW5jdGlvbihjbG9uZSkge1xyXG5cclxuXHRcdHJldHVybiBtZXJnZShjbG9uZSA9PT0gdHJ1ZSwgZmFsc2UsIGFyZ3VtZW50cyk7XHJcblxyXG5cdH0sIHB1YmxpY05hbWUgPSAnbWVyZ2UnO1xyXG5cclxuXHQvKipcclxuXHQgKiBNZXJnZSB0d28gb3IgbW9yZSBvYmplY3RzIHJlY3Vyc2l2ZWx5IFxyXG5cdCAqIEBwYXJhbSBib29sPyBjbG9uZVxyXG5cdCAqIEBwYXJhbSBtaXhlZCwuLi4gYXJndW1lbnRzXHJcblx0ICogQHJldHVybiBvYmplY3RcclxuXHQgKi9cclxuXHJcblx0UHVibGljLnJlY3Vyc2l2ZSA9IGZ1bmN0aW9uKGNsb25lKSB7XHJcblxyXG5cdFx0cmV0dXJuIG1lcmdlKGNsb25lID09PSB0cnVlLCB0cnVlLCBhcmd1bWVudHMpO1xyXG5cclxuXHR9O1xyXG5cclxuXHQvKipcclxuXHQgKiBDbG9uZSB0aGUgaW5wdXQgcmVtb3ZpbmcgYW55IHJlZmVyZW5jZVxyXG5cdCAqIEBwYXJhbSBtaXhlZCBpbnB1dFxyXG5cdCAqIEByZXR1cm4gbWl4ZWRcclxuXHQgKi9cclxuXHJcblx0UHVibGljLmNsb25lID0gZnVuY3Rpb24oaW5wdXQpIHtcclxuXHJcblx0XHR2YXIgb3V0cHV0ID0gaW5wdXQsXHJcblx0XHRcdHR5cGUgPSB0eXBlT2YoaW5wdXQpLFxyXG5cdFx0XHRpbmRleCwgc2l6ZTtcclxuXHJcblx0XHRpZiAodHlwZSA9PT0gJ2FycmF5Jykge1xyXG5cclxuXHRcdFx0b3V0cHV0ID0gW107XHJcblx0XHRcdHNpemUgPSBpbnB1dC5sZW5ndGg7XHJcblxyXG5cdFx0XHRmb3IgKGluZGV4PTA7aW5kZXg8c2l6ZTsrK2luZGV4KVxyXG5cclxuXHRcdFx0XHRvdXRwdXRbaW5kZXhdID0gUHVibGljLmNsb25lKGlucHV0W2luZGV4XSk7XHJcblxyXG5cdFx0fSBlbHNlIGlmICh0eXBlID09PSAnb2JqZWN0Jykge1xyXG5cclxuXHRcdFx0b3V0cHV0ID0ge307XHJcblxyXG5cdFx0XHRmb3IgKGluZGV4IGluIGlucHV0KVxyXG5cclxuXHRcdFx0XHRvdXRwdXRbaW5kZXhdID0gUHVibGljLmNsb25lKGlucHV0W2luZGV4XSk7XHJcblxyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBvdXRwdXQ7XHJcblxyXG5cdH07XHJcblxyXG5cdC8qKlxyXG5cdCAqIE1lcmdlIHR3byBvYmplY3RzIHJlY3Vyc2l2ZWx5XHJcblx0ICogQHBhcmFtIG1peGVkIGlucHV0XHJcblx0ICogQHBhcmFtIG1peGVkIGV4dGVuZFxyXG5cdCAqIEByZXR1cm4gbWl4ZWRcclxuXHQgKi9cclxuXHJcblx0ZnVuY3Rpb24gbWVyZ2VfcmVjdXJzaXZlKGJhc2UsIGV4dGVuZCkge1xyXG5cclxuXHRcdGlmICh0eXBlT2YoYmFzZSkgIT09ICdvYmplY3QnKVxyXG5cclxuXHRcdFx0cmV0dXJuIGV4dGVuZDtcclxuXHJcblx0XHRmb3IgKHZhciBrZXkgaW4gZXh0ZW5kKSB7XHJcblxyXG5cdFx0XHRpZiAodHlwZU9mKGJhc2Vba2V5XSkgPT09ICdvYmplY3QnICYmIHR5cGVPZihleHRlbmRba2V5XSkgPT09ICdvYmplY3QnKSB7XHJcblxyXG5cdFx0XHRcdGJhc2Vba2V5XSA9IG1lcmdlX3JlY3Vyc2l2ZShiYXNlW2tleV0sIGV4dGVuZFtrZXldKTtcclxuXHJcblx0XHRcdH0gZWxzZSB7XHJcblxyXG5cdFx0XHRcdGJhc2Vba2V5XSA9IGV4dGVuZFtrZXldO1xyXG5cclxuXHRcdFx0fVxyXG5cclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gYmFzZTtcclxuXHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBNZXJnZSB0d28gb3IgbW9yZSBvYmplY3RzXHJcblx0ICogQHBhcmFtIGJvb2wgY2xvbmVcclxuXHQgKiBAcGFyYW0gYm9vbCByZWN1cnNpdmVcclxuXHQgKiBAcGFyYW0gYXJyYXkgYXJndlxyXG5cdCAqIEByZXR1cm4gb2JqZWN0XHJcblx0ICovXHJcblxyXG5cdGZ1bmN0aW9uIG1lcmdlKGNsb25lLCByZWN1cnNpdmUsIGFyZ3YpIHtcclxuXHJcblx0XHR2YXIgcmVzdWx0ID0gYXJndlswXSxcclxuXHRcdFx0c2l6ZSA9IGFyZ3YubGVuZ3RoO1xyXG5cclxuXHRcdGlmIChjbG9uZSB8fCB0eXBlT2YocmVzdWx0KSAhPT0gJ29iamVjdCcpXHJcblxyXG5cdFx0XHRyZXN1bHQgPSB7fTtcclxuXHJcblx0XHRmb3IgKHZhciBpbmRleD0wO2luZGV4PHNpemU7KytpbmRleCkge1xyXG5cclxuXHRcdFx0dmFyIGl0ZW0gPSBhcmd2W2luZGV4XSxcclxuXHJcblx0XHRcdFx0dHlwZSA9IHR5cGVPZihpdGVtKTtcclxuXHJcblx0XHRcdGlmICh0eXBlICE9PSAnb2JqZWN0JykgY29udGludWU7XHJcblxyXG5cdFx0XHRmb3IgKHZhciBrZXkgaW4gaXRlbSkge1xyXG5cclxuXHRcdFx0XHRpZiAoa2V5ID09PSAnX19wcm90b19fJykgY29udGludWU7XHJcblxyXG5cdFx0XHRcdHZhciBzaXRlbSA9IGNsb25lID8gUHVibGljLmNsb25lKGl0ZW1ba2V5XSkgOiBpdGVtW2tleV07XHJcblxyXG5cdFx0XHRcdGlmIChyZWN1cnNpdmUpIHtcclxuXHJcblx0XHRcdFx0XHRyZXN1bHRba2V5XSA9IG1lcmdlX3JlY3Vyc2l2ZShyZXN1bHRba2V5XSwgc2l0ZW0pO1xyXG5cclxuXHRcdFx0XHR9IGVsc2Uge1xyXG5cclxuXHRcdFx0XHRcdHJlc3VsdFtrZXldID0gc2l0ZW07XHJcblxyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdH1cclxuXHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBHZXQgdHlwZSBvZiB2YXJpYWJsZVxyXG5cdCAqIEBwYXJhbSBtaXhlZCBpbnB1dFxyXG5cdCAqIEByZXR1cm4gc3RyaW5nXHJcblx0ICpcclxuXHQgKiBAc2VlIGh0dHA6Ly9qc3BlcmYuY29tL3R5cGVvZnZhclxyXG5cdCAqL1xyXG5cclxuXHRmdW5jdGlvbiB0eXBlT2YoaW5wdXQpIHtcclxuXHJcblx0XHRyZXR1cm4gKHt9KS50b1N0cmluZy5jYWxsKGlucHV0KS5zbGljZSg4LCAtMSkudG9Mb3dlckNhc2UoKTtcclxuXHJcblx0fVxyXG5cclxuXHRpZiAoaXNOb2RlKSB7XHJcblxyXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBQdWJsaWM7XHJcblxyXG5cdH0gZWxzZSB7XHJcblxyXG5cdFx0d2luZG93W3B1YmxpY05hbWVdID0gUHVibGljO1xyXG5cclxuXHR9XHJcblxyXG59KSh0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0JyAmJiBtb2R1bGUgJiYgdHlwZW9mIG1vZHVsZS5leHBvcnRzID09PSAnb2JqZWN0JyAmJiBtb2R1bGUuZXhwb3J0cyk7IiwiLy8hIG1vbWVudC5qc1xuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgPyBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKSA6XG4gICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKGZhY3RvcnkpIDpcbiAgICBnbG9iYWwubW9tZW50ID0gZmFjdG9yeSgpXG59KHRoaXMsIChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIHZhciBob29rQ2FsbGJhY2s7XG5cbiAgICBmdW5jdGlvbiBob29rcyAoKSB7XG4gICAgICAgIHJldHVybiBob29rQ2FsbGJhY2suYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICB9XG5cbiAgICAvLyBUaGlzIGlzIGRvbmUgdG8gcmVnaXN0ZXIgdGhlIG1ldGhvZCBjYWxsZWQgd2l0aCBtb21lbnQoKVxuICAgIC8vIHdpdGhvdXQgY3JlYXRpbmcgY2lyY3VsYXIgZGVwZW5kZW5jaWVzLlxuICAgIGZ1bmN0aW9uIHNldEhvb2tDYWxsYmFjayAoY2FsbGJhY2spIHtcbiAgICAgICAgaG9va0NhbGxiYWNrID0gY2FsbGJhY2s7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNBcnJheShpbnB1dCkge1xuICAgICAgICByZXR1cm4gaW5wdXQgaW5zdGFuY2VvZiBBcnJheSB8fCBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoaW5wdXQpID09PSAnW29iamVjdCBBcnJheV0nO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzT2JqZWN0KGlucHV0KSB7XG4gICAgICAgIC8vIElFOCB3aWxsIHRyZWF0IHVuZGVmaW5lZCBhbmQgbnVsbCBhcyBvYmplY3QgaWYgaXQgd2Fzbid0IGZvclxuICAgICAgICAvLyBpbnB1dCAhPSBudWxsXG4gICAgICAgIHJldHVybiBpbnB1dCAhPSBudWxsICYmIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChpbnB1dCkgPT09ICdbb2JqZWN0IE9iamVjdF0nO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzT2JqZWN0RW1wdHkob2JqKSB7XG4gICAgICAgIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcykge1xuICAgICAgICAgICAgcmV0dXJuIChPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhvYmopLmxlbmd0aCA9PT0gMCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgaztcbiAgICAgICAgICAgIGZvciAoayBpbiBvYmopIHtcbiAgICAgICAgICAgICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KGspKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzVW5kZWZpbmVkKGlucHV0KSB7XG4gICAgICAgIHJldHVybiBpbnB1dCA9PT0gdm9pZCAwO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzTnVtYmVyKGlucHV0KSB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgaW5wdXQgPT09ICdudW1iZXInIHx8IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChpbnB1dCkgPT09ICdbb2JqZWN0IE51bWJlcl0nO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzRGF0ZShpbnB1dCkge1xuICAgICAgICByZXR1cm4gaW5wdXQgaW5zdGFuY2VvZiBEYXRlIHx8IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChpbnB1dCkgPT09ICdbb2JqZWN0IERhdGVdJztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYXAoYXJyLCBmbikge1xuICAgICAgICB2YXIgcmVzID0gW10sIGk7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgIHJlcy5wdXNoKGZuKGFycltpXSwgaSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaGFzT3duUHJvcChhLCBiKSB7XG4gICAgICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYSwgYik7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZXh0ZW5kKGEsIGIpIHtcbiAgICAgICAgZm9yICh2YXIgaSBpbiBiKSB7XG4gICAgICAgICAgICBpZiAoaGFzT3duUHJvcChiLCBpKSkge1xuICAgICAgICAgICAgICAgIGFbaV0gPSBiW2ldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGhhc093blByb3AoYiwgJ3RvU3RyaW5nJykpIHtcbiAgICAgICAgICAgIGEudG9TdHJpbmcgPSBiLnRvU3RyaW5nO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGhhc093blByb3AoYiwgJ3ZhbHVlT2YnKSkge1xuICAgICAgICAgICAgYS52YWx1ZU9mID0gYi52YWx1ZU9mO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGE7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlVVRDIChpbnB1dCwgZm9ybWF0LCBsb2NhbGUsIHN0cmljdCkge1xuICAgICAgICByZXR1cm4gY3JlYXRlTG9jYWxPclVUQyhpbnB1dCwgZm9ybWF0LCBsb2NhbGUsIHN0cmljdCwgdHJ1ZSkudXRjKCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZGVmYXVsdFBhcnNpbmdGbGFncygpIHtcbiAgICAgICAgLy8gV2UgbmVlZCB0byBkZWVwIGNsb25lIHRoaXMgb2JqZWN0LlxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZW1wdHkgICAgICAgICAgIDogZmFsc2UsXG4gICAgICAgICAgICB1bnVzZWRUb2tlbnMgICAgOiBbXSxcbiAgICAgICAgICAgIHVudXNlZElucHV0ICAgICA6IFtdLFxuICAgICAgICAgICAgb3ZlcmZsb3cgICAgICAgIDogLTIsXG4gICAgICAgICAgICBjaGFyc0xlZnRPdmVyICAgOiAwLFxuICAgICAgICAgICAgbnVsbElucHV0ICAgICAgIDogZmFsc2UsXG4gICAgICAgICAgICBpbnZhbGlkTW9udGggICAgOiBudWxsLFxuICAgICAgICAgICAgaW52YWxpZEZvcm1hdCAgIDogZmFsc2UsXG4gICAgICAgICAgICB1c2VySW52YWxpZGF0ZWQgOiBmYWxzZSxcbiAgICAgICAgICAgIGlzbyAgICAgICAgICAgICA6IGZhbHNlLFxuICAgICAgICAgICAgcGFyc2VkRGF0ZVBhcnRzIDogW10sXG4gICAgICAgICAgICBtZXJpZGllbSAgICAgICAgOiBudWxsLFxuICAgICAgICAgICAgcmZjMjgyMiAgICAgICAgIDogZmFsc2UsXG4gICAgICAgICAgICB3ZWVrZGF5TWlzbWF0Y2ggOiBmYWxzZVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFBhcnNpbmdGbGFncyhtKSB7XG4gICAgICAgIGlmIChtLl9wZiA9PSBudWxsKSB7XG4gICAgICAgICAgICBtLl9wZiA9IGRlZmF1bHRQYXJzaW5nRmxhZ3MoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbS5fcGY7XG4gICAgfVxuXG4gICAgdmFyIHNvbWU7XG4gICAgaWYgKEFycmF5LnByb3RvdHlwZS5zb21lKSB7XG4gICAgICAgIHNvbWUgPSBBcnJheS5wcm90b3R5cGUuc29tZTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBzb21lID0gZnVuY3Rpb24gKGZ1bikge1xuICAgICAgICAgICAgdmFyIHQgPSBPYmplY3QodGhpcyk7XG4gICAgICAgICAgICB2YXIgbGVuID0gdC5sZW5ndGggPj4+IDA7XG5cbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAoaSBpbiB0ICYmIGZ1bi5jYWxsKHRoaXMsIHRbaV0sIGksIHQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzVmFsaWQobSkge1xuICAgICAgICBpZiAobS5faXNWYWxpZCA9PSBudWxsKSB7XG4gICAgICAgICAgICB2YXIgZmxhZ3MgPSBnZXRQYXJzaW5nRmxhZ3MobSk7XG4gICAgICAgICAgICB2YXIgcGFyc2VkUGFydHMgPSBzb21lLmNhbGwoZmxhZ3MucGFyc2VkRGF0ZVBhcnRzLCBmdW5jdGlvbiAoaSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpICE9IG51bGw7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHZhciBpc05vd1ZhbGlkID0gIWlzTmFOKG0uX2QuZ2V0VGltZSgpKSAmJlxuICAgICAgICAgICAgICAgIGZsYWdzLm92ZXJmbG93IDwgMCAmJlxuICAgICAgICAgICAgICAgICFmbGFncy5lbXB0eSAmJlxuICAgICAgICAgICAgICAgICFmbGFncy5pbnZhbGlkTW9udGggJiZcbiAgICAgICAgICAgICAgICAhZmxhZ3MuaW52YWxpZFdlZWtkYXkgJiZcbiAgICAgICAgICAgICAgICAhZmxhZ3Mud2Vla2RheU1pc21hdGNoICYmXG4gICAgICAgICAgICAgICAgIWZsYWdzLm51bGxJbnB1dCAmJlxuICAgICAgICAgICAgICAgICFmbGFncy5pbnZhbGlkRm9ybWF0ICYmXG4gICAgICAgICAgICAgICAgIWZsYWdzLnVzZXJJbnZhbGlkYXRlZCAmJlxuICAgICAgICAgICAgICAgICghZmxhZ3MubWVyaWRpZW0gfHwgKGZsYWdzLm1lcmlkaWVtICYmIHBhcnNlZFBhcnRzKSk7XG5cbiAgICAgICAgICAgIGlmIChtLl9zdHJpY3QpIHtcbiAgICAgICAgICAgICAgICBpc05vd1ZhbGlkID0gaXNOb3dWYWxpZCAmJlxuICAgICAgICAgICAgICAgICAgICBmbGFncy5jaGFyc0xlZnRPdmVyID09PSAwICYmXG4gICAgICAgICAgICAgICAgICAgIGZsYWdzLnVudXNlZFRva2Vucy5sZW5ndGggPT09IDAgJiZcbiAgICAgICAgICAgICAgICAgICAgZmxhZ3MuYmlnSG91ciA9PT0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoT2JqZWN0LmlzRnJvemVuID09IG51bGwgfHwgIU9iamVjdC5pc0Zyb3plbihtKSkge1xuICAgICAgICAgICAgICAgIG0uX2lzVmFsaWQgPSBpc05vd1ZhbGlkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzTm93VmFsaWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG0uX2lzVmFsaWQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlSW52YWxpZCAoZmxhZ3MpIHtcbiAgICAgICAgdmFyIG0gPSBjcmVhdGVVVEMoTmFOKTtcbiAgICAgICAgaWYgKGZsYWdzICE9IG51bGwpIHtcbiAgICAgICAgICAgIGV4dGVuZChnZXRQYXJzaW5nRmxhZ3MobSksIGZsYWdzKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhtKS51c2VySW52YWxpZGF0ZWQgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgLy8gUGx1Z2lucyB0aGF0IGFkZCBwcm9wZXJ0aWVzIHNob3VsZCBhbHNvIGFkZCB0aGUga2V5IGhlcmUgKG51bGwgdmFsdWUpLFxuICAgIC8vIHNvIHdlIGNhbiBwcm9wZXJseSBjbG9uZSBvdXJzZWx2ZXMuXG4gICAgdmFyIG1vbWVudFByb3BlcnRpZXMgPSBob29rcy5tb21lbnRQcm9wZXJ0aWVzID0gW107XG5cbiAgICBmdW5jdGlvbiBjb3B5Q29uZmlnKHRvLCBmcm9tKSB7XG4gICAgICAgIHZhciBpLCBwcm9wLCB2YWw7XG5cbiAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChmcm9tLl9pc0FNb21lbnRPYmplY3QpKSB7XG4gICAgICAgICAgICB0by5faXNBTW9tZW50T2JqZWN0ID0gZnJvbS5faXNBTW9tZW50T2JqZWN0O1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNVbmRlZmluZWQoZnJvbS5faSkpIHtcbiAgICAgICAgICAgIHRvLl9pID0gZnJvbS5faTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGZyb20uX2YpKSB7XG4gICAgICAgICAgICB0by5fZiA9IGZyb20uX2Y7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChmcm9tLl9sKSkge1xuICAgICAgICAgICAgdG8uX2wgPSBmcm9tLl9sO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNVbmRlZmluZWQoZnJvbS5fc3RyaWN0KSkge1xuICAgICAgICAgICAgdG8uX3N0cmljdCA9IGZyb20uX3N0cmljdDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGZyb20uX3R6bSkpIHtcbiAgICAgICAgICAgIHRvLl90em0gPSBmcm9tLl90em07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChmcm9tLl9pc1VUQykpIHtcbiAgICAgICAgICAgIHRvLl9pc1VUQyA9IGZyb20uX2lzVVRDO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNVbmRlZmluZWQoZnJvbS5fb2Zmc2V0KSkge1xuICAgICAgICAgICAgdG8uX29mZnNldCA9IGZyb20uX29mZnNldDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGZyb20uX3BmKSkge1xuICAgICAgICAgICAgdG8uX3BmID0gZ2V0UGFyc2luZ0ZsYWdzKGZyb20pO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNVbmRlZmluZWQoZnJvbS5fbG9jYWxlKSkge1xuICAgICAgICAgICAgdG8uX2xvY2FsZSA9IGZyb20uX2xvY2FsZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChtb21lbnRQcm9wZXJ0aWVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBtb21lbnRQcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgcHJvcCA9IG1vbWVudFByb3BlcnRpZXNbaV07XG4gICAgICAgICAgICAgICAgdmFsID0gZnJvbVtwcm9wXTtcbiAgICAgICAgICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKHZhbCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdG9bcHJvcF0gPSB2YWw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRvO1xuICAgIH1cblxuICAgIHZhciB1cGRhdGVJblByb2dyZXNzID0gZmFsc2U7XG5cbiAgICAvLyBNb21lbnQgcHJvdG90eXBlIG9iamVjdFxuICAgIGZ1bmN0aW9uIE1vbWVudChjb25maWcpIHtcbiAgICAgICAgY29weUNvbmZpZyh0aGlzLCBjb25maWcpO1xuICAgICAgICB0aGlzLl9kID0gbmV3IERhdGUoY29uZmlnLl9kICE9IG51bGwgPyBjb25maWcuX2QuZ2V0VGltZSgpIDogTmFOKTtcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgdGhpcy5fZCA9IG5ldyBEYXRlKE5hTik7XG4gICAgICAgIH1cbiAgICAgICAgLy8gUHJldmVudCBpbmZpbml0ZSBsb29wIGluIGNhc2UgdXBkYXRlT2Zmc2V0IGNyZWF0ZXMgbmV3IG1vbWVudFxuICAgICAgICAvLyBvYmplY3RzLlxuICAgICAgICBpZiAodXBkYXRlSW5Qcm9ncmVzcyA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHVwZGF0ZUluUHJvZ3Jlc3MgPSB0cnVlO1xuICAgICAgICAgICAgaG9va3MudXBkYXRlT2Zmc2V0KHRoaXMpO1xuICAgICAgICAgICAgdXBkYXRlSW5Qcm9ncmVzcyA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNNb21lbnQgKG9iaikge1xuICAgICAgICByZXR1cm4gb2JqIGluc3RhbmNlb2YgTW9tZW50IHx8IChvYmogIT0gbnVsbCAmJiBvYmouX2lzQU1vbWVudE9iamVjdCAhPSBudWxsKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhYnNGbG9vciAobnVtYmVyKSB7XG4gICAgICAgIGlmIChudW1iZXIgPCAwKSB7XG4gICAgICAgICAgICAvLyAtMCAtPiAwXG4gICAgICAgICAgICByZXR1cm4gTWF0aC5jZWlsKG51bWJlcikgfHwgMDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBNYXRoLmZsb29yKG51bWJlcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0b0ludChhcmd1bWVudEZvckNvZXJjaW9uKSB7XG4gICAgICAgIHZhciBjb2VyY2VkTnVtYmVyID0gK2FyZ3VtZW50Rm9yQ29lcmNpb24sXG4gICAgICAgICAgICB2YWx1ZSA9IDA7XG5cbiAgICAgICAgaWYgKGNvZXJjZWROdW1iZXIgIT09IDAgJiYgaXNGaW5pdGUoY29lcmNlZE51bWJlcikpIHtcbiAgICAgICAgICAgIHZhbHVlID0gYWJzRmxvb3IoY29lcmNlZE51bWJlcik7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgLy8gY29tcGFyZSB0d28gYXJyYXlzLCByZXR1cm4gdGhlIG51bWJlciBvZiBkaWZmZXJlbmNlc1xuICAgIGZ1bmN0aW9uIGNvbXBhcmVBcnJheXMoYXJyYXkxLCBhcnJheTIsIGRvbnRDb252ZXJ0KSB7XG4gICAgICAgIHZhciBsZW4gPSBNYXRoLm1pbihhcnJheTEubGVuZ3RoLCBhcnJheTIubGVuZ3RoKSxcbiAgICAgICAgICAgIGxlbmd0aERpZmYgPSBNYXRoLmFicyhhcnJheTEubGVuZ3RoIC0gYXJyYXkyLmxlbmd0aCksXG4gICAgICAgICAgICBkaWZmcyA9IDAsXG4gICAgICAgICAgICBpO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICAgIGlmICgoZG9udENvbnZlcnQgJiYgYXJyYXkxW2ldICE9PSBhcnJheTJbaV0pIHx8XG4gICAgICAgICAgICAgICAgKCFkb250Q29udmVydCAmJiB0b0ludChhcnJheTFbaV0pICE9PSB0b0ludChhcnJheTJbaV0pKSkge1xuICAgICAgICAgICAgICAgIGRpZmZzKys7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRpZmZzICsgbGVuZ3RoRGlmZjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB3YXJuKG1zZykge1xuICAgICAgICBpZiAoaG9va3Muc3VwcHJlc3NEZXByZWNhdGlvbldhcm5pbmdzID09PSBmYWxzZSAmJlxuICAgICAgICAgICAgICAgICh0eXBlb2YgY29uc29sZSAhPT0gICd1bmRlZmluZWQnKSAmJiBjb25zb2xlLndhcm4pIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignRGVwcmVjYXRpb24gd2FybmluZzogJyArIG1zZyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBkZXByZWNhdGUobXNnLCBmbikge1xuICAgICAgICB2YXIgZmlyc3RUaW1lID0gdHJ1ZTtcblxuICAgICAgICByZXR1cm4gZXh0ZW5kKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmIChob29rcy5kZXByZWNhdGlvbkhhbmRsZXIgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGhvb2tzLmRlcHJlY2F0aW9uSGFuZGxlcihudWxsLCBtc2cpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGZpcnN0VGltZSkge1xuICAgICAgICAgICAgICAgIHZhciBhcmdzID0gW107XG4gICAgICAgICAgICAgICAgdmFyIGFyZztcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBhcmcgPSAnJztcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBhcmd1bWVudHNbaV0gPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmcgKz0gJ1xcblsnICsgaSArICddICc7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gYXJndW1lbnRzWzBdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnICs9IGtleSArICc6ICcgKyBhcmd1bWVudHNbMF1ba2V5XSArICcsICc7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSBhcmcuc2xpY2UoMCwgLTIpOyAvLyBSZW1vdmUgdHJhaWxpbmcgY29tbWEgYW5kIHNwYWNlXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSBhcmd1bWVudHNbaV07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYXJncy5wdXNoKGFyZyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHdhcm4obXNnICsgJ1xcbkFyZ3VtZW50czogJyArIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3MpLmpvaW4oJycpICsgJ1xcbicgKyAobmV3IEVycm9yKCkpLnN0YWNrKTtcbiAgICAgICAgICAgICAgICBmaXJzdFRpbWUgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9LCBmbik7XG4gICAgfVxuXG4gICAgdmFyIGRlcHJlY2F0aW9ucyA9IHt9O1xuXG4gICAgZnVuY3Rpb24gZGVwcmVjYXRlU2ltcGxlKG5hbWUsIG1zZykge1xuICAgICAgICBpZiAoaG9va3MuZGVwcmVjYXRpb25IYW5kbGVyICE9IG51bGwpIHtcbiAgICAgICAgICAgIGhvb2tzLmRlcHJlY2F0aW9uSGFuZGxlcihuYW1lLCBtc2cpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghZGVwcmVjYXRpb25zW25hbWVdKSB7XG4gICAgICAgICAgICB3YXJuKG1zZyk7XG4gICAgICAgICAgICBkZXByZWNhdGlvbnNbbmFtZV0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaG9va3Muc3VwcHJlc3NEZXByZWNhdGlvbldhcm5pbmdzID0gZmFsc2U7XG4gICAgaG9va3MuZGVwcmVjYXRpb25IYW5kbGVyID0gbnVsbDtcblxuICAgIGZ1bmN0aW9uIGlzRnVuY3Rpb24oaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIGlucHV0IGluc3RhbmNlb2YgRnVuY3Rpb24gfHwgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGlucHV0KSA9PT0gJ1tvYmplY3QgRnVuY3Rpb25dJztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzZXQgKGNvbmZpZykge1xuICAgICAgICB2YXIgcHJvcCwgaTtcbiAgICAgICAgZm9yIChpIGluIGNvbmZpZykge1xuICAgICAgICAgICAgcHJvcCA9IGNvbmZpZ1tpXTtcbiAgICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKHByb3ApKSB7XG4gICAgICAgICAgICAgICAgdGhpc1tpXSA9IHByb3A7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXNbJ18nICsgaV0gPSBwcm9wO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2NvbmZpZyA9IGNvbmZpZztcbiAgICAgICAgLy8gTGVuaWVudCBvcmRpbmFsIHBhcnNpbmcgYWNjZXB0cyBqdXN0IGEgbnVtYmVyIGluIGFkZGl0aW9uIHRvXG4gICAgICAgIC8vIG51bWJlciArIChwb3NzaWJseSkgc3R1ZmYgY29taW5nIGZyb20gX2RheU9mTW9udGhPcmRpbmFsUGFyc2UuXG4gICAgICAgIC8vIFRPRE86IFJlbW92ZSBcIm9yZGluYWxQYXJzZVwiIGZhbGxiYWNrIGluIG5leHQgbWFqb3IgcmVsZWFzZS5cbiAgICAgICAgdGhpcy5fZGF5T2ZNb250aE9yZGluYWxQYXJzZUxlbmllbnQgPSBuZXcgUmVnRXhwKFxuICAgICAgICAgICAgKHRoaXMuX2RheU9mTW9udGhPcmRpbmFsUGFyc2Uuc291cmNlIHx8IHRoaXMuX29yZGluYWxQYXJzZS5zb3VyY2UpICtcbiAgICAgICAgICAgICAgICAnfCcgKyAoL1xcZHsxLDJ9Lykuc291cmNlKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtZXJnZUNvbmZpZ3MocGFyZW50Q29uZmlnLCBjaGlsZENvbmZpZykge1xuICAgICAgICB2YXIgcmVzID0gZXh0ZW5kKHt9LCBwYXJlbnRDb25maWcpLCBwcm9wO1xuICAgICAgICBmb3IgKHByb3AgaW4gY2hpbGRDb25maWcpIHtcbiAgICAgICAgICAgIGlmIChoYXNPd25Qcm9wKGNoaWxkQ29uZmlnLCBwcm9wKSkge1xuICAgICAgICAgICAgICAgIGlmIChpc09iamVjdChwYXJlbnRDb25maWdbcHJvcF0pICYmIGlzT2JqZWN0KGNoaWxkQ29uZmlnW3Byb3BdKSkge1xuICAgICAgICAgICAgICAgICAgICByZXNbcHJvcF0gPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgZXh0ZW5kKHJlc1twcm9wXSwgcGFyZW50Q29uZmlnW3Byb3BdKTtcbiAgICAgICAgICAgICAgICAgICAgZXh0ZW5kKHJlc1twcm9wXSwgY2hpbGRDb25maWdbcHJvcF0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2hpbGRDb25maWdbcHJvcF0gIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICByZXNbcHJvcF0gPSBjaGlsZENvbmZpZ1twcm9wXTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgcmVzW3Byb3BdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmb3IgKHByb3AgaW4gcGFyZW50Q29uZmlnKSB7XG4gICAgICAgICAgICBpZiAoaGFzT3duUHJvcChwYXJlbnRDb25maWcsIHByb3ApICYmXG4gICAgICAgICAgICAgICAgICAgICFoYXNPd25Qcm9wKGNoaWxkQ29uZmlnLCBwcm9wKSAmJlxuICAgICAgICAgICAgICAgICAgICBpc09iamVjdChwYXJlbnRDb25maWdbcHJvcF0pKSB7XG4gICAgICAgICAgICAgICAgLy8gbWFrZSBzdXJlIGNoYW5nZXMgdG8gcHJvcGVydGllcyBkb24ndCBtb2RpZnkgcGFyZW50IGNvbmZpZ1xuICAgICAgICAgICAgICAgIHJlc1twcm9wXSA9IGV4dGVuZCh7fSwgcmVzW3Byb3BdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIExvY2FsZShjb25maWcpIHtcbiAgICAgICAgaWYgKGNvbmZpZyAhPSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLnNldChjb25maWcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGtleXM7XG5cbiAgICBpZiAoT2JqZWN0LmtleXMpIHtcbiAgICAgICAga2V5cyA9IE9iamVjdC5rZXlzO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGtleXMgPSBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgICAgICB2YXIgaSwgcmVzID0gW107XG4gICAgICAgICAgICBmb3IgKGkgaW4gb2JqKSB7XG4gICAgICAgICAgICAgICAgaWYgKGhhc093blByb3Aob2JqLCBpKSkge1xuICAgICAgICAgICAgICAgICAgICByZXMucHVzaChpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIHZhciBkZWZhdWx0Q2FsZW5kYXIgPSB7XG4gICAgICAgIHNhbWVEYXkgOiAnW1RvZGF5IGF0XSBMVCcsXG4gICAgICAgIG5leHREYXkgOiAnW1RvbW9ycm93IGF0XSBMVCcsXG4gICAgICAgIG5leHRXZWVrIDogJ2RkZGQgW2F0XSBMVCcsXG4gICAgICAgIGxhc3REYXkgOiAnW1llc3RlcmRheSBhdF0gTFQnLFxuICAgICAgICBsYXN0V2VlayA6ICdbTGFzdF0gZGRkZCBbYXRdIExUJyxcbiAgICAgICAgc2FtZUVsc2UgOiAnTCdcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gY2FsZW5kYXIgKGtleSwgbW9tLCBub3cpIHtcbiAgICAgICAgdmFyIG91dHB1dCA9IHRoaXMuX2NhbGVuZGFyW2tleV0gfHwgdGhpcy5fY2FsZW5kYXJbJ3NhbWVFbHNlJ107XG4gICAgICAgIHJldHVybiBpc0Z1bmN0aW9uKG91dHB1dCkgPyBvdXRwdXQuY2FsbChtb20sIG5vdykgOiBvdXRwdXQ7XG4gICAgfVxuXG4gICAgdmFyIGRlZmF1bHRMb25nRGF0ZUZvcm1hdCA9IHtcbiAgICAgICAgTFRTICA6ICdoOm1tOnNzIEEnLFxuICAgICAgICBMVCAgIDogJ2g6bW0gQScsXG4gICAgICAgIEwgICAgOiAnTU0vREQvWVlZWScsXG4gICAgICAgIExMICAgOiAnTU1NTSBELCBZWVlZJyxcbiAgICAgICAgTExMICA6ICdNTU1NIEQsIFlZWVkgaDptbSBBJyxcbiAgICAgICAgTExMTCA6ICdkZGRkLCBNTU1NIEQsIFlZWVkgaDptbSBBJ1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBsb25nRGF0ZUZvcm1hdCAoa2V5KSB7XG4gICAgICAgIHZhciBmb3JtYXQgPSB0aGlzLl9sb25nRGF0ZUZvcm1hdFtrZXldLFxuICAgICAgICAgICAgZm9ybWF0VXBwZXIgPSB0aGlzLl9sb25nRGF0ZUZvcm1hdFtrZXkudG9VcHBlckNhc2UoKV07XG5cbiAgICAgICAgaWYgKGZvcm1hdCB8fCAhZm9ybWF0VXBwZXIpIHtcbiAgICAgICAgICAgIHJldHVybiBmb3JtYXQ7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9sb25nRGF0ZUZvcm1hdFtrZXldID0gZm9ybWF0VXBwZXIucmVwbGFjZSgvTU1NTXxNTXxERHxkZGRkL2csIGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIHJldHVybiB2YWwuc2xpY2UoMSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiB0aGlzLl9sb25nRGF0ZUZvcm1hdFtrZXldO1xuICAgIH1cblxuICAgIHZhciBkZWZhdWx0SW52YWxpZERhdGUgPSAnSW52YWxpZCBkYXRlJztcblxuICAgIGZ1bmN0aW9uIGludmFsaWREYXRlICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ludmFsaWREYXRlO1xuICAgIH1cblxuICAgIHZhciBkZWZhdWx0T3JkaW5hbCA9ICclZCc7XG4gICAgdmFyIGRlZmF1bHREYXlPZk1vbnRoT3JkaW5hbFBhcnNlID0gL1xcZHsxLDJ9LztcblxuICAgIGZ1bmN0aW9uIG9yZGluYWwgKG51bWJlcikge1xuICAgICAgICByZXR1cm4gdGhpcy5fb3JkaW5hbC5yZXBsYWNlKCclZCcsIG51bWJlcik7XG4gICAgfVxuXG4gICAgdmFyIGRlZmF1bHRSZWxhdGl2ZVRpbWUgPSB7XG4gICAgICAgIGZ1dHVyZSA6ICdpbiAlcycsXG4gICAgICAgIHBhc3QgICA6ICclcyBhZ28nLFxuICAgICAgICBzICA6ICdhIGZldyBzZWNvbmRzJyxcbiAgICAgICAgc3MgOiAnJWQgc2Vjb25kcycsXG4gICAgICAgIG0gIDogJ2EgbWludXRlJyxcbiAgICAgICAgbW0gOiAnJWQgbWludXRlcycsXG4gICAgICAgIGggIDogJ2FuIGhvdXInLFxuICAgICAgICBoaCA6ICclZCBob3VycycsXG4gICAgICAgIGQgIDogJ2EgZGF5JyxcbiAgICAgICAgZGQgOiAnJWQgZGF5cycsXG4gICAgICAgIE0gIDogJ2EgbW9udGgnLFxuICAgICAgICBNTSA6ICclZCBtb250aHMnLFxuICAgICAgICB5ICA6ICdhIHllYXInLFxuICAgICAgICB5eSA6ICclZCB5ZWFycydcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gcmVsYXRpdmVUaW1lIChudW1iZXIsIHdpdGhvdXRTdWZmaXgsIHN0cmluZywgaXNGdXR1cmUpIHtcbiAgICAgICAgdmFyIG91dHB1dCA9IHRoaXMuX3JlbGF0aXZlVGltZVtzdHJpbmddO1xuICAgICAgICByZXR1cm4gKGlzRnVuY3Rpb24ob3V0cHV0KSkgP1xuICAgICAgICAgICAgb3V0cHV0KG51bWJlciwgd2l0aG91dFN1ZmZpeCwgc3RyaW5nLCBpc0Z1dHVyZSkgOlxuICAgICAgICAgICAgb3V0cHV0LnJlcGxhY2UoLyVkL2ksIG51bWJlcik7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcGFzdEZ1dHVyZSAoZGlmZiwgb3V0cHV0KSB7XG4gICAgICAgIHZhciBmb3JtYXQgPSB0aGlzLl9yZWxhdGl2ZVRpbWVbZGlmZiA+IDAgPyAnZnV0dXJlJyA6ICdwYXN0J107XG4gICAgICAgIHJldHVybiBpc0Z1bmN0aW9uKGZvcm1hdCkgPyBmb3JtYXQob3V0cHV0KSA6IGZvcm1hdC5yZXBsYWNlKC8lcy9pLCBvdXRwdXQpO1xuICAgIH1cblxuICAgIHZhciBhbGlhc2VzID0ge307XG5cbiAgICBmdW5jdGlvbiBhZGRVbml0QWxpYXMgKHVuaXQsIHNob3J0aGFuZCkge1xuICAgICAgICB2YXIgbG93ZXJDYXNlID0gdW5pdC50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBhbGlhc2VzW2xvd2VyQ2FzZV0gPSBhbGlhc2VzW2xvd2VyQ2FzZSArICdzJ10gPSBhbGlhc2VzW3Nob3J0aGFuZF0gPSB1bml0O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG5vcm1hbGl6ZVVuaXRzKHVuaXRzKSB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgdW5pdHMgPT09ICdzdHJpbmcnID8gYWxpYXNlc1t1bml0c10gfHwgYWxpYXNlc1t1bml0cy50b0xvd2VyQ2FzZSgpXSA6IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBub3JtYWxpemVPYmplY3RVbml0cyhpbnB1dE9iamVjdCkge1xuICAgICAgICB2YXIgbm9ybWFsaXplZElucHV0ID0ge30sXG4gICAgICAgICAgICBub3JtYWxpemVkUHJvcCxcbiAgICAgICAgICAgIHByb3A7XG5cbiAgICAgICAgZm9yIChwcm9wIGluIGlucHV0T2JqZWN0KSB7XG4gICAgICAgICAgICBpZiAoaGFzT3duUHJvcChpbnB1dE9iamVjdCwgcHJvcCkpIHtcbiAgICAgICAgICAgICAgICBub3JtYWxpemVkUHJvcCA9IG5vcm1hbGl6ZVVuaXRzKHByb3ApO1xuICAgICAgICAgICAgICAgIGlmIChub3JtYWxpemVkUHJvcCkge1xuICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVkSW5wdXRbbm9ybWFsaXplZFByb3BdID0gaW5wdXRPYmplY3RbcHJvcF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZWRJbnB1dDtcbiAgICB9XG5cbiAgICB2YXIgcHJpb3JpdGllcyA9IHt9O1xuXG4gICAgZnVuY3Rpb24gYWRkVW5pdFByaW9yaXR5KHVuaXQsIHByaW9yaXR5KSB7XG4gICAgICAgIHByaW9yaXRpZXNbdW5pdF0gPSBwcmlvcml0eTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRQcmlvcml0aXplZFVuaXRzKHVuaXRzT2JqKSB7XG4gICAgICAgIHZhciB1bml0cyA9IFtdO1xuICAgICAgICBmb3IgKHZhciB1IGluIHVuaXRzT2JqKSB7XG4gICAgICAgICAgICB1bml0cy5wdXNoKHt1bml0OiB1LCBwcmlvcml0eTogcHJpb3JpdGllc1t1XX0pO1xuICAgICAgICB9XG4gICAgICAgIHVuaXRzLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgICAgIHJldHVybiBhLnByaW9yaXR5IC0gYi5wcmlvcml0eTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB1bml0cztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB6ZXJvRmlsbChudW1iZXIsIHRhcmdldExlbmd0aCwgZm9yY2VTaWduKSB7XG4gICAgICAgIHZhciBhYnNOdW1iZXIgPSAnJyArIE1hdGguYWJzKG51bWJlciksXG4gICAgICAgICAgICB6ZXJvc1RvRmlsbCA9IHRhcmdldExlbmd0aCAtIGFic051bWJlci5sZW5ndGgsXG4gICAgICAgICAgICBzaWduID0gbnVtYmVyID49IDA7XG4gICAgICAgIHJldHVybiAoc2lnbiA/IChmb3JjZVNpZ24gPyAnKycgOiAnJykgOiAnLScpICtcbiAgICAgICAgICAgIE1hdGgucG93KDEwLCBNYXRoLm1heCgwLCB6ZXJvc1RvRmlsbCkpLnRvU3RyaW5nKCkuc3Vic3RyKDEpICsgYWJzTnVtYmVyO1xuICAgIH1cblxuICAgIHZhciBmb3JtYXR0aW5nVG9rZW5zID0gLyhcXFtbXlxcW10qXFxdKXwoXFxcXCk/KFtIaF1tbShzcyk/fE1vfE1NP00/TT98RG98REREb3xERD9EP0Q/fGRkZD9kP3xkbz98d1tvfHddP3xXW298V10/fFFvP3xZWVlZWVl8WVlZWVl8WVlZWXxZWXxnZyhnZ2c/KT98R0coR0dHPyk/fGV8RXxhfEF8aGg/fEhIP3xraz98bW0/fHNzP3xTezEsOX18eHxYfHp6P3xaWj98LikvZztcblxuICAgIHZhciBsb2NhbEZvcm1hdHRpbmdUb2tlbnMgPSAvKFxcW1teXFxbXSpcXF0pfChcXFxcKT8oTFRTfExUfExMP0w/TD98bHsxLDR9KS9nO1xuXG4gICAgdmFyIGZvcm1hdEZ1bmN0aW9ucyA9IHt9O1xuXG4gICAgdmFyIGZvcm1hdFRva2VuRnVuY3Rpb25zID0ge307XG5cbiAgICAvLyB0b2tlbjogICAgJ00nXG4gICAgLy8gcGFkZGVkOiAgIFsnTU0nLCAyXVxuICAgIC8vIG9yZGluYWw6ICAnTW8nXG4gICAgLy8gY2FsbGJhY2s6IGZ1bmN0aW9uICgpIHsgdGhpcy5tb250aCgpICsgMSB9XG4gICAgZnVuY3Rpb24gYWRkRm9ybWF0VG9rZW4gKHRva2VuLCBwYWRkZWQsIG9yZGluYWwsIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBmdW5jID0gY2FsbGJhY2s7XG4gICAgICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBmdW5jID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzW2NhbGxiYWNrXSgpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodG9rZW4pIHtcbiAgICAgICAgICAgIGZvcm1hdFRva2VuRnVuY3Rpb25zW3Rva2VuXSA9IGZ1bmM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBhZGRlZCkge1xuICAgICAgICAgICAgZm9ybWF0VG9rZW5GdW5jdGlvbnNbcGFkZGVkWzBdXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gemVyb0ZpbGwoZnVuYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpLCBwYWRkZWRbMV0sIHBhZGRlZFsyXSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcmRpbmFsKSB7XG4gICAgICAgICAgICBmb3JtYXRUb2tlbkZ1bmN0aW9uc1tvcmRpbmFsXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkub3JkaW5hbChmdW5jLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyksIHRva2VuKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZW1vdmVGb3JtYXR0aW5nVG9rZW5zKGlucHV0KSB7XG4gICAgICAgIGlmIChpbnB1dC5tYXRjaCgvXFxbW1xcc1xcU10vKSkge1xuICAgICAgICAgICAgcmV0dXJuIGlucHV0LnJlcGxhY2UoL15cXFt8XFxdJC9nLCAnJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlucHV0LnJlcGxhY2UoL1xcXFwvZywgJycpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1ha2VGb3JtYXRGdW5jdGlvbihmb3JtYXQpIHtcbiAgICAgICAgdmFyIGFycmF5ID0gZm9ybWF0Lm1hdGNoKGZvcm1hdHRpbmdUb2tlbnMpLCBpLCBsZW5ndGg7XG5cbiAgICAgICAgZm9yIChpID0gMCwgbGVuZ3RoID0gYXJyYXkubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChmb3JtYXRUb2tlbkZ1bmN0aW9uc1thcnJheVtpXV0pIHtcbiAgICAgICAgICAgICAgICBhcnJheVtpXSA9IGZvcm1hdFRva2VuRnVuY3Rpb25zW2FycmF5W2ldXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgYXJyYXlbaV0gPSByZW1vdmVGb3JtYXR0aW5nVG9rZW5zKGFycmF5W2ldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAobW9tKSB7XG4gICAgICAgICAgICB2YXIgb3V0cHV0ID0gJycsIGk7XG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBvdXRwdXQgKz0gaXNGdW5jdGlvbihhcnJheVtpXSkgPyBhcnJheVtpXS5jYWxsKG1vbSwgZm9ybWF0KSA6IGFycmF5W2ldO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG91dHB1dDtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBmb3JtYXQgZGF0ZSB1c2luZyBuYXRpdmUgZGF0ZSBvYmplY3RcbiAgICBmdW5jdGlvbiBmb3JtYXRNb21lbnQobSwgZm9ybWF0KSB7XG4gICAgICAgIGlmICghbS5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBtLmxvY2FsZURhdGEoKS5pbnZhbGlkRGF0ZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9ybWF0ID0gZXhwYW5kRm9ybWF0KGZvcm1hdCwgbS5sb2NhbGVEYXRhKCkpO1xuICAgICAgICBmb3JtYXRGdW5jdGlvbnNbZm9ybWF0XSA9IGZvcm1hdEZ1bmN0aW9uc1tmb3JtYXRdIHx8IG1ha2VGb3JtYXRGdW5jdGlvbihmb3JtYXQpO1xuXG4gICAgICAgIHJldHVybiBmb3JtYXRGdW5jdGlvbnNbZm9ybWF0XShtKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBleHBhbmRGb3JtYXQoZm9ybWF0LCBsb2NhbGUpIHtcbiAgICAgICAgdmFyIGkgPSA1O1xuXG4gICAgICAgIGZ1bmN0aW9uIHJlcGxhY2VMb25nRGF0ZUZvcm1hdFRva2VucyhpbnB1dCkge1xuICAgICAgICAgICAgcmV0dXJuIGxvY2FsZS5sb25nRGF0ZUZvcm1hdChpbnB1dCkgfHwgaW5wdXQ7XG4gICAgICAgIH1cblxuICAgICAgICBsb2NhbEZvcm1hdHRpbmdUb2tlbnMubGFzdEluZGV4ID0gMDtcbiAgICAgICAgd2hpbGUgKGkgPj0gMCAmJiBsb2NhbEZvcm1hdHRpbmdUb2tlbnMudGVzdChmb3JtYXQpKSB7XG4gICAgICAgICAgICBmb3JtYXQgPSBmb3JtYXQucmVwbGFjZShsb2NhbEZvcm1hdHRpbmdUb2tlbnMsIHJlcGxhY2VMb25nRGF0ZUZvcm1hdFRva2Vucyk7XG4gICAgICAgICAgICBsb2NhbEZvcm1hdHRpbmdUb2tlbnMubGFzdEluZGV4ID0gMDtcbiAgICAgICAgICAgIGkgLT0gMTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmb3JtYXQ7XG4gICAgfVxuXG4gICAgdmFyIG1hdGNoMSAgICAgICAgID0gL1xcZC87ICAgICAgICAgICAgLy8gICAgICAgMCAtIDlcbiAgICB2YXIgbWF0Y2gyICAgICAgICAgPSAvXFxkXFxkLzsgICAgICAgICAgLy8gICAgICAwMCAtIDk5XG4gICAgdmFyIG1hdGNoMyAgICAgICAgID0gL1xcZHszfS87ICAgICAgICAgLy8gICAgIDAwMCAtIDk5OVxuICAgIHZhciBtYXRjaDQgICAgICAgICA9IC9cXGR7NH0vOyAgICAgICAgIC8vICAgIDAwMDAgLSA5OTk5XG4gICAgdmFyIG1hdGNoNiAgICAgICAgID0gL1srLV0/XFxkezZ9LzsgICAgLy8gLTk5OTk5OSAtIDk5OTk5OVxuICAgIHZhciBtYXRjaDF0bzIgICAgICA9IC9cXGRcXGQ/LzsgICAgICAgICAvLyAgICAgICAwIC0gOTlcbiAgICB2YXIgbWF0Y2gzdG80ICAgICAgPSAvXFxkXFxkXFxkXFxkPy87ICAgICAvLyAgICAgOTk5IC0gOTk5OVxuICAgIHZhciBtYXRjaDV0bzYgICAgICA9IC9cXGRcXGRcXGRcXGRcXGRcXGQ/LzsgLy8gICA5OTk5OSAtIDk5OTk5OVxuICAgIHZhciBtYXRjaDF0bzMgICAgICA9IC9cXGR7MSwzfS87ICAgICAgIC8vICAgICAgIDAgLSA5OTlcbiAgICB2YXIgbWF0Y2gxdG80ICAgICAgPSAvXFxkezEsNH0vOyAgICAgICAvLyAgICAgICAwIC0gOTk5OVxuICAgIHZhciBtYXRjaDF0bzYgICAgICA9IC9bKy1dP1xcZHsxLDZ9LzsgIC8vIC05OTk5OTkgLSA5OTk5OTlcblxuICAgIHZhciBtYXRjaFVuc2lnbmVkICA9IC9cXGQrLzsgICAgICAgICAgIC8vICAgICAgIDAgLSBpbmZcbiAgICB2YXIgbWF0Y2hTaWduZWQgICAgPSAvWystXT9cXGQrLzsgICAgICAvLyAgICAtaW5mIC0gaW5mXG5cbiAgICB2YXIgbWF0Y2hPZmZzZXQgICAgPSAvWnxbKy1dXFxkXFxkOj9cXGRcXGQvZ2k7IC8vICswMDowMCAtMDA6MDAgKzAwMDAgLTAwMDAgb3IgWlxuICAgIHZhciBtYXRjaFNob3J0T2Zmc2V0ID0gL1p8WystXVxcZFxcZCg/Ojo/XFxkXFxkKT8vZ2k7IC8vICswMCAtMDAgKzAwOjAwIC0wMDowMCArMDAwMCAtMDAwMCBvciBaXG5cbiAgICB2YXIgbWF0Y2hUaW1lc3RhbXAgPSAvWystXT9cXGQrKFxcLlxcZHsxLDN9KT8vOyAvLyAxMjM0NTY3ODkgMTIzNDU2Nzg5LjEyM1xuXG4gICAgLy8gYW55IHdvcmQgKG9yIHR3bykgY2hhcmFjdGVycyBvciBudW1iZXJzIGluY2x1ZGluZyB0d28vdGhyZWUgd29yZCBtb250aCBpbiBhcmFiaWMuXG4gICAgLy8gaW5jbHVkZXMgc2NvdHRpc2ggZ2FlbGljIHR3byB3b3JkIGFuZCBoeXBoZW5hdGVkIG1vbnRoc1xuICAgIHZhciBtYXRjaFdvcmQgPSAvWzAtOV17MCwyNTZ9WydhLXpcXHUwMEEwLVxcdTA1RkZcXHUwNzAwLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGMDdcXHVGRjEwLVxcdUZGRUZdezEsMjU2fXxbXFx1MDYwMC1cXHUwNkZGXFwvXXsxLDI1Nn0oXFxzKj9bXFx1MDYwMC1cXHUwNkZGXXsxLDI1Nn0pezEsMn0vaTtcblxuICAgIHZhciByZWdleGVzID0ge307XG5cbiAgICBmdW5jdGlvbiBhZGRSZWdleFRva2VuICh0b2tlbiwgcmVnZXgsIHN0cmljdFJlZ2V4KSB7XG4gICAgICAgIHJlZ2V4ZXNbdG9rZW5dID0gaXNGdW5jdGlvbihyZWdleCkgPyByZWdleCA6IGZ1bmN0aW9uIChpc1N0cmljdCwgbG9jYWxlRGF0YSkge1xuICAgICAgICAgICAgcmV0dXJuIChpc1N0cmljdCAmJiBzdHJpY3RSZWdleCkgPyBzdHJpY3RSZWdleCA6IHJlZ2V4O1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFBhcnNlUmVnZXhGb3JUb2tlbiAodG9rZW4sIGNvbmZpZykge1xuICAgICAgICBpZiAoIWhhc093blByb3AocmVnZXhlcywgdG9rZW4pKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFJlZ0V4cCh1bmVzY2FwZUZvcm1hdCh0b2tlbikpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlZ2V4ZXNbdG9rZW5dKGNvbmZpZy5fc3RyaWN0LCBjb25maWcuX2xvY2FsZSk7XG4gICAgfVxuXG4gICAgLy8gQ29kZSBmcm9tIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMzU2MTQ5My9pcy10aGVyZS1hLXJlZ2V4cC1lc2NhcGUtZnVuY3Rpb24taW4tamF2YXNjcmlwdFxuICAgIGZ1bmN0aW9uIHVuZXNjYXBlRm9ybWF0KHMpIHtcbiAgICAgICAgcmV0dXJuIHJlZ2V4RXNjYXBlKHMucmVwbGFjZSgnXFxcXCcsICcnKS5yZXBsYWNlKC9cXFxcKFxcWyl8XFxcXChcXF0pfFxcWyhbXlxcXVxcW10qKVxcXXxcXFxcKC4pL2csIGZ1bmN0aW9uIChtYXRjaGVkLCBwMSwgcDIsIHAzLCBwNCkge1xuICAgICAgICAgICAgcmV0dXJuIHAxIHx8IHAyIHx8IHAzIHx8IHA0O1xuICAgICAgICB9KSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVnZXhFc2NhcGUocykge1xuICAgICAgICByZXR1cm4gcy5yZXBsYWNlKC9bLVxcL1xcXFxeJCorPy4oKXxbXFxde31dL2csICdcXFxcJCYnKTtcbiAgICB9XG5cbiAgICB2YXIgdG9rZW5zID0ge307XG5cbiAgICBmdW5jdGlvbiBhZGRQYXJzZVRva2VuICh0b2tlbiwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIGksIGZ1bmMgPSBjYWxsYmFjaztcbiAgICAgICAgaWYgKHR5cGVvZiB0b2tlbiA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHRva2VuID0gW3Rva2VuXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNOdW1iZXIoY2FsbGJhY2spKSB7XG4gICAgICAgICAgICBmdW5jID0gZnVuY3Rpb24gKGlucHV0LCBhcnJheSkge1xuICAgICAgICAgICAgICAgIGFycmF5W2NhbGxiYWNrXSA9IHRvSW50KGlucHV0KTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHRva2VuLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB0b2tlbnNbdG9rZW5baV1dID0gZnVuYztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFkZFdlZWtQYXJzZVRva2VuICh0b2tlbiwgY2FsbGJhY2spIHtcbiAgICAgICAgYWRkUGFyc2VUb2tlbih0b2tlbiwgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnLCB0b2tlbikge1xuICAgICAgICAgICAgY29uZmlnLl93ID0gY29uZmlnLl93IHx8IHt9O1xuICAgICAgICAgICAgY2FsbGJhY2soaW5wdXQsIGNvbmZpZy5fdywgY29uZmlnLCB0b2tlbik7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFkZFRpbWVUb0FycmF5RnJvbVRva2VuKHRva2VuLCBpbnB1dCwgY29uZmlnKSB7XG4gICAgICAgIGlmIChpbnB1dCAhPSBudWxsICYmIGhhc093blByb3AodG9rZW5zLCB0b2tlbikpIHtcbiAgICAgICAgICAgIHRva2Vuc1t0b2tlbl0oaW5wdXQsIGNvbmZpZy5fYSwgY29uZmlnLCB0b2tlbik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgWUVBUiA9IDA7XG4gICAgdmFyIE1PTlRIID0gMTtcbiAgICB2YXIgREFURSA9IDI7XG4gICAgdmFyIEhPVVIgPSAzO1xuICAgIHZhciBNSU5VVEUgPSA0O1xuICAgIHZhciBTRUNPTkQgPSA1O1xuICAgIHZhciBNSUxMSVNFQ09ORCA9IDY7XG4gICAgdmFyIFdFRUsgPSA3O1xuICAgIHZhciBXRUVLREFZID0gODtcblxuICAgIC8vIEZPUk1BVFRJTkdcblxuICAgIGFkZEZvcm1hdFRva2VuKCdZJywgMCwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgeSA9IHRoaXMueWVhcigpO1xuICAgICAgICByZXR1cm4geSA8PSA5OTk5ID8gJycgKyB5IDogJysnICsgeTtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKDAsIFsnWVknLCAyXSwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy55ZWFyKCkgJSAxMDA7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ1lZWVknLCAgIDRdLCAgICAgICAwLCAneWVhcicpO1xuICAgIGFkZEZvcm1hdFRva2VuKDAsIFsnWVlZWVknLCAgNV0sICAgICAgIDAsICd5ZWFyJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydZWVlZWVknLCA2LCB0cnVlXSwgMCwgJ3llYXInKTtcblxuICAgIC8vIEFMSUFTRVNcblxuICAgIGFkZFVuaXRBbGlhcygneWVhcicsICd5Jyk7XG5cbiAgICAvLyBQUklPUklUSUVTXG5cbiAgICBhZGRVbml0UHJpb3JpdHkoJ3llYXInLCAxKTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ1knLCAgICAgIG1hdGNoU2lnbmVkKTtcbiAgICBhZGRSZWdleFRva2VuKCdZWScsICAgICBtYXRjaDF0bzIsIG1hdGNoMik7XG4gICAgYWRkUmVnZXhUb2tlbignWVlZWScsICAgbWF0Y2gxdG80LCBtYXRjaDQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ1lZWVlZJywgIG1hdGNoMXRvNiwgbWF0Y2g2KTtcbiAgICBhZGRSZWdleFRva2VuKCdZWVlZWVknLCBtYXRjaDF0bzYsIG1hdGNoNik7XG5cbiAgICBhZGRQYXJzZVRva2VuKFsnWVlZWVknLCAnWVlZWVlZJ10sIFlFQVIpO1xuICAgIGFkZFBhcnNlVG9rZW4oJ1lZWVknLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5KSB7XG4gICAgICAgIGFycmF5W1lFQVJdID0gaW5wdXQubGVuZ3RoID09PSAyID8gaG9va3MucGFyc2VUd29EaWdpdFllYXIoaW5wdXQpIDogdG9JbnQoaW5wdXQpO1xuICAgIH0pO1xuICAgIGFkZFBhcnNlVG9rZW4oJ1lZJywgZnVuY3Rpb24gKGlucHV0LCBhcnJheSkge1xuICAgICAgICBhcnJheVtZRUFSXSA9IGhvb2tzLnBhcnNlVHdvRGlnaXRZZWFyKGlucHV0KTtcbiAgICB9KTtcbiAgICBhZGRQYXJzZVRva2VuKCdZJywgZnVuY3Rpb24gKGlucHV0LCBhcnJheSkge1xuICAgICAgICBhcnJheVtZRUFSXSA9IHBhcnNlSW50KGlucHV0LCAxMCk7XG4gICAgfSk7XG5cbiAgICAvLyBIRUxQRVJTXG5cbiAgICBmdW5jdGlvbiBkYXlzSW5ZZWFyKHllYXIpIHtcbiAgICAgICAgcmV0dXJuIGlzTGVhcFllYXIoeWVhcikgPyAzNjYgOiAzNjU7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNMZWFwWWVhcih5ZWFyKSB7XG4gICAgICAgIHJldHVybiAoeWVhciAlIDQgPT09IDAgJiYgeWVhciAlIDEwMCAhPT0gMCkgfHwgeWVhciAlIDQwMCA9PT0gMDtcbiAgICB9XG5cbiAgICAvLyBIT09LU1xuXG4gICAgaG9va3MucGFyc2VUd29EaWdpdFllYXIgPSBmdW5jdGlvbiAoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIHRvSW50KGlucHV0KSArICh0b0ludChpbnB1dCkgPiA2OCA/IDE5MDAgOiAyMDAwKTtcbiAgICB9O1xuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgdmFyIGdldFNldFllYXIgPSBtYWtlR2V0U2V0KCdGdWxsWWVhcicsIHRydWUpO1xuXG4gICAgZnVuY3Rpb24gZ2V0SXNMZWFwWWVhciAoKSB7XG4gICAgICAgIHJldHVybiBpc0xlYXBZZWFyKHRoaXMueWVhcigpKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYWtlR2V0U2V0ICh1bml0LCBrZWVwVGltZSkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHNldCQxKHRoaXMsIHVuaXQsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICBob29rcy51cGRhdGVPZmZzZXQodGhpcywga2VlcFRpbWUpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZ2V0KHRoaXMsIHVuaXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldCAobW9tLCB1bml0KSB7XG4gICAgICAgIHJldHVybiBtb20uaXNWYWxpZCgpID9cbiAgICAgICAgICAgIG1vbS5fZFsnZ2V0JyArIChtb20uX2lzVVRDID8gJ1VUQycgOiAnJykgKyB1bml0XSgpIDogTmFOO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNldCQxIChtb20sIHVuaXQsIHZhbHVlKSB7XG4gICAgICAgIGlmIChtb20uaXNWYWxpZCgpICYmICFpc05hTih2YWx1ZSkpIHtcbiAgICAgICAgICAgIGlmICh1bml0ID09PSAnRnVsbFllYXInICYmIGlzTGVhcFllYXIobW9tLnllYXIoKSkgJiYgbW9tLm1vbnRoKCkgPT09IDEgJiYgbW9tLmRhdGUoKSA9PT0gMjkpIHtcbiAgICAgICAgICAgICAgICBtb20uX2RbJ3NldCcgKyAobW9tLl9pc1VUQyA/ICdVVEMnIDogJycpICsgdW5pdF0odmFsdWUsIG1vbS5tb250aCgpLCBkYXlzSW5Nb250aCh2YWx1ZSwgbW9tLm1vbnRoKCkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIG1vbS5fZFsnc2V0JyArIChtb20uX2lzVVRDID8gJ1VUQycgOiAnJykgKyB1bml0XSh2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICBmdW5jdGlvbiBzdHJpbmdHZXQgKHVuaXRzKSB7XG4gICAgICAgIHVuaXRzID0gbm9ybWFsaXplVW5pdHModW5pdHMpO1xuICAgICAgICBpZiAoaXNGdW5jdGlvbih0aGlzW3VuaXRzXSkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzW3VuaXRzXSgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuXG4gICAgZnVuY3Rpb24gc3RyaW5nU2V0ICh1bml0cywgdmFsdWUpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB1bml0cyA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIHVuaXRzID0gbm9ybWFsaXplT2JqZWN0VW5pdHModW5pdHMpO1xuICAgICAgICAgICAgdmFyIHByaW9yaXRpemVkID0gZ2V0UHJpb3JpdGl6ZWRVbml0cyh1bml0cyk7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByaW9yaXRpemVkLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdGhpc1twcmlvcml0aXplZFtpXS51bml0XSh1bml0c1twcmlvcml0aXplZFtpXS51bml0XSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB1bml0cyA9IG5vcm1hbGl6ZVVuaXRzKHVuaXRzKTtcbiAgICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKHRoaXNbdW5pdHNdKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzW3VuaXRzXSh2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbW9kKG4sIHgpIHtcbiAgICAgICAgcmV0dXJuICgobiAlIHgpICsgeCkgJSB4O1xuICAgIH1cblxuICAgIHZhciBpbmRleE9mO1xuXG4gICAgaWYgKEFycmF5LnByb3RvdHlwZS5pbmRleE9mKSB7XG4gICAgICAgIGluZGV4T2YgPSBBcnJheS5wcm90b3R5cGUuaW5kZXhPZjtcbiAgICB9IGVsc2Uge1xuICAgICAgICBpbmRleE9mID0gZnVuY3Rpb24gKG8pIHtcbiAgICAgICAgICAgIC8vIEkga25vd1xuICAgICAgICAgICAgdmFyIGk7XG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzW2ldID09PSBvKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBkYXlzSW5Nb250aCh5ZWFyLCBtb250aCkge1xuICAgICAgICBpZiAoaXNOYU4oeWVhcikgfHwgaXNOYU4obW9udGgpKSB7XG4gICAgICAgICAgICByZXR1cm4gTmFOO1xuICAgICAgICB9XG4gICAgICAgIHZhciBtb2RNb250aCA9IG1vZChtb250aCwgMTIpO1xuICAgICAgICB5ZWFyICs9IChtb250aCAtIG1vZE1vbnRoKSAvIDEyO1xuICAgICAgICByZXR1cm4gbW9kTW9udGggPT09IDEgPyAoaXNMZWFwWWVhcih5ZWFyKSA/IDI5IDogMjgpIDogKDMxIC0gbW9kTW9udGggJSA3ICUgMik7XG4gICAgfVxuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ00nLCBbJ01NJywgMl0sICdNbycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubW9udGgoKSArIDE7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbignTU1NJywgMCwgMCwgZnVuY3Rpb24gKGZvcm1hdCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkubW9udGhzU2hvcnQodGhpcywgZm9ybWF0KTtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKCdNTU1NJywgMCwgMCwgZnVuY3Rpb24gKGZvcm1hdCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkubW9udGhzKHRoaXMsIGZvcm1hdCk7XG4gICAgfSk7XG5cbiAgICAvLyBBTElBU0VTXG5cbiAgICBhZGRVbml0QWxpYXMoJ21vbnRoJywgJ00nKTtcblxuICAgIC8vIFBSSU9SSVRZXG5cbiAgICBhZGRVbml0UHJpb3JpdHkoJ21vbnRoJywgOCk7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCdNJywgICAgbWF0Y2gxdG8yKTtcbiAgICBhZGRSZWdleFRva2VuKCdNTScsICAgbWF0Y2gxdG8yLCBtYXRjaDIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ01NTScsICBmdW5jdGlvbiAoaXNTdHJpY3QsIGxvY2FsZSkge1xuICAgICAgICByZXR1cm4gbG9jYWxlLm1vbnRoc1Nob3J0UmVnZXgoaXNTdHJpY3QpO1xuICAgIH0pO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ01NTU0nLCBmdW5jdGlvbiAoaXNTdHJpY3QsIGxvY2FsZSkge1xuICAgICAgICByZXR1cm4gbG9jYWxlLm1vbnRoc1JlZ2V4KGlzU3RyaWN0KTtcbiAgICB9KTtcblxuICAgIGFkZFBhcnNlVG9rZW4oWydNJywgJ01NJ10sIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXkpIHtcbiAgICAgICAgYXJyYXlbTU9OVEhdID0gdG9JbnQoaW5wdXQpIC0gMTtcbiAgICB9KTtcblxuICAgIGFkZFBhcnNlVG9rZW4oWydNTU0nLCAnTU1NTSddLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcsIHRva2VuKSB7XG4gICAgICAgIHZhciBtb250aCA9IGNvbmZpZy5fbG9jYWxlLm1vbnRoc1BhcnNlKGlucHV0LCB0b2tlbiwgY29uZmlnLl9zdHJpY3QpO1xuICAgICAgICAvLyBpZiB3ZSBkaWRuJ3QgZmluZCBhIG1vbnRoIG5hbWUsIG1hcmsgdGhlIGRhdGUgYXMgaW52YWxpZC5cbiAgICAgICAgaWYgKG1vbnRoICE9IG51bGwpIHtcbiAgICAgICAgICAgIGFycmF5W01PTlRIXSA9IG1vbnRoO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuaW52YWxpZE1vbnRoID0gaW5wdXQ7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIExPQ0FMRVNcblxuICAgIHZhciBNT05USFNfSU5fRk9STUFUID0gL0Rbb0RdPyhcXFtbXlxcW1xcXV0qXFxdfFxccykrTU1NTT8vO1xuICAgIHZhciBkZWZhdWx0TG9jYWxlTW9udGhzID0gJ0phbnVhcnlfRmVicnVhcnlfTWFyY2hfQXByaWxfTWF5X0p1bmVfSnVseV9BdWd1c3RfU2VwdGVtYmVyX09jdG9iZXJfTm92ZW1iZXJfRGVjZW1iZXInLnNwbGl0KCdfJyk7XG4gICAgZnVuY3Rpb24gbG9jYWxlTW9udGhzIChtLCBmb3JtYXQpIHtcbiAgICAgICAgaWYgKCFtKSB7XG4gICAgICAgICAgICByZXR1cm4gaXNBcnJheSh0aGlzLl9tb250aHMpID8gdGhpcy5fbW9udGhzIDpcbiAgICAgICAgICAgICAgICB0aGlzLl9tb250aHNbJ3N0YW5kYWxvbmUnXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXNBcnJheSh0aGlzLl9tb250aHMpID8gdGhpcy5fbW9udGhzW20ubW9udGgoKV0gOlxuICAgICAgICAgICAgdGhpcy5fbW9udGhzWyh0aGlzLl9tb250aHMuaXNGb3JtYXQgfHwgTU9OVEhTX0lOX0ZPUk1BVCkudGVzdChmb3JtYXQpID8gJ2Zvcm1hdCcgOiAnc3RhbmRhbG9uZSddW20ubW9udGgoKV07XG4gICAgfVxuXG4gICAgdmFyIGRlZmF1bHRMb2NhbGVNb250aHNTaG9ydCA9ICdKYW5fRmViX01hcl9BcHJfTWF5X0p1bl9KdWxfQXVnX1NlcF9PY3RfTm92X0RlYycuc3BsaXQoJ18nKTtcbiAgICBmdW5jdGlvbiBsb2NhbGVNb250aHNTaG9ydCAobSwgZm9ybWF0KSB7XG4gICAgICAgIGlmICghbSkge1xuICAgICAgICAgICAgcmV0dXJuIGlzQXJyYXkodGhpcy5fbW9udGhzU2hvcnQpID8gdGhpcy5fbW9udGhzU2hvcnQgOlxuICAgICAgICAgICAgICAgIHRoaXMuX21vbnRoc1Nob3J0WydzdGFuZGFsb25lJ107XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlzQXJyYXkodGhpcy5fbW9udGhzU2hvcnQpID8gdGhpcy5fbW9udGhzU2hvcnRbbS5tb250aCgpXSA6XG4gICAgICAgICAgICB0aGlzLl9tb250aHNTaG9ydFtNT05USFNfSU5fRk9STUFULnRlc3QoZm9ybWF0KSA/ICdmb3JtYXQnIDogJ3N0YW5kYWxvbmUnXVttLm1vbnRoKCldO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGhhbmRsZVN0cmljdFBhcnNlKG1vbnRoTmFtZSwgZm9ybWF0LCBzdHJpY3QpIHtcbiAgICAgICAgdmFyIGksIGlpLCBtb20sIGxsYyA9IG1vbnRoTmFtZS50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuICAgICAgICBpZiAoIXRoaXMuX21vbnRoc1BhcnNlKSB7XG4gICAgICAgICAgICAvLyB0aGlzIGlzIG5vdCB1c2VkXG4gICAgICAgICAgICB0aGlzLl9tb250aHNQYXJzZSA9IFtdO1xuICAgICAgICAgICAgdGhpcy5fbG9uZ01vbnRoc1BhcnNlID0gW107XG4gICAgICAgICAgICB0aGlzLl9zaG9ydE1vbnRoc1BhcnNlID0gW107XG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMTI7ICsraSkge1xuICAgICAgICAgICAgICAgIG1vbSA9IGNyZWF0ZVVUQyhbMjAwMCwgaV0pO1xuICAgICAgICAgICAgICAgIHRoaXMuX3Nob3J0TW9udGhzUGFyc2VbaV0gPSB0aGlzLm1vbnRoc1Nob3J0KG1vbSwgJycpLnRvTG9jYWxlTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fbG9uZ01vbnRoc1BhcnNlW2ldID0gdGhpcy5tb250aHMobW9tLCAnJykudG9Mb2NhbGVMb3dlckNhc2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdHJpY3QpIHtcbiAgICAgICAgICAgIGlmIChmb3JtYXQgPT09ICdNTU0nKSB7XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fc2hvcnRNb250aHNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaWkgIT09IC0xID8gaWkgOiBudWxsO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9sb25nTW9udGhzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlpICE9PSAtMSA/IGlpIDogbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChmb3JtYXQgPT09ICdNTU0nKSB7XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fc2hvcnRNb250aHNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICBpZiAoaWkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpaTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fbG9uZ01vbnRoc1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpaSAhPT0gLTEgPyBpaSA6IG51bGw7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX2xvbmdNb250aHNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICBpZiAoaWkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpaTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fc2hvcnRNb250aHNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaWkgIT09IC0xID8gaWkgOiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbG9jYWxlTW9udGhzUGFyc2UgKG1vbnRoTmFtZSwgZm9ybWF0LCBzdHJpY3QpIHtcbiAgICAgICAgdmFyIGksIG1vbSwgcmVnZXg7XG5cbiAgICAgICAgaWYgKHRoaXMuX21vbnRoc1BhcnNlRXhhY3QpIHtcbiAgICAgICAgICAgIHJldHVybiBoYW5kbGVTdHJpY3RQYXJzZS5jYWxsKHRoaXMsIG1vbnRoTmFtZSwgZm9ybWF0LCBzdHJpY3QpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLl9tb250aHNQYXJzZSkge1xuICAgICAgICAgICAgdGhpcy5fbW9udGhzUGFyc2UgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuX2xvbmdNb250aHNQYXJzZSA9IFtdO1xuICAgICAgICAgICAgdGhpcy5fc2hvcnRNb250aHNQYXJzZSA9IFtdO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVE9ETzogYWRkIHNvcnRpbmdcbiAgICAgICAgLy8gU29ydGluZyBtYWtlcyBzdXJlIGlmIG9uZSBtb250aCAob3IgYWJicikgaXMgYSBwcmVmaXggb2YgYW5vdGhlclxuICAgICAgICAvLyBzZWUgc29ydGluZyBpbiBjb21wdXRlTW9udGhzUGFyc2VcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IDEyOyBpKyspIHtcbiAgICAgICAgICAgIC8vIG1ha2UgdGhlIHJlZ2V4IGlmIHdlIGRvbid0IGhhdmUgaXQgYWxyZWFkeVxuICAgICAgICAgICAgbW9tID0gY3JlYXRlVVRDKFsyMDAwLCBpXSk7XG4gICAgICAgICAgICBpZiAoc3RyaWN0ICYmICF0aGlzLl9sb25nTW9udGhzUGFyc2VbaV0pIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9sb25nTW9udGhzUGFyc2VbaV0gPSBuZXcgUmVnRXhwKCdeJyArIHRoaXMubW9udGhzKG1vbSwgJycpLnJlcGxhY2UoJy4nLCAnJykgKyAnJCcsICdpJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2hvcnRNb250aHNQYXJzZVtpXSA9IG5ldyBSZWdFeHAoJ14nICsgdGhpcy5tb250aHNTaG9ydChtb20sICcnKS5yZXBsYWNlKCcuJywgJycpICsgJyQnLCAnaScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFzdHJpY3QgJiYgIXRoaXMuX21vbnRoc1BhcnNlW2ldKSB7XG4gICAgICAgICAgICAgICAgcmVnZXggPSAnXicgKyB0aGlzLm1vbnRocyhtb20sICcnKSArICd8XicgKyB0aGlzLm1vbnRoc1Nob3J0KG1vbSwgJycpO1xuICAgICAgICAgICAgICAgIHRoaXMuX21vbnRoc1BhcnNlW2ldID0gbmV3IFJlZ0V4cChyZWdleC5yZXBsYWNlKCcuJywgJycpLCAnaScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gdGVzdCB0aGUgcmVnZXhcbiAgICAgICAgICAgIGlmIChzdHJpY3QgJiYgZm9ybWF0ID09PSAnTU1NTScgJiYgdGhpcy5fbG9uZ01vbnRoc1BhcnNlW2ldLnRlc3QobW9udGhOYW1lKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChzdHJpY3QgJiYgZm9ybWF0ID09PSAnTU1NJyAmJiB0aGlzLl9zaG9ydE1vbnRoc1BhcnNlW2ldLnRlc3QobW9udGhOYW1lKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICghc3RyaWN0ICYmIHRoaXMuX21vbnRoc1BhcnNlW2ldLnRlc3QobW9udGhOYW1lKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgZnVuY3Rpb24gc2V0TW9udGggKG1vbSwgdmFsdWUpIHtcbiAgICAgICAgdmFyIGRheU9mTW9udGg7XG5cbiAgICAgICAgaWYgKCFtb20uaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICAvLyBObyBvcFxuICAgICAgICAgICAgcmV0dXJuIG1vbTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBpZiAoL15cXGQrJC8udGVzdCh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHRvSW50KHZhbHVlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSBtb20ubG9jYWxlRGF0YSgpLm1vbnRoc1BhcnNlKHZhbHVlKTtcbiAgICAgICAgICAgICAgICAvLyBUT0RPOiBBbm90aGVyIHNpbGVudCBmYWlsdXJlP1xuICAgICAgICAgICAgICAgIGlmICghaXNOdW1iZXIodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBtb207XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZGF5T2ZNb250aCA9IE1hdGgubWluKG1vbS5kYXRlKCksIGRheXNJbk1vbnRoKG1vbS55ZWFyKCksIHZhbHVlKSk7XG4gICAgICAgIG1vbS5fZFsnc2V0JyArIChtb20uX2lzVVRDID8gJ1VUQycgOiAnJykgKyAnTW9udGgnXSh2YWx1ZSwgZGF5T2ZNb250aCk7XG4gICAgICAgIHJldHVybiBtb207XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0U2V0TW9udGggKHZhbHVlKSB7XG4gICAgICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7XG4gICAgICAgICAgICBzZXRNb250aCh0aGlzLCB2YWx1ZSk7XG4gICAgICAgICAgICBob29rcy51cGRhdGVPZmZzZXQodGhpcywgdHJ1ZSk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBnZXQodGhpcywgJ01vbnRoJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXREYXlzSW5Nb250aCAoKSB7XG4gICAgICAgIHJldHVybiBkYXlzSW5Nb250aCh0aGlzLnllYXIoKSwgdGhpcy5tb250aCgpKTtcbiAgICB9XG5cbiAgICB2YXIgZGVmYXVsdE1vbnRoc1Nob3J0UmVnZXggPSBtYXRjaFdvcmQ7XG4gICAgZnVuY3Rpb24gbW9udGhzU2hvcnRSZWdleCAoaXNTdHJpY3QpIHtcbiAgICAgICAgaWYgKHRoaXMuX21vbnRoc1BhcnNlRXhhY3QpIHtcbiAgICAgICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX21vbnRoc1JlZ2V4JykpIHtcbiAgICAgICAgICAgICAgICBjb21wdXRlTW9udGhzUGFyc2UuY2FsbCh0aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpc1N0cmljdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9tb250aHNTaG9ydFN0cmljdFJlZ2V4O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fbW9udGhzU2hvcnRSZWdleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX21vbnRoc1Nob3J0UmVnZXgnKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX21vbnRoc1Nob3J0UmVnZXggPSBkZWZhdWx0TW9udGhzU2hvcnRSZWdleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9tb250aHNTaG9ydFN0cmljdFJlZ2V4ICYmIGlzU3RyaWN0ID9cbiAgICAgICAgICAgICAgICB0aGlzLl9tb250aHNTaG9ydFN0cmljdFJlZ2V4IDogdGhpcy5fbW9udGhzU2hvcnRSZWdleDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHZhciBkZWZhdWx0TW9udGhzUmVnZXggPSBtYXRjaFdvcmQ7XG4gICAgZnVuY3Rpb24gbW9udGhzUmVnZXggKGlzU3RyaWN0KSB7XG4gICAgICAgIGlmICh0aGlzLl9tb250aHNQYXJzZUV4YWN0KSB7XG4gICAgICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ19tb250aHNSZWdleCcpKSB7XG4gICAgICAgICAgICAgICAgY29tcHV0ZU1vbnRoc1BhcnNlLmNhbGwodGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNTdHJpY3QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fbW9udGhzU3RyaWN0UmVnZXg7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9tb250aHNSZWdleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX21vbnRoc1JlZ2V4JykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9tb250aHNSZWdleCA9IGRlZmF1bHRNb250aHNSZWdleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9tb250aHNTdHJpY3RSZWdleCAmJiBpc1N0cmljdCA/XG4gICAgICAgICAgICAgICAgdGhpcy5fbW9udGhzU3RyaWN0UmVnZXggOiB0aGlzLl9tb250aHNSZWdleDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbXB1dGVNb250aHNQYXJzZSAoKSB7XG4gICAgICAgIGZ1bmN0aW9uIGNtcExlblJldihhLCBiKSB7XG4gICAgICAgICAgICByZXR1cm4gYi5sZW5ndGggLSBhLmxlbmd0aDtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBzaG9ydFBpZWNlcyA9IFtdLCBsb25nUGllY2VzID0gW10sIG1peGVkUGllY2VzID0gW10sXG4gICAgICAgICAgICBpLCBtb207XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCAxMjsgaSsrKSB7XG4gICAgICAgICAgICAvLyBtYWtlIHRoZSByZWdleCBpZiB3ZSBkb24ndCBoYXZlIGl0IGFscmVhZHlcbiAgICAgICAgICAgIG1vbSA9IGNyZWF0ZVVUQyhbMjAwMCwgaV0pO1xuICAgICAgICAgICAgc2hvcnRQaWVjZXMucHVzaCh0aGlzLm1vbnRoc1Nob3J0KG1vbSwgJycpKTtcbiAgICAgICAgICAgIGxvbmdQaWVjZXMucHVzaCh0aGlzLm1vbnRocyhtb20sICcnKSk7XG4gICAgICAgICAgICBtaXhlZFBpZWNlcy5wdXNoKHRoaXMubW9udGhzKG1vbSwgJycpKTtcbiAgICAgICAgICAgIG1peGVkUGllY2VzLnB1c2godGhpcy5tb250aHNTaG9ydChtb20sICcnKSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gU29ydGluZyBtYWtlcyBzdXJlIGlmIG9uZSBtb250aCAob3IgYWJicikgaXMgYSBwcmVmaXggb2YgYW5vdGhlciBpdFxuICAgICAgICAvLyB3aWxsIG1hdGNoIHRoZSBsb25nZXIgcGllY2UuXG4gICAgICAgIHNob3J0UGllY2VzLnNvcnQoY21wTGVuUmV2KTtcbiAgICAgICAgbG9uZ1BpZWNlcy5zb3J0KGNtcExlblJldik7XG4gICAgICAgIG1peGVkUGllY2VzLnNvcnQoY21wTGVuUmV2KTtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IDEyOyBpKyspIHtcbiAgICAgICAgICAgIHNob3J0UGllY2VzW2ldID0gcmVnZXhFc2NhcGUoc2hvcnRQaWVjZXNbaV0pO1xuICAgICAgICAgICAgbG9uZ1BpZWNlc1tpXSA9IHJlZ2V4RXNjYXBlKGxvbmdQaWVjZXNbaV0pO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCAyNDsgaSsrKSB7XG4gICAgICAgICAgICBtaXhlZFBpZWNlc1tpXSA9IHJlZ2V4RXNjYXBlKG1peGVkUGllY2VzW2ldKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX21vbnRoc1JlZ2V4ID0gbmV3IFJlZ0V4cCgnXignICsgbWl4ZWRQaWVjZXMuam9pbignfCcpICsgJyknLCAnaScpO1xuICAgICAgICB0aGlzLl9tb250aHNTaG9ydFJlZ2V4ID0gdGhpcy5fbW9udGhzUmVnZXg7XG4gICAgICAgIHRoaXMuX21vbnRoc1N0cmljdFJlZ2V4ID0gbmV3IFJlZ0V4cCgnXignICsgbG9uZ1BpZWNlcy5qb2luKCd8JykgKyAnKScsICdpJyk7XG4gICAgICAgIHRoaXMuX21vbnRoc1Nob3J0U3RyaWN0UmVnZXggPSBuZXcgUmVnRXhwKCdeKCcgKyBzaG9ydFBpZWNlcy5qb2luKCd8JykgKyAnKScsICdpJyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlRGF0ZSAoeSwgbSwgZCwgaCwgTSwgcywgbXMpIHtcbiAgICAgICAgLy8gY2FuJ3QganVzdCBhcHBseSgpIHRvIGNyZWF0ZSBhIGRhdGU6XG4gICAgICAgIC8vIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcS8xODEzNDhcbiAgICAgICAgdmFyIGRhdGU7XG4gICAgICAgIC8vIHRoZSBkYXRlIGNvbnN0cnVjdG9yIHJlbWFwcyB5ZWFycyAwLTk5IHRvIDE5MDAtMTk5OVxuICAgICAgICBpZiAoeSA8IDEwMCAmJiB5ID49IDApIHtcbiAgICAgICAgICAgIC8vIHByZXNlcnZlIGxlYXAgeWVhcnMgdXNpbmcgYSBmdWxsIDQwMCB5ZWFyIGN5Y2xlLCB0aGVuIHJlc2V0XG4gICAgICAgICAgICBkYXRlID0gbmV3IERhdGUoeSArIDQwMCwgbSwgZCwgaCwgTSwgcywgbXMpO1xuICAgICAgICAgICAgaWYgKGlzRmluaXRlKGRhdGUuZ2V0RnVsbFllYXIoKSkpIHtcbiAgICAgICAgICAgICAgICBkYXRlLnNldEZ1bGxZZWFyKHkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZGF0ZSA9IG5ldyBEYXRlKHksIG0sIGQsIGgsIE0sIHMsIG1zKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBkYXRlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZVVUQ0RhdGUgKHkpIHtcbiAgICAgICAgdmFyIGRhdGU7XG4gICAgICAgIC8vIHRoZSBEYXRlLlVUQyBmdW5jdGlvbiByZW1hcHMgeWVhcnMgMC05OSB0byAxOTAwLTE5OTlcbiAgICAgICAgaWYgKHkgPCAxMDAgJiYgeSA+PSAwKSB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAvLyBwcmVzZXJ2ZSBsZWFwIHllYXJzIHVzaW5nIGEgZnVsbCA0MDAgeWVhciBjeWNsZSwgdGhlbiByZXNldFxuICAgICAgICAgICAgYXJnc1swXSA9IHkgKyA0MDA7XG4gICAgICAgICAgICBkYXRlID0gbmV3IERhdGUoRGF0ZS5VVEMuYXBwbHkobnVsbCwgYXJncykpO1xuICAgICAgICAgICAgaWYgKGlzRmluaXRlKGRhdGUuZ2V0VVRDRnVsbFllYXIoKSkpIHtcbiAgICAgICAgICAgICAgICBkYXRlLnNldFVUQ0Z1bGxZZWFyKHkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZGF0ZSA9IG5ldyBEYXRlKERhdGUuVVRDLmFwcGx5KG51bGwsIGFyZ3VtZW50cykpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGRhdGU7XG4gICAgfVxuXG4gICAgLy8gc3RhcnQtb2YtZmlyc3Qtd2VlayAtIHN0YXJ0LW9mLXllYXJcbiAgICBmdW5jdGlvbiBmaXJzdFdlZWtPZmZzZXQoeWVhciwgZG93LCBkb3kpIHtcbiAgICAgICAgdmFyIC8vIGZpcnN0LXdlZWsgZGF5IC0tIHdoaWNoIGphbnVhcnkgaXMgYWx3YXlzIGluIHRoZSBmaXJzdCB3ZWVrICg0IGZvciBpc28sIDEgZm9yIG90aGVyKVxuICAgICAgICAgICAgZndkID0gNyArIGRvdyAtIGRveSxcbiAgICAgICAgICAgIC8vIGZpcnN0LXdlZWsgZGF5IGxvY2FsIHdlZWtkYXkgLS0gd2hpY2ggbG9jYWwgd2Vla2RheSBpcyBmd2RcbiAgICAgICAgICAgIGZ3ZGx3ID0gKDcgKyBjcmVhdGVVVENEYXRlKHllYXIsIDAsIGZ3ZCkuZ2V0VVRDRGF5KCkgLSBkb3cpICUgNztcblxuICAgICAgICByZXR1cm4gLWZ3ZGx3ICsgZndkIC0gMTtcbiAgICB9XG5cbiAgICAvLyBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9JU09fd2Vla19kYXRlI0NhbGN1bGF0aW5nX2FfZGF0ZV9naXZlbl90aGVfeWVhci4yQ193ZWVrX251bWJlcl9hbmRfd2Vla2RheVxuICAgIGZ1bmN0aW9uIGRheU9mWWVhckZyb21XZWVrcyh5ZWFyLCB3ZWVrLCB3ZWVrZGF5LCBkb3csIGRveSkge1xuICAgICAgICB2YXIgbG9jYWxXZWVrZGF5ID0gKDcgKyB3ZWVrZGF5IC0gZG93KSAlIDcsXG4gICAgICAgICAgICB3ZWVrT2Zmc2V0ID0gZmlyc3RXZWVrT2Zmc2V0KHllYXIsIGRvdywgZG95KSxcbiAgICAgICAgICAgIGRheU9mWWVhciA9IDEgKyA3ICogKHdlZWsgLSAxKSArIGxvY2FsV2Vla2RheSArIHdlZWtPZmZzZXQsXG4gICAgICAgICAgICByZXNZZWFyLCByZXNEYXlPZlllYXI7XG5cbiAgICAgICAgaWYgKGRheU9mWWVhciA8PSAwKSB7XG4gICAgICAgICAgICByZXNZZWFyID0geWVhciAtIDE7XG4gICAgICAgICAgICByZXNEYXlPZlllYXIgPSBkYXlzSW5ZZWFyKHJlc1llYXIpICsgZGF5T2ZZZWFyO1xuICAgICAgICB9IGVsc2UgaWYgKGRheU9mWWVhciA+IGRheXNJblllYXIoeWVhcikpIHtcbiAgICAgICAgICAgIHJlc1llYXIgPSB5ZWFyICsgMTtcbiAgICAgICAgICAgIHJlc0RheU9mWWVhciA9IGRheU9mWWVhciAtIGRheXNJblllYXIoeWVhcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXNZZWFyID0geWVhcjtcbiAgICAgICAgICAgIHJlc0RheU9mWWVhciA9IGRheU9mWWVhcjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB5ZWFyOiByZXNZZWFyLFxuICAgICAgICAgICAgZGF5T2ZZZWFyOiByZXNEYXlPZlllYXJcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB3ZWVrT2ZZZWFyKG1vbSwgZG93LCBkb3kpIHtcbiAgICAgICAgdmFyIHdlZWtPZmZzZXQgPSBmaXJzdFdlZWtPZmZzZXQobW9tLnllYXIoKSwgZG93LCBkb3kpLFxuICAgICAgICAgICAgd2VlayA9IE1hdGguZmxvb3IoKG1vbS5kYXlPZlllYXIoKSAtIHdlZWtPZmZzZXQgLSAxKSAvIDcpICsgMSxcbiAgICAgICAgICAgIHJlc1dlZWssIHJlc1llYXI7XG5cbiAgICAgICAgaWYgKHdlZWsgPCAxKSB7XG4gICAgICAgICAgICByZXNZZWFyID0gbW9tLnllYXIoKSAtIDE7XG4gICAgICAgICAgICByZXNXZWVrID0gd2VlayArIHdlZWtzSW5ZZWFyKHJlc1llYXIsIGRvdywgZG95KTtcbiAgICAgICAgfSBlbHNlIGlmICh3ZWVrID4gd2Vla3NJblllYXIobW9tLnllYXIoKSwgZG93LCBkb3kpKSB7XG4gICAgICAgICAgICByZXNXZWVrID0gd2VlayAtIHdlZWtzSW5ZZWFyKG1vbS55ZWFyKCksIGRvdywgZG95KTtcbiAgICAgICAgICAgIHJlc1llYXIgPSBtb20ueWVhcigpICsgMTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlc1llYXIgPSBtb20ueWVhcigpO1xuICAgICAgICAgICAgcmVzV2VlayA9IHdlZWs7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgd2VlazogcmVzV2VlayxcbiAgICAgICAgICAgIHllYXI6IHJlc1llYXJcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB3ZWVrc0luWWVhcih5ZWFyLCBkb3csIGRveSkge1xuICAgICAgICB2YXIgd2Vla09mZnNldCA9IGZpcnN0V2Vla09mZnNldCh5ZWFyLCBkb3csIGRveSksXG4gICAgICAgICAgICB3ZWVrT2Zmc2V0TmV4dCA9IGZpcnN0V2Vla09mZnNldCh5ZWFyICsgMSwgZG93LCBkb3kpO1xuICAgICAgICByZXR1cm4gKGRheXNJblllYXIoeWVhcikgLSB3ZWVrT2Zmc2V0ICsgd2Vla09mZnNldE5leHQpIC8gNztcbiAgICB9XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBhZGRGb3JtYXRUb2tlbigndycsIFsnd3cnLCAyXSwgJ3dvJywgJ3dlZWsnKTtcbiAgICBhZGRGb3JtYXRUb2tlbignVycsIFsnV1cnLCAyXSwgJ1dvJywgJ2lzb1dlZWsnKTtcblxuICAgIC8vIEFMSUFTRVNcblxuICAgIGFkZFVuaXRBbGlhcygnd2VlaycsICd3Jyk7XG4gICAgYWRkVW5pdEFsaWFzKCdpc29XZWVrJywgJ1cnKTtcblxuICAgIC8vIFBSSU9SSVRJRVNcblxuICAgIGFkZFVuaXRQcmlvcml0eSgnd2VlaycsIDUpO1xuICAgIGFkZFVuaXRQcmlvcml0eSgnaXNvV2VlaycsIDUpO1xuXG4gICAgLy8gUEFSU0lOR1xuXG4gICAgYWRkUmVnZXhUb2tlbigndycsICBtYXRjaDF0bzIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ3d3JywgbWF0Y2gxdG8yLCBtYXRjaDIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ1cnLCAgbWF0Y2gxdG8yKTtcbiAgICBhZGRSZWdleFRva2VuKCdXVycsIG1hdGNoMXRvMiwgbWF0Y2gyKTtcblxuICAgIGFkZFdlZWtQYXJzZVRva2VuKFsndycsICd3dycsICdXJywgJ1dXJ10sIGZ1bmN0aW9uIChpbnB1dCwgd2VlaywgY29uZmlnLCB0b2tlbikge1xuICAgICAgICB3ZWVrW3Rva2VuLnN1YnN0cigwLCAxKV0gPSB0b0ludChpbnB1dCk7XG4gICAgfSk7XG5cbiAgICAvLyBIRUxQRVJTXG5cbiAgICAvLyBMT0NBTEVTXG5cbiAgICBmdW5jdGlvbiBsb2NhbGVXZWVrIChtb20pIHtcbiAgICAgICAgcmV0dXJuIHdlZWtPZlllYXIobW9tLCB0aGlzLl93ZWVrLmRvdywgdGhpcy5fd2Vlay5kb3kpLndlZWs7XG4gICAgfVxuXG4gICAgdmFyIGRlZmF1bHRMb2NhbGVXZWVrID0ge1xuICAgICAgICBkb3cgOiAwLCAvLyBTdW5kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgZG95IDogNiAgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNnRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgIH07XG5cbiAgICBmdW5jdGlvbiBsb2NhbGVGaXJzdERheU9mV2VlayAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl93ZWVrLmRvdztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsb2NhbGVGaXJzdERheU9mWWVhciAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl93ZWVrLmRveTtcbiAgICB9XG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICBmdW5jdGlvbiBnZXRTZXRXZWVrIChpbnB1dCkge1xuICAgICAgICB2YXIgd2VlayA9IHRoaXMubG9jYWxlRGF0YSgpLndlZWsodGhpcyk7XG4gICAgICAgIHJldHVybiBpbnB1dCA9PSBudWxsID8gd2VlayA6IHRoaXMuYWRkKChpbnB1dCAtIHdlZWspICogNywgJ2QnKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRTZXRJU09XZWVrIChpbnB1dCkge1xuICAgICAgICB2YXIgd2VlayA9IHdlZWtPZlllYXIodGhpcywgMSwgNCkud2VlaztcbiAgICAgICAgcmV0dXJuIGlucHV0ID09IG51bGwgPyB3ZWVrIDogdGhpcy5hZGQoKGlucHV0IC0gd2VlaykgKiA3LCAnZCcpO1xuICAgIH1cblxuICAgIC8vIEZPUk1BVFRJTkdcblxuICAgIGFkZEZvcm1hdFRva2VuKCdkJywgMCwgJ2RvJywgJ2RheScpO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ2RkJywgMCwgMCwgZnVuY3Rpb24gKGZvcm1hdCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkud2Vla2RheXNNaW4odGhpcywgZm9ybWF0KTtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKCdkZGQnLCAwLCAwLCBmdW5jdGlvbiAoZm9ybWF0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxvY2FsZURhdGEoKS53ZWVrZGF5c1Nob3J0KHRoaXMsIGZvcm1hdCk7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbignZGRkZCcsIDAsIDAsIGZ1bmN0aW9uIChmb3JtYXQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLndlZWtkYXlzKHRoaXMsIGZvcm1hdCk7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbignZScsIDAsIDAsICd3ZWVrZGF5Jyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oJ0UnLCAwLCAwLCAnaXNvV2Vla2RheScpO1xuXG4gICAgLy8gQUxJQVNFU1xuXG4gICAgYWRkVW5pdEFsaWFzKCdkYXknLCAnZCcpO1xuICAgIGFkZFVuaXRBbGlhcygnd2Vla2RheScsICdlJyk7XG4gICAgYWRkVW5pdEFsaWFzKCdpc29XZWVrZGF5JywgJ0UnKTtcblxuICAgIC8vIFBSSU9SSVRZXG4gICAgYWRkVW5pdFByaW9yaXR5KCdkYXknLCAxMSk7XG4gICAgYWRkVW5pdFByaW9yaXR5KCd3ZWVrZGF5JywgMTEpO1xuICAgIGFkZFVuaXRQcmlvcml0eSgnaXNvV2Vla2RheScsIDExKTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ2QnLCAgICBtYXRjaDF0bzIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2UnLCAgICBtYXRjaDF0bzIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0UnLCAgICBtYXRjaDF0bzIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2RkJywgICBmdW5jdGlvbiAoaXNTdHJpY3QsIGxvY2FsZSkge1xuICAgICAgICByZXR1cm4gbG9jYWxlLndlZWtkYXlzTWluUmVnZXgoaXNTdHJpY3QpO1xuICAgIH0pO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2RkZCcsICAgZnVuY3Rpb24gKGlzU3RyaWN0LCBsb2NhbGUpIHtcbiAgICAgICAgcmV0dXJuIGxvY2FsZS53ZWVrZGF5c1Nob3J0UmVnZXgoaXNTdHJpY3QpO1xuICAgIH0pO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2RkZGQnLCAgIGZ1bmN0aW9uIChpc1N0cmljdCwgbG9jYWxlKSB7XG4gICAgICAgIHJldHVybiBsb2NhbGUud2Vla2RheXNSZWdleChpc1N0cmljdCk7XG4gICAgfSk7XG5cbiAgICBhZGRXZWVrUGFyc2VUb2tlbihbJ2RkJywgJ2RkZCcsICdkZGRkJ10sIGZ1bmN0aW9uIChpbnB1dCwgd2VlaywgY29uZmlnLCB0b2tlbikge1xuICAgICAgICB2YXIgd2Vla2RheSA9IGNvbmZpZy5fbG9jYWxlLndlZWtkYXlzUGFyc2UoaW5wdXQsIHRva2VuLCBjb25maWcuX3N0cmljdCk7XG4gICAgICAgIC8vIGlmIHdlIGRpZG4ndCBnZXQgYSB3ZWVrZGF5IG5hbWUsIG1hcmsgdGhlIGRhdGUgYXMgaW52YWxpZFxuICAgICAgICBpZiAod2Vla2RheSAhPSBudWxsKSB7XG4gICAgICAgICAgICB3ZWVrLmQgPSB3ZWVrZGF5O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuaW52YWxpZFdlZWtkYXkgPSBpbnB1dDtcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgYWRkV2Vla1BhcnNlVG9rZW4oWydkJywgJ2UnLCAnRSddLCBmdW5jdGlvbiAoaW5wdXQsIHdlZWssIGNvbmZpZywgdG9rZW4pIHtcbiAgICAgICAgd2Vla1t0b2tlbl0gPSB0b0ludChpbnB1dCk7XG4gICAgfSk7XG5cbiAgICAvLyBIRUxQRVJTXG5cbiAgICBmdW5jdGlvbiBwYXJzZVdlZWtkYXkoaW5wdXQsIGxvY2FsZSkge1xuICAgICAgICBpZiAodHlwZW9mIGlucHV0ICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgcmV0dXJuIGlucHV0O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFpc05hTihpbnB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBwYXJzZUludChpbnB1dCwgMTApO1xuICAgICAgICB9XG5cbiAgICAgICAgaW5wdXQgPSBsb2NhbGUud2Vla2RheXNQYXJzZShpbnB1dCk7XG4gICAgICAgIGlmICh0eXBlb2YgaW5wdXQgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICByZXR1cm4gaW5wdXQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwYXJzZUlzb1dlZWtkYXkoaW5wdXQsIGxvY2FsZSkge1xuICAgICAgICBpZiAodHlwZW9mIGlucHV0ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgcmV0dXJuIGxvY2FsZS53ZWVrZGF5c1BhcnNlKGlucHV0KSAlIDcgfHwgNztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXNOYU4oaW5wdXQpID8gbnVsbCA6IGlucHV0O1xuICAgIH1cblxuICAgIC8vIExPQ0FMRVNcbiAgICBmdW5jdGlvbiBzaGlmdFdlZWtkYXlzICh3cywgbikge1xuICAgICAgICByZXR1cm4gd3Muc2xpY2UobiwgNykuY29uY2F0KHdzLnNsaWNlKDAsIG4pKTtcbiAgICB9XG5cbiAgICB2YXIgZGVmYXVsdExvY2FsZVdlZWtkYXlzID0gJ1N1bmRheV9Nb25kYXlfVHVlc2RheV9XZWRuZXNkYXlfVGh1cnNkYXlfRnJpZGF5X1NhdHVyZGF5Jy5zcGxpdCgnXycpO1xuICAgIGZ1bmN0aW9uIGxvY2FsZVdlZWtkYXlzIChtLCBmb3JtYXQpIHtcbiAgICAgICAgdmFyIHdlZWtkYXlzID0gaXNBcnJheSh0aGlzLl93ZWVrZGF5cykgPyB0aGlzLl93ZWVrZGF5cyA6XG4gICAgICAgICAgICB0aGlzLl93ZWVrZGF5c1sobSAmJiBtICE9PSB0cnVlICYmIHRoaXMuX3dlZWtkYXlzLmlzRm9ybWF0LnRlc3QoZm9ybWF0KSkgPyAnZm9ybWF0JyA6ICdzdGFuZGFsb25lJ107XG4gICAgICAgIHJldHVybiAobSA9PT0gdHJ1ZSkgPyBzaGlmdFdlZWtkYXlzKHdlZWtkYXlzLCB0aGlzLl93ZWVrLmRvdylcbiAgICAgICAgICAgIDogKG0pID8gd2Vla2RheXNbbS5kYXkoKV0gOiB3ZWVrZGF5cztcbiAgICB9XG5cbiAgICB2YXIgZGVmYXVsdExvY2FsZVdlZWtkYXlzU2hvcnQgPSAnU3VuX01vbl9UdWVfV2VkX1RodV9GcmlfU2F0Jy5zcGxpdCgnXycpO1xuICAgIGZ1bmN0aW9uIGxvY2FsZVdlZWtkYXlzU2hvcnQgKG0pIHtcbiAgICAgICAgcmV0dXJuIChtID09PSB0cnVlKSA/IHNoaWZ0V2Vla2RheXModGhpcy5fd2Vla2RheXNTaG9ydCwgdGhpcy5fd2Vlay5kb3cpXG4gICAgICAgICAgICA6IChtKSA/IHRoaXMuX3dlZWtkYXlzU2hvcnRbbS5kYXkoKV0gOiB0aGlzLl93ZWVrZGF5c1Nob3J0O1xuICAgIH1cblxuICAgIHZhciBkZWZhdWx0TG9jYWxlV2Vla2RheXNNaW4gPSAnU3VfTW9fVHVfV2VfVGhfRnJfU2EnLnNwbGl0KCdfJyk7XG4gICAgZnVuY3Rpb24gbG9jYWxlV2Vla2RheXNNaW4gKG0pIHtcbiAgICAgICAgcmV0dXJuIChtID09PSB0cnVlKSA/IHNoaWZ0V2Vla2RheXModGhpcy5fd2Vla2RheXNNaW4sIHRoaXMuX3dlZWsuZG93KVxuICAgICAgICAgICAgOiAobSkgPyB0aGlzLl93ZWVrZGF5c01pblttLmRheSgpXSA6IHRoaXMuX3dlZWtkYXlzTWluO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGhhbmRsZVN0cmljdFBhcnNlJDEod2Vla2RheU5hbWUsIGZvcm1hdCwgc3RyaWN0KSB7XG4gICAgICAgIHZhciBpLCBpaSwgbW9tLCBsbGMgPSB3ZWVrZGF5TmFtZS50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuICAgICAgICBpZiAoIXRoaXMuX3dlZWtkYXlzUGFyc2UpIHtcbiAgICAgICAgICAgIHRoaXMuX3dlZWtkYXlzUGFyc2UgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZSA9IFtdO1xuICAgICAgICAgICAgdGhpcy5fbWluV2Vla2RheXNQYXJzZSA9IFtdO1xuXG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgNzsgKytpKSB7XG4gICAgICAgICAgICAgICAgbW9tID0gY3JlYXRlVVRDKFsyMDAwLCAxXSkuZGF5KGkpO1xuICAgICAgICAgICAgICAgIHRoaXMuX21pbldlZWtkYXlzUGFyc2VbaV0gPSB0aGlzLndlZWtkYXlzTWluKG1vbSwgJycpLnRvTG9jYWxlTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlW2ldID0gdGhpcy53ZWVrZGF5c1Nob3J0KG1vbSwgJycpLnRvTG9jYWxlTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fd2Vla2RheXNQYXJzZVtpXSA9IHRoaXMud2Vla2RheXMobW9tLCAnJykudG9Mb2NhbGVMb3dlckNhc2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdHJpY3QpIHtcbiAgICAgICAgICAgIGlmIChmb3JtYXQgPT09ICdkZGRkJykge1xuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX3dlZWtkYXlzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlpICE9PSAtMSA/IGlpIDogbnVsbDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9ybWF0ID09PSAnZGRkJykge1xuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaWkgIT09IC0xID8gaWkgOiBudWxsO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9taW5XZWVrZGF5c1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpaSAhPT0gLTEgPyBpaSA6IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoZm9ybWF0ID09PSAnZGRkZCcpIHtcbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl93ZWVrZGF5c1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIGlmIChpaSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgaWYgKGlpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaWk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX21pbldlZWtkYXlzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlpICE9PSAtMSA/IGlpIDogbnVsbDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9ybWF0ID09PSAnZGRkJykge1xuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICBpZiAoaWkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpaTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fd2Vla2RheXNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICBpZiAoaWkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpaTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fbWluV2Vla2RheXNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaWkgIT09IC0xID8gaWkgOiBudWxsO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9taW5XZWVrZGF5c1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIGlmIChpaSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl93ZWVrZGF5c1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIGlmIChpaSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlpICE9PSAtMSA/IGlpIDogbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxvY2FsZVdlZWtkYXlzUGFyc2UgKHdlZWtkYXlOYW1lLCBmb3JtYXQsIHN0cmljdCkge1xuICAgICAgICB2YXIgaSwgbW9tLCByZWdleDtcblxuICAgICAgICBpZiAodGhpcy5fd2Vla2RheXNQYXJzZUV4YWN0KSB7XG4gICAgICAgICAgICByZXR1cm4gaGFuZGxlU3RyaWN0UGFyc2UkMS5jYWxsKHRoaXMsIHdlZWtkYXlOYW1lLCBmb3JtYXQsIHN0cmljdCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuX3dlZWtkYXlzUGFyc2UpIHtcbiAgICAgICAgICAgIHRoaXMuX3dlZWtkYXlzUGFyc2UgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuX21pbldlZWtkYXlzUGFyc2UgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZSA9IFtdO1xuICAgICAgICAgICAgdGhpcy5fZnVsbFdlZWtkYXlzUGFyc2UgPSBbXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCA3OyBpKyspIHtcbiAgICAgICAgICAgIC8vIG1ha2UgdGhlIHJlZ2V4IGlmIHdlIGRvbid0IGhhdmUgaXQgYWxyZWFkeVxuXG4gICAgICAgICAgICBtb20gPSBjcmVhdGVVVEMoWzIwMDAsIDFdKS5kYXkoaSk7XG4gICAgICAgICAgICBpZiAoc3RyaWN0ICYmICF0aGlzLl9mdWxsV2Vla2RheXNQYXJzZVtpXSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2Z1bGxXZWVrZGF5c1BhcnNlW2ldID0gbmV3IFJlZ0V4cCgnXicgKyB0aGlzLndlZWtkYXlzKG1vbSwgJycpLnJlcGxhY2UoJy4nLCAnXFxcXC4/JykgKyAnJCcsICdpJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlW2ldID0gbmV3IFJlZ0V4cCgnXicgKyB0aGlzLndlZWtkYXlzU2hvcnQobW9tLCAnJykucmVwbGFjZSgnLicsICdcXFxcLj8nKSArICckJywgJ2knKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9taW5XZWVrZGF5c1BhcnNlW2ldID0gbmV3IFJlZ0V4cCgnXicgKyB0aGlzLndlZWtkYXlzTWluKG1vbSwgJycpLnJlcGxhY2UoJy4nLCAnXFxcXC4/JykgKyAnJCcsICdpJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXRoaXMuX3dlZWtkYXlzUGFyc2VbaV0pIHtcbiAgICAgICAgICAgICAgICByZWdleCA9ICdeJyArIHRoaXMud2Vla2RheXMobW9tLCAnJykgKyAnfF4nICsgdGhpcy53ZWVrZGF5c1Nob3J0KG1vbSwgJycpICsgJ3xeJyArIHRoaXMud2Vla2RheXNNaW4obW9tLCAnJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5fd2Vla2RheXNQYXJzZVtpXSA9IG5ldyBSZWdFeHAocmVnZXgucmVwbGFjZSgnLicsICcnKSwgJ2knKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIHRlc3QgdGhlIHJlZ2V4XG4gICAgICAgICAgICBpZiAoc3RyaWN0ICYmIGZvcm1hdCA9PT0gJ2RkZGQnICYmIHRoaXMuX2Z1bGxXZWVrZGF5c1BhcnNlW2ldLnRlc3Qod2Vla2RheU5hbWUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHN0cmljdCAmJiBmb3JtYXQgPT09ICdkZGQnICYmIHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZVtpXS50ZXN0KHdlZWtkYXlOYW1lKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChzdHJpY3QgJiYgZm9ybWF0ID09PSAnZGQnICYmIHRoaXMuX21pbldlZWtkYXlzUGFyc2VbaV0udGVzdCh3ZWVrZGF5TmFtZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIXN0cmljdCAmJiB0aGlzLl93ZWVrZGF5c1BhcnNlW2ldLnRlc3Qod2Vla2RheU5hbWUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICBmdW5jdGlvbiBnZXRTZXREYXlPZldlZWsgKGlucHV0KSB7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnB1dCAhPSBudWxsID8gdGhpcyA6IE5hTjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgZGF5ID0gdGhpcy5faXNVVEMgPyB0aGlzLl9kLmdldFVUQ0RheSgpIDogdGhpcy5fZC5nZXREYXkoKTtcbiAgICAgICAgaWYgKGlucHV0ICE9IG51bGwpIHtcbiAgICAgICAgICAgIGlucHV0ID0gcGFyc2VXZWVrZGF5KGlucHV0LCB0aGlzLmxvY2FsZURhdGEoKSk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hZGQoaW5wdXQgLSBkYXksICdkJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gZGF5O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0U2V0TG9jYWxlRGF5T2ZXZWVrIChpbnB1dCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gaW5wdXQgIT0gbnVsbCA/IHRoaXMgOiBOYU47XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHdlZWtkYXkgPSAodGhpcy5kYXkoKSArIDcgLSB0aGlzLmxvY2FsZURhdGEoKS5fd2Vlay5kb3cpICUgNztcbiAgICAgICAgcmV0dXJuIGlucHV0ID09IG51bGwgPyB3ZWVrZGF5IDogdGhpcy5hZGQoaW5wdXQgLSB3ZWVrZGF5LCAnZCcpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFNldElTT0RheU9mV2VlayAoaW5wdXQpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIGlucHV0ICE9IG51bGwgPyB0aGlzIDogTmFOO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gYmVoYXZlcyB0aGUgc2FtZSBhcyBtb21lbnQjZGF5IGV4Y2VwdFxuICAgICAgICAvLyBhcyBhIGdldHRlciwgcmV0dXJucyA3IGluc3RlYWQgb2YgMCAoMS03IHJhbmdlIGluc3RlYWQgb2YgMC02KVxuICAgICAgICAvLyBhcyBhIHNldHRlciwgc3VuZGF5IHNob3VsZCBiZWxvbmcgdG8gdGhlIHByZXZpb3VzIHdlZWsuXG5cbiAgICAgICAgaWYgKGlucHV0ICE9IG51bGwpIHtcbiAgICAgICAgICAgIHZhciB3ZWVrZGF5ID0gcGFyc2VJc29XZWVrZGF5KGlucHV0LCB0aGlzLmxvY2FsZURhdGEoKSk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kYXkodGhpcy5kYXkoKSAlIDcgPyB3ZWVrZGF5IDogd2Vla2RheSAtIDcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGF5KCkgfHwgNztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHZhciBkZWZhdWx0V2Vla2RheXNSZWdleCA9IG1hdGNoV29yZDtcbiAgICBmdW5jdGlvbiB3ZWVrZGF5c1JlZ2V4IChpc1N0cmljdCkge1xuICAgICAgICBpZiAodGhpcy5fd2Vla2RheXNQYXJzZUV4YWN0KSB7XG4gICAgICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ193ZWVrZGF5c1JlZ2V4JykpIHtcbiAgICAgICAgICAgICAgICBjb21wdXRlV2Vla2RheXNQYXJzZS5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzU3RyaWN0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWtkYXlzU3RyaWN0UmVnZXg7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl93ZWVrZGF5c1JlZ2V4O1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCFoYXNPd25Qcm9wKHRoaXMsICdfd2Vla2RheXNSZWdleCcpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fd2Vla2RheXNSZWdleCA9IGRlZmF1bHRXZWVrZGF5c1JlZ2V4O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWtkYXlzU3RyaWN0UmVnZXggJiYgaXNTdHJpY3QgP1xuICAgICAgICAgICAgICAgIHRoaXMuX3dlZWtkYXlzU3RyaWN0UmVnZXggOiB0aGlzLl93ZWVrZGF5c1JlZ2V4O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGRlZmF1bHRXZWVrZGF5c1Nob3J0UmVnZXggPSBtYXRjaFdvcmQ7XG4gICAgZnVuY3Rpb24gd2Vla2RheXNTaG9ydFJlZ2V4IChpc1N0cmljdCkge1xuICAgICAgICBpZiAodGhpcy5fd2Vla2RheXNQYXJzZUV4YWN0KSB7XG4gICAgICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ193ZWVrZGF5c1JlZ2V4JykpIHtcbiAgICAgICAgICAgICAgICBjb21wdXRlV2Vla2RheXNQYXJzZS5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzU3RyaWN0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWtkYXlzU2hvcnRTdHJpY3RSZWdleDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWtkYXlzU2hvcnRSZWdleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX3dlZWtkYXlzU2hvcnRSZWdleCcpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fd2Vla2RheXNTaG9ydFJlZ2V4ID0gZGVmYXVsdFdlZWtkYXlzU2hvcnRSZWdleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzLl93ZWVrZGF5c1Nob3J0U3RyaWN0UmVnZXggJiYgaXNTdHJpY3QgP1xuICAgICAgICAgICAgICAgIHRoaXMuX3dlZWtkYXlzU2hvcnRTdHJpY3RSZWdleCA6IHRoaXMuX3dlZWtkYXlzU2hvcnRSZWdleDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHZhciBkZWZhdWx0V2Vla2RheXNNaW5SZWdleCA9IG1hdGNoV29yZDtcbiAgICBmdW5jdGlvbiB3ZWVrZGF5c01pblJlZ2V4IChpc1N0cmljdCkge1xuICAgICAgICBpZiAodGhpcy5fd2Vla2RheXNQYXJzZUV4YWN0KSB7XG4gICAgICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ193ZWVrZGF5c1JlZ2V4JykpIHtcbiAgICAgICAgICAgICAgICBjb21wdXRlV2Vla2RheXNQYXJzZS5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzU3RyaWN0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWtkYXlzTWluU3RyaWN0UmVnZXg7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl93ZWVrZGF5c01pblJlZ2V4O1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCFoYXNPd25Qcm9wKHRoaXMsICdfd2Vla2RheXNNaW5SZWdleCcpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fd2Vla2RheXNNaW5SZWdleCA9IGRlZmF1bHRXZWVrZGF5c01pblJlZ2V4O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWtkYXlzTWluU3RyaWN0UmVnZXggJiYgaXNTdHJpY3QgP1xuICAgICAgICAgICAgICAgIHRoaXMuX3dlZWtkYXlzTWluU3RyaWN0UmVnZXggOiB0aGlzLl93ZWVrZGF5c01pblJlZ2V4O1xuICAgICAgICB9XG4gICAgfVxuXG5cbiAgICBmdW5jdGlvbiBjb21wdXRlV2Vla2RheXNQYXJzZSAoKSB7XG4gICAgICAgIGZ1bmN0aW9uIGNtcExlblJldihhLCBiKSB7XG4gICAgICAgICAgICByZXR1cm4gYi5sZW5ndGggLSBhLmxlbmd0aDtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBtaW5QaWVjZXMgPSBbXSwgc2hvcnRQaWVjZXMgPSBbXSwgbG9uZ1BpZWNlcyA9IFtdLCBtaXhlZFBpZWNlcyA9IFtdLFxuICAgICAgICAgICAgaSwgbW9tLCBtaW5wLCBzaG9ydHAsIGxvbmdwO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgNzsgaSsrKSB7XG4gICAgICAgICAgICAvLyBtYWtlIHRoZSByZWdleCBpZiB3ZSBkb24ndCBoYXZlIGl0IGFscmVhZHlcbiAgICAgICAgICAgIG1vbSA9IGNyZWF0ZVVUQyhbMjAwMCwgMV0pLmRheShpKTtcbiAgICAgICAgICAgIG1pbnAgPSB0aGlzLndlZWtkYXlzTWluKG1vbSwgJycpO1xuICAgICAgICAgICAgc2hvcnRwID0gdGhpcy53ZWVrZGF5c1Nob3J0KG1vbSwgJycpO1xuICAgICAgICAgICAgbG9uZ3AgPSB0aGlzLndlZWtkYXlzKG1vbSwgJycpO1xuICAgICAgICAgICAgbWluUGllY2VzLnB1c2gobWlucCk7XG4gICAgICAgICAgICBzaG9ydFBpZWNlcy5wdXNoKHNob3J0cCk7XG4gICAgICAgICAgICBsb25nUGllY2VzLnB1c2gobG9uZ3ApO1xuICAgICAgICAgICAgbWl4ZWRQaWVjZXMucHVzaChtaW5wKTtcbiAgICAgICAgICAgIG1peGVkUGllY2VzLnB1c2goc2hvcnRwKTtcbiAgICAgICAgICAgIG1peGVkUGllY2VzLnB1c2gobG9uZ3ApO1xuICAgICAgICB9XG4gICAgICAgIC8vIFNvcnRpbmcgbWFrZXMgc3VyZSBpZiBvbmUgd2Vla2RheSAob3IgYWJicikgaXMgYSBwcmVmaXggb2YgYW5vdGhlciBpdFxuICAgICAgICAvLyB3aWxsIG1hdGNoIHRoZSBsb25nZXIgcGllY2UuXG4gICAgICAgIG1pblBpZWNlcy5zb3J0KGNtcExlblJldik7XG4gICAgICAgIHNob3J0UGllY2VzLnNvcnQoY21wTGVuUmV2KTtcbiAgICAgICAgbG9uZ1BpZWNlcy5zb3J0KGNtcExlblJldik7XG4gICAgICAgIG1peGVkUGllY2VzLnNvcnQoY21wTGVuUmV2KTtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IDc7IGkrKykge1xuICAgICAgICAgICAgc2hvcnRQaWVjZXNbaV0gPSByZWdleEVzY2FwZShzaG9ydFBpZWNlc1tpXSk7XG4gICAgICAgICAgICBsb25nUGllY2VzW2ldID0gcmVnZXhFc2NhcGUobG9uZ1BpZWNlc1tpXSk7XG4gICAgICAgICAgICBtaXhlZFBpZWNlc1tpXSA9IHJlZ2V4RXNjYXBlKG1peGVkUGllY2VzW2ldKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3dlZWtkYXlzUmVnZXggPSBuZXcgUmVnRXhwKCdeKCcgKyBtaXhlZFBpZWNlcy5qb2luKCd8JykgKyAnKScsICdpJyk7XG4gICAgICAgIHRoaXMuX3dlZWtkYXlzU2hvcnRSZWdleCA9IHRoaXMuX3dlZWtkYXlzUmVnZXg7XG4gICAgICAgIHRoaXMuX3dlZWtkYXlzTWluUmVnZXggPSB0aGlzLl93ZWVrZGF5c1JlZ2V4O1xuXG4gICAgICAgIHRoaXMuX3dlZWtkYXlzU3RyaWN0UmVnZXggPSBuZXcgUmVnRXhwKCdeKCcgKyBsb25nUGllY2VzLmpvaW4oJ3wnKSArICcpJywgJ2knKTtcbiAgICAgICAgdGhpcy5fd2Vla2RheXNTaG9ydFN0cmljdFJlZ2V4ID0gbmV3IFJlZ0V4cCgnXignICsgc2hvcnRQaWVjZXMuam9pbignfCcpICsgJyknLCAnaScpO1xuICAgICAgICB0aGlzLl93ZWVrZGF5c01pblN0cmljdFJlZ2V4ID0gbmV3IFJlZ0V4cCgnXignICsgbWluUGllY2VzLmpvaW4oJ3wnKSArICcpJywgJ2knKTtcbiAgICB9XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBmdW5jdGlvbiBoRm9ybWF0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5ob3VycygpICUgMTIgfHwgMTI7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24ga0Zvcm1hdCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaG91cnMoKSB8fCAyNDtcbiAgICB9XG5cbiAgICBhZGRGb3JtYXRUb2tlbignSCcsIFsnSEgnLCAyXSwgMCwgJ2hvdXInKTtcbiAgICBhZGRGb3JtYXRUb2tlbignaCcsIFsnaGgnLCAyXSwgMCwgaEZvcm1hdCk7XG4gICAgYWRkRm9ybWF0VG9rZW4oJ2snLCBbJ2trJywgMl0sIDAsIGtGb3JtYXQpO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ2htbScsIDAsIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuICcnICsgaEZvcm1hdC5hcHBseSh0aGlzKSArIHplcm9GaWxsKHRoaXMubWludXRlcygpLCAyKTtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKCdobW1zcycsIDAsIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuICcnICsgaEZvcm1hdC5hcHBseSh0aGlzKSArIHplcm9GaWxsKHRoaXMubWludXRlcygpLCAyKSArXG4gICAgICAgICAgICB6ZXJvRmlsbCh0aGlzLnNlY29uZHMoKSwgMik7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbignSG1tJywgMCwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gJycgKyB0aGlzLmhvdXJzKCkgKyB6ZXJvRmlsbCh0aGlzLm1pbnV0ZXMoKSwgMik7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbignSG1tc3MnLCAwLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiAnJyArIHRoaXMuaG91cnMoKSArIHplcm9GaWxsKHRoaXMubWludXRlcygpLCAyKSArXG4gICAgICAgICAgICB6ZXJvRmlsbCh0aGlzLnNlY29uZHMoKSwgMik7XG4gICAgfSk7XG5cbiAgICBmdW5jdGlvbiBtZXJpZGllbSAodG9rZW4sIGxvd2VyY2FzZSkge1xuICAgICAgICBhZGRGb3JtYXRUb2tlbih0b2tlbiwgMCwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLm1lcmlkaWVtKHRoaXMuaG91cnMoKSwgdGhpcy5taW51dGVzKCksIGxvd2VyY2FzZSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG1lcmlkaWVtKCdhJywgdHJ1ZSk7XG4gICAgbWVyaWRpZW0oJ0EnLCBmYWxzZSk7XG5cbiAgICAvLyBBTElBU0VTXG5cbiAgICBhZGRVbml0QWxpYXMoJ2hvdXInLCAnaCcpO1xuXG4gICAgLy8gUFJJT1JJVFlcbiAgICBhZGRVbml0UHJpb3JpdHkoJ2hvdXInLCAxMyk7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBmdW5jdGlvbiBtYXRjaE1lcmlkaWVtIChpc1N0cmljdCwgbG9jYWxlKSB7XG4gICAgICAgIHJldHVybiBsb2NhbGUuX21lcmlkaWVtUGFyc2U7XG4gICAgfVxuXG4gICAgYWRkUmVnZXhUb2tlbignYScsICBtYXRjaE1lcmlkaWVtKTtcbiAgICBhZGRSZWdleFRva2VuKCdBJywgIG1hdGNoTWVyaWRpZW0pO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0gnLCAgbWF0Y2gxdG8yKTtcbiAgICBhZGRSZWdleFRva2VuKCdoJywgIG1hdGNoMXRvMik7XG4gICAgYWRkUmVnZXhUb2tlbignaycsICBtYXRjaDF0bzIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0hIJywgbWF0Y2gxdG8yLCBtYXRjaDIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2hoJywgbWF0Y2gxdG8yLCBtYXRjaDIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2trJywgbWF0Y2gxdG8yLCBtYXRjaDIpO1xuXG4gICAgYWRkUmVnZXhUb2tlbignaG1tJywgbWF0Y2gzdG80KTtcbiAgICBhZGRSZWdleFRva2VuKCdobW1zcycsIG1hdGNoNXRvNik7XG4gICAgYWRkUmVnZXhUb2tlbignSG1tJywgbWF0Y2gzdG80KTtcbiAgICBhZGRSZWdleFRva2VuKCdIbW1zcycsIG1hdGNoNXRvNik7XG5cbiAgICBhZGRQYXJzZVRva2VuKFsnSCcsICdISCddLCBIT1VSKTtcbiAgICBhZGRQYXJzZVRva2VuKFsnaycsICdrayddLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcpIHtcbiAgICAgICAgdmFyIGtJbnB1dCA9IHRvSW50KGlucHV0KTtcbiAgICAgICAgYXJyYXlbSE9VUl0gPSBrSW5wdXQgPT09IDI0ID8gMCA6IGtJbnB1dDtcbiAgICB9KTtcbiAgICBhZGRQYXJzZVRva2VuKFsnYScsICdBJ10sIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZykge1xuICAgICAgICBjb25maWcuX2lzUG0gPSBjb25maWcuX2xvY2FsZS5pc1BNKGlucHV0KTtcbiAgICAgICAgY29uZmlnLl9tZXJpZGllbSA9IGlucHV0O1xuICAgIH0pO1xuICAgIGFkZFBhcnNlVG9rZW4oWydoJywgJ2hoJ10sIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZykge1xuICAgICAgICBhcnJheVtIT1VSXSA9IHRvSW50KGlucHV0KTtcbiAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuYmlnSG91ciA9IHRydWU7XG4gICAgfSk7XG4gICAgYWRkUGFyc2VUb2tlbignaG1tJywgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnKSB7XG4gICAgICAgIHZhciBwb3MgPSBpbnB1dC5sZW5ndGggLSAyO1xuICAgICAgICBhcnJheVtIT1VSXSA9IHRvSW50KGlucHV0LnN1YnN0cigwLCBwb3MpKTtcbiAgICAgICAgYXJyYXlbTUlOVVRFXSA9IHRvSW50KGlucHV0LnN1YnN0cihwb3MpKTtcbiAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuYmlnSG91ciA9IHRydWU7XG4gICAgfSk7XG4gICAgYWRkUGFyc2VUb2tlbignaG1tc3MnLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcpIHtcbiAgICAgICAgdmFyIHBvczEgPSBpbnB1dC5sZW5ndGggLSA0O1xuICAgICAgICB2YXIgcG9zMiA9IGlucHV0Lmxlbmd0aCAtIDI7XG4gICAgICAgIGFycmF5W0hPVVJdID0gdG9JbnQoaW5wdXQuc3Vic3RyKDAsIHBvczEpKTtcbiAgICAgICAgYXJyYXlbTUlOVVRFXSA9IHRvSW50KGlucHV0LnN1YnN0cihwb3MxLCAyKSk7XG4gICAgICAgIGFycmF5W1NFQ09ORF0gPSB0b0ludChpbnB1dC5zdWJzdHIocG9zMikpO1xuICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5iaWdIb3VyID0gdHJ1ZTtcbiAgICB9KTtcbiAgICBhZGRQYXJzZVRva2VuKCdIbW0nLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcpIHtcbiAgICAgICAgdmFyIHBvcyA9IGlucHV0Lmxlbmd0aCAtIDI7XG4gICAgICAgIGFycmF5W0hPVVJdID0gdG9JbnQoaW5wdXQuc3Vic3RyKDAsIHBvcykpO1xuICAgICAgICBhcnJheVtNSU5VVEVdID0gdG9JbnQoaW5wdXQuc3Vic3RyKHBvcykpO1xuICAgIH0pO1xuICAgIGFkZFBhcnNlVG9rZW4oJ0htbXNzJywgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnKSB7XG4gICAgICAgIHZhciBwb3MxID0gaW5wdXQubGVuZ3RoIC0gNDtcbiAgICAgICAgdmFyIHBvczIgPSBpbnB1dC5sZW5ndGggLSAyO1xuICAgICAgICBhcnJheVtIT1VSXSA9IHRvSW50KGlucHV0LnN1YnN0cigwLCBwb3MxKSk7XG4gICAgICAgIGFycmF5W01JTlVURV0gPSB0b0ludChpbnB1dC5zdWJzdHIocG9zMSwgMikpO1xuICAgICAgICBhcnJheVtTRUNPTkRdID0gdG9JbnQoaW5wdXQuc3Vic3RyKHBvczIpKTtcbiAgICB9KTtcblxuICAgIC8vIExPQ0FMRVNcblxuICAgIGZ1bmN0aW9uIGxvY2FsZUlzUE0gKGlucHV0KSB7XG4gICAgICAgIC8vIElFOCBRdWlya3MgTW9kZSAmIElFNyBTdGFuZGFyZHMgTW9kZSBkbyBub3QgYWxsb3cgYWNjZXNzaW5nIHN0cmluZ3MgbGlrZSBhcnJheXNcbiAgICAgICAgLy8gVXNpbmcgY2hhckF0IHNob3VsZCBiZSBtb3JlIGNvbXBhdGlibGUuXG4gICAgICAgIHJldHVybiAoKGlucHV0ICsgJycpLnRvTG93ZXJDYXNlKCkuY2hhckF0KDApID09PSAncCcpO1xuICAgIH1cblxuICAgIHZhciBkZWZhdWx0TG9jYWxlTWVyaWRpZW1QYXJzZSA9IC9bYXBdXFwuP20/XFwuPy9pO1xuICAgIGZ1bmN0aW9uIGxvY2FsZU1lcmlkaWVtIChob3VycywgbWludXRlcywgaXNMb3dlcikge1xuICAgICAgICBpZiAoaG91cnMgPiAxMSkge1xuICAgICAgICAgICAgcmV0dXJuIGlzTG93ZXIgPyAncG0nIDogJ1BNJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBpc0xvd2VyID8gJ2FtJyA6ICdBTSc7XG4gICAgICAgIH1cbiAgICB9XG5cblxuICAgIC8vIE1PTUVOVFNcblxuICAgIC8vIFNldHRpbmcgdGhlIGhvdXIgc2hvdWxkIGtlZXAgdGhlIHRpbWUsIGJlY2F1c2UgdGhlIHVzZXIgZXhwbGljaXRseVxuICAgIC8vIHNwZWNpZmllZCB3aGljaCBob3VyIHRoZXkgd2FudC4gU28gdHJ5aW5nIHRvIG1haW50YWluIHRoZSBzYW1lIGhvdXIgKGluXG4gICAgLy8gYSBuZXcgdGltZXpvbmUpIG1ha2VzIHNlbnNlLiBBZGRpbmcvc3VidHJhY3RpbmcgaG91cnMgZG9lcyBub3QgZm9sbG93XG4gICAgLy8gdGhpcyBydWxlLlxuICAgIHZhciBnZXRTZXRIb3VyID0gbWFrZUdldFNldCgnSG91cnMnLCB0cnVlKTtcblxuICAgIHZhciBiYXNlQ29uZmlnID0ge1xuICAgICAgICBjYWxlbmRhcjogZGVmYXVsdENhbGVuZGFyLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDogZGVmYXVsdExvbmdEYXRlRm9ybWF0LFxuICAgICAgICBpbnZhbGlkRGF0ZTogZGVmYXVsdEludmFsaWREYXRlLFxuICAgICAgICBvcmRpbmFsOiBkZWZhdWx0T3JkaW5hbCxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogZGVmYXVsdERheU9mTW9udGhPcmRpbmFsUGFyc2UsXG4gICAgICAgIHJlbGF0aXZlVGltZTogZGVmYXVsdFJlbGF0aXZlVGltZSxcblxuICAgICAgICBtb250aHM6IGRlZmF1bHRMb2NhbGVNb250aHMsXG4gICAgICAgIG1vbnRoc1Nob3J0OiBkZWZhdWx0TG9jYWxlTW9udGhzU2hvcnQsXG5cbiAgICAgICAgd2VlazogZGVmYXVsdExvY2FsZVdlZWssXG5cbiAgICAgICAgd2Vla2RheXM6IGRlZmF1bHRMb2NhbGVXZWVrZGF5cyxcbiAgICAgICAgd2Vla2RheXNNaW46IGRlZmF1bHRMb2NhbGVXZWVrZGF5c01pbixcbiAgICAgICAgd2Vla2RheXNTaG9ydDogZGVmYXVsdExvY2FsZVdlZWtkYXlzU2hvcnQsXG5cbiAgICAgICAgbWVyaWRpZW1QYXJzZTogZGVmYXVsdExvY2FsZU1lcmlkaWVtUGFyc2VcbiAgICB9O1xuXG4gICAgLy8gaW50ZXJuYWwgc3RvcmFnZSBmb3IgbG9jYWxlIGNvbmZpZyBmaWxlc1xuICAgIHZhciBsb2NhbGVzID0ge307XG4gICAgdmFyIGxvY2FsZUZhbWlsaWVzID0ge307XG4gICAgdmFyIGdsb2JhbExvY2FsZTtcblxuICAgIGZ1bmN0aW9uIG5vcm1hbGl6ZUxvY2FsZShrZXkpIHtcbiAgICAgICAgcmV0dXJuIGtleSA/IGtleS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoJ18nLCAnLScpIDoga2V5O1xuICAgIH1cblxuICAgIC8vIHBpY2sgdGhlIGxvY2FsZSBmcm9tIHRoZSBhcnJheVxuICAgIC8vIHRyeSBbJ2VuLWF1JywgJ2VuLWdiJ10gYXMgJ2VuLWF1JywgJ2VuLWdiJywgJ2VuJywgYXMgaW4gbW92ZSB0aHJvdWdoIHRoZSBsaXN0IHRyeWluZyBlYWNoXG4gICAgLy8gc3Vic3RyaW5nIGZyb20gbW9zdCBzcGVjaWZpYyB0byBsZWFzdCwgYnV0IG1vdmUgdG8gdGhlIG5leHQgYXJyYXkgaXRlbSBpZiBpdCdzIGEgbW9yZSBzcGVjaWZpYyB2YXJpYW50IHRoYW4gdGhlIGN1cnJlbnQgcm9vdFxuICAgIGZ1bmN0aW9uIGNob29zZUxvY2FsZShuYW1lcykge1xuICAgICAgICB2YXIgaSA9IDAsIGosIG5leHQsIGxvY2FsZSwgc3BsaXQ7XG5cbiAgICAgICAgd2hpbGUgKGkgPCBuYW1lcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHNwbGl0ID0gbm9ybWFsaXplTG9jYWxlKG5hbWVzW2ldKS5zcGxpdCgnLScpO1xuICAgICAgICAgICAgaiA9IHNwbGl0Lmxlbmd0aDtcbiAgICAgICAgICAgIG5leHQgPSBub3JtYWxpemVMb2NhbGUobmFtZXNbaSArIDFdKTtcbiAgICAgICAgICAgIG5leHQgPSBuZXh0ID8gbmV4dC5zcGxpdCgnLScpIDogbnVsbDtcbiAgICAgICAgICAgIHdoaWxlIChqID4gMCkge1xuICAgICAgICAgICAgICAgIGxvY2FsZSA9IGxvYWRMb2NhbGUoc3BsaXQuc2xpY2UoMCwgaikuam9pbignLScpKTtcbiAgICAgICAgICAgICAgICBpZiAobG9jYWxlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBsb2NhbGU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChuZXh0ICYmIG5leHQubGVuZ3RoID49IGogJiYgY29tcGFyZUFycmF5cyhzcGxpdCwgbmV4dCwgdHJ1ZSkgPj0gaiAtIDEpIHtcbiAgICAgICAgICAgICAgICAgICAgLy90aGUgbmV4dCBhcnJheSBpdGVtIGlzIGJldHRlciB0aGFuIGEgc2hhbGxvd2VyIHN1YnN0cmluZyBvZiB0aGlzIG9uZVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgai0tO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaSsrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBnbG9iYWxMb2NhbGU7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbG9hZExvY2FsZShuYW1lKSB7XG4gICAgICAgIHZhciBvbGRMb2NhbGUgPSBudWxsO1xuICAgICAgICAvLyBUT0RPOiBGaW5kIGEgYmV0dGVyIHdheSB0byByZWdpc3RlciBhbmQgbG9hZCBhbGwgdGhlIGxvY2FsZXMgaW4gTm9kZVxuICAgICAgICBpZiAoIWxvY2FsZXNbbmFtZV0gJiYgKHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnKSAmJlxuICAgICAgICAgICAgICAgIG1vZHVsZSAmJiBtb2R1bGUuZXhwb3J0cykge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBvbGRMb2NhbGUgPSBnbG9iYWxMb2NhbGUuX2FiYnI7XG4gICAgICAgICAgICAgICAgdmFyIGFsaWFzZWRSZXF1aXJlID0gcmVxdWlyZTtcbiAgICAgICAgICAgICAgICBhbGlhc2VkUmVxdWlyZSgnLi9sb2NhbGUvJyArIG5hbWUpO1xuICAgICAgICAgICAgICAgIGdldFNldEdsb2JhbExvY2FsZShvbGRMb2NhbGUpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge31cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbG9jYWxlc1tuYW1lXTtcbiAgICB9XG5cbiAgICAvLyBUaGlzIGZ1bmN0aW9uIHdpbGwgbG9hZCBsb2NhbGUgYW5kIHRoZW4gc2V0IHRoZSBnbG9iYWwgbG9jYWxlLiAgSWZcbiAgICAvLyBubyBhcmd1bWVudHMgYXJlIHBhc3NlZCBpbiwgaXQgd2lsbCBzaW1wbHkgcmV0dXJuIHRoZSBjdXJyZW50IGdsb2JhbFxuICAgIC8vIGxvY2FsZSBrZXkuXG4gICAgZnVuY3Rpb24gZ2V0U2V0R2xvYmFsTG9jYWxlIChrZXksIHZhbHVlcykge1xuICAgICAgICB2YXIgZGF0YTtcbiAgICAgICAgaWYgKGtleSkge1xuICAgICAgICAgICAgaWYgKGlzVW5kZWZpbmVkKHZhbHVlcykpIHtcbiAgICAgICAgICAgICAgICBkYXRhID0gZ2V0TG9jYWxlKGtleSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBkYXRhID0gZGVmaW5lTG9jYWxlKGtleSwgdmFsdWVzKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgICAgICAvLyBtb21lbnQuZHVyYXRpb24uX2xvY2FsZSA9IG1vbWVudC5fbG9jYWxlID0gZGF0YTtcbiAgICAgICAgICAgICAgICBnbG9iYWxMb2NhbGUgPSBkYXRhO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKCh0eXBlb2YgY29uc29sZSAhPT0gICd1bmRlZmluZWQnKSAmJiBjb25zb2xlLndhcm4pIHtcbiAgICAgICAgICAgICAgICAgICAgLy93YXJuIHVzZXIgaWYgYXJndW1lbnRzIGFyZSBwYXNzZWQgYnV0IHRoZSBsb2NhbGUgY291bGQgbm90IGJlIHNldFxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ0xvY2FsZSAnICsga2V5ICsgICcgbm90IGZvdW5kLiBEaWQgeW91IGZvcmdldCB0byBsb2FkIGl0PycpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBnbG9iYWxMb2NhbGUuX2FiYnI7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZGVmaW5lTG9jYWxlIChuYW1lLCBjb25maWcpIHtcbiAgICAgICAgaWYgKGNvbmZpZyAhPT0gbnVsbCkge1xuICAgICAgICAgICAgdmFyIGxvY2FsZSwgcGFyZW50Q29uZmlnID0gYmFzZUNvbmZpZztcbiAgICAgICAgICAgIGNvbmZpZy5hYmJyID0gbmFtZTtcbiAgICAgICAgICAgIGlmIChsb2NhbGVzW25hbWVdICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBkZXByZWNhdGVTaW1wbGUoJ2RlZmluZUxvY2FsZU92ZXJyaWRlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICd1c2UgbW9tZW50LnVwZGF0ZUxvY2FsZShsb2NhbGVOYW1lLCBjb25maWcpIHRvIGNoYW5nZSAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICdhbiBleGlzdGluZyBsb2NhbGUuIG1vbWVudC5kZWZpbmVMb2NhbGUobG9jYWxlTmFtZSwgJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAnY29uZmlnKSBzaG91bGQgb25seSBiZSB1c2VkIGZvciBjcmVhdGluZyBhIG5ldyBsb2NhbGUgJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAnU2VlIGh0dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMvd2FybmluZ3MvZGVmaW5lLWxvY2FsZS8gZm9yIG1vcmUgaW5mby4nKTtcbiAgICAgICAgICAgICAgICBwYXJlbnRDb25maWcgPSBsb2NhbGVzW25hbWVdLl9jb25maWc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNvbmZpZy5wYXJlbnRMb2NhbGUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGlmIChsb2NhbGVzW2NvbmZpZy5wYXJlbnRMb2NhbGVdICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50Q29uZmlnID0gbG9jYWxlc1tjb25maWcucGFyZW50TG9jYWxlXS5fY29uZmlnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGxvY2FsZSA9IGxvYWRMb2NhbGUoY29uZmlnLnBhcmVudExvY2FsZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChsb2NhbGUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50Q29uZmlnID0gbG9jYWxlLl9jb25maWc7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWxvY2FsZUZhbWlsaWVzW2NvbmZpZy5wYXJlbnRMb2NhbGVdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxlRmFtaWxpZXNbY29uZmlnLnBhcmVudExvY2FsZV0gPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsZUZhbWlsaWVzW2NvbmZpZy5wYXJlbnRMb2NhbGVdLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IG5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnOiBjb25maWdcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsb2NhbGVzW25hbWVdID0gbmV3IExvY2FsZShtZXJnZUNvbmZpZ3MocGFyZW50Q29uZmlnLCBjb25maWcpKTtcblxuICAgICAgICAgICAgaWYgKGxvY2FsZUZhbWlsaWVzW25hbWVdKSB7XG4gICAgICAgICAgICAgICAgbG9jYWxlRmFtaWxpZXNbbmFtZV0uZm9yRWFjaChmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgICAgICBkZWZpbmVMb2NhbGUoeC5uYW1lLCB4LmNvbmZpZyk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGJhY2t3YXJkcyBjb21wYXQgZm9yIG5vdzogYWxzbyBzZXQgdGhlIGxvY2FsZVxuICAgICAgICAgICAgLy8gbWFrZSBzdXJlIHdlIHNldCB0aGUgbG9jYWxlIEFGVEVSIGFsbCBjaGlsZCBsb2NhbGVzIGhhdmUgYmVlblxuICAgICAgICAgICAgLy8gY3JlYXRlZCwgc28gd2Ugd29uJ3QgZW5kIHVwIHdpdGggdGhlIGNoaWxkIGxvY2FsZSBzZXQuXG4gICAgICAgICAgICBnZXRTZXRHbG9iYWxMb2NhbGUobmFtZSk7XG5cblxuICAgICAgICAgICAgcmV0dXJuIGxvY2FsZXNbbmFtZV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyB1c2VmdWwgZm9yIHRlc3RpbmdcbiAgICAgICAgICAgIGRlbGV0ZSBsb2NhbGVzW25hbWVdO1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiB1cGRhdGVMb2NhbGUobmFtZSwgY29uZmlnKSB7XG4gICAgICAgIGlmIChjb25maWcgIT0gbnVsbCkge1xuICAgICAgICAgICAgdmFyIGxvY2FsZSwgdG1wTG9jYWxlLCBwYXJlbnRDb25maWcgPSBiYXNlQ29uZmlnO1xuICAgICAgICAgICAgLy8gTUVSR0VcbiAgICAgICAgICAgIHRtcExvY2FsZSA9IGxvYWRMb2NhbGUobmFtZSk7XG4gICAgICAgICAgICBpZiAodG1wTG9jYWxlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBwYXJlbnRDb25maWcgPSB0bXBMb2NhbGUuX2NvbmZpZztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbmZpZyA9IG1lcmdlQ29uZmlncyhwYXJlbnRDb25maWcsIGNvbmZpZyk7XG4gICAgICAgICAgICBsb2NhbGUgPSBuZXcgTG9jYWxlKGNvbmZpZyk7XG4gICAgICAgICAgICBsb2NhbGUucGFyZW50TG9jYWxlID0gbG9jYWxlc1tuYW1lXTtcbiAgICAgICAgICAgIGxvY2FsZXNbbmFtZV0gPSBsb2NhbGU7XG5cbiAgICAgICAgICAgIC8vIGJhY2t3YXJkcyBjb21wYXQgZm9yIG5vdzogYWxzbyBzZXQgdGhlIGxvY2FsZVxuICAgICAgICAgICAgZ2V0U2V0R2xvYmFsTG9jYWxlKG5hbWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gcGFzcyBudWxsIGZvciBjb25maWcgdG8gdW51cGRhdGUsIHVzZWZ1bCBmb3IgdGVzdHNcbiAgICAgICAgICAgIGlmIChsb2NhbGVzW25hbWVdICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBpZiAobG9jYWxlc1tuYW1lXS5wYXJlbnRMb2NhbGUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBsb2NhbGVzW25hbWVdID0gbG9jYWxlc1tuYW1lXS5wYXJlbnRMb2NhbGU7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChsb2NhbGVzW25hbWVdICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGxvY2FsZXNbbmFtZV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBsb2NhbGVzW25hbWVdO1xuICAgIH1cblxuICAgIC8vIHJldHVybnMgbG9jYWxlIGRhdGFcbiAgICBmdW5jdGlvbiBnZXRMb2NhbGUgKGtleSkge1xuICAgICAgICB2YXIgbG9jYWxlO1xuXG4gICAgICAgIGlmIChrZXkgJiYga2V5Ll9sb2NhbGUgJiYga2V5Ll9sb2NhbGUuX2FiYnIpIHtcbiAgICAgICAgICAgIGtleSA9IGtleS5fbG9jYWxlLl9hYmJyO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFrZXkpIHtcbiAgICAgICAgICAgIHJldHVybiBnbG9iYWxMb2NhbGU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWlzQXJyYXkoa2V5KSkge1xuICAgICAgICAgICAgLy9zaG9ydC1jaXJjdWl0IGV2ZXJ5dGhpbmcgZWxzZVxuICAgICAgICAgICAgbG9jYWxlID0gbG9hZExvY2FsZShrZXkpO1xuICAgICAgICAgICAgaWYgKGxvY2FsZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBsb2NhbGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBrZXkgPSBba2V5XTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjaG9vc2VMb2NhbGUoa2V5KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaXN0TG9jYWxlcygpIHtcbiAgICAgICAgcmV0dXJuIGtleXMobG9jYWxlcyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY2hlY2tPdmVyZmxvdyAobSkge1xuICAgICAgICB2YXIgb3ZlcmZsb3c7XG4gICAgICAgIHZhciBhID0gbS5fYTtcblxuICAgICAgICBpZiAoYSAmJiBnZXRQYXJzaW5nRmxhZ3MobSkub3ZlcmZsb3cgPT09IC0yKSB7XG4gICAgICAgICAgICBvdmVyZmxvdyA9XG4gICAgICAgICAgICAgICAgYVtNT05USF0gICAgICAgPCAwIHx8IGFbTU9OVEhdICAgICAgID4gMTEgID8gTU9OVEggOlxuICAgICAgICAgICAgICAgIGFbREFURV0gICAgICAgIDwgMSB8fCBhW0RBVEVdICAgICAgICA+IGRheXNJbk1vbnRoKGFbWUVBUl0sIGFbTU9OVEhdKSA/IERBVEUgOlxuICAgICAgICAgICAgICAgIGFbSE9VUl0gICAgICAgIDwgMCB8fCBhW0hPVVJdICAgICAgICA+IDI0IHx8IChhW0hPVVJdID09PSAyNCAmJiAoYVtNSU5VVEVdICE9PSAwIHx8IGFbU0VDT05EXSAhPT0gMCB8fCBhW01JTExJU0VDT05EXSAhPT0gMCkpID8gSE9VUiA6XG4gICAgICAgICAgICAgICAgYVtNSU5VVEVdICAgICAgPCAwIHx8IGFbTUlOVVRFXSAgICAgID4gNTkgID8gTUlOVVRFIDpcbiAgICAgICAgICAgICAgICBhW1NFQ09ORF0gICAgICA8IDAgfHwgYVtTRUNPTkRdICAgICAgPiA1OSAgPyBTRUNPTkQgOlxuICAgICAgICAgICAgICAgIGFbTUlMTElTRUNPTkRdIDwgMCB8fCBhW01JTExJU0VDT05EXSA+IDk5OSA/IE1JTExJU0VDT05EIDpcbiAgICAgICAgICAgICAgICAtMTtcblxuICAgICAgICAgICAgaWYgKGdldFBhcnNpbmdGbGFncyhtKS5fb3ZlcmZsb3dEYXlPZlllYXIgJiYgKG92ZXJmbG93IDwgWUVBUiB8fCBvdmVyZmxvdyA+IERBVEUpKSB7XG4gICAgICAgICAgICAgICAgb3ZlcmZsb3cgPSBEQVRFO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGdldFBhcnNpbmdGbGFncyhtKS5fb3ZlcmZsb3dXZWVrcyAmJiBvdmVyZmxvdyA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICBvdmVyZmxvdyA9IFdFRUs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZ2V0UGFyc2luZ0ZsYWdzKG0pLl9vdmVyZmxvd1dlZWtkYXkgJiYgb3ZlcmZsb3cgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgb3ZlcmZsb3cgPSBXRUVLREFZO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MobSkub3ZlcmZsb3cgPSBvdmVyZmxvdztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIC8vIFBpY2sgdGhlIGZpcnN0IGRlZmluZWQgb2YgdHdvIG9yIHRocmVlIGFyZ3VtZW50cy5cbiAgICBmdW5jdGlvbiBkZWZhdWx0cyhhLCBiLCBjKSB7XG4gICAgICAgIGlmIChhICE9IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBhO1xuICAgICAgICB9XG4gICAgICAgIGlmIChiICE9IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBiO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGN1cnJlbnREYXRlQXJyYXkoY29uZmlnKSB7XG4gICAgICAgIC8vIGhvb2tzIGlzIGFjdHVhbGx5IHRoZSBleHBvcnRlZCBtb21lbnQgb2JqZWN0XG4gICAgICAgIHZhciBub3dWYWx1ZSA9IG5ldyBEYXRlKGhvb2tzLm5vdygpKTtcbiAgICAgICAgaWYgKGNvbmZpZy5fdXNlVVRDKSB7XG4gICAgICAgICAgICByZXR1cm4gW25vd1ZhbHVlLmdldFVUQ0Z1bGxZZWFyKCksIG5vd1ZhbHVlLmdldFVUQ01vbnRoKCksIG5vd1ZhbHVlLmdldFVUQ0RhdGUoKV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtub3dWYWx1ZS5nZXRGdWxsWWVhcigpLCBub3dWYWx1ZS5nZXRNb250aCgpLCBub3dWYWx1ZS5nZXREYXRlKCldO1xuICAgIH1cblxuICAgIC8vIGNvbnZlcnQgYW4gYXJyYXkgdG8gYSBkYXRlLlxuICAgIC8vIHRoZSBhcnJheSBzaG91bGQgbWlycm9yIHRoZSBwYXJhbWV0ZXJzIGJlbG93XG4gICAgLy8gbm90ZTogYWxsIHZhbHVlcyBwYXN0IHRoZSB5ZWFyIGFyZSBvcHRpb25hbCBhbmQgd2lsbCBkZWZhdWx0IHRvIHRoZSBsb3dlc3QgcG9zc2libGUgdmFsdWUuXG4gICAgLy8gW3llYXIsIG1vbnRoLCBkYXkgLCBob3VyLCBtaW51dGUsIHNlY29uZCwgbWlsbGlzZWNvbmRdXG4gICAgZnVuY3Rpb24gY29uZmlnRnJvbUFycmF5IChjb25maWcpIHtcbiAgICAgICAgdmFyIGksIGRhdGUsIGlucHV0ID0gW10sIGN1cnJlbnREYXRlLCBleHBlY3RlZFdlZWtkYXksIHllYXJUb1VzZTtcblxuICAgICAgICBpZiAoY29uZmlnLl9kKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjdXJyZW50RGF0ZSA9IGN1cnJlbnREYXRlQXJyYXkoY29uZmlnKTtcblxuICAgICAgICAvL2NvbXB1dGUgZGF5IG9mIHRoZSB5ZWFyIGZyb20gd2Vla3MgYW5kIHdlZWtkYXlzXG4gICAgICAgIGlmIChjb25maWcuX3cgJiYgY29uZmlnLl9hW0RBVEVdID09IG51bGwgJiYgY29uZmlnLl9hW01PTlRIXSA9PSBudWxsKSB7XG4gICAgICAgICAgICBkYXlPZlllYXJGcm9tV2Vla0luZm8oY29uZmlnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vaWYgdGhlIGRheSBvZiB0aGUgeWVhciBpcyBzZXQsIGZpZ3VyZSBvdXQgd2hhdCBpdCBpc1xuICAgICAgICBpZiAoY29uZmlnLl9kYXlPZlllYXIgIT0gbnVsbCkge1xuICAgICAgICAgICAgeWVhclRvVXNlID0gZGVmYXVsdHMoY29uZmlnLl9hW1lFQVJdLCBjdXJyZW50RGF0ZVtZRUFSXSk7XG5cbiAgICAgICAgICAgIGlmIChjb25maWcuX2RheU9mWWVhciA+IGRheXNJblllYXIoeWVhclRvVXNlKSB8fCBjb25maWcuX2RheU9mWWVhciA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLl9vdmVyZmxvd0RheU9mWWVhciA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGRhdGUgPSBjcmVhdGVVVENEYXRlKHllYXJUb1VzZSwgMCwgY29uZmlnLl9kYXlPZlllYXIpO1xuICAgICAgICAgICAgY29uZmlnLl9hW01PTlRIXSA9IGRhdGUuZ2V0VVRDTW9udGgoKTtcbiAgICAgICAgICAgIGNvbmZpZy5fYVtEQVRFXSA9IGRhdGUuZ2V0VVRDRGF0ZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gRGVmYXVsdCB0byBjdXJyZW50IGRhdGUuXG4gICAgICAgIC8vICogaWYgbm8geWVhciwgbW9udGgsIGRheSBvZiBtb250aCBhcmUgZ2l2ZW4sIGRlZmF1bHQgdG8gdG9kYXlcbiAgICAgICAgLy8gKiBpZiBkYXkgb2YgbW9udGggaXMgZ2l2ZW4sIGRlZmF1bHQgbW9udGggYW5kIHllYXJcbiAgICAgICAgLy8gKiBpZiBtb250aCBpcyBnaXZlbiwgZGVmYXVsdCBvbmx5IHllYXJcbiAgICAgICAgLy8gKiBpZiB5ZWFyIGlzIGdpdmVuLCBkb24ndCBkZWZhdWx0IGFueXRoaW5nXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCAzICYmIGNvbmZpZy5fYVtpXSA9PSBudWxsOyArK2kpIHtcbiAgICAgICAgICAgIGNvbmZpZy5fYVtpXSA9IGlucHV0W2ldID0gY3VycmVudERhdGVbaV07XG4gICAgICAgIH1cblxuICAgICAgICAvLyBaZXJvIG91dCB3aGF0ZXZlciB3YXMgbm90IGRlZmF1bHRlZCwgaW5jbHVkaW5nIHRpbWVcbiAgICAgICAgZm9yICg7IGkgPCA3OyBpKyspIHtcbiAgICAgICAgICAgIGNvbmZpZy5fYVtpXSA9IGlucHV0W2ldID0gKGNvbmZpZy5fYVtpXSA9PSBudWxsKSA/IChpID09PSAyID8gMSA6IDApIDogY29uZmlnLl9hW2ldO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ2hlY2sgZm9yIDI0OjAwOjAwLjAwMFxuICAgICAgICBpZiAoY29uZmlnLl9hW0hPVVJdID09PSAyNCAmJlxuICAgICAgICAgICAgICAgIGNvbmZpZy5fYVtNSU5VVEVdID09PSAwICYmXG4gICAgICAgICAgICAgICAgY29uZmlnLl9hW1NFQ09ORF0gPT09IDAgJiZcbiAgICAgICAgICAgICAgICBjb25maWcuX2FbTUlMTElTRUNPTkRdID09PSAwKSB7XG4gICAgICAgICAgICBjb25maWcuX25leHREYXkgPSB0cnVlO1xuICAgICAgICAgICAgY29uZmlnLl9hW0hPVVJdID0gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbmZpZy5fZCA9IChjb25maWcuX3VzZVVUQyA/IGNyZWF0ZVVUQ0RhdGUgOiBjcmVhdGVEYXRlKS5hcHBseShudWxsLCBpbnB1dCk7XG4gICAgICAgIGV4cGVjdGVkV2Vla2RheSA9IGNvbmZpZy5fdXNlVVRDID8gY29uZmlnLl9kLmdldFVUQ0RheSgpIDogY29uZmlnLl9kLmdldERheSgpO1xuXG4gICAgICAgIC8vIEFwcGx5IHRpbWV6b25lIG9mZnNldCBmcm9tIGlucHV0LiBUaGUgYWN0dWFsIHV0Y09mZnNldCBjYW4gYmUgY2hhbmdlZFxuICAgICAgICAvLyB3aXRoIHBhcnNlWm9uZS5cbiAgICAgICAgaWYgKGNvbmZpZy5fdHptICE9IG51bGwpIHtcbiAgICAgICAgICAgIGNvbmZpZy5fZC5zZXRVVENNaW51dGVzKGNvbmZpZy5fZC5nZXRVVENNaW51dGVzKCkgLSBjb25maWcuX3R6bSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29uZmlnLl9uZXh0RGF5KSB7XG4gICAgICAgICAgICBjb25maWcuX2FbSE9VUl0gPSAyNDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGNoZWNrIGZvciBtaXNtYXRjaGluZyBkYXkgb2Ygd2Vla1xuICAgICAgICBpZiAoY29uZmlnLl93ICYmIHR5cGVvZiBjb25maWcuX3cuZCAhPT0gJ3VuZGVmaW5lZCcgJiYgY29uZmlnLl93LmQgIT09IGV4cGVjdGVkV2Vla2RheSkge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykud2Vla2RheU1pc21hdGNoID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRheU9mWWVhckZyb21XZWVrSW5mbyhjb25maWcpIHtcbiAgICAgICAgdmFyIHcsIHdlZWtZZWFyLCB3ZWVrLCB3ZWVrZGF5LCBkb3csIGRveSwgdGVtcCwgd2Vla2RheU92ZXJmbG93O1xuXG4gICAgICAgIHcgPSBjb25maWcuX3c7XG4gICAgICAgIGlmICh3LkdHICE9IG51bGwgfHwgdy5XICE9IG51bGwgfHwgdy5FICE9IG51bGwpIHtcbiAgICAgICAgICAgIGRvdyA9IDE7XG4gICAgICAgICAgICBkb3kgPSA0O1xuXG4gICAgICAgICAgICAvLyBUT0RPOiBXZSBuZWVkIHRvIHRha2UgdGhlIGN1cnJlbnQgaXNvV2Vla1llYXIsIGJ1dCB0aGF0IGRlcGVuZHMgb25cbiAgICAgICAgICAgIC8vIGhvdyB3ZSBpbnRlcnByZXQgbm93IChsb2NhbCwgdXRjLCBmaXhlZCBvZmZzZXQpLiBTbyBjcmVhdGVcbiAgICAgICAgICAgIC8vIGEgbm93IHZlcnNpb24gb2YgY3VycmVudCBjb25maWcgKHRha2UgbG9jYWwvdXRjL29mZnNldCBmbGFncywgYW5kXG4gICAgICAgICAgICAvLyBjcmVhdGUgbm93KS5cbiAgICAgICAgICAgIHdlZWtZZWFyID0gZGVmYXVsdHMody5HRywgY29uZmlnLl9hW1lFQVJdLCB3ZWVrT2ZZZWFyKGNyZWF0ZUxvY2FsKCksIDEsIDQpLnllYXIpO1xuICAgICAgICAgICAgd2VlayA9IGRlZmF1bHRzKHcuVywgMSk7XG4gICAgICAgICAgICB3ZWVrZGF5ID0gZGVmYXVsdHMody5FLCAxKTtcbiAgICAgICAgICAgIGlmICh3ZWVrZGF5IDwgMSB8fCB3ZWVrZGF5ID4gNykge1xuICAgICAgICAgICAgICAgIHdlZWtkYXlPdmVyZmxvdyA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkb3cgPSBjb25maWcuX2xvY2FsZS5fd2Vlay5kb3c7XG4gICAgICAgICAgICBkb3kgPSBjb25maWcuX2xvY2FsZS5fd2Vlay5kb3k7XG5cbiAgICAgICAgICAgIHZhciBjdXJXZWVrID0gd2Vla09mWWVhcihjcmVhdGVMb2NhbCgpLCBkb3csIGRveSk7XG5cbiAgICAgICAgICAgIHdlZWtZZWFyID0gZGVmYXVsdHMody5nZywgY29uZmlnLl9hW1lFQVJdLCBjdXJXZWVrLnllYXIpO1xuXG4gICAgICAgICAgICAvLyBEZWZhdWx0IHRvIGN1cnJlbnQgd2Vlay5cbiAgICAgICAgICAgIHdlZWsgPSBkZWZhdWx0cyh3LncsIGN1cldlZWsud2Vlayk7XG5cbiAgICAgICAgICAgIGlmICh3LmQgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIC8vIHdlZWtkYXkgLS0gbG93IGRheSBudW1iZXJzIGFyZSBjb25zaWRlcmVkIG5leHQgd2Vla1xuICAgICAgICAgICAgICAgIHdlZWtkYXkgPSB3LmQ7XG4gICAgICAgICAgICAgICAgaWYgKHdlZWtkYXkgPCAwIHx8IHdlZWtkYXkgPiA2KSB7XG4gICAgICAgICAgICAgICAgICAgIHdlZWtkYXlPdmVyZmxvdyA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmICh3LmUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIC8vIGxvY2FsIHdlZWtkYXkgLS0gY291bnRpbmcgc3RhcnRzIGZyb20gYmVnaW5uaW5nIG9mIHdlZWtcbiAgICAgICAgICAgICAgICB3ZWVrZGF5ID0gdy5lICsgZG93O1xuICAgICAgICAgICAgICAgIGlmICh3LmUgPCAwIHx8IHcuZSA+IDYpIHtcbiAgICAgICAgICAgICAgICAgICAgd2Vla2RheU92ZXJmbG93ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIGRlZmF1bHQgdG8gYmVnaW5uaW5nIG9mIHdlZWtcbiAgICAgICAgICAgICAgICB3ZWVrZGF5ID0gZG93O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh3ZWVrIDwgMSB8fCB3ZWVrID4gd2Vla3NJblllYXIod2Vla1llYXIsIGRvdywgZG95KSkge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuX292ZXJmbG93V2Vla3MgPSB0cnVlO1xuICAgICAgICB9IGVsc2UgaWYgKHdlZWtkYXlPdmVyZmxvdyAhPSBudWxsKSB7XG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5fb3ZlcmZsb3dXZWVrZGF5ID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRlbXAgPSBkYXlPZlllYXJGcm9tV2Vla3Mod2Vla1llYXIsIHdlZWssIHdlZWtkYXksIGRvdywgZG95KTtcbiAgICAgICAgICAgIGNvbmZpZy5fYVtZRUFSXSA9IHRlbXAueWVhcjtcbiAgICAgICAgICAgIGNvbmZpZy5fZGF5T2ZZZWFyID0gdGVtcC5kYXlPZlllYXI7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBpc28gODYwMSByZWdleFxuICAgIC8vIDAwMDAtMDAtMDAgMDAwMC1XMDAgb3IgMDAwMC1XMDAtMCArIFQgKyAwMCBvciAwMDowMCBvciAwMDowMDowMCBvciAwMDowMDowMC4wMDAgKyArMDA6MDAgb3IgKzAwMDAgb3IgKzAwKVxuICAgIHZhciBleHRlbmRlZElzb1JlZ2V4ID0gL15cXHMqKCg/OlsrLV1cXGR7Nn18XFxkezR9KS0oPzpcXGRcXGQtXFxkXFxkfFdcXGRcXGQtXFxkfFdcXGRcXGR8XFxkXFxkXFxkfFxcZFxcZCkpKD86KFR8ICkoXFxkXFxkKD86OlxcZFxcZCg/OjpcXGRcXGQoPzpbLixdXFxkKyk/KT8pPykoW1xcK1xcLV1cXGRcXGQoPzo6P1xcZFxcZCk/fFxccypaKT8pPyQvO1xuICAgIHZhciBiYXNpY0lzb1JlZ2V4ID0gL15cXHMqKCg/OlsrLV1cXGR7Nn18XFxkezR9KSg/OlxcZFxcZFxcZFxcZHxXXFxkXFxkXFxkfFdcXGRcXGR8XFxkXFxkXFxkfFxcZFxcZCkpKD86KFR8ICkoXFxkXFxkKD86XFxkXFxkKD86XFxkXFxkKD86Wy4sXVxcZCspPyk/KT8pKFtcXCtcXC1dXFxkXFxkKD86Oj9cXGRcXGQpP3xcXHMqWik/KT8kLztcblxuICAgIHZhciB0elJlZ2V4ID0gL1p8WystXVxcZFxcZCg/Ojo/XFxkXFxkKT8vO1xuXG4gICAgdmFyIGlzb0RhdGVzID0gW1xuICAgICAgICBbJ1lZWVlZWS1NTS1ERCcsIC9bKy1dXFxkezZ9LVxcZFxcZC1cXGRcXGQvXSxcbiAgICAgICAgWydZWVlZLU1NLUREJywgL1xcZHs0fS1cXGRcXGQtXFxkXFxkL10sXG4gICAgICAgIFsnR0dHRy1bV11XVy1FJywgL1xcZHs0fS1XXFxkXFxkLVxcZC9dLFxuICAgICAgICBbJ0dHR0ctW1ddV1cnLCAvXFxkezR9LVdcXGRcXGQvLCBmYWxzZV0sXG4gICAgICAgIFsnWVlZWS1EREQnLCAvXFxkezR9LVxcZHszfS9dLFxuICAgICAgICBbJ1lZWVktTU0nLCAvXFxkezR9LVxcZFxcZC8sIGZhbHNlXSxcbiAgICAgICAgWydZWVlZWVlNTUREJywgL1srLV1cXGR7MTB9L10sXG4gICAgICAgIFsnWVlZWU1NREQnLCAvXFxkezh9L10sXG4gICAgICAgIC8vIFlZWVlNTSBpcyBOT1QgYWxsb3dlZCBieSB0aGUgc3RhbmRhcmRcbiAgICAgICAgWydHR0dHW1ddV1dFJywgL1xcZHs0fVdcXGR7M30vXSxcbiAgICAgICAgWydHR0dHW1ddV1cnLCAvXFxkezR9V1xcZHsyfS8sIGZhbHNlXSxcbiAgICAgICAgWydZWVlZREREJywgL1xcZHs3fS9dXG4gICAgXTtcblxuICAgIC8vIGlzbyB0aW1lIGZvcm1hdHMgYW5kIHJlZ2V4ZXNcbiAgICB2YXIgaXNvVGltZXMgPSBbXG4gICAgICAgIFsnSEg6bW06c3MuU1NTUycsIC9cXGRcXGQ6XFxkXFxkOlxcZFxcZFxcLlxcZCsvXSxcbiAgICAgICAgWydISDptbTpzcyxTU1NTJywgL1xcZFxcZDpcXGRcXGQ6XFxkXFxkLFxcZCsvXSxcbiAgICAgICAgWydISDptbTpzcycsIC9cXGRcXGQ6XFxkXFxkOlxcZFxcZC9dLFxuICAgICAgICBbJ0hIOm1tJywgL1xcZFxcZDpcXGRcXGQvXSxcbiAgICAgICAgWydISG1tc3MuU1NTUycsIC9cXGRcXGRcXGRcXGRcXGRcXGRcXC5cXGQrL10sXG4gICAgICAgIFsnSEhtbXNzLFNTU1MnLCAvXFxkXFxkXFxkXFxkXFxkXFxkLFxcZCsvXSxcbiAgICAgICAgWydISG1tc3MnLCAvXFxkXFxkXFxkXFxkXFxkXFxkL10sXG4gICAgICAgIFsnSEhtbScsIC9cXGRcXGRcXGRcXGQvXSxcbiAgICAgICAgWydISCcsIC9cXGRcXGQvXVxuICAgIF07XG5cbiAgICB2YXIgYXNwTmV0SnNvblJlZ2V4ID0gL15cXC8/RGF0ZVxcKChcXC0/XFxkKykvaTtcblxuICAgIC8vIGRhdGUgZnJvbSBpc28gZm9ybWF0XG4gICAgZnVuY3Rpb24gY29uZmlnRnJvbUlTTyhjb25maWcpIHtcbiAgICAgICAgdmFyIGksIGwsXG4gICAgICAgICAgICBzdHJpbmcgPSBjb25maWcuX2ksXG4gICAgICAgICAgICBtYXRjaCA9IGV4dGVuZGVkSXNvUmVnZXguZXhlYyhzdHJpbmcpIHx8IGJhc2ljSXNvUmVnZXguZXhlYyhzdHJpbmcpLFxuICAgICAgICAgICAgYWxsb3dUaW1lLCBkYXRlRm9ybWF0LCB0aW1lRm9ybWF0LCB0ekZvcm1hdDtcblxuICAgICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLmlzbyA9IHRydWU7XG5cbiAgICAgICAgICAgIGZvciAoaSA9IDAsIGwgPSBpc29EYXRlcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAoaXNvRGF0ZXNbaV1bMV0uZXhlYyhtYXRjaFsxXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0ZUZvcm1hdCA9IGlzb0RhdGVzW2ldWzBdO1xuICAgICAgICAgICAgICAgICAgICBhbGxvd1RpbWUgPSBpc29EYXRlc1tpXVsyXSAhPT0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkYXRlRm9ybWF0ID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBjb25maWcuX2lzVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobWF0Y2hbM10pIHtcbiAgICAgICAgICAgICAgICBmb3IgKGkgPSAwLCBsID0gaXNvVGltZXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc29UaW1lc1tpXVsxXS5leGVjKG1hdGNoWzNdKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gbWF0Y2hbMl0gc2hvdWxkIGJlICdUJyBvciBzcGFjZVxuICAgICAgICAgICAgICAgICAgICAgICAgdGltZUZvcm1hdCA9IChtYXRjaFsyXSB8fCAnICcpICsgaXNvVGltZXNbaV1bMF07XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodGltZUZvcm1hdCA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZy5faXNWYWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFhbGxvd1RpbWUgJiYgdGltZUZvcm1hdCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgY29uZmlnLl9pc1ZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG1hdGNoWzRdKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR6UmVnZXguZXhlYyhtYXRjaFs0XSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdHpGb3JtYXQgPSAnWic7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29uZmlnLl9pc1ZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25maWcuX2YgPSBkYXRlRm9ybWF0ICsgKHRpbWVGb3JtYXQgfHwgJycpICsgKHR6Rm9ybWF0IHx8ICcnKTtcbiAgICAgICAgICAgIGNvbmZpZ0Zyb21TdHJpbmdBbmRGb3JtYXQoY29uZmlnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbmZpZy5faXNWYWxpZCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gUkZDIDI4MjIgcmVnZXg6IEZvciBkZXRhaWxzIHNlZSBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMjgyMiNzZWN0aW9uLTMuM1xuICAgIHZhciByZmMyODIyID0gL14oPzooTW9ufFR1ZXxXZWR8VGh1fEZyaXxTYXR8U3VuKSw/XFxzKT8oXFxkezEsMn0pXFxzKEphbnxGZWJ8TWFyfEFwcnxNYXl8SnVufEp1bHxBdWd8U2VwfE9jdHxOb3Z8RGVjKVxccyhcXGR7Miw0fSlcXHMoXFxkXFxkKTooXFxkXFxkKSg/OjooXFxkXFxkKSk/XFxzKD86KFVUfEdNVHxbRUNNUF1bU0RdVCl8KFtael0pfChbKy1dXFxkezR9KSkkLztcblxuICAgIGZ1bmN0aW9uIGV4dHJhY3RGcm9tUkZDMjgyMlN0cmluZ3MoeWVhclN0ciwgbW9udGhTdHIsIGRheVN0ciwgaG91clN0ciwgbWludXRlU3RyLCBzZWNvbmRTdHIpIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IFtcbiAgICAgICAgICAgIHVudHJ1bmNhdGVZZWFyKHllYXJTdHIpLFxuICAgICAgICAgICAgZGVmYXVsdExvY2FsZU1vbnRoc1Nob3J0LmluZGV4T2YobW9udGhTdHIpLFxuICAgICAgICAgICAgcGFyc2VJbnQoZGF5U3RyLCAxMCksXG4gICAgICAgICAgICBwYXJzZUludChob3VyU3RyLCAxMCksXG4gICAgICAgICAgICBwYXJzZUludChtaW51dGVTdHIsIDEwKVxuICAgICAgICBdO1xuXG4gICAgICAgIGlmIChzZWNvbmRTdHIpIHtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKHBhcnNlSW50KHNlY29uZFN0ciwgMTApKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdW50cnVuY2F0ZVllYXIoeWVhclN0cikge1xuICAgICAgICB2YXIgeWVhciA9IHBhcnNlSW50KHllYXJTdHIsIDEwKTtcbiAgICAgICAgaWYgKHllYXIgPD0gNDkpIHtcbiAgICAgICAgICAgIHJldHVybiAyMDAwICsgeWVhcjtcbiAgICAgICAgfSBlbHNlIGlmICh5ZWFyIDw9IDk5OSkge1xuICAgICAgICAgICAgcmV0dXJuIDE5MDAgKyB5ZWFyO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB5ZWFyO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHByZXByb2Nlc3NSRkMyODIyKHMpIHtcbiAgICAgICAgLy8gUmVtb3ZlIGNvbW1lbnRzIGFuZCBmb2xkaW5nIHdoaXRlc3BhY2UgYW5kIHJlcGxhY2UgbXVsdGlwbGUtc3BhY2VzIHdpdGggYSBzaW5nbGUgc3BhY2VcbiAgICAgICAgcmV0dXJuIHMucmVwbGFjZSgvXFwoW14pXSpcXCl8W1xcblxcdF0vZywgJyAnKS5yZXBsYWNlKC8oXFxzXFxzKykvZywgJyAnKS5yZXBsYWNlKC9eXFxzXFxzKi8sICcnKS5yZXBsYWNlKC9cXHNcXHMqJC8sICcnKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjaGVja1dlZWtkYXkod2Vla2RheVN0ciwgcGFyc2VkSW5wdXQsIGNvbmZpZykge1xuICAgICAgICBpZiAod2Vla2RheVN0cikge1xuICAgICAgICAgICAgLy8gVE9ETzogUmVwbGFjZSB0aGUgdmFuaWxsYSBKUyBEYXRlIG9iamVjdCB3aXRoIGFuIGluZGVwZW50ZW50IGRheS1vZi13ZWVrIGNoZWNrLlxuICAgICAgICAgICAgdmFyIHdlZWtkYXlQcm92aWRlZCA9IGRlZmF1bHRMb2NhbGVXZWVrZGF5c1Nob3J0LmluZGV4T2Yod2Vla2RheVN0ciksXG4gICAgICAgICAgICAgICAgd2Vla2RheUFjdHVhbCA9IG5ldyBEYXRlKHBhcnNlZElucHV0WzBdLCBwYXJzZWRJbnB1dFsxXSwgcGFyc2VkSW5wdXRbMl0pLmdldERheSgpO1xuICAgICAgICAgICAgaWYgKHdlZWtkYXlQcm92aWRlZCAhPT0gd2Vla2RheUFjdHVhbCkge1xuICAgICAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLndlZWtkYXlNaXNtYXRjaCA9IHRydWU7XG4gICAgICAgICAgICAgICAgY29uZmlnLl9pc1ZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHZhciBvYnNPZmZzZXRzID0ge1xuICAgICAgICBVVDogMCxcbiAgICAgICAgR01UOiAwLFxuICAgICAgICBFRFQ6IC00ICogNjAsXG4gICAgICAgIEVTVDogLTUgKiA2MCxcbiAgICAgICAgQ0RUOiAtNSAqIDYwLFxuICAgICAgICBDU1Q6IC02ICogNjAsXG4gICAgICAgIE1EVDogLTYgKiA2MCxcbiAgICAgICAgTVNUOiAtNyAqIDYwLFxuICAgICAgICBQRFQ6IC03ICogNjAsXG4gICAgICAgIFBTVDogLTggKiA2MFxuICAgIH07XG5cbiAgICBmdW5jdGlvbiBjYWxjdWxhdGVPZmZzZXQob2JzT2Zmc2V0LCBtaWxpdGFyeU9mZnNldCwgbnVtT2Zmc2V0KSB7XG4gICAgICAgIGlmIChvYnNPZmZzZXQpIHtcbiAgICAgICAgICAgIHJldHVybiBvYnNPZmZzZXRzW29ic09mZnNldF07XG4gICAgICAgIH0gZWxzZSBpZiAobWlsaXRhcnlPZmZzZXQpIHtcbiAgICAgICAgICAgIC8vIHRoZSBvbmx5IGFsbG93ZWQgbWlsaXRhcnkgdHogaXMgWlxuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgaG0gPSBwYXJzZUludChudW1PZmZzZXQsIDEwKTtcbiAgICAgICAgICAgIHZhciBtID0gaG0gJSAxMDAsIGggPSAoaG0gLSBtKSAvIDEwMDtcbiAgICAgICAgICAgIHJldHVybiBoICogNjAgKyBtO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gZGF0ZSBhbmQgdGltZSBmcm9tIHJlZiAyODIyIGZvcm1hdFxuICAgIGZ1bmN0aW9uIGNvbmZpZ0Zyb21SRkMyODIyKGNvbmZpZykge1xuICAgICAgICB2YXIgbWF0Y2ggPSByZmMyODIyLmV4ZWMocHJlcHJvY2Vzc1JGQzI4MjIoY29uZmlnLl9pKSk7XG4gICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgICAgdmFyIHBhcnNlZEFycmF5ID0gZXh0cmFjdEZyb21SRkMyODIyU3RyaW5ncyhtYXRjaFs0XSwgbWF0Y2hbM10sIG1hdGNoWzJdLCBtYXRjaFs1XSwgbWF0Y2hbNl0sIG1hdGNoWzddKTtcbiAgICAgICAgICAgIGlmICghY2hlY2tXZWVrZGF5KG1hdGNoWzFdLCBwYXJzZWRBcnJheSwgY29uZmlnKSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uZmlnLl9hID0gcGFyc2VkQXJyYXk7XG4gICAgICAgICAgICBjb25maWcuX3R6bSA9IGNhbGN1bGF0ZU9mZnNldChtYXRjaFs4XSwgbWF0Y2hbOV0sIG1hdGNoWzEwXSk7XG5cbiAgICAgICAgICAgIGNvbmZpZy5fZCA9IGNyZWF0ZVVUQ0RhdGUuYXBwbHkobnVsbCwgY29uZmlnLl9hKTtcbiAgICAgICAgICAgIGNvbmZpZy5fZC5zZXRVVENNaW51dGVzKGNvbmZpZy5fZC5nZXRVVENNaW51dGVzKCkgLSBjb25maWcuX3R6bSk7XG5cbiAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLnJmYzI4MjIgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uZmlnLl9pc1ZhbGlkID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBkYXRlIGZyb20gaXNvIGZvcm1hdCBvciBmYWxsYmFja1xuICAgIGZ1bmN0aW9uIGNvbmZpZ0Zyb21TdHJpbmcoY29uZmlnKSB7XG4gICAgICAgIHZhciBtYXRjaGVkID0gYXNwTmV0SnNvblJlZ2V4LmV4ZWMoY29uZmlnLl9pKTtcblxuICAgICAgICBpZiAobWF0Y2hlZCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgY29uZmlnLl9kID0gbmV3IERhdGUoK21hdGNoZWRbMV0pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uZmlnRnJvbUlTTyhjb25maWcpO1xuICAgICAgICBpZiAoY29uZmlnLl9pc1ZhbGlkID09PSBmYWxzZSkge1xuICAgICAgICAgICAgZGVsZXRlIGNvbmZpZy5faXNWYWxpZDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbmZpZ0Zyb21SRkMyODIyKGNvbmZpZyk7XG4gICAgICAgIGlmIChjb25maWcuX2lzVmFsaWQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICBkZWxldGUgY29uZmlnLl9pc1ZhbGlkO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gRmluYWwgYXR0ZW1wdCwgdXNlIElucHV0IEZhbGxiYWNrXG4gICAgICAgIGhvb2tzLmNyZWF0ZUZyb21JbnB1dEZhbGxiYWNrKGNvbmZpZyk7XG4gICAgfVxuXG4gICAgaG9va3MuY3JlYXRlRnJvbUlucHV0RmFsbGJhY2sgPSBkZXByZWNhdGUoXG4gICAgICAgICd2YWx1ZSBwcm92aWRlZCBpcyBub3QgaW4gYSByZWNvZ25pemVkIFJGQzI4MjIgb3IgSVNPIGZvcm1hdC4gbW9tZW50IGNvbnN0cnVjdGlvbiBmYWxscyBiYWNrIHRvIGpzIERhdGUoKSwgJyArXG4gICAgICAgICd3aGljaCBpcyBub3QgcmVsaWFibGUgYWNyb3NzIGFsbCBicm93c2VycyBhbmQgdmVyc2lvbnMuIE5vbiBSRkMyODIyL0lTTyBkYXRlIGZvcm1hdHMgYXJlICcgK1xuICAgICAgICAnZGlzY291cmFnZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiBhbiB1cGNvbWluZyBtYWpvciByZWxlYXNlLiBQbGVhc2UgcmVmZXIgdG8gJyArXG4gICAgICAgICdodHRwOi8vbW9tZW50anMuY29tL2d1aWRlcy8jL3dhcm5pbmdzL2pzLWRhdGUvIGZvciBtb3JlIGluZm8uJyxcbiAgICAgICAgZnVuY3Rpb24gKGNvbmZpZykge1xuICAgICAgICAgICAgY29uZmlnLl9kID0gbmV3IERhdGUoY29uZmlnLl9pICsgKGNvbmZpZy5fdXNlVVRDID8gJyBVVEMnIDogJycpKTtcbiAgICAgICAgfVxuICAgICk7XG5cbiAgICAvLyBjb25zdGFudCB0aGF0IHJlZmVycyB0byB0aGUgSVNPIHN0YW5kYXJkXG4gICAgaG9va3MuSVNPXzg2MDEgPSBmdW5jdGlvbiAoKSB7fTtcblxuICAgIC8vIGNvbnN0YW50IHRoYXQgcmVmZXJzIHRvIHRoZSBSRkMgMjgyMiBmb3JtXG4gICAgaG9va3MuUkZDXzI4MjIgPSBmdW5jdGlvbiAoKSB7fTtcblxuICAgIC8vIGRhdGUgZnJvbSBzdHJpbmcgYW5kIGZvcm1hdCBzdHJpbmdcbiAgICBmdW5jdGlvbiBjb25maWdGcm9tU3RyaW5nQW5kRm9ybWF0KGNvbmZpZykge1xuICAgICAgICAvLyBUT0RPOiBNb3ZlIHRoaXMgdG8gYW5vdGhlciBwYXJ0IG9mIHRoZSBjcmVhdGlvbiBmbG93IHRvIHByZXZlbnQgY2lyY3VsYXIgZGVwc1xuICAgICAgICBpZiAoY29uZmlnLl9mID09PSBob29rcy5JU09fODYwMSkge1xuICAgICAgICAgICAgY29uZmlnRnJvbUlTTyhjb25maWcpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb25maWcuX2YgPT09IGhvb2tzLlJGQ18yODIyKSB7XG4gICAgICAgICAgICBjb25maWdGcm9tUkZDMjgyMihjb25maWcpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbmZpZy5fYSA9IFtdO1xuICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5lbXB0eSA9IHRydWU7XG5cbiAgICAgICAgLy8gVGhpcyBhcnJheSBpcyB1c2VkIHRvIG1ha2UgYSBEYXRlLCBlaXRoZXIgd2l0aCBgbmV3IERhdGVgIG9yIGBEYXRlLlVUQ2BcbiAgICAgICAgdmFyIHN0cmluZyA9ICcnICsgY29uZmlnLl9pLFxuICAgICAgICAgICAgaSwgcGFyc2VkSW5wdXQsIHRva2VucywgdG9rZW4sIHNraXBwZWQsXG4gICAgICAgICAgICBzdHJpbmdMZW5ndGggPSBzdHJpbmcubGVuZ3RoLFxuICAgICAgICAgICAgdG90YWxQYXJzZWRJbnB1dExlbmd0aCA9IDA7XG5cbiAgICAgICAgdG9rZW5zID0gZXhwYW5kRm9ybWF0KGNvbmZpZy5fZiwgY29uZmlnLl9sb2NhbGUpLm1hdGNoKGZvcm1hdHRpbmdUb2tlbnMpIHx8IFtdO1xuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCB0b2tlbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHRva2VuID0gdG9rZW5zW2ldO1xuICAgICAgICAgICAgcGFyc2VkSW5wdXQgPSAoc3RyaW5nLm1hdGNoKGdldFBhcnNlUmVnZXhGb3JUb2tlbih0b2tlbiwgY29uZmlnKSkgfHwgW10pWzBdO1xuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ3Rva2VuJywgdG9rZW4sICdwYXJzZWRJbnB1dCcsIHBhcnNlZElucHV0LFxuICAgICAgICAgICAgLy8gICAgICAgICAncmVnZXgnLCBnZXRQYXJzZVJlZ2V4Rm9yVG9rZW4odG9rZW4sIGNvbmZpZykpO1xuICAgICAgICAgICAgaWYgKHBhcnNlZElucHV0KSB7XG4gICAgICAgICAgICAgICAgc2tpcHBlZCA9IHN0cmluZy5zdWJzdHIoMCwgc3RyaW5nLmluZGV4T2YocGFyc2VkSW5wdXQpKTtcbiAgICAgICAgICAgICAgICBpZiAoc2tpcHBlZC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLnVudXNlZElucHV0LnB1c2goc2tpcHBlZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHN0cmluZyA9IHN0cmluZy5zbGljZShzdHJpbmcuaW5kZXhPZihwYXJzZWRJbnB1dCkgKyBwYXJzZWRJbnB1dC5sZW5ndGgpO1xuICAgICAgICAgICAgICAgIHRvdGFsUGFyc2VkSW5wdXRMZW5ndGggKz0gcGFyc2VkSW5wdXQubGVuZ3RoO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gZG9uJ3QgcGFyc2UgaWYgaXQncyBub3QgYSBrbm93biB0b2tlblxuICAgICAgICAgICAgaWYgKGZvcm1hdFRva2VuRnVuY3Rpb25zW3Rva2VuXSkge1xuICAgICAgICAgICAgICAgIGlmIChwYXJzZWRJbnB1dCkge1xuICAgICAgICAgICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5lbXB0eSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykudW51c2VkVG9rZW5zLnB1c2godG9rZW4pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBhZGRUaW1lVG9BcnJheUZyb21Ub2tlbih0b2tlbiwgcGFyc2VkSW5wdXQsIGNvbmZpZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjb25maWcuX3N0cmljdCAmJiAhcGFyc2VkSW5wdXQpIHtcbiAgICAgICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS51bnVzZWRUb2tlbnMucHVzaCh0b2tlbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBhZGQgcmVtYWluaW5nIHVucGFyc2VkIGlucHV0IGxlbmd0aCB0byB0aGUgc3RyaW5nXG4gICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLmNoYXJzTGVmdE92ZXIgPSBzdHJpbmdMZW5ndGggLSB0b3RhbFBhcnNlZElucHV0TGVuZ3RoO1xuICAgICAgICBpZiAoc3RyaW5nLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLnVudXNlZElucHV0LnB1c2goc3RyaW5nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGNsZWFyIF8xMmggZmxhZyBpZiBob3VyIGlzIDw9IDEyXG4gICAgICAgIGlmIChjb25maWcuX2FbSE9VUl0gPD0gMTIgJiZcbiAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLmJpZ0hvdXIgPT09IHRydWUgJiZcbiAgICAgICAgICAgIGNvbmZpZy5fYVtIT1VSXSA+IDApIHtcbiAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLmJpZ0hvdXIgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cblxuICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5wYXJzZWREYXRlUGFydHMgPSBjb25maWcuX2Euc2xpY2UoMCk7XG4gICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLm1lcmlkaWVtID0gY29uZmlnLl9tZXJpZGllbTtcbiAgICAgICAgLy8gaGFuZGxlIG1lcmlkaWVtXG4gICAgICAgIGNvbmZpZy5fYVtIT1VSXSA9IG1lcmlkaWVtRml4V3JhcChjb25maWcuX2xvY2FsZSwgY29uZmlnLl9hW0hPVVJdLCBjb25maWcuX21lcmlkaWVtKTtcblxuICAgICAgICBjb25maWdGcm9tQXJyYXkoY29uZmlnKTtcbiAgICAgICAgY2hlY2tPdmVyZmxvdyhjb25maWcpO1xuICAgIH1cblxuXG4gICAgZnVuY3Rpb24gbWVyaWRpZW1GaXhXcmFwIChsb2NhbGUsIGhvdXIsIG1lcmlkaWVtKSB7XG4gICAgICAgIHZhciBpc1BtO1xuXG4gICAgICAgIGlmIChtZXJpZGllbSA9PSBudWxsKSB7XG4gICAgICAgICAgICAvLyBub3RoaW5nIHRvIGRvXG4gICAgICAgICAgICByZXR1cm4gaG91cjtcbiAgICAgICAgfVxuICAgICAgICBpZiAobG9jYWxlLm1lcmlkaWVtSG91ciAhPSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gbG9jYWxlLm1lcmlkaWVtSG91cihob3VyLCBtZXJpZGllbSk7XG4gICAgICAgIH0gZWxzZSBpZiAobG9jYWxlLmlzUE0gIT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gRmFsbGJhY2tcbiAgICAgICAgICAgIGlzUG0gPSBsb2NhbGUuaXNQTShtZXJpZGllbSk7XG4gICAgICAgICAgICBpZiAoaXNQbSAmJiBob3VyIDwgMTIpIHtcbiAgICAgICAgICAgICAgICBob3VyICs9IDEyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFpc1BtICYmIGhvdXIgPT09IDEyKSB7XG4gICAgICAgICAgICAgICAgaG91ciA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gaG91cjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIHRoaXMgaXMgbm90IHN1cHBvc2VkIHRvIGhhcHBlblxuICAgICAgICAgICAgcmV0dXJuIGhvdXI7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBkYXRlIGZyb20gc3RyaW5nIGFuZCBhcnJheSBvZiBmb3JtYXQgc3RyaW5nc1xuICAgIGZ1bmN0aW9uIGNvbmZpZ0Zyb21TdHJpbmdBbmRBcnJheShjb25maWcpIHtcbiAgICAgICAgdmFyIHRlbXBDb25maWcsXG4gICAgICAgICAgICBiZXN0TW9tZW50LFxuXG4gICAgICAgICAgICBzY29yZVRvQmVhdCxcbiAgICAgICAgICAgIGksXG4gICAgICAgICAgICBjdXJyZW50U2NvcmU7XG5cbiAgICAgICAgaWYgKGNvbmZpZy5fZi5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLmludmFsaWRGb3JtYXQgPSB0cnVlO1xuICAgICAgICAgICAgY29uZmlnLl9kID0gbmV3IERhdGUoTmFOKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBjb25maWcuX2YubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGN1cnJlbnRTY29yZSA9IDA7XG4gICAgICAgICAgICB0ZW1wQ29uZmlnID0gY29weUNvbmZpZyh7fSwgY29uZmlnKTtcbiAgICAgICAgICAgIGlmIChjb25maWcuX3VzZVVUQyAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGVtcENvbmZpZy5fdXNlVVRDID0gY29uZmlnLl91c2VVVEM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0ZW1wQ29uZmlnLl9mID0gY29uZmlnLl9mW2ldO1xuICAgICAgICAgICAgY29uZmlnRnJvbVN0cmluZ0FuZEZvcm1hdCh0ZW1wQ29uZmlnKTtcblxuICAgICAgICAgICAgaWYgKCFpc1ZhbGlkKHRlbXBDb25maWcpKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGlmIHRoZXJlIGlzIGFueSBpbnB1dCB0aGF0IHdhcyBub3QgcGFyc2VkIGFkZCBhIHBlbmFsdHkgZm9yIHRoYXQgZm9ybWF0XG4gICAgICAgICAgICBjdXJyZW50U2NvcmUgKz0gZ2V0UGFyc2luZ0ZsYWdzKHRlbXBDb25maWcpLmNoYXJzTGVmdE92ZXI7XG5cbiAgICAgICAgICAgIC8vb3IgdG9rZW5zXG4gICAgICAgICAgICBjdXJyZW50U2NvcmUgKz0gZ2V0UGFyc2luZ0ZsYWdzKHRlbXBDb25maWcpLnVudXNlZFRva2Vucy5sZW5ndGggKiAxMDtcblxuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKHRlbXBDb25maWcpLnNjb3JlID0gY3VycmVudFNjb3JlO1xuXG4gICAgICAgICAgICBpZiAoc2NvcmVUb0JlYXQgPT0gbnVsbCB8fCBjdXJyZW50U2NvcmUgPCBzY29yZVRvQmVhdCkge1xuICAgICAgICAgICAgICAgIHNjb3JlVG9CZWF0ID0gY3VycmVudFNjb3JlO1xuICAgICAgICAgICAgICAgIGJlc3RNb21lbnQgPSB0ZW1wQ29uZmlnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZXh0ZW5kKGNvbmZpZywgYmVzdE1vbWVudCB8fCB0ZW1wQ29uZmlnKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjb25maWdGcm9tT2JqZWN0KGNvbmZpZykge1xuICAgICAgICBpZiAoY29uZmlnLl9kKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgaSA9IG5vcm1hbGl6ZU9iamVjdFVuaXRzKGNvbmZpZy5faSk7XG4gICAgICAgIGNvbmZpZy5fYSA9IG1hcChbaS55ZWFyLCBpLm1vbnRoLCBpLmRheSB8fCBpLmRhdGUsIGkuaG91ciwgaS5taW51dGUsIGkuc2Vjb25kLCBpLm1pbGxpc2Vjb25kXSwgZnVuY3Rpb24gKG9iaikge1xuICAgICAgICAgICAgcmV0dXJuIG9iaiAmJiBwYXJzZUludChvYmosIDEwKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uZmlnRnJvbUFycmF5KGNvbmZpZyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlRnJvbUNvbmZpZyAoY29uZmlnKSB7XG4gICAgICAgIHZhciByZXMgPSBuZXcgTW9tZW50KGNoZWNrT3ZlcmZsb3cocHJlcGFyZUNvbmZpZyhjb25maWcpKSk7XG4gICAgICAgIGlmIChyZXMuX25leHREYXkpIHtcbiAgICAgICAgICAgIC8vIEFkZGluZyBpcyBzbWFydCBlbm91Z2ggYXJvdW5kIERTVFxuICAgICAgICAgICAgcmVzLmFkZCgxLCAnZCcpO1xuICAgICAgICAgICAgcmVzLl9uZXh0RGF5ID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwcmVwYXJlQ29uZmlnIChjb25maWcpIHtcbiAgICAgICAgdmFyIGlucHV0ID0gY29uZmlnLl9pLFxuICAgICAgICAgICAgZm9ybWF0ID0gY29uZmlnLl9mO1xuXG4gICAgICAgIGNvbmZpZy5fbG9jYWxlID0gY29uZmlnLl9sb2NhbGUgfHwgZ2V0TG9jYWxlKGNvbmZpZy5fbCk7XG5cbiAgICAgICAgaWYgKGlucHV0ID09PSBudWxsIHx8IChmb3JtYXQgPT09IHVuZGVmaW5lZCAmJiBpbnB1dCA9PT0gJycpKSB7XG4gICAgICAgICAgICByZXR1cm4gY3JlYXRlSW52YWxpZCh7bnVsbElucHV0OiB0cnVlfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIGlucHV0ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgY29uZmlnLl9pID0gaW5wdXQgPSBjb25maWcuX2xvY2FsZS5wcmVwYXJzZShpbnB1dCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNNb21lbnQoaW5wdXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IE1vbWVudChjaGVja092ZXJmbG93KGlucHV0KSk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNEYXRlKGlucHV0KSkge1xuICAgICAgICAgICAgY29uZmlnLl9kID0gaW5wdXQ7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNBcnJheShmb3JtYXQpKSB7XG4gICAgICAgICAgICBjb25maWdGcm9tU3RyaW5nQW5kQXJyYXkoY29uZmlnKTtcbiAgICAgICAgfSBlbHNlIGlmIChmb3JtYXQpIHtcbiAgICAgICAgICAgIGNvbmZpZ0Zyb21TdHJpbmdBbmRGb3JtYXQoY29uZmlnKTtcbiAgICAgICAgfSAgZWxzZSB7XG4gICAgICAgICAgICBjb25maWdGcm9tSW5wdXQoY29uZmlnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghaXNWYWxpZChjb25maWcpKSB7XG4gICAgICAgICAgICBjb25maWcuX2QgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNvbmZpZztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjb25maWdGcm9tSW5wdXQoY29uZmlnKSB7XG4gICAgICAgIHZhciBpbnB1dCA9IGNvbmZpZy5faTtcbiAgICAgICAgaWYgKGlzVW5kZWZpbmVkKGlucHV0KSkge1xuICAgICAgICAgICAgY29uZmlnLl9kID0gbmV3IERhdGUoaG9va3Mubm93KCkpO1xuICAgICAgICB9IGVsc2UgaWYgKGlzRGF0ZShpbnB1dCkpIHtcbiAgICAgICAgICAgIGNvbmZpZy5fZCA9IG5ldyBEYXRlKGlucHV0LnZhbHVlT2YoKSk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGlucHV0ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgY29uZmlnRnJvbVN0cmluZyhjb25maWcpO1xuICAgICAgICB9IGVsc2UgaWYgKGlzQXJyYXkoaW5wdXQpKSB7XG4gICAgICAgICAgICBjb25maWcuX2EgPSBtYXAoaW5wdXQuc2xpY2UoMCksIGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VJbnQob2JqLCAxMCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbmZpZ0Zyb21BcnJheShjb25maWcpO1xuICAgICAgICB9IGVsc2UgaWYgKGlzT2JqZWN0KGlucHV0KSkge1xuICAgICAgICAgICAgY29uZmlnRnJvbU9iamVjdChjb25maWcpO1xuICAgICAgICB9IGVsc2UgaWYgKGlzTnVtYmVyKGlucHV0KSkge1xuICAgICAgICAgICAgLy8gZnJvbSBtaWxsaXNlY29uZHNcbiAgICAgICAgICAgIGNvbmZpZy5fZCA9IG5ldyBEYXRlKGlucHV0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGhvb2tzLmNyZWF0ZUZyb21JbnB1dEZhbGxiYWNrKGNvbmZpZyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVMb2NhbE9yVVRDIChpbnB1dCwgZm9ybWF0LCBsb2NhbGUsIHN0cmljdCwgaXNVVEMpIHtcbiAgICAgICAgdmFyIGMgPSB7fTtcblxuICAgICAgICBpZiAobG9jYWxlID09PSB0cnVlIHx8IGxvY2FsZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHN0cmljdCA9IGxvY2FsZTtcbiAgICAgICAgICAgIGxvY2FsZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICgoaXNPYmplY3QoaW5wdXQpICYmIGlzT2JqZWN0RW1wdHkoaW5wdXQpKSB8fFxuICAgICAgICAgICAgICAgIChpc0FycmF5KGlucHV0KSAmJiBpbnB1dC5sZW5ndGggPT09IDApKSB7XG4gICAgICAgICAgICBpbnB1dCA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICAvLyBvYmplY3QgY29uc3RydWN0aW9uIG11c3QgYmUgZG9uZSB0aGlzIHdheS5cbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL21vbWVudC9tb21lbnQvaXNzdWVzLzE0MjNcbiAgICAgICAgYy5faXNBTW9tZW50T2JqZWN0ID0gdHJ1ZTtcbiAgICAgICAgYy5fdXNlVVRDID0gYy5faXNVVEMgPSBpc1VUQztcbiAgICAgICAgYy5fbCA9IGxvY2FsZTtcbiAgICAgICAgYy5faSA9IGlucHV0O1xuICAgICAgICBjLl9mID0gZm9ybWF0O1xuICAgICAgICBjLl9zdHJpY3QgPSBzdHJpY3Q7XG5cbiAgICAgICAgcmV0dXJuIGNyZWF0ZUZyb21Db25maWcoYyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlTG9jYWwgKGlucHV0LCBmb3JtYXQsIGxvY2FsZSwgc3RyaWN0KSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVMb2NhbE9yVVRDKGlucHV0LCBmb3JtYXQsIGxvY2FsZSwgc3RyaWN0LCBmYWxzZSk7XG4gICAgfVxuXG4gICAgdmFyIHByb3RvdHlwZU1pbiA9IGRlcHJlY2F0ZShcbiAgICAgICAgJ21vbWVudCgpLm1pbiBpcyBkZXByZWNhdGVkLCB1c2UgbW9tZW50Lm1heCBpbnN0ZWFkLiBodHRwOi8vbW9tZW50anMuY29tL2d1aWRlcy8jL3dhcm5pbmdzL21pbi1tYXgvJyxcbiAgICAgICAgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIG90aGVyID0gY3JlYXRlTG9jYWwuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzVmFsaWQoKSAmJiBvdGhlci5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gb3RoZXIgPCB0aGlzID8gdGhpcyA6IG90aGVyO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlSW52YWxpZCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgKTtcblxuICAgIHZhciBwcm90b3R5cGVNYXggPSBkZXByZWNhdGUoXG4gICAgICAgICdtb21lbnQoKS5tYXggaXMgZGVwcmVjYXRlZCwgdXNlIG1vbWVudC5taW4gaW5zdGVhZC4gaHR0cDovL21vbWVudGpzLmNvbS9ndWlkZXMvIy93YXJuaW5ncy9taW4tbWF4LycsXG4gICAgICAgIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBvdGhlciA9IGNyZWF0ZUxvY2FsLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICBpZiAodGhpcy5pc1ZhbGlkKCkgJiYgb3RoZXIuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG90aGVyID4gdGhpcyA/IHRoaXMgOiBvdGhlcjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUludmFsaWQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICk7XG5cbiAgICAvLyBQaWNrIGEgbW9tZW50IG0gZnJvbSBtb21lbnRzIHNvIHRoYXQgbVtmbl0ob3RoZXIpIGlzIHRydWUgZm9yIGFsbFxuICAgIC8vIG90aGVyLiBUaGlzIHJlbGllcyBvbiB0aGUgZnVuY3Rpb24gZm4gdG8gYmUgdHJhbnNpdGl2ZS5cbiAgICAvL1xuICAgIC8vIG1vbWVudHMgc2hvdWxkIGVpdGhlciBiZSBhbiBhcnJheSBvZiBtb21lbnQgb2JqZWN0cyBvciBhbiBhcnJheSwgd2hvc2VcbiAgICAvLyBmaXJzdCBlbGVtZW50IGlzIGFuIGFycmF5IG9mIG1vbWVudCBvYmplY3RzLlxuICAgIGZ1bmN0aW9uIHBpY2tCeShmbiwgbW9tZW50cykge1xuICAgICAgICB2YXIgcmVzLCBpO1xuICAgICAgICBpZiAobW9tZW50cy5sZW5ndGggPT09IDEgJiYgaXNBcnJheShtb21lbnRzWzBdKSkge1xuICAgICAgICAgICAgbW9tZW50cyA9IG1vbWVudHNbMF07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFtb21lbnRzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUxvY2FsKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmVzID0gbW9tZW50c1swXTtcbiAgICAgICAgZm9yIChpID0gMTsgaSA8IG1vbWVudHMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgIGlmICghbW9tZW50c1tpXS5pc1ZhbGlkKCkgfHwgbW9tZW50c1tpXVtmbl0ocmVzKSkge1xuICAgICAgICAgICAgICAgIHJlcyA9IG1vbWVudHNbaV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICAvLyBUT0RPOiBVc2UgW10uc29ydCBpbnN0ZWFkP1xuICAgIGZ1bmN0aW9uIG1pbiAoKSB7XG4gICAgICAgIHZhciBhcmdzID0gW10uc2xpY2UuY2FsbChhcmd1bWVudHMsIDApO1xuXG4gICAgICAgIHJldHVybiBwaWNrQnkoJ2lzQmVmb3JlJywgYXJncyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWF4ICgpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMCk7XG5cbiAgICAgICAgcmV0dXJuIHBpY2tCeSgnaXNBZnRlcicsIGFyZ3MpO1xuICAgIH1cblxuICAgIHZhciBub3cgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBEYXRlLm5vdyA/IERhdGUubm93KCkgOiArKG5ldyBEYXRlKCkpO1xuICAgIH07XG5cbiAgICB2YXIgb3JkZXJpbmcgPSBbJ3llYXInLCAncXVhcnRlcicsICdtb250aCcsICd3ZWVrJywgJ2RheScsICdob3VyJywgJ21pbnV0ZScsICdzZWNvbmQnLCAnbWlsbGlzZWNvbmQnXTtcblxuICAgIGZ1bmN0aW9uIGlzRHVyYXRpb25WYWxpZChtKSB7XG4gICAgICAgIGZvciAodmFyIGtleSBpbiBtKSB7XG4gICAgICAgICAgICBpZiAoIShpbmRleE9mLmNhbGwob3JkZXJpbmcsIGtleSkgIT09IC0xICYmIChtW2tleV0gPT0gbnVsbCB8fCAhaXNOYU4obVtrZXldKSkpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHVuaXRIYXNEZWNpbWFsID0gZmFsc2U7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb3JkZXJpbmcubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgIGlmIChtW29yZGVyaW5nW2ldXSkge1xuICAgICAgICAgICAgICAgIGlmICh1bml0SGFzRGVjaW1hbCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIG9ubHkgYWxsb3cgbm9uLWludGVnZXJzIGZvciBzbWFsbGVzdCB1bml0XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChwYXJzZUZsb2F0KG1bb3JkZXJpbmdbaV1dKSAhPT0gdG9JbnQobVtvcmRlcmluZ1tpXV0pKSB7XG4gICAgICAgICAgICAgICAgICAgIHVuaXRIYXNEZWNpbWFsID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1ZhbGlkJDEoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc1ZhbGlkO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZUludmFsaWQkMSgpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUR1cmF0aW9uKE5hTik7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gRHVyYXRpb24gKGR1cmF0aW9uKSB7XG4gICAgICAgIHZhciBub3JtYWxpemVkSW5wdXQgPSBub3JtYWxpemVPYmplY3RVbml0cyhkdXJhdGlvbiksXG4gICAgICAgICAgICB5ZWFycyA9IG5vcm1hbGl6ZWRJbnB1dC55ZWFyIHx8IDAsXG4gICAgICAgICAgICBxdWFydGVycyA9IG5vcm1hbGl6ZWRJbnB1dC5xdWFydGVyIHx8IDAsXG4gICAgICAgICAgICBtb250aHMgPSBub3JtYWxpemVkSW5wdXQubW9udGggfHwgMCxcbiAgICAgICAgICAgIHdlZWtzID0gbm9ybWFsaXplZElucHV0LndlZWsgfHwgbm9ybWFsaXplZElucHV0Lmlzb1dlZWsgfHwgMCxcbiAgICAgICAgICAgIGRheXMgPSBub3JtYWxpemVkSW5wdXQuZGF5IHx8IDAsXG4gICAgICAgICAgICBob3VycyA9IG5vcm1hbGl6ZWRJbnB1dC5ob3VyIHx8IDAsXG4gICAgICAgICAgICBtaW51dGVzID0gbm9ybWFsaXplZElucHV0Lm1pbnV0ZSB8fCAwLFxuICAgICAgICAgICAgc2Vjb25kcyA9IG5vcm1hbGl6ZWRJbnB1dC5zZWNvbmQgfHwgMCxcbiAgICAgICAgICAgIG1pbGxpc2Vjb25kcyA9IG5vcm1hbGl6ZWRJbnB1dC5taWxsaXNlY29uZCB8fCAwO1xuXG4gICAgICAgIHRoaXMuX2lzVmFsaWQgPSBpc0R1cmF0aW9uVmFsaWQobm9ybWFsaXplZElucHV0KTtcblxuICAgICAgICAvLyByZXByZXNlbnRhdGlvbiBmb3IgZGF0ZUFkZFJlbW92ZVxuICAgICAgICB0aGlzLl9taWxsaXNlY29uZHMgPSArbWlsbGlzZWNvbmRzICtcbiAgICAgICAgICAgIHNlY29uZHMgKiAxZTMgKyAvLyAxMDAwXG4gICAgICAgICAgICBtaW51dGVzICogNmU0ICsgLy8gMTAwMCAqIDYwXG4gICAgICAgICAgICBob3VycyAqIDEwMDAgKiA2MCAqIDYwOyAvL3VzaW5nIDEwMDAgKiA2MCAqIDYwIGluc3RlYWQgb2YgMzZlNSB0byBhdm9pZCBmbG9hdGluZyBwb2ludCByb3VuZGluZyBlcnJvcnMgaHR0cHM6Ly9naXRodWIuY29tL21vbWVudC9tb21lbnQvaXNzdWVzLzI5NzhcbiAgICAgICAgLy8gQmVjYXVzZSBvZiBkYXRlQWRkUmVtb3ZlIHRyZWF0cyAyNCBob3VycyBhcyBkaWZmZXJlbnQgZnJvbSBhXG4gICAgICAgIC8vIGRheSB3aGVuIHdvcmtpbmcgYXJvdW5kIERTVCwgd2UgbmVlZCB0byBzdG9yZSB0aGVtIHNlcGFyYXRlbHlcbiAgICAgICAgdGhpcy5fZGF5cyA9ICtkYXlzICtcbiAgICAgICAgICAgIHdlZWtzICogNztcbiAgICAgICAgLy8gSXQgaXMgaW1wb3NzaWJsZSB0byB0cmFuc2xhdGUgbW9udGhzIGludG8gZGF5cyB3aXRob3V0IGtub3dpbmdcbiAgICAgICAgLy8gd2hpY2ggbW9udGhzIHlvdSBhcmUgYXJlIHRhbGtpbmcgYWJvdXQsIHNvIHdlIGhhdmUgdG8gc3RvcmVcbiAgICAgICAgLy8gaXQgc2VwYXJhdGVseS5cbiAgICAgICAgdGhpcy5fbW9udGhzID0gK21vbnRocyArXG4gICAgICAgICAgICBxdWFydGVycyAqIDMgK1xuICAgICAgICAgICAgeWVhcnMgKiAxMjtcblxuICAgICAgICB0aGlzLl9kYXRhID0ge307XG5cbiAgICAgICAgdGhpcy5fbG9jYWxlID0gZ2V0TG9jYWxlKCk7XG5cbiAgICAgICAgdGhpcy5fYnViYmxlKCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNEdXJhdGlvbiAob2JqKSB7XG4gICAgICAgIHJldHVybiBvYmogaW5zdGFuY2VvZiBEdXJhdGlvbjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhYnNSb3VuZCAobnVtYmVyKSB7XG4gICAgICAgIGlmIChudW1iZXIgPCAwKSB7XG4gICAgICAgICAgICByZXR1cm4gTWF0aC5yb3VuZCgtMSAqIG51bWJlcikgKiAtMTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBNYXRoLnJvdW5kKG51bWJlcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBmdW5jdGlvbiBvZmZzZXQgKHRva2VuLCBzZXBhcmF0b3IpIHtcbiAgICAgICAgYWRkRm9ybWF0VG9rZW4odG9rZW4sIDAsIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBvZmZzZXQgPSB0aGlzLnV0Y09mZnNldCgpO1xuICAgICAgICAgICAgdmFyIHNpZ24gPSAnKyc7XG4gICAgICAgICAgICBpZiAob2Zmc2V0IDwgMCkge1xuICAgICAgICAgICAgICAgIG9mZnNldCA9IC1vZmZzZXQ7XG4gICAgICAgICAgICAgICAgc2lnbiA9ICctJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBzaWduICsgemVyb0ZpbGwofn4ob2Zmc2V0IC8gNjApLCAyKSArIHNlcGFyYXRvciArIHplcm9GaWxsKH5+KG9mZnNldCkgJSA2MCwgMik7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG9mZnNldCgnWicsICc6Jyk7XG4gICAgb2Zmc2V0KCdaWicsICcnKTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ1onLCAgbWF0Y2hTaG9ydE9mZnNldCk7XG4gICAgYWRkUmVnZXhUb2tlbignWlonLCBtYXRjaFNob3J0T2Zmc2V0KTtcbiAgICBhZGRQYXJzZVRva2VuKFsnWicsICdaWiddLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcpIHtcbiAgICAgICAgY29uZmlnLl91c2VVVEMgPSB0cnVlO1xuICAgICAgICBjb25maWcuX3R6bSA9IG9mZnNldEZyb21TdHJpbmcobWF0Y2hTaG9ydE9mZnNldCwgaW5wdXQpO1xuICAgIH0pO1xuXG4gICAgLy8gSEVMUEVSU1xuXG4gICAgLy8gdGltZXpvbmUgY2h1bmtlclxuICAgIC8vICcrMTA6MDAnID4gWycxMCcsICAnMDAnXVxuICAgIC8vICctMTUzMCcgID4gWyctMTUnLCAnMzAnXVxuICAgIHZhciBjaHVua09mZnNldCA9IC8oW1xcK1xcLV18XFxkXFxkKS9naTtcblxuICAgIGZ1bmN0aW9uIG9mZnNldEZyb21TdHJpbmcobWF0Y2hlciwgc3RyaW5nKSB7XG4gICAgICAgIHZhciBtYXRjaGVzID0gKHN0cmluZyB8fCAnJykubWF0Y2gobWF0Y2hlcik7XG5cbiAgICAgICAgaWYgKG1hdGNoZXMgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGNodW5rICAgPSBtYXRjaGVzW21hdGNoZXMubGVuZ3RoIC0gMV0gfHwgW107XG4gICAgICAgIHZhciBwYXJ0cyAgID0gKGNodW5rICsgJycpLm1hdGNoKGNodW5rT2Zmc2V0KSB8fCBbJy0nLCAwLCAwXTtcbiAgICAgICAgdmFyIG1pbnV0ZXMgPSArKHBhcnRzWzFdICogNjApICsgdG9JbnQocGFydHNbMl0pO1xuXG4gICAgICAgIHJldHVybiBtaW51dGVzID09PSAwID9cbiAgICAgICAgICAwIDpcbiAgICAgICAgICBwYXJ0c1swXSA9PT0gJysnID8gbWludXRlcyA6IC1taW51dGVzO1xuICAgIH1cblxuICAgIC8vIFJldHVybiBhIG1vbWVudCBmcm9tIGlucHV0LCB0aGF0IGlzIGxvY2FsL3V0Yy96b25lIGVxdWl2YWxlbnQgdG8gbW9kZWwuXG4gICAgZnVuY3Rpb24gY2xvbmVXaXRoT2Zmc2V0KGlucHV0LCBtb2RlbCkge1xuICAgICAgICB2YXIgcmVzLCBkaWZmO1xuICAgICAgICBpZiAobW9kZWwuX2lzVVRDKSB7XG4gICAgICAgICAgICByZXMgPSBtb2RlbC5jbG9uZSgpO1xuICAgICAgICAgICAgZGlmZiA9IChpc01vbWVudChpbnB1dCkgfHwgaXNEYXRlKGlucHV0KSA/IGlucHV0LnZhbHVlT2YoKSA6IGNyZWF0ZUxvY2FsKGlucHV0KS52YWx1ZU9mKCkpIC0gcmVzLnZhbHVlT2YoKTtcbiAgICAgICAgICAgIC8vIFVzZSBsb3ctbGV2ZWwgYXBpLCBiZWNhdXNlIHRoaXMgZm4gaXMgbG93LWxldmVsIGFwaS5cbiAgICAgICAgICAgIHJlcy5fZC5zZXRUaW1lKHJlcy5fZC52YWx1ZU9mKCkgKyBkaWZmKTtcbiAgICAgICAgICAgIGhvb2tzLnVwZGF0ZU9mZnNldChyZXMsIGZhbHNlKTtcbiAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gY3JlYXRlTG9jYWwoaW5wdXQpLmxvY2FsKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXREYXRlT2Zmc2V0IChtKSB7XG4gICAgICAgIC8vIE9uIEZpcmVmb3guMjQgRGF0ZSNnZXRUaW1lem9uZU9mZnNldCByZXR1cm5zIGEgZmxvYXRpbmcgcG9pbnQuXG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9tb21lbnQvbW9tZW50L3B1bGwvMTg3MVxuICAgICAgICByZXR1cm4gLU1hdGgucm91bmQobS5fZC5nZXRUaW1lem9uZU9mZnNldCgpIC8gMTUpICogMTU7XG4gICAgfVxuXG4gICAgLy8gSE9PS1NcblxuICAgIC8vIFRoaXMgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgd2hlbmV2ZXIgYSBtb21lbnQgaXMgbXV0YXRlZC5cbiAgICAvLyBJdCBpcyBpbnRlbmRlZCB0byBrZWVwIHRoZSBvZmZzZXQgaW4gc3luYyB3aXRoIHRoZSB0aW1lem9uZS5cbiAgICBob29rcy51cGRhdGVPZmZzZXQgPSBmdW5jdGlvbiAoKSB7fTtcblxuICAgIC8vIE1PTUVOVFNcblxuICAgIC8vIGtlZXBMb2NhbFRpbWUgPSB0cnVlIG1lYW5zIG9ubHkgY2hhbmdlIHRoZSB0aW1lem9uZSwgd2l0aG91dFxuICAgIC8vIGFmZmVjdGluZyB0aGUgbG9jYWwgaG91ci4gU28gNTozMToyNiArMDMwMCAtLVt1dGNPZmZzZXQoMiwgdHJ1ZSldLS0+XG4gICAgLy8gNTozMToyNiArMDIwMCBJdCBpcyBwb3NzaWJsZSB0aGF0IDU6MzE6MjYgZG9lc24ndCBleGlzdCB3aXRoIG9mZnNldFxuICAgIC8vICswMjAwLCBzbyB3ZSBhZGp1c3QgdGhlIHRpbWUgYXMgbmVlZGVkLCB0byBiZSB2YWxpZC5cbiAgICAvL1xuICAgIC8vIEtlZXBpbmcgdGhlIHRpbWUgYWN0dWFsbHkgYWRkcy9zdWJ0cmFjdHMgKG9uZSBob3VyKVxuICAgIC8vIGZyb20gdGhlIGFjdHVhbCByZXByZXNlbnRlZCB0aW1lLiBUaGF0IGlzIHdoeSB3ZSBjYWxsIHVwZGF0ZU9mZnNldFxuICAgIC8vIGEgc2Vjb25kIHRpbWUuIEluIGNhc2UgaXQgd2FudHMgdXMgdG8gY2hhbmdlIHRoZSBvZmZzZXQgYWdhaW5cbiAgICAvLyBfY2hhbmdlSW5Qcm9ncmVzcyA9PSB0cnVlIGNhc2UsIHRoZW4gd2UgaGF2ZSB0byBhZGp1c3QsIGJlY2F1c2VcbiAgICAvLyB0aGVyZSBpcyBubyBzdWNoIHRpbWUgaW4gdGhlIGdpdmVuIHRpbWV6b25lLlxuICAgIGZ1bmN0aW9uIGdldFNldE9mZnNldCAoaW5wdXQsIGtlZXBMb2NhbFRpbWUsIGtlZXBNaW51dGVzKSB7XG4gICAgICAgIHZhciBvZmZzZXQgPSB0aGlzLl9vZmZzZXQgfHwgMCxcbiAgICAgICAgICAgIGxvY2FsQWRqdXN0O1xuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gaW5wdXQgIT0gbnVsbCA/IHRoaXMgOiBOYU47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlucHV0ICE9IG51bGwpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgaW5wdXQgPSBvZmZzZXRGcm9tU3RyaW5nKG1hdGNoU2hvcnRPZmZzZXQsIGlucHV0KTtcbiAgICAgICAgICAgICAgICBpZiAoaW5wdXQgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChNYXRoLmFicyhpbnB1dCkgPCAxNiAmJiAha2VlcE1pbnV0ZXMpIHtcbiAgICAgICAgICAgICAgICBpbnB1dCA9IGlucHV0ICogNjA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXRoaXMuX2lzVVRDICYmIGtlZXBMb2NhbFRpbWUpIHtcbiAgICAgICAgICAgICAgICBsb2NhbEFkanVzdCA9IGdldERhdGVPZmZzZXQodGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl9vZmZzZXQgPSBpbnB1dDtcbiAgICAgICAgICAgIHRoaXMuX2lzVVRDID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmIChsb2NhbEFkanVzdCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGQobG9jYWxBZGp1c3QsICdtJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAob2Zmc2V0ICE9PSBpbnB1dCkge1xuICAgICAgICAgICAgICAgIGlmICgha2VlcExvY2FsVGltZSB8fCB0aGlzLl9jaGFuZ2VJblByb2dyZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgIGFkZFN1YnRyYWN0KHRoaXMsIGNyZWF0ZUR1cmF0aW9uKGlucHV0IC0gb2Zmc2V0LCAnbScpLCAxLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICghdGhpcy5fY2hhbmdlSW5Qcm9ncmVzcykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFuZ2VJblByb2dyZXNzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgaG9va3MudXBkYXRlT2Zmc2V0KHRoaXMsIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFuZ2VJblByb2dyZXNzID0gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9pc1VUQyA/IG9mZnNldCA6IGdldERhdGVPZmZzZXQodGhpcyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRTZXRab25lIChpbnB1dCwga2VlcExvY2FsVGltZSkge1xuICAgICAgICBpZiAoaW5wdXQgIT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBpbnB1dCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICBpbnB1dCA9IC1pbnB1dDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy51dGNPZmZzZXQoaW5wdXQsIGtlZXBMb2NhbFRpbWUpO1xuXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiAtdGhpcy51dGNPZmZzZXQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNldE9mZnNldFRvVVRDIChrZWVwTG9jYWxUaW1lKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnV0Y09mZnNldCgwLCBrZWVwTG9jYWxUaW1lKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzZXRPZmZzZXRUb0xvY2FsIChrZWVwTG9jYWxUaW1lKSB7XG4gICAgICAgIGlmICh0aGlzLl9pc1VUQykge1xuICAgICAgICAgICAgdGhpcy51dGNPZmZzZXQoMCwga2VlcExvY2FsVGltZSk7XG4gICAgICAgICAgICB0aGlzLl9pc1VUQyA9IGZhbHNlO1xuXG4gICAgICAgICAgICBpZiAoa2VlcExvY2FsVGltZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc3VidHJhY3QoZ2V0RGF0ZU9mZnNldCh0aGlzKSwgJ20nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzZXRPZmZzZXRUb1BhcnNlZE9mZnNldCAoKSB7XG4gICAgICAgIGlmICh0aGlzLl90em0gIT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy51dGNPZmZzZXQodGhpcy5fdHptLCBmYWxzZSwgdHJ1ZSk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHRoaXMuX2kgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICB2YXIgdFpvbmUgPSBvZmZzZXRGcm9tU3RyaW5nKG1hdGNoT2Zmc2V0LCB0aGlzLl9pKTtcbiAgICAgICAgICAgIGlmICh0Wm9uZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy51dGNPZmZzZXQodFpvbmUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy51dGNPZmZzZXQoMCwgdHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaGFzQWxpZ25lZEhvdXJPZmZzZXQgKGlucHV0KSB7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpbnB1dCA9IGlucHV0ID8gY3JlYXRlTG9jYWwoaW5wdXQpLnV0Y09mZnNldCgpIDogMDtcblxuICAgICAgICByZXR1cm4gKHRoaXMudXRjT2Zmc2V0KCkgLSBpbnB1dCkgJSA2MCA9PT0gMDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0RheWxpZ2h0U2F2aW5nVGltZSAoKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICB0aGlzLnV0Y09mZnNldCgpID4gdGhpcy5jbG9uZSgpLm1vbnRoKDApLnV0Y09mZnNldCgpIHx8XG4gICAgICAgICAgICB0aGlzLnV0Y09mZnNldCgpID4gdGhpcy5jbG9uZSgpLm1vbnRoKDUpLnV0Y09mZnNldCgpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNEYXlsaWdodFNhdmluZ1RpbWVTaGlmdGVkICgpIHtcbiAgICAgICAgaWYgKCFpc1VuZGVmaW5lZCh0aGlzLl9pc0RTVFNoaWZ0ZWQpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5faXNEU1RTaGlmdGVkO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGMgPSB7fTtcblxuICAgICAgICBjb3B5Q29uZmlnKGMsIHRoaXMpO1xuICAgICAgICBjID0gcHJlcGFyZUNvbmZpZyhjKTtcblxuICAgICAgICBpZiAoYy5fYSkge1xuICAgICAgICAgICAgdmFyIG90aGVyID0gYy5faXNVVEMgPyBjcmVhdGVVVEMoYy5fYSkgOiBjcmVhdGVMb2NhbChjLl9hKTtcbiAgICAgICAgICAgIHRoaXMuX2lzRFNUU2hpZnRlZCA9IHRoaXMuaXNWYWxpZCgpICYmXG4gICAgICAgICAgICAgICAgY29tcGFyZUFycmF5cyhjLl9hLCBvdGhlci50b0FycmF5KCkpID4gMDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX2lzRFNUU2hpZnRlZCA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzRFNUU2hpZnRlZDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0xvY2FsICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNWYWxpZCgpID8gIXRoaXMuX2lzVVRDIDogZmFsc2U7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNVdGNPZmZzZXQgKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pc1ZhbGlkKCkgPyB0aGlzLl9pc1VUQyA6IGZhbHNlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzVXRjICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNWYWxpZCgpID8gdGhpcy5faXNVVEMgJiYgdGhpcy5fb2Zmc2V0ID09PSAwIDogZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gQVNQLk5FVCBqc29uIGRhdGUgZm9ybWF0IHJlZ2V4XG4gICAgdmFyIGFzcE5ldFJlZ2V4ID0gL14oXFwtfFxcKyk/KD86KFxcZCopWy4gXSk/KFxcZCspXFw6KFxcZCspKD86XFw6KFxcZCspKFxcLlxcZCopPyk/JC87XG5cbiAgICAvLyBmcm9tIGh0dHA6Ly9kb2NzLmNsb3N1cmUtbGlicmFyeS5nb29nbGVjb2RlLmNvbS9naXQvY2xvc3VyZV9nb29nX2RhdGVfZGF0ZS5qcy5zb3VyY2UuaHRtbFxuICAgIC8vIHNvbWV3aGF0IG1vcmUgaW4gbGluZSB3aXRoIDQuNC4zLjIgMjAwNCBzcGVjLCBidXQgYWxsb3dzIGRlY2ltYWwgYW55d2hlcmVcbiAgICAvLyBhbmQgZnVydGhlciBtb2RpZmllZCB0byBhbGxvdyBmb3Igc3RyaW5ncyBjb250YWluaW5nIGJvdGggd2VlayBhbmQgZGF5XG4gICAgdmFyIGlzb1JlZ2V4ID0gL14oLXxcXCspP1AoPzooWy0rXT9bMC05LC5dKilZKT8oPzooWy0rXT9bMC05LC5dKilNKT8oPzooWy0rXT9bMC05LC5dKilXKT8oPzooWy0rXT9bMC05LC5dKilEKT8oPzpUKD86KFstK10/WzAtOSwuXSopSCk/KD86KFstK10/WzAtOSwuXSopTSk/KD86KFstK10/WzAtOSwuXSopUyk/KT8kLztcblxuICAgIGZ1bmN0aW9uIGNyZWF0ZUR1cmF0aW9uIChpbnB1dCwga2V5KSB7XG4gICAgICAgIHZhciBkdXJhdGlvbiA9IGlucHV0LFxuICAgICAgICAgICAgLy8gbWF0Y2hpbmcgYWdhaW5zdCByZWdleHAgaXMgZXhwZW5zaXZlLCBkbyBpdCBvbiBkZW1hbmRcbiAgICAgICAgICAgIG1hdGNoID0gbnVsbCxcbiAgICAgICAgICAgIHNpZ24sXG4gICAgICAgICAgICByZXQsXG4gICAgICAgICAgICBkaWZmUmVzO1xuXG4gICAgICAgIGlmIChpc0R1cmF0aW9uKGlucHV0KSkge1xuICAgICAgICAgICAgZHVyYXRpb24gPSB7XG4gICAgICAgICAgICAgICAgbXMgOiBpbnB1dC5fbWlsbGlzZWNvbmRzLFxuICAgICAgICAgICAgICAgIGQgIDogaW5wdXQuX2RheXMsXG4gICAgICAgICAgICAgICAgTSAgOiBpbnB1dC5fbW9udGhzXG4gICAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2UgaWYgKGlzTnVtYmVyKGlucHV0KSkge1xuICAgICAgICAgICAgZHVyYXRpb24gPSB7fTtcbiAgICAgICAgICAgIGlmIChrZXkpIHtcbiAgICAgICAgICAgICAgICBkdXJhdGlvbltrZXldID0gaW5wdXQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGR1cmF0aW9uLm1pbGxpc2Vjb25kcyA9IGlucHV0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKCEhKG1hdGNoID0gYXNwTmV0UmVnZXguZXhlYyhpbnB1dCkpKSB7XG4gICAgICAgICAgICBzaWduID0gKG1hdGNoWzFdID09PSAnLScpID8gLTEgOiAxO1xuICAgICAgICAgICAgZHVyYXRpb24gPSB7XG4gICAgICAgICAgICAgICAgeSAgOiAwLFxuICAgICAgICAgICAgICAgIGQgIDogdG9JbnQobWF0Y2hbREFURV0pICAgICAgICAgICAgICAgICAgICAgICAgICogc2lnbixcbiAgICAgICAgICAgICAgICBoICA6IHRvSW50KG1hdGNoW0hPVVJdKSAgICAgICAgICAgICAgICAgICAgICAgICAqIHNpZ24sXG4gICAgICAgICAgICAgICAgbSAgOiB0b0ludChtYXRjaFtNSU5VVEVdKSAgICAgICAgICAgICAgICAgICAgICAgKiBzaWduLFxuICAgICAgICAgICAgICAgIHMgIDogdG9JbnQobWF0Y2hbU0VDT05EXSkgICAgICAgICAgICAgICAgICAgICAgICogc2lnbixcbiAgICAgICAgICAgICAgICBtcyA6IHRvSW50KGFic1JvdW5kKG1hdGNoW01JTExJU0VDT05EXSAqIDEwMDApKSAqIHNpZ24gLy8gdGhlIG1pbGxpc2Vjb25kIGRlY2ltYWwgcG9pbnQgaXMgaW5jbHVkZWQgaW4gdGhlIG1hdGNoXG4gICAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2UgaWYgKCEhKG1hdGNoID0gaXNvUmVnZXguZXhlYyhpbnB1dCkpKSB7XG4gICAgICAgICAgICBzaWduID0gKG1hdGNoWzFdID09PSAnLScpID8gLTEgOiAxO1xuICAgICAgICAgICAgZHVyYXRpb24gPSB7XG4gICAgICAgICAgICAgICAgeSA6IHBhcnNlSXNvKG1hdGNoWzJdLCBzaWduKSxcbiAgICAgICAgICAgICAgICBNIDogcGFyc2VJc28obWF0Y2hbM10sIHNpZ24pLFxuICAgICAgICAgICAgICAgIHcgOiBwYXJzZUlzbyhtYXRjaFs0XSwgc2lnbiksXG4gICAgICAgICAgICAgICAgZCA6IHBhcnNlSXNvKG1hdGNoWzVdLCBzaWduKSxcbiAgICAgICAgICAgICAgICBoIDogcGFyc2VJc28obWF0Y2hbNl0sIHNpZ24pLFxuICAgICAgICAgICAgICAgIG0gOiBwYXJzZUlzbyhtYXRjaFs3XSwgc2lnbiksXG4gICAgICAgICAgICAgICAgcyA6IHBhcnNlSXNvKG1hdGNoWzhdLCBzaWduKVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIGlmIChkdXJhdGlvbiA9PSBudWxsKSB7Ly8gY2hlY2tzIGZvciBudWxsIG9yIHVuZGVmaW5lZFxuICAgICAgICAgICAgZHVyYXRpb24gPSB7fTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZHVyYXRpb24gPT09ICdvYmplY3QnICYmICgnZnJvbScgaW4gZHVyYXRpb24gfHwgJ3RvJyBpbiBkdXJhdGlvbikpIHtcbiAgICAgICAgICAgIGRpZmZSZXMgPSBtb21lbnRzRGlmZmVyZW5jZShjcmVhdGVMb2NhbChkdXJhdGlvbi5mcm9tKSwgY3JlYXRlTG9jYWwoZHVyYXRpb24udG8pKTtcblxuICAgICAgICAgICAgZHVyYXRpb24gPSB7fTtcbiAgICAgICAgICAgIGR1cmF0aW9uLm1zID0gZGlmZlJlcy5taWxsaXNlY29uZHM7XG4gICAgICAgICAgICBkdXJhdGlvbi5NID0gZGlmZlJlcy5tb250aHM7XG4gICAgICAgIH1cblxuICAgICAgICByZXQgPSBuZXcgRHVyYXRpb24oZHVyYXRpb24pO1xuXG4gICAgICAgIGlmIChpc0R1cmF0aW9uKGlucHV0KSAmJiBoYXNPd25Qcm9wKGlucHV0LCAnX2xvY2FsZScpKSB7XG4gICAgICAgICAgICByZXQuX2xvY2FsZSA9IGlucHV0Ll9sb2NhbGU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmV0O1xuICAgIH1cblxuICAgIGNyZWF0ZUR1cmF0aW9uLmZuID0gRHVyYXRpb24ucHJvdG90eXBlO1xuICAgIGNyZWF0ZUR1cmF0aW9uLmludmFsaWQgPSBjcmVhdGVJbnZhbGlkJDE7XG5cbiAgICBmdW5jdGlvbiBwYXJzZUlzbyAoaW5wLCBzaWduKSB7XG4gICAgICAgIC8vIFdlJ2Qgbm9ybWFsbHkgdXNlIH5+aW5wIGZvciB0aGlzLCBidXQgdW5mb3J0dW5hdGVseSBpdCBhbHNvXG4gICAgICAgIC8vIGNvbnZlcnRzIGZsb2F0cyB0byBpbnRzLlxuICAgICAgICAvLyBpbnAgbWF5IGJlIHVuZGVmaW5lZCwgc28gY2FyZWZ1bCBjYWxsaW5nIHJlcGxhY2Ugb24gaXQuXG4gICAgICAgIHZhciByZXMgPSBpbnAgJiYgcGFyc2VGbG9hdChpbnAucmVwbGFjZSgnLCcsICcuJykpO1xuICAgICAgICAvLyBhcHBseSBzaWduIHdoaWxlIHdlJ3JlIGF0IGl0XG4gICAgICAgIHJldHVybiAoaXNOYU4ocmVzKSA/IDAgOiByZXMpICogc2lnbjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwb3NpdGl2ZU1vbWVudHNEaWZmZXJlbmNlKGJhc2UsIG90aGVyKSB7XG4gICAgICAgIHZhciByZXMgPSB7fTtcblxuICAgICAgICByZXMubW9udGhzID0gb3RoZXIubW9udGgoKSAtIGJhc2UubW9udGgoKSArXG4gICAgICAgICAgICAob3RoZXIueWVhcigpIC0gYmFzZS55ZWFyKCkpICogMTI7XG4gICAgICAgIGlmIChiYXNlLmNsb25lKCkuYWRkKHJlcy5tb250aHMsICdNJykuaXNBZnRlcihvdGhlcikpIHtcbiAgICAgICAgICAgIC0tcmVzLm1vbnRocztcbiAgICAgICAgfVxuXG4gICAgICAgIHJlcy5taWxsaXNlY29uZHMgPSArb3RoZXIgLSArKGJhc2UuY2xvbmUoKS5hZGQocmVzLm1vbnRocywgJ00nKSk7XG5cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtb21lbnRzRGlmZmVyZW5jZShiYXNlLCBvdGhlcikge1xuICAgICAgICB2YXIgcmVzO1xuICAgICAgICBpZiAoIShiYXNlLmlzVmFsaWQoKSAmJiBvdGhlci5pc1ZhbGlkKCkpKSB7XG4gICAgICAgICAgICByZXR1cm4ge21pbGxpc2Vjb25kczogMCwgbW9udGhzOiAwfTtcbiAgICAgICAgfVxuXG4gICAgICAgIG90aGVyID0gY2xvbmVXaXRoT2Zmc2V0KG90aGVyLCBiYXNlKTtcbiAgICAgICAgaWYgKGJhc2UuaXNCZWZvcmUob3RoZXIpKSB7XG4gICAgICAgICAgICByZXMgPSBwb3NpdGl2ZU1vbWVudHNEaWZmZXJlbmNlKGJhc2UsIG90aGVyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlcyA9IHBvc2l0aXZlTW9tZW50c0RpZmZlcmVuY2Uob3RoZXIsIGJhc2UpO1xuICAgICAgICAgICAgcmVzLm1pbGxpc2Vjb25kcyA9IC1yZXMubWlsbGlzZWNvbmRzO1xuICAgICAgICAgICAgcmVzLm1vbnRocyA9IC1yZXMubW9udGhzO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICAvLyBUT0RPOiByZW1vdmUgJ25hbWUnIGFyZyBhZnRlciBkZXByZWNhdGlvbiBpcyByZW1vdmVkXG4gICAgZnVuY3Rpb24gY3JlYXRlQWRkZXIoZGlyZWN0aW9uLCBuYW1lKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAodmFsLCBwZXJpb2QpIHtcbiAgICAgICAgICAgIHZhciBkdXIsIHRtcDtcbiAgICAgICAgICAgIC8vaW52ZXJ0IHRoZSBhcmd1bWVudHMsIGJ1dCBjb21wbGFpbiBhYm91dCBpdFxuICAgICAgICAgICAgaWYgKHBlcmlvZCAhPT0gbnVsbCAmJiAhaXNOYU4oK3BlcmlvZCkpIHtcbiAgICAgICAgICAgICAgICBkZXByZWNhdGVTaW1wbGUobmFtZSwgJ21vbWVudCgpLicgKyBuYW1lICArICcocGVyaW9kLCBudW1iZXIpIGlzIGRlcHJlY2F0ZWQuIFBsZWFzZSB1c2UgbW9tZW50KCkuJyArIG5hbWUgKyAnKG51bWJlciwgcGVyaW9kKS4gJyArXG4gICAgICAgICAgICAgICAgJ1NlZSBodHRwOi8vbW9tZW50anMuY29tL2d1aWRlcy8jL3dhcm5pbmdzL2FkZC1pbnZlcnRlZC1wYXJhbS8gZm9yIG1vcmUgaW5mby4nKTtcbiAgICAgICAgICAgICAgICB0bXAgPSB2YWw7IHZhbCA9IHBlcmlvZDsgcGVyaW9kID0gdG1wO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YWwgPSB0eXBlb2YgdmFsID09PSAnc3RyaW5nJyA/ICt2YWwgOiB2YWw7XG4gICAgICAgICAgICBkdXIgPSBjcmVhdGVEdXJhdGlvbih2YWwsIHBlcmlvZCk7XG4gICAgICAgICAgICBhZGRTdWJ0cmFjdCh0aGlzLCBkdXIsIGRpcmVjdGlvbik7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhZGRTdWJ0cmFjdCAobW9tLCBkdXJhdGlvbiwgaXNBZGRpbmcsIHVwZGF0ZU9mZnNldCkge1xuICAgICAgICB2YXIgbWlsbGlzZWNvbmRzID0gZHVyYXRpb24uX21pbGxpc2Vjb25kcyxcbiAgICAgICAgICAgIGRheXMgPSBhYnNSb3VuZChkdXJhdGlvbi5fZGF5cyksXG4gICAgICAgICAgICBtb250aHMgPSBhYnNSb3VuZChkdXJhdGlvbi5fbW9udGhzKTtcblxuICAgICAgICBpZiAoIW1vbS5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIC8vIE5vIG9wXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB1cGRhdGVPZmZzZXQgPSB1cGRhdGVPZmZzZXQgPT0gbnVsbCA/IHRydWUgOiB1cGRhdGVPZmZzZXQ7XG5cbiAgICAgICAgaWYgKG1vbnRocykge1xuICAgICAgICAgICAgc2V0TW9udGgobW9tLCBnZXQobW9tLCAnTW9udGgnKSArIG1vbnRocyAqIGlzQWRkaW5nKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZGF5cykge1xuICAgICAgICAgICAgc2V0JDEobW9tLCAnRGF0ZScsIGdldChtb20sICdEYXRlJykgKyBkYXlzICogaXNBZGRpbmcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtaWxsaXNlY29uZHMpIHtcbiAgICAgICAgICAgIG1vbS5fZC5zZXRUaW1lKG1vbS5fZC52YWx1ZU9mKCkgKyBtaWxsaXNlY29uZHMgKiBpc0FkZGluZyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHVwZGF0ZU9mZnNldCkge1xuICAgICAgICAgICAgaG9va3MudXBkYXRlT2Zmc2V0KG1vbSwgZGF5cyB8fCBtb250aHMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGFkZCAgICAgID0gY3JlYXRlQWRkZXIoMSwgJ2FkZCcpO1xuICAgIHZhciBzdWJ0cmFjdCA9IGNyZWF0ZUFkZGVyKC0xLCAnc3VidHJhY3QnKTtcblxuICAgIGZ1bmN0aW9uIGdldENhbGVuZGFyRm9ybWF0KG15TW9tZW50LCBub3cpIHtcbiAgICAgICAgdmFyIGRpZmYgPSBteU1vbWVudC5kaWZmKG5vdywgJ2RheXMnLCB0cnVlKTtcbiAgICAgICAgcmV0dXJuIGRpZmYgPCAtNiA/ICdzYW1lRWxzZScgOlxuICAgICAgICAgICAgICAgIGRpZmYgPCAtMSA/ICdsYXN0V2VlaycgOlxuICAgICAgICAgICAgICAgIGRpZmYgPCAwID8gJ2xhc3REYXknIDpcbiAgICAgICAgICAgICAgICBkaWZmIDwgMSA/ICdzYW1lRGF5JyA6XG4gICAgICAgICAgICAgICAgZGlmZiA8IDIgPyAnbmV4dERheScgOlxuICAgICAgICAgICAgICAgIGRpZmYgPCA3ID8gJ25leHRXZWVrJyA6ICdzYW1lRWxzZSc7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY2FsZW5kYXIkMSAodGltZSwgZm9ybWF0cykge1xuICAgICAgICAvLyBXZSB3YW50IHRvIGNvbXBhcmUgdGhlIHN0YXJ0IG9mIHRvZGF5LCB2cyB0aGlzLlxuICAgICAgICAvLyBHZXR0aW5nIHN0YXJ0LW9mLXRvZGF5IGRlcGVuZHMgb24gd2hldGhlciB3ZSdyZSBsb2NhbC91dGMvb2Zmc2V0IG9yIG5vdC5cbiAgICAgICAgdmFyIG5vdyA9IHRpbWUgfHwgY3JlYXRlTG9jYWwoKSxcbiAgICAgICAgICAgIHNvZCA9IGNsb25lV2l0aE9mZnNldChub3csIHRoaXMpLnN0YXJ0T2YoJ2RheScpLFxuICAgICAgICAgICAgZm9ybWF0ID0gaG9va3MuY2FsZW5kYXJGb3JtYXQodGhpcywgc29kKSB8fCAnc2FtZUVsc2UnO1xuXG4gICAgICAgIHZhciBvdXRwdXQgPSBmb3JtYXRzICYmIChpc0Z1bmN0aW9uKGZvcm1hdHNbZm9ybWF0XSkgPyBmb3JtYXRzW2Zvcm1hdF0uY2FsbCh0aGlzLCBub3cpIDogZm9ybWF0c1tmb3JtYXRdKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5mb3JtYXQob3V0cHV0IHx8IHRoaXMubG9jYWxlRGF0YSgpLmNhbGVuZGFyKGZvcm1hdCwgdGhpcywgY3JlYXRlTG9jYWwobm93KSkpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNsb25lICgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBNb21lbnQodGhpcyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNBZnRlciAoaW5wdXQsIHVuaXRzKSB7XG4gICAgICAgIHZhciBsb2NhbElucHV0ID0gaXNNb21lbnQoaW5wdXQpID8gaW5wdXQgOiBjcmVhdGVMb2NhbChpbnB1dCk7XG4gICAgICAgIGlmICghKHRoaXMuaXNWYWxpZCgpICYmIGxvY2FsSW5wdXQuaXNWYWxpZCgpKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHVuaXRzID0gbm9ybWFsaXplVW5pdHModW5pdHMpIHx8ICdtaWxsaXNlY29uZCc7XG4gICAgICAgIGlmICh1bml0cyA9PT0gJ21pbGxpc2Vjb25kJykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVPZigpID4gbG9jYWxJbnB1dC52YWx1ZU9mKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gbG9jYWxJbnB1dC52YWx1ZU9mKCkgPCB0aGlzLmNsb25lKCkuc3RhcnRPZih1bml0cykudmFsdWVPZigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNCZWZvcmUgKGlucHV0LCB1bml0cykge1xuICAgICAgICB2YXIgbG9jYWxJbnB1dCA9IGlzTW9tZW50KGlucHV0KSA/IGlucHV0IDogY3JlYXRlTG9jYWwoaW5wdXQpO1xuICAgICAgICBpZiAoISh0aGlzLmlzVmFsaWQoKSAmJiBsb2NhbElucHV0LmlzVmFsaWQoKSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICB1bml0cyA9IG5vcm1hbGl6ZVVuaXRzKHVuaXRzKSB8fCAnbWlsbGlzZWNvbmQnO1xuICAgICAgICBpZiAodW5pdHMgPT09ICdtaWxsaXNlY29uZCcpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnZhbHVlT2YoKSA8IGxvY2FsSW5wdXQudmFsdWVPZigpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2xvbmUoKS5lbmRPZih1bml0cykudmFsdWVPZigpIDwgbG9jYWxJbnB1dC52YWx1ZU9mKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0JldHdlZW4gKGZyb20sIHRvLCB1bml0cywgaW5jbHVzaXZpdHkpIHtcbiAgICAgICAgdmFyIGxvY2FsRnJvbSA9IGlzTW9tZW50KGZyb20pID8gZnJvbSA6IGNyZWF0ZUxvY2FsKGZyb20pLFxuICAgICAgICAgICAgbG9jYWxUbyA9IGlzTW9tZW50KHRvKSA/IHRvIDogY3JlYXRlTG9jYWwodG8pO1xuICAgICAgICBpZiAoISh0aGlzLmlzVmFsaWQoKSAmJiBsb2NhbEZyb20uaXNWYWxpZCgpICYmIGxvY2FsVG8uaXNWYWxpZCgpKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGluY2x1c2l2aXR5ID0gaW5jbHVzaXZpdHkgfHwgJygpJztcbiAgICAgICAgcmV0dXJuIChpbmNsdXNpdml0eVswXSA9PT0gJygnID8gdGhpcy5pc0FmdGVyKGxvY2FsRnJvbSwgdW5pdHMpIDogIXRoaXMuaXNCZWZvcmUobG9jYWxGcm9tLCB1bml0cykpICYmXG4gICAgICAgICAgICAoaW5jbHVzaXZpdHlbMV0gPT09ICcpJyA/IHRoaXMuaXNCZWZvcmUobG9jYWxUbywgdW5pdHMpIDogIXRoaXMuaXNBZnRlcihsb2NhbFRvLCB1bml0cykpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzU2FtZSAoaW5wdXQsIHVuaXRzKSB7XG4gICAgICAgIHZhciBsb2NhbElucHV0ID0gaXNNb21lbnQoaW5wdXQpID8gaW5wdXQgOiBjcmVhdGVMb2NhbChpbnB1dCksXG4gICAgICAgICAgICBpbnB1dE1zO1xuICAgICAgICBpZiAoISh0aGlzLmlzVmFsaWQoKSAmJiBsb2NhbElucHV0LmlzVmFsaWQoKSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICB1bml0cyA9IG5vcm1hbGl6ZVVuaXRzKHVuaXRzKSB8fCAnbWlsbGlzZWNvbmQnO1xuICAgICAgICBpZiAodW5pdHMgPT09ICdtaWxsaXNlY29uZCcpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnZhbHVlT2YoKSA9PT0gbG9jYWxJbnB1dC52YWx1ZU9mKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpbnB1dE1zID0gbG9jYWxJbnB1dC52YWx1ZU9mKCk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jbG9uZSgpLnN0YXJ0T2YodW5pdHMpLnZhbHVlT2YoKSA8PSBpbnB1dE1zICYmIGlucHV0TXMgPD0gdGhpcy5jbG9uZSgpLmVuZE9mKHVuaXRzKS52YWx1ZU9mKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1NhbWVPckFmdGVyIChpbnB1dCwgdW5pdHMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNTYW1lKGlucHV0LCB1bml0cykgfHwgdGhpcy5pc0FmdGVyKGlucHV0LCB1bml0cyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNTYW1lT3JCZWZvcmUgKGlucHV0LCB1bml0cykge1xuICAgICAgICByZXR1cm4gdGhpcy5pc1NhbWUoaW5wdXQsIHVuaXRzKSB8fCB0aGlzLmlzQmVmb3JlKGlucHV0LCB1bml0cyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZGlmZiAoaW5wdXQsIHVuaXRzLCBhc0Zsb2F0KSB7XG4gICAgICAgIHZhciB0aGF0LFxuICAgICAgICAgICAgem9uZURlbHRhLFxuICAgICAgICAgICAgb3V0cHV0O1xuXG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBOYU47XG4gICAgICAgIH1cblxuICAgICAgICB0aGF0ID0gY2xvbmVXaXRoT2Zmc2V0KGlucHV0LCB0aGlzKTtcblxuICAgICAgICBpZiAoIXRoYXQuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gTmFOO1xuICAgICAgICB9XG5cbiAgICAgICAgem9uZURlbHRhID0gKHRoYXQudXRjT2Zmc2V0KCkgLSB0aGlzLnV0Y09mZnNldCgpKSAqIDZlNDtcblxuICAgICAgICB1bml0cyA9IG5vcm1hbGl6ZVVuaXRzKHVuaXRzKTtcblxuICAgICAgICBzd2l0Y2ggKHVuaXRzKSB7XG4gICAgICAgICAgICBjYXNlICd5ZWFyJzogb3V0cHV0ID0gbW9udGhEaWZmKHRoaXMsIHRoYXQpIC8gMTI7IGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnbW9udGgnOiBvdXRwdXQgPSBtb250aERpZmYodGhpcywgdGhhdCk7IGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAncXVhcnRlcic6IG91dHB1dCA9IG1vbnRoRGlmZih0aGlzLCB0aGF0KSAvIDM7IGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnc2Vjb25kJzogb3V0cHV0ID0gKHRoaXMgLSB0aGF0KSAvIDFlMzsgYnJlYWs7IC8vIDEwMDBcbiAgICAgICAgICAgIGNhc2UgJ21pbnV0ZSc6IG91dHB1dCA9ICh0aGlzIC0gdGhhdCkgLyA2ZTQ7IGJyZWFrOyAvLyAxMDAwICogNjBcbiAgICAgICAgICAgIGNhc2UgJ2hvdXInOiBvdXRwdXQgPSAodGhpcyAtIHRoYXQpIC8gMzZlNTsgYnJlYWs7IC8vIDEwMDAgKiA2MCAqIDYwXG4gICAgICAgICAgICBjYXNlICdkYXknOiBvdXRwdXQgPSAodGhpcyAtIHRoYXQgLSB6b25lRGVsdGEpIC8gODY0ZTU7IGJyZWFrOyAvLyAxMDAwICogNjAgKiA2MCAqIDI0LCBuZWdhdGUgZHN0XG4gICAgICAgICAgICBjYXNlICd3ZWVrJzogb3V0cHV0ID0gKHRoaXMgLSB0aGF0IC0gem9uZURlbHRhKSAvIDYwNDhlNTsgYnJlYWs7IC8vIDEwMDAgKiA2MCAqIDYwICogMjQgKiA3LCBuZWdhdGUgZHN0XG4gICAgICAgICAgICBkZWZhdWx0OiBvdXRwdXQgPSB0aGlzIC0gdGhhdDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhc0Zsb2F0ID8gb3V0cHV0IDogYWJzRmxvb3Iob3V0cHV0KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtb250aERpZmYgKGEsIGIpIHtcbiAgICAgICAgLy8gZGlmZmVyZW5jZSBpbiBtb250aHNcbiAgICAgICAgdmFyIHdob2xlTW9udGhEaWZmID0gKChiLnllYXIoKSAtIGEueWVhcigpKSAqIDEyKSArIChiLm1vbnRoKCkgLSBhLm1vbnRoKCkpLFxuICAgICAgICAgICAgLy8gYiBpcyBpbiAoYW5jaG9yIC0gMSBtb250aCwgYW5jaG9yICsgMSBtb250aClcbiAgICAgICAgICAgIGFuY2hvciA9IGEuY2xvbmUoKS5hZGQod2hvbGVNb250aERpZmYsICdtb250aHMnKSxcbiAgICAgICAgICAgIGFuY2hvcjIsIGFkanVzdDtcblxuICAgICAgICBpZiAoYiAtIGFuY2hvciA8IDApIHtcbiAgICAgICAgICAgIGFuY2hvcjIgPSBhLmNsb25lKCkuYWRkKHdob2xlTW9udGhEaWZmIC0gMSwgJ21vbnRocycpO1xuICAgICAgICAgICAgLy8gbGluZWFyIGFjcm9zcyB0aGUgbW9udGhcbiAgICAgICAgICAgIGFkanVzdCA9IChiIC0gYW5jaG9yKSAvIChhbmNob3IgLSBhbmNob3IyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGFuY2hvcjIgPSBhLmNsb25lKCkuYWRkKHdob2xlTW9udGhEaWZmICsgMSwgJ21vbnRocycpO1xuICAgICAgICAgICAgLy8gbGluZWFyIGFjcm9zcyB0aGUgbW9udGhcbiAgICAgICAgICAgIGFkanVzdCA9IChiIC0gYW5jaG9yKSAvIChhbmNob3IyIC0gYW5jaG9yKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vY2hlY2sgZm9yIG5lZ2F0aXZlIHplcm8sIHJldHVybiB6ZXJvIGlmIG5lZ2F0aXZlIHplcm9cbiAgICAgICAgcmV0dXJuIC0od2hvbGVNb250aERpZmYgKyBhZGp1c3QpIHx8IDA7XG4gICAgfVxuXG4gICAgaG9va3MuZGVmYXVsdEZvcm1hdCA9ICdZWVlZLU1NLUREVEhIOm1tOnNzWic7XG4gICAgaG9va3MuZGVmYXVsdEZvcm1hdFV0YyA9ICdZWVlZLU1NLUREVEhIOm1tOnNzW1pdJztcblxuICAgIGZ1bmN0aW9uIHRvU3RyaW5nICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xvbmUoKS5sb2NhbGUoJ2VuJykuZm9ybWF0KCdkZGQgTU1NIEREIFlZWVkgSEg6bW06c3MgW0dNVF1aWicpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRvSVNPU3RyaW5nKGtlZXBPZmZzZXQpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHV0YyA9IGtlZXBPZmZzZXQgIT09IHRydWU7XG4gICAgICAgIHZhciBtID0gdXRjID8gdGhpcy5jbG9uZSgpLnV0YygpIDogdGhpcztcbiAgICAgICAgaWYgKG0ueWVhcigpIDwgMCB8fCBtLnllYXIoKSA+IDk5OTkpIHtcbiAgICAgICAgICAgIHJldHVybiBmb3JtYXRNb21lbnQobSwgdXRjID8gJ1lZWVlZWS1NTS1ERFtUXUhIOm1tOnNzLlNTU1taXScgOiAnWVlZWVlZLU1NLUREW1RdSEg6bW06c3MuU1NTWicpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc0Z1bmN0aW9uKERhdGUucHJvdG90eXBlLnRvSVNPU3RyaW5nKSkge1xuICAgICAgICAgICAgLy8gbmF0aXZlIGltcGxlbWVudGF0aW9uIGlzIH41MHggZmFzdGVyLCB1c2UgaXQgd2hlbiB3ZSBjYW5cbiAgICAgICAgICAgIGlmICh1dGMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy50b0RhdGUoKS50b0lTT1N0cmluZygpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IERhdGUodGhpcy52YWx1ZU9mKCkgKyB0aGlzLnV0Y09mZnNldCgpICogNjAgKiAxMDAwKS50b0lTT1N0cmluZygpLnJlcGxhY2UoJ1onLCBmb3JtYXRNb21lbnQobSwgJ1onKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZvcm1hdE1vbWVudChtLCB1dGMgPyAnWVlZWS1NTS1ERFtUXUhIOm1tOnNzLlNTU1taXScgOiAnWVlZWS1NTS1ERFtUXUhIOm1tOnNzLlNTU1onKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gYSBodW1hbiByZWFkYWJsZSByZXByZXNlbnRhdGlvbiBvZiBhIG1vbWVudCB0aGF0IGNhblxuICAgICAqIGFsc28gYmUgZXZhbHVhdGVkIHRvIGdldCBhIG5ldyBtb21lbnQgd2hpY2ggaXMgdGhlIHNhbWVcbiAgICAgKlxuICAgICAqIEBsaW5rIGh0dHBzOi8vbm9kZWpzLm9yZy9kaXN0L2xhdGVzdC9kb2NzL2FwaS91dGlsLmh0bWwjdXRpbF9jdXN0b21faW5zcGVjdF9mdW5jdGlvbl9vbl9vYmplY3RzXG4gICAgICovXG4gICAgZnVuY3Rpb24gaW5zcGVjdCAoKSB7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiAnbW9tZW50LmludmFsaWQoLyogJyArIHRoaXMuX2kgKyAnICovKSc7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGZ1bmMgPSAnbW9tZW50JztcbiAgICAgICAgdmFyIHpvbmUgPSAnJztcbiAgICAgICAgaWYgKCF0aGlzLmlzTG9jYWwoKSkge1xuICAgICAgICAgICAgZnVuYyA9IHRoaXMudXRjT2Zmc2V0KCkgPT09IDAgPyAnbW9tZW50LnV0YycgOiAnbW9tZW50LnBhcnNlWm9uZSc7XG4gICAgICAgICAgICB6b25lID0gJ1onO1xuICAgICAgICB9XG4gICAgICAgIHZhciBwcmVmaXggPSAnWycgKyBmdW5jICsgJyhcIl0nO1xuICAgICAgICB2YXIgeWVhciA9ICgwIDw9IHRoaXMueWVhcigpICYmIHRoaXMueWVhcigpIDw9IDk5OTkpID8gJ1lZWVknIDogJ1lZWVlZWSc7XG4gICAgICAgIHZhciBkYXRldGltZSA9ICctTU0tRERbVF1ISDptbTpzcy5TU1MnO1xuICAgICAgICB2YXIgc3VmZml4ID0gem9uZSArICdbXCIpXSc7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybWF0KHByZWZpeCArIHllYXIgKyBkYXRldGltZSArIHN1ZmZpeCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZm9ybWF0IChpbnB1dFN0cmluZykge1xuICAgICAgICBpZiAoIWlucHV0U3RyaW5nKSB7XG4gICAgICAgICAgICBpbnB1dFN0cmluZyA9IHRoaXMuaXNVdGMoKSA/IGhvb2tzLmRlZmF1bHRGb3JtYXRVdGMgOiBob29rcy5kZWZhdWx0Rm9ybWF0O1xuICAgICAgICB9XG4gICAgICAgIHZhciBvdXRwdXQgPSBmb3JtYXRNb21lbnQodGhpcywgaW5wdXRTdHJpbmcpO1xuICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkucG9zdGZvcm1hdChvdXRwdXQpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGZyb20gKHRpbWUsIHdpdGhvdXRTdWZmaXgpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNWYWxpZCgpICYmXG4gICAgICAgICAgICAgICAgKChpc01vbWVudCh0aW1lKSAmJiB0aW1lLmlzVmFsaWQoKSkgfHxcbiAgICAgICAgICAgICAgICAgY3JlYXRlTG9jYWwodGltZSkuaXNWYWxpZCgpKSkge1xuICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUR1cmF0aW9uKHt0bzogdGhpcywgZnJvbTogdGltZX0pLmxvY2FsZSh0aGlzLmxvY2FsZSgpKS5odW1hbml6ZSghd2l0aG91dFN1ZmZpeCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkuaW52YWxpZERhdGUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGZyb21Ob3cgKHdpdGhvdXRTdWZmaXgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZnJvbShjcmVhdGVMb2NhbCgpLCB3aXRob3V0U3VmZml4KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0byAodGltZSwgd2l0aG91dFN1ZmZpeCkge1xuICAgICAgICBpZiAodGhpcy5pc1ZhbGlkKCkgJiZcbiAgICAgICAgICAgICAgICAoKGlzTW9tZW50KHRpbWUpICYmIHRpbWUuaXNWYWxpZCgpKSB8fFxuICAgICAgICAgICAgICAgICBjcmVhdGVMb2NhbCh0aW1lKS5pc1ZhbGlkKCkpKSB7XG4gICAgICAgICAgICByZXR1cm4gY3JlYXRlRHVyYXRpb24oe2Zyb206IHRoaXMsIHRvOiB0aW1lfSkubG9jYWxlKHRoaXMubG9jYWxlKCkpLmh1bWFuaXplKCF3aXRob3V0U3VmZml4KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmxvY2FsZURhdGEoKS5pbnZhbGlkRGF0ZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdG9Ob3cgKHdpdGhvdXRTdWZmaXgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudG8oY3JlYXRlTG9jYWwoKSwgd2l0aG91dFN1ZmZpeCk7XG4gICAgfVxuXG4gICAgLy8gSWYgcGFzc2VkIGEgbG9jYWxlIGtleSwgaXQgd2lsbCBzZXQgdGhlIGxvY2FsZSBmb3IgdGhpc1xuICAgIC8vIGluc3RhbmNlLiAgT3RoZXJ3aXNlLCBpdCB3aWxsIHJldHVybiB0aGUgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbiAgICAvLyB2YXJpYWJsZXMgZm9yIHRoaXMgaW5zdGFuY2UuXG4gICAgZnVuY3Rpb24gbG9jYWxlIChrZXkpIHtcbiAgICAgICAgdmFyIG5ld0xvY2FsZURhdGE7XG5cbiAgICAgICAgaWYgKGtleSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fbG9jYWxlLl9hYmJyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbmV3TG9jYWxlRGF0YSA9IGdldExvY2FsZShrZXkpO1xuICAgICAgICAgICAgaWYgKG5ld0xvY2FsZURhdGEgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2xvY2FsZSA9IG5ld0xvY2FsZURhdGE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHZhciBsYW5nID0gZGVwcmVjYXRlKFxuICAgICAgICAnbW9tZW50KCkubGFuZygpIGlzIGRlcHJlY2F0ZWQuIEluc3RlYWQsIHVzZSBtb21lbnQoKS5sb2NhbGVEYXRhKCkgdG8gZ2V0IHRoZSBsYW5ndWFnZSBjb25maWd1cmF0aW9uLiBVc2UgbW9tZW50KCkubG9jYWxlKCkgdG8gY2hhbmdlIGxhbmd1YWdlcy4nLFxuICAgICAgICBmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICBpZiAoa2V5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmxvY2FsZShrZXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgKTtcblxuICAgIGZ1bmN0aW9uIGxvY2FsZURhdGEgKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbG9jYWxlO1xuICAgIH1cblxuICAgIHZhciBNU19QRVJfU0VDT05EID0gMTAwMDtcbiAgICB2YXIgTVNfUEVSX01JTlVURSA9IDYwICogTVNfUEVSX1NFQ09ORDtcbiAgICB2YXIgTVNfUEVSX0hPVVIgPSA2MCAqIE1TX1BFUl9NSU5VVEU7XG4gICAgdmFyIE1TX1BFUl80MDBfWUVBUlMgPSAoMzY1ICogNDAwICsgOTcpICogMjQgKiBNU19QRVJfSE9VUjtcblxuICAgIC8vIGFjdHVhbCBtb2R1bG8gLSBoYW5kbGVzIG5lZ2F0aXZlIG51bWJlcnMgKGZvciBkYXRlcyBiZWZvcmUgMTk3MCk6XG4gICAgZnVuY3Rpb24gbW9kJDEoZGl2aWRlbmQsIGRpdmlzb3IpIHtcbiAgICAgICAgcmV0dXJuIChkaXZpZGVuZCAlIGRpdmlzb3IgKyBkaXZpc29yKSAlIGRpdmlzb3I7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbG9jYWxTdGFydE9mRGF0ZSh5LCBtLCBkKSB7XG4gICAgICAgIC8vIHRoZSBkYXRlIGNvbnN0cnVjdG9yIHJlbWFwcyB5ZWFycyAwLTk5IHRvIDE5MDAtMTk5OVxuICAgICAgICBpZiAoeSA8IDEwMCAmJiB5ID49IDApIHtcbiAgICAgICAgICAgIC8vIHByZXNlcnZlIGxlYXAgeWVhcnMgdXNpbmcgYSBmdWxsIDQwMCB5ZWFyIGN5Y2xlLCB0aGVuIHJlc2V0XG4gICAgICAgICAgICByZXR1cm4gbmV3IERhdGUoeSArIDQwMCwgbSwgZCkgLSBNU19QRVJfNDAwX1lFQVJTO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBEYXRlKHksIG0sIGQpLnZhbHVlT2YoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHV0Y1N0YXJ0T2ZEYXRlKHksIG0sIGQpIHtcbiAgICAgICAgLy8gRGF0ZS5VVEMgcmVtYXBzIHllYXJzIDAtOTkgdG8gMTkwMC0xOTk5XG4gICAgICAgIGlmICh5IDwgMTAwICYmIHkgPj0gMCkge1xuICAgICAgICAgICAgLy8gcHJlc2VydmUgbGVhcCB5ZWFycyB1c2luZyBhIGZ1bGwgNDAwIHllYXIgY3ljbGUsIHRoZW4gcmVzZXRcbiAgICAgICAgICAgIHJldHVybiBEYXRlLlVUQyh5ICsgNDAwLCBtLCBkKSAtIE1TX1BFUl80MDBfWUVBUlM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gRGF0ZS5VVEMoeSwgbSwgZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzdGFydE9mICh1bml0cykge1xuICAgICAgICB2YXIgdGltZTtcbiAgICAgICAgdW5pdHMgPSBub3JtYWxpemVVbml0cyh1bml0cyk7XG4gICAgICAgIGlmICh1bml0cyA9PT0gdW5kZWZpbmVkIHx8IHVuaXRzID09PSAnbWlsbGlzZWNvbmQnIHx8ICF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgc3RhcnRPZkRhdGUgPSB0aGlzLl9pc1VUQyA/IHV0Y1N0YXJ0T2ZEYXRlIDogbG9jYWxTdGFydE9mRGF0ZTtcblxuICAgICAgICBzd2l0Y2ggKHVuaXRzKSB7XG4gICAgICAgICAgICBjYXNlICd5ZWFyJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gc3RhcnRPZkRhdGUodGhpcy55ZWFyKCksIDAsIDEpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAncXVhcnRlcic6XG4gICAgICAgICAgICAgICAgdGltZSA9IHN0YXJ0T2ZEYXRlKHRoaXMueWVhcigpLCB0aGlzLm1vbnRoKCkgLSB0aGlzLm1vbnRoKCkgJSAzLCAxKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ21vbnRoJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gc3RhcnRPZkRhdGUodGhpcy55ZWFyKCksIHRoaXMubW9udGgoKSwgMSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICd3ZWVrJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gc3RhcnRPZkRhdGUodGhpcy55ZWFyKCksIHRoaXMubW9udGgoKSwgdGhpcy5kYXRlKCkgLSB0aGlzLndlZWtkYXkoKSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdpc29XZWVrJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gc3RhcnRPZkRhdGUodGhpcy55ZWFyKCksIHRoaXMubW9udGgoKSwgdGhpcy5kYXRlKCkgLSAodGhpcy5pc29XZWVrZGF5KCkgLSAxKSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdkYXknOlxuICAgICAgICAgICAgY2FzZSAnZGF0ZSc6XG4gICAgICAgICAgICAgICAgdGltZSA9IHN0YXJ0T2ZEYXRlKHRoaXMueWVhcigpLCB0aGlzLm1vbnRoKCksIHRoaXMuZGF0ZSgpKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2hvdXInOlxuICAgICAgICAgICAgICAgIHRpbWUgPSB0aGlzLl9kLnZhbHVlT2YoKTtcbiAgICAgICAgICAgICAgICB0aW1lIC09IG1vZCQxKHRpbWUgKyAodGhpcy5faXNVVEMgPyAwIDogdGhpcy51dGNPZmZzZXQoKSAqIE1TX1BFUl9NSU5VVEUpLCBNU19QRVJfSE9VUik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdtaW51dGUnOlxuICAgICAgICAgICAgICAgIHRpbWUgPSB0aGlzLl9kLnZhbHVlT2YoKTtcbiAgICAgICAgICAgICAgICB0aW1lIC09IG1vZCQxKHRpbWUsIE1TX1BFUl9NSU5VVEUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnc2Vjb25kJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gdGhpcy5fZC52YWx1ZU9mKCk7XG4gICAgICAgICAgICAgICAgdGltZSAtPSBtb2QkMSh0aW1lLCBNU19QRVJfU0VDT05EKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2Quc2V0VGltZSh0aW1lKTtcbiAgICAgICAgaG9va3MudXBkYXRlT2Zmc2V0KHRoaXMsIHRydWUpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBlbmRPZiAodW5pdHMpIHtcbiAgICAgICAgdmFyIHRpbWU7XG4gICAgICAgIHVuaXRzID0gbm9ybWFsaXplVW5pdHModW5pdHMpO1xuICAgICAgICBpZiAodW5pdHMgPT09IHVuZGVmaW5lZCB8fCB1bml0cyA9PT0gJ21pbGxpc2Vjb25kJyB8fCAhdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHN0YXJ0T2ZEYXRlID0gdGhpcy5faXNVVEMgPyB1dGNTdGFydE9mRGF0ZSA6IGxvY2FsU3RhcnRPZkRhdGU7XG5cbiAgICAgICAgc3dpdGNoICh1bml0cykge1xuICAgICAgICAgICAgY2FzZSAneWVhcic6XG4gICAgICAgICAgICAgICAgdGltZSA9IHN0YXJ0T2ZEYXRlKHRoaXMueWVhcigpICsgMSwgMCwgMSkgLSAxO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAncXVhcnRlcic6XG4gICAgICAgICAgICAgICAgdGltZSA9IHN0YXJ0T2ZEYXRlKHRoaXMueWVhcigpLCB0aGlzLm1vbnRoKCkgLSB0aGlzLm1vbnRoKCkgJSAzICsgMywgMSkgLSAxO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnbW9udGgnOlxuICAgICAgICAgICAgICAgIHRpbWUgPSBzdGFydE9mRGF0ZSh0aGlzLnllYXIoKSwgdGhpcy5tb250aCgpICsgMSwgMSkgLSAxO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnd2Vlayc6XG4gICAgICAgICAgICAgICAgdGltZSA9IHN0YXJ0T2ZEYXRlKHRoaXMueWVhcigpLCB0aGlzLm1vbnRoKCksIHRoaXMuZGF0ZSgpIC0gdGhpcy53ZWVrZGF5KCkgKyA3KSAtIDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdpc29XZWVrJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gc3RhcnRPZkRhdGUodGhpcy55ZWFyKCksIHRoaXMubW9udGgoKSwgdGhpcy5kYXRlKCkgLSAodGhpcy5pc29XZWVrZGF5KCkgLSAxKSArIDcpIC0gMTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2RheSc6XG4gICAgICAgICAgICBjYXNlICdkYXRlJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gc3RhcnRPZkRhdGUodGhpcy55ZWFyKCksIHRoaXMubW9udGgoKSwgdGhpcy5kYXRlKCkgKyAxKSAtIDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdob3VyJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gdGhpcy5fZC52YWx1ZU9mKCk7XG4gICAgICAgICAgICAgICAgdGltZSArPSBNU19QRVJfSE9VUiAtIG1vZCQxKHRpbWUgKyAodGhpcy5faXNVVEMgPyAwIDogdGhpcy51dGNPZmZzZXQoKSAqIE1TX1BFUl9NSU5VVEUpLCBNU19QRVJfSE9VUikgLSAxO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnbWludXRlJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gdGhpcy5fZC52YWx1ZU9mKCk7XG4gICAgICAgICAgICAgICAgdGltZSArPSBNU19QRVJfTUlOVVRFIC0gbW9kJDEodGltZSwgTVNfUEVSX01JTlVURSkgLSAxO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnc2Vjb25kJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gdGhpcy5fZC52YWx1ZU9mKCk7XG4gICAgICAgICAgICAgICAgdGltZSArPSBNU19QRVJfU0VDT05EIC0gbW9kJDEodGltZSwgTVNfUEVSX1NFQ09ORCkgLSAxO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fZC5zZXRUaW1lKHRpbWUpO1xuICAgICAgICBob29rcy51cGRhdGVPZmZzZXQodGhpcywgdHJ1ZSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHZhbHVlT2YgKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZC52YWx1ZU9mKCkgLSAoKHRoaXMuX29mZnNldCB8fCAwKSAqIDYwMDAwKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB1bml4ICgpIHtcbiAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IodGhpcy52YWx1ZU9mKCkgLyAxMDAwKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0b0RhdGUgKCkge1xuICAgICAgICByZXR1cm4gbmV3IERhdGUodGhpcy52YWx1ZU9mKCkpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRvQXJyYXkgKCkge1xuICAgICAgICB2YXIgbSA9IHRoaXM7XG4gICAgICAgIHJldHVybiBbbS55ZWFyKCksIG0ubW9udGgoKSwgbS5kYXRlKCksIG0uaG91cigpLCBtLm1pbnV0ZSgpLCBtLnNlY29uZCgpLCBtLm1pbGxpc2Vjb25kKCldO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRvT2JqZWN0ICgpIHtcbiAgICAgICAgdmFyIG0gPSB0aGlzO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgeWVhcnM6IG0ueWVhcigpLFxuICAgICAgICAgICAgbW9udGhzOiBtLm1vbnRoKCksXG4gICAgICAgICAgICBkYXRlOiBtLmRhdGUoKSxcbiAgICAgICAgICAgIGhvdXJzOiBtLmhvdXJzKCksXG4gICAgICAgICAgICBtaW51dGVzOiBtLm1pbnV0ZXMoKSxcbiAgICAgICAgICAgIHNlY29uZHM6IG0uc2Vjb25kcygpLFxuICAgICAgICAgICAgbWlsbGlzZWNvbmRzOiBtLm1pbGxpc2Vjb25kcygpXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdG9KU09OICgpIHtcbiAgICAgICAgLy8gbmV3IERhdGUoTmFOKS50b0pTT04oKSA9PT0gbnVsbFxuICAgICAgICByZXR1cm4gdGhpcy5pc1ZhbGlkKCkgPyB0aGlzLnRvSVNPU3RyaW5nKCkgOiBudWxsO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzVmFsaWQkMiAoKSB7XG4gICAgICAgIHJldHVybiBpc1ZhbGlkKHRoaXMpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBhcnNpbmdGbGFncyAoKSB7XG4gICAgICAgIHJldHVybiBleHRlbmQoe30sIGdldFBhcnNpbmdGbGFncyh0aGlzKSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaW52YWxpZEF0ICgpIHtcbiAgICAgICAgcmV0dXJuIGdldFBhcnNpbmdGbGFncyh0aGlzKS5vdmVyZmxvdztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGlvbkRhdGEoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpbnB1dDogdGhpcy5faSxcbiAgICAgICAgICAgIGZvcm1hdDogdGhpcy5fZixcbiAgICAgICAgICAgIGxvY2FsZTogdGhpcy5fbG9jYWxlLFxuICAgICAgICAgICAgaXNVVEM6IHRoaXMuX2lzVVRDLFxuICAgICAgICAgICAgc3RyaWN0OiB0aGlzLl9zdHJpY3RcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ2dnJywgMl0sIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMud2Vla1llYXIoKSAlIDEwMDtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKDAsIFsnR0cnLCAyXSwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pc29XZWVrWWVhcigpICUgMTAwO1xuICAgIH0pO1xuXG4gICAgZnVuY3Rpb24gYWRkV2Vla1llYXJGb3JtYXRUb2tlbiAodG9rZW4sIGdldHRlcikge1xuICAgICAgICBhZGRGb3JtYXRUb2tlbigwLCBbdG9rZW4sIHRva2VuLmxlbmd0aF0sIDAsIGdldHRlcik7XG4gICAgfVxuXG4gICAgYWRkV2Vla1llYXJGb3JtYXRUb2tlbignZ2dnZycsICAgICAnd2Vla1llYXInKTtcbiAgICBhZGRXZWVrWWVhckZvcm1hdFRva2VuKCdnZ2dnZycsICAgICd3ZWVrWWVhcicpO1xuICAgIGFkZFdlZWtZZWFyRm9ybWF0VG9rZW4oJ0dHR0cnLCAgJ2lzb1dlZWtZZWFyJyk7XG4gICAgYWRkV2Vla1llYXJGb3JtYXRUb2tlbignR0dHR0cnLCAnaXNvV2Vla1llYXInKTtcblxuICAgIC8vIEFMSUFTRVNcblxuICAgIGFkZFVuaXRBbGlhcygnd2Vla1llYXInLCAnZ2cnKTtcbiAgICBhZGRVbml0QWxpYXMoJ2lzb1dlZWtZZWFyJywgJ0dHJyk7XG5cbiAgICAvLyBQUklPUklUWVxuXG4gICAgYWRkVW5pdFByaW9yaXR5KCd3ZWVrWWVhcicsIDEpO1xuICAgIGFkZFVuaXRQcmlvcml0eSgnaXNvV2Vla1llYXInLCAxKTtcblxuXG4gICAgLy8gUEFSU0lOR1xuXG4gICAgYWRkUmVnZXhUb2tlbignRycsICAgICAgbWF0Y2hTaWduZWQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2cnLCAgICAgIG1hdGNoU2lnbmVkKTtcbiAgICBhZGRSZWdleFRva2VuKCdHRycsICAgICBtYXRjaDF0bzIsIG1hdGNoMik7XG4gICAgYWRkUmVnZXhUb2tlbignZ2cnLCAgICAgbWF0Y2gxdG8yLCBtYXRjaDIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0dHR0cnLCAgIG1hdGNoMXRvNCwgbWF0Y2g0KTtcbiAgICBhZGRSZWdleFRva2VuKCdnZ2dnJywgICBtYXRjaDF0bzQsIG1hdGNoNCk7XG4gICAgYWRkUmVnZXhUb2tlbignR0dHR0cnLCAgbWF0Y2gxdG82LCBtYXRjaDYpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2dnZ2dnJywgIG1hdGNoMXRvNiwgbWF0Y2g2KTtcblxuICAgIGFkZFdlZWtQYXJzZVRva2VuKFsnZ2dnZycsICdnZ2dnZycsICdHR0dHJywgJ0dHR0dHJ10sIGZ1bmN0aW9uIChpbnB1dCwgd2VlaywgY29uZmlnLCB0b2tlbikge1xuICAgICAgICB3ZWVrW3Rva2VuLnN1YnN0cigwLCAyKV0gPSB0b0ludChpbnB1dCk7XG4gICAgfSk7XG5cbiAgICBhZGRXZWVrUGFyc2VUb2tlbihbJ2dnJywgJ0dHJ10sIGZ1bmN0aW9uIChpbnB1dCwgd2VlaywgY29uZmlnLCB0b2tlbikge1xuICAgICAgICB3ZWVrW3Rva2VuXSA9IGhvb2tzLnBhcnNlVHdvRGlnaXRZZWFyKGlucHV0KTtcbiAgICB9KTtcblxuICAgIC8vIE1PTUVOVFNcblxuICAgIGZ1bmN0aW9uIGdldFNldFdlZWtZZWFyIChpbnB1dCkge1xuICAgICAgICByZXR1cm4gZ2V0U2V0V2Vla1llYXJIZWxwZXIuY2FsbCh0aGlzLFxuICAgICAgICAgICAgICAgIGlucHV0LFxuICAgICAgICAgICAgICAgIHRoaXMud2VlaygpLFxuICAgICAgICAgICAgICAgIHRoaXMud2Vla2RheSgpLFxuICAgICAgICAgICAgICAgIHRoaXMubG9jYWxlRGF0YSgpLl93ZWVrLmRvdyxcbiAgICAgICAgICAgICAgICB0aGlzLmxvY2FsZURhdGEoKS5fd2Vlay5kb3kpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFNldElTT1dlZWtZZWFyIChpbnB1dCkge1xuICAgICAgICByZXR1cm4gZ2V0U2V0V2Vla1llYXJIZWxwZXIuY2FsbCh0aGlzLFxuICAgICAgICAgICAgICAgIGlucHV0LCB0aGlzLmlzb1dlZWsoKSwgdGhpcy5pc29XZWVrZGF5KCksIDEsIDQpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldElTT1dlZWtzSW5ZZWFyICgpIHtcbiAgICAgICAgcmV0dXJuIHdlZWtzSW5ZZWFyKHRoaXMueWVhcigpLCAxLCA0KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRXZWVrc0luWWVhciAoKSB7XG4gICAgICAgIHZhciB3ZWVrSW5mbyA9IHRoaXMubG9jYWxlRGF0YSgpLl93ZWVrO1xuICAgICAgICByZXR1cm4gd2Vla3NJblllYXIodGhpcy55ZWFyKCksIHdlZWtJbmZvLmRvdywgd2Vla0luZm8uZG95KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRTZXRXZWVrWWVhckhlbHBlcihpbnB1dCwgd2Vlaywgd2Vla2RheSwgZG93LCBkb3kpIHtcbiAgICAgICAgdmFyIHdlZWtzVGFyZ2V0O1xuICAgICAgICBpZiAoaW5wdXQgPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIHdlZWtPZlllYXIodGhpcywgZG93LCBkb3kpLnllYXI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB3ZWVrc1RhcmdldCA9IHdlZWtzSW5ZZWFyKGlucHV0LCBkb3csIGRveSk7XG4gICAgICAgICAgICBpZiAod2VlayA+IHdlZWtzVGFyZ2V0KSB7XG4gICAgICAgICAgICAgICAgd2VlayA9IHdlZWtzVGFyZ2V0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHNldFdlZWtBbGwuY2FsbCh0aGlzLCBpbnB1dCwgd2Vlaywgd2Vla2RheSwgZG93LCBkb3kpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2V0V2Vla0FsbCh3ZWVrWWVhciwgd2Vlaywgd2Vla2RheSwgZG93LCBkb3kpIHtcbiAgICAgICAgdmFyIGRheU9mWWVhckRhdGEgPSBkYXlPZlllYXJGcm9tV2Vla3Mod2Vla1llYXIsIHdlZWssIHdlZWtkYXksIGRvdywgZG95KSxcbiAgICAgICAgICAgIGRhdGUgPSBjcmVhdGVVVENEYXRlKGRheU9mWWVhckRhdGEueWVhciwgMCwgZGF5T2ZZZWFyRGF0YS5kYXlPZlllYXIpO1xuXG4gICAgICAgIHRoaXMueWVhcihkYXRlLmdldFVUQ0Z1bGxZZWFyKCkpO1xuICAgICAgICB0aGlzLm1vbnRoKGRhdGUuZ2V0VVRDTW9udGgoKSk7XG4gICAgICAgIHRoaXMuZGF0ZShkYXRlLmdldFVUQ0RhdGUoKSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8vIEZPUk1BVFRJTkdcblxuICAgIGFkZEZvcm1hdFRva2VuKCdRJywgMCwgJ1FvJywgJ3F1YXJ0ZXInKTtcblxuICAgIC8vIEFMSUFTRVNcblxuICAgIGFkZFVuaXRBbGlhcygncXVhcnRlcicsICdRJyk7XG5cbiAgICAvLyBQUklPUklUWVxuXG4gICAgYWRkVW5pdFByaW9yaXR5KCdxdWFydGVyJywgNyk7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCdRJywgbWF0Y2gxKTtcbiAgICBhZGRQYXJzZVRva2VuKCdRJywgZnVuY3Rpb24gKGlucHV0LCBhcnJheSkge1xuICAgICAgICBhcnJheVtNT05USF0gPSAodG9JbnQoaW5wdXQpIC0gMSkgKiAzO1xuICAgIH0pO1xuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgZnVuY3Rpb24gZ2V0U2V0UXVhcnRlciAoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIGlucHV0ID09IG51bGwgPyBNYXRoLmNlaWwoKHRoaXMubW9udGgoKSArIDEpIC8gMykgOiB0aGlzLm1vbnRoKChpbnB1dCAtIDEpICogMyArIHRoaXMubW9udGgoKSAlIDMpO1xuICAgIH1cblxuICAgIC8vIEZPUk1BVFRJTkdcblxuICAgIGFkZEZvcm1hdFRva2VuKCdEJywgWydERCcsIDJdLCAnRG8nLCAnZGF0ZScpO1xuXG4gICAgLy8gQUxJQVNFU1xuXG4gICAgYWRkVW5pdEFsaWFzKCdkYXRlJywgJ0QnKTtcblxuICAgIC8vIFBSSU9SSVRZXG4gICAgYWRkVW5pdFByaW9yaXR5KCdkYXRlJywgOSk7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCdEJywgIG1hdGNoMXRvMik7XG4gICAgYWRkUmVnZXhUb2tlbignREQnLCBtYXRjaDF0bzIsIG1hdGNoMik7XG4gICAgYWRkUmVnZXhUb2tlbignRG8nLCBmdW5jdGlvbiAoaXNTdHJpY3QsIGxvY2FsZSkge1xuICAgICAgICAvLyBUT0RPOiBSZW1vdmUgXCJvcmRpbmFsUGFyc2VcIiBmYWxsYmFjayBpbiBuZXh0IG1ham9yIHJlbGVhc2UuXG4gICAgICAgIHJldHVybiBpc1N0cmljdCA/XG4gICAgICAgICAgKGxvY2FsZS5fZGF5T2ZNb250aE9yZGluYWxQYXJzZSB8fCBsb2NhbGUuX29yZGluYWxQYXJzZSkgOlxuICAgICAgICAgIGxvY2FsZS5fZGF5T2ZNb250aE9yZGluYWxQYXJzZUxlbmllbnQ7XG4gICAgfSk7XG5cbiAgICBhZGRQYXJzZVRva2VuKFsnRCcsICdERCddLCBEQVRFKTtcbiAgICBhZGRQYXJzZVRva2VuKCdEbycsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXkpIHtcbiAgICAgICAgYXJyYXlbREFURV0gPSB0b0ludChpbnB1dC5tYXRjaChtYXRjaDF0bzIpWzBdKTtcbiAgICB9KTtcblxuICAgIC8vIE1PTUVOVFNcblxuICAgIHZhciBnZXRTZXREYXlPZk1vbnRoID0gbWFrZUdldFNldCgnRGF0ZScsIHRydWUpO1xuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ0RERCcsIFsnRERERCcsIDNdLCAnREREbycsICdkYXlPZlllYXInKTtcblxuICAgIC8vIEFMSUFTRVNcblxuICAgIGFkZFVuaXRBbGlhcygnZGF5T2ZZZWFyJywgJ0RERCcpO1xuXG4gICAgLy8gUFJJT1JJVFlcbiAgICBhZGRVbml0UHJpb3JpdHkoJ2RheU9mWWVhcicsIDQpO1xuXG4gICAgLy8gUEFSU0lOR1xuXG4gICAgYWRkUmVnZXhUb2tlbignREREJywgIG1hdGNoMXRvMyk7XG4gICAgYWRkUmVnZXhUb2tlbignRERERCcsIG1hdGNoMyk7XG4gICAgYWRkUGFyc2VUb2tlbihbJ0RERCcsICdEREREJ10sIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZykge1xuICAgICAgICBjb25maWcuX2RheU9mWWVhciA9IHRvSW50KGlucHV0KTtcbiAgICB9KTtcblxuICAgIC8vIEhFTFBFUlNcblxuICAgIC8vIE1PTUVOVFNcblxuICAgIGZ1bmN0aW9uIGdldFNldERheU9mWWVhciAoaW5wdXQpIHtcbiAgICAgICAgdmFyIGRheU9mWWVhciA9IE1hdGgucm91bmQoKHRoaXMuY2xvbmUoKS5zdGFydE9mKCdkYXknKSAtIHRoaXMuY2xvbmUoKS5zdGFydE9mKCd5ZWFyJykpIC8gODY0ZTUpICsgMTtcbiAgICAgICAgcmV0dXJuIGlucHV0ID09IG51bGwgPyBkYXlPZlllYXIgOiB0aGlzLmFkZCgoaW5wdXQgLSBkYXlPZlllYXIpLCAnZCcpO1xuICAgIH1cblxuICAgIC8vIEZPUk1BVFRJTkdcblxuICAgIGFkZEZvcm1hdFRva2VuKCdtJywgWydtbScsIDJdLCAwLCAnbWludXRlJyk7XG5cbiAgICAvLyBBTElBU0VTXG5cbiAgICBhZGRVbml0QWxpYXMoJ21pbnV0ZScsICdtJyk7XG5cbiAgICAvLyBQUklPUklUWVxuXG4gICAgYWRkVW5pdFByaW9yaXR5KCdtaW51dGUnLCAxNCk7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCdtJywgIG1hdGNoMXRvMik7XG4gICAgYWRkUmVnZXhUb2tlbignbW0nLCBtYXRjaDF0bzIsIG1hdGNoMik7XG4gICAgYWRkUGFyc2VUb2tlbihbJ20nLCAnbW0nXSwgTUlOVVRFKTtcblxuICAgIC8vIE1PTUVOVFNcblxuICAgIHZhciBnZXRTZXRNaW51dGUgPSBtYWtlR2V0U2V0KCdNaW51dGVzJywgZmFsc2UpO1xuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ3MnLCBbJ3NzJywgMl0sIDAsICdzZWNvbmQnKTtcblxuICAgIC8vIEFMSUFTRVNcblxuICAgIGFkZFVuaXRBbGlhcygnc2Vjb25kJywgJ3MnKTtcblxuICAgIC8vIFBSSU9SSVRZXG5cbiAgICBhZGRVbml0UHJpb3JpdHkoJ3NlY29uZCcsIDE1KTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ3MnLCAgbWF0Y2gxdG8yKTtcbiAgICBhZGRSZWdleFRva2VuKCdzcycsIG1hdGNoMXRvMiwgbWF0Y2gyKTtcbiAgICBhZGRQYXJzZVRva2VuKFsncycsICdzcyddLCBTRUNPTkQpO1xuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgdmFyIGdldFNldFNlY29uZCA9IG1ha2VHZXRTZXQoJ1NlY29uZHMnLCBmYWxzZSk7XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBhZGRGb3JtYXRUb2tlbignUycsIDAsIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIH5+KHRoaXMubWlsbGlzZWNvbmQoKSAvIDEwMCk7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ1NTJywgMl0sIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIH5+KHRoaXMubWlsbGlzZWNvbmQoKSAvIDEwKTtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKDAsIFsnU1NTJywgM10sIDAsICdtaWxsaXNlY29uZCcpO1xuICAgIGFkZEZvcm1hdFRva2VuKDAsIFsnU1NTUycsIDRdLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1pbGxpc2Vjb25kKCkgKiAxMDtcbiAgICB9KTtcbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ1NTU1NTJywgNV0sIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWlsbGlzZWNvbmQoKSAqIDEwMDtcbiAgICB9KTtcbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ1NTU1NTUycsIDZdLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1pbGxpc2Vjb25kKCkgKiAxMDAwO1xuICAgIH0pO1xuICAgIGFkZEZvcm1hdFRva2VuKDAsIFsnU1NTU1NTUycsIDddLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1pbGxpc2Vjb25kKCkgKiAxMDAwMDtcbiAgICB9KTtcbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ1NTU1NTU1NTJywgOF0sIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWlsbGlzZWNvbmQoKSAqIDEwMDAwMDtcbiAgICB9KTtcbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ1NTU1NTU1NTUycsIDldLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1pbGxpc2Vjb25kKCkgKiAxMDAwMDAwO1xuICAgIH0pO1xuXG5cbiAgICAvLyBBTElBU0VTXG5cbiAgICBhZGRVbml0QWxpYXMoJ21pbGxpc2Vjb25kJywgJ21zJyk7XG5cbiAgICAvLyBQUklPUklUWVxuXG4gICAgYWRkVW5pdFByaW9yaXR5KCdtaWxsaXNlY29uZCcsIDE2KTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ1MnLCAgICBtYXRjaDF0bzMsIG1hdGNoMSk7XG4gICAgYWRkUmVnZXhUb2tlbignU1MnLCAgIG1hdGNoMXRvMywgbWF0Y2gyKTtcbiAgICBhZGRSZWdleFRva2VuKCdTU1MnLCAgbWF0Y2gxdG8zLCBtYXRjaDMpO1xuXG4gICAgdmFyIHRva2VuO1xuICAgIGZvciAodG9rZW4gPSAnU1NTUyc7IHRva2VuLmxlbmd0aCA8PSA5OyB0b2tlbiArPSAnUycpIHtcbiAgICAgICAgYWRkUmVnZXhUb2tlbih0b2tlbiwgbWF0Y2hVbnNpZ25lZCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcGFyc2VNcyhpbnB1dCwgYXJyYXkpIHtcbiAgICAgICAgYXJyYXlbTUlMTElTRUNPTkRdID0gdG9JbnQoKCcwLicgKyBpbnB1dCkgKiAxMDAwKTtcbiAgICB9XG5cbiAgICBmb3IgKHRva2VuID0gJ1MnOyB0b2tlbi5sZW5ndGggPD0gOTsgdG9rZW4gKz0gJ1MnKSB7XG4gICAgICAgIGFkZFBhcnNlVG9rZW4odG9rZW4sIHBhcnNlTXMpO1xuICAgIH1cbiAgICAvLyBNT01FTlRTXG5cbiAgICB2YXIgZ2V0U2V0TWlsbGlzZWNvbmQgPSBtYWtlR2V0U2V0KCdNaWxsaXNlY29uZHMnLCBmYWxzZSk7XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBhZGRGb3JtYXRUb2tlbigneicsICAwLCAwLCAnem9uZUFiYnInKTtcbiAgICBhZGRGb3JtYXRUb2tlbignenonLCAwLCAwLCAnem9uZU5hbWUnKTtcblxuICAgIC8vIE1PTUVOVFNcblxuICAgIGZ1bmN0aW9uIGdldFpvbmVBYmJyICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzVVRDID8gJ1VUQycgOiAnJztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRab25lTmFtZSAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc1VUQyA/ICdDb29yZGluYXRlZCBVbml2ZXJzYWwgVGltZScgOiAnJztcbiAgICB9XG5cbiAgICB2YXIgcHJvdG8gPSBNb21lbnQucHJvdG90eXBlO1xuXG4gICAgcHJvdG8uYWRkICAgICAgICAgICAgICAgPSBhZGQ7XG4gICAgcHJvdG8uY2FsZW5kYXIgICAgICAgICAgPSBjYWxlbmRhciQxO1xuICAgIHByb3RvLmNsb25lICAgICAgICAgICAgID0gY2xvbmU7XG4gICAgcHJvdG8uZGlmZiAgICAgICAgICAgICAgPSBkaWZmO1xuICAgIHByb3RvLmVuZE9mICAgICAgICAgICAgID0gZW5kT2Y7XG4gICAgcHJvdG8uZm9ybWF0ICAgICAgICAgICAgPSBmb3JtYXQ7XG4gICAgcHJvdG8uZnJvbSAgICAgICAgICAgICAgPSBmcm9tO1xuICAgIHByb3RvLmZyb21Ob3cgICAgICAgICAgID0gZnJvbU5vdztcbiAgICBwcm90by50byAgICAgICAgICAgICAgICA9IHRvO1xuICAgIHByb3RvLnRvTm93ICAgICAgICAgICAgID0gdG9Ob3c7XG4gICAgcHJvdG8uZ2V0ICAgICAgICAgICAgICAgPSBzdHJpbmdHZXQ7XG4gICAgcHJvdG8uaW52YWxpZEF0ICAgICAgICAgPSBpbnZhbGlkQXQ7XG4gICAgcHJvdG8uaXNBZnRlciAgICAgICAgICAgPSBpc0FmdGVyO1xuICAgIHByb3RvLmlzQmVmb3JlICAgICAgICAgID0gaXNCZWZvcmU7XG4gICAgcHJvdG8uaXNCZXR3ZWVuICAgICAgICAgPSBpc0JldHdlZW47XG4gICAgcHJvdG8uaXNTYW1lICAgICAgICAgICAgPSBpc1NhbWU7XG4gICAgcHJvdG8uaXNTYW1lT3JBZnRlciAgICAgPSBpc1NhbWVPckFmdGVyO1xuICAgIHByb3RvLmlzU2FtZU9yQmVmb3JlICAgID0gaXNTYW1lT3JCZWZvcmU7XG4gICAgcHJvdG8uaXNWYWxpZCAgICAgICAgICAgPSBpc1ZhbGlkJDI7XG4gICAgcHJvdG8ubGFuZyAgICAgICAgICAgICAgPSBsYW5nO1xuICAgIHByb3RvLmxvY2FsZSAgICAgICAgICAgID0gbG9jYWxlO1xuICAgIHByb3RvLmxvY2FsZURhdGEgICAgICAgID0gbG9jYWxlRGF0YTtcbiAgICBwcm90by5tYXggICAgICAgICAgICAgICA9IHByb3RvdHlwZU1heDtcbiAgICBwcm90by5taW4gICAgICAgICAgICAgICA9IHByb3RvdHlwZU1pbjtcbiAgICBwcm90by5wYXJzaW5nRmxhZ3MgICAgICA9IHBhcnNpbmdGbGFncztcbiAgICBwcm90by5zZXQgICAgICAgICAgICAgICA9IHN0cmluZ1NldDtcbiAgICBwcm90by5zdGFydE9mICAgICAgICAgICA9IHN0YXJ0T2Y7XG4gICAgcHJvdG8uc3VidHJhY3QgICAgICAgICAgPSBzdWJ0cmFjdDtcbiAgICBwcm90by50b0FycmF5ICAgICAgICAgICA9IHRvQXJyYXk7XG4gICAgcHJvdG8udG9PYmplY3QgICAgICAgICAgPSB0b09iamVjdDtcbiAgICBwcm90by50b0RhdGUgICAgICAgICAgICA9IHRvRGF0ZTtcbiAgICBwcm90by50b0lTT1N0cmluZyAgICAgICA9IHRvSVNPU3RyaW5nO1xuICAgIHByb3RvLmluc3BlY3QgICAgICAgICAgID0gaW5zcGVjdDtcbiAgICBwcm90by50b0pTT04gICAgICAgICAgICA9IHRvSlNPTjtcbiAgICBwcm90by50b1N0cmluZyAgICAgICAgICA9IHRvU3RyaW5nO1xuICAgIHByb3RvLnVuaXggICAgICAgICAgICAgID0gdW5peDtcbiAgICBwcm90by52YWx1ZU9mICAgICAgICAgICA9IHZhbHVlT2Y7XG4gICAgcHJvdG8uY3JlYXRpb25EYXRhICAgICAgPSBjcmVhdGlvbkRhdGE7XG4gICAgcHJvdG8ueWVhciAgICAgICA9IGdldFNldFllYXI7XG4gICAgcHJvdG8uaXNMZWFwWWVhciA9IGdldElzTGVhcFllYXI7XG4gICAgcHJvdG8ud2Vla1llYXIgICAgPSBnZXRTZXRXZWVrWWVhcjtcbiAgICBwcm90by5pc29XZWVrWWVhciA9IGdldFNldElTT1dlZWtZZWFyO1xuICAgIHByb3RvLnF1YXJ0ZXIgPSBwcm90by5xdWFydGVycyA9IGdldFNldFF1YXJ0ZXI7XG4gICAgcHJvdG8ubW9udGggICAgICAgPSBnZXRTZXRNb250aDtcbiAgICBwcm90by5kYXlzSW5Nb250aCA9IGdldERheXNJbk1vbnRoO1xuICAgIHByb3RvLndlZWsgICAgICAgICAgID0gcHJvdG8ud2Vla3MgICAgICAgID0gZ2V0U2V0V2VlaztcbiAgICBwcm90by5pc29XZWVrICAgICAgICA9IHByb3RvLmlzb1dlZWtzICAgICA9IGdldFNldElTT1dlZWs7XG4gICAgcHJvdG8ud2Vla3NJblllYXIgICAgPSBnZXRXZWVrc0luWWVhcjtcbiAgICBwcm90by5pc29XZWVrc0luWWVhciA9IGdldElTT1dlZWtzSW5ZZWFyO1xuICAgIHByb3RvLmRhdGUgICAgICAgPSBnZXRTZXREYXlPZk1vbnRoO1xuICAgIHByb3RvLmRheSAgICAgICAgPSBwcm90by5kYXlzICAgICAgICAgICAgID0gZ2V0U2V0RGF5T2ZXZWVrO1xuICAgIHByb3RvLndlZWtkYXkgICAgPSBnZXRTZXRMb2NhbGVEYXlPZldlZWs7XG4gICAgcHJvdG8uaXNvV2Vla2RheSA9IGdldFNldElTT0RheU9mV2VlaztcbiAgICBwcm90by5kYXlPZlllYXIgID0gZ2V0U2V0RGF5T2ZZZWFyO1xuICAgIHByb3RvLmhvdXIgPSBwcm90by5ob3VycyA9IGdldFNldEhvdXI7XG4gICAgcHJvdG8ubWludXRlID0gcHJvdG8ubWludXRlcyA9IGdldFNldE1pbnV0ZTtcbiAgICBwcm90by5zZWNvbmQgPSBwcm90by5zZWNvbmRzID0gZ2V0U2V0U2Vjb25kO1xuICAgIHByb3RvLm1pbGxpc2Vjb25kID0gcHJvdG8ubWlsbGlzZWNvbmRzID0gZ2V0U2V0TWlsbGlzZWNvbmQ7XG4gICAgcHJvdG8udXRjT2Zmc2V0ICAgICAgICAgICAgPSBnZXRTZXRPZmZzZXQ7XG4gICAgcHJvdG8udXRjICAgICAgICAgICAgICAgICAgPSBzZXRPZmZzZXRUb1VUQztcbiAgICBwcm90by5sb2NhbCAgICAgICAgICAgICAgICA9IHNldE9mZnNldFRvTG9jYWw7XG4gICAgcHJvdG8ucGFyc2Vab25lICAgICAgICAgICAgPSBzZXRPZmZzZXRUb1BhcnNlZE9mZnNldDtcbiAgICBwcm90by5oYXNBbGlnbmVkSG91ck9mZnNldCA9IGhhc0FsaWduZWRIb3VyT2Zmc2V0O1xuICAgIHByb3RvLmlzRFNUICAgICAgICAgICAgICAgID0gaXNEYXlsaWdodFNhdmluZ1RpbWU7XG4gICAgcHJvdG8uaXNMb2NhbCAgICAgICAgICAgICAgPSBpc0xvY2FsO1xuICAgIHByb3RvLmlzVXRjT2Zmc2V0ICAgICAgICAgID0gaXNVdGNPZmZzZXQ7XG4gICAgcHJvdG8uaXNVdGMgICAgICAgICAgICAgICAgPSBpc1V0YztcbiAgICBwcm90by5pc1VUQyAgICAgICAgICAgICAgICA9IGlzVXRjO1xuICAgIHByb3RvLnpvbmVBYmJyID0gZ2V0Wm9uZUFiYnI7XG4gICAgcHJvdG8uem9uZU5hbWUgPSBnZXRab25lTmFtZTtcbiAgICBwcm90by5kYXRlcyAgPSBkZXByZWNhdGUoJ2RhdGVzIGFjY2Vzc29yIGlzIGRlcHJlY2F0ZWQuIFVzZSBkYXRlIGluc3RlYWQuJywgZ2V0U2V0RGF5T2ZNb250aCk7XG4gICAgcHJvdG8ubW9udGhzID0gZGVwcmVjYXRlKCdtb250aHMgYWNjZXNzb3IgaXMgZGVwcmVjYXRlZC4gVXNlIG1vbnRoIGluc3RlYWQnLCBnZXRTZXRNb250aCk7XG4gICAgcHJvdG8ueWVhcnMgID0gZGVwcmVjYXRlKCd5ZWFycyBhY2Nlc3NvciBpcyBkZXByZWNhdGVkLiBVc2UgeWVhciBpbnN0ZWFkJywgZ2V0U2V0WWVhcik7XG4gICAgcHJvdG8uem9uZSAgID0gZGVwcmVjYXRlKCdtb21lbnQoKS56b25lIGlzIGRlcHJlY2F0ZWQsIHVzZSBtb21lbnQoKS51dGNPZmZzZXQgaW5zdGVhZC4gaHR0cDovL21vbWVudGpzLmNvbS9ndWlkZXMvIy93YXJuaW5ncy96b25lLycsIGdldFNldFpvbmUpO1xuICAgIHByb3RvLmlzRFNUU2hpZnRlZCA9IGRlcHJlY2F0ZSgnaXNEU1RTaGlmdGVkIGlzIGRlcHJlY2F0ZWQuIFNlZSBodHRwOi8vbW9tZW50anMuY29tL2d1aWRlcy8jL3dhcm5pbmdzL2RzdC1zaGlmdGVkLyBmb3IgbW9yZSBpbmZvcm1hdGlvbicsIGlzRGF5bGlnaHRTYXZpbmdUaW1lU2hpZnRlZCk7XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVVbml4IChpbnB1dCkge1xuICAgICAgICByZXR1cm4gY3JlYXRlTG9jYWwoaW5wdXQgKiAxMDAwKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVJblpvbmUgKCkge1xuICAgICAgICByZXR1cm4gY3JlYXRlTG9jYWwuYXBwbHkobnVsbCwgYXJndW1lbnRzKS5wYXJzZVpvbmUoKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwcmVQYXJzZVBvc3RGb3JtYXQgKHN0cmluZykge1xuICAgICAgICByZXR1cm4gc3RyaW5nO1xuICAgIH1cblxuICAgIHZhciBwcm90byQxID0gTG9jYWxlLnByb3RvdHlwZTtcblxuICAgIHByb3RvJDEuY2FsZW5kYXIgICAgICAgID0gY2FsZW5kYXI7XG4gICAgcHJvdG8kMS5sb25nRGF0ZUZvcm1hdCAgPSBsb25nRGF0ZUZvcm1hdDtcbiAgICBwcm90byQxLmludmFsaWREYXRlICAgICA9IGludmFsaWREYXRlO1xuICAgIHByb3RvJDEub3JkaW5hbCAgICAgICAgID0gb3JkaW5hbDtcbiAgICBwcm90byQxLnByZXBhcnNlICAgICAgICA9IHByZVBhcnNlUG9zdEZvcm1hdDtcbiAgICBwcm90byQxLnBvc3Rmb3JtYXQgICAgICA9IHByZVBhcnNlUG9zdEZvcm1hdDtcbiAgICBwcm90byQxLnJlbGF0aXZlVGltZSAgICA9IHJlbGF0aXZlVGltZTtcbiAgICBwcm90byQxLnBhc3RGdXR1cmUgICAgICA9IHBhc3RGdXR1cmU7XG4gICAgcHJvdG8kMS5zZXQgICAgICAgICAgICAgPSBzZXQ7XG5cbiAgICBwcm90byQxLm1vbnRocyAgICAgICAgICAgID0gICAgICAgIGxvY2FsZU1vbnRocztcbiAgICBwcm90byQxLm1vbnRoc1Nob3J0ICAgICAgID0gICAgICAgIGxvY2FsZU1vbnRoc1Nob3J0O1xuICAgIHByb3RvJDEubW9udGhzUGFyc2UgICAgICAgPSAgICAgICAgbG9jYWxlTW9udGhzUGFyc2U7XG4gICAgcHJvdG8kMS5tb250aHNSZWdleCAgICAgICA9IG1vbnRoc1JlZ2V4O1xuICAgIHByb3RvJDEubW9udGhzU2hvcnRSZWdleCAgPSBtb250aHNTaG9ydFJlZ2V4O1xuICAgIHByb3RvJDEud2VlayA9IGxvY2FsZVdlZWs7XG4gICAgcHJvdG8kMS5maXJzdERheU9mWWVhciA9IGxvY2FsZUZpcnN0RGF5T2ZZZWFyO1xuICAgIHByb3RvJDEuZmlyc3REYXlPZldlZWsgPSBsb2NhbGVGaXJzdERheU9mV2VlaztcblxuICAgIHByb3RvJDEud2Vla2RheXMgICAgICAgPSAgICAgICAgbG9jYWxlV2Vla2RheXM7XG4gICAgcHJvdG8kMS53ZWVrZGF5c01pbiAgICA9ICAgICAgICBsb2NhbGVXZWVrZGF5c01pbjtcbiAgICBwcm90byQxLndlZWtkYXlzU2hvcnQgID0gICAgICAgIGxvY2FsZVdlZWtkYXlzU2hvcnQ7XG4gICAgcHJvdG8kMS53ZWVrZGF5c1BhcnNlICA9ICAgICAgICBsb2NhbGVXZWVrZGF5c1BhcnNlO1xuXG4gICAgcHJvdG8kMS53ZWVrZGF5c1JlZ2V4ICAgICAgID0gICAgICAgIHdlZWtkYXlzUmVnZXg7XG4gICAgcHJvdG8kMS53ZWVrZGF5c1Nob3J0UmVnZXggID0gICAgICAgIHdlZWtkYXlzU2hvcnRSZWdleDtcbiAgICBwcm90byQxLndlZWtkYXlzTWluUmVnZXggICAgPSAgICAgICAgd2Vla2RheXNNaW5SZWdleDtcblxuICAgIHByb3RvJDEuaXNQTSA9IGxvY2FsZUlzUE07XG4gICAgcHJvdG8kMS5tZXJpZGllbSA9IGxvY2FsZU1lcmlkaWVtO1xuXG4gICAgZnVuY3Rpb24gZ2V0JDEgKGZvcm1hdCwgaW5kZXgsIGZpZWxkLCBzZXR0ZXIpIHtcbiAgICAgICAgdmFyIGxvY2FsZSA9IGdldExvY2FsZSgpO1xuICAgICAgICB2YXIgdXRjID0gY3JlYXRlVVRDKCkuc2V0KHNldHRlciwgaW5kZXgpO1xuICAgICAgICByZXR1cm4gbG9jYWxlW2ZpZWxkXSh1dGMsIGZvcm1hdCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGlzdE1vbnRoc0ltcGwgKGZvcm1hdCwgaW5kZXgsIGZpZWxkKSB7XG4gICAgICAgIGlmIChpc051bWJlcihmb3JtYXQpKSB7XG4gICAgICAgICAgICBpbmRleCA9IGZvcm1hdDtcbiAgICAgICAgICAgIGZvcm1hdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvcm1hdCA9IGZvcm1hdCB8fCAnJztcblxuICAgICAgICBpZiAoaW5kZXggIT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIGdldCQxKGZvcm1hdCwgaW5kZXgsIGZpZWxkLCAnbW9udGgnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBpO1xuICAgICAgICB2YXIgb3V0ID0gW107XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCAxMjsgaSsrKSB7XG4gICAgICAgICAgICBvdXRbaV0gPSBnZXQkMShmb3JtYXQsIGksIGZpZWxkLCAnbW9udGgnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb3V0O1xuICAgIH1cblxuICAgIC8vICgpXG4gICAgLy8gKDUpXG4gICAgLy8gKGZtdCwgNSlcbiAgICAvLyAoZm10KVxuICAgIC8vICh0cnVlKVxuICAgIC8vICh0cnVlLCA1KVxuICAgIC8vICh0cnVlLCBmbXQsIDUpXG4gICAgLy8gKHRydWUsIGZtdClcbiAgICBmdW5jdGlvbiBsaXN0V2Vla2RheXNJbXBsIChsb2NhbGVTb3J0ZWQsIGZvcm1hdCwgaW5kZXgsIGZpZWxkKSB7XG4gICAgICAgIGlmICh0eXBlb2YgbG9jYWxlU29ydGVkID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICAgIGlmIChpc051bWJlcihmb3JtYXQpKSB7XG4gICAgICAgICAgICAgICAgaW5kZXggPSBmb3JtYXQ7XG4gICAgICAgICAgICAgICAgZm9ybWF0ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3JtYXQgPSBmb3JtYXQgfHwgJyc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmb3JtYXQgPSBsb2NhbGVTb3J0ZWQ7XG4gICAgICAgICAgICBpbmRleCA9IGZvcm1hdDtcbiAgICAgICAgICAgIGxvY2FsZVNvcnRlZCA9IGZhbHNlO1xuXG4gICAgICAgICAgICBpZiAoaXNOdW1iZXIoZm9ybWF0KSkge1xuICAgICAgICAgICAgICAgIGluZGV4ID0gZm9ybWF0O1xuICAgICAgICAgICAgICAgIGZvcm1hdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9ybWF0ID0gZm9ybWF0IHx8ICcnO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGxvY2FsZSA9IGdldExvY2FsZSgpLFxuICAgICAgICAgICAgc2hpZnQgPSBsb2NhbGVTb3J0ZWQgPyBsb2NhbGUuX3dlZWsuZG93IDogMDtcblxuICAgICAgICBpZiAoaW5kZXggIT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIGdldCQxKGZvcm1hdCwgKGluZGV4ICsgc2hpZnQpICUgNywgZmllbGQsICdkYXknKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBpO1xuICAgICAgICB2YXIgb3V0ID0gW107XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCA3OyBpKyspIHtcbiAgICAgICAgICAgIG91dFtpXSA9IGdldCQxKGZvcm1hdCwgKGkgKyBzaGlmdCkgJSA3LCBmaWVsZCwgJ2RheScpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvdXQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGlzdE1vbnRocyAoZm9ybWF0LCBpbmRleCkge1xuICAgICAgICByZXR1cm4gbGlzdE1vbnRoc0ltcGwoZm9ybWF0LCBpbmRleCwgJ21vbnRocycpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpc3RNb250aHNTaG9ydCAoZm9ybWF0LCBpbmRleCkge1xuICAgICAgICByZXR1cm4gbGlzdE1vbnRoc0ltcGwoZm9ybWF0LCBpbmRleCwgJ21vbnRoc1Nob3J0Jyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGlzdFdlZWtkYXlzIChsb2NhbGVTb3J0ZWQsIGZvcm1hdCwgaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIGxpc3RXZWVrZGF5c0ltcGwobG9jYWxlU29ydGVkLCBmb3JtYXQsIGluZGV4LCAnd2Vla2RheXMnKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaXN0V2Vla2RheXNTaG9ydCAobG9jYWxlU29ydGVkLCBmb3JtYXQsIGluZGV4KSB7XG4gICAgICAgIHJldHVybiBsaXN0V2Vla2RheXNJbXBsKGxvY2FsZVNvcnRlZCwgZm9ybWF0LCBpbmRleCwgJ3dlZWtkYXlzU2hvcnQnKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaXN0V2Vla2RheXNNaW4gKGxvY2FsZVNvcnRlZCwgZm9ybWF0LCBpbmRleCkge1xuICAgICAgICByZXR1cm4gbGlzdFdlZWtkYXlzSW1wbChsb2NhbGVTb3J0ZWQsIGZvcm1hdCwgaW5kZXgsICd3ZWVrZGF5c01pbicpO1xuICAgIH1cblxuICAgIGdldFNldEdsb2JhbExvY2FsZSgnZW4nLCB7XG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfSh0aHxzdHxuZHxyZCkvLFxuICAgICAgICBvcmRpbmFsIDogZnVuY3Rpb24gKG51bWJlcikge1xuICAgICAgICAgICAgdmFyIGIgPSBudW1iZXIgJSAxMCxcbiAgICAgICAgICAgICAgICBvdXRwdXQgPSAodG9JbnQobnVtYmVyICUgMTAwIC8gMTApID09PSAxKSA/ICd0aCcgOlxuICAgICAgICAgICAgICAgIChiID09PSAxKSA/ICdzdCcgOlxuICAgICAgICAgICAgICAgIChiID09PSAyKSA/ICduZCcgOlxuICAgICAgICAgICAgICAgIChiID09PSAzKSA/ICdyZCcgOiAndGgnO1xuICAgICAgICAgICAgcmV0dXJuIG51bWJlciArIG91dHB1dDtcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gU2lkZSBlZmZlY3QgaW1wb3J0c1xuXG4gICAgaG9va3MubGFuZyA9IGRlcHJlY2F0ZSgnbW9tZW50LmxhbmcgaXMgZGVwcmVjYXRlZC4gVXNlIG1vbWVudC5sb2NhbGUgaW5zdGVhZC4nLCBnZXRTZXRHbG9iYWxMb2NhbGUpO1xuICAgIGhvb2tzLmxhbmdEYXRhID0gZGVwcmVjYXRlKCdtb21lbnQubGFuZ0RhdGEgaXMgZGVwcmVjYXRlZC4gVXNlIG1vbWVudC5sb2NhbGVEYXRhIGluc3RlYWQuJywgZ2V0TG9jYWxlKTtcblxuICAgIHZhciBtYXRoQWJzID0gTWF0aC5hYnM7XG5cbiAgICBmdW5jdGlvbiBhYnMgKCkge1xuICAgICAgICB2YXIgZGF0YSAgICAgICAgICAgPSB0aGlzLl9kYXRhO1xuXG4gICAgICAgIHRoaXMuX21pbGxpc2Vjb25kcyA9IG1hdGhBYnModGhpcy5fbWlsbGlzZWNvbmRzKTtcbiAgICAgICAgdGhpcy5fZGF5cyAgICAgICAgID0gbWF0aEFicyh0aGlzLl9kYXlzKTtcbiAgICAgICAgdGhpcy5fbW9udGhzICAgICAgID0gbWF0aEFicyh0aGlzLl9tb250aHMpO1xuXG4gICAgICAgIGRhdGEubWlsbGlzZWNvbmRzICA9IG1hdGhBYnMoZGF0YS5taWxsaXNlY29uZHMpO1xuICAgICAgICBkYXRhLnNlY29uZHMgICAgICAgPSBtYXRoQWJzKGRhdGEuc2Vjb25kcyk7XG4gICAgICAgIGRhdGEubWludXRlcyAgICAgICA9IG1hdGhBYnMoZGF0YS5taW51dGVzKTtcbiAgICAgICAgZGF0YS5ob3VycyAgICAgICAgID0gbWF0aEFicyhkYXRhLmhvdXJzKTtcbiAgICAgICAgZGF0YS5tb250aHMgICAgICAgID0gbWF0aEFicyhkYXRhLm1vbnRocyk7XG4gICAgICAgIGRhdGEueWVhcnMgICAgICAgICA9IG1hdGhBYnMoZGF0YS55ZWFycyk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYWRkU3VidHJhY3QkMSAoZHVyYXRpb24sIGlucHV0LCB2YWx1ZSwgZGlyZWN0aW9uKSB7XG4gICAgICAgIHZhciBvdGhlciA9IGNyZWF0ZUR1cmF0aW9uKGlucHV0LCB2YWx1ZSk7XG5cbiAgICAgICAgZHVyYXRpb24uX21pbGxpc2Vjb25kcyArPSBkaXJlY3Rpb24gKiBvdGhlci5fbWlsbGlzZWNvbmRzO1xuICAgICAgICBkdXJhdGlvbi5fZGF5cyAgICAgICAgICs9IGRpcmVjdGlvbiAqIG90aGVyLl9kYXlzO1xuICAgICAgICBkdXJhdGlvbi5fbW9udGhzICAgICAgICs9IGRpcmVjdGlvbiAqIG90aGVyLl9tb250aHM7XG5cbiAgICAgICAgcmV0dXJuIGR1cmF0aW9uLl9idWJibGUoKTtcbiAgICB9XG5cbiAgICAvLyBzdXBwb3J0cyBvbmx5IDIuMC1zdHlsZSBhZGQoMSwgJ3MnKSBvciBhZGQoZHVyYXRpb24pXG4gICAgZnVuY3Rpb24gYWRkJDEgKGlucHV0LCB2YWx1ZSkge1xuICAgICAgICByZXR1cm4gYWRkU3VidHJhY3QkMSh0aGlzLCBpbnB1dCwgdmFsdWUsIDEpO1xuICAgIH1cblxuICAgIC8vIHN1cHBvcnRzIG9ubHkgMi4wLXN0eWxlIHN1YnRyYWN0KDEsICdzJykgb3Igc3VidHJhY3QoZHVyYXRpb24pXG4gICAgZnVuY3Rpb24gc3VidHJhY3QkMSAoaW5wdXQsIHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBhZGRTdWJ0cmFjdCQxKHRoaXMsIGlucHV0LCB2YWx1ZSwgLTEpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFic0NlaWwgKG51bWJlcikge1xuICAgICAgICBpZiAobnVtYmVyIDwgMCkge1xuICAgICAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IobnVtYmVyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBNYXRoLmNlaWwobnVtYmVyKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGJ1YmJsZSAoKSB7XG4gICAgICAgIHZhciBtaWxsaXNlY29uZHMgPSB0aGlzLl9taWxsaXNlY29uZHM7XG4gICAgICAgIHZhciBkYXlzICAgICAgICAgPSB0aGlzLl9kYXlzO1xuICAgICAgICB2YXIgbW9udGhzICAgICAgID0gdGhpcy5fbW9udGhzO1xuICAgICAgICB2YXIgZGF0YSAgICAgICAgID0gdGhpcy5fZGF0YTtcbiAgICAgICAgdmFyIHNlY29uZHMsIG1pbnV0ZXMsIGhvdXJzLCB5ZWFycywgbW9udGhzRnJvbURheXM7XG5cbiAgICAgICAgLy8gaWYgd2UgaGF2ZSBhIG1peCBvZiBwb3NpdGl2ZSBhbmQgbmVnYXRpdmUgdmFsdWVzLCBidWJibGUgZG93biBmaXJzdFxuICAgICAgICAvLyBjaGVjazogaHR0cHM6Ly9naXRodWIuY29tL21vbWVudC9tb21lbnQvaXNzdWVzLzIxNjZcbiAgICAgICAgaWYgKCEoKG1pbGxpc2Vjb25kcyA+PSAwICYmIGRheXMgPj0gMCAmJiBtb250aHMgPj0gMCkgfHxcbiAgICAgICAgICAgICAgICAobWlsbGlzZWNvbmRzIDw9IDAgJiYgZGF5cyA8PSAwICYmIG1vbnRocyA8PSAwKSkpIHtcbiAgICAgICAgICAgIG1pbGxpc2Vjb25kcyArPSBhYnNDZWlsKG1vbnRoc1RvRGF5cyhtb250aHMpICsgZGF5cykgKiA4NjRlNTtcbiAgICAgICAgICAgIGRheXMgPSAwO1xuICAgICAgICAgICAgbW9udGhzID0gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRoZSBmb2xsb3dpbmcgY29kZSBidWJibGVzIHVwIHZhbHVlcywgc2VlIHRoZSB0ZXN0cyBmb3JcbiAgICAgICAgLy8gZXhhbXBsZXMgb2Ygd2hhdCB0aGF0IG1lYW5zLlxuICAgICAgICBkYXRhLm1pbGxpc2Vjb25kcyA9IG1pbGxpc2Vjb25kcyAlIDEwMDA7XG5cbiAgICAgICAgc2Vjb25kcyAgICAgICAgICAgPSBhYnNGbG9vcihtaWxsaXNlY29uZHMgLyAxMDAwKTtcbiAgICAgICAgZGF0YS5zZWNvbmRzICAgICAgPSBzZWNvbmRzICUgNjA7XG5cbiAgICAgICAgbWludXRlcyAgICAgICAgICAgPSBhYnNGbG9vcihzZWNvbmRzIC8gNjApO1xuICAgICAgICBkYXRhLm1pbnV0ZXMgICAgICA9IG1pbnV0ZXMgJSA2MDtcblxuICAgICAgICBob3VycyAgICAgICAgICAgICA9IGFic0Zsb29yKG1pbnV0ZXMgLyA2MCk7XG4gICAgICAgIGRhdGEuaG91cnMgICAgICAgID0gaG91cnMgJSAyNDtcblxuICAgICAgICBkYXlzICs9IGFic0Zsb29yKGhvdXJzIC8gMjQpO1xuXG4gICAgICAgIC8vIGNvbnZlcnQgZGF5cyB0byBtb250aHNcbiAgICAgICAgbW9udGhzRnJvbURheXMgPSBhYnNGbG9vcihkYXlzVG9Nb250aHMoZGF5cykpO1xuICAgICAgICBtb250aHMgKz0gbW9udGhzRnJvbURheXM7XG4gICAgICAgIGRheXMgLT0gYWJzQ2VpbChtb250aHNUb0RheXMobW9udGhzRnJvbURheXMpKTtcblxuICAgICAgICAvLyAxMiBtb250aHMgLT4gMSB5ZWFyXG4gICAgICAgIHllYXJzID0gYWJzRmxvb3IobW9udGhzIC8gMTIpO1xuICAgICAgICBtb250aHMgJT0gMTI7XG5cbiAgICAgICAgZGF0YS5kYXlzICAgPSBkYXlzO1xuICAgICAgICBkYXRhLm1vbnRocyA9IG1vbnRocztcbiAgICAgICAgZGF0YS55ZWFycyAgPSB5ZWFycztcblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBkYXlzVG9Nb250aHMgKGRheXMpIHtcbiAgICAgICAgLy8gNDAwIHllYXJzIGhhdmUgMTQ2MDk3IGRheXMgKHRha2luZyBpbnRvIGFjY291bnQgbGVhcCB5ZWFyIHJ1bGVzKVxuICAgICAgICAvLyA0MDAgeWVhcnMgaGF2ZSAxMiBtb250aHMgPT09IDQ4MDBcbiAgICAgICAgcmV0dXJuIGRheXMgKiA0ODAwIC8gMTQ2MDk3O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1vbnRoc1RvRGF5cyAobW9udGhzKSB7XG4gICAgICAgIC8vIHRoZSByZXZlcnNlIG9mIGRheXNUb01vbnRoc1xuICAgICAgICByZXR1cm4gbW9udGhzICogMTQ2MDk3IC8gNDgwMDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhcyAodW5pdHMpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIE5hTjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgZGF5cztcbiAgICAgICAgdmFyIG1vbnRocztcbiAgICAgICAgdmFyIG1pbGxpc2Vjb25kcyA9IHRoaXMuX21pbGxpc2Vjb25kcztcblxuICAgICAgICB1bml0cyA9IG5vcm1hbGl6ZVVuaXRzKHVuaXRzKTtcblxuICAgICAgICBpZiAodW5pdHMgPT09ICdtb250aCcgfHwgdW5pdHMgPT09ICdxdWFydGVyJyB8fCB1bml0cyA9PT0gJ3llYXInKSB7XG4gICAgICAgICAgICBkYXlzID0gdGhpcy5fZGF5cyArIG1pbGxpc2Vjb25kcyAvIDg2NGU1O1xuICAgICAgICAgICAgbW9udGhzID0gdGhpcy5fbW9udGhzICsgZGF5c1RvTW9udGhzKGRheXMpO1xuICAgICAgICAgICAgc3dpdGNoICh1bml0cykge1xuICAgICAgICAgICAgICAgIGNhc2UgJ21vbnRoJzogICByZXR1cm4gbW9udGhzO1xuICAgICAgICAgICAgICAgIGNhc2UgJ3F1YXJ0ZXInOiByZXR1cm4gbW9udGhzIC8gMztcbiAgICAgICAgICAgICAgICBjYXNlICd5ZWFyJzogICAgcmV0dXJuIG1vbnRocyAvIDEyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gaGFuZGxlIG1pbGxpc2Vjb25kcyBzZXBhcmF0ZWx5IGJlY2F1c2Ugb2YgZmxvYXRpbmcgcG9pbnQgbWF0aCBlcnJvcnMgKGlzc3VlICMxODY3KVxuICAgICAgICAgICAgZGF5cyA9IHRoaXMuX2RheXMgKyBNYXRoLnJvdW5kKG1vbnRoc1RvRGF5cyh0aGlzLl9tb250aHMpKTtcbiAgICAgICAgICAgIHN3aXRjaCAodW5pdHMpIHtcbiAgICAgICAgICAgICAgICBjYXNlICd3ZWVrJyAgIDogcmV0dXJuIGRheXMgLyA3ICAgICArIG1pbGxpc2Vjb25kcyAvIDYwNDhlNTtcbiAgICAgICAgICAgICAgICBjYXNlICdkYXknICAgIDogcmV0dXJuIGRheXMgICAgICAgICArIG1pbGxpc2Vjb25kcyAvIDg2NGU1O1xuICAgICAgICAgICAgICAgIGNhc2UgJ2hvdXInICAgOiByZXR1cm4gZGF5cyAqIDI0ICAgICsgbWlsbGlzZWNvbmRzIC8gMzZlNTtcbiAgICAgICAgICAgICAgICBjYXNlICdtaW51dGUnIDogcmV0dXJuIGRheXMgKiAxNDQwICArIG1pbGxpc2Vjb25kcyAvIDZlNDtcbiAgICAgICAgICAgICAgICBjYXNlICdzZWNvbmQnIDogcmV0dXJuIGRheXMgKiA4NjQwMCArIG1pbGxpc2Vjb25kcyAvIDEwMDA7XG4gICAgICAgICAgICAgICAgLy8gTWF0aC5mbG9vciBwcmV2ZW50cyBmbG9hdGluZyBwb2ludCBtYXRoIGVycm9ycyBoZXJlXG4gICAgICAgICAgICAgICAgY2FzZSAnbWlsbGlzZWNvbmQnOiByZXR1cm4gTWF0aC5mbG9vcihkYXlzICogODY0ZTUpICsgbWlsbGlzZWNvbmRzO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHRocm93IG5ldyBFcnJvcignVW5rbm93biB1bml0ICcgKyB1bml0cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBUT0RPOiBVc2UgdGhpcy5hcygnbXMnKT9cbiAgICBmdW5jdGlvbiB2YWx1ZU9mJDEgKCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gTmFOO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICB0aGlzLl9taWxsaXNlY29uZHMgK1xuICAgICAgICAgICAgdGhpcy5fZGF5cyAqIDg2NGU1ICtcbiAgICAgICAgICAgICh0aGlzLl9tb250aHMgJSAxMikgKiAyNTkyZTYgK1xuICAgICAgICAgICAgdG9JbnQodGhpcy5fbW9udGhzIC8gMTIpICogMzE1MzZlNlxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1ha2VBcyAoYWxpYXMpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFzKGFsaWFzKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICB2YXIgYXNNaWxsaXNlY29uZHMgPSBtYWtlQXMoJ21zJyk7XG4gICAgdmFyIGFzU2Vjb25kcyAgICAgID0gbWFrZUFzKCdzJyk7XG4gICAgdmFyIGFzTWludXRlcyAgICAgID0gbWFrZUFzKCdtJyk7XG4gICAgdmFyIGFzSG91cnMgICAgICAgID0gbWFrZUFzKCdoJyk7XG4gICAgdmFyIGFzRGF5cyAgICAgICAgID0gbWFrZUFzKCdkJyk7XG4gICAgdmFyIGFzV2Vla3MgICAgICAgID0gbWFrZUFzKCd3Jyk7XG4gICAgdmFyIGFzTW9udGhzICAgICAgID0gbWFrZUFzKCdNJyk7XG4gICAgdmFyIGFzUXVhcnRlcnMgICAgID0gbWFrZUFzKCdRJyk7XG4gICAgdmFyIGFzWWVhcnMgICAgICAgID0gbWFrZUFzKCd5Jyk7XG5cbiAgICBmdW5jdGlvbiBjbG9uZSQxICgpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUR1cmF0aW9uKHRoaXMpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldCQyICh1bml0cykge1xuICAgICAgICB1bml0cyA9IG5vcm1hbGl6ZVVuaXRzKHVuaXRzKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNWYWxpZCgpID8gdGhpc1t1bml0cyArICdzJ10oKSA6IE5hTjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYWtlR2V0dGVyKG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmlzVmFsaWQoKSA/IHRoaXMuX2RhdGFbbmFtZV0gOiBOYU47XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgdmFyIG1pbGxpc2Vjb25kcyA9IG1ha2VHZXR0ZXIoJ21pbGxpc2Vjb25kcycpO1xuICAgIHZhciBzZWNvbmRzICAgICAgPSBtYWtlR2V0dGVyKCdzZWNvbmRzJyk7XG4gICAgdmFyIG1pbnV0ZXMgICAgICA9IG1ha2VHZXR0ZXIoJ21pbnV0ZXMnKTtcbiAgICB2YXIgaG91cnMgICAgICAgID0gbWFrZUdldHRlcignaG91cnMnKTtcbiAgICB2YXIgZGF5cyAgICAgICAgID0gbWFrZUdldHRlcignZGF5cycpO1xuICAgIHZhciBtb250aHMgICAgICAgPSBtYWtlR2V0dGVyKCdtb250aHMnKTtcbiAgICB2YXIgeWVhcnMgICAgICAgID0gbWFrZUdldHRlcigneWVhcnMnKTtcblxuICAgIGZ1bmN0aW9uIHdlZWtzICgpIHtcbiAgICAgICAgcmV0dXJuIGFic0Zsb29yKHRoaXMuZGF5cygpIC8gNyk7XG4gICAgfVxuXG4gICAgdmFyIHJvdW5kID0gTWF0aC5yb3VuZDtcbiAgICB2YXIgdGhyZXNob2xkcyA9IHtcbiAgICAgICAgc3M6IDQ0LCAgICAgICAgIC8vIGEgZmV3IHNlY29uZHMgdG8gc2Vjb25kc1xuICAgICAgICBzIDogNDUsICAgICAgICAgLy8gc2Vjb25kcyB0byBtaW51dGVcbiAgICAgICAgbSA6IDQ1LCAgICAgICAgIC8vIG1pbnV0ZXMgdG8gaG91clxuICAgICAgICBoIDogMjIsICAgICAgICAgLy8gaG91cnMgdG8gZGF5XG4gICAgICAgIGQgOiAyNiwgICAgICAgICAvLyBkYXlzIHRvIG1vbnRoXG4gICAgICAgIE0gOiAxMSAgICAgICAgICAvLyBtb250aHMgdG8geWVhclxuICAgIH07XG5cbiAgICAvLyBoZWxwZXIgZnVuY3Rpb24gZm9yIG1vbWVudC5mbi5mcm9tLCBtb21lbnQuZm4uZnJvbU5vdywgYW5kIG1vbWVudC5kdXJhdGlvbi5mbi5odW1hbml6ZVxuICAgIGZ1bmN0aW9uIHN1YnN0aXR1dGVUaW1lQWdvKHN0cmluZywgbnVtYmVyLCB3aXRob3V0U3VmZml4LCBpc0Z1dHVyZSwgbG9jYWxlKSB7XG4gICAgICAgIHJldHVybiBsb2NhbGUucmVsYXRpdmVUaW1lKG51bWJlciB8fCAxLCAhIXdpdGhvdXRTdWZmaXgsIHN0cmluZywgaXNGdXR1cmUpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlbGF0aXZlVGltZSQxIChwb3NOZWdEdXJhdGlvbiwgd2l0aG91dFN1ZmZpeCwgbG9jYWxlKSB7XG4gICAgICAgIHZhciBkdXJhdGlvbiA9IGNyZWF0ZUR1cmF0aW9uKHBvc05lZ0R1cmF0aW9uKS5hYnMoKTtcbiAgICAgICAgdmFyIHNlY29uZHMgID0gcm91bmQoZHVyYXRpb24uYXMoJ3MnKSk7XG4gICAgICAgIHZhciBtaW51dGVzICA9IHJvdW5kKGR1cmF0aW9uLmFzKCdtJykpO1xuICAgICAgICB2YXIgaG91cnMgICAgPSByb3VuZChkdXJhdGlvbi5hcygnaCcpKTtcbiAgICAgICAgdmFyIGRheXMgICAgID0gcm91bmQoZHVyYXRpb24uYXMoJ2QnKSk7XG4gICAgICAgIHZhciBtb250aHMgICA9IHJvdW5kKGR1cmF0aW9uLmFzKCdNJykpO1xuICAgICAgICB2YXIgeWVhcnMgICAgPSByb3VuZChkdXJhdGlvbi5hcygneScpKTtcblxuICAgICAgICB2YXIgYSA9IHNlY29uZHMgPD0gdGhyZXNob2xkcy5zcyAmJiBbJ3MnLCBzZWNvbmRzXSAgfHxcbiAgICAgICAgICAgICAgICBzZWNvbmRzIDwgdGhyZXNob2xkcy5zICAgJiYgWydzcycsIHNlY29uZHNdIHx8XG4gICAgICAgICAgICAgICAgbWludXRlcyA8PSAxICAgICAgICAgICAgICYmIFsnbSddICAgICAgICAgICB8fFxuICAgICAgICAgICAgICAgIG1pbnV0ZXMgPCB0aHJlc2hvbGRzLm0gICAmJiBbJ21tJywgbWludXRlc10gfHxcbiAgICAgICAgICAgICAgICBob3VycyAgIDw9IDEgICAgICAgICAgICAgJiYgWydoJ10gICAgICAgICAgIHx8XG4gICAgICAgICAgICAgICAgaG91cnMgICA8IHRocmVzaG9sZHMuaCAgICYmIFsnaGgnLCBob3Vyc10gICB8fFxuICAgICAgICAgICAgICAgIGRheXMgICAgPD0gMSAgICAgICAgICAgICAmJiBbJ2QnXSAgICAgICAgICAgfHxcbiAgICAgICAgICAgICAgICBkYXlzICAgIDwgdGhyZXNob2xkcy5kICAgJiYgWydkZCcsIGRheXNdICAgIHx8XG4gICAgICAgICAgICAgICAgbW9udGhzICA8PSAxICAgICAgICAgICAgICYmIFsnTSddICAgICAgICAgICB8fFxuICAgICAgICAgICAgICAgIG1vbnRocyAgPCB0aHJlc2hvbGRzLk0gICAmJiBbJ01NJywgbW9udGhzXSAgfHxcbiAgICAgICAgICAgICAgICB5ZWFycyAgIDw9IDEgICAgICAgICAgICAgJiYgWyd5J10gICAgICAgICAgIHx8IFsneXknLCB5ZWFyc107XG5cbiAgICAgICAgYVsyXSA9IHdpdGhvdXRTdWZmaXg7XG4gICAgICAgIGFbM10gPSArcG9zTmVnRHVyYXRpb24gPiAwO1xuICAgICAgICBhWzRdID0gbG9jYWxlO1xuICAgICAgICByZXR1cm4gc3Vic3RpdHV0ZVRpbWVBZ28uYXBwbHkobnVsbCwgYSk7XG4gICAgfVxuXG4gICAgLy8gVGhpcyBmdW5jdGlvbiBhbGxvd3MgeW91IHRvIHNldCB0aGUgcm91bmRpbmcgZnVuY3Rpb24gZm9yIHJlbGF0aXZlIHRpbWUgc3RyaW5nc1xuICAgIGZ1bmN0aW9uIGdldFNldFJlbGF0aXZlVGltZVJvdW5kaW5nIChyb3VuZGluZ0Z1bmN0aW9uKSB7XG4gICAgICAgIGlmIChyb3VuZGluZ0Z1bmN0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiByb3VuZDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mKHJvdW5kaW5nRnVuY3Rpb24pID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICByb3VuZCA9IHJvdW5kaW5nRnVuY3Rpb247XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gVGhpcyBmdW5jdGlvbiBhbGxvd3MgeW91IHRvIHNldCBhIHRocmVzaG9sZCBmb3IgcmVsYXRpdmUgdGltZSBzdHJpbmdzXG4gICAgZnVuY3Rpb24gZ2V0U2V0UmVsYXRpdmVUaW1lVGhyZXNob2xkICh0aHJlc2hvbGQsIGxpbWl0KSB7XG4gICAgICAgIGlmICh0aHJlc2hvbGRzW3RocmVzaG9sZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsaW1pdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhyZXNob2xkc1t0aHJlc2hvbGRdO1xuICAgICAgICB9XG4gICAgICAgIHRocmVzaG9sZHNbdGhyZXNob2xkXSA9IGxpbWl0O1xuICAgICAgICBpZiAodGhyZXNob2xkID09PSAncycpIHtcbiAgICAgICAgICAgIHRocmVzaG9sZHMuc3MgPSBsaW1pdCAtIDE7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaHVtYW5pemUgKHdpdGhTdWZmaXgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLmludmFsaWREYXRlKCk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgbG9jYWxlID0gdGhpcy5sb2NhbGVEYXRhKCk7XG4gICAgICAgIHZhciBvdXRwdXQgPSByZWxhdGl2ZVRpbWUkMSh0aGlzLCAhd2l0aFN1ZmZpeCwgbG9jYWxlKTtcblxuICAgICAgICBpZiAod2l0aFN1ZmZpeCkge1xuICAgICAgICAgICAgb3V0cHV0ID0gbG9jYWxlLnBhc3RGdXR1cmUoK3RoaXMsIG91dHB1dCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbG9jYWxlLnBvc3Rmb3JtYXQob3V0cHV0KTtcbiAgICB9XG5cbiAgICB2YXIgYWJzJDEgPSBNYXRoLmFicztcblxuICAgIGZ1bmN0aW9uIHNpZ24oeCkge1xuICAgICAgICByZXR1cm4gKCh4ID4gMCkgLSAoeCA8IDApKSB8fCAreDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0b0lTT1N0cmluZyQxKCkge1xuICAgICAgICAvLyBmb3IgSVNPIHN0cmluZ3Mgd2UgZG8gbm90IHVzZSB0aGUgbm9ybWFsIGJ1YmJsaW5nIHJ1bGVzOlxuICAgICAgICAvLyAgKiBtaWxsaXNlY29uZHMgYnViYmxlIHVwIHVudGlsIHRoZXkgYmVjb21lIGhvdXJzXG4gICAgICAgIC8vICAqIGRheXMgZG8gbm90IGJ1YmJsZSBhdCBhbGxcbiAgICAgICAgLy8gICogbW9udGhzIGJ1YmJsZSB1cCB1bnRpbCB0aGV5IGJlY29tZSB5ZWFyc1xuICAgICAgICAvLyBUaGlzIGlzIGJlY2F1c2UgdGhlcmUgaXMgbm8gY29udGV4dC1mcmVlIGNvbnZlcnNpb24gYmV0d2VlbiBob3VycyBhbmQgZGF5c1xuICAgICAgICAvLyAodGhpbmsgb2YgY2xvY2sgY2hhbmdlcylcbiAgICAgICAgLy8gYW5kIGFsc28gbm90IGJldHdlZW4gZGF5cyBhbmQgbW9udGhzICgyOC0zMSBkYXlzIHBlciBtb250aClcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLmludmFsaWREYXRlKCk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgc2Vjb25kcyA9IGFicyQxKHRoaXMuX21pbGxpc2Vjb25kcykgLyAxMDAwO1xuICAgICAgICB2YXIgZGF5cyAgICAgICAgID0gYWJzJDEodGhpcy5fZGF5cyk7XG4gICAgICAgIHZhciBtb250aHMgICAgICAgPSBhYnMkMSh0aGlzLl9tb250aHMpO1xuICAgICAgICB2YXIgbWludXRlcywgaG91cnMsIHllYXJzO1xuXG4gICAgICAgIC8vIDM2MDAgc2Vjb25kcyAtPiA2MCBtaW51dGVzIC0+IDEgaG91clxuICAgICAgICBtaW51dGVzICAgICAgICAgICA9IGFic0Zsb29yKHNlY29uZHMgLyA2MCk7XG4gICAgICAgIGhvdXJzICAgICAgICAgICAgID0gYWJzRmxvb3IobWludXRlcyAvIDYwKTtcbiAgICAgICAgc2Vjb25kcyAlPSA2MDtcbiAgICAgICAgbWludXRlcyAlPSA2MDtcblxuICAgICAgICAvLyAxMiBtb250aHMgLT4gMSB5ZWFyXG4gICAgICAgIHllYXJzICA9IGFic0Zsb29yKG1vbnRocyAvIDEyKTtcbiAgICAgICAgbW9udGhzICU9IDEyO1xuXG5cbiAgICAgICAgLy8gaW5zcGlyZWQgYnkgaHR0cHM6Ly9naXRodWIuY29tL2RvcmRpbGxlL21vbWVudC1pc29kdXJhdGlvbi9ibG9iL21hc3Rlci9tb21lbnQuaXNvZHVyYXRpb24uanNcbiAgICAgICAgdmFyIFkgPSB5ZWFycztcbiAgICAgICAgdmFyIE0gPSBtb250aHM7XG4gICAgICAgIHZhciBEID0gZGF5cztcbiAgICAgICAgdmFyIGggPSBob3VycztcbiAgICAgICAgdmFyIG0gPSBtaW51dGVzO1xuICAgICAgICB2YXIgcyA9IHNlY29uZHMgPyBzZWNvbmRzLnRvRml4ZWQoMykucmVwbGFjZSgvXFwuPzArJC8sICcnKSA6ICcnO1xuICAgICAgICB2YXIgdG90YWwgPSB0aGlzLmFzU2Vjb25kcygpO1xuXG4gICAgICAgIGlmICghdG90YWwpIHtcbiAgICAgICAgICAgIC8vIHRoaXMgaXMgdGhlIHNhbWUgYXMgQyMncyAoTm9kYSkgYW5kIHB5dGhvbiAoaXNvZGF0ZSkuLi5cbiAgICAgICAgICAgIC8vIGJ1dCBub3Qgb3RoZXIgSlMgKGdvb2cuZGF0ZSlcbiAgICAgICAgICAgIHJldHVybiAnUDBEJztcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciB0b3RhbFNpZ24gPSB0b3RhbCA8IDAgPyAnLScgOiAnJztcbiAgICAgICAgdmFyIHltU2lnbiA9IHNpZ24odGhpcy5fbW9udGhzKSAhPT0gc2lnbih0b3RhbCkgPyAnLScgOiAnJztcbiAgICAgICAgdmFyIGRheXNTaWduID0gc2lnbih0aGlzLl9kYXlzKSAhPT0gc2lnbih0b3RhbCkgPyAnLScgOiAnJztcbiAgICAgICAgdmFyIGhtc1NpZ24gPSBzaWduKHRoaXMuX21pbGxpc2Vjb25kcykgIT09IHNpZ24odG90YWwpID8gJy0nIDogJyc7XG5cbiAgICAgICAgcmV0dXJuIHRvdGFsU2lnbiArICdQJyArXG4gICAgICAgICAgICAoWSA/IHltU2lnbiArIFkgKyAnWScgOiAnJykgK1xuICAgICAgICAgICAgKE0gPyB5bVNpZ24gKyBNICsgJ00nIDogJycpICtcbiAgICAgICAgICAgIChEID8gZGF5c1NpZ24gKyBEICsgJ0QnIDogJycpICtcbiAgICAgICAgICAgICgoaCB8fCBtIHx8IHMpID8gJ1QnIDogJycpICtcbiAgICAgICAgICAgIChoID8gaG1zU2lnbiArIGggKyAnSCcgOiAnJykgK1xuICAgICAgICAgICAgKG0gPyBobXNTaWduICsgbSArICdNJyA6ICcnKSArXG4gICAgICAgICAgICAocyA/IGhtc1NpZ24gKyBzICsgJ1MnIDogJycpO1xuICAgIH1cblxuICAgIHZhciBwcm90byQyID0gRHVyYXRpb24ucHJvdG90eXBlO1xuXG4gICAgcHJvdG8kMi5pc1ZhbGlkICAgICAgICA9IGlzVmFsaWQkMTtcbiAgICBwcm90byQyLmFicyAgICAgICAgICAgID0gYWJzO1xuICAgIHByb3RvJDIuYWRkICAgICAgICAgICAgPSBhZGQkMTtcbiAgICBwcm90byQyLnN1YnRyYWN0ICAgICAgID0gc3VidHJhY3QkMTtcbiAgICBwcm90byQyLmFzICAgICAgICAgICAgID0gYXM7XG4gICAgcHJvdG8kMi5hc01pbGxpc2Vjb25kcyA9IGFzTWlsbGlzZWNvbmRzO1xuICAgIHByb3RvJDIuYXNTZWNvbmRzICAgICAgPSBhc1NlY29uZHM7XG4gICAgcHJvdG8kMi5hc01pbnV0ZXMgICAgICA9IGFzTWludXRlcztcbiAgICBwcm90byQyLmFzSG91cnMgICAgICAgID0gYXNIb3VycztcbiAgICBwcm90byQyLmFzRGF5cyAgICAgICAgID0gYXNEYXlzO1xuICAgIHByb3RvJDIuYXNXZWVrcyAgICAgICAgPSBhc1dlZWtzO1xuICAgIHByb3RvJDIuYXNNb250aHMgICAgICAgPSBhc01vbnRocztcbiAgICBwcm90byQyLmFzUXVhcnRlcnMgICAgID0gYXNRdWFydGVycztcbiAgICBwcm90byQyLmFzWWVhcnMgICAgICAgID0gYXNZZWFycztcbiAgICBwcm90byQyLnZhbHVlT2YgICAgICAgID0gdmFsdWVPZiQxO1xuICAgIHByb3RvJDIuX2J1YmJsZSAgICAgICAgPSBidWJibGU7XG4gICAgcHJvdG8kMi5jbG9uZSAgICAgICAgICA9IGNsb25lJDE7XG4gICAgcHJvdG8kMi5nZXQgICAgICAgICAgICA9IGdldCQyO1xuICAgIHByb3RvJDIubWlsbGlzZWNvbmRzICAgPSBtaWxsaXNlY29uZHM7XG4gICAgcHJvdG8kMi5zZWNvbmRzICAgICAgICA9IHNlY29uZHM7XG4gICAgcHJvdG8kMi5taW51dGVzICAgICAgICA9IG1pbnV0ZXM7XG4gICAgcHJvdG8kMi5ob3VycyAgICAgICAgICA9IGhvdXJzO1xuICAgIHByb3RvJDIuZGF5cyAgICAgICAgICAgPSBkYXlzO1xuICAgIHByb3RvJDIud2Vla3MgICAgICAgICAgPSB3ZWVrcztcbiAgICBwcm90byQyLm1vbnRocyAgICAgICAgID0gbW9udGhzO1xuICAgIHByb3RvJDIueWVhcnMgICAgICAgICAgPSB5ZWFycztcbiAgICBwcm90byQyLmh1bWFuaXplICAgICAgID0gaHVtYW5pemU7XG4gICAgcHJvdG8kMi50b0lTT1N0cmluZyAgICA9IHRvSVNPU3RyaW5nJDE7XG4gICAgcHJvdG8kMi50b1N0cmluZyAgICAgICA9IHRvSVNPU3RyaW5nJDE7XG4gICAgcHJvdG8kMi50b0pTT04gICAgICAgICA9IHRvSVNPU3RyaW5nJDE7XG4gICAgcHJvdG8kMi5sb2NhbGUgICAgICAgICA9IGxvY2FsZTtcbiAgICBwcm90byQyLmxvY2FsZURhdGEgICAgID0gbG9jYWxlRGF0YTtcblxuICAgIHByb3RvJDIudG9Jc29TdHJpbmcgPSBkZXByZWNhdGUoJ3RvSXNvU3RyaW5nKCkgaXMgZGVwcmVjYXRlZC4gUGxlYXNlIHVzZSB0b0lTT1N0cmluZygpIGluc3RlYWQgKG5vdGljZSB0aGUgY2FwaXRhbHMpJywgdG9JU09TdHJpbmckMSk7XG4gICAgcHJvdG8kMi5sYW5nID0gbGFuZztcblxuICAgIC8vIFNpZGUgZWZmZWN0IGltcG9ydHNcblxuICAgIC8vIEZPUk1BVFRJTkdcblxuICAgIGFkZEZvcm1hdFRva2VuKCdYJywgMCwgMCwgJ3VuaXgnKTtcbiAgICBhZGRGb3JtYXRUb2tlbigneCcsIDAsIDAsICd2YWx1ZU9mJyk7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCd4JywgbWF0Y2hTaWduZWQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ1gnLCBtYXRjaFRpbWVzdGFtcCk7XG4gICAgYWRkUGFyc2VUb2tlbignWCcsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZykge1xuICAgICAgICBjb25maWcuX2QgPSBuZXcgRGF0ZShwYXJzZUZsb2F0KGlucHV0LCAxMCkgKiAxMDAwKTtcbiAgICB9KTtcbiAgICBhZGRQYXJzZVRva2VuKCd4JywgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnKSB7XG4gICAgICAgIGNvbmZpZy5fZCA9IG5ldyBEYXRlKHRvSW50KGlucHV0KSk7XG4gICAgfSk7XG5cbiAgICAvLyBTaWRlIGVmZmVjdCBpbXBvcnRzXG5cblxuICAgIGhvb2tzLnZlcnNpb24gPSAnMi4yNC4wJztcblxuICAgIHNldEhvb2tDYWxsYmFjayhjcmVhdGVMb2NhbCk7XG5cbiAgICBob29rcy5mbiAgICAgICAgICAgICAgICAgICAgPSBwcm90bztcbiAgICBob29rcy5taW4gICAgICAgICAgICAgICAgICAgPSBtaW47XG4gICAgaG9va3MubWF4ICAgICAgICAgICAgICAgICAgID0gbWF4O1xuICAgIGhvb2tzLm5vdyAgICAgICAgICAgICAgICAgICA9IG5vdztcbiAgICBob29rcy51dGMgICAgICAgICAgICAgICAgICAgPSBjcmVhdGVVVEM7XG4gICAgaG9va3MudW5peCAgICAgICAgICAgICAgICAgID0gY3JlYXRlVW5peDtcbiAgICBob29rcy5tb250aHMgICAgICAgICAgICAgICAgPSBsaXN0TW9udGhzO1xuICAgIGhvb2tzLmlzRGF0ZSAgICAgICAgICAgICAgICA9IGlzRGF0ZTtcbiAgICBob29rcy5sb2NhbGUgICAgICAgICAgICAgICAgPSBnZXRTZXRHbG9iYWxMb2NhbGU7XG4gICAgaG9va3MuaW52YWxpZCAgICAgICAgICAgICAgID0gY3JlYXRlSW52YWxpZDtcbiAgICBob29rcy5kdXJhdGlvbiAgICAgICAgICAgICAgPSBjcmVhdGVEdXJhdGlvbjtcbiAgICBob29rcy5pc01vbWVudCAgICAgICAgICAgICAgPSBpc01vbWVudDtcbiAgICBob29rcy53ZWVrZGF5cyAgICAgICAgICAgICAgPSBsaXN0V2Vla2RheXM7XG4gICAgaG9va3MucGFyc2Vab25lICAgICAgICAgICAgID0gY3JlYXRlSW5ab25lO1xuICAgIGhvb2tzLmxvY2FsZURhdGEgICAgICAgICAgICA9IGdldExvY2FsZTtcbiAgICBob29rcy5pc0R1cmF0aW9uICAgICAgICAgICAgPSBpc0R1cmF0aW9uO1xuICAgIGhvb2tzLm1vbnRoc1Nob3J0ICAgICAgICAgICA9IGxpc3RNb250aHNTaG9ydDtcbiAgICBob29rcy53ZWVrZGF5c01pbiAgICAgICAgICAgPSBsaXN0V2Vla2RheXNNaW47XG4gICAgaG9va3MuZGVmaW5lTG9jYWxlICAgICAgICAgID0gZGVmaW5lTG9jYWxlO1xuICAgIGhvb2tzLnVwZGF0ZUxvY2FsZSAgICAgICAgICA9IHVwZGF0ZUxvY2FsZTtcbiAgICBob29rcy5sb2NhbGVzICAgICAgICAgICAgICAgPSBsaXN0TG9jYWxlcztcbiAgICBob29rcy53ZWVrZGF5c1Nob3J0ICAgICAgICAgPSBsaXN0V2Vla2RheXNTaG9ydDtcbiAgICBob29rcy5ub3JtYWxpemVVbml0cyAgICAgICAgPSBub3JtYWxpemVVbml0cztcbiAgICBob29rcy5yZWxhdGl2ZVRpbWVSb3VuZGluZyAgPSBnZXRTZXRSZWxhdGl2ZVRpbWVSb3VuZGluZztcbiAgICBob29rcy5yZWxhdGl2ZVRpbWVUaHJlc2hvbGQgPSBnZXRTZXRSZWxhdGl2ZVRpbWVUaHJlc2hvbGQ7XG4gICAgaG9va3MuY2FsZW5kYXJGb3JtYXQgICAgICAgID0gZ2V0Q2FsZW5kYXJGb3JtYXQ7XG4gICAgaG9va3MucHJvdG90eXBlICAgICAgICAgICAgID0gcHJvdG87XG5cbiAgICAvLyBjdXJyZW50bHkgSFRNTDUgaW5wdXQgdHlwZSBvbmx5IHN1cHBvcnRzIDI0LWhvdXIgZm9ybWF0c1xuICAgIGhvb2tzLkhUTUw1X0ZNVCA9IHtcbiAgICAgICAgREFURVRJTUVfTE9DQUw6ICdZWVlZLU1NLUREVEhIOm1tJywgICAgICAgICAgICAgLy8gPGlucHV0IHR5cGU9XCJkYXRldGltZS1sb2NhbFwiIC8+XG4gICAgICAgIERBVEVUSU1FX0xPQ0FMX1NFQ09ORFM6ICdZWVlZLU1NLUREVEhIOm1tOnNzJywgIC8vIDxpbnB1dCB0eXBlPVwiZGF0ZXRpbWUtbG9jYWxcIiBzdGVwPVwiMVwiIC8+XG4gICAgICAgIERBVEVUSU1FX0xPQ0FMX01TOiAnWVlZWS1NTS1ERFRISDptbTpzcy5TU1MnLCAgIC8vIDxpbnB1dCB0eXBlPVwiZGF0ZXRpbWUtbG9jYWxcIiBzdGVwPVwiMC4wMDFcIiAvPlxuICAgICAgICBEQVRFOiAnWVlZWS1NTS1ERCcsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyA8aW5wdXQgdHlwZT1cImRhdGVcIiAvPlxuICAgICAgICBUSU1FOiAnSEg6bW0nLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyA8aW5wdXQgdHlwZT1cInRpbWVcIiAvPlxuICAgICAgICBUSU1FX1NFQ09ORFM6ICdISDptbTpzcycsICAgICAgICAgICAgICAgICAgICAgICAvLyA8aW5wdXQgdHlwZT1cInRpbWVcIiBzdGVwPVwiMVwiIC8+XG4gICAgICAgIFRJTUVfTVM6ICdISDptbTpzcy5TU1MnLCAgICAgICAgICAgICAgICAgICAgICAgIC8vIDxpbnB1dCB0eXBlPVwidGltZVwiIHN0ZXA9XCIwLjAwMVwiIC8+XG4gICAgICAgIFdFRUs6ICdHR0dHLVtXXVdXJywgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDxpbnB1dCB0eXBlPVwid2Vla1wiIC8+XG4gICAgICAgIE1PTlRIOiAnWVlZWS1NTScgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDxpbnB1dCB0eXBlPVwibW9udGhcIiAvPlxuICAgIH07XG5cbiAgICByZXR1cm4gaG9va3M7XG5cbn0pKSk7XG4iLCIvKiFcbiAqIG11c3RhY2hlLmpzIC0gTG9naWMtbGVzcyB7e211c3RhY2hlfX0gdGVtcGxhdGVzIHdpdGggSmF2YVNjcmlwdFxuICogaHR0cDovL2dpdGh1Yi5jb20vamFubC9tdXN0YWNoZS5qc1xuICovXG5cbi8qZ2xvYmFsIGRlZmluZTogZmFsc2UgTXVzdGFjaGU6IHRydWUqL1xuXG4oZnVuY3Rpb24gZGVmaW5lTXVzdGFjaGUgKGdsb2JhbCwgZmFjdG9yeSkge1xuICBpZiAodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIGV4cG9ydHMgJiYgdHlwZW9mIGV4cG9ydHMubm9kZU5hbWUgIT09ICdzdHJpbmcnKSB7XG4gICAgZmFjdG9yeShleHBvcnRzKTsgLy8gQ29tbW9uSlNcbiAgfSBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpIHtcbiAgICBkZWZpbmUoWydleHBvcnRzJ10sIGZhY3RvcnkpOyAvLyBBTURcbiAgfSBlbHNlIHtcbiAgICBnbG9iYWwuTXVzdGFjaGUgPSB7fTtcbiAgICBmYWN0b3J5KGdsb2JhbC5NdXN0YWNoZSk7IC8vIHNjcmlwdCwgd3NoLCBhc3BcbiAgfVxufSh0aGlzLCBmdW5jdGlvbiBtdXN0YWNoZUZhY3RvcnkgKG11c3RhY2hlKSB7XG5cbiAgdmFyIG9iamVjdFRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcbiAgdmFyIGlzQXJyYXkgPSBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uIGlzQXJyYXlQb2x5ZmlsbCAob2JqZWN0KSB7XG4gICAgcmV0dXJuIG9iamVjdFRvU3RyaW5nLmNhbGwob2JqZWN0KSA9PT0gJ1tvYmplY3QgQXJyYXldJztcbiAgfTtcblxuICBmdW5jdGlvbiBpc0Z1bmN0aW9uIChvYmplY3QpIHtcbiAgICByZXR1cm4gdHlwZW9mIG9iamVjdCA9PT0gJ2Z1bmN0aW9uJztcbiAgfVxuXG4gIC8qKlxuICAgKiBNb3JlIGNvcnJlY3QgdHlwZW9mIHN0cmluZyBoYW5kbGluZyBhcnJheVxuICAgKiB3aGljaCBub3JtYWxseSByZXR1cm5zIHR5cGVvZiAnb2JqZWN0J1xuICAgKi9cbiAgZnVuY3Rpb24gdHlwZVN0ciAob2JqKSB7XG4gICAgcmV0dXJuIGlzQXJyYXkob2JqKSA/ICdhcnJheScgOiB0eXBlb2Ygb2JqO1xuICB9XG5cbiAgZnVuY3Rpb24gZXNjYXBlUmVnRXhwIChzdHJpbmcpIHtcbiAgICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoL1tcXC1cXFtcXF17fSgpKis/LixcXFxcXFxeJHwjXFxzXS9nLCAnXFxcXCQmJyk7XG4gIH1cblxuICAvKipcbiAgICogTnVsbCBzYWZlIHdheSBvZiBjaGVja2luZyB3aGV0aGVyIG9yIG5vdCBhbiBvYmplY3QsXG4gICAqIGluY2x1ZGluZyBpdHMgcHJvdG90eXBlLCBoYXMgYSBnaXZlbiBwcm9wZXJ0eVxuICAgKi9cbiAgZnVuY3Rpb24gaGFzUHJvcGVydHkgKG9iaiwgcHJvcE5hbWUpIHtcbiAgICByZXR1cm4gb2JqICE9IG51bGwgJiYgdHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgKHByb3BOYW1lIGluIG9iaik7XG4gIH1cblxuICAvLyBXb3JrYXJvdW5kIGZvciBodHRwczovL2lzc3Vlcy5hcGFjaGUub3JnL2ppcmEvYnJvd3NlL0NPVUNIREItNTc3XG4gIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vamFubC9tdXN0YWNoZS5qcy9pc3N1ZXMvMTg5XG4gIHZhciByZWdFeHBUZXN0ID0gUmVnRXhwLnByb3RvdHlwZS50ZXN0O1xuICBmdW5jdGlvbiB0ZXN0UmVnRXhwIChyZSwgc3RyaW5nKSB7XG4gICAgcmV0dXJuIHJlZ0V4cFRlc3QuY2FsbChyZSwgc3RyaW5nKTtcbiAgfVxuXG4gIHZhciBub25TcGFjZVJlID0gL1xcUy87XG4gIGZ1bmN0aW9uIGlzV2hpdGVzcGFjZSAoc3RyaW5nKSB7XG4gICAgcmV0dXJuICF0ZXN0UmVnRXhwKG5vblNwYWNlUmUsIHN0cmluZyk7XG4gIH1cblxuICB2YXIgZW50aXR5TWFwID0ge1xuICAgICcmJzogJyZhbXA7JyxcbiAgICAnPCc6ICcmbHQ7JyxcbiAgICAnPic6ICcmZ3Q7JyxcbiAgICAnXCInOiAnJnF1b3Q7JyxcbiAgICBcIidcIjogJyYjMzk7JyxcbiAgICAnLyc6ICcmI3gyRjsnLFxuICAgICdgJzogJyYjeDYwOycsXG4gICAgJz0nOiAnJiN4M0Q7J1xuICB9O1xuXG4gIGZ1bmN0aW9uIGVzY2FwZUh0bWwgKHN0cmluZykge1xuICAgIHJldHVybiBTdHJpbmcoc3RyaW5nKS5yZXBsYWNlKC9bJjw+XCInYD1cXC9dL2csIGZ1bmN0aW9uIGZyb21FbnRpdHlNYXAgKHMpIHtcbiAgICAgIHJldHVybiBlbnRpdHlNYXBbc107XG4gICAgfSk7XG4gIH1cblxuICB2YXIgd2hpdGVSZSA9IC9cXHMqLztcbiAgdmFyIHNwYWNlUmUgPSAvXFxzKy87XG4gIHZhciBlcXVhbHNSZSA9IC9cXHMqPS87XG4gIHZhciBjdXJseVJlID0gL1xccypcXH0vO1xuICB2YXIgdGFnUmUgPSAvI3xcXF58XFwvfD58XFx7fCZ8PXwhLztcblxuICAvKipcbiAgICogQnJlYWtzIHVwIHRoZSBnaXZlbiBgdGVtcGxhdGVgIHN0cmluZyBpbnRvIGEgdHJlZSBvZiB0b2tlbnMuIElmIHRoZSBgdGFnc2BcbiAgICogYXJndW1lbnQgaXMgZ2l2ZW4gaGVyZSBpdCBtdXN0IGJlIGFuIGFycmF5IHdpdGggdHdvIHN0cmluZyB2YWx1ZXM6IHRoZVxuICAgKiBvcGVuaW5nIGFuZCBjbG9zaW5nIHRhZ3MgdXNlZCBpbiB0aGUgdGVtcGxhdGUgKGUuZy4gWyBcIjwlXCIsIFwiJT5cIiBdKS4gT2ZcbiAgICogY291cnNlLCB0aGUgZGVmYXVsdCBpcyB0byB1c2UgbXVzdGFjaGVzIChpLmUuIG11c3RhY2hlLnRhZ3MpLlxuICAgKlxuICAgKiBBIHRva2VuIGlzIGFuIGFycmF5IHdpdGggYXQgbGVhc3QgNCBlbGVtZW50cy4gVGhlIGZpcnN0IGVsZW1lbnQgaXMgdGhlXG4gICAqIG11c3RhY2hlIHN5bWJvbCB0aGF0IHdhcyB1c2VkIGluc2lkZSB0aGUgdGFnLCBlLmcuIFwiI1wiIG9yIFwiJlwiLiBJZiB0aGUgdGFnXG4gICAqIGRpZCBub3QgY29udGFpbiBhIHN5bWJvbCAoaS5lLiB7e215VmFsdWV9fSkgdGhpcyBlbGVtZW50IGlzIFwibmFtZVwiLiBGb3JcbiAgICogYWxsIHRleHQgdGhhdCBhcHBlYXJzIG91dHNpZGUgYSBzeW1ib2wgdGhpcyBlbGVtZW50IGlzIFwidGV4dFwiLlxuICAgKlxuICAgKiBUaGUgc2Vjb25kIGVsZW1lbnQgb2YgYSB0b2tlbiBpcyBpdHMgXCJ2YWx1ZVwiLiBGb3IgbXVzdGFjaGUgdGFncyB0aGlzIGlzXG4gICAqIHdoYXRldmVyIGVsc2Ugd2FzIGluc2lkZSB0aGUgdGFnIGJlc2lkZXMgdGhlIG9wZW5pbmcgc3ltYm9sLiBGb3IgdGV4dCB0b2tlbnNcbiAgICogdGhpcyBpcyB0aGUgdGV4dCBpdHNlbGYuXG4gICAqXG4gICAqIFRoZSB0aGlyZCBhbmQgZm91cnRoIGVsZW1lbnRzIG9mIHRoZSB0b2tlbiBhcmUgdGhlIHN0YXJ0IGFuZCBlbmQgaW5kaWNlcyxcbiAgICogcmVzcGVjdGl2ZWx5LCBvZiB0aGUgdG9rZW4gaW4gdGhlIG9yaWdpbmFsIHRlbXBsYXRlLlxuICAgKlxuICAgKiBUb2tlbnMgdGhhdCBhcmUgdGhlIHJvb3Qgbm9kZSBvZiBhIHN1YnRyZWUgY29udGFpbiB0d28gbW9yZSBlbGVtZW50czogMSkgYW5cbiAgICogYXJyYXkgb2YgdG9rZW5zIGluIHRoZSBzdWJ0cmVlIGFuZCAyKSB0aGUgaW5kZXggaW4gdGhlIG9yaWdpbmFsIHRlbXBsYXRlIGF0XG4gICAqIHdoaWNoIHRoZSBjbG9zaW5nIHRhZyBmb3IgdGhhdCBzZWN0aW9uIGJlZ2lucy5cbiAgICovXG4gIGZ1bmN0aW9uIHBhcnNlVGVtcGxhdGUgKHRlbXBsYXRlLCB0YWdzKSB7XG4gICAgaWYgKCF0ZW1wbGF0ZSlcbiAgICAgIHJldHVybiBbXTtcblxuICAgIHZhciBzZWN0aW9ucyA9IFtdOyAgICAgLy8gU3RhY2sgdG8gaG9sZCBzZWN0aW9uIHRva2Vuc1xuICAgIHZhciB0b2tlbnMgPSBbXTsgICAgICAgLy8gQnVmZmVyIHRvIGhvbGQgdGhlIHRva2Vuc1xuICAgIHZhciBzcGFjZXMgPSBbXTsgICAgICAgLy8gSW5kaWNlcyBvZiB3aGl0ZXNwYWNlIHRva2VucyBvbiB0aGUgY3VycmVudCBsaW5lXG4gICAgdmFyIGhhc1RhZyA9IGZhbHNlOyAgICAvLyBJcyB0aGVyZSBhIHt7dGFnfX0gb24gdGhlIGN1cnJlbnQgbGluZT9cbiAgICB2YXIgbm9uU3BhY2UgPSBmYWxzZTsgIC8vIElzIHRoZXJlIGEgbm9uLXNwYWNlIGNoYXIgb24gdGhlIGN1cnJlbnQgbGluZT9cblxuICAgIC8vIFN0cmlwcyBhbGwgd2hpdGVzcGFjZSB0b2tlbnMgYXJyYXkgZm9yIHRoZSBjdXJyZW50IGxpbmVcbiAgICAvLyBpZiB0aGVyZSB3YXMgYSB7eyN0YWd9fSBvbiBpdCBhbmQgb3RoZXJ3aXNlIG9ubHkgc3BhY2UuXG4gICAgZnVuY3Rpb24gc3RyaXBTcGFjZSAoKSB7XG4gICAgICBpZiAoaGFzVGFnICYmICFub25TcGFjZSkge1xuICAgICAgICB3aGlsZSAoc3BhY2VzLmxlbmd0aClcbiAgICAgICAgICBkZWxldGUgdG9rZW5zW3NwYWNlcy5wb3AoKV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzcGFjZXMgPSBbXTtcbiAgICAgIH1cblxuICAgICAgaGFzVGFnID0gZmFsc2U7XG4gICAgICBub25TcGFjZSA9IGZhbHNlO1xuICAgIH1cblxuICAgIHZhciBvcGVuaW5nVGFnUmUsIGNsb3NpbmdUYWdSZSwgY2xvc2luZ0N1cmx5UmU7XG4gICAgZnVuY3Rpb24gY29tcGlsZVRhZ3MgKHRhZ3NUb0NvbXBpbGUpIHtcbiAgICAgIGlmICh0eXBlb2YgdGFnc1RvQ29tcGlsZSA9PT0gJ3N0cmluZycpXG4gICAgICAgIHRhZ3NUb0NvbXBpbGUgPSB0YWdzVG9Db21waWxlLnNwbGl0KHNwYWNlUmUsIDIpO1xuXG4gICAgICBpZiAoIWlzQXJyYXkodGFnc1RvQ29tcGlsZSkgfHwgdGFnc1RvQ29tcGlsZS5sZW5ndGggIT09IDIpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCB0YWdzOiAnICsgdGFnc1RvQ29tcGlsZSk7XG5cbiAgICAgIG9wZW5pbmdUYWdSZSA9IG5ldyBSZWdFeHAoZXNjYXBlUmVnRXhwKHRhZ3NUb0NvbXBpbGVbMF0pICsgJ1xcXFxzKicpO1xuICAgICAgY2xvc2luZ1RhZ1JlID0gbmV3IFJlZ0V4cCgnXFxcXHMqJyArIGVzY2FwZVJlZ0V4cCh0YWdzVG9Db21waWxlWzFdKSk7XG4gICAgICBjbG9zaW5nQ3VybHlSZSA9IG5ldyBSZWdFeHAoJ1xcXFxzKicgKyBlc2NhcGVSZWdFeHAoJ30nICsgdGFnc1RvQ29tcGlsZVsxXSkpO1xuICAgIH1cblxuICAgIGNvbXBpbGVUYWdzKHRhZ3MgfHwgbXVzdGFjaGUudGFncyk7XG5cbiAgICB2YXIgc2Nhbm5lciA9IG5ldyBTY2FubmVyKHRlbXBsYXRlKTtcblxuICAgIHZhciBzdGFydCwgdHlwZSwgdmFsdWUsIGNociwgdG9rZW4sIG9wZW5TZWN0aW9uO1xuICAgIHdoaWxlICghc2Nhbm5lci5lb3MoKSkge1xuICAgICAgc3RhcnQgPSBzY2FubmVyLnBvcztcblxuICAgICAgLy8gTWF0Y2ggYW55IHRleHQgYmV0d2VlbiB0YWdzLlxuICAgICAgdmFsdWUgPSBzY2FubmVyLnNjYW5VbnRpbChvcGVuaW5nVGFnUmUpO1xuXG4gICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIHZhbHVlTGVuZ3RoID0gdmFsdWUubGVuZ3RoOyBpIDwgdmFsdWVMZW5ndGg7ICsraSkge1xuICAgICAgICAgIGNociA9IHZhbHVlLmNoYXJBdChpKTtcblxuICAgICAgICAgIGlmIChpc1doaXRlc3BhY2UoY2hyKSkge1xuICAgICAgICAgICAgc3BhY2VzLnB1c2godG9rZW5zLmxlbmd0aCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG5vblNwYWNlID0gdHJ1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0b2tlbnMucHVzaChbICd0ZXh0JywgY2hyLCBzdGFydCwgc3RhcnQgKyAxIF0pO1xuICAgICAgICAgIHN0YXJ0ICs9IDE7XG5cbiAgICAgICAgICAvLyBDaGVjayBmb3Igd2hpdGVzcGFjZSBvbiB0aGUgY3VycmVudCBsaW5lLlxuICAgICAgICAgIGlmIChjaHIgPT09ICdcXG4nKVxuICAgICAgICAgICAgc3RyaXBTcGFjZSgpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIE1hdGNoIHRoZSBvcGVuaW5nIHRhZy5cbiAgICAgIGlmICghc2Nhbm5lci5zY2FuKG9wZW5pbmdUYWdSZSkpXG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBoYXNUYWcgPSB0cnVlO1xuXG4gICAgICAvLyBHZXQgdGhlIHRhZyB0eXBlLlxuICAgICAgdHlwZSA9IHNjYW5uZXIuc2Nhbih0YWdSZSkgfHwgJ25hbWUnO1xuICAgICAgc2Nhbm5lci5zY2FuKHdoaXRlUmUpO1xuXG4gICAgICAvLyBHZXQgdGhlIHRhZyB2YWx1ZS5cbiAgICAgIGlmICh0eXBlID09PSAnPScpIHtcbiAgICAgICAgdmFsdWUgPSBzY2FubmVyLnNjYW5VbnRpbChlcXVhbHNSZSk7XG4gICAgICAgIHNjYW5uZXIuc2NhbihlcXVhbHNSZSk7XG4gICAgICAgIHNjYW5uZXIuc2NhblVudGlsKGNsb3NpbmdUYWdSZSk7XG4gICAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICd7Jykge1xuICAgICAgICB2YWx1ZSA9IHNjYW5uZXIuc2NhblVudGlsKGNsb3NpbmdDdXJseVJlKTtcbiAgICAgICAgc2Nhbm5lci5zY2FuKGN1cmx5UmUpO1xuICAgICAgICBzY2FubmVyLnNjYW5VbnRpbChjbG9zaW5nVGFnUmUpO1xuICAgICAgICB0eXBlID0gJyYnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFsdWUgPSBzY2FubmVyLnNjYW5VbnRpbChjbG9zaW5nVGFnUmUpO1xuICAgICAgfVxuXG4gICAgICAvLyBNYXRjaCB0aGUgY2xvc2luZyB0YWcuXG4gICAgICBpZiAoIXNjYW5uZXIuc2NhbihjbG9zaW5nVGFnUmUpKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuY2xvc2VkIHRhZyBhdCAnICsgc2Nhbm5lci5wb3MpO1xuXG4gICAgICB0b2tlbiA9IFsgdHlwZSwgdmFsdWUsIHN0YXJ0LCBzY2FubmVyLnBvcyBdO1xuICAgICAgdG9rZW5zLnB1c2godG9rZW4pO1xuXG4gICAgICBpZiAodHlwZSA9PT0gJyMnIHx8IHR5cGUgPT09ICdeJykge1xuICAgICAgICBzZWN0aW9ucy5wdXNoKHRva2VuKTtcbiAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJy8nKSB7XG4gICAgICAgIC8vIENoZWNrIHNlY3Rpb24gbmVzdGluZy5cbiAgICAgICAgb3BlblNlY3Rpb24gPSBzZWN0aW9ucy5wb3AoKTtcblxuICAgICAgICBpZiAoIW9wZW5TZWN0aW9uKVxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVW5vcGVuZWQgc2VjdGlvbiBcIicgKyB2YWx1ZSArICdcIiBhdCAnICsgc3RhcnQpO1xuXG4gICAgICAgIGlmIChvcGVuU2VjdGlvblsxXSAhPT0gdmFsdWUpXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmNsb3NlZCBzZWN0aW9uIFwiJyArIG9wZW5TZWN0aW9uWzFdICsgJ1wiIGF0ICcgKyBzdGFydCk7XG4gICAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICduYW1lJyB8fCB0eXBlID09PSAneycgfHwgdHlwZSA9PT0gJyYnKSB7XG4gICAgICAgIG5vblNwYWNlID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJz0nKSB7XG4gICAgICAgIC8vIFNldCB0aGUgdGFncyBmb3IgdGhlIG5leHQgdGltZSBhcm91bmQuXG4gICAgICAgIGNvbXBpbGVUYWdzKHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBNYWtlIHN1cmUgdGhlcmUgYXJlIG5vIG9wZW4gc2VjdGlvbnMgd2hlbiB3ZSdyZSBkb25lLlxuICAgIG9wZW5TZWN0aW9uID0gc2VjdGlvbnMucG9wKCk7XG5cbiAgICBpZiAob3BlblNlY3Rpb24pXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuY2xvc2VkIHNlY3Rpb24gXCInICsgb3BlblNlY3Rpb25bMV0gKyAnXCIgYXQgJyArIHNjYW5uZXIucG9zKTtcblxuICAgIHJldHVybiBuZXN0VG9rZW5zKHNxdWFzaFRva2Vucyh0b2tlbnMpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb21iaW5lcyB0aGUgdmFsdWVzIG9mIGNvbnNlY3V0aXZlIHRleHQgdG9rZW5zIGluIHRoZSBnaXZlbiBgdG9rZW5zYCBhcnJheVxuICAgKiB0byBhIHNpbmdsZSB0b2tlbi5cbiAgICovXG4gIGZ1bmN0aW9uIHNxdWFzaFRva2VucyAodG9rZW5zKSB7XG4gICAgdmFyIHNxdWFzaGVkVG9rZW5zID0gW107XG5cbiAgICB2YXIgdG9rZW4sIGxhc3RUb2tlbjtcbiAgICBmb3IgKHZhciBpID0gMCwgbnVtVG9rZW5zID0gdG9rZW5zLmxlbmd0aDsgaSA8IG51bVRva2VuczsgKytpKSB7XG4gICAgICB0b2tlbiA9IHRva2Vuc1tpXTtcblxuICAgICAgaWYgKHRva2VuKSB7XG4gICAgICAgIGlmICh0b2tlblswXSA9PT0gJ3RleHQnICYmIGxhc3RUb2tlbiAmJiBsYXN0VG9rZW5bMF0gPT09ICd0ZXh0Jykge1xuICAgICAgICAgIGxhc3RUb2tlblsxXSArPSB0b2tlblsxXTtcbiAgICAgICAgICBsYXN0VG9rZW5bM10gPSB0b2tlblszXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzcXVhc2hlZFRva2Vucy5wdXNoKHRva2VuKTtcbiAgICAgICAgICBsYXN0VG9rZW4gPSB0b2tlbjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzcXVhc2hlZFRva2VucztcbiAgfVxuXG4gIC8qKlxuICAgKiBGb3JtcyB0aGUgZ2l2ZW4gYXJyYXkgb2YgYHRva2Vuc2AgaW50byBhIG5lc3RlZCB0cmVlIHN0cnVjdHVyZSB3aGVyZVxuICAgKiB0b2tlbnMgdGhhdCByZXByZXNlbnQgYSBzZWN0aW9uIGhhdmUgdHdvIGFkZGl0aW9uYWwgaXRlbXM6IDEpIGFuIGFycmF5IG9mXG4gICAqIGFsbCB0b2tlbnMgdGhhdCBhcHBlYXIgaW4gdGhhdCBzZWN0aW9uIGFuZCAyKSB0aGUgaW5kZXggaW4gdGhlIG9yaWdpbmFsXG4gICAqIHRlbXBsYXRlIHRoYXQgcmVwcmVzZW50cyB0aGUgZW5kIG9mIHRoYXQgc2VjdGlvbi5cbiAgICovXG4gIGZ1bmN0aW9uIG5lc3RUb2tlbnMgKHRva2Vucykge1xuICAgIHZhciBuZXN0ZWRUb2tlbnMgPSBbXTtcbiAgICB2YXIgY29sbGVjdG9yID0gbmVzdGVkVG9rZW5zO1xuICAgIHZhciBzZWN0aW9ucyA9IFtdO1xuXG4gICAgdmFyIHRva2VuLCBzZWN0aW9uO1xuICAgIGZvciAodmFyIGkgPSAwLCBudW1Ub2tlbnMgPSB0b2tlbnMubGVuZ3RoOyBpIDwgbnVtVG9rZW5zOyArK2kpIHtcbiAgICAgIHRva2VuID0gdG9rZW5zW2ldO1xuXG4gICAgICBzd2l0Y2ggKHRva2VuWzBdKSB7XG4gICAgICAgIGNhc2UgJyMnOlxuICAgICAgICBjYXNlICdeJzpcbiAgICAgICAgICBjb2xsZWN0b3IucHVzaCh0b2tlbik7XG4gICAgICAgICAgc2VjdGlvbnMucHVzaCh0b2tlbik7XG4gICAgICAgICAgY29sbGVjdG9yID0gdG9rZW5bNF0gPSBbXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnLyc6XG4gICAgICAgICAgc2VjdGlvbiA9IHNlY3Rpb25zLnBvcCgpO1xuICAgICAgICAgIHNlY3Rpb25bNV0gPSB0b2tlblsyXTtcbiAgICAgICAgICBjb2xsZWN0b3IgPSBzZWN0aW9ucy5sZW5ndGggPiAwID8gc2VjdGlvbnNbc2VjdGlvbnMubGVuZ3RoIC0gMV1bNF0gOiBuZXN0ZWRUb2tlbnM7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgY29sbGVjdG9yLnB1c2godG9rZW4pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBuZXN0ZWRUb2tlbnM7XG4gIH1cblxuICAvKipcbiAgICogQSBzaW1wbGUgc3RyaW5nIHNjYW5uZXIgdGhhdCBpcyB1c2VkIGJ5IHRoZSB0ZW1wbGF0ZSBwYXJzZXIgdG8gZmluZFxuICAgKiB0b2tlbnMgaW4gdGVtcGxhdGUgc3RyaW5ncy5cbiAgICovXG4gIGZ1bmN0aW9uIFNjYW5uZXIgKHN0cmluZykge1xuICAgIHRoaXMuc3RyaW5nID0gc3RyaW5nO1xuICAgIHRoaXMudGFpbCA9IHN0cmluZztcbiAgICB0aGlzLnBvcyA9IDA7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHRhaWwgaXMgZW1wdHkgKGVuZCBvZiBzdHJpbmcpLlxuICAgKi9cbiAgU2Nhbm5lci5wcm90b3R5cGUuZW9zID0gZnVuY3Rpb24gZW9zICgpIHtcbiAgICByZXR1cm4gdGhpcy50YWlsID09PSAnJztcbiAgfTtcblxuICAvKipcbiAgICogVHJpZXMgdG8gbWF0Y2ggdGhlIGdpdmVuIHJlZ3VsYXIgZXhwcmVzc2lvbiBhdCB0aGUgY3VycmVudCBwb3NpdGlvbi5cbiAgICogUmV0dXJucyB0aGUgbWF0Y2hlZCB0ZXh0IGlmIGl0IGNhbiBtYXRjaCwgdGhlIGVtcHR5IHN0cmluZyBvdGhlcndpc2UuXG4gICAqL1xuICBTY2FubmVyLnByb3RvdHlwZS5zY2FuID0gZnVuY3Rpb24gc2NhbiAocmUpIHtcbiAgICB2YXIgbWF0Y2ggPSB0aGlzLnRhaWwubWF0Y2gocmUpO1xuXG4gICAgaWYgKCFtYXRjaCB8fCBtYXRjaC5pbmRleCAhPT0gMClcbiAgICAgIHJldHVybiAnJztcblxuICAgIHZhciBzdHJpbmcgPSBtYXRjaFswXTtcblxuICAgIHRoaXMudGFpbCA9IHRoaXMudGFpbC5zdWJzdHJpbmcoc3RyaW5nLmxlbmd0aCk7XG4gICAgdGhpcy5wb3MgKz0gc3RyaW5nLmxlbmd0aDtcblxuICAgIHJldHVybiBzdHJpbmc7XG4gIH07XG5cbiAgLyoqXG4gICAqIFNraXBzIGFsbCB0ZXh0IHVudGlsIHRoZSBnaXZlbiByZWd1bGFyIGV4cHJlc3Npb24gY2FuIGJlIG1hdGNoZWQuIFJldHVybnNcbiAgICogdGhlIHNraXBwZWQgc3RyaW5nLCB3aGljaCBpcyB0aGUgZW50aXJlIHRhaWwgaWYgbm8gbWF0Y2ggY2FuIGJlIG1hZGUuXG4gICAqL1xuICBTY2FubmVyLnByb3RvdHlwZS5zY2FuVW50aWwgPSBmdW5jdGlvbiBzY2FuVW50aWwgKHJlKSB7XG4gICAgdmFyIGluZGV4ID0gdGhpcy50YWlsLnNlYXJjaChyZSksIG1hdGNoO1xuXG4gICAgc3dpdGNoIChpbmRleCkge1xuICAgICAgY2FzZSAtMTpcbiAgICAgICAgbWF0Y2ggPSB0aGlzLnRhaWw7XG4gICAgICAgIHRoaXMudGFpbCA9ICcnO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMDpcbiAgICAgICAgbWF0Y2ggPSAnJztcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBtYXRjaCA9IHRoaXMudGFpbC5zdWJzdHJpbmcoMCwgaW5kZXgpO1xuICAgICAgICB0aGlzLnRhaWwgPSB0aGlzLnRhaWwuc3Vic3RyaW5nKGluZGV4KTtcbiAgICB9XG5cbiAgICB0aGlzLnBvcyArPSBtYXRjaC5sZW5ndGg7XG5cbiAgICByZXR1cm4gbWF0Y2g7XG4gIH07XG5cbiAgLyoqXG4gICAqIFJlcHJlc2VudHMgYSByZW5kZXJpbmcgY29udGV4dCBieSB3cmFwcGluZyBhIHZpZXcgb2JqZWN0IGFuZFxuICAgKiBtYWludGFpbmluZyBhIHJlZmVyZW5jZSB0byB0aGUgcGFyZW50IGNvbnRleHQuXG4gICAqL1xuICBmdW5jdGlvbiBDb250ZXh0ICh2aWV3LCBwYXJlbnRDb250ZXh0KSB7XG4gICAgdGhpcy52aWV3ID0gdmlldztcbiAgICB0aGlzLmNhY2hlID0geyAnLic6IHRoaXMudmlldyB9O1xuICAgIHRoaXMucGFyZW50ID0gcGFyZW50Q29udGV4dDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IGNvbnRleHQgdXNpbmcgdGhlIGdpdmVuIHZpZXcgd2l0aCB0aGlzIGNvbnRleHRcbiAgICogYXMgdGhlIHBhcmVudC5cbiAgICovXG4gIENvbnRleHQucHJvdG90eXBlLnB1c2ggPSBmdW5jdGlvbiBwdXNoICh2aWV3KSB7XG4gICAgcmV0dXJuIG5ldyBDb250ZXh0KHZpZXcsIHRoaXMpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgZ2l2ZW4gbmFtZSBpbiB0aGlzIGNvbnRleHQsIHRyYXZlcnNpbmdcbiAgICogdXAgdGhlIGNvbnRleHQgaGllcmFyY2h5IGlmIHRoZSB2YWx1ZSBpcyBhYnNlbnQgaW4gdGhpcyBjb250ZXh0J3Mgdmlldy5cbiAgICovXG4gIENvbnRleHQucHJvdG90eXBlLmxvb2t1cCA9IGZ1bmN0aW9uIGxvb2t1cCAobmFtZSkge1xuICAgIHZhciBjYWNoZSA9IHRoaXMuY2FjaGU7XG5cbiAgICB2YXIgdmFsdWU7XG4gICAgaWYgKGNhY2hlLmhhc093blByb3BlcnR5KG5hbWUpKSB7XG4gICAgICB2YWx1ZSA9IGNhY2hlW25hbWVdO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgY29udGV4dCA9IHRoaXMsIG5hbWVzLCBpbmRleCwgbG9va3VwSGl0ID0gZmFsc2U7XG5cbiAgICAgIHdoaWxlIChjb250ZXh0KSB7XG4gICAgICAgIGlmIChuYW1lLmluZGV4T2YoJy4nKSA+IDApIHtcbiAgICAgICAgICB2YWx1ZSA9IGNvbnRleHQudmlldztcbiAgICAgICAgICBuYW1lcyA9IG5hbWUuc3BsaXQoJy4nKTtcbiAgICAgICAgICBpbmRleCA9IDA7XG5cbiAgICAgICAgICAvKipcbiAgICAgICAgICAgKiBVc2luZyB0aGUgZG90IG5vdGlvbiBwYXRoIGluIGBuYW1lYCwgd2UgZGVzY2VuZCB0aHJvdWdoIHRoZVxuICAgICAgICAgICAqIG5lc3RlZCBvYmplY3RzLlxuICAgICAgICAgICAqXG4gICAgICAgICAgICogVG8gYmUgY2VydGFpbiB0aGF0IHRoZSBsb29rdXAgaGFzIGJlZW4gc3VjY2Vzc2Z1bCwgd2UgaGF2ZSB0b1xuICAgICAgICAgICAqIGNoZWNrIGlmIHRoZSBsYXN0IG9iamVjdCBpbiB0aGUgcGF0aCBhY3R1YWxseSBoYXMgdGhlIHByb3BlcnR5XG4gICAgICAgICAgICogd2UgYXJlIGxvb2tpbmcgZm9yLiBXZSBzdG9yZSB0aGUgcmVzdWx0IGluIGBsb29rdXBIaXRgLlxuICAgICAgICAgICAqXG4gICAgICAgICAgICogVGhpcyBpcyBzcGVjaWFsbHkgbmVjZXNzYXJ5IGZvciB3aGVuIHRoZSB2YWx1ZSBoYXMgYmVlbiBzZXQgdG9cbiAgICAgICAgICAgKiBgdW5kZWZpbmVkYCBhbmQgd2Ugd2FudCB0byBhdm9pZCBsb29raW5nIHVwIHBhcmVudCBjb250ZXh0cy5cbiAgICAgICAgICAgKiovXG4gICAgICAgICAgd2hpbGUgKHZhbHVlICE9IG51bGwgJiYgaW5kZXggPCBuYW1lcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGlmIChpbmRleCA9PT0gbmFtZXMubGVuZ3RoIC0gMSlcbiAgICAgICAgICAgICAgbG9va3VwSGl0ID0gaGFzUHJvcGVydHkodmFsdWUsIG5hbWVzW2luZGV4XSk7XG5cbiAgICAgICAgICAgIHZhbHVlID0gdmFsdWVbbmFtZXNbaW5kZXgrK11dO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YWx1ZSA9IGNvbnRleHQudmlld1tuYW1lXTtcbiAgICAgICAgICBsb29rdXBIaXQgPSBoYXNQcm9wZXJ0eShjb250ZXh0LnZpZXcsIG5hbWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGxvb2t1cEhpdClcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjb250ZXh0ID0gY29udGV4dC5wYXJlbnQ7XG4gICAgICB9XG5cbiAgICAgIGNhY2hlW25hbWVdID0gdmFsdWU7XG4gICAgfVxuXG4gICAgaWYgKGlzRnVuY3Rpb24odmFsdWUpKVxuICAgICAgdmFsdWUgPSB2YWx1ZS5jYWxsKHRoaXMudmlldyk7XG5cbiAgICByZXR1cm4gdmFsdWU7XG4gIH07XG5cbiAgLyoqXG4gICAqIEEgV3JpdGVyIGtub3dzIGhvdyB0byB0YWtlIGEgc3RyZWFtIG9mIHRva2VucyBhbmQgcmVuZGVyIHRoZW0gdG8gYVxuICAgKiBzdHJpbmcsIGdpdmVuIGEgY29udGV4dC4gSXQgYWxzbyBtYWludGFpbnMgYSBjYWNoZSBvZiB0ZW1wbGF0ZXMgdG9cbiAgICogYXZvaWQgdGhlIG5lZWQgdG8gcGFyc2UgdGhlIHNhbWUgdGVtcGxhdGUgdHdpY2UuXG4gICAqL1xuICBmdW5jdGlvbiBXcml0ZXIgKCkge1xuICAgIHRoaXMuY2FjaGUgPSB7fTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhcnMgYWxsIGNhY2hlZCB0ZW1wbGF0ZXMgaW4gdGhpcyB3cml0ZXIuXG4gICAqL1xuICBXcml0ZXIucHJvdG90eXBlLmNsZWFyQ2FjaGUgPSBmdW5jdGlvbiBjbGVhckNhY2hlICgpIHtcbiAgICB0aGlzLmNhY2hlID0ge307XG4gIH07XG5cbiAgLyoqXG4gICAqIFBhcnNlcyBhbmQgY2FjaGVzIHRoZSBnaXZlbiBgdGVtcGxhdGVgIGFuZCByZXR1cm5zIHRoZSBhcnJheSBvZiB0b2tlbnNcbiAgICogdGhhdCBpcyBnZW5lcmF0ZWQgZnJvbSB0aGUgcGFyc2UuXG4gICAqL1xuICBXcml0ZXIucHJvdG90eXBlLnBhcnNlID0gZnVuY3Rpb24gcGFyc2UgKHRlbXBsYXRlLCB0YWdzKSB7XG4gICAgdmFyIGNhY2hlID0gdGhpcy5jYWNoZTtcbiAgICB2YXIgdG9rZW5zID0gY2FjaGVbdGVtcGxhdGVdO1xuXG4gICAgaWYgKHRva2VucyA9PSBudWxsKVxuICAgICAgdG9rZW5zID0gY2FjaGVbdGVtcGxhdGVdID0gcGFyc2VUZW1wbGF0ZSh0ZW1wbGF0ZSwgdGFncyk7XG5cbiAgICByZXR1cm4gdG9rZW5zO1xuICB9O1xuXG4gIC8qKlxuICAgKiBIaWdoLWxldmVsIG1ldGhvZCB0aGF0IGlzIHVzZWQgdG8gcmVuZGVyIHRoZSBnaXZlbiBgdGVtcGxhdGVgIHdpdGhcbiAgICogdGhlIGdpdmVuIGB2aWV3YC5cbiAgICpcbiAgICogVGhlIG9wdGlvbmFsIGBwYXJ0aWFsc2AgYXJndW1lbnQgbWF5IGJlIGFuIG9iamVjdCB0aGF0IGNvbnRhaW5zIHRoZVxuICAgKiBuYW1lcyBhbmQgdGVtcGxhdGVzIG9mIHBhcnRpYWxzIHRoYXQgYXJlIHVzZWQgaW4gdGhlIHRlbXBsYXRlLiBJdCBtYXlcbiAgICogYWxzbyBiZSBhIGZ1bmN0aW9uIHRoYXQgaXMgdXNlZCB0byBsb2FkIHBhcnRpYWwgdGVtcGxhdGVzIG9uIHRoZSBmbHlcbiAgICogdGhhdCB0YWtlcyBhIHNpbmdsZSBhcmd1bWVudDogdGhlIG5hbWUgb2YgdGhlIHBhcnRpYWwuXG4gICAqL1xuICBXcml0ZXIucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlciAodGVtcGxhdGUsIHZpZXcsIHBhcnRpYWxzKSB7XG4gICAgdmFyIHRva2VucyA9IHRoaXMucGFyc2UodGVtcGxhdGUpO1xuICAgIHZhciBjb250ZXh0ID0gKHZpZXcgaW5zdGFuY2VvZiBDb250ZXh0KSA/IHZpZXcgOiBuZXcgQ29udGV4dCh2aWV3KTtcbiAgICByZXR1cm4gdGhpcy5yZW5kZXJUb2tlbnModG9rZW5zLCBjb250ZXh0LCBwYXJ0aWFscywgdGVtcGxhdGUpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBMb3ctbGV2ZWwgbWV0aG9kIHRoYXQgcmVuZGVycyB0aGUgZ2l2ZW4gYXJyYXkgb2YgYHRva2Vuc2AgdXNpbmdcbiAgICogdGhlIGdpdmVuIGBjb250ZXh0YCBhbmQgYHBhcnRpYWxzYC5cbiAgICpcbiAgICogTm90ZTogVGhlIGBvcmlnaW5hbFRlbXBsYXRlYCBpcyBvbmx5IGV2ZXIgdXNlZCB0byBleHRyYWN0IHRoZSBwb3J0aW9uXG4gICAqIG9mIHRoZSBvcmlnaW5hbCB0ZW1wbGF0ZSB0aGF0IHdhcyBjb250YWluZWQgaW4gYSBoaWdoZXItb3JkZXIgc2VjdGlvbi5cbiAgICogSWYgdGhlIHRlbXBsYXRlIGRvZXNuJ3QgdXNlIGhpZ2hlci1vcmRlciBzZWN0aW9ucywgdGhpcyBhcmd1bWVudCBtYXlcbiAgICogYmUgb21pdHRlZC5cbiAgICovXG4gIFdyaXRlci5wcm90b3R5cGUucmVuZGVyVG9rZW5zID0gZnVuY3Rpb24gcmVuZGVyVG9rZW5zICh0b2tlbnMsIGNvbnRleHQsIHBhcnRpYWxzLCBvcmlnaW5hbFRlbXBsYXRlKSB7XG4gICAgdmFyIGJ1ZmZlciA9ICcnO1xuXG4gICAgdmFyIHRva2VuLCBzeW1ib2wsIHZhbHVlO1xuICAgIGZvciAodmFyIGkgPSAwLCBudW1Ub2tlbnMgPSB0b2tlbnMubGVuZ3RoOyBpIDwgbnVtVG9rZW5zOyArK2kpIHtcbiAgICAgIHZhbHVlID0gdW5kZWZpbmVkO1xuICAgICAgdG9rZW4gPSB0b2tlbnNbaV07XG4gICAgICBzeW1ib2wgPSB0b2tlblswXTtcblxuICAgICAgaWYgKHN5bWJvbCA9PT0gJyMnKSB2YWx1ZSA9IHRoaXMucmVuZGVyU2VjdGlvbih0b2tlbiwgY29udGV4dCwgcGFydGlhbHMsIG9yaWdpbmFsVGVtcGxhdGUpO1xuICAgICAgZWxzZSBpZiAoc3ltYm9sID09PSAnXicpIHZhbHVlID0gdGhpcy5yZW5kZXJJbnZlcnRlZCh0b2tlbiwgY29udGV4dCwgcGFydGlhbHMsIG9yaWdpbmFsVGVtcGxhdGUpO1xuICAgICAgZWxzZSBpZiAoc3ltYm9sID09PSAnPicpIHZhbHVlID0gdGhpcy5yZW5kZXJQYXJ0aWFsKHRva2VuLCBjb250ZXh0LCBwYXJ0aWFscywgb3JpZ2luYWxUZW1wbGF0ZSk7XG4gICAgICBlbHNlIGlmIChzeW1ib2wgPT09ICcmJykgdmFsdWUgPSB0aGlzLnVuZXNjYXBlZFZhbHVlKHRva2VuLCBjb250ZXh0KTtcbiAgICAgIGVsc2UgaWYgKHN5bWJvbCA9PT0gJ25hbWUnKSB2YWx1ZSA9IHRoaXMuZXNjYXBlZFZhbHVlKHRva2VuLCBjb250ZXh0KTtcbiAgICAgIGVsc2UgaWYgKHN5bWJvbCA9PT0gJ3RleHQnKSB2YWx1ZSA9IHRoaXMucmF3VmFsdWUodG9rZW4pO1xuXG4gICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZClcbiAgICAgICAgYnVmZmVyICs9IHZhbHVlO1xuICAgIH1cblxuICAgIHJldHVybiBidWZmZXI7XG4gIH07XG5cbiAgV3JpdGVyLnByb3RvdHlwZS5yZW5kZXJTZWN0aW9uID0gZnVuY3Rpb24gcmVuZGVyU2VjdGlvbiAodG9rZW4sIGNvbnRleHQsIHBhcnRpYWxzLCBvcmlnaW5hbFRlbXBsYXRlKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHZhciBidWZmZXIgPSAnJztcbiAgICB2YXIgdmFsdWUgPSBjb250ZXh0Lmxvb2t1cCh0b2tlblsxXSk7XG5cbiAgICAvLyBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcmVuZGVyIGFuIGFyYml0cmFyeSB0ZW1wbGF0ZVxuICAgIC8vIGluIHRoZSBjdXJyZW50IGNvbnRleHQgYnkgaGlnaGVyLW9yZGVyIHNlY3Rpb25zLlxuICAgIGZ1bmN0aW9uIHN1YlJlbmRlciAodGVtcGxhdGUpIHtcbiAgICAgIHJldHVybiBzZWxmLnJlbmRlcih0ZW1wbGF0ZSwgY29udGV4dCwgcGFydGlhbHMpO1xuICAgIH1cblxuICAgIGlmICghdmFsdWUpIHJldHVybjtcblxuICAgIGlmIChpc0FycmF5KHZhbHVlKSkge1xuICAgICAgZm9yICh2YXIgaiA9IDAsIHZhbHVlTGVuZ3RoID0gdmFsdWUubGVuZ3RoOyBqIDwgdmFsdWVMZW5ndGg7ICsraikge1xuICAgICAgICBidWZmZXIgKz0gdGhpcy5yZW5kZXJUb2tlbnModG9rZW5bNF0sIGNvbnRleHQucHVzaCh2YWx1ZVtqXSksIHBhcnRpYWxzLCBvcmlnaW5hbFRlbXBsYXRlKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgfHwgdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgICBidWZmZXIgKz0gdGhpcy5yZW5kZXJUb2tlbnModG9rZW5bNF0sIGNvbnRleHQucHVzaCh2YWx1ZSksIHBhcnRpYWxzLCBvcmlnaW5hbFRlbXBsYXRlKTtcbiAgICB9IGVsc2UgaWYgKGlzRnVuY3Rpb24odmFsdWUpKSB7XG4gICAgICBpZiAodHlwZW9mIG9yaWdpbmFsVGVtcGxhdGUgIT09ICdzdHJpbmcnKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCB1c2UgaGlnaGVyLW9yZGVyIHNlY3Rpb25zIHdpdGhvdXQgdGhlIG9yaWdpbmFsIHRlbXBsYXRlJyk7XG5cbiAgICAgIC8vIEV4dHJhY3QgdGhlIHBvcnRpb24gb2YgdGhlIG9yaWdpbmFsIHRlbXBsYXRlIHRoYXQgdGhlIHNlY3Rpb24gY29udGFpbnMuXG4gICAgICB2YWx1ZSA9IHZhbHVlLmNhbGwoY29udGV4dC52aWV3LCBvcmlnaW5hbFRlbXBsYXRlLnNsaWNlKHRva2VuWzNdLCB0b2tlbls1XSksIHN1YlJlbmRlcik7XG5cbiAgICAgIGlmICh2YWx1ZSAhPSBudWxsKVxuICAgICAgICBidWZmZXIgKz0gdmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGJ1ZmZlciArPSB0aGlzLnJlbmRlclRva2Vucyh0b2tlbls0XSwgY29udGV4dCwgcGFydGlhbHMsIG9yaWdpbmFsVGVtcGxhdGUpO1xuICAgIH1cbiAgICByZXR1cm4gYnVmZmVyO1xuICB9O1xuXG4gIFdyaXRlci5wcm90b3R5cGUucmVuZGVySW52ZXJ0ZWQgPSBmdW5jdGlvbiByZW5kZXJJbnZlcnRlZCAodG9rZW4sIGNvbnRleHQsIHBhcnRpYWxzLCBvcmlnaW5hbFRlbXBsYXRlKSB7XG4gICAgdmFyIHZhbHVlID0gY29udGV4dC5sb29rdXAodG9rZW5bMV0pO1xuXG4gICAgLy8gVXNlIEphdmFTY3JpcHQncyBkZWZpbml0aW9uIG9mIGZhbHN5LiBJbmNsdWRlIGVtcHR5IGFycmF5cy5cbiAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2phbmwvbXVzdGFjaGUuanMvaXNzdWVzLzE4NlxuICAgIGlmICghdmFsdWUgfHwgKGlzQXJyYXkodmFsdWUpICYmIHZhbHVlLmxlbmd0aCA9PT0gMCkpXG4gICAgICByZXR1cm4gdGhpcy5yZW5kZXJUb2tlbnModG9rZW5bNF0sIGNvbnRleHQsIHBhcnRpYWxzLCBvcmlnaW5hbFRlbXBsYXRlKTtcbiAgfTtcblxuICBXcml0ZXIucHJvdG90eXBlLnJlbmRlclBhcnRpYWwgPSBmdW5jdGlvbiByZW5kZXJQYXJ0aWFsICh0b2tlbiwgY29udGV4dCwgcGFydGlhbHMpIHtcbiAgICBpZiAoIXBhcnRpYWxzKSByZXR1cm47XG5cbiAgICB2YXIgdmFsdWUgPSBpc0Z1bmN0aW9uKHBhcnRpYWxzKSA/IHBhcnRpYWxzKHRva2VuWzFdKSA6IHBhcnRpYWxzW3Rva2VuWzFdXTtcbiAgICBpZiAodmFsdWUgIT0gbnVsbClcbiAgICAgIHJldHVybiB0aGlzLnJlbmRlclRva2Vucyh0aGlzLnBhcnNlKHZhbHVlKSwgY29udGV4dCwgcGFydGlhbHMsIHZhbHVlKTtcbiAgfTtcblxuICBXcml0ZXIucHJvdG90eXBlLnVuZXNjYXBlZFZhbHVlID0gZnVuY3Rpb24gdW5lc2NhcGVkVmFsdWUgKHRva2VuLCBjb250ZXh0KSB7XG4gICAgdmFyIHZhbHVlID0gY29udGV4dC5sb29rdXAodG9rZW5bMV0pO1xuICAgIGlmICh2YWx1ZSAhPSBudWxsKVxuICAgICAgcmV0dXJuIHZhbHVlO1xuICB9O1xuXG4gIFdyaXRlci5wcm90b3R5cGUuZXNjYXBlZFZhbHVlID0gZnVuY3Rpb24gZXNjYXBlZFZhbHVlICh0b2tlbiwgY29udGV4dCkge1xuICAgIHZhciB2YWx1ZSA9IGNvbnRleHQubG9va3VwKHRva2VuWzFdKTtcbiAgICBpZiAodmFsdWUgIT0gbnVsbClcbiAgICAgIHJldHVybiBtdXN0YWNoZS5lc2NhcGUodmFsdWUpO1xuICB9O1xuXG4gIFdyaXRlci5wcm90b3R5cGUucmF3VmFsdWUgPSBmdW5jdGlvbiByYXdWYWx1ZSAodG9rZW4pIHtcbiAgICByZXR1cm4gdG9rZW5bMV07XG4gIH07XG5cbiAgbXVzdGFjaGUubmFtZSA9ICdtdXN0YWNoZS5qcyc7XG4gIG11c3RhY2hlLnZlcnNpb24gPSAnMi4zLjInO1xuICBtdXN0YWNoZS50YWdzID0gWyAne3snLCAnfX0nIF07XG5cbiAgLy8gQWxsIGhpZ2gtbGV2ZWwgbXVzdGFjaGUuKiBmdW5jdGlvbnMgdXNlIHRoaXMgd3JpdGVyLlxuICB2YXIgZGVmYXVsdFdyaXRlciA9IG5ldyBXcml0ZXIoKTtcblxuICAvKipcbiAgICogQ2xlYXJzIGFsbCBjYWNoZWQgdGVtcGxhdGVzIGluIHRoZSBkZWZhdWx0IHdyaXRlci5cbiAgICovXG4gIG11c3RhY2hlLmNsZWFyQ2FjaGUgPSBmdW5jdGlvbiBjbGVhckNhY2hlICgpIHtcbiAgICByZXR1cm4gZGVmYXVsdFdyaXRlci5jbGVhckNhY2hlKCk7XG4gIH07XG5cbiAgLyoqXG4gICAqIFBhcnNlcyBhbmQgY2FjaGVzIHRoZSBnaXZlbiB0ZW1wbGF0ZSBpbiB0aGUgZGVmYXVsdCB3cml0ZXIgYW5kIHJldHVybnMgdGhlXG4gICAqIGFycmF5IG9mIHRva2VucyBpdCBjb250YWlucy4gRG9pbmcgdGhpcyBhaGVhZCBvZiB0aW1lIGF2b2lkcyB0aGUgbmVlZCB0b1xuICAgKiBwYXJzZSB0ZW1wbGF0ZXMgb24gdGhlIGZseSBhcyB0aGV5IGFyZSByZW5kZXJlZC5cbiAgICovXG4gIG11c3RhY2hlLnBhcnNlID0gZnVuY3Rpb24gcGFyc2UgKHRlbXBsYXRlLCB0YWdzKSB7XG4gICAgcmV0dXJuIGRlZmF1bHRXcml0ZXIucGFyc2UodGVtcGxhdGUsIHRhZ3MpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBSZW5kZXJzIHRoZSBgdGVtcGxhdGVgIHdpdGggdGhlIGdpdmVuIGB2aWV3YCBhbmQgYHBhcnRpYWxzYCB1c2luZyB0aGVcbiAgICogZGVmYXVsdCB3cml0ZXIuXG4gICAqL1xuICBtdXN0YWNoZS5yZW5kZXIgPSBmdW5jdGlvbiByZW5kZXIgKHRlbXBsYXRlLCB2aWV3LCBwYXJ0aWFscykge1xuICAgIGlmICh0eXBlb2YgdGVtcGxhdGUgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIHRlbXBsYXRlISBUZW1wbGF0ZSBzaG91bGQgYmUgYSBcInN0cmluZ1wiICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAnYnV0IFwiJyArIHR5cGVTdHIodGVtcGxhdGUpICsgJ1wiIHdhcyBnaXZlbiBhcyB0aGUgZmlyc3QgJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICdhcmd1bWVudCBmb3IgbXVzdGFjaGUjcmVuZGVyKHRlbXBsYXRlLCB2aWV3LCBwYXJ0aWFscyknKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZGVmYXVsdFdyaXRlci5yZW5kZXIodGVtcGxhdGUsIHZpZXcsIHBhcnRpYWxzKTtcbiAgfTtcblxuICAvLyBUaGlzIGlzIGhlcmUgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHdpdGggMC40LnguLFxuICAvKmVzbGludC1kaXNhYmxlICovIC8vIGVzbGludCB3YW50cyBjYW1lbCBjYXNlZCBmdW5jdGlvbiBuYW1lXG4gIG11c3RhY2hlLnRvX2h0bWwgPSBmdW5jdGlvbiB0b19odG1sICh0ZW1wbGF0ZSwgdmlldywgcGFydGlhbHMsIHNlbmQpIHtcbiAgICAvKmVzbGludC1lbmFibGUqL1xuXG4gICAgdmFyIHJlc3VsdCA9IG11c3RhY2hlLnJlbmRlcih0ZW1wbGF0ZSwgdmlldywgcGFydGlhbHMpO1xuXG4gICAgaWYgKGlzRnVuY3Rpb24oc2VuZCkpIHtcbiAgICAgIHNlbmQocmVzdWx0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gIH07XG5cbiAgLy8gRXhwb3J0IHRoZSBlc2NhcGluZyBmdW5jdGlvbiBzbyB0aGF0IHRoZSB1c2VyIG1heSBvdmVycmlkZSBpdC5cbiAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9qYW5sL211c3RhY2hlLmpzL2lzc3Vlcy8yNDRcbiAgbXVzdGFjaGUuZXNjYXBlID0gZXNjYXBlSHRtbDtcblxuICAvLyBFeHBvcnQgdGhlc2UgbWFpbmx5IGZvciB0ZXN0aW5nLCBidXQgYWxzbyBmb3IgYWR2YW5jZWQgdXNhZ2UuXG4gIG11c3RhY2hlLlNjYW5uZXIgPSBTY2FubmVyO1xuICBtdXN0YWNoZS5Db250ZXh0ID0gQ29udGV4dDtcbiAgbXVzdGFjaGUuV3JpdGVyID0gV3JpdGVyO1xuXG4gIHJldHVybiBtdXN0YWNoZTtcbn0pKTtcbiIsIi8qISBucG0uaW0vb2JqZWN0LWZpdC1pbWFnZXMgMy4yLjQgKi9cbid1c2Ugc3RyaWN0JztcblxudmFyIE9GSSA9ICdiZnJlZC1pdDpvYmplY3QtZml0LWltYWdlcyc7XG52YXIgcHJvcFJlZ2V4ID0gLyhvYmplY3QtZml0fG9iamVjdC1wb3NpdGlvbilcXHMqOlxccyooWy0uXFx3XFxzJV0rKS9nO1xudmFyIHRlc3RJbWcgPSB0eXBlb2YgSW1hZ2UgPT09ICd1bmRlZmluZWQnID8ge3N0eWxlOiB7J29iamVjdC1wb3NpdGlvbic6IDF9fSA6IG5ldyBJbWFnZSgpO1xudmFyIHN1cHBvcnRzT2JqZWN0Rml0ID0gJ29iamVjdC1maXQnIGluIHRlc3RJbWcuc3R5bGU7XG52YXIgc3VwcG9ydHNPYmplY3RQb3NpdGlvbiA9ICdvYmplY3QtcG9zaXRpb24nIGluIHRlc3RJbWcuc3R5bGU7XG52YXIgc3VwcG9ydHNPRkkgPSAnYmFja2dyb3VuZC1zaXplJyBpbiB0ZXN0SW1nLnN0eWxlO1xudmFyIHN1cHBvcnRzQ3VycmVudFNyYyA9IHR5cGVvZiB0ZXN0SW1nLmN1cnJlbnRTcmMgPT09ICdzdHJpbmcnO1xudmFyIG5hdGl2ZUdldEF0dHJpYnV0ZSA9IHRlc3RJbWcuZ2V0QXR0cmlidXRlO1xudmFyIG5hdGl2ZVNldEF0dHJpYnV0ZSA9IHRlc3RJbWcuc2V0QXR0cmlidXRlO1xudmFyIGF1dG9Nb2RlRW5hYmxlZCA9IGZhbHNlO1xuXG5mdW5jdGlvbiBjcmVhdGVQbGFjZWhvbGRlcih3LCBoKSB7XG5cdHJldHVybiAoXCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9J1wiICsgdyArIFwiJyBoZWlnaHQ9J1wiICsgaCArIFwiJyUzRSUzQy9zdmclM0VcIik7XG59XG5cbmZ1bmN0aW9uIHBvbHlmaWxsQ3VycmVudFNyYyhlbCkge1xuXHRpZiAoZWwuc3Jjc2V0ICYmICFzdXBwb3J0c0N1cnJlbnRTcmMgJiYgd2luZG93LnBpY3R1cmVmaWxsKSB7XG5cdFx0dmFyIHBmID0gd2luZG93LnBpY3R1cmVmaWxsLl87XG5cdFx0Ly8gcGFyc2Ugc3Jjc2V0IHdpdGggcGljdHVyZWZpbGwgd2hlcmUgY3VycmVudFNyYyBpc24ndCBhdmFpbGFibGVcblx0XHRpZiAoIWVsW3BmLm5zXSB8fCAhZWxbcGYubnNdLmV2YWxlZCkge1xuXHRcdFx0Ly8gZm9yY2Ugc3luY2hyb25vdXMgc3Jjc2V0IHBhcnNpbmdcblx0XHRcdHBmLmZpbGxJbWcoZWwsIHtyZXNlbGVjdDogdHJ1ZX0pO1xuXHRcdH1cblxuXHRcdGlmICghZWxbcGYubnNdLmN1clNyYykge1xuXHRcdFx0Ly8gZm9yY2UgcGljdHVyZWZpbGwgdG8gcGFyc2Ugc3Jjc2V0XG5cdFx0XHRlbFtwZi5uc10uc3VwcG9ydGVkID0gZmFsc2U7XG5cdFx0XHRwZi5maWxsSW1nKGVsLCB7cmVzZWxlY3Q6IHRydWV9KTtcblx0XHR9XG5cblx0XHQvLyByZXRyaWV2ZSBwYXJzZWQgY3VycmVudFNyYywgaWYgYW55XG5cdFx0ZWwuY3VycmVudFNyYyA9IGVsW3BmLm5zXS5jdXJTcmMgfHwgZWwuc3JjO1xuXHR9XG59XG5cbmZ1bmN0aW9uIGdldFN0eWxlKGVsKSB7XG5cdHZhciBzdHlsZSA9IGdldENvbXB1dGVkU3R5bGUoZWwpLmZvbnRGYW1pbHk7XG5cdHZhciBwYXJzZWQ7XG5cdHZhciBwcm9wcyA9IHt9O1xuXHR3aGlsZSAoKHBhcnNlZCA9IHByb3BSZWdleC5leGVjKHN0eWxlKSkgIT09IG51bGwpIHtcblx0XHRwcm9wc1twYXJzZWRbMV1dID0gcGFyc2VkWzJdO1xuXHR9XG5cdHJldHVybiBwcm9wcztcbn1cblxuZnVuY3Rpb24gc2V0UGxhY2Vob2xkZXIoaW1nLCB3aWR0aCwgaGVpZ2h0KSB7XG5cdC8vIERlZmF1bHQ6IGZpbGwgd2lkdGgsIG5vIGhlaWdodFxuXHR2YXIgcGxhY2Vob2xkZXIgPSBjcmVhdGVQbGFjZWhvbGRlcih3aWR0aCB8fCAxLCBoZWlnaHQgfHwgMCk7XG5cblx0Ly8gT25seSBzZXQgcGxhY2Vob2xkZXIgaWYgaXQncyBkaWZmZXJlbnRcblx0aWYgKG5hdGl2ZUdldEF0dHJpYnV0ZS5jYWxsKGltZywgJ3NyYycpICE9PSBwbGFjZWhvbGRlcikge1xuXHRcdG5hdGl2ZVNldEF0dHJpYnV0ZS5jYWxsKGltZywgJ3NyYycsIHBsYWNlaG9sZGVyKTtcblx0fVxufVxuXG5mdW5jdGlvbiBvbkltYWdlUmVhZHkoaW1nLCBjYWxsYmFjaykge1xuXHQvLyBuYXR1cmFsV2lkdGggaXMgb25seSBhdmFpbGFibGUgd2hlbiB0aGUgaW1hZ2UgaGVhZGVycyBhcmUgbG9hZGVkLFxuXHQvLyB0aGlzIGxvb3Agd2lsbCBwb2xsIGl0IGV2ZXJ5IDEwMG1zLlxuXHRpZiAoaW1nLm5hdHVyYWxXaWR0aCkge1xuXHRcdGNhbGxiYWNrKGltZyk7XG5cdH0gZWxzZSB7XG5cdFx0c2V0VGltZW91dChvbkltYWdlUmVhZHksIDEwMCwgaW1nLCBjYWxsYmFjayk7XG5cdH1cbn1cblxuZnVuY3Rpb24gZml4T25lKGVsKSB7XG5cdHZhciBzdHlsZSA9IGdldFN0eWxlKGVsKTtcblx0dmFyIG9maSA9IGVsW09GSV07XG5cdHN0eWxlWydvYmplY3QtZml0J10gPSBzdHlsZVsnb2JqZWN0LWZpdCddIHx8ICdmaWxsJzsgLy8gZGVmYXVsdCB2YWx1ZVxuXG5cdC8vIEF2b2lkIHJ1bm5pbmcgd2hlcmUgdW5uZWNlc3NhcnksIHVubGVzcyBPRkkgaGFkIGFscmVhZHkgZG9uZSBpdHMgZGVlZFxuXHRpZiAoIW9maS5pbWcpIHtcblx0XHQvLyBmaWxsIGlzIHRoZSBkZWZhdWx0IGJlaGF2aW9yIHNvIG5vIGFjdGlvbiBpcyBuZWNlc3Nhcnlcblx0XHRpZiAoc3R5bGVbJ29iamVjdC1maXQnXSA9PT0gJ2ZpbGwnKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gV2hlcmUgb2JqZWN0LWZpdCBpcyBzdXBwb3J0ZWQgYW5kIG9iamVjdC1wb3NpdGlvbiBpc24ndCAoU2FmYXJpIDwgMTApXG5cdFx0aWYgKFxuXHRcdFx0IW9maS5za2lwVGVzdCAmJiAvLyB1bmxlc3MgdXNlciB3YW50cyB0byBhcHBseSByZWdhcmRsZXNzIG9mIGJyb3dzZXIgc3VwcG9ydFxuXHRcdFx0c3VwcG9ydHNPYmplY3RGaXQgJiYgLy8gaWYgYnJvd3NlciBhbHJlYWR5IHN1cHBvcnRzIG9iamVjdC1maXRcblx0XHRcdCFzdHlsZVsnb2JqZWN0LXBvc2l0aW9uJ10gLy8gdW5sZXNzIG9iamVjdC1wb3NpdGlvbiBpcyB1c2VkXG5cdFx0KSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHR9XG5cblx0Ly8ga2VlcCBhIGNsb25lIGluIG1lbW9yeSB3aGlsZSByZXNldHRpbmcgdGhlIG9yaWdpbmFsIHRvIGEgYmxhbmtcblx0aWYgKCFvZmkuaW1nKSB7XG5cdFx0b2ZpLmltZyA9IG5ldyBJbWFnZShlbC53aWR0aCwgZWwuaGVpZ2h0KTtcblx0XHRvZmkuaW1nLnNyY3NldCA9IG5hdGl2ZUdldEF0dHJpYnV0ZS5jYWxsKGVsLCBcImRhdGEtb2ZpLXNyY3NldFwiKSB8fCBlbC5zcmNzZXQ7XG5cdFx0b2ZpLmltZy5zcmMgPSBuYXRpdmVHZXRBdHRyaWJ1dGUuY2FsbChlbCwgXCJkYXRhLW9maS1zcmNcIikgfHwgZWwuc3JjO1xuXG5cdFx0Ly8gcHJlc2VydmUgZm9yIGFueSBmdXR1cmUgY2xvbmVOb2RlIGNhbGxzXG5cdFx0Ly8gaHR0cHM6Ly9naXRodWIuY29tL2JmcmVkLWl0L29iamVjdC1maXQtaW1hZ2VzL2lzc3Vlcy81M1xuXHRcdG5hdGl2ZVNldEF0dHJpYnV0ZS5jYWxsKGVsLCBcImRhdGEtb2ZpLXNyY1wiLCBlbC5zcmMpO1xuXHRcdGlmIChlbC5zcmNzZXQpIHtcblx0XHRcdG5hdGl2ZVNldEF0dHJpYnV0ZS5jYWxsKGVsLCBcImRhdGEtb2ZpLXNyY3NldFwiLCBlbC5zcmNzZXQpO1xuXHRcdH1cblxuXHRcdHNldFBsYWNlaG9sZGVyKGVsLCBlbC5uYXR1cmFsV2lkdGggfHwgZWwud2lkdGgsIGVsLm5hdHVyYWxIZWlnaHQgfHwgZWwuaGVpZ2h0KTtcblxuXHRcdC8vIHJlbW92ZSBzcmNzZXQgYmVjYXVzZSBpdCBvdmVycmlkZXMgc3JjXG5cdFx0aWYgKGVsLnNyY3NldCkge1xuXHRcdFx0ZWwuc3Jjc2V0ID0gJyc7XG5cdFx0fVxuXHRcdHRyeSB7XG5cdFx0XHRrZWVwU3JjVXNhYmxlKGVsKTtcblx0XHR9IGNhdGNoIChlcnIpIHtcblx0XHRcdGlmICh3aW5kb3cuY29uc29sZSkge1xuXHRcdFx0XHRjb25zb2xlLndhcm4oJ2h0dHBzOi8vYml0Lmx5L29maS1vbGQtYnJvd3NlcicpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHBvbHlmaWxsQ3VycmVudFNyYyhvZmkuaW1nKTtcblxuXHRlbC5zdHlsZS5iYWNrZ3JvdW5kSW1hZ2UgPSBcInVybChcXFwiXCIgKyAoKG9maS5pbWcuY3VycmVudFNyYyB8fCBvZmkuaW1nLnNyYykucmVwbGFjZSgvXCIvZywgJ1xcXFxcIicpKSArIFwiXFxcIilcIjtcblx0ZWwuc3R5bGUuYmFja2dyb3VuZFBvc2l0aW9uID0gc3R5bGVbJ29iamVjdC1wb3NpdGlvbiddIHx8ICdjZW50ZXInO1xuXHRlbC5zdHlsZS5iYWNrZ3JvdW5kUmVwZWF0ID0gJ25vLXJlcGVhdCc7XG5cdGVsLnN0eWxlLmJhY2tncm91bmRPcmlnaW4gPSAnY29udGVudC1ib3gnO1xuXG5cdGlmICgvc2NhbGUtZG93bi8udGVzdChzdHlsZVsnb2JqZWN0LWZpdCddKSkge1xuXHRcdG9uSW1hZ2VSZWFkeShvZmkuaW1nLCBmdW5jdGlvbiAoKSB7XG5cdFx0XHRpZiAob2ZpLmltZy5uYXR1cmFsV2lkdGggPiBlbC53aWR0aCB8fCBvZmkuaW1nLm5hdHVyYWxIZWlnaHQgPiBlbC5oZWlnaHQpIHtcblx0XHRcdFx0ZWwuc3R5bGUuYmFja2dyb3VuZFNpemUgPSAnY29udGFpbic7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRlbC5zdHlsZS5iYWNrZ3JvdW5kU2l6ZSA9ICdhdXRvJztcblx0XHRcdH1cblx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHRlbC5zdHlsZS5iYWNrZ3JvdW5kU2l6ZSA9IHN0eWxlWydvYmplY3QtZml0J10ucmVwbGFjZSgnbm9uZScsICdhdXRvJykucmVwbGFjZSgnZmlsbCcsICcxMDAlIDEwMCUnKTtcblx0fVxuXG5cdG9uSW1hZ2VSZWFkeShvZmkuaW1nLCBmdW5jdGlvbiAoaW1nKSB7XG5cdFx0c2V0UGxhY2Vob2xkZXIoZWwsIGltZy5uYXR1cmFsV2lkdGgsIGltZy5uYXR1cmFsSGVpZ2h0KTtcblx0fSk7XG59XG5cbmZ1bmN0aW9uIGtlZXBTcmNVc2FibGUoZWwpIHtcblx0dmFyIGRlc2NyaXB0b3JzID0ge1xuXHRcdGdldDogZnVuY3Rpb24gZ2V0KHByb3ApIHtcblx0XHRcdHJldHVybiBlbFtPRkldLmltZ1twcm9wID8gcHJvcCA6ICdzcmMnXTtcblx0XHR9LFxuXHRcdHNldDogZnVuY3Rpb24gc2V0KHZhbHVlLCBwcm9wKSB7XG5cdFx0XHRlbFtPRkldLmltZ1twcm9wID8gcHJvcCA6ICdzcmMnXSA9IHZhbHVlO1xuXHRcdFx0bmF0aXZlU2V0QXR0cmlidXRlLmNhbGwoZWwsIChcImRhdGEtb2ZpLVwiICsgcHJvcCksIHZhbHVlKTsgLy8gcHJlc2VydmUgZm9yIGFueSBmdXR1cmUgY2xvbmVOb2RlXG5cdFx0XHRmaXhPbmUoZWwpO1xuXHRcdFx0cmV0dXJuIHZhbHVlO1xuXHRcdH1cblx0fTtcblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGVsLCAnc3JjJywgZGVzY3JpcHRvcnMpO1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZWwsICdjdXJyZW50U3JjJywge1xuXHRcdGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZGVzY3JpcHRvcnMuZ2V0KCdjdXJyZW50U3JjJyk7IH1cblx0fSk7XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlbCwgJ3NyY3NldCcsIHtcblx0XHRnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGRlc2NyaXB0b3JzLmdldCgnc3Jjc2V0Jyk7IH0sXG5cdFx0c2V0OiBmdW5jdGlvbiAoc3MpIHsgcmV0dXJuIGRlc2NyaXB0b3JzLnNldChzcywgJ3NyY3NldCcpOyB9XG5cdH0pO1xufVxuXG5mdW5jdGlvbiBoaWphY2tBdHRyaWJ1dGVzKCkge1xuXHRmdW5jdGlvbiBnZXRPZmlJbWFnZU1heWJlKGVsLCBuYW1lKSB7XG5cdFx0cmV0dXJuIGVsW09GSV0gJiYgZWxbT0ZJXS5pbWcgJiYgKG5hbWUgPT09ICdzcmMnIHx8IG5hbWUgPT09ICdzcmNzZXQnKSA/IGVsW09GSV0uaW1nIDogZWw7XG5cdH1cblx0aWYgKCFzdXBwb3J0c09iamVjdFBvc2l0aW9uKSB7XG5cdFx0SFRNTEltYWdlRWxlbWVudC5wcm90b3R5cGUuZ2V0QXR0cmlidXRlID0gZnVuY3Rpb24gKG5hbWUpIHtcblx0XHRcdHJldHVybiBuYXRpdmVHZXRBdHRyaWJ1dGUuY2FsbChnZXRPZmlJbWFnZU1heWJlKHRoaXMsIG5hbWUpLCBuYW1lKTtcblx0XHR9O1xuXG5cdFx0SFRNTEltYWdlRWxlbWVudC5wcm90b3R5cGUuc2V0QXR0cmlidXRlID0gZnVuY3Rpb24gKG5hbWUsIHZhbHVlKSB7XG5cdFx0XHRyZXR1cm4gbmF0aXZlU2V0QXR0cmlidXRlLmNhbGwoZ2V0T2ZpSW1hZ2VNYXliZSh0aGlzLCBuYW1lKSwgbmFtZSwgU3RyaW5nKHZhbHVlKSk7XG5cdFx0fTtcblx0fVxufVxuXG5mdW5jdGlvbiBmaXgoaW1ncywgb3B0cykge1xuXHR2YXIgc3RhcnRBdXRvTW9kZSA9ICFhdXRvTW9kZUVuYWJsZWQgJiYgIWltZ3M7XG5cdG9wdHMgPSBvcHRzIHx8IHt9O1xuXHRpbWdzID0gaW1ncyB8fCAnaW1nJztcblxuXHRpZiAoKHN1cHBvcnRzT2JqZWN0UG9zaXRpb24gJiYgIW9wdHMuc2tpcFRlc3QpIHx8ICFzdXBwb3J0c09GSSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdC8vIHVzZSBpbWdzIGFzIGEgc2VsZWN0b3Igb3IganVzdCBzZWxlY3QgYWxsIGltYWdlc1xuXHRpZiAoaW1ncyA9PT0gJ2ltZycpIHtcblx0XHRpbWdzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2ltZycpO1xuXHR9IGVsc2UgaWYgKHR5cGVvZiBpbWdzID09PSAnc3RyaW5nJykge1xuXHRcdGltZ3MgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGltZ3MpO1xuXHR9IGVsc2UgaWYgKCEoJ2xlbmd0aCcgaW4gaW1ncykpIHtcblx0XHRpbWdzID0gW2ltZ3NdO1xuXHR9XG5cblx0Ly8gYXBwbHkgZml4IHRvIGFsbFxuXHRmb3IgKHZhciBpID0gMDsgaSA8IGltZ3MubGVuZ3RoOyBpKyspIHtcblx0XHRpbWdzW2ldW09GSV0gPSBpbWdzW2ldW09GSV0gfHwge1xuXHRcdFx0c2tpcFRlc3Q6IG9wdHMuc2tpcFRlc3Rcblx0XHR9O1xuXHRcdGZpeE9uZShpbWdzW2ldKTtcblx0fVxuXG5cdGlmIChzdGFydEF1dG9Nb2RlKSB7XG5cdFx0ZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgZnVuY3Rpb24gKGUpIHtcblx0XHRcdGlmIChlLnRhcmdldC50YWdOYW1lID09PSAnSU1HJykge1xuXHRcdFx0XHRmaXgoZS50YXJnZXQsIHtcblx0XHRcdFx0XHRza2lwVGVzdDogb3B0cy5za2lwVGVzdFxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9LCB0cnVlKTtcblx0XHRhdXRvTW9kZUVuYWJsZWQgPSB0cnVlO1xuXHRcdGltZ3MgPSAnaW1nJzsgLy8gcmVzZXQgdG8gYSBnZW5lcmljIHNlbGVjdG9yIGZvciB3YXRjaE1RXG5cdH1cblxuXHQvLyBpZiByZXF1ZXN0ZWQsIHdhdGNoIG1lZGlhIHF1ZXJpZXMgZm9yIG9iamVjdC1maXQgY2hhbmdlXG5cdGlmIChvcHRzLndhdGNoTVEpIHtcblx0XHR3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgZml4LmJpbmQobnVsbCwgaW1ncywge1xuXHRcdFx0c2tpcFRlc3Q6IG9wdHMuc2tpcFRlc3Rcblx0XHR9KSk7XG5cdH1cbn1cblxuZml4LnN1cHBvcnRzT2JqZWN0Rml0ID0gc3VwcG9ydHNPYmplY3RGaXQ7XG5maXguc3VwcG9ydHNPYmplY3RQb3NpdGlvbiA9IHN1cHBvcnRzT2JqZWN0UG9zaXRpb247XG5cbmhpamFja0F0dHJpYnV0ZXMoKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmaXg7XG4iLCJBcnJheS5wcm90b3R5cGUuaW5jbHVkZXN8fE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBcnJheS5wcm90b3R5cGUsXCJpbmNsdWRlc1wiLHt2YWx1ZTpmdW5jdGlvbihyLGUpe2lmKG51bGw9PXRoaXMpdGhyb3cgbmV3IFR5cGVFcnJvcignXCJ0aGlzXCIgaXMgbnVsbCBvciBub3QgZGVmaW5lZCcpO3ZhciB0PU9iamVjdCh0aGlzKSxuPXQubGVuZ3RoPj4+MDtpZigwPT09bilyZXR1cm4hMTtmb3IodmFyIGk9MHxlLG89TWF0aC5tYXgoaT49MD9pOm4tTWF0aC5hYnMoaSksMCk7bzxuOyl7aWYoZnVuY3Rpb24ocixlKXtyZXR1cm4gcj09PWV8fFwibnVtYmVyXCI9PXR5cGVvZiByJiZcIm51bWJlclwiPT10eXBlb2YgZSYmaXNOYU4ocikmJmlzTmFOKGUpfSh0W29dLHIpKXJldHVybiEwO28rK31yZXR1cm4hMX19KTsiLCIvKlxuICAgIHBvcnRhbC12dWVcbiAgICBWZXJzaW9uOiAxLjUuMVxuICAgIExpY2VuY2U6IE1JVFxuICAgIChjKSBUaG9yc3RlbiBMw7xuYm9yZ1xuICAqL1xuICBcbihmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG5cdHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyA/IG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKCd2dWUnKSkgOlxuXHR0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWyd2dWUnXSwgZmFjdG9yeSkgOlxuXHQoZ2xvYmFsLlBvcnRhbFZ1ZSA9IGZhY3RvcnkoZ2xvYmFsLlZ1ZSkpO1xufSh0aGlzLCAoZnVuY3Rpb24gKFZ1ZSkgeyAndXNlIHN0cmljdCc7XG5cblZ1ZSA9IFZ1ZSAmJiBWdWUuaGFzT3duUHJvcGVydHkoJ2RlZmF1bHQnKSA/IFZ1ZVsnZGVmYXVsdCddIDogVnVlO1xuXG52YXIgX3R5cGVvZiA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiID8gZnVuY3Rpb24gKG9iaikge1xuICByZXR1cm4gdHlwZW9mIG9iajtcbn0gOiBmdW5jdGlvbiAob2JqKSB7XG4gIHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqO1xufTtcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbnZhciBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkge1xuICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07XG5cbiAgICBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkge1xuICAgICAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0YXJnZXQ7XG59O1xuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbnZhciB0b0NvbnN1bWFibGVBcnJheSA9IGZ1bmN0aW9uIChhcnIpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkge1xuICAgIGZvciAodmFyIGkgPSAwLCBhcnIyID0gQXJyYXkoYXJyLmxlbmd0aCk7IGkgPCBhcnIubGVuZ3RoOyBpKyspIGFycjJbaV0gPSBhcnJbaV07XG5cbiAgICByZXR1cm4gYXJyMjtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gQXJyYXkuZnJvbShhcnIpO1xuICB9XG59O1xuXG5mdW5jdGlvbiBleHRyYWN0QXR0cmlidXRlcyhlbCkge1xuICB2YXIgbWFwID0gZWwuaGFzQXR0cmlidXRlcygpID8gZWwuYXR0cmlidXRlcyA6IFtdO1xuICB2YXIgYXR0cnMgPSB7fTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBtYXAubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgYXR0ciA9IG1hcFtpXTtcbiAgICBpZiAoYXR0ci52YWx1ZSkge1xuICAgICAgYXR0cnNbYXR0ci5uYW1lXSA9IGF0dHIudmFsdWUgPT09ICcnID8gdHJ1ZSA6IGF0dHIudmFsdWU7XG4gICAgfVxuICB9XG4gIHZhciBrbGFzcyA9IHZvaWQgMCxcbiAgICAgIHN0eWxlID0gdm9pZCAwO1xuICBpZiAoYXR0cnMuY2xhc3MpIHtcbiAgICBrbGFzcyA9IGF0dHJzLmNsYXNzO1xuICAgIGRlbGV0ZSBhdHRycy5jbGFzcztcbiAgfVxuICBpZiAoYXR0cnMuc3R5bGUpIHtcbiAgICBzdHlsZSA9IGF0dHJzLnN0eWxlO1xuICAgIGRlbGV0ZSBhdHRycy5zdHlsZTtcbiAgfVxuICB2YXIgZGF0YSA9IHtcbiAgICBhdHRyczogYXR0cnMsXG4gICAgY2xhc3M6IGtsYXNzLFxuICAgIHN0eWxlOiBzdHlsZVxuICB9O1xuICByZXR1cm4gZGF0YTtcbn1cblxuZnVuY3Rpb24gZnJlZXplKGl0ZW0pIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoaXRlbSkgfHwgKHR5cGVvZiBpdGVtID09PSAndW5kZWZpbmVkJyA/ICd1bmRlZmluZWQnIDogX3R5cGVvZihpdGVtKSkgPT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIE9iamVjdC5mcmVlemUoaXRlbSk7XG4gIH1cbiAgcmV0dXJuIGl0ZW07XG59XG5cbmZ1bmN0aW9uIGNvbWJpbmVQYXNzZW5nZXJzKHRyYW5zcG9ydHMpIHtcbiAgdmFyIHNsb3RQcm9wcyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG5cbiAgcmV0dXJuIHRyYW5zcG9ydHMucmVkdWNlKGZ1bmN0aW9uIChwYXNzZW5nZXJzLCB0cmFuc3BvcnQpIHtcbiAgICB2YXIgbmV3UGFzc2VuZ2VycyA9IHRyYW5zcG9ydC5wYXNzZW5nZXJzWzBdO1xuICAgIG5ld1Bhc3NlbmdlcnMgPSB0eXBlb2YgbmV3UGFzc2VuZ2VycyA9PT0gJ2Z1bmN0aW9uJyA/IG5ld1Bhc3NlbmdlcnMoc2xvdFByb3BzKSA6IHRyYW5zcG9ydC5wYXNzZW5nZXJzO1xuICAgIHJldHVybiBwYXNzZW5nZXJzLmNvbmNhdChuZXdQYXNzZW5nZXJzKTtcbiAgfSwgW10pO1xufVxuXG5mdW5jdGlvbiBzdGFibGVTb3J0KGFycmF5LCBjb21wYXJlRm4pIHtcbiAgcmV0dXJuIGFycmF5Lm1hcChmdW5jdGlvbiAodiwgaWR4KSB7XG4gICAgcmV0dXJuIFtpZHgsIHZdO1xuICB9KS5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgcmV0dXJuIHRoaXMoYVsxXSwgYlsxXSkgfHwgYVswXSAtIGJbMF07XG4gIH0uYmluZChjb21wYXJlRm4pKS5tYXAoZnVuY3Rpb24gKGMpIHtcbiAgICByZXR1cm4gY1sxXTtcbiAgfSk7XG59XG5cbnZhciB0cmFuc3BvcnRzID0ge307XG5cbnZhciBXb3JtaG9sZSA9IFZ1ZS5leHRlbmQoe1xuICBkYXRhOiBmdW5jdGlvbiBkYXRhKCkge1xuICAgIHJldHVybiB7IHRyYW5zcG9ydHM6IHRyYW5zcG9ydHMgfTtcbiAgfSxcbiAgbWV0aG9kczoge1xuICAgIG9wZW46IGZ1bmN0aW9uIG9wZW4odHJhbnNwb3J0KSB7XG4gICAgICB2YXIgdG8gPSB0cmFuc3BvcnQudG8sXG4gICAgICAgICAgZnJvbSA9IHRyYW5zcG9ydC5mcm9tLFxuICAgICAgICAgIHBhc3NlbmdlcnMgPSB0cmFuc3BvcnQucGFzc2VuZ2VycztcblxuICAgICAgaWYgKCF0byB8fCAhZnJvbSB8fCAhcGFzc2VuZ2VycykgcmV0dXJuO1xuXG4gICAgICB0cmFuc3BvcnQucGFzc2VuZ2VycyA9IGZyZWV6ZShwYXNzZW5nZXJzKTtcbiAgICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXModGhpcy50cmFuc3BvcnRzKTtcbiAgICAgIGlmIChrZXlzLmluZGV4T2YodG8pID09PSAtMSkge1xuICAgICAgICBWdWUuc2V0KHRoaXMudHJhbnNwb3J0cywgdG8sIFtdKTtcbiAgICAgIH1cblxuICAgICAgdmFyIGN1cnJlbnRJbmRleCA9IHRoaXMuZ2V0VHJhbnNwb3J0SW5kZXgodHJhbnNwb3J0KTtcbiAgICAgIC8vIENvcHlpbmcgdGhlIGFycmF5IGhlcmUgc28gdGhhdCB0aGUgUG9ydGFsVGFyZ2V0IGNoYW5nZSBldmVudCB3aWxsIGFjdHVhbGx5IGNvbnRhaW4gdHdvIGRpc3RpbmN0IGFycmF5c1xuICAgICAgdmFyIG5ld1RyYW5zcG9ydHMgPSB0aGlzLnRyYW5zcG9ydHNbdG9dLnNsaWNlKDApO1xuICAgICAgaWYgKGN1cnJlbnRJbmRleCA9PT0gLTEpIHtcbiAgICAgICAgbmV3VHJhbnNwb3J0cy5wdXNoKHRyYW5zcG9ydCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuZXdUcmFuc3BvcnRzW2N1cnJlbnRJbmRleF0gPSB0cmFuc3BvcnQ7XG4gICAgICB9XG4gICAgICB0aGlzLnRyYW5zcG9ydHNbdG9dID0gc3RhYmxlU29ydChuZXdUcmFuc3BvcnRzLCBmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICByZXR1cm4gYS5vcmRlciAtIGIub3JkZXI7XG4gICAgICB9KTtcbiAgICB9LFxuICAgIGNsb3NlOiBmdW5jdGlvbiBjbG9zZSh0cmFuc3BvcnQpIHtcbiAgICAgIHZhciBmb3JjZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogZmFsc2U7XG4gICAgICB2YXIgdG8gPSB0cmFuc3BvcnQudG8sXG4gICAgICAgICAgZnJvbSA9IHRyYW5zcG9ydC5mcm9tO1xuXG4gICAgICBpZiAoIXRvIHx8ICFmcm9tKSByZXR1cm47XG4gICAgICBpZiAoIXRoaXMudHJhbnNwb3J0c1t0b10pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoZm9yY2UpIHtcbiAgICAgICAgdGhpcy50cmFuc3BvcnRzW3RvXSA9IFtdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5nZXRUcmFuc3BvcnRJbmRleCh0cmFuc3BvcnQpO1xuICAgICAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgICAgIC8vIENvcHlpbmcgdGhlIGFycmF5IGhlcmUgc28gdGhhdCB0aGUgUG9ydGFsVGFyZ2V0IGNoYW5nZSBldmVudCB3aWxsIGFjdHVhbGx5IGNvbnRhaW4gdHdvIGRpc3RpbmN0IGFycmF5c1xuICAgICAgICAgIHZhciBuZXdUcmFuc3BvcnRzID0gdGhpcy50cmFuc3BvcnRzW3RvXS5zbGljZSgwKTtcbiAgICAgICAgICBuZXdUcmFuc3BvcnRzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgdGhpcy50cmFuc3BvcnRzW3RvXSA9IG5ld1RyYW5zcG9ydHM7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIGhhc1RhcmdldDogZnVuY3Rpb24gaGFzVGFyZ2V0KHRvKSB7XG4gICAgICByZXR1cm4gdGhpcy50cmFuc3BvcnRzLmhhc093blByb3BlcnR5KHRvKTtcbiAgICB9LFxuICAgIGhhc0NvbnRlbnRGb3I6IGZ1bmN0aW9uIGhhc0NvbnRlbnRGb3IodG8pIHtcbiAgICAgIGlmICghdGhpcy50cmFuc3BvcnRzW3RvXSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5nZXRDb250ZW50Rm9yKHRvKS5sZW5ndGggPiAwO1xuICAgIH0sXG4gICAgZ2V0U291cmNlRm9yOiBmdW5jdGlvbiBnZXRTb3VyY2VGb3IodG8pIHtcbiAgICAgIHJldHVybiB0aGlzLnRyYW5zcG9ydHNbdG9dICYmIHRoaXMudHJhbnNwb3J0c1t0b11bMF0uZnJvbTtcbiAgICB9LFxuICAgIGdldENvbnRlbnRGb3I6IGZ1bmN0aW9uIGdldENvbnRlbnRGb3IodG8pIHtcbiAgICAgIHZhciB0cmFuc3BvcnRzID0gdGhpcy50cmFuc3BvcnRzW3RvXTtcbiAgICAgIGlmICghdHJhbnNwb3J0cykge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNvbWJpbmVQYXNzZW5nZXJzKHRyYW5zcG9ydHMpO1xuICAgIH0sXG4gICAgZ2V0VHJhbnNwb3J0SW5kZXg6IGZ1bmN0aW9uIGdldFRyYW5zcG9ydEluZGV4KF9yZWYpIHtcbiAgICAgIHZhciB0byA9IF9yZWYudG8sXG4gICAgICAgICAgZnJvbSA9IF9yZWYuZnJvbTtcblxuICAgICAgZm9yICh2YXIgaSBpbiB0aGlzLnRyYW5zcG9ydHNbdG9dKSB7XG4gICAgICAgIGlmICh0aGlzLnRyYW5zcG9ydHNbdG9dW2ldLmZyb20gPT09IGZyb20pIHtcbiAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIC0xO1xuICAgIH1cbiAgfVxufSk7XG5cbnZhciB3b3JtaG9sZSA9IG5ldyBXb3JtaG9sZSh0cmFuc3BvcnRzKTtcblxudmFyIG5lc3RSRSA9IC9eKGF0dHJzfHByb3BzfG9ufG5hdGl2ZU9ufGNsYXNzfHN0eWxlfGhvb2spJC87XG5cbnZhciBiYWJlbEhlbHBlclZ1ZUpzeE1lcmdlUHJvcHMgPSBmdW5jdGlvbiBtZXJnZUpTWFByb3BzIChvYmpzKSB7XG4gIHJldHVybiBvYmpzLnJlZHVjZShmdW5jdGlvbiAoYSwgYikge1xuICAgIHZhciBhYSwgYmIsIGtleSwgbmVzdGVkS2V5LCB0ZW1wO1xuICAgIGZvciAoa2V5IGluIGIpIHtcbiAgICAgIGFhID0gYVtrZXldO1xuICAgICAgYmIgPSBiW2tleV07XG4gICAgICBpZiAoYWEgJiYgbmVzdFJFLnRlc3Qoa2V5KSkge1xuICAgICAgICAvLyBub3JtYWxpemUgY2xhc3NcbiAgICAgICAgaWYgKGtleSA9PT0gJ2NsYXNzJykge1xuICAgICAgICAgIGlmICh0eXBlb2YgYWEgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICB0ZW1wID0gYWE7XG4gICAgICAgICAgICBhW2tleV0gPSBhYSA9IHt9O1xuICAgICAgICAgICAgYWFbdGVtcF0gPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodHlwZW9mIGJiID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgdGVtcCA9IGJiO1xuICAgICAgICAgICAgYltrZXldID0gYmIgPSB7fTtcbiAgICAgICAgICAgIGJiW3RlbXBdID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGtleSA9PT0gJ29uJyB8fCBrZXkgPT09ICduYXRpdmVPbicgfHwga2V5ID09PSAnaG9vaycpIHtcbiAgICAgICAgICAvLyBtZXJnZSBmdW5jdGlvbnNcbiAgICAgICAgICBmb3IgKG5lc3RlZEtleSBpbiBiYikge1xuICAgICAgICAgICAgYWFbbmVzdGVkS2V5XSA9IG1lcmdlRm4oYWFbbmVzdGVkS2V5XSwgYmJbbmVzdGVkS2V5XSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoYWEpKSB7XG4gICAgICAgICAgYVtrZXldID0gYWEuY29uY2F0KGJiKTtcbiAgICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGJiKSkge1xuICAgICAgICAgIGFba2V5XSA9IFthYV0uY29uY2F0KGJiKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBmb3IgKG5lc3RlZEtleSBpbiBiYikge1xuICAgICAgICAgICAgYWFbbmVzdGVkS2V5XSA9IGJiW25lc3RlZEtleV07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhW2tleV0gPSBiW2tleV07XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBhXG4gIH0sIHt9KVxufTtcblxuZnVuY3Rpb24gbWVyZ2VGbiAoYSwgYikge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIGEgJiYgYS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIGIgJiYgYi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9XG59XG5cbi8vIGltcG9ydCB7IHRyYW5zcG9ydHMgfSBmcm9tICcuL3dvcm1ob2xlJ1xudmFyIFBvcnRhbFRhcmdldCA9IHtcbiAgYWJzdHJhY3Q6IGZhbHNlLFxuICBuYW1lOiAncG9ydGFsVGFyZ2V0JyxcbiAgcHJvcHM6IHtcbiAgICBhdHRyaWJ1dGVzOiB7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDogZnVuY3Rpb24gX2RlZmF1bHQoKSB7XG4gICAgICAgIHJldHVybiB7fTtcbiAgICAgIH0gfSxcbiAgICBtdWx0aXBsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIG5hbWU6IHsgdHlwZTogU3RyaW5nLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHNsaW06IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBzbG90UHJvcHM6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiBmdW5jdGlvbiBfZGVmYXVsdCgpIHtcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgfSB9LFxuICAgIHRhZzogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICdkaXYnIH0sXG4gICAgdHJhbnNpdGlvbjogeyB0eXBlOiBbQm9vbGVhbiwgU3RyaW5nLCBPYmplY3RdLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIHRyYW5zaXRpb25FdmVudHM6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiBmdW5jdGlvbiBfZGVmYXVsdCgpIHtcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgfSB9XG4gIH0sXG4gIGRhdGE6IGZ1bmN0aW9uIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRyYW5zcG9ydHM6IHdvcm1ob2xlLnRyYW5zcG9ydHMsXG4gICAgICBmaXJzdFJlbmRlcjogdHJ1ZVxuICAgIH07XG4gIH0sXG4gIGNyZWF0ZWQ6IGZ1bmN0aW9uIGNyZWF0ZWQoKSB7XG4gICAgaWYgKCF0aGlzLnRyYW5zcG9ydHNbdGhpcy5uYW1lXSkge1xuICAgICAgdGhpcy4kc2V0KHRoaXMudHJhbnNwb3J0cywgdGhpcy5uYW1lLCBbXSk7XG4gICAgfVxuICB9LFxuICBtb3VudGVkOiBmdW5jdGlvbiBtb3VudGVkKCkge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICB0aGlzLnVud2F0Y2ggPSB0aGlzLiR3YXRjaCgnb3duVHJhbnNwb3J0cycsIHRoaXMuZW1pdENoYW5nZSk7XG4gICAgdGhpcy4kbmV4dFRpY2soZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKF90aGlzLnRyYW5zaXRpb24pIHtcbiAgICAgICAgLy8gb25seSB3aGVuIHdlIGhhdmUgYSB0cmFuc2l0aW9uLCBiZWNhdXNlIGl0IGNhdXNlcyBhIHJlLXJlbmRlclxuICAgICAgICBfdGhpcy5maXJzdFJlbmRlciA9IGZhbHNlO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGlmICh0aGlzLiRvcHRpb25zLmFic3RyYWN0KSB7XG4gICAgICB0aGlzLiRvcHRpb25zLmFic3RyYWN0ID0gZmFsc2U7XG4gICAgfVxuICB9LFxuICB1cGRhdGVkOiBmdW5jdGlvbiB1cGRhdGVkKCkge1xuICAgIGlmICh0aGlzLiRvcHRpb25zLmFic3RyYWN0KSB7XG4gICAgICB0aGlzLiRvcHRpb25zLmFic3RyYWN0ID0gZmFsc2U7XG4gICAgfVxuICB9LFxuICBiZWZvcmVEZXN0cm95OiBmdW5jdGlvbiBiZWZvcmVEZXN0cm95KCkge1xuICAgIHRoaXMudW53YXRjaCgpO1xuICB9LFxuXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBvd25UcmFuc3BvcnRzOiBmdW5jdGlvbiBvd25UcmFuc3BvcnRzKCkge1xuICAgICAgdmFyIHRyYW5zcG9ydHMkJDEgPSB0aGlzLnRyYW5zcG9ydHNbdGhpcy5uYW1lXSB8fCBbXTtcbiAgICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XG4gICAgICAgIHJldHVybiB0cmFuc3BvcnRzJCQxO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRyYW5zcG9ydHMkJDEubGVuZ3RoID09PSAwID8gW10gOiBbdHJhbnNwb3J0cyQkMVt0cmFuc3BvcnRzJCQxLmxlbmd0aCAtIDFdXTtcbiAgICB9LFxuICAgIHBhc3NlbmdlcnM6IGZ1bmN0aW9uIHBhc3NlbmdlcnMoKSB7XG4gICAgICByZXR1cm4gY29tYmluZVBhc3NlbmdlcnModGhpcy5vd25UcmFuc3BvcnRzLCB0aGlzLnNsb3RQcm9wcyk7XG4gICAgfSxcbiAgICBoYXNBdHRyaWJ1dGVzOiBmdW5jdGlvbiBoYXNBdHRyaWJ1dGVzKCkge1xuICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuYXR0cmlidXRlcykubGVuZ3RoID4gMDtcbiAgICB9LFxuICAgIHdpdGhUcmFuc2l0aW9uOiBmdW5jdGlvbiB3aXRoVHJhbnNpdGlvbigpIHtcbiAgICAgIHJldHVybiAhIXRoaXMudHJhbnNpdGlvbjtcbiAgICB9LFxuICAgIHRyYW5zaXRpb25EYXRhOiBmdW5jdGlvbiB0cmFuc2l0aW9uRGF0YSgpIHtcbiAgICAgIHZhciB0ID0gdGhpcy50cmFuc2l0aW9uO1xuICAgICAgdmFyIGRhdGEgPSB7fTtcblxuICAgICAgLy8gRHVyaW5nIGZpcnN0IHJlbmRlciwgd2UgcmVuZGVyIGEgZHVtYiB0cmFuc2l0aW9uIHdpdGhvdXQgYW55IGNsYXNzZXMsIGV2ZW50cyBhbmQgYSBmYWtlIG5hbWVcbiAgICAgIC8vIFdlIGhhdmUgdG8gZG8gdGhpcyB0byBlbXVsYXRlIHRoZSBub3JtYWwgYmVoYXZpb3VyIG9mIHRyYW5zaXRpb25zIHdpdGhvdXQgYGFwcGVhcmBcbiAgICAgIC8vIGJlY2F1c2UgaW4gUG9ydGFscywgdHJhbnNpdGlvbnMgY2FuIGJlaGF2ZSBhcyBpZiBhcHBlYXIgd2FzIGRlZmluZWQgdW5kZXIgY2VydGFpbiBjb25kaXRpb25zLlxuICAgICAgaWYgKHRoaXMuZmlyc3RSZW5kZXIgJiYgX3R5cGVvZih0aGlzLnRyYW5zaXRpb24pID09PSAnb2JqZWN0JyAmJiAhdGhpcy50cmFuc2l0aW9uLmFwcGVhcikge1xuICAgICAgICBkYXRhLnByb3BzID0geyBuYW1lOiAnX19ub3RyYW5zdGl0aW9uX19wb3J0YWwtdnVlX18nIH07XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIHQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGRhdGEucHJvcHMgPSB7IG5hbWU6IHQgfTtcbiAgICAgIH0gZWxzZSBpZiAoKHR5cGVvZiB0ID09PSAndW5kZWZpbmVkJyA/ICd1bmRlZmluZWQnIDogX3R5cGVvZih0KSkgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGRhdGEucHJvcHMgPSB0O1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMucmVuZGVyU2xpbSkge1xuICAgICAgICBkYXRhLnByb3BzLnRhZyA9IHRoaXMudGFnO1xuICAgICAgfVxuICAgICAgZGF0YS5vbiA9IHRoaXMudHJhbnNpdGlvbkV2ZW50cztcblxuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfSxcbiAgICB0cmFuc3BvcnRlZENsYXNzZXM6IGZ1bmN0aW9uIHRyYW5zcG9ydGVkQ2xhc3NlcygpIHtcbiAgICAgIHJldHVybiB0aGlzLm93blRyYW5zcG9ydHMubWFwKGZ1bmN0aW9uICh0cmFuc3BvcnQpIHtcbiAgICAgICAgcmV0dXJuIHRyYW5zcG9ydC5jbGFzcztcbiAgICAgIH0pLnJlZHVjZShmdW5jdGlvbiAoYXJyYXksIHN1YmFycmF5KSB7XG4gICAgICAgIHJldHVybiBhcnJheS5jb25jYXQoc3ViYXJyYXkpO1xuICAgICAgfSwgW10pO1xuICAgICAgLy8uZmlsdGVyKChzdHJpbmcsIGluZGV4LCBhcnJheSkgPT4gYXJyYXkuaW5kZXhPZihzdHJpbmcpID09PSBpbmRleClcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGVtaXRDaGFuZ2U6IGZ1bmN0aW9uIGVtaXRDaGFuZ2UobmV3VHJhbnNwb3J0cywgb2xkVHJhbnNwb3J0cykge1xuICAgICAgaWYgKHRoaXMubXVsdGlwbGUpIHtcbiAgICAgICAgdGhpcy4kZW1pdCgnY2hhbmdlJywgW10uY29uY2F0KHRvQ29uc3VtYWJsZUFycmF5KG5ld1RyYW5zcG9ydHMpKSwgW10uY29uY2F0KHRvQ29uc3VtYWJsZUFycmF5KG9sZFRyYW5zcG9ydHMpKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgbmV3VHJhbnNwb3J0ID0gbmV3VHJhbnNwb3J0cy5sZW5ndGggPT09IDAgPyB1bmRlZmluZWQgOiBuZXdUcmFuc3BvcnRzWzBdO1xuICAgICAgICB2YXIgb2xkVHJhbnNwb3J0ID0gb2xkVHJhbnNwb3J0cy5sZW5ndGggPT09IDAgPyB1bmRlZmluZWQgOiBvbGRUcmFuc3BvcnRzWzBdO1xuICAgICAgICB0aGlzLiRlbWl0KCdjaGFuZ2UnLCBfZXh0ZW5kcyh7fSwgbmV3VHJhbnNwb3J0KSwgX2V4dGVuZHMoe30sIG9sZFRyYW5zcG9ydCkpO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyBjYW4ndCBiZSBhIGNvbXB1dGVkIHByb3AgYmVjYXVzZSBpdCBoYXMgdG8gXCJyZWFjdFwiIHRvICRzbG90IGNoYW5nZXMuXG4gICAgY2hpbGRyZW46IGZ1bmN0aW9uIGNoaWxkcmVuKCkge1xuICAgICAgcmV0dXJuIHRoaXMucGFzc2VuZ2Vycy5sZW5ndGggIT09IDAgPyB0aGlzLnBhc3NlbmdlcnMgOiB0aGlzLiRzbG90cy5kZWZhdWx0IHx8IFtdO1xuICAgIH0sXG4gICAgbm9XcmFwcGVyOiBmdW5jdGlvbiBub1dyYXBwZXIoKSB7XG4gICAgICB2YXIgbm9XcmFwcGVyID0gIXRoaXMuaGFzQXR0cmlidXRlcyAmJiB0aGlzLnNsaW07XG4gICAgICBpZiAobm9XcmFwcGVyICYmIHRoaXMuY2hpbGRyZW4oKS5sZW5ndGggPiAxKSB7XG4gICAgICAgIGNvbnNvbGUud2FybignW3BvcnRhbC12dWVdOiBQb3J0YWxUYXJnZXQgd2l0aCBgc2xpbWAgb3B0aW9uIHJlY2VpdmVkIG1vcmUgdGhhbiBvbmUgY2hpbGQgZWxlbWVudC4nKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBub1dyYXBwZXI7XG4gICAgfVxuICB9LFxuICByZW5kZXI6IGZ1bmN0aW9uIHJlbmRlcihoKSB7XG4gICAgdGhpcy4kb3B0aW9ucy5hYnN0cmFjdCA9IHRydWU7XG4gICAgdmFyIG5vV3JhcHBlciA9IHRoaXMubm9XcmFwcGVyKCk7XG4gICAgdmFyIGNoaWxkcmVuID0gdGhpcy5jaGlsZHJlbigpO1xuICAgIHZhciBUcmFuc2l0aW9uVHlwZSA9IG5vV3JhcHBlciA/ICd0cmFuc2l0aW9uJyA6ICd0cmFuc2l0aW9uLWdyb3VwJztcbiAgICB2YXIgVGFnID0gdGhpcy50YWc7XG5cbiAgICBpZiAodGhpcy53aXRoVHJhbnNpdGlvbikge1xuICAgICAgcmV0dXJuIGgoXG4gICAgICAgIFRyYW5zaXRpb25UeXBlLFxuICAgICAgICBiYWJlbEhlbHBlclZ1ZUpzeE1lcmdlUHJvcHMoW3RoaXMudHJhbnNpdGlvbkRhdGEsIHsgJ2NsYXNzJzogJ3Z1ZS1wb3J0YWwtdGFyZ2V0JyB9XSksXG4gICAgICAgIFtjaGlsZHJlbl1cbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vV3JhcHBlciA/IGNoaWxkcmVuWzBdIDogaChcbiAgICAgIFRhZyxcbiAgICAgIGJhYmVsSGVscGVyVnVlSnN4TWVyZ2VQcm9wcyhbe1xuICAgICAgICAnY2xhc3MnOiAndnVlLXBvcnRhbC10YXJnZXQgJyArIHRoaXMudHJhbnNwb3J0ZWRDbGFzc2VzLmpvaW4oJyAnKVxuICAgICAgfSwgdGhpcy5hdHRyaWJ1dGVzXSksXG4gICAgICBbY2hpbGRyZW5dXG4gICAgKTtcbiAgfVxufTtcblxudmFyIGluQnJvd3NlciA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnO1xuXG52YXIgcGlkID0gMTtcblxudmFyIFBvcnRhbCA9IHtcbiAgYWJzdHJhY3Q6IGZhbHNlLFxuICBuYW1lOiAncG9ydGFsJyxcbiAgcHJvcHM6IHtcbiAgICAvKiBnbG9iYWwgSFRNTEVsZW1lbnQgKi9cbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIG5hbWU6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBmdW5jdGlvbiBfZGVmYXVsdCgpIHtcbiAgICAgICAgcmV0dXJuIFN0cmluZyhwaWQrKyk7XG4gICAgICB9IH0sXG4gICAgb3JkZXI6IHsgdHlwZTogTnVtYmVyLCBkZWZhdWx0OiAwIH0sXG4gICAgc2xpbTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIHNsb3RQcm9wczogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6IGZ1bmN0aW9uIF9kZWZhdWx0KCkge1xuICAgICAgICByZXR1cm4ge307XG4gICAgICB9IH0sXG4gICAgdGFnOiB7IHR5cGU6IFtTdHJpbmddLCBkZWZhdWx0OiAnRElWJyB9LFxuICAgIHRhcmdldEVsOiB7IHR5cGU6IGluQnJvd3NlciA/IFtTdHJpbmcsIEhUTUxFbGVtZW50XSA6IFN0cmluZyB9LFxuICAgIHRhcmdldENsYXNzOiB7IHR5cGU6IFN0cmluZyB9LFxuICAgIHRvOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiBmdW5jdGlvbiBfZGVmYXVsdCgpIHtcbiAgICAgICAgcmV0dXJuIFN0cmluZyhNYXRoLnJvdW5kKE1hdGgucmFuZG9tKCkgKiAxMDAwMDAwMCkpO1xuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtb3VudGVkOiBmdW5jdGlvbiBtb3VudGVkKCkge1xuICAgIGlmICh0aGlzLnRhcmdldEVsKSB7XG4gICAgICB0aGlzLm1vdW50VG9UYXJnZXQoKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLmRpc2FibGVkKSB7XG4gICAgICB0aGlzLnNlbmRVcGRhdGUoKTtcbiAgICB9XG4gICAgLy8gUmVzZXQgaGFjayB0byBtYWtlIGNoaWxkIGNvbXBvbmVudHMgc2tpcCB0aGUgcG9ydGFsIHdoZW4gZGVmaW5pbmcgdGhlaXIgJHBhcmVudFxuICAgIC8vIHdhcyBzZXQgdG8gdHJ1ZSBkdXJpbmcgcmVuZGVyIHdoZW4gd2UgcmVuZGVyIHNvbWV0aGluZyBsb2NhbGx5LlxuICAgIGlmICh0aGlzLiRvcHRpb25zLmFic3RyYWN0KSB7XG4gICAgICB0aGlzLiRvcHRpb25zLmFic3RyYWN0ID0gZmFsc2U7XG4gICAgfVxuICB9LFxuICB1cGRhdGVkOiBmdW5jdGlvbiB1cGRhdGVkKCkge1xuICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XG4gICAgICB0aGlzLmNsZWFyKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2VuZFVwZGF0ZSgpO1xuICAgIH1cbiAgICAvLyBSZXNldCBoYWNrIHRvIG1ha2UgY2hpbGQgY29tcG9uZW50cyBza2lwIHRoZSBwb3J0YWwgd2hlbiBkZWZpbmluZyB0aGVpciAkcGFyZW50XG4gICAgLy8gd2FzIHNldCB0byB0cnVlIGR1cmluZyByZW5kZXIgd2hlbiB3ZSByZW5kZXIgc29tZXRoaW5nIGxvY2FsbHkuXG4gICAgaWYgKHRoaXMuJG9wdGlvbnMuYWJzdHJhY3QpIHtcbiAgICAgIHRoaXMuJG9wdGlvbnMuYWJzdHJhY3QgPSBmYWxzZTtcbiAgICB9XG4gIH0sXG4gIGJlZm9yZURlc3Ryb3k6IGZ1bmN0aW9uIGJlZm9yZURlc3Ryb3koKSB7XG4gICAgdGhpcy5jbGVhcigpO1xuICAgIGlmICh0aGlzLm1vdW50ZWRDb21wKSB7XG4gICAgICB0aGlzLm1vdW50ZWRDb21wLiRkZXN0cm95KCk7XG4gICAgfVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgdG86IGZ1bmN0aW9uIHRvKG5ld1ZhbHVlLCBvbGRWYWx1ZSkge1xuICAgICAgb2xkVmFsdWUgJiYgb2xkVmFsdWUgIT09IG5ld1ZhbHVlICYmIHRoaXMuY2xlYXIob2xkVmFsdWUpO1xuICAgICAgdGhpcy5zZW5kVXBkYXRlKCk7XG4gICAgfSxcbiAgICB0YXJnZXRFbDogZnVuY3Rpb24gdGFyZ2V0RWwobmV3VmFsdWUsIG9sZFZhbHVlKSB7XG4gICAgICBpZiAobmV3VmFsdWUpIHtcbiAgICAgICAgdGhpcy5tb3VudFRvVGFyZ2V0KCk7XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBub3JtYWxpemVkU2xvdHM6IGZ1bmN0aW9uIG5vcm1hbGl6ZWRTbG90cygpIHtcbiAgICAgIHJldHVybiB0aGlzLiRzY29wZWRTbG90cy5kZWZhdWx0ID8gW3RoaXMuJHNjb3BlZFNsb3RzLmRlZmF1bHRdIDogdGhpcy4kc2xvdHMuZGVmYXVsdDtcbiAgICB9LFxuICAgIHNlbmRVcGRhdGU6IGZ1bmN0aW9uIHNlbmRVcGRhdGUoKSB7XG4gICAgICB2YXIgc2xvdENvbnRlbnQgPSB0aGlzLm5vcm1hbGl6ZWRTbG90cygpO1xuXG4gICAgICBpZiAoc2xvdENvbnRlbnQpIHtcbiAgICAgICAgd29ybWhvbGUub3Blbih7XG4gICAgICAgICAgZnJvbTogdGhpcy5uYW1lLFxuICAgICAgICAgIHRvOiB0aGlzLnRvLFxuICAgICAgICAgIHBhc3NlbmdlcnM6IFtdLmNvbmNhdCh0b0NvbnN1bWFibGVBcnJheShzbG90Q29udGVudCkpLFxuICAgICAgICAgIGNsYXNzOiB0aGlzLnRhcmdldENsYXNzICYmIHRoaXMudGFyZ2V0Q2xhc3Muc3BsaXQoJyAnKSxcbiAgICAgICAgICBvcmRlcjogdGhpcy5vcmRlclxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuY2xlYXIoKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGNsZWFyOiBmdW5jdGlvbiBjbGVhcih0YXJnZXQpIHtcbiAgICAgIHdvcm1ob2xlLmNsb3NlKHtcbiAgICAgICAgZnJvbTogdGhpcy5uYW1lLFxuICAgICAgICB0bzogdGFyZ2V0IHx8IHRoaXMudG9cbiAgICAgIH0pO1xuICAgIH0sXG4gICAgbW91bnRUb1RhcmdldDogZnVuY3Rpb24gbW91bnRUb1RhcmdldCgpIHtcbiAgICAgIHZhciBlbCA9IHZvaWQgMDtcbiAgICAgIHZhciB0YXJnZXQgPSB0aGlzLnRhcmdldEVsO1xuXG4gICAgICBpZiAodHlwZW9mIHRhcmdldCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgZWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHRhcmdldCk7XG4gICAgICB9IGVsc2UgaWYgKHRhcmdldCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG4gICAgICAgIGVsID0gdGFyZ2V0O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS53YXJuKCdbdnVlLXBvcnRhbF06IHZhbHVlIG9mIHRhcmdldEVsIG11c3QgYmUgb2YgdHlwZSBTdHJpbmcgb3IgSFRNTEVsZW1lbnQnKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoZWwpIHtcbiAgICAgICAgdmFyIG5ld1RhcmdldCA9IG5ldyBWdWUoX2V4dGVuZHMoe30sIFBvcnRhbFRhcmdldCwge1xuICAgICAgICAgIHBhcmVudDogdGhpcyxcbiAgICAgICAgICBwcm9wc0RhdGE6IHtcbiAgICAgICAgICAgIG5hbWU6IHRoaXMudG8sXG4gICAgICAgICAgICB0YWc6IGVsLnRhZ05hbWUsXG4gICAgICAgICAgICBhdHRyaWJ1dGVzOiBleHRyYWN0QXR0cmlidXRlcyhlbClcbiAgICAgICAgICB9XG4gICAgICAgIH0pKTtcbiAgICAgICAgbmV3VGFyZ2V0LiRtb3VudChlbCk7XG4gICAgICAgIHRoaXMubW91bnRlZENvbXAgPSBuZXdUYXJnZXQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLndhcm4oJ1t2dWUtcG9ydGFsXTogVGhlIHNwZWNpZmllZCB0YXJnZXRFbCAnICsgdGFyZ2V0ICsgJyB3YXMgbm90IGZvdW5kJyk7XG4gICAgICB9XG4gICAgfSxcbiAgICBub3JtYWxpemVDaGlsZHJlbjogZnVuY3Rpb24gbm9ybWFsaXplQ2hpbGRyZW4oY2hpbGRyZW4pIHtcbiAgICAgIHJldHVybiB0eXBlb2YgY2hpbGRyZW4gPT09ICdmdW5jdGlvbicgPyBjaGlsZHJlbih0aGlzLnNsb3RQcm9wcykgOiBjaGlsZHJlbjtcbiAgICB9XG4gIH0sXG5cbiAgcmVuZGVyOiBmdW5jdGlvbiByZW5kZXIoaCkge1xuICAgIHZhciBjaGlsZHJlbiA9IHRoaXMuJHNsb3RzLmRlZmF1bHQgfHwgdGhpcy4kc2NvcGVkU2xvdHMuZGVmYXVsdCB8fCBbXTtcbiAgICB2YXIgVGFnID0gdGhpcy50YWc7XG4gICAgaWYgKGNoaWxkcmVuLmxlbmd0aCAmJiB0aGlzLmRpc2FibGVkKSB7XG4gICAgICAvLyBoYWNrIHRvIG1ha2UgY2hpbGQgY29tcG9uZW50cyBza2lwIHRoZSBwb3J0YWwgd2hlbiBkZWZpbmluZyB0aGVpciAkcGFyZW50XG4gICAgICB0aGlzLiRvcHRpb25zLmFic3RyYWN0ID0gdHJ1ZTtcbiAgICAgIHJldHVybiBjaGlsZHJlbi5sZW5ndGggPD0gMSAmJiB0aGlzLnNsaW0gPyBjaGlsZHJlblswXSA6IGgoVGFnLCBbdGhpcy5ub3JtYWxpemVDaGlsZHJlbihjaGlsZHJlbildKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGgoVGFnLCB7XG4gICAgICAgICdjbGFzcyc6ICd2LXBvcnRhbCcsXG4gICAgICAgIHN0eWxlOiAnZGlzcGxheTogbm9uZScsXG4gICAgICAgIGtleTogJ3YtcG9ydGFsLXBsYWNlaG9sZGVyJ1xuICAgICAgfSk7XG4gICAgICAvLyBoKHRoaXMudGFnLCB7IGNsYXNzOiB7ICd2LXBvcnRhbCc6IHRydWUgfSwgc3R5bGU6IHsgZGlzcGxheTogJ25vbmUnIH0sIGtleTogJ3YtcG9ydGFsLXBsYWNlaG9sZGVyJyB9KVxuICAgIH1cbiAgfVxufTtcblxuZnVuY3Rpb24gaW5zdGFsbChWdWUkJDEpIHtcbiAgdmFyIG9wdHMgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9O1xuXG4gIFZ1ZSQkMS5jb21wb25lbnQob3B0cy5wb3J0YWxOYW1lIHx8ICdQb3J0YWwnLCBQb3J0YWwpO1xuICBWdWUkJDEuY29tcG9uZW50KG9wdHMucG9ydGFsVGFyZ2V0TmFtZSB8fCAnUG9ydGFsVGFyZ2V0JywgUG9ydGFsVGFyZ2V0KTtcbn1cbmlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuVnVlKSB7XG4gIHdpbmRvdy5WdWUudXNlKHsgaW5zdGFsbDogaW5zdGFsbCB9KTtcbn1cblxudmFyIGluZGV4ID0ge1xuICBpbnN0YWxsOiBpbnN0YWxsLFxuICBQb3J0YWw6IFBvcnRhbCxcbiAgUG9ydGFsVGFyZ2V0OiBQb3J0YWxUYXJnZXQsXG4gIFdvcm1ob2xlOiB3b3JtaG9sZVxufTtcblxucmV0dXJuIGluZGV4O1xuXG59KSkpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cG9ydGFsLXZ1ZS5qcy5tYXBcbiIsIi8vIHNoaW0gZm9yIHVzaW5nIHByb2Nlc3MgaW4gYnJvd3NlclxudmFyIHByb2Nlc3MgPSBtb2R1bGUuZXhwb3J0cyA9IHt9O1xuXG4vLyBjYWNoZWQgZnJvbSB3aGF0ZXZlciBnbG9iYWwgaXMgcHJlc2VudCBzbyB0aGF0IHRlc3QgcnVubmVycyB0aGF0IHN0dWIgaXRcbi8vIGRvbid0IGJyZWFrIHRoaW5ncy4gIEJ1dCB3ZSBuZWVkIHRvIHdyYXAgaXQgaW4gYSB0cnkgY2F0Y2ggaW4gY2FzZSBpdCBpc1xuLy8gd3JhcHBlZCBpbiBzdHJpY3QgbW9kZSBjb2RlIHdoaWNoIGRvZXNuJ3QgZGVmaW5lIGFueSBnbG9iYWxzLiAgSXQncyBpbnNpZGUgYVxuLy8gZnVuY3Rpb24gYmVjYXVzZSB0cnkvY2F0Y2hlcyBkZW9wdGltaXplIGluIGNlcnRhaW4gZW5naW5lcy5cblxudmFyIGNhY2hlZFNldFRpbWVvdXQ7XG52YXIgY2FjaGVkQ2xlYXJUaW1lb3V0O1xuXG5mdW5jdGlvbiBkZWZhdWx0U2V0VGltb3V0KCkge1xuICAgIHRocm93IG5ldyBFcnJvcignc2V0VGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZCcpO1xufVxuZnVuY3Rpb24gZGVmYXVsdENsZWFyVGltZW91dCAoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdjbGVhclRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQnKTtcbn1cbihmdW5jdGlvbiAoKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgaWYgKHR5cGVvZiBzZXRUaW1lb3V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gc2V0VGltZW91dDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBkZWZhdWx0U2V0VGltb3V0O1xuICAgICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gZGVmYXVsdFNldFRpbW91dDtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgaWYgKHR5cGVvZiBjbGVhclRpbWVvdXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGNsZWFyVGltZW91dDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGRlZmF1bHRDbGVhclRpbWVvdXQ7XG4gICAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGRlZmF1bHRDbGVhclRpbWVvdXQ7XG4gICAgfVxufSAoKSlcbmZ1bmN0aW9uIHJ1blRpbWVvdXQoZnVuKSB7XG4gICAgaWYgKGNhY2hlZFNldFRpbWVvdXQgPT09IHNldFRpbWVvdXQpIHtcbiAgICAgICAgLy9ub3JtYWwgZW52aXJvbWVudHMgaW4gc2FuZSBzaXR1YXRpb25zXG4gICAgICAgIHJldHVybiBzZXRUaW1lb3V0KGZ1biwgMCk7XG4gICAgfVxuICAgIC8vIGlmIHNldFRpbWVvdXQgd2Fzbid0IGF2YWlsYWJsZSBidXQgd2FzIGxhdHRlciBkZWZpbmVkXG4gICAgaWYgKChjYWNoZWRTZXRUaW1lb3V0ID09PSBkZWZhdWx0U2V0VGltb3V0IHx8ICFjYWNoZWRTZXRUaW1lb3V0KSAmJiBzZXRUaW1lb3V0KSB7XG4gICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBzZXRUaW1lb3V0O1xuICAgICAgICByZXR1cm4gc2V0VGltZW91dChmdW4sIDApO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICAvLyB3aGVuIHdoZW4gc29tZWJvZHkgaGFzIHNjcmV3ZWQgd2l0aCBzZXRUaW1lb3V0IGJ1dCBubyBJLkUuIG1hZGRuZXNzXG4gICAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0KGZ1biwgMCk7XG4gICAgfSBjYXRjaChlKXtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIFdoZW4gd2UgYXJlIGluIEkuRS4gYnV0IHRoZSBzY3JpcHQgaGFzIGJlZW4gZXZhbGVkIHNvIEkuRS4gZG9lc24ndCB0cnVzdCB0aGUgZ2xvYmFsIG9iamVjdCB3aGVuIGNhbGxlZCBub3JtYWxseVxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZFNldFRpbWVvdXQuY2FsbChudWxsLCBmdW4sIDApO1xuICAgICAgICB9IGNhdGNoKGUpe1xuICAgICAgICAgICAgLy8gc2FtZSBhcyBhYm92ZSBidXQgd2hlbiBpdCdzIGEgdmVyc2lvbiBvZiBJLkUuIHRoYXQgbXVzdCBoYXZlIHRoZSBnbG9iYWwgb2JqZWN0IGZvciAndGhpcycsIGhvcGZ1bGx5IG91ciBjb250ZXh0IGNvcnJlY3Qgb3RoZXJ3aXNlIGl0IHdpbGwgdGhyb3cgYSBnbG9iYWwgZXJyb3JcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0LmNhbGwodGhpcywgZnVuLCAwKTtcbiAgICAgICAgfVxuICAgIH1cblxuXG59XG5mdW5jdGlvbiBydW5DbGVhclRpbWVvdXQobWFya2VyKSB7XG4gICAgaWYgKGNhY2hlZENsZWFyVGltZW91dCA9PT0gY2xlYXJUaW1lb3V0KSB7XG4gICAgICAgIC8vbm9ybWFsIGVudmlyb21lbnRzIGluIHNhbmUgc2l0dWF0aW9uc1xuICAgICAgICByZXR1cm4gY2xlYXJUaW1lb3V0KG1hcmtlcik7XG4gICAgfVxuICAgIC8vIGlmIGNsZWFyVGltZW91dCB3YXNuJ3QgYXZhaWxhYmxlIGJ1dCB3YXMgbGF0dGVyIGRlZmluZWRcbiAgICBpZiAoKGNhY2hlZENsZWFyVGltZW91dCA9PT0gZGVmYXVsdENsZWFyVGltZW91dCB8fCAhY2FjaGVkQ2xlYXJUaW1lb3V0KSAmJiBjbGVhclRpbWVvdXQpIHtcbiAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gY2xlYXJUaW1lb3V0O1xuICAgICAgICByZXR1cm4gY2xlYXJUaW1lb3V0KG1hcmtlcik7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIC8vIHdoZW4gd2hlbiBzb21lYm9keSBoYXMgc2NyZXdlZCB3aXRoIHNldFRpbWVvdXQgYnV0IG5vIEkuRS4gbWFkZG5lc3NcbiAgICAgICAgcmV0dXJuIGNhY2hlZENsZWFyVGltZW91dChtYXJrZXIpO1xuICAgIH0gY2F0Y2ggKGUpe1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gV2hlbiB3ZSBhcmUgaW4gSS5FLiBidXQgdGhlIHNjcmlwdCBoYXMgYmVlbiBldmFsZWQgc28gSS5FLiBkb2Vzbid0ICB0cnVzdCB0aGUgZ2xvYmFsIG9iamVjdCB3aGVuIGNhbGxlZCBub3JtYWxseVxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZENsZWFyVGltZW91dC5jYWxsKG51bGwsIG1hcmtlcik7XG4gICAgICAgIH0gY2F0Y2ggKGUpe1xuICAgICAgICAgICAgLy8gc2FtZSBhcyBhYm92ZSBidXQgd2hlbiBpdCdzIGEgdmVyc2lvbiBvZiBJLkUuIHRoYXQgbXVzdCBoYXZlIHRoZSBnbG9iYWwgb2JqZWN0IGZvciAndGhpcycsIGhvcGZ1bGx5IG91ciBjb250ZXh0IGNvcnJlY3Qgb3RoZXJ3aXNlIGl0IHdpbGwgdGhyb3cgYSBnbG9iYWwgZXJyb3IuXG4gICAgICAgICAgICAvLyBTb21lIHZlcnNpb25zIG9mIEkuRS4gaGF2ZSBkaWZmZXJlbnQgcnVsZXMgZm9yIGNsZWFyVGltZW91dCB2cyBzZXRUaW1lb3V0XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkQ2xlYXJUaW1lb3V0LmNhbGwodGhpcywgbWFya2VyKTtcbiAgICAgICAgfVxuICAgIH1cblxuXG5cbn1cbnZhciBxdWV1ZSA9IFtdO1xudmFyIGRyYWluaW5nID0gZmFsc2U7XG52YXIgY3VycmVudFF1ZXVlO1xudmFyIHF1ZXVlSW5kZXggPSAtMTtcblxuZnVuY3Rpb24gY2xlYW5VcE5leHRUaWNrKCkge1xuICAgIGlmICghZHJhaW5pbmcgfHwgIWN1cnJlbnRRdWV1ZSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGRyYWluaW5nID0gZmFsc2U7XG4gICAgaWYgKGN1cnJlbnRRdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgcXVldWUgPSBjdXJyZW50UXVldWUuY29uY2F0KHF1ZXVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBxdWV1ZUluZGV4ID0gLTE7XG4gICAgfVxuICAgIGlmIChxdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgZHJhaW5RdWV1ZSgpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZHJhaW5RdWV1ZSgpIHtcbiAgICBpZiAoZHJhaW5pbmcpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgdGltZW91dCA9IHJ1blRpbWVvdXQoY2xlYW5VcE5leHRUaWNrKTtcbiAgICBkcmFpbmluZyA9IHRydWU7XG5cbiAgICB2YXIgbGVuID0gcXVldWUubGVuZ3RoO1xuICAgIHdoaWxlKGxlbikge1xuICAgICAgICBjdXJyZW50UXVldWUgPSBxdWV1ZTtcbiAgICAgICAgcXVldWUgPSBbXTtcbiAgICAgICAgd2hpbGUgKCsrcXVldWVJbmRleCA8IGxlbikge1xuICAgICAgICAgICAgaWYgKGN1cnJlbnRRdWV1ZSkge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRRdWV1ZVtxdWV1ZUluZGV4XS5ydW4oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBxdWV1ZUluZGV4ID0gLTE7XG4gICAgICAgIGxlbiA9IHF1ZXVlLmxlbmd0aDtcbiAgICB9XG4gICAgY3VycmVudFF1ZXVlID0gbnVsbDtcbiAgICBkcmFpbmluZyA9IGZhbHNlO1xuICAgIHJ1bkNsZWFyVGltZW91dCh0aW1lb3V0KTtcbn1cblxucHJvY2Vzcy5uZXh0VGljayA9IGZ1bmN0aW9uIChmdW4pIHtcbiAgICB2YXIgYXJncyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoIC0gMSk7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBhcmdzW2kgLSAxXSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBxdWV1ZS5wdXNoKG5ldyBJdGVtKGZ1biwgYXJncykpO1xuICAgIGlmIChxdWV1ZS5sZW5ndGggPT09IDEgJiYgIWRyYWluaW5nKSB7XG4gICAgICAgIHJ1blRpbWVvdXQoZHJhaW5RdWV1ZSk7XG4gICAgfVxufTtcblxuLy8gdjggbGlrZXMgcHJlZGljdGlibGUgb2JqZWN0c1xuZnVuY3Rpb24gSXRlbShmdW4sIGFycmF5KSB7XG4gICAgdGhpcy5mdW4gPSBmdW47XG4gICAgdGhpcy5hcnJheSA9IGFycmF5O1xufVxuSXRlbS5wcm90b3R5cGUucnVuID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZnVuLmFwcGx5KG51bGwsIHRoaXMuYXJyYXkpO1xufTtcbnByb2Nlc3MudGl0bGUgPSAnYnJvd3Nlcic7XG5wcm9jZXNzLmJyb3dzZXIgPSB0cnVlO1xucHJvY2Vzcy5lbnYgPSB7fTtcbnByb2Nlc3MuYXJndiA9IFtdO1xucHJvY2Vzcy52ZXJzaW9uID0gJyc7IC8vIGVtcHR5IHN0cmluZyB0byBhdm9pZCByZWdleHAgaXNzdWVzXG5wcm9jZXNzLnZlcnNpb25zID0ge307XG5cbmZ1bmN0aW9uIG5vb3AoKSB7fVxuXG5wcm9jZXNzLm9uID0gbm9vcDtcbnByb2Nlc3MuYWRkTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5vbmNlID0gbm9vcDtcbnByb2Nlc3Mub2ZmID0gbm9vcDtcbnByb2Nlc3MucmVtb3ZlTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5yZW1vdmVBbGxMaXN0ZW5lcnMgPSBub29wO1xucHJvY2Vzcy5lbWl0ID0gbm9vcDtcbnByb2Nlc3MucHJlcGVuZExpc3RlbmVyID0gbm9vcDtcbnByb2Nlc3MucHJlcGVuZE9uY2VMaXN0ZW5lciA9IG5vb3A7XG5cbnByb2Nlc3MubGlzdGVuZXJzID0gZnVuY3Rpb24gKG5hbWUpIHsgcmV0dXJuIFtdIH1cblxucHJvY2Vzcy5iaW5kaW5nID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuYmluZGluZyBpcyBub3Qgc3VwcG9ydGVkJyk7XG59O1xuXG5wcm9jZXNzLmN3ZCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuICcvJyB9O1xucHJvY2Vzcy5jaGRpciA9IGZ1bmN0aW9uIChkaXIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuY2hkaXIgaXMgbm90IHN1cHBvcnRlZCcpO1xufTtcbnByb2Nlc3MudW1hc2sgPSBmdW5jdGlvbigpIHsgcmV0dXJuIDA7IH07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgc3RyaWN0VXJpRW5jb2RlID0gcmVxdWlyZSgnc3RyaWN0LXVyaS1lbmNvZGUnKTtcbnZhciBvYmplY3RBc3NpZ24gPSByZXF1aXJlKCdvYmplY3QtYXNzaWduJyk7XG52YXIgZGVjb2RlQ29tcG9uZW50ID0gcmVxdWlyZSgnZGVjb2RlLXVyaS1jb21wb25lbnQnKTtcblxuZnVuY3Rpb24gZW5jb2RlckZvckFycmF5Rm9ybWF0KG9wdHMpIHtcblx0c3dpdGNoIChvcHRzLmFycmF5Rm9ybWF0KSB7XG5cdFx0Y2FzZSAnaW5kZXgnOlxuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uIChrZXksIHZhbHVlLCBpbmRleCkge1xuXHRcdFx0XHRyZXR1cm4gdmFsdWUgPT09IG51bGwgPyBbXG5cdFx0XHRcdFx0ZW5jb2RlKGtleSwgb3B0cyksXG5cdFx0XHRcdFx0J1snLFxuXHRcdFx0XHRcdGluZGV4LFxuXHRcdFx0XHRcdCddJ1xuXHRcdFx0XHRdLmpvaW4oJycpIDogW1xuXHRcdFx0XHRcdGVuY29kZShrZXksIG9wdHMpLFxuXHRcdFx0XHRcdCdbJyxcblx0XHRcdFx0XHRlbmNvZGUoaW5kZXgsIG9wdHMpLFxuXHRcdFx0XHRcdCddPScsXG5cdFx0XHRcdFx0ZW5jb2RlKHZhbHVlLCBvcHRzKVxuXHRcdFx0XHRdLmpvaW4oJycpO1xuXHRcdFx0fTtcblxuXHRcdGNhc2UgJ2JyYWNrZXQnOlxuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG5cdFx0XHRcdHJldHVybiB2YWx1ZSA9PT0gbnVsbCA/IGVuY29kZShrZXksIG9wdHMpIDogW1xuXHRcdFx0XHRcdGVuY29kZShrZXksIG9wdHMpLFxuXHRcdFx0XHRcdCdbXT0nLFxuXHRcdFx0XHRcdGVuY29kZSh2YWx1ZSwgb3B0cylcblx0XHRcdFx0XS5qb2luKCcnKTtcblx0XHRcdH07XG5cblx0XHRkZWZhdWx0OlxuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG5cdFx0XHRcdHJldHVybiB2YWx1ZSA9PT0gbnVsbCA/IGVuY29kZShrZXksIG9wdHMpIDogW1xuXHRcdFx0XHRcdGVuY29kZShrZXksIG9wdHMpLFxuXHRcdFx0XHRcdCc9Jyxcblx0XHRcdFx0XHRlbmNvZGUodmFsdWUsIG9wdHMpXG5cdFx0XHRcdF0uam9pbignJyk7XG5cdFx0XHR9O1xuXHR9XG59XG5cbmZ1bmN0aW9uIHBhcnNlckZvckFycmF5Rm9ybWF0KG9wdHMpIHtcblx0dmFyIHJlc3VsdDtcblxuXHRzd2l0Y2ggKG9wdHMuYXJyYXlGb3JtYXQpIHtcblx0XHRjYXNlICdpbmRleCc6XG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24gKGtleSwgdmFsdWUsIGFjY3VtdWxhdG9yKSB7XG5cdFx0XHRcdHJlc3VsdCA9IC9cXFsoXFxkKilcXF0kLy5leGVjKGtleSk7XG5cblx0XHRcdFx0a2V5ID0ga2V5LnJlcGxhY2UoL1xcW1xcZCpcXF0kLywgJycpO1xuXG5cdFx0XHRcdGlmICghcmVzdWx0KSB7XG5cdFx0XHRcdFx0YWNjdW11bGF0b3Jba2V5XSA9IHZhbHVlO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChhY2N1bXVsYXRvcltrZXldID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRhY2N1bXVsYXRvcltrZXldID0ge307XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRhY2N1bXVsYXRvcltrZXldW3Jlc3VsdFsxXV0gPSB2YWx1ZTtcblx0XHRcdH07XG5cblx0XHRjYXNlICdicmFja2V0Jzpcblx0XHRcdHJldHVybiBmdW5jdGlvbiAoa2V5LCB2YWx1ZSwgYWNjdW11bGF0b3IpIHtcblx0XHRcdFx0cmVzdWx0ID0gLyhcXFtcXF0pJC8uZXhlYyhrZXkpO1xuXHRcdFx0XHRrZXkgPSBrZXkucmVwbGFjZSgvXFxbXFxdJC8sICcnKTtcblxuXHRcdFx0XHRpZiAoIXJlc3VsdCkge1xuXHRcdFx0XHRcdGFjY3VtdWxhdG9yW2tleV0gPSB2YWx1ZTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH0gZWxzZSBpZiAoYWNjdW11bGF0b3Jba2V5XSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0YWNjdW11bGF0b3Jba2V5XSA9IFt2YWx1ZV07XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0YWNjdW11bGF0b3Jba2V5XSA9IFtdLmNvbmNhdChhY2N1bXVsYXRvcltrZXldLCB2YWx1ZSk7XG5cdFx0XHR9O1xuXG5cdFx0ZGVmYXVsdDpcblx0XHRcdHJldHVybiBmdW5jdGlvbiAoa2V5LCB2YWx1ZSwgYWNjdW11bGF0b3IpIHtcblx0XHRcdFx0aWYgKGFjY3VtdWxhdG9yW2tleV0gPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdGFjY3VtdWxhdG9yW2tleV0gPSB2YWx1ZTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRhY2N1bXVsYXRvcltrZXldID0gW10uY29uY2F0KGFjY3VtdWxhdG9yW2tleV0sIHZhbHVlKTtcblx0XHRcdH07XG5cdH1cbn1cblxuZnVuY3Rpb24gZW5jb2RlKHZhbHVlLCBvcHRzKSB7XG5cdGlmIChvcHRzLmVuY29kZSkge1xuXHRcdHJldHVybiBvcHRzLnN0cmljdCA/IHN0cmljdFVyaUVuY29kZSh2YWx1ZSkgOiBlbmNvZGVVUklDb21wb25lbnQodmFsdWUpO1xuXHR9XG5cblx0cmV0dXJuIHZhbHVlO1xufVxuXG5mdW5jdGlvbiBrZXlzU29ydGVyKGlucHV0KSB7XG5cdGlmIChBcnJheS5pc0FycmF5KGlucHV0KSkge1xuXHRcdHJldHVybiBpbnB1dC5zb3J0KCk7XG5cdH0gZWxzZSBpZiAodHlwZW9mIGlucHV0ID09PSAnb2JqZWN0Jykge1xuXHRcdHJldHVybiBrZXlzU29ydGVyKE9iamVjdC5rZXlzKGlucHV0KSkuc29ydChmdW5jdGlvbiAoYSwgYikge1xuXHRcdFx0cmV0dXJuIE51bWJlcihhKSAtIE51bWJlcihiKTtcblx0XHR9KS5tYXAoZnVuY3Rpb24gKGtleSkge1xuXHRcdFx0cmV0dXJuIGlucHV0W2tleV07XG5cdFx0fSk7XG5cdH1cblxuXHRyZXR1cm4gaW5wdXQ7XG59XG5cbmZ1bmN0aW9uIGV4dHJhY3Qoc3RyKSB7XG5cdHZhciBxdWVyeVN0YXJ0ID0gc3RyLmluZGV4T2YoJz8nKTtcblx0aWYgKHF1ZXJ5U3RhcnQgPT09IC0xKSB7XG5cdFx0cmV0dXJuICcnO1xuXHR9XG5cdHJldHVybiBzdHIuc2xpY2UocXVlcnlTdGFydCArIDEpO1xufVxuXG5mdW5jdGlvbiBwYXJzZShzdHIsIG9wdHMpIHtcblx0b3B0cyA9IG9iamVjdEFzc2lnbih7YXJyYXlGb3JtYXQ6ICdub25lJ30sIG9wdHMpO1xuXG5cdHZhciBmb3JtYXR0ZXIgPSBwYXJzZXJGb3JBcnJheUZvcm1hdChvcHRzKTtcblxuXHQvLyBDcmVhdGUgYW4gb2JqZWN0IHdpdGggbm8gcHJvdG90eXBlXG5cdC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9zaW5kcmVzb3JodXMvcXVlcnktc3RyaW5nL2lzc3Vlcy80N1xuXHR2YXIgcmV0ID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuXHRpZiAodHlwZW9mIHN0ciAhPT0gJ3N0cmluZycpIHtcblx0XHRyZXR1cm4gcmV0O1xuXHR9XG5cblx0c3RyID0gc3RyLnRyaW0oKS5yZXBsYWNlKC9eWz8jJl0vLCAnJyk7XG5cblx0aWYgKCFzdHIpIHtcblx0XHRyZXR1cm4gcmV0O1xuXHR9XG5cblx0c3RyLnNwbGl0KCcmJykuZm9yRWFjaChmdW5jdGlvbiAocGFyYW0pIHtcblx0XHR2YXIgcGFydHMgPSBwYXJhbS5yZXBsYWNlKC9cXCsvZywgJyAnKS5zcGxpdCgnPScpO1xuXHRcdC8vIEZpcmVmb3ggKHByZSA0MCkgZGVjb2RlcyBgJTNEYCB0byBgPWBcblx0XHQvLyBodHRwczovL2dpdGh1Yi5jb20vc2luZHJlc29yaHVzL3F1ZXJ5LXN0cmluZy9wdWxsLzM3XG5cdFx0dmFyIGtleSA9IHBhcnRzLnNoaWZ0KCk7XG5cdFx0dmFyIHZhbCA9IHBhcnRzLmxlbmd0aCA+IDAgPyBwYXJ0cy5qb2luKCc9JykgOiB1bmRlZmluZWQ7XG5cblx0XHQvLyBtaXNzaW5nIGA9YCBzaG91bGQgYmUgYG51bGxgOlxuXHRcdC8vIGh0dHA6Ly93My5vcmcvVFIvMjAxMi9XRC11cmwtMjAxMjA1MjQvI2NvbGxlY3QtdXJsLXBhcmFtZXRlcnNcblx0XHR2YWwgPSB2YWwgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBkZWNvZGVDb21wb25lbnQodmFsKTtcblxuXHRcdGZvcm1hdHRlcihkZWNvZGVDb21wb25lbnQoa2V5KSwgdmFsLCByZXQpO1xuXHR9KTtcblxuXHRyZXR1cm4gT2JqZWN0LmtleXMocmV0KS5zb3J0KCkucmVkdWNlKGZ1bmN0aW9uIChyZXN1bHQsIGtleSkge1xuXHRcdHZhciB2YWwgPSByZXRba2V5XTtcblx0XHRpZiAoQm9vbGVhbih2YWwpICYmIHR5cGVvZiB2YWwgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KHZhbCkpIHtcblx0XHRcdC8vIFNvcnQgb2JqZWN0IGtleXMsIG5vdCB2YWx1ZXNcblx0XHRcdHJlc3VsdFtrZXldID0ga2V5c1NvcnRlcih2YWwpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXN1bHRba2V5XSA9IHZhbDtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9LCBPYmplY3QuY3JlYXRlKG51bGwpKTtcbn1cblxuZXhwb3J0cy5leHRyYWN0ID0gZXh0cmFjdDtcbmV4cG9ydHMucGFyc2UgPSBwYXJzZTtcblxuZXhwb3J0cy5zdHJpbmdpZnkgPSBmdW5jdGlvbiAob2JqLCBvcHRzKSB7XG5cdHZhciBkZWZhdWx0cyA9IHtcblx0XHRlbmNvZGU6IHRydWUsXG5cdFx0c3RyaWN0OiB0cnVlLFxuXHRcdGFycmF5Rm9ybWF0OiAnbm9uZSdcblx0fTtcblxuXHRvcHRzID0gb2JqZWN0QXNzaWduKGRlZmF1bHRzLCBvcHRzKTtcblxuXHRpZiAob3B0cy5zb3J0ID09PSBmYWxzZSkge1xuXHRcdG9wdHMuc29ydCA9IGZ1bmN0aW9uICgpIHt9O1xuXHR9XG5cblx0dmFyIGZvcm1hdHRlciA9IGVuY29kZXJGb3JBcnJheUZvcm1hdChvcHRzKTtcblxuXHRyZXR1cm4gb2JqID8gT2JqZWN0LmtleXMob2JqKS5zb3J0KG9wdHMuc29ydCkubWFwKGZ1bmN0aW9uIChrZXkpIHtcblx0XHR2YXIgdmFsID0gb2JqW2tleV07XG5cblx0XHRpZiAodmFsID09PSB1bmRlZmluZWQpIHtcblx0XHRcdHJldHVybiAnJztcblx0XHR9XG5cblx0XHRpZiAodmFsID09PSBudWxsKSB7XG5cdFx0XHRyZXR1cm4gZW5jb2RlKGtleSwgb3B0cyk7XG5cdFx0fVxuXG5cdFx0aWYgKEFycmF5LmlzQXJyYXkodmFsKSkge1xuXHRcdFx0dmFyIHJlc3VsdCA9IFtdO1xuXG5cdFx0XHR2YWwuc2xpY2UoKS5mb3JFYWNoKGZ1bmN0aW9uICh2YWwyKSB7XG5cdFx0XHRcdGlmICh2YWwyID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXN1bHQucHVzaChmb3JtYXR0ZXIoa2V5LCB2YWwyLCByZXN1bHQubGVuZ3RoKSk7XG5cdFx0XHR9KTtcblxuXHRcdFx0cmV0dXJuIHJlc3VsdC5qb2luKCcmJyk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGVuY29kZShrZXksIG9wdHMpICsgJz0nICsgZW5jb2RlKHZhbCwgb3B0cyk7XG5cdH0pLmZpbHRlcihmdW5jdGlvbiAoeCkge1xuXHRcdHJldHVybiB4Lmxlbmd0aCA+IDA7XG5cdH0pLmpvaW4oJyYnKSA6ICcnO1xufTtcblxuZXhwb3J0cy5wYXJzZVVybCA9IGZ1bmN0aW9uIChzdHIsIG9wdHMpIHtcblx0cmV0dXJuIHtcblx0XHR1cmw6IHN0ci5zcGxpdCgnPycpWzBdIHx8ICcnLFxuXHRcdHF1ZXJ5OiBwYXJzZShleHRyYWN0KHN0ciksIG9wdHMpXG5cdH07XG59O1xuIiwiLypcbm9iamVjdC1hc3NpZ25cbihjKSBTaW5kcmUgU29yaHVzXG5AbGljZW5zZSBNSVRcbiovXG5cbid1c2Ugc3RyaWN0Jztcbi8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC12YXJzICovXG52YXIgZ2V0T3duUHJvcGVydHlTeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbnZhciBoYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgcHJvcElzRW51bWVyYWJsZSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG5cbmZ1bmN0aW9uIHRvT2JqZWN0KHZhbCkge1xuXHRpZiAodmFsID09PSBudWxsIHx8IHZhbCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignT2JqZWN0LmFzc2lnbiBjYW5ub3QgYmUgY2FsbGVkIHdpdGggbnVsbCBvciB1bmRlZmluZWQnKTtcblx0fVxuXG5cdHJldHVybiBPYmplY3QodmFsKTtcbn1cblxuZnVuY3Rpb24gc2hvdWxkVXNlTmF0aXZlKCkge1xuXHR0cnkge1xuXHRcdGlmICghT2JqZWN0LmFzc2lnbikge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdC8vIERldGVjdCBidWdneSBwcm9wZXJ0eSBlbnVtZXJhdGlvbiBvcmRlciBpbiBvbGRlciBWOCB2ZXJzaW9ucy5cblxuXHRcdC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTQxMThcblx0XHR2YXIgdGVzdDEgPSBuZXcgU3RyaW5nKCdhYmMnKTsgIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3LXdyYXBwZXJzXG5cdFx0dGVzdDFbNV0gPSAnZGUnO1xuXHRcdGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0ZXN0MSlbMF0gPT09ICc1Jykge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTMwNTZcblx0XHR2YXIgdGVzdDIgPSB7fTtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IDEwOyBpKyspIHtcblx0XHRcdHRlc3QyWydfJyArIFN0cmluZy5mcm9tQ2hhckNvZGUoaSldID0gaTtcblx0XHR9XG5cdFx0dmFyIG9yZGVyMiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRlc3QyKS5tYXAoZnVuY3Rpb24gKG4pIHtcblx0XHRcdHJldHVybiB0ZXN0MltuXTtcblx0XHR9KTtcblx0XHRpZiAob3JkZXIyLmpvaW4oJycpICE9PSAnMDEyMzQ1Njc4OScpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHQvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0zMDU2XG5cdFx0dmFyIHRlc3QzID0ge307XG5cdFx0J2FiY2RlZmdoaWprbG1ub3BxcnN0Jy5zcGxpdCgnJykuZm9yRWFjaChmdW5jdGlvbiAobGV0dGVyKSB7XG5cdFx0XHR0ZXN0M1tsZXR0ZXJdID0gbGV0dGVyO1xuXHRcdH0pO1xuXHRcdGlmIChPYmplY3Qua2V5cyhPYmplY3QuYXNzaWduKHt9LCB0ZXN0MykpLmpvaW4oJycpICE9PVxuXHRcdFx0XHQnYWJjZGVmZ2hpamtsbW5vcHFyc3QnKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gY2F0Y2ggKGVycikge1xuXHRcdC8vIFdlIGRvbid0IGV4cGVjdCBhbnkgb2YgdGhlIGFib3ZlIHRvIHRocm93LCBidXQgYmV0dGVyIHRvIGJlIHNhZmUuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc2hvdWxkVXNlTmF0aXZlKCkgPyBPYmplY3QuYXNzaWduIDogZnVuY3Rpb24gKHRhcmdldCwgc291cmNlKSB7XG5cdHZhciBmcm9tO1xuXHR2YXIgdG8gPSB0b09iamVjdCh0YXJnZXQpO1xuXHR2YXIgc3ltYm9scztcblxuXHRmb3IgKHZhciBzID0gMTsgcyA8IGFyZ3VtZW50cy5sZW5ndGg7IHMrKykge1xuXHRcdGZyb20gPSBPYmplY3QoYXJndW1lbnRzW3NdKTtcblxuXHRcdGZvciAodmFyIGtleSBpbiBmcm9tKSB7XG5cdFx0XHRpZiAoaGFzT3duUHJvcGVydHkuY2FsbChmcm9tLCBrZXkpKSB7XG5cdFx0XHRcdHRvW2tleV0gPSBmcm9tW2tleV07XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKGdldE93blByb3BlcnR5U3ltYm9scykge1xuXHRcdFx0c3ltYm9scyA9IGdldE93blByb3BlcnR5U3ltYm9scyhmcm9tKTtcblx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgc3ltYm9scy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRpZiAocHJvcElzRW51bWVyYWJsZS5jYWxsKGZyb20sIHN5bWJvbHNbaV0pKSB7XG5cdFx0XHRcdFx0dG9bc3ltYm9sc1tpXV0gPSBmcm9tW3N5bWJvbHNbaV1dO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHRvO1xufTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDE0LXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuLy8gVGhpcyBtZXRob2Qgb2Ygb2J0YWluaW5nIGEgcmVmZXJlbmNlIHRvIHRoZSBnbG9iYWwgb2JqZWN0IG5lZWRzIHRvIGJlXG4vLyBrZXB0IGlkZW50aWNhbCB0byB0aGUgd2F5IGl0IGlzIG9idGFpbmVkIGluIHJ1bnRpbWUuanNcbnZhciBnID0gKGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpcyB9KSgpIHx8IEZ1bmN0aW9uKFwicmV0dXJuIHRoaXNcIikoKTtcblxuLy8gVXNlIGBnZXRPd25Qcm9wZXJ0eU5hbWVzYCBiZWNhdXNlIG5vdCBhbGwgYnJvd3NlcnMgc3VwcG9ydCBjYWxsaW5nXG4vLyBgaGFzT3duUHJvcGVydHlgIG9uIHRoZSBnbG9iYWwgYHNlbGZgIG9iamVjdCBpbiBhIHdvcmtlci4gU2VlICMxODMuXG52YXIgaGFkUnVudGltZSA9IGcucmVnZW5lcmF0b3JSdW50aW1lICYmXG4gIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGcpLmluZGV4T2YoXCJyZWdlbmVyYXRvclJ1bnRpbWVcIikgPj0gMDtcblxuLy8gU2F2ZSB0aGUgb2xkIHJlZ2VuZXJhdG9yUnVudGltZSBpbiBjYXNlIGl0IG5lZWRzIHRvIGJlIHJlc3RvcmVkIGxhdGVyLlxudmFyIG9sZFJ1bnRpbWUgPSBoYWRSdW50aW1lICYmIGcucmVnZW5lcmF0b3JSdW50aW1lO1xuXG4vLyBGb3JjZSByZWV2YWx1dGF0aW9uIG9mIHJ1bnRpbWUuanMuXG5nLnJlZ2VuZXJhdG9yUnVudGltZSA9IHVuZGVmaW5lZDtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiLi9ydW50aW1lXCIpO1xuXG5pZiAoaGFkUnVudGltZSkge1xuICAvLyBSZXN0b3JlIHRoZSBvcmlnaW5hbCBydW50aW1lLlxuICBnLnJlZ2VuZXJhdG9yUnVudGltZSA9IG9sZFJ1bnRpbWU7XG59IGVsc2Uge1xuICAvLyBSZW1vdmUgdGhlIGdsb2JhbCBwcm9wZXJ0eSBhZGRlZCBieSBydW50aW1lLmpzLlxuICB0cnkge1xuICAgIGRlbGV0ZSBnLnJlZ2VuZXJhdG9yUnVudGltZTtcbiAgfSBjYXRjaChlKSB7XG4gICAgZy5yZWdlbmVyYXRvclJ1bnRpbWUgPSB1bmRlZmluZWQ7XG4gIH1cbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDE0LXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuIShmdW5jdGlvbihnbG9iYWwpIHtcbiAgXCJ1c2Ugc3RyaWN0XCI7XG5cbiAgdmFyIE9wID0gT2JqZWN0LnByb3RvdHlwZTtcbiAgdmFyIGhhc093biA9IE9wLmhhc093blByb3BlcnR5O1xuICB2YXIgdW5kZWZpbmVkOyAvLyBNb3JlIGNvbXByZXNzaWJsZSB0aGFuIHZvaWQgMC5cbiAgdmFyICRTeW1ib2wgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgPyBTeW1ib2wgOiB7fTtcbiAgdmFyIGl0ZXJhdG9yU3ltYm9sID0gJFN5bWJvbC5pdGVyYXRvciB8fCBcIkBAaXRlcmF0b3JcIjtcbiAgdmFyIGFzeW5jSXRlcmF0b3JTeW1ib2wgPSAkU3ltYm9sLmFzeW5jSXRlcmF0b3IgfHwgXCJAQGFzeW5jSXRlcmF0b3JcIjtcbiAgdmFyIHRvU3RyaW5nVGFnU3ltYm9sID0gJFN5bWJvbC50b1N0cmluZ1RhZyB8fCBcIkBAdG9TdHJpbmdUYWdcIjtcblxuICB2YXIgaW5Nb2R1bGUgPSB0eXBlb2YgbW9kdWxlID09PSBcIm9iamVjdFwiO1xuICB2YXIgcnVudGltZSA9IGdsb2JhbC5yZWdlbmVyYXRvclJ1bnRpbWU7XG4gIGlmIChydW50aW1lKSB7XG4gICAgaWYgKGluTW9kdWxlKSB7XG4gICAgICAvLyBJZiByZWdlbmVyYXRvclJ1bnRpbWUgaXMgZGVmaW5lZCBnbG9iYWxseSBhbmQgd2UncmUgaW4gYSBtb2R1bGUsXG4gICAgICAvLyBtYWtlIHRoZSBleHBvcnRzIG9iamVjdCBpZGVudGljYWwgdG8gcmVnZW5lcmF0b3JSdW50aW1lLlxuICAgICAgbW9kdWxlLmV4cG9ydHMgPSBydW50aW1lO1xuICAgIH1cbiAgICAvLyBEb24ndCBib3RoZXIgZXZhbHVhdGluZyB0aGUgcmVzdCBvZiB0aGlzIGZpbGUgaWYgdGhlIHJ1bnRpbWUgd2FzXG4gICAgLy8gYWxyZWFkeSBkZWZpbmVkIGdsb2JhbGx5LlxuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIERlZmluZSB0aGUgcnVudGltZSBnbG9iYWxseSAoYXMgZXhwZWN0ZWQgYnkgZ2VuZXJhdGVkIGNvZGUpIGFzIGVpdGhlclxuICAvLyBtb2R1bGUuZXhwb3J0cyAoaWYgd2UncmUgaW4gYSBtb2R1bGUpIG9yIGEgbmV3LCBlbXB0eSBvYmplY3QuXG4gIHJ1bnRpbWUgPSBnbG9iYWwucmVnZW5lcmF0b3JSdW50aW1lID0gaW5Nb2R1bGUgPyBtb2R1bGUuZXhwb3J0cyA6IHt9O1xuXG4gIGZ1bmN0aW9uIHdyYXAoaW5uZXJGbiwgb3V0ZXJGbiwgc2VsZiwgdHJ5TG9jc0xpc3QpIHtcbiAgICAvLyBJZiBvdXRlckZuIHByb3ZpZGVkIGFuZCBvdXRlckZuLnByb3RvdHlwZSBpcyBhIEdlbmVyYXRvciwgdGhlbiBvdXRlckZuLnByb3RvdHlwZSBpbnN0YW5jZW9mIEdlbmVyYXRvci5cbiAgICB2YXIgcHJvdG9HZW5lcmF0b3IgPSBvdXRlckZuICYmIG91dGVyRm4ucHJvdG90eXBlIGluc3RhbmNlb2YgR2VuZXJhdG9yID8gb3V0ZXJGbiA6IEdlbmVyYXRvcjtcbiAgICB2YXIgZ2VuZXJhdG9yID0gT2JqZWN0LmNyZWF0ZShwcm90b0dlbmVyYXRvci5wcm90b3R5cGUpO1xuICAgIHZhciBjb250ZXh0ID0gbmV3IENvbnRleHQodHJ5TG9jc0xpc3QgfHwgW10pO1xuXG4gICAgLy8gVGhlIC5faW52b2tlIG1ldGhvZCB1bmlmaWVzIHRoZSBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlIC5uZXh0LFxuICAgIC8vIC50aHJvdywgYW5kIC5yZXR1cm4gbWV0aG9kcy5cbiAgICBnZW5lcmF0b3IuX2ludm9rZSA9IG1ha2VJbnZva2VNZXRob2QoaW5uZXJGbiwgc2VsZiwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gZ2VuZXJhdG9yO1xuICB9XG4gIHJ1bnRpbWUud3JhcCA9IHdyYXA7XG5cbiAgLy8gVHJ5L2NhdGNoIGhlbHBlciB0byBtaW5pbWl6ZSBkZW9wdGltaXphdGlvbnMuIFJldHVybnMgYSBjb21wbGV0aW9uXG4gIC8vIHJlY29yZCBsaWtlIGNvbnRleHQudHJ5RW50cmllc1tpXS5jb21wbGV0aW9uLiBUaGlzIGludGVyZmFjZSBjb3VsZFxuICAvLyBoYXZlIGJlZW4gKGFuZCB3YXMgcHJldmlvdXNseSkgZGVzaWduZWQgdG8gdGFrZSBhIGNsb3N1cmUgdG8gYmVcbiAgLy8gaW52b2tlZCB3aXRob3V0IGFyZ3VtZW50cywgYnV0IGluIGFsbCB0aGUgY2FzZXMgd2UgY2FyZSBhYm91dCB3ZVxuICAvLyBhbHJlYWR5IGhhdmUgYW4gZXhpc3RpbmcgbWV0aG9kIHdlIHdhbnQgdG8gY2FsbCwgc28gdGhlcmUncyBubyBuZWVkXG4gIC8vIHRvIGNyZWF0ZSBhIG5ldyBmdW5jdGlvbiBvYmplY3QuIFdlIGNhbiBldmVuIGdldCBhd2F5IHdpdGggYXNzdW1pbmdcbiAgLy8gdGhlIG1ldGhvZCB0YWtlcyBleGFjdGx5IG9uZSBhcmd1bWVudCwgc2luY2UgdGhhdCBoYXBwZW5zIHRvIGJlIHRydWVcbiAgLy8gaW4gZXZlcnkgY2FzZSwgc28gd2UgZG9uJ3QgaGF2ZSB0byB0b3VjaCB0aGUgYXJndW1lbnRzIG9iamVjdC4gVGhlXG4gIC8vIG9ubHkgYWRkaXRpb25hbCBhbGxvY2F0aW9uIHJlcXVpcmVkIGlzIHRoZSBjb21wbGV0aW9uIHJlY29yZCwgd2hpY2hcbiAgLy8gaGFzIGEgc3RhYmxlIHNoYXBlIGFuZCBzbyBob3BlZnVsbHkgc2hvdWxkIGJlIGNoZWFwIHRvIGFsbG9jYXRlLlxuICBmdW5jdGlvbiB0cnlDYXRjaChmbiwgb2JqLCBhcmcpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHsgdHlwZTogXCJub3JtYWxcIiwgYXJnOiBmbi5jYWxsKG9iaiwgYXJnKSB9O1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgcmV0dXJuIHsgdHlwZTogXCJ0aHJvd1wiLCBhcmc6IGVyciB9O1xuICAgIH1cbiAgfVxuXG4gIHZhciBHZW5TdGF0ZVN1c3BlbmRlZFN0YXJ0ID0gXCJzdXNwZW5kZWRTdGFydFwiO1xuICB2YXIgR2VuU3RhdGVTdXNwZW5kZWRZaWVsZCA9IFwic3VzcGVuZGVkWWllbGRcIjtcbiAgdmFyIEdlblN0YXRlRXhlY3V0aW5nID0gXCJleGVjdXRpbmdcIjtcbiAgdmFyIEdlblN0YXRlQ29tcGxldGVkID0gXCJjb21wbGV0ZWRcIjtcblxuICAvLyBSZXR1cm5pbmcgdGhpcyBvYmplY3QgZnJvbSB0aGUgaW5uZXJGbiBoYXMgdGhlIHNhbWUgZWZmZWN0IGFzXG4gIC8vIGJyZWFraW5nIG91dCBvZiB0aGUgZGlzcGF0Y2ggc3dpdGNoIHN0YXRlbWVudC5cbiAgdmFyIENvbnRpbnVlU2VudGluZWwgPSB7fTtcblxuICAvLyBEdW1teSBjb25zdHJ1Y3RvciBmdW5jdGlvbnMgdGhhdCB3ZSB1c2UgYXMgdGhlIC5jb25zdHJ1Y3RvciBhbmRcbiAgLy8gLmNvbnN0cnVjdG9yLnByb3RvdHlwZSBwcm9wZXJ0aWVzIGZvciBmdW5jdGlvbnMgdGhhdCByZXR1cm4gR2VuZXJhdG9yXG4gIC8vIG9iamVjdHMuIEZvciBmdWxsIHNwZWMgY29tcGxpYW5jZSwgeW91IG1heSB3aXNoIHRvIGNvbmZpZ3VyZSB5b3VyXG4gIC8vIG1pbmlmaWVyIG5vdCB0byBtYW5nbGUgdGhlIG5hbWVzIG9mIHRoZXNlIHR3byBmdW5jdGlvbnMuXG4gIGZ1bmN0aW9uIEdlbmVyYXRvcigpIHt9XG4gIGZ1bmN0aW9uIEdlbmVyYXRvckZ1bmN0aW9uKCkge31cbiAgZnVuY3Rpb24gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUoKSB7fVxuXG4gIC8vIFRoaXMgaXMgYSBwb2x5ZmlsbCBmb3IgJUl0ZXJhdG9yUHJvdG90eXBlJSBmb3IgZW52aXJvbm1lbnRzIHRoYXRcbiAgLy8gZG9uJ3QgbmF0aXZlbHkgc3VwcG9ydCBpdC5cbiAgdmFyIEl0ZXJhdG9yUHJvdG90eXBlID0ge307XG4gIEl0ZXJhdG9yUHJvdG90eXBlW2l0ZXJhdG9yU3ltYm9sXSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICB2YXIgZ2V0UHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Y7XG4gIHZhciBOYXRpdmVJdGVyYXRvclByb3RvdHlwZSA9IGdldFByb3RvICYmIGdldFByb3RvKGdldFByb3RvKHZhbHVlcyhbXSkpKTtcbiAgaWYgKE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlICYmXG4gICAgICBOYXRpdmVJdGVyYXRvclByb3RvdHlwZSAhPT0gT3AgJiZcbiAgICAgIGhhc093bi5jYWxsKE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlLCBpdGVyYXRvclN5bWJvbCkpIHtcbiAgICAvLyBUaGlzIGVudmlyb25tZW50IGhhcyBhIG5hdGl2ZSAlSXRlcmF0b3JQcm90b3R5cGUlOyB1c2UgaXQgaW5zdGVhZFxuICAgIC8vIG9mIHRoZSBwb2x5ZmlsbC5cbiAgICBJdGVyYXRvclByb3RvdHlwZSA9IE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlO1xuICB9XG5cbiAgdmFyIEdwID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUucHJvdG90eXBlID1cbiAgICBHZW5lcmF0b3IucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShJdGVyYXRvclByb3RvdHlwZSk7XG4gIEdlbmVyYXRvckZ1bmN0aW9uLnByb3RvdHlwZSA9IEdwLmNvbnN0cnVjdG9yID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGU7XG4gIEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLmNvbnN0cnVjdG9yID0gR2VuZXJhdG9yRnVuY3Rpb247XG4gIEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlW3RvU3RyaW5nVGFnU3ltYm9sXSA9XG4gICAgR2VuZXJhdG9yRnVuY3Rpb24uZGlzcGxheU5hbWUgPSBcIkdlbmVyYXRvckZ1bmN0aW9uXCI7XG5cbiAgLy8gSGVscGVyIGZvciBkZWZpbmluZyB0aGUgLm5leHQsIC50aHJvdywgYW5kIC5yZXR1cm4gbWV0aG9kcyBvZiB0aGVcbiAgLy8gSXRlcmF0b3IgaW50ZXJmYWNlIGluIHRlcm1zIG9mIGEgc2luZ2xlIC5faW52b2tlIG1ldGhvZC5cbiAgZnVuY3Rpb24gZGVmaW5lSXRlcmF0b3JNZXRob2RzKHByb3RvdHlwZSkge1xuICAgIFtcIm5leHRcIiwgXCJ0aHJvd1wiLCBcInJldHVyblwiXS5mb3JFYWNoKGZ1bmN0aW9uKG1ldGhvZCkge1xuICAgICAgcHJvdG90eXBlW21ldGhvZF0gPSBmdW5jdGlvbihhcmcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ludm9rZShtZXRob2QsIGFyZyk7XG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgcnVudGltZS5pc0dlbmVyYXRvckZ1bmN0aW9uID0gZnVuY3Rpb24oZ2VuRnVuKSB7XG4gICAgdmFyIGN0b3IgPSB0eXBlb2YgZ2VuRnVuID09PSBcImZ1bmN0aW9uXCIgJiYgZ2VuRnVuLmNvbnN0cnVjdG9yO1xuICAgIHJldHVybiBjdG9yXG4gICAgICA/IGN0b3IgPT09IEdlbmVyYXRvckZ1bmN0aW9uIHx8XG4gICAgICAgIC8vIEZvciB0aGUgbmF0aXZlIEdlbmVyYXRvckZ1bmN0aW9uIGNvbnN0cnVjdG9yLCB0aGUgYmVzdCB3ZSBjYW5cbiAgICAgICAgLy8gZG8gaXMgdG8gY2hlY2sgaXRzIC5uYW1lIHByb3BlcnR5LlxuICAgICAgICAoY3Rvci5kaXNwbGF5TmFtZSB8fCBjdG9yLm5hbWUpID09PSBcIkdlbmVyYXRvckZ1bmN0aW9uXCJcbiAgICAgIDogZmFsc2U7XG4gIH07XG5cbiAgcnVudGltZS5tYXJrID0gZnVuY3Rpb24oZ2VuRnVuKSB7XG4gICAgaWYgKE9iamVjdC5zZXRQcm90b3R5cGVPZikge1xuICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKGdlbkZ1biwgR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBnZW5GdW4uX19wcm90b19fID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGU7XG4gICAgICBpZiAoISh0b1N0cmluZ1RhZ1N5bWJvbCBpbiBnZW5GdW4pKSB7XG4gICAgICAgIGdlbkZ1blt0b1N0cmluZ1RhZ1N5bWJvbF0gPSBcIkdlbmVyYXRvckZ1bmN0aW9uXCI7XG4gICAgICB9XG4gICAgfVxuICAgIGdlbkZ1bi5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEdwKTtcbiAgICByZXR1cm4gZ2VuRnVuO1xuICB9O1xuXG4gIC8vIFdpdGhpbiB0aGUgYm9keSBvZiBhbnkgYXN5bmMgZnVuY3Rpb24sIGBhd2FpdCB4YCBpcyB0cmFuc2Zvcm1lZCB0b1xuICAvLyBgeWllbGQgcmVnZW5lcmF0b3JSdW50aW1lLmF3cmFwKHgpYCwgc28gdGhhdCB0aGUgcnVudGltZSBjYW4gdGVzdFxuICAvLyBgaGFzT3duLmNhbGwodmFsdWUsIFwiX19hd2FpdFwiKWAgdG8gZGV0ZXJtaW5lIGlmIHRoZSB5aWVsZGVkIHZhbHVlIGlzXG4gIC8vIG1lYW50IHRvIGJlIGF3YWl0ZWQuXG4gIHJ1bnRpbWUuYXdyYXAgPSBmdW5jdGlvbihhcmcpIHtcbiAgICByZXR1cm4geyBfX2F3YWl0OiBhcmcgfTtcbiAgfTtcblxuICBmdW5jdGlvbiBBc3luY0l0ZXJhdG9yKGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGludm9rZShtZXRob2QsIGFyZywgcmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICB2YXIgcmVjb3JkID0gdHJ5Q2F0Y2goZ2VuZXJhdG9yW21ldGhvZF0sIGdlbmVyYXRvciwgYXJnKTtcbiAgICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgIHJlamVjdChyZWNvcmQuYXJnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciByZXN1bHQgPSByZWNvcmQuYXJnO1xuICAgICAgICB2YXIgdmFsdWUgPSByZXN1bHQudmFsdWU7XG4gICAgICAgIGlmICh2YWx1ZSAmJlxuICAgICAgICAgICAgdHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmXG4gICAgICAgICAgICBoYXNPd24uY2FsbCh2YWx1ZSwgXCJfX2F3YWl0XCIpKSB7XG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh2YWx1ZS5fX2F3YWl0KS50aGVuKGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgICAgICBpbnZva2UoXCJuZXh0XCIsIHZhbHVlLCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgICAgIH0sIGZ1bmN0aW9uKGVycikge1xuICAgICAgICAgICAgaW52b2tlKFwidGhyb3dcIiwgZXJyLCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh2YWx1ZSkudGhlbihmdW5jdGlvbih1bndyYXBwZWQpIHtcbiAgICAgICAgICAvLyBXaGVuIGEgeWllbGRlZCBQcm9taXNlIGlzIHJlc29sdmVkLCBpdHMgZmluYWwgdmFsdWUgYmVjb21lc1xuICAgICAgICAgIC8vIHRoZSAudmFsdWUgb2YgdGhlIFByb21pc2U8e3ZhbHVlLGRvbmV9PiByZXN1bHQgZm9yIHRoZVxuICAgICAgICAgIC8vIGN1cnJlbnQgaXRlcmF0aW9uLiBJZiB0aGUgUHJvbWlzZSBpcyByZWplY3RlZCwgaG93ZXZlciwgdGhlXG4gICAgICAgICAgLy8gcmVzdWx0IGZvciB0aGlzIGl0ZXJhdGlvbiB3aWxsIGJlIHJlamVjdGVkIHdpdGggdGhlIHNhbWVcbiAgICAgICAgICAvLyByZWFzb24uIE5vdGUgdGhhdCByZWplY3Rpb25zIG9mIHlpZWxkZWQgUHJvbWlzZXMgYXJlIG5vdFxuICAgICAgICAgIC8vIHRocm93biBiYWNrIGludG8gdGhlIGdlbmVyYXRvciBmdW5jdGlvbiwgYXMgaXMgdGhlIGNhc2VcbiAgICAgICAgICAvLyB3aGVuIGFuIGF3YWl0ZWQgUHJvbWlzZSBpcyByZWplY3RlZC4gVGhpcyBkaWZmZXJlbmNlIGluXG4gICAgICAgICAgLy8gYmVoYXZpb3IgYmV0d2VlbiB5aWVsZCBhbmQgYXdhaXQgaXMgaW1wb3J0YW50LCBiZWNhdXNlIGl0XG4gICAgICAgICAgLy8gYWxsb3dzIHRoZSBjb25zdW1lciB0byBkZWNpZGUgd2hhdCB0byBkbyB3aXRoIHRoZSB5aWVsZGVkXG4gICAgICAgICAgLy8gcmVqZWN0aW9uIChzd2FsbG93IGl0IGFuZCBjb250aW51ZSwgbWFudWFsbHkgLnRocm93IGl0IGJhY2tcbiAgICAgICAgICAvLyBpbnRvIHRoZSBnZW5lcmF0b3IsIGFiYW5kb24gaXRlcmF0aW9uLCB3aGF0ZXZlcikuIFdpdGhcbiAgICAgICAgICAvLyBhd2FpdCwgYnkgY29udHJhc3QsIHRoZXJlIGlzIG5vIG9wcG9ydHVuaXR5IHRvIGV4YW1pbmUgdGhlXG4gICAgICAgICAgLy8gcmVqZWN0aW9uIHJlYXNvbiBvdXRzaWRlIHRoZSBnZW5lcmF0b3IgZnVuY3Rpb24sIHNvIHRoZVxuICAgICAgICAgIC8vIG9ubHkgb3B0aW9uIGlzIHRvIHRocm93IGl0IGZyb20gdGhlIGF3YWl0IGV4cHJlc3Npb24sIGFuZFxuICAgICAgICAgIC8vIGxldCB0aGUgZ2VuZXJhdG9yIGZ1bmN0aW9uIGhhbmRsZSB0aGUgZXhjZXB0aW9uLlxuICAgICAgICAgIHJlc3VsdC52YWx1ZSA9IHVud3JhcHBlZDtcbiAgICAgICAgICByZXNvbHZlKHJlc3VsdCk7XG4gICAgICAgIH0sIHJlamVjdCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIHByZXZpb3VzUHJvbWlzZTtcblxuICAgIGZ1bmN0aW9uIGVucXVldWUobWV0aG9kLCBhcmcpIHtcbiAgICAgIGZ1bmN0aW9uIGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnKCkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgaW52b2tlKG1ldGhvZCwgYXJnLCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHByZXZpb3VzUHJvbWlzZSA9XG4gICAgICAgIC8vIElmIGVucXVldWUgaGFzIGJlZW4gY2FsbGVkIGJlZm9yZSwgdGhlbiB3ZSB3YW50IHRvIHdhaXQgdW50aWxcbiAgICAgICAgLy8gYWxsIHByZXZpb3VzIFByb21pc2VzIGhhdmUgYmVlbiByZXNvbHZlZCBiZWZvcmUgY2FsbGluZyBpbnZva2UsXG4gICAgICAgIC8vIHNvIHRoYXQgcmVzdWx0cyBhcmUgYWx3YXlzIGRlbGl2ZXJlZCBpbiB0aGUgY29ycmVjdCBvcmRlci4gSWZcbiAgICAgICAgLy8gZW5xdWV1ZSBoYXMgbm90IGJlZW4gY2FsbGVkIGJlZm9yZSwgdGhlbiBpdCBpcyBpbXBvcnRhbnQgdG9cbiAgICAgICAgLy8gY2FsbCBpbnZva2UgaW1tZWRpYXRlbHksIHdpdGhvdXQgd2FpdGluZyBvbiBhIGNhbGxiYWNrIHRvIGZpcmUsXG4gICAgICAgIC8vIHNvIHRoYXQgdGhlIGFzeW5jIGdlbmVyYXRvciBmdW5jdGlvbiBoYXMgdGhlIG9wcG9ydHVuaXR5IHRvIGRvXG4gICAgICAgIC8vIGFueSBuZWNlc3Nhcnkgc2V0dXAgaW4gYSBwcmVkaWN0YWJsZSB3YXkuIFRoaXMgcHJlZGljdGFiaWxpdHlcbiAgICAgICAgLy8gaXMgd2h5IHRoZSBQcm9taXNlIGNvbnN0cnVjdG9yIHN5bmNocm9ub3VzbHkgaW52b2tlcyBpdHNcbiAgICAgICAgLy8gZXhlY3V0b3IgY2FsbGJhY2ssIGFuZCB3aHkgYXN5bmMgZnVuY3Rpb25zIHN5bmNocm9ub3VzbHlcbiAgICAgICAgLy8gZXhlY3V0ZSBjb2RlIGJlZm9yZSB0aGUgZmlyc3QgYXdhaXQuIFNpbmNlIHdlIGltcGxlbWVudCBzaW1wbGVcbiAgICAgICAgLy8gYXN5bmMgZnVuY3Rpb25zIGluIHRlcm1zIG9mIGFzeW5jIGdlbmVyYXRvcnMsIGl0IGlzIGVzcGVjaWFsbHlcbiAgICAgICAgLy8gaW1wb3J0YW50IHRvIGdldCB0aGlzIHJpZ2h0LCBldmVuIHRob3VnaCBpdCByZXF1aXJlcyBjYXJlLlxuICAgICAgICBwcmV2aW91c1Byb21pc2UgPyBwcmV2aW91c1Byb21pc2UudGhlbihcbiAgICAgICAgICBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZyxcbiAgICAgICAgICAvLyBBdm9pZCBwcm9wYWdhdGluZyBmYWlsdXJlcyB0byBQcm9taXNlcyByZXR1cm5lZCBieSBsYXRlclxuICAgICAgICAgIC8vIGludm9jYXRpb25zIG9mIHRoZSBpdGVyYXRvci5cbiAgICAgICAgICBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZ1xuICAgICAgICApIDogY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmcoKTtcbiAgICB9XG5cbiAgICAvLyBEZWZpbmUgdGhlIHVuaWZpZWQgaGVscGVyIG1ldGhvZCB0aGF0IGlzIHVzZWQgdG8gaW1wbGVtZW50IC5uZXh0LFxuICAgIC8vIC50aHJvdywgYW5kIC5yZXR1cm4gKHNlZSBkZWZpbmVJdGVyYXRvck1ldGhvZHMpLlxuICAgIHRoaXMuX2ludm9rZSA9IGVucXVldWU7XG4gIH1cblxuICBkZWZpbmVJdGVyYXRvck1ldGhvZHMoQXN5bmNJdGVyYXRvci5wcm90b3R5cGUpO1xuICBBc3luY0l0ZXJhdG9yLnByb3RvdHlwZVthc3luY0l0ZXJhdG9yU3ltYm9sXSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcbiAgcnVudGltZS5Bc3luY0l0ZXJhdG9yID0gQXN5bmNJdGVyYXRvcjtcblxuICAvLyBOb3RlIHRoYXQgc2ltcGxlIGFzeW5jIGZ1bmN0aW9ucyBhcmUgaW1wbGVtZW50ZWQgb24gdG9wIG9mXG4gIC8vIEFzeW5jSXRlcmF0b3Igb2JqZWN0czsgdGhleSBqdXN0IHJldHVybiBhIFByb21pc2UgZm9yIHRoZSB2YWx1ZSBvZlxuICAvLyB0aGUgZmluYWwgcmVzdWx0IHByb2R1Y2VkIGJ5IHRoZSBpdGVyYXRvci5cbiAgcnVudGltZS5hc3luYyA9IGZ1bmN0aW9uKGlubmVyRm4sIG91dGVyRm4sIHNlbGYsIHRyeUxvY3NMaXN0KSB7XG4gICAgdmFyIGl0ZXIgPSBuZXcgQXN5bmNJdGVyYXRvcihcbiAgICAgIHdyYXAoaW5uZXJGbiwgb3V0ZXJGbiwgc2VsZiwgdHJ5TG9jc0xpc3QpXG4gICAgKTtcblxuICAgIHJldHVybiBydW50aW1lLmlzR2VuZXJhdG9yRnVuY3Rpb24ob3V0ZXJGbilcbiAgICAgID8gaXRlciAvLyBJZiBvdXRlckZuIGlzIGEgZ2VuZXJhdG9yLCByZXR1cm4gdGhlIGZ1bGwgaXRlcmF0b3IuXG4gICAgICA6IGl0ZXIubmV4dCgpLnRoZW4oZnVuY3Rpb24ocmVzdWx0KSB7XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdC5kb25lID8gcmVzdWx0LnZhbHVlIDogaXRlci5uZXh0KCk7XG4gICAgICAgIH0pO1xuICB9O1xuXG4gIGZ1bmN0aW9uIG1ha2VJbnZva2VNZXRob2QoaW5uZXJGbiwgc2VsZiwgY29udGV4dCkge1xuICAgIHZhciBzdGF0ZSA9IEdlblN0YXRlU3VzcGVuZGVkU3RhcnQ7XG5cbiAgICByZXR1cm4gZnVuY3Rpb24gaW52b2tlKG1ldGhvZCwgYXJnKSB7XG4gICAgICBpZiAoc3RhdGUgPT09IEdlblN0YXRlRXhlY3V0aW5nKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IHJ1bm5pbmdcIik7XG4gICAgICB9XG5cbiAgICAgIGlmIChzdGF0ZSA9PT0gR2VuU3RhdGVDb21wbGV0ZWQpIHtcbiAgICAgICAgaWYgKG1ldGhvZCA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgdGhyb3cgYXJnO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQmUgZm9yZ2l2aW5nLCBwZXIgMjUuMy4zLjMuMyBvZiB0aGUgc3BlYzpcbiAgICAgICAgLy8gaHR0cHM6Ly9wZW9wbGUubW96aWxsYS5vcmcvfmpvcmVuZG9yZmYvZXM2LWRyYWZ0Lmh0bWwjc2VjLWdlbmVyYXRvcnJlc3VtZVxuICAgICAgICByZXR1cm4gZG9uZVJlc3VsdCgpO1xuICAgICAgfVxuXG4gICAgICBjb250ZXh0Lm1ldGhvZCA9IG1ldGhvZDtcbiAgICAgIGNvbnRleHQuYXJnID0gYXJnO1xuXG4gICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICB2YXIgZGVsZWdhdGUgPSBjb250ZXh0LmRlbGVnYXRlO1xuICAgICAgICBpZiAoZGVsZWdhdGUpIHtcbiAgICAgICAgICB2YXIgZGVsZWdhdGVSZXN1bHQgPSBtYXliZUludm9rZURlbGVnYXRlKGRlbGVnYXRlLCBjb250ZXh0KTtcbiAgICAgICAgICBpZiAoZGVsZWdhdGVSZXN1bHQpIHtcbiAgICAgICAgICAgIGlmIChkZWxlZ2F0ZVJlc3VsdCA9PT0gQ29udGludWVTZW50aW5lbCkgY29udGludWU7XG4gICAgICAgICAgICByZXR1cm4gZGVsZWdhdGVSZXN1bHQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbnRleHQubWV0aG9kID09PSBcIm5leHRcIikge1xuICAgICAgICAgIC8vIFNldHRpbmcgY29udGV4dC5fc2VudCBmb3IgbGVnYWN5IHN1cHBvcnQgb2YgQmFiZWwnc1xuICAgICAgICAgIC8vIGZ1bmN0aW9uLnNlbnQgaW1wbGVtZW50YXRpb24uXG4gICAgICAgICAgY29udGV4dC5zZW50ID0gY29udGV4dC5fc2VudCA9IGNvbnRleHQuYXJnO1xuXG4gICAgICAgIH0gZWxzZSBpZiAoY29udGV4dC5tZXRob2QgPT09IFwidGhyb3dcIikge1xuICAgICAgICAgIGlmIChzdGF0ZSA9PT0gR2VuU3RhdGVTdXNwZW5kZWRTdGFydCkge1xuICAgICAgICAgICAgc3RhdGUgPSBHZW5TdGF0ZUNvbXBsZXRlZDtcbiAgICAgICAgICAgIHRocm93IGNvbnRleHQuYXJnO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnRleHQuZGlzcGF0Y2hFeGNlcHRpb24oY29udGV4dC5hcmcpO1xuXG4gICAgICAgIH0gZWxzZSBpZiAoY29udGV4dC5tZXRob2QgPT09IFwicmV0dXJuXCIpIHtcbiAgICAgICAgICBjb250ZXh0LmFicnVwdChcInJldHVyblwiLCBjb250ZXh0LmFyZyk7XG4gICAgICAgIH1cblxuICAgICAgICBzdGF0ZSA9IEdlblN0YXRlRXhlY3V0aW5nO1xuXG4gICAgICAgIHZhciByZWNvcmQgPSB0cnlDYXRjaChpbm5lckZuLCBzZWxmLCBjb250ZXh0KTtcbiAgICAgICAgaWYgKHJlY29yZC50eXBlID09PSBcIm5vcm1hbFwiKSB7XG4gICAgICAgICAgLy8gSWYgYW4gZXhjZXB0aW9uIGlzIHRocm93biBmcm9tIGlubmVyRm4sIHdlIGxlYXZlIHN0YXRlID09PVxuICAgICAgICAgIC8vIEdlblN0YXRlRXhlY3V0aW5nIGFuZCBsb29wIGJhY2sgZm9yIGFub3RoZXIgaW52b2NhdGlvbi5cbiAgICAgICAgICBzdGF0ZSA9IGNvbnRleHQuZG9uZVxuICAgICAgICAgICAgPyBHZW5TdGF0ZUNvbXBsZXRlZFxuICAgICAgICAgICAgOiBHZW5TdGF0ZVN1c3BlbmRlZFlpZWxkO1xuXG4gICAgICAgICAgaWYgKHJlY29yZC5hcmcgPT09IENvbnRpbnVlU2VudGluZWwpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB2YWx1ZTogcmVjb3JkLmFyZyxcbiAgICAgICAgICAgIGRvbmU6IGNvbnRleHQuZG9uZVxuICAgICAgICAgIH07XG5cbiAgICAgICAgfSBlbHNlIGlmIChyZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgc3RhdGUgPSBHZW5TdGF0ZUNvbXBsZXRlZDtcbiAgICAgICAgICAvLyBEaXNwYXRjaCB0aGUgZXhjZXB0aW9uIGJ5IGxvb3BpbmcgYmFjayBhcm91bmQgdG8gdGhlXG4gICAgICAgICAgLy8gY29udGV4dC5kaXNwYXRjaEV4Y2VwdGlvbihjb250ZXh0LmFyZykgY2FsbCBhYm92ZS5cbiAgICAgICAgICBjb250ZXh0Lm1ldGhvZCA9IFwidGhyb3dcIjtcbiAgICAgICAgICBjb250ZXh0LmFyZyA9IHJlY29yZC5hcmc7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgLy8gQ2FsbCBkZWxlZ2F0ZS5pdGVyYXRvcltjb250ZXh0Lm1ldGhvZF0oY29udGV4dC5hcmcpIGFuZCBoYW5kbGUgdGhlXG4gIC8vIHJlc3VsdCwgZWl0aGVyIGJ5IHJldHVybmluZyBhIHsgdmFsdWUsIGRvbmUgfSByZXN1bHQgZnJvbSB0aGVcbiAgLy8gZGVsZWdhdGUgaXRlcmF0b3IsIG9yIGJ5IG1vZGlmeWluZyBjb250ZXh0Lm1ldGhvZCBhbmQgY29udGV4dC5hcmcsXG4gIC8vIHNldHRpbmcgY29udGV4dC5kZWxlZ2F0ZSB0byBudWxsLCBhbmQgcmV0dXJuaW5nIHRoZSBDb250aW51ZVNlbnRpbmVsLlxuICBmdW5jdGlvbiBtYXliZUludm9rZURlbGVnYXRlKGRlbGVnYXRlLCBjb250ZXh0KSB7XG4gICAgdmFyIG1ldGhvZCA9IGRlbGVnYXRlLml0ZXJhdG9yW2NvbnRleHQubWV0aG9kXTtcbiAgICBpZiAobWV0aG9kID09PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIEEgLnRocm93IG9yIC5yZXR1cm4gd2hlbiB0aGUgZGVsZWdhdGUgaXRlcmF0b3IgaGFzIG5vIC50aHJvd1xuICAgICAgLy8gbWV0aG9kIGFsd2F5cyB0ZXJtaW5hdGVzIHRoZSB5aWVsZCogbG9vcC5cbiAgICAgIGNvbnRleHQuZGVsZWdhdGUgPSBudWxsO1xuXG4gICAgICBpZiAoY29udGV4dC5tZXRob2QgPT09IFwidGhyb3dcIikge1xuICAgICAgICBpZiAoZGVsZWdhdGUuaXRlcmF0b3IucmV0dXJuKSB7XG4gICAgICAgICAgLy8gSWYgdGhlIGRlbGVnYXRlIGl0ZXJhdG9yIGhhcyBhIHJldHVybiBtZXRob2QsIGdpdmUgaXQgYVxuICAgICAgICAgIC8vIGNoYW5jZSB0byBjbGVhbiB1cC5cbiAgICAgICAgICBjb250ZXh0Lm1ldGhvZCA9IFwicmV0dXJuXCI7XG4gICAgICAgICAgY29udGV4dC5hcmcgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgbWF5YmVJbnZva2VEZWxlZ2F0ZShkZWxlZ2F0ZSwgY29udGV4dCk7XG5cbiAgICAgICAgICBpZiAoY29udGV4dC5tZXRob2QgPT09IFwidGhyb3dcIikge1xuICAgICAgICAgICAgLy8gSWYgbWF5YmVJbnZva2VEZWxlZ2F0ZShjb250ZXh0KSBjaGFuZ2VkIGNvbnRleHQubWV0aG9kIGZyb21cbiAgICAgICAgICAgIC8vIFwicmV0dXJuXCIgdG8gXCJ0aHJvd1wiLCBsZXQgdGhhdCBvdmVycmlkZSB0aGUgVHlwZUVycm9yIGJlbG93LlxuICAgICAgICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29udGV4dC5tZXRob2QgPSBcInRocm93XCI7XG4gICAgICAgIGNvbnRleHQuYXJnID0gbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICBcIlRoZSBpdGVyYXRvciBkb2VzIG5vdCBwcm92aWRlIGEgJ3Rocm93JyBtZXRob2RcIik7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgIH1cblxuICAgIHZhciByZWNvcmQgPSB0cnlDYXRjaChtZXRob2QsIGRlbGVnYXRlLml0ZXJhdG9yLCBjb250ZXh0LmFyZyk7XG5cbiAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgY29udGV4dC5tZXRob2QgPSBcInRocm93XCI7XG4gICAgICBjb250ZXh0LmFyZyA9IHJlY29yZC5hcmc7XG4gICAgICBjb250ZXh0LmRlbGVnYXRlID0gbnVsbDtcbiAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgIH1cblxuICAgIHZhciBpbmZvID0gcmVjb3JkLmFyZztcblxuICAgIGlmICghIGluZm8pIHtcbiAgICAgIGNvbnRleHQubWV0aG9kID0gXCJ0aHJvd1wiO1xuICAgICAgY29udGV4dC5hcmcgPSBuZXcgVHlwZUVycm9yKFwiaXRlcmF0b3IgcmVzdWx0IGlzIG5vdCBhbiBvYmplY3RcIik7XG4gICAgICBjb250ZXh0LmRlbGVnYXRlID0gbnVsbDtcbiAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgIH1cblxuICAgIGlmIChpbmZvLmRvbmUpIHtcbiAgICAgIC8vIEFzc2lnbiB0aGUgcmVzdWx0IG9mIHRoZSBmaW5pc2hlZCBkZWxlZ2F0ZSB0byB0aGUgdGVtcG9yYXJ5XG4gICAgICAvLyB2YXJpYWJsZSBzcGVjaWZpZWQgYnkgZGVsZWdhdGUucmVzdWx0TmFtZSAoc2VlIGRlbGVnYXRlWWllbGQpLlxuICAgICAgY29udGV4dFtkZWxlZ2F0ZS5yZXN1bHROYW1lXSA9IGluZm8udmFsdWU7XG5cbiAgICAgIC8vIFJlc3VtZSBleGVjdXRpb24gYXQgdGhlIGRlc2lyZWQgbG9jYXRpb24gKHNlZSBkZWxlZ2F0ZVlpZWxkKS5cbiAgICAgIGNvbnRleHQubmV4dCA9IGRlbGVnYXRlLm5leHRMb2M7XG5cbiAgICAgIC8vIElmIGNvbnRleHQubWV0aG9kIHdhcyBcInRocm93XCIgYnV0IHRoZSBkZWxlZ2F0ZSBoYW5kbGVkIHRoZVxuICAgICAgLy8gZXhjZXB0aW9uLCBsZXQgdGhlIG91dGVyIGdlbmVyYXRvciBwcm9jZWVkIG5vcm1hbGx5LiBJZlxuICAgICAgLy8gY29udGV4dC5tZXRob2Qgd2FzIFwibmV4dFwiLCBmb3JnZXQgY29udGV4dC5hcmcgc2luY2UgaXQgaGFzIGJlZW5cbiAgICAgIC8vIFwiY29uc3VtZWRcIiBieSB0aGUgZGVsZWdhdGUgaXRlcmF0b3IuIElmIGNvbnRleHQubWV0aG9kIHdhc1xuICAgICAgLy8gXCJyZXR1cm5cIiwgYWxsb3cgdGhlIG9yaWdpbmFsIC5yZXR1cm4gY2FsbCB0byBjb250aW51ZSBpbiB0aGVcbiAgICAgIC8vIG91dGVyIGdlbmVyYXRvci5cbiAgICAgIGlmIChjb250ZXh0Lm1ldGhvZCAhPT0gXCJyZXR1cm5cIikge1xuICAgICAgICBjb250ZXh0Lm1ldGhvZCA9IFwibmV4dFwiO1xuICAgICAgICBjb250ZXh0LmFyZyA9IHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBSZS15aWVsZCB0aGUgcmVzdWx0IHJldHVybmVkIGJ5IHRoZSBkZWxlZ2F0ZSBtZXRob2QuXG4gICAgICByZXR1cm4gaW5mbztcbiAgICB9XG5cbiAgICAvLyBUaGUgZGVsZWdhdGUgaXRlcmF0b3IgaXMgZmluaXNoZWQsIHNvIGZvcmdldCBpdCBhbmQgY29udGludWUgd2l0aFxuICAgIC8vIHRoZSBvdXRlciBnZW5lcmF0b3IuXG4gICAgY29udGV4dC5kZWxlZ2F0ZSA9IG51bGw7XG4gICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gIH1cblxuICAvLyBEZWZpbmUgR2VuZXJhdG9yLnByb3RvdHlwZS57bmV4dCx0aHJvdyxyZXR1cm59IGluIHRlcm1zIG9mIHRoZVxuICAvLyB1bmlmaWVkIC5faW52b2tlIGhlbHBlciBtZXRob2QuXG4gIGRlZmluZUl0ZXJhdG9yTWV0aG9kcyhHcCk7XG5cbiAgR3BbdG9TdHJpbmdUYWdTeW1ib2xdID0gXCJHZW5lcmF0b3JcIjtcblxuICAvLyBBIEdlbmVyYXRvciBzaG91bGQgYWx3YXlzIHJldHVybiBpdHNlbGYgYXMgdGhlIGl0ZXJhdG9yIG9iamVjdCB3aGVuIHRoZVxuICAvLyBAQGl0ZXJhdG9yIGZ1bmN0aW9uIGlzIGNhbGxlZCBvbiBpdC4gU29tZSBicm93c2VycycgaW1wbGVtZW50YXRpb25zIG9mIHRoZVxuICAvLyBpdGVyYXRvciBwcm90b3R5cGUgY2hhaW4gaW5jb3JyZWN0bHkgaW1wbGVtZW50IHRoaXMsIGNhdXNpbmcgdGhlIEdlbmVyYXRvclxuICAvLyBvYmplY3QgdG8gbm90IGJlIHJldHVybmVkIGZyb20gdGhpcyBjYWxsLiBUaGlzIGVuc3VyZXMgdGhhdCBkb2Vzbid0IGhhcHBlbi5cbiAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWdlbmVyYXRvci9pc3N1ZXMvMjc0IGZvciBtb3JlIGRldGFpbHMuXG4gIEdwW2l0ZXJhdG9yU3ltYm9sXSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEdwLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIFwiW29iamVjdCBHZW5lcmF0b3JdXCI7XG4gIH07XG5cbiAgZnVuY3Rpb24gcHVzaFRyeUVudHJ5KGxvY3MpIHtcbiAgICB2YXIgZW50cnkgPSB7IHRyeUxvYzogbG9jc1swXSB9O1xuXG4gICAgaWYgKDEgaW4gbG9jcykge1xuICAgICAgZW50cnkuY2F0Y2hMb2MgPSBsb2NzWzFdO1xuICAgIH1cblxuICAgIGlmICgyIGluIGxvY3MpIHtcbiAgICAgIGVudHJ5LmZpbmFsbHlMb2MgPSBsb2NzWzJdO1xuICAgICAgZW50cnkuYWZ0ZXJMb2MgPSBsb2NzWzNdO1xuICAgIH1cblxuICAgIHRoaXMudHJ5RW50cmllcy5wdXNoKGVudHJ5KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlc2V0VHJ5RW50cnkoZW50cnkpIHtcbiAgICB2YXIgcmVjb3JkID0gZW50cnkuY29tcGxldGlvbiB8fCB7fTtcbiAgICByZWNvcmQudHlwZSA9IFwibm9ybWFsXCI7XG4gICAgZGVsZXRlIHJlY29yZC5hcmc7XG4gICAgZW50cnkuY29tcGxldGlvbiA9IHJlY29yZDtcbiAgfVxuXG4gIGZ1bmN0aW9uIENvbnRleHQodHJ5TG9jc0xpc3QpIHtcbiAgICAvLyBUaGUgcm9vdCBlbnRyeSBvYmplY3QgKGVmZmVjdGl2ZWx5IGEgdHJ5IHN0YXRlbWVudCB3aXRob3V0IGEgY2F0Y2hcbiAgICAvLyBvciBhIGZpbmFsbHkgYmxvY2spIGdpdmVzIHVzIGEgcGxhY2UgdG8gc3RvcmUgdmFsdWVzIHRocm93biBmcm9tXG4gICAgLy8gbG9jYXRpb25zIHdoZXJlIHRoZXJlIGlzIG5vIGVuY2xvc2luZyB0cnkgc3RhdGVtZW50LlxuICAgIHRoaXMudHJ5RW50cmllcyA9IFt7IHRyeUxvYzogXCJyb290XCIgfV07XG4gICAgdHJ5TG9jc0xpc3QuZm9yRWFjaChwdXNoVHJ5RW50cnksIHRoaXMpO1xuICAgIHRoaXMucmVzZXQodHJ1ZSk7XG4gIH1cblxuICBydW50aW1lLmtleXMgPSBmdW5jdGlvbihvYmplY3QpIHtcbiAgICB2YXIga2V5cyA9IFtdO1xuICAgIGZvciAodmFyIGtleSBpbiBvYmplY3QpIHtcbiAgICAgIGtleXMucHVzaChrZXkpO1xuICAgIH1cbiAgICBrZXlzLnJldmVyc2UoKTtcblxuICAgIC8vIFJhdGhlciB0aGFuIHJldHVybmluZyBhbiBvYmplY3Qgd2l0aCBhIG5leHQgbWV0aG9kLCB3ZSBrZWVwXG4gICAgLy8gdGhpbmdzIHNpbXBsZSBhbmQgcmV0dXJuIHRoZSBuZXh0IGZ1bmN0aW9uIGl0c2VsZi5cbiAgICByZXR1cm4gZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgIHdoaWxlIChrZXlzLmxlbmd0aCkge1xuICAgICAgICB2YXIga2V5ID0ga2V5cy5wb3AoKTtcbiAgICAgICAgaWYgKGtleSBpbiBvYmplY3QpIHtcbiAgICAgICAgICBuZXh0LnZhbHVlID0ga2V5O1xuICAgICAgICAgIG5leHQuZG9uZSA9IGZhbHNlO1xuICAgICAgICAgIHJldHVybiBuZXh0O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFRvIGF2b2lkIGNyZWF0aW5nIGFuIGFkZGl0aW9uYWwgb2JqZWN0LCB3ZSBqdXN0IGhhbmcgdGhlIC52YWx1ZVxuICAgICAgLy8gYW5kIC5kb25lIHByb3BlcnRpZXMgb2ZmIHRoZSBuZXh0IGZ1bmN0aW9uIG9iamVjdCBpdHNlbGYuIFRoaXNcbiAgICAgIC8vIGFsc28gZW5zdXJlcyB0aGF0IHRoZSBtaW5pZmllciB3aWxsIG5vdCBhbm9ueW1pemUgdGhlIGZ1bmN0aW9uLlxuICAgICAgbmV4dC5kb25lID0gdHJ1ZTtcbiAgICAgIHJldHVybiBuZXh0O1xuICAgIH07XG4gIH07XG5cbiAgZnVuY3Rpb24gdmFsdWVzKGl0ZXJhYmxlKSB7XG4gICAgaWYgKGl0ZXJhYmxlKSB7XG4gICAgICB2YXIgaXRlcmF0b3JNZXRob2QgPSBpdGVyYWJsZVtpdGVyYXRvclN5bWJvbF07XG4gICAgICBpZiAoaXRlcmF0b3JNZXRob2QpIHtcbiAgICAgICAgcmV0dXJuIGl0ZXJhdG9yTWV0aG9kLmNhbGwoaXRlcmFibGUpO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIGl0ZXJhYmxlLm5leHQgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICByZXR1cm4gaXRlcmFibGU7XG4gICAgICB9XG5cbiAgICAgIGlmICghaXNOYU4oaXRlcmFibGUubGVuZ3RoKSkge1xuICAgICAgICB2YXIgaSA9IC0xLCBuZXh0ID0gZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgICAgICB3aGlsZSAoKytpIDwgaXRlcmFibGUubGVuZ3RoKSB7XG4gICAgICAgICAgICBpZiAoaGFzT3duLmNhbGwoaXRlcmFibGUsIGkpKSB7XG4gICAgICAgICAgICAgIG5leHQudmFsdWUgPSBpdGVyYWJsZVtpXTtcbiAgICAgICAgICAgICAgbmV4dC5kb25lID0gZmFsc2U7XG4gICAgICAgICAgICAgIHJldHVybiBuZXh0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIG5leHQudmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgbmV4dC5kb25lID0gdHJ1ZTtcblxuICAgICAgICAgIHJldHVybiBuZXh0O1xuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiBuZXh0Lm5leHQgPSBuZXh0O1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFJldHVybiBhbiBpdGVyYXRvciB3aXRoIG5vIHZhbHVlcy5cbiAgICByZXR1cm4geyBuZXh0OiBkb25lUmVzdWx0IH07XG4gIH1cbiAgcnVudGltZS52YWx1ZXMgPSB2YWx1ZXM7XG5cbiAgZnVuY3Rpb24gZG9uZVJlc3VsdCgpIHtcbiAgICByZXR1cm4geyB2YWx1ZTogdW5kZWZpbmVkLCBkb25lOiB0cnVlIH07XG4gIH1cblxuICBDb250ZXh0LnByb3RvdHlwZSA9IHtcbiAgICBjb25zdHJ1Y3RvcjogQ29udGV4dCxcblxuICAgIHJlc2V0OiBmdW5jdGlvbihza2lwVGVtcFJlc2V0KSB7XG4gICAgICB0aGlzLnByZXYgPSAwO1xuICAgICAgdGhpcy5uZXh0ID0gMDtcbiAgICAgIC8vIFJlc2V0dGluZyBjb250ZXh0Ll9zZW50IGZvciBsZWdhY3kgc3VwcG9ydCBvZiBCYWJlbCdzXG4gICAgICAvLyBmdW5jdGlvbi5zZW50IGltcGxlbWVudGF0aW9uLlxuICAgICAgdGhpcy5zZW50ID0gdGhpcy5fc2VudCA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuZG9uZSA9IGZhbHNlO1xuICAgICAgdGhpcy5kZWxlZ2F0ZSA9IG51bGw7XG5cbiAgICAgIHRoaXMubWV0aG9kID0gXCJuZXh0XCI7XG4gICAgICB0aGlzLmFyZyA9IHVuZGVmaW5lZDtcblxuICAgICAgdGhpcy50cnlFbnRyaWVzLmZvckVhY2gocmVzZXRUcnlFbnRyeSk7XG5cbiAgICAgIGlmICghc2tpcFRlbXBSZXNldCkge1xuICAgICAgICBmb3IgKHZhciBuYW1lIGluIHRoaXMpIHtcbiAgICAgICAgICAvLyBOb3Qgc3VyZSBhYm91dCB0aGUgb3B0aW1hbCBvcmRlciBvZiB0aGVzZSBjb25kaXRpb25zOlxuICAgICAgICAgIGlmIChuYW1lLmNoYXJBdCgwKSA9PT0gXCJ0XCIgJiZcbiAgICAgICAgICAgICAgaGFzT3duLmNhbGwodGhpcywgbmFtZSkgJiZcbiAgICAgICAgICAgICAgIWlzTmFOKCtuYW1lLnNsaWNlKDEpKSkge1xuICAgICAgICAgICAgdGhpc1tuYW1lXSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc3RvcDogZnVuY3Rpb24oKSB7XG4gICAgICB0aGlzLmRvbmUgPSB0cnVlO1xuXG4gICAgICB2YXIgcm9vdEVudHJ5ID0gdGhpcy50cnlFbnRyaWVzWzBdO1xuICAgICAgdmFyIHJvb3RSZWNvcmQgPSByb290RW50cnkuY29tcGxldGlvbjtcbiAgICAgIGlmIChyb290UmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICB0aHJvdyByb290UmVjb3JkLmFyZztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMucnZhbDtcbiAgICB9LFxuXG4gICAgZGlzcGF0Y2hFeGNlcHRpb246IGZ1bmN0aW9uKGV4Y2VwdGlvbikge1xuICAgICAgaWYgKHRoaXMuZG9uZSkge1xuICAgICAgICB0aHJvdyBleGNlcHRpb247XG4gICAgICB9XG5cbiAgICAgIHZhciBjb250ZXh0ID0gdGhpcztcbiAgICAgIGZ1bmN0aW9uIGhhbmRsZShsb2MsIGNhdWdodCkge1xuICAgICAgICByZWNvcmQudHlwZSA9IFwidGhyb3dcIjtcbiAgICAgICAgcmVjb3JkLmFyZyA9IGV4Y2VwdGlvbjtcbiAgICAgICAgY29udGV4dC5uZXh0ID0gbG9jO1xuXG4gICAgICAgIGlmIChjYXVnaHQpIHtcbiAgICAgICAgICAvLyBJZiB0aGUgZGlzcGF0Y2hlZCBleGNlcHRpb24gd2FzIGNhdWdodCBieSBhIGNhdGNoIGJsb2NrLFxuICAgICAgICAgIC8vIHRoZW4gbGV0IHRoYXQgY2F0Y2ggYmxvY2sgaGFuZGxlIHRoZSBleGNlcHRpb24gbm9ybWFsbHkuXG4gICAgICAgICAgY29udGV4dC5tZXRob2QgPSBcIm5leHRcIjtcbiAgICAgICAgICBjb250ZXh0LmFyZyA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAhISBjYXVnaHQ7XG4gICAgICB9XG5cbiAgICAgIGZvciAodmFyIGkgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy50cnlFbnRyaWVzW2ldO1xuICAgICAgICB2YXIgcmVjb3JkID0gZW50cnkuY29tcGxldGlvbjtcblxuICAgICAgICBpZiAoZW50cnkudHJ5TG9jID09PSBcInJvb3RcIikge1xuICAgICAgICAgIC8vIEV4Y2VwdGlvbiB0aHJvd24gb3V0c2lkZSBvZiBhbnkgdHJ5IGJsb2NrIHRoYXQgY291bGQgaGFuZGxlXG4gICAgICAgICAgLy8gaXQsIHNvIHNldCB0aGUgY29tcGxldGlvbiB2YWx1ZSBvZiB0aGUgZW50aXJlIGZ1bmN0aW9uIHRvXG4gICAgICAgICAgLy8gdGhyb3cgdGhlIGV4Y2VwdGlvbi5cbiAgICAgICAgICByZXR1cm4gaGFuZGxlKFwiZW5kXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGVudHJ5LnRyeUxvYyA8PSB0aGlzLnByZXYpIHtcbiAgICAgICAgICB2YXIgaGFzQ2F0Y2ggPSBoYXNPd24uY2FsbChlbnRyeSwgXCJjYXRjaExvY1wiKTtcbiAgICAgICAgICB2YXIgaGFzRmluYWxseSA9IGhhc093bi5jYWxsKGVudHJ5LCBcImZpbmFsbHlMb2NcIik7XG5cbiAgICAgICAgICBpZiAoaGFzQ2F0Y2ggJiYgaGFzRmluYWxseSkge1xuICAgICAgICAgICAgaWYgKHRoaXMucHJldiA8IGVudHJ5LmNhdGNoTG9jKSB7XG4gICAgICAgICAgICAgIHJldHVybiBoYW5kbGUoZW50cnkuY2F0Y2hMb2MsIHRydWUpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnByZXYgPCBlbnRyeS5maW5hbGx5TG9jKSB7XG4gICAgICAgICAgICAgIHJldHVybiBoYW5kbGUoZW50cnkuZmluYWxseUxvYyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICB9IGVsc2UgaWYgKGhhc0NhdGNoKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wcmV2IDwgZW50cnkuY2F0Y2hMb2MpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZShlbnRyeS5jYXRjaExvYywgdHJ1ZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICB9IGVsc2UgaWYgKGhhc0ZpbmFsbHkpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBlbnRyeS5maW5hbGx5TG9jKSB7XG4gICAgICAgICAgICAgIHJldHVybiBoYW5kbGUoZW50cnkuZmluYWxseUxvYyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwidHJ5IHN0YXRlbWVudCB3aXRob3V0IGNhdGNoIG9yIGZpbmFsbHlcIik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIGFicnVwdDogZnVuY3Rpb24odHlwZSwgYXJnKSB7XG4gICAgICBmb3IgKHZhciBpID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgIHZhciBlbnRyeSA9IHRoaXMudHJ5RW50cmllc1tpXTtcbiAgICAgICAgaWYgKGVudHJ5LnRyeUxvYyA8PSB0aGlzLnByZXYgJiZcbiAgICAgICAgICAgIGhhc093bi5jYWxsKGVudHJ5LCBcImZpbmFsbHlMb2NcIikgJiZcbiAgICAgICAgICAgIHRoaXMucHJldiA8IGVudHJ5LmZpbmFsbHlMb2MpIHtcbiAgICAgICAgICB2YXIgZmluYWxseUVudHJ5ID0gZW50cnk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGZpbmFsbHlFbnRyeSAmJlxuICAgICAgICAgICh0eXBlID09PSBcImJyZWFrXCIgfHxcbiAgICAgICAgICAgdHlwZSA9PT0gXCJjb250aW51ZVwiKSAmJlxuICAgICAgICAgIGZpbmFsbHlFbnRyeS50cnlMb2MgPD0gYXJnICYmXG4gICAgICAgICAgYXJnIDw9IGZpbmFsbHlFbnRyeS5maW5hbGx5TG9jKSB7XG4gICAgICAgIC8vIElnbm9yZSB0aGUgZmluYWxseSBlbnRyeSBpZiBjb250cm9sIGlzIG5vdCBqdW1waW5nIHRvIGFcbiAgICAgICAgLy8gbG9jYXRpb24gb3V0c2lkZSB0aGUgdHJ5L2NhdGNoIGJsb2NrLlxuICAgICAgICBmaW5hbGx5RW50cnkgPSBudWxsO1xuICAgICAgfVxuXG4gICAgICB2YXIgcmVjb3JkID0gZmluYWxseUVudHJ5ID8gZmluYWxseUVudHJ5LmNvbXBsZXRpb24gOiB7fTtcbiAgICAgIHJlY29yZC50eXBlID0gdHlwZTtcbiAgICAgIHJlY29yZC5hcmcgPSBhcmc7XG5cbiAgICAgIGlmIChmaW5hbGx5RW50cnkpIHtcbiAgICAgICAgdGhpcy5tZXRob2QgPSBcIm5leHRcIjtcbiAgICAgICAgdGhpcy5uZXh0ID0gZmluYWxseUVudHJ5LmZpbmFsbHlMb2M7XG4gICAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5jb21wbGV0ZShyZWNvcmQpO1xuICAgIH0sXG5cbiAgICBjb21wbGV0ZTogZnVuY3Rpb24ocmVjb3JkLCBhZnRlckxvYykge1xuICAgICAgaWYgKHJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcbiAgICAgICAgdGhyb3cgcmVjb3JkLmFyZztcbiAgICAgIH1cblxuICAgICAgaWYgKHJlY29yZC50eXBlID09PSBcImJyZWFrXCIgfHxcbiAgICAgICAgICByZWNvcmQudHlwZSA9PT0gXCJjb250aW51ZVwiKSB7XG4gICAgICAgIHRoaXMubmV4dCA9IHJlY29yZC5hcmc7XG4gICAgICB9IGVsc2UgaWYgKHJlY29yZC50eXBlID09PSBcInJldHVyblwiKSB7XG4gICAgICAgIHRoaXMucnZhbCA9IHRoaXMuYXJnID0gcmVjb3JkLmFyZztcbiAgICAgICAgdGhpcy5tZXRob2QgPSBcInJldHVyblwiO1xuICAgICAgICB0aGlzLm5leHQgPSBcImVuZFwiO1xuICAgICAgfSBlbHNlIGlmIChyZWNvcmQudHlwZSA9PT0gXCJub3JtYWxcIiAmJiBhZnRlckxvYykge1xuICAgICAgICB0aGlzLm5leHQgPSBhZnRlckxvYztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgfSxcblxuICAgIGZpbmlzaDogZnVuY3Rpb24oZmluYWxseUxvYykge1xuICAgICAgZm9yICh2YXIgaSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2YXIgZW50cnkgPSB0aGlzLnRyeUVudHJpZXNbaV07XG4gICAgICAgIGlmIChlbnRyeS5maW5hbGx5TG9jID09PSBmaW5hbGx5TG9jKSB7XG4gICAgICAgICAgdGhpcy5jb21wbGV0ZShlbnRyeS5jb21wbGV0aW9uLCBlbnRyeS5hZnRlckxvYyk7XG4gICAgICAgICAgcmVzZXRUcnlFbnRyeShlbnRyeSk7XG4gICAgICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgXCJjYXRjaFwiOiBmdW5jdGlvbih0cnlMb2MpIHtcbiAgICAgIGZvciAodmFyIGkgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy50cnlFbnRyaWVzW2ldO1xuICAgICAgICBpZiAoZW50cnkudHJ5TG9jID09PSB0cnlMb2MpIHtcbiAgICAgICAgICB2YXIgcmVjb3JkID0gZW50cnkuY29tcGxldGlvbjtcbiAgICAgICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICAgICAgdmFyIHRocm93biA9IHJlY29yZC5hcmc7XG4gICAgICAgICAgICByZXNldFRyeUVudHJ5KGVudHJ5KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHRocm93bjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBUaGUgY29udGV4dC5jYXRjaCBtZXRob2QgbXVzdCBvbmx5IGJlIGNhbGxlZCB3aXRoIGEgbG9jYXRpb25cbiAgICAgIC8vIGFyZ3VtZW50IHRoYXQgY29ycmVzcG9uZHMgdG8gYSBrbm93biBjYXRjaCBibG9jay5cbiAgICAgIHRocm93IG5ldyBFcnJvcihcImlsbGVnYWwgY2F0Y2ggYXR0ZW1wdFwiKTtcbiAgICB9LFxuXG4gICAgZGVsZWdhdGVZaWVsZDogZnVuY3Rpb24oaXRlcmFibGUsIHJlc3VsdE5hbWUsIG5leHRMb2MpIHtcbiAgICAgIHRoaXMuZGVsZWdhdGUgPSB7XG4gICAgICAgIGl0ZXJhdG9yOiB2YWx1ZXMoaXRlcmFibGUpLFxuICAgICAgICByZXN1bHROYW1lOiByZXN1bHROYW1lLFxuICAgICAgICBuZXh0TG9jOiBuZXh0TG9jXG4gICAgICB9O1xuXG4gICAgICBpZiAodGhpcy5tZXRob2QgPT09IFwibmV4dFwiKSB7XG4gICAgICAgIC8vIERlbGliZXJhdGVseSBmb3JnZXQgdGhlIGxhc3Qgc2VudCB2YWx1ZSBzbyB0aGF0IHdlIGRvbid0XG4gICAgICAgIC8vIGFjY2lkZW50YWxseSBwYXNzIGl0IG9uIHRvIHRoZSBkZWxlZ2F0ZS5cbiAgICAgICAgdGhpcy5hcmcgPSB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgIH1cbiAgfTtcbn0pKFxuICAvLyBJbiBzbG9wcHkgbW9kZSwgdW5ib3VuZCBgdGhpc2AgcmVmZXJzIHRvIHRoZSBnbG9iYWwgb2JqZWN0LCBmYWxsYmFjayB0b1xuICAvLyBGdW5jdGlvbiBjb25zdHJ1Y3RvciBpZiB3ZSdyZSBpbiBnbG9iYWwgc3RyaWN0IG1vZGUuIFRoYXQgaXMgc2FkbHkgYSBmb3JtXG4gIC8vIG9mIGluZGlyZWN0IGV2YWwgd2hpY2ggdmlvbGF0ZXMgQ29udGVudCBTZWN1cml0eSBQb2xpY3kuXG4gIChmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXMgfSkoKSB8fCBGdW5jdGlvbihcInJldHVybiB0aGlzXCIpKClcbik7XG4iLCIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChzdHIpIHtcblx0cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChzdHIpLnJlcGxhY2UoL1shJygpKl0vZywgZnVuY3Rpb24gKGMpIHtcblx0XHRyZXR1cm4gJyUnICsgYy5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpO1xuXHR9KTtcbn07XG4iLCJ2YXIgbmV4dFRpY2sgPSByZXF1aXJlKCdwcm9jZXNzL2Jyb3dzZXIuanMnKS5uZXh0VGljaztcbnZhciBhcHBseSA9IEZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseTtcbnZhciBzbGljZSA9IEFycmF5LnByb3RvdHlwZS5zbGljZTtcbnZhciBpbW1lZGlhdGVJZHMgPSB7fTtcbnZhciBuZXh0SW1tZWRpYXRlSWQgPSAwO1xuXG4vLyBET00gQVBJcywgZm9yIGNvbXBsZXRlbmVzc1xuXG5leHBvcnRzLnNldFRpbWVvdXQgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIG5ldyBUaW1lb3V0KGFwcGx5LmNhbGwoc2V0VGltZW91dCwgd2luZG93LCBhcmd1bWVudHMpLCBjbGVhclRpbWVvdXQpO1xufTtcbmV4cG9ydHMuc2V0SW50ZXJ2YWwgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIG5ldyBUaW1lb3V0KGFwcGx5LmNhbGwoc2V0SW50ZXJ2YWwsIHdpbmRvdywgYXJndW1lbnRzKSwgY2xlYXJJbnRlcnZhbCk7XG59O1xuZXhwb3J0cy5jbGVhclRpbWVvdXQgPVxuZXhwb3J0cy5jbGVhckludGVydmFsID0gZnVuY3Rpb24odGltZW91dCkgeyB0aW1lb3V0LmNsb3NlKCk7IH07XG5cbmZ1bmN0aW9uIFRpbWVvdXQoaWQsIGNsZWFyRm4pIHtcbiAgdGhpcy5faWQgPSBpZDtcbiAgdGhpcy5fY2xlYXJGbiA9IGNsZWFyRm47XG59XG5UaW1lb3V0LnByb3RvdHlwZS51bnJlZiA9IFRpbWVvdXQucHJvdG90eXBlLnJlZiA9IGZ1bmN0aW9uKCkge307XG5UaW1lb3V0LnByb3RvdHlwZS5jbG9zZSA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLl9jbGVhckZuLmNhbGwod2luZG93LCB0aGlzLl9pZCk7XG59O1xuXG4vLyBEb2VzIG5vdCBzdGFydCB0aGUgdGltZSwganVzdCBzZXRzIHVwIHRoZSBtZW1iZXJzIG5lZWRlZC5cbmV4cG9ydHMuZW5yb2xsID0gZnVuY3Rpb24oaXRlbSwgbXNlY3MpIHtcbiAgY2xlYXJUaW1lb3V0KGl0ZW0uX2lkbGVUaW1lb3V0SWQpO1xuICBpdGVtLl9pZGxlVGltZW91dCA9IG1zZWNzO1xufTtcblxuZXhwb3J0cy51bmVucm9sbCA9IGZ1bmN0aW9uKGl0ZW0pIHtcbiAgY2xlYXJUaW1lb3V0KGl0ZW0uX2lkbGVUaW1lb3V0SWQpO1xuICBpdGVtLl9pZGxlVGltZW91dCA9IC0xO1xufTtcblxuZXhwb3J0cy5fdW5yZWZBY3RpdmUgPSBleHBvcnRzLmFjdGl2ZSA9IGZ1bmN0aW9uKGl0ZW0pIHtcbiAgY2xlYXJUaW1lb3V0KGl0ZW0uX2lkbGVUaW1lb3V0SWQpO1xuXG4gIHZhciBtc2VjcyA9IGl0ZW0uX2lkbGVUaW1lb3V0O1xuICBpZiAobXNlY3MgPj0gMCkge1xuICAgIGl0ZW0uX2lkbGVUaW1lb3V0SWQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uIG9uVGltZW91dCgpIHtcbiAgICAgIGlmIChpdGVtLl9vblRpbWVvdXQpXG4gICAgICAgIGl0ZW0uX29uVGltZW91dCgpO1xuICAgIH0sIG1zZWNzKTtcbiAgfVxufTtcblxuLy8gVGhhdCdzIG5vdCBob3cgbm9kZS5qcyBpbXBsZW1lbnRzIGl0IGJ1dCB0aGUgZXhwb3NlZCBhcGkgaXMgdGhlIHNhbWUuXG5leHBvcnRzLnNldEltbWVkaWF0ZSA9IHR5cGVvZiBzZXRJbW1lZGlhdGUgPT09IFwiZnVuY3Rpb25cIiA/IHNldEltbWVkaWF0ZSA6IGZ1bmN0aW9uKGZuKSB7XG4gIHZhciBpZCA9IG5leHRJbW1lZGlhdGVJZCsrO1xuICB2YXIgYXJncyA9IGFyZ3VtZW50cy5sZW5ndGggPCAyID8gZmFsc2UgOiBzbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG5cbiAgaW1tZWRpYXRlSWRzW2lkXSA9IHRydWU7XG5cbiAgbmV4dFRpY2soZnVuY3Rpb24gb25OZXh0VGljaygpIHtcbiAgICBpZiAoaW1tZWRpYXRlSWRzW2lkXSkge1xuICAgICAgLy8gZm4uY2FsbCgpIGlzIGZhc3RlciBzbyB3ZSBvcHRpbWl6ZSBmb3IgdGhlIGNvbW1vbiB1c2UtY2FzZVxuICAgICAgLy8gQHNlZSBodHRwOi8vanNwZXJmLmNvbS9jYWxsLWFwcGx5LXNlZ3VcbiAgICAgIGlmIChhcmdzKSB7XG4gICAgICAgIGZuLmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZm4uY2FsbChudWxsKTtcbiAgICAgIH1cbiAgICAgIC8vIFByZXZlbnQgaWRzIGZyb20gbGVha2luZ1xuICAgICAgZXhwb3J0cy5jbGVhckltbWVkaWF0ZShpZCk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gaWQ7XG59O1xuXG5leHBvcnRzLmNsZWFySW1tZWRpYXRlID0gdHlwZW9mIGNsZWFySW1tZWRpYXRlID09PSBcImZ1bmN0aW9uXCIgPyBjbGVhckltbWVkaWF0ZSA6IGZ1bmN0aW9uKGlkKSB7XG4gIGRlbGV0ZSBpbW1lZGlhdGVJZHNbaWRdO1xufTsiLCJ2YXIgVnVlIC8vIGxhdGUgYmluZFxudmFyIHZlcnNpb25cbnZhciBtYXAgPSBPYmplY3QuY3JlYXRlKG51bGwpXG5pZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgd2luZG93Ll9fVlVFX0hPVF9NQVBfXyA9IG1hcFxufVxudmFyIGluc3RhbGxlZCA9IGZhbHNlXG52YXIgaXNCcm93c2VyaWZ5ID0gZmFsc2VcbnZhciBpbml0SG9va05hbWUgPSAnYmVmb3JlQ3JlYXRlJ1xuXG5leHBvcnRzLmluc3RhbGwgPSBmdW5jdGlvbiAodnVlLCBicm93c2VyaWZ5KSB7XG4gIGlmIChpbnN0YWxsZWQpIHsgcmV0dXJuIH1cbiAgaW5zdGFsbGVkID0gdHJ1ZVxuXG4gIFZ1ZSA9IHZ1ZS5fX2VzTW9kdWxlID8gdnVlLmRlZmF1bHQgOiB2dWVcbiAgdmVyc2lvbiA9IFZ1ZS52ZXJzaW9uLnNwbGl0KCcuJykubWFwKE51bWJlcilcbiAgaXNCcm93c2VyaWZ5ID0gYnJvd3NlcmlmeVxuXG4gIC8vIGNvbXBhdCB3aXRoIDwgMi4wLjAtYWxwaGEuN1xuICBpZiAoVnVlLmNvbmZpZy5fbGlmZWN5Y2xlSG9va3MuaW5kZXhPZignaW5pdCcpID4gLTEpIHtcbiAgICBpbml0SG9va05hbWUgPSAnaW5pdCdcbiAgfVxuXG4gIGV4cG9ydHMuY29tcGF0aWJsZSA9IHZlcnNpb25bMF0gPj0gMlxuICBpZiAoIWV4cG9ydHMuY29tcGF0aWJsZSkge1xuICAgIGNvbnNvbGUud2FybihcbiAgICAgICdbSE1SXSBZb3UgYXJlIHVzaW5nIGEgdmVyc2lvbiBvZiB2dWUtaG90LXJlbG9hZC1hcGkgdGhhdCBpcyAnICtcbiAgICAgICAgJ29ubHkgY29tcGF0aWJsZSB3aXRoIFZ1ZS5qcyBjb3JlIF4yLjAuMC4nXG4gICAgKVxuICAgIHJldHVyblxuICB9XG59XG5cbi8qKlxuICogQ3JlYXRlIGEgcmVjb3JkIGZvciBhIGhvdCBtb2R1bGUsIHdoaWNoIGtlZXBzIHRyYWNrIG9mIGl0cyBjb25zdHJ1Y3RvclxuICogYW5kIGluc3RhbmNlc1xuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBpZFxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAqL1xuXG5leHBvcnRzLmNyZWF0ZVJlY29yZCA9IGZ1bmN0aW9uIChpZCwgb3B0aW9ucykge1xuICBpZihtYXBbaWRdKSB7IHJldHVybiB9XG5cbiAgdmFyIEN0b3IgPSBudWxsXG4gIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIEN0b3IgPSBvcHRpb25zXG4gICAgb3B0aW9ucyA9IEN0b3Iub3B0aW9uc1xuICB9XG4gIG1ha2VPcHRpb25zSG90KGlkLCBvcHRpb25zKVxuICBtYXBbaWRdID0ge1xuICAgIEN0b3I6IEN0b3IsXG4gICAgb3B0aW9uczogb3B0aW9ucyxcbiAgICBpbnN0YW5jZXM6IFtdXG4gIH1cbn1cblxuLyoqXG4gKiBDaGVjayBpZiBtb2R1bGUgaXMgcmVjb3JkZWRcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gaWRcbiAqL1xuXG5leHBvcnRzLmlzUmVjb3JkZWQgPSBmdW5jdGlvbiAoaWQpIHtcbiAgcmV0dXJuIHR5cGVvZiBtYXBbaWRdICE9PSAndW5kZWZpbmVkJ1xufVxuXG4vKipcbiAqIE1ha2UgYSBDb21wb25lbnQgb3B0aW9ucyBvYmplY3QgaG90LlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBpZFxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAqL1xuXG5mdW5jdGlvbiBtYWtlT3B0aW9uc0hvdChpZCwgb3B0aW9ucykge1xuICBpZiAob3B0aW9ucy5mdW5jdGlvbmFsKSB7XG4gICAgdmFyIHJlbmRlciA9IG9wdGlvbnMucmVuZGVyXG4gICAgb3B0aW9ucy5yZW5kZXIgPSBmdW5jdGlvbiAoaCwgY3R4KSB7XG4gICAgICB2YXIgaW5zdGFuY2VzID0gbWFwW2lkXS5pbnN0YW5jZXNcbiAgICAgIGlmIChjdHggJiYgaW5zdGFuY2VzLmluZGV4T2YoY3R4LnBhcmVudCkgPCAwKSB7XG4gICAgICAgIGluc3RhbmNlcy5wdXNoKGN0eC5wYXJlbnQpXG4gICAgICB9XG4gICAgICByZXR1cm4gcmVuZGVyKGgsIGN0eClcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaW5qZWN0SG9vayhvcHRpb25zLCBpbml0SG9va05hbWUsIGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIHJlY29yZCA9IG1hcFtpZF1cbiAgICAgIGlmICghcmVjb3JkLkN0b3IpIHtcbiAgICAgICAgcmVjb3JkLkN0b3IgPSB0aGlzLmNvbnN0cnVjdG9yXG4gICAgICB9XG4gICAgICByZWNvcmQuaW5zdGFuY2VzLnB1c2godGhpcylcbiAgICB9KVxuICAgIGluamVjdEhvb2sob3B0aW9ucywgJ2JlZm9yZURlc3Ryb3knLCBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBpbnN0YW5jZXMgPSBtYXBbaWRdLmluc3RhbmNlc1xuICAgICAgaW5zdGFuY2VzLnNwbGljZShpbnN0YW5jZXMuaW5kZXhPZih0aGlzKSwgMSlcbiAgICB9KVxuICB9XG59XG5cbi8qKlxuICogSW5qZWN0IGEgaG9vayB0byBhIGhvdCByZWxvYWRhYmxlIGNvbXBvbmVudCBzbyB0aGF0XG4gKiB3ZSBjYW4ga2VlcCB0cmFjayBvZiBpdC5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICogQHBhcmFtIHtTdHJpbmd9IG5hbWVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGhvb2tcbiAqL1xuXG5mdW5jdGlvbiBpbmplY3RIb29rKG9wdGlvbnMsIG5hbWUsIGhvb2spIHtcbiAgdmFyIGV4aXN0aW5nID0gb3B0aW9uc1tuYW1lXVxuICBvcHRpb25zW25hbWVdID0gZXhpc3RpbmdcbiAgICA/IEFycmF5LmlzQXJyYXkoZXhpc3RpbmcpID8gZXhpc3RpbmcuY29uY2F0KGhvb2spIDogW2V4aXN0aW5nLCBob29rXVxuICAgIDogW2hvb2tdXG59XG5cbmZ1bmN0aW9uIHRyeVdyYXAoZm4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChpZCwgYXJnKSB7XG4gICAgdHJ5IHtcbiAgICAgIGZuKGlkLCBhcmcpXG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc29sZS5lcnJvcihlKVxuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAnU29tZXRoaW5nIHdlbnQgd3JvbmcgZHVyaW5nIFZ1ZSBjb21wb25lbnQgaG90LXJlbG9hZC4gRnVsbCByZWxvYWQgcmVxdWlyZWQuJ1xuICAgICAgKVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiB1cGRhdGVPcHRpb25zIChvbGRPcHRpb25zLCBuZXdPcHRpb25zKSB7XG4gIGZvciAodmFyIGtleSBpbiBvbGRPcHRpb25zKSB7XG4gICAgaWYgKCEoa2V5IGluIG5ld09wdGlvbnMpKSB7XG4gICAgICBkZWxldGUgb2xkT3B0aW9uc1trZXldXG4gICAgfVxuICB9XG4gIGZvciAodmFyIGtleSQxIGluIG5ld09wdGlvbnMpIHtcbiAgICBvbGRPcHRpb25zW2tleSQxXSA9IG5ld09wdGlvbnNba2V5JDFdXG4gIH1cbn1cblxuZXhwb3J0cy5yZXJlbmRlciA9IHRyeVdyYXAoZnVuY3Rpb24gKGlkLCBvcHRpb25zKSB7XG4gIHZhciByZWNvcmQgPSBtYXBbaWRdXG4gIGlmICghb3B0aW9ucykge1xuICAgIHJlY29yZC5pbnN0YW5jZXMuc2xpY2UoKS5mb3JFYWNoKGZ1bmN0aW9uIChpbnN0YW5jZSkge1xuICAgICAgaW5zdGFuY2UuJGZvcmNlVXBkYXRlKClcbiAgICB9KVxuICAgIHJldHVyblxuICB9XG4gIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIG9wdGlvbnMgPSBvcHRpb25zLm9wdGlvbnNcbiAgfVxuICBpZiAocmVjb3JkLkN0b3IpIHtcbiAgICByZWNvcmQuQ3Rvci5vcHRpb25zLnJlbmRlciA9IG9wdGlvbnMucmVuZGVyXG4gICAgcmVjb3JkLkN0b3Iub3B0aW9ucy5zdGF0aWNSZW5kZXJGbnMgPSBvcHRpb25zLnN0YXRpY1JlbmRlckZuc1xuICAgIHJlY29yZC5pbnN0YW5jZXMuc2xpY2UoKS5mb3JFYWNoKGZ1bmN0aW9uIChpbnN0YW5jZSkge1xuICAgICAgaW5zdGFuY2UuJG9wdGlvbnMucmVuZGVyID0gb3B0aW9ucy5yZW5kZXJcbiAgICAgIGluc3RhbmNlLiRvcHRpb25zLnN0YXRpY1JlbmRlckZucyA9IG9wdGlvbnMuc3RhdGljUmVuZGVyRm5zXG4gICAgICAvLyByZXNldCBzdGF0aWMgdHJlZXNcbiAgICAgIC8vIHByZSAyLjUsIGFsbCBzdGF0aWMgdHJlZXMgYXJlIGNhY2hlZCB0b2dldGhlciBvbiB0aGUgaW5zdGFuY2VcbiAgICAgIGlmIChpbnN0YW5jZS5fc3RhdGljVHJlZXMpIHtcbiAgICAgICAgaW5zdGFuY2UuX3N0YXRpY1RyZWVzID0gW11cbiAgICAgIH1cbiAgICAgIC8vIDIuNS4wXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShyZWNvcmQuQ3Rvci5vcHRpb25zLmNhY2hlZCkpIHtcbiAgICAgICAgcmVjb3JkLkN0b3Iub3B0aW9ucy5jYWNoZWQgPSBbXVxuICAgICAgfVxuICAgICAgLy8gMi41LjNcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGluc3RhbmNlLiRvcHRpb25zLmNhY2hlZCkpIHtcbiAgICAgICAgaW5zdGFuY2UuJG9wdGlvbnMuY2FjaGVkID0gW11cbiAgICAgIH1cblxuICAgICAgLy8gcG9zdCAyLjUuNDogdi1vbmNlIHRyZWVzIGFyZSBjYWNoZWQgb24gaW5zdGFuY2UuX3N0YXRpY1RyZWVzLlxuICAgICAgLy8gUHVyZSBzdGF0aWMgdHJlZXMgYXJlIGNhY2hlZCBvbiB0aGUgc3RhdGljUmVuZGVyRm5zIGFycmF5XG4gICAgICAvLyAoYm90aCBhbHJlYWR5IHJlc2V0IGFib3ZlKVxuXG4gICAgICAvLyAyLjY6IHRlbXBvcmFyaWx5IG1hcmsgcmVuZGVyZWQgc2NvcGVkIHNsb3RzIGFzIHVuc3RhYmxlIHNvIHRoYXRcbiAgICAgIC8vIGNoaWxkIGNvbXBvbmVudHMgY2FuIGJlIGZvcmNlZCB0byB1cGRhdGVcbiAgICAgIHZhciByZXN0b3JlID0gcGF0Y2hTY29wZWRTbG90cyhpbnN0YW5jZSlcbiAgICAgIGluc3RhbmNlLiRmb3JjZVVwZGF0ZSgpXG4gICAgICBpbnN0YW5jZS4kbmV4dFRpY2socmVzdG9yZSlcbiAgICB9KVxuICB9IGVsc2Uge1xuICAgIC8vIGZ1bmN0aW9uYWwgb3Igbm8gaW5zdGFuY2UgY3JlYXRlZCB5ZXRcbiAgICByZWNvcmQub3B0aW9ucy5yZW5kZXIgPSBvcHRpb25zLnJlbmRlclxuICAgIHJlY29yZC5vcHRpb25zLnN0YXRpY1JlbmRlckZucyA9IG9wdGlvbnMuc3RhdGljUmVuZGVyRm5zXG5cbiAgICAvLyBoYW5kbGUgZnVuY3Rpb25hbCBjb21wb25lbnQgcmUtcmVuZGVyXG4gICAgaWYgKHJlY29yZC5vcHRpb25zLmZ1bmN0aW9uYWwpIHtcbiAgICAgIC8vIHJlcmVuZGVyIHdpdGggZnVsbCBvcHRpb25zXG4gICAgICBpZiAoT2JqZWN0LmtleXMob3B0aW9ucykubGVuZ3RoID4gMikge1xuICAgICAgICB1cGRhdGVPcHRpb25zKHJlY29yZC5vcHRpb25zLCBvcHRpb25zKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gdGVtcGxhdGUtb25seSByZXJlbmRlci5cbiAgICAgICAgLy8gbmVlZCB0byBpbmplY3QgdGhlIHN0eWxlIGluamVjdGlvbiBjb2RlIGZvciBDU1MgbW9kdWxlc1xuICAgICAgICAvLyB0byB3b3JrIHByb3Blcmx5LlxuICAgICAgICB2YXIgaW5qZWN0U3R5bGVzID0gcmVjb3JkLm9wdGlvbnMuX2luamVjdFN0eWxlc1xuICAgICAgICBpZiAoaW5qZWN0U3R5bGVzKSB7XG4gICAgICAgICAgdmFyIHJlbmRlciA9IG9wdGlvbnMucmVuZGVyXG4gICAgICAgICAgcmVjb3JkLm9wdGlvbnMucmVuZGVyID0gZnVuY3Rpb24gKGgsIGN0eCkge1xuICAgICAgICAgICAgaW5qZWN0U3R5bGVzLmNhbGwoY3R4KVxuICAgICAgICAgICAgcmV0dXJuIHJlbmRlcihoLCBjdHgpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZWNvcmQub3B0aW9ucy5fQ3RvciA9IG51bGxcbiAgICAgIC8vIDIuNS4zXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShyZWNvcmQub3B0aW9ucy5jYWNoZWQpKSB7XG4gICAgICAgIHJlY29yZC5vcHRpb25zLmNhY2hlZCA9IFtdXG4gICAgICB9XG4gICAgICByZWNvcmQuaW5zdGFuY2VzLnNsaWNlKCkuZm9yRWFjaChmdW5jdGlvbiAoaW5zdGFuY2UpIHtcbiAgICAgICAgaW5zdGFuY2UuJGZvcmNlVXBkYXRlKClcbiAgICAgIH0pXG4gICAgfVxuICB9XG59KVxuXG5leHBvcnRzLnJlbG9hZCA9IHRyeVdyYXAoZnVuY3Rpb24gKGlkLCBvcHRpb25zKSB7XG4gIHZhciByZWNvcmQgPSBtYXBbaWRdXG4gIGlmIChvcHRpb25zKSB7XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBvcHRpb25zID0gb3B0aW9ucy5vcHRpb25zXG4gICAgfVxuICAgIG1ha2VPcHRpb25zSG90KGlkLCBvcHRpb25zKVxuICAgIGlmIChyZWNvcmQuQ3Rvcikge1xuICAgICAgaWYgKHZlcnNpb25bMV0gPCAyKSB7XG4gICAgICAgIC8vIHByZXNlcnZlIHByZSAyLjIgYmVoYXZpb3IgZm9yIGdsb2JhbCBtaXhpbiBoYW5kbGluZ1xuICAgICAgICByZWNvcmQuQ3Rvci5leHRlbmRPcHRpb25zID0gb3B0aW9uc1xuICAgICAgfVxuICAgICAgdmFyIG5ld0N0b3IgPSByZWNvcmQuQ3Rvci5zdXBlci5leHRlbmQob3B0aW9ucylcbiAgICAgIC8vIHByZXZlbnQgcmVjb3JkLm9wdGlvbnMuX0N0b3IgZnJvbSBiZWluZyBvdmVyd3JpdHRlbiBhY2NpZGVudGFsbHlcbiAgICAgIG5ld0N0b3Iub3B0aW9ucy5fQ3RvciA9IHJlY29yZC5vcHRpb25zLl9DdG9yXG4gICAgICByZWNvcmQuQ3Rvci5vcHRpb25zID0gbmV3Q3Rvci5vcHRpb25zXG4gICAgICByZWNvcmQuQ3Rvci5jaWQgPSBuZXdDdG9yLmNpZFxuICAgICAgcmVjb3JkLkN0b3IucHJvdG90eXBlID0gbmV3Q3Rvci5wcm90b3R5cGVcbiAgICAgIGlmIChuZXdDdG9yLnJlbGVhc2UpIHtcbiAgICAgICAgLy8gdGVtcG9yYXJ5IGdsb2JhbCBtaXhpbiBzdHJhdGVneSB1c2VkIGluIDwgMi4wLjAtYWxwaGEuNlxuICAgICAgICBuZXdDdG9yLnJlbGVhc2UoKVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB1cGRhdGVPcHRpb25zKHJlY29yZC5vcHRpb25zLCBvcHRpb25zKVxuICAgIH1cbiAgfVxuICByZWNvcmQuaW5zdGFuY2VzLnNsaWNlKCkuZm9yRWFjaChmdW5jdGlvbiAoaW5zdGFuY2UpIHtcbiAgICBpZiAoaW5zdGFuY2UuJHZub2RlICYmIGluc3RhbmNlLiR2bm9kZS5jb250ZXh0KSB7XG4gICAgICBpbnN0YW5jZS4kdm5vZGUuY29udGV4dC4kZm9yY2VVcGRhdGUoKVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICdSb290IG9yIG1hbnVhbGx5IG1vdW50ZWQgaW5zdGFuY2UgbW9kaWZpZWQuIEZ1bGwgcmVsb2FkIHJlcXVpcmVkLidcbiAgICAgIClcbiAgICB9XG4gIH0pXG59KVxuXG4vLyAyLjYgb3B0aW1pemVzIHRlbXBsYXRlLWNvbXBpbGVkIHNjb3BlZCBzbG90cyBhbmQgc2tpcHMgdXBkYXRlcyBpZiBjaGlsZFxuLy8gb25seSB1c2VzIHNjb3BlZCBzbG90cy4gV2UgbmVlZCB0byBwYXRjaCB0aGUgc2NvcGVkIHNsb3RzIHJlc29sdmluZyBoZWxwZXJcbi8vIHRvIHRlbXBvcmFyaWx5IG1hcmsgYWxsIHNjb3BlZCBzbG90cyBhcyB1bnN0YWJsZSBpbiBvcmRlciB0byBmb3JjZSBjaGlsZFxuLy8gdXBkYXRlcy5cbmZ1bmN0aW9uIHBhdGNoU2NvcGVkU2xvdHMgKGluc3RhbmNlKSB7XG4gIGlmICghaW5zdGFuY2UuX3UpIHsgcmV0dXJuIH1cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3Z1ZWpzL3Z1ZS9ibG9iL2Rldi9zcmMvY29yZS9pbnN0YW5jZS9yZW5kZXItaGVscGVycy9yZXNvbHZlLXNjb3BlZC1zbG90cy5qc1xuICB2YXIgb3JpZ2luYWwgPSBpbnN0YW5jZS5fdVxuICBpbnN0YW5jZS5fdSA9IGZ1bmN0aW9uIChzbG90cykge1xuICAgIHRyeSB7XG4gICAgICAvLyAyLjYuNCB+IDIuNi42XG4gICAgICByZXR1cm4gb3JpZ2luYWwoc2xvdHMsIHRydWUpXG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gMi41IC8gPj0gMi42LjdcbiAgICAgIHJldHVybiBvcmlnaW5hbChzbG90cywgbnVsbCwgdHJ1ZSlcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICBpbnN0YW5jZS5fdSA9IG9yaWdpbmFsXG4gIH1cbn1cbiIsIiFmdW5jdGlvbihlLHQpe1wib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzJiZcIm9iamVjdFwiPT10eXBlb2YgbW9kdWxlP21vZHVsZS5leHBvcnRzPXQoKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFtdLHQpOlwib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzP2V4cG9ydHNbXCJ2dWUtanMtbW9kYWxcIl09dCgpOmVbXCJ2dWUtanMtbW9kYWxcIl09dCgpfSh3aW5kb3csZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24obil7dmFyIG89e307ZnVuY3Rpb24gaShlKXtpZihvW2VdKXJldHVybiBvW2VdLmV4cG9ydHM7dmFyIHQ9b1tlXT17aTplLGw6ITEsZXhwb3J0czp7fX07cmV0dXJuIG5bZV0uY2FsbCh0LmV4cG9ydHMsdCx0LmV4cG9ydHMsaSksdC5sPSEwLHQuZXhwb3J0c31yZXR1cm4gaS5tPW4saS5jPW8saS5kPWZ1bmN0aW9uKGUsdCxuKXtpLm8oZSx0KXx8T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7ZW51bWVyYWJsZTohMCxnZXQ6bn0pfSxpLnI9ZnVuY3Rpb24oZSl7XCJ1bmRlZmluZWRcIiE9dHlwZW9mIFN5bWJvbCYmU3ltYm9sLnRvU3RyaW5nVGFnJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOlwiTW9kdWxlXCJ9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KX0saS50PWZ1bmN0aW9uKHQsZSl7aWYoMSZlJiYodD1pKHQpKSw4JmUpcmV0dXJuIHQ7aWYoNCZlJiZcIm9iamVjdFwiPT10eXBlb2YgdCYmdCYmdC5fX2VzTW9kdWxlKXJldHVybiB0O3ZhciBuPU9iamVjdC5jcmVhdGUobnVsbCk7aWYoaS5yKG4pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLFwiZGVmYXVsdFwiLHtlbnVtZXJhYmxlOiEwLHZhbHVlOnR9KSwyJmUmJlwic3RyaW5nXCIhPXR5cGVvZiB0KWZvcih2YXIgbyBpbiB0KWkuZChuLG8sZnVuY3Rpb24oZSl7cmV0dXJuIHRbZV19LmJpbmQobnVsbCxvKSk7cmV0dXJuIG59LGkubj1mdW5jdGlvbihlKXt2YXIgdD1lJiZlLl9fZXNNb2R1bGU/ZnVuY3Rpb24oKXtyZXR1cm4gZS5kZWZhdWx0fTpmdW5jdGlvbigpe3JldHVybiBlfTtyZXR1cm4gaS5kKHQsXCJhXCIsdCksdH0saS5vPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHQpfSxpLnA9XCIvZGlzdC9cIixpKGkucz0xMSl9KFtmdW5jdGlvbihlLHQsbil7dmFyIG89big2KTtcInN0cmluZ1wiPT10eXBlb2YgbyYmKG89W1tlLmksbyxcIlwiXV0pLG8ubG9jYWxzJiYoZS5leHBvcnRzPW8ubG9jYWxzKTsoMCxuKDQpLmRlZmF1bHQpKFwiMjdkODM3OTZcIixvLCExLHt9KX0sZnVuY3Rpb24oZSx0LG4pe3ZhciBvPW4oOCk7XCJzdHJpbmdcIj09dHlwZW9mIG8mJihvPVtbZS5pLG8sXCJcIl1dKSxvLmxvY2FscyYmKGUuZXhwb3J0cz1vLmxvY2Fscyk7KDAsbig0KS5kZWZhdWx0KShcIjBlNzgzNDk0XCIsbywhMSx7fSl9LGZ1bmN0aW9uKGUsdCxuKXt2YXIgbz1uKDEwKTtcInN0cmluZ1wiPT10eXBlb2YgbyYmKG89W1tlLmksbyxcIlwiXV0pLG8ubG9jYWxzJiYoZS5leHBvcnRzPW8ubG9jYWxzKTsoMCxuKDQpLmRlZmF1bHQpKFwiMTc3NTdmNjBcIixvLCExLHt9KX0sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24obil7dmFyIGE9W107cmV0dXJuIGEudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24oZSl7dmFyIHQ9ZnVuY3Rpb24oZSx0KXt2YXIgbj1lWzFdfHxcIlwiLG89ZVszXTtpZighbylyZXR1cm4gbjtpZih0JiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBidG9hKXt2YXIgaT0oYT1vLFwiLyojIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LFwiK2J0b2EodW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KEpTT04uc3RyaW5naWZ5KGEpKSkpK1wiICovXCIpLHI9by5zb3VyY2VzLm1hcChmdW5jdGlvbihlKXtyZXR1cm5cIi8qIyBzb3VyY2VVUkw9XCIrby5zb3VyY2VSb290K2UrXCIgKi9cIn0pO3JldHVybltuXS5jb25jYXQocikuY29uY2F0KFtpXSkuam9pbihcIlxcblwiKX12YXIgYTtyZXR1cm5bbl0uam9pbihcIlxcblwiKX0oZSxuKTtyZXR1cm4gZVsyXT9cIkBtZWRpYSBcIitlWzJdK1wie1wiK3QrXCJ9XCI6dH0pLmpvaW4oXCJcIil9LGEuaT1mdW5jdGlvbihlLHQpe1wic3RyaW5nXCI9PXR5cGVvZiBlJiYoZT1bW251bGwsZSxcIlwiXV0pO2Zvcih2YXIgbj17fSxvPTA7bzx0aGlzLmxlbmd0aDtvKyspe3ZhciBpPXRoaXNbb11bMF07XCJudW1iZXJcIj09dHlwZW9mIGkmJihuW2ldPSEwKX1mb3Iobz0wO288ZS5sZW5ndGg7bysrKXt2YXIgcj1lW29dO1wibnVtYmVyXCI9PXR5cGVvZiByWzBdJiZuW3JbMF1dfHwodCYmIXJbMl0/clsyXT10OnQmJihyWzJdPVwiKFwiK3JbMl0rXCIpIGFuZCAoXCIrdCtcIilcIiksYS5wdXNoKHIpKX19LGF9fSxmdW5jdGlvbihlLHQsbil7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gbChlLHQpe2Zvcih2YXIgbj1bXSxvPXt9LGk9MDtpPHQubGVuZ3RoO2krKyl7dmFyIHI9dFtpXSxhPXJbMF0scz17aWQ6ZStcIjpcIitpLGNzczpyWzFdLG1lZGlhOnJbMl0sc291cmNlTWFwOnJbM119O29bYV0/b1thXS5wYXJ0cy5wdXNoKHMpOm4ucHVzaChvW2FdPXtpZDphLHBhcnRzOltzXX0pfXJldHVybiBufW4ucih0KSxuLmQodCxcImRlZmF1bHRcIixmdW5jdGlvbigpe3JldHVybiBwfSk7dmFyIG89XCJ1bmRlZmluZWRcIiE9dHlwZW9mIGRvY3VtZW50O2lmKFwidW5kZWZpbmVkXCIhPXR5cGVvZiBERUJVRyYmREVCVUcmJiFvKXRocm93IG5ldyBFcnJvcihcInZ1ZS1zdHlsZS1sb2FkZXIgY2Fubm90IGJlIHVzZWQgaW4gYSBub24tYnJvd3NlciBlbnZpcm9ubWVudC4gVXNlIHsgdGFyZ2V0OiAnbm9kZScgfSBpbiB5b3VyIFdlYnBhY2sgY29uZmlnIHRvIGluZGljYXRlIGEgc2VydmVyLXJlbmRlcmluZyBlbnZpcm9ubWVudC5cIik7dmFyIGQ9e30saT1vJiYoZG9jdW1lbnQuaGVhZHx8ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJoZWFkXCIpWzBdKSxyPW51bGwsYT0wLHU9ITEscz1mdW5jdGlvbigpe30sYz1udWxsLGg9XCJkYXRhLXZ1ZS1zc3ItaWRcIixmPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBuYXZpZ2F0b3ImJi9tc2llIFs2LTldXFxiLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKSk7ZnVuY3Rpb24gcChhLGUsdCxuKXt1PXQsYz1ufHx7fTt2YXIgcz1sKGEsZSk7cmV0dXJuIHYocyksZnVuY3Rpb24oZSl7Zm9yKHZhciB0PVtdLG49MDtuPHMubGVuZ3RoO24rKyl7dmFyIG89c1tuXTsoaT1kW28uaWRdKS5yZWZzLS0sdC5wdXNoKGkpfWU/dihzPWwoYSxlKSk6cz1bXTtmb3Iobj0wO248dC5sZW5ndGg7bisrKXt2YXIgaTtpZigwPT09KGk9dFtuXSkucmVmcyl7Zm9yKHZhciByPTA7cjxpLnBhcnRzLmxlbmd0aDtyKyspaS5wYXJ0c1tyXSgpO2RlbGV0ZSBkW2kuaWRdfX19fWZ1bmN0aW9uIHYoZSl7Zm9yKHZhciB0PTA7dDxlLmxlbmd0aDt0Kyspe3ZhciBuPWVbdF0sbz1kW24uaWRdO2lmKG8pe28ucmVmcysrO2Zvcih2YXIgaT0wO2k8by5wYXJ0cy5sZW5ndGg7aSsrKW8ucGFydHNbaV0obi5wYXJ0c1tpXSk7Zm9yKDtpPG4ucGFydHMubGVuZ3RoO2krKylvLnBhcnRzLnB1c2goZyhuLnBhcnRzW2ldKSk7by5wYXJ0cy5sZW5ndGg+bi5wYXJ0cy5sZW5ndGgmJihvLnBhcnRzLmxlbmd0aD1uLnBhcnRzLmxlbmd0aCl9ZWxzZXt2YXIgcj1bXTtmb3IoaT0wO2k8bi5wYXJ0cy5sZW5ndGg7aSsrKXIucHVzaChnKG4ucGFydHNbaV0pKTtkW24uaWRdPXtpZDpuLmlkLHJlZnM6MSxwYXJ0czpyfX19fWZ1bmN0aW9uIG0oKXt2YXIgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3R5bGVcIik7cmV0dXJuIGUudHlwZT1cInRleHQvY3NzXCIsaS5hcHBlbmRDaGlsZChlKSxlfWZ1bmN0aW9uIGcodCl7dmFyIG4sbyxlPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCJzdHlsZVtcIitoKyd+PVwiJyt0LmlkKydcIl0nKTtpZihlKXtpZih1KXJldHVybiBzO2UucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChlKX1pZihmKXt2YXIgaT1hKys7ZT1yfHwocj1tKCkpLG49dy5iaW5kKG51bGwsZSxpLCExKSxvPXcuYmluZChudWxsLGUsaSwhMCl9ZWxzZSBlPW0oKSxuPWZ1bmN0aW9uKGUsdCl7dmFyIG49dC5jc3Msbz10Lm1lZGlhLGk9dC5zb3VyY2VNYXA7byYmZS5zZXRBdHRyaWJ1dGUoXCJtZWRpYVwiLG8pO2Muc3NySWQmJmUuc2V0QXR0cmlidXRlKGgsdC5pZCk7aSYmKG4rPVwiXFxuLyojIHNvdXJjZVVSTD1cIitpLnNvdXJjZXNbMF0rXCIgKi9cIixuKz1cIlxcbi8qIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsXCIrYnRvYSh1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoSlNPTi5zdHJpbmdpZnkoaSkpKSkrXCIgKi9cIik7aWYoZS5zdHlsZVNoZWV0KWUuc3R5bGVTaGVldC5jc3NUZXh0PW47ZWxzZXtmb3IoO2UuZmlyc3RDaGlsZDspZS5yZW1vdmVDaGlsZChlLmZpcnN0Q2hpbGQpO2UuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUobikpfX0uYmluZChudWxsLGUpLG89ZnVuY3Rpb24oKXtlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZSl9O3JldHVybiBuKHQpLGZ1bmN0aW9uKGUpe2lmKGUpe2lmKGUuY3NzPT09dC5jc3MmJmUubWVkaWE9PT10Lm1lZGlhJiZlLnNvdXJjZU1hcD09PXQuc291cmNlTWFwKXJldHVybjtuKHQ9ZSl9ZWxzZSBvKCl9fXZhciBiLHk9KGI9W10sZnVuY3Rpb24oZSx0KXtyZXR1cm4gYltlXT10LGIuZmlsdGVyKEJvb2xlYW4pLmpvaW4oXCJcXG5cIil9KTtmdW5jdGlvbiB3KGUsdCxuLG8pe3ZhciBpPW4/XCJcIjpvLmNzcztpZihlLnN0eWxlU2hlZXQpZS5zdHlsZVNoZWV0LmNzc1RleHQ9eSh0LGkpO2Vsc2V7dmFyIHI9ZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoaSksYT1lLmNoaWxkTm9kZXM7YVt0XSYmZS5yZW1vdmVDaGlsZChhW3RdKSxhLmxlbmd0aD9lLmluc2VydEJlZm9yZShyLGFbdF0pOmUuYXBwZW5kQ2hpbGQocil9fX0sZnVuY3Rpb24oZSx0LG4pe1widXNlIHN0cmljdFwiO3ZhciBvPW4oMCk7bi5uKG8pLmF9LGZ1bmN0aW9uKGUsdCxuKXsoZS5leHBvcnRzPW4oMykoITEpKS5wdXNoKFtlLmksXCJcXG4udnVlLW1vZGFsLXJlc2l6ZXIge1xcclxcbiAgZGlzcGxheTogYmxvY2s7XFxyXFxuICBvdmVyZmxvdzogaGlkZGVuO1xcclxcbiAgcG9zaXRpb246IGFic29sdXRlO1xcclxcbiAgd2lkdGg6IDEycHg7XFxyXFxuICBoZWlnaHQ6IDEycHg7XFxyXFxuICByaWdodDogMDtcXHJcXG4gIGJvdHRvbTogMDtcXHJcXG4gIHotaW5kZXg6IDk5OTk5OTk7XFxyXFxuICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcXHJcXG4gIGN1cnNvcjogc2UtcmVzaXplO1xcbn1cXG4udnVlLW1vZGFsLXJlc2l6ZXI6OmFmdGVyIHtcXHJcXG4gIGRpc3BsYXk6IGJsb2NrO1xcclxcbiAgcG9zaXRpb246IGFic29sdXRlO1xcclxcbiAgY29udGVudDogJyc7XFxyXFxuICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcXHJcXG4gIGxlZnQ6IDA7XFxyXFxuICB0b3A6IDA7XFxyXFxuICB3aWR0aDogMDtcXHJcXG4gIGhlaWdodDogMDtcXHJcXG4gIGJvcmRlci1ib3R0b206IDEwcHggc29saWQgI2RkZDtcXHJcXG4gIGJvcmRlci1sZWZ0OiAxMHB4IHNvbGlkIHRyYW5zcGFyZW50O1xcbn1cXG4udnVlLW1vZGFsLXJlc2l6ZXIuY2xpY2tlZDo6YWZ0ZXIge1xcclxcbiAgYm9yZGVyLWJvdHRvbTogMTBweCBzb2xpZCAjMzY5YmU5O1xcbn1cXHJcXG5cIixcIlwiXSl9LGZ1bmN0aW9uKGUsdCxuKXtcInVzZSBzdHJpY3RcIjt2YXIgbz1uKDEpO24ubihvKS5hfSxmdW5jdGlvbihlLHQsbil7KGUuZXhwb3J0cz1uKDMpKCExKSkucHVzaChbZS5pLFwiXFxuLnYtLW1vZGFsLWJsb2NrLXNjcm9sbCB7XFxyXFxuICBvdmVyZmxvdzogaGlkZGVuO1xcclxcbiAgd2lkdGg6IDEwMHZ3O1xcbn1cXG4udi0tbW9kYWwtb3ZlcmxheSB7XFxyXFxuICBwb3NpdGlvbjogZml4ZWQ7XFxyXFxuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xcclxcbiAgbGVmdDogMDtcXHJcXG4gIHRvcDogMDtcXHJcXG4gIHdpZHRoOiAxMDAlO1xcclxcbiAgaGVpZ2h0OiAxMDB2aDtcXHJcXG4gIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC4yKTtcXHJcXG4gIHotaW5kZXg6IDk5OTtcXHJcXG4gIG9wYWNpdHk6IDE7XFxufVxcbi52LS1tb2RhbC1vdmVybGF5LnNjcm9sbGFibGUge1xcclxcbiAgaGVpZ2h0OiAxMDAlO1xcclxcbiAgbWluLWhlaWdodDogMTAwdmg7XFxyXFxuICBvdmVyZmxvdy15OiBhdXRvO1xcclxcbiAgLXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6IHRvdWNoO1xcbn1cXG4udi0tbW9kYWwtb3ZlcmxheSAudi0tbW9kYWwtYmFja2dyb3VuZC1jbGljayB7XFxyXFxuICB3aWR0aDogMTAwJTtcXHJcXG4gIG1pbi1oZWlnaHQ6IDEwMCU7XFxyXFxuICBoZWlnaHQ6IGF1dG87XFxufVxcbi52LS1tb2RhbC1vdmVybGF5IC52LS1tb2RhbC1ib3gge1xcclxcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcclxcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXHJcXG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxufVxcbi52LS1tb2RhbC1vdmVybGF5LnNjcm9sbGFibGUgLnYtLW1vZGFsLWJveCB7XFxyXFxuICBtYXJnaW4tYm90dG9tOiAycHg7XFxufVxcbi52LS1tb2RhbCB7XFxyXFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcXHJcXG4gIHRleHQtYWxpZ246IGxlZnQ7XFxyXFxuICBib3JkZXItcmFkaXVzOiAzcHg7XFxyXFxuICBib3gtc2hhZG93OiAwIDIwcHggNjBweCAtMnB4IHJnYmEoMjcsIDMzLCA1OCwgMC40KTtcXHJcXG4gIHBhZGRpbmc6IDA7XFxufVxcbi52LS1tb2RhbC52LS1tb2RhbC1mdWxsc2NyZWVuIHtcXHJcXG4gIHdpZHRoOiAxMDB2dztcXHJcXG4gIGhlaWdodDogMTAwdmg7XFxyXFxuICBtYXJnaW46IDA7XFxyXFxuICBsZWZ0OiAwO1xcclxcbiAgdG9wOiAwO1xcbn1cXG4udi0tbW9kYWwtdG9wLXJpZ2h0IHtcXHJcXG4gIGRpc3BsYXk6IGJsb2NrO1xcclxcbiAgcG9zaXRpb246IGFic29sdXRlO1xcclxcbiAgcmlnaHQ6IDA7XFxyXFxuICB0b3A6IDA7XFxufVxcbi5vdmVybGF5LWZhZGUtZW50ZXItYWN0aXZlLFxcclxcbi5vdmVybGF5LWZhZGUtbGVhdmUtYWN0aXZlIHtcXHJcXG4gIHRyYW5zaXRpb246IGFsbCAwLjJzO1xcbn1cXG4ub3ZlcmxheS1mYWRlLWVudGVyLFxcclxcbi5vdmVybGF5LWZhZGUtbGVhdmUtYWN0aXZlIHtcXHJcXG4gIG9wYWNpdHk6IDA7XFxufVxcbi5uaWNlLW1vZGFsLWZhZGUtZW50ZXItYWN0aXZlLFxcclxcbi5uaWNlLW1vZGFsLWZhZGUtbGVhdmUtYWN0aXZlIHtcXHJcXG4gIHRyYW5zaXRpb246IGFsbCAwLjRzO1xcbn1cXG4ubmljZS1tb2RhbC1mYWRlLWVudGVyLFxcclxcbi5uaWNlLW1vZGFsLWZhZGUtbGVhdmUtYWN0aXZlIHtcXHJcXG4gIG9wYWNpdHk6IDA7XFxyXFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTIwcHgpO1xcbn1cXHJcXG5cIixcIlwiXSl9LGZ1bmN0aW9uKGUsdCxuKXtcInVzZSBzdHJpY3RcIjt2YXIgbz1uKDIpO24ubihvKS5hfSxmdW5jdGlvbihlLHQsbil7KGUuZXhwb3J0cz1uKDMpKCExKSkucHVzaChbZS5pLFwiXFxuLnZ1ZS1kaWFsb2cgZGl2IHtcXHJcXG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxufVxcbi52dWUtZGlhbG9nIC5kaWFsb2ctZmxleCB7XFxyXFxuICB3aWR0aDogMTAwJTtcXHJcXG4gIGhlaWdodDogMTAwJTtcXG59XFxuLnZ1ZS1kaWFsb2cgLmRpYWxvZy1jb250ZW50IHtcXHJcXG4gIGZsZXg6IDEgMCBhdXRvO1xcclxcbiAgd2lkdGg6IDEwMCU7XFxyXFxuICBwYWRkaW5nOiAxNXB4O1xcclxcbiAgZm9udC1zaXplOiAxNHB4O1xcbn1cXG4udnVlLWRpYWxvZyAuZGlhbG9nLWMtdGl0bGUge1xcclxcbiAgZm9udC13ZWlnaHQ6IDYwMDtcXHJcXG4gIHBhZGRpbmctYm90dG9tOiAxNXB4O1xcbn1cXG4udnVlLWRpYWxvZyAuZGlhbG9nLWMtdGV4dCB7XFxufVxcbi52dWUtZGlhbG9nIC52dWUtZGlhbG9nLWJ1dHRvbnMge1xcclxcbiAgZGlzcGxheTogZmxleDtcXHJcXG4gIGZsZXg6IDAgMSBhdXRvO1xcclxcbiAgd2lkdGg6IDEwMCU7XFxyXFxuICBib3JkZXItdG9wOiAxcHggc29saWQgI2VlZTtcXG59XFxuLnZ1ZS1kaWFsb2cgLnZ1ZS1kaWFsb2ctYnV0dG9ucy1ub25lIHtcXHJcXG4gIHdpZHRoOiAxMDAlO1xcclxcbiAgcGFkZGluZy1ib3R0b206IDE1cHg7XFxufVxcbi52dWUtZGlhbG9nLWJ1dHRvbiB7XFxyXFxuICBmb250LXNpemU6IDEycHggIWltcG9ydGFudDtcXHJcXG4gIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xcclxcbiAgcGFkZGluZzogMDtcXHJcXG4gIG1hcmdpbjogMDtcXHJcXG4gIGJvcmRlcjogMDtcXHJcXG4gIGN1cnNvcjogcG9pbnRlcjtcXHJcXG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxyXFxuICBsaW5lLWhlaWdodDogNDBweDtcXHJcXG4gIGhlaWdodDogNDBweDtcXHJcXG4gIGNvbG9yOiBpbmhlcml0O1xcclxcbiAgZm9udDogaW5oZXJpdDtcXHJcXG4gIG91dGxpbmU6IG5vbmU7XFxufVxcbi52dWUtZGlhbG9nLWJ1dHRvbjpob3ZlciB7XFxyXFxuICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuMDEpO1xcbn1cXG4udnVlLWRpYWxvZy1idXR0b246YWN0aXZlIHtcXHJcXG4gIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC4wMjUpO1xcbn1cXG4udnVlLWRpYWxvZy1idXR0b246bm90KDpmaXJzdC1vZi10eXBlKSB7XFxyXFxuICBib3JkZXItbGVmdDogMXB4IHNvbGlkICNlZWU7XFxufVxcclxcblwiLFwiXCJdKX0sZnVuY3Rpb24oZSx0LG4pe1widXNlIHN0cmljdFwiO24ucih0KTt2YXIgbz1mdW5jdGlvbigpe3ZhciB0PXRoaXMsZT10LiRjcmVhdGVFbGVtZW50LG49dC5fc2VsZi5fY3x8ZTtyZXR1cm4gbihcInRyYW5zaXRpb25cIix7YXR0cnM6e25hbWU6dC5vdmVybGF5VHJhbnNpdGlvbn19LFt0LnZpc2liaWxpdHkub3ZlcmxheT9uKFwiZGl2XCIse3JlZjpcIm92ZXJsYXlcIixjbGFzczp0Lm92ZXJsYXlDbGFzcyxhdHRyczp7XCJhcmlhLWV4cGFuZGVkXCI6dC52aXNpYmlsaXR5Lm92ZXJsYXkudG9TdHJpbmcoKSxcImRhdGEtbW9kYWxcIjp0Lm5hbWV9fSxbbihcImRpdlwiLHtzdGF0aWNDbGFzczpcInYtLW1vZGFsLWJhY2tncm91bmQtY2xpY2tcIixvbjp7bW91c2Vkb3duOmZ1bmN0aW9uKGUpe3JldHVybiBlLnRhcmdldCE9PWUuY3VycmVudFRhcmdldD9udWxsOnQuaGFuZGxlQmFja2dyb3VuZENsaWNrKGUpfSx0b3VjaHN0YXJ0OmZ1bmN0aW9uKGUpe3JldHVybiBlLnRhcmdldCE9PWUuY3VycmVudFRhcmdldD9udWxsOnQuaGFuZGxlQmFja2dyb3VuZENsaWNrKGUpfX19LFtuKFwiZGl2XCIse3N0YXRpY0NsYXNzOlwidi0tbW9kYWwtdG9wLXJpZ2h0XCJ9LFt0Ll90KFwidG9wLXJpZ2h0XCIpXSwyKSx0Ll92KFwiIFwiKSxuKFwidHJhbnNpdGlvblwiLHthdHRyczp7bmFtZTp0LnRyYW5zaXRpb259LG9uOntcImJlZm9yZS1lbnRlclwiOnQuYmVmb3JlVHJhbnNpdGlvbkVudGVyLFwiYWZ0ZXItZW50ZXJcIjp0LmFmdGVyVHJhbnNpdGlvbkVudGVyLFwiYWZ0ZXItbGVhdmVcIjp0LmFmdGVyVHJhbnNpdGlvbkxlYXZlfX0sW3QudmlzaWJpbGl0eS5tb2RhbD9uKFwiZGl2XCIse3JlZjpcIm1vZGFsXCIsY2xhc3M6dC5tb2RhbENsYXNzLHN0eWxlOnQubW9kYWxTdHlsZX0sW3QuX3QoXCJkZWZhdWx0XCIpLHQuX3YoXCIgXCIpLHQucmVzaXphYmxlJiYhdC5pc0F1dG9IZWlnaHQ/bihcInJlc2l6ZXJcIix7YXR0cnM6e1wibWluLXdpZHRoXCI6dC5taW5XaWR0aCxcIm1pbi1oZWlnaHRcIjp0Lm1pbkhlaWdodH0sb246e3Jlc2l6ZTp0LmhhbmRsZU1vZGFsUmVzaXplfX0pOnQuX2UoKV0sMik6dC5fZSgpXSldLDEpXSk6dC5fZSgpXSl9LGk9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLiRjcmVhdGVFbGVtZW50O3JldHVybih0aGlzLl9zZWxmLl9jfHxlKShcImRpdlwiLHtjbGFzczp0aGlzLmNsYXNzTmFtZX0pfTtpLl93aXRoU3RyaXBwZWQ9by5fd2l0aFN0cmlwcGVkPSEwO3ZhciBzPWZ1bmN0aW9uKCl7dmFyIGU9MDxhcmd1bWVudHMubGVuZ3RoJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOjA7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuKGUrKykudG9TdHJpbmcoKX19KCksdT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIG48ZT9lOnQ8bj90Om59LHI9ZnVuY3Rpb24oKXt2YXIgZT0wPGFyZ3VtZW50cy5sZW5ndGgmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e307cmV0dXJuIGZ1bmN0aW9uKGkpe2Zvcih2YXIgZT0xO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspe3ZhciByPW51bGwhPWFyZ3VtZW50c1tlXT9hcmd1bWVudHNbZV06e30sdD1PYmplY3Qua2V5cyhyKTtcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzJiYodD10LmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHIpLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihyLGUpLmVudW1lcmFibGV9KSkpLHQuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgdCxuLG87dD1pLG89cltuPWVdLG4gaW4gdD9PYmplY3QuZGVmaW5lUHJvcGVydHkodCxuLHt2YWx1ZTpvLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6dFtuXT1vfSl9cmV0dXJuIGl9KHtpZDpzKCksdGltZXN0YW1wOkRhdGUubm93KCksY2FuY2VsZWQ6ITF9LGUpfSxhPXtuYW1lOlwiVnVlSnNNb2RhbFJlc2l6ZXJcIixwcm9wczp7bWluSGVpZ2h0Ont0eXBlOk51bWJlcixkZWZhdWx0OjB9LG1pbldpZHRoOnt0eXBlOk51bWJlcixkZWZhdWx0OjB9fSxkYXRhOmZ1bmN0aW9uKCl7cmV0dXJue2NsaWNrZWQ6ITEsc2l6ZTp7fX19LG1vdW50ZWQ6ZnVuY3Rpb24oKXt0aGlzLiRlbC5hZGRFdmVudExpc3RlbmVyKFwibW91c2Vkb3duXCIsdGhpcy5zdGFydCwhMSl9LGNvbXB1dGVkOntjbGFzc05hbWU6ZnVuY3Rpb24oKXtyZXR1cm57XCJ2dWUtbW9kYWwtcmVzaXplclwiOiEwLGNsaWNrZWQ6dGhpcy5jbGlja2VkfX19LG1ldGhvZHM6e3N0YXJ0OmZ1bmN0aW9uKGUpe3RoaXMuY2xpY2tlZD0hMCx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlbW92ZVwiLHRoaXMubW91c2Vtb3ZlLCExKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNldXBcIix0aGlzLnN0b3AsITEpLGUuc3RvcFByb3BhZ2F0aW9uKCksZS5wcmV2ZW50RGVmYXVsdCgpfSxzdG9wOmZ1bmN0aW9uKCl7dGhpcy5jbGlja2VkPSExLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwibW91c2Vtb3ZlXCIsdGhpcy5tb3VzZW1vdmUsITEpLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwibW91c2V1cFwiLHRoaXMuc3RvcCwhMSksdGhpcy4kZW1pdChcInJlc2l6ZS1zdG9wXCIse2VsZW1lbnQ6dGhpcy4kZWwucGFyZW50RWxlbWVudCxzaXplOnRoaXMuc2l6ZX0pfSxtb3VzZW1vdmU6ZnVuY3Rpb24oZSl7dGhpcy5yZXNpemUoZSl9LHJlc2l6ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLiRlbC5wYXJlbnRFbGVtZW50O2lmKHQpe3ZhciBuPWUuY2xpZW50WC10Lm9mZnNldExlZnQsbz1lLmNsaWVudFktdC5vZmZzZXRUb3A7bj11KHRoaXMubWluV2lkdGgsd2luZG93LmlubmVyV2lkdGgsbiksbz11KHRoaXMubWluSGVpZ2h0LHdpbmRvdy5pbm5lckhlaWdodCxvKSx0aGlzLnNpemU9e3dpZHRoOm4saGVpZ2h0Om99LHQuc3R5bGUud2lkdGg9bitcInB4XCIsdC5zdHlsZS5oZWlnaHQ9bytcInB4XCIsdGhpcy4kZW1pdChcInJlc2l6ZVwiLHtlbGVtZW50OnQsc2l6ZTp0aGlzLnNpemV9KX19fX07big1KTtmdW5jdGlvbiBsKGUsdCxuLG8saSxyLGEscyl7dmFyIGwsZD1cImZ1bmN0aW9uXCI9PXR5cGVvZiBlP2Uub3B0aW9uczplO2lmKHQmJihkLnJlbmRlcj10LGQuc3RhdGljUmVuZGVyRm5zPW4sZC5fY29tcGlsZWQ9ITApLG8mJihkLmZ1bmN0aW9uYWw9ITApLHImJihkLl9zY29wZUlkPVwiZGF0YS12LVwiK3IpLGE/KGw9ZnVuY3Rpb24oZSl7KGU9ZXx8dGhpcy4kdm5vZGUmJnRoaXMuJHZub2RlLnNzckNvbnRleHR8fHRoaXMucGFyZW50JiZ0aGlzLnBhcmVudC4kdm5vZGUmJnRoaXMucGFyZW50LiR2bm9kZS5zc3JDb250ZXh0KXx8XCJ1bmRlZmluZWRcIj09dHlwZW9mIF9fVlVFX1NTUl9DT05URVhUX198fChlPV9fVlVFX1NTUl9DT05URVhUX18pLGkmJmkuY2FsbCh0aGlzLGUpLGUmJmUuX3JlZ2lzdGVyZWRDb21wb25lbnRzJiZlLl9yZWdpc3RlcmVkQ29tcG9uZW50cy5hZGQoYSl9LGQuX3NzclJlZ2lzdGVyPWwpOmkmJihsPXM/ZnVuY3Rpb24oKXtpLmNhbGwodGhpcyx0aGlzLiRyb290LiRvcHRpb25zLnNoYWRvd1Jvb3QpfTppKSxsKWlmKGQuZnVuY3Rpb25hbCl7ZC5faW5qZWN0U3R5bGVzPWw7dmFyIHU9ZC5yZW5kZXI7ZC5yZW5kZXI9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbC5jYWxsKHQpLHUoZSx0KX19ZWxzZXt2YXIgYz1kLmJlZm9yZUNyZWF0ZTtkLmJlZm9yZUNyZWF0ZT1jP1tdLmNvbmNhdChjLGwpOltsXX1yZXR1cm57ZXhwb3J0czplLG9wdGlvbnM6ZH19dmFyIGQ9bChhLGksW10sITEsbnVsbCxudWxsLG51bGwpO2Qub3B0aW9ucy5fX2ZpbGU9XCJzcmMvUmVzaXplci52dWVcIjt2YXIgYz1kLmV4cG9ydHM7ZnVuY3Rpb24gaChlKXtyZXR1cm4oaD1cImZ1bmN0aW9uXCI9PXR5cGVvZiBTeW1ib2wmJlwic3ltYm9sXCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT9cInN5bWJvbFwiOnR5cGVvZiBlfSkoZSl9dmFyIGY9XCJbLStdP1swLTldKi4/WzAtOV0rXCIscD1be25hbWU6XCJweFwiLHJlZ2V4cDpuZXcgUmVnRXhwKFwiXlwiLmNvbmNhdChmLFwicHgkXCIpKX0se25hbWU6XCIlXCIscmVnZXhwOm5ldyBSZWdFeHAoXCJeXCIuY29uY2F0KGYsXCIlJFwiKSl9LHtuYW1lOlwicHhcIixyZWdleHA6bmV3IFJlZ0V4cChcIl5cIi5jb25jYXQoZixcIiRcIikpfV0sdj1mdW5jdGlvbihlKXtzd2l0Y2goaChlKSl7Y2FzZVwibnVtYmVyXCI6cmV0dXJue3R5cGU6XCJweFwiLHZhbHVlOmV9O2Nhc2VcInN0cmluZ1wiOnJldHVybiBmdW5jdGlvbihlKXtpZihcImF1dG9cIj09PWUpcmV0dXJue3R5cGU6ZSx2YWx1ZTowfTtmb3IodmFyIHQ9MDt0PHAubGVuZ3RoO3QrKyl7dmFyIG49cFt0XTtpZihuLnJlZ2V4cC50ZXN0KGUpKXJldHVybnt0eXBlOm4ubmFtZSx2YWx1ZTpwYXJzZUZsb2F0KGUpfX1yZXR1cm57dHlwZTpcIlwiLHZhbHVlOmV9fShlKTtkZWZhdWx0OnJldHVybnt0eXBlOlwiXCIsdmFsdWU6ZX19fSxtPWZ1bmN0aW9uKGUpe2lmKFwic3RyaW5nXCIhPXR5cGVvZiBlKXJldHVybiAwPD1lO3ZhciB0PXYoZSk7cmV0dXJuKFwiJVwiPT09dC50eXBlfHxcInB4XCI9PT10LnR5cGUpJiYwPHQudmFsdWV9O3ZhciBnPXtuYW1lOlwiVnVlSnNNb2RhbFwiLHByb3BzOntuYW1lOntyZXF1aXJlZDohMCx0eXBlOlN0cmluZ30sZGVsYXk6e3R5cGU6TnVtYmVyLGRlZmF1bHQ6MH0scmVzaXphYmxlOnt0eXBlOkJvb2xlYW4sZGVmYXVsdDohMX0sYWRhcHRpdmU6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OiExfSxkcmFnZ2FibGU6e3R5cGU6W0Jvb2xlYW4sU3RyaW5nXSxkZWZhdWx0OiExfSxzY3JvbGxhYmxlOnt0eXBlOkJvb2xlYW4sZGVmYXVsdDohMX0scmVzZXQ6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OiExfSxvdmVybGF5VHJhbnNpdGlvbjp7dHlwZTpTdHJpbmcsZGVmYXVsdDpcIm92ZXJsYXktZmFkZVwifSx0cmFuc2l0aW9uOnt0eXBlOlN0cmluZ30sY2xpY2tUb0Nsb3NlOnt0eXBlOkJvb2xlYW4sZGVmYXVsdDohMH0sY2xhc3Nlczp7dHlwZTpbU3RyaW5nLEFycmF5XSxkZWZhdWx0Olwidi0tbW9kYWxcIn0sbWluV2lkdGg6e3R5cGU6TnVtYmVyLGRlZmF1bHQ6MCx2YWxpZGF0b3I6ZnVuY3Rpb24oZSl7cmV0dXJuIDA8PWV9fSxtaW5IZWlnaHQ6e3R5cGU6TnVtYmVyLGRlZmF1bHQ6MCx2YWxpZGF0b3I6ZnVuY3Rpb24oZSl7cmV0dXJuIDA8PWV9fSxtYXhXaWR0aDp7dHlwZTpOdW1iZXIsZGVmYXVsdDoxLzB9LG1heEhlaWdodDp7dHlwZTpOdW1iZXIsZGVmYXVsdDoxLzB9LHdpZHRoOnt0eXBlOltOdW1iZXIsU3RyaW5nXSxkZWZhdWx0OjYwMCx2YWxpZGF0b3I6bX0saGVpZ2h0Ont0eXBlOltOdW1iZXIsU3RyaW5nXSxkZWZhdWx0OjMwMCx2YWxpZGF0b3I6ZnVuY3Rpb24oZSl7cmV0dXJuXCJhdXRvXCI9PT1lfHxtKGUpfX0scGl2b3RYOnt0eXBlOk51bWJlcixkZWZhdWx0Oi41LHZhbGlkYXRvcjpmdW5jdGlvbihlKXtyZXR1cm4gMDw9ZSYmZTw9MX19LHBpdm90WTp7dHlwZTpOdW1iZXIsZGVmYXVsdDouNSx2YWxpZGF0b3I6ZnVuY3Rpb24oZSl7cmV0dXJuIDA8PWUmJmU8PTF9fX0sY29tcG9uZW50czp7UmVzaXplcjpjfSxkYXRhOmZ1bmN0aW9uKCl7cmV0dXJue3Zpc2libGU6ITEsdmlzaWJpbGl0eTp7bW9kYWw6ITEsb3ZlcmxheTohMX0sc2hpZnQ6e2xlZnQ6MCx0b3A6MH0sbW9kYWw6e3dpZHRoOjAsd2lkdGhUeXBlOlwicHhcIixoZWlnaHQ6MCxoZWlnaHRUeXBlOlwicHhcIixyZW5kZXJlZEhlaWdodDowfSx3aW5kb3c6e3dpZHRoOjAsaGVpZ2h0OjB9LG11dGF0aW9uT2JzZXJ2ZXI6bnVsbH19LGNyZWF0ZWQ6ZnVuY3Rpb24oKXt0aGlzLnNldEluaXRpYWxTaXplKCl9LGJlZm9yZU1vdW50OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztpZih6LmV2ZW50LiRvbihcInRvZ2dsZVwiLHRoaXMuaGFuZGxlVG9nZ2xlRXZlbnQpLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwicmVzaXplXCIsdGhpcy5oYW5kbGVXaW5kb3dSZXNpemUpLHRoaXMuaGFuZGxlV2luZG93UmVzaXplKCksdGhpcy5zY3JvbGxhYmxlJiYhdGhpcy5pc0F1dG9IZWlnaHQmJmNvbnNvbGUud2FybignTW9kYWwgXCInLmNvbmNhdCh0aGlzLm5hbWUsJ1wiIGhhcyBzY3JvbGxhYmxlIGZsYWcgc2V0IHRvIHRydWUgJykrJ2J1dCBoZWlnaHQgaXMgbm90IFwiYXV0b1wiICgnLmNvbmNhdCh0aGlzLmhlaWdodCxcIilcIikpLHRoaXMuaXNBdXRvSGVpZ2h0KXt2YXIgZT1mdW5jdGlvbigpe2lmKFwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3cpZm9yKHZhciBlPVtcIlwiLFwiV2ViS2l0XCIsXCJNb3pcIixcIk9cIixcIk1zXCJdLHQ9MDt0PGUubGVuZ3RoO3QrKyl7dmFyIG49ZVt0XStcIk11dGF0aW9uT2JzZXJ2ZXJcIjtpZihuIGluIHdpbmRvdylyZXR1cm4gd2luZG93W25dfXJldHVybiExfSgpO2UmJih0aGlzLm11dGF0aW9uT2JzZXJ2ZXI9bmV3IGUoZnVuY3Rpb24oZSl7dC51cGRhdGVSZW5kZXJlZEhlaWdodCgpfSkpfXRoaXMuY2xpY2tUb0Nsb3NlJiZ3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcImtleXVwXCIsdGhpcy5oYW5kbGVFc2NhcGVLZXlVcCl9LGJlZm9yZURlc3Ryb3k6ZnVuY3Rpb24oKXt6LmV2ZW50LiRvZmYoXCJ0b2dnbGVcIix0aGlzLmhhbmRsZVRvZ2dsZUV2ZW50KSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLHRoaXMuaGFuZGxlV2luZG93UmVzaXplKSx0aGlzLmNsaWNrVG9DbG9zZSYmd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJrZXl1cFwiLHRoaXMuaGFuZGxlRXNjYXBlS2V5VXApLHRoaXMuc2Nyb2xsYWJsZSYmZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QucmVtb3ZlKFwidi0tbW9kYWwtYmxvY2stc2Nyb2xsXCIpfSxjb21wdXRlZDp7aXNBdXRvSGVpZ2h0OmZ1bmN0aW9uKCl7cmV0dXJuXCJhdXRvXCI9PT10aGlzLm1vZGFsLmhlaWdodFR5cGV9LHBvc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy53aW5kb3csdD10aGlzLnNoaWZ0LG49dGhpcy5waXZvdFgsbz10aGlzLnBpdm90WSxpPXRoaXMudHJ1ZU1vZGFsV2lkdGgscj10aGlzLnRydWVNb2RhbEhlaWdodCxhPWUud2lkdGgtaSxzPWUuaGVpZ2h0LXIsbD10LmxlZnQrbiphLGQ9dC50b3ArbypzO3JldHVybntsZWZ0OnBhcnNlSW50KHUoMCxhLGwpKSx0b3A6cGFyc2VJbnQodSgwLHMsZCkpfX0sdHJ1ZU1vZGFsV2lkdGg6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLndpbmRvdyx0PXRoaXMubW9kYWwsbj10aGlzLmFkYXB0aXZlLG89dGhpcy5taW5XaWR0aCxpPXRoaXMubWF4V2lkdGgscj1cIiVcIj09PXQud2lkdGhUeXBlP2Uud2lkdGgvMTAwKnQud2lkdGg6dC53aWR0aCxhPU1hdGgubWluKGUud2lkdGgsaSk7cmV0dXJuIG4/dShvLGEscik6cn0sdHJ1ZU1vZGFsSGVpZ2h0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy53aW5kb3csdD10aGlzLm1vZGFsLG49dGhpcy5pc0F1dG9IZWlnaHQsbz10aGlzLmFkYXB0aXZlLGk9dGhpcy5tYXhIZWlnaHQscj1cIiVcIj09PXQuaGVpZ2h0VHlwZT9lLmhlaWdodC8xMDAqdC5oZWlnaHQ6dC5oZWlnaHQ7aWYobilyZXR1cm4gdGhpcy5tb2RhbC5yZW5kZXJlZEhlaWdodDt2YXIgYT1NYXRoLm1pbihlLmhlaWdodCxpKTtyZXR1cm4gbz91KHRoaXMubWluSGVpZ2h0LGEscik6cn0sb3ZlcmxheUNsYXNzOmZ1bmN0aW9uKCl7cmV0dXJue1widi0tbW9kYWwtb3ZlcmxheVwiOiEwLHNjcm9sbGFibGU6dGhpcy5zY3JvbGxhYmxlJiZ0aGlzLmlzQXV0b0hlaWdodH19LG1vZGFsQ2xhc3M6ZnVuY3Rpb24oKXtyZXR1cm5bXCJ2LS1tb2RhbC1ib3hcIix0aGlzLmNsYXNzZXNdfSxtb2RhbFN0eWxlOmZ1bmN0aW9uKCl7cmV0dXJue3RvcDp0aGlzLnBvc2l0aW9uLnRvcCtcInB4XCIsbGVmdDp0aGlzLnBvc2l0aW9uLmxlZnQrXCJweFwiLHdpZHRoOnRoaXMudHJ1ZU1vZGFsV2lkdGgrXCJweFwiLGhlaWdodDp0aGlzLmlzQXV0b0hlaWdodD9cImF1dG9cIjp0aGlzLnRydWVNb2RhbEhlaWdodCtcInB4XCJ9fX0sd2F0Y2g6e3Zpc2libGU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcztlPyh0aGlzLnZpc2liaWxpdHkub3ZlcmxheT0hMCxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dC52aXNpYmlsaXR5Lm1vZGFsPSEwLHQuJG5leHRUaWNrKGZ1bmN0aW9uKCl7dC5hZGREcmFnZ2FibGVMaXN0ZW5lcnMoKSx0LmNhbGxBZnRlckV2ZW50KCEwKX0pfSx0aGlzLmRlbGF5KSk6KHRoaXMudmlzaWJpbGl0eS5tb2RhbD0hMSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dC52aXNpYmlsaXR5Lm92ZXJsYXk9ITEsdC4kbmV4dFRpY2soZnVuY3Rpb24oKXt0LnJlbW92ZURyYWdnYWJsZUxpc3RlbmVycygpLHQuY2FsbEFmdGVyRXZlbnQoITEpfSl9LHRoaXMuZGVsYXkpKX19LG1ldGhvZHM6e2hhbmRsZVRvZ2dsZUV2ZW50OmZ1bmN0aW9uKGUsdCxuKXtpZih0aGlzLm5hbWU9PT1lKXt2YXIgbz12b2lkIDA9PT10PyF0aGlzLnZpc2libGU6dDt0aGlzLnRvZ2dsZShvLG4pfX0sc2V0SW5pdGlhbFNpemU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm1vZGFsLHQ9dih0aGlzLndpZHRoKSxuPXYodGhpcy5oZWlnaHQpO2Uud2lkdGg9dC52YWx1ZSxlLndpZHRoVHlwZT10LnR5cGUsZS5oZWlnaHQ9bi52YWx1ZSxlLmhlaWdodFR5cGU9bi50eXBlfSxoYW5kbGVFc2NhcGVLZXlVcDpmdW5jdGlvbihlKXsyNz09PWUud2hpY2gmJnRoaXMudmlzaWJsZSYmdGhpcy4kbW9kYWwuaGlkZSh0aGlzLm5hbWUpfSxoYW5kbGVXaW5kb3dSZXNpemU6ZnVuY3Rpb24oKXt0aGlzLndpbmRvdy53aWR0aD13aW5kb3cuaW5uZXJXaWR0aCx0aGlzLndpbmRvdy5oZWlnaHQ9d2luZG93LmlubmVySGVpZ2h0LHRoaXMuZW5zdXJlU2hpZnRJbldpbmRvd0JvdW5kcygpfSxjcmVhdGVNb2RhbEV2ZW50OmZ1bmN0aW9uKCl7dmFyIGU9MDxhcmd1bWVudHMubGVuZ3RoJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9O3JldHVybiByKGZ1bmN0aW9uKGkpe2Zvcih2YXIgZT0xO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspe3ZhciByPW51bGwhPWFyZ3VtZW50c1tlXT9hcmd1bWVudHNbZV06e30sdD1PYmplY3Qua2V5cyhyKTtcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzJiYodD10LmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHIpLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihyLGUpLmVudW1lcmFibGV9KSkpLHQuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgdCxuLG87dD1pLG89cltuPWVdLG4gaW4gdD9PYmplY3QuZGVmaW5lUHJvcGVydHkodCxuLHt2YWx1ZTpvLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6dFtuXT1vfSl9cmV0dXJuIGl9KHtuYW1lOnRoaXMubmFtZSxyZWY6dGhpcy4kcmVmcy5tb2RhbH0sZSkpfSxoYW5kbGVNb2RhbFJlc2l6ZTpmdW5jdGlvbihlKXt0aGlzLm1vZGFsLndpZHRoVHlwZT1cInB4XCIsdGhpcy5tb2RhbC53aWR0aD1lLnNpemUud2lkdGgsdGhpcy5tb2RhbC5oZWlnaHRUeXBlPVwicHhcIix0aGlzLm1vZGFsLmhlaWdodD1lLnNpemUuaGVpZ2h0O3ZhciB0PXRoaXMubW9kYWwuc2l6ZTt0aGlzLiRlbWl0KFwicmVzaXplXCIsdGhpcy5jcmVhdGVNb2RhbEV2ZW50KHtzaXplOnR9KSl9LHRvZ2dsZTpmdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMucmVzZXQsbz10aGlzLnNjcm9sbGFibGUsaT10aGlzLnZpc2libGU7aWYoaSE9PWUpe3ZhciByPWk/XCJiZWZvcmUtY2xvc2VcIjpcImJlZm9yZS1vcGVuXCI7XCJiZWZvcmUtb3BlblwiPT09cj8oXCJ1bmRlZmluZWRcIiE9dHlwZW9mIGRvY3VtZW50JiZkb2N1bWVudC5hY3RpdmVFbGVtZW50JiZcIkJPRFlcIiE9PWRvY3VtZW50LmFjdGl2ZUVsZW1lbnQudGFnTmFtZSYmZG9jdW1lbnQuYWN0aXZlRWxlbWVudC5ibHVyJiZkb2N1bWVudC5hY3RpdmVFbGVtZW50LmJsdXIoKSxuJiYodGhpcy5zZXRJbml0aWFsU2l6ZSgpLHRoaXMuc2hpZnQubGVmdD0wLHRoaXMuc2hpZnQudG9wPTApLG8mJmRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmFkZChcInYtLW1vZGFsLWJsb2NrLXNjcm9sbFwiKSk6byYmZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QucmVtb3ZlKFwidi0tbW9kYWwtYmxvY2stc2Nyb2xsXCIpO3ZhciBhPSExLHM9dGhpcy5jcmVhdGVNb2RhbEV2ZW50KHtzdG9wOmZ1bmN0aW9uKCl7YT0hMH0sc3RhdGU6ZSxwYXJhbXM6dH0pO3RoaXMuJGVtaXQocixzKSxhfHwodGhpcy52aXNpYmxlPWUpfX0sZ2V0RHJhZ2dhYmxlRWxlbWVudDpmdW5jdGlvbigpe3ZhciBlPVwic3RyaW5nXCIhPXR5cGVvZiB0aGlzLmRyYWdnYWJsZT9cIi52LS1tb2RhbC1ib3hcIjp0aGlzLmRyYWdnYWJsZTtyZXR1cm4gZT90aGlzLiRyZWZzLm92ZXJsYXkucXVlcnlTZWxlY3RvcihlKTpudWxsfSxoYW5kbGVCYWNrZ3JvdW5kQ2xpY2s6ZnVuY3Rpb24oKXt0aGlzLmNsaWNrVG9DbG9zZSYmdGhpcy50b2dnbGUoITEpfSxjYWxsQWZ0ZXJFdmVudDpmdW5jdGlvbihlKXtlP3RoaXMuY29ubmVjdE9ic2VydmVyKCk6dGhpcy5kaXNjb25uZWN0T2JzZXJ2ZXIoKTt2YXIgdD1lP1wib3BlbmVkXCI6XCJjbG9zZWRcIixuPXRoaXMuY3JlYXRlTW9kYWxFdmVudCh7c3RhdGU6ZX0pO3RoaXMuJGVtaXQodCxuKX0sYWRkRHJhZ2dhYmxlTGlzdGVuZXJzOmZ1bmN0aW9uKCl7dmFyIHI9dGhpcztpZih0aGlzLmRyYWdnYWJsZSl7dmFyIGU9dGhpcy5nZXREcmFnZ2FibGVFbGVtZW50KCk7aWYoZSl7dmFyIGE9MCxzPTAsbD0wLGQ9MCx1PWZ1bmN0aW9uKGUpe3JldHVybiBlLnRvdWNoZXMmJjA8ZS50b3VjaGVzLmxlbmd0aD9lLnRvdWNoZXNbMF06ZX0sdD1mdW5jdGlvbihlKXt2YXIgdD1lLnRhcmdldDtpZighdHx8XCJJTlBVVFwiIT09dC5ub2RlTmFtZSl7dmFyIG49dShlKSxvPW4uY2xpZW50WCxpPW4uY2xpZW50WTtkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwibW91c2Vtb3ZlXCIsYyksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcInRvdWNobW92ZVwiLGMpLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZXVwXCIsaCksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcInRvdWNoZW5kXCIsaCksYT1vLHM9aSxsPXIuc2hpZnQubGVmdCxkPXIuc2hpZnQudG9wfX0sYz1mdW5jdGlvbihlKXt2YXIgdD11KGUpLG49dC5jbGllbnRYLG89dC5jbGllbnRZO3Iuc2hpZnQubGVmdD1sK24tYSxyLnNoaWZ0LnRvcD1kK28tcyxlLnByZXZlbnREZWZhdWx0KCl9LGg9ZnVuY3Rpb24gZSh0KXtyLmVuc3VyZVNoaWZ0SW5XaW5kb3dCb3VuZHMoKSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwibW91c2Vtb3ZlXCIsYyksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInRvdWNobW92ZVwiLGMpLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtb3VzZXVwXCIsZSksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInRvdWNoZW5kXCIsZSksdC5wcmV2ZW50RGVmYXVsdCgpfTtlLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZWRvd25cIix0KSxlLmFkZEV2ZW50TGlzdGVuZXIoXCJ0b3VjaHN0YXJ0XCIsdCl9fX0scmVtb3ZlRHJhZ2dhYmxlTGlzdGVuZXJzOmZ1bmN0aW9uKCl7fSx1cGRhdGVSZW5kZXJlZEhlaWdodDpmdW5jdGlvbigpe3RoaXMuJHJlZnMubW9kYWwmJih0aGlzLm1vZGFsLnJlbmRlcmVkSGVpZ2h0PXRoaXMuJHJlZnMubW9kYWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0KX0sY29ubmVjdE9ic2VydmVyOmZ1bmN0aW9uKCl7dGhpcy5tdXRhdGlvbk9ic2VydmVyJiZ0aGlzLm11dGF0aW9uT2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLiRyZWZzLm92ZXJsYXkse2NoaWxkTGlzdDohMCxhdHRyaWJ1dGVzOiEwLHN1YnRyZWU6ITB9KX0sZGlzY29ubmVjdE9ic2VydmVyOmZ1bmN0aW9uKCl7dGhpcy5tdXRhdGlvbk9ic2VydmVyJiZ0aGlzLm11dGF0aW9uT2JzZXJ2ZXIuZGlzY29ubmVjdCgpfSxiZWZvcmVUcmFuc2l0aW9uRW50ZXI6ZnVuY3Rpb24oKXt0aGlzLmNvbm5lY3RPYnNlcnZlcigpfSxhZnRlclRyYW5zaXRpb25FbnRlcjpmdW5jdGlvbigpe30sYWZ0ZXJUcmFuc2l0aW9uTGVhdmU6ZnVuY3Rpb24oKXt9LGVuc3VyZVNoaWZ0SW5XaW5kb3dCb3VuZHM6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLndpbmRvdyx0PXRoaXMuc2hpZnQsbj10aGlzLnBpdm90WCxvPXRoaXMucGl2b3RZLGk9dGhpcy50cnVlTW9kYWxXaWR0aCxyPXRoaXMudHJ1ZU1vZGFsSGVpZ2h0LGE9ZS53aWR0aC1pLHM9ZS5oZWlnaHQtcixsPXQubGVmdCtuKmEsZD10LnRvcCtvKnM7dGhpcy5zaGlmdC5sZWZ0LT1sLXUoMCxhLGwpLHRoaXMuc2hpZnQudG9wLT1kLXUoMCxzLGQpfX19LGI9KG4oNyksbChnLG8sW10sITEsbnVsbCxudWxsLG51bGwpKTtiLm9wdGlvbnMuX19maWxlPVwic3JjL01vZGFsLnZ1ZVwiO3ZhciB5PWIuZXhwb3J0cyx3PWZ1bmN0aW9uKCl7dmFyIG49dGhpcyxlPW4uJGNyZWF0ZUVsZW1lbnQsbz1uLl9zZWxmLl9jfHxlO3JldHVybiBvKFwibW9kYWxcIix7YXR0cnM6e25hbWU6XCJkaWFsb2dcIixoZWlnaHQ6XCJhdXRvXCIsY2xhc3NlczpbXCJ2LS1tb2RhbFwiLFwidnVlLWRpYWxvZ1wiLHRoaXMucGFyYW1zLmNsYXNzXSx3aWR0aDpuLndpZHRoLFwicGl2b3QteVwiOi4zLGFkYXB0aXZlOiEwLGNsaWNrVG9DbG9zZTpuLmNsaWNrVG9DbG9zZSx0cmFuc2l0aW9uOm4udHJhbnNpdGlvbn0sb246e1wiYmVmb3JlLW9wZW5cIjpuLmJlZm9yZU9wZW5lZCxcImJlZm9yZS1jbG9zZVwiOm4uYmVmb3JlQ2xvc2VkLG9wZW5lZDpmdW5jdGlvbihlKXtuLiRlbWl0KFwib3BlbmVkXCIsZSl9LGNsb3NlZDpmdW5jdGlvbihlKXtuLiRlbWl0KFwiY2xvc2VkXCIsZSl9fX0sW28oXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJkaWFsb2ctY29udGVudFwifSxbbi5wYXJhbXMudGl0bGU/byhcImRpdlwiLHtzdGF0aWNDbGFzczpcImRpYWxvZy1jLXRpdGxlXCIsZG9tUHJvcHM6e2lubmVySFRNTDpuLl9zKG4ucGFyYW1zLnRpdGxlfHxcIlwiKX19KTpuLl9lKCksbi5fdihcIiBcIiksbi5wYXJhbXMuY29tcG9uZW50P28obi5wYXJhbXMuY29tcG9uZW50LG4uX2Ioe3RhZzpcImNvbXBvbmVudFwifSxcImNvbXBvbmVudFwiLG4ucGFyYW1zLnByb3BzLCExKSk6byhcImRpdlwiLHtzdGF0aWNDbGFzczpcImRpYWxvZy1jLXRleHRcIixkb21Qcm9wczp7aW5uZXJIVE1MOm4uX3Mobi5wYXJhbXMudGV4dHx8XCJcIil9fSldLDEpLG4uX3YoXCIgXCIpLG4uYnV0dG9ucz9vKFwiZGl2XCIse3N0YXRpY0NsYXNzOlwidnVlLWRpYWxvZy1idXR0b25zXCJ9LG4uX2wobi5idXR0b25zLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIG8oXCJidXR0b25cIix7a2V5OnQsY2xhc3M6ZS5jbGFzc3x8XCJ2dWUtZGlhbG9nLWJ1dHRvblwiLHN0eWxlOm4uYnV0dG9uU3R5bGUsYXR0cnM6e3R5cGU6XCJidXR0b25cIn0sZG9tUHJvcHM6e2lubmVySFRNTDpuLl9zKGUudGl0bGUpfSxvbjp7Y2xpY2s6ZnVuY3Rpb24oZSl7ZS5zdG9wUHJvcGFnYXRpb24oKSxuLmNsaWNrKHQsZSl9fX0sW24uX3YoXCJcXG4gICAgICBcIituLl9zKGUudGl0bGUpK1wiXFxuICAgIFwiKV0pfSkpOm8oXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJ2dWUtZGlhbG9nLWJ1dHRvbnMtbm9uZVwifSldKX07dy5fd2l0aFN0cmlwcGVkPSEwO3ZhciB4PXtuYW1lOlwiVnVlSnNEaWFsb2dcIixwcm9wczp7d2lkdGg6e3R5cGU6W051bWJlcixTdHJpbmddLGRlZmF1bHQ6NDAwfSxjbGlja1RvQ2xvc2U6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OiEwfSx0cmFuc2l0aW9uOnt0eXBlOlN0cmluZyxkZWZhdWx0OlwiZmFkZVwifX0sZGF0YTpmdW5jdGlvbigpe3JldHVybntwYXJhbXM6e30sZGVmYXVsdEJ1dHRvbnM6W3t0aXRsZTpcIkNMT1NFXCJ9XX19LGNvbXB1dGVkOntidXR0b25zOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGFyYW1zLmJ1dHRvbnN8fHRoaXMuZGVmYXVsdEJ1dHRvbnN9LGJ1dHRvblN0eWxlOmZ1bmN0aW9uKCl7cmV0dXJue2ZsZXg6XCIxIDEgXCIuY29uY2F0KDEwMC90aGlzLmJ1dHRvbnMubGVuZ3RoLFwiJVwiKX19fSxtZXRob2RzOntiZWZvcmVPcGVuZWQ6ZnVuY3Rpb24oZSl7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJrZXl1cFwiLHRoaXMub25LZXlVcCksdGhpcy5wYXJhbXM9ZS5wYXJhbXN8fHt9LHRoaXMuJGVtaXQoXCJiZWZvcmUtb3BlbmVkXCIsZSl9LGJlZm9yZUNsb3NlZDpmdW5jdGlvbihlKXt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImtleXVwXCIsdGhpcy5vbktleVVwKSx0aGlzLnBhcmFtcz17fSx0aGlzLiRlbWl0KFwiYmVmb3JlLWNsb3NlZFwiLGUpfSxjbGljazpmdW5jdGlvbihlLHQpe3ZhciBuPTI8YXJndW1lbnRzLmxlbmd0aCYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTpcImNsaWNrXCIsbz10aGlzLmJ1dHRvbnNbZV07byYmXCJmdW5jdGlvblwiPT10eXBlb2Ygby5oYW5kbGVyP28uaGFuZGxlcihlLHQse3NvdXJjZTpufSk6dGhpcy4kbW9kYWwuaGlkZShcImRpYWxvZ1wiKX0sb25LZXlVcDpmdW5jdGlvbihlKXtpZigxMz09PWUud2hpY2gmJjA8dGhpcy5idXR0b25zLmxlbmd0aCl7dmFyIHQ9MT09PXRoaXMuYnV0dG9ucy5sZW5ndGg/MDp0aGlzLmJ1dHRvbnMuZmluZEluZGV4KGZ1bmN0aW9uKGUpe3JldHVybiBlLmRlZmF1bHR9KTstMSE9PXQmJnRoaXMuY2xpY2sodCxlLFwia2V5cHJlc3NcIil9fX19LF89KG4oOSksbCh4LHcsW10sITEsbnVsbCxudWxsLG51bGwpKTtfLm9wdGlvbnMuX19maWxlPVwic3JjL0RpYWxvZy52dWVcIjt2YXIgRT1fLmV4cG9ydHMsUz1mdW5jdGlvbigpe3ZhciBuPXRoaXMsZT1uLiRjcmVhdGVFbGVtZW50LG89bi5fc2VsZi5fY3x8ZTtyZXR1cm4gbyhcImRpdlwiLHthdHRyczp7aWQ6XCJtb2RhbHMtY29udGFpbmVyXCJ9fSxuLl9sKG4ubW9kYWxzLGZ1bmN0aW9uKHQpe3JldHVybiBvKFwibW9kYWxcIixuLl9nKG4uX2Ioe2tleTp0LmlkLG9uOntjbG9zZWQ6ZnVuY3Rpb24oZSl7bi5yZW1vdmUodC5pZCl9fX0sXCJtb2RhbFwiLHQubW9kYWxBdHRycywhMSksdC5tb2RhbExpc3RlbmVycyksW28odC5jb21wb25lbnQsbi5fZyhuLl9iKHt0YWc6XCJjb21wb25lbnRcIixvbjp7Y2xvc2U6ZnVuY3Rpb24oZSl7bi4kbW9kYWwuaGlkZSh0Lm1vZGFsQXR0cnMubmFtZSl9fX0sXCJjb21wb25lbnRcIix0LmNvbXBvbmVudEF0dHJzLCExKSxuLiRsaXN0ZW5lcnMpKV0sMSl9KSl9O1MuX3dpdGhTdHJpcHBlZD0hMDt2YXIgTz1sKHtkYXRhOmZ1bmN0aW9uKCl7cmV0dXJue21vZGFsczpbXX19LGNyZWF0ZWQ6ZnVuY3Rpb24oKXt0aGlzLiRyb290Ll9keW5hbWljQ29udGFpbmVyPXRoaXN9LG1ldGhvZHM6e2FkZDpmdW5jdGlvbihlKXt2YXIgdD10aGlzLG49MTxhcmd1bWVudHMubGVuZ3RoJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9LG89Mjxhcmd1bWVudHMubGVuZ3RoJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOnt9LGk9Mzxhcmd1bWVudHMubGVuZ3RoJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10/YXJndW1lbnRzWzNdOnt9LHI9cygpLGE9by5uYW1lfHxcIl9keW5hbWljX21vZGFsX1wiK3I7dGhpcy5tb2RhbHMucHVzaCh7aWQ6cixtb2RhbEF0dHJzOmZ1bmN0aW9uKGkpe2Zvcih2YXIgZT0xO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspe3ZhciByPW51bGwhPWFyZ3VtZW50c1tlXT9hcmd1bWVudHNbZV06e30sdD1PYmplY3Qua2V5cyhyKTtcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzJiYodD10LmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHIpLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihyLGUpLmVudW1lcmFibGV9KSkpLHQuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgdCxuLG87dD1pLG89cltuPWVdLG4gaW4gdD9PYmplY3QuZGVmaW5lUHJvcGVydHkodCxuLHt2YWx1ZTpvLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6dFtuXT1vfSl9cmV0dXJuIGl9KHt9LG8se25hbWU6YX0pLG1vZGFsTGlzdGVuZXJzOmksY29tcG9uZW50OmUsY29tcG9uZW50QXR0cnM6bn0pLHRoaXMuJG5leHRUaWNrKGZ1bmN0aW9uKCl7dC4kbW9kYWwuc2hvdyhhKX0pfSxyZW1vdmU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5tb2RhbHMuZmluZEluZGV4KGZ1bmN0aW9uKGUpe3JldHVybiBlLmlkPT09dH0pOy0xIT09ZSYmdGhpcy5tb2RhbHMuc3BsaWNlKGUsMSl9fX0sUyxbXSwhMSxudWxsLG51bGwsbnVsbCk7Ty5vcHRpb25zLl9fZmlsZT1cInNyYy9Nb2RhbHNDb250YWluZXIudnVlXCI7dmFyIGs9Ty5leHBvcnRzO2Z1bmN0aW9uIEMoZSl7cmV0dXJuKEM9XCJmdW5jdGlvblwiPT10eXBlb2YgU3ltYm9sJiZcInN5bWJvbFwiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/XCJzeW1ib2xcIjp0eXBlb2YgZX0pKGUpfW4uZCh0LFwiZ2V0TW9kYWxzQ29udGFpbmVyXCIsZnVuY3Rpb24oKXtyZXR1cm4gVH0pO3ZhciBUPWZ1bmN0aW9uKGUsdCxuKXtpZighbi5fZHluYW1pY0NvbnRhaW5lciYmdC5pbmplY3RNb2RhbHNDb250YWluZXIpe3ZhciBvPShpPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiksZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChpKSxpKTtuZXcgZSh7cGFyZW50Om4scmVuZGVyOmZ1bmN0aW9uKGUpe3JldHVybiBlKGspfX0pLiRtb3VudChvKX12YXIgaTtyZXR1cm4gbi5fZHluYW1pY0NvbnRhaW5lcn0sJD17aW5zdGFsbDpmdW5jdGlvbihhKXt2YXIgcz0xPGFyZ3VtZW50cy5sZW5ndGgmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e307aWYoIXRoaXMuaW5zdGFsbGVkKXt0aGlzLmluc3RhbGxlZD0hMCx0aGlzLmV2ZW50PW5ldyBhLHRoaXMucm9vdEluc3RhbmNlPW51bGw7dmFyIGU9cy5jb21wb25lbnROYW1lfHxcIk1vZGFsXCIsbD1zLmR5bmFtaWNEZWZhdWx0c3x8e30saT1mdW5jdGlvbihlLHQsbixvKXt2YXIgaT1uJiZuLnJvb3Q/bi5yb290OiQucm9vdEluc3RhbmNlLHI9VChhLHMsaSk7cj9yLmFkZChlLGZ1bmN0aW9uKGkpe2Zvcih2YXIgZT0xO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspe3ZhciByPW51bGwhPWFyZ3VtZW50c1tlXT9hcmd1bWVudHNbZV06e30sdD1PYmplY3Qua2V5cyhyKTtcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzJiYodD10LmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHIpLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihyLGUpLmVudW1lcmFibGV9KSkpLHQuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgdCxuLG87dD1pLG89cltuPWVdLG4gaW4gdD9PYmplY3QuZGVmaW5lUHJvcGVydHkodCxuLHt2YWx1ZTpvLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6dFtuXT1vfSl9cmV0dXJuIGl9KHt9LGwsdCksbixvKTpjb25zb2xlLndhcm4oXCJbdnVlLWpzLW1vZGFsXSBJbiBvcmRlciB0byByZW5kZXIgZHluYW1pYyBtb2RhbHMsIGEgPG1vZGFscy1jb250YWluZXI+IGNvbXBvbmVudCBtdXN0IGJlIHByZXNlbnQgb24gdGhlIHBhZ2UuXCIpfTthLnByb3RvdHlwZS4kbW9kYWw9e3Nob3c6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PWFyZ3VtZW50cy5sZW5ndGgsbj1uZXcgQXJyYXkoMTx0P3QtMTowKSxvPTE7bzx0O28rKyluW28tMV09YXJndW1lbnRzW29dO3N3aXRjaChDKGUpKXtjYXNlXCJzdHJpbmdcIjpyZXR1cm4gZnVuY3Rpb24oZSx0KXskLmV2ZW50LiRlbWl0KFwidG9nZ2xlXCIsZSwhMCx0KX0uYXBwbHkodm9pZCAwLFtlXS5jb25jYXQobikpO2Nhc2VcIm9iamVjdFwiOnJldHVybiBzLmR5bmFtaWM/aS5hcHBseSh2b2lkIDAsW2VdLmNvbmNhdChuKSk6Y29uc29sZS53YXJuKFwiW3Z1ZS1qcy1tb2RhbF0gJG1vZGFsKCkgcmVjZWl2ZWQgb2JqZWN0IGFzIGEgZmlyc3QgYXJndW1lbnQsIGJ1dCBkeW5hbWljIG1vZGFscyBhcmUgc3dpdGNoZWQgb2ZmLiBodHRwczovL2dpdGh1Yi5jb20vZXV2bC92dWUtanMtbW9kYWwvI2R5bmFtaWMtbW9kYWxzXCIpfX0saGlkZTpmdW5jdGlvbihlLHQpeyQuZXZlbnQuJGVtaXQoXCJ0b2dnbGVcIixlLCExLHQpfSx0b2dnbGU6ZnVuY3Rpb24oZSx0KXskLmV2ZW50LiRlbWl0KFwidG9nZ2xlXCIsZSx2b2lkIDAsdCl9fSxhLmNvbXBvbmVudChlLHkpLHMuZGlhbG9nJiZhLmNvbXBvbmVudChcIlZEaWFsb2dcIixFKSxzLmR5bmFtaWMmJihhLmNvbXBvbmVudChcIk1vZGFsc0NvbnRhaW5lclwiLGspLGEubWl4aW4oe2JlZm9yZU1vdW50OmZ1bmN0aW9uKCl7bnVsbD09PSQucm9vdEluc3RhbmNlJiYoJC5yb290SW5zdGFuY2U9dGhpcy4kcm9vdCl9fSkpfX19LHo9dC5kZWZhdWx0PSR9XSl9KTsiLCIoZnVuY3Rpb24gd2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24ocm9vdCwgZmFjdG9yeSkge1xuXHRpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcpXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoXCJ2dWVcIikpO1xuXHRlbHNlIGlmKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZClcblx0XHRkZWZpbmUoW1widnVlXCJdLCBmYWN0b3J5KTtcblx0ZWxzZSBpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpXG5cdFx0ZXhwb3J0c1tcInZ1ZS1ub3RpZmljYXRpb25cIl0gPSBmYWN0b3J5KHJlcXVpcmUoXCJ2dWVcIikpO1xuXHRlbHNlXG5cdFx0cm9vdFtcInZ1ZS1ub3RpZmljYXRpb25cIl0gPSBmYWN0b3J5KHJvb3RbXCJ2dWVcIl0pO1xufSkodGhpcywgZnVuY3Rpb24oX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV8yMF9fKSB7XG5yZXR1cm4gLyoqKioqKi8gKGZ1bmN0aW9uKG1vZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJhcFxuLyoqKioqKi8gXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4vKioqKioqLyBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuLyoqKioqKi8gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuLyoqKioqKi8gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4vKioqKioqLyBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbi8qKioqKiovIFx0XHR9XG4vKioqKioqLyBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbi8qKioqKiovIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4vKioqKioqLyBcdFx0XHRpOiBtb2R1bGVJZCxcbi8qKioqKiovIFx0XHRcdGw6IGZhbHNlLFxuLyoqKioqKi8gXHRcdFx0ZXhwb3J0czoge31cbi8qKioqKiovIFx0XHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbi8qKioqKiovIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuLyoqKioqKi8gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbi8qKioqKiovIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4vKioqKioqLyBcdH1cbi8qKioqKiovXG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGlkZW50aXR5IGZ1bmN0aW9uIGZvciBjYWxsaW5nIGhhcm1vbnkgaW1wb3J0cyB3aXRoIHRoZSBjb3JyZWN0IGNvbnRleHRcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5pID0gZnVuY3Rpb24odmFsdWUpIHsgcmV0dXJuIHZhbHVlOyB9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuLyoqKioqKi8gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbi8qKioqKiovIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7XG4vKioqKioqLyBcdFx0XHRcdGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4vKioqKioqLyBcdFx0XHRcdGVudW1lcmFibGU6IHRydWUsXG4vKioqKioqLyBcdFx0XHRcdGdldDogZ2V0dGVyXG4vKioqKioqLyBcdFx0XHR9KTtcbi8qKioqKiovIFx0XHR9XG4vKioqKioqLyBcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbi8qKioqKiovIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbi8qKioqKiovIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4vKioqKioqLyBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuLyoqKioqKi8gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbi8qKioqKiovIFx0XHRyZXR1cm4gZ2V0dGVyO1xuLyoqKioqKi8gXHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiL2Rpc3QvXCI7XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbi8qKioqKiovIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gMik7XG4vKioqKioqLyB9KVxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qKioqKiovIChbXG4vKiAwICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbi8vIHRoaXMgbW9kdWxlIGlzIGEgcnVudGltZSB1dGlsaXR5IGZvciBjbGVhbmVyIGNvbXBvbmVudCBtb2R1bGUgb3V0cHV0IGFuZCB3aWxsXG4vLyBiZSBpbmNsdWRlZCBpbiB0aGUgZmluYWwgd2VicGFjayB1c2VyIGJ1bmRsZVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIG5vcm1hbGl6ZUNvbXBvbmVudCAoXG4gIHJhd1NjcmlwdEV4cG9ydHMsXG4gIGNvbXBpbGVkVGVtcGxhdGUsXG4gIHNjb3BlSWQsXG4gIGNzc01vZHVsZXNcbikge1xuICB2YXIgZXNNb2R1bGVcbiAgdmFyIHNjcmlwdEV4cG9ydHMgPSByYXdTY3JpcHRFeHBvcnRzID0gcmF3U2NyaXB0RXhwb3J0cyB8fCB7fVxuXG4gIC8vIEVTNiBtb2R1bGVzIGludGVyb3BcbiAgdmFyIHR5cGUgPSB0eXBlb2YgcmF3U2NyaXB0RXhwb3J0cy5kZWZhdWx0XG4gIGlmICh0eXBlID09PSAnb2JqZWN0JyB8fCB0eXBlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgZXNNb2R1bGUgPSByYXdTY3JpcHRFeHBvcnRzXG4gICAgc2NyaXB0RXhwb3J0cyA9IHJhd1NjcmlwdEV4cG9ydHMuZGVmYXVsdFxuICB9XG5cbiAgLy8gVnVlLmV4dGVuZCBjb25zdHJ1Y3RvciBleHBvcnQgaW50ZXJvcFxuICB2YXIgb3B0aW9ucyA9IHR5cGVvZiBzY3JpcHRFeHBvcnRzID09PSAnZnVuY3Rpb24nXG4gICAgPyBzY3JpcHRFeHBvcnRzLm9wdGlvbnNcbiAgICA6IHNjcmlwdEV4cG9ydHNcblxuICAvLyByZW5kZXIgZnVuY3Rpb25zXG4gIGlmIChjb21waWxlZFRlbXBsYXRlKSB7XG4gICAgb3B0aW9ucy5yZW5kZXIgPSBjb21waWxlZFRlbXBsYXRlLnJlbmRlclxuICAgIG9wdGlvbnMuc3RhdGljUmVuZGVyRm5zID0gY29tcGlsZWRUZW1wbGF0ZS5zdGF0aWNSZW5kZXJGbnNcbiAgfVxuXG4gIC8vIHNjb3BlZElkXG4gIGlmIChzY29wZUlkKSB7XG4gICAgb3B0aW9ucy5fc2NvcGVJZCA9IHNjb3BlSWRcbiAgfVxuXG4gIC8vIGluamVjdCBjc3NNb2R1bGVzXG4gIGlmIChjc3NNb2R1bGVzKSB7XG4gICAgdmFyIGNvbXB1dGVkID0gT2JqZWN0LmNyZWF0ZShvcHRpb25zLmNvbXB1dGVkIHx8IG51bGwpXG4gICAgT2JqZWN0LmtleXMoY3NzTW9kdWxlcykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICB2YXIgbW9kdWxlID0gY3NzTW9kdWxlc1trZXldXG4gICAgICBjb21wdXRlZFtrZXldID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gbW9kdWxlIH1cbiAgICB9KVxuICAgIG9wdGlvbnMuY29tcHV0ZWQgPSBjb21wdXRlZFxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBlc01vZHVsZTogZXNNb2R1bGUsXG4gICAgZXhwb3J0czogc2NyaXB0RXhwb3J0cyxcbiAgICBvcHRpb25zOiBvcHRpb25zXG4gIH1cbn1cblxuXG4vKioqLyB9KSxcbi8qIDEgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiYVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGV2ZW50czsgfSk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3Z1ZV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMCk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3Z1ZV9fX2RlZmF1bHQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLm4oX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3Z1ZV9fKTtcblxuXG52YXIgZXZlbnRzID0gbmV3IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF92dWVfX19kZWZhdWx0LmEoeyBuYW1lOiAndnVlLW5vdGlmaWNhdGlvbicgfSk7XG5cbi8qKiovIH0pLFxuLyogMiAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShfX3dlYnBhY2tfZXhwb3J0c19fLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX05vdGlmaWNhdGlvbnNfdnVlX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fTm90aWZpY2F0aW9uc192dWVfX19kZWZhdWx0ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fTm90aWZpY2F0aW9uc192dWVfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19ldmVudHNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMSk7XG52YXIgX3R5cGVvZiA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiID8gZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfSA6IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07XG5cblxuXG5cbnZhciBOb3RpZnkgPSB7XG4gIGluc3RhbGw6IGZ1bmN0aW9uIGluc3RhbGwoVnVlKSB7XG4gICAgdmFyIGFyZ3MgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9O1xuXG4gICAgaWYgKHRoaXMuaW5zdGFsbGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5pbnN0YWxsZWQgPSB0cnVlO1xuICAgIHRoaXMucGFyYW1zID0gYXJncztcblxuICAgIFZ1ZS5jb21wb25lbnQoYXJncy5jb21wb25lbnROYW1lIHx8ICdub3RpZmljYXRpb25zJywgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19Ob3RpZmljYXRpb25zX3Z1ZV9fX2RlZmF1bHQuYSk7XG5cbiAgICB2YXIgbm90aWZ5ID0gZnVuY3Rpb24gbm90aWZ5KHBhcmFtcykge1xuICAgICAgaWYgKHR5cGVvZiBwYXJhbXMgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHBhcmFtcyA9IHsgdGl0bGU6ICcnLCB0ZXh0OiBwYXJhbXMgfTtcbiAgICAgIH1cblxuICAgICAgaWYgKCh0eXBlb2YgcGFyYW1zID09PSAndW5kZWZpbmVkJyA/ICd1bmRlZmluZWQnIDogX3R5cGVvZihwYXJhbXMpKSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19ldmVudHNfX1tcImFcIiAvKiBldmVudHMgKi9dLiRlbWl0KCdhZGQnLCBwYXJhbXMpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBub3RpZnkuY2xvc2UgPSBmdW5jdGlvbiAoaWQpIHtcbiAgICAgIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fZXZlbnRzX19bXCJhXCIgLyogZXZlbnRzICovXS4kZW1pdCgnY2xvc2UnLCBpZCk7XG4gICAgfTtcblxuICAgIHZhciBuYW1lID0gYXJncy5uYW1lIHx8ICdub3RpZnknO1xuXG4gICAgVnVlLnByb3RvdHlwZVsnJCcgKyBuYW1lXSA9IG5vdGlmeTtcbiAgICBWdWVbbmFtZV0gPSBub3RpZnk7XG4gIH1cbn07XG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImRlZmF1bHRcIl0gPSAoTm90aWZ5KTtcblxuLyoqKi8gfSksXG4vKiAzICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblxuLyogc3R5bGVzICovXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDE3KVxuXG52YXIgQ29tcG9uZW50ID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKShcbiAgLyogc2NyaXB0ICovXG4gIF9fd2VicGFja19yZXF1aXJlX18oNSksXG4gIC8qIHRlbXBsYXRlICovXG4gIF9fd2VicGFja19yZXF1aXJlX18oMTUpLFxuICAvKiBzY29wZUlkICovXG4gIG51bGwsXG4gIC8qIGNzc01vZHVsZXMgKi9cbiAgbnVsbFxuKVxuXG5tb2R1bGUuZXhwb3J0cyA9IENvbXBvbmVudC5leHBvcnRzXG5cblxuLyoqKi8gfSksXG4vKiA0ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KF9fd2VicGFja19leHBvcnRzX18sIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImRlZmF1bHRcIl0gPSAoe1xuICBuYW1lOiAnQ3NzR3JvdXAnLFxuICBwcm9wczogWyduYW1lJ11cbn0pO1xuXG4vKioqLyB9KSxcbi8qIDUgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19pbmRleF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2V2ZW50c19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX3V0aWxfXyA9IF9fd2VicGFja19yZXF1aXJlX18oOSk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19kZWZhdWx0c19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1ZlbG9jaXR5R3JvdXBfdnVlX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1ZlbG9jaXR5R3JvdXBfdnVlX19fZGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18ubihfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1ZlbG9jaXR5R3JvdXBfdnVlX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fQ3NzR3JvdXBfdnVlX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEyKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX0Nzc0dyb3VwX3Z1ZV9fX2RlZmF1bHQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLm4oX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19Dc3NHcm91cF92dWVfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19wYXJzZXJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oOCk7XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG5cblxuXG5cblxuXG5cblxudmFyIFNUQVRFID0ge1xuICBJRExFOiAwLFxuICBERVNUUk9ZRUQ6IDJcbn07XG5cbnZhciBDb21wb25lbnQgPSB7XG4gIG5hbWU6ICdOb3RpZmljYXRpb25zJyxcbiAgY29tcG9uZW50czoge1xuICAgIFZlbG9jaXR5R3JvdXA6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fVmVsb2NpdHlHcm91cF92dWVfX19kZWZhdWx0LmEsXG4gICAgQ3NzR3JvdXA6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fQ3NzR3JvdXBfdnVlX19fZGVmYXVsdC5hXG4gIH0sXG4gIHByb3BzOiB7XG4gICAgZ3JvdXA6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICcnXG4gICAgfSxcblxuICAgIHdpZHRoOiB7XG4gICAgICB0eXBlOiBbTnVtYmVyLCBTdHJpbmddLFxuICAgICAgZGVmYXVsdDogMzAwXG4gICAgfSxcblxuICAgIHJldmVyc2U6IHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0sXG5cbiAgICBwb3NpdGlvbjoge1xuICAgICAgdHlwZTogW1N0cmluZywgQXJyYXldLFxuICAgICAgZGVmYXVsdDogZnVuY3Rpb24gX2RlZmF1bHQoKSB7XG4gICAgICAgIHJldHVybiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX2RlZmF1bHRzX19bXCJhXCIgLyogZGVmYXVsdCAqL10ucG9zaXRpb247XG4gICAgICB9XG4gICAgfSxcblxuICAgIGNsYXNzZXM6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICd2dWUtbm90aWZpY2F0aW9uJ1xuICAgIH0sXG5cbiAgICBhbmltYXRpb25UeXBlOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnY3NzJyxcbiAgICAgIHZhbGlkYXRvcjogZnVuY3Rpb24gdmFsaWRhdG9yKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZSA9PT0gJ2NzcycgfHwgdmFsdWUgPT09ICd2ZWxvY2l0eSc7XG4gICAgICB9XG4gICAgfSxcblxuICAgIGFuaW1hdGlvbjoge1xuICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgZGVmYXVsdDogZnVuY3Rpb24gX2RlZmF1bHQoKSB7XG4gICAgICAgIHJldHVybiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX2RlZmF1bHRzX19bXCJhXCIgLyogZGVmYXVsdCAqL10udmVsb2NpdHlBbmltYXRpb247XG4gICAgICB9XG4gICAgfSxcblxuICAgIGFuaW1hdGlvbk5hbWU6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fZGVmYXVsdHNfX1tcImFcIiAvKiBkZWZhdWx0ICovXS5jc3NBbmltYXRpb25cbiAgICB9LFxuXG4gICAgc3BlZWQ6IHtcbiAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgIGRlZmF1bHQ6IDMwMFxuICAgIH0sXG5cbiAgICBjb29sZG93bjoge1xuICAgICAgdHlwZTogTnVtYmVyLFxuICAgICAgZGVmYXVsdDogMFxuICAgIH0sXG5cbiAgICBkdXJhdGlvbjoge1xuICAgICAgdHlwZTogTnVtYmVyLFxuICAgICAgZGVmYXVsdDogMzAwMFxuICAgIH0sXG5cbiAgICBkZWxheToge1xuICAgICAgdHlwZTogTnVtYmVyLFxuICAgICAgZGVmYXVsdDogMFxuICAgIH0sXG5cbiAgICBtYXg6IHtcbiAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgIGRlZmF1bHQ6IEluZmluaXR5XG4gICAgfSxcblxuICAgIGlnbm9yZUR1cGxpY2F0ZXM6IHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0sXG5cbiAgICBjbG9zZU9uQ2xpY2s6IHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiB0cnVlXG4gICAgfVxuICB9LFxuICBkYXRhOiBmdW5jdGlvbiBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBsaXN0OiBbXSxcbiAgICAgIHZlbG9jaXR5OiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2luZGV4X19bXCJkZWZhdWx0XCJdLnBhcmFtcy52ZWxvY2l0eVxuICAgIH07XG4gIH0sXG4gIG1vdW50ZWQ6IGZ1bmN0aW9uIG1vdW50ZWQoKSB7XG4gICAgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19ldmVudHNfX1tcImFcIiAvKiBldmVudHMgKi9dLiRvbignYWRkJywgdGhpcy5hZGRJdGVtKTtcbiAgICBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2V2ZW50c19fW1wiYVwiIC8qIGV2ZW50cyAqL10uJG9uKCdjbG9zZScsIHRoaXMuY2xvc2VJdGVtKTtcbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGFjdHVhbFdpZHRoOiBmdW5jdGlvbiBhY3R1YWxXaWR0aCgpIHtcbiAgICAgIHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fLmkoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19wYXJzZXJfX1tcImFcIiAvKiBkZWZhdWx0ICovXSkodGhpcy53aWR0aCk7XG4gICAgfSxcbiAgICBpc1ZBOiBmdW5jdGlvbiBpc1ZBKCkge1xuICAgICAgcmV0dXJuIHRoaXMuYW5pbWF0aW9uVHlwZSA9PT0gJ3ZlbG9jaXR5JztcbiAgICB9LFxuICAgIGNvbXBvbmVudE5hbWU6IGZ1bmN0aW9uIGNvbXBvbmVudE5hbWUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5pc1ZBID8gJ1ZlbG9jaXR5R3JvdXAnIDogJ0Nzc0dyb3VwJztcbiAgICB9LFxuICAgIHN0eWxlczogZnVuY3Rpb24gc3R5bGVzKCkge1xuICAgICAgdmFyIF9saXN0VG9EaXJlY3Rpb24gPSBfX3dlYnBhY2tfcmVxdWlyZV9fLmkoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX191dGlsX19bXCJhXCIgLyogbGlzdFRvRGlyZWN0aW9uICovXSkodGhpcy5wb3NpdGlvbiksXG4gICAgICAgICAgeCA9IF9saXN0VG9EaXJlY3Rpb24ueCxcbiAgICAgICAgICB5ID0gX2xpc3RUb0RpcmVjdGlvbi55O1xuXG4gICAgICB2YXIgd2lkdGggPSB0aGlzLmFjdHVhbFdpZHRoLnZhbHVlO1xuICAgICAgdmFyIHN1ZmZpeCA9IHRoaXMuYWN0dWFsV2lkdGgudHlwZTtcblxuICAgICAgdmFyIHN0eWxlcyA9IF9kZWZpbmVQcm9wZXJ0eSh7XG4gICAgICAgIHdpZHRoOiB3aWR0aCArIHN1ZmZpeFxuICAgICAgfSwgeSwgJzBweCcpO1xuXG4gICAgICBpZiAoeCA9PT0gJ2NlbnRlcicpIHtcbiAgICAgICAgc3R5bGVzWydsZWZ0J10gPSAnY2FsYyg1MCUgLSAnICsgd2lkdGggLyAyICsgc3VmZml4ICsgJyknO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3R5bGVzW3hdID0gJzBweCc7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBzdHlsZXM7XG4gICAgfSxcbiAgICBhY3RpdmU6IGZ1bmN0aW9uIGFjdGl2ZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmxpc3QuZmlsdGVyKGZ1bmN0aW9uICh2KSB7XG4gICAgICAgIHJldHVybiB2LnN0YXRlICE9PSBTVEFURS5ERVNUUk9ZRUQ7XG4gICAgICB9KTtcbiAgICB9LFxuICAgIGJvdFRvVG9wOiBmdW5jdGlvbiBib3RUb1RvcCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnN0eWxlcy5oYXNPd25Qcm9wZXJ0eSgnYm90dG9tJyk7XG4gICAgfVxuICB9LFxuICBtZXRob2RzOiB7XG4gICAgZGVzdHJveUlmTmVjZXNzYXJ5OiBmdW5jdGlvbiBkZXN0cm95SWZOZWNlc3NhcnkoaXRlbSkge1xuICAgICAgaWYgKHRoaXMuY2xvc2VPbkNsaWNrKSB7XG4gICAgICAgIHRoaXMuZGVzdHJveShpdGVtKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGFkZEl0ZW06IGZ1bmN0aW9uIGFkZEl0ZW0oZXZlbnQpIHtcbiAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICAgIGV2ZW50Lmdyb3VwID0gZXZlbnQuZ3JvdXAgfHwgJyc7XG5cbiAgICAgIGlmICh0aGlzLmdyb3VwICE9PSBldmVudC5ncm91cCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChldmVudC5jbGVhbiB8fCBldmVudC5jbGVhcikge1xuICAgICAgICB0aGlzLmRlc3Ryb3lBbGwoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB2YXIgZHVyYXRpb24gPSB0eXBlb2YgZXZlbnQuZHVyYXRpb24gPT09ICdudW1iZXInID8gZXZlbnQuZHVyYXRpb24gOiB0aGlzLmR1cmF0aW9uO1xuXG4gICAgICB2YXIgc3BlZWQgPSB0eXBlb2YgZXZlbnQuc3BlZWQgPT09ICdudW1iZXInID8gZXZlbnQuc3BlZWQgOiB0aGlzLnNwZWVkO1xuXG4gICAgICB2YXIgaWdub3JlRHVwbGljYXRlcyA9IHR5cGVvZiBldmVudC5pZ25vcmVEdXBsaWNhdGVzID09PSAnYm9vbGVhbicgPyBldmVudC5pZ25vcmVEdXBsaWNhdGVzIDogdGhpcy5pZ25vcmVEdXBsaWNhdGVzO1xuXG4gICAgICB2YXIgdGl0bGUgPSBldmVudC50aXRsZSxcbiAgICAgICAgICB0ZXh0ID0gZXZlbnQudGV4dCxcbiAgICAgICAgICB0eXBlID0gZXZlbnQudHlwZSxcbiAgICAgICAgICBkYXRhID0gZXZlbnQuZGF0YSxcbiAgICAgICAgICBpZCA9IGV2ZW50LmlkO1xuXG5cbiAgICAgIHZhciBpdGVtID0ge1xuICAgICAgICBpZDogaWQgfHwgX193ZWJwYWNrX3JlcXVpcmVfXy5pKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fdXRpbF9fW1wiYlwiIC8qIElkICovXSkoKSxcbiAgICAgICAgdGl0bGU6IHRpdGxlLFxuICAgICAgICB0ZXh0OiB0ZXh0LFxuICAgICAgICB0eXBlOiB0eXBlLFxuICAgICAgICBzdGF0ZTogU1RBVEUuSURMRSxcbiAgICAgICAgc3BlZWQ6IHNwZWVkLFxuICAgICAgICBsZW5ndGg6IGR1cmF0aW9uICsgMiAqIHNwZWVkLFxuICAgICAgICBkYXRhOiBkYXRhXG4gICAgICB9O1xuXG4gICAgICBpZiAoZHVyYXRpb24gPj0gMCkge1xuICAgICAgICBpdGVtLnRpbWVyID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgX3RoaXMuZGVzdHJveShpdGVtKTtcbiAgICAgICAgfSwgaXRlbS5sZW5ndGgpO1xuICAgICAgfVxuXG4gICAgICB2YXIgZGlyZWN0aW9uID0gdGhpcy5yZXZlcnNlID8gIXRoaXMuYm90VG9Ub3AgOiB0aGlzLmJvdFRvVG9wO1xuXG4gICAgICB2YXIgaW5kZXhUb0Rlc3Ryb3kgPSAtMTtcblxuICAgICAgdmFyIGlzRHVwbGljYXRlID0gdGhpcy5hY3RpdmUuc29tZShmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICByZXR1cm4gaXRlbS50aXRsZSA9PT0gZXZlbnQudGl0bGUgJiYgaXRlbS50ZXh0ID09PSBldmVudC50ZXh0O1xuICAgICAgfSk7XG5cbiAgICAgIHZhciBjYW5BZGQgPSBpZ25vcmVEdXBsaWNhdGVzID8gIWlzRHVwbGljYXRlIDogdHJ1ZTtcblxuICAgICAgaWYgKCFjYW5BZGQpIHJldHVybjtcblxuICAgICAgaWYgKGRpcmVjdGlvbikge1xuICAgICAgICB0aGlzLmxpc3QucHVzaChpdGVtKTtcblxuICAgICAgICBpZiAodGhpcy5hY3RpdmUubGVuZ3RoID4gdGhpcy5tYXgpIHtcbiAgICAgICAgICBpbmRleFRvRGVzdHJveSA9IDA7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMubGlzdC51bnNoaWZ0KGl0ZW0pO1xuXG4gICAgICAgIGlmICh0aGlzLmFjdGl2ZS5sZW5ndGggPiB0aGlzLm1heCkge1xuICAgICAgICAgIGluZGV4VG9EZXN0cm95ID0gdGhpcy5hY3RpdmUubGVuZ3RoIC0gMTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoaW5kZXhUb0Rlc3Ryb3kgIT09IC0xKSB7XG4gICAgICAgIHRoaXMuZGVzdHJveSh0aGlzLmFjdGl2ZVtpbmRleFRvRGVzdHJveV0pO1xuICAgICAgfVxuICAgIH0sXG4gICAgY2xvc2VJdGVtOiBmdW5jdGlvbiBjbG9zZUl0ZW0oaWQpIHtcbiAgICAgIHRoaXMuZGVzdHJveUJ5SWQoaWQpO1xuICAgIH0sXG4gICAgbm90aWZ5Q2xhc3M6IGZ1bmN0aW9uIG5vdGlmeUNsYXNzKGl0ZW0pIHtcbiAgICAgIHJldHVybiBbJ3Z1ZS1ub3RpZmljYXRpb24tdGVtcGxhdGUnLCB0aGlzLmNsYXNzZXMsIGl0ZW0udHlwZV07XG4gICAgfSxcbiAgICBub3RpZnlXcmFwcGVyU3R5bGU6IGZ1bmN0aW9uIG5vdGlmeVdyYXBwZXJTdHlsZShpdGVtKSB7XG4gICAgICByZXR1cm4gdGhpcy5pc1ZBID8gbnVsbCA6IHsgdHJhbnNpdGlvbjogJ2FsbCAnICsgaXRlbS5zcGVlZCArICdtcycgfTtcbiAgICB9LFxuICAgIGRlc3Ryb3k6IGZ1bmN0aW9uIGRlc3Ryb3koaXRlbSkge1xuICAgICAgY2xlYXJUaW1lb3V0KGl0ZW0udGltZXIpO1xuICAgICAgaXRlbS5zdGF0ZSA9IFNUQVRFLkRFU1RST1lFRDtcblxuICAgICAgaWYgKCF0aGlzLmlzVkEpIHtcbiAgICAgICAgdGhpcy5jbGVhbigpO1xuICAgICAgfVxuICAgIH0sXG4gICAgZGVzdHJveUJ5SWQ6IGZ1bmN0aW9uIGRlc3Ryb3lCeUlkKGlkKSB7XG4gICAgICB2YXIgaXRlbSA9IHRoaXMubGlzdC5maW5kKGZ1bmN0aW9uICh2KSB7XG4gICAgICAgIHJldHVybiB2LmlkID09PSBpZDtcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoaXRlbSkge1xuICAgICAgICB0aGlzLmRlc3Ryb3koaXRlbSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBkZXN0cm95QWxsOiBmdW5jdGlvbiBkZXN0cm95QWxsKCkge1xuICAgICAgdGhpcy5hY3RpdmUuZm9yRWFjaCh0aGlzLmRlc3Ryb3kpO1xuICAgIH0sXG4gICAgZ2V0QW5pbWF0aW9uOiBmdW5jdGlvbiBnZXRBbmltYXRpb24oaW5kZXgsIGVsKSB7XG4gICAgICB2YXIgYW5pbWF0aW9uID0gdGhpcy5hbmltYXRpb25baW5kZXhdO1xuXG4gICAgICByZXR1cm4gdHlwZW9mIGFuaW1hdGlvbiA9PT0gJ2Z1bmN0aW9uJyA/IGFuaW1hdGlvbi5jYWxsKHRoaXMsIGVsKSA6IGFuaW1hdGlvbjtcbiAgICB9LFxuICAgIGVudGVyOiBmdW5jdGlvbiBlbnRlcihfcmVmKSB7XG4gICAgICB2YXIgZWwgPSBfcmVmLmVsLFxuICAgICAgICAgIGNvbXBsZXRlID0gX3JlZi5jb21wbGV0ZTtcblxuICAgICAgdmFyIGFuaW1hdGlvbiA9IHRoaXMuZ2V0QW5pbWF0aW9uKCdlbnRlcicsIGVsKTtcblxuICAgICAgdGhpcy52ZWxvY2l0eShlbCwgYW5pbWF0aW9uLCB7XG4gICAgICAgIGR1cmF0aW9uOiB0aGlzLnNwZWVkLFxuICAgICAgICBjb21wbGV0ZTogY29tcGxldGVcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgbGVhdmU6IGZ1bmN0aW9uIGxlYXZlKF9yZWYyKSB7XG4gICAgICB2YXIgZWwgPSBfcmVmMi5lbCxcbiAgICAgICAgICBjb21wbGV0ZSA9IF9yZWYyLmNvbXBsZXRlO1xuXG4gICAgICB2YXIgYW5pbWF0aW9uID0gdGhpcy5nZXRBbmltYXRpb24oJ2xlYXZlJywgZWwpO1xuXG4gICAgICB0aGlzLnZlbG9jaXR5KGVsLCBhbmltYXRpb24sIHtcbiAgICAgICAgZHVyYXRpb246IHRoaXMuc3BlZWQsXG4gICAgICAgIGNvbXBsZXRlOiBjb21wbGV0ZVxuICAgICAgfSk7XG4gICAgfSxcbiAgICBjbGVhbjogZnVuY3Rpb24gY2xlYW4oKSB7XG4gICAgICB0aGlzLmxpc3QgPSB0aGlzLmxpc3QuZmlsdGVyKGZ1bmN0aW9uICh2KSB7XG4gICAgICAgIHJldHVybiB2LnN0YXRlICE9PSBTVEFURS5ERVNUUk9ZRUQ7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn07XG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImRlZmF1bHRcIl0gPSAoQ29tcG9uZW50KTtcblxuLyoqKi8gfSksXG4vKiA2ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KF9fd2VicGFja19leHBvcnRzX18sIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImRlZmF1bHRcIl0gPSAoe1xuICBuYW1lOiAnVmVsb2NpdHlHcm91cCcsXG4gIG1ldGhvZHM6IHtcbiAgICBlbnRlcjogZnVuY3Rpb24gZW50ZXIoZWwsIGNvbXBsZXRlKSB7XG4gICAgICB0aGlzLiRlbWl0KCdlbnRlcicsIHsgZWw6IGVsLCBjb21wbGV0ZTogY29tcGxldGUgfSk7XG4gICAgfSxcbiAgICBsZWF2ZTogZnVuY3Rpb24gbGVhdmUoZWwsIGNvbXBsZXRlKSB7XG4gICAgICB0aGlzLiRlbWl0KCdsZWF2ZScsIHsgZWw6IGVsLCBjb21wbGV0ZTogY29tcGxldGUgfSk7XG4gICAgfSxcbiAgICBhZnRlckxlYXZlOiBmdW5jdGlvbiBhZnRlckxlYXZlKCkge1xuICAgICAgdGhpcy4kZW1pdCgnYWZ0ZXJMZWF2ZScpO1xuICAgIH1cbiAgfVxufSk7XG5cbi8qKiovIH0pLFxuLyogNyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImFcIl0gPSAoe1xuICBwb3NpdGlvbjogWyd0b3AnLCAncmlnaHQnXSxcbiAgY3NzQW5pbWF0aW9uOiAndm4tZmFkZScsXG4gIHZlbG9jaXR5QW5pbWF0aW9uOiB7XG4gICAgZW50ZXI6IGZ1bmN0aW9uIGVudGVyKGVsKSB7XG4gICAgICB2YXIgaGVpZ2h0ID0gZWwuY2xpZW50SGVpZ2h0O1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBoZWlnaHQ6IFtoZWlnaHQsIDBdLFxuICAgICAgICBvcGFjaXR5OiBbMSwgMF1cbiAgICAgIH07XG4gICAgfSxcbiAgICBsZWF2ZToge1xuICAgICAgaGVpZ2h0OiAwLFxuICAgICAgb3BhY2l0eTogWzAsIDFdXG4gICAgfVxuICB9XG59KTtcblxuLyoqKi8gfSksXG4vKiA4ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLyogdW51c2VkIGhhcm1vbnkgZXhwb3J0IHBhcnNlICovXG52YXIgX3R5cGVvZiA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiID8gZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfSA6IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07XG5cbnZhciBmbG9hdFJlZ2V4cCA9ICdbLStdP1swLTldKi4/WzAtOV0rJztcblxudmFyIHR5cGVzID0gW3tcbiAgbmFtZTogJ3B4JyxcbiAgcmVnZXhwOiBuZXcgUmVnRXhwKCdeJyArIGZsb2F0UmVnZXhwICsgJ3B4JCcpXG59LCB7XG4gIG5hbWU6ICclJyxcbiAgcmVnZXhwOiBuZXcgUmVnRXhwKCdeJyArIGZsb2F0UmVnZXhwICsgJyUkJylcbn0sIHtcbiAgbmFtZTogJ3B4JyxcbiAgcmVnZXhwOiBuZXcgUmVnRXhwKCdeJyArIGZsb2F0UmVnZXhwICsgJyQnKVxufV07XG5cbnZhciBnZXRUeXBlID0gZnVuY3Rpb24gZ2V0VHlwZSh2YWx1ZSkge1xuICBpZiAodmFsdWUgPT09ICdhdXRvJykge1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiB2YWx1ZSxcbiAgICAgIHZhbHVlOiAwXG4gICAgfTtcbiAgfVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdHlwZXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgdHlwZSA9IHR5cGVzW2ldO1xuICAgIGlmICh0eXBlLnJlZ2V4cC50ZXN0KHZhbHVlKSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogdHlwZS5uYW1lLFxuICAgICAgICB2YWx1ZTogcGFyc2VGbG9hdCh2YWx1ZSlcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB0eXBlOiAnJyxcbiAgICB2YWx1ZTogdmFsdWVcbiAgfTtcbn07XG5cbnZhciBwYXJzZSA9IGZ1bmN0aW9uIHBhcnNlKHZhbHVlKSB7XG4gIHN3aXRjaCAodHlwZW9mIHZhbHVlID09PSAndW5kZWZpbmVkJyA/ICd1bmRlZmluZWQnIDogX3R5cGVvZih2YWx1ZSkpIHtcbiAgICBjYXNlICdudW1iZXInOlxuICAgICAgcmV0dXJuIHsgdHlwZTogJ3B4JywgdmFsdWU6IHZhbHVlIH07XG4gICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgIHJldHVybiBnZXRUeXBlKHZhbHVlKTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIHsgdHlwZTogJycsIHZhbHVlOiB2YWx1ZSB9O1xuICB9XG59O1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJhXCJdID0gKHBhcnNlKTtcblxuLyoqKi8gfSksXG4vKiA5ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImJcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBJZDsgfSk7XG4vKiB1bnVzZWQgaGFybW9ueSBleHBvcnQgc3BsaXQgKi9cbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJhXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gbGlzdFRvRGlyZWN0aW9uOyB9KTtcbnZhciBkaXJlY3Rpb25zID0ge1xuICB4OiBbJ2xlZnQnLCAnY2VudGVyJywgJ3JpZ2h0J10sXG4gIHk6IFsndG9wJywgJ2JvdHRvbSddXG59O1xuXG52YXIgSWQgPSBmdW5jdGlvbiAoaSkge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBpKys7XG4gIH07XG59KDApO1xuXG52YXIgc3BsaXQgPSBmdW5jdGlvbiBzcGxpdCh2YWx1ZSkge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIHJldHVybiB2YWx1ZS5zcGxpdCgvXFxzKy9naSkuZmlsdGVyKGZ1bmN0aW9uICh2KSB7XG4gICAgcmV0dXJuIHY7XG4gIH0pO1xufTtcblxudmFyIGxpc3RUb0RpcmVjdGlvbiA9IGZ1bmN0aW9uIGxpc3RUb0RpcmVjdGlvbih2YWx1ZSkge1xuICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgIHZhbHVlID0gc3BsaXQodmFsdWUpO1xuICB9XG5cbiAgdmFyIHggPSBudWxsO1xuICB2YXIgeSA9IG51bGw7XG5cbiAgdmFsdWUuZm9yRWFjaChmdW5jdGlvbiAodikge1xuICAgIGlmIChkaXJlY3Rpb25zLnkuaW5kZXhPZih2KSAhPT0gLTEpIHtcbiAgICAgIHkgPSB2O1xuICAgIH1cbiAgICBpZiAoZGlyZWN0aW9ucy54LmluZGV4T2YodikgIT09IC0xKSB7XG4gICAgICB4ID0gdjtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiB7IHg6IHgsIHk6IHkgfTtcbn07XG5cbi8qKiovIH0pLFxuLyogMTAgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMSkoKTtcbi8vIGltcG9ydHNcblxuXG4vLyBtb2R1bGVcbmV4cG9ydHMucHVzaChbbW9kdWxlLmksIFwiLnZ1ZS1ub3RpZmljYXRpb24tZ3JvdXB7ZGlzcGxheTpibG9jaztwb3NpdGlvbjpmaXhlZDt6LWluZGV4OjUwMDB9LnZ1ZS1ub3RpZmljYXRpb24td3JhcHBlcntkaXNwbGF5OmJsb2NrO292ZXJmbG93OmhpZGRlbjt3aWR0aDoxMDAlO21hcmdpbjowO3BhZGRpbmc6MH0ubm90aWZpY2F0aW9uLXRpdGxle2ZvbnQtd2VpZ2h0OjYwMH0udnVlLW5vdGlmaWNhdGlvbi10ZW1wbGF0ZXtiYWNrZ3JvdW5kOiNmZmZ9LnZ1ZS1ub3RpZmljYXRpb24sLnZ1ZS1ub3RpZmljYXRpb24tdGVtcGxhdGV7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3g7dGV4dC1hbGlnbjpsZWZ0fS52dWUtbm90aWZpY2F0aW9ue2ZvbnQtc2l6ZToxMnB4O3BhZGRpbmc6MTBweDttYXJnaW46MCA1cHggNXB4O2NvbG9yOiNmZmY7YmFja2dyb3VuZDojNDRhNGZjO2JvcmRlci1sZWZ0OjVweCBzb2xpZCAjMTg3ZmU3fS52dWUtbm90aWZpY2F0aW9uLndhcm57YmFja2dyb3VuZDojZmZiNjQ4O2JvcmRlci1sZWZ0LWNvbG9yOiNmNDhhMDZ9LnZ1ZS1ub3RpZmljYXRpb24uZXJyb3J7YmFja2dyb3VuZDojZTU0ZDQyO2JvcmRlci1sZWZ0LWNvbG9yOiNiODJlMjR9LnZ1ZS1ub3RpZmljYXRpb24uc3VjY2Vzc3tiYWNrZ3JvdW5kOiM2OGNkODY7Ym9yZGVyLWxlZnQtY29sb3I6IzQyYTg1Zn0udm4tZmFkZS1lbnRlci1hY3RpdmUsLnZuLWZhZGUtbGVhdmUtYWN0aXZlLC52bi1mYWRlLW1vdmV7dHJhbnNpdGlvbjphbGwgLjVzfS52bi1mYWRlLWVudGVyLC52bi1mYWRlLWxlYXZlLXRve29wYWNpdHk6MH1cIiwgXCJcIl0pO1xuXG4vLyBleHBvcnRzXG5cblxuLyoqKi8gfSksXG4vKiAxMSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG4vKlxyXG5cdE1JVCBMaWNlbnNlIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2UucGhwXHJcblx0QXV0aG9yIFRvYmlhcyBLb3BwZXJzIEBzb2tyYVxyXG4qL1xyXG4vLyBjc3MgYmFzZSBjb2RlLCBpbmplY3RlZCBieSB0aGUgY3NzLWxvYWRlclxyXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKCkge1xyXG5cdHZhciBsaXN0ID0gW107XHJcblxyXG5cdC8vIHJldHVybiB0aGUgbGlzdCBvZiBtb2R1bGVzIGFzIGNzcyBzdHJpbmdcclxuXHRsaXN0LnRvU3RyaW5nID0gZnVuY3Rpb24gdG9TdHJpbmcoKSB7XHJcblx0XHR2YXIgcmVzdWx0ID0gW107XHJcblx0XHRmb3IodmFyIGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHR2YXIgaXRlbSA9IHRoaXNbaV07XHJcblx0XHRcdGlmKGl0ZW1bMl0pIHtcclxuXHRcdFx0XHRyZXN1bHQucHVzaChcIkBtZWRpYSBcIiArIGl0ZW1bMl0gKyBcIntcIiArIGl0ZW1bMV0gKyBcIn1cIik7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0cmVzdWx0LnB1c2goaXRlbVsxXSk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdHJldHVybiByZXN1bHQuam9pbihcIlwiKTtcclxuXHR9O1xyXG5cclxuXHQvLyBpbXBvcnQgYSBsaXN0IG9mIG1vZHVsZXMgaW50byB0aGUgbGlzdFxyXG5cdGxpc3QuaSA9IGZ1bmN0aW9uKG1vZHVsZXMsIG1lZGlhUXVlcnkpIHtcclxuXHRcdGlmKHR5cGVvZiBtb2R1bGVzID09PSBcInN0cmluZ1wiKVxyXG5cdFx0XHRtb2R1bGVzID0gW1tudWxsLCBtb2R1bGVzLCBcIlwiXV07XHJcblx0XHR2YXIgYWxyZWFkeUltcG9ydGVkTW9kdWxlcyA9IHt9O1xyXG5cdFx0Zm9yKHZhciBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0dmFyIGlkID0gdGhpc1tpXVswXTtcclxuXHRcdFx0aWYodHlwZW9mIGlkID09PSBcIm51bWJlclwiKVxyXG5cdFx0XHRcdGFscmVhZHlJbXBvcnRlZE1vZHVsZXNbaWRdID0gdHJ1ZTtcclxuXHRcdH1cclxuXHRcdGZvcihpID0gMDsgaSA8IG1vZHVsZXMubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0dmFyIGl0ZW0gPSBtb2R1bGVzW2ldO1xyXG5cdFx0XHQvLyBza2lwIGFscmVhZHkgaW1wb3J0ZWQgbW9kdWxlXHJcblx0XHRcdC8vIHRoaXMgaW1wbGVtZW50YXRpb24gaXMgbm90IDEwMCUgcGVyZmVjdCBmb3Igd2VpcmQgbWVkaWEgcXVlcnkgY29tYmluYXRpb25zXHJcblx0XHRcdC8vICB3aGVuIGEgbW9kdWxlIGlzIGltcG9ydGVkIG11bHRpcGxlIHRpbWVzIHdpdGggZGlmZmVyZW50IG1lZGlhIHF1ZXJpZXMuXHJcblx0XHRcdC8vICBJIGhvcGUgdGhpcyB3aWxsIG5ldmVyIG9jY3VyIChIZXkgdGhpcyB3YXkgd2UgaGF2ZSBzbWFsbGVyIGJ1bmRsZXMpXHJcblx0XHRcdGlmKHR5cGVvZiBpdGVtWzBdICE9PSBcIm51bWJlclwiIHx8ICFhbHJlYWR5SW1wb3J0ZWRNb2R1bGVzW2l0ZW1bMF1dKSB7XHJcblx0XHRcdFx0aWYobWVkaWFRdWVyeSAmJiAhaXRlbVsyXSkge1xyXG5cdFx0XHRcdFx0aXRlbVsyXSA9IG1lZGlhUXVlcnk7XHJcblx0XHRcdFx0fSBlbHNlIGlmKG1lZGlhUXVlcnkpIHtcclxuXHRcdFx0XHRcdGl0ZW1bMl0gPSBcIihcIiArIGl0ZW1bMl0gKyBcIikgYW5kIChcIiArIG1lZGlhUXVlcnkgKyBcIilcIjtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0bGlzdC5wdXNoKGl0ZW0pO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fTtcclxuXHRyZXR1cm4gbGlzdDtcclxufTtcclxuXG5cbi8qKiovIH0pLFxuLyogMTIgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyIENvbXBvbmVudCA9IF9fd2VicGFja19yZXF1aXJlX18oMCkoXG4gIC8qIHNjcmlwdCAqL1xuICBfX3dlYnBhY2tfcmVxdWlyZV9fKDQpLFxuICAvKiB0ZW1wbGF0ZSAqL1xuICBfX3dlYnBhY2tfcmVxdWlyZV9fKDE2KSxcbiAgLyogc2NvcGVJZCAqL1xuICBudWxsLFxuICAvKiBjc3NNb2R1bGVzICovXG4gIG51bGxcbilcblxubW9kdWxlLmV4cG9ydHMgPSBDb21wb25lbnQuZXhwb3J0c1xuXG5cbi8qKiovIH0pLFxuLyogMTMgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyIENvbXBvbmVudCA9IF9fd2VicGFja19yZXF1aXJlX18oMCkoXG4gIC8qIHNjcmlwdCAqL1xuICBfX3dlYnBhY2tfcmVxdWlyZV9fKDYpLFxuICAvKiB0ZW1wbGF0ZSAqL1xuICBfX3dlYnBhY2tfcmVxdWlyZV9fKDE0KSxcbiAgLyogc2NvcGVJZCAqL1xuICBudWxsLFxuICAvKiBjc3NNb2R1bGVzICovXG4gIG51bGxcbilcblxubW9kdWxlLmV4cG9ydHMgPSBDb21wb25lbnQuZXhwb3J0c1xuXG5cbi8qKiovIH0pLFxuLyogMTQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHM9e3JlbmRlcjpmdW5jdGlvbiAoKXt2YXIgX3ZtPXRoaXM7dmFyIF9oPV92bS4kY3JlYXRlRWxlbWVudDt2YXIgX2M9X3ZtLl9zZWxmLl9jfHxfaDtcbiAgcmV0dXJuIF9jKCd0cmFuc2l0aW9uLWdyb3VwJywge1xuICAgIGF0dHJzOiB7XG4gICAgICBcImNzc1wiOiBmYWxzZVxuICAgIH0sXG4gICAgb246IHtcbiAgICAgIFwiZW50ZXJcIjogX3ZtLmVudGVyLFxuICAgICAgXCJsZWF2ZVwiOiBfdm0ubGVhdmUsXG4gICAgICBcImFmdGVyLWxlYXZlXCI6IF92bS5hZnRlckxlYXZlXG4gICAgfVxuICB9LCBbX3ZtLl90KFwiZGVmYXVsdFwiKV0sIDIpXG59LHN0YXRpY1JlbmRlckZuczogW119XG5cbi8qKiovIH0pLFxuLyogMTUgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHM9e3JlbmRlcjpmdW5jdGlvbiAoKXt2YXIgX3ZtPXRoaXM7dmFyIF9oPV92bS4kY3JlYXRlRWxlbWVudDt2YXIgX2M9X3ZtLl9zZWxmLl9jfHxfaDtcbiAgcmV0dXJuIF9jKCdkaXYnLCB7XG4gICAgc3RhdGljQ2xhc3M6IFwidnVlLW5vdGlmaWNhdGlvbi1ncm91cFwiLFxuICAgIHN0eWxlOiAoX3ZtLnN0eWxlcylcbiAgfSwgW19jKF92bS5jb21wb25lbnROYW1lLCB7XG4gICAgdGFnOiBcImNvbXBvbmVudFwiLFxuICAgIGF0dHJzOiB7XG4gICAgICBcIm5hbWVcIjogX3ZtLmFuaW1hdGlvbk5hbWVcbiAgICB9LFxuICAgIG9uOiB7XG4gICAgICBcImVudGVyXCI6IF92bS5lbnRlcixcbiAgICAgIFwibGVhdmVcIjogX3ZtLmxlYXZlLFxuICAgICAgXCJhZnRlci1sZWF2ZVwiOiBfdm0uY2xlYW5cbiAgICB9XG4gIH0sIF92bS5fbCgoX3ZtLmFjdGl2ZSksIGZ1bmN0aW9uKGl0ZW0pIHtcbiAgICByZXR1cm4gX2MoJ2RpdicsIHtcbiAgICAgIGtleTogaXRlbS5pZCxcbiAgICAgIHN0YXRpY0NsYXNzOiBcInZ1ZS1ub3RpZmljYXRpb24td3JhcHBlclwiLFxuICAgICAgc3R5bGU6IChfdm0ubm90aWZ5V3JhcHBlclN0eWxlKGl0ZW0pKSxcbiAgICAgIGF0dHJzOiB7XG4gICAgICAgIFwiZGF0YS1pZFwiOiBpdGVtLmlkXG4gICAgICB9XG4gICAgfSwgW192bS5fdChcImJvZHlcIiwgW19jKCdkaXYnLCB7XG4gICAgICBjbGFzczogX3ZtLm5vdGlmeUNsYXNzKGl0ZW0pLFxuICAgICAgb246IHtcbiAgICAgICAgXCJjbGlja1wiOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICByZXR1cm4gX3ZtLmRlc3Ryb3lJZk5lY2Vzc2FyeShpdGVtKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSwgWyhpdGVtLnRpdGxlKSA/IF9jKCdkaXYnLCB7XG4gICAgICBzdGF0aWNDbGFzczogXCJub3RpZmljYXRpb24tdGl0bGVcIixcbiAgICAgIGRvbVByb3BzOiB7XG4gICAgICAgIFwiaW5uZXJIVE1MXCI6IF92bS5fcyhpdGVtLnRpdGxlKVxuICAgICAgfVxuICAgIH0pIDogX3ZtLl9lKCksIF92bS5fdihcIiBcIiksIF9jKCdkaXYnLCB7XG4gICAgICBzdGF0aWNDbGFzczogXCJub3RpZmljYXRpb24tY29udGVudFwiLFxuICAgICAgZG9tUHJvcHM6IHtcbiAgICAgICAgXCJpbm5lckhUTUxcIjogX3ZtLl9zKGl0ZW0udGV4dClcbiAgICAgIH1cbiAgICB9KV0pXSwge1xuICAgICAgXCJpdGVtXCI6IGl0ZW0sXG4gICAgICBcImNsb3NlXCI6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIF92bS5kZXN0cm95KGl0ZW0pOyB9XG4gICAgfSldLCAyKVxuICB9KSwgMCldLCAxKVxufSxzdGF0aWNSZW5kZXJGbnM6IFtdfVxuXG4vKioqLyB9KSxcbi8qIDE2ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzPXtyZW5kZXI6ZnVuY3Rpb24gKCl7dmFyIF92bT10aGlzO3ZhciBfaD1fdm0uJGNyZWF0ZUVsZW1lbnQ7dmFyIF9jPV92bS5fc2VsZi5fY3x8X2g7XG4gIHJldHVybiBfYygndHJhbnNpdGlvbi1ncm91cCcsIHtcbiAgICBhdHRyczoge1xuICAgICAgXCJuYW1lXCI6IF92bS5uYW1lXG4gICAgfVxuICB9LCBbX3ZtLl90KFwiZGVmYXVsdFwiKV0sIDIpXG59LHN0YXRpY1JlbmRlckZuczogW119XG5cbi8qKiovIH0pLFxuLyogMTcgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuLy8gc3R5bGUtbG9hZGVyOiBBZGRzIHNvbWUgY3NzIHRvIHRoZSBET00gYnkgYWRkaW5nIGEgPHN0eWxlPiB0YWdcblxuLy8gbG9hZCB0aGUgc3R5bGVzXG52YXIgY29udGVudCA9IF9fd2VicGFja19yZXF1aXJlX18oMTApO1xuaWYodHlwZW9mIGNvbnRlbnQgPT09ICdzdHJpbmcnKSBjb250ZW50ID0gW1ttb2R1bGUuaSwgY29udGVudCwgJyddXTtcbmlmKGNvbnRlbnQubG9jYWxzKSBtb2R1bGUuZXhwb3J0cyA9IGNvbnRlbnQubG9jYWxzO1xuLy8gYWRkIHRoZSBzdHlsZXMgdG8gdGhlIERPTVxudmFyIHVwZGF0ZSA9IF9fd2VicGFja19yZXF1aXJlX18oMTgpKFwiMjkwMWFlYWVcIiwgY29udGVudCwgdHJ1ZSk7XG5cbi8qKiovIH0pLFxuLyogMTggKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuLypcbiAgTUlUIExpY2Vuc2UgaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9taXQtbGljZW5zZS5waHBcbiAgQXV0aG9yIFRvYmlhcyBLb3BwZXJzIEBzb2tyYVxuICBNb2RpZmllZCBieSBFdmFuIFlvdSBAeXl4OTkwODAzXG4qL1xuXG52YXIgaGFzRG9jdW1lbnQgPSB0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnXG5cbmlmICh0eXBlb2YgREVCVUcgIT09ICd1bmRlZmluZWQnICYmIERFQlVHKSB7XG4gIGlmICghaGFzRG9jdW1lbnQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgJ3Z1ZS1zdHlsZS1sb2FkZXIgY2Fubm90IGJlIHVzZWQgaW4gYSBub24tYnJvd3NlciBlbnZpcm9ubWVudC4gJyArXG4gICAgXCJVc2UgeyB0YXJnZXQ6ICdub2RlJyB9IGluIHlvdXIgV2VicGFjayBjb25maWcgdG8gaW5kaWNhdGUgYSBzZXJ2ZXItcmVuZGVyaW5nIGVudmlyb25tZW50LlwiXG4gICkgfVxufVxuXG52YXIgbGlzdFRvU3R5bGVzID0gX193ZWJwYWNrX3JlcXVpcmVfXygxOSlcblxuLypcbnR5cGUgU3R5bGVPYmplY3QgPSB7XG4gIGlkOiBudW1iZXI7XG4gIHBhcnRzOiBBcnJheTxTdHlsZU9iamVjdFBhcnQ+XG59XG5cbnR5cGUgU3R5bGVPYmplY3RQYXJ0ID0ge1xuICBjc3M6IHN0cmluZztcbiAgbWVkaWE6IHN0cmluZztcbiAgc291cmNlTWFwOiA/c3RyaW5nXG59XG4qL1xuXG52YXIgc3R5bGVzSW5Eb20gPSB7LypcbiAgW2lkOiBudW1iZXJdOiB7XG4gICAgaWQ6IG51bWJlcixcbiAgICByZWZzOiBudW1iZXIsXG4gICAgcGFydHM6IEFycmF5PChvYmo/OiBTdHlsZU9iamVjdFBhcnQpID0+IHZvaWQ+XG4gIH1cbiovfVxuXG52YXIgaGVhZCA9IGhhc0RvY3VtZW50ICYmIChkb2N1bWVudC5oZWFkIHx8IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoZWFkJylbMF0pXG52YXIgc2luZ2xldG9uRWxlbWVudCA9IG51bGxcbnZhciBzaW5nbGV0b25Db3VudGVyID0gMFxudmFyIGlzUHJvZHVjdGlvbiA9IGZhbHNlXG52YXIgbm9vcCA9IGZ1bmN0aW9uICgpIHt9XG5cbi8vIEZvcmNlIHNpbmdsZS10YWcgc29sdXRpb24gb24gSUU2LTksIHdoaWNoIGhhcyBhIGhhcmQgbGltaXQgb24gdGhlICMgb2YgPHN0eWxlPlxuLy8gdGFncyBpdCB3aWxsIGFsbG93IG9uIGEgcGFnZVxudmFyIGlzT2xkSUUgPSB0eXBlb2YgbmF2aWdhdG9yICE9PSAndW5kZWZpbmVkJyAmJiAvbXNpZSBbNi05XVxcYi8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCkpXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHBhcmVudElkLCBsaXN0LCBfaXNQcm9kdWN0aW9uKSB7XG4gIGlzUHJvZHVjdGlvbiA9IF9pc1Byb2R1Y3Rpb25cblxuICB2YXIgc3R5bGVzID0gbGlzdFRvU3R5bGVzKHBhcmVudElkLCBsaXN0KVxuICBhZGRTdHlsZXNUb0RvbShzdHlsZXMpXG5cbiAgcmV0dXJuIGZ1bmN0aW9uIHVwZGF0ZSAobmV3TGlzdCkge1xuICAgIHZhciBtYXlSZW1vdmUgPSBbXVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3R5bGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgaXRlbSA9IHN0eWxlc1tpXVxuICAgICAgdmFyIGRvbVN0eWxlID0gc3R5bGVzSW5Eb21baXRlbS5pZF1cbiAgICAgIGRvbVN0eWxlLnJlZnMtLVxuICAgICAgbWF5UmVtb3ZlLnB1c2goZG9tU3R5bGUpXG4gICAgfVxuICAgIGlmIChuZXdMaXN0KSB7XG4gICAgICBzdHlsZXMgPSBsaXN0VG9TdHlsZXMocGFyZW50SWQsIG5ld0xpc3QpXG4gICAgICBhZGRTdHlsZXNUb0RvbShzdHlsZXMpXG4gICAgfSBlbHNlIHtcbiAgICAgIHN0eWxlcyA9IFtdXG4gICAgfVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWF5UmVtb3ZlLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgZG9tU3R5bGUgPSBtYXlSZW1vdmVbaV1cbiAgICAgIGlmIChkb21TdHlsZS5yZWZzID09PSAwKSB7XG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgZG9tU3R5bGUucGFydHMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICBkb21TdHlsZS5wYXJ0c1tqXSgpXG4gICAgICAgIH1cbiAgICAgICAgZGVsZXRlIHN0eWxlc0luRG9tW2RvbVN0eWxlLmlkXVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBhZGRTdHlsZXNUb0RvbSAoc3R5bGVzIC8qIEFycmF5PFN0eWxlT2JqZWN0PiAqLykge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHN0eWxlcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBpdGVtID0gc3R5bGVzW2ldXG4gICAgdmFyIGRvbVN0eWxlID0gc3R5bGVzSW5Eb21baXRlbS5pZF1cbiAgICBpZiAoZG9tU3R5bGUpIHtcbiAgICAgIGRvbVN0eWxlLnJlZnMrK1xuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBkb21TdHlsZS5wYXJ0cy5sZW5ndGg7IGorKykge1xuICAgICAgICBkb21TdHlsZS5wYXJ0c1tqXShpdGVtLnBhcnRzW2pdKVxuICAgICAgfVxuICAgICAgZm9yICg7IGogPCBpdGVtLnBhcnRzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIGRvbVN0eWxlLnBhcnRzLnB1c2goYWRkU3R5bGUoaXRlbS5wYXJ0c1tqXSkpXG4gICAgICB9XG4gICAgICBpZiAoZG9tU3R5bGUucGFydHMubGVuZ3RoID4gaXRlbS5wYXJ0cy5sZW5ndGgpIHtcbiAgICAgICAgZG9tU3R5bGUucGFydHMubGVuZ3RoID0gaXRlbS5wYXJ0cy5sZW5ndGhcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIHBhcnRzID0gW11cbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgaXRlbS5wYXJ0cy5sZW5ndGg7IGorKykge1xuICAgICAgICBwYXJ0cy5wdXNoKGFkZFN0eWxlKGl0ZW0ucGFydHNbal0pKVxuICAgICAgfVxuICAgICAgc3R5bGVzSW5Eb21baXRlbS5pZF0gPSB7IGlkOiBpdGVtLmlkLCByZWZzOiAxLCBwYXJ0czogcGFydHMgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVTdHlsZUVsZW1lbnQgKCkge1xuICB2YXIgc3R5bGVFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKVxuICBzdHlsZUVsZW1lbnQudHlwZSA9ICd0ZXh0L2NzcydcbiAgaGVhZC5hcHBlbmRDaGlsZChzdHlsZUVsZW1lbnQpXG4gIHJldHVybiBzdHlsZUVsZW1lbnRcbn1cblxuZnVuY3Rpb24gYWRkU3R5bGUgKG9iaiAvKiBTdHlsZU9iamVjdFBhcnQgKi8pIHtcbiAgdmFyIHVwZGF0ZSwgcmVtb3ZlXG4gIHZhciBzdHlsZUVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdzdHlsZVtkYXRhLXZ1ZS1zc3ItaWR+PVwiJyArIG9iai5pZCArICdcIl0nKVxuXG4gIGlmIChzdHlsZUVsZW1lbnQpIHtcbiAgICBpZiAoaXNQcm9kdWN0aW9uKSB7XG4gICAgICAvLyBoYXMgU1NSIHN0eWxlcyBhbmQgaW4gcHJvZHVjdGlvbiBtb2RlLlxuICAgICAgLy8gc2ltcGx5IGRvIG5vdGhpbmcuXG4gICAgICByZXR1cm4gbm9vcFxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBoYXMgU1NSIHN0eWxlcyBidXQgaW4gZGV2IG1vZGUuXG4gICAgICAvLyBmb3Igc29tZSByZWFzb24gQ2hyb21lIGNhbid0IGhhbmRsZSBzb3VyY2UgbWFwIGluIHNlcnZlci1yZW5kZXJlZFxuICAgICAgLy8gc3R5bGUgdGFncyAtIHNvdXJjZSBtYXBzIGluIDxzdHlsZT4gb25seSB3b3JrcyBpZiB0aGUgc3R5bGUgdGFnIGlzXG4gICAgICAvLyBjcmVhdGVkIGFuZCBpbnNlcnRlZCBkeW5hbWljYWxseS4gU28gd2UgcmVtb3ZlIHRoZSBzZXJ2ZXIgcmVuZGVyZWRcbiAgICAgIC8vIHN0eWxlcyBhbmQgaW5qZWN0IG5ldyBvbmVzLlxuICAgICAgc3R5bGVFbGVtZW50LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoc3R5bGVFbGVtZW50KVxuICAgIH1cbiAgfVxuXG4gIGlmIChpc09sZElFKSB7XG4gICAgLy8gdXNlIHNpbmdsZXRvbiBtb2RlIGZvciBJRTkuXG4gICAgdmFyIHN0eWxlSW5kZXggPSBzaW5nbGV0b25Db3VudGVyKytcbiAgICBzdHlsZUVsZW1lbnQgPSBzaW5nbGV0b25FbGVtZW50IHx8IChzaW5nbGV0b25FbGVtZW50ID0gY3JlYXRlU3R5bGVFbGVtZW50KCkpXG4gICAgdXBkYXRlID0gYXBwbHlUb1NpbmdsZXRvblRhZy5iaW5kKG51bGwsIHN0eWxlRWxlbWVudCwgc3R5bGVJbmRleCwgZmFsc2UpXG4gICAgcmVtb3ZlID0gYXBwbHlUb1NpbmdsZXRvblRhZy5iaW5kKG51bGwsIHN0eWxlRWxlbWVudCwgc3R5bGVJbmRleCwgdHJ1ZSlcbiAgfSBlbHNlIHtcbiAgICAvLyB1c2UgbXVsdGktc3R5bGUtdGFnIG1vZGUgaW4gYWxsIG90aGVyIGNhc2VzXG4gICAgc3R5bGVFbGVtZW50ID0gY3JlYXRlU3R5bGVFbGVtZW50KClcbiAgICB1cGRhdGUgPSBhcHBseVRvVGFnLmJpbmQobnVsbCwgc3R5bGVFbGVtZW50KVxuICAgIHJlbW92ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHN0eWxlRWxlbWVudC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHN0eWxlRWxlbWVudClcbiAgICB9XG4gIH1cblxuICB1cGRhdGUob2JqKVxuXG4gIHJldHVybiBmdW5jdGlvbiB1cGRhdGVTdHlsZSAobmV3T2JqIC8qIFN0eWxlT2JqZWN0UGFydCAqLykge1xuICAgIGlmIChuZXdPYmopIHtcbiAgICAgIGlmIChuZXdPYmouY3NzID09PSBvYmouY3NzICYmXG4gICAgICAgICAgbmV3T2JqLm1lZGlhID09PSBvYmoubWVkaWEgJiZcbiAgICAgICAgICBuZXdPYmouc291cmNlTWFwID09PSBvYmouc291cmNlTWFwKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgdXBkYXRlKG9iaiA9IG5ld09iailcbiAgICB9IGVsc2Uge1xuICAgICAgcmVtb3ZlKClcbiAgICB9XG4gIH1cbn1cblxudmFyIHJlcGxhY2VUZXh0ID0gKGZ1bmN0aW9uICgpIHtcbiAgdmFyIHRleHRTdG9yZSA9IFtdXG5cbiAgcmV0dXJuIGZ1bmN0aW9uIChpbmRleCwgcmVwbGFjZW1lbnQpIHtcbiAgICB0ZXh0U3RvcmVbaW5kZXhdID0gcmVwbGFjZW1lbnRcbiAgICByZXR1cm4gdGV4dFN0b3JlLmZpbHRlcihCb29sZWFuKS5qb2luKCdcXG4nKVxuICB9XG59KSgpXG5cbmZ1bmN0aW9uIGFwcGx5VG9TaW5nbGV0b25UYWcgKHN0eWxlRWxlbWVudCwgaW5kZXgsIHJlbW92ZSwgb2JqKSB7XG4gIHZhciBjc3MgPSByZW1vdmUgPyAnJyA6IG9iai5jc3NcblxuICBpZiAoc3R5bGVFbGVtZW50LnN0eWxlU2hlZXQpIHtcbiAgICBzdHlsZUVsZW1lbnQuc3R5bGVTaGVldC5jc3NUZXh0ID0gcmVwbGFjZVRleHQoaW5kZXgsIGNzcylcbiAgfSBlbHNlIHtcbiAgICB2YXIgY3NzTm9kZSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGNzcylcbiAgICB2YXIgY2hpbGROb2RlcyA9IHN0eWxlRWxlbWVudC5jaGlsZE5vZGVzXG4gICAgaWYgKGNoaWxkTm9kZXNbaW5kZXhdKSBzdHlsZUVsZW1lbnQucmVtb3ZlQ2hpbGQoY2hpbGROb2Rlc1tpbmRleF0pXG4gICAgaWYgKGNoaWxkTm9kZXMubGVuZ3RoKSB7XG4gICAgICBzdHlsZUVsZW1lbnQuaW5zZXJ0QmVmb3JlKGNzc05vZGUsIGNoaWxkTm9kZXNbaW5kZXhdKVxuICAgIH0gZWxzZSB7XG4gICAgICBzdHlsZUVsZW1lbnQuYXBwZW5kQ2hpbGQoY3NzTm9kZSlcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gYXBwbHlUb1RhZyAoc3R5bGVFbGVtZW50LCBvYmopIHtcbiAgdmFyIGNzcyA9IG9iai5jc3NcbiAgdmFyIG1lZGlhID0gb2JqLm1lZGlhXG4gIHZhciBzb3VyY2VNYXAgPSBvYmouc291cmNlTWFwXG5cbiAgaWYgKG1lZGlhKSB7XG4gICAgc3R5bGVFbGVtZW50LnNldEF0dHJpYnV0ZSgnbWVkaWEnLCBtZWRpYSlcbiAgfVxuXG4gIGlmIChzb3VyY2VNYXApIHtcbiAgICAvLyBodHRwczovL2RldmVsb3Blci5jaHJvbWUuY29tL2RldnRvb2xzL2RvY3MvamF2YXNjcmlwdC1kZWJ1Z2dpbmdcbiAgICAvLyB0aGlzIG1ha2VzIHNvdXJjZSBtYXBzIGluc2lkZSBzdHlsZSB0YWdzIHdvcmsgcHJvcGVybHkgaW4gQ2hyb21lXG4gICAgY3NzICs9ICdcXG4vKiMgc291cmNlVVJMPScgKyBzb3VyY2VNYXAuc291cmNlc1swXSArICcgKi8nXG4gICAgLy8gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMjY2MDM4NzVcbiAgICBjc3MgKz0gJ1xcbi8qIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsJyArIGJ0b2EodW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KEpTT04uc3RyaW5naWZ5KHNvdXJjZU1hcCkpKSkgKyAnICovJ1xuICB9XG5cbiAgaWYgKHN0eWxlRWxlbWVudC5zdHlsZVNoZWV0KSB7XG4gICAgc3R5bGVFbGVtZW50LnN0eWxlU2hlZXQuY3NzVGV4dCA9IGNzc1xuICB9IGVsc2Uge1xuICAgIHdoaWxlIChzdHlsZUVsZW1lbnQuZmlyc3RDaGlsZCkge1xuICAgICAgc3R5bGVFbGVtZW50LnJlbW92ZUNoaWxkKHN0eWxlRWxlbWVudC5maXJzdENoaWxkKVxuICAgIH1cbiAgICBzdHlsZUVsZW1lbnQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoY3NzKSlcbiAgfVxufVxuXG5cbi8qKiovIH0pLFxuLyogMTkgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxuLyoqXG4gKiBUcmFuc2xhdGVzIHRoZSBsaXN0IGZvcm1hdCBwcm9kdWNlZCBieSBjc3MtbG9hZGVyIGludG8gc29tZXRoaW5nXG4gKiBlYXNpZXIgdG8gbWFuaXB1bGF0ZS5cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBsaXN0VG9TdHlsZXMgKHBhcmVudElkLCBsaXN0KSB7XG4gIHZhciBzdHlsZXMgPSBbXVxuICB2YXIgbmV3U3R5bGVzID0ge31cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGl0ZW0gPSBsaXN0W2ldXG4gICAgdmFyIGlkID0gaXRlbVswXVxuICAgIHZhciBjc3MgPSBpdGVtWzFdXG4gICAgdmFyIG1lZGlhID0gaXRlbVsyXVxuICAgIHZhciBzb3VyY2VNYXAgPSBpdGVtWzNdXG4gICAgdmFyIHBhcnQgPSB7XG4gICAgICBpZDogcGFyZW50SWQgKyAnOicgKyBpLFxuICAgICAgY3NzOiBjc3MsXG4gICAgICBtZWRpYTogbWVkaWEsXG4gICAgICBzb3VyY2VNYXA6IHNvdXJjZU1hcFxuICAgIH1cbiAgICBpZiAoIW5ld1N0eWxlc1tpZF0pIHtcbiAgICAgIHN0eWxlcy5wdXNoKG5ld1N0eWxlc1tpZF0gPSB7IGlkOiBpZCwgcGFydHM6IFtwYXJ0XSB9KVxuICAgIH0gZWxzZSB7XG4gICAgICBuZXdTdHlsZXNbaWRdLnBhcnRzLnB1c2gocGFydClcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHN0eWxlc1xufVxuXG5cbi8qKiovIH0pLFxuLyogMjAgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFXzIwX187XG5cbi8qKiovIH0pXG4vKioqKioqLyBdKTtcbn0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxudmFyIF90eXBlb2YgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIiA/IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH0gOiBmdW5jdGlvbiAob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9O1xyXG5cclxudmFyIF9jb25maWcgPSByZXF1aXJlKCcuL2NvbmZpZycpO1xyXG5cclxudmFyIF9jb25maWcyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfY29uZmlnKTtcclxuXHJcbnZhciBfbWVyZ2UgPSByZXF1aXJlKCdtZXJnZScpO1xyXG5cclxudmFyIF9tZXJnZTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9tZXJnZSk7XHJcblxyXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxyXG5cclxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cclxuXHJcbnZhciB0ZW1wbGF0ZSA9IHJlcXVpcmUoJy4vdGVtcGxhdGUuanMnKTtcclxudmFyIGJ1cyA9IHJlcXVpcmUoJy4vYnVzJyk7XHJcblxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSB7XHJcbiAgcmVuZGVyOiB0ZW1wbGF0ZS5jYWxsKHVuZGVmaW5lZCksXHJcbiAgcHJvcHM6IHtcclxuICAgIGZvcjoge1xyXG4gICAgICB0eXBlOiBTdHJpbmcsXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxyXG4gICAgfSxcclxuICAgIHJlY29yZHM6IHtcclxuICAgICAgdHlwZTogTnVtYmVyLFxyXG4gICAgICByZXF1aXJlZDogdHJ1ZVxyXG4gICAgfSxcclxuICAgIHBlclBhZ2U6IHtcclxuICAgICAgdHlwZTogTnVtYmVyLFxyXG4gICAgICBkZWZhdWx0OiAyNVxyXG4gICAgfSxcclxuICAgIHZ1ZXg6IHtcclxuICAgICAgdHlwZTogQm9vbGVhblxyXG4gICAgfSxcclxuICAgIG9wdGlvbnM6IHtcclxuICAgICAgdHlwZTogT2JqZWN0XHJcbiAgICB9XHJcbiAgfSxcclxuICBjcmVhdGVkOiBmdW5jdGlvbiBjcmVhdGVkKCkge1xyXG5cclxuICAgIGlmICghdGhpcy52dWV4KSByZXR1cm47XHJcblxyXG4gICAgaWYgKCF0aGlzLmZvcikge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3Z1ZS1wYWdpbmF0aW9uLTI6IFRoZSBcImZvclwiIHByb3AgaXMgcmVxdWlyZWQgd2hlbiB1c2luZyB2dWV4Jyk7XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIG5hbWUgPSB0aGlzLmZvcjtcclxuXHJcbiAgICBpZiAodGhpcy4kc3RvcmUuc3RhdGVbbmFtZV0pIHJldHVybjtcclxuXHJcbiAgICB0aGlzLiRzdG9yZS5yZWdpc3Rlck1vZHVsZSh0aGlzLmZvciwge1xyXG4gICAgICBzdGF0ZToge1xyXG4gICAgICAgIHBhZ2U6IDFcclxuICAgICAgfSxcclxuICAgICAgbXV0YXRpb25zOiBfZGVmaW5lUHJvcGVydHkoe30sIG5hbWUgKyAnL1BBR0lOQVRFJywgZnVuY3Rpb24gdW5kZWZpbmVkKHN0YXRlLCBwYWdlKSB7XHJcbiAgICAgICAgc3RhdGUucGFnZSA9IHBhZ2U7XHJcbiAgICAgIH0pXHJcbiAgICB9KTtcclxuICB9LFxyXG4gIGRhdGE6IGZ1bmN0aW9uIGRhdGEoKSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBQYWdlOiAxLFxyXG4gICAgICBmaXJzdFBhZ2U6IDFcclxuICAgIH07XHJcbiAgfSxcclxuICBjb21wdXRlZDoge1xyXG4gICAgb3B0czogZnVuY3Rpb24gb3B0cygpIHtcclxuICAgICAgcmV0dXJuICgwLCBfbWVyZ2UyLmRlZmF1bHQpKCgwLCBfY29uZmlnMi5kZWZhdWx0KSgpLCB0aGlzLm9wdGlvbnMpO1xyXG4gICAgfSxcclxuICAgIFRoZW1lOiBmdW5jdGlvbiBUaGVtZSgpIHtcclxuXHJcbiAgICAgIGlmIChfdHlwZW9mKHRoaXMub3B0cy50aGVtZSkgPT09ICdvYmplY3QnKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMub3B0cy50aGVtZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdmFyIHRoZW1lcyA9IHtcclxuICAgICAgICBib290c3RyYXAzOiByZXF1aXJlKCcuL3RoZW1lcy9ib290c3RyYXAzJyksXHJcbiAgICAgICAgYm9vdHN0cmFwNDogcmVxdWlyZSgnLi90aGVtZXMvYm9vdHN0cmFwNCcpLFxyXG4gICAgICAgIGJ1bG1hOiByZXF1aXJlKCcuL3RoZW1lcy9idWxtYScpXHJcbiAgICAgIH07XHJcblxyXG4gICAgICBpZiAoX3R5cGVvZih0aGVtZXNbdGhpcy5vcHRzLnRoZW1lXSkgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIHRocm93ICd2dWUtcGFnaW5hdGlvbi0yOiB0aGUgdGhlbWUgJyArIHRoaXMub3B0cy50aGVtZSArICcgZG9lcyBub3QgZXhpc3QnO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gdGhlbWVzW3RoaXMub3B0cy50aGVtZV07XHJcbiAgICB9LFxyXG4gICAgcGFnZTogZnVuY3Rpb24gcGFnZSgpIHtcclxuICAgICAgcmV0dXJuIHRoaXMudnVleCA/IHRoaXMuJHN0b3JlLnN0YXRlW3RoaXMuZm9yXS5wYWdlIDogdGhpcy5QYWdlO1xyXG4gICAgfSxcclxuXHJcbiAgICBwYWdlczogZnVuY3Rpb24gcGFnZXMoKSB7XHJcbiAgICAgIGlmICghdGhpcy5yZWNvcmRzKSByZXR1cm4gW107XHJcblxyXG4gICAgICByZXR1cm4gcmFuZ2UodGhpcy5wYWdpbmF0aW9uU3RhcnQsIHRoaXMucGFnZXNJbkN1cnJlbnRDaHVuayk7XHJcbiAgICB9LFxyXG4gICAgdG90YWxQYWdlczogZnVuY3Rpb24gdG90YWxQYWdlcygpIHtcclxuICAgICAgcmV0dXJuIHRoaXMucmVjb3JkcyA/IE1hdGguY2VpbCh0aGlzLnJlY29yZHMgLyB0aGlzLnBlclBhZ2UpIDogMTtcclxuICAgIH0sXHJcbiAgICB0b3RhbENodW5rczogZnVuY3Rpb24gdG90YWxDaHVua3MoKSB7XHJcbiAgICAgIHJldHVybiBNYXRoLmNlaWwodGhpcy50b3RhbFBhZ2VzIC8gdGhpcy5vcHRzLmNodW5rKTtcclxuICAgIH0sXHJcbiAgICBjdXJyZW50Q2h1bms6IGZ1bmN0aW9uIGN1cnJlbnRDaHVuaygpIHtcclxuICAgICAgcmV0dXJuIE1hdGguY2VpbCh0aGlzLnBhZ2UgLyB0aGlzLm9wdHMuY2h1bmspO1xyXG4gICAgfSxcclxuICAgIHBhZ2luYXRpb25TdGFydDogZnVuY3Rpb24gcGFnaW5hdGlvblN0YXJ0KCkge1xyXG5cclxuICAgICAgaWYgKHRoaXMub3B0cy5jaHVua3NOYXZpZ2F0aW9uID09PSAnc2Nyb2xsJykge1xyXG4gICAgICAgIHZhciBwYWdlID0gIHRoaXMuUGFnZSAtIHRoaXMub3B0cy5jaHVuayArIDE7XHJcbiAgICAgICAgcmV0dXJuIHBhZ2UgPiAwID8gcGFnZSA6IDE7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiAodGhpcy5jdXJyZW50Q2h1bmsgLSAxKSAqIHRoaXMub3B0cy5jaHVuayArIDE7XHJcbiAgICB9LFxyXG4gICAgcGFnZXNJbkN1cnJlbnRDaHVuazogZnVuY3Rpb24gcGFnZXNJbkN1cnJlbnRDaHVuaygpIHtcclxuICAgICAgcmV0dXJuIHRoaXMucGFnaW5hdGlvblN0YXJ0ICsgdGhpcy5vcHRzLmNodW5rIDw9IHRoaXMudG90YWxQYWdlcyA/IHRoaXMub3B0cy5jaHVuayA6IHRoaXMudG90YWxQYWdlcyAtIHRoaXMucGFnaW5hdGlvblN0YXJ0ICsgMTtcclxuICAgIH0sXHJcbiAgICBjb3VudDogZnVuY3Rpb24gY291bnQoKSB7XHJcblxyXG4gICAgICBpZiAoL3twYWdlfS8udGVzdCh0aGlzLm9wdHMudGV4dHMuY291bnQpKSB7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnRvdGFsUGFnZXMgPD0gMSkgcmV0dXJuICcnO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5vcHRzLnRleHRzLmNvdW50LnJlcGxhY2UoJ3twYWdlfScsIHRoaXMucGFnZSkucmVwbGFjZSgne3BhZ2VzfScsIHRoaXMudG90YWxQYWdlcyk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHZhciBwYXJ0cyA9IHRoaXMub3B0cy50ZXh0cy5jb3VudC5zcGxpdCgnfCcpO1xyXG4gICAgICB2YXIgZnJvbSA9ICh0aGlzLnBhZ2UgLSAxKSAqIHRoaXMucGVyUGFnZSArIDE7XHJcbiAgICAgIHZhciB0byA9IHRoaXMucGFnZSA9PSB0aGlzLnRvdGFsUGFnZXMgPyB0aGlzLnJlY29yZHMgOiBmcm9tICsgdGhpcy5wZXJQYWdlIC0gMTtcclxuICAgICAgdmFyIGkgPSBNYXRoLm1pbih0aGlzLnJlY29yZHMgPT0gMSA/IDIgOiB0aGlzLnRvdGFsUGFnZXMgPT0gMSA/IDEgOiAwLCBwYXJ0cy5sZW5ndGggLSAxKTtcclxuXHJcbiAgICAgIHJldHVybiBwYXJ0c1tpXS5yZXBsYWNlKCd7Y291bnR9JywgdGhpcy5mb3JtYXROdW1iZXIodGhpcy5yZWNvcmRzKSkucmVwbGFjZSgne2Zyb219JywgdGhpcy5mb3JtYXROdW1iZXIoZnJvbSkpLnJlcGxhY2UoJ3t0b30nLCB0aGlzLmZvcm1hdE51bWJlcih0bykpO1xyXG4gICAgfVxyXG4gIH0sXHJcbiAgbWV0aG9kczoge1xyXG4gICAgc2V0UGFnZTogZnVuY3Rpb24gc2V0UGFnZShwYWdlKSB7XHJcbiAgICAgIGlmICh0aGlzLmFsbG93ZWRQYWdlKHBhZ2UpKSB7XHJcbiAgICAgICAgdGhpcy5wYWdpbmF0ZShwYWdlKTtcclxuICAgICAgfVxyXG4gICAgfSxcclxuICAgIHBhZ2luYXRlOiBmdW5jdGlvbiBwYWdpbmF0ZShwYWdlKSB7XHJcbiAgICAgIGlmICh0aGlzLnZ1ZXgpIHtcclxuICAgICAgICB0aGlzLiRzdG9yZS5jb21taXQodGhpcy5mb3IgKyAnL1BBR0lOQVRFJywgcGFnZSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5QYWdlID0gcGFnZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy4kZW1pdCgncGFnaW5hdGUnLCBwYWdlKTtcclxuXHJcbiAgICAgIGlmICh0aGlzLmZvcikge1xyXG4gICAgICAgIGJ1cy4kZW1pdCgndnVlLXBhZ2luYXRpb246OicgKyB0aGlzLmZvciwgcGFnZSk7XHJcbiAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgbmV4dDogZnVuY3Rpb24gbmV4dCgpIHtcclxuICAgICAgdmFyIHBhZ2UgPSB0aGlzLnBhZ2UgKyAxO1xyXG4gICAgICBpZiAodGhpcy5vcHRzLmNodW5rc05hdmlnYXRpb24gPT09ICdzY3JvbGwnICYmIHRoaXMuYWxsb3dlZFBhZ2UocGFnZSkgJiYgIXRoaXMuaW5EaXNwbGF5KHBhZ2UpKSB7XHJcbiAgICAgICAgdGhpcy5maXJzdFBhZ2UrKztcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gdGhpcy5zZXRQYWdlKHBhZ2UpO1xyXG4gICAgfSxcclxuICAgIHByZXY6IGZ1bmN0aW9uIHByZXYoKSB7XHJcbiAgICAgIHZhciBwYWdlID0gdGhpcy5wYWdlIC0gMTtcclxuXHJcbiAgICAgIGlmICh0aGlzLm9wdHMuY2h1bmtzTmF2aWdhdGlvbiA9PT0gJ3Njcm9sbCcgJiYgdGhpcy5hbGxvd2VkUGFnZShwYWdlKSAmJiAhdGhpcy5pbkRpc3BsYXkocGFnZSkpIHtcclxuICAgICAgICB0aGlzLmZpcnN0UGFnZS0tO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gdGhpcy5zZXRQYWdlKHBhZ2UpO1xyXG4gICAgfSxcclxuICAgIGluRGlzcGxheTogZnVuY3Rpb24gaW5EaXNwbGF5KHBhZ2UpIHtcclxuXHJcbiAgICAgIHZhciBzdGFydCA9IHRoaXMuZmlyc3RQYWdlO1xyXG4gICAgICB2YXIgZW5kID0gc3RhcnQgKyB0aGlzLm9wdHMuY2h1bmsgLSAxO1xyXG5cclxuICAgICAgcmV0dXJuIHBhZ2UgPj0gc3RhcnQgJiYgcGFnZSA8PSBlbmQ7XHJcbiAgICB9LFxyXG5cclxuICAgIG5leHRDaHVuazogZnVuY3Rpb24gbmV4dENodW5rKCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5zZXRDaHVuaygxKTtcclxuICAgIH0sXHJcbiAgICBwcmV2Q2h1bms6IGZ1bmN0aW9uIHByZXZDaHVuaygpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuc2V0Q2h1bmsoLTEpO1xyXG4gICAgfSxcclxuICAgIHNldENodW5rOiBmdW5jdGlvbiBzZXRDaHVuayhkaXJlY3Rpb24pIHtcclxuICAgICAgdGhpcy5zZXRQYWdlKCh0aGlzLmN1cnJlbnRDaHVuayAtIDEgKyBkaXJlY3Rpb24pICogdGhpcy5vcHRzLmNodW5rICsgMSk7XHJcbiAgICB9LFxyXG4gICAgYWxsb3dlZFBhZ2U6IGZ1bmN0aW9uIGFsbG93ZWRQYWdlKHBhZ2UpIHtcclxuICAgICAgcmV0dXJuIHBhZ2UgPj0gMSAmJiBwYWdlIDw9IHRoaXMudG90YWxQYWdlcztcclxuICAgIH0sXHJcbiAgICBhbGxvd2VkQ2h1bms6IGZ1bmN0aW9uIGFsbG93ZWRDaHVuayhkaXJlY3Rpb24pIHtcclxuICAgICAgcmV0dXJuIGRpcmVjdGlvbiA9PSAxICYmIHRoaXMuY3VycmVudENodW5rIDwgdGhpcy50b3RhbENodW5rcyB8fCBkaXJlY3Rpb24gPT0gLTEgJiYgdGhpcy5jdXJyZW50Q2h1bmsgPiAxO1xyXG4gICAgfSxcclxuICAgIGFsbG93ZWRQYWdlQ2xhc3M6IGZ1bmN0aW9uIGFsbG93ZWRQYWdlQ2xhc3MoZGlyZWN0aW9uKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmFsbG93ZWRQYWdlKGRpcmVjdGlvbikgPyAnJyA6IHRoaXMuVGhlbWUuZGlzYWJsZWQ7XHJcbiAgICB9LFxyXG4gICAgYWxsb3dlZENodW5rQ2xhc3M6IGZ1bmN0aW9uIGFsbG93ZWRDaHVua0NsYXNzKGRpcmVjdGlvbikge1xyXG4gICAgICByZXR1cm4gdGhpcy5hbGxvd2VkQ2h1bmsoZGlyZWN0aW9uKSA/ICcnIDogdGhpcy5UaGVtZS5kaXNhYmxlZDtcclxuICAgIH0sXHJcbiAgICBhY3RpdmVDbGFzczogZnVuY3Rpb24gYWN0aXZlQ2xhc3MocGFnZSkge1xyXG4gICAgICByZXR1cm4gdGhpcy5wYWdlID09IHBhZ2UgPyB0aGlzLlRoZW1lLmFjdGl2ZSA6ICcnO1xyXG4gICAgfSxcclxuICAgIGZvcm1hdE51bWJlcjogZnVuY3Rpb24gZm9ybWF0TnVtYmVyKG51bSkge1xyXG5cclxuICAgICAgaWYgKCF0aGlzLm9wdHMuZm9ybWF0KSByZXR1cm4gbnVtO1xyXG5cclxuICAgICAgcmV0dXJuIG51bS50b1N0cmluZygpLnJlcGxhY2UoL1xcQig/PShcXGR7M30pKyg/IVxcZCkpL2csIFwiLFwiKTtcclxuICAgIH1cclxuICB9LFxyXG4gIGJlZm9yZURlc3Ryb3k6IGZ1bmN0aW9uIGJlZm9yZURlc3Ryb3koKSB7XHJcbiAgICBidXMuJG9mZigpO1xyXG4gICAgYnVzLiRkZXN0cm95KCk7XHJcbiAgfVxyXG59O1xyXG5cclxuZnVuY3Rpb24gcmFuZ2Uoc3RhcnQsIGNvdW50KSB7XHJcbiAgcmV0dXJuIEFycmF5LmFwcGx5KDAsIEFycmF5KGNvdW50KSkubWFwKGZ1bmN0aW9uIChlbGVtZW50LCBpbmRleCkge1xyXG4gICAgcmV0dXJuIGluZGV4ICsgc3RhcnQ7XHJcbiAgfSk7XHJcbn1cclxuIiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxudmFyIF92dWUgPSByZXF1aXJlKCd2dWUnKTtcclxuXHJcbnZhciBfdnVlMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3Z1ZSk7XHJcblxyXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxyXG5cclxudmFyIGJ1cyA9IG5ldyBfdnVlMi5kZWZhdWx0KCk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IGJ1czsiLCIndXNlIHN0cmljdCc7XHJcblxyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcclxuICAgIHZhbHVlOiB0cnVlXHJcbn0pO1xyXG5cclxuZXhwb3J0cy5kZWZhdWx0ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICBmb3JtYXQ6IHRydWUsXHJcbiAgICAgICAgY2h1bms6IDEwLFxyXG4gICAgICAgIGNodW5rc05hdmlnYXRpb246ICdmaXhlZCcsXHJcbiAgICAgICAgZWRnZU5hdmlnYXRpb246IGZhbHNlLFxyXG4gICAgICAgIHRoZW1lOiAnYm9vdHN0cmFwMycsXHJcbiAgICAgICAgdGV4dHM6IHtcclxuICAgICAgICAgICAgY291bnQ6ICdTaG93aW5nIHtmcm9tfSB0byB7dG99IG9mIHtjb3VudH0gcmVjb3Jkc3x7Y291bnR9IHJlY29yZHN8T25lIHJlY29yZCcsXHJcbiAgICAgICAgICAgIGZpcnN0OiAnRmlyc3QnLFxyXG4gICAgICAgICAgICBsYXN0OiAnTGFzdCdcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG59OyIsIid1c2Ugc3RyaWN0JztcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xyXG5cclxuICByZXR1cm4gZnVuY3Rpb24gKGgpIHtcclxuXHJcbiAgICB2YXIgdGhlbWUgPSB0aGlzLlRoZW1lO1xyXG4gICAgdmFyIHByZXZDaHVuayA9ICcnO1xyXG4gICAgdmFyIG5leHRDaHVuayA9ICcnO1xyXG4gICAgdmFyIGZpcnN0UGFnZSA9ICcnO1xyXG4gICAgdmFyIGxhc3RQYWdlID0gJyc7XHJcbiAgICB2YXIgaXRlbXMgPSB0aGlzLnBhZ2VzLm1hcChmdW5jdGlvbiAocGFnZSkge1xyXG5cclxuICAgICAgcmV0dXJuIGgoXHJcbiAgICAgICAgJ2xpJyxcclxuICAgICAgICB7ICdjbGFzcyc6ICdWdWVQYWdpbmF0aW9uX19wYWdpbmF0aW9uLWl0ZW0gJyArIHRoZW1lLml0ZW0gKyAnICcgKyB0aGlzLmFjdGl2ZUNsYXNzKHBhZ2UpLFxyXG4gICAgICAgICAgb246IHtcclxuICAgICAgICAgICAgJ2NsaWNrJzogdGhpcy5zZXRQYWdlLmJpbmQodGhpcywgcGFnZSlcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFtoKFxyXG4gICAgICAgICAgJ2EnLFxyXG4gICAgICAgICAgeyAnY2xhc3MnOiB0aGVtZS5saW5rICsgJyAnICsgdGhpcy5hY3RpdmVDbGFzcyhwYWdlKSxcclxuICAgICAgICAgICAgYXR0cnM6IHsgaHJlZjogJ2phdmFzY3JpcHQ6dm9pZCgwKScsXHJcbiAgICAgICAgICAgICAgcm9sZTogJ2J1dHRvbicgfVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFtwYWdlXVxyXG4gICAgICAgICldXHJcbiAgICAgICk7XHJcbiAgICB9LmJpbmQodGhpcykpO1xyXG5cclxuICAgIGlmICh0aGlzLm9wdHMuZWRnZU5hdmlnYXRpb24gJiYgdGhpcy50b3RhbENodW5rcyA+IDEpIHtcclxuICAgICAgZmlyc3RQYWdlID0gaChcclxuICAgICAgICAnbGknLFxyXG4gICAgICAgIHsgJ2NsYXNzJzogJ1Z1ZVBhZ2luYXRpb25fX3BhZ2luYXRpb24taXRlbSAnICsgdGhlbWUuaXRlbSArICcgJyArICh0aGlzLnBhZ2UgPT09IDEgPyB0aGVtZS5kaXNhYmxlZCA6ICcnKSArICcgVnVlUGFnaW5hdGlvbl9fcGFnaW5hdGlvbi1pdGVtLXByZXYtY2h1bmsnLFxyXG4gICAgICAgICAgb246IHtcclxuICAgICAgICAgICAgJ2NsaWNrJzogdGhpcy5zZXRQYWdlLmJpbmQodGhpcywgMSlcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFtoKFxyXG4gICAgICAgICAgJ2EnLFxyXG4gICAgICAgICAgeyAnY2xhc3MnOiB0aGVtZS5saW5rLFxyXG4gICAgICAgICAgICBhdHRyczogeyBocmVmOiAnamF2YXNjcmlwdDp2b2lkKDApOycsXHJcbiAgICAgICAgICAgICAgZGlzYWJsZWQ6IHRoaXMucGFnZSA9PT0gMSB9XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgW3RoaXMub3B0cy50ZXh0cy5maXJzdF1cclxuICAgICAgICApXVxyXG4gICAgICApO1xyXG5cclxuICAgICAgbGFzdFBhZ2UgPSBoKFxyXG4gICAgICAgICdsaScsXHJcbiAgICAgICAgeyAnY2xhc3MnOiAnVnVlUGFnaW5hdGlvbl9fcGFnaW5hdGlvbi1pdGVtICcgKyB0aGVtZS5pdGVtICsgJyAnICsgKHRoaXMucGFnZSA9PT0gdGhpcy50b3RhbFBhZ2VzID8gdGhlbWUuZGlzYWJsZWQgOiAnJykgKyAnIFZ1ZVBhZ2luYXRpb25fX3BhZ2luYXRpb24taXRlbS1wcmV2LWNodW5rJyxcclxuICAgICAgICAgIG9uOiB7XHJcbiAgICAgICAgICAgICdjbGljayc6IHRoaXMuc2V0UGFnZS5iaW5kKHRoaXMsIHRoaXMudG90YWxQYWdlcylcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFtoKFxyXG4gICAgICAgICAgJ2EnLFxyXG4gICAgICAgICAgeyAnY2xhc3MnOiB0aGVtZS5saW5rLFxyXG4gICAgICAgICAgICBhdHRyczogeyBocmVmOiAnamF2YXNjcmlwdDp2b2lkKDApOycsXHJcbiAgICAgICAgICAgICAgZGlzYWJsZWQ6IHRoaXMucGFnZSA9PT0gdGhpcy50b3RhbFBhZ2VzIH1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBbdGhpcy5vcHRzLnRleHRzLmxhc3RdXHJcbiAgICAgICAgKV1cclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5vcHRzLmNodW5rc05hdmlnYXRpb24gPT09ICdmaXhlZCcpIHtcclxuXHJcbiAgICAgIHByZXZDaHVuayA9IGgoXHJcbiAgICAgICAgJ2xpJyxcclxuICAgICAgICB7ICdjbGFzcyc6ICdWdWVQYWdpbmF0aW9uX19wYWdpbmF0aW9uLWl0ZW0gJyArIHRoZW1lLml0ZW0gKyAnICcgKyB0aGVtZS5wcmV2ICsgJyBWdWVQYWdpbmF0aW9uX19wYWdpbmF0aW9uLWl0ZW0tcHJldi1jaHVuayAnICsgdGhpcy5hbGxvd2VkQ2h1bmtDbGFzcygtMSksXHJcbiAgICAgICAgICBvbjoge1xyXG4gICAgICAgICAgICAnY2xpY2snOiB0aGlzLnNldENodW5rLmJpbmQodGhpcywgLTEpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBbaChcclxuICAgICAgICAgICdhJyxcclxuICAgICAgICAgIHsgJ2NsYXNzJzogdGhlbWUubGluayxcclxuICAgICAgICAgICAgYXR0cnM6IHsgaHJlZjogJ2phdmFzY3JpcHQ6dm9pZCgwKTsnLFxyXG4gICAgICAgICAgICAgIGRpc2FibGVkOiAhIXRoaXMuYWxsb3dlZENodW5rQ2xhc3MoLTEpIH1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBbJzw8J11cclxuICAgICAgICApXVxyXG4gICAgICApO1xyXG5cclxuICAgICAgbmV4dENodW5rID0gaChcclxuICAgICAgICAnbGknLFxyXG4gICAgICAgIHsgJ2NsYXNzJzogJ1Z1ZVBhZ2luYXRpb25fX3BhZ2luYXRpb24taXRlbSAnICsgdGhlbWUuaXRlbSArICcgJyArIHRoZW1lLm5leHQgKyAnIFZ1ZVBhZ2luYXRpb25fX3BhZ2luYXRpb24taXRlbS1uZXh0LWNodW5rICcgKyB0aGlzLmFsbG93ZWRDaHVua0NsYXNzKDEpLFxyXG4gICAgICAgICAgb246IHtcclxuICAgICAgICAgICAgJ2NsaWNrJzogdGhpcy5zZXRDaHVuay5iaW5kKHRoaXMsIDEpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBbaChcclxuICAgICAgICAgICdhJyxcclxuICAgICAgICAgIHsgJ2NsYXNzJzogdGhlbWUubGluayxcclxuICAgICAgICAgICAgYXR0cnM6IHsgaHJlZjogJ2phdmFzY3JpcHQ6dm9pZCgwKTsnLFxyXG4gICAgICAgICAgICAgIGRpc2FibGVkOiAhIXRoaXMuYWxsb3dlZENodW5rQ2xhc3MoMSkgfVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFsnPj4nXVxyXG4gICAgICAgICldXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGgoXHJcbiAgICAgICdkaXYnLFxyXG4gICAgICB7ICdjbGFzcyc6ICdWdWVQYWdpbmF0aW9uICcgKyB0aGVtZS53cmFwcGVyIH0sXHJcbiAgICAgIFtoKFxyXG4gICAgICAgICduYXYnLFxyXG4gICAgICAgIHsgJ2NsYXNzJzogJycgKyB0aGVtZS5uYXYgfSxcclxuICAgICAgICBbaChcclxuICAgICAgICAgICd1bCcsXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIGRpcmVjdGl2ZXM6IFt7XHJcbiAgICAgICAgICAgICAgbmFtZTogJ3Nob3cnLFxyXG4gICAgICAgICAgICAgIHZhbHVlOiB0aGlzLnRvdGFsUGFnZXMgPiAxXHJcbiAgICAgICAgICAgIH1dLFxyXG5cclxuICAgICAgICAgICAgJ2NsYXNzJzogdGhlbWUubGlzdCArICcgVnVlUGFnaW5hdGlvbl9fcGFnaW5hdGlvbicgfSxcclxuICAgICAgICAgIFtmaXJzdFBhZ2UsIHByZXZDaHVuaywgaChcclxuICAgICAgICAgICAgJ2xpJyxcclxuICAgICAgICAgICAgeyAnY2xhc3MnOiAnVnVlUGFnaW5hdGlvbl9fcGFnaW5hdGlvbi1pdGVtICcgKyB0aGVtZS5pdGVtICsgJyAnICsgdGhlbWUucHJldiArICcgVnVlUGFnaW5hdGlvbl9fcGFnaW5hdGlvbi1pdGVtLXByZXYtcGFnZSAnICsgdGhpcy5hbGxvd2VkUGFnZUNsYXNzKHRoaXMucGFnZSAtIDEpLFxyXG4gICAgICAgICAgICAgIG9uOiB7XHJcbiAgICAgICAgICAgICAgICAnY2xpY2snOiB0aGlzLnByZXYuYmluZCh0aGlzKVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgW2goXHJcbiAgICAgICAgICAgICAgJ2EnLFxyXG4gICAgICAgICAgICAgIHsgJ2NsYXNzJzogdGhlbWUubGluayxcclxuICAgICAgICAgICAgICAgIGF0dHJzOiB7IGhyZWY6ICdqYXZhc2NyaXB0OnZvaWQoMCk7JyxcclxuICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ6ICEhdGhpcy5hbGxvd2VkUGFnZUNsYXNzKHRoaXMucGFnZSAtIDEpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICBbJzwnXVxyXG4gICAgICAgICAgICApXVxyXG4gICAgICAgICAgKSwgaXRlbXMsIGgoXHJcbiAgICAgICAgICAgICdsaScsXHJcbiAgICAgICAgICAgIHsgJ2NsYXNzJzogJ1Z1ZVBhZ2luYXRpb25fX3BhZ2luYXRpb24taXRlbSAnICsgdGhlbWUuaXRlbSArICcgJyArIHRoZW1lLm5leHQgKyAnIFZ1ZVBhZ2luYXRpb25fX3BhZ2luYXRpb24taXRlbS1uZXh0LXBhZ2UgJyArIHRoaXMuYWxsb3dlZFBhZ2VDbGFzcyh0aGlzLnBhZ2UgKyAxKSxcclxuICAgICAgICAgICAgICBvbjoge1xyXG4gICAgICAgICAgICAgICAgJ2NsaWNrJzogdGhpcy5uZXh0LmJpbmQodGhpcylcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIFtoKFxyXG4gICAgICAgICAgICAgICdhJyxcclxuICAgICAgICAgICAgICB7ICdjbGFzcyc6IHRoZW1lLmxpbmssXHJcbiAgICAgICAgICAgICAgICBhdHRyczogeyBocmVmOiAnamF2YXNjcmlwdDp2b2lkKDApOycsXHJcbiAgICAgICAgICAgICAgICAgIGRpc2FibGVkOiAhIXRoaXMuYWxsb3dlZFBhZ2VDbGFzcyh0aGlzLnBhZ2UgKyAxKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgWyc+J11cclxuICAgICAgICAgICAgKV1cclxuICAgICAgICAgICksIG5leHRDaHVuaywgbGFzdFBhZ2VdXHJcbiAgICAgICAgKSwgaChcclxuICAgICAgICAgICdwJyxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgZGlyZWN0aXZlczogW3tcclxuICAgICAgICAgICAgICBuYW1lOiAnc2hvdycsXHJcbiAgICAgICAgICAgICAgdmFsdWU6IHBhcnNlSW50KHRoaXMucmVjb3JkcylcclxuICAgICAgICAgICAgfV0sXHJcblxyXG4gICAgICAgICAgICAnY2xhc3MnOiAnVnVlUGFnaW5hdGlvbl9fY291bnQgJyArIHRoZW1lLmNvdW50IH0sXHJcbiAgICAgICAgICBbdGhpcy5jb3VudF1cclxuICAgICAgICApXVxyXG4gICAgICApXVxyXG4gICAgKTtcclxuICB9O1xyXG59OyIsIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgbmF2OiAnJyxcbiAgICBjb3VudDogJycsXG4gICAgd3JhcHBlcjogJycsXG4gICAgbGlzdDogJ3BhZ2luYXRpb24nLFxuICAgIGl0ZW06ICdwYWdlLWl0ZW0nLFxuICAgIGxpbms6ICdwYWdlLWxpbmsnLFxuICAgIG5leHQ6ICcnLFxuICAgIHByZXY6ICcnLFxuICAgIGFjdGl2ZTogJ2FjdGl2ZScsXG4gICAgZGlzYWJsZWQ6ICdkaXNhYmxlZCdcbn07IiwiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBuYXY6ICcnLFxuICAgIGNvdW50OiAnJyxcbiAgICB3cmFwcGVyOiAnJyxcbiAgICBsaXN0OiAncGFnaW5hdGlvbicsXG4gICAgaXRlbTogJ3BhZ2UtaXRlbScsXG4gICAgbGluazogJ3BhZ2UtbGluaycsXG4gICAgbmV4dDogJycsXG4gICAgcHJldjogJycsXG4gICAgYWN0aXZlOiAnYWN0aXZlJyxcbiAgICBkaXNhYmxlZDogJ2Rpc2FibGVkJ1xufTsiLCIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIG5hdjogJycsXG4gICAgY291bnQ6ICcnLFxuICAgIHdyYXBwZXI6ICdwYWdpbmF0aW9uJyxcbiAgICBsaXN0OiAncGFnaW5hdGlvbi1saXN0JyxcbiAgICBpdGVtOiAnJyxcbiAgICBsaW5rOiAncGFnaW5hdGlvbi1saW5rJyxcbiAgICBuZXh0OiAnJyxcbiAgICBwcmV2OiAnJyxcbiAgICBhY3RpdmU6ICdpcy1jdXJyZW50JyxcbiAgICBkaXNhYmxlZDogJycgLy8gdXNlcyB0aGUgZGlzYWJsZWQgSFRNTCBhdHRpcmJ1dGVcbn07IiwidmFyIFBhZ2luYXRpb24gPSByZXF1aXJlKCcuL2NvbXBpbGVkL1BhZ2luYXRpb24nKTtcclxudmFyIFBhZ2luYXRpb25FdmVudCA9IHJlcXVpcmUoJy4vY29tcGlsZWQvYnVzJyk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IHtcclxuICBQYWdpbmF0aW9uOlBhZ2luYXRpb24sXHJcbiAgUGFnaW5hdGlvbkV2ZW50OlBhZ2luYXRpb25FdmVudFxyXG59XHJcbiIsIi8qIVxuICAqIHZ1ZS1yb3V0ZXIgdjMuMS4zXG4gICogKGMpIDIwMTkgRXZhbiBZb3VcbiAgKiBAbGljZW5zZSBNSVRcbiAgKi9cbid1c2Ugc3RyaWN0JztcblxuLyogICovXG5cbmZ1bmN0aW9uIGFzc2VydCAoY29uZGl0aW9uLCBtZXNzYWdlKSB7XG4gIGlmICghY29uZGl0aW9uKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKChcIlt2dWUtcm91dGVyXSBcIiArIG1lc3NhZ2UpKVxuICB9XG59XG5cbmZ1bmN0aW9uIHdhcm4gKGNvbmRpdGlvbiwgbWVzc2FnZSkge1xuICBpZiAoXCJwcm9kdWN0aW9uXCIgIT09ICdwcm9kdWN0aW9uJyAmJiAhY29uZGl0aW9uKSB7XG4gICAgdHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnICYmIGNvbnNvbGUud2FybigoXCJbdnVlLXJvdXRlcl0gXCIgKyBtZXNzYWdlKSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNFcnJvciAoZXJyKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZXJyKS5pbmRleE9mKCdFcnJvcicpID4gLTFcbn1cblxuZnVuY3Rpb24gaXNFeHRlbmRlZEVycm9yIChjb25zdHJ1Y3RvciwgZXJyKSB7XG4gIHJldHVybiAoXG4gICAgZXJyIGluc3RhbmNlb2YgY29uc3RydWN0b3IgfHxcbiAgICAvLyBfbmFtZSBpcyB0byBzdXBwb3J0IElFOSB0b29cbiAgICAoZXJyICYmIChlcnIubmFtZSA9PT0gY29uc3RydWN0b3IubmFtZSB8fCBlcnIuX25hbWUgPT09IGNvbnN0cnVjdG9yLl9uYW1lKSlcbiAgKVxufVxuXG5mdW5jdGlvbiBleHRlbmQgKGEsIGIpIHtcbiAgZm9yICh2YXIga2V5IGluIGIpIHtcbiAgICBhW2tleV0gPSBiW2tleV07XG4gIH1cbiAgcmV0dXJuIGFcbn1cblxudmFyIFZpZXcgPSB7XG4gIG5hbWU6ICdSb3V0ZXJWaWV3JyxcbiAgZnVuY3Rpb25hbDogdHJ1ZSxcbiAgcHJvcHM6IHtcbiAgICBuYW1lOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnZGVmYXVsdCdcbiAgICB9XG4gIH0sXG4gIHJlbmRlcjogZnVuY3Rpb24gcmVuZGVyIChfLCByZWYpIHtcbiAgICB2YXIgcHJvcHMgPSByZWYucHJvcHM7XG4gICAgdmFyIGNoaWxkcmVuID0gcmVmLmNoaWxkcmVuO1xuICAgIHZhciBwYXJlbnQgPSByZWYucGFyZW50O1xuICAgIHZhciBkYXRhID0gcmVmLmRhdGE7XG5cbiAgICAvLyB1c2VkIGJ5IGRldnRvb2xzIHRvIGRpc3BsYXkgYSByb3V0ZXItdmlldyBiYWRnZVxuICAgIGRhdGEucm91dGVyVmlldyA9IHRydWU7XG5cbiAgICAvLyBkaXJlY3RseSB1c2UgcGFyZW50IGNvbnRleHQncyBjcmVhdGVFbGVtZW50KCkgZnVuY3Rpb25cbiAgICAvLyBzbyB0aGF0IGNvbXBvbmVudHMgcmVuZGVyZWQgYnkgcm91dGVyLXZpZXcgY2FuIHJlc29sdmUgbmFtZWQgc2xvdHNcbiAgICB2YXIgaCA9IHBhcmVudC4kY3JlYXRlRWxlbWVudDtcbiAgICB2YXIgbmFtZSA9IHByb3BzLm5hbWU7XG4gICAgdmFyIHJvdXRlID0gcGFyZW50LiRyb3V0ZTtcbiAgICB2YXIgY2FjaGUgPSBwYXJlbnQuX3JvdXRlclZpZXdDYWNoZSB8fCAocGFyZW50Ll9yb3V0ZXJWaWV3Q2FjaGUgPSB7fSk7XG5cbiAgICAvLyBkZXRlcm1pbmUgY3VycmVudCB2aWV3IGRlcHRoLCBhbHNvIGNoZWNrIHRvIHNlZSBpZiB0aGUgdHJlZVxuICAgIC8vIGhhcyBiZWVuIHRvZ2dsZWQgaW5hY3RpdmUgYnV0IGtlcHQtYWxpdmUuXG4gICAgdmFyIGRlcHRoID0gMDtcbiAgICB2YXIgaW5hY3RpdmUgPSBmYWxzZTtcbiAgICB3aGlsZSAocGFyZW50ICYmIHBhcmVudC5fcm91dGVyUm9vdCAhPT0gcGFyZW50KSB7XG4gICAgICB2YXIgdm5vZGVEYXRhID0gcGFyZW50LiR2bm9kZSAmJiBwYXJlbnQuJHZub2RlLmRhdGE7XG4gICAgICBpZiAodm5vZGVEYXRhKSB7XG4gICAgICAgIGlmICh2bm9kZURhdGEucm91dGVyVmlldykge1xuICAgICAgICAgIGRlcHRoKys7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHZub2RlRGF0YS5rZWVwQWxpdmUgJiYgcGFyZW50Ll9pbmFjdGl2ZSkge1xuICAgICAgICAgIGluYWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcGFyZW50ID0gcGFyZW50LiRwYXJlbnQ7XG4gICAgfVxuICAgIGRhdGEucm91dGVyVmlld0RlcHRoID0gZGVwdGg7XG5cbiAgICAvLyByZW5kZXIgcHJldmlvdXMgdmlldyBpZiB0aGUgdHJlZSBpcyBpbmFjdGl2ZSBhbmQga2VwdC1hbGl2ZVxuICAgIGlmIChpbmFjdGl2ZSkge1xuICAgICAgcmV0dXJuIGgoY2FjaGVbbmFtZV0sIGRhdGEsIGNoaWxkcmVuKVxuICAgIH1cblxuICAgIHZhciBtYXRjaGVkID0gcm91dGUubWF0Y2hlZFtkZXB0aF07XG4gICAgLy8gcmVuZGVyIGVtcHR5IG5vZGUgaWYgbm8gbWF0Y2hlZCByb3V0ZVxuICAgIGlmICghbWF0Y2hlZCkge1xuICAgICAgY2FjaGVbbmFtZV0gPSBudWxsO1xuICAgICAgcmV0dXJuIGgoKVxuICAgIH1cblxuICAgIHZhciBjb21wb25lbnQgPSBjYWNoZVtuYW1lXSA9IG1hdGNoZWQuY29tcG9uZW50c1tuYW1lXTtcblxuICAgIC8vIGF0dGFjaCBpbnN0YW5jZSByZWdpc3RyYXRpb24gaG9va1xuICAgIC8vIHRoaXMgd2lsbCBiZSBjYWxsZWQgaW4gdGhlIGluc3RhbmNlJ3MgaW5qZWN0ZWQgbGlmZWN5Y2xlIGhvb2tzXG4gICAgZGF0YS5yZWdpc3RlclJvdXRlSW5zdGFuY2UgPSBmdW5jdGlvbiAodm0sIHZhbCkge1xuICAgICAgLy8gdmFsIGNvdWxkIGJlIHVuZGVmaW5lZCBmb3IgdW5yZWdpc3RyYXRpb25cbiAgICAgIHZhciBjdXJyZW50ID0gbWF0Y2hlZC5pbnN0YW5jZXNbbmFtZV07XG4gICAgICBpZiAoXG4gICAgICAgICh2YWwgJiYgY3VycmVudCAhPT0gdm0pIHx8XG4gICAgICAgICghdmFsICYmIGN1cnJlbnQgPT09IHZtKVxuICAgICAgKSB7XG4gICAgICAgIG1hdGNoZWQuaW5zdGFuY2VzW25hbWVdID0gdmFsO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGFsc28gcmVnaXN0ZXIgaW5zdGFuY2UgaW4gcHJlcGF0Y2ggaG9va1xuICAgIC8vIGluIGNhc2UgdGhlIHNhbWUgY29tcG9uZW50IGluc3RhbmNlIGlzIHJldXNlZCBhY3Jvc3MgZGlmZmVyZW50IHJvdXRlc1xuICAgIDsoZGF0YS5ob29rIHx8IChkYXRhLmhvb2sgPSB7fSkpLnByZXBhdGNoID0gZnVuY3Rpb24gKF8sIHZub2RlKSB7XG4gICAgICBtYXRjaGVkLmluc3RhbmNlc1tuYW1lXSA9IHZub2RlLmNvbXBvbmVudEluc3RhbmNlO1xuICAgIH07XG5cbiAgICAvLyByZWdpc3RlciBpbnN0YW5jZSBpbiBpbml0IGhvb2tcbiAgICAvLyBpbiBjYXNlIGtlcHQtYWxpdmUgY29tcG9uZW50IGJlIGFjdGl2ZWQgd2hlbiByb3V0ZXMgY2hhbmdlZFxuICAgIGRhdGEuaG9vay5pbml0ID0gZnVuY3Rpb24gKHZub2RlKSB7XG4gICAgICBpZiAodm5vZGUuZGF0YS5rZWVwQWxpdmUgJiZcbiAgICAgICAgdm5vZGUuY29tcG9uZW50SW5zdGFuY2UgJiZcbiAgICAgICAgdm5vZGUuY29tcG9uZW50SW5zdGFuY2UgIT09IG1hdGNoZWQuaW5zdGFuY2VzW25hbWVdXG4gICAgICApIHtcbiAgICAgICAgbWF0Y2hlZC5pbnN0YW5jZXNbbmFtZV0gPSB2bm9kZS5jb21wb25lbnRJbnN0YW5jZTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgLy8gcmVzb2x2ZSBwcm9wc1xuICAgIHZhciBwcm9wc1RvUGFzcyA9IGRhdGEucHJvcHMgPSByZXNvbHZlUHJvcHMocm91dGUsIG1hdGNoZWQucHJvcHMgJiYgbWF0Y2hlZC5wcm9wc1tuYW1lXSk7XG4gICAgaWYgKHByb3BzVG9QYXNzKSB7XG4gICAgICAvLyBjbG9uZSB0byBwcmV2ZW50IG11dGF0aW9uXG4gICAgICBwcm9wc1RvUGFzcyA9IGRhdGEucHJvcHMgPSBleHRlbmQoe30sIHByb3BzVG9QYXNzKTtcbiAgICAgIC8vIHBhc3Mgbm9uLWRlY2xhcmVkIHByb3BzIGFzIGF0dHJzXG4gICAgICB2YXIgYXR0cnMgPSBkYXRhLmF0dHJzID0gZGF0YS5hdHRycyB8fCB7fTtcbiAgICAgIGZvciAodmFyIGtleSBpbiBwcm9wc1RvUGFzcykge1xuICAgICAgICBpZiAoIWNvbXBvbmVudC5wcm9wcyB8fCAhKGtleSBpbiBjb21wb25lbnQucHJvcHMpKSB7XG4gICAgICAgICAgYXR0cnNba2V5XSA9IHByb3BzVG9QYXNzW2tleV07XG4gICAgICAgICAgZGVsZXRlIHByb3BzVG9QYXNzW2tleV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gaChjb21wb25lbnQsIGRhdGEsIGNoaWxkcmVuKVxuICB9XG59O1xuXG5mdW5jdGlvbiByZXNvbHZlUHJvcHMgKHJvdXRlLCBjb25maWcpIHtcbiAgc3dpdGNoICh0eXBlb2YgY29uZmlnKSB7XG4gICAgY2FzZSAndW5kZWZpbmVkJzpcbiAgICAgIHJldHVyblxuICAgIGNhc2UgJ29iamVjdCc6XG4gICAgICByZXR1cm4gY29uZmlnXG4gICAgY2FzZSAnZnVuY3Rpb24nOlxuICAgICAgcmV0dXJuIGNvbmZpZyhyb3V0ZSlcbiAgICBjYXNlICdib29sZWFuJzpcbiAgICAgIHJldHVybiBjb25maWcgPyByb3V0ZS5wYXJhbXMgOiB1bmRlZmluZWRcbiAgICBkZWZhdWx0OlxuICAgICAgaWYgKFwicHJvZHVjdGlvblwiICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgd2FybihcbiAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICBcInByb3BzIGluIFxcXCJcIiArIChyb3V0ZS5wYXRoKSArIFwiXFxcIiBpcyBhIFwiICsgKHR5cGVvZiBjb25maWcpICsgXCIsIFwiICtcbiAgICAgICAgICBcImV4cGVjdGluZyBhbiBvYmplY3QsIGZ1bmN0aW9uIG9yIGJvb2xlYW4uXCJcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgfVxufVxuXG4vKiAgKi9cblxudmFyIGVuY29kZVJlc2VydmVSRSA9IC9bIScoKSpdL2c7XG52YXIgZW5jb2RlUmVzZXJ2ZVJlcGxhY2VyID0gZnVuY3Rpb24gKGMpIHsgcmV0dXJuICclJyArIGMuY2hhckNvZGVBdCgwKS50b1N0cmluZygxNik7IH07XG52YXIgY29tbWFSRSA9IC8lMkMvZztcblxuLy8gZml4ZWQgZW5jb2RlVVJJQ29tcG9uZW50IHdoaWNoIGlzIG1vcmUgY29uZm9ybWFudCB0byBSRkMzOTg2OlxuLy8gLSBlc2NhcGVzIFshJygpKl1cbi8vIC0gcHJlc2VydmUgY29tbWFzXG52YXIgZW5jb2RlID0gZnVuY3Rpb24gKHN0cikgeyByZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KHN0cilcbiAgLnJlcGxhY2UoZW5jb2RlUmVzZXJ2ZVJFLCBlbmNvZGVSZXNlcnZlUmVwbGFjZXIpXG4gIC5yZXBsYWNlKGNvbW1hUkUsICcsJyk7IH07XG5cbnZhciBkZWNvZGUgPSBkZWNvZGVVUklDb21wb25lbnQ7XG5cbmZ1bmN0aW9uIHJlc29sdmVRdWVyeSAoXG4gIHF1ZXJ5LFxuICBleHRyYVF1ZXJ5LFxuICBfcGFyc2VRdWVyeVxuKSB7XG4gIGlmICggZXh0cmFRdWVyeSA9PT0gdm9pZCAwICkgZXh0cmFRdWVyeSA9IHt9O1xuXG4gIHZhciBwYXJzZSA9IF9wYXJzZVF1ZXJ5IHx8IHBhcnNlUXVlcnk7XG4gIHZhciBwYXJzZWRRdWVyeTtcbiAgdHJ5IHtcbiAgICBwYXJzZWRRdWVyeSA9IHBhcnNlKHF1ZXJ5IHx8ICcnKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIFwicHJvZHVjdGlvblwiICE9PSAncHJvZHVjdGlvbicgJiYgd2FybihmYWxzZSwgZS5tZXNzYWdlKTtcbiAgICBwYXJzZWRRdWVyeSA9IHt9O1xuICB9XG4gIGZvciAodmFyIGtleSBpbiBleHRyYVF1ZXJ5KSB7XG4gICAgcGFyc2VkUXVlcnlba2V5XSA9IGV4dHJhUXVlcnlba2V5XTtcbiAgfVxuICByZXR1cm4gcGFyc2VkUXVlcnlcbn1cblxuZnVuY3Rpb24gcGFyc2VRdWVyeSAocXVlcnkpIHtcbiAgdmFyIHJlcyA9IHt9O1xuXG4gIHF1ZXJ5ID0gcXVlcnkudHJpbSgpLnJlcGxhY2UoL14oXFw/fCN8JikvLCAnJyk7XG5cbiAgaWYgKCFxdWVyeSkge1xuICAgIHJldHVybiByZXNcbiAgfVxuXG4gIHF1ZXJ5LnNwbGl0KCcmJykuZm9yRWFjaChmdW5jdGlvbiAocGFyYW0pIHtcbiAgICB2YXIgcGFydHMgPSBwYXJhbS5yZXBsYWNlKC9cXCsvZywgJyAnKS5zcGxpdCgnPScpO1xuICAgIHZhciBrZXkgPSBkZWNvZGUocGFydHMuc2hpZnQoKSk7XG4gICAgdmFyIHZhbCA9IHBhcnRzLmxlbmd0aCA+IDBcbiAgICAgID8gZGVjb2RlKHBhcnRzLmpvaW4oJz0nKSlcbiAgICAgIDogbnVsbDtcblxuICAgIGlmIChyZXNba2V5XSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXNba2V5XSA9IHZhbDtcbiAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkocmVzW2tleV0pKSB7XG4gICAgICByZXNba2V5XS5wdXNoKHZhbCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc1trZXldID0gW3Jlc1trZXldLCB2YWxdO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHJlc1xufVxuXG5mdW5jdGlvbiBzdHJpbmdpZnlRdWVyeSAob2JqKSB7XG4gIHZhciByZXMgPSBvYmogPyBPYmplY3Qua2V5cyhvYmopLm1hcChmdW5jdGlvbiAoa2V5KSB7XG4gICAgdmFyIHZhbCA9IG9ialtrZXldO1xuXG4gICAgaWYgKHZhbCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gJydcbiAgICB9XG5cbiAgICBpZiAodmFsID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gZW5jb2RlKGtleSlcbiAgICB9XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWwpKSB7XG4gICAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgICB2YWwuZm9yRWFjaChmdW5jdGlvbiAodmFsMikge1xuICAgICAgICBpZiAodmFsMiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgICAgaWYgKHZhbDIgPT09IG51bGwpIHtcbiAgICAgICAgICByZXN1bHQucHVzaChlbmNvZGUoa2V5KSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzdWx0LnB1c2goZW5jb2RlKGtleSkgKyAnPScgKyBlbmNvZGUodmFsMikpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHJldHVybiByZXN1bHQuam9pbignJicpXG4gICAgfVxuXG4gICAgcmV0dXJuIGVuY29kZShrZXkpICsgJz0nICsgZW5jb2RlKHZhbClcbiAgfSkuZmlsdGVyKGZ1bmN0aW9uICh4KSB7IHJldHVybiB4Lmxlbmd0aCA+IDA7IH0pLmpvaW4oJyYnKSA6IG51bGw7XG4gIHJldHVybiByZXMgPyAoXCI/XCIgKyByZXMpIDogJydcbn1cblxuLyogICovXG5cbnZhciB0cmFpbGluZ1NsYXNoUkUgPSAvXFwvPyQvO1xuXG5mdW5jdGlvbiBjcmVhdGVSb3V0ZSAoXG4gIHJlY29yZCxcbiAgbG9jYXRpb24sXG4gIHJlZGlyZWN0ZWRGcm9tLFxuICByb3V0ZXJcbikge1xuICB2YXIgc3RyaW5naWZ5UXVlcnkgPSByb3V0ZXIgJiYgcm91dGVyLm9wdGlvbnMuc3RyaW5naWZ5UXVlcnk7XG5cbiAgdmFyIHF1ZXJ5ID0gbG9jYXRpb24ucXVlcnkgfHwge307XG4gIHRyeSB7XG4gICAgcXVlcnkgPSBjbG9uZShxdWVyeSk7XG4gIH0gY2F0Y2ggKGUpIHt9XG5cbiAgdmFyIHJvdXRlID0ge1xuICAgIG5hbWU6IGxvY2F0aW9uLm5hbWUgfHwgKHJlY29yZCAmJiByZWNvcmQubmFtZSksXG4gICAgbWV0YTogKHJlY29yZCAmJiByZWNvcmQubWV0YSkgfHwge30sXG4gICAgcGF0aDogbG9jYXRpb24ucGF0aCB8fCAnLycsXG4gICAgaGFzaDogbG9jYXRpb24uaGFzaCB8fCAnJyxcbiAgICBxdWVyeTogcXVlcnksXG4gICAgcGFyYW1zOiBsb2NhdGlvbi5wYXJhbXMgfHwge30sXG4gICAgZnVsbFBhdGg6IGdldEZ1bGxQYXRoKGxvY2F0aW9uLCBzdHJpbmdpZnlRdWVyeSksXG4gICAgbWF0Y2hlZDogcmVjb3JkID8gZm9ybWF0TWF0Y2gocmVjb3JkKSA6IFtdXG4gIH07XG4gIGlmIChyZWRpcmVjdGVkRnJvbSkge1xuICAgIHJvdXRlLnJlZGlyZWN0ZWRGcm9tID0gZ2V0RnVsbFBhdGgocmVkaXJlY3RlZEZyb20sIHN0cmluZ2lmeVF1ZXJ5KTtcbiAgfVxuICByZXR1cm4gT2JqZWN0LmZyZWV6ZShyb3V0ZSlcbn1cblxuZnVuY3Rpb24gY2xvbmUgKHZhbHVlKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgIHJldHVybiB2YWx1ZS5tYXAoY2xvbmUpXG4gIH0gZWxzZSBpZiAodmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgIHZhciByZXMgPSB7fTtcbiAgICBmb3IgKHZhciBrZXkgaW4gdmFsdWUpIHtcbiAgICAgIHJlc1trZXldID0gY2xvbmUodmFsdWVba2V5XSk7XG4gICAgfVxuICAgIHJldHVybiByZXNcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gdmFsdWVcbiAgfVxufVxuXG4vLyB0aGUgc3RhcnRpbmcgcm91dGUgdGhhdCByZXByZXNlbnRzIHRoZSBpbml0aWFsIHN0YXRlXG52YXIgU1RBUlQgPSBjcmVhdGVSb3V0ZShudWxsLCB7XG4gIHBhdGg6ICcvJ1xufSk7XG5cbmZ1bmN0aW9uIGZvcm1hdE1hdGNoIChyZWNvcmQpIHtcbiAgdmFyIHJlcyA9IFtdO1xuICB3aGlsZSAocmVjb3JkKSB7XG4gICAgcmVzLnVuc2hpZnQocmVjb3JkKTtcbiAgICByZWNvcmQgPSByZWNvcmQucGFyZW50O1xuICB9XG4gIHJldHVybiByZXNcbn1cblxuZnVuY3Rpb24gZ2V0RnVsbFBhdGggKFxuICByZWYsXG4gIF9zdHJpbmdpZnlRdWVyeVxuKSB7XG4gIHZhciBwYXRoID0gcmVmLnBhdGg7XG4gIHZhciBxdWVyeSA9IHJlZi5xdWVyeTsgaWYgKCBxdWVyeSA9PT0gdm9pZCAwICkgcXVlcnkgPSB7fTtcbiAgdmFyIGhhc2ggPSByZWYuaGFzaDsgaWYgKCBoYXNoID09PSB2b2lkIDAgKSBoYXNoID0gJyc7XG5cbiAgdmFyIHN0cmluZ2lmeSA9IF9zdHJpbmdpZnlRdWVyeSB8fCBzdHJpbmdpZnlRdWVyeTtcbiAgcmV0dXJuIChwYXRoIHx8ICcvJykgKyBzdHJpbmdpZnkocXVlcnkpICsgaGFzaFxufVxuXG5mdW5jdGlvbiBpc1NhbWVSb3V0ZSAoYSwgYikge1xuICBpZiAoYiA9PT0gU1RBUlQpIHtcbiAgICByZXR1cm4gYSA9PT0gYlxuICB9IGVsc2UgaWYgKCFiKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH0gZWxzZSBpZiAoYS5wYXRoICYmIGIucGF0aCkge1xuICAgIHJldHVybiAoXG4gICAgICBhLnBhdGgucmVwbGFjZSh0cmFpbGluZ1NsYXNoUkUsICcnKSA9PT0gYi5wYXRoLnJlcGxhY2UodHJhaWxpbmdTbGFzaFJFLCAnJykgJiZcbiAgICAgIGEuaGFzaCA9PT0gYi5oYXNoICYmXG4gICAgICBpc09iamVjdEVxdWFsKGEucXVlcnksIGIucXVlcnkpXG4gICAgKVxuICB9IGVsc2UgaWYgKGEubmFtZSAmJiBiLm5hbWUpIHtcbiAgICByZXR1cm4gKFxuICAgICAgYS5uYW1lID09PSBiLm5hbWUgJiZcbiAgICAgIGEuaGFzaCA9PT0gYi5oYXNoICYmXG4gICAgICBpc09iamVjdEVxdWFsKGEucXVlcnksIGIucXVlcnkpICYmXG4gICAgICBpc09iamVjdEVxdWFsKGEucGFyYW1zLCBiLnBhcmFtcylcbiAgICApXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbn1cblxuZnVuY3Rpb24gaXNPYmplY3RFcXVhbCAoYSwgYikge1xuICBpZiAoIGEgPT09IHZvaWQgMCApIGEgPSB7fTtcbiAgaWYgKCBiID09PSB2b2lkIDAgKSBiID0ge307XG5cbiAgLy8gaGFuZGxlIG51bGwgdmFsdWUgIzE1NjZcbiAgaWYgKCFhIHx8ICFiKSB7IHJldHVybiBhID09PSBiIH1cbiAgdmFyIGFLZXlzID0gT2JqZWN0LmtleXMoYSk7XG4gIHZhciBiS2V5cyA9IE9iamVjdC5rZXlzKGIpO1xuICBpZiAoYUtleXMubGVuZ3RoICE9PSBiS2V5cy5sZW5ndGgpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuICByZXR1cm4gYUtleXMuZXZlcnkoZnVuY3Rpb24gKGtleSkge1xuICAgIHZhciBhVmFsID0gYVtrZXldO1xuICAgIHZhciBiVmFsID0gYltrZXldO1xuICAgIC8vIGNoZWNrIG5lc3RlZCBlcXVhbGl0eVxuICAgIGlmICh0eXBlb2YgYVZhbCA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIGJWYWwgPT09ICdvYmplY3QnKSB7XG4gICAgICByZXR1cm4gaXNPYmplY3RFcXVhbChhVmFsLCBiVmFsKVxuICAgIH1cbiAgICByZXR1cm4gU3RyaW5nKGFWYWwpID09PSBTdHJpbmcoYlZhbClcbiAgfSlcbn1cblxuZnVuY3Rpb24gaXNJbmNsdWRlZFJvdXRlIChjdXJyZW50LCB0YXJnZXQpIHtcbiAgcmV0dXJuIChcbiAgICBjdXJyZW50LnBhdGgucmVwbGFjZSh0cmFpbGluZ1NsYXNoUkUsICcvJykuaW5kZXhPZihcbiAgICAgIHRhcmdldC5wYXRoLnJlcGxhY2UodHJhaWxpbmdTbGFzaFJFLCAnLycpXG4gICAgKSA9PT0gMCAmJlxuICAgICghdGFyZ2V0Lmhhc2ggfHwgY3VycmVudC5oYXNoID09PSB0YXJnZXQuaGFzaCkgJiZcbiAgICBxdWVyeUluY2x1ZGVzKGN1cnJlbnQucXVlcnksIHRhcmdldC5xdWVyeSlcbiAgKVxufVxuXG5mdW5jdGlvbiBxdWVyeUluY2x1ZGVzIChjdXJyZW50LCB0YXJnZXQpIHtcbiAgZm9yICh2YXIga2V5IGluIHRhcmdldCkge1xuICAgIGlmICghKGtleSBpbiBjdXJyZW50KSkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICB9XG4gIHJldHVybiB0cnVlXG59XG5cbi8qICAqL1xuXG5mdW5jdGlvbiByZXNvbHZlUGF0aCAoXG4gIHJlbGF0aXZlLFxuICBiYXNlLFxuICBhcHBlbmRcbikge1xuICB2YXIgZmlyc3RDaGFyID0gcmVsYXRpdmUuY2hhckF0KDApO1xuICBpZiAoZmlyc3RDaGFyID09PSAnLycpIHtcbiAgICByZXR1cm4gcmVsYXRpdmVcbiAgfVxuXG4gIGlmIChmaXJzdENoYXIgPT09ICc/JyB8fCBmaXJzdENoYXIgPT09ICcjJykge1xuICAgIHJldHVybiBiYXNlICsgcmVsYXRpdmVcbiAgfVxuXG4gIHZhciBzdGFjayA9IGJhc2Uuc3BsaXQoJy8nKTtcblxuICAvLyByZW1vdmUgdHJhaWxpbmcgc2VnbWVudCBpZjpcbiAgLy8gLSBub3QgYXBwZW5kaW5nXG4gIC8vIC0gYXBwZW5kaW5nIHRvIHRyYWlsaW5nIHNsYXNoIChsYXN0IHNlZ21lbnQgaXMgZW1wdHkpXG4gIGlmICghYXBwZW5kIHx8ICFzdGFja1tzdGFjay5sZW5ndGggLSAxXSkge1xuICAgIHN0YWNrLnBvcCgpO1xuICB9XG5cbiAgLy8gcmVzb2x2ZSByZWxhdGl2ZSBwYXRoXG4gIHZhciBzZWdtZW50cyA9IHJlbGF0aXZlLnJlcGxhY2UoL15cXC8vLCAnJykuc3BsaXQoJy8nKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzZWdtZW50cy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBzZWdtZW50ID0gc2VnbWVudHNbaV07XG4gICAgaWYgKHNlZ21lbnQgPT09ICcuLicpIHtcbiAgICAgIHN0YWNrLnBvcCgpO1xuICAgIH0gZWxzZSBpZiAoc2VnbWVudCAhPT0gJy4nKSB7XG4gICAgICBzdGFjay5wdXNoKHNlZ21lbnQpO1xuICAgIH1cbiAgfVxuXG4gIC8vIGVuc3VyZSBsZWFkaW5nIHNsYXNoXG4gIGlmIChzdGFja1swXSAhPT0gJycpIHtcbiAgICBzdGFjay51bnNoaWZ0KCcnKTtcbiAgfVxuXG4gIHJldHVybiBzdGFjay5qb2luKCcvJylcbn1cblxuZnVuY3Rpb24gcGFyc2VQYXRoIChwYXRoKSB7XG4gIHZhciBoYXNoID0gJyc7XG4gIHZhciBxdWVyeSA9ICcnO1xuXG4gIHZhciBoYXNoSW5kZXggPSBwYXRoLmluZGV4T2YoJyMnKTtcbiAgaWYgKGhhc2hJbmRleCA+PSAwKSB7XG4gICAgaGFzaCA9IHBhdGguc2xpY2UoaGFzaEluZGV4KTtcbiAgICBwYXRoID0gcGF0aC5zbGljZSgwLCBoYXNoSW5kZXgpO1xuICB9XG5cbiAgdmFyIHF1ZXJ5SW5kZXggPSBwYXRoLmluZGV4T2YoJz8nKTtcbiAgaWYgKHF1ZXJ5SW5kZXggPj0gMCkge1xuICAgIHF1ZXJ5ID0gcGF0aC5zbGljZShxdWVyeUluZGV4ICsgMSk7XG4gICAgcGF0aCA9IHBhdGguc2xpY2UoMCwgcXVlcnlJbmRleCk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHBhdGg6IHBhdGgsXG4gICAgcXVlcnk6IHF1ZXJ5LFxuICAgIGhhc2g6IGhhc2hcbiAgfVxufVxuXG5mdW5jdGlvbiBjbGVhblBhdGggKHBhdGgpIHtcbiAgcmV0dXJuIHBhdGgucmVwbGFjZSgvXFwvXFwvL2csICcvJylcbn1cblxudmFyIGlzYXJyYXkgPSBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uIChhcnIpIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChhcnIpID09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuXG4vKipcbiAqIEV4cG9zZSBgcGF0aFRvUmVnZXhwYC5cbiAqL1xudmFyIHBhdGhUb1JlZ2V4cF8xID0gcGF0aFRvUmVnZXhwO1xudmFyIHBhcnNlXzEgPSBwYXJzZTtcbnZhciBjb21waWxlXzEgPSBjb21waWxlO1xudmFyIHRva2Vuc1RvRnVuY3Rpb25fMSA9IHRva2Vuc1RvRnVuY3Rpb247XG52YXIgdG9rZW5zVG9SZWdFeHBfMSA9IHRva2Vuc1RvUmVnRXhwO1xuXG4vKipcbiAqIFRoZSBtYWluIHBhdGggbWF0Y2hpbmcgcmVnZXhwIHV0aWxpdHkuXG4gKlxuICogQHR5cGUge1JlZ0V4cH1cbiAqL1xudmFyIFBBVEhfUkVHRVhQID0gbmV3IFJlZ0V4cChbXG4gIC8vIE1hdGNoIGVzY2FwZWQgY2hhcmFjdGVycyB0aGF0IHdvdWxkIG90aGVyd2lzZSBhcHBlYXIgaW4gZnV0dXJlIG1hdGNoZXMuXG4gIC8vIFRoaXMgYWxsb3dzIHRoZSB1c2VyIHRvIGVzY2FwZSBzcGVjaWFsIGNoYXJhY3RlcnMgdGhhdCB3b24ndCB0cmFuc2Zvcm0uXG4gICcoXFxcXFxcXFwuKScsXG4gIC8vIE1hdGNoIEV4cHJlc3Mtc3R5bGUgcGFyYW1ldGVycyBhbmQgdW4tbmFtZWQgcGFyYW1ldGVycyB3aXRoIGEgcHJlZml4XG4gIC8vIGFuZCBvcHRpb25hbCBzdWZmaXhlcy4gTWF0Y2hlcyBhcHBlYXIgYXM6XG4gIC8vXG4gIC8vIFwiLzp0ZXN0KFxcXFxkKyk/XCIgPT4gW1wiL1wiLCBcInRlc3RcIiwgXCJcXGQrXCIsIHVuZGVmaW5lZCwgXCI/XCIsIHVuZGVmaW5lZF1cbiAgLy8gXCIvcm91dGUoXFxcXGQrKVwiICA9PiBbdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgXCJcXGQrXCIsIHVuZGVmaW5lZCwgdW5kZWZpbmVkXVxuICAvLyBcIi8qXCIgICAgICAgICAgICA9PiBbXCIvXCIsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgXCIqXCJdXG4gICcoW1xcXFwvLl0pPyg/Oig/OlxcXFw6KFxcXFx3KykoPzpcXFxcKCgoPzpcXFxcXFxcXC58W15cXFxcXFxcXCgpXSkrKVxcXFwpKT98XFxcXCgoKD86XFxcXFxcXFwufFteXFxcXFxcXFwoKV0pKylcXFxcKSkoWysqP10pP3woXFxcXCopKSdcbl0uam9pbignfCcpLCAnZycpO1xuXG4vKipcbiAqIFBhcnNlIGEgc3RyaW5nIGZvciB0aGUgcmF3IHRva2Vucy5cbiAqXG4gKiBAcGFyYW0gIHtzdHJpbmd9ICBzdHJcbiAqIEBwYXJhbSAge09iamVjdD19IG9wdGlvbnNcbiAqIEByZXR1cm4geyFBcnJheX1cbiAqL1xuZnVuY3Rpb24gcGFyc2UgKHN0ciwgb3B0aW9ucykge1xuICB2YXIgdG9rZW5zID0gW107XG4gIHZhciBrZXkgPSAwO1xuICB2YXIgaW5kZXggPSAwO1xuICB2YXIgcGF0aCA9ICcnO1xuICB2YXIgZGVmYXVsdERlbGltaXRlciA9IG9wdGlvbnMgJiYgb3B0aW9ucy5kZWxpbWl0ZXIgfHwgJy8nO1xuICB2YXIgcmVzO1xuXG4gIHdoaWxlICgocmVzID0gUEFUSF9SRUdFWFAuZXhlYyhzdHIpKSAhPSBudWxsKSB7XG4gICAgdmFyIG0gPSByZXNbMF07XG4gICAgdmFyIGVzY2FwZWQgPSByZXNbMV07XG4gICAgdmFyIG9mZnNldCA9IHJlcy5pbmRleDtcbiAgICBwYXRoICs9IHN0ci5zbGljZShpbmRleCwgb2Zmc2V0KTtcbiAgICBpbmRleCA9IG9mZnNldCArIG0ubGVuZ3RoO1xuXG4gICAgLy8gSWdub3JlIGFscmVhZHkgZXNjYXBlZCBzZXF1ZW5jZXMuXG4gICAgaWYgKGVzY2FwZWQpIHtcbiAgICAgIHBhdGggKz0gZXNjYXBlZFsxXTtcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuXG4gICAgdmFyIG5leHQgPSBzdHJbaW5kZXhdO1xuICAgIHZhciBwcmVmaXggPSByZXNbMl07XG4gICAgdmFyIG5hbWUgPSByZXNbM107XG4gICAgdmFyIGNhcHR1cmUgPSByZXNbNF07XG4gICAgdmFyIGdyb3VwID0gcmVzWzVdO1xuICAgIHZhciBtb2RpZmllciA9IHJlc1s2XTtcbiAgICB2YXIgYXN0ZXJpc2sgPSByZXNbN107XG5cbiAgICAvLyBQdXNoIHRoZSBjdXJyZW50IHBhdGggb250byB0aGUgdG9rZW5zLlxuICAgIGlmIChwYXRoKSB7XG4gICAgICB0b2tlbnMucHVzaChwYXRoKTtcbiAgICAgIHBhdGggPSAnJztcbiAgICB9XG5cbiAgICB2YXIgcGFydGlhbCA9IHByZWZpeCAhPSBudWxsICYmIG5leHQgIT0gbnVsbCAmJiBuZXh0ICE9PSBwcmVmaXg7XG4gICAgdmFyIHJlcGVhdCA9IG1vZGlmaWVyID09PSAnKycgfHwgbW9kaWZpZXIgPT09ICcqJztcbiAgICB2YXIgb3B0aW9uYWwgPSBtb2RpZmllciA9PT0gJz8nIHx8IG1vZGlmaWVyID09PSAnKic7XG4gICAgdmFyIGRlbGltaXRlciA9IHJlc1syXSB8fCBkZWZhdWx0RGVsaW1pdGVyO1xuICAgIHZhciBwYXR0ZXJuID0gY2FwdHVyZSB8fCBncm91cDtcblxuICAgIHRva2Vucy5wdXNoKHtcbiAgICAgIG5hbWU6IG5hbWUgfHwga2V5KyssXG4gICAgICBwcmVmaXg6IHByZWZpeCB8fCAnJyxcbiAgICAgIGRlbGltaXRlcjogZGVsaW1pdGVyLFxuICAgICAgb3B0aW9uYWw6IG9wdGlvbmFsLFxuICAgICAgcmVwZWF0OiByZXBlYXQsXG4gICAgICBwYXJ0aWFsOiBwYXJ0aWFsLFxuICAgICAgYXN0ZXJpc2s6ICEhYXN0ZXJpc2ssXG4gICAgICBwYXR0ZXJuOiBwYXR0ZXJuID8gZXNjYXBlR3JvdXAocGF0dGVybikgOiAoYXN0ZXJpc2sgPyAnLionIDogJ1teJyArIGVzY2FwZVN0cmluZyhkZWxpbWl0ZXIpICsgJ10rPycpXG4gICAgfSk7XG4gIH1cblxuICAvLyBNYXRjaCBhbnkgY2hhcmFjdGVycyBzdGlsbCByZW1haW5pbmcuXG4gIGlmIChpbmRleCA8IHN0ci5sZW5ndGgpIHtcbiAgICBwYXRoICs9IHN0ci5zdWJzdHIoaW5kZXgpO1xuICB9XG5cbiAgLy8gSWYgdGhlIHBhdGggZXhpc3RzLCBwdXNoIGl0IG9udG8gdGhlIGVuZC5cbiAgaWYgKHBhdGgpIHtcbiAgICB0b2tlbnMucHVzaChwYXRoKTtcbiAgfVxuXG4gIHJldHVybiB0b2tlbnNcbn1cblxuLyoqXG4gKiBDb21waWxlIGEgc3RyaW5nIHRvIGEgdGVtcGxhdGUgZnVuY3Rpb24gZm9yIHRoZSBwYXRoLlxuICpcbiAqIEBwYXJhbSAge3N0cmluZ30gICAgICAgICAgICAgc3RyXG4gKiBAcGFyYW0gIHtPYmplY3Q9fSAgICAgICAgICAgIG9wdGlvbnNcbiAqIEByZXR1cm4geyFmdW5jdGlvbihPYmplY3Q9LCBPYmplY3Q9KX1cbiAqL1xuZnVuY3Rpb24gY29tcGlsZSAoc3RyLCBvcHRpb25zKSB7XG4gIHJldHVybiB0b2tlbnNUb0Z1bmN0aW9uKHBhcnNlKHN0ciwgb3B0aW9ucykpXG59XG5cbi8qKlxuICogUHJldHRpZXIgZW5jb2Rpbmcgb2YgVVJJIHBhdGggc2VnbWVudHMuXG4gKlxuICogQHBhcmFtICB7c3RyaW5nfVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBlbmNvZGVVUklDb21wb25lbnRQcmV0dHkgKHN0cikge1xuICByZXR1cm4gZW5jb2RlVVJJKHN0cikucmVwbGFjZSgvW1xcLz8jXS9nLCBmdW5jdGlvbiAoYykge1xuICAgIHJldHVybiAnJScgKyBjLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKClcbiAgfSlcbn1cblxuLyoqXG4gKiBFbmNvZGUgdGhlIGFzdGVyaXNrIHBhcmFtZXRlci4gU2ltaWxhciB0byBgcHJldHR5YCwgYnV0IGFsbG93cyBzbGFzaGVzLlxuICpcbiAqIEBwYXJhbSAge3N0cmluZ31cbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZW5jb2RlQXN0ZXJpc2sgKHN0cikge1xuICByZXR1cm4gZW5jb2RlVVJJKHN0cikucmVwbGFjZSgvWz8jXS9nLCBmdW5jdGlvbiAoYykge1xuICAgIHJldHVybiAnJScgKyBjLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKClcbiAgfSlcbn1cblxuLyoqXG4gKiBFeHBvc2UgYSBtZXRob2QgZm9yIHRyYW5zZm9ybWluZyB0b2tlbnMgaW50byB0aGUgcGF0aCBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gdG9rZW5zVG9GdW5jdGlvbiAodG9rZW5zKSB7XG4gIC8vIENvbXBpbGUgYWxsIHRoZSB0b2tlbnMgaW50byByZWdleHBzLlxuICB2YXIgbWF0Y2hlcyA9IG5ldyBBcnJheSh0b2tlbnMubGVuZ3RoKTtcblxuICAvLyBDb21waWxlIGFsbCB0aGUgcGF0dGVybnMgYmVmb3JlIGNvbXBpbGF0aW9uLlxuICBmb3IgKHZhciBpID0gMDsgaSA8IHRva2Vucy5sZW5ndGg7IGkrKykge1xuICAgIGlmICh0eXBlb2YgdG9rZW5zW2ldID09PSAnb2JqZWN0Jykge1xuICAgICAgbWF0Y2hlc1tpXSA9IG5ldyBSZWdFeHAoJ14oPzonICsgdG9rZW5zW2ldLnBhdHRlcm4gKyAnKSQnKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb24gKG9iaiwgb3B0cykge1xuICAgIHZhciBwYXRoID0gJyc7XG4gICAgdmFyIGRhdGEgPSBvYmogfHwge307XG4gICAgdmFyIG9wdGlvbnMgPSBvcHRzIHx8IHt9O1xuICAgIHZhciBlbmNvZGUgPSBvcHRpb25zLnByZXR0eSA/IGVuY29kZVVSSUNvbXBvbmVudFByZXR0eSA6IGVuY29kZVVSSUNvbXBvbmVudDtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdG9rZW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgdG9rZW4gPSB0b2tlbnNbaV07XG5cbiAgICAgIGlmICh0eXBlb2YgdG9rZW4gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHBhdGggKz0gdG9rZW47XG5cbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgdmFyIHZhbHVlID0gZGF0YVt0b2tlbi5uYW1lXTtcbiAgICAgIHZhciBzZWdtZW50O1xuXG4gICAgICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgICAgICBpZiAodG9rZW4ub3B0aW9uYWwpIHtcbiAgICAgICAgICAvLyBQcmVwZW5kIHBhcnRpYWwgc2VnbWVudCBwcmVmaXhlcy5cbiAgICAgICAgICBpZiAodG9rZW4ucGFydGlhbCkge1xuICAgICAgICAgICAgcGF0aCArPSB0b2tlbi5wcmVmaXg7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBcIicgKyB0b2tlbi5uYW1lICsgJ1wiIHRvIGJlIGRlZmluZWQnKVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChpc2FycmF5KHZhbHVlKSkge1xuICAgICAgICBpZiAoIXRva2VuLnJlcGVhdCkge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIFwiJyArIHRva2VuLm5hbWUgKyAnXCIgdG8gbm90IHJlcGVhdCwgYnV0IHJlY2VpdmVkIGAnICsgSlNPTi5zdHJpbmdpZnkodmFsdWUpICsgJ2AnKVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIGlmICh0b2tlbi5vcHRpb25hbCkge1xuICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgXCInICsgdG9rZW4ubmFtZSArICdcIiB0byBub3QgYmUgZW1wdHknKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdmFsdWUubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICBzZWdtZW50ID0gZW5jb2RlKHZhbHVlW2pdKTtcblxuICAgICAgICAgIGlmICghbWF0Y2hlc1tpXS50ZXN0KHNlZ21lbnQpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBhbGwgXCInICsgdG9rZW4ubmFtZSArICdcIiB0byBtYXRjaCBcIicgKyB0b2tlbi5wYXR0ZXJuICsgJ1wiLCBidXQgcmVjZWl2ZWQgYCcgKyBKU09OLnN0cmluZ2lmeShzZWdtZW50KSArICdgJylcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBwYXRoICs9IChqID09PSAwID8gdG9rZW4ucHJlZml4IDogdG9rZW4uZGVsaW1pdGVyKSArIHNlZ21lbnQ7XG4gICAgICAgIH1cblxuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICBzZWdtZW50ID0gdG9rZW4uYXN0ZXJpc2sgPyBlbmNvZGVBc3Rlcmlzayh2YWx1ZSkgOiBlbmNvZGUodmFsdWUpO1xuXG4gICAgICBpZiAoIW1hdGNoZXNbaV0udGVzdChzZWdtZW50KSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBcIicgKyB0b2tlbi5uYW1lICsgJ1wiIHRvIG1hdGNoIFwiJyArIHRva2VuLnBhdHRlcm4gKyAnXCIsIGJ1dCByZWNlaXZlZCBcIicgKyBzZWdtZW50ICsgJ1wiJylcbiAgICAgIH1cblxuICAgICAgcGF0aCArPSB0b2tlbi5wcmVmaXggKyBzZWdtZW50O1xuICAgIH1cblxuICAgIHJldHVybiBwYXRoXG4gIH1cbn1cblxuLyoqXG4gKiBFc2NhcGUgYSByZWd1bGFyIGV4cHJlc3Npb24gc3RyaW5nLlxuICpcbiAqIEBwYXJhbSAge3N0cmluZ30gc3RyXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGVzY2FwZVN0cmluZyAoc3RyKSB7XG4gIHJldHVybiBzdHIucmVwbGFjZSgvKFsuKyo/PV4hOiR7fSgpW1xcXXxcXC9cXFxcXSkvZywgJ1xcXFwkMScpXG59XG5cbi8qKlxuICogRXNjYXBlIHRoZSBjYXB0dXJpbmcgZ3JvdXAgYnkgZXNjYXBpbmcgc3BlY2lhbCBjaGFyYWN0ZXJzIGFuZCBtZWFuaW5nLlxuICpcbiAqIEBwYXJhbSAge3N0cmluZ30gZ3JvdXBcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZXNjYXBlR3JvdXAgKGdyb3VwKSB7XG4gIHJldHVybiBncm91cC5yZXBsYWNlKC8oWz0hOiRcXC8oKV0pL2csICdcXFxcJDEnKVxufVxuXG4vKipcbiAqIEF0dGFjaCB0aGUga2V5cyBhcyBhIHByb3BlcnR5IG9mIHRoZSByZWdleHAuXG4gKlxuICogQHBhcmFtICB7IVJlZ0V4cH0gcmVcbiAqIEBwYXJhbSAge0FycmF5fSAgIGtleXNcbiAqIEByZXR1cm4geyFSZWdFeHB9XG4gKi9cbmZ1bmN0aW9uIGF0dGFjaEtleXMgKHJlLCBrZXlzKSB7XG4gIHJlLmtleXMgPSBrZXlzO1xuICByZXR1cm4gcmVcbn1cblxuLyoqXG4gKiBHZXQgdGhlIGZsYWdzIGZvciBhIHJlZ2V4cCBmcm9tIHRoZSBvcHRpb25zLlxuICpcbiAqIEBwYXJhbSAge09iamVjdH0gb3B0aW9uc1xuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBmbGFncyAob3B0aW9ucykge1xuICByZXR1cm4gb3B0aW9ucy5zZW5zaXRpdmUgPyAnJyA6ICdpJ1xufVxuXG4vKipcbiAqIFB1bGwgb3V0IGtleXMgZnJvbSBhIHJlZ2V4cC5cbiAqXG4gKiBAcGFyYW0gIHshUmVnRXhwfSBwYXRoXG4gKiBAcGFyYW0gIHshQXJyYXl9ICBrZXlzXG4gKiBAcmV0dXJuIHshUmVnRXhwfVxuICovXG5mdW5jdGlvbiByZWdleHBUb1JlZ2V4cCAocGF0aCwga2V5cykge1xuICAvLyBVc2UgYSBuZWdhdGl2ZSBsb29rYWhlYWQgdG8gbWF0Y2ggb25seSBjYXB0dXJpbmcgZ3JvdXBzLlxuICB2YXIgZ3JvdXBzID0gcGF0aC5zb3VyY2UubWF0Y2goL1xcKCg/IVxcPykvZyk7XG5cbiAgaWYgKGdyb3Vwcykge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZ3JvdXBzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBrZXlzLnB1c2goe1xuICAgICAgICBuYW1lOiBpLFxuICAgICAgICBwcmVmaXg6IG51bGwsXG4gICAgICAgIGRlbGltaXRlcjogbnVsbCxcbiAgICAgICAgb3B0aW9uYWw6IGZhbHNlLFxuICAgICAgICByZXBlYXQ6IGZhbHNlLFxuICAgICAgICBwYXJ0aWFsOiBmYWxzZSxcbiAgICAgICAgYXN0ZXJpc2s6IGZhbHNlLFxuICAgICAgICBwYXR0ZXJuOiBudWxsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gYXR0YWNoS2V5cyhwYXRoLCBrZXlzKVxufVxuXG4vKipcbiAqIFRyYW5zZm9ybSBhbiBhcnJheSBpbnRvIGEgcmVnZXhwLlxuICpcbiAqIEBwYXJhbSAgeyFBcnJheX0gIHBhdGhcbiAqIEBwYXJhbSAge0FycmF5fSAgIGtleXNcbiAqIEBwYXJhbSAgeyFPYmplY3R9IG9wdGlvbnNcbiAqIEByZXR1cm4geyFSZWdFeHB9XG4gKi9cbmZ1bmN0aW9uIGFycmF5VG9SZWdleHAgKHBhdGgsIGtleXMsIG9wdGlvbnMpIHtcbiAgdmFyIHBhcnRzID0gW107XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYXRoLmxlbmd0aDsgaSsrKSB7XG4gICAgcGFydHMucHVzaChwYXRoVG9SZWdleHAocGF0aFtpXSwga2V5cywgb3B0aW9ucykuc291cmNlKTtcbiAgfVxuXG4gIHZhciByZWdleHAgPSBuZXcgUmVnRXhwKCcoPzonICsgcGFydHMuam9pbignfCcpICsgJyknLCBmbGFncyhvcHRpb25zKSk7XG5cbiAgcmV0dXJuIGF0dGFjaEtleXMocmVnZXhwLCBrZXlzKVxufVxuXG4vKipcbiAqIENyZWF0ZSBhIHBhdGggcmVnZXhwIGZyb20gc3RyaW5nIGlucHV0LlxuICpcbiAqIEBwYXJhbSAge3N0cmluZ30gIHBhdGhcbiAqIEBwYXJhbSAgeyFBcnJheX0gIGtleXNcbiAqIEBwYXJhbSAgeyFPYmplY3R9IG9wdGlvbnNcbiAqIEByZXR1cm4geyFSZWdFeHB9XG4gKi9cbmZ1bmN0aW9uIHN0cmluZ1RvUmVnZXhwIChwYXRoLCBrZXlzLCBvcHRpb25zKSB7XG4gIHJldHVybiB0b2tlbnNUb1JlZ0V4cChwYXJzZShwYXRoLCBvcHRpb25zKSwga2V5cywgb3B0aW9ucylcbn1cblxuLyoqXG4gKiBFeHBvc2UgYSBmdW5jdGlvbiBmb3IgdGFraW5nIHRva2VucyBhbmQgcmV0dXJuaW5nIGEgUmVnRXhwLlxuICpcbiAqIEBwYXJhbSAgeyFBcnJheX0gICAgICAgICAgdG9rZW5zXG4gKiBAcGFyYW0gIHsoQXJyYXl8T2JqZWN0KT19IGtleXNcbiAqIEBwYXJhbSAge09iamVjdD19ICAgICAgICAgb3B0aW9uc1xuICogQHJldHVybiB7IVJlZ0V4cH1cbiAqL1xuZnVuY3Rpb24gdG9rZW5zVG9SZWdFeHAgKHRva2Vucywga2V5cywgb3B0aW9ucykge1xuICBpZiAoIWlzYXJyYXkoa2V5cykpIHtcbiAgICBvcHRpb25zID0gLyoqIEB0eXBlIHshT2JqZWN0fSAqLyAoa2V5cyB8fCBvcHRpb25zKTtcbiAgICBrZXlzID0gW107XG4gIH1cblxuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICB2YXIgc3RyaWN0ID0gb3B0aW9ucy5zdHJpY3Q7XG4gIHZhciBlbmQgPSBvcHRpb25zLmVuZCAhPT0gZmFsc2U7XG4gIHZhciByb3V0ZSA9ICcnO1xuXG4gIC8vIEl0ZXJhdGUgb3ZlciB0aGUgdG9rZW5zIGFuZCBjcmVhdGUgb3VyIHJlZ2V4cCBzdHJpbmcuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdG9rZW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHRva2VuID0gdG9rZW5zW2ldO1xuXG4gICAgaWYgKHR5cGVvZiB0b2tlbiA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJvdXRlICs9IGVzY2FwZVN0cmluZyh0b2tlbik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBwcmVmaXggPSBlc2NhcGVTdHJpbmcodG9rZW4ucHJlZml4KTtcbiAgICAgIHZhciBjYXB0dXJlID0gJyg/OicgKyB0b2tlbi5wYXR0ZXJuICsgJyknO1xuXG4gICAgICBrZXlzLnB1c2godG9rZW4pO1xuXG4gICAgICBpZiAodG9rZW4ucmVwZWF0KSB7XG4gICAgICAgIGNhcHR1cmUgKz0gJyg/OicgKyBwcmVmaXggKyBjYXB0dXJlICsgJykqJztcbiAgICAgIH1cblxuICAgICAgaWYgKHRva2VuLm9wdGlvbmFsKSB7XG4gICAgICAgIGlmICghdG9rZW4ucGFydGlhbCkge1xuICAgICAgICAgIGNhcHR1cmUgPSAnKD86JyArIHByZWZpeCArICcoJyArIGNhcHR1cmUgKyAnKSk/JztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjYXB0dXJlID0gcHJlZml4ICsgJygnICsgY2FwdHVyZSArICcpPyc7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNhcHR1cmUgPSBwcmVmaXggKyAnKCcgKyBjYXB0dXJlICsgJyknO1xuICAgICAgfVxuXG4gICAgICByb3V0ZSArPSBjYXB0dXJlO1xuICAgIH1cbiAgfVxuXG4gIHZhciBkZWxpbWl0ZXIgPSBlc2NhcGVTdHJpbmcob3B0aW9ucy5kZWxpbWl0ZXIgfHwgJy8nKTtcbiAgdmFyIGVuZHNXaXRoRGVsaW1pdGVyID0gcm91dGUuc2xpY2UoLWRlbGltaXRlci5sZW5ndGgpID09PSBkZWxpbWl0ZXI7XG5cbiAgLy8gSW4gbm9uLXN0cmljdCBtb2RlIHdlIGFsbG93IGEgc2xhc2ggYXQgdGhlIGVuZCBvZiBtYXRjaC4gSWYgdGhlIHBhdGggdG9cbiAgLy8gbWF0Y2ggYWxyZWFkeSBlbmRzIHdpdGggYSBzbGFzaCwgd2UgcmVtb3ZlIGl0IGZvciBjb25zaXN0ZW5jeS4gVGhlIHNsYXNoXG4gIC8vIGlzIHZhbGlkIGF0IHRoZSBlbmQgb2YgYSBwYXRoIG1hdGNoLCBub3QgaW4gdGhlIG1pZGRsZS4gVGhpcyBpcyBpbXBvcnRhbnRcbiAgLy8gaW4gbm9uLWVuZGluZyBtb2RlLCB3aGVyZSBcIi90ZXN0L1wiIHNob3VsZG4ndCBtYXRjaCBcIi90ZXN0Ly9yb3V0ZVwiLlxuICBpZiAoIXN0cmljdCkge1xuICAgIHJvdXRlID0gKGVuZHNXaXRoRGVsaW1pdGVyID8gcm91dGUuc2xpY2UoMCwgLWRlbGltaXRlci5sZW5ndGgpIDogcm91dGUpICsgJyg/OicgKyBkZWxpbWl0ZXIgKyAnKD89JCkpPyc7XG4gIH1cblxuICBpZiAoZW5kKSB7XG4gICAgcm91dGUgKz0gJyQnO1xuICB9IGVsc2Uge1xuICAgIC8vIEluIG5vbi1lbmRpbmcgbW9kZSwgd2UgbmVlZCB0aGUgY2FwdHVyaW5nIGdyb3VwcyB0byBtYXRjaCBhcyBtdWNoIGFzXG4gICAgLy8gcG9zc2libGUgYnkgdXNpbmcgYSBwb3NpdGl2ZSBsb29rYWhlYWQgdG8gdGhlIGVuZCBvciBuZXh0IHBhdGggc2VnbWVudC5cbiAgICByb3V0ZSArPSBzdHJpY3QgJiYgZW5kc1dpdGhEZWxpbWl0ZXIgPyAnJyA6ICcoPz0nICsgZGVsaW1pdGVyICsgJ3wkKSc7XG4gIH1cblxuICByZXR1cm4gYXR0YWNoS2V5cyhuZXcgUmVnRXhwKCdeJyArIHJvdXRlLCBmbGFncyhvcHRpb25zKSksIGtleXMpXG59XG5cbi8qKlxuICogTm9ybWFsaXplIHRoZSBnaXZlbiBwYXRoIHN0cmluZywgcmV0dXJuaW5nIGEgcmVndWxhciBleHByZXNzaW9uLlxuICpcbiAqIEFuIGVtcHR5IGFycmF5IGNhbiBiZSBwYXNzZWQgaW4gZm9yIHRoZSBrZXlzLCB3aGljaCB3aWxsIGhvbGQgdGhlXG4gKiBwbGFjZWhvbGRlciBrZXkgZGVzY3JpcHRpb25zLiBGb3IgZXhhbXBsZSwgdXNpbmcgYC91c2VyLzppZGAsIGBrZXlzYCB3aWxsXG4gKiBjb250YWluIGBbeyBuYW1lOiAnaWQnLCBkZWxpbWl0ZXI6ICcvJywgb3B0aW9uYWw6IGZhbHNlLCByZXBlYXQ6IGZhbHNlIH1dYC5cbiAqXG4gKiBAcGFyYW0gIHsoc3RyaW5nfFJlZ0V4cHxBcnJheSl9IHBhdGhcbiAqIEBwYXJhbSAgeyhBcnJheXxPYmplY3QpPX0gICAgICAga2V5c1xuICogQHBhcmFtICB7T2JqZWN0PX0gICAgICAgICAgICAgICBvcHRpb25zXG4gKiBAcmV0dXJuIHshUmVnRXhwfVxuICovXG5mdW5jdGlvbiBwYXRoVG9SZWdleHAgKHBhdGgsIGtleXMsIG9wdGlvbnMpIHtcbiAgaWYgKCFpc2FycmF5KGtleXMpKSB7XG4gICAgb3B0aW9ucyA9IC8qKiBAdHlwZSB7IU9iamVjdH0gKi8gKGtleXMgfHwgb3B0aW9ucyk7XG4gICAga2V5cyA9IFtdO1xuICB9XG5cbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgaWYgKHBhdGggaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICByZXR1cm4gcmVnZXhwVG9SZWdleHAocGF0aCwgLyoqIEB0eXBlIHshQXJyYXl9ICovIChrZXlzKSlcbiAgfVxuXG4gIGlmIChpc2FycmF5KHBhdGgpKSB7XG4gICAgcmV0dXJuIGFycmF5VG9SZWdleHAoLyoqIEB0eXBlIHshQXJyYXl9ICovIChwYXRoKSwgLyoqIEB0eXBlIHshQXJyYXl9ICovIChrZXlzKSwgb3B0aW9ucylcbiAgfVxuXG4gIHJldHVybiBzdHJpbmdUb1JlZ2V4cCgvKiogQHR5cGUge3N0cmluZ30gKi8gKHBhdGgpLCAvKiogQHR5cGUgeyFBcnJheX0gKi8gKGtleXMpLCBvcHRpb25zKVxufVxucGF0aFRvUmVnZXhwXzEucGFyc2UgPSBwYXJzZV8xO1xucGF0aFRvUmVnZXhwXzEuY29tcGlsZSA9IGNvbXBpbGVfMTtcbnBhdGhUb1JlZ2V4cF8xLnRva2Vuc1RvRnVuY3Rpb24gPSB0b2tlbnNUb0Z1bmN0aW9uXzE7XG5wYXRoVG9SZWdleHBfMS50b2tlbnNUb1JlZ0V4cCA9IHRva2Vuc1RvUmVnRXhwXzE7XG5cbi8qICAqL1xuXG4vLyAkZmxvdy1kaXNhYmxlLWxpbmVcbnZhciByZWdleHBDb21waWxlQ2FjaGUgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuXG5mdW5jdGlvbiBmaWxsUGFyYW1zIChcbiAgcGF0aCxcbiAgcGFyYW1zLFxuICByb3V0ZU1zZ1xuKSB7XG4gIHBhcmFtcyA9IHBhcmFtcyB8fCB7fTtcbiAgdHJ5IHtcbiAgICB2YXIgZmlsbGVyID1cbiAgICAgIHJlZ2V4cENvbXBpbGVDYWNoZVtwYXRoXSB8fFxuICAgICAgKHJlZ2V4cENvbXBpbGVDYWNoZVtwYXRoXSA9IHBhdGhUb1JlZ2V4cF8xLmNvbXBpbGUocGF0aCkpO1xuXG4gICAgLy8gRml4ICMyNTA1IHJlc29sdmluZyBhc3RlcmlzayByb3V0ZXMgeyBuYW1lOiAnbm90LWZvdW5kJywgcGFyYW1zOiB7IHBhdGhNYXRjaDogJy9ub3QtZm91bmQnIH19XG4gICAgaWYgKHBhcmFtcy5wYXRoTWF0Y2gpIHsgcGFyYW1zWzBdID0gcGFyYW1zLnBhdGhNYXRjaDsgfVxuXG4gICAgcmV0dXJuIGZpbGxlcihwYXJhbXMsIHsgcHJldHR5OiB0cnVlIH0pXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBpZiAoXCJwcm9kdWN0aW9uXCIgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgd2FybihmYWxzZSwgKFwibWlzc2luZyBwYXJhbSBmb3IgXCIgKyByb3V0ZU1zZyArIFwiOiBcIiArIChlLm1lc3NhZ2UpKSk7XG4gICAgfVxuICAgIHJldHVybiAnJ1xuICB9IGZpbmFsbHkge1xuICAgIC8vIGRlbGV0ZSB0aGUgMCBpZiBpdCB3YXMgYWRkZWRcbiAgICBkZWxldGUgcGFyYW1zWzBdO1xuICB9XG59XG5cbi8qICAqL1xuXG5mdW5jdGlvbiBub3JtYWxpemVMb2NhdGlvbiAoXG4gIHJhdyxcbiAgY3VycmVudCxcbiAgYXBwZW5kLFxuICByb3V0ZXJcbikge1xuICB2YXIgbmV4dCA9IHR5cGVvZiByYXcgPT09ICdzdHJpbmcnID8geyBwYXRoOiByYXcgfSA6IHJhdztcbiAgLy8gbmFtZWQgdGFyZ2V0XG4gIGlmIChuZXh0Ll9ub3JtYWxpemVkKSB7XG4gICAgcmV0dXJuIG5leHRcbiAgfSBlbHNlIGlmIChuZXh0Lm5hbWUpIHtcbiAgICByZXR1cm4gZXh0ZW5kKHt9LCByYXcpXG4gIH1cblxuICAvLyByZWxhdGl2ZSBwYXJhbXNcbiAgaWYgKCFuZXh0LnBhdGggJiYgbmV4dC5wYXJhbXMgJiYgY3VycmVudCkge1xuICAgIG5leHQgPSBleHRlbmQoe30sIG5leHQpO1xuICAgIG5leHQuX25vcm1hbGl6ZWQgPSB0cnVlO1xuICAgIHZhciBwYXJhbXMgPSBleHRlbmQoZXh0ZW5kKHt9LCBjdXJyZW50LnBhcmFtcyksIG5leHQucGFyYW1zKTtcbiAgICBpZiAoY3VycmVudC5uYW1lKSB7XG4gICAgICBuZXh0Lm5hbWUgPSBjdXJyZW50Lm5hbWU7XG4gICAgICBuZXh0LnBhcmFtcyA9IHBhcmFtcztcbiAgICB9IGVsc2UgaWYgKGN1cnJlbnQubWF0Y2hlZC5sZW5ndGgpIHtcbiAgICAgIHZhciByYXdQYXRoID0gY3VycmVudC5tYXRjaGVkW2N1cnJlbnQubWF0Y2hlZC5sZW5ndGggLSAxXS5wYXRoO1xuICAgICAgbmV4dC5wYXRoID0gZmlsbFBhcmFtcyhyYXdQYXRoLCBwYXJhbXMsIChcInBhdGggXCIgKyAoY3VycmVudC5wYXRoKSkpO1xuICAgIH0gZWxzZSBpZiAoXCJwcm9kdWN0aW9uXCIgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgd2FybihmYWxzZSwgXCJyZWxhdGl2ZSBwYXJhbXMgbmF2aWdhdGlvbiByZXF1aXJlcyBhIGN1cnJlbnQgcm91dGUuXCIpO1xuICAgIH1cbiAgICByZXR1cm4gbmV4dFxuICB9XG5cbiAgdmFyIHBhcnNlZFBhdGggPSBwYXJzZVBhdGgobmV4dC5wYXRoIHx8ICcnKTtcbiAgdmFyIGJhc2VQYXRoID0gKGN1cnJlbnQgJiYgY3VycmVudC5wYXRoKSB8fCAnLyc7XG4gIHZhciBwYXRoID0gcGFyc2VkUGF0aC5wYXRoXG4gICAgPyByZXNvbHZlUGF0aChwYXJzZWRQYXRoLnBhdGgsIGJhc2VQYXRoLCBhcHBlbmQgfHwgbmV4dC5hcHBlbmQpXG4gICAgOiBiYXNlUGF0aDtcblxuICB2YXIgcXVlcnkgPSByZXNvbHZlUXVlcnkoXG4gICAgcGFyc2VkUGF0aC5xdWVyeSxcbiAgICBuZXh0LnF1ZXJ5LFxuICAgIHJvdXRlciAmJiByb3V0ZXIub3B0aW9ucy5wYXJzZVF1ZXJ5XG4gICk7XG5cbiAgdmFyIGhhc2ggPSBuZXh0Lmhhc2ggfHwgcGFyc2VkUGF0aC5oYXNoO1xuICBpZiAoaGFzaCAmJiBoYXNoLmNoYXJBdCgwKSAhPT0gJyMnKSB7XG4gICAgaGFzaCA9IFwiI1wiICsgaGFzaDtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgX25vcm1hbGl6ZWQ6IHRydWUsXG4gICAgcGF0aDogcGF0aCxcbiAgICBxdWVyeTogcXVlcnksXG4gICAgaGFzaDogaGFzaFxuICB9XG59XG5cbi8qICAqL1xuXG4vLyB3b3JrIGFyb3VuZCB3ZWlyZCBmbG93IGJ1Z1xudmFyIHRvVHlwZXMgPSBbU3RyaW5nLCBPYmplY3RdO1xudmFyIGV2ZW50VHlwZXMgPSBbU3RyaW5nLCBBcnJheV07XG5cbnZhciBub29wID0gZnVuY3Rpb24gKCkge307XG5cbnZhciBMaW5rID0ge1xuICBuYW1lOiAnUm91dGVyTGluaycsXG4gIHByb3BzOiB7XG4gICAgdG86IHtcbiAgICAgIHR5cGU6IHRvVHlwZXMsXG4gICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH0sXG4gICAgdGFnOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnYSdcbiAgICB9LFxuICAgIGV4YWN0OiBCb29sZWFuLFxuICAgIGFwcGVuZDogQm9vbGVhbixcbiAgICByZXBsYWNlOiBCb29sZWFuLFxuICAgIGFjdGl2ZUNsYXNzOiBTdHJpbmcsXG4gICAgZXhhY3RBY3RpdmVDbGFzczogU3RyaW5nLFxuICAgIGV2ZW50OiB7XG4gICAgICB0eXBlOiBldmVudFR5cGVzLFxuICAgICAgZGVmYXVsdDogJ2NsaWNrJ1xuICAgIH1cbiAgfSxcbiAgcmVuZGVyOiBmdW5jdGlvbiByZW5kZXIgKGgpIHtcbiAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuICAgIHZhciByb3V0ZXIgPSB0aGlzLiRyb3V0ZXI7XG4gICAgdmFyIGN1cnJlbnQgPSB0aGlzLiRyb3V0ZTtcbiAgICB2YXIgcmVmID0gcm91dGVyLnJlc29sdmUoXG4gICAgICB0aGlzLnRvLFxuICAgICAgY3VycmVudCxcbiAgICAgIHRoaXMuYXBwZW5kXG4gICAgKTtcbiAgICB2YXIgbG9jYXRpb24gPSByZWYubG9jYXRpb247XG4gICAgdmFyIHJvdXRlID0gcmVmLnJvdXRlO1xuICAgIHZhciBocmVmID0gcmVmLmhyZWY7XG5cbiAgICB2YXIgY2xhc3NlcyA9IHt9O1xuICAgIHZhciBnbG9iYWxBY3RpdmVDbGFzcyA9IHJvdXRlci5vcHRpb25zLmxpbmtBY3RpdmVDbGFzcztcbiAgICB2YXIgZ2xvYmFsRXhhY3RBY3RpdmVDbGFzcyA9IHJvdXRlci5vcHRpb25zLmxpbmtFeGFjdEFjdGl2ZUNsYXNzO1xuICAgIC8vIFN1cHBvcnQgZ2xvYmFsIGVtcHR5IGFjdGl2ZSBjbGFzc1xuICAgIHZhciBhY3RpdmVDbGFzc0ZhbGxiYWNrID1cbiAgICAgIGdsb2JhbEFjdGl2ZUNsYXNzID09IG51bGwgPyAncm91dGVyLWxpbmstYWN0aXZlJyA6IGdsb2JhbEFjdGl2ZUNsYXNzO1xuICAgIHZhciBleGFjdEFjdGl2ZUNsYXNzRmFsbGJhY2sgPVxuICAgICAgZ2xvYmFsRXhhY3RBY3RpdmVDbGFzcyA9PSBudWxsXG4gICAgICAgID8gJ3JvdXRlci1saW5rLWV4YWN0LWFjdGl2ZSdcbiAgICAgICAgOiBnbG9iYWxFeGFjdEFjdGl2ZUNsYXNzO1xuICAgIHZhciBhY3RpdmVDbGFzcyA9XG4gICAgICB0aGlzLmFjdGl2ZUNsYXNzID09IG51bGwgPyBhY3RpdmVDbGFzc0ZhbGxiYWNrIDogdGhpcy5hY3RpdmVDbGFzcztcbiAgICB2YXIgZXhhY3RBY3RpdmVDbGFzcyA9XG4gICAgICB0aGlzLmV4YWN0QWN0aXZlQ2xhc3MgPT0gbnVsbFxuICAgICAgICA/IGV4YWN0QWN0aXZlQ2xhc3NGYWxsYmFja1xuICAgICAgICA6IHRoaXMuZXhhY3RBY3RpdmVDbGFzcztcblxuICAgIHZhciBjb21wYXJlVGFyZ2V0ID0gcm91dGUucmVkaXJlY3RlZEZyb21cbiAgICAgID8gY3JlYXRlUm91dGUobnVsbCwgbm9ybWFsaXplTG9jYXRpb24ocm91dGUucmVkaXJlY3RlZEZyb20pLCBudWxsLCByb3V0ZXIpXG4gICAgICA6IHJvdXRlO1xuXG4gICAgY2xhc3Nlc1tleGFjdEFjdGl2ZUNsYXNzXSA9IGlzU2FtZVJvdXRlKGN1cnJlbnQsIGNvbXBhcmVUYXJnZXQpO1xuICAgIGNsYXNzZXNbYWN0aXZlQ2xhc3NdID0gdGhpcy5leGFjdFxuICAgICAgPyBjbGFzc2VzW2V4YWN0QWN0aXZlQ2xhc3NdXG4gICAgICA6IGlzSW5jbHVkZWRSb3V0ZShjdXJyZW50LCBjb21wYXJlVGFyZ2V0KTtcblxuICAgIHZhciBoYW5kbGVyID0gZnVuY3Rpb24gKGUpIHtcbiAgICAgIGlmIChndWFyZEV2ZW50KGUpKSB7XG4gICAgICAgIGlmICh0aGlzJDEucmVwbGFjZSkge1xuICAgICAgICAgIHJvdXRlci5yZXBsYWNlKGxvY2F0aW9uLCBub29wKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByb3V0ZXIucHVzaChsb2NhdGlvbiwgbm9vcCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgdmFyIG9uID0geyBjbGljazogZ3VhcmRFdmVudCB9O1xuICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMuZXZlbnQpKSB7XG4gICAgICB0aGlzLmV2ZW50LmZvckVhY2goZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgb25bZV0gPSBoYW5kbGVyO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9uW3RoaXMuZXZlbnRdID0gaGFuZGxlcjtcbiAgICB9XG5cbiAgICB2YXIgZGF0YSA9IHsgY2xhc3M6IGNsYXNzZXMgfTtcblxuICAgIHZhciBzY29wZWRTbG90ID1cbiAgICAgICF0aGlzLiRzY29wZWRTbG90cy4kaGFzTm9ybWFsICYmXG4gICAgICB0aGlzLiRzY29wZWRTbG90cy5kZWZhdWx0ICYmXG4gICAgICB0aGlzLiRzY29wZWRTbG90cy5kZWZhdWx0KHtcbiAgICAgICAgaHJlZjogaHJlZixcbiAgICAgICAgcm91dGU6IHJvdXRlLFxuICAgICAgICBuYXZpZ2F0ZTogaGFuZGxlcixcbiAgICAgICAgaXNBY3RpdmU6IGNsYXNzZXNbYWN0aXZlQ2xhc3NdLFxuICAgICAgICBpc0V4YWN0QWN0aXZlOiBjbGFzc2VzW2V4YWN0QWN0aXZlQ2xhc3NdXG4gICAgICB9KTtcblxuICAgIGlmIChzY29wZWRTbG90KSB7XG4gICAgICBpZiAoc2NvcGVkU2xvdC5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgcmV0dXJuIHNjb3BlZFNsb3RbMF1cbiAgICAgIH0gZWxzZSBpZiAoc2NvcGVkU2xvdC5sZW5ndGggPiAxIHx8ICFzY29wZWRTbG90Lmxlbmd0aCkge1xuICAgICAgICBpZiAoXCJwcm9kdWN0aW9uXCIgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgIHdhcm4oXG4gICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAgIChcIlJvdXRlckxpbmsgd2l0aCB0bz1cXFwiXCIgKyAodGhpcy5wcm9wcy50bykgKyBcIlxcXCIgaXMgdHJ5aW5nIHRvIHVzZSBhIHNjb3BlZCBzbG90IGJ1dCBpdCBkaWRuJ3QgcHJvdmlkZSBleGFjdGx5IG9uZSBjaGlsZC5cIilcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzY29wZWRTbG90Lmxlbmd0aCA9PT0gMCA/IGgoKSA6IGgoJ3NwYW4nLCB7fSwgc2NvcGVkU2xvdClcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy50YWcgPT09ICdhJykge1xuICAgICAgZGF0YS5vbiA9IG9uO1xuICAgICAgZGF0YS5hdHRycyA9IHsgaHJlZjogaHJlZiB9O1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBmaW5kIHRoZSBmaXJzdCA8YT4gY2hpbGQgYW5kIGFwcGx5IGxpc3RlbmVyIGFuZCBocmVmXG4gICAgICB2YXIgYSA9IGZpbmRBbmNob3IodGhpcy4kc2xvdHMuZGVmYXVsdCk7XG4gICAgICBpZiAoYSkge1xuICAgICAgICAvLyBpbiBjYXNlIHRoZSA8YT4gaXMgYSBzdGF0aWMgbm9kZVxuICAgICAgICBhLmlzU3RhdGljID0gZmFsc2U7XG4gICAgICAgIHZhciBhRGF0YSA9IChhLmRhdGEgPSBleHRlbmQoe30sIGEuZGF0YSkpO1xuICAgICAgICBhRGF0YS5vbiA9IGFEYXRhLm9uIHx8IHt9O1xuICAgICAgICAvLyB0cmFuc2Zvcm0gZXhpc3RpbmcgZXZlbnRzIGluIGJvdGggb2JqZWN0cyBpbnRvIGFycmF5cyBzbyB3ZSBjYW4gcHVzaCBsYXRlclxuICAgICAgICBmb3IgKHZhciBldmVudCBpbiBhRGF0YS5vbikge1xuICAgICAgICAgIHZhciBoYW5kbGVyJDEgPSBhRGF0YS5vbltldmVudF07XG4gICAgICAgICAgaWYgKGV2ZW50IGluIG9uKSB7XG4gICAgICAgICAgICBhRGF0YS5vbltldmVudF0gPSBBcnJheS5pc0FycmF5KGhhbmRsZXIkMSkgPyBoYW5kbGVyJDEgOiBbaGFuZGxlciQxXTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gYXBwZW5kIG5ldyBsaXN0ZW5lcnMgZm9yIHJvdXRlci1saW5rXG4gICAgICAgIGZvciAodmFyIGV2ZW50JDEgaW4gb24pIHtcbiAgICAgICAgICBpZiAoZXZlbnQkMSBpbiBhRGF0YS5vbikge1xuICAgICAgICAgICAgLy8gb25bZXZlbnRdIGlzIGFsd2F5cyBhIGZ1bmN0aW9uXG4gICAgICAgICAgICBhRGF0YS5vbltldmVudCQxXS5wdXNoKG9uW2V2ZW50JDFdKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYURhdGEub25bZXZlbnQkMV0gPSBoYW5kbGVyO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBhQXR0cnMgPSAoYS5kYXRhLmF0dHJzID0gZXh0ZW5kKHt9LCBhLmRhdGEuYXR0cnMpKTtcbiAgICAgICAgYUF0dHJzLmhyZWYgPSBocmVmO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gZG9lc24ndCBoYXZlIDxhPiBjaGlsZCwgYXBwbHkgbGlzdGVuZXIgdG8gc2VsZlxuICAgICAgICBkYXRhLm9uID0gb247XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGgodGhpcy50YWcsIGRhdGEsIHRoaXMuJHNsb3RzLmRlZmF1bHQpXG4gIH1cbn07XG5cbmZ1bmN0aW9uIGd1YXJkRXZlbnQgKGUpIHtcbiAgLy8gZG9uJ3QgcmVkaXJlY3Qgd2l0aCBjb250cm9sIGtleXNcbiAgaWYgKGUubWV0YUtleSB8fCBlLmFsdEtleSB8fCBlLmN0cmxLZXkgfHwgZS5zaGlmdEtleSkgeyByZXR1cm4gfVxuICAvLyBkb24ndCByZWRpcmVjdCB3aGVuIHByZXZlbnREZWZhdWx0IGNhbGxlZFxuICBpZiAoZS5kZWZhdWx0UHJldmVudGVkKSB7IHJldHVybiB9XG4gIC8vIGRvbid0IHJlZGlyZWN0IG9uIHJpZ2h0IGNsaWNrXG4gIGlmIChlLmJ1dHRvbiAhPT0gdW5kZWZpbmVkICYmIGUuYnV0dG9uICE9PSAwKSB7IHJldHVybiB9XG4gIC8vIGRvbid0IHJlZGlyZWN0IGlmIGB0YXJnZXQ9XCJfYmxhbmtcImBcbiAgaWYgKGUuY3VycmVudFRhcmdldCAmJiBlLmN1cnJlbnRUYXJnZXQuZ2V0QXR0cmlidXRlKSB7XG4gICAgdmFyIHRhcmdldCA9IGUuY3VycmVudFRhcmdldC5nZXRBdHRyaWJ1dGUoJ3RhcmdldCcpO1xuICAgIGlmICgvXFxiX2JsYW5rXFxiL2kudGVzdCh0YXJnZXQpKSB7IHJldHVybiB9XG4gIH1cbiAgLy8gdGhpcyBtYXkgYmUgYSBXZWV4IGV2ZW50IHdoaWNoIGRvZXNuJ3QgaGF2ZSB0aGlzIG1ldGhvZFxuICBpZiAoZS5wcmV2ZW50RGVmYXVsdCkge1xuICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgfVxuICByZXR1cm4gdHJ1ZVxufVxuXG5mdW5jdGlvbiBmaW5kQW5jaG9yIChjaGlsZHJlbikge1xuICBpZiAoY2hpbGRyZW4pIHtcbiAgICB2YXIgY2hpbGQ7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgY2hpbGQgPSBjaGlsZHJlbltpXTtcbiAgICAgIGlmIChjaGlsZC50YWcgPT09ICdhJykge1xuICAgICAgICByZXR1cm4gY2hpbGRcbiAgICAgIH1cbiAgICAgIGlmIChjaGlsZC5jaGlsZHJlbiAmJiAoY2hpbGQgPSBmaW5kQW5jaG9yKGNoaWxkLmNoaWxkcmVuKSkpIHtcbiAgICAgICAgcmV0dXJuIGNoaWxkXG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbnZhciBfVnVlO1xuXG5mdW5jdGlvbiBpbnN0YWxsIChWdWUpIHtcbiAgaWYgKGluc3RhbGwuaW5zdGFsbGVkICYmIF9WdWUgPT09IFZ1ZSkgeyByZXR1cm4gfVxuICBpbnN0YWxsLmluc3RhbGxlZCA9IHRydWU7XG5cbiAgX1Z1ZSA9IFZ1ZTtcblxuICB2YXIgaXNEZWYgPSBmdW5jdGlvbiAodikgeyByZXR1cm4gdiAhPT0gdW5kZWZpbmVkOyB9O1xuXG4gIHZhciByZWdpc3Rlckluc3RhbmNlID0gZnVuY3Rpb24gKHZtLCBjYWxsVmFsKSB7XG4gICAgdmFyIGkgPSB2bS4kb3B0aW9ucy5fcGFyZW50Vm5vZGU7XG4gICAgaWYgKGlzRGVmKGkpICYmIGlzRGVmKGkgPSBpLmRhdGEpICYmIGlzRGVmKGkgPSBpLnJlZ2lzdGVyUm91dGVJbnN0YW5jZSkpIHtcbiAgICAgIGkodm0sIGNhbGxWYWwpO1xuICAgIH1cbiAgfTtcblxuICBWdWUubWl4aW4oe1xuICAgIGJlZm9yZUNyZWF0ZTogZnVuY3Rpb24gYmVmb3JlQ3JlYXRlICgpIHtcbiAgICAgIGlmIChpc0RlZih0aGlzLiRvcHRpb25zLnJvdXRlcikpIHtcbiAgICAgICAgdGhpcy5fcm91dGVyUm9vdCA9IHRoaXM7XG4gICAgICAgIHRoaXMuX3JvdXRlciA9IHRoaXMuJG9wdGlvbnMucm91dGVyO1xuICAgICAgICB0aGlzLl9yb3V0ZXIuaW5pdCh0aGlzKTtcbiAgICAgICAgVnVlLnV0aWwuZGVmaW5lUmVhY3RpdmUodGhpcywgJ19yb3V0ZScsIHRoaXMuX3JvdXRlci5oaXN0b3J5LmN1cnJlbnQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fcm91dGVyUm9vdCA9ICh0aGlzLiRwYXJlbnQgJiYgdGhpcy4kcGFyZW50Ll9yb3V0ZXJSb290KSB8fCB0aGlzO1xuICAgICAgfVxuICAgICAgcmVnaXN0ZXJJbnN0YW5jZSh0aGlzLCB0aGlzKTtcbiAgICB9LFxuICAgIGRlc3Ryb3llZDogZnVuY3Rpb24gZGVzdHJveWVkICgpIHtcbiAgICAgIHJlZ2lzdGVySW5zdGFuY2UodGhpcyk7XG4gICAgfVxuICB9KTtcblxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVnVlLnByb3RvdHlwZSwgJyRyb3V0ZXInLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQgKCkgeyByZXR1cm4gdGhpcy5fcm91dGVyUm9vdC5fcm91dGVyIH1cbiAgfSk7XG5cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFZ1ZS5wcm90b3R5cGUsICckcm91dGUnLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQgKCkgeyByZXR1cm4gdGhpcy5fcm91dGVyUm9vdC5fcm91dGUgfVxuICB9KTtcblxuICBWdWUuY29tcG9uZW50KCdSb3V0ZXJWaWV3JywgVmlldyk7XG4gIFZ1ZS5jb21wb25lbnQoJ1JvdXRlckxpbmsnLCBMaW5rKTtcblxuICB2YXIgc3RyYXRzID0gVnVlLmNvbmZpZy5vcHRpb25NZXJnZVN0cmF0ZWdpZXM7XG4gIC8vIHVzZSB0aGUgc2FtZSBob29rIG1lcmdpbmcgc3RyYXRlZ3kgZm9yIHJvdXRlIGhvb2tzXG4gIHN0cmF0cy5iZWZvcmVSb3V0ZUVudGVyID0gc3RyYXRzLmJlZm9yZVJvdXRlTGVhdmUgPSBzdHJhdHMuYmVmb3JlUm91dGVVcGRhdGUgPSBzdHJhdHMuY3JlYXRlZDtcbn1cblxuLyogICovXG5cbnZhciBpbkJyb3dzZXIgPSB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJztcblxuLyogICovXG5cbmZ1bmN0aW9uIGNyZWF0ZVJvdXRlTWFwIChcbiAgcm91dGVzLFxuICBvbGRQYXRoTGlzdCxcbiAgb2xkUGF0aE1hcCxcbiAgb2xkTmFtZU1hcFxuKSB7XG4gIC8vIHRoZSBwYXRoIGxpc3QgaXMgdXNlZCB0byBjb250cm9sIHBhdGggbWF0Y2hpbmcgcHJpb3JpdHlcbiAgdmFyIHBhdGhMaXN0ID0gb2xkUGF0aExpc3QgfHwgW107XG4gIC8vICRmbG93LWRpc2FibGUtbGluZVxuICB2YXIgcGF0aE1hcCA9IG9sZFBhdGhNYXAgfHwgT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgLy8gJGZsb3ctZGlzYWJsZS1saW5lXG4gIHZhciBuYW1lTWFwID0gb2xkTmFtZU1hcCB8fCBPYmplY3QuY3JlYXRlKG51bGwpO1xuXG4gIHJvdXRlcy5mb3JFYWNoKGZ1bmN0aW9uIChyb3V0ZSkge1xuICAgIGFkZFJvdXRlUmVjb3JkKHBhdGhMaXN0LCBwYXRoTWFwLCBuYW1lTWFwLCByb3V0ZSk7XG4gIH0pO1xuXG4gIC8vIGVuc3VyZSB3aWxkY2FyZCByb3V0ZXMgYXJlIGFsd2F5cyBhdCB0aGUgZW5kXG4gIGZvciAodmFyIGkgPSAwLCBsID0gcGF0aExpc3QubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgaWYgKHBhdGhMaXN0W2ldID09PSAnKicpIHtcbiAgICAgIHBhdGhMaXN0LnB1c2gocGF0aExpc3Quc3BsaWNlKGksIDEpWzBdKTtcbiAgICAgIGwtLTtcbiAgICAgIGktLTtcbiAgICB9XG4gIH1cblxuICBpZiAoXCJwcm9kdWN0aW9uXCIgPT09ICdkZXZlbG9wbWVudCcpIHtcbiAgICAvLyB3YXJuIGlmIHJvdXRlcyBkbyBub3QgaW5jbHVkZSBsZWFkaW5nIHNsYXNoZXNcbiAgICB2YXIgZm91bmQgPSBwYXRoTGlzdFxuICAgIC8vIGNoZWNrIGZvciBtaXNzaW5nIGxlYWRpbmcgc2xhc2hcbiAgICAgIC5maWx0ZXIoZnVuY3Rpb24gKHBhdGgpIHsgcmV0dXJuIHBhdGggJiYgcGF0aC5jaGFyQXQoMCkgIT09ICcqJyAmJiBwYXRoLmNoYXJBdCgwKSAhPT0gJy8nOyB9KTtcblxuICAgIGlmIChmb3VuZC5sZW5ndGggPiAwKSB7XG4gICAgICB2YXIgcGF0aE5hbWVzID0gZm91bmQubWFwKGZ1bmN0aW9uIChwYXRoKSB7IHJldHVybiAoXCItIFwiICsgcGF0aCk7IH0pLmpvaW4oJ1xcbicpO1xuICAgICAgd2FybihmYWxzZSwgKFwiTm9uLW5lc3RlZCByb3V0ZXMgbXVzdCBpbmNsdWRlIGEgbGVhZGluZyBzbGFzaCBjaGFyYWN0ZXIuIEZpeCB0aGUgZm9sbG93aW5nIHJvdXRlczogXFxuXCIgKyBwYXRoTmFtZXMpKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHBhdGhMaXN0OiBwYXRoTGlzdCxcbiAgICBwYXRoTWFwOiBwYXRoTWFwLFxuICAgIG5hbWVNYXA6IG5hbWVNYXBcbiAgfVxufVxuXG5mdW5jdGlvbiBhZGRSb3V0ZVJlY29yZCAoXG4gIHBhdGhMaXN0LFxuICBwYXRoTWFwLFxuICBuYW1lTWFwLFxuICByb3V0ZSxcbiAgcGFyZW50LFxuICBtYXRjaEFzXG4pIHtcbiAgdmFyIHBhdGggPSByb3V0ZS5wYXRoO1xuICB2YXIgbmFtZSA9IHJvdXRlLm5hbWU7XG4gIGlmIChcInByb2R1Y3Rpb25cIiAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgYXNzZXJ0KHBhdGggIT0gbnVsbCwgXCJcXFwicGF0aFxcXCIgaXMgcmVxdWlyZWQgaW4gYSByb3V0ZSBjb25maWd1cmF0aW9uLlwiKTtcbiAgICBhc3NlcnQoXG4gICAgICB0eXBlb2Ygcm91dGUuY29tcG9uZW50ICE9PSAnc3RyaW5nJyxcbiAgICAgIFwicm91dGUgY29uZmlnIFxcXCJjb21wb25lbnRcXFwiIGZvciBwYXRoOiBcIiArIChTdHJpbmcoXG4gICAgICAgIHBhdGggfHwgbmFtZVxuICAgICAgKSkgKyBcIiBjYW5ub3QgYmUgYSBcIiArIFwic3RyaW5nIGlkLiBVc2UgYW4gYWN0dWFsIGNvbXBvbmVudCBpbnN0ZWFkLlwiXG4gICAgKTtcbiAgfVxuXG4gIHZhciBwYXRoVG9SZWdleHBPcHRpb25zID1cbiAgICByb3V0ZS5wYXRoVG9SZWdleHBPcHRpb25zIHx8IHt9O1xuICB2YXIgbm9ybWFsaXplZFBhdGggPSBub3JtYWxpemVQYXRoKHBhdGgsIHBhcmVudCwgcGF0aFRvUmVnZXhwT3B0aW9ucy5zdHJpY3QpO1xuXG4gIGlmICh0eXBlb2Ygcm91dGUuY2FzZVNlbnNpdGl2ZSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgcGF0aFRvUmVnZXhwT3B0aW9ucy5zZW5zaXRpdmUgPSByb3V0ZS5jYXNlU2Vuc2l0aXZlO1xuICB9XG5cbiAgdmFyIHJlY29yZCA9IHtcbiAgICBwYXRoOiBub3JtYWxpemVkUGF0aCxcbiAgICByZWdleDogY29tcGlsZVJvdXRlUmVnZXgobm9ybWFsaXplZFBhdGgsIHBhdGhUb1JlZ2V4cE9wdGlvbnMpLFxuICAgIGNvbXBvbmVudHM6IHJvdXRlLmNvbXBvbmVudHMgfHwgeyBkZWZhdWx0OiByb3V0ZS5jb21wb25lbnQgfSxcbiAgICBpbnN0YW5jZXM6IHt9LFxuICAgIG5hbWU6IG5hbWUsXG4gICAgcGFyZW50OiBwYXJlbnQsXG4gICAgbWF0Y2hBczogbWF0Y2hBcyxcbiAgICByZWRpcmVjdDogcm91dGUucmVkaXJlY3QsXG4gICAgYmVmb3JlRW50ZXI6IHJvdXRlLmJlZm9yZUVudGVyLFxuICAgIG1ldGE6IHJvdXRlLm1ldGEgfHwge30sXG4gICAgcHJvcHM6XG4gICAgICByb3V0ZS5wcm9wcyA9PSBudWxsXG4gICAgICAgID8ge31cbiAgICAgICAgOiByb3V0ZS5jb21wb25lbnRzXG4gICAgICAgICAgPyByb3V0ZS5wcm9wc1xuICAgICAgICAgIDogeyBkZWZhdWx0OiByb3V0ZS5wcm9wcyB9XG4gIH07XG5cbiAgaWYgKHJvdXRlLmNoaWxkcmVuKSB7XG4gICAgLy8gV2FybiBpZiByb3V0ZSBpcyBuYW1lZCwgZG9lcyBub3QgcmVkaXJlY3QgYW5kIGhhcyBhIGRlZmF1bHQgY2hpbGQgcm91dGUuXG4gICAgLy8gSWYgdXNlcnMgbmF2aWdhdGUgdG8gdGhpcyByb3V0ZSBieSBuYW1lLCB0aGUgZGVmYXVsdCBjaGlsZCB3aWxsXG4gICAgLy8gbm90IGJlIHJlbmRlcmVkIChHSCBJc3N1ZSAjNjI5KVxuICAgIGlmIChcInByb2R1Y3Rpb25cIiAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHJvdXRlLm5hbWUgJiZcbiAgICAgICAgIXJvdXRlLnJlZGlyZWN0ICYmXG4gICAgICAgIHJvdXRlLmNoaWxkcmVuLnNvbWUoZnVuY3Rpb24gKGNoaWxkKSB7IHJldHVybiAvXlxcLz8kLy50ZXN0KGNoaWxkLnBhdGgpOyB9KVxuICAgICAgKSB7XG4gICAgICAgIHdhcm4oXG4gICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgXCJOYW1lZCBSb3V0ZSAnXCIgKyAocm91dGUubmFtZSkgKyBcIicgaGFzIGEgZGVmYXVsdCBjaGlsZCByb3V0ZS4gXCIgK1xuICAgICAgICAgICAgXCJXaGVuIG5hdmlnYXRpbmcgdG8gdGhpcyBuYW1lZCByb3V0ZSAoOnRvPVxcXCJ7bmFtZTogJ1wiICsgKHJvdXRlLm5hbWUpICsgXCInXFxcIiksIFwiICtcbiAgICAgICAgICAgIFwidGhlIGRlZmF1bHQgY2hpbGQgcm91dGUgd2lsbCBub3QgYmUgcmVuZGVyZWQuIFJlbW92ZSB0aGUgbmFtZSBmcm9tIFwiICtcbiAgICAgICAgICAgIFwidGhpcyByb3V0ZSBhbmQgdXNlIHRoZSBuYW1lIG9mIHRoZSBkZWZhdWx0IGNoaWxkIHJvdXRlIGZvciBuYW1lZCBcIiArXG4gICAgICAgICAgICBcImxpbmtzIGluc3RlYWQuXCJcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcm91dGUuY2hpbGRyZW4uZm9yRWFjaChmdW5jdGlvbiAoY2hpbGQpIHtcbiAgICAgIHZhciBjaGlsZE1hdGNoQXMgPSBtYXRjaEFzXG4gICAgICAgID8gY2xlYW5QYXRoKChtYXRjaEFzICsgXCIvXCIgKyAoY2hpbGQucGF0aCkpKVxuICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICAgIGFkZFJvdXRlUmVjb3JkKHBhdGhMaXN0LCBwYXRoTWFwLCBuYW1lTWFwLCBjaGlsZCwgcmVjb3JkLCBjaGlsZE1hdGNoQXMpO1xuICAgIH0pO1xuICB9XG5cbiAgaWYgKCFwYXRoTWFwW3JlY29yZC5wYXRoXSkge1xuICAgIHBhdGhMaXN0LnB1c2gocmVjb3JkLnBhdGgpO1xuICAgIHBhdGhNYXBbcmVjb3JkLnBhdGhdID0gcmVjb3JkO1xuICB9XG5cbiAgaWYgKHJvdXRlLmFsaWFzICE9PSB1bmRlZmluZWQpIHtcbiAgICB2YXIgYWxpYXNlcyA9IEFycmF5LmlzQXJyYXkocm91dGUuYWxpYXMpID8gcm91dGUuYWxpYXMgOiBbcm91dGUuYWxpYXNdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYWxpYXNlcy5sZW5ndGg7ICsraSkge1xuICAgICAgdmFyIGFsaWFzID0gYWxpYXNlc1tpXTtcbiAgICAgIGlmIChcInByb2R1Y3Rpb25cIiAhPT0gJ3Byb2R1Y3Rpb24nICYmIGFsaWFzID09PSBwYXRoKSB7XG4gICAgICAgIHdhcm4oXG4gICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgKFwiRm91bmQgYW4gYWxpYXMgd2l0aCB0aGUgc2FtZSB2YWx1ZSBhcyB0aGUgcGF0aDogXFxcIlwiICsgcGF0aCArIFwiXFxcIi4gWW91IGhhdmUgdG8gcmVtb3ZlIHRoYXQgYWxpYXMuIEl0IHdpbGwgYmUgaWdub3JlZCBpbiBkZXZlbG9wbWVudC5cIilcbiAgICAgICAgKTtcbiAgICAgICAgLy8gc2tpcCBpbiBkZXYgdG8gbWFrZSBpdCB3b3JrXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIHZhciBhbGlhc1JvdXRlID0ge1xuICAgICAgICBwYXRoOiBhbGlhcyxcbiAgICAgICAgY2hpbGRyZW46IHJvdXRlLmNoaWxkcmVuXG4gICAgICB9O1xuICAgICAgYWRkUm91dGVSZWNvcmQoXG4gICAgICAgIHBhdGhMaXN0LFxuICAgICAgICBwYXRoTWFwLFxuICAgICAgICBuYW1lTWFwLFxuICAgICAgICBhbGlhc1JvdXRlLFxuICAgICAgICBwYXJlbnQsXG4gICAgICAgIHJlY29yZC5wYXRoIHx8ICcvJyAvLyBtYXRjaEFzXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIGlmIChuYW1lKSB7XG4gICAgaWYgKCFuYW1lTWFwW25hbWVdKSB7XG4gICAgICBuYW1lTWFwW25hbWVdID0gcmVjb3JkO1xuICAgIH0gZWxzZSBpZiAoXCJwcm9kdWN0aW9uXCIgIT09ICdwcm9kdWN0aW9uJyAmJiAhbWF0Y2hBcykge1xuICAgICAgd2FybihcbiAgICAgICAgZmFsc2UsXG4gICAgICAgIFwiRHVwbGljYXRlIG5hbWVkIHJvdXRlcyBkZWZpbml0aW9uOiBcIiArXG4gICAgICAgICAgXCJ7IG5hbWU6IFxcXCJcIiArIG5hbWUgKyBcIlxcXCIsIHBhdGg6IFxcXCJcIiArIChyZWNvcmQucGF0aCkgKyBcIlxcXCIgfVwiXG4gICAgICApO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjb21waWxlUm91dGVSZWdleCAoXG4gIHBhdGgsXG4gIHBhdGhUb1JlZ2V4cE9wdGlvbnNcbikge1xuICB2YXIgcmVnZXggPSBwYXRoVG9SZWdleHBfMShwYXRoLCBbXSwgcGF0aFRvUmVnZXhwT3B0aW9ucyk7XG4gIGlmIChcInByb2R1Y3Rpb25cIiAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgdmFyIGtleXMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIHJlZ2V4LmtleXMuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICB3YXJuKFxuICAgICAgICAha2V5c1trZXkubmFtZV0sXG4gICAgICAgIChcIkR1cGxpY2F0ZSBwYXJhbSBrZXlzIGluIHJvdXRlIHdpdGggcGF0aDogXFxcIlwiICsgcGF0aCArIFwiXFxcIlwiKVxuICAgICAgKTtcbiAgICAgIGtleXNba2V5Lm5hbWVdID0gdHJ1ZTtcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gcmVnZXhcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplUGF0aCAoXG4gIHBhdGgsXG4gIHBhcmVudCxcbiAgc3RyaWN0XG4pIHtcbiAgaWYgKCFzdHJpY3QpIHsgcGF0aCA9IHBhdGgucmVwbGFjZSgvXFwvJC8sICcnKTsgfVxuICBpZiAocGF0aFswXSA9PT0gJy8nKSB7IHJldHVybiBwYXRoIH1cbiAgaWYgKHBhcmVudCA9PSBudWxsKSB7IHJldHVybiBwYXRoIH1cbiAgcmV0dXJuIGNsZWFuUGF0aCgoKHBhcmVudC5wYXRoKSArIFwiL1wiICsgcGF0aCkpXG59XG5cbi8qICAqL1xuXG5cblxuZnVuY3Rpb24gY3JlYXRlTWF0Y2hlciAoXG4gIHJvdXRlcyxcbiAgcm91dGVyXG4pIHtcbiAgdmFyIHJlZiA9IGNyZWF0ZVJvdXRlTWFwKHJvdXRlcyk7XG4gIHZhciBwYXRoTGlzdCA9IHJlZi5wYXRoTGlzdDtcbiAgdmFyIHBhdGhNYXAgPSByZWYucGF0aE1hcDtcbiAgdmFyIG5hbWVNYXAgPSByZWYubmFtZU1hcDtcblxuICBmdW5jdGlvbiBhZGRSb3V0ZXMgKHJvdXRlcykge1xuICAgIGNyZWF0ZVJvdXRlTWFwKHJvdXRlcywgcGF0aExpc3QsIHBhdGhNYXAsIG5hbWVNYXApO1xuICB9XG5cbiAgZnVuY3Rpb24gbWF0Y2ggKFxuICAgIHJhdyxcbiAgICBjdXJyZW50Um91dGUsXG4gICAgcmVkaXJlY3RlZEZyb21cbiAgKSB7XG4gICAgdmFyIGxvY2F0aW9uID0gbm9ybWFsaXplTG9jYXRpb24ocmF3LCBjdXJyZW50Um91dGUsIGZhbHNlLCByb3V0ZXIpO1xuICAgIHZhciBuYW1lID0gbG9jYXRpb24ubmFtZTtcblxuICAgIGlmIChuYW1lKSB7XG4gICAgICB2YXIgcmVjb3JkID0gbmFtZU1hcFtuYW1lXTtcbiAgICAgIGlmIChcInByb2R1Y3Rpb25cIiAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIHdhcm4ocmVjb3JkLCAoXCJSb3V0ZSB3aXRoIG5hbWUgJ1wiICsgbmFtZSArIFwiJyBkb2VzIG5vdCBleGlzdFwiKSk7XG4gICAgICB9XG4gICAgICBpZiAoIXJlY29yZCkgeyByZXR1cm4gX2NyZWF0ZVJvdXRlKG51bGwsIGxvY2F0aW9uKSB9XG4gICAgICB2YXIgcGFyYW1OYW1lcyA9IHJlY29yZC5yZWdleC5rZXlzXG4gICAgICAgIC5maWx0ZXIoZnVuY3Rpb24gKGtleSkgeyByZXR1cm4gIWtleS5vcHRpb25hbDsgfSlcbiAgICAgICAgLm1hcChmdW5jdGlvbiAoa2V5KSB7IHJldHVybiBrZXkubmFtZTsgfSk7XG5cbiAgICAgIGlmICh0eXBlb2YgbG9jYXRpb24ucGFyYW1zICE9PSAnb2JqZWN0Jykge1xuICAgICAgICBsb2NhdGlvbi5wYXJhbXMgPSB7fTtcbiAgICAgIH1cblxuICAgICAgaWYgKGN1cnJlbnRSb3V0ZSAmJiB0eXBlb2YgY3VycmVudFJvdXRlLnBhcmFtcyA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgZm9yICh2YXIga2V5IGluIGN1cnJlbnRSb3V0ZS5wYXJhbXMpIHtcbiAgICAgICAgICBpZiAoIShrZXkgaW4gbG9jYXRpb24ucGFyYW1zKSAmJiBwYXJhbU5hbWVzLmluZGV4T2Yoa2V5KSA+IC0xKSB7XG4gICAgICAgICAgICBsb2NhdGlvbi5wYXJhbXNba2V5XSA9IGN1cnJlbnRSb3V0ZS5wYXJhbXNba2V5XTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgbG9jYXRpb24ucGF0aCA9IGZpbGxQYXJhbXMocmVjb3JkLnBhdGgsIGxvY2F0aW9uLnBhcmFtcywgKFwibmFtZWQgcm91dGUgXFxcIlwiICsgbmFtZSArIFwiXFxcIlwiKSk7XG4gICAgICByZXR1cm4gX2NyZWF0ZVJvdXRlKHJlY29yZCwgbG9jYXRpb24sIHJlZGlyZWN0ZWRGcm9tKVxuICAgIH0gZWxzZSBpZiAobG9jYXRpb24ucGF0aCkge1xuICAgICAgbG9jYXRpb24ucGFyYW1zID0ge307XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhdGhMaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBwYXRoID0gcGF0aExpc3RbaV07XG4gICAgICAgIHZhciByZWNvcmQkMSA9IHBhdGhNYXBbcGF0aF07XG4gICAgICAgIGlmIChtYXRjaFJvdXRlKHJlY29yZCQxLnJlZ2V4LCBsb2NhdGlvbi5wYXRoLCBsb2NhdGlvbi5wYXJhbXMpKSB7XG4gICAgICAgICAgcmV0dXJuIF9jcmVhdGVSb3V0ZShyZWNvcmQkMSwgbG9jYXRpb24sIHJlZGlyZWN0ZWRGcm9tKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIC8vIG5vIG1hdGNoXG4gICAgcmV0dXJuIF9jcmVhdGVSb3V0ZShudWxsLCBsb2NhdGlvbilcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlZGlyZWN0IChcbiAgICByZWNvcmQsXG4gICAgbG9jYXRpb25cbiAgKSB7XG4gICAgdmFyIG9yaWdpbmFsUmVkaXJlY3QgPSByZWNvcmQucmVkaXJlY3Q7XG4gICAgdmFyIHJlZGlyZWN0ID0gdHlwZW9mIG9yaWdpbmFsUmVkaXJlY3QgPT09ICdmdW5jdGlvbidcbiAgICAgID8gb3JpZ2luYWxSZWRpcmVjdChjcmVhdGVSb3V0ZShyZWNvcmQsIGxvY2F0aW9uLCBudWxsLCByb3V0ZXIpKVxuICAgICAgOiBvcmlnaW5hbFJlZGlyZWN0O1xuXG4gICAgaWYgKHR5cGVvZiByZWRpcmVjdCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJlZGlyZWN0ID0geyBwYXRoOiByZWRpcmVjdCB9O1xuICAgIH1cblxuICAgIGlmICghcmVkaXJlY3QgfHwgdHlwZW9mIHJlZGlyZWN0ICE9PSAnb2JqZWN0Jykge1xuICAgICAgaWYgKFwicHJvZHVjdGlvblwiICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgd2FybihcbiAgICAgICAgICBmYWxzZSwgKFwiaW52YWxpZCByZWRpcmVjdCBvcHRpb246IFwiICsgKEpTT04uc3RyaW5naWZ5KHJlZGlyZWN0KSkpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm4gX2NyZWF0ZVJvdXRlKG51bGwsIGxvY2F0aW9uKVxuICAgIH1cblxuICAgIHZhciByZSA9IHJlZGlyZWN0O1xuICAgIHZhciBuYW1lID0gcmUubmFtZTtcbiAgICB2YXIgcGF0aCA9IHJlLnBhdGg7XG4gICAgdmFyIHF1ZXJ5ID0gbG9jYXRpb24ucXVlcnk7XG4gICAgdmFyIGhhc2ggPSBsb2NhdGlvbi5oYXNoO1xuICAgIHZhciBwYXJhbXMgPSBsb2NhdGlvbi5wYXJhbXM7XG4gICAgcXVlcnkgPSByZS5oYXNPd25Qcm9wZXJ0eSgncXVlcnknKSA/IHJlLnF1ZXJ5IDogcXVlcnk7XG4gICAgaGFzaCA9IHJlLmhhc093blByb3BlcnR5KCdoYXNoJykgPyByZS5oYXNoIDogaGFzaDtcbiAgICBwYXJhbXMgPSByZS5oYXNPd25Qcm9wZXJ0eSgncGFyYW1zJykgPyByZS5wYXJhbXMgOiBwYXJhbXM7XG5cbiAgICBpZiAobmFtZSkge1xuICAgICAgLy8gcmVzb2x2ZWQgbmFtZWQgZGlyZWN0XG4gICAgICB2YXIgdGFyZ2V0UmVjb3JkID0gbmFtZU1hcFtuYW1lXTtcbiAgICAgIGlmIChcInByb2R1Y3Rpb25cIiAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIGFzc2VydCh0YXJnZXRSZWNvcmQsIChcInJlZGlyZWN0IGZhaWxlZDogbmFtZWQgcm91dGUgXFxcIlwiICsgbmFtZSArIFwiXFxcIiBub3QgZm91bmQuXCIpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBtYXRjaCh7XG4gICAgICAgIF9ub3JtYWxpemVkOiB0cnVlLFxuICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICBxdWVyeTogcXVlcnksXG4gICAgICAgIGhhc2g6IGhhc2gsXG4gICAgICAgIHBhcmFtczogcGFyYW1zXG4gICAgICB9LCB1bmRlZmluZWQsIGxvY2F0aW9uKVxuICAgIH0gZWxzZSBpZiAocGF0aCkge1xuICAgICAgLy8gMS4gcmVzb2x2ZSByZWxhdGl2ZSByZWRpcmVjdFxuICAgICAgdmFyIHJhd1BhdGggPSByZXNvbHZlUmVjb3JkUGF0aChwYXRoLCByZWNvcmQpO1xuICAgICAgLy8gMi4gcmVzb2x2ZSBwYXJhbXNcbiAgICAgIHZhciByZXNvbHZlZFBhdGggPSBmaWxsUGFyYW1zKHJhd1BhdGgsIHBhcmFtcywgKFwicmVkaXJlY3Qgcm91dGUgd2l0aCBwYXRoIFxcXCJcIiArIHJhd1BhdGggKyBcIlxcXCJcIikpO1xuICAgICAgLy8gMy4gcmVtYXRjaCB3aXRoIGV4aXN0aW5nIHF1ZXJ5IGFuZCBoYXNoXG4gICAgICByZXR1cm4gbWF0Y2goe1xuICAgICAgICBfbm9ybWFsaXplZDogdHJ1ZSxcbiAgICAgICAgcGF0aDogcmVzb2x2ZWRQYXRoLFxuICAgICAgICBxdWVyeTogcXVlcnksXG4gICAgICAgIGhhc2g6IGhhc2hcbiAgICAgIH0sIHVuZGVmaW5lZCwgbG9jYXRpb24pXG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChcInByb2R1Y3Rpb25cIiAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIHdhcm4oZmFsc2UsIChcImludmFsaWQgcmVkaXJlY3Qgb3B0aW9uOiBcIiArIChKU09OLnN0cmluZ2lmeShyZWRpcmVjdCkpKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gX2NyZWF0ZVJvdXRlKG51bGwsIGxvY2F0aW9uKVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGFsaWFzIChcbiAgICByZWNvcmQsXG4gICAgbG9jYXRpb24sXG4gICAgbWF0Y2hBc1xuICApIHtcbiAgICB2YXIgYWxpYXNlZFBhdGggPSBmaWxsUGFyYW1zKG1hdGNoQXMsIGxvY2F0aW9uLnBhcmFtcywgKFwiYWxpYXNlZCByb3V0ZSB3aXRoIHBhdGggXFxcIlwiICsgbWF0Y2hBcyArIFwiXFxcIlwiKSk7XG4gICAgdmFyIGFsaWFzZWRNYXRjaCA9IG1hdGNoKHtcbiAgICAgIF9ub3JtYWxpemVkOiB0cnVlLFxuICAgICAgcGF0aDogYWxpYXNlZFBhdGhcbiAgICB9KTtcbiAgICBpZiAoYWxpYXNlZE1hdGNoKSB7XG4gICAgICB2YXIgbWF0Y2hlZCA9IGFsaWFzZWRNYXRjaC5tYXRjaGVkO1xuICAgICAgdmFyIGFsaWFzZWRSZWNvcmQgPSBtYXRjaGVkW21hdGNoZWQubGVuZ3RoIC0gMV07XG4gICAgICBsb2NhdGlvbi5wYXJhbXMgPSBhbGlhc2VkTWF0Y2gucGFyYW1zO1xuICAgICAgcmV0dXJuIF9jcmVhdGVSb3V0ZShhbGlhc2VkUmVjb3JkLCBsb2NhdGlvbilcbiAgICB9XG4gICAgcmV0dXJuIF9jcmVhdGVSb3V0ZShudWxsLCBsb2NhdGlvbilcbiAgfVxuXG4gIGZ1bmN0aW9uIF9jcmVhdGVSb3V0ZSAoXG4gICAgcmVjb3JkLFxuICAgIGxvY2F0aW9uLFxuICAgIHJlZGlyZWN0ZWRGcm9tXG4gICkge1xuICAgIGlmIChyZWNvcmQgJiYgcmVjb3JkLnJlZGlyZWN0KSB7XG4gICAgICByZXR1cm4gcmVkaXJlY3QocmVjb3JkLCByZWRpcmVjdGVkRnJvbSB8fCBsb2NhdGlvbilcbiAgICB9XG4gICAgaWYgKHJlY29yZCAmJiByZWNvcmQubWF0Y2hBcykge1xuICAgICAgcmV0dXJuIGFsaWFzKHJlY29yZCwgbG9jYXRpb24sIHJlY29yZC5tYXRjaEFzKVxuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlUm91dGUocmVjb3JkLCBsb2NhdGlvbiwgcmVkaXJlY3RlZEZyb20sIHJvdXRlcilcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgbWF0Y2g6IG1hdGNoLFxuICAgIGFkZFJvdXRlczogYWRkUm91dGVzXG4gIH1cbn1cblxuZnVuY3Rpb24gbWF0Y2hSb3V0ZSAoXG4gIHJlZ2V4LFxuICBwYXRoLFxuICBwYXJhbXNcbikge1xuICB2YXIgbSA9IHBhdGgubWF0Y2gocmVnZXgpO1xuXG4gIGlmICghbSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9IGVsc2UgaWYgKCFwYXJhbXMpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgZm9yICh2YXIgaSA9IDEsIGxlbiA9IG0ubGVuZ3RoOyBpIDwgbGVuOyArK2kpIHtcbiAgICB2YXIga2V5ID0gcmVnZXgua2V5c1tpIC0gMV07XG4gICAgdmFyIHZhbCA9IHR5cGVvZiBtW2ldID09PSAnc3RyaW5nJyA/IGRlY29kZVVSSUNvbXBvbmVudChtW2ldKSA6IG1baV07XG4gICAgaWYgKGtleSkge1xuICAgICAgLy8gRml4ICMxOTk0OiB1c2luZyAqIHdpdGggcHJvcHM6IHRydWUgZ2VuZXJhdGVzIGEgcGFyYW0gbmFtZWQgMFxuICAgICAgcGFyYW1zW2tleS5uYW1lIHx8ICdwYXRoTWF0Y2gnXSA9IHZhbDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJ1ZVxufVxuXG5mdW5jdGlvbiByZXNvbHZlUmVjb3JkUGF0aCAocGF0aCwgcmVjb3JkKSB7XG4gIHJldHVybiByZXNvbHZlUGF0aChwYXRoLCByZWNvcmQucGFyZW50ID8gcmVjb3JkLnBhcmVudC5wYXRoIDogJy8nLCB0cnVlKVxufVxuXG4vKiAgKi9cblxuLy8gdXNlIFVzZXIgVGltaW5nIGFwaSAoaWYgcHJlc2VudCkgZm9yIG1vcmUgYWNjdXJhdGUga2V5IHByZWNpc2lvblxudmFyIFRpbWUgPVxuICBpbkJyb3dzZXIgJiYgd2luZG93LnBlcmZvcm1hbmNlICYmIHdpbmRvdy5wZXJmb3JtYW5jZS5ub3dcbiAgICA/IHdpbmRvdy5wZXJmb3JtYW5jZVxuICAgIDogRGF0ZTtcblxuZnVuY3Rpb24gZ2VuU3RhdGVLZXkgKCkge1xuICByZXR1cm4gVGltZS5ub3coKS50b0ZpeGVkKDMpXG59XG5cbnZhciBfa2V5ID0gZ2VuU3RhdGVLZXkoKTtcblxuZnVuY3Rpb24gZ2V0U3RhdGVLZXkgKCkge1xuICByZXR1cm4gX2tleVxufVxuXG5mdW5jdGlvbiBzZXRTdGF0ZUtleSAoa2V5KSB7XG4gIHJldHVybiAoX2tleSA9IGtleSlcbn1cblxuLyogICovXG5cbnZhciBwb3NpdGlvblN0b3JlID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuZnVuY3Rpb24gc2V0dXBTY3JvbGwgKCkge1xuICAvLyBGaXggZm9yICMxNTg1IGZvciBGaXJlZm94XG4gIC8vIEZpeCBmb3IgIzIxOTUgQWRkIG9wdGlvbmFsIHRoaXJkIGF0dHJpYnV0ZSB0byB3b3JrYXJvdW5kIGEgYnVnIGluIHNhZmFyaSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTgyNjc4XG4gIC8vIEZpeCBmb3IgIzI3NzQgU3VwcG9ydCBmb3IgYXBwcyBsb2FkZWQgZnJvbSBXaW5kb3dzIGZpbGUgc2hhcmVzIG5vdCBtYXBwZWQgdG8gbmV0d29yayBkcml2ZXM6IHJlcGxhY2VkIGxvY2F0aW9uLm9yaWdpbiB3aXRoXG4gIC8vIHdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbCArICcvLycgKyB3aW5kb3cubG9jYXRpb24uaG9zdFxuICAvLyBsb2NhdGlvbi5ob3N0IGNvbnRhaW5zIHRoZSBwb3J0IGFuZCBsb2NhdGlvbi5ob3N0bmFtZSBkb2Vzbid0XG4gIHZhciBwcm90b2NvbEFuZFBhdGggPSB3aW5kb3cubG9jYXRpb24ucHJvdG9jb2wgKyAnLy8nICsgd2luZG93LmxvY2F0aW9uLmhvc3Q7XG4gIHZhciBhYnNvbHV0ZVBhdGggPSB3aW5kb3cubG9jYXRpb24uaHJlZi5yZXBsYWNlKHByb3RvY29sQW5kUGF0aCwgJycpO1xuICB3aW5kb3cuaGlzdG9yeS5yZXBsYWNlU3RhdGUoeyBrZXk6IGdldFN0YXRlS2V5KCkgfSwgJycsIGFic29sdXRlUGF0aCk7XG4gIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdwb3BzdGF0ZScsIGZ1bmN0aW9uIChlKSB7XG4gICAgc2F2ZVNjcm9sbFBvc2l0aW9uKCk7XG4gICAgaWYgKGUuc3RhdGUgJiYgZS5zdGF0ZS5rZXkpIHtcbiAgICAgIHNldFN0YXRlS2V5KGUuc3RhdGUua2V5KTtcbiAgICB9XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBoYW5kbGVTY3JvbGwgKFxuICByb3V0ZXIsXG4gIHRvLFxuICBmcm9tLFxuICBpc1BvcFxuKSB7XG4gIGlmICghcm91dGVyLmFwcCkge1xuICAgIHJldHVyblxuICB9XG5cbiAgdmFyIGJlaGF2aW9yID0gcm91dGVyLm9wdGlvbnMuc2Nyb2xsQmVoYXZpb3I7XG4gIGlmICghYmVoYXZpb3IpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIGlmIChcInByb2R1Y3Rpb25cIiAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgYXNzZXJ0KHR5cGVvZiBiZWhhdmlvciA9PT0gJ2Z1bmN0aW9uJywgXCJzY3JvbGxCZWhhdmlvciBtdXN0IGJlIGEgZnVuY3Rpb25cIik7XG4gIH1cblxuICAvLyB3YWl0IHVudGlsIHJlLXJlbmRlciBmaW5pc2hlcyBiZWZvcmUgc2Nyb2xsaW5nXG4gIHJvdXRlci5hcHAuJG5leHRUaWNrKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcG9zaXRpb24gPSBnZXRTY3JvbGxQb3NpdGlvbigpO1xuICAgIHZhciBzaG91bGRTY3JvbGwgPSBiZWhhdmlvci5jYWxsKFxuICAgICAgcm91dGVyLFxuICAgICAgdG8sXG4gICAgICBmcm9tLFxuICAgICAgaXNQb3AgPyBwb3NpdGlvbiA6IG51bGxcbiAgICApO1xuXG4gICAgaWYgKCFzaG91bGRTY3JvbGwpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmICh0eXBlb2Ygc2hvdWxkU2Nyb2xsLnRoZW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHNob3VsZFNjcm9sbFxuICAgICAgICAudGhlbihmdW5jdGlvbiAoc2hvdWxkU2Nyb2xsKSB7XG4gICAgICAgICAgc2Nyb2xsVG9Qb3NpdGlvbigoc2hvdWxkU2Nyb2xsKSwgcG9zaXRpb24pO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgIGlmIChcInByb2R1Y3Rpb25cIiAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgICBhc3NlcnQoZmFsc2UsIGVyci50b1N0cmluZygpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBzY3JvbGxUb1Bvc2l0aW9uKHNob3VsZFNjcm9sbCwgcG9zaXRpb24pO1xuICAgIH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHNhdmVTY3JvbGxQb3NpdGlvbiAoKSB7XG4gIHZhciBrZXkgPSBnZXRTdGF0ZUtleSgpO1xuICBpZiAoa2V5KSB7XG4gICAgcG9zaXRpb25TdG9yZVtrZXldID0ge1xuICAgICAgeDogd2luZG93LnBhZ2VYT2Zmc2V0LFxuICAgICAgeTogd2luZG93LnBhZ2VZT2Zmc2V0XG4gICAgfTtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRTY3JvbGxQb3NpdGlvbiAoKSB7XG4gIHZhciBrZXkgPSBnZXRTdGF0ZUtleSgpO1xuICBpZiAoa2V5KSB7XG4gICAgcmV0dXJuIHBvc2l0aW9uU3RvcmVba2V5XVxuICB9XG59XG5cbmZ1bmN0aW9uIGdldEVsZW1lbnRQb3NpdGlvbiAoZWwsIG9mZnNldCkge1xuICB2YXIgZG9jRWwgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG4gIHZhciBkb2NSZWN0ID0gZG9jRWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIHZhciBlbFJlY3QgPSBlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgcmV0dXJuIHtcbiAgICB4OiBlbFJlY3QubGVmdCAtIGRvY1JlY3QubGVmdCAtIG9mZnNldC54LFxuICAgIHk6IGVsUmVjdC50b3AgLSBkb2NSZWN0LnRvcCAtIG9mZnNldC55XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNWYWxpZFBvc2l0aW9uIChvYmopIHtcbiAgcmV0dXJuIGlzTnVtYmVyKG9iai54KSB8fCBpc051bWJlcihvYmoueSlcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplUG9zaXRpb24gKG9iaikge1xuICByZXR1cm4ge1xuICAgIHg6IGlzTnVtYmVyKG9iai54KSA/IG9iai54IDogd2luZG93LnBhZ2VYT2Zmc2V0LFxuICAgIHk6IGlzTnVtYmVyKG9iai55KSA/IG9iai55IDogd2luZG93LnBhZ2VZT2Zmc2V0XG4gIH1cbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplT2Zmc2V0IChvYmopIHtcbiAgcmV0dXJuIHtcbiAgICB4OiBpc051bWJlcihvYmoueCkgPyBvYmoueCA6IDAsXG4gICAgeTogaXNOdW1iZXIob2JqLnkpID8gb2JqLnkgOiAwXG4gIH1cbn1cblxuZnVuY3Rpb24gaXNOdW1iZXIgKHYpIHtcbiAgcmV0dXJuIHR5cGVvZiB2ID09PSAnbnVtYmVyJ1xufVxuXG52YXIgaGFzaFN0YXJ0c1dpdGhOdW1iZXJSRSA9IC9eI1xcZC87XG5cbmZ1bmN0aW9uIHNjcm9sbFRvUG9zaXRpb24gKHNob3VsZFNjcm9sbCwgcG9zaXRpb24pIHtcbiAgdmFyIGlzT2JqZWN0ID0gdHlwZW9mIHNob3VsZFNjcm9sbCA9PT0gJ29iamVjdCc7XG4gIGlmIChpc09iamVjdCAmJiB0eXBlb2Ygc2hvdWxkU2Nyb2xsLnNlbGVjdG9yID09PSAnc3RyaW5nJykge1xuICAgIC8vIGdldEVsZW1lbnRCeUlkIHdvdWxkIHN0aWxsIGZhaWwgaWYgdGhlIHNlbGVjdG9yIGNvbnRhaW5zIGEgbW9yZSBjb21wbGljYXRlZCBxdWVyeSBsaWtlICNtYWluW2RhdGEtYXR0cl1cbiAgICAvLyBidXQgYXQgdGhlIHNhbWUgdGltZSwgaXQgZG9lc24ndCBtYWtlIG11Y2ggc2Vuc2UgdG8gc2VsZWN0IGFuIGVsZW1lbnQgd2l0aCBhbiBpZCBhbmQgYW4gZXh0cmEgc2VsZWN0b3JcbiAgICB2YXIgZWwgPSBoYXNoU3RhcnRzV2l0aE51bWJlclJFLnRlc3Qoc2hvdWxkU2Nyb2xsLnNlbGVjdG9yKSAvLyAkZmxvdy1kaXNhYmxlLWxpbmVcbiAgICAgID8gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoc2hvdWxkU2Nyb2xsLnNlbGVjdG9yLnNsaWNlKDEpKSAvLyAkZmxvdy1kaXNhYmxlLWxpbmVcbiAgICAgIDogZG9jdW1lbnQucXVlcnlTZWxlY3RvcihzaG91bGRTY3JvbGwuc2VsZWN0b3IpO1xuXG4gICAgaWYgKGVsKSB7XG4gICAgICB2YXIgb2Zmc2V0ID1cbiAgICAgICAgc2hvdWxkU2Nyb2xsLm9mZnNldCAmJiB0eXBlb2Ygc2hvdWxkU2Nyb2xsLm9mZnNldCA9PT0gJ29iamVjdCdcbiAgICAgICAgICA/IHNob3VsZFNjcm9sbC5vZmZzZXRcbiAgICAgICAgICA6IHt9O1xuICAgICAgb2Zmc2V0ID0gbm9ybWFsaXplT2Zmc2V0KG9mZnNldCk7XG4gICAgICBwb3NpdGlvbiA9IGdldEVsZW1lbnRQb3NpdGlvbihlbCwgb2Zmc2V0KTtcbiAgICB9IGVsc2UgaWYgKGlzVmFsaWRQb3NpdGlvbihzaG91bGRTY3JvbGwpKSB7XG4gICAgICBwb3NpdGlvbiA9IG5vcm1hbGl6ZVBvc2l0aW9uKHNob3VsZFNjcm9sbCk7XG4gICAgfVxuICB9IGVsc2UgaWYgKGlzT2JqZWN0ICYmIGlzVmFsaWRQb3NpdGlvbihzaG91bGRTY3JvbGwpKSB7XG4gICAgcG9zaXRpb24gPSBub3JtYWxpemVQb3NpdGlvbihzaG91bGRTY3JvbGwpO1xuICB9XG5cbiAgaWYgKHBvc2l0aW9uKSB7XG4gICAgd2luZG93LnNjcm9sbFRvKHBvc2l0aW9uLngsIHBvc2l0aW9uLnkpO1xuICB9XG59XG5cbi8qICAqL1xuXG52YXIgc3VwcG9ydHNQdXNoU3RhdGUgPVxuICBpbkJyb3dzZXIgJiZcbiAgKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgdWEgPSB3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudDtcblxuICAgIGlmIChcbiAgICAgICh1YS5pbmRleE9mKCdBbmRyb2lkIDIuJykgIT09IC0xIHx8IHVhLmluZGV4T2YoJ0FuZHJvaWQgNC4wJykgIT09IC0xKSAmJlxuICAgICAgdWEuaW5kZXhPZignTW9iaWxlIFNhZmFyaScpICE9PSAtMSAmJlxuICAgICAgdWEuaW5kZXhPZignQ2hyb21lJykgPT09IC0xICYmXG4gICAgICB1YS5pbmRleE9mKCdXaW5kb3dzIFBob25lJykgPT09IC0xXG4gICAgKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG5cbiAgICByZXR1cm4gd2luZG93Lmhpc3RvcnkgJiYgJ3B1c2hTdGF0ZScgaW4gd2luZG93Lmhpc3RvcnlcbiAgfSkoKTtcblxuZnVuY3Rpb24gcHVzaFN0YXRlICh1cmwsIHJlcGxhY2UpIHtcbiAgc2F2ZVNjcm9sbFBvc2l0aW9uKCk7XG4gIC8vIHRyeS4uLmNhdGNoIHRoZSBwdXNoU3RhdGUgY2FsbCB0byBnZXQgYXJvdW5kIFNhZmFyaVxuICAvLyBET00gRXhjZXB0aW9uIDE4IHdoZXJlIGl0IGxpbWl0cyB0byAxMDAgcHVzaFN0YXRlIGNhbGxzXG4gIHZhciBoaXN0b3J5ID0gd2luZG93Lmhpc3Rvcnk7XG4gIHRyeSB7XG4gICAgaWYgKHJlcGxhY2UpIHtcbiAgICAgIGhpc3RvcnkucmVwbGFjZVN0YXRlKHsga2V5OiBnZXRTdGF0ZUtleSgpIH0sICcnLCB1cmwpO1xuICAgIH0gZWxzZSB7XG4gICAgICBoaXN0b3J5LnB1c2hTdGF0ZSh7IGtleTogc2V0U3RhdGVLZXkoZ2VuU3RhdGVLZXkoKSkgfSwgJycsIHVybCk7XG4gICAgfVxuICB9IGNhdGNoIChlKSB7XG4gICAgd2luZG93LmxvY2F0aW9uW3JlcGxhY2UgPyAncmVwbGFjZScgOiAnYXNzaWduJ10odXJsKTtcbiAgfVxufVxuXG5mdW5jdGlvbiByZXBsYWNlU3RhdGUgKHVybCkge1xuICBwdXNoU3RhdGUodXJsLCB0cnVlKTtcbn1cblxuLyogICovXG5cbmZ1bmN0aW9uIHJ1blF1ZXVlIChxdWV1ZSwgZm4sIGNiKSB7XG4gIHZhciBzdGVwID0gZnVuY3Rpb24gKGluZGV4KSB7XG4gICAgaWYgKGluZGV4ID49IHF1ZXVlLmxlbmd0aCkge1xuICAgICAgY2IoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHF1ZXVlW2luZGV4XSkge1xuICAgICAgICBmbihxdWV1ZVtpbmRleF0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBzdGVwKGluZGV4ICsgMSk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RlcChpbmRleCArIDEpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcbiAgc3RlcCgwKTtcbn1cblxuLyogICovXG5cbmZ1bmN0aW9uIHJlc29sdmVBc3luY0NvbXBvbmVudHMgKG1hdGNoZWQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICh0bywgZnJvbSwgbmV4dCkge1xuICAgIHZhciBoYXNBc3luYyA9IGZhbHNlO1xuICAgIHZhciBwZW5kaW5nID0gMDtcbiAgICB2YXIgZXJyb3IgPSBudWxsO1xuXG4gICAgZmxhdE1hcENvbXBvbmVudHMobWF0Y2hlZCwgZnVuY3Rpb24gKGRlZiwgXywgbWF0Y2gsIGtleSkge1xuICAgICAgLy8gaWYgaXQncyBhIGZ1bmN0aW9uIGFuZCBkb2Vzbid0IGhhdmUgY2lkIGF0dGFjaGVkLFxuICAgICAgLy8gYXNzdW1lIGl0J3MgYW4gYXN5bmMgY29tcG9uZW50IHJlc29sdmUgZnVuY3Rpb24uXG4gICAgICAvLyB3ZSBhcmUgbm90IHVzaW5nIFZ1ZSdzIGRlZmF1bHQgYXN5bmMgcmVzb2x2aW5nIG1lY2hhbmlzbSBiZWNhdXNlXG4gICAgICAvLyB3ZSB3YW50IHRvIGhhbHQgdGhlIG5hdmlnYXRpb24gdW50aWwgdGhlIGluY29taW5nIGNvbXBvbmVudCBoYXMgYmVlblxuICAgICAgLy8gcmVzb2x2ZWQuXG4gICAgICBpZiAodHlwZW9mIGRlZiA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWYuY2lkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaGFzQXN5bmMgPSB0cnVlO1xuICAgICAgICBwZW5kaW5nKys7XG5cbiAgICAgICAgdmFyIHJlc29sdmUgPSBvbmNlKGZ1bmN0aW9uIChyZXNvbHZlZERlZikge1xuICAgICAgICAgIGlmIChpc0VTTW9kdWxlKHJlc29sdmVkRGVmKSkge1xuICAgICAgICAgICAgcmVzb2x2ZWREZWYgPSByZXNvbHZlZERlZi5kZWZhdWx0O1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBzYXZlIHJlc29sdmVkIG9uIGFzeW5jIGZhY3RvcnkgaW4gY2FzZSBpdCdzIHVzZWQgZWxzZXdoZXJlXG4gICAgICAgICAgZGVmLnJlc29sdmVkID0gdHlwZW9mIHJlc29sdmVkRGVmID09PSAnZnVuY3Rpb24nXG4gICAgICAgICAgICA/IHJlc29sdmVkRGVmXG4gICAgICAgICAgICA6IF9WdWUuZXh0ZW5kKHJlc29sdmVkRGVmKTtcbiAgICAgICAgICBtYXRjaC5jb21wb25lbnRzW2tleV0gPSByZXNvbHZlZERlZjtcbiAgICAgICAgICBwZW5kaW5nLS07XG4gICAgICAgICAgaWYgKHBlbmRpbmcgPD0gMCkge1xuICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgdmFyIHJlamVjdCA9IG9uY2UoZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgICAgIHZhciBtc2cgPSBcIkZhaWxlZCB0byByZXNvbHZlIGFzeW5jIGNvbXBvbmVudCBcIiArIGtleSArIFwiOiBcIiArIHJlYXNvbjtcbiAgICAgICAgICBcInByb2R1Y3Rpb25cIiAhPT0gJ3Byb2R1Y3Rpb24nICYmIHdhcm4oZmFsc2UsIG1zZyk7XG4gICAgICAgICAgaWYgKCFlcnJvcikge1xuICAgICAgICAgICAgZXJyb3IgPSBpc0Vycm9yKHJlYXNvbilcbiAgICAgICAgICAgICAgPyByZWFzb25cbiAgICAgICAgICAgICAgOiBuZXcgRXJyb3IobXNnKTtcbiAgICAgICAgICAgIG5leHQoZXJyb3IpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgdmFyIHJlcztcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXMgPSBkZWYocmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIHJlamVjdChlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocmVzKSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiByZXMudGhlbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgcmVzLnRoZW4ocmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gbmV3IHN5bnRheCBpbiBWdWUgMi4zXG4gICAgICAgICAgICB2YXIgY29tcCA9IHJlcy5jb21wb25lbnQ7XG4gICAgICAgICAgICBpZiAoY29tcCAmJiB0eXBlb2YgY29tcC50aGVuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgIGNvbXAudGhlbihyZXNvbHZlLCByZWplY3QpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKCFoYXNBc3luYykgeyBuZXh0KCk7IH1cbiAgfVxufVxuXG5mdW5jdGlvbiBmbGF0TWFwQ29tcG9uZW50cyAoXG4gIG1hdGNoZWQsXG4gIGZuXG4pIHtcbiAgcmV0dXJuIGZsYXR0ZW4obWF0Y2hlZC5tYXAoZnVuY3Rpb24gKG0pIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXMobS5jb21wb25lbnRzKS5tYXAoZnVuY3Rpb24gKGtleSkgeyByZXR1cm4gZm4oXG4gICAgICBtLmNvbXBvbmVudHNba2V5XSxcbiAgICAgIG0uaW5zdGFuY2VzW2tleV0sXG4gICAgICBtLCBrZXlcbiAgICApOyB9KVxuICB9KSlcbn1cblxuZnVuY3Rpb24gZmxhdHRlbiAoYXJyKSB7XG4gIHJldHVybiBBcnJheS5wcm90b3R5cGUuY29uY2F0LmFwcGx5KFtdLCBhcnIpXG59XG5cbnZhciBoYXNTeW1ib2wgPVxuICB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmXG4gIHR5cGVvZiBTeW1ib2wudG9TdHJpbmdUYWcgPT09ICdzeW1ib2wnO1xuXG5mdW5jdGlvbiBpc0VTTW9kdWxlIChvYmopIHtcbiAgcmV0dXJuIG9iai5fX2VzTW9kdWxlIHx8IChoYXNTeW1ib2wgJiYgb2JqW1N5bWJvbC50b1N0cmluZ1RhZ10gPT09ICdNb2R1bGUnKVxufVxuXG4vLyBpbiBXZWJwYWNrIDIsIHJlcXVpcmUuZW5zdXJlIG5vdyBhbHNvIHJldHVybnMgYSBQcm9taXNlXG4vLyBzbyB0aGUgcmVzb2x2ZS9yZWplY3QgZnVuY3Rpb25zIG1heSBnZXQgY2FsbGVkIGFuIGV4dHJhIHRpbWVcbi8vIGlmIHRoZSB1c2VyIHVzZXMgYW4gYXJyb3cgZnVuY3Rpb24gc2hvcnRoYW5kIHRoYXQgaGFwcGVucyB0b1xuLy8gcmV0dXJuIHRoYXQgUHJvbWlzZS5cbmZ1bmN0aW9uIG9uY2UgKGZuKSB7XG4gIHZhciBjYWxsZWQgPSBmYWxzZTtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHdoaWxlICggbGVuLS0gKSBhcmdzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuIF07XG5cbiAgICBpZiAoY2FsbGVkKSB7IHJldHVybiB9XG4gICAgY2FsbGVkID0gdHJ1ZTtcbiAgICByZXR1cm4gZm4uYXBwbHkodGhpcywgYXJncylcbiAgfVxufVxuXG52YXIgTmF2aWdhdGlvbkR1cGxpY2F0ZWQgPSAvKkBfX1BVUkVfXyovKGZ1bmN0aW9uIChFcnJvcikge1xuICBmdW5jdGlvbiBOYXZpZ2F0aW9uRHVwbGljYXRlZCAobm9ybWFsaXplZExvY2F0aW9uKSB7XG4gICAgRXJyb3IuY2FsbCh0aGlzKTtcbiAgICB0aGlzLm5hbWUgPSB0aGlzLl9uYW1lID0gJ05hdmlnYXRpb25EdXBsaWNhdGVkJztcbiAgICAvLyBwYXNzaW5nIHRoZSBtZXNzYWdlIHRvIHN1cGVyKCkgZG9lc24ndCBzZWVtIHRvIHdvcmsgaW4gdGhlIHRyYW5zcGlsZWQgdmVyc2lvblxuICAgIHRoaXMubWVzc2FnZSA9IFwiTmF2aWdhdGluZyB0byBjdXJyZW50IGxvY2F0aW9uIChcXFwiXCIgKyAobm9ybWFsaXplZExvY2F0aW9uLmZ1bGxQYXRoKSArIFwiXFxcIikgaXMgbm90IGFsbG93ZWRcIjtcbiAgICAvLyBhZGQgYSBzdGFjayBwcm9wZXJ0eSBzbyBzZXJ2aWNlcyBsaWtlIFNlbnRyeSBjYW4gY29ycmVjdGx5IGRpc3BsYXkgaXRcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ3N0YWNrJywge1xuICAgICAgdmFsdWU6IG5ldyBFcnJvcigpLnN0YWNrLFxuICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICAvLyB3ZSBjb3VsZCBhbHNvIGhhdmUgdXNlZFxuICAgIC8vIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIHRoaXMuY29uc3RydWN0b3IpXG4gICAgLy8gYnV0IGl0IG9ubHkgZXhpc3RzIG9uIG5vZGUgYW5kIGNocm9tZVxuICB9XG5cbiAgaWYgKCBFcnJvciApIE5hdmlnYXRpb25EdXBsaWNhdGVkLl9fcHJvdG9fXyA9IEVycm9yO1xuICBOYXZpZ2F0aW9uRHVwbGljYXRlZC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKCBFcnJvciAmJiBFcnJvci5wcm90b3R5cGUgKTtcbiAgTmF2aWdhdGlvbkR1cGxpY2F0ZWQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTmF2aWdhdGlvbkR1cGxpY2F0ZWQ7XG5cbiAgcmV0dXJuIE5hdmlnYXRpb25EdXBsaWNhdGVkO1xufShFcnJvcikpO1xuXG4vLyBzdXBwb3J0IElFOVxuTmF2aWdhdGlvbkR1cGxpY2F0ZWQuX25hbWUgPSAnTmF2aWdhdGlvbkR1cGxpY2F0ZWQnO1xuXG4vKiAgKi9cblxudmFyIEhpc3RvcnkgPSBmdW5jdGlvbiBIaXN0b3J5IChyb3V0ZXIsIGJhc2UpIHtcbiAgdGhpcy5yb3V0ZXIgPSByb3V0ZXI7XG4gIHRoaXMuYmFzZSA9IG5vcm1hbGl6ZUJhc2UoYmFzZSk7XG4gIC8vIHN0YXJ0IHdpdGggYSByb3V0ZSBvYmplY3QgdGhhdCBzdGFuZHMgZm9yIFwibm93aGVyZVwiXG4gIHRoaXMuY3VycmVudCA9IFNUQVJUO1xuICB0aGlzLnBlbmRpbmcgPSBudWxsO1xuICB0aGlzLnJlYWR5ID0gZmFsc2U7XG4gIHRoaXMucmVhZHlDYnMgPSBbXTtcbiAgdGhpcy5yZWFkeUVycm9yQ2JzID0gW107XG4gIHRoaXMuZXJyb3JDYnMgPSBbXTtcbn07XG5cbkhpc3RvcnkucHJvdG90eXBlLmxpc3RlbiA9IGZ1bmN0aW9uIGxpc3RlbiAoY2IpIHtcbiAgdGhpcy5jYiA9IGNiO1xufTtcblxuSGlzdG9yeS5wcm90b3R5cGUub25SZWFkeSA9IGZ1bmN0aW9uIG9uUmVhZHkgKGNiLCBlcnJvckNiKSB7XG4gIGlmICh0aGlzLnJlYWR5KSB7XG4gICAgY2IoKTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLnJlYWR5Q2JzLnB1c2goY2IpO1xuICAgIGlmIChlcnJvckNiKSB7XG4gICAgICB0aGlzLnJlYWR5RXJyb3JDYnMucHVzaChlcnJvckNiKTtcbiAgICB9XG4gIH1cbn07XG5cbkhpc3RvcnkucHJvdG90eXBlLm9uRXJyb3IgPSBmdW5jdGlvbiBvbkVycm9yIChlcnJvckNiKSB7XG4gIHRoaXMuZXJyb3JDYnMucHVzaChlcnJvckNiKTtcbn07XG5cbkhpc3RvcnkucHJvdG90eXBlLnRyYW5zaXRpb25UbyA9IGZ1bmN0aW9uIHRyYW5zaXRpb25UbyAoXG4gIGxvY2F0aW9uLFxuICBvbkNvbXBsZXRlLFxuICBvbkFib3J0XG4pIHtcbiAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuICB2YXIgcm91dGUgPSB0aGlzLnJvdXRlci5tYXRjaChsb2NhdGlvbiwgdGhpcy5jdXJyZW50KTtcbiAgdGhpcy5jb25maXJtVHJhbnNpdGlvbihcbiAgICByb3V0ZSxcbiAgICBmdW5jdGlvbiAoKSB7XG4gICAgICB0aGlzJDEudXBkYXRlUm91dGUocm91dGUpO1xuICAgICAgb25Db21wbGV0ZSAmJiBvbkNvbXBsZXRlKHJvdXRlKTtcbiAgICAgIHRoaXMkMS5lbnN1cmVVUkwoKTtcblxuICAgICAgLy8gZmlyZSByZWFkeSBjYnMgb25jZVxuICAgICAgaWYgKCF0aGlzJDEucmVhZHkpIHtcbiAgICAgICAgdGhpcyQxLnJlYWR5ID0gdHJ1ZTtcbiAgICAgICAgdGhpcyQxLnJlYWR5Q2JzLmZvckVhY2goZnVuY3Rpb24gKGNiKSB7XG4gICAgICAgICAgY2Iocm91dGUpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgIGlmIChvbkFib3J0KSB7XG4gICAgICAgIG9uQWJvcnQoZXJyKTtcbiAgICAgIH1cbiAgICAgIGlmIChlcnIgJiYgIXRoaXMkMS5yZWFkeSkge1xuICAgICAgICB0aGlzJDEucmVhZHkgPSB0cnVlO1xuICAgICAgICB0aGlzJDEucmVhZHlFcnJvckNicy5mb3JFYWNoKGZ1bmN0aW9uIChjYikge1xuICAgICAgICAgIGNiKGVycik7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgKTtcbn07XG5cbkhpc3RvcnkucHJvdG90eXBlLmNvbmZpcm1UcmFuc2l0aW9uID0gZnVuY3Rpb24gY29uZmlybVRyYW5zaXRpb24gKHJvdXRlLCBvbkNvbXBsZXRlLCBvbkFib3J0KSB7XG4gICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgdmFyIGN1cnJlbnQgPSB0aGlzLmN1cnJlbnQ7XG4gIHZhciBhYm9ydCA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAvLyBhZnRlciBtZXJnaW5nIGh0dHBzOi8vZ2l0aHViLmNvbS92dWVqcy92dWUtcm91dGVyL3B1bGwvMjc3MSB3ZVxuICAgIC8vIFdoZW4gdGhlIHVzZXIgbmF2aWdhdGVzIHRocm91Z2ggaGlzdG9yeSB0aHJvdWdoIGJhY2svZm9yd2FyZCBidXR0b25zXG4gICAgLy8gd2UgZG8gbm90IHdhbnQgdG8gdGhyb3cgdGhlIGVycm9yLiBXZSBvbmx5IHRocm93IGl0IGlmIGRpcmVjdGx5IGNhbGxpbmdcbiAgICAvLyBwdXNoL3JlcGxhY2UuIFRoYXQncyB3aHkgaXQncyBub3QgaW5jbHVkZWQgaW4gaXNFcnJvclxuICAgIGlmICghaXNFeHRlbmRlZEVycm9yKE5hdmlnYXRpb25EdXBsaWNhdGVkLCBlcnIpICYmIGlzRXJyb3IoZXJyKSkge1xuICAgICAgaWYgKHRoaXMkMS5lcnJvckNicy5sZW5ndGgpIHtcbiAgICAgICAgdGhpcyQxLmVycm9yQ2JzLmZvckVhY2goZnVuY3Rpb24gKGNiKSB7XG4gICAgICAgICAgY2IoZXJyKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB3YXJuKGZhbHNlLCAndW5jYXVnaHQgZXJyb3IgZHVyaW5nIHJvdXRlIG5hdmlnYXRpb246Jyk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgIH1cbiAgICB9XG4gICAgb25BYm9ydCAmJiBvbkFib3J0KGVycik7XG4gIH07XG4gIGlmIChcbiAgICBpc1NhbWVSb3V0ZShyb3V0ZSwgY3VycmVudCkgJiZcbiAgICAvLyBpbiB0aGUgY2FzZSB0aGUgcm91dGUgbWFwIGhhcyBiZWVuIGR5bmFtaWNhbGx5IGFwcGVuZGVkIHRvXG4gICAgcm91dGUubWF0Y2hlZC5sZW5ndGggPT09IGN1cnJlbnQubWF0Y2hlZC5sZW5ndGhcbiAgKSB7XG4gICAgdGhpcy5lbnN1cmVVUkwoKTtcbiAgICByZXR1cm4gYWJvcnQobmV3IE5hdmlnYXRpb25EdXBsaWNhdGVkKHJvdXRlKSlcbiAgfVxuXG4gIHZhciByZWYgPSByZXNvbHZlUXVldWUoXG4gICAgdGhpcy5jdXJyZW50Lm1hdGNoZWQsXG4gICAgcm91dGUubWF0Y2hlZFxuICApO1xuICAgIHZhciB1cGRhdGVkID0gcmVmLnVwZGF0ZWQ7XG4gICAgdmFyIGRlYWN0aXZhdGVkID0gcmVmLmRlYWN0aXZhdGVkO1xuICAgIHZhciBhY3RpdmF0ZWQgPSByZWYuYWN0aXZhdGVkO1xuXG4gIHZhciBxdWV1ZSA9IFtdLmNvbmNhdChcbiAgICAvLyBpbi1jb21wb25lbnQgbGVhdmUgZ3VhcmRzXG4gICAgZXh0cmFjdExlYXZlR3VhcmRzKGRlYWN0aXZhdGVkKSxcbiAgICAvLyBnbG9iYWwgYmVmb3JlIGhvb2tzXG4gICAgdGhpcy5yb3V0ZXIuYmVmb3JlSG9va3MsXG4gICAgLy8gaW4tY29tcG9uZW50IHVwZGF0ZSBob29rc1xuICAgIGV4dHJhY3RVcGRhdGVIb29rcyh1cGRhdGVkKSxcbiAgICAvLyBpbi1jb25maWcgZW50ZXIgZ3VhcmRzXG4gICAgYWN0aXZhdGVkLm1hcChmdW5jdGlvbiAobSkgeyByZXR1cm4gbS5iZWZvcmVFbnRlcjsgfSksXG4gICAgLy8gYXN5bmMgY29tcG9uZW50c1xuICAgIHJlc29sdmVBc3luY0NvbXBvbmVudHMoYWN0aXZhdGVkKVxuICApO1xuXG4gIHRoaXMucGVuZGluZyA9IHJvdXRlO1xuICB2YXIgaXRlcmF0b3IgPSBmdW5jdGlvbiAoaG9vaywgbmV4dCkge1xuICAgIGlmICh0aGlzJDEucGVuZGluZyAhPT0gcm91dGUpIHtcbiAgICAgIHJldHVybiBhYm9ydCgpXG4gICAgfVxuICAgIHRyeSB7XG4gICAgICBob29rKHJvdXRlLCBjdXJyZW50LCBmdW5jdGlvbiAodG8pIHtcbiAgICAgICAgaWYgKHRvID09PSBmYWxzZSB8fCBpc0Vycm9yKHRvKSkge1xuICAgICAgICAgIC8vIG5leHQoZmFsc2UpIC0+IGFib3J0IG5hdmlnYXRpb24sIGVuc3VyZSBjdXJyZW50IFVSTFxuICAgICAgICAgIHRoaXMkMS5lbnN1cmVVUkwodHJ1ZSk7XG4gICAgICAgICAgYWJvcnQodG8pO1xuICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgIHR5cGVvZiB0byA9PT0gJ3N0cmluZycgfHxcbiAgICAgICAgICAodHlwZW9mIHRvID09PSAnb2JqZWN0JyAmJlxuICAgICAgICAgICAgKHR5cGVvZiB0by5wYXRoID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgdG8ubmFtZSA9PT0gJ3N0cmluZycpKVxuICAgICAgICApIHtcbiAgICAgICAgICAvLyBuZXh0KCcvJykgb3IgbmV4dCh7IHBhdGg6ICcvJyB9KSAtPiByZWRpcmVjdFxuICAgICAgICAgIGFib3J0KCk7XG4gICAgICAgICAgaWYgKHR5cGVvZiB0byA9PT0gJ29iamVjdCcgJiYgdG8ucmVwbGFjZSkge1xuICAgICAgICAgICAgdGhpcyQxLnJlcGxhY2UodG8pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzJDEucHVzaCh0byk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIGNvbmZpcm0gdHJhbnNpdGlvbiBhbmQgcGFzcyBvbiB0aGUgdmFsdWVcbiAgICAgICAgICBuZXh0KHRvKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgYWJvcnQoZSk7XG4gICAgfVxuICB9O1xuXG4gIHJ1blF1ZXVlKHF1ZXVlLCBpdGVyYXRvciwgZnVuY3Rpb24gKCkge1xuICAgIHZhciBwb3N0RW50ZXJDYnMgPSBbXTtcbiAgICB2YXIgaXNWYWxpZCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMkMS5jdXJyZW50ID09PSByb3V0ZTsgfTtcbiAgICAvLyB3YWl0IHVudGlsIGFzeW5jIGNvbXBvbmVudHMgYXJlIHJlc29sdmVkIGJlZm9yZVxuICAgIC8vIGV4dHJhY3RpbmcgaW4tY29tcG9uZW50IGVudGVyIGd1YXJkc1xuICAgIHZhciBlbnRlckd1YXJkcyA9IGV4dHJhY3RFbnRlckd1YXJkcyhhY3RpdmF0ZWQsIHBvc3RFbnRlckNicywgaXNWYWxpZCk7XG4gICAgdmFyIHF1ZXVlID0gZW50ZXJHdWFyZHMuY29uY2F0KHRoaXMkMS5yb3V0ZXIucmVzb2x2ZUhvb2tzKTtcbiAgICBydW5RdWV1ZShxdWV1ZSwgaXRlcmF0b3IsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmICh0aGlzJDEucGVuZGluZyAhPT0gcm91dGUpIHtcbiAgICAgICAgcmV0dXJuIGFib3J0KClcbiAgICAgIH1cbiAgICAgIHRoaXMkMS5wZW5kaW5nID0gbnVsbDtcbiAgICAgIG9uQ29tcGxldGUocm91dGUpO1xuICAgICAgaWYgKHRoaXMkMS5yb3V0ZXIuYXBwKSB7XG4gICAgICAgIHRoaXMkMS5yb3V0ZXIuYXBwLiRuZXh0VGljayhmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcG9zdEVudGVyQ2JzLmZvckVhY2goZnVuY3Rpb24gKGNiKSB7XG4gICAgICAgICAgICBjYigpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG59O1xuXG5IaXN0b3J5LnByb3RvdHlwZS51cGRhdGVSb3V0ZSA9IGZ1bmN0aW9uIHVwZGF0ZVJvdXRlIChyb3V0ZSkge1xuICB2YXIgcHJldiA9IHRoaXMuY3VycmVudDtcbiAgdGhpcy5jdXJyZW50ID0gcm91dGU7XG4gIHRoaXMuY2IgJiYgdGhpcy5jYihyb3V0ZSk7XG4gIHRoaXMucm91dGVyLmFmdGVySG9va3MuZm9yRWFjaChmdW5jdGlvbiAoaG9vaykge1xuICAgIGhvb2sgJiYgaG9vayhyb3V0ZSwgcHJldik7XG4gIH0pO1xufTtcblxuZnVuY3Rpb24gbm9ybWFsaXplQmFzZSAoYmFzZSkge1xuICBpZiAoIWJhc2UpIHtcbiAgICBpZiAoaW5Ccm93c2VyKSB7XG4gICAgICAvLyByZXNwZWN0IDxiYXNlPiB0YWdcbiAgICAgIHZhciBiYXNlRWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdiYXNlJyk7XG4gICAgICBiYXNlID0gKGJhc2VFbCAmJiBiYXNlRWwuZ2V0QXR0cmlidXRlKCdocmVmJykpIHx8ICcvJztcbiAgICAgIC8vIHN0cmlwIGZ1bGwgVVJMIG9yaWdpblxuICAgICAgYmFzZSA9IGJhc2UucmVwbGFjZSgvXmh0dHBzPzpcXC9cXC9bXlxcL10rLywgJycpO1xuICAgIH0gZWxzZSB7XG4gICAgICBiYXNlID0gJy8nO1xuICAgIH1cbiAgfVxuICAvLyBtYWtlIHN1cmUgdGhlcmUncyB0aGUgc3RhcnRpbmcgc2xhc2hcbiAgaWYgKGJhc2UuY2hhckF0KDApICE9PSAnLycpIHtcbiAgICBiYXNlID0gJy8nICsgYmFzZTtcbiAgfVxuICAvLyByZW1vdmUgdHJhaWxpbmcgc2xhc2hcbiAgcmV0dXJuIGJhc2UucmVwbGFjZSgvXFwvJC8sICcnKVxufVxuXG5mdW5jdGlvbiByZXNvbHZlUXVldWUgKFxuICBjdXJyZW50LFxuICBuZXh0XG4pIHtcbiAgdmFyIGk7XG4gIHZhciBtYXggPSBNYXRoLm1heChjdXJyZW50Lmxlbmd0aCwgbmV4dC5sZW5ndGgpO1xuICBmb3IgKGkgPSAwOyBpIDwgbWF4OyBpKyspIHtcbiAgICBpZiAoY3VycmVudFtpXSAhPT0gbmV4dFtpXSkge1xuICAgICAgYnJlYWtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHtcbiAgICB1cGRhdGVkOiBuZXh0LnNsaWNlKDAsIGkpLFxuICAgIGFjdGl2YXRlZDogbmV4dC5zbGljZShpKSxcbiAgICBkZWFjdGl2YXRlZDogY3VycmVudC5zbGljZShpKVxuICB9XG59XG5cbmZ1bmN0aW9uIGV4dHJhY3RHdWFyZHMgKFxuICByZWNvcmRzLFxuICBuYW1lLFxuICBiaW5kLFxuICByZXZlcnNlXG4pIHtcbiAgdmFyIGd1YXJkcyA9IGZsYXRNYXBDb21wb25lbnRzKHJlY29yZHMsIGZ1bmN0aW9uIChkZWYsIGluc3RhbmNlLCBtYXRjaCwga2V5KSB7XG4gICAgdmFyIGd1YXJkID0gZXh0cmFjdEd1YXJkKGRlZiwgbmFtZSk7XG4gICAgaWYgKGd1YXJkKSB7XG4gICAgICByZXR1cm4gQXJyYXkuaXNBcnJheShndWFyZClcbiAgICAgICAgPyBndWFyZC5tYXAoZnVuY3Rpb24gKGd1YXJkKSB7IHJldHVybiBiaW5kKGd1YXJkLCBpbnN0YW5jZSwgbWF0Y2gsIGtleSk7IH0pXG4gICAgICAgIDogYmluZChndWFyZCwgaW5zdGFuY2UsIG1hdGNoLCBrZXkpXG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGZsYXR0ZW4ocmV2ZXJzZSA/IGd1YXJkcy5yZXZlcnNlKCkgOiBndWFyZHMpXG59XG5cbmZ1bmN0aW9uIGV4dHJhY3RHdWFyZCAoXG4gIGRlZixcbiAga2V5XG4pIHtcbiAgaWYgKHR5cGVvZiBkZWYgIT09ICdmdW5jdGlvbicpIHtcbiAgICAvLyBleHRlbmQgbm93IHNvIHRoYXQgZ2xvYmFsIG1peGlucyBhcmUgYXBwbGllZC5cbiAgICBkZWYgPSBfVnVlLmV4dGVuZChkZWYpO1xuICB9XG4gIHJldHVybiBkZWYub3B0aW9uc1trZXldXG59XG5cbmZ1bmN0aW9uIGV4dHJhY3RMZWF2ZUd1YXJkcyAoZGVhY3RpdmF0ZWQpIHtcbiAgcmV0dXJuIGV4dHJhY3RHdWFyZHMoZGVhY3RpdmF0ZWQsICdiZWZvcmVSb3V0ZUxlYXZlJywgYmluZEd1YXJkLCB0cnVlKVxufVxuXG5mdW5jdGlvbiBleHRyYWN0VXBkYXRlSG9va3MgKHVwZGF0ZWQpIHtcbiAgcmV0dXJuIGV4dHJhY3RHdWFyZHModXBkYXRlZCwgJ2JlZm9yZVJvdXRlVXBkYXRlJywgYmluZEd1YXJkKVxufVxuXG5mdW5jdGlvbiBiaW5kR3VhcmQgKGd1YXJkLCBpbnN0YW5jZSkge1xuICBpZiAoaW5zdGFuY2UpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gYm91bmRSb3V0ZUd1YXJkICgpIHtcbiAgICAgIHJldHVybiBndWFyZC5hcHBseShpbnN0YW5jZSwgYXJndW1lbnRzKVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBleHRyYWN0RW50ZXJHdWFyZHMgKFxuICBhY3RpdmF0ZWQsXG4gIGNicyxcbiAgaXNWYWxpZFxuKSB7XG4gIHJldHVybiBleHRyYWN0R3VhcmRzKFxuICAgIGFjdGl2YXRlZCxcbiAgICAnYmVmb3JlUm91dGVFbnRlcicsXG4gICAgZnVuY3Rpb24gKGd1YXJkLCBfLCBtYXRjaCwga2V5KSB7XG4gICAgICByZXR1cm4gYmluZEVudGVyR3VhcmQoZ3VhcmQsIG1hdGNoLCBrZXksIGNicywgaXNWYWxpZClcbiAgICB9XG4gIClcbn1cblxuZnVuY3Rpb24gYmluZEVudGVyR3VhcmQgKFxuICBndWFyZCxcbiAgbWF0Y2gsXG4gIGtleSxcbiAgY2JzLFxuICBpc1ZhbGlkXG4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHJvdXRlRW50ZXJHdWFyZCAodG8sIGZyb20sIG5leHQpIHtcbiAgICByZXR1cm4gZ3VhcmQodG8sIGZyb20sIGZ1bmN0aW9uIChjYikge1xuICAgICAgaWYgKHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBjYnMucHVzaChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgLy8gIzc1MFxuICAgICAgICAgIC8vIGlmIGEgcm91dGVyLXZpZXcgaXMgd3JhcHBlZCB3aXRoIGFuIG91dC1pbiB0cmFuc2l0aW9uLFxuICAgICAgICAgIC8vIHRoZSBpbnN0YW5jZSBtYXkgbm90IGhhdmUgYmVlbiByZWdpc3RlcmVkIGF0IHRoaXMgdGltZS5cbiAgICAgICAgICAvLyB3ZSB3aWxsIG5lZWQgdG8gcG9sbCBmb3IgcmVnaXN0cmF0aW9uIHVudGlsIGN1cnJlbnQgcm91dGVcbiAgICAgICAgICAvLyBpcyBubyBsb25nZXIgdmFsaWQuXG4gICAgICAgICAgcG9sbChjYiwgbWF0Y2guaW5zdGFuY2VzLCBrZXksIGlzVmFsaWQpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIG5leHQoY2IpO1xuICAgIH0pXG4gIH1cbn1cblxuZnVuY3Rpb24gcG9sbCAoXG4gIGNiLCAvLyBzb21laG93IGZsb3cgY2Fubm90IGluZmVyIHRoaXMgaXMgYSBmdW5jdGlvblxuICBpbnN0YW5jZXMsXG4gIGtleSxcbiAgaXNWYWxpZFxuKSB7XG4gIGlmIChcbiAgICBpbnN0YW5jZXNba2V5XSAmJlxuICAgICFpbnN0YW5jZXNba2V5XS5faXNCZWluZ0Rlc3Ryb3llZCAvLyBkbyBub3QgcmV1c2UgYmVpbmcgZGVzdHJveWVkIGluc3RhbmNlXG4gICkge1xuICAgIGNiKGluc3RhbmNlc1trZXldKTtcbiAgfSBlbHNlIGlmIChpc1ZhbGlkKCkpIHtcbiAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgIHBvbGwoY2IsIGluc3RhbmNlcywga2V5LCBpc1ZhbGlkKTtcbiAgICB9LCAxNik7XG4gIH1cbn1cblxuLyogICovXG5cbnZhciBIVE1MNUhpc3RvcnkgPSAvKkBfX1BVUkVfXyovKGZ1bmN0aW9uIChIaXN0b3J5KSB7XG4gIGZ1bmN0aW9uIEhUTUw1SGlzdG9yeSAocm91dGVyLCBiYXNlKSB7XG4gICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgICBIaXN0b3J5LmNhbGwodGhpcywgcm91dGVyLCBiYXNlKTtcblxuICAgIHZhciBleHBlY3RTY3JvbGwgPSByb3V0ZXIub3B0aW9ucy5zY3JvbGxCZWhhdmlvcjtcbiAgICB2YXIgc3VwcG9ydHNTY3JvbGwgPSBzdXBwb3J0c1B1c2hTdGF0ZSAmJiBleHBlY3RTY3JvbGw7XG5cbiAgICBpZiAoc3VwcG9ydHNTY3JvbGwpIHtcbiAgICAgIHNldHVwU2Nyb2xsKCk7XG4gICAgfVxuXG4gICAgdmFyIGluaXRMb2NhdGlvbiA9IGdldExvY2F0aW9uKHRoaXMuYmFzZSk7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3BvcHN0YXRlJywgZnVuY3Rpb24gKGUpIHtcbiAgICAgIHZhciBjdXJyZW50ID0gdGhpcyQxLmN1cnJlbnQ7XG5cbiAgICAgIC8vIEF2b2lkaW5nIGZpcnN0IGBwb3BzdGF0ZWAgZXZlbnQgZGlzcGF0Y2hlZCBpbiBzb21lIGJyb3dzZXJzIGJ1dCBmaXJzdFxuICAgICAgLy8gaGlzdG9yeSByb3V0ZSBub3QgdXBkYXRlZCBzaW5jZSBhc3luYyBndWFyZCBhdCB0aGUgc2FtZSB0aW1lLlxuICAgICAgdmFyIGxvY2F0aW9uID0gZ2V0TG9jYXRpb24odGhpcyQxLmJhc2UpO1xuICAgICAgaWYgKHRoaXMkMS5jdXJyZW50ID09PSBTVEFSVCAmJiBsb2NhdGlvbiA9PT0gaW5pdExvY2F0aW9uKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICB0aGlzJDEudHJhbnNpdGlvblRvKGxvY2F0aW9uLCBmdW5jdGlvbiAocm91dGUpIHtcbiAgICAgICAgaWYgKHN1cHBvcnRzU2Nyb2xsKSB7XG4gICAgICAgICAgaGFuZGxlU2Nyb2xsKHJvdXRlciwgcm91dGUsIGN1cnJlbnQsIHRydWUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIGlmICggSGlzdG9yeSApIEhUTUw1SGlzdG9yeS5fX3Byb3RvX18gPSBIaXN0b3J5O1xuICBIVE1MNUhpc3RvcnkucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZSggSGlzdG9yeSAmJiBIaXN0b3J5LnByb3RvdHlwZSApO1xuICBIVE1MNUhpc3RvcnkucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gSFRNTDVIaXN0b3J5O1xuXG4gIEhUTUw1SGlzdG9yeS5wcm90b3R5cGUuZ28gPSBmdW5jdGlvbiBnbyAobikge1xuICAgIHdpbmRvdy5oaXN0b3J5LmdvKG4pO1xuICB9O1xuXG4gIEhUTUw1SGlzdG9yeS5wcm90b3R5cGUucHVzaCA9IGZ1bmN0aW9uIHB1c2ggKGxvY2F0aW9uLCBvbkNvbXBsZXRlLCBvbkFib3J0KSB7XG4gICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgICB2YXIgcmVmID0gdGhpcztcbiAgICB2YXIgZnJvbVJvdXRlID0gcmVmLmN1cnJlbnQ7XG4gICAgdGhpcy50cmFuc2l0aW9uVG8obG9jYXRpb24sIGZ1bmN0aW9uIChyb3V0ZSkge1xuICAgICAgcHVzaFN0YXRlKGNsZWFuUGF0aCh0aGlzJDEuYmFzZSArIHJvdXRlLmZ1bGxQYXRoKSk7XG4gICAgICBoYW5kbGVTY3JvbGwodGhpcyQxLnJvdXRlciwgcm91dGUsIGZyb21Sb3V0ZSwgZmFsc2UpO1xuICAgICAgb25Db21wbGV0ZSAmJiBvbkNvbXBsZXRlKHJvdXRlKTtcbiAgICB9LCBvbkFib3J0KTtcbiAgfTtcblxuICBIVE1MNUhpc3RvcnkucHJvdG90eXBlLnJlcGxhY2UgPSBmdW5jdGlvbiByZXBsYWNlIChsb2NhdGlvbiwgb25Db21wbGV0ZSwgb25BYm9ydCkge1xuICAgIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gICAgdmFyIHJlZiA9IHRoaXM7XG4gICAgdmFyIGZyb21Sb3V0ZSA9IHJlZi5jdXJyZW50O1xuICAgIHRoaXMudHJhbnNpdGlvblRvKGxvY2F0aW9uLCBmdW5jdGlvbiAocm91dGUpIHtcbiAgICAgIHJlcGxhY2VTdGF0ZShjbGVhblBhdGgodGhpcyQxLmJhc2UgKyByb3V0ZS5mdWxsUGF0aCkpO1xuICAgICAgaGFuZGxlU2Nyb2xsKHRoaXMkMS5yb3V0ZXIsIHJvdXRlLCBmcm9tUm91dGUsIGZhbHNlKTtcbiAgICAgIG9uQ29tcGxldGUgJiYgb25Db21wbGV0ZShyb3V0ZSk7XG4gICAgfSwgb25BYm9ydCk7XG4gIH07XG5cbiAgSFRNTDVIaXN0b3J5LnByb3RvdHlwZS5lbnN1cmVVUkwgPSBmdW5jdGlvbiBlbnN1cmVVUkwgKHB1c2gpIHtcbiAgICBpZiAoZ2V0TG9jYXRpb24odGhpcy5iYXNlKSAhPT0gdGhpcy5jdXJyZW50LmZ1bGxQYXRoKSB7XG4gICAgICB2YXIgY3VycmVudCA9IGNsZWFuUGF0aCh0aGlzLmJhc2UgKyB0aGlzLmN1cnJlbnQuZnVsbFBhdGgpO1xuICAgICAgcHVzaCA/IHB1c2hTdGF0ZShjdXJyZW50KSA6IHJlcGxhY2VTdGF0ZShjdXJyZW50KTtcbiAgICB9XG4gIH07XG5cbiAgSFRNTDVIaXN0b3J5LnByb3RvdHlwZS5nZXRDdXJyZW50TG9jYXRpb24gPSBmdW5jdGlvbiBnZXRDdXJyZW50TG9jYXRpb24gKCkge1xuICAgIHJldHVybiBnZXRMb2NhdGlvbih0aGlzLmJhc2UpXG4gIH07XG5cbiAgcmV0dXJuIEhUTUw1SGlzdG9yeTtcbn0oSGlzdG9yeSkpO1xuXG5mdW5jdGlvbiBnZXRMb2NhdGlvbiAoYmFzZSkge1xuICB2YXIgcGF0aCA9IGRlY29kZVVSSSh3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUpO1xuICBpZiAoYmFzZSAmJiBwYXRoLmluZGV4T2YoYmFzZSkgPT09IDApIHtcbiAgICBwYXRoID0gcGF0aC5zbGljZShiYXNlLmxlbmd0aCk7XG4gIH1cbiAgcmV0dXJuIChwYXRoIHx8ICcvJykgKyB3aW5kb3cubG9jYXRpb24uc2VhcmNoICsgd2luZG93LmxvY2F0aW9uLmhhc2hcbn1cblxuLyogICovXG5cbnZhciBIYXNoSGlzdG9yeSA9IC8qQF9fUFVSRV9fKi8oZnVuY3Rpb24gKEhpc3RvcnkpIHtcbiAgZnVuY3Rpb24gSGFzaEhpc3RvcnkgKHJvdXRlciwgYmFzZSwgZmFsbGJhY2spIHtcbiAgICBIaXN0b3J5LmNhbGwodGhpcywgcm91dGVyLCBiYXNlKTtcbiAgICAvLyBjaGVjayBoaXN0b3J5IGZhbGxiYWNrIGRlZXBsaW5raW5nXG4gICAgaWYgKGZhbGxiYWNrICYmIGNoZWNrRmFsbGJhY2sodGhpcy5iYXNlKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGVuc3VyZVNsYXNoKCk7XG4gIH1cblxuICBpZiAoIEhpc3RvcnkgKSBIYXNoSGlzdG9yeS5fX3Byb3RvX18gPSBIaXN0b3J5O1xuICBIYXNoSGlzdG9yeS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKCBIaXN0b3J5ICYmIEhpc3RvcnkucHJvdG90eXBlICk7XG4gIEhhc2hIaXN0b3J5LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEhhc2hIaXN0b3J5O1xuXG4gIC8vIHRoaXMgaXMgZGVsYXllZCB1bnRpbCB0aGUgYXBwIG1vdW50c1xuICAvLyB0byBhdm9pZCB0aGUgaGFzaGNoYW5nZSBsaXN0ZW5lciBiZWluZyBmaXJlZCB0b28gZWFybHlcbiAgSGFzaEhpc3RvcnkucHJvdG90eXBlLnNldHVwTGlzdGVuZXJzID0gZnVuY3Rpb24gc2V0dXBMaXN0ZW5lcnMgKCkge1xuICAgIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gICAgdmFyIHJvdXRlciA9IHRoaXMucm91dGVyO1xuICAgIHZhciBleHBlY3RTY3JvbGwgPSByb3V0ZXIub3B0aW9ucy5zY3JvbGxCZWhhdmlvcjtcbiAgICB2YXIgc3VwcG9ydHNTY3JvbGwgPSBzdXBwb3J0c1B1c2hTdGF0ZSAmJiBleHBlY3RTY3JvbGw7XG5cbiAgICBpZiAoc3VwcG9ydHNTY3JvbGwpIHtcbiAgICAgIHNldHVwU2Nyb2xsKCk7XG4gICAgfVxuXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICBzdXBwb3J0c1B1c2hTdGF0ZSA/ICdwb3BzdGF0ZScgOiAnaGFzaGNoYW5nZScsXG4gICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBjdXJyZW50ID0gdGhpcyQxLmN1cnJlbnQ7XG4gICAgICAgIGlmICghZW5zdXJlU2xhc2goKSkge1xuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIHRoaXMkMS50cmFuc2l0aW9uVG8oZ2V0SGFzaCgpLCBmdW5jdGlvbiAocm91dGUpIHtcbiAgICAgICAgICBpZiAoc3VwcG9ydHNTY3JvbGwpIHtcbiAgICAgICAgICAgIGhhbmRsZVNjcm9sbCh0aGlzJDEucm91dGVyLCByb3V0ZSwgY3VycmVudCwgdHJ1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghc3VwcG9ydHNQdXNoU3RhdGUpIHtcbiAgICAgICAgICAgIHJlcGxhY2VIYXNoKHJvdXRlLmZ1bGxQYXRoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICk7XG4gIH07XG5cbiAgSGFzaEhpc3RvcnkucHJvdG90eXBlLnB1c2ggPSBmdW5jdGlvbiBwdXNoIChsb2NhdGlvbiwgb25Db21wbGV0ZSwgb25BYm9ydCkge1xuICAgIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gICAgdmFyIHJlZiA9IHRoaXM7XG4gICAgdmFyIGZyb21Sb3V0ZSA9IHJlZi5jdXJyZW50O1xuICAgIHRoaXMudHJhbnNpdGlvblRvKFxuICAgICAgbG9jYXRpb24sXG4gICAgICBmdW5jdGlvbiAocm91dGUpIHtcbiAgICAgICAgcHVzaEhhc2gocm91dGUuZnVsbFBhdGgpO1xuICAgICAgICBoYW5kbGVTY3JvbGwodGhpcyQxLnJvdXRlciwgcm91dGUsIGZyb21Sb3V0ZSwgZmFsc2UpO1xuICAgICAgICBvbkNvbXBsZXRlICYmIG9uQ29tcGxldGUocm91dGUpO1xuICAgICAgfSxcbiAgICAgIG9uQWJvcnRcbiAgICApO1xuICB9O1xuXG4gIEhhc2hIaXN0b3J5LnByb3RvdHlwZS5yZXBsYWNlID0gZnVuY3Rpb24gcmVwbGFjZSAobG9jYXRpb24sIG9uQ29tcGxldGUsIG9uQWJvcnQpIHtcbiAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuICAgIHZhciByZWYgPSB0aGlzO1xuICAgIHZhciBmcm9tUm91dGUgPSByZWYuY3VycmVudDtcbiAgICB0aGlzLnRyYW5zaXRpb25UbyhcbiAgICAgIGxvY2F0aW9uLFxuICAgICAgZnVuY3Rpb24gKHJvdXRlKSB7XG4gICAgICAgIHJlcGxhY2VIYXNoKHJvdXRlLmZ1bGxQYXRoKTtcbiAgICAgICAgaGFuZGxlU2Nyb2xsKHRoaXMkMS5yb3V0ZXIsIHJvdXRlLCBmcm9tUm91dGUsIGZhbHNlKTtcbiAgICAgICAgb25Db21wbGV0ZSAmJiBvbkNvbXBsZXRlKHJvdXRlKTtcbiAgICAgIH0sXG4gICAgICBvbkFib3J0XG4gICAgKTtcbiAgfTtcblxuICBIYXNoSGlzdG9yeS5wcm90b3R5cGUuZ28gPSBmdW5jdGlvbiBnbyAobikge1xuICAgIHdpbmRvdy5oaXN0b3J5LmdvKG4pO1xuICB9O1xuXG4gIEhhc2hIaXN0b3J5LnByb3RvdHlwZS5lbnN1cmVVUkwgPSBmdW5jdGlvbiBlbnN1cmVVUkwgKHB1c2gpIHtcbiAgICB2YXIgY3VycmVudCA9IHRoaXMuY3VycmVudC5mdWxsUGF0aDtcbiAgICBpZiAoZ2V0SGFzaCgpICE9PSBjdXJyZW50KSB7XG4gICAgICBwdXNoID8gcHVzaEhhc2goY3VycmVudCkgOiByZXBsYWNlSGFzaChjdXJyZW50KTtcbiAgICB9XG4gIH07XG5cbiAgSGFzaEhpc3RvcnkucHJvdG90eXBlLmdldEN1cnJlbnRMb2NhdGlvbiA9IGZ1bmN0aW9uIGdldEN1cnJlbnRMb2NhdGlvbiAoKSB7XG4gICAgcmV0dXJuIGdldEhhc2goKVxuICB9O1xuXG4gIHJldHVybiBIYXNoSGlzdG9yeTtcbn0oSGlzdG9yeSkpO1xuXG5mdW5jdGlvbiBjaGVja0ZhbGxiYWNrIChiYXNlKSB7XG4gIHZhciBsb2NhdGlvbiA9IGdldExvY2F0aW9uKGJhc2UpO1xuICBpZiAoIS9eXFwvIy8udGVzdChsb2NhdGlvbikpIHtcbiAgICB3aW5kb3cubG9jYXRpb24ucmVwbGFjZShjbGVhblBhdGgoYmFzZSArICcvIycgKyBsb2NhdGlvbikpO1xuICAgIHJldHVybiB0cnVlXG4gIH1cbn1cblxuZnVuY3Rpb24gZW5zdXJlU2xhc2ggKCkge1xuICB2YXIgcGF0aCA9IGdldEhhc2goKTtcbiAgaWYgKHBhdGguY2hhckF0KDApID09PSAnLycpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG4gIHJlcGxhY2VIYXNoKCcvJyArIHBhdGgpO1xuICByZXR1cm4gZmFsc2Vcbn1cblxuZnVuY3Rpb24gZ2V0SGFzaCAoKSB7XG4gIC8vIFdlIGNhbid0IHVzZSB3aW5kb3cubG9jYXRpb24uaGFzaCBoZXJlIGJlY2F1c2UgaXQncyBub3RcbiAgLy8gY29uc2lzdGVudCBhY3Jvc3MgYnJvd3NlcnMgLSBGaXJlZm94IHdpbGwgcHJlLWRlY29kZSBpdCFcbiAgdmFyIGhyZWYgPSB3aW5kb3cubG9jYXRpb24uaHJlZjtcbiAgdmFyIGluZGV4ID0gaHJlZi5pbmRleE9mKCcjJyk7XG4gIC8vIGVtcHR5IHBhdGhcbiAgaWYgKGluZGV4IDwgMCkgeyByZXR1cm4gJycgfVxuXG4gIGhyZWYgPSBocmVmLnNsaWNlKGluZGV4ICsgMSk7XG4gIC8vIGRlY29kZSB0aGUgaGFzaCBidXQgbm90IHRoZSBzZWFyY2ggb3IgaGFzaFxuICAvLyBhcyBzZWFyY2gocXVlcnkpIGlzIGFscmVhZHkgZGVjb2RlZFxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vdnVlanMvdnVlLXJvdXRlci9pc3N1ZXMvMjcwOFxuICB2YXIgc2VhcmNoSW5kZXggPSBocmVmLmluZGV4T2YoJz8nKTtcbiAgaWYgKHNlYXJjaEluZGV4IDwgMCkge1xuICAgIHZhciBoYXNoSW5kZXggPSBocmVmLmluZGV4T2YoJyMnKTtcbiAgICBpZiAoaGFzaEluZGV4ID4gLTEpIHtcbiAgICAgIGhyZWYgPSBkZWNvZGVVUkkoaHJlZi5zbGljZSgwLCBoYXNoSW5kZXgpKSArIGhyZWYuc2xpY2UoaGFzaEluZGV4KTtcbiAgICB9IGVsc2UgeyBocmVmID0gZGVjb2RlVVJJKGhyZWYpOyB9XG4gIH0gZWxzZSB7XG4gICAgaWYgKHNlYXJjaEluZGV4ID4gLTEpIHtcbiAgICAgIGhyZWYgPSBkZWNvZGVVUkkoaHJlZi5zbGljZSgwLCBzZWFyY2hJbmRleCkpICsgaHJlZi5zbGljZShzZWFyY2hJbmRleCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGhyZWZcbn1cblxuZnVuY3Rpb24gZ2V0VXJsIChwYXRoKSB7XG4gIHZhciBocmVmID0gd2luZG93LmxvY2F0aW9uLmhyZWY7XG4gIHZhciBpID0gaHJlZi5pbmRleE9mKCcjJyk7XG4gIHZhciBiYXNlID0gaSA+PSAwID8gaHJlZi5zbGljZSgwLCBpKSA6IGhyZWY7XG4gIHJldHVybiAoYmFzZSArIFwiI1wiICsgcGF0aClcbn1cblxuZnVuY3Rpb24gcHVzaEhhc2ggKHBhdGgpIHtcbiAgaWYgKHN1cHBvcnRzUHVzaFN0YXRlKSB7XG4gICAgcHVzaFN0YXRlKGdldFVybChwYXRoKSk7XG4gIH0gZWxzZSB7XG4gICAgd2luZG93LmxvY2F0aW9uLmhhc2ggPSBwYXRoO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlcGxhY2VIYXNoIChwYXRoKSB7XG4gIGlmIChzdXBwb3J0c1B1c2hTdGF0ZSkge1xuICAgIHJlcGxhY2VTdGF0ZShnZXRVcmwocGF0aCkpO1xuICB9IGVsc2Uge1xuICAgIHdpbmRvdy5sb2NhdGlvbi5yZXBsYWNlKGdldFVybChwYXRoKSk7XG4gIH1cbn1cblxuLyogICovXG5cbnZhciBBYnN0cmFjdEhpc3RvcnkgPSAvKkBfX1BVUkVfXyovKGZ1bmN0aW9uIChIaXN0b3J5KSB7XG4gIGZ1bmN0aW9uIEFic3RyYWN0SGlzdG9yeSAocm91dGVyLCBiYXNlKSB7XG4gICAgSGlzdG9yeS5jYWxsKHRoaXMsIHJvdXRlciwgYmFzZSk7XG4gICAgdGhpcy5zdGFjayA9IFtdO1xuICAgIHRoaXMuaW5kZXggPSAtMTtcbiAgfVxuXG4gIGlmICggSGlzdG9yeSApIEFic3RyYWN0SGlzdG9yeS5fX3Byb3RvX18gPSBIaXN0b3J5O1xuICBBYnN0cmFjdEhpc3RvcnkucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZSggSGlzdG9yeSAmJiBIaXN0b3J5LnByb3RvdHlwZSApO1xuICBBYnN0cmFjdEhpc3RvcnkucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQWJzdHJhY3RIaXN0b3J5O1xuXG4gIEFic3RyYWN0SGlzdG9yeS5wcm90b3R5cGUucHVzaCA9IGZ1bmN0aW9uIHB1c2ggKGxvY2F0aW9uLCBvbkNvbXBsZXRlLCBvbkFib3J0KSB7XG4gICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgICB0aGlzLnRyYW5zaXRpb25UbyhcbiAgICAgIGxvY2F0aW9uLFxuICAgICAgZnVuY3Rpb24gKHJvdXRlKSB7XG4gICAgICAgIHRoaXMkMS5zdGFjayA9IHRoaXMkMS5zdGFjay5zbGljZSgwLCB0aGlzJDEuaW5kZXggKyAxKS5jb25jYXQocm91dGUpO1xuICAgICAgICB0aGlzJDEuaW5kZXgrKztcbiAgICAgICAgb25Db21wbGV0ZSAmJiBvbkNvbXBsZXRlKHJvdXRlKTtcbiAgICAgIH0sXG4gICAgICBvbkFib3J0XG4gICAgKTtcbiAgfTtcblxuICBBYnN0cmFjdEhpc3RvcnkucHJvdG90eXBlLnJlcGxhY2UgPSBmdW5jdGlvbiByZXBsYWNlIChsb2NhdGlvbiwgb25Db21wbGV0ZSwgb25BYm9ydCkge1xuICAgIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gICAgdGhpcy50cmFuc2l0aW9uVG8oXG4gICAgICBsb2NhdGlvbixcbiAgICAgIGZ1bmN0aW9uIChyb3V0ZSkge1xuICAgICAgICB0aGlzJDEuc3RhY2sgPSB0aGlzJDEuc3RhY2suc2xpY2UoMCwgdGhpcyQxLmluZGV4KS5jb25jYXQocm91dGUpO1xuICAgICAgICBvbkNvbXBsZXRlICYmIG9uQ29tcGxldGUocm91dGUpO1xuICAgICAgfSxcbiAgICAgIG9uQWJvcnRcbiAgICApO1xuICB9O1xuXG4gIEFic3RyYWN0SGlzdG9yeS5wcm90b3R5cGUuZ28gPSBmdW5jdGlvbiBnbyAobikge1xuICAgIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gICAgdmFyIHRhcmdldEluZGV4ID0gdGhpcy5pbmRleCArIG47XG4gICAgaWYgKHRhcmdldEluZGV4IDwgMCB8fCB0YXJnZXRJbmRleCA+PSB0aGlzLnN0YWNrLmxlbmd0aCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIHZhciByb3V0ZSA9IHRoaXMuc3RhY2tbdGFyZ2V0SW5kZXhdO1xuICAgIHRoaXMuY29uZmlybVRyYW5zaXRpb24oXG4gICAgICByb3V0ZSxcbiAgICAgIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcyQxLmluZGV4ID0gdGFyZ2V0SW5kZXg7XG4gICAgICAgIHRoaXMkMS51cGRhdGVSb3V0ZShyb3V0ZSk7XG4gICAgICB9LFxuICAgICAgZnVuY3Rpb24gKGVycikge1xuICAgICAgICBpZiAoaXNFeHRlbmRlZEVycm9yKE5hdmlnYXRpb25EdXBsaWNhdGVkLCBlcnIpKSB7XG4gICAgICAgICAgdGhpcyQxLmluZGV4ID0gdGFyZ2V0SW5kZXg7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICApO1xuICB9O1xuXG4gIEFic3RyYWN0SGlzdG9yeS5wcm90b3R5cGUuZ2V0Q3VycmVudExvY2F0aW9uID0gZnVuY3Rpb24gZ2V0Q3VycmVudExvY2F0aW9uICgpIHtcbiAgICB2YXIgY3VycmVudCA9IHRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGggLSAxXTtcbiAgICByZXR1cm4gY3VycmVudCA/IGN1cnJlbnQuZnVsbFBhdGggOiAnLydcbiAgfTtcblxuICBBYnN0cmFjdEhpc3RvcnkucHJvdG90eXBlLmVuc3VyZVVSTCA9IGZ1bmN0aW9uIGVuc3VyZVVSTCAoKSB7XG4gICAgLy8gbm9vcFxuICB9O1xuXG4gIHJldHVybiBBYnN0cmFjdEhpc3Rvcnk7XG59KEhpc3RvcnkpKTtcblxuLyogICovXG5cblxuXG52YXIgVnVlUm91dGVyID0gZnVuY3Rpb24gVnVlUm91dGVyIChvcHRpb25zKSB7XG4gIGlmICggb3B0aW9ucyA9PT0gdm9pZCAwICkgb3B0aW9ucyA9IHt9O1xuXG4gIHRoaXMuYXBwID0gbnVsbDtcbiAgdGhpcy5hcHBzID0gW107XG4gIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gIHRoaXMuYmVmb3JlSG9va3MgPSBbXTtcbiAgdGhpcy5yZXNvbHZlSG9va3MgPSBbXTtcbiAgdGhpcy5hZnRlckhvb2tzID0gW107XG4gIHRoaXMubWF0Y2hlciA9IGNyZWF0ZU1hdGNoZXIob3B0aW9ucy5yb3V0ZXMgfHwgW10sIHRoaXMpO1xuXG4gIHZhciBtb2RlID0gb3B0aW9ucy5tb2RlIHx8ICdoYXNoJztcbiAgdGhpcy5mYWxsYmFjayA9IG1vZGUgPT09ICdoaXN0b3J5JyAmJiAhc3VwcG9ydHNQdXNoU3RhdGUgJiYgb3B0aW9ucy5mYWxsYmFjayAhPT0gZmFsc2U7XG4gIGlmICh0aGlzLmZhbGxiYWNrKSB7XG4gICAgbW9kZSA9ICdoYXNoJztcbiAgfVxuICBpZiAoIWluQnJvd3Nlcikge1xuICAgIG1vZGUgPSAnYWJzdHJhY3QnO1xuICB9XG4gIHRoaXMubW9kZSA9IG1vZGU7XG5cbiAgc3dpdGNoIChtb2RlKSB7XG4gICAgY2FzZSAnaGlzdG9yeSc6XG4gICAgICB0aGlzLmhpc3RvcnkgPSBuZXcgSFRNTDVIaXN0b3J5KHRoaXMsIG9wdGlvbnMuYmFzZSk7XG4gICAgICBicmVha1xuICAgIGNhc2UgJ2hhc2gnOlxuICAgICAgdGhpcy5oaXN0b3J5ID0gbmV3IEhhc2hIaXN0b3J5KHRoaXMsIG9wdGlvbnMuYmFzZSwgdGhpcy5mYWxsYmFjayk7XG4gICAgICBicmVha1xuICAgIGNhc2UgJ2Fic3RyYWN0JzpcbiAgICAgIHRoaXMuaGlzdG9yeSA9IG5ldyBBYnN0cmFjdEhpc3RvcnkodGhpcywgb3B0aW9ucy5iYXNlKTtcbiAgICAgIGJyZWFrXG4gICAgZGVmYXVsdDpcbiAgICAgIGlmIChcInByb2R1Y3Rpb25cIiAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIGFzc2VydChmYWxzZSwgKFwiaW52YWxpZCBtb2RlOiBcIiArIG1vZGUpKTtcbiAgICAgIH1cbiAgfVxufTtcblxudmFyIHByb3RvdHlwZUFjY2Vzc29ycyA9IHsgY3VycmVudFJvdXRlOiB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH07XG5cblZ1ZVJvdXRlci5wcm90b3R5cGUubWF0Y2ggPSBmdW5jdGlvbiBtYXRjaCAoXG4gIHJhdyxcbiAgY3VycmVudCxcbiAgcmVkaXJlY3RlZEZyb21cbikge1xuICByZXR1cm4gdGhpcy5tYXRjaGVyLm1hdGNoKHJhdywgY3VycmVudCwgcmVkaXJlY3RlZEZyb20pXG59O1xuXG5wcm90b3R5cGVBY2Nlc3NvcnMuY3VycmVudFJvdXRlLmdldCA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMuaGlzdG9yeSAmJiB0aGlzLmhpc3RvcnkuY3VycmVudFxufTtcblxuVnVlUm91dGVyLnByb3RvdHlwZS5pbml0ID0gZnVuY3Rpb24gaW5pdCAoYXBwIC8qIFZ1ZSBjb21wb25lbnQgaW5zdGFuY2UgKi8pIHtcbiAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuICBcInByb2R1Y3Rpb25cIiAhPT0gJ3Byb2R1Y3Rpb24nICYmIGFzc2VydChcbiAgICBpbnN0YWxsLmluc3RhbGxlZCxcbiAgICBcIm5vdCBpbnN0YWxsZWQuIE1ha2Ugc3VyZSB0byBjYWxsIGBWdWUudXNlKFZ1ZVJvdXRlcilgIFwiICtcbiAgICBcImJlZm9yZSBjcmVhdGluZyByb290IGluc3RhbmNlLlwiXG4gICk7XG5cbiAgdGhpcy5hcHBzLnB1c2goYXBwKTtcblxuICAvLyBzZXQgdXAgYXBwIGRlc3Ryb3llZCBoYW5kbGVyXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS92dWVqcy92dWUtcm91dGVyL2lzc3Vlcy8yNjM5XG4gIGFwcC4kb25jZSgnaG9vazpkZXN0cm95ZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgLy8gY2xlYW4gb3V0IGFwcCBmcm9tIHRoaXMuYXBwcyBhcnJheSBvbmNlIGRlc3Ryb3llZFxuICAgIHZhciBpbmRleCA9IHRoaXMkMS5hcHBzLmluZGV4T2YoYXBwKTtcbiAgICBpZiAoaW5kZXggPiAtMSkgeyB0aGlzJDEuYXBwcy5zcGxpY2UoaW5kZXgsIDEpOyB9XG4gICAgLy8gZW5zdXJlIHdlIHN0aWxsIGhhdmUgYSBtYWluIGFwcCBvciBudWxsIGlmIG5vIGFwcHNcbiAgICAvLyB3ZSBkbyBub3QgcmVsZWFzZSB0aGUgcm91dGVyIHNvIGl0IGNhbiBiZSByZXVzZWRcbiAgICBpZiAodGhpcyQxLmFwcCA9PT0gYXBwKSB7IHRoaXMkMS5hcHAgPSB0aGlzJDEuYXBwc1swXSB8fCBudWxsOyB9XG4gIH0pO1xuXG4gIC8vIG1haW4gYXBwIHByZXZpb3VzbHkgaW5pdGlhbGl6ZWRcbiAgLy8gcmV0dXJuIGFzIHdlIGRvbid0IG5lZWQgdG8gc2V0IHVwIG5ldyBoaXN0b3J5IGxpc3RlbmVyXG4gIGlmICh0aGlzLmFwcCkge1xuICAgIHJldHVyblxuICB9XG5cbiAgdGhpcy5hcHAgPSBhcHA7XG5cbiAgdmFyIGhpc3RvcnkgPSB0aGlzLmhpc3Rvcnk7XG5cbiAgaWYgKGhpc3RvcnkgaW5zdGFuY2VvZiBIVE1MNUhpc3RvcnkpIHtcbiAgICBoaXN0b3J5LnRyYW5zaXRpb25UbyhoaXN0b3J5LmdldEN1cnJlbnRMb2NhdGlvbigpKTtcbiAgfSBlbHNlIGlmIChoaXN0b3J5IGluc3RhbmNlb2YgSGFzaEhpc3RvcnkpIHtcbiAgICB2YXIgc2V0dXBIYXNoTGlzdGVuZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBoaXN0b3J5LnNldHVwTGlzdGVuZXJzKCk7XG4gICAgfTtcbiAgICBoaXN0b3J5LnRyYW5zaXRpb25UbyhcbiAgICAgIGhpc3RvcnkuZ2V0Q3VycmVudExvY2F0aW9uKCksXG4gICAgICBzZXR1cEhhc2hMaXN0ZW5lcixcbiAgICAgIHNldHVwSGFzaExpc3RlbmVyXG4gICAgKTtcbiAgfVxuXG4gIGhpc3RvcnkubGlzdGVuKGZ1bmN0aW9uIChyb3V0ZSkge1xuICAgIHRoaXMkMS5hcHBzLmZvckVhY2goZnVuY3Rpb24gKGFwcCkge1xuICAgICAgYXBwLl9yb3V0ZSA9IHJvdXRlO1xuICAgIH0pO1xuICB9KTtcbn07XG5cblZ1ZVJvdXRlci5wcm90b3R5cGUuYmVmb3JlRWFjaCA9IGZ1bmN0aW9uIGJlZm9yZUVhY2ggKGZuKSB7XG4gIHJldHVybiByZWdpc3Rlckhvb2sodGhpcy5iZWZvcmVIb29rcywgZm4pXG59O1xuXG5WdWVSb3V0ZXIucHJvdG90eXBlLmJlZm9yZVJlc29sdmUgPSBmdW5jdGlvbiBiZWZvcmVSZXNvbHZlIChmbikge1xuICByZXR1cm4gcmVnaXN0ZXJIb29rKHRoaXMucmVzb2x2ZUhvb2tzLCBmbilcbn07XG5cblZ1ZVJvdXRlci5wcm90b3R5cGUuYWZ0ZXJFYWNoID0gZnVuY3Rpb24gYWZ0ZXJFYWNoIChmbikge1xuICByZXR1cm4gcmVnaXN0ZXJIb29rKHRoaXMuYWZ0ZXJIb29rcywgZm4pXG59O1xuXG5WdWVSb3V0ZXIucHJvdG90eXBlLm9uUmVhZHkgPSBmdW5jdGlvbiBvblJlYWR5IChjYiwgZXJyb3JDYikge1xuICB0aGlzLmhpc3Rvcnkub25SZWFkeShjYiwgZXJyb3JDYik7XG59O1xuXG5WdWVSb3V0ZXIucHJvdG90eXBlLm9uRXJyb3IgPSBmdW5jdGlvbiBvbkVycm9yIChlcnJvckNiKSB7XG4gIHRoaXMuaGlzdG9yeS5vbkVycm9yKGVycm9yQ2IpO1xufTtcblxuVnVlUm91dGVyLnByb3RvdHlwZS5wdXNoID0gZnVuY3Rpb24gcHVzaCAobG9jYXRpb24sIG9uQ29tcGxldGUsIG9uQWJvcnQpIHtcbiAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuICAvLyAkZmxvdy1kaXNhYmxlLWxpbmVcbiAgaWYgKCFvbkNvbXBsZXRlICYmICFvbkFib3J0ICYmIHR5cGVvZiBQcm9taXNlICE9PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICB0aGlzJDEuaGlzdG9yeS5wdXNoKGxvY2F0aW9uLCByZXNvbHZlLCByZWplY3QpO1xuICAgIH0pXG4gIH0gZWxzZSB7XG4gICAgdGhpcy5oaXN0b3J5LnB1c2gobG9jYXRpb24sIG9uQ29tcGxldGUsIG9uQWJvcnQpO1xuICB9XG59O1xuXG5WdWVSb3V0ZXIucHJvdG90eXBlLnJlcGxhY2UgPSBmdW5jdGlvbiByZXBsYWNlIChsb2NhdGlvbiwgb25Db21wbGV0ZSwgb25BYm9ydCkge1xuICAgIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gIC8vICRmbG93LWRpc2FibGUtbGluZVxuICBpZiAoIW9uQ29tcGxldGUgJiYgIW9uQWJvcnQgJiYgdHlwZW9mIFByb21pc2UgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIHRoaXMkMS5oaXN0b3J5LnJlcGxhY2UobG9jYXRpb24sIHJlc29sdmUsIHJlamVjdCk7XG4gICAgfSlcbiAgfSBlbHNlIHtcbiAgICB0aGlzLmhpc3RvcnkucmVwbGFjZShsb2NhdGlvbiwgb25Db21wbGV0ZSwgb25BYm9ydCk7XG4gIH1cbn07XG5cblZ1ZVJvdXRlci5wcm90b3R5cGUuZ28gPSBmdW5jdGlvbiBnbyAobikge1xuICB0aGlzLmhpc3RvcnkuZ28obik7XG59O1xuXG5WdWVSb3V0ZXIucHJvdG90eXBlLmJhY2sgPSBmdW5jdGlvbiBiYWNrICgpIHtcbiAgdGhpcy5nbygtMSk7XG59O1xuXG5WdWVSb3V0ZXIucHJvdG90eXBlLmZvcndhcmQgPSBmdW5jdGlvbiBmb3J3YXJkICgpIHtcbiAgdGhpcy5nbygxKTtcbn07XG5cblZ1ZVJvdXRlci5wcm90b3R5cGUuZ2V0TWF0Y2hlZENvbXBvbmVudHMgPSBmdW5jdGlvbiBnZXRNYXRjaGVkQ29tcG9uZW50cyAodG8pIHtcbiAgdmFyIHJvdXRlID0gdG9cbiAgICA/IHRvLm1hdGNoZWRcbiAgICAgID8gdG9cbiAgICAgIDogdGhpcy5yZXNvbHZlKHRvKS5yb3V0ZVxuICAgIDogdGhpcy5jdXJyZW50Um91dGU7XG4gIGlmICghcm91dGUpIHtcbiAgICByZXR1cm4gW11cbiAgfVxuICByZXR1cm4gW10uY29uY2F0LmFwcGx5KFtdLCByb3V0ZS5tYXRjaGVkLm1hcChmdW5jdGlvbiAobSkge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhtLmNvbXBvbmVudHMpLm1hcChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICByZXR1cm4gbS5jb21wb25lbnRzW2tleV1cbiAgICB9KVxuICB9KSlcbn07XG5cblZ1ZVJvdXRlci5wcm90b3R5cGUucmVzb2x2ZSA9IGZ1bmN0aW9uIHJlc29sdmUgKFxuICB0byxcbiAgY3VycmVudCxcbiAgYXBwZW5kXG4pIHtcbiAgY3VycmVudCA9IGN1cnJlbnQgfHwgdGhpcy5oaXN0b3J5LmN1cnJlbnQ7XG4gIHZhciBsb2NhdGlvbiA9IG5vcm1hbGl6ZUxvY2F0aW9uKFxuICAgIHRvLFxuICAgIGN1cnJlbnQsXG4gICAgYXBwZW5kLFxuICAgIHRoaXNcbiAgKTtcbiAgdmFyIHJvdXRlID0gdGhpcy5tYXRjaChsb2NhdGlvbiwgY3VycmVudCk7XG4gIHZhciBmdWxsUGF0aCA9IHJvdXRlLnJlZGlyZWN0ZWRGcm9tIHx8IHJvdXRlLmZ1bGxQYXRoO1xuICB2YXIgYmFzZSA9IHRoaXMuaGlzdG9yeS5iYXNlO1xuICB2YXIgaHJlZiA9IGNyZWF0ZUhyZWYoYmFzZSwgZnVsbFBhdGgsIHRoaXMubW9kZSk7XG4gIHJldHVybiB7XG4gICAgbG9jYXRpb246IGxvY2F0aW9uLFxuICAgIHJvdXRlOiByb3V0ZSxcbiAgICBocmVmOiBocmVmLFxuICAgIC8vIGZvciBiYWNrd2FyZHMgY29tcGF0XG4gICAgbm9ybWFsaXplZFRvOiBsb2NhdGlvbixcbiAgICByZXNvbHZlZDogcm91dGVcbiAgfVxufTtcblxuVnVlUm91dGVyLnByb3RvdHlwZS5hZGRSb3V0ZXMgPSBmdW5jdGlvbiBhZGRSb3V0ZXMgKHJvdXRlcykge1xuICB0aGlzLm1hdGNoZXIuYWRkUm91dGVzKHJvdXRlcyk7XG4gIGlmICh0aGlzLmhpc3RvcnkuY3VycmVudCAhPT0gU1RBUlQpIHtcbiAgICB0aGlzLmhpc3RvcnkudHJhbnNpdGlvblRvKHRoaXMuaGlzdG9yeS5nZXRDdXJyZW50TG9jYXRpb24oKSk7XG4gIH1cbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKCBWdWVSb3V0ZXIucHJvdG90eXBlLCBwcm90b3R5cGVBY2Nlc3NvcnMgKTtcblxuZnVuY3Rpb24gcmVnaXN0ZXJIb29rIChsaXN0LCBmbikge1xuICBsaXN0LnB1c2goZm4pO1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHZhciBpID0gbGlzdC5pbmRleE9mKGZuKTtcbiAgICBpZiAoaSA+IC0xKSB7IGxpc3Quc3BsaWNlKGksIDEpOyB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlSHJlZiAoYmFzZSwgZnVsbFBhdGgsIG1vZGUpIHtcbiAgdmFyIHBhdGggPSBtb2RlID09PSAnaGFzaCcgPyAnIycgKyBmdWxsUGF0aCA6IGZ1bGxQYXRoO1xuICByZXR1cm4gYmFzZSA/IGNsZWFuUGF0aChiYXNlICsgJy8nICsgcGF0aCkgOiBwYXRoXG59XG5cblZ1ZVJvdXRlci5pbnN0YWxsID0gaW5zdGFsbDtcblZ1ZVJvdXRlci52ZXJzaW9uID0gJzMuMS4zJztcblxuaWYgKGluQnJvd3NlciAmJiB3aW5kb3cuVnVlKSB7XG4gIHdpbmRvdy5WdWUudXNlKFZ1ZVJvdXRlcik7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gVnVlUm91dGVyO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IHZvaWQgMDtcblxudmFyIF92dWUgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCJ2dWVcIikpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBcImRlZmF1bHRcIjogb2JqIH07IH1cblxudmFyIGJ1cyA9IG5ldyBfdnVlW1wiZGVmYXVsdFwiXSgpO1xudmFyIF9kZWZhdWx0ID0gYnVzO1xuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBfZGVmYXVsdDsiLCJcInVzZSBzdHJpY3RcIjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgdmFyIGRpc3BsYXkgPSB0aGlzLmNvbHVtbnNEaXNwbGF5OyAvLyBkZWZhdWx0IC0gcmV0dXJuIGFsbCBjb2x1bW5zXG5cbiAgaWYgKCFkaXNwbGF5ICYmICF0aGlzLnVzZXJDb250cm9sc0NvbHVtbnMpIHtcbiAgICByZXR1cm4gdGhpcy5Db2x1bW5zLmZpbHRlcihmdW5jdGlvbiAoY29sKSB7XG4gICAgICByZXR1cm4gX3RoaXMuX3Nob3VsZFNob3dDb2x1bW5PbkluaXQoY29sKTtcbiAgICB9KTtcbiAgfSAvLyB1c2VyIHRvZ2dsZWQgY29sdW1ucyAtIHJldHVybiB1c2VyIHNlbGVjdGVkIGNvbHVtbnNcblxuXG4gIGlmICh0aGlzLnVzZXJDb250cm9sc0NvbHVtbnMpIHtcbiAgICByZXR1cm4gdGhpcy5jb2x1bW5zLmZpbHRlcihmdW5jdGlvbiAoY29sdW1uKSB7XG4gICAgICByZXR1cm4gX3RoaXMudXNlckNvbHVtbnNEaXNwbGF5LmluY2x1ZGVzKGNvbHVtbik7XG4gICAgfSk7XG4gIH1cblxuICBpZiAodGhpcy5vcHRzLnNzcikgcmV0dXJuIHRoaXMuQ29sdW1uczsgLy8gZGV2ZWxvcGVyIGRlZmluZWQgY29sdW1ucyBkaXNwbGF5XG5cbiAgcmV0dXJuIHRoaXMuQ29sdW1ucy5maWx0ZXIoZnVuY3Rpb24gKGNvbHVtbikge1xuICAgIGlmICghX3RoaXMuX3Nob3VsZFNob3dDb2x1bW5PbkluaXQoY29sdW1uKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmICghZGlzcGxheVtjb2x1bW5dKSByZXR1cm4gdHJ1ZTtcbiAgICB2YXIgcmFuZ2UgPSBkaXNwbGF5W2NvbHVtbl07XG4gICAgdmFyIG9wZXJhdG9yID0gcmFuZ2VbMl07XG4gICAgdmFyIGluUmFuZ2UgPSAoIXJhbmdlWzBdIHx8IF90aGlzLndpbmRvd1dpZHRoID49IHJhbmdlWzBdKSAmJiAoIXJhbmdlWzFdIHx8IF90aGlzLndpbmRvd1dpZHRoIDwgcmFuZ2VbMV0pO1xuICAgIHJldHVybiBvcGVyYXRvciA9PSAnbm90JyA/ICFpblJhbmdlIDogaW5SYW5nZTtcbiAgfSk7XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMuaGFzQ2hpbGRSb3cgPyB0aGlzLmFsbENvbHVtbnMubGVuZ3RoICsgMSA6IHRoaXMuYWxsQ29sdW1ucy5sZW5ndGg7XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHRoaXMuY3VzdG9tUXVlcmllcyk7XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG52YXIgaW50ZXJzZWN0ID0gcmVxdWlyZSgnYXJyYXktaW50ZXJzZWN0JylbXCJkZWZhdWx0XCJdO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKHRoaXMub3B0cy5maWx0ZXJhYmxlID09PSB0cnVlKSB7XG4gICAgcmV0dXJuIHRoaXMub3B0cy5kYXRlQ29sdW1ucztcbiAgfVxuXG4gIGlmICh0aGlzLm9wdHMuZmlsdGVyYWJsZSA9PT0gZmFsc2UpIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICByZXR1cm4gaW50ZXJzZWN0KHRoaXMub3B0cy5maWx0ZXJhYmxlLCB0aGlzLm9wdHMuZGF0ZUNvbHVtbnMpO1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLm9wdHMuZmlsdGVyYWJsZSAmJiB0aGlzLm9wdHMuZmlsdGVyYWJsZS5sZW5ndGggPyB0aGlzLm9wdHMuZmlsdGVyYWJsZSA6IHRoaXMuQ29sdW1ucztcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBjbG9uZSA9IHJlcXVpcmUoJ2Nsb25lJyk7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICB2YXIgZGF0YSA9IGNsb25lKHRoaXMudGFibGVEYXRhKTtcbiAgICB2YXIgY29sdW1uID0gdGhpcy5vcmRlckJ5LmNvbHVtbjtcbiAgICBkYXRhID0gdGhpcy5zZWFyY2goZGF0YSk7XG5cbiAgICBpZiAoY29sdW1uKSB7XG4gICAgICAvLyBkdW1teSB2YXIgdG8gZm9yY2UgY29tcGlsYXRpb25cbiAgICAgIGlmICh0aGlzLnRpbWUpIHRoaXMudGltZSA9IHRoaXMudGltZTtcbiAgICAgIGRhdGEgPSB0aGlzLm9wdHMuc29ydGluZ0FsZ29yaXRobS5jYWxsKHRoaXMsIGRhdGEsIGNvbHVtbik7XG4gICAgfSBlbHNlIGlmICh0aGlzLm9wdHMuZ3JvdXBCeSkge1xuICAgICAgZGF0YSA9IHRoaXMub3B0cy5zb3J0aW5nQWxnb3JpdGhtLmNhbGwodGhpcywgZGF0YSwgdGhpcy5vcHRzLmdyb3VwQnkpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnZ1ZXgpIHtcbiAgICAgIGlmICh0aGlzLmNvdW50ICE9IGRhdGEubGVuZ3RoKSB0aGlzLmNvbW1pdCgnU0VUX0NPVU5UJywgZGF0YS5sZW5ndGgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNvdW50ID0gZGF0YS5sZW5ndGg7XG4gICAgfVxuXG4gICAgdmFyIG9mZnNldCA9ICh0aGlzLnBhZ2UgLSAxKSAqIHRoaXMubGltaXQ7XG4gICAgdGhpcy5hbGxGaWx0ZXJlZERhdGEgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGRhdGEpKTtcbiAgICBkYXRhID0gZGF0YS5zcGxpY2Uob2Zmc2V0LCB0aGlzLmxpbWl0KTtcbiAgICByZXR1cm4gdGhpcy5hcHBseUZpbHRlcnMoZGF0YSk7XG4gIH0sXG4gIHNldDogZnVuY3Rpb24gc2V0KHZhbCkge1xuICAgIGNvbnNvbGUubG9nKHZhbCk7XG4gIH1cbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICBpZiAoX3R5cGVvZih0aGlzLnF1ZXJ5KSAhPT0gJ29iamVjdCcgfHwgdGhpcy5vcHRzLnNlbmRFbXB0eUZpbHRlcnMpIHtcbiAgICByZXR1cm4gdGhpcy5xdWVyeTtcbiAgfVxuXG4gIHZhciByZXN1bHQgPSB7fTtcblxuICBmb3IgKHZhciBrZXkgaW4gdGhpcy5xdWVyeSkge1xuICAgIGlmICh0aGlzLnF1ZXJ5W2tleV0gIT09ICcnKSB7XG4gICAgICByZXN1bHRba2V5XSA9IHRoaXMucXVlcnlba2V5XTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLm9wdHMuY2hpbGRSb3cgfHwgdGhpcy4kc2NvcGVkU2xvdHMuY2hpbGRfcm93O1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxuZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiAhdGhpcy5vcHRzLmZpbHRlckJ5Q29sdW1uICYmICh0eXBlb2YgdGhpcy5vcHRzLmZpbHRlcmFibGUgPT09ICdib29sZWFuJyAmJiB0aGlzLm9wdHMuZmlsdGVyYWJsZSB8fCBfdHlwZW9mKHRoaXMub3B0cy5maWx0ZXJhYmxlKSA9PT0gJ29iamVjdCcgJiYgdGhpcy5vcHRzLmZpbHRlcmFibGUubGVuZ3RoKTtcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICB2YXIgY29sdW1ucyA9IE9iamVjdC5rZXlzKHRoaXMub3B0cy5saXN0Q29sdW1ucyk7XG4gIHZhciByZXMgPSB7fTtcbiAgY29sdW1ucy5mb3JFYWNoKGZ1bmN0aW9uIChjb2x1bW4pIHtcbiAgICByZXNbY29sdW1uXSA9IHt9O1xuICAgIHRoaXMub3B0cy5saXN0Q29sdW1uc1tjb2x1bW5dLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgIHJlc1tjb2x1bW5dW2l0ZW0uaWRdID0gaXRlbS50ZXh0O1xuICAgIH0pO1xuICB9LmJpbmQodGhpcykpO1xuICByZXR1cm4gcmVzO1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBkZWZhdWx0cyA9IHJlcXVpcmUoJy4uL2NvbmZpZy9kZWZhdWx0cycpKCk7XG5cbiAgcmV0dXJuIHRoaXMuaW5pdE9wdGlvbnMoZGVmYXVsdHMsIHRoaXMuZ2xvYmFsT3B0aW9ucywgdGhpcy5vcHRpb25zKTtcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5vcHRzLmZpbHRlckJ5Q29sdW1uID8gSlNPTi5zdHJpbmdpZnkodGhpcy5xdWVyeSkgOiB0aGlzLnF1ZXJ5O1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gIGlmICh0eXBlb2YgbG9jYWxTdG9yYWdlID09PSAndW5kZWZpbmVkJykgcmV0dXJuIHt9O1xuICByZXR1cm4gdGhpcy5vcHRzLnN0b3JhZ2UgPT09ICdsb2NhbCcgPyBsb2NhbFN0b3JhZ2UgOiBzZXNzaW9uU3RvcmFnZTtcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5kYXRhO1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLm9wdHMudGVtcGxhdGVzKTtcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gTWF0aC5jZWlsKHRoaXMuY291bnQgLyB0aGlzLmxpbWl0KTtcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4ge1xuICAgIGFsd2F5c1Nob3dQZXJQYWdlU2VsZWN0OiBmYWxzZSxcbiAgICBoaWRlUGVyUGFnZVNlbGVjdDogZmFsc2UsXG4gICAgZGF0ZUNvbHVtbnM6IFtdLFxuICAgIGxpc3RDb2x1bW5zOiB7fSxcbiAgICBkYXRlcGlja2VyT3B0aW9uczoge1xuICAgICAgbG9jYWxlOiB7XG4gICAgICAgIGNhbmNlbExhYmVsOiBcIkNsZWFyXCJcbiAgICAgIH1cbiAgICB9LFxuICAgIGRhdGVwaWNrZXJQZXJDb2x1bW5PcHRpb25zOiB7fSxcbiAgICBpbml0aWFsUGFnZTogMSxcbiAgICBwZXJQYWdlOiAxMCxcbiAgICBwZXJQYWdlVmFsdWVzOiBbMTAsIDI1LCA1MCwgMTAwXSxcbiAgICBncm91cEJ5OiBmYWxzZSxcbiAgICBjb2xsYXBzZUdyb3VwczogZmFsc2UsXG4gICAgZGVzdHJveUV2ZW50QnVzOiBmYWxzZSxcbiAgICBzZW5kRW1wdHlGaWx0ZXJzOiBmYWxzZSxcbiAgICBwYXJhbXM6IHt9LFxuICAgIHNvcnRhYmxlOiB0cnVlLFxuICAgIGZpbHRlcmFibGU6IHRydWUsXG4gICAgZ3JvdXBNZXRhOiBbXSxcbiAgICBpbml0RmlsdGVyczoge30sXG4gICAgc2VuZEluaXRpYWxSZXF1ZXN0OiB0cnVlLFxuICAgIGN1c3RvbUZpbHRlcnM6IFtdLFxuICAgIHRlbXBsYXRlczoge30sXG4gICAgZGVib3VuY2U6IDI1MCxcbiAgICBkYXRlRm9ybWF0OiBcIkREL01NL1lZWVlcIixcbiAgICBkYXRlRm9ybWF0UGVyQ29sdW1uOiB7fSxcbiAgICB0b01vbWVudEZvcm1hdDogZmFsc2UsXG4gICAgc2tpbjogZmFsc2UsXG4gICAgY29sdW1uc0Rpc3BsYXk6IHt9LFxuICAgIGNvbHVtbnNEcm9wZG93bjogZmFsc2UsXG4gICAgdGV4dHM6IHtcbiAgICAgIGNvdW50OiBcIlNob3dpbmcge2Zyb219IHRvIHt0b30gb2Yge2NvdW50fSByZWNvcmRzfHtjb3VudH0gcmVjb3Jkc3xPbmUgcmVjb3JkXCIsXG4gICAgICBmaXJzdDogXCJGaXJzdFwiLFxuICAgICAgbGFzdDogXCJMYXN0XCIsXG4gICAgICBmaWx0ZXI6IFwiRmlsdGVyOlwiLFxuICAgICAgZmlsdGVyUGxhY2Vob2xkZXI6IFwiU2VhcmNoIHF1ZXJ5XCIsXG4gICAgICBsaW1pdDogXCJSZWNvcmRzOlwiLFxuICAgICAgcGFnZTogXCJQYWdlOlwiLFxuICAgICAgbm9SZXN1bHRzOiBcIk5vIG1hdGNoaW5nIHJlY29yZHNcIixcbiAgICAgIGZpbHRlckJ5OiBcIkZpbHRlciBieSB7Y29sdW1ufVwiLFxuICAgICAgbG9hZGluZzogXCJMb2FkaW5nLi4uXCIsXG4gICAgICBkZWZhdWx0T3B0aW9uOiBcIlNlbGVjdCB7Y29sdW1ufVwiLFxuICAgICAgY29sdW1uczogXCJDb2x1bW5zXCJcbiAgICB9LFxuICAgIHNvcnRJY29uOiB7XG4gICAgICBpczogXCJnbHlwaGljb24tc29ydFwiLFxuICAgICAgYmFzZTogXCJnbHlwaGljb25cIixcbiAgICAgIHVwOiBcImdseXBoaWNvbi1jaGV2cm9uLXVwXCIsXG4gICAgICBkb3duOiBcImdseXBoaWNvbi1jaGV2cm9uLWRvd25cIlxuICAgIH0sXG4gICAgc29ydGluZ0FsZ29yaXRobTogZnVuY3Rpb24gc29ydGluZ0FsZ29yaXRobShkYXRhLCBjb2x1bW4pIHtcbiAgICAgIHJldHVybiBkYXRhLnNvcnQodGhpcy5nZXRTb3J0Rm4oY29sdW1uKSk7XG4gICAgfSxcbiAgICBmaWx0ZXJBbGdvcml0aG06IHt9LFxuICAgIGN1c3RvbVNvcnRpbmc6IHt9LFxuICAgIG11bHRpU29ydGluZzoge30sXG4gICAgY2xpZW50TXVsdGlTb3J0aW5nOiB0cnVlLFxuICAgIHNlcnZlck11bHRpU29ydGluZzogZmFsc2UsXG4gICAgZmlsdGVyQnlDb2x1bW46IGZhbHNlLFxuICAgIGhpZ2hsaWdodE1hdGNoZXM6IGZhbHNlLFxuICAgIG9yZGVyQnk6IGZhbHNlLFxuICAgIGRlc2NPcmRlckNvbHVtbnM6IFtdLFxuICAgIGZvb3RlckhlYWRpbmdzOiBmYWxzZSxcbiAgICBoZWFkaW5nczoge30sXG4gICAgaGVhZGluZ3NUb29sdGlwczoge30sXG4gICAgcGFnaW5hdGlvbjoge1xuICAgICAgZHJvcGRvd246IGZhbHNlLFxuICAgICAgY2h1bms6IDEwLFxuICAgICAgZWRnZTogZmFsc2UsXG4gICAgICBhbGlnbjogXCJjZW50ZXJcIixcbiAgICAgIG5hdjogXCJmaXhlZFwiXG4gICAgfSxcbiAgICBjaGlsZFJvdzogZmFsc2UsXG4gICAgY2hpbGRSb3dUb2dnbGVyRmlyc3Q6IHRydWUsXG4gICAgc2hvd0NoaWxkUm93VG9nZ2xlcjogdHJ1ZSxcbiAgICB1bmlxdWVLZXk6IFwiaWRcIixcbiAgICByZXF1ZXN0RnVuY3Rpb246IGZhbHNlLFxuICAgIHJlcXVlc3RBZGFwdGVyOiBmdW5jdGlvbiByZXF1ZXN0QWRhcHRlcihkYXRhKSB7XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9LFxuICAgIHJlc3BvbnNlQWRhcHRlcjogZnVuY3Rpb24gcmVzcG9uc2VBZGFwdGVyKHJlc3ApIHtcbiAgICAgIHZhciBkYXRhID0gdGhpcy5nZXRSZXNwb25zZURhdGEocmVzcCk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBkYXRhOiBkYXRhLmRhdGEsXG4gICAgICAgIGNvdW50OiBkYXRhLmNvdW50XG4gICAgICB9O1xuICAgIH0sXG4gICAgcmVxdWVzdEtleXM6IHtcbiAgICAgIHF1ZXJ5OiBcInF1ZXJ5XCIsXG4gICAgICBsaW1pdDogXCJsaW1pdFwiLFxuICAgICAgb3JkZXJCeTogXCJvcmRlckJ5XCIsXG4gICAgICBhc2NlbmRpbmc6IFwiYXNjZW5kaW5nXCIsXG4gICAgICBwYWdlOiBcInBhZ2VcIixcbiAgICAgIGJ5Q29sdW1uOiBcImJ5Q29sdW1uXCJcbiAgICB9LFxuICAgIHJvd0NsYXNzQ2FsbGJhY2s6IGZhbHNlLFxuICAgIHByZXNlcnZlU3RhdGU6IGZhbHNlLFxuICAgIHNhdmVTdGF0ZTogZmFsc2UsXG4gICAgc3RvcmFnZTogXCJsb2NhbFwiLFxuICAgIGNvbHVtbnNDbGFzc2VzOiB7fSxcbiAgICBzdW1tYXJ5OiBmYWxzZSxcbiAgICBjYXB0aW9uOiBmYWxzZSxcbiAgICBjZWxsQ2xhc3Nlczoge30sXG4gICAgdmlzaWJsZUNvbHVtbnM6IGZhbHNlLFxuICAgIGhpZGRlbkNvbHVtbnM6IGZhbHNlLFxuICAgIHJlc2l6YWJsZUNvbHVtbnM6IHRydWUsXG4gICAgZWRpdGFibGVDb2x1bW5zOiBbXVxuICB9O1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZGF0YSwgY3VzdG9tRmlsdGVycywgY3VzdG9tUXVlcmllcykge1xuICB2YXIgcGFzc2luZztcbiAgcmV0dXJuIGRhdGEuZmlsdGVyKGZ1bmN0aW9uIChyb3cpIHtcbiAgICBwYXNzaW5nID0gdHJ1ZTtcbiAgICBjdXN0b21GaWx0ZXJzLmZvckVhY2goZnVuY3Rpb24gKGZpbHRlcikge1xuICAgICAgdmFyIHZhbHVlID0gY3VzdG9tUXVlcmllc1tmaWx0ZXIubmFtZV07XG4gICAgICBpZiAodmFsdWUgJiYgIWZpbHRlci5jYWxsYmFjayhyb3csIHZhbHVlKSkgcGFzc2luZyA9IGZhbHNlO1xuICAgIH0pO1xuICAgIHJldHVybiBwYXNzaW5nO1xuICB9KTtcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciB2YWxpZE1vbWVudCA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvaXMtdmFsaWQtbW9tZW50LW9iamVjdCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh2YWx1ZSwgZGF0ZUZvcm1hdCkge1xuICBpZiAoIXZhbGlkTW9tZW50KHZhbHVlKSkgcmV0dXJuIHZhbHVlO1xuICByZXR1cm4gdmFsdWUuZm9ybWF0KGRhdGVGb3JtYXQpO1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodmFsdWUsIGNvbHVtbiwgaCkge1xuICB2YXIgcXVlcnkgPSB0aGlzLm9wdHMuZmlsdGVyQnlDb2x1bW4gPyB0aGlzLnF1ZXJ5W2NvbHVtbl0gOiB0aGlzLnF1ZXJ5O1xuICBpZiAoIXF1ZXJ5KSByZXR1cm4gdmFsdWU7XG4gIHF1ZXJ5ID0gbmV3IFJlZ0V4cChcIihcIiArIGVzY2FwZVJlZ2V4KHF1ZXJ5KSArIFwiKVwiLCBcImlcIik7XG4gIHJldHVybiBoKFwic3BhblwiLCB7XG4gICAgXCJjbGFzc1wiOiAnVnVlVGFibGVzX19oaWdobGlnaHQnXG4gIH0sIG1hdGNoZXModmFsdWUsIHF1ZXJ5LCBoKSk7XG59O1xuXG5mdW5jdGlvbiBtYXRjaGVzKHZhbHVlLCBxdWVyeSwgaCkge1xuICB2YXIgcGllY2VzID0gU3RyaW5nKHZhbHVlKS5zcGxpdChxdWVyeSk7XG4gIHJldHVybiBwaWVjZXMubWFwKGZ1bmN0aW9uIChwaWVjZSkge1xuICAgIGlmIChxdWVyeS50ZXN0KHBpZWNlKSkge1xuICAgICAgcmV0dXJuIGgoXCJiXCIsIHt9LCBwaWVjZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBpZWNlO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gZXNjYXBlUmVnZXgocykge1xuICByZXR1cm4gdHlwZW9mIHMgPT09ICdzdHJpbmcnID8gcy5yZXBsYWNlKC9bLVxcL1xcXFxeJCorPy4oKXxbXFxde31dL2csICdcXFxcJCYnKSA6IHM7XG59XG5cbjsiLCJcInVzZSBzdHJpY3RcIjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodmFsdWUsIGNvbHVtbikge1xuICB2YXIgbGlzdCA9IHRoaXMubGlzdENvbHVtbnNPYmplY3RbY29sdW1uXTtcbiAgaWYgKHR5cGVvZiBsaXN0W3ZhbHVlXSA9PSAndW5kZWZpbmVkJykgcmV0dXJuIHZhbHVlO1xuICByZXR1cm4gbGlzdFt2YWx1ZV07XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmopIHtcbiAgLy8gbnVsbCBhbmQgdW5kZWZpbmVkIGFyZSBcImVtcHR5XCJcbiAgaWYgKG9iaiA9PSBudWxsKSByZXR1cm4gdHJ1ZTsgLy8gQXNzdW1lIGlmIGl0IGhhcyBhIGxlbmd0aCBwcm9wZXJ0eSB3aXRoIGEgbm9uLXplcm8gdmFsdWVcbiAgLy8gdGhhdCB0aGF0IHByb3BlcnR5IGlzIGNvcnJlY3QuXG5cbiAgaWYgKG9iai5sZW5ndGggPiAwKSByZXR1cm4gZmFsc2U7XG4gIGlmIChvYmoubGVuZ3RoID09PSAwKSByZXR1cm4gdHJ1ZTsgLy8gT3RoZXJ3aXNlLCBkb2VzIGl0IGhhdmUgYW55IHByb3BlcnRpZXMgb2YgaXRzIG93bj9cblxuICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSkpIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodmFsKSB7XG4gIHJldHVybiB2YWwgJiYgdHlwZW9mIHZhbC5pc1ZhbGlkID09ICdmdW5jdGlvbicgJiYgdmFsLmlzVmFsaWQoKTtcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iaikge1xuICB2YXIgY291bnQgPSAwO1xuXG4gIGZvciAodmFyIHByb3AgaW4gb2JqKSB7XG4gICAgdmFyIGlzRGF0ZVJhbmdlID0gX3R5cGVvZihvYmpbcHJvcF0pID09ICdvYmplY3QnO1xuICAgIGlmIChpc0RhdGVSYW5nZSB8fCBvYmpbcHJvcF0gJiYgKCFpc05hTihvYmpbcHJvcF0pIHx8IG9ialtwcm9wXS50cmltKCkpKSBjb3VudCsrO1xuICB9XG5cbiAgcmV0dXJuIGNvdW50O1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGFibGUsIGhhc0NoaWxkUm93LCBpc0NoaWxkUm93VG9nZ2xlckZpcnN0KSB7XG4gIHZhciByb3cgPSB0YWJsZS5nZXRFbGVtZW50c0J5VGFnTmFtZShcInRyXCIpWzBdLFxuICAgICAgY29scyA9IHJvdyA/IHJvdy5jaGlsZHJlbiA6IHVuZGVmaW5lZDtcbiAgaWYgKCFjb2xzKSByZXR1cm47XG4gIHRhYmxlLnN0eWxlLm92ZXJmbG93ID0gXCJoaWRkZW5cIjtcbiAgdmFyIHRhYmxlSGVpZ2h0ID0gdGFibGUub2Zmc2V0SGVpZ2h0O1xuICB2YXIgaSA9IGhhc0NoaWxkUm93ICYmIGlzQ2hpbGRSb3dUb2dnbGVyRmlyc3QgPyAxIDogMDtcbiAgdmFyIHRpbGwgPSBoYXNDaGlsZFJvdyAmJiAhaXNDaGlsZFJvd1RvZ2dsZXJGaXJzdCA/IGNvbHMubGVuZ3RoIC0gMiA6IGNvbHMubGVuZ3RoO1xuXG4gIGZvciAoOyBpIDwgdGlsbDsgaSsrKSB7XG4gICAgdmFyIGRpdiA9IGNyZWF0ZURpdih0YWJsZUhlaWdodCk7XG4gICAgZGl2LmNsYXNzTmFtZSA9IFwicmVzaXplLWhhbmRsZVwiO1xuICAgIGNvbHNbaV0uYXBwZW5kQ2hpbGQoZGl2KTtcbiAgICBjb2xzW2ldLnN0eWxlLnBvc2l0aW9uID0gXCJyZWxhdGl2ZVwiO1xuICAgIHNldExpc3RlbmVycyhkaXYpO1xuICB9XG5cbiAgZnVuY3Rpb24gc2V0TGlzdGVuZXJzKGRpdikge1xuICAgIHZhciBwYWdlWCwgY3VyQ29sLCBueHRDb2wsIGN1ckNvbFdpZHRoLCBueHRDb2xXaWR0aDtcbiAgICBkaXYuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlZG93blwiLCBmdW5jdGlvbiAoZSkge1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIGN1ckNvbCA9IGUudGFyZ2V0LnBhcmVudEVsZW1lbnQ7XG4gICAgICBueHRDb2wgPSBjdXJDb2wubmV4dEVsZW1lbnRTaWJsaW5nO1xuICAgICAgcGFnZVggPSBlLnBhZ2VYO1xuICAgICAgdmFyIHBhZGRpbmcgPSBwYWRkaW5nRGlmZihjdXJDb2wpO1xuICAgICAgY3VyQ29sV2lkdGggPSBjdXJDb2wub2Zmc2V0V2lkdGggLSBwYWRkaW5nO1xuICAgICAgaWYgKG54dENvbCkgbnh0Q29sV2lkdGggPSBueHRDb2wub2Zmc2V0V2lkdGggLSBwYWRkaW5nO1xuICAgIH0pOyAvLyBkaXYuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlb3ZlclwiLCBmdW5jdGlvbihlKSB7XG4gICAgLy8gICBlLnRhcmdldC5zdHlsZS5ib3JkZXJSaWdodCA9IFwiMnB4IHNvbGlkICMwMDAwZmZcIjtcbiAgICAvLyB9KTtcblxuICAgIGRpdi5hZGRFdmVudExpc3RlbmVyKFwibW91c2VvdXRcIiwgZnVuY3Rpb24gKGUpIHtcbiAgICAgIGUudGFyZ2V0LnN0eWxlLmJvcmRlclJpZ2h0ID0gXCJcIjtcbiAgICB9KTtcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwibW91c2Vtb3ZlXCIsIGZ1bmN0aW9uIChlKSB7XG4gICAgICBpZiAoY3VyQ29sKSB7XG4gICAgICAgIHZhciBkaWZmWCA9IGUucGFnZVggLSBwYWdlWDtcbiAgICAgICAgaWYgKG54dENvbCkgbnh0Q29sLnN0eWxlLndpZHRoID0gbnh0Q29sV2lkdGggLSBkaWZmWCArIFwicHhcIjtcbiAgICAgICAgY3VyQ29sLnN0eWxlLndpZHRoID0gY3VyQ29sV2lkdGggKyBkaWZmWCArIFwicHhcIjtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwibW91c2V1cFwiLCBmdW5jdGlvbiAoZSkge1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIGN1ckNvbCA9IHVuZGVmaW5lZDtcbiAgICAgIG54dENvbCA9IHVuZGVmaW5lZDtcbiAgICAgIHBhZ2VYID0gdW5kZWZpbmVkO1xuICAgICAgbnh0Q29sV2lkdGggPSB1bmRlZmluZWQ7XG4gICAgICBjdXJDb2xXaWR0aCA9IHVuZGVmaW5lZDtcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZURpdihoZWlnaHQpIHtcbiAgICB2YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICBkaXYuc3R5bGUudG9wID0gMDtcbiAgICBkaXYuc3R5bGUucmlnaHQgPSAwO1xuICAgIGRpdi5zdHlsZS53aWR0aCA9IFwiNXB4XCI7XG4gICAgZGl2LnN0eWxlLnBvc2l0aW9uID0gXCJhYnNvbHV0ZVwiO1xuICAgIGRpdi5zdHlsZS5jdXJzb3IgPSBcImNvbC1yZXNpemVcIjtcbiAgICBkaXYuc3R5bGUudXNlclNlbGVjdCA9IFwibm9uZVwiO1xuICAgIGRpdi5zdHlsZS5oZWlnaHQgPSBoZWlnaHQgKyBcInB4XCI7XG4gICAgcmV0dXJuIGRpdjtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBhZGRpbmdEaWZmKGNvbCkge1xuICAgIGlmIChnZXRTdHlsZVZhbChjb2wsIFwiYm94LXNpemluZ1wiKSA9PSBcImJvcmRlci1ib3hcIikge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuXG4gICAgdmFyIHBhZExlZnQgPSBnZXRTdHlsZVZhbChjb2wsIFwicGFkZGluZy1sZWZ0XCIpO1xuICAgIHZhciBwYWRSaWdodCA9IGdldFN0eWxlVmFsKGNvbCwgXCJwYWRkaW5nLXJpZ2h0XCIpO1xuICAgIHJldHVybiBwYXJzZUludChwYWRMZWZ0KSArIHBhcnNlSW50KHBhZFJpZ2h0KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldFN0eWxlVmFsKGVsbSwgY3NzKSB7XG4gICAgcmV0dXJuIHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsbSwgbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZShjc3MpO1xuICB9XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBfZGVmYXVsdDtcblxuZnVuY3Rpb24gX2RlZmF1bHQoc3RyKSB7XG4gIHJldHVybiBzdHIuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBzdHIuc2xpY2UoMSk7XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBfYnVzID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9idXNcIikpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBcImRlZmF1bHRcIjogb2JqIH07IH1cblxudmFyIENsaWVudFRhYmxlID0gcmVxdWlyZSgnLi92LWNsaWVudC10YWJsZScpO1xuXG52YXIgU2VydmVyVGFibGUgPSByZXF1aXJlKCcuL3Ytc2VydmVyLXRhYmxlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBDbGllbnRUYWJsZTogQ2xpZW50VGFibGUsXG4gIFNlcnZlclRhYmxlOiBTZXJ2ZXJUYWJsZSxcbiAgRXZlbnQ6IF9idXNbXCJkZWZhdWx0XCJdXG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG5mdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChkYXRhKSB7XG4gIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gZGF0YS5tYXAoZnVuY3Rpb24gKHJvdykge1xuICAgICAgZm9yICh2YXIgY29sdW1uIGluIHJvdykge1xuICAgICAgICBpZiAoX3RoaXMuc291cmNlID09PSAnY2xpZW50Jykgcm93W2NvbHVtbl0gPSBfdGhpcy5mb3JtYXREYXRlKHJvd1tjb2x1bW5dLCBfdGhpcy5kYXRlRm9ybWF0KGNvbHVtbikpO1xuXG4gICAgICAgIGlmIChfdGhpcy5pc0xpc3RGaWx0ZXIoY29sdW1uKSAmJiAhX3RoaXMub3B0cy50ZW1wbGF0ZXNbY29sdW1uXSAmJiAhX3RoaXMuJHNjb3BlZFNsb3RzW2NvbHVtbl0pIHtcbiAgICAgICAgICByb3dbY29sdW1uXSA9IF90aGlzLm9wdGlvblRleHQocm93W2NvbHVtbl0sIGNvbHVtbik7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJvdztcbiAgICB9KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGNvbnNvbGUuZXJyb3IoXCJ2dWUtdGFibGVzLTI6IG5vbi1pdGVyYWJsZSBkYXRhIHByb3BlcnR5LiBFeHBlY3RlZCBhcnJheSwgZ290IFwiLmNvbmNhdChfdHlwZW9mKGRhdGEpLCBcIi4gTWFrZSBzdXJlIHRoYXQgeW91ciByZXNwb25zZSBjb25mb3JtcyB0byB0aGUgZXhwZWN0ZWQgZm9ybWF0LCBvciB1c2UgdGhlICdyZXNwb25zZUFkYXB0ZXInIG9wdGlvbiB0byBtYXRjaCB0aGUgY3VycmVudGx5IHJldHVybmVkIGZvcm1hdFwiKSk7XG4gICAgY29uc29sZS5lcnJvcignRGF0YSBlcXVhbHMnLCBkYXRhKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoKTtcbiAgfVxufTsiLCJcInVzZSBzdHJpY3RcIjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoY29sdW1uLCByb3cpIHtcbiAgaWYgKCF0aGlzLm9wdHMuY2VsbENsYXNzZXNbY29sdW1uXSkgcmV0dXJuICcnO1xuICByZXR1cm4gdGhpcy5vcHRzLmNlbGxDbGFzc2VzW2NvbHVtbl0uZmlsdGVyKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgcmV0dXJuIGl0ZW0uY29uZGl0aW9uKHJvdyk7XG4gIH0pLm1hcChmdW5jdGlvbiAoaXRlbSkge1xuICAgIHJldHVybiBpdGVtW1wiY2xhc3NcIl07XG4gIH0pLmpvaW4oJyAnKTtcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHJvd0lkKSB7XG4gIHJldHVybiB0aGlzLm9wZW5DaGlsZFJvd3MuaW5jbHVkZXMocm93SWQpID8gJ1Z1ZVRhYmxlc19fY2hpbGQtcm93LXRvZ2dsZXItLW9wZW4nIDogJ1Z1ZVRhYmxlc19fY2hpbGQtcm93LXRvZ2dsZXItLWNsb3NlZCc7XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG5mdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG52YXIgb2JqZWN0X2ZpbGxlZF9rZXlzX2NvdW50ID0gcmVxdWlyZSgnLi4vaGVscGVycy9vYmplY3QtZmlsbGVkLWtleXMtY291bnQnKTtcblxudmFyIGlzX3ZhbGlkX21vbWVudF9vYmplY3QgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzLXZhbGlkLW1vbWVudC1vYmplY3QnKTtcblxudmFyIGZpbHRlckJ5Q3VzdG9tRmlsdGVycyA9IHJlcXVpcmUoJy4uL2ZpbHRlcnMvY3VzdG9tLWZpbHRlcnMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZGF0YSwgZSkge1xuICBpZiAoZSkge1xuICAgIHZhciBfcXVlcnkgPSB0aGlzLnF1ZXJ5O1xuICAgIHRoaXMuc2V0UGFnZSgxLCB0cnVlKTtcbiAgICB2YXIgbmFtZSA9IHRoaXMuZ2V0TmFtZShlLnRhcmdldC5uYW1lKTtcbiAgICB2YXIgdmFsdWUgPSBfdHlwZW9mKGUudGFyZ2V0LnZhbHVlKSA9PT0gJ29iamVjdCcgPyBlLnRhcmdldC52YWx1ZSA6ICcnICsgZS50YXJnZXQudmFsdWU7XG5cbiAgICBpZiAobmFtZSkge1xuICAgICAgX3F1ZXJ5W25hbWVdID0gdmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIF9xdWVyeSA9IHZhbHVlO1xuICAgIH1cblxuICAgIHRoaXMudnVleCA/IHRoaXMuY29tbWl0KCdTRVRfRklMVEVSJywgX3F1ZXJ5KSA6IHRoaXMucXVlcnkgPSBfcXVlcnk7XG4gICAgdGhpcy51cGRhdGVTdGF0ZSgncXVlcnknLCBfcXVlcnkpO1xuXG4gICAgaWYgKG5hbWUpIHtcbiAgICAgIHRoaXMuZGlzcGF0Y2goJ2ZpbHRlcicsIHtcbiAgICAgICAgbmFtZTogbmFtZSxcbiAgICAgICAgdmFsdWU6IHZhbHVlXG4gICAgICB9KTtcbiAgICAgIHRoaXMuZGlzcGF0Y2goXCJmaWx0ZXI6OlwiLmNvbmNhdChuYW1lKSwgdmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRpc3BhdGNoKCdmaWx0ZXInLCB2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgdmFyIHF1ZXJ5ID0gdGhpcy5xdWVyeTtcbiAgdmFyIHRvdGFsUXVlcmllcyA9ICFxdWVyeSA/IDAgOiAxO1xuICBpZiAoIXRoaXMub3B0cykgcmV0dXJuIGRhdGE7XG5cbiAgaWYgKHRoaXMub3B0cy5maWx0ZXJCeUNvbHVtbikge1xuICAgIHRvdGFsUXVlcmllcyA9IG9iamVjdF9maWxsZWRfa2V5c19jb3VudChxdWVyeSk7XG4gIH1cblxuICB2YXIgdmFsdWU7XG4gIHZhciBmb3VuZDtcbiAgdmFyIGN1cnJlbnRRdWVyeTtcbiAgdmFyIGRhdGVGb3JtYXQ7XG4gIHZhciBmaWx0ZXJCeURhdGU7XG4gIHZhciBpc0xpc3RGaWx0ZXI7XG4gIHZhciBkYXRhID0gZmlsdGVyQnlDdXN0b21GaWx0ZXJzKGRhdGEsIHRoaXMub3B0cy5jdXN0b21GaWx0ZXJzLCB0aGlzLmN1c3RvbVF1ZXJpZXMpO1xuICBpZiAoIXRvdGFsUXVlcmllcykgcmV0dXJuIGRhdGE7XG4gIHJldHVybiBkYXRhLmZpbHRlcihmdW5jdGlvbiAocm93LCBpbmRleCkge1xuICAgIGZvdW5kID0gMDtcbiAgICB0aGlzLmZpbHRlcmFibGVDb2x1bW5zLmZvckVhY2goZnVuY3Rpb24gKGNvbHVtbikge1xuICAgICAgZmlsdGVyQnlEYXRlID0gdGhpcy5vcHRzLmRhdGVDb2x1bW5zLmluZGV4T2YoY29sdW1uKSA+IC0xICYmIHRoaXMub3B0cy5maWx0ZXJCeUNvbHVtbjtcbiAgICAgIGlzTGlzdEZpbHRlciA9IHRoaXMuaXNMaXN0RmlsdGVyKGNvbHVtbikgJiYgdGhpcy5vcHRzLmZpbHRlckJ5Q29sdW1uO1xuICAgICAgZGF0ZUZvcm1hdCA9IHRoaXMuZGF0ZUZvcm1hdChjb2x1bW4pO1xuICAgICAgdmFsdWUgPSB0aGlzLl9nZXRWYWx1ZShyb3csIGNvbHVtbik7XG5cbiAgICAgIGlmIChpc192YWxpZF9tb21lbnRfb2JqZWN0KHZhbHVlKSAmJiAhZmlsdGVyQnlEYXRlKSB7XG4gICAgICAgIHZhbHVlID0gdmFsdWUuZm9ybWF0KGRhdGVGb3JtYXQpO1xuICAgICAgfVxuXG4gICAgICBjdXJyZW50UXVlcnkgPSB0aGlzLm9wdHMuZmlsdGVyQnlDb2x1bW4gPyBxdWVyeVtjb2x1bW5dIDogcXVlcnk7XG4gICAgICBjdXJyZW50UXVlcnkgPSBzZXRDdXJyZW50UXVlcnkoY3VycmVudFF1ZXJ5KTtcblxuICAgICAgaWYgKGN1cnJlbnRRdWVyeSkge1xuICAgICAgICBpZiAodGhpcy5vcHRzLmZpbHRlckFsZ29yaXRobVtjb2x1bW5dKSB7XG4gICAgICAgICAgaWYgKHRoaXMub3B0cy5maWx0ZXJBbGdvcml0aG1bY29sdW1uXShyb3csIHRoaXMub3B0cy5maWx0ZXJCeUNvbHVtbiA/IHF1ZXJ5W2NvbHVtbl0gOiBxdWVyeSkpIGZvdW5kKys7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKGZvdW5kTWF0Y2goY3VycmVudFF1ZXJ5LCB2YWx1ZSwgaXNMaXN0RmlsdGVyKSkgZm91bmQrKztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0uYmluZCh0aGlzKSk7XG4gICAgcmV0dXJuIGZvdW5kID49IHRvdGFsUXVlcmllcztcbiAgfS5iaW5kKHRoaXMpKTtcbn07XG5cbmZ1bmN0aW9uIHNldEN1cnJlbnRRdWVyeShxdWVyeSkge1xuICBpZiAoIXF1ZXJ5KSByZXR1cm4gJyc7XG4gIGlmICh0eXBlb2YgcXVlcnkgPT0gJ3N0cmluZycpIHJldHVybiBxdWVyeS50b0xvd2VyQ2FzZSgpOyAvLyBEYXRlIFJhbmdlXG5cbiAgcmV0dXJuIHF1ZXJ5O1xufVxuXG5mdW5jdGlvbiBmb3VuZE1hdGNoKHF1ZXJ5LCB2YWx1ZSwgaXNMaXN0RmlsdGVyKSB7XG4gIGlmIChbJ3N0cmluZycsICdudW1iZXInLCAnYm9vbGVhbiddLmluZGV4T2YoX3R5cGVvZih2YWx1ZSkpID4gLTEpIHtcbiAgICB2YWx1ZSA9IFN0cmluZyh2YWx1ZSkudG9Mb3dlckNhc2UoKTtcbiAgfSAvLyBMaXN0IEZpbHRlclxuXG5cbiAgaWYgKGlzTGlzdEZpbHRlcikge1xuICAgIHJldHVybiB2YWx1ZSA9PSBxdWVyeTtcbiAgfSAvL1RleHQgRmlsdGVyXG5cblxuICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiB2YWx1ZS5pbmRleE9mKHF1ZXJ5KSA+IC0xO1xuICB9IC8vIERhdGUgcmFuZ2VcblxuXG4gIGlmIChpc192YWxpZF9tb21lbnRfb2JqZWN0KHZhbHVlKSkge1xuICAgIHZhciBzdGFydCA9IG1vbWVudChxdWVyeS5zdGFydCwgJ1lZWVktTU0tREQgSEg6bW06c3MnKTtcbiAgICB2YXIgZW5kID0gbW9tZW50KHF1ZXJ5LmVuZCwgJ1lZWVktTU0tREQgSEg6bW06c3MnKTtcbiAgICByZXR1cm4gdmFsdWUgPj0gc3RhcnQgJiYgdmFsdWUgPD0gZW5kO1xuICB9XG5cbiAgaWYgKF90eXBlb2YodmFsdWUpID09PSAnb2JqZWN0Jykge1xuICAgIGZvciAodmFyIGtleSBpbiB2YWx1ZSkge1xuICAgICAgaWYgKGZvdW5kTWF0Y2gocXVlcnksIHZhbHVlW2tleV0pKSByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdmFsdWUgPj0gc3RhcnQgJiYgdmFsdWUgPD0gZW5kO1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChjb2x1bW4pIHtcbiAgdmFyIGMgPSB0aGlzLm9wdHMuY29sdW1uc0NsYXNzZXM7XG4gIHJldHVybiBjLmhhc093blByb3BlcnR5KGNvbHVtbikgPyBjW2NvbHVtbl0gOiAnJztcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGNvbHVtbikge1xuICB2YXIgdXNlck11bHRpU29ydCA9IE9iamVjdC5rZXlzKHRoaXMudXNlck11bHRpU29ydGluZyk7XG4gIGlmICghdXNlck11bHRpU29ydC5sZW5ndGggfHwgdGhpcy5vcmRlckJ5LmNvbHVtbiA9PT0gY29sdW1uKSByZXR1cm4gdGhpcy5vcmRlckJ5LmNvbHVtbiA9PT0gY29sdW1uO1xuICByZXR1cm4gISF0aGlzLnVzZXJNdWx0aVNvcnRpbmdbdXNlck11bHRpU29ydFswXV0uZmlsdGVyKGZ1bmN0aW9uIChjb2wpIHtcbiAgICByZXR1cm4gY29sLmNvbHVtbiA9PSBjb2x1bW47XG4gIH0pLmxlbmd0aDtcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGNvbHVtbikge1xuICBpZiAodGhpcy5vcHRzLmRhdGVGb3JtYXRQZXJDb2x1bW4uaGFzT3duUHJvcGVydHkoY29sdW1uKSkge1xuICAgIHJldHVybiB0aGlzLm9wdHMuZGF0ZUZvcm1hdFBlckNvbHVtbltjb2x1bW5dO1xuICB9XG5cbiAgcmV0dXJuIHRoaXMub3B0cy5kYXRlRm9ybWF0O1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoY29sdW1uLCBhc2NlbmRpbmcpIHtcbiAgdmFyIG11bHRpSW5kZXggPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IC0xO1xuICB2YXIgc29ydCA9IHRoaXMuZGVmYXVsdFNvcnQ7XG4gIHZhciBtdWx0aVNvcnQgPSB0aGlzLnVzZXJNdWx0aVNvcnRpbmdbdGhpcy5jdXJyZW50bHlTb3J0aW5nLmNvbHVtbl0gPyB0aGlzLnVzZXJNdWx0aVNvcnRpbmdbdGhpcy5jdXJyZW50bHlTb3J0aW5nLmNvbHVtbl0gOiB0aGlzLm9wdHMubXVsdGlTb3J0aW5nW3RoaXMuY3VycmVudGx5U29ydGluZy5jb2x1bW5dO1xuICB2YXIgYXNjID0gdGhpcy5jdXJyZW50bHlTb3J0aW5nLmFzY2VuZGluZztcbiAgdmFyIHNlbGYgPSB0aGlzO1xuICByZXR1cm4gZnVuY3Rpb24gKGEsIGIpIHtcbiAgICB2YXIgYVZhbCA9IHNlbGYuX2dldFZhbHVlKGEsIGNvbHVtbikgfHwgJyc7XG4gICAgdmFyIGJWYWwgPSBzZWxmLl9nZXRWYWx1ZShiLCBjb2x1bW4pIHx8ICcnO1xuICAgIHZhciBkaXIgPSBhc2NlbmRpbmcgPyAxIDogLTE7XG4gICAgdmFyIHNlY29uZGFyeUFzYztcbiAgICBpZiAodHlwZW9mIGFWYWwgPT09ICdzdHJpbmcnKSBhVmFsID0gYVZhbC50b0xvd2VyQ2FzZSgpO1xuICAgIGlmICh0eXBlb2YgYlZhbCA9PT0gJ3N0cmluZycpIGJWYWwgPSBiVmFsLnRvTG93ZXJDYXNlKCk7XG5cbiAgICBpZiAoYVZhbCA9PT0gYlZhbCAmJiBtdWx0aVNvcnQgJiYgbXVsdGlTb3J0W211bHRpSW5kZXggKyAxXSkge1xuICAgICAgdmFyIHNvcnREYXRhID0gbXVsdGlTb3J0W211bHRpSW5kZXggKyAxXTtcblxuICAgICAgaWYgKHR5cGVvZiBzb3J0RGF0YS5hc2NlbmRpbmcgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHNlY29uZGFyeUFzYyA9IHNvcnREYXRhLmFzY2VuZGluZztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNlY29uZGFyeUFzYyA9IHNvcnREYXRhLm1hdGNoRGlyID8gYXNjIDogIWFzYztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHNvcnQoc29ydERhdGEuY29sdW1uLCBzZWNvbmRhcnlBc2MsIG11bHRpSW5kZXggKyAxKShhLCBiKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYVZhbCA+IGJWYWwgPyBkaXIgOiAtZGlyO1xuICB9O1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxudmFyIF9idXMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuLi9idXNcIikpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBcImRlZmF1bHRcIjogb2JqIH07IH1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZXZlbnQsIHBheWxvYWQpIHtcbiAgaWYgKHRoaXMudnVleCkge1xuICAgIGlmIChldmVudC5zcGxpdCgnOjonKS5sZW5ndGggPiAxKSByZXR1cm47XG4gICAgdGhpcy5jb21taXQoZXZlbnQudG9VcHBlckNhc2UoKS5yZXBsYWNlKCctJywgJ18nKSwgcGF5bG9hZCk7XG4gIH1cblxuICB0aGlzLiRlbWl0KGV2ZW50LCBwYXlsb2FkKTtcblxuICBfYnVzW1wiZGVmYXVsdFwiXS4kZW1pdChcInZ1ZS10YWJsZXMuXCIuY29uY2F0KGV2ZW50KSwgcGF5bG9hZCk7XG5cbiAgaWYgKHRoaXMubmFtZSkge1xuICAgIF9idXNbXCJkZWZhdWx0XCJdLiRlbWl0KFwidnVlLXRhYmxlcy5cIi5jb25jYXQodGhpcy5uYW1lLCBcIi5cIikuY29uY2F0KGV2ZW50KSwgcGF5bG9hZCk7XG4gIH1cbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHRleHQsIHJlcGxhY2VtZW50cykge1xuICBpZiAoIXRoaXMub3B0cy50ZXh0cykgcmV0dXJuICcnO1xuICB2YXIgdGV4dCA9IHRoaXMub3B0cy50ZXh0c1t0ZXh0XTtcbiAgaWYgKHJlcGxhY2VtZW50cykgZm9yICh2YXIga2V5IGluIHJlcGxhY2VtZW50cykge1xuICAgIC8vIGNvbnNvbGUubG9nKGtleSlcbiAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKCd7JyArIGtleSArICd9JywgcmVwbGFjZW1lbnRzW2tleV0pO1xuICB9XG4gIHJldHVybiB0ZXh0O1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoY29sdW1uKSB7XG4gIGlmICghdGhpcy5vcHRzLmZpbHRlcmFibGUpIHJldHVybiBmYWxzZTtcbiAgcmV0dXJuIHR5cGVvZiB0aGlzLm9wdHMuZmlsdGVyYWJsZSA9PSAnYm9vbGVhbicgJiYgdGhpcy5vcHRzLmZpbHRlcmFibGUgfHwgdGhpcy5vcHRzLmZpbHRlcmFibGUuaW5kZXhPZihjb2x1bW4pID4gLTE7XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChoLCByb3csIGluZGV4KSB7XG4gIC8vIHNjb3BlZCBzbG90XG4gIGlmICh0aGlzLiRzY29wZWRTbG90cy5jaGlsZF9yb3cpIHJldHVybiB0aGlzLiRzY29wZWRTbG90cy5jaGlsZF9yb3coe1xuICAgIHJvdzogcm93LFxuICAgIGluZGV4OiBpbmRleFxuICB9KTtcbiAgdmFyIGNoaWxkUm93ID0gdGhpcy5vcHRzLmNoaWxkUm93OyAvLyBmdW5jdGlvblxuXG4gIGlmICh0eXBlb2YgY2hpbGRSb3cgPT09ICdmdW5jdGlvbicpIHJldHVybiBjaGlsZFJvdy5hcHBseSh0aGlzLCBbaCwgcm93XSk7IC8vIGNvbXBvbmVudFxuXG4gIHJldHVybiBoKGNoaWxkUm93LCB7XG4gICAgYXR0cnM6IHtcbiAgICAgIGRhdGE6IHJvd1xuICAgIH1cbiAgfSk7XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChjb2x1bW4pIHtcbiAgcmV0dXJuICd2Zl9fJyArIGNvbHVtbi5zcGxpdCgnLicpLmpvaW4oJ0BAQCcpO1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxudmFyIG1lcmdlID0gcmVxdWlyZSgnbWVyZ2UnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAocHJvbWlzZU9ubHkpIHtcbiAgdmFyIF9kYXRhO1xuXG4gIHZhciBhZGRpdGlvbmFsRGF0YSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG4gIHZhciBlbWl0TG9hZGluZyA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDogdHJ1ZTtcbiAgdmFyIGtleXMgPSB0aGlzLm9wdHMucmVxdWVzdEtleXM7XG4gIHZhciBkYXRhID0gKF9kYXRhID0ge30sIF9kZWZpbmVQcm9wZXJ0eShfZGF0YSwga2V5cy5xdWVyeSwgdGhpcy5maWx0ZXJlZFF1ZXJ5KSwgX2RlZmluZVByb3BlcnR5KF9kYXRhLCBrZXlzLmxpbWl0LCB0aGlzLmxpbWl0KSwgX2RlZmluZVByb3BlcnR5KF9kYXRhLCBrZXlzLmFzY2VuZGluZywgdGhpcy5vcmRlckJ5LmFzY2VuZGluZyA/IDEgOiAwKSwgX2RlZmluZVByb3BlcnR5KF9kYXRhLCBrZXlzLnBhZ2UsIHRoaXMucGFnZSksIF9kZWZpbmVQcm9wZXJ0eShfZGF0YSwga2V5cy5ieUNvbHVtbiwgdGhpcy5vcHRzLmZpbHRlckJ5Q29sdW1uID8gMSA6IDApLCBfZGF0YSk7XG4gIGlmICh0aGlzLm9yZGVyQnkuaGFzT3duUHJvcGVydHkoJ2NvbHVtbicpICYmIHRoaXMub3JkZXJCeS5jb2x1bW4pIGRhdGFba2V5cy5vcmRlckJ5XSA9IHRoaXMub3JkZXJCeS5jb2x1bW47XG4gIGRhdGEgPSBtZXJnZShkYXRhLCB0aGlzLm9wdHMucGFyYW1zLCB0aGlzLmN1c3RvbVF1ZXJpZXMsIGFkZGl0aW9uYWxEYXRhKTtcblxuICBpZiAodGhpcy5oYXNNdWx0aVNvcnQgJiYgdGhpcy5vcmRlckJ5LmNvbHVtbiAmJiB0aGlzLnVzZXJNdWx0aVNvcnRpbmdbdGhpcy5vcmRlckJ5LmNvbHVtbl0pIHtcbiAgICBkYXRhLm11bHRpU29ydCA9IHRoaXMudXNlck11bHRpU29ydGluZ1t0aGlzLm9yZGVyQnkuY29sdW1uXTtcbiAgfVxuXG4gIGRhdGEgPSB0aGlzLm9wdHMucmVxdWVzdEFkYXB0ZXIoZGF0YSk7XG5cbiAgaWYgKGVtaXRMb2FkaW5nKSB7XG4gICAgdGhpcy5kaXNwYXRjaCgnbG9hZGluZycsIGRhdGEpO1xuICB9XG5cbiAgdmFyIHByb21pc2UgPSB0aGlzLnNlbmRSZXF1ZXN0KGRhdGEpO1xuICBpZiAocHJvbWlzZU9ubHkpIHJldHVybiBwcm9taXNlO1xuICByZXR1cm4gcHJvbWlzZS50aGVuKGZ1bmN0aW9uIChyZXNwb25zZSkge1xuICAgIHJldHVybiB0aGlzLnNldERhdGEocmVzcG9uc2UpO1xuICB9LmJpbmQodGhpcykpO1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgaWYgKHRoaXMuJHNjb3BlZFNsb3RzICYmIHRoaXMuJHNjb3BlZFNsb3RzWydfX2dyb3VwX21ldGEnXSkge1xuICAgIHZhciBkYXRhID0gdGhpcy5vcHRzLmdyb3VwTWV0YS5maW5kKGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgIHJldHVybiB2YWwudmFsdWUgPT09IHZhbHVlO1xuICAgIH0pO1xuICAgIGlmICghZGF0YSkgcmV0dXJuICcnO1xuICAgIHJldHVybiB0aGlzLiRzY29wZWRTbG90c1snX19ncm91cF9tZXRhJ10oZGF0YSk7XG4gIH1cblxuICByZXR1cm4gJyc7XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh2YWx1ZSwgaCkge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJykgcmV0dXJuICcnO1xuICB2YXIgZGVyaXZlZEhlYWRpbmdUb29sdGlwID0gJyc7XG4gIGlmICghdGhpcy5vcHRzLmhlYWRpbmdzVG9vbHRpcHMuaGFzT3duUHJvcGVydHkodmFsdWUpKSByZXR1cm4gZGVyaXZlZEhlYWRpbmdUb29sdGlwO1xuXG4gIGlmICh0eXBlb2YgdGhpcy5vcHRzLmhlYWRpbmdzVG9vbHRpcHNbdmFsdWVdID09PSAnZnVuY3Rpb24nKSB7XG4gICAgaWYgKGgpIHJldHVybiB0aGlzLm9wdHMuaGVhZGluZ3NUb29sdGlwc1t2YWx1ZV0uY2FsbCh0aGlzLiRwYXJlbnQsIGgpO1xuICAgIHJldHVybiBkZXJpdmVkSGVhZGluZ1Rvb2x0aXA7XG4gIH1cblxuICByZXR1cm4gdGhpcy5vcHRzLmhlYWRpbmdzVG9vbHRpcHNbdmFsdWVdO1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxudmFyIF91Y2ZpcnN0ID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi4vaGVscGVycy91Y2ZpcnN0XCIpKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgXCJkZWZhdWx0XCI6IG9iaiB9OyB9XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHZhbHVlLCBoKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09ICdzdHJpbmcnKSByZXR1cm4gJyc7XG5cbiAgaWYgKHR5cGVvZiB0aGlzLiRzbG90c1tcImhfX1wiLmNvbmNhdCh2YWx1ZSldICE9PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiB0aGlzLiRzbG90c1tcImhfX1wiLmNvbmNhdCh2YWx1ZSldO1xuICB9XG5cbiAgdmFyIGRlcml2ZWRIZWFkaW5nID0gKDAsIF91Y2ZpcnN0W1wiZGVmYXVsdFwiXSkodmFsdWUuc3BsaXQoXCJfXCIpLmpvaW4oXCIgXCIpKTtcbiAgaWYgKCF0aGlzLm9wdHMuaGVhZGluZ3MuaGFzT3duUHJvcGVydHkodmFsdWUpKSByZXR1cm4gZGVyaXZlZEhlYWRpbmc7XG5cbiAgaWYgKHR5cGVvZiB0aGlzLm9wdHMuaGVhZGluZ3NbdmFsdWVdID09PSAnZnVuY3Rpb24nKSB7XG4gICAgaWYgKGgpIHJldHVybiB0aGlzLm9wdHMuaGVhZGluZ3NbdmFsdWVdLmNhbGwodGhpcy4kcGFyZW50LCBoKTtcbiAgICByZXR1cm4gZGVyaXZlZEhlYWRpbmc7XG4gIH1cblxuICByZXR1cm4gdGhpcy5vcHRzLmhlYWRpbmdzW3ZhbHVlXTtcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGNvbHVtbikge1xuICBpZiAodHlwZW9mIHRoaXMub3B0cy5pbml0RmlsdGVyc1tjb2x1bW5dICE9PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiB0aGlzLm9wdHMuaW5pdEZpbHRlcnNbY29sdW1uXTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgdGhpcy5xdWVyeVtjb2x1bW5dICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnF1ZXJ5W2NvbHVtbl0uc3RhcnQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc3RhcnQ6IG1vbWVudCh0aGlzLnF1ZXJ5W2NvbHVtbl0uc3RhcnQsICdZWVlZLU1NLUREIEhIOm1tOnNzJyksXG4gICAgICBlbmQ6IG1vbWVudCh0aGlzLnF1ZXJ5W2NvbHVtbl0uZW5kLCAnWVlZWS1NTS1ERCBISDptbTpzcycpXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgaWYgKCFuYW1lKSByZXR1cm4gbmFtZTtcbiAgbmFtZSA9IG5hbWUuc3BsaXQoJ19fJyk7XG4gIG5hbWUuc2hpZnQoKTtcbiAgcmV0dXJuIG5hbWUuam9pbignX18nKS5zcGxpdCgnQEBAJykuam9pbignLicpO1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgdmFyIHJvd3MgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IG51bGw7XG5cbiAgaWYgKCF0aGlzLm9wdHMuY2hpbGRSb3cgfHwgdHlwZW9mIHRoaXMub3B0cy5jaGlsZFJvdyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyBFcnJvcigndnVlLXRhYmxlcy0yOiBDaGlsZCByb3cgdW5kZWZpbmVkIG9yIG5vdCBhIGNvbXBvbmVudCcpO1xuICB9XG5cbiAgdmFyIFJvd3MgPSByb3dzID8gdGhpcy5vcGVuQ2hpbGRSb3dzLmZpbHRlcihmdW5jdGlvbiAocm93KSB7XG4gICAgcmV0dXJuIHJvd3MuaW5jbHVkZXMocm93KTtcbiAgfSkgOiB0aGlzLm9wZW5DaGlsZFJvd3M7XG4gIGlmICghUm93cy5sZW5ndGgpIHJldHVybiBbXTtcbiAgdmFyIGNvbXBvbmVudHMgPSB0aGlzLiRjaGlsZHJlbi5maWx0ZXIoZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgcmV0dXJuIGNoaWxkLiRvcHRpb25zLm5hbWUgPT09ICdDaGlsZFJvdycgJiYgUm93cy5pbmNsdWRlcyhjaGlsZC5kYXRhW190aGlzLm9wdHMudW5pcXVlS2V5XSk7XG4gIH0pO1xuICByZXR1cm4gY29tcG9uZW50cztcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG4gIGlmICh0eXBlb2YgYXhpb3MgIT09ICd1bmRlZmluZWQnKSByZXR1cm4gcmVzcG9uc2UuZGF0YTtcbiAgcmV0dXJuIHJlc3BvbnNlO1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoY29sdW1uKSB7XG4gIHZhciBhc2NlbmRpbmcgPSB0aGlzLm9yZGVyQnkuYXNjZW5kaW5nO1xuICB0aGlzLmN1cnJlbnRseVNvcnRpbmcgPSB7XG4gICAgY29sdW1uOiBjb2x1bW4sXG4gICAgYXNjZW5kaW5nOiBhc2NlbmRpbmdcbiAgfTtcbiAgaWYgKHR5cGVvZiB0aGlzLm9wdHMuY3VzdG9tU29ydGluZ1tjb2x1bW5dID09ICd1bmRlZmluZWQnKSByZXR1cm4gdGhpcy5kZWZhdWx0U29ydChjb2x1bW4sIGFzY2VuZGluZyk7XG4gIHJldHVybiB0aGlzLm9wdHMuY3VzdG9tU29ydGluZ1tjb2x1bW5dKGFzY2VuZGluZyk7XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChyb3csIGNvbHVtbikge1xuICBpZiAoY29sdW1uLmluZGV4T2YoJy4nKSA9PT0gLTEpIHJldHVybiByb3dbY29sdW1uXTtcbiAgdmFyIHAgPSBjb2x1bW4uc3BsaXQoJy4nKTtcbiAgdmFyIHZhbHVlID0gcm93W3BbMF1dO1xuICBpZiAoIXZhbHVlKSByZXR1cm4gJyc7XG5cbiAgZm9yICh2YXIgaSA9IDE7IGkgPCBwLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFsdWUgPSB2YWx1ZVtwW2ldXTsgLy8gSWYgdGhlIG5lc3RlZCBzdHJ1Y3R1cmUgZG9lc24ndCBleGlzdCByZXR1cm4gYW4gZW1wdHkgc3RyaW5nXG5cbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAndW5kZWZpbmVkJykgcmV0dXJuICcnO1xuICB9XG5cbiAgcmV0dXJuIHZhbHVlO1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxuZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxudmFyIGludGVyc2VjdGlvbiA9IHJlcXVpcmUoJ2FycmF5LWludGVyc2VjdCcpW1wiZGVmYXVsdFwiXTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBvcHRzID0gdGhpcy5vcHRzO1xuICByZXR1cm4gb3B0cy5kYXRlQ29sdW1ucy5sZW5ndGggJiYgb3B0cy5maWx0ZXJCeUNvbHVtbiAmJiAodHlwZW9mIG9wdHMuZmlsdGVyYWJsZSA9PSAnYm9vbGVhbicgJiYgb3B0cy5maWx0ZXJhYmxlIHx8IF90eXBlb2Yob3B0cy5maWx0ZXJhYmxlKSA9PSAnb2JqZWN0JyAmJiBpbnRlcnNlY3Rpb24ob3B0cy5maWx0ZXJhYmxlLCBvcHRzLmRhdGVDb2x1bW5zKS5sZW5ndGgpO1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBjdXN0b21RdWVyaWVzID0ge307XG4gIHZhciBpbml0ID0gdGhpcy5vcHRzLmluaXRGaWx0ZXJzO1xuICB2YXIga2V5O1xuICB0aGlzLm9wdHMuY3VzdG9tRmlsdGVycy5mb3JFYWNoKGZ1bmN0aW9uIChmaWx0ZXIpIHtcbiAgICBrZXkgPSB0aGlzLnNvdXJjZSA9PSAnY2xpZW50JyA/IGZpbHRlci5uYW1lIDogZmlsdGVyO1xuICAgIGN1c3RvbVF1ZXJpZXNba2V5XSA9IGluaXQuaGFzT3duUHJvcGVydHkoa2V5KSA/IGluaXRba2V5XSA6ICcnO1xuICB9LmJpbmQodGhpcykpO1xuICByZXR1cm4gY3VzdG9tUXVlcmllcztcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBtZXJnZSA9IHJlcXVpcmUoJ21lcmdlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICBpZiAodHlwZW9mICQgPT09ICd1bmRlZmluZWQnIHx8IHR5cGVvZiAkKHRoaXMuJGVsKS5kYXRlcmFuZ2VwaWNrZXIgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgY29uc29sZS5lcnJvcignRGF0ZSBmaWx0ZXJzIHJlcXVpcmUganF1ZXJ5IGFuZCBkYXRlcmFuZ2VwaWNrZXInKTtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgZWw7XG4gIHZhciB0aGF0ID0gdGhpcztcbiAgdmFyIHF1ZXJ5ID0gdGhpcy52dWV4ID8gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLnF1ZXJ5KSkgOiB0aGlzLnF1ZXJ5O1xuICB2YXIgY29sdW1uT3B0aW9ucztcbiAgdmFyIGRwT3B0aW9ucztcblxuICB2YXIgc2VhcmNoID0gZnVuY3Rpb24gc2VhcmNoKHF1ZXJ5LCBlKSB7XG4gICAgcmV0dXJuIHRoYXQuc291cmNlID09ICdjbGllbnQnID8gdGhhdC5zZWFyY2godGhhdC5kYXRhLCBlKSA6IHRoYXQuc2VydmVyU2VhcmNoKHF1ZXJ5LCBlKTtcbiAgfTtcblxuICB2YXIgZGF0ZXBpY2tlck9wdGlvbnMgPSBtZXJnZS5yZWN1cnNpdmUodGhpcy5vcHRzLmRhdGVwaWNrZXJPcHRpb25zLCB7XG4gICAgYXV0b1VwZGF0ZUlucHV0OiBmYWxzZSxcbiAgICBzaW5nbGVEYXRlUGlja2VyOiBmYWxzZVxuICB9KTtcbiAgdGhhdC5kYXRlcGlja2VyQ29sdW1ucy5mb3JFYWNoKGZ1bmN0aW9uIChjb2x1bW4pIHtcbiAgICB2YXIgcmFuZ2UgPSB0aGF0Ll9nZXRJbml0aWFsRGF0ZVJhbmdlKGNvbHVtbik7XG5cbiAgICBpZiAocmFuZ2UpIHtcbiAgICAgIHRoYXQuX3NldERhdGVwaWNrZXJUZXh0KGNvbHVtbiwgcmFuZ2Uuc3RhcnQsIHJhbmdlLmVuZCk7XG5cbiAgICAgIHJhbmdlID0ge1xuICAgICAgICBzdGFydERhdGU6IHJhbmdlLnN0YXJ0LFxuICAgICAgICBlbmREYXRlOiByYW5nZS5lbmRcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJhbmdlID0ge307XG4gICAgfVxuXG4gICAgZWwgPSAkKHRoYXQuJGVsKS5maW5kKFwiI1Z1ZVRhYmxlc19fXCIgKyAkLmVzY2FwZVNlbGVjdG9yKGNvbHVtbikgKyBcIi1maWx0ZXJcIik7XG4gICAgY29sdW1uT3B0aW9ucyA9IHR5cGVvZiB0aGF0Lm9wdHMuZGF0ZXBpY2tlclBlckNvbHVtbk9wdGlvbnNbY29sdW1uXSAhPT0gJ3VuZGVmaW5lZCcgPyB0aGF0Lm9wdHMuZGF0ZXBpY2tlclBlckNvbHVtbk9wdGlvbnNbY29sdW1uXSA6IHt9O1xuICAgIGNvbHVtbk9wdGlvbnMgPSBtZXJnZS5yZWN1cnNpdmUoY29sdW1uT3B0aW9ucywge1xuICAgICAgbG9jYWxlOiB7XG4gICAgICAgIGZvcm1hdDogdGhhdC5kYXRlRm9ybWF0KGNvbHVtbilcbiAgICAgIH1cbiAgICB9KTtcbiAgICBkcE9wdGlvbnMgPSBtZXJnZSh0cnVlLCBkYXRlcGlja2VyT3B0aW9ucyk7XG5cbiAgICBpZiAoY29sdW1uT3B0aW9ucy5yYW5nZXMgPT09IGZhbHNlKSB7XG4gICAgICBkcE9wdGlvbnMucmFuZ2VzID0ge307XG4gICAgfVxuXG4gICAgZWwuZGF0ZXJhbmdlcGlja2VyKG1lcmdlLnJlY3Vyc2l2ZShkcE9wdGlvbnMsIGNvbHVtbk9wdGlvbnMsIHJhbmdlKSk7XG4gICAgZWwub24oJ2FwcGx5LmRhdGVyYW5nZXBpY2tlcicsIGZ1bmN0aW9uIChldiwgcGlja2VyKSB7XG4gICAgICBxdWVyeVtjb2x1bW5dID0ge1xuICAgICAgICBzdGFydDogcGlja2VyLnN0YXJ0RGF0ZS5mb3JtYXQoJ1lZWVktTU0tREQgSEg6bW06c3MnKSxcbiAgICAgICAgZW5kOiBwaWNrZXIuZW5kRGF0ZS5mb3JtYXQoJ1lZWVktTU0tREQgSEg6bW06c3MnKVxuICAgICAgfTtcbiAgICAgIGlmICghdGhhdC52dWV4KSB0aGF0LnF1ZXJ5ID0gcXVlcnk7XG5cbiAgICAgIHRoYXQuX3NldERhdGVwaWNrZXJUZXh0KGNvbHVtbiwgcGlja2VyLnN0YXJ0RGF0ZSwgcGlja2VyLmVuZERhdGUpO1xuXG4gICAgICB0aGF0LnVwZGF0ZVN0YXRlKCdxdWVyeScsIHF1ZXJ5KTtcbiAgICAgIHNlYXJjaChxdWVyeSwge1xuICAgICAgICB0YXJnZXQ6IHtcbiAgICAgICAgICBuYW1lOiB0aGF0Ll9nZXRDb2x1bW5OYW1lKGNvbHVtbiksXG4gICAgICAgICAgdmFsdWU6IHF1ZXJ5W2NvbHVtbl1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gICAgZWwub24oJ2NhbmNlbC5kYXRlcmFuZ2VwaWNrZXInLCBmdW5jdGlvbiAoZXYsIHBpY2tlcikge1xuICAgICAgcXVlcnlbY29sdW1uXSA9ICcnO1xuICAgICAgaWYgKCF0aGF0LnZ1ZXgpIHRoYXQucXVlcnkgPSBxdWVyeTtcbiAgICAgIHBpY2tlci5zZXRTdGFydERhdGUobW9tZW50KCkpO1xuICAgICAgcGlja2VyLnNldEVuZERhdGUobW9tZW50KCkpO1xuICAgICAgdGhhdC51cGRhdGVTdGF0ZSgncXVlcnknLCBxdWVyeSk7XG4gICAgICAkKHRoaXMpLmh0bWwoXCI8c3BhbiBjbGFzcz0nVnVlVGFibGVzX19maWx0ZXItcGxhY2Vob2xkZXInPlwiICsgdGhhdC5kaXNwbGF5KCdmaWx0ZXJCeScsIHtcbiAgICAgICAgY29sdW1uOiB0aGF0LmdldEhlYWRpbmcoY29sdW1uKVxuICAgICAgfSkgKyBcIjwvc3Bhbj5cIik7XG4gICAgICBzZWFyY2gocXVlcnksIHtcbiAgICAgICAgdGFyZ2V0OiB7XG4gICAgICAgICAgbmFtZTogdGhhdC5fZ2V0Q29sdW1uTmFtZShjb2x1bW4pLFxuICAgICAgICAgIHZhbHVlOiBxdWVyeVtjb2x1bW5dXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBtZXJnZSA9IHJlcXVpcmUoJ21lcmdlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGRlZmF1bHRzLCBnbG9iYWxPcHRpb25zLCBsb2NhbE9wdGlvbnMpIHtcbiAgaWYgKGdsb2JhbE9wdGlvbnMpIGRlZmF1bHRzID0gbWVyZ2UucmVjdXJzaXZlKGRlZmF1bHRzLCBnbG9iYWxPcHRpb25zKTtcbiAgbG9jYWxPcHRpb25zID0gbWVyZ2UucmVjdXJzaXZlKGRlZmF1bHRzLCBsb2NhbE9wdGlvbnMpO1xuICByZXR1cm4gbG9jYWxPcHRpb25zO1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gIGlmICghdGhpcy5vcHRzLm9yZGVyQnkpIHJldHVybjtcbiAgdGhpcy5vcmRlckJ5LmNvbHVtbiA9IHRoaXMub3B0cy5vcmRlckJ5LmNvbHVtbjtcbiAgdGhpcy5vcmRlckJ5LmFzY2VuZGluZyA9IHRoaXMub3B0cy5vcmRlckJ5Lmhhc093blByb3BlcnR5KCdhc2NlbmRpbmcnKSA/IHRoaXMub3B0cy5vcmRlckJ5LmFzY2VuZGluZyA6IHRydWU7XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5wYWdlID0gMTtcblxuICBpZiAoIXRoaXMub3B0cy5wYWdpbmF0aW9uLmRyb3Bkb3duKSB7XG4gICAgdGhpcy4kcmVmcy5wYWdpbmF0aW9uLnNldFBhZ2UoMSk7XG4gIH1cbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICB2YXIgaW5pdCA9IHRoaXMub3B0cy5pbml0RmlsdGVycztcbiAgaWYgKCF0aGlzLm9wdHMuZmlsdGVyQnlDb2x1bW4pIHJldHVybiBpbml0Lmhhc093blByb3BlcnR5KCdHRU5FUklDJykgPyBpbml0LkdFTkVSSUMgOiAnJztcbiAgdmFyIHF1ZXJ5ID0ge307XG4gIHZhciBmaWx0ZXJhYmxlID0gdGhpcy5vcHRzLmZpbHRlcmFibGUgJiYgX3R5cGVvZih0aGlzLm9wdHMuZmlsdGVyYWJsZSkgPT0gJ29iamVjdCcgPyB0aGlzLm9wdHMuZmlsdGVyYWJsZSA6IHRoaXMuY29sdW1ucztcbiAgZmlsdGVyYWJsZS5mb3JFYWNoKGZ1bmN0aW9uIChjb2x1bW4pIHtcbiAgICBxdWVyeVtjb2x1bW5dID0gZ2V0SW5pdGlhbFZhbHVlKGluaXQsIGNvbHVtbik7XG4gIH0uYmluZCh0aGlzKSk7XG4gIHJldHVybiBxdWVyeTtcbn07XG5cbmZ1bmN0aW9uIGdldEluaXRpYWxWYWx1ZShpbml0LCBjb2x1bW4pIHtcbiAgaWYgKCFpbml0Lmhhc093blByb3BlcnR5KGNvbHVtbikpIHJldHVybiAnJztcbiAgaWYgKHR5cGVvZiBpbml0W2NvbHVtbl0uc3RhcnQgPT0gJ3VuZGVmaW5lZCcpIHJldHVybiBpbml0W2NvbHVtbl07XG4gIHJldHVybiB7XG4gICAgc3RhcnQ6IGluaXRbY29sdW1uXS5zdGFydC5mb3JtYXQoJ1lZWVktTU0tREQgSEg6bW06c3MnKSxcbiAgICBlbmQ6IGluaXRbY29sdW1uXS5lbmQuZm9ybWF0KCdZWVlZLU1NLUREIEhIOm1tOnNzJylcbiAgfTtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBzdGF0ZSA9IHtcbiAgICBwYWdlOiAxLFxuICAgIHF1ZXJ5OiB0aGlzLnF1ZXJ5LFxuICAgIG9yZGVyQnk6IHRoaXMub3JkZXJCeSxcbiAgICBwZXJQYWdlOiB0aGlzLm9wdHMucGVyUGFnZSxcbiAgICBjdXN0b21RdWVyaWVzOiB0aGlzLmN1c3RvbVF1ZXJpZXNcbiAgfTtcbiAgdGhpcy5zdG9yYWdlLnNldEl0ZW0odGhpcy5zdGF0ZUtleSwgSlNPTi5zdHJpbmdpZnkoc3RhdGUpKTtcbiAgcmV0dXJuIHN0YXRlO1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoY29sdW1uKSB7XG4gIHJldHVybiAhdGhpcy5vcHRzLmRlc2NPcmRlckNvbHVtbnMuaW5jbHVkZXMoY29sdW1uKTtcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGNvbHVtbikge1xuICByZXR1cm4gdGhpcy5xdWVyeS5oYXNPd25Qcm9wZXJ0eShjb2x1bW4pICYmIHRoaXMub3B0cy5kYXRlQ29sdW1ucy5pbmRleE9mKGNvbHVtbikgPiAtMTtcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGNvbHVtbikge1xuICByZXR1cm4gdGhpcy5xdWVyeS5oYXNPd25Qcm9wZXJ0eShjb2x1bW4pICYmIHRoaXMub3B0cy5saXN0Q29sdW1ucy5oYXNPd25Qcm9wZXJ0eShjb2x1bW4pO1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoY29sdW1uKSB7XG4gIHJldHVybiB0aGlzLnF1ZXJ5Lmhhc093blByb3BlcnR5KGNvbHVtbikgJiYgdGhpcy5vcHRzLmRhdGVDb2x1bW5zLmluZGV4T2YoY29sdW1uKSA9PSAtMSAmJiAhdGhpcy5vcHRzLmxpc3RDb2x1bW5zLmhhc093blByb3BlcnR5KGNvbHVtbik7XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChwYWdlKSB7XG4gIGlmICh0aGlzLnZ1ZXgpIHJldHVybjtcbiAgdGhpcy5zZXRQYWdlKHBhZ2UpO1xuICB0aGlzLmRpc3BhdGNoKCdwYWdpbmF0aW9uJywgcGFnZSk7XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChjb2x1bW4pIHtcbiAgcmV0dXJuIHRoaXMudXNlckNvbHVtbnNEaXNwbGF5Lmxlbmd0aCA9PT0gMSAmJiB0aGlzLnVzZXJDb2x1bW5zRGlzcGxheVswXSA9PT0gY29sdW1uO1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoY29sTmFtZSwgZXYpIHtcbiAgaWYgKCF0aGlzLnNvcnRhYmxlKGNvbE5hbWUpKSByZXR1cm47XG5cbiAgaWYgKGV2ICYmIGV2LnNoaWZ0S2V5ICYmIHRoaXMub3JkZXJCeS5jb2x1bW4gJiYgdGhpcy5oYXNNdWx0aVNvcnQpIHtcbiAgICB0aGlzLnNldFVzZXJNdWx0aVNvcnQoY29sTmFtZSk7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy51c2VyTXVsdGlTb3J0aW5nID0ge307XG4gICAgdGhpcy5vcmRlckJ5LmFzY2VuZGluZyA9IGNvbE5hbWUgPT0gdGhpcy5vcmRlckJ5LmNvbHVtbiA/ICF0aGlzLm9yZGVyQnkuYXNjZW5kaW5nIDogdGhpcy5faW5pdGlhbE9yZGVyQXNjZW5kaW5nKGNvbE5hbWUpO1xuICAgIHRoaXMub3JkZXJCeS5jb2x1bW4gPSBjb2xOYW1lO1xuICAgIHRoaXMudXBkYXRlU3RhdGUoJ29yZGVyQnknLCB0aGlzLm9yZGVyQnkpO1xuICAgIHRoaXMuZGlzcGF0Y2goJ3NvcnRlZCcsIEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5vcmRlckJ5KSkpO1xuICB9XG5cbiAgaWYgKHRoaXMuc291cmNlID09ICdzZXJ2ZXInKSB7XG4gICAgdGhpcy5nZXREYXRhKCk7XG4gIH1cbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLnNlcnZlclNlYXJjaCgpO1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxudmFyIF9idXMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuLi9idXNcIikpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBcImRlZmF1bHRcIjogb2JqIH07IH1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgdmFyIGV2ZW50ID0gJ3Z1ZS10YWJsZXMnO1xuICBpZiAodGhpcy5uYW1lKSBldmVudCArPSAnLicgKyB0aGlzLm5hbWU7XG4gIHRoaXMub3B0cy5jdXN0b21GaWx0ZXJzLmZvckVhY2goZnVuY3Rpb24gKGZpbHRlcikge1xuICAgIF9idXNbXCJkZWZhdWx0XCJdLiRvZmYoXCJcIi5jb25jYXQoZXZlbnQsIFwiLmZpbHRlcjo6XCIpLmNvbmNhdChmaWx0ZXIubmFtZSkpO1xuXG4gICAgX2J1c1tcImRlZmF1bHRcIl0uJG9uKFwiXCIuY29uY2F0KGV2ZW50LCBcIi5maWx0ZXI6OlwiKS5jb25jYXQoZmlsdGVyLm5hbWUpLCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIF90aGlzLmN1c3RvbVF1ZXJpZXNbZmlsdGVyLm5hbWVdID0gdmFsdWU7XG5cbiAgICAgIF90aGlzLnVwZGF0ZVN0YXRlKCdjdXN0b21RdWVyaWVzJywgX3RoaXMuY3VzdG9tUXVlcmllcyk7XG4gICAgfSk7XG4gIH0pO1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxudmFyIF9idXMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuLi9idXNcIikpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBcImRlZmF1bHRcIjogb2JqIH07IH1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBldmVudCA9ICd2dWUtdGFibGVzJztcbiAgaWYgKHRoaXMubmFtZSkgZXZlbnQgKz0gJy4nICsgdGhpcy5uYW1lO1xuICB0aGlzLm9wdHMuY3VzdG9tRmlsdGVycy5mb3JFYWNoKGZ1bmN0aW9uIChmaWx0ZXIpIHtcbiAgICBfYnVzW1wiZGVmYXVsdFwiXS4kb2ZmKFwiXCIuY29uY2F0KGV2ZW50LCBcIi5maWx0ZXI6OlwiKS5jb25jYXQoZmlsdGVyKSk7XG5cbiAgICBfYnVzW1wiZGVmYXVsdFwiXS4kb24oXCJcIi5jb25jYXQoZXZlbnQsIFwiLmZpbHRlcjo6XCIpLmNvbmNhdChmaWx0ZXIpLCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIHRoaXMuY3VzdG9tUXVlcmllc1tmaWx0ZXJdID0gdmFsdWU7XG4gICAgICB0aGlzLnVwZGF0ZVN0YXRlKCdjdXN0b21RdWVyaWVzJywgdGhpcy5jdXN0b21RdWVyaWVzKTtcbiAgICAgIHRoaXMucmVmcmVzaCgpO1xuICAgIH0uYmluZCh0aGlzKSk7XG4gIH0uYmluZCh0aGlzKSk7XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChyb3csIGNvbHVtbiwgaW5kZXgsIGgpIHtcbiAgdmFyIHZhbHVlID0gdGhpcy5fZ2V0VmFsdWUocm93LCBjb2x1bW4pO1xuXG4gIGlmICh0aGlzLnRlbXBsYXRlc0tleXMuaW5kZXhPZihjb2x1bW4pID09IC0xKSB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3VuZGVmaW5lZCcgfHwgIXRoaXMub3B0cy5oaWdobGlnaHRNYXRjaGVzIHx8IHRoaXMuZmlsdGVyYWJsZUNvbHVtbnMuaW5kZXhPZihjb2x1bW4pID09PSAtMSkge1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmhpZ2hsaWdodE1hdGNoKHZhbHVlLCBjb2x1bW4sIGgpO1xuICB9XG5cbiAgdmFyIHRlbXBsYXRlID0gdGhpcy5vcHRzLnRlbXBsYXRlc1tjb2x1bW5dO1xuICB0ZW1wbGF0ZSA9IHR5cGVvZiB0ZW1wbGF0ZSA9PSAnZnVuY3Rpb24nID8gdGVtcGxhdGUuYXBwbHkodGhpcy4kcm9vdCwgW2gsIHJvdywgaW5kZXgsIGNvbHVtbl0pIDogaCh0ZW1wbGF0ZSwge1xuICAgIGF0dHJzOiB7XG4gICAgICBkYXRhOiByb3csXG4gICAgICBjb2x1bW46IGNvbHVtbixcbiAgICAgIGluZGV4OiBpbmRleFxuICAgIH1cbiAgfSk7XG4gIHJldHVybiB0ZW1wbGF0ZTtcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICBmb3IgKHZhciBrZXkgaW4gdGhpcy5xdWVyeSkge1xuICAgIHRoaXMucXVlcnlba2V5XSA9ICcnO1xuICB9XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChyb3csIGluZGV4LCBldmVudCkge1xuICB2YXIgZGF0YTtcbiAgdmFyIGlkID0gdGhpcy5vcHRzLnVuaXF1ZUtleTtcblxuICBpZiAodGhpcy5zb3VyY2UgPT0gJ2NsaWVudCcgJiYgdHlwZW9mIHJvd1tpZF0gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgZGF0YSA9IHRoaXMudGFibGVEYXRhLmZpbHRlcihmdW5jdGlvbiAocikge1xuICAgICAgcmV0dXJuIHJvd1tpZF0gPT09IHJbaWRdO1xuICAgIH0pWzBdO1xuICB9IGVsc2Uge1xuICAgIGRhdGEgPSByb3c7XG4gIH1cblxuICB0aGlzLmRpc3BhdGNoKCdyb3ctY2xpY2snLCB7XG4gICAgcm93OiBkYXRhLFxuICAgIGluZGV4OiBpbmRleCxcbiAgICBldmVudDogZXZlbnRcbiAgfSk7XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChkYXRhKSB7XG4gIGlmICh0eXBlb2YgdGhpcy5vcHRzLnJlcXVlc3RGdW5jdGlvbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiB0aGlzLm9wdHMucmVxdWVzdEZ1bmN0aW9uLmNhbGwodGhpcywgZGF0YSk7XG4gIH1cblxuICBpZiAodHlwZW9mIGF4aW9zICE9PSAndW5kZWZpbmVkJykgcmV0dXJuIGF4aW9zLmdldCh0aGlzLnVybCwge1xuICAgIHBhcmFtczogZGF0YVxuICB9KVtcImNhdGNoXCJdKGZ1bmN0aW9uIChlKSB7XG4gICAgdGhpcy5kaXNwYXRjaCgnZXJyb3InLCBlKTtcbiAgfS5iaW5kKHRoaXMpKTtcbiAgaWYgKHR5cGVvZiB0aGlzLiRodHRwICE9PSAndW5kZWZpbmVkJykgcmV0dXJuIHRoaXMuJGh0dHAuZ2V0KHRoaXMudXJsLCB7XG4gICAgcGFyYW1zOiBkYXRhXG4gIH0pLnRoZW4oZnVuY3Rpb24gKGRhdGEpIHtcbiAgICByZXR1cm4gZGF0YS5qc29uKCk7XG4gIH0uYmluZCh0aGlzKSwgZnVuY3Rpb24gKGUpIHtcbiAgICB0aGlzLmRpc3BhdGNoKCdlcnJvcicsIGUpO1xuICB9LmJpbmQodGhpcykpO1xuICBpZiAodHlwZW9mICQgIT0gJ3VuZGVmaW5lZCcpIHJldHVybiAkLmdldEpTT04odGhpcy51cmwsIGRhdGEpLmZhaWwoZnVuY3Rpb24gKGUpIHtcbiAgICB0aGlzLmRpc3BhdGNoKCdlcnJvcicsIGUpO1xuICB9LmJpbmQodGhpcykpO1xuICB0aHJvdyBcInZ1ZS10YWJsZXM6IE5vIHN1cHBvcnRlZCBhamF4IGxpYnJhcnkgd2FzIGZvdW5kLiAoalF1ZXJ5LCBheGlvcyBvciB2dWUtcmVzb3VyY2UpLiBUbyB1c2UgYSBkaWZmZXJlbnQgbGlicmFyeSB5b3UgY2FuIHdyaXRlIHlvdXIgb3duIHJlcXVlc3QgZnVuY3Rpb24gKHNlZSB0aGUgYHJlcXVlc3RGdW5jdGlvbmAgb3B0aW9uKVwiO1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZSwgZGF0ZUV2ZW50KSB7XG4gIC8vIHdlIG5lZWQgdG8gaGFuZGxlIHRoZSBzdG9yZSB0aGlzLnF1ZXJ5IHRvIG1ha2Ugc3VyZSB3ZSdyZSBub3QgbXV0YXRpbmcgb3V0c2lkZSBvZiBpdFxuICB2YXIgcXVlcnkgPSB0aGlzLnZ1ZXggPyBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMucXVlcnkpKSA6IHRoaXMucXVlcnk7IC8vIGluIGNhc2Ugd2UgcGFzcyBhbiBvYmplY3QgbWFudWFsbHkgKG1vc3RseSB1c2VkIGZvciBpbml0LWRhdGUtZmlsdGVycyBzaG91bGQgcmVmYWN0b3JcblxuICBpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsIC0xKSA9PSAnT2JqZWN0Jykge1xuICAgIHF1ZXJ5ID0gdGhpcy52dWV4ID8gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShlKSkgOiBlO1xuICAgIGlmICghdGhpcy52dWV4KSB0aGlzLnF1ZXJ5ID0gcXVlcnk7XG4gICAgdmFyIG5hbWUgPSBkYXRlRXZlbnQudGFyZ2V0Lm5hbWU7XG4gICAgdmFyIHZhbHVlID0gZGF0ZUV2ZW50LnRhcmdldC52YWx1ZTtcblxuICAgIGlmIChuYW1lKSB7XG4gICAgICB0aGlzLmRpc3BhdGNoKCdmaWx0ZXInLCB7XG4gICAgICAgIG5hbWU6IG5hbWUsXG4gICAgICAgIHZhbHVlOiB2YWx1ZVxuICAgICAgfSk7XG4gICAgICB0aGlzLmRpc3BhdGNoKFwiZmlsdGVyOjpcIi5jb25jYXQobmFtZSksIHZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kaXNwYXRjaCgnZmlsdGVyJywgdmFsdWUpO1xuICAgIH1cblxuICAgIHRoaXMudXBkYXRlU3RhdGUoJ3F1ZXJ5JywgcXVlcnkpO1xuICB9IGVsc2UgaWYgKGUpIHtcbiAgICB2YXIgX25hbWUgPSB0aGlzLmdldE5hbWUoZS50YXJnZXQubmFtZSk7XG5cbiAgICB2YXIgX3ZhbHVlID0gZS50YXJnZXQudmFsdWU7XG5cbiAgICBpZiAoX25hbWUpIHtcbiAgICAgIHF1ZXJ5W19uYW1lXSA9IF92YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcXVlcnkgPSBfdmFsdWU7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLnZ1ZXgpIHRoaXMucXVlcnkgPSBxdWVyeTtcblxuICAgIGlmIChfbmFtZSkge1xuICAgICAgdGhpcy5kaXNwYXRjaCgnZmlsdGVyJywge1xuICAgICAgICBuYW1lOiBfbmFtZSxcbiAgICAgICAgdmFsdWU6IF92YWx1ZVxuICAgICAgfSk7XG4gICAgICB0aGlzLmRpc3BhdGNoKFwiZmlsdGVyOjpcIi5jb25jYXQoX25hbWUpLCBfdmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRpc3BhdGNoKCdmaWx0ZXInLCBfdmFsdWUpO1xuICAgIH1cblxuICAgIHRoaXMudXBkYXRlU3RhdGUoJ3F1ZXJ5JywgcXVlcnkpO1xuICB9XG5cbiAgcmV0dXJuIHNlYXJjaCh0aGlzLCBxdWVyeSk7XG59O1xuXG5mdW5jdGlvbiBzZWFyY2godGhhdCwgcXVlcnkpIHtcbiAgaWYgKHRoYXQudnVleCkge1xuICAgIHRoYXQuY29tbWl0KCdTRVRfRklMVEVSJywgcXVlcnkpO1xuICB9IGVsc2Uge1xuICAgIHRoYXQuaW5pdFBhZ2luYXRpb24oKTtcblxuICAgIGlmICh0aGF0Lm9wdHMucGFnaW5hdGlvbi5kcm9wZG93bikge1xuICAgICAgdGhhdC5nZXREYXRhKCk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIG5vRGVib3VuY2UoZSwgbmFtZSwgb3B0cykge1xuICByZXR1cm4gIWUgfHwgbmFtZSAmJiAob3B0cy5kYXRlQ29sdW1ucy5pbmRleE9mKG5hbWUpID4gLTEgfHwgT2JqZWN0LmtleXMob3B0cy5saXN0Q29sdW1ucykuaW5kZXhPZihuYW1lKSA+IC0xKTtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgaWYgKHRoaXMub3B0cy5jb2x1bW5zRHJvcGRvd24pIHtcbiAgICB2YXIgc3RvcFByb3AgPSBmdW5jdGlvbiBzdG9wUHJvcChlKSB7XG4gICAgICByZXR1cm4gZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9O1xuXG4gICAgdmFyIGhhbmRsZXIgPSBmdW5jdGlvbiBoYW5kbGVyKCkge1xuICAgICAgaWYgKF90aGlzLmRpc3BsYXlDb2x1bW5zRHJvcGRvd24pIHtcbiAgICAgICAgX3RoaXMuZGlzcGxheUNvbHVtbnNEcm9wZG93biA9IGZhbHNlO1xuICAgICAgfVxuICAgIH07XG5cbiAgICB0aGlzLiRyZWZzLmNvbHVtbnNkcm9wZG93bi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHN0b3BQcm9wKTtcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGhhbmRsZXIpO1xuICAgIHRoaXMuJG9uY2UoJ2hvb2s6YmVmb3JlRGVzdHJveScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgaGFuZGxlcik7XG5cbiAgICAgIF90aGlzLiRyZWZzLmNvbHVtbnNkcm9wZG93bi5yZW1vdmVFdmVudExpc3RlbmVyKCdjbGljaycsIHN0b3BQcm9wKTtcbiAgICB9KTtcbiAgfVxufTsiLCJcInVzZSBzdHJpY3RcIjtcblxuZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAocmVzcG9uc2UpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLm9wdHMucmVzcG9uc2VBZGFwdGVyLmNhbGwodGhpcywgcmVzcG9uc2UpO1xuICB0aGlzLmRhdGEgPSB0aGlzLmFwcGx5RmlsdGVycyhkYXRhLmRhdGEpO1xuXG4gIGlmIChpc05hTihkYXRhLmNvdW50KSkge1xuICAgIGNvbnNvbGUuZXJyb3IoXCJ2dWUtdGFibGVzLTI6IGludmFsaWQgJ2NvdW50JyBwcm9wZXJ0eS4gRXhwZWN0ZWQgbnVtYmVyLCBnb3QgXCIuY29uY2F0KF90eXBlb2YoZGF0YS5jb3VudCkpKTtcbiAgICBjb25zb2xlLmVycm9yKCdjb3VudCBlcXVhbHMnLCBkYXRhLmNvdW50KTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoKTtcbiAgfVxuXG4gIHRoaXMuY291bnQgPSBwYXJzZUludChkYXRhLmNvdW50KTtcbiAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5kaXNwYXRjaCgnbG9hZGVkJywgcmVzcG9uc2UpO1xuICB9LmJpbmQodGhpcyksIDApO1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoY29sdW1uLCBzdGFydCwgZW5kKSB7XG4gIHZhciBkYXRlRm9ybWF0ID0gdGhpcy5kYXRlRm9ybWF0KGNvbHVtbik7XG4gIHZhciBlbCA9IHR5cGVvZiBjb2x1bW4gPT09ICdzdHJpbmcnID8gJCh0aGlzLiRlbCkuZmluZChcIiNWdWVUYWJsZXNfX1wiICsgJC5lc2NhcGVTZWxlY3Rvcihjb2x1bW4pICsgXCItZmlsdGVyXCIpIDogY29sdW1uO1xuICBlbC50ZXh0KHN0YXJ0LmZvcm1hdChkYXRlRm9ybWF0KSArIFwiIC0gXCIgKyBlbmQuZm9ybWF0KGRhdGVGb3JtYXQpKTtcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBtZXJnZSA9IHJlcXVpcmUoJ21lcmdlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGZpbHRlcikge1xuICBpZiAoIXRoaXMub3B0cy5maWx0ZXJhYmxlKSB7XG4gICAgY29uc29sZS53YXJuKFwidnVlLXRhYmxlcy0yOiBVbmFibGUgdG8gc2V0IGZpbHRlci4gRmlsdGVyaW5nIGlzIGRpc2FibGVkIChmaWx0ZXJhYmxlOiBmYWxzZSlcIik7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgO1xuXG4gIGlmICh0aGlzLm9wdHMuZmlsdGVyQnlDb2x1bW4gJiYgdHlwZW9mIGZpbHRlciA9PT0gJ3N0cmluZycpIHtcbiAgICBjb25zb2xlLndhcm4oXCJ2dWUtdGFibGVzLTI6IFVuYWJsZSB0byBzZXQgZmlsdGVyLiBGaWx0ZXIgdmFsdWUgbXVzdCBiZSBhbiBvYmplY3QgKGBmaWx0ZXJCeUNvbHVtbmAgaXMgc2V0IHRvIGB0cnVlYClcIik7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgO1xuXG4gIGlmICghdGhpcy5vcHRzLmZpbHRlckJ5Q29sdW1uICYmIHR5cGVvZiBmaWx0ZXIgIT09ICdzdHJpbmcnKSB7XG4gICAgY29uc29sZS53YXJuKFwidnVlLXRhYmxlcy0yOiBVbmFibGUgdG8gc2V0IGZpbHRlci4gRmlsdGVyIHZhbHVlIG11c3QgYmUgYSBzdHJpbmcgKGBmaWx0ZXJCeUNvbHVtbmAgaXMgc2V0IHRvIGBmYWxzZWApXCIpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIDtcbiAgdmFyIG1lcmdlZEZpbHRlciA9IHRoaXMub3B0cy5maWx0ZXJCeUNvbHVtbiA/IG1lcmdlKHRoaXMucXVlcnksIGZpbHRlcikgOiBmaWx0ZXI7XG5cbiAgaWYgKHRoaXMudnVleCkge1xuICAgIHRoaXMuY29tbWl0KCdTRVRfRklMVEVSJywgbWVyZ2VkRmlsdGVyKTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLnF1ZXJ5ID0gbWVyZ2VkRmlsdGVyO1xuICAgIHRoaXMuc2V0UGFnZSgxLCB0cnVlKTtcbiAgfVxuXG4gIHRoaXMudXBkYXRlU3RhdGUoJ3F1ZXJ5JywgbWVyZ2VkRmlsdGVyKTtcblxuICB0aGlzLl9zZXRGaWx0ZXJzRE9NKGZpbHRlcik7XG5cbiAgaWYgKHRoaXMuc291cmNlID09ICdzZXJ2ZXInKSB7XG4gICAgdGhpcy5nZXREYXRhKCk7XG4gIH1cbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHF1ZXJ5KSB7XG4gIHZhciBlbDtcblxuICBpZiAodGhpcy5vcHRzLmZpbHRlckJ5Q29sdW1uKSB7XG4gICAgZm9yICh2YXIgY29sdW1uIGluIHF1ZXJ5KSB7XG4gICAgICB2YXIgY29sdW1uTmFtZSA9IHRoaXMuX2dldENvbHVtbk5hbWUoY29sdW1uKTtcblxuICAgICAgaWYgKHRoaXMuaXNEYXRlRmlsdGVyKGNvbHVtbikpIHtcbiAgICAgICAgaWYgKHF1ZXJ5W2NvbHVtbl0gJiYgX3R5cGVvZihxdWVyeVtjb2x1bW5dKSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICB2YXIgc3RhcnQgPSB0eXBlb2YgcXVlcnlbY29sdW1uXS5zdGFydCA9PT0gJ3N0cmluZycgPyBtb21lbnQocXVlcnlbY29sdW1uXS5zdGFydCwgJ1lZWVktTU0tREQnKSA6IHF1ZXJ5W2NvbHVtbl0uc3RhcnQ7XG4gICAgICAgICAgdmFyIGVuZCA9IHR5cGVvZiBxdWVyeVtjb2x1bW5dLmVuZCA9PT0gJ3N0cmluZycgPyBtb21lbnQocXVlcnlbY29sdW1uXS5lbmQsICdZWVlZLU1NLUREJykgOiBxdWVyeVtjb2x1bW5dLmVuZDtcblxuICAgICAgICAgIHRoaXMuX3NldERhdGVwaWNrZXJUZXh0KGNvbHVtbiwgc3RhcnQsIGVuZCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgJCh0aGlzLiRlbCkuZmluZChcIiNWdWVUYWJsZXNfX1wiICsgJC5lc2NhcGVTZWxlY3Rvcihjb2x1bW4pICsgXCItZmlsdGVyXCIpLmh0bWwoXCI8c3BhbiBjbGFzcz0nVnVlVGFibGVzX19maWx0ZXItcGxhY2Vob2xkZXInPlwiICsgdGhpcy5kaXNwbGF5KCdmaWx0ZXJCeScsIHtcbiAgICAgICAgICAgIGNvbHVtbjogdGhpcy5nZXRIZWFkaW5nKGNvbHVtbilcbiAgICAgICAgICB9KSArIFwiPC9zcGFuPlwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBlbCA9IHRoaXMuJGVsLnF1ZXJ5U2VsZWN0b3IoXCJbbmFtZT0nXCIuY29uY2F0KGNvbHVtbk5hbWUsIFwiJ11cIikpO1xuXG4gICAgICBpZiAoZWwpIHtcbiAgICAgICAgZWwudmFsdWUgPSBxdWVyeVtjb2x1bW5dO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLmNvbHVtbnMuaW5kZXhPZihjb2x1bW4pID09PSAtMSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKFwidnVlLXRhYmxlcy0yOiBFcnJvciBpbiBzZXR0aW5nIGZpbHRlciB2YWx1ZS4gQ29sdW1uICdcIi5jb25jYXQoY29sdW1uLCBcIicgZG9lcyBub3QgZXhpc3QuXCIpKTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdmFyIGVsID0gdGhpcy4kZWwucXVlcnlTZWxlY3RvcignLlZ1ZVRhYmxlc19fc2VhcmNoX19pbnB1dCcpO1xuICAgIGlmIChlbCkgZWwudmFsdWUgPSBxdWVyeTtcbiAgfVxufTsiLCJcInVzZSBzdHJpY3RcIjtcblxuZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZSkge1xuICB0aGlzLmxpbWl0ID0gX3R5cGVvZihlKSA9PT0gJ29iamVjdCcgPyBlLnRhcmdldC52YWx1ZSA6IGU7XG4gIHRoaXMudXBkYXRlU3RhdGUoJ3BlclBhZ2UnLCB0aGlzLmxpbWl0KTtcbiAgdGhpcy5kaXNwYXRjaCgnbGltaXQnLCBwYXJzZUludCh0aGlzLmxpbWl0KSk7XG4gIHRoaXMuc2V0UGFnZSgxKTtcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGNvbHVtbiwgYXNjZW5kaW5nKSB7XG4gIHRoaXMub3JkZXJCeS5jb2x1bW4gPSBjb2x1bW47XG4gIHRoaXMub3JkZXJCeS5hc2NlbmRpbmcgPSBhc2NlbmRpbmc7XG4gIHRoaXMudXBkYXRlU3RhdGUoJ29yZGVyQnknLCB7XG4gICAgY29sdW1uOiBjb2x1bW4sXG4gICAgYXNjZW5kaW5nOiBhc2NlbmRpbmdcbiAgfSk7XG5cbiAgaWYgKHRoaXMuc291cmNlID09ICdzZXJ2ZXInKSB7XG4gICAgdGhpcy5nZXREYXRhKCk7XG4gIH1cbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHBhZ2UsIHByZXZlbnRSZXF1ZXN0KSB7XG4gIHBhZ2UgPSBwYWdlID8gcGFnZSA6IHRoaXMuJHJlZnMucGFnZS52YWx1ZTtcbiAgaWYgKCF0aGlzLm9wdHMucGFnaW5hdGlvbi5kcm9wZG93bikgdGhpcy4kcmVmcy5wYWdpbmF0aW9uLlBhZ2UgPSBwYWdlO1xuICB0aGlzLnBhZ2UgPSBwYWdlO1xuICB0aGlzLnVwZGF0ZVN0YXRlKCdwYWdlJywgcGFnZSk7XG4gIGlmICh0aGlzLnNvdXJjZSA9PSAnc2VydmVyJyAmJiAhcHJldmVudFJlcXVlc3QpIHRoaXMuZ2V0RGF0YSgpO1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoc2Vjb25kYXJ5Q29sKSB7XG4gIHZhciBwcmltYXJ5Q29sID0gdGhpcy5vcmRlckJ5LmNvbHVtbjtcbiAgdmFyIHByaW1hcnlBc2MgPSB0aGlzLm9yZGVyQnkuYXNjZW5kaW5nO1xuICBpZiAoIXRoaXMudXNlck11bHRpU29ydGluZ1twcmltYXJ5Q29sXSkgdGhpcy51c2VyTXVsdGlTb3J0aW5nW3ByaW1hcnlDb2xdID0gW107XG4gIHZhciBtdWx0aSA9IHRoaXMudXNlck11bHRpU29ydGluZ1twcmltYXJ5Q29sXTtcblxuICBpZiAocHJpbWFyeUNvbCA9PT0gc2Vjb25kYXJ5Q29sKSB7XG4gICAgaWYgKCFtdWx0aS5sZW5ndGggfHwgcHJpbWFyeUFzYykge1xuICAgICAgLy8gcHJpbWFyeSBpcyB0aGUgb25seSBzb3J0ZWQgY29sdW1uIG9yIGlzIGFzY2VuZGluZ1xuICAgICAgdGhpcy5vcmRlckJ5LmFzY2VuZGluZyA9ICF0aGlzLm9yZGVyQnkuYXNjZW5kaW5nO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyByZW1vdmUgcHJpbWFyeSBjb2x1bW4gYW5kIG1ha2Ugc2Vjb25kYXJ5IHByaW1hcnlcbiAgICAgIHRoaXMub3JkZXJCeSA9IG11bHRpLnNoaWZ0KCk7XG4gICAgICB0aGlzLnVzZXJNdWx0aVNvcnRpbmcgPSB7fTtcbiAgICAgIHRoaXMudXNlck11bHRpU29ydGluZ1t0aGlzLm9yZGVyQnkuY29sdW1uXSA9IG11bHRpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB2YXIgc2Vjb25kYXJ5ID0gbXVsdGkuZmlsdGVyKGZ1bmN0aW9uIChjb2wpIHtcbiAgICAgIHJldHVybiBjb2wuY29sdW1uID09IHNlY29uZGFyeUNvbDtcbiAgICB9KVswXTtcblxuICAgIGlmIChzZWNvbmRhcnkpIHtcbiAgICAgIGlmICghc2Vjb25kYXJ5LmFzY2VuZGluZykge1xuICAgICAgICAvLyByZW1vdmUgc29ydFxuICAgICAgICB0aGlzLnVzZXJNdWx0aVNvcnRpbmdbcHJpbWFyeUNvbF0gPSBtdWx0aS5maWx0ZXIoZnVuY3Rpb24gKGNvbCkge1xuICAgICAgICAgIHJldHVybiBjb2wuY29sdW1uICE9IHNlY29uZGFyeUNvbDtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICghdGhpcy51c2VyTXVsdGlTb3J0aW5nW3ByaW1hcnlDb2xdLmxlbmd0aCkgdGhpcy51c2VyTXVsdGlTb3J0aW5nID0ge307XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBjaGFuZ2UgZGlyZWN0aW9uXG4gICAgICAgIHNlY29uZGFyeS5hc2NlbmRpbmcgPSAhc2Vjb25kYXJ5LmFzY2VuZGluZztcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gYWRkIHNvcnRcbiAgICAgIG11bHRpLnB1c2goe1xuICAgICAgICBjb2x1bW46IHNlY29uZGFyeUNvbCxcbiAgICAgICAgYXNjZW5kaW5nOiB0cnVlXG4gICAgICB9KTtcbiAgICB9XG4gIH0gLy8gZm9yY2UgcmUtY29tcGlsYXRpb24gb2YgdGhlIGZpbHRlcmVkRGF0YSBjb21wdXRlZCBwcm9wZXJ0eVxuXG5cbiAgdGhpcy50aW1lID0gRGF0ZS5ub3coKTtcbiAgdGhpcy5kaXNwYXRjaCgnc29ydGVkJywgZ2V0TXVsdGlTb3J0RGF0YSh0aGlzLm9yZGVyQnksIHRoaXMudXNlck11bHRpU29ydGluZykpO1xufTtcblxuZnVuY3Rpb24gZ2V0TXVsdGlTb3J0RGF0YShtYWluLCBzZWNvbmRhcnkpIHtcbiAgdmFyIGNvbHMgPSBbSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShtYWluKSldO1xuICBjb2xzID0gY29scy5jb25jYXQoc2Vjb25kYXJ5W21haW4uY29sdW1uXSk7XG4gIHJldHVybiBjb2xzO1xufVxuXG47IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGNvbHVtbikge1xuICBpZiAodGhpcy5vcHRzLnZpc2libGVDb2x1bW5zKSB7XG4gICAgcmV0dXJuIHRoaXMub3B0cy52aXNpYmxlQ29sdW1ucy5pbmNsdWRlcyhjb2x1bW4pO1xuICB9XG5cbiAgaWYgKHRoaXMub3B0cy5oaWRkZW5Db2x1bW5zKSB7XG4gICAgcmV0dXJuICF0aGlzLm9wdHMuaGlkZGVuQ29sdW1ucy5pbmNsdWRlcyhjb2x1bW4pO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChjb2x1bW4pIHtcbiAgdmFyIGNscyA9IHRoaXMub3B0cy5zb3J0SWNvbi5iYXNlICsgJyAnO1xuICBpZiAoIXRoaXMuc29ydGFibGUoY29sdW1uKSkgcmV0dXJuO1xuXG4gIGlmICh0aGlzLm9wdHMuc29ydEljb24uaXMgJiYgIXRoaXMuX2N1cnJlbnRseVNvcnRlZChjb2x1bW4pKSB7XG4gICAgY2xzICs9IHRoaXMub3B0cy5zb3J0SWNvbi5pcyArICcgJztcbiAgfVxuXG4gIGlmICh0aGlzLmhhc011bHRpU29ydCAmJiB0aGlzLm9yZGVyQnkuY29sdW1uICYmIHRoaXMudXNlck11bHRpU29ydGluZ1t0aGlzLm9yZGVyQnkuY29sdW1uXSkge1xuICAgIHZhciBjb2wgPSB0aGlzLnVzZXJNdWx0aVNvcnRpbmdbdGhpcy5vcmRlckJ5LmNvbHVtbl0uZmlsdGVyKGZ1bmN0aW9uIChjKSB7XG4gICAgICByZXR1cm4gYy5jb2x1bW4gPT09IGNvbHVtbjtcbiAgICB9KVswXTtcbiAgICBpZiAoY29sKSBjbHMgKz0gY29sLmFzY2VuZGluZyA/IHRoaXMub3B0cy5zb3J0SWNvbi51cCA6IHRoaXMub3B0cy5zb3J0SWNvbi5kb3duO1xuICB9XG5cbiAgaWYgKGNvbHVtbiA9PSB0aGlzLm9yZGVyQnkuY29sdW1uKSB7XG4gICAgY2xzICs9IHRoaXMub3JkZXJCeS5hc2NlbmRpbmcgPT0gMSA/IHRoaXMub3B0cy5zb3J0SWNvbi51cCA6IHRoaXMub3B0cy5zb3J0SWNvbi5kb3duO1xuICB9XG5cbiAgcmV0dXJuIGNscztcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGNvbHVtbikge1xuICB2YXIgYyA9IHRoaXMuc29ydGFibGUoY29sdW1uKSA/ICdWdWVUYWJsZXNfX3NvcnRhYmxlICcgOiAnJztcbiAgYyArPSB0aGlzLmNvbHVtbkNsYXNzKGNvbHVtbik7XG4gIHJldHVybiBjO1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoY29sdW1uKSB7XG4gIHZhciBzb3J0QWxsID0gdHlwZW9mIHRoaXMub3B0cy5zb3J0YWJsZSA9PSAnYm9vbGVhbicgJiYgdGhpcy5vcHRzLnNvcnRhYmxlO1xuICBpZiAoc29ydEFsbCkgcmV0dXJuIHRydWU7XG4gIHJldHVybiB0aGlzLm9wdHMuc29ydGFibGUuaW5kZXhPZihjb2x1bW4pID4gLTE7XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChyb3dJZCwgZSkge1xuICBpZiAoZSkgZS5zdG9wUHJvcGFnYXRpb24oKTtcblxuICBpZiAodGhpcy5vcGVuQ2hpbGRSb3dzLmluY2x1ZGVzKHJvd0lkKSkge1xuICAgIHZhciBpbmRleCA9IHRoaXMub3BlbkNoaWxkUm93cy5pbmRleE9mKHJvd0lkKTtcbiAgICB0aGlzLm9wZW5DaGlsZFJvd3Muc3BsaWNlKGluZGV4LCAxKTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLm9wZW5DaGlsZFJvd3MucHVzaChyb3dJZCk7XG4gIH1cbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGNvbHVtbikge1xuICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gIGlmICghdGhpcy51c2VyQ29udHJvbHNDb2x1bW5zKSB7XG4gICAgdGhpcy51c2VyQ29sdW1uc0Rpc3BsYXkgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuYWxsQ29sdW1ucykpO1xuICAgIHRoaXMudXNlckNvbnRyb2xzQ29sdW1ucyA9IHRydWU7XG4gIH1cblxuICBpZiAodGhpcy51c2VyQ29sdW1uc0Rpc3BsYXkuaW5jbHVkZXMoY29sdW1uKSkge1xuICAgIC8vIGNhbid0IGhhdmUgbm8gY29sdW1uc1xuICAgIGlmICh0aGlzLnVzZXJDb2x1bW5zRGlzcGxheS5sZW5ndGggPT09IDEpIHJldHVybjtcbiAgICB2YXIgaW5kZXggPSB0aGlzLnVzZXJDb2x1bW5zRGlzcGxheS5pbmRleE9mKGNvbHVtbik7XG4gICAgdGhpcy51c2VyQ29sdW1uc0Rpc3BsYXkuc3BsaWNlKGluZGV4LCAxKTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLnVzZXJDb2x1bW5zRGlzcGxheS5wdXNoKGNvbHVtbik7XG4gIH1cblxuICB0aGlzLnVwZGF0ZVN0YXRlKCd1c2VyQ29udHJvbHNDb2x1bW5zJywgdHJ1ZSk7XG4gIHRoaXMudXBkYXRlU3RhdGUoJ3VzZXJDb2x1bW5zRGlzcGxheScsIHRoaXMudXNlckNvbHVtbnNEaXNwbGF5KTtcbiAgdGhpcy4kbmV4dFRpY2soZnVuY3Rpb24gKCkge1xuICAgIF90aGlzLl9zZXRGaWx0ZXJzRE9NKF90aGlzLnF1ZXJ5KTtcbiAgfSk7XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5kaXNwbGF5Q29sdW1uc0Ryb3Bkb3duID0gIXRoaXMuZGlzcGxheUNvbHVtbnNEcm9wZG93bjtcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICBpZiAodGhpcy5vcmRlckJ5LmNvbHVtbiAhPSB0aGlzLm9wdHMuZ3JvdXBCeSkge1xuICAgIHRoaXMuc2V0T3JkZXIodGhpcy5vcHRzLmdyb3VwQnksIHRydWUpO1xuICB9IGVsc2Uge1xuICAgIHRoaXMuc2V0T3JkZXIodGhpcy5vcHRzLmdyb3VwQnksICF0aGlzLm9yZGVyQnkuYXNjZW5kaW5nKTtcbiAgfVxufTsiLCJcInVzZSBzdHJpY3RcIjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMuZGF0YS5mb3JFYWNoKGZ1bmN0aW9uIChyb3csIGluZGV4KSB7XG4gICAgdGhpcy5vcHRzLmRhdGVDb2x1bW5zLmZvckVhY2goZnVuY3Rpb24gKGNvbHVtbikge1xuICAgICAgcm93W2NvbHVtbl0gPSByb3dbY29sdW1uXSA/IG1vbWVudChyb3dbY29sdW1uXSwgdGhpcy5vcHRzLnRvTW9tZW50Rm9ybWF0KSA6ICcnO1xuICAgIH0uYmluZCh0aGlzKSk7XG4gIH0uYmluZCh0aGlzKSk7XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gIGlmICghdGhpcy5vcHRzLnNhdmVTdGF0ZSB8fCAhdGhpcy5hY3RpdmVTdGF0ZSkgcmV0dXJuO1xuXG4gIHRyeSB7XG4gICAgdmFyIGN1cnJlbnRTdGF0ZSA9IEpTT04ucGFyc2UodGhpcy5zdG9yYWdlLmdldEl0ZW0odGhpcy5zdGF0ZUtleSkpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgdmFyIGN1cnJlbnRTdGF0ZSA9IHRoaXMuaW5pdFN0YXRlKCk7XG4gIH1cblxuICBjdXJyZW50U3RhdGVba2V5XSA9IHZhbHVlO1xuICB0aGlzLnN0b3JhZ2Uuc2V0SXRlbSh0aGlzLnN0YXRlS2V5LCBKU09OLnN0cmluZ2lmeShjdXJyZW50U3RhdGUpKTtcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBfYnVzID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi4vYnVzXCIpKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgXCJkZWZhdWx0XCI6IG9iaiB9OyB9XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gIHZhciBlbDtcblxuICBpZiAodGhpcy5vcHRzLmRlc3Ryb3lFdmVudEJ1cykge1xuICAgIF9idXNbXCJkZWZhdWx0XCJdLiRvZmYoKTtcblxuICAgIF9idXNbXCJkZWZhdWx0XCJdLiRkZXN0cm95KCk7XG4gIH1cblxuICBpZiAodGhpcy52dWV4ICYmICF0aGlzLm9wdHMucHJlc2VydmVTdGF0ZSkge1xuICAgIHRoaXMuJHN0b3JlLnVucmVnaXN0ZXJNb2R1bGUodGhpcy5uYW1lKTtcbiAgfVxuXG4gIGlmICh0aGlzLm9wdHMuZmlsdGVyQnlDb2x1bW4pIHtcbiAgICB0aGlzLmRhdGVwaWNrZXJDb2x1bW5zLmZvckVhY2goZnVuY3Rpb24gKGNvbHVtbikge1xuICAgICAgZWwgPSAkKF90aGlzLiRlbCkuZmluZChcIiNWdWVUYWJsZXNfX1wiICsgJC5lc2NhcGVTZWxlY3Rvcihjb2x1bW4pICsgXCItZmlsdGVyXCIpLmRhdGEoJ2RhdGVyYW5nZXBpY2tlcicpO1xuICAgICAgaWYgKGVsKSBlbC5yZW1vdmUoKTtcbiAgICB9KTtcbiAgfVxufTsiLCJcInVzZSBzdHJpY3RcIjtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGxpc3RDb2x1bW5zT2JqZWN0OiByZXF1aXJlKCcuLi9jb21wdXRlZC9saXN0LWNvbHVtbnMtb2JqZWN0JyksXG4gIGFsbENvbHVtbnM6IHJlcXVpcmUoJy4uL2NvbXB1dGVkL2FsbC1jb2x1bW5zJyksXG4gIHRlbXBsYXRlc0tleXM6IHJlcXVpcmUoJy4uL2NvbXB1dGVkL3RlbXBsYXRlcy1rZXlzJyksXG4gIG9wdHM6IHJlcXVpcmUoJy4uL2NvbXB1dGVkL29wdHMnKSxcbiAgdGFibGVEYXRhOiByZXF1aXJlKCcuLi9jb21wdXRlZC90YWJsZS1kYXRhJyksXG4gIHN0b3JhZ2U6IHJlcXVpcmUoJy4uL2NvbXB1dGVkL3N0b3JhZ2UnKSxcbiAgZmlsdGVyYWJsZUNvbHVtbnM6IHJlcXVpcmUoJy4uL2NvbXB1dGVkL2ZpbHRlcmFibGUtY29sdW1ucycpLFxuICBkYXRlcGlja2VyQ29sdW1uczogcmVxdWlyZSgnLi4vY29tcHV0ZWQvZGF0ZXBpY2tlci1jb2x1bW5zJyksXG4gIGhhc0NoaWxkUm93OiByZXF1aXJlKCcuLi9jb21wdXRlZC9oYXMtY2hpbGQtcm93JyksXG4gIGNvbHNwYW46IHJlcXVpcmUoJy4uL2NvbXB1dGVkL2NvbHNwYW4nKSxcbiAgaGFzR2VuZXJpY0ZpbHRlcjogcmVxdWlyZSgnLi4vY29tcHV0ZWQvaGFzLWdlbmVyaWMtZmlsdGVyJyksXG4gIHN0YXRlS2V5OiBmdW5jdGlvbiBzdGF0ZUtleSgpIHtcbiAgICB2YXIga2V5ID0gdGhpcy5uYW1lID8gdGhpcy5uYW1lIDogdGhpcy5pZDtcbiAgICByZXR1cm4gJ3Z1ZXRhYmxlc18nICsga2V5O1xuICB9LFxuICBQYWdlOiBmdW5jdGlvbiBQYWdlKCkge1xuICAgIHJldHVybiB0aGlzLnBhZ2U7XG4gIH1cbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBpc19lbXB0eSA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvaXMtZW1wdHknKTtcblxudmFyIHJlZ2lzdGVyVnVleE1vZHVsZSA9IHJlcXVpcmUoJy4uL3N0YXRlL3JlZ2lzdGVyLW1vZHVsZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChzZWxmKSB7XG4gIGlmIChzZWxmLnZ1ZXgpIHtcbiAgICByZWdpc3RlclZ1ZXhNb2R1bGUoc2VsZik7XG4gIH0gZWxzZSB7XG4gICAgc2VsZi5saW1pdCA9IHNlbGYub3B0cy5wZXJQYWdlO1xuICB9XG5cbiAgaWYgKGlzX2VtcHR5KHNlbGYub3B0cy5jb2x1bW5zRGlzcGxheSkgfHwgdHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcpIHJldHVybjtcbiAgc2VsZi5jb2x1bW5zRGlzcGxheSA9IGdldENvbHVtbnNEaXNwbGF5KHNlbGYub3B0cy5jb2x1bW5zRGlzcGxheSk7XG4gIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCBmdW5jdGlvbiAoKSB7XG4gICAgc2VsZi53aW5kb3dXaWR0aCA9IHdpbmRvdy5pbm5lcldpZHRoO1xuICB9LmJpbmQoc2VsZikpO1xufTtcblxuZnVuY3Rpb24gZ2V0Q29sdW1uc0Rpc3BsYXkoY29sdW1uc0Rpc3BsYXkpIHtcbiAgdmFyIHJlcyA9IHt9O1xuICB2YXIgcmFuZ2U7XG4gIHZhciBkZXZpY2U7XG4gIHZhciBvcGVyYXRvcjtcblxuICBmb3IgKHZhciBjb2x1bW4gaW4gY29sdW1uc0Rpc3BsYXkpIHtcbiAgICBvcGVyYXRvciA9IGdldE9wZXJhdG9yKGNvbHVtbnNEaXNwbGF5W2NvbHVtbl0pO1xuXG4gICAgdHJ5IHtcbiAgICAgIGRldmljZSA9IGdldERldmljZShjb2x1bW5zRGlzcGxheVtjb2x1bW5dKTtcbiAgICAgIHJhbmdlID0gZ2V0UmFuZ2UoZGV2aWNlLCBvcGVyYXRvcik7XG4gICAgICByZXNbY29sdW1uXSA9IHJhbmdlLmNvbmNhdChbb3BlcmF0b3JdKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNvbnNvbGUud2FybignVW5rbm93biBkZXZpY2UgJyArIGRldmljZSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlcztcbn1cblxuZnVuY3Rpb24gZ2V0UmFuZ2UoZGV2aWNlLCBvcGVyYXRvcikge1xuICB2YXIgZGV2aWNlcyA9IHtcbiAgICBkZXNrdG9wOiBbMTAyNCwgbnVsbF0sXG4gICAgdGFibGV0OiBbNDgwLCAxMDI0XSxcbiAgICBtb2JpbGU6IFswLCA0ODBdLFxuICAgIHRhYmxldEw6IFs3NjgsIDEwMjRdLFxuICAgIHRhYmxldFA6IFs0ODAsIDc2OF0sXG4gICAgbW9iaWxlTDogWzMyMCwgNDgwXSxcbiAgICBtb2JpbGVQOiBbMCwgMzIwXVxuICB9O1xuXG4gIHN3aXRjaCAob3BlcmF0b3IpIHtcbiAgICBjYXNlICdtaW4nOlxuICAgICAgcmV0dXJuIFtkZXZpY2VzW2RldmljZV1bMF0sIG51bGxdO1xuXG4gICAgY2FzZSAnbWF4JzpcbiAgICAgIHJldHVybiBbMCwgZGV2aWNlc1tkZXZpY2VdWzFdXTtcblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gZGV2aWNlc1tkZXZpY2VdO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldE9wZXJhdG9yKHZhbCkge1xuICB2YXIgcGllY2VzID0gdmFsLnNwbGl0KCdfJyk7XG4gIGlmIChbJ25vdCcsICdtaW4nLCAnbWF4J10uaW5kZXhPZihwaWVjZXNbMF0pID4gLTEpIHJldHVybiBwaWVjZXNbMF07XG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gZ2V0RGV2aWNlKHZhbCkge1xuICB2YXIgcGllY2VzID0gdmFsLnNwbGl0KCdfJyk7XG4gIHJldHVybiBwaWVjZXMubGVuZ3RoID4gMSA/IHBpZWNlc1sxXSA6IHBpZWNlc1swXTtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB7XG4gICAgaWQ6IG1ha2VJZCgpLFxuICAgIGFsbEZpbHRlcmVkRGF0YTogW10sXG4gICAgb3BlbkNoaWxkUm93czogW10sXG4gICAgd2luZG93V2lkdGg6IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gd2luZG93LmlubmVyV2lkdGggOiBudWxsLFxuICAgIHVzZXJNdWx0aVNvcnRpbmc6IHt9LFxuICAgIGVkaXRpbmc6IFtdXG4gIH07XG59O1xuXG5mdW5jdGlvbiBtYWtlSWQoKSB7XG4gIHZhciB0ZXh0ID0gXCJcIjtcbiAgdmFyIHBvc3NpYmxlID0gXCJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OVwiO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgNTsgaSsrKSB7XG4gICAgdGV4dCArPSBwb3NzaWJsZS5jaGFyQXQoTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogcG9zc2libGUubGVuZ3RoKSk7XG4gIH1cblxuICByZXR1cm4gdGV4dDtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGluaXRRdWVyeTogcmVxdWlyZSgnLi4vbWV0aG9kcy9pbml0LXF1ZXJ5JyksXG4gIHJlc2V0UXVlcnk6IHJlcXVpcmUoJy4uL21ldGhvZHMvcmVzZXQtcXVlcnknKSxcbiAgaW5pdEN1c3RvbUZpbHRlcnM6IHJlcXVpcmUoJy4uL21ldGhvZHMvaW5pdC1jdXN0b20tZmlsdGVycycpLFxuICBpbml0T3B0aW9uczogcmVxdWlyZSgnLi4vbWV0aG9kcy9pbml0LW9wdGlvbnMnKSxcbiAgc29ydGFibGVDbGFzczogcmVxdWlyZSgnLi4vbWV0aG9kcy9zb3J0YWJsZS1jbGFzcycpLFxuICBzb3J0YWJsZUNoZXZyb25DbGFzczogcmVxdWlyZSgnLi4vbWV0aG9kcy9zb3J0YWJsZS1jaGV2cm9uLWNsYXNzJyksXG4gIGRpc3BsYXk6IHJlcXVpcmUoJy4uL21ldGhvZHMvZGlzcGxheScpLFxuICBvcmRlckJ5Q29sdW1uOiByZXF1aXJlKCcuLi9tZXRob2RzL29yZGVyLWJ5LWNvbHVtbicpLFxuICBnZXRIZWFkaW5nOiByZXF1aXJlKCcuLi9tZXRob2RzL2dldC1oZWFkaW5nJyksXG4gIGdldEhlYWRpbmdUb29sdGlwOiByZXF1aXJlKCcuLi9tZXRob2RzL2dldC1oZWFkaW5nLXRvb2x0aXAnKSxcbiAgc29ydGFibGU6IHJlcXVpcmUoJy4uL21ldGhvZHMvc29ydGFibGUnKSxcbiAgc2VydmVyU2VhcmNoOiByZXF1aXJlKCcuLi9tZXRob2RzL3NlcnZlci1zZWFyY2gnKSxcbiAgaW5pdE9yZGVyQnk6IHJlcXVpcmUoJy4uL21ldGhvZHMvaW5pdC1vcmRlci1ieScpLFxuICBpbml0RGF0ZUZpbHRlcnM6IHJlcXVpcmUoJy4uL21ldGhvZHMvaW5pdC1kYXRlLWZpbHRlcnMnKSxcbiAgc2V0RmlsdGVyOiByZXF1aXJlKCcuLi9tZXRob2RzL3NldC1maWx0ZXInKSxcbiAgc2V0UGFnZTogcmVxdWlyZSgnLi4vbWV0aG9kcy9zZXQtcGFnZScpLFxuICBzZXRPcmRlcjogcmVxdWlyZSgnLi4vbWV0aG9kcy9zZXQtb3JkZXInKSxcbiAgaW5pdFBhZ2luYXRpb246IHJlcXVpcmUoJy4uL21ldGhvZHMvaW5pdC1wYWdpbmF0aW9uJyksXG4gIGZpbHRlcmFibGU6IHJlcXVpcmUoJy4uL21ldGhvZHMvZmlsdGVyYWJsZScpLFxuICBpc1RleHRGaWx0ZXI6IHJlcXVpcmUoJy4uL21ldGhvZHMvaXMtdGV4dC1maWx0ZXInKSxcbiAgaXNEYXRlRmlsdGVyOiByZXF1aXJlKCcuLi9tZXRob2RzL2lzLWRhdGUtZmlsdGVyJyksXG4gIGlzTGlzdEZpbHRlcjogcmVxdWlyZSgnLi4vbWV0aG9kcy9pcy1saXN0LWZpbHRlcicpLFxuICBoaWdobGlnaHRNYXRjaDogcmVxdWlyZSgnLi4vZmlsdGVycy9oaWdobGlnaHQtbWF0Y2hlcycpLFxuICBmb3JtYXREYXRlOiByZXF1aXJlKCcuLi9maWx0ZXJzL2Zvcm1hdC1kYXRlJyksXG4gIGhhc0RhdGVGaWx0ZXJzOiByZXF1aXJlKCcuLi9tZXRob2RzL2hhcy1kYXRlLWZpbHRlcnMnKSxcbiAgYXBwbHlGaWx0ZXJzOiByZXF1aXJlKCcuLi9tZXRob2RzL2FwcGx5LWZpbHRlcnMnKSxcbiAgb3B0aW9uVGV4dDogcmVxdWlyZSgnLi4vZmlsdGVycy9vcHRpb24tdGV4dCcpLFxuICByZW5kZXI6IHJlcXVpcmUoJy4uL21ldGhvZHMvcmVuZGVyJyksXG4gIHJvd1dhc0NsaWNrZWQ6IHJlcXVpcmUoJy4uL21ldGhvZHMvcm93LXdhcy1jbGlja2VkJyksXG4gIHNldExpbWl0OiByZXF1aXJlKCcuLi9tZXRob2RzL3NldC1saW1pdCcpLFxuICBnZXRPcGVuQ2hpbGRSb3dzOiByZXF1aXJlKCcuLi9tZXRob2RzL2dldC1vcGVuLWNoaWxkLXJvd3MnKSxcbiAgZGlzcGF0Y2g6IHJlcXVpcmUoJy4uL21ldGhvZHMvZGlzcGF0Y2gnKSxcbiAgdG9nZ2xlQ2hpbGRSb3c6IHJlcXVpcmUoJy4uL21ldGhvZHMvdG9nZ2xlLWNoaWxkLXJvdycpLFxuICBjaGlsZFJvd1RvZ2dsZXJDbGFzczogcmVxdWlyZSgnLi4vbWV0aG9kcy9jaGlsZC1yb3ctdG9nZ2xlci1jbGFzcycpLFxuICBzZW5kUmVxdWVzdDogcmVxdWlyZSgnLi4vbWV0aG9kcy9zZW5kLXJlcXVlc3QnKSxcbiAgZ2V0UmVzcG9uc2VEYXRhOiByZXF1aXJlKCcuLi9tZXRob2RzL2dldC1yZXNwb25zZS1kYXRhJyksXG4gIGdldFNvcnRGbjogcmVxdWlyZSgnLi4vbWV0aG9kcy9nZXQtc29ydC1mbicpLFxuICBpbml0U3RhdGU6IHJlcXVpcmUoJy4uL21ldGhvZHMvaW5pdC1zdGF0ZScpLFxuICB1cGRhdGVTdGF0ZTogcmVxdWlyZSgnLi4vbWV0aG9kcy91cGRhdGUtc3RhdGUnKSxcbiAgY29sdW1uQ2xhc3M6IHJlcXVpcmUoJy4uL21ldGhvZHMvY29sdW1uLWNsYXNzJyksXG4gIGdldE5hbWU6IHJlcXVpcmUoJy4uL21ldGhvZHMvZ2V0LW5hbWUnKSxcbiAgdG9nZ2xlQ29sdW1uOiByZXF1aXJlKCcuLi9tZXRob2RzL3RvZ2dsZS1jb2x1bW4nKSxcbiAgc2V0VXNlck11bHRpU29ydDogcmVxdWlyZSgnLi4vbWV0aG9kcy9zZXQtdXNlci1tdWx0aS1zb3J0JyksXG4gIF9jZWxsQ2xhc3NlczogcmVxdWlyZSgnLi4vbWV0aG9kcy9jZWxsLWNsYXNzZXMnKSxcbiAgX3NldEZpbHRlcnNET006IHJlcXVpcmUoJy4uL21ldGhvZHMvc2V0LWZpbHRlcnMtZG9tJyksXG4gIF9jdXJyZW50bHlTb3J0ZWQ6IHJlcXVpcmUoJy4uL21ldGhvZHMvY3VycmVudGx5LXNvcnRlZCcpLFxuICBfZ2V0Q2hpbGRSb3dUZW1wbGF0ZTogcmVxdWlyZSgnLi4vbWV0aG9kcy9nZXQtY2hpbGQtcm93LXRlbXBsYXRlJyksXG4gIF90b2dnbGVDb2x1bW5zRHJvcGRvd246IHJlcXVpcmUoJy4uL21ldGhvZHMvdG9nZ2xlLWNvbHVtbnMtZHJvcGRvd24nKSxcbiAgX29ubHlDb2x1bW46IHJlcXVpcmUoJy4uL21ldGhvZHMvb25seS1jb2x1bW4nKSxcbiAgX29uUGFnaW5hdGlvbjogcmVxdWlyZSgnLi4vbWV0aG9kcy9vbi1wYWdpbmF0aW9uJyksXG4gIF90b2dnbGVHcm91cERpcmVjdGlvbjogcmVxdWlyZSgnLi4vbWV0aG9kcy90b2dnbGUtZ3JvdXAtZGlyZWN0aW9uJyksXG4gIF9nZXRJbml0aWFsRGF0ZVJhbmdlOiByZXF1aXJlKCcuLi9tZXRob2RzL2dldC1pbml0aWFsLWRhdGUtcmFuZ2UnKSxcbiAgX3NldERhdGVwaWNrZXJUZXh0OiByZXF1aXJlKCcuLi9tZXRob2RzL3NldC1kYXRlcGlja2VyLXRleHQnKSxcbiAgX2luaXRpYWxPcmRlckFzY2VuZGluZzogcmVxdWlyZSgnLi4vbWV0aG9kcy9pbml0aWFsLW9yZGVyLWFzY2VuZGluZycpLFxuICBkYXRlRm9ybWF0OiByZXF1aXJlKCcuLi9tZXRob2RzL2RhdGUtZm9ybWF0JyksXG4gIF9zZXRDb2x1bW5zRHJvcGRvd25DbG9zZUxpc3RlbmVyOiByZXF1aXJlKCcuLi9tZXRob2RzL3NldC1jb2x1bW5zLWRyb3Bkb3duLWNsb3NlLWxpc3RlbmVyJyksXG4gIF9nZXRWYWx1ZTogcmVxdWlyZSgnLi4vbWV0aG9kcy9nZXQtdmFsdWUnKSxcbiAgX2dldENvbHVtbk5hbWU6IHJlcXVpcmUoJy4uL21ldGhvZHMvZ2V0LWNvbHVtbi1uYW1lJyksXG4gIF9zaG91bGRTaG93Q29sdW1uT25Jbml0OiByZXF1aXJlKCcuLi9tZXRob2RzL3Nob3VsZC1zaG93LWNvbHVtbi1vbi1pbml0Jylcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBfbWVyZ2UgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCJtZXJnZVwiKSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IFwiZGVmYXVsdFwiOiBvYmogfTsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChoKSB7XG4gIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIChjbGFzc2VzKSB7XG4gICAgaWYgKCFfdGhpcy5vcHRzLmZpbHRlckJ5Q29sdW1uIHx8ICFfdGhpcy5vcHRzLmZpbHRlcmFibGUpIHJldHVybiAnJztcblxuICAgIHZhciB0ZXh0RmlsdGVyID0gcmVxdWlyZSgnLi90ZXh0LWZpbHRlcicpLmNhbGwoX3RoaXMsIGgsIGNsYXNzZXMuaW5wdXQpO1xuXG4gICAgdmFyIGRhdGVGaWx0ZXIgPSByZXF1aXJlKCcuL2RhdGUtZmlsdGVyJykuY2FsbChfdGhpcywgaCk7XG5cbiAgICB2YXIgbGlzdEZpbHRlciA9IHJlcXVpcmUoJy4vbGlzdC1maWx0ZXInKS5jYWxsKF90aGlzLCBoLCBjbGFzc2VzLnNlbGVjdCk7XG5cbiAgICB2YXIgZmlsdGVycyA9IFtdO1xuICAgIHZhciBmaWx0ZXI7XG4gICAgaWYgKF90aGlzLmhhc0NoaWxkUm93ICYmIF90aGlzLm9wdHMuY2hpbGRSb3dUb2dnbGVyRmlyc3QgJiYgX3RoaXMub3B0cy5zaG93Q2hpbGRSb3dUb2dnbGVyKSBmaWx0ZXJzLnB1c2goaChcInRoXCIpKTtcblxuICAgIF90aGlzLmFsbENvbHVtbnMubWFwKGZ1bmN0aW9uIChjb2x1bW4pIHtcbiAgICAgIHZhciBmaWx0ZXIgPSAnJztcblxuICAgICAgaWYgKF90aGlzLmZpbHRlcmFibGUoY29sdW1uKSkge1xuICAgICAgICBzd2l0Y2ggKHRydWUpIHtcbiAgICAgICAgICBjYXNlIF90aGlzLmlzVGV4dEZpbHRlcihjb2x1bW4pOlxuICAgICAgICAgICAgZmlsdGVyID0gdGV4dEZpbHRlcihjb2x1bW4pO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIF90aGlzLmlzRGF0ZUZpbHRlcihjb2x1bW4pOlxuICAgICAgICAgICAgZmlsdGVyID0gZGF0ZUZpbHRlcihjb2x1bW4pO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIF90aGlzLmlzTGlzdEZpbHRlcihjb2x1bW4pOlxuICAgICAgICAgICAgZmlsdGVyID0gbGlzdEZpbHRlcihjb2x1bW4pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBfdGhpcy4kc2xvdHNbXCJmaWx0ZXJfX1wiLmNvbmNhdChjb2x1bW4pXSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgZmlsdGVyID0gZmlsdGVyID8gaChcImRpdlwiLCBbZmlsdGVyLCBfdGhpcy4kc2xvdHNbXCJmaWx0ZXJfX1wiLmNvbmNhdChjb2x1bW4pXV0pIDogX3RoaXMuJHNsb3RzW1wiZmlsdGVyX19cIi5jb25jYXQoY29sdW1uKV07XG4gICAgICB9XG5cbiAgICAgIGZpbHRlcnMucHVzaChoKFwidGhcIiwge1xuICAgICAgICBcImNsYXNzXCI6IF90aGlzLmNvbHVtbkNsYXNzKGNvbHVtbilcbiAgICAgIH0sIFtoKFwiZGl2XCIsIF9kZWZpbmVQcm9wZXJ0eSh7XG4gICAgICAgIFwiY2xhc3NcIjogXCJWdWVUYWJsZXNfX2NvbHVtbi1maWx0ZXJcIlxuICAgICAgfSwgXCJjbGFzc1wiLCAnVnVlVGFibGVzX18nICsgY29sdW1uICsgJy1maWx0ZXItd3JhcHBlcicpLCBbZmlsdGVyXSldKSk7XG4gICAgfSk7XG5cbiAgICBpZiAoX3RoaXMuaGFzQ2hpbGRSb3cgJiYgIV90aGlzLm9wdHMuY2hpbGRSb3dUb2dnbGVyRmlyc3QgJiYgX3RoaXMub3B0cy5zaG93Q2hpbGRSb3dUb2dnbGVyKSBmaWx0ZXJzLnB1c2goaChcInRoXCIpKTtcbiAgICByZXR1cm4gaChcInRyXCIsIHtcbiAgICAgIFwiY2xhc3NcIjogXCJWdWVUYWJsZXNfX2ZpbHRlcnMtcm93XCJcbiAgICB9LCBbZmlsdGVyc10pO1xuICB9O1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxudmFyIGRyb3Bkb3duV3JhcHBlciA9IHJlcXVpcmUoJy4vZHJvcGRvd24td3JhcHBlcicpO1xuXG52YXIgZHJvcGRvd25JdGVtV3JhcHBlciA9IHJlcXVpcmUoJy4vZHJvcGRvd24taXRlbS13cmFwcGVyJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGgpIHtcbiAgdmFyIF90aGlzID0gdGhpcztcblxuICByZXR1cm4gZnVuY3Rpb24gKGNsYXNzZXMpIHtcbiAgICB2YXIgY29scyA9IF90aGlzLmNvbHVtbnMubWFwKGZ1bmN0aW9uIChjb2x1bW4pIHtcbiAgICAgIHJldHVybiBkcm9wZG93bkl0ZW1XcmFwcGVyKGgsIGNsYXNzZXMsIGgoXCJhXCIsIHtcbiAgICAgICAgXCJjbGFzc1wiOiBjbGFzc2VzLmRyb3Bkb3duLml0ZW0sXG4gICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgaHJlZjogXCIjXCJcbiAgICAgICAgfSxcbiAgICAgICAgb246IHtcbiAgICAgICAgICBcImNsaWNrXCI6IGZ1bmN0aW9uIGNsaWNrKCkge1xuICAgICAgICAgICAgcmV0dXJuIF90aGlzLnRvZ2dsZUNvbHVtbihjb2x1bW4pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSwgW2goXCJpbnB1dFwiLCB7XG4gICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgdHlwZTogXCJjaGVja2JveFwiLFxuICAgICAgICAgIGRpc2FibGVkOiBfdGhpcy5fb25seUNvbHVtbihjb2x1bW4pXG4gICAgICAgIH0sXG4gICAgICAgIGRvbVByb3BzOiB7XG4gICAgICAgICAgXCJ2YWx1ZVwiOiBjb2x1bW4sXG4gICAgICAgICAgXCJjaGVja2VkXCI6IF90aGlzLmFsbENvbHVtbnMuaW5jbHVkZXMoY29sdW1uKVxuICAgICAgICB9XG4gICAgICB9KSwgX3RoaXMuZ2V0SGVhZGluZyhjb2x1bW4pXSkpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIGgoXCJkaXZcIiwge1xuICAgICAgcmVmOiBcImNvbHVtbnNkcm9wZG93blwiLFxuICAgICAgXCJjbGFzc1wiOiBcIlwiLmNvbmNhdChjbGFzc2VzLmRyb3Bkb3duLmNvbnRhaW5lciwgXCIgXCIpLmNvbmNhdChjbGFzc2VzLnJpZ2h0LCBcIiBWdWVUYWJsZXNfX2NvbHVtbnMtZHJvcGRvd25cIilcbiAgICB9LCBbaChcImJ1dHRvblwiLCB7XG4gICAgICBhdHRyczoge1xuICAgICAgICB0eXBlOiBcImJ1dHRvblwiXG4gICAgICB9LFxuICAgICAgXCJjbGFzc1wiOiBcIlwiLmNvbmNhdChjbGFzc2VzLmJ1dHRvbiwgXCIgXCIpLmNvbmNhdChjbGFzc2VzLmRyb3Bkb3duLnRyaWdnZXIpLFxuICAgICAgb246IHtcbiAgICAgICAgXCJjbGlja1wiOiBfdGhpcy5fdG9nZ2xlQ29sdW1uc0Ryb3Bkb3duLmJpbmQoX3RoaXMpXG4gICAgICB9XG4gICAgfSwgW190aGlzLmRpc3BsYXkoJ2NvbHVtbnMnKSwgaChcInNwYW5cIiwge1xuICAgICAgXCJjbGFzc1wiOiBcIlwiLmNvbmNhdChjbGFzc2VzLmljb24sIFwiIFwiKS5jb25jYXQoY2xhc3Nlcy5zbWFsbClcbiAgICB9LCBbaChcImlcIiwge1xuICAgICAgXCJjbGFzc1wiOiBjbGFzc2VzLmRyb3Bkb3duLmNhcmV0XG4gICAgfSldKV0pLCBkcm9wZG93bldyYXBwZXIuY2FsbChfdGhpcywgaCwgY2xhc3NlcywgY29scyldKTtcbiAgfTtcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGgpIHtcbiAgdmFyIF90aGlzID0gdGhpcztcblxuICByZXR1cm4gZnVuY3Rpb24gKGNvbHVtbikge1xuICAgIHJldHVybiBoKFwiZGl2XCIsIHtcbiAgICAgIFwiY2xhc3NcIjogXCJWdWVUYWJsZXNfX2RhdGUtZmlsdGVyXCIsXG4gICAgICBhdHRyczoge1xuICAgICAgICBpZDogJ1Z1ZVRhYmxlc19fJyArIGNvbHVtbiArICctZmlsdGVyJ1xuICAgICAgfVxuICAgIH0sIFtoKFwic3BhblwiLCB7XG4gICAgICBcImNsYXNzXCI6IFwiVnVlVGFibGVzX19maWx0ZXItcGxhY2Vob2xkZXJcIlxuICAgIH0sIFtfdGhpcy5kaXNwbGF5KCdmaWx0ZXJCeScsIHtcbiAgICAgIGNvbHVtbjogX3RoaXMuZ2V0SGVhZGluZyhjb2x1bW4pXG4gICAgfSldKV0pO1xuICB9O1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaCwgY2xhc3NlcywgaXRlbSkge1xuICBpZiAoY2xhc3Nlcy5mcmFtZXdvcmsgPT09ICdidWxtYScpIHtcbiAgICByZXR1cm4gaXRlbTtcbiAgfVxuXG4gIHJldHVybiBoKFwibGlcIiwgW2l0ZW1dKTtcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGgpIHtcbiAgdmFyIF90aGlzID0gdGhpcztcblxuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIGlmIChfdGhpcy5jb3VudCA+IDAgJiYgX3RoaXMub3B0cy5wYWdpbmF0aW9uLmRyb3Bkb3duKSB7XG4gICAgICB2YXIgcGVyUGFnZSA9IHBhcnNlSW50KF90aGlzLmxpbWl0KTtcbiAgICAgIHZhciBmcm9tID0gKF90aGlzLlBhZ2UgLSAxKSAqIHBlclBhZ2UgKyAxO1xuICAgICAgdmFyIHRvID0gX3RoaXMuUGFnZSA9PSBfdGhpcy50b3RhbFBhZ2VzID8gX3RoaXMuY291bnQgOiBmcm9tICsgcGVyUGFnZSAtIDE7XG5cbiAgICAgIHZhciBwYXJ0cyA9IF90aGlzLm9wdHMudGV4dHMuY291bnQuc3BsaXQoJ3wnKTtcblxuICAgICAgdmFyIGkgPSBNYXRoLm1pbihfdGhpcy5jb3VudCA9PSAxID8gMiA6IF90aGlzLnRvdGFsUGFnZXMgPT0gMSA/IDEgOiAwLCBwYXJ0cy5sZW5ndGggLSAxKTtcbiAgICAgIHZhciBjb3VudCA9IHBhcnRzW2ldLnJlcGxhY2UoJ3tjb3VudH0nLCBfdGhpcy5jb3VudCkucmVwbGFjZSgne2Zyb219JywgZnJvbSkucmVwbGFjZSgne3RvfScsIHRvKTtcbiAgICAgIHJldHVybiBoKFwiZGl2XCIsIHtcbiAgICAgICAgXCJjbGFzc1wiOiBcIlZ1ZVBhZ2luYXRpb25cIlxuICAgICAgfSwgW2goXCJwXCIsIHtcbiAgICAgICAgXCJjbGFzc1wiOiBcIlZ1ZVBhZ2luYXRpb25fX2NvdW50XCJcbiAgICAgIH0sIFtjb3VudF0pXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuICcnO1xuICB9O1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxudmFyIGRlYm91bmNlID0gcmVxdWlyZSgnZGVib3VuY2UnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaCkge1xuICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gIHJldHVybiBmdW5jdGlvbiAoc2VsZWN0Q2xhc3MsIGlkKSB7XG4gICAgdmFyIHBhZ2VzID0gW107XG4gICAgdmFyIHNlbGVjdGVkO1xuXG4gICAgZm9yICh2YXIgcGFnID0gMTsgcGFnIDw9IF90aGlzLnRvdGFsUGFnZXM7IHBhZysrKSB7XG4gICAgICB2YXIgc2VsZWN0ZWQgPSBfdGhpcy5wYWdlID09IHBhZztcbiAgICAgIHBhZ2VzLnB1c2goaChcIm9wdGlvblwiLCB7XG4gICAgICAgIGRvbVByb3BzOiB7XG4gICAgICAgICAgXCJ2YWx1ZVwiOiBwYWcsXG4gICAgICAgICAgXCJzZWxlY3RlZFwiOiBzZWxlY3RlZFxuICAgICAgICB9XG4gICAgICB9LCBbcGFnXSkpO1xuICAgIH1cblxuICAgIHJldHVybiBoKFwic2VsZWN0XCIsIHtcbiAgICAgIFwiY2xhc3NcIjogXCJcIi5jb25jYXQoc2VsZWN0Q2xhc3MsIFwiIGRyb3Bkb3duLXBhZ2luYXRpb25cIiksXG4gICAgICBkaXJlY3RpdmVzOiBbe1xuICAgICAgICBuYW1lOiBcInNob3dcIixcbiAgICAgICAgdmFsdWU6IF90aGlzLnRvdGFsUGFnZXMgPiAxXG4gICAgICB9XSxcbiAgICAgIGF0dHJzOiB7XG4gICAgICAgIG5hbWU6IFwicGFnZVwiLFxuICAgICAgICBpZDogaWRcbiAgICAgIH0sXG4gICAgICByZWY6IFwicGFnZVwiLFxuICAgICAgZG9tUHJvcHM6IHtcbiAgICAgICAgXCJ2YWx1ZVwiOiBfdGhpcy5wYWdlXG4gICAgICB9LFxuICAgICAgb246IHtcbiAgICAgICAgXCJjaGFuZ2VcIjogX3RoaXMuc2V0UGFnZS5iaW5kKF90aGlzLCBudWxsLCBmYWxzZSlcbiAgICAgIH1cbiAgICB9LCBbcGFnZXNdKTtcbiAgfTtcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGgsIGNsYXNzZXMsIGNvbHVtbnMpIHtcbiAgaWYgKGNsYXNzZXMuZnJhbWV3b3JrID09PSAnYnVsbWEnKSB7XG4gICAgcmV0dXJuIGgoXCJkaXZcIiwge1xuICAgICAgXCJjbGFzc1wiOiBjbGFzc2VzLmRyb3Bkb3duLm1lbnUsXG4gICAgICBzdHlsZTogdGhpcy5kaXNwbGF5Q29sdW1uc0Ryb3Bkb3duID8gJ2Rpc3BsYXk6YmxvY2snIDogJ2Rpc3BsYXk6bm9uZSdcbiAgICB9LCBbaChcImRpdlwiLCB7XG4gICAgICBcImNsYXNzXCI6IGNsYXNzZXMuZHJvcGRvd24uY29udGVudFxuICAgIH0sIFtjb2x1bW5zXSldKTtcbiAgfVxuXG4gIGlmIChjbGFzc2VzLmZyYW1ld29yayA9PT0gJ2Jvb3RzdHJhcDQnKSB7XG4gICAgcmV0dXJuIGgoXCJkaXZcIiwge1xuICAgICAgXCJjbGFzc1wiOiBjbGFzc2VzLmRyb3Bkb3duLm1lbnUsXG4gICAgICBzdHlsZTogdGhpcy5kaXNwbGF5Q29sdW1uc0Ryb3Bkb3duID8gJ2Rpc3BsYXk6YmxvY2snIDogJ2Rpc3BsYXk6bm9uZSdcbiAgICB9LCBbY29sdW1uc10pO1xuICB9XG5cbiAgcmV0dXJuIGgoXCJ1bFwiLCB7XG4gICAgXCJjbGFzc1wiOiBjbGFzc2VzLmRyb3Bkb3duLm1lbnUsXG4gICAgc3R5bGU6IHRoaXMuZGlzcGxheUNvbHVtbnNEcm9wZG93biA/ICdkaXNwbGF5OmJsb2NrJyA6ICdkaXNwbGF5Om5vbmUnXG4gIH0sIFtjb2x1bW5zXSk7XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChoKSB7XG4gIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIChyaWdodCkge1xuICAgIHZhciB0aGF0ID0gX3RoaXM7XG5cbiAgICB2YXIgc29ydENvbnRyb2wgPSByZXF1aXJlKFwiLi9zb3J0LWNvbnRyb2xcIikoaCwgcmlnaHQpO1xuXG4gICAgdmFyIGhlYWRpbmdzID0gW107XG4gICAgaWYgKF90aGlzLmhhc0NoaWxkUm93ICYmIF90aGlzLm9wdHMuY2hpbGRSb3dUb2dnbGVyRmlyc3QgJiYgX3RoaXMub3B0cy5zaG93Q2hpbGRSb3dUb2dnbGVyKSBoZWFkaW5ncy5wdXNoKGgoXCJ0aFwiKSk7XG5cbiAgICBfdGhpcy5hbGxDb2x1bW5zLm1hcChmdW5jdGlvbiAoY29sdW1uKSB7XG4gICAgICBoZWFkaW5ncy5wdXNoKGgoXCJ0aFwiLCB7XG4gICAgICAgIG9uOiB7XG4gICAgICAgICAgXCJrZXlwcmVzc1wiOiBmdW5jdGlvbiBrZXlwcmVzcyhlKSB7XG4gICAgICAgICAgICBpZiAoZS5rZXkgPT09IFwiRW50ZXJcIikge1xuICAgICAgICAgICAgICB0aGF0Lm9yZGVyQnlDb2x1bW4uYmluZCh0aGF0LCBjb2x1bW4sIGUpKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImNsaWNrXCI6IGZ1bmN0aW9uIGNsaWNrKGUpIHtcbiAgICAgICAgICAgIGlmIChlLnRhcmdldC5jbGFzc05hbWUgIT09IFwicmVzaXplLWhhbmRsZVwiKSB7XG4gICAgICAgICAgICAgIHRoYXQub3JkZXJCeUNvbHVtbi5iaW5kKHRoYXQsIGNvbHVtbiwgZSkoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiY2xhc3NcIjogdGhpcy5zb3J0YWJsZUNsYXNzKGNvbHVtbiksXG4gICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgdGFiaW5kZXg6IFwiMFwiXG4gICAgICAgIH1cbiAgICAgIH0sIFtoKFwic3BhblwiLCB7XG4gICAgICAgIFwiY2xhc3NcIjogXCJWdWVUYWJsZXNfX2hlYWRpbmdcIixcbiAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICB0aXRsZTogdGhpcy5nZXRIZWFkaW5nVG9vbHRpcChjb2x1bW4sIGgpXG4gICAgICAgIH1cbiAgICAgIH0sIFt0aGlzLmdldEhlYWRpbmcoY29sdW1uLCBoKV0pLCBzb3J0Q29udHJvbC5jYWxsKHRoaXMsIGNvbHVtbildKSk7XG4gICAgfS5iaW5kKF90aGlzKSk7XG5cbiAgICBpZiAoX3RoaXMuaGFzQ2hpbGRSb3cgJiYgIV90aGlzLm9wdHMuY2hpbGRSb3dUb2dnbGVyRmlyc3QgJiYgX3RoaXMub3B0cy5zaG93Q2hpbGRSb3dUb2dnbGVyKSBoZWFkaW5ncy5wdXNoKGgoXCJ0aFwiKSk7XG4gICAgcmV0dXJuIGhlYWRpbmdzO1xuICB9O1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaCwgc2VsZWN0Q2xhc3MpIHtcbiAgdmFyIF90aGlzID0gdGhpcztcblxuICByZXR1cm4gZnVuY3Rpb24gKGNvbHVtbikge1xuICAgIHZhciBvcHRpb25zID0gW107XG4gICAgdmFyIHNlbGVjdGVkO1xuICAgIHZhciBzZWFyY2ggPSBfdGhpcy5zb3VyY2UgPT0gJ2NsaWVudCcgPyBfdGhpcy5zZWFyY2guYmluZChfdGhpcywgX3RoaXMuZGF0YSkgOiBfdGhpcy5zZXJ2ZXJTZWFyY2guYmluZChfdGhpcyk7XG5cbiAgICB2YXIgZGlzcGxheWFibGUgPSBfdGhpcy5vcHRzLmxpc3RDb2x1bW5zW2NvbHVtbl0uZmlsdGVyKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICByZXR1cm4gIWl0ZW0uaGlkZTtcbiAgICB9KTtcblxuICAgIGRpc3BsYXlhYmxlLm1hcChmdW5jdGlvbiAob3B0aW9uKSB7XG4gICAgICBzZWxlY3RlZCA9IG9wdGlvbi5pZCA9PSBfdGhpcy5xdWVyeVtjb2x1bW5dICYmIF90aGlzLnF1ZXJ5W2NvbHVtbl0gIT09ICcnO1xuICAgICAgb3B0aW9ucy5wdXNoKGgoXCJvcHRpb25cIiwge1xuICAgICAgICBkb21Qcm9wczoge1xuICAgICAgICAgIFwidmFsdWVcIjogb3B0aW9uLmlkLFxuICAgICAgICAgIFwic2VsZWN0ZWRcIjogc2VsZWN0ZWRcbiAgICAgICAgfVxuICAgICAgfSwgW29wdGlvbi50ZXh0XSkpO1xuICAgIH0pO1xuICAgIHJldHVybiBoKFwiZGl2XCIsIHtcbiAgICAgIFwiY2xhc3NcIjogXCJWdWVUYWJsZXNfX2xpc3QtZmlsdGVyXCIsXG4gICAgICBhdHRyczoge1xuICAgICAgICBpZDogJ1Z1ZVRhYmxlc19fJyArIGNvbHVtbiArICctZmlsdGVyJ1xuICAgICAgfVxuICAgIH0sIFtoKFwic2VsZWN0XCIsIHtcbiAgICAgIFwiY2xhc3NcIjogc2VsZWN0Q2xhc3MsXG4gICAgICBvbjoge1xuICAgICAgICBcImNoYW5nZVwiOiBzZWFyY2hcbiAgICAgIH0sXG4gICAgICBhdHRyczoge1xuICAgICAgICBuYW1lOiBfdGhpcy5fZ2V0Q29sdW1uTmFtZShjb2x1bW4pXG4gICAgICB9LFxuICAgICAgZG9tUHJvcHM6IHtcbiAgICAgICAgXCJ2YWx1ZVwiOiBfdGhpcy5xdWVyeVtjb2x1bW5dXG4gICAgICB9XG4gICAgfSwgW2goXCJvcHRpb25cIiwge1xuICAgICAgYXR0cnM6IHtcbiAgICAgICAgdmFsdWU6IFwiXCJcbiAgICAgIH1cbiAgICB9LCBbX3RoaXMuZGlzcGxheSgnZGVmYXVsdE9wdGlvbicsIHtcbiAgICAgIGNvbHVtbjogX3RoaXMub3B0cy5oZWFkaW5nc1tjb2x1bW5dID8gX3RoaXMub3B0cy5oZWFkaW5nc1tjb2x1bW5dIDogY29sdW1uXG4gICAgfSldKSwgb3B0aW9uc10pXSk7XG4gIH07XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG52YXIgZGVib3VuY2UgPSByZXF1aXJlKCdkZWJvdW5jZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChoKSB7XG4gIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIChjbGFzc2VzLCBpZCkge1xuICAgIHZhciBzZWFyY2ggPSBfdGhpcy5zb3VyY2UgPT0gJ2NsaWVudCcgPyBfdGhpcy5zZWFyY2guYmluZChfdGhpcywgX3RoaXMuZGF0YSkgOiBfdGhpcy5zZXJ2ZXJTZWFyY2guYmluZChfdGhpcyk7XG4gICAgcmV0dXJuIGgoXCJpbnB1dFwiLCB7XG4gICAgICBcImNsYXNzXCI6IFwiVnVlVGFibGVzX19zZWFyY2hfX2lucHV0IFwiLmNvbmNhdChjbGFzc2VzLmlucHV0LCBcIiBcIikuY29uY2F0KGNsYXNzZXMuc21hbGwpLFxuICAgICAgYXR0cnM6IHtcbiAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgIHBsYWNlaG9sZGVyOiBfdGhpcy5kaXNwbGF5KCdmaWx0ZXJQbGFjZWhvbGRlcicpLFxuICAgICAgICBpZDogaWQsXG4gICAgICAgIGF1dG9jb21wbGV0ZTogXCJvZmZcIlxuICAgICAgfSxcbiAgICAgIG9uOiB7XG4gICAgICAgIFwia2V5dXBcIjogX3RoaXMub3B0cy5kZWJvdW5jZSA/IGRlYm91bmNlKHNlYXJjaCwgX3RoaXMub3B0cy5kZWJvdW5jZSkgOiBzZWFyY2hcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGgpIHtcbiAgdmFyIF90aGlzID0gdGhpcztcblxuICByZXR1cm4gZnVuY3Rpb24gKHRoZW1lKSB7XG4gICAgaWYgKF90aGlzLm9wdHMucGFnaW5hdGlvbiAmJiBfdGhpcy5vcHRzLnBhZ2luYXRpb24uZHJvcGRvd24pIHJldHVybiAnJztcbiAgICB2YXIgb3B0aW9ucyA9IHtcbiAgICAgIHRoZW1lOiB0aGVtZSxcbiAgICAgIGNodW5rOiBfdGhpcy5vcHRzLnBhZ2luYXRpb24uY2h1bmssXG4gICAgICBjaHVua3NOYXZpZ2F0aW9uOiBfdGhpcy5vcHRzLnBhZ2luYXRpb24ubmF2LFxuICAgICAgZWRnZU5hdmlnYXRpb246IF90aGlzLm9wdHMucGFnaW5hdGlvbi5lZGdlLFxuICAgICAgdGV4dHM6IHtcbiAgICAgICAgY291bnQ6IF90aGlzLm9wdHMudGV4dHMuY291bnQsXG4gICAgICAgIGZpcnN0OiBfdGhpcy5vcHRzLnRleHRzLmZpcnN0LFxuICAgICAgICBsYXN0OiBfdGhpcy5vcHRzLnRleHRzLmxhc3RcbiAgICAgIH1cbiAgICB9O1xuICAgIHZhciBuYW1lID0gX3RoaXMudnVleCA/IF90aGlzLm5hbWUgOiBfdGhpcy5pZDtcbiAgICByZXR1cm4gaChcInBhZ2luYXRpb25cIiwge1xuICAgICAgcmVmOiBcInBhZ2luYXRpb25cIixcbiAgICAgIGF0dHJzOiB7XG4gICAgICAgIG9wdGlvbnM6IG9wdGlvbnMsXG4gICAgICAgIFwiZm9yXCI6IG5hbWUsXG4gICAgICAgIHZ1ZXg6IF90aGlzLnZ1ZXgsXG4gICAgICAgIHJlY29yZHM6IF90aGlzLmNvdW50LFxuICAgICAgICBcInBlci1wYWdlXCI6IHBhcnNlSW50KF90aGlzLmxpbWl0KVxuICAgICAgfSxcbiAgICAgIG9uOiB7XG4gICAgICAgIFwicGFnaW5hdGVcIjogX3RoaXMuX29uUGFnaW5hdGlvbi5iaW5kKF90aGlzKVxuICAgICAgfVxuICAgIH0pO1xuICB9O1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaCkge1xuICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gIHZhciBwZXJwYWdlVmFsdWVzID0gW107XG4gIHRoaXMub3B0cy5wZXJQYWdlVmFsdWVzLmV2ZXJ5KGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgIHZhciBpc0xhc3RFbnRyeSA9IHZhbHVlID49IF90aGlzLmNvdW50O1xuICAgIHZhciBzZWxlY3RlZCA9IF90aGlzLmxpbWl0ID09IHZhbHVlIHx8IGlzTGFzdEVudHJ5ICYmIF90aGlzLmxpbWl0ID4gdmFsdWU7XG4gICAgcGVycGFnZVZhbHVlcy5wdXNoKGgoXCJvcHRpb25cIiwge1xuICAgICAgZG9tUHJvcHM6IHtcbiAgICAgICAgXCJ2YWx1ZVwiOiB2YWx1ZSxcbiAgICAgICAgXCJzZWxlY3RlZFwiOiBzZWxlY3RlZFxuICAgICAgfVxuICAgIH0sIFt2YWx1ZV0pKTtcbiAgICByZXR1cm4gIWlzTGFzdEVudHJ5O1xuICB9KTtcbiAgcmV0dXJuIHBlcnBhZ2VWYWx1ZXM7XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChoKSB7XG4gIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIChwZXJwYWdlVmFsdWVzLCBjbHMsIGlkKSB7XG4gICAgcmV0dXJuIGgoXCJzZWxlY3RcIiwge1xuICAgICAgXCJjbGFzc1wiOiBjbHMsXG4gICAgICBhdHRyczoge1xuICAgICAgICBuYW1lOiBcImxpbWl0XCIsXG4gICAgICAgIGlkOiBpZFxuICAgICAgfSxcbiAgICAgIGRvbVByb3BzOiB7XG4gICAgICAgIFwidmFsdWVcIjogX3RoaXMubGltaXRcbiAgICAgIH0sXG4gICAgICBvbjoge1xuICAgICAgICBcImNoYW5nZVwiOiBfdGhpcy5zZXRMaW1pdC5iaW5kKF90aGlzKVxuICAgICAgfVxuICAgIH0sIFtwZXJwYWdlVmFsdWVzXSk7XG4gIH07XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG52YXIgX2JhYmVsSGVscGVyVnVlSnN4TWVyZ2VQcm9wcyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcImJhYmVsLWhlbHBlci12dWUtanN4LW1lcmdlLXByb3BzXCIpKTtcblxudmFyIF9jbG9uZSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcImNsb25lXCIpKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgXCJkZWZhdWx0XCI6IG9iaiB9OyB9XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGgpIHtcbiAgdmFyIF90aGlzID0gdGhpcztcblxuICByZXR1cm4gZnVuY3Rpb24gKGNsYXNzZXMpIHtcbiAgICB2YXIgZGF0YTtcblxuICAgIGlmIChfdGhpcy5zb3VyY2UgPT09ICdjbGllbnQnKSB7XG4gICAgICBkYXRhID0gX3RoaXMuZmlsdGVyZWREYXRhO1xuXG4gICAgICBpZiAoIWRhdGEubGVuZ3RoICYmIF90aGlzLnNvdXJjZSA9PT0gJ2NsaWVudCcgJiYgX3RoaXMucGFnZSAhPT0gMSkge1xuICAgICAgICAvLyBkYXRhIHdhcyBkeW5hbWljYWxseSByZW1vdmVkIGdvIHRvIGxhc3QgcGFnZVxuICAgICAgICBfdGhpcy5zZXRQYWdlKF90aGlzLnRvdGFsUGFnZXMgPyBfdGhpcy50b3RhbFBhZ2VzIDogMSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGRhdGEgPSBfdGhpcy50YWJsZURhdGE7XG4gICAgfVxuXG4gICAgaWYgKGRhdGEubGVuZ3RoID09PSAwKSB7XG4gICAgICB2YXIgY29sc3BhbiA9IF90aGlzLmFsbENvbHVtbnMubGVuZ3RoO1xuICAgICAgaWYgKF90aGlzLmhhc0NoaWxkUm93ICYmIF90aGlzLm9wdHMuc2hvd0NoaWxkUm93VG9nZ2xlcikgY29sc3BhbisrO1xuICAgICAgcmV0dXJuIGgoXCJ0clwiLCB7XG4gICAgICAgIFwiY2xhc3NcIjogXCJWdWVUYWJsZXNfX25vLXJlc3VsdHNcIlxuICAgICAgfSwgW2goXCJ0ZFwiLCB7XG4gICAgICAgIFwiY2xhc3NcIjogXCJ0ZXh0LWNlbnRlclwiLFxuICAgICAgICBhdHRyczoge1xuICAgICAgICAgIHRhYmluZGV4OiBcIjBcIixcbiAgICAgICAgICBjb2xzcGFuOiBfdGhpcy5jb2xzcGFuXG4gICAgICAgIH1cbiAgICAgIH0sIFtfdGhpcy5kaXNwbGF5KF90aGlzLmxvYWRpbmcgPyAnbG9hZGluZycgOiAnbm9SZXN1bHRzJyldKV0pO1xuICAgIH1cblxuICAgIHZhciByb3dzID0gW107XG4gICAgdmFyIGNvbHVtbnM7XG4gICAgdmFyIHJvd0tleSA9IF90aGlzLm9wdHMudW5pcXVlS2V5O1xuICAgIHZhciByb3dBdHRyaWJ1dGVzO1xuICAgIHZhciByb3dDbGFzcztcbiAgICB2YXIgcmVjb3JkQ291bnQgPSAoX3RoaXMuUGFnZSAtIDEpICogX3RoaXMubGltaXQ7XG4gICAgdmFyIGN1cnJlbnRHcm91cDtcbiAgICB2YXIgZ3JvdXBTbG90O1xuICAgIHZhciBncm91cFZhbHVlO1xuICAgIHZhciBncm91cEJ5Q29udGVudDtcbiAgICBkYXRhLm1hcChmdW5jdGlvbiAocm93LCBpbmRleCkge1xuICAgICAgaWYgKF90aGlzLm9wdHMuZ3JvdXBCeSAmJiBfdGhpcy5zb3VyY2UgPT09ICdjbGllbnQnICYmIHJvd1tfdGhpcy5vcHRzLmdyb3VwQnldICE9PSBjdXJyZW50R3JvdXApIHtcbiAgICAgICAgZ3JvdXBTbG90ID0gX3RoaXMuZ2V0R3JvdXBTbG90KHJvd1tfdGhpcy5vcHRzLmdyb3VwQnldKTtcbiAgICAgICAgZ3JvdXBWYWx1ZSA9IHJvd1tfdGhpcy5vcHRzLmdyb3VwQnldO1xuICAgICAgICBncm91cEJ5Q29udGVudCA9IF90aGlzLm9wdHMudG9nZ2xlR3JvdXBzID8gaChcImJ1dHRvblwiLCB7XG4gICAgICAgICAgXCJjbGFzc1wiOiBjbGFzc2VzLmJ1dHRvbixcbiAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgXCJjbGlja1wiOiBfdGhpcy50b2dnbGVHcm91cC5iaW5kKF90aGlzLCBncm91cFZhbHVlKVxuICAgICAgICAgIH1cbiAgICAgICAgfSwgW2dyb3VwVmFsdWUsIGgoXCJzcGFuXCIsIHtcbiAgICAgICAgICBcImNsYXNzXCI6IF90aGlzLmdyb3VwVG9nZ2xlSWNvbihncm91cFZhbHVlKVxuICAgICAgICB9KV0pIDogZ3JvdXBWYWx1ZTtcbiAgICAgICAgcm93cy5wdXNoKGgoXCJ0clwiLCB7XG4gICAgICAgICAgXCJjbGFzc1wiOiBjbGFzc2VzLmdyb3VwVHIsXG4gICAgICAgICAgb246IHtcbiAgICAgICAgICAgIFwiY2xpY2tcIjogX3RoaXMuX3RvZ2dsZUdyb3VwRGlyZWN0aW9uLmJpbmQoX3RoaXMpXG4gICAgICAgICAgfVxuICAgICAgICB9LCBbaChcInRkXCIsIHtcbiAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgY29sc3BhbjogX3RoaXMuY29sc3BhblxuICAgICAgICAgIH1cbiAgICAgICAgfSwgW2dyb3VwQnlDb250ZW50LCBncm91cFNsb3RdKV0pKTtcbiAgICAgICAgY3VycmVudEdyb3VwID0gcm93W190aGlzLm9wdHMuZ3JvdXBCeV07XG4gICAgICB9XG5cbiAgICAgIGlmIChfdGhpcy5vcHRzLnRvZ2dsZUdyb3VwcyAmJiBfdGhpcy5jb2xsYXBzZWRHcm91cHMuaW5jbHVkZXMoY3VycmVudEdyb3VwKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGluZGV4ID0gcmVjb3JkQ291bnQgKyBpbmRleCArIDE7XG4gICAgICBjb2x1bW5zID0gW107XG4gICAgICB2YXIgdXBkYXRlO1xuICAgICAgdmFyIGlzRWRpdGluZztcbiAgICAgIHZhciBzZXRFZGl0aW5nO1xuICAgICAgdmFyIHJldmVydFZhbHVlO1xuXG4gICAgICBpZiAoX3RoaXMuaGFzQ2hpbGRSb3cgJiYgX3RoaXMub3B0cy5zaG93Q2hpbGRSb3dUb2dnbGVyKSB7XG4gICAgICAgIHZhciBjaGlsZFJvd1RvZ2dsZXIgPSBoKFwidGRcIiwge1xuICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICB0YWJpbmRleDogXCIwXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICBcImtleXByZXNzXCI6IGZ1bmN0aW9uIGtleXByZXNzKGUpIHtcbiAgICAgICAgICAgICAgaWYgKGUua2V5ID09PSAnRW50ZXInKSB7XG4gICAgICAgICAgICAgICAgX3RoaXMudG9nZ2xlQ2hpbGRSb3cuYmluZChfdGhpcywgcm93W3Jvd0tleV0pKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBcImNsaWNrXCI6IF90aGlzLnRvZ2dsZUNoaWxkUm93LmJpbmQoX3RoaXMsIHJvd1tyb3dLZXldKVxuICAgICAgICAgIH1cbiAgICAgICAgfSwgW2goXCJzcGFuXCIsIHtcbiAgICAgICAgICBcImNsYXNzXCI6IFwiVnVlVGFibGVzX19jaGlsZC1yb3ctdG9nZ2xlciBcIiArIF90aGlzLmNoaWxkUm93VG9nZ2xlckNsYXNzKHJvd1tyb3dLZXldKVxuICAgICAgICB9KV0pO1xuICAgICAgICBpZiAoX3RoaXMub3B0cy5jaGlsZFJvd1RvZ2dsZXJGaXJzdCkgY29sdW1ucy5wdXNoKGNoaWxkUm93VG9nZ2xlcik7XG4gICAgICB9XG5cbiAgICAgIF90aGlzLmFsbENvbHVtbnMubWFwKGZ1bmN0aW9uIChjb2x1bW4pIHtcbiAgICAgICAgdmFyIHJvd1RlbXBsYXRlID0gX3RoaXMuJHNjb3BlZFNsb3RzICYmIF90aGlzLiRzY29wZWRTbG90c1tjb2x1bW5dO1xuXG4gICAgICAgIGlmIChyb3dUZW1wbGF0ZSkge1xuICAgICAgICAgIHZhciByb3dUZW1wbGF0ZURhdGEgPSB7XG4gICAgICAgICAgICByb3c6IHJvdyxcbiAgICAgICAgICAgIGNvbHVtbjogY29sdW1uLFxuICAgICAgICAgICAgaW5kZXg6IGluZGV4XG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChfdGhpcy5vcHRzLmVkaXRhYmxlQ29sdW1ucy5pbmNsdWRlcyhjb2x1bW4pKSB7XG4gICAgICAgICAgcm93VGVtcGxhdGVEYXRhLnVwZGF0ZSA9IHVwZGF0ZVZhbHVlKHJvdywgY29sdW1uKS5iaW5kKF90aGlzKTtcbiAgICAgICAgICByb3dUZW1wbGF0ZURhdGEuaXNFZGl0aW5nID0gZWRpdGluZyhyb3csIGNvbHVtbikuYmluZChfdGhpcyk7XG4gICAgICAgICAgcm93VGVtcGxhdGVEYXRhLnNldEVkaXRpbmcgPSBzZXRFZGl0KHJvdywgY29sdW1uKS5iaW5kKF90aGlzKTtcbiAgICAgICAgICByb3dUZW1wbGF0ZURhdGEucmV2ZXJ0VmFsdWUgPSByZXZlcnRWYWwocm93LCBjb2x1bW4pLmJpbmQoX3RoaXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29sdW1ucy5wdXNoKGgoXCJ0ZFwiLCB7XG4gICAgICAgICAgXCJjbGFzc1wiOiBcIlwiLmNvbmNhdChfdGhpcy5jb2x1bW5DbGFzcyhjb2x1bW4pLCBcIiBcIikuY29uY2F0KF90aGlzLl9jZWxsQ2xhc3Nlcyhjb2x1bW4sIHJvdykpLnRyaW0oKSxcbiAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgdGFiaW5kZXg6IFwiMFwiXG4gICAgICAgICAgfVxuICAgICAgICB9LCBbcm93VGVtcGxhdGUgPyByb3dUZW1wbGF0ZShyb3dUZW1wbGF0ZURhdGEpIDogX3RoaXMucmVuZGVyKHJvdywgY29sdW1uLCBpbmRleCwgaCldKSk7XG4gICAgICB9KTtcblxuICAgICAgaWYgKF90aGlzLmhhc0NoaWxkUm93ICYmICFfdGhpcy5vcHRzLmNoaWxkUm93VG9nZ2xlckZpcnN0ICYmIF90aGlzLm9wdHMuc2hvd0NoaWxkUm93VG9nZ2xlcikgY29sdW1ucy5wdXNoKGNoaWxkUm93VG9nZ2xlcik7XG4gICAgICByb3dDbGFzcyA9IF90aGlzLm9wdHMucm93Q2xhc3NDYWxsYmFjayA/IF90aGlzLm9wdHMucm93Q2xhc3NDYWxsYmFjayhyb3cpIDogJyc7XG4gICAgICByb3dBdHRyaWJ1dGVzID0gX3RoaXMub3B0cy5yb3dBdHRyaWJ1dGVzQ2FsbGJhY2sgPyBfdGhpcy5vcHRzLnJvd0F0dHJpYnV0ZXNDYWxsYmFjayhyb3cpIDoge307XG4gICAgICByb3dzLnB1c2goaChcInRyXCIsICgwLCBfYmFiZWxIZWxwZXJWdWVKc3hNZXJnZVByb3BzW1wiZGVmYXVsdFwiXSkoW3tcbiAgICAgICAgYXR0cnM6IHJvd0F0dHJpYnV0ZXNcbiAgICAgIH0sIHtcbiAgICAgICAgXCJjbGFzc1wiOiBcIlZ1ZVRhYmxlc19fcm93IFwiLmNvbmNhdChyb3dDbGFzcyksXG4gICAgICAgIG9uOiB7XG4gICAgICAgICAgXCJjbGlja1wiOiBfdGhpcy5yb3dXYXNDbGlja2VkLmJpbmQoX3RoaXMsIHJvdywgaW5kZXgpXG4gICAgICAgIH1cbiAgICAgIH1dKSwgW2NvbHVtbnMsIFwiIFwiXSkpO1xuICAgICAgcm93cy5wdXNoKF90aGlzLmhhc0NoaWxkUm93ICYmIF90aGlzLm9wZW5DaGlsZFJvd3MuaW5jbHVkZXMocm93W3Jvd0tleV0pID8gaChcInRyXCIsIHtcbiAgICAgICAgXCJjbGFzc1wiOiBcIlZ1ZVRhYmxlc19fY2hpbGQtcm93IFwiLmNvbmNhdChyb3dDbGFzcylcbiAgICAgIH0sIFtoKFwidGRcIiwge1xuICAgICAgICBhdHRyczoge1xuICAgICAgICAgIGNvbHNwYW46IF90aGlzLmNvbHNwYW4sXG4gICAgICAgICAgdGFiaW5kZXg6IFwiMFwiXG4gICAgICAgIH1cbiAgICAgIH0sIFtfdGhpcy5fZ2V0Q2hpbGRSb3dUZW1wbGF0ZShoLCByb3csIGluZGV4KV0pXSkgOiBoKCkpO1xuICAgIH0pO1xuICAgIHJldHVybiByb3dzO1xuICB9O1xufTtcblxuZnVuY3Rpb24gc2V0RWRpdChyb3csIGNvbHVtbikge1xuICByZXR1cm4gZnVuY3Rpb24gKGVkaXRpbmcpIHtcbiAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgIGlmIChlZGl0aW5nKSB7XG4gICAgICB0aGlzLmVkaXRpbmcucHVzaCh7XG4gICAgICAgIGlkOiByb3dbdGhpcy5vcHRzLnVuaXF1ZUtleV0sXG4gICAgICAgIGNvbHVtbjogY29sdW1uLFxuICAgICAgICBvcmlnaW5hbFZhbHVlOiByb3dbY29sdW1uXVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZWRpdGluZyA9IHRoaXMuZWRpdGluZy5maWx0ZXIoZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgcmV0dXJuIGUuaWQgIT09IHJvd1tfdGhpczIub3B0cy51bmlxdWVLZXldO1xuICAgICAgfSk7XG4gICAgfVxuICB9O1xufVxuXG5mdW5jdGlvbiBlZGl0aW5nKHJvdywgY29sdW1uKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgICByZXR1cm4gdGhpcy5lZGl0aW5nLmZpbmQoZnVuY3Rpb24gKGUpIHtcbiAgICAgIHJldHVybiBlLmlkID09PSByb3dbX3RoaXMzLm9wdHMudW5pcXVlS2V5XSAmJiBlLmNvbHVtbiA9PT0gY29sdW1uO1xuICAgIH0pO1xuICB9O1xufVxuXG5mdW5jdGlvbiByZXZlcnRWYWwocm93LCBjb2x1bW4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgX3RoaXM0ID0gdGhpcztcblxuICAgIHZhciBvcmlnVmFsID0gdGhpcy5lZGl0aW5nLmZpbmQoZnVuY3Rpb24gKGUpIHtcbiAgICAgIHJldHVybiBlLmlkID09PSByb3dbX3RoaXM0Lm9wdHMudW5pcXVlS2V5XTtcbiAgICB9KS5vcmlnaW5hbFZhbHVlO1xuICAgIHJvd1tjb2x1bW5dID0gb3JpZ1ZhbDtcbiAgfTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlVmFsdWUocm93LCBjb2x1bW4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChlKSB7XG4gICAgdmFyIF90aGlzNSA9IHRoaXM7XG5cbiAgICB2YXIgb2xkVmFsID0gcm93W2NvbHVtbl07XG4gICAgcm93W2NvbHVtbl0gPSBnZXRWYWx1ZShlKTtcbiAgICB2YXIgZGF0YSA9ICgwLCBfY2xvbmVbXCJkZWZhdWx0XCJdKSh0aGlzLmRhdGEpLm1hcChmdW5jdGlvbiAocikge1xuICAgICAgaWYgKHJbX3RoaXM1Lm9wdHMudW5pcXVlS2V5XSA9PT0gcm93W190aGlzNS5vcHRzLnVuaXF1ZUtleV0pIHtcbiAgICAgICAgcmV0dXJuIHJvdztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHI7XG4gICAgfSk7XG4gICAgdGhpcy4kZW1pdCgnaW5wdXQnLCBkYXRhKTtcbiAgICB0aGlzLiRlbWl0KCd1cGRhdGUnLCB7XG4gICAgICByb3c6IHJvdyxcbiAgICAgIGNvbHVtbjogY29sdW1uLFxuICAgICAgb2xkVmFsOiBvbGRWYWwsXG4gICAgICBuZXdWYWw6IHJvd1tjb2x1bW5dXG4gICAgfSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGdldFZhbHVlKHZhbCkge1xuICBpZiAodmFsLnRhcmdldCkge1xuICAgIHJldHVybiB2YWwudGFyZ2V0LnR5cGUgPT09ICdjaGVja2JveCcgPyB2YWwudGFyZ2V0LmNoZWNrZWQgOiB2YWwudGFyZ2V0LnZhbHVlO1xuICB9XG5cbiAgcmV0dXJuIHZhbDtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaCwgcmlnaHQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChjb2x1bW4pIHtcbiAgICBpZiAoIXRoaXMuc29ydGFibGUoY29sdW1uKSkgcmV0dXJuICcnO1xuICAgIHJldHVybiBoKFwic3BhblwiLCB7XG4gICAgICBcImNsYXNzXCI6IFwiVnVlVGFibGVzX19zb3J0LWljb24gXCIuY29uY2F0KHJpZ2h0LCBcIiBcIikuY29uY2F0KHRoaXMuc29ydGFibGVDaGV2cm9uQ2xhc3MoY29sdW1uKSlcbiAgICB9KTtcbiAgfTtcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBkZWJvdW5jZSA9IHJlcXVpcmUoJ2RlYm91bmNlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGgsIGlucHV0Q2xhc3MpIHtcbiAgdmFyIF90aGlzID0gdGhpcztcblxuICB2YXIgc2VhcmNoID0gdGhpcy5zb3VyY2UgPT0gJ2NsaWVudCcgPyB0aGlzLnNlYXJjaC5iaW5kKHRoaXMsIHRoaXMuZGF0YSkgOiB0aGlzLnNlcnZlclNlYXJjaC5iaW5kKHRoaXMpO1xuXG4gIGlmICh0aGlzLm9wdHMuZGVib3VuY2UpIHtcbiAgICB2YXIgZGVib3VuY2VkU2VhcmNoID0gZGVib3VuY2Uoc2VhcmNoLCB0aGlzLm9wdHMuZGVib3VuY2UpO1xuXG4gICAgdmFyIG9uS2V5VXAgPSBmdW5jdGlvbiBvbktleVVwKGUpIHtcbiAgICAgIGlmIChlLmtleUNvZGUgPT09IDkpIHJldHVybjtcblxuICAgICAgaWYgKGUua2V5Q29kZSA9PT0gMTMpIHtcbiAgICAgICAgZGVib3VuY2VkU2VhcmNoLmNsZWFyKCk7XG4gICAgICAgIHNlYXJjaC5hcHBseSh2b2lkIDAsIGFyZ3VtZW50cyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZWJvdW5jZWRTZWFyY2guYXBwbHkodm9pZCAwLCBhcmd1bWVudHMpO1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb24gKGNvbHVtbikge1xuICAgIHJldHVybiBoKFwiaW5wdXRcIiwge1xuICAgICAgb246IHtcbiAgICAgICAgXCJrZXl1cFwiOiBfdGhpcy5vcHRzLmRlYm91bmNlID8gb25LZXlVcCA6IHNlYXJjaFxuICAgICAgfSxcbiAgICAgIFwiY2xhc3NcIjogaW5wdXRDbGFzcyxcbiAgICAgIGF0dHJzOiB7XG4gICAgICAgIG5hbWU6IF90aGlzLl9nZXRDb2x1bW5OYW1lKGNvbHVtbiksXG4gICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICBwbGFjZWhvbGRlcjogX3RoaXMuZGlzcGxheSgnZmlsdGVyQnknLCB7XG4gICAgICAgICAgY29sdW1uOiBfdGhpcy5nZXRIZWFkaW5nKGNvbHVtbilcbiAgICAgICAgfSksXG4gICAgICAgIGF1dG9jb21wbGV0ZTogXCJvZmZcIlxuICAgICAgfVxuICAgIH0pO1xuICB9O1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB7XG4gICAgYmVmb3JlRmlsdGVyczogdGhpcy4kc2xvdHMuYmVmb3JlRmlsdGVycyA/IHRoaXMuJHNsb3RzLmJlZm9yZUZpbHRlcnMgOiAnJyxcbiAgICBhZnRlckZpbHRlcnM6IHRoaXMuJHNsb3RzLmFmdGVyRmlsdGVycyA/IHRoaXMuJHNsb3RzLmFmdGVyRmlsdGVycyA6ICcnLFxuICAgIHByZXBlbmRIZWFkOiB0aGlzLiRzbG90cy5wcmVwZW5kSGVhZCA/IHRoaXMuJHNsb3RzLnByZXBlbmRIZWFkIDogJycsXG4gICAgYmVmb3JlQm9keTogdGhpcy4kc2xvdHMuYmVmb3JlQm9keSA/IHRoaXMuJHNsb3RzLmJlZm9yZUJvZHkgOiAnJyxcbiAgICBwcmVwZW5kQm9keTogdGhpcy4kc2xvdHMucHJlcGVuZEJvZHkgPyB0aGlzLiRzbG90cy5wcmVwZW5kQm9keSA6ICcnLFxuICAgIGFwcGVuZEJvZHk6IHRoaXMuJHNsb3RzLmFwcGVuZEJvZHkgPyB0aGlzLiRzbG90cy5hcHBlbmRCb2R5IDogJycsXG4gICAgYWZ0ZXJCb2R5OiB0aGlzLiRzbG90cy5hZnRlckJvZHkgPyB0aGlzLiRzbG90cy5hZnRlckJvZHkgOiAnJyxcbiAgICBiZWZvcmVGaWx0ZXI6IHRoaXMuJHNsb3RzLmJlZm9yZUZpbHRlciA/IHRoaXMuJHNsb3RzLmJlZm9yZUZpbHRlciA6ICcnLFxuICAgIGFmdGVyRmlsdGVyOiB0aGlzLiRzbG90cy5hZnRlckZpbHRlciA/IHRoaXMuJHNsb3RzLmFmdGVyRmlsdGVyIDogJycsXG4gICAgYWZ0ZXJGaWx0ZXJXcmFwcGVyOiB0aGlzLiRzbG90cy5hZnRlckZpbHRlcldyYXBwZXIgPyB0aGlzLiRzbG90cy5hZnRlckZpbHRlcldyYXBwZXIgOiAnJyxcbiAgICBiZWZvcmVTZWFyY2g6IHRoaXMuJHNsb3RzLmJlZm9yZVNlYXJjaCA/IHRoaXMuJHNsb3RzLmJlZm9yZVNlYXJjaCA6ICcnLFxuICAgIGJlZm9yZUxpbWl0OiB0aGlzLiRzbG90cy5iZWZvcmVMaW1pdCA/IHRoaXMuJHNsb3RzLmJlZm9yZUxpbWl0IDogJycsXG4gICAgYWZ0ZXJMaW1pdDogdGhpcy4kc2xvdHMuYWZ0ZXJMaW1pdCA/IHRoaXMuJHNsb3RzLmFmdGVyTGltaXQgOiAnJyxcbiAgICBiZWZvcmVUYWJsZTogdGhpcy4kc2xvdHMuYmVmb3JlVGFibGUgPyB0aGlzLiRzbG90cy5iZWZvcmVUYWJsZSA6ICcnLFxuICAgIGFmdGVyVGFibGU6IHRoaXMuJHNsb3RzLmFmdGVyVGFibGUgPyB0aGlzLiRzbG90cy5hZnRlclRhYmxlIDogJydcbiAgfTtcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IF9kZWZhdWx0O1xuXG52YXIgX21lcmdlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwibWVyZ2VcIikpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBcImRlZmF1bHRcIjogb2JqIH07IH1cblxuZnVuY3Rpb24gX2RlZmF1bHQodXNlVnVleCwgc291cmNlKSB7XG4gIHZhciBwYWdlID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiAxO1xuICB2YXIgZGF0YSA9IHtcbiAgICB2dWV4OiB0cnVlLFxuICAgIGFjdGl2ZVN0YXRlOiBmYWxzZSxcbiAgICB1c2VyQ29sdW1uc0Rpc3BsYXk6IFtdLFxuICAgIHVzZXJDb250cm9sc0NvbHVtbnM6IGZhbHNlLFxuICAgIGRpc3BsYXlDb2x1bW5zRHJvcGRvd246IGZhbHNlLFxuICAgIGNvbGxhcHNlZEdyb3VwczogW11cbiAgfTtcbiAgaWYgKHVzZVZ1ZXgpIHJldHVybiBkYXRhO1xuICBkYXRhID0gKDAsIF9tZXJnZVtcImRlZmF1bHRcIl0pKGRhdGEsIHtcbiAgICB2dWV4OiBmYWxzZSxcbiAgICBjb3VudDogMCxcbiAgICBjdXN0b21RdWVyaWVzOiB7fSxcbiAgICBxdWVyeTogbnVsbCxcbiAgICBwYWdlOiBwYWdlLFxuICAgIGxpbWl0OiAxMCxcbiAgICB3aW5kb3dXaWR0aDogdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgPyB3aW5kb3cuaW5uZXJXaWR0aCA6IG51bGwsXG4gICAgb3JkZXJCeToge1xuICAgICAgY29sdW1uOiBmYWxzZSxcbiAgICAgIGFzY2VuZGluZzogdHJ1ZVxuICAgIH1cbiAgfSk7XG4gIGlmIChzb3VyY2UgPT0gJ3NlcnZlcicpIGRhdGEuZGF0YSA9IFtdO1xuICByZXR1cm4gZGF0YTtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gX2RlZmF1bHQ7XG5cbnZhciBfbWVyZ2UgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCJtZXJnZVwiKSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IFwiZGVmYXVsdFwiOiBvYmogfTsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG5mdW5jdGlvbiBfZGVmYXVsdChzZWxmKSB7XG4gIHZhciBfcmVmLCBfbWVyZ2UkcmVjdXJzaXZlO1xuXG4gIHZhciBleHRyYSA9IHNlbGYuc291cmNlID09ICdzZXJ2ZXInID8gKF9yZWYgPSB7fSwgX2RlZmluZVByb3BlcnR5KF9yZWYsIFwiXCIuY29uY2F0KHNlbGYubmFtZSwgXCIvU0VUX0RBVEFcIiksIGZ1bmN0aW9uIFNFVF9EQVRBKHN0YXRlLCByZXNwb25zZSkge1xuICAgIHZhciBkYXRhID0gc2VsZi5vcHRzLnJlc3BvbnNlQWRhcHRlci5jYWxsKHNlbGYsIHJlc3BvbnNlKTtcbiAgICBzdGF0ZS5kYXRhID0gZGF0YS5kYXRhO1xuICAgIHN0YXRlLmNvdW50ID0gcGFyc2VJbnQoZGF0YS5jb3VudCk7XG4gIH0pLCBfZGVmaW5lUHJvcGVydHkoX3JlZiwgXCJcIi5jb25jYXQoc2VsZi5uYW1lLCBcIi9MT0FESU5HXCIpLCBmdW5jdGlvbiBMT0FESU5HKHN0YXRlLCBwYXlsb2FkKSB7fSksIF9kZWZpbmVQcm9wZXJ0eShfcmVmLCBcIlwiLmNvbmNhdChzZWxmLm5hbWUsIFwiL0xPQURFRFwiKSwgZnVuY3Rpb24gTE9BREVEKHN0YXRlLCBwYXlsb2FkKSB7fSksIF9kZWZpbmVQcm9wZXJ0eShfcmVmLCBcIlwiLmNvbmNhdChzZWxmLm5hbWUsIFwiL0VSUk9SXCIpLCBmdW5jdGlvbiBFUlJPUihzdGF0ZSwgcGF5bG9hZCkge30pLCBfcmVmKSA6IF9kZWZpbmVQcm9wZXJ0eSh7fSwgXCJcIi5jb25jYXQoc2VsZi5uYW1lLCBcIi9TRVRfQ09VTlRcIiksIGZ1bmN0aW9uIFNFVF9DT1VOVChzdGF0ZSwgY291bnQpIHtcbiAgICBzdGF0ZS5jb3VudCA9IGNvdW50O1xuICB9KTtcbiAgcmV0dXJuIF9tZXJnZVtcImRlZmF1bHRcIl0ucmVjdXJzaXZlKHRydWUsIChfbWVyZ2UkcmVjdXJzaXZlID0ge30sIF9kZWZpbmVQcm9wZXJ0eShfbWVyZ2UkcmVjdXJzaXZlLCBcIlwiLmNvbmNhdChzZWxmLm5hbWUsIFwiL1BBR0lOQVRFXCIpLCBmdW5jdGlvbiBQQUdJTkFURShzdGF0ZSwgcGFnZSkge1xuICAgIHN0YXRlLnBhZ2UgPSBwYWdlO1xuICAgIHNlbGYudXBkYXRlU3RhdGUoJ3BhZ2UnLCBwYWdlKTtcbiAgICBpZiAoc2VsZi5zb3VyY2UgPT0gJ3NlcnZlcicpIHNlbGYuZ2V0RGF0YSgpO1xuICAgIHNlbGYuY29tbWl0KCdQQUdJTkFUSU9OJywgcGFnZSk7XG4gIH0pLCBfZGVmaW5lUHJvcGVydHkoX21lcmdlJHJlY3Vyc2l2ZSwgXCJcIi5jb25jYXQoc2VsZi5uYW1lLCBcIi9TRVRfRklMVEVSXCIpLCBmdW5jdGlvbiBTRVRfRklMVEVSKHN0YXRlLCBmaWx0ZXIpIHtcbiAgICBzdGF0ZS5wYWdlID0gMTtcbiAgICBzZWxmLnVwZGF0ZVN0YXRlKCdwYWdlJywgMSk7XG4gICAgc3RhdGUucXVlcnkgPSBmaWx0ZXI7XG5cbiAgICBpZiAoc2VsZi5zb3VyY2UgPT0gJ3NlcnZlcicpIHtcbiAgICAgIHNlbGYuZ2V0RGF0YSgpO1xuICAgIH1cbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfbWVyZ2UkcmVjdXJzaXZlLCBcIlwiLmNvbmNhdChzZWxmLm5hbWUsIFwiL1BBR0lOQVRJT05cIiksIGZ1bmN0aW9uIFBBR0lOQVRJT04oc3RhdGUsIHBhZ2UpIHt9KSwgX2RlZmluZVByb3BlcnR5KF9tZXJnZSRyZWN1cnNpdmUsIFwiXCIuY29uY2F0KHNlbGYubmFtZSwgXCIvU0VUX0NVU1RPTV9GSUxURVJcIiksIGZ1bmN0aW9uIFNFVF9DVVNUT01fRklMVEVSKHN0YXRlLCBfcmVmMykge1xuICAgIHZhciBmaWx0ZXIgPSBfcmVmMy5maWx0ZXIsXG4gICAgICAgIHZhbHVlID0gX3JlZjMudmFsdWU7XG4gICAgc3RhdGUuY3VzdG9tUXVlcmllc1tmaWx0ZXJdID0gdmFsdWU7XG4gICAgc3RhdGUucGFnZSA9IDE7XG4gICAgc2VsZi51cGRhdGVTdGF0ZSgncGFnZScsIDEpO1xuICAgIHNlbGYudXBkYXRlU3RhdGUoJ2N1c3RvbVF1ZXJpZXMnLCBzdGF0ZS5jdXN0b21RdWVyaWVzKTtcblxuICAgIGlmIChzZWxmLnNvdXJjZSA9PSAnc2VydmVyJykge1xuICAgICAgc2VsZi5nZXREYXRhKCk7XG4gICAgfVxuICB9KSwgX2RlZmluZVByb3BlcnR5KF9tZXJnZSRyZWN1cnNpdmUsIFwiXCIuY29uY2F0KHNlbGYubmFtZSwgXCIvU0VUX1NUQVRFXCIpLCBmdW5jdGlvbiBTRVRfU1RBVEUoc3RhdGUsIF9yZWY0KSB7XG4gICAgdmFyIHBhZ2UgPSBfcmVmNC5wYWdlLFxuICAgICAgICBxdWVyeSA9IF9yZWY0LnF1ZXJ5LFxuICAgICAgICBjdXN0b21RdWVyaWVzID0gX3JlZjQuY3VzdG9tUXVlcmllcyxcbiAgICAgICAgbGltaXQgPSBfcmVmNC5saW1pdCxcbiAgICAgICAgb3JkZXJCeSA9IF9yZWY0Lm9yZGVyQnk7XG4gICAgc3RhdGUuY3VzdG9tUXVlcmllcyA9IGN1c3RvbVF1ZXJpZXM7XG4gICAgc3RhdGUucXVlcnkgPSBxdWVyeTtcbiAgICBzdGF0ZS5wYWdlID0gcGFnZTtcbiAgICBzdGF0ZS5saW1pdCA9IGxpbWl0O1xuICAgIHN0YXRlLmFzY2VuZGluZyA9IG9yZGVyQnkuYXNjZW5kaW5nO1xuICAgIHN0YXRlLnNvcnRCeSA9IG9yZGVyQnkuY29sdW1uO1xuICB9KSwgX2RlZmluZVByb3BlcnR5KF9tZXJnZSRyZWN1cnNpdmUsIFwiXCIuY29uY2F0KHNlbGYubmFtZSwgXCIvU0VUX0xJTUlUXCIpLCBmdW5jdGlvbiBTRVRfTElNSVQoc3RhdGUsIGxpbWl0KSB7XG4gICAgc3RhdGUucGFnZSA9IDE7XG4gICAgc2VsZi51cGRhdGVTdGF0ZSgncGFnZScsIDEpO1xuICAgIHN0YXRlLmxpbWl0ID0gbGltaXQ7XG4gICAgaWYgKHNlbGYuc291cmNlID09ICdzZXJ2ZXInKSBzZWxmLmdldERhdGEoKTtcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfbWVyZ2UkcmVjdXJzaXZlLCBcIlwiLmNvbmNhdChzZWxmLm5hbWUsIFwiL1NPUlRcIiksIGZ1bmN0aW9uIFNPUlQoc3RhdGUsIF9yZWY1KSB7XG4gICAgdmFyIGNvbHVtbiA9IF9yZWY1LmNvbHVtbixcbiAgICAgICAgYXNjZW5kaW5nID0gX3JlZjUuYXNjZW5kaW5nO1xuICAgIHN0YXRlLmFzY2VuZGluZyA9IGFzY2VuZGluZztcbiAgICBzdGF0ZS5zb3J0QnkgPSBjb2x1bW47XG4gICAgaWYgKHNlbGYuc291cmNlID09ICdzZXJ2ZXInKSBzZWxmLmdldERhdGEoKTtcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfbWVyZ2UkcmVjdXJzaXZlLCBcIlwiLmNvbmNhdChzZWxmLm5hbWUsIFwiL1NPUlRFRFwiKSwgZnVuY3Rpb24gU09SVEVEKHN0YXRlLCBkYXRhKSB7fSksIF9kZWZpbmVQcm9wZXJ0eShfbWVyZ2UkcmVjdXJzaXZlLCBcIlwiLmNvbmNhdChzZWxmLm5hbWUsIFwiL1JPV19DTElDS1wiKSwgZnVuY3Rpb24gUk9XX0NMSUNLKHN0YXRlLCByb3cpIHt9KSwgX2RlZmluZVByb3BlcnR5KF9tZXJnZSRyZWN1cnNpdmUsIFwiXCIuY29uY2F0KHNlbGYubmFtZSwgXCIvRklMVEVSXCIpLCBmdW5jdGlvbiBGSUxURVIoc3RhdGUsIHJvdykge30pLCBfZGVmaW5lUHJvcGVydHkoX21lcmdlJHJlY3Vyc2l2ZSwgXCJcIi5jb25jYXQoc2VsZi5uYW1lLCBcIi9MSU1JVFwiKSwgZnVuY3Rpb24gTElNSVQoc3RhdGUsIGxpbWl0KSB7fSksIF9tZXJnZSRyZWN1cnNpdmUpLCBleHRyYSk7XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IF9kZWZhdWx0O1xuXG5mdW5jdGlvbiBfZGVmYXVsdCgpIHtcbiAgcmV0dXJuIHtcbiAgICBjb21wdXRlZDoge1xuICAgICAgQ29sdW1uczogZnVuY3Rpb24gQ29sdW1ucygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29sdW1ucztcbiAgICAgIH1cbiAgICB9XG4gIH07XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBfc3RhdGUgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3N0YXRlXCIpKTtcblxudmFyIF9tdXRhdGlvbnMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL211dGF0aW9uc1wiKSk7XG5cbnZhciBfbWVyZ2UgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCJtZXJnZVwiKSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IFwiZGVmYXVsdFwiOiBvYmogfTsgfVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChzZWxmKSB7XG4gIHZhciBNb2R1bGUgPSB7XG4gICAgc3RhdGU6ICgwLCBfc3RhdGVbXCJkZWZhdWx0XCJdKShzZWxmKSxcbiAgICBtdXRhdGlvbnM6ICgwLCBfbXV0YXRpb25zW1wiZGVmYXVsdFwiXSkoc2VsZilcbiAgfTtcblxuICBpZiAoc2VsZi4kc3RvcmUgJiYgc2VsZi4kc3RvcmUuc3RhdGUgJiYgc2VsZi4kc3RvcmUuc3RhdGVbc2VsZi5uYW1lXSkge1xuICAgIE1vZHVsZS5zdGF0ZSA9IF9tZXJnZVtcImRlZmF1bHRcIl0ucmVjdXJzaXZlKE1vZHVsZS5zdGF0ZSwgc2VsZi4kc3RvcmUuc3RhdGVbc2VsZi5uYW1lXSk7XG4gICAgc2VsZi4kc3RvcmUudW5yZWdpc3Rlck1vZHVsZShzZWxmLm5hbWUpO1xuICB9XG5cbiAgc2VsZi4kc3RvcmUucmVnaXN0ZXJNb2R1bGUoc2VsZi5uYW1lLCBNb2R1bGUpO1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gX2RlZmF1bHQ7XG5cbnZhciBfbWVyZ2UgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCJtZXJnZVwiKSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IFwiZGVmYXVsdFwiOiBvYmogfTsgfVxuXG5mdW5jdGlvbiBfZGVmYXVsdChzZWxmKSB7XG4gIHZhciBzdGF0ZSA9IHtcbiAgICBwYWdlOiBzZWxmLm9wdHMuaW5pdGlhbFBhZ2UgPyBzZWxmLm9wdHMuaW5pdGlhbFBhZ2UgOiAxLFxuICAgIGxpbWl0OiBzZWxmLm9wdHMucGVyUGFnZSxcbiAgICBjb3VudDogc2VsZi5zb3VyY2UgPT0gJ3NlcnZlcicgPyAwIDogc2VsZi5kYXRhLmxlbmd0aCxcbiAgICBjb2x1bW5zOiBzZWxmLmNvbHVtbnMsXG4gICAgZGF0YTogc2VsZi5zb3VyY2UgPT0gJ2NsaWVudCcgPyBzZWxmLmRhdGEgOiBbXSxcbiAgICBxdWVyeTogc2VsZi5pbml0UXVlcnkoKSxcbiAgICBjdXN0b21RdWVyaWVzOiBzZWxmLmluaXRDdXN0b21GaWx0ZXJzKCksXG4gICAgc29ydEJ5OiBzZWxmLm9wdHMub3JkZXJCeSAmJiBzZWxmLm9wdHMub3JkZXJCeS5jb2x1bW4gPyBzZWxmLm9wdHMub3JkZXJCeS5jb2x1bW4gOiBmYWxzZSxcbiAgICBhc2NlbmRpbmc6IHNlbGYub3B0cy5vcmRlckJ5ICYmIHNlbGYub3B0cy5vcmRlckJ5Lmhhc093blByb3BlcnR5KCdhc2NlbmRpbmcnKSA/IHNlbGYub3B0cy5vcmRlckJ5LmFzY2VuZGluZyA6IHRydWVcbiAgfTtcblxuICBpZiAodHlwZW9mIHNlbGYuJHN0b3JlLnN0YXRlW3NlbGYubmFtZV0gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuICgwLCBfbWVyZ2VbXCJkZWZhdWx0XCJdKSh0cnVlLCBzZWxmLiRzdG9yZS5zdGF0ZVtzZWxmLm5hbWVdLCBzdGF0ZSk7XG4gIH1cblxuICByZXR1cm4gc3RhdGU7XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IF9kZWZhdWx0O1xuXG52YXIgX21lcmdlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwibWVyZ2VcIikpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBcImRlZmF1bHRcIjogb2JqIH07IH1cblxuZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxuZnVuY3Rpb24gX2RlZmF1bHQoc291cmNlKSB7XG4gIHZhciBleHRyYSA9IHNvdXJjZSA9PSAnc2VydmVyJyA/IHNlcnZlckV4dHJhKCkgOiBjbGllbnRFeHRyYSgpO1xuICByZXR1cm4gX21lcmdlW1wiZGVmYXVsdFwiXS5yZWN1cnNpdmUodHJ1ZSwge1xuICAgIHByb3BzOiB7XG4gICAgICBuYW1lOiB7XG4gICAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICAgIH1cbiAgICB9LFxuICAgIGNvbXB1dGVkOiB7XG4gICAgICBzdGF0ZTogZnVuY3Rpb24gc3RhdGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiRzdG9yZS5zdGF0ZVt0aGlzLm5hbWVdO1xuICAgICAgfSxcbiAgICAgIFBhZ2U6IGZ1bmN0aW9uIFBhZ2UoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0YXRlLnBhZ2U7XG4gICAgICB9LFxuICAgICAgY291bnQ6IGZ1bmN0aW9uIGNvdW50KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zdGF0ZS5jb3VudDtcbiAgICAgIH0sXG4gICAgICBDb2x1bW5zOiBmdW5jdGlvbiBDb2x1bW5zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zdGF0ZS5jb2x1bW5zO1xuICAgICAgfSxcbiAgICAgIHRhYmxlRGF0YTogZnVuY3Rpb24gdGFibGVEYXRhKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zdGF0ZS5kYXRhO1xuICAgICAgfSxcbiAgICAgIHBhZ2U6IGZ1bmN0aW9uIHBhZ2UoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0YXRlLnBhZ2U7XG4gICAgICB9LFxuICAgICAgbGltaXQ6IGZ1bmN0aW9uIGxpbWl0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zdGF0ZS5saW1pdDtcbiAgICAgIH0sXG4gICAgICBjdXN0b21RdWVyaWVzOiBmdW5jdGlvbiBjdXN0b21RdWVyaWVzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zdGF0ZS5jdXN0b21RdWVyaWVzO1xuICAgICAgfSxcbiAgICAgIHF1ZXJ5OiBmdW5jdGlvbiBxdWVyeSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhdGUucXVlcnk7XG4gICAgICB9LFxuICAgICAgb3JkZXJCeTogZnVuY3Rpb24gb3JkZXJCeSgpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjb2x1bW46IHRoaXMuc3RhdGUuc29ydEJ5LFxuICAgICAgICAgIGFzY2VuZGluZzogdGhpcy5zdGF0ZS5hc2NlbmRpbmdcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9LFxuICAgIG1ldGhvZHM6IHtcbiAgICAgIGNvbW1pdDogZnVuY3Rpb24gY29tbWl0KGFjdGlvbiwgcGF5bG9hZCkge1xuICAgICAgICByZXR1cm4gdGhpcy4kc3RvcmUuY29tbWl0KFwiXCIuY29uY2F0KHRoaXMubmFtZSwgXCIvXCIpLmNvbmNhdChhY3Rpb24pLCBwYXlsb2FkKTtcbiAgICAgIH0sXG4gICAgICBvcmRlckJ5Q29sdW1uOiBmdW5jdGlvbiBvcmRlckJ5Q29sdW1uKGNvbHVtbiwgZXYpIHtcbiAgICAgICAgaWYgKCF0aGlzLnNvcnRhYmxlKGNvbHVtbikpIHJldHVybjtcblxuICAgICAgICBpZiAoZXYuc2hpZnRLZXkgJiYgdGhpcy5vcmRlckJ5LmNvbHVtbiAmJiB0aGlzLmhhc011bHRpU29ydCkge1xuICAgICAgICAgIHRoaXMuc2V0VXNlck11bHRpU29ydChjb2x1bW4pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhciBhc2NlbmRpbmcgPSB0aGlzLm9yZGVyQnkuY29sdW1uID09PSBjb2x1bW4gPyAhdGhpcy5vcmRlckJ5LmFzY2VuZGluZyA6IHRoaXMuX2luaXRpYWxPcmRlckFzY2VuZGluZyhjb2x1bW4pO1xuICAgICAgICAgIHZhciBvcmRlckJ5ID0ge1xuICAgICAgICAgICAgY29sdW1uOiBjb2x1bW4sXG4gICAgICAgICAgICBhc2NlbmRpbmc6IGFzY2VuZGluZ1xuICAgICAgICAgIH07XG4gICAgICAgICAgdGhpcy51cGRhdGVTdGF0ZSgnb3JkZXJCeScsIG9yZGVyQnkpO1xuICAgICAgICAgIHRoaXMuY29tbWl0KCdTT1JUJywgb3JkZXJCeSk7XG4gICAgICAgICAgdGhpcy5kaXNwYXRjaCgnc29ydGVkJywgb3JkZXJCeSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBzZXRMaW1pdDogZnVuY3Rpb24gc2V0TGltaXQoZSkge1xuICAgICAgICB2YXIgbGltaXQgPSBfdHlwZW9mKGUpID09PSAnb2JqZWN0JyA/IHBhcnNlSW50KGUudGFyZ2V0LnZhbHVlKSA6IGU7XG4gICAgICAgIHRoaXMudXBkYXRlU3RhdGUoJ3BlclBhZ2UnLCBsaW1pdCk7XG4gICAgICAgIHRoaXMuY29tbWl0KFwiU0VUX0xJTUlUXCIsIGxpbWl0KTtcbiAgICAgICAgdGhpcy5kaXNwYXRjaChcImxpbWl0XCIsIGxpbWl0KTtcbiAgICAgIH0sXG4gICAgICBzZXRPcmRlcjogZnVuY3Rpb24gc2V0T3JkZXIoY29sdW1uLCBhc2NlbmRpbmcpIHtcbiAgICAgICAgdGhpcy51cGRhdGVTdGF0ZSgnb3JkZXJCeScsIHtcbiAgICAgICAgICBjb2x1bW46IGNvbHVtbixcbiAgICAgICAgICBhc2NlbmRpbmc6IGFzY2VuZGluZ1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5jb21taXQoJ1NPUlQnLCB7XG4gICAgICAgICAgY29sdW1uOiBjb2x1bW4sXG4gICAgICAgICAgYXNjZW5kaW5nOiBhc2NlbmRpbmdcbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgICAgc2V0UGFnZTogZnVuY3Rpb24gc2V0UGFnZShwYWdlKSB7XG4gICAgICAgIGlmICghcGFnZSkge1xuICAgICAgICAgIHBhZ2UgPSB0aGlzLiRyZWZzLnBhZ2UudmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMub3B0cy5wYWdpbmF0aW9uLmRyb3Bkb3duKSB0aGlzLiRyZWZzLnBhZ2luYXRpb24uUGFnZSA9IHBhZ2U7XG4gICAgICAgIHRoaXMuY29tbWl0KFwiUEFHSU5BVEVcIiwgcGFnZSk7XG4gICAgICB9XG4gICAgfVxuICB9LCBleHRyYSk7XG59XG5cbmZ1bmN0aW9uIHNlcnZlckV4dHJhKCkge1xuICByZXR1cm4ge1xuICAgIG1ldGhvZHM6IHtcbiAgICAgIHNldERhdGE6IGZ1bmN0aW9uIHNldERhdGEoZGF0YSkge1xuICAgICAgICB0aGlzLmNvbW1pdCgnU0VUX0RBVEEnLCBkYXRhKTtcbiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgdGhpcy5kaXNwYXRjaCgnbG9hZGVkJywgZGF0YSk7XG4gICAgICAgIH0uYmluZCh0aGlzKSwgMCk7XG4gICAgICB9XG4gICAgfVxuICB9O1xufVxuXG5mdW5jdGlvbiBjbGllbnRFeHRyYSgpIHtcbiAgcmV0dXJuIHt9O1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBfZGVmYXVsdDtcblxudmFyIG1ldGhvZHMgPSByZXF1aXJlKFwiLi9taXhpbnMvbWV0aG9kc1wiKTtcblxudmFyIGNvbXB1dGVkID0gcmVxdWlyZShcIi4vbWl4aW5zL2NvbXB1dGVkXCIpO1xuXG52YXIgYmVmb3JlRGVzdHJveSA9IHJlcXVpcmUoXCIuL21peGlucy9iZWZvcmUtZGVzdHJveVwiKTtcblxuZnVuY3Rpb24gX2RlZmF1bHQoKSB7XG4gIHJldHVybiB7XG4gICAgbWV0aG9kczogbWV0aG9kcyxcbiAgICBjb21wdXRlZDogY29tcHV0ZWQsXG4gICAgYmVmb3JlRGVzdHJveTogYmVmb3JlRGVzdHJveVxuICB9O1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5mdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0ZW1wbGF0ZSwgdGhlbWUpIHtcbiAgdmFyIHRoZW1lcyA9IHtcbiAgICBib290c3RyYXAzOiByZXF1aXJlKCcuL3RoZW1lcy9ib290c3RyYXAzJykoKSxcbiAgICBib290c3RyYXA0OiByZXF1aXJlKCcuL3RoZW1lcy9ib290c3RyYXA0JykoKSxcbiAgICBidWxtYTogcmVxdWlyZSgnLi90aGVtZXMvYnVsbWEnKSgpXG4gIH07XG4gIHZhciB0ZW1wbGF0ZXMgPSB7XG4gICAgXCJkZWZhdWx0XCI6IHJlcXVpcmUoJy4vdGVtcGxhdGVzL2RlZmF1bHQnKSxcbiAgICBmb290ZXJQYWdpbmF0aW9uOiByZXF1aXJlKCcuL3RlbXBsYXRlcy9mb290ZXItcGFnaW5hdGlvbicpXG4gIH07XG4gIHJldHVybiBmdW5jdGlvbiAoaCkge1xuICAgIHZhciBtb2R1bGVzID0ge1xuICAgICAgcm93czogcmVxdWlyZSgnLi9tb2R1bGVzL3Jvd3MnKS5jYWxsKHRoaXMsIGgpLFxuICAgICAgbm9ybWFsRmlsdGVyOiByZXF1aXJlKCcuL21vZHVsZXMvbm9ybWFsLWZpbHRlcicpLmNhbGwodGhpcywgaCksXG4gICAgICBkcm9wZG93blBhZ2luYXRpb246IHJlcXVpcmUoJy4vbW9kdWxlcy9kcm9wZG93bi1wYWdpbmF0aW9uJykuY2FsbCh0aGlzLCBoKSxcbiAgICAgIGRyb3Bkb3duUGFnaW5hdGlvbkNvdW50OiByZXF1aXJlKCcuL21vZHVsZXMvZHJvcGRvd24tcGFnaW5hdGlvbi1jb3VudCcpLmNhbGwodGhpcywgaCksXG4gICAgICBjb2x1bW5GaWx0ZXJzOiByZXF1aXJlKCcuL21vZHVsZXMvY29sdW1uLWZpbHRlcnMnKS5jYWxsKHRoaXMsIGgpLFxuICAgICAgcGFnaW5hdGlvbjogcmVxdWlyZSgnLi9tb2R1bGVzL3BhZ2luYXRpb24nKS5jYWxsKHRoaXMsIGgpLFxuICAgICAgaGVhZGluZ3M6IHJlcXVpcmUoJy4vbW9kdWxlcy9oZWFkaW5ncycpLmNhbGwodGhpcywgaCksXG4gICAgICBwZXJQYWdlOiByZXF1aXJlKCcuL21vZHVsZXMvcGVyLXBhZ2UnKS5jYWxsKHRoaXMsIGgpLFxuICAgICAgY29sdW1uc0Ryb3Bkb3duOiByZXF1aXJlKCcuL21vZHVsZXMvY29sdW1ucy1kcm9wZG93bicpLmNhbGwodGhpcywgaClcbiAgICB9O1xuXG4gICAgaWYgKHR5cGVvZiB0ZW1wbGF0ZSA9PT0gJ3N0cmluZycgJiYgKCF0ZW1wbGF0ZXNbdGVtcGxhdGVdIHx8IHR5cGVvZiB0ZW1wbGF0ZXNbdGVtcGxhdGVdICE9PSAnZnVuY3Rpb24nKSkge1xuICAgICAgdGhyb3cgXCJ2dWUtdGFibGVzLTI6IFRlbXBsYXRlIFxcXCJcIi5jb25jYXQodGVtcGxhdGUsIFwiXFxcIiBkb2VzIG5vdCBleGlzdFwiKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHRoZW1lID09PSAnc3RyaW5nJyAmJiAoIXRoZW1lc1t0aGVtZV0gfHwgX3R5cGVvZih0aGVtZXNbdGhlbWVdKSAhPT0gJ29iamVjdCcpKSB7XG4gICAgICB0aHJvdyBcInZ1ZS10YWJsZXMtMjogVGhlbWUgXFxcIlwiLmNvbmNhdCh0aGVtZSwgXCJcXFwiIGRvZXMgbm90IGV4aXN0XCIpO1xuICAgIH1cblxuICAgIHZhciB0cGwgPSB0eXBlb2YgdGVtcGxhdGUgPT09ICdzdHJpbmcnID8gdGVtcGxhdGVzW3RlbXBsYXRlXSA6IHRlbXBsYXRlO1xuICAgIHZhciB0aG0gPSB0eXBlb2YgdGhlbWUgPT09ICdzdHJpbmcnID8gdGhlbWVzW3RoZW1lXSA6IHRoZW1lKCk7XG5cbiAgICB2YXIgc2xvdHMgPSByZXF1aXJlKCcuL3Nsb3RzJykuY2FsbCh0aGlzKTtcblxuICAgIHJldHVybiB0cGwuY2FsbCh0aGlzLCBoLCBtb2R1bGVzLCB0aG0sIHNsb3RzKTtcbiAgfTtcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBfbWVyZ2UgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCJtZXJnZVwiKSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IFwiZGVmYXVsdFwiOiBvYmogfTsgfVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChoLCBtb2R1bGVzLCBjbGFzc2VzLCBzbG90cykge1xuICB2YXIgZmlsdGVySWQgPSBcIlZ1ZVRhYmxlc19fc2VhcmNoX1wiICsgdGhpcy5pZDtcbiAgdmFyIGRkcElkID0gXCJWdWVUYWJsZXNfX2Ryb3Bkb3duLXBhZ2luYXRpb25fXCIgKyB0aGlzLmlkO1xuICB2YXIgcGVycGFnZUlkID0gXCJWdWVUYWJsZXNfX2xpbWl0X1wiICsgdGhpcy5pZDtcblxuICB2YXIgcGVycGFnZVZhbHVlcyA9IHJlcXVpcmUoXCIuLi9tb2R1bGVzL3Blci1wYWdlLXZhbHVlc1wiKS5jYWxsKHRoaXMsIGgpO1xuXG4gIHZhciBjYXB0aW9uID0gdGhpcy5vcHRzLmNhcHRpb24gPyBoKFwiY2FwdGlvblwiLCBbdGhpcy5vcHRzLmNhcHRpb25dKSA6ICcnO1xuICB2YXIgZ2VuZXJpY0ZpbHRlciA9IHRoaXMuaGFzR2VuZXJpY0ZpbHRlciA/IGgoXCJkaXZcIiwge1xuICAgIFwiY2xhc3NcIjogXCJWdWVUYWJsZXNfX3NlYXJjaC1maWVsZFwiXG4gIH0sIFtoKFwibGFiZWxcIiwge1xuICAgIGF0dHJzOiB7XG4gICAgICBcImZvclwiOiBmaWx0ZXJJZFxuICAgIH0sXG4gICAgXCJjbGFzc1wiOiBjbGFzc2VzLmxhYmVsXG4gIH0sIFt0aGlzLmRpc3BsYXkoXCJmaWx0ZXJcIildKSwgbW9kdWxlcy5ub3JtYWxGaWx0ZXIoY2xhc3NlcywgZmlsdGVySWQpXSkgOiBcIlwiO1xuICB2YXIgcGVycGFnZSA9ICF0aGlzLm9wdHMuaGlkZVBlclBhZ2VTZWxlY3QgJiYgKHBlcnBhZ2VWYWx1ZXMubGVuZ3RoID4gMSB8fCB0aGlzLm9wdHMuYWx3YXlzU2hvd1BlclBhZ2VTZWxlY3QpID8gaChcImRpdlwiLCB7XG4gICAgXCJjbGFzc1wiOiBcIlZ1ZVRhYmxlc19fbGltaXQtZmllbGRcIlxuICB9LCBbaChcImxhYmVsXCIsIHtcbiAgICBcImNsYXNzXCI6IGNsYXNzZXMubGFiZWwsXG4gICAgYXR0cnM6IHtcbiAgICAgIFwiZm9yXCI6IHBlcnBhZ2VJZFxuICAgIH1cbiAgfSwgW3RoaXMuZGlzcGxheShcImxpbWl0XCIpXSksIG1vZHVsZXMucGVyUGFnZShwZXJwYWdlVmFsdWVzLCBjbGFzc2VzLnNlbGVjdCwgcGVycGFnZUlkKV0pIDogXCJcIjtcbiAgdmFyIGRyb3Bkb3duUGFnaW5hdGlvbiA9IHRoaXMub3B0cy5wYWdpbmF0aW9uICYmIHRoaXMub3B0cy5wYWdpbmF0aW9uLmRyb3Bkb3duID8gaChcImRpdlwiLCB7XG4gICAgXCJjbGFzc1wiOiBcIlZ1ZVRhYmxlc19fcGFnaW5hdGlvbi13cmFwcGVyXCJcbiAgfSwgW2goXCJkaXZcIiwge1xuICAgIFwiY2xhc3NcIjogXCJcIi5jb25jYXQoY2xhc3Nlcy5maWVsZCwgXCIgXCIpLmNvbmNhdChjbGFzc2VzLmlubGluZSwgXCIgXCIpLmNvbmNhdChjbGFzc2VzLnJpZ2h0LCBcIiBWdWVUYWJsZXNfX2Ryb3Bkb3duLXBhZ2luYXRpb25cIiksXG4gICAgZGlyZWN0aXZlczogW3tcbiAgICAgIG5hbWU6IFwic2hvd1wiLFxuICAgICAgdmFsdWU6IHRoaXMudG90YWxQYWdlcyA+IDFcbiAgICB9XVxuICB9LCBbaChcImxhYmVsXCIsIHtcbiAgICBhdHRyczoge1xuICAgICAgXCJmb3JcIjogZGRwSWRcbiAgICB9XG4gIH0sIFt0aGlzLmRpc3BsYXkoXCJwYWdlXCIpXSksIG1vZHVsZXMuZHJvcGRvd25QYWdpbmF0aW9uKGNsYXNzZXMuc2VsZWN0LCBkZHBJZCldKV0pIDogXCJcIjtcbiAgdmFyIGNvbHVtbnNEcm9wZG93biA9IHRoaXMub3B0cy5jb2x1bW5zRHJvcGRvd24gPyBoKFwiZGl2XCIsIHtcbiAgICBcImNsYXNzXCI6IFwiVnVlVGFibGVzX19jb2x1bW5zLWRyb3Bkb3duLXdyYXBwZXJcIlxuICB9LCBbbW9kdWxlcy5jb2x1bW5zRHJvcGRvd24oY2xhc3NlcyldKSA6IFwiXCI7XG4gIHZhciBmb290ZXJIZWFkaW5ncyA9IHRoaXMub3B0cy5mb290ZXJIZWFkaW5ncyA/IGgoXCJ0Zm9vdFwiLCBbaChcInRyXCIsIFttb2R1bGVzLmhlYWRpbmdzKGNsYXNzZXMucmlnaHQpXSldKSA6IFwiXCI7XG4gIHZhciBzaG91bGRTaG93VG9wID0gZ2VuZXJpY0ZpbHRlciB8fCBwZXJwYWdlIHx8IGRyb3Bkb3duUGFnaW5hdGlvbiB8fCBjb2x1bW5zRHJvcGRvd24gfHwgc2xvdHMuYmVmb3JlRmlsdGVyIHx8IHNsb3RzLmFmdGVyRmlsdGVyIHx8IHNsb3RzLmJlZm9yZUxpbWl0IHx8IHNsb3RzLmFmdGVyTGltaXQ7XG4gIHZhciB0YWJsZVRvcCA9IGgoXCJkaXZcIiwge1xuICAgIFwiY2xhc3NcIjogY2xhc3Nlcy5yb3csXG4gICAgZGlyZWN0aXZlczogW3tcbiAgICAgIG5hbWU6IFwic2hvd1wiLFxuICAgICAgdmFsdWU6IHNob3VsZFNob3dUb3BcbiAgICB9XVxuICB9LCBbaChcImRpdlwiLCB7XG4gICAgXCJjbGFzc1wiOiBjbGFzc2VzLmNvbHVtblxuICB9LCBbaChcImRpdlwiLCB7XG4gICAgXCJjbGFzc1wiOiBcIlwiLmNvbmNhdChjbGFzc2VzLmZpZWxkLCBcIiBcIikuY29uY2F0KGNsYXNzZXMuaW5saW5lLCBcIiBcIikuY29uY2F0KGNsYXNzZXMubGVmdCwgXCIgVnVlVGFibGVzX19zZWFyY2hcIilcbiAgfSwgW3Nsb3RzLmJlZm9yZUZpbHRlciwgZ2VuZXJpY0ZpbHRlciwgc2xvdHMuYWZ0ZXJGaWx0ZXJdKSwgc2xvdHMuYWZ0ZXJGaWx0ZXJXcmFwcGVyLCBoKFwiZGl2XCIsIHtcbiAgICBcImNsYXNzXCI6IFwiXCIuY29uY2F0KGNsYXNzZXMuZmllbGQsIFwiIFwiKS5jb25jYXQoY2xhc3Nlcy5pbmxpbmUsIFwiIFwiKS5jb25jYXQoY2xhc3Nlcy5yaWdodCwgXCIgVnVlVGFibGVzX19saW1pdFwiKVxuICB9LCBbc2xvdHMuYmVmb3JlTGltaXQsIHBlcnBhZ2UsIHNsb3RzLmFmdGVyTGltaXRdKSwgZHJvcGRvd25QYWdpbmF0aW9uLCBjb2x1bW5zRHJvcGRvd25dKV0pO1xuICByZXR1cm4gaChcImRpdlwiLCB7XG4gICAgXCJjbGFzc1wiOiBcIlZ1ZVRhYmxlcyBWdWVUYWJsZXMtLVwiICsgdGhpcy5zb3VyY2VcbiAgfSwgW3RhYmxlVG9wLCBzbG90cy5iZWZvcmVUYWJsZSwgaChcImRpdlwiLCB7XG4gICAgXCJjbGFzc1wiOiBcInRhYmxlLXJlc3BvbnNpdmVcIlxuICB9LCBbaChcInRhYmxlXCIsIHtcbiAgICBcImNsYXNzXCI6IFwiVnVlVGFibGVzX190YWJsZSBcIi5jb25jYXQodGhpcy5vcHRzLnNraW4gPyB0aGlzLm9wdHMuc2tpbiA6IGNsYXNzZXMudGFibGUpLFxuICAgIGF0dHJzOiB7XG4gICAgICBzdW1tYXJ5OiB0aGlzLm9wdHMuc3VtbWFyeVxuICAgIH1cbiAgfSwgW2NhcHRpb24sIGgoXCJ0aGVhZFwiLCBbc2xvdHMucHJlcGVuZEhlYWQsIGgoXCJ0clwiLCBbbW9kdWxlcy5oZWFkaW5ncyhjbGFzc2VzLnJpZ2h0KV0pLCBzbG90cy5iZWZvcmVGaWx0ZXJzLCBtb2R1bGVzLmNvbHVtbkZpbHRlcnMoY2xhc3NlcyksIHNsb3RzLmFmdGVyRmlsdGVyc10pLCBmb290ZXJIZWFkaW5ncywgc2xvdHMuYmVmb3JlQm9keSwgaChcInRib2R5XCIsIFtzbG90cy5wcmVwZW5kQm9keSwgbW9kdWxlcy5yb3dzKGNsYXNzZXMpLCBzbG90cy5hcHBlbmRCb2R5XSksIHNsb3RzLmFmdGVyQm9keV0pXSksIHNsb3RzLmFmdGVyVGFibGUsIG1vZHVsZXMucGFnaW5hdGlvbigoMCwgX21lcmdlW1wiZGVmYXVsdFwiXSkoY2xhc3Nlcy5wYWdpbmF0aW9uLCB7XG4gICAgd3JhcHBlcjogXCJcIi5jb25jYXQoY2xhc3Nlcy5yb3csIFwiIFwiKS5jb25jYXQoY2xhc3Nlcy5jb2x1bW4sIFwiIFwiKS5jb25jYXQoY2xhc3Nlcy5jb250ZW50Q2VudGVyKSxcbiAgICBuYXY6IGNsYXNzZXMuY2VudGVyLFxuICAgIGNvdW50OiBcIlwiLmNvbmNhdChjbGFzc2VzLmNlbnRlciwgXCIgXCIpLmNvbmNhdChjbGFzc2VzLmNvbHVtbilcbiAgfSkpLCBtb2R1bGVzLmRyb3Bkb3duUGFnaW5hdGlvbkNvdW50KCldKTtcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBfbWVyZ2UgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCJtZXJnZVwiKSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IFwiZGVmYXVsdFwiOiBvYmogfTsgfVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChoLCBtb2R1bGVzLCBjbGFzc2VzLCBzbG90cykge1xuICB2YXIgZmlsdGVySWQgPSAnVnVlVGFibGVzX19zZWFyY2hfJyArIHRoaXMuaWQ7XG4gIHZhciBwZXJwYWdlSWQgPSAnVnVlVGFibGVzX19saW1pdF8nICsgdGhpcy5pZDtcblxuICB2YXIgcGVycGFnZVZhbHVlcyA9IHJlcXVpcmUoJy4uL21vZHVsZXMvcGVyLXBhZ2UtdmFsdWVzJykuY2FsbCh0aGlzLCBoKTtcblxuICB2YXIgY2FwdGlvbiA9IHRoaXMub3B0cy5jYXB0aW9uID8gaChcImNhcHRpb25cIiwgW3RoaXMub3B0cy5jYXB0aW9uXSkgOiAnJztcbiAgdmFyIGdlbmVyaWNGaWx0ZXIgPSB0aGlzLmhhc0dlbmVyaWNGaWx0ZXIgPyBoKFwiZGl2XCIsIHtcbiAgICBcImNsYXNzXCI6IFwiVnVlVGFibGVzX19zZWFyY2gtZmllbGRcIlxuICB9LCBbaChcImxhYmVsXCIsIHtcbiAgICBhdHRyczoge1xuICAgICAgXCJmb3JcIjogZmlsdGVySWRcbiAgICB9LFxuICAgIFwiY2xhc3NcIjogY2xhc3Nlcy5sYWJlbFxuICB9LCBbdGhpcy5kaXNwbGF5KCdmaWx0ZXInKV0pLCBtb2R1bGVzLm5vcm1hbEZpbHRlcihjbGFzc2VzLCBmaWx0ZXJJZCldKSA6ICcnO1xuICB2YXIgcGVycGFnZSA9IHBlcnBhZ2VWYWx1ZXMubGVuZ3RoID4gMSA/IGgoXCJkaXZcIiwge1xuICAgIFwiY2xhc3NcIjogXCJWdWVUYWJsZXNfX2xpbWl0LWZpZWxkXCJcbiAgfSwgW2goXCJsYWJlbFwiLCB7XG4gICAgXCJjbGFzc1wiOiBjbGFzc2VzLmxhYmVsLFxuICAgIGF0dHJzOiB7XG4gICAgICBcImZvclwiOiBwZXJwYWdlSWRcbiAgICB9XG4gIH0sIFt0aGlzLmRpc3BsYXkoJ2xpbWl0JyldKSwgbW9kdWxlcy5wZXJQYWdlKHBlcnBhZ2VWYWx1ZXMsIGNsYXNzZXMuc2VsZWN0LCBwZXJwYWdlSWQpXSkgOiAnJztcbiAgdmFyIGNvbHVtbnNEcm9wZG93biA9IHRoaXMub3B0cy5jb2x1bW5zRHJvcGRvd24gPyBoKFwiZGl2XCIsIHtcbiAgICBcImNsYXNzXCI6IFwiVnVlVGFibGVzX19jb2x1bW5zLWRyb3Bkb3duLXdyYXBwZXJcIlxuICB9LCBbbW9kdWxlcy5jb2x1bW5zRHJvcGRvd24oY2xhc3NlcyldKSA6ICcnO1xuICB2YXIgc2hvdWxkU2hvd1RvcCA9IGdlbmVyaWNGaWx0ZXIgfHwgcGVycGFnZSB8fCBjb2x1bW5zRHJvcGRvd24gfHwgc2xvdHMuYmVmb3JlRmlsdGVyIHx8IHNsb3RzLmFmdGVyRmlsdGVyIHx8IHNsb3RzLmJlZm9yZUxpbWl0IHx8IHNsb3RzLmFmdGVyTGltaXQ7XG4gIHZhciB0YWJsZVRvcCA9IGgoXCJkaXZcIiwge1xuICAgIFwiY2xhc3NcIjogY2xhc3Nlcy5yb3csXG4gICAgZGlyZWN0aXZlczogW3tcbiAgICAgIG5hbWU6IFwic2hvd1wiLFxuICAgICAgdmFsdWU6IHNob3VsZFNob3dUb3BcbiAgICB9XVxuICB9LCBbaChcImRpdlwiLCB7XG4gICAgXCJjbGFzc1wiOiBjbGFzc2VzLmNvbHVtblxuICB9LCBbaChcImRpdlwiLCB7XG4gICAgXCJjbGFzc1wiOiBcIlwiLmNvbmNhdChjbGFzc2VzLmZpZWxkLCBcIiBcIikuY29uY2F0KGNsYXNzZXMuaW5saW5lLCBcIiBcIikuY29uY2F0KGNsYXNzZXMubGVmdCwgXCIgVnVlVGFibGVzX19zZWFyY2hcIilcbiAgfSwgW3Nsb3RzLmJlZm9yZUZpbHRlciwgZ2VuZXJpY0ZpbHRlciwgc2xvdHMuYWZ0ZXJGaWx0ZXJdKSwgc2xvdHMuYWZ0ZXJGaWx0ZXJXcmFwcGVyLCBoKFwiZGl2XCIsIHtcbiAgICBcImNsYXNzXCI6IFwiXCIuY29uY2F0KGNsYXNzZXMuZmllbGQsIFwiIFwiKS5jb25jYXQoY2xhc3Nlcy5pbmxpbmUsIFwiIFwiKS5jb25jYXQoY2xhc3Nlcy5yaWdodCwgXCIgVnVlVGFibGVzX19saW1pdFwiKVxuICB9LCBbc2xvdHMuYmVmb3JlTGltaXQsIHBlcnBhZ2UsIHNsb3RzLmFmdGVyTGltaXRdKSwgY29sdW1uc0Ryb3Bkb3duXSldKTtcbiAgcmV0dXJuIGgoXCJkaXZcIiwge1xuICAgIFwiY2xhc3NcIjogXCJWdWVUYWJsZXMgVnVlVGFibGVzLS1cIiArIHRoaXMuc291cmNlXG4gIH0sIFt0YWJsZVRvcCwgc2xvdHMuYmVmb3JlVGFibGUsIGgoXCJkaXZcIiwge1xuICAgIFwiY2xhc3NcIjogXCJ0YWJsZS1yZXNwb25zaXZlXCJcbiAgfSwgW2goXCJ0YWJsZVwiLCB7XG4gICAgXCJjbGFzc1wiOiBcIlZ1ZVRhYmxlc19fdGFibGUgXCIuY29uY2F0KHRoaXMub3B0cy5za2luID8gdGhpcy5vcHRzLnNraW4gOiBjbGFzc2VzLnRhYmxlKSxcbiAgICBhdHRyczoge1xuICAgICAgc3VtbWFyeTogdGhpcy5vcHRzLnN1bW1hcnlcbiAgICB9XG4gIH0sIFtjYXB0aW9uLCBoKFwidGhlYWRcIiwgW3Nsb3RzLnByZXBlbmRIZWFkLCBoKFwidHJcIiwgW21vZHVsZXMuaGVhZGluZ3MoY2xhc3Nlcy5yaWdodCldKSwgc2xvdHMuYmVmb3JlRmlsdGVycywgbW9kdWxlcy5jb2x1bW5GaWx0ZXJzKGNsYXNzZXMpLCBzbG90cy5hZnRlckZpbHRlcnNdKSwgaChcInRmb290XCIsIFtoKFwidHJcIiwgW2goXCJ0ZFwiLCB7XG4gICAgYXR0cnM6IHtcbiAgICAgIGNvbHNwYW46IHRoaXMuY29sc3BhblxuICAgIH1cbiAgfSwgW21vZHVsZXMucGFnaW5hdGlvbigoMCwgX21lcmdlW1wiZGVmYXVsdFwiXSkoY2xhc3Nlcy5wYWdpbmF0aW9uLCB7XG4gICAgbGlzdDogXCJcIi5jb25jYXQoY2xhc3Nlcy5wYWdpbmF0aW9uLmxpc3QsIFwiIFwiKS5jb25jYXQoY2xhc3Nlcy5yaWdodCwgXCIgXCIpLmNvbmNhdChjbGFzc2VzLm5vbWFyZ2luKSxcbiAgICBjb3VudDogXCJcIi5jb25jYXQoY2xhc3Nlcy5sZWZ0KVxuICB9KSldKV0pXSksIHNsb3RzLmJlZm9yZUJvZHksIGgoXCJ0Ym9keVwiLCBbc2xvdHMucHJlcGVuZEJvZHksIG1vZHVsZXMucm93cyhjbGFzc2VzKSwgc2xvdHMuYXBwZW5kQm9keV0pLCBzbG90cy5hZnRlckJvZHldKV0pLCBzbG90cy5hZnRlclRhYmxlXSk7XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHtcbiAgICBmcmFtZXdvcms6ICdib290c3RyYXAzJyxcbiAgICB0YWJsZTogJ3RhYmxlIHRhYmxlLXN0cmlwZWQgdGFibGUtYm9yZGVyZWQgdGFibGUtaG92ZXInLFxuICAgIHJvdzogJ3JvdycsXG4gICAgY29sdW1uOiAnY29sLW1kLTEyJyxcbiAgICBsYWJlbDogJycsXG4gICAgaW5wdXQ6ICdmb3JtLWNvbnRyb2wnLFxuICAgIHNlbGVjdDogJ2Zvcm0tY29udHJvbCcsXG4gICAgZmllbGQ6ICdmb3JtLWdyb3VwJyxcbiAgICBpbmxpbmU6ICdmb3JtLWlubGluZScsXG4gICAgcmlnaHQ6ICdwdWxsLXJpZ2h0JyxcbiAgICBsZWZ0OiAncHVsbC1sZWZ0JyxcbiAgICBjZW50ZXI6ICd0ZXh0LWNlbnRlcicsXG4gICAgY29udGVudENlbnRlcjogJycsXG4gICAgc21hbGw6ICcnLFxuICAgIG5vbWFyZ2luOiAnJyxcbiAgICBncm91cFRyOiAnaW5mbycsXG4gICAgYnV0dG9uOiAnYnRuIGJ0bi1zZWNvbmRhcnknLFxuICAgIGRyb3Bkb3duOiB7XG4gICAgICBjb250YWluZXI6ICdkcm9wZG93bicsXG4gICAgICB0cmlnZ2VyOiAnZHJvcGRvd24tdG9nZ2xlJyxcbiAgICAgIG1lbnU6ICdkcm9wZG93bi1tZW51JyxcbiAgICAgIGNvbnRlbnQ6ICcnLFxuICAgICAgaXRlbTogJycsXG4gICAgICBjYXJldDogJ2NhcmV0J1xuICAgIH0sXG4gICAgcGFnaW5hdGlvbjoge1xuICAgICAgbmF2OiAnJyxcbiAgICAgIGNvdW50OiAnJyxcbiAgICAgIHdyYXBwZXI6ICcnLFxuICAgICAgbGlzdDogJ3BhZ2luYXRpb24nLFxuICAgICAgaXRlbTogJ3BhZ2UtaXRlbScsXG4gICAgICBsaW5rOiAncGFnZS1saW5rJyxcbiAgICAgIG5leHQ6ICcnLFxuICAgICAgcHJldjogJycsXG4gICAgICBhY3RpdmU6ICdhY3RpdmUnLFxuICAgICAgZGlzYWJsZWQ6ICdkaXNhYmxlZCdcbiAgICB9XG4gIH07XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHtcbiAgICBmcmFtZXdvcms6ICdib290c3RyYXA0JyxcbiAgICB0YWJsZTogJ3RhYmxlIHRhYmxlLXN0cmlwZWQgdGFibGUtYm9yZGVyZWQgdGFibGUtaG92ZXInLFxuICAgIHJvdzogJ3JvdycsXG4gICAgY29sdW1uOiAnY29sLW1kLTEyJyxcbiAgICBsYWJlbDogJycsXG4gICAgaW5wdXQ6ICdmb3JtLWNvbnRyb2wnLFxuICAgIHNlbGVjdDogJ2Zvcm0tY29udHJvbCcsXG4gICAgZmllbGQ6ICdmb3JtLWdyb3VwJyxcbiAgICBpbmxpbmU6ICdmb3JtLWlubGluZScsXG4gICAgcmlnaHQ6ICdmbG9hdC1yaWdodCcsXG4gICAgbGVmdDogJ2Zsb2F0LWxlZnQnLFxuICAgIGNlbnRlcjogJ3RleHQtY2VudGVyJyxcbiAgICBjb250ZW50Q2VudGVyOiAnanVzdGlmeS1jb250ZW50LWNlbnRlcicsXG4gICAgbm9tYXJnaW46ICdtLTAnLFxuICAgIGdyb3VwVHI6ICd0YWJsZS1pbmZvJyxcbiAgICBzbWFsbDogJycsXG4gICAgYnV0dG9uOiAnYnRuIGJ0bi1zZWNvbmRhcnknLFxuICAgIGRyb3Bkb3duOiB7XG4gICAgICBjb250YWluZXI6ICdkcm9wZG93bicsXG4gICAgICB0cmlnZ2VyOiAnZHJvcGRvd24tdG9nZ2xlJyxcbiAgICAgIG1lbnU6ICdkcm9wZG93bi1tZW51JyxcbiAgICAgIGNvbnRlbnQ6ICcnLFxuICAgICAgaXRlbTogJ2Ryb3Bkb3duLWl0ZW0nLFxuICAgICAgY2FyZXQ6ICdjYXJldCdcbiAgICB9LFxuICAgIHBhZ2luYXRpb246IHtcbiAgICAgIG5hdjogJycsXG4gICAgICBjb3VudDogJycsXG4gICAgICB3cmFwcGVyOiAnJyxcbiAgICAgIGxpc3Q6ICdwYWdpbmF0aW9uJyxcbiAgICAgIGl0ZW06ICdwYWdlLWl0ZW0nLFxuICAgICAgbGluazogJ3BhZ2UtbGluaycsXG4gICAgICBuZXh0OiAnJyxcbiAgICAgIHByZXY6ICcnLFxuICAgICAgYWN0aXZlOiAnYWN0aXZlJyxcbiAgICAgIGRpc2FibGVkOiAnZGlzYWJsZWQnXG4gICAgfVxuICB9O1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB7XG4gICAgZnJhbWV3b3JrOiAnYnVsbWEnLFxuICAgIHRhYmxlOiAndGFibGUgaXMtYm9yZGVyZWQgaXMtc3RyaXBlZCBpcy1ob3ZlcmFibGUgaXMtZnVsbHdpZHRoJyxcbiAgICByb3c6ICdjb2x1bW5zJyxcbiAgICBjb2x1bW46ICdjb2x1bW4gaXMtMTInLFxuICAgIGxhYmVsOiAnbGFiZWwnLFxuICAgIGlucHV0OiAnaW5wdXQnLFxuICAgIHNlbGVjdDogJ3NlbGVjdCcsXG4gICAgZmllbGQ6ICdmaWVsZCcsXG4gICAgaW5saW5lOiAnaXMtaG9yaXpvbnRhbCcsXG4gICAgcmlnaHQ6ICdpcy1wdWxsZWQtcmlnaHQnLFxuICAgIGxlZnQ6ICdpcy1wdWxsZWQtbGVmdCcsXG4gICAgY2VudGVyOiAnaGFzLXRleHQtY2VudGVyZWQnLFxuICAgIGNvbnRlbnRDZW50ZXI6ICdpcy1jZW50ZXJlZCcsXG4gICAgaWNvbjogJ2ljb24nLFxuICAgIHNtYWxsOiAnaXMtc21hbGwnLFxuICAgIG5vbWFyZ2luOiAnbWFyZ2lubGVzcycsXG4gICAgYnV0dG9uOiAnYnV0dG9uJyxcbiAgICBncm91cFRyOiAnaXMtc2VsZWN0ZWQnLFxuICAgIGRyb3Bkb3duOiB7XG4gICAgICBjb250YWluZXI6ICdkcm9wZG93bicsXG4gICAgICB0cmlnZ2VyOiAnZHJvcGRvd24tdHJpZ2dlcicsXG4gICAgICBtZW51OiAnZHJvcGRvd24tbWVudScsXG4gICAgICBjb250ZW50OiAnZHJvcGRvd24tY29udGVudCcsXG4gICAgICBpdGVtOiAnZHJvcGRvd24taXRlbScsXG4gICAgICBjYXJldDogJ2ZhIGZhLWFuZ2xlLWRvd24nXG4gICAgfSxcbiAgICBwYWdpbmF0aW9uOiB7XG4gICAgICBuYXY6ICcnLFxuICAgICAgY291bnQ6ICcnLFxuICAgICAgd3JhcHBlcjogJ3BhZ2luYXRpb24nLFxuICAgICAgbGlzdDogJ3BhZ2luYXRpb24tbGlzdCcsXG4gICAgICBpdGVtOiAnJyxcbiAgICAgIGxpbms6ICdwYWdpbmF0aW9uLWxpbmsnLFxuICAgICAgbmV4dDogJycsXG4gICAgICBwcmV2OiAnJyxcbiAgICAgIGFjdGl2ZTogJ2lzLWN1cnJlbnQnLFxuICAgICAgZGlzYWJsZWQ6ICcnXG4gICAgfVxuICB9O1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxudmFyIF92dWVQYWdpbmF0aW9uID0gcmVxdWlyZShcInZ1ZS1wYWdpbmF0aW9uLTJcIik7XG5cbnZhciBfdnVleCA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vc3RhdGUvdnVleFwiKSk7XG5cbnZhciBfbm9ybWFsID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9zdGF0ZS9ub3JtYWxcIikpO1xuXG52YXIgX21lcmdlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwibWVyZ2VcIikpO1xuXG52YXIgX3RhYmxlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi90YWJsZVwiKSk7XG5cbnZhciBfZGF0YTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3N0YXRlL2RhdGFcIikpO1xuXG52YXIgX3Jlc2l6ZWFibGVDb2x1bW5zID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9oZWxwZXJzL3Jlc2l6ZWFibGUtY29sdW1uc1wiKSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IFwiZGVmYXVsdFwiOiBvYmogfTsgfVxuXG52YXIgX2RhdGEgPSByZXF1aXJlKFwiLi9taXhpbnMvZGF0YVwiKTtcblxudmFyIF9jcmVhdGVkID0gcmVxdWlyZShcIi4vbWl4aW5zL2NyZWF0ZWRcIik7XG5cbnZhciB0ZW1wbGF0ZUNvbXBpbGVyID0gcmVxdWlyZShcIi4vdGVtcGxhdGUtY29tcGlsZXJcIik7XG5cbmV4cG9ydHMuaW5zdGFsbCA9IGZ1bmN0aW9uIChWdWUsIGdsb2JhbE9wdGlvbnMsIHVzZVZ1ZXgpIHtcbiAgdmFyIHRoZW1lID0gYXJndW1lbnRzLmxlbmd0aCA+IDMgJiYgYXJndW1lbnRzWzNdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbM10gOiBcImJvb3RzdHJhcDNcIjtcbiAgdmFyIHRlbXBsYXRlID0gYXJndW1lbnRzLmxlbmd0aCA+IDQgJiYgYXJndW1lbnRzWzRdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbNF0gOiBcImRlZmF1bHRcIjtcblxuICB2YXIgY2xpZW50ID0gX21lcmdlW1wiZGVmYXVsdFwiXS5yZWN1cnNpdmUodHJ1ZSwgKDAsIF90YWJsZVtcImRlZmF1bHRcIl0pKCksIHtcbiAgICBuYW1lOiBcImNsaWVudC10YWJsZVwiLFxuICAgIGNvbXBvbmVudHM6IHtcbiAgICAgIFBhZ2luYXRpb246IF92dWVQYWdpbmF0aW9uLlBhZ2luYXRpb25cbiAgICB9LFxuICAgIHJlbmRlcjogdGVtcGxhdGVDb21waWxlci5jYWxsKHRoaXMsIHRlbXBsYXRlLCB0aGVtZSksXG4gICAgcHJvcHM6IHtcbiAgICAgIGNvbHVtbnM6IHtcbiAgICAgICAgdHlwZTogQXJyYXksXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgICB9LFxuICAgICAgZGF0YToge1xuICAgICAgICB0eXBlOiBBcnJheSxcbiAgICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICAgIH0sXG4gICAgICBuYW1lOiB7XG4gICAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgICAgcmVxdWlyZWQ6IGZhbHNlXG4gICAgICB9LFxuICAgICAgb3B0aW9uczoge1xuICAgICAgICB0eXBlOiBPYmplY3QsXG4gICAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgICAgXCJkZWZhdWx0XCI6IGZ1bmN0aW9uIF9kZWZhdWx0KCkge1xuICAgICAgICAgIHJldHVybiB7fTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgY3JlYXRlZDogZnVuY3Rpb24gY3JlYXRlZCgpIHtcbiAgICAgIF9jcmVhdGVkKHRoaXMpO1xuXG4gICAgICBpZiAodGhpcy5vcHRzLnRvTW9tZW50Rm9ybWF0KSB0aGlzLnRyYW5zZm9ybURhdGVTdHJpbmdzVG9Nb21lbnQoKTtcblxuICAgICAgaWYgKCF0aGlzLnZ1ZXgpIHtcbiAgICAgICAgdGhpcy5pbml0T3JkZXJCeSgpO1xuICAgICAgICB0aGlzLnF1ZXJ5ID0gdGhpcy5pbml0UXVlcnkoKTtcbiAgICAgICAgdGhpcy5jdXN0b21RdWVyaWVzID0gdGhpcy5pbml0Q3VzdG9tRmlsdGVycygpO1xuICAgICAgfVxuICAgIH0sXG4gICAgbW91bnRlZDogZnVuY3Rpb24gbW91bnRlZCgpIHtcbiAgICAgIHRoaXMuX3NldEZpbHRlcnNET00odGhpcy5xdWVyeSk7XG5cbiAgICAgIGlmICh0aGlzLm9wdHMucmVzaXphYmxlQ29sdW1ucykge1xuICAgICAgICAoMCwgX3Jlc2l6ZWFibGVDb2x1bW5zW1wiZGVmYXVsdFwiXSkodGhpcy4kZWwucXVlcnlTZWxlY3RvcihcInRhYmxlXCIpLCB0aGlzLmhhc0NoaWxkUm93LCB0aGlzLm9wdHMuY2hpbGRSb3dUb2dnbGVyRmlyc3QpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9zZXRDb2x1bW5zRHJvcGRvd25DbG9zZUxpc3RlbmVyKCk7XG5cbiAgICAgIGlmICghdGhpcy52dWV4KSB7XG4gICAgICAgIHRoaXMucmVnaXN0ZXJDbGllbnRGaWx0ZXJzKCk7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuaW5pdGlhbFBhZ2UpIHRoaXMuc2V0UGFnZSh0aGlzLm9wdGlvbnMuaW5pdGlhbFBhZ2UpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5vcHRzLmdyb3VwQnkgJiYgIXRoaXMub3B0cy5vcmRlckJ5KSB7XG4gICAgICAgIHRoaXMub3JkZXJCeS5jb2x1bW4gPSB0aGlzLm9wdHMuZ3JvdXBCeTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5sb2FkU3RhdGUoKTtcblxuICAgICAgaWYgKHRoaXMuaGFzRGF0ZUZpbHRlcnMoKSkge1xuICAgICAgICB0aGlzLmluaXREYXRlRmlsdGVycygpO1xuICAgICAgfVxuICAgIH0sXG4gICAgbW9kZWw6IHtcbiAgICAgIHByb3A6IFwiZGF0YVwiXG4gICAgfSxcbiAgICBkYXRhOiBmdW5jdGlvbiBkYXRhKCkge1xuICAgICAgcmV0dXJuIF9tZXJnZVtcImRlZmF1bHRcIl0ucmVjdXJzaXZlKF9kYXRhKCksIHtcbiAgICAgICAgc291cmNlOiBcImNsaWVudFwiLFxuICAgICAgICBnbG9iYWxPcHRpb25zOiBnbG9iYWxPcHRpb25zLFxuICAgICAgICBjdXJyZW50bHlTb3J0aW5nOiB7fSxcbiAgICAgICAgdGltZTogRGF0ZS5ub3coKVxuICAgICAgfSwgKDAsIF9kYXRhMltcImRlZmF1bHRcIl0pKHVzZVZ1ZXgsIFwiY2xpZW50XCIsIHRoaXMub3B0aW9ucy5pbml0aWFsUGFnZSkpO1xuICAgIH0sXG4gICAgY29tcHV0ZWQ6IHtcbiAgICAgIHE6IHJlcXVpcmUoXCIuL2NvbXB1dGVkL3FcIiksXG4gICAgICBjdXN0b21ROiByZXF1aXJlKFwiLi9jb21wdXRlZC9jdXN0b20tcVwiKSxcbiAgICAgIHRvdGFsUGFnZXM6IHJlcXVpcmUoXCIuL2NvbXB1dGVkL3RvdGFsLXBhZ2VzXCIpLFxuICAgICAgZmlsdGVyZWREYXRhOiByZXF1aXJlKFwiLi9jb21wdXRlZC9maWx0ZXJlZC1kYXRhXCIpLFxuICAgICAgaGFzTXVsdGlTb3J0OiBmdW5jdGlvbiBoYXNNdWx0aVNvcnQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9wdHMuY2xpZW50TXVsdGlTb3J0aW5nO1xuICAgICAgfVxuICAgIH0sXG4gICAgbWV0aG9kczoge1xuICAgICAgdHJhbnNmb3JtRGF0ZVN0cmluZ3NUb01vbWVudDogcmVxdWlyZShcIi4vbWV0aG9kcy90cmFuc2Zvcm0tZGF0ZS1zdHJpbmdzLXRvLW1vbWVudFwiKSxcbiAgICAgIHJlZ2lzdGVyQ2xpZW50RmlsdGVyczogcmVxdWlyZShcIi4vbWV0aG9kcy9yZWdpc3Rlci1jbGllbnQtZmlsdGVyc1wiKSxcbiAgICAgIHNlYXJjaDogcmVxdWlyZShcIi4vbWV0aG9kcy9jbGllbnQtc2VhcmNoXCIpLFxuICAgICAgZGVmYXVsdFNvcnQ6IHJlcXVpcmUoXCIuL21ldGhvZHMvZGVmYXVsdC1zb3J0XCIpLFxuICAgICAgZ2V0R3JvdXBTbG90OiByZXF1aXJlKFwiLi9tZXRob2RzL2dldC1ncm91cC1zbG90XCIpLFxuICAgICAgdG9nZ2xlR3JvdXA6IGZ1bmN0aW9uIHRvZ2dsZUdyb3VwKGdyb3VwLCBlKSB7XG4gICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIHZhciBpID0gdGhpcy5jb2xsYXBzZWRHcm91cHMuaW5kZXhPZihncm91cCk7XG5cbiAgICAgICAgaWYgKGkgPj0gMCkge1xuICAgICAgICAgIHRoaXMuY29sbGFwc2VkR3JvdXBzLnNwbGljZShpLCAxKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmNvbGxhcHNlZEdyb3Vwcy5wdXNoKGdyb3VwKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGdyb3VwVG9nZ2xlSWNvbjogZnVuY3Rpb24gZ3JvdXBUb2dnbGVJY29uKGdyb3VwKSB7XG4gICAgICAgIHZhciBjbHMgPSB0aGlzLm9wdHMuc29ydEljb24uYmFzZSArIFwiIFwiO1xuICAgICAgICBjbHMgKz0gdGhpcy5jb2xsYXBzZWRHcm91cHMuaW5kZXhPZihncm91cCkgPiAtMSA/IHRoaXMub3B0cy5zb3J0SWNvbi5kb3duIDogdGhpcy5vcHRzLnNvcnRJY29uLnVwO1xuICAgICAgICByZXR1cm4gY2xzO1xuICAgICAgfSxcbiAgICAgIGxvYWRTdGF0ZTogZnVuY3Rpb24gbG9hZFN0YXRlKCkge1xuICAgICAgICBpZiAoIXRoaXMub3B0cy5zYXZlU3RhdGUpIHJldHVybjtcblxuICAgICAgICBpZiAoIXRoaXMuc3RvcmFnZS5nZXRJdGVtKHRoaXMuc3RhdGVLZXkpKSB7XG4gICAgICAgICAgdGhpcy5pbml0U3RhdGUoKTtcbiAgICAgICAgICB0aGlzLmFjdGl2ZVN0YXRlID0gdHJ1ZTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgc3RhdGUgPSBKU09OLnBhcnNlKHRoaXMuc3RvcmFnZS5nZXRJdGVtKHRoaXMuc3RhdGVLZXkpKTtcbiAgICAgICAgaWYgKHRoaXMub3B0cy5maWx0ZXJhYmxlKSB0aGlzLnNldEZpbHRlcihzdGF0ZS5xdWVyeSk7XG4gICAgICAgIHRoaXMuc2V0T3JkZXIoc3RhdGUub3JkZXJCeS5jb2x1bW4sIHN0YXRlLm9yZGVyQnkuYXNjZW5kaW5nKTtcblxuICAgICAgICBpZiAodGhpcy52dWV4KSB7XG4gICAgICAgICAgdGhpcy5jb21taXQoXCJTRVRfTElNSVRcIiwgc3RhdGUucGVyUGFnZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5saW1pdCA9IHN0YXRlLnBlclBhZ2U7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNldFBhZ2Uoc3RhdGUucGFnZSk7XG4gICAgICAgIHRoaXMuYWN0aXZlU3RhdGUgPSB0cnVlO1xuXG4gICAgICAgIGlmIChzdGF0ZS51c2VyQ29udHJvbHNDb2x1bW5zKSB7XG4gICAgICAgICAgdGhpcy51c2VyQ29sdW1uc0Rpc3BsYXkgPSBzdGF0ZS51c2VyQ29sdW1uc0Rpc3BsYXk7XG4gICAgICAgICAgdGhpcy51c2VyQ29udHJvbHNDb2x1bW5zID0gc3RhdGUudXNlckNvbnRyb2xzQ29sdW1ucztcbiAgICAgICAgfSAvLyBUT0RPOiBDdXN0b20gUXVlcmllc1xuXG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuICB2YXIgc3RhdGUgPSB1c2VWdWV4ID8gKDAsIF92dWV4W1wiZGVmYXVsdFwiXSkoKSA6ICgwLCBfbm9ybWFsW1wiZGVmYXVsdFwiXSkoKTtcbiAgY2xpZW50ID0gX21lcmdlW1wiZGVmYXVsdFwiXS5yZWN1cnNpdmUoY2xpZW50LCBzdGF0ZSk7XG4gIFZ1ZS5jb21wb25lbnQoXCJ2LWNsaWVudC10YWJsZVwiLCBjbGllbnQpO1xuICByZXR1cm4gY2xpZW50O1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxudmFyIF9tZXJnZSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIm1lcmdlXCIpKTtcblxudmFyIF9kYXRhMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vc3RhdGUvZGF0YVwiKSk7XG5cbnZhciBfdnVleCA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vc3RhdGUvdnVleFwiKSk7XG5cbnZhciBfbm9ybWFsID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9zdGF0ZS9ub3JtYWxcIikpO1xuXG52YXIgX3RhYmxlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi90YWJsZVwiKSk7XG5cbnZhciBfdnVlUGFnaW5hdGlvbiA9IHJlcXVpcmUoXCJ2dWUtcGFnaW5hdGlvbi0yXCIpO1xuXG52YXIgX3Jlc2l6ZWFibGVDb2x1bW5zID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9oZWxwZXJzL3Jlc2l6ZWFibGUtY29sdW1uc1wiKSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IFwiZGVmYXVsdFwiOiBvYmogfTsgfVxuXG52YXIgX2RhdGEgPSByZXF1aXJlKFwiLi9taXhpbnMvZGF0YVwiKTtcblxudmFyIF9jcmVhdGVkID0gcmVxdWlyZShcIi4vbWl4aW5zL2NyZWF0ZWRcIik7XG5cbnZhciB0ZW1wbGF0ZUNvbXBpbGVyID0gcmVxdWlyZShcIi4vdGVtcGxhdGUtY29tcGlsZXJcIik7XG5cbmV4cG9ydHMuaW5zdGFsbCA9IGZ1bmN0aW9uIChWdWUsIGdsb2JhbE9wdGlvbnMsIHVzZVZ1ZXgpIHtcbiAgdmFyIHRoZW1lID0gYXJndW1lbnRzLmxlbmd0aCA+IDMgJiYgYXJndW1lbnRzWzNdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbM10gOiBcImJvb3RzdHJhcDNcIjtcbiAgdmFyIHRlbXBsYXRlID0gYXJndW1lbnRzLmxlbmd0aCA+IDQgJiYgYXJndW1lbnRzWzRdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbNF0gOiBcImRlZmF1bHRcIjtcbiAgdmFyIHN0YXRlID0gdXNlVnVleCA/ICgwLCBfdnVleFtcImRlZmF1bHRcIl0pKFwic2VydmVyXCIpIDogKDAsIF9ub3JtYWxbXCJkZWZhdWx0XCJdKSgpO1xuXG4gIHZhciBzZXJ2ZXIgPSBfbWVyZ2VbXCJkZWZhdWx0XCJdLnJlY3Vyc2l2ZSh0cnVlLCAoMCwgX3RhYmxlW1wiZGVmYXVsdFwiXSkoKSwge1xuICAgIG5hbWU6IFwic2VydmVyLXRhYmxlXCIsXG4gICAgY29tcG9uZW50czoge1xuICAgICAgUGFnaW5hdGlvbjogX3Z1ZVBhZ2luYXRpb24uUGFnaW5hdGlvblxuICAgIH0sXG4gICAgcmVuZGVyOiB0ZW1wbGF0ZUNvbXBpbGVyLmNhbGwodGhpcywgdGVtcGxhdGUsIHRoZW1lKSxcbiAgICBwcm9wczoge1xuICAgICAgY29sdW1uczoge1xuICAgICAgICB0eXBlOiBBcnJheSxcbiAgICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICAgIH0sXG4gICAgICB1cmw6IHtcbiAgICAgICAgdHlwZTogU3RyaW5nXG4gICAgICB9LFxuICAgICAgbmFtZToge1xuICAgICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICAgIHJlcXVpcmVkOiBmYWxzZVxuICAgICAgfSxcbiAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICAgIFwiZGVmYXVsdFwiOiBmdW5jdGlvbiBfZGVmYXVsdCgpIHtcbiAgICAgICAgICByZXR1cm4ge307XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIGNyZWF0ZWQ6IGZ1bmN0aW9uIGNyZWF0ZWQoKSB7XG4gICAgICBpZiAoIXRoaXMub3B0cy5yZXF1ZXN0RnVuY3Rpb24gJiYgIXRoaXMudXJsKSB7XG4gICAgICAgIHRocm93ICd2dWUtdGFibGVzLTI6IHlvdSBtdXN0IHByb3ZpZGUgZWl0aGVyIGEgXCJ1cmxcIiBwcm9wIG9yIGEgY3VzdG9tIHJlcXVlc3QgZnVuY3Rpb24uIEFib3J0aW5nJztcbiAgICAgIH1cblxuICAgICAgX2NyZWF0ZWQodGhpcyk7XG5cbiAgICAgIGlmICghdGhpcy52dWV4KSB7XG4gICAgICAgIHRoaXMucXVlcnkgPSB0aGlzLmluaXRRdWVyeSgpO1xuICAgICAgICB0aGlzLmluaXRPcmRlckJ5KCk7XG4gICAgICAgIHRoaXMuY3VzdG9tUXVlcmllcyA9IHRoaXMuaW5pdEN1c3RvbUZpbHRlcnMoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMub3B0cy5zZW5kSW5pdGlhbFJlcXVlc3QpIHtcbiAgICAgICAgdGhpcy5sb2FkU3RhdGUoKTtcbiAgICAgICAgdGhpcy5nZXREYXRhKHRydWUpLnRoZW4oZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG4gICAgICAgICAgdGhpcy5zZXREYXRhKHJlc3BvbnNlKTtcbiAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcblxuICAgICAgICAgIGlmICh0aGlzLmhhc0RhdGVGaWx0ZXJzKCkpIHtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICB0aGlzLmluaXREYXRlRmlsdGVycygpO1xuICAgICAgICAgICAgfS5iaW5kKHRoaXMpLCAwKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0uYmluZCh0aGlzKSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBtb3VudGVkOiBmdW5jdGlvbiBtb3VudGVkKCkge1xuICAgICAgdGhpcy5fc2V0RmlsdGVyc0RPTSh0aGlzLnF1ZXJ5KTtcblxuICAgICAgaWYgKHRoaXMub3B0cy5yZXNpemFibGVDb2x1bW5zKSB7XG4gICAgICAgICgwLCBfcmVzaXplYWJsZUNvbHVtbnNbXCJkZWZhdWx0XCJdKSh0aGlzLiRlbC5xdWVyeVNlbGVjdG9yKFwidGFibGVcIiksIHRoaXMuaGFzQ2hpbGRSb3csIHRoaXMub3B0cy5jaGlsZFJvd1RvZ2dsZXJGaXJzdCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX3NldENvbHVtbnNEcm9wZG93bkNsb3NlTGlzdGVuZXIoKTtcblxuICAgICAgaWYgKHRoaXMudnVleCkgcmV0dXJuO1xuICAgICAgdGhpcy5yZWdpc3RlclNlcnZlckZpbHRlcnMoKTtcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuaW5pdGlhbFBhZ2UpIHRoaXMuc2V0UGFnZSh0aGlzLm9wdGlvbnMuaW5pdGlhbFBhZ2UsIHRydWUpO1xuICAgIH0sXG4gICAgZGF0YTogZnVuY3Rpb24gZGF0YSgpIHtcbiAgICAgIHJldHVybiBfbWVyZ2VbXCJkZWZhdWx0XCJdLnJlY3Vyc2l2ZShfZGF0YSgpLCB7XG4gICAgICAgIHNvdXJjZTogXCJzZXJ2ZXJcIixcbiAgICAgICAgbG9hZGluZzogdHJ1ZSxcbiAgICAgICAgbGFzdEtleVN0cm9rZUF0OiBmYWxzZSxcbiAgICAgICAgZ2xvYmFsT3B0aW9uczogZ2xvYmFsT3B0aW9uc1xuICAgICAgfSwgKDAsIF9kYXRhMltcImRlZmF1bHRcIl0pKHVzZVZ1ZXgsIFwic2VydmVyXCIsIHRoaXMub3B0aW9ucy5pbml0aWFsUGFnZSkpO1xuICAgIH0sXG4gICAgbWV0aG9kczoge1xuICAgICAgcmVmcmVzaDogcmVxdWlyZShcIi4vbWV0aG9kcy9yZWZyZXNoXCIpLFxuICAgICAgZ2V0RGF0YTogcmVxdWlyZShcIi4vbWV0aG9kcy9nZXQtZGF0YVwiKSxcbiAgICAgIHNldERhdGE6IHJlcXVpcmUoXCIuL21ldGhvZHMvc2V0LWRhdGFcIiksXG4gICAgICBzZXJ2ZXJTZWFyY2g6IHJlcXVpcmUoXCIuL21ldGhvZHMvc2VydmVyLXNlYXJjaFwiKSxcbiAgICAgIHJlZ2lzdGVyU2VydmVyRmlsdGVyczogcmVxdWlyZShcIi4vbWV0aG9kcy9yZWdpc3Rlci1zZXJ2ZXItZmlsdGVyc1wiKSxcbiAgICAgIGxvYWRTdGF0ZTogZnVuY3Rpb24gbG9hZFN0YXRlKCkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgICAgIGlmICghdGhpcy5vcHRzLnNhdmVTdGF0ZSkgcmV0dXJuO1xuXG4gICAgICAgIGlmICghdGhpcy5zdG9yYWdlLmdldEl0ZW0odGhpcy5zdGF0ZUtleSkpIHtcbiAgICAgICAgICB0aGlzLmluaXRTdGF0ZSgpO1xuICAgICAgICAgIHRoaXMuYWN0aXZlU3RhdGUgPSB0cnVlO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBzdGF0ZSA9IEpTT04ucGFyc2UodGhpcy5zdG9yYWdlLmdldEl0ZW0odGhpcy5zdGF0ZUtleSkpO1xuXG4gICAgICAgIGlmICh0aGlzLnZ1ZXgpIHtcbiAgICAgICAgICB0aGlzLmNvbW1pdChcIlNFVF9TVEFURVwiLCB7XG4gICAgICAgICAgICBxdWVyeTogc3RhdGUucXVlcnksXG4gICAgICAgICAgICBjdXN0b21RdWVyaWVzOiBzdGF0ZS5jdXN0b21RdWVyaWVzLFxuICAgICAgICAgICAgcGFnZTogc3RhdGUucGFnZSxcbiAgICAgICAgICAgIGxpbWl0OiBzdGF0ZS5wZXJQYWdlLFxuICAgICAgICAgICAgb3JkZXJCeTogc3RhdGUub3JkZXJCeVxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMucGFnZSA9IHN0YXRlLnBhZ2U7XG4gICAgICAgICAgdGhpcy5xdWVyeSA9IHN0YXRlLnF1ZXJ5O1xuICAgICAgICAgIHRoaXMuY3VzdG9tUXVlcmllcyA9IHN0YXRlLmN1c3RvbVF1ZXJpZXM7XG4gICAgICAgICAgdGhpcy5saW1pdCA9IHN0YXRlLnBlclBhZ2U7XG4gICAgICAgICAgdGhpcy5vcmRlckJ5ID0gc3RhdGUub3JkZXJCeTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5vcHRzLnBhZ2luYXRpb24uZHJvcGRvd24gJiYgdGhpcy4kcmVmcy5wYWdpbmF0aW9uKSB7XG4gICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBfdGhpcy4kcmVmcy5wYWdpbmF0aW9uLlBhZ2UgPSBzdGF0ZS5wYWdlO1xuICAgICAgICAgIH0sIDApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMub3B0cy5maWx0ZXJhYmxlKSB7XG4gICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBfdGhpcy5fc2V0RmlsdGVyc0RPTShzdGF0ZS5xdWVyeSk7XG4gICAgICAgICAgfSwgMCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmFjdGl2ZVN0YXRlID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHdhdGNoOiB7XG4gICAgICB1cmw6IGZ1bmN0aW9uIHVybCgpIHtcbiAgICAgICAgdGhpcy5yZWZyZXNoKCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBjb21wdXRlZDoge1xuICAgICAgdG90YWxQYWdlczogcmVxdWlyZShcIi4vY29tcHV0ZWQvdG90YWwtcGFnZXNcIiksXG4gICAgICBmaWx0ZXJlZFF1ZXJ5OiByZXF1aXJlKFwiLi9jb21wdXRlZC9maWx0ZXJlZC1xdWVyeVwiKSxcbiAgICAgIGhhc011bHRpU29ydDogZnVuY3Rpb24gaGFzTXVsdGlTb3J0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcHRzLnNlcnZlck11bHRpU29ydGluZztcbiAgICAgIH1cbiAgICB9XG4gIH0sIHN0YXRlKTtcblxuICBWdWUuY29tcG9uZW50KFwidi1zZXJ2ZXItdGFibGVcIiwgc2VydmVyKTtcbiAgcmV0dXJuIHNlcnZlcjtcbn07IiwidmFyIGNsb25lID0gKGZ1bmN0aW9uKCkge1xuJ3VzZSBzdHJpY3QnO1xuXG5mdW5jdGlvbiBfaW5zdGFuY2VvZihvYmosIHR5cGUpIHtcbiAgcmV0dXJuIHR5cGUgIT0gbnVsbCAmJiBvYmogaW5zdGFuY2VvZiB0eXBlO1xufVxuXG52YXIgbmF0aXZlTWFwO1xudHJ5IHtcbiAgbmF0aXZlTWFwID0gTWFwO1xufSBjYXRjaChfKSB7XG4gIC8vIG1heWJlIGEgcmVmZXJlbmNlIGVycm9yIGJlY2F1c2Ugbm8gYE1hcGAuIEdpdmUgaXQgYSBkdW1teSB2YWx1ZSB0aGF0IG5vXG4gIC8vIHZhbHVlIHdpbGwgZXZlciBiZSBhbiBpbnN0YW5jZW9mLlxuICBuYXRpdmVNYXAgPSBmdW5jdGlvbigpIHt9O1xufVxuXG52YXIgbmF0aXZlU2V0O1xudHJ5IHtcbiAgbmF0aXZlU2V0ID0gU2V0O1xufSBjYXRjaChfKSB7XG4gIG5hdGl2ZVNldCA9IGZ1bmN0aW9uKCkge307XG59XG5cbnZhciBuYXRpdmVQcm9taXNlO1xudHJ5IHtcbiAgbmF0aXZlUHJvbWlzZSA9IFByb21pc2U7XG59IGNhdGNoKF8pIHtcbiAgbmF0aXZlUHJvbWlzZSA9IGZ1bmN0aW9uKCkge307XG59XG5cbi8qKlxuICogQ2xvbmVzIChjb3BpZXMpIGFuIE9iamVjdCB1c2luZyBkZWVwIGNvcHlpbmcuXG4gKlxuICogVGhpcyBmdW5jdGlvbiBzdXBwb3J0cyBjaXJjdWxhciByZWZlcmVuY2VzIGJ5IGRlZmF1bHQsIGJ1dCBpZiB5b3UgYXJlIGNlcnRhaW5cbiAqIHRoZXJlIGFyZSBubyBjaXJjdWxhciByZWZlcmVuY2VzIGluIHlvdXIgb2JqZWN0LCB5b3UgY2FuIHNhdmUgc29tZSBDUFUgdGltZVxuICogYnkgY2FsbGluZyBjbG9uZShvYmosIGZhbHNlKS5cbiAqXG4gKiBDYXV0aW9uOiBpZiBgY2lyY3VsYXJgIGlzIGZhbHNlIGFuZCBgcGFyZW50YCBjb250YWlucyBjaXJjdWxhciByZWZlcmVuY2VzLFxuICogeW91ciBwcm9ncmFtIG1heSBlbnRlciBhbiBpbmZpbml0ZSBsb29wIGFuZCBjcmFzaC5cbiAqXG4gKiBAcGFyYW0gYHBhcmVudGAgLSB0aGUgb2JqZWN0IHRvIGJlIGNsb25lZFxuICogQHBhcmFtIGBjaXJjdWxhcmAgLSBzZXQgdG8gdHJ1ZSBpZiB0aGUgb2JqZWN0IHRvIGJlIGNsb25lZCBtYXkgY29udGFpblxuICogICAgY2lyY3VsYXIgcmVmZXJlbmNlcy4gKG9wdGlvbmFsIC0gdHJ1ZSBieSBkZWZhdWx0KVxuICogQHBhcmFtIGBkZXB0aGAgLSBzZXQgdG8gYSBudW1iZXIgaWYgdGhlIG9iamVjdCBpcyBvbmx5IHRvIGJlIGNsb25lZCB0b1xuICogICAgYSBwYXJ0aWN1bGFyIGRlcHRoLiAob3B0aW9uYWwgLSBkZWZhdWx0cyB0byBJbmZpbml0eSlcbiAqIEBwYXJhbSBgcHJvdG90eXBlYCAtIHNldHMgdGhlIHByb3RvdHlwZSB0byBiZSB1c2VkIHdoZW4gY2xvbmluZyBhbiBvYmplY3QuXG4gKiAgICAob3B0aW9uYWwgLSBkZWZhdWx0cyB0byBwYXJlbnQgcHJvdG90eXBlKS5cbiAqIEBwYXJhbSBgaW5jbHVkZU5vbkVudW1lcmFibGVgIC0gc2V0IHRvIHRydWUgaWYgdGhlIG5vbi1lbnVtZXJhYmxlIHByb3BlcnRpZXNcbiAqICAgIHNob3VsZCBiZSBjbG9uZWQgYXMgd2VsbC4gTm9uLWVudW1lcmFibGUgcHJvcGVydGllcyBvbiB0aGUgcHJvdG90eXBlXG4gKiAgICBjaGFpbiB3aWxsIGJlIGlnbm9yZWQuIChvcHRpb25hbCAtIGZhbHNlIGJ5IGRlZmF1bHQpXG4qL1xuZnVuY3Rpb24gY2xvbmUocGFyZW50LCBjaXJjdWxhciwgZGVwdGgsIHByb3RvdHlwZSwgaW5jbHVkZU5vbkVudW1lcmFibGUpIHtcbiAgaWYgKHR5cGVvZiBjaXJjdWxhciA9PT0gJ29iamVjdCcpIHtcbiAgICBkZXB0aCA9IGNpcmN1bGFyLmRlcHRoO1xuICAgIHByb3RvdHlwZSA9IGNpcmN1bGFyLnByb3RvdHlwZTtcbiAgICBpbmNsdWRlTm9uRW51bWVyYWJsZSA9IGNpcmN1bGFyLmluY2x1ZGVOb25FbnVtZXJhYmxlO1xuICAgIGNpcmN1bGFyID0gY2lyY3VsYXIuY2lyY3VsYXI7XG4gIH1cbiAgLy8gbWFpbnRhaW4gdHdvIGFycmF5cyBmb3IgY2lyY3VsYXIgcmVmZXJlbmNlcywgd2hlcmUgY29ycmVzcG9uZGluZyBwYXJlbnRzXG4gIC8vIGFuZCBjaGlsZHJlbiBoYXZlIHRoZSBzYW1lIGluZGV4XG4gIHZhciBhbGxQYXJlbnRzID0gW107XG4gIHZhciBhbGxDaGlsZHJlbiA9IFtdO1xuXG4gIHZhciB1c2VCdWZmZXIgPSB0eXBlb2YgQnVmZmVyICE9ICd1bmRlZmluZWQnO1xuXG4gIGlmICh0eXBlb2YgY2lyY3VsYXIgPT0gJ3VuZGVmaW5lZCcpXG4gICAgY2lyY3VsYXIgPSB0cnVlO1xuXG4gIGlmICh0eXBlb2YgZGVwdGggPT0gJ3VuZGVmaW5lZCcpXG4gICAgZGVwdGggPSBJbmZpbml0eTtcblxuICAvLyByZWN1cnNlIHRoaXMgZnVuY3Rpb24gc28gd2UgZG9uJ3QgcmVzZXQgYWxsUGFyZW50cyBhbmQgYWxsQ2hpbGRyZW5cbiAgZnVuY3Rpb24gX2Nsb25lKHBhcmVudCwgZGVwdGgpIHtcbiAgICAvLyBjbG9uaW5nIG51bGwgYWx3YXlzIHJldHVybnMgbnVsbFxuICAgIGlmIChwYXJlbnQgPT09IG51bGwpXG4gICAgICByZXR1cm4gbnVsbDtcblxuICAgIGlmIChkZXB0aCA9PT0gMClcbiAgICAgIHJldHVybiBwYXJlbnQ7XG5cbiAgICB2YXIgY2hpbGQ7XG4gICAgdmFyIHByb3RvO1xuICAgIGlmICh0eXBlb2YgcGFyZW50ICE9ICdvYmplY3QnKSB7XG4gICAgICByZXR1cm4gcGFyZW50O1xuICAgIH1cblxuICAgIGlmIChfaW5zdGFuY2VvZihwYXJlbnQsIG5hdGl2ZU1hcCkpIHtcbiAgICAgIGNoaWxkID0gbmV3IG5hdGl2ZU1hcCgpO1xuICAgIH0gZWxzZSBpZiAoX2luc3RhbmNlb2YocGFyZW50LCBuYXRpdmVTZXQpKSB7XG4gICAgICBjaGlsZCA9IG5ldyBuYXRpdmVTZXQoKTtcbiAgICB9IGVsc2UgaWYgKF9pbnN0YW5jZW9mKHBhcmVudCwgbmF0aXZlUHJvbWlzZSkpIHtcbiAgICAgIGNoaWxkID0gbmV3IG5hdGl2ZVByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBwYXJlbnQudGhlbihmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICAgIHJlc29sdmUoX2Nsb25lKHZhbHVlLCBkZXB0aCAtIDEpKTtcbiAgICAgICAgfSwgZnVuY3Rpb24oZXJyKSB7XG4gICAgICAgICAgcmVqZWN0KF9jbG9uZShlcnIsIGRlcHRoIC0gMSkpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAoY2xvbmUuX19pc0FycmF5KHBhcmVudCkpIHtcbiAgICAgIGNoaWxkID0gW107XG4gICAgfSBlbHNlIGlmIChjbG9uZS5fX2lzUmVnRXhwKHBhcmVudCkpIHtcbiAgICAgIGNoaWxkID0gbmV3IFJlZ0V4cChwYXJlbnQuc291cmNlLCBfX2dldFJlZ0V4cEZsYWdzKHBhcmVudCkpO1xuICAgICAgaWYgKHBhcmVudC5sYXN0SW5kZXgpIGNoaWxkLmxhc3RJbmRleCA9IHBhcmVudC5sYXN0SW5kZXg7XG4gICAgfSBlbHNlIGlmIChjbG9uZS5fX2lzRGF0ZShwYXJlbnQpKSB7XG4gICAgICBjaGlsZCA9IG5ldyBEYXRlKHBhcmVudC5nZXRUaW1lKCkpO1xuICAgIH0gZWxzZSBpZiAodXNlQnVmZmVyICYmIEJ1ZmZlci5pc0J1ZmZlcihwYXJlbnQpKSB7XG4gICAgICBpZiAoQnVmZmVyLmFsbG9jVW5zYWZlKSB7XG4gICAgICAgIC8vIE5vZGUuanMgPj0gNC41LjBcbiAgICAgICAgY2hpbGQgPSBCdWZmZXIuYWxsb2NVbnNhZmUocGFyZW50Lmxlbmd0aCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBPbGRlciBOb2RlLmpzIHZlcnNpb25zXG4gICAgICAgIGNoaWxkID0gbmV3IEJ1ZmZlcihwYXJlbnQubGVuZ3RoKTtcbiAgICAgIH1cbiAgICAgIHBhcmVudC5jb3B5KGNoaWxkKTtcbiAgICAgIHJldHVybiBjaGlsZDtcbiAgICB9IGVsc2UgaWYgKF9pbnN0YW5jZW9mKHBhcmVudCwgRXJyb3IpKSB7XG4gICAgICBjaGlsZCA9IE9iamVjdC5jcmVhdGUocGFyZW50KTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHR5cGVvZiBwcm90b3R5cGUgPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YocGFyZW50KTtcbiAgICAgICAgY2hpbGQgPSBPYmplY3QuY3JlYXRlKHByb3RvKTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBjaGlsZCA9IE9iamVjdC5jcmVhdGUocHJvdG90eXBlKTtcbiAgICAgICAgcHJvdG8gPSBwcm90b3R5cGU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNpcmN1bGFyKSB7XG4gICAgICB2YXIgaW5kZXggPSBhbGxQYXJlbnRzLmluZGV4T2YocGFyZW50KTtcblxuICAgICAgaWYgKGluZGV4ICE9IC0xKSB7XG4gICAgICAgIHJldHVybiBhbGxDaGlsZHJlbltpbmRleF07XG4gICAgICB9XG4gICAgICBhbGxQYXJlbnRzLnB1c2gocGFyZW50KTtcbiAgICAgIGFsbENoaWxkcmVuLnB1c2goY2hpbGQpO1xuICAgIH1cblxuICAgIGlmIChfaW5zdGFuY2VvZihwYXJlbnQsIG5hdGl2ZU1hcCkpIHtcbiAgICAgIHBhcmVudC5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlLCBrZXkpIHtcbiAgICAgICAgdmFyIGtleUNoaWxkID0gX2Nsb25lKGtleSwgZGVwdGggLSAxKTtcbiAgICAgICAgdmFyIHZhbHVlQ2hpbGQgPSBfY2xvbmUodmFsdWUsIGRlcHRoIC0gMSk7XG4gICAgICAgIGNoaWxkLnNldChrZXlDaGlsZCwgdmFsdWVDaGlsZCk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKF9pbnN0YW5jZW9mKHBhcmVudCwgbmF0aXZlU2V0KSkge1xuICAgICAgcGFyZW50LmZvckVhY2goZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgdmFyIGVudHJ5Q2hpbGQgPSBfY2xvbmUodmFsdWUsIGRlcHRoIC0gMSk7XG4gICAgICAgIGNoaWxkLmFkZChlbnRyeUNoaWxkKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGZvciAodmFyIGkgaW4gcGFyZW50KSB7XG4gICAgICB2YXIgYXR0cnM7XG4gICAgICBpZiAocHJvdG8pIHtcbiAgICAgICAgYXR0cnMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHByb3RvLCBpKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGF0dHJzICYmIGF0dHJzLnNldCA9PSBudWxsKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgY2hpbGRbaV0gPSBfY2xvbmUocGFyZW50W2ldLCBkZXB0aCAtIDEpO1xuICAgIH1cblxuICAgIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG4gICAgICB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocGFyZW50KTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3ltYm9scy5sZW5ndGg7IGkrKykge1xuICAgICAgICAvLyBEb24ndCBuZWVkIHRvIHdvcnJ5IGFib3V0IGNsb25pbmcgYSBzeW1ib2wgYmVjYXVzZSBpdCBpcyBhIHByaW1pdGl2ZSxcbiAgICAgICAgLy8gbGlrZSBhIG51bWJlciBvciBzdHJpbmcuXG4gICAgICAgIHZhciBzeW1ib2wgPSBzeW1ib2xzW2ldO1xuICAgICAgICB2YXIgZGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocGFyZW50LCBzeW1ib2wpO1xuICAgICAgICBpZiAoZGVzY3JpcHRvciAmJiAhZGVzY3JpcHRvci5lbnVtZXJhYmxlICYmICFpbmNsdWRlTm9uRW51bWVyYWJsZSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGNoaWxkW3N5bWJvbF0gPSBfY2xvbmUocGFyZW50W3N5bWJvbF0sIGRlcHRoIC0gMSk7XG4gICAgICAgIGlmICghZGVzY3JpcHRvci5lbnVtZXJhYmxlKSB7XG4gICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNoaWxkLCBzeW1ib2wsIHtcbiAgICAgICAgICAgIGVudW1lcmFibGU6IGZhbHNlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaW5jbHVkZU5vbkVudW1lcmFibGUpIHtcbiAgICAgIHZhciBhbGxQcm9wZXJ0eU5hbWVzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMocGFyZW50KTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYWxsUHJvcGVydHlOYW1lcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgcHJvcGVydHlOYW1lID0gYWxsUHJvcGVydHlOYW1lc1tpXTtcbiAgICAgICAgdmFyIGRlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHBhcmVudCwgcHJvcGVydHlOYW1lKTtcbiAgICAgICAgaWYgKGRlc2NyaXB0b3IgJiYgZGVzY3JpcHRvci5lbnVtZXJhYmxlKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgY2hpbGRbcHJvcGVydHlOYW1lXSA9IF9jbG9uZShwYXJlbnRbcHJvcGVydHlOYW1lXSwgZGVwdGggLSAxKTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNoaWxkLCBwcm9wZXJ0eU5hbWUsIHtcbiAgICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gY2hpbGQ7XG4gIH1cblxuICByZXR1cm4gX2Nsb25lKHBhcmVudCwgZGVwdGgpO1xufVxuXG4vKipcbiAqIFNpbXBsZSBmbGF0IGNsb25lIHVzaW5nIHByb3RvdHlwZSwgYWNjZXB0cyBvbmx5IG9iamVjdHMsIHVzZWZ1bGwgZm9yIHByb3BlcnR5XG4gKiBvdmVycmlkZSBvbiBGTEFUIGNvbmZpZ3VyYXRpb24gb2JqZWN0IChubyBuZXN0ZWQgcHJvcHMpLlxuICpcbiAqIFVTRSBXSVRIIENBVVRJT04hIFRoaXMgbWF5IG5vdCBiZWhhdmUgYXMgeW91IHdpc2ggaWYgeW91IGRvIG5vdCBrbm93IGhvdyB0aGlzXG4gKiB3b3Jrcy5cbiAqL1xuY2xvbmUuY2xvbmVQcm90b3R5cGUgPSBmdW5jdGlvbiBjbG9uZVByb3RvdHlwZShwYXJlbnQpIHtcbiAgaWYgKHBhcmVudCA9PT0gbnVsbClcbiAgICByZXR1cm4gbnVsbDtcblxuICB2YXIgYyA9IGZ1bmN0aW9uICgpIHt9O1xuICBjLnByb3RvdHlwZSA9IHBhcmVudDtcbiAgcmV0dXJuIG5ldyBjKCk7XG59O1xuXG4vLyBwcml2YXRlIHV0aWxpdHkgZnVuY3Rpb25zXG5cbmZ1bmN0aW9uIF9fb2JqVG9TdHIobykge1xuICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pO1xufVxuY2xvbmUuX19vYmpUb1N0ciA9IF9fb2JqVG9TdHI7XG5cbmZ1bmN0aW9uIF9faXNEYXRlKG8pIHtcbiAgcmV0dXJuIHR5cGVvZiBvID09PSAnb2JqZWN0JyAmJiBfX29ialRvU3RyKG8pID09PSAnW29iamVjdCBEYXRlXSc7XG59XG5jbG9uZS5fX2lzRGF0ZSA9IF9faXNEYXRlO1xuXG5mdW5jdGlvbiBfX2lzQXJyYXkobykge1xuICByZXR1cm4gdHlwZW9mIG8gPT09ICdvYmplY3QnICYmIF9fb2JqVG9TdHIobykgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59XG5jbG9uZS5fX2lzQXJyYXkgPSBfX2lzQXJyYXk7XG5cbmZ1bmN0aW9uIF9faXNSZWdFeHAobykge1xuICByZXR1cm4gdHlwZW9mIG8gPT09ICdvYmplY3QnICYmIF9fb2JqVG9TdHIobykgPT09ICdbb2JqZWN0IFJlZ0V4cF0nO1xufVxuY2xvbmUuX19pc1JlZ0V4cCA9IF9faXNSZWdFeHA7XG5cbmZ1bmN0aW9uIF9fZ2V0UmVnRXhwRmxhZ3MocmUpIHtcbiAgdmFyIGZsYWdzID0gJyc7XG4gIGlmIChyZS5nbG9iYWwpIGZsYWdzICs9ICdnJztcbiAgaWYgKHJlLmlnbm9yZUNhc2UpIGZsYWdzICs9ICdpJztcbiAgaWYgKHJlLm11bHRpbGluZSkgZmxhZ3MgKz0gJ20nO1xuICByZXR1cm4gZmxhZ3M7XG59XG5jbG9uZS5fX2dldFJlZ0V4cEZsYWdzID0gX19nZXRSZWdFeHBGbGFncztcblxucmV0dXJuIGNsb25lO1xufSkoKTtcblxuaWYgKHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnICYmIG1vZHVsZS5leHBvcnRzKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gY2xvbmU7XG59XG4iLCJpZiAoXCJwcm9kdWN0aW9uXCIgPT09ICdwcm9kdWN0aW9uJykge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vdnVlLmNvbW1vbi5wcm9kLmpzJylcbn0gZWxzZSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi92dWUuY29tbW9uLmRldi5qcycpXG59XG4iLCIvKiFcbiAqIFZ1ZS5qcyB2Mi42LjEwXG4gKiAoYykgMjAxNC0yMDE5IEV2YW4gWW91XG4gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4gKi9cblwidXNlIHN0cmljdFwiO3ZhciBlPU9iamVjdC5mcmVlemUoe30pO2Z1bmN0aW9uIHQoZSl7cmV0dXJuIG51bGw9PWV9ZnVuY3Rpb24gbihlKXtyZXR1cm4gbnVsbCE9ZX1mdW5jdGlvbiByKGUpe3JldHVybiEwPT09ZX1mdW5jdGlvbiBpKGUpe3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiBlfHxcIm51bWJlclwiPT10eXBlb2YgZXx8XCJzeW1ib2xcIj09dHlwZW9mIGV8fFwiYm9vbGVhblwiPT10eXBlb2YgZX1mdW5jdGlvbiBvKGUpe3JldHVybiBudWxsIT09ZSYmXCJvYmplY3RcIj09dHlwZW9mIGV9dmFyIGE9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztmdW5jdGlvbiBzKGUpe3JldHVyblwiW29iamVjdCBPYmplY3RdXCI9PT1hLmNhbGwoZSl9ZnVuY3Rpb24gYyhlKXt2YXIgdD1wYXJzZUZsb2F0KFN0cmluZyhlKSk7cmV0dXJuIHQ+PTAmJk1hdGguZmxvb3IodCk9PT10JiZpc0Zpbml0ZShlKX1mdW5jdGlvbiB1KGUpe3JldHVybiBuKGUpJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBlLnRoZW4mJlwiZnVuY3Rpb25cIj09dHlwZW9mIGUuY2F0Y2h9ZnVuY3Rpb24gbChlKXtyZXR1cm4gbnVsbD09ZT9cIlwiOkFycmF5LmlzQXJyYXkoZSl8fHMoZSkmJmUudG9TdHJpbmc9PT1hP0pTT04uc3RyaW5naWZ5KGUsbnVsbCwyKTpTdHJpbmcoZSl9ZnVuY3Rpb24gZihlKXt2YXIgdD1wYXJzZUZsb2F0KGUpO3JldHVybiBpc05hTih0KT9lOnR9ZnVuY3Rpb24gcChlLHQpe2Zvcih2YXIgbj1PYmplY3QuY3JlYXRlKG51bGwpLHI9ZS5zcGxpdChcIixcIiksaT0wO2k8ci5sZW5ndGg7aSsrKW5bcltpXV09ITA7cmV0dXJuIHQ/ZnVuY3Rpb24oZSl7cmV0dXJuIG5bZS50b0xvd2VyQ2FzZSgpXX06ZnVuY3Rpb24oZSl7cmV0dXJuIG5bZV19fXZhciBkPXAoXCJzbG90LGNvbXBvbmVudFwiLCEwKSx2PXAoXCJrZXkscmVmLHNsb3Qsc2xvdC1zY29wZSxpc1wiKTtmdW5jdGlvbiBoKGUsdCl7aWYoZS5sZW5ndGgpe3ZhciBuPWUuaW5kZXhPZih0KTtpZihuPi0xKXJldHVybiBlLnNwbGljZShuLDEpfX12YXIgbT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O2Z1bmN0aW9uIHkoZSx0KXtyZXR1cm4gbS5jYWxsKGUsdCl9ZnVuY3Rpb24gZyhlKXt2YXIgdD1PYmplY3QuY3JlYXRlKG51bGwpO3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gdFtuXXx8KHRbbl09ZShuKSl9fXZhciBfPS8tKFxcdykvZyxiPWcoZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVwbGFjZShfLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQ/dC50b1VwcGVyQ2FzZSgpOlwiXCJ9KX0pLCQ9ZyhmdW5jdGlvbihlKXtyZXR1cm4gZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKStlLnNsaWNlKDEpfSksdz0vXFxCKFtBLVpdKS9nLEM9ZyhmdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKHcsXCItJDFcIikudG9Mb3dlckNhc2UoKX0pO3ZhciB4PUZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kP2Z1bmN0aW9uKGUsdCl7cmV0dXJuIGUuYmluZCh0KX06ZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBuKG4pe3ZhciByPWFyZ3VtZW50cy5sZW5ndGg7cmV0dXJuIHI/cj4xP2UuYXBwbHkodCxhcmd1bWVudHMpOmUuY2FsbCh0LG4pOmUuY2FsbCh0KX1yZXR1cm4gbi5fbGVuZ3RoPWUubGVuZ3RoLG59O2Z1bmN0aW9uIGsoZSx0KXt0PXR8fDA7Zm9yKHZhciBuPWUubGVuZ3RoLXQscj1uZXcgQXJyYXkobik7bi0tOylyW25dPWVbbit0XTtyZXR1cm4gcn1mdW5jdGlvbiBBKGUsdCl7Zm9yKHZhciBuIGluIHQpZVtuXT10W25dO3JldHVybiBlfWZ1bmN0aW9uIE8oZSl7Zm9yKHZhciB0PXt9LG49MDtuPGUubGVuZ3RoO24rKyllW25dJiZBKHQsZVtuXSk7cmV0dXJuIHR9ZnVuY3Rpb24gUyhlLHQsbil7fXZhciBUPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4hMX0sRT1mdW5jdGlvbihlKXtyZXR1cm4gZX07ZnVuY3Rpb24gTihlLHQpe2lmKGU9PT10KXJldHVybiEwO3ZhciBuPW8oZSkscj1vKHQpO2lmKCFufHwhcilyZXR1cm4hbiYmIXImJlN0cmluZyhlKT09PVN0cmluZyh0KTt0cnl7dmFyIGk9QXJyYXkuaXNBcnJheShlKSxhPUFycmF5LmlzQXJyYXkodCk7aWYoaSYmYSlyZXR1cm4gZS5sZW5ndGg9PT10Lmxlbmd0aCYmZS5ldmVyeShmdW5jdGlvbihlLG4pe3JldHVybiBOKGUsdFtuXSl9KTtpZihlIGluc3RhbmNlb2YgRGF0ZSYmdCBpbnN0YW5jZW9mIERhdGUpcmV0dXJuIGUuZ2V0VGltZSgpPT09dC5nZXRUaW1lKCk7aWYoaXx8YSlyZXR1cm4hMTt2YXIgcz1PYmplY3Qua2V5cyhlKSxjPU9iamVjdC5rZXlzKHQpO3JldHVybiBzLmxlbmd0aD09PWMubGVuZ3RoJiZzLmV2ZXJ5KGZ1bmN0aW9uKG4pe3JldHVybiBOKGVbbl0sdFtuXSl9KX1jYXRjaChlKXtyZXR1cm4hMX19ZnVuY3Rpb24gaihlLHQpe2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKWlmKE4oZVtuXSx0KSlyZXR1cm4gbjtyZXR1cm4tMX1mdW5jdGlvbiBEKGUpe3ZhciB0PSExO3JldHVybiBmdW5jdGlvbigpe3R8fCh0PSEwLGUuYXBwbHkodGhpcyxhcmd1bWVudHMpKX19dmFyIEw9XCJkYXRhLXNlcnZlci1yZW5kZXJlZFwiLE09W1wiY29tcG9uZW50XCIsXCJkaXJlY3RpdmVcIixcImZpbHRlclwiXSxJPVtcImJlZm9yZUNyZWF0ZVwiLFwiY3JlYXRlZFwiLFwiYmVmb3JlTW91bnRcIixcIm1vdW50ZWRcIixcImJlZm9yZVVwZGF0ZVwiLFwidXBkYXRlZFwiLFwiYmVmb3JlRGVzdHJveVwiLFwiZGVzdHJveWVkXCIsXCJhY3RpdmF0ZWRcIixcImRlYWN0aXZhdGVkXCIsXCJlcnJvckNhcHR1cmVkXCIsXCJzZXJ2ZXJQcmVmZXRjaFwiXSxGPXtvcHRpb25NZXJnZVN0cmF0ZWdpZXM6T2JqZWN0LmNyZWF0ZShudWxsKSxzaWxlbnQ6ITEscHJvZHVjdGlvblRpcDohMSxkZXZ0b29sczohMSxwZXJmb3JtYW5jZTohMSxlcnJvckhhbmRsZXI6bnVsbCx3YXJuSGFuZGxlcjpudWxsLGlnbm9yZWRFbGVtZW50czpbXSxrZXlDb2RlczpPYmplY3QuY3JlYXRlKG51bGwpLGlzUmVzZXJ2ZWRUYWc6VCxpc1Jlc2VydmVkQXR0cjpULGlzVW5rbm93bkVsZW1lbnQ6VCxnZXRUYWdOYW1lc3BhY2U6UyxwYXJzZVBsYXRmb3JtVGFnTmFtZTpFLG11c3RVc2VQcm9wOlQsYXN5bmM6ITAsX2xpZmVjeWNsZUhvb2tzOkl9LFA9L2EtekEtWlxcdTAwQjdcXHUwMEMwLVxcdTAwRDZcXHUwMEQ4LVxcdTAwRjZcXHUwMEY4LVxcdTAzN0RcXHUwMzdGLVxcdTFGRkZcXHUyMDBDLVxcdTIwMERcXHUyMDNGLVxcdTIwNDBcXHUyMDcwLVxcdTIxOEZcXHUyQzAwLVxcdTJGRUZcXHUzMDAxLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRkQvO2Z1bmN0aW9uIFIoZSx0LG4scil7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7dmFsdWU6bixlbnVtZXJhYmxlOiEhcix3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9KX12YXIgSD1uZXcgUmVnRXhwKFwiW15cIitQLnNvdXJjZStcIi4kX1xcXFxkXVwiKTt2YXIgQixVPVwiX19wcm90b19fXCJpbnt9LHo9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdyxWPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBXWEVudmlyb25tZW50JiYhIVdYRW52aXJvbm1lbnQucGxhdGZvcm0sSz1WJiZXWEVudmlyb25tZW50LnBsYXRmb3JtLnRvTG93ZXJDYXNlKCksSj16JiZ3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLHE9SiYmL21zaWV8dHJpZGVudC8udGVzdChKKSxXPUomJkouaW5kZXhPZihcIm1zaWUgOS4wXCIpPjAsWj1KJiZKLmluZGV4T2YoXCJlZGdlL1wiKT4wLEc9KEomJkouaW5kZXhPZihcImFuZHJvaWRcIiksSiYmL2lwaG9uZXxpcGFkfGlwb2R8aW9zLy50ZXN0KEopfHxcImlvc1wiPT09SyksWD0oSiYmL2Nocm9tZVxcL1xcZCsvLnRlc3QoSiksSiYmL3BoYW50b21qcy8udGVzdChKKSxKJiZKLm1hdGNoKC9maXJlZm94XFwvKFxcZCspLykpLFk9e30ud2F0Y2gsUT0hMTtpZih6KXRyeXt2YXIgZWU9e307T2JqZWN0LmRlZmluZVByb3BlcnR5KGVlLFwicGFzc2l2ZVwiLHtnZXQ6ZnVuY3Rpb24oKXtRPSEwfX0pLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwidGVzdC1wYXNzaXZlXCIsbnVsbCxlZSl9Y2F0Y2goZSl7fXZhciB0ZT1mdW5jdGlvbigpe3JldHVybiB2b2lkIDA9PT1CJiYoQj0heiYmIVYmJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBnbG9iYWwmJihnbG9iYWwucHJvY2VzcyYmXCJzZXJ2ZXJcIj09PWdsb2JhbC5wcm9jZXNzLmVudi5WVUVfRU5WKSksQn0sbmU9eiYmd2luZG93Ll9fVlVFX0RFVlRPT0xTX0dMT0JBTF9IT09LX187ZnVuY3Rpb24gcmUoZSl7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YgZSYmL25hdGl2ZSBjb2RlLy50ZXN0KGUudG9TdHJpbmcoKSl9dmFyIGllLG9lPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBTeW1ib2wmJnJlKFN5bWJvbCkmJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBSZWZsZWN0JiZyZShSZWZsZWN0Lm93bktleXMpO2llPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBTZXQmJnJlKFNldCk/U2V0OmZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3RoaXMuc2V0PU9iamVjdC5jcmVhdGUobnVsbCl9cmV0dXJuIGUucHJvdG90eXBlLmhhcz1mdW5jdGlvbihlKXtyZXR1cm4hMD09PXRoaXMuc2V0W2VdfSxlLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oZSl7dGhpcy5zZXRbZV09ITB9LGUucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5zZXQ9T2JqZWN0LmNyZWF0ZShudWxsKX0sZX0oKTt2YXIgYWU9UyxzZT0wLGNlPWZ1bmN0aW9uKCl7dGhpcy5pZD1zZSsrLHRoaXMuc3Vicz1bXX07Y2UucHJvdG90eXBlLmFkZFN1Yj1mdW5jdGlvbihlKXt0aGlzLnN1YnMucHVzaChlKX0sY2UucHJvdG90eXBlLnJlbW92ZVN1Yj1mdW5jdGlvbihlKXtoKHRoaXMuc3VicyxlKX0sY2UucHJvdG90eXBlLmRlcGVuZD1mdW5jdGlvbigpe2NlLnRhcmdldCYmY2UudGFyZ2V0LmFkZERlcCh0aGlzKX0sY2UucHJvdG90eXBlLm5vdGlmeT1mdW5jdGlvbigpe2Zvcih2YXIgZT10aGlzLnN1YnMuc2xpY2UoKSx0PTAsbj1lLmxlbmd0aDt0PG47dCsrKWVbdF0udXBkYXRlKCl9LGNlLnRhcmdldD1udWxsO3ZhciB1ZT1bXTtmdW5jdGlvbiBsZShlKXt1ZS5wdXNoKGUpLGNlLnRhcmdldD1lfWZ1bmN0aW9uIGZlKCl7dWUucG9wKCksY2UudGFyZ2V0PXVlW3VlLmxlbmd0aC0xXX12YXIgcGU9ZnVuY3Rpb24oZSx0LG4scixpLG8sYSxzKXt0aGlzLnRhZz1lLHRoaXMuZGF0YT10LHRoaXMuY2hpbGRyZW49bix0aGlzLnRleHQ9cix0aGlzLmVsbT1pLHRoaXMubnM9dm9pZCAwLHRoaXMuY29udGV4dD1vLHRoaXMuZm5Db250ZXh0PXZvaWQgMCx0aGlzLmZuT3B0aW9ucz12b2lkIDAsdGhpcy5mblNjb3BlSWQ9dm9pZCAwLHRoaXMua2V5PXQmJnQua2V5LHRoaXMuY29tcG9uZW50T3B0aW9ucz1hLHRoaXMuY29tcG9uZW50SW5zdGFuY2U9dm9pZCAwLHRoaXMucGFyZW50PXZvaWQgMCx0aGlzLnJhdz0hMSx0aGlzLmlzU3RhdGljPSExLHRoaXMuaXNSb290SW5zZXJ0PSEwLHRoaXMuaXNDb21tZW50PSExLHRoaXMuaXNDbG9uZWQ9ITEsdGhpcy5pc09uY2U9ITEsdGhpcy5hc3luY0ZhY3Rvcnk9cyx0aGlzLmFzeW5jTWV0YT12b2lkIDAsdGhpcy5pc0FzeW5jUGxhY2Vob2xkZXI9ITF9LGRlPXtjaGlsZDp7Y29uZmlndXJhYmxlOiEwfX07ZGUuY2hpbGQuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29tcG9uZW50SW5zdGFuY2V9LE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHBlLnByb3RvdHlwZSxkZSk7dmFyIHZlPWZ1bmN0aW9uKGUpe3ZvaWQgMD09PWUmJihlPVwiXCIpO3ZhciB0PW5ldyBwZTtyZXR1cm4gdC50ZXh0PWUsdC5pc0NvbW1lbnQ9ITAsdH07ZnVuY3Rpb24gaGUoZSl7cmV0dXJuIG5ldyBwZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCxTdHJpbmcoZSkpfWZ1bmN0aW9uIG1lKGUpe3ZhciB0PW5ldyBwZShlLnRhZyxlLmRhdGEsZS5jaGlsZHJlbiYmZS5jaGlsZHJlbi5zbGljZSgpLGUudGV4dCxlLmVsbSxlLmNvbnRleHQsZS5jb21wb25lbnRPcHRpb25zLGUuYXN5bmNGYWN0b3J5KTtyZXR1cm4gdC5ucz1lLm5zLHQuaXNTdGF0aWM9ZS5pc1N0YXRpYyx0LmtleT1lLmtleSx0LmlzQ29tbWVudD1lLmlzQ29tbWVudCx0LmZuQ29udGV4dD1lLmZuQ29udGV4dCx0LmZuT3B0aW9ucz1lLmZuT3B0aW9ucyx0LmZuU2NvcGVJZD1lLmZuU2NvcGVJZCx0LmFzeW5jTWV0YT1lLmFzeW5jTWV0YSx0LmlzQ2xvbmVkPSEwLHR9dmFyIHllPUFycmF5LnByb3RvdHlwZSxnZT1PYmplY3QuY3JlYXRlKHllKTtbXCJwdXNoXCIsXCJwb3BcIixcInNoaWZ0XCIsXCJ1bnNoaWZ0XCIsXCJzcGxpY2VcIixcInNvcnRcIixcInJldmVyc2VcIl0uZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgdD15ZVtlXTtSKGdlLGUsZnVuY3Rpb24oKXtmb3IodmFyIG49W10scj1hcmd1bWVudHMubGVuZ3RoO3ItLTspbltyXT1hcmd1bWVudHNbcl07dmFyIGksbz10LmFwcGx5KHRoaXMsbiksYT10aGlzLl9fb2JfXztzd2l0Y2goZSl7Y2FzZVwicHVzaFwiOmNhc2VcInVuc2hpZnRcIjppPW47YnJlYWs7Y2FzZVwic3BsaWNlXCI6aT1uLnNsaWNlKDIpfXJldHVybiBpJiZhLm9ic2VydmVBcnJheShpKSxhLmRlcC5ub3RpZnkoKSxvfSl9KTt2YXIgX2U9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoZ2UpLGJlPSEwO2Z1bmN0aW9uICRlKGUpe2JlPWV9dmFyIHdlPWZ1bmN0aW9uKGUpe3ZhciB0O3RoaXMudmFsdWU9ZSx0aGlzLmRlcD1uZXcgY2UsdGhpcy52bUNvdW50PTAsUihlLFwiX19vYl9fXCIsdGhpcyksQXJyYXkuaXNBcnJheShlKT8oVT8odD1nZSxlLl9fcHJvdG9fXz10KTpmdW5jdGlvbihlLHQsbil7Zm9yKHZhciByPTAsaT1uLmxlbmd0aDtyPGk7cisrKXt2YXIgbz1uW3JdO1IoZSxvLHRbb10pfX0oZSxnZSxfZSksdGhpcy5vYnNlcnZlQXJyYXkoZSkpOnRoaXMud2FsayhlKX07ZnVuY3Rpb24gQ2UoZSx0KXt2YXIgbjtpZihvKGUpJiYhKGUgaW5zdGFuY2VvZiBwZSkpcmV0dXJuIHkoZSxcIl9fb2JfX1wiKSYmZS5fX29iX18gaW5zdGFuY2VvZiB3ZT9uPWUuX19vYl9fOmJlJiYhdGUoKSYmKEFycmF5LmlzQXJyYXkoZSl8fHMoZSkpJiZPYmplY3QuaXNFeHRlbnNpYmxlKGUpJiYhZS5faXNWdWUmJihuPW5ldyB3ZShlKSksdCYmbiYmbi52bUNvdW50Kyssbn1mdW5jdGlvbiB4ZShlLHQsbixyLGkpe3ZhciBvPW5ldyBjZSxhPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSx0KTtpZighYXx8ITEhPT1hLmNvbmZpZ3VyYWJsZSl7dmFyIHM9YSYmYS5nZXQsYz1hJiZhLnNldDtzJiYhY3x8MiE9PWFyZ3VtZW50cy5sZW5ndGh8fChuPWVbdF0pO3ZhciB1PSFpJiZDZShuKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXt2YXIgdD1zP3MuY2FsbChlKTpuO3JldHVybiBjZS50YXJnZXQmJihvLmRlcGVuZCgpLHUmJih1LmRlcC5kZXBlbmQoKSxBcnJheS5pc0FycmF5KHQpJiZmdW5jdGlvbiBlKHQpe2Zvcih2YXIgbj12b2lkIDAscj0wLGk9dC5sZW5ndGg7cjxpO3IrKykobj10W3JdKSYmbi5fX29iX18mJm4uX19vYl9fLmRlcC5kZXBlbmQoKSxBcnJheS5pc0FycmF5KG4pJiZlKG4pfSh0KSkpLHR9LHNldDpmdW5jdGlvbih0KXt2YXIgcj1zP3MuY2FsbChlKTpuO3Q9PT1yfHx0IT10JiZyIT1yfHxzJiYhY3x8KGM/Yy5jYWxsKGUsdCk6bj10LHU9IWkmJkNlKHQpLG8ubm90aWZ5KCkpfX0pfX1mdW5jdGlvbiBrZShlLHQsbil7aWYoQXJyYXkuaXNBcnJheShlKSYmYyh0KSlyZXR1cm4gZS5sZW5ndGg9TWF0aC5tYXgoZS5sZW5ndGgsdCksZS5zcGxpY2UodCwxLG4pLG47aWYodCBpbiBlJiYhKHQgaW4gT2JqZWN0LnByb3RvdHlwZSkpcmV0dXJuIGVbdF09bixuO3ZhciByPWUuX19vYl9fO3JldHVybiBlLl9pc1Z1ZXx8ciYmci52bUNvdW50P246cj8oeGUoci52YWx1ZSx0LG4pLHIuZGVwLm5vdGlmeSgpLG4pOihlW3RdPW4sbil9ZnVuY3Rpb24gQWUoZSx0KXtpZihBcnJheS5pc0FycmF5KGUpJiZjKHQpKWUuc3BsaWNlKHQsMSk7ZWxzZXt2YXIgbj1lLl9fb2JfXztlLl9pc1Z1ZXx8biYmbi52bUNvdW50fHx5KGUsdCkmJihkZWxldGUgZVt0XSxuJiZuLmRlcC5ub3RpZnkoKSl9fXdlLnByb3RvdHlwZS53YWxrPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1PYmplY3Qua2V5cyhlKSxuPTA7bjx0Lmxlbmd0aDtuKyspeGUoZSx0W25dKX0sd2UucHJvdG90eXBlLm9ic2VydmVBcnJheT1mdW5jdGlvbihlKXtmb3IodmFyIHQ9MCxuPWUubGVuZ3RoO3Q8bjt0KyspQ2UoZVt0XSl9O3ZhciBPZT1GLm9wdGlvbk1lcmdlU3RyYXRlZ2llcztmdW5jdGlvbiBTZShlLHQpe2lmKCF0KXJldHVybiBlO2Zvcih2YXIgbixyLGksbz1vZT9SZWZsZWN0Lm93bktleXModCk6T2JqZWN0LmtleXModCksYT0wO2E8by5sZW5ndGg7YSsrKVwiX19vYl9fXCIhPT0obj1vW2FdKSYmKHI9ZVtuXSxpPXRbbl0seShlLG4pP3IhPT1pJiZzKHIpJiZzKGkpJiZTZShyLGkpOmtlKGUsbixpKSk7cmV0dXJuIGV9ZnVuY3Rpb24gVGUoZSx0LG4pe3JldHVybiBuP2Z1bmN0aW9uKCl7dmFyIHI9XCJmdW5jdGlvblwiPT10eXBlb2YgdD90LmNhbGwobixuKTp0LGk9XCJmdW5jdGlvblwiPT10eXBlb2YgZT9lLmNhbGwobixuKTplO3JldHVybiByP1NlKHIsaSk6aX06dD9lP2Z1bmN0aW9uKCl7cmV0dXJuIFNlKFwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dC5jYWxsKHRoaXMsdGhpcyk6dCxcImZ1bmN0aW9uXCI9PXR5cGVvZiBlP2UuY2FsbCh0aGlzLHRoaXMpOmUpfTp0OmV9ZnVuY3Rpb24gRWUoZSx0KXt2YXIgbj10P2U/ZS5jb25jYXQodCk6QXJyYXkuaXNBcnJheSh0KT90Olt0XTplO3JldHVybiBuP2Z1bmN0aW9uKGUpe2Zvcih2YXIgdD1bXSxuPTA7bjxlLmxlbmd0aDtuKyspLTE9PT10LmluZGV4T2YoZVtuXSkmJnQucHVzaChlW25dKTtyZXR1cm4gdH0obik6bn1mdW5jdGlvbiBOZShlLHQsbixyKXt2YXIgaT1PYmplY3QuY3JlYXRlKGV8fG51bGwpO3JldHVybiB0P0EoaSx0KTppfU9lLmRhdGE9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBuP1RlKGUsdCxuKTp0JiZcImZ1bmN0aW9uXCIhPXR5cGVvZiB0P2U6VGUoZSx0KX0sSS5mb3JFYWNoKGZ1bmN0aW9uKGUpe09lW2VdPUVlfSksTS5mb3JFYWNoKGZ1bmN0aW9uKGUpe09lW2UrXCJzXCJdPU5lfSksT2Uud2F0Y2g9ZnVuY3Rpb24oZSx0LG4scil7aWYoZT09PVkmJihlPXZvaWQgMCksdD09PVkmJih0PXZvaWQgMCksIXQpcmV0dXJuIE9iamVjdC5jcmVhdGUoZXx8bnVsbCk7aWYoIWUpcmV0dXJuIHQ7dmFyIGk9e307Zm9yKHZhciBvIGluIEEoaSxlKSx0KXt2YXIgYT1pW29dLHM9dFtvXTthJiYhQXJyYXkuaXNBcnJheShhKSYmKGE9W2FdKSxpW29dPWE/YS5jb25jYXQocyk6QXJyYXkuaXNBcnJheShzKT9zOltzXX1yZXR1cm4gaX0sT2UucHJvcHM9T2UubWV0aG9kcz1PZS5pbmplY3Q9T2UuY29tcHV0ZWQ9ZnVuY3Rpb24oZSx0LG4scil7aWYoIWUpcmV0dXJuIHQ7dmFyIGk9T2JqZWN0LmNyZWF0ZShudWxsKTtyZXR1cm4gQShpLGUpLHQmJkEoaSx0KSxpfSxPZS5wcm92aWRlPVRlO3ZhciBqZT1mdW5jdGlvbihlLHQpe3JldHVybiB2b2lkIDA9PT10P2U6dH07ZnVuY3Rpb24gRGUoZSx0LG4pe2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIHQmJih0PXQub3B0aW9ucyksZnVuY3Rpb24oZSx0KXt2YXIgbj1lLnByb3BzO2lmKG4pe3ZhciByLGksbz17fTtpZihBcnJheS5pc0FycmF5KG4pKWZvcihyPW4ubGVuZ3RoO3ItLTspXCJzdHJpbmdcIj09dHlwZW9mKGk9bltyXSkmJihvW2IoaSldPXt0eXBlOm51bGx9KTtlbHNlIGlmKHMobikpZm9yKHZhciBhIGluIG4paT1uW2FdLG9bYihhKV09cyhpKT9pOnt0eXBlOml9O2UucHJvcHM9b319KHQpLGZ1bmN0aW9uKGUsdCl7dmFyIG49ZS5pbmplY3Q7aWYobil7dmFyIHI9ZS5pbmplY3Q9e307aWYoQXJyYXkuaXNBcnJheShuKSlmb3IodmFyIGk9MDtpPG4ubGVuZ3RoO2krKylyW25baV1dPXtmcm9tOm5baV19O2Vsc2UgaWYocyhuKSlmb3IodmFyIG8gaW4gbil7dmFyIGE9bltvXTtyW29dPXMoYSk/QSh7ZnJvbTpvfSxhKTp7ZnJvbTphfX19fSh0KSxmdW5jdGlvbihlKXt2YXIgdD1lLmRpcmVjdGl2ZXM7aWYodClmb3IodmFyIG4gaW4gdCl7dmFyIHI9dFtuXTtcImZ1bmN0aW9uXCI9PXR5cGVvZiByJiYodFtuXT17YmluZDpyLHVwZGF0ZTpyfSl9fSh0KSwhdC5fYmFzZSYmKHQuZXh0ZW5kcyYmKGU9RGUoZSx0LmV4dGVuZHMsbikpLHQubWl4aW5zKSlmb3IodmFyIHI9MCxpPXQubWl4aW5zLmxlbmd0aDtyPGk7cisrKWU9RGUoZSx0Lm1peGluc1tyXSxuKTt2YXIgbyxhPXt9O2ZvcihvIGluIGUpYyhvKTtmb3IobyBpbiB0KXkoZSxvKXx8YyhvKTtmdW5jdGlvbiBjKHIpe3ZhciBpPU9lW3JdfHxqZTthW3JdPWkoZVtyXSx0W3JdLG4scil9cmV0dXJuIGF9ZnVuY3Rpb24gTGUoZSx0LG4scil7aWYoXCJzdHJpbmdcIj09dHlwZW9mIG4pe3ZhciBpPWVbdF07aWYoeShpLG4pKXJldHVybiBpW25dO3ZhciBvPWIobik7aWYoeShpLG8pKXJldHVybiBpW29dO3ZhciBhPSQobyk7cmV0dXJuIHkoaSxhKT9pW2FdOmlbbl18fGlbb118fGlbYV19fWZ1bmN0aW9uIE1lKGUsdCxuLHIpe3ZhciBpPXRbZV0sbz0heShuLGUpLGE9bltlXSxzPVBlKEJvb2xlYW4saS50eXBlKTtpZihzPi0xKWlmKG8mJiF5KGksXCJkZWZhdWx0XCIpKWE9ITE7ZWxzZSBpZihcIlwiPT09YXx8YT09PUMoZSkpe3ZhciBjPVBlKFN0cmluZyxpLnR5cGUpOyhjPDB8fHM8YykmJihhPSEwKX1pZih2b2lkIDA9PT1hKXthPWZ1bmN0aW9uKGUsdCxuKXtpZigheSh0LFwiZGVmYXVsdFwiKSlyZXR1cm47dmFyIHI9dC5kZWZhdWx0O2lmKGUmJmUuJG9wdGlvbnMucHJvcHNEYXRhJiZ2b2lkIDA9PT1lLiRvcHRpb25zLnByb3BzRGF0YVtuXSYmdm9pZCAwIT09ZS5fcHJvcHNbbl0pcmV0dXJuIGUuX3Byb3BzW25dO3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIHImJlwiRnVuY3Rpb25cIiE9PUllKHQudHlwZSk/ci5jYWxsKGUpOnJ9KHIsaSxlKTt2YXIgdT1iZTskZSghMCksQ2UoYSksJGUodSl9cmV0dXJuIGF9ZnVuY3Rpb24gSWUoZSl7dmFyIHQ9ZSYmZS50b1N0cmluZygpLm1hdGNoKC9eXFxzKmZ1bmN0aW9uIChcXHcrKS8pO3JldHVybiB0P3RbMV06XCJcIn1mdW5jdGlvbiBGZShlLHQpe3JldHVybiBJZShlKT09PUllKHQpfWZ1bmN0aW9uIFBlKGUsdCl7aWYoIUFycmF5LmlzQXJyYXkodCkpcmV0dXJuIEZlKHQsZSk/MDotMTtmb3IodmFyIG49MCxyPXQubGVuZ3RoO248cjtuKyspaWYoRmUodFtuXSxlKSlyZXR1cm4gbjtyZXR1cm4tMX1mdW5jdGlvbiBSZShlLHQsbil7bGUoKTt0cnl7aWYodClmb3IodmFyIHI9dDtyPXIuJHBhcmVudDspe3ZhciBpPXIuJG9wdGlvbnMuZXJyb3JDYXB0dXJlZDtpZihpKWZvcih2YXIgbz0wO288aS5sZW5ndGg7bysrKXRyeXtpZighMT09PWlbb10uY2FsbChyLGUsdCxuKSlyZXR1cm59Y2F0Y2goZSl7QmUoZSxyLFwiZXJyb3JDYXB0dXJlZCBob29rXCIpfX1CZShlLHQsbil9ZmluYWxseXtmZSgpfX1mdW5jdGlvbiBIZShlLHQsbixyLGkpe3ZhciBvO3RyeXsobz1uP2UuYXBwbHkodCxuKTplLmNhbGwodCkpJiYhby5faXNWdWUmJnUobykmJiFvLl9oYW5kbGVkJiYoby5jYXRjaChmdW5jdGlvbihlKXtyZXR1cm4gUmUoZSxyLGkrXCIgKFByb21pc2UvYXN5bmMpXCIpfSksby5faGFuZGxlZD0hMCl9Y2F0Y2goZSl7UmUoZSxyLGkpfXJldHVybiBvfWZ1bmN0aW9uIEJlKGUsdCxuKXtpZihGLmVycm9ySGFuZGxlcil0cnl7cmV0dXJuIEYuZXJyb3JIYW5kbGVyLmNhbGwobnVsbCxlLHQsbil9Y2F0Y2godCl7dCE9PWUmJlVlKHQsbnVsbCxcImNvbmZpZy5lcnJvckhhbmRsZXJcIil9VWUoZSx0LG4pfWZ1bmN0aW9uIFVlKGUsdCxuKXtpZigheiYmIVZ8fFwidW5kZWZpbmVkXCI9PXR5cGVvZiBjb25zb2xlKXRocm93IGU7Y29uc29sZS5lcnJvcihlKX12YXIgemUsVmU9ITEsS2U9W10sSmU9ITE7ZnVuY3Rpb24gcWUoKXtKZT0hMTt2YXIgZT1LZS5zbGljZSgwKTtLZS5sZW5ndGg9MDtmb3IodmFyIHQ9MDt0PGUubGVuZ3RoO3QrKyllW3RdKCl9aWYoXCJ1bmRlZmluZWRcIiE9dHlwZW9mIFByb21pc2UmJnJlKFByb21pc2UpKXt2YXIgV2U9UHJvbWlzZS5yZXNvbHZlKCk7emU9ZnVuY3Rpb24oKXtXZS50aGVuKHFlKSxHJiZzZXRUaW1lb3V0KFMpfSxWZT0hMH1lbHNlIGlmKHF8fFwidW5kZWZpbmVkXCI9PXR5cGVvZiBNdXRhdGlvbk9ic2VydmVyfHwhcmUoTXV0YXRpb25PYnNlcnZlcikmJlwiW29iamVjdCBNdXRhdGlvbk9ic2VydmVyQ29uc3RydWN0b3JdXCIhPT1NdXRhdGlvbk9ic2VydmVyLnRvU3RyaW5nKCkpemU9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHNldEltbWVkaWF0ZSYmcmUoc2V0SW1tZWRpYXRlKT9mdW5jdGlvbigpe3NldEltbWVkaWF0ZShxZSl9OmZ1bmN0aW9uKCl7c2V0VGltZW91dChxZSwwKX07ZWxzZXt2YXIgWmU9MSxHZT1uZXcgTXV0YXRpb25PYnNlcnZlcihxZSksWGU9ZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoU3RyaW5nKFplKSk7R2Uub2JzZXJ2ZShYZSx7Y2hhcmFjdGVyRGF0YTohMH0pLHplPWZ1bmN0aW9uKCl7WmU9KFplKzEpJTIsWGUuZGF0YT1TdHJpbmcoWmUpfSxWZT0hMH1mdW5jdGlvbiBZZShlLHQpe3ZhciBuO2lmKEtlLnB1c2goZnVuY3Rpb24oKXtpZihlKXRyeXtlLmNhbGwodCl9Y2F0Y2goZSl7UmUoZSx0LFwibmV4dFRpY2tcIil9ZWxzZSBuJiZuKHQpfSksSmV8fChKZT0hMCx6ZSgpKSwhZSYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIFByb21pc2UpcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGUpe249ZX0pfXZhciBRZT1uZXcgaWU7ZnVuY3Rpb24gZXQoZSl7IWZ1bmN0aW9uIGUodCxuKXt2YXIgcixpO3ZhciBhPUFycmF5LmlzQXJyYXkodCk7aWYoIWEmJiFvKHQpfHxPYmplY3QuaXNGcm96ZW4odCl8fHQgaW5zdGFuY2VvZiBwZSlyZXR1cm47aWYodC5fX29iX18pe3ZhciBzPXQuX19vYl9fLmRlcC5pZDtpZihuLmhhcyhzKSlyZXR1cm47bi5hZGQocyl9aWYoYSlmb3Iocj10Lmxlbmd0aDtyLS07KWUodFtyXSxuKTtlbHNlIGZvcihpPU9iamVjdC5rZXlzKHQpLHI9aS5sZW5ndGg7ci0tOyllKHRbaVtyXV0sbil9KGUsUWUpLFFlLmNsZWFyKCl9dmFyIHR0PWcoZnVuY3Rpb24oZSl7dmFyIHQ9XCImXCI9PT1lLmNoYXJBdCgwKSxuPVwiflwiPT09KGU9dD9lLnNsaWNlKDEpOmUpLmNoYXJBdCgwKSxyPVwiIVwiPT09KGU9bj9lLnNsaWNlKDEpOmUpLmNoYXJBdCgwKTtyZXR1cm57bmFtZTplPXI/ZS5zbGljZSgxKTplLG9uY2U6bixjYXB0dXJlOnIscGFzc2l2ZTp0fX0pO2Z1bmN0aW9uIG50KGUsdCl7ZnVuY3Rpb24gbigpe3ZhciBlPWFyZ3VtZW50cyxyPW4uZm5zO2lmKCFBcnJheS5pc0FycmF5KHIpKXJldHVybiBIZShyLG51bGwsYXJndW1lbnRzLHQsXCJ2LW9uIGhhbmRsZXJcIik7Zm9yKHZhciBpPXIuc2xpY2UoKSxvPTA7bzxpLmxlbmd0aDtvKyspSGUoaVtvXSxudWxsLGUsdCxcInYtb24gaGFuZGxlclwiKX1yZXR1cm4gbi5mbnM9ZSxufWZ1bmN0aW9uIHJ0KGUsbixpLG8sYSxzKXt2YXIgYyx1LGwsZjtmb3IoYyBpbiBlKXU9ZVtjXSxsPW5bY10sZj10dChjKSx0KHUpfHwodChsKT8odCh1LmZucykmJih1PWVbY109bnQodSxzKSkscihmLm9uY2UpJiYodT1lW2NdPWEoZi5uYW1lLHUsZi5jYXB0dXJlKSksaShmLm5hbWUsdSxmLmNhcHR1cmUsZi5wYXNzaXZlLGYucGFyYW1zKSk6dSE9PWwmJihsLmZucz11LGVbY109bCkpO2ZvcihjIGluIG4pdChlW2NdKSYmbygoZj10dChjKSkubmFtZSxuW2NdLGYuY2FwdHVyZSl9ZnVuY3Rpb24gaXQoZSxpLG8pe3ZhciBhO2UgaW5zdGFuY2VvZiBwZSYmKGU9ZS5kYXRhLmhvb2t8fChlLmRhdGEuaG9vaz17fSkpO3ZhciBzPWVbaV07ZnVuY3Rpb24gYygpe28uYXBwbHkodGhpcyxhcmd1bWVudHMpLGgoYS5mbnMsYyl9dChzKT9hPW50KFtjXSk6bihzLmZucykmJnIocy5tZXJnZWQpPyhhPXMpLmZucy5wdXNoKGMpOmE9bnQoW3MsY10pLGEubWVyZ2VkPSEwLGVbaV09YX1mdW5jdGlvbiBvdChlLHQscixpLG8pe2lmKG4odCkpe2lmKHkodCxyKSlyZXR1cm4gZVtyXT10W3JdLG98fGRlbGV0ZSB0W3JdLCEwO2lmKHkodCxpKSlyZXR1cm4gZVtyXT10W2ldLG98fGRlbGV0ZSB0W2ldLCEwfXJldHVybiExfWZ1bmN0aW9uIGF0KGUpe3JldHVybiBpKGUpP1toZShlKV06QXJyYXkuaXNBcnJheShlKT9mdW5jdGlvbiBlKG8sYSl7dmFyIHM9W107dmFyIGMsdSxsLGY7Zm9yKGM9MDtjPG8ubGVuZ3RoO2MrKyl0KHU9b1tjXSl8fFwiYm9vbGVhblwiPT10eXBlb2YgdXx8KGw9cy5sZW5ndGgtMSxmPXNbbF0sQXJyYXkuaXNBcnJheSh1KT91Lmxlbmd0aD4wJiYoc3QoKHU9ZSh1LChhfHxcIlwiKStcIl9cIitjKSlbMF0pJiZzdChmKSYmKHNbbF09aGUoZi50ZXh0K3VbMF0udGV4dCksdS5zaGlmdCgpKSxzLnB1c2guYXBwbHkocyx1KSk6aSh1KT9zdChmKT9zW2xdPWhlKGYudGV4dCt1KTpcIlwiIT09dSYmcy5wdXNoKGhlKHUpKTpzdCh1KSYmc3QoZik/c1tsXT1oZShmLnRleHQrdS50ZXh0KToocihvLl9pc1ZMaXN0KSYmbih1LnRhZykmJnQodS5rZXkpJiZuKGEpJiYodS5rZXk9XCJfX3ZsaXN0XCIrYStcIl9cIitjK1wiX19cIikscy5wdXNoKHUpKSk7cmV0dXJuIHN9KGUpOnZvaWQgMH1mdW5jdGlvbiBzdChlKXtyZXR1cm4gbihlKSYmbihlLnRleHQpJiYhMT09PWUuaXNDb21tZW50fWZ1bmN0aW9uIGN0KGUsdCl7aWYoZSl7Zm9yKHZhciBuPU9iamVjdC5jcmVhdGUobnVsbCkscj1vZT9SZWZsZWN0Lm93bktleXMoZSk6T2JqZWN0LmtleXMoZSksaT0wO2k8ci5sZW5ndGg7aSsrKXt2YXIgbz1yW2ldO2lmKFwiX19vYl9fXCIhPT1vKXtmb3IodmFyIGE9ZVtvXS5mcm9tLHM9dDtzOyl7aWYocy5fcHJvdmlkZWQmJnkocy5fcHJvdmlkZWQsYSkpe25bb109cy5fcHJvdmlkZWRbYV07YnJlYWt9cz1zLiRwYXJlbnR9aWYoIXMmJlwiZGVmYXVsdFwiaW4gZVtvXSl7dmFyIGM9ZVtvXS5kZWZhdWx0O25bb109XCJmdW5jdGlvblwiPT10eXBlb2YgYz9jLmNhbGwodCk6Y319fXJldHVybiBufX1mdW5jdGlvbiB1dChlLHQpe2lmKCFlfHwhZS5sZW5ndGgpcmV0dXJue307Zm9yKHZhciBuPXt9LHI9MCxpPWUubGVuZ3RoO3I8aTtyKyspe3ZhciBvPWVbcl0sYT1vLmRhdGE7aWYoYSYmYS5hdHRycyYmYS5hdHRycy5zbG90JiZkZWxldGUgYS5hdHRycy5zbG90LG8uY29udGV4dCE9PXQmJm8uZm5Db250ZXh0IT09dHx8IWF8fG51bGw9PWEuc2xvdCkobi5kZWZhdWx0fHwobi5kZWZhdWx0PVtdKSkucHVzaChvKTtlbHNle3ZhciBzPWEuc2xvdCxjPW5bc118fChuW3NdPVtdKTtcInRlbXBsYXRlXCI9PT1vLnRhZz9jLnB1c2guYXBwbHkoYyxvLmNoaWxkcmVufHxbXSk6Yy5wdXNoKG8pfX1mb3IodmFyIHUgaW4gbiluW3VdLmV2ZXJ5KGx0KSYmZGVsZXRlIG5bdV07cmV0dXJuIG59ZnVuY3Rpb24gbHQoZSl7cmV0dXJuIGUuaXNDb21tZW50JiYhZS5hc3luY0ZhY3Rvcnl8fFwiIFwiPT09ZS50ZXh0fWZ1bmN0aW9uIGZ0KHQsbixyKXt2YXIgaSxvPU9iamVjdC5rZXlzKG4pLmxlbmd0aD4wLGE9dD8hIXQuJHN0YWJsZTohbyxzPXQmJnQuJGtleTtpZih0KXtpZih0Ll9ub3JtYWxpemVkKXJldHVybiB0Ll9ub3JtYWxpemVkO2lmKGEmJnImJnIhPT1lJiZzPT09ci4ka2V5JiYhbyYmIXIuJGhhc05vcm1hbClyZXR1cm4gcjtmb3IodmFyIGMgaW4gaT17fSx0KXRbY10mJlwiJFwiIT09Y1swXSYmKGlbY109cHQobixjLHRbY10pKX1lbHNlIGk9e307Zm9yKHZhciB1IGluIG4pdSBpbiBpfHwoaVt1XT1kdChuLHUpKTtyZXR1cm4gdCYmT2JqZWN0LmlzRXh0ZW5zaWJsZSh0KSYmKHQuX25vcm1hbGl6ZWQ9aSksUihpLFwiJHN0YWJsZVwiLGEpLFIoaSxcIiRrZXlcIixzKSxSKGksXCIkaGFzTm9ybWFsXCIsbyksaX1mdW5jdGlvbiBwdChlLHQsbil7dmFyIHI9ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoP24uYXBwbHkobnVsbCxhcmd1bWVudHMpOm4oe30pO3JldHVybihlPWUmJlwib2JqZWN0XCI9PXR5cGVvZiBlJiYhQXJyYXkuaXNBcnJheShlKT9bZV06YXQoZSkpJiYoMD09PWUubGVuZ3RofHwxPT09ZS5sZW5ndGgmJmVbMF0uaXNDb21tZW50KT92b2lkIDA6ZX07cmV0dXJuIG4ucHJveHkmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse2dldDpyLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSkscn1mdW5jdGlvbiBkdChlLHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlW3RdfX1mdW5jdGlvbiB2dChlLHQpe3ZhciByLGksYSxzLGM7aWYoQXJyYXkuaXNBcnJheShlKXx8XCJzdHJpbmdcIj09dHlwZW9mIGUpZm9yKHI9bmV3IEFycmF5KGUubGVuZ3RoKSxpPTAsYT1lLmxlbmd0aDtpPGE7aSsrKXJbaV09dChlW2ldLGkpO2Vsc2UgaWYoXCJudW1iZXJcIj09dHlwZW9mIGUpZm9yKHI9bmV3IEFycmF5KGUpLGk9MDtpPGU7aSsrKXJbaV09dChpKzEsaSk7ZWxzZSBpZihvKGUpKWlmKG9lJiZlW1N5bWJvbC5pdGVyYXRvcl0pe3I9W107Zm9yKHZhciB1PWVbU3ltYm9sLml0ZXJhdG9yXSgpLGw9dS5uZXh0KCk7IWwuZG9uZTspci5wdXNoKHQobC52YWx1ZSxyLmxlbmd0aCkpLGw9dS5uZXh0KCl9ZWxzZSBmb3Iocz1PYmplY3Qua2V5cyhlKSxyPW5ldyBBcnJheShzLmxlbmd0aCksaT0wLGE9cy5sZW5ndGg7aTxhO2krKyljPXNbaV0scltpXT10KGVbY10sYyxpKTtyZXR1cm4gbihyKXx8KHI9W10pLHIuX2lzVkxpc3Q9ITAscn1mdW5jdGlvbiBodChlLHQsbixyKXt2YXIgaSxvPXRoaXMuJHNjb3BlZFNsb3RzW2VdO28/KG49bnx8e30sciYmKG49QShBKHt9LHIpLG4pKSxpPW8obil8fHQpOmk9dGhpcy4kc2xvdHNbZV18fHQ7dmFyIGE9biYmbi5zbG90O3JldHVybiBhP3RoaXMuJGNyZWF0ZUVsZW1lbnQoXCJ0ZW1wbGF0ZVwiLHtzbG90OmF9LGkpOml9ZnVuY3Rpb24gbXQoZSl7cmV0dXJuIExlKHRoaXMuJG9wdGlvbnMsXCJmaWx0ZXJzXCIsZSl8fEV9ZnVuY3Rpb24geXQoZSx0KXtyZXR1cm4gQXJyYXkuaXNBcnJheShlKT8tMT09PWUuaW5kZXhPZih0KTplIT09dH1mdW5jdGlvbiBndChlLHQsbixyLGkpe3ZhciBvPUYua2V5Q29kZXNbdF18fG47cmV0dXJuIGkmJnImJiFGLmtleUNvZGVzW3RdP3l0KGkscik6bz95dChvLGUpOnI/QyhyKSE9PXQ6dm9pZCAwfWZ1bmN0aW9uIF90KGUsdCxuLHIsaSl7aWYobilpZihvKG4pKXt2YXIgYTtBcnJheS5pc0FycmF5KG4pJiYobj1PKG4pKTt2YXIgcz1mdW5jdGlvbihvKXtpZihcImNsYXNzXCI9PT1vfHxcInN0eWxlXCI9PT1vfHx2KG8pKWE9ZTtlbHNle3ZhciBzPWUuYXR0cnMmJmUuYXR0cnMudHlwZTthPXJ8fEYubXVzdFVzZVByb3AodCxzLG8pP2UuZG9tUHJvcHN8fChlLmRvbVByb3BzPXt9KTplLmF0dHJzfHwoZS5hdHRycz17fSl9dmFyIGM9YihvKSx1PUMobyk7YyBpbiBhfHx1IGluIGF8fChhW29dPW5bb10saSYmKChlLm9ufHwoZS5vbj17fSkpW1widXBkYXRlOlwiK29dPWZ1bmN0aW9uKGUpe25bb109ZX0pKX07Zm9yKHZhciBjIGluIG4pcyhjKX1lbHNlO3JldHVybiBlfWZ1bmN0aW9uIGJ0KGUsdCl7dmFyIG49dGhpcy5fc3RhdGljVHJlZXN8fCh0aGlzLl9zdGF0aWNUcmVlcz1bXSkscj1uW2VdO3JldHVybiByJiYhdD9yOih3dChyPW5bZV09dGhpcy4kb3B0aW9ucy5zdGF0aWNSZW5kZXJGbnNbZV0uY2FsbCh0aGlzLl9yZW5kZXJQcm94eSxudWxsLHRoaXMpLFwiX19zdGF0aWNfX1wiK2UsITEpLHIpfWZ1bmN0aW9uICR0KGUsdCxuKXtyZXR1cm4gd3QoZSxcIl9fb25jZV9fXCIrdCsobj9cIl9cIituOlwiXCIpLCEwKSxlfWZ1bmN0aW9uIHd0KGUsdCxuKXtpZihBcnJheS5pc0FycmF5KGUpKWZvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKWVbcl0mJlwic3RyaW5nXCIhPXR5cGVvZiBlW3JdJiZDdChlW3JdLHQrXCJfXCIrcixuKTtlbHNlIEN0KGUsdCxuKX1mdW5jdGlvbiBDdChlLHQsbil7ZS5pc1N0YXRpYz0hMCxlLmtleT10LGUuaXNPbmNlPW59ZnVuY3Rpb24geHQoZSx0KXtpZih0KWlmKHModCkpe3ZhciBuPWUub249ZS5vbj9BKHt9LGUub24pOnt9O2Zvcih2YXIgciBpbiB0KXt2YXIgaT1uW3JdLG89dFtyXTtuW3JdPWk/W10uY29uY2F0KGksbyk6b319ZWxzZTtyZXR1cm4gZX1mdW5jdGlvbiBrdChlLHQsbixyKXt0PXR8fHskc3RhYmxlOiFufTtmb3IodmFyIGk9MDtpPGUubGVuZ3RoO2krKyl7dmFyIG89ZVtpXTtBcnJheS5pc0FycmF5KG8pP2t0KG8sdCxuKTpvJiYoby5wcm94eSYmKG8uZm4ucHJveHk9ITApLHRbby5rZXldPW8uZm4pfXJldHVybiByJiYodC4ka2V5PXIpLHR9ZnVuY3Rpb24gQXQoZSx0KXtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rPTIpe3ZhciByPXRbbl07XCJzdHJpbmdcIj09dHlwZW9mIHImJnImJihlW3Rbbl1dPXRbbisxXSl9cmV0dXJuIGV9ZnVuY3Rpb24gT3QoZSx0KXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgZT90K2U6ZX1mdW5jdGlvbiBTdChlKXtlLl9vPSR0LGUuX249ZixlLl9zPWwsZS5fbD12dCxlLl90PWh0LGUuX3E9TixlLl9pPWosZS5fbT1idCxlLl9mPW10LGUuX2s9Z3QsZS5fYj1fdCxlLl92PWhlLGUuX2U9dmUsZS5fdT1rdCxlLl9nPXh0LGUuX2Q9QXQsZS5fcD1PdH1mdW5jdGlvbiBUdCh0LG4saSxvLGEpe3ZhciBzLGM9dGhpcyx1PWEub3B0aW9uczt5KG8sXCJfdWlkXCIpPyhzPU9iamVjdC5jcmVhdGUobykpLl9vcmlnaW5hbD1vOihzPW8sbz1vLl9vcmlnaW5hbCk7dmFyIGw9cih1Ll9jb21waWxlZCksZj0hbDt0aGlzLmRhdGE9dCx0aGlzLnByb3BzPW4sdGhpcy5jaGlsZHJlbj1pLHRoaXMucGFyZW50PW8sdGhpcy5saXN0ZW5lcnM9dC5vbnx8ZSx0aGlzLmluamVjdGlvbnM9Y3QodS5pbmplY3QsbyksdGhpcy5zbG90cz1mdW5jdGlvbigpe3JldHVybiBjLiRzbG90c3x8ZnQodC5zY29wZWRTbG90cyxjLiRzbG90cz11dChpLG8pKSxjLiRzbG90c30sT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsXCJzY29wZWRTbG90c1wiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBmdCh0LnNjb3BlZFNsb3RzLHRoaXMuc2xvdHMoKSl9fSksbCYmKHRoaXMuJG9wdGlvbnM9dSx0aGlzLiRzbG90cz10aGlzLnNsb3RzKCksdGhpcy4kc2NvcGVkU2xvdHM9ZnQodC5zY29wZWRTbG90cyx0aGlzLiRzbG90cykpLHUuX3Njb3BlSWQ/dGhpcy5fYz1mdW5jdGlvbihlLHQsbixyKXt2YXIgaT1QdChzLGUsdCxuLHIsZik7cmV0dXJuIGkmJiFBcnJheS5pc0FycmF5KGkpJiYoaS5mblNjb3BlSWQ9dS5fc2NvcGVJZCxpLmZuQ29udGV4dD1vKSxpfTp0aGlzLl9jPWZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiBQdChzLGUsdCxuLHIsZil9fWZ1bmN0aW9uIEV0KGUsdCxuLHIsaSl7dmFyIG89bWUoZSk7cmV0dXJuIG8uZm5Db250ZXh0PW4sby5mbk9wdGlvbnM9cix0LnNsb3QmJigoby5kYXRhfHwoby5kYXRhPXt9KSkuc2xvdD10LnNsb3QpLG99ZnVuY3Rpb24gTnQoZSx0KXtmb3IodmFyIG4gaW4gdCllW2IobildPXRbbl19U3QoVHQucHJvdG90eXBlKTt2YXIganQ9e2luaXQ6ZnVuY3Rpb24oZSx0KXtpZihlLmNvbXBvbmVudEluc3RhbmNlJiYhZS5jb21wb25lbnRJbnN0YW5jZS5faXNEZXN0cm95ZWQmJmUuZGF0YS5rZWVwQWxpdmUpe3ZhciByPWU7anQucHJlcGF0Y2gocixyKX1lbHNleyhlLmNvbXBvbmVudEluc3RhbmNlPWZ1bmN0aW9uKGUsdCl7dmFyIHI9e19pc0NvbXBvbmVudDohMCxfcGFyZW50Vm5vZGU6ZSxwYXJlbnQ6dH0saT1lLmRhdGEuaW5saW5lVGVtcGxhdGU7bihpKSYmKHIucmVuZGVyPWkucmVuZGVyLHIuc3RhdGljUmVuZGVyRm5zPWkuc3RhdGljUmVuZGVyRm5zKTtyZXR1cm4gbmV3IGUuY29tcG9uZW50T3B0aW9ucy5DdG9yKHIpfShlLFd0KSkuJG1vdW50KHQ/ZS5lbG06dm9pZCAwLHQpfX0scHJlcGF0Y2g6ZnVuY3Rpb24odCxuKXt2YXIgcj1uLmNvbXBvbmVudE9wdGlvbnM7IWZ1bmN0aW9uKHQsbixyLGksbyl7dmFyIGE9aS5kYXRhLnNjb3BlZFNsb3RzLHM9dC4kc2NvcGVkU2xvdHMsYz0hIShhJiYhYS4kc3RhYmxlfHxzIT09ZSYmIXMuJHN0YWJsZXx8YSYmdC4kc2NvcGVkU2xvdHMuJGtleSE9PWEuJGtleSksdT0hIShvfHx0LiRvcHRpb25zLl9yZW5kZXJDaGlsZHJlbnx8Yyk7dC4kb3B0aW9ucy5fcGFyZW50Vm5vZGU9aSx0LiR2bm9kZT1pLHQuX3Zub2RlJiYodC5fdm5vZGUucGFyZW50PWkpO2lmKHQuJG9wdGlvbnMuX3JlbmRlckNoaWxkcmVuPW8sdC4kYXR0cnM9aS5kYXRhLmF0dHJzfHxlLHQuJGxpc3RlbmVycz1yfHxlLG4mJnQuJG9wdGlvbnMucHJvcHMpeyRlKCExKTtmb3IodmFyIGw9dC5fcHJvcHMsZj10LiRvcHRpb25zLl9wcm9wS2V5c3x8W10scD0wO3A8Zi5sZW5ndGg7cCsrKXt2YXIgZD1mW3BdLHY9dC4kb3B0aW9ucy5wcm9wcztsW2RdPU1lKGQsdixuLHQpfSRlKCEwKSx0LiRvcHRpb25zLnByb3BzRGF0YT1ufXI9cnx8ZTt2YXIgaD10LiRvcHRpb25zLl9wYXJlbnRMaXN0ZW5lcnM7dC4kb3B0aW9ucy5fcGFyZW50TGlzdGVuZXJzPXIscXQodCxyLGgpLHUmJih0LiRzbG90cz11dChvLGkuY29udGV4dCksdC4kZm9yY2VVcGRhdGUoKSl9KG4uY29tcG9uZW50SW5zdGFuY2U9dC5jb21wb25lbnRJbnN0YW5jZSxyLnByb3BzRGF0YSxyLmxpc3RlbmVycyxuLHIuY2hpbGRyZW4pfSxpbnNlcnQ6ZnVuY3Rpb24oZSl7dmFyIHQsbj1lLmNvbnRleHQscj1lLmNvbXBvbmVudEluc3RhbmNlO3IuX2lzTW91bnRlZHx8KHIuX2lzTW91bnRlZD0hMCxZdChyLFwibW91bnRlZFwiKSksZS5kYXRhLmtlZXBBbGl2ZSYmKG4uX2lzTW91bnRlZD8oKHQ9cikuX2luYWN0aXZlPSExLGVuLnB1c2godCkpOlh0KHIsITApKX0sZGVzdHJveTpmdW5jdGlvbihlKXt2YXIgdD1lLmNvbXBvbmVudEluc3RhbmNlO3QuX2lzRGVzdHJveWVkfHwoZS5kYXRhLmtlZXBBbGl2ZT9mdW5jdGlvbiBlKHQsbil7aWYobiYmKHQuX2RpcmVjdEluYWN0aXZlPSEwLEd0KHQpKSlyZXR1cm47aWYoIXQuX2luYWN0aXZlKXt0Ll9pbmFjdGl2ZT0hMDtmb3IodmFyIHI9MDtyPHQuJGNoaWxkcmVuLmxlbmd0aDtyKyspZSh0LiRjaGlsZHJlbltyXSk7WXQodCxcImRlYWN0aXZhdGVkXCIpfX0odCwhMCk6dC4kZGVzdHJveSgpKX19LER0PU9iamVjdC5rZXlzKGp0KTtmdW5jdGlvbiBMdChpLGEscyxjLGwpe2lmKCF0KGkpKXt2YXIgZj1zLiRvcHRpb25zLl9iYXNlO2lmKG8oaSkmJihpPWYuZXh0ZW5kKGkpKSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBpKXt2YXIgcDtpZih0KGkuY2lkKSYmdm9pZCAwPT09KGk9ZnVuY3Rpb24oZSxpKXtpZihyKGUuZXJyb3IpJiZuKGUuZXJyb3JDb21wKSlyZXR1cm4gZS5lcnJvckNvbXA7aWYobihlLnJlc29sdmVkKSlyZXR1cm4gZS5yZXNvbHZlZDt2YXIgYT1IdDthJiZuKGUub3duZXJzKSYmLTE9PT1lLm93bmVycy5pbmRleE9mKGEpJiZlLm93bmVycy5wdXNoKGEpO2lmKHIoZS5sb2FkaW5nKSYmbihlLmxvYWRpbmdDb21wKSlyZXR1cm4gZS5sb2FkaW5nQ29tcDtpZihhJiYhbihlLm93bmVycykpe3ZhciBzPWUub3duZXJzPVthXSxjPSEwLGw9bnVsbCxmPW51bGw7YS4kb24oXCJob29rOmRlc3Ryb3llZFwiLGZ1bmN0aW9uKCl7cmV0dXJuIGgocyxhKX0pO3ZhciBwPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0wLG49cy5sZW5ndGg7dDxuO3QrKylzW3RdLiRmb3JjZVVwZGF0ZSgpO2UmJihzLmxlbmd0aD0wLG51bGwhPT1sJiYoY2xlYXJUaW1lb3V0KGwpLGw9bnVsbCksbnVsbCE9PWYmJihjbGVhclRpbWVvdXQoZiksZj1udWxsKSl9LGQ9RChmdW5jdGlvbih0KXtlLnJlc29sdmVkPUJ0KHQsaSksYz9zLmxlbmd0aD0wOnAoITApfSksdj1EKGZ1bmN0aW9uKHQpe24oZS5lcnJvckNvbXApJiYoZS5lcnJvcj0hMCxwKCEwKSl9KSxtPWUoZCx2KTtyZXR1cm4gbyhtKSYmKHUobSk/dChlLnJlc29sdmVkKSYmbS50aGVuKGQsdik6dShtLmNvbXBvbmVudCkmJihtLmNvbXBvbmVudC50aGVuKGQsdiksbihtLmVycm9yKSYmKGUuZXJyb3JDb21wPUJ0KG0uZXJyb3IsaSkpLG4obS5sb2FkaW5nKSYmKGUubG9hZGluZ0NvbXA9QnQobS5sb2FkaW5nLGkpLDA9PT1tLmRlbGF5P2UubG9hZGluZz0hMDpsPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtsPW51bGwsdChlLnJlc29sdmVkKSYmdChlLmVycm9yKSYmKGUubG9hZGluZz0hMCxwKCExKSl9LG0uZGVsYXl8fDIwMCkpLG4obS50aW1lb3V0KSYmKGY9c2V0VGltZW91dChmdW5jdGlvbigpe2Y9bnVsbCx0KGUucmVzb2x2ZWQpJiZ2KG51bGwpfSxtLnRpbWVvdXQpKSkpLGM9ITEsZS5sb2FkaW5nP2UubG9hZGluZ0NvbXA6ZS5yZXNvbHZlZH19KHA9aSxmKSkpcmV0dXJuIGZ1bmN0aW9uKGUsdCxuLHIsaSl7dmFyIG89dmUoKTtyZXR1cm4gby5hc3luY0ZhY3Rvcnk9ZSxvLmFzeW5jTWV0YT17ZGF0YTp0LGNvbnRleHQ6bixjaGlsZHJlbjpyLHRhZzppfSxvfShwLGEscyxjLGwpO2E9YXx8e30sJG4oaSksbihhLm1vZGVsKSYmZnVuY3Rpb24oZSx0KXt2YXIgcj1lLm1vZGVsJiZlLm1vZGVsLnByb3B8fFwidmFsdWVcIixpPWUubW9kZWwmJmUubW9kZWwuZXZlbnR8fFwiaW5wdXRcIjsodC5hdHRyc3x8KHQuYXR0cnM9e30pKVtyXT10Lm1vZGVsLnZhbHVlO3ZhciBvPXQub258fCh0Lm9uPXt9KSxhPW9baV0scz10Lm1vZGVsLmNhbGxiYWNrO24oYSk/KEFycmF5LmlzQXJyYXkoYSk/LTE9PT1hLmluZGV4T2Yocyk6YSE9PXMpJiYob1tpXT1bc10uY29uY2F0KGEpKTpvW2ldPXN9KGkub3B0aW9ucyxhKTt2YXIgZD1mdW5jdGlvbihlLHIsaSl7dmFyIG89ci5vcHRpb25zLnByb3BzO2lmKCF0KG8pKXt2YXIgYT17fSxzPWUuYXR0cnMsYz1lLnByb3BzO2lmKG4ocyl8fG4oYykpZm9yKHZhciB1IGluIG8pe3ZhciBsPUModSk7b3QoYSxjLHUsbCwhMCl8fG90KGEscyx1LGwsITEpfXJldHVybiBhfX0oYSxpKTtpZihyKGkub3B0aW9ucy5mdW5jdGlvbmFsKSlyZXR1cm4gZnVuY3Rpb24odCxyLGksbyxhKXt2YXIgcz10Lm9wdGlvbnMsYz17fSx1PXMucHJvcHM7aWYobih1KSlmb3IodmFyIGwgaW4gdSljW2xdPU1lKGwsdSxyfHxlKTtlbHNlIG4oaS5hdHRycykmJk50KGMsaS5hdHRycyksbihpLnByb3BzKSYmTnQoYyxpLnByb3BzKTt2YXIgZj1uZXcgVHQoaSxjLGEsbyx0KSxwPXMucmVuZGVyLmNhbGwobnVsbCxmLl9jLGYpO2lmKHAgaW5zdGFuY2VvZiBwZSlyZXR1cm4gRXQocCxpLGYucGFyZW50LHMpO2lmKEFycmF5LmlzQXJyYXkocCkpe2Zvcih2YXIgZD1hdChwKXx8W10sdj1uZXcgQXJyYXkoZC5sZW5ndGgpLGg9MDtoPGQubGVuZ3RoO2grKyl2W2hdPUV0KGRbaF0saSxmLnBhcmVudCxzKTtyZXR1cm4gdn19KGksZCxhLHMsYyk7dmFyIHY9YS5vbjtpZihhLm9uPWEubmF0aXZlT24scihpLm9wdGlvbnMuYWJzdHJhY3QpKXt2YXIgbT1hLnNsb3Q7YT17fSxtJiYoYS5zbG90PW0pfSFmdW5jdGlvbihlKXtmb3IodmFyIHQ9ZS5ob29rfHwoZS5ob29rPXt9KSxuPTA7bjxEdC5sZW5ndGg7bisrKXt2YXIgcj1EdFtuXSxpPXRbcl0sbz1qdFtyXTtpPT09b3x8aSYmaS5fbWVyZ2VkfHwodFtyXT1pP010KG8saSk6byl9fShhKTt2YXIgeT1pLm9wdGlvbnMubmFtZXx8bDtyZXR1cm4gbmV3IHBlKFwidnVlLWNvbXBvbmVudC1cIitpLmNpZCsoeT9cIi1cIit5OlwiXCIpLGEsdm9pZCAwLHZvaWQgMCx2b2lkIDAscyx7Q3RvcjppLHByb3BzRGF0YTpkLGxpc3RlbmVyczp2LHRhZzpsLGNoaWxkcmVuOmN9LHApfX19ZnVuY3Rpb24gTXQoZSx0KXt2YXIgbj1mdW5jdGlvbihuLHIpe2UobixyKSx0KG4scil9O3JldHVybiBuLl9tZXJnZWQ9ITAsbn12YXIgSXQ9MSxGdD0yO2Z1bmN0aW9uIFB0KGUsYSxzLGMsdSxsKXtyZXR1cm4oQXJyYXkuaXNBcnJheShzKXx8aShzKSkmJih1PWMsYz1zLHM9dm9pZCAwKSxyKGwpJiYodT1GdCksZnVuY3Rpb24oZSxpLGEscyxjKXtpZihuKGEpJiZuKGEuX19vYl9fKSlyZXR1cm4gdmUoKTtuKGEpJiZuKGEuaXMpJiYoaT1hLmlzKTtpZighaSlyZXR1cm4gdmUoKTtBcnJheS5pc0FycmF5KHMpJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBzWzBdJiYoKGE9YXx8e30pLnNjb3BlZFNsb3RzPXtkZWZhdWx0OnNbMF19LHMubGVuZ3RoPTApO2M9PT1GdD9zPWF0KHMpOmM9PT1JdCYmKHM9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTA7dDxlLmxlbmd0aDt0KyspaWYoQXJyYXkuaXNBcnJheShlW3RdKSlyZXR1cm4gQXJyYXkucHJvdG90eXBlLmNvbmNhdC5hcHBseShbXSxlKTtyZXR1cm4gZX0ocykpO3ZhciB1LGw7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGkpe3ZhciBmO2w9ZS4kdm5vZGUmJmUuJHZub2RlLm5zfHxGLmdldFRhZ05hbWVzcGFjZShpKSx1PUYuaXNSZXNlcnZlZFRhZyhpKT9uZXcgcGUoRi5wYXJzZVBsYXRmb3JtVGFnTmFtZShpKSxhLHMsdm9pZCAwLHZvaWQgMCxlKTphJiZhLnByZXx8IW4oZj1MZShlLiRvcHRpb25zLFwiY29tcG9uZW50c1wiLGkpKT9uZXcgcGUoaSxhLHMsdm9pZCAwLHZvaWQgMCxlKTpMdChmLGEsZSxzLGkpfWVsc2UgdT1MdChpLGEsZSxzKTtyZXR1cm4gQXJyYXkuaXNBcnJheSh1KT91Om4odSk/KG4obCkmJmZ1bmN0aW9uIGUoaSxvLGEpe2kubnM9bztcImZvcmVpZ25PYmplY3RcIj09PWkudGFnJiYobz12b2lkIDAsYT0hMCk7aWYobihpLmNoaWxkcmVuKSlmb3IodmFyIHM9MCxjPWkuY2hpbGRyZW4ubGVuZ3RoO3M8YztzKyspe3ZhciB1PWkuY2hpbGRyZW5bc107bih1LnRhZykmJih0KHUubnMpfHxyKGEpJiZcInN2Z1wiIT09dS50YWcpJiZlKHUsbyxhKX19KHUsbCksbihhKSYmZnVuY3Rpb24oZSl7byhlLnN0eWxlKSYmZXQoZS5zdHlsZSk7byhlLmNsYXNzKSYmZXQoZS5jbGFzcyl9KGEpLHUpOnZlKCl9KGUsYSxzLGMsdSl9dmFyIFJ0LEh0PW51bGw7ZnVuY3Rpb24gQnQoZSx0KXtyZXR1cm4oZS5fX2VzTW9kdWxlfHxvZSYmXCJNb2R1bGVcIj09PWVbU3ltYm9sLnRvU3RyaW5nVGFnXSkmJihlPWUuZGVmYXVsdCksbyhlKT90LmV4dGVuZChlKTplfWZ1bmN0aW9uIFV0KGUpe3JldHVybiBlLmlzQ29tbWVudCYmZS5hc3luY0ZhY3Rvcnl9ZnVuY3Rpb24genQoZSl7aWYoQXJyYXkuaXNBcnJheShlKSlmb3IodmFyIHQ9MDt0PGUubGVuZ3RoO3QrKyl7dmFyIHI9ZVt0XTtpZihuKHIpJiYobihyLmNvbXBvbmVudE9wdGlvbnMpfHxVdChyKSkpcmV0dXJuIHJ9fWZ1bmN0aW9uIFZ0KGUsdCl7UnQuJG9uKGUsdCl9ZnVuY3Rpb24gS3QoZSx0KXtSdC4kb2ZmKGUsdCl9ZnVuY3Rpb24gSnQoZSx0KXt2YXIgbj1SdDtyZXR1cm4gZnVuY3Rpb24gcigpe251bGwhPT10LmFwcGx5KG51bGwsYXJndW1lbnRzKSYmbi4kb2ZmKGUscil9fWZ1bmN0aW9uIHF0KGUsdCxuKXtSdD1lLHJ0KHQsbnx8e30sVnQsS3QsSnQsZSksUnQ9dm9pZCAwfXZhciBXdD1udWxsO2Z1bmN0aW9uIFp0KGUpe3ZhciB0PVd0O3JldHVybiBXdD1lLGZ1bmN0aW9uKCl7V3Q9dH19ZnVuY3Rpb24gR3QoZSl7Zm9yKDtlJiYoZT1lLiRwYXJlbnQpOylpZihlLl9pbmFjdGl2ZSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBYdChlLHQpe2lmKHQpe2lmKGUuX2RpcmVjdEluYWN0aXZlPSExLEd0KGUpKXJldHVybn1lbHNlIGlmKGUuX2RpcmVjdEluYWN0aXZlKXJldHVybjtpZihlLl9pbmFjdGl2ZXx8bnVsbD09PWUuX2luYWN0aXZlKXtlLl9pbmFjdGl2ZT0hMTtmb3IodmFyIG49MDtuPGUuJGNoaWxkcmVuLmxlbmd0aDtuKyspWHQoZS4kY2hpbGRyZW5bbl0pO1l0KGUsXCJhY3RpdmF0ZWRcIil9fWZ1bmN0aW9uIFl0KGUsdCl7bGUoKTt2YXIgbj1lLiRvcHRpb25zW3RdLHI9dCtcIiBob29rXCI7aWYobilmb3IodmFyIGk9MCxvPW4ubGVuZ3RoO2k8bztpKyspSGUobltpXSxlLG51bGwsZSxyKTtlLl9oYXNIb29rRXZlbnQmJmUuJGVtaXQoXCJob29rOlwiK3QpLGZlKCl9dmFyIFF0PVtdLGVuPVtdLHRuPXt9LG5uPSExLHJuPSExLG9uPTA7dmFyIGFuPTAsc249RGF0ZS5ub3c7aWYoeiYmIXEpe3ZhciBjbj13aW5kb3cucGVyZm9ybWFuY2U7Y24mJlwiZnVuY3Rpb25cIj09dHlwZW9mIGNuLm5vdyYmc24oKT5kb2N1bWVudC5jcmVhdGVFdmVudChcIkV2ZW50XCIpLnRpbWVTdGFtcCYmKHNuPWZ1bmN0aW9uKCl7cmV0dXJuIGNuLm5vdygpfSl9ZnVuY3Rpb24gdW4oKXt2YXIgZSx0O2Zvcihhbj1zbigpLHJuPSEwLFF0LnNvcnQoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5pZC10LmlkfSksb249MDtvbjxRdC5sZW5ndGg7b24rKykoZT1RdFtvbl0pLmJlZm9yZSYmZS5iZWZvcmUoKSx0PWUuaWQsdG5bdF09bnVsbCxlLnJ1bigpO3ZhciBuPWVuLnNsaWNlKCkscj1RdC5zbGljZSgpO29uPVF0Lmxlbmd0aD1lbi5sZW5ndGg9MCx0bj17fSxubj1ybj0hMSxmdW5jdGlvbihlKXtmb3IodmFyIHQ9MDt0PGUubGVuZ3RoO3QrKyllW3RdLl9pbmFjdGl2ZT0hMCxYdChlW3RdLCEwKX0obiksZnVuY3Rpb24oZSl7dmFyIHQ9ZS5sZW5ndGg7Zm9yKDt0LS07KXt2YXIgbj1lW3RdLHI9bi52bTtyLl93YXRjaGVyPT09biYmci5faXNNb3VudGVkJiYhci5faXNEZXN0cm95ZWQmJll0KHIsXCJ1cGRhdGVkXCIpfX0ociksbmUmJkYuZGV2dG9vbHMmJm5lLmVtaXQoXCJmbHVzaFwiKX12YXIgbG49MCxmbj1mdW5jdGlvbihlLHQsbixyLGkpe3RoaXMudm09ZSxpJiYoZS5fd2F0Y2hlcj10aGlzKSxlLl93YXRjaGVycy5wdXNoKHRoaXMpLHI/KHRoaXMuZGVlcD0hIXIuZGVlcCx0aGlzLnVzZXI9ISFyLnVzZXIsdGhpcy5sYXp5PSEhci5sYXp5LHRoaXMuc3luYz0hIXIuc3luYyx0aGlzLmJlZm9yZT1yLmJlZm9yZSk6dGhpcy5kZWVwPXRoaXMudXNlcj10aGlzLmxhenk9dGhpcy5zeW5jPSExLHRoaXMuY2I9bix0aGlzLmlkPSsrbG4sdGhpcy5hY3RpdmU9ITAsdGhpcy5kaXJ0eT10aGlzLmxhenksdGhpcy5kZXBzPVtdLHRoaXMubmV3RGVwcz1bXSx0aGlzLmRlcElkcz1uZXcgaWUsdGhpcy5uZXdEZXBJZHM9bmV3IGllLHRoaXMuZXhwcmVzc2lvbj1cIlwiLFwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dGhpcy5nZXR0ZXI9dDoodGhpcy5nZXR0ZXI9ZnVuY3Rpb24oZSl7aWYoIUgudGVzdChlKSl7dmFyIHQ9ZS5zcGxpdChcIi5cIik7cmV0dXJuIGZ1bmN0aW9uKGUpe2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKXtpZighZSlyZXR1cm47ZT1lW3Rbbl1dfXJldHVybiBlfX19KHQpLHRoaXMuZ2V0dGVyfHwodGhpcy5nZXR0ZXI9UykpLHRoaXMudmFsdWU9dGhpcy5sYXp5P3ZvaWQgMDp0aGlzLmdldCgpfTtmbi5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKCl7dmFyIGU7bGUodGhpcyk7dmFyIHQ9dGhpcy52bTt0cnl7ZT10aGlzLmdldHRlci5jYWxsKHQsdCl9Y2F0Y2goZSl7aWYoIXRoaXMudXNlcil0aHJvdyBlO1JlKGUsdCwnZ2V0dGVyIGZvciB3YXRjaGVyIFwiJyt0aGlzLmV4cHJlc3Npb24rJ1wiJyl9ZmluYWxseXt0aGlzLmRlZXAmJmV0KGUpLGZlKCksdGhpcy5jbGVhbnVwRGVwcygpfXJldHVybiBlfSxmbi5wcm90b3R5cGUuYWRkRGVwPWZ1bmN0aW9uKGUpe3ZhciB0PWUuaWQ7dGhpcy5uZXdEZXBJZHMuaGFzKHQpfHwodGhpcy5uZXdEZXBJZHMuYWRkKHQpLHRoaXMubmV3RGVwcy5wdXNoKGUpLHRoaXMuZGVwSWRzLmhhcyh0KXx8ZS5hZGRTdWIodGhpcykpfSxmbi5wcm90b3R5cGUuY2xlYW51cERlcHM9ZnVuY3Rpb24oKXtmb3IodmFyIGU9dGhpcy5kZXBzLmxlbmd0aDtlLS07KXt2YXIgdD10aGlzLmRlcHNbZV07dGhpcy5uZXdEZXBJZHMuaGFzKHQuaWQpfHx0LnJlbW92ZVN1Yih0aGlzKX12YXIgbj10aGlzLmRlcElkczt0aGlzLmRlcElkcz10aGlzLm5ld0RlcElkcyx0aGlzLm5ld0RlcElkcz1uLHRoaXMubmV3RGVwSWRzLmNsZWFyKCksbj10aGlzLmRlcHMsdGhpcy5kZXBzPXRoaXMubmV3RGVwcyx0aGlzLm5ld0RlcHM9bix0aGlzLm5ld0RlcHMubGVuZ3RoPTB9LGZuLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oKXt0aGlzLmxhenk/dGhpcy5kaXJ0eT0hMDp0aGlzLnN5bmM/dGhpcy5ydW4oKTpmdW5jdGlvbihlKXt2YXIgdD1lLmlkO2lmKG51bGw9PXRuW3RdKXtpZih0blt0XT0hMCxybil7Zm9yKHZhciBuPVF0Lmxlbmd0aC0xO24+b24mJlF0W25dLmlkPmUuaWQ7KW4tLTtRdC5zcGxpY2UobisxLDAsZSl9ZWxzZSBRdC5wdXNoKGUpO25ufHwobm49ITAsWWUodW4pKX19KHRoaXMpfSxmbi5wcm90b3R5cGUucnVuPWZ1bmN0aW9uKCl7aWYodGhpcy5hY3RpdmUpe3ZhciBlPXRoaXMuZ2V0KCk7aWYoZSE9PXRoaXMudmFsdWV8fG8oZSl8fHRoaXMuZGVlcCl7dmFyIHQ9dGhpcy52YWx1ZTtpZih0aGlzLnZhbHVlPWUsdGhpcy51c2VyKXRyeXt0aGlzLmNiLmNhbGwodGhpcy52bSxlLHQpfWNhdGNoKGUpe1JlKGUsdGhpcy52bSwnY2FsbGJhY2sgZm9yIHdhdGNoZXIgXCInK3RoaXMuZXhwcmVzc2lvbisnXCInKX1lbHNlIHRoaXMuY2IuY2FsbCh0aGlzLnZtLGUsdCl9fX0sZm4ucHJvdG90eXBlLmV2YWx1YXRlPWZ1bmN0aW9uKCl7dGhpcy52YWx1ZT10aGlzLmdldCgpLHRoaXMuZGlydHk9ITF9LGZuLnByb3RvdHlwZS5kZXBlbmQ9ZnVuY3Rpb24oKXtmb3IodmFyIGU9dGhpcy5kZXBzLmxlbmd0aDtlLS07KXRoaXMuZGVwc1tlXS5kZXBlbmQoKX0sZm4ucHJvdG90eXBlLnRlYXJkb3duPWZ1bmN0aW9uKCl7aWYodGhpcy5hY3RpdmUpe3RoaXMudm0uX2lzQmVpbmdEZXN0cm95ZWR8fGgodGhpcy52bS5fd2F0Y2hlcnMsdGhpcyk7Zm9yKHZhciBlPXRoaXMuZGVwcy5sZW5ndGg7ZS0tOyl0aGlzLmRlcHNbZV0ucmVtb3ZlU3ViKHRoaXMpO3RoaXMuYWN0aXZlPSExfX07dmFyIHBuPXtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCxnZXQ6UyxzZXQ6U307ZnVuY3Rpb24gZG4oZSx0LG4pe3BuLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzW3RdW25dfSxwbi5zZXQ9ZnVuY3Rpb24oZSl7dGhpc1t0XVtuXT1lfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxuLHBuKX1mdW5jdGlvbiB2bihlKXtlLl93YXRjaGVycz1bXTt2YXIgdD1lLiRvcHRpb25zO3QucHJvcHMmJmZ1bmN0aW9uKGUsdCl7dmFyIG49ZS4kb3B0aW9ucy5wcm9wc0RhdGF8fHt9LHI9ZS5fcHJvcHM9e30saT1lLiRvcHRpb25zLl9wcm9wS2V5cz1bXTtlLiRwYXJlbnQmJiRlKCExKTt2YXIgbz1mdW5jdGlvbihvKXtpLnB1c2gobyk7dmFyIGE9TWUobyx0LG4sZSk7eGUocixvLGEpLG8gaW4gZXx8ZG4oZSxcIl9wcm9wc1wiLG8pfTtmb3IodmFyIGEgaW4gdClvKGEpOyRlKCEwKX0oZSx0LnByb3BzKSx0Lm1ldGhvZHMmJmZ1bmN0aW9uKGUsdCl7ZS4kb3B0aW9ucy5wcm9wcztmb3IodmFyIG4gaW4gdCllW25dPVwiZnVuY3Rpb25cIiE9dHlwZW9mIHRbbl0/Uzp4KHRbbl0sZSl9KGUsdC5tZXRob2RzKSx0LmRhdGE/ZnVuY3Rpb24oZSl7dmFyIHQ9ZS4kb3B0aW9ucy5kYXRhO3ModD1lLl9kYXRhPVwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/ZnVuY3Rpb24oZSx0KXtsZSgpO3RyeXtyZXR1cm4gZS5jYWxsKHQsdCl9Y2F0Y2goZSl7cmV0dXJuIFJlKGUsdCxcImRhdGEoKVwiKSx7fX1maW5hbGx5e2ZlKCl9fSh0LGUpOnR8fHt9KXx8KHQ9e30pO3ZhciBuPU9iamVjdC5rZXlzKHQpLHI9ZS4kb3B0aW9ucy5wcm9wcyxpPShlLiRvcHRpb25zLm1ldGhvZHMsbi5sZW5ndGgpO2Zvcig7aS0tOyl7dmFyIG89bltpXTtyJiZ5KHIsbyl8fChhPXZvaWQgMCwzNiE9PShhPShvK1wiXCIpLmNoYXJDb2RlQXQoMCkpJiY5NSE9PWEmJmRuKGUsXCJfZGF0YVwiLG8pKX12YXIgYTtDZSh0LCEwKX0oZSk6Q2UoZS5fZGF0YT17fSwhMCksdC5jb21wdXRlZCYmZnVuY3Rpb24oZSx0KXt2YXIgbj1lLl9jb21wdXRlZFdhdGNoZXJzPU9iamVjdC5jcmVhdGUobnVsbCkscj10ZSgpO2Zvcih2YXIgaSBpbiB0KXt2YXIgbz10W2ldLGE9XCJmdW5jdGlvblwiPT10eXBlb2Ygbz9vOm8uZ2V0O3J8fChuW2ldPW5ldyBmbihlLGF8fFMsUyxobikpLGkgaW4gZXx8bW4oZSxpLG8pfX0oZSx0LmNvbXB1dGVkKSx0LndhdGNoJiZ0LndhdGNoIT09WSYmZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gdCl7dmFyIHI9dFtuXTtpZihBcnJheS5pc0FycmF5KHIpKWZvcih2YXIgaT0wO2k8ci5sZW5ndGg7aSsrKV9uKGUsbixyW2ldKTtlbHNlIF9uKGUsbixyKX19KGUsdC53YXRjaCl9dmFyIGhuPXtsYXp5OiEwfTtmdW5jdGlvbiBtbihlLHQsbil7dmFyIHI9IXRlKCk7XCJmdW5jdGlvblwiPT10eXBlb2Ygbj8ocG4uZ2V0PXI/eW4odCk6Z24obikscG4uc2V0PVMpOihwbi5nZXQ9bi5nZXQ/ciYmITEhPT1uLmNhY2hlP3luKHQpOmduKG4uZ2V0KTpTLHBuLnNldD1uLnNldHx8UyksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCxwbil9ZnVuY3Rpb24geW4oZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fY29tcHV0ZWRXYXRjaGVycyYmdGhpcy5fY29tcHV0ZWRXYXRjaGVyc1tlXTtpZih0KXJldHVybiB0LmRpcnR5JiZ0LmV2YWx1YXRlKCksY2UudGFyZ2V0JiZ0LmRlcGVuZCgpLHQudmFsdWV9fWZ1bmN0aW9uIGduKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlLmNhbGwodGhpcyx0aGlzKX19ZnVuY3Rpb24gX24oZSx0LG4scil7cmV0dXJuIHMobikmJihyPW4sbj1uLmhhbmRsZXIpLFwic3RyaW5nXCI9PXR5cGVvZiBuJiYobj1lW25dKSxlLiR3YXRjaCh0LG4scil9dmFyIGJuPTA7ZnVuY3Rpb24gJG4oZSl7dmFyIHQ9ZS5vcHRpb25zO2lmKGUuc3VwZXIpe3ZhciBuPSRuKGUuc3VwZXIpO2lmKG4hPT1lLnN1cGVyT3B0aW9ucyl7ZS5zdXBlck9wdGlvbnM9bjt2YXIgcj1mdW5jdGlvbihlKXt2YXIgdCxuPWUub3B0aW9ucyxyPWUuc2VhbGVkT3B0aW9ucztmb3IodmFyIGkgaW4gbiluW2ldIT09cltpXSYmKHR8fCh0PXt9KSx0W2ldPW5baV0pO3JldHVybiB0fShlKTtyJiZBKGUuZXh0ZW5kT3B0aW9ucyxyKSwodD1lLm9wdGlvbnM9RGUobixlLmV4dGVuZE9wdGlvbnMpKS5uYW1lJiYodC5jb21wb25lbnRzW3QubmFtZV09ZSl9fXJldHVybiB0fWZ1bmN0aW9uIHduKGUpe3RoaXMuX2luaXQoZSl9ZnVuY3Rpb24gQ24oZSl7ZS5jaWQ9MDt2YXIgdD0xO2UuZXh0ZW5kPWZ1bmN0aW9uKGUpe2U9ZXx8e307dmFyIG49dGhpcyxyPW4uY2lkLGk9ZS5fQ3Rvcnx8KGUuX0N0b3I9e30pO2lmKGlbcl0pcmV0dXJuIGlbcl07dmFyIG89ZS5uYW1lfHxuLm9wdGlvbnMubmFtZSxhPWZ1bmN0aW9uKGUpe3RoaXMuX2luaXQoZSl9O3JldHVybihhLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKG4ucHJvdG90eXBlKSkuY29uc3RydWN0b3I9YSxhLmNpZD10KyssYS5vcHRpb25zPURlKG4ub3B0aW9ucyxlKSxhLnN1cGVyPW4sYS5vcHRpb25zLnByb3BzJiZmdW5jdGlvbihlKXt2YXIgdD1lLm9wdGlvbnMucHJvcHM7Zm9yKHZhciBuIGluIHQpZG4oZS5wcm90b3R5cGUsXCJfcHJvcHNcIixuKX0oYSksYS5vcHRpb25zLmNvbXB1dGVkJiZmdW5jdGlvbihlKXt2YXIgdD1lLm9wdGlvbnMuY29tcHV0ZWQ7Zm9yKHZhciBuIGluIHQpbW4oZS5wcm90b3R5cGUsbix0W25dKX0oYSksYS5leHRlbmQ9bi5leHRlbmQsYS5taXhpbj1uLm1peGluLGEudXNlPW4udXNlLE0uZm9yRWFjaChmdW5jdGlvbihlKXthW2VdPW5bZV19KSxvJiYoYS5vcHRpb25zLmNvbXBvbmVudHNbb109YSksYS5zdXBlck9wdGlvbnM9bi5vcHRpb25zLGEuZXh0ZW5kT3B0aW9ucz1lLGEuc2VhbGVkT3B0aW9ucz1BKHt9LGEub3B0aW9ucyksaVtyXT1hLGF9fWZ1bmN0aW9uIHhuKGUpe3JldHVybiBlJiYoZS5DdG9yLm9wdGlvbnMubmFtZXx8ZS50YWcpfWZ1bmN0aW9uIGtuKGUsdCl7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSk/ZS5pbmRleE9mKHQpPi0xOlwic3RyaW5nXCI9PXR5cGVvZiBlP2Uuc3BsaXQoXCIsXCIpLmluZGV4T2YodCk+LTE6KG49ZSxcIltvYmplY3QgUmVnRXhwXVwiPT09YS5jYWxsKG4pJiZlLnRlc3QodCkpO3ZhciBufWZ1bmN0aW9uIEFuKGUsdCl7dmFyIG49ZS5jYWNoZSxyPWUua2V5cyxpPWUuX3Zub2RlO2Zvcih2YXIgbyBpbiBuKXt2YXIgYT1uW29dO2lmKGEpe3ZhciBzPXhuKGEuY29tcG9uZW50T3B0aW9ucyk7cyYmIXQocykmJk9uKG4sbyxyLGkpfX19ZnVuY3Rpb24gT24oZSx0LG4scil7dmFyIGk9ZVt0XTshaXx8ciYmaS50YWc9PT1yLnRhZ3x8aS5jb21wb25lbnRJbnN0YW5jZS4kZGVzdHJveSgpLGVbdF09bnVsbCxoKG4sdCl9IWZ1bmN0aW9uKHQpe3QucHJvdG90eXBlLl9pbml0PWZ1bmN0aW9uKHQpe3ZhciBuPXRoaXM7bi5fdWlkPWJuKyssbi5faXNWdWU9ITAsdCYmdC5faXNDb21wb25lbnQ/ZnVuY3Rpb24oZSx0KXt2YXIgbj1lLiRvcHRpb25zPU9iamVjdC5jcmVhdGUoZS5jb25zdHJ1Y3Rvci5vcHRpb25zKSxyPXQuX3BhcmVudFZub2RlO24ucGFyZW50PXQucGFyZW50LG4uX3BhcmVudFZub2RlPXI7dmFyIGk9ci5jb21wb25lbnRPcHRpb25zO24ucHJvcHNEYXRhPWkucHJvcHNEYXRhLG4uX3BhcmVudExpc3RlbmVycz1pLmxpc3RlbmVycyxuLl9yZW5kZXJDaGlsZHJlbj1pLmNoaWxkcmVuLG4uX2NvbXBvbmVudFRhZz1pLnRhZyx0LnJlbmRlciYmKG4ucmVuZGVyPXQucmVuZGVyLG4uc3RhdGljUmVuZGVyRm5zPXQuc3RhdGljUmVuZGVyRm5zKX0obix0KTpuLiRvcHRpb25zPURlKCRuKG4uY29uc3RydWN0b3IpLHR8fHt9LG4pLG4uX3JlbmRlclByb3h5PW4sbi5fc2VsZj1uLGZ1bmN0aW9uKGUpe3ZhciB0PWUuJG9wdGlvbnMsbj10LnBhcmVudDtpZihuJiYhdC5hYnN0cmFjdCl7Zm9yKDtuLiRvcHRpb25zLmFic3RyYWN0JiZuLiRwYXJlbnQ7KW49bi4kcGFyZW50O24uJGNoaWxkcmVuLnB1c2goZSl9ZS4kcGFyZW50PW4sZS4kcm9vdD1uP24uJHJvb3Q6ZSxlLiRjaGlsZHJlbj1bXSxlLiRyZWZzPXt9LGUuX3dhdGNoZXI9bnVsbCxlLl9pbmFjdGl2ZT1udWxsLGUuX2RpcmVjdEluYWN0aXZlPSExLGUuX2lzTW91bnRlZD0hMSxlLl9pc0Rlc3Ryb3llZD0hMSxlLl9pc0JlaW5nRGVzdHJveWVkPSExfShuKSxmdW5jdGlvbihlKXtlLl9ldmVudHM9T2JqZWN0LmNyZWF0ZShudWxsKSxlLl9oYXNIb29rRXZlbnQ9ITE7dmFyIHQ9ZS4kb3B0aW9ucy5fcGFyZW50TGlzdGVuZXJzO3QmJnF0KGUsdCl9KG4pLGZ1bmN0aW9uKHQpe3QuX3Zub2RlPW51bGwsdC5fc3RhdGljVHJlZXM9bnVsbDt2YXIgbj10LiRvcHRpb25zLHI9dC4kdm5vZGU9bi5fcGFyZW50Vm5vZGUsaT1yJiZyLmNvbnRleHQ7dC4kc2xvdHM9dXQobi5fcmVuZGVyQ2hpbGRyZW4saSksdC4kc2NvcGVkU2xvdHM9ZSx0Ll9jPWZ1bmN0aW9uKGUsbixyLGkpe3JldHVybiBQdCh0LGUsbixyLGksITEpfSx0LiRjcmVhdGVFbGVtZW50PWZ1bmN0aW9uKGUsbixyLGkpe3JldHVybiBQdCh0LGUsbixyLGksITApfTt2YXIgbz1yJiZyLmRhdGE7eGUodCxcIiRhdHRyc1wiLG8mJm8uYXR0cnN8fGUsbnVsbCwhMCkseGUodCxcIiRsaXN0ZW5lcnNcIixuLl9wYXJlbnRMaXN0ZW5lcnN8fGUsbnVsbCwhMCl9KG4pLFl0KG4sXCJiZWZvcmVDcmVhdGVcIiksZnVuY3Rpb24oZSl7dmFyIHQ9Y3QoZS4kb3B0aW9ucy5pbmplY3QsZSk7dCYmKCRlKCExKSxPYmplY3Qua2V5cyh0KS5mb3JFYWNoKGZ1bmN0aW9uKG4pe3hlKGUsbix0W25dKX0pLCRlKCEwKSl9KG4pLHZuKG4pLGZ1bmN0aW9uKGUpe3ZhciB0PWUuJG9wdGlvbnMucHJvdmlkZTt0JiYoZS5fcHJvdmlkZWQ9XCJmdW5jdGlvblwiPT10eXBlb2YgdD90LmNhbGwoZSk6dCl9KG4pLFl0KG4sXCJjcmVhdGVkXCIpLG4uJG9wdGlvbnMuZWwmJm4uJG1vdW50KG4uJG9wdGlvbnMuZWwpfX0od24pLGZ1bmN0aW9uKGUpe3ZhciB0PXtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGF0YX19LG49e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wcm9wc319O09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSxcIiRkYXRhXCIsdCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLFwiJHByb3BzXCIsbiksZS5wcm90b3R5cGUuJHNldD1rZSxlLnByb3RvdHlwZS4kZGVsZXRlPUFlLGUucHJvdG90eXBlLiR3YXRjaD1mdW5jdGlvbihlLHQsbil7aWYocyh0KSlyZXR1cm4gX24odGhpcyxlLHQsbik7KG49bnx8e30pLnVzZXI9ITA7dmFyIHI9bmV3IGZuKHRoaXMsZSx0LG4pO2lmKG4uaW1tZWRpYXRlKXRyeXt0LmNhbGwodGhpcyxyLnZhbHVlKX1jYXRjaChlKXtSZShlLHRoaXMsJ2NhbGxiYWNrIGZvciBpbW1lZGlhdGUgd2F0Y2hlciBcIicrci5leHByZXNzaW9uKydcIicpfXJldHVybiBmdW5jdGlvbigpe3IudGVhcmRvd24oKX19fSh3biksZnVuY3Rpb24oZSl7dmFyIHQ9L15ob29rOi87ZS5wcm90b3R5cGUuJG9uPWZ1bmN0aW9uKGUsbil7dmFyIHI9dGhpcztpZihBcnJheS5pc0FycmF5KGUpKWZvcih2YXIgaT0wLG89ZS5sZW5ndGg7aTxvO2krKylyLiRvbihlW2ldLG4pO2Vsc2Uoci5fZXZlbnRzW2VdfHwoci5fZXZlbnRzW2VdPVtdKSkucHVzaChuKSx0LnRlc3QoZSkmJihyLl9oYXNIb29rRXZlbnQ9ITApO3JldHVybiByfSxlLnByb3RvdHlwZS4kb25jZT1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXM7ZnVuY3Rpb24gcigpe24uJG9mZihlLHIpLHQuYXBwbHkobixhcmd1bWVudHMpfXJldHVybiByLmZuPXQsbi4kb24oZSxyKSxufSxlLnByb3RvdHlwZS4kb2ZmPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcztpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gbi5fZXZlbnRzPU9iamVjdC5jcmVhdGUobnVsbCksbjtpZihBcnJheS5pc0FycmF5KGUpKXtmb3IodmFyIHI9MCxpPWUubGVuZ3RoO3I8aTtyKyspbi4kb2ZmKGVbcl0sdCk7cmV0dXJuIG59dmFyIG8sYT1uLl9ldmVudHNbZV07aWYoIWEpcmV0dXJuIG47aWYoIXQpcmV0dXJuIG4uX2V2ZW50c1tlXT1udWxsLG47Zm9yKHZhciBzPWEubGVuZ3RoO3MtLTspaWYoKG89YVtzXSk9PT10fHxvLmZuPT09dCl7YS5zcGxpY2UocywxKTticmVha31yZXR1cm4gbn0sZS5wcm90b3R5cGUuJGVtaXQ9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fZXZlbnRzW2VdO2lmKHQpe3Q9dC5sZW5ndGg+MT9rKHQpOnQ7Zm9yKHZhciBuPWsoYXJndW1lbnRzLDEpLHI9J2V2ZW50IGhhbmRsZXIgZm9yIFwiJytlKydcIicsaT0wLG89dC5sZW5ndGg7aTxvO2krKylIZSh0W2ldLHRoaXMsbix0aGlzLHIpfXJldHVybiB0aGlzfX0od24pLGZ1bmN0aW9uKGUpe2UucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLHI9bi4kZWwsaT1uLl92bm9kZSxvPVp0KG4pO24uX3Zub2RlPWUsbi4kZWw9aT9uLl9fcGF0Y2hfXyhpLGUpOm4uX19wYXRjaF9fKG4uJGVsLGUsdCwhMSksbygpLHImJihyLl9fdnVlX189bnVsbCksbi4kZWwmJihuLiRlbC5fX3Z1ZV9fPW4pLG4uJHZub2RlJiZuLiRwYXJlbnQmJm4uJHZub2RlPT09bi4kcGFyZW50Ll92bm9kZSYmKG4uJHBhcmVudC4kZWw9bi4kZWwpfSxlLnByb3RvdHlwZS4kZm9yY2VVcGRhdGU9ZnVuY3Rpb24oKXt0aGlzLl93YXRjaGVyJiZ0aGlzLl93YXRjaGVyLnVwZGF0ZSgpfSxlLnByb3RvdHlwZS4kZGVzdHJveT1mdW5jdGlvbigpe3ZhciBlPXRoaXM7aWYoIWUuX2lzQmVpbmdEZXN0cm95ZWQpe1l0KGUsXCJiZWZvcmVEZXN0cm95XCIpLGUuX2lzQmVpbmdEZXN0cm95ZWQ9ITA7dmFyIHQ9ZS4kcGFyZW50OyF0fHx0Ll9pc0JlaW5nRGVzdHJveWVkfHxlLiRvcHRpb25zLmFic3RyYWN0fHxoKHQuJGNoaWxkcmVuLGUpLGUuX3dhdGNoZXImJmUuX3dhdGNoZXIudGVhcmRvd24oKTtmb3IodmFyIG49ZS5fd2F0Y2hlcnMubGVuZ3RoO24tLTspZS5fd2F0Y2hlcnNbbl0udGVhcmRvd24oKTtlLl9kYXRhLl9fb2JfXyYmZS5fZGF0YS5fX29iX18udm1Db3VudC0tLGUuX2lzRGVzdHJveWVkPSEwLGUuX19wYXRjaF9fKGUuX3Zub2RlLG51bGwpLFl0KGUsXCJkZXN0cm95ZWRcIiksZS4kb2ZmKCksZS4kZWwmJihlLiRlbC5fX3Z1ZV9fPW51bGwpLGUuJHZub2RlJiYoZS4kdm5vZGUucGFyZW50PW51bGwpfX19KHduKSxmdW5jdGlvbihlKXtTdChlLnByb3RvdHlwZSksZS5wcm90b3R5cGUuJG5leHRUaWNrPWZ1bmN0aW9uKGUpe3JldHVybiBZZShlLHRoaXMpfSxlLnByb3RvdHlwZS5fcmVuZGVyPWZ1bmN0aW9uKCl7dmFyIGUsdD10aGlzLG49dC4kb3B0aW9ucyxyPW4ucmVuZGVyLGk9bi5fcGFyZW50Vm5vZGU7aSYmKHQuJHNjb3BlZFNsb3RzPWZ0KGkuZGF0YS5zY29wZWRTbG90cyx0LiRzbG90cyx0LiRzY29wZWRTbG90cykpLHQuJHZub2RlPWk7dHJ5e0h0PXQsZT1yLmNhbGwodC5fcmVuZGVyUHJveHksdC4kY3JlYXRlRWxlbWVudCl9Y2F0Y2gobil7UmUobix0LFwicmVuZGVyXCIpLGU9dC5fdm5vZGV9ZmluYWxseXtIdD1udWxsfXJldHVybiBBcnJheS5pc0FycmF5KGUpJiYxPT09ZS5sZW5ndGgmJihlPWVbMF0pLGUgaW5zdGFuY2VvZiBwZXx8KGU9dmUoKSksZS5wYXJlbnQ9aSxlfX0od24pO3ZhciBTbj1bU3RyaW5nLFJlZ0V4cCxBcnJheV0sVG49e0tlZXBBbGl2ZTp7bmFtZTpcImtlZXAtYWxpdmVcIixhYnN0cmFjdDohMCxwcm9wczp7aW5jbHVkZTpTbixleGNsdWRlOlNuLG1heDpbU3RyaW5nLE51bWJlcl19LGNyZWF0ZWQ6ZnVuY3Rpb24oKXt0aGlzLmNhY2hlPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5rZXlzPVtdfSxkZXN0cm95ZWQ6ZnVuY3Rpb24oKXtmb3IodmFyIGUgaW4gdGhpcy5jYWNoZSlPbih0aGlzLmNhY2hlLGUsdGhpcy5rZXlzKX0sbW91bnRlZDpmdW5jdGlvbigpe3ZhciBlPXRoaXM7dGhpcy4kd2F0Y2goXCJpbmNsdWRlXCIsZnVuY3Rpb24odCl7QW4oZSxmdW5jdGlvbihlKXtyZXR1cm4ga24odCxlKX0pfSksdGhpcy4kd2F0Y2goXCJleGNsdWRlXCIsZnVuY3Rpb24odCl7QW4oZSxmdW5jdGlvbihlKXtyZXR1cm4ha24odCxlKX0pfSl9LHJlbmRlcjpmdW5jdGlvbigpe3ZhciBlPXRoaXMuJHNsb3RzLmRlZmF1bHQsdD16dChlKSxuPXQmJnQuY29tcG9uZW50T3B0aW9ucztpZihuKXt2YXIgcj14bihuKSxpPXRoaXMuaW5jbHVkZSxvPXRoaXMuZXhjbHVkZTtpZihpJiYoIXJ8fCFrbihpLHIpKXx8byYmciYma24obyxyKSlyZXR1cm4gdDt2YXIgYT10aGlzLmNhY2hlLHM9dGhpcy5rZXlzLGM9bnVsbD09dC5rZXk/bi5DdG9yLmNpZCsobi50YWc/XCI6OlwiK24udGFnOlwiXCIpOnQua2V5O2FbY10/KHQuY29tcG9uZW50SW5zdGFuY2U9YVtjXS5jb21wb25lbnRJbnN0YW5jZSxoKHMsYykscy5wdXNoKGMpKTooYVtjXT10LHMucHVzaChjKSx0aGlzLm1heCYmcy5sZW5ndGg+cGFyc2VJbnQodGhpcy5tYXgpJiZPbihhLHNbMF0scyx0aGlzLl92bm9kZSkpLHQuZGF0YS5rZWVwQWxpdmU9ITB9cmV0dXJuIHR8fGUmJmVbMF19fX07IWZ1bmN0aW9uKGUpe3ZhciB0PXtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gRn19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLFwiY29uZmlnXCIsdCksZS51dGlsPXt3YXJuOmFlLGV4dGVuZDpBLG1lcmdlT3B0aW9uczpEZSxkZWZpbmVSZWFjdGl2ZTp4ZX0sZS5zZXQ9a2UsZS5kZWxldGU9QWUsZS5uZXh0VGljaz1ZZSxlLm9ic2VydmFibGU9ZnVuY3Rpb24oZSl7cmV0dXJuIENlKGUpLGV9LGUub3B0aW9ucz1PYmplY3QuY3JlYXRlKG51bGwpLE0uZm9yRWFjaChmdW5jdGlvbih0KXtlLm9wdGlvbnNbdCtcInNcIl09T2JqZWN0LmNyZWF0ZShudWxsKX0pLGUub3B0aW9ucy5fYmFzZT1lLEEoZS5vcHRpb25zLmNvbXBvbmVudHMsVG4pLGZ1bmN0aW9uKGUpe2UudXNlPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX2luc3RhbGxlZFBsdWdpbnN8fCh0aGlzLl9pbnN0YWxsZWRQbHVnaW5zPVtdKTtpZih0LmluZGV4T2YoZSk+LTEpcmV0dXJuIHRoaXM7dmFyIG49ayhhcmd1bWVudHMsMSk7cmV0dXJuIG4udW5zaGlmdCh0aGlzKSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBlLmluc3RhbGw/ZS5pbnN0YWxsLmFwcGx5KGUsbik6XCJmdW5jdGlvblwiPT10eXBlb2YgZSYmZS5hcHBseShudWxsLG4pLHQucHVzaChlKSx0aGlzfX0oZSksZnVuY3Rpb24oZSl7ZS5taXhpbj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5vcHRpb25zPURlKHRoaXMub3B0aW9ucyxlKSx0aGlzfX0oZSksQ24oZSksZnVuY3Rpb24oZSl7TS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2VbdF09ZnVuY3Rpb24oZSxuKXtyZXR1cm4gbj8oXCJjb21wb25lbnRcIj09PXQmJnMobikmJihuLm5hbWU9bi5uYW1lfHxlLG49dGhpcy5vcHRpb25zLl9iYXNlLmV4dGVuZChuKSksXCJkaXJlY3RpdmVcIj09PXQmJlwiZnVuY3Rpb25cIj09dHlwZW9mIG4mJihuPXtiaW5kOm4sdXBkYXRlOm59KSx0aGlzLm9wdGlvbnNbdCtcInNcIl1bZV09bixuKTp0aGlzLm9wdGlvbnNbdCtcInNcIl1bZV19fSl9KGUpfSh3biksT2JqZWN0LmRlZmluZVByb3BlcnR5KHduLnByb3RvdHlwZSxcIiRpc1NlcnZlclwiLHtnZXQ6dGV9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkod24ucHJvdG90eXBlLFwiJHNzckNvbnRleHRcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJHZub2RlJiZ0aGlzLiR2bm9kZS5zc3JDb250ZXh0fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3bixcIkZ1bmN0aW9uYWxSZW5kZXJDb250ZXh0XCIse3ZhbHVlOlR0fSksd24udmVyc2lvbj1cIjIuNi4xMFwiO3ZhciBFbj1wKFwic3R5bGUsY2xhc3NcIiksTm49cChcImlucHV0LHRleHRhcmVhLG9wdGlvbixzZWxlY3QscHJvZ3Jlc3NcIiksam49ZnVuY3Rpb24oZSx0LG4pe3JldHVyblwidmFsdWVcIj09PW4mJk5uKGUpJiZcImJ1dHRvblwiIT09dHx8XCJzZWxlY3RlZFwiPT09biYmXCJvcHRpb25cIj09PWV8fFwiY2hlY2tlZFwiPT09biYmXCJpbnB1dFwiPT09ZXx8XCJtdXRlZFwiPT09biYmXCJ2aWRlb1wiPT09ZX0sRG49cChcImNvbnRlbnRlZGl0YWJsZSxkcmFnZ2FibGUsc3BlbGxjaGVja1wiKSxMbj1wKFwiZXZlbnRzLGNhcmV0LHR5cGluZyxwbGFpbnRleHQtb25seVwiKSxNbj1mdW5jdGlvbihlLHQpe3JldHVybiBIbih0KXx8XCJmYWxzZVwiPT09dD9cImZhbHNlXCI6XCJjb250ZW50ZWRpdGFibGVcIj09PWUmJkxuKHQpP3Q6XCJ0cnVlXCJ9LEluPXAoXCJhbGxvd2Z1bGxzY3JlZW4sYXN5bmMsYXV0b2ZvY3VzLGF1dG9wbGF5LGNoZWNrZWQsY29tcGFjdCxjb250cm9scyxkZWNsYXJlLGRlZmF1bHQsZGVmYXVsdGNoZWNrZWQsZGVmYXVsdG11dGVkLGRlZmF1bHRzZWxlY3RlZCxkZWZlcixkaXNhYmxlZCxlbmFibGVkLGZvcm1ub3ZhbGlkYXRlLGhpZGRlbixpbmRldGVybWluYXRlLGluZXJ0LGlzbWFwLGl0ZW1zY29wZSxsb29wLG11bHRpcGxlLG11dGVkLG5vaHJlZixub3Jlc2l6ZSxub3NoYWRlLG5vdmFsaWRhdGUsbm93cmFwLG9wZW4scGF1c2VvbmV4aXQscmVhZG9ubHkscmVxdWlyZWQscmV2ZXJzZWQsc2NvcGVkLHNlYW1sZXNzLHNlbGVjdGVkLHNvcnRhYmxlLHRyYW5zbGF0ZSx0cnVlc3BlZWQsdHlwZW11c3RtYXRjaCx2aXNpYmxlXCIpLEZuPVwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlua1wiLFBuPWZ1bmN0aW9uKGUpe3JldHVyblwiOlwiPT09ZS5jaGFyQXQoNSkmJlwieGxpbmtcIj09PWUuc2xpY2UoMCw1KX0sUm49ZnVuY3Rpb24oZSl7cmV0dXJuIFBuKGUpP2Uuc2xpY2UoNixlLmxlbmd0aCk6XCJcIn0sSG49ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9PWV8fCExPT09ZX07ZnVuY3Rpb24gQm4oZSl7Zm9yKHZhciB0PWUuZGF0YSxyPWUsaT1lO24oaS5jb21wb25lbnRJbnN0YW5jZSk7KShpPWkuY29tcG9uZW50SW5zdGFuY2UuX3Zub2RlKSYmaS5kYXRhJiYodD1VbihpLmRhdGEsdCkpO2Zvcig7bihyPXIucGFyZW50KTspciYmci5kYXRhJiYodD1Vbih0LHIuZGF0YSkpO3JldHVybiBmdW5jdGlvbihlLHQpe2lmKG4oZSl8fG4odCkpcmV0dXJuIHpuKGUsVm4odCkpO3JldHVyblwiXCJ9KHQuc3RhdGljQ2xhc3MsdC5jbGFzcyl9ZnVuY3Rpb24gVW4oZSx0KXtyZXR1cm57c3RhdGljQ2xhc3M6em4oZS5zdGF0aWNDbGFzcyx0LnN0YXRpY0NsYXNzKSxjbGFzczpuKGUuY2xhc3MpP1tlLmNsYXNzLHQuY2xhc3NdOnQuY2xhc3N9fWZ1bmN0aW9uIHpuKGUsdCl7cmV0dXJuIGU/dD9lK1wiIFwiK3Q6ZTp0fHxcIlwifWZ1bmN0aW9uIFZuKGUpe3JldHVybiBBcnJheS5pc0FycmF5KGUpP2Z1bmN0aW9uKGUpe2Zvcih2YXIgdCxyPVwiXCIsaT0wLG89ZS5sZW5ndGg7aTxvO2krKyluKHQ9Vm4oZVtpXSkpJiZcIlwiIT09dCYmKHImJihyKz1cIiBcIikscis9dCk7cmV0dXJuIHJ9KGUpOm8oZSk/ZnVuY3Rpb24oZSl7dmFyIHQ9XCJcIjtmb3IodmFyIG4gaW4gZSllW25dJiYodCYmKHQrPVwiIFwiKSx0Kz1uKTtyZXR1cm4gdH0oZSk6XCJzdHJpbmdcIj09dHlwZW9mIGU/ZTpcIlwifXZhciBLbj17c3ZnOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixtYXRoOlwiaHR0cDovL3d3dy53My5vcmcvMTk5OC9NYXRoL01hdGhNTFwifSxKbj1wKFwiaHRtbCxib2R5LGJhc2UsaGVhZCxsaW5rLG1ldGEsc3R5bGUsdGl0bGUsYWRkcmVzcyxhcnRpY2xlLGFzaWRlLGZvb3RlcixoZWFkZXIsaDEsaDIsaDMsaDQsaDUsaDYsaGdyb3VwLG5hdixzZWN0aW9uLGRpdixkZCxkbCxkdCxmaWdjYXB0aW9uLGZpZ3VyZSxwaWN0dXJlLGhyLGltZyxsaSxtYWluLG9sLHAscHJlLHVsLGEsYixhYmJyLGJkaSxiZG8sYnIsY2l0ZSxjb2RlLGRhdGEsZGZuLGVtLGksa2JkLG1hcmsscSxycCxydCxydGMscnVieSxzLHNhbXAsc21hbGwsc3BhbixzdHJvbmcsc3ViLHN1cCx0aW1lLHUsdmFyLHdicixhcmVhLGF1ZGlvLG1hcCx0cmFjayx2aWRlbyxlbWJlZCxvYmplY3QscGFyYW0sc291cmNlLGNhbnZhcyxzY3JpcHQsbm9zY3JpcHQsZGVsLGlucyxjYXB0aW9uLGNvbCxjb2xncm91cCx0YWJsZSx0aGVhZCx0Ym9keSx0ZCx0aCx0cixidXR0b24sZGF0YWxpc3QsZmllbGRzZXQsZm9ybSxpbnB1dCxsYWJlbCxsZWdlbmQsbWV0ZXIsb3B0Z3JvdXAsb3B0aW9uLG91dHB1dCxwcm9ncmVzcyxzZWxlY3QsdGV4dGFyZWEsZGV0YWlscyxkaWFsb2csbWVudSxtZW51aXRlbSxzdW1tYXJ5LGNvbnRlbnQsZWxlbWVudCxzaGFkb3csdGVtcGxhdGUsYmxvY2txdW90ZSxpZnJhbWUsdGZvb3RcIikscW49cChcInN2ZyxhbmltYXRlLGNpcmNsZSxjbGlwcGF0aCxjdXJzb3IsZGVmcyxkZXNjLGVsbGlwc2UsZmlsdGVyLGZvbnQtZmFjZSxmb3JlaWduT2JqZWN0LGcsZ2x5cGgsaW1hZ2UsbGluZSxtYXJrZXIsbWFzayxtaXNzaW5nLWdseXBoLHBhdGgscGF0dGVybixwb2x5Z29uLHBvbHlsaW5lLHJlY3Qsc3dpdGNoLHN5bWJvbCx0ZXh0LHRleHRwYXRoLHRzcGFuLHVzZSx2aWV3XCIsITApLFduPWZ1bmN0aW9uKGUpe3JldHVybiBKbihlKXx8cW4oZSl9O2Z1bmN0aW9uIFpuKGUpe3JldHVybiBxbihlKT9cInN2Z1wiOlwibWF0aFwiPT09ZT9cIm1hdGhcIjp2b2lkIDB9dmFyIEduPU9iamVjdC5jcmVhdGUobnVsbCk7dmFyIFhuPXAoXCJ0ZXh0LG51bWJlcixwYXNzd29yZCxzZWFyY2gsZW1haWwsdGVsLHVybFwiKTtmdW5jdGlvbiBZbihlKXtpZihcInN0cmluZ1wiPT10eXBlb2YgZSl7dmFyIHQ9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcihlKTtyZXR1cm4gdHx8ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKX1yZXR1cm4gZX12YXIgUW49T2JqZWN0LmZyZWV6ZSh7Y3JlYXRlRWxlbWVudDpmdW5jdGlvbihlLHQpe3ZhciBuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoZSk7cmV0dXJuXCJzZWxlY3RcIiE9PWU/bjoodC5kYXRhJiZ0LmRhdGEuYXR0cnMmJnZvaWQgMCE9PXQuZGF0YS5hdHRycy5tdWx0aXBsZSYmbi5zZXRBdHRyaWJ1dGUoXCJtdWx0aXBsZVwiLFwibXVsdGlwbGVcIiksbil9LGNyZWF0ZUVsZW1lbnROUzpmdW5jdGlvbihlLHQpe3JldHVybiBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoS25bZV0sdCl9LGNyZWF0ZVRleHROb2RlOmZ1bmN0aW9uKGUpe3JldHVybiBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShlKX0sY3JlYXRlQ29tbWVudDpmdW5jdGlvbihlKXtyZXR1cm4gZG9jdW1lbnQuY3JlYXRlQ29tbWVudChlKX0saW5zZXJ0QmVmb3JlOmZ1bmN0aW9uKGUsdCxuKXtlLmluc2VydEJlZm9yZSh0LG4pfSxyZW1vdmVDaGlsZDpmdW5jdGlvbihlLHQpe2UucmVtb3ZlQ2hpbGQodCl9LGFwcGVuZENoaWxkOmZ1bmN0aW9uKGUsdCl7ZS5hcHBlbmRDaGlsZCh0KX0scGFyZW50Tm9kZTpmdW5jdGlvbihlKXtyZXR1cm4gZS5wYXJlbnROb2RlfSxuZXh0U2libGluZzpmdW5jdGlvbihlKXtyZXR1cm4gZS5uZXh0U2libGluZ30sdGFnTmFtZTpmdW5jdGlvbihlKXtyZXR1cm4gZS50YWdOYW1lfSxzZXRUZXh0Q29udGVudDpmdW5jdGlvbihlLHQpe2UudGV4dENvbnRlbnQ9dH0sc2V0U3R5bGVTY29wZTpmdW5jdGlvbihlLHQpe2Uuc2V0QXR0cmlidXRlKHQsXCJcIil9fSksZXI9e2NyZWF0ZTpmdW5jdGlvbihlLHQpe3RyKHQpfSx1cGRhdGU6ZnVuY3Rpb24oZSx0KXtlLmRhdGEucmVmIT09dC5kYXRhLnJlZiYmKHRyKGUsITApLHRyKHQpKX0sZGVzdHJveTpmdW5jdGlvbihlKXt0cihlLCEwKX19O2Z1bmN0aW9uIHRyKGUsdCl7dmFyIHI9ZS5kYXRhLnJlZjtpZihuKHIpKXt2YXIgaT1lLmNvbnRleHQsbz1lLmNvbXBvbmVudEluc3RhbmNlfHxlLmVsbSxhPWkuJHJlZnM7dD9BcnJheS5pc0FycmF5KGFbcl0pP2goYVtyXSxvKTphW3JdPT09byYmKGFbcl09dm9pZCAwKTplLmRhdGEucmVmSW5Gb3I/QXJyYXkuaXNBcnJheShhW3JdKT9hW3JdLmluZGV4T2Yobyk8MCYmYVtyXS5wdXNoKG8pOmFbcl09W29dOmFbcl09b319dmFyIG5yPW5ldyBwZShcIlwiLHt9LFtdKSxycj1bXCJjcmVhdGVcIixcImFjdGl2YXRlXCIsXCJ1cGRhdGVcIixcInJlbW92ZVwiLFwiZGVzdHJveVwiXTtmdW5jdGlvbiBpcihlLGkpe3JldHVybiBlLmtleT09PWkua2V5JiYoZS50YWc9PT1pLnRhZyYmZS5pc0NvbW1lbnQ9PT1pLmlzQ29tbWVudCYmbihlLmRhdGEpPT09bihpLmRhdGEpJiZmdW5jdGlvbihlLHQpe2lmKFwiaW5wdXRcIiE9PWUudGFnKXJldHVybiEwO3ZhciByLGk9bihyPWUuZGF0YSkmJm4ocj1yLmF0dHJzKSYmci50eXBlLG89bihyPXQuZGF0YSkmJm4ocj1yLmF0dHJzKSYmci50eXBlO3JldHVybiBpPT09b3x8WG4oaSkmJlhuKG8pfShlLGkpfHxyKGUuaXNBc3luY1BsYWNlaG9sZGVyKSYmZS5hc3luY0ZhY3Rvcnk9PT1pLmFzeW5jRmFjdG9yeSYmdChpLmFzeW5jRmFjdG9yeS5lcnJvcikpfWZ1bmN0aW9uIG9yKGUsdCxyKXt2YXIgaSxvLGE9e307Zm9yKGk9dDtpPD1yOysraSluKG89ZVtpXS5rZXkpJiYoYVtvXT1pKTtyZXR1cm4gYX12YXIgYXI9e2NyZWF0ZTpzcix1cGRhdGU6c3IsZGVzdHJveTpmdW5jdGlvbihlKXtzcihlLG5yKX19O2Z1bmN0aW9uIHNyKGUsdCl7KGUuZGF0YS5kaXJlY3RpdmVzfHx0LmRhdGEuZGlyZWN0aXZlcykmJmZ1bmN0aW9uKGUsdCl7dmFyIG4scixpLG89ZT09PW5yLGE9dD09PW5yLHM9dXIoZS5kYXRhLmRpcmVjdGl2ZXMsZS5jb250ZXh0KSxjPXVyKHQuZGF0YS5kaXJlY3RpdmVzLHQuY29udGV4dCksdT1bXSxsPVtdO2ZvcihuIGluIGMpcj1zW25dLGk9Y1tuXSxyPyhpLm9sZFZhbHVlPXIudmFsdWUsaS5vbGRBcmc9ci5hcmcsZnIoaSxcInVwZGF0ZVwiLHQsZSksaS5kZWYmJmkuZGVmLmNvbXBvbmVudFVwZGF0ZWQmJmwucHVzaChpKSk6KGZyKGksXCJiaW5kXCIsdCxlKSxpLmRlZiYmaS5kZWYuaW5zZXJ0ZWQmJnUucHVzaChpKSk7aWYodS5sZW5ndGgpe3ZhciBmPWZ1bmN0aW9uKCl7Zm9yKHZhciBuPTA7bjx1Lmxlbmd0aDtuKyspZnIodVtuXSxcImluc2VydGVkXCIsdCxlKX07bz9pdCh0LFwiaW5zZXJ0XCIsZik6ZigpfWwubGVuZ3RoJiZpdCh0LFwicG9zdHBhdGNoXCIsZnVuY3Rpb24oKXtmb3IodmFyIG49MDtuPGwubGVuZ3RoO24rKylmcihsW25dLFwiY29tcG9uZW50VXBkYXRlZFwiLHQsZSl9KTtpZighbylmb3IobiBpbiBzKWNbbl18fGZyKHNbbl0sXCJ1bmJpbmRcIixlLGUsYSl9KGUsdCl9dmFyIGNyPU9iamVjdC5jcmVhdGUobnVsbCk7ZnVuY3Rpb24gdXIoZSx0KXt2YXIgbixyLGk9T2JqZWN0LmNyZWF0ZShudWxsKTtpZighZSlyZXR1cm4gaTtmb3Iobj0wO248ZS5sZW5ndGg7bisrKShyPWVbbl0pLm1vZGlmaWVyc3x8KHIubW9kaWZpZXJzPWNyKSxpW2xyKHIpXT1yLHIuZGVmPUxlKHQuJG9wdGlvbnMsXCJkaXJlY3RpdmVzXCIsci5uYW1lKTtyZXR1cm4gaX1mdW5jdGlvbiBscihlKXtyZXR1cm4gZS5yYXdOYW1lfHxlLm5hbWUrXCIuXCIrT2JqZWN0LmtleXMoZS5tb2RpZmllcnN8fHt9KS5qb2luKFwiLlwiKX1mdW5jdGlvbiBmcihlLHQsbixyLGkpe3ZhciBvPWUuZGVmJiZlLmRlZlt0XTtpZihvKXRyeXtvKG4uZWxtLGUsbixyLGkpfWNhdGNoKHIpe1JlKHIsbi5jb250ZXh0LFwiZGlyZWN0aXZlIFwiK2UubmFtZStcIiBcIit0K1wiIGhvb2tcIil9fXZhciBwcj1bZXIsYXJdO2Z1bmN0aW9uIGRyKGUscil7dmFyIGk9ci5jb21wb25lbnRPcHRpb25zO2lmKCEobihpKSYmITE9PT1pLkN0b3Iub3B0aW9ucy5pbmhlcml0QXR0cnN8fHQoZS5kYXRhLmF0dHJzKSYmdChyLmRhdGEuYXR0cnMpKSl7dmFyIG8sYSxzPXIuZWxtLGM9ZS5kYXRhLmF0dHJzfHx7fSx1PXIuZGF0YS5hdHRyc3x8e307Zm9yKG8gaW4gbih1Ll9fb2JfXykmJih1PXIuZGF0YS5hdHRycz1BKHt9LHUpKSx1KWE9dVtvXSxjW29dIT09YSYmdnIocyxvLGEpO2ZvcihvIGluKHF8fFopJiZ1LnZhbHVlIT09Yy52YWx1ZSYmdnIocyxcInZhbHVlXCIsdS52YWx1ZSksYyl0KHVbb10pJiYoUG4obyk/cy5yZW1vdmVBdHRyaWJ1dGVOUyhGbixSbihvKSk6RG4obyl8fHMucmVtb3ZlQXR0cmlidXRlKG8pKX19ZnVuY3Rpb24gdnIoZSx0LG4pe2UudGFnTmFtZS5pbmRleE9mKFwiLVwiKT4tMT9ocihlLHQsbik6SW4odCk/SG4obik/ZS5yZW1vdmVBdHRyaWJ1dGUodCk6KG49XCJhbGxvd2Z1bGxzY3JlZW5cIj09PXQmJlwiRU1CRURcIj09PWUudGFnTmFtZT9cInRydWVcIjp0LGUuc2V0QXR0cmlidXRlKHQsbikpOkRuKHQpP2Uuc2V0QXR0cmlidXRlKHQsTW4odCxuKSk6UG4odCk/SG4obik/ZS5yZW1vdmVBdHRyaWJ1dGVOUyhGbixSbih0KSk6ZS5zZXRBdHRyaWJ1dGVOUyhGbix0LG4pOmhyKGUsdCxuKX1mdW5jdGlvbiBocihlLHQsbil7aWYoSG4obikpZS5yZW1vdmVBdHRyaWJ1dGUodCk7ZWxzZXtpZihxJiYhVyYmXCJURVhUQVJFQVwiPT09ZS50YWdOYW1lJiZcInBsYWNlaG9sZGVyXCI9PT10JiZcIlwiIT09biYmIWUuX19pZXBoKXt2YXIgcj1mdW5jdGlvbih0KXt0LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpLGUucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImlucHV0XCIscil9O2UuYWRkRXZlbnRMaXN0ZW5lcihcImlucHV0XCIsciksZS5fX2llcGg9ITB9ZS5zZXRBdHRyaWJ1dGUodCxuKX19dmFyIG1yPXtjcmVhdGU6ZHIsdXBkYXRlOmRyfTtmdW5jdGlvbiB5cihlLHIpe3ZhciBpPXIuZWxtLG89ci5kYXRhLGE9ZS5kYXRhO2lmKCEodChvLnN0YXRpY0NsYXNzKSYmdChvLmNsYXNzKSYmKHQoYSl8fHQoYS5zdGF0aWNDbGFzcykmJnQoYS5jbGFzcykpKSl7dmFyIHM9Qm4ociksYz1pLl90cmFuc2l0aW9uQ2xhc3NlcztuKGMpJiYocz16bihzLFZuKGMpKSkscyE9PWkuX3ByZXZDbGFzcyYmKGkuc2V0QXR0cmlidXRlKFwiY2xhc3NcIixzKSxpLl9wcmV2Q2xhc3M9cyl9fXZhciBncixfcixiciwkcix3cixDcix4cj17Y3JlYXRlOnlyLHVwZGF0ZTp5cn0sa3I9L1tcXHcpLitcXC1fJFxcXV0vO2Z1bmN0aW9uIEFyKGUpe3ZhciB0LG4scixpLG8sYT0hMSxzPSExLGM9ITEsdT0hMSxsPTAsZj0wLHA9MCxkPTA7Zm9yKHI9MDtyPGUubGVuZ3RoO3IrKylpZihuPXQsdD1lLmNoYXJDb2RlQXQociksYSkzOT09PXQmJjkyIT09biYmKGE9ITEpO2Vsc2UgaWYocykzND09PXQmJjkyIT09biYmKHM9ITEpO2Vsc2UgaWYoYyk5Nj09PXQmJjkyIT09biYmKGM9ITEpO2Vsc2UgaWYodSk0Nz09PXQmJjkyIT09biYmKHU9ITEpO2Vsc2UgaWYoMTI0IT09dHx8MTI0PT09ZS5jaGFyQ29kZUF0KHIrMSl8fDEyND09PWUuY2hhckNvZGVBdChyLTEpfHxsfHxmfHxwKXtzd2l0Y2godCl7Y2FzZSAzNDpzPSEwO2JyZWFrO2Nhc2UgMzk6YT0hMDticmVhaztjYXNlIDk2OmM9ITA7YnJlYWs7Y2FzZSA0MDpwKys7YnJlYWs7Y2FzZSA0MTpwLS07YnJlYWs7Y2FzZSA5MTpmKys7YnJlYWs7Y2FzZSA5MzpmLS07YnJlYWs7Y2FzZSAxMjM6bCsrO2JyZWFrO2Nhc2UgMTI1OmwtLX1pZig0Nz09PXQpe2Zvcih2YXIgdj1yLTEsaD12b2lkIDA7dj49MCYmXCIgXCI9PT0oaD1lLmNoYXJBdCh2KSk7di0tKTtoJiZrci50ZXN0KGgpfHwodT0hMCl9fWVsc2Ugdm9pZCAwPT09aT8oZD1yKzEsaT1lLnNsaWNlKDAscikudHJpbSgpKTptKCk7ZnVuY3Rpb24gbSgpeyhvfHwobz1bXSkpLnB1c2goZS5zbGljZShkLHIpLnRyaW0oKSksZD1yKzF9aWYodm9pZCAwPT09aT9pPWUuc2xpY2UoMCxyKS50cmltKCk6MCE9PWQmJm0oKSxvKWZvcihyPTA7cjxvLmxlbmd0aDtyKyspaT1PcihpLG9bcl0pO3JldHVybiBpfWZ1bmN0aW9uIE9yKGUsdCl7dmFyIG49dC5pbmRleE9mKFwiKFwiKTtpZihuPDApcmV0dXJuJ19mKFwiJyt0KydcIikoJytlK1wiKVwiO3ZhciByPXQuc2xpY2UoMCxuKSxpPXQuc2xpY2UobisxKTtyZXR1cm4nX2YoXCInK3IrJ1wiKSgnK2UrKFwiKVwiIT09aT9cIixcIitpOmkpfWZ1bmN0aW9uIFNyKGUsdCl7Y29uc29sZS5lcnJvcihcIltWdWUgY29tcGlsZXJdOiBcIitlKX1mdW5jdGlvbiBUcihlLHQpe3JldHVybiBlP2UubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlW3RdfSkuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBlfSk6W119ZnVuY3Rpb24gRXIoZSx0LG4scixpKXsoZS5wcm9wc3x8KGUucHJvcHM9W10pKS5wdXNoKFJyKHtuYW1lOnQsdmFsdWU6bixkeW5hbWljOml9LHIpKSxlLnBsYWluPSExfWZ1bmN0aW9uIE5yKGUsdCxuLHIsaSl7KGk/ZS5keW5hbWljQXR0cnN8fChlLmR5bmFtaWNBdHRycz1bXSk6ZS5hdHRyc3x8KGUuYXR0cnM9W10pKS5wdXNoKFJyKHtuYW1lOnQsdmFsdWU6bixkeW5hbWljOml9LHIpKSxlLnBsYWluPSExfWZ1bmN0aW9uIGpyKGUsdCxuLHIpe2UuYXR0cnNNYXBbdF09bixlLmF0dHJzTGlzdC5wdXNoKFJyKHtuYW1lOnQsdmFsdWU6bn0scikpfWZ1bmN0aW9uIERyKGUsdCxuLHIsaSxvLGEscyl7KGUuZGlyZWN0aXZlc3x8KGUuZGlyZWN0aXZlcz1bXSkpLnB1c2goUnIoe25hbWU6dCxyYXdOYW1lOm4sdmFsdWU6cixhcmc6aSxpc0R5bmFtaWNBcmc6byxtb2RpZmllcnM6YX0scykpLGUucGxhaW49ITF9ZnVuY3Rpb24gTHIoZSx0LG4pe3JldHVybiBuP1wiX3AoXCIrdCsnLFwiJytlKydcIiknOmUrdH1mdW5jdGlvbiBNcih0LG4scixpLG8sYSxzLGMpe3ZhciB1OyhpPWl8fGUpLnJpZ2h0P2M/bj1cIihcIituK1wiKT09PSdjbGljayc/J2NvbnRleHRtZW51JzooXCIrbitcIilcIjpcImNsaWNrXCI9PT1uJiYobj1cImNvbnRleHRtZW51XCIsZGVsZXRlIGkucmlnaHQpOmkubWlkZGxlJiYoYz9uPVwiKFwiK24rXCIpPT09J2NsaWNrJz8nbW91c2V1cCc6KFwiK24rXCIpXCI6XCJjbGlja1wiPT09biYmKG49XCJtb3VzZXVwXCIpKSxpLmNhcHR1cmUmJihkZWxldGUgaS5jYXB0dXJlLG49THIoXCIhXCIsbixjKSksaS5vbmNlJiYoZGVsZXRlIGkub25jZSxuPUxyKFwiflwiLG4sYykpLGkucGFzc2l2ZSYmKGRlbGV0ZSBpLnBhc3NpdmUsbj1McihcIiZcIixuLGMpKSxpLm5hdGl2ZT8oZGVsZXRlIGkubmF0aXZlLHU9dC5uYXRpdmVFdmVudHN8fCh0Lm5hdGl2ZUV2ZW50cz17fSkpOnU9dC5ldmVudHN8fCh0LmV2ZW50cz17fSk7dmFyIGw9UnIoe3ZhbHVlOnIudHJpbSgpLGR5bmFtaWM6Y30scyk7aSE9PWUmJihsLm1vZGlmaWVycz1pKTt2YXIgZj11W25dO0FycmF5LmlzQXJyYXkoZik/bz9mLnVuc2hpZnQobCk6Zi5wdXNoKGwpOnVbbl09Zj9vP1tsLGZdOltmLGxdOmwsdC5wbGFpbj0hMX1mdW5jdGlvbiBJcihlLHQsbil7dmFyIHI9RnIoZSxcIjpcIit0KXx8RnIoZSxcInYtYmluZDpcIit0KTtpZihudWxsIT1yKXJldHVybiBBcihyKTtpZighMSE9PW4pe3ZhciBpPUZyKGUsdCk7aWYobnVsbCE9aSlyZXR1cm4gSlNPTi5zdHJpbmdpZnkoaSl9fWZ1bmN0aW9uIEZyKGUsdCxuKXt2YXIgcjtpZihudWxsIT0ocj1lLmF0dHJzTWFwW3RdKSlmb3IodmFyIGk9ZS5hdHRyc0xpc3Qsbz0wLGE9aS5sZW5ndGg7bzxhO28rKylpZihpW29dLm5hbWU9PT10KXtpLnNwbGljZShvLDEpO2JyZWFrfXJldHVybiBuJiZkZWxldGUgZS5hdHRyc01hcFt0XSxyfWZ1bmN0aW9uIFByKGUsdCl7Zm9yKHZhciBuPWUuYXR0cnNMaXN0LHI9MCxpPW4ubGVuZ3RoO3I8aTtyKyspe3ZhciBvPW5bcl07aWYodC50ZXN0KG8ubmFtZSkpcmV0dXJuIG4uc3BsaWNlKHIsMSksb319ZnVuY3Rpb24gUnIoZSx0KXtyZXR1cm4gdCYmKG51bGwhPXQuc3RhcnQmJihlLnN0YXJ0PXQuc3RhcnQpLG51bGwhPXQuZW5kJiYoZS5lbmQ9dC5lbmQpKSxlfWZ1bmN0aW9uIEhyKGUsdCxuKXt2YXIgcj1ufHx7fSxpPXIubnVtYmVyLG89XCIkJHZcIjtyLnRyaW0mJihvPVwiKHR5cGVvZiAkJHYgPT09ICdzdHJpbmcnPyAkJHYudHJpbSgpOiAkJHYpXCIpLGkmJihvPVwiX24oXCIrbytcIilcIik7dmFyIGE9QnIodCxvKTtlLm1vZGVsPXt2YWx1ZTpcIihcIit0K1wiKVwiLGV4cHJlc3Npb246SlNPTi5zdHJpbmdpZnkodCksY2FsbGJhY2s6XCJmdW5jdGlvbiAoJCR2KSB7XCIrYStcIn1cIn19ZnVuY3Rpb24gQnIoZSx0KXt2YXIgbj1mdW5jdGlvbihlKXtpZihlPWUudHJpbSgpLGdyPWUubGVuZ3RoLGUuaW5kZXhPZihcIltcIik8MHx8ZS5sYXN0SW5kZXhPZihcIl1cIik8Z3ItMSlyZXR1cm4oJHI9ZS5sYXN0SW5kZXhPZihcIi5cIikpPi0xP3tleHA6ZS5zbGljZSgwLCRyKSxrZXk6J1wiJytlLnNsaWNlKCRyKzEpKydcIid9OntleHA6ZSxrZXk6bnVsbH07X3I9ZSwkcj13cj1Dcj0wO2Zvcig7IXpyKCk7KVZyKGJyPVVyKCkpP0pyKGJyKTo5MT09PWJyJiZLcihicik7cmV0dXJue2V4cDplLnNsaWNlKDAsd3IpLGtleTplLnNsaWNlKHdyKzEsQ3IpfX0oZSk7cmV0dXJuIG51bGw9PT1uLmtleT9lK1wiPVwiK3Q6XCIkc2V0KFwiK24uZXhwK1wiLCBcIituLmtleStcIiwgXCIrdCtcIilcIn1mdW5jdGlvbiBVcigpe3JldHVybiBfci5jaGFyQ29kZUF0KCsrJHIpfWZ1bmN0aW9uIHpyKCl7cmV0dXJuICRyPj1ncn1mdW5jdGlvbiBWcihlKXtyZXR1cm4gMzQ9PT1lfHwzOT09PWV9ZnVuY3Rpb24gS3IoZSl7dmFyIHQ9MTtmb3Iod3I9JHI7IXpyKCk7KWlmKFZyKGU9VXIoKSkpSnIoZSk7ZWxzZSBpZig5MT09PWUmJnQrKyw5Mz09PWUmJnQtLSwwPT09dCl7Q3I9JHI7YnJlYWt9fWZ1bmN0aW9uIEpyKGUpe2Zvcih2YXIgdD1lOyF6cigpJiYoZT1VcigpKSE9PXQ7KTt9dmFyIHFyLFdyPVwiX19yXCIsWnI9XCJfX2NcIjtmdW5jdGlvbiBHcihlLHQsbil7dmFyIHI9cXI7cmV0dXJuIGZ1bmN0aW9uIGkoKXtudWxsIT09dC5hcHBseShudWxsLGFyZ3VtZW50cykmJlFyKGUsaSxuLHIpfX12YXIgWHI9VmUmJiEoWCYmTnVtYmVyKFhbMV0pPD01Myk7ZnVuY3Rpb24gWXIoZSx0LG4scil7aWYoWHIpe3ZhciBpPWFuLG89dDt0PW8uX3dyYXBwZXI9ZnVuY3Rpb24oZSl7aWYoZS50YXJnZXQ9PT1lLmN1cnJlbnRUYXJnZXR8fGUudGltZVN0YW1wPj1pfHxlLnRpbWVTdGFtcDw9MHx8ZS50YXJnZXQub3duZXJEb2N1bWVudCE9PWRvY3VtZW50KXJldHVybiBvLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19cXIuYWRkRXZlbnRMaXN0ZW5lcihlLHQsUT97Y2FwdHVyZTpuLHBhc3NpdmU6cn06bil9ZnVuY3Rpb24gUXIoZSx0LG4scil7KHJ8fHFyKS5yZW1vdmVFdmVudExpc3RlbmVyKGUsdC5fd3JhcHBlcnx8dCxuKX1mdW5jdGlvbiBlaShlLHIpe2lmKCF0KGUuZGF0YS5vbil8fCF0KHIuZGF0YS5vbikpe3ZhciBpPXIuZGF0YS5vbnx8e30sbz1lLmRhdGEub258fHt9O3FyPXIuZWxtLGZ1bmN0aW9uKGUpe2lmKG4oZVtXcl0pKXt2YXIgdD1xP1wiY2hhbmdlXCI6XCJpbnB1dFwiO2VbdF09W10uY29uY2F0KGVbV3JdLGVbdF18fFtdKSxkZWxldGUgZVtXcl19bihlW1pyXSkmJihlLmNoYW5nZT1bXS5jb25jYXQoZVtacl0sZS5jaGFuZ2V8fFtdKSxkZWxldGUgZVtacl0pfShpKSxydChpLG8sWXIsUXIsR3Isci5jb250ZXh0KSxxcj12b2lkIDB9fXZhciB0aSxuaT17Y3JlYXRlOmVpLHVwZGF0ZTplaX07ZnVuY3Rpb24gcmkoZSxyKXtpZighdChlLmRhdGEuZG9tUHJvcHMpfHwhdChyLmRhdGEuZG9tUHJvcHMpKXt2YXIgaSxvLGE9ci5lbG0scz1lLmRhdGEuZG9tUHJvcHN8fHt9LGM9ci5kYXRhLmRvbVByb3BzfHx7fTtmb3IoaSBpbiBuKGMuX19vYl9fKSYmKGM9ci5kYXRhLmRvbVByb3BzPUEoe30sYykpLHMpaSBpbiBjfHwoYVtpXT1cIlwiKTtmb3IoaSBpbiBjKXtpZihvPWNbaV0sXCJ0ZXh0Q29udGVudFwiPT09aXx8XCJpbm5lckhUTUxcIj09PWkpe2lmKHIuY2hpbGRyZW4mJihyLmNoaWxkcmVuLmxlbmd0aD0wKSxvPT09c1tpXSljb250aW51ZTsxPT09YS5jaGlsZE5vZGVzLmxlbmd0aCYmYS5yZW1vdmVDaGlsZChhLmNoaWxkTm9kZXNbMF0pfWlmKFwidmFsdWVcIj09PWkmJlwiUFJPR1JFU1NcIiE9PWEudGFnTmFtZSl7YS5fdmFsdWU9bzt2YXIgdT10KG8pP1wiXCI6U3RyaW5nKG8pO2lpKGEsdSkmJihhLnZhbHVlPXUpfWVsc2UgaWYoXCJpbm5lckhUTUxcIj09PWkmJnFuKGEudGFnTmFtZSkmJnQoYS5pbm5lckhUTUwpKXsodGk9dGl8fGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIikpLmlubmVySFRNTD1cIjxzdmc+XCIrbytcIjwvc3ZnPlwiO2Zvcih2YXIgbD10aS5maXJzdENoaWxkO2EuZmlyc3RDaGlsZDspYS5yZW1vdmVDaGlsZChhLmZpcnN0Q2hpbGQpO2Zvcig7bC5maXJzdENoaWxkOylhLmFwcGVuZENoaWxkKGwuZmlyc3RDaGlsZCl9ZWxzZSBpZihvIT09c1tpXSl0cnl7YVtpXT1vfWNhdGNoKGUpe319fX1mdW5jdGlvbiBpaShlLHQpe3JldHVybiFlLmNvbXBvc2luZyYmKFwiT1BUSU9OXCI9PT1lLnRhZ05hbWV8fGZ1bmN0aW9uKGUsdCl7dmFyIG49ITA7dHJ5e249ZG9jdW1lbnQuYWN0aXZlRWxlbWVudCE9PWV9Y2F0Y2goZSl7fXJldHVybiBuJiZlLnZhbHVlIT09dH0oZSx0KXx8ZnVuY3Rpb24oZSx0KXt2YXIgcj1lLnZhbHVlLGk9ZS5fdk1vZGlmaWVycztpZihuKGkpKXtpZihpLm51bWJlcilyZXR1cm4gZihyKSE9PWYodCk7aWYoaS50cmltKXJldHVybiByLnRyaW0oKSE9PXQudHJpbSgpfXJldHVybiByIT09dH0oZSx0KSl9dmFyIG9pPXtjcmVhdGU6cmksdXBkYXRlOnJpfSxhaT1nKGZ1bmN0aW9uKGUpe3ZhciB0PXt9LG49LzooLispLztyZXR1cm4gZS5zcGxpdCgvOyg/IVteKF0qXFwpKS9nKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2lmKGUpe3ZhciByPWUuc3BsaXQobik7ci5sZW5ndGg+MSYmKHRbclswXS50cmltKCldPXJbMV0udHJpbSgpKX19KSx0fSk7ZnVuY3Rpb24gc2koZSl7dmFyIHQ9Y2koZS5zdHlsZSk7cmV0dXJuIGUuc3RhdGljU3R5bGU/QShlLnN0YXRpY1N0eWxlLHQpOnR9ZnVuY3Rpb24gY2koZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSk/TyhlKTpcInN0cmluZ1wiPT10eXBlb2YgZT9haShlKTplfXZhciB1aSxsaT0vXi0tLyxmaT0vXFxzKiFpbXBvcnRhbnQkLyxwaT1mdW5jdGlvbihlLHQsbil7aWYobGkudGVzdCh0KSllLnN0eWxlLnNldFByb3BlcnR5KHQsbik7ZWxzZSBpZihmaS50ZXN0KG4pKWUuc3R5bGUuc2V0UHJvcGVydHkoQyh0KSxuLnJlcGxhY2UoZmksXCJcIiksXCJpbXBvcnRhbnRcIik7ZWxzZXt2YXIgcj12aSh0KTtpZihBcnJheS5pc0FycmF5KG4pKWZvcih2YXIgaT0wLG89bi5sZW5ndGg7aTxvO2krKyllLnN0eWxlW3JdPW5baV07ZWxzZSBlLnN0eWxlW3JdPW59fSxkaT1bXCJXZWJraXRcIixcIk1velwiLFwibXNcIl0sdmk9ZyhmdW5jdGlvbihlKXtpZih1aT11aXx8ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKS5zdHlsZSxcImZpbHRlclwiIT09KGU9YihlKSkmJmUgaW4gdWkpcmV0dXJuIGU7Zm9yKHZhciB0PWUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrZS5zbGljZSgxKSxuPTA7bjxkaS5sZW5ndGg7bisrKXt2YXIgcj1kaVtuXSt0O2lmKHIgaW4gdWkpcmV0dXJuIHJ9fSk7ZnVuY3Rpb24gaGkoZSxyKXt2YXIgaT1yLmRhdGEsbz1lLmRhdGE7aWYoISh0KGkuc3RhdGljU3R5bGUpJiZ0KGkuc3R5bGUpJiZ0KG8uc3RhdGljU3R5bGUpJiZ0KG8uc3R5bGUpKSl7dmFyIGEscyxjPXIuZWxtLHU9by5zdGF0aWNTdHlsZSxsPW8ubm9ybWFsaXplZFN0eWxlfHxvLnN0eWxlfHx7fSxmPXV8fGwscD1jaShyLmRhdGEuc3R5bGUpfHx7fTtyLmRhdGEubm9ybWFsaXplZFN0eWxlPW4ocC5fX29iX18pP0Eoe30scCk6cDt2YXIgZD1mdW5jdGlvbihlLHQpe3ZhciBuLHI9e307aWYodClmb3IodmFyIGk9ZTtpLmNvbXBvbmVudEluc3RhbmNlOykoaT1pLmNvbXBvbmVudEluc3RhbmNlLl92bm9kZSkmJmkuZGF0YSYmKG49c2koaS5kYXRhKSkmJkEocixuKTsobj1zaShlLmRhdGEpKSYmQShyLG4pO2Zvcih2YXIgbz1lO289by5wYXJlbnQ7KW8uZGF0YSYmKG49c2koby5kYXRhKSkmJkEocixuKTtyZXR1cm4gcn0ociwhMCk7Zm9yKHMgaW4gZil0KGRbc10pJiZwaShjLHMsXCJcIik7Zm9yKHMgaW4gZCkoYT1kW3NdKSE9PWZbc10mJnBpKGMscyxudWxsPT1hP1wiXCI6YSl9fXZhciBtaT17Y3JlYXRlOmhpLHVwZGF0ZTpoaX0seWk9L1xccysvO2Z1bmN0aW9uIGdpKGUsdCl7aWYodCYmKHQ9dC50cmltKCkpKWlmKGUuY2xhc3NMaXN0KXQuaW5kZXhPZihcIiBcIik+LTE/dC5zcGxpdCh5aSkuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gZS5jbGFzc0xpc3QuYWRkKHQpfSk6ZS5jbGFzc0xpc3QuYWRkKHQpO2Vsc2V7dmFyIG49XCIgXCIrKGUuZ2V0QXR0cmlidXRlKFwiY2xhc3NcIil8fFwiXCIpK1wiIFwiO24uaW5kZXhPZihcIiBcIit0K1wiIFwiKTwwJiZlLnNldEF0dHJpYnV0ZShcImNsYXNzXCIsKG4rdCkudHJpbSgpKX19ZnVuY3Rpb24gX2koZSx0KXtpZih0JiYodD10LnRyaW0oKSkpaWYoZS5jbGFzc0xpc3QpdC5pbmRleE9mKFwiIFwiKT4tMT90LnNwbGl0KHlpKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiBlLmNsYXNzTGlzdC5yZW1vdmUodCl9KTplLmNsYXNzTGlzdC5yZW1vdmUodCksZS5jbGFzc0xpc3QubGVuZ3RofHxlLnJlbW92ZUF0dHJpYnV0ZShcImNsYXNzXCIpO2Vsc2V7Zm9yKHZhciBuPVwiIFwiKyhlLmdldEF0dHJpYnV0ZShcImNsYXNzXCIpfHxcIlwiKStcIiBcIixyPVwiIFwiK3QrXCIgXCI7bi5pbmRleE9mKHIpPj0wOyluPW4ucmVwbGFjZShyLFwiIFwiKTsobj1uLnRyaW0oKSk/ZS5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLG4pOmUucmVtb3ZlQXR0cmlidXRlKFwiY2xhc3NcIil9fWZ1bmN0aW9uIGJpKGUpe2lmKGUpe2lmKFwib2JqZWN0XCI9PXR5cGVvZiBlKXt2YXIgdD17fTtyZXR1cm4hMSE9PWUuY3NzJiZBKHQsJGkoZS5uYW1lfHxcInZcIikpLEEodCxlKSx0fXJldHVyblwic3RyaW5nXCI9PXR5cGVvZiBlPyRpKGUpOnZvaWQgMH19dmFyICRpPWcoZnVuY3Rpb24oZSl7cmV0dXJue2VudGVyQ2xhc3M6ZStcIi1lbnRlclwiLGVudGVyVG9DbGFzczplK1wiLWVudGVyLXRvXCIsZW50ZXJBY3RpdmVDbGFzczplK1wiLWVudGVyLWFjdGl2ZVwiLGxlYXZlQ2xhc3M6ZStcIi1sZWF2ZVwiLGxlYXZlVG9DbGFzczplK1wiLWxlYXZlLXRvXCIsbGVhdmVBY3RpdmVDbGFzczplK1wiLWxlYXZlLWFjdGl2ZVwifX0pLHdpPXomJiFXLENpPVwidHJhbnNpdGlvblwiLHhpPVwiYW5pbWF0aW9uXCIsa2k9XCJ0cmFuc2l0aW9uXCIsQWk9XCJ0cmFuc2l0aW9uZW5kXCIsT2k9XCJhbmltYXRpb25cIixTaT1cImFuaW1hdGlvbmVuZFwiO3dpJiYodm9pZCAwPT09d2luZG93Lm9udHJhbnNpdGlvbmVuZCYmdm9pZCAwIT09d2luZG93Lm9ud2Via2l0dHJhbnNpdGlvbmVuZCYmKGtpPVwiV2Via2l0VHJhbnNpdGlvblwiLEFpPVwid2Via2l0VHJhbnNpdGlvbkVuZFwiKSx2b2lkIDA9PT13aW5kb3cub25hbmltYXRpb25lbmQmJnZvaWQgMCE9PXdpbmRvdy5vbndlYmtpdGFuaW1hdGlvbmVuZCYmKE9pPVwiV2Via2l0QW5pbWF0aW9uXCIsU2k9XCJ3ZWJraXRBbmltYXRpb25FbmRcIikpO3ZhciBUaT16P3dpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU/d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZS5iaW5kKHdpbmRvdyk6c2V0VGltZW91dDpmdW5jdGlvbihlKXtyZXR1cm4gZSgpfTtmdW5jdGlvbiBFaShlKXtUaShmdW5jdGlvbigpe1RpKGUpfSl9ZnVuY3Rpb24gTmkoZSx0KXt2YXIgbj1lLl90cmFuc2l0aW9uQ2xhc3Nlc3x8KGUuX3RyYW5zaXRpb25DbGFzc2VzPVtdKTtuLmluZGV4T2YodCk8MCYmKG4ucHVzaCh0KSxnaShlLHQpKX1mdW5jdGlvbiBqaShlLHQpe2UuX3RyYW5zaXRpb25DbGFzc2VzJiZoKGUuX3RyYW5zaXRpb25DbGFzc2VzLHQpLF9pKGUsdCl9ZnVuY3Rpb24gRGkoZSx0LG4pe3ZhciByPU1pKGUsdCksaT1yLnR5cGUsbz1yLnRpbWVvdXQsYT1yLnByb3BDb3VudDtpZighaSlyZXR1cm4gbigpO3ZhciBzPWk9PT1DaT9BaTpTaSxjPTAsdT1mdW5jdGlvbigpe2UucmVtb3ZlRXZlbnRMaXN0ZW5lcihzLGwpLG4oKX0sbD1mdW5jdGlvbih0KXt0LnRhcmdldD09PWUmJisrYz49YSYmdSgpfTtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7YzxhJiZ1KCl9LG8rMSksZS5hZGRFdmVudExpc3RlbmVyKHMsbCl9dmFyIExpPS9cXGIodHJhbnNmb3JtfGFsbCkoLHwkKS87ZnVuY3Rpb24gTWkoZSx0KXt2YXIgbixyPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGUpLGk9KHJba2krXCJEZWxheVwiXXx8XCJcIikuc3BsaXQoXCIsIFwiKSxvPShyW2tpK1wiRHVyYXRpb25cIl18fFwiXCIpLnNwbGl0KFwiLCBcIiksYT1JaShpLG8pLHM9KHJbT2krXCJEZWxheVwiXXx8XCJcIikuc3BsaXQoXCIsIFwiKSxjPShyW09pK1wiRHVyYXRpb25cIl18fFwiXCIpLnNwbGl0KFwiLCBcIiksdT1JaShzLGMpLGw9MCxmPTA7cmV0dXJuIHQ9PT1DaT9hPjAmJihuPUNpLGw9YSxmPW8ubGVuZ3RoKTp0PT09eGk/dT4wJiYobj14aSxsPXUsZj1jLmxlbmd0aCk6Zj0obj0obD1NYXRoLm1heChhLHUpKT4wP2E+dT9DaTp4aTpudWxsKT9uPT09Q2k/by5sZW5ndGg6Yy5sZW5ndGg6MCx7dHlwZTpuLHRpbWVvdXQ6bCxwcm9wQ291bnQ6ZixoYXNUcmFuc2Zvcm06bj09PUNpJiZMaS50ZXN0KHJba2krXCJQcm9wZXJ0eVwiXSl9fWZ1bmN0aW9uIElpKGUsdCl7Zm9yKDtlLmxlbmd0aDx0Lmxlbmd0aDspZT1lLmNvbmNhdChlKTtyZXR1cm4gTWF0aC5tYXguYXBwbHkobnVsbCx0Lm1hcChmdW5jdGlvbih0LG4pe3JldHVybiBGaSh0KStGaShlW25dKX0pKX1mdW5jdGlvbiBGaShlKXtyZXR1cm4gMWUzKk51bWJlcihlLnNsaWNlKDAsLTEpLnJlcGxhY2UoXCIsXCIsXCIuXCIpKX1mdW5jdGlvbiBQaShlLHIpe3ZhciBpPWUuZWxtO24oaS5fbGVhdmVDYikmJihpLl9sZWF2ZUNiLmNhbmNlbGxlZD0hMCxpLl9sZWF2ZUNiKCkpO3ZhciBhPWJpKGUuZGF0YS50cmFuc2l0aW9uKTtpZighdChhKSYmIW4oaS5fZW50ZXJDYikmJjE9PT1pLm5vZGVUeXBlKXtmb3IodmFyIHM9YS5jc3MsYz1hLnR5cGUsdT1hLmVudGVyQ2xhc3MsbD1hLmVudGVyVG9DbGFzcyxwPWEuZW50ZXJBY3RpdmVDbGFzcyxkPWEuYXBwZWFyQ2xhc3Msdj1hLmFwcGVhclRvQ2xhc3MsaD1hLmFwcGVhckFjdGl2ZUNsYXNzLG09YS5iZWZvcmVFbnRlcix5PWEuZW50ZXIsZz1hLmFmdGVyRW50ZXIsXz1hLmVudGVyQ2FuY2VsbGVkLGI9YS5iZWZvcmVBcHBlYXIsJD1hLmFwcGVhcix3PWEuYWZ0ZXJBcHBlYXIsQz1hLmFwcGVhckNhbmNlbGxlZCx4PWEuZHVyYXRpb24saz1XdCxBPVd0LiR2bm9kZTtBJiZBLnBhcmVudDspaz1BLmNvbnRleHQsQT1BLnBhcmVudDt2YXIgTz0hay5faXNNb3VudGVkfHwhZS5pc1Jvb3RJbnNlcnQ7aWYoIU98fCR8fFwiXCI9PT0kKXt2YXIgUz1PJiZkP2Q6dSxUPU8mJmg/aDpwLEU9TyYmdj92OmwsTj1PJiZifHxtLGo9TyYmXCJmdW5jdGlvblwiPT10eXBlb2YgJD8kOnksTD1PJiZ3fHxnLE09TyYmQ3x8XyxJPWYobyh4KT94LmVudGVyOngpLEY9ITEhPT1zJiYhVyxQPUJpKGopLFI9aS5fZW50ZXJDYj1EKGZ1bmN0aW9uKCl7RiYmKGppKGksRSksamkoaSxUKSksUi5jYW5jZWxsZWQ/KEYmJmppKGksUyksTSYmTShpKSk6TCYmTChpKSxpLl9lbnRlckNiPW51bGx9KTtlLmRhdGEuc2hvd3x8aXQoZSxcImluc2VydFwiLGZ1bmN0aW9uKCl7dmFyIHQ9aS5wYXJlbnROb2RlLG49dCYmdC5fcGVuZGluZyYmdC5fcGVuZGluZ1tlLmtleV07biYmbi50YWc9PT1lLnRhZyYmbi5lbG0uX2xlYXZlQ2ImJm4uZWxtLl9sZWF2ZUNiKCksaiYmaihpLFIpfSksTiYmTihpKSxGJiYoTmkoaSxTKSxOaShpLFQpLEVpKGZ1bmN0aW9uKCl7amkoaSxTKSxSLmNhbmNlbGxlZHx8KE5pKGksRSksUHx8KEhpKEkpP3NldFRpbWVvdXQoUixJKTpEaShpLGMsUikpKX0pKSxlLmRhdGEuc2hvdyYmKHImJnIoKSxqJiZqKGksUikpLEZ8fFB8fFIoKX19fWZ1bmN0aW9uIFJpKGUscil7dmFyIGk9ZS5lbG07bihpLl9lbnRlckNiKSYmKGkuX2VudGVyQ2IuY2FuY2VsbGVkPSEwLGkuX2VudGVyQ2IoKSk7dmFyIGE9YmkoZS5kYXRhLnRyYW5zaXRpb24pO2lmKHQoYSl8fDEhPT1pLm5vZGVUeXBlKXJldHVybiByKCk7aWYoIW4oaS5fbGVhdmVDYikpe3ZhciBzPWEuY3NzLGM9YS50eXBlLHU9YS5sZWF2ZUNsYXNzLGw9YS5sZWF2ZVRvQ2xhc3MscD1hLmxlYXZlQWN0aXZlQ2xhc3MsZD1hLmJlZm9yZUxlYXZlLHY9YS5sZWF2ZSxoPWEuYWZ0ZXJMZWF2ZSxtPWEubGVhdmVDYW5jZWxsZWQseT1hLmRlbGF5TGVhdmUsZz1hLmR1cmF0aW9uLF89ITEhPT1zJiYhVyxiPUJpKHYpLCQ9ZihvKGcpP2cubGVhdmU6Zyksdz1pLl9sZWF2ZUNiPUQoZnVuY3Rpb24oKXtpLnBhcmVudE5vZGUmJmkucGFyZW50Tm9kZS5fcGVuZGluZyYmKGkucGFyZW50Tm9kZS5fcGVuZGluZ1tlLmtleV09bnVsbCksXyYmKGppKGksbCksamkoaSxwKSksdy5jYW5jZWxsZWQ/KF8mJmppKGksdSksbSYmbShpKSk6KHIoKSxoJiZoKGkpKSxpLl9sZWF2ZUNiPW51bGx9KTt5P3koQyk6QygpfWZ1bmN0aW9uIEMoKXt3LmNhbmNlbGxlZHx8KCFlLmRhdGEuc2hvdyYmaS5wYXJlbnROb2RlJiYoKGkucGFyZW50Tm9kZS5fcGVuZGluZ3x8KGkucGFyZW50Tm9kZS5fcGVuZGluZz17fSkpW2Uua2V5XT1lKSxkJiZkKGkpLF8mJihOaShpLHUpLE5pKGkscCksRWkoZnVuY3Rpb24oKXtqaShpLHUpLHcuY2FuY2VsbGVkfHwoTmkoaSxsKSxifHwoSGkoJCk/c2V0VGltZW91dCh3LCQpOkRpKGksYyx3KSkpfSkpLHYmJnYoaSx3KSxffHxifHx3KCkpfX1mdW5jdGlvbiBIaShlKXtyZXR1cm5cIm51bWJlclwiPT10eXBlb2YgZSYmIWlzTmFOKGUpfWZ1bmN0aW9uIEJpKGUpe2lmKHQoZSkpcmV0dXJuITE7dmFyIHI9ZS5mbnM7cmV0dXJuIG4ocik/QmkoQXJyYXkuaXNBcnJheShyKT9yWzBdOnIpOihlLl9sZW5ndGh8fGUubGVuZ3RoKT4xfWZ1bmN0aW9uIFVpKGUsdCl7ITAhPT10LmRhdGEuc2hvdyYmUGkodCl9dmFyIHppPWZ1bmN0aW9uKGUpe3ZhciBvLGEscz17fSxjPWUubW9kdWxlcyx1PWUubm9kZU9wcztmb3Iobz0wO288cnIubGVuZ3RoOysrbylmb3Ioc1tycltvXV09W10sYT0wO2E8Yy5sZW5ndGg7KythKW4oY1thXVtycltvXV0pJiZzW3JyW29dXS5wdXNoKGNbYV1bcnJbb11dKTtmdW5jdGlvbiBsKGUpe3ZhciB0PXUucGFyZW50Tm9kZShlKTtuKHQpJiZ1LnJlbW92ZUNoaWxkKHQsZSl9ZnVuY3Rpb24gZihlLHQsaSxvLGEsYyxsKXtpZihuKGUuZWxtKSYmbihjKSYmKGU9Y1tsXT1tZShlKSksZS5pc1Jvb3RJbnNlcnQ9IWEsIWZ1bmN0aW9uKGUsdCxpLG8pe3ZhciBhPWUuZGF0YTtpZihuKGEpKXt2YXIgYz1uKGUuY29tcG9uZW50SW5zdGFuY2UpJiZhLmtlZXBBbGl2ZTtpZihuKGE9YS5ob29rKSYmbihhPWEuaW5pdCkmJmEoZSwhMSksbihlLmNvbXBvbmVudEluc3RhbmNlKSlyZXR1cm4gZChlLHQpLHYoaSxlLmVsbSxvKSxyKGMpJiZmdW5jdGlvbihlLHQscixpKXtmb3IodmFyIG8sYT1lO2EuY29tcG9uZW50SW5zdGFuY2U7KWlmKGE9YS5jb21wb25lbnRJbnN0YW5jZS5fdm5vZGUsbihvPWEuZGF0YSkmJm4obz1vLnRyYW5zaXRpb24pKXtmb3Iobz0wO288cy5hY3RpdmF0ZS5sZW5ndGg7KytvKXMuYWN0aXZhdGVbb10obnIsYSk7dC5wdXNoKGEpO2JyZWFrfXYocixlLmVsbSxpKX0oZSx0LGksbyksITB9fShlLHQsaSxvKSl7dmFyIGY9ZS5kYXRhLHA9ZS5jaGlsZHJlbixtPWUudGFnO24obSk/KGUuZWxtPWUubnM/dS5jcmVhdGVFbGVtZW50TlMoZS5ucyxtKTp1LmNyZWF0ZUVsZW1lbnQobSxlKSxnKGUpLGgoZSxwLHQpLG4oZikmJnkoZSx0KSx2KGksZS5lbG0sbykpOnIoZS5pc0NvbW1lbnQpPyhlLmVsbT11LmNyZWF0ZUNvbW1lbnQoZS50ZXh0KSx2KGksZS5lbG0sbykpOihlLmVsbT11LmNyZWF0ZVRleHROb2RlKGUudGV4dCksdihpLGUuZWxtLG8pKX19ZnVuY3Rpb24gZChlLHQpe24oZS5kYXRhLnBlbmRpbmdJbnNlcnQpJiYodC5wdXNoLmFwcGx5KHQsZS5kYXRhLnBlbmRpbmdJbnNlcnQpLGUuZGF0YS5wZW5kaW5nSW5zZXJ0PW51bGwpLGUuZWxtPWUuY29tcG9uZW50SW5zdGFuY2UuJGVsLG0oZSk/KHkoZSx0KSxnKGUpKToodHIoZSksdC5wdXNoKGUpKX1mdW5jdGlvbiB2KGUsdCxyKXtuKGUpJiYobihyKT91LnBhcmVudE5vZGUocik9PT1lJiZ1Lmluc2VydEJlZm9yZShlLHQscik6dS5hcHBlbmRDaGlsZChlLHQpKX1mdW5jdGlvbiBoKGUsdCxuKXtpZihBcnJheS5pc0FycmF5KHQpKWZvcih2YXIgcj0wO3I8dC5sZW5ndGg7KytyKWYodFtyXSxuLGUuZWxtLG51bGwsITAsdCxyKTtlbHNlIGkoZS50ZXh0KSYmdS5hcHBlbmRDaGlsZChlLmVsbSx1LmNyZWF0ZVRleHROb2RlKFN0cmluZyhlLnRleHQpKSl9ZnVuY3Rpb24gbShlKXtmb3IoO2UuY29tcG9uZW50SW5zdGFuY2U7KWU9ZS5jb21wb25lbnRJbnN0YW5jZS5fdm5vZGU7cmV0dXJuIG4oZS50YWcpfWZ1bmN0aW9uIHkoZSx0KXtmb3IodmFyIHI9MDtyPHMuY3JlYXRlLmxlbmd0aDsrK3Ipcy5jcmVhdGVbcl0obnIsZSk7bihvPWUuZGF0YS5ob29rKSYmKG4oby5jcmVhdGUpJiZvLmNyZWF0ZShucixlKSxuKG8uaW5zZXJ0KSYmdC5wdXNoKGUpKX1mdW5jdGlvbiBnKGUpe3ZhciB0O2lmKG4odD1lLmZuU2NvcGVJZCkpdS5zZXRTdHlsZVNjb3BlKGUuZWxtLHQpO2Vsc2UgZm9yKHZhciByPWU7cjspbih0PXIuY29udGV4dCkmJm4odD10LiRvcHRpb25zLl9zY29wZUlkKSYmdS5zZXRTdHlsZVNjb3BlKGUuZWxtLHQpLHI9ci5wYXJlbnQ7bih0PVd0KSYmdCE9PWUuY29udGV4dCYmdCE9PWUuZm5Db250ZXh0JiZuKHQ9dC4kb3B0aW9ucy5fc2NvcGVJZCkmJnUuc2V0U3R5bGVTY29wZShlLmVsbSx0KX1mdW5jdGlvbiBfKGUsdCxuLHIsaSxvKXtmb3IoO3I8PWk7KytyKWYobltyXSxvLGUsdCwhMSxuLHIpfWZ1bmN0aW9uIGIoZSl7dmFyIHQscixpPWUuZGF0YTtpZihuKGkpKWZvcihuKHQ9aS5ob29rKSYmbih0PXQuZGVzdHJveSkmJnQoZSksdD0wO3Q8cy5kZXN0cm95Lmxlbmd0aDsrK3Qpcy5kZXN0cm95W3RdKGUpO2lmKG4odD1lLmNoaWxkcmVuKSlmb3Iocj0wO3I8ZS5jaGlsZHJlbi5sZW5ndGg7KytyKWIoZS5jaGlsZHJlbltyXSl9ZnVuY3Rpb24gJChlLHQscixpKXtmb3IoO3I8PWk7KytyKXt2YXIgbz10W3JdO24obykmJihuKG8udGFnKT8odyhvKSxiKG8pKTpsKG8uZWxtKSl9fWZ1bmN0aW9uIHcoZSx0KXtpZihuKHQpfHxuKGUuZGF0YSkpe3ZhciByLGk9cy5yZW1vdmUubGVuZ3RoKzE7Zm9yKG4odCk/dC5saXN0ZW5lcnMrPWk6dD1mdW5jdGlvbihlLHQpe2Z1bmN0aW9uIG4oKXswPT0tLW4ubGlzdGVuZXJzJiZsKGUpfXJldHVybiBuLmxpc3RlbmVycz10LG59KGUuZWxtLGkpLG4ocj1lLmNvbXBvbmVudEluc3RhbmNlKSYmbihyPXIuX3Zub2RlKSYmbihyLmRhdGEpJiZ3KHIsdCkscj0wO3I8cy5yZW1vdmUubGVuZ3RoOysrcilzLnJlbW92ZVtyXShlLHQpO24ocj1lLmRhdGEuaG9vaykmJm4ocj1yLnJlbW92ZSk/cihlLHQpOnQoKX1lbHNlIGwoZS5lbG0pfWZ1bmN0aW9uIEMoZSx0LHIsaSl7Zm9yKHZhciBvPXI7bzxpO28rKyl7dmFyIGE9dFtvXTtpZihuKGEpJiZpcihlLGEpKXJldHVybiBvfX1mdW5jdGlvbiB4KGUsaSxvLGEsYyxsKXtpZihlIT09aSl7bihpLmVsbSkmJm4oYSkmJihpPWFbY109bWUoaSkpO3ZhciBwPWkuZWxtPWUuZWxtO2lmKHIoZS5pc0FzeW5jUGxhY2Vob2xkZXIpKW4oaS5hc3luY0ZhY3RvcnkucmVzb2x2ZWQpP08oZS5lbG0saSxvKTppLmlzQXN5bmNQbGFjZWhvbGRlcj0hMDtlbHNlIGlmKHIoaS5pc1N0YXRpYykmJnIoZS5pc1N0YXRpYykmJmkua2V5PT09ZS5rZXkmJihyKGkuaXNDbG9uZWQpfHxyKGkuaXNPbmNlKSkpaS5jb21wb25lbnRJbnN0YW5jZT1lLmNvbXBvbmVudEluc3RhbmNlO2Vsc2V7dmFyIGQsdj1pLmRhdGE7bih2KSYmbihkPXYuaG9vaykmJm4oZD1kLnByZXBhdGNoKSYmZChlLGkpO3ZhciBoPWUuY2hpbGRyZW4seT1pLmNoaWxkcmVuO2lmKG4odikmJm0oaSkpe2ZvcihkPTA7ZDxzLnVwZGF0ZS5sZW5ndGg7KytkKXMudXBkYXRlW2RdKGUsaSk7bihkPXYuaG9vaykmJm4oZD1kLnVwZGF0ZSkmJmQoZSxpKX10KGkudGV4dCk/bihoKSYmbih5KT9oIT09eSYmZnVuY3Rpb24oZSxyLGksbyxhKXtmb3IodmFyIHMsYyxsLHA9MCxkPTAsdj1yLmxlbmd0aC0xLGg9clswXSxtPXJbdl0seT1pLmxlbmd0aC0xLGc9aVswXSxiPWlbeV0sdz0hYTtwPD12JiZkPD15Oyl0KGgpP2g9clsrK3BdOnQobSk/bT1yWy0tdl06aXIoaCxnKT8oeChoLGcsbyxpLGQpLGg9clsrK3BdLGc9aVsrK2RdKTppcihtLGIpPyh4KG0sYixvLGkseSksbT1yWy0tdl0sYj1pWy0teV0pOmlyKGgsYik/KHgoaCxiLG8saSx5KSx3JiZ1Lmluc2VydEJlZm9yZShlLGguZWxtLHUubmV4dFNpYmxpbmcobS5lbG0pKSxoPXJbKytwXSxiPWlbLS15XSk6aXIobSxnKT8oeChtLGcsbyxpLGQpLHcmJnUuaW5zZXJ0QmVmb3JlKGUsbS5lbG0saC5lbG0pLG09clstLXZdLGc9aVsrK2RdKToodChzKSYmKHM9b3IocixwLHYpKSx0KGM9bihnLmtleSk/c1tnLmtleV06QyhnLHIscCx2KSk/ZihnLG8sZSxoLmVsbSwhMSxpLGQpOmlyKGw9cltjXSxnKT8oeChsLGcsbyxpLGQpLHJbY109dm9pZCAwLHcmJnUuaW5zZXJ0QmVmb3JlKGUsbC5lbG0saC5lbG0pKTpmKGcsbyxlLGguZWxtLCExLGksZCksZz1pWysrZF0pO3A+dj9fKGUsdChpW3krMV0pP251bGw6aVt5KzFdLmVsbSxpLGQseSxvKTpkPnkmJiQoMCxyLHAsdil9KHAsaCx5LG8sbCk6bih5KT8obihlLnRleHQpJiZ1LnNldFRleHRDb250ZW50KHAsXCJcIiksXyhwLG51bGwseSwwLHkubGVuZ3RoLTEsbykpOm4oaCk/JCgwLGgsMCxoLmxlbmd0aC0xKTpuKGUudGV4dCkmJnUuc2V0VGV4dENvbnRlbnQocCxcIlwiKTplLnRleHQhPT1pLnRleHQmJnUuc2V0VGV4dENvbnRlbnQocCxpLnRleHQpLG4odikmJm4oZD12Lmhvb2spJiZuKGQ9ZC5wb3N0cGF0Y2gpJiZkKGUsaSl9fX1mdW5jdGlvbiBrKGUsdCxpKXtpZihyKGkpJiZuKGUucGFyZW50KSllLnBhcmVudC5kYXRhLnBlbmRpbmdJbnNlcnQ9dDtlbHNlIGZvcih2YXIgbz0wO288dC5sZW5ndGg7KytvKXRbb10uZGF0YS5ob29rLmluc2VydCh0W29dKX12YXIgQT1wKFwiYXR0cnMsY2xhc3Msc3RhdGljQ2xhc3Msc3RhdGljU3R5bGUsa2V5XCIpO2Z1bmN0aW9uIE8oZSx0LGksbyl7dmFyIGEscz10LnRhZyxjPXQuZGF0YSx1PXQuY2hpbGRyZW47aWYobz1vfHxjJiZjLnByZSx0LmVsbT1lLHIodC5pc0NvbW1lbnQpJiZuKHQuYXN5bmNGYWN0b3J5KSlyZXR1cm4gdC5pc0FzeW5jUGxhY2Vob2xkZXI9ITAsITA7aWYobihjKSYmKG4oYT1jLmhvb2spJiZuKGE9YS5pbml0KSYmYSh0LCEwKSxuKGE9dC5jb21wb25lbnRJbnN0YW5jZSkpKXJldHVybiBkKHQsaSksITA7aWYobihzKSl7aWYobih1KSlpZihlLmhhc0NoaWxkTm9kZXMoKSlpZihuKGE9YykmJm4oYT1hLmRvbVByb3BzKSYmbihhPWEuaW5uZXJIVE1MKSl7aWYoYSE9PWUuaW5uZXJIVE1MKXJldHVybiExfWVsc2V7Zm9yKHZhciBsPSEwLGY9ZS5maXJzdENoaWxkLHA9MDtwPHUubGVuZ3RoO3ArKyl7aWYoIWZ8fCFPKGYsdVtwXSxpLG8pKXtsPSExO2JyZWFrfWY9Zi5uZXh0U2libGluZ31pZighbHx8ZilyZXR1cm4hMX1lbHNlIGgodCx1LGkpO2lmKG4oYykpe3ZhciB2PSExO2Zvcih2YXIgbSBpbiBjKWlmKCFBKG0pKXt2PSEwLHkodCxpKTticmVha30hdiYmYy5jbGFzcyYmZXQoYy5jbGFzcyl9fWVsc2UgZS5kYXRhIT09dC50ZXh0JiYoZS5kYXRhPXQudGV4dCk7cmV0dXJuITB9cmV0dXJuIGZ1bmN0aW9uKGUsaSxvLGEpe2lmKCF0KGkpKXt2YXIgYyxsPSExLHA9W107aWYodChlKSlsPSEwLGYoaSxwKTtlbHNle3ZhciBkPW4oZS5ub2RlVHlwZSk7aWYoIWQmJmlyKGUsaSkpeChlLGkscCxudWxsLG51bGwsYSk7ZWxzZXtpZihkKXtpZigxPT09ZS5ub2RlVHlwZSYmZS5oYXNBdHRyaWJ1dGUoTCkmJihlLnJlbW92ZUF0dHJpYnV0ZShMKSxvPSEwKSxyKG8pJiZPKGUsaSxwKSlyZXR1cm4gayhpLHAsITApLGU7Yz1lLGU9bmV3IHBlKHUudGFnTmFtZShjKS50b0xvd2VyQ2FzZSgpLHt9LFtdLHZvaWQgMCxjKX12YXIgdj1lLmVsbSxoPXUucGFyZW50Tm9kZSh2KTtpZihmKGkscCx2Ll9sZWF2ZUNiP251bGw6aCx1Lm5leHRTaWJsaW5nKHYpKSxuKGkucGFyZW50KSlmb3IodmFyIHk9aS5wYXJlbnQsZz1tKGkpO3k7KXtmb3IodmFyIF89MDtfPHMuZGVzdHJveS5sZW5ndGg7KytfKXMuZGVzdHJveVtfXSh5KTtpZih5LmVsbT1pLmVsbSxnKXtmb3IodmFyIHc9MDt3PHMuY3JlYXRlLmxlbmd0aDsrK3cpcy5jcmVhdGVbd10obnIseSk7dmFyIEM9eS5kYXRhLmhvb2suaW5zZXJ0O2lmKEMubWVyZ2VkKWZvcih2YXIgQT0xO0E8Qy5mbnMubGVuZ3RoO0ErKylDLmZuc1tBXSgpfWVsc2UgdHIoeSk7eT15LnBhcmVudH1uKGgpPyQoMCxbZV0sMCwwKTpuKGUudGFnKSYmYihlKX19cmV0dXJuIGsoaSxwLGwpLGkuZWxtfW4oZSkmJmIoZSl9fSh7bm9kZU9wczpRbixtb2R1bGVzOlttcix4cixuaSxvaSxtaSx6P3tjcmVhdGU6VWksYWN0aXZhdGU6VWkscmVtb3ZlOmZ1bmN0aW9uKGUsdCl7ITAhPT1lLmRhdGEuc2hvdz9SaShlLHQpOnQoKX19Ont9XS5jb25jYXQocHIpfSk7VyYmZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcInNlbGVjdGlvbmNoYW5nZVwiLGZ1bmN0aW9uKCl7dmFyIGU9ZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtlJiZlLnZtb2RlbCYmWGkoZSxcImlucHV0XCIpfSk7dmFyIFZpPXtpbnNlcnRlZDpmdW5jdGlvbihlLHQsbixyKXtcInNlbGVjdFwiPT09bi50YWc/KHIuZWxtJiYhci5lbG0uX3ZPcHRpb25zP2l0KG4sXCJwb3N0cGF0Y2hcIixmdW5jdGlvbigpe1ZpLmNvbXBvbmVudFVwZGF0ZWQoZSx0LG4pfSk6S2koZSx0LG4uY29udGV4dCksZS5fdk9wdGlvbnM9W10ubWFwLmNhbGwoZS5vcHRpb25zLFdpKSk6KFwidGV4dGFyZWFcIj09PW4udGFnfHxYbihlLnR5cGUpKSYmKGUuX3ZNb2RpZmllcnM9dC5tb2RpZmllcnMsdC5tb2RpZmllcnMubGF6eXx8KGUuYWRkRXZlbnRMaXN0ZW5lcihcImNvbXBvc2l0aW9uc3RhcnRcIixaaSksZS5hZGRFdmVudExpc3RlbmVyKFwiY29tcG9zaXRpb25lbmRcIixHaSksZS5hZGRFdmVudExpc3RlbmVyKFwiY2hhbmdlXCIsR2kpLFcmJihlLnZtb2RlbD0hMCkpKX0sY29tcG9uZW50VXBkYXRlZDpmdW5jdGlvbihlLHQsbil7aWYoXCJzZWxlY3RcIj09PW4udGFnKXtLaShlLHQsbi5jb250ZXh0KTt2YXIgcj1lLl92T3B0aW9ucyxpPWUuX3ZPcHRpb25zPVtdLm1hcC5jYWxsKGUub3B0aW9ucyxXaSk7aWYoaS5zb21lKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIU4oZSxyW3RdKX0pKShlLm11bHRpcGxlP3QudmFsdWUuc29tZShmdW5jdGlvbihlKXtyZXR1cm4gcWkoZSxpKX0pOnQudmFsdWUhPT10Lm9sZFZhbHVlJiZxaSh0LnZhbHVlLGkpKSYmWGkoZSxcImNoYW5nZVwiKX19fTtmdW5jdGlvbiBLaShlLHQsbil7SmkoZSx0LG4pLChxfHxaKSYmc2V0VGltZW91dChmdW5jdGlvbigpe0ppKGUsdCxuKX0sMCl9ZnVuY3Rpb24gSmkoZSx0LG4pe3ZhciByPXQudmFsdWUsaT1lLm11bHRpcGxlO2lmKCFpfHxBcnJheS5pc0FycmF5KHIpKXtmb3IodmFyIG8sYSxzPTAsYz1lLm9wdGlvbnMubGVuZ3RoO3M8YztzKyspaWYoYT1lLm9wdGlvbnNbc10saSlvPWoocixXaShhKSk+LTEsYS5zZWxlY3RlZCE9PW8mJihhLnNlbGVjdGVkPW8pO2Vsc2UgaWYoTihXaShhKSxyKSlyZXR1cm4gdm9pZChlLnNlbGVjdGVkSW5kZXghPT1zJiYoZS5zZWxlY3RlZEluZGV4PXMpKTtpfHwoZS5zZWxlY3RlZEluZGV4PS0xKX19ZnVuY3Rpb24gcWkoZSx0KXtyZXR1cm4gdC5ldmVyeShmdW5jdGlvbih0KXtyZXR1cm4hTih0LGUpfSl9ZnVuY3Rpb24gV2koZSl7cmV0dXJuXCJfdmFsdWVcImluIGU/ZS5fdmFsdWU6ZS52YWx1ZX1mdW5jdGlvbiBaaShlKXtlLnRhcmdldC5jb21wb3Npbmc9ITB9ZnVuY3Rpb24gR2koZSl7ZS50YXJnZXQuY29tcG9zaW5nJiYoZS50YXJnZXQuY29tcG9zaW5nPSExLFhpKGUudGFyZ2V0LFwiaW5wdXRcIikpfWZ1bmN0aW9uIFhpKGUsdCl7dmFyIG49ZG9jdW1lbnQuY3JlYXRlRXZlbnQoXCJIVE1MRXZlbnRzXCIpO24uaW5pdEV2ZW50KHQsITAsITApLGUuZGlzcGF0Y2hFdmVudChuKX1mdW5jdGlvbiBZaShlKXtyZXR1cm4hZS5jb21wb25lbnRJbnN0YW5jZXx8ZS5kYXRhJiZlLmRhdGEudHJhbnNpdGlvbj9lOllpKGUuY29tcG9uZW50SW5zdGFuY2UuX3Zub2RlKX12YXIgUWk9e21vZGVsOlZpLHNob3c6e2JpbmQ6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXQudmFsdWUsaT0obj1ZaShuKSkuZGF0YSYmbi5kYXRhLnRyYW5zaXRpb24sbz1lLl9fdk9yaWdpbmFsRGlzcGxheT1cIm5vbmVcIj09PWUuc3R5bGUuZGlzcGxheT9cIlwiOmUuc3R5bGUuZGlzcGxheTtyJiZpPyhuLmRhdGEuc2hvdz0hMCxQaShuLGZ1bmN0aW9uKCl7ZS5zdHlsZS5kaXNwbGF5PW99KSk6ZS5zdHlsZS5kaXNwbGF5PXI/bzpcIm5vbmVcIn0sdXBkYXRlOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10LnZhbHVlOyFyIT0hdC5vbGRWYWx1ZSYmKChuPVlpKG4pKS5kYXRhJiZuLmRhdGEudHJhbnNpdGlvbj8obi5kYXRhLnNob3c9ITAscj9QaShuLGZ1bmN0aW9uKCl7ZS5zdHlsZS5kaXNwbGF5PWUuX192T3JpZ2luYWxEaXNwbGF5fSk6UmkobixmdW5jdGlvbigpe2Uuc3R5bGUuZGlzcGxheT1cIm5vbmVcIn0pKTplLnN0eWxlLmRpc3BsYXk9cj9lLl9fdk9yaWdpbmFsRGlzcGxheTpcIm5vbmVcIil9LHVuYmluZDpmdW5jdGlvbihlLHQsbixyLGkpe2l8fChlLnN0eWxlLmRpc3BsYXk9ZS5fX3ZPcmlnaW5hbERpc3BsYXkpfX19LGVvPXtuYW1lOlN0cmluZyxhcHBlYXI6Qm9vbGVhbixjc3M6Qm9vbGVhbixtb2RlOlN0cmluZyx0eXBlOlN0cmluZyxlbnRlckNsYXNzOlN0cmluZyxsZWF2ZUNsYXNzOlN0cmluZyxlbnRlclRvQ2xhc3M6U3RyaW5nLGxlYXZlVG9DbGFzczpTdHJpbmcsZW50ZXJBY3RpdmVDbGFzczpTdHJpbmcsbGVhdmVBY3RpdmVDbGFzczpTdHJpbmcsYXBwZWFyQ2xhc3M6U3RyaW5nLGFwcGVhckFjdGl2ZUNsYXNzOlN0cmluZyxhcHBlYXJUb0NsYXNzOlN0cmluZyxkdXJhdGlvbjpbTnVtYmVyLFN0cmluZyxPYmplY3RdfTtmdW5jdGlvbiB0byhlKXt2YXIgdD1lJiZlLmNvbXBvbmVudE9wdGlvbnM7cmV0dXJuIHQmJnQuQ3Rvci5vcHRpb25zLmFic3RyYWN0P3RvKHp0KHQuY2hpbGRyZW4pKTplfWZ1bmN0aW9uIG5vKGUpe3ZhciB0PXt9LG49ZS4kb3B0aW9ucztmb3IodmFyIHIgaW4gbi5wcm9wc0RhdGEpdFtyXT1lW3JdO3ZhciBpPW4uX3BhcmVudExpc3RlbmVycztmb3IodmFyIG8gaW4gaSl0W2IobyldPWlbb107cmV0dXJuIHR9ZnVuY3Rpb24gcm8oZSx0KXtpZigvXFxkLWtlZXAtYWxpdmUkLy50ZXN0KHQudGFnKSlyZXR1cm4gZShcImtlZXAtYWxpdmVcIix7cHJvcHM6dC5jb21wb25lbnRPcHRpb25zLnByb3BzRGF0YX0pfXZhciBpbz1mdW5jdGlvbihlKXtyZXR1cm4gZS50YWd8fFV0KGUpfSxvbz1mdW5jdGlvbihlKXtyZXR1cm5cInNob3dcIj09PWUubmFtZX0sYW89e25hbWU6XCJ0cmFuc2l0aW9uXCIscHJvcHM6ZW8sYWJzdHJhY3Q6ITAscmVuZGVyOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMsbj10aGlzLiRzbG90cy5kZWZhdWx0O2lmKG4mJihuPW4uZmlsdGVyKGlvKSkubGVuZ3RoKXt2YXIgcj10aGlzLm1vZGUsbz1uWzBdO2lmKGZ1bmN0aW9uKGUpe2Zvcig7ZT1lLnBhcmVudDspaWYoZS5kYXRhLnRyYW5zaXRpb24pcmV0dXJuITB9KHRoaXMuJHZub2RlKSlyZXR1cm4gbzt2YXIgYT10byhvKTtpZighYSlyZXR1cm4gbztpZih0aGlzLl9sZWF2aW5nKXJldHVybiBybyhlLG8pO3ZhciBzPVwiX190cmFuc2l0aW9uLVwiK3RoaXMuX3VpZCtcIi1cIjthLmtleT1udWxsPT1hLmtleT9hLmlzQ29tbWVudD9zK1wiY29tbWVudFwiOnMrYS50YWc6aShhLmtleSk/MD09PVN0cmluZyhhLmtleSkuaW5kZXhPZihzKT9hLmtleTpzK2Eua2V5OmEua2V5O3ZhciBjPShhLmRhdGF8fChhLmRhdGE9e30pKS50cmFuc2l0aW9uPW5vKHRoaXMpLHU9dGhpcy5fdm5vZGUsbD10byh1KTtpZihhLmRhdGEuZGlyZWN0aXZlcyYmYS5kYXRhLmRpcmVjdGl2ZXMuc29tZShvbykmJihhLmRhdGEuc2hvdz0hMCksbCYmbC5kYXRhJiYhZnVuY3Rpb24oZSx0KXtyZXR1cm4gdC5rZXk9PT1lLmtleSYmdC50YWc9PT1lLnRhZ30oYSxsKSYmIVV0KGwpJiYoIWwuY29tcG9uZW50SW5zdGFuY2V8fCFsLmNvbXBvbmVudEluc3RhbmNlLl92bm9kZS5pc0NvbW1lbnQpKXt2YXIgZj1sLmRhdGEudHJhbnNpdGlvbj1BKHt9LGMpO2lmKFwib3V0LWluXCI9PT1yKXJldHVybiB0aGlzLl9sZWF2aW5nPSEwLGl0KGYsXCJhZnRlckxlYXZlXCIsZnVuY3Rpb24oKXt0Ll9sZWF2aW5nPSExLHQuJGZvcmNlVXBkYXRlKCl9KSxybyhlLG8pO2lmKFwiaW4tb3V0XCI9PT1yKXtpZihVdChhKSlyZXR1cm4gdTt2YXIgcCxkPWZ1bmN0aW9uKCl7cCgpfTtpdChjLFwiYWZ0ZXJFbnRlclwiLGQpLGl0KGMsXCJlbnRlckNhbmNlbGxlZFwiLGQpLGl0KGYsXCJkZWxheUxlYXZlXCIsZnVuY3Rpb24oZSl7cD1lfSl9fXJldHVybiBvfX19LHNvPUEoe3RhZzpTdHJpbmcsbW92ZUNsYXNzOlN0cmluZ30sZW8pO2Z1bmN0aW9uIGNvKGUpe2UuZWxtLl9tb3ZlQ2ImJmUuZWxtLl9tb3ZlQ2IoKSxlLmVsbS5fZW50ZXJDYiYmZS5lbG0uX2VudGVyQ2IoKX1mdW5jdGlvbiB1byhlKXtlLmRhdGEubmV3UG9zPWUuZWxtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpfWZ1bmN0aW9uIGxvKGUpe3ZhciB0PWUuZGF0YS5wb3Msbj1lLmRhdGEubmV3UG9zLHI9dC5sZWZ0LW4ubGVmdCxpPXQudG9wLW4udG9wO2lmKHJ8fGkpe2UuZGF0YS5tb3ZlZD0hMDt2YXIgbz1lLmVsbS5zdHlsZTtvLnRyYW5zZm9ybT1vLldlYmtpdFRyYW5zZm9ybT1cInRyYW5zbGF0ZShcIityK1wicHgsXCIraStcInB4KVwiLG8udHJhbnNpdGlvbkR1cmF0aW9uPVwiMHNcIn19ZGVsZXRlIHNvLm1vZGU7dmFyIGZvPXtUcmFuc2l0aW9uOmFvLFRyYW5zaXRpb25Hcm91cDp7cHJvcHM6c28sYmVmb3JlTW91bnQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9dGhpcy5fdXBkYXRlO3RoaXMuX3VwZGF0ZT1mdW5jdGlvbihuLHIpe3ZhciBpPVp0KGUpO2UuX19wYXRjaF9fKGUuX3Zub2RlLGUua2VwdCwhMSwhMCksZS5fdm5vZGU9ZS5rZXB0LGkoKSx0LmNhbGwoZSxuLHIpfX0scmVuZGVyOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD10aGlzLnRhZ3x8dGhpcy4kdm5vZGUuZGF0YS50YWd8fFwic3BhblwiLG49T2JqZWN0LmNyZWF0ZShudWxsKSxyPXRoaXMucHJldkNoaWxkcmVuPXRoaXMuY2hpbGRyZW4saT10aGlzLiRzbG90cy5kZWZhdWx0fHxbXSxvPXRoaXMuY2hpbGRyZW49W10sYT1ubyh0aGlzKSxzPTA7czxpLmxlbmd0aDtzKyspe3ZhciBjPWlbc107Yy50YWcmJm51bGwhPWMua2V5JiYwIT09U3RyaW5nKGMua2V5KS5pbmRleE9mKFwiX192bGlzdFwiKSYmKG8ucHVzaChjKSxuW2Mua2V5XT1jLChjLmRhdGF8fChjLmRhdGE9e30pKS50cmFuc2l0aW9uPWEpfWlmKHIpe2Zvcih2YXIgdT1bXSxsPVtdLGY9MDtmPHIubGVuZ3RoO2YrKyl7dmFyIHA9cltmXTtwLmRhdGEudHJhbnNpdGlvbj1hLHAuZGF0YS5wb3M9cC5lbG0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbltwLmtleV0/dS5wdXNoKHApOmwucHVzaChwKX10aGlzLmtlcHQ9ZSh0LG51bGwsdSksdGhpcy5yZW1vdmVkPWx9cmV0dXJuIGUodCxudWxsLG8pfSx1cGRhdGVkOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcmV2Q2hpbGRyZW4sdD10aGlzLm1vdmVDbGFzc3x8KHRoaXMubmFtZXx8XCJ2XCIpK1wiLW1vdmVcIjtlLmxlbmd0aCYmdGhpcy5oYXNNb3ZlKGVbMF0uZWxtLHQpJiYoZS5mb3JFYWNoKGNvKSxlLmZvckVhY2godW8pLGUuZm9yRWFjaChsbyksdGhpcy5fcmVmbG93PWRvY3VtZW50LmJvZHkub2Zmc2V0SGVpZ2h0LGUuZm9yRWFjaChmdW5jdGlvbihlKXtpZihlLmRhdGEubW92ZWQpe3ZhciBuPWUuZWxtLHI9bi5zdHlsZTtOaShuLHQpLHIudHJhbnNmb3JtPXIuV2Via2l0VHJhbnNmb3JtPXIudHJhbnNpdGlvbkR1cmF0aW9uPVwiXCIsbi5hZGRFdmVudExpc3RlbmVyKEFpLG4uX21vdmVDYj1mdW5jdGlvbiBlKHIpe3ImJnIudGFyZ2V0IT09bnx8ciYmIS90cmFuc2Zvcm0kLy50ZXN0KHIucHJvcGVydHlOYW1lKXx8KG4ucmVtb3ZlRXZlbnRMaXN0ZW5lcihBaSxlKSxuLl9tb3ZlQ2I9bnVsbCxqaShuLHQpKX0pfX0pKX0sbWV0aG9kczp7aGFzTW92ZTpmdW5jdGlvbihlLHQpe2lmKCF3aSlyZXR1cm4hMTtpZih0aGlzLl9oYXNNb3ZlKXJldHVybiB0aGlzLl9oYXNNb3ZlO3ZhciBuPWUuY2xvbmVOb2RlKCk7ZS5fdHJhbnNpdGlvbkNsYXNzZXMmJmUuX3RyYW5zaXRpb25DbGFzc2VzLmZvckVhY2goZnVuY3Rpb24oZSl7X2kobixlKX0pLGdpKG4sdCksbi5zdHlsZS5kaXNwbGF5PVwibm9uZVwiLHRoaXMuJGVsLmFwcGVuZENoaWxkKG4pO3ZhciByPU1pKG4pO3JldHVybiB0aGlzLiRlbC5yZW1vdmVDaGlsZChuKSx0aGlzLl9oYXNNb3ZlPXIuaGFzVHJhbnNmb3JtfX19fTt3bi5jb25maWcubXVzdFVzZVByb3A9am4sd24uY29uZmlnLmlzUmVzZXJ2ZWRUYWc9V24sd24uY29uZmlnLmlzUmVzZXJ2ZWRBdHRyPUVuLHduLmNvbmZpZy5nZXRUYWdOYW1lc3BhY2U9Wm4sd24uY29uZmlnLmlzVW5rbm93bkVsZW1lbnQ9ZnVuY3Rpb24oZSl7aWYoIXopcmV0dXJuITA7aWYoV24oZSkpcmV0dXJuITE7aWYoZT1lLnRvTG93ZXJDYXNlKCksbnVsbCE9R25bZV0pcmV0dXJuIEduW2VdO3ZhciB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoZSk7cmV0dXJuIGUuaW5kZXhPZihcIi1cIik+LTE/R25bZV09dC5jb25zdHJ1Y3Rvcj09PXdpbmRvdy5IVE1MVW5rbm93bkVsZW1lbnR8fHQuY29uc3RydWN0b3I9PT13aW5kb3cuSFRNTEVsZW1lbnQ6R25bZV09L0hUTUxVbmtub3duRWxlbWVudC8udGVzdCh0LnRvU3RyaW5nKCkpfSxBKHduLm9wdGlvbnMuZGlyZWN0aXZlcyxRaSksQSh3bi5vcHRpb25zLmNvbXBvbmVudHMsZm8pLHduLnByb3RvdHlwZS5fX3BhdGNoX189ej96aTpTLHduLnByb3RvdHlwZS4kbW91bnQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZnVuY3Rpb24oZSx0LG4pe3ZhciByO3JldHVybiBlLiRlbD10LGUuJG9wdGlvbnMucmVuZGVyfHwoZS4kb3B0aW9ucy5yZW5kZXI9dmUpLFl0KGUsXCJiZWZvcmVNb3VudFwiKSxyPWZ1bmN0aW9uKCl7ZS5fdXBkYXRlKGUuX3JlbmRlcigpLG4pfSxuZXcgZm4oZSxyLFMse2JlZm9yZTpmdW5jdGlvbigpe2UuX2lzTW91bnRlZCYmIWUuX2lzRGVzdHJveWVkJiZZdChlLFwiYmVmb3JlVXBkYXRlXCIpfX0sITApLG49ITEsbnVsbD09ZS4kdm5vZGUmJihlLl9pc01vdW50ZWQ9ITAsWXQoZSxcIm1vdW50ZWRcIikpLGV9KHRoaXMsZT1lJiZ6P1luKGUpOnZvaWQgMCx0KX0seiYmc2V0VGltZW91dChmdW5jdGlvbigpe0YuZGV2dG9vbHMmJm5lJiZuZS5lbWl0KFwiaW5pdFwiLHduKX0sMCk7dmFyIHBvPS9cXHtcXHsoKD86LnxcXHI/XFxuKSs/KVxcfVxcfS9nLHZvPS9bLS4qKz9eJHt9KCl8W1xcXVxcL1xcXFxdL2csaG89ZyhmdW5jdGlvbihlKXt2YXIgdD1lWzBdLnJlcGxhY2Uodm8sXCJcXFxcJCZcIiksbj1lWzFdLnJlcGxhY2Uodm8sXCJcXFxcJCZcIik7cmV0dXJuIG5ldyBSZWdFeHAodCtcIigoPzoufFxcXFxuKSs/KVwiK24sXCJnXCIpfSk7dmFyIG1vPXtzdGF0aWNLZXlzOltcInN0YXRpY0NsYXNzXCJdLHRyYW5zZm9ybU5vZGU6ZnVuY3Rpb24oZSx0KXt0Lndhcm47dmFyIG49RnIoZSxcImNsYXNzXCIpO24mJihlLnN0YXRpY0NsYXNzPUpTT04uc3RyaW5naWZ5KG4pKTt2YXIgcj1JcihlLFwiY2xhc3NcIiwhMSk7ciYmKGUuY2xhc3NCaW5kaW5nPXIpfSxnZW5EYXRhOmZ1bmN0aW9uKGUpe3ZhciB0PVwiXCI7cmV0dXJuIGUuc3RhdGljQ2xhc3MmJih0Kz1cInN0YXRpY0NsYXNzOlwiK2Uuc3RhdGljQ2xhc3MrXCIsXCIpLGUuY2xhc3NCaW5kaW5nJiYodCs9XCJjbGFzczpcIitlLmNsYXNzQmluZGluZytcIixcIiksdH19O3ZhciB5byxnbz17c3RhdGljS2V5czpbXCJzdGF0aWNTdHlsZVwiXSx0cmFuc2Zvcm1Ob2RlOmZ1bmN0aW9uKGUsdCl7dC53YXJuO3ZhciBuPUZyKGUsXCJzdHlsZVwiKTtuJiYoZS5zdGF0aWNTdHlsZT1KU09OLnN0cmluZ2lmeShhaShuKSkpO3ZhciByPUlyKGUsXCJzdHlsZVwiLCExKTtyJiYoZS5zdHlsZUJpbmRpbmc9cil9LGdlbkRhdGE6ZnVuY3Rpb24oZSl7dmFyIHQ9XCJcIjtyZXR1cm4gZS5zdGF0aWNTdHlsZSYmKHQrPVwic3RhdGljU3R5bGU6XCIrZS5zdGF0aWNTdHlsZStcIixcIiksZS5zdHlsZUJpbmRpbmcmJih0Kz1cInN0eWxlOihcIitlLnN0eWxlQmluZGluZytcIiksXCIpLHR9fSxfbz1mdW5jdGlvbihlKXtyZXR1cm4oeW89eW98fGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIikpLmlubmVySFRNTD1lLHlvLnRleHRDb250ZW50fSxibz1wKFwiYXJlYSxiYXNlLGJyLGNvbCxlbWJlZCxmcmFtZSxocixpbWcsaW5wdXQsaXNpbmRleCxrZXlnZW4sbGluayxtZXRhLHBhcmFtLHNvdXJjZSx0cmFjayx3YnJcIiksJG89cChcImNvbGdyb3VwLGRkLGR0LGxpLG9wdGlvbnMscCx0ZCx0Zm9vdCx0aCx0aGVhZCx0cixzb3VyY2VcIiksd289cChcImFkZHJlc3MsYXJ0aWNsZSxhc2lkZSxiYXNlLGJsb2NrcXVvdGUsYm9keSxjYXB0aW9uLGNvbCxjb2xncm91cCxkZCxkZXRhaWxzLGRpYWxvZyxkaXYsZGwsZHQsZmllbGRzZXQsZmlnY2FwdGlvbixmaWd1cmUsZm9vdGVyLGZvcm0saDEsaDIsaDMsaDQsaDUsaDYsaGVhZCxoZWFkZXIsaGdyb3VwLGhyLGh0bWwsbGVnZW5kLGxpLG1lbnVpdGVtLG1ldGEsb3B0Z3JvdXAsb3B0aW9uLHBhcmFtLHJwLHJ0LHNvdXJjZSxzdHlsZSxzdW1tYXJ5LHRib2R5LHRkLHRmb290LHRoLHRoZWFkLHRpdGxlLHRyLHRyYWNrXCIpLENvPS9eXFxzKihbXlxcc1wiJzw+XFwvPV0rKSg/OlxccyooPSlcXHMqKD86XCIoW15cIl0qKVwiK3wnKFteJ10qKScrfChbXlxcc1wiJz08PmBdKykpKT8vLHhvPS9eXFxzKigoPzp2LVtcXHctXSs6fEB8OnwjKVxcW1tePV0rXFxdW15cXHNcIic8PlxcLz1dKikoPzpcXHMqKD0pXFxzKig/OlwiKFteXCJdKilcIit8JyhbXiddKiknK3woW15cXHNcIic9PD5gXSspKSk/Lyxrbz1cIlthLXpBLVpfXVtcXFxcLVxcXFwuMC05X2EtekEtWlwiK1Auc291cmNlK1wiXSpcIixBbz1cIigoPzpcIitrbytcIlxcXFw6KT9cIitrbytcIilcIixPbz1uZXcgUmVnRXhwKFwiXjxcIitBbyksU289L15cXHMqKFxcLz8pPi8sVG89bmV3IFJlZ0V4cChcIl48XFxcXC9cIitBbytcIltePl0qPlwiKSxFbz0vXjwhRE9DVFlQRSBbXj5dKz4vaSxObz0vXjwhXFwtLS8sam89L148IVxcWy8sRG89cChcInNjcmlwdCxzdHlsZSx0ZXh0YXJlYVwiLCEwKSxMbz17fSxNbz17XCImbHQ7XCI6XCI8XCIsXCImZ3Q7XCI6XCI+XCIsXCImcXVvdDtcIjonXCInLFwiJmFtcDtcIjpcIiZcIixcIiYjMTA7XCI6XCJcXG5cIixcIiYjOTtcIjpcIlxcdFwiLFwiJiMzOTtcIjpcIidcIn0sSW89LyYoPzpsdHxndHxxdW90fGFtcHwjMzkpOy9nLEZvPS8mKD86bHR8Z3R8cXVvdHxhbXB8IzM5fCMxMHwjOSk7L2csUG89cChcInByZSx0ZXh0YXJlYVwiLCEwKSxSbz1mdW5jdGlvbihlLHQpe3JldHVybiBlJiZQbyhlKSYmXCJcXG5cIj09PXRbMF19O2Z1bmN0aW9uIEhvKGUsdCl7dmFyIG49dD9GbzpJbztyZXR1cm4gZS5yZXBsYWNlKG4sZnVuY3Rpb24oZSl7cmV0dXJuIE1vW2VdfSl9dmFyIEJvLFVvLHpvLFZvLEtvLEpvLHFvLFdvLFpvPS9eQHxedi1vbjovLEdvPS9edi18XkB8XjovLFhvPS8oW1xcc1xcU10qPylcXHMrKD86aW58b2YpXFxzKyhbXFxzXFxTXSopLyxZbz0vLChbXixcXH1cXF1dKikoPzosKFteLFxcfVxcXV0qKSk/JC8sUW89L15cXCh8XFwpJC9nLGVhPS9eXFxbLipcXF0kLyx0YT0vOiguKikkLyxuYT0vXjp8XlxcLnxedi1iaW5kOi8scmE9L1xcLlteLlxcXV0rKD89W15cXF1dKiQpL2csaWE9L152LXNsb3QoOnwkKXxeIy8sb2E9L1tcXHJcXG5dLyxhYT0vXFxzKy9nLHNhPWcoX28pLGNhPVwiX2VtcHR5X1wiO2Z1bmN0aW9uIHVhKGUsdCxuKXtyZXR1cm57dHlwZToxLHRhZzplLGF0dHJzTGlzdDp0LGF0dHJzTWFwOm1hKHQpLHJhd0F0dHJzTWFwOnt9LHBhcmVudDpuLGNoaWxkcmVuOltdfX1mdW5jdGlvbiBsYShlLHQpe0JvPXQud2Fybnx8U3IsSm89dC5pc1ByZVRhZ3x8VCxxbz10Lm11c3RVc2VQcm9wfHxULFdvPXQuZ2V0VGFnTmFtZXNwYWNlfHxUO3QuaXNSZXNlcnZlZFRhZzt6bz1Ucih0Lm1vZHVsZXMsXCJ0cmFuc2Zvcm1Ob2RlXCIpLFZvPVRyKHQubW9kdWxlcyxcInByZVRyYW5zZm9ybU5vZGVcIiksS289VHIodC5tb2R1bGVzLFwicG9zdFRyYW5zZm9ybU5vZGVcIiksVW89dC5kZWxpbWl0ZXJzO3ZhciBuLHIsaT1bXSxvPSExIT09dC5wcmVzZXJ2ZVdoaXRlc3BhY2UsYT10LndoaXRlc3BhY2Uscz0hMSxjPSExO2Z1bmN0aW9uIHUoZSl7aWYobChlKSxzfHxlLnByb2Nlc3NlZHx8KGU9ZmEoZSx0KSksaS5sZW5ndGh8fGU9PT1ufHxuLmlmJiYoZS5lbHNlaWZ8fGUuZWxzZSkmJmRhKG4se2V4cDplLmVsc2VpZixibG9jazplfSksciYmIWUuZm9yYmlkZGVuKWlmKGUuZWxzZWlmfHxlLmVsc2UpYT1lLCh1PWZ1bmN0aW9uKGUpe3ZhciB0PWUubGVuZ3RoO2Zvcig7dC0tOyl7aWYoMT09PWVbdF0udHlwZSlyZXR1cm4gZVt0XTtlLnBvcCgpfX0oci5jaGlsZHJlbikpJiZ1LmlmJiZkYSh1LHtleHA6YS5lbHNlaWYsYmxvY2s6YX0pO2Vsc2V7aWYoZS5zbG90U2NvcGUpe3ZhciBvPWUuc2xvdFRhcmdldHx8J1wiZGVmYXVsdFwiJzsoci5zY29wZWRTbG90c3x8KHIuc2NvcGVkU2xvdHM9e30pKVtvXT1lfXIuY2hpbGRyZW4ucHVzaChlKSxlLnBhcmVudD1yfXZhciBhLHU7ZS5jaGlsZHJlbj1lLmNoaWxkcmVuLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4hZS5zbG90U2NvcGV9KSxsKGUpLGUucHJlJiYocz0hMSksSm8oZS50YWcpJiYoYz0hMSk7Zm9yKHZhciBmPTA7ZjxLby5sZW5ndGg7ZisrKUtvW2ZdKGUsdCl9ZnVuY3Rpb24gbChlKXtpZighYylmb3IodmFyIHQ7KHQ9ZS5jaGlsZHJlbltlLmNoaWxkcmVuLmxlbmd0aC0xXSkmJjM9PT10LnR5cGUmJlwiIFwiPT09dC50ZXh0OyllLmNoaWxkcmVuLnBvcCgpfXJldHVybiBmdW5jdGlvbihlLHQpe2Zvcih2YXIgbixyLGk9W10sbz10LmV4cGVjdEhUTUwsYT10LmlzVW5hcnlUYWd8fFQscz10LmNhbkJlTGVmdE9wZW5UYWd8fFQsYz0wO2U7KXtpZihuPWUsciYmRG8ocikpe3ZhciB1PTAsbD1yLnRvTG93ZXJDYXNlKCksZj1Mb1tsXXx8KExvW2xdPW5ldyBSZWdFeHAoXCIoW1xcXFxzXFxcXFNdKj8pKDwvXCIrbCtcIltePl0qPilcIixcImlcIikpLHA9ZS5yZXBsYWNlKGYsZnVuY3Rpb24oZSxuLHIpe3JldHVybiB1PXIubGVuZ3RoLERvKGwpfHxcIm5vc2NyaXB0XCI9PT1sfHwobj1uLnJlcGxhY2UoLzwhXFwtLShbXFxzXFxTXSo/KS0tPi9nLFwiJDFcIikucmVwbGFjZSgvPCFcXFtDREFUQVxcWyhbXFxzXFxTXSo/KV1dPi9nLFwiJDFcIikpLFJvKGwsbikmJihuPW4uc2xpY2UoMSkpLHQuY2hhcnMmJnQuY2hhcnMobiksXCJcIn0pO2MrPWUubGVuZ3RoLXAubGVuZ3RoLGU9cCxBKGwsYy11LGMpfWVsc2V7dmFyIGQ9ZS5pbmRleE9mKFwiPFwiKTtpZigwPT09ZCl7aWYoTm8udGVzdChlKSl7dmFyIHY9ZS5pbmRleE9mKFwiLS1cXHgzZVwiKTtpZih2Pj0wKXt0LnNob3VsZEtlZXBDb21tZW50JiZ0LmNvbW1lbnQoZS5zdWJzdHJpbmcoNCx2KSxjLGMrdiszKSxDKHYrMyk7Y29udGludWV9fWlmKGpvLnRlc3QoZSkpe3ZhciBoPWUuaW5kZXhPZihcIl0+XCIpO2lmKGg+PTApe0MoaCsyKTtjb250aW51ZX19dmFyIG09ZS5tYXRjaChFbyk7aWYobSl7QyhtWzBdLmxlbmd0aCk7Y29udGludWV9dmFyIHk9ZS5tYXRjaChUbyk7aWYoeSl7dmFyIGc9YztDKHlbMF0ubGVuZ3RoKSxBKHlbMV0sZyxjKTtjb250aW51ZX12YXIgXz14KCk7aWYoXyl7ayhfKSxSbyhfLnRhZ05hbWUsZSkmJkMoMSk7Y29udGludWV9fXZhciBiPXZvaWQgMCwkPXZvaWQgMCx3PXZvaWQgMDtpZihkPj0wKXtmb3IoJD1lLnNsaWNlKGQpOyEoVG8udGVzdCgkKXx8T28udGVzdCgkKXx8Tm8udGVzdCgkKXx8am8udGVzdCgkKXx8KHc9JC5pbmRleE9mKFwiPFwiLDEpKTwwKTspZCs9dywkPWUuc2xpY2UoZCk7Yj1lLnN1YnN0cmluZygwLGQpfWQ8MCYmKGI9ZSksYiYmQyhiLmxlbmd0aCksdC5jaGFycyYmYiYmdC5jaGFycyhiLGMtYi5sZW5ndGgsYyl9aWYoZT09PW4pe3QuY2hhcnMmJnQuY2hhcnMoZSk7YnJlYWt9fWZ1bmN0aW9uIEModCl7Yys9dCxlPWUuc3Vic3RyaW5nKHQpfWZ1bmN0aW9uIHgoKXt2YXIgdD1lLm1hdGNoKE9vKTtpZih0KXt2YXIgbixyLGk9e3RhZ05hbWU6dFsxXSxhdHRyczpbXSxzdGFydDpjfTtmb3IoQyh0WzBdLmxlbmd0aCk7IShuPWUubWF0Y2goU28pKSYmKHI9ZS5tYXRjaCh4byl8fGUubWF0Y2goQ28pKTspci5zdGFydD1jLEMoclswXS5sZW5ndGgpLHIuZW5kPWMsaS5hdHRycy5wdXNoKHIpO2lmKG4pcmV0dXJuIGkudW5hcnlTbGFzaD1uWzFdLEMoblswXS5sZW5ndGgpLGkuZW5kPWMsaX19ZnVuY3Rpb24gayhlKXt2YXIgbj1lLnRhZ05hbWUsYz1lLnVuYXJ5U2xhc2g7byYmKFwicFwiPT09ciYmd28obikmJkEocikscyhuKSYmcj09PW4mJkEobikpO2Zvcih2YXIgdT1hKG4pfHwhIWMsbD1lLmF0dHJzLmxlbmd0aCxmPW5ldyBBcnJheShsKSxwPTA7cDxsO3ArKyl7dmFyIGQ9ZS5hdHRyc1twXSx2PWRbM118fGRbNF18fGRbNV18fFwiXCIsaD1cImFcIj09PW4mJlwiaHJlZlwiPT09ZFsxXT90LnNob3VsZERlY29kZU5ld2xpbmVzRm9ySHJlZjp0LnNob3VsZERlY29kZU5ld2xpbmVzO2ZbcF09e25hbWU6ZFsxXSx2YWx1ZTpIbyh2LGgpfX11fHwoaS5wdXNoKHt0YWc6bixsb3dlckNhc2VkVGFnOm4udG9Mb3dlckNhc2UoKSxhdHRyczpmLHN0YXJ0OmUuc3RhcnQsZW5kOmUuZW5kfSkscj1uKSx0LnN0YXJ0JiZ0LnN0YXJ0KG4sZix1LGUuc3RhcnQsZS5lbmQpfWZ1bmN0aW9uIEEoZSxuLG8pe3ZhciBhLHM7aWYobnVsbD09biYmKG49YyksbnVsbD09byYmKG89YyksZSlmb3Iocz1lLnRvTG93ZXJDYXNlKCksYT1pLmxlbmd0aC0xO2E+PTAmJmlbYV0ubG93ZXJDYXNlZFRhZyE9PXM7YS0tKTtlbHNlIGE9MDtpZihhPj0wKXtmb3IodmFyIHU9aS5sZW5ndGgtMTt1Pj1hO3UtLSl0LmVuZCYmdC5lbmQoaVt1XS50YWcsbixvKTtpLmxlbmd0aD1hLHI9YSYmaVthLTFdLnRhZ31lbHNlXCJiclwiPT09cz90LnN0YXJ0JiZ0LnN0YXJ0KGUsW10sITAsbixvKTpcInBcIj09PXMmJih0LnN0YXJ0JiZ0LnN0YXJ0KGUsW10sITEsbixvKSx0LmVuZCYmdC5lbmQoZSxuLG8pKX1BKCl9KGUse3dhcm46Qm8sZXhwZWN0SFRNTDp0LmV4cGVjdEhUTUwsaXNVbmFyeVRhZzp0LmlzVW5hcnlUYWcsY2FuQmVMZWZ0T3BlblRhZzp0LmNhbkJlTGVmdE9wZW5UYWcsc2hvdWxkRGVjb2RlTmV3bGluZXM6dC5zaG91bGREZWNvZGVOZXdsaW5lcyxzaG91bGREZWNvZGVOZXdsaW5lc0ZvckhyZWY6dC5zaG91bGREZWNvZGVOZXdsaW5lc0ZvckhyZWYsc2hvdWxkS2VlcENvbW1lbnQ6dC5jb21tZW50cyxvdXRwdXRTb3VyY2VSYW5nZTp0Lm91dHB1dFNvdXJjZVJhbmdlLHN0YXJ0OmZ1bmN0aW9uKGUsbyxhLGwsZil7dmFyIHA9ciYmci5uc3x8V28oZSk7cSYmXCJzdmdcIj09PXAmJihvPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1bXSxuPTA7bjxlLmxlbmd0aDtuKyspe3ZhciByPWVbbl07eWEudGVzdChyLm5hbWUpfHwoci5uYW1lPXIubmFtZS5yZXBsYWNlKGdhLFwiXCIpLHQucHVzaChyKSl9cmV0dXJuIHR9KG8pKTt2YXIgZCx2PXVhKGUsbyxyKTtwJiYodi5ucz1wKSxcInN0eWxlXCIhPT0oZD12KS50YWcmJihcInNjcmlwdFwiIT09ZC50YWd8fGQuYXR0cnNNYXAudHlwZSYmXCJ0ZXh0L2phdmFzY3JpcHRcIiE9PWQuYXR0cnNNYXAudHlwZSl8fHRlKCl8fCh2LmZvcmJpZGRlbj0hMCk7Zm9yKHZhciBoPTA7aDxWby5sZW5ndGg7aCsrKXY9Vm9baF0odix0KXx8djtzfHwoIWZ1bmN0aW9uKGUpe251bGwhPUZyKGUsXCJ2LXByZVwiKSYmKGUucHJlPSEwKX0odiksdi5wcmUmJihzPSEwKSksSm8odi50YWcpJiYoYz0hMCkscz9mdW5jdGlvbihlKXt2YXIgdD1lLmF0dHJzTGlzdCxuPXQubGVuZ3RoO2lmKG4pZm9yKHZhciByPWUuYXR0cnM9bmV3IEFycmF5KG4pLGk9MDtpPG47aSsrKXJbaV09e25hbWU6dFtpXS5uYW1lLHZhbHVlOkpTT04uc3RyaW5naWZ5KHRbaV0udmFsdWUpfSxudWxsIT10W2ldLnN0YXJ0JiYocltpXS5zdGFydD10W2ldLnN0YXJ0LHJbaV0uZW5kPXRbaV0uZW5kKTtlbHNlIGUucHJlfHwoZS5wbGFpbj0hMCl9KHYpOnYucHJvY2Vzc2VkfHwocGEodiksZnVuY3Rpb24oZSl7dmFyIHQ9RnIoZSxcInYtaWZcIik7aWYodCllLmlmPXQsZGEoZSx7ZXhwOnQsYmxvY2s6ZX0pO2Vsc2V7bnVsbCE9RnIoZSxcInYtZWxzZVwiKSYmKGUuZWxzZT0hMCk7dmFyIG49RnIoZSxcInYtZWxzZS1pZlwiKTtuJiYoZS5lbHNlaWY9bil9fSh2KSxmdW5jdGlvbihlKXtudWxsIT1GcihlLFwidi1vbmNlXCIpJiYoZS5vbmNlPSEwKX0odikpLG58fChuPXYpLGE/dSh2KToocj12LGkucHVzaCh2KSl9LGVuZDpmdW5jdGlvbihlLHQsbil7dmFyIG89aVtpLmxlbmd0aC0xXTtpLmxlbmd0aC09MSxyPWlbaS5sZW5ndGgtMV0sdShvKX0sY2hhcnM6ZnVuY3Rpb24oZSx0LG4pe2lmKHImJighcXx8XCJ0ZXh0YXJlYVwiIT09ci50YWd8fHIuYXR0cnNNYXAucGxhY2Vob2xkZXIhPT1lKSl7dmFyIGksdSxsLGY9ci5jaGlsZHJlbjtpZihlPWN8fGUudHJpbSgpP1wic2NyaXB0XCI9PT0oaT1yKS50YWd8fFwic3R5bGVcIj09PWkudGFnP2U6c2EoZSk6Zi5sZW5ndGg/YT9cImNvbmRlbnNlXCI9PT1hJiZvYS50ZXN0KGUpP1wiXCI6XCIgXCI6bz9cIiBcIjpcIlwiOlwiXCIpY3x8XCJjb25kZW5zZVwiIT09YXx8KGU9ZS5yZXBsYWNlKGFhLFwiIFwiKSksIXMmJlwiIFwiIT09ZSYmKHU9ZnVuY3Rpb24oZSx0KXt2YXIgbj10P2hvKHQpOnBvO2lmKG4udGVzdChlKSl7Zm9yKHZhciByLGksbyxhPVtdLHM9W10sYz1uLmxhc3RJbmRleD0wO3I9bi5leGVjKGUpOyl7KGk9ci5pbmRleCk+YyYmKHMucHVzaChvPWUuc2xpY2UoYyxpKSksYS5wdXNoKEpTT04uc3RyaW5naWZ5KG8pKSk7dmFyIHU9QXIoclsxXS50cmltKCkpO2EucHVzaChcIl9zKFwiK3UrXCIpXCIpLHMucHVzaCh7XCJAYmluZGluZ1wiOnV9KSxjPWkrclswXS5sZW5ndGh9cmV0dXJuIGM8ZS5sZW5ndGgmJihzLnB1c2gobz1lLnNsaWNlKGMpKSxhLnB1c2goSlNPTi5zdHJpbmdpZnkobykpKSx7ZXhwcmVzc2lvbjphLmpvaW4oXCIrXCIpLHRva2VuczpzfX19KGUsVW8pKT9sPXt0eXBlOjIsZXhwcmVzc2lvbjp1LmV4cHJlc3Npb24sdG9rZW5zOnUudG9rZW5zLHRleHQ6ZX06XCIgXCI9PT1lJiZmLmxlbmd0aCYmXCIgXCI9PT1mW2YubGVuZ3RoLTFdLnRleHR8fChsPXt0eXBlOjMsdGV4dDplfSksbCYmZi5wdXNoKGwpfX0sY29tbWVudDpmdW5jdGlvbihlLHQsbil7aWYocil7dmFyIGk9e3R5cGU6Myx0ZXh0OmUsaXNDb21tZW50OiEwfTtyLmNoaWxkcmVuLnB1c2goaSl9fX0pLG59ZnVuY3Rpb24gZmEoZSx0KXt2YXIgbixyOyhyPUlyKG49ZSxcImtleVwiKSkmJihuLmtleT1yKSxlLnBsYWluPSFlLmtleSYmIWUuc2NvcGVkU2xvdHMmJiFlLmF0dHJzTGlzdC5sZW5ndGgsZnVuY3Rpb24oZSl7dmFyIHQ9SXIoZSxcInJlZlwiKTt0JiYoZS5yZWY9dCxlLnJlZkluRm9yPWZ1bmN0aW9uKGUpe3ZhciB0PWU7Zm9yKDt0Oyl7aWYodm9pZCAwIT09dC5mb3IpcmV0dXJuITA7dD10LnBhcmVudH1yZXR1cm4hMX0oZSkpfShlKSxmdW5jdGlvbihlKXt2YXIgdDtcInRlbXBsYXRlXCI9PT1lLnRhZz8odD1GcihlLFwic2NvcGVcIiksZS5zbG90U2NvcGU9dHx8RnIoZSxcInNsb3Qtc2NvcGVcIikpOih0PUZyKGUsXCJzbG90LXNjb3BlXCIpKSYmKGUuc2xvdFNjb3BlPXQpO3ZhciBuPUlyKGUsXCJzbG90XCIpO24mJihlLnNsb3RUYXJnZXQ9J1wiXCInPT09bj8nXCJkZWZhdWx0XCInOm4sZS5zbG90VGFyZ2V0RHluYW1pYz0hKCFlLmF0dHJzTWFwW1wiOnNsb3RcIl0mJiFlLmF0dHJzTWFwW1widi1iaW5kOnNsb3RcIl0pLFwidGVtcGxhdGVcIj09PWUudGFnfHxlLnNsb3RTY29wZXx8TnIoZSxcInNsb3RcIixuLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUucmF3QXR0cnNNYXBbXCI6XCIrdF18fGUucmF3QXR0cnNNYXBbXCJ2LWJpbmQ6XCIrdF18fGUucmF3QXR0cnNNYXBbdF19KGUsXCJzbG90XCIpKSk7aWYoXCJ0ZW1wbGF0ZVwiPT09ZS50YWcpe3ZhciByPVByKGUsaWEpO2lmKHIpe3ZhciBpPXZhKHIpLG89aS5uYW1lLGE9aS5keW5hbWljO2Uuc2xvdFRhcmdldD1vLGUuc2xvdFRhcmdldER5bmFtaWM9YSxlLnNsb3RTY29wZT1yLnZhbHVlfHxjYX19ZWxzZXt2YXIgcz1QcihlLGlhKTtpZihzKXt2YXIgYz1lLnNjb3BlZFNsb3RzfHwoZS5zY29wZWRTbG90cz17fSksdT12YShzKSxsPXUubmFtZSxmPXUuZHluYW1pYyxwPWNbbF09dWEoXCJ0ZW1wbGF0ZVwiLFtdLGUpO3Auc2xvdFRhcmdldD1sLHAuc2xvdFRhcmdldER5bmFtaWM9ZixwLmNoaWxkcmVuPWUuY2hpbGRyZW4uZmlsdGVyKGZ1bmN0aW9uKGUpe2lmKCFlLnNsb3RTY29wZSlyZXR1cm4gZS5wYXJlbnQ9cCwhMH0pLHAuc2xvdFNjb3BlPXMudmFsdWV8fGNhLGUuY2hpbGRyZW49W10sZS5wbGFpbj0hMX19fShlKSxmdW5jdGlvbihlKXtcInNsb3RcIj09PWUudGFnJiYoZS5zbG90TmFtZT1JcihlLFwibmFtZVwiKSl9KGUpLGZ1bmN0aW9uKGUpe3ZhciB0Oyh0PUlyKGUsXCJpc1wiKSkmJihlLmNvbXBvbmVudD10KTtudWxsIT1GcihlLFwiaW5saW5lLXRlbXBsYXRlXCIpJiYoZS5pbmxpbmVUZW1wbGF0ZT0hMCl9KGUpO2Zvcih2YXIgaT0wO2k8em8ubGVuZ3RoO2krKyllPXpvW2ldKGUsdCl8fGU7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciB0LG4scixpLG8sYSxzLGMsdT1lLmF0dHJzTGlzdDtmb3IodD0wLG49dS5sZW5ndGg7dDxuO3QrKylpZihyPWk9dVt0XS5uYW1lLG89dVt0XS52YWx1ZSxHby50ZXN0KHIpKWlmKGUuaGFzQmluZGluZ3M9ITAsKGE9aGEoci5yZXBsYWNlKEdvLFwiXCIpKSkmJihyPXIucmVwbGFjZShyYSxcIlwiKSksbmEudGVzdChyKSlyPXIucmVwbGFjZShuYSxcIlwiKSxvPUFyKG8pLChjPWVhLnRlc3QocikpJiYocj1yLnNsaWNlKDEsLTEpKSxhJiYoYS5wcm9wJiYhYyYmXCJpbm5lckh0bWxcIj09PShyPWIocikpJiYocj1cImlubmVySFRNTFwiKSxhLmNhbWVsJiYhYyYmKHI9YihyKSksYS5zeW5jJiYocz1CcihvLFwiJGV2ZW50XCIpLGM/TXIoZSwnXCJ1cGRhdGU6XCIrKCcrcitcIilcIixzLG51bGwsITEsMCx1W3RdLCEwKTooTXIoZSxcInVwZGF0ZTpcIitiKHIpLHMsbnVsbCwhMSwwLHVbdF0pLEMocikhPT1iKHIpJiZNcihlLFwidXBkYXRlOlwiK0MocikscyxudWxsLCExLDAsdVt0XSkpKSksYSYmYS5wcm9wfHwhZS5jb21wb25lbnQmJnFvKGUudGFnLGUuYXR0cnNNYXAudHlwZSxyKT9FcihlLHIsbyx1W3RdLGMpOk5yKGUscixvLHVbdF0sYyk7ZWxzZSBpZihaby50ZXN0KHIpKXI9ci5yZXBsYWNlKFpvLFwiXCIpLChjPWVhLnRlc3QocikpJiYocj1yLnNsaWNlKDEsLTEpKSxNcihlLHIsbyxhLCExLDAsdVt0XSxjKTtlbHNle3ZhciBsPShyPXIucmVwbGFjZShHbyxcIlwiKSkubWF0Y2godGEpLGY9bCYmbFsxXTtjPSExLGYmJihyPXIuc2xpY2UoMCwtKGYubGVuZ3RoKzEpKSxlYS50ZXN0KGYpJiYoZj1mLnNsaWNlKDEsLTEpLGM9ITApKSxEcihlLHIsaSxvLGYsYyxhLHVbdF0pfWVsc2UgTnIoZSxyLEpTT04uc3RyaW5naWZ5KG8pLHVbdF0pLCFlLmNvbXBvbmVudCYmXCJtdXRlZFwiPT09ciYmcW8oZS50YWcsZS5hdHRyc01hcC50eXBlLHIpJiZFcihlLHIsXCJ0cnVlXCIsdVt0XSl9KGUpLGV9ZnVuY3Rpb24gcGEoZSl7dmFyIHQ7aWYodD1GcihlLFwidi1mb3JcIikpe3ZhciBuPWZ1bmN0aW9uKGUpe3ZhciB0PWUubWF0Y2goWG8pO2lmKCF0KXJldHVybjt2YXIgbj17fTtuLmZvcj10WzJdLnRyaW0oKTt2YXIgcj10WzFdLnRyaW0oKS5yZXBsYWNlKFFvLFwiXCIpLGk9ci5tYXRjaChZbyk7aT8obi5hbGlhcz1yLnJlcGxhY2UoWW8sXCJcIikudHJpbSgpLG4uaXRlcmF0b3IxPWlbMV0udHJpbSgpLGlbMl0mJihuLml0ZXJhdG9yMj1pWzJdLnRyaW0oKSkpOm4uYWxpYXM9cjtyZXR1cm4gbn0odCk7biYmQShlLG4pfX1mdW5jdGlvbiBkYShlLHQpe2UuaWZDb25kaXRpb25zfHwoZS5pZkNvbmRpdGlvbnM9W10pLGUuaWZDb25kaXRpb25zLnB1c2godCl9ZnVuY3Rpb24gdmEoZSl7dmFyIHQ9ZS5uYW1lLnJlcGxhY2UoaWEsXCJcIik7cmV0dXJuIHR8fFwiI1wiIT09ZS5uYW1lWzBdJiYodD1cImRlZmF1bHRcIiksZWEudGVzdCh0KT97bmFtZTp0LnNsaWNlKDEsLTEpLGR5bmFtaWM6ITB9OntuYW1lOidcIicrdCsnXCInLGR5bmFtaWM6ITF9fWZ1bmN0aW9uIGhhKGUpe3ZhciB0PWUubWF0Y2gocmEpO2lmKHQpe3ZhciBuPXt9O3JldHVybiB0LmZvckVhY2goZnVuY3Rpb24oZSl7bltlLnNsaWNlKDEpXT0hMH0pLG59fWZ1bmN0aW9uIG1hKGUpe2Zvcih2YXIgdD17fSxuPTAscj1lLmxlbmd0aDtuPHI7bisrKXRbZVtuXS5uYW1lXT1lW25dLnZhbHVlO3JldHVybiB0fXZhciB5YT0vXnhtbG5zOk5TXFxkKy8sZ2E9L15OU1xcZCs6LztmdW5jdGlvbiBfYShlKXtyZXR1cm4gdWEoZS50YWcsZS5hdHRyc0xpc3Quc2xpY2UoKSxlLnBhcmVudCl9dmFyIGJhPVttbyxnbyx7cHJlVHJhbnNmb3JtTm9kZTpmdW5jdGlvbihlLHQpe2lmKFwiaW5wdXRcIj09PWUudGFnKXt2YXIgbixyPWUuYXR0cnNNYXA7aWYoIXJbXCJ2LW1vZGVsXCJdKXJldHVybjtpZigocltcIjp0eXBlXCJdfHxyW1widi1iaW5kOnR5cGVcIl0pJiYobj1JcihlLFwidHlwZVwiKSksci50eXBlfHxufHwhcltcInYtYmluZFwiXXx8KG49XCIoXCIrcltcInYtYmluZFwiXStcIikudHlwZVwiKSxuKXt2YXIgaT1GcihlLFwidi1pZlwiLCEwKSxvPWk/XCImJihcIitpK1wiKVwiOlwiXCIsYT1udWxsIT1GcihlLFwidi1lbHNlXCIsITApLHM9RnIoZSxcInYtZWxzZS1pZlwiLCEwKSxjPV9hKGUpO3BhKGMpLGpyKGMsXCJ0eXBlXCIsXCJjaGVja2JveFwiKSxmYShjLHQpLGMucHJvY2Vzc2VkPSEwLGMuaWY9XCIoXCIrbitcIik9PT0nY2hlY2tib3gnXCIrbyxkYShjLHtleHA6Yy5pZixibG9jazpjfSk7dmFyIHU9X2EoZSk7RnIodSxcInYtZm9yXCIsITApLGpyKHUsXCJ0eXBlXCIsXCJyYWRpb1wiKSxmYSh1LHQpLGRhKGMse2V4cDpcIihcIituK1wiKT09PSdyYWRpbydcIitvLGJsb2NrOnV9KTt2YXIgbD1fYShlKTtyZXR1cm4gRnIobCxcInYtZm9yXCIsITApLGpyKGwsXCI6dHlwZVwiLG4pLGZhKGwsdCksZGEoYyx7ZXhwOmksYmxvY2s6bH0pLGE/Yy5lbHNlPSEwOnMmJihjLmVsc2VpZj1zKSxjfX19fV07dmFyICRhLHdhLENhPXtleHBlY3RIVE1MOiEwLG1vZHVsZXM6YmEsZGlyZWN0aXZlczp7bW9kZWw6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXQudmFsdWUsaT10Lm1vZGlmaWVycyxvPWUudGFnLGE9ZS5hdHRyc01hcC50eXBlO2lmKGUuY29tcG9uZW50KXJldHVybiBIcihlLHIsaSksITE7aWYoXCJzZWxlY3RcIj09PW8pIWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj0ndmFyICQkc2VsZWN0ZWRWYWwgPSBBcnJheS5wcm90b3R5cGUuZmlsdGVyLmNhbGwoJGV2ZW50LnRhcmdldC5vcHRpb25zLGZ1bmN0aW9uKG8pe3JldHVybiBvLnNlbGVjdGVkfSkubWFwKGZ1bmN0aW9uKG8pe3ZhciB2YWwgPSBcIl92YWx1ZVwiIGluIG8gPyBvLl92YWx1ZSA6IG8udmFsdWU7cmV0dXJuICcrKG4mJm4ubnVtYmVyP1wiX24odmFsKVwiOlwidmFsXCIpK1wifSk7XCI7cj1yK1wiIFwiK0JyKHQsXCIkZXZlbnQudGFyZ2V0Lm11bHRpcGxlID8gJCRzZWxlY3RlZFZhbCA6ICQkc2VsZWN0ZWRWYWxbMF1cIiksTXIoZSxcImNoYW5nZVwiLHIsbnVsbCwhMCl9KGUscixpKTtlbHNlIGlmKFwiaW5wdXRcIj09PW8mJlwiY2hlY2tib3hcIj09PWEpIWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uJiZuLm51bWJlcixpPUlyKGUsXCJ2YWx1ZVwiKXx8XCJudWxsXCIsbz1JcihlLFwidHJ1ZS12YWx1ZVwiKXx8XCJ0cnVlXCIsYT1JcihlLFwiZmFsc2UtdmFsdWVcIil8fFwiZmFsc2VcIjtFcihlLFwiY2hlY2tlZFwiLFwiQXJyYXkuaXNBcnJheShcIit0K1wiKT9faShcIit0K1wiLFwiK2krXCIpPi0xXCIrKFwidHJ1ZVwiPT09bz9cIjooXCIrdCtcIilcIjpcIjpfcShcIit0K1wiLFwiK28rXCIpXCIpKSxNcihlLFwiY2hhbmdlXCIsXCJ2YXIgJCRhPVwiK3QrXCIsJCRlbD0kZXZlbnQudGFyZ2V0LCQkYz0kJGVsLmNoZWNrZWQ/KFwiK28rXCIpOihcIithK1wiKTtpZihBcnJheS5pc0FycmF5KCQkYSkpe3ZhciAkJHY9XCIrKHI/XCJfbihcIitpK1wiKVwiOmkpK1wiLCQkaT1faSgkJGEsJCR2KTtpZigkJGVsLmNoZWNrZWQpeyQkaTwwJiYoXCIrQnIodCxcIiQkYS5jb25jYXQoWyQkdl0pXCIpK1wiKX1lbHNleyQkaT4tMSYmKFwiK0JyKHQsXCIkJGEuc2xpY2UoMCwkJGkpLmNvbmNhdCgkJGEuc2xpY2UoJCRpKzEpKVwiKStcIil9fWVsc2V7XCIrQnIodCxcIiQkY1wiKStcIn1cIixudWxsLCEwKX0oZSxyLGkpO2Vsc2UgaWYoXCJpbnB1dFwiPT09byYmXCJyYWRpb1wiPT09YSkhZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4mJm4ubnVtYmVyLGk9SXIoZSxcInZhbHVlXCIpfHxcIm51bGxcIjtFcihlLFwiY2hlY2tlZFwiLFwiX3EoXCIrdCtcIixcIisoaT1yP1wiX24oXCIraStcIilcIjppKStcIilcIiksTXIoZSxcImNoYW5nZVwiLEJyKHQsaSksbnVsbCwhMCl9KGUscixpKTtlbHNlIGlmKFwiaW5wdXRcIj09PW98fFwidGV4dGFyZWFcIj09PW8pIWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1lLmF0dHJzTWFwLnR5cGUsaT1ufHx7fSxvPWkubGF6eSxhPWkubnVtYmVyLHM9aS50cmltLGM9IW8mJlwicmFuZ2VcIiE9PXIsdT1vP1wiY2hhbmdlXCI6XCJyYW5nZVwiPT09cj9XcjpcImlucHV0XCIsbD1cIiRldmVudC50YXJnZXQudmFsdWVcIjtzJiYobD1cIiRldmVudC50YXJnZXQudmFsdWUudHJpbSgpXCIpLGEmJihsPVwiX24oXCIrbCtcIilcIik7dmFyIGY9QnIodCxsKTtjJiYoZj1cImlmKCRldmVudC50YXJnZXQuY29tcG9zaW5nKXJldHVybjtcIitmKSxFcihlLFwidmFsdWVcIixcIihcIit0K1wiKVwiKSxNcihlLHUsZixudWxsLCEwKSwoc3x8YSkmJk1yKGUsXCJibHVyXCIsXCIkZm9yY2VVcGRhdGUoKVwiKX0oZSxyLGkpO2Vsc2UgaWYoIUYuaXNSZXNlcnZlZFRhZyhvKSlyZXR1cm4gSHIoZSxyLGkpLCExO3JldHVybiEwfSx0ZXh0OmZ1bmN0aW9uKGUsdCl7dC52YWx1ZSYmRXIoZSxcInRleHRDb250ZW50XCIsXCJfcyhcIit0LnZhbHVlK1wiKVwiLHQpfSxodG1sOmZ1bmN0aW9uKGUsdCl7dC52YWx1ZSYmRXIoZSxcImlubmVySFRNTFwiLFwiX3MoXCIrdC52YWx1ZStcIilcIix0KX19LGlzUHJlVGFnOmZ1bmN0aW9uKGUpe3JldHVyblwicHJlXCI9PT1lfSxpc1VuYXJ5VGFnOmJvLG11c3RVc2VQcm9wOmpuLGNhbkJlTGVmdE9wZW5UYWc6JG8saXNSZXNlcnZlZFRhZzpXbixnZXRUYWdOYW1lc3BhY2U6Wm4sc3RhdGljS2V5czpmdW5jdGlvbihlKXtyZXR1cm4gZS5yZWR1Y2UoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5jb25jYXQodC5zdGF0aWNLZXlzfHxbXSl9LFtdKS5qb2luKFwiLFwiKX0oYmEpfSx4YT1nKGZ1bmN0aW9uKGUpe3JldHVybiBwKFwidHlwZSx0YWcsYXR0cnNMaXN0LGF0dHJzTWFwLHBsYWluLHBhcmVudCxjaGlsZHJlbixhdHRycyxzdGFydCxlbmQscmF3QXR0cnNNYXBcIisoZT9cIixcIitlOlwiXCIpKX0pO2Z1bmN0aW9uIGthKGUsdCl7ZSYmKCRhPXhhKHQuc3RhdGljS2V5c3x8XCJcIiksd2E9dC5pc1Jlc2VydmVkVGFnfHxULGZ1bmN0aW9uIGUodCl7dC5zdGF0aWM9ZnVuY3Rpb24oZSl7aWYoMj09PWUudHlwZSlyZXR1cm4hMTtpZigzPT09ZS50eXBlKXJldHVybiEwO3JldHVybiEoIWUucHJlJiYoZS5oYXNCaW5kaW5nc3x8ZS5pZnx8ZS5mb3J8fGQoZS50YWcpfHwhd2EoZS50YWcpfHxmdW5jdGlvbihlKXtmb3IoO2UucGFyZW50Oyl7aWYoXCJ0ZW1wbGF0ZVwiIT09KGU9ZS5wYXJlbnQpLnRhZylyZXR1cm4hMTtpZihlLmZvcilyZXR1cm4hMH1yZXR1cm4hMX0oZSl8fCFPYmplY3Qua2V5cyhlKS5ldmVyeSgkYSkpKX0odCk7aWYoMT09PXQudHlwZSl7aWYoIXdhKHQudGFnKSYmXCJzbG90XCIhPT10LnRhZyYmbnVsbD09dC5hdHRyc01hcFtcImlubGluZS10ZW1wbGF0ZVwiXSlyZXR1cm47Zm9yKHZhciBuPTAscj10LmNoaWxkcmVuLmxlbmd0aDtuPHI7bisrKXt2YXIgaT10LmNoaWxkcmVuW25dO2UoaSksaS5zdGF0aWN8fCh0LnN0YXRpYz0hMSl9aWYodC5pZkNvbmRpdGlvbnMpZm9yKHZhciBvPTEsYT10LmlmQ29uZGl0aW9ucy5sZW5ndGg7bzxhO28rKyl7dmFyIHM9dC5pZkNvbmRpdGlvbnNbb10uYmxvY2s7ZShzKSxzLnN0YXRpY3x8KHQuc3RhdGljPSExKX19fShlKSxmdW5jdGlvbiBlKHQsbil7aWYoMT09PXQudHlwZSl7aWYoKHQuc3RhdGljfHx0Lm9uY2UpJiYodC5zdGF0aWNJbkZvcj1uKSx0LnN0YXRpYyYmdC5jaGlsZHJlbi5sZW5ndGgmJigxIT09dC5jaGlsZHJlbi5sZW5ndGh8fDMhPT10LmNoaWxkcmVuWzBdLnR5cGUpKXJldHVybiB2b2lkKHQuc3RhdGljUm9vdD0hMCk7aWYodC5zdGF0aWNSb290PSExLHQuY2hpbGRyZW4pZm9yKHZhciByPTAsaT10LmNoaWxkcmVuLmxlbmd0aDtyPGk7cisrKWUodC5jaGlsZHJlbltyXSxufHwhIXQuZm9yKTtpZih0LmlmQ29uZGl0aW9ucylmb3IodmFyIG89MSxhPXQuaWZDb25kaXRpb25zLmxlbmd0aDtvPGE7bysrKWUodC5pZkNvbmRpdGlvbnNbb10uYmxvY2ssbil9fShlLCExKSl9dmFyIEFhPS9eKFtcXHckX10rfFxcKFteKV0qP1xcKSlcXHMqPT58XmZ1bmN0aW9uXFxzKig/OltcXHckXSspP1xccypcXCgvLE9hPS9cXChbXildKj9cXCk7KiQvLFNhPS9eW0EtWmEtel8kXVtcXHckXSooPzpcXC5bQS1aYS16XyRdW1xcdyRdKnxcXFsnW14nXSo/J118XFxbXCJbXlwiXSo/XCJdfFxcW1xcZCtdfFxcW1tBLVphLXpfJF1bXFx3JF0qXSkqJC8sVGE9e2VzYzoyNyx0YWI6OSxlbnRlcjoxMyxzcGFjZTozMix1cDozOCxsZWZ0OjM3LHJpZ2h0OjM5LGRvd246NDAsZGVsZXRlOls4LDQ2XX0sRWE9e2VzYzpbXCJFc2NcIixcIkVzY2FwZVwiXSx0YWI6XCJUYWJcIixlbnRlcjpcIkVudGVyXCIsc3BhY2U6W1wiIFwiLFwiU3BhY2ViYXJcIl0sdXA6W1wiVXBcIixcIkFycm93VXBcIl0sbGVmdDpbXCJMZWZ0XCIsXCJBcnJvd0xlZnRcIl0scmlnaHQ6W1wiUmlnaHRcIixcIkFycm93UmlnaHRcIl0sZG93bjpbXCJEb3duXCIsXCJBcnJvd0Rvd25cIl0sZGVsZXRlOltcIkJhY2tzcGFjZVwiLFwiRGVsZXRlXCIsXCJEZWxcIl19LE5hPWZ1bmN0aW9uKGUpe3JldHVyblwiaWYoXCIrZStcIilyZXR1cm4gbnVsbDtcIn0samE9e3N0b3A6XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XCIscHJldmVudDpcIiRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1wiLHNlbGY6TmEoXCIkZXZlbnQudGFyZ2V0ICE9PSAkZXZlbnQuY3VycmVudFRhcmdldFwiKSxjdHJsOk5hKFwiISRldmVudC5jdHJsS2V5XCIpLHNoaWZ0Ok5hKFwiISRldmVudC5zaGlmdEtleVwiKSxhbHQ6TmEoXCIhJGV2ZW50LmFsdEtleVwiKSxtZXRhOk5hKFwiISRldmVudC5tZXRhS2V5XCIpLGxlZnQ6TmEoXCInYnV0dG9uJyBpbiAkZXZlbnQgJiYgJGV2ZW50LmJ1dHRvbiAhPT0gMFwiKSxtaWRkbGU6TmEoXCInYnV0dG9uJyBpbiAkZXZlbnQgJiYgJGV2ZW50LmJ1dHRvbiAhPT0gMVwiKSxyaWdodDpOYShcIididXR0b24nIGluICRldmVudCAmJiAkZXZlbnQuYnV0dG9uICE9PSAyXCIpfTtmdW5jdGlvbiBEYShlLHQpe3ZhciBuPXQ/XCJuYXRpdmVPbjpcIjpcIm9uOlwiLHI9XCJcIixpPVwiXCI7Zm9yKHZhciBvIGluIGUpe3ZhciBhPUxhKGVbb10pO2Vbb10mJmVbb10uZHluYW1pYz9pKz1vK1wiLFwiK2ErXCIsXCI6cis9J1wiJytvKydcIjonK2ErXCIsXCJ9cmV0dXJuIHI9XCJ7XCIrci5zbGljZSgwLC0xKStcIn1cIixpP24rXCJfZChcIityK1wiLFtcIitpLnNsaWNlKDAsLTEpK1wiXSlcIjpuK3J9ZnVuY3Rpb24gTGEoZSl7aWYoIWUpcmV0dXJuXCJmdW5jdGlvbigpe31cIjtpZihBcnJheS5pc0FycmF5KGUpKXJldHVyblwiW1wiK2UubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBMYShlKX0pLmpvaW4oXCIsXCIpK1wiXVwiO3ZhciB0PVNhLnRlc3QoZS52YWx1ZSksbj1BYS50ZXN0KGUudmFsdWUpLHI9U2EudGVzdChlLnZhbHVlLnJlcGxhY2UoT2EsXCJcIikpO2lmKGUubW9kaWZpZXJzKXt2YXIgaT1cIlwiLG89XCJcIixhPVtdO2Zvcih2YXIgcyBpbiBlLm1vZGlmaWVycylpZihqYVtzXSlvKz1qYVtzXSxUYVtzXSYmYS5wdXNoKHMpO2Vsc2UgaWYoXCJleGFjdFwiPT09cyl7dmFyIGM9ZS5tb2RpZmllcnM7bys9TmEoW1wiY3RybFwiLFwic2hpZnRcIixcImFsdFwiLFwibWV0YVwiXS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIWNbZV19KS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuXCIkZXZlbnQuXCIrZStcIktleVwifSkuam9pbihcInx8XCIpKX1lbHNlIGEucHVzaChzKTtyZXR1cm4gYS5sZW5ndGgmJihpKz1mdW5jdGlvbihlKXtyZXR1cm5cImlmKCEkZXZlbnQudHlwZS5pbmRleE9mKCdrZXknKSYmXCIrZS5tYXAoTWEpLmpvaW4oXCImJlwiKStcIilyZXR1cm4gbnVsbDtcIn0oYSkpLG8mJihpKz1vKSxcImZ1bmN0aW9uKCRldmVudCl7XCIraSsodD9cInJldHVybiBcIitlLnZhbHVlK1wiKCRldmVudClcIjpuP1wicmV0dXJuIChcIitlLnZhbHVlK1wiKSgkZXZlbnQpXCI6cj9cInJldHVybiBcIitlLnZhbHVlOmUudmFsdWUpK1wifVwifXJldHVybiB0fHxuP2UudmFsdWU6XCJmdW5jdGlvbigkZXZlbnQpe1wiKyhyP1wicmV0dXJuIFwiK2UudmFsdWU6ZS52YWx1ZSkrXCJ9XCJ9ZnVuY3Rpb24gTWEoZSl7dmFyIHQ9cGFyc2VJbnQoZSwxMCk7aWYodClyZXR1cm5cIiRldmVudC5rZXlDb2RlIT09XCIrdDt2YXIgbj1UYVtlXSxyPUVhW2VdO3JldHVyblwiX2soJGV2ZW50LmtleUNvZGUsXCIrSlNPTi5zdHJpbmdpZnkoZSkrXCIsXCIrSlNPTi5zdHJpbmdpZnkobikrXCIsJGV2ZW50LmtleSxcIitKU09OLnN0cmluZ2lmeShyKStcIilcIn12YXIgSWE9e29uOmZ1bmN0aW9uKGUsdCl7ZS53cmFwTGlzdGVuZXJzPWZ1bmN0aW9uKGUpe3JldHVyblwiX2coXCIrZStcIixcIit0LnZhbHVlK1wiKVwifX0sYmluZDpmdW5jdGlvbihlLHQpe2Uud3JhcERhdGE9ZnVuY3Rpb24obil7cmV0dXJuXCJfYihcIituK1wiLCdcIitlLnRhZytcIicsXCIrdC52YWx1ZStcIixcIisodC5tb2RpZmllcnMmJnQubW9kaWZpZXJzLnByb3A/XCJ0cnVlXCI6XCJmYWxzZVwiKSsodC5tb2RpZmllcnMmJnQubW9kaWZpZXJzLnN5bmM/XCIsdHJ1ZVwiOlwiXCIpK1wiKVwifX0sY2xvYWs6U30sRmE9ZnVuY3Rpb24oZSl7dGhpcy5vcHRpb25zPWUsdGhpcy53YXJuPWUud2Fybnx8U3IsdGhpcy50cmFuc2Zvcm1zPVRyKGUubW9kdWxlcyxcInRyYW5zZm9ybUNvZGVcIiksdGhpcy5kYXRhR2VuRm5zPVRyKGUubW9kdWxlcyxcImdlbkRhdGFcIiksdGhpcy5kaXJlY3RpdmVzPUEoQSh7fSxJYSksZS5kaXJlY3RpdmVzKTt2YXIgdD1lLmlzUmVzZXJ2ZWRUYWd8fFQ7dGhpcy5tYXliZUNvbXBvbmVudD1mdW5jdGlvbihlKXtyZXR1cm4hIWUuY29tcG9uZW50fHwhdChlLnRhZyl9LHRoaXMub25jZUlkPTAsdGhpcy5zdGF0aWNSZW5kZXJGbnM9W10sdGhpcy5wcmU9ITF9O2Z1bmN0aW9uIFBhKGUsdCl7dmFyIG49bmV3IEZhKHQpO3JldHVybntyZW5kZXI6XCJ3aXRoKHRoaXMpe3JldHVybiBcIisoZT9SYShlLG4pOidfYyhcImRpdlwiKScpK1wifVwiLHN0YXRpY1JlbmRlckZuczpuLnN0YXRpY1JlbmRlckZuc319ZnVuY3Rpb24gUmEoZSx0KXtpZihlLnBhcmVudCYmKGUucHJlPWUucHJlfHxlLnBhcmVudC5wcmUpLGUuc3RhdGljUm9vdCYmIWUuc3RhdGljUHJvY2Vzc2VkKXJldHVybiBIYShlLHQpO2lmKGUub25jZSYmIWUub25jZVByb2Nlc3NlZClyZXR1cm4gQmEoZSx0KTtpZihlLmZvciYmIWUuZm9yUHJvY2Vzc2VkKXJldHVybiB6YShlLHQpO2lmKGUuaWYmJiFlLmlmUHJvY2Vzc2VkKXJldHVybiBVYShlLHQpO2lmKFwidGVtcGxhdGVcIiE9PWUudGFnfHxlLnNsb3RUYXJnZXR8fHQucHJlKXtpZihcInNsb3RcIj09PWUudGFnKXJldHVybiBmdW5jdGlvbihlLHQpe3ZhciBuPWUuc2xvdE5hbWV8fCdcImRlZmF1bHRcIicscj1xYShlLHQpLGk9XCJfdChcIituKyhyP1wiLFwiK3I6XCJcIiksbz1lLmF0dHJzfHxlLmR5bmFtaWNBdHRycz9HYSgoZS5hdHRyc3x8W10pLmNvbmNhdChlLmR5bmFtaWNBdHRyc3x8W10pLm1hcChmdW5jdGlvbihlKXtyZXR1cm57bmFtZTpiKGUubmFtZSksdmFsdWU6ZS52YWx1ZSxkeW5hbWljOmUuZHluYW1pY319KSk6bnVsbCxhPWUuYXR0cnNNYXBbXCJ2LWJpbmRcIl07IW8mJiFhfHxyfHwoaSs9XCIsbnVsbFwiKTtvJiYoaSs9XCIsXCIrbyk7YSYmKGkrPShvP1wiXCI6XCIsbnVsbFwiKStcIixcIithKTtyZXR1cm4gaStcIilcIn0oZSx0KTt2YXIgbjtpZihlLmNvbXBvbmVudCluPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10LmlubGluZVRlbXBsYXRlP251bGw6cWEodCxuLCEwKTtyZXR1cm5cIl9jKFwiK2UrXCIsXCIrVmEodCxuKSsocj9cIixcIityOlwiXCIpK1wiKVwifShlLmNvbXBvbmVudCxlLHQpO2Vsc2V7dmFyIHI7KCFlLnBsYWlufHxlLnByZSYmdC5tYXliZUNvbXBvbmVudChlKSkmJihyPVZhKGUsdCkpO3ZhciBpPWUuaW5saW5lVGVtcGxhdGU/bnVsbDpxYShlLHQsITApO249XCJfYygnXCIrZS50YWcrXCInXCIrKHI/XCIsXCIrcjpcIlwiKSsoaT9cIixcIitpOlwiXCIpK1wiKVwifWZvcih2YXIgbz0wO288dC50cmFuc2Zvcm1zLmxlbmd0aDtvKyspbj10LnRyYW5zZm9ybXNbb10oZSxuKTtyZXR1cm4gbn1yZXR1cm4gcWEoZSx0KXx8XCJ2b2lkIDBcIn1mdW5jdGlvbiBIYShlLHQpe2Uuc3RhdGljUHJvY2Vzc2VkPSEwO3ZhciBuPXQucHJlO3JldHVybiBlLnByZSYmKHQucHJlPWUucHJlKSx0LnN0YXRpY1JlbmRlckZucy5wdXNoKFwid2l0aCh0aGlzKXtyZXR1cm4gXCIrUmEoZSx0KStcIn1cIiksdC5wcmU9bixcIl9tKFwiKyh0LnN0YXRpY1JlbmRlckZucy5sZW5ndGgtMSkrKGUuc3RhdGljSW5Gb3I/XCIsdHJ1ZVwiOlwiXCIpK1wiKVwifWZ1bmN0aW9uIEJhKGUsdCl7aWYoZS5vbmNlUHJvY2Vzc2VkPSEwLGUuaWYmJiFlLmlmUHJvY2Vzc2VkKXJldHVybiBVYShlLHQpO2lmKGUuc3RhdGljSW5Gb3Ipe2Zvcih2YXIgbj1cIlwiLHI9ZS5wYXJlbnQ7cjspe2lmKHIuZm9yKXtuPXIua2V5O2JyZWFrfXI9ci5wYXJlbnR9cmV0dXJuIG4/XCJfbyhcIitSYShlLHQpK1wiLFwiK3Qub25jZUlkKysrXCIsXCIrbitcIilcIjpSYShlLHQpfXJldHVybiBIYShlLHQpfWZ1bmN0aW9uIFVhKGUsdCxuLHIpe3JldHVybiBlLmlmUHJvY2Vzc2VkPSEwLGZ1bmN0aW9uIGUodCxuLHIsaSl7aWYoIXQubGVuZ3RoKXJldHVybiBpfHxcIl9lKClcIjt2YXIgbz10LnNoaWZ0KCk7cmV0dXJuIG8uZXhwP1wiKFwiK28uZXhwK1wiKT9cIithKG8uYmxvY2spK1wiOlwiK2UodCxuLHIsaSk6XCJcIithKG8uYmxvY2spO2Z1bmN0aW9uIGEoZSl7cmV0dXJuIHI/cihlLG4pOmUub25jZT9CYShlLG4pOlJhKGUsbil9fShlLmlmQ29uZGl0aW9ucy5zbGljZSgpLHQsbixyKX1mdW5jdGlvbiB6YShlLHQsbixyKXt2YXIgaT1lLmZvcixvPWUuYWxpYXMsYT1lLml0ZXJhdG9yMT9cIixcIitlLml0ZXJhdG9yMTpcIlwiLHM9ZS5pdGVyYXRvcjI/XCIsXCIrZS5pdGVyYXRvcjI6XCJcIjtyZXR1cm4gZS5mb3JQcm9jZXNzZWQ9ITAsKHJ8fFwiX2xcIikrXCIoKFwiK2krXCIpLGZ1bmN0aW9uKFwiK28rYStzK1wiKXtyZXR1cm4gXCIrKG58fFJhKShlLHQpK1wifSlcIn1mdW5jdGlvbiBWYShlLHQpe3ZhciBuPVwie1wiLHI9ZnVuY3Rpb24oZSx0KXt2YXIgbj1lLmRpcmVjdGl2ZXM7aWYoIW4pcmV0dXJuO3ZhciByLGksbyxhLHM9XCJkaXJlY3RpdmVzOltcIixjPSExO2ZvcihyPTAsaT1uLmxlbmd0aDtyPGk7cisrKXtvPW5bcl0sYT0hMDt2YXIgdT10LmRpcmVjdGl2ZXNbby5uYW1lXTt1JiYoYT0hIXUoZSxvLHQud2FybikpLGEmJihjPSEwLHMrPSd7bmFtZTpcIicrby5uYW1lKydcIixyYXdOYW1lOlwiJytvLnJhd05hbWUrJ1wiJysoby52YWx1ZT9cIix2YWx1ZTooXCIrby52YWx1ZStcIiksZXhwcmVzc2lvbjpcIitKU09OLnN0cmluZ2lmeShvLnZhbHVlKTpcIlwiKSsoby5hcmc/XCIsYXJnOlwiKyhvLmlzRHluYW1pY0FyZz9vLmFyZzonXCInK28uYXJnKydcIicpOlwiXCIpKyhvLm1vZGlmaWVycz9cIixtb2RpZmllcnM6XCIrSlNPTi5zdHJpbmdpZnkoby5tb2RpZmllcnMpOlwiXCIpK1wifSxcIil9aWYoYylyZXR1cm4gcy5zbGljZSgwLC0xKStcIl1cIn0oZSx0KTtyJiYobis9citcIixcIiksZS5rZXkmJihuKz1cImtleTpcIitlLmtleStcIixcIiksZS5yZWYmJihuKz1cInJlZjpcIitlLnJlZitcIixcIiksZS5yZWZJbkZvciYmKG4rPVwicmVmSW5Gb3I6dHJ1ZSxcIiksZS5wcmUmJihuKz1cInByZTp0cnVlLFwiKSxlLmNvbXBvbmVudCYmKG4rPSd0YWc6XCInK2UudGFnKydcIiwnKTtmb3IodmFyIGk9MDtpPHQuZGF0YUdlbkZucy5sZW5ndGg7aSsrKW4rPXQuZGF0YUdlbkZuc1tpXShlKTtpZihlLmF0dHJzJiYobis9XCJhdHRyczpcIitHYShlLmF0dHJzKStcIixcIiksZS5wcm9wcyYmKG4rPVwiZG9tUHJvcHM6XCIrR2EoZS5wcm9wcykrXCIsXCIpLGUuZXZlbnRzJiYobis9RGEoZS5ldmVudHMsITEpK1wiLFwiKSxlLm5hdGl2ZUV2ZW50cyYmKG4rPURhKGUubmF0aXZlRXZlbnRzLCEwKStcIixcIiksZS5zbG90VGFyZ2V0JiYhZS5zbG90U2NvcGUmJihuKz1cInNsb3Q6XCIrZS5zbG90VGFyZ2V0K1wiLFwiKSxlLnNjb3BlZFNsb3RzJiYobis9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPWUuZm9yfHxPYmplY3Qua2V5cyh0KS5zb21lKGZ1bmN0aW9uKGUpe3ZhciBuPXRbZV07cmV0dXJuIG4uc2xvdFRhcmdldER5bmFtaWN8fG4uaWZ8fG4uZm9yfHxLYShuKX0pLGk9ISFlLmlmO2lmKCFyKWZvcih2YXIgbz1lLnBhcmVudDtvOyl7aWYoby5zbG90U2NvcGUmJm8uc2xvdFNjb3BlIT09Y2F8fG8uZm9yKXtyPSEwO2JyZWFrfW8uaWYmJihpPSEwKSxvPW8ucGFyZW50fXZhciBhPU9iamVjdC5rZXlzKHQpLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gSmEodFtlXSxuKX0pLmpvaW4oXCIsXCIpO3JldHVyblwic2NvcGVkU2xvdHM6X3UoW1wiK2ErXCJdXCIrKHI/XCIsbnVsbCx0cnVlXCI6XCJcIikrKCFyJiZpP1wiLG51bGwsZmFsc2UsXCIrZnVuY3Rpb24oZSl7dmFyIHQ9NTM4MSxuPWUubGVuZ3RoO2Zvcig7bjspdD0zMyp0XmUuY2hhckNvZGVBdCgtLW4pO3JldHVybiB0Pj4+MH0oYSk6XCJcIikrXCIpXCJ9KGUsZS5zY29wZWRTbG90cyx0KStcIixcIiksZS5tb2RlbCYmKG4rPVwibW9kZWw6e3ZhbHVlOlwiK2UubW9kZWwudmFsdWUrXCIsY2FsbGJhY2s6XCIrZS5tb2RlbC5jYWxsYmFjaytcIixleHByZXNzaW9uOlwiK2UubW9kZWwuZXhwcmVzc2lvbitcIn0sXCIpLGUuaW5saW5lVGVtcGxhdGUpe3ZhciBvPWZ1bmN0aW9uKGUsdCl7dmFyIG49ZS5jaGlsZHJlblswXTtpZihuJiYxPT09bi50eXBlKXt2YXIgcj1QYShuLHQub3B0aW9ucyk7cmV0dXJuXCJpbmxpbmVUZW1wbGF0ZTp7cmVuZGVyOmZ1bmN0aW9uKCl7XCIrci5yZW5kZXIrXCJ9LHN0YXRpY1JlbmRlckZuczpbXCIrci5zdGF0aWNSZW5kZXJGbnMubWFwKGZ1bmN0aW9uKGUpe3JldHVyblwiZnVuY3Rpb24oKXtcIitlK1wifVwifSkuam9pbihcIixcIikrXCJdfVwifX0oZSx0KTtvJiYobis9bytcIixcIil9cmV0dXJuIG49bi5yZXBsYWNlKC8sJC8sXCJcIikrXCJ9XCIsZS5keW5hbWljQXR0cnMmJihuPVwiX2IoXCIrbisnLFwiJytlLnRhZysnXCIsJytHYShlLmR5bmFtaWNBdHRycykrXCIpXCIpLGUud3JhcERhdGEmJihuPWUud3JhcERhdGEobikpLGUud3JhcExpc3RlbmVycyYmKG49ZS53cmFwTGlzdGVuZXJzKG4pKSxufWZ1bmN0aW9uIEthKGUpe3JldHVybiAxPT09ZS50eXBlJiYoXCJzbG90XCI9PT1lLnRhZ3x8ZS5jaGlsZHJlbi5zb21lKEthKSl9ZnVuY3Rpb24gSmEoZSx0KXt2YXIgbj1lLmF0dHJzTWFwW1wic2xvdC1zY29wZVwiXTtpZihlLmlmJiYhZS5pZlByb2Nlc3NlZCYmIW4pcmV0dXJuIFVhKGUsdCxKYSxcIm51bGxcIik7aWYoZS5mb3ImJiFlLmZvclByb2Nlc3NlZClyZXR1cm4gemEoZSx0LEphKTt2YXIgcj1lLnNsb3RTY29wZT09PWNhP1wiXCI6U3RyaW5nKGUuc2xvdFNjb3BlKSxpPVwiZnVuY3Rpb24oXCIrcitcIil7cmV0dXJuIFwiKyhcInRlbXBsYXRlXCI9PT1lLnRhZz9lLmlmJiZuP1wiKFwiK2UuaWYrXCIpP1wiKyhxYShlLHQpfHxcInVuZGVmaW5lZFwiKStcIjp1bmRlZmluZWRcIjpxYShlLHQpfHxcInVuZGVmaW5lZFwiOlJhKGUsdCkpK1wifVwiLG89cj9cIlwiOlwiLHByb3h5OnRydWVcIjtyZXR1cm5cIntrZXk6XCIrKGUuc2xvdFRhcmdldHx8J1wiZGVmYXVsdFwiJykrXCIsZm46XCIraStvK1wifVwifWZ1bmN0aW9uIHFhKGUsdCxuLHIsaSl7dmFyIG89ZS5jaGlsZHJlbjtpZihvLmxlbmd0aCl7dmFyIGE9b1swXTtpZigxPT09by5sZW5ndGgmJmEuZm9yJiZcInRlbXBsYXRlXCIhPT1hLnRhZyYmXCJzbG90XCIhPT1hLnRhZyl7dmFyIHM9bj90Lm1heWJlQ29tcG9uZW50KGEpP1wiLDFcIjpcIiwwXCI6XCJcIjtyZXR1cm5cIlwiKyhyfHxSYSkoYSx0KStzfXZhciBjPW4/ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49MCxyPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBpPWVbcl07aWYoMT09PWkudHlwZSl7aWYoV2EoaSl8fGkuaWZDb25kaXRpb25zJiZpLmlmQ29uZGl0aW9ucy5zb21lKGZ1bmN0aW9uKGUpe3JldHVybiBXYShlLmJsb2NrKX0pKXtuPTI7YnJlYWt9KHQoaSl8fGkuaWZDb25kaXRpb25zJiZpLmlmQ29uZGl0aW9ucy5zb21lKGZ1bmN0aW9uKGUpe3JldHVybiB0KGUuYmxvY2spfSkpJiYobj0xKX19cmV0dXJuIG59KG8sdC5tYXliZUNvbXBvbmVudCk6MCx1PWl8fFphO3JldHVyblwiW1wiK28ubWFwKGZ1bmN0aW9uKGUpe3JldHVybiB1KGUsdCl9KS5qb2luKFwiLFwiKStcIl1cIisoYz9cIixcIitjOlwiXCIpfX1mdW5jdGlvbiBXYShlKXtyZXR1cm4gdm9pZCAwIT09ZS5mb3J8fFwidGVtcGxhdGVcIj09PWUudGFnfHxcInNsb3RcIj09PWUudGFnfWZ1bmN0aW9uIFphKGUsdCl7cmV0dXJuIDE9PT1lLnR5cGU/UmEoZSx0KTozPT09ZS50eXBlJiZlLmlzQ29tbWVudD8ocj1lLFwiX2UoXCIrSlNPTi5zdHJpbmdpZnkoci50ZXh0KStcIilcIik6XCJfdihcIisoMj09PShuPWUpLnR5cGU/bi5leHByZXNzaW9uOlhhKEpTT04uc3RyaW5naWZ5KG4udGV4dCkpKStcIilcIjt2YXIgbixyfWZ1bmN0aW9uIEdhKGUpe2Zvcih2YXIgdD1cIlwiLG49XCJcIixyPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBpPWVbcl0sbz1YYShpLnZhbHVlKTtpLmR5bmFtaWM/bis9aS5uYW1lK1wiLFwiK28rXCIsXCI6dCs9J1wiJytpLm5hbWUrJ1wiOicrbytcIixcIn1yZXR1cm4gdD1cIntcIit0LnNsaWNlKDAsLTEpK1wifVwiLG4/XCJfZChcIit0K1wiLFtcIituLnNsaWNlKDAsLTEpK1wiXSlcIjp0fWZ1bmN0aW9uIFhhKGUpe3JldHVybiBlLnJlcGxhY2UoL1xcdTIwMjgvZyxcIlxcXFx1MjAyOFwiKS5yZXBsYWNlKC9cXHUyMDI5L2csXCJcXFxcdTIwMjlcIil9bmV3IFJlZ0V4cChcIlxcXFxiXCIrXCJkbyxpZixmb3IsbGV0LG5ldyx0cnksdmFyLGNhc2UsZWxzZSx3aXRoLGF3YWl0LGJyZWFrLGNhdGNoLGNsYXNzLGNvbnN0LHN1cGVyLHRocm93LHdoaWxlLHlpZWxkLGRlbGV0ZSxleHBvcnQsaW1wb3J0LHJldHVybixzd2l0Y2gsZGVmYXVsdCxleHRlbmRzLGZpbmFsbHksY29udGludWUsZGVidWdnZXIsZnVuY3Rpb24sYXJndW1lbnRzXCIuc3BsaXQoXCIsXCIpLmpvaW4oXCJcXFxcYnxcXFxcYlwiKStcIlxcXFxiXCIpO2Z1bmN0aW9uIFlhKGUsdCl7dHJ5e3JldHVybiBuZXcgRnVuY3Rpb24oZSl9Y2F0Y2gobil7cmV0dXJuIHQucHVzaCh7ZXJyOm4sY29kZTplfSksU319ZnVuY3Rpb24gUWEoZSl7dmFyIHQ9T2JqZWN0LmNyZWF0ZShudWxsKTtyZXR1cm4gZnVuY3Rpb24obixyLGkpeyhyPUEoe30scikpLndhcm47ZGVsZXRlIHIud2Fybjt2YXIgbz1yLmRlbGltaXRlcnM/U3RyaW5nKHIuZGVsaW1pdGVycykrbjpuO2lmKHRbb10pcmV0dXJuIHRbb107dmFyIGE9ZShuLHIpLHM9e30sYz1bXTtyZXR1cm4gcy5yZW5kZXI9WWEoYS5yZW5kZXIsYykscy5zdGF0aWNSZW5kZXJGbnM9YS5zdGF0aWNSZW5kZXJGbnMubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBZYShlLGMpfSksdFtvXT1zfX12YXIgZXMsdHMsbnM9KGVzPWZ1bmN0aW9uKGUsdCl7dmFyIG49bGEoZS50cmltKCksdCk7ITEhPT10Lm9wdGltaXplJiZrYShuLHQpO3ZhciByPVBhKG4sdCk7cmV0dXJue2FzdDpuLHJlbmRlcjpyLnJlbmRlcixzdGF0aWNSZW5kZXJGbnM6ci5zdGF0aWNSZW5kZXJGbnN9fSxmdW5jdGlvbihlKXtmdW5jdGlvbiB0KHQsbil7dmFyIHI9T2JqZWN0LmNyZWF0ZShlKSxpPVtdLG89W107aWYobilmb3IodmFyIGEgaW4gbi5tb2R1bGVzJiYoci5tb2R1bGVzPShlLm1vZHVsZXN8fFtdKS5jb25jYXQobi5tb2R1bGVzKSksbi5kaXJlY3RpdmVzJiYoci5kaXJlY3RpdmVzPUEoT2JqZWN0LmNyZWF0ZShlLmRpcmVjdGl2ZXN8fG51bGwpLG4uZGlyZWN0aXZlcykpLG4pXCJtb2R1bGVzXCIhPT1hJiZcImRpcmVjdGl2ZXNcIiE9PWEmJihyW2FdPW5bYV0pO3Iud2Fybj1mdW5jdGlvbihlLHQsbil7KG4/bzppKS5wdXNoKGUpfTt2YXIgcz1lcyh0LnRyaW0oKSxyKTtyZXR1cm4gcy5lcnJvcnM9aSxzLnRpcHM9byxzfXJldHVybntjb21waWxlOnQsY29tcGlsZVRvRnVuY3Rpb25zOlFhKHQpfX0pKENhKSxycz0obnMuY29tcGlsZSxucy5jb21waWxlVG9GdW5jdGlvbnMpO2Z1bmN0aW9uIGlzKGUpe3JldHVybih0cz10c3x8ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKSkuaW5uZXJIVE1MPWU/JzxhIGhyZWY9XCJcXG5cIi8+JzonPGRpdiBhPVwiXFxuXCIvPicsdHMuaW5uZXJIVE1MLmluZGV4T2YoXCImIzEwO1wiKT4wfXZhciBvcz0hIXomJmlzKCExKSxhcz0hIXomJmlzKCEwKSxzcz1nKGZ1bmN0aW9uKGUpe3ZhciB0PVluKGUpO3JldHVybiB0JiZ0LmlubmVySFRNTH0pLGNzPXduLnByb3RvdHlwZS4kbW91bnQ7d24ucHJvdG90eXBlLiRtb3VudD1mdW5jdGlvbihlLHQpe2lmKChlPWUmJlluKGUpKT09PWRvY3VtZW50LmJvZHl8fGU9PT1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpcmV0dXJuIHRoaXM7dmFyIG49dGhpcy4kb3B0aW9ucztpZighbi5yZW5kZXIpe3ZhciByPW4udGVtcGxhdGU7aWYocilpZihcInN0cmluZ1wiPT10eXBlb2YgcilcIiNcIj09PXIuY2hhckF0KDApJiYocj1zcyhyKSk7ZWxzZXtpZighci5ub2RlVHlwZSlyZXR1cm4gdGhpcztyPXIuaW5uZXJIVE1MfWVsc2UgZSYmKHI9ZnVuY3Rpb24oZSl7aWYoZS5vdXRlckhUTUwpcmV0dXJuIGUub3V0ZXJIVE1MO3ZhciB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7cmV0dXJuIHQuYXBwZW5kQ2hpbGQoZS5jbG9uZU5vZGUoITApKSx0LmlubmVySFRNTH0oZSkpO2lmKHIpe3ZhciBpPXJzKHIse291dHB1dFNvdXJjZVJhbmdlOiExLHNob3VsZERlY29kZU5ld2xpbmVzOm9zLHNob3VsZERlY29kZU5ld2xpbmVzRm9ySHJlZjphcyxkZWxpbWl0ZXJzOm4uZGVsaW1pdGVycyxjb21tZW50czpuLmNvbW1lbnRzfSx0aGlzKSxvPWkucmVuZGVyLGE9aS5zdGF0aWNSZW5kZXJGbnM7bi5yZW5kZXI9byxuLnN0YXRpY1JlbmRlckZucz1hfX1yZXR1cm4gY3MuY2FsbCh0aGlzLGUsdCl9LHduLmNvbXBpbGU9cnMsbW9kdWxlLmV4cG9ydHM9d247IiwiaWYgKFwicHJvZHVjdGlvblwiID09PSAncHJvZHVjdGlvbicpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL3Z1ZS5ydW50aW1lLmNvbW1vbi5wcm9kLmpzJylcbn0gZWxzZSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi92dWUucnVudGltZS5jb21tb24uZGV2LmpzJylcbn1cbiIsIi8qIVxuICogVnVlLmpzIHYyLjYuMTBcbiAqIChjKSAyMDE0LTIwMTkgRXZhbiBZb3VcbiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbiAqL1xuXCJ1c2Ugc3RyaWN0XCI7dmFyIHQ9T2JqZWN0LmZyZWV6ZSh7fSk7ZnVuY3Rpb24gZSh0KXtyZXR1cm4gbnVsbD09dH1mdW5jdGlvbiBuKHQpe3JldHVybiBudWxsIT10fWZ1bmN0aW9uIHIodCl7cmV0dXJuITA9PT10fWZ1bmN0aW9uIG8odCl7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIHR8fFwibnVtYmVyXCI9PXR5cGVvZiB0fHxcInN5bWJvbFwiPT10eXBlb2YgdHx8XCJib29sZWFuXCI9PXR5cGVvZiB0fWZ1bmN0aW9uIGkodCl7cmV0dXJuIG51bGwhPT10JiZcIm9iamVjdFwiPT10eXBlb2YgdH12YXIgYT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO2Z1bmN0aW9uIHModCl7cmV0dXJuXCJbb2JqZWN0IE9iamVjdF1cIj09PWEuY2FsbCh0KX1mdW5jdGlvbiBjKHQpe3ZhciBlPXBhcnNlRmxvYXQoU3RyaW5nKHQpKTtyZXR1cm4gZT49MCYmTWF0aC5mbG9vcihlKT09PWUmJmlzRmluaXRlKHQpfWZ1bmN0aW9uIHUodCl7cmV0dXJuIG4odCkmJlwiZnVuY3Rpb25cIj09dHlwZW9mIHQudGhlbiYmXCJmdW5jdGlvblwiPT10eXBlb2YgdC5jYXRjaH1mdW5jdGlvbiBsKHQpe3JldHVybiBudWxsPT10P1wiXCI6QXJyYXkuaXNBcnJheSh0KXx8cyh0KSYmdC50b1N0cmluZz09PWE/SlNPTi5zdHJpbmdpZnkodCxudWxsLDIpOlN0cmluZyh0KX1mdW5jdGlvbiBmKHQpe3ZhciBlPXBhcnNlRmxvYXQodCk7cmV0dXJuIGlzTmFOKGUpP3Q6ZX1mdW5jdGlvbiBwKHQsZSl7Zm9yKHZhciBuPU9iamVjdC5jcmVhdGUobnVsbCkscj10LnNwbGl0KFwiLFwiKSxvPTA7bzxyLmxlbmd0aDtvKyspbltyW29dXT0hMDtyZXR1cm4gZT9mdW5jdGlvbih0KXtyZXR1cm4gblt0LnRvTG93ZXJDYXNlKCldfTpmdW5jdGlvbih0KXtyZXR1cm4gblt0XX19dmFyIGQ9cChcImtleSxyZWYsc2xvdCxzbG90LXNjb3BlLGlzXCIpO2Z1bmN0aW9uIHYodCxlKXtpZih0Lmxlbmd0aCl7dmFyIG49dC5pbmRleE9mKGUpO2lmKG4+LTEpcmV0dXJuIHQuc3BsaWNlKG4sMSl9fXZhciBoPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7ZnVuY3Rpb24gbSh0LGUpe3JldHVybiBoLmNhbGwodCxlKX1mdW5jdGlvbiB5KHQpe3ZhciBlPU9iamVjdC5jcmVhdGUobnVsbCk7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiBlW25dfHwoZVtuXT10KG4pKX19dmFyIGc9Ly0oXFx3KS9nLF89eShmdW5jdGlvbih0KXtyZXR1cm4gdC5yZXBsYWNlKGcsZnVuY3Rpb24odCxlKXtyZXR1cm4gZT9lLnRvVXBwZXJDYXNlKCk6XCJcIn0pfSksYj15KGZ1bmN0aW9uKHQpe3JldHVybiB0LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK3Quc2xpY2UoMSl9KSxDPS9cXEIoW0EtWl0pL2csJD15KGZ1bmN0aW9uKHQpe3JldHVybiB0LnJlcGxhY2UoQyxcIi0kMVwiKS50b0xvd2VyQ2FzZSgpfSk7dmFyIHc9RnVuY3Rpb24ucHJvdG90eXBlLmJpbmQ/ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5iaW5kKGUpfTpmdW5jdGlvbih0LGUpe2Z1bmN0aW9uIG4obil7dmFyIHI9YXJndW1lbnRzLmxlbmd0aDtyZXR1cm4gcj9yPjE/dC5hcHBseShlLGFyZ3VtZW50cyk6dC5jYWxsKGUsbik6dC5jYWxsKGUpfXJldHVybiBuLl9sZW5ndGg9dC5sZW5ndGgsbn07ZnVuY3Rpb24gQSh0LGUpe2U9ZXx8MDtmb3IodmFyIG49dC5sZW5ndGgtZSxyPW5ldyBBcnJheShuKTtuLS07KXJbbl09dFtuK2VdO3JldHVybiByfWZ1bmN0aW9uIHgodCxlKXtmb3IodmFyIG4gaW4gZSl0W25dPWVbbl07cmV0dXJuIHR9ZnVuY3Rpb24gTyh0KXtmb3IodmFyIGU9e30sbj0wO248dC5sZW5ndGg7bisrKXRbbl0mJngoZSx0W25dKTtyZXR1cm4gZX1mdW5jdGlvbiBrKHQsZSxuKXt9dmFyIFM9ZnVuY3Rpb24odCxlLG4pe3JldHVybiExfSxFPWZ1bmN0aW9uKHQpe3JldHVybiB0fTtmdW5jdGlvbiBqKHQsZSl7aWYodD09PWUpcmV0dXJuITA7dmFyIG49aSh0KSxyPWkoZSk7aWYoIW58fCFyKXJldHVybiFuJiYhciYmU3RyaW5nKHQpPT09U3RyaW5nKGUpO3RyeXt2YXIgbz1BcnJheS5pc0FycmF5KHQpLGE9QXJyYXkuaXNBcnJheShlKTtpZihvJiZhKXJldHVybiB0Lmxlbmd0aD09PWUubGVuZ3RoJiZ0LmV2ZXJ5KGZ1bmN0aW9uKHQsbil7cmV0dXJuIGoodCxlW25dKX0pO2lmKHQgaW5zdGFuY2VvZiBEYXRlJiZlIGluc3RhbmNlb2YgRGF0ZSlyZXR1cm4gdC5nZXRUaW1lKCk9PT1lLmdldFRpbWUoKTtpZihvfHxhKXJldHVybiExO3ZhciBzPU9iamVjdC5rZXlzKHQpLGM9T2JqZWN0LmtleXMoZSk7cmV0dXJuIHMubGVuZ3RoPT09Yy5sZW5ndGgmJnMuZXZlcnkoZnVuY3Rpb24obil7cmV0dXJuIGoodFtuXSxlW25dKX0pfWNhdGNoKHQpe3JldHVybiExfX1mdW5jdGlvbiBUKHQsZSl7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspaWYoaih0W25dLGUpKXJldHVybiBuO3JldHVybi0xfWZ1bmN0aW9uIEkodCl7dmFyIGU9ITE7cmV0dXJuIGZ1bmN0aW9uKCl7ZXx8KGU9ITAsdC5hcHBseSh0aGlzLGFyZ3VtZW50cykpfX12YXIgRD1cImRhdGEtc2VydmVyLXJlbmRlcmVkXCIsTj1bXCJjb21wb25lbnRcIixcImRpcmVjdGl2ZVwiLFwiZmlsdGVyXCJdLFA9W1wiYmVmb3JlQ3JlYXRlXCIsXCJjcmVhdGVkXCIsXCJiZWZvcmVNb3VudFwiLFwibW91bnRlZFwiLFwiYmVmb3JlVXBkYXRlXCIsXCJ1cGRhdGVkXCIsXCJiZWZvcmVEZXN0cm95XCIsXCJkZXN0cm95ZWRcIixcImFjdGl2YXRlZFwiLFwiZGVhY3RpdmF0ZWRcIixcImVycm9yQ2FwdHVyZWRcIixcInNlcnZlclByZWZldGNoXCJdLEw9e29wdGlvbk1lcmdlU3RyYXRlZ2llczpPYmplY3QuY3JlYXRlKG51bGwpLHNpbGVudDohMSxwcm9kdWN0aW9uVGlwOiExLGRldnRvb2xzOiExLHBlcmZvcm1hbmNlOiExLGVycm9ySGFuZGxlcjpudWxsLHdhcm5IYW5kbGVyOm51bGwsaWdub3JlZEVsZW1lbnRzOltdLGtleUNvZGVzOk9iamVjdC5jcmVhdGUobnVsbCksaXNSZXNlcnZlZFRhZzpTLGlzUmVzZXJ2ZWRBdHRyOlMsaXNVbmtub3duRWxlbWVudDpTLGdldFRhZ05hbWVzcGFjZTprLHBhcnNlUGxhdGZvcm1UYWdOYW1lOkUsbXVzdFVzZVByb3A6Uyxhc3luYzohMCxfbGlmZWN5Y2xlSG9va3M6UH07ZnVuY3Rpb24gTSh0LGUsbixyKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxlLHt2YWx1ZTpuLGVudW1lcmFibGU6ISFyLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pfXZhciBGPW5ldyBSZWdFeHAoXCJbXlwiKy9hLXpBLVpcXHUwMEI3XFx1MDBDMC1cXHUwMEQ2XFx1MDBEOC1cXHUwMEY2XFx1MDBGOC1cXHUwMzdEXFx1MDM3Ri1cXHUxRkZGXFx1MjAwQy1cXHUyMDBEXFx1MjAzRi1cXHUyMDQwXFx1MjA3MC1cXHUyMThGXFx1MkMwMC1cXHUyRkVGXFx1MzAwMS1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkZELy5zb3VyY2UrXCIuJF9cXFxcZF1cIik7dmFyIFIsVT1cIl9fcHJvdG9fX1wiaW57fSxIPVwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3csQj1cInVuZGVmaW5lZFwiIT10eXBlb2YgV1hFbnZpcm9ubWVudCYmISFXWEVudmlyb25tZW50LnBsYXRmb3JtLFY9QiYmV1hFbnZpcm9ubWVudC5wbGF0Zm9ybS50b0xvd2VyQ2FzZSgpLHo9SCYmd2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKSxXPXomJi9tc2llfHRyaWRlbnQvLnRlc3QoeikscT16JiZ6LmluZGV4T2YoXCJtc2llIDkuMFwiKT4wLEs9eiYmei5pbmRleE9mKFwiZWRnZS9cIik+MCxYPSh6JiZ6LmluZGV4T2YoXCJhbmRyb2lkXCIpLHomJi9pcGhvbmV8aXBhZHxpcG9kfGlvcy8udGVzdCh6KXx8XCJpb3NcIj09PVYpLEc9KHomJi9jaHJvbWVcXC9cXGQrLy50ZXN0KHopLHomJi9waGFudG9tanMvLnRlc3QoeikseiYmei5tYXRjaCgvZmlyZWZveFxcLyhcXGQrKS8pKSxaPXt9LndhdGNoLEo9ITE7aWYoSCl0cnl7dmFyIFE9e307T2JqZWN0LmRlZmluZVByb3BlcnR5KFEsXCJwYXNzaXZlXCIse2dldDpmdW5jdGlvbigpe0o9ITB9fSksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJ0ZXN0LXBhc3NpdmVcIixudWxsLFEpfWNhdGNoKHQpe312YXIgWT1mdW5jdGlvbigpe3JldHVybiB2b2lkIDA9PT1SJiYoUj0hSCYmIUImJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBnbG9iYWwmJihnbG9iYWwucHJvY2VzcyYmXCJzZXJ2ZXJcIj09PWdsb2JhbC5wcm9jZXNzLmVudi5WVUVfRU5WKSksUn0sdHQ9SCYmd2luZG93Ll9fVlVFX0RFVlRPT0xTX0dMT0JBTF9IT09LX187ZnVuY3Rpb24gZXQodCl7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YgdCYmL25hdGl2ZSBjb2RlLy50ZXN0KHQudG9TdHJpbmcoKSl9dmFyIG50LHJ0PVwidW5kZWZpbmVkXCIhPXR5cGVvZiBTeW1ib2wmJmV0KFN5bWJvbCkmJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBSZWZsZWN0JiZldChSZWZsZWN0Lm93bktleXMpO250PVwidW5kZWZpbmVkXCIhPXR5cGVvZiBTZXQmJmV0KFNldCk/U2V0OmZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3RoaXMuc2V0PU9iamVjdC5jcmVhdGUobnVsbCl9cmV0dXJuIHQucHJvdG90eXBlLmhhcz1mdW5jdGlvbih0KXtyZXR1cm4hMD09PXRoaXMuc2V0W3RdfSx0LnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24odCl7dGhpcy5zZXRbdF09ITB9LHQucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5zZXQ9T2JqZWN0LmNyZWF0ZShudWxsKX0sdH0oKTt2YXIgb3Q9ayxpdD0wLGF0PWZ1bmN0aW9uKCl7dGhpcy5pZD1pdCsrLHRoaXMuc3Vicz1bXX07YXQucHJvdG90eXBlLmFkZFN1Yj1mdW5jdGlvbih0KXt0aGlzLnN1YnMucHVzaCh0KX0sYXQucHJvdG90eXBlLnJlbW92ZVN1Yj1mdW5jdGlvbih0KXt2KHRoaXMuc3Vicyx0KX0sYXQucHJvdG90eXBlLmRlcGVuZD1mdW5jdGlvbigpe2F0LnRhcmdldCYmYXQudGFyZ2V0LmFkZERlcCh0aGlzKX0sYXQucHJvdG90eXBlLm5vdGlmeT1mdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLnN1YnMuc2xpY2UoKSxlPTAsbj10Lmxlbmd0aDtlPG47ZSsrKXRbZV0udXBkYXRlKCl9LGF0LnRhcmdldD1udWxsO3ZhciBzdD1bXTtmdW5jdGlvbiBjdCh0KXtzdC5wdXNoKHQpLGF0LnRhcmdldD10fWZ1bmN0aW9uIHV0KCl7c3QucG9wKCksYXQudGFyZ2V0PXN0W3N0Lmxlbmd0aC0xXX12YXIgbHQ9ZnVuY3Rpb24odCxlLG4scixvLGksYSxzKXt0aGlzLnRhZz10LHRoaXMuZGF0YT1lLHRoaXMuY2hpbGRyZW49bix0aGlzLnRleHQ9cix0aGlzLmVsbT1vLHRoaXMubnM9dm9pZCAwLHRoaXMuY29udGV4dD1pLHRoaXMuZm5Db250ZXh0PXZvaWQgMCx0aGlzLmZuT3B0aW9ucz12b2lkIDAsdGhpcy5mblNjb3BlSWQ9dm9pZCAwLHRoaXMua2V5PWUmJmUua2V5LHRoaXMuY29tcG9uZW50T3B0aW9ucz1hLHRoaXMuY29tcG9uZW50SW5zdGFuY2U9dm9pZCAwLHRoaXMucGFyZW50PXZvaWQgMCx0aGlzLnJhdz0hMSx0aGlzLmlzU3RhdGljPSExLHRoaXMuaXNSb290SW5zZXJ0PSEwLHRoaXMuaXNDb21tZW50PSExLHRoaXMuaXNDbG9uZWQ9ITEsdGhpcy5pc09uY2U9ITEsdGhpcy5hc3luY0ZhY3Rvcnk9cyx0aGlzLmFzeW5jTWV0YT12b2lkIDAsdGhpcy5pc0FzeW5jUGxhY2Vob2xkZXI9ITF9LGZ0PXtjaGlsZDp7Y29uZmlndXJhYmxlOiEwfX07ZnQuY2hpbGQuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29tcG9uZW50SW5zdGFuY2V9LE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGx0LnByb3RvdHlwZSxmdCk7dmFyIHB0PWZ1bmN0aW9uKHQpe3ZvaWQgMD09PXQmJih0PVwiXCIpO3ZhciBlPW5ldyBsdDtyZXR1cm4gZS50ZXh0PXQsZS5pc0NvbW1lbnQ9ITAsZX07ZnVuY3Rpb24gZHQodCl7cmV0dXJuIG5ldyBsdCh2b2lkIDAsdm9pZCAwLHZvaWQgMCxTdHJpbmcodCkpfWZ1bmN0aW9uIHZ0KHQpe3ZhciBlPW5ldyBsdCh0LnRhZyx0LmRhdGEsdC5jaGlsZHJlbiYmdC5jaGlsZHJlbi5zbGljZSgpLHQudGV4dCx0LmVsbSx0LmNvbnRleHQsdC5jb21wb25lbnRPcHRpb25zLHQuYXN5bmNGYWN0b3J5KTtyZXR1cm4gZS5ucz10Lm5zLGUuaXNTdGF0aWM9dC5pc1N0YXRpYyxlLmtleT10LmtleSxlLmlzQ29tbWVudD10LmlzQ29tbWVudCxlLmZuQ29udGV4dD10LmZuQ29udGV4dCxlLmZuT3B0aW9ucz10LmZuT3B0aW9ucyxlLmZuU2NvcGVJZD10LmZuU2NvcGVJZCxlLmFzeW5jTWV0YT10LmFzeW5jTWV0YSxlLmlzQ2xvbmVkPSEwLGV9dmFyIGh0PUFycmF5LnByb3RvdHlwZSxtdD1PYmplY3QuY3JlYXRlKGh0KTtbXCJwdXNoXCIsXCJwb3BcIixcInNoaWZ0XCIsXCJ1bnNoaWZ0XCIsXCJzcGxpY2VcIixcInNvcnRcIixcInJldmVyc2VcIl0uZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgZT1odFt0XTtNKG10LHQsZnVuY3Rpb24oKXtmb3IodmFyIG49W10scj1hcmd1bWVudHMubGVuZ3RoO3ItLTspbltyXT1hcmd1bWVudHNbcl07dmFyIG8saT1lLmFwcGx5KHRoaXMsbiksYT10aGlzLl9fb2JfXztzd2l0Y2godCl7Y2FzZVwicHVzaFwiOmNhc2VcInVuc2hpZnRcIjpvPW47YnJlYWs7Y2FzZVwic3BsaWNlXCI6bz1uLnNsaWNlKDIpfXJldHVybiBvJiZhLm9ic2VydmVBcnJheShvKSxhLmRlcC5ub3RpZnkoKSxpfSl9KTt2YXIgeXQ9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMobXQpLGd0PSEwO2Z1bmN0aW9uIF90KHQpe2d0PXR9dmFyIGJ0PWZ1bmN0aW9uKHQpe3ZhciBlO3RoaXMudmFsdWU9dCx0aGlzLmRlcD1uZXcgYXQsdGhpcy52bUNvdW50PTAsTSh0LFwiX19vYl9fXCIsdGhpcyksQXJyYXkuaXNBcnJheSh0KT8oVT8oZT1tdCx0Ll9fcHJvdG9fXz1lKTpmdW5jdGlvbih0LGUsbil7Zm9yKHZhciByPTAsbz1uLmxlbmd0aDtyPG87cisrKXt2YXIgaT1uW3JdO00odCxpLGVbaV0pfX0odCxtdCx5dCksdGhpcy5vYnNlcnZlQXJyYXkodCkpOnRoaXMud2Fsayh0KX07ZnVuY3Rpb24gQ3QodCxlKXt2YXIgbjtpZihpKHQpJiYhKHQgaW5zdGFuY2VvZiBsdCkpcmV0dXJuIG0odCxcIl9fb2JfX1wiKSYmdC5fX29iX18gaW5zdGFuY2VvZiBidD9uPXQuX19vYl9fOmd0JiYhWSgpJiYoQXJyYXkuaXNBcnJheSh0KXx8cyh0KSkmJk9iamVjdC5pc0V4dGVuc2libGUodCkmJiF0Ll9pc1Z1ZSYmKG49bmV3IGJ0KHQpKSxlJiZuJiZuLnZtQ291bnQrKyxufWZ1bmN0aW9uICR0KHQsZSxuLHIsbyl7dmFyIGk9bmV3IGF0LGE9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LGUpO2lmKCFhfHwhMSE9PWEuY29uZmlndXJhYmxlKXt2YXIgcz1hJiZhLmdldCxjPWEmJmEuc2V0O3MmJiFjfHwyIT09YXJndW1lbnRzLmxlbmd0aHx8KG49dFtlXSk7dmFyIHU9IW8mJkN0KG4pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LGUse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3ZhciBlPXM/cy5jYWxsKHQpOm47cmV0dXJuIGF0LnRhcmdldCYmKGkuZGVwZW5kKCksdSYmKHUuZGVwLmRlcGVuZCgpLEFycmF5LmlzQXJyYXkoZSkmJmZ1bmN0aW9uIHQoZSl7Zm9yKHZhciBuPXZvaWQgMCxyPTAsbz1lLmxlbmd0aDtyPG87cisrKShuPWVbcl0pJiZuLl9fb2JfXyYmbi5fX29iX18uZGVwLmRlcGVuZCgpLEFycmF5LmlzQXJyYXkobikmJnQobil9KGUpKSksZX0sc2V0OmZ1bmN0aW9uKGUpe3ZhciByPXM/cy5jYWxsKHQpOm47ZT09PXJ8fGUhPWUmJnIhPXJ8fHMmJiFjfHwoYz9jLmNhbGwodCxlKTpuPWUsdT0hbyYmQ3QoZSksaS5ub3RpZnkoKSl9fSl9fWZ1bmN0aW9uIHd0KHQsZSxuKXtpZihBcnJheS5pc0FycmF5KHQpJiZjKGUpKXJldHVybiB0Lmxlbmd0aD1NYXRoLm1heCh0Lmxlbmd0aCxlKSx0LnNwbGljZShlLDEsbiksbjtpZihlIGluIHQmJiEoZSBpbiBPYmplY3QucHJvdG90eXBlKSlyZXR1cm4gdFtlXT1uLG47dmFyIHI9dC5fX29iX187cmV0dXJuIHQuX2lzVnVlfHxyJiZyLnZtQ291bnQ/bjpyPygkdChyLnZhbHVlLGUsbiksci5kZXAubm90aWZ5KCksbik6KHRbZV09bixuKX1mdW5jdGlvbiBBdCh0LGUpe2lmKEFycmF5LmlzQXJyYXkodCkmJmMoZSkpdC5zcGxpY2UoZSwxKTtlbHNle3ZhciBuPXQuX19vYl9fO3QuX2lzVnVlfHxuJiZuLnZtQ291bnR8fG0odCxlKSYmKGRlbGV0ZSB0W2VdLG4mJm4uZGVwLm5vdGlmeSgpKX19YnQucHJvdG90eXBlLndhbGs9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPU9iamVjdC5rZXlzKHQpLG49MDtuPGUubGVuZ3RoO24rKykkdCh0LGVbbl0pfSxidC5wcm90b3R5cGUub2JzZXJ2ZUFycmF5PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wLG49dC5sZW5ndGg7ZTxuO2UrKylDdCh0W2VdKX07dmFyIHh0PUwub3B0aW9uTWVyZ2VTdHJhdGVnaWVzO2Z1bmN0aW9uIE90KHQsZSl7aWYoIWUpcmV0dXJuIHQ7Zm9yKHZhciBuLHIsbyxpPXJ0P1JlZmxlY3Qub3duS2V5cyhlKTpPYmplY3Qua2V5cyhlKSxhPTA7YTxpLmxlbmd0aDthKyspXCJfX29iX19cIiE9PShuPWlbYV0pJiYocj10W25dLG89ZVtuXSxtKHQsbik/ciE9PW8mJnMocikmJnMobykmJk90KHIsbyk6d3QodCxuLG8pKTtyZXR1cm4gdH1mdW5jdGlvbiBrdCh0LGUsbil7cmV0dXJuIG4/ZnVuY3Rpb24oKXt2YXIgcj1cImZ1bmN0aW9uXCI9PXR5cGVvZiBlP2UuY2FsbChuLG4pOmUsbz1cImZ1bmN0aW9uXCI9PXR5cGVvZiB0P3QuY2FsbChuLG4pOnQ7cmV0dXJuIHI/T3QocixvKTpvfTplP3Q/ZnVuY3Rpb24oKXtyZXR1cm4gT3QoXCJmdW5jdGlvblwiPT10eXBlb2YgZT9lLmNhbGwodGhpcyx0aGlzKTplLFwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dC5jYWxsKHRoaXMsdGhpcyk6dCl9OmU6dH1mdW5jdGlvbiBTdCh0LGUpe3ZhciBuPWU/dD90LmNvbmNhdChlKTpBcnJheS5pc0FycmF5KGUpP2U6W2VdOnQ7cmV0dXJuIG4/ZnVuY3Rpb24odCl7Zm9yKHZhciBlPVtdLG49MDtuPHQubGVuZ3RoO24rKyktMT09PWUuaW5kZXhPZih0W25dKSYmZS5wdXNoKHRbbl0pO3JldHVybiBlfShuKTpufWZ1bmN0aW9uIEV0KHQsZSxuLHIpe3ZhciBvPU9iamVjdC5jcmVhdGUodHx8bnVsbCk7cmV0dXJuIGU/eChvLGUpOm99eHQuZGF0YT1mdW5jdGlvbih0LGUsbil7cmV0dXJuIG4/a3QodCxlLG4pOmUmJlwiZnVuY3Rpb25cIiE9dHlwZW9mIGU/dDprdCh0LGUpfSxQLmZvckVhY2goZnVuY3Rpb24odCl7eHRbdF09U3R9KSxOLmZvckVhY2goZnVuY3Rpb24odCl7eHRbdCtcInNcIl09RXR9KSx4dC53YXRjaD1mdW5jdGlvbih0LGUsbixyKXtpZih0PT09WiYmKHQ9dm9pZCAwKSxlPT09WiYmKGU9dm9pZCAwKSwhZSlyZXR1cm4gT2JqZWN0LmNyZWF0ZSh0fHxudWxsKTtpZighdClyZXR1cm4gZTt2YXIgbz17fTtmb3IodmFyIGkgaW4geChvLHQpLGUpe3ZhciBhPW9baV0scz1lW2ldO2EmJiFBcnJheS5pc0FycmF5KGEpJiYoYT1bYV0pLG9baV09YT9hLmNvbmNhdChzKTpBcnJheS5pc0FycmF5KHMpP3M6W3NdfXJldHVybiBvfSx4dC5wcm9wcz14dC5tZXRob2RzPXh0LmluamVjdD14dC5jb21wdXRlZD1mdW5jdGlvbih0LGUsbixyKXtpZighdClyZXR1cm4gZTt2YXIgbz1PYmplY3QuY3JlYXRlKG51bGwpO3JldHVybiB4KG8sdCksZSYmeChvLGUpLG99LHh0LnByb3ZpZGU9a3Q7dmFyIGp0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHZvaWQgMD09PWU/dDplfTtmdW5jdGlvbiBUdCh0LGUsbil7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgZSYmKGU9ZS5vcHRpb25zKSxmdW5jdGlvbih0LGUpe3ZhciBuPXQucHJvcHM7aWYobil7dmFyIHIsbyxpPXt9O2lmKEFycmF5LmlzQXJyYXkobikpZm9yKHI9bi5sZW5ndGg7ci0tOylcInN0cmluZ1wiPT10eXBlb2Yobz1uW3JdKSYmKGlbXyhvKV09e3R5cGU6bnVsbH0pO2Vsc2UgaWYocyhuKSlmb3IodmFyIGEgaW4gbilvPW5bYV0saVtfKGEpXT1zKG8pP286e3R5cGU6b307dC5wcm9wcz1pfX0oZSksZnVuY3Rpb24odCxlKXt2YXIgbj10LmluamVjdDtpZihuKXt2YXIgcj10LmluamVjdD17fTtpZihBcnJheS5pc0FycmF5KG4pKWZvcih2YXIgbz0wO288bi5sZW5ndGg7bysrKXJbbltvXV09e2Zyb206bltvXX07ZWxzZSBpZihzKG4pKWZvcih2YXIgaSBpbiBuKXt2YXIgYT1uW2ldO3JbaV09cyhhKT94KHtmcm9tOml9LGEpOntmcm9tOmF9fX19KGUpLGZ1bmN0aW9uKHQpe3ZhciBlPXQuZGlyZWN0aXZlcztpZihlKWZvcih2YXIgbiBpbiBlKXt2YXIgcj1lW25dO1wiZnVuY3Rpb25cIj09dHlwZW9mIHImJihlW25dPXtiaW5kOnIsdXBkYXRlOnJ9KX19KGUpLCFlLl9iYXNlJiYoZS5leHRlbmRzJiYodD1UdCh0LGUuZXh0ZW5kcyxuKSksZS5taXhpbnMpKWZvcih2YXIgcj0wLG89ZS5taXhpbnMubGVuZ3RoO3I8bztyKyspdD1UdCh0LGUubWl4aW5zW3JdLG4pO3ZhciBpLGE9e307Zm9yKGkgaW4gdCljKGkpO2ZvcihpIGluIGUpbSh0LGkpfHxjKGkpO2Z1bmN0aW9uIGMocil7dmFyIG89eHRbcl18fGp0O2Fbcl09byh0W3JdLGVbcl0sbixyKX1yZXR1cm4gYX1mdW5jdGlvbiBJdCh0LGUsbixyKXtpZihcInN0cmluZ1wiPT10eXBlb2Ygbil7dmFyIG89dFtlXTtpZihtKG8sbikpcmV0dXJuIG9bbl07dmFyIGk9XyhuKTtpZihtKG8saSkpcmV0dXJuIG9baV07dmFyIGE9YihpKTtyZXR1cm4gbShvLGEpP29bYV06b1tuXXx8b1tpXXx8b1thXX19ZnVuY3Rpb24gRHQodCxlLG4scil7dmFyIG89ZVt0XSxpPSFtKG4sdCksYT1uW3RdLHM9THQoQm9vbGVhbixvLnR5cGUpO2lmKHM+LTEpaWYoaSYmIW0obyxcImRlZmF1bHRcIikpYT0hMTtlbHNlIGlmKFwiXCI9PT1hfHxhPT09JCh0KSl7dmFyIGM9THQoU3RyaW5nLG8udHlwZSk7KGM8MHx8czxjKSYmKGE9ITApfWlmKHZvaWQgMD09PWEpe2E9ZnVuY3Rpb24odCxlLG4pe2lmKCFtKGUsXCJkZWZhdWx0XCIpKXJldHVybjt2YXIgcj1lLmRlZmF1bHQ7aWYodCYmdC4kb3B0aW9ucy5wcm9wc0RhdGEmJnZvaWQgMD09PXQuJG9wdGlvbnMucHJvcHNEYXRhW25dJiZ2b2lkIDAhPT10Ll9wcm9wc1tuXSlyZXR1cm4gdC5fcHJvcHNbbl07cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YgciYmXCJGdW5jdGlvblwiIT09TnQoZS50eXBlKT9yLmNhbGwodCk6cn0ocixvLHQpO3ZhciB1PWd0O190KCEwKSxDdChhKSxfdCh1KX1yZXR1cm4gYX1mdW5jdGlvbiBOdCh0KXt2YXIgZT10JiZ0LnRvU3RyaW5nKCkubWF0Y2goL15cXHMqZnVuY3Rpb24gKFxcdyspLyk7cmV0dXJuIGU/ZVsxXTpcIlwifWZ1bmN0aW9uIFB0KHQsZSl7cmV0dXJuIE50KHQpPT09TnQoZSl9ZnVuY3Rpb24gTHQodCxlKXtpZighQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gUHQoZSx0KT8wOi0xO2Zvcih2YXIgbj0wLHI9ZS5sZW5ndGg7bjxyO24rKylpZihQdChlW25dLHQpKXJldHVybiBuO3JldHVybi0xfWZ1bmN0aW9uIE10KHQsZSxuKXtjdCgpO3RyeXtpZihlKWZvcih2YXIgcj1lO3I9ci4kcGFyZW50Oyl7dmFyIG89ci4kb3B0aW9ucy5lcnJvckNhcHR1cmVkO2lmKG8pZm9yKHZhciBpPTA7aTxvLmxlbmd0aDtpKyspdHJ5e2lmKCExPT09b1tpXS5jYWxsKHIsdCxlLG4pKXJldHVybn1jYXRjaCh0KXtSdCh0LHIsXCJlcnJvckNhcHR1cmVkIGhvb2tcIil9fVJ0KHQsZSxuKX1maW5hbGx5e3V0KCl9fWZ1bmN0aW9uIEZ0KHQsZSxuLHIsbyl7dmFyIGk7dHJ5eyhpPW4/dC5hcHBseShlLG4pOnQuY2FsbChlKSkmJiFpLl9pc1Z1ZSYmdShpKSYmIWkuX2hhbmRsZWQmJihpLmNhdGNoKGZ1bmN0aW9uKHQpe3JldHVybiBNdCh0LHIsbytcIiAoUHJvbWlzZS9hc3luYylcIil9KSxpLl9oYW5kbGVkPSEwKX1jYXRjaCh0KXtNdCh0LHIsbyl9cmV0dXJuIGl9ZnVuY3Rpb24gUnQodCxlLG4pe2lmKEwuZXJyb3JIYW5kbGVyKXRyeXtyZXR1cm4gTC5lcnJvckhhbmRsZXIuY2FsbChudWxsLHQsZSxuKX1jYXRjaChlKXtlIT09dCYmVXQoZSxudWxsLFwiY29uZmlnLmVycm9ySGFuZGxlclwiKX1VdCh0LGUsbil9ZnVuY3Rpb24gVXQodCxlLG4pe2lmKCFIJiYhQnx8XCJ1bmRlZmluZWRcIj09dHlwZW9mIGNvbnNvbGUpdGhyb3cgdDtjb25zb2xlLmVycm9yKHQpfXZhciBIdCxCdD0hMSxWdD1bXSx6dD0hMTtmdW5jdGlvbiBXdCgpe3p0PSExO3ZhciB0PVZ0LnNsaWNlKDApO1Z0Lmxlbmd0aD0wO2Zvcih2YXIgZT0wO2U8dC5sZW5ndGg7ZSsrKXRbZV0oKX1pZihcInVuZGVmaW5lZFwiIT10eXBlb2YgUHJvbWlzZSYmZXQoUHJvbWlzZSkpe3ZhciBxdD1Qcm9taXNlLnJlc29sdmUoKTtIdD1mdW5jdGlvbigpe3F0LnRoZW4oV3QpLFgmJnNldFRpbWVvdXQoayl9LEJ0PSEwfWVsc2UgaWYoV3x8XCJ1bmRlZmluZWRcIj09dHlwZW9mIE11dGF0aW9uT2JzZXJ2ZXJ8fCFldChNdXRhdGlvbk9ic2VydmVyKSYmXCJbb2JqZWN0IE11dGF0aW9uT2JzZXJ2ZXJDb25zdHJ1Y3Rvcl1cIiE9PU11dGF0aW9uT2JzZXJ2ZXIudG9TdHJpbmcoKSlIdD1cInVuZGVmaW5lZFwiIT10eXBlb2Ygc2V0SW1tZWRpYXRlJiZldChzZXRJbW1lZGlhdGUpP2Z1bmN0aW9uKCl7c2V0SW1tZWRpYXRlKFd0KX06ZnVuY3Rpb24oKXtzZXRUaW1lb3V0KFd0LDApfTtlbHNle3ZhciBLdD0xLFh0PW5ldyBNdXRhdGlvbk9ic2VydmVyKFd0KSxHdD1kb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShTdHJpbmcoS3QpKTtYdC5vYnNlcnZlKEd0LHtjaGFyYWN0ZXJEYXRhOiEwfSksSHQ9ZnVuY3Rpb24oKXtLdD0oS3QrMSklMixHdC5kYXRhPVN0cmluZyhLdCl9LEJ0PSEwfWZ1bmN0aW9uIFp0KHQsZSl7dmFyIG47aWYoVnQucHVzaChmdW5jdGlvbigpe2lmKHQpdHJ5e3QuY2FsbChlKX1jYXRjaCh0KXtNdCh0LGUsXCJuZXh0VGlja1wiKX1lbHNlIG4mJm4oZSl9KSx6dHx8KHp0PSEwLEh0KCkpLCF0JiZcInVuZGVmaW5lZFwiIT10eXBlb2YgUHJvbWlzZSlyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24odCl7bj10fSl9dmFyIEp0PW5ldyBudDtmdW5jdGlvbiBRdCh0KXshZnVuY3Rpb24gdChlLG4pe3ZhciByLG87dmFyIGE9QXJyYXkuaXNBcnJheShlKTtpZighYSYmIWkoZSl8fE9iamVjdC5pc0Zyb3plbihlKXx8ZSBpbnN0YW5jZW9mIGx0KXJldHVybjtpZihlLl9fb2JfXyl7dmFyIHM9ZS5fX29iX18uZGVwLmlkO2lmKG4uaGFzKHMpKXJldHVybjtuLmFkZChzKX1pZihhKWZvcihyPWUubGVuZ3RoO3ItLTspdChlW3JdLG4pO2Vsc2UgZm9yKG89T2JqZWN0LmtleXMoZSkscj1vLmxlbmd0aDtyLS07KXQoZVtvW3JdXSxuKX0odCxKdCksSnQuY2xlYXIoKX12YXIgWXQ9eShmdW5jdGlvbih0KXt2YXIgZT1cIiZcIj09PXQuY2hhckF0KDApLG49XCJ+XCI9PT0odD1lP3Quc2xpY2UoMSk6dCkuY2hhckF0KDApLHI9XCIhXCI9PT0odD1uP3Quc2xpY2UoMSk6dCkuY2hhckF0KDApO3JldHVybntuYW1lOnQ9cj90LnNsaWNlKDEpOnQsb25jZTpuLGNhcHR1cmU6cixwYXNzaXZlOmV9fSk7ZnVuY3Rpb24gdGUodCxlKXtmdW5jdGlvbiBuKCl7dmFyIHQ9YXJndW1lbnRzLHI9bi5mbnM7aWYoIUFycmF5LmlzQXJyYXkocikpcmV0dXJuIEZ0KHIsbnVsbCxhcmd1bWVudHMsZSxcInYtb24gaGFuZGxlclwiKTtmb3IodmFyIG89ci5zbGljZSgpLGk9MDtpPG8ubGVuZ3RoO2krKylGdChvW2ldLG51bGwsdCxlLFwidi1vbiBoYW5kbGVyXCIpfXJldHVybiBuLmZucz10LG59ZnVuY3Rpb24gZWUodCxuLG8saSxhLHMpe3ZhciBjLHUsbCxmO2ZvcihjIGluIHQpdT10W2NdLGw9bltjXSxmPVl0KGMpLGUodSl8fChlKGwpPyhlKHUuZm5zKSYmKHU9dFtjXT10ZSh1LHMpKSxyKGYub25jZSkmJih1PXRbY109YShmLm5hbWUsdSxmLmNhcHR1cmUpKSxvKGYubmFtZSx1LGYuY2FwdHVyZSxmLnBhc3NpdmUsZi5wYXJhbXMpKTp1IT09bCYmKGwuZm5zPXUsdFtjXT1sKSk7Zm9yKGMgaW4gbillKHRbY10pJiZpKChmPVl0KGMpKS5uYW1lLG5bY10sZi5jYXB0dXJlKX1mdW5jdGlvbiBuZSh0LG8saSl7dmFyIGE7dCBpbnN0YW5jZW9mIGx0JiYodD10LmRhdGEuaG9va3x8KHQuZGF0YS5ob29rPXt9KSk7dmFyIHM9dFtvXTtmdW5jdGlvbiBjKCl7aS5hcHBseSh0aGlzLGFyZ3VtZW50cyksdihhLmZucyxjKX1lKHMpP2E9dGUoW2NdKTpuKHMuZm5zKSYmcihzLm1lcmdlZCk/KGE9cykuZm5zLnB1c2goYyk6YT10ZShbcyxjXSksYS5tZXJnZWQ9ITAsdFtvXT1hfWZ1bmN0aW9uIHJlKHQsZSxyLG8saSl7aWYobihlKSl7aWYobShlLHIpKXJldHVybiB0W3JdPWVbcl0saXx8ZGVsZXRlIGVbcl0sITA7aWYobShlLG8pKXJldHVybiB0W3JdPWVbb10saXx8ZGVsZXRlIGVbb10sITB9cmV0dXJuITF9ZnVuY3Rpb24gb2UodCl7cmV0dXJuIG8odCk/W2R0KHQpXTpBcnJheS5pc0FycmF5KHQpP2Z1bmN0aW9uIHQoaSxhKXt2YXIgcz1bXTt2YXIgYyx1LGwsZjtmb3IoYz0wO2M8aS5sZW5ndGg7YysrKWUodT1pW2NdKXx8XCJib29sZWFuXCI9PXR5cGVvZiB1fHwobD1zLmxlbmd0aC0xLGY9c1tsXSxBcnJheS5pc0FycmF5KHUpP3UubGVuZ3RoPjAmJihpZSgodT10KHUsKGF8fFwiXCIpK1wiX1wiK2MpKVswXSkmJmllKGYpJiYoc1tsXT1kdChmLnRleHQrdVswXS50ZXh0KSx1LnNoaWZ0KCkpLHMucHVzaC5hcHBseShzLHUpKTpvKHUpP2llKGYpP3NbbF09ZHQoZi50ZXh0K3UpOlwiXCIhPT11JiZzLnB1c2goZHQodSkpOmllKHUpJiZpZShmKT9zW2xdPWR0KGYudGV4dCt1LnRleHQpOihyKGkuX2lzVkxpc3QpJiZuKHUudGFnKSYmZSh1LmtleSkmJm4oYSkmJih1LmtleT1cIl9fdmxpc3RcIithK1wiX1wiK2MrXCJfX1wiKSxzLnB1c2godSkpKTtyZXR1cm4gc30odCk6dm9pZCAwfWZ1bmN0aW9uIGllKHQpe3JldHVybiBuKHQpJiZuKHQudGV4dCkmJiExPT09dC5pc0NvbW1lbnR9ZnVuY3Rpb24gYWUodCxlKXtpZih0KXtmb3IodmFyIG49T2JqZWN0LmNyZWF0ZShudWxsKSxyPXJ0P1JlZmxlY3Qub3duS2V5cyh0KTpPYmplY3Qua2V5cyh0KSxvPTA7bzxyLmxlbmd0aDtvKyspe3ZhciBpPXJbb107aWYoXCJfX29iX19cIiE9PWkpe2Zvcih2YXIgYT10W2ldLmZyb20scz1lO3M7KXtpZihzLl9wcm92aWRlZCYmbShzLl9wcm92aWRlZCxhKSl7bltpXT1zLl9wcm92aWRlZFthXTticmVha31zPXMuJHBhcmVudH1pZighcyYmXCJkZWZhdWx0XCJpbiB0W2ldKXt2YXIgYz10W2ldLmRlZmF1bHQ7bltpXT1cImZ1bmN0aW9uXCI9PXR5cGVvZiBjP2MuY2FsbChlKTpjfX19cmV0dXJuIG59fWZ1bmN0aW9uIHNlKHQsZSl7aWYoIXR8fCF0Lmxlbmd0aClyZXR1cm57fTtmb3IodmFyIG49e30scj0wLG89dC5sZW5ndGg7cjxvO3IrKyl7dmFyIGk9dFtyXSxhPWkuZGF0YTtpZihhJiZhLmF0dHJzJiZhLmF0dHJzLnNsb3QmJmRlbGV0ZSBhLmF0dHJzLnNsb3QsaS5jb250ZXh0IT09ZSYmaS5mbkNvbnRleHQhPT1lfHwhYXx8bnVsbD09YS5zbG90KShuLmRlZmF1bHR8fChuLmRlZmF1bHQ9W10pKS5wdXNoKGkpO2Vsc2V7dmFyIHM9YS5zbG90LGM9bltzXXx8KG5bc109W10pO1widGVtcGxhdGVcIj09PWkudGFnP2MucHVzaC5hcHBseShjLGkuY2hpbGRyZW58fFtdKTpjLnB1c2goaSl9fWZvcih2YXIgdSBpbiBuKW5bdV0uZXZlcnkoY2UpJiZkZWxldGUgblt1XTtyZXR1cm4gbn1mdW5jdGlvbiBjZSh0KXtyZXR1cm4gdC5pc0NvbW1lbnQmJiF0LmFzeW5jRmFjdG9yeXx8XCIgXCI9PT10LnRleHR9ZnVuY3Rpb24gdWUoZSxuLHIpe3ZhciBvLGk9T2JqZWN0LmtleXMobikubGVuZ3RoPjAsYT1lPyEhZS4kc3RhYmxlOiFpLHM9ZSYmZS4ka2V5O2lmKGUpe2lmKGUuX25vcm1hbGl6ZWQpcmV0dXJuIGUuX25vcm1hbGl6ZWQ7aWYoYSYmciYmciE9PXQmJnM9PT1yLiRrZXkmJiFpJiYhci4kaGFzTm9ybWFsKXJldHVybiByO2Zvcih2YXIgYyBpbiBvPXt9LGUpZVtjXSYmXCIkXCIhPT1jWzBdJiYob1tjXT1sZShuLGMsZVtjXSkpfWVsc2Ugbz17fTtmb3IodmFyIHUgaW4gbil1IGluIG98fChvW3VdPWZlKG4sdSkpO3JldHVybiBlJiZPYmplY3QuaXNFeHRlbnNpYmxlKGUpJiYoZS5fbm9ybWFsaXplZD1vKSxNKG8sXCIkc3RhYmxlXCIsYSksTShvLFwiJGtleVwiLHMpLE0obyxcIiRoYXNOb3JtYWxcIixpKSxvfWZ1bmN0aW9uIGxlKHQsZSxuKXt2YXIgcj1mdW5jdGlvbigpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg/bi5hcHBseShudWxsLGFyZ3VtZW50cyk6bih7fSk7cmV0dXJuKHQ9dCYmXCJvYmplY3RcIj09dHlwZW9mIHQmJiFBcnJheS5pc0FycmF5KHQpP1t0XTpvZSh0KSkmJigwPT09dC5sZW5ndGh8fDE9PT10Lmxlbmd0aCYmdFswXS5pc0NvbW1lbnQpP3ZvaWQgMDp0fTtyZXR1cm4gbi5wcm94eSYmT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsZSx7Z2V0OnIsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxyfWZ1bmN0aW9uIGZlKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRbZV19fWZ1bmN0aW9uIHBlKHQsZSl7dmFyIHIsbyxhLHMsYztpZihBcnJheS5pc0FycmF5KHQpfHxcInN0cmluZ1wiPT10eXBlb2YgdClmb3Iocj1uZXcgQXJyYXkodC5sZW5ndGgpLG89MCxhPXQubGVuZ3RoO288YTtvKyspcltvXT1lKHRbb10sbyk7ZWxzZSBpZihcIm51bWJlclwiPT10eXBlb2YgdClmb3Iocj1uZXcgQXJyYXkodCksbz0wO288dDtvKyspcltvXT1lKG8rMSxvKTtlbHNlIGlmKGkodCkpaWYocnQmJnRbU3ltYm9sLml0ZXJhdG9yXSl7cj1bXTtmb3IodmFyIHU9dFtTeW1ib2wuaXRlcmF0b3JdKCksbD11Lm5leHQoKTshbC5kb25lOylyLnB1c2goZShsLnZhbHVlLHIubGVuZ3RoKSksbD11Lm5leHQoKX1lbHNlIGZvcihzPU9iamVjdC5rZXlzKHQpLHI9bmV3IEFycmF5KHMubGVuZ3RoKSxvPTAsYT1zLmxlbmd0aDtvPGE7bysrKWM9c1tvXSxyW29dPWUodFtjXSxjLG8pO3JldHVybiBuKHIpfHwocj1bXSksci5faXNWTGlzdD0hMCxyfWZ1bmN0aW9uIGRlKHQsZSxuLHIpe3ZhciBvLGk9dGhpcy4kc2NvcGVkU2xvdHNbdF07aT8obj1ufHx7fSxyJiYobj14KHgoe30sciksbikpLG89aShuKXx8ZSk6bz10aGlzLiRzbG90c1t0XXx8ZTt2YXIgYT1uJiZuLnNsb3Q7cmV0dXJuIGE/dGhpcy4kY3JlYXRlRWxlbWVudChcInRlbXBsYXRlXCIse3Nsb3Q6YX0sbyk6b31mdW5jdGlvbiB2ZSh0KXtyZXR1cm4gSXQodGhpcy4kb3B0aW9ucyxcImZpbHRlcnNcIix0KXx8RX1mdW5jdGlvbiBoZSh0LGUpe3JldHVybiBBcnJheS5pc0FycmF5KHQpPy0xPT09dC5pbmRleE9mKGUpOnQhPT1lfWZ1bmN0aW9uIG1lKHQsZSxuLHIsbyl7dmFyIGk9TC5rZXlDb2Rlc1tlXXx8bjtyZXR1cm4gbyYmciYmIUwua2V5Q29kZXNbZV0/aGUobyxyKTppP2hlKGksdCk6cj8kKHIpIT09ZTp2b2lkIDB9ZnVuY3Rpb24geWUodCxlLG4scixvKXtpZihuKWlmKGkobikpe3ZhciBhO0FycmF5LmlzQXJyYXkobikmJihuPU8obikpO3ZhciBzPWZ1bmN0aW9uKGkpe2lmKFwiY2xhc3NcIj09PWl8fFwic3R5bGVcIj09PWl8fGQoaSkpYT10O2Vsc2V7dmFyIHM9dC5hdHRycyYmdC5hdHRycy50eXBlO2E9cnx8TC5tdXN0VXNlUHJvcChlLHMsaSk/dC5kb21Qcm9wc3x8KHQuZG9tUHJvcHM9e30pOnQuYXR0cnN8fCh0LmF0dHJzPXt9KX12YXIgYz1fKGkpLHU9JChpKTtjIGluIGF8fHUgaW4gYXx8KGFbaV09bltpXSxvJiYoKHQub258fCh0Lm9uPXt9KSlbXCJ1cGRhdGU6XCIraV09ZnVuY3Rpb24odCl7bltpXT10fSkpfTtmb3IodmFyIGMgaW4gbilzKGMpfWVsc2U7cmV0dXJuIHR9ZnVuY3Rpb24gZ2UodCxlKXt2YXIgbj10aGlzLl9zdGF0aWNUcmVlc3x8KHRoaXMuX3N0YXRpY1RyZWVzPVtdKSxyPW5bdF07cmV0dXJuIHImJiFlP3I6KGJlKHI9blt0XT10aGlzLiRvcHRpb25zLnN0YXRpY1JlbmRlckZuc1t0XS5jYWxsKHRoaXMuX3JlbmRlclByb3h5LG51bGwsdGhpcyksXCJfX3N0YXRpY19fXCIrdCwhMSkscil9ZnVuY3Rpb24gX2UodCxlLG4pe3JldHVybiBiZSh0LFwiX19vbmNlX19cIitlKyhuP1wiX1wiK246XCJcIiksITApLHR9ZnVuY3Rpb24gYmUodCxlLG4pe2lmKEFycmF5LmlzQXJyYXkodCkpZm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspdFtyXSYmXCJzdHJpbmdcIiE9dHlwZW9mIHRbcl0mJkNlKHRbcl0sZStcIl9cIityLG4pO2Vsc2UgQ2UodCxlLG4pfWZ1bmN0aW9uIENlKHQsZSxuKXt0LmlzU3RhdGljPSEwLHQua2V5PWUsdC5pc09uY2U9bn1mdW5jdGlvbiAkZSh0LGUpe2lmKGUpaWYocyhlKSl7dmFyIG49dC5vbj10Lm9uP3goe30sdC5vbik6e307Zm9yKHZhciByIGluIGUpe3ZhciBvPW5bcl0saT1lW3JdO25bcl09bz9bXS5jb25jYXQobyxpKTppfX1lbHNlO3JldHVybiB0fWZ1bmN0aW9uIHdlKHQsZSxuLHIpe2U9ZXx8eyRzdGFibGU6IW59O2Zvcih2YXIgbz0wO288dC5sZW5ndGg7bysrKXt2YXIgaT10W29dO0FycmF5LmlzQXJyYXkoaSk/d2UoaSxlLG4pOmkmJihpLnByb3h5JiYoaS5mbi5wcm94eT0hMCksZVtpLmtleV09aS5mbil9cmV0dXJuIHImJihlLiRrZXk9ciksZX1mdW5jdGlvbiBBZSh0LGUpe2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bis9Mil7dmFyIHI9ZVtuXTtcInN0cmluZ1wiPT10eXBlb2YgciYmciYmKHRbZVtuXV09ZVtuKzFdKX1yZXR1cm4gdH1mdW5jdGlvbiB4ZSh0LGUpe3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiB0P2UrdDp0fWZ1bmN0aW9uIE9lKHQpe3QuX289X2UsdC5fbj1mLHQuX3M9bCx0Ll9sPXBlLHQuX3Q9ZGUsdC5fcT1qLHQuX2k9VCx0Ll9tPWdlLHQuX2Y9dmUsdC5faz1tZSx0Ll9iPXllLHQuX3Y9ZHQsdC5fZT1wdCx0Ll91PXdlLHQuX2c9JGUsdC5fZD1BZSx0Ll9wPXhlfWZ1bmN0aW9uIGtlKGUsbixvLGksYSl7dmFyIHMsYz10aGlzLHU9YS5vcHRpb25zO20oaSxcIl91aWRcIik/KHM9T2JqZWN0LmNyZWF0ZShpKSkuX29yaWdpbmFsPWk6KHM9aSxpPWkuX29yaWdpbmFsKTt2YXIgbD1yKHUuX2NvbXBpbGVkKSxmPSFsO3RoaXMuZGF0YT1lLHRoaXMucHJvcHM9bix0aGlzLmNoaWxkcmVuPW8sdGhpcy5wYXJlbnQ9aSx0aGlzLmxpc3RlbmVycz1lLm9ufHx0LHRoaXMuaW5qZWN0aW9ucz1hZSh1LmluamVjdCxpKSx0aGlzLnNsb3RzPWZ1bmN0aW9uKCl7cmV0dXJuIGMuJHNsb3RzfHx1ZShlLnNjb3BlZFNsb3RzLGMuJHNsb3RzPXNlKG8saSkpLGMuJHNsb3RzfSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxcInNjb3BlZFNsb3RzXCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHVlKGUuc2NvcGVkU2xvdHMsdGhpcy5zbG90cygpKX19KSxsJiYodGhpcy4kb3B0aW9ucz11LHRoaXMuJHNsb3RzPXRoaXMuc2xvdHMoKSx0aGlzLiRzY29wZWRTbG90cz11ZShlLnNjb3BlZFNsb3RzLHRoaXMuJHNsb3RzKSksdS5fc2NvcGVJZD90aGlzLl9jPWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBvPUxlKHMsdCxlLG4scixmKTtyZXR1cm4gbyYmIUFycmF5LmlzQXJyYXkobykmJihvLmZuU2NvcGVJZD11Ll9zY29wZUlkLG8uZm5Db250ZXh0PWkpLG99OnRoaXMuX2M9ZnVuY3Rpb24odCxlLG4scil7cmV0dXJuIExlKHMsdCxlLG4scixmKX19ZnVuY3Rpb24gU2UodCxlLG4scixvKXt2YXIgaT12dCh0KTtyZXR1cm4gaS5mbkNvbnRleHQ9bixpLmZuT3B0aW9ucz1yLGUuc2xvdCYmKChpLmRhdGF8fChpLmRhdGE9e30pKS5zbG90PWUuc2xvdCksaX1mdW5jdGlvbiBFZSh0LGUpe2Zvcih2YXIgbiBpbiBlKXRbXyhuKV09ZVtuXX1PZShrZS5wcm90b3R5cGUpO3ZhciBqZT17aW5pdDpmdW5jdGlvbih0LGUpe2lmKHQuY29tcG9uZW50SW5zdGFuY2UmJiF0LmNvbXBvbmVudEluc3RhbmNlLl9pc0Rlc3Ryb3llZCYmdC5kYXRhLmtlZXBBbGl2ZSl7dmFyIHI9dDtqZS5wcmVwYXRjaChyLHIpfWVsc2V7KHQuY29tcG9uZW50SW5zdGFuY2U9ZnVuY3Rpb24odCxlKXt2YXIgcj17X2lzQ29tcG9uZW50OiEwLF9wYXJlbnRWbm9kZTp0LHBhcmVudDplfSxvPXQuZGF0YS5pbmxpbmVUZW1wbGF0ZTtuKG8pJiYoci5yZW5kZXI9by5yZW5kZXIsci5zdGF0aWNSZW5kZXJGbnM9by5zdGF0aWNSZW5kZXJGbnMpO3JldHVybiBuZXcgdC5jb21wb25lbnRPcHRpb25zLkN0b3Iocil9KHQscWUpKS4kbW91bnQoZT90LmVsbTp2b2lkIDAsZSl9fSxwcmVwYXRjaDpmdW5jdGlvbihlLG4pe3ZhciByPW4uY29tcG9uZW50T3B0aW9uczshZnVuY3Rpb24oZSxuLHIsbyxpKXt2YXIgYT1vLmRhdGEuc2NvcGVkU2xvdHMscz1lLiRzY29wZWRTbG90cyxjPSEhKGEmJiFhLiRzdGFibGV8fHMhPT10JiYhcy4kc3RhYmxlfHxhJiZlLiRzY29wZWRTbG90cy4ka2V5IT09YS4ka2V5KSx1PSEhKGl8fGUuJG9wdGlvbnMuX3JlbmRlckNoaWxkcmVufHxjKTtlLiRvcHRpb25zLl9wYXJlbnRWbm9kZT1vLGUuJHZub2RlPW8sZS5fdm5vZGUmJihlLl92bm9kZS5wYXJlbnQ9byk7aWYoZS4kb3B0aW9ucy5fcmVuZGVyQ2hpbGRyZW49aSxlLiRhdHRycz1vLmRhdGEuYXR0cnN8fHQsZS4kbGlzdGVuZXJzPXJ8fHQsbiYmZS4kb3B0aW9ucy5wcm9wcyl7X3QoITEpO2Zvcih2YXIgbD1lLl9wcm9wcyxmPWUuJG9wdGlvbnMuX3Byb3BLZXlzfHxbXSxwPTA7cDxmLmxlbmd0aDtwKyspe3ZhciBkPWZbcF0sdj1lLiRvcHRpb25zLnByb3BzO2xbZF09RHQoZCx2LG4sZSl9X3QoITApLGUuJG9wdGlvbnMucHJvcHNEYXRhPW59cj1yfHx0O3ZhciBoPWUuJG9wdGlvbnMuX3BhcmVudExpc3RlbmVycztlLiRvcHRpb25zLl9wYXJlbnRMaXN0ZW5lcnM9cixXZShlLHIsaCksdSYmKGUuJHNsb3RzPXNlKGksby5jb250ZXh0KSxlLiRmb3JjZVVwZGF0ZSgpKX0obi5jb21wb25lbnRJbnN0YW5jZT1lLmNvbXBvbmVudEluc3RhbmNlLHIucHJvcHNEYXRhLHIubGlzdGVuZXJzLG4sci5jaGlsZHJlbil9LGluc2VydDpmdW5jdGlvbih0KXt2YXIgZSxuPXQuY29udGV4dCxyPXQuY29tcG9uZW50SW5zdGFuY2U7ci5faXNNb3VudGVkfHwoci5faXNNb3VudGVkPSEwLFplKHIsXCJtb3VudGVkXCIpKSx0LmRhdGEua2VlcEFsaXZlJiYobi5faXNNb3VudGVkPygoZT1yKS5faW5hY3RpdmU9ITEsUWUucHVzaChlKSk6R2UociwhMCkpfSxkZXN0cm95OmZ1bmN0aW9uKHQpe3ZhciBlPXQuY29tcG9uZW50SW5zdGFuY2U7ZS5faXNEZXN0cm95ZWR8fCh0LmRhdGEua2VlcEFsaXZlP2Z1bmN0aW9uIHQoZSxuKXtpZihuJiYoZS5fZGlyZWN0SW5hY3RpdmU9ITAsWGUoZSkpKXJldHVybjtpZighZS5faW5hY3RpdmUpe2UuX2luYWN0aXZlPSEwO2Zvcih2YXIgcj0wO3I8ZS4kY2hpbGRyZW4ubGVuZ3RoO3IrKyl0KGUuJGNoaWxkcmVuW3JdKTtaZShlLFwiZGVhY3RpdmF0ZWRcIil9fShlLCEwKTplLiRkZXN0cm95KCkpfX0sVGU9T2JqZWN0LmtleXMoamUpO2Z1bmN0aW9uIEllKG8sYSxzLGMsbCl7aWYoIWUobykpe3ZhciBmPXMuJG9wdGlvbnMuX2Jhc2U7aWYoaShvKSYmKG89Zi5leHRlbmQobykpLFwiZnVuY3Rpb25cIj09dHlwZW9mIG8pe3ZhciBwO2lmKGUoby5jaWQpJiZ2b2lkIDA9PT0obz1mdW5jdGlvbih0LG8pe2lmKHIodC5lcnJvcikmJm4odC5lcnJvckNvbXApKXJldHVybiB0LmVycm9yQ29tcDtpZihuKHQucmVzb2x2ZWQpKXJldHVybiB0LnJlc29sdmVkO3ZhciBhPUZlO2EmJm4odC5vd25lcnMpJiYtMT09PXQub3duZXJzLmluZGV4T2YoYSkmJnQub3duZXJzLnB1c2goYSk7aWYocih0LmxvYWRpbmcpJiZuKHQubG9hZGluZ0NvbXApKXJldHVybiB0LmxvYWRpbmdDb21wO2lmKGEmJiFuKHQub3duZXJzKSl7dmFyIHM9dC5vd25lcnM9W2FdLGM9ITAsbD1udWxsLGY9bnVsbDthLiRvbihcImhvb2s6ZGVzdHJveWVkXCIsZnVuY3Rpb24oKXtyZXR1cm4gdihzLGEpfSk7dmFyIHA9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTAsbj1zLmxlbmd0aDtlPG47ZSsrKXNbZV0uJGZvcmNlVXBkYXRlKCk7dCYmKHMubGVuZ3RoPTAsbnVsbCE9PWwmJihjbGVhclRpbWVvdXQobCksbD1udWxsKSxudWxsIT09ZiYmKGNsZWFyVGltZW91dChmKSxmPW51bGwpKX0sZD1JKGZ1bmN0aW9uKGUpe3QucmVzb2x2ZWQ9UmUoZSxvKSxjP3MubGVuZ3RoPTA6cCghMCl9KSxoPUkoZnVuY3Rpb24oZSl7bih0LmVycm9yQ29tcCkmJih0LmVycm9yPSEwLHAoITApKX0pLG09dChkLGgpO3JldHVybiBpKG0pJiYodShtKT9lKHQucmVzb2x2ZWQpJiZtLnRoZW4oZCxoKTp1KG0uY29tcG9uZW50KSYmKG0uY29tcG9uZW50LnRoZW4oZCxoKSxuKG0uZXJyb3IpJiYodC5lcnJvckNvbXA9UmUobS5lcnJvcixvKSksbihtLmxvYWRpbmcpJiYodC5sb2FkaW5nQ29tcD1SZShtLmxvYWRpbmcsbyksMD09PW0uZGVsYXk/dC5sb2FkaW5nPSEwOmw9c2V0VGltZW91dChmdW5jdGlvbigpe2w9bnVsbCxlKHQucmVzb2x2ZWQpJiZlKHQuZXJyb3IpJiYodC5sb2FkaW5nPSEwLHAoITEpKX0sbS5kZWxheXx8MjAwKSksbihtLnRpbWVvdXQpJiYoZj1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7Zj1udWxsLGUodC5yZXNvbHZlZCkmJmgobnVsbCl9LG0udGltZW91dCkpKSksYz0hMSx0LmxvYWRpbmc/dC5sb2FkaW5nQ29tcDp0LnJlc29sdmVkfX0ocD1vLGYpKSlyZXR1cm4gZnVuY3Rpb24odCxlLG4scixvKXt2YXIgaT1wdCgpO3JldHVybiBpLmFzeW5jRmFjdG9yeT10LGkuYXN5bmNNZXRhPXtkYXRhOmUsY29udGV4dDpuLGNoaWxkcmVuOnIsdGFnOm99LGl9KHAsYSxzLGMsbCk7YT1hfHx7fSxfbihvKSxuKGEubW9kZWwpJiZmdW5jdGlvbih0LGUpe3ZhciByPXQubW9kZWwmJnQubW9kZWwucHJvcHx8XCJ2YWx1ZVwiLG89dC5tb2RlbCYmdC5tb2RlbC5ldmVudHx8XCJpbnB1dFwiOyhlLmF0dHJzfHwoZS5hdHRycz17fSkpW3JdPWUubW9kZWwudmFsdWU7dmFyIGk9ZS5vbnx8KGUub249e30pLGE9aVtvXSxzPWUubW9kZWwuY2FsbGJhY2s7bihhKT8oQXJyYXkuaXNBcnJheShhKT8tMT09PWEuaW5kZXhPZihzKTphIT09cykmJihpW29dPVtzXS5jb25jYXQoYSkpOmlbb109c30oby5vcHRpb25zLGEpO3ZhciBkPWZ1bmN0aW9uKHQscixvKXt2YXIgaT1yLm9wdGlvbnMucHJvcHM7aWYoIWUoaSkpe3ZhciBhPXt9LHM9dC5hdHRycyxjPXQucHJvcHM7aWYobihzKXx8bihjKSlmb3IodmFyIHUgaW4gaSl7dmFyIGw9JCh1KTtyZShhLGMsdSxsLCEwKXx8cmUoYSxzLHUsbCwhMSl9cmV0dXJuIGF9fShhLG8pO2lmKHIoby5vcHRpb25zLmZ1bmN0aW9uYWwpKXJldHVybiBmdW5jdGlvbihlLHIsbyxpLGEpe3ZhciBzPWUub3B0aW9ucyxjPXt9LHU9cy5wcm9wcztpZihuKHUpKWZvcih2YXIgbCBpbiB1KWNbbF09RHQobCx1LHJ8fHQpO2Vsc2UgbihvLmF0dHJzKSYmRWUoYyxvLmF0dHJzKSxuKG8ucHJvcHMpJiZFZShjLG8ucHJvcHMpO3ZhciBmPW5ldyBrZShvLGMsYSxpLGUpLHA9cy5yZW5kZXIuY2FsbChudWxsLGYuX2MsZik7aWYocCBpbnN0YW5jZW9mIGx0KXJldHVybiBTZShwLG8sZi5wYXJlbnQscyk7aWYoQXJyYXkuaXNBcnJheShwKSl7Zm9yKHZhciBkPW9lKHApfHxbXSx2PW5ldyBBcnJheShkLmxlbmd0aCksaD0wO2g8ZC5sZW5ndGg7aCsrKXZbaF09U2UoZFtoXSxvLGYucGFyZW50LHMpO3JldHVybiB2fX0obyxkLGEscyxjKTt2YXIgaD1hLm9uO2lmKGEub249YS5uYXRpdmVPbixyKG8ub3B0aW9ucy5hYnN0cmFjdCkpe3ZhciBtPWEuc2xvdDthPXt9LG0mJihhLnNsb3Q9bSl9IWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10Lmhvb2t8fCh0Lmhvb2s9e30pLG49MDtuPFRlLmxlbmd0aDtuKyspe3ZhciByPVRlW25dLG89ZVtyXSxpPWplW3JdO289PT1pfHxvJiZvLl9tZXJnZWR8fChlW3JdPW8/RGUoaSxvKTppKX19KGEpO3ZhciB5PW8ub3B0aW9ucy5uYW1lfHxsO3JldHVybiBuZXcgbHQoXCJ2dWUtY29tcG9uZW50LVwiK28uY2lkKyh5P1wiLVwiK3k6XCJcIiksYSx2b2lkIDAsdm9pZCAwLHZvaWQgMCxzLHtDdG9yOm8scHJvcHNEYXRhOmQsbGlzdGVuZXJzOmgsdGFnOmwsY2hpbGRyZW46Y30scCl9fX1mdW5jdGlvbiBEZSh0LGUpe3ZhciBuPWZ1bmN0aW9uKG4scil7dChuLHIpLGUobixyKX07cmV0dXJuIG4uX21lcmdlZD0hMCxufXZhciBOZT0xLFBlPTI7ZnVuY3Rpb24gTGUodCxhLHMsYyx1LGwpe3JldHVybihBcnJheS5pc0FycmF5KHMpfHxvKHMpKSYmKHU9YyxjPXMscz12b2lkIDApLHIobCkmJih1PVBlKSxmdW5jdGlvbih0LG8sYSxzLGMpe2lmKG4oYSkmJm4oYS5fX29iX18pKXJldHVybiBwdCgpO24oYSkmJm4oYS5pcykmJihvPWEuaXMpO2lmKCFvKXJldHVybiBwdCgpO0FycmF5LmlzQXJyYXkocykmJlwiZnVuY3Rpb25cIj09dHlwZW9mIHNbMF0mJigoYT1hfHx7fSkuc2NvcGVkU2xvdHM9e2RlZmF1bHQ6c1swXX0scy5sZW5ndGg9MCk7Yz09PVBlP3M9b2Uocyk6Yz09PU5lJiYocz1mdW5jdGlvbih0KXtmb3IodmFyIGU9MDtlPHQubGVuZ3RoO2UrKylpZihBcnJheS5pc0FycmF5KHRbZV0pKXJldHVybiBBcnJheS5wcm90b3R5cGUuY29uY2F0LmFwcGx5KFtdLHQpO3JldHVybiB0fShzKSk7dmFyIHUsbDtpZihcInN0cmluZ1wiPT10eXBlb2Ygbyl7dmFyIGY7bD10LiR2bm9kZSYmdC4kdm5vZGUubnN8fEwuZ2V0VGFnTmFtZXNwYWNlKG8pLHU9TC5pc1Jlc2VydmVkVGFnKG8pP25ldyBsdChMLnBhcnNlUGxhdGZvcm1UYWdOYW1lKG8pLGEscyx2b2lkIDAsdm9pZCAwLHQpOmEmJmEucHJlfHwhbihmPUl0KHQuJG9wdGlvbnMsXCJjb21wb25lbnRzXCIsbykpP25ldyBsdChvLGEscyx2b2lkIDAsdm9pZCAwLHQpOkllKGYsYSx0LHMsbyl9ZWxzZSB1PUllKG8sYSx0LHMpO3JldHVybiBBcnJheS5pc0FycmF5KHUpP3U6bih1KT8obihsKSYmZnVuY3Rpb24gdChvLGksYSl7by5ucz1pO1wiZm9yZWlnbk9iamVjdFwiPT09by50YWcmJihpPXZvaWQgMCxhPSEwKTtpZihuKG8uY2hpbGRyZW4pKWZvcih2YXIgcz0wLGM9by5jaGlsZHJlbi5sZW5ndGg7czxjO3MrKyl7dmFyIHU9by5jaGlsZHJlbltzXTtuKHUudGFnKSYmKGUodS5ucyl8fHIoYSkmJlwic3ZnXCIhPT11LnRhZykmJnQodSxpLGEpfX0odSxsKSxuKGEpJiZmdW5jdGlvbih0KXtpKHQuc3R5bGUpJiZRdCh0LnN0eWxlKTtpKHQuY2xhc3MpJiZRdCh0LmNsYXNzKX0oYSksdSk6cHQoKX0odCxhLHMsYyx1KX12YXIgTWUsRmU9bnVsbDtmdW5jdGlvbiBSZSh0LGUpe3JldHVybih0Ll9fZXNNb2R1bGV8fHJ0JiZcIk1vZHVsZVwiPT09dFtTeW1ib2wudG9TdHJpbmdUYWddKSYmKHQ9dC5kZWZhdWx0KSxpKHQpP2UuZXh0ZW5kKHQpOnR9ZnVuY3Rpb24gVWUodCl7cmV0dXJuIHQuaXNDb21tZW50JiZ0LmFzeW5jRmFjdG9yeX1mdW5jdGlvbiBIZSh0KXtpZihBcnJheS5pc0FycmF5KHQpKWZvcih2YXIgZT0wO2U8dC5sZW5ndGg7ZSsrKXt2YXIgcj10W2VdO2lmKG4ocikmJihuKHIuY29tcG9uZW50T3B0aW9ucyl8fFVlKHIpKSlyZXR1cm4gcn19ZnVuY3Rpb24gQmUodCxlKXtNZS4kb24odCxlKX1mdW5jdGlvbiBWZSh0LGUpe01lLiRvZmYodCxlKX1mdW5jdGlvbiB6ZSh0LGUpe3ZhciBuPU1lO3JldHVybiBmdW5jdGlvbiByKCl7bnVsbCE9PWUuYXBwbHkobnVsbCxhcmd1bWVudHMpJiZuLiRvZmYodCxyKX19ZnVuY3Rpb24gV2UodCxlLG4pe01lPXQsZWUoZSxufHx7fSxCZSxWZSx6ZSx0KSxNZT12b2lkIDB9dmFyIHFlPW51bGw7ZnVuY3Rpb24gS2UodCl7dmFyIGU9cWU7cmV0dXJuIHFlPXQsZnVuY3Rpb24oKXtxZT1lfX1mdW5jdGlvbiBYZSh0KXtmb3IoO3QmJih0PXQuJHBhcmVudCk7KWlmKHQuX2luYWN0aXZlKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIEdlKHQsZSl7aWYoZSl7aWYodC5fZGlyZWN0SW5hY3RpdmU9ITEsWGUodCkpcmV0dXJufWVsc2UgaWYodC5fZGlyZWN0SW5hY3RpdmUpcmV0dXJuO2lmKHQuX2luYWN0aXZlfHxudWxsPT09dC5faW5hY3RpdmUpe3QuX2luYWN0aXZlPSExO2Zvcih2YXIgbj0wO248dC4kY2hpbGRyZW4ubGVuZ3RoO24rKylHZSh0LiRjaGlsZHJlbltuXSk7WmUodCxcImFjdGl2YXRlZFwiKX19ZnVuY3Rpb24gWmUodCxlKXtjdCgpO3ZhciBuPXQuJG9wdGlvbnNbZV0scj1lK1wiIGhvb2tcIjtpZihuKWZvcih2YXIgbz0wLGk9bi5sZW5ndGg7bzxpO28rKylGdChuW29dLHQsbnVsbCx0LHIpO3QuX2hhc0hvb2tFdmVudCYmdC4kZW1pdChcImhvb2s6XCIrZSksdXQoKX12YXIgSmU9W10sUWU9W10sWWU9e30sdG49ITEsZW49ITEsbm49MDt2YXIgcm49MCxvbj1EYXRlLm5vdztpZihIJiYhVyl7dmFyIGFuPXdpbmRvdy5wZXJmb3JtYW5jZTthbiYmXCJmdW5jdGlvblwiPT10eXBlb2YgYW4ubm93JiZvbigpPmRvY3VtZW50LmNyZWF0ZUV2ZW50KFwiRXZlbnRcIikudGltZVN0YW1wJiYob249ZnVuY3Rpb24oKXtyZXR1cm4gYW4ubm93KCl9KX1mdW5jdGlvbiBzbigpe3ZhciB0LGU7Zm9yKHJuPW9uKCksZW49ITAsSmUuc29ydChmdW5jdGlvbih0LGUpe3JldHVybiB0LmlkLWUuaWR9KSxubj0wO25uPEplLmxlbmd0aDtubisrKSh0PUplW25uXSkuYmVmb3JlJiZ0LmJlZm9yZSgpLGU9dC5pZCxZZVtlXT1udWxsLHQucnVuKCk7dmFyIG49UWUuc2xpY2UoKSxyPUplLnNsaWNlKCk7bm49SmUubGVuZ3RoPVFlLmxlbmd0aD0wLFllPXt9LHRuPWVuPSExLGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wO2U8dC5sZW5ndGg7ZSsrKXRbZV0uX2luYWN0aXZlPSEwLEdlKHRbZV0sITApfShuKSxmdW5jdGlvbih0KXt2YXIgZT10Lmxlbmd0aDtmb3IoO2UtLTspe3ZhciBuPXRbZV0scj1uLnZtO3IuX3dhdGNoZXI9PT1uJiZyLl9pc01vdW50ZWQmJiFyLl9pc0Rlc3Ryb3llZCYmWmUocixcInVwZGF0ZWRcIil9fShyKSx0dCYmTC5kZXZ0b29scyYmdHQuZW1pdChcImZsdXNoXCIpfXZhciBjbj0wLHVuPWZ1bmN0aW9uKHQsZSxuLHIsbyl7dGhpcy52bT10LG8mJih0Ll93YXRjaGVyPXRoaXMpLHQuX3dhdGNoZXJzLnB1c2godGhpcykscj8odGhpcy5kZWVwPSEhci5kZWVwLHRoaXMudXNlcj0hIXIudXNlcix0aGlzLmxhenk9ISFyLmxhenksdGhpcy5zeW5jPSEhci5zeW5jLHRoaXMuYmVmb3JlPXIuYmVmb3JlKTp0aGlzLmRlZXA9dGhpcy51c2VyPXRoaXMubGF6eT10aGlzLnN5bmM9ITEsdGhpcy5jYj1uLHRoaXMuaWQ9Kytjbix0aGlzLmFjdGl2ZT0hMCx0aGlzLmRpcnR5PXRoaXMubGF6eSx0aGlzLmRlcHM9W10sdGhpcy5uZXdEZXBzPVtdLHRoaXMuZGVwSWRzPW5ldyBudCx0aGlzLm5ld0RlcElkcz1uZXcgbnQsdGhpcy5leHByZXNzaW9uPVwiXCIsXCJmdW5jdGlvblwiPT10eXBlb2YgZT90aGlzLmdldHRlcj1lOih0aGlzLmdldHRlcj1mdW5jdGlvbih0KXtpZighRi50ZXN0KHQpKXt2YXIgZT10LnNwbGl0KFwiLlwiKTtyZXR1cm4gZnVuY3Rpb24odCl7Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKyspe2lmKCF0KXJldHVybjt0PXRbZVtuXV19cmV0dXJuIHR9fX0oZSksdGhpcy5nZXR0ZXJ8fCh0aGlzLmdldHRlcj1rKSksdGhpcy52YWx1ZT10aGlzLmxhenk/dm9pZCAwOnRoaXMuZ2V0KCl9O3VuLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oKXt2YXIgdDtjdCh0aGlzKTt2YXIgZT10aGlzLnZtO3RyeXt0PXRoaXMuZ2V0dGVyLmNhbGwoZSxlKX1jYXRjaCh0KXtpZighdGhpcy51c2VyKXRocm93IHQ7TXQodCxlLCdnZXR0ZXIgZm9yIHdhdGNoZXIgXCInK3RoaXMuZXhwcmVzc2lvbisnXCInKX1maW5hbGx5e3RoaXMuZGVlcCYmUXQodCksdXQoKSx0aGlzLmNsZWFudXBEZXBzKCl9cmV0dXJuIHR9LHVuLnByb3RvdHlwZS5hZGREZXA9ZnVuY3Rpb24odCl7dmFyIGU9dC5pZDt0aGlzLm5ld0RlcElkcy5oYXMoZSl8fCh0aGlzLm5ld0RlcElkcy5hZGQoZSksdGhpcy5uZXdEZXBzLnB1c2godCksdGhpcy5kZXBJZHMuaGFzKGUpfHx0LmFkZFN1Yih0aGlzKSl9LHVuLnByb3RvdHlwZS5jbGVhbnVwRGVwcz1mdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLmRlcHMubGVuZ3RoO3QtLTspe3ZhciBlPXRoaXMuZGVwc1t0XTt0aGlzLm5ld0RlcElkcy5oYXMoZS5pZCl8fGUucmVtb3ZlU3ViKHRoaXMpfXZhciBuPXRoaXMuZGVwSWRzO3RoaXMuZGVwSWRzPXRoaXMubmV3RGVwSWRzLHRoaXMubmV3RGVwSWRzPW4sdGhpcy5uZXdEZXBJZHMuY2xlYXIoKSxuPXRoaXMuZGVwcyx0aGlzLmRlcHM9dGhpcy5uZXdEZXBzLHRoaXMubmV3RGVwcz1uLHRoaXMubmV3RGVwcy5sZW5ndGg9MH0sdW4ucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbigpe3RoaXMubGF6eT90aGlzLmRpcnR5PSEwOnRoaXMuc3luYz90aGlzLnJ1bigpOmZ1bmN0aW9uKHQpe3ZhciBlPXQuaWQ7aWYobnVsbD09WWVbZV0pe2lmKFllW2VdPSEwLGVuKXtmb3IodmFyIG49SmUubGVuZ3RoLTE7bj5ubiYmSmVbbl0uaWQ+dC5pZDspbi0tO0plLnNwbGljZShuKzEsMCx0KX1lbHNlIEplLnB1c2godCk7dG58fCh0bj0hMCxadChzbikpfX0odGhpcyl9LHVuLnByb3RvdHlwZS5ydW49ZnVuY3Rpb24oKXtpZih0aGlzLmFjdGl2ZSl7dmFyIHQ9dGhpcy5nZXQoKTtpZih0IT09dGhpcy52YWx1ZXx8aSh0KXx8dGhpcy5kZWVwKXt2YXIgZT10aGlzLnZhbHVlO2lmKHRoaXMudmFsdWU9dCx0aGlzLnVzZXIpdHJ5e3RoaXMuY2IuY2FsbCh0aGlzLnZtLHQsZSl9Y2F0Y2godCl7TXQodCx0aGlzLnZtLCdjYWxsYmFjayBmb3Igd2F0Y2hlciBcIicrdGhpcy5leHByZXNzaW9uKydcIicpfWVsc2UgdGhpcy5jYi5jYWxsKHRoaXMudm0sdCxlKX19fSx1bi5wcm90b3R5cGUuZXZhbHVhdGU9ZnVuY3Rpb24oKXt0aGlzLnZhbHVlPXRoaXMuZ2V0KCksdGhpcy5kaXJ0eT0hMX0sdW4ucHJvdG90eXBlLmRlcGVuZD1mdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLmRlcHMubGVuZ3RoO3QtLTspdGhpcy5kZXBzW3RdLmRlcGVuZCgpfSx1bi5wcm90b3R5cGUudGVhcmRvd249ZnVuY3Rpb24oKXtpZih0aGlzLmFjdGl2ZSl7dGhpcy52bS5faXNCZWluZ0Rlc3Ryb3llZHx8dih0aGlzLnZtLl93YXRjaGVycyx0aGlzKTtmb3IodmFyIHQ9dGhpcy5kZXBzLmxlbmd0aDt0LS07KXRoaXMuZGVwc1t0XS5yZW1vdmVTdWIodGhpcyk7dGhpcy5hY3RpdmU9ITF9fTt2YXIgbG49e2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLGdldDprLHNldDprfTtmdW5jdGlvbiBmbih0LGUsbil7bG4uZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXNbZV1bbl19LGxuLnNldD1mdW5jdGlvbih0KXt0aGlzW2VdW25dPXR9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LG4sbG4pfWZ1bmN0aW9uIHBuKHQpe3QuX3dhdGNoZXJzPVtdO3ZhciBlPXQuJG9wdGlvbnM7ZS5wcm9wcyYmZnVuY3Rpb24odCxlKXt2YXIgbj10LiRvcHRpb25zLnByb3BzRGF0YXx8e30scj10Ll9wcm9wcz17fSxvPXQuJG9wdGlvbnMuX3Byb3BLZXlzPVtdO3QuJHBhcmVudCYmX3QoITEpO3ZhciBpPWZ1bmN0aW9uKGkpe28ucHVzaChpKTt2YXIgYT1EdChpLGUsbix0KTskdChyLGksYSksaSBpbiB0fHxmbih0LFwiX3Byb3BzXCIsaSl9O2Zvcih2YXIgYSBpbiBlKWkoYSk7X3QoITApfSh0LGUucHJvcHMpLGUubWV0aG9kcyYmZnVuY3Rpb24odCxlKXt0LiRvcHRpb25zLnByb3BzO2Zvcih2YXIgbiBpbiBlKXRbbl09XCJmdW5jdGlvblwiIT10eXBlb2YgZVtuXT9rOncoZVtuXSx0KX0odCxlLm1ldGhvZHMpLGUuZGF0YT9mdW5jdGlvbih0KXt2YXIgZT10LiRvcHRpb25zLmRhdGE7cyhlPXQuX2RhdGE9XCJmdW5jdGlvblwiPT10eXBlb2YgZT9mdW5jdGlvbih0LGUpe2N0KCk7dHJ5e3JldHVybiB0LmNhbGwoZSxlKX1jYXRjaCh0KXtyZXR1cm4gTXQodCxlLFwiZGF0YSgpXCIpLHt9fWZpbmFsbHl7dXQoKX19KGUsdCk6ZXx8e30pfHwoZT17fSk7dmFyIG49T2JqZWN0LmtleXMoZSkscj10LiRvcHRpb25zLnByb3BzLG89KHQuJG9wdGlvbnMubWV0aG9kcyxuLmxlbmd0aCk7Zm9yKDtvLS07KXt2YXIgaT1uW29dO3ImJm0ocixpKXx8KGE9dm9pZCAwLDM2IT09KGE9KGkrXCJcIikuY2hhckNvZGVBdCgwKSkmJjk1IT09YSYmZm4odCxcIl9kYXRhXCIsaSkpfXZhciBhO0N0KGUsITApfSh0KTpDdCh0Ll9kYXRhPXt9LCEwKSxlLmNvbXB1dGVkJiZmdW5jdGlvbih0LGUpe3ZhciBuPXQuX2NvbXB1dGVkV2F0Y2hlcnM9T2JqZWN0LmNyZWF0ZShudWxsKSxyPVkoKTtmb3IodmFyIG8gaW4gZSl7dmFyIGk9ZVtvXSxhPVwiZnVuY3Rpb25cIj09dHlwZW9mIGk/aTppLmdldDtyfHwobltvXT1uZXcgdW4odCxhfHxrLGssZG4pKSxvIGluIHR8fHZuKHQsbyxpKX19KHQsZS5jb21wdXRlZCksZS53YXRjaCYmZS53YXRjaCE9PVomJmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuIGluIGUpe3ZhciByPWVbbl07aWYoQXJyYXkuaXNBcnJheShyKSlmb3IodmFyIG89MDtvPHIubGVuZ3RoO28rKyl5bih0LG4scltvXSk7ZWxzZSB5bih0LG4scil9fSh0LGUud2F0Y2gpfXZhciBkbj17bGF6eTohMH07ZnVuY3Rpb24gdm4odCxlLG4pe3ZhciByPSFZKCk7XCJmdW5jdGlvblwiPT10eXBlb2Ygbj8obG4uZ2V0PXI/aG4oZSk6bW4obiksbG4uc2V0PWspOihsbi5nZXQ9bi5nZXQ/ciYmITEhPT1uLmNhY2hlP2huKGUpOm1uKG4uZ2V0KTprLGxuLnNldD1uLnNldHx8ayksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsZSxsbil9ZnVuY3Rpb24gaG4odCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fY29tcHV0ZWRXYXRjaGVycyYmdGhpcy5fY29tcHV0ZWRXYXRjaGVyc1t0XTtpZihlKXJldHVybiBlLmRpcnR5JiZlLmV2YWx1YXRlKCksYXQudGFyZ2V0JiZlLmRlcGVuZCgpLGUudmFsdWV9fWZ1bmN0aW9uIG1uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0LmNhbGwodGhpcyx0aGlzKX19ZnVuY3Rpb24geW4odCxlLG4scil7cmV0dXJuIHMobikmJihyPW4sbj1uLmhhbmRsZXIpLFwic3RyaW5nXCI9PXR5cGVvZiBuJiYobj10W25dKSx0LiR3YXRjaChlLG4scil9dmFyIGduPTA7ZnVuY3Rpb24gX24odCl7dmFyIGU9dC5vcHRpb25zO2lmKHQuc3VwZXIpe3ZhciBuPV9uKHQuc3VwZXIpO2lmKG4hPT10LnN1cGVyT3B0aW9ucyl7dC5zdXBlck9wdGlvbnM9bjt2YXIgcj1mdW5jdGlvbih0KXt2YXIgZSxuPXQub3B0aW9ucyxyPXQuc2VhbGVkT3B0aW9ucztmb3IodmFyIG8gaW4gbiluW29dIT09cltvXSYmKGV8fChlPXt9KSxlW29dPW5bb10pO3JldHVybiBlfSh0KTtyJiZ4KHQuZXh0ZW5kT3B0aW9ucyxyKSwoZT10Lm9wdGlvbnM9VHQobix0LmV4dGVuZE9wdGlvbnMpKS5uYW1lJiYoZS5jb21wb25lbnRzW2UubmFtZV09dCl9fXJldHVybiBlfWZ1bmN0aW9uIGJuKHQpe3RoaXMuX2luaXQodCl9ZnVuY3Rpb24gQ24odCl7dC5jaWQ9MDt2YXIgZT0xO3QuZXh0ZW5kPWZ1bmN0aW9uKHQpe3Q9dHx8e307dmFyIG49dGhpcyxyPW4uY2lkLG89dC5fQ3Rvcnx8KHQuX0N0b3I9e30pO2lmKG9bcl0pcmV0dXJuIG9bcl07dmFyIGk9dC5uYW1lfHxuLm9wdGlvbnMubmFtZSxhPWZ1bmN0aW9uKHQpe3RoaXMuX2luaXQodCl9O3JldHVybihhLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKG4ucHJvdG90eXBlKSkuY29uc3RydWN0b3I9YSxhLmNpZD1lKyssYS5vcHRpb25zPVR0KG4ub3B0aW9ucyx0KSxhLnN1cGVyPW4sYS5vcHRpb25zLnByb3BzJiZmdW5jdGlvbih0KXt2YXIgZT10Lm9wdGlvbnMucHJvcHM7Zm9yKHZhciBuIGluIGUpZm4odC5wcm90b3R5cGUsXCJfcHJvcHNcIixuKX0oYSksYS5vcHRpb25zLmNvbXB1dGVkJiZmdW5jdGlvbih0KXt2YXIgZT10Lm9wdGlvbnMuY29tcHV0ZWQ7Zm9yKHZhciBuIGluIGUpdm4odC5wcm90b3R5cGUsbixlW25dKX0oYSksYS5leHRlbmQ9bi5leHRlbmQsYS5taXhpbj1uLm1peGluLGEudXNlPW4udXNlLE4uZm9yRWFjaChmdW5jdGlvbih0KXthW3RdPW5bdF19KSxpJiYoYS5vcHRpb25zLmNvbXBvbmVudHNbaV09YSksYS5zdXBlck9wdGlvbnM9bi5vcHRpb25zLGEuZXh0ZW5kT3B0aW9ucz10LGEuc2VhbGVkT3B0aW9ucz14KHt9LGEub3B0aW9ucyksb1tyXT1hLGF9fWZ1bmN0aW9uICRuKHQpe3JldHVybiB0JiYodC5DdG9yLm9wdGlvbnMubmFtZXx8dC50YWcpfWZ1bmN0aW9uIHduKHQsZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkodCk/dC5pbmRleE9mKGUpPi0xOlwic3RyaW5nXCI9PXR5cGVvZiB0P3Quc3BsaXQoXCIsXCIpLmluZGV4T2YoZSk+LTE6KG49dCxcIltvYmplY3QgUmVnRXhwXVwiPT09YS5jYWxsKG4pJiZ0LnRlc3QoZSkpO3ZhciBufWZ1bmN0aW9uIEFuKHQsZSl7dmFyIG49dC5jYWNoZSxyPXQua2V5cyxvPXQuX3Zub2RlO2Zvcih2YXIgaSBpbiBuKXt2YXIgYT1uW2ldO2lmKGEpe3ZhciBzPSRuKGEuY29tcG9uZW50T3B0aW9ucyk7cyYmIWUocykmJnhuKG4saSxyLG8pfX19ZnVuY3Rpb24geG4odCxlLG4scil7dmFyIG89dFtlXTshb3x8ciYmby50YWc9PT1yLnRhZ3x8by5jb21wb25lbnRJbnN0YW5jZS4kZGVzdHJveSgpLHRbZV09bnVsbCx2KG4sZSl9IWZ1bmN0aW9uKGUpe2UucHJvdG90eXBlLl9pbml0PWZ1bmN0aW9uKGUpe3ZhciBuPXRoaXM7bi5fdWlkPWduKyssbi5faXNWdWU9ITAsZSYmZS5faXNDb21wb25lbnQ/ZnVuY3Rpb24odCxlKXt2YXIgbj10LiRvcHRpb25zPU9iamVjdC5jcmVhdGUodC5jb25zdHJ1Y3Rvci5vcHRpb25zKSxyPWUuX3BhcmVudFZub2RlO24ucGFyZW50PWUucGFyZW50LG4uX3BhcmVudFZub2RlPXI7dmFyIG89ci5jb21wb25lbnRPcHRpb25zO24ucHJvcHNEYXRhPW8ucHJvcHNEYXRhLG4uX3BhcmVudExpc3RlbmVycz1vLmxpc3RlbmVycyxuLl9yZW5kZXJDaGlsZHJlbj1vLmNoaWxkcmVuLG4uX2NvbXBvbmVudFRhZz1vLnRhZyxlLnJlbmRlciYmKG4ucmVuZGVyPWUucmVuZGVyLG4uc3RhdGljUmVuZGVyRm5zPWUuc3RhdGljUmVuZGVyRm5zKX0obixlKTpuLiRvcHRpb25zPVR0KF9uKG4uY29uc3RydWN0b3IpLGV8fHt9LG4pLG4uX3JlbmRlclByb3h5PW4sbi5fc2VsZj1uLGZ1bmN0aW9uKHQpe3ZhciBlPXQuJG9wdGlvbnMsbj1lLnBhcmVudDtpZihuJiYhZS5hYnN0cmFjdCl7Zm9yKDtuLiRvcHRpb25zLmFic3RyYWN0JiZuLiRwYXJlbnQ7KW49bi4kcGFyZW50O24uJGNoaWxkcmVuLnB1c2godCl9dC4kcGFyZW50PW4sdC4kcm9vdD1uP24uJHJvb3Q6dCx0LiRjaGlsZHJlbj1bXSx0LiRyZWZzPXt9LHQuX3dhdGNoZXI9bnVsbCx0Ll9pbmFjdGl2ZT1udWxsLHQuX2RpcmVjdEluYWN0aXZlPSExLHQuX2lzTW91bnRlZD0hMSx0Ll9pc0Rlc3Ryb3llZD0hMSx0Ll9pc0JlaW5nRGVzdHJveWVkPSExfShuKSxmdW5jdGlvbih0KXt0Ll9ldmVudHM9T2JqZWN0LmNyZWF0ZShudWxsKSx0Ll9oYXNIb29rRXZlbnQ9ITE7dmFyIGU9dC4kb3B0aW9ucy5fcGFyZW50TGlzdGVuZXJzO2UmJldlKHQsZSl9KG4pLGZ1bmN0aW9uKGUpe2UuX3Zub2RlPW51bGwsZS5fc3RhdGljVHJlZXM9bnVsbDt2YXIgbj1lLiRvcHRpb25zLHI9ZS4kdm5vZGU9bi5fcGFyZW50Vm5vZGUsbz1yJiZyLmNvbnRleHQ7ZS4kc2xvdHM9c2Uobi5fcmVuZGVyQ2hpbGRyZW4sbyksZS4kc2NvcGVkU2xvdHM9dCxlLl9jPWZ1bmN0aW9uKHQsbixyLG8pe3JldHVybiBMZShlLHQsbixyLG8sITEpfSxlLiRjcmVhdGVFbGVtZW50PWZ1bmN0aW9uKHQsbixyLG8pe3JldHVybiBMZShlLHQsbixyLG8sITApfTt2YXIgaT1yJiZyLmRhdGE7JHQoZSxcIiRhdHRyc1wiLGkmJmkuYXR0cnN8fHQsbnVsbCwhMCksJHQoZSxcIiRsaXN0ZW5lcnNcIixuLl9wYXJlbnRMaXN0ZW5lcnN8fHQsbnVsbCwhMCl9KG4pLFplKG4sXCJiZWZvcmVDcmVhdGVcIiksZnVuY3Rpb24odCl7dmFyIGU9YWUodC4kb3B0aW9ucy5pbmplY3QsdCk7ZSYmKF90KCExKSxPYmplY3Qua2V5cyhlKS5mb3JFYWNoKGZ1bmN0aW9uKG4peyR0KHQsbixlW25dKX0pLF90KCEwKSl9KG4pLHBuKG4pLGZ1bmN0aW9uKHQpe3ZhciBlPXQuJG9wdGlvbnMucHJvdmlkZTtlJiYodC5fcHJvdmlkZWQ9XCJmdW5jdGlvblwiPT10eXBlb2YgZT9lLmNhbGwodCk6ZSl9KG4pLFplKG4sXCJjcmVhdGVkXCIpLG4uJG9wdGlvbnMuZWwmJm4uJG1vdW50KG4uJG9wdGlvbnMuZWwpfX0oYm4pLGZ1bmN0aW9uKHQpe3ZhciBlPXtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGF0YX19LG49e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wcm9wc319O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSxcIiRkYXRhXCIsZSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLFwiJHByb3BzXCIsbiksdC5wcm90b3R5cGUuJHNldD13dCx0LnByb3RvdHlwZS4kZGVsZXRlPUF0LHQucHJvdG90eXBlLiR3YXRjaD1mdW5jdGlvbih0LGUsbil7aWYocyhlKSlyZXR1cm4geW4odGhpcyx0LGUsbik7KG49bnx8e30pLnVzZXI9ITA7dmFyIHI9bmV3IHVuKHRoaXMsdCxlLG4pO2lmKG4uaW1tZWRpYXRlKXRyeXtlLmNhbGwodGhpcyxyLnZhbHVlKX1jYXRjaCh0KXtNdCh0LHRoaXMsJ2NhbGxiYWNrIGZvciBpbW1lZGlhdGUgd2F0Y2hlciBcIicrci5leHByZXNzaW9uKydcIicpfXJldHVybiBmdW5jdGlvbigpe3IudGVhcmRvd24oKX19fShibiksZnVuY3Rpb24odCl7dmFyIGU9L15ob29rOi87dC5wcm90b3R5cGUuJG9uPWZ1bmN0aW9uKHQsbil7dmFyIHI9dGhpcztpZihBcnJheS5pc0FycmF5KHQpKWZvcih2YXIgbz0wLGk9dC5sZW5ndGg7bzxpO28rKylyLiRvbih0W29dLG4pO2Vsc2Uoci5fZXZlbnRzW3RdfHwoci5fZXZlbnRzW3RdPVtdKSkucHVzaChuKSxlLnRlc3QodCkmJihyLl9oYXNIb29rRXZlbnQ9ITApO3JldHVybiByfSx0LnByb3RvdHlwZS4kb25jZT1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXM7ZnVuY3Rpb24gcigpe24uJG9mZih0LHIpLGUuYXBwbHkobixhcmd1bWVudHMpfXJldHVybiByLmZuPWUsbi4kb24odCxyKSxufSx0LnByb3RvdHlwZS4kb2ZmPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcztpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gbi5fZXZlbnRzPU9iamVjdC5jcmVhdGUobnVsbCksbjtpZihBcnJheS5pc0FycmF5KHQpKXtmb3IodmFyIHI9MCxvPXQubGVuZ3RoO3I8bztyKyspbi4kb2ZmKHRbcl0sZSk7cmV0dXJuIG59dmFyIGksYT1uLl9ldmVudHNbdF07aWYoIWEpcmV0dXJuIG47aWYoIWUpcmV0dXJuIG4uX2V2ZW50c1t0XT1udWxsLG47Zm9yKHZhciBzPWEubGVuZ3RoO3MtLTspaWYoKGk9YVtzXSk9PT1lfHxpLmZuPT09ZSl7YS5zcGxpY2UocywxKTticmVha31yZXR1cm4gbn0sdC5wcm90b3R5cGUuJGVtaXQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fZXZlbnRzW3RdO2lmKGUpe2U9ZS5sZW5ndGg+MT9BKGUpOmU7Zm9yKHZhciBuPUEoYXJndW1lbnRzLDEpLHI9J2V2ZW50IGhhbmRsZXIgZm9yIFwiJyt0KydcIicsbz0wLGk9ZS5sZW5ndGg7bzxpO28rKylGdChlW29dLHRoaXMsbix0aGlzLHIpfXJldHVybiB0aGlzfX0oYm4pLGZ1bmN0aW9uKHQpe3QucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLHI9bi4kZWwsbz1uLl92bm9kZSxpPUtlKG4pO24uX3Zub2RlPXQsbi4kZWw9bz9uLl9fcGF0Y2hfXyhvLHQpOm4uX19wYXRjaF9fKG4uJGVsLHQsZSwhMSksaSgpLHImJihyLl9fdnVlX189bnVsbCksbi4kZWwmJihuLiRlbC5fX3Z1ZV9fPW4pLG4uJHZub2RlJiZuLiRwYXJlbnQmJm4uJHZub2RlPT09bi4kcGFyZW50Ll92bm9kZSYmKG4uJHBhcmVudC4kZWw9bi4kZWwpfSx0LnByb3RvdHlwZS4kZm9yY2VVcGRhdGU9ZnVuY3Rpb24oKXt0aGlzLl93YXRjaGVyJiZ0aGlzLl93YXRjaGVyLnVwZGF0ZSgpfSx0LnByb3RvdHlwZS4kZGVzdHJveT1mdW5jdGlvbigpe3ZhciB0PXRoaXM7aWYoIXQuX2lzQmVpbmdEZXN0cm95ZWQpe1plKHQsXCJiZWZvcmVEZXN0cm95XCIpLHQuX2lzQmVpbmdEZXN0cm95ZWQ9ITA7dmFyIGU9dC4kcGFyZW50OyFlfHxlLl9pc0JlaW5nRGVzdHJveWVkfHx0LiRvcHRpb25zLmFic3RyYWN0fHx2KGUuJGNoaWxkcmVuLHQpLHQuX3dhdGNoZXImJnQuX3dhdGNoZXIudGVhcmRvd24oKTtmb3IodmFyIG49dC5fd2F0Y2hlcnMubGVuZ3RoO24tLTspdC5fd2F0Y2hlcnNbbl0udGVhcmRvd24oKTt0Ll9kYXRhLl9fb2JfXyYmdC5fZGF0YS5fX29iX18udm1Db3VudC0tLHQuX2lzRGVzdHJveWVkPSEwLHQuX19wYXRjaF9fKHQuX3Zub2RlLG51bGwpLFplKHQsXCJkZXN0cm95ZWRcIiksdC4kb2ZmKCksdC4kZWwmJih0LiRlbC5fX3Z1ZV9fPW51bGwpLHQuJHZub2RlJiYodC4kdm5vZGUucGFyZW50PW51bGwpfX19KGJuKSxmdW5jdGlvbih0KXtPZSh0LnByb3RvdHlwZSksdC5wcm90b3R5cGUuJG5leHRUaWNrPWZ1bmN0aW9uKHQpe3JldHVybiBadCh0LHRoaXMpfSx0LnByb3RvdHlwZS5fcmVuZGVyPWZ1bmN0aW9uKCl7dmFyIHQsZT10aGlzLG49ZS4kb3B0aW9ucyxyPW4ucmVuZGVyLG89bi5fcGFyZW50Vm5vZGU7byYmKGUuJHNjb3BlZFNsb3RzPXVlKG8uZGF0YS5zY29wZWRTbG90cyxlLiRzbG90cyxlLiRzY29wZWRTbG90cykpLGUuJHZub2RlPW87dHJ5e0ZlPWUsdD1yLmNhbGwoZS5fcmVuZGVyUHJveHksZS4kY3JlYXRlRWxlbWVudCl9Y2F0Y2gobil7TXQobixlLFwicmVuZGVyXCIpLHQ9ZS5fdm5vZGV9ZmluYWxseXtGZT1udWxsfXJldHVybiBBcnJheS5pc0FycmF5KHQpJiYxPT09dC5sZW5ndGgmJih0PXRbMF0pLHQgaW5zdGFuY2VvZiBsdHx8KHQ9cHQoKSksdC5wYXJlbnQ9byx0fX0oYm4pO3ZhciBPbj1bU3RyaW5nLFJlZ0V4cCxBcnJheV0sa249e0tlZXBBbGl2ZTp7bmFtZTpcImtlZXAtYWxpdmVcIixhYnN0cmFjdDohMCxwcm9wczp7aW5jbHVkZTpPbixleGNsdWRlOk9uLG1heDpbU3RyaW5nLE51bWJlcl19LGNyZWF0ZWQ6ZnVuY3Rpb24oKXt0aGlzLmNhY2hlPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5rZXlzPVtdfSxkZXN0cm95ZWQ6ZnVuY3Rpb24oKXtmb3IodmFyIHQgaW4gdGhpcy5jYWNoZSl4bih0aGlzLmNhY2hlLHQsdGhpcy5rZXlzKX0sbW91bnRlZDpmdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy4kd2F0Y2goXCJpbmNsdWRlXCIsZnVuY3Rpb24oZSl7QW4odCxmdW5jdGlvbih0KXtyZXR1cm4gd24oZSx0KX0pfSksdGhpcy4kd2F0Y2goXCJleGNsdWRlXCIsZnVuY3Rpb24oZSl7QW4odCxmdW5jdGlvbih0KXtyZXR1cm4hd24oZSx0KX0pfSl9LHJlbmRlcjpmdW5jdGlvbigpe3ZhciB0PXRoaXMuJHNsb3RzLmRlZmF1bHQsZT1IZSh0KSxuPWUmJmUuY29tcG9uZW50T3B0aW9ucztpZihuKXt2YXIgcj0kbihuKSxvPXRoaXMuaW5jbHVkZSxpPXRoaXMuZXhjbHVkZTtpZihvJiYoIXJ8fCF3bihvLHIpKXx8aSYmciYmd24oaSxyKSlyZXR1cm4gZTt2YXIgYT10aGlzLmNhY2hlLHM9dGhpcy5rZXlzLGM9bnVsbD09ZS5rZXk/bi5DdG9yLmNpZCsobi50YWc/XCI6OlwiK24udGFnOlwiXCIpOmUua2V5O2FbY10/KGUuY29tcG9uZW50SW5zdGFuY2U9YVtjXS5jb21wb25lbnRJbnN0YW5jZSx2KHMsYykscy5wdXNoKGMpKTooYVtjXT1lLHMucHVzaChjKSx0aGlzLm1heCYmcy5sZW5ndGg+cGFyc2VJbnQodGhpcy5tYXgpJiZ4bihhLHNbMF0scyx0aGlzLl92bm9kZSkpLGUuZGF0YS5rZWVwQWxpdmU9ITB9cmV0dXJuIGV8fHQmJnRbMF19fX07IWZ1bmN0aW9uKHQpe3ZhciBlPXtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gTH19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiY29uZmlnXCIsZSksdC51dGlsPXt3YXJuOm90LGV4dGVuZDp4LG1lcmdlT3B0aW9uczpUdCxkZWZpbmVSZWFjdGl2ZTokdH0sdC5zZXQ9d3QsdC5kZWxldGU9QXQsdC5uZXh0VGljaz1adCx0Lm9ic2VydmFibGU9ZnVuY3Rpb24odCl7cmV0dXJuIEN0KHQpLHR9LHQub3B0aW9ucz1PYmplY3QuY3JlYXRlKG51bGwpLE4uZm9yRWFjaChmdW5jdGlvbihlKXt0Lm9wdGlvbnNbZStcInNcIl09T2JqZWN0LmNyZWF0ZShudWxsKX0pLHQub3B0aW9ucy5fYmFzZT10LHgodC5vcHRpb25zLmNvbXBvbmVudHMsa24pLGZ1bmN0aW9uKHQpe3QudXNlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2luc3RhbGxlZFBsdWdpbnN8fCh0aGlzLl9pbnN0YWxsZWRQbHVnaW5zPVtdKTtpZihlLmluZGV4T2YodCk+LTEpcmV0dXJuIHRoaXM7dmFyIG49QShhcmd1bWVudHMsMSk7cmV0dXJuIG4udW5zaGlmdCh0aGlzKSxcImZ1bmN0aW9uXCI9PXR5cGVvZiB0Lmluc3RhbGw/dC5pbnN0YWxsLmFwcGx5KHQsbik6XCJmdW5jdGlvblwiPT10eXBlb2YgdCYmdC5hcHBseShudWxsLG4pLGUucHVzaCh0KSx0aGlzfX0odCksZnVuY3Rpb24odCl7dC5taXhpbj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5vcHRpb25zPVR0KHRoaXMub3B0aW9ucyx0KSx0aGlzfX0odCksQ24odCksZnVuY3Rpb24odCl7Ti5mb3JFYWNoKGZ1bmN0aW9uKGUpe3RbZV09ZnVuY3Rpb24odCxuKXtyZXR1cm4gbj8oXCJjb21wb25lbnRcIj09PWUmJnMobikmJihuLm5hbWU9bi5uYW1lfHx0LG49dGhpcy5vcHRpb25zLl9iYXNlLmV4dGVuZChuKSksXCJkaXJlY3RpdmVcIj09PWUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIG4mJihuPXtiaW5kOm4sdXBkYXRlOm59KSx0aGlzLm9wdGlvbnNbZStcInNcIl1bdF09bixuKTp0aGlzLm9wdGlvbnNbZStcInNcIl1bdF19fSl9KHQpfShibiksT2JqZWN0LmRlZmluZVByb3BlcnR5KGJuLnByb3RvdHlwZSxcIiRpc1NlcnZlclwiLHtnZXQ6WX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShibi5wcm90b3R5cGUsXCIkc3NyQ29udGV4dFwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kdm5vZGUmJnRoaXMuJHZub2RlLnNzckNvbnRleHR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGJuLFwiRnVuY3Rpb25hbFJlbmRlckNvbnRleHRcIix7dmFsdWU6a2V9KSxibi52ZXJzaW9uPVwiMi42LjEwXCI7dmFyIFNuPXAoXCJzdHlsZSxjbGFzc1wiKSxFbj1wKFwiaW5wdXQsdGV4dGFyZWEsb3B0aW9uLHNlbGVjdCxwcm9ncmVzc1wiKSxqbj1wKFwiY29udGVudGVkaXRhYmxlLGRyYWdnYWJsZSxzcGVsbGNoZWNrXCIpLFRuPXAoXCJldmVudHMsY2FyZXQsdHlwaW5nLHBsYWludGV4dC1vbmx5XCIpLEluPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIE1uKGUpfHxcImZhbHNlXCI9PT1lP1wiZmFsc2VcIjpcImNvbnRlbnRlZGl0YWJsZVwiPT09dCYmVG4oZSk/ZTpcInRydWVcIn0sRG49cChcImFsbG93ZnVsbHNjcmVlbixhc3luYyxhdXRvZm9jdXMsYXV0b3BsYXksY2hlY2tlZCxjb21wYWN0LGNvbnRyb2xzLGRlY2xhcmUsZGVmYXVsdCxkZWZhdWx0Y2hlY2tlZCxkZWZhdWx0bXV0ZWQsZGVmYXVsdHNlbGVjdGVkLGRlZmVyLGRpc2FibGVkLGVuYWJsZWQsZm9ybW5vdmFsaWRhdGUsaGlkZGVuLGluZGV0ZXJtaW5hdGUsaW5lcnQsaXNtYXAsaXRlbXNjb3BlLGxvb3AsbXVsdGlwbGUsbXV0ZWQsbm9ocmVmLG5vcmVzaXplLG5vc2hhZGUsbm92YWxpZGF0ZSxub3dyYXAsb3BlbixwYXVzZW9uZXhpdCxyZWFkb25seSxyZXF1aXJlZCxyZXZlcnNlZCxzY29wZWQsc2VhbWxlc3Msc2VsZWN0ZWQsc29ydGFibGUsdHJhbnNsYXRlLHRydWVzcGVlZCx0eXBlbXVzdG1hdGNoLHZpc2libGVcIiksTm49XCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCIsUG49ZnVuY3Rpb24odCl7cmV0dXJuXCI6XCI9PT10LmNoYXJBdCg1KSYmXCJ4bGlua1wiPT09dC5zbGljZSgwLDUpfSxMbj1mdW5jdGlvbih0KXtyZXR1cm4gUG4odCk/dC5zbGljZSg2LHQubGVuZ3RoKTpcIlwifSxNbj1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dHx8ITE9PT10fTtmdW5jdGlvbiBGbih0KXtmb3IodmFyIGU9dC5kYXRhLHI9dCxvPXQ7bihvLmNvbXBvbmVudEluc3RhbmNlKTspKG89by5jb21wb25lbnRJbnN0YW5jZS5fdm5vZGUpJiZvLmRhdGEmJihlPVJuKG8uZGF0YSxlKSk7Zm9yKDtuKHI9ci5wYXJlbnQpOylyJiZyLmRhdGEmJihlPVJuKGUsci5kYXRhKSk7cmV0dXJuIGZ1bmN0aW9uKHQsZSl7aWYobih0KXx8bihlKSlyZXR1cm4gVW4odCxIbihlKSk7cmV0dXJuXCJcIn0oZS5zdGF0aWNDbGFzcyxlLmNsYXNzKX1mdW5jdGlvbiBSbih0LGUpe3JldHVybntzdGF0aWNDbGFzczpVbih0LnN0YXRpY0NsYXNzLGUuc3RhdGljQ2xhc3MpLGNsYXNzOm4odC5jbGFzcyk/W3QuY2xhc3MsZS5jbGFzc106ZS5jbGFzc319ZnVuY3Rpb24gVW4odCxlKXtyZXR1cm4gdD9lP3QrXCIgXCIrZTp0OmV8fFwiXCJ9ZnVuY3Rpb24gSG4odCl7cmV0dXJuIEFycmF5LmlzQXJyYXkodCk/ZnVuY3Rpb24odCl7Zm9yKHZhciBlLHI9XCJcIixvPTAsaT10Lmxlbmd0aDtvPGk7bysrKW4oZT1Ibih0W29dKSkmJlwiXCIhPT1lJiYociYmKHIrPVwiIFwiKSxyKz1lKTtyZXR1cm4gcn0odCk6aSh0KT9mdW5jdGlvbih0KXt2YXIgZT1cIlwiO2Zvcih2YXIgbiBpbiB0KXRbbl0mJihlJiYoZSs9XCIgXCIpLGUrPW4pO3JldHVybiBlfSh0KTpcInN0cmluZ1wiPT10eXBlb2YgdD90OlwiXCJ9dmFyIEJuPXtzdmc6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLG1hdGg6XCJodHRwOi8vd3d3LnczLm9yZy8xOTk4L01hdGgvTWF0aE1MXCJ9LFZuPXAoXCJodG1sLGJvZHksYmFzZSxoZWFkLGxpbmssbWV0YSxzdHlsZSx0aXRsZSxhZGRyZXNzLGFydGljbGUsYXNpZGUsZm9vdGVyLGhlYWRlcixoMSxoMixoMyxoNCxoNSxoNixoZ3JvdXAsbmF2LHNlY3Rpb24sZGl2LGRkLGRsLGR0LGZpZ2NhcHRpb24sZmlndXJlLHBpY3R1cmUsaHIsaW1nLGxpLG1haW4sb2wscCxwcmUsdWwsYSxiLGFiYnIsYmRpLGJkbyxicixjaXRlLGNvZGUsZGF0YSxkZm4sZW0saSxrYmQsbWFyayxxLHJwLHJ0LHJ0YyxydWJ5LHMsc2FtcCxzbWFsbCxzcGFuLHN0cm9uZyxzdWIsc3VwLHRpbWUsdSx2YXIsd2JyLGFyZWEsYXVkaW8sbWFwLHRyYWNrLHZpZGVvLGVtYmVkLG9iamVjdCxwYXJhbSxzb3VyY2UsY2FudmFzLHNjcmlwdCxub3NjcmlwdCxkZWwsaW5zLGNhcHRpb24sY29sLGNvbGdyb3VwLHRhYmxlLHRoZWFkLHRib2R5LHRkLHRoLHRyLGJ1dHRvbixkYXRhbGlzdCxmaWVsZHNldCxmb3JtLGlucHV0LGxhYmVsLGxlZ2VuZCxtZXRlcixvcHRncm91cCxvcHRpb24sb3V0cHV0LHByb2dyZXNzLHNlbGVjdCx0ZXh0YXJlYSxkZXRhaWxzLGRpYWxvZyxtZW51LG1lbnVpdGVtLHN1bW1hcnksY29udGVudCxlbGVtZW50LHNoYWRvdyx0ZW1wbGF0ZSxibG9ja3F1b3RlLGlmcmFtZSx0Zm9vdFwiKSx6bj1wKFwic3ZnLGFuaW1hdGUsY2lyY2xlLGNsaXBwYXRoLGN1cnNvcixkZWZzLGRlc2MsZWxsaXBzZSxmaWx0ZXIsZm9udC1mYWNlLGZvcmVpZ25PYmplY3QsZyxnbHlwaCxpbWFnZSxsaW5lLG1hcmtlcixtYXNrLG1pc3NpbmctZ2x5cGgscGF0aCxwYXR0ZXJuLHBvbHlnb24scG9seWxpbmUscmVjdCxzd2l0Y2gsc3ltYm9sLHRleHQsdGV4dHBhdGgsdHNwYW4sdXNlLHZpZXdcIiwhMCksV249ZnVuY3Rpb24odCl7cmV0dXJuIFZuKHQpfHx6bih0KX07dmFyIHFuPU9iamVjdC5jcmVhdGUobnVsbCk7dmFyIEtuPXAoXCJ0ZXh0LG51bWJlcixwYXNzd29yZCxzZWFyY2gsZW1haWwsdGVsLHVybFwiKTt2YXIgWG49T2JqZWN0LmZyZWV6ZSh7Y3JlYXRlRWxlbWVudDpmdW5jdGlvbih0LGUpe3ZhciBuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodCk7cmV0dXJuXCJzZWxlY3RcIiE9PXQ/bjooZS5kYXRhJiZlLmRhdGEuYXR0cnMmJnZvaWQgMCE9PWUuZGF0YS5hdHRycy5tdWx0aXBsZSYmbi5zZXRBdHRyaWJ1dGUoXCJtdWx0aXBsZVwiLFwibXVsdGlwbGVcIiksbil9LGNyZWF0ZUVsZW1lbnROUzpmdW5jdGlvbih0LGUpe3JldHVybiBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoQm5bdF0sZSl9LGNyZWF0ZVRleHROb2RlOmZ1bmN0aW9uKHQpe3JldHVybiBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0KX0sY3JlYXRlQ29tbWVudDpmdW5jdGlvbih0KXtyZXR1cm4gZG9jdW1lbnQuY3JlYXRlQ29tbWVudCh0KX0saW5zZXJ0QmVmb3JlOmZ1bmN0aW9uKHQsZSxuKXt0Lmluc2VydEJlZm9yZShlLG4pfSxyZW1vdmVDaGlsZDpmdW5jdGlvbih0LGUpe3QucmVtb3ZlQ2hpbGQoZSl9LGFwcGVuZENoaWxkOmZ1bmN0aW9uKHQsZSl7dC5hcHBlbmRDaGlsZChlKX0scGFyZW50Tm9kZTpmdW5jdGlvbih0KXtyZXR1cm4gdC5wYXJlbnROb2RlfSxuZXh0U2libGluZzpmdW5jdGlvbih0KXtyZXR1cm4gdC5uZXh0U2libGluZ30sdGFnTmFtZTpmdW5jdGlvbih0KXtyZXR1cm4gdC50YWdOYW1lfSxzZXRUZXh0Q29udGVudDpmdW5jdGlvbih0LGUpe3QudGV4dENvbnRlbnQ9ZX0sc2V0U3R5bGVTY29wZTpmdW5jdGlvbih0LGUpe3Quc2V0QXR0cmlidXRlKGUsXCJcIil9fSksR249e2NyZWF0ZTpmdW5jdGlvbih0LGUpe1puKGUpfSx1cGRhdGU6ZnVuY3Rpb24odCxlKXt0LmRhdGEucmVmIT09ZS5kYXRhLnJlZiYmKFpuKHQsITApLFpuKGUpKX0sZGVzdHJveTpmdW5jdGlvbih0KXtabih0LCEwKX19O2Z1bmN0aW9uIFpuKHQsZSl7dmFyIHI9dC5kYXRhLnJlZjtpZihuKHIpKXt2YXIgbz10LmNvbnRleHQsaT10LmNvbXBvbmVudEluc3RhbmNlfHx0LmVsbSxhPW8uJHJlZnM7ZT9BcnJheS5pc0FycmF5KGFbcl0pP3YoYVtyXSxpKTphW3JdPT09aSYmKGFbcl09dm9pZCAwKTp0LmRhdGEucmVmSW5Gb3I/QXJyYXkuaXNBcnJheShhW3JdKT9hW3JdLmluZGV4T2YoaSk8MCYmYVtyXS5wdXNoKGkpOmFbcl09W2ldOmFbcl09aX19dmFyIEpuPW5ldyBsdChcIlwiLHt9LFtdKSxRbj1bXCJjcmVhdGVcIixcImFjdGl2YXRlXCIsXCJ1cGRhdGVcIixcInJlbW92ZVwiLFwiZGVzdHJveVwiXTtmdW5jdGlvbiBZbih0LG8pe3JldHVybiB0LmtleT09PW8ua2V5JiYodC50YWc9PT1vLnRhZyYmdC5pc0NvbW1lbnQ9PT1vLmlzQ29tbWVudCYmbih0LmRhdGEpPT09bihvLmRhdGEpJiZmdW5jdGlvbih0LGUpe2lmKFwiaW5wdXRcIiE9PXQudGFnKXJldHVybiEwO3ZhciByLG89bihyPXQuZGF0YSkmJm4ocj1yLmF0dHJzKSYmci50eXBlLGk9bihyPWUuZGF0YSkmJm4ocj1yLmF0dHJzKSYmci50eXBlO3JldHVybiBvPT09aXx8S24obykmJktuKGkpfSh0LG8pfHxyKHQuaXNBc3luY1BsYWNlaG9sZGVyKSYmdC5hc3luY0ZhY3Rvcnk9PT1vLmFzeW5jRmFjdG9yeSYmZShvLmFzeW5jRmFjdG9yeS5lcnJvcikpfWZ1bmN0aW9uIHRyKHQsZSxyKXt2YXIgbyxpLGE9e307Zm9yKG89ZTtvPD1yOysrbyluKGk9dFtvXS5rZXkpJiYoYVtpXT1vKTtyZXR1cm4gYX12YXIgZXI9e2NyZWF0ZTpucix1cGRhdGU6bnIsZGVzdHJveTpmdW5jdGlvbih0KXtucih0LEpuKX19O2Z1bmN0aW9uIG5yKHQsZSl7KHQuZGF0YS5kaXJlY3RpdmVzfHxlLmRhdGEuZGlyZWN0aXZlcykmJmZ1bmN0aW9uKHQsZSl7dmFyIG4scixvLGk9dD09PUpuLGE9ZT09PUpuLHM9b3IodC5kYXRhLmRpcmVjdGl2ZXMsdC5jb250ZXh0KSxjPW9yKGUuZGF0YS5kaXJlY3RpdmVzLGUuY29udGV4dCksdT1bXSxsPVtdO2ZvcihuIGluIGMpcj1zW25dLG89Y1tuXSxyPyhvLm9sZFZhbHVlPXIudmFsdWUsby5vbGRBcmc9ci5hcmcsYXIobyxcInVwZGF0ZVwiLGUsdCksby5kZWYmJm8uZGVmLmNvbXBvbmVudFVwZGF0ZWQmJmwucHVzaChvKSk6KGFyKG8sXCJiaW5kXCIsZSx0KSxvLmRlZiYmby5kZWYuaW5zZXJ0ZWQmJnUucHVzaChvKSk7aWYodS5sZW5ndGgpe3ZhciBmPWZ1bmN0aW9uKCl7Zm9yKHZhciBuPTA7bjx1Lmxlbmd0aDtuKyspYXIodVtuXSxcImluc2VydGVkXCIsZSx0KX07aT9uZShlLFwiaW5zZXJ0XCIsZik6ZigpfWwubGVuZ3RoJiZuZShlLFwicG9zdHBhdGNoXCIsZnVuY3Rpb24oKXtmb3IodmFyIG49MDtuPGwubGVuZ3RoO24rKylhcihsW25dLFwiY29tcG9uZW50VXBkYXRlZFwiLGUsdCl9KTtpZighaSlmb3IobiBpbiBzKWNbbl18fGFyKHNbbl0sXCJ1bmJpbmRcIix0LHQsYSl9KHQsZSl9dmFyIHJyPU9iamVjdC5jcmVhdGUobnVsbCk7ZnVuY3Rpb24gb3IodCxlKXt2YXIgbixyLG89T2JqZWN0LmNyZWF0ZShudWxsKTtpZighdClyZXR1cm4gbztmb3Iobj0wO248dC5sZW5ndGg7bisrKShyPXRbbl0pLm1vZGlmaWVyc3x8KHIubW9kaWZpZXJzPXJyKSxvW2lyKHIpXT1yLHIuZGVmPUl0KGUuJG9wdGlvbnMsXCJkaXJlY3RpdmVzXCIsci5uYW1lKTtyZXR1cm4gb31mdW5jdGlvbiBpcih0KXtyZXR1cm4gdC5yYXdOYW1lfHx0Lm5hbWUrXCIuXCIrT2JqZWN0LmtleXModC5tb2RpZmllcnN8fHt9KS5qb2luKFwiLlwiKX1mdW5jdGlvbiBhcih0LGUsbixyLG8pe3ZhciBpPXQuZGVmJiZ0LmRlZltlXTtpZihpKXRyeXtpKG4uZWxtLHQsbixyLG8pfWNhdGNoKHIpe010KHIsbi5jb250ZXh0LFwiZGlyZWN0aXZlIFwiK3QubmFtZStcIiBcIitlK1wiIGhvb2tcIil9fXZhciBzcj1bR24sZXJdO2Z1bmN0aW9uIGNyKHQscil7dmFyIG89ci5jb21wb25lbnRPcHRpb25zO2lmKCEobihvKSYmITE9PT1vLkN0b3Iub3B0aW9ucy5pbmhlcml0QXR0cnN8fGUodC5kYXRhLmF0dHJzKSYmZShyLmRhdGEuYXR0cnMpKSl7dmFyIGksYSxzPXIuZWxtLGM9dC5kYXRhLmF0dHJzfHx7fSx1PXIuZGF0YS5hdHRyc3x8e307Zm9yKGkgaW4gbih1Ll9fb2JfXykmJih1PXIuZGF0YS5hdHRycz14KHt9LHUpKSx1KWE9dVtpXSxjW2ldIT09YSYmdXIocyxpLGEpO2ZvcihpIGluKFd8fEspJiZ1LnZhbHVlIT09Yy52YWx1ZSYmdXIocyxcInZhbHVlXCIsdS52YWx1ZSksYyllKHVbaV0pJiYoUG4oaSk/cy5yZW1vdmVBdHRyaWJ1dGVOUyhObixMbihpKSk6am4oaSl8fHMucmVtb3ZlQXR0cmlidXRlKGkpKX19ZnVuY3Rpb24gdXIodCxlLG4pe3QudGFnTmFtZS5pbmRleE9mKFwiLVwiKT4tMT9scih0LGUsbik6RG4oZSk/TW4obik/dC5yZW1vdmVBdHRyaWJ1dGUoZSk6KG49XCJhbGxvd2Z1bGxzY3JlZW5cIj09PWUmJlwiRU1CRURcIj09PXQudGFnTmFtZT9cInRydWVcIjplLHQuc2V0QXR0cmlidXRlKGUsbikpOmpuKGUpP3Quc2V0QXR0cmlidXRlKGUsSW4oZSxuKSk6UG4oZSk/TW4obik/dC5yZW1vdmVBdHRyaWJ1dGVOUyhObixMbihlKSk6dC5zZXRBdHRyaWJ1dGVOUyhObixlLG4pOmxyKHQsZSxuKX1mdW5jdGlvbiBscih0LGUsbil7aWYoTW4obikpdC5yZW1vdmVBdHRyaWJ1dGUoZSk7ZWxzZXtpZihXJiYhcSYmXCJURVhUQVJFQVwiPT09dC50YWdOYW1lJiZcInBsYWNlaG9sZGVyXCI9PT1lJiZcIlwiIT09biYmIXQuX19pZXBoKXt2YXIgcj1mdW5jdGlvbihlKXtlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImlucHV0XCIscil9O3QuYWRkRXZlbnRMaXN0ZW5lcihcImlucHV0XCIsciksdC5fX2llcGg9ITB9dC5zZXRBdHRyaWJ1dGUoZSxuKX19dmFyIGZyPXtjcmVhdGU6Y3IsdXBkYXRlOmNyfTtmdW5jdGlvbiBwcih0LHIpe3ZhciBvPXIuZWxtLGk9ci5kYXRhLGE9dC5kYXRhO2lmKCEoZShpLnN0YXRpY0NsYXNzKSYmZShpLmNsYXNzKSYmKGUoYSl8fGUoYS5zdGF0aWNDbGFzcykmJmUoYS5jbGFzcykpKSl7dmFyIHM9Rm4ociksYz1vLl90cmFuc2l0aW9uQ2xhc3NlcztuKGMpJiYocz1VbihzLEhuKGMpKSkscyE9PW8uX3ByZXZDbGFzcyYmKG8uc2V0QXR0cmlidXRlKFwiY2xhc3NcIixzKSxvLl9wcmV2Q2xhc3M9cyl9fXZhciBkcix2cj17Y3JlYXRlOnByLHVwZGF0ZTpwcn0saHI9XCJfX3JcIixtcj1cIl9fY1wiO2Z1bmN0aW9uIHlyKHQsZSxuKXt2YXIgcj1kcjtyZXR1cm4gZnVuY3Rpb24gbygpe251bGwhPT1lLmFwcGx5KG51bGwsYXJndW1lbnRzKSYmYnIodCxvLG4scil9fXZhciBncj1CdCYmIShHJiZOdW1iZXIoR1sxXSk8PTUzKTtmdW5jdGlvbiBfcih0LGUsbixyKXtpZihncil7dmFyIG89cm4saT1lO2U9aS5fd3JhcHBlcj1mdW5jdGlvbih0KXtpZih0LnRhcmdldD09PXQuY3VycmVudFRhcmdldHx8dC50aW1lU3RhbXA+PW98fHQudGltZVN0YW1wPD0wfHx0LnRhcmdldC5vd25lckRvY3VtZW50IT09ZG9jdW1lbnQpcmV0dXJuIGkuYXBwbHkodGhpcyxhcmd1bWVudHMpfX1kci5hZGRFdmVudExpc3RlbmVyKHQsZSxKP3tjYXB0dXJlOm4scGFzc2l2ZTpyfTpuKX1mdW5jdGlvbiBicih0LGUsbixyKXsocnx8ZHIpLnJlbW92ZUV2ZW50TGlzdGVuZXIodCxlLl93cmFwcGVyfHxlLG4pfWZ1bmN0aW9uIENyKHQscil7aWYoIWUodC5kYXRhLm9uKXx8IWUoci5kYXRhLm9uKSl7dmFyIG89ci5kYXRhLm9ufHx7fSxpPXQuZGF0YS5vbnx8e307ZHI9ci5lbG0sZnVuY3Rpb24odCl7aWYobih0W2hyXSkpe3ZhciBlPVc/XCJjaGFuZ2VcIjpcImlucHV0XCI7dFtlXT1bXS5jb25jYXQodFtocl0sdFtlXXx8W10pLGRlbGV0ZSB0W2hyXX1uKHRbbXJdKSYmKHQuY2hhbmdlPVtdLmNvbmNhdCh0W21yXSx0LmNoYW5nZXx8W10pLGRlbGV0ZSB0W21yXSl9KG8pLGVlKG8saSxfcixicix5cixyLmNvbnRleHQpLGRyPXZvaWQgMH19dmFyICRyLHdyPXtjcmVhdGU6Q3IsdXBkYXRlOkNyfTtmdW5jdGlvbiBBcih0LHIpe2lmKCFlKHQuZGF0YS5kb21Qcm9wcyl8fCFlKHIuZGF0YS5kb21Qcm9wcykpe3ZhciBvLGksYT1yLmVsbSxzPXQuZGF0YS5kb21Qcm9wc3x8e30sYz1yLmRhdGEuZG9tUHJvcHN8fHt9O2ZvcihvIGluIG4oYy5fX29iX18pJiYoYz1yLmRhdGEuZG9tUHJvcHM9eCh7fSxjKSkscylvIGluIGN8fChhW29dPVwiXCIpO2ZvcihvIGluIGMpe2lmKGk9Y1tvXSxcInRleHRDb250ZW50XCI9PT1vfHxcImlubmVySFRNTFwiPT09byl7aWYoci5jaGlsZHJlbiYmKHIuY2hpbGRyZW4ubGVuZ3RoPTApLGk9PT1zW29dKWNvbnRpbnVlOzE9PT1hLmNoaWxkTm9kZXMubGVuZ3RoJiZhLnJlbW92ZUNoaWxkKGEuY2hpbGROb2Rlc1swXSl9aWYoXCJ2YWx1ZVwiPT09byYmXCJQUk9HUkVTU1wiIT09YS50YWdOYW1lKXthLl92YWx1ZT1pO3ZhciB1PWUoaSk/XCJcIjpTdHJpbmcoaSk7eHIoYSx1KSYmKGEudmFsdWU9dSl9ZWxzZSBpZihcImlubmVySFRNTFwiPT09byYmem4oYS50YWdOYW1lKSYmZShhLmlubmVySFRNTCkpeygkcj0kcnx8ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKSkuaW5uZXJIVE1MPVwiPHN2Zz5cIitpK1wiPC9zdmc+XCI7Zm9yKHZhciBsPSRyLmZpcnN0Q2hpbGQ7YS5maXJzdENoaWxkOylhLnJlbW92ZUNoaWxkKGEuZmlyc3RDaGlsZCk7Zm9yKDtsLmZpcnN0Q2hpbGQ7KWEuYXBwZW5kQ2hpbGQobC5maXJzdENoaWxkKX1lbHNlIGlmKGkhPT1zW29dKXRyeXthW29dPWl9Y2F0Y2godCl7fX19fWZ1bmN0aW9uIHhyKHQsZSl7cmV0dXJuIXQuY29tcG9zaW5nJiYoXCJPUFRJT05cIj09PXQudGFnTmFtZXx8ZnVuY3Rpb24odCxlKXt2YXIgbj0hMDt0cnl7bj1kb2N1bWVudC5hY3RpdmVFbGVtZW50IT09dH1jYXRjaCh0KXt9cmV0dXJuIG4mJnQudmFsdWUhPT1lfSh0LGUpfHxmdW5jdGlvbih0LGUpe3ZhciByPXQudmFsdWUsbz10Ll92TW9kaWZpZXJzO2lmKG4obykpe2lmKG8ubnVtYmVyKXJldHVybiBmKHIpIT09ZihlKTtpZihvLnRyaW0pcmV0dXJuIHIudHJpbSgpIT09ZS50cmltKCl9cmV0dXJuIHIhPT1lfSh0LGUpKX12YXIgT3I9e2NyZWF0ZTpBcix1cGRhdGU6QXJ9LGtyPXkoZnVuY3Rpb24odCl7dmFyIGU9e30sbj0vOiguKykvO3JldHVybiB0LnNwbGl0KC87KD8hW14oXSpcXCkpL2cpLmZvckVhY2goZnVuY3Rpb24odCl7aWYodCl7dmFyIHI9dC5zcGxpdChuKTtyLmxlbmd0aD4xJiYoZVtyWzBdLnRyaW0oKV09clsxXS50cmltKCkpfX0pLGV9KTtmdW5jdGlvbiBTcih0KXt2YXIgZT1Fcih0LnN0eWxlKTtyZXR1cm4gdC5zdGF0aWNTdHlsZT94KHQuc3RhdGljU3R5bGUsZSk6ZX1mdW5jdGlvbiBFcih0KXtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KT9PKHQpOlwic3RyaW5nXCI9PXR5cGVvZiB0P2tyKHQpOnR9dmFyIGpyLFRyPS9eLS0vLElyPS9cXHMqIWltcG9ydGFudCQvLERyPWZ1bmN0aW9uKHQsZSxuKXtpZihUci50ZXN0KGUpKXQuc3R5bGUuc2V0UHJvcGVydHkoZSxuKTtlbHNlIGlmKElyLnRlc3QobikpdC5zdHlsZS5zZXRQcm9wZXJ0eSgkKGUpLG4ucmVwbGFjZShJcixcIlwiKSxcImltcG9ydGFudFwiKTtlbHNle3ZhciByPVByKGUpO2lmKEFycmF5LmlzQXJyYXkobikpZm9yKHZhciBvPTAsaT1uLmxlbmd0aDtvPGk7bysrKXQuc3R5bGVbcl09bltvXTtlbHNlIHQuc3R5bGVbcl09bn19LE5yPVtcIldlYmtpdFwiLFwiTW96XCIsXCJtc1wiXSxQcj15KGZ1bmN0aW9uKHQpe2lmKGpyPWpyfHxkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpLnN0eWxlLFwiZmlsdGVyXCIhPT0odD1fKHQpKSYmdCBpbiBqcilyZXR1cm4gdDtmb3IodmFyIGU9dC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSt0LnNsaWNlKDEpLG49MDtuPE5yLmxlbmd0aDtuKyspe3ZhciByPU5yW25dK2U7aWYociBpbiBqcilyZXR1cm4gcn19KTtmdW5jdGlvbiBMcih0LHIpe3ZhciBvPXIuZGF0YSxpPXQuZGF0YTtpZighKGUoby5zdGF0aWNTdHlsZSkmJmUoby5zdHlsZSkmJmUoaS5zdGF0aWNTdHlsZSkmJmUoaS5zdHlsZSkpKXt2YXIgYSxzLGM9ci5lbG0sdT1pLnN0YXRpY1N0eWxlLGw9aS5ub3JtYWxpemVkU3R5bGV8fGkuc3R5bGV8fHt9LGY9dXx8bCxwPUVyKHIuZGF0YS5zdHlsZSl8fHt9O3IuZGF0YS5ub3JtYWxpemVkU3R5bGU9bihwLl9fb2JfXyk/eCh7fSxwKTpwO3ZhciBkPWZ1bmN0aW9uKHQsZSl7dmFyIG4scj17fTtpZihlKWZvcih2YXIgbz10O28uY29tcG9uZW50SW5zdGFuY2U7KShvPW8uY29tcG9uZW50SW5zdGFuY2UuX3Zub2RlKSYmby5kYXRhJiYobj1TcihvLmRhdGEpKSYmeChyLG4pOyhuPVNyKHQuZGF0YSkpJiZ4KHIsbik7Zm9yKHZhciBpPXQ7aT1pLnBhcmVudDspaS5kYXRhJiYobj1TcihpLmRhdGEpKSYmeChyLG4pO3JldHVybiByfShyLCEwKTtmb3IocyBpbiBmKWUoZFtzXSkmJkRyKGMscyxcIlwiKTtmb3IocyBpbiBkKShhPWRbc10pIT09ZltzXSYmRHIoYyxzLG51bGw9PWE/XCJcIjphKX19dmFyIE1yPXtjcmVhdGU6THIsdXBkYXRlOkxyfSxGcj0vXFxzKy87ZnVuY3Rpb24gUnIodCxlKXtpZihlJiYoZT1lLnRyaW0oKSkpaWYodC5jbGFzc0xpc3QpZS5pbmRleE9mKFwiIFwiKT4tMT9lLnNwbGl0KEZyKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3JldHVybiB0LmNsYXNzTGlzdC5hZGQoZSl9KTp0LmNsYXNzTGlzdC5hZGQoZSk7ZWxzZXt2YXIgbj1cIiBcIisodC5nZXRBdHRyaWJ1dGUoXCJjbGFzc1wiKXx8XCJcIikrXCIgXCI7bi5pbmRleE9mKFwiIFwiK2UrXCIgXCIpPDAmJnQuc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwobitlKS50cmltKCkpfX1mdW5jdGlvbiBVcih0LGUpe2lmKGUmJihlPWUudHJpbSgpKSlpZih0LmNsYXNzTGlzdCllLmluZGV4T2YoXCIgXCIpPi0xP2Uuc3BsaXQoRnIpLmZvckVhY2goZnVuY3Rpb24oZSl7cmV0dXJuIHQuY2xhc3NMaXN0LnJlbW92ZShlKX0pOnQuY2xhc3NMaXN0LnJlbW92ZShlKSx0LmNsYXNzTGlzdC5sZW5ndGh8fHQucmVtb3ZlQXR0cmlidXRlKFwiY2xhc3NcIik7ZWxzZXtmb3IodmFyIG49XCIgXCIrKHQuZ2V0QXR0cmlidXRlKFwiY2xhc3NcIil8fFwiXCIpK1wiIFwiLHI9XCIgXCIrZStcIiBcIjtuLmluZGV4T2Yocik+PTA7KW49bi5yZXBsYWNlKHIsXCIgXCIpOyhuPW4udHJpbSgpKT90LnNldEF0dHJpYnV0ZShcImNsYXNzXCIsbik6dC5yZW1vdmVBdHRyaWJ1dGUoXCJjbGFzc1wiKX19ZnVuY3Rpb24gSHIodCl7aWYodCl7aWYoXCJvYmplY3RcIj09dHlwZW9mIHQpe3ZhciBlPXt9O3JldHVybiExIT09dC5jc3MmJngoZSxCcih0Lm5hbWV8fFwidlwiKSkseChlLHQpLGV9cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIHQ/QnIodCk6dm9pZCAwfX12YXIgQnI9eShmdW5jdGlvbih0KXtyZXR1cm57ZW50ZXJDbGFzczp0K1wiLWVudGVyXCIsZW50ZXJUb0NsYXNzOnQrXCItZW50ZXItdG9cIixlbnRlckFjdGl2ZUNsYXNzOnQrXCItZW50ZXItYWN0aXZlXCIsbGVhdmVDbGFzczp0K1wiLWxlYXZlXCIsbGVhdmVUb0NsYXNzOnQrXCItbGVhdmUtdG9cIixsZWF2ZUFjdGl2ZUNsYXNzOnQrXCItbGVhdmUtYWN0aXZlXCJ9fSksVnI9SCYmIXEsenI9XCJ0cmFuc2l0aW9uXCIsV3I9XCJhbmltYXRpb25cIixxcj1cInRyYW5zaXRpb25cIixLcj1cInRyYW5zaXRpb25lbmRcIixYcj1cImFuaW1hdGlvblwiLEdyPVwiYW5pbWF0aW9uZW5kXCI7VnImJih2b2lkIDA9PT13aW5kb3cub250cmFuc2l0aW9uZW5kJiZ2b2lkIDAhPT13aW5kb3cub253ZWJraXR0cmFuc2l0aW9uZW5kJiYocXI9XCJXZWJraXRUcmFuc2l0aW9uXCIsS3I9XCJ3ZWJraXRUcmFuc2l0aW9uRW5kXCIpLHZvaWQgMD09PXdpbmRvdy5vbmFuaW1hdGlvbmVuZCYmdm9pZCAwIT09d2luZG93Lm9ud2Via2l0YW5pbWF0aW9uZW5kJiYoWHI9XCJXZWJraXRBbmltYXRpb25cIixHcj1cIndlYmtpdEFuaW1hdGlvbkVuZFwiKSk7dmFyIFpyPUg/d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZT93aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lLmJpbmQod2luZG93KTpzZXRUaW1lb3V0OmZ1bmN0aW9uKHQpe3JldHVybiB0KCl9O2Z1bmN0aW9uIEpyKHQpe1pyKGZ1bmN0aW9uKCl7WnIodCl9KX1mdW5jdGlvbiBRcih0LGUpe3ZhciBuPXQuX3RyYW5zaXRpb25DbGFzc2VzfHwodC5fdHJhbnNpdGlvbkNsYXNzZXM9W10pO24uaW5kZXhPZihlKTwwJiYobi5wdXNoKGUpLFJyKHQsZSkpfWZ1bmN0aW9uIFlyKHQsZSl7dC5fdHJhbnNpdGlvbkNsYXNzZXMmJnYodC5fdHJhbnNpdGlvbkNsYXNzZXMsZSksVXIodCxlKX1mdW5jdGlvbiB0byh0LGUsbil7dmFyIHI9bm8odCxlKSxvPXIudHlwZSxpPXIudGltZW91dCxhPXIucHJvcENvdW50O2lmKCFvKXJldHVybiBuKCk7dmFyIHM9bz09PXpyP0tyOkdyLGM9MCx1PWZ1bmN0aW9uKCl7dC5yZW1vdmVFdmVudExpc3RlbmVyKHMsbCksbigpfSxsPWZ1bmN0aW9uKGUpe2UudGFyZ2V0PT09dCYmKytjPj1hJiZ1KCl9O3NldFRpbWVvdXQoZnVuY3Rpb24oKXtjPGEmJnUoKX0saSsxKSx0LmFkZEV2ZW50TGlzdGVuZXIocyxsKX12YXIgZW89L1xcYih0cmFuc2Zvcm18YWxsKSgsfCQpLztmdW5jdGlvbiBubyh0LGUpe3ZhciBuLHI9d2luZG93LmdldENvbXB1dGVkU3R5bGUodCksbz0ocltxcitcIkRlbGF5XCJdfHxcIlwiKS5zcGxpdChcIiwgXCIpLGk9KHJbcXIrXCJEdXJhdGlvblwiXXx8XCJcIikuc3BsaXQoXCIsIFwiKSxhPXJvKG8saSkscz0ocltYcitcIkRlbGF5XCJdfHxcIlwiKS5zcGxpdChcIiwgXCIpLGM9KHJbWHIrXCJEdXJhdGlvblwiXXx8XCJcIikuc3BsaXQoXCIsIFwiKSx1PXJvKHMsYyksbD0wLGY9MDtyZXR1cm4gZT09PXpyP2E+MCYmKG49enIsbD1hLGY9aS5sZW5ndGgpOmU9PT1Xcj91PjAmJihuPVdyLGw9dSxmPWMubGVuZ3RoKTpmPShuPShsPU1hdGgubWF4KGEsdSkpPjA/YT51P3pyOldyOm51bGwpP249PT16cj9pLmxlbmd0aDpjLmxlbmd0aDowLHt0eXBlOm4sdGltZW91dDpsLHByb3BDb3VudDpmLGhhc1RyYW5zZm9ybTpuPT09enImJmVvLnRlc3QocltxcitcIlByb3BlcnR5XCJdKX19ZnVuY3Rpb24gcm8odCxlKXtmb3IoO3QubGVuZ3RoPGUubGVuZ3RoOyl0PXQuY29uY2F0KHQpO3JldHVybiBNYXRoLm1heC5hcHBseShudWxsLGUubWFwKGZ1bmN0aW9uKGUsbil7cmV0dXJuIG9vKGUpK29vKHRbbl0pfSkpfWZ1bmN0aW9uIG9vKHQpe3JldHVybiAxZTMqTnVtYmVyKHQuc2xpY2UoMCwtMSkucmVwbGFjZShcIixcIixcIi5cIikpfWZ1bmN0aW9uIGlvKHQscil7dmFyIG89dC5lbG07bihvLl9sZWF2ZUNiKSYmKG8uX2xlYXZlQ2IuY2FuY2VsbGVkPSEwLG8uX2xlYXZlQ2IoKSk7dmFyIGE9SHIodC5kYXRhLnRyYW5zaXRpb24pO2lmKCFlKGEpJiYhbihvLl9lbnRlckNiKSYmMT09PW8ubm9kZVR5cGUpe2Zvcih2YXIgcz1hLmNzcyxjPWEudHlwZSx1PWEuZW50ZXJDbGFzcyxsPWEuZW50ZXJUb0NsYXNzLHA9YS5lbnRlckFjdGl2ZUNsYXNzLGQ9YS5hcHBlYXJDbGFzcyx2PWEuYXBwZWFyVG9DbGFzcyxoPWEuYXBwZWFyQWN0aXZlQ2xhc3MsbT1hLmJlZm9yZUVudGVyLHk9YS5lbnRlcixnPWEuYWZ0ZXJFbnRlcixfPWEuZW50ZXJDYW5jZWxsZWQsYj1hLmJlZm9yZUFwcGVhcixDPWEuYXBwZWFyLCQ9YS5hZnRlckFwcGVhcix3PWEuYXBwZWFyQ2FuY2VsbGVkLEE9YS5kdXJhdGlvbix4PXFlLE89cWUuJHZub2RlO08mJk8ucGFyZW50Oyl4PU8uY29udGV4dCxPPU8ucGFyZW50O3ZhciBrPSF4Ll9pc01vdW50ZWR8fCF0LmlzUm9vdEluc2VydDtpZigha3x8Q3x8XCJcIj09PUMpe3ZhciBTPWsmJmQ/ZDp1LEU9ayYmaD9oOnAsaj1rJiZ2P3Y6bCxUPWsmJmJ8fG0sRD1rJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBDP0M6eSxOPWsmJiR8fGcsUD1rJiZ3fHxfLEw9ZihpKEEpP0EuZW50ZXI6QSksTT0hMSE9PXMmJiFxLEY9Y28oRCksUj1vLl9lbnRlckNiPUkoZnVuY3Rpb24oKXtNJiYoWXIobyxqKSxZcihvLEUpKSxSLmNhbmNlbGxlZD8oTSYmWXIobyxTKSxQJiZQKG8pKTpOJiZOKG8pLG8uX2VudGVyQ2I9bnVsbH0pO3QuZGF0YS5zaG93fHxuZSh0LFwiaW5zZXJ0XCIsZnVuY3Rpb24oKXt2YXIgZT1vLnBhcmVudE5vZGUsbj1lJiZlLl9wZW5kaW5nJiZlLl9wZW5kaW5nW3Qua2V5XTtuJiZuLnRhZz09PXQudGFnJiZuLmVsbS5fbGVhdmVDYiYmbi5lbG0uX2xlYXZlQ2IoKSxEJiZEKG8sUil9KSxUJiZUKG8pLE0mJihRcihvLFMpLFFyKG8sRSksSnIoZnVuY3Rpb24oKXtZcihvLFMpLFIuY2FuY2VsbGVkfHwoUXIobyxqKSxGfHwoc28oTCk/c2V0VGltZW91dChSLEwpOnRvKG8sYyxSKSkpfSkpLHQuZGF0YS5zaG93JiYociYmcigpLEQmJkQobyxSKSksTXx8Rnx8UigpfX19ZnVuY3Rpb24gYW8odCxyKXt2YXIgbz10LmVsbTtuKG8uX2VudGVyQ2IpJiYoby5fZW50ZXJDYi5jYW5jZWxsZWQ9ITAsby5fZW50ZXJDYigpKTt2YXIgYT1Icih0LmRhdGEudHJhbnNpdGlvbik7aWYoZShhKXx8MSE9PW8ubm9kZVR5cGUpcmV0dXJuIHIoKTtpZighbihvLl9sZWF2ZUNiKSl7dmFyIHM9YS5jc3MsYz1hLnR5cGUsdT1hLmxlYXZlQ2xhc3MsbD1hLmxlYXZlVG9DbGFzcyxwPWEubGVhdmVBY3RpdmVDbGFzcyxkPWEuYmVmb3JlTGVhdmUsdj1hLmxlYXZlLGg9YS5hZnRlckxlYXZlLG09YS5sZWF2ZUNhbmNlbGxlZCx5PWEuZGVsYXlMZWF2ZSxnPWEuZHVyYXRpb24sXz0hMSE9PXMmJiFxLGI9Y28odiksQz1mKGkoZyk/Zy5sZWF2ZTpnKSwkPW8uX2xlYXZlQ2I9SShmdW5jdGlvbigpe28ucGFyZW50Tm9kZSYmby5wYXJlbnROb2RlLl9wZW5kaW5nJiYoby5wYXJlbnROb2RlLl9wZW5kaW5nW3Qua2V5XT1udWxsKSxfJiYoWXIobyxsKSxZcihvLHApKSwkLmNhbmNlbGxlZD8oXyYmWXIobyx1KSxtJiZtKG8pKToocigpLGgmJmgobykpLG8uX2xlYXZlQ2I9bnVsbH0pO3k/eSh3KTp3KCl9ZnVuY3Rpb24gdygpeyQuY2FuY2VsbGVkfHwoIXQuZGF0YS5zaG93JiZvLnBhcmVudE5vZGUmJigoby5wYXJlbnROb2RlLl9wZW5kaW5nfHwoby5wYXJlbnROb2RlLl9wZW5kaW5nPXt9KSlbdC5rZXldPXQpLGQmJmQobyksXyYmKFFyKG8sdSksUXIobyxwKSxKcihmdW5jdGlvbigpe1lyKG8sdSksJC5jYW5jZWxsZWR8fChRcihvLGwpLGJ8fChzbyhDKT9zZXRUaW1lb3V0KCQsQyk6dG8obyxjLCQpKSl9KSksdiYmdihvLCQpLF98fGJ8fCQoKSl9fWZ1bmN0aW9uIHNvKHQpe3JldHVyblwibnVtYmVyXCI9PXR5cGVvZiB0JiYhaXNOYU4odCl9ZnVuY3Rpb24gY28odCl7aWYoZSh0KSlyZXR1cm4hMTt2YXIgcj10LmZucztyZXR1cm4gbihyKT9jbyhBcnJheS5pc0FycmF5KHIpP3JbMF06cik6KHQuX2xlbmd0aHx8dC5sZW5ndGgpPjF9ZnVuY3Rpb24gdW8odCxlKXshMCE9PWUuZGF0YS5zaG93JiZpbyhlKX12YXIgbG89ZnVuY3Rpb24odCl7dmFyIGksYSxzPXt9LGM9dC5tb2R1bGVzLHU9dC5ub2RlT3BzO2ZvcihpPTA7aTxRbi5sZW5ndGg7KytpKWZvcihzW1FuW2ldXT1bXSxhPTA7YTxjLmxlbmd0aDsrK2EpbihjW2FdW1FuW2ldXSkmJnNbUW5baV1dLnB1c2goY1thXVtRbltpXV0pO2Z1bmN0aW9uIGwodCl7dmFyIGU9dS5wYXJlbnROb2RlKHQpO24oZSkmJnUucmVtb3ZlQ2hpbGQoZSx0KX1mdW5jdGlvbiBmKHQsZSxvLGksYSxjLGwpe2lmKG4odC5lbG0pJiZuKGMpJiYodD1jW2xdPXZ0KHQpKSx0LmlzUm9vdEluc2VydD0hYSwhZnVuY3Rpb24odCxlLG8saSl7dmFyIGE9dC5kYXRhO2lmKG4oYSkpe3ZhciBjPW4odC5jb21wb25lbnRJbnN0YW5jZSkmJmEua2VlcEFsaXZlO2lmKG4oYT1hLmhvb2spJiZuKGE9YS5pbml0KSYmYSh0LCExKSxuKHQuY29tcG9uZW50SW5zdGFuY2UpKXJldHVybiBkKHQsZSksdihvLHQuZWxtLGkpLHIoYykmJmZ1bmN0aW9uKHQsZSxyLG8pe2Zvcih2YXIgaSxhPXQ7YS5jb21wb25lbnRJbnN0YW5jZTspaWYoYT1hLmNvbXBvbmVudEluc3RhbmNlLl92bm9kZSxuKGk9YS5kYXRhKSYmbihpPWkudHJhbnNpdGlvbikpe2ZvcihpPTA7aTxzLmFjdGl2YXRlLmxlbmd0aDsrK2kpcy5hY3RpdmF0ZVtpXShKbixhKTtlLnB1c2goYSk7YnJlYWt9dihyLHQuZWxtLG8pfSh0LGUsbyxpKSwhMH19KHQsZSxvLGkpKXt2YXIgZj10LmRhdGEscD10LmNoaWxkcmVuLG09dC50YWc7bihtKT8odC5lbG09dC5ucz91LmNyZWF0ZUVsZW1lbnROUyh0Lm5zLG0pOnUuY3JlYXRlRWxlbWVudChtLHQpLGcodCksaCh0LHAsZSksbihmKSYmeSh0LGUpLHYobyx0LmVsbSxpKSk6cih0LmlzQ29tbWVudCk/KHQuZWxtPXUuY3JlYXRlQ29tbWVudCh0LnRleHQpLHYobyx0LmVsbSxpKSk6KHQuZWxtPXUuY3JlYXRlVGV4dE5vZGUodC50ZXh0KSx2KG8sdC5lbG0saSkpfX1mdW5jdGlvbiBkKHQsZSl7bih0LmRhdGEucGVuZGluZ0luc2VydCkmJihlLnB1c2guYXBwbHkoZSx0LmRhdGEucGVuZGluZ0luc2VydCksdC5kYXRhLnBlbmRpbmdJbnNlcnQ9bnVsbCksdC5lbG09dC5jb21wb25lbnRJbnN0YW5jZS4kZWwsbSh0KT8oeSh0LGUpLGcodCkpOihabih0KSxlLnB1c2godCkpfWZ1bmN0aW9uIHYodCxlLHIpe24odCkmJihuKHIpP3UucGFyZW50Tm9kZShyKT09PXQmJnUuaW5zZXJ0QmVmb3JlKHQsZSxyKTp1LmFwcGVuZENoaWxkKHQsZSkpfWZ1bmN0aW9uIGgodCxlLG4pe2lmKEFycmF5LmlzQXJyYXkoZSkpZm9yKHZhciByPTA7cjxlLmxlbmd0aDsrK3IpZihlW3JdLG4sdC5lbG0sbnVsbCwhMCxlLHIpO2Vsc2Ugbyh0LnRleHQpJiZ1LmFwcGVuZENoaWxkKHQuZWxtLHUuY3JlYXRlVGV4dE5vZGUoU3RyaW5nKHQudGV4dCkpKX1mdW5jdGlvbiBtKHQpe2Zvcig7dC5jb21wb25lbnRJbnN0YW5jZTspdD10LmNvbXBvbmVudEluc3RhbmNlLl92bm9kZTtyZXR1cm4gbih0LnRhZyl9ZnVuY3Rpb24geSh0LGUpe2Zvcih2YXIgcj0wO3I8cy5jcmVhdGUubGVuZ3RoOysrcilzLmNyZWF0ZVtyXShKbix0KTtuKGk9dC5kYXRhLmhvb2spJiYobihpLmNyZWF0ZSkmJmkuY3JlYXRlKEpuLHQpLG4oaS5pbnNlcnQpJiZlLnB1c2godCkpfWZ1bmN0aW9uIGcodCl7dmFyIGU7aWYobihlPXQuZm5TY29wZUlkKSl1LnNldFN0eWxlU2NvcGUodC5lbG0sZSk7ZWxzZSBmb3IodmFyIHI9dDtyOyluKGU9ci5jb250ZXh0KSYmbihlPWUuJG9wdGlvbnMuX3Njb3BlSWQpJiZ1LnNldFN0eWxlU2NvcGUodC5lbG0sZSkscj1yLnBhcmVudDtuKGU9cWUpJiZlIT09dC5jb250ZXh0JiZlIT09dC5mbkNvbnRleHQmJm4oZT1lLiRvcHRpb25zLl9zY29wZUlkKSYmdS5zZXRTdHlsZVNjb3BlKHQuZWxtLGUpfWZ1bmN0aW9uIF8odCxlLG4scixvLGkpe2Zvcig7cjw9bzsrK3IpZihuW3JdLGksdCxlLCExLG4scil9ZnVuY3Rpb24gYih0KXt2YXIgZSxyLG89dC5kYXRhO2lmKG4obykpZm9yKG4oZT1vLmhvb2spJiZuKGU9ZS5kZXN0cm95KSYmZSh0KSxlPTA7ZTxzLmRlc3Ryb3kubGVuZ3RoOysrZSlzLmRlc3Ryb3lbZV0odCk7aWYobihlPXQuY2hpbGRyZW4pKWZvcihyPTA7cjx0LmNoaWxkcmVuLmxlbmd0aDsrK3IpYih0LmNoaWxkcmVuW3JdKX1mdW5jdGlvbiBDKHQsZSxyLG8pe2Zvcig7cjw9bzsrK3Ipe3ZhciBpPWVbcl07bihpKSYmKG4oaS50YWcpPygkKGkpLGIoaSkpOmwoaS5lbG0pKX19ZnVuY3Rpb24gJCh0LGUpe2lmKG4oZSl8fG4odC5kYXRhKSl7dmFyIHIsbz1zLnJlbW92ZS5sZW5ndGgrMTtmb3IobihlKT9lLmxpc3RlbmVycys9bzplPWZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gbigpezA9PS0tbi5saXN0ZW5lcnMmJmwodCl9cmV0dXJuIG4ubGlzdGVuZXJzPWUsbn0odC5lbG0sbyksbihyPXQuY29tcG9uZW50SW5zdGFuY2UpJiZuKHI9ci5fdm5vZGUpJiZuKHIuZGF0YSkmJiQocixlKSxyPTA7cjxzLnJlbW92ZS5sZW5ndGg7KytyKXMucmVtb3ZlW3JdKHQsZSk7bihyPXQuZGF0YS5ob29rKSYmbihyPXIucmVtb3ZlKT9yKHQsZSk6ZSgpfWVsc2UgbCh0LmVsbSl9ZnVuY3Rpb24gdyh0LGUscixvKXtmb3IodmFyIGk9cjtpPG87aSsrKXt2YXIgYT1lW2ldO2lmKG4oYSkmJlluKHQsYSkpcmV0dXJuIGl9fWZ1bmN0aW9uIEEodCxvLGksYSxjLGwpe2lmKHQhPT1vKXtuKG8uZWxtKSYmbihhKSYmKG89YVtjXT12dChvKSk7dmFyIHA9by5lbG09dC5lbG07aWYocih0LmlzQXN5bmNQbGFjZWhvbGRlcikpbihvLmFzeW5jRmFjdG9yeS5yZXNvbHZlZCk/ayh0LmVsbSxvLGkpOm8uaXNBc3luY1BsYWNlaG9sZGVyPSEwO2Vsc2UgaWYocihvLmlzU3RhdGljKSYmcih0LmlzU3RhdGljKSYmby5rZXk9PT10LmtleSYmKHIoby5pc0Nsb25lZCl8fHIoby5pc09uY2UpKSlvLmNvbXBvbmVudEluc3RhbmNlPXQuY29tcG9uZW50SW5zdGFuY2U7ZWxzZXt2YXIgZCx2PW8uZGF0YTtuKHYpJiZuKGQ9di5ob29rKSYmbihkPWQucHJlcGF0Y2gpJiZkKHQsbyk7dmFyIGg9dC5jaGlsZHJlbix5PW8uY2hpbGRyZW47aWYobih2KSYmbShvKSl7Zm9yKGQ9MDtkPHMudXBkYXRlLmxlbmd0aDsrK2Qpcy51cGRhdGVbZF0odCxvKTtuKGQ9di5ob29rKSYmbihkPWQudXBkYXRlKSYmZCh0LG8pfWUoby50ZXh0KT9uKGgpJiZuKHkpP2ghPT15JiZmdW5jdGlvbih0LHIsbyxpLGEpe2Zvcih2YXIgcyxjLGwscD0wLGQ9MCx2PXIubGVuZ3RoLTEsaD1yWzBdLG09clt2XSx5PW8ubGVuZ3RoLTEsZz1vWzBdLGI9b1t5XSwkPSFhO3A8PXYmJmQ8PXk7KWUoaCk/aD1yWysrcF06ZShtKT9tPXJbLS12XTpZbihoLGcpPyhBKGgsZyxpLG8sZCksaD1yWysrcF0sZz1vWysrZF0pOlluKG0sYik/KEEobSxiLGksbyx5KSxtPXJbLS12XSxiPW9bLS15XSk6WW4oaCxiKT8oQShoLGIsaSxvLHkpLCQmJnUuaW5zZXJ0QmVmb3JlKHQsaC5lbG0sdS5uZXh0U2libGluZyhtLmVsbSkpLGg9clsrK3BdLGI9b1stLXldKTpZbihtLGcpPyhBKG0sZyxpLG8sZCksJCYmdS5pbnNlcnRCZWZvcmUodCxtLmVsbSxoLmVsbSksbT1yWy0tdl0sZz1vWysrZF0pOihlKHMpJiYocz10cihyLHAsdikpLGUoYz1uKGcua2V5KT9zW2cua2V5XTp3KGcscixwLHYpKT9mKGcsaSx0LGguZWxtLCExLG8sZCk6WW4obD1yW2NdLGcpPyhBKGwsZyxpLG8sZCkscltjXT12b2lkIDAsJCYmdS5pbnNlcnRCZWZvcmUodCxsLmVsbSxoLmVsbSkpOmYoZyxpLHQsaC5lbG0sITEsbyxkKSxnPW9bKytkXSk7cD52P18odCxlKG9beSsxXSk/bnVsbDpvW3krMV0uZWxtLG8sZCx5LGkpOmQ+eSYmQygwLHIscCx2KX0ocCxoLHksaSxsKTpuKHkpPyhuKHQudGV4dCkmJnUuc2V0VGV4dENvbnRlbnQocCxcIlwiKSxfKHAsbnVsbCx5LDAseS5sZW5ndGgtMSxpKSk6bihoKT9DKDAsaCwwLGgubGVuZ3RoLTEpOm4odC50ZXh0KSYmdS5zZXRUZXh0Q29udGVudChwLFwiXCIpOnQudGV4dCE9PW8udGV4dCYmdS5zZXRUZXh0Q29udGVudChwLG8udGV4dCksbih2KSYmbihkPXYuaG9vaykmJm4oZD1kLnBvc3RwYXRjaCkmJmQodCxvKX19fWZ1bmN0aW9uIHgodCxlLG8pe2lmKHIobykmJm4odC5wYXJlbnQpKXQucGFyZW50LmRhdGEucGVuZGluZ0luc2VydD1lO2Vsc2UgZm9yKHZhciBpPTA7aTxlLmxlbmd0aDsrK2kpZVtpXS5kYXRhLmhvb2suaW5zZXJ0KGVbaV0pfXZhciBPPXAoXCJhdHRycyxjbGFzcyxzdGF0aWNDbGFzcyxzdGF0aWNTdHlsZSxrZXlcIik7ZnVuY3Rpb24gayh0LGUsbyxpKXt2YXIgYSxzPWUudGFnLGM9ZS5kYXRhLHU9ZS5jaGlsZHJlbjtpZihpPWl8fGMmJmMucHJlLGUuZWxtPXQscihlLmlzQ29tbWVudCkmJm4oZS5hc3luY0ZhY3RvcnkpKXJldHVybiBlLmlzQXN5bmNQbGFjZWhvbGRlcj0hMCwhMDtpZihuKGMpJiYobihhPWMuaG9vaykmJm4oYT1hLmluaXQpJiZhKGUsITApLG4oYT1lLmNvbXBvbmVudEluc3RhbmNlKSkpcmV0dXJuIGQoZSxvKSwhMDtpZihuKHMpKXtpZihuKHUpKWlmKHQuaGFzQ2hpbGROb2RlcygpKWlmKG4oYT1jKSYmbihhPWEuZG9tUHJvcHMpJiZuKGE9YS5pbm5lckhUTUwpKXtpZihhIT09dC5pbm5lckhUTUwpcmV0dXJuITF9ZWxzZXtmb3IodmFyIGw9ITAsZj10LmZpcnN0Q2hpbGQscD0wO3A8dS5sZW5ndGg7cCsrKXtpZighZnx8IWsoZix1W3BdLG8saSkpe2w9ITE7YnJlYWt9Zj1mLm5leHRTaWJsaW5nfWlmKCFsfHxmKXJldHVybiExfWVsc2UgaChlLHUsbyk7aWYobihjKSl7dmFyIHY9ITE7Zm9yKHZhciBtIGluIGMpaWYoIU8obSkpe3Y9ITAseShlLG8pO2JyZWFrfSF2JiZjLmNsYXNzJiZRdChjLmNsYXNzKX19ZWxzZSB0LmRhdGEhPT1lLnRleHQmJih0LmRhdGE9ZS50ZXh0KTtyZXR1cm4hMH1yZXR1cm4gZnVuY3Rpb24odCxvLGksYSl7aWYoIWUobykpe3ZhciBjLGw9ITEscD1bXTtpZihlKHQpKWw9ITAsZihvLHApO2Vsc2V7dmFyIGQ9bih0Lm5vZGVUeXBlKTtpZighZCYmWW4odCxvKSlBKHQsbyxwLG51bGwsbnVsbCxhKTtlbHNle2lmKGQpe2lmKDE9PT10Lm5vZGVUeXBlJiZ0Lmhhc0F0dHJpYnV0ZShEKSYmKHQucmVtb3ZlQXR0cmlidXRlKEQpLGk9ITApLHIoaSkmJmsodCxvLHApKXJldHVybiB4KG8scCwhMCksdDtjPXQsdD1uZXcgbHQodS50YWdOYW1lKGMpLnRvTG93ZXJDYXNlKCkse30sW10sdm9pZCAwLGMpfXZhciB2PXQuZWxtLGg9dS5wYXJlbnROb2RlKHYpO2lmKGYobyxwLHYuX2xlYXZlQ2I/bnVsbDpoLHUubmV4dFNpYmxpbmcodikpLG4oby5wYXJlbnQpKWZvcih2YXIgeT1vLnBhcmVudCxnPW0obyk7eTspe2Zvcih2YXIgXz0wO188cy5kZXN0cm95Lmxlbmd0aDsrK18pcy5kZXN0cm95W19dKHkpO2lmKHkuZWxtPW8uZWxtLGcpe2Zvcih2YXIgJD0wOyQ8cy5jcmVhdGUubGVuZ3RoOysrJClzLmNyZWF0ZVskXShKbix5KTt2YXIgdz15LmRhdGEuaG9vay5pbnNlcnQ7aWYody5tZXJnZWQpZm9yKHZhciBPPTE7Tzx3LmZucy5sZW5ndGg7TysrKXcuZm5zW09dKCl9ZWxzZSBabih5KTt5PXkucGFyZW50fW4oaCk/QygwLFt0XSwwLDApOm4odC50YWcpJiZiKHQpfX1yZXR1cm4geChvLHAsbCksby5lbG19bih0KSYmYih0KX19KHtub2RlT3BzOlhuLG1vZHVsZXM6W2ZyLHZyLHdyLE9yLE1yLEg/e2NyZWF0ZTp1byxhY3RpdmF0ZTp1byxyZW1vdmU6ZnVuY3Rpb24odCxlKXshMCE9PXQuZGF0YS5zaG93P2FvKHQsZSk6ZSgpfX06e31dLmNvbmNhdChzcil9KTtxJiZkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwic2VsZWN0aW9uY2hhbmdlXCIsZnVuY3Rpb24oKXt2YXIgdD1kb2N1bWVudC5hY3RpdmVFbGVtZW50O3QmJnQudm1vZGVsJiZfbyh0LFwiaW5wdXRcIil9KTt2YXIgZm89e2luc2VydGVkOmZ1bmN0aW9uKHQsZSxuLHIpe1wic2VsZWN0XCI9PT1uLnRhZz8oci5lbG0mJiFyLmVsbS5fdk9wdGlvbnM/bmUobixcInBvc3RwYXRjaFwiLGZ1bmN0aW9uKCl7Zm8uY29tcG9uZW50VXBkYXRlZCh0LGUsbil9KTpwbyh0LGUsbi5jb250ZXh0KSx0Ll92T3B0aW9ucz1bXS5tYXAuY2FsbCh0Lm9wdGlvbnMsbW8pKTooXCJ0ZXh0YXJlYVwiPT09bi50YWd8fEtuKHQudHlwZSkpJiYodC5fdk1vZGlmaWVycz1lLm1vZGlmaWVycyxlLm1vZGlmaWVycy5sYXp5fHwodC5hZGRFdmVudExpc3RlbmVyKFwiY29tcG9zaXRpb25zdGFydFwiLHlvKSx0LmFkZEV2ZW50TGlzdGVuZXIoXCJjb21wb3NpdGlvbmVuZFwiLGdvKSx0LmFkZEV2ZW50TGlzdGVuZXIoXCJjaGFuZ2VcIixnbykscSYmKHQudm1vZGVsPSEwKSkpfSxjb21wb25lbnRVcGRhdGVkOmZ1bmN0aW9uKHQsZSxuKXtpZihcInNlbGVjdFwiPT09bi50YWcpe3BvKHQsZSxuLmNvbnRleHQpO3ZhciByPXQuX3ZPcHRpb25zLG89dC5fdk9wdGlvbnM9W10ubWFwLmNhbGwodC5vcHRpb25zLG1vKTtpZihvLnNvbWUoZnVuY3Rpb24odCxlKXtyZXR1cm4haih0LHJbZV0pfSkpKHQubXVsdGlwbGU/ZS52YWx1ZS5zb21lKGZ1bmN0aW9uKHQpe3JldHVybiBobyh0LG8pfSk6ZS52YWx1ZSE9PWUub2xkVmFsdWUmJmhvKGUudmFsdWUsbykpJiZfbyh0LFwiY2hhbmdlXCIpfX19O2Z1bmN0aW9uIHBvKHQsZSxuKXt2byh0LGUsbiksKFd8fEspJiZzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dm8odCxlLG4pfSwwKX1mdW5jdGlvbiB2byh0LGUsbil7dmFyIHI9ZS52YWx1ZSxvPXQubXVsdGlwbGU7aWYoIW98fEFycmF5LmlzQXJyYXkocikpe2Zvcih2YXIgaSxhLHM9MCxjPXQub3B0aW9ucy5sZW5ndGg7czxjO3MrKylpZihhPXQub3B0aW9uc1tzXSxvKWk9VChyLG1vKGEpKT4tMSxhLnNlbGVjdGVkIT09aSYmKGEuc2VsZWN0ZWQ9aSk7ZWxzZSBpZihqKG1vKGEpLHIpKXJldHVybiB2b2lkKHQuc2VsZWN0ZWRJbmRleCE9PXMmJih0LnNlbGVjdGVkSW5kZXg9cykpO298fCh0LnNlbGVjdGVkSW5kZXg9LTEpfX1mdW5jdGlvbiBobyh0LGUpe3JldHVybiBlLmV2ZXJ5KGZ1bmN0aW9uKGUpe3JldHVybiFqKGUsdCl9KX1mdW5jdGlvbiBtbyh0KXtyZXR1cm5cIl92YWx1ZVwiaW4gdD90Ll92YWx1ZTp0LnZhbHVlfWZ1bmN0aW9uIHlvKHQpe3QudGFyZ2V0LmNvbXBvc2luZz0hMH1mdW5jdGlvbiBnbyh0KXt0LnRhcmdldC5jb21wb3NpbmcmJih0LnRhcmdldC5jb21wb3Npbmc9ITEsX28odC50YXJnZXQsXCJpbnB1dFwiKSl9ZnVuY3Rpb24gX28odCxlKXt2YXIgbj1kb2N1bWVudC5jcmVhdGVFdmVudChcIkhUTUxFdmVudHNcIik7bi5pbml0RXZlbnQoZSwhMCwhMCksdC5kaXNwYXRjaEV2ZW50KG4pfWZ1bmN0aW9uIGJvKHQpe3JldHVybiF0LmNvbXBvbmVudEluc3RhbmNlfHx0LmRhdGEmJnQuZGF0YS50cmFuc2l0aW9uP3Q6Ym8odC5jb21wb25lbnRJbnN0YW5jZS5fdm5vZGUpfXZhciBDbz17bW9kZWw6Zm8sc2hvdzp7YmluZDpmdW5jdGlvbih0LGUsbil7dmFyIHI9ZS52YWx1ZSxvPShuPWJvKG4pKS5kYXRhJiZuLmRhdGEudHJhbnNpdGlvbixpPXQuX192T3JpZ2luYWxEaXNwbGF5PVwibm9uZVwiPT09dC5zdHlsZS5kaXNwbGF5P1wiXCI6dC5zdHlsZS5kaXNwbGF5O3ImJm8/KG4uZGF0YS5zaG93PSEwLGlvKG4sZnVuY3Rpb24oKXt0LnN0eWxlLmRpc3BsYXk9aX0pKTp0LnN0eWxlLmRpc3BsYXk9cj9pOlwibm9uZVwifSx1cGRhdGU6ZnVuY3Rpb24odCxlLG4pe3ZhciByPWUudmFsdWU7IXIhPSFlLm9sZFZhbHVlJiYoKG49Ym8obikpLmRhdGEmJm4uZGF0YS50cmFuc2l0aW9uPyhuLmRhdGEuc2hvdz0hMCxyP2lvKG4sZnVuY3Rpb24oKXt0LnN0eWxlLmRpc3BsYXk9dC5fX3ZPcmlnaW5hbERpc3BsYXl9KTphbyhuLGZ1bmN0aW9uKCl7dC5zdHlsZS5kaXNwbGF5PVwibm9uZVwifSkpOnQuc3R5bGUuZGlzcGxheT1yP3QuX192T3JpZ2luYWxEaXNwbGF5Olwibm9uZVwiKX0sdW5iaW5kOmZ1bmN0aW9uKHQsZSxuLHIsbyl7b3x8KHQuc3R5bGUuZGlzcGxheT10Ll9fdk9yaWdpbmFsRGlzcGxheSl9fX0sJG89e25hbWU6U3RyaW5nLGFwcGVhcjpCb29sZWFuLGNzczpCb29sZWFuLG1vZGU6U3RyaW5nLHR5cGU6U3RyaW5nLGVudGVyQ2xhc3M6U3RyaW5nLGxlYXZlQ2xhc3M6U3RyaW5nLGVudGVyVG9DbGFzczpTdHJpbmcsbGVhdmVUb0NsYXNzOlN0cmluZyxlbnRlckFjdGl2ZUNsYXNzOlN0cmluZyxsZWF2ZUFjdGl2ZUNsYXNzOlN0cmluZyxhcHBlYXJDbGFzczpTdHJpbmcsYXBwZWFyQWN0aXZlQ2xhc3M6U3RyaW5nLGFwcGVhclRvQ2xhc3M6U3RyaW5nLGR1cmF0aW9uOltOdW1iZXIsU3RyaW5nLE9iamVjdF19O2Z1bmN0aW9uIHdvKHQpe3ZhciBlPXQmJnQuY29tcG9uZW50T3B0aW9ucztyZXR1cm4gZSYmZS5DdG9yLm9wdGlvbnMuYWJzdHJhY3Q/d28oSGUoZS5jaGlsZHJlbikpOnR9ZnVuY3Rpb24gQW8odCl7dmFyIGU9e30sbj10LiRvcHRpb25zO2Zvcih2YXIgciBpbiBuLnByb3BzRGF0YSllW3JdPXRbcl07dmFyIG89bi5fcGFyZW50TGlzdGVuZXJzO2Zvcih2YXIgaSBpbiBvKWVbXyhpKV09b1tpXTtyZXR1cm4gZX1mdW5jdGlvbiB4byh0LGUpe2lmKC9cXGQta2VlcC1hbGl2ZSQvLnRlc3QoZS50YWcpKXJldHVybiB0KFwia2VlcC1hbGl2ZVwiLHtwcm9wczplLmNvbXBvbmVudE9wdGlvbnMucHJvcHNEYXRhfSl9dmFyIE9vPWZ1bmN0aW9uKHQpe3JldHVybiB0LnRhZ3x8VWUodCl9LGtvPWZ1bmN0aW9uKHQpe3JldHVyblwic2hvd1wiPT09dC5uYW1lfSxTbz17bmFtZTpcInRyYW5zaXRpb25cIixwcm9wczokbyxhYnN0cmFjdDohMCxyZW5kZXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxuPXRoaXMuJHNsb3RzLmRlZmF1bHQ7aWYobiYmKG49bi5maWx0ZXIoT28pKS5sZW5ndGgpe3ZhciByPXRoaXMubW9kZSxpPW5bMF07aWYoZnVuY3Rpb24odCl7Zm9yKDt0PXQucGFyZW50OylpZih0LmRhdGEudHJhbnNpdGlvbilyZXR1cm4hMH0odGhpcy4kdm5vZGUpKXJldHVybiBpO3ZhciBhPXdvKGkpO2lmKCFhKXJldHVybiBpO2lmKHRoaXMuX2xlYXZpbmcpcmV0dXJuIHhvKHQsaSk7dmFyIHM9XCJfX3RyYW5zaXRpb24tXCIrdGhpcy5fdWlkK1wiLVwiO2Eua2V5PW51bGw9PWEua2V5P2EuaXNDb21tZW50P3MrXCJjb21tZW50XCI6cythLnRhZzpvKGEua2V5KT8wPT09U3RyaW5nKGEua2V5KS5pbmRleE9mKHMpP2Eua2V5OnMrYS5rZXk6YS5rZXk7dmFyIGM9KGEuZGF0YXx8KGEuZGF0YT17fSkpLnRyYW5zaXRpb249QW8odGhpcyksdT10aGlzLl92bm9kZSxsPXdvKHUpO2lmKGEuZGF0YS5kaXJlY3RpdmVzJiZhLmRhdGEuZGlyZWN0aXZlcy5zb21lKGtvKSYmKGEuZGF0YS5zaG93PSEwKSxsJiZsLmRhdGEmJiFmdW5jdGlvbih0LGUpe3JldHVybiBlLmtleT09PXQua2V5JiZlLnRhZz09PXQudGFnfShhLGwpJiYhVWUobCkmJighbC5jb21wb25lbnRJbnN0YW5jZXx8IWwuY29tcG9uZW50SW5zdGFuY2UuX3Zub2RlLmlzQ29tbWVudCkpe3ZhciBmPWwuZGF0YS50cmFuc2l0aW9uPXgoe30sYyk7aWYoXCJvdXQtaW5cIj09PXIpcmV0dXJuIHRoaXMuX2xlYXZpbmc9ITAsbmUoZixcImFmdGVyTGVhdmVcIixmdW5jdGlvbigpe2UuX2xlYXZpbmc9ITEsZS4kZm9yY2VVcGRhdGUoKX0pLHhvKHQsaSk7aWYoXCJpbi1vdXRcIj09PXIpe2lmKFVlKGEpKXJldHVybiB1O3ZhciBwLGQ9ZnVuY3Rpb24oKXtwKCl9O25lKGMsXCJhZnRlckVudGVyXCIsZCksbmUoYyxcImVudGVyQ2FuY2VsbGVkXCIsZCksbmUoZixcImRlbGF5TGVhdmVcIixmdW5jdGlvbih0KXtwPXR9KX19cmV0dXJuIGl9fX0sRW89eCh7dGFnOlN0cmluZyxtb3ZlQ2xhc3M6U3RyaW5nfSwkbyk7ZnVuY3Rpb24gam8odCl7dC5lbG0uX21vdmVDYiYmdC5lbG0uX21vdmVDYigpLHQuZWxtLl9lbnRlckNiJiZ0LmVsbS5fZW50ZXJDYigpfWZ1bmN0aW9uIFRvKHQpe3QuZGF0YS5uZXdQb3M9dC5lbG0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCl9ZnVuY3Rpb24gSW8odCl7dmFyIGU9dC5kYXRhLnBvcyxuPXQuZGF0YS5uZXdQb3Mscj1lLmxlZnQtbi5sZWZ0LG89ZS50b3Atbi50b3A7aWYocnx8byl7dC5kYXRhLm1vdmVkPSEwO3ZhciBpPXQuZWxtLnN0eWxlO2kudHJhbnNmb3JtPWkuV2Via2l0VHJhbnNmb3JtPVwidHJhbnNsYXRlKFwiK3IrXCJweCxcIitvK1wicHgpXCIsaS50cmFuc2l0aW9uRHVyYXRpb249XCIwc1wifX1kZWxldGUgRW8ubW9kZTt2YXIgRG89e1RyYW5zaXRpb246U28sVHJhbnNpdGlvbkdyb3VwOntwcm9wczpFbyxiZWZvcmVNb3VudDpmdW5jdGlvbigpe3ZhciB0PXRoaXMsZT10aGlzLl91cGRhdGU7dGhpcy5fdXBkYXRlPWZ1bmN0aW9uKG4scil7dmFyIG89S2UodCk7dC5fX3BhdGNoX18odC5fdm5vZGUsdC5rZXB0LCExLCEwKSx0Ll92bm9kZT10LmtlcHQsbygpLGUuY2FsbCh0LG4scil9fSxyZW5kZXI6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMudGFnfHx0aGlzLiR2bm9kZS5kYXRhLnRhZ3x8XCJzcGFuXCIsbj1PYmplY3QuY3JlYXRlKG51bGwpLHI9dGhpcy5wcmV2Q2hpbGRyZW49dGhpcy5jaGlsZHJlbixvPXRoaXMuJHNsb3RzLmRlZmF1bHR8fFtdLGk9dGhpcy5jaGlsZHJlbj1bXSxhPUFvKHRoaXMpLHM9MDtzPG8ubGVuZ3RoO3MrKyl7dmFyIGM9b1tzXTtjLnRhZyYmbnVsbCE9Yy5rZXkmJjAhPT1TdHJpbmcoYy5rZXkpLmluZGV4T2YoXCJfX3ZsaXN0XCIpJiYoaS5wdXNoKGMpLG5bYy5rZXldPWMsKGMuZGF0YXx8KGMuZGF0YT17fSkpLnRyYW5zaXRpb249YSl9aWYocil7Zm9yKHZhciB1PVtdLGw9W10sZj0wO2Y8ci5sZW5ndGg7ZisrKXt2YXIgcD1yW2ZdO3AuZGF0YS50cmFuc2l0aW9uPWEscC5kYXRhLnBvcz1wLmVsbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxuW3Aua2V5XT91LnB1c2gocCk6bC5wdXNoKHApfXRoaXMua2VwdD10KGUsbnVsbCx1KSx0aGlzLnJlbW92ZWQ9bH1yZXR1cm4gdChlLG51bGwsaSl9LHVwZGF0ZWQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnByZXZDaGlsZHJlbixlPXRoaXMubW92ZUNsYXNzfHwodGhpcy5uYW1lfHxcInZcIikrXCItbW92ZVwiO3QubGVuZ3RoJiZ0aGlzLmhhc01vdmUodFswXS5lbG0sZSkmJih0LmZvckVhY2goam8pLHQuZm9yRWFjaChUbyksdC5mb3JFYWNoKElvKSx0aGlzLl9yZWZsb3c9ZG9jdW1lbnQuYm9keS5vZmZzZXRIZWlnaHQsdC5mb3JFYWNoKGZ1bmN0aW9uKHQpe2lmKHQuZGF0YS5tb3ZlZCl7dmFyIG49dC5lbG0scj1uLnN0eWxlO1FyKG4sZSksci50cmFuc2Zvcm09ci5XZWJraXRUcmFuc2Zvcm09ci50cmFuc2l0aW9uRHVyYXRpb249XCJcIixuLmFkZEV2ZW50TGlzdGVuZXIoS3Isbi5fbW92ZUNiPWZ1bmN0aW9uIHQocil7ciYmci50YXJnZXQhPT1ufHxyJiYhL3RyYW5zZm9ybSQvLnRlc3Qoci5wcm9wZXJ0eU5hbWUpfHwobi5yZW1vdmVFdmVudExpc3RlbmVyKEtyLHQpLG4uX21vdmVDYj1udWxsLFlyKG4sZSkpfSl9fSkpfSxtZXRob2RzOntoYXNNb3ZlOmZ1bmN0aW9uKHQsZSl7aWYoIVZyKXJldHVybiExO2lmKHRoaXMuX2hhc01vdmUpcmV0dXJuIHRoaXMuX2hhc01vdmU7dmFyIG49dC5jbG9uZU5vZGUoKTt0Ll90cmFuc2l0aW9uQ2xhc3NlcyYmdC5fdHJhbnNpdGlvbkNsYXNzZXMuZm9yRWFjaChmdW5jdGlvbih0KXtVcihuLHQpfSksUnIobixlKSxuLnN0eWxlLmRpc3BsYXk9XCJub25lXCIsdGhpcy4kZWwuYXBwZW5kQ2hpbGQobik7dmFyIHI9bm8obik7cmV0dXJuIHRoaXMuJGVsLnJlbW92ZUNoaWxkKG4pLHRoaXMuX2hhc01vdmU9ci5oYXNUcmFuc2Zvcm19fX19O2JuLmNvbmZpZy5tdXN0VXNlUHJvcD1mdW5jdGlvbih0LGUsbil7cmV0dXJuXCJ2YWx1ZVwiPT09biYmRW4odCkmJlwiYnV0dG9uXCIhPT1lfHxcInNlbGVjdGVkXCI9PT1uJiZcIm9wdGlvblwiPT09dHx8XCJjaGVja2VkXCI9PT1uJiZcImlucHV0XCI9PT10fHxcIm11dGVkXCI9PT1uJiZcInZpZGVvXCI9PT10fSxibi5jb25maWcuaXNSZXNlcnZlZFRhZz1Xbixibi5jb25maWcuaXNSZXNlcnZlZEF0dHI9U24sYm4uY29uZmlnLmdldFRhZ05hbWVzcGFjZT1mdW5jdGlvbih0KXtyZXR1cm4gem4odCk/XCJzdmdcIjpcIm1hdGhcIj09PXQ/XCJtYXRoXCI6dm9pZCAwfSxibi5jb25maWcuaXNVbmtub3duRWxlbWVudD1mdW5jdGlvbih0KXtpZighSClyZXR1cm4hMDtpZihXbih0KSlyZXR1cm4hMTtpZih0PXQudG9Mb3dlckNhc2UoKSxudWxsIT1xblt0XSlyZXR1cm4gcW5bdF07dmFyIGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0KTtyZXR1cm4gdC5pbmRleE9mKFwiLVwiKT4tMT9xblt0XT1lLmNvbnN0cnVjdG9yPT09d2luZG93LkhUTUxVbmtub3duRWxlbWVudHx8ZS5jb25zdHJ1Y3Rvcj09PXdpbmRvdy5IVE1MRWxlbWVudDpxblt0XT0vSFRNTFVua25vd25FbGVtZW50Ly50ZXN0KGUudG9TdHJpbmcoKSl9LHgoYm4ub3B0aW9ucy5kaXJlY3RpdmVzLENvKSx4KGJuLm9wdGlvbnMuY29tcG9uZW50cyxEbyksYm4ucHJvdG90eXBlLl9fcGF0Y2hfXz1IP2xvOmssYm4ucHJvdG90eXBlLiRtb3VudD1mdW5jdGlvbih0LGUpe3JldHVybiBmdW5jdGlvbih0LGUsbil7dmFyIHI7cmV0dXJuIHQuJGVsPWUsdC4kb3B0aW9ucy5yZW5kZXJ8fCh0LiRvcHRpb25zLnJlbmRlcj1wdCksWmUodCxcImJlZm9yZU1vdW50XCIpLHI9ZnVuY3Rpb24oKXt0Ll91cGRhdGUodC5fcmVuZGVyKCksbil9LG5ldyB1bih0LHIsayx7YmVmb3JlOmZ1bmN0aW9uKCl7dC5faXNNb3VudGVkJiYhdC5faXNEZXN0cm95ZWQmJlplKHQsXCJiZWZvcmVVcGRhdGVcIil9fSwhMCksbj0hMSxudWxsPT10LiR2bm9kZSYmKHQuX2lzTW91bnRlZD0hMCxaZSh0LFwibW91bnRlZFwiKSksdH0odGhpcyx0PXQmJkg/ZnVuY3Rpb24odCl7aWYoXCJzdHJpbmdcIj09dHlwZW9mIHQpe3ZhciBlPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodCk7cmV0dXJuIGV8fGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIil9cmV0dXJuIHR9KHQpOnZvaWQgMCxlKX0sSCYmc2V0VGltZW91dChmdW5jdGlvbigpe0wuZGV2dG9vbHMmJnR0JiZ0dC5lbWl0KFwiaW5pdFwiLGJuKX0sMCksbW9kdWxlLmV4cG9ydHM9Ym47IiwidmFyIGluc2VydGVkID0gZXhwb3J0cy5jYWNoZSA9IHt9XG5cbmZ1bmN0aW9uIG5vb3AgKCkge31cblxuZXhwb3J0cy5pbnNlcnQgPSBmdW5jdGlvbiAoY3NzKSB7XG4gIGlmIChpbnNlcnRlZFtjc3NdKSByZXR1cm4gbm9vcFxuICBpbnNlcnRlZFtjc3NdID0gdHJ1ZVxuXG4gIHZhciBlbGVtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKVxuICBlbGVtLnNldEF0dHJpYnV0ZSgndHlwZScsICd0ZXh0L2NzcycpXG5cbiAgaWYgKCd0ZXh0Q29udGVudCcgaW4gZWxlbSkge1xuICAgIGVsZW0udGV4dENvbnRlbnQgPSBjc3NcbiAgfSBlbHNlIHtcbiAgICBlbGVtLnN0eWxlU2hlZXQuY3NzVGV4dCA9IGNzc1xuICB9XG5cbiAgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2hlYWQnKVswXS5hcHBlbmRDaGlsZChlbGVtKVxuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoZWFkJylbMF0ucmVtb3ZlQ2hpbGQoZWxlbSlcbiAgICBpbnNlcnRlZFtjc3NdID0gZmFsc2VcbiAgfVxufVxuIiwibW9kdWxlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChpKXtpZihuW2ldKXJldHVybiBuW2ldLmV4cG9ydHM7dmFyIHI9bltpXT17aTppLGw6ITEsZXhwb3J0czp7fX07cmV0dXJuIGVbaV0uY2FsbChyLmV4cG9ydHMscixyLmV4cG9ydHMsdCksci5sPSEwLHIuZXhwb3J0c312YXIgbj17fTtyZXR1cm4gdC5tPWUsdC5jPW4sdC5pPWZ1bmN0aW9uKGUpe3JldHVybiBlfSx0LmQ9ZnVuY3Rpb24oZSxuLGkpe3QubyhlLG4pfHxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxuLHtjb25maWd1cmFibGU6ITEsZW51bWVyYWJsZTohMCxnZXQ6aX0pfSx0Lm49ZnVuY3Rpb24oZSl7dmFyIG49ZSYmZS5fX2VzTW9kdWxlP2Z1bmN0aW9uKCl7cmV0dXJuIGUuZGVmYXVsdH06ZnVuY3Rpb24oKXtyZXR1cm4gZX07cmV0dXJuIHQuZChuLFwiYVwiLG4pLG59LHQubz1mdW5jdGlvbihlLHQpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSx0KX0sdC5wPVwiL1wiLHQodC5zPTc2KX0oW2Z1bmN0aW9uKGUsdCl7dmFyIG49ZS5leHBvcnRzPVwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3cmJndpbmRvdy5NYXRoPT1NYXRoP3dpbmRvdzpcInVuZGVmaW5lZFwiIT10eXBlb2Ygc2VsZiYmc2VsZi5NYXRoPT1NYXRoP3NlbGY6RnVuY3Rpb24oXCJyZXR1cm4gdGhpc1wiKSgpO1wibnVtYmVyXCI9PXR5cGVvZiBfX2cmJihfX2c9bil9LGZ1bmN0aW9uKGUsdCl7dmFyIG49e30uaGFzT3duUHJvcGVydHk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIG4uY2FsbChlLHQpfX0sZnVuY3Rpb24oZSx0LG4pe3ZhciBpPW4oNTMpLHI9bigxNCk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiBpKHIoZSkpfX0sZnVuY3Rpb24oZSx0LG4pe2UuZXhwb3J0cz0hbig4KShmdW5jdGlvbigpe3JldHVybiA3IT1PYmplY3QuZGVmaW5lUHJvcGVydHkoe30sXCJhXCIse2dldDpmdW5jdGlvbigpe3JldHVybiA3fX0pLmF9KX0sZnVuY3Rpb24oZSx0LG4pe3ZhciBpPW4oNSkscj1uKDExKTtlLmV4cG9ydHM9bigzKT9mdW5jdGlvbihlLHQsbil7cmV0dXJuIGkuZihlLHQscigxLG4pKX06ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlW3RdPW4sZX19LGZ1bmN0aW9uKGUsdCxuKXt2YXIgaT1uKDcpLHI9bigzMCksYT1uKDIzKSxvPU9iamVjdC5kZWZpbmVQcm9wZXJ0eTt0LmY9bigzKT9PYmplY3QuZGVmaW5lUHJvcGVydHk6ZnVuY3Rpb24oZSx0LG4pe2lmKGkoZSksdD1hKHQsITApLGkobikscil0cnl7cmV0dXJuIG8oZSx0LG4pfWNhdGNoKGUpe31pZihcImdldFwiaW4gbnx8XCJzZXRcImluIG4pdGhyb3cgVHlwZUVycm9yKFwiQWNjZXNzb3JzIG5vdCBzdXBwb3J0ZWQhXCIpO3JldHVyblwidmFsdWVcImluIG4mJihlW3RdPW4udmFsdWUpLGV9fSxmdW5jdGlvbihlLHQsbil7dmFyIGk9bigyMSkoXCJ3a3NcIikscj1uKDEyKSxhPW4oMCkuU3ltYm9sLG89XCJmdW5jdGlvblwiPT10eXBlb2YgYTsoZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiBpW2VdfHwoaVtlXT1vJiZhW2VdfHwobz9hOnIpKFwiU3ltYm9sLlwiK2UpKX0pLnN0b3JlPWl9LGZ1bmN0aW9uKGUsdCxuKXt2YXIgaT1uKDkpO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtpZighaShlKSl0aHJvdyBUeXBlRXJyb3IoZStcIiBpcyBub3QgYW4gb2JqZWN0IVwiKTtyZXR1cm4gZX19LGZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3RyeXtyZXR1cm4hIWUoKX1jYXRjaChlKXtyZXR1cm4hMH19fSxmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm5cIm9iamVjdFwiPT10eXBlb2YgZT9udWxsIT09ZTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBlfX0sZnVuY3Rpb24oZSx0LG4pe3ZhciBpPW4oMzUpLHI9bigxNSk7ZS5leHBvcnRzPU9iamVjdC5rZXlzfHxmdW5jdGlvbihlKXtyZXR1cm4gaShlLHIpfX0sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtyZXR1cm57ZW51bWVyYWJsZTohKDEmZSksY29uZmlndXJhYmxlOiEoMiZlKSx3cml0YWJsZTohKDQmZSksdmFsdWU6dH19fSxmdW5jdGlvbihlLHQpe3ZhciBuPTAsaT1NYXRoLnJhbmRvbSgpO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm5cIlN5bWJvbChcIi5jb25jYXQodm9pZCAwPT09ZT9cIlwiOmUsXCIpX1wiLCgrK24raSkudG9TdHJpbmcoMzYpKX19LGZ1bmN0aW9uKGUsdCl7dmFyIG49ZS5leHBvcnRzPXt2ZXJzaW9uOlwiMi40LjBcIn07XCJudW1iZXJcIj09dHlwZW9mIF9fZSYmKF9fZT1uKX0sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7aWYodm9pZCAwPT1lKXRocm93IFR5cGVFcnJvcihcIkNhbid0IGNhbGwgbWV0aG9kIG9uICBcIitlKTtyZXR1cm4gZX19LGZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPVwiY29uc3RydWN0b3IsaGFzT3duUHJvcGVydHksaXNQcm90b3R5cGVPZixwcm9wZXJ0eUlzRW51bWVyYWJsZSx0b0xvY2FsZVN0cmluZyx0b1N0cmluZyx2YWx1ZU9mXCIuc3BsaXQoXCIsXCIpfSxmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz17fX0sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ITB9LGZ1bmN0aW9uKGUsdCl7dC5mPXt9LnByb3BlcnR5SXNFbnVtZXJhYmxlfSxmdW5jdGlvbihlLHQsbil7dmFyIGk9big1KS5mLHI9bigxKSxhPW4oNikoXCJ0b1N0cmluZ1RhZ1wiKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LG4pe2UmJiFyKGU9bj9lOmUucHJvdG90eXBlLGEpJiZpKGUsYSx7Y29uZmlndXJhYmxlOiEwLHZhbHVlOnR9KX19LGZ1bmN0aW9uKGUsdCxuKXt2YXIgaT1uKDIxKShcImtleXNcIikscj1uKDEyKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIGlbZV18fChpW2VdPXIoZSkpfX0sZnVuY3Rpb24oZSx0LG4pe3ZhciBpPW4oMCkscj1pW1wiX19jb3JlLWpzX3NoYXJlZF9fXCJdfHwoaVtcIl9fY29yZS1qc19zaGFyZWRfX1wiXT17fSk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiByW2VdfHwocltlXT17fSl9fSxmdW5jdGlvbihlLHQpe3ZhciBuPU1hdGguY2VpbCxpPU1hdGguZmxvb3I7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiBpc05hTihlPStlKT8wOihlPjA/aTpuKShlKX19LGZ1bmN0aW9uKGUsdCxuKXt2YXIgaT1uKDkpO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe2lmKCFpKGUpKXJldHVybiBlO3ZhciBuLHI7aWYodCYmXCJmdW5jdGlvblwiPT10eXBlb2Yobj1lLnRvU3RyaW5nKSYmIWkocj1uLmNhbGwoZSkpKXJldHVybiByO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mKG49ZS52YWx1ZU9mKSYmIWkocj1uLmNhbGwoZSkpKXJldHVybiByO2lmKCF0JiZcImZ1bmN0aW9uXCI9PXR5cGVvZihuPWUudG9TdHJpbmcpJiYhaShyPW4uY2FsbChlKSkpcmV0dXJuIHI7dGhyb3cgVHlwZUVycm9yKFwiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlXCIpfX0sZnVuY3Rpb24oZSx0LG4pe3ZhciBpPW4oMCkscj1uKDEzKSxhPW4oMTcpLG89bigyNSkscz1uKDUpLmY7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0PXIuU3ltYm9sfHwoci5TeW1ib2w9YT97fTppLlN5bWJvbHx8e30pO1wiX1wiPT1lLmNoYXJBdCgwKXx8ZSBpbiB0fHxzKHQsZSx7dmFsdWU6by5mKGUpfSl9fSxmdW5jdGlvbihlLHQsbil7dC5mPW4oNil9LGZ1bmN0aW9uKGUsdCxuKXtcInVzZSBzdHJpY3RcIjt0LmE9e3RyYW5zbGF0aW9uczp7YWY6e2xhbmd1YWdlOlwiQWZyaWthYW5zXCIsbW9udGhzOntvcmlnaW5hbDpbXCJKYW51YXJpZVwiLFwiRmVicnVhcmllXCIsXCJNYWFydFwiLFwiQXByaWxcIixcIk1laVwiLFwiSnVuaWVcIixcIkp1bGllXCIsXCJBdWd1c3R1c1wiLFwiU2VwdGVtYmVyXCIsXCJPa3RvYmVyXCIsXCJOb3ZlbWJlclwiLFwiRGVzZW1iZXJcIl0sYWJicjpbXCJKYW5cIixcIkZlYlwiLFwiTXJ0XCIsXCJBcHJcIixcIk1laVwiLFwiSnVuXCIsXCJKdWxcIixcIkF1Z1wiLFwiU2VwXCIsXCJPa3RcIixcIk5vdlwiLFwiRGVzXCJdfSxkYXlzOltcIlNvLlwiLFwiTWEuXCIsXCJEaS5cIixcIldvLlwiLFwiRG8uXCIsXCJWci5cIixcIlNhLlwiXX0sYXI6e2xhbmd1YWdlOlwiQXJhYmljXCIscnRsOiEwLG1vbnRoczp7b3JpZ2luYWw6W1wi2YrZhtin2YrYsVwiLFwi2YHYqNix2KfZitixXCIsXCLZhdin2LHYs1wiLFwi2KPYqNix2YrZhFwiLFwi2YXYp9mK2YhcIixcItmK2YjZhtmK2YhcIixcItmK2YjZhNmK2YhcIixcItij2LrYs9i32LNcIixcItiz2KjYqtmF2KjYsVwiLFwi2KPZg9iq2YjYqNixXCIsXCLZhtmI2qTZhdio2LFcIixcItiv2YrYs9mF2KjYsVwiXSxhYmJyOltcItmK2YbYp9mK2LFcIixcItmB2KjYsdin2YrYsVwiLFwi2YXYp9ix2LNcIixcItij2KjYsdmK2YRcIixcItmF2KfZitmIXCIsXCLZitmI2YbZitmIXCIsXCLZitmI2YTZitmIXCIsXCLYo9i62LPYt9izXCIsXCLYs9io2KrZhdio2LFcIixcItij2YPYqtmI2KjYsVwiLFwi2YbZiNqk2YXYqNixXCIsXCLYr9mK2LPZhdio2LFcIl19LGRheXM6W1wi2KPYrdivXCIsXCLYpdir2YbZitmGXCIsXCLYq9mE2KfYq9in2KFcIixcItij2LHYqNi52KfYoVwiLFwi2K7ZhdmK2LNcIixcItis2YXYudipXCIsXCLYs9io2KpcIl19LGJnOntsYW5ndWFnZTpcIkJ1bGdhcmlhblwiLG1vbnRoczp7b3JpZ2luYWw6W1wi0K/QvdGD0LDRgNC4XCIsXCLQpNC10LLRgNGD0LDRgNC4XCIsXCLQnNCw0YDRglwiLFwi0JDQv9GA0LjQu1wiLFwi0JzQsNC5XCIsXCLQrtC90LhcIixcItCu0LvQuFwiLFwi0JDQstCz0YPRgdGCXCIsXCLQodC10L/RgtC10LzQstGA0LhcIixcItCe0LrRgtC+0LzQstGA0LhcIixcItCd0L7QtdC80LLRgNC4XCIsXCLQlNC10LrQtdC80LLRgNC4XCJdLGFiYnI6W1wi0K/QvVwiLFwi0KTQtdCyXCIsXCLQnNCw0YBcIixcItCQ0L/RgFwiLFwi0JzQsNC5XCIsXCLQrtC90LhcIixcItCu0LvQuFwiLFwi0JDQstCzXCIsXCLQodC10L9cIixcItCe0LrRglwiLFwi0J3QvtC1XCIsXCLQlNC10LpcIl19LGRheXM6W1wi0J3QtFwiLFwi0J/QvVwiLFwi0JLRglwiLFwi0KHRgFwiLFwi0KfRglwiLFwi0J/RglwiLFwi0KHQsVwiXX0sYnM6e2xhbmd1YWdlOlwiQm9zbmlhblwiLG1vbnRoczp7b3JpZ2luYWw6W1wiSmFudWFyXCIsXCJGZWJydWFyXCIsXCJNYXJ0XCIsXCJBcHJpbFwiLFwiTWFqXCIsXCJKdW5pXCIsXCJKdWxpXCIsXCJBdmd1c3RcIixcIlNlcHRlbWJhclwiLFwiT2t0b2JhclwiLFwiTm92ZW1iYXJcIixcIkRlY2VtYmFyXCJdLGFiYnI6W1wiSmFuXCIsXCJGZWJcIixcIk1hclwiLFwiQXByXCIsXCJNYWpcIixcIkp1blwiLFwiSnVsXCIsXCJBdmdcIixcIlNlcFwiLFwiT2t0XCIsXCJOb3ZcIixcIkRlY1wiXX0sZGF5czpbXCJOZWRcIixcIlBvblwiLFwiVXRvXCIsXCJTcmlcIixcIsSMZXRcIixcIlBldFwiLFwiU3ViXCJdfSxjczp7bGFuZ3VhZ2U6XCJDemVjaFwiLG1vbnRoczp7b3JpZ2luYWw6W1wibGVkZW5cIixcIsO6bm9yXCIsXCJixZllemVuXCIsXCJkdWJlblwiLFwia3bEm3RlblwiLFwixI1lcnZlblwiLFwixI1lcnZlbmVjXCIsXCJzcnBlblwiLFwiesOhxZnDrVwiLFwixZnDrWplblwiLFwibGlzdG9wYWRcIixcInByb3NpbmVjXCJdLGFiYnI6W1wibGVkXCIsXCLDum5vXCIsXCJixZllXCIsXCJkdWJcIixcImt2xJtcIixcIsSNZXJcIixcIsSNZWNcIixcInNycFwiLFwiesOhxZlcIixcIsWZw61qXCIsXCJsaXNcIixcInByb1wiXX0sZGF5czpbXCJuZVwiLFwicG9cIixcIsO6dFwiLFwic3RcIixcIsSNdFwiLFwicMOhXCIsXCJzb1wiXX0sZGE6e2xhbmd1YWdlOlwiRGFuaXNoXCIsbW9udGhzOntvcmlnaW5hbDpbXCJKYW51YXJcIixcIkZlYnJ1YXJcIixcIk1hcnRzXCIsXCJBcHJpbFwiLFwiTWFqXCIsXCJKdW5pXCIsXCJKdWxpXCIsXCJBdWd1c3RcIixcIlNlcHRlbWJlclwiLFwiT2t0b2JlclwiLFwiTm92ZW1iZXJcIixcIkRlY2VtYmVyXCJdLGFiYnI6W1wiSmFuXCIsXCJGZWJcIixcIk1hclwiLFwiQXByXCIsXCJNYWpcIixcIkp1blwiLFwiSnVsXCIsXCJBdWdcIixcIlNlcFwiLFwiT2t0XCIsXCJOb3ZcIixcIkRlY1wiXX0sZGF5czpbXCJTw7hcIixcIk1hXCIsXCJUaVwiLFwiT25cIixcIlRvXCIsXCJGclwiLFwiTMO4XCJdfSxkZTp7bGFuZ3VhZ2U6XCJHZXJtYW5cIixtb250aHM6e29yaWdpbmFsOltcIkphbnVhclwiLFwiRmVicnVhclwiLFwiTcOkcnpcIixcIkFwcmlsXCIsXCJNYWlcIixcIkp1bmlcIixcIkp1bGlcIixcIkF1Z3VzdFwiLFwiU2VwdGVtYmVyXCIsXCJPa3RvYmVyXCIsXCJOb3ZlbWJlclwiLFwiRGV6ZW1iZXJcIl0sYWJicjpbXCJKYW5cIixcIkZlYlwiLFwiTcOkclwiLFwiQXByXCIsXCJNYWlcIixcIkp1blwiLFwiSnVsXCIsXCJBdWdcIixcIlNlcFwiLFwiT2t0XCIsXCJOb3ZcIixcIkRlelwiXX0sZGF5czpbXCJTby5cIixcIk1vLlwiLFwiRGkuXCIsXCJNaS5cIixcIkRvLlwiLFwiRnIuXCIsXCJTYS5cIl19LGVlOntsYW5ndWFnZTpcIkVzdG9uaWFuXCIsbW9udGhzOntvcmlnaW5hbDpbXCJKYWFudWFyXCIsXCJWZWVicnVhclwiLFwiTcOkcnRzXCIsXCJBcHJpbGxcIixcIk1haVwiLFwiSnV1bmlcIixcIkp1dWxpXCIsXCJBdWd1c3RcIixcIlNlcHRlbWJlclwiLFwiT2t0b29iZXJcIixcIk5vdmVtYmVyXCIsXCJEZXRzZW1iZXJcIl0sYWJicjpbXCJKYWFuXCIsXCJWZWViclwiLFwiTcOkcnRzXCIsXCJBcHJcIixcIk1haVwiLFwiSnV1bmlcIixcIkp1dWxpXCIsXCJBdWdcIixcIlNlcHRcIixcIk9rdFwiLFwiTm92XCIsXCJEZXRzXCJdfSxkYXlzOltcIlBcIixcIkVcIixcIlRcIixcIktcIixcIk5cIixcIlJcIixcIkxcIl19LGVsOntsYW5ndWFnZTpcIkdyZWVrXCIsbW9udGhzOntvcmlnaW5hbDpbXCLOmc6xzr3Ov8+FzqzPgc65zr/PglwiLFwizqbOtc6yz4HOv8+FzqzPgc65zr/PglwiLFwizpzOrM+Bz4TOuc6/z4JcIixcIs6Rz4DPgc6vzrvOuc6/z4JcIixcIs6czqzPis6/z4JcIixcIs6Zzr/Pjc69zrnOv8+CXCIsXCLOmc6/z43Ou865zr/PglwiLFwizpHPjc6zzr/Phc+Dz4TOv8+CXCIsXCLOo861z4DPhM6tzrzOss+BzrnOv8+CXCIsXCLOn866z4TPjs6yz4HOuc6/z4JcIixcIs6dzr/Orc68zrLPgc65zr/PglwiLFwizpTOtc66zq3OvM6yz4HOuc6/z4JcIl0sYWJicjpbXCLOmc6xzr1cIixcIs6mzrXOslwiLFwizpzOsc+BXCIsXCLOkc+Az4FcIixcIs6czrHOuVwiLFwizpnOv8+Fzr1cIixcIs6Zzr/Phc67XCIsXCLOkc+FzrNcIixcIs6jzrXPgFwiLFwizp/Ous+EXCIsXCLOnc6/zrVcIixcIs6UzrXOulwiXX0sZGF5czpbXCLOms+Fz4FcIixcIs6UzrXPhVwiLFwizqTPgc65XCIsXCLOpM61z4RcIixcIs6gzrXOvFwiLFwizqDOsc+BXCIsXCLOo86xz4RcIl19LGVuOntsYW5ndWFnZTpcIkVuZ2xpc2hcIixtb250aHM6e29yaWdpbmFsOltcIkphbnVhcnlcIixcIkZlYnJ1YXJ5XCIsXCJNYXJjaFwiLFwiQXByaWxcIixcIk1heVwiLFwiSnVuZVwiLFwiSnVseVwiLFwiQXVndXN0XCIsXCJTZXB0ZW1iZXJcIixcIk9jdG9iZXJcIixcIk5vdmVtYmVyXCIsXCJEZWNlbWJlclwiXSxhYmJyOltcIkphblwiLFwiRmViXCIsXCJNYXJcIixcIkFwclwiLFwiTWF5XCIsXCJKdW5cIixcIkp1bFwiLFwiQXVnXCIsXCJTZXBcIixcIk9jdFwiLFwiTm92XCIsXCJEZWNcIl19LGRheXM6W1wiU3VuXCIsXCJNb25cIixcIlR1ZVwiLFwiV2VkXCIsXCJUaHVcIixcIkZyaVwiLFwiU2F0XCJdfSxlczp7bGFuZ3VhZ2U6XCJTcGFuaXNoXCIsbW9udGhzOntvcmlnaW5hbDpbXCJFbmVyb1wiLFwiRmVicmVyb1wiLFwiTWFyem9cIixcIkFicmlsXCIsXCJNYXlvXCIsXCJKdW5pb1wiLFwiSnVsaW9cIixcIkFnb3N0b1wiLFwiU2VwdGllbWJyZVwiLFwiT2N0dWJyZVwiLFwiTm92aWVtYnJlXCIsXCJEaWNpZW1icmVcIl0sYWJicjpbXCJFbmVcIixcIkZlYlwiLFwiTWFyXCIsXCJBYnJcIixcIk1heVwiLFwiSnVuXCIsXCJKdWxcIixcIkFnb1wiLFwiU2VwXCIsXCJPY3RcIixcIk5vdlwiLFwiRGljXCJdfSxkYXlzOltcIkRvbVwiLFwiTHVuXCIsXCJNYXJcIixcIk1pw6lcIixcIkp1ZVwiLFwiVmllXCIsXCJTYWJcIl19LGNhOntsYW5ndWFnZTpcIkNhdGFsYW5cIixtb250aHM6e29yaWdpbmFsOltcIkdlbmVyXCIsXCJGZWJyZXJcIixcIk1hcsOnXCIsXCJBYnJpbFwiLFwiTWFpZ1wiLFwiSnVueVwiLFwiSnVsaW9sXCIsXCJBZ29zdFwiLFwiU2V0ZW1icmVcIixcIk9jdHVicmVcIixcIk5vdmVtYnJlXCIsXCJEZXNlbWJyZVwiXSxhYmJyOltcIkdlblwiLFwiRmViXCIsXCJNYXJcIixcIkFiclwiLFwiTWFpXCIsXCJKdW5cIixcIkp1bFwiLFwiQWdvXCIsXCJTZXRcIixcIk9jdFwiLFwiTm92XCIsXCJEZXNcIl19LGRheXM6W1wiRGl1XCIsXCJEaWxcIixcIkRtclwiLFwiRG1jXCIsXCJEaWpcIixcIkRpdlwiLFwiRGlzXCJdfSxmaTp7bGFuZ3VhZ2U6XCJGaW5pc2hcIixtb250aHM6e29yaWdpbmFsOltcInRhbW1pa3V1XCIsXCJoZWxtaWt1dVwiLFwibWFhbGlza3V1XCIsXCJodWh0aWt1dVwiLFwidG91a29rdXVcIixcImtlc8Oka3V1XCIsXCJoZWluw6RrdXVcIixcImVsb2t1dVwiLFwic3l5c2t1dVwiLFwibG9rYWt1dVwiLFwibWFycmFza3V1XCIsXCJqb3VsdWt1dVwiXSxhYmJyOltcInRhbW1pXCIsXCJoZWxtaVwiLFwibWFhbGlzXCIsXCJodWh0aVwiLFwidG91a29cIixcImtlc8OkXCIsXCJoZWluw6RcIixcImVsb1wiLFwic3l5c1wiLFwibG9rYVwiLFwibWFycmFzXCIsXCJqb3VsdVwiXX0sZGF5czpbXCJzdVwiLFwibWFcIixcInRpXCIsXCJrZVwiLFwidG9cIixcInBlXCIsXCJsYVwiXX0sZnI6e2xhbmd1YWdlOlwiRnJlbmNoXCIsbW9udGhzOntvcmlnaW5hbDpbXCJKYW52aWVyXCIsXCJGw6l2cmllclwiLFwiTWFyc1wiLFwiQXZyaWxcIixcIk1haVwiLFwiSnVpblwiLFwiSnVpbGxldFwiLFwiQW/Du3RcIixcIlNlcHRlbWJyZVwiLFwiT2N0b2JyZVwiLFwiTm92ZW1icmVcIixcIkTDqWNlbWJyZVwiXSxhYmJyOltcIkphblwiLFwiRsOpdlwiLFwiTWFyXCIsXCJBdnJcIixcIk1haVwiLFwiSnVpblwiLFwiSnVpbFwiLFwiQW/Du3RcIixcIlNlcFwiLFwiT2N0XCIsXCJOb3ZcIixcIkTDqWNcIl19LGRheXM6W1wiRGltXCIsXCJMdW5cIixcIk1hclwiLFwiTWVyXCIsXCJKZXVcIixcIlZlblwiLFwiU2FtXCJdfSxnZTp7bGFuZ3VhZ2U6XCJHZW9yZ2lhXCIsbW9udGhzOntvcmlnaW5hbDpbXCLhg5jhg5Dhg5zhg5Xhg5Dhg6Dhg5hcIixcIuGDl+GDlOGDkeGDlOGDoOGDleGDkOGDmuGDmFwiLFwi4YOb4YOQ4YOg4YOi4YOYXCIsXCLhg5Dhg57hg6Dhg5jhg5rhg5hcIixcIuGDm+GDkOGDmOGDoeGDmFwiLFwi4YOY4YOV4YOc4YOY4YOh4YOYXCIsXCLhg5jhg5Xhg5rhg5jhg6Hhg5hcIixcIuGDkOGDkuGDleGDmOGDoeGDouGDnVwiLFwi4YOh4YOU4YOl4YOi4YOU4YOb4YOR4YOU4YOg4YOYXCIsXCLhg53hg6Xhg6Lhg53hg5vhg5Hhg5Thg6Dhg5hcIixcIuGDnOGDneGDlOGDm+GDkeGDlOGDoOGDmFwiLFwi4YOT4YOU4YOZ4YOU4YOb4YOR4YOU4YOg4YOYXCJdLGFiYnI6W1wi4YOY4YOQ4YOcXCIsXCLhg5fhg5Thg5FcIixcIuGDm+GDkOGDoFwiLFwi4YOQ4YOe4YOgXCIsXCLhg5vhg5Dhg5hcIixcIuGDmOGDleGDnFwiLFwi4YOY4YOV4YOaXCIsXCLhg5Dhg5Lhg5VcIixcIuGDoeGDlOGDpVwiLFwi4YOd4YOl4YOiXCIsXCLhg5zhg53hg5RcIixcIuGDk+GDlOGDmVwiXX0sZGF5czpbXCLhg5nhg5Xhg5hcIixcIuGDneGDoOGDqFwiLFwi4YOh4YOQ4YObXCIsXCLhg53hg5fhg65cIixcIuGDruGDo+GDl1wiLFwi4YOe4YOQ4YOgXCIsXCLhg6jhg5Dhg5FcIl19LGphOntsYW5ndWFnZTpcIkphcGFuZXNlXCIseW1kOiEwLG1vbnRoczp7b3JpZ2luYWw6W1wiMeaciFwiLFwiMuaciFwiLFwiM+aciFwiLFwiNOaciFwiLFwiNeaciFwiLFwiNuaciFwiLFwiN+aciFwiLFwiOOaciFwiLFwiOeaciFwiLFwiMTDmnIhcIixcIjEx5pyIXCIsXCIxMuaciFwiXSxhYmJyOltcIjHmnIhcIixcIjLmnIhcIixcIjPmnIhcIixcIjTmnIhcIixcIjXmnIhcIixcIjbmnIhcIixcIjfmnIhcIixcIjjmnIhcIixcIjnmnIhcIixcIjEw5pyIXCIsXCIxMeaciFwiLFwiMTLmnIhcIl19LGRheXM6W1wi5pelXCIsXCLmnIhcIixcIueBq1wiLFwi5rC0XCIsXCLmnKhcIixcIumHkVwiLFwi5ZyfXCJdfSxoZTp7bGFuZ3VhZ2U6XCJIZWJyZXdcIixydGw6ITAsbW9udGhzOntvcmlnaW5hbDpbXCLXmdeg15XXkNeoXCIsXCLXpNeR16jXldeQ16hcIixcItee16jXpVwiLFwi15DXpNeo15nXnFwiLFwi157XkNeZXCIsXCLXmdeV16DXmVwiLFwi15nXldec15lcIixcIteQ15XXkteV16HXmFwiLFwi16HXpNeY157XkdeoXCIsXCLXkNeV16fXmNeV15HXqFwiLFwi16DXldeR157XkdeoXCIsXCLXk9em157XkdeoXCJdLGFiYnI6W1wi15nXoNeVXCIsXCLXpNeR16hcIixcItee16jXpVwiLFwi15DXpNeoXCIsXCLXnteQ15lcIixcIteZ15XXoFwiLFwi15nXldecXCIsXCLXkNeV15JcIixcIteh16TXmFwiLFwi15DXldenXCIsXCLXoNeV15FcIixcIteT16bXnlwiXX0sZGF5czpbXCLXkFwiLFwi15FcIixcIteSXCIsXCLXk1wiLFwi15RcIixcIteVXCIsXCLXqVwiXX0saHU6e2xhbmd1YWdlOlwiSHVuZ2FyaWFuXCIseW1kOiEwLG1vbnRoczp7b3JpZ2luYWw6W1wiSmFudcOhclwiLFwiRmVicnXDoXJcIixcIk3DoXJjaXVzXCIsXCLDgXByaWxpc1wiLFwiTcOhanVzXCIsXCJKw7puaXVzXCIsXCJKw7psaXVzXCIsXCJBdWd1c3p0dXNcIixcIlN6ZXB0ZW1iZXJcIixcIk9rdMOzYmVyXCIsXCJOb3ZlbWJlclwiLFwiRGVjZW1iZXJcIl0sYWJicjpbXCJKYW5cIixcIkZlYnJcIixcIk3DoXJjXCIsXCLDgXByXCIsXCJNw6FqXCIsXCJKw7puXCIsXCJKw7psXCIsXCJBdWdcIixcIlN6ZXB0XCIsXCJPa3RcIixcIk5vdlwiLFwiRGVjXCJdfSxkYXlzOltcIlZhc1wiLFwiSMOpdFwiLFwiS2VcIixcIlN6ZVwiLFwiQ3PDvFwiLFwiUMOpblwiLFwiU3pvXCJdfSxocjp7bGFuZ3VhZ2U6XCJDcm9hdGlhblwiLG1vbnRoczp7b3JpZ2luYWw6W1wiU2lqZcSNYW5qXCIsXCJWZWxqYcSNYVwiLFwiT8W+dWpha1wiLFwiVHJhdmFualwiLFwiU3ZpYmFualwiLFwiTGlwYW5qXCIsXCJTcnBhbmpcIixcIktvbG92b3pcIixcIlJ1amFuXCIsXCJMaXN0b3BhZFwiLFwiU3R1ZGVuaVwiLFwiUHJvc2luYWNcIl0sYWJicjpbXCJTaWpcIixcIlZlbGpcIixcIk/FvnVcIixcIlRyYVwiLFwiU3ZpXCIsXCJMaXBcIixcIlNycFwiLFwiS29sXCIsXCJSdWpcIixcIkxpc1wiLFwiU3R1XCIsXCJQcm9cIl19LGRheXM6W1wiTmVkXCIsXCJQb25cIixcIlV0b1wiLFwiU3JpXCIsXCLEjGV0XCIsXCJQZXRcIixcIlN1YlwiXX0saWQ6e2xhbmd1YWdlOlwiSW5kb25lc2lhblwiLG1vbnRoczp7b3JpZ2luYWw6W1wiSmFudWFyaVwiLFwiRmVicnVhcmlcIixcIk1hcmV0XCIsXCJBcHJpbFwiLFwiTWVpXCIsXCJKdW5pXCIsXCJKdWxpXCIsXCJBZ3VzdHVzXCIsXCJTZXB0ZW1iZXJcIixcIk9rdG9iZXJcIixcIk5vdmVtYmVyXCIsXCJEZXNlbWJlclwiXSxhYmJyOltcIkphblwiLFwiRmViXCIsXCJNYXJcIixcIkFwclwiLFwiTWVpXCIsXCJKdW5cIixcIkp1bFwiLFwiQWd1XCIsXCJTZXBcIixcIk9rdFwiLFwiTm92XCIsXCJEZXNcIl19LGRheXM6W1wiTWluXCIsXCJTZW5cIixcIlNlbFwiLFwiUmFiXCIsXCJLYW1cIixcIkp1bVwiLFwiU2FiXCJdfSxpdDp7bGFuZ3VhZ2U6XCJJdGFsaWFuXCIsbW9udGhzOntvcmlnaW5hbDpbXCJHZW5uYWlvXCIsXCJGZWJicmFpb1wiLFwiTWFyem9cIixcIkFwcmlsZVwiLFwiTWFnZ2lvXCIsXCJHaXVnbm9cIixcIkx1Z2xpb1wiLFwiQWdvc3RvXCIsXCJTZXR0ZW1icmVcIixcIk90dG9icmVcIixcIk5vdmVtYnJlXCIsXCJEaWNlbWJyZVwiXSxhYmJyOltcIkdlblwiLFwiRmViXCIsXCJNYXJcIixcIkFwclwiLFwiTWFnXCIsXCJHaXVcIixcIkx1Z1wiLFwiQWdvXCIsXCJTZXRcIixcIk90dFwiLFwiTm92XCIsXCJEaWNcIl19LGRheXM6W1wiRG9tXCIsXCJMdW5cIixcIk1hclwiLFwiTWVyXCIsXCJHaW9cIixcIlZlblwiLFwiU2FiXCJdfSxpczp7bGFuZ3VhZ2U6XCJJY2VsYW5kaWNcIixtb250aHM6e29yaWdpbmFsOltcIkphbsO6YXJcIixcIkZlYnLDumFyXCIsXCJNYXJzXCIsXCJBcHLDrWxcIixcIk1hw61cIixcIkrDum7DrVwiLFwiSsO6bMOtXCIsXCLDgWfDunN0XCIsXCJTZXB0ZW1iZXJcIixcIk9rdMOzYmVyXCIsXCJOw7N2ZW1iZXJcIixcIkRlc2VtYmVyXCJdLGFiYnI6W1wiSmFuXCIsXCJGZWJcIixcIk1hcnNcIixcIkFwclwiLFwiTWHDrVwiLFwiSsO6blwiLFwiSsO6bFwiLFwiw4Fnw7pcIixcIlNlcFwiLFwiT2t0XCIsXCJOw7N2XCIsXCJEZXNcIl19LGRheXM6W1wiU3VuXCIsXCJNw6FuXCIsXCLDnnJpXCIsXCJNacOwXCIsXCJGaW1cIixcIkbDtnNcIixcIkxhdVwiXX0sZmE6e2xhbmd1YWdlOlwiUGVyc2lhblwiLG1vbnRoczp7b3JpZ2luYWw6W1wi2YHYsdmI2LHYr9uM2YZcIixcItin2LHYr9uM2KjZh9i02KpcIixcItiu2LHYr9in2K9cIixcItiq24zYsVwiLFwi2YXYsdiv2KfYr1wiLFwi2LTZh9ix24zZiNixXCIsXCLZhdmH2LFcIixcItii2KjYp9mGXCIsXCLYotiw2LFcIixcItiv24xcIixcItio2YfZhdmGXCIsXCLYp9iz2YHZhtivXCJdLGFiYnI6W1wi2YHYsdmIXCIsXCLYp9ix2K9cIixcItiu2LHYr1wiLFwi2KrbjNixXCIsXCLZhdix2K9cIixcIti02YfYsVwiLFwi2YXZh9ixXCIsXCLYotio2KdcIixcItii2LDYsVwiLFwi2K/bjFwiLFwi2KjZh9mFXCIsXCLYp9iz2YFcIl19LGRheXM6W1wi24zaqdi02YbYqNmHXCIsXCLYr9mI2LTZhtio2YdcIixcItiz2YfigIzYtNmG2KjZh1wiLFwi2obZh9in2LHYtNmG2KjZh1wiLFwi2b7Zhtis2LTZhtio2YdcIixcItis2YXYudmHXCIsXCLYtNmG2KjZh1wiXX0sa286e2xhbmd1YWdlOlwiS29yZWFuXCIseW1kOiEwLG1vbnRoczp7b3JpZ2luYWw6W1wiMeyblFwiLFwiMuyblFwiLFwiM+yblFwiLFwiNOyblFwiLFwiNeyblFwiLFwiNuyblFwiLFwiN+yblFwiLFwiOOyblFwiLFwiOeyblFwiLFwiMTDsm5RcIixcIjEx7JuUXCIsXCIxMuyblFwiXSxhYmJyOltcIjHsm5RcIixcIjLsm5RcIixcIjPsm5RcIixcIjTsm5RcIixcIjXsm5RcIixcIjbsm5RcIixcIjfsm5RcIixcIjjsm5RcIixcIjnsm5RcIixcIjEw7JuUXCIsXCIxMeyblFwiLFwiMTLsm5RcIl19LGRheXM6W1wi7J28XCIsXCLsm5RcIixcIu2ZlFwiLFwi7IiYXCIsXCLrqqlcIixcIuq4iFwiLFwi7YagXCJdfSxsYjp7bGFuZ3VhZ2U6XCJMdXhlbWJvdXJnaXNoXCIsbW9udGhzOntvcmlnaW5hbDpbXCJKYW51YXJcIixcIkZlYnJ1YXJcIixcIk3DpGVyelwiLFwiQWJyw6tsbFwiLFwiTcOkaVwiLFwiSnVuaVwiLFwiSnVsaVwiLFwiQXVndXN0XCIsXCJTZXB0ZW1iZXJcIixcIk9rdG9iZXJcIixcIk5vdmVtYmVyXCIsXCJEZXplbWJlclwiXSxhYmJyOltcIkphblwiLFwiRmViXCIsXCJNw6RlXCIsXCJBYnJcIixcIk3DpGlcIixcIkp1blwiLFwiSnVsXCIsXCJBdWdcIixcIlNlcFwiLFwiT2t0XCIsXCJOb3ZcIixcIkRlelwiXX0sZGF5czpbXCJTby5cIixcIk3DqS5cIixcIkTDqy5cIixcIk3Dqy5cIixcIkRvLlwiLFwiRnIuXCIsXCJTYS5cIl19LGx0OntsYW5ndWFnZTpcIkxpdGh1YW5pYW5cIix5bWQ6ITAsbW9udGhzOntvcmlnaW5hbDpbXCJTYXVzaXNcIixcIlZhc2FyaXNcIixcIktvdmFzXCIsXCJCYWxhbmRpc1wiLFwiR2VndcW+xJdcIixcIkJpcsW+ZWxpc1wiLFwiTGllcGFcIixcIlJ1Z3Bqxat0aXNcIixcIlJ1Z3PEl2ppc1wiLFwiU3BhbGlzXCIsXCJMYXBrcml0aXNcIixcIkdydW9kaXNcIl0sYWJicjpbXCJTYXVcIixcIlZhc1wiLFwiS292XCIsXCJCYWxcIixcIkdlZ1wiLFwiQmlyXCIsXCJMaWVcIixcIlJ1Z3BcIixcIlJ1Z3NcIixcIlNwYVwiLFwiTGFwXCIsXCJHcnVcIl19LGRheXM6W1wiU2VrXCIsXCJQaXJcIixcIkFudFwiLFwiVHJlXCIsXCJLZXRcIixcIlBlblwiLFwixaBlxaFcIl19LGx2OntsYW5ndWFnZTpcIkxhdHZpYW5cIixtb250aHM6e29yaWdpbmFsOltcIkphbnbEgXJpc1wiLFwiRmVicnXEgXJpc1wiLFwiTWFydHNcIixcIkFwcsSrbGlzXCIsXCJNYWlqc1wiLFwiSsWrbmlqc1wiLFwiSsWrbGlqc1wiLFwiQXVndXN0c1wiLFwiU2VwdGVtYnJpc1wiLFwiT2t0b2JyaXNcIixcIk5vdmVtYnJpc1wiLFwiRGVjZW1icmlzXCJdLGFiYnI6W1wiSmFuXCIsXCJGZWJcIixcIk1hclwiLFwiQXByXCIsXCJNYWlcIixcIkrFq25cIixcIkrFq2xcIixcIkF1Z1wiLFwiU2VwXCIsXCJPa3RcIixcIk5vdlwiLFwiRGVjXCJdfSxkYXlzOltcIlN2XCIsXCJQclwiLFwiT3RcIixcIlRyXCIsXCJDZVwiLFwiUGtcIixcIlNlXCJdfSxtbjp7bGFuZ3VhZ2U6XCJNb25nb2xpYVwiLHltZDohMCxtb250aHM6e29yaWdpbmFsOltcIjEg0LTSr9Cz0Y3RjdGAINGB0LDRgFwiLFwiMiDQtNGD0LPQsNCw0YAg0YHQsNGAXCIsXCIzINC00YPQs9Cw0LDRgCDRgdCw0YBcIixcIjQg0LTSr9Cz0Y3RjdGAINGB0LDRgFwiLFwiNSDQtNGD0LPQsNCw0YAg0YHQsNGAXCIsXCI2INC00YPQs9Cw0LDRgCDRgdCw0YBcIixcIjcg0LTRg9Cz0LDQsNGAINGB0LDRgFwiLFwiOCDQtNGD0LPQsNCw0YAg0YHQsNGAXCIsXCI5INC00q/Qs9GN0Y3RgCDRgdCw0YBcIixcIjEwINC00YPQs9Cw0LDRgCDRgdCw0YBcIixcIjExINC00q/Qs9GN0Y3RgCDRgdCw0YBcIixcIjEyINC00YPQs9Cw0LDRgCDRgdCw0YBcIl0sYWJicjpbXCIxLdGAINGB0LDRgFwiLFwiMi3RgCDRgdCw0YBcIixcIjMt0YAg0YHQsNGAXCIsXCI0LdGAINGB0LDRgFwiLFwiNS3RgCDRgdCw0YBcIixcIjYt0YAg0YHQsNGAXCIsXCI3LdGAINGB0LDRgFwiLFwiOC3RgCDRgdCw0YBcIixcIjkt0YAg0YHQsNGAXCIsXCIxMC3RgCDRgdCw0YBcIixcIjExLdGAINGB0LDRgFwiLFwiMTIt0YAg0YHQsNGAXCJdfSxkYXlzOltcItCd0Y9cIixcItCU0LBcIixcItCc0Y9cIixcItCb0YVcIixcItCf0q9cIixcItCR0LBcIixcItCR0Y9cIl19LG5sOntsYW5ndWFnZTpcIkR1dGNoXCIsbW9udGhzOntvcmlnaW5hbDpbXCJqYW51YXJpXCIsXCJmZWJydWFyaVwiLFwibWFhcnRcIixcImFwcmlsXCIsXCJtZWlcIixcImp1bmlcIixcImp1bGlcIixcImF1Z3VzdHVzXCIsXCJzZXB0ZW1iZXJcIixcIm9rdG9iZXJcIixcIm5vdmVtYmVyXCIsXCJkZWNlbWJlclwiXSxhYmJyOltcImphblwiLFwiZmViXCIsXCJtYWFcIixcImFwclwiLFwibWVpXCIsXCJqdW5cIixcImp1bFwiLFwiYXVnXCIsXCJzZXBcIixcIm9rdFwiLFwibm92XCIsXCJkZWNcIl19LGRheXM6W1wiem9cIixcIm1hXCIsXCJkaVwiLFwid29cIixcImRvXCIsXCJ2clwiLFwiemFcIl19LFwibmItbm9cIjp7bGFuZ3VhZ2U6XCJOb3J3ZWdpYW4gQm9rbcOlbFwiLG1vbnRoczp7b3JpZ2luYWw6W1wiSmFudWFyXCIsXCJGZWJydWFyXCIsXCJNYXJzXCIsXCJBcHJpbFwiLFwiTWFpXCIsXCJKdW5pXCIsXCJKdWxpXCIsXCJBdWd1c3RcIixcIlNlcHRlbWJlclwiLFwiT2t0b2JlclwiLFwiTm92ZW1iZXJcIixcIkRlc2VtYmVyXCJdLGFiYnI6W1wiSmFuXCIsXCJGZWJcIixcIk1hclwiLFwiQXByXCIsXCJNYWlcIixcIkp1blwiLFwiSnVsXCIsXCJBdWdcIixcIlNlcFwiLFwiT2t0XCIsXCJOb3ZcIixcIkRlc1wiXX0sZGF5czpbXCJTw7hcIixcIk1hXCIsXCJUaVwiLFwiT25cIixcIlRvXCIsXCJGclwiLFwiTMO4XCJdfSxwbDp7bGFuZ3VhZ2U6XCJQb2xpc2hcIixtb250aHM6e29yaWdpbmFsOltcIlN0eWN6ZcWEXCIsXCJMdXR5XCIsXCJNYXJ6ZWNcIixcIkt3aWVjaWXFhFwiLFwiTWFqXCIsXCJDemVyd2llY1wiLFwiTGlwaWVjXCIsXCJTaWVycGllxYRcIixcIldyemVzaWXFhFwiLFwiUGHFumR6aWVybmlrXCIsXCJMaXN0b3BhZFwiLFwiR3J1ZHppZcWEXCJdLGFiYnI6W1wiU3R5XCIsXCJMdXRcIixcIk1hclwiLFwiS3dpXCIsXCJNYWpcIixcIkN6ZVwiLFwiTGlwXCIsXCJTaWVcIixcIldyelwiLFwiUGHFulwiLFwiTGlzXCIsXCJHcnVcIl19LGRheXM6W1wiTmRcIixcIlBuXCIsXCJXdFwiLFwixZpyXCIsXCJDendcIixcIlB0XCIsXCJTb2JcIl19LFwicHQtYnJcIjp7bGFuZ3VhZ2U6XCJCcmF6aWxpYW5cIixtb250aHM6e29yaWdpbmFsOltcIkphbmVpcm9cIixcIkZldmVyZWlyb1wiLFwiTWFyw6dvXCIsXCJBYnJpbFwiLFwiTWFpb1wiLFwiSnVuaG9cIixcIkp1bGhvXCIsXCJBZ29zdG9cIixcIlNldGVtYnJvXCIsXCJPdXR1YnJvXCIsXCJOb3ZlbWJyb1wiLFwiRGV6ZW1icm9cIl0sYWJicjpbXCJKYW5cIixcIkZldlwiLFwiTWFyXCIsXCJBYnJcIixcIk1haVwiLFwiSnVuXCIsXCJKdWxcIixcIkFnb1wiLFwiU2V0XCIsXCJPdXRcIixcIk5vdlwiLFwiRGV6XCJdfSxkYXlzOltcIkRvbVwiLFwiU2VnXCIsXCJUZXJcIixcIlF1YVwiLFwiUXVpXCIsXCJTZXhcIixcIlNhYlwiXX0scm86e2xhbmd1YWdlOlwiUm9tYW5pYW5cIixtb250aHM6e29yaWdpbmFsOltcIklhbnVhcmllXCIsXCJGZWJydWFyaWVcIixcIk1hcnRpZVwiLFwiQXByaWxpZVwiLFwiTWFpXCIsXCJJdW5pZVwiLFwiSXVsaWVcIixcIkF1Z3VzdFwiLFwiU2VwdGVtYnJpZVwiLFwiT2N0b21icmllXCIsXCJOb2llbWJyaWVcIixcIkRlY2VtYnJpZVwiXSxhYmJyOltcIklhblwiLFwiRmViXCIsXCJNYXJcIixcIkFwclwiLFwiTWFpXCIsXCJJdW5cIixcIkl1bFwiLFwiQXVnXCIsXCJTZXBcIixcIk9jdFwiLFwiTm9pXCIsXCJEZWNcIl19LGRheXM6W1wiRFwiLFwiTFwiLFwiTWFcIixcIk1pXCIsXCJKXCIsXCJWXCIsXCJTXCJdfSxydTp7bGFuZ3VhZ2U6XCJSdXNzaWFuXCIsbW9udGhzOntvcmlnaW5hbDpbXCLQr9C90LLQsNGA0YxcIixcItCk0LXQstGA0LDQu9GMXCIsXCLQnNCw0YDRglwiLFwi0JDQv9GA0LXQu9GMXCIsXCLQnNCw0LlcIixcItCY0Y7QvdGMXCIsXCLQmNGO0LvRjFwiLFwi0JDQstCz0YPRgdGCXCIsXCLQodC10L3RgtGP0LHRgNGMXCIsXCLQntC60YLRj9Cx0YDRjFwiLFwi0J3QvtGP0LHRgNGMXCIsXCLQlNC10LrQsNCx0YDRjFwiXSxhYmJyOltcItCv0L3QslwiLFwi0KTQtdCy0YBcIixcItCc0LDRgNGCXCIsXCLQkNC/0YBcIixcItCc0LDQuVwiLFwi0JjRjtC90YxcIixcItCY0Y7Qu9GMXCIsXCLQkNCy0LNcIixcItCh0LXQvdGCXCIsXCLQntC60YJcIixcItCd0L7Rj9CxXCIsXCLQlNC10LpcIl19LGRheXM6W1wi0JLRgVwiLFwi0J/QvVwiLFwi0JLRglwiLFwi0KHRgFwiLFwi0KfRglwiLFwi0J/RglwiLFwi0KHQsVwiXX0sc3Y6e2xhbmd1YWdlOlwiU3dlZGlzaFwiLG1vbnRoczp7b3JpZ2luYWw6W1wiSmFudWFyaVwiLFwiRmVicnVhcmlcIixcIk1hcnNcIixcIkFwcmlsXCIsXCJNYWpcIixcIkp1bmlcIixcIkp1bGlcIixcIkF1Z3VzdGlcIixcIlNlcHRlbWJlclwiLFwiT2t0b2JlclwiLFwiTm92ZW1iZXJcIixcIkRlY2VtYmVyXCJdLGFiYnI6W1wiSmFuXCIsXCJGZWJcIixcIk1hclwiLFwiQXByXCIsXCJNYWpcIixcIkp1blwiLFwiSnVsXCIsXCJBdWdcIixcIlNlcFwiLFwiT2t0XCIsXCJOb3ZcIixcIkRlY1wiXX0sZGF5czpbXCJTw7ZuXCIsXCJNw6VuXCIsXCJUaXNcIixcIk9uc1wiLFwiVG9yXCIsXCJGcmVcIixcIkzDtnJcIl19LHNrOntsYW5ndWFnZTpcIlNsb3Zha2lhblwiLG1vbnRoczp7b3JpZ2luYWw6W1wiamFudcOhclwiLFwiZmVicnXDoXJcIixcIm1hcmVjXCIsXCJhcHLDrWxcIixcIm3DoWpcIixcImrDum5cIixcImrDumxcIixcImF1Z3VzdFwiLFwic2VwdGVtYmVyXCIsXCJva3TDs2JlclwiLFwibm92ZW1iZXJcIixcImRlY2VtYmVyXCJdLGFiYnI6W1wiamFuXCIsXCJmZWJcIixcIm1hclwiLFwiYXByXCIsXCJtw6FqXCIsXCJqw7puXCIsXCJqw7psXCIsXCJhdWdcIixcInNlcFwiLFwib2t0XCIsXCJub3ZcIixcImRlY1wiXX0sZGF5czpbXCJuZVwiLFwicG9cIixcInV0XCIsXCJzdFwiLFwixaF0XCIsXCJwaVwiLFwic29cIl19LFwic2wtc2lcIjp7bGFuZ3VhZ2U6XCJTbG92ZWlhblwiLG1vbnRoczp7b3JpZ2luYWw6W1wiSmFudWFyXCIsXCJGZWJydWFyXCIsXCJNYXJlY1wiLFwiQXByaWxcIixcIk1halwiLFwiSnVuaWpcIixcIkp1bGlqXCIsXCJBdmd1c3RcIixcIlNlcHRlbWJlclwiLFwiT2t0b2JlclwiLFwiTm92ZW1iZXJcIixcIkRlY2VtYmVyXCJdLGFiYnI6W1wiSmFuXCIsXCJGZWJcIixcIk1hclwiLFwiQXByXCIsXCJNYWpcIixcIkp1blwiLFwiSnVsXCIsXCJBdmdcIixcIlNlcFwiLFwiT2t0XCIsXCJOb3ZcIixcIkRlY1wiXX0sZGF5czpbXCJOZWRcIixcIlBvblwiLFwiVG9yXCIsXCJTcmVcIixcIsSMZXRcIixcIlBldFwiLFwiU29iXCJdfSxzcjp7bGFuZ3VhZ2U6XCJTZXJiaWFuXCIsbW9udGhzOntvcmlnaW5hbDpbXCJKYW51YXJcIixcIkZlYnJ1YXJcIixcIk1hcnRcIixcIkFwcmlsXCIsXCJNYWpcIixcIkp1blwiLFwiSnVsXCIsXCJBdmd1c3RcIixcIlNlcHRlbWJhclwiLFwiT2t0b2JhclwiLFwiTm92ZW1iYXJcIixcIkRlY2VtYmFyXCJdLGFiYnI6W1wiSmFuXCIsXCJGZWJcIixcIk1hclwiLFwiQXByXCIsXCJNYWpcIixcIkp1blwiLFwiSnVsXCIsXCJBdmdcIixcIlNlcFwiLFwiT2t0XCIsXCJOb3ZcIixcIkRlY1wiXX0sZGF5czpbXCJOZWRcIixcIlBvblwiLFwiVXRvXCIsXCJTcmVcIixcIsSMZXRcIixcIlBldFwiLFwiU3ViXCJdfSxcInNyLUN5cmxcIjp7bGFuZ3VhZ2U6XCJTZXJiaWFuIGluIEN5cmlsbGljIHNjcmlwdFwiLG1vbnRoczp7b3JpZ2luYWw6W1wi0IjQsNC90YPQsNGAXCIsXCLQpNC10LHRgNGD0LDRgFwiLFwi0JzQsNGA0YJcIixcItCQ0L/RgNC40LtcIixcItCc0LDRmFwiLFwi0IjRg9C9XCIsXCLQiNGD0LtcIixcItCQ0LLQs9GD0YHRglwiLFwi0KHQtdC/0YLQtdC80LHQsNGAXCIsXCLQntC60YLQvtCx0LDRgFwiLFwi0J3QvtCy0LXQvNCx0LDRgFwiLFwi0JTQtdGG0LXQvNCx0LDRgFwiXSxhYmJyOltcItCI0LDQvVwiLFwi0KTQtdCxXCIsXCLQnNCw0YBcIixcItCQ0L/RgFwiLFwi0JzQsNGYXCIsXCLQiNGD0L1cIixcItCI0YPQu1wiLFwi0JDQstCzXCIsXCLQodC10L9cIixcItCe0LrRglwiLFwi0J3QvtCyXCIsXCLQlNC10YZcIl19LGRheXM6W1wi0J3QtdC0XCIsXCLQn9C+0L1cIixcItCj0YLQvlwiLFwi0KHRgNC1XCIsXCLQp9C10YJcIixcItCf0LXRglwiLFwi0KHRg9CxXCJdfSx0aDp7bGFuZ3VhZ2U6XCJUaGFpXCIsbW9udGhzOntvcmlnaW5hbDpbXCLguKHguIHguKPguLLguITguKFcIixcIuC4geC4uOC4oeC4oOC4suC4nuC4seC4meC4mOC5jFwiLFwi4Lih4Li14LiZ4Liy4LiE4LihXCIsXCLguYDguKHguKnguLLguKLguJlcIixcIuC4nuC4pOC4qeC4oOC4suC4hOC4oVwiLFwi4Lih4Li04LiW4Li44LiZ4Liy4Lii4LiZXCIsXCLguIHguKPguIHguI7guLLguITguKFcIixcIuC4quC4tOC4h+C4q+C4suC4hOC4oVwiLFwi4LiB4Lix4LiZ4Lii4Liy4Lii4LiZXCIsXCLguJXguLjguKXguLLguITguKFcIixcIuC4nuC4pOC4qOC4iOC4tOC4geC4suC4ouC4mVwiLFwi4LiY4Lix4LiZ4Lin4Liy4LiE4LihXCJdLGFiYnI6W1wi4LihLuC4hC5cIixcIuC4gS7guJ4uXCIsXCLguKHguLUu4LiELlwiLFwi4LmA4LihLuC4oi5cIixcIuC4ni7guIQuXCIsXCLguKHguLQu4LiiLlwiLFwi4LiBLuC4hC5cIixcIuC4qi7guIQuXCIsXCLguIEu4LiiLlwiLFwi4LiVLuC4hC5cIixcIuC4ni7guKIuXCIsXCLguJgu4LiELlwiXX0sZGF5czpbXCLguK3guLJcIixcIuC4iFwiLFwi4LitXCIsXCLguJ5cIixcIuC4nuC4pFwiLFwi4LioXCIsXCLguKpcIl19LHRyOntsYW5ndWFnZTpcIlR1cmtpc2hcIixtb250aHM6e29yaWdpbmFsOltcIk9jYWtcIixcIsWedWJhdFwiLFwiTWFydFwiLFwiTmlzYW5cIixcIk1hecSxc1wiLFwiSGF6aXJhblwiLFwiVGVtbXV6XCIsXCJBxJ91c3Rvc1wiLFwiRXlsw7xsXCIsXCJFa2ltXCIsXCJLYXPEsW1cIixcIkFyYWzEsWtcIl0sYWJicjpbXCJPY2FcIixcIsWedWJcIixcIk1hclwiLFwiTmlzXCIsXCJNYXlcIixcIkhhelwiLFwiVGVtXCIsXCJBxJ91XCIsXCJFeWxcIixcIkVraVwiLFwiS2FzXCIsXCJBcmFcIl19LGRheXM6W1wiUGF6XCIsXCJQenRcIixcIlNhbFwiLFwiw4dhclwiLFwiUGVyXCIsXCJDdW1cIixcIkNtdFwiXX0sdWs6e2xhbmd1YWdlOlwiVWtyYWluZVwiLG1vbnRoczp7b3JpZ2luYWw6W1wi0KHRltGH0LXQvdGMXCIsXCLQm9GO0YLQuNC5XCIsXCLQkdC10YDQtdC30LXQvdGMXCIsXCLQmtCy0ZbRgtC10L3RjFwiLFwi0KLRgNCw0LLQtdC90YxcIixcItCn0LXRgNCy0LXQvdGMXCIsXCLQm9C40L/QtdC90YxcIixcItCh0LXRgNC/0LXQvdGMXCIsXCLQktC10YDQtdGB0LXQvdGMXCIsXCLQltC+0LLRgtC10L3RjFwiLFwi0JvQuNGB0YLQvtC/0LDQtFwiLFwi0JPRgNGD0LTQtdC90YxcIl0sYWJicjpbXCLQodGW0YdcIixcItCb0Y7RglwiLFwi0JHQtdGAXCIsXCLQmtCy0ZbRglwiLFwi0KLRgNCw0LJcIixcItCn0LXRgFwiLFwi0JvQuNC/XCIsXCLQodC10YDQv1wiLFwi0JLQtdGAXCIsXCLQltC+0LLRglwiLFwi0JvQuNGB0YJcIixcItCT0YDRg9C0XCJdfSxkYXlzOltcItCd0LRcIixcItCf0L1cIixcItCS0YJcIixcItCh0YBcIixcItCn0YJcIixcItCf0YJcIixcItCh0LFcIl19LHVyOntsYW5ndWFnZTpcIlVyZHVcIixydGw6ITAsbW9udGhzOntvcmlnaW5hbDpbXCLYrNmG2YjYsduMXCIsXCLZgdix2YjYsduMXCIsXCLZhdin2LHahlwiLFwi2KfZvtix24zZhFwiLFwi2YXYptuMXCIsXCLYrNmI2YZcIixcItis2YjZhNin2KbbjFwiLFwi2Kfar9iz2KpcIixcItiz2b7YqtmF2KjYsVwiLFwi2Kfaqdiq2YjYqNixXCIsXCLZhtmI2YXYqNixXCIsXCLYr9iz2YXYqNixXCJdLGFiYnI6W1wi2KzZhtmI2LHbjFwiLFwi2YHYsdmI2LHbjFwiLFwi2YXYp9ix2oZcIixcItin2b7YsduM2YRcIixcItmF2KbbjFwiLFwi2KzZiNmGXCIsXCLYrNmI2YTYp9im24xcIixcItin2q/Ys9iqXCIsXCLYs9m+2KrZhdio2LFcIixcItin2qnYqtmI2KjYsVwiLFwi2YbZiNmF2KjYsVwiLFwi2K/Ys9mF2KjYsVwiXX0sZGF5czpbXCLYp9iq2YjYp9ixXCIsXCLZvtuM2LFcIixcItmF2Ybar9mEXCIsXCLYqNiv2r5cIixcItis2YXYudix2KfYqlwiLFwi2KzZhdi524FcIixcItuB2YHYqtuBXCJdfSx2aTp7bGFuZ3VhZ2U6XCJWaWVudG5hbWVzZVwiLG1vbnRoczp7b3JpZ2luYWw6W1wiVGjDoW5nIDFcIixcIlRow6FuZyAyXCIsXCJUaMOhbmcgM1wiLFwiVGjDoW5nIDRcIixcIlRow6FuZyA1XCIsXCJUaMOhbmcgNlwiLFwiVGjDoW5nIDdcIixcIlRow6FuZyA4XCIsXCJUaMOhbmcgOVwiLFwiVGjDoW5nIDEwXCIsXCJUaMOhbmcgMTFcIixcIlRow6FuZyAxMlwiXSxhYmJyOltcIlQgMDFcIixcIlQgMDJcIixcIlQgMDNcIixcIlQgMDRcIixcIlQgMDVcIixcIlQgMDZcIixcIlQgMDdcIixcIlQgMDhcIixcIlQgMDlcIixcIlQgMTBcIixcIlQgMTFcIixcIlQgMTJcIl19LGRheXM6W1wiQ05cIixcIlRo4bupIDJcIixcIlRo4bupIDNcIixcIlRo4bupIDRcIixcIlRo4bupIDVcIixcIlRo4bupIDZcIixcIlRo4bupIDdcIl19LHpoOntsYW5ndWFnZTpcIkNoaW5lc2VcIix5bWQ6ITAsbW9udGhzOntvcmlnaW5hbDpbXCLkuIDmnIhcIixcIuS6jOaciFwiLFwi5LiJ5pyIXCIsXCLlm5vmnIhcIixcIuS6lOaciFwiLFwi5YWt5pyIXCIsXCLkuIPmnIhcIixcIuWFq+aciFwiLFwi5Lmd5pyIXCIsXCLljYHmnIhcIixcIuWNgeS4gOaciFwiLFwi5Y2B5LqM5pyIXCJdLGFiYnI6W1wi5LiA5pyIXCIsXCLkuozmnIhcIixcIuS4ieaciFwiLFwi5Zub5pyIXCIsXCLkupTmnIhcIixcIuWFreaciFwiLFwi5LiD5pyIXCIsXCLlhavmnIhcIixcIuS5neaciFwiLFwi5Y2B5pyIXCIsXCLljYHkuIDmnIhcIixcIuWNgeS6jOaciFwiXX0sZGF5czpbXCLml6VcIixcIuS4gFwiLFwi5LqMXCIsXCLkuIlcIixcIuWbm1wiLFwi5LqUXCIsXCLlha1cIl19fX19LGZ1bmN0aW9uKGUsdCl7dmFyIG49e30udG9TdHJpbmc7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiBuLmNhbGwoZSkuc2xpY2UoOCwtMSl9fSxmdW5jdGlvbihlLHQsbil7dmFyIGk9big5KSxyPW4oMCkuZG9jdW1lbnQsYT1pKHIpJiZpKHIuY3JlYXRlRWxlbWVudCk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiBhP3IuY3JlYXRlRWxlbWVudChlKTp7fX19LGZ1bmN0aW9uKGUsdCxuKXt2YXIgaT1uKDApLHI9bigxMyksYT1uKDUwKSxvPW4oNCkscz1mdW5jdGlvbihlLHQsbil7dmFyIGwsdSxjLGQ9ZSZzLkYsaD1lJnMuRyxwPWUmcy5TLGY9ZSZzLlAsZz1lJnMuQixiPWUmcy5XLG09aD9yOnJbdF18fChyW3RdPXt9KSx2PW0ucHJvdG90eXBlLHk9aD9pOnA/aVt0XTooaVt0XXx8e30pLnByb3RvdHlwZTtoJiYobj10KTtmb3IobCBpbiBuKSh1PSFkJiZ5JiZ2b2lkIDAhPT15W2xdKSYmbCBpbiBtfHwoYz11P3lbbF06bltsXSxtW2xdPWgmJlwiZnVuY3Rpb25cIiE9dHlwZW9mIHlbbF0/bltsXTpnJiZ1P2EoYyxpKTpiJiZ5W2xdPT1jP2Z1bmN0aW9uKGUpe3ZhciB0PWZ1bmN0aW9uKHQsbixpKXtpZih0aGlzIGluc3RhbmNlb2YgZSl7c3dpdGNoKGFyZ3VtZW50cy5sZW5ndGgpe2Nhc2UgMDpyZXR1cm4gbmV3IGU7Y2FzZSAxOnJldHVybiBuZXcgZSh0KTtjYXNlIDI6cmV0dXJuIG5ldyBlKHQsbil9cmV0dXJuIG5ldyBlKHQsbixpKX1yZXR1cm4gZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O3JldHVybiB0LnByb3RvdHlwZT1lLnByb3RvdHlwZSx0fShjKTpmJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBjP2EoRnVuY3Rpb24uY2FsbCxjKTpjLGYmJigobS52aXJ0dWFsfHwobS52aXJ0dWFsPXt9KSlbbF09YyxlJnMuUiYmdiYmIXZbbF0mJm8odixsLGMpKSl9O3MuRj0xLHMuRz0yLHMuUz00LHMuUD04LHMuQj0xNixzLlc9MzIscy5VPTY0LHMuUj0xMjgsZS5leHBvcnRzPXN9LGZ1bmN0aW9uKGUsdCxuKXtlLmV4cG9ydHM9IW4oMykmJiFuKDgpKGZ1bmN0aW9uKCl7cmV0dXJuIDchPU9iamVjdC5kZWZpbmVQcm9wZXJ0eShuKDI4KShcImRpdlwiKSxcImFcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDd9fSkuYX0pfSxmdW5jdGlvbihlLHQsbil7XCJ1c2Ugc3RyaWN0XCI7dmFyIGk9bigxNykscj1uKDI5KSxhPW4oMzYpLG89big0KSxzPW4oMSksbD1uKDE2KSx1PW4oNTUpLGM9bigxOSksZD1uKDYyKSxoPW4oNikoXCJpdGVyYXRvclwiKSxwPSEoW10ua2V5cyYmXCJuZXh0XCJpbltdLmtleXMoKSksZj1mdW5jdGlvbigpe3JldHVybiB0aGlzfTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LG4sZyxiLG0sdil7dShuLHQsZyk7dmFyIHksRCxNLFM9ZnVuY3Rpb24oZSl7aWYoIXAmJmUgaW4geClyZXR1cm4geFtlXTtzd2l0Y2goZSl7Y2FzZVwia2V5c1wiOmNhc2VcInZhbHVlc1wiOnJldHVybiBmdW5jdGlvbigpe3JldHVybiBuZXcgbih0aGlzLGUpfX1yZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbmV3IG4odGhpcyxlKX19LHc9dCtcIiBJdGVyYXRvclwiLF89XCJ2YWx1ZXNcIj09YixrPSExLHg9ZS5wcm90b3R5cGUsTz14W2hdfHx4W1wiQEBpdGVyYXRvclwiXXx8YiYmeFtiXSxKPU98fFMoYiksRj1iP18/UyhcImVudHJpZXNcIik6Sjp2b2lkIDAsQT1cIkFycmF5XCI9PXQ/eC5lbnRyaWVzfHxPOk87aWYoQSYmKE09ZChBLmNhbGwobmV3IGUpKSkhPT1PYmplY3QucHJvdG90eXBlJiYoYyhNLHcsITApLGl8fHMoTSxoKXx8byhNLGgsZikpLF8mJk8mJlwidmFsdWVzXCIhPT1PLm5hbWUmJihrPSEwLEo9ZnVuY3Rpb24oKXtyZXR1cm4gTy5jYWxsKHRoaXMpfSksaSYmIXZ8fCFwJiYhayYmeFtoXXx8byh4LGgsSiksbFt0XT1KLGxbd109ZixiKWlmKHk9e3ZhbHVlczpfP0o6UyhcInZhbHVlc1wiKSxrZXlzOm0/SjpTKFwia2V5c1wiKSxlbnRyaWVzOkZ9LHYpZm9yKEQgaW4geSlEIGluIHh8fGEoeCxELHlbRF0pO2Vsc2UgcihyLlArci5GKihwfHxrKSx0LHkpO3JldHVybiB5fX0sZnVuY3Rpb24oZSx0LG4pe3ZhciBpPW4oNykscj1uKDU5KSxhPW4oMTUpLG89bigyMCkoXCJJRV9QUk9UT1wiKSxzPWZ1bmN0aW9uKCl7fSxsPWZ1bmN0aW9uKCl7dmFyIGUsdD1uKDI4KShcImlmcmFtZVwiKSxpPWEubGVuZ3RoO2Zvcih0LnN0eWxlLmRpc3BsYXk9XCJub25lXCIsbig1MikuYXBwZW5kQ2hpbGQodCksdC5zcmM9XCJqYXZhc2NyaXB0OlwiLGU9dC5jb250ZW50V2luZG93LmRvY3VtZW50LGUub3BlbigpLGUud3JpdGUoXCI8c2NyaXB0PmRvY3VtZW50LkY9T2JqZWN0PFxcL3NjcmlwdD5cIiksZS5jbG9zZSgpLGw9ZS5GO2ktLTspZGVsZXRlIGwucHJvdG90eXBlW2FbaV1dO3JldHVybiBsKCl9O2UuZXhwb3J0cz1PYmplY3QuY3JlYXRlfHxmdW5jdGlvbihlLHQpe3ZhciBuO3JldHVybiBudWxsIT09ZT8ocy5wcm90b3R5cGU9aShlKSxuPW5ldyBzLHMucHJvdG90eXBlPW51bGwsbltvXT1lKTpuPWwoKSx2b2lkIDA9PT10P246cihuLHQpfX0sZnVuY3Rpb24oZSx0LG4pe3ZhciBpPW4oMzUpLHI9bigxNSkuY29uY2F0KFwibGVuZ3RoXCIsXCJwcm90b3R5cGVcIik7dC5mPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzfHxmdW5jdGlvbihlKXtyZXR1cm4gaShlLHIpfX0sZnVuY3Rpb24oZSx0KXt0LmY9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9sc30sZnVuY3Rpb24oZSx0LG4pe3ZhciBpPW4oMSkscj1uKDIpLGE9big0OSkoITEpLG89bigyMCkoXCJJRV9QUk9UT1wiKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXt2YXIgbixzPXIoZSksbD0wLHU9W107Zm9yKG4gaW4gcyluIT1vJiZpKHMsbikmJnUucHVzaChuKTtmb3IoO3QubGVuZ3RoPmw7KWkocyxuPXRbbCsrXSkmJih+YSh1LG4pfHx1LnB1c2gobikpO3JldHVybiB1fX0sZnVuY3Rpb24oZSx0LG4pe2UuZXhwb3J0cz1uKDQpfSxmdW5jdGlvbihlLHQsbil7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSk7dmFyIGk9big0MSkscj1uKDI2KTt0LmRlZmF1bHQ9e3Byb3BzOnt2YWx1ZTp7dmFsaWRhdG9yOmZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT09ZXx8ZSBpbnN0YW5jZW9mIERhdGV8fFwic3RyaW5nXCI9PXR5cGVvZiBlfHxcIm51bWJlclwiPT10eXBlb2YgZX19LG5hbWU6U3RyaW5nLHJlZk5hbWU6U3RyaW5nLGlkOlN0cmluZyxmb3JtYXQ6e3R5cGU6W1N0cmluZyxGdW5jdGlvbl0sZGVmYXVsdDpcImRkIE1NTSB5eXl5XCJ9LGxhbmd1YWdlOnt0eXBlOlN0cmluZyxkZWZhdWx0OlwiZW5cIn0sb3BlbkRhdGU6e3ZhbGlkYXRvcjpmdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09PWV8fGUgaW5zdGFuY2VvZiBEYXRlfHxcInN0cmluZ1wiPT10eXBlb2YgZX19LGZ1bGxNb250aE5hbWU6Qm9vbGVhbixkaXNhYmxlZDpPYmplY3QsaGlnaGxpZ2h0ZWQ6T2JqZWN0LHBsYWNlaG9sZGVyOlN0cmluZyxpbmxpbmU6Qm9vbGVhbixjYWxlbmRhckNsYXNzOltTdHJpbmcsT2JqZWN0XSxpbnB1dENsYXNzOltTdHJpbmcsT2JqZWN0XSx3cmFwcGVyQ2xhc3M6W1N0cmluZyxPYmplY3RdLG1vbmRheUZpcnN0OkJvb2xlYW4sY2xlYXJCdXR0b246Qm9vbGVhbixjbGVhckJ1dHRvbkljb246U3RyaW5nLGNhbGVuZGFyQnV0dG9uOkJvb2xlYW4sY2FsZW5kYXJCdXR0b25JY29uOlN0cmluZyxjYWxlbmRhckJ1dHRvbkljb25Db250ZW50OlN0cmluZyxib290c3RyYXBTdHlsaW5nOkJvb2xlYW4saW5pdGlhbFZpZXc6U3RyaW5nLGRpc2FibGVkUGlja2VyOkJvb2xlYW4scmVxdWlyZWQ6Qm9vbGVhbixtaW5pbXVtVmlldzp7dHlwZTpTdHJpbmcsZGVmYXVsdDpcImRheVwifSxtYXhpbXVtVmlldzp7dHlwZTpTdHJpbmcsZGVmYXVsdDpcInllYXJcIn19LGRhdGE6ZnVuY3Rpb24oKXtyZXR1cm57cGFnZVRpbWVzdGFtcDoodGhpcy5vcGVuRGF0ZT9uZXcgRGF0ZSh0aGlzLm9wZW5EYXRlKTpuZXcgRGF0ZSkuc2V0RGF0ZSgxKSxzZWxlY3RlZERhdGU6bnVsbCxzaG93RGF5VmlldzohMSxzaG93TW9udGhWaWV3OiExLHNob3dZZWFyVmlldzohMSxjYWxlbmRhckhlaWdodDowfX0sd2F0Y2g6e3ZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMuc2V0VmFsdWUoZSl9LG9wZW5EYXRlOmZ1bmN0aW9uKCl7dGhpcy5zZXRQYWdlRGF0ZSgpfSxpbml0aWFsVmlldzpmdW5jdGlvbigpe3RoaXMuc2V0SW5pdGlhbFZpZXcoKX19LGNvbXB1dGVkOntjb21wdXRlZEluaXRpYWxWaWV3OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5pdGlhbFZpZXc/dGhpcy5pbml0aWFsVmlldzp0aGlzLm1pbmltdW1WaWV3fSxwYWdlRGF0ZTpmdW5jdGlvbigpe3JldHVybiBuZXcgRGF0ZSh0aGlzLnBhZ2VUaW1lc3RhbXApfSxmb3JtYXR0ZWRWYWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnNlbGVjdGVkRGF0ZT9cImZ1bmN0aW9uXCI9PXR5cGVvZiB0aGlzLmZvcm1hdD90aGlzLmZvcm1hdCh0aGlzLnNlbGVjdGVkRGF0ZSk6aS5hLmZvcm1hdERhdGUobmV3IERhdGUodGhpcy5zZWxlY3RlZERhdGUpLHRoaXMuZm9ybWF0LHRoaXMudHJhbnNsYXRpb24pOm51bGx9LHRyYW5zbGF0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIHIuYS50cmFuc2xhdGlvbnNbdGhpcy5sYW5ndWFnZV19LGN1cnJNb250aE5hbWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmZ1bGxNb250aE5hbWU/dGhpcy50cmFuc2xhdGlvbi5tb250aHMub3JpZ2luYWw6dGhpcy50cmFuc2xhdGlvbi5tb250aHMuYWJicjtyZXR1cm4gaS5hLmdldE1vbnRoTmFtZUFiYnIodGhpcy5wYWdlRGF0ZS5nZXRNb250aCgpLGUpfSxjdXJyWWVhcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLnBhZ2VEYXRlLmdldEZ1bGxZZWFyKCl9LGJsYW5rRGF5czpmdW5jdGlvbigpe3ZhciBlPXRoaXMucGFnZURhdGUsdD1uZXcgRGF0ZShlLmdldEZ1bGxZZWFyKCksZS5nZXRNb250aCgpLDEsZS5nZXRIb3VycygpLGUuZ2V0TWludXRlcygpKTtyZXR1cm4gdGhpcy5tb25kYXlGaXJzdD90LmdldERheSgpPjA/dC5nZXREYXkoKS0xOjY6dC5nZXREYXkoKX0sZGF5c09mV2VlazpmdW5jdGlvbigpe2lmKHRoaXMubW9uZGF5Rmlyc3Qpe3ZhciBlPXRoaXMudHJhbnNsYXRpb24uZGF5cy5zbGljZSgpO3JldHVybiBlLnB1c2goZS5zaGlmdCgpKSxlfXJldHVybiB0aGlzLnRyYW5zbGF0aW9uLmRheXN9LGRheXM6ZnVuY3Rpb24oKXtmb3IodmFyIGU9dGhpcy5wYWdlRGF0ZSx0PVtdLG49bmV3IERhdGUoZS5nZXRGdWxsWWVhcigpLGUuZ2V0TW9udGgoKSwxLGUuZ2V0SG91cnMoKSxlLmdldE1pbnV0ZXMoKSkscj1pLmEuZGF5c0luTW9udGgobi5nZXRGdWxsWWVhcigpLG4uZ2V0TW9udGgoKSksYT0wO2E8cjthKyspdC5wdXNoKHtkYXRlOm4uZ2V0RGF0ZSgpLHRpbWVzdGFtcDpuLmdldFRpbWUoKSxpc1NlbGVjdGVkOnRoaXMuaXNTZWxlY3RlZERhdGUobiksaXNEaXNhYmxlZDp0aGlzLmlzRGlzYWJsZWREYXRlKG4pLGlzSGlnaGxpZ2h0ZWQ6dGhpcy5pc0hpZ2hsaWdodGVkRGF0ZShuKSxpc0hpZ2hsaWdodFN0YXJ0OnRoaXMuaXNIaWdobGlnaHRTdGFydChuKSxpc0hpZ2hsaWdodEVuZDp0aGlzLmlzSGlnaGxpZ2h0RW5kKG4pLGlzVG9kYXk6bi50b0RhdGVTdHJpbmcoKT09PShuZXcgRGF0ZSkudG9EYXRlU3RyaW5nKCksaXNXZWVrZW5kOjA9PT1uLmdldERheSgpfHw2PT09bi5nZXREYXkoKSxpc1NhdHVyZGF5OjY9PT1uLmdldERheSgpLGlzU3VuZGF5OjA9PT1uLmdldERheSgpfSksbi5zZXREYXRlKG4uZ2V0RGF0ZSgpKzEpO3JldHVybiB0fSxtb250aHM6ZnVuY3Rpb24oKXtmb3IodmFyIGU9dGhpcy5wYWdlRGF0ZSx0PVtdLG49bmV3IERhdGUoZS5nZXRGdWxsWWVhcigpLDAsZS5nZXREYXRlKCksZS5nZXRIb3VycygpLGUuZ2V0TWludXRlcygpKSxyPTA7cjwxMjtyKyspdC5wdXNoKHttb250aDppLmEuZ2V0TW9udGhOYW1lKHIsdGhpcy50cmFuc2xhdGlvbi5tb250aHMub3JpZ2luYWwpLHRpbWVzdGFtcDpuLmdldFRpbWUoKSxpc1NlbGVjdGVkOnRoaXMuaXNTZWxlY3RlZE1vbnRoKG4pLGlzRGlzYWJsZWQ6dGhpcy5pc0Rpc2FibGVkTW9udGgobil9KSxuLnNldE1vbnRoKG4uZ2V0TW9udGgoKSsxKTtyZXR1cm4gdH0seWVhcnM6ZnVuY3Rpb24oKXtmb3IodmFyIGU9dGhpcy5wYWdlRGF0ZSx0PVtdLG49bmV3IERhdGUoMTAqTWF0aC5mbG9vcihlLmdldEZ1bGxZZWFyKCkvMTApLGUuZ2V0TW9udGgoKSxlLmdldERhdGUoKSxlLmdldEhvdXJzKCksZS5nZXRNaW51dGVzKCkpLGk9MDtpPDEwO2krKyl0LnB1c2goe3llYXI6bi5nZXRGdWxsWWVhcigpLHRpbWVzdGFtcDpuLmdldFRpbWUoKSxpc1NlbGVjdGVkOnRoaXMuaXNTZWxlY3RlZFllYXIobiksaXNEaXNhYmxlZDp0aGlzLmlzRGlzYWJsZWRZZWFyKG4pfSksbi5zZXRGdWxsWWVhcihuLmdldEZ1bGxZZWFyKCkrMSk7cmV0dXJuIHR9LGNhbGVuZGFyU3R5bGU6ZnVuY3Rpb24oKXtyZXR1cm57cG9zaXRpb246dGhpcy5pc0lubGluZT9cInN0YXRpY1wiOnZvaWQgMH19LGlzT3BlbjpmdW5jdGlvbigpe3JldHVybiB0aGlzLnNob3dEYXlWaWV3fHx0aGlzLnNob3dNb250aFZpZXd8fHRoaXMuc2hvd1llYXJWaWV3fSxpc0lubGluZTpmdW5jdGlvbigpe3JldHVybiEhdGhpcy5pbmxpbmV9LGlzUnRsOmZ1bmN0aW9uKCl7cmV0dXJuITA9PT10aGlzLnRyYW5zbGF0aW9uLnJ0bH0saXNZbWQ6ZnVuY3Rpb24oKXtyZXR1cm4hMD09PXRoaXMudHJhbnNsYXRpb24ueW1kfX0sbWV0aG9kczp7Y2xvc2U6ZnVuY3Rpb24oZSl7dGhpcy5zaG93RGF5Vmlldz10aGlzLnNob3dNb250aFZpZXc9dGhpcy5zaG93WWVhclZpZXc9ITEsdGhpcy5pc0lubGluZXx8KGUmJnRoaXMuJGVtaXQoXCJjbG9zZWRcIiksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsdGhpcy5jbGlja091dHNpZGUsITEpKX0scmVzZXREZWZhdWx0RGF0ZTpmdW5jdGlvbigpe2lmKG51bGw9PT10aGlzLnNlbGVjdGVkRGF0ZSlyZXR1cm4gdm9pZCB0aGlzLnNldFBhZ2VEYXRlKCk7dGhpcy5zZXRQYWdlRGF0ZSh0aGlzLnNlbGVjdGVkRGF0ZSl9LHNob3dDYWxlbmRhcjpmdW5jdGlvbigpe3JldHVybiF0aGlzLmRpc2FibGVkUGlja2VyJiYhdGhpcy5pc0lubGluZSYmKHRoaXMuaXNPcGVuP3RoaXMuY2xvc2UoITApOih0aGlzLnNldEluaXRpYWxWaWV3KCksdm9pZCh0aGlzLmlzSW5saW5lfHx0aGlzLiRlbWl0KFwib3BlbmVkXCIpKSkpfSxzZXRJbml0aWFsVmlldzpmdW5jdGlvbigpe3ZhciBlPXRoaXMuY29tcHV0ZWRJbml0aWFsVmlldztpZighdGhpcy5hbGxvd2VkVG9TaG93VmlldyhlKSl0aHJvdyBuZXcgRXJyb3IoXCJpbml0aWFsVmlldyAnXCIrdGhpcy5pbml0aWFsVmlldytcIicgY2Fubm90IGJlIHJlbmRlcmVkIGJhc2VkIG9uIG1pbmltdW0gJ1wiK3RoaXMubWluaW11bVZpZXcrXCInIGFuZCBtYXhpbXVtICdcIit0aGlzLm1heGltdW1WaWV3K1wiJ1wiKTtzd2l0Y2goZSl7Y2FzZVwieWVhclwiOnRoaXMuc2hvd1llYXJDYWxlbmRhcigpO2JyZWFrO2Nhc2VcIm1vbnRoXCI6dGhpcy5zaG93TW9udGhDYWxlbmRhcigpO2JyZWFrO2RlZmF1bHQ6dGhpcy5zaG93RGF5Q2FsZW5kYXIoKX19LGFsbG93ZWRUb1Nob3dWaWV3OmZ1bmN0aW9uKGUpe3ZhciB0PVtcImRheVwiLFwibW9udGhcIixcInllYXJcIl0sbj10LmluZGV4T2YodGhpcy5taW5pbXVtVmlldyksaT10LmluZGV4T2YodGhpcy5tYXhpbXVtVmlldykscj10LmluZGV4T2YoZSk7cmV0dXJuIHI+PW4mJnI8PWl9LHNob3dEYXlDYWxlbmRhcjpmdW5jdGlvbigpe2lmKCF0aGlzLmFsbG93ZWRUb1Nob3dWaWV3KFwiZGF5XCIpKXJldHVybiExO3RoaXMuY2xvc2UoKSx0aGlzLnNob3dEYXlWaWV3PSEwLHRoaXMuYWRkT3V0c2lkZUNsaWNrTGlzdGVuZXIoKX0sc2hvd01vbnRoQ2FsZW5kYXI6ZnVuY3Rpb24oKXtpZighdGhpcy5hbGxvd2VkVG9TaG93VmlldyhcIm1vbnRoXCIpKXJldHVybiExO3RoaXMuY2xvc2UoKSx0aGlzLnNob3dNb250aFZpZXc9ITAsdGhpcy5hZGRPdXRzaWRlQ2xpY2tMaXN0ZW5lcigpfSxzaG93WWVhckNhbGVuZGFyOmZ1bmN0aW9uKCl7aWYoIXRoaXMuYWxsb3dlZFRvU2hvd1ZpZXcoXCJ5ZWFyXCIpKXJldHVybiExO3RoaXMuY2xvc2UoKSx0aGlzLnNob3dZZWFyVmlldz0hMCx0aGlzLmFkZE91dHNpZGVDbGlja0xpc3RlbmVyKCl9LGFkZE91dHNpZGVDbGlja0xpc3RlbmVyOmZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0aGlzLmlzSW5saW5lfHxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsZS5jbGlja091dHNpZGUsITEpfSwxMDApfSxzZXREYXRlOmZ1bmN0aW9uKGUpe3ZhciB0PW5ldyBEYXRlKGUpO3RoaXMuc2VsZWN0ZWREYXRlPW5ldyBEYXRlKHQpLHRoaXMuc2V0UGFnZURhdGUodCksdGhpcy4kZW1pdChcInNlbGVjdGVkXCIsbmV3IERhdGUodCkpLHRoaXMuJGVtaXQoXCJpbnB1dFwiLG5ldyBEYXRlKHQpKX0sY2xlYXJEYXRlOmZ1bmN0aW9uKCl7dGhpcy5zZWxlY3RlZERhdGU9bnVsbCx0aGlzLiRlbWl0KFwic2VsZWN0ZWRcIixudWxsKSx0aGlzLiRlbWl0KFwiaW5wdXRcIixudWxsKSx0aGlzLiRlbWl0KFwiY2xlYXJlZFwiKX0sc2VsZWN0RGF0ZTpmdW5jdGlvbihlKXtpZihlLmlzRGlzYWJsZWQpcmV0dXJuIHRoaXMuJGVtaXQoXCJzZWxlY3RlZERpc2FibGVkXCIsZSksITE7dGhpcy5zZXREYXRlKGUudGltZXN0YW1wKSx0aGlzLmlzSW5saW5lfHx0aGlzLmNsb3NlKCEwKX0sc2VsZWN0TW9udGg6ZnVuY3Rpb24oZSl7aWYoZS5pc0Rpc2FibGVkKXJldHVybiExO3ZhciB0PW5ldyBEYXRlKGUudGltZXN0YW1wKTt0aGlzLmFsbG93ZWRUb1Nob3dWaWV3KFwiZGF5XCIpPyh0aGlzLnNldFBhZ2VEYXRlKHQpLHRoaXMuJGVtaXQoXCJjaGFuZ2VkTW9udGhcIixlKSx0aGlzLnNob3dEYXlDYWxlbmRhcigpKToodGhpcy5zZXREYXRlKHQpLHRoaXMuaXNJbmxpbmV8fHRoaXMuY2xvc2UoITApKX0sc2VsZWN0WWVhcjpmdW5jdGlvbihlKXtpZihlLmlzRGlzYWJsZWQpcmV0dXJuITE7dmFyIHQ9bmV3IERhdGUoZS50aW1lc3RhbXApO3RoaXMuYWxsb3dlZFRvU2hvd1ZpZXcoXCJtb250aFwiKT8odGhpcy5zZXRQYWdlRGF0ZSh0KSx0aGlzLiRlbWl0KFwiY2hhbmdlZFllYXJcIixlKSx0aGlzLnNob3dNb250aENhbGVuZGFyKCkpOih0aGlzLnNldERhdGUodCksdGhpcy5pc0lubGluZXx8dGhpcy5jbG9zZSghMCkpfSxnZXRQYWdlRGF0ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnBhZ2VEYXRlLmdldERhdGUoKX0sZ2V0UGFnZU1vbnRoOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGFnZURhdGUuZ2V0TW9udGgoKX0sZ2V0UGFnZVllYXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wYWdlRGF0ZS5nZXRGdWxsWWVhcigpfSxnZXRQYWdlRGVjYWRlOmZ1bmN0aW9uKCl7dmFyIGU9MTAqTWF0aC5mbG9vcih0aGlzLnBhZ2VEYXRlLmdldEZ1bGxZZWFyKCkvMTApO3JldHVybiBlK1wiIC0gXCIrKGUrOSl9LGNoYW5nZU1vbnRoOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMucGFnZURhdGU7dC5zZXRNb250aCh0LmdldE1vbnRoKCkrZSksdGhpcy5zZXRQYWdlRGF0ZSh0KSx0aGlzLiRlbWl0KFwiY2hhbmdlZE1vbnRoXCIsdCl9LHByZXZpb3VzTW9udGg6ZnVuY3Rpb24oKXt0aGlzLnByZXZpb3VzTW9udGhEaXNhYmxlZCgpfHx0aGlzLmNoYW5nZU1vbnRoKC0xKX0scHJldmlvdXNNb250aERpc2FibGVkOmZ1bmN0aW9uKCl7aWYoIXRoaXMuZGlzYWJsZWR8fCF0aGlzLmRpc2FibGVkLnRvKXJldHVybiExO3ZhciBlPXRoaXMucGFnZURhdGU7cmV0dXJuIHRoaXMuZGlzYWJsZWQudG8uZ2V0TW9udGgoKT49ZS5nZXRNb250aCgpJiZ0aGlzLmRpc2FibGVkLnRvLmdldEZ1bGxZZWFyKCk+PWUuZ2V0RnVsbFllYXIoKX0sbmV4dE1vbnRoOmZ1bmN0aW9uKCl7dGhpcy5uZXh0TW9udGhEaXNhYmxlZCgpfHx0aGlzLmNoYW5nZU1vbnRoKDEpfSxuZXh0TW9udGhEaXNhYmxlZDpmdW5jdGlvbigpe2lmKCF0aGlzLmRpc2FibGVkfHwhdGhpcy5kaXNhYmxlZC5mcm9tKXJldHVybiExO3ZhciBlPXRoaXMucGFnZURhdGU7cmV0dXJuIHRoaXMuZGlzYWJsZWQuZnJvbS5nZXRNb250aCgpPD1lLmdldE1vbnRoKCkmJnRoaXMuZGlzYWJsZWQuZnJvbS5nZXRGdWxsWWVhcigpPD1lLmdldEZ1bGxZZWFyKCl9LGNoYW5nZVllYXI6ZnVuY3Rpb24oZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOlwiY2hhbmdlZFllYXJcIixuPXRoaXMucGFnZURhdGU7bi5zZXRZZWFyKG4uZ2V0RnVsbFllYXIoKStlKSx0aGlzLnNldFBhZ2VEYXRlKG4pLHRoaXMuJGVtaXQodCxuKX0scHJldmlvdXNZZWFyOmZ1bmN0aW9uKCl7dGhpcy5wcmV2aW91c1llYXJEaXNhYmxlZCgpfHx0aGlzLmNoYW5nZVllYXIoLTEpfSxwcmV2aW91c1llYXJEaXNhYmxlZDpmdW5jdGlvbigpe3JldHVybiEoIXRoaXMuZGlzYWJsZWR8fCF0aGlzLmRpc2FibGVkLnRvKSYmdGhpcy5kaXNhYmxlZC50by5nZXRGdWxsWWVhcigpPj10aGlzLnBhZ2VEYXRlLmdldEZ1bGxZZWFyKCl9LG5leHRZZWFyOmZ1bmN0aW9uKCl7dGhpcy5uZXh0WWVhckRpc2FibGVkKCl8fHRoaXMuY2hhbmdlWWVhcigxKX0sbmV4dFllYXJEaXNhYmxlZDpmdW5jdGlvbigpe3JldHVybiEoIXRoaXMuZGlzYWJsZWR8fCF0aGlzLmRpc2FibGVkLmZyb20pJiZ0aGlzLmRpc2FibGVkLmZyb20uZ2V0RnVsbFllYXIoKTw9dGhpcy5wYWdlRGF0ZS5nZXRGdWxsWWVhcigpfSxwcmV2aW91c0RlY2FkZTpmdW5jdGlvbigpe3RoaXMucHJldmlvdXNEZWNhZGVEaXNhYmxlZCgpfHx0aGlzLmNoYW5nZVllYXIoLTEwLFwiY2hhbmdlRGVjYWRlXCIpfSxwcmV2aW91c0RlY2FkZURpc2FibGVkOmZ1bmN0aW9uKCl7cmV0dXJuISghdGhpcy5kaXNhYmxlZHx8IXRoaXMuZGlzYWJsZWQudG8pJiYxMCpNYXRoLmZsb29yKHRoaXMuZGlzYWJsZWQudG8uZ2V0RnVsbFllYXIoKS8xMCk+PTEwKk1hdGguZmxvb3IodGhpcy5wYWdlRGF0ZS5nZXRGdWxsWWVhcigpLzEwKX0sbmV4dERlY2FkZTpmdW5jdGlvbigpe3RoaXMubmV4dERlY2FkZURpc2FibGVkKCl8fHRoaXMuY2hhbmdlWWVhcigxMCxcImNoYW5nZURlY2FkZVwiKX0sbmV4dERlY2FkZURpc2FibGVkOmZ1bmN0aW9uKCl7cmV0dXJuISghdGhpcy5kaXNhYmxlZHx8IXRoaXMuZGlzYWJsZWQuZnJvbSkmJjEwKk1hdGguY2VpbCh0aGlzLmRpc2FibGVkLmZyb20uZ2V0RnVsbFllYXIoKS8xMCk8PTEwKk1hdGguY2VpbCh0aGlzLnBhZ2VEYXRlLmdldEZ1bGxZZWFyKCkvMTApfSxpc1NlbGVjdGVkRGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5zZWxlY3RlZERhdGUmJnRoaXMuc2VsZWN0ZWREYXRlLnRvRGF0ZVN0cmluZygpPT09ZS50b0RhdGVTdHJpbmcoKX0saXNEaXNhYmxlZERhdGU6ZnVuY3Rpb24oZSl7dmFyIHQ9ITE7cmV0dXJuIHZvaWQgMCE9PXRoaXMuZGlzYWJsZWQmJih2b2lkIDAhPT10aGlzLmRpc2FibGVkLmRhdGVzJiZ0aGlzLmRpc2FibGVkLmRhdGVzLmZvckVhY2goZnVuY3Rpb24obil7aWYoZS50b0RhdGVTdHJpbmcoKT09PW4udG9EYXRlU3RyaW5nKCkpcmV0dXJuIHQ9ITAsITB9KSx2b2lkIDAhPT10aGlzLmRpc2FibGVkLnRvJiZ0aGlzLmRpc2FibGVkLnRvJiZlPHRoaXMuZGlzYWJsZWQudG8mJih0PSEwKSx2b2lkIDAhPT10aGlzLmRpc2FibGVkLmZyb20mJnRoaXMuZGlzYWJsZWQuZnJvbSYmZT50aGlzLmRpc2FibGVkLmZyb20mJih0PSEwKSx2b2lkIDAhPT10aGlzLmRpc2FibGVkLnJhbmdlcyYmdGhpcy5kaXNhYmxlZC5yYW5nZXMuZm9yRWFjaChmdW5jdGlvbihuKXtpZih2b2lkIDAhPT1uLmZyb20mJm4uZnJvbSYmdm9pZCAwIT09bi50byYmbi50byYmZTxuLnRvJiZlPm4uZnJvbSlyZXR1cm4gdD0hMCwhMH0pLHZvaWQgMCE9PXRoaXMuZGlzYWJsZWQuZGF5cyYmLTEhPT10aGlzLmRpc2FibGVkLmRheXMuaW5kZXhPZihlLmdldERheSgpKSYmKHQ9ITApLHZvaWQgMCE9PXRoaXMuZGlzYWJsZWQuZGF5c09mTW9udGgmJi0xIT09dGhpcy5kaXNhYmxlZC5kYXlzT2ZNb250aC5pbmRleE9mKGUuZ2V0RGF0ZSgpKSYmKHQ9ITApLFwiZnVuY3Rpb25cIj09dHlwZW9mIHRoaXMuZGlzYWJsZWQuY3VzdG9tUHJlZGljdG9yJiZ0aGlzLmRpc2FibGVkLmN1c3RvbVByZWRpY3RvcihlKSYmKHQ9ITApLHQpfSxpc0hpZ2hsaWdodGVkRGF0ZTpmdW5jdGlvbihlKXtpZigoIXRoaXMuaGlnaGxpZ2h0ZWR8fCF0aGlzLmhpZ2hsaWdodGVkLmluY2x1ZGVEaXNhYmxlZCkmJnRoaXMuaXNEaXNhYmxlZERhdGUoZSkpcmV0dXJuITE7dmFyIHQ9ITE7cmV0dXJuIHZvaWQgMCE9PXRoaXMuaGlnaGxpZ2h0ZWQmJih2b2lkIDAhPT10aGlzLmhpZ2hsaWdodGVkLmRhdGVzJiZ0aGlzLmhpZ2hsaWdodGVkLmRhdGVzLmZvckVhY2goZnVuY3Rpb24obil7aWYoZS50b0RhdGVTdHJpbmcoKT09PW4udG9EYXRlU3RyaW5nKCkpcmV0dXJuIHQ9ITAsITB9KSx0aGlzLmlzRGVmaW5lZCh0aGlzLmhpZ2hsaWdodGVkLmZyb20pJiZ0aGlzLmlzRGVmaW5lZCh0aGlzLmhpZ2hsaWdodGVkLnRvKSYmKHQ9ZT49dGhpcy5oaWdobGlnaHRlZC5mcm9tJiZlPD10aGlzLmhpZ2hsaWdodGVkLnRvKSx2b2lkIDAhPT10aGlzLmhpZ2hsaWdodGVkLmRheXMmJi0xIT09dGhpcy5oaWdobGlnaHRlZC5kYXlzLmluZGV4T2YoZS5nZXREYXkoKSkmJih0PSEwKSx2b2lkIDAhPT10aGlzLmhpZ2hsaWdodGVkLmRheXNPZk1vbnRoJiYtMSE9PXRoaXMuaGlnaGxpZ2h0ZWQuZGF5c09mTW9udGguaW5kZXhPZihlLmdldERhdGUoKSkmJih0PSEwKSxcImZ1bmN0aW9uXCI9PXR5cGVvZiB0aGlzLmhpZ2hsaWdodGVkLmN1c3RvbVByZWRpY3RvciYmdGhpcy5oaWdobGlnaHRlZC5jdXN0b21QcmVkaWN0b3IoZSkmJih0PSEwKSx0KX0saXNIaWdobGlnaHRTdGFydDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5pc0hpZ2hsaWdodGVkRGF0ZShlKSYmdGhpcy5oaWdobGlnaHRlZC5mcm9tIGluc3RhbmNlb2YgRGF0ZSYmdGhpcy5oaWdobGlnaHRlZC5mcm9tLmdldEZ1bGxZZWFyKCk9PT1lLmdldEZ1bGxZZWFyKCkmJnRoaXMuaGlnaGxpZ2h0ZWQuZnJvbS5nZXRNb250aCgpPT09ZS5nZXRNb250aCgpJiZ0aGlzLmhpZ2hsaWdodGVkLmZyb20uZ2V0RGF0ZSgpPT09ZS5nZXREYXRlKCl9LGlzSGlnaGxpZ2h0RW5kOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmlzSGlnaGxpZ2h0ZWREYXRlKGUpJiZ0aGlzLmhpZ2hsaWdodGVkLnRvIGluc3RhbmNlb2YgRGF0ZSYmdGhpcy5oaWdobGlnaHRlZC50by5nZXRGdWxsWWVhcigpPT09ZS5nZXRGdWxsWWVhcigpJiZ0aGlzLmhpZ2hsaWdodGVkLnRvLmdldE1vbnRoKCk9PT1lLmdldE1vbnRoKCkmJnRoaXMuaGlnaGxpZ2h0ZWQudG8uZ2V0RGF0ZSgpPT09ZS5nZXREYXRlKCl9LGlzRGVmaW5lZDpmdW5jdGlvbihlKXtyZXR1cm4gdm9pZCAwIT09ZSYmZX0saXNTZWxlY3RlZE1vbnRoOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnNlbGVjdGVkRGF0ZSYmdGhpcy5zZWxlY3RlZERhdGUuZ2V0RnVsbFllYXIoKT09PWUuZ2V0RnVsbFllYXIoKSYmdGhpcy5zZWxlY3RlZERhdGUuZ2V0TW9udGgoKT09PWUuZ2V0TW9udGgoKX0saXNEaXNhYmxlZE1vbnRoOmZ1bmN0aW9uKGUpe3ZhciB0PSExO3JldHVybiB2b2lkIDAhPT10aGlzLmRpc2FibGVkJiYodm9pZCAwIT09dGhpcy5kaXNhYmxlZC50byYmdGhpcy5kaXNhYmxlZC50byYmKGUuZ2V0TW9udGgoKTx0aGlzLmRpc2FibGVkLnRvLmdldE1vbnRoKCkmJmUuZ2V0RnVsbFllYXIoKTw9dGhpcy5kaXNhYmxlZC50by5nZXRGdWxsWWVhcigpfHxlLmdldEZ1bGxZZWFyKCk8dGhpcy5kaXNhYmxlZC50by5nZXRGdWxsWWVhcigpKSYmKHQ9ITApLHZvaWQgMCE9PXRoaXMuZGlzYWJsZWQuZnJvbSYmdGhpcy5kaXNhYmxlZC5mcm9tJiYodGhpcy5kaXNhYmxlZC5mcm9tJiZlLmdldE1vbnRoKCk+dGhpcy5kaXNhYmxlZC5mcm9tLmdldE1vbnRoKCkmJmUuZ2V0RnVsbFllYXIoKT49dGhpcy5kaXNhYmxlZC5mcm9tLmdldEZ1bGxZZWFyKCl8fGUuZ2V0RnVsbFllYXIoKT50aGlzLmRpc2FibGVkLmZyb20uZ2V0RnVsbFllYXIoKSkmJih0PSEwKSx0KX0saXNTZWxlY3RlZFllYXI6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuc2VsZWN0ZWREYXRlJiZ0aGlzLnNlbGVjdGVkRGF0ZS5nZXRGdWxsWWVhcigpPT09ZS5nZXRGdWxsWWVhcigpfSxpc0Rpc2FibGVkWWVhcjpmdW5jdGlvbihlKXt2YXIgdD0hMTtyZXR1cm4hKHZvaWQgMD09PXRoaXMuZGlzYWJsZWR8fCF0aGlzLmRpc2FibGVkKSYmKHZvaWQgMCE9PXRoaXMuZGlzYWJsZWQudG8mJnRoaXMuZGlzYWJsZWQudG8mJmUuZ2V0RnVsbFllYXIoKTx0aGlzLmRpc2FibGVkLnRvLmdldEZ1bGxZZWFyKCkmJih0PSEwKSx2b2lkIDAhPT10aGlzLmRpc2FibGVkLmZyb20mJnRoaXMuZGlzYWJsZWQuZnJvbSYmZS5nZXRGdWxsWWVhcigpPnRoaXMuZGlzYWJsZWQuZnJvbS5nZXRGdWxsWWVhcigpJiYodD0hMCksdCl9LHNldFZhbHVlOmZ1bmN0aW9uKGUpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlfHxcIm51bWJlclwiPT10eXBlb2YgZSl7dmFyIHQ9bmV3IERhdGUoZSk7ZT1pc05hTih0LnZhbHVlT2YoKSk/bnVsbDp0fWlmKCFlKXJldHVybiB0aGlzLnNldFBhZ2VEYXRlKCksdm9pZCh0aGlzLnNlbGVjdGVkRGF0ZT1udWxsKTt0aGlzLnNlbGVjdGVkRGF0ZT1lLHRoaXMuc2V0UGFnZURhdGUoZSl9LHNldFBhZ2VEYXRlOmZ1bmN0aW9uKGUpe2V8fChlPXRoaXMub3BlbkRhdGU/bmV3IERhdGUodGhpcy5vcGVuRGF0ZSk6bmV3IERhdGUpLHRoaXMucGFnZVRpbWVzdGFtcD1uZXcgRGF0ZShlKS5zZXREYXRlKDEpfSxjbGlja091dHNpZGU6ZnVuY3Rpb24oZSl7aWYodGhpcy4kZWwmJiF0aGlzLiRlbC5jb250YWlucyhlLnRhcmdldCkpe2lmKHRoaXMuaXNJbmxpbmUpcmV0dXJuIHRoaXMuc2hvd0RheUNhbGVuZGFyKCk7dGhpcy5yZXNldERlZmF1bHREYXRlKCksdGhpcy5jbG9zZSghMCksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsdGhpcy5jbGlja091dHNpZGUsITEpfX0sZGF5Q2xhc3NlczpmdW5jdGlvbihlKXtyZXR1cm57c2VsZWN0ZWQ6ZS5pc1NlbGVjdGVkLGRpc2FibGVkOmUuaXNEaXNhYmxlZCxoaWdobGlnaHRlZDplLmlzSGlnaGxpZ2h0ZWQsdG9kYXk6ZS5pc1RvZGF5LHdlZWtlbmQ6ZS5pc1dlZWtlbmQsc2F0OmUuaXNTYXR1cmRheSxzdW46ZS5pc1N1bmRheSxcImhpZ2hsaWdodC1zdGFydFwiOmUuaXNIaWdobGlnaHRTdGFydCxcImhpZ2hsaWdodC1lbmRcIjplLmlzSGlnaGxpZ2h0RW5kfX0saW5pdDpmdW5jdGlvbigpe3RoaXMudmFsdWUmJnRoaXMuc2V0VmFsdWUodGhpcy52YWx1ZSksdGhpcy5pc0lubGluZSYmdGhpcy5zZXRJbml0aWFsVmlldygpfX0sbW91bnRlZDpmdW5jdGlvbigpe3RoaXMuaW5pdCgpfX19LGZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxuLGkscil7dmFyIGEsbz1lPWV8fHt9LHM9dHlwZW9mIGUuZGVmYXVsdDtcIm9iamVjdFwiIT09cyYmXCJmdW5jdGlvblwiIT09c3x8KGE9ZSxvPWUuZGVmYXVsdCk7dmFyIGw9XCJmdW5jdGlvblwiPT10eXBlb2Ygbz9vLm9wdGlvbnM6bzt0JiYobC5yZW5kZXI9dC5yZW5kZXIsbC5zdGF0aWNSZW5kZXJGbnM9dC5zdGF0aWNSZW5kZXJGbnMpLGkmJihsLl9zY29wZUlkPWkpO3ZhciB1O2lmKHI/KHU9ZnVuY3Rpb24oZSl7ZT1lfHx0aGlzLiR2bm9kZSYmdGhpcy4kdm5vZGUuc3NyQ29udGV4dHx8dGhpcy5wYXJlbnQmJnRoaXMucGFyZW50LiR2bm9kZSYmdGhpcy5wYXJlbnQuJHZub2RlLnNzckNvbnRleHQsZXx8XCJ1bmRlZmluZWRcIj09dHlwZW9mIF9fVlVFX1NTUl9DT05URVhUX198fChlPV9fVlVFX1NTUl9DT05URVhUX18pLG4mJm4uY2FsbCh0aGlzLGUpLGUmJmUuX3JlZ2lzdGVyZWRDb21wb25lbnRzJiZlLl9yZWdpc3RlcmVkQ29tcG9uZW50cy5hZGQocil9LGwuX3NzclJlZ2lzdGVyPXUpOm4mJih1PW4pLHUpe3ZhciBjPWwuZnVuY3Rpb25hbCxkPWM/bC5yZW5kZXI6bC5iZWZvcmVDcmVhdGU7Yz9sLnJlbmRlcj1mdW5jdGlvbihlLHQpe3JldHVybiB1LmNhbGwodCksZChlLHQpfTpsLmJlZm9yZUNyZWF0ZT1kP1tdLmNvbmNhdChkLHUpOlt1XX1yZXR1cm57ZXNNb2R1bGU6YSxleHBvcnRzOm8sb3B0aW9uczpsfX19LGZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPXtyZW5kZXI6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9ZS4kY3JlYXRlRWxlbWVudCxuPWUuX3NlbGYuX2N8fHQ7cmV0dXJuIG4oXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJ2ZHAtZGF0ZXBpY2tlclwiLGNsYXNzOltlLndyYXBwZXJDbGFzcyxlLmlzUnRsP1wicnRsXCI6XCJcIl19LFtuKFwiZGl2XCIse2NsYXNzOntcImlucHV0LWdyb3VwXCI6ZS5ib290c3RyYXBTdHlsaW5nfX0sW2UuY2FsZW5kYXJCdXR0b24/bihcInNwYW5cIix7c3RhdGljQ2xhc3M6XCJ2ZHAtZGF0ZXBpY2tlcl9fY2FsZW5kYXItYnV0dG9uXCIsY2xhc3M6e1wiaW5wdXQtZ3JvdXAtYWRkb25cIjplLmJvb3RzdHJhcFN0eWxpbmd9LHN0eWxlOntcImN1cnNvcjpub3QtYWxsb3dlZDtcIjplLmRpc2FibGVkUGlja2VyfSxvbjp7Y2xpY2s6ZS5zaG93Q2FsZW5kYXJ9fSxbbihcImlcIix7Y2xhc3M6ZS5jYWxlbmRhckJ1dHRvbkljb259LFtlLl92KFwiXFxuICAgICAgICBcIitlLl9zKGUuY2FsZW5kYXJCdXR0b25JY29uQ29udGVudCkrXCJcXG4gICAgICAgIFwiKSxlLmNhbGVuZGFyQnV0dG9uSWNvbj9lLl9lKCk6bihcInNwYW5cIixbZS5fdihcIuKAplwiKV0pXSldKTplLl9lKCksZS5fdihcIiBcIiksbihcImlucHV0XCIse3JlZjplLnJlZk5hbWUsY2xhc3M6W2UuaW5wdXRDbGFzcyx7XCJmb3JtLWNvbnRyb2xcIjplLmJvb3RzdHJhcFN0eWxpbmd9XSxhdHRyczp7dHlwZTplLmlubGluZT9cImhpZGRlblwiOlwidGV4dFwiLG5hbWU6ZS5uYW1lLGlkOmUuaWQsXCJvcGVuLWRhdGVcIjplLm9wZW5EYXRlLHBsYWNlaG9sZGVyOmUucGxhY2Vob2xkZXIsXCJjbGVhci1idXR0b25cIjplLmNsZWFyQnV0dG9uLGRpc2FibGVkOmUuZGlzYWJsZWRQaWNrZXIscmVxdWlyZWQ6ZS5yZXF1aXJlZCxyZWFkb25seTpcIlwifSxkb21Qcm9wczp7dmFsdWU6ZS5mb3JtYXR0ZWRWYWx1ZX0sb246e2NsaWNrOmUuc2hvd0NhbGVuZGFyfX0pLGUuX3YoXCIgXCIpLGUuY2xlYXJCdXR0b24mJmUuc2VsZWN0ZWREYXRlP24oXCJzcGFuXCIse3N0YXRpY0NsYXNzOlwidmRwLWRhdGVwaWNrZXJfX2NsZWFyLWJ1dHRvblwiLGNsYXNzOntcImlucHV0LWdyb3VwLWFkZG9uXCI6ZS5ib290c3RyYXBTdHlsaW5nfSxvbjp7Y2xpY2s6ZnVuY3Rpb24odCl7ZS5jbGVhckRhdGUoKX19fSxbbihcImlcIix7Y2xhc3M6ZS5jbGVhckJ1dHRvbkljb259LFtlLmNsZWFyQnV0dG9uSWNvbj9lLl9lKCk6bihcInNwYW5cIixbZS5fdihcIsOXXCIpXSldKV0pOmUuX2UoKV0pLGUuX3YoXCIgXCIpLGUuYWxsb3dlZFRvU2hvd1ZpZXcoXCJkYXlcIik/W24oXCJkaXZcIix7ZGlyZWN0aXZlczpbe25hbWU6XCJzaG93XCIscmF3TmFtZTpcInYtc2hvd1wiLHZhbHVlOmUuc2hvd0RheVZpZXcsZXhwcmVzc2lvbjpcInNob3dEYXlWaWV3XCJ9XSxjbGFzczpbZS5jYWxlbmRhckNsYXNzLFwidmRwLWRhdGVwaWNrZXJfX2NhbGVuZGFyXCJdLHN0eWxlOmUuY2FsZW5kYXJTdHlsZX0sW24oXCJoZWFkZXJcIixbbihcInNwYW5cIix7c3RhdGljQ2xhc3M6XCJwcmV2XCIsY2xhc3M6e2Rpc2FibGVkOmUuaXNSdGw/ZS5uZXh0TW9udGhEaXNhYmxlZChlLnBhZ2VUaW1lc3RhbXApOmUucHJldmlvdXNNb250aERpc2FibGVkKGUucGFnZVRpbWVzdGFtcCl9LG9uOntjbGljazpmdW5jdGlvbih0KXtlLmlzUnRsP2UubmV4dE1vbnRoKCk6ZS5wcmV2aW91c01vbnRoKCl9fX0sW2UuX3YoXCI8XCIpXSksZS5fdihcIiBcIiksbihcInNwYW5cIix7Y2xhc3M6ZS5hbGxvd2VkVG9TaG93VmlldyhcIm1vbnRoXCIpP1widXBcIjpcIlwiLG9uOntjbGljazplLnNob3dNb250aENhbGVuZGFyfX0sW2UuX3YoZS5fcyhlLmlzWW1kP2UuY3VyclllYXI6ZS5jdXJyTW9udGhOYW1lKStcIiBcIitlLl9zKGUuaXNZbWQ/ZS5jdXJyTW9udGhOYW1lOmUuY3VyclllYXIpKV0pLGUuX3YoXCIgXCIpLG4oXCJzcGFuXCIse3N0YXRpY0NsYXNzOlwibmV4dFwiLGNsYXNzOntkaXNhYmxlZDplLmlzUnRsP2UucHJldmlvdXNNb250aERpc2FibGVkKGUucGFnZVRpbWVzdGFtcCk6ZS5uZXh0TW9udGhEaXNhYmxlZChlLnBhZ2VUaW1lc3RhbXApfSxvbjp7Y2xpY2s6ZnVuY3Rpb24odCl7ZS5pc1J0bD9lLnByZXZpb3VzTW9udGgoKTplLm5leHRNb250aCgpfX19LFtlLl92KFwiPlwiKV0pXSksZS5fdihcIiBcIiksbihcImRpdlwiLHtjbGFzczplLmlzUnRsP1wiZmxleC1ydGxcIjpcIlwifSxbZS5fbChlLmRheXNPZldlZWssZnVuY3Rpb24odCl7cmV0dXJuIG4oXCJzcGFuXCIse2tleTp0LnRpbWVzdGFtcCxzdGF0aWNDbGFzczpcImNlbGwgZGF5LWhlYWRlclwifSxbZS5fdihlLl9zKHQpKV0pfSksZS5fdihcIiBcIiksZS5ibGFua0RheXM+MD9lLl9sKGUuYmxhbmtEYXlzLGZ1bmN0aW9uKGUpe3JldHVybiBuKFwic3BhblwiLHtrZXk6ZS50aW1lc3RhbXAsc3RhdGljQ2xhc3M6XCJjZWxsIGRheSBibGFua1wifSl9KTplLl9lKCksZS5fbChlLmRheXMsZnVuY3Rpb24odCl7cmV0dXJuIG4oXCJzcGFuXCIse2tleTp0LnRpbWVzdGFtcCxzdGF0aWNDbGFzczpcImNlbGwgZGF5XCIsY2xhc3M6ZS5kYXlDbGFzc2VzKHQpLGF0dHJzOntcInRyYWNrLWJ5XCI6XCJ0aW1lc3RhbXBcIn0sb246e2NsaWNrOmZ1bmN0aW9uKG4pe2Uuc2VsZWN0RGF0ZSh0KX19fSxbZS5fdihlLl9zKHQuZGF0ZSkpXSl9KV0sMildKV06ZS5fZSgpLGUuX3YoXCIgXCIpLGUuYWxsb3dlZFRvU2hvd1ZpZXcoXCJtb250aFwiKT9bbihcImRpdlwiLHtkaXJlY3RpdmVzOlt7bmFtZTpcInNob3dcIixyYXdOYW1lOlwidi1zaG93XCIsdmFsdWU6ZS5zaG93TW9udGhWaWV3LGV4cHJlc3Npb246XCJzaG93TW9udGhWaWV3XCJ9XSxjbGFzczpbZS5jYWxlbmRhckNsYXNzLFwidmRwLWRhdGVwaWNrZXJfX2NhbGVuZGFyXCJdLHN0eWxlOmUuY2FsZW5kYXJTdHlsZX0sW24oXCJoZWFkZXJcIixbbihcInNwYW5cIix7c3RhdGljQ2xhc3M6XCJwcmV2XCIsY2xhc3M6e2Rpc2FibGVkOmUucHJldmlvdXNZZWFyRGlzYWJsZWQoZS5wYWdlVGltZXN0YW1wKX0sb246e2NsaWNrOmUucHJldmlvdXNZZWFyfX0sW2UuX3YoXCI8XCIpXSksZS5fdihcIiBcIiksbihcInNwYW5cIix7Y2xhc3M6ZS5hbGxvd2VkVG9TaG93VmlldyhcInllYXJcIik/XCJ1cFwiOlwiXCIsb246e2NsaWNrOmUuc2hvd1llYXJDYWxlbmRhcn19LFtlLl92KGUuX3MoZS5nZXRQYWdlWWVhcigpKSldKSxlLl92KFwiIFwiKSxuKFwic3BhblwiLHtzdGF0aWNDbGFzczpcIm5leHRcIixjbGFzczp7ZGlzYWJsZWQ6ZS5uZXh0WWVhckRpc2FibGVkKGUucGFnZVRpbWVzdGFtcCl9LG9uOntjbGljazplLm5leHRZZWFyfX0sW2UuX3YoXCI+XCIpXSldKSxlLl92KFwiIFwiKSxlLl9sKGUubW9udGhzLGZ1bmN0aW9uKHQpe3JldHVybiBuKFwic3BhblwiLHtrZXk6dC50aW1lc3RhbXAsc3RhdGljQ2xhc3M6XCJjZWxsIG1vbnRoXCIsY2xhc3M6e3NlbGVjdGVkOnQuaXNTZWxlY3RlZCxkaXNhYmxlZDp0LmlzRGlzYWJsZWR9LGF0dHJzOntcInRyYWNrLWJ5XCI6XCJ0aW1lc3RhbXBcIn0sb246e2NsaWNrOmZ1bmN0aW9uKG4pe24uc3RvcFByb3BhZ2F0aW9uKCksZS5zZWxlY3RNb250aCh0KX19fSxbZS5fdihlLl9zKHQubW9udGgpKV0pfSldLDIpXTplLl9lKCksZS5fdihcIiBcIiksZS5hbGxvd2VkVG9TaG93VmlldyhcInllYXJcIik/W24oXCJkaXZcIix7ZGlyZWN0aXZlczpbe25hbWU6XCJzaG93XCIscmF3TmFtZTpcInYtc2hvd1wiLHZhbHVlOmUuc2hvd1llYXJWaWV3LGV4cHJlc3Npb246XCJzaG93WWVhclZpZXdcIn1dLGNsYXNzOltlLmNhbGVuZGFyQ2xhc3MsXCJ2ZHAtZGF0ZXBpY2tlcl9fY2FsZW5kYXJcIl0sc3R5bGU6ZS5jYWxlbmRhclN0eWxlfSxbbihcImhlYWRlclwiLFtuKFwic3BhblwiLHtzdGF0aWNDbGFzczpcInByZXZcIixjbGFzczp7ZGlzYWJsZWQ6ZS5wcmV2aW91c0RlY2FkZURpc2FibGVkKGUucGFnZVRpbWVzdGFtcCl9LG9uOntjbGljazplLnByZXZpb3VzRGVjYWRlfX0sW2UuX3YoXCI8XCIpXSksZS5fdihcIiBcIiksbihcInNwYW5cIixbZS5fdihlLl9zKGUuZ2V0UGFnZURlY2FkZSgpKSldKSxlLl92KFwiIFwiKSxuKFwic3BhblwiLHtzdGF0aWNDbGFzczpcIm5leHRcIixjbGFzczp7ZGlzYWJsZWQ6ZS5uZXh0TW9udGhEaXNhYmxlZChlLnBhZ2VUaW1lc3RhbXApfSxvbjp7Y2xpY2s6ZS5uZXh0RGVjYWRlfX0sW2UuX3YoXCI+XCIpXSldKSxlLl92KFwiIFwiKSxlLl9sKGUueWVhcnMsZnVuY3Rpb24odCl7cmV0dXJuIG4oXCJzcGFuXCIse2tleTp0LnRpbWVzdGFtcCxzdGF0aWNDbGFzczpcImNlbGwgeWVhclwiLGNsYXNzOntzZWxlY3RlZDp0LmlzU2VsZWN0ZWQsZGlzYWJsZWQ6dC5pc0Rpc2FibGVkfSxhdHRyczp7XCJ0cmFjay1ieVwiOlwidGltZXN0YW1wXCJ9LG9uOntjbGljazpmdW5jdGlvbihuKXtuLnN0b3BQcm9wYWdhdGlvbigpLGUuc2VsZWN0WWVhcih0KX19fSxbZS5fdihlLl9zKHQueWVhcikpXSl9KV0sMildOmUuX2UoKV0sMil9LHN0YXRpY1JlbmRlckZuczpbXX19LGZ1bmN0aW9uKGUsdCxuKXt2YXIgaT1uKDc0KTtcInN0cmluZ1wiPT10eXBlb2YgaSYmKGk9W1tlLmksaSxcIlwiXV0pLGkubG9jYWxzJiYoZS5leHBvcnRzPWkubG9jYWxzKTtuKDc3KShcIjdkYTYyYWQ0XCIsaSwhMCl9LGZ1bmN0aW9uKGUsdCxuKXtcInVzZSBzdHJpY3RcIjt2YXIgaT1uKDQ0KSxyPW4ubihpKSxhPW4oMjYpO3QuYT17aXNWYWxpZERhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuXCJbb2JqZWN0IERhdGVdXCI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkmJiFpc05hTihlLmdldFRpbWUoKSl9LGdldERheU5hbWVBYmJyOmZ1bmN0aW9uKGUsdCl7aWYoXCJvYmplY3RcIiE9PSh2b2lkIDA9PT1lP1widW5kZWZpbmVkXCI6cigpKGUpKSl0aHJvdyBUeXBlRXJyb3IoXCJJbnZhbGlkIFR5cGVcIik7cmV0dXJuIHRbZS5nZXREYXkoKV19LGdldE1vbnRoTmFtZTpmdW5jdGlvbihlLHQpe2lmKCF0KXRocm93IEVycm9yKFwibWlzc2luZyAybmQgcGFyYW1ldGVyIE1vbnRocyBhcnJheVwiKTtpZihcIm9iamVjdFwiPT09KHZvaWQgMD09PWU/XCJ1bmRlZmluZWRcIjpyKCkoZSkpKXJldHVybiB0W2UuZ2V0TW9udGgoKV07aWYoXCJudW1iZXJcIj09dHlwZW9mIGUpcmV0dXJuIHRbZV07dGhyb3cgVHlwZUVycm9yKFwiSW52YWxpZCB0eXBlXCIpfSxnZXRNb250aE5hbWVBYmJyOmZ1bmN0aW9uKGUsdCl7aWYoIXQpdGhyb3cgRXJyb3IoXCJtaXNzaW5nIDJuZCBwYXJhbXRlciBNb250aHMgYXJyYXlcIik7aWYoXCJvYmplY3RcIj09PSh2b2lkIDA9PT1lP1widW5kZWZpbmVkXCI6cigpKGUpKSlyZXR1cm4gdFtlLmdldE1vbnRoKCldO2lmKFwibnVtYmVyXCI9PXR5cGVvZiBlKXJldHVybiB0W2VdO3Rocm93IFR5cGVFcnJvcihcIkludmFsaWQgdHlwZVwiKX0sZGF5c0luTW9udGg6ZnVuY3Rpb24oZSx0KXtyZXR1cm4vOHwzfDV8MTAvLnRlc3QodCk/MzA6MT09PXQ/KGUlNHx8IShlJTEwMCkpJiZlJTQwMD8yODoyOTozMX0sZ2V0TnRoU3VmZml4OmZ1bmN0aW9uKGUpe3N3aXRjaChlKXtjYXNlIDE6Y2FzZSAyMTpjYXNlIDMxOnJldHVyblwic3RcIjtjYXNlIDI6Y2FzZSAyMjpyZXR1cm5cIm5kXCI7Y2FzZSAzOmNhc2UgMjM6cmV0dXJuXCJyZFwiO2RlZmF1bHQ6cmV0dXJuXCJ0aFwifX0sZm9ybWF0RGF0ZTpmdW5jdGlvbihlLHQsbil7bj1ufHxhLmEudHJhbnNsYXRpb25zLmVuO3ZhciBpPWUuZ2V0RnVsbFllYXIoKSxyPWUuZ2V0TW9udGgoKSsxLG89ZS5nZXREYXRlKCk7cmV0dXJuIHQucmVwbGFjZSgvZGQvLChcIjBcIitvKS5zbGljZSgtMikpLnJlcGxhY2UoL2QvLG8pLnJlcGxhY2UoL3l5eXkvLGkpLnJlcGxhY2UoL3l5LyxTdHJpbmcoaSkuc2xpY2UoMikpLnJlcGxhY2UoL01NTU0vLHRoaXMuZ2V0TW9udGhOYW1lKGUuZ2V0TW9udGgoKSxuLm1vbnRocy5vcmlnaW5hbCkpLnJlcGxhY2UoL01NTS8sdGhpcy5nZXRNb250aE5hbWVBYmJyKGUuZ2V0TW9udGgoKSxuLm1vbnRocy5hYmJyKSkucmVwbGFjZSgvTU0vLChcIjBcIityKS5zbGljZSgtMikpLnJlcGxhY2UoL00oPyFhfMOkfGUpLyxyKS5yZXBsYWNlKC9zdS8sdGhpcy5nZXROdGhTdWZmaXgoZS5nZXREYXRlKCkpKS5yZXBsYWNlKC9EKD8hZXzDqXxpKS8sdGhpcy5nZXREYXlOYW1lQWJicihlLG4uZGF5cykpfSxjcmVhdGVEYXRlQXJyYXk6ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49W107ZTw9dDspbi5wdXNoKG5ldyBEYXRlKGUpKSxlPW5ldyBEYXRlKGUpLnNldERhdGUobmV3IERhdGUoZSkuZ2V0RGF0ZSgpKzEpO3JldHVybiBufX19LGZ1bmN0aW9uKGUsdCxuKXtlLmV4cG9ydHM9e2RlZmF1bHQ6big0NSksX19lc01vZHVsZTohMH19LGZ1bmN0aW9uKGUsdCxuKXtlLmV4cG9ydHM9e2RlZmF1bHQ6big0NiksX19lc01vZHVsZTohMH19LGZ1bmN0aW9uKGUsdCxuKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBpKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX10Ll9fZXNNb2R1bGU9ITA7dmFyIHI9big0MyksYT1pKHIpLG89big0Mikscz1pKG8pLGw9XCJmdW5jdGlvblwiPT10eXBlb2Ygcy5kZWZhdWx0JiZcInN5bWJvbFwiPT10eXBlb2YgYS5kZWZhdWx0P2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIHMuZGVmYXVsdCYmZS5jb25zdHJ1Y3Rvcj09PXMuZGVmYXVsdCYmZSE9PXMuZGVmYXVsdC5wcm90b3R5cGU/XCJzeW1ib2xcIjp0eXBlb2YgZX07dC5kZWZhdWx0PVwiZnVuY3Rpb25cIj09dHlwZW9mIHMuZGVmYXVsdCYmXCJzeW1ib2xcIj09PWwoYS5kZWZhdWx0KT9mdW5jdGlvbihlKXtyZXR1cm4gdm9pZCAwPT09ZT9cInVuZGVmaW5lZFwiOmwoZSl9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBzLmRlZmF1bHQmJmUuY29uc3RydWN0b3I9PT1zLmRlZmF1bHQmJmUhPT1zLmRlZmF1bHQucHJvdG90eXBlP1wic3ltYm9sXCI6dm9pZCAwPT09ZT9cInVuZGVmaW5lZFwiOmwoZSl9fSxmdW5jdGlvbihlLHQsbil7big3MCksbig2OCksbig3MSksbig3MiksZS5leHBvcnRzPW4oMTMpLlN5bWJvbH0sZnVuY3Rpb24oZSx0LG4pe24oNjkpLG4oNzMpLGUuZXhwb3J0cz1uKDI1KS5mKFwiaXRlcmF0b3JcIil9LGZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIGUpdGhyb3cgVHlwZUVycm9yKGUrXCIgaXMgbm90IGEgZnVuY3Rpb24hXCIpO3JldHVybiBlfX0sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oKXt9fSxmdW5jdGlvbihlLHQsbil7dmFyIGk9bigyKSxyPW4oNjUpLGE9big2NCk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0LG4sbyl7dmFyIHMsbD1pKHQpLHU9cihsLmxlbmd0aCksYz1hKG8sdSk7aWYoZSYmbiE9bil7Zm9yKDt1PmM7KWlmKChzPWxbYysrXSkhPXMpcmV0dXJuITB9ZWxzZSBmb3IoO3U+YztjKyspaWYoKGV8fGMgaW4gbCkmJmxbY109PT1uKXJldHVybiBlfHxjfHwwO3JldHVybiFlJiYtMX19fSxmdW5jdGlvbihlLHQsbil7dmFyIGk9big0Nyk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxuKXtpZihpKGUpLHZvaWQgMD09PXQpcmV0dXJuIGU7c3dpdGNoKG4pe2Nhc2UgMTpyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIGUuY2FsbCh0LG4pfTtjYXNlIDI6cmV0dXJuIGZ1bmN0aW9uKG4saSl7cmV0dXJuIGUuY2FsbCh0LG4saSl9O2Nhc2UgMzpyZXR1cm4gZnVuY3Rpb24obixpLHIpe3JldHVybiBlLmNhbGwodCxuLGkscil9fXJldHVybiBmdW5jdGlvbigpe3JldHVybiBlLmFwcGx5KHQsYXJndW1lbnRzKX19fSxmdW5jdGlvbihlLHQsbil7dmFyIGk9bigxMCkscj1uKDM0KSxhPW4oMTgpO2UuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdD1pKGUpLG49ci5mO2lmKG4pZm9yKHZhciBvLHM9bihlKSxsPWEuZix1PTA7cy5sZW5ndGg+dTspbC5jYWxsKGUsbz1zW3UrK10pJiZ0LnB1c2gobyk7cmV0dXJuIHR9fSxmdW5jdGlvbihlLHQsbil7ZS5leHBvcnRzPW4oMCkuZG9jdW1lbnQmJmRvY3VtZW50LmRvY3VtZW50RWxlbWVudH0sZnVuY3Rpb24oZSx0LG4pe3ZhciBpPW4oMjcpO2UuZXhwb3J0cz1PYmplY3QoXCJ6XCIpLnByb3BlcnR5SXNFbnVtZXJhYmxlKDApP09iamVjdDpmdW5jdGlvbihlKXtyZXR1cm5cIlN0cmluZ1wiPT1pKGUpP2Uuc3BsaXQoXCJcIik6T2JqZWN0KGUpfX0sZnVuY3Rpb24oZSx0LG4pe3ZhciBpPW4oMjcpO2UuZXhwb3J0cz1BcnJheS5pc0FycmF5fHxmdW5jdGlvbihlKXtyZXR1cm5cIkFycmF5XCI9PWkoZSl9fSxmdW5jdGlvbihlLHQsbil7XCJ1c2Ugc3RyaWN0XCI7dmFyIGk9bigzMikscj1uKDExKSxhPW4oMTkpLG89e307big0KShvLG4oNikoXCJpdGVyYXRvclwiKSxmdW5jdGlvbigpe3JldHVybiB0aGlzfSksZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxuKXtlLnByb3RvdHlwZT1pKG8se25leHQ6cigxLG4pfSksYShlLHQrXCIgSXRlcmF0b3JcIil9fSxmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3JldHVybnt2YWx1ZTp0LGRvbmU6ISFlfX19LGZ1bmN0aW9uKGUsdCxuKXt2YXIgaT1uKDEwKSxyPW4oMik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuLGE9cihlKSxvPWkoYSkscz1vLmxlbmd0aCxsPTA7cz5sOylpZihhW249b1tsKytdXT09PXQpcmV0dXJuIG59fSxmdW5jdGlvbihlLHQsbil7dmFyIGk9bigxMikoXCJtZXRhXCIpLHI9big5KSxhPW4oMSksbz1uKDUpLmYscz0wLGw9T2JqZWN0LmlzRXh0ZW5zaWJsZXx8ZnVuY3Rpb24oKXtyZXR1cm4hMH0sdT0hbig4KShmdW5jdGlvbigpe3JldHVybiBsKE9iamVjdC5wcmV2ZW50RXh0ZW5zaW9ucyh7fSkpfSksYz1mdW5jdGlvbihlKXtvKGUsaSx7dmFsdWU6e2k6XCJPXCIrICsrcyx3Ont9fX0pfSxkPWZ1bmN0aW9uKGUsdCl7aWYoIXIoZSkpcmV0dXJuXCJzeW1ib2xcIj09dHlwZW9mIGU/ZTooXCJzdHJpbmdcIj09dHlwZW9mIGU/XCJTXCI6XCJQXCIpK2U7aWYoIWEoZSxpKSl7aWYoIWwoZSkpcmV0dXJuXCJGXCI7aWYoIXQpcmV0dXJuXCJFXCI7YyhlKX1yZXR1cm4gZVtpXS5pfSxoPWZ1bmN0aW9uKGUsdCl7aWYoIWEoZSxpKSl7aWYoIWwoZSkpcmV0dXJuITA7aWYoIXQpcmV0dXJuITE7YyhlKX1yZXR1cm4gZVtpXS53fSxwPWZ1bmN0aW9uKGUpe3JldHVybiB1JiZmLk5FRUQmJmwoZSkmJiFhKGUsaSkmJmMoZSksZX0sZj1lLmV4cG9ydHM9e0tFWTppLE5FRUQ6ITEsZmFzdEtleTpkLGdldFdlYWs6aCxvbkZyZWV6ZTpwfX0sZnVuY3Rpb24oZSx0LG4pe3ZhciBpPW4oNSkscj1uKDcpLGE9bigxMCk7ZS5leHBvcnRzPW4oMyk/T2JqZWN0LmRlZmluZVByb3BlcnRpZXM6ZnVuY3Rpb24oZSx0KXtyKGUpO2Zvcih2YXIgbixvPWEodCkscz1vLmxlbmd0aCxsPTA7cz5sOylpLmYoZSxuPW9bbCsrXSx0W25dKTtyZXR1cm4gZX19LGZ1bmN0aW9uKGUsdCxuKXt2YXIgaT1uKDE4KSxyPW4oMTEpLGE9bigyKSxvPW4oMjMpLHM9bigxKSxsPW4oMzApLHU9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjt0LmY9bigzKT91OmZ1bmN0aW9uKGUsdCl7aWYoZT1hKGUpLHQ9byh0LCEwKSxsKXRyeXtyZXR1cm4gdShlLHQpfWNhdGNoKGUpe31pZihzKGUsdCkpcmV0dXJuIHIoIWkuZi5jYWxsKGUsdCksZVt0XSl9fSxmdW5jdGlvbihlLHQsbil7dmFyIGk9bigyKSxyPW4oMzMpLmYsYT17fS50b1N0cmluZyxvPVwib2JqZWN0XCI9PXR5cGVvZiB3aW5kb3cmJndpbmRvdyYmT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXM/T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMod2luZG93KTpbXSxzPWZ1bmN0aW9uKGUpe3RyeXtyZXR1cm4gcihlKX1jYXRjaChlKXtyZXR1cm4gby5zbGljZSgpfX07ZS5leHBvcnRzLmY9ZnVuY3Rpb24oZSl7cmV0dXJuIG8mJlwiW29iamVjdCBXaW5kb3ddXCI9PWEuY2FsbChlKT9zKGUpOnIoaShlKSl9fSxmdW5jdGlvbihlLHQsbil7dmFyIGk9bigxKSxyPW4oNjYpLGE9bigyMCkoXCJJRV9QUk9UT1wiKSxvPU9iamVjdC5wcm90b3R5cGU7ZS5leHBvcnRzPU9iamVjdC5nZXRQcm90b3R5cGVPZnx8ZnVuY3Rpb24oZSl7cmV0dXJuIGU9cihlKSxpKGUsYSk/ZVthXTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBlLmNvbnN0cnVjdG9yJiZlIGluc3RhbmNlb2YgZS5jb25zdHJ1Y3Rvcj9lLmNvbnN0cnVjdG9yLnByb3RvdHlwZTplIGluc3RhbmNlb2YgT2JqZWN0P286bnVsbH19LGZ1bmN0aW9uKGUsdCxuKXt2YXIgaT1uKDIyKSxyPW4oMTQpO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCxuKXt2YXIgYSxvLHM9U3RyaW5nKHIodCkpLGw9aShuKSx1PXMubGVuZ3RoO3JldHVybiBsPDB8fGw+PXU/ZT9cIlwiOnZvaWQgMDooYT1zLmNoYXJDb2RlQXQobCksYTw1NTI5Nnx8YT41NjMxOXx8bCsxPT09dXx8KG89cy5jaGFyQ29kZUF0KGwrMSkpPDU2MzIwfHxvPjU3MzQzP2U/cy5jaGFyQXQobCk6YTplP3Muc2xpY2UobCxsKzIpOm8tNTYzMjArKGEtNTUyOTY8PDEwKSs2NTUzNil9fX0sZnVuY3Rpb24oZSx0LG4pe3ZhciBpPW4oMjIpLHI9TWF0aC5tYXgsYT1NYXRoLm1pbjtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT1pKGUpLGU8MD9yKGUrdCwwKTphKGUsdCl9fSxmdW5jdGlvbihlLHQsbil7dmFyIGk9bigyMikscj1NYXRoLm1pbjtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIGU+MD9yKGkoZSksOTAwNzE5OTI1NDc0MDk5MSk6MH19LGZ1bmN0aW9uKGUsdCxuKXt2YXIgaT1uKDE0KTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdChpKGUpKX19LGZ1bmN0aW9uKGUsdCxuKXtcInVzZSBzdHJpY3RcIjt2YXIgaT1uKDQ4KSxyPW4oNTYpLGE9bigxNiksbz1uKDIpO2UuZXhwb3J0cz1uKDMxKShBcnJheSxcIkFycmF5XCIsZnVuY3Rpb24oZSx0KXt0aGlzLl90PW8oZSksdGhpcy5faT0wLHRoaXMuX2s9dH0sZnVuY3Rpb24oKXt2YXIgZT10aGlzLl90LHQ9dGhpcy5fayxuPXRoaXMuX2krKztyZXR1cm4hZXx8bj49ZS5sZW5ndGg/KHRoaXMuX3Q9dm9pZCAwLHIoMSkpOlwia2V5c1wiPT10P3IoMCxuKTpcInZhbHVlc1wiPT10P3IoMCxlW25dKTpyKDAsW24sZVtuXV0pfSxcInZhbHVlc1wiKSxhLkFyZ3VtZW50cz1hLkFycmF5LGkoXCJrZXlzXCIpLGkoXCJ2YWx1ZXNcIiksaShcImVudHJpZXNcIil9LGZ1bmN0aW9uKGUsdCl7fSxmdW5jdGlvbihlLHQsbil7XCJ1c2Ugc3RyaWN0XCI7dmFyIGk9big2MykoITApO24oMzEpKFN0cmluZyxcIlN0cmluZ1wiLGZ1bmN0aW9uKGUpe3RoaXMuX3Q9U3RyaW5nKGUpLHRoaXMuX2k9MH0sZnVuY3Rpb24oKXt2YXIgZSx0PXRoaXMuX3Qsbj10aGlzLl9pO3JldHVybiBuPj10Lmxlbmd0aD97dmFsdWU6dm9pZCAwLGRvbmU6ITB9OihlPWkodCxuKSx0aGlzLl9pKz1lLmxlbmd0aCx7dmFsdWU6ZSxkb25lOiExfSl9KX0sZnVuY3Rpb24oZSx0LG4pe1widXNlIHN0cmljdFwiO3ZhciBpPW4oMCkscj1uKDEpLGE9bigzKSxvPW4oMjkpLHM9bigzNiksbD1uKDU4KS5LRVksdT1uKDgpLGM9bigyMSksZD1uKDE5KSxoPW4oMTIpLHA9big2KSxmPW4oMjUpLGc9bigyNCksYj1uKDU3KSxtPW4oNTEpLHY9big1NCkseT1uKDcpLEQ9bigyKSxNPW4oMjMpLFM9bigxMSksdz1uKDMyKSxfPW4oNjEpLGs9big2MCkseD1uKDUpLE89bigxMCksSj1rLmYsRj14LmYsQT1fLmYsaj1pLlN5bWJvbCxUPWkuSlNPTixOPVQmJlQuc3RyaW5naWZ5LFk9cChcIl9oaWRkZW5cIiksQz1wKFwidG9QcmltaXRpdmVcIiksUD17fS5wcm9wZXJ0eUlzRW51bWVyYWJsZSxWPWMoXCJzeW1ib2wtcmVnaXN0cnlcIiksRT1jKFwic3ltYm9sc1wiKSxJPWMoXCJvcC1zeW1ib2xzXCIpLEw9T2JqZWN0LnByb3RvdHlwZSx6PVwiZnVuY3Rpb25cIj09dHlwZW9mIGosQj1pLlFPYmplY3QsUj0hQnx8IUIucHJvdG90eXBlfHwhQi5wcm90b3R5cGUuZmluZENoaWxkLEg9YSYmdShmdW5jdGlvbigpe3JldHVybiA3IT13KEYoe30sXCJhXCIse2dldDpmdW5jdGlvbigpe3JldHVybiBGKHRoaXMsXCJhXCIse3ZhbHVlOjd9KS5hfX0pKS5hfSk/ZnVuY3Rpb24oZSx0LG4pe3ZhciBpPUooTCx0KTtpJiZkZWxldGUgTFt0XSxGKGUsdCxuKSxpJiZlIT09TCYmRihMLHQsaSl9OkYsRz1mdW5jdGlvbihlKXt2YXIgdD1FW2VdPXcoai5wcm90b3R5cGUpO3JldHVybiB0Ll9rPWUsdH0sJD16JiZcInN5bWJvbFwiPT10eXBlb2Ygai5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm5cInN5bWJvbFwiPT10eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBqfSxVPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZT09PUwmJlUoSSx0LG4pLHkoZSksdD1NKHQsITApLHkobikscihFLHQpPyhuLmVudW1lcmFibGU/KHIoZSxZKSYmZVtZXVt0XSYmKGVbWV1bdF09ITEpLG49dyhuLHtlbnVtZXJhYmxlOlMoMCwhMSl9KSk6KHIoZSxZKXx8RihlLFksUygxLHt9KSksZVtZXVt0XT0hMCksSChlLHQsbikpOkYoZSx0LG4pfSxLPWZ1bmN0aW9uKGUsdCl7eShlKTtmb3IodmFyIG4saT1tKHQ9RCh0KSkscj0wLGE9aS5sZW5ndGg7YT5yOylVKGUsbj1pW3IrK10sdFtuXSk7cmV0dXJuIGV9LFc9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdm9pZCAwPT09dD93KGUpOksodyhlKSx0KX0scT1mdW5jdGlvbihlKXt2YXIgdD1QLmNhbGwodGhpcyxlPU0oZSwhMCkpO3JldHVybiEodGhpcz09PUwmJnIoRSxlKSYmIXIoSSxlKSkmJighKHR8fCFyKHRoaXMsZSl8fCFyKEUsZSl8fHIodGhpcyxZKSYmdGhpc1tZXVtlXSl8fHQpfSxYPWZ1bmN0aW9uKGUsdCl7aWYoZT1EKGUpLHQ9TSh0LCEwKSxlIT09THx8IXIoRSx0KXx8cihJLHQpKXt2YXIgbj1KKGUsdCk7cmV0dXJuIW58fCFyKEUsdCl8fHIoZSxZKSYmZVtZXVt0XXx8KG4uZW51bWVyYWJsZT0hMCksbn19LFE9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LG49QShEKGUpKSxpPVtdLGE9MDtuLmxlbmd0aD5hOylyKEUsdD1uW2ErK10pfHx0PT1ZfHx0PT1sfHxpLnB1c2godCk7cmV0dXJuIGl9LFo9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LG49ZT09PUwsaT1BKG4/STpEKGUpKSxhPVtdLG89MDtpLmxlbmd0aD5vOykhcihFLHQ9aVtvKytdKXx8biYmIXIoTCx0KXx8YS5wdXNoKEVbdF0pO3JldHVybiBhfTt6fHwoaj1mdW5jdGlvbigpe2lmKHRoaXMgaW5zdGFuY2VvZiBqKXRocm93IFR5cGVFcnJvcihcIlN5bWJvbCBpcyBub3QgYSBjb25zdHJ1Y3RvciFcIik7dmFyIGU9aChhcmd1bWVudHMubGVuZ3RoPjA/YXJndW1lbnRzWzBdOnZvaWQgMCksdD1mdW5jdGlvbihuKXt0aGlzPT09TCYmdC5jYWxsKEksbikscih0aGlzLFkpJiZyKHRoaXNbWV0sZSkmJih0aGlzW1ldW2VdPSExKSxIKHRoaXMsZSxTKDEsbikpfTtyZXR1cm4gYSYmUiYmSChMLGUse2NvbmZpZ3VyYWJsZTohMCxzZXQ6dH0pLEcoZSl9LHMoai5wcm90b3R5cGUsXCJ0b1N0cmluZ1wiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2t9KSxrLmY9WCx4LmY9VSxuKDMzKS5mPV8uZj1RLG4oMTgpLmY9cSxuKDM0KS5mPVosYSYmIW4oMTcpJiZzKEwsXCJwcm9wZXJ0eUlzRW51bWVyYWJsZVwiLHEsITApLGYuZj1mdW5jdGlvbihlKXtyZXR1cm4gRyhwKGUpKX0pLG8oby5HK28uVytvLkYqIXose1N5bWJvbDpqfSk7Zm9yKHZhciBlZT1cImhhc0luc3RhbmNlLGlzQ29uY2F0U3ByZWFkYWJsZSxpdGVyYXRvcixtYXRjaCxyZXBsYWNlLHNlYXJjaCxzcGVjaWVzLHNwbGl0LHRvUHJpbWl0aXZlLHRvU3RyaW5nVGFnLHVuc2NvcGFibGVzXCIuc3BsaXQoXCIsXCIpLHRlPTA7ZWUubGVuZ3RoPnRlOylwKGVlW3RlKytdKTtmb3IodmFyIGVlPU8ocC5zdG9yZSksdGU9MDtlZS5sZW5ndGg+dGU7KWcoZWVbdGUrK10pO28oby5TK28uRioheixcIlN5bWJvbFwiLHtmb3I6ZnVuY3Rpb24oZSl7cmV0dXJuIHIoVixlKz1cIlwiKT9WW2VdOlZbZV09aihlKX0sa2V5Rm9yOmZ1bmN0aW9uKGUpe2lmKCQoZSkpcmV0dXJuIGIoVixlKTt0aHJvdyBUeXBlRXJyb3IoZStcIiBpcyBub3QgYSBzeW1ib2whXCIpfSx1c2VTZXR0ZXI6ZnVuY3Rpb24oKXtSPSEwfSx1c2VTaW1wbGU6ZnVuY3Rpb24oKXtSPSExfX0pLG8oby5TK28uRioheixcIk9iamVjdFwiLHtjcmVhdGU6VyxkZWZpbmVQcm9wZXJ0eTpVLGRlZmluZVByb3BlcnRpZXM6SyxnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6WCxnZXRPd25Qcm9wZXJ0eU5hbWVzOlEsZ2V0T3duUHJvcGVydHlTeW1ib2xzOlp9KSxUJiZvKG8uUytvLkYqKCF6fHx1KGZ1bmN0aW9uKCl7dmFyIGU9aigpO3JldHVyblwiW251bGxdXCIhPU4oW2VdKXx8XCJ7fVwiIT1OKHthOmV9KXx8XCJ7fVwiIT1OKE9iamVjdChlKSl9KSksXCJKU09OXCIse3N0cmluZ2lmeTpmdW5jdGlvbihlKXtpZih2b2lkIDAhPT1lJiYhJChlKSl7Zm9yKHZhciB0LG4saT1bZV0scj0xO2FyZ3VtZW50cy5sZW5ndGg+cjspaS5wdXNoKGFyZ3VtZW50c1tyKytdKTtyZXR1cm4gdD1pWzFdLFwiZnVuY3Rpb25cIj09dHlwZW9mIHQmJihuPXQpLCFuJiZ2KHQpfHwodD1mdW5jdGlvbihlLHQpe2lmKG4mJih0PW4uY2FsbCh0aGlzLGUsdCkpLCEkKHQpKXJldHVybiB0fSksaVsxXT10LE4uYXBwbHkoVCxpKX19fSksai5wcm90b3R5cGVbQ118fG4oNCkoai5wcm90b3R5cGUsQyxqLnByb3RvdHlwZS52YWx1ZU9mKSxkKGosXCJTeW1ib2xcIiksZChNYXRoLFwiTWF0aFwiLCEwKSxkKGkuSlNPTixcIkpTT05cIiwhMCl9LGZ1bmN0aW9uKGUsdCxuKXtuKDI0KShcImFzeW5jSXRlcmF0b3JcIil9LGZ1bmN0aW9uKGUsdCxuKXtuKDI0KShcIm9ic2VydmFibGVcIil9LGZ1bmN0aW9uKGUsdCxuKXtuKDY3KTtmb3IodmFyIGk9bigwKSxyPW4oNCksYT1uKDE2KSxvPW4oNikoXCJ0b1N0cmluZ1RhZ1wiKSxzPVtcIk5vZGVMaXN0XCIsXCJET01Ub2tlbkxpc3RcIixcIk1lZGlhTGlzdFwiLFwiU3R5bGVTaGVldExpc3RcIixcIkNTU1J1bGVMaXN0XCJdLGw9MDtsPDU7bCsrKXt2YXIgdT1zW2xdLGM9aVt1XSxkPWMmJmMucHJvdG90eXBlO2QmJiFkW29dJiZyKGQsbyx1KSxhW3VdPWEuQXJyYXl9fSxmdW5jdGlvbihlLHQsbil7dD1lLmV4cG9ydHM9big3NSkoITEpLHQucHVzaChbZS5pLCcucnRse2RpcmVjdGlvbjpydGx9LnZkcC1kYXRlcGlja2Vye3Bvc2l0aW9uOnJlbGF0aXZlO3RleHQtYWxpZ246bGVmdH0udmRwLWRhdGVwaWNrZXIgKntib3gtc2l6aW5nOmJvcmRlci1ib3h9LnZkcC1kYXRlcGlja2VyX19jYWxlbmRhcntwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMDtiYWNrZ3JvdW5kOiNmZmY7d2lkdGg6MzAwcHg7Ym9yZGVyOjFweCBzb2xpZCAjY2NjfS52ZHAtZGF0ZXBpY2tlcl9fY2FsZW5kYXIgaGVhZGVye2Rpc3BsYXk6YmxvY2s7bGluZS1oZWlnaHQ6NDBweH0udmRwLWRhdGVwaWNrZXJfX2NhbGVuZGFyIGhlYWRlciBzcGFue2Rpc3BsYXk6aW5saW5lLWJsb2NrO3RleHQtYWxpZ246Y2VudGVyO3dpZHRoOjcxLjQyODU3MTQyODU3MTQzJTtmbG9hdDpsZWZ0fS52ZHAtZGF0ZXBpY2tlcl9fY2FsZW5kYXIgaGVhZGVyIC5uZXh0LC52ZHAtZGF0ZXBpY2tlcl9fY2FsZW5kYXIgaGVhZGVyIC5wcmV2e3dpZHRoOjE0LjI4NTcxNDI4NTcxNDI4NiU7ZmxvYXQ6bGVmdDt0ZXh0LWluZGVudDotMTAwMDBweDtwb3NpdGlvbjpyZWxhdGl2ZX0udmRwLWRhdGVwaWNrZXJfX2NhbGVuZGFyIGhlYWRlciAubmV4dDphZnRlciwudmRwLWRhdGVwaWNrZXJfX2NhbGVuZGFyIGhlYWRlciAucHJldjphZnRlcntjb250ZW50OlwiXCI7cG9zaXRpb246YWJzb2x1dGU7bGVmdDo1MCU7dG9wOjUwJTstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGVYKC01MCUpIHRyYW5zbGF0ZVkoLTUwJSk7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoLTUwJSkgdHJhbnNsYXRlWSgtNTAlKTtib3JkZXI6NnB4IHNvbGlkIHRyYW5zcGFyZW50fS52ZHAtZGF0ZXBpY2tlcl9fY2FsZW5kYXIgaGVhZGVyIC5wcmV2OmFmdGVye2JvcmRlci1yaWdodDoxMHB4IHNvbGlkICMwMDA7bWFyZ2luLWxlZnQ6LTVweH0udmRwLWRhdGVwaWNrZXJfX2NhbGVuZGFyIGhlYWRlciAucHJldi5kaXNhYmxlZDphZnRlcntib3JkZXItcmlnaHQ6MTBweCBzb2xpZCAjZGRkfS52ZHAtZGF0ZXBpY2tlcl9fY2FsZW5kYXIgaGVhZGVyIC5uZXh0OmFmdGVye2JvcmRlci1sZWZ0OjEwcHggc29saWQgIzAwMDttYXJnaW4tbGVmdDo1cHh9LnZkcC1kYXRlcGlja2VyX19jYWxlbmRhciBoZWFkZXIgLm5leHQuZGlzYWJsZWQ6YWZ0ZXJ7Ym9yZGVyLWxlZnQ6MTBweCBzb2xpZCAjZGRkfS52ZHAtZGF0ZXBpY2tlcl9fY2FsZW5kYXIgaGVhZGVyIC5uZXh0Om5vdCguZGlzYWJsZWQpLC52ZHAtZGF0ZXBpY2tlcl9fY2FsZW5kYXIgaGVhZGVyIC5wcmV2Om5vdCguZGlzYWJsZWQpLC52ZHAtZGF0ZXBpY2tlcl9fY2FsZW5kYXIgaGVhZGVyIC51cDpub3QoLmRpc2FibGVkKXtjdXJzb3I6cG9pbnRlcn0udmRwLWRhdGVwaWNrZXJfX2NhbGVuZGFyIGhlYWRlciAubmV4dDpub3QoLmRpc2FibGVkKTpob3ZlciwudmRwLWRhdGVwaWNrZXJfX2NhbGVuZGFyIGhlYWRlciAucHJldjpub3QoLmRpc2FibGVkKTpob3ZlciwudmRwLWRhdGVwaWNrZXJfX2NhbGVuZGFyIGhlYWRlciAudXA6bm90KC5kaXNhYmxlZCk6aG92ZXJ7YmFja2dyb3VuZDojZWVlfS52ZHAtZGF0ZXBpY2tlcl9fY2FsZW5kYXIgLmRpc2FibGVke2NvbG9yOiNkZGQ7Y3Vyc29yOmRlZmF1bHR9LnZkcC1kYXRlcGlja2VyX19jYWxlbmRhciAuZmxleC1ydGx7ZGlzcGxheTotd2Via2l0LWJveDtkaXNwbGF5Oi1tcy1mbGV4Ym94O2Rpc3BsYXk6ZmxleDt3aWR0aDppbmhlcml0Oy1tcy1mbGV4LXdyYXA6d3JhcDtmbGV4LXdyYXA6d3JhcH0udmRwLWRhdGVwaWNrZXJfX2NhbGVuZGFyIC5jZWxse2Rpc3BsYXk6aW5saW5lLWJsb2NrO3BhZGRpbmc6MCA1cHg7d2lkdGg6MTQuMjg1NzE0Mjg1NzE0Mjg2JTtoZWlnaHQ6NDBweDtsaW5lLWhlaWdodDo0MHB4O3RleHQtYWxpZ246Y2VudGVyO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTtib3JkZXI6MXB4IHNvbGlkIHRyYW5zcGFyZW50fS52ZHAtZGF0ZXBpY2tlcl9fY2FsZW5kYXIgLmNlbGw6bm90KC5ibGFuayk6bm90KC5kaXNhYmxlZCkuZGF5LC52ZHAtZGF0ZXBpY2tlcl9fY2FsZW5kYXIgLmNlbGw6bm90KC5ibGFuayk6bm90KC5kaXNhYmxlZCkubW9udGgsLnZkcC1kYXRlcGlja2VyX19jYWxlbmRhciAuY2VsbDpub3QoLmJsYW5rKTpub3QoLmRpc2FibGVkKS55ZWFye2N1cnNvcjpwb2ludGVyfS52ZHAtZGF0ZXBpY2tlcl9fY2FsZW5kYXIgLmNlbGw6bm90KC5ibGFuayk6bm90KC5kaXNhYmxlZCkuZGF5OmhvdmVyLC52ZHAtZGF0ZXBpY2tlcl9fY2FsZW5kYXIgLmNlbGw6bm90KC5ibGFuayk6bm90KC5kaXNhYmxlZCkubW9udGg6aG92ZXIsLnZkcC1kYXRlcGlja2VyX19jYWxlbmRhciAuY2VsbDpub3QoLmJsYW5rKTpub3QoLmRpc2FibGVkKS55ZWFyOmhvdmVye2JvcmRlcjoxcHggc29saWQgIzRiZH0udmRwLWRhdGVwaWNrZXJfX2NhbGVuZGFyIC5jZWxsLnNlbGVjdGVkLC52ZHAtZGF0ZXBpY2tlcl9fY2FsZW5kYXIgLmNlbGwuc2VsZWN0ZWQuaGlnaGxpZ2h0ZWQsLnZkcC1kYXRlcGlja2VyX19jYWxlbmRhciAuY2VsbC5zZWxlY3RlZDpob3ZlcntiYWNrZ3JvdW5kOiM0YmR9LnZkcC1kYXRlcGlja2VyX19jYWxlbmRhciAuY2VsbC5oaWdobGlnaHRlZHtiYWNrZ3JvdW5kOiNjYWU1ZWR9LnZkcC1kYXRlcGlja2VyX19jYWxlbmRhciAuY2VsbC5oaWdobGlnaHRlZC5kaXNhYmxlZHtjb2xvcjojYTNhM2EzfS52ZHAtZGF0ZXBpY2tlcl9fY2FsZW5kYXIgLmNlbGwuZ3JleXtjb2xvcjojODg4fS52ZHAtZGF0ZXBpY2tlcl9fY2FsZW5kYXIgLmNlbGwuZ3JleTpob3ZlcntiYWNrZ3JvdW5kOmluaGVyaXR9LnZkcC1kYXRlcGlja2VyX19jYWxlbmRhciAuY2VsbC5kYXktaGVhZGVye2ZvbnQtc2l6ZTo3NSU7d2hpdGUtc3BhY2U6bm8td3JhcDtjdXJzb3I6aW5oZXJpdH0udmRwLWRhdGVwaWNrZXJfX2NhbGVuZGFyIC5jZWxsLmRheS1oZWFkZXI6aG92ZXJ7YmFja2dyb3VuZDppbmhlcml0fS52ZHAtZGF0ZXBpY2tlcl9fY2FsZW5kYXIgLm1vbnRoLC52ZHAtZGF0ZXBpY2tlcl9fY2FsZW5kYXIgLnllYXJ7d2lkdGg6MzMuMzMzJX0udmRwLWRhdGVwaWNrZXJfX2NhbGVuZGFyLWJ1dHRvbiwudmRwLWRhdGVwaWNrZXJfX2NsZWFyLWJ1dHRvbntjdXJzb3I6cG9pbnRlcjtmb250LXN0eWxlOm5vcm1hbH0udmRwLWRhdGVwaWNrZXJfX2NhbGVuZGFyLWJ1dHRvbi5kaXNhYmxlZCwudmRwLWRhdGVwaWNrZXJfX2NsZWFyLWJ1dHRvbi5kaXNhYmxlZHtjb2xvcjojOTk5O2N1cnNvcjpkZWZhdWx0fScsXCJcIl0pfSxmdW5jdGlvbihlLHQpe2Z1bmN0aW9uIG4oZSx0KXt2YXIgbj1lWzFdfHxcIlwiLHI9ZVszXTtpZighcilyZXR1cm4gbjtpZih0JiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBidG9hKXt2YXIgYT1pKHIpO3JldHVybltuXS5jb25jYXQoci5zb3VyY2VzLm1hcChmdW5jdGlvbihlKXtyZXR1cm5cIi8qIyBzb3VyY2VVUkw9XCIrci5zb3VyY2VSb290K2UrXCIgKi9cIn0pKS5jb25jYXQoW2FdKS5qb2luKFwiXFxuXCIpfXJldHVybltuXS5qb2luKFwiXFxuXCIpfWZ1bmN0aW9uIGkoZSl7cmV0dXJuXCIvKiMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtODtiYXNlNjQsXCIrYnRvYSh1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoSlNPTi5zdHJpbmdpZnkoZSkpKSkrXCIgKi9cIn1lLmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHQ9W107cmV0dXJuIHQudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24odCl7dmFyIGk9bih0LGUpO3JldHVybiB0WzJdP1wiQG1lZGlhIFwiK3RbMl0rXCJ7XCIraStcIn1cIjppfSkuam9pbihcIlwiKX0sdC5pPWZ1bmN0aW9uKGUsbil7XCJzdHJpbmdcIj09dHlwZW9mIGUmJihlPVtbbnVsbCxlLFwiXCJdXSk7Zm9yKHZhciBpPXt9LHI9MDtyPHRoaXMubGVuZ3RoO3IrKyl7dmFyIGE9dGhpc1tyXVswXTtcIm51bWJlclwiPT10eXBlb2YgYSYmKGlbYV09ITApfWZvcihyPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBvPWVbcl07XCJudW1iZXJcIj09dHlwZW9mIG9bMF0mJmlbb1swXV18fChuJiYhb1syXT9vWzJdPW46biYmKG9bMl09XCIoXCIrb1syXStcIikgYW5kIChcIituK1wiKVwiKSx0LnB1c2gobykpfX0sdH19LGZ1bmN0aW9uKGUsdCxuKXtmdW5jdGlvbiBpKGUpe24oNDApfXZhciByPW4oMzgpKG4oMzcpLG4oMzkpLGksbnVsbCxudWxsKTtlLmV4cG9ydHM9ci5leHBvcnRzfSxmdW5jdGlvbihlLHQsbil7ZnVuY3Rpb24gaShlKXtmb3IodmFyIHQ9MDt0PGUubGVuZ3RoO3QrKyl7dmFyIG49ZVt0XSxpPWNbbi5pZF07aWYoaSl7aS5yZWZzKys7Zm9yKHZhciByPTA7cjxpLnBhcnRzLmxlbmd0aDtyKyspaS5wYXJ0c1tyXShuLnBhcnRzW3JdKTtmb3IoO3I8bi5wYXJ0cy5sZW5ndGg7cisrKWkucGFydHMucHVzaChhKG4ucGFydHNbcl0pKTtpLnBhcnRzLmxlbmd0aD5uLnBhcnRzLmxlbmd0aCYmKGkucGFydHMubGVuZ3RoPW4ucGFydHMubGVuZ3RoKX1lbHNle2Zvcih2YXIgbz1bXSxyPTA7cjxuLnBhcnRzLmxlbmd0aDtyKyspby5wdXNoKGEobi5wYXJ0c1tyXSkpO2Nbbi5pZF09e2lkOm4uaWQscmVmczoxLHBhcnRzOm99fX19ZnVuY3Rpb24gcigpe3ZhciBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiKTtyZXR1cm4gZS50eXBlPVwidGV4dC9jc3NcIixkLmFwcGVuZENoaWxkKGUpLGV9ZnVuY3Rpb24gYShlKXt2YXIgdCxuLGk9ZG9jdW1lbnQucXVlcnlTZWxlY3Rvcignc3R5bGVbZGF0YS12dWUtc3NyLWlkfj1cIicrZS5pZCsnXCJdJyk7aWYoaSl7aWYoZilyZXR1cm4gZztpLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoaSl9aWYoYil7dmFyIGE9cCsrO2k9aHx8KGg9cigpKSx0PW8uYmluZChudWxsLGksYSwhMSksbj1vLmJpbmQobnVsbCxpLGEsITApfWVsc2UgaT1yKCksdD1zLmJpbmQobnVsbCxpKSxuPWZ1bmN0aW9uKCl7aS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGkpfTtyZXR1cm4gdChlKSxmdW5jdGlvbihpKXtpZihpKXtpZihpLmNzcz09PWUuY3NzJiZpLm1lZGlhPT09ZS5tZWRpYSYmaS5zb3VyY2VNYXA9PT1lLnNvdXJjZU1hcClyZXR1cm47dChlPWkpfWVsc2UgbigpfX1mdW5jdGlvbiBvKGUsdCxuLGkpe3ZhciByPW4/XCJcIjppLmNzcztpZihlLnN0eWxlU2hlZXQpZS5zdHlsZVNoZWV0LmNzc1RleHQ9bSh0LHIpO2Vsc2V7dmFyIGE9ZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUociksbz1lLmNoaWxkTm9kZXM7b1t0XSYmZS5yZW1vdmVDaGlsZChvW3RdKSxvLmxlbmd0aD9lLmluc2VydEJlZm9yZShhLG9bdF0pOmUuYXBwZW5kQ2hpbGQoYSl9fWZ1bmN0aW9uIHMoZSx0KXt2YXIgbj10LmNzcyxpPXQubWVkaWEscj10LnNvdXJjZU1hcDtpZihpJiZlLnNldEF0dHJpYnV0ZShcIm1lZGlhXCIsaSksciYmKG4rPVwiXFxuLyojIHNvdXJjZVVSTD1cIityLnNvdXJjZXNbMF0rXCIgKi9cIixuKz1cIlxcbi8qIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsXCIrYnRvYSh1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoSlNPTi5zdHJpbmdpZnkocikpKSkrXCIgKi9cIiksZS5zdHlsZVNoZWV0KWUuc3R5bGVTaGVldC5jc3NUZXh0PW47ZWxzZXtmb3IoO2UuZmlyc3RDaGlsZDspZS5yZW1vdmVDaGlsZChlLmZpcnN0Q2hpbGQpO2UuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUobikpfX12YXIgbD1cInVuZGVmaW5lZFwiIT10eXBlb2YgZG9jdW1lbnQ7aWYoXCJ1bmRlZmluZWRcIiE9dHlwZW9mIERFQlVHJiZERUJVRyYmIWwpdGhyb3cgbmV3IEVycm9yKFwidnVlLXN0eWxlLWxvYWRlciBjYW5ub3QgYmUgdXNlZCBpbiBhIG5vbi1icm93c2VyIGVudmlyb25tZW50LiBVc2UgeyB0YXJnZXQ6ICdub2RlJyB9IGluIHlvdXIgV2VicGFjayBjb25maWcgdG8gaW5kaWNhdGUgYSBzZXJ2ZXItcmVuZGVyaW5nIGVudmlyb25tZW50LlwiKTt2YXIgdT1uKDc4KSxjPXt9LGQ9bCYmKGRvY3VtZW50LmhlYWR8fGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiaGVhZFwiKVswXSksaD1udWxsLHA9MCxmPSExLGc9ZnVuY3Rpb24oKXt9LGI9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIG5hdmlnYXRvciYmL21zaWUgWzYtOV1cXGIvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LG4pe2Y9bjt2YXIgcj11KGUsdCk7cmV0dXJuIGkociksZnVuY3Rpb24odCl7Zm9yKHZhciBuPVtdLGE9MDthPHIubGVuZ3RoO2ErKyl7dmFyIG89clthXSxzPWNbby5pZF07cy5yZWZzLS0sbi5wdXNoKHMpfXQ/KHI9dShlLHQpLGkocikpOnI9W107Zm9yKHZhciBhPTA7YTxuLmxlbmd0aDthKyspe3ZhciBzPW5bYV07aWYoMD09PXMucmVmcyl7Zm9yKHZhciBsPTA7bDxzLnBhcnRzLmxlbmd0aDtsKyspcy5wYXJ0c1tsXSgpO2RlbGV0ZSBjW3MuaWRdfX19fTt2YXIgbT1mdW5jdGlvbigpe3ZhciBlPVtdO3JldHVybiBmdW5jdGlvbih0LG4pe3JldHVybiBlW3RdPW4sZS5maWx0ZXIoQm9vbGVhbikuam9pbihcIlxcblwiKX19KCl9LGZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPVtdLGk9e30scj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgYT10W3JdLG89YVswXSxzPWFbMV0sbD1hWzJdLHU9YVszXSxjPXtpZDplK1wiOlwiK3IsY3NzOnMsbWVkaWE6bCxzb3VyY2VNYXA6dX07aVtvXT9pW29dLnBhcnRzLnB1c2goYyk6bi5wdXNoKGlbb109e2lkOm8scGFydHM6W2NdfSl9cmV0dXJuIG59fV0pOyIsIi8qKlxuICogdnVleCB2My4xLjJcbiAqIChjKSAyMDE5IEV2YW4gWW91XG4gKiBAbGljZW5zZSBNSVRcbiAqL1xuJ3VzZSBzdHJpY3QnO1xuXG5mdW5jdGlvbiBhcHBseU1peGluIChWdWUpIHtcbiAgdmFyIHZlcnNpb24gPSBOdW1iZXIoVnVlLnZlcnNpb24uc3BsaXQoJy4nKVswXSk7XG5cbiAgaWYgKHZlcnNpb24gPj0gMikge1xuICAgIFZ1ZS5taXhpbih7IGJlZm9yZUNyZWF0ZTogdnVleEluaXQgfSk7XG4gIH0gZWxzZSB7XG4gICAgLy8gb3ZlcnJpZGUgaW5pdCBhbmQgaW5qZWN0IHZ1ZXggaW5pdCBwcm9jZWR1cmVcbiAgICAvLyBmb3IgMS54IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LlxuICAgIHZhciBfaW5pdCA9IFZ1ZS5wcm90b3R5cGUuX2luaXQ7XG4gICAgVnVlLnByb3RvdHlwZS5faW5pdCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICBpZiAoIG9wdGlvbnMgPT09IHZvaWQgMCApIG9wdGlvbnMgPSB7fTtcblxuICAgICAgb3B0aW9ucy5pbml0ID0gb3B0aW9ucy5pbml0XG4gICAgICAgID8gW3Z1ZXhJbml0XS5jb25jYXQob3B0aW9ucy5pbml0KVxuICAgICAgICA6IHZ1ZXhJbml0O1xuICAgICAgX2luaXQuY2FsbCh0aGlzLCBvcHRpb25zKTtcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFZ1ZXggaW5pdCBob29rLCBpbmplY3RlZCBpbnRvIGVhY2ggaW5zdGFuY2VzIGluaXQgaG9va3MgbGlzdC5cbiAgICovXG5cbiAgZnVuY3Rpb24gdnVleEluaXQgKCkge1xuICAgIHZhciBvcHRpb25zID0gdGhpcy4kb3B0aW9ucztcbiAgICAvLyBzdG9yZSBpbmplY3Rpb25cbiAgICBpZiAob3B0aW9ucy5zdG9yZSkge1xuICAgICAgdGhpcy4kc3RvcmUgPSB0eXBlb2Ygb3B0aW9ucy5zdG9yZSA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgICA/IG9wdGlvbnMuc3RvcmUoKVxuICAgICAgICA6IG9wdGlvbnMuc3RvcmU7XG4gICAgfSBlbHNlIGlmIChvcHRpb25zLnBhcmVudCAmJiBvcHRpb25zLnBhcmVudC4kc3RvcmUpIHtcbiAgICAgIHRoaXMuJHN0b3JlID0gb3B0aW9ucy5wYXJlbnQuJHN0b3JlO1xuICAgIH1cbiAgfVxufVxuXG52YXIgdGFyZ2V0ID0gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCdcbiAgPyB3aW5kb3dcbiAgOiB0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJ1xuICAgID8gZ2xvYmFsXG4gICAgOiB7fTtcbnZhciBkZXZ0b29sSG9vayA9IHRhcmdldC5fX1ZVRV9ERVZUT09MU19HTE9CQUxfSE9PS19fO1xuXG5mdW5jdGlvbiBkZXZ0b29sUGx1Z2luIChzdG9yZSkge1xuICBpZiAoIWRldnRvb2xIb29rKSB7IHJldHVybiB9XG5cbiAgc3RvcmUuX2RldnRvb2xIb29rID0gZGV2dG9vbEhvb2s7XG5cbiAgZGV2dG9vbEhvb2suZW1pdCgndnVleDppbml0Jywgc3RvcmUpO1xuXG4gIGRldnRvb2xIb29rLm9uKCd2dWV4OnRyYXZlbC10by1zdGF0ZScsIGZ1bmN0aW9uICh0YXJnZXRTdGF0ZSkge1xuICAgIHN0b3JlLnJlcGxhY2VTdGF0ZSh0YXJnZXRTdGF0ZSk7XG4gIH0pO1xuXG4gIHN0b3JlLnN1YnNjcmliZShmdW5jdGlvbiAobXV0YXRpb24sIHN0YXRlKSB7XG4gICAgZGV2dG9vbEhvb2suZW1pdCgndnVleDptdXRhdGlvbicsIG11dGF0aW9uLCBzdGF0ZSk7XG4gIH0pO1xufVxuXG4vKipcbiAqIEdldCB0aGUgZmlyc3QgaXRlbSB0aGF0IHBhc3MgdGhlIHRlc3RcbiAqIGJ5IHNlY29uZCBhcmd1bWVudCBmdW5jdGlvblxuICpcbiAqIEBwYXJhbSB7QXJyYXl9IGxpc3RcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZcbiAqIEByZXR1cm4geyp9XG4gKi9cblxuLyoqXG4gKiBmb3JFYWNoIGZvciBvYmplY3RcbiAqL1xuZnVuY3Rpb24gZm9yRWFjaFZhbHVlIChvYmosIGZuKSB7XG4gIE9iamVjdC5rZXlzKG9iaikuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IHJldHVybiBmbihvYmpba2V5XSwga2V5KTsgfSk7XG59XG5cbmZ1bmN0aW9uIGlzT2JqZWN0IChvYmopIHtcbiAgcmV0dXJuIG9iaiAhPT0gbnVsbCAmJiB0eXBlb2Ygb2JqID09PSAnb2JqZWN0J1xufVxuXG5mdW5jdGlvbiBpc1Byb21pc2UgKHZhbCkge1xuICByZXR1cm4gdmFsICYmIHR5cGVvZiB2YWwudGhlbiA9PT0gJ2Z1bmN0aW9uJ1xufVxuXG5mdW5jdGlvbiBhc3NlcnQgKGNvbmRpdGlvbiwgbXNnKSB7XG4gIGlmICghY29uZGl0aW9uKSB7IHRocm93IG5ldyBFcnJvcigoXCJbdnVleF0gXCIgKyBtc2cpKSB9XG59XG5cbmZ1bmN0aW9uIHBhcnRpYWwgKGZuLCBhcmcpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gZm4oYXJnKVxuICB9XG59XG5cbi8vIEJhc2UgZGF0YSBzdHJ1Y3QgZm9yIHN0b3JlJ3MgbW9kdWxlLCBwYWNrYWdlIHdpdGggc29tZSBhdHRyaWJ1dGUgYW5kIG1ldGhvZFxudmFyIE1vZHVsZSA9IGZ1bmN0aW9uIE1vZHVsZSAocmF3TW9kdWxlLCBydW50aW1lKSB7XG4gIHRoaXMucnVudGltZSA9IHJ1bnRpbWU7XG4gIC8vIFN0b3JlIHNvbWUgY2hpbGRyZW4gaXRlbVxuICB0aGlzLl9jaGlsZHJlbiA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIC8vIFN0b3JlIHRoZSBvcmlnaW4gbW9kdWxlIG9iamVjdCB3aGljaCBwYXNzZWQgYnkgcHJvZ3JhbW1lclxuICB0aGlzLl9yYXdNb2R1bGUgPSByYXdNb2R1bGU7XG4gIHZhciByYXdTdGF0ZSA9IHJhd01vZHVsZS5zdGF0ZTtcblxuICAvLyBTdG9yZSB0aGUgb3JpZ2luIG1vZHVsZSdzIHN0YXRlXG4gIHRoaXMuc3RhdGUgPSAodHlwZW9mIHJhd1N0YXRlID09PSAnZnVuY3Rpb24nID8gcmF3U3RhdGUoKSA6IHJhd1N0YXRlKSB8fCB7fTtcbn07XG5cbnZhciBwcm90b3R5cGVBY2Nlc3NvcnMgPSB7IG5hbWVzcGFjZWQ6IHsgY29uZmlndXJhYmxlOiB0cnVlIH0gfTtcblxucHJvdG90eXBlQWNjZXNzb3JzLm5hbWVzcGFjZWQuZ2V0ID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gISF0aGlzLl9yYXdNb2R1bGUubmFtZXNwYWNlZFxufTtcblxuTW9kdWxlLnByb3RvdHlwZS5hZGRDaGlsZCA9IGZ1bmN0aW9uIGFkZENoaWxkIChrZXksIG1vZHVsZSkge1xuICB0aGlzLl9jaGlsZHJlbltrZXldID0gbW9kdWxlO1xufTtcblxuTW9kdWxlLnByb3RvdHlwZS5yZW1vdmVDaGlsZCA9IGZ1bmN0aW9uIHJlbW92ZUNoaWxkIChrZXkpIHtcbiAgZGVsZXRlIHRoaXMuX2NoaWxkcmVuW2tleV07XG59O1xuXG5Nb2R1bGUucHJvdG90eXBlLmdldENoaWxkID0gZnVuY3Rpb24gZ2V0Q2hpbGQgKGtleSkge1xuICByZXR1cm4gdGhpcy5fY2hpbGRyZW5ba2V5XVxufTtcblxuTW9kdWxlLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiB1cGRhdGUgKHJhd01vZHVsZSkge1xuICB0aGlzLl9yYXdNb2R1bGUubmFtZXNwYWNlZCA9IHJhd01vZHVsZS5uYW1lc3BhY2VkO1xuICBpZiAocmF3TW9kdWxlLmFjdGlvbnMpIHtcbiAgICB0aGlzLl9yYXdNb2R1bGUuYWN0aW9ucyA9IHJhd01vZHVsZS5hY3Rpb25zO1xuICB9XG4gIGlmIChyYXdNb2R1bGUubXV0YXRpb25zKSB7XG4gICAgdGhpcy5fcmF3TW9kdWxlLm11dGF0aW9ucyA9IHJhd01vZHVsZS5tdXRhdGlvbnM7XG4gIH1cbiAgaWYgKHJhd01vZHVsZS5nZXR0ZXJzKSB7XG4gICAgdGhpcy5fcmF3TW9kdWxlLmdldHRlcnMgPSByYXdNb2R1bGUuZ2V0dGVycztcbiAgfVxufTtcblxuTW9kdWxlLnByb3RvdHlwZS5mb3JFYWNoQ2hpbGQgPSBmdW5jdGlvbiBmb3JFYWNoQ2hpbGQgKGZuKSB7XG4gIGZvckVhY2hWYWx1ZSh0aGlzLl9jaGlsZHJlbiwgZm4pO1xufTtcblxuTW9kdWxlLnByb3RvdHlwZS5mb3JFYWNoR2V0dGVyID0gZnVuY3Rpb24gZm9yRWFjaEdldHRlciAoZm4pIHtcbiAgaWYgKHRoaXMuX3Jhd01vZHVsZS5nZXR0ZXJzKSB7XG4gICAgZm9yRWFjaFZhbHVlKHRoaXMuX3Jhd01vZHVsZS5nZXR0ZXJzLCBmbik7XG4gIH1cbn07XG5cbk1vZHVsZS5wcm90b3R5cGUuZm9yRWFjaEFjdGlvbiA9IGZ1bmN0aW9uIGZvckVhY2hBY3Rpb24gKGZuKSB7XG4gIGlmICh0aGlzLl9yYXdNb2R1bGUuYWN0aW9ucykge1xuICAgIGZvckVhY2hWYWx1ZSh0aGlzLl9yYXdNb2R1bGUuYWN0aW9ucywgZm4pO1xuICB9XG59O1xuXG5Nb2R1bGUucHJvdG90eXBlLmZvckVhY2hNdXRhdGlvbiA9IGZ1bmN0aW9uIGZvckVhY2hNdXRhdGlvbiAoZm4pIHtcbiAgaWYgKHRoaXMuX3Jhd01vZHVsZS5tdXRhdGlvbnMpIHtcbiAgICBmb3JFYWNoVmFsdWUodGhpcy5fcmF3TW9kdWxlLm11dGF0aW9ucywgZm4pO1xuICB9XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyggTW9kdWxlLnByb3RvdHlwZSwgcHJvdG90eXBlQWNjZXNzb3JzICk7XG5cbnZhciBNb2R1bGVDb2xsZWN0aW9uID0gZnVuY3Rpb24gTW9kdWxlQ29sbGVjdGlvbiAocmF3Um9vdE1vZHVsZSkge1xuICAvLyByZWdpc3RlciByb290IG1vZHVsZSAoVnVleC5TdG9yZSBvcHRpb25zKVxuICB0aGlzLnJlZ2lzdGVyKFtdLCByYXdSb290TW9kdWxlLCBmYWxzZSk7XG59O1xuXG5Nb2R1bGVDb2xsZWN0aW9uLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiBnZXQgKHBhdGgpIHtcbiAgcmV0dXJuIHBhdGgucmVkdWNlKGZ1bmN0aW9uIChtb2R1bGUsIGtleSkge1xuICAgIHJldHVybiBtb2R1bGUuZ2V0Q2hpbGQoa2V5KVxuICB9LCB0aGlzLnJvb3QpXG59O1xuXG5Nb2R1bGVDb2xsZWN0aW9uLnByb3RvdHlwZS5nZXROYW1lc3BhY2UgPSBmdW5jdGlvbiBnZXROYW1lc3BhY2UgKHBhdGgpIHtcbiAgdmFyIG1vZHVsZSA9IHRoaXMucm9vdDtcbiAgcmV0dXJuIHBhdGgucmVkdWNlKGZ1bmN0aW9uIChuYW1lc3BhY2UsIGtleSkge1xuICAgIG1vZHVsZSA9IG1vZHVsZS5nZXRDaGlsZChrZXkpO1xuICAgIHJldHVybiBuYW1lc3BhY2UgKyAobW9kdWxlLm5hbWVzcGFjZWQgPyBrZXkgKyAnLycgOiAnJylcbiAgfSwgJycpXG59O1xuXG5Nb2R1bGVDb2xsZWN0aW9uLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiB1cGRhdGUkMSAocmF3Um9vdE1vZHVsZSkge1xuICB1cGRhdGUoW10sIHRoaXMucm9vdCwgcmF3Um9vdE1vZHVsZSk7XG59O1xuXG5Nb2R1bGVDb2xsZWN0aW9uLnByb3RvdHlwZS5yZWdpc3RlciA9IGZ1bmN0aW9uIHJlZ2lzdGVyIChwYXRoLCByYXdNb2R1bGUsIHJ1bnRpbWUpIHtcbiAgICB2YXIgdGhpcyQxID0gdGhpcztcbiAgICBpZiAoIHJ1bnRpbWUgPT09IHZvaWQgMCApIHJ1bnRpbWUgPSB0cnVlO1xuXG4gIGlmIChcInByb2R1Y3Rpb25cIiAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgYXNzZXJ0UmF3TW9kdWxlKHBhdGgsIHJhd01vZHVsZSk7XG4gIH1cblxuICB2YXIgbmV3TW9kdWxlID0gbmV3IE1vZHVsZShyYXdNb2R1bGUsIHJ1bnRpbWUpO1xuICBpZiAocGF0aC5sZW5ndGggPT09IDApIHtcbiAgICB0aGlzLnJvb3QgPSBuZXdNb2R1bGU7XG4gIH0gZWxzZSB7XG4gICAgdmFyIHBhcmVudCA9IHRoaXMuZ2V0KHBhdGguc2xpY2UoMCwgLTEpKTtcbiAgICBwYXJlbnQuYWRkQ2hpbGQocGF0aFtwYXRoLmxlbmd0aCAtIDFdLCBuZXdNb2R1bGUpO1xuICB9XG5cbiAgLy8gcmVnaXN0ZXIgbmVzdGVkIG1vZHVsZXNcbiAgaWYgKHJhd01vZHVsZS5tb2R1bGVzKSB7XG4gICAgZm9yRWFjaFZhbHVlKHJhd01vZHVsZS5tb2R1bGVzLCBmdW5jdGlvbiAocmF3Q2hpbGRNb2R1bGUsIGtleSkge1xuICAgICAgdGhpcyQxLnJlZ2lzdGVyKHBhdGguY29uY2F0KGtleSksIHJhd0NoaWxkTW9kdWxlLCBydW50aW1lKTtcbiAgICB9KTtcbiAgfVxufTtcblxuTW9kdWxlQ29sbGVjdGlvbi5wcm90b3R5cGUudW5yZWdpc3RlciA9IGZ1bmN0aW9uIHVucmVnaXN0ZXIgKHBhdGgpIHtcbiAgdmFyIHBhcmVudCA9IHRoaXMuZ2V0KHBhdGguc2xpY2UoMCwgLTEpKTtcbiAgdmFyIGtleSA9IHBhdGhbcGF0aC5sZW5ndGggLSAxXTtcbiAgaWYgKCFwYXJlbnQuZ2V0Q2hpbGQoa2V5KS5ydW50aW1lKSB7IHJldHVybiB9XG5cbiAgcGFyZW50LnJlbW92ZUNoaWxkKGtleSk7XG59O1xuXG5mdW5jdGlvbiB1cGRhdGUgKHBhdGgsIHRhcmdldE1vZHVsZSwgbmV3TW9kdWxlKSB7XG4gIGlmIChcInByb2R1Y3Rpb25cIiAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgYXNzZXJ0UmF3TW9kdWxlKHBhdGgsIG5ld01vZHVsZSk7XG4gIH1cblxuICAvLyB1cGRhdGUgdGFyZ2V0IG1vZHVsZVxuICB0YXJnZXRNb2R1bGUudXBkYXRlKG5ld01vZHVsZSk7XG5cbiAgLy8gdXBkYXRlIG5lc3RlZCBtb2R1bGVzXG4gIGlmIChuZXdNb2R1bGUubW9kdWxlcykge1xuICAgIGZvciAodmFyIGtleSBpbiBuZXdNb2R1bGUubW9kdWxlcykge1xuICAgICAgaWYgKCF0YXJnZXRNb2R1bGUuZ2V0Q2hpbGQoa2V5KSkge1xuICAgICAgICBpZiAoXCJwcm9kdWN0aW9uXCIgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAgIFwiW3Z1ZXhdIHRyeWluZyB0byBhZGQgYSBuZXcgbW9kdWxlICdcIiArIGtleSArIFwiJyBvbiBob3QgcmVsb2FkaW5nLCBcIiArXG4gICAgICAgICAgICAnbWFudWFsIHJlbG9hZCBpcyBuZWVkZWQnXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIHVwZGF0ZShcbiAgICAgICAgcGF0aC5jb25jYXQoa2V5KSxcbiAgICAgICAgdGFyZ2V0TW9kdWxlLmdldENoaWxkKGtleSksXG4gICAgICAgIG5ld01vZHVsZS5tb2R1bGVzW2tleV1cbiAgICAgICk7XG4gICAgfVxuICB9XG59XG5cbnZhciBmdW5jdGlvbkFzc2VydCA9IHtcbiAgYXNzZXJ0OiBmdW5jdGlvbiAodmFsdWUpIHsgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJzsgfSxcbiAgZXhwZWN0ZWQ6ICdmdW5jdGlvbidcbn07XG5cbnZhciBvYmplY3RBc3NlcnQgPSB7XG4gIGFzc2VydDogZnVuY3Rpb24gKHZhbHVlKSB7IHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicgfHxcbiAgICAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgdmFsdWUuaGFuZGxlciA9PT0gJ2Z1bmN0aW9uJyk7IH0sXG4gIGV4cGVjdGVkOiAnZnVuY3Rpb24gb3Igb2JqZWN0IHdpdGggXCJoYW5kbGVyXCIgZnVuY3Rpb24nXG59O1xuXG52YXIgYXNzZXJ0VHlwZXMgPSB7XG4gIGdldHRlcnM6IGZ1bmN0aW9uQXNzZXJ0LFxuICBtdXRhdGlvbnM6IGZ1bmN0aW9uQXNzZXJ0LFxuICBhY3Rpb25zOiBvYmplY3RBc3NlcnRcbn07XG5cbmZ1bmN0aW9uIGFzc2VydFJhd01vZHVsZSAocGF0aCwgcmF3TW9kdWxlKSB7XG4gIE9iamVjdC5rZXlzKGFzc2VydFR5cGVzKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICBpZiAoIXJhd01vZHVsZVtrZXldKSB7IHJldHVybiB9XG5cbiAgICB2YXIgYXNzZXJ0T3B0aW9ucyA9IGFzc2VydFR5cGVzW2tleV07XG5cbiAgICBmb3JFYWNoVmFsdWUocmF3TW9kdWxlW2tleV0sIGZ1bmN0aW9uICh2YWx1ZSwgdHlwZSkge1xuICAgICAgYXNzZXJ0KFxuICAgICAgICBhc3NlcnRPcHRpb25zLmFzc2VydCh2YWx1ZSksXG4gICAgICAgIG1ha2VBc3NlcnRpb25NZXNzYWdlKHBhdGgsIGtleSwgdHlwZSwgdmFsdWUsIGFzc2VydE9wdGlvbnMuZXhwZWN0ZWQpXG4gICAgICApO1xuICAgIH0pO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gbWFrZUFzc2VydGlvbk1lc3NhZ2UgKHBhdGgsIGtleSwgdHlwZSwgdmFsdWUsIGV4cGVjdGVkKSB7XG4gIHZhciBidWYgPSBrZXkgKyBcIiBzaG91bGQgYmUgXCIgKyBleHBlY3RlZCArIFwiIGJ1dCBcXFwiXCIgKyBrZXkgKyBcIi5cIiArIHR5cGUgKyBcIlxcXCJcIjtcbiAgaWYgKHBhdGgubGVuZ3RoID4gMCkge1xuICAgIGJ1ZiArPSBcIiBpbiBtb2R1bGUgXFxcIlwiICsgKHBhdGguam9pbignLicpKSArIFwiXFxcIlwiO1xuICB9XG4gIGJ1ZiArPSBcIiBpcyBcIiArIChKU09OLnN0cmluZ2lmeSh2YWx1ZSkpICsgXCIuXCI7XG4gIHJldHVybiBidWZcbn1cblxudmFyIFZ1ZTsgLy8gYmluZCBvbiBpbnN0YWxsXG5cbnZhciBTdG9yZSA9IGZ1bmN0aW9uIFN0b3JlIChvcHRpb25zKSB7XG4gIHZhciB0aGlzJDEgPSB0aGlzO1xuICBpZiAoIG9wdGlvbnMgPT09IHZvaWQgMCApIG9wdGlvbnMgPSB7fTtcblxuICAvLyBBdXRvIGluc3RhbGwgaWYgaXQgaXMgbm90IGRvbmUgeWV0IGFuZCBgd2luZG93YCBoYXMgYFZ1ZWAuXG4gIC8vIFRvIGFsbG93IHVzZXJzIHRvIGF2b2lkIGF1dG8taW5zdGFsbGF0aW9uIGluIHNvbWUgY2FzZXMsXG4gIC8vIHRoaXMgY29kZSBzaG91bGQgYmUgcGxhY2VkIGhlcmUuIFNlZSAjNzMxXG4gIGlmICghVnVlICYmIHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5WdWUpIHtcbiAgICBpbnN0YWxsKHdpbmRvdy5WdWUpO1xuICB9XG5cbiAgaWYgKFwicHJvZHVjdGlvblwiICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBhc3NlcnQoVnVlLCBcIm11c3QgY2FsbCBWdWUudXNlKFZ1ZXgpIGJlZm9yZSBjcmVhdGluZyBhIHN0b3JlIGluc3RhbmNlLlwiKTtcbiAgICBhc3NlcnQodHlwZW9mIFByb21pc2UgIT09ICd1bmRlZmluZWQnLCBcInZ1ZXggcmVxdWlyZXMgYSBQcm9taXNlIHBvbHlmaWxsIGluIHRoaXMgYnJvd3Nlci5cIik7XG4gICAgYXNzZXJ0KHRoaXMgaW5zdGFuY2VvZiBTdG9yZSwgXCJzdG9yZSBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBuZXcgb3BlcmF0b3IuXCIpO1xuICB9XG5cbiAgdmFyIHBsdWdpbnMgPSBvcHRpb25zLnBsdWdpbnM7IGlmICggcGx1Z2lucyA9PT0gdm9pZCAwICkgcGx1Z2lucyA9IFtdO1xuICB2YXIgc3RyaWN0ID0gb3B0aW9ucy5zdHJpY3Q7IGlmICggc3RyaWN0ID09PSB2b2lkIDAgKSBzdHJpY3QgPSBmYWxzZTtcblxuICAvLyBzdG9yZSBpbnRlcm5hbCBzdGF0ZVxuICB0aGlzLl9jb21taXR0aW5nID0gZmFsc2U7XG4gIHRoaXMuX2FjdGlvbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICB0aGlzLl9hY3Rpb25TdWJzY3JpYmVycyA9IFtdO1xuICB0aGlzLl9tdXRhdGlvbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICB0aGlzLl93cmFwcGVkR2V0dGVycyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIHRoaXMuX21vZHVsZXMgPSBuZXcgTW9kdWxlQ29sbGVjdGlvbihvcHRpb25zKTtcbiAgdGhpcy5fbW9kdWxlc05hbWVzcGFjZU1hcCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIHRoaXMuX3N1YnNjcmliZXJzID0gW107XG4gIHRoaXMuX3dhdGNoZXJWTSA9IG5ldyBWdWUoKTtcbiAgdGhpcy5fbWFrZUxvY2FsR2V0dGVyc0NhY2hlID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICAvLyBiaW5kIGNvbW1pdCBhbmQgZGlzcGF0Y2ggdG8gc2VsZlxuICB2YXIgc3RvcmUgPSB0aGlzO1xuICB2YXIgcmVmID0gdGhpcztcbiAgdmFyIGRpc3BhdGNoID0gcmVmLmRpc3BhdGNoO1xuICB2YXIgY29tbWl0ID0gcmVmLmNvbW1pdDtcbiAgdGhpcy5kaXNwYXRjaCA9IGZ1bmN0aW9uIGJvdW5kRGlzcGF0Y2ggKHR5cGUsIHBheWxvYWQpIHtcbiAgICByZXR1cm4gZGlzcGF0Y2guY2FsbChzdG9yZSwgdHlwZSwgcGF5bG9hZClcbiAgfTtcbiAgdGhpcy5jb21taXQgPSBmdW5jdGlvbiBib3VuZENvbW1pdCAodHlwZSwgcGF5bG9hZCwgb3B0aW9ucykge1xuICAgIHJldHVybiBjb21taXQuY2FsbChzdG9yZSwgdHlwZSwgcGF5bG9hZCwgb3B0aW9ucylcbiAgfTtcblxuICAvLyBzdHJpY3QgbW9kZVxuICB0aGlzLnN0cmljdCA9IHN0cmljdDtcblxuICB2YXIgc3RhdGUgPSB0aGlzLl9tb2R1bGVzLnJvb3Quc3RhdGU7XG5cbiAgLy8gaW5pdCByb290IG1vZHVsZS5cbiAgLy8gdGhpcyBhbHNvIHJlY3Vyc2l2ZWx5IHJlZ2lzdGVycyBhbGwgc3ViLW1vZHVsZXNcbiAgLy8gYW5kIGNvbGxlY3RzIGFsbCBtb2R1bGUgZ2V0dGVycyBpbnNpZGUgdGhpcy5fd3JhcHBlZEdldHRlcnNcbiAgaW5zdGFsbE1vZHVsZSh0aGlzLCBzdGF0ZSwgW10sIHRoaXMuX21vZHVsZXMucm9vdCk7XG5cbiAgLy8gaW5pdGlhbGl6ZSB0aGUgc3RvcmUgdm0sIHdoaWNoIGlzIHJlc3BvbnNpYmxlIGZvciB0aGUgcmVhY3Rpdml0eVxuICAvLyAoYWxzbyByZWdpc3RlcnMgX3dyYXBwZWRHZXR0ZXJzIGFzIGNvbXB1dGVkIHByb3BlcnRpZXMpXG4gIHJlc2V0U3RvcmVWTSh0aGlzLCBzdGF0ZSk7XG5cbiAgLy8gYXBwbHkgcGx1Z2luc1xuICBwbHVnaW5zLmZvckVhY2goZnVuY3Rpb24gKHBsdWdpbikgeyByZXR1cm4gcGx1Z2luKHRoaXMkMSk7IH0pO1xuXG4gIHZhciB1c2VEZXZ0b29scyA9IG9wdGlvbnMuZGV2dG9vbHMgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMuZGV2dG9vbHMgOiBWdWUuY29uZmlnLmRldnRvb2xzO1xuICBpZiAodXNlRGV2dG9vbHMpIHtcbiAgICBkZXZ0b29sUGx1Z2luKHRoaXMpO1xuICB9XG59O1xuXG52YXIgcHJvdG90eXBlQWNjZXNzb3JzJDEgPSB7IHN0YXRlOiB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH07XG5cbnByb3RvdHlwZUFjY2Vzc29ycyQxLnN0YXRlLmdldCA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMuX3ZtLl9kYXRhLiQkc3RhdGVcbn07XG5cbnByb3RvdHlwZUFjY2Vzc29ycyQxLnN0YXRlLnNldCA9IGZ1bmN0aW9uICh2KSB7XG4gIGlmIChcInByb2R1Y3Rpb25cIiAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgYXNzZXJ0KGZhbHNlLCBcInVzZSBzdG9yZS5yZXBsYWNlU3RhdGUoKSB0byBleHBsaWNpdCByZXBsYWNlIHN0b3JlIHN0YXRlLlwiKTtcbiAgfVxufTtcblxuU3RvcmUucHJvdG90eXBlLmNvbW1pdCA9IGZ1bmN0aW9uIGNvbW1pdCAoX3R5cGUsIF9wYXlsb2FkLCBfb3B0aW9ucykge1xuICAgIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gIC8vIGNoZWNrIG9iamVjdC1zdHlsZSBjb21taXRcbiAgdmFyIHJlZiA9IHVuaWZ5T2JqZWN0U3R5bGUoX3R5cGUsIF9wYXlsb2FkLCBfb3B0aW9ucyk7XG4gICAgdmFyIHR5cGUgPSByZWYudHlwZTtcbiAgICB2YXIgcGF5bG9hZCA9IHJlZi5wYXlsb2FkO1xuICAgIHZhciBvcHRpb25zID0gcmVmLm9wdGlvbnM7XG5cbiAgdmFyIG11dGF0aW9uID0geyB0eXBlOiB0eXBlLCBwYXlsb2FkOiBwYXlsb2FkIH07XG4gIHZhciBlbnRyeSA9IHRoaXMuX211dGF0aW9uc1t0eXBlXTtcbiAgaWYgKCFlbnRyeSkge1xuICAgIGlmIChcInByb2R1Y3Rpb25cIiAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBjb25zb2xlLmVycm9yKChcIlt2dWV4XSB1bmtub3duIG11dGF0aW9uIHR5cGU6IFwiICsgdHlwZSkpO1xuICAgIH1cbiAgICByZXR1cm5cbiAgfVxuICB0aGlzLl93aXRoQ29tbWl0KGZ1bmN0aW9uICgpIHtcbiAgICBlbnRyeS5mb3JFYWNoKGZ1bmN0aW9uIGNvbW1pdEl0ZXJhdG9yIChoYW5kbGVyKSB7XG4gICAgICBoYW5kbGVyKHBheWxvYWQpO1xuICAgIH0pO1xuICB9KTtcbiAgdGhpcy5fc3Vic2NyaWJlcnMuZm9yRWFjaChmdW5jdGlvbiAoc3ViKSB7IHJldHVybiBzdWIobXV0YXRpb24sIHRoaXMkMS5zdGF0ZSk7IH0pO1xuXG4gIGlmIChcbiAgICBcInByb2R1Y3Rpb25cIiAhPT0gJ3Byb2R1Y3Rpb24nICYmXG4gICAgb3B0aW9ucyAmJiBvcHRpb25zLnNpbGVudFxuICApIHtcbiAgICBjb25zb2xlLndhcm4oXG4gICAgICBcIlt2dWV4XSBtdXRhdGlvbiB0eXBlOiBcIiArIHR5cGUgKyBcIi4gU2lsZW50IG9wdGlvbiBoYXMgYmVlbiByZW1vdmVkLiBcIiArXG4gICAgICAnVXNlIHRoZSBmaWx0ZXIgZnVuY3Rpb25hbGl0eSBpbiB0aGUgdnVlLWRldnRvb2xzJ1xuICAgICk7XG4gIH1cbn07XG5cblN0b3JlLnByb3RvdHlwZS5kaXNwYXRjaCA9IGZ1bmN0aW9uIGRpc3BhdGNoIChfdHlwZSwgX3BheWxvYWQpIHtcbiAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuICAvLyBjaGVjayBvYmplY3Qtc3R5bGUgZGlzcGF0Y2hcbiAgdmFyIHJlZiA9IHVuaWZ5T2JqZWN0U3R5bGUoX3R5cGUsIF9wYXlsb2FkKTtcbiAgICB2YXIgdHlwZSA9IHJlZi50eXBlO1xuICAgIHZhciBwYXlsb2FkID0gcmVmLnBheWxvYWQ7XG5cbiAgdmFyIGFjdGlvbiA9IHsgdHlwZTogdHlwZSwgcGF5bG9hZDogcGF5bG9hZCB9O1xuICB2YXIgZW50cnkgPSB0aGlzLl9hY3Rpb25zW3R5cGVdO1xuICBpZiAoIWVudHJ5KSB7XG4gICAgaWYgKFwicHJvZHVjdGlvblwiICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoKFwiW3Z1ZXhdIHVua25vd24gYWN0aW9uIHR5cGU6IFwiICsgdHlwZSkpO1xuICAgIH1cbiAgICByZXR1cm5cbiAgfVxuXG4gIHRyeSB7XG4gICAgdGhpcy5fYWN0aW9uU3Vic2NyaWJlcnNcbiAgICAgIC5maWx0ZXIoZnVuY3Rpb24gKHN1YikgeyByZXR1cm4gc3ViLmJlZm9yZTsgfSlcbiAgICAgIC5mb3JFYWNoKGZ1bmN0aW9uIChzdWIpIHsgcmV0dXJuIHN1Yi5iZWZvcmUoYWN0aW9uLCB0aGlzJDEuc3RhdGUpOyB9KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGlmIChcInByb2R1Y3Rpb25cIiAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBjb25zb2xlLndhcm4oXCJbdnVleF0gZXJyb3IgaW4gYmVmb3JlIGFjdGlvbiBzdWJzY3JpYmVyczogXCIpO1xuICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICB9XG4gIH1cblxuICB2YXIgcmVzdWx0ID0gZW50cnkubGVuZ3RoID4gMVxuICAgID8gUHJvbWlzZS5hbGwoZW50cnkubWFwKGZ1bmN0aW9uIChoYW5kbGVyKSB7IHJldHVybiBoYW5kbGVyKHBheWxvYWQpOyB9KSlcbiAgICA6IGVudHJ5WzBdKHBheWxvYWQpO1xuXG4gIHJldHVybiByZXN1bHQudGhlbihmdW5jdGlvbiAocmVzKSB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMkMS5fYWN0aW9uU3Vic2NyaWJlcnNcbiAgICAgICAgLmZpbHRlcihmdW5jdGlvbiAoc3ViKSB7IHJldHVybiBzdWIuYWZ0ZXI7IH0pXG4gICAgICAgIC5mb3JFYWNoKGZ1bmN0aW9uIChzdWIpIHsgcmV0dXJuIHN1Yi5hZnRlcihhY3Rpb24sIHRoaXMkMS5zdGF0ZSk7IH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGlmIChcInByb2R1Y3Rpb25cIiAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcIlt2dWV4XSBlcnJvciBpbiBhZnRlciBhY3Rpb24gc3Vic2NyaWJlcnM6IFwiKTtcbiAgICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc1xuICB9KVxufTtcblxuU3RvcmUucHJvdG90eXBlLnN1YnNjcmliZSA9IGZ1bmN0aW9uIHN1YnNjcmliZSAoZm4pIHtcbiAgcmV0dXJuIGdlbmVyaWNTdWJzY3JpYmUoZm4sIHRoaXMuX3N1YnNjcmliZXJzKVxufTtcblxuU3RvcmUucHJvdG90eXBlLnN1YnNjcmliZUFjdGlvbiA9IGZ1bmN0aW9uIHN1YnNjcmliZUFjdGlvbiAoZm4pIHtcbiAgdmFyIHN1YnMgPSB0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicgPyB7IGJlZm9yZTogZm4gfSA6IGZuO1xuICByZXR1cm4gZ2VuZXJpY1N1YnNjcmliZShzdWJzLCB0aGlzLl9hY3Rpb25TdWJzY3JpYmVycylcbn07XG5cblN0b3JlLnByb3RvdHlwZS53YXRjaCA9IGZ1bmN0aW9uIHdhdGNoIChnZXR0ZXIsIGNiLCBvcHRpb25zKSB7XG4gICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgaWYgKFwicHJvZHVjdGlvblwiICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBhc3NlcnQodHlwZW9mIGdldHRlciA9PT0gJ2Z1bmN0aW9uJywgXCJzdG9yZS53YXRjaCBvbmx5IGFjY2VwdHMgYSBmdW5jdGlvbi5cIik7XG4gIH1cbiAgcmV0dXJuIHRoaXMuX3dhdGNoZXJWTS4kd2F0Y2goZnVuY3Rpb24gKCkgeyByZXR1cm4gZ2V0dGVyKHRoaXMkMS5zdGF0ZSwgdGhpcyQxLmdldHRlcnMpOyB9LCBjYiwgb3B0aW9ucylcbn07XG5cblN0b3JlLnByb3RvdHlwZS5yZXBsYWNlU3RhdGUgPSBmdW5jdGlvbiByZXBsYWNlU3RhdGUgKHN0YXRlKSB7XG4gICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgdGhpcy5fd2l0aENvbW1pdChmdW5jdGlvbiAoKSB7XG4gICAgdGhpcyQxLl92bS5fZGF0YS4kJHN0YXRlID0gc3RhdGU7XG4gIH0pO1xufTtcblxuU3RvcmUucHJvdG90eXBlLnJlZ2lzdGVyTW9kdWxlID0gZnVuY3Rpb24gcmVnaXN0ZXJNb2R1bGUgKHBhdGgsIHJhd01vZHVsZSwgb3B0aW9ucykge1xuICAgIGlmICggb3B0aW9ucyA9PT0gdm9pZCAwICkgb3B0aW9ucyA9IHt9O1xuXG4gIGlmICh0eXBlb2YgcGF0aCA9PT0gJ3N0cmluZycpIHsgcGF0aCA9IFtwYXRoXTsgfVxuXG4gIGlmIChcInByb2R1Y3Rpb25cIiAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgYXNzZXJ0KEFycmF5LmlzQXJyYXkocGF0aCksIFwibW9kdWxlIHBhdGggbXVzdCBiZSBhIHN0cmluZyBvciBhbiBBcnJheS5cIik7XG4gICAgYXNzZXJ0KHBhdGgubGVuZ3RoID4gMCwgJ2Nhbm5vdCByZWdpc3RlciB0aGUgcm9vdCBtb2R1bGUgYnkgdXNpbmcgcmVnaXN0ZXJNb2R1bGUuJyk7XG4gIH1cblxuICB0aGlzLl9tb2R1bGVzLnJlZ2lzdGVyKHBhdGgsIHJhd01vZHVsZSk7XG4gIGluc3RhbGxNb2R1bGUodGhpcywgdGhpcy5zdGF0ZSwgcGF0aCwgdGhpcy5fbW9kdWxlcy5nZXQocGF0aCksIG9wdGlvbnMucHJlc2VydmVTdGF0ZSk7XG4gIC8vIHJlc2V0IHN0b3JlIHRvIHVwZGF0ZSBnZXR0ZXJzLi4uXG4gIHJlc2V0U3RvcmVWTSh0aGlzLCB0aGlzLnN0YXRlKTtcbn07XG5cblN0b3JlLnByb3RvdHlwZS51bnJlZ2lzdGVyTW9kdWxlID0gZnVuY3Rpb24gdW5yZWdpc3Rlck1vZHVsZSAocGF0aCkge1xuICAgIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gIGlmICh0eXBlb2YgcGF0aCA9PT0gJ3N0cmluZycpIHsgcGF0aCA9IFtwYXRoXTsgfVxuXG4gIGlmIChcInByb2R1Y3Rpb25cIiAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgYXNzZXJ0KEFycmF5LmlzQXJyYXkocGF0aCksIFwibW9kdWxlIHBhdGggbXVzdCBiZSBhIHN0cmluZyBvciBhbiBBcnJheS5cIik7XG4gIH1cblxuICB0aGlzLl9tb2R1bGVzLnVucmVnaXN0ZXIocGF0aCk7XG4gIHRoaXMuX3dpdGhDb21taXQoZnVuY3Rpb24gKCkge1xuICAgIHZhciBwYXJlbnRTdGF0ZSA9IGdldE5lc3RlZFN0YXRlKHRoaXMkMS5zdGF0ZSwgcGF0aC5zbGljZSgwLCAtMSkpO1xuICAgIFZ1ZS5kZWxldGUocGFyZW50U3RhdGUsIHBhdGhbcGF0aC5sZW5ndGggLSAxXSk7XG4gIH0pO1xuICByZXNldFN0b3JlKHRoaXMpO1xufTtcblxuU3RvcmUucHJvdG90eXBlLmhvdFVwZGF0ZSA9IGZ1bmN0aW9uIGhvdFVwZGF0ZSAobmV3T3B0aW9ucykge1xuICB0aGlzLl9tb2R1bGVzLnVwZGF0ZShuZXdPcHRpb25zKTtcbiAgcmVzZXRTdG9yZSh0aGlzLCB0cnVlKTtcbn07XG5cblN0b3JlLnByb3RvdHlwZS5fd2l0aENvbW1pdCA9IGZ1bmN0aW9uIF93aXRoQ29tbWl0IChmbikge1xuICB2YXIgY29tbWl0dGluZyA9IHRoaXMuX2NvbW1pdHRpbmc7XG4gIHRoaXMuX2NvbW1pdHRpbmcgPSB0cnVlO1xuICBmbigpO1xuICB0aGlzLl9jb21taXR0aW5nID0gY29tbWl0dGluZztcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKCBTdG9yZS5wcm90b3R5cGUsIHByb3RvdHlwZUFjY2Vzc29ycyQxICk7XG5cbmZ1bmN0aW9uIGdlbmVyaWNTdWJzY3JpYmUgKGZuLCBzdWJzKSB7XG4gIGlmIChzdWJzLmluZGV4T2YoZm4pIDwgMCkge1xuICAgIHN1YnMucHVzaChmbik7XG4gIH1cbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgaSA9IHN1YnMuaW5kZXhPZihmbik7XG4gICAgaWYgKGkgPiAtMSkge1xuICAgICAgc3Vicy5zcGxpY2UoaSwgMSk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHJlc2V0U3RvcmUgKHN0b3JlLCBob3QpIHtcbiAgc3RvcmUuX2FjdGlvbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICBzdG9yZS5fbXV0YXRpb25zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgc3RvcmUuX3dyYXBwZWRHZXR0ZXJzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgc3RvcmUuX21vZHVsZXNOYW1lc3BhY2VNYXAgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICB2YXIgc3RhdGUgPSBzdG9yZS5zdGF0ZTtcbiAgLy8gaW5pdCBhbGwgbW9kdWxlc1xuICBpbnN0YWxsTW9kdWxlKHN0b3JlLCBzdGF0ZSwgW10sIHN0b3JlLl9tb2R1bGVzLnJvb3QsIHRydWUpO1xuICAvLyByZXNldCB2bVxuICByZXNldFN0b3JlVk0oc3RvcmUsIHN0YXRlLCBob3QpO1xufVxuXG5mdW5jdGlvbiByZXNldFN0b3JlVk0gKHN0b3JlLCBzdGF0ZSwgaG90KSB7XG4gIHZhciBvbGRWbSA9IHN0b3JlLl92bTtcblxuICAvLyBiaW5kIHN0b3JlIHB1YmxpYyBnZXR0ZXJzXG4gIHN0b3JlLmdldHRlcnMgPSB7fTtcbiAgLy8gcmVzZXQgbG9jYWwgZ2V0dGVycyBjYWNoZVxuICBzdG9yZS5fbWFrZUxvY2FsR2V0dGVyc0NhY2hlID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgdmFyIHdyYXBwZWRHZXR0ZXJzID0gc3RvcmUuX3dyYXBwZWRHZXR0ZXJzO1xuICB2YXIgY29tcHV0ZWQgPSB7fTtcbiAgZm9yRWFjaFZhbHVlKHdyYXBwZWRHZXR0ZXJzLCBmdW5jdGlvbiAoZm4sIGtleSkge1xuICAgIC8vIHVzZSBjb21wdXRlZCB0byBsZXZlcmFnZSBpdHMgbGF6eS1jYWNoaW5nIG1lY2hhbmlzbVxuICAgIC8vIGRpcmVjdCBpbmxpbmUgZnVuY3Rpb24gdXNlIHdpbGwgbGVhZCB0byBjbG9zdXJlIHByZXNlcnZpbmcgb2xkVm0uXG4gICAgLy8gdXNpbmcgcGFydGlhbCB0byByZXR1cm4gZnVuY3Rpb24gd2l0aCBvbmx5IGFyZ3VtZW50cyBwcmVzZXJ2ZWQgaW4gY2xvc3VyZSBlbnZpcm9ubWVudC5cbiAgICBjb21wdXRlZFtrZXldID0gcGFydGlhbChmbiwgc3RvcmUpO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzdG9yZS5nZXR0ZXJzLCBrZXksIHtcbiAgICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc3RvcmUuX3ZtW2tleV07IH0sXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlIC8vIGZvciBsb2NhbCBnZXR0ZXJzXG4gICAgfSk7XG4gIH0pO1xuXG4gIC8vIHVzZSBhIFZ1ZSBpbnN0YW5jZSB0byBzdG9yZSB0aGUgc3RhdGUgdHJlZVxuICAvLyBzdXBwcmVzcyB3YXJuaW5ncyBqdXN0IGluIGNhc2UgdGhlIHVzZXIgaGFzIGFkZGVkXG4gIC8vIHNvbWUgZnVua3kgZ2xvYmFsIG1peGluc1xuICB2YXIgc2lsZW50ID0gVnVlLmNvbmZpZy5zaWxlbnQ7XG4gIFZ1ZS5jb25maWcuc2lsZW50ID0gdHJ1ZTtcbiAgc3RvcmUuX3ZtID0gbmV3IFZ1ZSh7XG4gICAgZGF0YToge1xuICAgICAgJCRzdGF0ZTogc3RhdGVcbiAgICB9LFxuICAgIGNvbXB1dGVkOiBjb21wdXRlZFxuICB9KTtcbiAgVnVlLmNvbmZpZy5zaWxlbnQgPSBzaWxlbnQ7XG5cbiAgLy8gZW5hYmxlIHN0cmljdCBtb2RlIGZvciBuZXcgdm1cbiAgaWYgKHN0b3JlLnN0cmljdCkge1xuICAgIGVuYWJsZVN0cmljdE1vZGUoc3RvcmUpO1xuICB9XG5cbiAgaWYgKG9sZFZtKSB7XG4gICAgaWYgKGhvdCkge1xuICAgICAgLy8gZGlzcGF0Y2ggY2hhbmdlcyBpbiBhbGwgc3Vic2NyaWJlZCB3YXRjaGVyc1xuICAgICAgLy8gdG8gZm9yY2UgZ2V0dGVyIHJlLWV2YWx1YXRpb24gZm9yIGhvdCByZWxvYWRpbmcuXG4gICAgICBzdG9yZS5fd2l0aENvbW1pdChmdW5jdGlvbiAoKSB7XG4gICAgICAgIG9sZFZtLl9kYXRhLiQkc3RhdGUgPSBudWxsO1xuICAgICAgfSk7XG4gICAgfVxuICAgIFZ1ZS5uZXh0VGljayhmdW5jdGlvbiAoKSB7IHJldHVybiBvbGRWbS4kZGVzdHJveSgpOyB9KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpbnN0YWxsTW9kdWxlIChzdG9yZSwgcm9vdFN0YXRlLCBwYXRoLCBtb2R1bGUsIGhvdCkge1xuICB2YXIgaXNSb290ID0gIXBhdGgubGVuZ3RoO1xuICB2YXIgbmFtZXNwYWNlID0gc3RvcmUuX21vZHVsZXMuZ2V0TmFtZXNwYWNlKHBhdGgpO1xuXG4gIC8vIHJlZ2lzdGVyIGluIG5hbWVzcGFjZSBtYXBcbiAgaWYgKG1vZHVsZS5uYW1lc3BhY2VkKSB7XG4gICAgaWYgKHN0b3JlLl9tb2R1bGVzTmFtZXNwYWNlTWFwW25hbWVzcGFjZV0gJiYgXCJwcm9kdWN0aW9uXCIgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgY29uc29sZS5lcnJvcigoXCJbdnVleF0gZHVwbGljYXRlIG5hbWVzcGFjZSBcIiArIG5hbWVzcGFjZSArIFwiIGZvciB0aGUgbmFtZXNwYWNlZCBtb2R1bGUgXCIgKyAocGF0aC5qb2luKCcvJykpKSk7XG4gICAgfVxuICAgIHN0b3JlLl9tb2R1bGVzTmFtZXNwYWNlTWFwW25hbWVzcGFjZV0gPSBtb2R1bGU7XG4gIH1cblxuICAvLyBzZXQgc3RhdGVcbiAgaWYgKCFpc1Jvb3QgJiYgIWhvdCkge1xuICAgIHZhciBwYXJlbnRTdGF0ZSA9IGdldE5lc3RlZFN0YXRlKHJvb3RTdGF0ZSwgcGF0aC5zbGljZSgwLCAtMSkpO1xuICAgIHZhciBtb2R1bGVOYW1lID0gcGF0aFtwYXRoLmxlbmd0aCAtIDFdO1xuICAgIHN0b3JlLl93aXRoQ29tbWl0KGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmIChcInByb2R1Y3Rpb25cIiAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIGlmIChtb2R1bGVOYW1lIGluIHBhcmVudFN0YXRlKSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgKFwiW3Z1ZXhdIHN0YXRlIGZpZWxkIFxcXCJcIiArIG1vZHVsZU5hbWUgKyBcIlxcXCIgd2FzIG92ZXJyaWRkZW4gYnkgYSBtb2R1bGUgd2l0aCB0aGUgc2FtZSBuYW1lIGF0IFxcXCJcIiArIChwYXRoLmpvaW4oJy4nKSkgKyBcIlxcXCJcIilcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBWdWUuc2V0KHBhcmVudFN0YXRlLCBtb2R1bGVOYW1lLCBtb2R1bGUuc3RhdGUpO1xuICAgIH0pO1xuICB9XG5cbiAgdmFyIGxvY2FsID0gbW9kdWxlLmNvbnRleHQgPSBtYWtlTG9jYWxDb250ZXh0KHN0b3JlLCBuYW1lc3BhY2UsIHBhdGgpO1xuXG4gIG1vZHVsZS5mb3JFYWNoTXV0YXRpb24oZnVuY3Rpb24gKG11dGF0aW9uLCBrZXkpIHtcbiAgICB2YXIgbmFtZXNwYWNlZFR5cGUgPSBuYW1lc3BhY2UgKyBrZXk7XG4gICAgcmVnaXN0ZXJNdXRhdGlvbihzdG9yZSwgbmFtZXNwYWNlZFR5cGUsIG11dGF0aW9uLCBsb2NhbCk7XG4gIH0pO1xuXG4gIG1vZHVsZS5mb3JFYWNoQWN0aW9uKGZ1bmN0aW9uIChhY3Rpb24sIGtleSkge1xuICAgIHZhciB0eXBlID0gYWN0aW9uLnJvb3QgPyBrZXkgOiBuYW1lc3BhY2UgKyBrZXk7XG4gICAgdmFyIGhhbmRsZXIgPSBhY3Rpb24uaGFuZGxlciB8fCBhY3Rpb247XG4gICAgcmVnaXN0ZXJBY3Rpb24oc3RvcmUsIHR5cGUsIGhhbmRsZXIsIGxvY2FsKTtcbiAgfSk7XG5cbiAgbW9kdWxlLmZvckVhY2hHZXR0ZXIoZnVuY3Rpb24gKGdldHRlciwga2V5KSB7XG4gICAgdmFyIG5hbWVzcGFjZWRUeXBlID0gbmFtZXNwYWNlICsga2V5O1xuICAgIHJlZ2lzdGVyR2V0dGVyKHN0b3JlLCBuYW1lc3BhY2VkVHlwZSwgZ2V0dGVyLCBsb2NhbCk7XG4gIH0pO1xuXG4gIG1vZHVsZS5mb3JFYWNoQ2hpbGQoZnVuY3Rpb24gKGNoaWxkLCBrZXkpIHtcbiAgICBpbnN0YWxsTW9kdWxlKHN0b3JlLCByb290U3RhdGUsIHBhdGguY29uY2F0KGtleSksIGNoaWxkLCBob3QpO1xuICB9KTtcbn1cblxuLyoqXG4gKiBtYWtlIGxvY2FsaXplZCBkaXNwYXRjaCwgY29tbWl0LCBnZXR0ZXJzIGFuZCBzdGF0ZVxuICogaWYgdGhlcmUgaXMgbm8gbmFtZXNwYWNlLCBqdXN0IHVzZSByb290IG9uZXNcbiAqL1xuZnVuY3Rpb24gbWFrZUxvY2FsQ29udGV4dCAoc3RvcmUsIG5hbWVzcGFjZSwgcGF0aCkge1xuICB2YXIgbm9OYW1lc3BhY2UgPSBuYW1lc3BhY2UgPT09ICcnO1xuXG4gIHZhciBsb2NhbCA9IHtcbiAgICBkaXNwYXRjaDogbm9OYW1lc3BhY2UgPyBzdG9yZS5kaXNwYXRjaCA6IGZ1bmN0aW9uIChfdHlwZSwgX3BheWxvYWQsIF9vcHRpb25zKSB7XG4gICAgICB2YXIgYXJncyA9IHVuaWZ5T2JqZWN0U3R5bGUoX3R5cGUsIF9wYXlsb2FkLCBfb3B0aW9ucyk7XG4gICAgICB2YXIgcGF5bG9hZCA9IGFyZ3MucGF5bG9hZDtcbiAgICAgIHZhciBvcHRpb25zID0gYXJncy5vcHRpb25zO1xuICAgICAgdmFyIHR5cGUgPSBhcmdzLnR5cGU7XG5cbiAgICAgIGlmICghb3B0aW9ucyB8fCAhb3B0aW9ucy5yb290KSB7XG4gICAgICAgIHR5cGUgPSBuYW1lc3BhY2UgKyB0eXBlO1xuICAgICAgICBpZiAoXCJwcm9kdWN0aW9uXCIgIT09ICdwcm9kdWN0aW9uJyAmJiAhc3RvcmUuX2FjdGlvbnNbdHlwZV0pIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKChcIlt2dWV4XSB1bmtub3duIGxvY2FsIGFjdGlvbiB0eXBlOiBcIiArIChhcmdzLnR5cGUpICsgXCIsIGdsb2JhbCB0eXBlOiBcIiArIHR5cGUpKTtcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gc3RvcmUuZGlzcGF0Y2godHlwZSwgcGF5bG9hZClcbiAgICB9LFxuXG4gICAgY29tbWl0OiBub05hbWVzcGFjZSA/IHN0b3JlLmNvbW1pdCA6IGZ1bmN0aW9uIChfdHlwZSwgX3BheWxvYWQsIF9vcHRpb25zKSB7XG4gICAgICB2YXIgYXJncyA9IHVuaWZ5T2JqZWN0U3R5bGUoX3R5cGUsIF9wYXlsb2FkLCBfb3B0aW9ucyk7XG4gICAgICB2YXIgcGF5bG9hZCA9IGFyZ3MucGF5bG9hZDtcbiAgICAgIHZhciBvcHRpb25zID0gYXJncy5vcHRpb25zO1xuICAgICAgdmFyIHR5cGUgPSBhcmdzLnR5cGU7XG5cbiAgICAgIGlmICghb3B0aW9ucyB8fCAhb3B0aW9ucy5yb290KSB7XG4gICAgICAgIHR5cGUgPSBuYW1lc3BhY2UgKyB0eXBlO1xuICAgICAgICBpZiAoXCJwcm9kdWN0aW9uXCIgIT09ICdwcm9kdWN0aW9uJyAmJiAhc3RvcmUuX211dGF0aW9uc1t0eXBlXSkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoKFwiW3Z1ZXhdIHVua25vd24gbG9jYWwgbXV0YXRpb24gdHlwZTogXCIgKyAoYXJncy50eXBlKSArIFwiLCBnbG9iYWwgdHlwZTogXCIgKyB0eXBlKSk7XG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgc3RvcmUuY29tbWl0KHR5cGUsIHBheWxvYWQsIG9wdGlvbnMpO1xuICAgIH1cbiAgfTtcblxuICAvLyBnZXR0ZXJzIGFuZCBzdGF0ZSBvYmplY3QgbXVzdCBiZSBnb3R0ZW4gbGF6aWx5XG4gIC8vIGJlY2F1c2UgdGhleSB3aWxsIGJlIGNoYW5nZWQgYnkgdm0gdXBkYXRlXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGxvY2FsLCB7XG4gICAgZ2V0dGVyczoge1xuICAgICAgZ2V0OiBub05hbWVzcGFjZVxuICAgICAgICA/IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHN0b3JlLmdldHRlcnM7IH1cbiAgICAgICAgOiBmdW5jdGlvbiAoKSB7IHJldHVybiBtYWtlTG9jYWxHZXR0ZXJzKHN0b3JlLCBuYW1lc3BhY2UpOyB9XG4gICAgfSxcbiAgICBzdGF0ZToge1xuICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBnZXROZXN0ZWRTdGF0ZShzdG9yZS5zdGF0ZSwgcGF0aCk7IH1cbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBsb2NhbFxufVxuXG5mdW5jdGlvbiBtYWtlTG9jYWxHZXR0ZXJzIChzdG9yZSwgbmFtZXNwYWNlKSB7XG4gIGlmICghc3RvcmUuX21ha2VMb2NhbEdldHRlcnNDYWNoZVtuYW1lc3BhY2VdKSB7XG4gICAgdmFyIGdldHRlcnNQcm94eSA9IHt9O1xuICAgIHZhciBzcGxpdFBvcyA9IG5hbWVzcGFjZS5sZW5ndGg7XG4gICAgT2JqZWN0LmtleXMoc3RvcmUuZ2V0dGVycykuZm9yRWFjaChmdW5jdGlvbiAodHlwZSkge1xuICAgICAgLy8gc2tpcCBpZiB0aGUgdGFyZ2V0IGdldHRlciBpcyBub3QgbWF0Y2ggdGhpcyBuYW1lc3BhY2VcbiAgICAgIGlmICh0eXBlLnNsaWNlKDAsIHNwbGl0UG9zKSAhPT0gbmFtZXNwYWNlKSB7IHJldHVybiB9XG5cbiAgICAgIC8vIGV4dHJhY3QgbG9jYWwgZ2V0dGVyIHR5cGVcbiAgICAgIHZhciBsb2NhbFR5cGUgPSB0eXBlLnNsaWNlKHNwbGl0UG9zKTtcblxuICAgICAgLy8gQWRkIGEgcG9ydCB0byB0aGUgZ2V0dGVycyBwcm94eS5cbiAgICAgIC8vIERlZmluZSBhcyBnZXR0ZXIgcHJvcGVydHkgYmVjYXVzZVxuICAgICAgLy8gd2UgZG8gbm90IHdhbnQgdG8gZXZhbHVhdGUgdGhlIGdldHRlcnMgaW4gdGhpcyB0aW1lLlxuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGdldHRlcnNQcm94eSwgbG9jYWxUeXBlLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc3RvcmUuZ2V0dGVyc1t0eXBlXTsgfSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZVxuICAgICAgfSk7XG4gICAgfSk7XG4gICAgc3RvcmUuX21ha2VMb2NhbEdldHRlcnNDYWNoZVtuYW1lc3BhY2VdID0gZ2V0dGVyc1Byb3h5O1xuICB9XG5cbiAgcmV0dXJuIHN0b3JlLl9tYWtlTG9jYWxHZXR0ZXJzQ2FjaGVbbmFtZXNwYWNlXVxufVxuXG5mdW5jdGlvbiByZWdpc3Rlck11dGF0aW9uIChzdG9yZSwgdHlwZSwgaGFuZGxlciwgbG9jYWwpIHtcbiAgdmFyIGVudHJ5ID0gc3RvcmUuX211dGF0aW9uc1t0eXBlXSB8fCAoc3RvcmUuX211dGF0aW9uc1t0eXBlXSA9IFtdKTtcbiAgZW50cnkucHVzaChmdW5jdGlvbiB3cmFwcGVkTXV0YXRpb25IYW5kbGVyIChwYXlsb2FkKSB7XG4gICAgaGFuZGxlci5jYWxsKHN0b3JlLCBsb2NhbC5zdGF0ZSwgcGF5bG9hZCk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiByZWdpc3RlckFjdGlvbiAoc3RvcmUsIHR5cGUsIGhhbmRsZXIsIGxvY2FsKSB7XG4gIHZhciBlbnRyeSA9IHN0b3JlLl9hY3Rpb25zW3R5cGVdIHx8IChzdG9yZS5fYWN0aW9uc1t0eXBlXSA9IFtdKTtcbiAgZW50cnkucHVzaChmdW5jdGlvbiB3cmFwcGVkQWN0aW9uSGFuZGxlciAocGF5bG9hZCkge1xuICAgIHZhciByZXMgPSBoYW5kbGVyLmNhbGwoc3RvcmUsIHtcbiAgICAgIGRpc3BhdGNoOiBsb2NhbC5kaXNwYXRjaCxcbiAgICAgIGNvbW1pdDogbG9jYWwuY29tbWl0LFxuICAgICAgZ2V0dGVyczogbG9jYWwuZ2V0dGVycyxcbiAgICAgIHN0YXRlOiBsb2NhbC5zdGF0ZSxcbiAgICAgIHJvb3RHZXR0ZXJzOiBzdG9yZS5nZXR0ZXJzLFxuICAgICAgcm9vdFN0YXRlOiBzdG9yZS5zdGF0ZVxuICAgIH0sIHBheWxvYWQpO1xuICAgIGlmICghaXNQcm9taXNlKHJlcykpIHtcbiAgICAgIHJlcyA9IFByb21pc2UucmVzb2x2ZShyZXMpO1xuICAgIH1cbiAgICBpZiAoc3RvcmUuX2RldnRvb2xIb29rKSB7XG4gICAgICByZXR1cm4gcmVzLmNhdGNoKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgc3RvcmUuX2RldnRvb2xIb29rLmVtaXQoJ3Z1ZXg6ZXJyb3InLCBlcnIpO1xuICAgICAgICB0aHJvdyBlcnJcbiAgICAgIH0pXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiByZXNcbiAgICB9XG4gIH0pO1xufVxuXG5mdW5jdGlvbiByZWdpc3RlckdldHRlciAoc3RvcmUsIHR5cGUsIHJhd0dldHRlciwgbG9jYWwpIHtcbiAgaWYgKHN0b3JlLl93cmFwcGVkR2V0dGVyc1t0eXBlXSkge1xuICAgIGlmIChcInByb2R1Y3Rpb25cIiAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBjb25zb2xlLmVycm9yKChcIlt2dWV4XSBkdXBsaWNhdGUgZ2V0dGVyIGtleTogXCIgKyB0eXBlKSk7XG4gICAgfVxuICAgIHJldHVyblxuICB9XG4gIHN0b3JlLl93cmFwcGVkR2V0dGVyc1t0eXBlXSA9IGZ1bmN0aW9uIHdyYXBwZWRHZXR0ZXIgKHN0b3JlKSB7XG4gICAgcmV0dXJuIHJhd0dldHRlcihcbiAgICAgIGxvY2FsLnN0YXRlLCAvLyBsb2NhbCBzdGF0ZVxuICAgICAgbG9jYWwuZ2V0dGVycywgLy8gbG9jYWwgZ2V0dGVyc1xuICAgICAgc3RvcmUuc3RhdGUsIC8vIHJvb3Qgc3RhdGVcbiAgICAgIHN0b3JlLmdldHRlcnMgLy8gcm9vdCBnZXR0ZXJzXG4gICAgKVxuICB9O1xufVxuXG5mdW5jdGlvbiBlbmFibGVTdHJpY3RNb2RlIChzdG9yZSkge1xuICBzdG9yZS5fdm0uJHdhdGNoKGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMuX2RhdGEuJCRzdGF0ZSB9LCBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKFwicHJvZHVjdGlvblwiICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGFzc2VydChzdG9yZS5fY29tbWl0dGluZywgXCJkbyBub3QgbXV0YXRlIHZ1ZXggc3RvcmUgc3RhdGUgb3V0c2lkZSBtdXRhdGlvbiBoYW5kbGVycy5cIik7XG4gICAgfVxuICB9LCB7IGRlZXA6IHRydWUsIHN5bmM6IHRydWUgfSk7XG59XG5cbmZ1bmN0aW9uIGdldE5lc3RlZFN0YXRlIChzdGF0ZSwgcGF0aCkge1xuICByZXR1cm4gcGF0aC5sZW5ndGhcbiAgICA/IHBhdGgucmVkdWNlKGZ1bmN0aW9uIChzdGF0ZSwga2V5KSB7IHJldHVybiBzdGF0ZVtrZXldOyB9LCBzdGF0ZSlcbiAgICA6IHN0YXRlXG59XG5cbmZ1bmN0aW9uIHVuaWZ5T2JqZWN0U3R5bGUgKHR5cGUsIHBheWxvYWQsIG9wdGlvbnMpIHtcbiAgaWYgKGlzT2JqZWN0KHR5cGUpICYmIHR5cGUudHlwZSkge1xuICAgIG9wdGlvbnMgPSBwYXlsb2FkO1xuICAgIHBheWxvYWQgPSB0eXBlO1xuICAgIHR5cGUgPSB0eXBlLnR5cGU7XG4gIH1cblxuICBpZiAoXCJwcm9kdWN0aW9uXCIgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGFzc2VydCh0eXBlb2YgdHlwZSA9PT0gJ3N0cmluZycsIChcImV4cGVjdHMgc3RyaW5nIGFzIHRoZSB0eXBlLCBidXQgZm91bmQgXCIgKyAodHlwZW9mIHR5cGUpICsgXCIuXCIpKTtcbiAgfVxuXG4gIHJldHVybiB7IHR5cGU6IHR5cGUsIHBheWxvYWQ6IHBheWxvYWQsIG9wdGlvbnM6IG9wdGlvbnMgfVxufVxuXG5mdW5jdGlvbiBpbnN0YWxsIChfVnVlKSB7XG4gIGlmIChWdWUgJiYgX1Z1ZSA9PT0gVnVlKSB7XG4gICAgaWYgKFwicHJvZHVjdGlvblwiICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICdbdnVleF0gYWxyZWFkeSBpbnN0YWxsZWQuIFZ1ZS51c2UoVnVleCkgc2hvdWxkIGJlIGNhbGxlZCBvbmx5IG9uY2UuJ1xuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuXG4gIH1cbiAgVnVlID0gX1Z1ZTtcbiAgYXBwbHlNaXhpbihWdWUpO1xufVxuXG4vKipcbiAqIFJlZHVjZSB0aGUgY29kZSB3aGljaCB3cml0dGVuIGluIFZ1ZS5qcyBmb3IgZ2V0dGluZyB0aGUgc3RhdGUuXG4gKiBAcGFyYW0ge1N0cmluZ30gW25hbWVzcGFjZV0gLSBNb2R1bGUncyBuYW1lc3BhY2VcbiAqIEBwYXJhbSB7T2JqZWN0fEFycmF5fSBzdGF0ZXMgIyBPYmplY3QncyBpdGVtIGNhbiBiZSBhIGZ1bmN0aW9uIHdoaWNoIGFjY2VwdCBzdGF0ZSBhbmQgZ2V0dGVycyBmb3IgcGFyYW0sIHlvdSBjYW4gZG8gc29tZXRoaW5nIGZvciBzdGF0ZSBhbmQgZ2V0dGVycyBpbiBpdC5cbiAqIEBwYXJhbSB7T2JqZWN0fVxuICovXG52YXIgbWFwU3RhdGUgPSBub3JtYWxpemVOYW1lc3BhY2UoZnVuY3Rpb24gKG5hbWVzcGFjZSwgc3RhdGVzKSB7XG4gIHZhciByZXMgPSB7fTtcbiAgaWYgKFwicHJvZHVjdGlvblwiICE9PSAncHJvZHVjdGlvbicgJiYgIWlzVmFsaWRNYXAoc3RhdGVzKSkge1xuICAgIGNvbnNvbGUuZXJyb3IoJ1t2dWV4XSBtYXBTdGF0ZTogbWFwcGVyIHBhcmFtZXRlciBtdXN0IGJlIGVpdGhlciBhbiBBcnJheSBvciBhbiBPYmplY3QnKTtcbiAgfVxuICBub3JtYWxpemVNYXAoc3RhdGVzKS5mb3JFYWNoKGZ1bmN0aW9uIChyZWYpIHtcbiAgICB2YXIga2V5ID0gcmVmLmtleTtcbiAgICB2YXIgdmFsID0gcmVmLnZhbDtcblxuICAgIHJlc1trZXldID0gZnVuY3Rpb24gbWFwcGVkU3RhdGUgKCkge1xuICAgICAgdmFyIHN0YXRlID0gdGhpcy4kc3RvcmUuc3RhdGU7XG4gICAgICB2YXIgZ2V0dGVycyA9IHRoaXMuJHN0b3JlLmdldHRlcnM7XG4gICAgICBpZiAobmFtZXNwYWNlKSB7XG4gICAgICAgIHZhciBtb2R1bGUgPSBnZXRNb2R1bGVCeU5hbWVzcGFjZSh0aGlzLiRzdG9yZSwgJ21hcFN0YXRlJywgbmFtZXNwYWNlKTtcbiAgICAgICAgaWYgKCFtb2R1bGUpIHtcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgICBzdGF0ZSA9IG1vZHVsZS5jb250ZXh0LnN0YXRlO1xuICAgICAgICBnZXR0ZXJzID0gbW9kdWxlLmNvbnRleHQuZ2V0dGVycztcbiAgICAgIH1cbiAgICAgIHJldHVybiB0eXBlb2YgdmFsID09PSAnZnVuY3Rpb24nXG4gICAgICAgID8gdmFsLmNhbGwodGhpcywgc3RhdGUsIGdldHRlcnMpXG4gICAgICAgIDogc3RhdGVbdmFsXVxuICAgIH07XG4gICAgLy8gbWFyayB2dWV4IGdldHRlciBmb3IgZGV2dG9vbHNcbiAgICByZXNba2V5XS52dWV4ID0gdHJ1ZTtcbiAgfSk7XG4gIHJldHVybiByZXNcbn0pO1xuXG4vKipcbiAqIFJlZHVjZSB0aGUgY29kZSB3aGljaCB3cml0dGVuIGluIFZ1ZS5qcyBmb3IgY29tbWl0dGluZyB0aGUgbXV0YXRpb25cbiAqIEBwYXJhbSB7U3RyaW5nfSBbbmFtZXNwYWNlXSAtIE1vZHVsZSdzIG5hbWVzcGFjZVxuICogQHBhcmFtIHtPYmplY3R8QXJyYXl9IG11dGF0aW9ucyAjIE9iamVjdCdzIGl0ZW0gY2FuIGJlIGEgZnVuY3Rpb24gd2hpY2ggYWNjZXB0IGBjb21taXRgIGZ1bmN0aW9uIGFzIHRoZSBmaXJzdCBwYXJhbSwgaXQgY2FuIGFjY2VwdCBhbnRob3IgcGFyYW1zLiBZb3UgY2FuIGNvbW1pdCBtdXRhdGlvbiBhbmQgZG8gYW55IG90aGVyIHRoaW5ncyBpbiB0aGlzIGZ1bmN0aW9uLiBzcGVjaWFsbHksIFlvdSBuZWVkIHRvIHBhc3MgYW50aG9yIHBhcmFtcyBmcm9tIHRoZSBtYXBwZWQgZnVuY3Rpb24uXG4gKiBAcmV0dXJuIHtPYmplY3R9XG4gKi9cbnZhciBtYXBNdXRhdGlvbnMgPSBub3JtYWxpemVOYW1lc3BhY2UoZnVuY3Rpb24gKG5hbWVzcGFjZSwgbXV0YXRpb25zKSB7XG4gIHZhciByZXMgPSB7fTtcbiAgaWYgKFwicHJvZHVjdGlvblwiICE9PSAncHJvZHVjdGlvbicgJiYgIWlzVmFsaWRNYXAobXV0YXRpb25zKSkge1xuICAgIGNvbnNvbGUuZXJyb3IoJ1t2dWV4XSBtYXBNdXRhdGlvbnM6IG1hcHBlciBwYXJhbWV0ZXIgbXVzdCBiZSBlaXRoZXIgYW4gQXJyYXkgb3IgYW4gT2JqZWN0Jyk7XG4gIH1cbiAgbm9ybWFsaXplTWFwKG11dGF0aW9ucykuZm9yRWFjaChmdW5jdGlvbiAocmVmKSB7XG4gICAgdmFyIGtleSA9IHJlZi5rZXk7XG4gICAgdmFyIHZhbCA9IHJlZi52YWw7XG5cbiAgICByZXNba2V5XSA9IGZ1bmN0aW9uIG1hcHBlZE11dGF0aW9uICgpIHtcbiAgICAgIHZhciBhcmdzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICB3aGlsZSAoIGxlbi0tICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuXG4gICAgICAvLyBHZXQgdGhlIGNvbW1pdCBtZXRob2QgZnJvbSBzdG9yZVxuICAgICAgdmFyIGNvbW1pdCA9IHRoaXMuJHN0b3JlLmNvbW1pdDtcbiAgICAgIGlmIChuYW1lc3BhY2UpIHtcbiAgICAgICAgdmFyIG1vZHVsZSA9IGdldE1vZHVsZUJ5TmFtZXNwYWNlKHRoaXMuJHN0b3JlLCAnbWFwTXV0YXRpb25zJywgbmFtZXNwYWNlKTtcbiAgICAgICAgaWYgKCFtb2R1bGUpIHtcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgICBjb21taXQgPSBtb2R1bGUuY29udGV4dC5jb21taXQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gdHlwZW9mIHZhbCA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgICA/IHZhbC5hcHBseSh0aGlzLCBbY29tbWl0XS5jb25jYXQoYXJncykpXG4gICAgICAgIDogY29tbWl0LmFwcGx5KHRoaXMuJHN0b3JlLCBbdmFsXS5jb25jYXQoYXJncykpXG4gICAgfTtcbiAgfSk7XG4gIHJldHVybiByZXNcbn0pO1xuXG4vKipcbiAqIFJlZHVjZSB0aGUgY29kZSB3aGljaCB3cml0dGVuIGluIFZ1ZS5qcyBmb3IgZ2V0dGluZyB0aGUgZ2V0dGVyc1xuICogQHBhcmFtIHtTdHJpbmd9IFtuYW1lc3BhY2VdIC0gTW9kdWxlJ3MgbmFtZXNwYWNlXG4gKiBAcGFyYW0ge09iamVjdHxBcnJheX0gZ2V0dGVyc1xuICogQHJldHVybiB7T2JqZWN0fVxuICovXG52YXIgbWFwR2V0dGVycyA9IG5vcm1hbGl6ZU5hbWVzcGFjZShmdW5jdGlvbiAobmFtZXNwYWNlLCBnZXR0ZXJzKSB7XG4gIHZhciByZXMgPSB7fTtcbiAgaWYgKFwicHJvZHVjdGlvblwiICE9PSAncHJvZHVjdGlvbicgJiYgIWlzVmFsaWRNYXAoZ2V0dGVycykpIHtcbiAgICBjb25zb2xlLmVycm9yKCdbdnVleF0gbWFwR2V0dGVyczogbWFwcGVyIHBhcmFtZXRlciBtdXN0IGJlIGVpdGhlciBhbiBBcnJheSBvciBhbiBPYmplY3QnKTtcbiAgfVxuICBub3JtYWxpemVNYXAoZ2V0dGVycykuZm9yRWFjaChmdW5jdGlvbiAocmVmKSB7XG4gICAgdmFyIGtleSA9IHJlZi5rZXk7XG4gICAgdmFyIHZhbCA9IHJlZi52YWw7XG5cbiAgICAvLyBUaGUgbmFtZXNwYWNlIGhhcyBiZWVuIG11dGF0ZWQgYnkgbm9ybWFsaXplTmFtZXNwYWNlXG4gICAgdmFsID0gbmFtZXNwYWNlICsgdmFsO1xuICAgIHJlc1trZXldID0gZnVuY3Rpb24gbWFwcGVkR2V0dGVyICgpIHtcbiAgICAgIGlmIChuYW1lc3BhY2UgJiYgIWdldE1vZHVsZUJ5TmFtZXNwYWNlKHRoaXMuJHN0b3JlLCAnbWFwR2V0dGVycycsIG5hbWVzcGFjZSkpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICBpZiAoXCJwcm9kdWN0aW9uXCIgIT09ICdwcm9kdWN0aW9uJyAmJiAhKHZhbCBpbiB0aGlzLiRzdG9yZS5nZXR0ZXJzKSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKChcIlt2dWV4XSB1bmtub3duIGdldHRlcjogXCIgKyB2YWwpKTtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy4kc3RvcmUuZ2V0dGVyc1t2YWxdXG4gICAgfTtcbiAgICAvLyBtYXJrIHZ1ZXggZ2V0dGVyIGZvciBkZXZ0b29sc1xuICAgIHJlc1trZXldLnZ1ZXggPSB0cnVlO1xuICB9KTtcbiAgcmV0dXJuIHJlc1xufSk7XG5cbi8qKlxuICogUmVkdWNlIHRoZSBjb2RlIHdoaWNoIHdyaXR0ZW4gaW4gVnVlLmpzIGZvciBkaXNwYXRjaCB0aGUgYWN0aW9uXG4gKiBAcGFyYW0ge1N0cmluZ30gW25hbWVzcGFjZV0gLSBNb2R1bGUncyBuYW1lc3BhY2VcbiAqIEBwYXJhbSB7T2JqZWN0fEFycmF5fSBhY3Rpb25zICMgT2JqZWN0J3MgaXRlbSBjYW4gYmUgYSBmdW5jdGlvbiB3aGljaCBhY2NlcHQgYGRpc3BhdGNoYCBmdW5jdGlvbiBhcyB0aGUgZmlyc3QgcGFyYW0sIGl0IGNhbiBhY2NlcHQgYW50aG9yIHBhcmFtcy4gWW91IGNhbiBkaXNwYXRjaCBhY3Rpb24gYW5kIGRvIGFueSBvdGhlciB0aGluZ3MgaW4gdGhpcyBmdW5jdGlvbi4gc3BlY2lhbGx5LCBZb3UgbmVlZCB0byBwYXNzIGFudGhvciBwYXJhbXMgZnJvbSB0aGUgbWFwcGVkIGZ1bmN0aW9uLlxuICogQHJldHVybiB7T2JqZWN0fVxuICovXG52YXIgbWFwQWN0aW9ucyA9IG5vcm1hbGl6ZU5hbWVzcGFjZShmdW5jdGlvbiAobmFtZXNwYWNlLCBhY3Rpb25zKSB7XG4gIHZhciByZXMgPSB7fTtcbiAgaWYgKFwicHJvZHVjdGlvblwiICE9PSAncHJvZHVjdGlvbicgJiYgIWlzVmFsaWRNYXAoYWN0aW9ucykpIHtcbiAgICBjb25zb2xlLmVycm9yKCdbdnVleF0gbWFwQWN0aW9uczogbWFwcGVyIHBhcmFtZXRlciBtdXN0IGJlIGVpdGhlciBhbiBBcnJheSBvciBhbiBPYmplY3QnKTtcbiAgfVxuICBub3JtYWxpemVNYXAoYWN0aW9ucykuZm9yRWFjaChmdW5jdGlvbiAocmVmKSB7XG4gICAgdmFyIGtleSA9IHJlZi5rZXk7XG4gICAgdmFyIHZhbCA9IHJlZi52YWw7XG5cbiAgICByZXNba2V5XSA9IGZ1bmN0aW9uIG1hcHBlZEFjdGlvbiAoKSB7XG4gICAgICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgd2hpbGUgKCBsZW4tLSApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gXTtcblxuICAgICAgLy8gZ2V0IGRpc3BhdGNoIGZ1bmN0aW9uIGZyb20gc3RvcmVcbiAgICAgIHZhciBkaXNwYXRjaCA9IHRoaXMuJHN0b3JlLmRpc3BhdGNoO1xuICAgICAgaWYgKG5hbWVzcGFjZSkge1xuICAgICAgICB2YXIgbW9kdWxlID0gZ2V0TW9kdWxlQnlOYW1lc3BhY2UodGhpcy4kc3RvcmUsICdtYXBBY3Rpb25zJywgbmFtZXNwYWNlKTtcbiAgICAgICAgaWYgKCFtb2R1bGUpIHtcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgICBkaXNwYXRjaCA9IG1vZHVsZS5jb250ZXh0LmRpc3BhdGNoO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHR5cGVvZiB2YWwgPT09ICdmdW5jdGlvbidcbiAgICAgICAgPyB2YWwuYXBwbHkodGhpcywgW2Rpc3BhdGNoXS5jb25jYXQoYXJncykpXG4gICAgICAgIDogZGlzcGF0Y2guYXBwbHkodGhpcy4kc3RvcmUsIFt2YWxdLmNvbmNhdChhcmdzKSlcbiAgICB9O1xuICB9KTtcbiAgcmV0dXJuIHJlc1xufSk7XG5cbi8qKlxuICogUmViaW5kaW5nIG5hbWVzcGFjZSBwYXJhbSBmb3IgbWFwWFhYIGZ1bmN0aW9uIGluIHNwZWNpYWwgc2NvcGVkLCBhbmQgcmV0dXJuIHRoZW0gYnkgc2ltcGxlIG9iamVjdFxuICogQHBhcmFtIHtTdHJpbmd9IG5hbWVzcGFjZVxuICogQHJldHVybiB7T2JqZWN0fVxuICovXG52YXIgY3JlYXRlTmFtZXNwYWNlZEhlbHBlcnMgPSBmdW5jdGlvbiAobmFtZXNwYWNlKSB7IHJldHVybiAoe1xuICBtYXBTdGF0ZTogbWFwU3RhdGUuYmluZChudWxsLCBuYW1lc3BhY2UpLFxuICBtYXBHZXR0ZXJzOiBtYXBHZXR0ZXJzLmJpbmQobnVsbCwgbmFtZXNwYWNlKSxcbiAgbWFwTXV0YXRpb25zOiBtYXBNdXRhdGlvbnMuYmluZChudWxsLCBuYW1lc3BhY2UpLFxuICBtYXBBY3Rpb25zOiBtYXBBY3Rpb25zLmJpbmQobnVsbCwgbmFtZXNwYWNlKVxufSk7IH07XG5cbi8qKlxuICogTm9ybWFsaXplIHRoZSBtYXBcbiAqIG5vcm1hbGl6ZU1hcChbMSwgMiwgM10pID0+IFsgeyBrZXk6IDEsIHZhbDogMSB9LCB7IGtleTogMiwgdmFsOiAyIH0sIHsga2V5OiAzLCB2YWw6IDMgfSBdXG4gKiBub3JtYWxpemVNYXAoe2E6IDEsIGI6IDIsIGM6IDN9KSA9PiBbIHsga2V5OiAnYScsIHZhbDogMSB9LCB7IGtleTogJ2InLCB2YWw6IDIgfSwgeyBrZXk6ICdjJywgdmFsOiAzIH0gXVxuICogQHBhcmFtIHtBcnJheXxPYmplY3R9IG1hcFxuICogQHJldHVybiB7T2JqZWN0fVxuICovXG5mdW5jdGlvbiBub3JtYWxpemVNYXAgKG1hcCkge1xuICBpZiAoIWlzVmFsaWRNYXAobWFwKSkge1xuICAgIHJldHVybiBbXVxuICB9XG4gIHJldHVybiBBcnJheS5pc0FycmF5KG1hcClcbiAgICA/IG1hcC5tYXAoZnVuY3Rpb24gKGtleSkgeyByZXR1cm4gKHsga2V5OiBrZXksIHZhbDoga2V5IH0pOyB9KVxuICAgIDogT2JqZWN0LmtleXMobWFwKS5tYXAoZnVuY3Rpb24gKGtleSkgeyByZXR1cm4gKHsga2V5OiBrZXksIHZhbDogbWFwW2tleV0gfSk7IH0pXG59XG5cbi8qKlxuICogVmFsaWRhdGUgd2hldGhlciBnaXZlbiBtYXAgaXMgdmFsaWQgb3Igbm90XG4gKiBAcGFyYW0geyp9IG1hcFxuICogQHJldHVybiB7Qm9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaXNWYWxpZE1hcCAobWFwKSB7XG4gIHJldHVybiBBcnJheS5pc0FycmF5KG1hcCkgfHwgaXNPYmplY3QobWFwKVxufVxuXG4vKipcbiAqIFJldHVybiBhIGZ1bmN0aW9uIGV4cGVjdCB0d28gcGFyYW0gY29udGFpbnMgbmFtZXNwYWNlIGFuZCBtYXAuIGl0IHdpbGwgbm9ybWFsaXplIHRoZSBuYW1lc3BhY2UgYW5kIHRoZW4gdGhlIHBhcmFtJ3MgZnVuY3Rpb24gd2lsbCBoYW5kbGUgdGhlIG5ldyBuYW1lc3BhY2UgYW5kIHRoZSBtYXAuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmblxuICogQHJldHVybiB7RnVuY3Rpb259XG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZU5hbWVzcGFjZSAoZm4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChuYW1lc3BhY2UsIG1hcCkge1xuICAgIGlmICh0eXBlb2YgbmFtZXNwYWNlICE9PSAnc3RyaW5nJykge1xuICAgICAgbWFwID0gbmFtZXNwYWNlO1xuICAgICAgbmFtZXNwYWNlID0gJyc7XG4gICAgfSBlbHNlIGlmIChuYW1lc3BhY2UuY2hhckF0KG5hbWVzcGFjZS5sZW5ndGggLSAxKSAhPT0gJy8nKSB7XG4gICAgICBuYW1lc3BhY2UgKz0gJy8nO1xuICAgIH1cbiAgICByZXR1cm4gZm4obmFtZXNwYWNlLCBtYXApXG4gIH1cbn1cblxuLyoqXG4gKiBTZWFyY2ggYSBzcGVjaWFsIG1vZHVsZSBmcm9tIHN0b3JlIGJ5IG5hbWVzcGFjZS4gaWYgbW9kdWxlIG5vdCBleGlzdCwgcHJpbnQgZXJyb3IgbWVzc2FnZS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBzdG9yZVxuICogQHBhcmFtIHtTdHJpbmd9IGhlbHBlclxuICogQHBhcmFtIHtTdHJpbmd9IG5hbWVzcGFjZVxuICogQHJldHVybiB7T2JqZWN0fVxuICovXG5mdW5jdGlvbiBnZXRNb2R1bGVCeU5hbWVzcGFjZSAoc3RvcmUsIGhlbHBlciwgbmFtZXNwYWNlKSB7XG4gIHZhciBtb2R1bGUgPSBzdG9yZS5fbW9kdWxlc05hbWVzcGFjZU1hcFtuYW1lc3BhY2VdO1xuICBpZiAoXCJwcm9kdWN0aW9uXCIgIT09ICdwcm9kdWN0aW9uJyAmJiAhbW9kdWxlKSB7XG4gICAgY29uc29sZS5lcnJvcigoXCJbdnVleF0gbW9kdWxlIG5hbWVzcGFjZSBub3QgZm91bmQgaW4gXCIgKyBoZWxwZXIgKyBcIigpOiBcIiArIG5hbWVzcGFjZSkpO1xuICB9XG4gIHJldHVybiBtb2R1bGVcbn1cblxudmFyIGluZGV4ID0ge1xuICBTdG9yZTogU3RvcmUsXG4gIGluc3RhbGw6IGluc3RhbGwsXG4gIHZlcnNpb246ICczLjEuMicsXG4gIG1hcFN0YXRlOiBtYXBTdGF0ZSxcbiAgbWFwTXV0YXRpb25zOiBtYXBNdXRhdGlvbnMsXG4gIG1hcEdldHRlcnM6IG1hcEdldHRlcnMsXG4gIG1hcEFjdGlvbnM6IG1hcEFjdGlvbnMsXG4gIGNyZWF0ZU5hbWVzcGFjZWRIZWxwZXJzOiBjcmVhdGVOYW1lc3BhY2VkSGVscGVyc1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBpbmRleDtcbiIsImltcG9ydCAnZXM2LXByb21pc2UvYXV0byc7XG5cbmltcG9ydCBvYmplY3RGaXRJbWFnZXMgZnJvbSAnb2JqZWN0LWZpdC1pbWFnZXMnO1xuaW1wb3J0IGltYWdlUG9wdXAgZnJvbSAnLi9tb2R1bGVzL2ltYWdlLXBvcHVwJztcbmltcG9ydCB2aWRlb1BvcHVwIGZyb20gJy4vbW9kdWxlcy92aWRlby1wb3B1cCc7XG5pbXBvcnQgbWFjaGluZVNlYXJjaCBmcm9tICcuL21vZHVsZXMvbWFjaGluZS1zZWFyY2gnO1xuaW1wb3J0IGJyYW5jaEJhciBmcm9tICcuL21vZHVsZXMvYnJhbmNoLWJhcic7XG5pbXBvcnQgY3VzdG9tU2VsZWN0IGZyb20gJy4vbW9kdWxlcy9jdXN0b20tc2VsZWN0JztcbmltcG9ydCBuYXZpZ2F0aW9uIGZyb20gJy4vbW9kdWxlcy9uYXZpZ2F0aW9uJztcbmltcG9ydCBzaG93SW5wdXRzIGZyb20gJy4vbW9kdWxlcy9zaG93LW1vcmUtZmlsZS1pbnB1dHMnO1xuaW1wb3J0IGZpbHRlck1hY2hpbmVBY2Nlc3NvcmllcyBmcm9tICcuL21vZHVsZXMvZmlsdGVyLW1hY2hpbmUtYWNjZXNzb3JpZXMnO1xuaW1wb3J0IGZpbHRlck5ld3MgZnJvbSAnLi9tb2R1bGVzL2ZpbHRlci1uZXdzJztcbmltcG9ydCBjdXN0b21PcmRlcmVySW5mbyBmcm9tICcuL21vZHVsZXMvY3VzdG9tLW9yZGVyZXItaW5mbyc7XG5pbXBvcnQgY29sbGVjdGlvbk1ha2VyIGZyb20gJy4vbW9kdWxlcy9jb2xsZWN0aW9uLW1ha2VyJztcbmltcG9ydCBzZWxlY3RNYXRlcmlhbExhbmd1YWdlIGZyb20gJy4vbW9kdWxlcy9zZWxlY3QtbWF0ZXJpYWwtbGFuZ3VhZ2UnO1xuXG5pbXBvcnQgY3VzdG9tZXJzQXBwIGZyb20gJy4vbW9kdWxlcy92dWUvYXBwcy9jdXN0b21lcnMtYXBwLyc7XG5pbXBvcnQgdXNlclNldHRpbmdzQXBwIGZyb20gJy4vbW9kdWxlcy92dWUvYXBwcy91c2VyLXNldHRpbmdzLWFwcC8nO1xuaW1wb3J0IGZvcmdvdHRlblBhc3N3b3JkQXBwIGZyb20gJy4vbW9kdWxlcy92dWUvYXBwcy9mb3Jnb3R0ZW4tcGFzc3dvcmQtYXBwLyc7XG5pbXBvcnQgdXBkYXRlUGFzc3dvcmRBcHAgZnJvbSAnLi9tb2R1bGVzL3Z1ZS9hcHBzL3VwZGF0ZS1wYXNzd29yZC1hcHAvJztcbmltcG9ydCBvd25Db21wYW55QXBwIGZyb20gJy4vbW9kdWxlcy92dWUvYXBwcy9vd24tY29tcGFueS1hcHAnO1xuaW1wb3J0IGN1c3RvbWVyTWFjaGluZXNBcHAgZnJvbSAnLi9tb2R1bGVzL3Z1ZS9hcHBzL2N1c3RvbWVyLW1hY2hpbmVzLWFwcCc7XG5pbXBvcnQgY29tcGxhaW50c0FwcCBmcm9tICcuL21vZHVsZXMvdnVlL2FwcHMvY29tcGxhaW50cy1hcHAnO1xuaW1wb3J0IHdhcnJhbnR5UmVnaXN0cmF0aW9uc0FwcCBmcm9tICcuL21vZHVsZXMvdnVlL2FwcHMvd2FycmFudHktcmVnaXN0cmF0aW9ucy1hcHAnO1xuXG4vLyBBY3RpdmF0ZSBzZXJ2ZXIgd29ya2VyXG5pZiAoJ3NlcnZpY2VXb3JrZXInIGluIG5hdmlnYXRvcikge1xuICBpZiAocHJvY2Vzcy5lbnYuTE9DQUxfTU9ERSkge1xuICAgIG5hdmlnYXRvci5zZXJ2aWNlV29ya2VyLnJlZ2lzdGVyKCcvbG9jYWwtc2VydmljZS13b3JrZXIuanMnLCB7IHNjb3BlOiAnLycgfSkudGhlbihmdW5jdGlvbiAocmVnKSB7XG4gICAgICAvLyByZWdpc3RyYXRpb24gd29ya2VkXG4gICAgICBjb25zb2xlLmxvZygnTG9jYWwgc2VydmljZSB3b3JrZXIgdmVyc2lvbiByZWdpc3RyYXRpb24gc3VjY2VlZGVkLiBTY29wZSBpcyAnICsgcmVnLnNjb3BlKTtcbiAgICB9KS5jYXRjaChmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgIC8vIHJlZ2lzdHJhdGlvbiBmYWlsZWRcbiAgICAgIGNvbnNvbGUubG9nKCdMb2NhbCBzZXJ2aWNlIHdvcmtlciByZWdpc3RyYXRpb24gZmFpbGVkLicpO1xuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIG5hdmlnYXRvci5zZXJ2aWNlV29ya2VyLnJlZ2lzdGVyKCcvc3RhdGljL3N0dWRpby9wdWIvd2ViL3YxLycgKyBwcm9jZXNzLmVudi5SRVNPVVJDRV9GT0xERVIgKyAnL3NlcnZpY2Utd29ya2VyLmpzJywgeyBzY29wZTogJy8nIH0pXG4gICAgICAudGhlbihmdW5jdGlvbiAocmVnKSB7XG4gICAgICAgIC8vIHJlZ2lzdHJhdGlvbiB3b3JrZWRcbiAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgICAvLyByZWdpc3RyYXRpb24gZmFpbGVkXG4gICAgICAgIGNvbnNvbGUubG9nKCdTZXJ2aWNlIHdvcmtlciByZWdpc3RyYXRpb24gZmFpbGVkLicpO1xuICAgICAgfSk7XG4gIH1cbn1cblxuLy8gVnVlIGFwcHNcbmN1c3RvbWVyc0FwcC5pbml0KCdqcy1jdXN0b21lcnMtYXBwJyk7XG51c2VyU2V0dGluZ3NBcHAuaW5pdCgnanMtdXNlci1zZXR0aW5ncy1hcHAnKTtcbmZvcmdvdHRlblBhc3N3b3JkQXBwLmluaXQoJ2pzLWZvcmdvdC1wYXNzd29yZC1hcHAnKTtcbnVwZGF0ZVBhc3N3b3JkQXBwLmluaXQoJ2pzLXVwZGF0ZS1wYXNzd29yZC1hcHAnKTtcbm93bkNvbXBhbnlBcHAuaW5pdCgnanMtb3duLWNvbXBhbnktYXBwJyk7XG5jdXN0b21lck1hY2hpbmVzQXBwLmluaXQoJ2pzLWN1c3RvbWVyLW1hY2hpbmVzLWFwcCcpO1xuY29tcGxhaW50c0FwcC5pbml0KCdqcy1jb21wbGFpbnRzLWFwcCcpO1xud2FycmFudHlSZWdpc3RyYXRpb25zQXBwLmluaXQoJ2pzLXdhcnJhbnR5LXJlZ2lzdHJhdGlvbnMtYXBwJyk7XG5cbm5hdmlnYXRpb24uaW5pdCgpO1xuc2hvd0lucHV0cy5pbml0KCk7XG5icmFuY2hCYXIuaW5pdCgpO1xuY3VzdG9tU2VsZWN0LmluaXQoKTtcbmN1c3RvbU9yZGVyZXJJbmZvLmluaXQoKTtcbmZpbHRlck5ld3MuaW5pdCgpO1xuZmlsdGVyTWFjaGluZUFjY2Vzc29yaWVzLmluaXQoKTtcbm1hY2hpbmVTZWFyY2guaW5pdCgpO1xuaW1hZ2VQb3B1cC5pbml0KCcuanMtcG9wdXAtaW1hZ2UnKTtcbnZpZGVvUG9wdXAuaW5pdCgnLmpzLXBvcHVwLXZpZGVvJyk7XG5jb2xsZWN0aW9uTWFrZXIuaW5pdCgpO1xuc2VsZWN0TWF0ZXJpYWxMYW5ndWFnZS5pbml0KCk7XG5cbi8vUG9seWZpbGxzXG5pbXBvcnQgJ3BvbHlmaWxsLWFycmF5LWluY2x1ZGVzJztcbi8vIFBvbHlmaWxsIG9iamVjdC1maXQgY3NzIHByb3BlcnR5IGZvciBJRSBicm93c2Vyc1xub2JqZWN0Rml0SW1hZ2VzKCcuanMtb2JqZWN0LWZpdCcpO1xuIiwiXG5jb25zdCBHQVRyYWNraW5nQ29kZSA9ICdVQS00ODMxODg5LTMwJztcbmxldCBHQUNyZWF0ZWQgPSBudWxsO1xuXG4vKipcbiAqIFNlbmQgZXZlbnQgdG8gR29vZ2xlIGFuYWx5dGljc1xuICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50Q2F0ZWdvcnkgZXZlbnQgY2F0ZWdvcnlcbiAqIEBwYXJhbSB7c3RyaW5nfSBldmVudEFjdGlvbiBldmVudCBhY3Rpb25cbiAqIEBwYXJhbSB7c3RyaW5nfSBldmVudExhYmVsIGV2ZW50IGxhYmVsXG4gICogQHBhcmFtIHtudW1iZXJ9IGV2ZW50VmFsdWUgZXZlbnQgdmFsdWVcbiovXG5mdW5jdGlvbiBzZW5kR0FFdmVudChldmVudENhdGVnb3J5LCBldmVudEFjdGlvbiwgZXZlbnRMYWJlbCwgZXZlbnRWYWx1ZSkge1xuICBpZiggdHlwZW9mIHdpbmRvdy5nYSAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LmdhICl7XG5cbiAgICBpZiggIUdBQ3JlYXRlZCApe1xuICAgICAgd2luZG93LmdhKCdjcmVhdGUnLCBHQVRyYWNraW5nQ29kZSwgJ2F1dG8nKTtcbiAgICAgIEdBQ3JlYXRlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgd2luZG93LmdhKCdzZW5kJywge1xuICAgICAgaGl0VHlwZTogJ2V2ZW50JyxcbiAgICAgIGV2ZW50Q2F0ZWdvcnksXG4gICAgICBldmVudEFjdGlvbixcbiAgICAgIGV2ZW50TGFiZWwsXG4gICAgICBldmVudFZhbHVlXG4gICAgfSk7XG4gIH1cbn1cblxuLypcblB1c2ggZXZlbnQgZGV0YWlscyB0byBEYXRhbGF5ZXIsIHRvIGJlIHBhc3NlZCB0byBHb29nbGUgc2VydmljZXMgKFRhZyBNYW5hZ2VyKVxuKi9cbmZ1bmN0aW9uIHB1c2hFdmVudFRvRGF0YWxheWVyKGV2ZW50KSB7XG4gIGlmKHR5cGVvZiB3aW5kb3cuZGF0YUxheWVyICE9PSAndW5kZWZpbmVkJyl7XG4gICAgd2luZG93LmRhdGFMYXllci5wdXNoKHtcbiAgICAgICdldmVudCc6ICdnYUV2ZW50JyxcbiAgICAgICdldmVudENhdGVnb3J5JzogZXZlbnQuZXZlbnRDYXRlZ29yeSxcbiAgICAgICdldmVudEFjdGlvbic6IGV2ZW50LmV2ZW50QWN0aW9uLFxuICAgICAgJ2V2ZW50TGFiZWwnOiBldmVudC5ldmVudExhYmVsXG4gICAgfSk7XG4gIH1cbn1cblxuLypcblB1c2ggb2JqZWN0IHRvIERhdGFsYXllciwgdG8gYmUgcGFzc2VkIHRvIEdvb2dsZSBzZXJ2aWNlcyAoVGFnIE1hbmFnZXIpXG4qL1xuZnVuY3Rpb24gcHVzaE9iamVjdFRvRGF0YWxheWVyKG9iamVjdCkge1xuICBpZih0eXBlb2Ygd2luZG93LmRhdGFMYXllciAhPT0gJ3VuZGVmaW5lZCcpe1xuICAgIHdpbmRvdy5kYXRhTGF5ZXIucHVzaChvYmplY3QpO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBwdXNoRXZlbnRUb0RhdGFsYXllciwgcHVzaE9iamVjdFRvRGF0YWxheWVyLCBzZW5kR0FFdmVudFxufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGJyYW5jaEJhciA9IHtcbiAgX21pbmlmaWVkQ2xhc3M6ICdicmFuY2gtYmFyLS1taW5pZmllZCcsXG4gIF9oaWRkZW5DbGFzczogJ2JyYW5jaC1iYXItLWhpZGRlbicsXG4gIF9zdG9yYWdlU2V0dGluZ3M6IG51bGwsXG4gIF9mb2xkZXJJZDogbnVsbCxcbiAgX3NldHRpbmdzS2V5OiBudWxsLFxuICBfZG9tOiB7XG4gICAgYmFyOiBudWxsLFxuICAgIHRvZ2dsZXM6IG51bGwsXG4gICAgcGFnZVNlbGVjdHM6IG51bGxcbiAgfSxcbiAgX2lzTG9jYWxTdG9yYWdlRW5hYmxlZDogZnVuY3Rpb24gKCkge1xuICAgIHZhciB0ZXN0ID0gJ2JyYW5jaC1iYXItdGVzdCc7XG5cbiAgICB0cnkge1xuICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0odGVzdCwgdGVzdCk7XG4gICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSh0ZXN0KTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH0sXG4gIF9pc01pbmlmaWVkOiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2RvbS5iYXIuY2xhc3NOYW1lLnNwbGl0KCcgJykuaW5kZXhPZih0aGlzLl9taW5pZmllZENsYXNzKSA+PSAwO1xuICB9LFxuICBfZ2V0U2V0dGluZ3M6IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgc2V0dGluZ3MgPSBudWxsO1xuXG4gICAgaWYgKCF0aGlzLl9pc0xvY2FsU3RvcmFnZUVuYWJsZWQoKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHRoaXMuX2ZvbGRlcklkID0gdGhpcy5fZG9tLmJhci5nZXRBdHRyaWJ1dGUoJ2RhdGEtZm9sZGVyLWlkJyk7XG4gICAgdGhpcy5fc2V0dGluZ3NLZXkgPSAnYnJhbmNoLWJhci0tJyArIHRoaXMuX2ZvbGRlcklkO1xuICAgIGlmICh0aGlzLl9zZXR0aW5nc0tleSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgc2V0dGluZ3MgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMuX3NldHRpbmdzS2V5KSk7XG4gICAgICAgIHJldHVybiBzZXR0aW5ncztcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHNldHRpbmdzO1xuICB9LFxuICBfdXBkYXRlU2V0dGluZ3M6IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIXRoaXMuX2lzTG9jYWxTdG9yYWdlRW5hYmxlZCgpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLl9zdG9yYWdlU2V0dGluZ3MpIHtcbiAgICAgIHRoaXMuX3N0b3JhZ2VTZXR0aW5ncyA9IHt9O1xuICAgIH1cblxuICAgIHRoaXMuX3N0b3JhZ2VTZXR0aW5ncy5taW5pZmllZCA9IHRoaXMuX2lzTWluaWZpZWQoKTtcblxuICAgIHRyeSB7XG4gICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0aGlzLl9zZXR0aW5nc0tleSwgSlNPTi5zdHJpbmdpZnkodGhpcy5fc3RvcmFnZVNldHRpbmdzKSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9LFxuICBfdG9nZ2xlTWluaWZpZWQ6IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAodGhpcy5faXNNaW5pZmllZCgpKSB7XG4gICAgICB2YXIgcmVnID0gbmV3IFJlZ0V4cCgnKFxcXFxzfF4pJyArIHRoaXMuX21pbmlmaWVkQ2xhc3MgKyAnKFxcXFxzfCQpJyk7XG4gICAgICB0aGlzLl9kb20uYmFyLmNsYXNzTmFtZSA9IHRoaXMuX2RvbS5iYXIuY2xhc3NOYW1lLnJlcGxhY2UocmVnLCAnICcpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9kb20uYmFyLmNsYXNzTmFtZSArPSAnICcgKyB0aGlzLl9taW5pZmllZENsYXNzO1xuICAgIH1cbiAgfSxcbiAgX2luaXRUb2dnbGVzOiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gICAgdGhpcy5fZG9tLnRvZ2dsZXMgPSB0aGlzLl9kb20uYmFyLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2pzLWJyYW5jaC1iYXJfX3RvZ2dsZScpO1xuXG4gICAgZm9yICh2YXIgaSA9IDAsIGwgPSB0aGlzLl9kb20udG9nZ2xlcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIHRoaXMuX2RvbS50b2dnbGVzW2ldLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBzZWxmLl90b2dnbGVNaW5pZmllZCgpO1xuICAgICAgICBzZWxmLl91cGRhdGVTZXR0aW5ncygpO1xuICAgICAgfSwgZmFsc2UpO1xuICAgIH1cbiAgfSxcbiAgX2luaXRQYWdlU2VsZWN0czogZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuX2RvbS5wYWdlU2VsZWN0cyA9IHRoaXMuX2RvbS5iYXIuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnanMtYnJhbmNoLWJhcl9fcGFnZS1zZWxlY3QnKTtcblxuICAgIGZvciAodmFyIGkgPSAwLCBsID0gdGhpcy5fZG9tLnBhZ2VTZWxlY3RzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgdGhpcy5fZG9tLnBhZ2VTZWxlY3RzW2ldLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIHZhciB2YWwgPSBlLnRhcmdldC52YWx1ZTtcblxuICAgICAgICBpZiAodmFsKSB7XG4gICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSB2YWw7XG4gICAgICAgIH1cbiAgICAgIH0sIGZhbHNlKTtcbiAgICB9XG4gIH0sXG4gIF9zaG93QmFyOiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHJlZyA9IG5ldyBSZWdFeHAoJyhcXFxcc3xeKScgKyB0aGlzLl9oaWRkZW5DbGFzcyArICcoXFxcXHN8JCknKTtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICBzZWxmLl9kb20uYmFyLmNsYXNzTmFtZSA9IHNlbGYuX2RvbS5iYXIuY2xhc3NOYW1lLnJlcGxhY2UocmVnLCAnICcpO1xuICB9LFxuICBpbml0OiBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5fZG9tLmJhciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdqcy1icmFuY2gtYmFyJyk7IC8vIEFzc3VtZXMgb25seSBvbmUgYmFyIHBlciBwYWdlXG5cbiAgICBpZiAodGhpcy5fZG9tLmJhcikge1xuICAgICAgdGhpcy5fc3RvcmFnZVNldHRpbmdzID0gdGhpcy5fZ2V0U2V0dGluZ3MoKTtcblxuICAgICAgLy8gSWYgdXNlciBsZWZ0IHRoZSBiYXIgb3BlblxuICAgICAgaWYgKHRoaXMuX3N0b3JhZ2VTZXR0aW5ncyAmJiAhdGhpcy5fc3RvcmFnZVNldHRpbmdzLm1pbmlmaWVkKSB7XG4gICAgICAgIHRoaXMuX3RvZ2dsZU1pbmlmaWVkKCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2luaXRUb2dnbGVzKCk7XG4gICAgICB0aGlzLl9pbml0UGFnZVNlbGVjdHMoKTtcblxuICAgICAgdGhpcy5fc2hvd0JhcigpO1xuICAgIH1cbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBicmFuY2hCYXI7XG4iLCIvLyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gKiBDb2xsZWN0aW9uIG1ha2VyIGZ1bmN0aW9uYWxpdHlcbi8vICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbid1c2Ugc3RyaWN0JztcblxuaW1wb3J0ICQgZnJvbSAnanF1ZXJ5JztcbmltcG9ydCBDb29raWVzIGZyb20gJ2pzLWNvb2tpZSc7XG5pbXBvcnQgZGF0YWxheWVyQWN0aW9ucyBmcm9tICcuL2FuYWx5dGljcy1hY3Rpb25zJztcblxuY29uc3QgY29sbGVjdGlvbk1ha2VyID0gKGZ1bmN0aW9uICgpIHtcbiAgY29uc3QgYmxvY2sgPSAnLmpzLWNvbGxlY3Rpb24tbWFrZXInO1xuXG4gIGxldCAkY21FbGVtZW50ID0gbnVsbCxcbiAgICAkZGlhbG9nRWxlbSA9IG51bGwsXG4gICAgYWpheEhhbmRsZXJVcmwgPSBudWxsLFxuICAgIGluaXRpYWxpemVyVXJsID0gbnVsbCxcbiAgICBiYXNrZXRJZCA9ICdkZWZhdWx0LWJhc2tldCcsXG4gICAgY3VycmVudFBoYXNlID0gJ25vdHJ1bm5pbmcnLFxuICAgIHBlcmNlbnRQZXJQb2xsID0gMCxcbiAgICBwZGZQcm9ncmVzcyA9IDA7XG5cbiAgZnVuY3Rpb24gZ2VuZXJhbEFqYXgoYWpheFVybCwgcGFyYW1zID0ge30sIHR5cGUgPSAnR0VUJywgY2FsbGJhY2ssIGNiUGFyYW1zID0ge30pe1xuICAgICQuYWpheCh7XG4gICAgICB1cmw6IGFqYXhVcmwsXG4gICAgICB0eXBlOiB0eXBlLFxuICAgICAgZGF0YTogcGFyYW1zLFxuICAgICAgY2FjaGU6IGZhbHNlXG4gICAgfSkuZG9uZShmdW5jdGlvbiAocmVzcCkge1xuICAgICAgaWYodHlwZW9mKGNhbGxiYWNrKSAhPT0gJ3VuZGVmaW5lZCcpe1xuICAgICAgICBjYWxsYmFjayhyZXNwLCBjYlBhcmFtcyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKlxuICAqXG4gICogRnVuY3Rpb25zIHRoYXQgYXJlIHVzZWQgb3V0c2lkZSBjb2xsZWN0aW9uIG1ha2VyIHBhZ2VcbiAgKlxuICAqL1xuXG4gIC8vIEl0ZW0gcmVtb3ZlZCBmcm9tIGNvbGxlY3Rpb24gbWFrZXIgKGJ1dHRvbilcbiAgZnVuY3Rpb24gaXRlbVJlbW92ZWQocmVzcCwgJGl0ZW0pe1xuICAgIGlmKCRpdGVtKXtcbiAgICAgICRpdGVtLmRhdGEoJ2luLWNhcnQnLCBmYWxzZSk7XG4gICAgICAkaXRlbS50ZXh0KCRpdGVtLmRhdGEoJ3RleHQtYWRkJykpO1xuICAgIH1cbiAgfVxuXG4gIC8vIEl0ZW0gYWRkZWQgdG8gY29sbGVjdGlvbiBtYWtlciAoYnV0dG9uKVxuICBmdW5jdGlvbiBpdGVtQWRkZWQocmVzcCwgJGl0ZW0pe1xuICAgIGlmKCRpdGVtKXtcbiAgICAgICRpdGVtLmRhdGEoJ2luLWNhcnQnLCB0cnVlKTtcbiAgICAgICRpdGVtLnRleHQoJGl0ZW0uZGF0YSgndGV4dC1yZW1vdmUnKSk7XG4gICAgfVxuICB9XG5cbiAgLy8gVG9nZ2xlIHNpbmdsZSBjYXJ0IGl0ZW1cbiAgZnVuY3Rpb24gdG9nZ2xlQ2FydEl0ZW0oaWQsIGluQ2FydCwgJGl0ZW0pe1xuICAgIGxldCB1cmxzID0gW107XG4gICAgbGV0IGFjdGlvbiA9IGluQ2FydCA/ICdyZW1vdmUnIDogJ2FkZCc7XG4gICAgbGV0IGNhbGxiYWNrID0gaW5DYXJ0ID8gaXRlbVJlbW92ZWQgOiBpdGVtQWRkZWQ7XG5cbiAgICB1cmxzLnB1c2goaWQpO1xuXG4gICAgZ2VuZXJhbEFqYXgoYWpheEhhbmRsZXJVcmwsIHsgYWN0aW9uOiBhY3Rpb24sIHVybHM6IHVybHMsIGJhc2tldDogYmFza2V0SWQgfSwgJ1BPU1QnLCBjYWxsYmFjaywgJGl0ZW0pO1xuICB9XG5cbiAgLy8gQ2hlY2sgaWYgaXRlbXMgYmVsb25nIHRvIGNhcnRcbiAgZnVuY3Rpb24gY2FydExvYWRlZChjYXJ0KXtcbiAgICAvLyBFYWNoIGNhcnQgdG9nZ2xlIGJ1dHRvblxuICAgICQuZWFjaCgkKGJsb2NrKydfX2l0ZW0tY2FydC10b2dnbGUnKSwgZnVuY3Rpb24oaSwgaXRlbSl7XG4gICAgICBsZXQgJGl0ZW0gPSAkKGl0ZW0pO1xuICAgICAgbGV0IGlkID0gJGl0ZW0uZGF0YSgnaXRlbS1pZCcpO1xuICAgICAgaWYoJC5pbkFycmF5KGlkLCBjYXJ0KSAhPT0gLTEpe1xuICAgICAgICAkaXRlbS5kYXRhKCdpbi1jYXJ0JywgdHJ1ZSk7XG4gICAgICAgICRpdGVtLnRleHQoJGl0ZW0uZGF0YSgndGV4dC1yZW1vdmUnKSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBDbGljayBjYXJ0IHRvZ2dsZSBidXR0b25cbiAgICAkKGJsb2NrKydfX2l0ZW0tY2FydC10b2dnbGUnKS5vbignY2xpY2snLCBmdW5jdGlvbihlKXtcbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGxldCAkaXRlbSA9ICQodGhpcyk7XG4gICAgICBsZXQgaWQgPSAkaXRlbS5kYXRhKCdpdGVtLWlkJyk7XG4gICAgICBsZXQgaW5DYXJ0ID0gJGl0ZW0uZGF0YSgnaW4tY2FydCcpO1xuXG4gICAgICB0b2dnbGVDYXJ0SXRlbShpZCwgaW5DYXJ0LCAkaXRlbSk7XG4gICAgfSk7XG5cbiAgICAvLyBFYWNoIGNhcnQgdG9nZ2xlIGNoZWNrYm94XG4gICAgJC5lYWNoKCQoYmxvY2srJ19fY2hlY2tib3gtY2FydC10b2dnbGUnKSwgZnVuY3Rpb24oaSwgaW5wdXQpe1xuICAgICAgbGV0ICRpbnB1dCA9ICQoaW5wdXQpO1xuICAgICAgbGV0IGlkID0gJGlucHV0LnZhbCgpO1xuICAgICAgaWYoJC5pbkFycmF5KGlkLCBjYXJ0KSAhPT0gLTEpe1xuICAgICAgICAkaW5wdXQucHJvcCgnY2hlY2tlZCcsIHRydWUpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gQ2hlY2tib3ggY2hhbmdlXG4gICAgJChibG9jaysnX19jaGVja2JveC1jYXJ0LXRvZ2dsZScpLm9uKCdjaGFuZ2UnLCBmdW5jdGlvbigpe1xuICAgICAgbGV0ICRpbnB1dCA9ICQodGhpcyk7XG4gICAgICBsZXQgaWQgPSAkaW5wdXQudmFsKCk7XG4gICAgICBsZXQgaW5DYXJ0ID0gISRpbnB1dC5wcm9wKCdjaGVja2VkJyk7XG5cbiAgICAgIHRvZ2dsZUNhcnRJdGVtKGlkLCBpbkNhcnQsIG51bGwpO1xuICAgIH0pO1xuXG4gIH1cblxuICAvLyBMb2FkIGluaXRpYWwgY2FydFxuICBmdW5jdGlvbiBsb2FkQ2FydChyZXNwKXtcbiAgICBnZW5lcmFsQWpheChhamF4SGFuZGxlclVybCwgeyBhY3Rpb246ICdsb2FkQ2FydCcgfSwgdW5kZWZpbmVkLCBjYXJ0TG9hZGVkKTtcbiAgfVxuXG4gIC8vIEluaXRpYWxpemUgc3RhZ2UgZGxjZW50ZXJcbiAgZnVuY3Rpb24gaW5pdENhcnQoKSB7XG4gICAgZ2VuZXJhbEFqYXgoaW5pdGlhbGl6ZXJVcmwsIHsgYWN0aW9uOiAnaW5pdGlhbGl6ZScgfSwgdW5kZWZpbmVkLCBsb2FkQ2FydCk7XG4gIH1cblxuICAvKlxuICAqXG4gICogQ29sbGVjdGlvbiBtYWtlciBwYWdlIGZ1bmN0aW9uc1xuICAqXG4gICovXG5cbiAgLy8gY2xlYXIgd2hvbGUgY2FydFxuICBmdW5jdGlvbiBjbGVhcigpIHtcbiAgICAkLmFqYXgoe1xuICAgICAgdXJsOiBhamF4SGFuZGxlclVybCxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgYmFza2V0OiBiYXNrZXRJZCxcbiAgICAgICAgYWN0aW9uOiAnY2xlYXInXG4gICAgICB9LFxuICAgICAgY2FjaGU6IGZhbHNlXG4gICAgfSkuZG9uZShmdW5jdGlvbiAocmVzcCkge1xuICAgICAgLy8gcmVmcmVzaFxuICAgICAgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpO1xuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gdW5zZWxlY3RQYXJlbnRzKCRwYXJlbnRzKSB7XG4gICAgJHBhcmVudHMuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCAkcGFyZW50ID0gJCh0aGlzKTtcbiAgICAgIGxldCBzZWxlY3RlZENoaWxkcmVuID0gJHBhcmVudC5jaGlsZHJlbigndWwnKS5maW5kKGJsb2NrICsgJ19fdG9nZ2xlOmNoZWNrZWQnKTtcbiAgICAgIGlmIChzZWxlY3RlZENoaWxkcmVuLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAkcGFyZW50LmNoaWxkcmVuKGJsb2NrICsgJ19faXRlbScpLmZpbmQoYmxvY2sgKyAnX190b2dnbGUnKS5wcm9wKCdjaGVja2VkJywgZmFsc2UpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gc2VsZWN0UGFyZW50cygkcGFyZW50cykge1xuICAgICRwYXJlbnRzLmNoaWxkcmVuKGJsb2NrICsgJ19faXRlbScpLmZpbmQoYmxvY2sgKyAnX190b2dnbGUnKS5wcm9wKCdjaGVja2VkJywgdHJ1ZSk7XG4gIH1cblxuICBmdW5jdGlvbiB0b2dnbGVJdGVtKCkge1xuICAgIGxldCB1cmxzID0gW10sXG4gICAgICAkaXRlbUNoZWNrYm94ID0gJCh0aGlzKSxcbiAgICAgICRwYXJlbnRMaSA9ICRpdGVtQ2hlY2tib3guY2xvc2VzdChibG9jayArICdfX2xpJyksXG4gICAgICBhZGQgPSAkaXRlbUNoZWNrYm94LmlzKCc6Y2hlY2tlZCcpLFxuICAgICAgaXRlbVVybCA9ICRpdGVtQ2hlY2tib3guZGF0YSgndXJsJykgfHwgbnVsbCxcbiAgICAgICRjaGlsZEl0ZW1zID0gJHBhcmVudExpLmZpbmQoJ3VsIGxpICcgKyBibG9jayArICdfX3RvZ2dsZScpLFxuICAgICAgJHBhcmVudEl0ZW1zID0gJHBhcmVudExpLnBhcmVudHMoYmxvY2sgKyAnX19saScpO1xuXG4gICAgLy8gQWRkIGN1cnJlbnQgaXRlbSB1cmxcbiAgICBpZiAoaXRlbVVybCkge1xuICAgICAgdXJscy5wdXNoKGl0ZW1VcmwpO1xuICAgIH1cblxuICAgIC8vIFRvZ2dsZSBjaGlsZHJlbiAmIGFkZCB1cmxzXG4gICAgJGNoaWxkSXRlbXMuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICBsZXQgY2hpbGRVcmwgPSAkKHRoaXMpLmRhdGEoJ3VybCcpIHx8IG51bGw7XG4gICAgICBpZiAoY2hpbGRVcmwpIHtcbiAgICAgICAgdXJscy5wdXNoKGNoaWxkVXJsKTtcbiAgICAgIH1cbiAgICAgICQodGhpcykucHJvcCgnY2hlY2tlZCcsIGFkZCk7XG4gICAgfSk7XG5cbiAgICAvLyBUb2dnbGUgcGFyZW50c1xuICAgIGlmIChhZGQpIHtcbiAgICAgIHNlbGVjdFBhcmVudHMoJHBhcmVudEl0ZW1zKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdW5zZWxlY3RQYXJlbnRzKCRwYXJlbnRJdGVtcyk7XG4gICAgfVxuXG4gICAgJC5hamF4KHtcbiAgICAgIHVybDogYWpheEhhbmRsZXJVcmwsXG4gICAgICB0eXBlOiAncG9zdCcsXG4gICAgICBkYXRhOiB7XG4gICAgICAgIGJhc2tldDogYmFza2V0SWQsXG4gICAgICAgIGFjdGlvbjogKGFkZCA/ICdhZGQnIDogJ3JlbW92ZScpLFxuICAgICAgICB1cmxzOiB1cmxzXG4gICAgICB9LFxuICAgICAgY2FjaGU6IGZhbHNlLFxuICAgICAgc3VjY2VzczogZnVuY3Rpb24gKHJlc3ApIHtcbiAgICAgICAgJGNtRWxlbWVudC5kYXRhKCdjb3VudCcsIHJlc3AubGVuZ3RoKTtcbiAgICAgIH0sXG4gICAgICBlcnJvcjogZnVuY3Rpb24gKCkge1xuICAgICAgICAvLyBzaG93IGVycm9yIG5vdGlmaWNhdGlvblxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVxdWVzdFBkZigpIHtcbiAgICBsZXQgcGRmUXVhbGl0eSA9ICQodGhpcykuZGF0YSgnaW1hZ2UtcXVhbGl0eScpO1xuICAgIGxldCBwcmludE1hcmtzID0gICQodGhpcykuZGF0YSgncHJpbnQtbWFya3MnKSB8fCAnbm8nO1xuICAgIGxldCBsYW5ndWFnZSA9ICQoJ3NlbGVjdC5icm9jaHVyZS1sYW5ndWFnZScpLmNoaWxkcmVuKCdvcHRpb246c2VsZWN0ZWQnKS52YWwoKTtcbiAgICAkLmFqYXgoe1xuICAgICAgdXJsOiBhamF4SGFuZGxlclVybCxcbiAgICAgIHR5cGU6ICdnZXQnLFxuICAgICAgZGF0YToge1xuICAgICAgICBhY3Rpb246ICdwZGYnLFxuICAgICAgICBiYXNrZXQ6IGJhc2tldElkLFxuICAgICAgICBpbWFnZVF1YWxpdHk6IHBkZlF1YWxpdHksXG4gICAgICAgIHByaW50TWFya3M6IHByaW50TWFya3MsXG4gICAgICAgIGxhbmd1YWdlOiBsYW5ndWFnZVxuICAgICAgfSxcbiAgICAgIGNhY2hlOiBmYWxzZSxcbiAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgIENvb2tpZXMuc2V0KGJhc2tldElkICsgJy1kbGNlbnRlci13YWl0aW5nJywgZGF0YSwgeyBwYXRoOiAnLycgfSk7XG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdwcmVmTGFuZycsIGxhbmd1YWdlKTtcbiAgICAgICAgY3VycmVudFBoYXNlID0gJ3dhaXRpbmdUYXNrJztcbiAgICAgICAgcGRmUHJvZ3Jlc3MgPSAwO1xuICAgICAgICBwb2xsKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVTZW5kRGlhbG9nKCl7XG4gICAgbGV0ICRlbGVtID0gJCgnPGRpdiBpZD1cImNtLXNlbmQtZGlhbG9nXCIgY2xhc3M9XCJjbS1kaWFsb2dcIiBzdHlsZT1cImRpc3BsYXk6IG5vbmU7XCI+PC9kaXY+Jyk7XG4gICAgaWYgKCRjbUVsZW1lbnQuZmluZChibG9jayArICdfX3NlbmQtbGlua3MtZGlhbG9nLXRlbXBsYXRlJykubGVuZ3RoKSB7XG4gICAgICAkZWxlbS5hcHBlbmQoJGNtRWxlbWVudC5maW5kKGJsb2NrICsgJ19fc2VuZC1saW5rcy1kaWFsb2ctdGVtcGxhdGUnKS5jbG9uZSgpLmNoaWxkcmVuKCkpO1xuICAgICAgJCgnYm9keScpLmFwcGVuZCgkZWxlbSk7XG5cbiAgICAgICRkaWFsb2dFbGVtID0gJCgnI2NtLXNlbmQtZGlhbG9nJyk7XG4gICAgICAkZGlhbG9nRWxlbS5mYWRlSW4oKTtcblxuICAgICAgJGRpYWxvZ0VsZW0ub24oJ2NsaWNrJywgYmxvY2srJ19fY2xvc2UtZGlhbG9nJywgZnVuY3Rpb24oZSl7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgJGRpYWxvZ0VsZW0uZmFkZU91dCgpO1xuXG4gICAgICAgIC8vIHJlbW92ZSA/c2VuZExpbmtzPTFcbiAgICAgICAgbGV0IGN1clVybCA9IGRvY3VtZW50LmxvY2F0aW9uLmhyZWYuc3BsaXQoJz8nKTtcbiAgICAgICAgaWYod2luZG93Lmhpc3RvcnkucHVzaFN0YXRlKXtcbiAgICAgICAgICB3aW5kb3cuaGlzdG9yeS5wdXNoU3RhdGUobnVsbCwgbnVsbCwgY3VyVXJsWzBdKTtcbiAgICAgICAgfVxuXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBvcGVuU2VuZEZvcm0oKXtcbiAgICB2YXIgJGRpYWxvZ0VsZW0gPSAkKCcjY20tc2VuZC1kaWFsb2cnKTtcbiAgICBpZiAoISRkaWFsb2dFbGVtLmxlbmd0aCkge1xuICAgICAgY3JlYXRlU2VuZERpYWxvZygpO1xuICAgIH1lbHNle1xuICAgICAgJGRpYWxvZ0VsZW0uZmFkZUluKCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlRGlhbG9nKCkge1xuICAgIGxldCAkZWxlbSA9ICQoJzxkaXYgaWQ9XCJjbS1kaWFsb2dcIiBjbGFzcz1cInN0YXJ0ZWQgY20tZGlhbG9nXCIgc3R5bGU9XCJkaXNwbGF5OiBub25lO1wiPjwvZGl2PicpO1xuICAgIGlmICgkY21FbGVtZW50LmZpbmQoYmxvY2sgKyAnX19kaWFsb2ctdGVtcGxhdGUnKS5sZW5ndGgpIHtcbiAgICAgICRlbGVtLmFwcGVuZCgkY21FbGVtZW50LmZpbmQoYmxvY2sgKyAnX19kaWFsb2ctdGVtcGxhdGUnKS5jbG9uZSgpLmNoaWxkcmVuKCkpO1xuICAgICAgJCgnYm9keScpLmFwcGVuZCgkZWxlbSk7XG5cbiAgICAgICRkaWFsb2dFbGVtID0gJCgnI2NtLWRpYWxvZycpO1xuICAgICAgJGRpYWxvZ0VsZW0uZmFkZUluKCk7XG5cbiAgICAgICRkaWFsb2dFbGVtLm9uKCdjbGljaycsIGJsb2NrKydfX3Byb2dyZXNzLWFib3J0JywgZnVuY3Rpb24oKXtcbiAgICAgICAgQ29va2llcy5yZW1vdmUoYmFza2V0SWQgKyAnLWRsY2VudGVyLXdhaXRpbmcnLCB7IHBhdGg6ICcvJyB9KTtcbiAgICAgICAgJGRpYWxvZ0VsZW0uZmFkZU91dCgpO1xuICAgICAgICByZXNldERpYWxvZ0xvYWRpbmcoJGRpYWxvZ0VsZW0pO1xuICAgICAgfSk7XG5cbiAgICAgICRkaWFsb2dFbGVtLm9uKCdjbGljaycsIGJsb2NrKydfX2Nsb3NlLWRpYWxvZycsIGZ1bmN0aW9uKGUpe1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICRkaWFsb2dFbGVtLmZhZGVPdXQoKTtcbiAgICAgICAgcmVzZXREaWFsb2dMb2FkaW5nKCRkaWFsb2dFbGVtKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHJlc2V0RGlhbG9nTG9hZGluZygkZGlhbG9nRWxlbSkge1xuICAgICRkaWFsb2dFbGVtLmZpbmQoJy5jbS1kaWFsb2dfX3Byb2dyZXNzLXRleHQnKS50ZXh0KCcwJScpO1xuICAgICRkaWFsb2dFbGVtLmZpbmQoJy5jbS1kaWFsb2dfX3Byb2dyZXNzLWluZGljYXRvcicpLnN0b3AoKS5jc3MoJ3dpZHRoJywgJzAlJyk7XG4gIH1cblxuXG4gIGZ1bmN0aW9uIHBvbGxEb25lKGRhdGEpIHtcbiAgICAvLyBkZWxldGUgcHJvY2VzcyBjb29raWVcbiAgICBDb29raWVzLnJlbW92ZShiYXNrZXRJZCArICctZGxjZW50ZXItd2FpdGluZycsIHsgcGF0aDogJy8nIH0pO1xuICAgIC8vIGRvIHRoZSBkZWZhdWx0IGFjdGlvbnMgZm9yIGRlZmF1bHQgaW1wbGVtZW50YXRpb25cbiAgICAkZGlhbG9nRWxlbS5yZW1vdmVDbGFzcygnc3RhcnRlZCcpLmFkZENsYXNzKCdzdWNjZXNzJyk7XG4gICAgJGRpYWxvZ0VsZW0uZmluZChibG9jayArICdfX2RsbGluaycpLmF0dHIoJ2hyZWYnLCBkYXRhLnJldGRhdGEudXJsKS50ZXh0KGRhdGEucmV0ZGF0YS50ZXh0KTtcbiAgICAkZGlhbG9nRWxlbS5maW5kKCcuY20tZGlhbG9nX19wcm9ncmVzcy1pbmRpY2F0b3InKS5zdG9wKCkuYW5pbWF0ZSh7IHdpZHRoOiAnMTAwJScgfSwgeyBkdXJhdGlvbjogNTAwIH0pO1xuXG4gICAgLy9kb3dubG9hZCBQREYgY2xpY2sgZXZlbnRcbiAgICAkZGlhbG9nRWxlbS5vbignY2xpY2snLCBibG9jayArICdfX2RsbGluaycsIGZ1bmN0aW9uKGUpe1xuICAgICAgbGV0IGdhRXZlbnQgPSB7XG4gICAgICAgICdldmVudCc6ICdicm9jaHVyZUdlbmVyYXRlZCcsXG4gICAgICAgICdicm9jaHVyZVF1YWxpdHknOiBkYXRhLnBhcmFtcy5pbWFnZVF1YWxpdHksXG4gICAgICAgICdicm9jaHVyZURvd25sb2FkQ29udGVudHMnOiBkYXRhLnJldGRhdGEuaXRlbU5hbWVzXG4gICAgICB9O1xuICAgICAgZGF0YWxheWVyQWN0aW9ucy5wdXNoT2JqZWN0VG9EYXRhbGF5ZXIoZ2FFdmVudCk7XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBwb2xsRmFpbCgpIHtcbiAgICAvLyBzaG93IGVycm9yXG4gICAgQ29va2llcy5yZW1vdmUoYmFza2V0SWQgKyAnLWRsY2VudGVyLXdhaXRpbmcnLCB7IHBhdGg6ICcvJyB9KTtcbiAgICAkZGlhbG9nRWxlbS5yZW1vdmVDbGFzcygnc3RhcnRlZCcpLmFkZENsYXNzKCdlcnJvcicpO1xuICB9XG5cbiAgZnVuY3Rpb24gcG9sbFJ1bm5pbmcoZGF0YSkge1xuICAgIGxldCBwcm9ncmVzcyA9IE1hdGguZmxvb3IocGFyc2VGbG9hdChkYXRhLnJldGRhdGEucHJvZ3Jlc3MpKTtcbiAgICBzd2l0Y2ggKGN1cnJlbnRQaGFzZSkge1xuICAgIGNhc2UgJ3dhaXRpbmdUYXNrJzpcbiAgICAgIGN1cnJlbnRQaGFzZSA9ICdydW5uaW5nJztcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3J1bm5pbmcnOlxuICAgICAgaWYgKGRhdGEucmV0ZGF0YS5waGFzZSAmJiBkYXRhLnJldGRhdGEucGhhc2UgPT09ICdwZGYnKSB7XG4gICAgICAgIGN1cnJlbnRQaGFzZSA9ICdwZGYnO1xuICAgICAgICBwZXJjZW50UGVyUG9sbCA9ICg0NSAvIGRhdGEucGFyYW1zLnBhZ2VzLmxlbmd0aCkgKiA4O1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgY2FzZSAncGRmJzpcbiAgICAgIHBkZlByb2dyZXNzICs9IHBlcmNlbnRQZXJQb2xsO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgICAvLyBkaXNwbGF5UHJvZ3Jlc3MgdXNlcyBcInRydWVcIiBvciBzaW11bGF0ZWQgcHJvZ3Jlc3MgZGVwZW5kaW5nIGlmIGJnIHRhc2sgc3VwcG9ydHMgdHJ1ZVxuICAgIGxldCBkaXNwbGF5UHJvZ3Jlc3MgPSBkYXRhLnJldGRhdGEucGhhc2UgPyBwcm9ncmVzcyA6IE1hdGgubWluKE1hdGguZmxvb3IoMC41NSAqIHByb2dyZXNzICsgcGRmUHJvZ3Jlc3MpLCA5OSk7XG4gICAgJGRpYWxvZ0VsZW0uZmluZCgnLmNtLWRpYWxvZ19fcHJvZ3Jlc3MtdGV4dCcpLnRleHQoZGlzcGxheVByb2dyZXNzICsgJyUnKTtcbiAgICAkZGlhbG9nRWxlbS5maW5kKCcuY20tZGlhbG9nX19wcm9ncmVzcy1pbmRpY2F0b3InKS5zdG9wKCkuYW5pbWF0ZSh7IHdpZHRoOiBkaXNwbGF5UHJvZ3Jlc3MgKyAnJScgfSwgeyBkdXJhdGlvbjogNTAwIH0pO1xuICAgIHNldFRpbWVvdXQocG9sbCwgMjAwMCk7XG4gIH1cblxuICBmdW5jdGlvbiBwb2xsKCkge1xuICAgIGxldCBqb2JpZCA9IENvb2tpZXMuZ2V0KGJhc2tldElkICsgJy1kbGNlbnRlci13YWl0aW5nJyk7XG5cbiAgICBpZiAoam9iaWQgPT09IG51bGwgfHwgam9iaWQgPT09ICdudWxsJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgICRkaWFsb2dFbGVtID0gJCgnI2NtLWRpYWxvZycpO1xuICAgIGlmICghJGRpYWxvZ0VsZW0ubGVuZ3RoKSB7XG4gICAgICBjcmVhdGVEaWFsb2coKTtcbiAgICB9XG5cbiAgICBpZiAoISRkaWFsb2dFbGVtLmhhc0NsYXNzKCdzdGFydGVkJykpIHtcbiAgICAgICRkaWFsb2dFbGVtLnJlbW92ZUNsYXNzKCdlcnJvcicpLnJlbW92ZUNsYXNzKCdzdWNjZXNzJyk7XG4gICAgICAkZGlhbG9nRWxlbS5mYWRlSW4oKTtcbiAgICB9XG5cbiAgICAkLmFqYXgoe1xuICAgICAgdXJsOiBhamF4SGFuZGxlclVybCxcbiAgICAgIHR5cGU6ICdwb3N0JyxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgam9iaWQ6IGpvYmlkLFxuICAgICAgICBhY3Rpb246ICdnZXRwZGYnXG4gICAgICB9LFxuICAgICAgZGF0YVR5cGU6ICdqc29uJyxcbiAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgJiYgZGF0YSkge1xuICAgICAgICAgIHN3aXRjaCAoZGF0YS5zdGF0dXMpIHtcbiAgICAgICAgICBjYXNlICdkb25lJzpcbiAgICAgICAgICAgIHBvbGxEb25lKGRhdGEpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAncnVubmluZyc6XG4gICAgICAgICAgICBwb2xsUnVubmluZyhkYXRhKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ2ZhaWxlZCc6XG4gICAgICAgICAgICBwb2xsRmFpbChkYXRhKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBzZXRUaW1lb3V0KHBvbGwsIDIwMDApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzZXRUaW1lb3V0KHBvbGwsIDIwMDApO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgZXJyb3I6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy8gc2hvdyBlcnJvclxuICAgICAgICBDb29raWVzLnJlbW92ZShiYXNrZXRJZCArICctZGxjZW50ZXItd2FpdGluZycsIHsgcGF0aDogJy8nIH0pO1xuICAgICAgICAkZGlhbG9nRWxlbS5yZW1vdmVDbGFzcygnc3RhcnRlZCcpLmFkZENsYXNzKCdlcnJvcicpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gdG9nZ2xlQ2hpbGRMaXN0KCl7XG4gICAgbGV0IGxpc3RFbGVtID0gJCh0aGlzKS5jbG9zZXN0KCcubGktLWNhdGVnb3J5Jyk7XG4gICAgbGlzdEVsZW0uY2hpbGRyZW4oJ3VsJykudG9nZ2xlQ2xhc3MoJ2FjdGl2ZScpO1xuICB9XG5cbiAgZnVuY3Rpb24gaW5pdEV2ZW50cygpIHtcbiAgICAkY21FbGVtZW50XG4gICAgICAub24oJ2NsaWNrJywgYmxvY2sgKyAnX190b2dnbGUnLCB0b2dnbGVJdGVtKVxuICAgICAgLm9uKCdjbGljaycsIGJsb2NrICsgJ19fdG9nZ2xlLWNhdGVnb3J5JywgdG9nZ2xlSXRlbSlcbiAgICAgIC5vbignY2xpY2snLCBibG9jayArICdfX3JlcXVlc3QtcGRmJywgcmVxdWVzdFBkZilcbiAgICAgIC5vbignY2xpY2snLCBibG9jayArICdfX2NsZWFyJywgY2xlYXIpXG4gICAgICAub24oJ2NsaWNrJywgYmxvY2sgKyAnX190b2dnbGUtY2hpbGQtdWwnLCB0b2dnbGVDaGlsZExpc3QpXG4gICAgICAub24oJ2NsaWNrJywgYmxvY2sgKyAnX19zZW5kLWxpbmtzJywgb3BlblNlbmRGb3JtKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNoZWNrUGFyZW50cygpIHtcbiAgICAvLyBTZWxlY3QgcGFyZW50cyBvZiBjbG9zZXN0IHBhcmVudCBvZiBzZWxlY3RlZCBpdGVtc1xuICAgIGxldCBzZWxlY3RlZCA9ICRjbUVsZW1lbnQuZmluZChibG9jayArICdfX3RvZ2dsZTpjaGVja2VkJyk7XG4gICAgbGV0ICRwYXJlbnRJdGVtcyA9IHNlbGVjdGVkLmNsb3Nlc3QoYmxvY2sgKyAnX19saScpLnBhcmVudHMoYmxvY2sgKyAnX19saScpO1xuICAgIHNlbGVjdFBhcmVudHMoJHBhcmVudEl0ZW1zKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGluaXQoKSB7XG4gICAgLy8gQ29sbGVjdGlvbiBtYWtlciBwYWdlXG4gICAgJGNtRWxlbWVudCA9ICQoYmxvY2spO1xuICAgIGlmICgkY21FbGVtZW50Lmxlbmd0aCA+IDApIHtcbiAgICAgICRjbUVsZW1lbnQgPSAkKCRjbUVsZW1lbnRbMF0pOyAvLyBUaGVyZSBjYW4gb25seSBiZSBvbmVcblxuICAgICAgYWpheEhhbmRsZXJVcmwgPSAkY21FbGVtZW50LmRhdGEoJ2hhbmRsZXInKTtcbiAgICAgIGluaXRpYWxpemVyVXJsID0gJGNtRWxlbWVudC5kYXRhKCdpbml0aWFsaXplcicpO1xuICAgICAgYmFza2V0SWQgPSAkY21FbGVtZW50LmRhdGEoJ2Jhc2tldCcpIHx8IGJhc2tldElkO1xuXG4gICAgICBjaGVja1BhcmVudHMoKTtcbiAgICAgIGluaXRFdmVudHMoKTtcblxuICAgICAgaWYgKENvb2tpZXMuZ2V0KGJhc2tldElkICsgJy1kbGNlbnRlci13YWl0aW5nJykpIHtcbiAgICAgICAgLy8gc3RhcnQgcG9sbGluZ1xuICAgICAgICBwb2xsKCk7XG4gICAgICB9XG5cbiAgICAgIC8qIE9wZW4gc2VuZCBsaW5rcyBmb3JtIGlmOiBmb3JtIGhhcyBlcnJvcnMsIGVtYWlsIGlzIHNlbnQsIHNlbmQgZm9ybSBpcyByZXF1ZXN0ZWQgKi9cbiAgICAgIGlmKCQoYmxvY2srJ19fc2VudC1saW5rcy1lcnJvcicpLmxlbmd0aCA+IDAgfHwgJChibG9jaysnX19lbWFpbC1zZW50JykubGVuZ3RoID4gMCB8fCAkKGJsb2NrKydfX29wZW4tc2VuZC1saW5rcycpLmxlbmd0aCA+IDApe1xuICAgICAgICBvcGVuU2VuZEZvcm0oKTtcbiAgICAgIH1cblxuICAgICAgLy8gSWYgbGFuZ3VhZ2Ugc2VsZWN0ZWQgcHJldmlvdXNseSwgaW5pdCB0aGlzIHNlbGVjdGlvbiBvbiBsb2FkXG4gICAgICBpZiggJCgnLmJyb2NodXJlLWxhbmd1YWdlJykgKXtcbiAgICAgICAgbGV0IHByZWZMYW5nID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3ByZWZMYW5nJykgPyBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgncHJlZkxhbmcnKSA6IGZhbHNlO1xuICAgICAgICBpZiggcHJlZkxhbmcgKXtcbiAgICAgICAgICAkKCcuYnJvY2h1cmUtbGFuZ3VhZ2UnKS52YWwocHJlZkxhbmcpLnRyaWdnZXIoJ2NoYW5nZScpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICB9ZWxzZXsgLy8gQW55IHBhZ2VcbiAgICAgIGxldCAkaW5pdENtRWxlbSA9ICQoYmxvY2sgKyAnX19pbml0LWNtLWNhcnQnKTtcbiAgICAgIGlmKCRpbml0Q21FbGVtLmxlbmd0aCA+IDApe1xuICAgICAgICAvLyBJZiBjb2xsZWN0aW9uIG1ha2VyIG11c3QgYmUgaW5pdGlhbGl6ZWQgZm9yIGN1c3RvbSBwYWdlXG4gICAgICAgIGFqYXhIYW5kbGVyVXJsID0gJCgnYm9keScpLmRhdGEoJ2NtLWhhbmRsZXInKTtcbiAgICAgICAgaW5pdGlhbGl6ZXJVcmwgPSAkKCdib2R5JykuZGF0YSgnY20taW5pdGlhbGl6ZXInKTtcblxuICAgICAgICBpbml0Q2FydCgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgaW5pdDogaW5pdFxuICB9XG59KSgpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGNvbGxlY3Rpb25NYWtlcjtcbiIsIi8vICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyAqIENoZWNrb3V0IHRvZ2dsZSBjdXN0b20gb3JkZXJlciBpbmZvXG4vLyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4ndXNlIHN0cmljdCc7XG5cbmltcG9ydCAkIGZyb20gJ2pxdWVyeSc7XG5cbnZhciBjdXN0b21PcmRlcmVySW5mbyA9IChmdW5jdGlvbigpIHtcbiAgZnVuY3Rpb24gaW5pdCgpe1xuXG5cbiAgICAkKCdpbnB1dFtuYW1lPWRlbGl2ZXJ5X2FkZHJlc3NdJykub24oJ2NoYW5nZScsIGZ1bmN0aW9uKCl7XG4gICAgICAvL3Nob3cgY3VzdG9tIGNvbnRhY3QgaW5mbyBmaWVsZHNcbiAgICAgICQoJy5jaGVja291dF9fZGVsaXZlcnktYWRkcmVzcy1mb3JtJykudG9nZ2xlKCk7XG5cbiAgICAgIGlmKCQodGhpcykuaXMoJzpjaGVja2VkJykpe1xuICAgICAgICAvL2Rpc2FibGUgcHJlZmlsbGVkIGZpZWxkcywgY3VzdG9tIGNvbnRhY3QgaW5mbyBmaWVsZHMgYXJlIHVzZWQgaW5zdGVhZFxuICAgICAgICAkKCcuanMtZm9ybV9fZmllbGQtcHJlZmlsbGVkJykuYXR0cignZGlzYWJsZWQnLHRydWUpO1xuICAgICAgICAkKCcuanMtZm9ybV9fZmllbGQtY3VzdG9tLWZpZWxkJykuYXR0cignZGlzYWJsZWQnLGZhbHNlKTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICAvL3JldmVyc2UgcHJldmlvdXNcbiAgICAgICAgJCgnLmpzLWZvcm1fX2ZpZWxkLXByZWZpbGxlZCcpLmF0dHIoJ2Rpc2FibGVkJyxmYWxzZSk7XG4gICAgICAgICQoJy5qcy1mb3JtX19maWVsZC1jdXN0b20tZmllbGQnKS5hdHRyKCdkaXNhYmxlZCcsdHJ1ZSk7XG4gICAgICB9XG4gICAgfSlcbiAgfVxuICByZXR1cm4ge1xuICAgIGluaXQ6IGluaXRcbiAgfVxufSkoKTtcblxubW9kdWxlLmV4cG9ydHMgPSBjdXN0b21PcmRlcmVySW5mbztcbiIsIi8vICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyAqIFJlcGxhY2UgZGVmYXVsdCBzZWxlY3RzIGJ5IGN1c3RvbSBvbmVzXG4vLyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4ndXNlIHN0cmljdCc7XG5cbmltcG9ydCAkIGZyb20gJ2pxdWVyeSc7XG5cbnZhciBzZXRTZWxlY3RWYWx1ZSA9IGZ1bmN0aW9uKCR0ZXh0aG9sZGVyLHZhbHVlKXtcbiAgJHRleHRob2xkZXIuZW1wdHkoKS5hcHBlbmQodmFsdWUpO1xufTtcblxudmFyIGNyZWF0ZUN1c3RvbVNlbGVjdHMgPSAoZnVuY3Rpb24oKSB7XG5cbiAgZnVuY3Rpb24gaW5pdCgpe1xuICAgIHZhciAkb2dzZWxlY3QgPSAkKCcuanMtY3VzdG9tLXNlbGVjdCcpO1xuXG4gICAgaWYoJG9nc2VsZWN0LmZpbmQoJ29wdGlvbicpLmxlbmd0aCl7XG4gICAgICAkb2dzZWxlY3QuZWFjaChmdW5jdGlvbigpe1xuICAgICAgICB2YXIgJHRleHRob2xkZXIgPSAkKCc8c3BhbiBjbGFzcz1cImN1c3RvbS1zZWxlY3RfX3RleHQganMtY3VzdG9tLXNlbGVjdC10ZXh0aG9sZGVyXCI+PC9zcGFuPicpO1xuICAgICAgICB2YXIgJHdyYXBwZXIgPSAkKCc8ZGl2IGNsYXNzPVwiY3VzdG9tLXNlbGVjdCBqcy1jdXN0b20tc2VsZWN0LXdyYXBwZXJcIj48L2Rpdj4nKTtcbiAgICAgICAgdmFyICRzZWxlY3QgPSAkKCc8ZGl2IGNsYXNzPVwiY3VzdG9tLXNlbGVjdF9fZHJvcGRvd24ganMtY3VzdG9tLXNlbGVjdC1kcm9wZG93blwiPjwvZGl2PicpO1xuXG4gICAgICAgIGlmKCQodGhpcykuaGFzQ2xhc3MoJ2Zvcm1fX2ZpZWxkLXNlbGVjdC1jdXN0b20tZnVsbC13aWR0aCcpKXtcbiAgICAgICAgICAkd3JhcHBlci5hZGRDbGFzcygnY3VzdG9tLXNlbGVjdC1mdWxsLXdpZHRoJyk7XG4gICAgICAgIH1cblxuICAgICAgICAkKHRoaXMpLndyYXAoJHdyYXBwZXIpLmJlZm9yZSgkc2VsZWN0LCR0ZXh0aG9sZGVyKTtcbiAgICAgICAgJHRleHRob2xkZXIuZW1wdHkoKS5hcHBlbmQoJCh0aGlzKS5maW5kKCdvcHRpb24nKVswXS5pbm5lckhUTUwpO1xuXG4gICAgICAgICQoJCh0aGlzKSkub24oJ2NoYW5nZScsZnVuY3Rpb24oKXtcbiAgICAgICAgICAkdGV4dGhvbGRlci5lbXB0eSgpLmFwcGVuZCgkKHRoaXMpLmZpbmQoJ29wdGlvbjpzZWxlY3RlZCcpLnRleHQoKSk7XG4gICAgICAgICAgc2V0U2VsZWN0VmFsdWUoJCh0aGlzKS5maW5kKCcuanMtY3VzdG9tLXNlbGVjdC10ZXh0aG9sZGVyJyksICQodGhpcykuZmluZCgnb3B0aW9uOnNlbGVjdGVkJykudGV4dCgpKTtcbiAgICAgICAgfSk7XG5cbiAgICAgIH0pO1xuXG4gICAgICAvL01ha2Ugc3VyZSBjdXN0b20gc2VsZWN0cyBoYXZlIGNvcnJlY3QgdmFsdWUgc2hvd24gb24gbG9hZFxuICAgICAgJCgnLmpzLWN1c3RvbS1zZWxlY3Qtd3JhcHBlcicpLmVhY2goZnVuY3Rpb24oKXtcbiAgICAgICAgc2V0U2VsZWN0VmFsdWUoJCh0aGlzKS5maW5kKCcuanMtY3VzdG9tLXNlbGVjdC10ZXh0aG9sZGVyJyksICQodGhpcykuZmluZCgnb3B0aW9uOnNlbGVjdGVkJykudGV4dCgpKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICByZXR1cm4ge1xuICAgIGluaXQ6IGluaXRcbiAgfVxufSkoKTtcblxubW9kdWxlLmV4cG9ydHMgPSBjcmVhdGVDdXN0b21TZWxlY3RzO1xuIiwiLy8gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vICogRmlsdGVyIG1hY2hpbmUgYWNjZXNzb3JpZXMgYnkgYWNjZXNzb3J5IGxldmVsXG4vLyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4ndXNlIHN0cmljdCc7XG5cbmltcG9ydCAkIGZyb20gJ2pxdWVyeSc7XG5cbnZhciBmaWx0ZXJNYWNoaW5lQWNjZXNzb3JpZXMgPSAoZnVuY3Rpb24oKSB7XG4gIGZ1bmN0aW9uIGluaXQoKXtcblxuICAgIC8qXG4gICAgLS0tIG9sZCBjb2RlIGZvciBjbGFzc2lmaWNhdGlvbiBsZXZlbHMgLS0tXG4gICAgJCgnW2RhdGEtY2xhc3NpZmljYXRpb24hPWJhc2ljXScpLnBhcmVudCgnLmpzLWFjY2Vzc29yaWVzLWxpc3QnKS5oaWRlKCk7XG5cblxuICAgICQoJy5qcy1zZWxlY3QtYWNjZXNzb3J5LWxldmVsJykub24oJ2NoYW5nZScsZnVuY3Rpb24oKXtcbiAgICAgIHZhciBsZXZlbCA9ICQodGhpcykudmFsKCk7XG4gICAgICB2YXIgJHBhcmVudCA9ICQodGhpcykucGFyZW50cygnLmpzLWFjY2Vzc29yaWVzLWNvbnRhaW5lcicpO1xuICAgICAgJHBhcmVudC5maW5kKCcuanMtYWNjZXNzb3JpZXMtbGlzdCcpLmhpZGUoKTtcbiAgICAgICRwYXJlbnQuZmluZCgnW2RhdGEtY2xhc3NpZmljYXRpb249JytsZXZlbCsnXScpLnBhcmVudCgnLmpzLWFjY2Vzc29yaWVzLWxpc3QnKS5zaG93KCk7XG4gICAgfSk7XG4gICAgKi9cblxuICAgICQoJy5qcy1zZWxlY3QtYWNjZXNzb3J5LWxldmVsJykub24oJ2NoYW5nZScsZnVuY3Rpb24oKXtcbiAgICAgIHZhciBhY2Nlc3Nvcmllc0FyciA9ICQodGhpcykudmFsKCkgPyAkKHRoaXMpLnZhbCgpLnNwbGl0KCcsJykgOiBbXTtcbiAgICAgIHZhciAkYWNjZXNzb3J5SXRlbXMgPSAkKCcuanMtYWNjZXNzb3J5aXRlbScpO1xuXG4gICAgICAkYWNjZXNzb3J5SXRlbXMuc2hvdygpO1xuICAgICAgaWYoYWNjZXNzb3JpZXNBcnIubGVuZ3RoKXtcbiAgICAgICAgJGFjY2Vzc29yeUl0ZW1zLmZpbHRlcihmdW5jdGlvbihpLCBlbCl7XG4gICAgICAgICAgaWYoYWNjZXNzb3JpZXNBcnIuaW5kZXhPZigkKGVsKS5hdHRyKCdkYXRhLXV1aWQnKSkgPT09IC0xKXtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIHJldHVybiBmYWxzZTtcbiAgICAgICAgfSkuaGlkZSgpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy90b2RvIGRvIHRoaXMgcHJvcGVybHlcbiAgICB2YXIgbGFuZyA9ICQoJ2JvZHknKS5hdHRyKCdkYXRhLWxhbmcnKTtcbiAgICB2YXIgbm9Qcm9kdWN0c1RleHQgPSBsYW5nID09PSAnZmknID8gJ0VpIHR1b3R0ZWl0YScgOiAnTm8gcHJvZHVjdHMnO1xuICAgICQoJy5hY2Nlc3NvcnlsaXN0JykuZWFjaChmdW5jdGlvbigpe1xuICAgICAgaWYoJCh0aGlzKS5maW5kKCdsaTp2aXNpYmxlJykubGVuZ3RoID09PSAwKXtcbiAgICAgICAgJCh0aGlzKS5hcHBlbmQoJzxsaSBjbGFzcz1cImFjY2Vzc29yeWxpc3RfX25vLXByb2R1Y3RzXCI+Jytub1Byb2R1Y3RzVGV4dCsnPC9saT4nKTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICAkKHRoaXMpLmZpbmQoJy5hY2Nlc3NvcnlsaXN0X19uby1wcm9kdWN0cycpLnJlbW92ZSgpO1xuICAgICAgfVxuICAgIH0pXG4gIH1cbiAgcmV0dXJuIHtcbiAgICBpbml0OiBpbml0XG4gIH1cbn0pKCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZmlsdGVyTWFjaGluZUFjY2Vzc29yaWVzO1xuIiwiLy8gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vICogRmlsdGVyIG5ld3Ncbi8vICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbid1c2Ugc3RyaWN0JztcblxuaW1wb3J0ICQgZnJvbSAnanF1ZXJ5JztcblxudmFyIGZpbHRlck5ld3MgPSAoZnVuY3Rpb24oKSB7XG4gIGZ1bmN0aW9uIGluaXQoKXtcblxuICAgIHZhciAkaW5wdXRzID0gJCgnW2RhdGEtZmlsdGVyZm9yXScpO1xuICAgIHZhciBhbGxNYWNoaW5lcyA9IHttYWNoaW5lczogW119O1xuXG4gICAgLy9nZXQgYWxsIG1hY2hpbmUgdmFsdWVzIGZyb20gc2VsZWN0XG4gICAgJCgnW2RhdGEtZmlsdGVyZm9yPVwicmVsYXRlZG1hY2hpbmVzXCJdIG9wdGlvbicpLmVhY2goZnVuY3Rpb24oKVxuICAgIHtcbiAgICAgIGlmKCQodGhpcykudmFsKCkgIT09ICcnKSBhbGxNYWNoaW5lcy5tYWNoaW5lcy5wdXNoKHtpZDogJCh0aGlzKS52YWwoKX0pO1xuICAgIH0pO1xuXG4gICAgJGlucHV0cy5vbignY2hhbmdlJywgZnVuY3Rpb24oKXtcbiAgICAgIHZhciBmaWx0ZXJzID0ge2NoZWNrYm94ZXM6IFtdLCBzZWxlY3RzOiBbXX07XG4gICAgICB2YXIgJG5ld3NJdGVtcyA9ICQoJy5qcy1uZXdzbGlzdF9fbGlzdC1pdGVtJyk7XG4gICAgICAkaW5wdXRzLmVhY2goZnVuY3Rpb24oKXtcbiAgICAgICAgdmFyIGZpbHRlciA9ICQodGhpcykuYXR0cignZGF0YS1maWx0ZXJmb3InKTtcbiAgICAgICAgdmFyIHZhbCA9ICQodGhpcykudmFsKCk7XG5cbiAgICAgICAgaWYoJCh0aGlzKS5pcygnOmNoZWNrYm94Jykpe1xuICAgICAgICAgIGlmKCQodGhpcykuaXMoJzpjaGVja2VkJykpIHtcbiAgICAgICAgICAgIGZpbHRlcnMuY2hlY2tib3hlcy5wdXNoKHtmaWx0ZXI6IGZpbHRlciwgdmFsdWU6IHZhbH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmKCQodGhpcykuaXMoJ3NlbGVjdCcpKXtcbiAgICAgICAgICBpZih2YWwgIT09ICcnKXtcbiAgICAgICAgICAgIGZpbHRlcnMuc2VsZWN0cy5wdXNoKHtmaWx0ZXI6IGZpbHRlciwgdmFsdWU6IHZhbH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG5cblxuICAgICAgJG5ld3NJdGVtcy5oaWRlKCk7XG5cbiAgICAgICRuZXdzSXRlbXMuZmlsdGVyKGZ1bmN0aW9uKCl7XG4gICAgICAgIHZhciBlbGVtZW50ID0gJCh0aGlzKTtcbiAgICAgICAgdmFyIGZvdW5kID0gZmFsc2U7XG5cbiAgICAgICAgaWYoZmlsdGVycy5jaGVja2JveGVzLmxlbmd0aCl7XG4gICAgICAgICAgJC5lYWNoKGZpbHRlcnMuY2hlY2tib3hlcywgZnVuY3Rpb24oKXtcbiAgICAgICAgICAgIGlmKGVsZW1lbnQuYXR0cignZGF0YS1maWx0ZXItdHlwZScpLmluZGV4T2YodGhpcy52YWx1ZSkgPiAtMSkge1xuICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7XG4gICAgICAgICAgICAgIC8vcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIC8vaWYgbWFjaGluZSBpcyBzZWxlY3RlZCBnZXQgYWxsIG1hY2hpbmUgcmVsYXRlZCBuZXdzXG4gICAgICAgIGlmKGZpbHRlcnMuc2VsZWN0cy5sZW5ndGggJiYgZmlsdGVycy5zZWxlY3RzLmxlbmd0aCA+IDAgKXtcbiAgICAgICAgICAkLmVhY2goZmlsdGVycy5zZWxlY3RzLCBmdW5jdGlvbigpe1xuICAgICAgICAgICAgaWYoZWxlbWVudC5hdHRyKCdkYXRhLWZpbHRlci1yZWxhdGVkbWFjaGluZXMnKS5pbmRleE9mKHRoaXMudmFsdWUpID4gLTEpIHtcbiAgICAgICAgICAgICAgZm91bmQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKGZpbHRlcnMuc2VsZWN0cy5sZW5ndGggPT09IDApe1xuICAgICAgICAgIC8vIDAgPT09IEFMTCBNQUNISU5FUyBzZWxlY3RlZCA6IGZpbHRlciB0aHJvdWdoIGFsbCB0aGUgbmV3cyBhbmQgZ2V0IG9uZXMgd2l0aCBtYWNoaW5lIGluIHJlbGF0ZWRtYWNoaW5lcyBkYXRhc2V0XG4gICAgICAgICAgJC5lYWNoKGFsbE1hY2hpbmVzLm1hY2hpbmVzLCBmdW5jdGlvbigpe1xuICAgICAgICAgICAgaWYoZWxlbWVudC5hdHRyKCdkYXRhLWZpbHRlci1yZWxhdGVkbWFjaGluZXMnKS5pbmRleE9mKHRoaXMuaWQpID4gLTEpIHtcbiAgICAgICAgICAgICAgZm91bmQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmb3VuZDtcbiAgICAgIH0pLnNob3coKTtcblxuICAgIH0pO1xuXG4gIH1cbiAgcmV0dXJuIHtcbiAgICBpbml0OiBpbml0XG4gIH1cbn0pKCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZmlsdGVyTmV3cztcbiIsIi8vICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyAqIGltYWdlIHBvcHVwXG4vLyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4ndXNlIHN0cmljdCc7XG5cbmltcG9ydCAkIGZyb20gJ2pxdWVyeSc7XG5pbXBvcnQgJ21hZ25pZmljLXBvcHVwJztcblxuY29uc3QgbWFnbmlmaWNQb3B1cCA9IHtcbiAgaW5pdChqc0Jsb2NrKSB7XG4gICAgdmFyICRpdGVtcyA9ICQoanNCbG9jayk7XG5cblxuICAgICRpdGVtcy5lYWNoKGZ1bmN0aW9uKCkge1xuICAgICAgdmFyICRpdGVtID0gJCh0aGlzKSxcbiAgICAgICAgb3B0aW9ucyA9IC8qJGl0ZW0uZGF0YSgnbWZwLW9wdGlvbnMnKSove3R5cGU6ICdpbWFnZScsIHNyYzogJGl0ZW0uZGF0YSgncG9wdXBpbWFnZScpfSxcbiAgICAgICAgc2V0dGluZ3MgPSB7XG4gICAgICAgICAgJ2l0ZW1zJzogbnVsbFxuICAgICAgICB9LFxuICAgICAgICBpbmxpbmVPbkluaXQgPSAkaXRlbS5kYXRhKCdtZnAtaW5saW5lLW9uLWluaXQnKTtcblxuICAgICAgLy8gT3BlbiB0aGVzZSBpbW1lZGlhdGVseVxuICAgICAgaWYgKGlubGluZU9uSW5pdCkge1xuICAgICAgICAkLm1hZ25pZmljUG9wdXAub3Blbih7XG4gICAgICAgICAgJ2l0ZW1zJzoge1xuICAgICAgICAgICAgJ3NyYyc6ICRpdGVtLFxuICAgICAgICAgICAgLy8nc3JjJzogJzxkaXY+dGVzdDwvZGl2PicsXG4gICAgICAgICAgICAndHlwZSc6ICdpbmxpbmUnLFxuICAgICAgICAgICAgJ21pZENsaWNrJzogdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKG9wdGlvbnMpIHtcbiAgICAgICAgc2V0dGluZ3MuaXRlbXMgPSBvcHRpb25zO1xuICAgICAgICAkaXRlbS5tYWduaWZpY1BvcHVwKHNldHRpbmdzKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBtYWduaWZpY1BvcHVwO1xuIiwiLy8gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vICogbWFjaGluZSBzZWFyY2hcbi8vICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbid1c2Ugc3RyaWN0JztcblxuaW1wb3J0ICQgZnJvbSAnanF1ZXJ5JztcbmNvbnN0IE11c3RhY2hlID0gcmVxdWlyZSgnbXVzdGFjaGUnKTtcblxubGV0IGZpbHRlck1hY2hpbmVzID0gKGZ1bmN0aW9uKCkge1xuXG4gIGxldCByZXF1ZXN0ID0gKGRhdGEgPSB7fSwgdHlwZSA9ICdHRVQnKSA9PiB7XG4gICAgbGV0IGhhbmRsZXIgPSAkKCdib2R5JykuZGF0YSgnY20taGFuZGxlcicpO1xuXG4gICAgaWYgKGhhbmRsZXIpIHtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgICAkLmFqYXgoe1xuICAgICAgICAgIHVybDogaGFuZGxlcixcbiAgICAgICAgICBkYXRhLFxuICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgY2FjaGU6IGZhbHNlXG4gICAgICAgIH0pLmRvbmUoKHJlcykgPT4ge1xuICAgICAgICAgIHJlc29sdmUocmVzKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH07XG5cbiAgbGV0IF9nZXRDYXJ0SXRlbXMgPSAoKSA9PiB7XG4gICAgcmV0dXJuIHJlcXVlc3QoeyBhY3Rpb246ICdsb2FkQ2FydCcgfSk7XG4gIH07XG5cbiAgbGV0IF91cGRhdGVDYXJ0SXRlbSA9ICgkaW5wdXQpID0+IHtcbiAgICBpZiAoJGlucHV0ICYmICRpbnB1dC52YWwoKSkge1xuICAgICAgbGV0IGFjdGlvbiA9ICRpbnB1dC5wcm9wKCdjaGVja2VkJykgPyAnYWRkJyA6ICdyZW1vdmUnO1xuICAgICAgbGV0IHVybHMgPSBbXTtcbiAgICAgIGxldCBiYXNrZXQgPSAnZGVmYXVsdC1iYXNrZXQnO1xuXG4gICAgICB1cmxzLnB1c2goJGlucHV0LnZhbCgpKTtcblxuICAgICAgcmVxdWVzdCh7IGFjdGlvbiwgdXJscywgYmFza2V0IH0sICdQT1NUJyk7XG4gICAgfVxuICB9O1xuXG4gIGZ1bmN0aW9uIGluaXQoKXtcbiAgICBpZigkKCcucHJvZHVjdHMnKS5sZW5ndGgpe1xuICAgICAgJCgnLmpzLWNvbnRlbnQtc2VhcmNoLXRleHQnKS5vbigna2V5dXAnLGZ1bmN0aW9uKCl7XG4gICAgICAgIGxldCBzZWFyY2hUZXJtID0gJCh0aGlzKS52YWwoKTtcblxuICAgICAgICAkLmFqYXgoe1xuICAgICAgICAgICdkYXRhJzogJ3NlYXJjaD0nK3NlYXJjaFRlcm0rJyZzdGFnZS1sYW5ndWFnZT0nKyQoJ2JvZHknKS5kYXRhKCdsYW5ndWFnZScpLFxuICAgICAgICAgICd1cmwnOiAnL3N0YWdlLWFqYXgvbWFjaGluZS1zZWFyY2gnLFxuICAgICAgICAgICdzdWNjZXNzJzogZnVuY3Rpb24oZGF0YSl7XG4gICAgICAgICAgICBsZXQgdGVtcGxhdGUgPSAkKCcjcHJvZHVjdC1saXN0JykuaHRtbCgpO1xuICAgICAgICAgICAgbGV0IHJlc3VsdCA9ICcnO1xuICAgICAgICAgICAgcmVzdWx0ICs9IE11c3RhY2hlLnJlbmRlcih0ZW1wbGF0ZSwge2l0ZW1zOiBkYXRhLm1hY2hpbmVzTGlzdCwgaGVhZGluZzogZGF0YS5tYWNoaW5lc0hlYWRpbmd9KTtcbiAgICAgICAgICAgIGlmKGRhdGEubG93SW1wb3J0YW5jZU1hY2hpbmVzTGlzdC5sZW5ndGgpe1xuICAgICAgICAgICAgICByZXN1bHQgKz0gTXVzdGFjaGUucmVuZGVyKHRlbXBsYXRlLCB7aXRlbXM6IGRhdGEubG93SW1wb3J0YW5jZU1hY2hpbmVzTGlzdCwgaGVhZGluZzogZGF0YS5sb3dJbXBvcnRhbmNlTWFjaGluZXNIZWFkaW5nLCBpc0xvd0ltcG9ydGFuY2U6IHRydWV9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc3VsdCArPSBNdXN0YWNoZS5yZW5kZXIodGVtcGxhdGUsIHtpdGVtczogZGF0YS5hY2Nlc3Nvcmllc0xpc3QsIGhlYWRpbmc6IGRhdGEuYWNjZXNzb3JpZXNIZWFkaW5nfSk7XG5cbiAgICAgICAgICAgIC8vIFJlbmRlciBzZWFyY2ggcmVzdWx0c1xuICAgICAgICAgICAgJCgnLmxheW91dF9fbWFpbicpLmVtcHR5KCkuYXBwZW5kKHJlc3VsdCk7XG5cbiAgICAgICAgICAgIGxldCAkY2hlY2tCb3hFbGVtZW50ID0gJCgnLmpzLWNvbGxlY3Rpb24tbWFrZXJfX2NoZWNrYm94LWNhcnQtdG9nZ2xlJyk7XG5cbiAgICAgICAgICAgIC8vIFNldCBpdGVtcyBhcyBjaGVja2VkIGlmIGluIGNhcnRcbiAgICAgICAgICAgIF9nZXRDYXJ0SXRlbXMoKS50aGVuKChjYXJ0KSA9PiB7XG4gICAgICAgICAgICAgICQuZWFjaCgkY2hlY2tCb3hFbGVtZW50LCAoaSwgaW5wdXQpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgJGlucHV0ID0gJChpbnB1dCk7XG4gICAgICAgICAgICAgICAgbGV0IGlkID0gJGlucHV0LnZhbCgpO1xuXG4gICAgICAgICAgICAgICAgaWYoJC5pbkFycmF5KGlkLCBjYXJ0KSAhPT0gLTEpe1xuICAgICAgICAgICAgICAgICAgJGlucHV0LnByb3AoJ2NoZWNrZWQnLCB0cnVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIC8vVXBkYXRlIGNhcnQgd2hlbiBzdGF0ZSBjaGFuZ2VzXG4gICAgICAgICAgICAkY2hlY2tCb3hFbGVtZW50Lm9uKCdjaGFuZ2UnLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgX3VwZGF0ZUNhcnRJdGVtKCQodGhpcykpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBpbml0OiBpbml0XG4gIH1cbn0pKCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZmlsdGVyTWFjaGluZXM7XG4iLCIvLyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gKiBNb2JpbGUgbmF2aWdhdGlvbiBmdW5jdGlvbmFsaXR5XG4vLyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4ndXNlIHN0cmljdCc7XG5cbmltcG9ydCAkIGZyb20gJ2pxdWVyeSc7XG5cbnZhciBpbml0TmF2ID0gKGZ1bmN0aW9uKCkge1xuXG4gIGZ1bmN0aW9uIGJpbmROYXZDbGlja3MoKXtcbiAgICAvL2FkZCBjbGljayBldmVudCBoYW5kbGVyIGZvciBtb2JpbGUgbmF2XG4gICAgJCgnLmpzLW5hdl9fbGkuaGFzLWNoaWxkcmVuOm5vdChcIi5ib3VuZFwiKScpLmFkZENsYXNzKCdib3VuZCcpLmNsaWNrKGZ1bmN0aW9uKCl7XG4gICAgICAkKHRoaXMpLmZpbmQoJ3VsJykudG9nZ2xlQ2xhc3MoJ29wZW4nKTtcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGluaXQoKXtcblxuICAgIHZhciAkZXh0cmFuZXROYXYgPSAkKCcuanMtbmF2LWV4dHJhbmV0Jyk7XG4gICAgdmFyICRtYWluTmF2ID0gJCgnLmpzLW5hdi1tYWluJyk7XG4gICAgdmFyICRleHRyYW5ldE5hdlRvZ2dsZSA9ICQoJy5qcy1uYXYtdG9nZ2xlLWV4dHJhbmV0Jyk7XG4gICAgdmFyICRtYWluTmF2VG9nZ2xlID0gJCgnLmpzLW5hdi10b2dnbGUtbWFpbicpO1xuXG4gICAgLy90b2dnbGUgbGFuZ3VhZ2UgbmF2XG4gICAgJCgnLmpzLW1pbmluYXZfX2l0ZW1fX2xhbmd1YWdlLW1lbnUtdG9nZ2xlJykub24oJ2NsaWNrJywgZnVuY3Rpb24gKGUpIHtcbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICQodGhpcykuc2libGluZ3MoJ3NlbGVjdCcpLnRvZ2dsZUNsYXNzKCdhY3RpdmUnKTtcbiAgICB9KTtcblxuICAgIC8vdG9nZ2xlIGV4dHJhbmV0IG5hdlxuICAgICRleHRyYW5ldE5hdlRvZ2dsZS5jbGljayhmdW5jdGlvbigpe1xuICAgICAgJGV4dHJhbmV0TmF2LnRvZ2dsZSgpO1xuICAgICAgJG1haW5OYXYuaGlkZSgpO1xuXG4gICAgICAvL2ZvciB0aGUgY2xvc2VkL29wZW4gdG9nZ2xlIGljb24gYW5pbWF0aW9uXG4gICAgICAkKCcuanMtbW9iaWxlLW5hdi1jaGVja2JveCcpLnByb3AoJ2NoZWNrZWQnLGZhbHNlKTtcbiAgICB9KTtcblxuICAgIC8vdG9nZ2xlIG1haW4gbmF2XG4gICAgJG1haW5OYXZUb2dnbGUuY2xpY2soZnVuY3Rpb24oKXtcbiAgICAgICRtYWluTmF2LnRvZ2dsZSgpO1xuICAgICAgJGV4dHJhbmV0TmF2LmhpZGUoKTtcbiAgICB9KTtcblxuXG4gICAgaWYoJCh3aW5kb3cpLndpZHRoKCkgPCAxMjAwKXtcbiAgICAgIGJpbmROYXZDbGlja3MoKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBpbml0OiBpbml0XG4gIH1cbn0pKCk7XG5cbm1vZHVsZS5leHBvcnRzID0gaW5pdE5hdjtcblxuIiwiLy8gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vICogRmlsdGVyIGRvd25sb2FkYWJsZSBtYXRlcmlhbCBieSBsYW5ndWFnZVxuLy8gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgJCBmcm9tICdqcXVlcnknO1xuXG52YXIgc2VsZWN0TWF0ZXJpYWxMYW5ndWFnZSA9IChmdW5jdGlvbigpIHtcblxuICBmdW5jdGlvbiBpbml0KCl7XG5cblxuICAgIHZhciBwYWdlTGFuZyA9ICQoJ2JvZHknKS5kYXRhKCdsYW5ndWFnZScpO1xuICAgIHZhciAkbWF0ZXJpYWxJdGVtID0gJCgnLmpzLWRvd25sb2FkYWJsZS1tYXRlcmlhbC1pdGVtJyk7XG4gICAgdmFyIHJlZ2V4ID0gJyc7XG4gICAgdmFyIGxhbmdzID0gJyc7XG4gICAgLy9ieSBkZWZhdWx0IHNob3cgb25seSBkb2N1bWVudHMgd2l0aCBjdXJyZW50IHBhZ2UgbGFuZ3VhZ2VcbiAgICAkbWF0ZXJpYWxJdGVtLmVhY2goZnVuY3Rpb24oKXtcbiAgICAgIC8vZmlsdGVyIGZpbGVzIGZvciBjdXJyZW50IGxhbmd1YWdlXG4gICAgICAvL2RhdGFzZXQgZGF0YS1sYW5ndWFnZXNcbiAgICAgIC8vIGZvcm1hdCAnZmksZW4sc3YnXG4gICAgICBsYW5ncyA9IHRoaXMuZGF0YXNldC5sYW5ndWFnZXM7XG4gICAgICByZWdleCA9IG5ldyBSZWdFeHAoJ1xcXFxiJyArIHBhZ2VMYW5nICsgJ1xcXFxiJyk7XG4gICAgICBpZighbGFuZ3MubWF0Y2gocmVnZXgpKSAkKHRoaXMpLmhpZGUoKTtcbiAgICB9KTtcblxuICAgIC8vc2hvdyBkb2N1bWVudHMgYnkgc2VsZWN0ZWQgbGFuZ3VhZ2VcbiAgICAkKCcuanMtbGFuZy1zZWxlY3QnKS5jaGFuZ2UoZnVuY3Rpb24oKXtcbiAgICAgIHZhciBzZWxlY3RlZExhbmcgPSAkKHRoaXMpLnZhbCgpO1xuICAgICAgaWYoc2VsZWN0ZWRMYW5nICE9PSAnYWxsJyl7XG4gICAgICAgICRtYXRlcmlhbEl0ZW0uaGlkZSgpO1xuICAgICAgICAkbWF0ZXJpYWxJdGVtLmVhY2goZnVuY3Rpb24oKXtcbiAgICAgICAgICBsYW5ncyA9IHRoaXMuZGF0YXNldC5sYW5ndWFnZXM7IC8vZ2V0IGRhdGEtbGFuZ3VhZ2VzXG4gICAgICAgICAgcmVnZXggPSBuZXcgUmVnRXhwKCdcXFxcYicgKyBzZWxlY3RlZExhbmcgKyAnXFxcXGInKTtcbiAgICAgICAgICBpZihsYW5ncy5tYXRjaChyZWdleCkpICQodGhpcykuc2hvdygpOyAvL2lmIHNlbGVjdGVkIGZvdW5kLCBzaG93IGZpbGVzXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgICRtYXRlcmlhbEl0ZW0uc2hvdygpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIHJldHVybiB7XG4gICAgaW5pdDogaW5pdFxuICB9XG59KSgpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHNlbGVjdE1hdGVyaWFsTGFuZ3VhZ2U7XG4iLCJpbXBvcnQgZGF0YVNlcnZpY2UgZnJvbSAnLi9kYXRhLXNlcnZpY2UnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBUEkge1xuICBjb25zdHJ1Y3RvcigpIHt9XG5cbiAgbG9naW5BZG1pbigpIHtcbiAgICByZXR1cm4gZGF0YVNlcnZpY2UucG9zdCgnL2xvZ2luLWFkbWluLycpO1xuICB9XG5cbiAgbG9naW4oZGF0YSkge1xuICAgIHJldHVybiBkYXRhU2VydmljZS5wb3N0KCcvbG9naW4vJywgZGF0YSk7XG4gIH1cblxuICBsb2dvdXQoKSB7XG4gICAgcmV0dXJuIGRhdGFTZXJ2aWNlLnBvc3QoJy9sb2dvdXQvJyk7XG4gIH1cblxuICBnZXRMb2NhbGl6YXRpb24oKSB7XG4gICAgcmV0dXJuIGRhdGFTZXJ2aWNlLmdldCgnL2xvY2FsaXphdGlvbi8nKTtcbiAgfVxuXG4gIGdldFRva2VuKCkge1xuICAgIHJldHVybiBkYXRhU2VydmljZS5nZXQoJy90b2tlbi8nKTtcbiAgfVxuXG4gIGdldENvdW50cmllcygpIHtcbiAgICByZXR1cm4gZGF0YVNlcnZpY2UuZ2V0KCcvY291bnRyaWVzLycpO1xuICB9XG5cbiAgY2hhbmdlUGFzc3dvcmQoZGF0YSkge1xuICAgIHJldHVybiBkYXRhU2VydmljZS5wb3N0KCcvY2hhbmdlLXBhc3N3b3JkLycsIGRhdGEpO1xuICB9XG5cbiAgZm9yZ290UGFzc3dvcmQoZGF0YSkge1xuICAgIHJldHVybiBkYXRhU2VydmljZS5wb3N0KCcvZm9yZ290LXBhc3N3b3JkLycsIGRhdGEpO1xuICB9XG5cbiAgcmVnaXN0ZXJQYXNzd29yZChkYXRhKSB7XG4gICAgcmV0dXJuIGRhdGFTZXJ2aWNlLnBvc3QoJy9yZWdpc3Rlci1wYXNzd29yZC8nLCBkYXRhKTtcbiAgfVxuXG4gIC8vIFVTRVIgLT5cbiAgYWRkVXNlcihkYXRhKSB7XG4gICAgcmV0dXJuIGRhdGFTZXJ2aWNlLnBvc3QoJy91c2Vycy8nLCBkYXRhKTtcbiAgfVxuXG4gIHVwZGF0ZVVzZXIoaWQsIGRhdGEpIHtcbiAgICByZXR1cm4gZGF0YVNlcnZpY2UucHV0KGAvdXNlcnMvJHtpZH0vYCwgZGF0YSk7XG4gIH1cblxuICBkZWxldGVVc2VyKGlkKSB7XG4gICAgcmV0dXJuIGRhdGFTZXJ2aWNlLmRlbGV0ZShgL3VzZXJzLyR7aWR9L2ApO1xuICB9XG5cbiAgZ2V0VXNlcihpZCkge1xuICAgIHJldHVybiBkYXRhU2VydmljZS5nZXQoYC91c2Vycy8ke2lkfS9gKTtcbiAgfVxuXG4gIGdldEN1cnJlbnRVc2VyKCkge1xuICAgIHJldHVybiBkYXRhU2VydmljZS5nZXQoJy91c2Vycy9jdXJyZW50LycpO1xuICB9XG5cbiAgZ2V0VXNlcnMocGFyYW1zKSB7XG4gICAgcmV0dXJuIGRhdGFTZXJ2aWNlLmdldCgnL3VzZXJzLycsIHBhcmFtcyk7XG4gIH1cblxuICAvLyA8LSBVU0VSXG5cbiAgLy8gQ09NUEFOWSAtLT5cblxuICBhZGRDb21wYW55KGRhdGEpIHtcbiAgICByZXR1cm4gZGF0YVNlcnZpY2UucG9zdCgnL2NvbXBhbmllcy8nLCBkYXRhKTtcbiAgfVxuXG4gIHVwZGF0ZUNvbXBhbnkoaWQsIGRhdGEpIHtcbiAgICByZXR1cm4gZGF0YVNlcnZpY2UucHV0KGAvY29tcGFuaWVzLyR7aWR9L2AsIGRhdGEpO1xuICB9XG5cbiAgZGVsZXRlQ29tcGFueShpZCkge1xuICAgIHJldHVybiBkYXRhU2VydmljZS5kZWxldGUoYC9jb21wYW5pZXMvJHtpZH0vYCk7XG4gIH1cblxuICBnZXRDb21wYW55KGlkKSB7XG4gICAgcmV0dXJuIGRhdGFTZXJ2aWNlLmdldChgL2NvbXBhbmllcy8ke2lkfS9gKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgY29tcGFuaWVzIGJ5IHBhcmFtc1xuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zIC0gcGFyYW1zIG9iamVjdFxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGFyYW1zLmNoaWxkcmVuT2YgLSB1dWlkIHN0cmluZ1xuICAgKiBAcmV0dXJuIHtQcm9taXNlfVxuICAgKi9cbiAgZ2V0Q29tcGFuaWVzKHBhcmFtcykge1xuICAgIHJldHVybiBkYXRhU2VydmljZS5nZXQoJy9jb21wYW5pZXMvJywgcGFyYW1zKTtcbiAgfVxuXG4gIC8vIDwtIENPTVBBTllcblxuICAvLyBDVVNUT01FUiBNQUNISU5FUyAtPlxuXG4gIC8qKlxuICAgKiBHZXQgY3VzdG9tZXIgbWFjaGluZXMgYnkgcGFyYW1zXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXMgLSBwYXJhbXMgb2JqZWN0XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwYXJhbXMuY29tcGFueSAtIGNvbXBhbnkgaWRcbiAgICogQHBhcmFtIHtib29sZWFufSBwYXJhbXMuaW5jbHVkZUNoaWxkQ29tcGFuaWVzIC0gaW5jbHVkZSBjdXN0b21lciBtYWNoaW5lcyBvZiBjaGlsZCBjb21wYW5pZXMgYWxzbyAob25seSBpbXBvcnRlcnMgaGF2ZSBjaGlsZCBjb21wYW5pZXMpXG4gICAqIEByZXR1cm4ge1Byb21pc2V9XG4gICAqL1xuICBnZXRDdXN0b21lck1hY2hpbmVzKHBhcmFtcykge1xuICAgIHJldHVybiBkYXRhU2VydmljZS5nZXQoJy9jdXN0b21lci1tYWNoaW5lcy8nLCBwYXJhbXMpO1xuICB9XG5cbiAgZ2V0Q3VzdG9tZXJNYWNoaW5lKHNlcmlhbE51bWJlcikge1xuICAgIHJldHVybiBkYXRhU2VydmljZS5nZXQoYC9jdXN0b21lci1tYWNoaW5lcy8ke3NlcmlhbE51bWJlcn0vYCk7XG4gIH1cblxuICB1cGRhdGVDdXN0b21lck1hY2hpbmVPd25lcihzZXJpYWxOdW1iZXIsIGRhdGEpIHtcbiAgICByZXR1cm4gZGF0YVNlcnZpY2UucHV0KGAvY3VzdG9tZXItbWFjaGluZXMvJHtzZXJpYWxOdW1iZXJ9L2AsIGRhdGEpO1xuICB9XG5cbiAgc2F2ZUN1c3RvbWVyTWFjaGluZUluZm9ybWF0aW9uKHNlcmlhbE51bWJlciwgZGF0YSkge1xuICAgIHJldHVybiBkYXRhU2VydmljZS5wdXQoYC9jdXN0b21lci1tYWNoaW5lcy8ke3NlcmlhbE51bWJlcn0vaW5mby9gLCBkYXRhKTtcbiAgfVxuXG4gIGdldEN1c3RvbWVyTWFjaGluZURldGFpbHMoc2VyaWFsTnVtYmVyKSB7XG4gICAgcmV0dXJuIGRhdGFTZXJ2aWNlLmdldChgL2N1c3RvbWVyLW1hY2hpbmVzLyR7c2VyaWFsTnVtYmVyfS9kZXRhaWxzL2ApO1xuICB9XG5cbiAgLy8gPC0gQ1VTVE9NRVIgTUFDSElORVNcblxuICAvLyBDT01QTEFJTlRTIC0+XG4gIGFkZENvbXBsYWludChkYXRhKSB7XG4gICAgcmV0dXJuIGRhdGFTZXJ2aWNlLnBvc3QoJy9jb21wbGFpbnRzLycsIGRhdGEpO1xuICB9XG5cbiAgYWRkQ29tcGxhaW50RmlsZShjb21wbGFpbnRVdWlkLCBkYXRhLCBjb25maWcpIHtcbiAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICBmaWxlTmFtZTogZGF0YS5maWxlTmFtZVxuICAgIH1cblxuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgZm9ybURhdGEuYXBwZW5kKCdmaWxlJywgZGF0YS5maWxlKTtcblxuICAgIGNvbnN0IGF4aW9zQ29uZiA9IHtcbiAgICAgIG9uVXBsb2FkUHJvZ3Jlc3M6IGNvbmZpZyAmJiBjb25maWcub25Qcm9ncmVzcyB8fCBudWxsXG4gICAgfTtcblxuICAgIHJldHVybiBkYXRhU2VydmljZS5wb3N0KGAvY29tcGxhaW50LWZpbGUvJHtjb21wbGFpbnRVdWlkfS9gLCBmb3JtRGF0YSwgcGFyYW1zLCBheGlvc0NvbmYpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBjdXN0b21lciBtYWNoaW5lcyBieSBwYXJhbXNcbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IFtwYXJhbXNdIC0gcGFyYW1zIG9iamVjdCwgaWYgbGVmdCBvdXQgZ2V0IGFsbCBmb3IgdXNlciBjb21wYW55XG4gICAqIEByZXR1cm4ge1Byb21pc2V9XG4gICAqL1xuICBnZXRDb21wbGFpbnRzKHBhcmFtcyA9IG51bGwpIHtcbiAgICByZXR1cm4gZGF0YVNlcnZpY2UuZ2V0KCcvY29tcGxhaW50cy8nLCBwYXJhbXMpO1xuICB9XG5cbiAgZ2V0Q29tcGxhaW50KHV1aWQpIHtcbiAgICByZXR1cm4gZGF0YVNlcnZpY2UuZ2V0KGAvY29tcGxhaW50cy8ke3V1aWR9L2ApO1xuICB9XG5cbiAgLy8gPC0gQ09NUExBSU5UU1xuXG4gIC8vIFdBUlJBTlRZIFJFR0lTVFJBVElPTlMgLT5cblxuICBhZGRXYXJyYW50eVJlZ2lzdHJhdGlvbihkYXRhKSB7XG4gICAgcmV0dXJuIGRhdGFTZXJ2aWNlLnBvc3QoJy93YXJyYW50eS1yZWdpc3RyYXRpb25zLycsIGRhdGEpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB3YXJyYW50eSByZWdpc3RyYXRpb25zIGJ5IHBhcmFtc1xuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gW3BhcmFtc10gLSBwYXJhbXMgb2JqZWN0LCBpZiBsZWZ0IG91dCBnZXQgYWxsIGZvciB1c2VyIGNvbXBhbnlcbiAgICogQHJldHVybiB7UHJvbWlzZX1cbiAgICovXG4gIGdldFdhcnJhbnR5UmVnaXN0cmF0aW9ucyhwYXJhbXMgPSBudWxsKSB7XG4gICAgcmV0dXJuIGRhdGFTZXJ2aWNlLmdldCgnL3dhcnJhbnR5LXJlZ2lzdHJhdGlvbnMvJywgcGFyYW1zKTtcbiAgfVxuXG4gIGdldFdhcnJhbnR5UmVnaXN0cmF0aW9uKHV1aWQpIHtcbiAgICByZXR1cm4gZGF0YVNlcnZpY2UuZ2V0KGAvd2FycmFudHktcmVnaXN0cmF0aW9ucy8ke3V1aWR9L2ApO1xuICB9XG4gIC8vIDwtIFdBUlJBTlRZIFJFR0lTVFJBVElPTlxufVxuIiwiaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zJztcblxudmFyIGdldEJhc2VVUkwgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBsYW5nID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2h0bWwnKVswXS5sYW5nO1xuICByZXR1cm4gJy8nICsgbGFuZyArICcvYXBpL3YxJztcbn1cblxuY29uc3QgYXggPSBheGlvcy5jcmVhdGUoe1xuICBiYXNlVVJMOiBnZXRCYXNlVVJMKCksXG4gIGhlYWRlcnM6IHtcbiAgICAnWC1SZXF1ZXN0ZWQtd2l0aCc6ICdYSFInXG4gIH0sXG4gIHZhbGlkYXRlU3RhdHVzOiBmdW5jdGlvbiAoc3RhdHVzKSB7XG4gICAgcmV0dXJuIHN0YXR1cyA8IDUwMDsgLy8gUmVqZWN0IG9ubHkgaWYgdGhlIHN0YXR1cyBjb2RlIGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byA1MDBcbiAgfVxufSk7XG5cbmNsYXNzIERhdGFTZXJ2aWNlIHtcbiAgcmVxdWVzdChtZXRob2QsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gYXgoe1xuICAgICAgbWV0aG9kOiBtZXRob2QsXG4gICAgICB1cmw6IG9wdGlvbnMudXJsLFxuICAgICAgZGF0YTogb3B0aW9ucy5kYXRhLFxuICAgICAgcGFyYW1zOiBvcHRpb25zLnBhcmFtcyxcbiAgICAgIHdpdGhDcmVkZW50aWFsczogdHJ1ZVxuICAgIH0pLnRoZW4ocmVzID0+IHtcbiAgICAgIGNvbnN0IGRhdGEgPSByZXMuZGF0YTtcbiAgICAgIGlmKCF0aGlzLnZ1ZXhTdG9yZSkge1xuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgIH1cblxuICAgICAgaWYoZGF0YS5jb2RlID09PSA0MDEpIHtcbiAgICAgICAgdGhpcy52dWV4U3RvcmUuY29tbWl0KCdzZXRMb2dpblN0YXR1cycsIGZhbHNlKTtcbiAgICAgIH1cblxuICAgICAgaWYoZGF0YS5jb2RlID09PSAyMDAgJiYgZGF0YS5tZXNzYWdlcy5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy52dWV4U3RvcmUuY29tbWl0KCdhZGROb3RpZmljYXRpb24nLCBkYXRhLm1lc3NhZ2VzKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGRhdGE7XG5cbiAgICB9KS5jYXRjaChmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgIGlmKGVycm9yLnJlc3BvbnNlKSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBlcnJvci5yZXNwb25zZS5kYXRhO1xuICAgICAgICBjb25zb2xlLmVycm9yKGBTZXJ2ZXIgZXJyb3Igc3RhdHVzOiAke2RhdGEuY29kZX1cXG4ke2RhdGEucmVzdWx0LmVycm9yLnN0YWNrfWApO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIElmIHlvdSdyZSB1c2luZyBkYXRhU2VydmljZSB0aGlzIHdpdGggdnVleCwgd2UgY2FuIGF1dG9tYXRpY2FsbHkgbG9nb3V0IHVzZXIgYW5kIGRvIG90aGVyIHN0dWZmIGJhc2VkIG9uIHJlc3BvbnNlc1xuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gc3RvcmUgLSB2dWV4IHN0b3JlIG9iamVjdFxuICAgKi9cbiAgc2V0VnVleFN0b3JlKHN0b3JlKSB7XG4gICAgdGhpcy52dWV4U3RvcmUgPSBzdG9yZTtcbiAgfVxuXG4gIGdldChwYXRoLCBwYXJhbXMpIHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KCdnZXQnLCB7XG4gICAgICB1cmw6IHBhdGgsXG4gICAgICBwYXJhbXM6IHBhcmFtc1xuICAgIH0pO1xuICB9XG4gIHBvc3QocGF0aCwgZGF0YSwgcGFyYW1zLCBjb25maWcpIHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KCdwb3N0Jywge1xuICAgICAgdXJsOiBwYXRoLFxuICAgICAgZGF0YTogZGF0YSxcbiAgICAgIHBhcmFtczogcGFyYW1zLFxuICAgICAgY29uZmlnOiBjb25maWdcbiAgICB9KTtcbiAgfVxuICBwYXRjaChwYXRoLCBkYXRhLCBwYXJhbXMpIHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KCdwYXRjaCcsIHtcbiAgICAgIHVybDogcGF0aCxcbiAgICAgIGRhdGE6IGRhdGEsXG4gICAgICBwYXJhbXM6IHBhcmFtc1xuICAgIH0pO1xuICB9XG4gIHB1dChwYXRoLCBkYXRhLCBwYXJhbXMpIHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KCdwdXQnLCB7XG4gICAgICB1cmw6IHBhdGgsXG4gICAgICBkYXRhOiBkYXRhLFxuICAgICAgcGFyYW1zOiBwYXJhbXNcbiAgICB9KTtcbiAgfVxuICBkZWxldGUocGF0aCwgcGFyYW1zKSB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdCgnZGVsZXRlJywge1xuICAgICAgdXJsOiBwYXRoLFxuICAgICAgcGFyYW1zOiBwYXJhbXNcbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBuZXcgRGF0YVNlcnZpY2UoKTtcbiIsImV4cG9ydCBkZWZhdWx0IGNsYXNzIHVzZXJSaWdodHMge1xuICBjb25zdHJ1Y3Rvcigpe31cblxuICAvKipcbiAgKiBUZXN0IGhhcyBhIHVzZXIgYSByaWdodFxuICAqIEBwYXJhbSB7c3RyaW5nfSByaWdodCAtIHVzZXIgcmlnaHQgbmFtZSBcbiAgKiBAcGFyYW0ge3N0cmluZ30gcm9sZSAtIHVzZXIgcm9sZSBuYW1lXG4gICogQHJldHVybiB7Ym9vbGVhbn0gdHJ1ZSBpZiB1c2VyJ3MgZ3JvdXAgaGFzIGEgcmlnaHQsIGZhbHNlIGlmIG5vdFxuICAqL1xuICBoYXNSaWdodCggcmlnaHQsIHJvbGUgKSB7XG4gICAgbGV0IGdyb3VwQW5kUmlnaHRzID0geyBSSUdIVFM6IHdpbmRvdy5SSUdIVFMsIEdST1VQUzogd2luZG93LlVTRVJfR1JPVVBTIH07XG5cbiAgICBpZiggIU9iamVjdC5rZXlzKCBncm91cEFuZFJpZ2h0cy5SSUdIVFMgKS5pbmNsdWRlcyggcmlnaHQgKSApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRXJyb3I6IGdpdmVuIHJpZ2h0IGlzIG5vdCBjb25maWd1cmVkIHRvIGdyb3VwICYgcmlnaHRzIG1vZHVsZS4gUGFzc2VkIHJpZ2h0OiAnJHtyaWdodH0nIGApO1xuICAgIH1cblxuICAgIGlmKCByb2xlICkge1xuICAgICAgY29uc3QgcmlnaHRzQXJyYXkgPSBncm91cEFuZFJpZ2h0cy5HUk9VUFNbIHJvbGUgXTsgICAgICBcbiAgICAgIHJldHVybiBBcnJheS5pc0FycmF5KCByaWdodHNBcnJheSApICYmIHJpZ2h0c0FycmF5LmluY2x1ZGVzKCByaWdodCApOyBcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7ICAgIFxuICB9XG4gIFxufVxuIiwiLy8gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vICogU2hvdyBtb3JlIGZpbGUgaW5wdXRzIHdoZW4gZmlsZXMgYXJlIGFkZGVkIHRvIGZlZWRiYWNrIGZvcm1cbi8vICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbid1c2Ugc3RyaWN0JztcblxuaW1wb3J0ICQgZnJvbSAnanF1ZXJ5JztcblxudmFyIHNob3dJbnB1dHMgPSAoZnVuY3Rpb24oKSB7XG4gIGZ1bmN0aW9uIGluaXQoKXtcbiAgICAkKCcuanMtZmVlZGJhY2stZmlsZS1pbnB1dCBpbnB1dCcpLm9uKCdjaGFuZ2UnLGZ1bmN0aW9uKCl7XG4gICAgICAkKHRoaXMpLnBhcmVudHMoJy5qcy1mZWVkYmFjay1maWxlLWlucHV0JykubmV4dCgpLnJlbW92ZUNsYXNzKCdoaWRkZW4nKTtcbiAgICB9KTtcbiAgfVxuICByZXR1cm4ge1xuICAgIGluaXQ6IGluaXRcbiAgfVxufSkoKTtcblxubW9kdWxlLmV4cG9ydHMgPSBzaG93SW5wdXRzO1xuIiwiLy8gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vICogdmlkZW8gcG9wdXBcbi8vICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbid1c2Ugc3RyaWN0JztcblxuaW1wb3J0ICQgZnJvbSAnanF1ZXJ5JztcbmltcG9ydCAnbWFnbmlmaWMtcG9wdXAnO1xuXG5jb25zdCBtYWduaWZpY1BvcHVwVmlkZW8gPSB7XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemVzIGVsZW1lbnRzIG9uIHRoZSBwYWdlXG4gICAqIEBwYXJhbSB7c3RyaW5nfGpRdWVyeS5odG1sRWxtZW50fSBlbGVtZW50IHNlbGVjdG9yIG9yIEh0bWwgZWxlbWVudFxuICAgKi9cbiAgaW5pdCggZWxlbWVudCApIHtcbiAgICBjb25zdCAkaXRlbXMgPSAkKGVsZW1lbnQpO1xuXG4gICAgJGl0ZW1zLmVhY2goKGluZGV4LCBlbGVtZW50KSA9PiB7XG4gICAgICBjb25zdCAkZWxlbWVudCA9ICQoZWxlbWVudCk7XG4gICAgICBjb25zdCBzb3VyY2UgPSAkZWxlbWVudC5kYXRhKCd5b3V0dWJlJyk7XG4gICAgICAkZWxlbWVudC5tYWduaWZpY1BvcHVwKHtcbiAgICAgICAgc3JjOiBzb3VyY2UsXG4gICAgICAgIGRpc2FibGVPbjogNzAwLFxuICAgICAgICB0eXBlOiAnaWZyYW1lJyxcbiAgICAgICAgcmVtb3ZhbERlbGF5OiAxNjAsXG4gICAgICAgIHByZWxvYWRlcjogZmFsc2UsXG4gICAgICAgIGZpeGVkQ29udGVudFBvczogZmFsc2VcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbn1cbmV4cG9ydCBkZWZhdWx0IG1hZ25pZmljUG9wdXBWaWRlbztcbiIsIjx0ZW1wbGF0ZT5cbiAgPGRpdiBjbGFzcz1cInZ1ZS1hcHAgZnVsbC1oZWlnaHRcIj5cbiAgICA8ZGl2IHYtaWY9XCJwcmVsb2FkaW5nXCIgY2xhc3M9XCJ2LXByZWxvYWRpbmcgZnVsbC1oZWlnaHRcIj5cblxuICAgIDwvZGl2PlxuICAgIDxkaXYgdi1lbHNlIGNsYXNzPVwiZnVsbC1oZWlnaHRcIj5cbiAgICAgIDx0aGUtc3ViaGVhZGVyIHYtaWY9XCJzdWJoZWFkZXJOZWVkZWRcIj48L3RoZS1zdWJoZWFkZXI+XG4gICAgICA8cm91dGVyLXZpZXcgdi1pZj1cImlzTG9nZ2VkSW5cIj48L3JvdXRlci12aWV3PlxuICAgICAgPGRpdiB2LWVsc2U+PHA+e3tsb2MoJ2xvZ2dlZE91dCcpfX08L3A+PC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPG5vdGlmaWNhdGlvbnMgZ3JvdXA9XCJub3RpZmljYXRpb25cIiBwb3NpdGlvbj1cInRvcCBjZW50ZXJcIiA6bWF4PVwiM1wiPlxuICAgICAgPHRlbXBsYXRlIHNsb3Q9XCJib2R5XCIgc2xvdC1zY29wZT1cInByb3BzXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ2LW5vdGlmaWNhdGlvblwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ2LW5vdGlmaWNhdGlvbl9fY29udGVudFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInYtbm90aWZpY2F0aW9uX190aXRsZSBoM1wiPlxuICAgICAgICAgICAgICB7e3Byb3BzLml0ZW0udGl0bGV9fVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidi1ub3RpZmljYXRpb25fX3RleHRcIlxuICAgICAgICAgICAgICAgICB2LWh0bWw9XCJwcm9wcy5pdGVtLnRleHRcIj48L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ2LW5vdGlmaWNhdGlvbl9fY2xvc2VcIlxuICAgICAgICAgICAgICAgIEBjbGljaz1cInByb3BzLmNsb3NlXCI+XG4gICAgICAgICAgICAgIFhcbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvdGVtcGxhdGU+XG4gICAgPC9ub3RpZmljYXRpb25zPlxuICA8L2Rpdj5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5cbmltcG9ydCAkIGZyb20gJ2pxdWVyeSc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbW91bnRlZDogZnVuY3Rpb24gKCkge1xuICB9LFxuICBjcmVhdGVkOiBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgYXBwID0gdGhpcztcbiAgICBjb25zdCBqb2JzID0gW107XG5cbiAgICAvLyBHZXQgbGFuZ3VhZ2UgZnJvbSA8aHRtbD4gdGFnXG4gICAgY29uc3QgbGFuZyA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2xhbmcnKTtcbiAgICBhcHAuJHN0b3JlLmNvbW1pdCgnc2V0TGFuZ3VhZ2UnLCBsYW5nKTtcblxuICAgIC8vIElmIHN1YmhlYWRlciBpcyBmb3VuZCwgd2UgbmVlZCB0byBzdG9yZSB0aGUgaW5mbywgc28gd2UgZG9uJ3QgcmVuZGVyIGl0IGFnYWluXG4gICAgY29uc3QgJHN1YmhlYWRlciA9ICQoJy5qcy1zdWJoZWFkZXInKTtcbiAgICBpZigkc3ViaGVhZGVyLmxlbmd0aCkge1xuICAgICAgYXBwLiRzdG9yZS5jb21taXQoJ3NldFN1YmhlYWRlckZvdW5kJywgdHJ1ZSk7XG4gICAgfVxuXG4gICAgLy8gR2V0IGxvY2FsaXphdGlvblxuICAgIGpvYnMucHVzaChhcHAuJHN0b3JlLmRpc3BhdGNoKCdnZXRMb2NhbGl6YXRpb24nKSk7XG5cbiAgICAvLyBHZXQgdXNlciBpbmZvIGlmIGl0IGlzIG5lZWRlZCBieSB0aGlzIHBhcnRpY3VsYXIgYXBwXG4gICAgaWYodGhpcy4kc3RvcmUuc3RhdGUubmVlZHNMb2dnaW5nSW4pIHtcbiAgICAgIGpvYnMucHVzaChhcHAuJHN0b3JlLmRpc3BhdGNoKCdnZXRDdXJyZW50VXNlcicpKTtcbiAgICB9XG5cbiAgICBhd2FpdCBQcm9taXNlLmFsbChqb2JzKTtcblxuICAgIGFwcC4kc3RvcmUuY29tbWl0KCdzZXRQcmVsb2FkaW5nU3RhdHVzJywgZmFsc2UpO1xuICB9LFxuICBjb21wdXRlZDoge1xuICAgIHN1YmhlYWRlck5lZWRlZCgpIHtcbiAgICAgIHJldHVybiAhdGhpcy4kc3RvcmUuc3RhdGUuc3ViaGVhZGVyRm91bmQ7XG4gICAgfSxcbiAgICBpc0xvZ2dlZEluKCkge1xuICAgICAgcmV0dXJuICF0aGlzLiRzdG9yZS5zdGF0ZS5uZWVkc0xvZ2dpbmdJbiB8fMKgdGhpcy4kc3RvcmUuc3RhdGUubG9nZ2VkSW47XG4gICAgfSxcbiAgICBwcmVsb2FkaW5nKCkge1xuICAgICAgcmV0dXJuIHRoaXMuJHN0b3JlLnN0YXRlLnByZWxvYWRpbmc7XG4gICAgfSxcbiAgICBub3RpZmljYXRpb25zUXVldWUoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kc3RvcmUuc3RhdGUubm90aWZpY2F0aW9uc1F1ZXVlO1xuICAgIH1cbiAgfSxcbiAgd2F0Y2g6IHtcbiAgICBub3RpZmljYXRpb25zUXVldWU6IHtcbiAgICAgIGhhbmRsZXI6IGZ1bmN0aW9uIChxdWV1ZSkge1xuICAgICAgICBsZXQgcXVldWVUb3AgPSBxdWV1ZVtxdWV1ZS5sZW5ndGggLSAxXVxuXG4gICAgICAgIGlmKHR5cGVvZiBxdWV1ZVRvcCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLiRub3RpZnkoe1xuICAgICAgICAgIHRpdGxlOiBxdWV1ZVRvcCxcbiAgICAgICAgICBncm91cDogJ25vdGlmaWNhdGlvbicsXG4gICAgICAgICAgZHVyYXRpb246IDMwMDBcbiAgICAgICAgfSlcbiAgICAgIH0sXG4gICAgICBpbW1lZGlhdGU6IHRydWUsXG4gICAgICBkZWVwOiB0cnVlXG4gICAgfVxuICB9XG59XG48L3NjcmlwdD5cbiIsImltcG9ydCBWdWUgZnJvbSAndnVlJztcbmltcG9ydCBzdG9yZSBmcm9tICcuLi9zdG9yZSc7XG5pbXBvcnQgQVBJIGZyb20gJy4uLy4uL3NlcnZpY2VzL2FwaSc7XG5pbXBvcnQgdXNlclJpZ2h0cyBmcm9tICcuLi8uLi9zZXJ2aWNlcy91c2VyLXJpZ2h0cyc7XG5cbmltcG9ydCBWdWVUYWJsZXMgZnJvbSAndnVlLXRhYmxlcy0yJztcbmltcG9ydCBQb3J0YWxWdWUgZnJvbSAncG9ydGFsLXZ1ZSc7XG5pbXBvcnQgVk1vZGFsIGZyb20gJ3Z1ZS1qcy1tb2RhbCdcbmltcG9ydCBOb3RpZmljYXRpb25zIGZyb20gJ3Z1ZS1ub3RpZmljYXRpb24nO1xuXG4vLyBHbG9iYWwgY29tcG9uZW50c1xuaW1wb3J0ICcuLi9jb21wb25lbnRzL3RoZS1zdWJoZWFkZXInO1xuaW1wb3J0ICcuLi9jb21wb25lbnRzL3RoZS1zaWRlYmFyLWxheW91dCc7XG5pbXBvcnQgJy4uL2NvbXBvbmVudHMvdGhlLTEtY29sdW1uLWxheW91dCc7XG5cblZ1ZS51c2UoTm90aWZpY2F0aW9ucyk7XG5WdWUudXNlKFBvcnRhbFZ1ZSk7XG4vL1Z1ZS51c2UoVnVlVGFibGVzLkNsaWVudFRhYmxlKTtcblZ1ZS51c2UoVnVlVGFibGVzLkNsaWVudFRhYmxlLCB7XG4gIHNvcnRJY29uOiB7XG4gICAgaXM6ICdpY29uLS1jaGV2cm9uLXVwLWRvd24tLWJsYWNrJyxcbiAgICBiYXNlOiAnaWNvbicsXG4gICAgdXA6ICdpY29uLS1jaGV2cm9uLXVwLS1ibGFjaycsXG4gICAgZG93bjogJ2ljb24tLWNoZXZyb24tZG93bi0tYmxhY2snXG4gIH1cbn0sIGZhbHNlLCAoKSA9PiB7IHJldHVybiB7XG4gIGZyYW1ld29yazogJycsXG4gIHRhYmxlOiAndGFibGUgdi1kYXRhLXRhYmxlJyxcbiAgcm93OiAndi1kYXRhLXRhYmxlX19yb3cnLFxuICBjb2x1bW46ICd2LWRhdGEtdGFibGVfX2NvbCcsXG4gIGxhYmVsOiAnJyxcbiAgaW5wdXQ6ICd2LWRhdGEtdGFibGVfX2lucHV0JyxcbiAgc2VsZWN0OiAndi1kYXRhLXRhYmxlX19zZWxlY3QnLFxuICBmaWVsZDogJ3YtZGF0YS10YWJsZV9fZmllbGQnLFxuICBpbmxpbmU6ICdpcy1pbmxpbmUnLFxuICByaWdodDogJ2lzLXB1bGwtcmlnaHQnLFxuICBsZWZ0OiAnaXMtcHVsbC1sZWZ0JyxcbiAgY2VudGVyOiAndGV4dC1jZW50ZXInLFxuICBjb250ZW50Q2VudGVyOiAnJyxcbiAgc21hbGw6ICcnLFxuICBub21hcmdpbjogJycsXG4gIGdyb3VwVHI6ICd2LWRhdGEtdGFibGVfX2luZm8nLFxuICBidXR0b246ICdidG4gYnRuLXNlY29uZGFyeScsXG4gIGRyb3Bkb3duOiB7XG4gICAgY29udGFpbmVyOiAnZHJvcGRvd24nLFxuICAgIHRyaWdnZXI6ICdkcm9wZG93bi10b2dnbGUnLFxuICAgIG1lbnU6ICdkcm9wZG93bi1tZW51JyxcbiAgICBjb250ZW50OiAnJyxcbiAgICBpdGVtOiAnJyxcbiAgICBjYXJldDogJ2NhcmV0J1xuICB9LFxuICBwYWdpbmF0aW9uOiB7XG4gICAgbmF2OiAnJyxcbiAgICBjb3VudDogJycsXG4gICAgd3JhcHBlcjogJycsXG4gICAgbGlzdDogJ3BhZ2luYXRpb24nLFxuICAgIGl0ZW06ICdwYWdlLWl0ZW0nLFxuICAgIGxpbms6ICdwYWdlLWxpbmsnLFxuICAgIG5leHQ6ICcnLFxuICAgIHByZXY6ICcnLFxuICAgIGFjdGl2ZTogJ2FjdGl2ZSdcbiAgfVxufX0pO1xuVnVlLnVzZShWTW9kYWwsIHtcbiAgZGlhbG9nOiB0cnVlXG59KTtcblxuVnVlLnByb3RvdHlwZS4kYXBpID0gbmV3IEFQSSgpO1xuVnVlLnByb3RvdHlwZS4kdXNlclJpZ2h0cyA9IG5ldyB1c2VyUmlnaHRzKCk7XG5cbi8vIEdsb2JhbCBsb2NhbGl6YXRpb24gZnVuY3Rpb24ge3tsb2MoJ3VzZXIuZmlyc3ROYW1lJyl9fVxuVnVlLm1peGluKHtcbiAgZGF0YTogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGxvYyhrZXlzKSB7XG4gICAgICAgIGlmKCFzdG9yZS5zdGF0ZS5sb2NhbGl6YXRpb24pIHtcbiAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBrZXlzT3JpZ2luYWwgPSBrZXlzO1xuXG4gICAgICAgIGlmKCFBcnJheS5pc0FycmF5KGtleXMpKSB7XG4gICAgICAgICAga2V5cyA9IGtleXMuc3BsaXQoJy4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCB2YWx1ZTtcblxuICAgICAgICBrZXlzLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICAgIHZhbHVlID0gdmFsdWUgPyB2YWx1ZVtrZXldIDogc3RvcmUuc3RhdGUubG9jYWxpemF0aW9uW2tleV07XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmKHR5cGVvZiB2YWx1ZSA9PT0gJ3VuZGVmaW5lZCcgfHwgdmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm4gJ21pc3Npbmc6IFwiJyArIGtleXNPcmlnaW5hbCArICdcIic7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuICB9XG59KTtcblxuIiwiaW1wb3J0IFZ1ZSBmcm9tICd2dWUnO1xuaW1wb3J0IEFwcCBmcm9tICcuLi9hcHAudnVlJztcbmltcG9ydCBSb3V0ZXIgZnJvbSAnLi9yb3V0ZXInO1xuaW1wb3J0IHN0b3JlIGZyb20gJy4uLy4uL3N0b3JlJztcblxuaW1wb3J0ICcuLi9jb21tb24tc2V0dGluZ3MnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGluaXQoZWxlbWVudElkKSB7XG4gICAgY29uc3QgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGVsZW1lbnRJZCk7XG5cbiAgICBpZihlbGVtZW50KSB7XG5cbiAgICAgIGNvbnN0IHJvdXRlciA9IG5ldyBSb3V0ZXIoe1xuICAgICAgICBiYXNlOiBlbGVtZW50LmdldEF0dHJpYnV0ZSgnZGF0YS1iYXNlLXVybCcpLFxuICAgICAgICBwYWdlczogSlNPTi5wYXJzZShlbGVtZW50LmdldEF0dHJpYnV0ZSgnZGF0YS1wYWdlcycpKVxuICAgICAgfSk7XG5cbiAgICAgIG5ldyBWdWUoe1xuICAgICAgICBlbDogJyMnICsgZWxlbWVudElkLFxuICAgICAgICByb3V0ZXIsXG4gICAgICAgIHN0b3JlLFxuICAgICAgICBtb3VudGVkICgpIHtcbiAgICAgICAgICAvLyBTdHVmZiB0byBkbyB3aGVuIG1vdW50ZWRcbiAgICAgICAgfSxcbiAgICAgICAgcmVuZGVyOiBjcmVhdGVFbGVtZW50ID0+IHtcbiAgICAgICAgICByZXR1cm4gY3JlYXRlRWxlbWVudChBcHApXG4gICAgICAgIH0sXG4gICAgICAgIGNyZWF0ZWQ6ICgpID0+IHtcblxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IFZ1ZSBmcm9tICd2dWUnXG5pbXBvcnQgVnVlUm91dGVyIGZyb20gJ3Z1ZS1yb3V0ZXInXG5cbi8vIFZpZXdzXG5pbXBvcnQgQ29tcGxhaW50cyBmcm9tICcuLi8uLi8uLi9jb21wb25lbnRzL3ZpZXctY29tcGxhaW50cy52dWUnO1xuaW1wb3J0IENvbXBsYWludCBmcm9tICcuLi8uLi8uLi9jb21wb25lbnRzL3ZpZXctY29tcGxhaW50LnZ1ZSc7XG5pbXBvcnQgQ3VzdG9tZXJNYWNoaW5lIGZyb20gJy4uLy4uLy4uL2NvbXBvbmVudHMvdmlldy1jdXN0b21lci1tYWNoaW5lLnZ1ZSc7XG5cblZ1ZS51c2UoVnVlUm91dGVyKVxuXG5jb25zdCBSb3V0ZXIgPSAob3B0aW9ucykgPT4ge1xuICBjb25zdCByb3V0ZXMgPSBbXG4gICAgeyBwYXRoOiAnLycsIG5hbWU6ICdjb21wbGFpbnRzJywgY29tcG9uZW50OiBDb21wbGFpbnRzIH0sXG4gICAgeyBwYXRoOiAnLzppZCcsIG5hbWU6ICdjb21wbGFpbnQnLCBjb21wb25lbnQ6IENvbXBsYWludCB9LFxuICAgIHsgcGF0aDogJy9jdXN0b21lci1tYWNoaW5lcy86c2VyaWFsTnVtYmVyJywgbmFtZTogJ2N1c3RvbWVyLW1hY2hpbmUnLCBjb21wb25lbnQ6IEN1c3RvbWVyTWFjaGluZSwgYmVmb3JlRW50ZXIodG8sIGZyb20sIG5leHQpIHtcbiAgICAgIGNvbnN0IGV4dGVybmFsUGFnZSA9IG9wdGlvbnMucGFnZXMgJiYgb3B0aW9ucy5wYWdlc1t0by5uYW1lXTtcbiAgICAgIGlmKGV4dGVybmFsUGFnZSkge1xuICAgICAgICBsb2NhdGlvbi5ocmVmID0gZXh0ZXJuYWxQYWdlLnVybCArIHRvLnBhcmFtcy5zZXJpYWxOdW1iZXI7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIG5leHQoKTtcbiAgICB9fVxuICBdO1xuXG4gIGNvbnN0IHJvdXRlciA9ICBuZXcgVnVlUm91dGVyKHtcbiAgICBtb2RlOiAnaGlzdG9yeScsXG4gICAgYmFzZTogb3B0aW9ucy5iYXNlLFxuICAgIGxpbmtBY3RpdmVDbGFzczogJ3Ytcm91dGVyLWxpbmtfX2FjdGl2ZScsXG4gICAgbGlua0V4YWN0QWN0aXZlQ2xhc3M6ICd2LXJvdXRlci1saW5rX19jdXJyZW50JyxcbiAgICByb3V0ZXM6IHJvdXRlc1xuICB9KTtcblxuICByZXR1cm4gcm91dGVyO1xufVxuXG5leHBvcnQgZGVmYXVsdCBSb3V0ZXI7XG4iLCJpbXBvcnQgVnVlIGZyb20gJ3Z1ZSdcbmltcG9ydCBWdWVSb3V0ZXIgZnJvbSAndnVlLXJvdXRlcidcblxuLy8gVmlld3NcbmltcG9ydCBDdXN0b21lck1hY2hpbmVzIGZyb20gJy4uLy4uLy4uL2NvbXBvbmVudHMvdmlldy1jdXN0b21lci1tYWNoaW5lcy52dWUnO1xuaW1wb3J0IEN1c3RvbWVyTWFjaGluZSBmcm9tICcuLi8uLi8uLi9jb21wb25lbnRzL3ZpZXctY3VzdG9tZXItbWFjaGluZS52dWUnO1xuaW1wb3J0IENvbXBsYWludCBmcm9tICcuLi8uLi8uLi9jb21wb25lbnRzL3ZpZXctY29tcGxhaW50LnZ1ZSc7XG5cblZ1ZS51c2UoVnVlUm91dGVyKVxuXG5jb25zdCBSb3V0ZXIgPSAob3B0aW9ucykgPT4ge1xuICByZXR1cm4gbmV3IFZ1ZVJvdXRlcih7XG4gICAgbW9kZTogJ2hpc3RvcnknLFxuICAgIGJhc2U6IG9wdGlvbnMuYmFzZSxcbiAgICBsaW5rQWN0aXZlQ2xhc3M6ICd2LXJvdXRlci1saW5rX19hY3RpdmUnLFxuICAgIGxpbmtFeGFjdEFjdGl2ZUNsYXNzOiAndi1yb3V0ZXItbGlua19fY3VycmVudCcsXG4gICAgcm91dGVzOiBbXG4gICAgICB7IHBhdGg6ICcvJywgbmFtZTogJ2N1c3RvbWVyLW1hY2hpbmVzJywgY29tcG9uZW50OiBDdXN0b21lck1hY2hpbmVzIH0sXG4gICAgICB7IHBhdGg6ICcvOnNlcmlhbE51bWJlcicsIG5hbWU6ICdjdXN0b21lci1tYWNoaW5lJywgY29tcG9uZW50OiBDdXN0b21lck1hY2hpbmUgfSxcbiAgICAgIHsgcGF0aDogJy9jb21wbGFpbnRzLzppZCcsIG5hbWU6ICdjb21wbGFpbnQnLCBjb21wb25lbnQ6IENvbXBsYWludCwgYmVmb3JlRW50ZXIodG8sIGZyb20sIG5leHQpIHtcbiAgICAgICAgY29uc3QgZXh0ZXJuYWxQYWdlID0gb3B0aW9ucy5wYWdlcyAmJiBvcHRpb25zLnBhZ2VzW3RvLm5hbWVdO1xuICAgICAgICBpZihleHRlcm5hbFBhZ2UpIHtcbiAgICAgICAgICBsb2NhdGlvbi5ocmVmID0gZXh0ZXJuYWxQYWdlLnVybCArIHRvLnBhcmFtcy5pZDtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgbmV4dCgpO1xuICAgICAgfX1cbiAgICBdXG4gIH0pXG59XG5cbmV4cG9ydCBkZWZhdWx0IFJvdXRlcjtcbiIsImltcG9ydCBWdWUgZnJvbSAndnVlJztcbmltcG9ydCBBcHAgZnJvbSAnLi4vYXBwLnZ1ZSc7XG5pbXBvcnQgUm91dGVyIGZyb20gJy4vcm91dGVyJztcbmltcG9ydCBzdG9yZSBmcm9tICcuLi8uLi9zdG9yZSc7XG5cbmltcG9ydCAnLi4vY29tbW9uLXNldHRpbmdzJztcblxuZXhwb3J0IGRlZmF1bHQge1xuICBpbml0KGVsZW1lbnRJZCkge1xuICAgIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChlbGVtZW50SWQpO1xuXG4gICAgaWYoZWxlbWVudCkge1xuXG4gICAgICBjb25zdCByb3V0ZXIgPSBuZXcgUm91dGVyKHtcbiAgICAgICAgYmFzZTogZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtYmFzZS11cmwnKSxcbiAgICAgIH0pO1xuXG4gICAgICBuZXcgVnVlKHtcbiAgICAgICAgZWw6ICcjJyArIGVsZW1lbnRJZCxcbiAgICAgICAgcm91dGVyLFxuICAgICAgICBzdG9yZSxcbiAgICAgICAgbW91bnRlZCAoKSB7XG4gICAgICAgICAgLy8gU3R1ZmYgdG8gZG8gd2hlbiBtb3VudGVkXG4gICAgICAgIH0sXG4gICAgICAgIHJlbmRlcjogY3JlYXRlRWxlbWVudCA9PiB7XG4gICAgICAgICAgcmV0dXJuIGNyZWF0ZUVsZW1lbnQoQXBwKVxuICAgICAgICB9LFxuICAgICAgICBjcmVhdGVkOiAoKSA9PiB7XG5cbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCBWdWUgZnJvbSAndnVlJ1xuaW1wb3J0IFZ1ZVJvdXRlciBmcm9tICd2dWUtcm91dGVyJ1xuXG4vLyBWaWV3c1xuaW1wb3J0IEhvbWUgZnJvbSAnLi4vdmlldy1ob21lLnZ1ZSc7XG5pbXBvcnQgQ29tcGFuaWVzIGZyb20gJy4uLy4uLy4uL2NvbXBvbmVudHMvdmlldy1jb21wYW5pZXMudnVlJztcbmltcG9ydCBDb21wYW55IGZyb20gJy4uLy4uLy4uL2NvbXBvbmVudHMvdmlldy1jb21wYW55LnZ1ZSc7XG5cblZ1ZS51c2UoVnVlUm91dGVyKVxuXG5jb25zdCBSb3V0ZXIgPSAob3B0aW9ucykgPT4ge1xuICByZXR1cm4gbmV3IFZ1ZVJvdXRlcih7XG4gICAgbW9kZTogJ2hpc3RvcnknLFxuICAgIGJhc2U6IG9wdGlvbnMuYmFzZSxcbiAgICBsaW5rQWN0aXZlQ2xhc3M6ICd2LXJvdXRlci1saW5rX19hY3RpdmUnLFxuICAgIGxpbmtFeGFjdEFjdGl2ZUNsYXNzOiAndi1yb3V0ZXItbGlua19fY3VycmVudCcsXG4gICAgcm91dGVzOiBbXG4gICAgICB7IHBhdGg6ICcvJywgbmFtZTogJ2hvbWUnLCBjb21wb25lbnQ6IEhvbWUgfSxcbiAgICAgIHsgcGF0aDogJy9jb21wYW5pZXMvOnBhcmVudCcsIG5hbWU6ICdjb21wYW5pZXMnLCBjb21wb25lbnQ6IENvbXBhbmllc30sXG4gICAgICB7IHBhdGg6ICcvY29tcGFueS86aWQnLCBuYW1lOiAnY29tcGFueScsIGNvbXBvbmVudDogQ29tcGFueX1cbiAgICBdXG4gIH0pXG59XG5cbmV4cG9ydCBkZWZhdWx0IFJvdXRlcjtcbiIsIjx0ZW1wbGF0ZT5cbiAgPGRpdj48L2Rpdj5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5cbi8vIEhvbWUgdmlldyBpcyBvbmx5IHVzZWQgZm9yIHJlZGlyZWN0aW5nLiBBdCBsZWFzdCBmb3Igbm93LlxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG5hbWU6ICdIb21lJyxcbiAgbW91bnRlZCgpIHtcbiAgICBjb25zdCBhcHAgPSB0aGlzO1xuXG4gICAgLy8gUmVkaXJlY3QgdG8gY29ycmVjdCBwYWdlXG4gICAgaWYoYXBwLiRzdG9yZS5zdGF0ZS51c2VyLnJvbGUgPT09ICdpbXBvcnRlci1hZG1pbicgfHwgYXBwLiRzdG9yZS5zdGF0ZS51c2VyLnJvbGUgPT09ICdzaXRlLWFkbWluJykge1xuICAgICAgYXBwLiRyb3V0ZXIucmVwbGFjZSh7XG4gICAgICAgIG5hbWU6ICdjb21wYW5pZXMnLFxuICAgICAgICBwYXJhbXM6IHtcbiAgICAgICAgICBwYXJlbnQ6IHRoaXMuJHN0b3JlLnN0YXRlLnVzZXIuY29tcGFueS5pZFxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLiRzdG9yZS5jb21taXQoJ3NldFN1YmhlYWRlcicsIHtcbiAgICAgIHN1YnRpdGxlOiAnJyxcbiAgICAgIHRpdGxlOiB0aGlzLmxvYygnY29tcG9uZW50cy5ob21lLnN1YmhlYWRlclRpdGxlJyksXG4gICAgICBkZXNjcmlwdGlvbjogdGhpcy5sb2MoJ2NvbXBvbmVudHMuaG9tZS5zdWJoZWFkZXJEZXNjcmlwdGlvbicpXG4gICAgfSk7XG4gIH1cbn1cbjwvc2NyaXB0PlxuIiwiaW1wb3J0IFZ1ZSBmcm9tICd2dWUnO1xuaW1wb3J0IEFwcCBmcm9tICcuLi9hcHAudnVlJztcbmltcG9ydCBSb3V0ZXIgZnJvbSAnLi9yb3V0ZXInO1xuaW1wb3J0IHN0b3JlIGZyb20gJy4uLy4uL3N0b3JlJztcblxuaW1wb3J0ICcuLi9jb21tb24tc2V0dGluZ3MnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGluaXQoZWxlbWVudElkKSB7XG4gICAgY29uc3QgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGVsZW1lbnRJZCk7XG5cbiAgICBpZihlbGVtZW50KSB7XG5cbiAgICAgIGNvbnN0IHJvdXRlciA9IG5ldyBSb3V0ZXIoe1xuICAgICAgICBiYXNlOiBlbGVtZW50LmdldEF0dHJpYnV0ZSgnZGF0YS1iYXNlLXVybCcpXG4gICAgICB9KTtcblxuICAgICAgbmV3IFZ1ZSh7XG4gICAgICAgIGVsOiAnIycgKyBlbGVtZW50SWQsXG4gICAgICAgIHJvdXRlcixcbiAgICAgICAgc3RvcmUsXG4gICAgICAgIG1vdW50ZWQgKCkge1xuICAgICAgICAgIC8vY29uc29sZS5sb2codGhpcyk7XG4gICAgICAgICAgLy8gU3R1ZmYgdG8gZG8gd2hlbiBtb3VudGVkXG4gICAgICAgIH0sXG4gICAgICAgIHJlbmRlcjogY3JlYXRlRWxlbWVudCA9PiB7XG4gICAgICAgICAgcmV0dXJuIGNyZWF0ZUVsZW1lbnQoQXBwKVxuICAgICAgICB9LFxuICAgICAgICBjcmVhdGVkOiAoKSA9PiB7XG4gICAgICAgICAgLy8gV2UgZG9uJ3QgYWN0dWFsbHkgaGF2ZSBzdWJoZWFkZXIgYnV0IHdlIGRvbid0IG5lZWQgaXQgZWl0aGVyXG4gICAgICAgICAgc3RvcmUuY29tbWl0KCdzZXRTdWJoZWFkZXJGb3VuZCcsIHRydWUpO1xuICAgICAgICAgIHN0b3JlLmNvbW1pdCgnc2V0TmVlZHNMb2dnaW5JbicsIGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCBWdWUgZnJvbSAndnVlJ1xuaW1wb3J0IFZ1ZVJvdXRlciBmcm9tICd2dWUtcm91dGVyJ1xuXG4vLyBWaWV3c1xuaW1wb3J0IEZvcmdvdHRlblBhc3N3b3JkIGZyb20gJy4uLy4uLy4uL2NvbXBvbmVudHMvdmlldy1mb3Jnb3R0ZW4tcGFzc3dvcmQudnVlJztcblxuVnVlLnVzZShWdWVSb3V0ZXIpXG5cbmNvbnN0IFJvdXRlciA9IChvcHRpb25zKSA9PiB7XG4gIHJldHVybiBuZXcgVnVlUm91dGVyKHtcbiAgICBtb2RlOiAnaGlzdG9yeScsXG4gICAgYmFzZTogb3B0aW9ucy5iYXNlLFxuICAgIGxpbmtBY3RpdmVDbGFzczogJ3Ytcm91dGVyLWxpbmtfX2FjdGl2ZScsXG4gICAgbGlua0V4YWN0QWN0aXZlQ2xhc3M6ICd2LXJvdXRlci1saW5rX19jdXJyZW50JyxcbiAgICByb3V0ZXM6IFtcbiAgICAgIHtcbiAgICAgICAgcGF0aDogJy8nLCBuYW1lOiAnZm9yZ290dGVuLXBhc3N3b3JkJywgY29tcG9uZW50OiBGb3Jnb3R0ZW5QYXNzd29yZFxuICAgICAgfVxuICAgIF1cbiAgfSlcbn1cblxuZXhwb3J0IGRlZmF1bHQgUm91dGVyO1xuIiwiaW1wb3J0IFZ1ZSBmcm9tICd2dWUnXG5pbXBvcnQgVnVlUm91dGVyIGZyb20gJ3Z1ZS1yb3V0ZXInXG5cbi8vIFZpZXdzXG5pbXBvcnQgQ29tcGFueSBmcm9tICcuLi8uLi8uLi9jb21wb25lbnRzL3ZpZXctY29tcGFueS52dWUnO1xuXG5WdWUudXNlKFZ1ZVJvdXRlcilcblxuY29uc3QgUm91dGVyID0gKG9wdGlvbnMpID0+IHtcbiAgcmV0dXJuIG5ldyBWdWVSb3V0ZXIoe1xuICAgIG1vZGU6ICdoaXN0b3J5JyxcbiAgICBiYXNlOiBvcHRpb25zLmJhc2UsXG4gICAgbGlua0FjdGl2ZUNsYXNzOiAndi1yb3V0ZXItbGlua19fYWN0aXZlJyxcbiAgICBsaW5rRXhhY3RBY3RpdmVDbGFzczogJ3Ytcm91dGVyLWxpbmtfX2N1cnJlbnQnLFxuICAgIHJvdXRlczogW1xuICAgICAgeyBwYXRoOiAnLycsIG5hbWU6ICdjb21wYW55JywgY29tcG9uZW50OiBDb21wYW55IH0sXG4gICAgXVxuICB9KVxufVxuXG5leHBvcnQgZGVmYXVsdCBSb3V0ZXI7XG4iLCJpbXBvcnQgVnVlIGZyb20gJ3Z1ZSc7XG5pbXBvcnQgQXBwIGZyb20gJy4uL2FwcC52dWUnO1xuaW1wb3J0IFJvdXRlciBmcm9tICcuL3JvdXRlcic7XG5pbXBvcnQgc3RvcmUgZnJvbSAnLi4vLi4vc3RvcmUnO1xuXG5pbXBvcnQgJy4uL2NvbW1vbi1zZXR0aW5ncyc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgaW5pdChlbGVtZW50SWQpIHtcbiAgICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZWxlbWVudElkKTtcblxuICAgIGlmKGVsZW1lbnQpIHtcblxuICAgICAgY29uc3Qgcm91dGVyID0gbmV3IFJvdXRlcih7XG4gICAgICAgIGJhc2U6IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLWJhc2UtdXJsJylcbiAgICAgIH0pO1xuXG4gICAgICBuZXcgVnVlKHtcbiAgICAgICAgZWw6ICcjJyArIGVsZW1lbnRJZCxcbiAgICAgICAgcm91dGVyLFxuICAgICAgICBzdG9yZSxcbiAgICAgICAgbW91bnRlZCAoKSB7XG4gICAgICAgICAgLy8gU3R1ZmYgdG8gZG8gd2hlbiBtb3VudGVkXG4gICAgICAgIH0sXG4gICAgICAgIHJlbmRlcjogY3JlYXRlRWxlbWVudCA9PiB7XG4gICAgICAgICAgcmV0dXJuIGNyZWF0ZUVsZW1lbnQoQXBwKVxuICAgICAgICB9LFxuICAgICAgICBjcmVhdGVkOiAoKSA9PiB7XG4gICAgICAgICAgLy8gV2UgZG9uJ3QgYWN0dWFsbHkgaGF2ZSBzdWJoZWFkZXIgYnV0IHdlIGRvbid0IG5lZWQgaXQgZWl0aGVyXG4gICAgICAgICAgc3RvcmUuY29tbWl0KCdzZXRTdWJoZWFkZXJGb3VuZCcsIHRydWUpO1xuICAgICAgICAgIHN0b3JlLmNvbW1pdCgnc2V0TmVlZHNMb2dnaW5JbicsIGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCBWdWUgZnJvbSAndnVlJ1xuaW1wb3J0IFZ1ZVJvdXRlciBmcm9tICd2dWUtcm91dGVyJ1xuXG4vLyBWaWV3c1xuaW1wb3J0IFVwZGF0ZVBhc3N3b3JkIGZyb20gJy4uLy4uLy4uL2NvbXBvbmVudHMvdmlldy11cGRhdGUtcGFzc3dvcmQudnVlJztcblxuVnVlLnVzZShWdWVSb3V0ZXIpXG5cbmNvbnN0IFJvdXRlciA9IChvcHRpb25zKSA9PiB7XG4gIHJldHVybiBuZXcgVnVlUm91dGVyKHtcbiAgICBtb2RlOiAnaGlzdG9yeScsXG4gICAgYmFzZTogb3B0aW9ucy5iYXNlLFxuICAgIGxpbmtBY3RpdmVDbGFzczogJ3Ytcm91dGVyLWxpbmtfX2FjdGl2ZScsXG4gICAgbGlua0V4YWN0QWN0aXZlQ2xhc3M6ICd2LXJvdXRlci1saW5rX19jdXJyZW50JyxcbiAgICByb3V0ZXM6IFtcbiAgICAgIHtcbiAgICAgICAgcGF0aDogJy8nLCBuYW1lOiAndXBkYXRlLXBhc3N3b3JkJywgY29tcG9uZW50OiBVcGRhdGVQYXNzd29yZFxuICAgICAgfVxuICAgIF1cbiAgfSlcbn1cblxuZXhwb3J0IGRlZmF1bHQgUm91dGVyO1xuIiwiaW1wb3J0IFZ1ZSBmcm9tICd2dWUnO1xuaW1wb3J0IEFwcCBmcm9tICcuLi9hcHAudnVlJztcbmltcG9ydCBSb3V0ZXIgZnJvbSAnLi9yb3V0ZXInO1xuaW1wb3J0IHN0b3JlIGZyb20gJy4uLy4uL3N0b3JlJztcblxuaW1wb3J0ICcuLi9jb21tb24tc2V0dGluZ3MnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGluaXQoZWxlbWVudElkKSB7XG4gICAgY29uc3QgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGVsZW1lbnRJZCk7XG5cbiAgICBpZihlbGVtZW50KSB7XG5cbiAgICAgIGNvbnN0IHJvdXRlciA9IG5ldyBSb3V0ZXIoe1xuICAgICAgICBiYXNlOiBlbGVtZW50LmdldEF0dHJpYnV0ZSgnZGF0YS1iYXNlLXVybCcpXG4gICAgICB9KTtcblxuICAgICAgbmV3IFZ1ZSh7XG4gICAgICAgIGVsOiAnIycgKyBlbGVtZW50SWQsXG4gICAgICAgIHJvdXRlcixcbiAgICAgICAgc3RvcmUsXG4gICAgICAgIG1vdW50ZWQgKCkge1xuICAgICAgICAgIC8vIFN0dWZmIHRvIGRvIHdoZW4gbW91bnRlZFxuICAgICAgICB9LFxuICAgICAgICByZW5kZXI6IGNyZWF0ZUVsZW1lbnQgPT4ge1xuICAgICAgICAgIHJldHVybiBjcmVhdGVFbGVtZW50KEFwcClcbiAgICAgICAgfSxcbiAgICAgICAgY3JlYXRlZDogKCkgPT4ge1xuXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgVnVlIGZyb20gJ3Z1ZSdcbmltcG9ydCBWdWVSb3V0ZXIgZnJvbSAndnVlLXJvdXRlcidcblxuLy8gVmlld3NcbmltcG9ydCBVc2VyU2V0dGluZ3MgZnJvbSAnLi4vLi4vLi4vY29tcG9uZW50cy92aWV3LXVzZXItc2V0dGluZ3MudnVlJztcbmltcG9ydCBDaGFuZ2VQYXNzd29yZCBmcm9tICcuLi8uLi8uLi9jb21wb25lbnRzL3ZpZXctY2hhbmdlLXBhc3N3b3JkLnZ1ZSc7XG5pbXBvcnQgRWRpdEFjY291bnQgZnJvbSAnLi4vLi4vLi4vY29tcG9uZW50cy92aWV3LWVkaXQtYWNjb3VudC52dWUnO1xuXG5WdWUudXNlKFZ1ZVJvdXRlcilcblxuY29uc3QgUm91dGVyID0gKG9wdGlvbnMpID0+IHtcbiAgcmV0dXJuIG5ldyBWdWVSb3V0ZXIoe1xuICAgIG1vZGU6ICdoaXN0b3J5JyxcbiAgICBiYXNlOiBvcHRpb25zLmJhc2UsXG4gICAgbGlua0FjdGl2ZUNsYXNzOiAndi1yb3V0ZXItbGlua19fYWN0aXZlJyxcbiAgICBsaW5rRXhhY3RBY3RpdmVDbGFzczogJ3Ytcm91dGVyLWxpbmtfX2N1cnJlbnQnLFxuICAgIHJvdXRlczogW1xuICAgICAge1xuICAgICAgICBwYXRoOiAnLycsIG5hbWU6ICd1c2VyLXNldHRpbmdzJywgY29tcG9uZW50OiBVc2VyU2V0dGluZ3MsXG4gICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgLy8gVXNlclByb2ZpbGUgd2lsbCBiZSByZW5kZXJlZCBpbnNpZGUgVXNlcidzIDxyb3V0ZXItdmlldz5cbiAgICAgICAgICAgIC8vIHdoZW4gL3VzZXIvOmlkL3Byb2ZpbGUgaXMgbWF0Y2hlZFxuICAgICAgICAgICAgbmFtZTogJ2NoYW5nZS1wYXNzd29yZCcsXG4gICAgICAgICAgICBwYXRoOiAnY2hhbmdlLXBhc3N3b3JkJyxcbiAgICAgICAgICAgIGNvbXBvbmVudDogQ2hhbmdlUGFzc3dvcmRcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIC8vIFVzZXJQb3N0cyB3aWxsIGJlIHJlbmRlcmVkIGluc2lkZSBVc2VyJ3MgPHJvdXRlci12aWV3PlxuICAgICAgICAgICAgLy8gd2hlbiAvdXNlci86aWQvcG9zdHMgaXMgbWF0Y2hlZFxuICAgICAgICAgICAgbmFtZTogJ2VkaXQtYWNjb3VudCcsXG4gICAgICAgICAgICBwYXRoOiAnZWRpdC1hY2NvdW50JyxcbiAgICAgICAgICAgIGNvbXBvbmVudDogRWRpdEFjY291bnRcbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH1cbiAgICBdXG4gIH0pXG59XG5cbmV4cG9ydCBkZWZhdWx0IFJvdXRlcjtcbiIsImltcG9ydCBWdWUgZnJvbSAndnVlJ1xuaW1wb3J0IFZ1ZVJvdXRlciBmcm9tICd2dWUtcm91dGVyJ1xuXG4vLyBWaWV3c1xuaW1wb3J0IFdhcnJhbnR5UmVnaXN0cmF0aW9ucyBmcm9tICcuLi8uLi8uLi9jb21wb25lbnRzL3ZpZXctd2FycmFudHktcmVnaXN0cmF0aW9ucy52dWUnO1xuaW1wb3J0IFdhcnJhbnR5UmVnaXN0cmF0aW9uIGZyb20gJy4uLy4uLy4uL2NvbXBvbmVudHMvdmlldy13YXJyYW50eS1yZWdpc3RyYXRpb24udnVlJztcblxuVnVlLnVzZShWdWVSb3V0ZXIpXG5cbmNvbnN0IFJvdXRlciA9IChvcHRpb25zKSA9PiB7XG4gIGNvbnN0IHJvdXRlcyA9IFtcbiAgICB7IHBhdGg6ICcvJywgbmFtZTogJ3dhcnJhbnR5LXJlZ2lzdHJhdGlvbnMnLCBjb21wb25lbnQ6IFdhcnJhbnR5UmVnaXN0cmF0aW9ucyB9LFxuICAgIHsgcGF0aDogJy86aWQnLCBuYW1lOiAnd2FycmFudHktcmVnaXN0cmF0aW9uJywgY29tcG9uZW50OiBXYXJyYW50eVJlZ2lzdHJhdGlvbiB9XG4gIF07XG5cbiAgY29uc3Qgcm91dGVyID0gIG5ldyBWdWVSb3V0ZXIoe1xuICAgIG1vZGU6ICdoaXN0b3J5JyxcbiAgICBiYXNlOiBvcHRpb25zLmJhc2UsXG4gICAgbGlua0FjdGl2ZUNsYXNzOiAndi1yb3V0ZXItbGlua19fYWN0aXZlJyxcbiAgICBsaW5rRXhhY3RBY3RpdmVDbGFzczogJ3Ytcm91dGVyLWxpbmtfX2N1cnJlbnQnLFxuICAgIHJvdXRlczogcm91dGVzXG4gIH0pO1xuXG4gIHJldHVybiByb3V0ZXI7XG59XG5cbmV4cG9ydCBkZWZhdWx0IFJvdXRlcjtcbiIsIjx0ZW1wbGF0ZT5cbiAgPGRpdj5cbiAgICA8bW9kYWwgOm5hbWU9XCJtb2RhbE5hbWVcIiA6Y2xpY2stdG8tY2xvc2U9XCJ0cnVlXCIgOmhlaWdodD1cIidhdXRvJ1wiIDpzY3JvbGxhYmxlPVwidHJ1ZVwiPlxuICAgICAgPHYtbW9kYWwtY29udGVudCB2LW9uOmNsb3NlPVwiY2xvc2VcIiA6dGl0bGU9XCJtb2RhbE1vZGUgPT09ICdhZGQnID8gbG9jKCdhZGRDb21wYW55JykgOiBsb2MoJ2VkaXRDb21wYW55JykgXCI+XG4gICAgICAgIDx2LWZvcm0gOmZpZWxkcz1cImZpZWxkc1wiIDpmb3JtLWRhdGE9XCJmb3JtRGF0YVwiIDpmb3JtLWVycm9ycz1cImZvcm1FcnJvcnNcIj5cbiAgICAgICAgICA8ZGl2IHNsb3Q9XCJidXR0b25zXCIgY2xhc3M9XCJ2LWZvcm0tYnV0dG9uLWRpdlwiPlxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tLWNhbmNlbFwiIHR5cGU9XCJidXR0b25cIiB2LW9uOmNsaWNrPVwiY2xvc2VcIj57e2xvYygnY2FuY2VsJyl9fTwvYnV0dG9uPlxuICAgICAgICAgICAgPGJ1dHRvbiB2LWlmPVwibW9kYWxNb2RlID09PSAnYWRkJ1wiIHR5cGU9XCJzdWJtaXRcIiB2LW9uOmNsaWNrPVwiYWRkQ29tcGFueVwiIGNsYXNzPVwiYnRuIGJ0bi0td2hpdGVcIj57e2xvYygnYWRkQ29tcGFueScpfX08L2J1dHRvbj5cbiAgICAgICAgICAgIDxidXR0b24gdi1pZj1cIm1vZGFsTW9kZSA9PT0gJ2VkaXQnXCIgdHlwZT1cInN1Ym1pdFwiIHYtb246Y2xpY2s9XCJ1cGRhdGVDb21wYW55XCIgY2xhc3M9XCJidG4gYnRuLS13aGl0ZVwiPnt7bG9jKCd1cGRhdGVDb21wYW55Jyl9fTwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L3YtZm9ybT5cbiAgICAgIDwvdi1tb2RhbC1jb250ZW50PlxuICAgIDwvbW9kYWw+XG4gIDwvZGl2PlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cblxuaW1wb3J0IFZNb2RhbENvbnRlbnQgZnJvbSAnLi92LW1vZGFsLWNvbnRlbnQudnVlJztcbmltcG9ydCBWRm9ybSBmcm9tICcuL3YtZm9ybS52dWUnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGNvbXBvbmVudHM6IHtcbiAgICAndi1tb2RhbC1jb250ZW50JzogVk1vZGFsQ29udGVudCxcbiAgICAndi1mb3JtJzogVkZvcm1cbiAgfSxcbiAgbmFtZTogJ01vZGFsQ29tcGFueScsXG4gIHByb3BzOiBbJ29uLWNsb3NlJywgJ21vZGFsLW1vZGUnLCAnbW9kYWwtZGF0YSddLFxuICBkYXRhOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZm9ybUVycm9yczoge30sXG4gICAgICBmb3JtRGF0YToge30sXG4gICAgICBkYXRhOiB7fSxcbiAgICAgIG5hbWU6ICdjb21wYW55J1xuICAgIH1cbiAgfSxcbiAgY29tcHV0ZWQ6IHtcbiAgICBmaWVsZHMoKSB7XG4gICAgICAvLyBSZWZyZXNoIHdoZW4gY291bnRyaWVzIGxvYWRcbiAgICAgIGlmKHRoaXMuJHN0b3JlLmdldHRlcnMuY291bnRyeVNlbGVjdE9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RmllbGRzKCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBjYW5FZGl0Q3VzdG9tZXJOdW1iZXIoKSB7XG4gICAgICBzd2l0Y2godGhpcy5kYXRhLnR5cGUpIHtcbiAgICAgICAgY2FzZSAncmV0YWlsZXInOlxuICAgICAgICAgIHJldHVybiB0aGlzLiR1c2VyUmlnaHRzLmhhc1JpZ2h0KCB3aW5kb3cuUklHSFRTLkVESVRfQ1VTVE9NRVJfTlVNQkVSLCB0aGlzLiRzdG9yZS5zdGF0ZS51c2VyLnJvbGUgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnaW1wb3J0ZXInOlxuICAgICAgICAgIHJldHVybiB0aGlzLiR1c2VyUmlnaHRzLmhhc1JpZ2h0KCB3aW5kb3cuUklHSFRTLkVESVRfQU5ZX0NVU1RPTUVSX05VTUJFUiwgdGhpcy4kc3RvcmUuc3RhdGUudXNlci5yb2xlICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICB9LFxuICAgIG1vZGFsTmFtZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLm5hbWUgKyAnLScgKyB0aGlzLm1vZGFsTW9kZTtcbiAgICB9XG4gIH0sXG4gIG1ldGhvZHM6IHtcbiAgICBpbmNyZWFzZVNob3dDb3VudCgpIHtcbiAgICAgIHRoaXMuc2hvd0NvdW50Kys7XG4gICAgfSxcbiAgICBhcHBseU1vZGFsRGF0YSgpIHtcbiAgICAgIHRoaXMuZm9ybUVycm9ycyA9IHt9O1xuICAgICAgdGhpcy5mb3JtRGF0YSA9IHt9O1xuICAgICAgdGhpcy5kYXRhID0ge307XG5cbiAgICAgIGlmKHRoaXMuJHByb3BzLm1vZGFsRGF0YSkge1xuICAgICAgICBPYmplY3Qua2V5cyh0aGlzLiRwcm9wcy5tb2RhbERhdGEpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICB0aGlzLmRhdGFba2V5XSA9IHRoaXMuJHByb3BzLm1vZGFsRGF0YVtrZXldO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5pbmNyZWFzZVNob3dDb3VudCgpO1xuICAgIH0sXG4gICAgZ2V0RmllbGRzKCkge1xuICAgICAgLy8gUmVmcmVzaCBkYXRhIHdoZW4gc2hvd0NvdW50IGlzIGluY3JlYXNlZFxuICAgICAgdGhpcy5zaG93Q291bnQ7XG5cbiAgICAgIC8vIEluaXRpYWxpemUgZm9ybSBkZXBlbmRpbmcgb24gbW9kYWwgbW9kZVxuICAgICAgaWYodGhpcy4kcHJvcHMubW9kYWxNb2RlID09PSAnYWRkJykge1xuXG4gICAgICAgIHJldHVybiBbe1xuICAgICAgICAgIG5hbWU6ICduYW1lJyxcbiAgICAgICAgICB2YWx1ZTogJycsXG4gICAgICAgICAgbGFiZWw6IHRoaXMubG9jKCduYW1lJyksXG4gICAgICAgICAgdHlwZTogJ3RleHQnXG4gICAgICAgIH0sIHtcbiAgICAgICAgICBuYW1lOiAndHlwZScsXG4gICAgICAgICAgdmFsdWU6ICdyZXRhaWxlcicsXG4gICAgICAgICAgdHlwZTogJ2hpZGRlbidcbiAgICAgICAgfSwge1xuICAgICAgICAgIG5hbWU6ICdjdXN0b21lck51bWJlcicsXG4gICAgICAgICAgdmFsdWU6ICcnLFxuICAgICAgICAgIGxhYmVsOiB0aGlzLmxvYygnY3VzdG9tZXJOdW1iZXInKSxcbiAgICAgICAgICB0eXBlOiB0aGlzLmNhbkVkaXRDdXN0b21lck51bWJlciA/ICd0ZXh0JyA6ICdoaWRkZW4nXG4gICAgICAgIH0sIHtcbiAgICAgICAgICBuYW1lOiAnYnVzaW5lc3NJZCcsXG4gICAgICAgICAgdmFsdWU6ICcnLFxuICAgICAgICAgIGxhYmVsOiB0aGlzLmxvYygnYnVzaW5lc3NJZCcpLFxuICAgICAgICAgIHR5cGU6ICd0ZXh0J1xuICAgICAgICB9LCB7XG4gICAgICAgICAgbmFtZTogJ2FkZHJlc3MnLFxuICAgICAgICAgIHZhbHVlOiAnJyxcbiAgICAgICAgICBsYWJlbDogdGhpcy5sb2MoJ2FkZHJlc3MnKSxcbiAgICAgICAgICB0eXBlOiAndGV4dCdcbiAgICAgICAgfSwge1xuICAgICAgICAgIG5hbWU6ICdwb3N0YWxDb2RlJyxcbiAgICAgICAgICB2YWx1ZTogJycsXG4gICAgICAgICAgbGFiZWw6IHRoaXMubG9jKCdwb3N0YWxDb2RlJyksXG4gICAgICAgICAgdHlwZTogJ3RleHQnXG4gICAgICAgIH0sIHtcbiAgICAgICAgICBuYW1lOiAncG9zdE9mZmljZScsXG4gICAgICAgICAgdmFsdWU6ICcnLFxuICAgICAgICAgIGxhYmVsOiB0aGlzLmxvYygncG9zdE9mZmljZScpLFxuICAgICAgICAgIHR5cGU6ICd0ZXh0J1xuICAgICAgICB9LCB7XG4gICAgICAgICAgbmFtZTogJ2NvdW50cnknLFxuICAgICAgICAgIHZhbHVlOiB0aGlzLiRzdG9yZS5zdGF0ZS51c2VyLmluZm8uY291bnRyeSAmJiB0aGlzLiRzdG9yZS5zdGF0ZS51c2VyLmluZm8uY291bnRyeS5jb3VudHJ5Q29kZSB8fCAnJywgLy8gVXNlciBjdXJyZW50IHVzZXIgY291bnRyeSBhcyBhIGRlZmF1bHRcbiAgICAgICAgICBsYWJlbDogdGhpcy5sb2MoJ2NvdW50cnknKSxcbiAgICAgICAgICBvcHRpb25zOiB0aGlzLiRzdG9yZS5nZXR0ZXJzLmNvdW50cnlTZWxlY3RPcHRpb25zLFxuICAgICAgICAgIHR5cGU6ICdzZWxlY3QnXG4gICAgICAgIH1dXG4gICAgICB9IGVsc2UgaWYodGhpcy4kcHJvcHMubW9kYWxNb2RlID09PSAnZWRpdCcpIHtcbiAgICAgICAgdGhpcy5zaG93Q291bnRcbiAgICAgICAgcmV0dXJuIFt7XG4gICAgICAgICAgbmFtZTogJ25hbWUnLFxuICAgICAgICAgIHZhbHVlOiB0aGlzLmRhdGEubmFtZSxcbiAgICAgICAgICBsYWJlbDogdGhpcy5sb2MoJ25hbWUnKSxcbiAgICAgICAgICB0eXBlOiAndGV4dCdcbiAgICAgICAgfSwge1xuICAgICAgICAgIG5hbWU6ICd0eXBlJyxcbiAgICAgICAgICB2YWx1ZTogdGhpcy5kYXRhLnR5cGUsXG4gICAgICAgICAgdHlwZTogJ2hpZGRlbidcbiAgICAgICAgfSwge1xuICAgICAgICAgIG5hbWU6ICdpZCcsXG4gICAgICAgICAgdmFsdWU6IHRoaXMuZGF0YS5pZCxcbiAgICAgICAgICB0eXBlOiAnaGlkZGVuJ1xuICAgICAgICB9LCB7XG4gICAgICAgICAgbmFtZTogJ2N1c3RvbWVyTnVtYmVyJyxcbiAgICAgICAgICB2YWx1ZTogdGhpcy5kYXRhLmN1c3RvbWVyTnVtYmVyLFxuICAgICAgICAgIGxhYmVsOiB0aGlzLmxvYygnY3VzdG9tZXJOdW1iZXInKSxcbiAgICAgICAgICB0eXBlOiB0aGlzLmNhbkVkaXRDdXN0b21lck51bWJlciA/ICd0ZXh0JyA6ICdoaWRkZW4nXG4gICAgICAgIH0sIHtcbiAgICAgICAgICBuYW1lOiAnYnVzaW5lc3NJZCcsXG4gICAgICAgICAgdmFsdWU6IHRoaXMuZGF0YS5idXNpbmVzc0lkLFxuICAgICAgICAgIGxhYmVsOiB0aGlzLmxvYygnYnVzaW5lc3NJZCcpLFxuICAgICAgICAgIHR5cGU6ICd0ZXh0J1xuICAgICAgICB9LCB7XG4gICAgICAgICAgbmFtZTogJ2FkZHJlc3MnLFxuICAgICAgICAgIHZhbHVlOiB0aGlzLmRhdGEuYWRkcmVzcyxcbiAgICAgICAgICBsYWJlbDogdGhpcy5sb2MoJ2FkZHJlc3MnKSxcbiAgICAgICAgICB0eXBlOiAndGV4dCdcbiAgICAgICAgfSwge1xuICAgICAgICAgIG5hbWU6ICdwb3N0YWxDb2RlJyxcbiAgICAgICAgICB2YWx1ZTogdGhpcy5kYXRhLnBvc3RhbENvZGUsXG4gICAgICAgICAgbGFiZWw6IHRoaXMubG9jKCdwb3N0YWxDb2RlJyksXG4gICAgICAgICAgdHlwZTogJ3RleHQnXG4gICAgICAgIH0sIHtcbiAgICAgICAgICBuYW1lOiAncG9zdE9mZmljZScsXG4gICAgICAgICAgdmFsdWU6IHRoaXMuZGF0YS5wb3N0T2ZmaWNlLFxuICAgICAgICAgIGxhYmVsOiB0aGlzLmxvYygncG9zdE9mZmljZScpLFxuICAgICAgICAgIHR5cGU6ICd0ZXh0J1xuICAgICAgICB9LCB7XG4gICAgICAgICAgbmFtZTogJ2NvdW50cnknLFxuICAgICAgICAgIHZhbHVlOiB0aGlzLmRhdGEuY291bnRyeSAmJiB0aGlzLmRhdGEuY291bnRyeS5jb3VudHJ5Q29kZSB8fCAnJyxcbiAgICAgICAgICBsYWJlbDogdGhpcy5sb2MoJ2NvdW50cnknKSxcbiAgICAgICAgICBvcHRpb25zOiB0aGlzLiRzdG9yZS5nZXR0ZXJzLmNvdW50cnlTZWxlY3RPcHRpb25zLFxuICAgICAgICAgIHR5cGU6ICdzZWxlY3QnXG4gICAgICAgIH1dO1xuICAgICAgfVxuICAgIH0sXG4gICAgc2hvdygpIHtcbiAgICAgIHRoaXMuJHN0b3JlLmRpc3BhdGNoKCdnZXRDb3VudHJpZXMnKTtcbiAgICAgIHRoaXMuYXBwbHlNb2RhbERhdGEoKTtcbiAgICAgIHRoaXMuJG1vZGFsLnNob3codGhpcy5tb2RhbE5hbWUpO1xuICAgIH0sXG4gICAgY2xvc2UoZGF0YSkge1xuICAgICAgaWYodGhpcy5vbkNsb3NlKSB7XG4gICAgICAgIGlmKCFkYXRhKSB7XG4gICAgICAgICAgZGF0YSA9IHtcbiAgICAgICAgICAgIHN0YXR1czogJ2NhbmNlbCdcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHRoaXMub25DbG9zZShkYXRhKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuJG1vZGFsLmhpZGUodGhpcy5tb2RhbE5hbWUpO1xuICAgIH0sXG4gICAgYWRkQ29tcGFueSgpIHtcbiAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgICAgcmV0dXJuIHRoaXMuJGFwaS5hZGRDb21wYW55KHRoaXMuZm9ybURhdGEpLnRoZW4ocmVzID0+IHtcblxuICAgICAgICAvLyBFcnJvcnMgaW4gZm9ybVxuICAgICAgICBpZihyZXMuY29kZSA9PT0gNDAwKSB7XG4gICAgICAgICAgdGhpcy5mb3JtRXJyb3JzID0gcmVzLnJlc3VsdC5maWVsZHM7XG4gICAgICAgIH1cblxuICAgICAgICBpZihyZXMuY29kZSA9PT0gMjAwKSB7XG4gICAgICAgICAgc2VsZi4kc3RvcmUuY29tbWl0KCdhZGRDb21wYW55JywgcmVzLnJlc3VsdC5jb21wYW55KTtcbiAgICAgICAgICBzZWxmLmNsb3NlKHtzdGF0dXM6ICdzdWNjZXNzJ30pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9LFxuICAgIHVwZGF0ZUNvbXBhbnkoKSB7XG4gICAgICBjb25zdCBzZWxmID0gdGhpcztcblxuICAgICAgcmV0dXJuIHRoaXMuJGFwaS51cGRhdGVDb21wYW55KHRoaXMuZm9ybURhdGEuaWQsIHRoaXMuZm9ybURhdGEpLnRoZW4ocmVzID0+IHtcblxuICAgICAgICAvLyBFcnJvcnMgaW4gZm9ybVxuICAgICAgICBpZihyZXMuY29kZSA9PT0gNDAwKSB7XG4gICAgICAgICAgdGhpcy5mb3JtRXJyb3JzID0gcmVzLnJlc3VsdC5maWVsZHM7XG4gICAgICAgIH1cblxuICAgICAgICBpZihyZXMuY29kZSA9PT0gMjAwKSB7XG4gICAgICAgICAgc2VsZi4kc3RvcmUuY29tbWl0KCd1cGRhdGVDb21wYW55JywgcmVzLnJlc3VsdC5jb21wYW55KTtcbiAgICAgICAgICBzZWxmLmNsb3NlKHtzdGF0dXM6ICdzdWNjZXNzJ30pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIHdhdGNoOiB7XG4gICAgbW9kYWxEYXRhKCkge1xuICAgICAgdGhpcy5hcHBseU1vZGFsRGF0YSgpO1xuICAgIH1cbiAgfVxufVxuPC9zY3JpcHQ+XG4iLCI8dGVtcGxhdGU+XG4gIDxtb2RhbCA6bmFtZT1cIm1vZGFsTmFtZVwiIDpjbGljay10by1jbG9zZT1cImZhbHNlXCIgOmhlaWdodD1cIidhdXRvJ1wiIDpzY3JvbGxhYmxlPVwidHJ1ZVwiPlxuICAgIDx2LW1vZGFsLWNvbnRlbnQgdi1vbjpjbG9zZT1cImNsb3NlXCIgOnRpdGxlPVwibW9kYWxNb2RlID09PSAnYWRkJyA/IGxvYygnYWRkQ29tcGxhaW50JykgOiBsb2MoJ2VkaXRDb21wbGFpbnQnKSBcIj5cbiAgICAgIDwhLS0gPHAgY2xhc3M9XCJpbmdyZXNzXCI+e3tsb2MoJ2Zvcm1zLm1lc3NhZ2VzLndhcnJhbnR5UmVxdWlyZWQnKX19PC9wPiAtLT5cbiAgICAgIDx2LWNvbXBsYWludC11c2VyLWluZm8gOnVzZXItZGF0YT1cInVzZXJcIiA6Y29tcGFueS1kYXRhPVwiY29tcGFueVwiID48L3YtY29tcGxhaW50LXVzZXItaW5mbz5cbiAgICAgIDx2LWZvcm0gOmZpZWxkcz1cImZpZWxkc1wiIDpmb3JtLWRhdGE9XCJmb3JtRGF0YVwiIDpmb3JtLWVycm9ycz1cImZvcm1FcnJvcnNcIiA6b24tYmx1cj1cIm9uRmllbGRCbHVyXCI+XG4gICAgICAgIDxkaXYgc2xvdD1cImJ1dHRvbnNcIj5cbiAgICAgICAgICA8cCB2LWlmPVwidXBsb2FkaW5nRmlsZVwiPnt7bG9jKCd1cGxvYWRpbmdGaWxlJyl9fToge3t1cGxvYWRpbmdGaWxlfX0gLyB7e3RvdGFsRmlsZXN9fTwvcD5cbiAgICAgICAgICA8cCB2LWVsc2U+Jm5ic3A7PC9wPlxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLS1jYW5jZWxcIiB0eXBlPVwiYnV0dG9uXCIgdi1vbjpjbGljaz1cImNsb3NlXCI+e3tsb2MoJ2NhbmNlbCcpfX08L2J1dHRvbj5cbiAgICAgICAgICA8YnV0dG9uIDpkaXNhYmxlZD1cInByb2Nlc3NpbmdcIiB2LWlmPVwibW9kYWxNb2RlID09PSAnYWRkJ1wiIHR5cGU9XCJzdWJtaXRcIiB2LW9uOmNsaWNrPVwiYWRkQ29tcGxhaW50XCIgY2xhc3M9XCJidG4gYnRuLS13aGl0ZVwiPnt7bG9jKCdhZGRDb21wbGFpbnQnKX19PC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC92LWZvcm0+XG4gICAgPC92LW1vZGFsLWNvbnRlbnQ+XG4gIDwvbW9kYWw+XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuXG5pbXBvcnQgVk1vZGFsQ29udGVudCBmcm9tICcuL3YtbW9kYWwtY29udGVudC52dWUnO1xuaW1wb3J0IFZDb21wbGFpbnRVc2VySW5mbyBmcm9tICcuL3YtY29tcGxhaW50LXVzZXItaW5mby52dWUnO1xuaW1wb3J0IFZGb3JtIGZyb20gJy4vdi1mb3JtLnZ1ZSc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgY29tcG9uZW50czoge1xuICAgICd2LW1vZGFsLWNvbnRlbnQnOiBWTW9kYWxDb250ZW50LFxuICAgICd2LWNvbXBsYWludC11c2VyLWluZm8nOiBWQ29tcGxhaW50VXNlckluZm8sXG4gICAgJ3YtZm9ybSc6IFZGb3JtXG4gIH0sXG4gIG5hbWU6ICdNb2RhbENvbXBsYWludCcsXG4gIHByb3BzOiBbJ29uLWNsb3NlJywgJ21vZGFsLW1vZGUnLCAnbW9kYWwtZGF0YSddLFxuICBkYXRhOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZm9ybUVycm9yczoge30sXG4gICAgICBmb3JtRGF0YToge30sXG4gICAgICBkYXRhOiB7fSxcbiAgICAgIG5hbWU6ICdjb21wbGFpbnQnLFxuICAgICAgdG90YWxGaWxlczogMCxcbiAgICAgIHVwbG9hZGluZ0ZpbGU6IDAsXG4gICAgICBwcm9jZXNzaW5nOiBmYWxzZSxcbiAgICAgIGZldGNoZWRNYWNoaW5lTmFtZTogJycsXG4gICAgICBmZXRjaGVkRGVzY3JpcHRpb246ICcnLFxuICAgICAgZmV0Y2hlZFByb2NlZHVyZTogJydcbiAgICB9XG4gIH0sXG4gIGNvbXB1dGVkOiB7XG4gICAgdXNlcigpIHtcbiAgICAgIHJldHVybiB0aGlzLiRzdG9yZS5zdGF0ZS51c2VyLmluZm87XG4gICAgfSxcbiAgICBjb21wYW55KCkge1xuICAgICAgcmV0dXJuIHRoaXMuJHN0b3JlLnN0YXRlLnVzZXIuY29tcGFueTtcbiAgICB9LFxuICAgIGZpZWxkcygpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldEZpZWxkcygpO1xuICAgIH0sXG4gICAgbW9kYWxOYW1lKCkge1xuICAgICAgcmV0dXJuIHRoaXMubmFtZSArICctJyArIHRoaXMubW9kYWxNb2RlO1xuICAgIH1cbiAgfSxcbiAgbWV0aG9kczoge1xuICAgIG9uRmllbGRCbHVyKGRhdGEpIHtcbiAgICAgIGlmKGRhdGEubmFtZSA9PSAnc2VyaWFsTnVtYmVyJykge1xuICAgICAgICBpZih0aGlzLmZvcm1EYXRhLnNlcmlhbE51bWJlcikge1xuICAgICAgICAgIC8vIHRoaXMuY2hlY2tXYXJyYW50eVJlZ2lzdHJhdGlvbih0aGlzLmZvcm1EYXRhLnNlcmlhbE51bWJlcik7XG4gICAgICAgICAgdGhpcy5nZXRNYWNoaW5lTmFtZSh0aGlzLmZvcm1EYXRhLnNlcmlhbE51bWJlcik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIGNoZWNrV2FycmFudHlSZWdpc3RyYXRpb24oc2VyaWFsTnVtYmVyKSB7XG4gICAgICB0aGlzLmZvcm1FcnJvcnMgPSB7fTtcbiAgICAgIGNvbnN0IGFsbG93ZWRTZXJpYWxOdW1iZXJzID0gdGhpcy4kc3RvcmUuc3RhdGUud2FycmFudGVkU2VyaWFsTnVtYmVycztcbiAgICAgIGlmICghYWxsb3dlZFNlcmlhbE51bWJlcnMuaW5jbHVkZXMoc2VyaWFsTnVtYmVyKSkge1xuICAgICAgICB0aGlzLmZvcm1FcnJvcnMgPSB7XG4gICAgICAgICAgZmllbGRFcnJvcjogdHJ1ZSxcbiAgICAgICAgICBzZXJpYWxOdW1iZXI6ICB7XG4gICAgICAgICAgICBmaWVsZDogJ3NlcmlhbE51bWJlcicsXG4gICAgICAgICAgICBtZXNzYWdlczogW3RoaXMubG9jKCdmb3Jtcy5tZXNzYWdlcy5ub3RXYXJyYW50ZWRTZXJpYWxOdW1iZXInKV1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIGluY3JlYXNlU2hvd0NvdW50KCkge1xuICAgICAgdGhpcy5zaG93Q291bnQrKztcbiAgICB9LFxuICAgIGFwcGx5TW9kYWxEYXRhKCkge1xuICAgICAgdGhpcy5mb3JtRXJyb3JzID0ge307XG4gICAgICB0aGlzLmZvcm1EYXRhID0ge307XG4gICAgICB0aGlzLmRhdGEgPSB7fTtcbiAgICAgIHRoaXMuZmV0Y2hlZE1hY2hpbmVOYW1lID0gJyc7XG4gICAgICB0aGlzLmZldGNoZWRQcm9jZWR1cmUgPSAnJztcblxuICAgICAgaWYodGhpcy4kcHJvcHMubW9kYWxEYXRhKSB7XG4gICAgICAgIE9iamVjdC5rZXlzKHRoaXMuJHByb3BzLm1vZGFsRGF0YSkuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgIHRoaXMuZGF0YVtrZXldID0gdGhpcy4kcHJvcHMubW9kYWxEYXRhW2tleV07XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmluY3JlYXNlU2hvd0NvdW50KCk7XG4gICAgfSxcbiAgICBnZXRGaWVsZHMoKSB7XG4gICAgICAvLyBJbml0aWFsaXplIGZvcm0gZGVwZW5kaW5nIG9uIG1vZGFsIG1vZGVcbiAgICAgIGlmKHRoaXMuJHByb3BzLm1vZGFsTW9kZSA9PT0gJ2FkZCcpIHtcbiAgICAgICAgcmV0dXJuIFt7XG4gICAgICAgICAgbmFtZTogJ3NlcmlhbE51bWJlcicsXG4gICAgICAgICAgdmFsdWU6IHRoaXMuZGF0YS5zZXJpYWxOdW1iZXIsXG4gICAgICAgICAgbGFiZWw6IHRoaXMubG9jKCdzZXJpYWxOdW1iZXInKSxcbiAgICAgICAgICB0eXBlOiAndGV4dCdcbiAgICAgICAgfSwge1xuICAgICAgICAgIG5hbWU6ICduYW1lJyxcbiAgICAgICAgICB2YWx1ZTogdGhpcy5kYXRhLm5hbWUgfHwgdGhpcy5mZXRjaGVkTWFjaGluZU5hbWUsXG4gICAgICAgICAgbGFiZWw6IHRoaXMubG9jKCduYW1lJyksXG4gICAgICAgICAgdHlwZTogJ3RleHQnXG4gICAgICAgIH0sIHtcbiAgICAgICAgICBuYW1lOiAncmVmZXJlbmNlSWQnLFxuICAgICAgICAgIHZhbHVlOiB0aGlzLmRhdGEucmVmZXJlbmNlSWQsXG4gICAgICAgICAgbGFiZWw6IHRoaXMubG9jKCdmb3Jtcy5sYWJlbHMuY29tcGxhaW50UmVmZXJlbmNlJyksXG4gICAgICAgICAgdHlwZTogJ3RleHQnXG4gICAgICAgIH0se1xuICAgICAgICAgIG5hbWU6ICdkZXNjcmlwdGlvbicsXG4gICAgICAgICAgdmFsdWU6IHRoaXMuZGF0YS5kZXNjcmlwdGlvbiB8fCB0aGlzLmZldGNoZWREZXNjcmlwdGlvbixcbiAgICAgICAgICBwbGFjZWhvbGRlcjogdGhpcy5sb2MoJ2Zvcm1zLnBsYWNlaG9sZGVycy5jb21wbGFpbnREZXNjcmlwdGlvbicpLFxuICAgICAgICAgIGxhYmVsOiB0aGlzLmxvYygnZm9ybXMubGFiZWxzLmNvbXBsYWludERlc2NyaXB0aW9uJyksXG4gICAgICAgICAgdHlwZTogJ3RleHRhcmVhJ1xuICAgICAgICB9LHtcbiAgICAgICAgICBuYW1lOiAnZGVzY3JpcHRpb25EYXRlJyxcbiAgICAgICAgICB2YWx1ZTogdGhpcy5kYXRhLmRlc2NyaXB0aW9uRGF0ZSxcbiAgICAgICAgICBsYWJlbDogdGhpcy5sb2MoJ2Zvcm1zLmxhYmVscy5jb21wbGFpbnREZXNjcmlwdGlvbkRhdGUnKSxcbiAgICAgICAgICB0eXBlOiAnZGF0ZSdcbiAgICAgICAgfSx7XG4gICAgICAgICAgbmFtZTogJ3Byb2NlZHVyZScsXG4gICAgICAgICAgdmFsdWU6IHRoaXMuZGF0YS5wcm9jZWR1cmUgfHwgdGhpcy5mZXRjaGVkUHJvY2VkdXJlLFxuICAgICAgICAgIC8vcGxhY2Vob2xkZXI6IHRoaXMubG9jKCdmb3Jtcy5wbGFjZWhvbGRlcnMuY29tcGxhaW50UHJvY2VkdXJlJyksXG4gICAgICAgICAgbGFiZWw6IHRoaXMubG9jKCdmb3Jtcy5sYWJlbHMuY29tcGxhaW50UHJvY2VkdXJlJyksXG4gICAgICAgICAgdHlwZTogJ3RleHRhcmVhJ1xuICAgICAgICB9LHtcbiAgICAgICAgICBuYW1lOiAncHJvY2VkdXJlRGF0ZScsXG4gICAgICAgICAgdmFsdWU6IHRoaXMuZGF0YS5wcm9jZWR1cmVEYXRlLFxuICAgICAgICAgIGxhYmVsOiB0aGlzLmxvYygnZm9ybXMubGFiZWxzLmNvbXBsYWludFByb2NlZHVyZURhdGUnKSxcbiAgICAgICAgICB0eXBlOiAnZGF0ZSdcbiAgICAgICAgfSx7XG4gICAgICAgICAgbmFtZTogJ2FjY2Vzc29yaWVzJyxcbiAgICAgICAgICBsYWJlbDogdGhpcy5sb2MoJ2Zvcm1zLmxhYmVscy5jb21wbGFpbnRBY2Nlc3NvcmllcycpLFxuICAgICAgICAgIHR5cGU6ICdkYXRhLWl0ZW1zJyxcbiAgICAgICAgICBzdW1GaWVsZDogJ3ByaWNlJyxcbiAgICAgICAgICBtdWx0aXBseUZpZWxkOiAnYW1vdW50JyxcbiAgICAgICAgICBoaWRlRW1wdHk6IHRydWUsXG4gICAgICAgICAgdmFsdWU6IFtdLFxuICAgICAgICAgIGZpZWxkczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGxhYmVsOiB0aGlzLmxvYygnY29tcGxhaW50QWNjZXNzb3JpZXMubmFtZScpLFxuICAgICAgICAgICAgcGxhY2Vob2xkZXI6IHRoaXMubG9jKCdjb21wbGFpbnRBY2Nlc3Nvcmllcy5uYW1lJyksXG4gICAgICAgICAgICB0eXBlOiAndGV4dCcsXG4gICAgICAgICAgICBuYW1lOiAnbmFtZSdcbiAgICAgICAgICB9LCB7XG4gICAgICAgICAgICBsYWJlbDogdGhpcy5sb2MoJ2NvbXBsYWludEFjY2Vzc29yaWVzLmlkJyksXG4gICAgICAgICAgICBwbGFjZWhvbGRlcjogdGhpcy5sb2MoJ2NvbXBsYWludEFjY2Vzc29yaWVzLmlkJyksXG4gICAgICAgICAgICB0eXBlOiAndGV4dCcsXG4gICAgICAgICAgICBuYW1lOiAnaWQnXG4gICAgICAgICAgfSwge1xuICAgICAgICAgICAgbGFiZWw6IHRoaXMubG9jKCdjb21wbGFpbnRBY2Nlc3Nvcmllcy5hbW91bnQnKSxcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyOiB0aGlzLmxvYygnY29tcGxhaW50QWNjZXNzb3JpZXMuYW1vdW50JyksXG4gICAgICAgICAgICB0eXBlOiAnbnVtYmVyJyxcbiAgICAgICAgICAgIG5hbWU6ICdhbW91bnQnXG4gICAgICAgICAgfSwge1xuICAgICAgICAgICAgbGFiZWw6IHRoaXMubG9jKCdjb21wbGFpbnRBY2Nlc3Nvcmllcy5wcmljZScpLFxuICAgICAgICAgICAgcGxhY2Vob2xkZXI6IHRoaXMubG9jKCdjb21wbGFpbnRBY2Nlc3Nvcmllcy5wcmljZScpLFxuICAgICAgICAgICAgdHlwZTogJ2N1cnJlbmN5JyxcbiAgICAgICAgICAgIG5hbWU6ICdwcmljZSdcbiAgICAgICAgICB9XVxuICAgICAgICB9LCB7XG4gICAgICAgICAgbmFtZTogJ3NlcnZpY2VzJyxcbiAgICAgICAgICBsYWJlbDogdGhpcy5sb2MoJ2Zvcm1zLmxhYmVscy5jb21wbGFpbnRKb2JzJyksXG4gICAgICAgICAgdHlwZTogJ2RhdGEtaXRlbXMnLFxuICAgICAgICAgIHN1bUZpZWxkOiAncHJpY2UnLFxuICAgICAgICAgIG11bHRpcGx5RmllbGQ6ICdob3VycycsXG4gICAgICAgICAgaGlkZUVtcHR5OiB0cnVlLFxuICAgICAgICAgIHZhbHVlOiBbXSxcbiAgICAgICAgICBmaWVsZHM6IFtcbiAgICAgICAgICAvKntcbiAgICAgICAgICAgIGxhYmVsOiB0aGlzLmxvYygnY29tcGxhaW50U2VydmljZXMubmFtZScpLFxuICAgICAgICAgICAgcGxhY2Vob2xkZXI6IHRoaXMubG9jKCdjb21wbGFpbnRTZXJ2aWNlcy5uYW1lJyksXG4gICAgICAgICAgICB0eXBlOiAndGV4dCcsXG4gICAgICAgICAgICBuYW1lOiAnbmFtZSdcbiAgICAgICAgICB9LCovXG4gICAgICAgICAge1xuICAgICAgICAgICAgbGFiZWw6IHRoaXMubG9jKCdjb21wbGFpbnRTZXJ2aWNlcy5ob3VycycpLFxuICAgICAgICAgICAgcGxhY2Vob2xkZXI6IHRoaXMubG9jKCdjb21wbGFpbnRTZXJ2aWNlcy5ob3VycycpLFxuICAgICAgICAgICAgdHlwZTogJ251bWJlcicsXG4gICAgICAgICAgICBuYW1lOiAnaG91cnMnXG4gICAgICAgICAgfSx7XG4gICAgICAgICAgICBsYWJlbDogdGhpcy5sb2MoJ2NvbXBsYWludFNlcnZpY2VzLnByaWNlJyksXG4gICAgICAgICAgICBwbGFjZWhvbGRlcjogdGhpcy5sb2MoJ2NvbXBsYWludFNlcnZpY2VzLnByaWNlJyksXG4gICAgICAgICAgICB0eXBlOiAnY3VycmVuY3knLFxuICAgICAgICAgICAgbmFtZTogJ3ByaWNlJ1xuICAgICAgICAgIH1dXG4gICAgICAgIH0sIHtcbiAgICAgICAgICBuYW1lOiAnZmlsZXMnLFxuICAgICAgICAgIG11bHRpcGxlOiB0cnVlLFxuICAgICAgICAgIHZhbHVlOiBbXSxcbiAgICAgICAgICB0eXBlOiAnZmlsZSdcbiAgICAgICAgfV1cbiAgICAgIH0gZWxzZSBpZih0aGlzLiRwcm9wcy5tb2RhbE1vZGUgPT09ICdlZGl0Jykge1xuICAgICAgICAvLyBOb3QgeWV0IGltcGxlbWVudGVkXG4gICAgICB9XG4gICAgfSxcbiAgICBzaG93KCkge1xuICAgICAgdGhpcy5hcHBseU1vZGFsRGF0YSgpO1xuICAgICAgdGhpcy4kbW9kYWwuc2hvdyh0aGlzLm1vZGFsTmFtZSk7XG4gICAgfSxcbiAgICBjbG9zZShkYXRhKSB7XG4gICAgICBpZih0aGlzLm9uQ2xvc2UpIHtcbiAgICAgICAgaWYoIWRhdGEpIHtcbiAgICAgICAgICBkYXRhID0ge1xuICAgICAgICAgICAgc3RhdHVzOiAnY2FuY2VsJ1xuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vbkNsb3NlKGRhdGEpO1xuICAgICAgfVxuICAgICAgdGhpcy4kbW9kYWwuaGlkZSh0aGlzLm1vZGFsTmFtZSk7XG4gICAgfSxcbiAgICBhc3luYyBnZXRNYWNoaW5lTmFtZShzZXJpYWxOdW1iZXIpIHtcblxuICAgICAgbGV0IGZvcm1EYXRhQmFja3VwID0gdGhpcy5mb3JtRGF0YTtcblxuICAgICAgbGV0IHJlcyA9IGF3YWl0IHRoaXMuJGFwaS5nZXRDdXN0b21lck1hY2hpbmUoc2VyaWFsTnVtYmVyKTtcblxuICAgICAgaWYocmVzLmNvZGUgPT0gMjAwKSB7XG4gICAgICAgIGlmKHJlcy5yZXN1bHQuaGFzT3duUHJvcGVydHkoJ2N1c3RvbWVyTWFjaGluZScpKSB7XG4gICAgICAgICAgdGhpcy5mb3JtRGF0YS5uYW1lID0gcmVzLnJlc3VsdC5jdXN0b21lck1hY2hpbmUubWFjaGluZVR5cGU7XG4gICAgICAgICAgdGhpcy5mZXRjaGVkTWFjaGluZU5hbWUgPSByZXMucmVzdWx0LmN1c3RvbWVyTWFjaGluZS5tYWNoaW5lVHlwZTtcbiAgICAgICAgICB0aGlzLmZvcm1EYXRhLmRlc2NyaXB0aW9uID0gZm9ybURhdGFCYWNrdXAuZGVzY3JpcHRpb247XG4gICAgICAgICAgdGhpcy5kYXRhLmRlc2NyaXB0aW9uID0gdGhpcy5mb3JtRGF0YS5kZXNjcmlwdGlvbjtcbiAgICAgICAgICB0aGlzLmZvcm1EYXRhLmRlc2NyaXB0aW9uRGF0ZSA9IGZvcm1EYXRhQmFja3VwLmRlc2NyaXB0aW9uRGF0ZTtcbiAgICAgICAgICB0aGlzLmRhdGEuZGVzY3JpcHRpb25EYXRlID0gdGhpcy5mb3JtRGF0YS5kZXNjcmlwdGlvbkRhdGU7XG4gICAgICAgICAgdGhpcy5mb3JtRGF0YS5wcm9jZWR1cmUgPSBmb3JtRGF0YUJhY2t1cC5wcm9jZWR1cmU7XG4gICAgICAgICAgdGhpcy5kYXRhLnByb2NlZHVyZSA9IHRoaXMuZm9ybURhdGEucHJvY2VkdXJlO1xuICAgICAgICAgIHRoaXMuZm9ybURhdGEucHJvY2VkdXJlRGF0ZSA9IGZvcm1EYXRhQmFja3VwLnByb2NlZHVyZURhdGU7XG4gICAgICAgICAgdGhpcy5kYXRhLnByb2NlZHVyZURhdGUgPSB0aGlzLmZvcm1EYXRhLnByb2NlZHVyZURhdGU7XG4gICAgICAgICAgdGhpcy5kYXRhLnNlcmlhbE51bWJlciA9IHNlcmlhbE51bWJlclxuICAgICAgICAgIHRoaXMuZm9ybURhdGEuc2VyaWFsTnVtYmVyID0gc2VyaWFsTnVtYmVyO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmKHJlcy5jb2RlID09PSA0MDApIHtcbiAgICAgICAgdGhpcy5mZXRjaGVkTWFjaGluZU5hbWUgPSAnJztcbiAgICAgICAgdGhpcy5mb3JtRGF0YS5uYW1lID0gJyc7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYocmVzLmNvZGUgIT09IDIwMCkge1xuICAgICAgICB0aGlzLmZvcm1EYXRhLm5hbWUgPSAnJztcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH0sXG4gICAgYXN5bmMgYWRkQ29tcGxhaW50KCkge1xuICAgICAgdGhpcy5wcm9jZXNzaW5nID0gdHJ1ZTtcblxuICAgICAgbGV0IHJlcyA9IGF3YWl0IHRoaXMuJGFwaS5hZGRDb21wbGFpbnQoe1xuICAgICAgICBzZXJpYWxOdW1iZXI6IHRoaXMuZm9ybURhdGEuc2VyaWFsTnVtYmVyLFxuICAgICAgICBkZXNjcmlwdGlvbjogdGhpcy5mb3JtRGF0YS5kZXNjcmlwdGlvbixcbiAgICAgICAgZGVzY3JpcHRpb25EYXRlOiB0aGlzLmZvcm1EYXRhLmRlc2NyaXB0aW9uRGF0ZSxcbiAgICAgICAgcHJvY2VkdXJlOiB0aGlzLmZvcm1EYXRhLnByb2NlZHVyZSxcbiAgICAgICAgcHJvY2VkdXJlRGF0ZTogdGhpcy5mb3JtRGF0YS5wcm9jZWR1cmVEYXRlLFxuICAgICAgICByZWZlcmVuY2VJZDogdGhpcy5mb3JtRGF0YS5yZWZlcmVuY2VJZCxcbiAgICAgICAgYWNjZXNzb3JpZXM6IHRoaXMuZm9ybURhdGEuYWNjZXNzb3JpZXMsXG4gICAgICAgIHNlcnZpY2VzOiB0aGlzLmZvcm1EYXRhLnNlcnZpY2VzXG4gICAgICAgIC8vYWNjZXNzb3JpZXNUZXh0OiB0aGlzLmZvcm1EYXRhLmFjY2Vzc29yaWVzVGV4dCxcbiAgICAgICAgLy9qb2JzVGV4dDogdGhpcy5mb3JtRGF0YS5qb2JzVGV4dFxuICAgICAgfSlcblxuICAgICAgaWYocmVzLmNvZGUgPT09IDQwMCkge1xuICAgICAgICB0aGlzLmZvcm1FcnJvcnMgPSByZXMucmVzdWx0LmZpZWxkcztcbiAgICAgICAgdGhpcy5wcm9jZXNzaW5nID0gZmFsc2U7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYocmVzLmNvZGUgIT09IDIwMCkge1xuICAgICAgICB0aGlzLnByb2Nlc3NpbmcgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgLy8gVXBsb2FkIGZpbGVzIHRvIHRoYXQgY29tcGxhaW50XG4gICAgICAvLyBXZSB3YW50IHRvIHVwbG9hZCB0aGVtIGluIHNlcmllcywgc28gdGhhdCB3ZSBkb24ndCBnZXQgY29uZmxpY3RzIHdoZW4gdXBkYXRpbmcgdGhlIHJlc3VsdHMgdG8gZGF0YWJhc2VcbiAgICAgIGNvbnN0IGNvbXBsYWludCA9IHJlcy5yZXN1bHQuY29tcGxhaW50O1xuICAgICAgY29uc3QgY29tcGxhaW50SWQgPSByZXMucmVzdWx0LmNvbXBsYWludC51dWlkO1xuXG4gICAgICAvL3NlbmQgZm9ybSBldmVudCBzdHVmZiB0byBHb29nbGUgVGFnIE1hbmFnZXIgZGF0YUxheWVyXG4gICAgICB2YXIgZ2FFdmVudCA9IHtcbiAgICAgICAgZXZlbnQ6ICdyZWNsYW1hdGlvbkZvcm1TdWJtaXQnLFxuICAgICAgICByZWNsYW1hdGlvbklkOiBjb21wbGFpbnRJZCxcbiAgICAgICAgcmVjbGFtYXRpb25TZXJpYWw6IHRoaXMuZm9ybURhdGEuc2VyaWFsTnVtYmVyXG4gICAgICB9O1xuICAgICAgaWYodHlwZW9mIGRhdGFMYXllciAhPSAndW5kZWZpbmVkJyl7XG4gICAgICAgIGRhdGFMYXllci5wdXNoKGdhRXZlbnQpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnRvdGFsRmlsZXMgPSB0aGlzLmZvcm1EYXRhLmZpbGVzLmxlbmd0aDtcbiAgICAgIHRoaXMudXBsb2FkaW5nRmlsZSA9IDA7XG5cbiAgICAgIGZvcihsZXQgaSA9IDAsIGwgPSB0aGlzLmZvcm1EYXRhLmZpbGVzLmxlbmd0aDsgaTxsOyBpKyspIHtcbiAgICAgICAgY29uc3QgZmlsZSA9IHRoaXMuZm9ybURhdGEuZmlsZXNbaV07XG5cbiAgICAgICAgdGhpcy51cGxvYWRpbmdGaWxlKys7XG5cbiAgICAgICAgcmVzID0gYXdhaXQgdGhpcy4kYXBpLmFkZENvbXBsYWludEZpbGUoY29tcGxhaW50SWQsIHtcbiAgICAgICAgICBmaWxlOiBmaWxlLmZpbGVcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYocmVzLmNvZGUgIT09IDIwMCkge1xuICAgICAgICAgIHRoaXMucHJvY2Vzc2luZyA9IGZhbHNlO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBTYXZlIHN0YXRlIG9mIGEgY29tcGxhaW50IHdpdGhvdXQgcG9zc2libGUgZmlsZXNcbiAgICAgIHRoaXMuJHN0b3JlLmNvbW1pdCgnYWRkQ29tcGxhaW50JywgY29tcGxhaW50KTtcblxuICAgICAgLy8gQW5kIHRyaWdnZXIgZmV0Y2hpbmcgb2YgZnVsbCBjb21wbGFpbnQgd2l0aCBmaWxlcyBpbmNsdWRlZFxuICAgICAgdGhpcy4kc3RvcmUuZGlzcGF0Y2goJ2dldENvbXBsYWludCcsIGNvbXBsYWludElkKTtcblxuICAgICAgdGhpcy5wcm9jZXNzaW5nID0gZmFsc2U7XG4gICAgICB0aGlzLmNsb3NlKHtzdGF0dXM6ICdzdWNjZXNzJ30pO1xuICAgIH1cbiAgfSxcbiAgd2F0Y2g6IHtcbiAgICBtb2RhbERhdGEoKSB7XG4gICAgICB0aGlzLmFwcGx5TW9kYWxEYXRhKCk7XG4gICAgfVxuICB9XG59XG48L3NjcmlwdD5cbiIsIjx0ZW1wbGF0ZT5cbiAgPGRpdj5cbiAgICA8bW9kYWwgOm5hbWU9XCJtb2RhbE5hbWVcIiA6Y2xpY2stdG8tY2xvc2U9XCJ0cnVlXCIgOmhlaWdodD1cIidhdXRvJ1wiIDpzY3JvbGxhYmxlPVwidHJ1ZVwiPlxuICAgICAgPHYtbW9kYWwtY29udGVudCB2LW9uOmNsb3NlPVwiY2xvc2VcIiA6dGl0bGU9XCJtb2RhbE1vZGUgPT09ICdhZGQnID8gbG9jKCdhZGRVc2VyJykgOiBsb2MoJ2VkaXRVc2VyJykgXCI+XG4gICAgICAgIDx2LWZvcm0gOmZpZWxkcz1cImZpZWxkc1wiIDpmb3JtLWRhdGE9XCJmb3JtRGF0YVwiIDpmb3JtLWVycm9ycz1cImZvcm1FcnJvcnNcIj5cbiAgICAgICAgICA8ZGl2IHNsb3Q9XCJidXR0b25zXCIgY2xhc3M9XCJ2LWZvcm0tYnV0dG9uLWRpdlwiPlxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tLWNhbmNlbFwiIHR5cGU9XCJidXR0b25cIiB2LW9uOmNsaWNrPVwiY2xvc2VcIj57e2xvYygnY2FuY2VsJyl9fTwvYnV0dG9uPlxuICAgICAgICAgICAgPGJ1dHRvbiB2LWlmPVwibW9kYWxNb2RlID09PSAnYWRkJ1wiIHR5cGU9XCJzdWJtaXRcIiB2LW9uOmNsaWNrPVwiYWRkVXNlclwiIGNsYXNzPVwiYnRuIGJ0bi0td2hpdGVcIj57e2xvYygnYWRkVXNlcicpfX08L2J1dHRvbj5cbiAgICAgICAgICAgIDxidXR0b24gdi1pZj1cIm1vZGFsTW9kZSA9PT0gJ2VkaXQnXCIgdHlwZT1cInN1Ym1pdFwiIHYtb246Y2xpY2s9XCJ1cGRhdGVVc2VyXCIgY2xhc3M9XCJidG4gYnRuLS13aGl0ZVwiPnt7bG9jKCd1cGRhdGVVc2VyJyl9fTwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L3YtZm9ybT5cbiAgICAgIDwvdi1tb2RhbC1jb250ZW50PlxuICAgIDwvbW9kYWw+XG4gIDwvZGl2PlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cblxuaW1wb3J0IFZNb2RhbENvbnRlbnQgZnJvbSAnLi92LW1vZGFsLWNvbnRlbnQudnVlJztcbmltcG9ydCBWRm9ybSBmcm9tICcuL3YtZm9ybS52dWUnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGNvbXBvbmVudHM6IHtcbiAgICAndi1tb2RhbC1jb250ZW50JzogVk1vZGFsQ29udGVudCxcbiAgICAndi1mb3JtJzogVkZvcm1cbiAgfSxcbiAgbmFtZTogJ01vZGFsVXNlcicsXG4gIHByb3BzOiBbJ29uLWNsb3NlJywgJ21vZGFsLW1vZGUnLCAnbW9kYWwtZGF0YSddLFxuICBkYXRhOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZm9ybUVycm9yczoge30sXG4gICAgICBmb3JtRGF0YToge30sXG4gICAgICBuYW1lOiAndXNlcicsXG4gICAgICBzaG93Q291bnQ6IDAsXG4gICAgICBkYXRhOiB7fVxuICAgIH1cbiAgfSxcbiAgY29tcHV0ZWQ6IHtcbiAgICBmaWVsZHMoKSB7XG4gICAgICAvLyBSZWZyZXNoIHdoZW4gY291bnRyaWVzIGxvYWRcbiAgICAgIGlmKHRoaXMuJHN0b3JlLmdldHRlcnMuY291bnRyeVNlbGVjdE9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RmllbGRzKCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBtb2RhbE5hbWUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5uYW1lICsgJyAnICsgdGhpcy5tb2RhbE1vZGU7XG4gICAgfSxcbiAgICBjYW5FZGl0Um9sZSgpIHtcbiAgICAgIC8vIENhbiBub3QgY2hhbmdlIG93biByb2xlXG4gICAgICByZXR1cm4gdGhpcy5kYXRhLmlkICE9PSB0aGlzLiRzdG9yZS5zdGF0ZS51c2VyLmluZm8uaWQ7XG4gICAgfVxuICB9LFxuICBtZXRob2RzOiB7XG4gICAgYXBwbHlNb2RhbERhdGEoKSB7XG4gICAgICB0aGlzLmZvcm1FcnJvcnMgPSB7fTtcbiAgICAgIHRoaXMuZm9ybURhdGEgPSB7fTtcbiAgICAgIHRoaXMuZGF0YSA9IHt9O1xuXG4gICAgICBpZih0aGlzLiRwcm9wcy5tb2RhbERhdGEpIHtcbiAgICAgICAgT2JqZWN0LmtleXModGhpcy4kcHJvcHMubW9kYWxEYXRhKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgdGhpcy5kYXRhW2tleV0gPSB0aGlzLiRwcm9wcy5tb2RhbERhdGFba2V5XTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuaW5jcmVhc2VTaG93Q291bnQoKTtcbiAgICB9LFxuICAgIGluY3JlYXNlU2hvd0NvdW50KCkge1xuICAgICAgdGhpcy5zaG93Q291bnQrKztcbiAgICB9LFxuICAgIGdldEZpZWxkcygpIHtcbiAgICAgIC8vIFJlZnJlc2ggZGF0YSB3aGVuIHNob3dDb3VudCBpcyBpbmNyZWFzZWRcbiAgICAgIHRoaXMuc2hvd0NvdW50O1xuXG4gICAgICAvLyBJbml0aWFsaXplIGZvcm0gZGVwZW5kaW5nIG9uIG1vZGFsIG1vZGVcbiAgICAgIGlmKHRoaXMuJHByb3BzLm1vZGFsTW9kZSA9PT0gJ2FkZCcpIHtcbiAgICAgICAgcmV0dXJuIFt7XG4gICAgICAgICAgbmFtZTogJ2ZpcnN0TmFtZScsXG4gICAgICAgICAgdmFsdWU6ICcnLFxuICAgICAgICAgIGxhYmVsOiB0aGlzLmxvYygnZmlyc3ROYW1lJyksXG4gICAgICAgICAgdHlwZTogJ3RleHQnXG4gICAgICAgIH0sIHtcbiAgICAgICAgICBuYW1lOiAnbGFzdE5hbWUnLFxuICAgICAgICAgIHZhbHVlOiAnJyxcbiAgICAgICAgICBsYWJlbDogdGhpcy5sb2MoJ2xhc3ROYW1lJyksXG4gICAgICAgICAgdHlwZTogJ3RleHQnXG4gICAgICAgIH0sIHtcbiAgICAgICAgICBuYW1lOiAndXNlcm5hbWUnLFxuICAgICAgICAgIHZhbHVlOiAnJyxcbiAgICAgICAgICBsYWJlbDogdGhpcy5sb2MoJ2Zvcm1zLmxhYmVscy51c2VybmFtZScpLFxuICAgICAgICAgIHR5cGU6ICdlbWFpbCdcbiAgICAgICAgfSwge1xuICAgICAgICAgIG5hbWU6ICdjb21wYW55JyxcbiAgICAgICAgICB2YWx1ZTogdGhpcy5kYXRhLmNvbXBhbnlJZCxcbiAgICAgICAgICBsYWJlbDogJycsXG4gICAgICAgICAgdHlwZTogJ2hpZGRlbidcbiAgICAgICAgfSwge1xuICAgICAgICAgIG5hbWU6ICdwaG9uZScsXG4gICAgICAgICAgdmFsdWU6ICcnLFxuICAgICAgICAgIGxhYmVsOiB0aGlzLmxvYygncGhvbmUnKSxcbiAgICAgICAgICB0eXBlOiAndGV4dCdcbiAgICAgICAgfSwge1xuICAgICAgICAgIG5hbWU6ICdyb2xlJyxcbiAgICAgICAgICB2YWx1ZTogJycsXG4gICAgICAgICAgbGFiZWw6IHRoaXMubG9jKCdmb3Jtcy5sYWJlbHMucm9sZScpLFxuICAgICAgICAgIG9wdGlvbnM6IFt7XG4gICAgICAgICAgICB2YWx1ZTogJ3JldGFpbGVyJyxcbiAgICAgICAgICAgIHRleHQ6IHRoaXMubG9jKCdyb2xlcy5yZXRhaWxlcicpXG4gICAgICAgICAgfSwge1xuICAgICAgICAgICAgdmFsdWU6ICdyZXRhaWxlci1hZG1pbicsXG4gICAgICAgICAgICB0ZXh0OiB0aGlzLmxvYygncm9sZXMucmV0YWlsZXJBZG1pbicpXG4gICAgICAgICAgfV0sXG4gICAgICAgICAgdHlwZTogdGhpcy5jYW5FZGl0Um9sZSA/ICdzZWxlY3QnIDogJ2hpZGRlbidcbiAgICAgICAgfSwge1xuICAgICAgICAgIG5hbWU6ICdjb3VudHJ5JyxcbiAgICAgICAgICB2YWx1ZTogdGhpcy5kYXRhLmNvdW50cnlDb2RlIHx8ICcnLFxuICAgICAgICAgIGxhYmVsOiB0aGlzLmxvYygnY291bnRyeScpLFxuICAgICAgICAgIG9wdGlvbnM6IHRoaXMuJHN0b3JlLmdldHRlcnMuY291bnRyeVNlbGVjdE9wdGlvbnMsXG4gICAgICAgICAgdHlwZTogJ3NlbGVjdCdcbiAgICAgICAgfV07XG4gICAgICB9IGVsc2UgaWYodGhpcy4kcHJvcHMubW9kYWxNb2RlID09PSAnZWRpdCcpIHtcbiAgICAgICAgcmV0dXJuIFt7XG4gICAgICAgICAgbmFtZTogJ2lkJyxcbiAgICAgICAgICB2YWx1ZTogdGhpcy5kYXRhLmlkLFxuICAgICAgICAgIHR5cGU6ICdoaWRkZW4nXG4gICAgICAgIH0sIHtcbiAgICAgICAgICBuYW1lOiAnZmlyc3ROYW1lJyxcbiAgICAgICAgICB2YWx1ZTogdGhpcy5kYXRhLmZpcnN0TmFtZSxcbiAgICAgICAgICBsYWJlbDogdGhpcy5sb2MoJ2ZpcnN0TmFtZScpLFxuICAgICAgICAgIHR5cGU6ICd0ZXh0J1xuICAgICAgICB9LCB7XG4gICAgICAgICAgbmFtZTogJ2xhc3ROYW1lJyxcbiAgICAgICAgICB2YWx1ZTogdGhpcy5kYXRhLmxhc3ROYW1lLFxuICAgICAgICAgIGxhYmVsOiB0aGlzLmxvYygnbGFzdE5hbWUnKSxcbiAgICAgICAgICB0eXBlOiAndGV4dCdcbiAgICAgICAgfSwge1xuICAgICAgICAgIG5hbWU6ICdwaG9uZScsXG4gICAgICAgICAgdmFsdWU6IHRoaXMuZGF0YS5waG9uZSxcbiAgICAgICAgICBsYWJlbDogdGhpcy5sb2MoJ3Bob25lJyksXG4gICAgICAgICAgdHlwZTogJ3RleHQnXG4gICAgICAgIH0sIHtcbiAgICAgICAgICBuYW1lOiAncm9sZScsXG4gICAgICAgICAgdmFsdWU6IHRoaXMuZGF0YS5yb2xlLFxuICAgICAgICAgIGxhYmVsOiB0aGlzLmxvYygnZm9ybXMubGFiZWxzLnJvbGUnKSxcbiAgICAgICAgICBvcHRpb25zOiBbe1xuICAgICAgICAgICAgdmFsdWU6ICdyZXRhaWxlcicsXG4gICAgICAgICAgICB0ZXh0OiB0aGlzLmxvYygncm9sZXMucmV0YWlsZXInKVxuICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgIHZhbHVlOiAncmV0YWlsZXItYWRtaW4nLFxuICAgICAgICAgICAgdGV4dDogdGhpcy5sb2MoJ3JvbGVzLnJldGFpbGVyQWRtaW4nKVxuICAgICAgICAgIH1dLFxuICAgICAgICAgIHR5cGU6IHRoaXMuY2FuRWRpdFJvbGUgPyAnc2VsZWN0JyA6ICdoaWRkZW4nXG4gICAgICAgIH0sIHtcbiAgICAgICAgICBuYW1lOiAnY291bnRyeScsXG4gICAgICAgICAgdmFsdWU6IHRoaXMuZGF0YS5jb3VudHJ5ICYmIHRoaXMuZGF0YS5jb3VudHJ5LmNvdW50cnlDb2RlIHx8ICcnLFxuICAgICAgICAgIGxhYmVsOiB0aGlzLmxvYygnY291bnRyeScpLFxuICAgICAgICAgIG9wdGlvbnM6IHRoaXMuJHN0b3JlLmdldHRlcnMuY291bnRyeVNlbGVjdE9wdGlvbnMsXG4gICAgICAgICAgdHlwZTogJ3NlbGVjdCdcbiAgICAgICAgfV07XG4gICAgICB9XG4gICAgfSxcbiAgICBzaG93KCkge1xuICAgICAgdGhpcy4kc3RvcmUuZGlzcGF0Y2goJ2dldENvdW50cmllcycpO1xuICAgICAgdGhpcy5hcHBseU1vZGFsRGF0YSgpO1xuICAgICAgdGhpcy4kbW9kYWwuc2hvdyh0aGlzLm1vZGFsTmFtZSk7XG4gICAgfSxcbiAgICBjbG9zZShkYXRhKSB7XG4gICAgICBpZih0aGlzLm9uQ2xvc2UpIHtcbiAgICAgICAgaWYoIWRhdGEpIHtcbiAgICAgICAgICBkYXRhID0ge1xuICAgICAgICAgICAgc3RhdHVzOiAnY2FuY2VsJ1xuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vbkNsb3NlKGRhdGEpO1xuICAgICAgfVxuICAgICAgdGhpcy4kbW9kYWwuaGlkZSh0aGlzLm1vZGFsTmFtZSk7XG4gICAgfSxcbiAgICBhZGRVc2VyKCkge1xuICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgICByZXR1cm4gdGhpcy4kYXBpLmFkZFVzZXIodGhpcy5mb3JtRGF0YSkudGhlbihyZXMgPT4ge1xuXG4gICAgICAgIC8vIEVycm9ycyBpbiBmb3JtXG4gICAgICAgIGlmKHJlcy5jb2RlID09PSA0MDApIHtcbiAgICAgICAgICB0aGlzLmZvcm1FcnJvcnMgPSByZXMucmVzdWx0LmZpZWxkcztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKHJlcy5jb2RlID09PSAyMDApIHtcbiAgICAgICAgICBzZWxmLiRzdG9yZS5jb21taXQoJ2FkZFVzZXInLCByZXMucmVzdWx0LnVzZXIpO1xuICAgICAgICAgIHNlbGYuY2xvc2Uoe3N0YXR1czogJ3N1Y2Nlc3MnfSk7XG4gICAgICAgICAgdGhpcy5zZW5kTmV3VXNlck1haWwocmVzLnJlc3VsdC51c2VyKVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9LFxuICAgIGFzeW5jIHNlbmROZXdVc2VyTWFpbChkYXRhKSB7XG4gICAgICBpZighdGhpcy50b2tlbikge1xuICAgICAgICBjb25zdCB0b2tlblJlcyA9IGF3YWl0IHRoaXMuJGFwaS5nZXRUb2tlbigpO1xuICAgICAgICBpZih0b2tlblJlcy5jb2RlID09PSAyMDApIHtcbiAgICAgICAgICB0aGlzLnRva2VuID0gdG9rZW5SZXMucmVzdWx0LnRva2VuO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLiRhcGkucmVnaXN0ZXJQYXNzd29yZCh7XG4gICAgICAgIHRva2VuOiB0aGlzLnRva2VuLFxuICAgICAgICB1c2VybmFtZTogZGF0YS51c2VybmFtZVxuICAgICAgfSlcbiAgICAgIC50aGVuKHJlcyA9PiB7XG4gICAgICAgIHRoaXMudG9rZW4gPSAnJztcblxuICAgICAgICAvLyBFcnJvcnMgaW4gZm9ybVxuICAgICAgICBpZihyZXMuY29kZSA9PT0gNDAwKSB7XG4gICAgICAgICAgdGhpcy5mb3JtRXJyb3JzID0gcmVzLnJlc3VsdC5maWVsZHM7XG4gICAgICAgIH1cblxuICAgICAgICBpZihyZXMuY29kZSA9PT0gMjAwKSB7XG4gICAgICAgICAgdGhpcy5wYXNzd29yZFNlbnQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9LFxuICAgIHVwZGF0ZVVzZXIoKSB7XG4gICAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICAgIHJldHVybiB0aGlzLiRhcGkudXBkYXRlVXNlcih0aGlzLmZvcm1EYXRhLmlkLCB0aGlzLmZvcm1EYXRhKS50aGVuKHJlcyA9PiB7XG5cbiAgICAgICAgLy8gRXJyb3JzIGluIGZvcm1cbiAgICAgICAgaWYocmVzLmNvZGUgPT09IDQwMCkge1xuICAgICAgICAgIHRoaXMuZm9ybUVycm9ycyA9IHJlcy5yZXN1bHQuZmllbGRzO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYocmVzLmNvZGUgPT09IDIwMCkge1xuICAgICAgICAgIHNlbGYuJHN0b3JlLmNvbW1pdCgndXBkYXRlVXNlcicsIHJlcy5yZXN1bHQudXNlcik7XG4gICAgICAgICAgc2VsZi5jbG9zZSh7c3RhdHVzOiAnc3VjY2Vzcyd9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9LFxuICB3YXRjaDoge1xuICAgIG1vZGFsRGF0YSgpIHtcbiAgICAgIHRoaXMuYXBwbHlNb2RhbERhdGEoKTtcbiAgICB9XG4gIH1cbn1cbjwvc2NyaXB0PlxuIiwiPHRlbXBsYXRlPlxuICA8bW9kYWwgOm5hbWU9XCJtb2RhbE5hbWVcIiA6Y2xpY2stdG8tY2xvc2U9XCJ0cnVlXCIgOmhlaWdodD1cIidhdXRvJ1wiIDpzY3JvbGxhYmxlPVwidHJ1ZVwiPlxuICAgIDx2LW1vZGFsLWNvbnRlbnQgdi1vbjpjbG9zZT1cImNsb3NlXCIgOnRpdGxlPVwibW9kYWxNb2RlID09PSAnYWRkJyA/IGxvYygnYWRkV2FycmFudHlSZWdpc3RyYXRpb24nKSA6IGxvYygnZWRpdFdhcnJhbnR5UmVnaXN0cmF0aW9uJykgXCI+XG4gICAgICA8di1mb3JtIDpmaWVsZHM9XCJmaWVsZHNcIiA6Zm9ybS1kYXRhPVwiZm9ybURhdGFcIiA6Zm9ybS1lcnJvcnM9XCJmb3JtRXJyb3JzXCI+XG4gICAgICAgIDxkaXYgc2xvdD1cImJ1dHRvbnNcIj5cbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi0tY2FuY2VsXCIgdHlwZT1cImJ1dHRvblwiIHYtb246Y2xpY2s9XCJjbG9zZVwiPnt7bG9jKCdjYW5jZWwnKX19PC9idXR0b24+XG4gICAgICAgICAgPGJ1dHRvbiA6ZGlzYWJsZWQ9XCJwcm9jZXNzaW5nXCIgdi1pZj1cIm1vZGFsTW9kZSA9PT0gJ2FkZCdcIiB0eXBlPVwic3VibWl0XCIgdi1vbjpjbGljaz1cImFkZFdhcnJhbnR5UmVnaXN0cmF0aW9uXCIgY2xhc3M9XCJidG4gYnRuLS13aGl0ZVwiPnt7bG9jKCdhZGRXYXJyYW50eVJlZ2lzdHJhdGlvbicpfX08L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L3YtZm9ybT5cbiAgICA8L3YtbW9kYWwtY29udGVudD5cbiAgPC9tb2RhbD5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5cbmltcG9ydCBWTW9kYWxDb250ZW50IGZyb20gJy4vdi1tb2RhbC1jb250ZW50LnZ1ZSc7XG5pbXBvcnQgVkZvcm0gZnJvbSAnLi92LWZvcm0udnVlJztcblxuZXhwb3J0IGRlZmF1bHQge1xuICBjb21wb25lbnRzOiB7XG4gICAgJ3YtbW9kYWwtY29udGVudCc6IFZNb2RhbENvbnRlbnQsXG4gICAgJ3YtZm9ybSc6IFZGb3JtXG4gIH0sXG4gIG5hbWU6ICdNb2RhbFdhcnJhbnR5UmVnaXN0cmF0aW9uJyxcbiAgcHJvcHM6IFsnb24tY2xvc2UnLCAnbW9kYWwtbW9kZScsICdtb2RhbC1kYXRhJ10sXG4gIGRhdGE6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB7XG4gICAgICBmb3JtRXJyb3JzOiB7fSxcbiAgICAgIGZvcm1EYXRhOiB7fSxcbiAgICAgIGRhdGE6IHt9LFxuICAgICAgbmFtZTogJ3dhcnJhbnR5LXJlZ2lzdHJhdGlvbicsXG4gICAgICBwcm9jZXNzaW5nOiBmYWxzZVxuICAgIH1cbiAgfSxcbiAgY29tcHV0ZWQ6IHtcbiAgICBmaWVsZHMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRGaWVsZHMoKTtcbiAgICB9LFxuICAgIG1vZGFsTmFtZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLm5hbWUgKyAnLScgKyB0aGlzLm1vZGFsTW9kZTtcbiAgICB9XG4gIH0sXG4gIG1ldGhvZHM6IHtcbiAgICBpbmNyZWFzZVNob3dDb3VudCgpIHtcbiAgICAgIHRoaXMuc2hvd0NvdW50Kys7XG4gICAgfSxcbiAgICBhcHBseU1vZGFsRGF0YSgpIHtcbiAgICAgIHRoaXMuZm9ybUVycm9ycyA9IHt9O1xuICAgICAgdGhpcy5mb3JtRGF0YSA9IHt9O1xuICAgICAgdGhpcy5kYXRhID0ge307XG5cbiAgICAgIGlmKHRoaXMuJHByb3BzLm1vZGFsRGF0YSkge1xuICAgICAgICBPYmplY3Qua2V5cyh0aGlzLiRwcm9wcy5tb2RhbERhdGEpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICB0aGlzLmRhdGFba2V5XSA9IHRoaXMuJHByb3BzLm1vZGFsRGF0YVtrZXldO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5pbmNyZWFzZVNob3dDb3VudCgpO1xuICAgIH0sXG4gICAgZ2V0RmllbGRzKCkge1xuICAgICAgLy8gSW5pdGlhbGl6ZSBmb3JtIGRlcGVuZGluZyBvbiBtb2RhbCBtb2RlXG4gICAgICBpZih0aGlzLiRwcm9wcy5tb2RhbE1vZGUgPT09ICdhZGQnKSB7XG4gICAgICAgIHJldHVybiBbe1xuICAgICAgICAgICAgbmFtZTogJ21hY2hpbmVJbmZvSGVhZGluZycsXG4gICAgICAgICAgICBoZWFkaW5nOiB0aGlzLmxvYygnbWFjaGluZUluZm9ybWF0aW9uJyksXG4gICAgICAgICAgICB0eXBlOiAnaGVhZGluZydcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnc2VyaWFsTnVtYmVyJyxcbiAgICAgICAgICB2YWx1ZTogdGhpcy5kYXRhLnNlcmlhbE51bWJlcixcbiAgICAgICAgICBsYWJlbDogdGhpcy5sb2MoJ3NlcmlhbE51bWJlcicpKycgKicsXG4gICAgICAgICAgdHlwZTogJ3RleHQnXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnbWFjaGluZScsXG4gICAgICAgICAgdmFsdWU6IHRoaXMuZGF0YS5tYWNoaW5lLFxuICAgICAgICAgIGxhYmVsOiB0aGlzLmxvYygnbWFjaGluZU1vZGVsJykrJyAqJyxcbiAgICAgICAgICB0eXBlOiAndGV4dCdcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdtb3JlTWFjaGluZXMnLFxuICAgICAgICAgIGxhYmVsOiB0aGlzLmxvYygnZm9ybXMubGFiZWxzLmFkZE1vcmVNYWNoaW5lcycpLFxuICAgICAgICAgIHR5cGU6ICdkYXRhLWl0ZW1zJyxcbiAgICAgICAgICBoaWRlRW1wdHk6IHRydWUsXG4gICAgICAgICAgYWRkQnRuVGV4dDogdGhpcy5sb2MoJ2FkZE5ldycpLFxuICAgICAgICAgIHZhbHVlOiBbXSxcbiAgICAgICAgICBmaWVsZHM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiAnc2VyaWFsTnVtYmVyJyxcbiAgICAgICAgICAgIHZhbHVlOiB0aGlzLmRhdGEuc2VyaWFsTnVtYmVyLFxuICAgICAgICAgICAgbGFiZWw6IHRoaXMubG9jKCdzZXJpYWxOdW1iZXInKSsnIConLFxuICAgICAgICAgICAgdHlwZTogJ3RleHQnXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiAnbWFjaGluZScsXG4gICAgICAgICAgICB2YWx1ZTogdGhpcy5kYXRhLm1hY2hpbmUsXG4gICAgICAgICAgICBsYWJlbDogdGhpcy5sb2MoJ21hY2hpbmVNb2RlbCcpKycgKicsXG4gICAgICAgICAgICB0eXBlOiAndGV4dCdcbiAgICAgICAgICB9XVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ2N1c3RvbWVySW5mb3JtYXRpb25IZWFkaW5nJyxcbiAgICAgICAgICBoZWFkaW5nOiB0aGlzLmxvYygnY3VzdG9tZXJJbmZvcm1hdGlvbicpLFxuICAgICAgICAgIHR5cGU6ICdoZWFkaW5nJ1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ2N1c3RvbWVyRmlyc3RuYW1lJyxcbiAgICAgICAgICB2YWx1ZTogdGhpcy5kYXRhLmN1c3RvbWVyRmlyc3RuYW1lLFxuICAgICAgICAgIGxhYmVsOiB0aGlzLmxvYygnZmlyc3ROYW1lJykrJyAqJyxcbiAgICAgICAgICB0eXBlOiAndGV4dCdcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdjdXN0b21lckxhc3RuYW1lJyxcbiAgICAgICAgICB2YWx1ZTogdGhpcy5kYXRhLmN1c3RvbWVyTGFzdG5hbWUsXG4gICAgICAgICAgbGFiZWw6IHRoaXMubG9jKCdsYXN0TmFtZScpKycgKicsXG4gICAgICAgICAgdHlwZTogJ3RleHQnXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnY3VzdG9tZXJFbWFpbCcsXG4gICAgICAgICAgdmFsdWU6IHRoaXMuZGF0YS5jdXN0b21lckVtYWlsLFxuICAgICAgICAgIGxhYmVsOiB0aGlzLmxvYygnZW1haWwnKSsnIConLFxuICAgICAgICAgIHR5cGU6ICdlbWFpbCdcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdjdXN0b21lclBob25lJyxcbiAgICAgICAgICB2YWx1ZTogdGhpcy5kYXRhLmN1c3RvbWVyUGhvbmUsXG4gICAgICAgICAgbGFiZWw6IHRoaXMubG9jKCdwaG9uZScpLFxuICAgICAgICAgIHR5cGU6ICd0ZXh0J1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ2RlbGl2ZXJ5RGF0ZScsXG4gICAgICAgICAgdmFsdWU6IHRoaXMuZGF0YS5kZWxpdmVyeURhdGUsXG4gICAgICAgICAgbGFiZWw6IHRoaXMubG9jKCdkZWxpdmVyeURhdGVTb2xkJykrJyAqJyxcbiAgICAgICAgICB0eXBlOiAnZGF0ZSdcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdjdXN0b21lck51bWJlcicsXG4gICAgICAgICAgdmFsdWU6IHRoaXMuZGF0YS5jdXN0b21lck51bWJlcixcbiAgICAgICAgICBsYWJlbDogdGhpcy5sb2MoJ3dhcnJhbnR5Q3VzdG9tZXJOdW1iZXInKSxcbiAgICAgICAgICB0eXBlOiAndGV4dCdcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdjdXN0b21lckNvbXBhbnlOdW1iZXInLFxuICAgICAgICAgIHZhbHVlOiB0aGlzLmRhdGEuY3VzdG9tZXJDb21wYW55TnVtYmVyLFxuICAgICAgICAgIGxhYmVsOiB0aGlzLmxvYygnY29tcGFueU51bWJlcicpLFxuICAgICAgICAgIHR5cGU6ICd0ZXh0J1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ3NlbGxlckluZm9ybWF0aW9uSGVhZGluZycsXG4gICAgICAgICAgaGVhZGluZzogdGhpcy5sb2MoJ3NlbGxlckluZm9ybWF0aW9uJyksXG4gICAgICAgICAgdHlwZTogJ2hlYWRpbmcnXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnc2VsbGVyRmlyc3RuYW1lJyxcbiAgICAgICAgICB2YWx1ZTogdGhpcy4kc3RvcmUuc3RhdGUudXNlci5pbmZvLmZpcnN0TmFtZSxcbiAgICAgICAgICBsYWJlbDogdGhpcy5sb2MoJ2ZpcnN0TmFtZScpKycgKicsXG4gICAgICAgICAgdHlwZTogJ3RleHQnXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnc2VsbGVyTGFzdG5hbWUnLFxuICAgICAgICAgIHZhbHVlOiB0aGlzLiRzdG9yZS5zdGF0ZS51c2VyLmluZm8ubGFzdE5hbWUsXG4gICAgICAgICAgbGFiZWw6IHRoaXMubG9jKCdsYXN0TmFtZScpKycgKicsXG4gICAgICAgICAgdHlwZTogJ3RleHQnXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnc2VsbGVyRW1haWwnLFxuICAgICAgICAgIHZhbHVlOiB0aGlzLiRzdG9yZS5zdGF0ZS51c2VyLmluZm8udXNlcm5hbWUsXG4gICAgICAgICAgbGFiZWw6IHRoaXMubG9jKCdlbWFpbCcpKycgKicsXG4gICAgICAgICAgdHlwZTogJ2VtYWlsJ1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ3NlbGxlclN0b3JlJyxcbiAgICAgICAgICB2YWx1ZTogdGhpcy4kc3RvcmUuc3RhdGUudXNlci5jb21wYW55Lm5hbWUsXG4gICAgICAgICAgbGFiZWw6IHRoaXMubG9jKCdzdG9yZScpKycgKicsXG4gICAgICAgICAgdHlwZTogJ3RleHQnXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnc2VsbGVyQnVzaW5lc3NJZCcsXG4gICAgICAgICAgdmFsdWU6IHRoaXMuJHN0b3JlLnN0YXRlLnVzZXIuY29tcGFueS5idXNpbmVzc0lkLFxuICAgICAgICAgIGxhYmVsOiB0aGlzLmxvYygnYnVzaW5lc3NJZCcpLFxuICAgICAgICAgIHR5cGU6ICd0ZXh0J1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ3NlbGxlclN0cmVldEFkZHJlc3MnLFxuICAgICAgICAgIHZhbHVlOiB0aGlzLiRzdG9yZS5zdGF0ZS51c2VyLmNvbXBhbnkuYWRkcmVzcyxcbiAgICAgICAgICBsYWJlbDogdGhpcy5sb2MoJ2FkZHJlc3MnKSxcbiAgICAgICAgICB0eXBlOiAndGV4dCdcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdzZWxsZXJQb3N0YWxDb2RlJyxcbiAgICAgICAgICB2YWx1ZTogdGhpcy4kc3RvcmUuc3RhdGUudXNlci5jb21wYW55LnBvc3RhbENvZGUsXG4gICAgICAgICAgbGFiZWw6IHRoaXMubG9jKCdwb3N0YWxDb2RlJyksXG4gICAgICAgICAgdHlwZTogJ3RleHQnXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnc2VsbGVyUG9zdGFsQXJlYScsXG4gICAgICAgICAgdmFsdWU6IHRoaXMuJHN0b3JlLnN0YXRlLnVzZXIuY29tcGFueS5wb3N0T2ZmaWNlLFxuICAgICAgICAgIGxhYmVsOiB0aGlzLmxvYygncG9zdE9mZmljZScpLFxuICAgICAgICAgIHR5cGU6ICd0ZXh0J1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ3JlY2VpdmVkV2FycmFudHlEb2N1bWVudHNIZWFkaW5nJyxcbiAgICAgICAgICBoZWFkaW5nOiB0aGlzLmxvYygncmVjZWl2ZWRXYXJyYW50eURvY3VtZW50cycpLFxuICAgICAgICAgIHR5cGU6ICdoZWFkaW5nJ1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ21hbnVhbFJlY2VpdmVkJyxcbiAgICAgICAgICB2YWx1ZTogdGhpcy5kYXRhLm1hbnVhbFJlY2VpdmVkLFxuICAgICAgICAgIGxhYmVsOiB0aGlzLmxvYygnY29tcG9uZW50cy53YXJyYW50eVJlZ2lzdHJhdGlvbnMud2FycmFudHlNYW51YWwnKSsnIConLFxuICAgICAgICAgIHR5cGU6ICdib29sJ1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ2NlRURlY2xhcmF0aW9uUmVjZWl2ZWQnLFxuICAgICAgICAgIHZhbHVlOiB0aGlzLmRhdGEuY2VFRGVjbGFyYXRpb25SZWNlaXZlZCxcbiAgICAgICAgICBsYWJlbDogdGhpcy5sb2MoJ2NvbXBvbmVudHMud2FycmFudHlSZWdpc3RyYXRpb25zLmNlRURlY2xhcmF0aW9uJykrJyAqJyxcbiAgICAgICAgICB0eXBlOiAnYm9vbCdcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdzcGFyZVBhcnRzTGlzdFJlY2VpdmVkJyxcbiAgICAgICAgICB2YWx1ZTogdGhpcy5kYXRhLnNwYXJlUGFydHNMaXN0UmVjZWl2ZWQsXG4gICAgICAgICAgbGFiZWw6IHRoaXMubG9jKCdjb21wb25lbnRzLndhcnJhbnR5UmVnaXN0cmF0aW9ucy5zcGFyZVBhcnRzTGlzdCcpKycgKicsXG4gICAgICAgICAgdHlwZTogJ2Jvb2wnXG4gICAgICAgIH0sXG4gICAgICAgIC8qXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnbWFpbnRlbmFuY2VCb29rbGV0UmVjZWl2ZWQnLFxuICAgICAgICAgIHZhbHVlOiB0aGlzLmRhdGEubWFpbnRlbmFuY2VCb29rbGV0UmVjZWl2ZWQsXG4gICAgICAgICAgbGFiZWw6IHRoaXMubG9jKCdjb21wb25lbnRzLndhcnJhbnR5UmVnaXN0cmF0aW9ucy5tYWludGVuYW5jZUJvb2tsZXQnKSsnIConLFxuICAgICAgICAgIHR5cGU6ICdib29sJ1xuICAgICAgICB9LCAqLyAvL3JlbW92ZWQgcGVyIGNsaWVudCByZXF1ZXN0IDcuMTAuMjAxOSAoYmFzZWNhbXAsIExhbW1pKVxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ2VtcHR5SGVhZGluZzEnLFxuICAgICAgICAgIGhlYWRpbmc6ICcgJyxcbiAgICAgICAgICB0eXBlOiAnaGVhZGluZydcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdjb250YWN0QWxsb3dlZCcsXG4gICAgICAgICAgdmFsdWU6IHRoaXMuZGF0YS5jb250YWN0QWxsb3dlZCxcbiAgICAgICAgICBsYWJlbDogdGhpcy5sb2MoJ2NvbXBvbmVudHMud2FycmFudHlSZWdpc3RyYXRpb25zLmNvbnRhY3RBbGxvd2VkJykrJyAqJyxcbiAgICAgICAgICB0eXBlOiAnYm9vbCdcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICduZXdzbGV0dGVyJyxcbiAgICAgICAgICB2YWx1ZTogdGhpcy5kYXRhLm5ld3NsZXR0ZXIsXG4gICAgICAgICAgbGFiZWw6IHRoaXMubG9jKCdvcmRlck5ld3NsZXR0ZXInKSxcbiAgICAgICAgICB0eXBlOiAnYm9vbCdcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdjb2xsZWN0RGF0YUZyb21GYWN0b3J5Q29ubmVjdGlvbicsXG4gICAgICAgICAgdmFsdWU6IHRoaXMuZGF0YS5jb2xsZWN0RGF0YUZyb21GYWN0b3J5Q29ubmVjdGlvbixcbiAgICAgICAgICBsYWJlbDogYCR7dGhpcy5sb2MoJ2NvbGxlY3REYXRhRnJvbUZhY3RvcnlDb25uZWN0aW9uJyl9ICAqIGAsXG4gICAgICAgICAgaGVscDogYCR7dGhpcy5sb2MoJ3ByaXZhY3lQYWdlTGluaycpfSBgLFxuICAgICAgICAgIHR5cGU6ICdib29sJ1xuICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH0gZWxzZSBpZih0aGlzLiRwcm9wcy5tb2RhbE1vZGUgPT09ICdlZGl0Jykge1xuICAgICAgICAvLyBOb3QgeWV0IGltcGxlbWVudGVkXG4gICAgICB9XG4gICAgfSxcbiAgICBzaG93KCkge1xuICAgICAgdGhpcy5hcHBseU1vZGFsRGF0YSgpO1xuICAgICAgdGhpcy4kbW9kYWwuc2hvdyh0aGlzLm1vZGFsTmFtZSk7XG4gICAgfSxcbiAgICBjbG9zZShkYXRhKSB7XG4gICAgICBpZih0aGlzLm9uQ2xvc2UpIHtcbiAgICAgICAgaWYoIWRhdGEpIHtcbiAgICAgICAgICBkYXRhID0ge1xuICAgICAgICAgICAgc3RhdHVzOiAnY2FuY2VsJ1xuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vbkNsb3NlKGRhdGEpO1xuICAgICAgfVxuICAgICAgdGhpcy4kbW9kYWwuaGlkZSh0aGlzLm1vZGFsTmFtZSk7XG4gICAgfSxcbiAgICBhc3luYyBhZGRXYXJyYW50eVJlZ2lzdHJhdGlvbigpIHtcbiAgICAgIHRoaXMucHJvY2Vzc2luZyA9IHRydWU7XG5cbiAgICAgIGxldCByZXMgPSBhd2FpdCB0aGlzLiRhcGkuYWRkV2FycmFudHlSZWdpc3RyYXRpb24oe1xuICAgICAgICBzZXJpYWxOdW1iZXI6IHRoaXMuZm9ybURhdGEuc2VyaWFsTnVtYmVyLFxuICAgICAgICBtYWNoaW5lOiB0aGlzLmZvcm1EYXRhLm1hY2hpbmUsXG4gICAgICAgIG1vcmVNYWNoaW5lczogdGhpcy5mb3JtRGF0YS5tb3JlTWFjaGluZXMsXG4gICAgICAgIGN1c3RvbWVyRmlyc3RuYW1lOiB0aGlzLmZvcm1EYXRhLmN1c3RvbWVyRmlyc3RuYW1lLFxuICAgICAgICBjdXN0b21lckxhc3RuYW1lOiB0aGlzLmZvcm1EYXRhLmN1c3RvbWVyTGFzdG5hbWUsXG4gICAgICAgIGN1c3RvbWVyRW1haWw6IHRoaXMuZm9ybURhdGEuY3VzdG9tZXJFbWFpbCxcbiAgICAgICAgY3VzdG9tZXJQaG9uZTogdGhpcy5mb3JtRGF0YS5jdXN0b21lclBob25lLFxuICAgICAgICBkZWxpdmVyeURhdGU6IHRoaXMuZm9ybURhdGEuZGVsaXZlcnlEYXRlLFxuICAgICAgICBjdXN0b21lck51bWJlcjogdGhpcy5mb3JtRGF0YS5jdXN0b21lck51bWJlcixcbiAgICAgICAgY3VzdG9tZXJDb21wYW55TnVtYmVyOiB0aGlzLmZvcm1EYXRhLmN1c3RvbWVyQ29tcGFueU51bWJlcixcbiAgICAgICAgc2VsbGVyRmlyc3RuYW1lOiB0aGlzLmZvcm1EYXRhLnNlbGxlckZpcnN0bmFtZSxcbiAgICAgICAgc2VsbGVyTGFzdG5hbWU6IHRoaXMuZm9ybURhdGEuc2VsbGVyTGFzdG5hbWUsXG4gICAgICAgIHNlbGxlckVtYWlsOiB0aGlzLmZvcm1EYXRhLnNlbGxlckVtYWlsLFxuICAgICAgICBzZWxsZXJTdG9yZTogdGhpcy5mb3JtRGF0YS5zZWxsZXJTdG9yZSxcbiAgICAgICAgc2VsbGVyQnVzaW5lc3NJZDogdGhpcy5mb3JtRGF0YS5zZWxsZXJCdXNpbmVzc0lkLFxuICAgICAgICBzZWxsZXJTdHJlZXRBZGRyZXNzOiB0aGlzLmZvcm1EYXRhLnNlbGxlclN0cmVldEFkZHJlc3MsXG4gICAgICAgIHNlbGxlclBvc3RhbENvZGU6IHRoaXMuZm9ybURhdGEuc2VsbGVyUG9zdGFsQ29kZSxcbiAgICAgICAgc2VsbGVyUG9zdGFsQXJlYTogdGhpcy5mb3JtRGF0YS5zZWxsZXJQb3N0YWxBcmVhLFxuICAgICAgICBtYW51YWxSZWNlaXZlZDogdGhpcy5mb3JtRGF0YS5tYW51YWxSZWNlaXZlZCxcbiAgICAgICAgY2VFRGVjbGFyYXRpb25SZWNlaXZlZDogdGhpcy5mb3JtRGF0YS5jZUVEZWNsYXJhdGlvblJlY2VpdmVkLFxuICAgICAgICBzcGFyZVBhcnRzTGlzdFJlY2VpdmVkOiB0aGlzLmZvcm1EYXRhLnNwYXJlUGFydHNMaXN0UmVjZWl2ZWQsXG4gICAgICAgIG1haW50ZW5hbmNlQm9va2xldFJlY2VpdmVkOiB0aGlzLmZvcm1EYXRhLm1haW50ZW5hbmNlQm9va2xldFJlY2VpdmVkLFxuICAgICAgICBjb250YWN0QWxsb3dlZDogdGhpcy5mb3JtRGF0YS5jb250YWN0QWxsb3dlZCxcbiAgICAgICAgbmV3c2xldHRlcjogdGhpcy5mb3JtRGF0YS5uZXdzbGV0dGVyLFxuICAgICAgICBjb2xsZWN0RGF0YUZyb21GYWN0b3J5Q29ubmVjdGlvbjogdGhpcy5mb3JtRGF0YS5jb2xsZWN0RGF0YUZyb21GYWN0b3J5Q29ubmVjdGlvblxuICAgICAgfSlcblxuICAgICAgaWYocmVzLmNvZGUgPT09IDQwMCkge1xuICAgICAgICB0aGlzLmZvcm1FcnJvcnMgPSByZXMucmVzdWx0LmZpZWxkcztcbiAgICAgICAgdGhpcy5wcm9jZXNzaW5nID0gZmFsc2U7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYocmVzLmNvZGUgIT09IDIwMCkge1xuICAgICAgICB0aGlzLnByb2Nlc3NpbmcgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB3YXJyYW50eVJlZ2lzdHJhdGlvbiA9IHJlcy5yZXN1bHQud2FycmFudHlSZWdpc3RyYXRpb247XG4gICAgICBjb25zdCB3YXJyYW50eVJlZ2lzdHJhdGlvbklkID0gcmVzLnJlc3VsdC53YXJyYW50eVJlZ2lzdHJhdGlvbi51dWlkO1xuXG4gICAgICAvLyBTYXZlIHN0YXRlIG9mIGEgd2FycmFudHkgcmVnaXN0cmF0aW9uXG4gICAgICB0aGlzLiRzdG9yZS5jb21taXQoJ2FkZFdhcnJhbnR5UmVnaXN0cmF0aW9uJywgd2FycmFudHlSZWdpc3RyYXRpb24pO1xuXG4gICAgICAvLyBBbmQgdHJpZ2dlciBmZXRjaGluZyBvZiBmdWxsIHdhcnJhbnR5IHJlZ2lzdHJhdGlvblxuICAgICAgdGhpcy4kc3RvcmUuZGlzcGF0Y2goJ2dldFdhcnJhbnR5UmVnaXN0cmF0aW9uJywgd2FycmFudHlSZWdpc3RyYXRpb25JZCk7XG5cbiAgICAgIHRoaXMucHJvY2Vzc2luZyA9IGZhbHNlO1xuICAgICAgdGhpcy5jbG9zZSh7c3RhdHVzOiAnc3VjY2Vzcyd9KTtcbiAgICB9XG4gIH0sXG4gIHdhdGNoOiB7XG4gICAgbW9kYWxEYXRhKCkge1xuICAgICAgdGhpcy5hcHBseU1vZGFsRGF0YSgpO1xuICAgIH1cbiAgfVxufVxuPC9zY3JpcHQ+XG4iLCJpbXBvcnQgVnVlIGZyb20gJ3Z1ZSc7XG5cbi8qKlxuICogVGhpcyB1c2VzIHRlbXBsYXRlIHRoYXQgaXMgaW5jbHVkZWQgaW4gc2NyaXB0IHRhZ1xuICoqL1xuXG5WdWUuY29tcG9uZW50KCd0aGUtMS1jb2x1bW4tbGF5b3V0Jywge1xuICB0ZW1wbGF0ZTogJyNqcy1sYXlvdXQtMS1jb2x1bW4tdGVtcGxhdGUnXG59KTtcbiIsImltcG9ydCBWdWUgZnJvbSAndnVlJztcblxuLyoqXG4gKiBUaGlzIHVzZXMgdGVtcGxhdGUgdGhhdCBpcyBpbmNsdWRlZCBpbiBzY3JpcHQgdGFnXG4gKiovXG5cblZ1ZS5jb21wb25lbnQoJ3RoZS1zaWRlYmFyLWxheW91dCcsIHtcbiAgdGVtcGxhdGU6ICcjanMtbGF5b3V0LXNpZGViYXItdGVtcGxhdGUnLFxuICBwcm9wczogWydzaWRlYmFyLXRpdGxlJ10sXG4gIGNvbXB1dGVkOiB7XG4gICAgaGFzU2lkZWJhclRpdGxlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuJHNsb3RzWydzaWRlYmFyLXRpdGxlJ107XG4gICAgfVxuICB9XG59KTtcbiIsImltcG9ydCBWdWUgZnJvbSAndnVlJztcblxuLyoqXG4gKiBTdWJoZWFkZXIgdXNlcyBTdGFnZSB0ZW1wbGF0ZSB0aGF0IGlzIGluY2x1ZGVkIGluIHNjcmlwdCB0YWdcbiAqKi9cblxuVnVlLmNvbXBvbmVudCgndGhlLXN1YmhlYWRlcicsIHtcbiAgdGVtcGxhdGU6ICcjanMtc3ViaGVhZGVyLXRlbXBsYXRlJyxcbiAgZGF0YTogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB7XG4gICAgICBzZWFyY2hUZXh0OiAnJyxcbiAgICB9XG4gIH0sXG4gIGNvbXB1dGVkOiB7XG4gICAgc2VhcmNoRW5hYmxlZCAoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kc3RvcmUuc3RhdGUuc3ViaGVhZGVyLnNlYXJjaEVuYWJsZWQ7XG4gICAgfSxcbiAgICB0aXRsZSAoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kc3RvcmUuc3RhdGUuc3ViaGVhZGVyLnRpdGxlO1xuICAgIH0sXG4gICAgZGVzY3JpcHRpb24gKCkge1xuICAgICAgcmV0dXJuIHRoaXMuJHN0b3JlLnN0YXRlLnN1YmhlYWRlci5kZXNjcmlwdGlvbjtcbiAgICB9LFxuICAgIHN1YnRpdGxlICgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRzdG9yZS5zdGF0ZS5zdWJoZWFkZXIuc3VidGl0bGU7XG4gICAgfVxuICB9LFxuICB3YXRjaDoge1xuICAgIHNlYXJjaFRleHQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgdGhpcy4kc3RvcmUuY29tbWl0KCdzZXRTdWJoZWFkZXJTZWFyY2hUZXh0JywgdGhpcy5zZWFyY2hUZXh0KTtcbiAgICB9XG4gIH0sXG4gIG1vdW50ZWQ6IGZ1bmN0aW9uICgpIHtcbiAgICAvLyBSZW1vdmUgdGhlIG9yaWdpbmFsIGhlYWRlciBvbmNlIHdlJ3JlIGRvbmUgbG9hZGluZ1xuICAgIGNvbnN0IHN1YmhlYWRlciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdqcy1zdWJoZWFkZXInKTtcbiAgICBpZihzdWJoZWFkZXIpIHtcbiAgICAgIHN1YmhlYWRlci5yZW1vdmUoKTtcbiAgICB9XG4gIH1cbn0pO1xuIiwiXG48dGVtcGxhdGU+XG4gIDxkaXY+XG4gICAgPHA+XG4gICAgICA8c3Ryb25nPnt7bG9jKCdzZW5kZXInKX19PC9zdHJvbmc+OiB7e3VzZXIuZmlyc3ROYW1lfX0ge3t1c2VyLmxhc3ROYW1lfX08YnI+XG4gICAgICA8c3Ryb25nPnt7bG9jKCdvcmdhbml6YXRpb24nKX19PC9zdHJvbmc+OiB7e2NvbXBhbnkubmFtZX19PGJyPlxuICAgICAgPHN0cm9uZz57e2xvYygnYWRkcmVzcycpfX08L3N0cm9uZz46IHt7Y29tcGFueS5hZGRyZXNzfX0sIHt7Y29tcGFueS5wb3N0YWxDb2RlfX0ge3tjb21wYW55LnBvc3RPZmZpY2V9fSwge3tjb21wYW55LmNvdW50cnkgJiYgY29tcGFueS5jb3VudHJ5Lm5hbWV9fTxicj5cbiAgICAgIDxzdHJvbmc+e3tsb2MoJ3Bob25lJyl9fTwvc3Ryb25nPjoge3t1c2VyLnBob25lfX08YnI+XG4gICAgICA8c3Ryb25nPnt7bG9jKCdlbWFpbCcpfX08L3N0cm9uZz46IHt7dXNlci51c2VybmFtZX19XG4gICAgPC9wPlxuICA8L2Rpdj5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5leHBvcnQgZGVmYXVsdCB7XG4gIG5hbWU6ICdWQ29tcGxhaW50VXNlckluZm8nLFxuICBwcm9wczogWyd1c2VyLWlkJywgJ3VzZXItZGF0YScsICdjb21wYW55LWRhdGEnXSxcbiAgZGF0YTogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB7XG4gICAgICBjb21wYW55SWQ6IG51bGxcbiAgICB9XG4gIH0sXG4gIGNvbXB1dGVkOiB7XG4gICAgdXNlcigpIHtcbiAgICAgIC8vIElmIHVzZXJEYXRhIGlzIHBhc3NlZCwgdXNlIHRoYXRcbiAgICAgIGlmKHRoaXMuJHByb3BzLnVzZXJEYXRhKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiRwcm9wcy51c2VyRGF0YTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgdXNlciA9IHRoaXMuJHN0b3JlLnN0YXRlLnVzZXJzLmZpbHRlcih1c2VyID0+IHVzZXIuaWQgPT09IHRoaXMuJHByb3BzLnVzZXJJZClbMF07XG5cbiAgICAgIGlmKHVzZXIpIHtcbiAgICAgICAgdGhpcy5jb21wYW55SWQgPSB1c2VyLmNvbXBhbnk7XG4gICAgICAgIHRoaXMuJHN0b3JlLmRpc3BhdGNoKCdnZXRDb21wYW55JywgdGhpcy5jb21wYW55SWQpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdXNlciB8fMKge307XG4gICAgfSxcbiAgICBjb21wYW55KCkge1xuICAgICAgLy8gSWYgY29tcGFueURhdGEgaXMgcGFzc2VkLCB1c2UgdGhhdFxuICAgICAgaWYodGhpcy4kcHJvcHMuY29tcGFueURhdGEpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJHByb3BzLmNvbXBhbnlEYXRhO1xuICAgICAgfVxuICAgICAgY29uc3QgY29tcGFueSA9IHRoaXMuJHN0b3JlLnN0YXRlLmNvbXBhbmllcy5maWx0ZXIoY29tcGFueSA9PiBjb21wYW55LmlkID09PSB0aGlzLmNvbXBhbnlJZClbMF07XG5cbiAgICAgIHJldHVybiBjb21wYW55IHx8wqB7fTtcbiAgICB9XG4gIH0sXG4gIG1vdW50ZWQoKSB7XG5cbiAgICAvLyBJZiB1c2VyRGF0YSBpcyBwYXNzZWQsIHVzZSB0aGF0XG4gICAgaWYodGhpcy4kcHJvcHMudXNlckRhdGEpIHtcbiAgICAgIHJldHVybiB0aGlzLiRwcm9wcy51c2VyRGF0YTtcbiAgICB9XG5cbiAgICBpZih0aGlzLiRwcm9wcy51c2VySWQpIHtcbiAgICAgIHRoaXMuJHN0b3JlLmRpc3BhdGNoKCdnZXRVc2VyJywgdGhpcy4kcHJvcHMudXNlcklkKTtcbiAgICB9XG4gIH0sXG4gIHdhdGNoOiB7XG4gICAgdXNlcklkKHZhbCkge1xuICAgICAgaWYodmFsKSB7XG4gICAgICAgIHRoaXMuJHN0b3JlLmRpc3BhdGNoKCdnZXRVc2VyJywgdmFsKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbjwvc2NyaXB0PlxuIiwiPHRlbXBsYXRlPlxuICA8c3Bhbj5cbiAgICA8c3BhbiB2LWlmPVwiZGlzcGxheU9ubHlcIj57e2Rpc3BsYXlWYWx1ZX19PC9zcGFuPlxuICAgIDxpbnB1dCB2LWVsc2UgOmNsYXNzPVwiaW5wdXRDbGFzc1wiIHR5cGU9XCJ0ZXh0XCIgdi1tb2RlbD1cImRpc3BsYXlWYWx1ZVwiIEBibHVyPVwiaXNJbnB1dEFjdGl2ZSA9IGZhbHNlXCIgQGZvY3VzPVwiaXNJbnB1dEFjdGl2ZSA9IHRydWVcIiB2LW9uOmtleWRvd24uZW50ZXIucHJldmVudC8+XG4gIDwvc3Bhbj5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5leHBvcnQgZGVmYXVsdCB7XG4gIG5hbWU6ICdWQ3VycmVuY3lJbnB1dCcsXG4gIHByb3BzOiBbJ3ZhbHVlJywgJ2RlY2ltYWwtY2hhcicsICdkaXNwbGF5LW9ubHknLCAnaW5wdXQtY2xhc3MnXSxcbiAgZGF0YTogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlzSW5wdXRBY3RpdmU6IGZhbHNlLFxuICAgICAgZGVjaW1hbDogJy4nLFxuICAgICAgcmVwbGFjZURlY2ltYWw6ICcsJyxcbiAgICAgIGN1cnJlbmN5OiAn4oKsJ1xuICAgIH1cbiAgfSxcbiAgY29tcHV0ZWQ6IHtcbiAgICBkaXNwbGF5VmFsdWU6IHtcbiAgICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIGxldCB2YWx1ZSA9IHRoaXMudmFsdWU7XG4gICAgICAgIC8vIGNoYW5nZSB2YWx1ZSB0byB6ZXJvIGlmIG5vIG51bWJlciBpcyBwYXNzZWRcbiAgICAgICAgaWYodGhpcy52YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICAgIHRoaXMuJGVtaXQoJ2lucHV0JywgMClcbiAgICAgICAgICB2YWx1ZSA9IDA7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5pc0lucHV0QWN0aXZlKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Rm9ybWF0dGVkRm9ySW5wdXQodmFsdWUsIGZhbHNlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBVc2VyIGlzIG5vdCBtb2RpZnlpbmcgbm93LiBGb3JtYXQgZGlzcGxheSB2YWx1ZSBmb3IgdXNlciBpbnRlcmZhY2VcbiAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnRvU3RyaW5nKCk7XG5cbiAgICAgICAgICB2YWx1ZSA9IHBhcnNlRmxvYXQodmFsdWUucmVwbGFjZSgvLC9nLCAnLicpKS50b0ZpeGVkKDIpO1xuXG4gICAgICAgICAgLy8gRW5zdXJlIHRoYXQgaXQgaXMgbm90IE5hTlxuICAgICAgICAgIGlmIChpc05hTih2YWx1ZSkpIHtcbiAgICAgICAgICAgIHZhbHVlID0gMDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLiRlbWl0KCdpbnB1dCcsIHBhcnNlRmxvYXQodmFsdWUpKTtcblxuICAgICAgICAgIHJldHVybiB0aGlzLmdldEZvcm1hdHRlZEZvcklucHV0KHZhbHVlLCB0cnVlKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHNldDogZnVuY3Rpb24obW9kaWZpZWRWYWx1ZSkge1xuICAgICAgICAvLyBSZWNhbGN1bGF0ZSB2YWx1ZSBhZnRlciBpZ25vcmluZyBcIiRcIiwgXCIsXCIgYW5kIFwiLlwiIGluIHVzZXIgaW5wdXRcbiAgICAgICAgY29uc3QgcmVnRXhwID0gbmV3IFJlZ0V4cCgnW15cXFxcZFxcXFwuLF0nLCAnZycpO1xuICAgICAgICBsZXQgbmV3VmFsdWUgPSBtb2RpZmllZFZhbHVlLnJlcGxhY2UocmVnRXhwLCBcIlwiKVxuXG4gICAgICAgIC8vIE5vdGU6IHdlIGNhbm5vdCBzZXQgdGhpcy52YWx1ZSBhcyBpdCBpcyBhIFwicHJvcFwiLiBJdCBuZWVkcyB0byBiZSBwYXNzZWQgdG8gcGFyZW50IGNvbXBvbmVudFxuICAgICAgICAvLyAkZW1pdCB0aGUgZXZlbnQgc28gdGhhdCBwYXJlbnQgY29tcG9uZW50IGdldHMgaXRcbiAgICAgICAgdGhpcy4kZW1pdCgnaW5wdXQnLCBuZXdWYWx1ZSlcbiAgICAgIH1cbiAgICB9XG4gIH0sXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRGb3JtYXR0ZWRGb3JJbnB1dCh2YWx1ZSwgc2hvd0N1cnJlbmN5KSB7XG4gICAgICBsZXQgZGlzcGxheVZhbHVlID0gdmFsdWUudG9TdHJpbmcoKTtcblxuICAgICAgY29uc3QgcmVnRXhwID0gbmV3IFJlZ0V4cCgnW15cXFxcZFxcXFwuLF0nLCAnZycpO1xuICAgICAgZGlzcGxheVZhbHVlID0gZGlzcGxheVZhbHVlLnJlcGxhY2UocmVnRXhwLCBcIlwiKVxuXG4gICAgICBpZih0aGlzLmRlY2ltYWwgPT09ICcsJykge1xuICAgICAgICBkaXNwbGF5VmFsdWUgPSBkaXNwbGF5VmFsdWUucmVwbGFjZSgvXFwuLywgJywnKTtcbiAgICAgIH1cblxuICAgICAgLy8gSWYgd2UgaGF2ZSB0aGUgZGVmYXVsdCB6ZXJvLCBjbGVhciBpbnB1dCB3aGVuIHN0YXJpbmcgdHlwaW5nXG4gICAgICBpZighc2hvd0N1cnJlbmN5ICYmIHZhbHVlID09PSAwKSB7XG4gICAgICAgIHJldHVybiAnJztcbiAgICAgIH1cbiAgICAgIHJldHVybiBkaXNwbGF5VmFsdWUgKyAoc2hvd0N1cnJlbmN5ID8gJyAnICsgdGhpcy5jdXJyZW5jeSA6ICcnKTtcbiAgICB9XG4gIH0sXG4gIG1vdW50ZWQoKSB7XG4gICAgdGhpcy5kZWNpbWFsID0gdGhpcy5kZWNpbWFsQ2hhciB8fCB0aGlzLmRlY2ltYWw7XG4gICAgdGhpcy5yZXBsYWNlRGVjaW1hbCA9IHRoaXMuZGVjaW1hbCA9PT0gJy4nID8gJywnIDogJy4nOyAvLyBSZXBsYWNlIGNvbW1hcyBpZiBkb3QgaXMgdXNlIGFuZCB2aWNlIHZlcnNhXG4gIH1cbn1cbjwvc2NyaXB0PlxuXG48c3R5bGU+XG5cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGU+XG4gIDxkaXYgY2xhc3M9XCJ2LWRhdGEtaXRlbXNcIj5cbiAgICA8dGFibGUgdi1pZj1cInNob3dUYWJsZVwiIGNsYXNzPVwidi1kYXRhLWl0ZW1zX190YWJsZSB0YWJsZVwiPlxuICAgICAgPHRoZWFkPlxuICAgICAgICA8dGggdi1mb3I9XCJmaWVsZCBpbiBmaWVsZHNcIiB2LWJpbmQ6a2V5PVwiZmllbGQubmFtZVwiPlxuICAgICAgICAgIHt7ZmllbGQubGFiZWx9fVxuICAgICAgICA8L3RoPlxuICAgICAgICA8dGggdi1pZj1cImVkaXRNb2RlXCI+Jm5ic3A7PC90aD5cbiAgICAgIDwvdGhlYWQ+XG4gICAgICA8dHIgdi1mb3I9XCIoaXRlbSwgaXRlbUluZGV4KSBpbiBpdGVtc1wiIHYtYmluZDprZXk9XCJpdGVtSW5kZXhcIj5cbiAgICAgICAgPHRkIGNsYXNzPVwidi1kYXRhLWl0ZW1zX190ZFwiIHYtZm9yPVwiZmllbGQgaW4gZmllbGRzXCIgdi1iaW5kOmtleT1cImZpZWxkLm5hbWVcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInYtZGF0YS1pdGVtc19fZXJyb3JcIiB2LWZvcj1cIihtZXNzYWdlLCBpbmRleCkgaW4gaXRlbUVycm9yTWVzc2FnZXMoaXRlbUluZGV4LCBmaWVsZC5uYW1lKVwiIHYtYmluZDprZXk9XCJpbmRleFwiPlxuICAgICAgICAgICAge3ttZXNzYWdlfX08YnI+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDxkaXYgdi1pZj1cImVkaXRNb2RlXCI+XG4gICAgICAgICAgICA8di1udW1iZXItaW5wdXQgdi1pZj1cImZpZWxkLnR5cGUgPT09ICdudW1iZXInXCIgOmlucHV0LWNsYXNzPVwiJ3YtZGF0YS1pdGVtc19faW5wdXQnXCIgdi1tb2RlbD1cIml0ZW1bZmllbGQubmFtZV1cIiA6ZGVjaW1hbC1jaGFyPVwiJywnXCI+PC92LW51bWJlci1pbnB1dD5cbiAgICAgICAgICAgIDx2LWN1cnJlbmN5LWlucHV0IHYtaWY9XCJmaWVsZC50eXBlID09PSAnY3VycmVuY3knXCIgOmlucHV0LWNsYXNzPVwiJ3YtZGF0YS1pdGVtc19faW5wdXQnXCIgdi1tb2RlbD1cIml0ZW1bZmllbGQubmFtZV1cIiA6ZGVjaW1hbC1jaGFyPVwiJywnXCI+PC92LWN1cnJlbmN5LWlucHV0PlxuICAgICAgICAgICAgPGlucHV0IHYtaWY9XCJmaWVsZC50eXBlID09PSAndGV4dCdcIiBjbGFzcz1cInYtZGF0YS1pdGVtc19faW5wdXRcIiA6cGxhY2Vob2xkZXI9XCJmaWVsZC5wbGFjZWhvbGRlclwiIHYtbW9kZWw9XCJpdGVtW2ZpZWxkLm5hbWVdXCIgdi1vbjprZXlkb3duLmVudGVyLnByZXZlbnQ+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiB2LWlmPVwiIWVkaXRNb2RlXCI+XG4gICAgICAgICAgICA8di1udW1iZXItaW5wdXQgdi1pZj1cImZpZWxkLnR5cGUgPT09ICdudW1iZXInXCIgOmRpc3BsYXktb25seT1cInRydWVcIiA6aW5wdXQtY2xhc3M9XCIndi1kYXRhLWl0ZW1zX19pbnB1dCdcIiB2LW1vZGVsPVwiaXRlbVtmaWVsZC5uYW1lXVwiIDpkZWNpbWFsLWNoYXI9XCInLCdcIj48L3YtbnVtYmVyLWlucHV0PlxuICAgICAgICAgICAgPHYtY3VycmVuY3ktaW5wdXQgdi1pZj1cImZpZWxkLnR5cGUgPT09ICdjdXJyZW5jeSdcIiA6ZGlzcGxheS1vbmx5PVwidHJ1ZVwiIDppbnB1dC1jbGFzcz1cIid2LWRhdGEtaXRlbXNfX2lucHV0J1wiIHYtbW9kZWw9XCJpdGVtW2ZpZWxkLm5hbWVdXCIgOmRlY2ltYWwtY2hhcj1cIicsJ1wiPjwvdi1jdXJyZW5jeS1pbnB1dD5cbiAgICAgICAgICAgIDxzcGFuIHYtaWY9XCJmaWVsZC50eXBlID09PSAndGV4dCdcIj57e2l0ZW1bZmllbGQubmFtZV19fTwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC90ZD5cbiAgICAgICAgPHRkIHYtaWY9XCJlZGl0TW9kZVwiIGNsYXNzPVwidi1kYXRhLWl0ZW1zX19yZW1vdmUtdGQgdGFibGVfX3RkIGlzLWFsaWduLXJpZ2h0IGlzLXZhbGlnbi1taWRkbGVcIj48YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi0td2hpdGUgdi1qb2ItaXRlbXNfX3JlbW92ZS1idXR0b25cIiBAY2xpY2s9XCJyZW1vdmVJdGVtKGl0ZW1JbmRleClcIj57e2xvYygncmVtb3ZlJyl9fTwvYnV0dG9uPjwvdGQ+XG4gICAgICA8L3RyPlxuICAgICAgPHRyIHYtaWY9XCJzdW1GaWVsZFwiPlxuICAgICAgICA8dGQgdi1mb3I9XCJmaWVsZCBpbiBmaWVsZHNcIiB2LWJpbmQ6a2V5PVwiZmllbGQubmFtZVwiPlxuICAgICAgICAgIDxkaXYgdi1pZj1cInN1bUZpZWxkID09PSBmaWVsZC5uYW1lXCI+VG90YWw6IDx2LWN1cnJlbmN5LWlucHV0IDpkaXNwbGF5LW9ubHk9XCJ0cnVlXCIgOnZhbHVlPVwidG90YWxTdW1cIiA6ZGVjaW1hbC1jaGFyPVwiJywnXCIgPjwvdi1jdXJyZW5jeS1pbnB1dD48L2Rpdj5cbiAgICAgICAgICA8ZGl2IHYtZWxzZT4mbmJzcDs8L2Rpdj5cbiAgICAgICAgPC90ZD5cbiAgICAgICAgPHRkIHYtaWY9XCJlZGl0TW9kZVwiPiZuYnNwOzwvdGQ+XG4gICAgICA8L3RyPlxuICAgIDwvdGFibGU+XG4gICAgPGJ1dHRvbiB2LWlmPVwiZWRpdE1vZGVcIiBjbGFzcz1cInYtZGF0YS1pdGVtc19fYWRkLWJ1dHRvbiBidG4gYnRuLS13aGl0ZVwiIEBjbGljaz1cImFkZEl0ZW0oKVwiPnt7YWRkQnRuVGV4dCB8fCBsb2MoJ2FkZFJvdycpfX08L2J1dHRvbj5cbiAgPC9kaXY+XG5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVkN1cnJlbmN5SW5wdXQgZnJvbSAnLi92LWN1cnJlbmN5LWlucHV0LnZ1ZSc7XG5pbXBvcnQgVk51bWJlcklucHV0IGZyb20gJy4vdi1udW1iZXItaW5wdXQudnVlJztcblxuZXhwb3J0IGRlZmF1bHQge1xuICBjb21wb25lbnRzOiB7XG4gICAgJ3YtY3VycmVuY3ktaW5wdXQnOiBWQ3VycmVuY3lJbnB1dCxcbiAgICAndi1udW1iZXItaW5wdXQnOiBWTnVtYmVySW5wdXRcbiAgfSxcbiAgbmFtZTogJ1ZEYXRhSXRlbXMnLFxuICBkYXRhOiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGl0ZW1zOiBbXSxcbiAgICAgIGVycm9yRGF0YToge30sXG4gICAgICBwYXR0ZXJuczoge1xuICAgICAgICB0ZXh0OiAnJyxcbiAgICAgICAgbnVtYmVyOiAnLT9bMC05XStbXFwsLl0qWzAtOV0rJ1xuICAgICAgfVxuICAgIH1cbiAgfSxcbiAgcHJvcHM6IHtcbiAgICBzdW1GaWVsZDogU3RyaW5nLFxuICAgIG11bHRpcGx5RmllbGQ6IFN0cmluZyxcbiAgICBvbkNoYW5nZTogRnVuY3Rpb24sXG4gICAgZmllbGRzOiBBcnJheSxcbiAgICBkYXRhOiBBcnJheSxcbiAgICBoaWRlRW1wdHk6IEJvb2xlYW4sXG4gICAgYWRkQnRuVGV4dDogU3RyaW5nLFxuICAgIGVycm9yczogT2JqZWN0LFxuICAgIGVkaXRNb2RlOiB7XG4gICAgICBkZWZhdWx0OiB0cnVlLFxuICAgICAgdHlwZTogQm9vbGVhblxuICAgIH1cbiAgfSxcbiAgY29tcHV0ZWQ6IHtcbiAgICBzaG93VGFibGUoKSB7XG4gICAgICBpZighdGhpcy5oaWRlRW1wdHkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLml0ZW1zLmxlbmd0aCA/IHRydWUgOiBmYWxzZTtcbiAgICB9LFxuICAgIHRvdGFsU3VtICgpIHtcbiAgICAgIGxldCBzdW0gPSAwO1xuICAgICAgdGhpcy5pdGVtcy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICBjb25zdCBtdWx0aXBseUZpZWxkVmFsdWUgPSBpdGVtW3RoaXMubXVsdGlwbHlGaWVsZF0gfHzCoDE7XG4gICAgICAgIGNvbnN0IHN1bUZpZWxkVmFsdWUgPSAoaXRlbVt0aGlzLnN1bUZpZWxkXSB8fMKgMCkgKiBtdWx0aXBseUZpZWxkVmFsdWU7XG4gICAgICAgIGlmKHR5cGVvZiBzdW1GaWVsZFZhbHVlID09PSAnbnVtYmVyJykge1xuICAgICAgICAgIHN1bSArPSBzdW1GaWVsZFZhbHVlXG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gc3VtO1xuICAgIH1cbiAgfSxcbiAgbWV0aG9kczoge1xuICAgIGl0ZW1FcnJvck1lc3NhZ2VzKGl0ZW1JbmRleCwgZmllbGROYW1lKSB7XG4gICAgICBjb25zdCBpdGVtRGF0YSA9IHRoaXMuZXJyb3JEYXRhW2l0ZW1JbmRleF07XG5cbiAgICAgIHJldHVybiBpdGVtRGF0YSAmJiBpdGVtRGF0YVtmaWVsZE5hbWVdICYmIGl0ZW1EYXRhW2ZpZWxkTmFtZV0ubWVzc2FnZXMgfHwgW107XG4gICAgfSxcbiAgICBhZGRJdGVtKCkge1xuICAgICAgY29uc3QgaXRlbSA9IHt9O1xuICAgICAgdGhpcy5maWVsZHMuZm9yRWFjaChmaWVsZCA9PiB7XG4gICAgICAgIGl0ZW1bZmllbGQubmFtZV0gPSBudWxsO1xuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuaXRlbXMucHVzaChpdGVtKTtcbiAgICB9LFxuICAgIHJlbW92ZUl0ZW0oaW5kZXgpIHtcbiAgICAgIHRoaXMuaXRlbXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgIGlmKHR5cGVvZiB0aGlzLm9uQ2hhbmdlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRoaXMub25DaGFuZ2UodGhpcy5pdGVtcyk7XG4gICAgICB9XG4gICAgfSxcbiAgICB1cGRhdGUoZSkge1xuICAgICAgaWYodHlwZW9mIHRoaXMub25DaGFuZ2UgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhpcy5vbkNoYW5nZSh0aGlzLml0ZW1zKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG4gIG1vdW50ZWQoKSB7XG4gICAgdGhpcy5pdGVtcyA9IHRoaXMuZGF0YSB8fMKgW107XG4gIH0sXG4gIHdhdGNoOiB7XG4gICAgZGF0YSgpIHtcbiAgICAgIHRoaXMuaXRlbXMgPSB0aGlzLmRhdGEgfHzCoFtdO1xuICAgIH0sXG4gICAgZXJyb3JzKCkge1xuICAgICAgdGhpcy5lcnJvckRhdGEgPSB0aGlzLmVycm9ycyB8fMKge307XG4gICAgfVxuICB9XG59XG48L3NjcmlwdD5cblxuPHN0eWxlPlxuXG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlPlxuICA8ZGl2IGNsYXNzPVwidi1maWxlXCI+XG4gICAgPGJ1dHRvbiBAY2xpY2s9XCJjbGlja0ZpbGVJbnB1dFwiIGNsYXNzPVwidi1maWxlX19idXR0b24gYnRuIGJ0bi0td2hpdGVcIiA6ZGlzYWJsZWQ9XCJsaW1pdFJlYWNoZWRcIj57e2xvYygnYWRkRmlsZXMnKX19PC9idXR0b24+XG4gICAgPGlucHV0IHJlZj1cImZpbGVJbnB1dFwiIDpkaXNhYmxlZD1cImxpbWl0UmVhY2hlZFwiIGNsYXNzPVwidi1maWxlX19maWxlLWlucHV0XCIgdHlwZT1cImZpbGVcIiA6bXVsdGlwbGU9XCIhIW11bHRpcGxlXCIgdi1vbjpjaGFuZ2U9XCJvbkZpbGVDaGFuZ2VcIj5cbiAgICA8ZGl2IHYtaWY9XCJyZWFkRmlsZXMubGVuZ3RoXCIgY2xhc3M9XCJ2LWZpbGVfX2ZpbGVzXCI+XG4gICAgICA8aDQgY2xhc3M9XCJ2LWZpbGVfX2ZpbGVzLXRpdGxlXCI+e3tsb2MoJ2FkZGVkRmlsZXMnKX19PC9oND5cbiAgICAgIDx0YWJsZSBjbGFzcz1cInRhYmxlXCI+XG4gICAgICAgIDx0ciB2LWZvcj1cIihmaWxlLCBpbmRleCkgaW4gcmVhZEZpbGVzXCIgdi1iaW5kOmtleT1cImluZGV4XCI+XG4gICAgICAgICAgPHRkPnt7ZmlsZS5uYW1lfX08L3RkPlxuICAgICAgICAgIDx0ZCBjbGFzcz1cInRhYmxlX190ZCBpcy1hbGlnbi1yaWdodFwiPjxidXR0b24gY2xhc3M9XCJidG4gYnRuLS13aGl0ZSB2LWZpbGVfX3JlbW92ZS1idXR0b25cIiBAY2xpY2s9XCJyZW1vdmVGaWxlKGluZGV4KVwiPnt7bG9jKCdyZW1vdmVGaWxlJyl9fTwvYnV0dG9uPjwvdGQ+XG4gICAgICAgIDwvdHI+XG4gICAgICA8L3RhYmxlPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbmFtZTogJ1ZGaWxlJyxcbiAgZGF0YTogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB7XG4gICAgICByZWFkRmlsZXM6IFtdXG4gICAgfVxuICB9LFxuICBwcm9wczogWydtdWx0aXBsZScsICdvbi1jaGFuZ2UnLCAnZmlsZS1jb3VudC1saW1pdCddLFxuICBjb21wdXRlZDoge1xuICAgIGxpbWl0UmVhY2hlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmZpbGVDb3VudExpbWl0ID8gdGhpcy5maWxlQ291bnRMaW1pdCA8PSB0aGlzLnJlYWRGaWxlcy5sZW5ndGggOiBmYWxzZTtcbiAgICB9XG4gIH0sXG4gIG1ldGhvZHM6IHtcbiAgICByZW1vdmVGaWxlKGluZGV4KSB7XG4gICAgICB0aGlzLnJlYWRGaWxlcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgdGhpcy5vbkNoYW5nZSh0aGlzLnJlYWRGaWxlcyk7XG4gICAgfSxcbiAgICBjbGlja0ZpbGVJbnB1dCgpIHtcbiAgICAgIHRoaXMuJHJlZnMuZmlsZUlucHV0LmNsaWNrKCk7XG4gICAgfSxcbiAgICAvLyBJZiB5b3UgdXBkYXRlIHRoaXMgZnVuY3Rpb24sIHJlbWVtYmVyIHRvIHVwZGF0ZSBpdCB0byBTdGFnZSBhcHAtY29yZSBydWxlcyB0b29cbiAgICBpc0RhdGFVcmwoZGF0YVVybCkge1xuICAgICAgY29uc3QgcmVnZXggPSAvXmRhdGE6KFthLXpdK1xcL1thLXowLTktKy5dKyg7W2Etei1dKz1bYS16MC05LV0rKT8pPyg7YmFzZTY0KT8sKFthLXowLTkhJCYnLCgpKis7PVxcLS5ffjpAXFwvPyVcXHNdKikqJC9pO1xuICAgICAgcmV0dXJuICEhZGF0YVVybC50cmltKCkubWF0Y2gocmVnZXgpO1xuICAgIH0sXG4gICAgb25GaWxlQ2hhbmdlKGUpIHtcbiAgICAgIGNvbnN0IGZpbGVzID0gZS50YXJnZXQuZmlsZXMgfHwgZS5kYXRhVHJhbnNmZXIuZmlsZXMgfHwgW107XG5cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZmlsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgZmlsZSA9IGZpbGVzW2ldO1xuICAgICAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuXG4gICAgICAgIHJlYWRlci5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgKCkgPT4ge1xuICAgICAgICAgIGlmKCF0aGlzLmxpbWl0UmVhY2hlZCAmJiB0aGlzLmlzRGF0YVVybChyZWFkZXIucmVzdWx0KSkge1xuICAgICAgICAgICAgdGhpcy5yZWFkRmlsZXMucHVzaCh7XG4gICAgICAgICAgICAgIGRhdGE6IHJlYWRlci5yZXN1bHQsXG4gICAgICAgICAgICAgIGZpbGU6IGZpbGUsXG4gICAgICAgICAgICAgIG5hbWU6IGZpbGUubmFtZSxcbiAgICAgICAgICAgICAgc2l6ZTogZmlsZS5zaXplLFxuICAgICAgICAgICAgICB0eXBlOiBmaWxlLnR5cGVcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpZih0eXBlb2YgdGhpcy5vbkNoYW5nZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICB0aGlzLm9uQ2hhbmdlKHRoaXMucmVhZEZpbGVzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0sIGZhbHNlKTtcblxuICAgICAgICByZWFkZXIucmVhZEFzRGF0YVVSTChmaWxlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbjwvc2NyaXB0PlxuXG48c3R5bGU+XG5cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGU+XG4gIDxkaXYgY2xhc3M9XCJ2LWZvcm0tZmllbGRcIj5cbiAgICA8IS0tIGxhYmVsIC0tPlxuICAgIDxsYWJlbCB2LWlmPVwiKGZpZWxkRGF0YS50eXBlICE9PSAnaGlkZGVuJyAmJiBmaWVsZERhdGEudHlwZSAhPT0gJ2hlYWRpbmcnICYmIGZpZWxkRGF0YS50eXBlICE9PSAnYm9vbCcpXCIgOmZvcj1cImdlbmVyYXRlZElkXCIgY2xhc3M9XCJ2LWZvcm0tZmllbGRfX2xhYmVsXCI+e3tmaWVsZERhdGEubGFiZWx9fTwvbGFiZWw+XG4gICAgPGxhYmVsIHYtaWY9XCJmaWVsZERhdGEudHlwZSA9PSAnYm9vbCdcIiBjbGFzcz1cInYtZm9ybS1maWVsZF9fbGFiZWxcIj57e2ZpZWxkRGF0YS5sYWJlbH19PC9sYWJlbD5cbiAgICA8ZGl2IHYtaWY9XCJmaWVsZERhdGEuaGVscFwiIHYtaHRtbD1cInNwYW4oZmllbGREYXRhLmhlbHApXCIgLz5cblxuICAgIDwhLS0gZXJyb3JzIC0tPlxuICAgIDxwIGNsYXNzPVwidi1mb3JtLWZpZWxkX19lcnJvcnNcIiB2LWlmPVwiZXJyb3JNZXNzYWdlcy5sZW5ndGhcIj5cbiAgICAgIDxzcGFuIHYtZm9yPVwiKG1lc3NhZ2UsIGluZGV4KSBpbiBlcnJvck1lc3NhZ2VzXCIgdi1iaW5kOmtleT1cImluZGV4XCI+e3ttZXNzYWdlfX08YnI+PC9zcGFuPlxuICAgIDwvcD5cblxuICAgIDwhLS0gaW5wdXQgdHlwZSB0ZXh0IC0tPlxuICAgIDxpbnB1dCB2LWlmPVwiZmllbGREYXRhLnR5cGUgPT09ICd0ZXh0J1wiIGNsYXNzPVwidi1mb3JtLWZpZWxkX190ZXh0XCIgOmlkPVwiZ2VuZXJhdGVkSWRcIiB2LW1vZGVsPVwiZmllbGREYXRhLnZhbHVlXCIgdHlwZT1cInRleHRcIiA6cGxhY2Vob2xkZXI9XCJmaWVsZERhdGEucGxhY2Vob2xkZXJcIiB2LW9uOmJsdXI9XCJvbkZpZWxkQmx1clwiIHYtb246aW5wdXQ9XCJ1cGRhdGVGb3JtRGF0YVwiIHYtb246a2V5ZG93bi5lbnRlci5wcmV2ZW50PlxuICAgIDwhLS0gaW5wdXQgdHlwZSB0ZXh0YXJlYSAtLT5cbiAgICA8dGV4dGFyZWEgdi1pZj1cImZpZWxkRGF0YS50eXBlID09PSAndGV4dGFyZWEnXCIgY2xhc3M9XCJ2LWZvcm0tZmllbGRfX3RleHRcIiA6aWQ9XCJnZW5lcmF0ZWRJZFwiIHYtbW9kZWw9XCJmaWVsZERhdGEudmFsdWVcIiB2LW9uOmlucHV0PVwidXBkYXRlRm9ybURhdGFcIiA6cGxhY2Vob2xkZXI9XCJmaWVsZERhdGEucGxhY2Vob2xkZXJcIj48L3RleHRhcmVhPlxuICAgIDwhLS0gZGF0ZXBpY2tlciAtLT5cbiAgICA8ZGF0ZXBpY2tlciB2LWlmPVwiZmllbGREYXRhLnR5cGUgPT09ICdkYXRlJ1wiIDpsYW5ndWFnZT1cImxhbmd1YWdlXCIgOmZvcm1hdD1cIidkZC5NTS55eXl5J1wiIDpjbGVhci1idXR0b249XCJ0cnVlXCIgY2xhc3M9XCJ2LWZvcm0tZmllbGRfX2RhdGVcIiA6aWQ9XCJnZW5lcmF0ZWRJZFwiIHYtbW9kZWw9XCJmaWVsZERhdGEudmFsdWVcIiBAaW5wdXQ9XCJ1cGRhdGVGb3JtRGF0YVwiPjwvZGF0ZXBpY2tlcj5cblxuICAgIDxpbnB1dCB2LWlmPVwiZmllbGREYXRhLnR5cGUgPT09ICdlbWFpbCdcIiBjbGFzcz1cInYtZm9ybS1maWVsZF9fZW1haWxcIiA6aWQ9XCJnZW5lcmF0ZWRJZFwiIHYtbW9kZWw9XCJmaWVsZERhdGEudmFsdWVcIiB0eXBlPVwiZW1haWxcIiB2LW9uOmlucHV0PVwidXBkYXRlRm9ybURhdGFcIj5cbiAgICA8di1wYXNzLXN0cmVuZ3RoIHYtaWY9XCJmaWVsZERhdGEudHlwZSA9PT0gJ3Bhc3N3b3JkLXN0cmVuZ3RoJ1wiIDpwYXNzd29yZD1cImZpZWxkVmFsdWVcIj5cbiAgICAgIDxpbnB1dCBhdXRvY29tcGxldGU9XCJuZXctcGFzc3dvcmRcIiBjbGFzcz1cInYtZm9ybS1maWVsZF9fcGFzc3dvcmQgdi1wYXNzLXN0cmVuZ3RoX19wYXNzd29yZC1maWVsZFwiIDppZD1cImdlbmVyYXRlZElkXCIgdi1tb2RlbD1cImZpZWxkRGF0YS52YWx1ZVwiIHR5cGU9XCJwYXNzd29yZFwiIHYtb246aW5wdXQ9XCJ1cGRhdGVGb3JtRGF0YVwiPlxuICAgIDwvdi1wYXNzLXN0cmVuZ3RoPlxuICAgIDxpbnB1dCB2LWlmPVwiZmllbGREYXRhLnR5cGUgPT09ICdwYXNzd29yZCdcIiBhdXRvY29tcGxldGU9XCJuZXctcGFzc3dvcmRcIiBjbGFzcz1cInYtZm9ybS1maWVsZF9fcGFzc3dvcmRcIiA6aWQ9XCJnZW5lcmF0ZWRJZFwiIHYtbW9kZWw9XCJmaWVsZERhdGEudmFsdWVcIiB0eXBlPVwicGFzc3dvcmRcIiB2LW9uOmlucHV0PVwidXBkYXRlRm9ybURhdGFcIj5cbiAgICA8IS0tIGlucHV0IHR5cGUgaGlkZGVuIC0tPlxuICAgIDxpbnB1dCB2LWlmPVwiZmllbGREYXRhLnR5cGUgPT09ICdoaWRkZW4nXCIgdHlwZT1cImhpZGRlblwiIHYtbW9kZWw9XCJmaWVsZERhdGEudmFsdWVcIj5cbiAgICA8IS0tIGlucHV0IHR5cGUgc2VsZWN0IChjdXN0b20gc3R5bGUpLS0+XG4gICAgPGRpdiB2LWlmPVwiZmllbGREYXRhLnR5cGUgPT0gJ3NlbGVjdCdcIiBjbGFzcz1cImN1c3RvbS1zZWxlY3QgY3VzdG9tLXNlbGVjdC1mdWxsLXdpZHRoIGpzLWN1c3RvbS1zZWxlY3Qtd3JhcHBlclwiPlxuICAgICAgPGRpdiBjbGFzcz1cImN1c3RvbS1zZWxlY3RfX2Ryb3Bkb3duIGN1c3RvbS1zZWxlY3RfX2Ryb3Bkb3duLS1mdWxsLXdpZHRoIGpzLWN1c3RvbS1zZWxlY3QtZHJvcGRvd25cIj48L2Rpdj5cbiAgICAgIDxzcGFuIDppZD1cImdlbmVyYXRlZElkXCIgY2xhc3M9XCJjdXN0b20tc2VsZWN0X190ZXh0IGpzLWN1c3RvbS1zZWxlY3QtdGV4dGhvbGRlclwiPnt7c2VsZWN0ZWRPcHRpb25UZXh0fX08L3NwYW4+XG4gICAgICA8c2VsZWN0IDppZD1cImdlbmVyYXRlZElkXCIgdi1tb2RlbD1cImZpZWxkRGF0YS52YWx1ZVwiIHYtb246Y2hhbmdlPVwidXBkYXRlRm9ybURhdGFcIiBjbGFzcz1cImZvcm1fX2ZpZWxkLXNlbGVjdCBqcy1jdXN0b20tc2VsZWN0IGZvcm1fX2ZpZWxkLXNlbGVjdC1jdXN0b20gZm9ybV9fZmllbGQtc2VsZWN0LWN1c3RvbS1mdWxsLXdpZHRoIGpzLWxhbmctc2VsZWN0IGxhbmdfc2VsZWN0XCI+XG4gICAgICAgIDxvcHRpb24gZGlzYWJsZWQgdmFsdWU9XCJcIj57e2xvYygnZm9ybXMuc2VsZWN0LmRlZmF1bHRFbXB0eScpfX08L29wdGlvbj5cbiAgICAgICAgICA8b3B0aW9uIHYtZm9yPVwib3B0aW9uIGluIGZpZWxkRGF0YS5vcHRpb25zXCIgIHNlbGVjdGVkPVwia2V5ID09IG9wdGlvbi50ZXh0XCIgdi1iaW5kOnZhbHVlPVwib3B0aW9uLnZhbHVlXCIgdi1iaW5kOmtleT1cIm9wdGlvbi50ZXh0XCIgdi1iaW5kOnRleHQ9XCJvcHRpb24udGV4dFwiPlxuICAgICAgICAgIHt7IG9wdGlvbi50ZXh0IH19XG4gICAgICAgIDwvb3B0aW9uPlxuICAgICAgPC9zZWxlY3Q+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIHNlY3Rpb24gaGVhZGVyIC0tPlxuICAgIDxkaXYgdi1pZj1cImZpZWxkRGF0YS50eXBlID09ICdoZWFkaW5nJ1wiIGNsYXNzPVwidi1mb3JtX19zZWN0aW9uLWhlYWRpbmdcIj5cbiAgICAgIDxoMz57e2ZpZWxkRGF0YS5oZWFkaW5nfX08L2gzPlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSByYWRpbyBidXR0b24gLS0+XG4gICAgPGRpdiB2LWlmPVwiZmllbGREYXRhLnR5cGUgPT0gJ2Jvb2wnXCIgY2xhc3M9XCJ2LWZvcm0tZmllbGRfX3JhZGlvXCI+XG4gICAgICA8bGFiZWwgY2xhc3M9XCJjaGVja2JveC1pbmxpbmVcIj48aW5wdXQgdHlwZT1cInJhZGlvXCIgOmlkPVwiZ2VuZXJhdGVkSWRcIiA6bmFtZT1cImdlbmVyYXRlZElkXCIgdi1tb2RlbD1cImZpZWxkRGF0YS52YWx1ZVwiIHYtb246Y2hhbmdlPVwidXBkYXRlRm9ybURhdGFcIiB2YWx1ZT1cIjFcIj4ge3tsb2MoJ2Zvcm1zLnJhZGlvLnllcycpfX0gPC9sYWJlbD5cbiAgICAgIDxsYWJlbCBjbGFzcz1cImNoZWNrYm94LWlubGluZVwiPjxpbnB1dCB0eXBlPVwicmFkaW9cIiA6aWQ9XCJnZW5lcmF0ZWRJZFwiIDpuYW1lPVwiZ2VuZXJhdGVkSWRcIiB2LW1vZGVsPVwiZmllbGREYXRhLnZhbHVlXCIgdi1vbjpjaGFuZ2U9XCJ1cGRhdGVGb3JtRGF0YVwiIHZhbHVlPVwiMFwiPiB7e2xvYygnZm9ybXMucmFkaW8ubm8nKX19IDwvbGFiZWw+XG4gICAgPC9kaXY+XG5cbiAgICA8di1kYXRhLWl0ZW1zIHYtaWY9XCJmaWVsZERhdGEudHlwZSA9PT0gJ2RhdGEtaXRlbXMnXCIgOmhpZGUtZW1wdHk9XCJmaWVsZERhdGEuaGlkZUVtcHR5XCIgIDpzdW0tZmllbGQ9XCJmaWVsZERhdGEuc3VtRmllbGRcIiA6bXVsdGlwbHktZmllbGQ9XCJmaWVsZERhdGEubXVsdGlwbHlGaWVsZFwiIDpmaWVsZHM9XCJmaWVsZERhdGEuZmllbGRzXCIgOmRhdGE9XCJmaWVsZERhdGEudmFsdWVcIiA6ZXJyb3JzPVwiZXJyb3JJdGVtc1wiIDphZGQtYnRuLXRleHQ9XCJmaWVsZERhdGEuYWRkQnRuVGV4dFwiPjwvdi1kYXRhLWl0ZW1zPlxuXG4gICAgPCEtLSBpbnB1dCB0eXBlIHNlbGVjdCAoZGVmYXVsdCBzdHlsZSkgLS0+XG4gICAgPCEtLTxzZWxlY3Qgdi1pZj1cImZpZWxkRGF0YS50eXBlID09PSAnc2VsZWN0J1wiIDppZD1cImdlbmVyYXRlZElkXCIgdi1tb2RlbD1cImZpZWxkRGF0YS52YWx1ZVwiIHYtb246Y2hhbmdlPVwidXBkYXRlRm9ybURhdGFcIj5cbiAgICAgIDxvcHRpb24gZGlzYWJsZWQgdmFsdWU9XCJcIj57e2xvYygnZm9ybXMuc2VsZWN0LmRlZmF1bHRFbXB0eScpfX08L29wdGlvbj5cbiAgICAgIDxvcHRpb24gdi1mb3I9XCJvcHRpb24gaW4gZmllbGREYXRhLm9wdGlvbnNcIiB2LWJpbmQ6dmFsdWU9XCJvcHRpb24udmFsdWVcIiB2LWJpbmQ6a2V5PVwib3B0aW9uLnZhbHVlXCI+XG4gICAgICAgIHt7IG9wdGlvbi50ZXh0IH19XG4gICAgICA8L29wdGlvbj5cbiAgICA8L3NlbGVjdD4tLT5cbiAgICA8IS0tIGlucHV0IHR5cGUgZmlsZSAtLT5cbiAgICA8di1maWxlIHYtaWY9XCJmaWVsZERhdGEudHlwZSA9PT0gJ2ZpbGUnXCIgOmZpbGUtY291bnQtbGltaXQ9XCJmaWVsZERhdGEuZmlsZUNvdW50TGltaXRcIiA6bXVsdGlwbGU9XCIhIWZpZWxkRGF0YS5tdWx0aXBsZVwiIDpvbi1jaGFuZ2U9XCJvbkZpZWxkQ2hhbmdlXCI+PC92LWZpbGU+XG4gIDwvZGl2PlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cblxuaW1wb3J0IFZQYXNzU3RyZW5ndGggZnJvbSAnLi92LXBhc3Mtc3RyZW5ndGgudnVlJztcbmltcG9ydCBWRmlsZSBmcm9tICcuL3YtZmlsZS52dWUnO1xuaW1wb3J0IGRhdGVwaWNrZXIgZnJvbSAndnVlanMtZGF0ZXBpY2tlcic7XG5pbXBvcnQgVkRhdGFJdGVtcyBmcm9tICcuL3YtZGF0YS1pdGVtcy52dWUnO1xuXG5mdW5jdGlvbiBndWlkR2VuZXJhdG9yKCkge1xuICB2YXIgUzQgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gKCgoMStNYXRoLnJhbmRvbSgpKSoweDEwMDAwKXwwKS50b1N0cmluZygxNikuc3Vic3RyaW5nKDEpO1xuICB9O1xuXG4gIHJldHVybiAoUzQoKStTNCgpK1wiLVwiK1M0KCkrXCItXCIrUzQoKStcIi1cIitTNCgpK1wiLVwiK1M0KCkrUzQoKStTNCgpKTtcbn1cbmV4cG9ydCBkZWZhdWx0IHtcbiAgY29tcG9uZW50czoge1xuICAgICd2LXBhc3Mtc3RyZW5ndGgnOiBWUGFzc1N0cmVuZ3RoLFxuICAgICdkYXRlcGlja2VyJzogZGF0ZXBpY2tlcixcbiAgICAndi1maWxlJzogVkZpbGUsXG4gICAgJ3YtZGF0YS1pdGVtcyc6IFZEYXRhSXRlbXNcbiAgfSxcbiAgcHJvcHM6IFsnZmllbGQtZGF0YScsICdmb3JtRGF0YScsICdmb3JtRXJyb3JzJywgJ29uLWNoYW5nZScsICdvbi1ibHVyJ10sXG4gIGRhdGE6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZ2VuZXJhdGVkSWQ6IGd1aWRHZW5lcmF0b3IoKSxcbiAgICAgIGZpZWxkVmFsdWU6ICcnXG4gICAgfVxuICB9LFxuICBtZXRob2RzOiB7XG4gICAgc3Bhbih0ZXh0KSB7XG4gICAgICByZXR1cm4gYDxzcGFuPiR7dGV4dH08L3NwYW4+YFxuICAgIH0sXG4gICAgdXBkYXRlRm9ybURhdGEoKSB7XG4gICAgICB0aGlzLmZvcm1EYXRhW3RoaXMuZmllbGREYXRhLm5hbWVdID0gdGhpcy5maWVsZERhdGEudmFsdWU7XG4gICAgICB0aGlzLmZpZWxkVmFsdWUgPSB0aGlzLmZpZWxkRGF0YS52YWx1ZTtcbiAgICAgIC8vIFRyaWdnZXIgb25DaGFuZ2UgY2FsbGJhY2sgaWYgYW55XG4gICAgICBpZih0eXBlb2YgdGhpcy5vbkNoYW5nZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aGlzLm9uQ2hhbmdlKHRoaXMuZm9ybURhdGEpO1xuICAgICAgfVxuICAgIH0sXG4gICAgb25GaWVsZEJsdXIoKSB7XG4gICAgICBpZiAodHlwZW9mIHRoaXMub25CbHVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRoaXMub25CbHVyKHRoaXMuZmllbGREYXRhKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIG9uRmllbGRDaGFuZ2UoZGF0YSkge1xuICAgICAgdGhpcy5maWVsZERhdGEudmFsdWUgPSBkYXRhO1xuICAgICAgdGhpcy51cGRhdGVGb3JtRGF0YSgpO1xuICAgIH1cbiAgfSxcbiAgY29tcHV0ZWQ6IHtcbiAgICBsYW5ndWFnZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRzdG9yZS5zdGF0ZS5sYW5ndWFnZTtcbiAgICB9LFxuICAgIGVycm9yTWVzc2FnZXMoKSB7XG4gICAgICBjb25zdCBlcnJvciA9IHRoaXMuZm9ybUVycm9yc1t0aGlzLmZpZWxkRGF0YS5uYW1lXTtcblxuICAgICAgcmV0dXJuIGVycm9yICYmIGVycm9yLm1lc3NhZ2VzIHx8IFtdO1xuICAgIH0sXG4gICAgZXJyb3JJdGVtcygpIHtcbiAgICAgIGNvbnN0IGVycm9yID0gdGhpcy5mb3JtRXJyb3JzW3RoaXMuZmllbGREYXRhLm5hbWVdO1xuXG4gICAgICByZXR1cm4gZXJyb3IgJiYgZXJyb3IuaXRlbXMgfHzCoG51bGw7XG4gICAgfSxcbiAgICBwYXNzd29yZEZpZWxkVmFsdWUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5maWVsZERhdGEudHlwZSA9PT0gJ3Bhc3N3b3JkJyAmJiB0aGlzLmZpZWxkVmFsdWUgfHwgJyc7XG4gICAgfSxcbiAgICBzZWxlY3RlZE9wdGlvblRleHQoKSAge1xuXG4gICAgICBmb3IodmFyIGkgPSAwIDsgaSA8IHRoaXMuZmllbGREYXRhLm9wdGlvbnMubGVuZ3RoIDsgaSsrKXtcbiAgICAgICAgaWYodGhpcy5maWVsZFZhbHVlID09IHRoaXMuZmllbGREYXRhLm9wdGlvbnNbaV0udmFsdWUpe1xuICAgICAgICAgIHJldHVybiB0aGlzLmZpZWxkRGF0YS5vcHRpb25zW2ldLnRleHQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cbiAgfSxcbiAgbW91bnRlZDogZnVuY3Rpb24gKCkge1xuICAgIHRoaXMudXBkYXRlRm9ybURhdGEoKTtcbiAgfSxcbiAgd2F0Y2g6IHtcbiAgICAvLyBVcGRhdGUgZm9ybURhdGEgd2hlbiBwYXNzZWQgZmllbGQgZGF0YSBjaGFuZ2VcbiAgICBmaWVsZERhdGEoKSB7XG4gICAgICB0aGlzLnVwZGF0ZUZvcm1EYXRhKCk7XG4gICAgfVxuICB9XG59XG48L3NjcmlwdD5cblxuPHN0eWxlPlxuXG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlPlxuICA8Zm9ybSBjbGFzcz1cInYtZm9ybVwiIGFjdGlvbj1cIlwiIG1ldGhvZD1cInBvc3RcIiB2LW9uOnN1Ym1pdC5wcmV2ZW50PVwic3VibWl0UHJldmVudGVkXCI+XG4gICAgPHYtZm9ybS1maWVsZCB2LWZvcj1cImZpZWxkIGluIGZpZWxkc1wiIHYtYmluZDprZXk9XCJmaWVsZC5uYW1lXCIgOmZpZWxkLWRhdGE9XCJmaWVsZFwiIDpmb3JtLWRhdGE9XCJmb3JtRGF0YVwiIDpmb3JtLWVycm9ycz1cImZvcm1FcnJvcnNcIiA6b24tY2hhbmdlPVwib25DaGFuZ2VcIiA6b24tYmx1cj1cIm9uQmx1clwiPjwvdi1mb3JtLWZpZWxkPlxuICAgIDxzbG90IG5hbWU9XCJidXR0b25zXCI+PC9zbG90PlxuICAgIDxwIHYtaWY9XCJmb3JtRXJyb3JzLndhcnJhbnR5UmVnaXN0ZXJhdGlvbkRvbmVcIiBjbGFzcz1cImZvcm1fX2Vycm9yLW1lc3NhZ2UgZmlyc3RcIj57e2xvYygnZm9ybXMubWVzc2FnZXMud2FycmFudHlSZWdpc3RlcmF0aW9uTm90RG9uZScpfX08L3A+XG4gICAgPHAgdi1pZj1cIk9iamVjdC5rZXlzKGZvcm1FcnJvcnMpLmxlbmd0aCA+IDAgJiYgIWZvcm1FcnJvcnMuZmllbGRFcnJvclwiIGNsYXNzPVwiZm9ybV9fZXJyb3ItbWVzc2FnZSBmaXJzdFwiPnt7bG9jKCdmb3Jtcy5tZXNzYWdlcy5oYXNFcnJvcnMnKX19PC9wPlxuICA8L2Zvcm0+XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IFZGb3JtRmllbGQgZnJvbSAnLi92LWZvcm0tZmllbGQudnVlJztcblxuZXhwb3J0IGRlZmF1bHQge1xuICBjb21wb25lbnRzOiB7XG4gICAgJ3YtZm9ybS1maWVsZCc6IFZGb3JtRmllbGRcbiAgfSxcbiAgcHJvcHM6IFsnZmllbGRzJywgJ2Zvcm0tZGF0YScsICdmb3JtLWVycm9ycycsICdvbi1jaGFuZ2UnLCAnb24tYmx1ciddLFxuICBtZXRob2RzOiB7XG4gICAgLy8gUHJldmVudCBkZWZhdWx0IHN1Ym1pdHNcbiAgICBzdWJtaXRQcmV2ZW50ZWQoKSB7XG4gICAgfVxuICB9XG59XG48L3NjcmlwdD5cblxuPHN0eWxlPlxuXG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlPlxuICA8ZGl2IGNsYXNzPVwidi1tb2RhbC1jb250ZW50IG5vLWlubmVyLW1hcmdpblwiPlxuICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXJcIj5cbiAgICAgIDxoMyB2LWlmPVwidGl0bGVcIiBjbGFzcz1cIm1vZGFsLXRpdGxlIHYtbW9kYWwtY29udGVudF9fdGl0bGVcIj57e3RpdGxlfX08L2gzPlxuICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tLWNhbmNlbCBjYW5jZWxcIiB0eXBlPVwiYnV0dG9uXCIgdi1vbjpjbGljaz1cImNsb3NlXCI+eDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJ2LW1vZGFsLWNvbnRlbnRfX2NvbnRlbnRcIj48c2xvdD48L3Nsb3Q+PC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cInYtbW9kYWwtY29udGVudF9fYnV0dG9uc1wiPjxzbG90IG5hbWU9XCJidXR0b25zXCI+PC9zbG90PjwvZGl2PlxuICA8L2Rpdj5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5leHBvcnQgZGVmYXVsdCB7XG4gIHByb3BzOiBbJ3RpdGxlJ10sXG4gIG1ldGhvZHM6IHtcbiAgICBjbG9zZSgpIHtcbiAgICAgIHRoaXMuJGVtaXQoJ2Nsb3NlJyk7XG4gICAgfVxuICB9XG59XG48L3NjcmlwdD5cblxuPHN0eWxlPlxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZT5cbiAgPHNwYW4+XG4gICAgPHNwYW4gdi1pZj1cImRpc3BsYXlPbmx5XCI+e3tkaXNwbGF5VmFsdWV9fTwvc3Bhbj5cbiAgICA8aW5wdXQgdi1lbHNlIDpjbGFzcz1cImlucHV0Q2xhc3NcIiB0eXBlPVwidGV4dFwiIHYtbW9kZWw9XCJkaXNwbGF5VmFsdWVcIiBAYmx1cj1cImlzSW5wdXRBY3RpdmUgPSBmYWxzZVwiIEBmb2N1cz1cImlzSW5wdXRBY3RpdmUgPSB0cnVlXCIgdi1vbjprZXlkb3duLmVudGVyLnByZXZlbnQvPlxuICA8L3NwYW4+XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAnVkN1cnJlbmN5SW5wdXQnLFxuICBwcm9wczogWyd2YWx1ZScsICdpbnB1dC1jbGFzcycsICdkaXNwbGF5LW9ubHknLCAnZGVjaW1hbC1jaGFyJ10sXG4gIGRhdGE6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB7XG4gICAgICBpc0lucHV0QWN0aXZlOiBmYWxzZSxcbiAgICAgIGRlY2ltYWw6ICcsJ1xuICAgIH1cbiAgfSxcbiAgY29tcHV0ZWQ6IHtcbiAgICBkaXNwbGF5VmFsdWU6IHtcbiAgICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIGxldCB2YWx1ZSA9IHRoaXMudmFsdWU7XG4gICAgICAgIC8vIGNoYW5nZSB2YWx1ZSB0byB6ZXJvIGlmIG5vIG51bWJlciBpcyBwYXNzZWRcbiAgICAgICAgaWYodGhpcy52YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICAgIHRoaXMuJGVtaXQoJ2lucHV0JywgMClcbiAgICAgICAgICB2YWx1ZSA9IDA7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5pc0lucHV0QWN0aXZlKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Rm9ybWF0dGVkRm9ySW5wdXQodmFsdWUsIGZhbHNlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBVc2VyIGlzIG5vdCBtb2RpZnlpbmcgbm93LiBGb3JtYXQgZGlzcGxheSB2YWx1ZSBmb3IgdXNlciBpbnRlcmZhY2VcbiAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnRvU3RyaW5nKCk7XG5cbiAgICAgICAgICB2YWx1ZSA9IHBhcnNlRmxvYXQodmFsdWUucmVwbGFjZSgvLC9nLCAnLicpKS50b0ZpeGVkKDIpO1xuXG4gICAgICAgICAgLy8gRW5zdXJlIHRoYXQgaXQgaXMgbm90IE5hTlxuICAgICAgICAgIGlmIChpc05hTih2YWx1ZSkpIHtcbiAgICAgICAgICAgIHZhbHVlID0gMDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLiRlbWl0KCdpbnB1dCcsIHBhcnNlRmxvYXQodmFsdWUpKTtcblxuICAgICAgICAgIHJldHVybiB0aGlzLmdldEZvcm1hdHRlZEZvcklucHV0KHZhbHVlLCB0cnVlKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHNldDogZnVuY3Rpb24obW9kaWZpZWRWYWx1ZSkge1xuICAgICAgICAvLyBSZWNhbGN1bGF0ZSB2YWx1ZSBhZnRlciBpZ25vcmluZyBcIiRcIiwgXCIsXCIgYW5kIFwiLlwiIGluIHVzZXIgaW5wdXRcbiAgICAgICAgY29uc3QgcmVnRXhwID0gbmV3IFJlZ0V4cCgnW15cXFxcZFxcXFwuLF0nLCAnZycpO1xuICAgICAgICBsZXQgbmV3VmFsdWUgPSBtb2RpZmllZFZhbHVlLnJlcGxhY2UocmVnRXhwLCBcIlwiKVxuXG4gICAgICAgIC8vIE5vdGU6IHdlIGNhbm5vdCBzZXQgdGhpcy52YWx1ZSBhcyBpdCBpcyBhIFwicHJvcFwiLiBJdCBuZWVkcyB0byBiZSBwYXNzZWQgdG8gcGFyZW50IGNvbXBvbmVudFxuICAgICAgICAvLyAkZW1pdCB0aGUgZXZlbnQgc28gdGhhdCBwYXJlbnQgY29tcG9uZW50IGdldHMgaXRcbiAgICAgICAgdGhpcy4kZW1pdCgnaW5wdXQnLCBuZXdWYWx1ZSlcbiAgICAgIH1cbiAgICB9XG4gIH0sXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRGb3JtYXR0ZWRGb3JJbnB1dCh2YWx1ZSkge1xuICAgICAgbGV0IGRpc3BsYXlWYWx1ZSA9IHZhbHVlLnRvU3RyaW5nKCk7XG5cbiAgICAgIGNvbnN0IHJlZ0V4cCA9IG5ldyBSZWdFeHAoJ1teXFxcXGRcXFxcLixdJywgJ2cnKTtcbiAgICAgIGRpc3BsYXlWYWx1ZSA9IGRpc3BsYXlWYWx1ZS5yZXBsYWNlKHJlZ0V4cCwgXCJcIik7XG5cbiAgICAgIGlmKHRoaXMuZGVjaW1hbCA9PT0gJywnKSB7XG4gICAgICAgIGRpc3BsYXlWYWx1ZSA9IGRpc3BsYXlWYWx1ZS5yZXBsYWNlKC9cXC4vLCAnLCcpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZGlzcGxheVZhbHVlXG4gICAgfVxuICB9LFxuICBtb3VudGVkKCkge1xuICAgIHRoaXMuZGVjaW1hbCA9IHRoaXMuZGVjaW1hbENoYXIgfHwgdGhpcy5kZWNpbWFsO1xuICB9XG59XG48L3NjcmlwdD5cblxuPHN0eWxlPlxuXG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlPlxuICA8ZGl2IGNsYXNzPVwidi1wYXNzLXN0cmVuZ3RoXCIgOmNsYXNzPVwibW9kaWZpZXJDbGFzc1wiPlxuICAgIDxzbG90Pjwvc2xvdD5cbiAgICA8ZGl2IGNsYXNzPVwidi1wYXNzLXN0cmVuZ3RoX19iYXJcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJ2LXBhc3Mtc3RyZW5ndGhfX2Jhci1pbm5lclwiPjwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJ2LXBhc3Mtc3RyZW5ndGhfX3RleHQgdi1wYXNzLXN0cmVuZ3RoX190ZXh0LS1wb29yXCI+e3tsb2MoJ3Bhc3NTdHJlbmd0aC53ZWFrJyl9fTwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJ2LXBhc3Mtc3RyZW5ndGhfX3RleHQgdi1wYXNzLXN0cmVuZ3RoX190ZXh0LS13ZWFrXCI+e3tsb2MoJ3Bhc3NTdHJlbmd0aC53ZWFrJyl9fTwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJ2LXBhc3Mtc3RyZW5ndGhfX3RleHQgdi1wYXNzLXN0cmVuZ3RoX190ZXh0LS1nb29kXCI+e3tsb2MoJ3Bhc3NTdHJlbmd0aC5nb29kJyl9fTwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJ2LXBhc3Mtc3RyZW5ndGhfX3RleHQgdi1wYXNzLXN0cmVuZ3RoX190ZXh0LS1zdHJvbmdcIj57e2xvYygncGFzc1N0cmVuZ3RoLnN0cm9uZycpfX08L2Rpdj5cbiAgPC9kaXY+XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG5hbWU6ICdWUGFzc1N0cmVuZ3RoJyxcbiAgcHJvcHM6IFsncGFzc3dvcmQnXSxcbiAgY29tcHV0ZWQ6IHtcbiAgICAvLyBJZiB5b3UgY2hhbmdlIGhvdyBwYXNzd29yZCBzY29yaW5nIHdvcmtzLCBpbXBsZW1lbnQgY2hhbmdlcyB0byBzZXJ2ZXIgc2lkZSBhbHNvIVxuICAgIHBhc3N3b3JkU2NvcmUoKSB7XG4gICAgICBjb25zdCBQQVNTV09SRF9NSU5fTEVOR1RIID0gODtcbiAgICAgIGNvbnN0IFBBU1NXT1JEX01JTl9TVFJFTkdUSCA9IDYwO1xuICAgICAgY29uc3QgcGFzcyA9IHRoaXMucGFzc3dvcmQ7XG5cbiAgICAgIGxldCBzY29yZSA9IDA7XG5cbiAgICAgIC8vIGF3YXJkIGV2ZXJ5IHVuaXF1ZSBsZXR0ZXIgdW50aWwgNSByZXBldGl0aW9uc1xuICAgICAgbGV0IGxldHRlcnMgPSB7fTtcblxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYXNzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGxldHRlcnNbcGFzc1tpXV0gPSAobGV0dGVyc1twYXNzW2ldXSB8fCAwKSArIDE7XG4gICAgICAgIHNjb3JlICs9IDUuMCAvIGxldHRlcnNbcGFzc1tpXV07XG4gICAgICB9XG5cbiAgICAgIC8vIGJvbnVzIHBvaW50cyBmb3IgbWl4aW5nIGl0IHVwXG4gICAgICBsZXQgdmFyaWF0aW9ucyA9IHtcbiAgICAgICAgZGlnaXRzOiAvXFxkLy50ZXN0KHBhc3MpLFxuICAgICAgICBsb3dlcjogL1thLXpdLy50ZXN0KHBhc3MpLFxuICAgICAgICB1cHBlcjogL1tBLVpdLy50ZXN0KHBhc3MpLFxuICAgICAgICBub25Xb3JkczogL1xcVy8udGVzdChwYXNzKVxuICAgICAgfTtcblxuICAgICAgbGV0IHZhcmlhdGlvbkNvdW50ID0gMDtcbiAgICAgIGZvciAobGV0IGNoZWNrIGluIHZhcmlhdGlvbnMpIHtcbiAgICAgICAgdmFyaWF0aW9uQ291bnQgKz0gKHZhcmlhdGlvbnNbY2hlY2tdID09PSB0cnVlKSA/IDEgOiAwO1xuICAgICAgfVxuICAgICAgc2NvcmUgKz0gKHZhcmlhdGlvbkNvdW50IC0gMSkgKiAxMDtcblxuICAgICAgLy8gSWYgbGVuZ3RoIGlzIGJlbG93IGxpbWl0LCByZWR1Y2UgcG9pbnRzXG4gICAgICBpZiAocGFzcy5sZW5ndGggPD0gUEFTU1dPUkRfTUlOX0xFTkdUSCkge1xuICAgICAgICBzY29yZSA9IHNjb3JlICogKHBhc3MubGVuZ3RoIC8gUEFTU1dPUkRfTUlOX0xFTkdUSCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBzY29yZTtcbiAgICB9LFxuICAgIG1vZGlmaWVyQ2xhc3MoKSB7XG4gICAgICBjb25zdCBzY29yZSA9IHRoaXMucGFzc3dvcmRTY29yZTtcblxuICAgICAgaWYgKHNjb3JlID4gODApIHtcbiAgICAgICAgcmV0dXJuICdpcy1zdHJvbmcnO1xuICAgICAgfVxuXG4gICAgICBpZiAoc2NvcmUgPiA2MCkge1xuICAgICAgICByZXR1cm4gJ2lzLWdvb2QnO1xuICAgICAgfVxuXG4gICAgICBpZiAoc2NvcmUgPj0gMzApIHtcbiAgICAgICAgcmV0dXJuICdpcy13ZWFrJztcbiAgICAgIH1cblxuICAgICAgaWYgKHNjb3JlID4gMCkge1xuICAgICAgICByZXR1cm4gJ2lzLXBvb3InO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuPC9zY3JpcHQ+XG5cbjxzdHlsZT5cblxuPC9zdHlsZT5cblxuXG4iLCI8dGVtcGxhdGU+XG4gIDxkaXY+XG4gICAgPGRpdiB2LWlmPVwicGFzc3dvcmRVcGRhdGVkXCI+XG4gICAgICA8aDIgdi1odG1sPVwibG9jKCdjb21wb25lbnRzLmNoYW5nZVBhc3N3b3JkLnBhc3N3b3JkVXBkYXRlZCcpXCI+PC9oMj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IHYtZWxzZT5cbiAgICAgIDx2LWZvcm0gOmZpZWxkcz1cImZpZWxkc1wiIDpmb3JtLWRhdGE9XCJmb3JtRGF0YVwiIDpmb3JtLWVycm9ycz1cImZvcm1FcnJvcnNcIj5cbiAgICAgICAgPGRpdiBzbG90PVwiYnV0dG9uc1wiPlxuICAgICAgICAgIDxidXR0b24gOmRpc2FibGVkPVwic2VuZERpc2FibGVkXCIgdi1vbjpjbGljaz1cInNlbmRcIiB0eXBlPVwic3VibWl0XCIgY2xhc3M9XCJidG4gYnRuLS13aGl0ZVwiPnt7bG9jKCd1cGRhdGVQYXNzd29yZCcpfX08L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L3YtZm9ybT5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuXG5pbXBvcnQgVkZvcm0gZnJvbSAnLi92LWZvcm0udnVlJztcblxuZXhwb3J0IGRlZmF1bHQge1xuICBjb21wb25lbnRzOiB7XG4gICAgJ3YtZm9ybSc6IFZGb3JtXG4gIH0sXG4gIG5hbWU6ICdWaWV3Q2hhbmdlUGFzc3dvcmQnLFxuICBkYXRhOiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGZvcm1FcnJvcnM6IHt9LFxuICAgICAgZm9ybURhdGE6IHt9LFxuICAgICAgcGFzc3dvcmRVcGRhdGVkOiBmYWxzZSxcbiAgICAgIHRva2VuOiBudWxsLFxuICAgICAgc2VuZERpc2FibGVkOiBmYWxzZSxcbiAgICAgIHJlc2V0VG9rZW46ICcnLFxuICAgIH1cbiAgfSxcbiAgY29tcHV0ZWQ6IHtcbiAgICBmaWVsZHMoKSB7XG4gICAgICByZXR1cm4gW3tcbiAgICAgICAgbmFtZTogJ2N1cnJlbnRQYXNzd29yZCcsXG4gICAgICAgIHZhbHVlOiAnJyxcbiAgICAgICAgbGFiZWw6IHRoaXMubG9jKCdjdXJyZW50UGFzc3dvcmQnKSxcbiAgICAgICAgdHlwZTogJ3Bhc3N3b3JkJ1xuICAgICAgfSwge1xuICAgICAgICBuYW1lOiAnbmV3UGFzc3dvcmQnLFxuICAgICAgICB2YWx1ZTogJycsXG4gICAgICAgIGxhYmVsOiB0aGlzLmxvYygnbmV3UGFzc3dvcmQnKSxcbiAgICAgICAgdHlwZTogJ3Bhc3N3b3JkLXN0cmVuZ3RoJyxcbiAgICAgIH0sIHtcbiAgICAgICAgbmFtZTogJ25ld1Bhc3N3b3JkQ29uZmlybScsXG4gICAgICAgIHZhbHVlOiAnJyxcbiAgICAgICAgbGFiZWw6IHRoaXMubG9jKCduZXdQYXNzd29yZEFnYWluJyksXG4gICAgICAgIHR5cGU6ICdwYXNzd29yZCdcbiAgICAgIH1dO1xuICAgIH0sXG4gIH0sXG4gIG1ldGhvZHM6IHtcbiAgICBhc3luYyBzZW5kKCkge1xuICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG5cbiAgICAgIHRoaXMuc2VuZERpc2FibGVkID0gdHJ1ZTtcblxuICAgICAgcmV0dXJuIHRoaXMuJGFwaS5jaGFuZ2VQYXNzd29yZCh7XG4gICAgICAgIGN1cnJlbnRQYXNzd29yZDogdGhpcy5mb3JtRGF0YS5jdXJyZW50UGFzc3dvcmQsXG4gICAgICAgIG5ld1Bhc3N3b3JkOiB0aGlzLmZvcm1EYXRhLm5ld1Bhc3N3b3JkLFxuICAgICAgICBuZXdQYXNzd29yZENvbmZpcm06IHRoaXMuZm9ybURhdGEubmV3UGFzc3dvcmRDb25maXJtXG4gICAgICB9KVxuICAgICAgLnRoZW4ocmVzID0+IHtcbiAgICAgICAgdGhpcy5zZW5kRGlzYWJsZWQgPSBmYWxzZTtcblxuICAgICAgICAvLyBFcnJvcnMgaW4gZm9ybVxuICAgICAgICBpZihyZXMuY29kZSA9PT0gNDAwKSB7XG4gICAgICAgICAgdGhpcy5mb3JtRXJyb3JzID0gcmVzLnJlc3VsdC5maWVsZHM7XG4gICAgICAgIH1cblxuICAgICAgICBpZihyZXMuY29kZSA9PT0gMjAwKSB7XG4gICAgICAgICAgdGhpcy5wYXNzd29yZFVwZGF0ZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn1cbjwvc2NyaXB0PlxuIiwiPHRlbXBsYXRlPlxuICA8dGhlLTEtY29sdW1uLWxheW91dD5cbiAgICA8ZGl2IHN0eWxlPVwiZmxvYXQ6IHJpZ2h0OyBtYXJnaW4tYm90dG9tOiAyMHB4XCI+XG4gICAgICA8c3Bhbj57e3RoaXMubG9jKCdyZWNvcmRzJyl9fTwvc3Bhbj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjdXN0b20tc2VsZWN0X19kcm9wZG93biBqcy1jdXN0b20tc2VsZWN0LWRyb3Bkb3duXCIgc3R5bGU9XCJ3aWR0aDogODBweDsgcG9zaXRpb246IHJlbGF0aXZlXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiY3VzdG9tLXNlbGVjdF9fdGV4dCBqcy1jdXN0b20tc2VsZWN0LXRleHRob2xkZXJcIj57e3NlbGVjdGVkVmFsdWV9fTwvc3Bhbj5cbiAgICAgICAgPHNlbGVjdCB2LW1vZGVsPVwic2VsZWN0ZWRcIiBAY2hhbmdlPVwiJHJlZnMudGFibGUuc2V0TGltaXQoJGV2ZW50LnRhcmdldC52YWx1ZSlcIiBjbGFzcz1cImZvcm1fX2ZpZWxkLXNlbGVjdCBqcy1jdXN0b20tc2VsZWN0IGZvcm1fX2ZpZWxkLXNlbGVjdC1jdXN0b20ganMtbGFuZy1zZWxlY3QgbGFuZ19zZWxlY3RcIj5cbiAgICAgICAgICA8b3B0aW9uIHYtYmluZDp0ZXh0PVwiMTBcIiB2YWx1ZT1cIjEwXCI+MTA8L29wdGlvbj5cbiAgICAgICAgICA8b3B0aW9uIHYtYmluZDp0ZXh0PVwiMjVcIiB2YWx1ZT1cIjI1XCI+MjU8L29wdGlvbj5cbiAgICAgICAgPC9zZWxlY3Q+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8di1jbGllbnQtdGFibGUgcmVmPVwidGFibGVcIiA6Y29sdW1ucz1cImNvbHVtbnNcIiA6ZGF0YT1cImZpbHRlcmVkRGF0YVwiIDpvcHRpb25zPVwib3B0aW9uc1wiPlxuICAgICAgPHJvdXRlci1saW5rIHNsb3Q9XCJuYW1lXCIgc2xvdC1zY29wZT1cInByb3BzXCIgOnRvPVwieyBuYW1lOiAnY29tcGFueScsIHBhcmFtczogeyBpZDogcHJvcHMucm93LmlkIH19XCI+e3twcm9wcy5yb3cubmFtZX19PC9yb3V0ZXItbGluaz5cbiAgICAgIDxkaXYgc2xvdD1cImNvbnRhY3RzXCIgc2xvdC1zY29wZT1cInByb3BzXCI+XG4gICAgICAgIDxkaXYgdi1mb3I9XCIoY29udGFjdE5hbWUsIGluZGV4KSBpbiBwcm9wcy5yb3cuY29udGFjdHNcIiB2LWJpbmQ6a2V5PVwiaW5kZXhcIj5cbiAgICAgICAgICB7e2NvbnRhY3ROYW1lfX1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L3YtY2xpZW50LXRhYmxlPlxuICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLS13aGl0ZVwiIHYtb246Y2xpY2s9XCJhZGRDb21wYW55XCI+e3tsb2MoJ2FkZENvbXBhbnknKX19PC9idXR0b24+XG4gICAgPG1vZGFsLWNvbXBhbnkgcmVmPVwiYWRkQ29tcGFueU1vZGFsXCIgOm1vZGFsLW1vZGU9XCInYWRkJ1wiPjwvbW9kYWwtY29tcGFueT5cbiAgPC90aGUtMS1jb2x1bW4tbGF5b3V0PlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cblxuaW1wb3J0IE1vZGFsQ29tcGFueSBmcm9tICcuL21vZGFsLWNvbXBhbnkudnVlJztcblxuZXhwb3J0IGRlZmF1bHQge1xuICBjb21wb25lbnRzOiB7XG4gICAgJ21vZGFsLWNvbXBhbnknOiBNb2RhbENvbXBhbnlcbiAgfSxcbiAgZGF0YTogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB7XG4gICAgICBzZWFyY2hUZXh0OiAnJyxcbiAgICAgIHNlYXJjaENvbHVtbnM6IFsnbmFtZScsICdjb250YWN0cycsICdjb3VudHJ5J10sXG4gICAgICBjb2x1bW5zOiBbJ25hbWUnLCAnY29udGFjdHMnLCAnY291bnRyeSddLFxuICAgICAgc29ydGFibGU6IFsnbmFtZScsICdjb250YWN0cycsICdjb3VudHJ5J10sXG4gICAgICBmaWx0ZXJhYmxlOiBbJ25hbWUnLCAnY29udGFjdHMnLCAnY291bnRyeSddLFxuICAgICAgc2VsZWN0ZWQ6ICcxMCdcbiAgICB9XG4gIH0sXG4gIGNvbXB1dGVkOiB7XG5cbiAgICBvcHRpb25zKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZmlsdGVyYWJsZTogZmFsc2UsXG4gICAgICAgIGhlYWRpbmdzOiB7XG4gICAgICAgICAgbmFtZTogdGhpcy5sb2MoJ25hbWUnKSxcbiAgICAgICAgICBjb250YWN0czogdGhpcy5sb2MoJ2NvbnRhY3RzJyksXG4gICAgICAgICAgY291bnRyeTogdGhpcy5sb2MoJ2NvdW50cnknKVxuICAgICAgICB9LFxuICAgICAgICB0ZXh0czoge1xuICAgICAgICAgICAgY291bnQ6IHRoaXMubG9jKCdwYWdpbmF0aW9uQ291bnQnKSxcbiAgICAgICAgICAgIGxpbWl0OiB0aGlzLmxvYygncmVjb3JkcycpLFxuICAgICAgICAgICAgbm9SZXN1bHRzOiB0aGlzLmxvYygnbm9NYXRjaGluZ1Jlc3VsdHMnKSxcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjb21wYW55RGF0YSgpIHtcbiAgICAgIGNvbnN0IGNvbXBhbmllcyA9IFtdO1xuICAgICAgdGhpcy4kc3RvcmUuZ2V0dGVycy5jaGlsZENvbXBhbmllcy5mb3JFYWNoKGNvbXBhbnkgPT4ge1xuICAgICAgICBjb21wYW5pZXMucHVzaCh7XG4gICAgICAgICAgbmFtZTogY29tcGFueS5uYW1lLFxuICAgICAgICAgIGlkOiBjb21wYW55LmlkLFxuICAgICAgICAgIGNvbnRhY3RzOiBjb21wYW55LnVzZXJzID8gY29tcGFueS51c2Vycy5tYXAodXNlciA9PiB7IHJldHVybiB1c2VyLmxhc3ROYW1lICsgJywgJyArIHVzZXIuZmlyc3ROYW1lIH0pIDogW10sXG4gICAgICAgICAgY291bnRyeTogY29tcGFueS5jb3VudHJ5ICE9IG51bGwgPyBjb21wYW55LmNvdW50cnkubmFtZSA6ICcnXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBjb21wYW5pZXM7XG4gICAgfSxcblxuICAgIGZpbHRlcmVkRGF0YSgpIHtcbiAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgICAgY29uc3Qgc2VhcmNoVGV4dCA9IHRoaXMuJHN0b3JlLnN0YXRlLnN1YmhlYWRlci5zZWFyY2hUZXh0OyAvLyBVc2Ugc3ViaGVhZGVyIHNlYXJjaCBpbnB1dCBmb3Igc2VhcmNoaW5nXG4gICAgICBjb25zdCBkYXRhID0gdGhpcy5jb21wYW55RGF0YTtcblxuICAgICAgaWYoc2VhcmNoVGV4dCkge1xuICAgICAgICBjb25zdCBzZWFyY2hSZWdFeCA9IG5ldyBSZWdFeHAoc2VhcmNoVGV4dCwgJ2knKVxuXG4gICAgICAgIHJldHVybiBkYXRhLmZpbHRlcihmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICAgIGZvcihsZXQgaT0wLCBsPXNlbGYuc2VhcmNoQ29sdW1ucy5sZW5ndGg7IGk8bDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBjb2x1bW4gPSBzZWxmLnNlYXJjaENvbHVtbnNbaV07XG5cbiAgICAgICAgICAgIGlmKHNlYXJjaFJlZ0V4LnRlc3QoaXRlbVtjb2x1bW5dKSkge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH0sXG4gICAgc2VsZWN0ZWRWYWx1ZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNlbGVjdGVkO1xuICAgIH1cbiAgfSxcbiAgbWV0aG9kczoge1xuICAgIGFkZENvbXBhbnkoKSB7XG4gICAgICB0aGlzLiRyZWZzLmFkZENvbXBhbnlNb2RhbC5zaG93KCk7XG4gICAgfVxuICB9LFxuICBtb3VudGVkOiBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy4kc3RvcmUuZGlzcGF0Y2goJ2dldENoaWxkQ29tcGFuaWVzJyk7XG5cbiAgICB0aGlzLiRzdG9yZS5jb21taXQoJ3NldFN1YmhlYWRlcicsIHtcbiAgICAgIHN1YnRpdGxlOiAnJyxcbiAgICAgIHRpdGxlOiB0aGlzLmxvYygnY29tcG9uZW50cy5jb21wYW5pZXMuc3ViaGVhZGVyVGl0bGUnKSxcbiAgICAgIGRlc2NyaXB0aW9uOiB0aGlzLmxvYygnY29tcG9uZW50cy5jb21wYW5pZXMuc3ViaGVhZGVyRGVzY3JpcHRpb24nKSxcbiAgICAgIHNlYXJjaEVuYWJsZWQ6IHRydWVcbiAgICB9KTtcbiAgfVxufVxuPC9zY3JpcHQ+XG5cbjxzdHlsZT5cbi5mYWRlLWVudGVyLWFjdGl2ZSwgLmZhZGUtbGVhdmUtYWN0aXZlIHtcbiAgdHJhbnNpdGlvbjogb3BhY2l0eSAuNXM7XG59XG4uZmFkZS1lbnRlciwgLmZhZGUtbGVhdmUtdG8gLyogLmZhZGUtbGVhdmUtYWN0aXZlIGJlbG93IHZlcnNpb24gMi4xLjggKi8ge1xuICBvcGFjaXR5OiAwO1xufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZT5cbiAgPHRoZS1zaWRlYmFyLWxheW91dD5cbiAgICA8ZGl2IHNsb3Q9XCJzaWRlYmFyLXRpdGxlXCI+e3tjb21wYW55Lm5hbWV9fTwvZGl2PlxuICAgIDxkaXYgc2xvdD1cInNpZGViYXJcIj5cbiAgICAgIDxwPnt7Y29tcGFueS5hZGRyZXNzfX08YnI+XG4gICAgICB7e2NvbXBhbnkucG9zdGFsQ29kZX19IHt7Y29tcGFueS5wb3N0T2ZmaWNlfX08YnI+XG4gICAgICB7e2NvbXBhbnkuY291bnRyeS5uYW1lfX08L3A+XG4gICAgICA8cD5cbiAgICAgICAge3tsb2MoJ2J1c2luZXNzSWQnKX19OiB7e2NvbXBhbnkuYnVzaW5lc3NJZH19PGJyPlxuICAgICAgICB7e2xvYygnY3VzdG9tZXJOdW1iZXInKX19OiB7e2NvbXBhbnkuY3VzdG9tZXJOdW1iZXJ9fVxuICAgICAgPC9wPlxuXG4gICAgICA8YnV0dG9uIHYtaWY9XCJjYW5FZGl0Q29tcGFueVwiIGNsYXNzPVwiYnRuIGJ0bi0td2hpdGVcIiB2LW9uOmNsaWNrPVwiZWRpdENvbXBhbnlcIj57e2xvYygnZWRpdENvbXBhbnknKX19PC9idXR0b24+XG4gICAgICA8YnV0dG9uIHYtaWY9XCJjYW5EZWxldGVDb21wYW55XCIgY2xhc3M9XCJidG4gYnRuLS13aGl0ZVwiIHYtb246Y2xpY2s9XCJkZWxldGVDb21wYW55XCI+e3tsb2MoJ2RlbGV0ZUNvbXBhbnknKX19PC9idXR0b24+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBzdHlsZT1cImZsb2F0OiByaWdodDsgbWFyZ2luLWJvdHRvbTogMjBweFwiPlxuICAgICAgPHNwYW4+e3t0aGlzLmxvYygncmVjb3JkcycpfX08L3NwYW4+XG4gICAgICA8ZGl2IGNsYXNzPVwiY3VzdG9tLXNlbGVjdF9fZHJvcGRvd24ganMtY3VzdG9tLXNlbGVjdC1kcm9wZG93blwiIHN0eWxlPVwid2lkdGg6IDgwcHg7IHBvc2l0aW9uOiByZWxhdGl2ZVwiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImN1c3RvbS1zZWxlY3RfX3RleHQganMtY3VzdG9tLXNlbGVjdC10ZXh0aG9sZGVyXCI+e3tzZWxlY3RlZFZhbHVlfX08L3NwYW4+XG4gICAgICAgIDxzZWxlY3Qgdi1tb2RlbD1cInNlbGVjdGVkXCIgQGNoYW5nZT1cIiRyZWZzLnRhYmxlLnNldExpbWl0KCRldmVudC50YXJnZXQudmFsdWUpXCIgY2xhc3M9XCJmb3JtX19maWVsZC1zZWxlY3QganMtY3VzdG9tLXNlbGVjdCBmb3JtX19maWVsZC1zZWxlY3QtY3VzdG9tIGpzLWxhbmctc2VsZWN0IGxhbmdfc2VsZWN0XCI+XG4gICAgICAgICAgPG9wdGlvbiB2LWJpbmQ6dGV4dD1cIjEwXCIgdmFsdWU9XCIxMFwiPjEwPC9vcHRpb24+XG4gICAgICAgICAgPG9wdGlvbiB2LWJpbmQ6dGV4dD1cIjI1XCIgdmFsdWU9XCIyNVwiPjI1PC9vcHRpb24+XG4gICAgICAgIDwvc2VsZWN0PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPHYtY2xpZW50LXRhYmxlIHJlZj1cInRhYmxlXCIgOmNvbHVtbnM9XCJjb2x1bW5zXCIgOmRhdGE9XCJmaWx0ZXJlZERhdGFcIiA6b3B0aW9ucz1cIm9wdGlvbnNcIj5cbiAgICAgIDxkaXYgc2xvdD1cIm5hbWVcIiBzbG90LXNjb3BlPVwicHJvcHNcIj57e3Byb3BzLnJvdy5sYXN0TmFtZX19LCB7e3Byb3BzLnJvdy5maXJzdE5hbWV9fTwvZGl2PlxuICAgICAgPGEgc2xvdD1cInVzZXJuYW1lXCIgOmhyZWY9XCJnZXRFbWFpbExpbmsocHJvcHMucm93LnVzZXJuYW1lKVwiIHNsb3Qtc2NvcGU9XCJwcm9wc1wiPnt7cHJvcHMucm93LnVzZXJuYW1lfX08L2E+XG4gICAgICA8YSBzbG90PVwicGhvbmVcIiA6aHJlZj1cImdldFRlbExpbmsocHJvcHMucm93LnBob25lKVwiIHNsb3Qtc2NvcGU9XCJwcm9wc1wiPnt7cHJvcHMucm93LnBob25lfX08L2E+XG4gICAgICA8c3BhbiBzbG90PVwicm9sZVwiIHNsb3Qtc2NvcGU9XCJwcm9wc1wiPnt7cHJvcHMucm93LnRyYW5zbGF0ZWRSb2xlfX08L3NwYW4+XG4gICAgICA8ZGl2IHNsb3Q9XCJhY3Rpb25zXCIgc2xvdC1zY29wZT1cInByb3BzXCIgdi1pZj1cImNhbkVkaXRVc2Vyc1wiPlxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuXCIgdi1vbjpjbGljaz1cImVkaXRVc2VyKHByb3BzLnJvdylcIj57e2xvYygnZWRpdFVzZXInKX19PC9idXR0b24+XG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJidG5cIiB2LWlmPVwiY2FuRGVsZXRlVXNlcihwcm9wcy5yb3cpXCIgdi1vbjpjbGljaz1cImRlbGV0ZVVzZXIocHJvcHMucm93KVwiPnt7bG9jKCdkZWxldGVVc2VyJyl9fTwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC92LWNsaWVudC10YWJsZT5cbiAgICA8YnV0dG9uIHYtaWY9XCJjYW5BZGRVc2VyXCIgY2xhc3M9XCJidG4gYnRuLS13aGl0ZVwiIHYtb246Y2xpY2s9XCJhZGRVc2VyXCI+e3tsb2MoJ2FkZFVzZXInKX19PC9idXR0b24+XG4gICAgPG1vZGFsLWNvbXBhbnkgcmVmPVwiY29tcGFueU1vZGFsXCIgOm1vZGFsLW1vZGU9XCInZWRpdCdcIiA6bW9kYWwtZGF0YT1cImNvbXBhbnlcIj48L21vZGFsLWNvbXBhbnk+XG4gICAgPG1vZGFsLXVzZXIgcmVmPVwiYWRkVXNlck1vZGFsXCIgOm1vZGFsLW1vZGU9XCInYWRkJ1wiIDptb2RhbC1kYXRhPVwidXNlckluaXREYXRhXCI+PC9tb2RhbC11c2VyPlxuICAgIDxtb2RhbC11c2VyIHJlZj1cImVkaXRVc2VyTW9kYWxcIiA6bW9kYWwtbW9kZT1cIidlZGl0J1wiIDptb2RhbC1kYXRhPVwidXNlckVkaXREYXRhXCI+PC9tb2RhbC11c2VyPlxuICA8L3RoZS1zaWRlYmFyLWxheW91dD5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5cbmltcG9ydCBNb2RhbENvbXBhbnkgZnJvbSAnLi9tb2RhbC1jb21wYW55LnZ1ZSc7XG5pbXBvcnQgTW9kYWxVc2VyIGZyb20gJy4vbW9kYWwtdXNlci52dWUnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGNvbXBvbmVudHM6IHtcbiAgICAnbW9kYWwtY29tcGFueSc6IE1vZGFsQ29tcGFueSxcbiAgICAnbW9kYWwtdXNlcic6IE1vZGFsVXNlclxuICB9LFxuICBkYXRhOiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNlYXJjaFRleHQ6ICcnLFxuICAgICAgc2VhcmNoQ29sdW1uczogWydmaXJzdE5hbWUnLCAnbGFzdE5hbWUnLCAndXNlcm5hbWUnLCAncGhvbmUnLCAncm9sZSddLFxuICAgICAgdGVzdGluZzogJ2plZScsXG4gICAgICBjb2x1bW5zOiBbJ25hbWUnLCAndXNlcm5hbWUnLCAncGhvbmUnLCAncm9sZScsICdhY3Rpb25zJ10sXG4gICAgICBzb3J0YWJsZTogWyduYW1lJywgJ3VzZXJuYW1lJywgJ3Bob25lJywgJ3JvbGUnXSxcbiAgICAgIGZpbHRlcmFibGU6IFsnbmFtZScsICd1c2VybmFtZScsICdwaG9uZScsICdyb2xlJ10sXG4gICAgICB1c2VyRWRpdERhdGE6IHt9LFxuICAgICAgaXNPd25Db21wYW55OiBmYWxzZSxcbiAgICAgIGNvbXBhbnlJZDogbnVsbCxcbiAgICAgIHNlbGVjdGVkOiAnMTAnXG4gICAgfVxuICB9LFxuICBjb21wdXRlZDoge1xuICAgIG9wdGlvbnMoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBmaWx0ZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgaGVhZGluZ3M6IHtcbiAgICAgICAgICBuYW1lOiB0aGlzLmxvYygnbmFtZScpLFxuICAgICAgICAgIHVzZXJuYW1lOiB0aGlzLmxvYygnZW1haWwnKSxcbiAgICAgICAgICBwaG9uZTogdGhpcy5sb2MoJ3Bob25lJyksXG4gICAgICAgICAgcm9sZTogdGhpcy5sb2MoJ3JvbGUnKVxuICAgICAgICB9LFxuICAgICAgICB0ZXh0czoge1xuICAgICAgICAgICAgY291bnQ6IHRoaXMubG9jKCdwYWdpbmF0aW9uQ291bnQnKSxcbiAgICAgICAgICAgIGxpbWl0OiB0aGlzLmxvYygncmVjb3JkcycpLFxuICAgICAgICAgICAgbm9SZXN1bHRzOiB0aGlzLmxvYygnbm9NYXRjaGluZ1Jlc3VsdHMnKSxcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9LFxuICAgIGNvbXBhbnkoKSB7XG4gICAgICBmb3IobGV0IGk9MCwgbD10aGlzLiRzdG9yZS5zdGF0ZS5jb21wYW5pZXMubGVuZ3RoOyBpPGw7IGkrKykge1xuICAgICAgICBpZih0aGlzLiRzdG9yZS5zdGF0ZS5jb21wYW5pZXNbaV0uaWQgPT09IHRoaXMuY29tcGFueUlkKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuJHN0b3JlLnN0YXRlLmNvbXBhbmllc1tpXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY291bnRyeToge31cbiAgICAgIH1cbiAgICB9LFxuICAgIGNhbkVkaXRDb21wYW55KCkge1xuICAgICAgLy8gSWYgdXNlciBoYXMgYWRtaW4gcm9sZVxuICAgICAgcmV0dXJuIHRoaXMuJHVzZXJSaWdodHMuaGFzUmlnaHQoIHdpbmRvdy5SSUdIVFMuQ0xJRU5UX0VESVRfQ09NUEFOWSwgdGhpcy4kc3RvcmUuc3RhdGUudXNlci5yb2xlICk7XG4gICAgfSxcbiAgICBjYW5BZGRVc2VyKCkge1xuICAgICAgLy8gSWYgdXNlciBoYXMgYWRtaW4gcm9sZVxuXG4gICAgICBpZih0aGlzLmNvbXBhbnkudHlwZSA9PSAnaW1wb3J0ZXInKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLiR1c2VyUmlnaHRzLmhhc1JpZ2h0KCB3aW5kb3cuUklHSFRTLkNMSUVOVF9BRERfVVNFUlNfQ09NUEFOWSwgdGhpcy4kc3RvcmUuc3RhdGUudXNlci5yb2xlICk7XG4gICAgICB9XG4gICAgfSxcbiAgICBjYW5EZWxldGVDb21wYW55KCkge1xuXG4gICAgICAvLyBZb3UgY2FuIG5vdCBkZWxldGUgb3duIGNvbXBhbnlcbiAgICAgIGlmKHRoaXMuY29tcGFueUlkID09PSB0aGlzLiRzdG9yZS5zdGF0ZS51c2VyLmNvbXBhbnkuaWQpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICAgLy8gSWYgdXNlciBoYXMgYWRtaW4gcm9sZVxuICAgICAgaWYodGhpcy4kdXNlclJpZ2h0cy5oYXNSaWdodCggd2luZG93LlJJR0hUUy5DTElFTlRfREVMRVRFX0NPTVBBTlksIHRoaXMuJHN0b3JlLnN0YXRlLnVzZXIucm9sZSApICYmICF0aGlzLmNvbXBhbnlVc2Vycy5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9LFxuICAgIGNhbkVkaXRVc2VycygpIHtcbiAgICAgIHN3aXRjaCh0aGlzLmNvbXBhbnkudHlwZSkge1xuICAgICAgICBjYXNlICdyZXRhaWxlcic6XG4gICAgICAgICAgcmV0dXJuIHRoaXMuJHVzZXJSaWdodHMuaGFzUmlnaHQoIHdpbmRvdy5SSUdIVFMuQ0xJRU5UX0VESVRfUkVUQUlMRVJfQ09NUEFOWV9VU0VSUywgdGhpcy4kc3RvcmUuc3RhdGUudXNlci5yb2xlICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2ltcG9ydGVyJzpcbiAgICAgICAgICByZXR1cm4gdGhpcy4kdXNlclJpZ2h0cy5oYXNSaWdodCggd2luZG93LlJJR0hUUy5DTElFTlRfRURJVF9JTVBPUlRFUl9DT01QQU5ZX1VTRVJTLCB0aGlzLiRzdG9yZS5zdGF0ZS51c2VyLnJvbGUgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0sXG4gICAgY29tcGFueVVzZXJzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuJHN0b3JlLnN0YXRlLnVzZXJzLmZpbHRlcih1c2VyID0+IHtcbiAgICAgICAgcmV0dXJuIHVzZXIuY29tcGFueSA9PT0gdGhpcy5jb21wYW55LmlkO1xuICAgICAgfSk7XG4gICAgfSxcbiAgICB1c2VySW5pdERhdGEoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb21wYW55SWQ6IHRoaXMuY29tcGFueS5pZCxcbiAgICAgICAgY291bnRyeUNvZGU6IHRoaXMuY29tcGFueS5jb3VudHJ5ICYmIHRoaXMuY29tcGFueS5jb3VudHJ5LmNvdW50cnlDb2RlIHx8wqAnJyxcbiAgICAgICAgcGFnZUlkOiB0aGlzLiRyb3V0ZXIub3B0aW9ucy5wYWdlSWQgfHwgJydcbiAgICAgIH1cbiAgICB9LFxuICAgIGZpbHRlcmVkRGF0YTogZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgICBjb25zdCBzZWFyY2hUZXh0ID0gdGhpcy4kc3RvcmUuc3RhdGUuc3ViaGVhZGVyLnNlYXJjaFRleHQ7IC8vIFVzZSBzdWJoZWFkZXIgc2VhcmNoIGlucHV0IGZvciBzZWFyY2hpbmdcbiAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmNvbXBhbnlVc2Vyc1xuXG4gICAgICAvL2NyZWF0ZSB0cmFuc2xhdGVkIFJvbGUgPT0gdHJhbnNsYXRlZFJvbGVcbiAgICAgIGRhdGEubWFwKCBkYXRhID0+IHtcblxuICAgICAgICBsZXQgcm9sZUNhbWVsQ2FzZSA9IGRhdGEucm9sZS5yZXBsYWNlKC9eW1xcV19dKnxbXFxXX10qJC9nLCAnJykgLy8gUmVtb3ZlICFbYS16MC05XSBjaGFycyBmcm9tIGJlZ2lubmluZyBhbmQgZW5kIG9mIHN0cmluZywgZm9yIGV4YW1wbGUgXCJfX2Zvby0tXCIgPT4gXCJmb29cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoL1tfLVxcc10oW2EtejAtOV0pL2csIGZ1bmN0aW9uIChnKSB7IHJldHVybiBnWzFdLnRvVXBwZXJDYXNlKCk7IH0pIC8vIENhcGl0YWxpemUgbGV0dGVycyB0aGF0IGNvbWUgYWZ0ZXIgXCItXCIsIFwiX1wiIGFuZCBcIiBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoL1tfLVxcc10vZywgJycpOyAvLyBSZW1vdmUgYWxsIFwiLVwiLCBcIl9cIiBhbmQgXCIgXCJcbiAgICAgICAgZGF0YS50cmFuc2xhdGVkUm9sZSA9IHJvbGVDYW1lbENhc2UgIT0gJycgPyAgdGhpcy5sb2MoJ3VzZXIucm9sZXMuJyArIHJvbGVDYW1lbENhc2UgKSA6ICcnO1xuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgIH0pO1xuXG4gICAgICBpZihzZWFyY2hUZXh0KSB7XG4gICAgICAgIGNvbnN0IHNlYXJjaFJlZ0V4ID0gbmV3IFJlZ0V4cChzZWFyY2hUZXh0LCAnaScpXG5cbiAgICAgICAgcmV0dXJuIGRhdGEuZmlsdGVyKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgICAgZm9yKGxldCBpPTAsIGw9c2VsZi5zZWFyY2hDb2x1bW5zLmxlbmd0aDsgaTxsOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbHVtbiA9IHNlbGYuc2VhcmNoQ29sdW1uc1tpXTtcblxuICAgICAgICAgICAgaWYoc2VhcmNoUmVnRXgudGVzdChpdGVtW2NvbHVtbl0pKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfSxcbiAgICBzZWxlY3RlZFZhbHVlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWQ7XG4gICAgfVxuICB9LFxuICBtZXRob2RzOiB7XG4gICAgY2FuRGVsZXRlVXNlcih1c2VyRGF0YSkge1xuICAgICAgLy8gQ2FuIG5vdCBkZWxldGUgc2VsZlxuICAgICAgcmV0dXJuIHVzZXJEYXRhLmlkICE9PSB0aGlzLiRzdG9yZS5zdGF0ZS51c2VyLmluZm8uaWQ7XG4gICAgfSxcbiAgICBkZWxldGVDb21wYW55KCkge1xuICAgICAgY29uc3QgY29uZmlybU1lc3NhZ2UgPSB0aGlzLmxvYygnZGVsZXRlQ29uZmlybWF0aW9uJykucmVwbGFjZSgne3t0YXJnZXR9fScsIHRoaXMuY29tcGFueS5uYW1lKTtcblxuICAgICAgaWYoY29uZmlybShjb25maXJtTWVzc2FnZSkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJGFwaS5kZWxldGVDb21wYW55KHRoaXMuY29tcGFueS5pZCkudGhlbihyZXMgPT4ge1xuICAgICAgICAgIGlmKHJlcy5jb2RlID09PSAyMDApIHtcbiAgICAgICAgICAgIHRoaXMuJHN0b3JlLmNvbW1pdCgnZGVsZXRlQ29tcGFueScsIHRoaXMuY29tcGFueS5pZCk7XG4gICAgICAgICAgICB0aGlzLiRyb3V0ZXIucmVwbGFjZSh7bmFtZTogJ2hvbWUnfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGVkaXRDb21wYW55KCkge1xuICAgICAgdGhpcy4kcmVmcy5jb21wYW55TW9kYWwuc2hvdygpO1xuICAgIH0sXG4gICAgZWRpdFVzZXIodXNlckRhdGEpIHtcbiAgICAgIHRoaXMudXNlckVkaXREYXRhID0gdXNlckRhdGE7XG4gICAgICB0aGlzLiRyZWZzLmVkaXRVc2VyTW9kYWwuc2hvdygpO1xuICAgIH0sXG4gICAgYWRkVXNlcigpIHtcbiAgICAgIHRoaXMuJHJlZnMuYWRkVXNlck1vZGFsLnNob3coKTtcbiAgICB9LFxuICAgIGRlbGV0ZVVzZXIodXNlckRhdGEpIHtcbiAgICAgIGNvbnN0IGNvbmZpcm1NZXNzYWdlID0gdGhpcy5sb2MoJ2RlbGV0ZUNvbmZpcm1hdGlvbicpLnJlcGxhY2UoJ3t7dGFyZ2V0fX0nLCB1c2VyRGF0YS5sYXN0TmFtZSArICcsICcgKyB1c2VyRGF0YS5maXJzdE5hbWUpXG5cbiAgICAgIGlmKGNvbmZpcm0oY29uZmlybU1lc3NhZ2UpKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiRhcGkuZGVsZXRlVXNlcih1c2VyRGF0YS5pZCkudGhlbihyZXMgPT4ge1xuICAgICAgICAgIGlmKHJlcy5jb2RlID09PSAyMDApIHtcbiAgICAgICAgICAgIHRoaXMuJHN0b3JlLmNvbW1pdCgnZGVsZXRlVXNlcicsIHVzZXJEYXRhLmlkKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0sXG4gICAgZ2V0RW1haWxMaW5rKGVtYWlsKSB7XG4gICAgICByZXR1cm4gJ21haWx0bzonICsgZW1haWw7XG4gICAgfSxcbiAgICBnZXRUZWxMaW5rKHBob25lKSB7XG4gICAgICByZXR1cm4gJ3RlbDonICsgcGhvbmU7XG4gICAgfVxuICB9LFxuICBtb3VudGVkOiBmdW5jdGlvbiAoKSB7XG5cbiAgICAvLyBDaGVjayBpZiB3ZSBoYXZlIHBhcmFtIC9jb21wYW55LzppZCBhbmQgdXNlIHRoYXQgZWxzZSB1c2UgbG9nZ2VkIGluIHVzZXIncyBjb21wYW55IGFzIGRlZmF1bHRcbiAgICB0aGlzLmNvbXBhbnlJZCA9IHRoaXMuJHJvdXRlLnBhcmFtcy5pZCB8fMKgdGhpcy4kc3RvcmUuc3RhdGUudXNlci5jb21wYW55LmlkO1xuICAgIGlmKCF0aGlzLiRyb3V0ZS5wYXJhbXMuaWQpIHtcbiAgICAgIHRoaXMuaXNPd25Db21wYW55ID0gdHJ1ZTtcbiAgICB9XG5cbiAgICB0aGlzLiRzdG9yZS5kaXNwYXRjaCgnZ2V0Q29tcGFueScsIHRoaXMuY29tcGFueUlkKTtcbiAgICB0aGlzLiRzdG9yZS5kaXNwYXRjaCgnZ2V0Q29tcGFueVVzZXJzJywgdGhpcy5jb21wYW55SWQpO1xuXG4gICAgdGhpcy4kc3RvcmUuY29tbWl0KCdzZXRTdWJoZWFkZXInLCB7XG4gICAgICB0aXRsZTogJycsXG4gICAgICBkZXNjcmlwdGlvbjogJycsXG4gICAgICBzZWFyY2hFbmFibGVkOiB0cnVlXG4gICAgfSk7XG4gIH1cbn1cbjwvc2NyaXB0PlxuXG48c3R5bGU+XG48L3N0eWxlPlxuIiwiXG48dGVtcGxhdGU+XG4gIDx0aGUtMS1jb2x1bW4tbGF5b3V0IHYtaWY9XCJjb21wbGFpbnRcIj5cbiAgICA8aDM+e3tsb2MoJ3N0YXR1cycpfX06IHt7Y29tcGxhaW50LnN0YXR1cy5uYW1lfX08L2gzPlxuICAgIDxwPjxzdHJvbmc+e3tsb2MoJ2NvbXBsYWludElkJyl9fTwvc3Ryb25nPjoge3tjb21wbGFpbnQudXVpZH19PC9wPlxuICAgIDxwPlxuICAgICAgPHN0cm9uZz57e2xvYygnc2VyaWFsTnVtYmVyJyl9fTwvc3Ryb25nPjogPHJvdXRlci1saW5rIDp0bz1cInsgbmFtZTogJ2N1c3RvbWVyLW1hY2hpbmUnLCBwYXJhbXM6IHsgc2VyaWFsTnVtYmVyOiBjb21wbGFpbnQuc2VyaWFsTnVtYmVyIH19XCI+e3tjb21wbGFpbnQuc2VyaWFsTnVtYmVyfX08L3JvdXRlci1saW5rPjxicj5cbiAgICAgIDxzdHJvbmc+e3tsb2MoJ2RlbGl2ZXJ5RGF0ZUNvbXBsYWludCcpfX08L3N0cm9uZz46IHt7Y29tcGxhaW50LmRlbGl2ZXJ5RGF0ZX19XG4gICAgPC9wPlxuICAgIDxkaXYgY2xhc3M9XCJib3ggbm8taW5uZXItbWFyZ2luXCIgdi1pZj1cImNvbXBsYWludC5jb21wZW5zYXRpb25cIj5cbiAgICAgIDxoMz57e2xvYygnY29tcGVuc2F0aW9uJyl9fTwvaDM+XG4gICAgICA8cCB2LWh0bWw9XCJjb21wZW5zYXRpb25IdG1sXCI+PC9wPlxuICAgIDwvZGl2PlxuICAgIDx2LWNvbXBsYWludC11c2VyLWluZm8gdi1pZj1cImNvbXBsYWludC51c2VyXCIgOnVzZXItZGF0YT1cImNvbXBsYWludC51c2VyXCIgOmNvbXBhbnktZGF0YT1cImNvbXBsYWludC5jb21wYW55XCI+PC92LWNvbXBsYWludC11c2VyLWluZm8+XG4gICAgPHAgdi1lbHNlPnt7bG9jKCd1c2VyTm90Rm91bmRFeHBsYW5hdGlvbicpfX08L3A+XG5cbiAgICA8aDM+e3tsb2MoJ2Zvcm1zLmxhYmVscy5jb21wbGFpbnREZXNjcmlwdGlvbicpfX06PC9oMz5cbiAgICA8ZGl2IHYtaHRtbD1cImRlc2NyaXB0aW9uSHRtbFwiPjwvZGl2PlxuXG5cbiAgICA8aDM+e3tsb2MoJ2Zvcm1zLmxhYmVscy5jb21wbGFpbnRBY2Nlc3NvcmllcycpfX06PC9oMz5cbiAgICA8ZGl2IHYtaWY9XCJjb21wbGFpbnQuYWNjZXNzb3JpZXNUZXh0XCIgdi1odG1sPVwiYWNjZXNzb3JpZXNIdG1sXCI+PC9kaXY+XG4gICAgPHYtZGF0YS1pdGVtcyB2LWVsc2UgOmVkaXQtbW9kZT1cImZhbHNlXCIgOmhpZGUtZW1wdHk9XCJhY2Nlc3Nvcmllc0RhdGEuaGlkZUVtcHR5XCIgOm11bHRpcGx5RmllbGQ9XCInYW1vdW50J1wiIDpzdW0tZmllbGQ9XCJhY2Nlc3Nvcmllc0RhdGEuc3VtRmllbGRcIiA6ZmllbGRzPVwiYWNjZXNzb3JpZXNEYXRhLmZpZWxkc1wiIDpkYXRhPVwiY29tcGxhaW50LmFjY2Vzc29yaWVzXCIgOmRpc3BsYXktb25seT1cInRydWVcIj48L3YtZGF0YS1pdGVtcz5cblxuICAgIDxoMz57e2xvYygnZm9ybXMubGFiZWxzLmNvbXBsYWludEpvYnMnKX19OjwvaDM+XG4gICAgPGRpdiB2LWlmPVwiY29tcGxhaW50LmpvYnNUZXh0XCIgdi1odG1sPVwiam9ic0h0bWxcIj48L2Rpdj5cbiAgICA8di1kYXRhLWl0ZW1zIHYtZWxzZSA6ZWRpdC1tb2RlPVwiZmFsc2VcIiA6aGlkZS1lbXB0eT1cInNlcnZpY2VzRGF0YS5oaWRlRW1wdHlcIiA6c3VtLWZpZWxkPVwic2VydmljZXNEYXRhLnN1bUZpZWxkXCIgOmZpZWxkcz1cInNlcnZpY2VzRGF0YS5maWVsZHNcIiA6ZGF0YT1cImNvbXBsYWludC5zZXJ2aWNlc1wiIDpkaXNwbGF5LW9ubHk9XCJ0cnVlXCI+PC92LWRhdGEtaXRlbXM+XG4gICAgPGRpdiB2LWlmPVwidG90YWxBbW91bnRcIj57e2xvYygnYWxsSW5Ub3RhbCcpfX06IDx2LWN1cnJlbmN5LWlucHV0IDpkaXNwbGF5LW9ubHk9XCJ0cnVlXCIgOnZhbHVlPVwidG90YWxBbW91bnRcIiA6ZGVjaW1hbC1jaGFyPVwiJywnXCIgPjwvdi1jdXJyZW5jeS1pbnB1dD48L2Rpdj5cblxuICAgIDxoMz57e2xvYygnZmlsZXMnKX19OjwvaDM+XG4gICAgPGRpdiB2LWlmPVwiY29tcGxhaW50LmZpbGVzLmxlbmd0aFwiPlxuICAgICAgPGRpdiAgdi1mb3I9XCJmaWxlIGluIGNvbXBsYWludC5maWxlc1wiIHYtYmluZDprZXk9XCJmaWxlLnVybFwiPjxhIDpocmVmPVwiZmlsZS51cmxcIiB0YXJnZXQ9XCJfYmxhbmtcIj57e2ZpbGUubmFtZX19PC9hPjwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxwIHYtZWxzZT57e2xvYygnbm9GaWxlcycpfX08L3A+XG5cbiAgICA8cCBjbGFzcz1cImQtcHJpbnQtbm9uZVwiPjxiciAvPjxhIGhyZWY9XCIjXCIgdi1vbjpjbGljaz1cInByaW50XCI+e3tsb2MoJ3ByaW50RG9jdW1lbnQnKX19PC9hPjwvcD5cbiAgPC90aGUtMS1jb2x1bW4tbGF5b3V0PlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cblxuaW1wb3J0IFZDb21wbGFpbnRVc2VySW5mbyBmcm9tICcuL3YtY29tcGxhaW50LXVzZXItaW5mby52dWUnO1xuaW1wb3J0IFZEYXRhSXRlbXMgZnJvbSAnLi92LWRhdGEtaXRlbXMudnVlJztcblxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAnVmlld0NvbXBsYWludCcsXG4gIGNvbXBvbmVudHM6IHtcbiAgICAndi1jb21wbGFpbnQtdXNlci1pbmZvJzogVkNvbXBsYWludFVzZXJJbmZvLFxuICAgICd2LWRhdGEtaXRlbXMnOiBWRGF0YUl0ZW1zXG4gIH0sXG4gIGRhdGE6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgY29tcGxhaW50SWQ6IG51bGxcbiAgICB9XG4gIH0sXG4gIGNvbXB1dGVkOiB7XG4gICAgam9ic0h0bWwoKSB7XG4gICAgICByZXR1cm4gdGhpcy50ZXh0VG9IdG1sKHRoaXMuY29tcGxhaW50LmpvYnNUZXh0KTtcbiAgICB9LFxuICAgIGFjY2Vzc29yaWVzSHRtbCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnRleHRUb0h0bWwodGhpcy5jb21wbGFpbnQuYWNjZXNzb3JpZXNUZXh0KTtcbiAgICB9LFxuICAgIGNvbXBlbnNhdGlvbkh0bWwoKSB7XG4gICAgICByZXR1cm4gdGhpcy50ZXh0VG9IdG1sKHRoaXMuY29tcGxhaW50LmNvbXBlbnNhdGlvbik7XG4gICAgfSxcbiAgICBkZXNjcmlwdGlvbkh0bWwoKSB7XG4gICAgICByZXR1cm4gdGhpcy50ZXh0VG9IdG1sKHRoaXMuY29tcGxhaW50LmRlc2NyaXB0aW9uKTtcbiAgICB9LFxuICAgIGNvbXBsYWludCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRzdG9yZS5zdGF0ZS5jb21wbGFpbnRzLmZpbHRlcihjb21wbGFpbnQgPT4gY29tcGxhaW50LnV1aWQgPT09IHRoaXMuY29tcGxhaW50SWQpWzBdO1xuICAgIH0sXG4gICAgYWNjZXNzb3JpZXNEYXRhKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3VtRmllbGQ6ICdwcmljZScsXG4gICAgICAgIGhpZGVFbXB0eTogdHJ1ZSxcbiAgICAgICAgdmFsdWU6IFtdLFxuICAgICAgICBmaWVsZHM6IFt7XG4gICAgICAgICAgbGFiZWw6IHRoaXMubG9jKCdjb21wbGFpbnRBY2Nlc3Nvcmllcy5uYW1lJyksXG4gICAgICAgICAgcGxhY2Vob2xkZXI6IHRoaXMubG9jKCdjb21wbGFpbnRBY2Nlc3Nvcmllcy5uYW1lJyksXG4gICAgICAgICAgdHlwZTogJ3RleHQnLFxuICAgICAgICAgIG5hbWU6ICduYW1lJ1xuICAgICAgICB9LCB7XG4gICAgICAgICAgbGFiZWw6IHRoaXMubG9jKCdjb21wbGFpbnRBY2Nlc3Nvcmllcy5pZCcpLFxuICAgICAgICAgIHBsYWNlaG9sZGVyOiB0aGlzLmxvYygnY29tcGxhaW50QWNjZXNzb3JpZXMuaWQnKSxcbiAgICAgICAgICB0eXBlOiAndGV4dCcsXG4gICAgICAgICAgbmFtZTogJ2lkJ1xuICAgICAgICB9LCB7XG4gICAgICAgICAgbGFiZWw6IHRoaXMubG9jKCdjb21wbGFpbnRBY2Nlc3Nvcmllcy5hbW91bnQnKSxcbiAgICAgICAgICBwbGFjZWhvbGRlcjogdGhpcy5sb2MoJ2NvbXBsYWludEFjY2Vzc29yaWVzLmFtb3VudCcpLFxuICAgICAgICAgIHR5cGU6ICdudW1iZXInLFxuICAgICAgICAgIG5hbWU6ICdhbW91bnQnXG4gICAgICAgIH0sIHtcbiAgICAgICAgICBsYWJlbDogdGhpcy5sb2MoJ2NvbXBsYWludEFjY2Vzc29yaWVzLnByaWNlJyksXG4gICAgICAgICAgcGxhY2Vob2xkZXI6IHRoaXMubG9jKCdjb21wbGFpbnRBY2Nlc3Nvcmllcy5wcmljZScpLFxuICAgICAgICAgIHR5cGU6ICdjdXJyZW5jeScsXG4gICAgICAgICAgbmFtZTogJ3ByaWNlJ1xuICAgICAgICB9XVxuICAgICAgfVxuICAgIH0sXG4gICAgc2VydmljZXNEYXRhKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3VtRmllbGQ6ICdwcmljZScsXG4gICAgICAgIGhpZGVFbXB0eTogdHJ1ZSxcbiAgICAgICAgdmFsdWU6IFtdLFxuICAgICAgICBmaWVsZHM6IFt7XG4gICAgICAgICAgbGFiZWw6IHRoaXMubG9jKCdjb21wbGFpbnRTZXJ2aWNlcy5uYW1lJyksXG4gICAgICAgICAgcGxhY2Vob2xkZXI6IHRoaXMubG9jKCdjb21wbGFpbnRTZXJ2aWNlcy5uYW1lJyksXG4gICAgICAgICAgdHlwZTogJ3RleHQnLFxuICAgICAgICAgIG5hbWU6ICduYW1lJ1xuICAgICAgICB9LCB7XG4gICAgICAgICAgbGFiZWw6IHRoaXMubG9jKCdjb21wbGFpbnRTZXJ2aWNlcy5ob3VycycpLFxuICAgICAgICAgIHBsYWNlaG9sZGVyOiB0aGlzLmxvYygnY29tcGxhaW50U2VydmljZXMuaG91cnMnKSxcbiAgICAgICAgICB0eXBlOiAnbnVtYmVyJyxcbiAgICAgICAgICBuYW1lOiAnaG91cnMnXG4gICAgICAgIH0sIHtcbiAgICAgICAgICBsYWJlbDogdGhpcy5sb2MoJ2NvbXBsYWludFNlcnZpY2VzLnByaWNlJyksXG4gICAgICAgICAgcGxhY2Vob2xkZXI6IHRoaXMubG9jKCdjb21wbGFpbnRTZXJ2aWNlcy5wcmljZScpLFxuICAgICAgICAgIHR5cGU6ICdjdXJyZW5jeScsXG4gICAgICAgICAgbmFtZTogJ3ByaWNlJ1xuICAgICAgICB9XVxuICAgICAgfVxuICAgIH0sXG4gICAgdG90YWxBbW91bnQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBzdW0gPSAwO1xuXG4gICAgICAvL2dvdHRhIGdldCBjb21wbGFpbnQgZGF0YVxuICAgICAgLy8gbGV0IGNvbXBsYWludCA9IHRoaXMuJHN0b3JlLnN0YXRlLmNvbXBsYWludHMuZmlsdGVyKGNvbXBsYWludCA9PiBjb21wbGFpbnQudXVpZCA9PT0gdGhpcy5jb21wbGFpbnRJZClbMF07XG5cbiAgICAgIC8vc3VtIG9mIGFjY2Vzc29yaWVzXG4gICAgICB0aGlzLmNvbXBsYWludC5hY2Nlc3Nvcmllcy5mb3JFYWNoKGUgPT4ge1xuICAgICAgICBzdW0gKz0gZS5hbW91bnQgKiBlLnByaWNlO1xuICAgICAgfSk7XG5cbiAgICAgIC8vc3VtIG9mIHNlcnZpY2VzXG4gICAgICB0aGlzLmNvbXBsYWludC5zZXJ2aWNlcy5mb3JFYWNoKGUgPT4ge1xuICAgICAgICAgc3VtICs9IGUuaG91cnMgKiBlLnByaWNlO1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBzdW1cbiAgICB9XG4gIH0sXG4gIG1ldGhvZHM6IHtcbiAgICB0ZXh0VG9IdG1sKHRleHQpIHtcbiAgICAgIGxldCBodG1sVGV4dCA9ICcnO1xuXG4gICAgICAvLyBTdHJpcCBcXHJcbiAgICAgIGNvbnN0IHN0cmlwcGVkID0gdGV4dC5yZXBsYWNlKC9cXHIvZywgJycpO1xuXG4gICAgICAvLyBTcGxpdCBpbnRvIHBhcmFncmFwaHNcbiAgICAgIGNvbnN0IHBhcmFncmFwaHMgPSBzdHJpcHBlZC5zcGxpdCgnXFxuXFxuJyk7XG5cbiAgICAgIHBhcmFncmFwaHMuZm9yRWFjaChwYXJhZ3JhcGggPT4ge1xuICAgICAgICBodG1sVGV4dCArPSAnPHA+JztcbiAgICAgICAgLy8gUmVwbGFjZSBzaW5nbGUgbGluZWZlZWRzIHdpdGggPGJyPlxuICAgICAgICBodG1sVGV4dCArPSBwYXJhZ3JhcGgucmVwbGFjZSgvXFxuL2csICc8YnI+Jyk7XG4gICAgICAgIGh0bWxUZXh0ICs9ICc8L3A+JztcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gaHRtbFRleHQ7XG4gICAgfSxcbiAgICBwcmludChlKSB7XG4gICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB3aW5kb3cucHJpbnQoKTtcbiAgICB9XG4gIH0sXG4gIG1vdW50ZWQoKSB7XG4gICAgLy8gQ2hlY2sgaWYgd2UgaGF2ZSBwYXJhbSAvY29tcGFueS86aWQgYW5kIHVzZSB0aGF0IGVsc2UgdXNlIGxvZ2dlZCBpbiB1c2VyJ3MgY29tcGFueSBhcyBkZWZhdWx0XG4gICAgdGhpcy5jb21wbGFpbnRJZCA9IHRoaXMuJHJvdXRlLnBhcmFtcy5pZFxuXG4gICAgdGhpcy4kc3RvcmUuZGlzcGF0Y2goJ2dldENvbXBsYWludCcsIHRoaXMuY29tcGxhaW50SWQpO1xuICB9XG59XG5cbjwvc2NyaXB0PlxuIiwiPHRlbXBsYXRlPlxuICA8dGhlLTEtY29sdW1uLWxheW91dD5cbiAgICA8ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXJcIj48YnV0dG9uIHYtb246Y2xpY2s9XCJhZGRDb21wbGFpbnRcIiBjbGFzcz1cImJ0biBidG4tLXdoaXRlXCI+e3tsb2MoJ2FkZENvbXBsYWludCcpfX08L2J1dHRvbj48L2Rpdj48YnIgLz5cbiAgICA8di1jbGllbnQtdGFibGUgOmNvbHVtbnM9XCJjb2x1bW5zXCIgOmRhdGE9XCJmaWx0ZXJlZERhdGFcIiA6b3B0aW9ucz1cIm9wdGlvbnNcIj5cbiAgICAgIDxyb3V0ZXItbGluayBzbG90PVwidXVpZFwiIHNsb3Qtc2NvcGU9XCJwcm9wc1wiIDp0bz1cInsgbmFtZTogJ2NvbXBsYWludCcsIHBhcmFtczogeyBpZDogcHJvcHMucm93LnV1aWQgfX1cIj57e3Byb3BzLnJvdy51dWlkfX08L3JvdXRlci1saW5rPlxuICAgICAgPHJvdXRlci1saW5rIHNsb3Q9XCJzZXJpYWxOdW1iZXJcIiBzbG90LXNjb3BlPVwicHJvcHNcIiA6dG89XCJ7IG5hbWU6ICdjdXN0b21lci1tYWNoaW5lJywgcGFyYW1zOiB7IHNlcmlhbE51bWJlcjogcHJvcHMucm93LnNlcmlhbE51bWJlciB9fVwiPnt7cHJvcHMucm93LnNlcmlhbE51bWJlcn19PC9yb3V0ZXItbGluaz5cbiAgICA8L3YtY2xpZW50LXRhYmxlPlxuICAgIDxtb2RhbC1jb21wbGFpbnQgcmVmPVwiYWRkQ29tcGxhaW50TW9kYWxcIiA6bW9kYWwtbW9kZT1cIidhZGQnXCI+PC9tb2RhbC1jb21wbGFpbnQ+XG4gIDwvdGhlLTEtY29sdW1uLWxheW91dD5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5cbmltcG9ydCBWRm9ybSBmcm9tICcuL3YtZm9ybS52dWUnO1xuaW1wb3J0IE1vZGFsQ29tcGxhaW50IGZyb20gJy4vbW9kYWwtY29tcGxhaW50LnZ1ZSc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbmFtZTogJ1ZpZXdDb21wbGFpbnRzJyxcbiAgY29tcG9uZW50czoge1xuICAgICdtb2RhbC1jb21wbGFpbnQnOiBNb2RhbENvbXBsYWludCxcbiAgICAndi1mb3JtJzogVkZvcm1cbiAgfSxcbiAgZGF0YTogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB7XG4gICAgICBmb3JtRGF0YToge30sXG4gICAgICBmb3JtRXJyb3JzOiB7fSxcbiAgICAgIHNlYXJjaFRleHQ6ICcnLFxuICAgICAgc2VhcmNoQ29sdW1uczogWyd1dWlkJywgJ3NlcmlhbE51bWJlcicsICdkYXRlQWRkZWQnLCAnc3RhdHVzJywgJ25hbWUnXSxcbiAgICAgIGNvbHVtbnM6IFsndXVpZCcsICdzZXJpYWxOdW1iZXInLCAnZGF0ZUFkZGVkJywgJ3N0YXR1cycsICduYW1lJ10sXG4gICAgICBzb3J0YWJsZTogWyd1dWlkJywgJ3NlcmlhbE51bWJlcicsICdkYXRlQWRkZWQnLCAnc3RhdHVzJywgJ25hbWUnXSxcbiAgICAgIGZpbHRlcmFibGU6IFsndXVpZCcsICdzZXJpYWxOdW1iZXInLCAnZGF0ZUFkZGVkJywgJ3N0YXR1cycsICduYW1lJ11cbiAgICB9XG4gIH0sXG4gIGNvbXB1dGVkOiB7XG4gICAgdGVzdEZpZWxkcygpIHtcbiAgICAgIHJldHVybiBbe1xuICAgICAgICBuYW1lOiAnZmlsZXMnLFxuICAgICAgICBtdWx0aXBsZTogdHJ1ZSxcbiAgICAgICAgdmFsdWU6IFtdLFxuICAgICAgICB0eXBlOiAnZmlsZSdcbiAgICAgIH1dXG4gICAgfSxcbiAgICBvcHRpb25zKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZmlsdGVyYWJsZTogZmFsc2UsXG4gICAgICAgIGhlYWRpbmdzOiB7XG4gICAgICAgICAgdXVpZDogdGhpcy5sb2MoJ2NvbXBsYWludElkJyksXG4gICAgICAgICAgc2VyaWFsTnVtYmVyOiB0aGlzLmxvYygnc2VyaWFsTnVtYmVyJyksXG4gICAgICAgICAgZGF0ZUFkZGVkOiB0aGlzLmxvYygnZGF0ZUFkZGVkQ29tcGxhaW50JyksXG4gICAgICAgICAgc3RhdHVzOiB0aGlzLmxvYygnc3RhdHVzJyksXG4gICAgICAgICAgbmFtZTogdGhpcy5sb2MoJ3JlY2xhbWF0ZWRCeScpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY29tcGxhaW50cygpIHtcbiAgICAgIHJldHVybiB0aGlzLiRzdG9yZS5zdGF0ZS5jb21wbGFpbnRzLm1hcChjb21wbGFpbnQgPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHV1aWQ6IGNvbXBsYWludC51dWlkLFxuICAgICAgICAgIHNlcmlhbE51bWJlcjogY29tcGxhaW50LnNlcmlhbE51bWJlcixcbiAgICAgICAgICBqb2JzVGV4dDogY29tcGxhaW50LmpvYnNUZXh0LFxuICAgICAgICAgIHN0YXR1czogY29tcGxhaW50LnN0YXR1cyAmJiBjb21wbGFpbnQuc3RhdHVzLm5hbWUsXG4gICAgICAgICAgZGF0ZUFkZGVkOiBjb21wbGFpbnQuZGF0ZUFkZGVkICYmIGNvbXBsYWludC5kYXRlQWRkZWQuZm9ybWF0dGVkLFxuICAgICAgICAgIG5hbWU6IGNvbXBsYWludC5uYW1lXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0sXG5cbiAgICBmaWx0ZXJlZERhdGEoKSB7XG4gICAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICAgIGNvbnN0IHNlYXJjaFRleHQgPSB0aGlzLiRzdG9yZS5zdGF0ZS5zdWJoZWFkZXIuc2VhcmNoVGV4dDsgLy8gVXNlIHN1YmhlYWRlciBzZWFyY2ggaW5wdXQgZm9yIHNlYXJjaGluZ1xuICAgICAgY29uc3QgZGF0YSA9IHRoaXMuY29tcGxhaW50cztcblxuICAgICAgaWYoc2VhcmNoVGV4dCkge1xuICAgICAgICBjb25zdCBzZWFyY2hSZWdFeCA9IG5ldyBSZWdFeHAoc2VhcmNoVGV4dCwgJ2knKVxuXG4gICAgICAgIHJldHVybiBkYXRhLmZpbHRlcihmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICAgIGZvcihsZXQgaT0wLCBsPXNlbGYuc2VhcmNoQ29sdW1ucy5sZW5ndGg7IGk8bDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBjb2x1bW4gPSBzZWxmLnNlYXJjaENvbHVtbnNbaV07XG5cbiAgICAgICAgICAgIGlmKHNlYXJjaFJlZ0V4LnRlc3QoaXRlbVtjb2x1bW5dKSkge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cbiAgfSxcbiAgbWV0aG9kczoge1xuICAgIGFkZENvbXBsYWludCgpIHtcbiAgICAgIHRoaXMuJHJlZnMuYWRkQ29tcGxhaW50TW9kYWwuc2hvdygpO1xuICAgIH1cbiAgfSxcbiAgbW91bnRlZDogZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuJHN0b3JlLmRpc3BhdGNoKCdnZXRDb21wbGFpbnRzJyk7XG5cbiAgICB0aGlzLiRzdG9yZS5jb21taXQoJ3NldFN1YmhlYWRlcicsIHtcbiAgICAgIHN1YnRpdGxlOiAnJyxcbiAgICAgIHRpdGxlOiB0aGlzLmxvYygnY29tcG9uZW50cy5jb21wbGFpbnRzLnN1YmhlYWRlclRpdGxlJyksXG4gICAgICBkZXNjcmlwdGlvbjogJycsXG4gICAgICBzZWFyY2hFbmFibGVkOiB0cnVlXG4gICAgfSk7XG4gIH1cbn1cbjwvc2NyaXB0PlxuIiwiPHRlbXBsYXRlPlxuICA8dGhlLTEtY29sdW1uLWxheW91dD5cbiAgICA8aW1nIHYtaWY9XCJtYWNoaW5lLm1hY2hpbmVJbWFnZVwiIDpzcmM9XCJtYWNoaW5lLm1hY2hpbmVJbWFnZVwiPlxuICAgIDxoMj57e2xvYygnY29tcG9uZW50cy5jdXN0b21lck1hY2hpbmUubWFjaGluZUluZm9ybWF0aW9uJyl9fTwvaDI+XG4gICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC14cy0xMiBjb2wtbWQtOFwiPlxuICAgICAgICA8dGFibGUgY2xhc3M9XCJ0YWJsZVwiPlxuICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cInRhYmxlX190ZCBoYXMtYmdcIj57e2xvYygnc2VyaWFsTnVtYmVyJyl9fTo8L3RkPlxuICAgICAgICAgICAgPHRkPnt7bWFjaGluZS5zZXJpYWxOdW1iZXJ9fTwvdGQ+XG4gICAgICAgICAgPC90cj5cbiAgICAgICAgICA8dHIgdi1pZj1cIm1hY2hpbmUuZGVsaXZlcnlEYXRlV2FycmFudHkgJiYgbWFjaGluZS5kZWxpdmVyeURhdGVXYXJyYW50eS5mb3JtYXR0ZWRcIj5cbiAgICAgICAgICAgIDwhLS0gPHRkIGNsYXNzPVwidGFibGVfX3RkIGhhcy1iZ1wiPnt7bG9jKCdjdXN0b21lck1hY2hpbmVXYXJyYW50eVJlZ2lzdGVyZWQnKX19OjwvdGQ+IC0tPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwidGFibGVfX3RkIGhhcy1iZ1wiPnt7bG9jKCdkZWxpdmVyeURhdGVTb2xkJyl9fTo8L3RkPlxuICAgICAgICAgICAgPHRkPnt7bWFjaGluZS5kZWxpdmVyeURhdGVXYXJyYW50eS5mb3JtYXR0ZWR9fTwvdGQ+XG4gICAgICAgICAgPC90cj5cbiAgICAgICAgICA8dHIgdi1pZj1cIm1hY2hpbmUuZGVsaXZlcnlEYXRlICYmIG1hY2hpbmUuZGVsaXZlcnlEYXRlLmZvcm1hdHRlZFwiPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwidGFibGVfX3RkIGhhcy1iZ1wiPnt7bG9jKCdjdXN0b21lck1hY2hpbmVXYXJyYW50eVJlZ2lzdGVyZWQnKX19OjwvdGQ+XG4gICAgICAgICAgICA8dGQ+e3ttYWNoaW5lLmRlbGl2ZXJ5RGF0ZS5mb3JtYXR0ZWR9fTwvdGQ+XG4gICAgICAgICAgPC90cj5cbiAgICAgICAgICA8dHIgdi1pZj1cIm1hY2hpbmUuZGF0ZUFkZGVkICYmIG1hY2hpbmUuZGF0ZUFkZGVkLmZvcm1hdHRlZFwiPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwidGFibGVfX3RkIGhhcy1iZ1wiPnt7bG9jKCdkYXRlQWRkZWRNYWNoaW5lJyl9fTo8L3RkPlxuICAgICAgICAgICAgPHRkPnt7bWFjaGluZS5kYXRlQWRkZWQuZm9ybWF0dGVkfX08L3RkPlxuICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgPHRyIHYtaWY9XCJtYWNoaW5lLm1hbnVmYWN0dXJpbmdEYXRlICYmIG1hY2hpbmUubWFudWZhY3R1cmluZ0RhdGUuZm9ybWF0dGVkXCI+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJ0YWJsZV9fdGQgaGFzLWJnXCI+e3tsb2MoJ21hbnVmYWN0dXJpbmdEYXRlJyl9fTo8L3RkPlxuICAgICAgICAgICAgPHRkPnt7bWFjaGluZS5tYW51ZmFjdHVyaW5nRGF0ZS5mb3JtYXR0ZWR9fTwvdGQ+XG4gICAgICAgICAgPC90cj5cbiAgICAgICAgICA8dHI+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJ0YWJsZV9fdGQgaGFzLWJnXCI+e3tsb2MoJ2NvbXBhbnknKX19OjwvdGQ+XG4gICAgICAgICAgICA8dGQgdi1pZj1cIm1hY2hpbmUucmV0YWlsX2N1c3RvbWVyX25hbWVcIj57e21hY2hpbmUucmV0YWlsX2N1c3RvbWVyX25hbWV9fTwvdGQ+XG4gICAgICAgICAgICA8dGQgdi1lbHNlPnt7bWFjaGluZS5jb21wYW55TmFtZX19PC90ZD5cbiAgICAgICAgICA8L3RyPlxuICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cInRhYmxlX190ZCBoYXMtYmdcIj57e2xvYygnY291bnRyeScpfX06PC90ZD5cbiAgICAgICAgICAgIDx0ZD57e21hY2hpbmUuY291bnRyeS5uYW1lfX08L3RkPlxuICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgPHRyPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwidGFibGVfX3RkIGhhcy1iZyB0ZFwiPnt7bG9jKCdhZGRpdGlvbmFsSW5mb3JtYXRpb24nKX19OjwvdGQ+XG4gICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW5cIj5cbiAgICAgICAgICAgICAgICA8ZGl2IHYtaWY9XCIhZWRpdG9yQWN0aXZhdGVkXCIgY2xhc3M9XCJmbGV4LWZpbGxcIj5cbiAgICAgICAgICAgICAgICAgIDxwcmU+e3ttYWNoaW5lLmFkZGl0aW9uYWxJbmZvcm1hdGlvbn19PC9wcmU+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiB2LWVsc2UgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gZmxleC1maWxsXCI+XG4gICAgICAgICAgICAgICAgICA8dGV4dGFyZWFcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtYi0xIGZvcm0tY29udHJvbCB0ZXh0YXJlYV9fZml0LWNvbnRlbnRcIlxuICAgICAgICAgICAgICAgICAgICBpZD1cInRleHRhcmVhXCJcbiAgICAgICAgICAgICAgICAgICAgOnZhbHVlPVwiYWRkaXRpb25hbEluZm9ybWF0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgQGlucHV0PVwiaGFuZGxlSW5wdXRcIj5cbiAgICAgICAgICAgICAgICAgIDwvdGV4dGFyZWE+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4XCI+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gOmNsYXNzPVwic2F2ZUJ0blZpc2liaWxlID8gJ3Zpc2libGUnIDogJ2ludmlzaWJsZSdcIiA6ZGlzYWJsZWQ9XCJzYXZlRGlzYWJsZWRcIiBAY2xpY2s9XCJzYXZlXCIgY2xhc3M9XCJidG4gYnRuLS13aGl0ZSBzYXZlLS1idG5cIj5cbiAgICAgICAgICAgICAgICAgICAgICB7e2xvYygnc2F2ZScpfX1cbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgOmNsYXNzPVwic2hvd1NhdmVNZXNzYWdlID8gJ3Zpc2libGUnIDogJ2ludmlzaWJsZSdcIiBjbGFzcz1cInNhdmUtLW1lc3NhZ2VcIj5cbiAgICAgICAgICAgICAgICAgICAgICB7e3NhdmVkU3VjY2Vzc2Z1bGx5ID8gbG9jKCdzYXZlZFN1Y2Nlc3NmdWxseScpIDogbG9jKCdmYWlsZWRUb1NhdmUnKX19XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHRhcmVhX19lZGl0LWljb25cIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIHYtaWY9XCJlZGl0TWFjaGluZUluZm9QZXJtaXNzaW9uXCIgY2xhc3M9XCJpY29uIGljb24tLXBlbmNpbC0tYmxhY2tcIiByb2xlPVwiYnV0dG9uXCIgQGNsaWNrPVwiYWN0aXZhdGVFZGl0b3JcIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICA8L3RyPlxuICAgICAgICA8L3RhYmxlPlxuICAgICAgICA8YnIgLz5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC14cy0xMiBjb2wtbWQtNFwiPlxuICAgICAgICA8YSB2LWlmPVwibWFjaGluZS5tYWNoaW5lUGFnZVwiIGNsYXNzPVwiYnRuIGJ0bi0td2hpdGVcIiA6aHJlZj1cIm1hY2hpbmUubWFjaGluZVBhZ2VcIiB0YXJnZXQ9XCJfYmxhbmtcIj5cbiAgICAgICAgICB7e2xvYygnY29tcG9uZW50cy5jdXN0b21lck1hY2hpbmUubWFjaGluZVByZXNlbnRhdGlvbicpfX1cbiAgICAgICAgPC9hPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiB2LWlmPVwib3duZXJQZXJtaXNzaW9uXCIgY2xhc3M9XCJvd25lci1jaGFuZ2VcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC14cy0xMiBjb2wtbWQtNFwiPlxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLS13aGl0ZVwiIHYtb246Y2xpY2s9XCJtYWNoaW5lT3duZXJVcGRhdGVkID0gZmFsc2U7IG93bmVyRm9ybSA9ICFvd25lckZvcm07XCIgdGFyZ2V0PVwiX2JsYW5rXCI+XG4gICAgICAgICAgICB7e2xvYygnY29tcG9uZW50cy5jdXN0b21lck1hY2hpbmUubWFjaGluZU93bmVyc2hpcCcpfX1cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC14cy0xMiBjb2wtbWQtNlwiPlxuICAgICAgICAgIDxkaXYgdi1pZj1cIm1hY2hpbmVPd25lclVwZGF0ZWRcIiBjbGFzcz1cInVwZGF0ZWRcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdWNjZXNzXCIgPlxuICAgICAgICAgICAgICB7e2xvYygnY29tcG9uZW50cy5jdXN0b21lck1hY2hpbmUubWFjaGluZU93bmVyVXBkYXRlZCcpfX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgdi1lbHNlIGNsYXNzPVwiY29sLXhzLTEyIGNvbC1tZC0xMlwiPlxuICAgICAgICAgICAgPGRpdiB2LWlmPVwib3duZXJGb3JtXCIgY2xhc3M9XCJvd25lcmZvcm1cIj5cbiAgICAgICAgICAgICAgPGgzPnt7bG9jKCdjb21wb25lbnRzLmN1c3RvbWVyTWFjaGluZS5tYWNoaW5lTmV3T3duZXInKX19PC9oMz5cbiAgICAgICAgICAgICAgPHYtZm9ybSA6ZmllbGRzPVwiZmllbGRzXCIgOmZvcm0tZGF0YT1cImZvcm1EYXRhXCIgOmZvcm0tZXJyb3JzPVwiZm9ybUVycm9yc1wiPlxuICAgICAgICAgICAgICAgIDxkaXYgc2xvdD1cImJ1dHRvbnNcIiBjbGFzcz1cInYtZm9ybS1idXR0b24tZGl2XCI+XG4gICAgICAgICAgICAgICAgICA8YnV0dG9uIDpkaXNhYmxlZD1cInNlbmREaXNhYmxlZFwiIHYtb246Y2xpY2s9XCJ1cGRhdGVcIiB0eXBlPVwic3VibWl0XCIgY2xhc3M9XCJidG4gYnRuLS13aGl0ZVwiPlxuICAgICAgICAgICAgICAgICAgICB7e2xvYygndXBkYXRlSW5mb3JtYXRpb24nKX19XG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC92LWZvcm0+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgdi1pZj1cImNvbXBsYWludHMubGVuZ3RoXCI+XG4gICAgICA8aDI+e3tsb2MoJ2NvbXBsYWludHMnKX19PC9oMj5cbiAgICAgIDx2LWNsaWVudC10YWJsZSA6Y29sdW1ucz1cImNvbHVtbnNcIiA6ZGF0YT1cImZpbHRlcmVkQ29tcGxhaW50c0RhdGFcIiA6b3B0aW9ucz1cIm9wdGlvbnNcIj5cbiAgICAgICAgPHJvdXRlci1saW5rIHNsb3Q9XCJ1dWlkXCIgc2xvdC1zY29wZT1cInByb3BzXCIgOnRvPVwieyBuYW1lOiAnY29tcGxhaW50JywgcGFyYW1zOiB7IGlkOiBwcm9wcy5yb3cudXVpZCB9fVwiPnt7cHJvcHMucm93LnV1aWR9fTwvcm91dGVyLWxpbms+XG4gICAgICA8L3YtY2xpZW50LXRhYmxlPlxuICAgIDwvZGl2PlxuICAgIDwhLS0gaGlkZSBmb3Igbm93IDxkaXYgdi1pZj1cIm1hY2hpbmVEZXRhaWxzLmRhdGFcIj5cbiAgICAgIDxoMj57e2xvYygnY29tcG9uZW50cy5jdXN0b21lck1hY2hpbmUubWFjaGluZURhdGEnKX19PC9oMj5cbiAgICAgIDx0YWJsZSBjbGFzcz1cInRhYmxlIHRhYmxlLS1mbHVpZCB0YWJsZS0tbmFycm93LWZpcnN0LWNvbFwiPlxuICAgICAgICA8dHIgdi1mb3I9XCIoZGF0YSwga2V5KSBpbiBtYWNoaW5lRGV0YWlscy5kYXRhXCIgdi1iaW5kOmtleT1cImtleVwiPlxuICAgICAgICAgIDx0ZCBjbGFzcz1cInRhYmxlX190ZCBoYXMtYmdcIj57e2RhdGEubmFtZX19PC90ZD48dGQ+e3tkYXRhLnZhbHVlfX0ge3tkYXRhLnVuaXR9fTwvdGQ+XG4gICAgICAgIDwvdHI+XG4gICAgICA8L3RhYmxlPlxuICAgIDwvZGl2Pi0tPlxuICA8L3RoZS0xLWNvbHVtbi1sYXlvdXQ+XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuXG5pbXBvcnQgVkZvcm0gZnJvbSAnLi92LWZvcm0udnVlJztcblxuZXhwb3J0IGRlZmF1bHQge1xuICBjb21wb25lbnRzOiB7XG4gICAgJ3YtZm9ybSc6IFZGb3JtXG4gIH0sXG4gIG5hbWU6ICdWaWV3Q3VzdG9tZXJNYWNoaW5lJyxcbiAgZGF0YTogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB7XG4gICAgICBzZXJpYWxOdW1iZXI6ICcnLFxuICAgICAgc2VhcmNoQ29sdW1uczogWyd1dWlkJywgJ3NlcmlhbE51bWJlcicsICdkYXRlQWRkZWQnLCAnc3RhdHVzJywgJ2RlbGl2ZXJ5RGF0ZSddLFxuICAgICAgY29sdW1uczogWyd1dWlkJywgJ3NlcmlhbE51bWJlcicsICdkYXRlQWRkZWQnLCAnc3RhdHVzJywgJ2RlbGl2ZXJ5RGF0ZSddLFxuICAgICAgc29ydGFibGU6IFsndXVpZCcsICdzZXJpYWxOdW1iZXInLCAnZGF0ZUFkZGVkJywgJ3N0YXR1cycsICdkZWxpdmVyeURhdGUnXSxcbiAgICAgIGZpbHRlcmFibGU6IFsndXVpZCcsICdzZXJpYWxOdW1iZXInLCAnZGF0ZUFkZGVkJywgJ3N0YXR1cycsICdkZWxpdmVyeURhdGUnXSxcbiAgICAgIHNlbGVjdGVkOiAnMTAnLFxuICAgICAgZm9ybURhdGEgOiB7fSxcbiAgICAgIGZvcm1FcnJvcnM6IHt9LFxuICAgICAgb3duZXJQZXJtaXNzaW9uOiBmYWxzZSxcbiAgICAgIGVkaXRNYWNoaW5lSW5mb1Blcm1pc3Npb246IGZhbHNlLFxuICAgICAgZWRpdG9yQWN0aXZhdGVkOiBmYWxzZSxcbiAgICAgIHNhdmVEaXNhYmxlZDogdHJ1ZSxcbiAgICAgIHNhdmVCdG5WaXNpYmlsZTogZmFsc2UsXG4gICAgICBhZGRpdGlvbmFsSW5mb3JtYXRpb246ICcnLFxuICAgICAgc2hvd1NhdmVNZXNzYWdlOiBmYWxzZSxcbiAgICAgIHNhdmVkU3VjY2Vzc2Z1bGx5OiBmYWxzZSxcbiAgICAgIG93bmVyVXBkYXRlZDogZmFsc2UsXG4gICAgICBtYWNoaW5lT3duZXJVcGRhdGVkOiBmYWxzZSxcbiAgICAgIG93bmVyRm9ybSA6IGZhbHNlLFxuICAgICAgc2VuZERpc2FibGVkOiBmYWxzZVxuICAgIH1cbiAgfSxcbiAgY29tcHV0ZWQ6IHtcbiAgICBmaWVsZHMoKSB7XG4gICAgICBpZih0aGlzLiRzdG9yZS5nZXR0ZXJzLmNoaWxkQ29tcGFuaWVzT3B0aW9ucykge1xuICAgICAgICByZXR1cm4gW3tcbiAgICAgICAgICBuYW1lOiAnaWQnLFxuICAgICAgICAgIHZhbHVlOiB0aGlzLiRzdG9yZS5zdGF0ZS51c2VyLmluZm8uaWQsXG4gICAgICAgICAgbGFiZWw6ICdpZCcsXG4gICAgICAgICAgdHlwZTogJ2hpZGRlbidcbiAgICAgICAgfSx7XG4gICAgICAgICAgbmFtZTogJ2NoaWxkQ29tcGFueUlkJyxcbiAgICAgICAgICB2YWx1ZTogdGhpcy5tYWNoaW5lLmN1c3RvbWVyTnVtYmVyLFxuICAgICAgICAgIGxhYmVsOiB0aGlzLmxvYygnY29tcGFueScpLFxuICAgICAgICAgIG9wdGlvbnM6IHRoaXMuJHN0b3JlLmdldHRlcnMuY2hpbGRDb21wYW5pZXNPcHRpb25zLFxuICAgICAgICAgIHR5cGU6ICdzZWxlY3QnXG4gICAgICAgIH0se1xuICAgICAgICAgIG5hbWU6ICdzZXJpYWxOdW1iZXInLFxuICAgICAgICAgIHZhbHVlOiB0aGlzLnNlcmlhbE51bWJlcixcbiAgICAgICAgICBsYWJlbDogdGhpcy5sb2MoJ3NlcmlhbE51bWJlcicpLFxuICAgICAgICAgIHR5cGU6ICdoaWRkZW4nXG4gICAgICAgIH1dO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gW3tcbiAgICAgICAgbmFtZSA6ICdpZCcsXG4gICAgICAgIHZhbHVlOiAnJyxcbiAgICAgICAgbGFiZWw6IHRoaXMubG9jKCdjb21wYW55JyksXG4gICAgICAgIHR5cGUgOiAndGV4dCdcbiAgICAgIH0se1xuICAgICAgICBuYW1lOiAnc2VyaWFsTnVtYmVyJyxcbiAgICAgICAgdmFsdWU6IHRoaXMuc2VyaWFsTnVtYmVyLFxuICAgICAgICBsYWJlbDogdGhpcy5sb2MoJ3NlcmlhbE51bWJlcicpLFxuICAgICAgICB0eXBlOiAnaGlkZGVuJ1xuICAgICAgfV07XG4gICAgfSxcbiAgICBmaWx0ZXJlZENvbXBsYWludHNEYXRhKCkge1xuICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgICBjb25zdCBzZWFyY2hUZXh0ID0gdGhpcy4kc3RvcmUuc3RhdGUuc3ViaGVhZGVyLnNlYXJjaFRleHQ7IC8vIFVzZSBzdWJoZWFkZXIgc2VhcmNoIGlucHV0IGZvciBzZWFyY2hpbmdcbiAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmNvbXBsYWludHM7XG5cbiAgICAgIGlmKHNlYXJjaFRleHQpIHtcbiAgICAgICAgY29uc3Qgc2VhcmNoUmVnRXggPSBuZXcgUmVnRXhwKHNlYXJjaFRleHQsICdpJylcblxuICAgICAgICByZXR1cm4gZGF0YS5maWx0ZXIoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgICBmb3IobGV0IGk9MCwgbD1zZWxmLnNlYXJjaENvbHVtbnMubGVuZ3RoOyBpPGw7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgY29sdW1uID0gc2VsZi5zZWFyY2hDb2x1bW5zW2ldO1xuXG4gICAgICAgICAgICBpZihzZWFyY2hSZWdFeC50ZXN0KGl0ZW1bY29sdW1uXSkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9LFxuICAgIGNvbXBsYWludHNPcHRpb25zKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZmlsdGVyYWJsZTogZmFsc2UsXG4gICAgICAgIGhlYWRpbmdzOiB7XG4gICAgICAgICAgdXVpZDogdGhpcy5sb2MoJ2NvbXBsYWludElkJyksXG4gICAgICAgICAgc2VyaWFsTnVtYmVyOiB0aGlzLmxvYygnc2VyaWFsTnVtYmVyJyksXG4gICAgICAgICAgZGF0ZUFkZGVkOiB0aGlzLmxvYygnZGF0ZUFkZGVkQ29tcGxhaW50JyksXG4gICAgICAgICAgc3RhdHVzOiB0aGlzLmxvYygnc3RhdHVzJyksXG4gICAgICAgICAgZGVsaXZlcnlEYXRlOiB0aGlzLmxvYygnZGVsaXZlcnlEYXRlQ29tcGxhaW50JylcbiAgICAgICAgfSxcbiAgICAgICAgdGV4dHM6IHtcbiAgICAgICAgICAgIGNvdW50OiB0aGlzLmxvYygncGFnaW5hdGlvbkNvdW50JyksXG4gICAgICAgICAgICBsaW1pdDogdGhpcy5sb2MoJ3JlY29yZHMnKSxcbiAgICAgICAgICAgIG5vUmVzdWx0czogdGhpcy5sb2MoJ25vTWF0Y2hpbmdSZXN1bHRzJyksXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIG9wdGlvbnMoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBmaWx0ZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgaGVhZGluZ3M6IHtcbiAgICAgICAgICB1dWlkOiB0aGlzLmxvYygnY29tcGxhaW50SWQnKSxcbiAgICAgICAgICBzZXJpYWxOdW1iZXI6IHRoaXMubG9jKCdzZXJpYWxOdW1iZXInKSxcbiAgICAgICAgICBkYXRlQWRkZWQ6IHRoaXMubG9jKCdkYXRlQWRkZWRDb21wbGFpbnQnKSxcbiAgICAgICAgICBzdGF0dXM6IHRoaXMubG9jKCdzdGF0dXMnKSxcbiAgICAgICAgICBkZWxpdmVyeURhdGU6IHRoaXMubG9jKCdkZWxpdmVyeURhdGVTb2xkJylcbiAgICAgICAgfSxcbiAgICAgICAgdGV4dHM6IHtcbiAgICAgICAgICAgIGNvdW50OiB0aGlzLmxvYygncGFnaW5hdGlvbkNvdW50JyksXG4gICAgICAgICAgICBsaW1pdDogdGhpcy5sb2MoJ3JlY29yZHMnKSxcbiAgICAgICAgICAgIG5vUmVzdWx0czogdGhpcy5sb2MoJ25vTWF0Y2hpbmdSZXN1bHRzJyksXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIGNvbXBsYWludHMoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kc3RvcmUuc3RhdGUuY29tcGxhaW50cy5maWx0ZXIoY29tcGxhaW50ID0+IGNvbXBsYWludC5zZXJpYWxOdW1iZXIgPT09IHRoaXMuc2VyaWFsTnVtYmVyKS5tYXAoY29tcGxhaW50ID0+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB1dWlkOiBjb21wbGFpbnQudXVpZCxcbiAgICAgICAgICBzZXJpYWxOdW1iZXI6IGNvbXBsYWludC5zZXJpYWxOdW1iZXIsXG4gICAgICAgICAgam9ic1RleHQ6IGNvbXBsYWludC5qb2JzVGV4dCxcbiAgICAgICAgICBzdGF0dXM6IGNvbXBsYWludC5zdGF0dXMgJiYgY29tcGxhaW50LnN0YXR1cy5uYW1lLFxuICAgICAgICAgIGRhdGVBZGRlZDogY29tcGxhaW50LmRhdGVBZGRlZCAmJiBjb21wbGFpbnQuZGF0ZUFkZGVkLmZvcm1hdHRlZCxcbiAgICAgICAgICBkZWxpdmVyeURhdGU6IGNvbXBsYWludC5kZWxpdmVyeURhdGVcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSxcbiAgICBtYWNoaW5lKCkge1xuICAgICAgZm9yKGxldCBpPTAsIGw9dGhpcy4kc3RvcmUuc3RhdGUuY3VzdG9tZXJNYWNoaW5lcy5sZW5ndGg7IGk8bDsgaSsrKSB7XG4gICAgICAgIGlmKHRoaXMuJHN0b3JlLnN0YXRlLmN1c3RvbWVyTWFjaGluZXNbaV0uc2VyaWFsTnVtYmVyID09PSB0aGlzLnNlcmlhbE51bWJlcikge1xuICAgICAgICAgIHRoaXMuJHN0b3JlLmNvbW1pdCgnc2V0U3ViaGVhZGVyJywge1xuICAgICAgICAgICAgc3VidGl0bGU6ICcnLFxuICAgICAgICAgICAgdGl0bGU6IHRoaXMuJHN0b3JlLnN0YXRlLmN1c3RvbWVyTWFjaGluZXNbaV0ubWFjaGluZU1vZGVsTmFtZSxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnJyxcbiAgICAgICAgICAgIHNlYXJjaEVuYWJsZWQ6IGZhbHNlXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhpcy5hZGRpdGlvbmFsSW5mb3JtYXRpb24gPSB0aGlzLiRzdG9yZS5zdGF0ZS5jdXN0b21lck1hY2hpbmVzW2ldLmFkZGl0aW9uYWxJbmZvcm1hdGlvbjtcbiAgICAgICAgICByZXR1cm4gdGhpcy4kc3RvcmUuc3RhdGUuY3VzdG9tZXJNYWNoaW5lc1tpXTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBJZiBub3RoaW5nIGlzIGZvdW5kXG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb3VudHJ5OiB7fSxcbiAgICAgICAgZGVsaXZlcnlEYXRlOiB7fVxuICAgICAgfTtcbiAgICB9LFxuICAgIG1hY2hpbmVEZXRhaWxzKCkge1xuICAgICAgZm9yKGxldCBpPTAsIGw9dGhpcy4kc3RvcmUuc3RhdGUuY3VzdG9tZXJNYWNoaW5lRGV0YWlscy5sZW5ndGg7IGk8bDsgaSsrKSB7XG4gICAgICAgIGlmKHRoaXMuJHN0b3JlLnN0YXRlLmN1c3RvbWVyTWFjaGluZURldGFpbHNbaV0uc2VyaWFsTnVtYmVyID09PSB0aGlzLnNlcmlhbE51bWJlcikge1xuICAgICAgICAgIHJldHVybiB0aGlzLiRzdG9yZS5zdGF0ZS5jdXN0b21lck1hY2hpbmVEZXRhaWxzW2ldO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIElmIG5vdGhpbmcgaXMgZm91bmRcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gIH0sXG4gIG1ldGhvZHM6IHtcbiAgICBhc3luYyB1cGRhdGUoKSB7XG4gICAgICB0aGlzLnNlbmREaXNhYmxlZCA9IHRydWU7XG4gICAgICByZXR1cm4gdGhpcy4kYXBpLnVwZGF0ZUN1c3RvbWVyTWFjaGluZU93bmVyKHRoaXMuZm9ybURhdGEuc2VyaWFsTnVtYmVyLCB0aGlzLmZvcm1EYXRhKS50aGVuKHJlcyA9PiB7XG4gICAgICAgIHRoaXMuc2VuZERpc2FibGVkID0gZmFsc2U7XG5cbiAgICAgICAgLy8gRXJyb3JzIGluIGZvcm1cbiAgICAgICAgaWYocmVzLmNvZGUgPT09IDQwMCkge1xuICAgICAgICAgIHRoaXMuZm9ybUVycm9ycyA9IHJlcy5yZXN1bHQuZmllbGRzO1xuICAgICAgICB9XG5cblxuICAgICAgICBpZihyZXMuY29kZSA9PT0gMjAwKSB7XG4gICAgICAgICAgdGhpcy5tYWNoaW5lT3duZXJVcGRhdGVkID0gdHJ1ZTsgLy9zaG93IG1lc3NhZ2VcbiAgICAgICAgICB0aGlzLiRzdG9yZS5kaXNwYXRjaCgnZ2V0Q3VzdG9tZXJNYWNoaW5lJywgdGhpcy5zZXJpYWxOdW1iZXIpOyAvL3VwZGF0ZSBtYWNoaW5lIHZpZXdcbiAgICAgICAgICB0aGlzLm93bmVyRm9ybSA9IGZhbHNlOyAvL2hpZGUgZm9ybVxuICAgICAgICB9XG5cbiAgICAgIH0pO1xuXG4gICAgfSxcblxuICAgIGFjdGl2YXRlRWRpdG9yKCkge1xuICAgICAgdGhpcy5lZGl0b3JBY3RpdmF0ZWQgPSB0cnVlO1xuICAgICAgdGhpcy4kbmV4dFRpY2soKCkgPT4ge1xuICAgICAgICBjb25zdCB0ZXh0YXJlYSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXh0YXJlYScpO1xuICAgICAgICB0ZXh0YXJlYS5mb2N1cygpO1xuICAgICAgICB0ZXh0YXJlYS5zdHlsZS5oZWlnaHQgPSB0ZXh0YXJlYS5zY3JvbGxIZWlnaHQgKyAncHgnO1xuICAgICAgICB9KTtcbiAgICB9LFxuXG4gICAgaGFuZGxlSW5wdXQoZXZlbnQpICB7XG4gICAgICB0aGlzLnNhdmVEaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgdGhpcy5zYXZlQnRuVmlzaWJpbGUgPSB0cnVlO1xuICAgICAgdGhpcy5hZGRpdGlvbmFsSW5mb3JtYXRpb24gPSBldmVudC50YXJnZXQudmFsdWU7XG4gICAgICBjb25zdCBlbGVtZW50ID0gZXZlbnQudGFyZ2V0O1xuICAgICAgZWxlbWVudC5zdHlsZS5oZWlnaHQgPSAnYXV0byc7XG4gICAgICBlbGVtZW50LnN0eWxlLmhlaWdodCA9IGVsZW1lbnQuc2Nyb2xsSGVpZ2h0ICsgJ3B4JzsgLy8gYWRqdXN0IHRleHRhcmVhIGhlaWdodCB0byB0aGUgaW5wdXQgY29udGVudFxuICAgIH0sXG5cbiAgICBhc3luYyBzYXZlKCkge1xuICAgICAgdGhpcy5zYXZlRGlzYWJsZWQgPSB0cnVlO1xuXG4gICAgICBjb25zdCBkYXRhID0ge1xuICAgICAgICBhZGRpdGlvbmFsSW5mb3JtYXRpb246IHRoaXMuYWRkaXRpb25hbEluZm9ybWF0aW9uXG4gICAgICB9O1xuXG4gICAgICByZXR1cm4gdGhpcy4kYXBpLnNhdmVDdXN0b21lck1hY2hpbmVJbmZvcm1hdGlvbih0aGlzLnNlcmlhbE51bWJlciwgZGF0YSkudGhlbihyZXMgPT4ge1xuXG5cbiAgICAgICAgaWYocmVzLmNvZGUgPT09IDQwMCB8fCByZXMuY29kZSA9PT0gNTAwKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihyZXMucmVzdWx0LmZpZWxkcyk7XG4gICAgICAgICAgdGhpcy5zYXZlZFN1Y2Nlc3NmdWxseSA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYocmVzLmNvZGUgPT09IDIwMCkge1xuICAgICAgICAgIHRoaXMuc2F2ZWRTdWNjZXNzZnVsbHkgPSB0cnVlO1xuICAgICAgICAgIHRoaXMuJHN0b3JlLmRpc3BhdGNoKCdnZXRDdXN0b21lck1hY2hpbmUnLCB0aGlzLnNlcmlhbE51bWJlcik7IC8vIHVwZGF0ZSBtYWNoaW5lIHZpZXdcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2hvd1NhdmVNZXNzYWdlID0gdHJ1ZTsgLy8gc2hvdyBtZXNzYWdlXG5cbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7IC8vIGZhZGUgb3V0IHRoZSBzYXZlZCBtZXNzYWdlIGFuZCBidXR0b25cbiAgICAgICAgICAgIHRoaXMuc2hvd1NhdmVNZXNzYWdlID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnNhdmVCdG5WaXNpYmlsZSA9IHRoaXMuc2F2ZWRTdWNjZXNzZnVsbHkgPyBmYWxzZSA6IHRydWU7XG4gICAgICAgICAgICB0aGlzLnNhdmVEaXNhYmxlZCA9IHRoaXMuc2F2ZWRTdWNjZXNzZnVsbHkgPyB0cnVlIDogZmFsc2U7XG4gICAgICAgICAgICB9LCAyMDAwKTtcblxuICAgICAgfSk7XG4gICAgfVxuXG4gIH0sXG4gIG1vdW50ZWQ6IGZ1bmN0aW9uICgpIHtcblxuICAgIC8vUGVybWlzc2lvbiB0byBzaG93IG1hY2hpbmUgb3duZXJzaGlwIGZvcm0gLSB0cnVlL2ZhbHNlXG4gICAgLy9yZXRhaWxlciwgY3VzdG9tZXIgYW5kIHJldGFpbGVyLWFkbWluIHdvbid0IGdldCBwZXJtaXNzaW9uXG5cbiAgICB0aGlzLm93bmVyUGVybWlzc2lvbiA9XG4gICAgICB0aGlzLiR1c2VyUmlnaHRzLmhhc1JpZ2h0KCB3aW5kb3cuUklHSFRTLlZJRVdfT1dORVJTSElQX0ZPUk0sIHRoaXMuJHN0b3JlLnN0YXRlLnVzZXIucm9sZSApXG4gICAgICA/IHRydWVcbiAgICAgIDogZmFsc2U7XG5cbiAgICB0aGlzLmVkaXRNYWNoaW5lSW5mb1Blcm1pc3Npb24gPVxuICAgICAgdGhpcy4kdXNlclJpZ2h0cy5oYXNSaWdodCggd2luZG93LlJJR0hUUy5FRElUX01BQ0hJTkVfSU5GTywgdGhpcy4kc3RvcmUuc3RhdGUudXNlci5yb2xlKVxuICAgICAgPyB0cnVlXG4gICAgICA6IGZhbHNlO1xuXG4gICAgdGhpcy5zZXJpYWxOdW1iZXIgPSB0aGlzLiRyb3V0ZS5wYXJhbXMuc2VyaWFsTnVtYmVyXG5cbiAgICB0aGlzLiRzdG9yZS5kaXNwYXRjaCgnZ2V0Q3VzdG9tZXJNYWNoaW5lJywgdGhpcy5zZXJpYWxOdW1iZXIpXG4gICAgdGhpcy4kc3RvcmUuZGlzcGF0Y2goJ2dldEN1c3RvbWVyTWFjaGluZURldGFpbHMnLCB0aGlzLnNlcmlhbE51bWJlcik7XG4gICAgdGhpcy4kc3RvcmUuZGlzcGF0Y2goJ2dldENoaWxkQ29tcGFuaWVzJyk7XG4gICAgdGhpcy4kc3RvcmUuZGlzcGF0Y2goJ2dldENvbXBsYWludHMnLCB7XG4gICAgICBzZXJpYWxOdW1iZXI6IHRoaXMuc2VyaWFsTnVtYmVyLFxuICAgICAgaW5jbHVkZUNoaWxkQ29tcGFuaWVzOiB0cnVlXG4gICAgfSk7XG5cbiAgICB0aGlzLiRzdG9yZS5jb21taXQoJ3NldFN1YmhlYWRlcicsIHtcbiAgICAgIHN1YnRpdGxlOiAnJyxcbiAgICAgIHRpdGxlOiAnJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnJyxcbiAgICAgIHNlYXJjaEVuYWJsZWQ6IGZhbHNlXG4gICAgfSk7XG4gIH1cbn1cbjwvc2NyaXB0PlxuIiwiPHRlbXBsYXRlPlxuICA8dGhlLXNpZGViYXItbGF5b3V0PlxuICAgIDxkaXYgY2xhc3M9XCJzaG93LXNlYXJjaC1idXR0b25cIiB2LW9uOmNsaWNrPVwic2hvd1NlYXJjaFwiIHNsb3Q9XCJzaWRlYmFyLXRpdGxlXCI+e3tsb2MoJ2ZpbHRlclJlc3VsdHMnKX19PC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImhpZGUtbW9iaWxlIHNpZGViYXJTZWFyY2hcIiBzbG90PVwic2lkZWJhclwiPlxuICAgICAgPHYtZm9ybSA6ZmllbGRzPVwiZmlsdGVyRmllbGRzXCIgOmZvcm0tZGF0YT1cImZvcm1EYXRhXCIgOmZvcm0tZXJyb3JzPVwiZm9ybUVycm9yc1wiIDpvbi1jaGFuZ2U9XCJmaWx0ZXJzQ2hhbmdlZFwiPjwvdi1mb3JtPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJoaWRlLW1vYmlsZVwiIHN0eWxlPVwiZmxvYXQ6IHJpZ2h0OyBtYXJnaW4tYm90dG9tOiA1MHB4XCI+XG4gICAgICA8ZGl2Pnt7dGhpcy5sb2MoJ3JlY29yZHMnKX19PC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiY3VzdG9tLXNlbGVjdCBqcy1jdXN0b20tc2VsZWN0LXdyYXBwZXJcIiBzdHlsZT1cIndpZHRoOiAxMDBweFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY3VzdG9tLXNlbGVjdF9fZHJvcGRvd24ganMtY3VzdG9tLXNlbGVjdC1kcm9wZG93biBjdXN0b20tc2VsZWN0X19zbWFsbFwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3VzdG9tLXNlbGVjdF9fdGV4dCBqcy1jdXN0b20tc2VsZWN0LXRleHRob2xkZXJcIj57e3NlbGVjdGVkVmFsdWV9fTwvc3Bhbj5cbiAgICAgICAgICA8c2VsZWN0IHYtbW9kZWw9XCJzZWxlY3RlZFwiIEBjaGFuZ2U9XCIkcmVmcy50YWJsZS5zZXRMaW1pdCgkZXZlbnQudGFyZ2V0LnZhbHVlKVwiIGNsYXNzPVwiZm9ybV9fZmllbGQtc2VsZWN0IGpzLWN1c3RvbS1zZWxlY3QgZm9ybV9fZmllbGQtc2VsZWN0LWN1c3RvbSBqcy1sYW5nLXNlbGVjdCBsYW5nX3NlbGVjdFwiPlxuICAgICAgICAgICAgPG9wdGlvbiB2LWJpbmQ6dGV4dD1cIjEwXCIgdmFsdWU9XCIxMFwiPjEwPC9vcHRpb24+XG4gICAgICAgICAgICA8b3B0aW9uIHYtYmluZDp0ZXh0PVwiMjVcIiB2YWx1ZT1cIjI1XCI+MjU8L29wdGlvbj5cbiAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8di1jbGllbnQtdGFibGUgcmVmPVwidGFibGVcIiA6Y29sdW1ucz1cImNvbHVtbnNcIiA6ZGF0YT1cImZpbHRlcmVkRGF0YVwiIDpvcHRpb25zPVwib3B0aW9uc1wiPlxuICAgICAgPHJvdXRlci1saW5rIHNsb3Q9XCJzZXJpYWxOdW1iZXJcIiBzbG90LXNjb3BlPVwicHJvcHNcIiA6dG89XCJ7IG5hbWU6ICdjdXN0b21lci1tYWNoaW5lJywgcGFyYW1zOiB7IHNlcmlhbE51bWJlcjogcHJvcHMucm93LnNlcmlhbE51bWJlciB9fVwiPnt7cHJvcHMucm93LnNlcmlhbE51bWJlcn19PC9yb3V0ZXItbGluaz5cbiAgICAgIDxkaXYgc2xvdD1cImRlbGl2ZXJ5RGF0ZVdhcnJhbnR5XCIgc2xvdC1zY29wZT1cInByb3BzXCI+e3twcm9wcy5yb3cuZGVsaXZlcnlEYXRlV2FycmFudHlGb3JtYXR0ZWR9fTwvZGl2PlxuICAgIDwvdi1jbGllbnQtdGFibGU+XG4gICAgPGRpdiBjbGFzcz1cInNwaW5uZXJcIj48L2Rpdj5cbiAgPC90aGUtc2lkZWJhci1sYXlvdXQ+XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IFZGb3JtIGZyb20gJy4vdi1mb3JtLnZ1ZSc7XG5pbXBvcnQgcXVlcnlTdHJpbmcgZnJvbSAncXVlcnktc3RyaW5nJztcbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50JztcbmltcG9ydCAkIGZyb20gJ2pxdWVyeSc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbmFtZTogJ1ZpZXdDdXN0b21lck1hY2hpbmVzJyxcbiAgY29tcG9uZW50czoge1xuICAgICd2LWZvcm0nOiBWRm9ybVxuICB9LFxuICBkYXRhOiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGZvcm1FcnJvcnM6IHt9LFxuICAgICAgZm9ybURhdGE6IHt9LFxuICAgICAgZmlsdGVyRGF0YToge1xuICAgICAgICBzZXJpYWxOdW1iZXI6ICcnLFxuICAgICAgICBiYXNlTW9kZWw6ICcnLFxuICAgICAgICBkZWxpdmVyeURhdGVTdGFydDogJycsXG4gICAgICAgIGRlbGl2ZXJ5RGF0ZUVuZDogJycsXG4gICAgICAgIGNvdW50cnk6ICcnLFxuICAgICAgICBkYXRlQWRkZWRTdGFydDogJycsXG4gICAgICAgIGRhdGVBZGRlZEVuZDogJycsXG4gICAgICB9LFxuICAgICAgZmlsdGVyaW5nRW5hYmxlZDogZmFsc2UsXG4gICAgICBzZWFyY2hUZXh0OiAnJyxcbiAgICAgIHNlYXJjaENvbHVtbnM6IFsnbWFjaGluZU1vZGVsTmFtZScsICdzZXJpYWxOdW1iZXInLCAnZGVsaXZlcnlEYXRlV2FycmFudHlGb3JtYXR0ZWQnLCAnY29tcGFueU5hbWUnLCAnZGF0ZUFkZGVkRm9ybWF0dGVkJywgJ2NvdW50cnknXSxcbiAgICAgIGNvbHVtbnM6IFsnbWFjaGluZU1vZGVsTmFtZScsICdzZXJpYWxOdW1iZXInLCAnZGVsaXZlcnlEYXRlV2FycmFudHknLCAnY29tcGFueU5hbWUnLCAnZGF0ZUFkZGVkJywgJ2NvdW50cnknXSxcbiAgICAgIHNvcnRhYmxlOiBbJ21hY2hpbmVNb2RlbE5hbWUnLCAnc2VyaWFsTnVtYmVyJywgJ2RlbGl2ZXJ5RGF0ZVdhcnJhbnR5JywgJ2NvbXBhbnlOYW1lJywgJ2RhdGVBZGRlZCcsJ2NvdW50cnknXSxcbiAgICAgIGZpbHRlcmFibGU6IFsnbWFjaGluZU1vZGVsTmFtZScsICdzZXJpYWxOdW1iZXInLCAnZGVsaXZlcnlEYXRlV2FycmFudHknLCAnY29tcGFueU5hbWUnLCAnZGF0ZUFkZGVkJywnY291bnRyeSddLFxuICAgICAgc2VsZWN0ZWQ6ICcxMCdcbiAgICB9XG4gIH0sXG4gIGNvbXB1dGVkOiB7XG4gICAgZmlsdGVyRmllbGRzKCkge1xuICAgICAgLy8gT25seSBwb3B1bGF0ZSBmaWVsZHMgYWZ0ZXIgcG9zc2libGUgdXJsIHF1ZXJ5IGZpbHRlcnMgaGF2ZSBiZWVuIGFwcGxpZWRcbiAgICAgIGlmKCF0aGlzLmZpbHRlcmluZ0VuYWJsZWQpIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gW3tcbiAgICAgICAgbmFtZTogJ3NlcmlhbE51bWJlcicsXG4gICAgICAgIHZhbHVlOiB0aGlzLmZpbHRlckRhdGEuc2VyaWFsTnVtYmVyLFxuICAgICAgICBsYWJlbDogdGhpcy5sb2MoJ3NlcmlhbE51bWJlcicpLFxuICAgICAgICB0eXBlOiAndGV4dCdcbiAgICAgIH0sIHtcbiAgICAgICAgbmFtZTogJ2RlbGl2ZXJ5RGF0ZVN0YXJ0JyxcbiAgICAgICAgdmFsdWU6IHRoaXMuZmlsdGVyRGF0YS5kZWxpdmVyeURhdGVTdGFydCA/IG5ldyBEYXRlKHRoaXMuZmlsdGVyRGF0YS5kZWxpdmVyeURhdGVTdGFydCkgOiAnJyxcbiAgICAgICAgbGFiZWw6IHRoaXMubG9jKCdkZWxpdmVyeURhdGVTdGFydCcpLFxuICAgICAgICB0eXBlOiAnZGF0ZSdcbiAgICAgIH0sIHtcbiAgICAgICAgbmFtZTogJ2RlbGl2ZXJ5RGF0ZUVuZCcsXG4gICAgICAgIHZhbHVlOiB0aGlzLmZpbHRlckRhdGEuZGVsaXZlcnlEYXRlRW5kID8gbmV3IERhdGUodGhpcy5maWx0ZXJEYXRhLmRlbGl2ZXJ5RGF0ZUVuZCkgOiAnJyxcbiAgICAgICAgbGFiZWw6IHRoaXMubG9jKCdkZWxpdmVyeURhdGVFbmQnKSxcbiAgICAgICAgdHlwZTogJ2RhdGUnXG4gICAgICB9LCB7XG4gICAgICAgIG5hbWU6ICdiYXNlTW9kZWwnLFxuICAgICAgICB2YWx1ZTogdGhpcy5maWx0ZXJEYXRhLmJhc2VNb2RlbCxcbiAgICAgICAgbGFiZWw6IHRoaXMubG9jKCdtYWNoaW5lTW9kZWwnKSxcbiAgICAgICAgb3B0aW9uczogdGhpcy5iYXNlTWFjaGluZU9wdGlvbnMsXG4gICAgICAgIHR5cGU6ICdzZWxlY3QnXG4gICAgICB9LCB7XG4gICAgICAgIG5hbWU6ICdjb3VudHJ5JyxcbiAgICAgICAgdmFsdWU6IHRoaXMuZmlsdGVyRGF0YS5jb3VudHJ5LFxuICAgICAgICBsYWJlbDogdGhpcy5sb2MoJ2NvdW50cnknKSxcbiAgICAgICAgb3B0aW9uczogdGhpcy5jb3VudHJ5T3B0aW9ucyxcbiAgICAgICAgdHlwZTogJ3NlbGVjdCdcbiAgICAgIH0sIHtcbiAgICAgICAgbmFtZTogJ2RhdGVBZGRlZFN0YXJ0JyxcbiAgICAgICAgdmFsdWU6IHRoaXMuZmlsdGVyRGF0YS5kYXRlQWRkZWRTdGFydCA/IG5ldyBEYXRlKHRoaXMuZmlsdGVyRGF0YS5kYXRlQWRkZWRTdGFydCkgOiAnJyxcbiAgICAgICAgbGFiZWw6IHRoaXMubG9jKCdkYXRlQWRkZWRTdGFydCcpLFxuICAgICAgICB0eXBlOiAnZGF0ZSdcbiAgICAgIH0sIHtcbiAgICAgICAgbmFtZTogJ2RhdGVBZGRlZEVuZCcsXG4gICAgICAgIHZhbHVlOiB0aGlzLmZpbHRlckRhdGEuZGF0ZUFkZGVkRW5kID8gbmV3IERhdGUodGhpcy5maWx0ZXJEYXRhLmRhdGVBZGRlZEVuZCkgOiAnJyxcbiAgICAgICAgbGFiZWw6IHRoaXMubG9jKCdkYXRlQWRkZWRFbmQnKSxcbiAgICAgICAgdHlwZTogJ2RhdGUnXG4gICAgICB9XTtcbiAgICB9LFxuICAgIGNvdW50cnlPcHRpb25zKCkge1xuICAgICAgY29uc3Qgb3B0aW9ucyA9IFtdO1xuICAgICAgY29uc3QgYWRkZWRPcHRpb25zID0gW107XG5cbiAgICAgIG9wdGlvbnMucHVzaCh7XG4gICAgICAgIHZhbHVlOiAnJyxcbiAgICAgICAgdGV4dDogJy0tJ1xuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuJHN0b3JlLnN0YXRlLmN1c3RvbWVyTWFjaGluZXMuZm9yRWFjaChtYWNoaW5lID0+IHtcbiAgICAgICAgaWYobWFjaGluZS5jb3VudHJ5ICE9PSBudWxsKSB7XG4gICAgICAgICAgaWYoYWRkZWRPcHRpb25zLmluZGV4T2YobWFjaGluZS5jb3VudHJ5LmNvdW50cnlDb2RlKSA9PT0gLTEpIHtcblxuICAgICAgICAgICAgb3B0aW9ucy5wdXNoKHtcbiAgICAgICAgICAgICAgdmFsdWU6IG1hY2hpbmUuY291bnRyeS5jb3VudHJ5Q29kZSxcbiAgICAgICAgICAgICAgdGV4dDogbWFjaGluZS5jb3VudHJ5Lm5hbWVcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBhZGRlZE9wdGlvbnMucHVzaChtYWNoaW5lLmNvdW50cnkuY291bnRyeUNvZGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICB9KTtcbiAgICAgIG9wdGlvbnMuc29ydCgoYSwgYikgPT4gKGEudGV4dCA+IGIudGV4dCkgPyAxIDogLTEpO1xuICAgICAgcmV0dXJuIG9wdGlvbnM7XG4gICAgfSxcbiAgICBiYXNlTWFjaGluZU9wdGlvbnMoKSB7XG4gICAgICBjb25zdCBvcHRpb25zID0gW107XG4gICAgICBjb25zdCBhZGRlZE9wdGlvbnMgPSBbXTtcblxuICAgICAgb3B0aW9ucy5wdXNoKHtcbiAgICAgICAgdmFsdWU6ICcnLFxuICAgICAgICB0ZXh0OiAnLS0nXG4gICAgICB9KTtcblxuICAgICAgdGhpcy4kc3RvcmUuc3RhdGUuY3VzdG9tZXJNYWNoaW5lcy5mb3JFYWNoKG1hY2hpbmUgPT4ge1xuICAgICAgICBpZiggYWRkZWRPcHRpb25zLmluZGV4T2YobWFjaGluZS5tYWNoaW5lQmFzZU1vZGVsSWQpID09PSAtMSAmJiBtYWNoaW5lLm1hY2hpbmVCYXNlTW9kZWxOYW1lICE9PSBudWxsICkge1xuICAgICAgICAgIC8vU29tZSBtYWNoaW5lcyBtaWdodCBoYXZlIGJhc2VNb2RlbElkIG51bGwgYW5kIHByZXZlbnQgdGhlbSB0byBjb21lIGFzIGVtcHR5IG9wdGlvbnMgdG8gZmlsdGVyIGRyb3Bkb3duXG4gICAgICAgICAgaWYoIG1hY2hpbmUubWFjaGluZUJhc2VNb2RlbElkICE9PSBudWxsICl7XG4gICAgICAgICAgICBvcHRpb25zLnB1c2goe1xuICAgICAgICAgICAgICB2YWx1ZTogbWFjaGluZS5tYWNoaW5lQmFzZU1vZGVsSWQsXG4gICAgICAgICAgICAgIHRleHQ6IG1hY2hpbmUubWFjaGluZUJhc2VNb2RlbE5hbWVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGFkZGVkT3B0aW9ucy5wdXNoKG1hY2hpbmUubWFjaGluZUJhc2VNb2RlbElkKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBvcHRpb25zLnNvcnQoKGEsIGIpID0+IChhLnRleHQgPiBiLnRleHQpID8gMSA6IC0xKTtcbiAgICAgIHJldHVybiBvcHRpb25zO1xuICAgIH0sXG4gICAgbWFjaGluZURhdGEoKSB7XG4gICAgICBjb25zdCBpdGVtcyA9IFtdO1xuXG4gICAgICB0aGlzLiRzdG9yZS5zdGF0ZS5jdXN0b21lck1hY2hpbmVzLmZvckVhY2gobWFjaGluZSA9PiB7XG4gICAgICAgIGNvbnN0IGl0ZW0gPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KG1hY2hpbmUpKTtcbiAgICAgICAgaXRlbS5jb3VudHJ5Q29kZSA9IGl0ZW0uY291bnRyeSA9PT0gbnVsbCA/ICAnJyA6IGl0ZW0uY291bnRyeS5jb3VudHJ5Q29kZTtcbiAgICAgICAgaXRlbS5jb3VudHJ5ID0gaXRlbS5jb3VudHJ5ID09PSBudWxsID8gICcnIDogaXRlbS5jb3VudHJ5Lm5hbWU7XG4gICAgICAgIGl0ZW0uZGVsaXZlcnlEYXRlV2FycmFudHlGb3JtYXR0ZWQgPSBpdGVtLmRlbGl2ZXJ5RGF0ZS5mb3JtYXR0ZWQ7XG4gICAgICAgIGl0ZW0uZGVsaXZlcnlEYXRlV2FycmFudHkgPSBpdGVtLmRlbGl2ZXJ5RGF0ZS5kYXRlO1xuICAgICAgICBpdGVtLmRhdGVBZGRlZEZvcm1hdHRlZCA9ICBpdGVtLmRhdGVBZGRlZC5mb3JtYXR0ZWQ7XG4gICAgICAgIGl0ZW0uZGF0ZUFkZGVkID0gaXRlbS5kYXRlQWRkZWQuZGF0ZTtcbiAgICAgICAgaXRlbS5jb21wYW55TmFtZSA9IChpdGVtLnJldGFpbF9jdXN0b21lcl9uYW1lICE9ICcnKSA/IGl0ZW0ucmV0YWlsX2N1c3RvbWVyX25hbWUgOiBpdGVtLmNvbXBhbnlOYW1lO1xuICAgICAgICBpdGVtcy5wdXNoKGl0ZW0pO1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBpdGVtcztcbiAgICB9LFxuICAgIG9wdGlvbnMoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBmaWx0ZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgaGVhZGluZ3M6IHtcbiAgICAgICAgICBtYWNoaW5lTW9kZWxOYW1lOiB0aGlzLmxvYygnbWFjaGluZU1vZGVsJyksXG4gICAgICAgICAgc2VyaWFsTnVtYmVyOiB0aGlzLmxvYygnc2VyaWFsTnVtYmVyJyksXG4gICAgICAgICAgZGVsaXZlcnlEYXRlV2FycmFudHk6IHRoaXMubG9jKCdjdXN0b21lck1hY2hpbmVXYXJyYW50eVJlZ2lzdGVyZWQnKSxcbiAgICAgICAgICBjb21wYW55TmFtZTogdGhpcy5sb2MoJ2NvbXBhbnknKSxcbiAgICAgICAgICBjb3VudHJ5OiB0aGlzLmxvYygnY291bnRyeScpLFxuICAgICAgICAgIGRhdGVBZGRlZDogdGhpcy5sb2MoJ2RhdGVBZGRlZE1hY2hpbmUnKVxuICAgICAgICB9LFxuICAgICAgICB0ZXh0czoge1xuICAgICAgICAgICAgY291bnQ6IHRoaXMubG9jKCdwYWdpbmF0aW9uQ291bnQnKSxcbiAgICAgICAgICAgIGxpbWl0OiB0aGlzLmxvYygncmVjb3JkcycpLFxuICAgICAgICAgICAgbm9SZXN1bHRzOiB0aGlzLmxvYygnbm9NYXRjaGluZ1Jlc3VsdHMnKSxcbiAgICAgICAgfSxcbiAgICAgICAgc2tpbjogJ3RhYmxlLXJlc3BvbnNpdmUnXG5cbiAgICAgIH1cbiAgICB9LFxuICAgIGZpbHRlcmVkRGF0YSgpIHtcbiAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgICAgY29uc3Qgc2VhcmNoVGV4dCA9IHRoaXMuJHN0b3JlLnN0YXRlLnN1YmhlYWRlci5zZWFyY2hUZXh0OyAvLyBVc2Ugc3ViaGVhZGVyIHNlYXJjaCBpbnB1dCBmb3Igc2VhcmNoaW5nXG4gICAgICBjb25zdCBkYXRhID0gdGhpcy5tYWNoaW5lRGF0YTtcbiAgICAgIGNvbnN0IGZpbHRlckRhdGEgPSB0aGlzLmZpbHRlckRhdGE7XG5cbiAgICAgIHJldHVybiBkYXRhLmZpbHRlcihpdGVtID0+IHtcbiAgICAgICAgZm9yKGxldCBrZXkgaW4gdGhpcy5maWx0ZXJEYXRhKSB7XG4gICAgICAgICAgc3dpdGNoKGtleSkge1xuICAgICAgICAgICAgY2FzZSAnc2VyaWFsTnVtYmVyJzpcbiAgICAgICAgICAgICAgaWYodGhpcy5maWx0ZXJEYXRhLnNlcmlhbE51bWJlcikge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNlYXJjaFJlZ0V4ID0gbmV3IFJlZ0V4cCh0aGlzLmZpbHRlckRhdGEuc2VyaWFsTnVtYmVyLCAnaScpO1xuXG4gICAgICAgICAgICAgICAgLy8gSWYgc2VyaWFsbnVtYmVyIHNlYXJjaCBkb2Vzbid0IG1hdGNoLCBleGNsdWRlIGZyb20gbGlzdFxuICAgICAgICAgICAgICAgIGlmKCFzZWFyY2hSZWdFeC50ZXN0KGl0ZW0uc2VyaWFsTnVtYmVyKSkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdkZWxpdmVyeURhdGVTdGFydCc6XG4gICAgICAgICAgICAgIGlmKHRoaXMuZmlsdGVyRGF0YS5kZWxpdmVyeURhdGVTdGFydCkge1xuICAgICAgICAgICAgICAgIC8vIElmIGRlbGl2ZXJ5ZGF0ZSBpcyBiaWdnZXIgdGhhbiBmaWx0ZXJlZCBlbmQgZGF0ZSwgZXhjbHVkZVxuICAgICAgICAgICAgICAgIGlmKCFpdGVtLmRlbGl2ZXJ5RGF0ZVdhcnJhbnR5IHx8ICh0aGlzLmZpbHRlckRhdGEuZGVsaXZlcnlEYXRlU3RhcnQgJiYgaXRlbS5kZWxpdmVyeURhdGVXYXJyYW50eSA8IHRoaXMuZmlsdGVyRGF0YS5kZWxpdmVyeURhdGVTdGFydCkpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnZGVsaXZlcnlEYXRlRW5kJzpcbiAgICAgICAgICAgICAgaWYodGhpcy5maWx0ZXJEYXRhLmRlbGl2ZXJ5RGF0ZUVuZCkge1xuICAgICAgICAgICAgICAgIC8vIElmIGRlbGl2ZXJ5ZGF0ZSBpcyBiaWdnZXIgdGhhbiBmaWx0ZXJlZCBlbmQgZGF0ZSwgZXhjbHVkZVxuICAgICAgICAgICAgICAgIGlmKCAhaXRlbS5kZWxpdmVyeURhdGVXYXJyYW50eSB8fCAodGhpcy5maWx0ZXJEYXRhLmRlbGl2ZXJ5RGF0ZUVuZCAmJiBpdGVtLmRlbGl2ZXJ5RGF0ZVdhcnJhbnR5ID4gdGhpcy5maWx0ZXJEYXRhLmRlbGl2ZXJ5RGF0ZUVuZCkgKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2RhdGVBZGRlZFN0YXJ0JzpcbiAgICAgICAgICAgICAgaWYodGhpcy5maWx0ZXJEYXRhLmRhdGVBZGRlZFN0YXJ0KSB7XG4gICAgICAgICAgICAgICAgLy8gSWYgZGVsaXZlcnlkYXRlIGlzIGJpZ2dlciB0aGFuIGZpbHRlcmVkIGVuZCBkYXRlLCBleGNsdWRlXG4gICAgICAgICAgICAgICAgaWYoIWl0ZW0uZGF0ZUFkZGVkIHx8ICh0aGlzLmZpbHRlckRhdGEuZGF0ZUFkZGVkU3RhcnQgJiYgaXRlbS5kYXRlQWRkZWQgPCB0aGlzLmZpbHRlckRhdGEuZGF0ZUFkZGVkU3RhcnQpKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2RhdGVBZGRlZEVuZCc6XG4gICAgICAgICAgICAgIGlmKHRoaXMuZmlsdGVyRGF0YS5kYXRlQWRkZWRFbmQpIHtcbiAgICAgICAgICAgICAgICAvLyBJZiBkZWxpdmVyeWRhdGUgaXMgYmlnZ2VyIHRoYW4gZmlsdGVyZWQgZW5kIGRhdGUsIGV4Y2x1ZGVcbiAgICAgICAgICAgICAgICBpZighaXRlbS5kYXRlQWRkZWQgfHwgKHRoaXMuZmlsdGVyRGF0YS5kYXRlQWRkZWRFbmQgJiYgaXRlbS5kYXRlQWRkZWQgPiB0aGlzLmZpbHRlckRhdGEuZGF0ZUFkZGVkRW5kKSkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdiYXNlTW9kZWwnOlxuICAgICAgICAgICAgICAvLyBJZiBiYXNlTW9kZWwgaXMgc2VsZWN0ZWQsIGV4Y2x1ZGUgb3RoZXIgYmFzZSBtb2RlbCBtYWNoaW5lc1xuICAgICAgICAgICAgICBpZih0aGlzLmZpbHRlckRhdGEuYmFzZU1vZGVsICYmIGl0ZW0ubWFjaGluZUJhc2VNb2RlbElkICE9PSB0aGlzLmZpbHRlckRhdGEuYmFzZU1vZGVsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2NvdW50cnknOlxuICAgICAgICAgICAgICAvLyBJZiBjb3VudHJ5IGlzIHNlbGVjdGVkLCBleGNsdWRlIG90aGVyIGNvdW50cmllc1xuICAgICAgICAgICAgICBpZih0aGlzLmZpbHRlckRhdGEuY291bnRyeSAmJiBpdGVtLmNvdW50cnlDb2RlICE9PSB0aGlzLmZpbHRlckRhdGEuY291bnRyeSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gSWYgd2UgbWFkZSBpdCB0aGlzIGZhciwgYWRkIHRvIGxpc3RcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9KTtcblxuICAgIH0sXG4gICAgc2VsZWN0ZWRWYWx1ZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNlbGVjdGVkO1xuICAgIH1cbiAgfSxcbiAgbWV0aG9kczoge1xuICAgIC8vIEZvcm1hdCBkYXRhIGZvciBmaWx0ZXJzXG4gICAgZmlsdGVyc0NoYW5nZWQoZGF0YSkge1xuICAgICAgY29uc3QgZGF0ZUZvcm1hdCA9ICdZLU1NLUREJztcbiAgICAgIGNvbnN0IGZpbHRlckRhdGEgPSB7XG4gICAgICAgIHNlcmlhbE51bWJlcjogZGF0YS5zZXJpYWxOdW1iZXIsXG4gICAgICAgIGJhc2VNb2RlbDogIWRhdGEuYmFzZU1vZGVsID8gJycgOiBkYXRhLmJhc2VNb2RlbCxcbiAgICAgICAgY291bnRyeTogIWRhdGEuY291bnRyeSA/ICcnIDogZGF0YS5jb3VudHJ5LFxuICAgICAgICBkZWxpdmVyeURhdGVTdGFydDogJycsXG4gICAgICAgIGRlbGl2ZXJ5RGF0ZUVuZDogJycsXG4gICAgICAgIGRhdGVBZGRlZFN0YXJ0OiAnJyxcbiAgICAgICAgZGF0ZUFkZGVkRW5kOiAnJ1xuICAgICAgfTtcblxuICAgICAgaWYoZGF0YS5kZWxpdmVyeURhdGVTdGFydCkge1xuICAgICAgICBjb25zdCBkYXRlID0gbW9tZW50KGRhdGEuZGVsaXZlcnlEYXRlU3RhcnQpLmZvcm1hdChkYXRlRm9ybWF0KTtcbiAgICAgICAgZmlsdGVyRGF0YS5kZWxpdmVyeURhdGVTdGFydCA9IGRhdGU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmaWx0ZXJEYXRhLmRlbGl2ZXJ5RGF0ZVN0YXJ0ID0gJyc7XG4gICAgICB9XG5cbiAgICAgIGlmKGRhdGEuZGVsaXZlcnlEYXRlRW5kKSB7XG4gICAgICAgIGNvbnN0IGRhdGUgPSBtb21lbnQoZGF0YS5kZWxpdmVyeURhdGVFbmQpLmZvcm1hdChkYXRlRm9ybWF0KTtcbiAgICAgICAgZmlsdGVyRGF0YS5kZWxpdmVyeURhdGVFbmQgPSBkYXRlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZmlsdGVyRGF0YS5kZWxpdmVyeURhdGVFbmQgPSAnJztcbiAgICAgIH1cblxuICAgICAgaWYoZGF0YS5kYXRlQWRkZWRTdGFydCkge1xuICAgICAgICBjb25zdCBkYXRlID0gbW9tZW50KGRhdGEuZGF0ZUFkZGVkU3RhcnQpLmZvcm1hdChkYXRlRm9ybWF0KTtcbiAgICAgICAgZmlsdGVyRGF0YS5kYXRlQWRkZWRTdGFydCA9IGRhdGU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmaWx0ZXJEYXRhLmRhdGVBZGRlZFN0YXJ0ID0gJyc7XG4gICAgICB9XG5cbiAgICAgIGlmKGRhdGEuZGF0ZUFkZGVkRW5kKSB7XG4gICAgICAgIGNvbnN0IGRhdGUgPSBtb21lbnQoZGF0YS5kYXRlQWRkZWRFbmQpLmZvcm1hdChkYXRlRm9ybWF0KTtcbiAgICAgICAgZmlsdGVyRGF0YS5kYXRlQWRkZWRFbmQgPSBkYXRlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZmlsdGVyRGF0YS5kYXRlQWRkZWRFbmQgPSAnJztcbiAgICAgIH1cblxuICAgICAgdGhpcy51cGRhdGVGaWx0ZXJEYXRhKGZpbHRlckRhdGEpO1xuICAgICAgdGhpcy51cGRhdGVVcmwoKTtcbiAgICAgIHRoaXMuJHJlZnMudGFibGUuc2V0UGFnZSgxKTtcblxuICAgIH0sXG4gICAgdXBkYXRlRmlsdGVyRGF0YShkYXRhKSB7XG4gICAgICBPYmplY3Qua2V5cyhkYXRhKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgIHRoaXMuZmlsdGVyRGF0YVtrZXldID0gZGF0YVtrZXldO1xuICAgICAgfSk7XG4gICAgfSxcbiAgICB1cGRhdGVVcmwoKSB7XG4gICAgICBjb25zdCBhY3RpdmVGaWx0ZXJzID0ge307XG5cbiAgICAgIC8vIE9ubHkgaW5jbHVkZSBmaWx0ZXJzIHdpdGggdmFsdWVzXG4gICAgICBPYmplY3Qua2V5cyh0aGlzLmZpbHRlckRhdGEpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmZpbHRlckRhdGFba2V5XTtcbiAgICAgICAgaWYodmFsdWUgIT09ICcnKSB7XG4gICAgICAgICAgYWN0aXZlRmlsdGVyc1trZXldID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBpZih0aGlzLmZpbHRlcmluZ0VuYWJsZWQpIHtcbiAgICAgICAgaWYoT2JqZWN0LmtleXMoYWN0aXZlRmlsdGVycykubGVuZ3RoKSB7XG4gICAgICAgICAgdGhpcy4kcm91dGVyLnJlcGxhY2Uoe3F1ZXJ5OiB7IGZpbHRlcnM6IHF1ZXJ5U3RyaW5nLnN0cmluZ2lmeShhY3RpdmVGaWx0ZXJzKSB9fSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8uY2F0Y2ggZXJyb3IgZW1wdHlpbmcgaXMgZHVlIHZ1ZS1yb3V0ZXIgY29yZSBjaGFuZ2VzLlxuICAgICAgICAgIC8vIHByZXZlbnRzIGZhdWx0eSBlcnJvciBcIk5hdmlnYXRpb25EdXBsaWNhdGVkIE5hdmlnYXRpbmcgdG8gY3VycmVudCBsb2NhdGlvbiAo4oCcL+KAnCkgaXMgbm90IGFsbG93ZWRcIlxuICAgICAgICAgIC8vIFNlZSAtPiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy81NzgzNzc1OC9uYXZpZ2F0aW9uZHVwbGljYXRlZC1uYXZpZ2F0aW5nLXRvLWN1cnJlbnQtbG9jYXRpb24tc2VhcmNoLWlzLW5vdC1hbGxvd2VkXG4gICAgICAgICAgdGhpcy4kcm91dGVyLnJlcGxhY2Uoe3F1ZXJ5OiB7fX0pLmNhdGNoKGVyciA9PiB7fSk7XG4gICAgICAgIH07XG5cbiAgICAgIH1cbiAgICB9LFxuICAgIHNob3dTZWFyY2goKXtcbiAgICAgICQoJy5zaWRlYmFyU2VhcmNoJykudG9nZ2xlQ2xhc3MoJ3Nob3ctc2VhcmNoJyk7XG4gICAgfVxuICB9LFxuICBtb3VudGVkOiBmdW5jdGlvbiAoKSB7XG4gICAgLy8gQ2hlY2sgaWYgd2UncmUgbG9hZGluZyB0aGlzIHZpZXcgd2l0aCBhY3RpdmUgZmlsdGVyc1xuICAgIGNvbnN0IGZpbHRlcnNTZXJpYWxpemVkID0gdGhpcy4kcm91dGUucXVlcnkuZmlsdGVycztcblxuICAgIGlmKGZpbHRlcnNTZXJpYWxpemVkKSB7XG4gICAgICBjb25zdCBmaWx0ZXJzID0gcXVlcnlTdHJpbmcucGFyc2UoZmlsdGVyc1NlcmlhbGl6ZWQpO1xuICAgICAgaWYoZmlsdGVycykge1xuICAgICAgICB0aGlzLnVwZGF0ZUZpbHRlckRhdGEoZmlsdGVycyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5maWx0ZXJpbmdFbmFibGVkID0gdHJ1ZTtcblxuICAgIHRoaXMuJHN0b3JlLmRpc3BhdGNoKCdnZXRDdXN0b21lck1hY2hpbmVzJywgdGhpcy4kc3RvcmUuc3RhdGUudXNlci5jb21wYW55LmlkKVxuICAgICAgICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAkKCcuc3Bpbm5lcicpLmhpZGUoKTtcbiAgICAgICAgICAgICAgfSk7XG5cbiAgICB0aGlzLiRzdG9yZS5jb21taXQoJ3NldFN1YmhlYWRlcicsIHtcbiAgICAgIHN1YnRpdGxlOiAnJyxcbiAgICAgIHRpdGxlOiB0aGlzLmxvYygnY29tcG9uZW50cy5jdXN0b21lck1hY2hpbmVzLnN1YmhlYWRlclRpdGxlJyksXG4gICAgICBkZXNjcmlwdGlvbjogdGhpcy5sb2MoJ2NvbXBvbmVudHMuY3VzdG9tZXJNYWNoaW5lcy5zdWJoZWFkZXJEZXNjcmlwdGlvbicpLFxuICAgICAgc2VhcmNoRW5hYmxlZDogZmFsc2VcbiAgICB9KTtcblxuICAgIGlmKCQod2luZG93KS53aWR0aCgpIDw9IDc2OCl7XG4gICAgICAkKCcuc2hvdy1zZWFyY2gtYnV0dG9uJylcbiAgICAgIC5jbG9zZXN0KCcub3JkZXItMScpXG4gICAgICAuYWRkQ2xhc3MoJ3NlYXJjaC1idXR0b24tcGFyZW50LW1vYmlsZScpO1xuICAgIH1cblxuICAgICQoIHdpbmRvdyApLnJlc2l6ZShmdW5jdGlvbigpIHtcbiAgICAgIGlmKCQod2luZG93KS53aWR0aCgpIDw9IDc2OCl7XG4gICAgICAgICQoJy5zaG93LXNlYXJjaC1idXR0b24nKVxuICAgICAgICAuY2xvc2VzdCgnLm9yZGVyLTEnKVxuICAgICAgICAuYWRkQ2xhc3MoJ3NlYXJjaC1idXR0b24tcGFyZW50LW1vYmlsZScpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgJCgnLnNob3ctc2VhcmNoLWJ1dHRvbicpXG4gICAgICAgIC5jbG9zZXN0KCcub3JkZXItMScpXG4gICAgICAgIC5yZW1vdmVDbGFzcygnc2VhcmNoLWJ1dHRvbi1wYXJlbnQtbW9iaWxlJyk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuPC9zY3JpcHQ+XG4iLCI8dGVtcGxhdGU+XG4gIDxkaXY+XG4gICAgPGRpdiB2LWlmPVwiYWNjb3VudFVwZGF0ZWRcIj5cbiAgICAgIDxoMiB2LWh0bWw9XCJsb2MoJ2NvbXBvbmVudHMuZWRpdEFjY291bnQuYWNjb3VudFVwZGF0ZWQnKVwiPjwvaDI+XG4gICAgPC9kaXY+XG4gICAgPGRpdiB2LWVsc2U+XG4gICAgICA8di1mb3JtIDpmaWVsZHM9XCJmaWVsZHNcIiA6Zm9ybS1kYXRhPVwiZm9ybURhdGFcIiA6Zm9ybS1lcnJvcnM9XCJmb3JtRXJyb3JzXCI+XG4gICAgICAgIDxkaXYgc2xvdD1cImJ1dHRvbnNcIiBjbGFzcz1cInYtZm9ybS1idXR0b24tZGl2XCI+XG4gICAgICAgICAgPGJ1dHRvbiA6ZGlzYWJsZWQ9XCJzZW5kRGlzYWJsZWRcIiB2LW9uOmNsaWNrPVwidXBkYXRlXCIgdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwiYnRuIGJ0bi0td2hpdGVcIj57e2xvYygndXBkYXRlSW5mb3JtYXRpb24nKX19PC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC92LWZvcm0+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cblxuaW1wb3J0IFZGb3JtIGZyb20gJy4vdi1mb3JtLnZ1ZSc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgY29tcG9uZW50czoge1xuICAgICd2LWZvcm0nOiBWRm9ybVxuICB9LFxuICBuYW1lOiAnVmlld0VkaXRBY2NvdW50JyxcbiAgZGF0YTogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB7XG4gICAgICBmb3JtRXJyb3JzOiB7fSxcbiAgICAgIGZvcm1EYXRhOiB7fSxcbiAgICAgIGFjY291bnRVcGRhdGVkOiBmYWxzZSxcbiAgICAgIHNlbmREaXNhYmxlZDogZmFsc2VcbiAgICB9XG4gIH0sXG4gIGNvbXB1dGVkOiB7XG4gICAgZmllbGRzKCkge1xuICAgICAgaWYodGhpcy4kc3RvcmUuZ2V0dGVycy5jb3VudHJ5U2VsZWN0T3B0aW9ucykge1xuICAgICAgICByZXR1cm4gW3tcbiAgICAgICAgICBuYW1lOiAnaWQnLFxuICAgICAgICAgIHZhbHVlOiB0aGlzLiRzdG9yZS5zdGF0ZS51c2VyLmluZm8uaWQsXG4gICAgICAgICAgbGFiZWw6IHRoaXMubG9jKCdmaXJzdE5hbWUnKSxcbiAgICAgICAgICB0eXBlOiAnaGlkZGVuJ1xuICAgICAgICB9LCB7XG4gICAgICAgICAgbmFtZTogJ3JvbGUnLFxuICAgICAgICAgIHZhbHVlOiB0aGlzLiRzdG9yZS5zdGF0ZS51c2VyLnJvbGUsXG4gICAgICAgICAgbGFiZWw6IHRoaXMubG9jKCdyb2xlJyksXG4gICAgICAgICAgdHlwZTogJ2hpZGRlbidcbiAgICAgICAgfSwge1xuICAgICAgICAgIG5hbWU6ICdmaXJzdE5hbWUnLFxuICAgICAgICAgIHZhbHVlOiB0aGlzLiRzdG9yZS5zdGF0ZS51c2VyLmluZm8uZmlyc3ROYW1lLFxuICAgICAgICAgIGxhYmVsOiB0aGlzLmxvYygnZmlyc3ROYW1lJyksXG4gICAgICAgICAgdHlwZTogJ3RleHQnXG4gICAgICAgIH0sIHtcbiAgICAgICAgICBuYW1lOiAnbGFzdE5hbWUnLFxuICAgICAgICAgIHZhbHVlOiB0aGlzLiRzdG9yZS5zdGF0ZS51c2VyLmluZm8ubGFzdE5hbWUsXG4gICAgICAgICAgbGFiZWw6IHRoaXMubG9jKCdsYXN0TmFtZScpLFxuICAgICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgICAgfSwge1xuICAgICAgICAgIG5hbWU6ICdwaG9uZScsXG4gICAgICAgICAgdmFsdWU6IHRoaXMuJHN0b3JlLnN0YXRlLnVzZXIuaW5mby5waG9uZSxcbiAgICAgICAgICBsYWJlbDogdGhpcy5sb2MoJ3Bob25lJyksXG4gICAgICAgICAgdHlwZTogJ3RleHQnXG4gICAgICAgIH0sIHtcbiAgICAgICAgICBuYW1lOiAnY291bnRyeScsXG4gICAgICAgICAgdmFsdWU6IHRoaXMuJHN0b3JlLnN0YXRlLnVzZXIuaW5mby5jb3VudHJ5ICYmIHRoaXMuJHN0b3JlLnN0YXRlLnVzZXIuaW5mby5jb3VudHJ5LmNvdW50cnlDb2RlIHx8ICcnLCAvLyBVc2VyIGN1cnJlbnQgdXNlciBjb3VudHJ5IGFzIGEgZGVmYXVsdFxuICAgICAgICAgIGxhYmVsOiB0aGlzLmxvYygnY291bnRyeScpLFxuICAgICAgICAgIG9wdGlvbnM6IHRoaXMuJHN0b3JlLmdldHRlcnMuY291bnRyeVNlbGVjdE9wdGlvbnMsXG4gICAgICAgICAgdHlwZTogJ3NlbGVjdCdcbiAgICAgICAgfV07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBbXTtcbiAgICB9LFxuICB9LFxuICBtZXRob2RzOiB7XG4gICAgYXN5bmMgdXBkYXRlKCkge1xuICAgICAgdGhpcy5zZW5kRGlzYWJsZWQgPSB0cnVlO1xuXG4gICAgICByZXR1cm4gdGhpcy4kYXBpLnVwZGF0ZVVzZXIodGhpcy5mb3JtRGF0YS5pZCwgdGhpcy5mb3JtRGF0YSkudGhlbihyZXMgPT4ge1xuICAgICAgICB0aGlzLnNlbmREaXNhYmxlZCA9IGZhbHNlO1xuXG4gICAgICAgIC8vIEVycm9ycyBpbiBmb3JtXG4gICAgICAgIGlmKHJlcy5jb2RlID09PSA0MDApIHtcbiAgICAgICAgICB0aGlzLmZvcm1FcnJvcnMgPSByZXMucmVzdWx0LmZpZWxkcztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKHJlcy5jb2RlID09PSAyMDApIHtcbiAgICAgICAgICB0aGlzLiRzdG9yZS5jb21taXQoJ3NldEN1cnJlbnRVc2VyJywgcmVzLnJlc3VsdC51c2VyKTtcbiAgICAgICAgICB0aGlzLmFjY291bnRVcGRhdGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICB9XG4gIH0sXG4gIG1vdW50ZWQgKCkge1xuICAgIHRoaXMuJHN0b3JlLmRpc3BhdGNoKCdnZXRDb3VudHJpZXMnKTtcbiAgfVxufVxuPC9zY3JpcHQ+XG4iLCI8dGVtcGxhdGU+XG4gIDxkaXY+XG4gICAgPGRpdiB2LWlmPVwicGFzc3dvcmRTZW50XCI+XG4gICAgICB7e2xvYygnY29tcG9uZW50cy5mb3Jnb3R0ZW5QYXNzd29yZC5wYXNzd29yZFNlbnQnKX19XG4gICAgPC9kaXY+XG4gICAgPGRpdiB2LWVsc2U+XG4gICAgICA8di1mb3JtIDpmaWVsZHM9XCJmaWVsZHNcIiA6Zm9ybS1kYXRhPVwiZm9ybURhdGFcIiA6Zm9ybS1lcnJvcnM9XCJmb3JtRXJyb3JzXCI+XG4gICAgICAgIDxkaXYgc2xvdD1cImJ1dHRvbnNcIj5cbiAgICAgICAgICA8YnV0dG9uIDpkaXNhYmxlZD1cInNlbmREaXNhYmxlZFwiIHR5cGU9XCJzdWJtaXRcIiB2LW9uOmNsaWNrPVwic2VuZFwiIGNsYXNzPVwiYnRuIGJ0bi0td2hpdGVcIj57e2xvYygnb3JkZXJOZXdQYXNzd29yZCcpfX08L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L3YtZm9ybT5cblxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5cbmltcG9ydCBWRm9ybSBmcm9tICcuL3YtZm9ybS52dWUnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGNvbXBvbmVudHM6IHtcbiAgICAndi1mb3JtJzogVkZvcm1cbiAgfSxcbiAgbmFtZTogJ1ZpZXdGb3Jnb3RQYXNzd29yZCcsXG4gIGRhdGE6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZm9ybUVycm9yczoge30sXG4gICAgICBmb3JtRGF0YToge30sXG4gICAgICBwYXNzd29yZFNlbnQ6IGZhbHNlLFxuICAgICAgdG9rZW46IG51bGwsXG4gICAgICBzZW5kRGlzYWJsZWQ6IGZhbHNlXG4gICAgfVxuICB9LFxuICBjb21wdXRlZDoge1xuICAgIGZpZWxkcygpIHtcbiAgICAgIHJldHVybiBbe1xuICAgICAgICBuYW1lOiAndG9rZW4nLFxuICAgICAgICB2YWx1ZTogJycsXG4gICAgICAgIGxhYmVsOiB0aGlzLmxvYygndG9rZW4nKSxcbiAgICAgICAgdHlwZTogJ2hpZGRlbidcbiAgICAgIH0sIHtcbiAgICAgICAgbmFtZTogJ3VzZXJuYW1lJyxcbiAgICAgICAgdmFsdWU6ICcnLFxuICAgICAgICBsYWJlbDogdGhpcy5sb2MoJ3VzZXJuYW1lJyksXG4gICAgICAgIHR5cGU6ICd0ZXh0J1xuICAgICAgfV07XG4gICAgfSxcbiAgfSxcbiAgbWV0aG9kczoge1xuICAgIGFzeW5jIHNlbmQoKSB7XG4gICAgICBjb25zdCBzZWxmID0gdGhpcztcblxuICAgICAgdGhpcy5zZW5kRGlzYWJsZWQgPSB0cnVlO1xuXG4gICAgICBpZighdGhpcy50b2tlbikge1xuICAgICAgICBjb25zdCB0b2tlblJlcyA9IGF3YWl0IHRoaXMuJGFwaS5nZXRUb2tlbigpO1xuICAgICAgICBpZih0b2tlblJlcy5jb2RlID09PSAyMDApIHtcbiAgICAgICAgICB0aGlzLnRva2VuID0gdG9rZW5SZXMucmVzdWx0LnRva2VuO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLiRhcGkuZm9yZ290UGFzc3dvcmQoe1xuICAgICAgICB0b2tlbjogdGhpcy50b2tlbixcbiAgICAgICAgdXNlcm5hbWU6IHRoaXMuZm9ybURhdGEudXNlcm5hbWVcbiAgICAgIH0pXG4gICAgICAudGhlbihyZXMgPT4ge1xuICAgICAgICB0aGlzLnNlbmREaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLnRva2VuID0gJyc7XG5cbiAgICAgICAgLy8gRXJyb3JzIGluIGZvcm1cbiAgICAgICAgaWYocmVzLmNvZGUgPT09IDQwMCkge1xuICAgICAgICAgIHRoaXMuZm9ybUVycm9ycyA9IHJlcy5yZXN1bHQuZmllbGRzO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYocmVzLmNvZGUgPT09IDIwMCkge1xuICAgICAgICAgIHRoaXMucGFzc3dvcmRTZW50ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9LFxuICBtb3VudGVkOiBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy4kYXBpLmdldFRva2VuKCkudGhlbihyZXMgPT4ge1xuICAgICAgaWYocmVzLmNvZGUgPT09IDIwMCkge1xuICAgICAgICB0aGlzLnRva2VuID0gcmVzLnJlc3VsdC50b2tlbjtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLiRzdG9yZS5jb21taXQoJ3NldFN1YmhlYWRlcicsIHtcbiAgICAgIHN1YnRpdGxlOiAnJyxcbiAgICAgIHRpdGxlOiB0aGlzLmxvYygnY29tcG9uZW50cy5mb3Jnb3R0ZW5QYXNzd29yZC5zdWJoZWFkZXJUaXRsZScpLFxuICAgICAgZGVzY3JpcHRpb246ICcnLFxuICAgICAgc2VhcmNoRW5hYmxlZDogZmFsc2VcbiAgICB9KTtcbiAgfVxufVxuPC9zY3JpcHQ+XG4iLCI8dGVtcGxhdGU+XG4gIDxkaXY+XG4gICAgPHAgdi1pZj1cImludmFsaWRUb2tlblwiIHYtaHRtbD1cImxvYygnY29tcG9uZW50cy51cGRhdGVQYXNzd29yZC50b2tlbkV4cGlyZWQnKVwiPjwvcD5cbiAgICA8ZGl2IHYtZWxzZT5cbiAgICAgIDxkaXYgdi1pZj1cInBhc3N3b3JkVXBkYXRlZFwiPlxuICAgICAgICA8cCB2LWh0bWw9XCJsb2MoJ2NvbXBvbmVudHMudXBkYXRlUGFzc3dvcmQucGFzc3dvcmRVcGRhdGVkJylcIj48L3A+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgdi1lbHNlPlxuICAgICAgICA8di1mb3JtIDpmaWVsZHM9XCJmaWVsZHNcIiA6Zm9ybS1kYXRhPVwiZm9ybURhdGFcIiA6Zm9ybS1lcnJvcnM9XCJmb3JtRXJyb3JzXCI+XG4gICAgICAgICAgPGRpdiBzbG90PVwiYnV0dG9uc1wiPlxuICAgICAgICAgICAgPGJ1dHRvbiA6ZGlzYWJsZWQ9XCJzZW5kRGlzYWJsZWRcIiB0eXBlPVwic3VibWl0XCIgdi1vbjpjbGljaz1cInNlbmRcIiBjbGFzcz1cImJ0biBidG4tLXdoaXRlXCI+e3tsb2MoJ3VwZGF0ZVBhc3N3b3JkJyl9fTwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L3YtZm9ybT5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5cbmltcG9ydCBWRm9ybSBmcm9tICcuL3YtZm9ybS52dWUnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGNvbXBvbmVudHM6IHtcbiAgICAndi1mb3JtJzogVkZvcm1cbiAgfSxcbiAgbmFtZTogJ1ZpZXdGb3Jnb3RQYXNzd29yZCcsXG4gIGRhdGE6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZm9ybUVycm9yczoge30sXG4gICAgICBmb3JtRGF0YToge30sXG4gICAgICBwYXNzd29yZFVwZGF0ZWQ6IGZhbHNlLFxuICAgICAgdG9rZW46IG51bGwsXG4gICAgICBzZW5kRGlzYWJsZWQ6IGZhbHNlLFxuICAgICAgcmVzZXRUb2tlbjogJycsXG4gICAgICB0b2tlbkV4cGlyZWQ6IGZhbHNlXG4gICAgfVxuICB9LFxuICBjb21wdXRlZDoge1xuICAgIGludmFsaWRUb2tlbigpIHtcbiAgICAgIHJldHVybiAhdGhpcy5yZXNldFRva2VuIHx8wqB0aGlzLnRva2VuRXhwaXJlZDtcbiAgICB9LFxuICAgIGZpZWxkcygpIHtcbiAgICAgIHJldHVybiBbe1xuICAgICAgICBuYW1lOiAndG9rZW4nLFxuICAgICAgICB2YWx1ZTogJycsXG4gICAgICAgIGxhYmVsOiB0aGlzLnJlc2V0VG9rZW4sXG4gICAgICAgIHR5cGU6ICdoaWRkZW4nXG4gICAgICB9LCB7XG4gICAgICAgIG5hbWU6ICduZXdQYXNzd29yZCcsXG4gICAgICAgIHZhbHVlOiAnJyxcbiAgICAgICAgbGFiZWw6IHRoaXMubG9jKCduZXdQYXNzd29yZCcpLFxuICAgICAgICB0eXBlOiAncGFzc3dvcmQtc3RyZW5ndGgnLFxuICAgICAgfSwge1xuICAgICAgICBuYW1lOiAnbmV3UGFzc3dvcmRDb25maXJtJyxcbiAgICAgICAgdmFsdWU6ICcnLFxuICAgICAgICBsYWJlbDogdGhpcy5sb2MoJ25ld1Bhc3N3b3JkQWdhaW4nKSxcbiAgICAgICAgdHlwZTogJ3Bhc3N3b3JkJ1xuICAgICAgfV07XG4gICAgfSxcbiAgfSxcbiAgbWV0aG9kczoge1xuICAgIGFzeW5jIHNlbmQoKSB7XG4gICAgICBjb25zdCBzZWxmID0gdGhpcztcblxuICAgICAgdGhpcy5zZW5kRGlzYWJsZWQgPSB0cnVlO1xuXG4gICAgICByZXR1cm4gdGhpcy4kYXBpLmNoYW5nZVBhc3N3b3JkKHtcbiAgICAgICAgdG9rZW46IHRoaXMucmVzZXRUb2tlbixcbiAgICAgICAgbmV3UGFzc3dvcmQ6IHRoaXMuZm9ybURhdGEubmV3UGFzc3dvcmQsXG4gICAgICAgIG5ld1Bhc3N3b3JkQ29uZmlybTogdGhpcy5mb3JtRGF0YS5uZXdQYXNzd29yZENvbmZpcm1cbiAgICAgIH0pXG4gICAgICAudGhlbihyZXMgPT4ge1xuICAgICAgICB0aGlzLnNlbmREaXNhYmxlZCA9IGZhbHNlO1xuXG4gICAgICAgIC8vIEVycm9ycyBpbiBmb3JtXG4gICAgICAgIGlmKHJlcy5jb2RlID09PSA0MDApIHtcbiAgICAgICAgICB0aGlzLmZvcm1FcnJvcnMgPSByZXMucmVzdWx0LmZpZWxkcztcblxuICAgICAgICAgIGlmKHJlcy5yZXN1bHQuZmllbGRzLnRva2VuKSB7XG4gICAgICAgICAgICB0aGlzLnRva2VuRXhwaXJlZCA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYocmVzLmNvZGUgPT09IDIwMCkge1xuICAgICAgICAgIHRoaXMucGFzc3dvcmRVcGRhdGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9LFxuICBtb3VudGVkOiBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5yZXNldFRva2VuID0gdGhpcy4kcm91dGUucXVlcnkucmVzZXRUb2tlbjtcbiAgfVxufVxuPC9zY3JpcHQ+XG4iLCI8dGVtcGxhdGU+XG4gIDx0aGUtc2lkZWJhci1sYXlvdXQ+XG4gICAgPGRpdiBjbGFzcz1cInVzZXItc2V0dGluZ3Mtc2lkZWJhclwiIHNsb3Q9XCJzaWRlYmFyXCI+XG4gICAgICA8cm91dGVyLWxpbmsgY2xhc3M9XCJ2LXJvdXRlci1saW5rXCIgOnRvPVwieyBuYW1lOiAnY2hhbmdlLXBhc3N3b3JkJ31cIj57e2xvYygnY2hhbmdlUGFzc3dvcmQnKX19PC9yb3V0ZXItbGluaz48YnI+XG4gICAgICA8cm91dGVyLWxpbmsgY2xhc3M9XCJ2LXJvdXRlci1saW5rXCIgOnRvPVwieyBuYW1lOiAnZWRpdC1hY2NvdW50J31cIj57e2xvYygnZWRpdEFjY291bnRJbmZvcm1hdGlvbicpfX08L3JvdXRlci1saW5rPlxuICAgIDwvZGl2PlxuICAgIDxyb3V0ZXItdmlldz48L3JvdXRlci12aWV3PlxuICA8L3RoZS1zaWRlYmFyLWxheW91dD5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbmFtZTogJ1ZpZXdVc2VyU2V0dGluZ3MnLFxuICBkYXRhOiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHtcbiAgICB9XG4gIH0sXG4gIGNvbXB1dGVkOiB7XG4gIH0sXG4gIG1ldGhvZHM6IHtcbiAgfSxcbiAgbW91bnRlZDogZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuJHN0b3JlLmNvbW1pdCgnc2V0U3ViaGVhZGVyJywge1xuICAgICAgc3VidGl0bGU6ICcnLFxuICAgICAgdGl0bGU6ICcnLFxuICAgICAgZGVzY3JpcHRpb246ICcnLFxuICAgICAgc2VhcmNoRW5hYmxlZDogZmFsc2VcbiAgICB9KTtcbiAgfVxufVxuPC9zY3JpcHQ+XG5cbjxzdHlsZT5cbjwvc3R5bGU+XG4iLCJcbjx0ZW1wbGF0ZT5cbiAgPHRoZS0xLWNvbHVtbi1sYXlvdXQgdi1pZj1cIndhcnJhbnR5UmVnaXN0cmF0aW9uXCI+XG4gICAgPGgyPlxuICAgICAge3tsb2MoJ3dhcnJhbnR5UmVnaXN0cmF0aW9uJyl9fVxuICAgICAgPHNwYW4gc3R5bGU9XCJmb250LXNpemU6IDE4cHg7IGZvbnQtd2VpZ2h0OiA0MDA7IGNvbG9yOiByZ2IoMTMwLCAxMzAsIDEzMCk7XCI+XG4gICAgICAgICh7e3dhcnJhbnR5UmVnaXN0cmF0aW9uLnV1aWR9fSlcbiAgICAgIDwvc3Bhbj5cbiAgICA8L2gyPlxuXG4gICAgPGgzPnt7bG9jKCdtYWNoaW5lSW5mb3JtYXRpb24nKX19PC9oMz48aHI+XG4gICAgPHA+XG4gICAgICA8c3Ryb25nPnt7bG9jKCdzZXJpYWxOdW1iZXInKX19PC9zdHJvbmc+OiB7e3dhcnJhbnR5UmVnaXN0cmF0aW9uLnNlcmlhbE51bWJlcn19PGJyIC8+XG4gICAgICA8c3Ryb25nPnt7bG9jKCdtYWNoaW5lTW9kZWwnKX19PC9zdHJvbmc+OiB7e3dhcnJhbnR5UmVnaXN0cmF0aW9uLm1hY2hpbmV9fTxiciAvPlxuICAgICAgPHN0cm9uZz57e2xvYygnZGVsaXZlcnlEYXRlU29sZCcpfX08L3N0cm9uZz46IHt7d2FycmFudHlSZWdpc3RyYXRpb24uZGVsaXZlcnlEYXRlRm9ybWF0dGVkfX08YnIgLz5cbiAgICA8L3A+XG5cbiAgICA8aDM+e3tsb2MoJ2N1c3RvbWVySW5mb3JtYXRpb24nKX19PC9oMz4gPGhyPlxuICAgIDxwPlxuICAgICAgPHN0cm9uZz57e2xvYygnZmlyc3ROYW1lJyl9fTwvc3Ryb25nPjoge3t3YXJyYW50eVJlZ2lzdHJhdGlvbi5jdXN0b21lckZpcnN0bmFtZX19PGJyIC8+XG4gICAgICA8c3Ryb25nPnt7bG9jKCdsYXN0TmFtZScpfX08L3N0cm9uZz46IHt7d2FycmFudHlSZWdpc3RyYXRpb24uY3VzdG9tZXJMYXN0bmFtZX19PGJyIC8+XG4gICAgICA8c3Ryb25nPnt7bG9jKCdlbWFpbCcpfX08L3N0cm9uZz46IHt7d2FycmFudHlSZWdpc3RyYXRpb24uY3VzdG9tZXJFbWFpbH19PGJyIC8+XG4gICAgICA8c3BhbiB2LWlmPVwid2FycmFudHlSZWdpc3RyYXRpb24uY3VzdG9tZXJQaG9uZVwiPjxzdHJvbmc+e3tsb2MoJ3Bob25lJyl9fTwvc3Ryb25nPjoge3t3YXJyYW50eVJlZ2lzdHJhdGlvbi5jdXN0b21lclBob25lfX08YnIgLz48L3NwYW4+XG4gICAgICA8c3BhbiB2LWlmPVwid2FycmFudHlSZWdpc3RyYXRpb24uY3VzdG9tZXJOdW1iZXJcIj48c3Ryb25nPnt7bG9jKCd3YXJyYW50eUN1c3RvbWVyTnVtYmVyJyl9fTwvc3Ryb25nPjoge3t3YXJyYW50eVJlZ2lzdHJhdGlvbi5jdXN0b21lck51bWJlcn19PGJyIC8+PC9zcGFuPlxuICAgICAgPHNwYW4gdi1pZj1cIndhcnJhbnR5UmVnaXN0cmF0aW9uLmN1c3RvbWVyQ29tcGFueU51bWJlclwiPjxzdHJvbmc+e3tsb2MoJ2NvbXBhbnlOdW1iZXInKX19PC9zdHJvbmc+OiB7e3dhcnJhbnR5UmVnaXN0cmF0aW9uLmN1c3RvbWVyQ29tcGFueU51bWJlcn19PGJyIC8+PC9zcGFuPlxuICAgIDwvcD5cblxuICAgIDxoMz57e2xvYygnc2VsbGVySW5mb3JtYXRpb24nKX19PC9oMz4gPGhyPlxuICAgIDxwPlxuICAgICAgPHN0cm9uZz57e2xvYygnZmlyc3ROYW1lJyl9fTwvc3Ryb25nPjoge3t3YXJyYW50eVJlZ2lzdHJhdGlvbi5zZWxsZXJGaXJzdG5hbWV9fTxiciAvPlxuICAgICAgPHN0cm9uZz57e2xvYygnbGFzdE5hbWUnKX19PC9zdHJvbmc+OiB7e3dhcnJhbnR5UmVnaXN0cmF0aW9uLnNlbGxlckxhc3RuYW1lfX08YnIgLz5cbiAgICAgIDxzdHJvbmc+e3tsb2MoJ2VtYWlsJyl9fTwvc3Ryb25nPjoge3t3YXJyYW50eVJlZ2lzdHJhdGlvbi5zZWxsZXJFbWFpbH19PGJyIC8+XG4gICAgICA8c3Ryb25nPnt7bG9jKCdzdG9yZScpfX08L3N0cm9uZz46IHt7d2FycmFudHlSZWdpc3RyYXRpb24uc2VsbGVyU3RvcmV9fTxiciAvPlxuICAgICAgPHNwYW4gdi1pZj1cIndhcnJhbnR5UmVnaXN0cmF0aW9uLnNlbGxlckJ1c2luZXNzSWRcIj48c3Ryb25nPnt7bG9jKCdidXNpbmVzc0lkJyl9fTwvc3Ryb25nPjoge3t3YXJyYW50eVJlZ2lzdHJhdGlvbi5zZWxsZXJCdXNpbmVzc0lkfX08YnIgLz48L3NwYW4+XG4gICAgICA8c3BhbiB2LWlmPVwid2FycmFudHlSZWdpc3RyYXRpb24uc2VsbGVyU3RyZWV0QWRkcmVzc1wiPjxzdHJvbmc+e3tsb2MoJ2FkZHJlc3MnKX19PC9zdHJvbmc+OiB7e3dhcnJhbnR5UmVnaXN0cmF0aW9uLnNlbGxlclN0cmVldEFkZHJlc3N9fTxiciAvPjwvc3Bhbj5cbiAgICAgIDxzcGFuIHYtaWY9XCJ3YXJyYW50eVJlZ2lzdHJhdGlvbi5zZWxsZXJQb3N0YWxDb2RlXCI+PHN0cm9uZz57e2xvYygncG9zdGFsQ29kZScpfX08L3N0cm9uZz46IHt7d2FycmFudHlSZWdpc3RyYXRpb24uc2VsbGVyUG9zdGFsQ29kZX19PGJyIC8+PC9zcGFuPlxuICAgICAgPHNwYW4gdi1pZj1cIndhcnJhbnR5UmVnaXN0cmF0aW9uLnNlbGxlclBvc3RhbEFyZWFcIj48c3Ryb25nPnt7bG9jKCdwb3N0T2ZmaWNlJyl9fTwvc3Ryb25nPjoge3t3YXJyYW50eVJlZ2lzdHJhdGlvbi5zZWxsZXJQb3N0YWxBcmVhfX08YnIgLz48L3NwYW4+XG4gICAgPC9wPlxuXG4gICAgPGgzPnt7bG9jKCdyZWNlaXZlZFdhcnJhbnR5RG9jdW1lbnRzJyl9fTwvaDM+PGhyPlxuICAgIDxwPlxuICAgICAgPHN0cm9uZz57e2xvYygnY29tcG9uZW50cy53YXJyYW50eVJlZ2lzdHJhdGlvbnMud2FycmFudHlNYW51YWwnKX19PC9zdHJvbmc+OiB7e2xvYygnZm9ybXMucmFkaW8ueWVzJyl9fTxiciAvPlxuICAgICAgPHN0cm9uZz57e2xvYygnY29tcG9uZW50cy53YXJyYW50eVJlZ2lzdHJhdGlvbnMuY2VFRGVjbGFyYXRpb24nKX19PC9zdHJvbmc+OiB7e2xvYygnZm9ybXMucmFkaW8ueWVzJyl9fTxiciAvPlxuICAgICAgPHN0cm9uZz57e2xvYygnY29tcG9uZW50cy53YXJyYW50eVJlZ2lzdHJhdGlvbnMuc3BhcmVQYXJ0c0xpc3QnKX19PC9zdHJvbmc+OiB7e2xvYygnZm9ybXMucmFkaW8ueWVzJyl9fTxiciAvPlxuICAgICAgPHN0cm9uZz57e2xvYygnY29tcG9uZW50cy53YXJyYW50eVJlZ2lzdHJhdGlvbnMubWFpbnRlbmFuY2VCb29rbGV0Jyl9fTwvc3Ryb25nPjoge3tsb2MoJ2Zvcm1zLnJhZGlvLnllcycpfX08YnIgLz5cbiAgICA8L3A+XG5cbiAgICA8aHI+XG4gICAgPHA+XG4gICAgICA8c3Ryb25nPnt7bG9jKCdjb21wb25lbnRzLndhcnJhbnR5UmVnaXN0cmF0aW9ucy5jb250YWN0QWxsb3dlZCcpfX08L3N0cm9uZz46IHt7bG9jKCdmb3Jtcy5yYWRpby55ZXMnKX19PGJyIC8+XG4gICAgPC9wPlxuICAgIDxwPlxuICAgICAgPHN0cm9uZz57e2xvYygnb3JkZXJOZXdzbGV0dGVyJyl9fTwvc3Ryb25nPjoge3t3YXJyYW50eVJlZ2lzdHJhdGlvbi5uZXdzbGV0dGVyVGV4dH19PGJyIC8+XG4gICAgPC9wPlxuXG4gICAgPHAgY2xhc3M9XCJkLXByaW50LW5vbmVcIj48YnIgLz48YSBocmVmPVwiI1wiIHYtb246Y2xpY2s9XCJwcmludFwiPnt7bG9jKCdwcmludERvY3VtZW50Jyl9fTwvYT48L3A+XG5cbiAgPC90aGUtMS1jb2x1bW4tbGF5b3V0PlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cblxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAnVmlld3dhcnJhbnR5UmVnaXN0cmF0aW9uJyxcbiAgZGF0YTogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB7XG4gICAgICB3YXJyYW50eVJlZ2lzdHJhdGlvbklkOiBudWxsXG4gICAgfVxuICB9LFxuICBjb21wdXRlZDoge1xuICAgIHdhcnJhbnR5UmVnaXN0cmF0aW9uKCkge1xuICAgICAgbGV0IHdhcnJhbnR5UmVnaXN0cmF0aW9uRGF0YSA9IHRoaXMuJHN0b3JlLnN0YXRlLndhcnJhbnR5UmVnaXN0cmF0aW9ucy5maWx0ZXIod2FycmFudHlSZWdpc3RyYXRpb24gPT4gd2FycmFudHlSZWdpc3RyYXRpb24udXVpZCA9PT0gdGhpcy53YXJyYW50eVJlZ2lzdHJhdGlvbklkKVswXTtcblxuICAgICAgaWYod2FycmFudHlSZWdpc3RyYXRpb25EYXRhKXtcbiAgICAgICAgd2FycmFudHlSZWdpc3RyYXRpb25EYXRhLm5ld3NsZXR0ZXJUZXh0ID0gd2FycmFudHlSZWdpc3RyYXRpb25EYXRhLm5ld3NsZXR0ZXIgPT0gJzEnID8gdGhpcy5sb2MoJ2Zvcm1zLnJhZGlvLnllcycpIDogdGhpcy5sb2MoJ2Zvcm1zLnJhZGlvLm5vJyk7XG4gICAgICAgIGlmICh3YXJyYW50eVJlZ2lzdHJhdGlvbkRhdGEuZGVsaXZlcnlEYXRlLmZvcm1hdHRlZCkge1xuICAgICAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSh3YXJyYW50eVJlZ2lzdHJhdGlvbkRhdGEuZGVsaXZlcnlEYXRlLmRhdGUpO1xuICAgICAgICAgIGxldCB5ZWFyID0gZGF0ZS5nZXRGdWxsWWVhcigpO1xuICAgICAgICAgIGxldCBtb250aCA9IGRhdGUuZ2V0TW9udGgoKSArIDE7XG4gICAgICAgICAgbW9udGggPSBtb250aC50b1N0cmluZygpO1xuICAgICAgICAgIG1vbnRoID0gbW9udGgubGVuZ3RoID09IDEgPyAnMCcrbW9udGggOiBtb250aDtcbiAgICAgICAgICBsZXQgZGF5ID0gZGF0ZS5nZXREYXRlKCk7XG4gICAgICAgICAgICAgIGRheSA9IGRheS50b1N0cmluZygpO1xuICAgICAgICAgICAgICBkYXkgPSBkYXkubGVuZ3RoID09IDEgPyAnMCcrZGF5IDogZGF5O1xuICAgICAgICAgIHdhcnJhbnR5UmVnaXN0cmF0aW9uRGF0YS5kZWxpdmVyeURhdGVGb3JtYXR0ZWQgPSBgJHt5ZWFyfS8ke21vbnRofS8ke2RheX1gO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB3YXJyYW50eVJlZ2lzdHJhdGlvbkRhdGE7XG4gICAgfSxcbiAgfSxcbiAgbWV0aG9kczoge1xuICAgIHByaW50KGUpIHtcbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHdpbmRvdy5wcmludCgpO1xuICAgIH1cbiAgfSxcbiAgbW91bnRlZCgpIHtcbiAgICAvLyBDaGVjayBpZiB3ZSBoYXZlIHBhcmFtIC9jb21wYW55LzppZCBhbmQgdXNlIHRoYXQgZWxzZSB1c2UgbG9nZ2VkIGluIHVzZXIncyBjb21wYW55IGFzIGRlZmF1bHRcbiAgICB0aGlzLndhcnJhbnR5UmVnaXN0cmF0aW9uSWQgPSB0aGlzLiRyb3V0ZS5wYXJhbXMuaWRcblxuICAgIHRoaXMuJHN0b3JlLmRpc3BhdGNoKCdnZXRXYXJyYW50eVJlZ2lzdHJhdGlvbicsIHRoaXMud2FycmFudHlSZWdpc3RyYXRpb25JZCk7XG5cbiAgICB0aGlzLiRzdG9yZS5jb21taXQoJ3NldFN1YmhlYWRlcicsIHtcbiAgICAgIHN1YnRpdGxlOiAnJyxcbiAgICAgIHRpdGxlOiB0aGlzLmxvYygnY29tcG9uZW50cy53YXJyYW50eVJlZ2lzdHJhdGlvbnMuc3ViaGVhZGVyVGl0bGUnKSxcbiAgICAgIGRlc2NyaXB0aW9uOiAnJyxcbiAgICAgIHNlYXJjaEVuYWJsZWQ6IHRydWVcbiAgICB9KTtcblxuICAgIGxldCBzdWJoZWFkZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdqcy1zdWJoZWFkZXInKTtcbiAgICBpZihzdWJoZWFkZXIubGVuZ3RoKSB7XG4gICAgICBzdWJoZWFkZXIgPSBzdWJoZWFkZXJbMF07XG4gICAgICBzdWJoZWFkZXIuY2xhc3NMaXN0LmFkZCgnZC1wcmludC1ub25lJyk7XG4gICAgfVxuICB9XG59XG5cbjwvc2NyaXB0PlxuIiwiPHRlbXBsYXRlPlxuICA8dGhlLTEtY29sdW1uLWxheW91dD5cbiAgICA8ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXJcIj48YnV0dG9uIHYtb246Y2xpY2s9XCJhZGRXYXJyYW50eVJlZ2lzdHJhdGlvblwiIGNsYXNzPVwiYnRuIGJ0bi0td2hpdGVcIj57e2xvYygnYWRkV2FycmFudHlSZWdpc3RyYXRpb24nKX19PC9idXR0b24+PC9kaXY+PGJyIC8+XG4gICAgPHYtY2xpZW50LXRhYmxlIDpjb2x1bW5zPVwiY29sdW1uc1wiIDpkYXRhPVwiZmlsdGVyZWREYXRhXCIgOm9wdGlvbnM9XCJvcHRpb25zXCI+XG4gICAgICA8cm91dGVyLWxpbmsgc2xvdD1cInV1aWRcIiBzbG90LXNjb3BlPVwicHJvcHNcIiA6dG89XCJ7IG5hbWU6ICd3YXJyYW50eS1yZWdpc3RyYXRpb24nLCBwYXJhbXM6IHsgaWQ6IHByb3BzLnJvdy51dWlkIH19XCI+e3twcm9wcy5yb3cudXVpZH19PC9yb3V0ZXItbGluaz5cbiAgICA8L3YtY2xpZW50LXRhYmxlPlxuICAgIDxtb2RhbC13YXJyYW50eS1yZWdpc3RyYXRpb24gcmVmPVwiYWRkV2FycmFudHlSZWdpc3RyYXRpb25Nb2RhbFwiIDptb2RhbC1tb2RlPVwiJ2FkZCdcIj48L21vZGFsLXdhcnJhbnR5LXJlZ2lzdHJhdGlvbj5cbiAgICA8ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInNwaW5uZXJcIj48L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC90aGUtMS1jb2x1bW4tbGF5b3V0PlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cblxuaW1wb3J0IFZGb3JtIGZyb20gJy4vdi1mb3JtLnZ1ZSc7XG5pbXBvcnQgTW9kYWxXYXJyYW50eVJlZ2lzdHJhdGlvbiBmcm9tICcuL21vZGFsLXdhcnJhbnR5LXJlZ2lzdHJhdGlvbi52dWUnO1xuLy8gaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnO1xuaW1wb3J0ICQgZnJvbSAnanF1ZXJ5JztcblxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAnVmlld1dhcnJhbnR5UmVnaXN0cmF0aW9ucycsXG4gIGNvbXBvbmVudHM6IHtcbiAgICAnbW9kYWwtd2FycmFudHktcmVnaXN0cmF0aW9uJzogTW9kYWxXYXJyYW50eVJlZ2lzdHJhdGlvbixcbiAgICAndi1mb3JtJzogVkZvcm1cbiAgfSxcbiAgZGF0YTogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB7XG4gICAgICBmb3JtRGF0YToge30sXG4gICAgICBmb3JtRXJyb3JzOiB7fSxcbiAgICAgIHNlYXJjaFRleHQ6ICcnLFxuICAgICAgc2VhcmNoQ29sdW1uczogWyd1dWlkJywgJ3NlcmlhbE51bWJlcicsICdkZWxpdmVyeURhdGVXYXJyYW50eScsICdzZWxsZXJTdG9yZSddLFxuICAgICAgY29sdW1uczogWyd1dWlkJywgJ3NlcmlhbE51bWJlcicsICdkZWxpdmVyeURhdGVXYXJyYW50eScsICdzZWxsZXJTdG9yZSddLFxuICAgICAgc29ydGFibGU6IFsndXVpZCcsICdzZXJpYWxOdW1iZXInLCAnZGVsaXZlcnlEYXRlV2FycmFudHknLCAnc2VsbGVyU3RvcmUnXSxcbiAgICAgIGZpbHRlcmFibGU6IFsndXVpZCcsICdzZXJpYWxOdW1iZXInLCAnZGVsaXZlcnlEYXRlV2FycmFudHknLCAnc2VsbGVyU3RvcmUnXVxuICAgIH1cbiAgfSxcbiAgY29tcHV0ZWQ6IHtcbiAgICBvcHRpb25zKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZmlsdGVyYWJsZTogZmFsc2UsXG4gICAgICAgIGhlYWRpbmdzOiB7XG4gICAgICAgICAgdXVpZDogdGhpcy5sb2MoJ3dhcnJhbnR5UmVnaXN0cmF0aW9uSWQnKSxcbiAgICAgICAgICBzZXJpYWxOdW1iZXI6IHRoaXMubG9jKCdzZXJpYWxOdW1iZXInKSxcbiAgICAgICAgICBkZWxpdmVyeURhdGVXYXJyYW50eTogdGhpcy5sb2MoJ2RlbGl2ZXJ5RGF0ZVdhcnJhbnR5JyksXG4gICAgICAgICAgc2VsbGVyU3RvcmU6IHRoaXMubG9jKCdyZWdpc3RlcmVkQnknKSxcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICB3YXJyYW50eVJlZ2lzdHJhdGlvbnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kc3RvcmUuc3RhdGUud2FycmFudHlSZWdpc3RyYXRpb25zLm1hcCh3YXJyYW50eVJlZ2lzdHJhdGlvbiA9PiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdXVpZDogd2FycmFudHlSZWdpc3RyYXRpb24udXVpZCxcbiAgICAgICAgICBzZXJpYWxOdW1iZXI6IHdhcnJhbnR5UmVnaXN0cmF0aW9uLnNlcmlhbE51bWJlcixcbiAgICAgICAgICBkZWxpdmVyeURhdGVXYXJyYW50eTogd2FycmFudHlSZWdpc3RyYXRpb24uZGF0ZUFkZGVkICYmIHdhcnJhbnR5UmVnaXN0cmF0aW9uLmRhdGVBZGRlZC5mb3JtYXR0ZWQsXG4gICAgICAgICAgc2VsbGVyU3RvcmU6IHdhcnJhbnR5UmVnaXN0cmF0aW9uLnNlbGxlclN0b3JlLFxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9LFxuXG4gICAgZmlsdGVyZWREYXRhKCkge1xuICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgICBjb25zdCBzZWFyY2hUZXh0ID0gdGhpcy4kc3RvcmUuc3RhdGUuc3ViaGVhZGVyLnNlYXJjaFRleHQ7IC8vIFVzZSBzdWJoZWFkZXIgc2VhcmNoIGlucHV0IGZvciBzZWFyY2hpbmdcbiAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLndhcnJhbnR5UmVnaXN0cmF0aW9ucztcblxuICAgICAgaWYoc2VhcmNoVGV4dCkge1xuICAgICAgICBjb25zdCBzZWFyY2hSZWdFeCA9IG5ldyBSZWdFeHAoc2VhcmNoVGV4dCwgJ2knKVxuXG4gICAgICAgIHJldHVybiBkYXRhLmZpbHRlcihmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICAgIGZvcihsZXQgaT0wLCBsPXNlbGYuc2VhcmNoQ29sdW1ucy5sZW5ndGg7IGk8bDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBjb2x1bW4gPSBzZWxmLnNlYXJjaENvbHVtbnNbaV07XG5cbiAgICAgICAgICAgIGlmKHNlYXJjaFJlZ0V4LnRlc3QoaXRlbVtjb2x1bW5dKSkge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cbiAgfSxcbiAgbWV0aG9kczoge1xuICAgIGFkZFdhcnJhbnR5UmVnaXN0cmF0aW9uKCkge1xuICAgICAgdGhpcy4kcmVmcy5hZGRXYXJyYW50eVJlZ2lzdHJhdGlvbk1vZGFsLnNob3coKTtcbiAgICB9XG4gIH0sXG4gIG1vdW50ZWQ6IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLiRzdG9yZS5kaXNwYXRjaCgnZ2V0V2FycmFudHlSZWdpc3RyYXRpb25zJylcbiAgICAgICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAkKCcuc3Bpbm5lcicpLmhpZGUoKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgdGhpcy4kc3RvcmUuY29tbWl0KCdzZXRTdWJoZWFkZXInLCB7XG4gICAgICBzdWJ0aXRsZTogJycsXG4gICAgICB0aXRsZTogdGhpcy5sb2MoJ2NvbXBvbmVudHMud2FycmFudHlSZWdpc3RyYXRpb25zLnN1YmhlYWRlclRpdGxlJyksXG4gICAgICBkZXNjcmlwdGlvbjogJycsXG4gICAgICBzZWFyY2hFbmFibGVkOiB0cnVlXG4gICAgfSk7XG4gIH1cbn1cbjwvc2NyaXB0PlxuIiwiaW1wb3J0IFZ1ZXggZnJvbSAndnVleCdcbmltcG9ydCBWdWUgZnJvbSAndnVlJ1xuXG5pbXBvcnQgQVBJIGZyb20gJy4uLy4uL3NlcnZpY2VzL2FwaSc7XG5pbXBvcnQgZGF0YVNlcnZpY2UgZnJvbSAnLi4vLi4vc2VydmljZXMvZGF0YS1zZXJ2aWNlJztcblxuY29uc3QgYXBpID0gbmV3IEFQSSgpO1xuXG5WdWUudXNlKFZ1ZXgpXG5cblxuY29uc3Qgc3RhdGVIZWxwZXIgPSB7XG4gIHVwZGF0ZUFycmF5KHJlcywgc3RhdGVBcnJheSwga2V5KSB7XG5cbiAgICByZXMgPSBBcnJheS5pc0FycmF5KHJlcykgPyByZXMgOiBbcmVzXTsgLy8gVHVybiBpbnRvIGFycmF5LCBzbyB3ZSBjYW4gaGFuZGxlIGl0IHNhbWUgd2F5XG4gICAgY29uc3QgcmVzSWRzID0ge307XG4gICAgY29uc3QgYWRkZWQgPSBbXTtcblxuICAgIHJlcy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgcmVzSWRzW2l0ZW1ba2V5XV0gPSBpdGVtO1xuICAgIH0pO1xuXG4gICAgLy8gSWYgYWxyZWFkeSBhZGRlZCwgdXBkYXRlXG4gICAgZm9yKGxldCBpPXN0YXRlQXJyYXkubGVuZ3RoLTE7IGk+PTA7IGktLSkge1xuICAgICAgaWYocmVzSWRzW3N0YXRlQXJyYXlbaV1ba2V5XV0pIHtcbiAgICAgICAgc3RhdGVBcnJheS5zcGxpY2UoaSwgMSwgcmVzSWRzW3N0YXRlQXJyYXlbaV1ba2V5XV0pO1xuICAgICAgICBhZGRlZC5wdXNoKHN0YXRlQXJyYXlbaV1ba2V5XSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQWRkIG5ldyBvbmVzXG4gICAgaWYoYWRkZWQubGVuZ3RoICE9PSByZXMubGVuZ3RoKSB7XG4gICAgICByZXMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgaWYoYWRkZWQuaW5kZXhPZihpdGVtW2tleV0pID09PSAtMSkge1xuICAgICAgICAgIHN0YXRlQXJyYXkucHVzaChpdGVtKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9LFxuICByZW1vdmVGcm9tQXJyYXkoaWQsIHN0YXRlQXJyYXksIGtleSkge1xuICAgIGZvcihsZXQgaT1zdGF0ZUFycmF5Lmxlbmd0aC0xOyBpPj0wOyBpLS0pIHtcbiAgICAgIGlmKHN0YXRlQXJyYXlbaV1ba2V5XSA9PT0gaWQpIHtcbiAgICAgICAgc3RhdGVBcnJheS5zcGxpY2UoaSwgMSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuY29uc3Qgc3RvcmUgPSBuZXcgVnVleC5TdG9yZSh7XG4gIHN0cmljdDogcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyxcbiAgc3RhdGU6IHtcbiAgICBsYW5ndWFnZTogJycsXG4gICAgdXNlcjoge1xuICAgICAgaW5mbzogbnVsbCxcbiAgICAgIGNvbXBhbnk6IG51bGwsXG4gICAgICByb2xlOiBudWxsXG4gICAgfSxcbiAgICBzdWJoZWFkZXI6IHtcbiAgICAgIHRpdGxlOiAnJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnJyxcbiAgICAgIHNlYXJjaEVuYWJsZWQ6IGZhbHNlLFxuICAgICAgc2VhcmNoVGV4dDogJydcbiAgICB9LFxuICAgIGN1c3RvbWVyTWFjaGluZXM6IFtdLFxuICAgIGN1c3RvbWVyTWFjaGluZURldGFpbHM6IFtdLFxuICAgIGNvbXBhbmllczogW10sXG4gICAgdXNlcnM6IFtdLCAvLyBjb21wYW55IGlkIGFzIGtleSBmb3IgYW4gYXJyYXkgb2YgdXNlciBvYmplY3RzXG4gICAgY29tcGxhaW50czogW10sXG4gICAgd2FycmFudHlSZWdpc3RyYXRpb25zOiBbXSxcbiAgICB3YXJyYW50ZWRTZXJpYWxOdW1iZXJzOiBbXSxcbiAgICBsb2dnZWRJbjogZmFsc2UsXG4gICAgbmVlZHNMb2dnaW5nSW46IHRydWUsXG4gICAgbG9jYWxpemF0aW9uOiBudWxsLFxuICAgIHByZWxvYWRpbmc6IHRydWUsXG4gICAgY291bnRyaWVzOiBbXSxcbiAgICBzdWJoZWFkZXJGb3VuZDogZmFsc2UsXG4gICAgc3ViaGVhZGVyU3VidGl0bGU6ICcnLFxuICAgIHN1YmhlYWRlclRpdGxlOiAnJyxcbiAgICBzdWJoZWFkZXJEZXNjcmlwdGlvbjogJycsXG4gICAgbm90aWZpY2F0aW9uc1F1ZXVlOiBbXSxcbiAgICBub3RpZmljYXRpb25zTWF4OiA2XG4gIH0sXG4gIG11dGF0aW9uczoge1xuICAgIHNldExhbmd1YWdlKHN0YXRlLCByZXMpIHtcbiAgICAgIHN0YXRlLmxhbmd1YWdlID0gcmVzO1xuICAgIH0sXG4gICAgc2V0Q3VycmVudFVzZXIoc3RhdGUsIHJlcykge1xuICAgICAgc3RhdGUudXNlci5pbmZvID0gcmVzO1xuICAgICAgc3RhdGUudXNlci5yb2xlID0gcmVzLnJvbGU7XG4gICAgfSxcbiAgICBzZXRDdXJyZW50VXNlckNvbXBhbnkoc3RhdGUsIHJlcykge1xuICAgICAgc3RhdGUudXNlci5jb21wYW55ID0gcmVzO1xuICAgIH0sXG4gICAgc2V0Q3VycmVudE1hY2hpbmVPd25lcihzdGF0ZSwgcmVzKSB7XG4gICAgICBzdGF0ZS5tYWNoaW5lLmN1c3RvbWVyTnVtYmVyID0gcmVzLmN1c3RvbWVyTnVtYmVyO1xuICAgICAgc3RhdGUubWFjaGluZS5jb21wYW55TmFtZSA9IHJlcy5jb21wYW55TmFtZTtcbiAgICB9LFxuICAgIHNldExvZ2luU3RhdHVzKHN0YXRlLCByZXMpIHtcbiAgICAgIHN0YXRlLmxvZ2dlZEluID0gcmVzO1xuICAgIH0sXG4gICAgc2V0TmVlZHNMb2dnaW5JbihzdGF0ZSwgcmVzKSB7XG4gICAgICBzdGF0ZS5uZWVkc0xvZ2dpbmdJbiA9IHJlcztcbiAgICB9LFxuICAgIHNldExvY2FsaXphdGlvbihzdGF0ZSwgcmVzKSB7XG4gICAgICBzdGF0ZS5sb2NhbGl6YXRpb24gPSByZXM7XG4gICAgfSxcbiAgICBzZXRQcmVsb2FkaW5nU3RhdHVzKHN0YXRlLCByZXMpIHtcbiAgICAgIHN0YXRlLnByZWxvYWRpbmcgPSByZXM7XG4gICAgfSxcbiAgICBzZXRDb21wYW5pZXMoc3RhdGUsIHJlcykge1xuICAgICAgc3RhdGVIZWxwZXIudXBkYXRlQXJyYXkocmVzLCBzdGF0ZS5jb21wYW5pZXMsICdpZCcpO1xuICAgIH0sXG4gICAgc2V0Q29tcGFueShzdGF0ZSwgcmVzKSB7XG4gICAgICBzdGF0ZUhlbHBlci51cGRhdGVBcnJheShyZXMsIHN0YXRlLmNvbXBhbmllcywgJ2lkJyk7XG4gICAgfSxcbiAgICBzZXRDb3VudHJpZXMoc3RhdGUsIHJlcykge1xuICAgICAgc3RhdGUuY291bnRyaWVzID0gcmVzXG4gICAgfSxcbiAgICBzZXRTdWJoZWFkZXJGb3VuZChzdGF0ZSwgcmVzKSB7XG4gICAgICBzdGF0ZS5zdWJoZWFkZXJGb3VuZCA9IHJlcztcbiAgICB9LFxuICAgIHNldFN1YmhlYWRlcihzdGF0ZSwgcmVzKSB7XG4gICAgICBzdGF0ZS5zdWJoZWFkZXIuc3VidGl0bGUgPSByZXMuc3VidGl0bGU7XG4gICAgICBzdGF0ZS5zdWJoZWFkZXIudGl0bGUgPSByZXMudGl0bGU7XG4gICAgICBzdGF0ZS5zdWJoZWFkZXIuZGVzY3JpcHRpb24gPSByZXMuZGVzY3JpcHRpb247XG4gICAgICBzdGF0ZS5zdWJoZWFkZXIuc2VhcmNoRW5hYmxlZCA9IHJlcy5zZWFyY2hFbmFibGVkO1xuICAgIH0sXG4gICAgc2V0U3ViaGVhZGVyU2VhcmNoVGV4dChzdGF0ZSwgcmVzKSB7XG4gICAgICBzdGF0ZS5zdWJoZWFkZXIuc2VhcmNoVGV4dCA9IHJlcztcbiAgICB9LFxuICAgIHNldEN1c3RvbWVyTWFjaGluZXMoc3RhdGUsIHJlcykge1xuICAgICAgc3RhdGVIZWxwZXIudXBkYXRlQXJyYXkocmVzLCBzdGF0ZS5jdXN0b21lck1hY2hpbmVzLCAnc2VyaWFsTnVtYmVyJyk7XG4gICAgfSxcbiAgICBzZXRDdXN0b21lck1hY2hpbmVEZXRhaWxzKHN0YXRlLCByZXMpIHtcbiAgICAgIHN0YXRlSGVscGVyLnVwZGF0ZUFycmF5KHJlcywgc3RhdGUuY3VzdG9tZXJNYWNoaW5lRGV0YWlscywgJ3NlcmlhbE51bWJlcicpO1xuICAgIH0sXG4gICAgYWRkQ29tcGFueShzdGF0ZSwgcmVzKSB7XG4gICAgICBzdGF0ZS5jb21wYW5pZXMucHVzaChyZXMpO1xuICAgIH0sXG4gICAgdXBkYXRlQ29tcGFueShzdGF0ZSwgcmVzKSB7XG4gICAgICBzdGF0ZUhlbHBlci51cGRhdGVBcnJheShyZXMsIHN0YXRlLmNvbXBhbmllcywgJ2lkJyk7XG4gICAgfSxcbiAgICBkZWxldGVDb21wYW55KHN0YXRlLCByZXMpIHtcbiAgICAgIHN0YXRlSGVscGVyLnJlbW92ZUZyb21BcnJheShyZXMsIHN0YXRlLmNvbXBhbmllcywgJ2lkJyk7XG4gICAgfSxcbiAgICBzZXRDb21wbGFpbnRzKHN0YXRlLCByZXMpIHtcbiAgICAgIHN0YXRlSGVscGVyLnVwZGF0ZUFycmF5KHJlcywgc3RhdGUuY29tcGxhaW50cywgJ3V1aWQnKTtcbiAgICB9LFxuICAgIHNldFdhcnJhbnRlZFNlcmlhbE51bWJlcnMoc3RhdGUsIHJlcykge1xuICAgICAgc3RhdGUud2FycmFudGVkU2VyaWFsTnVtYmVycyA9IHJlcztcbiAgICB9LFxuICAgIGFkZENvbXBsYWludChzdGF0ZSwgcmVzKSB7XG4gICAgICBzdGF0ZUhlbHBlci51cGRhdGVBcnJheShyZXMsIHN0YXRlLmNvbXBsYWludHMsICd1dWlkJyk7XG4gICAgfSxcbiAgICBzZXRXYXJyYW50eVJlZ2lzdHJhdGlvbnMoc3RhdGUsIHJlcykge1xuICAgICAgc3RhdGVIZWxwZXIudXBkYXRlQXJyYXkocmVzLCBzdGF0ZS53YXJyYW50eVJlZ2lzdHJhdGlvbnMsICd1dWlkJyk7XG4gICAgfSxcbiAgICBhZGRXYXJyYW50eVJlZ2lzdHJhdGlvbihzdGF0ZSwgcmVzKSB7XG4gICAgICBzdGF0ZUhlbHBlci51cGRhdGVBcnJheShyZXMsIHN0YXRlLndhcnJhbnR5UmVnaXN0cmF0aW9ucywgJ3V1aWQnKTtcbiAgICB9LFxuICAgIHNldFVzZXJzKHN0YXRlLCByZXMpIHtcbiAgICAgIHN0YXRlSGVscGVyLnVwZGF0ZUFycmF5KHJlcywgc3RhdGUudXNlcnMsICdpZCcpO1xuICAgIH0sXG4gICAgYWRkVXNlcihzdGF0ZSwgcmVzKSB7XG4gICAgICBzdGF0ZUhlbHBlci51cGRhdGVBcnJheShyZXMsIHN0YXRlLnVzZXJzLCAnaWQnKTtcbiAgICB9LFxuICAgIHVwZGF0ZVVzZXIoc3RhdGUsIHJlcykge1xuICAgICAgc3RhdGVIZWxwZXIudXBkYXRlQXJyYXkocmVzLCBzdGF0ZS51c2VycywgJ2lkJyk7XG4gICAgfSxcbiAgICBkZWxldGVVc2VyKHN0YXRlLCByZXMpIHtcbiAgICAgIHN0YXRlSGVscGVyLnJlbW92ZUZyb21BcnJheShyZXMsIHN0YXRlLnVzZXJzLCAnaWQnKTtcbiAgICB9LFxuICAgIGFkZE5vdGlmaWNhdGlvbihzdGF0ZSwgbWVzc2FnZXMpIHtcbiAgICAgIHN0YXRlLm5vdGlmaWNhdGlvbnNRdWV1ZS5wdXNoKG1lc3NhZ2VzLmpvaW4oJywgJykpXG5cbiAgICAgIGlmIChzdGF0ZS5ub3RpZmljYXRpb25zUXVldWUubGVuZ3RoID4gc3RhdGUubm90aWZpY2F0aW9uc01heCkge1xuICAgICAgICBzdGF0ZS5ub3RpZmljYXRpb25zUXVldWUuc2hpZnQoKVxuICAgICAgfVxuICAgIH0sXG4gICAgdXBkYXRlQWRkaXRpb25hbEluZm9ybWF0aW9uKHN0YXRlLCBtZXNzYWdlKSB7XG4gICAgICBzdGF0ZS5hZGRpdGlvbmFsSW5mb3JtYXRpb24gPSBtZXNzYWdlXG4gICAgfVxuICB9LFxuICBhY3Rpb25zOiB7XG4gICAgZ2V0Q291bnRyaWVzKGNvbnRleHQpIHtcbiAgICAgIC8vIE9ubHkgZmV0Y2ggY291bnRyaWVzIG9uY2VcbiAgICAgIGlmKGNvbnRleHQuc3RhdGUuY291bnRyaWVzLmxlbmd0aCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhcGkuZ2V0Q291bnRyaWVzKClcbiAgICAgIC50aGVuKHJlcyA9PiB7XG4gICAgICAgIGlmKHJlcy5yZXN1bHQuY291bnRyaWVzKSB7XG4gICAgICAgICAgY29udGV4dC5jb21taXQoJ3NldENvdW50cmllcycsIHJlcy5yZXN1bHQuY291bnRyaWVzKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSxcbiAgICBnZXRDdXJyZW50VXNlcih7IGNvbW1pdCB9KSB7XG4gICAgICByZXR1cm4gYXBpLmdldEN1cnJlbnRVc2VyKClcbiAgICAgIC50aGVuKChyZXMpID0+IHtcbiAgICAgICAgLy8gSWYgd2UgY2FuIGdldCBwcm9wZXIgYW5zd2VyLCB3ZSdyZSBsb2dnZWQgaW5cbiAgICAgICAgaWYocmVzLmNvZGUgPT09IDIwMCkge1xuICAgICAgICAgIGNvbW1pdCgnc2V0TG9naW5TdGF0dXMnLCB0cnVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbW1pdCgnc2V0Q3VycmVudFVzZXInLCByZXMucmVzdWx0LnVzZXIpO1xuICAgICAgICBjb21taXQoJ3NldEN1cnJlbnRVc2VyQ29tcGFueScsIHJlcy5yZXN1bHQuY29tcGFueSk7XG4gICAgICB9KTtcbiAgICB9LFxuICAgIGdldExvY2FsaXphdGlvbih7Y29tbWl0fSkge1xuICAgICAgcmV0dXJuIGFwaS5nZXRMb2NhbGl6YXRpb24oKVxuICAgICAgLnRoZW4ocmVzID0+IHtcbiAgICAgICAgaWYocmVzLnJlc3VsdC5sb2NhbGl6YXRpb24pIHtcbiAgICAgICAgICBjb21taXQoJ3NldExvY2FsaXphdGlvbicsIHJlcy5yZXN1bHQubG9jYWxpemF0aW9uKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSxcbiAgICBnZXRDb21wbGFpbnRzKHtjb21taXR9LCBvcHRpb25zKSB7XG4gICAgICBpZighb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gYXBpLmdldENvbXBsYWludHMoe1xuICAgICAgICAgIGluY2x1ZGVDaGlsZENvbXBhbmllczogdHJ1ZVxuICAgICAgICB9KVxuICAgICAgICAudGhlbihyZXMgPT4ge1xuICAgICAgICAgIGlmKHJlcy5yZXN1bHQuY29tcGxhaW50cykge1xuICAgICAgICAgICAgY29tbWl0KCdzZXRDb21wbGFpbnRzJywgcmVzLnJlc3VsdC5jb21wbGFpbnRzKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYocmVzLnJlc3VsdC53YXJyYW50ZWRTZXJpYWxOdW1iZXJzKSB7XG4gICAgICAgICAgICBjb21taXQoJ3NldFdhcnJhbnRlZFNlcmlhbE51bWJlcnMnLCByZXMucmVzdWx0LndhcnJhbnRlZFNlcmlhbE51bWJlcnMpXG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGFwaS5nZXRDb21wbGFpbnRzKG9wdGlvbnMpXG4gICAgICAudGhlbihyZXMgPT4ge1xuICAgICAgICBpZihyZXMucmVzdWx0LmNvbXBsYWludHMpIHtcbiAgICAgICAgICBjb21taXQoJ3NldENvbXBsYWludHMnLCByZXMucmVzdWx0LmNvbXBsYWludHMpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9LFxuICAgIGdldENvbXBsYWludCh7Y29tbWl0fSwgY29tcGxhaW50SWQpIHtcbiAgICAgIHJldHVybiBhcGkuZ2V0Q29tcGxhaW50KGNvbXBsYWludElkKVxuICAgICAgLnRoZW4ocmVzID0+IHtcbiAgICAgICAgaWYocmVzLnJlc3VsdC5jb21wbGFpbnQpIHtcbiAgICAgICAgICBjb21taXQoJ3NldENvbXBsYWludHMnLCByZXMucmVzdWx0LmNvbXBsYWludCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0sXG4gICAgZ2V0V2FycmFudHlSZWdpc3RyYXRpb25zKHtjb21taXR9LCBvcHRpb25zKSB7XG4gICAgICBpZighb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gYXBpLmdldFdhcnJhbnR5UmVnaXN0cmF0aW9ucyh7IGluY2x1ZGVDaGlsZENvbXBhbmllczogdHJ1ZSB9KVxuICAgICAgICAudGhlbihyZXMgPT4ge1xuICAgICAgICAgIGlmKHJlcy5yZXN1bHQud2FycmFudHlSZWdpc3RyYXRpb25zKSB7XG4gICAgICAgICAgICBjb21taXQoJ3NldFdhcnJhbnR5UmVnaXN0cmF0aW9ucycsIHJlcy5yZXN1bHQud2FycmFudHlSZWdpc3RyYXRpb25zKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYXBpLmdldFdhcnJhbnR5UmVnaXN0cmF0aW9ucyhvcHRpb25zKVxuICAgICAgLnRoZW4ocmVzID0+IHtcbiAgICAgICAgaWYocmVzLnJlc3VsdC53YXJyYW50eVJlZ2lzdHJhdGlvbnMpIHtcbiAgICAgICAgICBjb21taXQoJ3NldFdhcnJhbnR5UmVnaXN0cmF0aW9ucycsIHJlcy5yZXN1bHQud2FycmFudHlSZWdpc3RyYXRpb25zKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSxcbiAgICBnZXRXYXJyYW50eVJlZ2lzdHJhdGlvbih7Y29tbWl0fSwgd2FycmFudHlSZWdpc3RyYXRpb25JZCkge1xuICAgICAgcmV0dXJuIGFwaS5nZXRXYXJyYW50eVJlZ2lzdHJhdGlvbih3YXJyYW50eVJlZ2lzdHJhdGlvbklkKVxuICAgICAgLnRoZW4ocmVzID0+IHtcbiAgICAgICAgaWYocmVzLnJlc3VsdC53YXJyYW50eVJlZ2lzdHJhdGlvbikge1xuICAgICAgICAgIGNvbW1pdCgnc2V0V2FycmFudHlSZWdpc3RyYXRpb25zJywgcmVzLnJlc3VsdC53YXJyYW50eVJlZ2lzdHJhdGlvbik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0sXG4gICAgZ2V0Q3VzdG9tZXJNYWNoaW5lcyh7Y29tbWl0fSwgY29tcGFueUlkKSB7XG4gICAgICByZXR1cm4gYXBpLmdldEN1c3RvbWVyTWFjaGluZXMoe1xuICAgICAgICBjb21wYW55OiBjb21wYW55SWQsXG4gICAgICAgIGluY2x1ZGVDaGlsZENvbXBhbmllczogdHJ1ZVxuICAgICAgfSlcbiAgICAgIC50aGVuKHJlcyA9PiB7XG4gICAgICAgIGlmKHJlcy5yZXN1bHQuY3VzdG9tZXJNYWNoaW5lcykge1xuICAgICAgICAgIGNvbW1pdCgnc2V0Q3VzdG9tZXJNYWNoaW5lcycsIHJlcy5yZXN1bHQuY3VzdG9tZXJNYWNoaW5lcyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0sXG4gICAgZ2V0Q3VzdG9tZXJNYWNoaW5lKHtjb21taXR9LCBzZXJpYWxOdW1iZXIpIHtcbiAgICAgIHJldHVybiBhcGkuZ2V0Q3VzdG9tZXJNYWNoaW5lKHNlcmlhbE51bWJlcilcbiAgICAgIC50aGVuKHJlcyA9PiB7XG4gICAgICAgIGlmKHJlcy5yZXN1bHQuY3VzdG9tZXJNYWNoaW5lKSB7XG4gICAgICAgICAgY29tbWl0KCdzZXRDdXN0b21lck1hY2hpbmVzJywgcmVzLnJlc3VsdC5jdXN0b21lck1hY2hpbmUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9LFxuICAgIGdldEN1c3RvbWVyTWFjaGluZURldGFpbHMoe2NvbW1pdH0sIHNlcmlhbE51bWJlcikge1xuICAgICAgcmV0dXJuIGFwaS5nZXRDdXN0b21lck1hY2hpbmVEZXRhaWxzKHNlcmlhbE51bWJlcilcbiAgICAgIC50aGVuKHJlcyA9PiB7XG4gICAgICAgIGlmKHJlcy5yZXN1bHQuY3VzdG9tZXJNYWNoaW5lRGV0YWlscykge1xuICAgICAgICAgIGNvbW1pdCgnc2V0Q3VzdG9tZXJNYWNoaW5lRGV0YWlscycsIHJlcy5yZXN1bHQuY3VzdG9tZXJNYWNoaW5lRGV0YWlscyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0sXG4gICAgZ2V0Q2hpbGRDb21wYW5pZXMoY29udGV4dCkge1xuICAgICAgcmV0dXJuIGFwaS5nZXRDb21wYW5pZXMoe1xuICAgICAgICBjaGlsZHJlbk9mOiBjb250ZXh0LnN0YXRlLnVzZXIuaW5mby5jb21wYW55LFxuICAgICAgICBpbmNsdWRlVXNlcnNPZlJvbGVzOiBbJ3JldGFpbGVyLWFkbWluJ11cbiAgICAgIH0pXG4gICAgICAudGhlbihyZXMgPT4ge1xuICAgICAgICBpZihyZXMucmVzdWx0LmNvbXBhbmllcykge1xuICAgICAgICAgIHJlcy5yZXN1bHQuY29tcGFuaWVzLmZvckVhY2goY29tcGFueSA9PiB7XG4gICAgICAgICAgICBjb21wYW55LnVzZXJzLmZvckVhY2godXNlciA9PiB7XG4gICAgICAgICAgICAgIGlmKCFjb21wYW55LmNvbnRhY3RzKSB7XG4gICAgICAgICAgICAgICAgY29tcGFueS5jb250YWN0cyA9IFtdO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBjb250ZXh0LmNvbW1pdCgnc2V0Q29tcGFuaWVzJywgcmVzLnJlc3VsdC5jb21wYW5pZXMpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9LFxuICAgIGdldENvbXBhbnkoe2NvbW1pdH0sIGNvbXBhbnlJZCkge1xuICAgICAgcmV0dXJuIGFwaS5nZXRDb21wYW55KGNvbXBhbnlJZClcbiAgICAgIC50aGVuKHJlcyA9PiB7XG4gICAgICAgIGlmKHJlcy5yZXN1bHQuY29tcGFueSkge1xuICAgICAgICAgIGNvbW1pdCgnc2V0Q29tcGFueScsIHJlcy5yZXN1bHQuY29tcGFueSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0sXG4gICAgZ2V0Q29tcGFueVVzZXJzKGNvbnRleHQsIGNvbXBhbnlJZCkge1xuICAgICAgcmV0dXJuIGFwaS5nZXRVc2Vycyh7XG4gICAgICAgIGNvbXBhbnk6IGNvbXBhbnlJZFxuICAgICAgfSlcbiAgICAgIC50aGVuKHJlcyA9PiB7XG4gICAgICAgIGlmKHJlcy5yZXN1bHQudXNlcnMpIHtcbiAgICAgICAgICBjb250ZXh0LmNvbW1pdCgnc2V0VXNlcnMnLCByZXMucmVzdWx0LnVzZXJzKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSxcbiAgICBkZWxldGVDb21wYW55KGNvbnRleHQsIGNvbXBhbnlJZCkge1xuICAgICAgcmV0dXJuIGFwaS5kZWxldGVDb21wYW55KGNvbXBhbnlJZClcbiAgICAgIC50aGVuKHJlcyA9PiB7XG4gICAgICAgIGlmKHJlcy5yZXN1bHQuY29tcGFueSkge1xuICAgICAgICAgIGNvbnRleHQuY29tbWl0KCdkZWxldGVDb21wYW55JywgcmVzLnJlc3VsdC5jb21wYW55KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSxcbiAgICBnZXRVc2VyKHtjb21taXR9LCB1c2VySWQpIHtcbiAgICAgIHJldHVybiBhcGkuZ2V0VXNlcih1c2VySWQpXG4gICAgICAudGhlbihyZXMgPT4ge1xuICAgICAgICBpZihyZXMucmVzdWx0LnVzZXIpIHtcbiAgICAgICAgICBjb21taXQoJ2FkZFVzZXInLCByZXMucmVzdWx0LnVzZXIpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIGdldHRlcnM6IHtcbiAgICBjb3VudHJ5U2VsZWN0T3B0aW9uczogc3RhdGUgPT4ge1xuICAgICAgcmV0dXJuIHN0YXRlLmNvdW50cmllcy5tYXAoaXRlbSA9PiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdmFsdWU6IGl0ZW0uY291bnRyeUNvZGUsXG4gICAgICAgICAgdGV4dDogaXRlbS5uYW1lXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICB9LFxuICAgIGNoaWxkQ29tcGFuaWVzOiBzdGF0ZSA9PiB7XG5cbiAgICAgIHZhciBjaGlsZHJlbiA9IHN0YXRlLnVzZXIuaW5mby5yb2xlID09PSAnc2l0ZS1hZG1pbidcbiAgICAgICAgICAgICAgICAgID8gc3RhdGUuY29tcGFuaWVzLmZpbHRlcihCb29sZWFuKSAvL2NsZWFyIG51bGwgdmFsdWVzXG4gICAgICAgICAgICAgICAgICA6IHN0YXRlLmNvbXBhbmllcy5maWx0ZXIoY29tcGFueSA9PiB7IHJldHVybiBjb21wYW55LnBhcmVudCA9PT0gc3RhdGUudXNlci5jb21wYW55LmlkIH0pO1xuXG4gICAgICByZXR1cm4gY2hpbGRyZW47XG4gICAgfSxcbiAgICBjaGlsZENvbXBhbmllc09wdGlvbnM6IHN0YXRlID0+IHtcbiAgICAgIHZhciBmaWx0ZXJlZENoaWxkcmVuID0gc3RhdGUudXNlci5pbmZvLnJvbGUgPT09ICdzaXRlLWFkbWluJ1xuICAgICAgICAgICAgICAgICAgPyBzdGF0ZS5jb21wYW5pZXMuZmlsdGVyKEJvb2xlYW4pIC8vY2xlYXIgbnVsbCB2YWx1ZXNcbiAgICAgICAgICAgICAgICAgIDogc3RhdGUuY29tcGFuaWVzLmZpbHRlcihjb21wYW55ID0+IHsgcmV0dXJuIGNvbXBhbnkucGFyZW50ID09PSBzdGF0ZS51c2VyLmNvbXBhbnkuaWQgfSk7XG5cbiAgICAgIHJldHVybiBmaWx0ZXJlZENoaWxkcmVuLm1hcCAoaXRlbSA9PiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdmFsdWU6IGl0ZW0uaWQsXG4gICAgICAgICAgdGV4dDogaXRlbS5uYW1lXG4gICAgICAgIH07XG4gICAgICB9KTtcblxuICAgIH1cbiAgfVxufSk7XG5cbmRhdGFTZXJ2aWNlLnNldFZ1ZXhTdG9yZShzdG9yZSk7XG5cbmV4cG9ydCBkZWZhdWx0IHN0b3JlXG4iXX0="}