{"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/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/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/is-buffer/index.js","node_modules/isarray/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-assign/index.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/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/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":"palax-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","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 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.11' };\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 * 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 toString = {}.toString;\n\nmodule.exports = Array.isArray || function (arr) {\n return toString.call(arr) == '[object Array]';\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","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 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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJub2RlX21vZHVsZXMvYXJyYXktaW50ZXJzZWN0L2Rpc3QvYXJyYXktaW50ZXJzZWN0LmpzIiwibm9kZV9tb2R1bGVzL2F4aW9zL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9hZGFwdGVycy94aHIuanMiLCJub2RlX21vZHVsZXMvYXhpb3MvbGliL2F4aW9zLmpzIiwibm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jYW5jZWwvQ2FuY2VsLmpzIiwibm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jYW5jZWwvQ2FuY2VsVG9rZW4uanMiLCJub2RlX21vZHVsZXMvYXhpb3MvbGliL2NhbmNlbC9pc0NhbmNlbC5qcyIsIm5vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9BeGlvcy5qcyIsIm5vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9JbnRlcmNlcHRvck1hbmFnZXIuanMiLCJub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvY3JlYXRlRXJyb3IuanMiLCJub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvZGlzcGF0Y2hSZXF1ZXN0LmpzIiwibm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL2VuaGFuY2VFcnJvci5qcyIsIm5vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9tZXJnZUNvbmZpZy5qcyIsIm5vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9zZXR0bGUuanMiLCJub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvdHJhbnNmb3JtRGF0YS5qcyIsIm5vZGVfbW9kdWxlcy9heGlvcy9saWIvZGVmYXVsdHMuanMiLCJub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvYmluZC5qcyIsIm5vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9idWlsZFVSTC5qcyIsIm5vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9jb21iaW5lVVJMcy5qcyIsIm5vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9jb29raWVzLmpzIiwibm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2lzQWJzb2x1dGVVUkwuanMiLCJub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvaXNVUkxTYW1lT3JpZ2luLmpzIiwibm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL25vcm1hbGl6ZUhlYWRlck5hbWUuanMiLCJub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvcGFyc2VIZWFkZXJzLmpzIiwibm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3NwcmVhZC5qcyIsIm5vZGVfbW9kdWxlcy9heGlvcy9saWIvdXRpbHMuanMiLCJub2RlX21vZHVsZXMvYmFiZWwtaGVscGVyLXZ1ZS1qc3gtbWVyZ2UtcHJvcHMvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL2pzb24vc3RyaW5naWZ5LmpzIiwibm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9vYmplY3Qva2V5cy5qcyIsIm5vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvcHJvbWlzZS5qcyIsIm5vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvc3ltYm9sLmpzIiwibm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9zeW1ib2wvaXRlcmF0b3IuanMiLCJub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2FzeW5jVG9HZW5lcmF0b3IuanMiLCJub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2NsYXNzQ2FsbENoZWNrLmpzIiwibm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy90eXBlb2YuanMiLCJub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9yZWdlbmVyYXRvci9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9iYXNlNjQtanMvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnVmZmVyL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9mbi9qc29uL3N0cmluZ2lmeS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvZm4vb2JqZWN0L2tleXMuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L2ZuL3Byb21pc2UuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L2ZuL3N5bWJvbC9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvZm4vc3ltYm9sL2l0ZXJhdG9yLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19hLWZ1bmN0aW9uLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19hZGQtdG8tdW5zY29wYWJsZXMuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2FuLWluc3RhbmNlLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19hbi1vYmplY3QuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2FycmF5LWluY2x1ZGVzLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19jbGFzc29mLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19jb2YuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2NvcmUuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2N0eC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fZGVmaW5lZC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fZGVzY3JpcHRvcnMuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2RvbS1jcmVhdGUuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2VudW0tYnVnLWtleXMuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2VudW0ta2V5cy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fZXhwb3J0LmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19mYWlscy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fZm9yLW9mLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19nbG9iYWwuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2hhcy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faGlkZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faHRtbC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faWU4LWRvbS1kZWZpbmUuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2ludm9rZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faW9iamVjdC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faXMtYXJyYXktaXRlci5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faXMtYXJyYXkuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2lzLW9iamVjdC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faXRlci1jYWxsLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19pdGVyLWNyZWF0ZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faXRlci1kZWZpbmUuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2l0ZXItZGV0ZWN0LmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19pdGVyLXN0ZXAuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2l0ZXJhdG9ycy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fbGlicmFyeS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fbWV0YS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fbWljcm90YXNrLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19uZXctcHJvbWlzZS1jYXBhYmlsaXR5LmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3QtY3JlYXRlLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3QtZHAuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX29iamVjdC1kcHMuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX29iamVjdC1nb3BkLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3QtZ29wbi1leHQuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX29iamVjdC1nb3BuLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3QtZ29wcy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fb2JqZWN0LWdwby5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fb2JqZWN0LWtleXMtaW50ZXJuYWwuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX29iamVjdC1rZXlzLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3QtcGllLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3Qtc2FwLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19wZXJmb3JtLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19wcm9taXNlLXJlc29sdmUuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3Byb3BlcnR5LWRlc2MuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3JlZGVmaW5lLWFsbC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fcmVkZWZpbmUuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3NldC1zcGVjaWVzLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19zZXQtdG8tc3RyaW5nLXRhZy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fc2hhcmVkLWtleS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fc2hhcmVkLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19zcGVjaWVzLWNvbnN0cnVjdG9yLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19zdHJpbmctYXQuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3Rhc2suanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3RvLWFic29sdXRlLWluZGV4LmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL190by1pbnRlZ2VyLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL190by1pb2JqZWN0LmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL190by1sZW5ndGguanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3RvLW9iamVjdC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fdG8tcHJpbWl0aXZlLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL191aWQuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3VzZXItYWdlbnQuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3drcy1kZWZpbmUuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3drcy1leHQuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3drcy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9jb3JlLmdldC1pdGVyYXRvci1tZXRob2QuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvZXM2LmFycmF5Lml0ZXJhdG9yLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2VzNi5vYmplY3Qua2V5cy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9lczYub2JqZWN0LnRvLXN0cmluZy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9lczYucHJvbWlzZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9lczYuc3RyaW5nLml0ZXJhdG9yLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2VzNi5zeW1ib2wuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvZXM3LnByb21pc2UuZmluYWxseS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9lczcucHJvbWlzZS50cnkuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvZXM3LnN5bWJvbC5hc3luYy1pdGVyYXRvci5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9lczcuc3ltYm9sLm9ic2VydmFibGUuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvd2ViLmRvbS5pdGVyYWJsZS5qcyIsIm5vZGVfbW9kdWxlcy9kZWJvdW5jZS9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9kZWNvZGUtdXJpLWNvbXBvbmVudC9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9lczYtcHJvbWlzZS9hdXRvLmpzIiwibm9kZV9tb2R1bGVzL2VzNi1wcm9taXNlL2Rpc3QvZXM2LXByb21pc2UuanMiLCJub2RlX21vZHVsZXMvaWVlZTc1NC9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9pcy1idWZmZXIvaW5kZXguanMiLCJub2RlX21vZHVsZXMvaXNhcnJheS9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9qcXVlcnkvZGlzdC9qcXVlcnkuanMiLCJub2RlX21vZHVsZXMvanMtY29va2llL3NyYy9qcy5jb29raWUuanMiLCJub2RlX21vZHVsZXMvbWFnbmlmaWMtcG9wdXAvZGlzdC9qcXVlcnkubWFnbmlmaWMtcG9wdXAuanMiLCJub2RlX21vZHVsZXMvbWVyZ2UvbWVyZ2UuanMiLCJub2RlX21vZHVsZXMvbW9tZW50L21vbWVudC5qcyIsIm5vZGVfbW9kdWxlcy9tdXN0YWNoZS9tdXN0YWNoZS5qcyIsIm5vZGVfbW9kdWxlcy9vYmplY3QtYXNzaWduL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL29iamVjdC1maXQtaW1hZ2VzL2Rpc3Qvb2ZpLmNvbW1vbi1qcy5qcyIsIm5vZGVfbW9kdWxlcy9wb2x5ZmlsbC1hcnJheS1pbmNsdWRlcy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9wb3J0YWwtdnVlL2Rpc3QvcG9ydGFsLXZ1ZS5qcyIsIm5vZGVfbW9kdWxlcy9wcm9jZXNzL2Jyb3dzZXIuanMiLCJub2RlX21vZHVsZXMvcXVlcnktc3RyaW5nL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3JlZ2VuZXJhdG9yLXJ1bnRpbWUvcnVudGltZS1tb2R1bGUuanMiLCJub2RlX21vZHVsZXMvcmVnZW5lcmF0b3ItcnVudGltZS9ydW50aW1lLmpzIiwibm9kZV9tb2R1bGVzL3N0cmljdC11cmktZW5jb2RlL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3RpbWVycy1icm93c2VyaWZ5L21haW4uanMiLCJub2RlX21vZHVsZXMvdnVlLWhvdC1yZWxvYWQtYXBpL2Rpc3QvaW5kZXguanMiLCJub2RlX21vZHVsZXMvdnVlLWpzLW1vZGFsL2Rpc3QvaW5kZXguanMiLCJub2RlX21vZHVsZXMvdnVlLW5vdGlmaWNhdGlvbi9kaXN0L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3Z1ZS1wYWdpbmF0aW9uLTIvY29tcGlsZWQvUGFnaW5hdGlvbi5qcyIsIm5vZGVfbW9kdWxlcy92dWUtcGFnaW5hdGlvbi0yL2NvbXBpbGVkL2J1cy5qcyIsIm5vZGVfbW9kdWxlcy92dWUtcGFnaW5hdGlvbi0yL2NvbXBpbGVkL2NvbmZpZy5qcyIsIm5vZGVfbW9kdWxlcy92dWUtcGFnaW5hdGlvbi0yL2NvbXBpbGVkL3RlbXBsYXRlLmpzIiwibm9kZV9tb2R1bGVzL3Z1ZS1wYWdpbmF0aW9uLTIvY29tcGlsZWQvdGhlbWVzL2Jvb3RzdHJhcDMuanMiLCJub2RlX21vZHVsZXMvdnVlLXBhZ2luYXRpb24tMi9jb21waWxlZC90aGVtZXMvYm9vdHN0cmFwNC5qcyIsIm5vZGVfbW9kdWxlcy92dWUtcGFnaW5hdGlvbi0yL2NvbXBpbGVkL3RoZW1lcy9idWxtYS5qcyIsIm5vZGVfbW9kdWxlcy92dWUtcGFnaW5hdGlvbi0yL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3Z1ZS1yb3V0ZXIvZGlzdC92dWUtcm91dGVyLmNvbW1vbi5qcyIsIm5vZGVfbW9kdWxlcy92dWUtdGFibGVzLTIvY29tcGlsZWQvYnVzLmpzIiwibm9kZV9tb2R1bGVzL3Z1ZS10YWJsZXMtMi9jb21waWxlZC9jb21wdXRlZC9hbGwtY29sdW1ucy5qcyIsIm5vZGVfbW9kdWxlcy92dWUtdGFibGVzLTIvY29tcGlsZWQvY29tcHV0ZWQvY29sc3Bhbi5qcyIsIm5vZGVfbW9kdWxlcy92dWUtdGFibGVzLTIvY29tcGlsZWQvY29tcHV0ZWQvY3VzdG9tLXEuanMiLCJub2RlX21vZHVsZXMvdnVlLXRhYmxlcy0yL2NvbXBpbGVkL2NvbXB1dGVkL2RhdGVwaWNrZXItY29sdW1ucy5qcyIsIm5vZGVfbW9kdWxlcy92dWUtdGFibGVzLTIvY29tcGlsZWQvY29tcHV0ZWQvZmlsdGVyYWJsZS1jb2x1bW5zLmpzIiwibm9kZV9tb2R1bGVzL3Z1ZS10YWJsZXMtMi9jb21waWxlZC9jb21wdXRlZC9maWx0ZXJlZC1kYXRhLmpzIiwibm9kZV9tb2R1bGVzL3Z1ZS10YWJsZXMtMi9jb21waWxlZC9jb21wdXRlZC9maWx0ZXJlZC1xdWVyeS5qcyIsIm5vZGVfbW9kdWxlcy92dWUtdGFibGVzLTIvY29tcGlsZWQvY29tcHV0ZWQvaGFzLWNoaWxkLXJvdy5qcyIsIm5vZGVfbW9kdWxlcy92dWUtdGFibGVzLTIvY29tcGlsZWQvY29tcHV0ZWQvaGFzLWdlbmVyaWMtZmlsdGVyLmpzIiwibm9kZV9tb2R1bGVzL3Z1ZS10YWJsZXMtMi9jb21waWxlZC9jb21wdXRlZC9saXN0LWNvbHVtbnMtb2JqZWN0LmpzIiwibm9kZV9tb2R1bGVzL3Z1ZS10YWJsZXMtMi9jb21waWxlZC9jb21wdXRlZC9vcHRzLmpzIiwibm9kZV9tb2R1bGVzL3Z1ZS10YWJsZXMtMi9jb21waWxlZC9jb21wdXRlZC9xLmpzIiwibm9kZV9tb2R1bGVzL3Z1ZS10YWJsZXMtMi9jb21waWxlZC9jb21wdXRlZC9zdG9yYWdlLmpzIiwibm9kZV9tb2R1bGVzL3Z1ZS10YWJsZXMtMi9jb21waWxlZC9jb21wdXRlZC90YWJsZS1kYXRhLmpzIiwibm9kZV9tb2R1bGVzL3Z1ZS10YWJsZXMtMi9jb21waWxlZC9jb21wdXRlZC90ZW1wbGF0ZXMta2V5cy5qcyIsIm5vZGVfbW9kdWxlcy92dWUtdGFibGVzLTIvY29tcGlsZWQvY29tcHV0ZWQvdG90YWwtcGFnZXMuanMiLCJub2RlX21vZHVsZXMvdnVlLXRhYmxlcy0yL2NvbXBpbGVkL2NvbmZpZy9kZWZhdWx0cy5qcyIsIm5vZGVfbW9kdWxlcy92dWUtdGFibGVzLTIvY29tcGlsZWQvZmlsdGVycy9jdXN0b20tZmlsdGVycy5qcyIsIm5vZGVfbW9kdWxlcy92dWUtdGFibGVzLTIvY29tcGlsZWQvZmlsdGVycy9mb3JtYXQtZGF0ZS5qcyIsIm5vZGVfbW9kdWxlcy92dWUtdGFibGVzLTIvY29tcGlsZWQvZmlsdGVycy9oaWdobGlnaHQtbWF0Y2hlcy5qcyIsIm5vZGVfbW9kdWxlcy92dWUtdGFibGVzLTIvY29tcGlsZWQvZmlsdGVycy9vcHRpb24tdGV4dC5qcyIsIm5vZGVfbW9kdWxlcy92dWUtdGFibGVzLTIvY29tcGlsZWQvaGVscGVycy9pcy1lbXB0eS5qcyIsIm5vZGVfbW9kdWxlcy92dWUtdGFibGVzLTIvY29tcGlsZWQvaGVscGVycy9pcy12YWxpZC1tb21lbnQtb2JqZWN0LmpzIiwibm9kZV9tb2R1bGVzL3Z1ZS10YWJsZXMtMi9jb21waWxlZC9oZWxwZXJzL29iamVjdC1maWxsZWQta2V5cy1jb3VudC5qcyIsIm5vZGVfbW9kdWxlcy92dWUtdGFibGVzLTIvY29tcGlsZWQvaGVscGVycy9yZXNpemVhYmxlLWNvbHVtbnMuanMiLCJub2RlX21vZHVsZXMvdnVlLXRhYmxlcy0yL2NvbXBpbGVkL2hlbHBlcnMvdWNmaXJzdC5qcyIsIm5vZGVfbW9kdWxlcy92dWUtdGFibGVzLTIvY29tcGlsZWQvaW5kZXguanMiLCJub2RlX21vZHVsZXMvdnVlLXRhYmxlcy0yL2NvbXBpbGVkL21ldGhvZHMvYXBwbHktZmlsdGVycy5qcyIsIm5vZGVfbW9kdWxlcy92dWUtdGFibGVzLTIvY29tcGlsZWQvbWV0aG9kcy9jZWxsLWNsYXNzZXMuanMiLCJub2RlX21vZHVsZXMvdnVlLXRhYmxlcy0yL2NvbXBpbGVkL21ldGhvZHMvY2hpbGQtcm93LXRvZ2dsZXItY2xhc3MuanMiLCJub2RlX21vZHVsZXMvdnVlLXRhYmxlcy0yL2NvbXBpbGVkL21ldGhvZHMvY2xpZW50LXNlYXJjaC5qcyIsIm5vZGVfbW9kdWxlcy92dWUtdGFibGVzLTIvY29tcGlsZWQvbWV0aG9kcy9jb2x1bW4tY2xhc3MuanMiLCJub2RlX21vZHVsZXMvdnVlLXRhYmxlcy0yL2NvbXBpbGVkL21ldGhvZHMvY3VycmVudGx5LXNvcnRlZC5qcyIsIm5vZGVfbW9kdWxlcy92dWUtdGFibGVzLTIvY29tcGlsZWQvbWV0aG9kcy9kYXRlLWZvcm1hdC5qcyIsIm5vZGVfbW9kdWxlcy92dWUtdGFibGVzLTIvY29tcGlsZWQvbWV0aG9kcy9kZWZhdWx0LXNvcnQuanMiLCJub2RlX21vZHVsZXMvdnVlLXRhYmxlcy0yL2NvbXBpbGVkL21ldGhvZHMvZGlzcGF0Y2guanMiLCJub2RlX21vZHVsZXMvdnVlLXRhYmxlcy0yL2NvbXBpbGVkL21ldGhvZHMvZGlzcGxheS5qcyIsIm5vZGVfbW9kdWxlcy92dWUtdGFibGVzLTIvY29tcGlsZWQvbWV0aG9kcy9maWx0ZXJhYmxlLmpzIiwibm9kZV9tb2R1bGVzL3Z1ZS10YWJsZXMtMi9jb21waWxlZC9tZXRob2RzL2dldC1jaGlsZC1yb3ctdGVtcGxhdGUuanMiLCJub2RlX21vZHVsZXMvdnVlLXRhYmxlcy0yL2NvbXBpbGVkL21ldGhvZHMvZ2V0LWNvbHVtbi1uYW1lLmpzIiwibm9kZV9tb2R1bGVzL3Z1ZS10YWJsZXMtMi9jb21waWxlZC9tZXRob2RzL2dldC1kYXRhLmpzIiwibm9kZV9tb2R1bGVzL3Z1ZS10YWJsZXMtMi9jb21waWxlZC9tZXRob2RzL2dldC1ncm91cC1zbG90LmpzIiwibm9kZV9tb2R1bGVzL3Z1ZS10YWJsZXMtMi9jb21waWxlZC9tZXRob2RzL2dldC1oZWFkaW5nLXRvb2x0aXAuanMiLCJub2RlX21vZHVsZXMvdnVlLXRhYmxlcy0yL2NvbXBpbGVkL21ldGhvZHMvZ2V0LWhlYWRpbmcuanMiLCJub2RlX21vZHVsZXMvdnVlLXRhYmxlcy0yL2NvbXBpbGVkL21ldGhvZHMvZ2V0LWluaXRpYWwtZGF0ZS1yYW5nZS5qcyIsIm5vZGVfbW9kdWxlcy92dWUtdGFibGVzLTIvY29tcGlsZWQvbWV0aG9kcy9nZXQtbmFtZS5qcyIsIm5vZGVfbW9kdWxlcy92dWUtdGFibGVzLTIvY29tcGlsZWQvbWV0aG9kcy9nZXQtb3Blbi1jaGlsZC1yb3dzLmpzIiwibm9kZV9tb2R1bGVzL3Z1ZS10YWJsZXMtMi9jb21waWxlZC9tZXRob2RzL2dldC1yZXNwb25zZS1kYXRhLmpzIiwibm9kZV9tb2R1bGVzL3Z1ZS10YWJsZXMtMi9jb21waWxlZC9tZXRob2RzL2dldC1zb3J0LWZuLmpzIiwibm9kZV9tb2R1bGVzL3Z1ZS10YWJsZXMtMi9jb21waWxlZC9tZXRob2RzL2dldC12YWx1ZS5qcyIsIm5vZGVfbW9kdWxlcy92dWUtdGFibGVzLTIvY29tcGlsZWQvbWV0aG9kcy9oYXMtZGF0ZS1maWx0ZXJzLmpzIiwibm9kZV9tb2R1bGVzL3Z1ZS10YWJsZXMtMi9jb21waWxlZC9tZXRob2RzL2luaXQtY3VzdG9tLWZpbHRlcnMuanMiLCJub2RlX21vZHVsZXMvdnVlLXRhYmxlcy0yL2NvbXBpbGVkL21ldGhvZHMvaW5pdC1kYXRlLWZpbHRlcnMuanMiLCJub2RlX21vZHVsZXMvdnVlLXRhYmxlcy0yL2NvbXBpbGVkL21ldGhvZHMvaW5pdC1vcHRpb25zLmpzIiwibm9kZV9tb2R1bGVzL3Z1ZS10YWJsZXMtMi9jb21waWxlZC9tZXRob2RzL2luaXQtb3JkZXItYnkuanMiLCJub2RlX21vZHVsZXMvdnVlLXRhYmxlcy0yL2NvbXBpbGVkL21ldGhvZHMvaW5pdC1wYWdpbmF0aW9uLmpzIiwibm9kZV9tb2R1bGVzL3Z1ZS10YWJsZXMtMi9jb21waWxlZC9tZXRob2RzL2luaXQtcXVlcnkuanMiLCJub2RlX21vZHVsZXMvdnVlLXRhYmxlcy0yL2NvbXBpbGVkL21ldGhvZHMvaW5pdC1zdGF0ZS5qcyIsIm5vZGVfbW9kdWxlcy92dWUtdGFibGVzLTIvY29tcGlsZWQvbWV0aG9kcy9pbml0aWFsLW9yZGVyLWFzY2VuZGluZy5qcyIsIm5vZGVfbW9kdWxlcy92dWUtdGFibGVzLTIvY29tcGlsZWQvbWV0aG9kcy9pcy1kYXRlLWZpbHRlci5qcyIsIm5vZGVfbW9kdWxlcy92dWUtdGFibGVzLTIvY29tcGlsZWQvbWV0aG9kcy9pcy1saXN0LWZpbHRlci5qcyIsIm5vZGVfbW9kdWxlcy92dWUtdGFibGVzLTIvY29tcGlsZWQvbWV0aG9kcy9pcy10ZXh0LWZpbHRlci5qcyIsIm5vZGVfbW9kdWxlcy92dWUtdGFibGVzLTIvY29tcGlsZWQvbWV0aG9kcy9vbi1wYWdpbmF0aW9uLmpzIiwibm9kZV9tb2R1bGVzL3Z1ZS10YWJsZXMtMi9jb21waWxlZC9tZXRob2RzL29ubHktY29sdW1uLmpzIiwibm9kZV9tb2R1bGVzL3Z1ZS10YWJsZXMtMi9jb21waWxlZC9tZXRob2RzL29yZGVyLWJ5LWNvbHVtbi5qcyIsIm5vZGVfbW9kdWxlcy92dWUtdGFibGVzLTIvY29tcGlsZWQvbWV0aG9kcy9yZWZyZXNoLmpzIiwibm9kZV9tb2R1bGVzL3Z1ZS10YWJsZXMtMi9jb21waWxlZC9tZXRob2RzL3JlZ2lzdGVyLWNsaWVudC1maWx0ZXJzLmpzIiwibm9kZV9tb2R1bGVzL3Z1ZS10YWJsZXMtMi9jb21waWxlZC9tZXRob2RzL3JlZ2lzdGVyLXNlcnZlci1maWx0ZXJzLmpzIiwibm9kZV9tb2R1bGVzL3Z1ZS10YWJsZXMtMi9jb21waWxlZC9tZXRob2RzL3JlbmRlci5qcyIsIm5vZGVfbW9kdWxlcy92dWUtdGFibGVzLTIvY29tcGlsZWQvbWV0aG9kcy9yZXNldC1xdWVyeS5qcyIsIm5vZGVfbW9kdWxlcy92dWUtdGFibGVzLTIvY29tcGlsZWQvbWV0aG9kcy9yb3ctd2FzLWNsaWNrZWQuanMiLCJub2RlX21vZHVsZXMvdnVlLXRhYmxlcy0yL2NvbXBpbGVkL21ldGhvZHMvc2VuZC1yZXF1ZXN0LmpzIiwibm9kZV9tb2R1bGVzL3Z1ZS10YWJsZXMtMi9jb21waWxlZC9tZXRob2RzL3NlcnZlci1zZWFyY2guanMiLCJub2RlX21vZHVsZXMvdnVlLXRhYmxlcy0yL2NvbXBpbGVkL21ldGhvZHMvc2V0LWNvbHVtbnMtZHJvcGRvd24tY2xvc2UtbGlzdGVuZXIuanMiLCJub2RlX21vZHVsZXMvdnVlLXRhYmxlcy0yL2NvbXBpbGVkL21ldGhvZHMvc2V0LWRhdGEuanMiLCJub2RlX21vZHVsZXMvdnVlLXRhYmxlcy0yL2NvbXBpbGVkL21ldGhvZHMvc2V0LWRhdGVwaWNrZXItdGV4dC5qcyIsIm5vZGVfbW9kdWxlcy92dWUtdGFibGVzLTIvY29tcGlsZWQvbWV0aG9kcy9zZXQtZmlsdGVyLmpzIiwibm9kZV9tb2R1bGVzL3Z1ZS10YWJsZXMtMi9jb21waWxlZC9tZXRob2RzL3NldC1maWx0ZXJzLWRvbS5qcyIsIm5vZGVfbW9kdWxlcy92dWUtdGFibGVzLTIvY29tcGlsZWQvbWV0aG9kcy9zZXQtbGltaXQuanMiLCJub2RlX21vZHVsZXMvdnVlLXRhYmxlcy0yL2NvbXBpbGVkL21ldGhvZHMvc2V0LW9yZGVyLmpzIiwibm9kZV9tb2R1bGVzL3Z1ZS10YWJsZXMtMi9jb21waWxlZC9tZXRob2RzL3NldC1wYWdlLmpzIiwibm9kZV9tb2R1bGVzL3Z1ZS10YWJsZXMtMi9jb21waWxlZC9tZXRob2RzL3NldC11c2VyLW11bHRpLXNvcnQuanMiLCJub2RlX21vZHVsZXMvdnVlLXRhYmxlcy0yL2NvbXBpbGVkL21ldGhvZHMvc2hvdWxkLXNob3ctY29sdW1uLW9uLWluaXQuanMiLCJub2RlX21vZHVsZXMvdnVlLXRhYmxlcy0yL2NvbXBpbGVkL21ldGhvZHMvc29ydGFibGUtY2hldnJvbi1jbGFzcy5qcyIsIm5vZGVfbW9kdWxlcy92dWUtdGFibGVzLTIvY29tcGlsZWQvbWV0aG9kcy9zb3J0YWJsZS1jbGFzcy5qcyIsIm5vZGVfbW9kdWxlcy92dWUtdGFibGVzLTIvY29tcGlsZWQvbWV0aG9kcy9zb3J0YWJsZS5qcyIsIm5vZGVfbW9kdWxlcy92dWUtdGFibGVzLTIvY29tcGlsZWQvbWV0aG9kcy90b2dnbGUtY2hpbGQtcm93LmpzIiwibm9kZV9tb2R1bGVzL3Z1ZS10YWJsZXMtMi9jb21waWxlZC9tZXRob2RzL3RvZ2dsZS1jb2x1bW4uanMiLCJub2RlX21vZHVsZXMvdnVlLXRhYmxlcy0yL2NvbXBpbGVkL21ldGhvZHMvdG9nZ2xlLWNvbHVtbnMtZHJvcGRvd24uanMiLCJub2RlX21vZHVsZXMvdnVlLXRhYmxlcy0yL2NvbXBpbGVkL21ldGhvZHMvdG9nZ2xlLWdyb3VwLWRpcmVjdGlvbi5qcyIsIm5vZGVfbW9kdWxlcy92dWUtdGFibGVzLTIvY29tcGlsZWQvbWV0aG9kcy90cmFuc2Zvcm0tZGF0ZS1zdHJpbmdzLXRvLW1vbWVudC5qcyIsIm5vZGVfbW9kdWxlcy92dWUtdGFibGVzLTIvY29tcGlsZWQvbWV0aG9kcy91cGRhdGUtc3RhdGUuanMiLCJub2RlX21vZHVsZXMvdnVlLXRhYmxlcy0yL2NvbXBpbGVkL21peGlucy9iZWZvcmUtZGVzdHJveS5qcyIsIm5vZGVfbW9kdWxlcy92dWUtdGFibGVzLTIvY29tcGlsZWQvbWl4aW5zL2NvbXB1dGVkLmpzIiwibm9kZV9tb2R1bGVzL3Z1ZS10YWJsZXMtMi9jb21waWxlZC9taXhpbnMvY3JlYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy92dWUtdGFibGVzLTIvY29tcGlsZWQvbWl4aW5zL2RhdGEuanMiLCJub2RlX21vZHVsZXMvdnVlLXRhYmxlcy0yL2NvbXBpbGVkL21peGlucy9tZXRob2RzLmpzIiwibm9kZV9tb2R1bGVzL3Z1ZS10YWJsZXMtMi9jb21waWxlZC9tb2R1bGVzL2NvbHVtbi1maWx0ZXJzLmpzIiwibm9kZV9tb2R1bGVzL3Z1ZS10YWJsZXMtMi9jb21waWxlZC9tb2R1bGVzL2NvbHVtbnMtZHJvcGRvd24uanMiLCJub2RlX21vZHVsZXMvdnVlLXRhYmxlcy0yL2NvbXBpbGVkL21vZHVsZXMvZGF0ZS1maWx0ZXIuanMiLCJub2RlX21vZHVsZXMvdnVlLXRhYmxlcy0yL2NvbXBpbGVkL21vZHVsZXMvZHJvcGRvd24taXRlbS13cmFwcGVyLmpzIiwibm9kZV9tb2R1bGVzL3Z1ZS10YWJsZXMtMi9jb21waWxlZC9tb2R1bGVzL2Ryb3Bkb3duLXBhZ2luYXRpb24tY291bnQuanMiLCJub2RlX21vZHVsZXMvdnVlLXRhYmxlcy0yL2NvbXBpbGVkL21vZHVsZXMvZHJvcGRvd24tcGFnaW5hdGlvbi5qcyIsIm5vZGVfbW9kdWxlcy92dWUtdGFibGVzLTIvY29tcGlsZWQvbW9kdWxlcy9kcm9wZG93bi13cmFwcGVyLmpzIiwibm9kZV9tb2R1bGVzL3Z1ZS10YWJsZXMtMi9jb21waWxlZC9tb2R1bGVzL2hlYWRpbmdzLmpzIiwibm9kZV9tb2R1bGVzL3Z1ZS10YWJsZXMtMi9jb21waWxlZC9tb2R1bGVzL2xpc3QtZmlsdGVyLmpzIiwibm9kZV9tb2R1bGVzL3Z1ZS10YWJsZXMtMi9jb21waWxlZC9tb2R1bGVzL25vcm1hbC1maWx0ZXIuanMiLCJub2RlX21vZHVsZXMvdnVlLXRhYmxlcy0yL2NvbXBpbGVkL21vZHVsZXMvcGFnaW5hdGlvbi5qcyIsIm5vZGVfbW9kdWxlcy92dWUtdGFibGVzLTIvY29tcGlsZWQvbW9kdWxlcy9wZXItcGFnZS12YWx1ZXMuanMiLCJub2RlX21vZHVsZXMvdnVlLXRhYmxlcy0yL2NvbXBpbGVkL21vZHVsZXMvcGVyLXBhZ2UuanMiLCJub2RlX21vZHVsZXMvdnVlLXRhYmxlcy0yL2NvbXBpbGVkL21vZHVsZXMvcm93cy5qcyIsIm5vZGVfbW9kdWxlcy92dWUtdGFibGVzLTIvY29tcGlsZWQvbW9kdWxlcy9zb3J0LWNvbnRyb2wuanMiLCJub2RlX21vZHVsZXMvdnVlLXRhYmxlcy0yL2NvbXBpbGVkL21vZHVsZXMvdGV4dC1maWx0ZXIuanMiLCJub2RlX21vZHVsZXMvdnVlLXRhYmxlcy0yL2NvbXBpbGVkL3Nsb3RzLmpzIiwibm9kZV9tb2R1bGVzL3Z1ZS10YWJsZXMtMi9jb21waWxlZC9zdGF0ZS9kYXRhLmpzIiwibm9kZV9tb2R1bGVzL3Z1ZS10YWJsZXMtMi9jb21waWxlZC9zdGF0ZS9tdXRhdGlvbnMuanMiLCJub2RlX21vZHVsZXMvdnVlLXRhYmxlcy0yL2NvbXBpbGVkL3N0YXRlL25vcm1hbC5qcyIsIm5vZGVfbW9kdWxlcy92dWUtdGFibGVzLTIvY29tcGlsZWQvc3RhdGUvcmVnaXN0ZXItbW9kdWxlLmpzIiwibm9kZV9tb2R1bGVzL3Z1ZS10YWJsZXMtMi9jb21waWxlZC9zdGF0ZS9zdGF0ZS5qcyIsIm5vZGVfbW9kdWxlcy92dWUtdGFibGVzLTIvY29tcGlsZWQvc3RhdGUvdnVleC5qcyIsIm5vZGVfbW9kdWxlcy92dWUtdGFibGVzLTIvY29tcGlsZWQvdGFibGUuanMiLCJub2RlX21vZHVsZXMvdnVlLXRhYmxlcy0yL2NvbXBpbGVkL3RlbXBsYXRlLWNvbXBpbGVyLmpzIiwibm9kZV9tb2R1bGVzL3Z1ZS10YWJsZXMtMi9jb21waWxlZC90ZW1wbGF0ZXMvZGVmYXVsdC5qcyIsIm5vZGVfbW9kdWxlcy92dWUtdGFibGVzLTIvY29tcGlsZWQvdGVtcGxhdGVzL2Zvb3Rlci1wYWdpbmF0aW9uLmpzIiwibm9kZV9tb2R1bGVzL3Z1ZS10YWJsZXMtMi9jb21waWxlZC90aGVtZXMvYm9vdHN0cmFwMy5qcyIsIm5vZGVfbW9kdWxlcy92dWUtdGFibGVzLTIvY29tcGlsZWQvdGhlbWVzL2Jvb3RzdHJhcDQuanMiLCJub2RlX21vZHVsZXMvdnVlLXRhYmxlcy0yL2NvbXBpbGVkL3RoZW1lcy9idWxtYS5qcyIsIm5vZGVfbW9kdWxlcy92dWUtdGFibGVzLTIvY29tcGlsZWQvdi1jbGllbnQtdGFibGUuanMiLCJub2RlX21vZHVsZXMvdnVlLXRhYmxlcy0yL2NvbXBpbGVkL3Ytc2VydmVyLXRhYmxlLmpzIiwibm9kZV9tb2R1bGVzL3Z1ZS10YWJsZXMtMi9ub2RlX21vZHVsZXMvY2xvbmUvY2xvbmUuanMiLCJub2RlX21vZHVsZXMvdnVlL2Rpc3QvdnVlLmNvbW1vbi5qcyIsIm5vZGVfbW9kdWxlcy92dWUvZGlzdC92dWUuY29tbW9uLnByb2QuanMiLCJub2RlX21vZHVsZXMvdnVlL2Rpc3QvdnVlLnJ1bnRpbWUuY29tbW9uLmpzIiwibm9kZV9tb2R1bGVzL3Z1ZS9kaXN0L3Z1ZS5ydW50aW1lLmNvbW1vbi5wcm9kLmpzIiwibm9kZV9tb2R1bGVzL3Z1ZWlmeS9saWIvaW5zZXJ0LWNzcy5qcyIsIm5vZGVfbW9kdWxlcy92dWVqcy1kYXRlcGlja2VyL2Rpc3QvYnVpbGQuanMiLCJub2RlX21vZHVsZXMvdnVleC9kaXN0L3Z1ZXguY29tbW9uLmpzIiwic3JjL2pzL21hc3Rlci5qcyIsInNyYy9qcy9tb2R1bGVzL2FuYWx5dGljcy1hY3Rpb25zLmpzIiwic3JjL2pzL21vZHVsZXMvYnJhbmNoLWJhci5qcyIsInNyYy9qcy9tb2R1bGVzL2NvbGxlY3Rpb24tbWFrZXIuanMiLCJzcmMvanMvbW9kdWxlcy9jdXN0b20tb3JkZXJlci1pbmZvLmpzIiwic3JjL2pzL21vZHVsZXMvY3VzdG9tLXNlbGVjdC5qcyIsInNyYy9qcy9tb2R1bGVzL2ZpbHRlci1tYWNoaW5lLWFjY2Vzc29yaWVzLmpzIiwic3JjL2pzL21vZHVsZXMvZmlsdGVyLW5ld3MuanMiLCJzcmMvanMvbW9kdWxlcy9pbWFnZS1wb3B1cC5qcyIsInNyYy9qcy9tb2R1bGVzL21hY2hpbmUtc2VhcmNoLmpzIiwic3JjL2pzL21vZHVsZXMvbmF2aWdhdGlvbi5qcyIsInNyYy9qcy9tb2R1bGVzL3NlbGVjdC1tYXRlcmlhbC1sYW5ndWFnZS5qcyIsInNyYy9qcy9tb2R1bGVzL3NlcnZpY2VzL2FwaS5qcyIsInNyYy9qcy9tb2R1bGVzL3NlcnZpY2VzL2RhdGEtc2VydmljZS5qcyIsInNyYy9qcy9tb2R1bGVzL3NlcnZpY2VzL3VzZXItcmlnaHRzLmpzIiwic3JjL2pzL21vZHVsZXMvc2hvdy1tb3JlLWZpbGUtaW5wdXRzLmpzIiwic3JjL2pzL21vZHVsZXMvdmlkZW8tcG9wdXAuanMiLCJzcmMvanMvbW9kdWxlcy92dWUvYXBwcy9hcHAudnVlIiwic3JjL2pzL21vZHVsZXMvdnVlL2FwcHMvY29tbW9uLXNldHRpbmdzLmpzIiwic3JjL2pzL21vZHVsZXMvdnVlL2FwcHMvY29tcGxhaW50cy1hcHAvaW5kZXguanMiLCJzcmMvanMvbW9kdWxlcy92dWUvYXBwcy9jb21wbGFpbnRzLWFwcC9yb3V0ZXIvaW5kZXguanMiLCJzcmMvanMvbW9kdWxlcy92dWUvYXBwcy9jdXN0b21lci1tYWNoaW5lcy1hcHAvcm91dGVyL2luZGV4LmpzIiwic3JjL2pzL21vZHVsZXMvdnVlL2FwcHMvY3VzdG9tZXJzLWFwcC9pbmRleC5qcyIsInNyYy9qcy9tb2R1bGVzL3Z1ZS9hcHBzL2N1c3RvbWVycy1hcHAvcm91dGVyL2luZGV4LmpzIiwic3JjL2pzL21vZHVsZXMvdnVlL2FwcHMvY3VzdG9tZXJzLWFwcC92aWV3LWhvbWUudnVlIiwic3JjL2pzL21vZHVsZXMvdnVlL2FwcHMvZm9yZ290dGVuLXBhc3N3b3JkLWFwcC9pbmRleC5qcyIsInNyYy9qcy9tb2R1bGVzL3Z1ZS9hcHBzL2ZvcmdvdHRlbi1wYXNzd29yZC1hcHAvcm91dGVyL2luZGV4LmpzIiwic3JjL2pzL21vZHVsZXMvdnVlL2FwcHMvb3duLWNvbXBhbnktYXBwL3JvdXRlci9pbmRleC5qcyIsInNyYy9qcy9tb2R1bGVzL3Z1ZS9hcHBzL3VwZGF0ZS1wYXNzd29yZC1hcHAvaW5kZXguanMiLCJzcmMvanMvbW9kdWxlcy92dWUvYXBwcy91cGRhdGUtcGFzc3dvcmQtYXBwL3JvdXRlci9pbmRleC5qcyIsInNyYy9qcy9tb2R1bGVzL3Z1ZS9hcHBzL3VzZXItc2V0dGluZ3MtYXBwL3JvdXRlci9pbmRleC5qcyIsInNyYy9qcy9tb2R1bGVzL3Z1ZS9hcHBzL3dhcnJhbnR5LXJlZ2lzdHJhdGlvbnMtYXBwL3JvdXRlci9pbmRleC5qcyIsInNyYy9qcy9tb2R1bGVzL3Z1ZS9jb21wb25lbnRzL21vZGFsLWNvbXBhbnkudnVlIiwic3JjL2pzL21vZHVsZXMvdnVlL2NvbXBvbmVudHMvbW9kYWwtY29tcGxhaW50LnZ1ZSIsInNyYy9qcy9tb2R1bGVzL3Z1ZS9jb21wb25lbnRzL21vZGFsLXVzZXIudnVlIiwic3JjL2pzL21vZHVsZXMvdnVlL2NvbXBvbmVudHMvbW9kYWwtd2FycmFudHktcmVnaXN0cmF0aW9uLnZ1ZSIsInNyYy9qcy9tb2R1bGVzL3Z1ZS9jb21wb25lbnRzL3RoZS0xLWNvbHVtbi1sYXlvdXQuanMiLCJzcmMvanMvbW9kdWxlcy92dWUvY29tcG9uZW50cy90aGUtc2lkZWJhci1sYXlvdXQuanMiLCJzcmMvanMvbW9kdWxlcy92dWUvY29tcG9uZW50cy90aGUtc3ViaGVhZGVyLmpzIiwic3JjL2pzL21vZHVsZXMvdnVlL2NvbXBvbmVudHMvdi1jb21wbGFpbnQtdXNlci1pbmZvLnZ1ZSIsInNyYy9qcy9tb2R1bGVzL3Z1ZS9jb21wb25lbnRzL3YtY3VycmVuY3ktaW5wdXQudnVlIiwic3JjL2pzL21vZHVsZXMvdnVlL2NvbXBvbmVudHMvdi1kYXRhLWl0ZW1zLnZ1ZSIsInNyYy9qcy9tb2R1bGVzL3Z1ZS9jb21wb25lbnRzL3YtZmlsZS52dWUiLCJzcmMvanMvbW9kdWxlcy92dWUvY29tcG9uZW50cy92LWZvcm0tZmllbGQudnVlIiwic3JjL2pzL21vZHVsZXMvdnVlL2NvbXBvbmVudHMvdi1mb3JtLnZ1ZSIsInNyYy9qcy9tb2R1bGVzL3Z1ZS9jb21wb25lbnRzL3YtbW9kYWwtY29udGVudC52dWUiLCJzcmMvanMvbW9kdWxlcy92dWUvY29tcG9uZW50cy92LW51bWJlci1pbnB1dC52dWUiLCJzcmMvanMvbW9kdWxlcy92dWUvY29tcG9uZW50cy92LXBhc3Mtc3RyZW5ndGgudnVlIiwic3JjL2pzL21vZHVsZXMvdnVlL2NvbXBvbmVudHMvdmlldy1jaGFuZ2UtcGFzc3dvcmQudnVlIiwic3JjL2pzL21vZHVsZXMvdnVlL2NvbXBvbmVudHMvdmlldy1jb21wYW5pZXMudnVlIiwic3JjL2pzL21vZHVsZXMvdnVlL2NvbXBvbmVudHMvdmlldy1jb21wYW55LnZ1ZSIsInNyYy9qcy9tb2R1bGVzL3Z1ZS9jb21wb25lbnRzL3ZpZXctY29tcGxhaW50LnZ1ZSIsInNyYy9qcy9tb2R1bGVzL3Z1ZS9jb21wb25lbnRzL3ZpZXctY29tcGxhaW50cy52dWUiLCJzcmMvanMvbW9kdWxlcy92dWUvY29tcG9uZW50cy92aWV3LWN1c3RvbWVyLW1hY2hpbmUudnVlIiwic3JjL2pzL21vZHVsZXMvdnVlL2NvbXBvbmVudHMvdmlldy1jdXN0b21lci1tYWNoaW5lcy52dWUiLCJzcmMvanMvbW9kdWxlcy92dWUvY29tcG9uZW50cy92aWV3LWVkaXQtYWNjb3VudC52dWUiLCJzcmMvanMvbW9kdWxlcy92dWUvY29tcG9uZW50cy92aWV3LWZvcmdvdHRlbi1wYXNzd29yZC52dWUiLCJzcmMvanMvbW9kdWxlcy92dWUvY29tcG9uZW50cy92aWV3LXVwZGF0ZS1wYXNzd29yZC52dWUiLCJzcmMvanMvbW9kdWxlcy92dWUvY29tcG9uZW50cy92aWV3LXVzZXItc2V0dGluZ3MudnVlIiwic3JjL2pzL21vZHVsZXMvdnVlL2NvbXBvbmVudHMvdmlldy13YXJyYW50eS1yZWdpc3RyYXRpb24udnVlIiwic3JjL2pzL21vZHVsZXMvdnVlL2NvbXBvbmVudHMvdmlldy13YXJyYW50eS1yZWdpc3RyYXRpb25zLnZ1ZSIsInNyYy9qcy9tb2R1bGVzL3Z1ZS9zdG9yZS9pbmRleC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtDQ0FDLFNBQVUsRUFBUSxHQUNDLGdCQUFaLFVBQTBDLG1CQUFYLFFBQXlCLE9BQU8sUUFBVSxJQUM5RCxrQkFBWCxTQUF5QixPQUFPLElBQU0sT0FBTyxHQUNuRCxFQUFPLGVBQWlCLEtBQ3hCLEtBQU0sV0FBZSxZQWN2QixPQVpnQixVQUFtQixHQUNqQyxJQUFLLEdBQUksR0FBTyxVQUFVLE9BQVEsRUFBTyxHQUFJLE9BQU0sRUFBTyxFQUFJLEVBQU8sRUFBSSxHQUFJLEVBQU8sRUFBRyxFQUFPLEVBQU0sSUFDbEcsRUFBSyxFQUFPLEdBQUssVUFBVSxFQUc3QixPQUFPLEdBQUssT0FBTyxTQUFVLEVBQU8sR0FDbEMsTUFBTyxHQUFNLE9BQU8sU0FBVSxHQUM1QixPQUErQixJQUF4QixFQUFRLFFBQVEsTUFFeEI7OztBQ2ZMLE9BQU8sUUFBVSxRQUFROzs7QUNBekIsWUFFQSxJQUFJLE9BQVEsUUFBUSxjQUNoQixPQUFTLFFBQVEsb0JBQ2pCLFNBQVcsUUFBUSx5QkFDbkIsYUFBZSxRQUFRLDZCQUN2QixnQkFBa0IsUUFBUSxnQ0FDMUIsWUFBYyxRQUFRLHNCQUUxQixRQUFPLFFBQVUsU0FBb0IsR0FDbkMsTUFBTyxJQUFJLFNBQVEsU0FBNEIsRUFBUyxHQUN0RCxHQUFJLEdBQWMsRUFBTyxLQUNyQixFQUFpQixFQUFPLE9BRXhCLE9BQU0sV0FBVyxVQUNaLEdBQWUsZUFHeEIsSUFBSSxHQUFVLEdBQUksZUFHbEIsSUFBSSxFQUFPLEtBQU0sQ0FDZixHQUFJLEdBQVcsRUFBTyxLQUFLLFVBQVksR0FDbkMsRUFBVyxFQUFPLEtBQUssVUFBWSxFQUN2QyxHQUFlLGNBQWdCLFNBQVcsS0FBSyxFQUFXLElBQU0sR0EwRWxFLEdBdkVBLEVBQVEsS0FBSyxFQUFPLE9BQU8sY0FBZSxTQUFTLEVBQU8sSUFBSyxFQUFPLE9BQVEsRUFBTyxtQkFBbUIsR0FHeEcsRUFBUSxRQUFVLEVBQU8sUUFHekIsRUFBUSxtQkFBcUIsV0FDM0IsR0FBSyxHQUFrQyxJQUF2QixFQUFRLGFBUUQsSUFBbkIsRUFBUSxRQUFrQixFQUFRLGFBQXdELElBQXpDLEVBQVEsWUFBWSxRQUFRLFVBQWpGLENBS0EsR0FBSSxHQUFrQix5QkFBMkIsR0FBVSxhQUFhLEVBQVEseUJBQTJCLEtBQ3ZHLEVBQWdCLEVBQU8sY0FBd0MsU0FBeEIsRUFBTyxhQUFpRCxFQUFRLFNBQS9CLEVBQVEsYUFDaEYsR0FDRixLQUFNLEVBQ04sT0FBUSxFQUFRLE9BQ2hCLFdBQVksRUFBUSxXQUNwQixRQUFTLEVBQ1QsT0FBUSxFQUNSLFFBQVMsRUFHWCxRQUFPLEVBQVMsRUFBUSxHQUd4QixFQUFVLE9BSVosRUFBUSxRQUFVLFdBQ1gsSUFJTCxFQUFPLFlBQVksa0JBQW1CLEVBQVEsZUFBZ0IsSUFHOUQsRUFBVSxPQUlaLEVBQVEsUUFBVSxXQUdoQixFQUFPLFlBQVksZ0JBQWlCLEVBQVEsS0FBTSxJQUdsRCxFQUFVLE1BSVosRUFBUSxVQUFZLFdBQ2xCLEVBQU8sWUFBWSxjQUFnQixFQUFPLFFBQVUsY0FBZSxFQUFRLGVBQ3pFLElBR0YsRUFBVSxNQU1SLE1BQU0sdUJBQXdCLENBQ2hDLEdBQUksR0FBVSxRQUFRLHdCQUdsQixHQUFhLEVBQU8saUJBQW1CLGdCQUFnQixFQUFPLE9BQVMsRUFBTyxlQUNoRixFQUFRLEtBQUssRUFBTyxvQkFDcEIsRUFFRSxLQUNGLEVBQWUsRUFBTyxnQkFBa0IsR0F1QjVDLEdBbEJJLG9CQUFzQixJQUN4QixNQUFNLFFBQVEsRUFBZ0IsU0FBMEIsRUFBSyxPQUNoQyxLQUFoQixHQUFxRCxpQkFBdEIsRUFBSSxvQkFFckMsR0FBZSxHQUd0QixFQUFRLGlCQUFpQixFQUFLLEtBTWhDLEVBQU8sa0JBQ1QsRUFBUSxpQkFBa0IsR0FJeEIsRUFBTyxhQUNULElBQ0UsRUFBUSxhQUFlLEVBQU8sYUFDOUIsTUFBTyxHQUdQLEdBQTRCLFNBQXhCLEVBQU8sYUFDVCxLQUFNLEdBTTZCLGtCQUE5QixHQUFPLG9CQUNoQixFQUFRLGlCQUFpQixXQUFZLEVBQU8sb0JBSVAsa0JBQTVCLEdBQU8sa0JBQW1DLEVBQVEsUUFDM0QsRUFBUSxPQUFPLGlCQUFpQixXQUFZLEVBQU8sa0JBR2pELEVBQU8sYUFFVCxFQUFPLFlBQVksUUFBUSxLQUFLLFNBQW9CLEdBQzdDLElBSUwsRUFBUSxRQUNSLEVBQU8sR0FFUCxFQUFVLFlBSU0sS0FBaEIsSUFDRixFQUFjLE1BSWhCLEVBQVEsS0FBSzs7O0FDM0tqQixZQWNBLFNBQVMsZ0JBQWUsR0FDdEIsR0FBSSxHQUFVLEdBQUksT0FBTSxHQUNwQixFQUFXLEtBQUssTUFBTSxVQUFVLFFBQVMsRUFRN0MsT0FMQSxPQUFNLE9BQU8sRUFBVSxNQUFNLFVBQVcsR0FHeEMsTUFBTSxPQUFPLEVBQVUsR0FFaEIsRUF0QlQsR0FBSSxPQUFRLFFBQVEsV0FDaEIsS0FBTyxRQUFRLGtCQUNmLE1BQVEsUUFBUSxnQkFDaEIsWUFBYyxRQUFRLHNCQUN0QixTQUFXLFFBQVEsY0FzQm5CLE1BQVEsZUFBZSxTQUczQixPQUFNLE1BQVEsTUFHZCxNQUFNLE9BQVMsU0FBZ0IsR0FDN0IsTUFBTyxnQkFBZSxZQUFZLE1BQU0sU0FBVSxLQUlwRCxNQUFNLE9BQVMsUUFBUSxtQkFDdkIsTUFBTSxZQUFjLFFBQVEsd0JBQzVCLE1BQU0sU0FBVyxRQUFRLHFCQUd6QixNQUFNLElBQU0sU0FBYSxHQUN2QixNQUFPLFNBQVEsSUFBSSxJQUVyQixNQUFNLE9BQVMsUUFBUSxvQkFFdkIsT0FBTyxRQUFVLE1BR2pCLE9BQU8sUUFBUSxRQUFVOzs7QUNwRHpCLFlBUUEsU0FBUyxRQUFPLEdBQ2QsS0FBSyxRQUFVLEVBR2pCLE9BQU8sVUFBVSxTQUFXLFdBQzFCLE1BQU8sVUFBWSxLQUFLLFFBQVUsS0FBTyxLQUFLLFFBQVUsS0FHMUQsT0FBTyxVQUFVLFlBQWEsRUFFOUIsT0FBTyxRQUFVOzs7QUNsQmpCLFlBVUEsU0FBUyxhQUFZLEdBQ25CLEdBQXdCLGtCQUFiLEdBQ1QsS0FBTSxJQUFJLFdBQVUsK0JBR3RCLElBQUksRUFDSixNQUFLLFFBQVUsR0FBSSxTQUFRLFNBQXlCLEdBQ2xELEVBQWlCLEdBR25CLElBQUksR0FBUSxJQUNaLEdBQVMsU0FBZ0IsR0FDbkIsRUFBTSxTQUtWLEVBQU0sT0FBUyxHQUFJLFFBQU8sR0FDMUIsRUFBZSxFQUFNLFdBMUJ6QixHQUFJLFFBQVMsUUFBUSxXQWlDckIsYUFBWSxVQUFVLGlCQUFtQixXQUN2QyxHQUFJLEtBQUssT0FDUCxLQUFNLE1BQUssUUFRZixZQUFZLE9BQVMsV0FDbkIsR0FBSSxFQUlKLFFBQ0UsTUFKVSxHQUFJLGFBQVksU0FBa0IsR0FDNUMsRUFBUyxJQUlULE9BQVEsSUFJWixPQUFPLFFBQVU7OztBQ3hEakIsWUFFQSxRQUFPLFFBQVUsU0FBa0IsR0FDakMsU0FBVSxJQUFTLEVBQU07OztBQ0gzQixZQWFBLFNBQVMsT0FBTSxHQUNiLEtBQUssU0FBVyxFQUNoQixLQUFLLGNBQ0gsUUFBUyxHQUFJLG9CQUNiLFNBQVUsR0FBSSxxQkFmbEIsR0FBSSxPQUFRLFFBQVEsY0FDaEIsU0FBVyxRQUFRLHVCQUNuQixtQkFBcUIsUUFBUSx3QkFDN0IsZ0JBQWtCLFFBQVEscUJBQzFCLFlBQWMsUUFBUSxnQkFvQjFCLE9BQU0sVUFBVSxRQUFVLFNBQWlCLEdBR25CLGdCQUFYLElBQ1QsRUFBUyxVQUFVLE9BQ25CLEVBQU8sSUFBTSxVQUFVLElBRXZCLEVBQVMsTUFHWCxFQUFTLFlBQVksS0FBSyxTQUFVLEdBQ3BDLEVBQU8sT0FBUyxFQUFPLE9BQVMsRUFBTyxPQUFPLGNBQWdCLEtBRzlELElBQUksSUFBUyxvQkFBaUIsSUFDMUIsRUFBVSxRQUFRLFFBQVEsRUFVOUIsS0FSQSxLQUFLLGFBQWEsUUFBUSxRQUFRLFNBQW9DLEdBQ3BFLEVBQU0sUUFBUSxFQUFZLFVBQVcsRUFBWSxZQUduRCxLQUFLLGFBQWEsU0FBUyxRQUFRLFNBQWtDLEdBQ25FLEVBQU0sS0FBSyxFQUFZLFVBQVcsRUFBWSxZQUd6QyxFQUFNLFFBQ1gsRUFBVSxFQUFRLEtBQUssRUFBTSxRQUFTLEVBQU0sUUFHOUMsT0FBTyxJQUdULE1BQU0sVUFBVSxPQUFTLFNBQWdCLEdBRXZDLE1BREEsR0FBUyxZQUFZLEtBQUssU0FBVSxHQUM3QixTQUFTLEVBQU8sSUFBSyxFQUFPLE9BQVEsRUFBTyxrQkFBa0IsUUFBUSxNQUFPLEtBSXJGLE1BQU0sU0FBUyxTQUFVLE1BQU8sT0FBUSxXQUFZLFNBQTZCLEdBRS9FLE1BQU0sVUFBVSxHQUFVLFNBQVMsRUFBSyxHQUN0QyxNQUFPLE1BQUssUUFBUSxNQUFNLE1BQU0sT0FDOUIsT0FBUSxFQUNSLElBQUssUUFLWCxNQUFNLFNBQVMsT0FBUSxNQUFPLFNBQVUsU0FBK0IsR0FFckUsTUFBTSxVQUFVLEdBQVUsU0FBUyxFQUFLLEVBQU0sR0FDNUMsTUFBTyxNQUFLLFFBQVEsTUFBTSxNQUFNLE9BQzlCLE9BQVEsRUFDUixJQUFLLEVBQ0wsS0FBTSxRQUtaLE9BQU8sUUFBVTs7O0FDckZqQixZQUlBLFNBQVMsc0JBQ1AsS0FBSyxZQUhQLEdBQUksT0FBUSxRQUFRLGFBY3BCLG9CQUFtQixVQUFVLElBQU0sU0FBYSxFQUFXLEdBS3pELE1BSkEsTUFBSyxTQUFTLE1BQ1osVUFBVyxFQUNYLFNBQVUsSUFFTCxLQUFLLFNBQVMsT0FBUyxHQVFoQyxtQkFBbUIsVUFBVSxNQUFRLFNBQWUsR0FDOUMsS0FBSyxTQUFTLEtBQ2hCLEtBQUssU0FBUyxHQUFNLE9BWXhCLG1CQUFtQixVQUFVLFFBQVUsU0FBaUIsR0FDdEQsTUFBTSxRQUFRLEtBQUssU0FBVSxTQUF3QixHQUN6QyxPQUFOLEdBQ0YsRUFBRyxNQUtULE9BQU8sUUFBVTs7O0FDbkRqQixZQUVBLElBQUksY0FBZSxRQUFRLGlCQVkzQixRQUFPLFFBQVUsU0FBcUIsRUFBUyxFQUFRLEVBQU0sRUFBUyxHQUNwRSxHQUFJLEdBQVEsR0FBSSxPQUFNLEVBQ3RCLE9BQU8sY0FBYSxFQUFPLEVBQVEsRUFBTSxFQUFTOzs7QUNoQnBELFlBWUEsU0FBUyw4QkFBNkIsR0FDaEMsRUFBTyxhQUNULEVBQU8sWUFBWSxtQkFadkIsR0FBSSxPQUFRLFFBQVEsY0FDaEIsY0FBZ0IsUUFBUSxtQkFDeEIsU0FBVyxRQUFRLHNCQUNuQixTQUFXLFFBQVEsZUFDbkIsY0FBZ0IsUUFBUSw4QkFDeEIsWUFBYyxRQUFRLDJCQWlCMUIsUUFBTyxRQUFVLFNBQXlCLEdBa0N4QyxNQWpDQSw4QkFBNkIsR0FHekIsRUFBTyxVQUFZLGNBQWMsRUFBTyxPQUMxQyxFQUFPLElBQU0sWUFBWSxFQUFPLFFBQVMsRUFBTyxNQUlsRCxFQUFPLFFBQVUsRUFBTyxZQUd4QixFQUFPLEtBQU8sY0FDWixFQUFPLEtBQ1AsRUFBTyxRQUNQLEVBQU8sa0JBSVQsRUFBTyxRQUFVLE1BQU0sTUFDckIsRUFBTyxRQUFRLFdBQ2YsRUFBTyxRQUFRLEVBQU8sWUFDdEIsRUFBTyxhQUdULE1BQU0sU0FDSCxTQUFVLE1BQU8sT0FBUSxPQUFRLE1BQU8sUUFBUyxVQUNsRCxTQUEyQixTQUNsQixHQUFPLFFBQVEsTUFJWixFQUFPLFNBQVcsU0FBUyxTQUUxQixHQUFRLEtBQUssU0FBNkIsR0FVdkQsTUFUQSw4QkFBNkIsR0FHN0IsRUFBUyxLQUFPLGNBQ2QsRUFBUyxLQUNULEVBQVMsUUFDVCxFQUFPLG1CQUdGLEdBQ04sU0FBNEIsR0FjN0IsTUFiSyxVQUFTLEtBQ1osNkJBQTZCLEdBR3pCLEdBQVUsRUFBTyxXQUNuQixFQUFPLFNBQVMsS0FBTyxjQUNyQixFQUFPLFNBQVMsS0FDaEIsRUFBTyxTQUFTLFFBQ2hCLEVBQU8scUJBS04sUUFBUSxPQUFPOzs7QUNuRjFCLFlBWUEsUUFBTyxRQUFVLFNBQXNCLEVBQU8sRUFBUSxFQUFNLEVBQVMsR0E0Qm5FLE1BM0JBLEdBQU0sT0FBUyxFQUNYLElBQ0YsRUFBTSxLQUFPLEdBR2YsRUFBTSxRQUFVLEVBQ2hCLEVBQU0sU0FBVyxFQUNqQixFQUFNLGNBQWUsRUFFckIsRUFBTSxPQUFTLFdBQ2IsT0FFRSxRQUFTLEtBQUssUUFDZCxLQUFNLEtBQUssS0FFWCxZQUFhLEtBQUssWUFDbEIsT0FBUSxLQUFLLE9BRWIsU0FBVSxLQUFLLFNBQ2YsV0FBWSxLQUFLLFdBQ2pCLGFBQWMsS0FBSyxhQUNuQixNQUFPLEtBQUssTUFFWixPQUFRLEtBQUssT0FDYixLQUFNLEtBQUssT0FHUjs7O0FDeENULFlBRUEsSUFBSSxPQUFRLFFBQVEsV0FVcEIsUUFBTyxRQUFVLFNBQXFCLEVBQVMsR0FFN0MsRUFBVSxLQUNWLElBQUksS0FrQ0osT0FoQ0EsT0FBTSxTQUFTLE1BQU8sU0FBVSxTQUFVLFFBQVMsU0FBMEIsT0FDOUMsS0FBbEIsRUFBUSxLQUNqQixFQUFPLEdBQVEsRUFBUSxNQUkzQixNQUFNLFNBQVMsVUFBVyxPQUFRLFNBQVUsU0FBNkIsR0FDbkUsTUFBTSxTQUFTLEVBQVEsSUFDekIsRUFBTyxHQUFRLE1BQU0sVUFBVSxFQUFRLEdBQU8sRUFBUSxRQUNwQixLQUFsQixFQUFRLEdBQ3hCLEVBQU8sR0FBUSxFQUFRLEdBQ2QsTUFBTSxTQUFTLEVBQVEsSUFDaEMsRUFBTyxHQUFRLE1BQU0sVUFBVSxFQUFRLFFBQ0wsS0FBbEIsRUFBUSxLQUN4QixFQUFPLEdBQVEsRUFBUSxNQUkzQixNQUFNLFNBQ0osVUFBVyxtQkFBb0Isb0JBQXFCLG1CQUNwRCxVQUFXLGtCQUFtQixVQUFXLGVBQWdCLGlCQUN6RCxpQkFBa0IsbUJBQW9CLHFCQUFzQixtQkFDNUQsaUJBQWtCLGVBQWdCLFlBQWEsYUFBYyxjQUM3RCxjQUNDLFNBQTBCLE9BQ0UsS0FBbEIsRUFBUSxHQUNqQixFQUFPLEdBQVEsRUFBUSxPQUNXLEtBQWxCLEVBQVEsS0FDeEIsRUFBTyxHQUFRLEVBQVEsTUFJcEI7OztBQ2pEVCxZQUVBLElBQUksYUFBYyxRQUFRLGdCQVMxQixRQUFPLFFBQVUsU0FBZ0IsRUFBUyxFQUFRLEdBQ2hELEdBQUksR0FBaUIsRUFBUyxPQUFPLGdCQUNoQyxHQUFrQixFQUFlLEVBQVMsUUFDN0MsRUFBUSxHQUVSLEVBQU8sWUFDTCxtQ0FBcUMsRUFBUyxPQUM5QyxFQUFTLE9BQ1QsS0FDQSxFQUFTLFFBQ1Q7OztBQ3JCTixZQUVBLElBQUksT0FBUSxRQUFRLGFBVXBCLFFBQU8sUUFBVSxTQUF1QixFQUFNLEVBQVMsR0FNckQsTUFKQSxPQUFNLFFBQVEsRUFBSyxTQUFtQixHQUNwQyxFQUFPLEVBQUcsRUFBTSxLQUdYOzs7O0FDbEJULFlBU0EsU0FBUyx1QkFBc0IsRUFBUyxJQUNqQyxNQUFNLFlBQVksSUFBWSxNQUFNLFlBQVksRUFBUSxtQkFDM0QsRUFBUSxnQkFBa0IsR0FJOUIsUUFBUyxxQkFDUCxHQUFJLEVBU0osT0FQdUIsbUJBQVosVUFBdUUscUJBQTVDLE9BQU8sVUFBVSxTQUFTLEtBQUssU0FFbkUsRUFBVSxRQUFRLG1CQUNpQixtQkFBbkIsa0JBRWhCLEVBQVUsUUFBUSxtQkFFYixFQXZCVCxHQUFJLE9BQVEsUUFBUSxXQUNoQixvQkFBc0IsUUFBUSxpQ0FFOUIsc0JBQ0YsZUFBZ0IscUNBc0JkLFVBQ0YsUUFBUyxvQkFFVCxrQkFBbUIsU0FBMEIsRUFBTSxHQUdqRCxNQUZBLHFCQUFvQixFQUFTLFVBQzdCLG9CQUFvQixFQUFTLGdCQUN6QixNQUFNLFdBQVcsSUFDbkIsTUFBTSxjQUFjLElBQ3BCLE1BQU0sU0FBUyxJQUNmLE1BQU0sU0FBUyxJQUNmLE1BQU0sT0FBTyxJQUNiLE1BQU0sT0FBTyxHQUVOLEVBRUwsTUFBTSxrQkFBa0IsR0FDbkIsRUFBSyxPQUVWLE1BQU0sa0JBQWtCLElBQzFCLHNCQUFzQixFQUFTLG1EQUN4QixFQUFLLFlBRVYsTUFBTSxTQUFTLElBQ2pCLHNCQUFzQixFQUFTLGtDQUN4QixLQUFLLFVBQVUsSUFFakIsSUFHVCxtQkFBb0IsU0FBMkIsR0FFN0MsR0FBb0IsZ0JBQVQsR0FDVCxJQUNFLEVBQU8sS0FBSyxNQUFNLEdBQ2xCLE1BQU8sSUFFWCxNQUFPLEtBT1QsUUFBUyxFQUVULGVBQWdCLGFBQ2hCLGVBQWdCLGVBRWhCLGtCQUFtQixFQUVuQixlQUFnQixTQUF3QixHQUN0QyxNQUFPLElBQVUsS0FBTyxFQUFTLEtBSXJDLFVBQVMsU0FDUCxRQUNFLE9BQVUsc0NBSWQsTUFBTSxTQUFTLFNBQVUsTUFBTyxRQUFTLFNBQTZCLEdBQ3BFLFNBQVMsUUFBUSxRQUduQixNQUFNLFNBQVMsT0FBUSxNQUFPLFNBQVUsU0FBK0IsR0FDckUsU0FBUyxRQUFRLEdBQVUsTUFBTSxNQUFNLHdCQUd6QyxPQUFPLFFBQVU7Ozs7O0FDakdqQixZQUVBLFFBQU8sUUFBVSxTQUFjLEVBQUksR0FDakMsTUFBTyxZQUVMLElBQUssR0FERCxHQUFPLEdBQUksT0FBTSxVQUFVLFFBQ3RCLEVBQUksRUFBRyxFQUFJLEVBQUssT0FBUSxJQUMvQixFQUFLLEdBQUssVUFBVSxFQUV0QixPQUFPLEdBQUcsTUFBTSxFQUFTOzs7QUNSN0IsWUFJQSxTQUFTLFFBQU8sR0FDZCxNQUFPLG9CQUFtQixHQUN4QixRQUFRLFFBQVMsS0FDakIsUUFBUSxRQUFTLEtBQ2pCLFFBQVEsT0FBUSxLQUNoQixRQUFRLFFBQVMsS0FDakIsUUFBUSxPQUFRLEtBQ2hCLFFBQVEsUUFBUyxLQUNqQixRQUFRLFFBQVMsS0FWckIsR0FBSSxPQUFRLFFBQVEsYUFvQnBCLFFBQU8sUUFBVSxTQUFrQixFQUFLLEVBQVEsR0FFOUMsSUFBSyxFQUNILE1BQU8sRUFHVCxJQUFJLEVBQ0osSUFBSSxFQUNGLEVBQW1CLEVBQWlCLE9BQy9CLElBQUksTUFBTSxrQkFBa0IsR0FDakMsRUFBbUIsRUFBTyxlQUNyQixDQUNMLEdBQUksS0FFSixPQUFNLFFBQVEsRUFBUSxTQUFtQixFQUFLLEdBQ2hDLE9BQVIsT0FBK0IsS0FBUixJQUl2QixNQUFNLFFBQVEsR0FDaEIsR0FBWSxLQUVaLEdBQU8sR0FHVCxNQUFNLFFBQVEsRUFBSyxTQUFvQixHQUNqQyxNQUFNLE9BQU8sR0FDZixFQUFJLEVBQUUsY0FDRyxNQUFNLFNBQVMsS0FDeEIsRUFBSSxLQUFLLFVBQVUsSUFFckIsRUFBTSxLQUFLLE9BQU8sR0FBTyxJQUFNLE9BQU8sU0FJMUMsRUFBbUIsRUFBTSxLQUFLLEtBR2hDLEdBQUksRUFBa0IsQ0FDcEIsR0FBSSxHQUFnQixFQUFJLFFBQVEsTUFDVCxJQUFuQixJQUNGLEVBQU0sRUFBSSxNQUFNLEVBQUcsSUFHckIsS0FBOEIsSUFBdEIsRUFBSSxRQUFRLEtBQWMsSUFBTSxLQUFPLEVBR2pELE1BQU87OztBQ3JFVCxZQVNBLFFBQU8sUUFBVSxTQUFxQixFQUFTLEdBQzdDLE1BQU8sR0FDSCxFQUFRLFFBQVEsT0FBUSxJQUFNLElBQU0sRUFBWSxRQUFRLE9BQVEsSUFDaEU7OztBQ1pOLFlBRUEsSUFBSSxPQUFRLFFBQVEsYUFFcEIsUUFBTyxRQUNMLE1BQU0sdUJBR0osV0FDRSxPQUNFLE1BQU8sU0FBZSxFQUFNLEVBQU8sRUFBUyxFQUFNLEVBQVEsR0FDeEQsR0FBSSxLQUNKLEdBQU8sS0FBSyxFQUFPLElBQU0sbUJBQW1CLElBRXhDLE1BQU0sU0FBUyxJQUNqQixFQUFPLEtBQUssV0FBYSxHQUFJLE1BQUssR0FBUyxlQUd6QyxNQUFNLFNBQVMsSUFDakIsRUFBTyxLQUFLLFFBQVUsR0FHcEIsTUFBTSxTQUFTLElBQ2pCLEVBQU8sS0FBSyxVQUFZLElBR1gsSUFBWCxHQUNGLEVBQU8sS0FBSyxVQUdkLFNBQVMsT0FBUyxFQUFPLEtBQUssT0FHaEMsS0FBTSxTQUFjLEdBQ2xCLEdBQUksR0FBUSxTQUFTLE9BQU8sTUFBTSxHQUFJLFFBQU8sYUFBZSxFQUFPLGFBQ25FLE9BQVEsR0FBUSxtQkFBbUIsRUFBTSxJQUFNLE1BR2pELE9BQVEsU0FBZ0IsR0FDdEIsS0FBSyxNQUFNLEVBQU0sR0FBSSxLQUFLLE1BQVEsWUFNeEMsV0FDRSxPQUNFLE1BQU8sYUFDUCxLQUFNLFdBQWtCLE1BQU8sT0FDL0IsT0FBUTs7O0FDakRoQixZQVFBLFFBQU8sUUFBVSxTQUF1QixHQUl0QyxNQUFPLGdDQUFnQyxLQUFLOzs7QUNaOUMsWUFFQSxJQUFJLE9BQVEsUUFBUSxhQUVwQixRQUFPLFFBQ0wsTUFBTSx1QkFJSixXQVdFLFFBQVMsR0FBVyxHQUNsQixHQUFJLEdBQU8sQ0FXWCxPQVRJLEtBRUYsRUFBZSxhQUFhLE9BQVEsR0FDcEMsRUFBTyxFQUFlLE1BR3hCLEVBQWUsYUFBYSxPQUFRLElBSWxDLEtBQU0sRUFBZSxLQUNyQixTQUFVLEVBQWUsU0FBVyxFQUFlLFNBQVMsUUFBUSxLQUFNLElBQU0sR0FDaEYsS0FBTSxFQUFlLEtBQ3JCLE9BQVEsRUFBZSxPQUFTLEVBQWUsT0FBTyxRQUFRLE1BQU8sSUFBTSxHQUMzRSxLQUFNLEVBQWUsS0FBTyxFQUFlLEtBQUssUUFBUSxLQUFNLElBQU0sR0FDcEUsU0FBVSxFQUFlLFNBQ3pCLEtBQU0sRUFBZSxLQUNyQixTQUFpRCxNQUF0QyxFQUFlLFNBQVMsT0FBTyxHQUN4QyxFQUFlLFNBQ2YsSUFBTSxFQUFlLFVBaEMzQixHQUVJLEdBRkEsRUFBTyxrQkFBa0IsS0FBSyxVQUFVLFdBQ3hDLEVBQWlCLFNBQVMsY0FBYyxJQTJDNUMsT0FSQSxHQUFZLEVBQVcsT0FBTyxTQUFTLE1BUWhDLFNBQXlCLEdBQzlCLEdBQUksR0FBVSxNQUFNLFNBQVMsR0FBZSxFQUFXLEdBQWMsQ0FDckUsT0FBUSxHQUFPLFdBQWEsRUFBVSxVQUNsQyxFQUFPLE9BQVMsRUFBVSxTQUtsQyxXQUNFLE1BQU8sWUFDTCxPQUFPOzs7QUNoRWYsWUFFQSxJQUFJLE9BQVEsUUFBUSxXQUVwQixRQUFPLFFBQVUsU0FBNkIsRUFBUyxHQUNyRCxNQUFNLFFBQVEsRUFBUyxTQUF1QixFQUFPLEdBQy9DLElBQVMsR0FBa0IsRUFBSyxnQkFBa0IsRUFBZSxnQkFDbkUsRUFBUSxHQUFrQixRQUNuQixHQUFROzs7QUNSckIsWUFFQSxJQUFJLE9BQVEsUUFBUSxjQUloQixtQkFDRixNQUFPLGdCQUFpQixpQkFBa0IsZUFBZ0IsT0FDMUQsVUFBVyxPQUFRLE9BQVEsb0JBQXFCLHNCQUNoRCxnQkFBaUIsV0FBWSxlQUFnQixzQkFDN0MsVUFBVyxjQUFlLGFBZ0I1QixRQUFPLFFBQVUsU0FBc0IsR0FDckMsR0FDSSxHQUNBLEVBQ0EsRUFIQSxJQUtKLE9BQUssSUFFTCxNQUFNLFFBQVEsRUFBUSxNQUFNLE1BQU8sU0FBZ0IsR0FLakQsR0FKQSxFQUFJLEVBQUssUUFBUSxLQUNqQixFQUFNLE1BQU0sS0FBSyxFQUFLLE9BQU8sRUFBRyxJQUFJLGNBQ3BDLEVBQU0sTUFBTSxLQUFLLEVBQUssT0FBTyxFQUFJLElBRTdCLEVBQUssQ0FDUCxHQUFJLEVBQU8sSUFBUSxrQkFBa0IsUUFBUSxJQUFRLEVBQ25ELE1BR0EsR0FBTyxHQURHLGVBQVIsR0FDYSxFQUFPLEdBQU8sRUFBTyxPQUFXLFFBQVEsSUFFekMsRUFBTyxHQUFPLEVBQU8sR0FBTyxLQUFPLEVBQU0sS0FLdEQsR0FuQmdCOzs7QUNoQ3pCLFlBc0JBLFFBQU8sUUFBVSxTQUFnQixHQUMvQixNQUFPLFVBQWMsR0FDbkIsTUFBTyxHQUFTLE1BQU0sS0FBTTs7O0FDeEJoQyxZQWlCQSxTQUFTLFNBQVEsR0FDZixNQUE4QixtQkFBdkIsU0FBUyxLQUFLLEdBU3ZCLFFBQVMsZUFBYyxHQUNyQixNQUE4Qix5QkFBdkIsU0FBUyxLQUFLLEdBU3ZCLFFBQVMsWUFBVyxHQUNsQixNQUE0QixtQkFBYixXQUE4QixZQUFlLFVBUzlELFFBQVMsbUJBQWtCLEdBT3pCLE1BTDRCLG1CQUFoQixjQUFpQyxZQUFrQixPQUNwRCxZQUFZLE9BQU8sR0FFbkIsR0FBVSxFQUFVLFFBQU0sRUFBSSxpQkFBa0IsYUFXN0QsUUFBUyxVQUFTLEdBQ2hCLE1BQXNCLGdCQUFSLEdBU2hCLFFBQVMsVUFBUyxHQUNoQixNQUFzQixnQkFBUixHQVNoQixRQUFTLGFBQVksR0FDbkIsV0FBc0IsS0FBUixFQVNoQixRQUFTLFVBQVMsR0FDaEIsTUFBZSxRQUFSLEdBQStCLGdCQUFSLEdBU2hDLFFBQVMsUUFBTyxHQUNkLE1BQThCLGtCQUF2QixTQUFTLEtBQUssR0FTdkIsUUFBUyxRQUFPLEdBQ2QsTUFBOEIsa0JBQXZCLFNBQVMsS0FBSyxHQVN2QixRQUFTLFFBQU8sR0FDZCxNQUE4QixrQkFBdkIsU0FBUyxLQUFLLEdBU3ZCLFFBQVMsWUFBVyxHQUNsQixNQUE4QixzQkFBdkIsU0FBUyxLQUFLLEdBU3ZCLFFBQVMsVUFBUyxHQUNoQixNQUFPLFVBQVMsSUFBUSxXQUFXLEVBQUksTUFTekMsUUFBUyxtQkFBa0IsR0FDekIsTUFBa0MsbUJBQXBCLGtCQUFtQyxZQUFlLGlCQVNsRSxRQUFTLE1BQUssR0FDWixNQUFPLEdBQUksUUFBUSxPQUFRLElBQUksUUFBUSxPQUFRLElBa0JqRCxRQUFTLHdCQUNQLE9BQXlCLG1CQUFkLFlBQW9ELGdCQUF0QixVQUFVLFNBQ1ksaUJBQXRCLFVBQVUsU0FDWSxPQUF0QixVQUFVLFdBSS9CLG1CQUFYLFNBQ2EsbUJBQWIsV0FnQlgsUUFBUyxTQUFRLEVBQUssR0FFcEIsR0FBWSxPQUFSLE9BQStCLEtBQVIsRUFVM0IsR0FMbUIsZ0JBQVIsS0FFVCxHQUFPLElBR0wsUUFBUSxHQUVWLElBQUssR0FBSSxHQUFJLEVBQUcsRUFBSSxFQUFJLE9BQVEsRUFBSSxFQUFHLElBQ3JDLEVBQUcsS0FBSyxLQUFNLEVBQUksR0FBSSxFQUFHLE9BSTNCLEtBQUssR0FBSSxLQUFPLEdBQ1YsT0FBTyxVQUFVLGVBQWUsS0FBSyxFQUFLLElBQzVDLEVBQUcsS0FBSyxLQUFNLEVBQUksR0FBTSxFQUFLLEdBdUJyQyxRQUFTLFNBRVAsUUFBUyxHQUFZLEVBQUssR0FDRyxnQkFBaEIsR0FBTyxJQUFvQyxnQkFBUixHQUM1QyxFQUFPLEdBQU8sTUFBTSxFQUFPLEdBQU0sR0FFakMsRUFBTyxHQUFPLEVBSWxCLElBQUssR0FURCxNQVNLLEVBQUksRUFBRyxFQUFJLFVBQVUsT0FBUSxFQUFJLEVBQUcsSUFDM0MsUUFBUSxVQUFVLEdBQUksRUFFeEIsT0FBTyxHQVdULFFBQVMsYUFFUCxRQUFTLEdBQVksRUFBSyxHQUNHLGdCQUFoQixHQUFPLElBQW9DLGdCQUFSLEdBQzVDLEVBQU8sR0FBTyxVQUFVLEVBQU8sR0FBTSxHQUVyQyxFQUFPLEdBRGlCLGdCQUFSLEdBQ0YsYUFBYyxHQUVkLEVBSWxCLElBQUssR0FYRCxNQVdLLEVBQUksRUFBRyxFQUFJLFVBQVUsT0FBUSxFQUFJLEVBQUcsSUFDM0MsUUFBUSxVQUFVLEdBQUksRUFFeEIsT0FBTyxHQVdULFFBQVMsUUFBTyxFQUFHLEVBQUcsR0FRcEIsTUFQQSxTQUFRLEVBQUcsU0FBcUIsRUFBSyxHQUVqQyxFQUFFLEdBREEsR0FBMEIsa0JBQVIsR0FDWCxLQUFLLEVBQUssR0FFVixJQUdOLEVBbFRULEdBQUksTUFBTyxRQUFRLGtCQUNmLFNBQVcsUUFBUSxhQU1uQixTQUFXLE9BQU8sVUFBVSxRQThTaEMsUUFBTyxTQUNMLFFBQVMsUUFDVCxjQUFlLGNBQ2YsU0FBVSxTQUNWLFdBQVksV0FDWixrQkFBbUIsa0JBQ25CLFNBQVUsU0FDVixTQUFVLFNBQ1YsU0FBVSxTQUNWLFlBQWEsWUFDYixPQUFRLE9BQ1IsT0FBUSxPQUNSLE9BQVEsT0FDUixXQUFZLFdBQ1osU0FBVSxTQUNWLGtCQUFtQixrQkFDbkIscUJBQXNCLHFCQUN0QixRQUFTLFFBQ1QsTUFBTyxNQUNQLFVBQVcsVUFDWCxPQUFRLE9BQ1IsS0FBTTs7O0FDaFNSLFFBQVMsU0FBUyxFQUFHLEdBQ25CLE1BQU8sWUFDTCxHQUFLLEVBQUUsTUFBTSxLQUFNLFdBQ25CLEdBQUssRUFBRSxNQUFNLEtBQU0sWUEvQ3ZCLEdBQUksUUFBUyw4Q0FFYixRQUFPLFFBQVUsU0FBd0IsR0FDdkMsTUFBTyxHQUFLLE9BQU8sU0FBVSxFQUFHLEdBQzlCLEdBQUksR0FBSSxFQUFJLEVBQUssRUFBVyxDQUM1QixLQUFLLElBQU8sR0FHVixHQUZBLEVBQUssRUFBRSxHQUNQLEVBQUssRUFBRSxHQUNILEdBQU0sT0FBTyxLQUFLLEdBY3BCLEdBWlksVUFBUixJQUNnQixnQkFBUCxLQUNULEVBQU8sRUFDUCxFQUFFLEdBQU8sS0FDVCxFQUFHLElBQVEsR0FFSyxnQkFBUCxLQUNULEVBQU8sRUFDUCxFQUFFLEdBQU8sS0FDVCxFQUFHLElBQVEsSUFHSCxPQUFSLEdBQXdCLGFBQVIsR0FBOEIsU0FBUixFQUV4QyxJQUFLLElBQWEsR0FDaEIsRUFBRyxHQUFhLFFBQVEsRUFBRyxHQUFZLEVBQUcsUUFFdkMsSUFBSSxNQUFNLFFBQVEsR0FDdkIsRUFBRSxHQUFPLEVBQUcsT0FBTyxPQUNkLElBQUksTUFBTSxRQUFRLEdBQ3ZCLEVBQUUsSUFBUSxHQUFJLE9BQU8sT0FFckIsS0FBSyxJQUFhLEdBQ2hCLEVBQUcsR0FBYSxFQUFHLE9BSXZCLEdBQUUsR0FBTyxFQUFFLEVBR2YsT0FBTzs7O0FDeENYLE9BQU8sU0FBWSxRQUFXLFFBQVEscUNBQXNDLFlBQVk7OztBQ0F4RixPQUFPLFNBQVksUUFBVyxRQUFRLGtDQUFtQyxZQUFZOzs7QUNBckYsT0FBTyxTQUFZLFFBQVcsUUFBUSw4QkFBK0IsWUFBWTs7O0FDQWpGLE9BQU8sU0FBWSxRQUFXLFFBQVEsNkJBQThCLFlBQVk7OztBQ0FoRixPQUFPLFNBQVksUUFBVyxRQUFRLHNDQUF1QyxZQUFZOzs7QUNBekYsWUFRQSxTQUFTLHdCQUF1QixHQUFPLE1BQU8sSUFBTyxFQUFJLFdBQWEsR0FBUSxRQUFTLEdBTnZGLFFBQVEsWUFBYSxDQUVyQixJQUFJLFVBQVcsUUFBUSxzQkFFbkIsVUFBWSx1QkFBdUIsU0FJdkMsU0FBUSxRQUFVLFNBQVUsR0FDMUIsTUFBTyxZQUNMLEdBQUksR0FBTSxFQUFHLE1BQU0sS0FBTSxVQUN6QixPQUFPLElBQUksV0FBVSxRQUFRLFNBQVUsRUFBUyxHQUM5QyxRQUFTLEdBQUssRUFBSyxHQUNqQixJQUNFLEdBQUksR0FBTyxFQUFJLEdBQUssR0FDaEIsRUFBUSxFQUFLLE1BQ2pCLE1BQU8sR0FFUCxXQURBLEdBQU8sR0FJVCxJQUFJLEVBQUssS0FHUCxNQUFPLFdBQVUsUUFBUSxRQUFRLEdBQU8sS0FBSyxTQUFVLEdBQ3JELEVBQUssT0FBUSxJQUNaLFNBQVUsR0FDWCxFQUFLLFFBQVMsSUFMaEIsR0FBUSxHQVVaLE1BQU8sR0FBSzs7O0FDbENsQixZQUVBLFNBQVEsWUFBYSxFQUVyQixRQUFRLFFBQVUsU0FBVSxFQUFVLEdBQ3BDLEtBQU0sWUFBb0IsSUFDeEIsS0FBTSxJQUFJLFdBQVU7OztBQ054QixZQWNBLFNBQVMsd0JBQXVCLEdBQU8sTUFBTyxJQUFPLEVBQUksV0FBYSxHQUFRLFFBQVMsR0FadkYsUUFBUSxZQUFhLENBRXJCLElBQUksV0FBWSxRQUFRLDhCQUVwQixXQUFhLHVCQUF1QixXQUVwQyxRQUFVLFFBQVEscUJBRWxCLFNBQVcsdUJBQXVCLFNBRWxDLFFBQXNDLGtCQUFyQixVQUFTLFNBQXdELGdCQUF2QixZQUFXLFFBQXVCLFNBQVUsR0FBTyxhQUFjLElBQVMsU0FBVSxHQUFPLE1BQU8sSUFBbUMsa0JBQXJCLFVBQVMsU0FBMEIsRUFBSSxjQUFnQixTQUFTLFNBQVcsSUFBUSxTQUFTLFFBQVEsVUFBWSxlQUFrQixHQUlqVCxTQUFRLFFBQXNDLGtCQUFyQixVQUFTLFNBQTBELFdBQWhDLFFBQVEsV0FBVyxTQUF3QixTQUFVLEdBQy9HLFdBQXNCLEtBQVIsRUFBc0IsWUFBYyxRQUFRLElBQ3hELFNBQVUsR0FDWixNQUFPLElBQW1DLGtCQUFyQixVQUFTLFNBQTBCLEVBQUksY0FBZ0IsU0FBUyxTQUFXLElBQVEsU0FBUyxRQUFRLFVBQVksYUFBMEIsS0FBUixFQUFzQixZQUFjLFFBQVE7OztBQ25Cck0sT0FBTyxRQUFVLFFBQVE7OztBQ0F6QixZQXFCQSxTQUFTLFNBQVMsR0FDaEIsR0FBSSxHQUFNLEVBQUksTUFFZCxJQUFJLEVBQU0sRUFBSSxFQUNaLEtBQU0sSUFBSSxPQUFNLGlEQUtsQixJQUFJLEdBQVcsRUFBSSxRQUFRLElBTzNCLFFBTmtCLElBQWQsSUFBaUIsRUFBVyxJQU14QixFQUpjLElBQWEsRUFDL0IsRUFDQSxFQUFLLEVBQVcsR0FNdEIsUUFBUyxZQUFZLEdBQ25CLEdBQUksR0FBTyxRQUFRLEdBQ2YsRUFBVyxFQUFLLEdBQ2hCLEVBQWtCLEVBQUssRUFDM0IsT0FBdUMsSUFBOUIsRUFBVyxHQUF1QixFQUFLLEVBR2xELFFBQVMsYUFBYSxFQUFLLEVBQVUsR0FDbkMsTUFBdUMsSUFBOUIsRUFBVyxHQUF1QixFQUFLLEVBR2xELFFBQVMsYUFBYSxHQUNwQixHQUFJLEdBY0EsRUFiQSxFQUFPLFFBQVEsR0FDZixFQUFXLEVBQUssR0FDaEIsRUFBa0IsRUFBSyxHQUV2QixFQUFNLEdBQUksS0FBSSxZQUFZLEVBQUssRUFBVSxJQUV6QyxFQUFVLEVBR1YsRUFBTSxFQUFrQixFQUN4QixFQUFXLEVBQ1gsQ0FHSixLQUFLLEVBQUksRUFBRyxFQUFJLEVBQUssR0FBSyxFQUN4QixFQUNHLFVBQVUsRUFBSSxXQUFXLEtBQU8sR0FDaEMsVUFBVSxFQUFJLFdBQVcsRUFBSSxLQUFPLEdBQ3BDLFVBQVUsRUFBSSxXQUFXLEVBQUksS0FBTyxFQUNyQyxVQUFVLEVBQUksV0FBVyxFQUFJLElBQy9CLEVBQUksS0FBYyxHQUFPLEdBQU0sSUFDL0IsRUFBSSxLQUFjLEdBQU8sRUFBSyxJQUM5QixFQUFJLEtBQW1CLElBQU4sQ0FtQm5CLE9BaEJ3QixLQUFwQixJQUNGLEVBQ0csVUFBVSxFQUFJLFdBQVcsS0FBTyxFQUNoQyxVQUFVLEVBQUksV0FBVyxFQUFJLEtBQU8sRUFDdkMsRUFBSSxLQUFtQixJQUFOLEdBR0ssSUFBcEIsSUFDRixFQUNHLFVBQVUsRUFBSSxXQUFXLEtBQU8sR0FDaEMsVUFBVSxFQUFJLFdBQVcsRUFBSSxLQUFPLEVBQ3BDLFVBQVUsRUFBSSxXQUFXLEVBQUksS0FBTyxFQUN2QyxFQUFJLEtBQWMsR0FBTyxFQUFLLElBQzlCLEVBQUksS0FBbUIsSUFBTixHQUdaLEVBR1QsUUFBUyxpQkFBaUIsR0FDeEIsTUFBTyxRQUFPLEdBQU8sR0FBSyxJQUN4QixPQUFPLEdBQU8sR0FBSyxJQUNuQixPQUFPLEdBQU8sRUFBSSxJQUNsQixPQUFhLEdBQU4sR0FHWCxRQUFTLGFBQWEsRUFBTyxFQUFPLEdBR2xDLElBQUssR0FGRCxHQUNBLEtBQ0ssRUFBSSxFQUFPLEVBQUksRUFBSyxHQUFLLEVBQ2hDLEdBQ0ksRUFBTSxJQUFNLEdBQU0sV0FDbEIsRUFBTSxFQUFJLElBQU0sRUFBSyxRQUNQLElBQWYsRUFBTSxFQUFJLElBQ2IsRUFBTyxLQUFLLGdCQUFnQixHQUU5QixPQUFPLEdBQU8sS0FBSyxJQUdyQixRQUFTLGVBQWUsR0FRdEIsSUFBSyxHQVBELEdBQ0EsRUFBTSxFQUFNLE9BQ1osRUFBYSxFQUFNLEVBQ25CLEtBSUssRUFBSSxFQUFHLEVBQU8sRUFBTSxFQUFZLEVBQUksRUFBTSxHQUg5QixNQUluQixFQUFNLEtBQUssWUFDVCxFQUFPLEVBQUksRUFMTSxNQUtnQixFQUFPLEVBQVEsRUFML0IsT0EyQnJCLE9BakJtQixLQUFmLEdBQ0YsRUFBTSxFQUFNLEVBQU0sR0FDbEIsRUFBTSxLQUNKLE9BQU8sR0FBTyxHQUNkLE9BQVEsR0FBTyxFQUFLLElBQ3BCLE9BRXNCLElBQWYsSUFDVCxHQUFPLEVBQU0sRUFBTSxJQUFNLEdBQUssRUFBTSxFQUFNLEdBQzFDLEVBQU0sS0FDSixPQUFPLEdBQU8sSUFDZCxPQUFRLEdBQU8sRUFBSyxJQUNwQixPQUFRLEdBQU8sRUFBSyxJQUNwQixNQUlHLEVBQU0sS0FBSyxJQXBKcEIsUUFBUSxXQUFhLFdBQ3JCLFFBQVEsWUFBYyxZQUN0QixRQUFRLGNBQWdCLGFBT3hCLEtBQUssR0FMRCxXQUNBLGFBQ0EsSUFBNEIsbUJBQWYsWUFBNkIsV0FBYSxNQUV2RCxLQUFPLG1FQUNGLEVBQUksRUFBRyxJQUFNLEtBQUssT0FBUSxFQUFJLE1BQU8sRUFDNUMsT0FBTyxHQUFLLEtBQUssR0FDakIsVUFBVSxLQUFLLFdBQVcsSUFBTSxDQUtsQyxXQUFVLElBQUksV0FBVyxJQUFNLEdBQy9CLFVBQVUsSUFBSSxXQUFXLElBQU07Ozs7QUNYL0IsWUEyQ0EsU0FBUyxxQkFDUCxJQUNFLEdBQUksR0FBTSxHQUFJLFlBQVcsRUFFekIsT0FEQSxHQUFJLFdBQWEsVUFBVyxXQUFXLFVBQVcsSUFBSyxXQUFjLE1BQU8sTUFDdkQsS0FBZCxFQUFJLE9BQ2lCLGtCQUFqQixHQUFJLFVBQ3VCLElBQWxDLEVBQUksU0FBUyxFQUFHLEdBQUcsV0FDdkIsTUFBTyxHQUNQLE9BQU8sR0FJWCxRQUFTLGNBQ1AsTUFBTyxRQUFPLG9CQUNWLFdBQ0EsV0FHTixRQUFTLGNBQWMsRUFBTSxHQUMzQixHQUFJLGFBQWUsRUFDakIsS0FBTSxJQUFJLFlBQVcsNkJBY3ZCLE9BWkksUUFBTyxxQkFFVCxFQUFPLEdBQUksWUFBVyxHQUN0QixFQUFLLFVBQVksT0FBTyxZQUdYLE9BQVQsSUFDRixFQUFPLEdBQUksUUFBTyxJQUVwQixFQUFLLE9BQVMsR0FHVCxFQWFULFFBQVMsUUFBUSxFQUFLLEVBQWtCLEdBQ3RDLEtBQUssT0FBTyxxQkFBeUIsZUFBZ0IsU0FDbkQsTUFBTyxJQUFJLFFBQU8sRUFBSyxFQUFrQixFQUkzQyxJQUFtQixnQkFBUixHQUFrQixDQUMzQixHQUFnQyxnQkFBckIsR0FDVCxLQUFNLElBQUksT0FDUixvRUFHSixPQUFPLGFBQVksS0FBTSxHQUUzQixNQUFPLE1BQUssS0FBTSxFQUFLLEVBQWtCLEdBVzNDLFFBQVMsTUFBTSxFQUFNLEVBQU8sRUFBa0IsR0FDNUMsR0FBcUIsZ0JBQVYsR0FDVCxLQUFNLElBQUksV0FBVSx3Q0FHdEIsT0FBMkIsbUJBQWhCLGNBQStCLFlBQWlCLGFBQ2xELGdCQUFnQixFQUFNLEVBQU8sRUFBa0IsR0FHbkMsZ0JBQVYsR0FDRixXQUFXLEVBQU0sRUFBTyxHQUcxQixXQUFXLEVBQU0sR0E0QjFCLFFBQVMsWUFBWSxHQUNuQixHQUFvQixnQkFBVCxHQUNULEtBQU0sSUFBSSxXQUFVLG1DQUNmLElBQUksRUFBTyxFQUNoQixLQUFNLElBQUksWUFBVyx3Q0FJekIsUUFBUyxPQUFPLEVBQU0sRUFBTSxFQUFNLEdBRWhDLE1BREEsWUFBVyxHQUNQLEdBQVEsRUFDSCxhQUFhLEVBQU0sT0FFZixLQUFULEVBSXlCLGdCQUFiLEdBQ1YsYUFBYSxFQUFNLEdBQU0sS0FBSyxFQUFNLEdBQ3BDLGFBQWEsRUFBTSxHQUFNLEtBQUssR0FFN0IsYUFBYSxFQUFNLEdBVzVCLFFBQVMsYUFBYSxFQUFNLEdBRzFCLEdBRkEsV0FBVyxHQUNYLEVBQU8sYUFBYSxFQUFNLEVBQU8sRUFBSSxFQUFvQixFQUFoQixRQUFRLEtBQzVDLE9BQU8sb0JBQ1YsSUFBSyxHQUFJLEdBQUksRUFBRyxFQUFJLElBQVEsRUFDMUIsRUFBSyxHQUFLLENBR2QsT0FBTyxHQWdCVCxRQUFTLFlBQVksRUFBTSxFQUFRLEdBS2pDLEdBSndCLGdCQUFiLElBQXNDLEtBQWIsSUFDbEMsRUFBVyxTQUdSLE9BQU8sV0FBVyxHQUNyQixLQUFNLElBQUksV0FBVSw2Q0FHdEIsSUFBSSxHQUF3QyxFQUEvQixXQUFXLEVBQVEsRUFDaEMsR0FBTyxhQUFhLEVBQU0sRUFFMUIsSUFBSSxHQUFTLEVBQUssTUFBTSxFQUFRLEVBU2hDLE9BUEksS0FBVyxJQUliLEVBQU8sRUFBSyxNQUFNLEVBQUcsSUFHaEIsRUFHVCxRQUFTLGVBQWUsRUFBTSxHQUM1QixHQUFJLEdBQVMsRUFBTSxPQUFTLEVBQUksRUFBNEIsRUFBeEIsUUFBUSxFQUFNLE9BQ2xELEdBQU8sYUFBYSxFQUFNLEVBQzFCLEtBQUssR0FBSSxHQUFJLEVBQUcsRUFBSSxFQUFRLEdBQUssRUFDL0IsRUFBSyxHQUFnQixJQUFYLEVBQU0sRUFFbEIsT0FBTyxHQUdULFFBQVMsaUJBQWlCLEVBQU0sRUFBTyxFQUFZLEdBR2pELEdBRkEsRUFBTSxXQUVGLEVBQWEsR0FBSyxFQUFNLFdBQWEsRUFDdkMsS0FBTSxJQUFJLFlBQVcsNEJBR3ZCLElBQUksRUFBTSxXQUFhLEdBQWMsR0FBVSxHQUM3QyxLQUFNLElBQUksWUFBVyw0QkFtQnZCLE9BZkUsT0FEaUIsS0FBZixPQUF1QyxLQUFYLEVBQ3RCLEdBQUksWUFBVyxPQUNILEtBQVgsRUFDRCxHQUFJLFlBQVcsRUFBTyxHQUV0QixHQUFJLFlBQVcsRUFBTyxFQUFZLEdBR3hDLE9BQU8scUJBRVQsRUFBTyxFQUNQLEVBQUssVUFBWSxPQUFPLFdBR3hCLEVBQU8sY0FBYyxFQUFNLEdBRXRCLEVBR1QsUUFBUyxZQUFZLEVBQU0sR0FDekIsR0FBSSxPQUFPLFNBQVMsR0FBTSxDQUN4QixHQUFJLEdBQTRCLEVBQXRCLFFBQVEsRUFBSSxPQUd0QixPQUZBLEdBQU8sYUFBYSxFQUFNLEdBRU4sSUFBaEIsRUFBSyxPQUNBLEdBR1QsRUFBSSxLQUFLLEVBQU0sRUFBRyxFQUFHLEdBQ2QsR0FHVCxHQUFJLEVBQUssQ0FDUCxHQUE0QixtQkFBaEIsY0FDUixFQUFJLGlCQUFrQixjQUFnQixVQUFZLEdBQ3BELE1BQTBCLGdCQUFmLEdBQUksUUFBdUIsTUFBTSxFQUFJLFFBQ3ZDLGFBQWEsRUFBTSxHQUVyQixjQUFjLEVBQU0sRUFHN0IsSUFBaUIsV0FBYixFQUFJLE1BQXFCLFFBQVEsRUFBSSxNQUN2QyxNQUFPLGVBQWMsRUFBTSxFQUFJLE1BSW5DLEtBQU0sSUFBSSxXQUFVLHNGQUd0QixRQUFTLFNBQVMsR0FHaEIsR0FBSSxHQUFVLGFBQ1osS0FBTSxJQUFJLFlBQVcsMERBQ2EsYUFBYSxTQUFTLElBQU0sU0FFaEUsT0FBZ0IsR0FBVCxFQUdULFFBQVMsWUFBWSxHQUluQixPQUhLLEdBQVUsSUFDYixFQUFTLEdBRUosT0FBTyxPQUFPLEdBK0V2QixRQUFTLFlBQVksRUFBUSxHQUMzQixHQUFJLE9BQU8sU0FBUyxHQUNsQixNQUFPLEdBQU8sTUFFaEIsSUFBMkIsbUJBQWhCLGNBQTZELGtCQUF2QixhQUFZLFNBQ3hELFlBQVksT0FBTyxJQUFXLFlBQWtCLGNBQ25ELE1BQU8sR0FBTyxVQUVNLGlCQUFYLEtBQ1QsRUFBUyxHQUFLLEVBR2hCLElBQUksR0FBTSxFQUFPLE1BQ2pCLElBQVksSUFBUixFQUFXLE1BQU8sRUFJdEIsS0FEQSxHQUFJLElBQWMsSUFFaEIsT0FBUSxHQUNOLElBQUssUUFDTCxJQUFLLFNBQ0wsSUFBSyxTQUNILE1BQU8sRUFDVCxLQUFLLE9BQ0wsSUFBSyxRQUNMLFNBQUssR0FDSCxNQUFPLGFBQVksR0FBUSxNQUM3QixLQUFLLE9BQ0wsSUFBSyxRQUNMLElBQUssVUFDTCxJQUFLLFdBQ0gsTUFBYSxHQUFOLENBQ1QsS0FBSyxNQUNILE1BQU8sS0FBUSxDQUNqQixLQUFLLFNBQ0gsTUFBTyxlQUFjLEdBQVEsTUFDL0IsU0FDRSxHQUFJLEVBQWEsTUFBTyxhQUFZLEdBQVEsTUFDNUMsSUFBWSxHQUFLLEdBQVUsY0FDM0IsR0FBYyxHQU10QixRQUFTLGNBQWMsRUFBVSxFQUFPLEdBQ3RDLEdBQUksSUFBYyxDQWNsQixTQUxjLEtBQVYsR0FBdUIsRUFBUSxLQUNqQyxFQUFRLEdBSU4sRUFBUSxLQUFLLE9BQ2YsTUFBTyxFQU9ULFNBSlksS0FBUixHQUFxQixFQUFNLEtBQUssVUFDbEMsRUFBTSxLQUFLLFFBR1QsR0FBTyxFQUNULE1BQU8sRUFPVCxJQUhBLEtBQVMsRUFDVCxLQUFXLEVBRVAsR0FBTyxFQUNULE1BQU8sRUFLVCxLQUZLLElBQVUsRUFBVyxVQUd4QixPQUFRLEdBQ04sSUFBSyxNQUNILE1BQU8sVUFBUyxLQUFNLEVBQU8sRUFFL0IsS0FBSyxPQUNMLElBQUssUUFDSCxNQUFPLFdBQVUsS0FBTSxFQUFPLEVBRWhDLEtBQUssUUFDSCxNQUFPLFlBQVcsS0FBTSxFQUFPLEVBRWpDLEtBQUssU0FDTCxJQUFLLFNBQ0gsTUFBTyxhQUFZLEtBQU0sRUFBTyxFQUVsQyxLQUFLLFNBQ0gsTUFBTyxhQUFZLEtBQU0sRUFBTyxFQUVsQyxLQUFLLE9BQ0wsSUFBSyxRQUNMLElBQUssVUFDTCxJQUFLLFdBQ0gsTUFBTyxjQUFhLEtBQU0sRUFBTyxFQUVuQyxTQUNFLEdBQUksRUFBYSxLQUFNLElBQUksV0FBVSxxQkFBdUIsRUFDNUQsSUFBWSxFQUFXLElBQUksY0FDM0IsR0FBYyxHQVN0QixRQUFTLE1BQU0sRUFBRyxFQUFHLEdBQ25CLEdBQUksR0FBSSxFQUFFLEVBQ1YsR0FBRSxHQUFLLEVBQUUsR0FDVCxFQUFFLEdBQUssRUFtSVQsUUFBUyxzQkFBc0IsRUFBUSxFQUFLLEVBQVksRUFBVSxHQUVoRSxHQUFzQixJQUFsQixFQUFPLE9BQWMsT0FBUSxDQW1CakMsSUFoQjBCLGdCQUFmLElBQ1QsRUFBVyxFQUNYLEVBQWEsR0FDSixFQUFhLFdBQ3RCLEVBQWEsV0FDSixHQUFjLGFBQ3ZCLEdBQWMsWUFFaEIsR0FBYyxFQUNWLE1BQU0sS0FFUixFQUFhLEVBQU0sRUFBSyxFQUFPLE9BQVMsR0FJdEMsRUFBYSxJQUFHLEVBQWEsRUFBTyxPQUFTLEdBQzdDLEdBQWMsRUFBTyxPQUFRLENBQy9CLEdBQUksRUFBSyxPQUFRLENBQ1osR0FBYSxFQUFPLE9BQVMsTUFDN0IsSUFBSSxFQUFhLEVBQUcsQ0FDekIsSUFBSSxFQUNDLE9BQVEsQ0FESixHQUFhLEVBVXhCLEdBTG1CLGdCQUFSLEtBQ1QsRUFBTSxPQUFPLEtBQUssRUFBSyxJQUlyQixPQUFPLFNBQVMsR0FFbEIsTUFBbUIsS0FBZixFQUFJLFFBQ0UsRUFFSCxhQUFhLEVBQVEsRUFBSyxFQUFZLEVBQVUsRUFDbEQsSUFBbUIsZ0JBQVIsR0FFaEIsTUFEQSxJQUFZLElBQ1IsT0FBTyxxQkFDaUMsa0JBQWpDLFlBQVcsVUFBVSxRQUMxQixFQUNLLFdBQVcsVUFBVSxRQUFRLEtBQUssRUFBUSxFQUFLLEdBRS9DLFdBQVcsVUFBVSxZQUFZLEtBQUssRUFBUSxFQUFLLEdBR3ZELGFBQWEsR0FBVSxHQUFPLEVBQVksRUFBVSxFQUc3RCxNQUFNLElBQUksV0FBVSx3Q0FHdEIsUUFBUyxjQUFjLEVBQUssRUFBSyxFQUFZLEVBQVUsR0FtQnJELFFBQVMsR0FBTSxFQUFLLEdBQ2xCLE1BQWtCLEtBQWQsRUFDSyxFQUFJLEdBRUosRUFBSSxhQUFhLEVBQUksR0F0QmhDLEdBQUksR0FBWSxFQUNaLEVBQVksRUFBSSxPQUNoQixFQUFZLEVBQUksTUFFcEIsUUFBaUIsS0FBYixJQUVlLFVBRGpCLEVBQVcsT0FBTyxHQUFVLGdCQUNZLFVBQWIsR0FDVixZQUFiLEdBQXVDLGFBQWIsR0FBeUIsQ0FDckQsR0FBSSxFQUFJLE9BQVMsR0FBSyxFQUFJLE9BQVMsRUFDakMsT0FBUSxDQUVWLEdBQVksRUFDWixHQUFhLEVBQ2IsR0FBYSxFQUNiLEdBQWMsRUFZbEIsR0FBSSxFQUNKLElBQUksRUFBSyxDQUNQLEdBQUksSUFBYyxDQUNsQixLQUFLLEVBQUksRUFBWSxFQUFJLEVBQVcsSUFDbEMsR0FBSSxFQUFLLEVBQUssS0FBTyxFQUFLLEdBQXFCLElBQWhCLEVBQW9CLEVBQUksRUFBSSxJQUV6RCxJQURvQixJQUFoQixJQUFtQixFQUFhLEdBQ2hDLEVBQUksRUFBYSxJQUFNLEVBQVcsTUFBTyxHQUFhLE9BRXRDLElBQWhCLElBQW1CLEdBQUssRUFBSSxHQUNoQyxHQUFjLE1BS2xCLEtBREksRUFBYSxFQUFZLElBQVcsRUFBYSxFQUFZLEdBQzVELEVBQUksRUFBWSxHQUFLLEVBQUcsSUFBSyxDQUVoQyxJQUFLLEdBREQsSUFBUSxFQUNILEVBQUksRUFBRyxFQUFJLEVBQVcsSUFDN0IsR0FBSSxFQUFLLEVBQUssRUFBSSxLQUFPLEVBQUssRUFBSyxHQUFJLENBQ3JDLEdBQVEsQ0FDUixPQUdKLEdBQUksRUFBTyxNQUFPLEdBSXRCLE9BQVEsRUFlVixRQUFTLFVBQVUsRUFBSyxFQUFRLEVBQVEsR0FDdEMsRUFBUyxPQUFPLElBQVcsQ0FDM0IsSUFBSSxHQUFZLEVBQUksT0FBUyxDQUN4QixJQUdILEVBQVMsT0FBTyxJQUNILElBQ1gsRUFBUyxHQUpYLEVBQVMsQ0FTWCxJQUFJLEdBQVMsRUFBTyxNQUNwQixJQUFJLEVBQVMsR0FBTSxFQUFHLEtBQU0sSUFBSSxXQUFVLHFCQUV0QyxHQUFTLEVBQVMsSUFDcEIsRUFBUyxFQUFTLEVBRXBCLEtBQUssR0FBSSxHQUFJLEVBQUcsRUFBSSxJQUFVLEVBQUcsQ0FDL0IsR0FBSSxHQUFTLFNBQVMsRUFBTyxPQUFXLEVBQUosRUFBTyxHQUFJLEdBQy9DLElBQUksTUFBTSxHQUFTLE1BQU8sRUFDMUIsR0FBSSxFQUFTLEdBQUssRUFFcEIsTUFBTyxHQUdULFFBQVMsV0FBVyxFQUFLLEVBQVEsRUFBUSxHQUN2QyxNQUFPLFlBQVcsWUFBWSxFQUFRLEVBQUksT0FBUyxHQUFTLEVBQUssRUFBUSxHQUczRSxRQUFTLFlBQVksRUFBSyxFQUFRLEVBQVEsR0FDeEMsTUFBTyxZQUFXLGFBQWEsR0FBUyxFQUFLLEVBQVEsR0FHdkQsUUFBUyxhQUFhLEVBQUssRUFBUSxFQUFRLEdBQ3pDLE1BQU8sWUFBVyxFQUFLLEVBQVEsRUFBUSxHQUd6QyxRQUFTLGFBQWEsRUFBSyxFQUFRLEVBQVEsR0FDekMsTUFBTyxZQUFXLGNBQWMsR0FBUyxFQUFLLEVBQVEsR0FHeEQsUUFBUyxXQUFXLEVBQUssRUFBUSxFQUFRLEdBQ3ZDLE1BQU8sWUFBVyxlQUFlLEVBQVEsRUFBSSxPQUFTLEdBQVMsRUFBSyxFQUFRLEdBa0Y5RSxRQUFTLGFBQWEsRUFBSyxFQUFPLEdBQ2hDLE1BQWMsS0FBVixHQUFlLElBQVEsRUFBSSxPQUN0QixPQUFPLGNBQWMsR0FFckIsT0FBTyxjQUFjLEVBQUksTUFBTSxFQUFPLElBSWpELFFBQVMsV0FBVyxFQUFLLEVBQU8sR0FDOUIsRUFBTSxLQUFLLElBQUksRUFBSSxPQUFRLEVBSTNCLEtBSEEsR0FBSSxNQUVBLEVBQUksRUFDRCxFQUFJLEdBQUssQ0FDZCxHQUFJLEdBQVksRUFBSSxHQUNoQixFQUFZLEtBQ1osRUFBb0IsRUFBWSxJQUFRLEVBQ3ZDLEVBQVksSUFBUSxFQUNwQixFQUFZLElBQVEsRUFDckIsQ0FFSixJQUFJLEVBQUksR0FBb0IsRUFBSyxDQUMvQixHQUFJLEdBQVksRUFBVyxFQUFZLENBRXZDLFFBQVEsR0FDTixJQUFLLEdBQ0MsRUFBWSxNQUNkLEVBQVksRUFFZCxNQUNGLEtBQUssR0FDSCxFQUFhLEVBQUksRUFBSSxHQUNPLE1BQVYsSUFBYixLQUNILEdBQTZCLEdBQVosSUFBcUIsRUFBb0IsR0FBYixHQUN6QixNQUNsQixFQUFZLEVBR2hCLE1BQ0YsS0FBSyxHQUNILEVBQWEsRUFBSSxFQUFJLEdBQ3JCLEVBQVksRUFBSSxFQUFJLEdBQ1EsTUFBVixJQUFiLElBQXNELE1BQVYsSUFBWixLQUNuQyxHQUE2QixHQUFaLElBQW9CLElBQW9CLEdBQWIsSUFBc0IsRUFBbUIsR0FBWixHQUNyRCxPQUFVLEVBQWdCLE9BQVUsRUFBZ0IsU0FDdEUsRUFBWSxFQUdoQixNQUNGLEtBQUssR0FDSCxFQUFhLEVBQUksRUFBSSxHQUNyQixFQUFZLEVBQUksRUFBSSxHQUNwQixFQUFhLEVBQUksRUFBSSxHQUNPLE1BQVYsSUFBYixJQUFzRCxNQUFWLElBQVosSUFBc0QsTUFBVixJQUFiLEtBQ2xFLEdBQTZCLEdBQVosSUFBb0IsSUFBcUIsR0FBYixJQUFzQixJQUFtQixHQUFaLElBQXFCLEVBQW9CLEdBQWIsR0FDbEYsT0FBVSxFQUFnQixVQUM1QyxFQUFZLElBTUosT0FBZCxHQUdGLEVBQVksTUFDWixFQUFtQixHQUNWLEVBQVksUUFFckIsR0FBYSxNQUNiLEVBQUksS0FBSyxJQUFjLEdBQUssS0FBUSxPQUNwQyxFQUFZLE1BQXFCLEtBQVosR0FHdkIsRUFBSSxLQUFLLEdBQ1QsR0FBSyxFQUdQLE1BQU8sdUJBQXNCLEdBUS9CLFFBQVMsdUJBQXVCLEdBQzlCLEdBQUksR0FBTSxFQUFXLE1BQ3JCLElBQUksR0FBTyxxQkFDVCxNQUFPLFFBQU8sYUFBYSxNQUFNLE9BQVEsRUFNM0MsS0FGQSxHQUFJLEdBQU0sR0FDTixFQUFJLEVBQ0QsRUFBSSxHQUNULEdBQU8sT0FBTyxhQUFhLE1BQ3pCLE9BQ0EsRUFBVyxNQUFNLEVBQUcsR0FBSyxzQkFHN0IsT0FBTyxHQUdULFFBQVMsWUFBWSxFQUFLLEVBQU8sR0FDL0IsR0FBSSxHQUFNLEVBQ1YsR0FBTSxLQUFLLElBQUksRUFBSSxPQUFRLEVBRTNCLEtBQUssR0FBSSxHQUFJLEVBQU8sRUFBSSxJQUFPLEVBQzdCLEdBQU8sT0FBTyxhQUFzQixJQUFULEVBQUksR0FFakMsT0FBTyxHQUdULFFBQVMsYUFBYSxFQUFLLEVBQU8sR0FDaEMsR0FBSSxHQUFNLEVBQ1YsR0FBTSxLQUFLLElBQUksRUFBSSxPQUFRLEVBRTNCLEtBQUssR0FBSSxHQUFJLEVBQU8sRUFBSSxJQUFPLEVBQzdCLEdBQU8sT0FBTyxhQUFhLEVBQUksR0FFakMsT0FBTyxHQUdULFFBQVMsVUFBVSxFQUFLLEVBQU8sR0FDN0IsR0FBSSxHQUFNLEVBQUksU0FFVCxHQUFTLEVBQVEsS0FBRyxFQUFRLEtBQzVCLEdBQU8sRUFBTSxHQUFLLEVBQU0sS0FBSyxFQUFNLEVBR3hDLEtBQUssR0FERCxHQUFNLEdBQ0QsRUFBSSxFQUFPLEVBQUksSUFBTyxFQUM3QixHQUFPLE1BQU0sRUFBSSxHQUVuQixPQUFPLEdBR1QsUUFBUyxjQUFjLEVBQUssRUFBTyxHQUdqQyxJQUFLLEdBRkQsR0FBUSxFQUFJLE1BQU0sRUFBTyxHQUN6QixFQUFNLEdBQ0QsRUFBSSxFQUFHLEVBQUksRUFBTSxPQUFRLEdBQUssRUFDckMsR0FBTyxPQUFPLGFBQWEsRUFBTSxHQUFvQixJQUFmLEVBQU0sRUFBSSxHQUVsRCxPQUFPLEdBMENULFFBQVMsYUFBYSxFQUFRLEVBQUssR0FDakMsR0FBSyxFQUFTLEdBQU8sR0FBSyxFQUFTLEVBQUcsS0FBTSxJQUFJLFlBQVcscUJBQzNELElBQUksRUFBUyxFQUFNLEVBQVEsS0FBTSxJQUFJLFlBQVcseUNBK0psRCxRQUFTLFVBQVUsRUFBSyxFQUFPLEVBQVEsRUFBSyxFQUFLLEdBQy9DLElBQUssT0FBTyxTQUFTLEdBQU0sS0FBTSxJQUFJLFdBQVUsOENBQy9DLElBQUksRUFBUSxHQUFPLEVBQVEsRUFBSyxLQUFNLElBQUksWUFBVyxvQ0FDckQsSUFBSSxFQUFTLEVBQU0sRUFBSSxPQUFRLEtBQU0sSUFBSSxZQUFXLHNCQWtEdEQsUUFBUyxtQkFBbUIsRUFBSyxFQUFPLEVBQVEsR0FDMUMsRUFBUSxJQUFHLEVBQVEsTUFBUyxFQUFRLEVBQ3hDLEtBQUssR0FBSSxHQUFJLEVBQUcsRUFBSSxLQUFLLElBQUksRUFBSSxPQUFTLEVBQVEsR0FBSSxFQUFJLElBQUssRUFDN0QsRUFBSSxFQUFTLElBQU0sRUFBUyxLQUFTLEdBQUssRUFBZSxFQUFJLEVBQUksTUFDbEMsR0FBNUIsRUFBZSxFQUFJLEVBQUksR0E4QjlCLFFBQVMsbUJBQW1CLEVBQUssRUFBTyxFQUFRLEdBQzFDLEVBQVEsSUFBRyxFQUFRLFdBQWEsRUFBUSxFQUM1QyxLQUFLLEdBQUksR0FBSSxFQUFHLEVBQUksS0FBSyxJQUFJLEVBQUksT0FBUyxFQUFRLEdBQUksRUFBSSxJQUFLLEVBQzdELEVBQUksRUFBUyxHQUFNLElBQXVDLEdBQTVCLEVBQWUsRUFBSSxFQUFJLEdBQVUsSUFtSm5FLFFBQVMsY0FBYyxFQUFLLEVBQU8sRUFBUSxFQUFLLEVBQUssR0FDbkQsR0FBSSxFQUFTLEVBQU0sRUFBSSxPQUFRLEtBQU0sSUFBSSxZQUFXLHFCQUNwRCxJQUFJLEVBQVMsRUFBRyxLQUFNLElBQUksWUFBVyxzQkFHdkMsUUFBUyxZQUFZLEVBQUssRUFBTyxFQUFRLEVBQWMsR0FLckQsTUFKSyxJQUNILGFBQWEsRUFBSyxFQUFPLEVBQVEsRUFBRyx1QkFBeUIsdUJBRS9ELFFBQVEsTUFBTSxFQUFLLEVBQU8sRUFBUSxFQUFjLEdBQUksR0FDN0MsRUFBUyxFQVdsQixRQUFTLGFBQWEsRUFBSyxFQUFPLEVBQVEsRUFBYyxHQUt0RCxNQUpLLElBQ0gsYUFBYSxFQUFLLEVBQU8sRUFBUSxFQUFHLHdCQUEwQix3QkFFaEUsUUFBUSxNQUFNLEVBQUssRUFBTyxFQUFRLEVBQWMsR0FBSSxHQUM3QyxFQUFTLEVBZ0lsQixRQUFTLGFBQWEsR0FJcEIsR0FGQSxFQUFNLFdBQVcsR0FBSyxRQUFRLGtCQUFtQixJQUU3QyxFQUFJLE9BQVMsRUFBRyxNQUFPLEVBRTNCLE1BQU8sRUFBSSxPQUFTLEdBQU0sR0FDeEIsR0FBWSxHQUVkLE9BQU8sR0FHVCxRQUFTLFlBQVksR0FDbkIsTUFBSSxHQUFJLEtBQWEsRUFBSSxPQUNsQixFQUFJLFFBQVEsYUFBYyxJQUduQyxRQUFTLE9BQU8sR0FDZCxNQUFJLEdBQUksR0FBVyxJQUFNLEVBQUUsU0FBUyxJQUM3QixFQUFFLFNBQVMsSUFHcEIsUUFBUyxhQUFhLEVBQVEsR0FDNUIsRUFBUSxHQUFTLEVBQUEsQ0FNakIsS0FBSyxHQUxELEdBQ0EsRUFBUyxFQUFPLE9BQ2hCLEVBQWdCLEtBQ2hCLEtBRUssRUFBSSxFQUFHLEVBQUksSUFBVSxFQUFHLENBSS9CLElBSEEsRUFBWSxFQUFPLFdBQVcsSUFHZCxPQUFVLEVBQVksTUFBUSxDQUU1QyxJQUFLLEVBQWUsQ0FFbEIsR0FBSSxFQUFZLE1BQVEsRUFFakIsR0FBUyxJQUFNLEdBQUcsRUFBTSxLQUFLLElBQU0sSUFBTSxJQUM5QyxVQUNLLEdBQUksRUFBSSxJQUFNLEVBQVEsRUFFdEIsR0FBUyxJQUFNLEdBQUcsRUFBTSxLQUFLLElBQU0sSUFBTSxJQUM5QyxVQUlGLEVBQWdCLENBRWhCLFVBSUYsR0FBSSxFQUFZLE1BQVEsRUFDakIsR0FBUyxJQUFNLEdBQUcsRUFBTSxLQUFLLElBQU0sSUFBTSxLQUM5QyxFQUFnQixDQUNoQixVQUlGLEVBQWtFLE9BQXJELEVBQWdCLE9BQVUsR0FBSyxFQUFZLFdBQy9DLEtBRUosR0FBUyxJQUFNLEdBQUcsRUFBTSxLQUFLLElBQU0sSUFBTSxJQU1oRCxJQUhBLEVBQWdCLEtBR1osRUFBWSxJQUFNLENBQ3BCLElBQUssR0FBUyxHQUFLLEVBQUcsS0FDdEIsR0FBTSxLQUFLLE9BQ04sSUFBSSxFQUFZLEtBQU8sQ0FDNUIsSUFBSyxHQUFTLEdBQUssRUFBRyxLQUN0QixHQUFNLEtBQ0osR0FBYSxFQUFNLElBQ1AsR0FBWixFQUFtQixTQUVoQixJQUFJLEVBQVksTUFBUyxDQUM5QixJQUFLLEdBQVMsR0FBSyxFQUFHLEtBQ3RCLEdBQU0sS0FDSixHQUFhLEdBQU0sSUFDbkIsR0FBYSxFQUFNLEdBQU8sSUFDZCxHQUFaLEVBQW1CLFNBRWhCLENBQUEsS0FBSSxFQUFZLFNBU3JCLEtBQU0sSUFBSSxPQUFNLHFCQVJoQixLQUFLLEdBQVMsR0FBSyxFQUFHLEtBQ3RCLEdBQU0sS0FDSixHQUFhLEdBQU8sSUFDcEIsR0FBYSxHQUFNLEdBQU8sSUFDMUIsR0FBYSxFQUFNLEdBQU8sSUFDZCxHQUFaLEVBQW1CLE1BT3pCLE1BQU8sR0FHVCxRQUFTLGNBQWMsR0FFckIsSUFBSyxHQURELE1BQ0ssRUFBSSxFQUFHLEVBQUksRUFBSSxTQUFVLEVBRWhDLEVBQVUsS0FBeUIsSUFBcEIsRUFBSSxXQUFXLEdBRWhDLE9BQU8sR0FHVCxRQUFTLGdCQUFnQixFQUFLLEdBRzVCLElBQUssR0FGRCxHQUFHLEVBQUksRUFDUCxLQUNLLEVBQUksRUFBRyxFQUFJLEVBQUksV0FDakIsR0FBUyxHQUFLLEtBRGEsRUFHaEMsRUFBSSxFQUFJLFdBQVcsR0FDbkIsRUFBSyxHQUFLLEVBQ1YsRUFBSyxFQUFJLElBQ1QsRUFBVSxLQUFLLEdBQ2YsRUFBVSxLQUFLLEVBR2pCLE9BQU8sR0FHVCxRQUFTLGVBQWUsR0FDdEIsTUFBTyxRQUFPLFlBQVksWUFBWSxJQUd4QyxRQUFTLFlBQVksRUFBSyxFQUFLLEVBQVEsR0FDckMsSUFBSyxHQUFJLEdBQUksRUFBRyxFQUFJLEtBQ2IsRUFBSSxHQUFVLEVBQUksUUFBWSxHQUFLLEVBQUksVUFEaEIsRUFFNUIsRUFBSSxFQUFJLEdBQVUsRUFBSSxFQUV4QixPQUFPLEdBR1QsUUFBUyxPQUFPLEdBQ2QsTUFBTyxLQUFRLEVBanZEakIsR0FBSSxRQUFTLFFBQVEsYUFDakIsUUFBVSxRQUFRLFdBQ2xCLFFBQVUsUUFBUSxVQUV0QixTQUFRLE9BQVMsT0FDakIsUUFBUSxXQUFhLFdBQ3JCLFFBQVEsa0JBQW9CLEdBMEI1QixPQUFPLHdCQUFxRCxLQUEvQixPQUFPLG9CQUNoQyxPQUFPLG9CQUNQLG9CQUtKLFFBQVEsV0FBYSxhQWtFckIsT0FBTyxTQUFXLEtBR2xCLE9BQU8sU0FBVyxTQUFVLEdBRTFCLE1BREEsR0FBSSxVQUFZLE9BQU8sVUFDaEIsR0EyQlQsT0FBTyxLQUFPLFNBQVUsRUFBTyxFQUFrQixHQUMvQyxNQUFPLE1BQUssS0FBTSxFQUFPLEVBQWtCLElBR3pDLE9BQU8sc0JBQ1QsT0FBTyxVQUFVLFVBQVksV0FBVyxVQUN4QyxPQUFPLFVBQVksV0FDRyxtQkFBWCxTQUEwQixPQUFPLFNBQ3hDLE9BQU8sT0FBTyxXQUFhLFFBRTdCLE9BQU8sZUFBZSxPQUFRLE9BQU8sU0FDbkMsTUFBTyxLQUNQLGNBQWMsS0FpQ3BCLE9BQU8sTUFBUSxTQUFVLEVBQU0sRUFBTSxHQUNuQyxNQUFPLE9BQU0sS0FBTSxFQUFNLEVBQU0sSUFpQmpDLE9BQU8sWUFBYyxTQUFVLEdBQzdCLE1BQU8sYUFBWSxLQUFNLElBSzNCLE9BQU8sZ0JBQWtCLFNBQVUsR0FDakMsTUFBTyxhQUFZLEtBQU0sSUFpSDNCLE9BQU8sU0FBVyxTQUFtQixHQUNuQyxRQUFlLE1BQUwsSUFBYSxFQUFFLFlBRzNCLE9BQU8sUUFBVSxTQUFrQixFQUFHLEdBQ3BDLElBQUssT0FBTyxTQUFTLEtBQU8sT0FBTyxTQUFTLEdBQzFDLEtBQU0sSUFBSSxXQUFVLDRCQUd0QixJQUFJLElBQU0sRUFBRyxNQUFPLEVBS3BCLEtBQUssR0FIRCxHQUFJLEVBQUUsT0FDTixFQUFJLEVBQUUsT0FFRCxFQUFJLEVBQUcsRUFBTSxLQUFLLElBQUksRUFBRyxHQUFJLEVBQUksSUFBTyxFQUMvQyxHQUFJLEVBQUUsS0FBTyxFQUFFLEdBQUksQ0FDakIsRUFBSSxFQUFFLEdBQ04sRUFBSSxFQUFFLEVBQ04sT0FJSixNQUFJLEdBQUksR0FBVyxFQUNmLEVBQUksRUFBVSxFQUNYLEdBR1QsT0FBTyxXQUFhLFNBQXFCLEdBQ3ZDLE9BQVEsT0FBTyxHQUFVLGVBQ3ZCLElBQUssTUFDTCxJQUFLLE9BQ0wsSUFBSyxRQUNMLElBQUssUUFDTCxJQUFLLFNBQ0wsSUFBSyxTQUNMLElBQUssU0FDTCxJQUFLLE9BQ0wsSUFBSyxRQUNMLElBQUssVUFDTCxJQUFLLFdBQ0gsT0FBTyxDQUNULFNBQ0UsT0FBTyxJQUliLE9BQU8sT0FBUyxTQUFpQixFQUFNLEdBQ3JDLElBQUssUUFBUSxHQUNYLEtBQU0sSUFBSSxXQUFVLDhDQUd0QixJQUFvQixJQUFoQixFQUFLLE9BQ1AsTUFBTyxRQUFPLE1BQU0sRUFHdEIsSUFBSSxFQUNKLFFBQWUsS0FBWCxFQUVGLElBREEsRUFBUyxFQUNKLEVBQUksRUFBRyxFQUFJLEVBQUssU0FBVSxFQUM3QixHQUFVLEVBQUssR0FBRyxNQUl0QixJQUFJLEdBQVMsT0FBTyxZQUFZLEdBQzVCLEVBQU0sQ0FDVixLQUFLLEVBQUksRUFBRyxFQUFJLEVBQUssU0FBVSxFQUFHLENBQ2hDLEdBQUksR0FBTSxFQUFLLEVBQ2YsS0FBSyxPQUFPLFNBQVMsR0FDbkIsS0FBTSxJQUFJLFdBQVUsOENBRXRCLEdBQUksS0FBSyxFQUFRLEdBQ2pCLEdBQU8sRUFBSSxPQUViLE1BQU8sSUE4Q1QsT0FBTyxXQUFhLFdBMEVwQixPQUFPLFVBQVUsV0FBWSxFQVE3QixPQUFPLFVBQVUsT0FBUyxXQUN4QixHQUFJLEdBQU0sS0FBSyxNQUNmLElBQUksRUFBTSxHQUFNLEVBQ2QsS0FBTSxJQUFJLFlBQVcsNENBRXZCLEtBQUssR0FBSSxHQUFJLEVBQUcsRUFBSSxFQUFLLEdBQUssRUFDNUIsS0FBSyxLQUFNLEVBQUcsRUFBSSxFQUVwQixPQUFPLE9BR1QsT0FBTyxVQUFVLE9BQVMsV0FDeEIsR0FBSSxHQUFNLEtBQUssTUFDZixJQUFJLEVBQU0sR0FBTSxFQUNkLEtBQU0sSUFBSSxZQUFXLDRDQUV2QixLQUFLLEdBQUksR0FBSSxFQUFHLEVBQUksRUFBSyxHQUFLLEVBQzVCLEtBQUssS0FBTSxFQUFHLEVBQUksR0FDbEIsS0FBSyxLQUFNLEVBQUksRUFBRyxFQUFJLEVBRXhCLE9BQU8sT0FHVCxPQUFPLFVBQVUsT0FBUyxXQUN4QixHQUFJLEdBQU0sS0FBSyxNQUNmLElBQUksRUFBTSxHQUFNLEVBQ2QsS0FBTSxJQUFJLFlBQVcsNENBRXZCLEtBQUssR0FBSSxHQUFJLEVBQUcsRUFBSSxFQUFLLEdBQUssRUFDNUIsS0FBSyxLQUFNLEVBQUcsRUFBSSxHQUNsQixLQUFLLEtBQU0sRUFBSSxFQUFHLEVBQUksR0FDdEIsS0FBSyxLQUFNLEVBQUksRUFBRyxFQUFJLEdBQ3RCLEtBQUssS0FBTSxFQUFJLEVBQUcsRUFBSSxFQUV4QixPQUFPLE9BR1QsT0FBTyxVQUFVLFNBQVcsV0FDMUIsR0FBSSxHQUF1QixFQUFkLEtBQUssTUFDbEIsT0FBZSxLQUFYLEVBQXFCLEdBQ0EsSUFBckIsVUFBVSxPQUFxQixVQUFVLEtBQU0sRUFBRyxHQUMvQyxhQUFhLE1BQU0sS0FBTSxZQUdsQyxPQUFPLFVBQVUsT0FBUyxTQUFpQixHQUN6QyxJQUFLLE9BQU8sU0FBUyxHQUFJLEtBQU0sSUFBSSxXQUFVLDRCQUM3QyxPQUFJLFFBQVMsR0FDc0IsSUFBNUIsT0FBTyxRQUFRLEtBQU0sSUFHOUIsT0FBTyxVQUFVLFFBQVUsV0FDekIsR0FBSSxHQUFNLEdBQ04sRUFBTSxRQUFRLGlCQUtsQixPQUpJLE1BQUssT0FBUyxJQUNoQixFQUFNLEtBQUssU0FBUyxNQUFPLEVBQUcsR0FBSyxNQUFNLFNBQVMsS0FBSyxLQUNuRCxLQUFLLE9BQVMsSUFBSyxHQUFPLFVBRXpCLFdBQWEsRUFBTSxLQUc1QixPQUFPLFVBQVUsUUFBVSxTQUFrQixFQUFRLEVBQU8sRUFBSyxFQUFXLEdBQzFFLElBQUssT0FBTyxTQUFTLEdBQ25CLEtBQU0sSUFBSSxXQUFVLDRCQWdCdEIsUUFiYyxLQUFWLElBQ0YsRUFBUSxPQUVFLEtBQVIsSUFDRixFQUFNLEVBQVMsRUFBTyxPQUFTLE9BRWYsS0FBZCxJQUNGLEVBQVksT0FFRSxLQUFaLElBQ0YsRUFBVSxLQUFLLFFBR2IsRUFBUSxHQUFLLEVBQU0sRUFBTyxRQUFVLEVBQVksR0FBSyxFQUFVLEtBQUssT0FDdEUsS0FBTSxJQUFJLFlBQVcscUJBR3ZCLElBQUksR0FBYSxHQUFXLEdBQVMsRUFDbkMsTUFBTyxFQUVULElBQUksR0FBYSxFQUNmLE9BQVEsQ0FFVixJQUFJLEdBQVMsRUFDWCxNQUFPLEVBUVQsSUFMQSxLQUFXLEVBQ1gsS0FBUyxFQUNULEtBQWUsRUFDZixLQUFhLEVBRVQsT0FBUyxFQUFRLE1BQU8sRUFTNUIsS0FBSyxHQVBELEdBQUksRUFBVSxFQUNkLEVBQUksRUFBTSxFQUNWLEVBQU0sS0FBSyxJQUFJLEVBQUcsR0FFbEIsRUFBVyxLQUFLLE1BQU0sRUFBVyxHQUNqQyxFQUFhLEVBQU8sTUFBTSxFQUFPLEdBRTVCLEVBQUksRUFBRyxFQUFJLElBQU8sRUFDekIsR0FBSSxFQUFTLEtBQU8sRUFBVyxHQUFJLENBQ2pDLEVBQUksRUFBUyxHQUNiLEVBQUksRUFBVyxFQUNmLE9BSUosTUFBSSxHQUFJLEdBQVcsRUFDZixFQUFJLEVBQVUsRUFDWCxHQTZIVCxPQUFPLFVBQVUsU0FBVyxTQUFtQixFQUFLLEVBQVksR0FDOUQsT0FBb0QsSUFBN0MsS0FBSyxRQUFRLEVBQUssRUFBWSxJQUd2QyxPQUFPLFVBQVUsUUFBVSxTQUFrQixFQUFLLEVBQVksR0FDNUQsTUFBTyxzQkFBcUIsS0FBTSxFQUFLLEVBQVksR0FBVSxJQUcvRCxPQUFPLFVBQVUsWUFBYyxTQUFzQixFQUFLLEVBQVksR0FDcEUsTUFBTyxzQkFBcUIsS0FBTSxFQUFLLEVBQVksR0FBVSxJQWtEL0QsT0FBTyxVQUFVLE1BQVEsU0FBZ0IsRUFBUSxFQUFRLEVBQVEsR0FFL0QsT0FBZSxLQUFYLEVBQ0YsRUFBVyxPQUNYLEVBQVMsS0FBSyxPQUNkLEVBQVMsTUFFSixRQUFlLEtBQVgsR0FBMEMsZ0JBQVgsR0FDeEMsRUFBVyxFQUNYLEVBQVMsS0FBSyxPQUNkLEVBQVMsTUFFSixDQUFBLElBQUksU0FBUyxHQVdsQixLQUFNLElBQUksT0FDUiwwRUFYRixJQUFrQixFQUNkLFNBQVMsSUFDWCxHQUFrQixNQUNELEtBQWIsSUFBd0IsRUFBVyxVQUV2QyxFQUFXLEVBQ1gsTUFBUyxJQVNiLEdBQUksR0FBWSxLQUFLLE9BQVMsQ0FHOUIsU0FGZSxLQUFYLEdBQXdCLEVBQVMsS0FBVyxFQUFTLEdBRXBELEVBQU8sT0FBUyxJQUFNLEVBQVMsR0FBSyxFQUFTLElBQU8sRUFBUyxLQUFLLE9BQ3JFLEtBQU0sSUFBSSxZQUFXLHlDQUdsQixLQUFVLEVBQVcsT0FHMUIsS0FEQSxHQUFJLElBQWMsSUFFaEIsT0FBUSxHQUNOLElBQUssTUFDSCxNQUFPLFVBQVMsS0FBTSxFQUFRLEVBQVEsRUFFeEMsS0FBSyxPQUNMLElBQUssUUFDSCxNQUFPLFdBQVUsS0FBTSxFQUFRLEVBQVEsRUFFekMsS0FBSyxRQUNILE1BQU8sWUFBVyxLQUFNLEVBQVEsRUFBUSxFQUUxQyxLQUFLLFNBQ0wsSUFBSyxTQUNILE1BQU8sYUFBWSxLQUFNLEVBQVEsRUFBUSxFQUUzQyxLQUFLLFNBRUgsTUFBTyxhQUFZLEtBQU0sRUFBUSxFQUFRLEVBRTNDLEtBQUssT0FDTCxJQUFLLFFBQ0wsSUFBSyxVQUNMLElBQUssV0FDSCxNQUFPLFdBQVUsS0FBTSxFQUFRLEVBQVEsRUFFekMsU0FDRSxHQUFJLEVBQWEsS0FBTSxJQUFJLFdBQVUscUJBQXVCLEVBQzVELElBQVksR0FBSyxHQUFVLGNBQzNCLEdBQWMsSUFLdEIsT0FBTyxVQUFVLE9BQVMsV0FDeEIsT0FDRSxLQUFNLFNBQ04sS0FBTSxNQUFNLFVBQVUsTUFBTSxLQUFLLEtBQUssTUFBUSxLQUFNLElBd0Z4RCxJQUFJLHNCQUF1QixJQThEM0IsUUFBTyxVQUFVLE1BQVEsU0FBZ0IsRUFBTyxHQUM5QyxHQUFJLEdBQU0sS0FBSyxNQUNmLEtBQVUsRUFDVixNQUFjLEtBQVIsRUFBb0IsSUFBUSxFQUU5QixFQUFRLEdBQ1YsR0FBUyxHQUNHLElBQUcsRUFBUSxHQUNkLEVBQVEsSUFDakIsRUFBUSxHQUdOLEVBQU0sR0FDUixHQUFPLEdBQ0csSUFBRyxFQUFNLEdBQ1YsRUFBTSxJQUNmLEVBQU0sR0FHSixFQUFNLElBQU8sRUFBTSxFQUV2QixJQUFJLEVBQ0osSUFBSSxPQUFPLG9CQUNULEVBQVMsS0FBSyxTQUFTLEVBQU8sR0FDOUIsRUFBTyxVQUFZLE9BQU8sY0FDckIsQ0FDTCxHQUFJLEdBQVcsRUFBTSxDQUNyQixHQUFTLEdBQUksUUFBTyxNQUFVLEdBQzlCLEtBQUssR0FBSSxHQUFJLEVBQUcsRUFBSSxJQUFZLEVBQzlCLEVBQU8sR0FBSyxLQUFLLEVBQUksR0FJekIsTUFBTyxJQVdULE9BQU8sVUFBVSxXQUFhLFNBQXFCLEVBQVEsRUFBWSxHQUNyRSxHQUFrQixFQUNsQixHQUEwQixFQUNyQixHQUFVLFlBQVksRUFBUSxFQUFZLEtBQUssT0FLcEQsS0FIQSxHQUFJLEdBQU0sS0FBSyxHQUNYLEVBQU0sRUFDTixFQUFJLElBQ0MsRUFBSSxJQUFlLEdBQU8sTUFDakMsR0FBTyxLQUFLLEVBQVMsR0FBSyxDQUc1QixPQUFPLElBR1QsT0FBTyxVQUFVLFdBQWEsU0FBcUIsRUFBUSxFQUFZLEdBQ3JFLEdBQWtCLEVBQ2xCLEdBQTBCLEVBQ3JCLEdBQ0gsWUFBWSxFQUFRLEVBQVksS0FBSyxPQUt2QyxLQUZBLEdBQUksR0FBTSxLQUFLLElBQVcsR0FDdEIsRUFBTSxFQUNILEVBQWEsSUFBTSxHQUFPLE1BQy9CLEdBQU8sS0FBSyxJQUFXLEdBQWMsQ0FHdkMsT0FBTyxJQUdULE9BQU8sVUFBVSxVQUFZLFNBQW9CLEVBQVEsR0FFdkQsTUFESyxJQUFVLFlBQVksRUFBUSxFQUFHLEtBQUssUUFDcEMsS0FBSyxJQUdkLE9BQU8sVUFBVSxhQUFlLFNBQXVCLEVBQVEsR0FFN0QsTUFESyxJQUFVLFlBQVksRUFBUSxFQUFHLEtBQUssUUFDcEMsS0FBSyxHQUFXLEtBQUssRUFBUyxJQUFNLEdBRzdDLE9BQU8sVUFBVSxhQUFlLFNBQXVCLEVBQVEsR0FFN0QsTUFESyxJQUFVLFlBQVksRUFBUSxFQUFHLEtBQUssUUFDbkMsS0FBSyxJQUFXLEVBQUssS0FBSyxFQUFTLElBRzdDLE9BQU8sVUFBVSxhQUFlLFNBQXVCLEVBQVEsR0FHN0QsTUFGSyxJQUFVLFlBQVksRUFBUSxFQUFHLEtBQUssU0FFbEMsS0FBSyxHQUNULEtBQUssRUFBUyxJQUFNLEVBQ3BCLEtBQUssRUFBUyxJQUFNLElBQ0QsU0FBbkIsS0FBSyxFQUFTLElBR3JCLE9BQU8sVUFBVSxhQUFlLFNBQXVCLEVBQVEsR0FHN0QsTUFGSyxJQUFVLFlBQVksRUFBUSxFQUFHLEtBQUssUUFFcEIsU0FBZixLQUFLLElBQ1QsS0FBSyxFQUFTLElBQU0sR0FDckIsS0FBSyxFQUFTLElBQU0sRUFDckIsS0FBSyxFQUFTLEtBR2xCLE9BQU8sVUFBVSxVQUFZLFNBQW9CLEVBQVEsRUFBWSxHQUNuRSxHQUFrQixFQUNsQixHQUEwQixFQUNyQixHQUFVLFlBQVksRUFBUSxFQUFZLEtBQUssT0FLcEQsS0FIQSxHQUFJLEdBQU0sS0FBSyxHQUNYLEVBQU0sRUFDTixFQUFJLElBQ0MsRUFBSSxJQUFlLEdBQU8sTUFDakMsR0FBTyxLQUFLLEVBQVMsR0FBSyxDQU01QixPQUpBLElBQU8sSUFFSCxHQUFPLElBQUssR0FBTyxLQUFLLElBQUksRUFBRyxFQUFJLElBRWhDLEdBR1QsT0FBTyxVQUFVLFVBQVksU0FBb0IsRUFBUSxFQUFZLEdBQ25FLEdBQWtCLEVBQ2xCLEdBQTBCLEVBQ3JCLEdBQVUsWUFBWSxFQUFRLEVBQVksS0FBSyxPQUtwRCxLQUhBLEdBQUksR0FBSSxFQUNKLEVBQU0sRUFDTixFQUFNLEtBQUssSUFBVyxHQUNuQixFQUFJLElBQU0sR0FBTyxNQUN0QixHQUFPLEtBQUssSUFBVyxHQUFLLENBTTlCLE9BSkEsSUFBTyxJQUVILEdBQU8sSUFBSyxHQUFPLEtBQUssSUFBSSxFQUFHLEVBQUksSUFFaEMsR0FHVCxPQUFPLFVBQVUsU0FBVyxTQUFtQixFQUFRLEdBRXJELE1BREssSUFBVSxZQUFZLEVBQVEsRUFBRyxLQUFLLFFBQ3RCLElBQWYsS0FBSyxJQUMwQixHQUE1QixJQUFPLEtBQUssR0FBVSxHQURLLEtBQUssSUFJM0MsT0FBTyxVQUFVLFlBQWMsU0FBc0IsRUFBUSxHQUN0RCxHQUFVLFlBQVksRUFBUSxFQUFHLEtBQUssT0FDM0MsSUFBSSxHQUFNLEtBQUssR0FBVyxLQUFLLEVBQVMsSUFBTSxDQUM5QyxPQUFjLE9BQU4sRUFBc0IsV0FBTixFQUFtQixHQUc3QyxPQUFPLFVBQVUsWUFBYyxTQUFzQixFQUFRLEdBQ3RELEdBQVUsWUFBWSxFQUFRLEVBQUcsS0FBSyxPQUMzQyxJQUFJLEdBQU0sS0FBSyxFQUFTLEdBQU0sS0FBSyxJQUFXLENBQzlDLE9BQWMsT0FBTixFQUFzQixXQUFOLEVBQW1CLEdBRzdDLE9BQU8sVUFBVSxZQUFjLFNBQXNCLEVBQVEsR0FHM0QsTUFGSyxJQUFVLFlBQVksRUFBUSxFQUFHLEtBQUssUUFFbkMsS0FBSyxHQUNWLEtBQUssRUFBUyxJQUFNLEVBQ3BCLEtBQUssRUFBUyxJQUFNLEdBQ3BCLEtBQUssRUFBUyxJQUFNLElBR3pCLE9BQU8sVUFBVSxZQUFjLFNBQXNCLEVBQVEsR0FHM0QsTUFGSyxJQUFVLFlBQVksRUFBUSxFQUFHLEtBQUssUUFFbkMsS0FBSyxJQUFXLEdBQ3JCLEtBQUssRUFBUyxJQUFNLEdBQ3BCLEtBQUssRUFBUyxJQUFNLEVBQ3BCLEtBQUssRUFBUyxJQUduQixPQUFPLFVBQVUsWUFBYyxTQUFzQixFQUFRLEdBRTNELE1BREssSUFBVSxZQUFZLEVBQVEsRUFBRyxLQUFLLFFBQ3BDLFFBQVEsS0FBSyxLQUFNLEdBQVEsRUFBTSxHQUFJLElBRzlDLE9BQU8sVUFBVSxZQUFjLFNBQXNCLEVBQVEsR0FFM0QsTUFESyxJQUFVLFlBQVksRUFBUSxFQUFHLEtBQUssUUFDcEMsUUFBUSxLQUFLLEtBQU0sR0FBUSxFQUFPLEdBQUksSUFHL0MsT0FBTyxVQUFVLGFBQWUsU0FBdUIsRUFBUSxHQUU3RCxNQURLLElBQVUsWUFBWSxFQUFRLEVBQUcsS0FBSyxRQUNwQyxRQUFRLEtBQUssS0FBTSxHQUFRLEVBQU0sR0FBSSxJQUc5QyxPQUFPLFVBQVUsYUFBZSxTQUF1QixFQUFRLEdBRTdELE1BREssSUFBVSxZQUFZLEVBQVEsRUFBRyxLQUFLLFFBQ3BDLFFBQVEsS0FBSyxLQUFNLEdBQVEsRUFBTyxHQUFJLElBUy9DLE9BQU8sVUFBVSxZQUFjLFNBQXNCLEVBQU8sRUFBUSxFQUFZLEdBSTlFLEdBSEEsR0FBUyxFQUNULEdBQWtCLEVBQ2xCLEdBQTBCLEdBQ3JCLEVBQVUsQ0FFYixTQUFTLEtBQU0sRUFBTyxFQUFRLEVBRGYsS0FBSyxJQUFJLEVBQUcsRUFBSSxHQUFjLEVBQ08sR0FHdEQsR0FBSSxHQUFNLEVBQ04sRUFBSSxDQUVSLEtBREEsS0FBSyxHQUFrQixJQUFSLElBQ04sRUFBSSxJQUFlLEdBQU8sTUFDakMsS0FBSyxFQUFTLEdBQU0sRUFBUSxFQUFPLEdBR3JDLE9BQU8sR0FBUyxHQUdsQixPQUFPLFVBQVUsWUFBYyxTQUFzQixFQUFPLEVBQVEsRUFBWSxHQUk5RSxHQUhBLEdBQVMsRUFDVCxHQUFrQixFQUNsQixHQUEwQixHQUNyQixFQUFVLENBRWIsU0FBUyxLQUFNLEVBQU8sRUFBUSxFQURmLEtBQUssSUFBSSxFQUFHLEVBQUksR0FBYyxFQUNPLEdBR3RELEdBQUksR0FBSSxFQUFhLEVBQ2pCLEVBQU0sQ0FFVixLQURBLEtBQUssRUFBUyxHQUFhLElBQVIsSUFDVixHQUFLLElBQU0sR0FBTyxNQUN6QixLQUFLLEVBQVMsR0FBTSxFQUFRLEVBQU8sR0FHckMsT0FBTyxHQUFTLEdBR2xCLE9BQU8sVUFBVSxXQUFhLFNBQXFCLEVBQU8sRUFBUSxHQU1oRSxNQUxBLElBQVMsRUFDVCxHQUFrQixFQUNiLEdBQVUsU0FBUyxLQUFNLEVBQU8sRUFBUSxFQUFHLElBQU0sR0FDakQsT0FBTyxzQkFBcUIsRUFBUSxLQUFLLE1BQU0sSUFDcEQsS0FBSyxHQUFtQixJQUFSLEVBQ1QsRUFBUyxHQVdsQixPQUFPLFVBQVUsY0FBZ0IsU0FBd0IsRUFBTyxFQUFRLEdBVXRFLE1BVEEsSUFBUyxFQUNULEdBQWtCLEVBQ2IsR0FBVSxTQUFTLEtBQU0sRUFBTyxFQUFRLEVBQUcsTUFBUSxHQUNwRCxPQUFPLHFCQUNULEtBQUssR0FBbUIsSUFBUixFQUNoQixLQUFLLEVBQVMsR0FBTSxJQUFVLEdBRTlCLGtCQUFrQixLQUFNLEVBQU8sR0FBUSxHQUVsQyxFQUFTLEdBR2xCLE9BQU8sVUFBVSxjQUFnQixTQUF3QixFQUFPLEVBQVEsR0FVdEUsTUFUQSxJQUFTLEVBQ1QsR0FBa0IsRUFDYixHQUFVLFNBQVMsS0FBTSxFQUFPLEVBQVEsRUFBRyxNQUFRLEdBQ3BELE9BQU8scUJBQ1QsS0FBSyxHQUFXLElBQVUsRUFDMUIsS0FBSyxFQUFTLEdBQWMsSUFBUixHQUVwQixrQkFBa0IsS0FBTSxFQUFPLEdBQVEsR0FFbEMsRUFBUyxHQVVsQixPQUFPLFVBQVUsY0FBZ0IsU0FBd0IsRUFBTyxFQUFRLEdBWXRFLE1BWEEsSUFBUyxFQUNULEdBQWtCLEVBQ2IsR0FBVSxTQUFTLEtBQU0sRUFBTyxFQUFRLEVBQUcsV0FBWSxHQUN4RCxPQUFPLHFCQUNULEtBQUssRUFBUyxHQUFNLElBQVUsR0FDOUIsS0FBSyxFQUFTLEdBQU0sSUFBVSxHQUM5QixLQUFLLEVBQVMsR0FBTSxJQUFVLEVBQzlCLEtBQUssR0FBbUIsSUFBUixHQUVoQixrQkFBa0IsS0FBTSxFQUFPLEdBQVEsR0FFbEMsRUFBUyxHQUdsQixPQUFPLFVBQVUsY0FBZ0IsU0FBd0IsRUFBTyxFQUFRLEdBWXRFLE1BWEEsSUFBUyxFQUNULEdBQWtCLEVBQ2IsR0FBVSxTQUFTLEtBQU0sRUFBTyxFQUFRLEVBQUcsV0FBWSxHQUN4RCxPQUFPLHFCQUNULEtBQUssR0FBVyxJQUFVLEdBQzFCLEtBQUssRUFBUyxHQUFNLElBQVUsR0FDOUIsS0FBSyxFQUFTLEdBQU0sSUFBVSxFQUM5QixLQUFLLEVBQVMsR0FBYyxJQUFSLEdBRXBCLGtCQUFrQixLQUFNLEVBQU8sR0FBUSxHQUVsQyxFQUFTLEdBR2xCLE9BQU8sVUFBVSxXQUFhLFNBQXFCLEVBQU8sRUFBUSxFQUFZLEdBRzVFLEdBRkEsR0FBUyxFQUNULEdBQWtCLEdBQ2IsRUFBVSxDQUNiLEdBQUksR0FBUSxLQUFLLElBQUksRUFBRyxFQUFJLEVBQWEsRUFFekMsVUFBUyxLQUFNLEVBQU8sRUFBUSxFQUFZLEVBQVEsR0FBSSxHQUd4RCxHQUFJLEdBQUksRUFDSixFQUFNLEVBQ04sRUFBTSxDQUVWLEtBREEsS0FBSyxHQUFrQixJQUFSLElBQ04sRUFBSSxJQUFlLEdBQU8sTUFDN0IsRUFBUSxHQUFhLElBQVIsR0FBc0MsSUFBekIsS0FBSyxFQUFTLEVBQUksS0FDOUMsRUFBTSxHQUVSLEtBQUssRUFBUyxJQUFPLEVBQVEsR0FBUSxHQUFLLEVBQU0sR0FHbEQsT0FBTyxHQUFTLEdBR2xCLE9BQU8sVUFBVSxXQUFhLFNBQXFCLEVBQU8sRUFBUSxFQUFZLEdBRzVFLEdBRkEsR0FBUyxFQUNULEdBQWtCLEdBQ2IsRUFBVSxDQUNiLEdBQUksR0FBUSxLQUFLLElBQUksRUFBRyxFQUFJLEVBQWEsRUFFekMsVUFBUyxLQUFNLEVBQU8sRUFBUSxFQUFZLEVBQVEsR0FBSSxHQUd4RCxHQUFJLEdBQUksRUFBYSxFQUNqQixFQUFNLEVBQ04sRUFBTSxDQUVWLEtBREEsS0FBSyxFQUFTLEdBQWEsSUFBUixJQUNWLEdBQUssSUFBTSxHQUFPLE1BQ3JCLEVBQVEsR0FBYSxJQUFSLEdBQXNDLElBQXpCLEtBQUssRUFBUyxFQUFJLEtBQzlDLEVBQU0sR0FFUixLQUFLLEVBQVMsSUFBTyxFQUFRLEdBQVEsR0FBSyxFQUFNLEdBR2xELE9BQU8sR0FBUyxHQUdsQixPQUFPLFVBQVUsVUFBWSxTQUFvQixFQUFPLEVBQVEsR0FPOUQsTUFOQSxJQUFTLEVBQ1QsR0FBa0IsRUFDYixHQUFVLFNBQVMsS0FBTSxFQUFPLEVBQVEsRUFBRyxLQUFPLEtBQ2xELE9BQU8sc0JBQXFCLEVBQVEsS0FBSyxNQUFNLElBQ2hELEVBQVEsSUFBRyxFQUFRLElBQU8sRUFBUSxHQUN0QyxLQUFLLEdBQW1CLElBQVIsRUFDVCxFQUFTLEdBR2xCLE9BQU8sVUFBVSxhQUFlLFNBQXVCLEVBQU8sRUFBUSxHQVVwRSxNQVRBLElBQVMsRUFDVCxHQUFrQixFQUNiLEdBQVUsU0FBUyxLQUFNLEVBQU8sRUFBUSxFQUFHLE9BQVMsT0FDckQsT0FBTyxxQkFDVCxLQUFLLEdBQW1CLElBQVIsRUFDaEIsS0FBSyxFQUFTLEdBQU0sSUFBVSxHQUU5QixrQkFBa0IsS0FBTSxFQUFPLEdBQVEsR0FFbEMsRUFBUyxHQUdsQixPQUFPLFVBQVUsYUFBZSxTQUF1QixFQUFPLEVBQVEsR0FVcEUsTUFUQSxJQUFTLEVBQ1QsR0FBa0IsRUFDYixHQUFVLFNBQVMsS0FBTSxFQUFPLEVBQVEsRUFBRyxPQUFTLE9BQ3JELE9BQU8scUJBQ1QsS0FBSyxHQUFXLElBQVUsRUFDMUIsS0FBSyxFQUFTLEdBQWMsSUFBUixHQUVwQixrQkFBa0IsS0FBTSxFQUFPLEdBQVEsR0FFbEMsRUFBUyxHQUdsQixPQUFPLFVBQVUsYUFBZSxTQUF1QixFQUFPLEVBQVEsR0FZcEUsTUFYQSxJQUFTLEVBQ1QsR0FBa0IsRUFDYixHQUFVLFNBQVMsS0FBTSxFQUFPLEVBQVEsRUFBRyxZQUFhLFlBQ3pELE9BQU8scUJBQ1QsS0FBSyxHQUFtQixJQUFSLEVBQ2hCLEtBQUssRUFBUyxHQUFNLElBQVUsRUFDOUIsS0FBSyxFQUFTLEdBQU0sSUFBVSxHQUM5QixLQUFLLEVBQVMsR0FBTSxJQUFVLElBRTlCLGtCQUFrQixLQUFNLEVBQU8sR0FBUSxHQUVsQyxFQUFTLEdBR2xCLE9BQU8sVUFBVSxhQUFlLFNBQXVCLEVBQU8sRUFBUSxHQWFwRSxNQVpBLElBQVMsRUFDVCxHQUFrQixFQUNiLEdBQVUsU0FBUyxLQUFNLEVBQU8sRUFBUSxFQUFHLFlBQWEsWUFDekQsRUFBUSxJQUFHLEVBQVEsV0FBYSxFQUFRLEdBQ3hDLE9BQU8scUJBQ1QsS0FBSyxHQUFXLElBQVUsR0FDMUIsS0FBSyxFQUFTLEdBQU0sSUFBVSxHQUM5QixLQUFLLEVBQVMsR0FBTSxJQUFVLEVBQzlCLEtBQUssRUFBUyxHQUFjLElBQVIsR0FFcEIsa0JBQWtCLEtBQU0sRUFBTyxHQUFRLEdBRWxDLEVBQVMsR0FnQmxCLE9BQU8sVUFBVSxhQUFlLFNBQXVCLEVBQU8sRUFBUSxHQUNwRSxNQUFPLFlBQVcsS0FBTSxFQUFPLEdBQVEsRUFBTSxJQUcvQyxPQUFPLFVBQVUsYUFBZSxTQUF1QixFQUFPLEVBQVEsR0FDcEUsTUFBTyxZQUFXLEtBQU0sRUFBTyxHQUFRLEVBQU8sSUFXaEQsT0FBTyxVQUFVLGNBQWdCLFNBQXdCLEVBQU8sRUFBUSxHQUN0RSxNQUFPLGFBQVksS0FBTSxFQUFPLEdBQVEsRUFBTSxJQUdoRCxPQUFPLFVBQVUsY0FBZ0IsU0FBd0IsRUFBTyxFQUFRLEdBQ3RFLE1BQU8sYUFBWSxLQUFNLEVBQU8sR0FBUSxFQUFPLElBSWpELE9BQU8sVUFBVSxLQUFPLFNBQWUsRUFBUSxFQUFhLEVBQU8sR0FRakUsR0FQSyxJQUFPLEVBQVEsR0FDZixHQUFlLElBQVIsSUFBVyxFQUFNLEtBQUssUUFDOUIsR0FBZSxFQUFPLFNBQVEsRUFBYyxFQUFPLFFBQ2xELElBQWEsRUFBYyxHQUM1QixFQUFNLEdBQUssRUFBTSxJQUFPLEVBQU0sR0FHOUIsSUFBUSxFQUFPLE1BQU8sRUFDMUIsSUFBc0IsSUFBbEIsRUFBTyxRQUFnQyxJQUFoQixLQUFLLE9BQWMsTUFBTyxFQUdyRCxJQUFJLEVBQWMsRUFDaEIsS0FBTSxJQUFJLFlBQVcsNEJBRXZCLElBQUksRUFBUSxHQUFLLEdBQVMsS0FBSyxPQUFRLEtBQU0sSUFBSSxZQUFXLDRCQUM1RCxJQUFJLEVBQU0sRUFBRyxLQUFNLElBQUksWUFBVywwQkFHOUIsR0FBTSxLQUFLLFNBQVEsRUFBTSxLQUFLLFFBQzlCLEVBQU8sT0FBUyxFQUFjLEVBQU0sSUFDdEMsRUFBTSxFQUFPLE9BQVMsRUFBYyxFQUd0QyxJQUNJLEdBREEsRUFBTSxFQUFNLENBR2hCLElBQUksT0FBUyxHQUFVLEVBQVEsR0FBZSxFQUFjLEVBRTFELElBQUssRUFBSSxFQUFNLEVBQUcsR0FBSyxJQUFLLEVBQzFCLEVBQU8sRUFBSSxHQUFlLEtBQUssRUFBSSxPQUVoQyxJQUFJLEVBQU0sTUFBUyxPQUFPLG9CQUUvQixJQUFLLEVBQUksRUFBRyxFQUFJLElBQU8sRUFDckIsRUFBTyxFQUFJLEdBQWUsS0FBSyxFQUFJLE9BR3JDLFlBQVcsVUFBVSxJQUFJLEtBQ3ZCLEVBQ0EsS0FBSyxTQUFTLEVBQU8sRUFBUSxHQUM3QixFQUlKLE9BQU8sSUFPVCxPQUFPLFVBQVUsS0FBTyxTQUFlLEVBQUssRUFBTyxFQUFLLEdBRXRELEdBQW1CLGdCQUFSLEdBQWtCLENBUzNCLEdBUnFCLGdCQUFWLElBQ1QsRUFBVyxFQUNYLEVBQVEsRUFDUixFQUFNLEtBQUssUUFDYSxnQkFBUixLQUNoQixFQUFXLEVBQ1gsRUFBTSxLQUFLLFFBRU0sSUFBZixFQUFJLE9BQWMsQ0FDcEIsR0FBSSxHQUFPLEVBQUksV0FBVyxFQUN0QixHQUFPLE1BQ1QsRUFBTSxHQUdWLE9BQWlCLEtBQWIsR0FBOEMsZ0JBQWIsR0FDbkMsS0FBTSxJQUFJLFdBQVUsNEJBRXRCLElBQXdCLGdCQUFiLEtBQTBCLE9BQU8sV0FBVyxHQUNyRCxLQUFNLElBQUksV0FBVSxxQkFBdUIsT0FFckIsZ0JBQVIsS0FDaEIsR0FBWSxJQUlkLElBQUksRUFBUSxHQUFLLEtBQUssT0FBUyxHQUFTLEtBQUssT0FBUyxFQUNwRCxLQUFNLElBQUksWUFBVyxxQkFHdkIsSUFBSSxHQUFPLEVBQ1QsTUFBTyxLQUdULE1BQWtCLEVBQ2xCLE1BQWMsS0FBUixFQUFvQixLQUFLLE9BQVMsSUFBUSxFQUUzQyxJQUFLLEVBQU0sRUFFaEIsSUFBSSxFQUNKLElBQW1CLGdCQUFSLEdBQ1QsSUFBSyxFQUFJLEVBQU8sRUFBSSxJQUFPLEVBQ3pCLEtBQUssR0FBSyxNQUVQLENBQ0wsR0FBSSxHQUFRLE9BQU8sU0FBUyxHQUN4QixFQUNBLFlBQVksR0FBSSxRQUFPLEVBQUssR0FBVSxZQUN0QyxFQUFNLEVBQU0sTUFDaEIsS0FBSyxFQUFJLEVBQUcsRUFBSSxFQUFNLElBQVMsRUFDN0IsS0FBSyxFQUFJLEdBQVMsRUFBTSxFQUFJLEdBSWhDLE1BQU8sTUFNVCxJQUFJLG1CQUFvQjs7Ozs7QUM3bUR4QixHQUFJLE1BQU8sUUFBUSx1QkFDZixNQUFRLEtBQUssT0FBUyxLQUFLLE1BQVMsVUFBVyxLQUFLLFdBQ3hELFFBQU8sUUFBVSxTQUFtQixHQUNsQyxNQUFPLE9BQU0sVUFBVSxNQUFNLE1BQU87OztBQ0h0QyxRQUFRLGlDQUNSLE9BQU8sUUFBVSxRQUFRLHVCQUF1QixPQUFPOzs7QUNEdkQsUUFBUSxtQ0FDUixRQUFRLGtDQUNSLFFBQVEsK0JBQ1IsUUFBUSwwQkFDUixRQUFRLGtDQUNSLFFBQVEsOEJBQ1IsT0FBTyxRQUFVLFFBQVEsb0JBQW9COzs7QUNON0MsUUFBUSw0QkFDUixRQUFRLHNDQUNSLFFBQVEsMkNBQ1IsUUFBUSx1Q0FDUixPQUFPLFFBQVUsUUFBUSx1QkFBdUI7OztBQ0poRCxRQUFRLHFDQUNSLFFBQVEsa0NBQ1IsT0FBTyxRQUFVLFFBQVEsMEJBQTBCLEVBQUU7OztBQ0ZyRCxPQUFPLFFBQVUsU0FBVSxHQUN6QixHQUFpQixrQkFBTixHQUFrQixLQUFNLFdBQVUsRUFBSyxzQkFDbEQsT0FBTzs7O0FDRlQsT0FBTyxRQUFVOzs7QUNBakIsT0FBTyxRQUFVLFNBQVUsRUFBSSxFQUFhLEVBQU0sR0FDaEQsS0FBTSxZQUFjLFNBQW9DLEtBQW5CLEdBQWdDLElBQWtCLEdBQ3JGLEtBQU0sV0FBVSxFQUFPLDBCQUN2QixPQUFPOzs7QUNIWCxHQUFJLFVBQVcsUUFBUSxlQUN2QixRQUFPLFFBQVUsU0FBVSxHQUN6QixJQUFLLFNBQVMsR0FBSyxLQUFNLFdBQVUsRUFBSyxxQkFDeEMsT0FBTzs7O0FDRFQsR0FBSSxXQUFZLFFBQVEsaUJBQ3BCLFNBQVcsUUFBUSxnQkFDbkIsZ0JBQWtCLFFBQVEsdUJBQzlCLFFBQU8sUUFBVSxTQUFVLEdBQ3pCLE1BQU8sVUFBVSxFQUFPLEVBQUksR0FDMUIsR0FHSSxHQUhBLEVBQUksVUFBVSxHQUNkLEVBQVMsU0FBUyxFQUFFLFFBQ3BCLEVBQVEsZ0JBQWdCLEVBQVcsRUFJdkMsSUFBSSxHQUFlLEdBQU0sR0FBSSxLQUFPLEVBQVMsR0FHM0MsSUFGQSxFQUFRLEVBQUUsT0FFRyxFQUFPLE9BQU8sTUFFdEIsTUFBTSxFQUFTLEVBQU8sSUFBUyxJQUFJLEdBQWUsSUFBUyxLQUM1RCxFQUFFLEtBQVcsRUFBSSxNQUFPLElBQWUsR0FBUyxDQUNwRCxRQUFRLElBQWdCOzs7QUNuQjlCLEdBQUksS0FBTSxRQUFRLFVBQ2QsSUFBTSxRQUFRLFVBQVUsZUFFeEIsSUFBa0QsYUFBNUMsSUFBSSxXQUFjLE1BQU8sZUFHL0IsT0FBUyxTQUFVLEVBQUksR0FDekIsSUFDRSxNQUFPLEdBQUcsR0FDVixNQUFPLEtBR1gsUUFBTyxRQUFVLFNBQVUsR0FDekIsR0FBSSxHQUFHLEVBQUcsQ0FDVixZQUFjLEtBQVAsRUFBbUIsWUFBcUIsT0FBUCxFQUFjLE9BRU4saUJBQXBDLEVBQUksT0FBTyxFQUFJLE9BQU8sR0FBSyxNQUFvQixFQUV2RCxJQUFNLElBQUksR0FFTSxXQUFmLEVBQUksSUFBSSxLQUFzQyxrQkFBWixHQUFFLE9BQXVCLFlBQWM7OztBQ3JCaEYsR0FBSSxhQUFjLFFBRWxCLFFBQU8sUUFBVSxTQUFVLEdBQ3pCLE1BQU8sVUFBUyxLQUFLLEdBQUksTUFBTSxHQUFJOzs7QUNIckMsR0FBSSxNQUFPLE9BQU8sU0FBWSxRQUFTLFNBQ3JCLGlCQUFQLE9BQWlCLElBQU07OztBQ0FsQyxHQUFJLFdBQVksUUFBUSxnQkFDeEIsUUFBTyxRQUFVLFNBQVUsRUFBSSxFQUFNLEdBRW5DLEdBREEsVUFBVSxPQUNHLEtBQVQsRUFBb0IsTUFBTyxFQUMvQixRQUFRLEdBQ04sSUFBSyxHQUFHLE1BQU8sVUFBVSxHQUN2QixNQUFPLEdBQUcsS0FBSyxFQUFNLEdBRXZCLEtBQUssR0FBRyxNQUFPLFVBQVUsRUFBRyxHQUMxQixNQUFPLEdBQUcsS0FBSyxFQUFNLEVBQUcsR0FFMUIsS0FBSyxHQUFHLE1BQU8sVUFBVSxFQUFHLEVBQUcsR0FDN0IsTUFBTyxHQUFHLEtBQUssRUFBTSxFQUFHLEVBQUcsSUFHL0IsTUFBTyxZQUNMLE1BQU8sR0FBRyxNQUFNLEVBQU07OztBQ2hCMUIsT0FBTyxRQUFVLFNBQVUsR0FDekIsT0FBVSxJQUFOLEVBQWlCLEtBQU0sV0FBVSx5QkFBMkIsRUFDaEUsT0FBTzs7O0FDRlQsT0FBTyxTQUFXLFFBQVEsWUFBWSxXQUNwQyxNQUErRSxJQUF4RSxPQUFPLGtCQUFtQixLQUFPLElBQUssV0FBYyxNQUFPLE1BQVE7OztBQ0Y1RSxHQUFJLFVBQVcsUUFBUSxnQkFDbkIsU0FBVyxRQUFRLGFBQWEsU0FFaEMsR0FBSyxTQUFTLFdBQWEsU0FBUyxTQUFTLGNBQ2pELFFBQU8sUUFBVSxTQUFVLEdBQ3pCLE1BQU8sSUFBSyxTQUFTLGNBQWM7OztBQ0pyQyxPQUFPLFFBQVUsZ0dBRWYsTUFBTTs7O0FDRlIsR0FBSSxTQUFVLFFBQVEsa0JBQ2xCLEtBQU8sUUFBUSxrQkFDZixJQUFNLFFBQVEsZ0JBQ2xCLFFBQU8sUUFBVSxTQUFVLEdBQ3pCLEdBQUksR0FBUyxRQUFRLEdBQ2pCLEVBQWEsS0FBSyxDQUN0QixJQUFJLEVBS0YsSUFKQSxHQUdJLEdBSEEsRUFBVSxFQUFXLEdBQ3JCLEVBQVMsSUFBSSxFQUNiLEVBQUksRUFFRCxFQUFRLE9BQVMsR0FBTyxFQUFPLEtBQUssRUFBSSxFQUFNLEVBQVEsT0FBTyxFQUFPLEtBQUssRUFDaEYsT0FBTzs7O0FDYlgsR0FBSSxRQUFTLFFBQVEsYUFDakIsS0FBTyxRQUFRLFdBQ2YsSUFBTSxRQUFRLFVBQ2QsS0FBTyxRQUFRLFdBQ2YsSUFBTSxRQUFRLFVBQ2QsVUFBWSxZQUVaLFFBQVUsU0FBVSxFQUFNLEVBQU0sR0FDbEMsR0FTSSxHQUFLLEVBQUssRUFUVixFQUFZLEVBQU8sUUFBUSxFQUMzQixFQUFZLEVBQU8sUUFBUSxFQUMzQixFQUFZLEVBQU8sUUFBUSxFQUMzQixFQUFXLEVBQU8sUUFBUSxFQUMxQixFQUFVLEVBQU8sUUFBUSxFQUN6QixFQUFVLEVBQU8sUUFBUSxFQUN6QixFQUFVLEVBQVksS0FBTyxLQUFLLEtBQVUsS0FBSyxPQUNqRCxFQUFXLEVBQVEsV0FDbkIsRUFBUyxFQUFZLE9BQVMsRUFBWSxPQUFPLElBQVMsT0FBTyxRQUFhLFVBRTlFLEtBQVcsRUFBUyxFQUN4QixLQUFLLElBQU8sSUFFVixHQUFPLEdBQWEsT0FBMEIsS0FBaEIsRUFBTyxLQUMxQixJQUFJLEVBQVMsS0FFeEIsRUFBTSxFQUFNLEVBQU8sR0FBTyxFQUFPLEdBRWpDLEVBQVEsR0FBTyxHQUFtQyxrQkFBZixHQUFPLEdBQXFCLEVBQU8sR0FFcEUsR0FBVyxFQUFNLElBQUksRUFBSyxRQUUxQixHQUFXLEVBQU8sSUFBUSxFQUFNLFNBQVcsR0FDM0MsR0FBSSxHQUFJLFNBQVUsRUFBRyxFQUFHLEdBQ3RCLEdBQUksZUFBZ0IsR0FBRyxDQUNyQixPQUFRLFVBQVUsUUFDaEIsSUFBSyxHQUFHLE1BQU8sSUFBSSxFQUNuQixLQUFLLEdBQUcsTUFBTyxJQUFJLEdBQUUsRUFDckIsS0FBSyxHQUFHLE1BQU8sSUFBSSxHQUFFLEVBQUcsR0FDeEIsTUFBTyxJQUFJLEdBQUUsRUFBRyxFQUFHLEdBQ3JCLE1BQU8sR0FBRSxNQUFNLEtBQU0sV0FHekIsT0FEQSxHQUFFLFdBQWEsRUFBRSxXQUNWLEdBRU4sR0FBTyxHQUEwQixrQkFBUCxHQUFvQixJQUFJLFNBQVMsS0FBTSxHQUFPLEVBRXZFLEtBQ0QsRUFBUSxVQUFZLEVBQVEsYUFBZSxHQUFPLEVBRS9DLEVBQU8sUUFBUSxHQUFLLElBQWEsRUFBUyxJQUFNLEtBQUssRUFBVSxFQUFLLEtBSzlFLFNBQVEsRUFBSSxFQUNaLFFBQVEsRUFBSSxFQUNaLFFBQVEsRUFBSSxFQUNaLFFBQVEsRUFBSSxFQUNaLFFBQVEsRUFBSSxHQUNaLFFBQVEsRUFBSSxHQUNaLFFBQVEsRUFBSSxHQUNaLFFBQVEsRUFBSSxJQUNaLE9BQU8sUUFBVTs7O0FDN0RqQixPQUFPLFFBQVUsU0FBVSxHQUN6QixJQUNFLFFBQVMsSUFDVCxNQUFPLEdBQ1AsT0FBTzs7O0FDSlgsR0FBSSxLQUFNLFFBQVEsVUFDZCxLQUFPLFFBQVEsZ0JBQ2YsWUFBYyxRQUFRLG9CQUN0QixTQUFXLFFBQVEsZ0JBQ25CLFNBQVcsUUFBUSxnQkFDbkIsVUFBWSxRQUFRLDhCQUNwQixTQUNBLFVBQ0EsUUFBVSxPQUFPLFFBQVUsU0FBVSxFQUFVLEVBQVMsRUFBSSxFQUFNLEdBQ3BFLEdBR0ksR0FBUSxFQUFNLEVBQVUsRUFIeEIsRUFBUyxFQUFXLFdBQWMsTUFBTyxJQUFjLFVBQVUsR0FDakUsRUFBSSxJQUFJLEVBQUksRUFBTSxFQUFVLEVBQUksR0FDaEMsRUFBUSxDQUVaLElBQXFCLGtCQUFWLEdBQXNCLEtBQU0sV0FBVSxFQUFXLG9CQUU1RCxJQUFJLFlBQVksSUFBUyxJQUFLLEVBQVMsU0FBUyxFQUFTLFFBQVMsRUFBUyxFQUFPLElBRWhGLElBREEsRUFBUyxFQUFVLEVBQUUsU0FBUyxFQUFPLEVBQVMsSUFBUSxHQUFJLEVBQUssSUFBTSxFQUFFLEVBQVMsT0FDakUsT0FBUyxJQUFXLE9BQVEsTUFBTyxPQUM3QyxLQUFLLEVBQVcsRUFBTyxLQUFLLEtBQWEsRUFBTyxFQUFTLFFBQVEsTUFFdEUsSUFEQSxFQUFTLEtBQUssRUFBVSxFQUFHLEVBQUssTUFBTyxNQUN4QixPQUFTLElBQVcsT0FBUSxNQUFPLEdBR3RELFNBQVEsTUFBUSxNQUNoQixRQUFRLE9BQVM7OztBQ3ZCakIsR0FBSSxRQUFTLE9BQU8sUUFBMkIsbUJBQVYsU0FBeUIsT0FBTyxNQUFRLEtBQ3pFLE9BQXdCLG1CQUFSLE9BQXVCLEtBQUssTUFBUSxLQUFPLEtBRTNELFNBQVMsZ0JBQ0ssaUJBQVAsT0FBaUIsSUFBTTs7O0FDTGxDLEdBQUksbUJBQW9CLGNBQ3hCLFFBQU8sUUFBVSxTQUFVLEVBQUksR0FDN0IsTUFBTyxnQkFBZSxLQUFLLEVBQUk7OztBQ0ZqQyxHQUFJLElBQUssUUFBUSxnQkFDYixXQUFhLFFBQVEsbUJBQ3pCLFFBQU8sUUFBVSxRQUFRLGtCQUFvQixTQUFVLEVBQVEsRUFBSyxHQUNsRSxNQUFPLElBQUcsRUFBRSxFQUFRLEVBQUssV0FBVyxFQUFHLEtBQ3JDLFNBQVUsRUFBUSxFQUFLLEdBRXpCLE1BREEsR0FBTyxHQUFPLEVBQ1A7OztBQ05ULEdBQUksVUFBVyxRQUFRLGFBQWEsUUFDcEMsUUFBTyxRQUFVLFVBQVksU0FBUzs7O0FDRHRDLE9BQU8sU0FBVyxRQUFRLG9CQUFzQixRQUFRLFlBQVksV0FDbEUsTUFBNEcsSUFBckcsT0FBTyxlQUFlLFFBQVEsaUJBQWlCLE9BQVEsS0FBTyxJQUFLLFdBQWMsTUFBTyxNQUFROzs7QUNBekcsT0FBTyxRQUFVLFNBQVUsRUFBSSxFQUFNLEdBQ25DLEdBQUksT0FBYyxLQUFULENBQ1QsUUFBUSxFQUFLLFFBQ1gsSUFBSyxHQUFHLE1BQU8sR0FBSyxJQUNBLEVBQUcsS0FBSyxFQUM1QixLQUFLLEdBQUcsTUFBTyxHQUFLLEVBQUcsRUFBSyxJQUNSLEVBQUcsS0FBSyxFQUFNLEVBQUssR0FDdkMsS0FBSyxHQUFHLE1BQU8sR0FBSyxFQUFHLEVBQUssR0FBSSxFQUFLLElBQ2pCLEVBQUcsS0FBSyxFQUFNLEVBQUssR0FBSSxFQUFLLEdBQ2hELEtBQUssR0FBRyxNQUFPLEdBQUssRUFBRyxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssSUFDMUIsRUFBRyxLQUFLLEVBQU0sRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLEdBQ3pELEtBQUssR0FBRyxNQUFPLEdBQUssRUFBRyxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssR0FBSSxFQUFLLElBQ25DLEVBQUcsS0FBSyxFQUFNLEVBQUssR0FBSSxFQUFLLEdBQUksRUFBSyxHQUFJLEVBQUssSUFDbEUsTUFBTyxHQUFHLE1BQU0sRUFBTTs7O0FDYjFCLEdBQUksS0FBTSxRQUFRLFNBRWxCLFFBQU8sUUFBVSxPQUFPLEtBQUsscUJBQXFCLEdBQUssT0FBUyxTQUFVLEdBQ3hFLE1BQWtCLFVBQVgsSUFBSSxHQUFrQixFQUFHLE1BQU0sSUFBTSxPQUFPOzs7QUNIckQsR0FBSSxXQUFZLFFBQVEsZ0JBQ3BCLFNBQVcsUUFBUSxVQUFVLFlBQzdCLFdBQWEsTUFBTSxTQUV2QixRQUFPLFFBQVUsU0FBVSxHQUN6QixXQUFjLEtBQVAsSUFBcUIsVUFBVSxRQUFVLEdBQU0sV0FBVyxZQUFjOzs7QUNMakYsR0FBSSxLQUFNLFFBQVEsU0FDbEIsUUFBTyxRQUFVLE1BQU0sU0FBVyxTQUFpQixHQUNqRCxNQUFtQixTQUFaLElBQUk7OztBQ0hiLE9BQU8sUUFBVSxTQUFVLEdBQ3pCLE1BQXFCLGdCQUFQLEdBQXlCLE9BQVAsRUFBNEIsa0JBQVA7OztBQ0F2RCxHQUFJLFVBQVcsUUFBUSxlQUN2QixRQUFPLFFBQVUsU0FBVSxFQUFVLEVBQUksRUFBTyxHQUM5QyxJQUNFLE1BQU8sR0FBVSxFQUFHLFNBQVMsR0FBTyxHQUFJLEVBQU0sSUFBTSxFQUFHLEdBRXZELE1BQU8sR0FDUCxHQUFJLEdBQU0sRUFBaUIsTUFFM0IsV0FEWSxLQUFSLEdBQW1CLFNBQVMsRUFBSSxLQUFLLElBQ25DOzs7QUNUVixZQUNBLElBQUksUUFBUyxRQUFRLG9CQUNqQixXQUFhLFFBQVEsb0JBQ3JCLGVBQWlCLFFBQVEsd0JBQ3pCLG9CQUdKLFNBQVEsV0FBVyxrQkFBbUIsUUFBUSxVQUFVLFlBQWEsV0FBYyxNQUFPLFFBRTFGLE9BQU8sUUFBVSxTQUFVLEVBQWEsRUFBTSxHQUM1QyxFQUFZLFVBQVksT0FBTyxtQkFBcUIsS0FBTSxXQUFXLEVBQUcsS0FDeEUsZUFBZSxFQUFhLEVBQU87OztBQ1hyQyxZQUNBLElBQUksU0FBVSxRQUFRLGNBQ2xCLFFBQVUsUUFBUSxhQUNsQixTQUFXLFFBQVEsZUFDbkIsS0FBTyxRQUFRLFdBQ2YsVUFBWSxRQUFRLGdCQUNwQixZQUFjLFFBQVEsa0JBQ3RCLGVBQWlCLFFBQVEsd0JBQ3pCLGVBQWlCLFFBQVEsaUJBQ3pCLFNBQVcsUUFBUSxVQUFVLFlBQzdCLFdBQWEsTUFBUSxXQUFhLFFBQ2xDLFlBQWMsYUFDZCxLQUFPLE9BQ1AsT0FBUyxTQUVULFdBQWEsV0FBYyxNQUFPLE1BRXRDLFFBQU8sUUFBVSxTQUFVLEVBQU0sRUFBTSxFQUFhLEVBQU0sRUFBUyxFQUFRLEdBQ3pFLFlBQVksRUFBYSxFQUFNLEVBQy9CLElBZUksR0FBUyxFQUFLLEVBZmQsRUFBWSxTQUFVLEdBQ3hCLElBQUssT0FBUyxJQUFRLEdBQU8sTUFBTyxHQUFNLEVBQzFDLFFBQVEsR0FDTixJQUFLLE1BQ0wsSUFBSyxRQUFRLE1BQU8sWUFBb0IsTUFBTyxJQUFJLEdBQVksS0FBTSxJQUNyRSxNQUFPLFlBQXFCLE1BQU8sSUFBSSxHQUFZLEtBQU0sS0FFekQsRUFBTSxFQUFPLFlBQ2IsRUFBYSxHQUFXLE9BQ3hCLEdBQWEsRUFDYixFQUFRLEVBQUssVUFDYixFQUFVLEVBQU0sV0FBYSxFQUFNLGNBQWdCLEdBQVcsRUFBTSxHQUNwRSxFQUFXLEdBQVcsRUFBVSxHQUNoQyxFQUFXLEVBQVcsRUFBd0IsRUFBVSxXQUFyQixNQUFrQyxHQUNyRSxFQUFxQixTQUFSLEVBQWtCLEVBQU0sU0FBVyxFQUFVLENBd0I5RCxJQXJCSSxJQUNGLEVBQW9CLGVBQWUsRUFBVyxLQUFLLEdBQUksUUFDN0IsT0FBTyxXQUFhLEVBQWtCLE9BRTlELGVBQWUsRUFBbUIsR0FBSyxHQUVsQyxTQUFpRCxrQkFBL0IsR0FBa0IsV0FBeUIsS0FBSyxFQUFtQixTQUFVLGFBSXBHLEdBQWMsR0FBVyxFQUFRLE9BQVMsU0FDNUMsR0FBYSxFQUNiLEVBQVcsV0FBb0IsTUFBTyxHQUFRLEtBQUssUUFHL0MsVUFBVyxJQUFZLFFBQVMsR0FBZSxFQUFNLFdBQ3pELEtBQUssRUFBTyxTQUFVLEdBR3hCLFVBQVUsR0FBUSxFQUNsQixVQUFVLEdBQU8sV0FDYixFQU1GLEdBTEEsR0FDRSxPQUFRLEVBQWEsRUFBVyxFQUFVLFFBQzFDLEtBQU0sRUFBUyxFQUFXLEVBQVUsTUFDcEMsUUFBUyxHQUVQLEVBQVEsSUFBSyxJQUFPLEdBQ2hCLElBQU8sSUFBUSxTQUFTLEVBQU8sRUFBSyxFQUFRLFFBQzdDLFNBQVEsUUFBUSxFQUFJLFFBQVEsR0FBSyxPQUFTLEdBQWEsRUFBTSxFQUV0RSxPQUFPOzs7QUNuRVQsR0FBSSxVQUFXLFFBQVEsVUFBVSxZQUM3QixjQUFlLENBRW5CLEtBQ0UsR0FBSSxRQUFTLEdBQUcsV0FDaEIsT0FBYyxPQUFJLFdBQWMsY0FBZSxHQUUvQyxNQUFNLEtBQUssTUFBTyxXQUFjLEtBQU0sS0FDdEMsTUFBTyxJQUVULE9BQU8sUUFBVSxTQUFVLEVBQU0sR0FDL0IsSUFBSyxJQUFnQixhQUFjLE9BQU8sQ0FDMUMsSUFBSSxJQUFPLENBQ1gsS0FDRSxHQUFJLElBQU8sR0FDUCxFQUFPLEVBQUksV0FDZixHQUFLLEtBQU8sV0FBYyxPQUFTLEtBQU0sR0FBTyxJQUNoRCxFQUFJLFVBQVksV0FBYyxNQUFPLElBQ3JDLEVBQUssR0FDTCxNQUFPLElBQ1QsTUFBTzs7O0FDcEJULE9BQU8sUUFBVSxTQUFVLEVBQU0sR0FDL0IsT0FBUyxNQUFPLEVBQU8sT0FBUTs7O0FDRGpDLE9BQU87OztBQ0FQLE9BQU8sU0FBVTs7O0FDQWpCLEdBQUksTUFBTyxRQUFRLFVBQVUsUUFDekIsU0FBVyxRQUFRLGdCQUNuQixJQUFNLFFBQVEsVUFDZCxRQUFVLFFBQVEsZ0JBQWdCLEVBQ2xDLEdBQUssRUFDTCxhQUFlLE9BQU8sY0FBZ0IsV0FDeEMsT0FBTyxHQUVMLFFBQVUsUUFBUSxZQUFZLFdBQ2hDLE1BQU8sY0FBYSxPQUFPLHlCQUV6QixRQUFVLFNBQVUsR0FDdEIsUUFBUSxFQUFJLE1BQVEsT0FDbEIsRUFBRyxPQUFRLEdBQ1gsU0FHQSxRQUFVLFNBQVUsRUFBSSxHQUUxQixJQUFLLFNBQVMsR0FBSyxNQUFvQixnQkFBTixHQUFpQixHQUFtQixnQkFBTixHQUFpQixJQUFNLEtBQU8sQ0FDN0YsS0FBSyxJQUFJLEVBQUksTUFBTyxDQUVsQixJQUFLLGFBQWEsR0FBSyxNQUFPLEdBRTlCLEtBQUssRUFBUSxNQUFPLEdBRXBCLFNBQVEsR0FFUixNQUFPLEdBQUcsTUFBTSxHQUVoQixRQUFVLFNBQVUsRUFBSSxHQUMxQixJQUFLLElBQUksRUFBSSxNQUFPLENBRWxCLElBQUssYUFBYSxHQUFLLE9BQU8sQ0FFOUIsS0FBSyxFQUFRLE9BQU8sQ0FFcEIsU0FBUSxHQUVSLE1BQU8sR0FBRyxNQUFNLEdBR2hCLFNBQVcsU0FBVSxHQUV2QixNQURJLFNBQVUsS0FBSyxNQUFRLGFBQWEsS0FBUSxJQUFJLEVBQUksT0FBTyxRQUFRLEdBQ2hFLEdBRUwsS0FBTyxPQUFPLFNBQ2hCLElBQUssS0FDTCxNQUFNLEVBQ04sUUFBUyxRQUNULFFBQVMsUUFDVCxTQUFVOzs7QUNuRFosR0FBSSxRQUFTLFFBQVEsYUFDakIsVUFBWSxRQUFRLFdBQVcsSUFDL0IsU0FBVyxPQUFPLGtCQUFvQixPQUFPLHVCQUM3QyxRQUFVLE9BQU8sUUFDakIsUUFBVSxPQUFPLFFBQ2pCLE9BQXVDLFdBQTlCLFFBQVEsVUFBVSxRQUUvQixRQUFPLFFBQVUsV0FDZixHQUFJLEdBQU0sRUFBTSxFQUVaLEVBQVEsV0FDVixHQUFJLEdBQVEsQ0FFWixLQURJLFNBQVcsRUFBUyxRQUFRLFNBQVMsRUFBTyxPQUN6QyxHQUFNLENBQ1gsRUFBSyxFQUFLLEdBQ1YsRUFBTyxFQUFLLElBQ1osS0FDRSxJQUNBLE1BQU8sR0FHUCxLQUZJLEdBQU0sSUFDTCxNQUFPLEdBQ04sR0FFUixNQUFPLEdBQ0wsR0FBUSxFQUFPLFFBSXJCLElBQUksT0FDRixFQUFTLFdBQ1AsUUFBUSxTQUFTLFFBR2QsS0FBSSxVQUFjLE9BQU8sV0FBYSxPQUFPLFVBQVUsV0FRdkQsR0FBSSxTQUFXLFFBQVEsUUFBUyxDQUVyQyxHQUFJLEdBQVUsUUFBUSxZQUFRLEdBQzlCLEdBQVMsV0FDUCxFQUFRLEtBQUssUUFTZixHQUFTLFdBRVAsVUFBVSxLQUFLLE9BQVEsUUF2QmdELENBQ3pFLEdBQUksSUFBUyxFQUNULEVBQU8sU0FBUyxlQUFlLEdBQ25DLElBQUksVUFBUyxHQUFPLFFBQVEsR0FBUSxlQUFlLElBQ25ELEVBQVMsV0FDUCxFQUFLLEtBQU8sR0FBVSxHQXNCMUIsTUFBTyxVQUFVLEdBQ2YsR0FBSSxJQUFTLEdBQUksRUFBSSxTQUFNLEdBQ3ZCLEtBQU0sRUFBSyxLQUFPLEdBQ2pCLElBQ0gsRUFBTyxFQUNQLEtBQ0EsRUFBTzs7O0FDbEViLFlBSUEsU0FBUyxtQkFBa0IsR0FDekIsR0FBSSxHQUFTLENBQ2IsTUFBSyxRQUFVLEdBQUksR0FBRSxTQUFVLEVBQVcsR0FDeEMsT0FBZ0IsS0FBWixPQUFvQyxLQUFYLEVBQXNCLEtBQU0sV0FBVSwwQkFDbkUsR0FBVSxFQUNWLEVBQVMsSUFFWCxLQUFLLFFBQVUsVUFBVSxHQUN6QixLQUFLLE9BQVMsVUFBVSxHQVYxQixHQUFJLFdBQVksUUFBUSxnQkFheEIsUUFBTyxRQUFRLEVBQUksU0FBVSxHQUMzQixNQUFPLElBQUksbUJBQWtCOzs7QUNmL0IsR0FBSSxVQUFXLFFBQVEsZ0JBQ25CLElBQU0sUUFBUSxpQkFDZCxZQUFjLFFBQVEsb0JBQ3RCLFNBQVcsUUFBUSxpQkFBaUIsWUFDcEMsTUFBUSxhQUNSLFVBQVksWUFHWixXQUFhLFdBRWYsR0FJSSxHQUpBLEVBQVMsUUFBUSxpQkFBaUIsVUFDbEMsRUFBSSxZQUFZLE1BY3BCLEtBVkEsRUFBTyxNQUFNLFFBQVUsT0FDdkIsUUFBUSxXQUFXLFlBQVksR0FDL0IsRUFBTyxJQUFNLGNBR2IsRUFBaUIsRUFBTyxjQUFjLFNBQ3RDLEVBQWUsT0FDZixFQUFlLE1BQU0sdUNBQ3JCLEVBQWUsUUFDZixXQUFhLEVBQWUsRUFDckIsV0FBWSxZQUFXLFdBQVcsWUFBWSxHQUNyRCxPQUFPLGNBR1QsUUFBTyxRQUFVLE9BQU8sUUFBVSxTQUFnQixFQUFHLEdBQ25ELEdBQUksRUFRSixPQVBVLFFBQU4sR0FDRixNQUFNLFdBQWEsU0FBUyxHQUM1QixFQUFTLEdBQUksT0FDYixNQUFNLFdBQWEsS0FFbkIsRUFBTyxVQUFZLEdBQ2QsRUFBUyxpQkFDTSxLQUFmLEVBQTJCLEVBQVMsSUFBSSxFQUFROzs7QUN2Q3pELEdBQUksVUFBVyxRQUFRLGdCQUNuQixlQUFpQixRQUFRLHFCQUN6QixZQUFjLFFBQVEsbUJBQ3RCLEdBQUssT0FBTyxjQUVoQixTQUFRLEVBQUksUUFBUSxrQkFBb0IsT0FBTyxlQUFpQixTQUF3QixFQUFHLEVBQUcsR0FJNUYsR0FIQSxTQUFTLEdBQ1QsRUFBSSxZQUFZLEdBQUcsR0FDbkIsU0FBUyxHQUNMLGVBQWdCLElBQ2xCLE1BQU8sSUFBRyxFQUFHLEVBQUcsR0FDaEIsTUFBTyxJQUNULEdBQUksT0FBUyxJQUFjLE9BQVMsR0FBWSxLQUFNLFdBQVUsMkJBRWhFLE9BREksU0FBVyxLQUFZLEVBQUUsR0FBSyxFQUFXLE9BQ3RDOzs7QUNkVCxHQUFJLElBQUssUUFBUSxnQkFDYixTQUFXLFFBQVEsZ0JBQ25CLFFBQVUsUUFBUSxpQkFFdEIsUUFBTyxRQUFVLFFBQVEsa0JBQW9CLE9BQU8saUJBQW1CLFNBQTBCLEVBQUcsR0FDbEcsU0FBUyxFQUtULEtBSkEsR0FHSSxHQUhBLEVBQU8sUUFBUSxHQUNmLEVBQVMsRUFBSyxPQUNkLEVBQUksRUFFRCxFQUFTLEdBQUcsR0FBRyxFQUFFLEVBQUcsRUFBSSxFQUFLLEtBQU0sRUFBVyxHQUNyRCxPQUFPOzs7QUNYVCxHQUFJLEtBQU0sUUFBUSxpQkFDZCxXQUFhLFFBQVEsb0JBQ3JCLFVBQVksUUFBUSxpQkFDcEIsWUFBYyxRQUFRLG1CQUN0QixJQUFNLFFBQVEsVUFDZCxlQUFpQixRQUFRLHFCQUN6QixLQUFPLE9BQU8sd0JBRWxCLFNBQVEsRUFBSSxRQUFRLGtCQUFvQixLQUFPLFNBQWtDLEVBQUcsR0FHbEYsR0FGQSxFQUFJLFVBQVUsR0FDZCxFQUFJLFlBQVksR0FBRyxHQUNmLGVBQWdCLElBQ2xCLE1BQU8sTUFBSyxFQUFHLEdBQ2YsTUFBTyxJQUNULEdBQUksSUFBSSxFQUFHLEdBQUksTUFBTyxhQUFZLElBQUksRUFBRSxLQUFLLEVBQUcsR0FBSSxFQUFFOzs7QUNieEQsR0FBSSxXQUFZLFFBQVEsaUJBQ3BCLEtBQU8sUUFBUSxrQkFBa0IsRUFDakMsWUFBYyxTQUVkLFlBQStCLGdCQUFWLFNBQXNCLFFBQVUsT0FBTyxvQkFDNUQsT0FBTyxvQkFBb0IsV0FFM0IsZUFBaUIsU0FBVSxHQUM3QixJQUNFLE1BQU8sTUFBSyxHQUNaLE1BQU8sR0FDUCxNQUFPLGFBQVksU0FJdkIsUUFBTyxRQUFRLEVBQUksU0FBNkIsR0FDOUMsTUFBTyxjQUFvQyxtQkFBckIsU0FBUyxLQUFLLEdBQTJCLGVBQWUsR0FBTSxLQUFLLFVBQVU7OztBQ2hCckcsR0FBSSxPQUFRLFFBQVEsMkJBQ2hCLFdBQWEsUUFBUSxvQkFBb0IsT0FBTyxTQUFVLFlBRTlELFNBQVEsRUFBSSxPQUFPLHFCQUF1QixTQUE2QixHQUNyRSxNQUFPLE9BQU0sRUFBRzs7O0FDTGxCLFFBQVEsRUFBSSxPQUFPOzs7QUNDbkIsR0FBSSxLQUFNLFFBQVEsVUFDZCxTQUFXLFFBQVEsZ0JBQ25CLFNBQVcsUUFBUSxpQkFBaUIsWUFDcEMsWUFBYyxPQUFPLFNBRXpCLFFBQU8sUUFBVSxPQUFPLGdCQUFrQixTQUFVLEdBRWxELE1BREEsR0FBSSxTQUFTLEdBQ1QsSUFBSSxFQUFHLFVBQWtCLEVBQUUsVUFDSCxrQkFBakIsR0FBRSxhQUE2QixZQUFhLEdBQUUsWUFDaEQsRUFBRSxZQUFZLFVBQ2QsWUFBYSxRQUFTLFlBQWM7OztBQ1gvQyxHQUFJLEtBQU0sUUFBUSxVQUNkLFVBQVksUUFBUSxpQkFDcEIsYUFBZSxRQUFRLHNCQUFxQixHQUM1QyxTQUFXLFFBQVEsaUJBQWlCLFdBRXhDLFFBQU8sUUFBVSxTQUFVLEVBQVEsR0FDakMsR0FHSSxHQUhBLEVBQUksVUFBVSxHQUNkLEVBQUksRUFDSixJQUVKLEtBQUssSUFBTyxHQUFPLEdBQU8sVUFBVSxJQUFJLEVBQUcsSUFBUSxFQUFPLEtBQUssRUFFL0QsTUFBTyxFQUFNLE9BQVMsR0FBTyxJQUFJLEVBQUcsRUFBTSxFQUFNLFNBQzdDLGFBQWEsRUFBUSxJQUFRLEVBQU8sS0FBSyxHQUU1QyxPQUFPOzs7QUNkVCxHQUFJLE9BQVEsUUFBUSwyQkFDaEIsWUFBYyxRQUFRLG1CQUUxQixRQUFPLFFBQVUsT0FBTyxNQUFRLFNBQWMsR0FDNUMsTUFBTyxPQUFNLEVBQUc7OztBQ0xsQixRQUFRLEtBQU87OztBQ0NmLEdBQUksU0FBVSxRQUFRLGFBQ2xCLEtBQU8sUUFBUSxXQUNmLE1BQVEsUUFBUSxXQUNwQixRQUFPLFFBQVUsU0FBVSxFQUFLLEdBQzlCLEdBQUksSUFBTSxLQUFLLFlBQWMsSUFBUSxPQUFPLEdBQ3hDLElBQ0osR0FBSSxHQUFPLEVBQUssR0FDaEIsUUFBUSxRQUFRLEVBQUksUUFBUSxFQUFJLE1BQU0sV0FBYyxFQUFHLEtBQVEsU0FBVTs7O0FDUjNFLE9BQU8sUUFBVSxTQUFVLEdBQ3pCLElBQ0UsT0FBUyxHQUFHLEVBQU8sRUFBRyxLQUN0QixNQUFPLEdBQ1AsT0FBUyxHQUFHLEVBQU0sRUFBRzs7O0FDSnpCLEdBQUksVUFBVyxRQUFRLGdCQUNuQixTQUFXLFFBQVEsZ0JBQ25CLHFCQUF1QixRQUFRLDRCQUVuQyxRQUFPLFFBQVUsU0FBVSxFQUFHLEdBRTVCLEdBREEsU0FBUyxHQUNMLFNBQVMsSUFBTSxFQUFFLGNBQWdCLEVBQUcsTUFBTyxFQUMvQyxJQUFJLEdBQW9CLHFCQUFxQixFQUFFLEVBRy9DLFFBREEsRUFEYyxFQUFrQixTQUN4QixHQUNELEVBQWtCOzs7QUNWM0IsT0FBTyxRQUFVLFNBQVUsRUFBUSxHQUNqQyxPQUNFLGFBQXVCLEVBQVQsR0FDZCxlQUF5QixFQUFULEdBQ2hCLFdBQXFCLEVBQVQsR0FDWixNQUFPOzs7QUNMWCxHQUFJLE1BQU8sUUFBUSxVQUNuQixRQUFPLFFBQVUsU0FBVSxFQUFRLEVBQUssR0FDdEMsSUFBSyxHQUFJLEtBQU8sR0FDVixHQUFRLEVBQU8sR0FBTSxFQUFPLEdBQU8sRUFBSSxHQUN0QyxLQUFLLEVBQVEsRUFBSyxFQUFJLEdBQzNCLE9BQU87OztBQ0xYLE9BQU8sUUFBVSxRQUFROzs7QUNBekIsWUFDQSxJQUFJLFFBQVMsUUFBUSxhQUNqQixLQUFPLFFBQVEsV0FDZixHQUFLLFFBQVEsZ0JBQ2IsWUFBYyxRQUFRLGtCQUN0QixRQUFVLFFBQVEsVUFBVSxVQUVoQyxRQUFPLFFBQVUsU0FBVSxHQUN6QixHQUFJLEdBQXdCLGtCQUFiLE1BQUssR0FBcUIsS0FBSyxHQUFPLE9BQU8sRUFDeEQsY0FBZSxJQUFNLEVBQUUsVUFBVSxHQUFHLEVBQUUsRUFBRyxTQUMzQyxjQUFjLEVBQ2QsSUFBSyxXQUFjLE1BQU87OztBQ1g5QixHQUFJLEtBQU0sUUFBUSxnQkFBZ0IsRUFDOUIsSUFBTSxRQUFRLFVBQ2QsSUFBTSxRQUFRLFVBQVUsY0FFNUIsUUFBTyxRQUFVLFNBQVUsRUFBSSxFQUFLLEdBQzlCLElBQU8sSUFBSSxFQUFLLEVBQU8sRUFBSyxFQUFHLFVBQVcsTUFBTSxJQUFJLEVBQUksS0FBTyxjQUFjLEVBQU0sTUFBTzs7O0FDTGhHLEdBQUksUUFBUyxRQUFRLGFBQWEsUUFDOUIsSUFBTSxRQUFRLFNBQ2xCLFFBQU8sUUFBVSxTQUFVLEdBQ3pCLE1BQU8sUUFBTyxLQUFTLE9BQU8sR0FBTyxJQUFJOzs7QUNIM0MsR0FBSSxNQUFPLFFBQVEsV0FDZixPQUFTLFFBQVEsYUFDakIsT0FBUyxxQkFDVCxNQUFRLE9BQU8sVUFBWSxPQUFPLGFBRXJDLE9BQU8sUUFBVSxTQUFVLEVBQUssR0FDL0IsTUFBTyxPQUFNLEtBQVMsTUFBTSxPQUFpQixLQUFWLEVBQXNCLFFBQ3hELGVBQWdCLE1BQ2pCLFFBQVMsS0FBSyxRQUNkLEtBQU0sUUFBUSxjQUFnQixPQUFTLFNBQ3ZDLFVBQVc7OztBQ1RiLEdBQUksVUFBVyxRQUFRLGdCQUNuQixVQUFZLFFBQVEsaUJBQ3BCLFFBQVUsUUFBUSxVQUFVLFVBQ2hDLFFBQU8sUUFBVSxTQUFVLEVBQUcsR0FDNUIsR0FDSSxHQURBLEVBQUksU0FBUyxHQUFHLFdBRXBCLFlBQWEsS0FBTixPQUFpRCxLQUE3QixFQUFJLFNBQVMsR0FBRyxVQUF5QixFQUFJLFVBQVU7OztBQ1BwRixHQUFJLFdBQVksUUFBUSxpQkFDcEIsUUFBVSxRQUFRLGFBR3RCLFFBQU8sUUFBVSxTQUFVLEdBQ3pCLE1BQU8sVUFBVSxFQUFNLEdBQ3JCLEdBR0ksR0FBRyxFQUhILEVBQUksT0FBTyxRQUFRLElBQ25CLEVBQUksVUFBVSxHQUNkLEVBQUksRUFBRSxNQUVWLE9BQUksR0FBSSxHQUFLLEdBQUssRUFBVSxFQUFZLE9BQUssSUFDN0MsRUFBSSxFQUFFLFdBQVcsR0FDVixFQUFJLE9BQVUsRUFBSSxPQUFVLEVBQUksSUFBTSxJQUFNLEVBQUksRUFBRSxXQUFXLEVBQUksSUFBTSxPQUFVLEVBQUksTUFDeEYsRUFBWSxFQUFFLE9BQU8sR0FBSyxFQUMxQixFQUFZLEVBQUUsTUFBTSxFQUFHLEVBQUksR0FBMkIsRUFBSSxPQUF6QixFQUFJLE9BQVUsSUFBcUI7OztBQ2Q1RSxHQUFJLEtBQU0sUUFBUSxVQUNkLE9BQVMsUUFBUSxhQUNqQixLQUFPLFFBQVEsV0FDZixJQUFNLFFBQVEsaUJBQ2QsT0FBUyxRQUFRLGFBQ2pCLFFBQVUsT0FBTyxRQUNqQixRQUFVLE9BQU8sYUFDakIsVUFBWSxPQUFPLGVBQ25CLGVBQWlCLE9BQU8sZUFDeEIsU0FBVyxPQUFPLFNBQ2xCLFFBQVUsRUFDVixTQUNBLG1CQUFxQixxQkFDckIsTUFBTyxRQUFTLEtBQ2hCLElBQU0sV0FDUixHQUFJLElBQU0sSUFFVixJQUFJLE1BQU0sZUFBZSxHQUFLLENBQzVCLEdBQUksR0FBSyxNQUFNLFNBQ1IsT0FBTSxHQUNiLE1BR0EsU0FBVyxTQUFVLEdBQ3ZCLElBQUksS0FBSyxFQUFNLE1BR1osVUFBWSxZQUNmLFFBQVUsU0FBc0IsR0FHOUIsSUFGQSxHQUFJLE1BQ0EsRUFBSSxFQUNELFVBQVUsT0FBUyxHQUFHLEVBQUssS0FBSyxVQUFVLEtBTWpELE9BTEEsU0FBUSxTQUFXLFdBRWpCLE9BQW9CLGtCQUFOLEdBQW1CLEVBQUssU0FBUyxHQUFLLElBRXRELE1BQU0sU0FDQyxTQUVULFVBQVksU0FBd0IsU0FDM0IsT0FBTSxJQUdtQixXQUE5QixRQUFRLFVBQVUsU0FDcEIsTUFBUSxTQUFVLEdBQ2hCLFFBQVEsU0FBUyxJQUFJLElBQUssRUFBSSxLQUd2QixVQUFZLFNBQVMsSUFDOUIsTUFBUSxTQUFVLEdBQ2hCLFNBQVMsSUFBSSxJQUFJLElBQUssRUFBSSxLQUduQixnQkFDVCxRQUFVLEdBQUksZ0JBQ2QsS0FBTyxRQUFRLE1BQ2YsUUFBUSxNQUFNLFVBQVksU0FDMUIsTUFBUSxJQUFJLEtBQUssWUFBYSxLQUFNLElBRzNCLE9BQU8sa0JBQTBDLGtCQUFmLGVBQThCLE9BQU8sZUFDaEYsTUFBUSxTQUFVLEdBQ2hCLE9BQU8sWUFBWSxFQUFLLEdBQUksTUFFOUIsT0FBTyxpQkFBaUIsVUFBVyxVQUFVLElBRzdDLE1BRFMscUJBQXNCLEtBQUksVUFDM0IsU0FBVSxHQUNoQixLQUFLLFlBQVksSUFBSSxXQUFXLG9CQUFzQixXQUNwRCxLQUFLLFlBQVksTUFDakIsSUFBSSxLQUFLLEtBS0wsU0FBVSxHQUNoQixXQUFXLElBQUksSUFBSyxFQUFJLEdBQUksS0FJbEMsT0FBTyxTQUNMLElBQUssUUFDTCxNQUFPOzs7QUNsRlQsR0FBSSxXQUFZLFFBQVEsaUJBQ3BCLElBQU0sS0FBSyxJQUNYLElBQU0sS0FBSyxHQUNmLFFBQU8sUUFBVSxTQUFVLEVBQU8sR0FFaEMsTUFEQSxHQUFRLFVBQVUsR0FDWCxFQUFRLEVBQUksSUFBSSxFQUFRLEVBQVEsR0FBSyxJQUFJLEVBQU87OztBQ0p6RCxHQUFJLE1BQU8sS0FBSyxLQUNaLE1BQVEsS0FBSyxLQUNqQixRQUFPLFFBQVUsU0FBVSxHQUN6QixNQUFPLE9BQU0sR0FBTSxHQUFNLEdBQUssRUFBSyxFQUFJLE1BQVEsTUFBTTs7O0FDSHZELEdBQUksU0FBVSxRQUFRLGNBQ2xCLFFBQVUsUUFBUSxhQUN0QixRQUFPLFFBQVUsU0FBVSxHQUN6QixNQUFPLFNBQVEsUUFBUTs7O0FDSHpCLEdBQUksV0FBWSxRQUFRLGlCQUNwQixJQUFNLEtBQUssR0FDZixRQUFPLFFBQVUsU0FBVSxHQUN6QixNQUFPLEdBQUssRUFBSSxJQUFJLFVBQVUsR0FBSyxrQkFBb0I7OztBQ0h6RCxHQUFJLFNBQVUsUUFBUSxhQUN0QixRQUFPLFFBQVUsU0FBVSxHQUN6QixNQUFPLFFBQU8sUUFBUTs7O0FDRnhCLEdBQUksVUFBVyxRQUFRLGVBR3ZCLFFBQU8sUUFBVSxTQUFVLEVBQUksR0FDN0IsSUFBSyxTQUFTLEdBQUssTUFBTyxFQUMxQixJQUFJLEdBQUksQ0FDUixJQUFJLEdBQWtDLG1CQUFyQixFQUFLLEVBQUcsWUFBNEIsU0FBUyxFQUFNLEVBQUcsS0FBSyxJQUFNLE1BQU8sRUFDekYsSUFBZ0MsbUJBQXBCLEVBQUssRUFBRyxXQUEyQixTQUFTLEVBQU0sRUFBRyxLQUFLLElBQU0sTUFBTyxFQUNuRixLQUFLLEdBQWtDLG1CQUFyQixFQUFLLEVBQUcsWUFBNEIsU0FBUyxFQUFNLEVBQUcsS0FBSyxJQUFNLE1BQU8sRUFDMUYsTUFBTSxXQUFVOzs7QUNWbEIsR0FBSSxJQUFLLEVBQ0wsR0FBSyxLQUFLLFFBQ2QsUUFBTyxRQUFVLFNBQVUsR0FDekIsTUFBTyxVQUFVLFdBQWUsS0FBUixFQUFvQixHQUFLLEVBQUssUUFBUyxHQUFLLElBQUksU0FBUzs7O0FDSG5GLEdBQUksUUFBUyxRQUFRLGFBQ2pCLFVBQVksT0FBTyxTQUV2QixRQUFPLFFBQVUsV0FBYSxVQUFVLFdBQWE7OztBQ0hyRCxHQUFJLFFBQVMsUUFBUSxhQUNqQixLQUFPLFFBQVEsV0FDZixRQUFVLFFBQVEsY0FDbEIsT0FBUyxRQUFRLGNBQ2pCLGVBQWlCLFFBQVEsZ0JBQWdCLENBQzdDLFFBQU8sUUFBVSxTQUFVLEdBQ3pCLEdBQUksR0FBVSxLQUFLLFNBQVcsS0FBSyxPQUFTLFdBQWUsT0FBTyxXQUM1QyxNQUFsQixFQUFLLE9BQU8sSUFBZSxJQUFRLElBQVUsZUFBZSxFQUFTLEdBQVEsTUFBTyxPQUFPLEVBQUU7OztBQ1BuRyxRQUFRLEVBQUksUUFBUTs7O0FDQXBCLEdBQUksT0FBUSxRQUFRLGFBQWEsT0FDN0IsSUFBTSxRQUFRLFVBQ2QsT0FBUyxRQUFRLGFBQWEsT0FDOUIsV0FBOEIsa0JBQVYsUUFFcEIsU0FBVyxPQUFPLFFBQVUsU0FBVSxHQUN4QyxNQUFPLE9BQU0sS0FBVSxNQUFNLEdBQzNCLFlBQWMsT0FBTyxLQUFVLFdBQWEsT0FBUyxLQUFLLFVBQVksSUFHMUUsVUFBUyxNQUFROzs7QUNWakIsR0FBSSxTQUFVLFFBQVEsY0FDbEIsU0FBVyxRQUFRLFVBQVUsWUFDN0IsVUFBWSxRQUFRLGVBQ3hCLFFBQU8sUUFBVSxRQUFRLFdBQVcsa0JBQW9CLFNBQVUsR0FDaEUsT0FBVSxJQUFOLEVBQWlCLE1BQU8sR0FBRyxXQUMxQixFQUFHLGVBQ0gsVUFBVSxRQUFROzs7QUNOekIsWUFDQSxJQUFJLGtCQUFtQixRQUFRLHlCQUMzQixLQUFPLFFBQVEsZ0JBQ2YsVUFBWSxRQUFRLGdCQUNwQixVQUFZLFFBQVEsZ0JBTXhCLFFBQU8sUUFBVSxRQUFRLGtCQUFrQixNQUFPLFFBQVMsU0FBVSxFQUFVLEdBQzdFLEtBQUssR0FBSyxVQUFVLEdBQ3BCLEtBQUssR0FBSyxFQUNWLEtBQUssR0FBSyxHQUVULFdBQ0QsR0FBSSxHQUFJLEtBQUssR0FDVCxFQUFPLEtBQUssR0FDWixFQUFRLEtBQUssSUFDakIsUUFBSyxHQUFLLEdBQVMsRUFBRSxRQUNuQixLQUFLLE9BQUssR0FDSCxLQUFLLElBRUYsUUFBUixFQUF1QixLQUFLLEVBQUcsR0FDdkIsVUFBUixFQUF5QixLQUFLLEVBQUcsRUFBRSxJQUNoQyxLQUFLLEdBQUksRUFBTyxFQUFFLE1BQ3hCLFVBR0gsVUFBVSxVQUFZLFVBQVUsTUFFaEMsaUJBQWlCLFFBQ2pCLGlCQUFpQixVQUNqQixpQkFBaUI7OztBQ2hDakIsR0FBSSxVQUFXLFFBQVEsZ0JBQ25CLE1BQVEsUUFBUSxpQkFFcEIsU0FBUSxpQkFBaUIsT0FBUSxXQUMvQixNQUFPLFVBQWMsR0FDbkIsTUFBTyxPQUFNLFNBQVM7OztBQ04xQjtBQUNBO0FBQ0EsQUNGQSxZQUNBLElBQUksU0FBVSxRQUFRLGNBQ2xCLE9BQVMsUUFBUSxhQUNqQixJQUFNLFFBQVEsVUFDZCxRQUFVLFFBQVEsY0FDbEIsUUFBVSxRQUFRLGFBQ2xCLFNBQVcsUUFBUSxnQkFDbkIsVUFBWSxRQUFRLGlCQUNwQixXQUFhLFFBQVEsa0JBQ3JCLE1BQVEsUUFBUSxhQUNoQixtQkFBcUIsUUFBUSwwQkFDN0IsS0FBTyxRQUFRLFdBQVcsSUFDMUIsVUFBWSxRQUFRLGtCQUNwQiwyQkFBNkIsUUFBUSw2QkFDckMsUUFBVSxRQUFRLGNBQ2xCLFVBQVksUUFBUSxpQkFDcEIsZUFBaUIsUUFBUSxzQkFDekIsUUFBVSxVQUNWLFVBQVksT0FBTyxVQUNuQixRQUFVLE9BQU8sUUFDakIsU0FBVyxTQUFXLFFBQVEsU0FDOUIsR0FBSyxVQUFZLFNBQVMsSUFBTSxHQUNoQyxTQUFXLE9BQU8sU0FDbEIsT0FBNkIsV0FBcEIsUUFBUSxTQUNqQixNQUFRLGFBQ1IsU0FBVSw0QkFBNkIscUJBQXNCLFFBQzdELHFCQUF1Qiw0QkFBOEIsMkJBQTJCLEVBRWhGLGFBQWUsV0FDakIsSUFFRSxHQUFJLEdBQVUsU0FBUyxRQUFRLEdBQzNCLEdBQWUsRUFBUSxnQkFBa0IsUUFBUSxVQUFVLFlBQWMsU0FBVSxHQUNyRixFQUFLLE1BQU8sT0FHZCxRQUFRLFFBQTBDLGtCQUF6Qix5QkFDcEIsRUFBUSxLQUFLLGdCQUFrQixJQUlULElBQXRCLEdBQUcsUUFBUSxTQUN5QixJQUFwQyxVQUFVLFFBQVEsYUFDdkIsTUFBTyxRQUlQLFdBQWEsU0FBVSxHQUN6QixHQUFJLEVBQ0osVUFBTyxTQUFTLElBQWtDLG1CQUFuQixFQUFPLEVBQUcsUUFBc0IsR0FFN0QsT0FBUyxTQUFVLEVBQVMsR0FDOUIsSUFBSSxFQUFRLEdBQVosQ0FDQSxFQUFRLElBQUssQ0FDYixJQUFJLEdBQVEsRUFBUSxFQUNwQixXQUFVLFdBb0NSLElBbkNBLEdBQUksR0FBUSxFQUFRLEdBQ2hCLEVBQW1CLEdBQWQsRUFBUSxHQUNiLEVBQUksRUFpQ0QsRUFBTSxPQUFTLElBaENaLFNBQVUsR0FDbEIsR0FJSSxHQUFRLEVBQU0sRUFKZCxFQUFVLEVBQUssRUFBUyxHQUFLLEVBQVMsS0FDdEMsRUFBVSxFQUFTLFFBQ25CLEVBQVMsRUFBUyxPQUNsQixFQUFTLEVBQVMsTUFFdEIsS0FDTSxHQUNHLElBQ2UsR0FBZCxFQUFRLElBQVMsa0JBQWtCLEdBQ3ZDLEVBQVEsR0FBSyxJQUVDLElBQVosRUFBa0IsRUFBUyxHQUV6QixHQUFRLEVBQU8sUUFDbkIsRUFBUyxFQUFRLEdBQ2IsSUFDRixFQUFPLE9BQ1AsR0FBUyxJQUdULElBQVcsRUFBUyxRQUN0QixFQUFPLFVBQVUseUJBQ1IsRUFBTyxXQUFXLElBQzNCLEVBQUssS0FBSyxFQUFRLEVBQVMsR0FDdEIsRUFBUSxJQUNWLEVBQU8sR0FDZCxNQUFPLEdBQ0gsSUFBVyxHQUFRLEVBQU8sT0FDOUIsRUFBTyxLQUdrQixFQUFNLEtBQ25DLEdBQVEsTUFDUixFQUFRLElBQUssRUFDVCxJQUFhLEVBQVEsSUFBSSxZQUFZLE9BR3pDLFlBQWMsU0FBVSxHQUMxQixLQUFLLEtBQUssT0FBUSxXQUNoQixHQUVJLEdBQVEsRUFBUyxFQUZqQixFQUFRLEVBQVEsR0FDaEIsRUFBWSxZQUFZLEVBZTVCLElBYkksSUFDRixFQUFTLFFBQVEsV0FDWCxPQUNGLFFBQVEsS0FBSyxxQkFBc0IsRUFBTyxJQUNqQyxFQUFVLE9BQU8sc0JBQzFCLEdBQVUsUUFBUyxFQUFTLE9BQVEsS0FDMUIsRUFBVSxPQUFPLFVBQVksRUFBUSxPQUMvQyxFQUFRLE1BQU0sOEJBQStCLEtBSWpELEVBQVEsR0FBSyxRQUFVLFlBQVksR0FBVyxFQUFJLEdBQ2xELEVBQVEsT0FBSyxHQUNYLEdBQWEsRUFBTyxFQUFHLEtBQU0sR0FBTyxLQUd4QyxZQUFjLFNBQVUsR0FDMUIsTUFBc0IsS0FBZixFQUFRLElBQWtELEtBQXJDLEVBQVEsSUFBTSxFQUFRLElBQUksUUFFcEQsa0JBQW9CLFNBQVUsR0FDaEMsS0FBSyxLQUFLLE9BQVEsV0FDaEIsR0FBSSxFQUNBLFFBQ0YsUUFBUSxLQUFLLG1CQUFvQixJQUN4QixFQUFVLE9BQU8scUJBQzFCLEdBQVUsUUFBUyxFQUFTLE9BQVEsRUFBUSxRQUk5QyxRQUFVLFNBQVUsR0FDdEIsR0FBSSxHQUFVLElBQ1YsR0FBUSxLQUNaLEVBQVEsSUFBSyxFQUNiLEVBQVUsRUFBUSxJQUFNLEVBQ3hCLEVBQVEsR0FBSyxFQUNiLEVBQVEsR0FBSyxFQUNSLEVBQVEsS0FBSSxFQUFRLEdBQUssRUFBUSxHQUFHLFNBQ3pDLE9BQU8sR0FBUyxLQUVkLFNBQVcsU0FBVSxHQUN2QixHQUNJLEdBREEsRUFBVSxJQUVkLEtBQUksRUFBUSxHQUFaLENBQ0EsRUFBUSxJQUFLLEVBQ2IsRUFBVSxFQUFRLElBQU0sQ0FDeEIsS0FDRSxHQUFJLElBQVksRUFBTyxLQUFNLFdBQVUscUNBQ25DLEVBQU8sV0FBVyxJQUNwQixVQUFVLFdBQ1IsR0FBSSxJQUFZLEdBQUksRUFBUyxJQUFJLEVBQ2pDLEtBQ0UsRUFBSyxLQUFLLEVBQU8sSUFBSSxTQUFVLEVBQVMsR0FBSSxJQUFJLFFBQVMsRUFBUyxJQUNsRSxNQUFPLEdBQ1AsUUFBUSxLQUFLLEVBQVMsT0FJMUIsRUFBUSxHQUFLLEVBQ2IsRUFBUSxHQUFLLEVBQ2IsT0FBTyxHQUFTLElBRWxCLE1BQU8sR0FDUCxRQUFRLE1BQU8sR0FBSSxFQUFTLElBQUksR0FBUyxLQUt4QyxjQUVILFNBQVcsU0FBaUIsR0FDMUIsV0FBVyxLQUFNLFNBQVUsUUFBUyxNQUNwQyxVQUFVLEdBQ1YsU0FBUyxLQUFLLEtBQ2QsS0FDRSxFQUFTLElBQUksU0FBVSxLQUFNLEdBQUksSUFBSSxRQUFTLEtBQU0sSUFDcEQsTUFBTyxHQUNQLFFBQVEsS0FBSyxLQUFNLEtBSXZCLFNBQVcsU0FBaUIsR0FDMUIsS0FBSyxNQUNMLEtBQUssT0FBSyxHQUNWLEtBQUssR0FBSyxFQUNWLEtBQUssSUFBSyxFQUNWLEtBQUssT0FBSyxHQUNWLEtBQUssR0FBSyxFQUNWLEtBQUssSUFBSyxHQUVaLFNBQVMsVUFBWSxRQUFRLG1CQUFtQixTQUFTLFdBRXZELEtBQU0sU0FBYyxFQUFhLEdBQy9CLEdBQUksR0FBVyxxQkFBcUIsbUJBQW1CLEtBQU0sVUFPN0QsT0FOQSxHQUFTLEdBQTJCLGtCQUFmLElBQTRCLEVBQ2pELEVBQVMsS0FBNEIsa0JBQWQsSUFBNEIsRUFDbkQsRUFBUyxPQUFTLE9BQVMsUUFBUSxXQUFTLEdBQzVDLEtBQUssR0FBRyxLQUFLLEdBQ1QsS0FBSyxJQUFJLEtBQUssR0FBRyxLQUFLLEdBQ3RCLEtBQUssSUFBSSxPQUFPLE1BQU0sR0FDbkIsRUFBUyxTQUdsQixNQUFTLFNBQVUsR0FDakIsTUFBTyxNQUFLLFNBQUssR0FBVyxNQUdoQyxxQkFBdUIsV0FDckIsR0FBSSxHQUFVLEdBQUksU0FDbEIsTUFBSyxRQUFVLEVBQ2YsS0FBSyxRQUFVLElBQUksU0FBVSxFQUFTLEdBQ3RDLEtBQUssT0FBUyxJQUFJLFFBQVMsRUFBUyxJQUV0QywyQkFBMkIsRUFBSSxxQkFBdUIsU0FBVSxHQUM5RCxNQUFPLEtBQU0sVUFBWSxJQUFNLFFBQzNCLEdBQUksc0JBQXFCLEdBQ3pCLDRCQUE0QixLQUlwQyxRQUFRLFFBQVEsRUFBSSxRQUFRLEVBQUksUUFBUSxHQUFLLFlBQWMsUUFBUyxXQUNwRSxRQUFRLHdCQUF3QixTQUFVLFNBQzFDLFFBQVEsa0JBQWtCLFNBQzFCLFFBQVUsUUFBUSxXQUFXLFNBRzdCLFFBQVEsUUFBUSxFQUFJLFFBQVEsR0FBSyxXQUFZLFNBRTNDLE9BQVEsU0FBZ0IsR0FDdEIsR0FBSSxHQUFhLHFCQUFxQixLQUd0QyxRQURBLEVBRGUsRUFBVyxRQUNqQixHQUNGLEVBQVcsV0FHdEIsUUFBUSxRQUFRLEVBQUksUUFBUSxHQUFLLFVBQVksWUFBYSxTQUV4RCxRQUFTLFNBQWlCLEdBQ3hCLE1BQU8sZ0JBQWUsU0FBVyxPQUFTLFFBQVUsU0FBVyxLQUFNLE1BR3pFLFFBQVEsUUFBUSxFQUFJLFFBQVEsSUFBTSxZQUFjLFFBQVEsa0JBQWtCLFNBQVUsR0FDbEYsU0FBUyxJQUFJLEdBQWEsTUFBRSxVQUN6QixTQUVILElBQUssU0FBYSxHQUNoQixHQUFJLEdBQUksS0FDSixFQUFhLHFCQUFxQixHQUNsQyxFQUFVLEVBQVcsUUFDckIsRUFBUyxFQUFXLE9BQ3BCLEVBQVMsUUFBUSxXQUNuQixHQUFJLE1BQ0EsRUFBUSxFQUNSLEVBQVksQ0FDaEIsT0FBTSxHQUFVLEVBQU8sU0FBVSxHQUMvQixHQUFJLEdBQVMsSUFDVCxHQUFnQixDQUNwQixHQUFPLFNBQUssSUFDWixJQUNBLEVBQUUsUUFBUSxHQUFTLEtBQUssU0FBVSxHQUM1QixJQUNKLEdBQWdCLEVBQ2hCLEVBQU8sR0FBVSxJQUNmLEdBQWEsRUFBUSxLQUN0QixPQUVILEdBQWEsRUFBUSxJQUd6QixPQURJLEdBQU8sR0FBRyxFQUFPLEVBQU8sR0FDckIsRUFBVyxTQUdwQixLQUFNLFNBQWMsR0FDbEIsR0FBSSxHQUFJLEtBQ0osRUFBYSxxQkFBcUIsR0FDbEMsRUFBUyxFQUFXLE9BQ3BCLEVBQVMsUUFBUSxXQUNuQixNQUFNLEdBQVUsRUFBTyxTQUFVLEdBQy9CLEVBQUUsUUFBUSxHQUFTLEtBQUssRUFBVyxRQUFTLE1BSWhELE9BREksR0FBTyxHQUFHLEVBQU8sRUFBTyxHQUNyQixFQUFXOzs7QUMzUnRCLFlBQ0EsSUFBSSxLQUFNLFFBQVEsaUJBQWdCLEVBR2xDLFNBQVEsa0JBQWtCLE9BQVEsU0FBVSxTQUFVLEdBQ3BELEtBQUssR0FBSyxPQUFPLEdBQ2pCLEtBQUssR0FBSyxHQUVULFdBQ0QsR0FFSSxHQUZBLEVBQUksS0FBSyxHQUNULEVBQVEsS0FBSyxFQUVqQixPQUFJLElBQVMsRUFBRSxRQUFpQixVQUFPLEdBQVcsTUFBTSxJQUN4RCxFQUFRLElBQUksRUFBRyxHQUNmLEtBQUssSUFBTSxFQUFNLFFBQ1IsTUFBTyxFQUFPLE1BQU07OztBQ2YvQixZQUVBLElBQUksUUFBUyxRQUFRLGFBQ2pCLElBQU0sUUFBUSxVQUNkLFlBQWMsUUFBUSxrQkFDdEIsUUFBVSxRQUFRLGFBQ2xCLFNBQVcsUUFBUSxlQUNuQixLQUFPLFFBQVEsV0FBVyxJQUMxQixPQUFTLFFBQVEsWUFDakIsT0FBUyxRQUFRLGFBQ2pCLGVBQWlCLFFBQVEsd0JBQ3pCLElBQU0sUUFBUSxVQUNkLElBQU0sUUFBUSxVQUNkLE9BQVMsUUFBUSxjQUNqQixVQUFZLFFBQVEsaUJBQ3BCLFNBQVcsUUFBUSxnQkFDbkIsUUFBVSxRQUFRLGVBQ2xCLFNBQVcsUUFBUSxnQkFDbkIsU0FBVyxRQUFRLGdCQUNuQixTQUFXLFFBQVEsZ0JBQ25CLFVBQVksUUFBUSxpQkFDcEIsWUFBYyxRQUFRLG1CQUN0QixXQUFhLFFBQVEsb0JBQ3JCLFFBQVUsUUFBUSxvQkFDbEIsUUFBVSxRQUFRLHNCQUNsQixNQUFRLFFBQVEsa0JBQ2hCLE1BQVEsUUFBUSxrQkFDaEIsSUFBTSxRQUFRLGdCQUNkLE1BQVEsUUFBUSxrQkFDaEIsS0FBTyxNQUFNLEVBQ2IsR0FBSyxJQUFJLEVBQ1QsS0FBTyxRQUFRLEVBQ2YsUUFBVSxPQUFPLE9BQ2pCLE1BQVEsT0FBTyxLQUNmLFdBQWEsT0FBUyxNQUFNLFVBQzVCLFVBQVksWUFDWixPQUFTLElBQUksV0FDYixhQUFlLElBQUksZUFDbkIsVUFBWSxxQkFDWixlQUFpQixPQUFPLG1CQUN4QixXQUFhLE9BQU8sV0FDcEIsVUFBWSxPQUFPLGNBQ25CLFlBQWMsT0FBTyxXQUNyQixXQUErQixrQkFBWCxZQUEyQixNQUFNLEVBQ3JELFFBQVUsT0FBTyxRQUVqQixRQUFVLFVBQVksUUFBUSxhQUFlLFFBQVEsV0FBVyxVQUdoRSxjQUFnQixhQUFlLE9BQU8sV0FDeEMsTUFFUyxJQUZGLFFBQVEsTUFBTyxLQUNwQixJQUFLLFdBQWMsTUFBTyxJQUFHLEtBQU0sS0FBTyxNQUFPLElBQUssTUFDcEQsSUFDRCxTQUFVLEVBQUksRUFBSyxHQUN0QixHQUFJLEdBQVksS0FBSyxZQUFhLEVBQzlCLFVBQWtCLGFBQVksR0FDbEMsR0FBRyxFQUFJLEVBQUssR0FDUixHQUFhLElBQU8sYUFBYSxHQUFHLFlBQWEsRUFBSyxJQUN4RCxHQUVBLEtBQU8sU0FBVSxHQUNuQixHQUFJLEdBQU0sV0FBVyxHQUFPLFFBQVEsUUFBUSxXQUU1QyxPQURBLEdBQUksR0FBSyxFQUNGLEdBR0wsU0FBVyxZQUF5QyxnQkFBcEIsU0FBUSxTQUF1QixTQUFVLEdBQzNFLE1BQW9CLGdCQUFOLElBQ1osU0FBVSxHQUNaLE1BQU8sYUFBYyxVQUduQixnQkFBa0IsU0FBd0IsRUFBSSxFQUFLLEdBS3JELE1BSkksS0FBTyxhQUFhLGdCQUFnQixVQUFXLEVBQUssR0FDeEQsU0FBUyxHQUNULEVBQU0sWUFBWSxHQUFLLEdBQ3ZCLFNBQVMsR0FDTCxJQUFJLFdBQVksSUFDYixFQUFFLFlBSUQsSUFBSSxFQUFJLFNBQVcsRUFBRyxRQUFRLEtBQU0sRUFBRyxRQUFRLElBQU8sR0FDMUQsRUFBSSxRQUFRLEdBQUssV0FBWSxXQUFXLEdBQUcsT0FKdEMsSUFBSSxFQUFJLFNBQVMsR0FBRyxFQUFJLE9BQVEsV0FBVyxPQUNoRCxFQUFHLFFBQVEsSUFBTyxHQUlYLGNBQWMsRUFBSSxFQUFLLElBQ3pCLEdBQUcsRUFBSSxFQUFLLElBRW5CLGtCQUFvQixTQUEwQixFQUFJLEdBQ3BELFNBQVMsRUFLVCxLQUpBLEdBR0ksR0FIQSxFQUFPLFNBQVMsRUFBSSxVQUFVLElBQzlCLEVBQUksRUFDSixFQUFJLEVBQUssT0FFTixFQUFJLEdBQUcsZ0JBQWdCLEVBQUksRUFBTSxFQUFLLEtBQU0sRUFBRSxHQUNyRCxPQUFPLElBRUwsUUFBVSxTQUFnQixFQUFJLEdBQ2hDLFdBQWEsS0FBTixFQUFrQixRQUFRLEdBQU0sa0JBQWtCLFFBQVEsR0FBSyxJQUVwRSxzQkFBd0IsU0FBOEIsR0FDeEQsR0FBSSxHQUFJLE9BQU8sS0FBSyxLQUFNLEVBQU0sWUFBWSxHQUFLLEdBQ2pELFNBQUksT0FBUyxhQUFlLElBQUksV0FBWSxLQUFTLElBQUksVUFBVyxRQUM3RCxJQUFNLElBQUksS0FBTSxLQUFTLElBQUksV0FBWSxJQUFRLElBQUksS0FBTSxTQUFXLEtBQUssUUFBUSxLQUFPLElBRS9GLDBCQUE0QixTQUFrQyxFQUFJLEdBR3BFLEdBRkEsRUFBSyxVQUFVLEdBQ2YsRUFBTSxZQUFZLEdBQUssR0FDbkIsSUFBTyxjQUFlLElBQUksV0FBWSxJQUFTLElBQUksVUFBVyxHQUFsRSxDQUNBLEdBQUksR0FBSSxLQUFLLEVBQUksRUFFakIsUUFESSxJQUFLLElBQUksV0FBWSxJQUFVLElBQUksRUFBSSxTQUFXLEVBQUcsUUFBUSxLQUFPLEVBQUUsWUFBYSxHQUNoRixJQUVMLHFCQUF1QixTQUE2QixHQUt0RCxJQUpBLEdBR0ksR0FIQSxFQUFRLEtBQUssVUFBVSxJQUN2QixLQUNBLEVBQUksRUFFRCxFQUFNLE9BQVMsR0FDZixJQUFJLFdBQVksRUFBTSxFQUFNLE9BQVMsR0FBTyxRQUFVLEdBQU8sTUFBTSxFQUFPLEtBQUssRUFDcEYsT0FBTyxJQUVQLHVCQUF5QixTQUErQixHQU0xRCxJQUxBLEdBSUksR0FKQSxFQUFRLElBQU8sWUFDZixFQUFRLEtBQUssRUFBUSxVQUFZLFVBQVUsSUFDM0MsS0FDQSxFQUFJLEVBRUQsRUFBTSxPQUFTLElBQ2hCLElBQUksV0FBWSxFQUFNLEVBQU0sT0FBVSxJQUFRLElBQUksWUFBYSxJQUFjLEVBQU8sS0FBSyxXQUFXLEdBQ3hHLE9BQU8sR0FJTixjQUNILFFBQVUsV0FDUixHQUFJLGVBQWdCLFNBQVMsS0FBTSxXQUFVLCtCQUM3QyxJQUFJLEdBQU0sSUFBSSxVQUFVLE9BQVMsRUFBSSxVQUFVLE9BQUssSUFDaEQsRUFBTyxTQUFVLEdBQ2YsT0FBUyxhQUFhLEVBQUssS0FBSyxVQUFXLEdBQzNDLElBQUksS0FBTSxTQUFXLElBQUksS0FBSyxRQUFTLEtBQU0sS0FBSyxRQUFRLElBQU8sR0FDckUsY0FBYyxLQUFNLEVBQUssV0FBVyxFQUFHLElBR3pDLE9BREksY0FBZSxRQUFRLGNBQWMsWUFBYSxHQUFPLGNBQWMsRUFBTSxJQUFLLElBQy9FLEtBQUssSUFFZCxTQUFTLFFBQVEsV0FBWSxXQUFZLFdBQ3ZDLE1BQU8sTUFBSyxLQUdkLE1BQU0sRUFBSSwwQkFDVixJQUFJLEVBQUksZ0JBQ1IsUUFBUSxrQkFBa0IsRUFBSSxRQUFRLEVBQUkscUJBQzFDLFFBQVEsaUJBQWlCLEVBQUksc0JBQzdCLE1BQU0sRUFBSSx1QkFFTixjQUFnQixRQUFRLGVBQzFCLFNBQVMsWUFBYSx1QkFBd0IsdUJBQXVCLEdBR3ZFLE9BQU8sRUFBSSxTQUFVLEdBQ25CLE1BQU8sTUFBSyxJQUFJLE1BSXBCLFFBQVEsUUFBUSxFQUFJLFFBQVEsRUFBSSxRQUFRLEdBQUssWUFBYyxPQUFRLFNBRW5FLEtBQUssR0FBSSxZQUFhLGlIQUdwQixNQUFNLEtBQU0sRUFBSSxFQUFHLFdBQVcsT0FBUyxHQUFHLElBQUksV0FBVyxLQUUzRCxLQUFLLEdBQUksa0JBQW1CLE1BQU0sSUFBSSxPQUFRLEVBQUksRUFBRyxpQkFBaUIsT0FBUyxHQUFJLFVBQVUsaUJBQWlCLEtBRTlHLFNBQVEsUUFBUSxFQUFJLFFBQVEsR0FBSyxXQUFZLFVBRTNDLElBQU8sU0FBVSxHQUNmLE1BQU8sS0FBSSxlQUFnQixHQUFPLElBQzlCLGVBQWUsR0FDZixlQUFlLEdBQU8sUUFBUSxJQUdwQyxPQUFRLFNBQWdCLEdBQ3RCLElBQUssU0FBUyxHQUFNLEtBQU0sV0FBVSxFQUFNLG9CQUMxQyxLQUFLLEdBQUksS0FBTyxnQkFBZ0IsR0FBSSxlQUFlLEtBQVMsRUFBSyxNQUFPLElBRTFFLFVBQVcsV0FBYyxRQUFTLEdBQ2xDLFVBQVcsV0FBYyxRQUFTLEtBR3BDLFFBQVEsUUFBUSxFQUFJLFFBQVEsR0FBSyxXQUFZLFVBRTNDLE9BQVEsUUFFUixlQUFnQixnQkFFaEIsaUJBQWtCLGtCQUVsQix5QkFBMEIsMEJBRTFCLG9CQUFxQixxQkFFckIsc0JBQXVCLHdCQUt6QixJQUFJLHFCQUFzQixPQUFPLFdBQWMsTUFBTSxFQUFFLElBRXZELFNBQVEsUUFBUSxFQUFJLFFBQVEsRUFBSSxvQkFBcUIsVUFDbkQsc0JBQXVCLFNBQStCLEdBQ3BELE1BQU8sT0FBTSxFQUFFLFNBQVMsT0FLNUIsT0FBUyxRQUFRLFFBQVEsRUFBSSxRQUFRLElBQU0sWUFBYyxPQUFPLFdBQzlELEdBQUksR0FBSSxTQUlSLE9BQTBCLFVBQW5CLFlBQVksS0FBMkMsTUFBeEIsWUFBYSxFQUFHLEtBQXlDLE1BQXpCLFdBQVcsT0FBTyxPQUNyRixRQUNILFVBQVcsU0FBbUIsR0FJNUIsSUFIQSxHQUVJLEdBQVUsRUFGVixHQUFRLEdBQ1IsRUFBSSxFQUVELFVBQVUsT0FBUyxHQUFHLEVBQUssS0FBSyxVQUFVLEtBRWpELElBREEsRUFBWSxFQUFXLEVBQUssSUFDdkIsU0FBUyxRQUFvQixLQUFQLEtBQW9CLFNBQVMsR0FNeEQsTUFMSyxTQUFRLEtBQVcsRUFBVyxTQUFVLEVBQUssR0FFaEQsR0FEd0Isa0JBQWIsS0FBeUIsRUFBUSxFQUFVLEtBQUssS0FBTSxFQUFLLEtBQ2pFLFNBQVMsR0FBUSxNQUFPLEtBRS9CLEVBQUssR0FBSyxFQUNILFdBQVcsTUFBTSxNQUFPLE1BS25DLFFBQVEsV0FBVyxlQUFpQixRQUFRLFdBQVcsUUFBUSxXQUFZLGFBQWMsUUFBUSxXQUFXLFNBRTVHLGVBQWUsUUFBUyxVQUV4QixlQUFlLEtBQU0sUUFBUSxHQUU3QixlQUFlLE9BQU8sS0FBTSxRQUFROzs7QUNwUHBDLFlBQ0EsSUFBSSxTQUFVLFFBQVEsYUFDbEIsS0FBTyxRQUFRLFdBQ2YsT0FBUyxRQUFRLGFBQ2pCLG1CQUFxQixRQUFRLDBCQUM3QixlQUFpQixRQUFRLHFCQUU3QixTQUFRLFFBQVEsRUFBSSxRQUFRLEVBQUcsV0FBYSxRQUFXLFNBQVUsR0FDL0QsR0FBSSxHQUFJLG1CQUFtQixLQUFNLEtBQUssU0FBVyxPQUFPLFNBQ3BELEVBQWlDLGtCQUFiLEVBQ3hCLE9BQU8sTUFBSyxLQUNWLEVBQWEsU0FBVSxHQUNyQixNQUFPLGdCQUFlLEVBQUcsS0FBYSxLQUFLLFdBQWMsTUFBTyxNQUM5RCxFQUNKLEVBQWEsU0FBVSxHQUNyQixNQUFPLGdCQUFlLEVBQUcsS0FBYSxLQUFLLFdBQWMsS0FBTSxNQUM3RDs7O0FDakJSLFlBRUEsSUFBSSxTQUFVLFFBQVEsYUFDbEIscUJBQXVCLFFBQVEsNkJBQy9CLFFBQVUsUUFBUSxhQUV0QixTQUFRLFFBQVEsRUFBRyxXQUFhLElBQU8sU0FBVSxHQUMvQyxHQUFJLEdBQW9CLHFCQUFxQixFQUFFLE1BQzNDLEVBQVMsUUFBUSxFQUVyQixRQURDLEVBQU8sRUFBSSxFQUFrQixPQUFTLEVBQWtCLFNBQVMsRUFBTyxHQUNsRSxFQUFrQjs7O0FDVjNCLFFBQVEsaUJBQWlCOzs7QUNBekIsUUFBUSxpQkFBaUI7OztBQ0F6QixRQUFRLHVCQVlSLEtBQUssR0FYRCxRQUFTLFFBQVEsYUFDakIsS0FBTyxRQUFRLFdBQ2YsVUFBWSxRQUFRLGdCQUNwQixjQUFnQixRQUFRLFVBQVUsZUFFbEMsYUFBZSx3YkFJVSxNQUFNLEtBRTFCLEVBQUksRUFBRyxFQUFJLGFBQWEsT0FBUSxJQUFLLENBQzVDLEdBQUksTUFBTyxhQUFhLEdBQ3BCLFdBQWEsT0FBTyxNQUNwQixNQUFRLFlBQWMsV0FBVyxTQUNqQyxTQUFVLE1BQU0sZ0JBQWdCLEtBQUssTUFBTyxjQUFlLE1BQy9ELFVBQVUsTUFBUSxVQUFVOzs7QUNIOUIsUUFBUyxVQUFTLEVBQU0sRUFBTSxHQUk1QixRQUFTLEtBQ1AsR0FBSSxHQUFPLEtBQUssTUFBUSxDQUVwQixHQUFPLEdBQVEsR0FBUSxFQUN6QixFQUFVLFdBQVcsRUFBTyxFQUFPLElBRW5DLEVBQVUsS0FDTCxJQUNILEVBQVMsRUFBSyxNQUFNLEVBQVMsR0FDN0IsRUFBVSxFQUFPLE9BWnZCLEdBQUksR0FBUyxFQUFNLEVBQVMsRUFBVyxDQUNuQyxPQUFRLElBQU0sRUFBTyxJQWdCekIsSUFBSSxHQUFZLFdBQ2QsRUFBVSxLQUNWLEVBQU8sVUFDUCxFQUFZLEtBQUssS0FDakIsSUFBSSxHQUFVLElBQWMsQ0FPNUIsT0FOSyxLQUFTLEVBQVUsV0FBVyxFQUFPLElBQ3RDLElBQ0YsRUFBUyxFQUFLLE1BQU0sRUFBUyxHQUM3QixFQUFVLEVBQU8sTUFHWixFQW9CVCxPQWpCQSxHQUFVLE1BQVEsV0FDWixJQUNGLGFBQWEsR0FDYixFQUFVLE9BSWQsRUFBVSxNQUFRLFdBQ1osSUFDRixFQUFTLEVBQUssTUFBTSxFQUFTLEdBQzdCLEVBQVUsRUFBTyxLQUVqQixhQUFhLEdBQ2IsRUFBVSxPQUlQLEVBSVQsU0FBUyxTQUFXLFNBRXBCLE9BQU8sUUFBVTs7O0FDckVqQixZQUtBLFNBQVMsa0JBQWlCLEVBQVksR0FDckMsSUFFQyxNQUFPLG9CQUFtQixFQUFXLEtBQUssS0FDekMsTUFBTyxJQUlULEdBQTBCLElBQXRCLEVBQVcsT0FDZCxNQUFPLEVBR1IsR0FBUSxHQUFTLENBR2pCLElBQUksR0FBTyxFQUFXLE1BQU0sRUFBRyxHQUMzQixFQUFRLEVBQVcsTUFBTSxFQUU3QixPQUFPLE9BQU0sVUFBVSxPQUFPLFFBQVMsaUJBQWlCLEdBQU8saUJBQWlCLElBR2pGLFFBQVMsUUFBTyxHQUNmLElBQ0MsTUFBTyxvQkFBbUIsR0FDekIsTUFBTyxHQUdSLElBQUssR0FGRCxHQUFTLEVBQU0sTUFBTSxlQUVoQixFQUFJLEVBQUcsRUFBSSxFQUFPLE9BQVEsSUFDbEMsRUFBUSxpQkFBaUIsRUFBUSxHQUFHLEtBQUssSUFFekMsRUFBUyxFQUFNLE1BQU0sY0FHdEIsT0FBTyxJQUlULFFBQVMsMEJBQXlCLEdBUWpDLElBTkEsR0FBSSxJQUNILFNBQVUsS0FDVixTQUFVLE1BR1AsRUFBUSxhQUFhLEtBQUssR0FDdkIsR0FBTyxDQUNiLElBRUMsRUFBVyxFQUFNLElBQU0sbUJBQW1CLEVBQU0sSUFDL0MsTUFBTyxHQUNSLEdBQUksR0FBUyxPQUFPLEVBQU0sR0FFdEIsS0FBVyxFQUFNLEtBQ3BCLEVBQVcsRUFBTSxJQUFNLEdBSXpCLEVBQVEsYUFBYSxLQUFLLEdBSTNCLEVBQVcsT0FBUyxHQUlwQixLQUFLLEdBRkQsR0FBVSxPQUFPLEtBQUssR0FFakIsRUFBSSxFQUFHLEVBQUksRUFBUSxPQUFRLElBQUssQ0FFeEMsR0FBSSxHQUFNLEVBQVEsRUFDbEIsR0FBUSxFQUFNLFFBQVEsR0FBSSxRQUFPLEVBQUssS0FBTSxFQUFXLElBR3hELE1BQU8sR0EzRVIsR0FBSSxPQUFRLGVBQ1IsY0FBZ0IsR0FBSSxRQUFPLE1BQU8sTUFDbEMsYUFBZSxHQUFJLFFBQU8sSUFBTSxNQUFRLEtBQU0sS0E0RWxELFFBQU8sUUFBVSxTQUFVLEdBQzFCLEdBQTBCLGdCQUFmLEdBQ1YsS0FBTSxJQUFJLFdBQVUsNERBQStELEdBQWEsSUFHakcsS0FJQyxNQUhBLEdBQWEsRUFBVyxRQUFRLE1BQU8sS0FHaEMsbUJBQW1CLEdBQ3pCLE1BQU8sR0FFUixNQUFPLDBCQUF5Qjs7O0FDekZsQyxZQUNBLFFBQU8sUUFBVSxRQUFRLE1BQU07Ozs7Q0NLOUIsU0FBVSxFQUFRLEdBQ0MsZ0JBQVosVUFBMEMsbUJBQVgsUUFBeUIsT0FBTyxRQUFVLElBQzlELGtCQUFYLFNBQXlCLE9BQU8sSUFBTSxPQUFPLEdBQ25ELEVBQU8sV0FBYSxLQUNwQixLQUFNLFdBQWUsWUFFdkIsU0FBUyxHQUFpQixHQUN4QixHQUFJLFNBQWMsRUFDbEIsT0FBYSxRQUFOLElBQXdCLFdBQVQsR0FBOEIsYUFBVCxHQUc3QyxRQUFTLEdBQVcsR0FDbEIsTUFBb0Isa0JBQU4sR0FvQ2hCLFFBQVMsR0FBYSxHQUNwQixFQUFvQixFQUd0QixRQUFTLEdBQVEsR0FDZixFQUFPLEVBcUJULFFBQVMsS0FDUCxXQUF5QixLQUFkLEVBQ0YsV0FDTCxFQUFVLElBSVAsSUF1QlQsUUFBUyxLQUdQLEdBQUksR0FBbUIsVUFDdkIsT0FBTyxZQUNMLE1BQU8sR0FBaUIsRUFBTyxJQUtuQyxRQUFTLEtBQ1AsSUFBSyxHQUFJLEdBQUksRUFBRyxFQUFJLEVBQUssR0FBSyxFQUFHLEVBSS9CLEVBSGUsRUFBTSxJQUNYLEVBQU0sRUFBSSxJQUlwQixFQUFNLE9BQUssR0FDWCxFQUFNLEVBQUksT0FBSyxHQUdqQixFQUFNLEVBMkJSLFFBQVMsR0FBSyxFQUFlLEdBQzNCLEdBQUksR0FBUyxLQUVULEVBQVEsR0FBSSxNQUFLLFlBQVksT0FFUCxLQUF0QixFQUFNLElBQ1IsRUFBWSxFQUdkLElBQUksR0FBUyxFQUFPLE1BR3BCLElBQUksRUFBUSxDQUNWLEdBQUksR0FBVyxVQUFVLEVBQVMsRUFDbEMsR0FBSyxXQUNILE1BQU8sR0FBZSxFQUFRLEVBQU8sRUFBVSxFQUFPLGVBR3hELEdBQVUsRUFBUSxFQUFPLEVBQWUsRUFHMUMsT0FBTyxHQWtDVCxRQUFTLEdBQVUsR0FFakIsR0FBSSxHQUFjLElBRWxCLElBQUksR0FBNEIsZ0JBQVgsSUFBdUIsRUFBTyxjQUFnQixFQUNqRSxNQUFPLEVBR1QsSUFBSSxHQUFVLEdBQUksR0FBWSxFQUU5QixPQURBLEdBQVEsRUFBUyxHQUNWLEVBS1QsUUFBUyxNQU1ULFFBQVMsS0FDUCxNQUFPLElBQUksV0FBVSw0Q0FHdkIsUUFBUyxLQUNQLE1BQU8sSUFBSSxXQUFVLHdEQUd2QixRQUFTLEdBQVEsRUFBUyxFQUFPLEVBQW9CLEdBQ25ELElBQ0UsRUFBUSxLQUFLLEVBQU8sRUFBb0IsR0FDeEMsTUFBTyxHQUNQLE1BQU8sSUFJWCxRQUFTLEdBQXNCLEVBQVMsRUFBVSxHQUNoRCxFQUFLLFNBQVUsR0FDYixHQUFJLElBQVMsRUFDVCxFQUFRLEVBQVEsRUFBUyxFQUFVLFNBQVUsR0FDM0MsSUFHSixHQUFTLEVBQ0wsSUFBYSxFQUNmLEVBQVEsRUFBUyxHQUVqQixFQUFRLEVBQVMsS0FFbEIsU0FBVSxHQUNQLElBR0osR0FBUyxFQUVULEVBQU8sRUFBUyxLQUNmLFlBQWMsRUFBUSxRQUFVLHNCQUU5QixHQUFVLElBQ2IsR0FBUyxFQUNULEVBQU8sRUFBUyxLQUVqQixHQUdMLFFBQVMsR0FBa0IsRUFBUyxHQUM5QixFQUFTLFNBQVcsRUFDdEIsRUFBUSxFQUFTLEVBQVMsU0FDakIsRUFBUyxTQUFXLEVBQzdCLEVBQU8sRUFBUyxFQUFTLFNBRXpCLEVBQVUsTUFBVSxHQUFXLFNBQVUsR0FDdkMsTUFBTyxHQUFRLEVBQVMsSUFDdkIsU0FBVSxHQUNYLE1BQU8sR0FBTyxFQUFTLEtBSzdCLFFBQVMsR0FBb0IsRUFBUyxFQUFlLEdBQy9DLEVBQWMsY0FBZ0IsRUFBUSxhQUFlLElBQVksR0FBUSxFQUFjLFlBQVksVUFBWSxFQUNqSCxFQUFrQixFQUFTLE9BRVgsS0FBWixFQUNGLEVBQVEsRUFBUyxHQUNSLEVBQVcsR0FDcEIsRUFBc0IsRUFBUyxFQUFlLEdBRTlDLEVBQVEsRUFBUyxHQUt2QixRQUFTLEdBQVEsRUFBUyxHQUN4QixHQUFJLElBQVksRUFDZCxFQUFPLEVBQVMsU0FDWCxJQUFJLEVBQWlCLEdBQVEsQ0FDbEMsR0FBSSxPQUFVLEVBQ2QsS0FDRSxFQUFVLEVBQU0sS0FDaEIsTUFBTyxHQUVQLFdBREEsR0FBTyxFQUFTLEdBR2xCLEVBQW9CLEVBQVMsRUFBTyxPQUVwQyxHQUFRLEVBQVMsR0FJckIsUUFBUyxHQUFpQixHQUNwQixFQUFRLFVBQ1YsRUFBUSxTQUFTLEVBQVEsU0FHM0IsRUFBUSxHQUdWLFFBQVMsR0FBUSxFQUFTLEdBQ3BCLEVBQVEsU0FBVyxJQUl2QixFQUFRLFFBQVUsRUFDbEIsRUFBUSxPQUFTLEVBRW1CLElBQWhDLEVBQVEsYUFBYSxRQUN2QixFQUFLLEVBQVMsSUFJbEIsUUFBUyxHQUFPLEVBQVMsR0FDbkIsRUFBUSxTQUFXLElBR3ZCLEVBQVEsT0FBUyxFQUNqQixFQUFRLFFBQVUsRUFFbEIsRUFBSyxFQUFrQixJQUd6QixRQUFTLEdBQVUsRUFBUSxFQUFPLEVBQWUsR0FDL0MsR0FBSSxHQUFlLEVBQU8sYUFDdEIsRUFBUyxFQUFhLE1BRzFCLEdBQU8sU0FBVyxLQUVsQixFQUFhLEdBQVUsRUFDdkIsRUFBYSxFQUFTLEdBQWEsRUFDbkMsRUFBYSxFQUFTLEdBQVksRUFFbkIsSUFBWCxHQUFnQixFQUFPLFFBQ3pCLEVBQUssRUFBUyxHQUlsQixRQUFTLEdBQVEsR0FDZixHQUFJLEdBQWMsRUFBUSxhQUN0QixFQUFVLEVBQVEsTUFFdEIsSUFBMkIsSUFBdkIsRUFBWSxPQUFoQixDQVFBLElBQUssR0FKRCxPQUFRLEdBQ1IsTUFBVyxHQUNYLEVBQVMsRUFBUSxRQUVaLEVBQUksRUFBRyxFQUFJLEVBQVksT0FBUSxHQUFLLEVBQzNDLEVBQVEsRUFBWSxHQUNwQixFQUFXLEVBQVksRUFBSSxHQUV2QixFQUNGLEVBQWUsRUFBUyxFQUFPLEVBQVUsR0FFekMsRUFBUyxFQUliLEdBQVEsYUFBYSxPQUFTLEdBR2hDLFFBQVMsR0FBZSxFQUFTLEVBQVMsRUFBVSxHQUNsRCxHQUFJLEdBQWMsRUFBVyxHQUN6QixNQUFRLEdBQ1IsTUFBUSxHQUNSLEdBQVksQ0FFaEIsSUFBSSxFQUFhLENBQ2YsSUFDRSxFQUFRLEVBQVMsR0FDakIsTUFBTyxHQUNQLEdBQVksRUFDWixFQUFRLEVBR1YsR0FBSSxJQUFZLEVBRWQsV0FEQSxHQUFPLEVBQVMsU0FJbEIsR0FBUSxDQUdOLEdBQVEsU0FBVyxJQUVaLEdBQWUsRUFDeEIsRUFBUSxFQUFTLElBQ00sSUFBZCxFQUNULEVBQU8sRUFBUyxHQUNQLElBQVksRUFDckIsRUFBUSxFQUFTLEdBQ1IsSUFBWSxHQUNyQixFQUFPLEVBQVMsSUFJcEIsUUFBUyxHQUFrQixFQUFTLEdBQ2xDLElBQ0UsRUFBUyxTQUF3QixHQUMvQixFQUFRLEVBQVMsSUFDaEIsU0FBdUIsR0FDeEIsRUFBTyxFQUFTLEtBRWxCLE1BQU8sR0FDUCxFQUFPLEVBQVMsSUFLcEIsUUFBUyxLQUNQLE1BQU8sS0FHVCxRQUFTLEdBQVksR0FDbkIsRUFBUSxHQUFjLElBQ3RCLEVBQVEsV0FBUyxHQUNqQixFQUFRLFlBQVUsR0FDbEIsRUFBUSxnQkFHVixRQUFTLEtBQ1AsTUFBTyxJQUFJLE9BQU0sMkNBNEpuQixRQUFTLEdBQUksR0FDWCxNQUFPLElBQUksR0FBVyxLQUFNLEdBQVMsUUFvRXZDLFFBQVMsR0FBSyxHQUVaLEdBQUksR0FBYyxJQUVsQixPQUtTLElBQUksR0FMUixFQUFRLEdBS1ksU0FBVSxFQUFTLEdBRXhDLElBQUssR0FERCxHQUFTLEVBQVEsT0FDWixFQUFJLEVBQUcsRUFBSSxFQUFRLElBQzFCLEVBQVksUUFBUSxFQUFRLElBQUksS0FBSyxFQUFTLElBUDNCLFNBQVUsRUFBRyxHQUNsQyxNQUFPLEdBQU8sR0FBSSxXQUFVLHNDQThDbEMsUUFBUyxHQUFTLEdBRWhCLEdBQUksR0FBYyxLQUNkLEVBQVUsR0FBSSxHQUFZLEVBRTlCLE9BREEsR0FBTyxFQUFTLEdBQ1QsRUFHVCxRQUFTLEtBQ1AsS0FBTSxJQUFJLFdBQVUsc0ZBR3RCLFFBQVMsS0FDUCxLQUFNLElBQUksV0FBVSx5SEE2WHRCLFFBQVMsS0FDUCxHQUFJLE9BQVEsRUFFWixJQUFzQixtQkFBWCxRQUNULEVBQVEsV0FDSCxJQUFvQixtQkFBVCxNQUNoQixFQUFRLFNBRVIsS0FDRSxFQUFRLFNBQVMsaUJBQ2pCLE1BQU8sR0FDUCxLQUFNLElBQUksT0FBTSw0RUFJcEIsR0FBSSxHQUFJLEVBQU0sT0FFZCxJQUFJLEVBQUcsQ0FDTCxHQUFJLEdBQWtCLElBQ3RCLEtBQ0UsRUFBa0IsT0FBTyxVQUFVLFNBQVMsS0FBSyxFQUFFLFdBQ25ELE1BQU8sSUFJVCxHQUF3QixxQkFBcEIsSUFBMkMsRUFBRSxLQUMvQyxPQUlKLEVBQU0sUUFBVSxFQS9tQ2xCLEdBQUksT0FBVyxFQUViLEdBREUsTUFBTSxRQUNHLE1BQU0sUUFFTixTQUFVLEdBQ25CLE1BQTZDLG1CQUF0QyxPQUFPLFVBQVUsU0FBUyxLQUFLLEdBSTFDLElBQUksR0FBVSxFQUVWLEVBQU0sRUFDTixNQUFZLEdBQ1osTUFBb0IsR0FFcEIsRUFBTyxTQUFjLEVBQVUsR0FDakMsRUFBTSxHQUFPLEVBQ2IsRUFBTSxFQUFNLEdBQUssRUFFTCxLQURaLEdBQU8sS0FLRCxFQUNGLEVBQWtCLEdBRWxCLE1BYUYsRUFBa0MsbUJBQVgsUUFBeUIsV0FBUyxHQUN6RCxFQUFnQixNQUNoQixFQUEwQixFQUFjLGtCQUFvQixFQUFjLHVCQUMxRSxFQUF5QixtQkFBVCxPQUEyQyxtQkFBWixVQUF5RCx3QkFBM0IsU0FBUyxLQUFLLFNBRzNGLEVBQXdDLG1CQUF0QixvQkFBOEQsbUJBQWxCLGdCQUEyRCxtQkFBbkIsZ0JBbUR0RyxFQUFRLEdBQUksT0FBTSxLQXlCbEIsTUFBZ0IsRUFHbEIsR0FERSxFQTNFSixXQUdFLE1BQU8sWUFDTCxNQUFPLFNBQVEsU0FBUyxPQXlFakIsRUExRFgsV0FDRSxHQUFJLEdBQWEsRUFDYixFQUFXLEdBQUksR0FBd0IsR0FDdkMsRUFBTyxTQUFTLGVBQWUsR0FHbkMsT0FGQSxHQUFTLFFBQVEsR0FBUSxlQUFlLElBRWpDLFdBQ0wsRUFBSyxLQUFPLElBQWUsRUFBYSxNQXFEakMsRUFoRFgsV0FDRSxHQUFJLEdBQVUsR0FBSSxlQUVsQixPQURBLEdBQVEsTUFBTSxVQUFZLEVBQ25CLFdBQ0wsTUFBTyxHQUFRLE1BQU0sWUFBWSxXQThDUixLQUFsQixHQUFrRCxrQkFBWixTQWxCakQsV0FDRSxJQUNFLEdBQUksR0FBUSxTQUFTLGlCQUFpQixRQUFRLFFBRTlDLE9BREEsR0FBWSxFQUFNLFdBQWEsRUFBTSxhQUM5QixJQUNQLE1BQU8sR0FDUCxNQUFPLFNBZU8sR0F1RWxCLElBQUksR0FBYSxLQUFLLFNBQVMsU0FBUyxJQUFJLFVBQVUsR0FJbEQsTUFBVSxHQUNWLEVBQVksRUFDWixFQUFXLEVBb05YLEVBQUssRUFnQkwsRUFBYSxXQUNmLFFBQVMsR0FBVyxFQUFhLEdBQy9CLEtBQUsscUJBQXVCLEVBQzVCLEtBQUssUUFBVSxHQUFJLEdBQVksR0FFMUIsS0FBSyxRQUFRLElBQ2hCLEVBQVksS0FBSyxTQUdmLEVBQVEsSUFDVixLQUFLLE9BQVMsRUFBTSxPQUNwQixLQUFLLFdBQWEsRUFBTSxPQUV4QixLQUFLLFFBQVUsR0FBSSxPQUFNLEtBQUssUUFFVixJQUFoQixLQUFLLE9BQ1AsRUFBUSxLQUFLLFFBQVMsS0FBSyxVQUUzQixLQUFLLE9BQVMsS0FBSyxRQUFVLEVBQzdCLEtBQUssV0FBVyxHQUNRLElBQXBCLEtBQUssWUFDUCxFQUFRLEtBQUssUUFBUyxLQUFLLFdBSS9CLEVBQU8sS0FBSyxRQUFTLEtBOEV6QixNQTFFQSxHQUFXLFVBQVUsV0FBYSxTQUFvQixHQUNwRCxJQUFLLEdBQUksR0FBSSxFQUFHLEtBQUssU0FBVyxHQUFXLEVBQUksRUFBTSxPQUFRLElBQzNELEtBQUssV0FBVyxFQUFNLEdBQUksSUFJOUIsRUFBVyxVQUFVLFdBQWEsU0FBb0IsRUFBTyxHQUMzRCxHQUFJLEdBQUksS0FBSyxxQkFDVCxFQUFhLEVBQUUsT0FHbkIsSUFBSSxJQUFlLEVBQVcsQ0FDNUIsR0FBSSxPQUFRLEdBQ1IsTUFBUSxHQUNSLEdBQVcsQ0FDZixLQUNFLEVBQVEsRUFBTSxLQUNkLE1BQU8sR0FDUCxHQUFXLEVBQ1gsRUFBUSxFQUdWLEdBQUksSUFBVSxHQUFRLEVBQU0sU0FBVyxFQUNyQyxLQUFLLFdBQVcsRUFBTSxPQUFRLEVBQUcsRUFBTSxhQUNsQyxJQUFxQixrQkFBVixHQUNoQixLQUFLLGFBQ0wsS0FBSyxRQUFRLEdBQUssTUFDYixJQUFJLElBQU0sRUFBVyxDQUMxQixHQUFJLEdBQVUsR0FBSSxHQUFFLEVBQ2hCLEdBQ0YsRUFBTyxFQUFTLEdBRWhCLEVBQW9CLEVBQVMsRUFBTyxHQUV0QyxLQUFLLGNBQWMsRUFBUyxPQUU1QixNQUFLLGNBQWMsR0FBSSxHQUFFLFNBQVUsR0FDakMsTUFBTyxHQUFXLEtBQ2hCLE9BR04sTUFBSyxjQUFjLEVBQVcsR0FBUSxJQUkxQyxFQUFXLFVBQVUsV0FBYSxTQUFvQixFQUFPLEVBQUcsR0FDOUQsR0FBSSxHQUFVLEtBQUssT0FHZixHQUFRLFNBQVcsSUFDckIsS0FBSyxhQUVELElBQVUsRUFDWixFQUFPLEVBQVMsR0FFaEIsS0FBSyxRQUFRLEdBQUssR0FJRSxJQUFwQixLQUFLLFlBQ1AsRUFBUSxFQUFTLEtBQUssVUFJMUIsRUFBVyxVQUFVLGNBQWdCLFNBQXVCLEVBQVMsR0FDbkUsR0FBSSxHQUFhLElBRWpCLEdBQVUsTUFBUyxHQUFXLFNBQVUsR0FDdEMsTUFBTyxHQUFXLFdBQVcsRUFBVyxFQUFHLElBQzFDLFNBQVUsR0FDWCxNQUFPLEdBQVcsV0FBVyxFQUFVLEVBQUcsTUFJdkMsS0FtU0wsRUFBWSxXQUNkLFFBQVMsR0FBUSxHQUNmLEtBQUssR0FBYyxJQUNuQixLQUFLLFFBQVUsS0FBSyxXQUFTLEdBQzdCLEtBQUssZ0JBRUQsSUFBUyxJQUNTLGtCQUFiLElBQTJCLElBQ2xDLGVBQWdCLEdBQVUsRUFBa0IsS0FBTSxHQUFZLEtBNlBsRSxNQS9EQSxHQUFRLFVBQVUsTUFBUSxTQUFnQixHQUN4QyxNQUFPLE1BQUssS0FBSyxLQUFNLElBMkN6QixFQUFRLFVBQVUsUUFBVSxTQUFrQixHQUM1QyxHQUFJLEdBQVUsS0FDVixFQUFjLEVBQVEsV0FFMUIsT0FBSSxHQUFXLEdBQ04sRUFBUSxLQUFLLFNBQVUsR0FDNUIsTUFBTyxHQUFZLFFBQVEsS0FBWSxLQUFLLFdBQzFDLE1BQU8sTUFFUixTQUFVLEdBQ1gsTUFBTyxHQUFZLFFBQVEsS0FBWSxLQUFLLFdBQzFDLEtBQU0sT0FLTCxFQUFRLEtBQUssRUFBVSxJQUd6QixJQWtEVCxPQS9DQSxHQUFVLFVBQVUsS0FBTyxFQUMzQixFQUFVLElBQU0sRUFDaEIsRUFBVSxLQUFPLEVBQ2pCLEVBQVUsUUFBVSxFQUNwQixFQUFVLE9BQVMsRUFDbkIsRUFBVSxjQUFnQixFQUMxQixFQUFVLFNBQVcsRUFDckIsRUFBVSxNQUFRLEVBcUNsQixFQUFVLFNBQVcsRUFDckIsRUFBVSxRQUFVLEVBRWI7Ozs7O0FDL29DUCxRQUFRLEtBQU8sU0FBVSxFQUFRLEVBQVEsRUFBTSxFQUFNLEdBQ25ELEdBQUksR0FBRyxFQUNILEVBQWlCLEVBQVQsRUFBYyxFQUFPLEVBQzdCLEdBQVEsR0FBSyxHQUFRLEVBQ3JCLEVBQVEsR0FBUSxFQUNoQixHQUFTLEVBQ1QsRUFBSSxFQUFRLEVBQVMsRUFBSyxFQUMxQixFQUFJLEdBQVEsRUFBSSxFQUNoQixFQUFJLEVBQU8sRUFBUyxFQU94QixLQUxBLEdBQUssRUFFTCxFQUFJLEdBQU0sSUFBTyxHQUFVLEVBQzNCLEtBQVEsRUFDUixHQUFTLEVBQ0YsRUFBUSxFQUFHLEVBQVMsSUFBSixFQUFXLEVBQU8sRUFBUyxHQUFJLEdBQUssRUFBRyxHQUFTLEdBS3ZFLElBSEEsRUFBSSxHQUFNLElBQU8sR0FBVSxFQUMzQixLQUFRLEVBQ1IsR0FBUyxFQUNGLEVBQVEsRUFBRyxFQUFTLElBQUosRUFBVyxFQUFPLEVBQVMsR0FBSSxHQUFLLEVBQUcsR0FBUyxHQUV2RSxHQUFVLElBQU4sRUFDRixFQUFJLEVBQUksTUFDSCxDQUFBLEdBQUksSUFBTSxFQUNmLE1BQU8sR0FBSSxJQUFzQixFQUFBLEdBQWQsR0FBSyxFQUFJLEVBRTVCLElBQVEsS0FBSyxJQUFJLEVBQUcsR0FDcEIsR0FBUSxFQUVWLE9BQVEsR0FBSyxFQUFJLEdBQUssRUFBSSxLQUFLLElBQUksRUFBRyxFQUFJLElBRzVDLFFBQVEsTUFBUSxTQUFVLEVBQVEsRUFBTyxFQUFRLEVBQU0sRUFBTSxHQUMzRCxHQUFJLEdBQUcsRUFBRyxFQUNOLEVBQWlCLEVBQVQsRUFBYyxFQUFPLEVBQzdCLEdBQVEsR0FBSyxHQUFRLEVBQ3JCLEVBQVEsR0FBUSxFQUNoQixFQUFlLEtBQVQsRUFBYyxLQUFLLElBQUksR0FBSSxJQUFNLEtBQUssSUFBSSxHQUFJLElBQU0sRUFDMUQsRUFBSSxFQUFPLEVBQUssRUFBUyxFQUN6QixFQUFJLEVBQU8sR0FBSyxFQUNoQixFQUFJLEVBQVEsR0FBZ0IsSUFBVixHQUFlLEVBQUksRUFBUSxFQUFLLEVBQUksQ0FtQzFELEtBakNBLEVBQVEsS0FBSyxJQUFJLEdBRWIsTUFBTSxJQUFVLElBQVUsRUFBQSxHQUM1QixFQUFJLE1BQU0sR0FBUyxFQUFJLEVBQ3ZCLEVBQUksSUFFSixFQUFJLEtBQUssTUFBTSxLQUFLLElBQUksR0FBUyxLQUFLLEtBQ2xDLEdBQVMsRUFBSSxLQUFLLElBQUksR0FBSSxJQUFNLElBQ2xDLElBQ0EsR0FBSyxHQUdMLEdBREUsRUFBSSxHQUFTLEVBQ04sRUFBSyxFQUVMLEVBQUssS0FBSyxJQUFJLEVBQUcsRUFBSSxHQUU1QixFQUFRLEdBQUssSUFDZixJQUNBLEdBQUssR0FHSCxFQUFJLEdBQVMsR0FDZixFQUFJLEVBQ0osRUFBSSxHQUNLLEVBQUksR0FBUyxHQUN0QixHQUFNLEVBQVEsRUFBSyxHQUFLLEtBQUssSUFBSSxFQUFHLEdBQ3BDLEdBQVEsSUFFUixFQUFJLEVBQVEsS0FBSyxJQUFJLEVBQUcsRUFBUSxHQUFLLEtBQUssSUFBSSxFQUFHLEdBQ2pELEVBQUksSUFJRCxHQUFRLEVBQUcsRUFBTyxFQUFTLEdBQVMsSUFBSixFQUFVLEdBQUssRUFBRyxHQUFLLElBQUssR0FBUSxHQUkzRSxJQUZBLEVBQUssR0FBSyxFQUFRLEVBQ2xCLEdBQVEsRUFDRCxFQUFPLEVBQUcsRUFBTyxFQUFTLEdBQVMsSUFBSixFQUFVLEdBQUssRUFBRyxHQUFLLElBQUssR0FBUSxHQUUxRSxFQUFPLEVBQVMsRUFBSSxJQUFVLElBQUo7OztBQzNFNUIsT0FBTyxRQUFVLFNBQW1CLEdBQ2xDLE1BQWMsT0FBUCxHQUFrQyxNQUFuQixFQUFJLGFBQ1ksa0JBQTdCLEdBQUksWUFBWSxVQUEyQixFQUFJLFlBQVksU0FBUzs7O0FDVC9FLEdBQUksYUFBYyxRQUVsQixRQUFPLFFBQVUsTUFBTSxTQUFXLFNBQVUsR0FDMUMsTUFBNkIsa0JBQXRCLFNBQVMsS0FBSzs7O0NDVXZCLFNBQVksRUFBUSxHQUVuQixZQUV1QixpQkFBWCxTQUFpRCxnQkFBbkIsUUFBTyxRQVNoRCxPQUFPLFFBQVUsRUFBTyxTQUN2QixFQUFTLEdBQVEsR0FDakIsU0FBVSxHQUNULElBQU0sRUFBRSxTQUNQLEtBQU0sSUFBSSxPQUFPLDJDQUVsQixPQUFPLEdBQVMsSUFHbEIsRUFBUyxJQUlZLG1CQUFYLFFBQXlCLE9BQVMsS0FBTSxTQUFVLEVBQVEsR0FNdEUsWUFvREMsU0FBUyxHQUFTLEVBQU0sRUFBTSxHQUM3QixFQUFNLEdBQU8sRUFFYixJQUFJLEdBQUcsRUFDTixFQUFTLEVBQUksY0FBZSxTQUc3QixJQURBLEVBQU8sS0FBTyxFQUNULEVBQ0osSUFBTSxJQUFLLEtBWVYsRUFBTSxFQUFNLElBQU8sRUFBSyxjQUFnQixFQUFLLGFBQWMsS0FFMUQsRUFBTyxhQUFjLEVBQUcsRUFJM0IsR0FBSSxLQUFLLFlBQWEsR0FBUyxXQUFXLFlBQWEsR0FJekQsUUFBUyxHQUFRLEdBQ2hCLE1BQVksT0FBUCxFQUNHLEVBQU0sR0FJUSxnQkFBUixJQUFtQyxrQkFBUixHQUN4QyxHQUFZLEdBQVMsS0FBTSxLQUFXLGVBQy9CLEdBd1dULFFBQVMsR0FBYSxHQU1yQixHQUFJLEtBQVcsR0FBTyxVQUFZLElBQU8sRUFBSSxPQUM1QyxFQUFPLEVBQVEsRUFFaEIsUUFBSyxHQUFZLEtBQVMsR0FBVSxLQUlwQixVQUFULEdBQStCLElBQVgsR0FDUixnQkFBWCxJQUF1QixFQUFTLEdBQU8sRUFBUyxJQUFPLElBNHdFaEUsUUFBUyxHQUFVLEVBQU0sR0FFdkIsTUFBTyxHQUFLLFVBQVksRUFBSyxTQUFTLGdCQUFrQixFQUFLLGNBUS9ELFFBQVMsR0FBUSxFQUFVLEVBQVcsR0FDckMsTUFBSyxJQUFZLEdBQ1QsR0FBTyxLQUFNLEVBQVUsU0FBVSxFQUFNLEdBQzdDLFFBQVMsRUFBVSxLQUFNLEVBQU0sRUFBRyxLQUFXLElBSzFDLEVBQVUsU0FDUCxHQUFPLEtBQU0sRUFBVSxTQUFVLEdBQ3ZDLE1BQVMsS0FBUyxJQUFnQixJQUtWLGdCQUFkLEdBQ0osR0FBTyxLQUFNLEVBQVUsU0FBVSxHQUN2QyxNQUFTLElBQVEsS0FBTSxFQUFXLElBQVUsSUFBUSxJQUsvQyxHQUFPLE9BQVEsRUFBVyxFQUFVLEdBaVI1QyxRQUFTLEdBQVMsRUFBSyxHQUN0QixNQUFVLEVBQU0sRUFBSyxLQUE0QixJQUFqQixFQUFJLFdBQ3BDLE1BQU8sR0FxRlIsUUFBUyxHQUFlLEdBQ3ZCLEdBQUksS0FJSixPQUhBLElBQU8sS0FBTSxFQUFRLE1BQU8sUUFBdUIsU0FBVSxFQUFHLEdBQy9ELEVBQVEsSUFBUyxJQUVYLEVBNE5SLFFBQVMsR0FBVSxHQUNsQixNQUFPLEdBRVIsUUFBUyxHQUFTLEdBQ2pCLEtBQU0sR0FHUCxRQUFTLEdBQVksRUFBTyxFQUFTLEVBQVEsR0FDNUMsR0FBSSxFQUVKLEtBR00sR0FBUyxHQUFjLEVBQVMsRUFBTSxTQUMxQyxFQUFPLEtBQU0sR0FBUSxLQUFNLEdBQVUsS0FBTSxHQUdoQyxHQUFTLEdBQWMsRUFBUyxFQUFNLE1BQ2pELEVBQU8sS0FBTSxFQUFPLEVBQVMsR0FRN0IsRUFBUSxVQUFPLElBQWEsR0FBUSxNQUFPLElBTTNDLE1BQVEsR0FJVCxFQUFPLFVBQU8sSUFBYSxLQTZhN0IsUUFBUyxLQUNSLEdBQVMsb0JBQXFCLG1CQUFvQixHQUNsRCxFQUFPLG9CQUFxQixPQUFRLEdBQ3BDLEdBQU8sUUE0RlIsUUFBUyxHQUFZLEVBQUssR0FDekIsTUFBTyxHQUFPLGNBTWYsUUFBUyxHQUFXLEdBQ25CLE1BQU8sR0FBTyxRQUFTLEdBQVcsT0FBUSxRQUFTLEdBQVksR0FnQmhFLFFBQVMsS0FDUixLQUFLLFFBQVUsR0FBTyxRQUFVLEVBQUssTUF3S3RDLFFBQVMsR0FBUyxHQUNqQixNQUFjLFNBQVQsR0FJUyxVQUFULElBSVMsU0FBVCxFQUNHLEtBSUgsS0FBVSxFQUFPLElBQ2IsRUFHSixHQUFPLEtBQU0sR0FDVixLQUFLLE1BQU8sR0FHYixHQUdSLFFBQVMsR0FBVSxFQUFNLEVBQUssR0FDN0IsR0FBSSxFQUlKLFFBQWMsS0FBVCxHQUF3QyxJQUFsQixFQUFLLFNBSS9CLEdBSEEsRUFBTyxRQUFVLEVBQUksUUFBUyxHQUFZLE9BQVEsY0FHN0IsaUJBRnJCLEVBQU8sRUFBSyxhQUFjLElBRU0sQ0FDL0IsSUFDQyxFQUFPLEVBQVMsR0FDZixNQUFRLElBR1YsR0FBUyxJQUFLLEVBQU0sRUFBSyxPQUV6QixPQUFPLEVBR1QsT0FBTyxHQXlUUixRQUFTLEdBQVcsRUFBTSxFQUFNLEVBQVksR0FDM0MsR0FBSSxHQUFVLEVBQ2IsRUFBZ0IsR0FDaEIsRUFBZSxFQUNkLFdBQ0MsTUFBTyxHQUFNLE9BRWQsV0FDQyxNQUFPLElBQU8sSUFBSyxFQUFNLEVBQU0sS0FFakMsRUFBVSxJQUNWLEVBQU8sR0FBYyxFQUFZLEtBQVMsR0FBTyxVQUFXLEdBQVMsR0FBSyxNQUcxRSxFQUFnQixFQUFLLFdBQ2xCLEdBQU8sVUFBVyxJQUFtQixPQUFULElBQWtCLElBQ2hELEdBQVEsS0FBTSxHQUFPLElBQUssRUFBTSxHQUVsQyxJQUFLLEdBQWlCLEVBQWUsS0FBUSxFQUFPLENBWW5ELElBUkEsR0FBb0IsRUFHcEIsRUFBTyxHQUFRLEVBQWUsR0FHOUIsR0FBaUIsR0FBVyxFQUVwQixLQUlQLEdBQU8sTUFBTyxFQUFNLEVBQU0sRUFBZ0IsSUFDbkMsRUFBSSxJQUFZLEdBQU0sRUFBUSxJQUFpQixHQUFXLE1BQVcsSUFDM0UsRUFBZ0IsR0FFakIsR0FBZ0MsQ0FJakMsSUFBZ0MsRUFDaEMsR0FBTyxNQUFPLEVBQU0sRUFBTSxFQUFnQixHQUcxQyxFQUFhLE1BZ0JkLE1BYkssS0FDSixHQUFpQixJQUFrQixHQUFXLEVBRzlDLEVBQVcsRUFBWSxHQUN0QixHQUFrQixFQUFZLEdBQU0sR0FBTSxFQUFZLElBQ3JELEVBQVksR0FDVCxJQUNKLEVBQU0sS0FBTyxFQUNiLEVBQU0sTUFBUSxFQUNkLEVBQU0sSUFBTSxJQUdQLEVBTVIsUUFBUyxHQUFtQixHQUMzQixHQUFJLEdBQ0gsRUFBTSxFQUFLLGNBQ1gsRUFBVyxFQUFLLFNBQ2hCLEVBQVUsR0FBbUIsRUFFOUIsT0FBSyxLQUlMLEVBQU8sRUFBSSxLQUFLLFlBQWEsRUFBSSxjQUFlLElBQ2hELEVBQVUsR0FBTyxJQUFLLEVBQU0sV0FFNUIsRUFBSyxXQUFXLFlBQWEsR0FFWixTQUFaLElBQ0osRUFBVSxTQUVYLEdBQW1CLEdBQWEsRUFFekIsR0FHUixRQUFTLEdBQVUsRUFBVSxHQU81QixJQU5BLEdBQUksR0FBUyxFQUNaLEtBQ0EsRUFBUSxFQUNSLEVBQVMsRUFBUyxPQUdYLEVBQVEsRUFBUSxJQUN2QixFQUFPLEVBQVUsR0FDWCxFQUFLLFFBSVgsRUFBVSxFQUFLLE1BQU0sUUFDaEIsR0FLYSxTQUFaLElBQ0osRUFBUSxHQUFVLEdBQVMsSUFBSyxFQUFNLFlBQWUsS0FDL0MsRUFBUSxLQUNiLEVBQUssTUFBTSxRQUFVLEtBR0ssS0FBdkIsRUFBSyxNQUFNLFNBQWtCLEdBQW9CLEtBQ3JELEVBQVEsR0FBVSxFQUFtQixLQUdyQixTQUFaLElBQ0osRUFBUSxHQUFVLE9BR2xCLEdBQVMsSUFBSyxFQUFNLFVBQVcsSUFNbEMsS0FBTSxFQUFRLEVBQUcsRUFBUSxFQUFRLElBQ1IsTUFBbkIsRUFBUSxLQUNaLEVBQVUsR0FBUSxNQUFNLFFBQVUsRUFBUSxHQUk1QyxPQUFPLEdBd0RSLFFBQVMsR0FBUSxFQUFTLEdBSXpCLEdBQUksRUFZSixPQVRDLE9BRDRDLEtBQWpDLEVBQVEscUJBQ2IsRUFBUSxxQkFBc0IsR0FBTyxTQUVJLEtBQTdCLEVBQVEsaUJBQ3BCLEVBQVEsaUJBQWtCLEdBQU8sWUFNM0IsS0FBUixHQUFxQixHQUFPLEVBQVUsRUFBUyxHQUM1QyxHQUFPLE9BQVMsR0FBVyxHQUc1QixFQUtSLFFBQVMsR0FBZSxFQUFPLEdBSTlCLElBSEEsR0FBSSxHQUFJLEVBQ1AsRUFBSSxFQUFNLE9BRUgsRUFBSSxFQUFHLElBQ2QsR0FBUyxJQUNSLEVBQU8sR0FDUCxjQUNDLEdBQWUsR0FBUyxJQUFLLEVBQWEsR0FBSyxlQVFuRCxRQUFTLEdBQWUsRUFBTyxFQUFTLEVBQVMsRUFBVyxHQU8zRCxJQU5BLEdBQUksR0FBTSxFQUFLLEVBQUssRUFBTSxFQUFVLEVBQ25DLEVBQVcsRUFBUSx5QkFDbkIsS0FDQSxFQUFJLEVBQ0osRUFBSSxFQUFNLE9BRUgsRUFBSSxFQUFHLElBR2QsSUFGQSxFQUFPLEVBQU8sS0FFUSxJQUFULEVBR1osR0FBd0IsV0FBbkIsRUFBUSxHQUlaLEdBQU8sTUFBTyxFQUFPLEVBQUssVUFBYSxHQUFTLE9BRzFDLElBQU0sR0FBTSxLQUFNLEdBSWxCLENBVU4sSUFUQSxFQUFNLEdBQU8sRUFBUyxZQUFhLEVBQVEsY0FBZSxRQUcxRCxHQUFRLEdBQVMsS0FBTSxLQUFZLEdBQUksS0FBUSxHQUFJLGNBQ25ELEVBQU8sR0FBUyxJQUFTLEdBQVEsU0FDakMsRUFBSSxVQUFZLEVBQU0sR0FBTSxHQUFPLGNBQWUsR0FBUyxFQUFNLEdBR2pFLEVBQUksRUFBTSxHQUNGLEtBQ1AsRUFBTSxFQUFJLFNBS1gsSUFBTyxNQUFPLEVBQU8sRUFBSSxZQUd6QixFQUFNLEVBQVMsV0FHZixFQUFJLFlBQWMsT0F6QmxCLEdBQU0sS0FBTSxFQUFRLGVBQWdCLEdBa0N2QyxLQUhBLEVBQVMsWUFBYyxHQUV2QixFQUFJLEVBQ00sRUFBTyxFQUFPLE1BR3ZCLEdBQUssR0FBYSxHQUFPLFFBQVMsRUFBTSxJQUFlLEVBQ2pELEdBQ0osRUFBUSxLQUFNLE9BZ0JoQixJQVhBLEVBQVcsR0FBWSxHQUd2QixFQUFNLEVBQVEsRUFBUyxZQUFhLEdBQVEsVUFHdkMsR0FDSixFQUFlLEdBSVgsRUFFSixJQURBLEVBQUksRUFDTSxFQUFPLEVBQUssTUFDaEIsR0FBWSxLQUFNLEVBQUssTUFBUSxLQUNuQyxFQUFRLEtBQU0sRUFNbEIsT0FBTyxHQW1DUixRQUFTLEtBQ1IsT0FBTyxFQUdSLFFBQVMsS0FDUixPQUFPLEVBU1IsUUFBUyxHQUFZLEVBQU0sR0FDMUIsTUFBUyxLQUFTLE1BQXFDLFVBQVQsR0FNL0MsUUFBUyxLQUNSLElBQ0MsTUFBTyxJQUFTLGNBQ2YsTUFBUSxLQUdYLFFBQVMsR0FBSSxFQUFNLEVBQU8sRUFBVSxFQUFNLEVBQUksR0FDN0MsR0FBSSxHQUFRLENBR1osSUFBc0IsZ0JBQVYsR0FBcUIsQ0FHUCxnQkFBYixLQUdYLEVBQU8sR0FBUSxFQUNmLE1BQVcsR0FFWixLQUFNLElBQVEsR0FDYixFQUFJLEVBQU0sRUFBTSxFQUFVLEVBQU0sRUFBTyxHQUFRLEVBRWhELE9BQU8sR0FzQlIsR0FuQmEsTUFBUixHQUFzQixNQUFOLEdBR3BCLEVBQUssRUFDTCxFQUFPLE1BQVcsSUFDRCxNQUFOLElBQ2MsZ0JBQWIsSUFHWCxFQUFLLEVBQ0wsTUFBTyxLQUlQLEVBQUssRUFDTCxFQUFPLEVBQ1AsTUFBVyxNQUdELElBQVAsRUFDSixFQUFLLE1BQ0MsS0FBTSxFQUNaLE1BQU8sRUFlUixPQVphLEtBQVIsSUFDSixFQUFTLEVBQ1QsRUFBSyxTQUFVLEdBSWQsTUFEQSxNQUFTLElBQUssR0FDUCxFQUFPLE1BQU8sS0FBTSxZQUk1QixFQUFHLEtBQU8sRUFBTyxPQUFVLEVBQU8sS0FBTyxHQUFPLFNBRTFDLEVBQUssS0FBTSxXQUNqQixHQUFPLE1BQU0sSUFBSyxLQUFNLEVBQU8sRUFBSSxFQUFNLEtBNGEzQyxRQUFTLEdBQWdCLEVBQUksRUFBTSxHQUdsQyxJQUFNLEVBSUwsZ0JBSGtDLEtBQTdCLEdBQVMsSUFBSyxFQUFJLElBQ3RCLEdBQU8sTUFBTSxJQUFLLEVBQUksRUFBTSxHQU05QixJQUFTLElBQUssRUFBSSxHQUFNLEdBQ3hCLEdBQU8sTUFBTSxJQUFLLEVBQUksR0FDckIsV0FBVyxFQUNYLFFBQVMsU0FBVSxHQUNsQixHQUFJLEdBQVUsRUFDYixFQUFRLEdBQVMsSUFBSyxLQUFNLEVBRTdCLElBQXlCLEVBQWxCLEVBQU0sV0FBbUIsS0FBTSxJQUtyQyxHQUFNLEVBQU0sUUFpQ0UsR0FBTyxNQUFNLFFBQVMsUUFBZSxjQUNsRCxFQUFNLHNCQWZOLElBZEEsRUFBUSxHQUFNLEtBQU0sV0FDcEIsR0FBUyxJQUFLLEtBQU0sRUFBTSxHQUsxQixFQUFXLEVBQVksS0FBTSxHQUM3QixLQUFNLEtBQ04sRUFBUyxHQUFTLElBQUssS0FBTSxHQUN4QixJQUFVLEdBQVUsRUFDeEIsR0FBUyxJQUFLLEtBQU0sR0FBTSxHQUUxQixLQUVJLElBQVUsRUFLZCxNQUZBLEdBQU0sMkJBQ04sRUFBTSxpQkFDQyxFQUFPLFVBZUwsR0FBTSxTQUdqQixHQUFTLElBQUssS0FBTSxHQUNuQixNQUFPLEdBQU8sTUFBTSxRQUluQixHQUFPLE9BQVEsRUFBTyxHQUFLLEdBQU8sTUFBTSxXQUN4QyxFQUFNLE1BQU8sR0FDYixRQUtGLEVBQU0sK0JBc1NWLFFBQVMsR0FBb0IsRUFBTSxHQUNsQyxNQUFLLEdBQVUsRUFBTSxVQUNwQixFQUErQixLQUFyQixFQUFRLFNBQWtCLEVBQVUsRUFBUSxXQUFZLE1BRTNELEdBQVEsR0FBTyxTQUFVLFNBQVcsSUFBTyxFQUc1QyxFQUlSLFFBQVMsR0FBZSxHQUV2QixNQURBLEdBQUssTUFBeUMsT0FBaEMsRUFBSyxhQUFjLFNBQXNCLElBQU0sRUFBSyxLQUMzRCxFQUVSLFFBQVMsR0FBZSxHQU92QixNQU4yQyxXQUFwQyxFQUFLLE1BQVEsSUFBSyxNQUFPLEVBQUcsR0FDbEMsRUFBSyxLQUFPLEVBQUssS0FBSyxNQUFPLEdBRTdCLEVBQUssZ0JBQWlCLFFBR2hCLEVBR1IsUUFBUyxHQUFnQixFQUFLLEdBQzdCLEdBQUksR0FBRyxFQUFHLEVBQU0sRUFBVSxFQUFVLEVBQVUsRUFBVSxDQUV4RCxJQUF1QixJQUFsQixFQUFLLFNBQVYsQ0FLQSxHQUFLLEdBQVMsUUFBUyxLQUN0QixFQUFXLEdBQVMsT0FBUSxHQUM1QixFQUFXLEdBQVMsSUFBSyxFQUFNLEdBQy9CLEVBQVMsRUFBUyxRQUVKLE9BQ04sR0FBUyxPQUNoQixFQUFTLFNBRVQsS0FBTSxJQUFRLEdBQ2IsSUFBTSxFQUFJLEVBQUcsRUFBSSxFQUFRLEdBQU8sT0FBUSxFQUFJLEVBQUcsSUFDOUMsR0FBTyxNQUFNLElBQUssRUFBTSxFQUFNLEVBQVEsR0FBUSxJQU83QyxHQUFTLFFBQVMsS0FDdEIsRUFBVyxHQUFTLE9BQVEsR0FDNUIsRUFBVyxHQUFPLFVBQVksR0FFOUIsR0FBUyxJQUFLLEVBQU0sS0FLdEIsUUFBUyxHQUFVLEVBQUssR0FDdkIsR0FBSSxHQUFXLEVBQUssU0FBUyxhQUdYLFdBQWIsR0FBd0IsR0FBZSxLQUFNLEVBQUksTUFDckQsRUFBSyxRQUFVLEVBQUksUUFHSyxVQUFiLEdBQXFDLGFBQWIsSUFDbkMsRUFBSyxhQUFlLEVBQUksY0FJMUIsUUFBUyxHQUFVLEVBQVksRUFBTSxFQUFVLEdBRzlDLEVBQU8sR0FBTyxTQUFXLEVBRXpCLElBQUksR0FBVSxFQUFPLEVBQVMsRUFBWSxFQUFNLEVBQy9DLEVBQUksRUFDSixFQUFJLEVBQVcsT0FDZixFQUFXLEVBQUksRUFDZixFQUFRLEVBQU0sR0FDZCxFQUFrQixHQUFZLEVBRy9CLElBQUssR0FDRCxFQUFJLEdBQXNCLGdCQUFWLEtBQ2hCLEdBQVEsWUFBYyxHQUFTLEtBQU0sR0FDeEMsTUFBTyxHQUFXLEtBQU0sU0FBVSxHQUNqQyxHQUFJLEdBQU8sRUFBVyxHQUFJLEVBQ3JCLEtBQ0osRUFBTSxHQUFNLEVBQU0sS0FBTSxLQUFNLEVBQU8sRUFBSyxTQUUzQyxFQUFVLEVBQU0sRUFBTSxFQUFVLElBSWxDLElBQUssSUFDSixFQUFXLEVBQWUsRUFBTSxFQUFZLEdBQUksZUFBZSxFQUFPLEVBQVksR0FDbEYsRUFBUSxFQUFTLFdBRW1CLElBQS9CLEVBQVMsV0FBVyxTQUN4QixFQUFXLEdBSVAsR0FBUyxHQUFVLENBT3ZCLElBTkEsRUFBVSxHQUFPLElBQUssRUFBUSxFQUFVLFVBQVksR0FDcEQsRUFBYSxFQUFRLE9BS2IsRUFBSSxFQUFHLElBQ2QsRUFBTyxFQUVGLElBQU0sSUFDVixFQUFPLEdBQU8sTUFBTyxHQUFNLEdBQU0sR0FHNUIsR0FJSixHQUFPLE1BQU8sRUFBUyxFQUFRLEVBQU0sWUFJdkMsRUFBUyxLQUFNLEVBQVksR0FBSyxFQUFNLEVBR3ZDLElBQUssRUFPSixJQU5BLEVBQU0sRUFBUyxFQUFRLE9BQVMsR0FBSSxjQUdwQyxHQUFPLElBQUssRUFBUyxHQUdmLEVBQUksRUFBRyxFQUFJLEVBQVksSUFDNUIsRUFBTyxFQUFTLEdBQ1gsR0FBWSxLQUFNLEVBQUssTUFBUSxNQUNsQyxHQUFTLE9BQVEsRUFBTSxlQUN4QixHQUFPLFNBQVUsRUFBSyxLQUVqQixFQUFLLEtBQThDLFlBQXJDLEVBQUssTUFBUSxJQUFLLGNBRy9CLEdBQU8sV0FBYSxFQUFLLFVBQzdCLEdBQU8sU0FBVSxFQUFLLEtBQ3JCLE1BQU8sRUFBSyxPQUFTLEVBQUssYUFBYyxXQUkxQyxFQUFTLEVBQUssWUFBWSxRQUFTLEdBQWMsSUFBTSxFQUFNLElBUW5FLE1BQU8sR0FHUixRQUFTLEdBQVEsRUFBTSxFQUFVLEdBS2hDLElBSkEsR0FBSSxHQUNILEVBQVEsRUFBVyxHQUFPLE9BQVEsRUFBVSxHQUFTLEVBQ3JELEVBQUksRUFFNEIsT0FBdkIsRUFBTyxFQUFPLElBQWUsSUFDaEMsR0FBOEIsSUFBbEIsRUFBSyxVQUN0QixHQUFPLFVBQVcsRUFBUSxJQUd0QixFQUFLLGFBQ0osR0FBWSxHQUFZLElBQzVCLEVBQWUsRUFBUSxFQUFNLFdBRTlCLEVBQUssV0FBVyxZQUFhLEdBSS9CLE9BQU8sR0E0V1IsUUFBUyxHQUFRLEVBQU0sRUFBTSxHQUM1QixHQUFJLEdBQU8sRUFBVSxFQUFVLEVBTTlCLEVBQVEsRUFBSyxLQXFDZCxPQW5DQSxHQUFXLEdBQVksR0FBVyxHQUs3QixJQUNKLEVBQU0sRUFBUyxpQkFBa0IsSUFBVSxFQUFVLEdBRXhDLEtBQVIsR0FBZSxHQUFZLEtBQy9CLEVBQU0sR0FBTyxNQUFPLEVBQU0sS0FRckIsR0FBUSxrQkFBb0IsR0FBVSxLQUFNLElBQVMsR0FBVSxLQUFNLEtBRzFFLEVBQVEsRUFBTSxNQUNkLEVBQVcsRUFBTSxTQUNqQixFQUFXLEVBQU0sU0FHakIsRUFBTSxTQUFXLEVBQU0sU0FBVyxFQUFNLE1BQVEsRUFDaEQsRUFBTSxFQUFTLE1BR2YsRUFBTSxNQUFRLEVBQ2QsRUFBTSxTQUFXLEVBQ2pCLEVBQU0sU0FBVyxRQUlKLEtBQVIsRUFJTixFQUFNLEdBQ04sRUFJRixRQUFTLEdBQWMsRUFBYSxHQUduQyxPQUNDLElBQUssV0FDSixNQUFLLGdCQUlHLE1BQUssS0FLSixLQUFLLElBQU0sR0FBUyxNQUFPLEtBQU0sYUFXN0MsUUFBUyxHQUFnQixHQU14QixJQUhBLEdBQUksR0FBVSxFQUFNLEdBQUksY0FBZ0IsRUFBSyxNQUFPLEdBQ25ELEVBQUksR0FBWSxPQUVULEtBRVAsSUFEQSxFQUFPLEdBQWEsR0FBTSxJQUNiLElBQ1osTUFBTyxHQU1WLFFBQVMsR0FBZSxHQUN2QixHQUFJLEdBQVEsR0FBTyxTQUFVLElBQVUsR0FBYSxFQUVwRCxPQUFLLEtBR0EsSUFBUSxJQUNMLEVBRUQsR0FBYSxHQUFTLEVBQWdCLElBQVUsR0FpQnhELFFBQVMsR0FBbUIsRUFBTSxFQUFPLEdBSXhDLEdBQUksR0FBVSxHQUFRLEtBQU0sRUFDNUIsT0FBTyxHQUdOLEtBQUssSUFBSyxFQUFHLEVBQVMsSUFBUSxHQUFZLEtBQVUsRUFBUyxJQUFPLE1BQ3BFLEVBR0YsUUFBUyxHQUFvQixFQUFNLEVBQVcsRUFBSyxFQUFhLEVBQVEsR0FDdkUsR0FBSSxHQUFrQixVQUFkLEVBQXdCLEVBQUksRUFDbkMsRUFBUSxFQUNSLEVBQVEsQ0FHVCxJQUFLLEtBQVUsRUFBYyxTQUFXLFdBQ3ZDLE1BQU8sRUFHUixNQUFRLEVBQUksRUFBRyxHQUFLLEVBR04sV0FBUixJQUNKLEdBQVMsR0FBTyxJQUFLLEVBQU0sRUFBTSxHQUFXLElBQUssRUFBTSxJQUlsRCxHQW1CUSxZQUFSLElBQ0osR0FBUyxHQUFPLElBQUssRUFBTSxVQUFZLEdBQVcsSUFBSyxFQUFNLElBSWpELFdBQVIsSUFDSixHQUFTLEdBQU8sSUFBSyxFQUFNLFNBQVcsR0FBVyxHQUFNLFNBQVMsRUFBTSxNQXRCdkUsR0FBUyxHQUFPLElBQUssRUFBTSxVQUFZLEdBQVcsSUFBSyxFQUFNLEdBR2hELFlBQVIsRUFDSixHQUFTLEdBQU8sSUFBSyxFQUFNLFNBQVcsR0FBVyxHQUFNLFNBQVMsRUFBTSxHQUl0RSxHQUFTLEdBQU8sSUFBSyxFQUFNLFNBQVcsR0FBVyxHQUFNLFNBQVMsRUFBTSxHQW9DekUsUUFoQk0sR0FBZSxHQUFlLElBSW5DLEdBQVMsS0FBSyxJQUFLLEVBQUcsS0FBSyxLQUMxQixFQUFNLFNBQVcsRUFBVyxHQUFJLGNBQWdCLEVBQVUsTUFBTyxJQUNqRSxFQUNBLEVBQ0EsRUFDQSxNQUlNLEdBR0QsRUFHUixRQUFTLEdBQWtCLEVBQU0sRUFBVyxHQUczQyxHQUFJLEdBQVMsR0FBVyxHQUl2QixHQUFtQixHQUFRLHFCQUF1QixFQUNsRCxFQUFjLEdBQ3NDLGVBQW5ELEdBQU8sSUFBSyxFQUFNLGFBQWEsRUFBTyxHQUN2QyxFQUFtQixFQUVuQixFQUFNLEVBQVEsRUFBTSxFQUFXLEdBQy9CLEVBQWEsU0FBVyxFQUFXLEdBQUksY0FBZ0IsRUFBVSxNQUFPLEVBSXpFLElBQUssR0FBVSxLQUFNLEdBQVEsQ0FDNUIsSUFBTSxFQUNMLE1BQU8sRUFFUixHQUFNLE9BZ0NQLFFBcEJRLEdBQVEscUJBQXVCLEdBQzlCLFNBQVIsSUFDQyxXQUFZLElBQTBELFdBQWpELEdBQU8sSUFBSyxFQUFNLFdBQVcsRUFBTyxLQUMxRCxFQUFLLGlCQUFpQixTQUV0QixFQUFpRSxlQUFuRCxHQUFPLElBQUssRUFBTSxhQUFhLEVBQU8sSUFLcEQsRUFBbUIsSUFBYyxNQUVoQyxFQUFNLEVBQU0sTUFLZCxFQUFNLFdBQVksSUFBUyxHQUkxQixFQUNDLEVBQ0EsRUFDQSxJQUFXLEVBQWMsU0FBVyxXQUNwQyxFQUNBLEVBR0EsR0FFRSxLQStTTCxRQUFTLEdBQU8sRUFBTSxFQUFTLEVBQU0sRUFBSyxHQUN6QyxNQUFPLElBQUksR0FBTSxVQUFVLEtBQU0sRUFBTSxFQUFTLEVBQU0sRUFBSyxHQTBINUQsUUFBUyxLQUNILE1BQ3FCLElBQXBCLEdBQVMsUUFBb0IsRUFBTyxzQkFDeEMsRUFBTyxzQkFBdUIsR0FFOUIsRUFBTyxXQUFZLEVBQVUsR0FBTyxHQUFHLFVBR3hDLEdBQU8sR0FBRyxRQUtaLFFBQVMsS0FJUixNQUhBLEdBQU8sV0FBWSxXQUNsQixPQUFRLEtBRUEsR0FBUSxLQUFLLE1BSXZCLFFBQVMsR0FBTyxFQUFNLEdBQ3JCLEdBQUksR0FDSCxFQUFJLEVBQ0osR0FBVSxPQUFRLEVBS25CLEtBREEsRUFBZSxFQUFlLEVBQUksRUFDMUIsRUFBSSxFQUFHLEdBQUssRUFBSSxFQUN2QixFQUFRLEdBQVcsR0FDbkIsRUFBTyxTQUFXLEdBQVUsRUFBTyxVQUFZLEdBQVUsQ0FPMUQsT0FKSyxLQUNKLEVBQU0sUUFBVSxFQUFNLE1BQVEsR0FHeEIsRUFHUixRQUFTLEdBQWEsRUFBTyxFQUFNLEdBS2xDLElBSkEsR0FBSSxHQUNILEdBQWUsRUFBVSxTQUFVLFFBQWUsT0FBUSxFQUFVLFNBQVUsTUFDOUUsRUFBUSxFQUNSLEVBQVMsRUFBVyxPQUNiLEVBQVEsRUFBUSxJQUN2QixHQUFPLEVBQVEsRUFBWSxHQUFRLEtBQU0sRUFBVyxFQUFNLEdBR3pELE1BQU8sR0FLVixRQUFTLEdBQWtCLEVBQU0sRUFBTyxHQUN2QyxHQUFJLEdBQU0sRUFBTyxFQUFRLEVBQU8sRUFBUyxFQUFXLEVBQWdCLEVBQ25FLEVBQVEsU0FBVyxJQUFTLFVBQVksR0FDeEMsRUFBTyxLQUNQLEtBQ0EsRUFBUSxFQUFLLE1BQ2IsRUFBUyxFQUFLLFVBQVksR0FBb0IsR0FDOUMsRUFBVyxHQUFTLElBQUssRUFBTSxTQUcxQixHQUFLLFFBQ1YsRUFBUSxHQUFPLFlBQWEsRUFBTSxNQUNYLE1BQWxCLEVBQU0sV0FDVixFQUFNLFNBQVcsRUFDakIsRUFBVSxFQUFNLE1BQU0sS0FDdEIsRUFBTSxNQUFNLEtBQU8sV0FDWixFQUFNLFVBQ1gsTUFJSCxFQUFNLFdBRU4sRUFBSyxPQUFRLFdBR1osRUFBSyxPQUFRLFdBQ1osRUFBTSxXQUNBLEdBQU8sTUFBTyxFQUFNLE1BQU8sUUFDaEMsRUFBTSxNQUFNLFdBT2hCLEtBQU0sSUFBUSxHQUViLEdBREEsRUFBUSxFQUFPLEdBQ1YsR0FBUyxLQUFNLEdBQVUsQ0FHN0IsU0FGTyxHQUFPLEdBQ2QsRUFBUyxHQUFvQixXQUFWLEVBQ2QsS0FBWSxFQUFTLE9BQVMsUUFBVyxDQUk3QyxHQUFlLFNBQVYsSUFBb0IsT0FBaUMsS0FBckIsRUFBVSxHQUs5QyxRQUpBLElBQVMsRUFPWCxFQUFNLEdBQVMsR0FBWSxFQUFVLElBQVUsR0FBTyxNQUFPLEVBQU0sR0FNckUsSUFEQSxHQUFhLEdBQU8sY0FBZSxNQUNoQixHQUFPLGNBQWUsR0FBekMsQ0FLSyxHQUEyQixJQUFsQixFQUFLLFdBTWxCLEVBQUssVUFBYSxFQUFNLFNBQVUsRUFBTSxVQUFXLEVBQU0sV0FHekQsRUFBaUIsR0FBWSxFQUFTLFFBQ2YsTUFBbEIsSUFDSixFQUFpQixHQUFTLElBQUssRUFBTSxZQUV0QyxFQUFVLEdBQU8sSUFBSyxFQUFNLFdBQ1gsU0FBWixJQUNDLEVBQ0osRUFBVSxHQUlWLEdBQVksSUFBUSxHQUNwQixFQUFpQixFQUFLLE1BQU0sU0FBVyxFQUN2QyxFQUFVLEdBQU8sSUFBSyxFQUFNLFdBQzVCLEdBQVksT0FLRyxXQUFaLEdBQW9DLGlCQUFaLEdBQWdELE1BQWxCLElBQ3JCLFNBQWhDLEdBQU8sSUFBSyxFQUFNLFdBR2hCLElBQ0wsRUFBSyxLQUFNLFdBQ1YsRUFBTSxRQUFVLElBRU0sTUFBbEIsSUFDSixFQUFVLEVBQU0sUUFDaEIsRUFBNkIsU0FBWixFQUFxQixHQUFLLElBRzdDLEVBQU0sUUFBVSxpQkFLZCxFQUFLLFdBQ1QsRUFBTSxTQUFXLFNBQ2pCLEVBQUssT0FBUSxXQUNaLEVBQU0sU0FBVyxFQUFLLFNBQVUsR0FDaEMsRUFBTSxVQUFZLEVBQUssU0FBVSxHQUNqQyxFQUFNLFVBQVksRUFBSyxTQUFVLE1BS25DLEdBQVksQ0FDWixLQUFNLElBQVEsR0FHUCxJQUNBLEVBQ0MsVUFBWSxLQUNoQixFQUFTLEVBQVMsUUFHbkIsRUFBVyxHQUFTLE9BQVEsRUFBTSxVQUFZLFFBQVMsSUFJbkQsSUFDSixFQUFTLFFBQVUsR0FJZixHQUNKLEdBQVksSUFBUSxHQUtyQixFQUFLLEtBQU0sV0FLSixHQUNMLEdBQVksSUFFYixHQUFTLE9BQVEsRUFBTSxTQUN2QixLQUFNLElBQVEsR0FDYixHQUFPLE1BQU8sRUFBTSxFQUFNLEVBQU0sT0FNbkMsRUFBWSxFQUFhLEVBQVMsRUFBVSxHQUFTLEVBQUcsRUFBTSxHQUN0RCxJQUFRLEtBQ2YsRUFBVSxHQUFTLEVBQVUsTUFDeEIsSUFDSixFQUFVLElBQU0sRUFBVSxNQUMxQixFQUFVLE1BQVEsS0FNdEIsUUFBUyxHQUFZLEVBQU8sR0FDM0IsR0FBSSxHQUFPLEVBQU0sRUFBUSxFQUFPLENBR2hDLEtBQU0sSUFBUyxHQWVkLEdBZEEsRUFBTyxFQUFXLEdBQ2xCLEVBQVMsRUFBZSxHQUN4QixFQUFRLEVBQU8sR0FDVixNQUFNLFFBQVMsS0FDbkIsRUFBUyxFQUFPLEdBQ2hCLEVBQVEsRUFBTyxHQUFVLEVBQU8sSUFHNUIsSUFBVSxJQUNkLEVBQU8sR0FBUyxRQUNULEdBQU8sS0FHZixFQUFRLEdBQU8sU0FBVSxLQUNYLFVBQVksR0FBUSxDQUNqQyxFQUFRLEVBQU0sT0FBUSxTQUNmLEdBQU8sRUFJZCxLQUFNLElBQVMsR0FDTixJQUFTLEtBQ2hCLEVBQU8sR0FBVSxFQUFPLEdBQ3hCLEVBQWUsR0FBVSxPQUkzQixHQUFlLEdBQVMsRUFLM0IsUUFBUyxHQUFXLEVBQU0sRUFBWSxHQUNyQyxHQUFJLEdBQ0gsRUFDQSxFQUFRLEVBQ1IsRUFBUyxFQUFVLFdBQVcsT0FDOUIsRUFBVyxHQUFPLFdBQVcsT0FBUSxpQkFHN0IsR0FBSyxPQUViLEVBQU8sV0FDTixHQUFLLEVBQ0osT0FBTyxDQVlSLEtBVkEsR0FBSSxHQUFjLElBQVMsSUFDMUIsRUFBWSxLQUFLLElBQUssRUFBRyxFQUFVLFVBQVksRUFBVSxTQUFXLEdBSXBFLEVBQU8sRUFBWSxFQUFVLFVBQVksRUFDekMsRUFBVSxFQUFJLEVBQ2QsRUFBUSxFQUNSLEVBQVMsRUFBVSxPQUFPLE9BRW5CLEVBQVEsRUFBUSxJQUN2QixFQUFVLE9BQVEsR0FBUSxJQUFLLEVBTWhDLE9BSEEsR0FBUyxXQUFZLEdBQVEsRUFBVyxFQUFTLElBRzVDLEVBQVUsR0FBSyxFQUNaLEdBSUYsR0FDTCxFQUFTLFdBQVksR0FBUSxFQUFXLEVBQUcsSUFJNUMsRUFBUyxZQUFhLEdBQVEsS0FDdkIsSUFFUixFQUFZLEVBQVMsU0FDcEIsS0FBTSxFQUNOLE1BQU8sR0FBTyxVQUFZLEdBQzFCLEtBQU0sR0FBTyxRQUFRLEdBQ3BCLGlCQUNBLE9BQVEsR0FBTyxPQUFPLFVBQ3BCLEdBQ0gsbUJBQW9CLEVBQ3BCLGdCQUFpQixFQUNqQixVQUFXLElBQVMsSUFDcEIsU0FBVSxFQUFRLFNBQ2xCLFVBQ0EsWUFBYSxTQUFVLEVBQU0sR0FDNUIsR0FBSSxHQUFRLEdBQU8sTUFBTyxFQUFNLEVBQVUsS0FBTSxFQUFNLEVBQ3BELEVBQVUsS0FBSyxjQUFlLElBQVUsRUFBVSxLQUFLLE9BRXpELE9BREEsR0FBVSxPQUFPLEtBQU0sR0FDaEIsR0FFUixLQUFNLFNBQVUsR0FDZixHQUFJLEdBQVEsRUFJWCxFQUFTLEVBQVUsRUFBVSxPQUFPLE9BQVMsQ0FDOUMsSUFBSyxFQUNKLE1BQU8sS0FHUixLQURBLEdBQVUsRUFDRixFQUFRLEVBQVEsSUFDdkIsRUFBVSxPQUFRLEdBQVEsSUFBSyxFQVVoQyxPQU5LLElBQ0osRUFBUyxXQUFZLEdBQVEsRUFBVyxFQUFHLElBQzNDLEVBQVMsWUFBYSxHQUFRLEVBQVcsS0FFekMsRUFBUyxXQUFZLEdBQVEsRUFBVyxJQUVsQyxRQUdULEVBQVEsRUFBVSxLQUluQixLQUZBLEVBQVksRUFBTyxFQUFVLEtBQUssZUFFMUIsRUFBUSxFQUFRLElBRXZCLEdBREEsRUFBUyxFQUFVLFdBQVksR0FBUSxLQUFNLEVBQVcsRUFBTSxFQUFPLEVBQVUsTUFNOUUsTUFKSyxJQUFZLEVBQU8sUUFDdkIsR0FBTyxZQUFhLEVBQVUsS0FBTSxFQUFVLEtBQUssT0FBUSxLQUMxRCxFQUFPLEtBQUssS0FBTSxJQUViLENBeUJULE9BckJBLElBQU8sSUFBSyxFQUFPLEVBQWEsR0FFM0IsR0FBWSxFQUFVLEtBQUssUUFDL0IsRUFBVSxLQUFLLE1BQU0sS0FBTSxFQUFNLEdBSWxDLEVBQ0UsU0FBVSxFQUFVLEtBQUssVUFDekIsS0FBTSxFQUFVLEtBQUssS0FBTSxFQUFVLEtBQUssVUFDMUMsS0FBTSxFQUFVLEtBQUssTUFDckIsT0FBUSxFQUFVLEtBQUssUUFFekIsR0FBTyxHQUFHLE1BQ1QsR0FBTyxPQUFRLEdBQ2QsS0FBTSxFQUNOLEtBQU0sRUFDTixNQUFPLEVBQVUsS0FBSyxTQUlqQixFQWlsQlAsUUFBUyxHQUFrQixHQUUxQixPQURhLEVBQU0sTUFBTyxTQUNaLEtBQU0sS0FJdEIsUUFBUyxHQUFVLEdBQ2xCLE1BQU8sR0FBSyxjQUFnQixFQUFLLGFBQWMsVUFBYSxHQUc3RCxRQUFTLElBQWdCLEdBQ3hCLE1BQUssT0FBTSxRQUFTLEdBQ1osRUFFYyxnQkFBVixHQUNKLEVBQU0sTUFBTyxXQXltQnRCLFFBQVMsSUFBYSxFQUFRLEVBQUssRUFBYSxHQUMvQyxHQUFJLEVBRUosSUFBSyxNQUFNLFFBQVMsR0FHbkIsR0FBTyxLQUFNLEVBQUssU0FBVSxFQUFHLEdBQ3pCLEdBQWUsR0FBUyxLQUFNLEdBR2xDLEVBQUssRUFBUSxHQUtiLEdBQ0MsRUFBUyxLQUFxQixnQkFBTixJQUF1QixNQUFMLEVBQVksRUFBSSxJQUFPLElBQ2pFLEVBQ0EsRUFDQSxTQUtHLElBQU0sR0FBaUMsV0FBbEIsRUFBUSxHQVVuQyxFQUFLLEVBQVEsT0FQYixLQUFNLElBQVEsR0FDYixHQUFhLEVBQVMsSUFBTSxFQUFPLElBQUssRUFBSyxHQUFRLEVBQWEsR0E4SHJFLFFBQVMsSUFBNkIsR0FHckMsTUFBTyxVQUFVLEVBQW9CLEdBRUQsZ0JBQXZCLEtBQ1gsRUFBTyxFQUNQLEVBQXFCLElBR3RCLElBQUksR0FDSCxFQUFJLEVBQ0osRUFBWSxFQUFtQixjQUFjLE1BQU8sT0FFckQsSUFBSyxHQUFZLEdBR2hCLEtBQVUsRUFBVyxFQUFXLE1BR1IsTUFBbEIsRUFBVSxJQUNkLEVBQVcsRUFBUyxNQUFPLElBQU8sS0FDaEMsRUFBVyxHQUFhLEVBQVcsUUFBbUIsUUFBUyxLQUkvRCxFQUFXLEdBQWEsRUFBVyxRQUFtQixLQUFNLElBUW5FLFFBQVMsSUFBK0IsRUFBVyxFQUFTLEVBQWlCLEdBSzVFLFFBQVMsR0FBUyxHQUNqQixHQUFJLEVBY0osT0FiQSxHQUFXLElBQWEsRUFDeEIsR0FBTyxLQUFNLEVBQVcsT0FBa0IsU0FBVSxFQUFHLEdBQ3RELEdBQUksR0FBc0IsRUFBb0IsRUFBUyxFQUFpQixFQUN4RSxPQUFvQyxnQkFBeEIsSUFDVixHQUFxQixFQUFXLEdBS3RCLElBQ0QsRUFBVyxPQURmLElBSE4sRUFBUSxVQUFVLFFBQVMsR0FDM0IsRUFBUyxJQUNGLEtBS0YsRUFsQlIsR0FBSSxNQUNILEVBQXFCLElBQWMsRUFvQnBDLE9BQU8sR0FBUyxFQUFRLFVBQVcsTUFBVSxFQUFXLE1BQVMsRUFBUyxLQU0zRSxRQUFTLElBQVksRUFBUSxHQUM1QixHQUFJLEdBQUssRUFDUixFQUFjLEdBQU8sYUFBYSxlQUVuQyxLQUFNLElBQU8sT0FDUSxLQUFmLEVBQUssTUFDUCxFQUFhLEdBQVEsRUFBVyxJQUFVLE9BQWlCLEdBQVEsRUFBSyxHQU81RSxPQUpLLElBQ0osR0FBTyxRQUFRLEVBQU0sRUFBUSxHQUd2QixFQU9SLFFBQVMsSUFBcUIsRUFBRyxFQUFPLEdBT3ZDLElBTEEsR0FBSSxHQUFJLEVBQU0sRUFBZSxFQUM1QixFQUFXLEVBQUUsU0FDYixFQUFZLEVBQUUsVUFHWSxNQUFuQixFQUFXLElBQ2xCLEVBQVUsWUFDRSxLQUFQLElBQ0osRUFBSyxFQUFFLFVBQVksRUFBTSxrQkFBbUIsZ0JBSzlDLElBQUssRUFDSixJQUFNLElBQVEsR0FDYixHQUFLLEVBQVUsSUFBVSxFQUFVLEdBQU8sS0FBTSxHQUFPLENBQ3RELEVBQVUsUUFBUyxFQUNuQixPQU1ILEdBQUssRUFBVyxJQUFPLEdBQ3RCLEVBQWdCLEVBQVcsT0FDckIsQ0FHTixJQUFNLElBQVEsR0FBWSxDQUN6QixJQUFNLEVBQVcsSUFBTyxFQUFFLFdBQVksRUFBTyxJQUFNLEVBQVcsSUFBUSxDQUNyRSxFQUFnQixDQUNoQixPQUVLLElBQ0wsRUFBZ0IsR0FLbEIsRUFBZ0IsR0FBaUIsRUFNbEMsR0FBSyxFQUlKLE1BSEssS0FBa0IsRUFBVyxJQUNqQyxFQUFVLFFBQVMsR0FFYixFQUFXLEdBT3BCLFFBQVMsSUFBYSxFQUFHLEVBQVUsRUFBTyxHQUN6QyxHQUFJLEdBQU8sRUFBUyxFQUFNLEVBQUssRUFDOUIsS0FHQSxFQUFZLEVBQUUsVUFBVSxPQUd6QixJQUFLLEVBQVcsR0FDZixJQUFNLElBQVEsR0FBRSxXQUNmLEVBQVksRUFBSyxlQUFrQixFQUFFLFdBQVksRUFPbkQsS0FIQSxFQUFVLEVBQVUsUUFHWixHQWNQLEdBWkssRUFBRSxlQUFnQixLQUN0QixFQUFPLEVBQUUsZUFBZ0IsSUFBYyxJQUlsQyxHQUFRLEdBQWEsRUFBRSxhQUM1QixFQUFXLEVBQUUsV0FBWSxFQUFVLEVBQUUsV0FHdEMsRUFBTyxFQUNQLEVBQVUsRUFBVSxRQUtuQixHQUFpQixNQUFaLEVBRUosRUFBVSxNQUdKLElBQWMsTUFBVCxHQUFnQixJQUFTLEVBQVUsQ0FNOUMsS0FIQSxFQUFPLEVBQVksRUFBTyxJQUFNLElBQWEsRUFBWSxLQUFPLElBSS9ELElBQU0sSUFBUyxHQUlkLEdBREEsRUFBTSxFQUFNLE1BQU8sS0FDZCxFQUFLLEtBQVEsSUFHakIsRUFBTyxFQUFZLEVBQU8sSUFBTSxFQUFLLEtBQ3BDLEVBQVksS0FBTyxFQUFLLEtBQ2IsRUFHRyxJQUFULEVBQ0osRUFBTyxFQUFZLElBR2dCLElBQXhCLEVBQVksS0FDdkIsRUFBVSxFQUFLLEdBQ2YsRUFBVSxRQUFTLEVBQUssSUFFekIsT0FPSixJQUFjLElBQVQsRUFHSixHQUFLLEdBQVEsRUFBRSxPQUNkLEVBQVcsRUFBTSxPQUVqQixLQUNDLEVBQVcsRUFBTSxHQUNoQixNQUFRLEdBQ1QsT0FDQyxNQUFPLGNBQ1AsTUFBTyxFQUFPLEVBQUksc0JBQXdCLEVBQU8sT0FBUyxJQVNqRSxPQUFTLE1BQU8sVUFBVyxLQUFNLEdBbHhSbEMsR0FBSSxPQUVBLEdBQVcsRUFBTyxTQUVsQixHQUFXLE9BQU8sZUFFbEIsR0FBUSxHQUFJLE1BRVosR0FBUyxHQUFJLE9BRWIsR0FBTyxHQUFJLEtBRVgsR0FBVSxHQUFJLFFBRWQsTUFFQSxHQUFXLEdBQVcsU0FFdEIsR0FBUyxHQUFXLGVBRXBCLEdBQWEsR0FBTyxTQUVwQixHQUF1QixHQUFXLEtBQU0sUUFFeEMsTUFFQSxHQUFhLFNBQXFCLEdBTWhDLE1BQXNCLGtCQUFSLElBQThDLGdCQUFqQixHQUFJLFVBSWpELEdBQVcsU0FBbUIsR0FDaEMsTUFBYyxPQUFQLEdBQWUsSUFBUSxFQUFJLFFBTS9CLElBQ0gsTUFBTSxFQUNOLEtBQUssRUFDTCxPQUFPLEVBQ1AsVUFBVSxHQXFEWCxHQUFTLFNBQVUsRUFBVSxHQUk1QixNQUFPLElBQUksSUFBTyxHQUFHLEtBQU0sRUFBVSxJQUt0QyxHQUFRLG9DQUVULElBQU8sR0FBSyxHQUFPLFdBR2xCLE9BakJVLFFBbUJWLFlBQWEsR0FHYixPQUFRLEVBRVIsUUFBUyxXQUNSLE1BQU8sSUFBTSxLQUFNLE9BS3BCLElBQUssU0FBVSxHQUdkLE1BQVksT0FBUCxFQUNHLEdBQU0sS0FBTSxNQUliLEVBQU0sRUFBSSxLQUFNLEVBQU0sS0FBSyxRQUFXLEtBQU0sSUFLcEQsVUFBVyxTQUFVLEdBR3BCLEdBQUksR0FBTSxHQUFPLE1BQU8sS0FBSyxjQUFlLEVBTTVDLE9BSEEsR0FBSSxXQUFhLEtBR1YsR0FJUixLQUFNLFNBQVUsR0FDZixNQUFPLElBQU8sS0FBTSxLQUFNLElBRzNCLElBQUssU0FBVSxHQUNkLE1BQU8sTUFBSyxVQUFXLEdBQU8sSUFBSyxLQUFNLFNBQVUsRUFBTSxHQUN4RCxNQUFPLEdBQVMsS0FBTSxFQUFNLEVBQUcsT0FJakMsTUFBTyxXQUNOLE1BQU8sTUFBSyxVQUFXLEdBQU0sTUFBTyxLQUFNLGFBRzNDLE1BQU8sV0FDTixNQUFPLE1BQUssR0FBSSxJQUdqQixLQUFNLFdBQ0wsTUFBTyxNQUFLLElBQUssSUFHbEIsR0FBSSxTQUFVLEdBQ2IsR0FBSSxHQUFNLEtBQUssT0FDZCxHQUFLLEdBQU0sRUFBSSxFQUFJLEVBQU0sRUFDMUIsT0FBTyxNQUFLLFVBQVcsR0FBSyxHQUFLLEVBQUksR0FBUSxLQUFNLFNBR3BELElBQUssV0FDSixNQUFPLE1BQUssWUFBYyxLQUFLLGVBS2hDLEtBQU0sR0FDTixLQUFNLEdBQUksS0FDVixPQUFRLEdBQUksUUFHYixHQUFPLE9BQVMsR0FBTyxHQUFHLE9BQVMsV0FDbEMsR0FBSSxHQUFTLEVBQU0sRUFBSyxFQUFNLEVBQWEsRUFDMUMsRUFBUyxVQUFXLE9BQ3BCLEVBQUksRUFDSixFQUFTLFVBQVUsT0FDbkIsR0FBTyxDQXNCUixLQW5CdUIsaUJBQVgsS0FDWCxFQUFPLEVBR1AsRUFBUyxVQUFXLE9BQ3BCLEtBSXNCLGdCQUFYLElBQXdCLEdBQVksS0FDL0MsTUFJSSxJQUFNLElBQ1YsRUFBUyxLQUNULEtBR08sRUFBSSxFQUFRLElBR25CLEdBQXFDLE9BQTlCLEVBQVUsVUFBVyxJQUczQixJQUFNLElBQVEsR0FDYixFQUFPLEVBQVMsR0FJRixjQUFULEdBQXdCLElBQVcsSUFLbkMsR0FBUSxJQUFVLEdBQU8sY0FBZSxLQUMxQyxFQUFjLE1BQU0sUUFBUyxNQUMvQixFQUFNLEVBQVEsR0FJYixFQURJLElBQWdCLE1BQU0sUUFBUyxNQUV2QixHQUFnQixHQUFPLGNBQWUsR0FHMUMsS0FFVCxHQUFjLEVBR2QsRUFBUSxHQUFTLEdBQU8sT0FBUSxFQUFNLEVBQU8sUUFHekIsS0FBVCxJQUNYLEVBQVEsR0FBUyxHQU9yQixPQUFPLElBR1IsR0FBTyxRQUdOLFFBQVMsVUExS0MsUUEwS3NCLEtBQUssVUFBVyxRQUFTLE1BQU8sSUFHaEUsU0FBUyxFQUVULE1BQU8sU0FBVSxHQUNoQixLQUFNLElBQUksT0FBTyxJQUdsQixLQUFNLGFBRU4sY0FBZSxTQUFVLEdBQ3hCLEdBQUksR0FBTyxDQUlYLFVBQU0sR0FBZ0Msb0JBQXpCLEdBQVMsS0FBTSxRQUk1QixFQUFRLEdBQVUsS0FTSyxtQkFEdkIsRUFBTyxHQUFPLEtBQU0sRUFBTyxnQkFBbUIsRUFBTSxjQUNmLEdBQVcsS0FBTSxLQUFXLEtBR2xFLGNBQWUsU0FBVSxHQUN4QixHQUFJLEVBRUosS0FBTSxJQUFRLEdBQ2IsT0FBTyxDQUVSLFFBQU8sR0FJUixXQUFZLFNBQVUsRUFBTSxHQUMzQixFQUFTLEdBQVEsTUFBTyxHQUFXLEVBQVEsU0FHNUMsS0FBTSxTQUFVLEVBQUssR0FDcEIsR0FBSSxHQUFRLEVBQUksQ0FFaEIsSUFBSyxFQUFhLEdBRWpCLElBREEsRUFBUyxFQUFJLE9BQ0wsRUFBSSxJQUNxQyxJQUEzQyxFQUFTLEtBQU0sRUFBSyxHQUFLLEVBQUcsRUFBSyxJQURuQixTQU1wQixLQUFNLElBQUssR0FDVixJQUFnRCxJQUEzQyxFQUFTLEtBQU0sRUFBSyxHQUFLLEVBQUcsRUFBSyxJQUNyQyxLQUtILE9BQU8sSUFJUixLQUFNLFNBQVUsR0FDZixNQUFlLE9BQVIsRUFDTixJQUNFLEVBQU8sSUFBSyxRQUFTLEdBQU8sS0FJaEMsVUFBVyxTQUFVLEVBQUssR0FDekIsR0FBSSxHQUFNLEtBYVYsT0FYWSxPQUFQLElBQ0MsRUFBYSxPQUFRLElBQ3pCLEdBQU8sTUFBTyxFQUNFLGdCQUFSLElBQ0wsR0FBUSxHQUdYLEdBQUssS0FBTSxFQUFLLElBSVgsR0FHUixRQUFTLFNBQVUsRUFBTSxFQUFLLEdBQzdCLE1BQWMsT0FBUCxHQUFlLEVBQUksR0FBUSxLQUFNLEVBQUssRUFBTSxJQUtwRCxNQUFPLFNBQVUsRUFBTyxHQUt2QixJQUpBLEdBQUksSUFBTyxFQUFPLE9BQ2pCLEVBQUksRUFDSixFQUFJLEVBQU0sT0FFSCxFQUFJLEVBQUssSUFDaEIsRUFBTyxLQUFRLEVBQVEsRUFLeEIsT0FGQSxHQUFNLE9BQVMsRUFFUixHQUdSLEtBQU0sU0FBVSxFQUFPLEVBQVUsR0FTaEMsSUFSQSxHQUNDLE1BQ0EsRUFBSSxFQUNKLEVBQVMsRUFBTSxPQUNmLEdBQWtCLEVBSVgsRUFBSSxFQUFRLEtBQ0EsRUFBVSxFQUFPLEdBQUssS0FDaEIsR0FDeEIsRUFBUSxLQUFNLEVBQU8sR0FJdkIsT0FBTyxJQUlSLElBQUssU0FBVSxFQUFPLEVBQVUsR0FDL0IsR0FBSSxHQUFRLEVBQ1gsRUFBSSxFQUNKLElBR0QsSUFBSyxFQUFhLEdBRWpCLElBREEsRUFBUyxFQUFNLE9BQ1AsRUFBSSxFQUFRLElBR0wsT0FGZCxFQUFRLEVBQVUsRUFBTyxHQUFLLEVBQUcsS0FHaEMsRUFBSSxLQUFNLE9BTVosS0FBTSxJQUFLLEdBR0ksT0FGZCxFQUFRLEVBQVUsRUFBTyxHQUFLLEVBQUcsS0FHaEMsRUFBSSxLQUFNLEVBTWIsT0FBTyxJQUFPLFNBQVcsSUFJMUIsS0FBTSxFQUlOLFFBQVMsS0FHYSxrQkFBWCxVQUNYLEdBQU8sR0FBSSxPQUFPLFVBQWEsR0FBSyxPQUFPLFdBSTVDLEdBQU8sS0FBTSx1RUFBdUUsTUFBTyxLQUMzRixTQUFVLEVBQUcsR0FDWixHQUFZLFdBQWEsRUFBTyxLQUFRLEVBQUssZUFtQjlDLElBQUksSUFXSixTQUFXLEdBOE1YLFFBQVMsR0FBUSxFQUFVLEVBQVMsRUFBUyxHQUM1QyxHQUFJLEdBQUcsRUFBRyxFQUFNLEVBQUssRUFBTyxFQUFRLEVBQ25DLEVBQWEsR0FBVyxFQUFRLGNBR2hDLEVBQVcsRUFBVSxFQUFRLFNBQVcsQ0FLekMsSUFIQSxFQUFVLE1BR2UsZ0JBQWIsS0FBMEIsR0FDeEIsSUFBYixHQUErQixJQUFiLEdBQStCLEtBQWIsRUFFcEMsTUFBTyxFQUlSLEtBQU0sS0FFRSxFQUFVLEVBQVEsZUFBaUIsRUFBVSxLQUFtQixHQUN0RSxFQUFhLEdBRWQsRUFBVSxHQUFXLEVBRWhCLEdBQWlCLENBSXJCLEdBQWtCLEtBQWIsSUFBb0IsRUFBUSxHQUFXLEtBQU0sSUFHakQsR0FBTSxFQUFJLEVBQU0sSUFHZixHQUFrQixJQUFiLEVBQWlCLENBQ3JCLEtBQU0sRUFBTyxFQUFRLGVBQWdCLElBVXBDLE1BQU8sRUFMUCxJQUFLLEVBQUssS0FBTyxFQUVoQixNQURBLEdBQVEsS0FBTSxHQUNQLE1BWVQsSUFBSyxJQUFlLEVBQU8sRUFBVyxlQUFnQixLQUNyRCxFQUFVLEVBQVMsSUFDbkIsRUFBSyxLQUFPLEVBR1osTUFEQSxHQUFRLEtBQU0sR0FDUCxNQUtILENBQUEsR0FBSyxFQUFNLEdBRWpCLE1BREEsR0FBSyxNQUFPLEVBQVMsRUFBUSxxQkFBc0IsSUFDNUMsQ0FHRCxLQUFNLEVBQUksRUFBTSxLQUFPLEVBQVEsd0JBQ3JDLEVBQVEsdUJBR1IsTUFEQSxHQUFLLE1BQU8sRUFBUyxFQUFRLHVCQUF3QixJQUM5QyxFQUtULEdBQUssRUFBUSxNQUNYLEVBQXdCLEVBQVcsUUFDbEMsSUFBYyxFQUFVLEtBQU0sTUFJbEIsSUFBYixHQUFxRCxXQUFuQyxFQUFRLFNBQVMsZUFBOEIsQ0FVbEUsR0FSQSxFQUFjLEVBQ2QsRUFBYSxFQU9LLElBQWIsR0FBa0IsR0FBUyxLQUFNLEdBQWEsQ0FZbEQsS0FUTSxFQUFNLEVBQVEsYUFBYyxPQUNqQyxFQUFNLEVBQUksUUFBUyxHQUFZLElBRS9CLEVBQVEsYUFBYyxLQUFPLEVBQU0sR0FJcEMsRUFBUyxFQUFVLEdBQ25CLEVBQUksRUFBTyxPQUNILEtBQ1AsRUFBTyxHQUFLLElBQU0sRUFBTSxJQUFNLEVBQVksRUFBTyxHQUVsRCxHQUFjLEVBQU8sS0FBTSxLQUczQixFQUFhLEdBQVMsS0FBTSxJQUFjLEVBQWEsRUFBUSxhQUM5RCxFQUdGLElBSUMsTUFIQSxHQUFLLE1BQU8sRUFDWCxFQUFXLGlCQUFrQixJQUV2QixFQUNOLE1BQVEsR0FDVCxFQUF3QixHQUFVLEdBQ2pDLFFBQ0ksSUFBUSxHQUNaLEVBQVEsZ0JBQWlCLFFBUTlCLE1BQU8sR0FBUSxFQUFTLFFBQVMsR0FBTyxNQUFRLEVBQVMsRUFBUyxHQVNuRSxRQUFTLEtBR1IsUUFBUyxHQUFPLEVBQUssR0FNcEIsTUFKSyxHQUFLLEtBQU0sRUFBTSxLQUFRLEVBQUssbUJBRTNCLEdBQU8sRUFBSyxTQUVaLEVBQU8sRUFBTSxLQUFRLEVBUjlCLEdBQUksS0FVSixPQUFPLEdBT1IsUUFBUyxHQUFjLEdBRXRCLE1BREEsR0FBSSxJQUFZLEVBQ1QsRUFPUixRQUFTLEdBQVEsR0FDaEIsR0FBSSxHQUFLLEVBQVMsY0FBYyxXQUVoQyxLQUNDLFFBQVMsRUFBSSxHQUNaLE1BQU8sR0FDUixPQUFPLEVBQ04sUUFFSSxFQUFHLFlBQ1AsRUFBRyxXQUFXLFlBQWEsR0FHNUIsRUFBSyxNQVNQLFFBQVMsR0FBVyxFQUFPLEdBSTFCLElBSEEsR0FBSSxHQUFNLEVBQU0sTUFBTSxLQUNyQixFQUFJLEVBQUksT0FFRCxLQUNQLEVBQUssV0FBWSxFQUFJLElBQU8sRUFVOUIsUUFBUyxHQUFjLEVBQUcsR0FDekIsR0FBSSxHQUFNLEdBQUssRUFDZCxFQUFPLEdBQXNCLElBQWYsRUFBRSxVQUFpQyxJQUFmLEVBQUUsVUFDbkMsRUFBRSxZQUFjLEVBQUUsV0FHcEIsSUFBSyxFQUNKLE1BQU8sRUFJUixJQUFLLEVBQ0osS0FBUyxFQUFNLEVBQUksYUFDbEIsR0FBSyxJQUFRLEVBQ1osT0FBUSxDQUtYLE9BQU8sR0FBSSxHQUFLLEVBNkJqQixRQUFTLEdBQXNCLEdBRzlCLE1BQU8sVUFBVSxHQUtoQixNQUFLLFFBQVUsR0FTVCxFQUFLLGFBQWdDLElBQWxCLEVBQUssU0FHdkIsU0FBVyxHQUNWLFNBQVcsR0FBSyxXQUNiLEVBQUssV0FBVyxXQUFhLEVBRTdCLEVBQUssV0FBYSxFQU1wQixFQUFLLGFBQWUsR0FJMUIsRUFBSyxjQUFnQixHQUNwQixHQUFvQixLQUFXLEVBRzNCLEVBQUssV0FBYSxFQUtkLFNBQVcsSUFDZixFQUFLLFdBQWEsR0FZNUIsUUFBUyxHQUF3QixHQUNoQyxNQUFPLEdBQWEsU0FBVSxHQUU3QixNQURBLElBQVksRUFDTCxFQUFhLFNBQVUsRUFBTSxHQU1uQyxJQUxBLEdBQUksR0FDSCxFQUFlLEtBQVEsRUFBSyxPQUFRLEdBQ3BDLEVBQUksRUFBYSxPQUdWLEtBQ0YsRUFBTyxFQUFJLEVBQWEsTUFDNUIsRUFBSyxLQUFPLEVBQVEsR0FBSyxFQUFLLFNBWW5DLFFBQVMsR0FBYSxHQUNyQixNQUFPLFFBQW1ELEtBQWpDLEVBQVEsc0JBQXdDLEVBK2pDMUUsUUFBUyxNQXVFVCxRQUFTLEdBQVksR0FJcEIsSUFIQSxHQUFJLEdBQUksRUFDUCxFQUFNLEVBQU8sT0FDYixFQUFXLEdBQ0osRUFBSSxFQUFLLElBQ2hCLEdBQVksRUFBTyxHQUFHLEtBRXZCLE9BQU8sR0FHUixRQUFTLEdBQWUsRUFBUyxFQUFZLEdBQzVDLEdBQUksR0FBTSxFQUFXLElBQ3BCLEVBQU8sRUFBVyxLQUNsQixFQUFNLEdBQVEsRUFDZCxFQUFtQixHQUFnQixlQUFSLEVBQzNCLEVBQVcsR0FFWixPQUFPLEdBQVcsTUFFakIsU0FBVSxFQUFNLEVBQVMsR0FDeEIsS0FBUyxFQUFPLEVBQU0sSUFDckIsR0FBdUIsSUFBbEIsRUFBSyxVQUFrQixFQUMzQixNQUFPLEdBQVMsRUFBTSxFQUFTLEVBR2pDLFFBQU8sR0FJUixTQUFVLEVBQU0sRUFBUyxHQUN4QixHQUFJLEdBQVUsRUFBYSxFQUMxQixHQUFhLEVBQVMsRUFHdkIsSUFBSyxHQUNKLEtBQVMsRUFBTyxFQUFNLElBQ3JCLElBQXVCLElBQWxCLEVBQUssVUFBa0IsSUFDdEIsRUFBUyxFQUFNLEVBQVMsR0FDNUIsT0FBTyxNQUtWLE1BQVMsRUFBTyxFQUFNLElBQ3JCLEdBQXVCLElBQWxCLEVBQUssVUFBa0IsRUFPM0IsR0FOQSxFQUFhLEVBQU0sS0FBYyxFQUFNLE9BSXZDLEVBQWMsRUFBWSxFQUFLLFlBQWUsRUFBWSxFQUFLLGNBRTFELEdBQVEsSUFBUyxFQUFLLFNBQVMsY0FDbkMsRUFBTyxFQUFNLElBQVMsTUFDaEIsQ0FBQSxJQUFNLEVBQVcsRUFBYSxLQUNwQyxFQUFVLEtBQVEsR0FBVyxFQUFVLEtBQVEsRUFHL0MsTUFBUSxHQUFVLEdBQU0sRUFBVSxFQU1sQyxJQUhBLEVBQWEsR0FBUSxFQUdmLEVBQVUsR0FBTSxFQUFTLEVBQU0sRUFBUyxHQUM3QyxPQUFPLEVBTVosT0FBTyxHQUlWLFFBQVMsR0FBZ0IsR0FDeEIsTUFBTyxHQUFTLE9BQVMsRUFDeEIsU0FBVSxFQUFNLEVBQVMsR0FFeEIsSUFEQSxHQUFJLEdBQUksRUFBUyxPQUNULEtBQ1AsSUFBTSxFQUFTLEdBQUksRUFBTSxFQUFTLEdBQ2pDLE9BQU8sQ0FHVCxRQUFPLEdBRVIsRUFBUyxHQUdYLFFBQVMsR0FBa0IsRUFBVSxFQUFVLEdBRzlDLElBRkEsR0FBSSxHQUFJLEVBQ1AsRUFBTSxFQUFTLE9BQ1IsRUFBSSxFQUFLLElBQ2hCLEVBQVEsRUFBVSxFQUFTLEdBQUksRUFFaEMsT0FBTyxHQUdSLFFBQVMsR0FBVSxFQUFXLEVBQUssRUFBUSxFQUFTLEdBT25ELElBTkEsR0FBSSxHQUNILEtBQ0EsRUFBSSxFQUNKLEVBQU0sRUFBVSxPQUNoQixFQUFnQixNQUFQLEVBRUYsRUFBSSxFQUFLLEtBQ1YsRUFBTyxFQUFVLE1BQ2hCLElBQVUsRUFBUSxFQUFNLEVBQVMsS0FDdEMsRUFBYSxLQUFNLEdBQ2QsR0FDSixFQUFJLEtBQU0sSUFNZCxPQUFPLEdBR1IsUUFBUyxHQUFZLEVBQVcsRUFBVSxFQUFTLEVBQVksRUFBWSxHQU8xRSxNQU5LLEtBQWUsRUFBWSxLQUMvQixFQUFhLEVBQVksSUFFckIsSUFBZSxFQUFZLEtBQy9CLEVBQWEsRUFBWSxFQUFZLElBRS9CLEVBQWEsU0FBVSxFQUFNLEVBQVMsRUFBUyxHQUNyRCxHQUFJLEdBQU0sRUFBRyxFQUNaLEtBQ0EsS0FDQSxFQUFjLEVBQVEsT0FHdEIsRUFBUSxHQUFRLEVBQWtCLEdBQVksSUFBSyxFQUFRLFVBQWEsR0FBWSxNQUdwRixHQUFZLElBQWUsR0FBUyxFQUVuQyxFQURBLEVBQVUsRUFBTyxFQUFRLEVBQVcsRUFBUyxHQUc5QyxFQUFhLEVBRVosSUFBZ0IsRUFBTyxFQUFZLEdBQWUsTUFNakQsRUFDRCxDQVFGLElBTEssR0FDSixFQUFTLEVBQVcsRUFBWSxFQUFTLEdBSXJDLEVBTUosSUFMQSxFQUFPLEVBQVUsRUFBWSxHQUM3QixFQUFZLEtBQVUsRUFBUyxHQUcvQixFQUFJLEVBQUssT0FDRCxNQUNELEVBQU8sRUFBSyxNQUNqQixFQUFZLEVBQVEsTUFBUyxFQUFXLEVBQVEsSUFBTyxHQUsxRCxJQUFLLEdBQ0osR0FBSyxHQUFjLEVBQVksQ0FDOUIsR0FBSyxFQUFhLENBSWpCLElBRkEsS0FDQSxFQUFJLEVBQVcsT0FDUCxNQUNELEVBQU8sRUFBVyxLQUV2QixFQUFLLEtBQU8sRUFBVSxHQUFLLEVBRzdCLEdBQVksS0FBTyxLQUFrQixFQUFNLEdBSzVDLElBREEsRUFBSSxFQUFXLE9BQ1AsTUFDRCxFQUFPLEVBQVcsTUFDdEIsRUFBTyxFQUFhLEVBQVMsRUFBTSxHQUFTLEVBQU8sS0FBTyxJQUUzRCxFQUFLLEtBQVUsRUFBUSxHQUFRLFNBT2xDLEdBQWEsRUFDWixJQUFlLEVBQ2QsRUFBVyxPQUFRLEVBQWEsRUFBVyxRQUMzQyxHQUVHLEVBQ0osRUFBWSxLQUFNLEVBQVMsRUFBWSxHQUV2QyxFQUFLLE1BQU8sRUFBUyxLQU16QixRQUFTLEdBQW1CLEdBd0IzQixJQXZCQSxHQUFJLEdBQWMsRUFBUyxFQUMxQixFQUFNLEVBQU8sT0FDYixFQUFrQixFQUFLLFNBQVUsRUFBTyxHQUFHLE1BQzNDLEVBQW1CLEdBQW1CLEVBQUssU0FBUyxLQUNwRCxFQUFJLEVBQWtCLEVBQUksRUFHMUIsRUFBZSxFQUFlLFNBQVUsR0FDdkMsTUFBTyxLQUFTLEdBQ2QsR0FBa0IsR0FDckIsRUFBa0IsRUFBZSxTQUFVLEdBQzFDLE1BQU8sR0FBUyxFQUFjLElBQVUsR0FDdEMsR0FBa0IsR0FDckIsR0FBYSxTQUFVLEVBQU0sRUFBUyxHQUNyQyxHQUFJLElBQVMsSUFBcUIsR0FBTyxJQUFZLE1BQ25ELEVBQWUsR0FBUyxTQUN4QixFQUFjLEVBQU0sRUFBUyxHQUM3QixFQUFpQixFQUFNLEVBQVMsR0FHbEMsT0FEQSxHQUFlLEtBQ1IsSUFHRCxFQUFJLEVBQUssSUFDaEIsR0FBTSxFQUFVLEVBQUssU0FBVSxFQUFPLEdBQUcsTUFDeEMsR0FBYSxFQUFjLEVBQWdCLEdBQVksUUFDakQsQ0FJTixHQUhBLEVBQVUsRUFBSyxPQUFRLEVBQU8sR0FBRyxNQUFPLE1BQU8sS0FBTSxFQUFPLEdBQUcsU0FHMUQsRUFBUyxHQUFZLENBR3pCLElBREEsSUFBTSxFQUNFLEVBQUksSUFDTixFQUFLLFNBQVUsRUFBTyxHQUFHLE1BRGQsS0FLakIsTUFBTyxHQUNOLEVBQUksR0FBSyxFQUFnQixHQUN6QixFQUFJLEdBQUssRUFFUixFQUFPLE1BQU8sRUFBRyxFQUFJLEdBQUksUUFBUyxNQUFnQyxNQUF6QixFQUFRLEVBQUksR0FBSSxLQUFlLElBQU0sTUFDN0UsUUFBUyxHQUFPLE1BQ2xCLEVBQ0EsRUFBSSxHQUFLLEVBQW1CLEVBQU8sTUFBTyxFQUFHLElBQzdDLEVBQUksR0FBTyxFQUFvQixFQUFTLEVBQU8sTUFBTyxJQUN0RCxFQUFJLEdBQU8sRUFBWSxJQUd6QixFQUFTLEtBQU0sR0FJakIsTUFBTyxHQUFnQixHQUd4QixRQUFTLEdBQTBCLEVBQWlCLEdBQ25ELEdBQUksR0FBUSxFQUFZLE9BQVMsRUFDaEMsRUFBWSxFQUFnQixPQUFTLEVBQ3JDLEVBQWUsU0FBVSxFQUFNLEVBQVMsRUFBSyxFQUFTLEdBQ3JELEdBQUksR0FBTSxFQUFHLEVBQ1osRUFBZSxFQUNmLEVBQUksSUFDSixFQUFZLE1BQ1osS0FDQSxFQUFnQixFQUVoQixFQUFRLEdBQVEsR0FBYSxFQUFLLEtBQVUsSUFBRyxJQUFLLEdBRXBELEVBQWlCLEdBQTRCLE1BQWpCLEVBQXdCLEVBQUksS0FBSyxVQUFZLEdBQ3pFLEVBQU0sRUFBTSxNQVNiLEtBUEssSUFDSixFQUFtQixJQUFZLEdBQVksR0FBVyxHQU0vQyxJQUFNLEdBQTRCLE9BQXBCLEVBQU8sRUFBTSxJQUFhLElBQU0sQ0FDckQsR0FBSyxHQUFhLEVBQU8sQ0FNeEIsSUFMQSxFQUFJLEVBQ0UsR0FBVyxFQUFLLGdCQUFrQixJQUN2QyxFQUFhLEdBQ2IsR0FBTyxHQUVDLEVBQVUsRUFBZ0IsTUFDbEMsR0FBSyxFQUFTLEVBQU0sR0FBVyxFQUFVLEdBQU8sQ0FDL0MsRUFBUSxLQUFNLEVBQ2QsT0FHRyxJQUNKLEVBQVUsR0FLUCxLQUVFLEdBQVEsR0FBVyxJQUN4QixJQUlJLEdBQ0osRUFBVSxLQUFNLElBZ0JuQixHQVRBLEdBQWdCLEVBU1gsR0FBUyxJQUFNLEVBQWUsQ0FFbEMsSUFEQSxFQUFJLEVBQ0ssRUFBVSxFQUFZLE1BQzlCLEVBQVMsRUFBVyxFQUFZLEVBQVMsRUFHMUMsSUFBSyxFQUFPLENBRVgsR0FBSyxFQUFlLEVBQ25CLEtBQVEsS0FDQSxFQUFVLElBQU0sRUFBVyxLQUNqQyxFQUFXLEdBQUssRUFBSSxLQUFNLEdBTTdCLEdBQWEsRUFBVSxHQUl4QixFQUFLLE1BQU8sRUFBUyxHQUdoQixJQUFjLEdBQVEsRUFBVyxPQUFTLEdBQzVDLEVBQWUsRUFBWSxPQUFXLEdBRXhDLEVBQU8sV0FBWSxHQVVyQixNQUxLLEtBQ0osRUFBVSxFQUNWLEVBQW1CLEdBR2IsRUFHVCxPQUFPLEdBQ04sRUFBYyxHQUNkLEVBemhFRixHQUFJLEdBQ0gsRUFDQSxFQUNBLEVBQ0EsRUFDQSxFQUNBLEVBQ0EsRUFDQSxFQUNBLEVBQ0EsRUFHQSxFQUNBLEVBQ0EsRUFDQSxFQUNBLEVBQ0EsRUFDQSxFQUNBLEVBR0EsRUFBVSxTQUFXLEVBQUksR0FBSSxNQUM3QixFQUFlLEVBQU8sU0FDdEIsRUFBVSxFQUNWLEVBQU8sRUFDUCxFQUFhLElBQ2IsRUFBYSxJQUNiLEVBQWdCLElBQ2hCLEVBQXlCLElBQ3pCLEVBQVksU0FBVSxFQUFHLEdBSXhCLE1BSEssS0FBTSxJQUNWLEdBQWUsR0FFVCxHQUlSLEtBQWMsZUFDZCxLQUNBLEVBQU0sRUFBSSxJQUNWLEVBQWMsRUFBSSxLQUNsQixFQUFPLEVBQUksS0FDWCxFQUFRLEVBQUksTUFHWixFQUFVLFNBQVUsRUFBTSxHQUd6QixJQUZBLEdBQUksR0FBSSxFQUNQLEVBQU0sRUFBSyxPQUNKLEVBQUksRUFBSyxJQUNoQixHQUFLLEVBQUssS0FBTyxFQUNoQixNQUFPLEVBR1QsUUFBUSxHQUdULEdBQVcsNkhBS1gsR0FBYSxzQkFHYixHQUFhLGdDQUdiLEdBQWEsTUFBUSxHQUFhLEtBQU8sR0FBYSxPQUFTLEdBRTlELGdCQUFrQixHQUVsQiwyREFBNkQsR0FBYSxPQUFTLEdBQ25GLE9BRUQsR0FBVSxLQUFPLEdBQWEsd0ZBS0EsR0FBYSxlQU0zQyxHQUFjLEdBQUksUUFBUSxHQUFhLElBQUssS0FDNUMsR0FBUSxHQUFJLFFBQVEsSUFBTSxHQUFhLDhCQUFnQyxHQUFhLEtBQU0sS0FFMUYsR0FBUyxHQUFJLFFBQVEsSUFBTSxHQUFhLEtBQU8sR0FBYSxLQUM1RCxHQUFlLEdBQUksUUFBUSxJQUFNLEdBQWEsV0FBYSxHQUFhLElBQU0sR0FBYSxLQUMzRixHQUFXLEdBQUksUUFBUSxHQUFhLE1BRXBDLEdBQVUsR0FBSSxRQUFRLElBQ3RCLEdBQWMsR0FBSSxRQUFRLElBQU0sR0FBYSxLQUU3QyxJQUNDLEdBQU0sR0FBSSxRQUFRLE1BQVEsR0FBYSxLQUN2QyxNQUFTLEdBQUksUUFBUSxRQUFVLEdBQWEsS0FDNUMsSUFBTyxHQUFJLFFBQVEsS0FBTyxHQUFhLFNBQ3ZDLEtBQVEsR0FBSSxRQUFRLElBQU0sSUFDMUIsT0FBVSxHQUFJLFFBQVEsSUFBTSxJQUM1QixNQUFTLEdBQUksUUFBUSx5REFBMkQsR0FDL0UsK0JBQWlDLEdBQWEsY0FBZ0IsR0FDOUQsYUFBZSxHQUFhLFNBQVUsS0FDdkMsS0FBUSxHQUFJLFFBQVEsT0FBUyxHQUFXLEtBQU0sS0FHOUMsYUFBZ0IsR0FBSSxRQUFRLElBQU0sR0FBYSxtREFDOUMsR0FBYSxtQkFBcUIsR0FBYSxtQkFBb0IsTUFHckUsR0FBUSxTQUNSLEdBQVUsc0NBQ1YsR0FBVSxTQUVWLEdBQVUseUJBR1YsR0FBYSxtQ0FFYixHQUFXLE9BSVgsR0FBWSxHQUFJLFFBQVEscUJBQXVCLEdBQWEsTUFBUSxHQUFhLE9BQVEsTUFDekYsR0FBWSxTQUFVLEVBQUcsRUFBUyxHQUNqQyxHQUFJLEdBQU8sS0FBTyxFQUFVLEtBSTVCLE9BQU8sS0FBUyxHQUFRLEVBQ3ZCLEVBQ0EsRUFBTyxFQUVOLE9BQU8sYUFBYyxFQUFPLE9BRTVCLE9BQU8sYUFBYyxHQUFRLEdBQUssTUFBZSxLQUFQLEVBQWUsUUFLNUQsR0FBYSxzREFDYixHQUFhLFNBQVUsRUFBSSxHQUMxQixNQUFLLEdBR1EsT0FBUCxFQUNHLElBSUQsRUFBRyxNQUFPLEdBQUksR0FBTSxLQUFPLEVBQUcsV0FBWSxFQUFHLE9BQVMsR0FBSSxTQUFVLElBQU8sSUFJNUUsS0FBTyxHQU9mLEdBQWdCLFdBQ2YsS0FHRCxHQUFxQixFQUNwQixTQUFVLEdBQ1QsT0FBeUIsSUFBbEIsRUFBSyxVQUFxRCxhQUFoQyxFQUFLLFNBQVMsZ0JBRTlDLElBQUssYUFBYyxLQUFNLFVBSTdCLEtBQ0MsRUFBSyxNQUNILEVBQU0sRUFBTSxLQUFNLEVBQWEsWUFDaEMsRUFBYSxZQUlkLEVBQUssRUFBYSxXQUFXLFFBQVMsU0FDckMsTUFBUSxHQUNULEdBQVMsTUFBTyxFQUFJLE9BR25CLFNBQVUsRUFBUSxHQUNqQixFQUFZLE1BQU8sRUFBUSxFQUFNLEtBQUssS0FLdkMsU0FBVSxFQUFRLEdBSWpCLElBSEEsR0FBSSxHQUFJLEVBQU8sT0FDZCxFQUFJLEVBRUksRUFBTyxLQUFPLEVBQUksT0FDM0IsRUFBTyxPQUFTLEVBQUksSUF1VnZCLEVBQVUsRUFBTyxXQU9qQixFQUFRLEVBQU8sTUFBUSxTQUFVLEdBQ2hDLEdBQUksR0FBWSxFQUFLLGFBQ3BCLEdBQVcsRUFBSyxlQUFpQixHQUFNLGVBS3hDLFFBQVEsR0FBTSxLQUFNLEdBQWEsR0FBVyxFQUFRLFVBQVksU0FRakUsRUFBYyxFQUFPLFlBQWMsU0FBVSxHQUM1QyxHQUFJLEdBQVksRUFDZixFQUFNLEVBQU8sRUFBSyxlQUFpQixFQUFPLENBRzNDLE9BQUssS0FBUSxHQUE2QixJQUFqQixFQUFJLFVBQW1CLEVBQUksaUJBS3BELEVBQVcsRUFDWCxFQUFVLEVBQVMsZ0JBQ25CLEdBQWtCLEVBQU8sR0FJcEIsSUFBaUIsSUFDcEIsRUFBWSxFQUFTLGNBQWdCLEVBQVUsTUFBUSxJQUduRCxFQUFVLGlCQUNkLEVBQVUsaUJBQWtCLFNBQVUsSUFBZSxHQUcxQyxFQUFVLGFBQ3JCLEVBQVUsWUFBYSxXQUFZLEtBVXJDLEVBQVEsV0FBYSxFQUFPLFNBQVUsR0FFckMsTUFEQSxHQUFHLFVBQVksS0FDUCxFQUFHLGFBQWEsZUFPekIsRUFBUSxxQkFBdUIsRUFBTyxTQUFVLEdBRS9DLE1BREEsR0FBRyxZQUFhLEVBQVMsY0FBYyxNQUMvQixFQUFHLHFCQUFxQixLQUFLLFNBSXRDLEVBQVEsdUJBQXlCLEdBQVEsS0FBTSxFQUFTLHdCQU14RCxFQUFRLFFBQVUsRUFBTyxTQUFVLEdBRWxDLE1BREEsR0FBUSxZQUFhLEdBQUssR0FBSyxHQUN2QixFQUFTLG9CQUFzQixFQUFTLGtCQUFtQixHQUFVLFNBSXpFLEVBQVEsU0FDWixFQUFLLE9BQVcsR0FBSSxTQUFVLEdBQzdCLEdBQUksR0FBUyxFQUFHLFFBQVMsR0FBVyxHQUNwQyxPQUFPLFVBQVUsR0FDaEIsTUFBTyxHQUFLLGFBQWEsUUFBVSxJQUdyQyxFQUFLLEtBQVMsR0FBSSxTQUFVLEVBQUksR0FDL0IsT0FBdUMsS0FBM0IsRUFBUSxnQkFBa0MsRUFBaUIsQ0FDdEUsR0FBSSxHQUFPLEVBQVEsZUFBZ0IsRUFDbkMsT0FBTyxJQUFTLFVBSWxCLEVBQUssT0FBVyxHQUFLLFNBQVUsR0FDOUIsR0FBSSxHQUFTLEVBQUcsUUFBUyxHQUFXLEdBQ3BDLE9BQU8sVUFBVSxHQUNoQixHQUFJLE9BQXdDLEtBQTFCLEVBQUssa0JBQ3RCLEVBQUssaUJBQWlCLEtBQ3ZCLE9BQU8sSUFBUSxFQUFLLFFBQVUsSUFNaEMsRUFBSyxLQUFTLEdBQUksU0FBVSxFQUFJLEdBQy9CLE9BQXVDLEtBQTNCLEVBQVEsZ0JBQWtDLEVBQWlCLENBQ3RFLEdBQUksR0FBTSxFQUFHLEVBQ1osRUFBTyxFQUFRLGVBQWdCLEVBRWhDLElBQUssRUFBTyxDQUlYLElBREEsRUFBTyxFQUFLLGlCQUFpQixRQUNoQixFQUFLLFFBQVUsRUFDM0IsT0FBUyxFQU1WLEtBRkEsRUFBUSxFQUFRLGtCQUFtQixHQUNuQyxFQUFJLEVBQ0ssRUFBTyxFQUFNLE1BRXJCLElBREEsRUFBTyxFQUFLLGlCQUFpQixRQUNoQixFQUFLLFFBQVUsRUFDM0IsT0FBUyxHQUtaLFlBTUgsRUFBSyxLQUFVLElBQUksRUFBUSxxQkFDMUIsU0FBVSxFQUFLLEdBQ2QsV0FBNkMsS0FBakMsRUFBUSxxQkFDWixFQUFRLHFCQUFzQixHQUcxQixFQUFRLElBQ1osRUFBUSxpQkFBa0IsT0FEM0IsSUFLUixTQUFVLEVBQUssR0FDZCxHQUFJLEdBQ0gsS0FDQSxFQUFJLEVBRUosRUFBVSxFQUFRLHFCQUFzQixFQUd6QyxJQUFhLE1BQVIsRUFBYyxDQUNsQixLQUFTLEVBQU8sRUFBUSxNQUNBLElBQWxCLEVBQUssVUFDVCxFQUFJLEtBQU0sRUFJWixPQUFPLEdBRVIsTUFBTyxJQUlULEVBQUssS0FBWSxNQUFJLEVBQVEsd0JBQTBCLFNBQVUsRUFBVyxHQUMzRSxPQUErQyxLQUFuQyxFQUFRLHdCQUEwQyxFQUM3RCxNQUFPLEdBQVEsdUJBQXdCLElBVXpDLEtBT0EsTUFFTSxFQUFRLElBQU0sR0FBUSxLQUFNLEVBQVMscUJBRzFDLEVBQU8sU0FBVSxHQU1oQixFQUFRLFlBQWEsR0FBSyxVQUFZLFVBQVksRUFBVSxxQkFDMUMsRUFBVSxrRUFPdkIsRUFBRyxpQkFBaUIsd0JBQXdCLFFBQ2hELEVBQVUsS0FBTSxTQUFXLEdBQWEsZ0JBS25DLEVBQUcsaUJBQWlCLGNBQWMsUUFDdkMsRUFBVSxLQUFNLE1BQVEsR0FBYSxhQUFlLEdBQVcsS0FJMUQsRUFBRyxpQkFBa0IsUUFBVSxFQUFVLE1BQU8sUUFDckQsRUFBVSxLQUFLLE1BTVYsRUFBRyxpQkFBaUIsWUFBWSxRQUNyQyxFQUFVLEtBQUssWUFNVixFQUFHLGlCQUFrQixLQUFPLEVBQVUsTUFBTyxRQUNsRCxFQUFVLEtBQUssY0FJakIsRUFBTyxTQUFVLEdBQ2hCLEVBQUcsVUFBWSxtRkFLZixJQUFJLEdBQVEsRUFBUyxjQUFjLFFBQ25DLEdBQU0sYUFBYyxPQUFRLFVBQzVCLEVBQUcsWUFBYSxHQUFRLGFBQWMsT0FBUSxLQUl6QyxFQUFHLGlCQUFpQixZQUFZLFFBQ3BDLEVBQVUsS0FBTSxPQUFTLEdBQWEsZUFLUyxJQUEzQyxFQUFHLGlCQUFpQixZQUFZLFFBQ3BDLEVBQVUsS0FBTSxXQUFZLGFBSzdCLEVBQVEsWUFBYSxHQUFLLFVBQVcsRUFDWSxJQUE1QyxFQUFHLGlCQUFpQixhQUFhLFFBQ3JDLEVBQVUsS0FBTSxXQUFZLGFBSTdCLEVBQUcsaUJBQWlCLFFBQ3BCLEVBQVUsS0FBSyxZQUlYLEVBQVEsZ0JBQWtCLEdBQVEsS0FBTyxFQUFVLEVBQVEsU0FDaEUsRUFBUSx1QkFDUixFQUFRLG9CQUNSLEVBQVEsa0JBQ1IsRUFBUSxxQkFFUixFQUFPLFNBQVUsR0FHaEIsRUFBUSxrQkFBb0IsRUFBUSxLQUFNLEVBQUksS0FJOUMsRUFBUSxLQUFNLEVBQUksYUFDbEIsRUFBYyxLQUFNLEtBQU0sTUFJNUIsRUFBWSxFQUFVLFFBQVUsR0FBSSxRQUFRLEVBQVUsS0FBSyxNQUMzRCxFQUFnQixFQUFjLFFBQVUsR0FBSSxRQUFRLEVBQWMsS0FBSyxNQUl2RSxFQUFhLEdBQVEsS0FBTSxFQUFRLHlCQUtuQyxFQUFXLEdBQWMsR0FBUSxLQUFNLEVBQVEsVUFDOUMsU0FBVSxFQUFHLEdBQ1osR0FBSSxHQUF1QixJQUFmLEVBQUUsU0FBaUIsRUFBRSxnQkFBa0IsRUFDbEQsRUFBTSxHQUFLLEVBQUUsVUFDZCxPQUFPLEtBQU0sTUFBVyxHQUF3QixJQUFqQixFQUFJLFlBQ2xDLEVBQU0sU0FDTCxFQUFNLFNBQVUsR0FDaEIsRUFBRSx5QkFBOEQsR0FBbkMsRUFBRSx3QkFBeUIsTUFHM0QsU0FBVSxFQUFHLEdBQ1osR0FBSyxFQUNKLEtBQVMsRUFBSSxFQUFFLFlBQ2QsR0FBSyxJQUFNLEVBQ1YsT0FBTyxDQUlWLFFBQU8sR0FPVCxFQUFZLEVBQ1osU0FBVSxFQUFHLEdBR1osR0FBSyxJQUFNLEVBRVYsTUFEQSxJQUFlLEVBQ1IsQ0FJUixJQUFJLElBQVcsRUFBRSx5QkFBMkIsRUFBRSx1QkFDOUMsT0FBSyxLQUtMLEdBQVksRUFBRSxlQUFpQixNQUFVLEVBQUUsZUFBaUIsR0FDM0QsRUFBRSx3QkFBeUIsR0FHM0IsRUFHYyxFQUFWLElBQ0YsRUFBUSxjQUFnQixFQUFFLHdCQUF5QixLQUFRLEVBR3hELElBQU0sR0FBWSxFQUFFLGdCQUFrQixHQUFnQixFQUFTLEVBQWMsSUFDekUsRUFFSixJQUFNLEdBQVksRUFBRSxnQkFBa0IsR0FBZ0IsRUFBUyxFQUFjLEdBQzFFLEVBSUQsRUFDSixFQUFTLEVBQVcsR0FBTSxFQUFTLEVBQVcsR0FDaEQsRUFHZSxFQUFWLEdBQWUsRUFBSSxJQUUzQixTQUFVLEVBQUcsR0FFWixHQUFLLElBQU0sRUFFVixNQURBLElBQWUsRUFDUixDQUdSLElBQUksR0FDSCxFQUFJLEVBQ0osRUFBTSxFQUFFLFdBQ1IsRUFBTSxFQUFFLFdBQ1IsR0FBTyxHQUNQLEdBQU8sRUFHUixLQUFNLElBQVEsRUFDYixNQUFPLEtBQU0sR0FBWSxFQUN4QixJQUFNLEVBQVcsRUFDakIsR0FBTyxFQUNQLEVBQU0sRUFDTixFQUNFLEVBQVMsRUFBVyxHQUFNLEVBQVMsRUFBVyxHQUNoRCxDQUdLLElBQUssSUFBUSxFQUNuQixNQUFPLEdBQWMsRUFBRyxFQUt6QixLQURBLEVBQU0sRUFDRyxFQUFNLEVBQUksWUFDbEIsRUFBRyxRQUFTLEVBR2IsS0FEQSxFQUFNLEVBQ0csRUFBTSxFQUFJLFlBQ2xCLEVBQUcsUUFBUyxFQUliLE1BQVEsRUFBRyxLQUFPLEVBQUcsSUFDcEIsR0FHRCxPQUFPLEdBRU4sRUFBYyxFQUFHLEdBQUksRUFBRyxJQUd4QixFQUFHLEtBQU8sR0FBZ0IsRUFDMUIsRUFBRyxLQUFPLEVBQWUsRUFDekIsR0FHSyxHQTNZQyxHQThZVCxFQUFPLFFBQVUsU0FBVSxFQUFNLEdBQ2hDLE1BQU8sR0FBUSxFQUFNLEtBQU0sS0FBTSxJQUdsQyxFQUFPLGdCQUFrQixTQUFVLEVBQU0sR0FNeEMsSUFKTyxFQUFLLGVBQWlCLEtBQVcsR0FDdkMsRUFBYSxHQUdULEVBQVEsaUJBQW1CLElBQzlCLEVBQXdCLEVBQU8sUUFDN0IsSUFBa0IsRUFBYyxLQUFNLE9BQ3RDLElBQWtCLEVBQVUsS0FBTSxJQUVyQyxJQUNDLEdBQUksR0FBTSxFQUFRLEtBQU0sRUFBTSxFQUc5QixJQUFLLEdBQU8sRUFBUSxtQkFHbEIsRUFBSyxVQUF1QyxLQUEzQixFQUFLLFNBQVMsU0FDaEMsTUFBTyxHQUVQLE1BQU8sR0FDUixFQUF3QixHQUFNLEdBSWhDLE1BQU8sR0FBUSxFQUFNLEVBQVUsTUFBUSxJQUFTLE9BQVMsR0FHMUQsRUFBTyxTQUFXLFNBQVUsRUFBUyxHQUtwQyxPQUhPLEVBQVEsZUFBaUIsS0FBYyxHQUM3QyxFQUFhLEdBRVAsRUFBVSxFQUFTLElBRzNCLEVBQU8sS0FBTyxTQUFVLEVBQU0sSUFFdEIsRUFBSyxlQUFpQixLQUFXLEdBQ3ZDLEVBQWEsRUFHZCxJQUFJLEdBQUssRUFBSyxXQUFZLEVBQUssZUFFOUIsRUFBTSxHQUFNLEVBQU8sS0FBTSxFQUFLLFdBQVksRUFBSyxlQUM5QyxFQUFJLEVBQU0sR0FBTyxPQUNqQixFQUVGLFlBQWUsS0FBUixFQUNOLEVBQ0EsRUFBUSxhQUFlLEVBQ3RCLEVBQUssYUFBYyxJQUNsQixFQUFNLEVBQUssaUJBQWlCLEtBQVUsRUFBSSxVQUMxQyxFQUFJLE1BQ0osTUFHSixFQUFPLE9BQVMsU0FBVSxHQUN6QixPQUFRLEVBQU0sSUFBSSxRQUFTLEdBQVksS0FHeEMsRUFBTyxNQUFRLFNBQVUsR0FDeEIsS0FBTSxJQUFJLE9BQU8sMENBQTRDLElBTzlELEVBQU8sV0FBYSxTQUFVLEdBQzdCLEdBQUksR0FDSCxLQUNBLEVBQUksRUFDSixFQUFJLENBT0wsSUFKQSxHQUFnQixFQUFRLGlCQUN4QixHQUFhLEVBQVEsWUFBYyxFQUFRLE1BQU8sR0FDbEQsRUFBUSxLQUFNLEdBRVQsRUFBZSxDQUNuQixLQUFTLEVBQU8sRUFBUSxNQUNsQixJQUFTLEVBQVMsS0FDdEIsRUFBSSxFQUFXLEtBQU0sR0FHdkIsTUFBUSxLQUNQLEVBQVEsT0FBUSxFQUFZLEdBQUssR0FRbkMsTUFGQSxHQUFZLEtBRUwsR0FPUixFQUFVLEVBQU8sUUFBVSxTQUFVLEdBQ3BDLEdBQUksR0FDSCxFQUFNLEdBQ04sRUFBSSxFQUNKLEVBQVcsRUFBSyxRQUVqQixJQUFNLEdBTUMsR0FBa0IsSUFBYixHQUErQixJQUFiLEdBQStCLEtBQWIsRUFBa0IsQ0FHakUsR0FBaUMsZ0JBQXJCLEdBQUssWUFDaEIsTUFBTyxHQUFLLFdBR1osS0FBTSxFQUFPLEVBQUssV0FBWSxFQUFNLEVBQU8sRUFBSyxZQUMvQyxHQUFPLEVBQVMsT0FHWixJQUFrQixJQUFiLEdBQStCLElBQWIsRUFDN0IsTUFBTyxHQUFLLGNBaEJaLE1BQVMsRUFBTyxFQUFLLE1BRXBCLEdBQU8sRUFBUyxFQWtCbEIsT0FBTyxJQUdSLEVBQU8sRUFBTyxXQUdiLFlBQWEsR0FFYixhQUFjLEVBRWQsTUFBTyxHQUVQLGNBRUEsUUFFQSxVQUNDLEtBQU8sSUFBSyxhQUFjLE9BQU8sR0FDakMsS0FBTyxJQUFLLGNBQ1osS0FBTyxJQUFLLGtCQUFtQixPQUFPLEdBQ3RDLEtBQU8sSUFBSyxvQkFHYixXQUNDLEtBQVEsU0FBVSxHQVVqQixNQVRBLEdBQU0sR0FBSyxFQUFNLEdBQUcsUUFBUyxHQUFXLElBR3hDLEVBQU0sSUFBTyxFQUFNLElBQU0sRUFBTSxJQUFNLEVBQU0sSUFBTSxJQUFLLFFBQVMsR0FBVyxJQUV4RCxPQUFiLEVBQU0sS0FDVixFQUFNLEdBQUssSUFBTSxFQUFNLEdBQUssS0FHdEIsRUFBTSxNQUFPLEVBQUcsSUFHeEIsTUFBUyxTQUFVLEdBNkJsQixNQWxCQSxHQUFNLEdBQUssRUFBTSxHQUFHLGNBRVksUUFBM0IsRUFBTSxHQUFHLE1BQU8sRUFBRyxJQUVqQixFQUFNLElBQ1gsRUFBTyxNQUFPLEVBQU0sSUFLckIsRUFBTSxLQUFRLEVBQU0sR0FBSyxFQUFNLElBQU0sRUFBTSxJQUFNLEdBQUssR0FBbUIsU0FBYixFQUFNLElBQThCLFFBQWIsRUFBTSxLQUN6RixFQUFNLEtBQVUsRUFBTSxHQUFLLEVBQU0sSUFBcUIsUUFBYixFQUFNLEtBR3BDLEVBQU0sSUFDakIsRUFBTyxNQUFPLEVBQU0sSUFHZCxHQUdSLE9BQVUsU0FBVSxHQUNuQixHQUFJLEdBQ0gsR0FBWSxFQUFNLElBQU0sRUFBTSxFQUUvQixPQUFLLElBQWlCLE1BQUUsS0FBTSxFQUFNLElBQzVCLE1BSUgsRUFBTSxHQUNWLEVBQU0sR0FBSyxFQUFNLElBQU0sRUFBTSxJQUFNLEdBR3hCLEdBQVksR0FBUSxLQUFNLEtBRXBDLEVBQVMsRUFBVSxHQUFVLE1BRTdCLEVBQVMsRUFBUyxRQUFTLElBQUssRUFBUyxPQUFTLEdBQVcsRUFBUyxVQUd2RSxFQUFNLEdBQUssRUFBTSxHQUFHLE1BQU8sRUFBRyxHQUM5QixFQUFNLEdBQUssRUFBUyxNQUFPLEVBQUcsSUFJeEIsRUFBTSxNQUFPLEVBQUcsTUFJekIsUUFFQyxJQUFPLFNBQVUsR0FDaEIsR0FBSSxHQUFXLEVBQWlCLFFBQVMsR0FBVyxJQUFZLGFBQ2hFLE9BQTRCLE1BQXJCLEVBQ04sV0FBYSxPQUFPLEdBQ3BCLFNBQVUsR0FDVCxNQUFPLEdBQUssVUFBWSxFQUFLLFNBQVMsZ0JBQWtCLElBSTNELE1BQVMsU0FBVSxHQUNsQixHQUFJLEdBQVUsRUFBWSxFQUFZLElBRXRDLE9BQU8sS0FDTCxFQUFVLEdBQUksUUFBUSxNQUFRLEdBQWEsSUFBTSxFQUFZLElBQU0sR0FBYSxTQUNqRixFQUFZLEVBQVcsU0FBVSxHQUNoQyxNQUFPLEdBQVEsS0FBZ0MsZ0JBQW5CLEdBQUssV0FBMEIsRUFBSyxlQUEwQyxLQUF0QixFQUFLLGNBQWdDLEVBQUssYUFBYSxVQUFZLE9BSTFKLEtBQVEsU0FBVSxFQUFNLEVBQVUsR0FDakMsTUFBTyxVQUFVLEdBQ2hCLEdBQUksR0FBUyxFQUFPLEtBQU0sRUFBTSxFQUVoQyxPQUFlLE9BQVYsRUFDZ0IsT0FBYixHQUVGLElBSU4sR0FBVSxHQUVVLE1BQWIsRUFBbUIsSUFBVyxFQUN2QixPQUFiLEVBQW9CLElBQVcsRUFDbEIsT0FBYixFQUFvQixHQUFxQyxJQUE1QixFQUFPLFFBQVMsR0FDaEMsT0FBYixFQUFvQixHQUFTLEVBQU8sUUFBUyxJQUFXLEVBQzNDLE9BQWIsRUFBb0IsR0FBUyxFQUFPLE9BQVEsRUFBTSxVQUFhLEVBQ2xELE9BQWIsR0FBc0IsSUFBTSxFQUFPLFFBQVMsR0FBYSxLQUFRLEtBQU0sUUFBUyxJQUFXLEVBQzlFLE9BQWIsSUFBb0IsSUFBVyxHQUFTLEVBQU8sTUFBTyxFQUFHLEVBQU0sT0FBUyxLQUFRLEVBQVEsUUFLM0YsTUFBUyxTQUFVLEVBQU0sRUFBTSxFQUFVLEVBQU8sR0FDL0MsR0FBSSxHQUFnQyxRQUF2QixFQUFLLE1BQU8sRUFBRyxHQUMzQixFQUErQixTQUFyQixFQUFLLE9BQVEsR0FDdkIsRUFBa0IsWUFBVCxDQUVWLE9BQWlCLEtBQVYsR0FBd0IsSUFBVCxFQUdyQixTQUFVLEdBQ1QsUUFBUyxFQUFLLFlBR2YsU0FBVSxFQUFNLEVBQVMsR0FDeEIsR0FBSSxHQUFPLEVBQWEsRUFBWSxFQUFNLEVBQVcsRUFDcEQsRUFBTSxJQUFXLEVBQVUsY0FBZ0Isa0JBQzNDLEVBQVMsRUFBSyxXQUNkLEVBQU8sR0FBVSxFQUFLLFNBQVMsY0FDL0IsR0FBWSxJQUFRLEVBQ3BCLEdBQU8sQ0FFUixJQUFLLEVBQVMsQ0FHYixHQUFLLEVBQVMsQ0FDYixLQUFRLEdBQU0sQ0FFYixJQURBLEVBQU8sRUFDRSxFQUFPLEVBQU0sSUFDckIsR0FBSyxFQUNKLEVBQUssU0FBUyxnQkFBa0IsRUFDZCxJQUFsQixFQUFLLFNBRUwsT0FBTyxDQUlULEdBQVEsRUFBZSxTQUFULElBQW9CLEdBQVMsY0FFNUMsT0FBTyxFQU1SLEdBSEEsR0FBVSxFQUFVLEVBQU8sV0FBYSxFQUFPLFdBRzFDLEdBQVcsR0FrQmYsSUFiQSxFQUFPLEVBQ1AsRUFBYSxFQUFNLEtBQWMsRUFBTSxPQUl2QyxFQUFjLEVBQVksRUFBSyxZQUM3QixFQUFZLEVBQUssY0FFbkIsRUFBUSxFQUFhLE9BQ3JCLEVBQVksRUFBTyxLQUFRLEdBQVcsRUFBTyxHQUM3QyxFQUFPLEdBQWEsRUFBTyxHQUMzQixFQUFPLEdBQWEsRUFBTyxXQUFZLEdBRTlCLElBQVMsR0FBYSxHQUFRLEVBQU0sS0FHM0MsRUFBTyxFQUFZLElBQU0sRUFBTSxPQUdoQyxHQUF1QixJQUFsQixFQUFLLFlBQW9CLEdBQVEsSUFBUyxFQUFPLENBQ3JELEVBQWEsSUFBVyxFQUFTLEVBQVcsRUFDNUMsWUF1QkYsSUFqQkssSUFFSixFQUFPLEVBQ1AsRUFBYSxFQUFNLEtBQWMsRUFBTSxPQUl2QyxFQUFjLEVBQVksRUFBSyxZQUM3QixFQUFZLEVBQUssY0FFbkIsRUFBUSxFQUFhLE9BQ3JCLEVBQVksRUFBTyxLQUFRLEdBQVcsRUFBTyxHQUM3QyxFQUFPLElBS00sSUFBVCxFQUVKLE1BQVMsSUFBUyxHQUFhLEdBQVEsRUFBTSxLQUMzQyxFQUFPLEVBQVksSUFBTSxFQUFNLFVBRXpCLEVBQ04sRUFBSyxTQUFTLGdCQUFrQixFQUNkLElBQWxCLEVBQUssY0FDSCxJQUdHLElBQ0osRUFBYSxFQUFNLEtBQWMsRUFBTSxPQUl2QyxFQUFjLEVBQVksRUFBSyxZQUM3QixFQUFZLEVBQUssY0FFbkIsRUFBYSxJQUFXLEVBQVMsSUFHN0IsSUFBUyxNQVVsQixPQURBLEdBQVEsS0FDUSxHQUFXLEVBQU8sR0FBVSxHQUFLLEVBQU8sR0FBUyxLQUtyRSxPQUFVLFNBQVUsRUFBUSxHQUszQixHQUFJLEdBQ0gsRUFBSyxFQUFLLFFBQVMsSUFBWSxFQUFLLFdBQVksRUFBTyxnQkFDdEQsRUFBTyxNQUFPLHVCQUF5QixFQUt6QyxPQUFLLEdBQUksR0FDRCxFQUFJLEdBSVAsRUFBRyxPQUFTLEdBQ2hCLEdBQVMsRUFBUSxFQUFRLEdBQUksR0FDdEIsRUFBSyxXQUFXLGVBQWdCLEVBQU8sZUFDN0MsRUFBYSxTQUFVLEVBQU0sR0FJNUIsSUFIQSxHQUFJLEdBQ0gsRUFBVSxFQUFJLEVBQU0sR0FDcEIsRUFBSSxFQUFRLE9BQ0wsS0FDUCxFQUFNLEVBQVMsRUFBTSxFQUFRLElBQzdCLEVBQU0sS0FBVyxFQUFTLEdBQVEsRUFBUSxNQUc1QyxTQUFVLEdBQ1QsTUFBTyxHQUFJLEVBQU0sRUFBRyxLQUloQixJQUlULFNBRUMsSUFBTyxFQUFhLFNBQVUsR0FJN0IsR0FBSSxNQUNILEtBQ0EsRUFBVSxFQUFTLEVBQVMsUUFBUyxHQUFPLE1BRTdDLE9BQU8sR0FBUyxHQUNmLEVBQWEsU0FBVSxFQUFNLEVBQVMsRUFBUyxHQU05QyxJQUxBLEdBQUksR0FDSCxFQUFZLEVBQVMsRUFBTSxLQUFNLE1BQ2pDLEVBQUksRUFBSyxPQUdGLE1BQ0QsRUFBTyxFQUFVLE1BQ3RCLEVBQUssS0FBTyxFQUFRLEdBQUssTUFJNUIsU0FBVSxFQUFNLEVBQVMsR0FLeEIsTUFKQSxHQUFNLEdBQUssRUFDWCxFQUFTLEVBQU8sS0FBTSxFQUFLLEdBRTNCLEVBQU0sR0FBSyxNQUNILEVBQVEsU0FJbkIsSUFBTyxFQUFhLFNBQVUsR0FDN0IsTUFBTyxVQUFVLEdBQ2hCLE1BQU8sR0FBUSxFQUFVLEdBQU8sT0FBUyxLQUkzQyxTQUFZLEVBQWEsU0FBVSxHQUVsQyxNQURBLEdBQU8sRUFBSyxRQUFTLEdBQVc7MEJBQ3pCLFNBQVUsR0FDaEIsT0FBUyxFQUFLLGFBQWUsRUFBUyxJQUFTLFFBQVMsSUFBVSxLQVdwRSxLQUFRLEVBQWMsU0FBVSxHQU0vQixNQUpNLElBQVksS0FBSyxHQUFRLEtBQzlCLEVBQU8sTUFBTyxxQkFBdUIsR0FFdEMsRUFBTyxFQUFLLFFBQVMsR0FBVyxJQUFZLGNBQ3JDLFNBQVUsR0FDaEIsR0FBSSxFQUNKLElBQ0MsR0FBTSxFQUFXLEVBQ2hCLEVBQUssS0FDTCxFQUFLLGFBQWEsYUFBZSxFQUFLLGFBQWEsUUFHbkQsT0FEQSxFQUFXLEVBQVMsaUJBQ0EsR0FBMkMsSUFBbkMsRUFBUyxRQUFTLEVBQU8sWUFFNUMsRUFBTyxFQUFLLGFBQWlDLElBQWxCLEVBQUssU0FDM0MsUUFBTyxLQUtULE9BQVUsU0FBVSxHQUNuQixHQUFJLEdBQU8sRUFBTyxVQUFZLEVBQU8sU0FBUyxJQUM5QyxPQUFPLElBQVEsRUFBSyxNQUFPLEtBQVEsRUFBSyxJQUd6QyxLQUFRLFNBQVUsR0FDakIsTUFBTyxLQUFTLEdBR2pCLE1BQVMsU0FBVSxHQUNsQixNQUFPLEtBQVMsRUFBUyxpQkFBbUIsRUFBUyxVQUFZLEVBQVMsZ0JBQWtCLEVBQUssTUFBUSxFQUFLLE9BQVMsRUFBSyxXQUk3SCxRQUFXLEdBQXNCLEdBQ2pDLFNBQVksR0FBc0IsR0FFbEMsUUFBVyxTQUFVLEdBR3BCLEdBQUksR0FBVyxFQUFLLFNBQVMsYUFDN0IsT0FBcUIsVUFBYixLQUEwQixFQUFLLFNBQTBCLFdBQWIsS0FBMkIsRUFBSyxVQUdyRixTQUFZLFNBQVUsR0FPckIsTUFKSyxHQUFLLFlBQ1QsRUFBSyxXQUFXLGVBR1EsSUFBbEIsRUFBSyxVQUliLE1BQVMsU0FBVSxHQUtsQixJQUFNLEVBQU8sRUFBSyxXQUFZLEVBQU0sRUFBTyxFQUFLLFlBQy9DLEdBQUssRUFBSyxTQUFXLEVBQ3BCLE9BQU8sQ0FHVCxRQUFPLEdBR1IsT0FBVSxTQUFVLEdBQ25CLE9BQVEsRUFBSyxRQUFlLE1BQUcsSUFJaEMsT0FBVSxTQUFVLEdBQ25CLE1BQU8sSUFBUSxLQUFNLEVBQUssV0FHM0IsTUFBUyxTQUFVLEdBQ2xCLE1BQU8sSUFBUSxLQUFNLEVBQUssV0FHM0IsT0FBVSxTQUFVLEdBQ25CLEdBQUksR0FBTyxFQUFLLFNBQVMsYUFDekIsT0FBZ0IsVUFBVCxHQUFrQyxXQUFkLEVBQUssTUFBOEIsV0FBVCxHQUd0RCxLQUFRLFNBQVUsR0FDakIsR0FBSSxFQUNKLE9BQXVDLFVBQWhDLEVBQUssU0FBUyxlQUNOLFNBQWQsRUFBSyxPQUltQyxPQUFyQyxFQUFPLEVBQUssYUFBYSxVQUEyQyxTQUF2QixFQUFLLGdCQUl2RCxNQUFTLEVBQXVCLFdBQy9CLE9BQVMsS0FHVixLQUFRLEVBQXVCLFNBQVUsRUFBYyxHQUN0RCxPQUFTLEVBQVMsS0FHbkIsR0FBTSxFQUF1QixTQUFVLEVBQWMsRUFBUSxHQUM1RCxPQUFTLEVBQVcsRUFBSSxFQUFXLEVBQVMsS0FHN0MsS0FBUSxFQUF1QixTQUFVLEVBQWMsR0FFdEQsSUFEQSxHQUFJLEdBQUksRUFDQSxFQUFJLEVBQVEsR0FBSyxFQUN4QixFQUFhLEtBQU0sRUFFcEIsT0FBTyxLQUdSLElBQU8sRUFBdUIsU0FBVSxFQUFjLEdBRXJELElBREEsR0FBSSxHQUFJLEVBQ0EsRUFBSSxFQUFRLEdBQUssRUFDeEIsRUFBYSxLQUFNLEVBRXBCLE9BQU8sS0FHUixHQUFNLEVBQXVCLFNBQVUsRUFBYyxFQUFRLEdBTTVELElBTEEsR0FBSSxHQUFJLEVBQVcsRUFDbEIsRUFBVyxFQUNYLEVBQVcsRUFDVixFQUNBLElBQ1EsR0FBSyxHQUNkLEVBQWEsS0FBTSxFQUVwQixPQUFPLEtBR1IsR0FBTSxFQUF1QixTQUFVLEVBQWMsRUFBUSxHQUU1RCxJQURBLEdBQUksR0FBSSxFQUFXLEVBQUksRUFBVyxFQUFTLElBQ2pDLEVBQUksR0FDYixFQUFhLEtBQU0sRUFFcEIsT0FBTyxPQUtWLEVBQUssUUFBYSxJQUFJLEVBQUssUUFBWSxFQUd2QyxLQUFNLEtBQU8sT0FBTyxFQUFNLFVBQVUsRUFBTSxNQUFNLEVBQU0sVUFBVSxFQUFNLE9BQU8sR0FDNUUsRUFBSyxRQUFTLEdBOXBDZixTQUE0QixHQUMzQixNQUFPLFVBQVUsR0FFaEIsTUFBZ0IsVUFETCxFQUFLLFNBQVMsZUFDRSxFQUFLLE9BQVMsSUEycENILEVBRXhDLEtBQU0sS0FBTyxRQUFRLEVBQU0sT0FBTyxHQUNqQyxFQUFLLFFBQVMsR0F0cENmLFNBQTZCLEdBQzVCLE1BQU8sVUFBVSxHQUNoQixHQUFJLEdBQU8sRUFBSyxTQUFTLGFBQ3pCLFFBQWlCLFVBQVQsR0FBNkIsV0FBVCxJQUFzQixFQUFLLE9BQVMsSUFtcEN6QixFQW1uQnpDLE9BOW1CQSxHQUFXLFVBQVksRUFBSyxRQUFVLEVBQUssUUFDM0MsRUFBSyxXQUFhLEdBQUksR0FFdEIsRUFBVyxFQUFPLFNBQVcsU0FBVSxFQUFVLEdBQ2hELEdBQUksR0FBUyxFQUFPLEVBQVEsRUFDM0IsRUFBTyxFQUFRLEVBQ2YsRUFBUyxFQUFZLEVBQVcsSUFFakMsSUFBSyxFQUNKLE1BQU8sR0FBWSxFQUFJLEVBQU8sTUFBTyxFQU90QyxLQUpBLEVBQVEsRUFDUixLQUNBLEVBQWEsRUFBSyxVQUVWLEdBQVEsQ0FHVCxLQUFZLEVBQVEsR0FBTyxLQUFNLE1BQ2pDLElBRUosRUFBUSxFQUFNLE1BQU8sRUFBTSxHQUFHLFNBQVksR0FFM0MsRUFBTyxLQUFPLE9BR2YsR0FBVSxHQUdKLEVBQVEsR0FBYSxLQUFNLE1BQ2hDLEVBQVUsRUFBTSxRQUNoQixFQUFPLE1BQ04sTUFBTyxFQUVQLEtBQU0sRUFBTSxHQUFHLFFBQVMsR0FBTyxPQUVoQyxFQUFRLEVBQU0sTUFBTyxFQUFRLFFBSTlCLEtBQU0sSUFBUSxHQUFLLFNBQ1osRUFBUSxHQUFXLEdBQU8sS0FBTSxLQUFjLEVBQVksTUFDOUQsRUFBUSxFQUFZLEdBQVEsTUFDN0IsRUFBVSxFQUFNLFFBQ2hCLEVBQU8sTUFDTixNQUFPLEVBQ1AsS0FBTSxFQUNOLFFBQVMsSUFFVixFQUFRLEVBQU0sTUFBTyxFQUFRLFFBSS9CLEtBQU0sRUFDTCxNQU9GLE1BQU8sR0FDTixFQUFNLE9BQ04sRUFDQyxFQUFPLE1BQU8sR0FFZCxFQUFZLEVBQVUsR0FBUyxNQUFPLElBK1h6QyxFQUFVLEVBQU8sUUFBVSxTQUFVLEVBQVUsR0FDOUMsR0FBSSxHQUNILEtBQ0EsS0FDQSxFQUFTLEVBQWUsRUFBVyxJQUVwQyxLQUFNLEVBQVMsQ0FNZCxJQUpNLElBQ0wsRUFBUSxFQUFVLElBRW5CLEVBQUksRUFBTSxPQUNGLEtBQ1AsRUFBUyxFQUFtQixFQUFNLElBQzdCLEVBQVEsR0FDWixFQUFZLEtBQU0sR0FFbEIsRUFBZ0IsS0FBTSxFQUt4QixHQUFTLEVBQWUsRUFBVSxFQUEwQixFQUFpQixJQUc3RSxFQUFPLFNBQVcsRUFFbkIsTUFBTyxJQVlSLEVBQVMsRUFBTyxPQUFTLFNBQVUsRUFBVSxFQUFTLEVBQVMsR0FDOUQsR0FBSSxHQUFHLEVBQVEsRUFBTyxFQUFNLEVBQzNCLEVBQStCLGtCQUFiLElBQTJCLEVBQzdDLEdBQVMsR0FBUSxFQUFXLEVBQVcsRUFBUyxVQUFZLEVBTTdELElBSkEsRUFBVSxNQUlZLElBQWpCLEVBQU0sT0FBZSxDQUl6QixHQURBLEVBQVMsRUFBTSxHQUFLLEVBQU0sR0FBRyxNQUFPLEdBQy9CLEVBQU8sT0FBUyxHQUFrQyxRQUE1QixFQUFRLEVBQU8sSUFBSSxNQUN2QixJQUFyQixFQUFRLFVBQWtCLEdBQWtCLEVBQUssU0FBVSxFQUFPLEdBQUcsTUFBUyxDQUcvRSxLQURBLEdBQVksRUFBSyxLQUFTLEdBQUcsRUFBTSxRQUFRLEdBQUcsUUFBUSxHQUFXLElBQVksUUFBa0IsSUFFOUYsTUFBTyxFQUdJLEtBQ1gsRUFBVSxFQUFRLFlBR25CLEVBQVcsRUFBUyxNQUFPLEVBQU8sUUFBUSxNQUFNLFFBS2pELElBREEsRUFBSSxHQUF3QixhQUFFLEtBQU0sR0FBYSxFQUFJLEVBQU8sT0FDcEQsTUFDUCxFQUFRLEVBQU8sSUFHVixFQUFLLFNBQVcsRUFBTyxFQUFNLFFBR2xDLElBQU0sRUFBTyxFQUFLLEtBQU0sTUFFakIsRUFBTyxFQUNaLEVBQU0sUUFBUSxHQUFHLFFBQVMsR0FBVyxJQUNyQyxHQUFTLEtBQU0sRUFBTyxHQUFHLE9BQVUsRUFBYSxFQUFRLGFBQWdCLElBQ3BFLENBS0osR0FGQSxFQUFPLE9BQVEsRUFBRyxLQUNsQixFQUFXLEVBQUssUUFBVSxFQUFZLElBR3JDLE1BREEsR0FBSyxNQUFPLEVBQVMsR0FDZCxDQUdSLFFBZUosT0FQRSxHQUFZLEVBQVMsRUFBVSxJQUNoQyxFQUNBLEdBQ0MsRUFDRCxHQUNDLEdBQVcsR0FBUyxLQUFNLElBQWMsRUFBYSxFQUFRLGFBQWdCLEdBRXhFLEdBTVIsRUFBUSxXQUFhLEVBQVEsTUFBTSxJQUFJLEtBQU0sR0FBWSxLQUFLLE1BQVEsRUFJdEUsRUFBUSxtQkFBcUIsRUFHN0IsSUFJQSxFQUFRLGFBQWUsRUFBTyxTQUFVLEdBRXZDLE1BQTBFLEdBQW5FLEVBQUcsd0JBQXlCLEVBQVMsY0FBYyxlQU1yRCxFQUFPLFNBQVUsR0FFdEIsTUFEQSxHQUFHLFVBQVksbUJBQytCLE1BQXZDLEVBQUcsV0FBVyxhQUFhLFdBRWxDLEVBQVcseUJBQTBCLFNBQVUsRUFBTSxFQUFNLEdBQzFELElBQU0sRUFDTCxNQUFPLEdBQUssYUFBYyxFQUE2QixTQUF2QixFQUFLLGNBQTJCLEVBQUksS0FPakUsRUFBUSxZQUFlLEVBQU8sU0FBVSxHQUc3QyxNQUZBLEdBQUcsVUFBWSxXQUNmLEVBQUcsV0FBVyxhQUFjLFFBQVMsSUFDWSxLQUExQyxFQUFHLFdBQVcsYUFBYyxZQUVuQyxFQUFXLFFBQVMsU0FBVSxFQUFNLEVBQU0sR0FDekMsSUFBTSxHQUF5QyxVQUFoQyxFQUFLLFNBQVMsY0FDNUIsTUFBTyxHQUFLLGVBT1QsRUFBTyxTQUFVLEdBQ3RCLE1BQXNDLE9BQS9CLEVBQUcsYUFBYSxlQUV2QixFQUFXLEdBQVUsU0FBVSxFQUFNLEVBQU0sR0FDMUMsR0FBSSxFQUNKLEtBQU0sRUFDTCxPQUF3QixJQUFqQixFQUFNLEdBQWtCLEVBQUssZUFDakMsRUFBTSxFQUFLLGlCQUFrQixLQUFXLEVBQUksVUFDN0MsRUFBSSxNQUNMLE9BS0csR0FFSCxFQUlKLElBQU8sS0FBTyxHQUNkLEdBQU8sS0FBTyxHQUFPLFVBR3JCLEdBQU8sS0FBTSxLQUFRLEdBQU8sS0FBSyxRQUNqQyxHQUFPLFdBQWEsR0FBTyxPQUFTLEdBQU8sV0FDM0MsR0FBTyxLQUFPLEdBQU8sUUFDckIsR0FBTyxTQUFXLEdBQU8sTUFDekIsR0FBTyxTQUFXLEdBQU8sU0FDekIsR0FBTyxlQUFpQixHQUFPLE1BSy9CLElBQUksSUFBTSxTQUFVLEVBQU0sRUFBSyxHQUk5QixJQUhBLEdBQUksTUFDSCxNQUFxQixLQUFWLEdBRUYsRUFBTyxFQUFNLEtBQTZCLElBQWxCLEVBQUssVUFDdEMsR0FBdUIsSUFBbEIsRUFBSyxTQUFpQixDQUMxQixHQUFLLEdBQVksR0FBUSxHQUFPLEdBQUksR0FDbkMsS0FFRCxHQUFRLEtBQU0sR0FHaEIsTUFBTyxJQUlKLEdBQVcsU0FBVSxFQUFHLEdBRzNCLElBRkEsR0FBSSxNQUVJLEVBQUcsRUFBSSxFQUFFLFlBQ0ksSUFBZixFQUFFLFVBQWtCLElBQU0sR0FDOUIsRUFBUSxLQUFNLEVBSWhCLE9BQU8sSUFJSixHQUFnQixHQUFPLEtBQUssTUFBTSxhQVNsQyxHQUFhLGlFQThCakIsSUFBTyxPQUFTLFNBQVUsRUFBTSxFQUFPLEdBQ3RDLEdBQUksR0FBTyxFQUFPLEVBTWxCLE9BSkssS0FDSixFQUFPLFFBQVUsRUFBTyxLQUdILElBQWpCLEVBQU0sUUFBa0MsSUFBbEIsRUFBSyxTQUN4QixHQUFPLEtBQUssZ0JBQWlCLEVBQU0sSUFBVyxNQUcvQyxHQUFPLEtBQUssUUFBUyxFQUFNLEdBQU8sS0FBTSxFQUFPLFNBQVUsR0FDL0QsTUFBeUIsS0FBbEIsRUFBSyxhQUlkLEdBQU8sR0FBRyxRQUNULEtBQU0sU0FBVSxHQUNmLEdBQUksR0FBRyxFQUNOLEVBQU0sS0FBSyxPQUNYLEVBQU8sSUFFUixJQUF5QixnQkFBYixHQUNYLE1BQU8sTUFBSyxVQUFXLEdBQVEsR0FBVyxPQUFRLFdBQ2pELElBQU0sRUFBSSxFQUFHLEVBQUksRUFBSyxJQUNyQixHQUFLLEdBQU8sU0FBVSxFQUFNLEdBQUssTUFDaEMsT0FBTyxJQVFYLEtBRkEsRUFBTSxLQUFLLGNBRUwsRUFBSSxFQUFHLEVBQUksRUFBSyxJQUNyQixHQUFPLEtBQU0sRUFBVSxFQUFNLEdBQUssRUFHbkMsT0FBTyxHQUFNLEVBQUksR0FBTyxXQUFZLEdBQVEsR0FFN0MsT0FBUSxTQUFVLEdBQ2pCLE1BQU8sTUFBSyxVQUFXLEVBQVEsS0FBTSxPQUFnQixLQUV0RCxJQUFLLFNBQVUsR0FDZCxNQUFPLE1BQUssVUFBVyxFQUFRLEtBQU0sT0FBZ0IsS0FFdEQsR0FBSSxTQUFVLEdBQ2IsUUFBUyxFQUNSLEtBSW9CLGdCQUFiLElBQXlCLEdBQWMsS0FBTSxHQUNuRCxHQUFRLEdBQ1IsT0FDRCxHQUNDLFNBU0osSUFBSSxJQU1ILEdBQWEsdUNBRU4sR0FBTyxHQUFHLEtBQU8sU0FBVSxFQUFVLEVBQVMsR0FDcEQsR0FBSSxHQUFPLENBR1gsS0FBTSxFQUNMLE1BQU8sS0FRUixJQUhBLEVBQU8sR0FBUSxHQUdVLGdCQUFiLEdBQXdCLENBYW5DLEtBUEMsRUFMc0IsTUFBbEIsRUFBVSxJQUNzQixNQUFwQyxFQUFVLEVBQVMsT0FBUyxJQUM1QixFQUFTLFFBQVUsR0FHVCxLQUFNLEVBQVUsTUFHbEIsR0FBVyxLQUFNLE1BSVYsRUFBTyxJQUFRLEVBNkN4QixPQUFNLEdBQVcsRUFBUSxRQUN0QixHQUFXLEdBQU8sS0FBTSxHQUsxQixLQUFLLFlBQWEsR0FBVSxLQUFNLEVBaER6QyxJQUFLLEVBQU8sR0FBTSxDQVlqQixHQVhBLEVBQVUsWUFBbUIsSUFBUyxFQUFTLEdBQU0sRUFJckQsR0FBTyxNQUFPLEtBQU0sR0FBTyxVQUMxQixFQUFPLEdBQ1AsR0FBVyxFQUFRLFNBQVcsRUFBUSxlQUFpQixFQUFVLElBQ2pFLElBSUksR0FBVyxLQUFNLEVBQU8sS0FBUyxHQUFPLGNBQWUsR0FDM0QsSUFBTSxJQUFTLEdBR1QsR0FBWSxLQUFNLElBQ3RCLEtBQU0sR0FBUyxFQUFTLElBSXhCLEtBQUssS0FBTSxFQUFPLEVBQVMsR0FLOUIsT0FBTyxNQVlQLE1BUkEsR0FBTyxHQUFTLGVBQWdCLEVBQU8sSUFFbEMsSUFHSixLQUFNLEdBQU0sRUFDWixLQUFLLE9BQVMsR0FFUixLQWNILE1BQUssR0FBUyxVQUNwQixLQUFNLEdBQU0sRUFDWixLQUFLLE9BQVMsRUFDUCxNQUlJLEdBQVksT0FDRCxLQUFmLEVBQUssTUFDWCxFQUFLLE1BQU8sR0FHWixFQUFVLElBR0wsR0FBTyxVQUFXLEVBQVUsUUFJaEMsVUFBWSxHQUFPLEdBR3hCLEdBQWEsR0FBUSxHQUdyQixJQUFJLElBQWUsaUNBR2xCLElBQ0MsVUFBVSxFQUNWLFVBQVUsRUFDVixNQUFNLEVBQ04sTUFBTSxFQUdSLElBQU8sR0FBRyxRQUNULElBQUssU0FBVSxHQUNkLEdBQUksR0FBVSxHQUFRLEVBQVEsTUFDN0IsRUFBSSxFQUFRLE1BRWIsT0FBTyxNQUFLLE9BQVEsV0FFbkIsSUFEQSxHQUFJLEdBQUksRUFDQSxFQUFJLEVBQUcsSUFDZCxHQUFLLEdBQU8sU0FBVSxLQUFNLEVBQVMsSUFDcEMsT0FBTyxLQU1YLFFBQVMsU0FBVSxFQUFXLEdBQzdCLEdBQUksR0FDSCxFQUFJLEVBQ0osRUFBSSxLQUFLLE9BQ1QsS0FDQSxFQUErQixnQkFBZCxJQUEwQixHQUFRLEVBR3BELEtBQU0sR0FBYyxLQUFNLEdBQ3pCLEtBQVEsRUFBSSxFQUFHLElBQ2QsSUFBTSxFQUFNLEtBQU0sR0FBSyxHQUFPLElBQVEsRUFBUyxFQUFNLEVBQUksV0FHeEQsR0FBSyxFQUFJLFNBQVcsS0FBUSxFQUMzQixFQUFRLE1BQU8sSUFBUyxFQUdQLElBQWpCLEVBQUksVUFDSCxHQUFPLEtBQUssZ0JBQWlCLEVBQUssSUFBZ0IsQ0FFbkQsRUFBUSxLQUFNLEVBQ2QsT0FNSixNQUFPLE1BQUssVUFBVyxFQUFRLE9BQVMsRUFBSSxHQUFPLFdBQVksR0FBWSxJQUk1RSxNQUFPLFNBQVUsR0FHaEIsTUFBTSxHQUtlLGdCQUFULEdBQ0osR0FBUSxLQUFNLEdBQVEsR0FBUSxLQUFNLElBSXJDLEdBQVEsS0FBTSxLQUdwQixFQUFLLE9BQVMsRUFBTSxHQUFNLEdBWmpCLEtBQU0sSUFBTyxLQUFNLEdBQUksV0FBZSxLQUFLLFFBQVEsVUFBVSxRQUFVLEdBZ0JsRixJQUFLLFNBQVUsRUFBVSxHQUN4QixNQUFPLE1BQUssVUFDWCxHQUFPLFdBQ04sR0FBTyxNQUFPLEtBQUssTUFBTyxHQUFRLEVBQVUsT0FLL0MsUUFBUyxTQUFVLEdBQ2xCLE1BQU8sTUFBSyxJQUFpQixNQUFaLEVBQ2hCLEtBQUssV0FBYSxLQUFLLFdBQVcsT0FBUSxPQVU3QyxHQUFPLE1BQ04sT0FBUSxTQUFVLEdBQ2pCLEdBQUksR0FBUyxFQUFLLFVBQ2xCLE9BQU8sSUFBOEIsS0FBcEIsRUFBTyxTQUFrQixFQUFTLE1BRXBELFFBQVMsU0FBVSxHQUNsQixNQUFPLElBQUssRUFBTSxlQUVuQixhQUFjLFNBQVUsRUFBTSxFQUFHLEdBQ2hDLE1BQU8sSUFBSyxFQUFNLGFBQWMsSUFFakMsS0FBTSxTQUFVLEdBQ2YsTUFBTyxHQUFTLEVBQU0sZ0JBRXZCLEtBQU0sU0FBVSxHQUNmLE1BQU8sR0FBUyxFQUFNLG9CQUV2QixRQUFTLFNBQVUsR0FDbEIsTUFBTyxJQUFLLEVBQU0sZ0JBRW5CLFFBQVMsU0FBVSxHQUNsQixNQUFPLElBQUssRUFBTSxvQkFFbkIsVUFBVyxTQUFVLEVBQU0sRUFBRyxHQUM3QixNQUFPLElBQUssRUFBTSxjQUFlLElBRWxDLFVBQVcsU0FBVSxFQUFNLEVBQUcsR0FDN0IsTUFBTyxJQUFLLEVBQU0sa0JBQW1CLElBRXRDLFNBQVUsU0FBVSxHQUNuQixNQUFPLEtBQVksRUFBSyxnQkFBbUIsV0FBWSxJQUV4RCxTQUFVLFNBQVUsR0FDbkIsTUFBTyxJQUFVLEVBQUssYUFFdkIsU0FBVSxTQUFVLEdBQ25CLFdBQXFDLEtBQXpCLEVBQUssZ0JBQ1QsRUFBSyxpQkFNUixFQUFVLEVBQU0sY0FDcEIsRUFBTyxFQUFLLFNBQVcsR0FHakIsR0FBTyxTQUFXLEVBQUssZUFFN0IsU0FBVSxFQUFNLEdBQ2xCLEdBQU8sR0FBSSxHQUFTLFNBQVUsRUFBTyxHQUNwQyxHQUFJLEdBQVUsR0FBTyxJQUFLLEtBQU0sRUFBSSxFQXVCcEMsT0FyQjBCLFVBQXJCLEVBQUssT0FBUSxLQUNqQixFQUFXLEdBR1AsR0FBZ0MsZ0JBQWIsS0FDdkIsRUFBVSxHQUFPLE9BQVEsRUFBVSxJQUcvQixLQUFLLE9BQVMsSUFHWixHQUFrQixJQUN2QixHQUFPLFdBQVksR0FJZixHQUFhLEtBQU0sSUFDdkIsRUFBUSxXQUlILEtBQUssVUFBVyxLQUd6QixJQUFJLElBQWdCLG1CQW1DcEIsSUFBTyxVQUFZLFNBQVUsR0FJNUIsRUFBNkIsZ0JBQVosR0FDaEIsRUFBZSxHQUNmLEdBQU8sVUFBWSxFQUVwQixJQUNDLEdBR0EsRUFHQSxFQUdBLEVBR0EsS0FHQSxLQUdBLEdBQWUsRUFHZixFQUFPLFdBUU4sSUFMQSxFQUFTLEdBQVUsRUFBUSxLQUkzQixFQUFRLEdBQVMsRUFDVCxFQUFNLE9BQVEsR0FBZSxFQUVwQyxJQURBLEVBQVMsRUFBTSxVQUNMLEVBQWMsRUFBSyxTQUdtQyxJQUExRCxFQUFNLEdBQWMsTUFBTyxFQUFRLEdBQUssRUFBUSxLQUNwRCxFQUFRLGNBR1IsRUFBYyxFQUFLLE9BQ25CLEdBQVMsRUFNTixHQUFRLFNBQ2IsR0FBUyxHQUdWLEdBQVMsRUFHSixJQUlILEVBREksS0FLRyxLQU1WLEdBR0MsSUFBSyxXQTJCSixNQTFCSyxLQUdDLElBQVcsSUFDZixFQUFjLEVBQUssT0FBUyxFQUM1QixFQUFNLEtBQU0sSUFHYixRQUFXLEdBQUssR0FDZixHQUFPLEtBQU0sRUFBTSxTQUFVLEVBQUcsR0FDMUIsR0FBWSxHQUNWLEVBQVEsUUFBVyxFQUFLLElBQUssSUFDbEMsRUFBSyxLQUFNLEdBRUQsR0FBTyxFQUFJLFFBQTRCLFdBQWxCLEVBQVEsSUFHeEMsRUFBSyxNQUdILFdBRUEsSUFBVyxHQUNmLEtBR0ssTUFJUixPQUFRLFdBWVAsTUFYQSxJQUFPLEtBQU0sVUFBVyxTQUFVLEVBQUcsR0FFcEMsSUFEQSxHQUFJLElBQ00sRUFBUSxHQUFPLFFBQVMsRUFBSyxFQUFNLEtBQWEsR0FDekQsRUFBSyxPQUFRLEVBQU8sR0FHZixHQUFTLEdBQ2IsTUFJSSxNQUtSLElBQUssU0FBVSxHQUNkLE1BQU8sR0FDTixHQUFPLFFBQVMsRUFBSSxJQUFVLEVBQzlCLEVBQUssT0FBUyxHQUloQixNQUFPLFdBSU4sTUFISyxLQUNKLE1BRU0sTUFNUixRQUFTLFdBR1IsTUFGQSxHQUFTLEtBQ1QsRUFBTyxFQUFTLEdBQ1QsTUFFUixTQUFVLFdBQ1QsT0FBUSxHQU1ULEtBQU0sV0FLTCxNQUpBLEdBQVMsS0FDSCxHQUFXLElBQ2hCLEVBQU8sRUFBUyxJQUVWLE1BRVIsT0FBUSxXQUNQLFFBQVMsR0FJVixTQUFVLFNBQVUsRUFBUyxHQVM1QixNQVJNLEtBQ0wsRUFBTyxNQUNQLEdBQVMsRUFBUyxFQUFLLE1BQVEsRUFBSyxRQUFVLEdBQzlDLEVBQU0sS0FBTSxHQUNOLEdBQ0wsS0FHSyxNQUlSLEtBQU0sV0FFTCxNQURBLEdBQUssU0FBVSxLQUFNLFdBQ2QsTUFJUixNQUFPLFdBQ04sUUFBUyxHQUlaLE9BQU8sSUE0Q1IsR0FBTyxRQUVOLFNBQVUsU0FBVSxHQUNuQixHQUFJLEtBSUEsU0FBVSxXQUFZLEdBQU8sVUFBVyxVQUN6QyxHQUFPLFVBQVcsVUFBWSxJQUM3QixVQUFXLE9BQVEsR0FBTyxVQUFXLGVBQ3RDLEdBQU8sVUFBVyxlQUFpQixFQUFHLGFBQ3JDLFNBQVUsT0FBUSxHQUFPLFVBQVcsZUFDckMsR0FBTyxVQUFXLGVBQWlCLEVBQUcsYUFFeEMsRUFBUSxVQUNSLEdBQ0MsTUFBTyxXQUNOLE1BQU8sSUFFUixPQUFRLFdBRVAsTUFEQSxHQUFTLEtBQU0sV0FBWSxLQUFNLFdBQzFCLE1BRVIsTUFBUyxTQUFVLEdBQ2xCLE1BQU8sR0FBUSxLQUFNLEtBQU0sSUFJNUIsS0FBTSxXQUNMLEdBQUksR0FBTSxTQUVWLE9BQU8sSUFBTyxTQUFVLFNBQVUsR0FDakMsR0FBTyxLQUFNLEVBQVEsU0FBVSxFQUFHLEdBR2pDLEdBQUksR0FBSyxHQUFZLEVBQUssRUFBTyxNQUFXLEVBQUssRUFBTyxHQUt4RCxHQUFVLEVBQU8sSUFBTyxXQUN2QixHQUFJLEdBQVcsR0FBTSxFQUFHLE1BQU8sS0FBTSxVQUNoQyxJQUFZLEdBQVksRUFBUyxTQUNyQyxFQUFTLFVBQ1AsU0FBVSxFQUFTLFFBQ25CLEtBQU0sRUFBUyxTQUNmLEtBQU0sRUFBUyxRQUVqQixFQUFVLEVBQU8sR0FBTSxRQUN0QixLQUNBLEdBQU8sR0FBYSxlQUt4QixFQUFNLE9BQ0gsV0FFTCxLQUFNLFNBQVUsRUFBYSxFQUFZLEdBRXhDLFFBQVMsR0FBUyxFQUFPLEVBQVUsRUFBUyxHQUMzQyxNQUFPLFlBQ04sR0FBSSxHQUFPLEtBQ1YsRUFBTyxVQUNQLEVBQWEsV0FDWixHQUFJLEdBQVUsQ0FLZCxNQUFLLEVBQVEsR0FBYixDQVFBLElBSkEsRUFBVyxFQUFRLE1BQU8sRUFBTSxNQUlkLEVBQVMsVUFDMUIsS0FBTSxJQUFJLFdBQVcsMkJBT3RCLEdBQU8sSUFLZ0IsZ0JBQWIsSUFDWSxrQkFBYixLQUNSLEVBQVMsS0FHTCxHQUFZLEdBR1gsRUFDSixFQUFLLEtBQ0osRUFDQSxFQUFTLEVBQVUsRUFBVSxFQUFVLEdBQ3ZDLEVBQVMsRUFBVSxFQUFVLEVBQVMsS0FPdkMsSUFFQSxFQUFLLEtBQ0osRUFDQSxFQUFTLEVBQVUsRUFBVSxFQUFVLEdBQ3ZDLEVBQVMsRUFBVSxFQUFVLEVBQVMsR0FDdEMsRUFBUyxFQUFVLEVBQVUsRUFDNUIsRUFBUyxlQVNQLElBQVksSUFDaEIsTUFBTyxHQUNQLEdBQVMsS0FLUixHQUFXLEVBQVMsYUFBZSxFQUFNLE1BSzdDLEVBQVUsRUFDVCxFQUNBLFdBQ0MsSUFDQyxJQUNDLE1BQVEsR0FFSixHQUFPLFNBQVMsZUFDcEIsR0FBTyxTQUFTLGNBQWUsRUFDOUIsRUFBUSxZQU1MLEVBQVEsR0FBSyxJQUlaLElBQVksSUFDaEIsTUFBTyxHQUNQLEdBQVMsSUFHVixFQUFTLFdBQVksRUFBTSxLQVMzQixHQUNKLEtBS0ssR0FBTyxTQUFTLGVBQ3BCLEVBQVEsV0FBYSxHQUFPLFNBQVMsZ0JBRXRDLEVBQU8sV0FBWSxLQXpIdEIsR0FBSSxHQUFXLENBOEhmLE9BQU8sSUFBTyxTQUFVLFNBQVUsR0FHakMsRUFBUSxHQUFLLEdBQUksSUFDaEIsRUFDQyxFQUNBLEVBQ0EsR0FBWSxHQUNYLEVBQ0EsRUFDRCxFQUFTLGFBS1gsRUFBUSxHQUFLLEdBQUksSUFDaEIsRUFDQyxFQUNBLEVBQ0EsR0FBWSxHQUNYLEVBQ0EsSUFLSCxFQUFRLEdBQUssR0FBSSxJQUNoQixFQUNDLEVBQ0EsRUFDQSxHQUFZLEdBQ1gsRUFDQSxNQUdBLFdBS0wsUUFBUyxTQUFVLEdBQ2xCLE1BQWMsT0FBUCxFQUFjLEdBQU8sT0FBUSxFQUFLLEdBQVksSUFHdkQsSUFrRUQsT0EvREEsSUFBTyxLQUFNLEVBQVEsU0FBVSxFQUFHLEdBQ2pDLEdBQUksR0FBTyxFQUFPLEdBQ2pCLEVBQWMsRUFBTyxFQUt0QixHQUFTLEVBQU8sSUFBUSxFQUFLLElBR3hCLEdBQ0osRUFBSyxJQUNKLFdBSUMsRUFBUSxHQUtULEVBQVEsRUFBSSxHQUFLLEdBQUksUUFJckIsRUFBUSxFQUFJLEdBQUssR0FBSSxRQUdyQixFQUFRLEdBQUssR0FBSSxLQUdqQixFQUFRLEdBQUssR0FBSSxNQU9uQixFQUFLLElBQUssRUFBTyxHQUFJLE1BS3JCLEVBQVUsRUFBTyxJQUFRLFdBRXhCLE1BREEsR0FBVSxFQUFPLEdBQU0sUUFBVSxPQUFTLE1BQVcsR0FBWSxLQUFNLFdBQ2hFLE1BTVIsRUFBVSxFQUFPLEdBQU0sUUFBVyxFQUFLLFdBSXhDLEVBQVEsUUFBUyxHQUdaLEdBQ0osRUFBSyxLQUFNLEVBQVUsR0FJZixHQUlSLEtBQU0sU0FBVSxHQUNmLEdBR0MsR0FBWSxVQUFVLE9BR3RCLEVBQUksRUFHSixFQUFrQixNQUFPLEdBQ3pCLEVBQWdCLEdBQU0sS0FBTSxXQUc1QixFQUFTLEdBQU8sV0FHaEIsRUFBYSxTQUFVLEdBQ3RCLE1BQU8sVUFBVSxHQUNoQixFQUFpQixHQUFNLEtBQ3ZCLEVBQWUsR0FBTSxVQUFVLE9BQVMsRUFBSSxHQUFNLEtBQU0sV0FBYyxJQUM1RCxHQUNULEVBQU8sWUFBYSxFQUFpQixJQU16QyxJQUFLLEdBQWEsSUFDakIsRUFBWSxFQUFhLEVBQU8sS0FBTSxFQUFZLElBQU0sUUFBUyxFQUFPLFFBQ3RFLEdBR3NCLFlBQW5CLEVBQU8sU0FDWCxHQUFZLEVBQWUsSUFBTyxFQUFlLEdBQUksT0FFckQsTUFBTyxHQUFPLE1BS2hCLE1BQVEsS0FDUCxFQUFZLEVBQWUsR0FBSyxFQUFZLEdBQUssRUFBTyxPQUd6RCxPQUFPLEdBQU8sWUFPaEIsSUFBSSxJQUFjLHdEQUVsQixJQUFPLFNBQVMsY0FBZ0IsU0FBVSxFQUFPLEdBSTNDLEVBQU8sU0FBVyxFQUFPLFFBQVEsTUFBUSxHQUFTLEdBQVksS0FBTSxFQUFNLE9BQzlFLEVBQU8sUUFBUSxLQUFNLDhCQUFnQyxFQUFNLFFBQVMsRUFBTSxNQUFPLElBT25GLEdBQU8sZUFBaUIsU0FBVSxHQUNqQyxFQUFPLFdBQVksV0FDbEIsS0FBTSxLQVFSLElBQUksSUFBWSxHQUFPLFVBRXZCLElBQU8sR0FBRyxNQUFRLFNBQVUsR0FZM0IsTUFWQSxJQUNFLEtBQU0sR0FLTixNQUFPLFNBQVUsR0FDakIsR0FBTyxlQUFnQixLQUdsQixNQUdSLEdBQU8sUUFHTixTQUFTLEVBSVQsVUFBVyxFQUdYLE1BQU8sU0FBVSxLQUdGLElBQVQsSUFBa0IsR0FBTyxVQUFZLEdBQU8sV0FLakQsR0FBTyxTQUFVLEdBR0gsSUFBVCxLQUFtQixHQUFPLFVBQVksR0FLM0MsR0FBVSxZQUFhLElBQVksU0FJckMsR0FBTyxNQUFNLEtBQU8sR0FBVSxLQWFELGFBQXhCLEdBQVMsWUFDYSxZQUF4QixHQUFTLGFBQTZCLEdBQVMsZ0JBQWdCLFNBR2pFLEVBQU8sV0FBWSxHQUFPLFFBSzFCLEdBQVMsaUJBQWtCLG1CQUFvQixHQUcvQyxFQUFPLGlCQUFrQixPQUFRLEdBUWxDLElBQUksSUFBUyxTQUFVLEVBQU8sRUFBSSxFQUFLLEVBQU8sRUFBVyxFQUFVLEdBQ2xFLEdBQUksR0FBSSxFQUNQLEVBQU0sRUFBTSxPQUNaLEVBQWMsTUFBUCxDQUdSLElBQXVCLFdBQWxCLEVBQVEsR0FBcUIsQ0FDakMsR0FBWSxDQUNaLEtBQU0sSUFBSyxHQUNWLEdBQVEsRUFBTyxFQUFJLEVBQUcsRUFBSyxJQUFLLEVBQU0sRUFBVSxPQUkzQyxRQUFlLEtBQVYsSUFDWCxHQUFZLEVBRU4sR0FBWSxLQUNqQixHQUFNLEdBR0YsSUFHQyxHQUNKLEVBQUcsS0FBTSxFQUFPLEdBQ2hCLEVBQUssT0FJTCxFQUFPLEVBQ1AsRUFBSyxTQUFVLEVBQU0sRUFBSyxHQUN6QixNQUFPLEdBQUssS0FBTSxHQUFRLEdBQVEsTUFLaEMsR0FDSixLQUFRLEVBQUksRUFBSyxJQUNoQixFQUNDLEVBQU8sR0FBSyxFQUFLLEVBQ2pCLEVBQ0EsRUFBTSxLQUFNLEVBQU8sR0FBSyxFQUFHLEVBQUksRUFBTyxHQUFLLElBTS9DLE9BQUssR0FDRyxFQUlILEVBQ0csRUFBRyxLQUFNLEdBR1YsRUFBTSxFQUFJLEVBQU8sR0FBSyxHQUFRLEdBS2xDLEdBQVksUUFDZixHQUFhLFlBYVYsR0FBYSxTQUFVLEdBUTFCLE1BQTBCLEtBQW5CLEVBQU0sVUFBcUMsSUFBbkIsRUFBTSxZQUFzQixFQUFNLFNBVWxFLEdBQUssSUFBTSxFQUVYLEVBQUssV0FFSixNQUFPLFNBQVUsR0FHaEIsR0FBSSxHQUFRLEVBQU8sS0FBSyxRQTRCeEIsT0F6Qk0sS0FDTCxLQUtLLEdBQVksS0FJWCxFQUFNLFNBQ1YsRUFBTyxLQUFLLFNBQVksRUFNeEIsT0FBTyxlQUFnQixFQUFPLEtBQUssU0FDbEMsTUFBTyxFQUNQLGNBQWMsTUFNWCxHQUVSLElBQUssU0FBVSxFQUFPLEVBQU0sR0FDM0IsR0FBSSxHQUNILEVBQVEsS0FBSyxNQUFPLEVBSXJCLElBQXFCLGdCQUFULEdBQ1gsRUFBTyxFQUFXLElBQVcsTUFNN0IsS0FBTSxJQUFRLEdBQ2IsRUFBTyxFQUFXLElBQVcsRUFBTSxFQUdyQyxPQUFPLElBRVIsSUFBSyxTQUFVLEVBQU8sR0FDckIsV0FBZSxLQUFSLEVBQ04sS0FBSyxNQUFPLEdBR1osRUFBTyxLQUFLLFVBQWEsRUFBTyxLQUFLLFNBQVcsRUFBVyxLQUU3RCxPQUFRLFNBQVUsRUFBTyxFQUFLLEdBYTdCLFdBQWEsS0FBUixHQUNDLEdBQXNCLGdCQUFSLFFBQWdDLEtBQVYsRUFFbEMsS0FBSyxJQUFLLEVBQU8sSUFTekIsS0FBSyxJQUFLLEVBQU8sRUFBSyxPQUlMLEtBQVYsRUFBc0IsRUFBUSxJQUV0QyxPQUFRLFNBQVUsRUFBTyxHQUN4QixHQUFJLEdBQ0gsRUFBUSxFQUFPLEtBQUssUUFFckIsUUFBZSxLQUFWLEVBQUwsQ0FJQSxPQUFhLEtBQVIsRUFBb0IsQ0FHbkIsTUFBTSxRQUFTLEdBSW5CLEVBQU0sRUFBSSxJQUFLLElBRWYsRUFBTSxFQUFXLEdBSWpCLEVBQU0sSUFBTyxJQUNWLEdBQ0EsRUFBSSxNQUFPLFNBR2YsRUFBSSxFQUFJLE1BRVIsTUFBUSxXQUNBLEdBQU8sRUFBSyxTQUtSLEtBQVIsR0FBcUIsR0FBTyxjQUFlLE1BTTFDLEVBQU0sU0FDVixFQUFPLEtBQUssYUFBWSxTQUVqQixHQUFPLEtBQUssWUFJdEIsUUFBUyxTQUFVLEdBQ2xCLEdBQUksR0FBUSxFQUFPLEtBQUssUUFDeEIsWUFBaUIsS0FBVixJQUF3QixHQUFPLGNBQWUsSUFHdkQsSUFBSSxJQUFXLEdBQUksR0FFZixHQUFXLEdBQUksR0FjZixHQUFTLGdDQUNaLEdBQWEsUUFrRGQsSUFBTyxRQUNOLFFBQVMsU0FBVSxHQUNsQixNQUFPLElBQVMsUUFBUyxJQUFVLEdBQVMsUUFBUyxJQUd0RCxLQUFNLFNBQVUsRUFBTSxFQUFNLEdBQzNCLE1BQU8sSUFBUyxPQUFRLEVBQU0sRUFBTSxJQUdyQyxXQUFZLFNBQVUsRUFBTSxHQUMzQixHQUFTLE9BQVEsRUFBTSxJQUt4QixNQUFPLFNBQVUsRUFBTSxFQUFNLEdBQzVCLE1BQU8sSUFBUyxPQUFRLEVBQU0sRUFBTSxJQUdyQyxZQUFhLFNBQVUsRUFBTSxHQUM1QixHQUFTLE9BQVEsRUFBTSxNQUl6QixHQUFPLEdBQUcsUUFDVCxLQUFNLFNBQVUsRUFBSyxHQUNwQixHQUFJLEdBQUcsRUFBTSxFQUNaLEVBQU8sS0FBTSxHQUNiLEVBQVEsR0FBUSxFQUFLLFVBR3RCLFFBQWEsS0FBUixFQUFvQixDQUN4QixHQUFLLEtBQUssU0FDVCxFQUFPLEdBQVMsSUFBSyxHQUVFLElBQWxCLEVBQUssV0FBbUIsR0FBUyxJQUFLLEVBQU0saUJBQW1CLENBRW5FLElBREEsRUFBSSxFQUFNLE9BQ0YsS0FJRixFQUFPLEtBQ1gsRUFBTyxFQUFPLEdBQUksS0FDZSxJQUE1QixFQUFLLFFBQVMsV0FDbEIsRUFBTyxFQUFXLEVBQUssTUFBTyxJQUM5QixFQUFVLEVBQU0sRUFBTSxFQUFNLEtBSS9CLElBQVMsSUFBSyxFQUFNLGdCQUFnQixHQUl0QyxNQUFPLEdBSVIsTUFBb0IsZ0JBQVIsR0FDSixLQUFLLEtBQU0sV0FDakIsR0FBUyxJQUFLLEtBQU0sS0FJZixHQUFRLEtBQU0sU0FBVSxHQUM5QixHQUFJLEVBT0osSUFBSyxPQUFrQixLQUFWLEVBQWIsQ0FLQyxPQUFjLE1BRGQsRUFBTyxHQUFTLElBQUssRUFBTSxJQUUxQixNQUFPLEVBTVIsUUFBYyxNQURkLEVBQU8sRUFBVSxFQUFNLElBRXRCLE1BQU8sT0FRVCxNQUFLLEtBQU0sV0FHVixHQUFTLElBQUssS0FBTSxFQUFLLE1BRXhCLEtBQU0sRUFBTyxVQUFVLE9BQVMsRUFBRyxNQUFNLElBRzdDLFdBQVksU0FBVSxHQUNyQixNQUFPLE1BQUssS0FBTSxXQUNqQixHQUFTLE9BQVEsS0FBTSxRQU0xQixHQUFPLFFBQ04sTUFBTyxTQUFVLEVBQU0sRUFBTSxHQUM1QixHQUFJLEVBRUosSUFBSyxFQVlKLE1BWEEsSUFBUyxHQUFRLE1BQVMsUUFDMUIsRUFBUSxHQUFTLElBQUssRUFBTSxHQUd2QixLQUNFLEdBQVMsTUFBTSxRQUFTLEdBQzdCLEVBQVEsR0FBUyxPQUFRLEVBQU0sRUFBTSxHQUFPLFVBQVcsSUFFdkQsRUFBTSxLQUFNLElBR1AsT0FJVCxRQUFTLFNBQVUsRUFBTSxHQUN4QixFQUFPLEdBQVEsSUFFZixJQUFJLEdBQVEsR0FBTyxNQUFPLEVBQU0sR0FDL0IsRUFBYyxFQUFNLE9BQ3BCLEVBQUssRUFBTSxRQUNYLEVBQVEsR0FBTyxZQUFhLEVBQU0sR0FDbEMsRUFBTyxXQUNOLEdBQU8sUUFBUyxFQUFNLEdBSVosZ0JBQVAsSUFDSixFQUFLLEVBQU0sUUFDWCxLQUdJLElBSVUsT0FBVCxHQUNKLEVBQU0sUUFBUyxvQkFJVCxHQUFNLEtBQ2IsRUFBRyxLQUFNLEVBQU0sRUFBTSxLQUdoQixHQUFlLEdBQ3BCLEVBQU0sTUFBTSxRQUtkLFlBQWEsU0FBVSxFQUFNLEdBQzVCLEdBQUksR0FBTSxFQUFPLFlBQ2pCLE9BQU8sSUFBUyxJQUFLLEVBQU0sSUFBUyxHQUFTLE9BQVEsRUFBTSxHQUMxRCxNQUFPLEdBQU8sVUFBVyxlQUFnQixJQUFLLFdBQzdDLEdBQVMsT0FBUSxHQUFRLEVBQU8sUUFBUyxXQU03QyxHQUFPLEdBQUcsUUFDVCxNQUFPLFNBQVUsRUFBTSxHQUN0QixHQUFJLEdBQVMsQ0FRYixPQU5xQixnQkFBVCxLQUNYLEVBQU8sRUFDUCxFQUFPLEtBQ1AsS0FHSSxVQUFVLE9BQVMsRUFDaEIsR0FBTyxNQUFPLEtBQU0sR0FBSyxPQUdqQixLQUFULEVBQ04sS0FDQSxLQUFLLEtBQU0sV0FDVixHQUFJLEdBQVEsR0FBTyxNQUFPLEtBQU0sRUFBTSxFQUd0QyxJQUFPLFlBQWEsS0FBTSxHQUVaLE9BQVQsR0FBZ0MsZUFBZixFQUFPLElBQzVCLEdBQU8sUUFBUyxLQUFNLE1BSTFCLFFBQVMsU0FBVSxHQUNsQixNQUFPLE1BQUssS0FBTSxXQUNqQixHQUFPLFFBQVMsS0FBTSxNQUd4QixXQUFZLFNBQVUsR0FDckIsTUFBTyxNQUFLLE1BQU8sR0FBUSxVQUs1QixRQUFTLFNBQVUsRUFBTSxHQUN4QixHQUFJLEdBQ0gsRUFBUSxFQUNSLEVBQVEsR0FBTyxXQUNmLEVBQVcsS0FDWCxFQUFJLEtBQUssT0FDVCxFQUFVLGFBQ0MsR0FDVCxFQUFNLFlBQWEsR0FBWSxJQVVsQyxLQU5xQixnQkFBVCxLQUNYLEVBQU0sRUFDTixNQUFPLElBRVIsRUFBTyxHQUFRLEtBRVAsTUFDUCxFQUFNLEdBQVMsSUFBSyxFQUFVLEdBQUssRUFBTyxnQkFDOUIsRUFBSSxRQUNmLElBQ0EsRUFBSSxNQUFNLElBQUssR0FJakIsT0FEQSxLQUNPLEVBQU0sUUFBUyxLQUd4QixJQUFJLElBQU8sc0NBQTBDLE9BRWpELEdBQVUsR0FBSSxRQUFRLGlCQUFtQixHQUFPLGNBQWUsS0FHL0QsSUFBYyxNQUFPLFFBQVMsU0FBVSxRQUV4QyxHQUFrQixHQUFTLGdCQUkxQixHQUFhLFNBQVUsR0FDekIsTUFBTyxJQUFPLFNBQVUsRUFBSyxjQUFlLElBRTdDLElBQWEsVUFBVSxFQU9uQixJQUFnQixjQUNwQixHQUFhLFNBQVUsR0FDdEIsTUFBTyxJQUFPLFNBQVUsRUFBSyxjQUFlLElBQzNDLEVBQUssWUFBYSxNQUFlLEVBQUssZUFHMUMsSUFBSSxJQUFxQixTQUFVLEVBQU0sR0FPdkMsTUFIQSxHQUFPLEdBQU0sRUFHaUIsU0FBdkIsRUFBSyxNQUFNLFNBQ00sS0FBdkIsRUFBSyxNQUFNLFNBTVgsR0FBWSxJQUVzQixTQUFsQyxHQUFPLElBQUssRUFBTSxZQUdqQixHQUFPLFNBQVUsRUFBTSxFQUFTLEVBQVUsR0FDN0MsR0FBSSxHQUFLLEVBQ1IsSUFHRCxLQUFNLElBQVEsR0FDYixFQUFLLEdBQVMsRUFBSyxNQUFPLEdBQzFCLEVBQUssTUFBTyxHQUFTLEVBQVMsRUFHL0IsR0FBTSxFQUFTLE1BQU8sRUFBTSxNQUc1QixLQUFNLElBQVEsR0FDYixFQUFLLE1BQU8sR0FBUyxFQUFLLEVBRzNCLE9BQU8sSUF3RUosS0F5RUosSUFBTyxHQUFHLFFBQ1QsS0FBTSxXQUNMLE1BQU8sR0FBVSxNQUFNLElBRXhCLEtBQU0sV0FDTCxNQUFPLEdBQVUsT0FFbEIsT0FBUSxTQUFVLEdBQ2pCLE1BQXNCLGlCQUFWLEdBQ0osRUFBUSxLQUFLLE9BQVMsS0FBSyxPQUc1QixLQUFLLEtBQU0sV0FDWixHQUFvQixNQUN4QixHQUFRLE1BQU8sT0FFZixHQUFRLE1BQU8sV0FLbkIsSUFBSSxJQUFpQix3QkFFakIsR0FBVyxpQ0FFWCxHQUFjLHFDQUtkLElBR0gsUUFBVSxFQUFHLCtCQUFnQyxhQUs3QyxPQUFTLEVBQUcsVUFBVyxZQUN2QixLQUFPLEVBQUcsb0JBQXFCLHVCQUMvQixJQUFNLEVBQUcsaUJBQWtCLG9CQUMzQixJQUFNLEVBQUcscUJBQXNCLHlCQUUvQixVQUFZLEVBQUcsR0FBSSxJQUlwQixJQUFRLFNBQVcsR0FBUSxPQUUzQixHQUFRLE1BQVEsR0FBUSxNQUFRLEdBQVEsU0FBVyxHQUFRLFFBQVUsR0FBUSxNQUM3RSxHQUFRLEdBQUssR0FBUSxFQTBDckIsSUFBSSxJQUFRLGFBNEZaLFdBQ0MsR0FBSSxHQUFXLEdBQVMseUJBQ3ZCLEVBQU0sRUFBUyxZQUFhLEdBQVMsY0FBZSxRQUNwRCxFQUFRLEdBQVMsY0FBZSxRQU1qQyxHQUFNLGFBQWMsT0FBUSxTQUM1QixFQUFNLGFBQWMsVUFBVyxXQUMvQixFQUFNLGFBQWMsT0FBUSxLQUU1QixFQUFJLFlBQWEsR0FJakIsR0FBUSxXQUFhLEVBQUksV0FBVyxHQUFPLFdBQVcsR0FBTyxVQUFVLFFBSXZFLEVBQUksVUFBWSx5QkFDaEIsR0FBUSxpQkFBbUIsRUFBSSxXQUFXLEdBQU8sVUFBVSxlQUk1RCxJQUNDLElBQVksT0FDWixHQUFjLGlEQUNkLEdBQWlCLHFCQThGbEIsSUFBTyxPQUVOLFVBRUEsSUFBSyxTQUFVLEVBQU0sRUFBTyxFQUFTLEVBQU0sR0FFMUMsR0FBSSxHQUFhLEVBQWEsRUFDN0IsRUFBUSxFQUFHLEVBQ1gsRUFBUyxFQUFVLEVBQU0sRUFBWSxFQUNyQyxFQUFXLEdBQVMsSUFBSyxFQUcxQixJQUFNLEVBdUNOLElBbENLLEVBQVEsVUFDWixFQUFjLEVBQ2QsRUFBVSxFQUFZLFFBQ3RCLEVBQVcsRUFBWSxVQUtuQixHQUNKLEdBQU8sS0FBSyxnQkFBaUIsR0FBaUIsR0FJekMsRUFBUSxPQUNiLEVBQVEsS0FBTyxHQUFPLFNBSWYsRUFBUyxFQUFTLFVBQ3pCLEVBQVMsRUFBUyxZQUVYLEVBQWMsRUFBUyxVQUM5QixFQUFjLEVBQVMsT0FBUyxTQUFVLEdBSXpDLFdBQXlCLEtBQVgsSUFBMEIsR0FBTyxNQUFNLFlBQWMsRUFBRSxLQUNwRSxHQUFPLE1BQU0sU0FBUyxNQUFPLEVBQU0sZUFBYyxLQUtwRCxHQUFVLEdBQVMsSUFBSyxNQUFPLE1BQXFCLElBQ3BELEVBQUksRUFBTSxPQUNGLEtBQ1AsRUFBTSxHQUFlLEtBQU0sRUFBTyxRQUNsQyxFQUFPLEVBQVcsRUFBSyxHQUN2QixHQUFlLEVBQUssSUFBTyxJQUFLLE1BQU8sS0FBTSxPQUd2QyxJQUtOLEVBQVUsR0FBTyxNQUFNLFFBQVMsT0FHaEMsR0FBUyxFQUFXLEVBQVEsYUFBZSxFQUFRLFdBQWMsRUFHakUsRUFBVSxHQUFPLE1BQU0sUUFBUyxPQUdoQyxFQUFZLEdBQU8sUUFDbEIsS0FBTSxFQUNOLFNBQVUsRUFDVixLQUFNLEVBQ04sUUFBUyxFQUNULEtBQU0sRUFBUSxLQUNkLFNBQVUsRUFDVixhQUFjLEdBQVksR0FBTyxLQUFLLE1BQU0sYUFBYSxLQUFNLEdBQy9ELFVBQVcsRUFBVyxLQUFNLE1BQzFCLElBR0ssRUFBVyxFQUFRLE1BQzFCLEVBQVcsRUFBUSxNQUNuQixFQUFTLGNBQWdCLEVBR25CLEVBQVEsUUFDaUQsSUFBOUQsRUFBUSxNQUFNLEtBQU0sRUFBTSxFQUFNLEVBQVksSUFFdkMsRUFBSyxrQkFDVCxFQUFLLGlCQUFrQixFQUFNLElBSzNCLEVBQVEsTUFDWixFQUFRLElBQUksS0FBTSxFQUFNLEdBRWxCLEVBQVUsUUFBUSxPQUN2QixFQUFVLFFBQVEsS0FBTyxFQUFRLE9BSzlCLEVBQ0osRUFBUyxPQUFRLEVBQVMsZ0JBQWlCLEVBQUcsR0FFOUMsRUFBUyxLQUFNLEdBSWhCLEdBQU8sTUFBTSxPQUFRLElBQVMsSUFNaEMsT0FBUSxTQUFVLEVBQU0sRUFBTyxFQUFTLEVBQVUsR0FFakQsR0FBSSxHQUFHLEVBQVcsRUFDakIsRUFBUSxFQUFHLEVBQ1gsRUFBUyxFQUFVLEVBQU0sRUFBWSxFQUNyQyxFQUFXLEdBQVMsUUFBUyxJQUFVLEdBQVMsSUFBSyxFQUV0RCxJQUFNLElBQWUsRUFBUyxFQUFTLFFBQXZDLENBT0EsSUFGQSxHQUFVLEdBQVMsSUFBSyxNQUFPLE1BQXFCLElBQ3BELEVBQUksRUFBTSxPQUNGLEtBTVAsR0FMQSxFQUFNLEdBQWUsS0FBTSxFQUFPLFFBQ2xDLEVBQU8sRUFBVyxFQUFLLEdBQ3ZCLEdBQWUsRUFBSyxJQUFPLElBQUssTUFBTyxLQUFNLE9BR3ZDLEVBQU4sQ0FlQSxJQVJBLEVBQVUsR0FBTyxNQUFNLFFBQVMsT0FDaEMsR0FBUyxFQUFXLEVBQVEsYUFBZSxFQUFRLFdBQWMsRUFDakUsRUFBVyxFQUFRLE9BQ25CLEVBQU0sRUFBSyxJQUNWLEdBQUksUUFBUSxVQUFZLEVBQVcsS0FBTSxpQkFBb0IsV0FHOUQsRUFBWSxFQUFJLEVBQVMsT0FDakIsS0FDUCxFQUFZLEVBQVUsSUFFZixHQUFlLElBQWEsRUFBVSxVQUN6QyxHQUFXLEVBQVEsT0FBUyxFQUFVLE1BQ3RDLElBQU8sRUFBSSxLQUFNLEVBQVUsWUFDM0IsR0FBWSxJQUFhLEVBQVUsV0FDeEIsT0FBYixJQUFxQixFQUFVLFlBQ2hDLEVBQVMsT0FBUSxFQUFHLEdBRWYsRUFBVSxVQUNkLEVBQVMsZ0JBRUwsRUFBUSxRQUNaLEVBQVEsT0FBTyxLQUFNLEVBQU0sR0FPekIsS0FBYyxFQUFTLFNBQ3JCLEVBQVEsV0FDa0QsSUFBL0QsRUFBUSxTQUFTLEtBQU0sRUFBTSxFQUFZLEVBQVMsU0FFbEQsR0FBTyxZQUFhLEVBQU0sRUFBTSxFQUFTLGNBR25DLEdBQVEsUUExQ2YsS0FBTSxJQUFRLEdBQ2IsR0FBTyxNQUFNLE9BQVEsRUFBTSxFQUFPLEVBQU8sR0FBSyxFQUFTLEdBQVUsRUE4Qy9ELElBQU8sY0FBZSxJQUMxQixHQUFTLE9BQVEsRUFBTSxtQkFJekIsU0FBVSxTQUFVLEdBR25CLEdBRUksR0FBRyxFQUFHLEVBQUssRUFBUyxFQUFXLEVBRi9CLEVBQVEsR0FBTyxNQUFNLElBQUssR0FHN0IsRUFBTyxHQUFJLE9BQU8sVUFBVSxRQUM1QixHQUFhLEdBQVMsSUFBSyxLQUFNLGVBQW9CLEVBQU0sVUFDM0QsRUFBVSxHQUFPLE1BQU0sUUFBUyxFQUFNLFNBS3ZDLEtBRkEsRUFBTSxHQUFNLEVBRU4sRUFBSSxFQUFHLEVBQUksVUFBVSxPQUFRLElBQ2xDLEVBQU0sR0FBTSxVQUFXLEVBTXhCLElBSEEsRUFBTSxlQUFpQixNQUdsQixFQUFRLGNBQTJELElBQTVDLEVBQVEsWUFBWSxLQUFNLEtBQU0sR0FBNUQsQ0FTQSxJQUpBLEVBQWUsR0FBTyxNQUFNLFNBQVMsS0FBTSxLQUFNLEVBQU8sR0FHeEQsRUFBSSxHQUNNLEVBQVUsRUFBYyxRQUFZLEVBQU0sd0JBSW5ELElBSEEsRUFBTSxjQUFnQixFQUFRLEtBRTlCLEVBQUksR0FDTSxFQUFZLEVBQVEsU0FBVSxRQUN0QyxFQUFNLGlDQUlELEVBQU0sYUFBc0MsSUFBeEIsRUFBVSxZQUNuQyxFQUFNLFdBQVcsS0FBTSxFQUFVLGFBRWpDLEVBQU0sVUFBWSxFQUNsQixFQUFNLEtBQU8sRUFBVSxTQUtWLE1BSGIsSUFBVSxHQUFPLE1BQU0sUUFBUyxFQUFVLGVBQW1CLFFBQzVELEVBQVUsU0FBVSxNQUFPLEVBQVEsS0FBTSxNQUdULEtBQXpCLEVBQU0sT0FBUyxLQUNyQixFQUFNLGlCQUNOLEVBQU0sbUJBWVgsT0FKSyxHQUFRLGNBQ1osRUFBUSxhQUFhLEtBQU0sS0FBTSxHQUczQixFQUFNLFNBR2QsU0FBVSxTQUFVLEVBQU8sR0FDMUIsR0FBSSxHQUFHLEVBQVcsRUFBSyxFQUFpQixFQUN2QyxLQUNBLEVBQWdCLEVBQVMsY0FDekIsRUFBTSxFQUFNLE1BR2IsSUFBSyxHQUlKLEVBQUksWUFPYyxVQUFmLEVBQU0sTUFBb0IsRUFBTSxRQUFVLEdBRTdDLEtBQVEsSUFBUSxLQUFNLEVBQU0sRUFBSSxZQUFjLEtBSTdDLEdBQXNCLElBQWpCLEVBQUksV0FBb0MsVUFBZixFQUFNLE9BQXFDLElBQWpCLEVBQUksVUFBc0IsQ0FHakYsSUFGQSxLQUNBLEtBQ00sRUFBSSxFQUFHLEVBQUksRUFBZSxJQUMvQixFQUFZLEVBQVUsR0FHdEIsRUFBTSxFQUFVLFNBQVcsUUFFTSxLQUE1QixFQUFrQixLQUN0QixFQUFrQixHQUFRLEVBQVUsYUFDbkMsR0FBUSxFQUFLLE1BQU8sTUFBTyxJQUFTLEVBQ3BDLEdBQU8sS0FBTSxFQUFLLEtBQU0sTUFBUSxJQUFRLFFBRXJDLEVBQWtCLElBQ3RCLEVBQWdCLEtBQU0sRUFHbkIsR0FBZ0IsUUFDcEIsRUFBYSxNQUFRLEtBQU0sRUFBSyxTQUFVLElBWTlDLE1BTEEsR0FBTSxLQUNELEVBQWdCLEVBQVMsUUFDN0IsRUFBYSxNQUFRLEtBQU0sRUFBSyxTQUFVLEVBQVMsTUFBTyxLQUdwRCxHQUdSLFFBQVMsU0FBVSxFQUFNLEdBQ3hCLE9BQU8sZUFBZ0IsR0FBTyxNQUFNLFVBQVcsR0FDOUMsWUFBWSxFQUNaLGNBQWMsRUFFZCxJQUFLLEdBQVksR0FDaEIsV0FDQyxHQUFLLEtBQUssY0FDUixNQUFPLEdBQU0sS0FBSyxnQkFHckIsV0FDQyxHQUFLLEtBQUssY0FDUixNQUFPLE1BQUssY0FBZSxJQUkvQixJQUFLLFNBQVUsR0FDZCxPQUFPLGVBQWdCLEtBQU0sR0FDNUIsWUFBWSxFQUNaLGNBQWMsRUFDZCxVQUFVLEVBQ1YsTUFBTyxRQU1YLElBQUssU0FBVSxHQUNkLE1BQU8sR0FBZSxHQUFPLFNBQzVCLEVBQ0EsR0FBSSxJQUFPLE1BQU8sSUFHcEIsU0FDQyxNQUdDLFVBQVUsR0FFWCxPQUdDLE1BQU8sU0FBVSxHQUloQixHQUFJLEdBQUssTUFBUSxDQVdqQixPQVJLLElBQWUsS0FBTSxFQUFHLE9BQzVCLEVBQUcsT0FBUyxFQUFVLEVBQUksVUFHMUIsRUFBZ0IsRUFBSSxRQUFTLElBSXZCLEdBRVIsUUFBUyxTQUFVLEdBSWxCLEdBQUksR0FBSyxNQUFRLENBVWpCLE9BUEssSUFBZSxLQUFNLEVBQUcsT0FDNUIsRUFBRyxPQUFTLEVBQVUsRUFBSSxVQUUxQixFQUFnQixFQUFJLFVBSWQsR0FLUixTQUFVLFNBQVUsR0FDbkIsR0FBSSxHQUFTLEVBQU0sTUFDbkIsT0FBTyxJQUFlLEtBQU0sRUFBTyxPQUNsQyxFQUFPLE9BQVMsRUFBVSxFQUFRLFVBQ2xDLEdBQVMsSUFBSyxFQUFRLFVBQ3RCLEVBQVUsRUFBUSxPQUlyQixjQUNDLGFBQWMsU0FBVSxPQUlELEtBQWpCLEVBQU0sUUFBd0IsRUFBTSxnQkFDeEMsRUFBTSxjQUFjLFlBQWMsRUFBTSxZQThGN0MsR0FBTyxZQUFjLFNBQVUsRUFBTSxFQUFNLEdBR3JDLEVBQUsscUJBQ1QsRUFBSyxvQkFBcUIsRUFBTSxJQUlsQyxHQUFPLE1BQVEsU0FBVSxFQUFLLEdBRzdCLEtBQVEsZUFBZ0IsSUFBTyxPQUM5QixNQUFPLElBQUksSUFBTyxNQUFPLEVBQUssRUFJMUIsSUFBTyxFQUFJLE1BQ2YsS0FBSyxjQUFnQixFQUNyQixLQUFLLEtBQU8sRUFBSSxLQUloQixLQUFLLG1CQUFxQixFQUFJLHNCQUNILEtBQXpCLEVBQUksbUJBR2dCLElBQXBCLEVBQUksWUFDTCxFQUNBLEVBS0QsS0FBSyxPQUFXLEVBQUksUUFBa0MsSUFBeEIsRUFBSSxPQUFPLFNBQ3hDLEVBQUksT0FBTyxXQUNYLEVBQUksT0FFTCxLQUFLLGNBQWdCLEVBQUksY0FDekIsS0FBSyxjQUFnQixFQUFJLGVBSXpCLEtBQUssS0FBTyxFQUlSLEdBQ0osR0FBTyxPQUFRLEtBQU0sR0FJdEIsS0FBSyxVQUFZLEdBQU8sRUFBSSxXQUFhLEtBQUssTUFHOUMsS0FBTSxHQUFPLFVBQVksR0FLMUIsR0FBTyxNQUFNLFdBQ1osWUFBYSxHQUFPLE1BQ3BCLG1CQUFvQixFQUNwQixxQkFBc0IsRUFDdEIsOEJBQStCLEVBQy9CLGFBQWEsRUFFYixlQUFnQixXQUNmLEdBQUksR0FBSSxLQUFLLGFBRWIsTUFBSyxtQkFBcUIsRUFFckIsSUFBTSxLQUFLLGFBQ2YsRUFBRSxrQkFHSixnQkFBaUIsV0FDaEIsR0FBSSxHQUFJLEtBQUssYUFFYixNQUFLLHFCQUF1QixFQUV2QixJQUFNLEtBQUssYUFDZixFQUFFLG1CQUdKLHlCQUEwQixXQUN6QixHQUFJLEdBQUksS0FBSyxhQUViLE1BQUssOEJBQWdDLEVBRWhDLElBQU0sS0FBSyxhQUNmLEVBQUUsMkJBR0gsS0FBSyxvQkFLUCxHQUFPLE1BQ04sUUFBUSxFQUNSLFNBQVMsRUFDVCxZQUFZLEVBQ1osZ0JBQWdCLEVBQ2hCLFNBQVMsRUFDVCxRQUFRLEVBQ1IsWUFBWSxFQUNaLFNBQVMsRUFDVCxPQUFPLEVBQ1AsT0FBTyxFQUNQLFVBQVUsRUFDVixNQUFNLEVBQ04sTUFBUSxFQUNSLE1BQU0sRUFDTixVQUFVLEVBQ1YsS0FBSyxFQUNMLFNBQVMsRUFDVCxRQUFRLEVBQ1IsU0FBUyxFQUNULFNBQVMsRUFDVCxTQUFTLEVBQ1QsU0FBUyxFQUNULFNBQVMsRUFDVCxXQUFXLEVBQ1gsYUFBYSxFQUNiLFNBQVMsRUFDVCxTQUFTLEVBQ1QsZUFBZSxFQUNmLFdBQVcsRUFDWCxTQUFTLEVBRVQsTUFBTyxTQUFVLEdBQ2hCLEdBQUksR0FBUyxFQUFNLE1BR25CLE9BQW9CLE9BQWYsRUFBTSxPQUFpQixHQUFVLEtBQU0sRUFBTSxNQUN4QixNQUFsQixFQUFNLFNBQW1CLEVBQU0sU0FBVyxFQUFNLFNBSWxELEVBQU0sV0FBb0IsS0FBWCxHQUF3QixHQUFZLEtBQU0sRUFBTSxNQUN0RCxFQUFULEVBQ0csRUFHTSxFQUFULEVBQ0csRUFHTSxFQUFULEVBQ0csRUFHRCxFQUdELEVBQU0sUUFFWixHQUFPLE1BQU0sU0FFaEIsR0FBTyxNQUFRLE1BQU8sVUFBVyxLQUFNLFlBQWMsU0FBVSxFQUFNLEdBQ3BFLEdBQU8sTUFBTSxRQUFTLElBR3JCLE1BQU8sV0FRTixNQUhBLEdBQWdCLEtBQU0sRUFBTSxJQUdyQixHQUVSLFFBQVMsV0FNUixNQUhBLEdBQWdCLEtBQU0sSUFHZixHQUdSLGFBQWMsS0FZaEIsR0FBTyxNQUNOLFdBQVksWUFDWixXQUFZLFdBQ1osYUFBYyxjQUNkLGFBQWMsY0FDWixTQUFVLEVBQU0sR0FDbEIsR0FBTyxNQUFNLFFBQVMsSUFDckIsYUFBYyxFQUNkLFNBQVUsRUFFVixPQUFRLFNBQVUsR0FDakIsR0FBSSxHQUNILEVBQVMsS0FDVCxFQUFVLEVBQU0sY0FDaEIsRUFBWSxFQUFNLFNBU25CLE9BTE0sS0FBYSxJQUFZLEdBQVcsR0FBTyxTQUFVLEVBQVEsTUFDbEUsRUFBTSxLQUFPLEVBQVUsU0FDdkIsRUFBTSxFQUFVLFFBQVEsTUFBTyxLQUFNLFdBQ3JDLEVBQU0sS0FBTyxHQUVQLE1BS1YsR0FBTyxHQUFHLFFBRVQsR0FBSSxTQUFVLEVBQU8sRUFBVSxFQUFNLEdBQ3BDLE1BQU8sR0FBSSxLQUFNLEVBQU8sRUFBVSxFQUFNLElBRXpDLElBQUssU0FBVSxFQUFPLEVBQVUsRUFBTSxHQUNyQyxNQUFPLEdBQUksS0FBTSxFQUFPLEVBQVUsRUFBTSxFQUFJLElBRTdDLElBQUssU0FBVSxFQUFPLEVBQVUsR0FDL0IsR0FBSSxHQUFXLENBQ2YsSUFBSyxHQUFTLEVBQU0sZ0JBQWtCLEVBQU0sVUFXM0MsTUFSQSxHQUFZLEVBQU0sVUFDbEIsR0FBUSxFQUFNLGdCQUFpQixJQUM5QixFQUFVLFVBQ1QsRUFBVSxTQUFXLElBQU0sRUFBVSxVQUNyQyxFQUFVLFNBQ1gsRUFBVSxTQUNWLEVBQVUsU0FFSixJQUVSLElBQXNCLGdCQUFWLEdBQXFCLENBR2hDLElBQU0sSUFBUSxHQUNiLEtBQUssSUFBSyxFQUFNLEVBQVUsRUFBTyxHQUVsQyxPQUFPLE1BV1IsT0FUa0IsSUFBYixHQUEwQyxrQkFBYixLQUdqQyxFQUFLLEVBQ0wsTUFBVyxLQUVBLElBQVAsSUFDSixFQUFLLEdBRUMsS0FBSyxLQUFNLFdBQ2pCLEdBQU8sTUFBTSxPQUFRLEtBQU0sRUFBTyxFQUFJLE9BTXpDLElBS0MsSUFBWSw4RkFPWixHQUFlLHdCQUdmLEdBQVcsb0NBQ1gsR0FBZSwwQ0E2TGhCLElBQU8sUUFDTixjQUFlLFNBQVUsR0FDeEIsTUFBTyxHQUFLLFFBQVMsR0FBVyxjQUdqQyxNQUFPLFNBQVUsRUFBTSxFQUFlLEdBQ3JDLEdBQUksR0FBRyxFQUFHLEVBQWEsRUFDdEIsRUFBUSxFQUFLLFdBQVcsR0FDeEIsRUFBUyxHQUFZLEVBR3RCLE1BQU0sR0FBUSxnQkFBc0MsSUFBbEIsRUFBSyxVQUFvQyxLQUFsQixFQUFLLFVBQzNELEdBQU8sU0FBVSxJQU1uQixJQUhBLEVBQWUsRUFBUSxHQUN2QixFQUFjLEVBQVEsR0FFaEIsRUFBSSxFQUFHLEVBQUksRUFBWSxPQUFRLEVBQUksRUFBRyxJQUMzQyxFQUFVLEVBQWEsR0FBSyxFQUFjLEdBSzVDLElBQUssRUFDSixHQUFLLEVBSUosSUFIQSxFQUFjLEdBQWUsRUFBUSxHQUNyQyxFQUFlLEdBQWdCLEVBQVEsR0FFakMsRUFBSSxFQUFHLEVBQUksRUFBWSxPQUFRLEVBQUksRUFBRyxJQUMzQyxFQUFnQixFQUFhLEdBQUssRUFBYyxRQUdqRCxHQUFnQixFQUFNLEVBV3hCLE9BTkEsR0FBZSxFQUFRLEVBQU8sVUFDekIsRUFBYSxPQUFTLEdBQzFCLEVBQWUsR0FBZSxHQUFVLEVBQVEsRUFBTSxXQUloRCxHQUdSLFVBQVcsU0FBVSxHQUtwQixJQUpBLEdBQUksR0FBTSxFQUFNLEVBQ2YsRUFBVSxHQUFPLE1BQU0sUUFDdkIsRUFBSSxNQUU2QixNQUF4QixFQUFPLEVBQU8sSUFBcUIsSUFDNUMsR0FBSyxHQUFZLEdBQVMsQ0FDekIsR0FBTyxFQUFPLEVBQU0sR0FBUyxTQUFjLENBQzFDLEdBQUssRUFBSyxPQUNULElBQU0sSUFBUSxHQUFLLE9BQ2IsRUFBUyxHQUNiLEdBQU8sTUFBTSxPQUFRLEVBQU0sR0FJM0IsR0FBTyxZQUFhLEVBQU0sRUFBTSxFQUFLLE9BT3hDLEdBQU0sR0FBUyxhQUFZLEdBRXZCLEVBQU0sR0FBUyxXQUluQixFQUFNLEdBQVMsYUFBWSxRQU9oQyxHQUFPLEdBQUcsUUFDVCxPQUFRLFNBQVUsR0FDakIsTUFBTyxHQUFRLEtBQU0sR0FBVSxJQUdoQyxPQUFRLFNBQVUsR0FDakIsTUFBTyxHQUFRLEtBQU0sSUFHdEIsS0FBTSxTQUFVLEdBQ2YsTUFBTyxJQUFRLEtBQU0sU0FBVSxHQUM5QixXQUFpQixLQUFWLEVBQ04sR0FBTyxLQUFNLE1BQ2IsS0FBSyxRQUFRLEtBQU0sV0FDSyxJQUFsQixLQUFLLFVBQW9DLEtBQWxCLEtBQUssVUFBcUMsSUFBbEIsS0FBSyxXQUN4RCxLQUFLLFlBQWMsTUFHcEIsS0FBTSxFQUFPLFVBQVUsU0FHM0IsT0FBUSxXQUNQLE1BQU8sR0FBVSxLQUFNLFVBQVcsU0FBVSxHQUMzQyxHQUF1QixJQUFsQixLQUFLLFVBQW9DLEtBQWxCLEtBQUssVUFBcUMsSUFBbEIsS0FBSyxTQUFpQixDQUM1RCxFQUFvQixLQUFNLEdBQ2hDLFlBQWEsT0FLdkIsUUFBUyxXQUNSLE1BQU8sR0FBVSxLQUFNLFVBQVcsU0FBVSxHQUMzQyxHQUF1QixJQUFsQixLQUFLLFVBQW9DLEtBQWxCLEtBQUssVUFBcUMsSUFBbEIsS0FBSyxTQUFpQixDQUN6RSxHQUFJLEdBQVMsRUFBb0IsS0FBTSxFQUN2QyxHQUFPLGFBQWMsRUFBTSxFQUFPLGdCQUtyQyxPQUFRLFdBQ1AsTUFBTyxHQUFVLEtBQU0sVUFBVyxTQUFVLEdBQ3RDLEtBQUssWUFDVCxLQUFLLFdBQVcsYUFBYyxFQUFNLFNBS3ZDLE1BQU8sV0FDTixNQUFPLEdBQVUsS0FBTSxVQUFXLFNBQVUsR0FDdEMsS0FBSyxZQUNULEtBQUssV0FBVyxhQUFjLEVBQU0sS0FBSyxnQkFLNUMsTUFBTyxXQUlOLElBSEEsR0FBSSxHQUNILEVBQUksRUFFMkIsT0FBdEIsRUFBTyxLQUFNLElBQWUsSUFDZCxJQUFsQixFQUFLLFdBR1QsR0FBTyxVQUFXLEVBQVEsR0FBTSxJQUdoQyxFQUFLLFlBQWMsR0FJckIsT0FBTyxPQUdSLE1BQU8sU0FBVSxFQUFlLEdBSS9CLE1BSEEsR0FBaUMsTUFBakIsR0FBZ0MsRUFDaEQsRUFBeUMsTUFBckIsRUFBNEIsRUFBZ0IsRUFFekQsS0FBSyxJQUFLLFdBQ2hCLE1BQU8sSUFBTyxNQUFPLEtBQU0sRUFBZSxNQUk1QyxLQUFNLFNBQVUsR0FDZixNQUFPLElBQVEsS0FBTSxTQUFVLEdBQzlCLEdBQUksR0FBTyxLQUFNLE9BQ2hCLEVBQUksRUFDSixFQUFJLEtBQUssTUFFVixRQUFlLEtBQVYsR0FBeUMsSUFBbEIsRUFBSyxTQUNoQyxNQUFPLEdBQUssU0FJYixJQUFzQixnQkFBVixLQUF1QixHQUFhLEtBQU0sS0FDcEQsSUFBVyxHQUFTLEtBQU0sS0FBYSxHQUFJLEtBQVEsR0FBSSxlQUFrQixDQUUxRSxFQUFRLEdBQU8sY0FBZSxFQUU5QixLQUNDLEtBQVEsRUFBSSxFQUFHLElBQ2QsRUFBTyxLQUFNLE9BR1UsSUFBbEIsRUFBSyxXQUNULEdBQU8sVUFBVyxFQUFRLEdBQU0sSUFDaEMsRUFBSyxVQUFZLEVBSW5CLEdBQU8sRUFHTixNQUFRLEtBR04sR0FDSixLQUFLLFFBQVEsT0FBUSxJQUVwQixLQUFNLEVBQU8sVUFBVSxTQUczQixZQUFhLFdBQ1osR0FBSSxLQUdKLE9BQU8sR0FBVSxLQUFNLFVBQVcsU0FBVSxHQUMzQyxHQUFJLEdBQVMsS0FBSyxVQUViLElBQU8sUUFBUyxLQUFNLEdBQVksSUFDdEMsR0FBTyxVQUFXLEVBQVEsT0FDckIsR0FDSixFQUFPLGFBQWMsRUFBTSxRQUszQixNQUlMLEdBQU8sTUFDTixTQUFVLFNBQ1YsVUFBVyxVQUNYLGFBQWMsU0FDZCxZQUFhLFFBQ2IsV0FBWSxlQUNWLFNBQVUsRUFBTSxHQUNsQixHQUFPLEdBQUksR0FBUyxTQUFVLEdBTzdCLElBTkEsR0FBSSxHQUNILEtBQ0EsRUFBUyxHQUFRLEdBQ2pCLEVBQU8sRUFBTyxPQUFTLEVBQ3ZCLEVBQUksRUFFRyxHQUFLLEVBQU0sSUFDbEIsRUFBUSxJQUFNLEVBQU8sS0FBTyxLQUFLLE9BQU8sR0FDeEMsR0FBUSxFQUFRLElBQU8sR0FBWSxHQUluQyxHQUFLLE1BQU8sRUFBSyxFQUFNLE1BR3hCLE9BQU8sTUFBSyxVQUFXLEtBR3pCLElBQUksSUFBWSxHQUFJLFFBQVEsS0FBTyxHQUFPLGtCQUFtQixLQUV6RCxHQUFZLFNBQVUsR0FLeEIsR0FBSSxHQUFPLEVBQUssY0FBYyxXQU05QixPQUpNLElBQVMsRUFBSyxTQUNuQixFQUFPLEdBR0QsRUFBSyxpQkFBa0IsSUFHNUIsR0FBWSxHQUFJLFFBQVEsR0FBVSxLQUFNLEtBQU8sTUFJbkQsV0FJQyxRQUFTLEtBR1IsR0FBTSxFQUFOLENBSUEsRUFBVSxNQUFNLFFBQVUsK0VBRTFCLEVBQUksTUFBTSxRQUNULDRIQUdELEdBQWdCLFlBQWEsR0FBWSxZQUFhLEVBRXRELElBQUksR0FBVyxFQUFPLGlCQUFrQixFQUN4QyxHQUFvQyxPQUFqQixFQUFTLElBRzVCLEVBQXNFLEtBQTlDLEVBQW9CLEVBQVMsWUFJckQsRUFBSSxNQUFNLE1BQVEsTUFDbEIsRUFBNkQsS0FBekMsRUFBb0IsRUFBUyxPQUlqRCxFQUFnRSxLQUF6QyxFQUFvQixFQUFTLE9BTXBELEVBQUksTUFBTSxTQUFXLFdBQ3JCLEVBQWlFLEtBQTlDLEVBQW9CLEVBQUksWUFBYyxHQUV6RCxHQUFnQixZQUFhLEdBSTdCLEVBQU0sTUFHUCxRQUFTLEdBQW9CLEdBQzVCLE1BQU8sTUFBSyxNQUFPLFdBQVksSUFHaEMsR0FBSSxHQUFrQixFQUFzQixFQUFrQixFQUM3RCxFQUNBLEVBQVksR0FBUyxjQUFlLE9BQ3BDLEVBQU0sR0FBUyxjQUFlLE1BR3pCLEdBQUksUUFNVixFQUFJLE1BQU0sZUFBaUIsY0FDM0IsRUFBSSxXQUFXLEdBQU8sTUFBTSxlQUFpQixHQUM3QyxHQUFRLGdCQUErQyxnQkFBN0IsRUFBSSxNQUFNLGVBRXBDLEdBQU8sT0FBUSxJQUNkLGtCQUFtQixXQUVsQixNQURBLEtBQ08sR0FFUixlQUFnQixXQUVmLE1BREEsS0FDTyxHQUVSLGNBQWUsV0FFZCxNQURBLEtBQ08sR0FFUixtQkFBb0IsV0FFbkIsTUFEQSxLQUNPLEdBRVIsY0FBZSxXQUVkLE1BREEsS0FDTyxRQStFVixJQUFJLEtBQWdCLFNBQVUsTUFBTyxNQUNwQyxHQUFhLEdBQVMsY0FBZSxPQUFRLE1BQzdDLE1Bb0NBLEdBQWUsNEJBQ2YsR0FBYyxNQUNkLElBQVksU0FBVSxXQUFZLFdBQVksU0FBVSxRQUFTLFNBQ2pFLElBQ0MsY0FBZSxJQUNmLFdBQVksTUFzSmQsSUFBTyxRQUlOLFVBQ0MsU0FDQyxJQUFLLFNBQVUsRUFBTSxHQUNwQixHQUFLLEVBQVcsQ0FHZixHQUFJLEdBQU0sRUFBUSxFQUFNLFVBQ3hCLE9BQWUsS0FBUixFQUFhLElBQU0sTUFPOUIsV0FDQyx5QkFBMkIsRUFDM0IsYUFBZSxFQUNmLGFBQWUsRUFDZixVQUFZLEVBQ1osWUFBYyxFQUNkLFlBQWMsRUFDZCxVQUFZLEVBQ1osWUFBYyxFQUNkLGVBQWlCLEVBQ2pCLGlCQUFtQixFQUNuQixTQUFXLEVBQ1gsWUFBYyxFQUNkLGNBQWdCLEVBQ2hCLFlBQWMsRUFDZCxTQUFXLEVBQ1gsT0FBUyxFQUNULFNBQVcsRUFDWCxRQUFVLEVBQ1YsUUFBVSxFQUNWLE1BQVEsR0FLVCxZQUdBLE1BQU8sU0FBVSxFQUFNLEVBQU0sRUFBTyxHQUduQyxHQUFNLEdBQTBCLElBQWxCLEVBQUssVUFBb0MsSUFBbEIsRUFBSyxVQUFtQixFQUFLLE1BQWxFLENBS0EsR0FBSSxHQUFLLEVBQU0sRUFDZCxFQUFXLEVBQVcsR0FDdEIsRUFBZSxHQUFZLEtBQU0sR0FDakMsRUFBUSxFQUFLLEtBYWQsSUFSTSxJQUNMLEVBQU8sRUFBZSxJQUl2QixFQUFRLEdBQU8sU0FBVSxJQUFVLEdBQU8sU0FBVSxPQUdyQyxLQUFWLEVBMENKLE1BQUssSUFBUyxPQUFTLFFBQ3dCLE1BQTVDLEVBQU0sRUFBTSxJQUFLLEdBQU0sRUFBTyxJQUV6QixFQUlELEVBQU8sRUFoRGQsU0FBYyxHQUdBLFdBQVQsSUFBdUIsRUFBTSxHQUFRLEtBQU0sS0FBYSxFQUFLLEtBQ2pFLEVBQVEsRUFBVyxFQUFNLEVBQU0sR0FHL0IsRUFBTyxVQUlNLE1BQVQsR0FBaUIsSUFBVSxJQU9sQixXQUFULEdBQXNCLElBQzFCLEdBQVMsR0FBTyxFQUFLLEtBQVMsR0FBTyxVQUFXLEdBQWEsR0FBSyxPQUk3RCxHQUFRLGlCQUE2QixLQUFWLEdBQWlELElBQWpDLEVBQUssUUFBUyxnQkFDOUQsRUFBTyxHQUFTLFdBSVgsR0FBWSxPQUFTLFFBQ3NCLE1BQTlDLEVBQVEsRUFBTSxJQUFLLEVBQU0sRUFBTyxNQUU3QixFQUNKLEVBQU0sWUFBYSxFQUFNLEdBRXpCLEVBQU8sR0FBUyxNQWtCcEIsSUFBSyxTQUFVLEVBQU0sRUFBTSxFQUFPLEdBQ2pDLEdBQUksR0FBSyxFQUFLLEVBQ2IsRUFBVyxFQUFXLEVBNkJ2QixPQTVCZ0IsSUFBWSxLQUFNLEtBTWpDLEVBQU8sRUFBZSxJQUl2QixFQUFRLEdBQU8sU0FBVSxJQUFVLEdBQU8sU0FBVSxHQUcvQyxHQUFTLE9BQVMsS0FDdEIsRUFBTSxFQUFNLElBQUssR0FBTSxFQUFNLFFBSWpCLEtBQVIsSUFDSixFQUFNLEVBQVEsRUFBTSxFQUFNLElBSWQsV0FBUixHQUFvQixJQUFRLE1BQ2hDLEVBQU0sR0FBb0IsSUFJWixLQUFWLEdBQWdCLEdBQ3BCLEVBQU0sV0FBWSxJQUNELElBQVYsR0FBa0IsU0FBVSxHQUFRLEdBQU8sRUFBSSxHQUdoRCxLQUlULEdBQU8sTUFBUSxTQUFVLFNBQVcsU0FBVSxFQUFHLEdBQ2hELEdBQU8sU0FBVSxJQUNoQixJQUFLLFNBQVUsRUFBTSxFQUFVLEdBQzlCLEdBQUssRUFJSixPQUFPLEdBQWEsS0FBTSxHQUFPLElBQUssRUFBTSxhQVF4QyxFQUFLLGlCQUFpQixRQUFXLEVBQUssd0JBQXdCLE1BSWhFLEVBQWtCLEVBQU0sRUFBVyxHQUhuQyxHQUFNLEVBQU0sR0FBUyxXQUNwQixNQUFPLEdBQWtCLEVBQU0sRUFBVyxNQU0vQyxJQUFLLFNBQVUsRUFBTSxFQUFPLEdBQzNCLEdBQUksR0FDSCxFQUFTLEdBQVcsR0FJcEIsR0FBc0IsR0FBUSxpQkFDVCxhQUFwQixFQUFPLFNBR1IsRUFBa0IsR0FBc0IsRUFDeEMsRUFBYyxHQUNzQyxlQUFuRCxHQUFPLElBQUssRUFBTSxhQUFhLEVBQU8sR0FDdkMsRUFBVyxFQUNWLEVBQ0MsRUFDQSxFQUNBLEVBQ0EsRUFDQSxHQUVELENBcUJGLE9BakJLLElBQWUsSUFDbkIsR0FBWSxLQUFLLEtBQ2hCLEVBQU0sU0FBVyxFQUFXLEdBQUksY0FBZ0IsRUFBVSxNQUFPLElBQ2pFLFdBQVksRUFBUSxJQUNwQixFQUFvQixFQUFNLEVBQVcsVUFBVSxFQUFPLEdBQ3RELEtBS0csSUFBYyxFQUFVLEdBQVEsS0FBTSxLQUNiLFFBQTNCLEVBQVMsSUFBTyxRQUVsQixFQUFLLE1BQU8sR0FBYyxFQUMxQixFQUFRLEdBQU8sSUFBSyxFQUFNLElBR3BCLEVBQW1CLEVBQU0sRUFBTyxPQUsxQyxHQUFPLFNBQVMsV0FBYSxFQUFjLEdBQVEsbUJBQ2xELFNBQVUsRUFBTSxHQUNmLEdBQUssRUFDSixPQUFTLFdBQVksRUFBUSxFQUFNLGdCQUNsQyxFQUFLLHdCQUF3QixLQUM1QixHQUFNLEdBQVEsV0FBWSxHQUFLLFdBQzlCLE1BQU8sR0FBSyx3QkFBd0IsUUFFbEMsT0FNUixHQUFPLE1BQ04sT0FBUSxHQUNSLFFBQVMsR0FDVCxPQUFRLFNBQ04sU0FBVSxFQUFRLEdBQ3BCLEdBQU8sU0FBVSxFQUFTLElBQ3pCLE9BQVEsU0FBVSxHQU9qQixJQU5BLEdBQUksR0FBSSxFQUNQLEtBR0EsRUFBeUIsZ0JBQVYsR0FBcUIsRUFBTSxNQUFPLE1BQVUsR0FFcEQsRUFBSSxFQUFHLElBQ2QsRUFBVSxFQUFTLEdBQVcsR0FBTSxHQUNuQyxFQUFPLElBQU8sRUFBTyxFQUFJLElBQU8sRUFBTyxFQUd6QyxPQUFPLEtBSU8sV0FBWCxJQUNKLEdBQU8sU0FBVSxFQUFTLEdBQVMsSUFBTSxLQUkzQyxHQUFPLEdBQUcsUUFDVCxJQUFLLFNBQVUsRUFBTSxHQUNwQixNQUFPLElBQVEsS0FBTSxTQUFVLEVBQU0sRUFBTSxHQUMxQyxHQUFJLEdBQVEsRUFDWCxLQUNBLEVBQUksQ0FFTCxJQUFLLE1BQU0sUUFBUyxHQUFTLENBSTVCLElBSEEsRUFBUyxHQUFXLEdBQ3BCLEVBQU0sRUFBSyxPQUVILEVBQUksRUFBSyxJQUNoQixFQUFLLEVBQU0sSUFBUSxHQUFPLElBQUssRUFBTSxFQUFNLElBQUssRUFBTyxFQUd4RCxPQUFPLEdBR1IsV0FBaUIsS0FBVixFQUNOLEdBQU8sTUFBTyxFQUFNLEVBQU0sR0FDMUIsR0FBTyxJQUFLLEVBQU0sSUFDakIsRUFBTSxFQUFPLFVBQVUsT0FBUyxNQVFyQyxHQUFPLE1BQVEsRUFFZixFQUFNLFdBQ0wsWUFBYSxFQUNiLEtBQU0sU0FBVSxFQUFNLEVBQVMsRUFBTSxFQUFLLEVBQVEsR0FDakQsS0FBSyxLQUFPLEVBQ1osS0FBSyxLQUFPLEVBQ1osS0FBSyxPQUFTLEdBQVUsR0FBTyxPQUFPLFNBQ3RDLEtBQUssUUFBVSxFQUNmLEtBQUssTUFBUSxLQUFLLElBQU0sS0FBSyxNQUM3QixLQUFLLElBQU0sRUFDWCxLQUFLLEtBQU8sSUFBVSxHQUFPLFVBQVcsR0FBUyxHQUFLLE9BRXZELElBQUssV0FDSixHQUFJLEdBQVEsRUFBTSxVQUFXLEtBQUssS0FFbEMsT0FBTyxJQUFTLEVBQU0sSUFDckIsRUFBTSxJQUFLLE1BQ1gsRUFBTSxVQUFVLFNBQVMsSUFBSyxPQUVoQyxJQUFLLFNBQVUsR0FDZCxHQUFJLEdBQ0gsRUFBUSxFQUFNLFVBQVcsS0FBSyxLQW9CL0IsT0FsQkssTUFBSyxRQUFRLFNBQ2pCLEtBQUssSUFBTSxFQUFRLEdBQU8sT0FBUSxLQUFLLFFBQ3RDLEVBQVMsS0FBSyxRQUFRLFNBQVcsRUFBUyxFQUFHLEVBQUcsS0FBSyxRQUFRLFVBRzlELEtBQUssSUFBTSxFQUFRLEVBRXBCLEtBQUssS0FBUSxLQUFLLElBQU0sS0FBSyxPQUFVLEVBQVEsS0FBSyxNQUUvQyxLQUFLLFFBQVEsTUFDakIsS0FBSyxRQUFRLEtBQUssS0FBTSxLQUFLLEtBQU0sS0FBSyxJQUFLLE1BR3pDLEdBQVMsRUFBTSxJQUNuQixFQUFNLElBQUssTUFFWCxFQUFNLFVBQVUsU0FBUyxJQUFLLE1BRXhCLE9BSVQsRUFBTSxVQUFVLEtBQUssVUFBWSxFQUFNLFVBRXZDLEVBQU0sV0FDTCxVQUNDLElBQUssU0FBVSxHQUNkLEdBQUksRUFJSixPQUE2QixLQUF4QixFQUFNLEtBQUssVUFDYSxNQUE1QixFQUFNLEtBQU0sRUFBTSxPQUFvRCxNQUFsQyxFQUFNLEtBQUssTUFBTyxFQUFNLE1BQ3JELEVBQU0sS0FBTSxFQUFNLE9BTzFCLEVBQVMsR0FBTyxJQUFLLEVBQU0sS0FBTSxFQUFNLEtBQU0sSUFHckMsR0FBcUIsU0FBWCxFQUF3QixFQUFKLElBRXZDLElBQUssU0FBVSxHQUtULEdBQU8sR0FBRyxLQUFNLEVBQU0sTUFDMUIsR0FBTyxHQUFHLEtBQU0sRUFBTSxNQUFRLEdBQ0ssSUFBeEIsRUFBTSxLQUFLLFdBQ3JCLEdBQU8sU0FBVSxFQUFNLE9BQzRCLE1BQW5ELEVBQU0sS0FBSyxNQUFPLEVBQWUsRUFBTSxPQUd4QyxFQUFNLEtBQU0sRUFBTSxNQUFTLEVBQU0sSUFGakMsR0FBTyxNQUFPLEVBQU0sS0FBTSxFQUFNLEtBQU0sRUFBTSxJQUFNLEVBQU0sU0FVNUQsRUFBTSxVQUFVLFVBQVksRUFBTSxVQUFVLFlBQzNDLElBQUssU0FBVSxHQUNULEVBQU0sS0FBSyxVQUFZLEVBQU0sS0FBSyxhQUN0QyxFQUFNLEtBQU0sRUFBTSxNQUFTLEVBQU0sT0FLcEMsR0FBTyxRQUNOLE9BQVEsU0FBVSxHQUNqQixNQUFPLElBRVIsTUFBTyxTQUFVLEdBQ2hCLE1BQU8sR0FBTSxLQUFLLElBQUssRUFBSSxLQUFLLElBQU8sR0FFeEMsU0FBVSxTQUdYLEdBQU8sR0FBSyxFQUFNLFVBQVUsS0FHNUIsR0FBTyxHQUFHLE9BS1YsSUFDQyxJQUFPLEdBQ1AsR0FBVyx5QkFDWCxHQUFPLGFBdVlSLElBQU8sVUFBWSxHQUFPLE9BQVEsR0FFakMsVUFDQyxLQUFPLFNBQVUsRUFBTSxHQUN0QixHQUFJLEdBQVEsS0FBSyxZQUFhLEVBQU0sRUFFcEMsT0FEQSxHQUFXLEVBQU0sS0FBTSxFQUFNLEdBQVEsS0FBTSxHQUFTLEdBQzdDLEtBSVQsUUFBUyxTQUFVLEVBQU8sR0FDcEIsR0FBWSxJQUNoQixFQUFXLEVBQ1gsR0FBVSxNQUVWLEVBQVEsRUFBTSxNQUFPLEdBT3RCLEtBSkEsR0FBSSxHQUNILEVBQVEsRUFDUixFQUFTLEVBQU0sT0FFUixFQUFRLEVBQVEsSUFDdkIsRUFBTyxFQUFPLEdBQ2QsRUFBVSxTQUFVLEdBQVMsRUFBVSxTQUFVLE9BQ2pELEVBQVUsU0FBVSxHQUFPLFFBQVMsSUFJdEMsWUFBYyxHQUVkLFVBQVcsU0FBVSxFQUFVLEdBQ3pCLEVBQ0osRUFBVSxXQUFXLFFBQVMsR0FFOUIsRUFBVSxXQUFXLEtBQU0sTUFLOUIsR0FBTyxNQUFRLFNBQVUsRUFBTyxFQUFRLEdBQ3ZDLEdBQUksR0FBTSxHQUEwQixnQkFBVixHQUFxQixHQUFPLFVBQVk7NkNBQ2pFLFNBQVUsSUFBTyxHQUFNLEdBQ3RCLEdBQVksSUFBVyxFQUN4QixTQUFVLEVBQ1YsT0FBUSxHQUFNLEdBQVUsSUFBVyxHQUFZLElBQVksRUFvQzVELE9BaENLLElBQU8sR0FBRyxJQUNkLEVBQUksU0FBVyxFQUdjLGdCQUFqQixHQUFJLFdBQ1YsRUFBSSxXQUFZLElBQU8sR0FBRyxPQUM5QixFQUFJLFNBQVcsR0FBTyxHQUFHLE9BQVEsRUFBSSxVQUdyQyxFQUFJLFNBQVcsR0FBTyxHQUFHLE9BQU8sVUFNakIsTUFBYixFQUFJLFFBQStCLElBQWQsRUFBSSxRQUM3QixFQUFJLE1BQVEsTUFJYixFQUFJLElBQU0sRUFBSSxTQUVkLEVBQUksU0FBVyxXQUNULEdBQVksRUFBSSxNQUNwQixFQUFJLElBQUksS0FBTSxNQUdWLEVBQUksT0FDUixHQUFPLFFBQVMsS0FBTSxFQUFJLFFBSXJCLEdBR1IsR0FBTyxHQUFHLFFBQ1QsT0FBUSxTQUFVLEVBQU8sRUFBSSxFQUFRLEdBR3BDLE1BQU8sTUFBSyxPQUFRLElBQXFCLElBQUssVUFBVyxHQUFJLE9BRzNELE1BQU0sU0FBVyxRQUFTLEdBQU0sRUFBTyxFQUFRLElBRWxELFFBQVMsU0FBVSxFQUFNLEVBQU8sRUFBUSxHQUN2QyxHQUFJLEdBQVEsR0FBTyxjQUFlLEdBQ2pDLEVBQVMsR0FBTyxNQUFPLEVBQU8sRUFBUSxHQUN0QyxFQUFjLFdBR2IsR0FBSSxHQUFPLEVBQVcsS0FBTSxHQUFPLFVBQVksR0FBUSxJQUdsRCxHQUFTLEdBQVMsSUFBSyxLQUFNLFlBQ2pDLEVBQUssTUFBTSxHQUtkLE9BRkMsR0FBWSxPQUFTLEVBRWYsSUFBMEIsSUFBakIsRUFBTyxNQUN0QixLQUFLLEtBQU0sR0FDWCxLQUFLLE1BQU8sRUFBTyxNQUFPLElBRTVCLEtBQU0sU0FBVSxFQUFNLEVBQVksR0FDakMsR0FBSSxHQUFZLFNBQVUsR0FDekIsR0FBSSxHQUFPLEVBQU0sV0FDVixHQUFNLEtBQ2IsRUFBTSxHQVlQLE9BVHFCLGdCQUFULEtBQ1gsRUFBVSxFQUNWLEVBQWEsRUFDYixNQUFPLElBRUgsSUFBdUIsSUFBVCxHQUNsQixLQUFLLE1BQU8sR0FBUSxTQUdkLEtBQUssS0FBTSxXQUNqQixHQUFJLElBQVUsRUFDYixFQUFnQixNQUFSLEdBQWdCLEVBQU8sYUFDL0IsRUFBUyxHQUFPLE9BQ2hCLEVBQU8sR0FBUyxJQUFLLEtBRXRCLElBQUssRUFDQyxFQUFNLElBQVcsRUFBTSxHQUFRLE1BQ25DLEVBQVcsRUFBTSxRQUdsQixLQUFNLElBQVMsR0FDVCxFQUFNLElBQVcsRUFBTSxHQUFRLE1BQVEsR0FBSyxLQUFNLElBQ3RELEVBQVcsRUFBTSxHQUtwQixLQUFNLEVBQVEsRUFBTyxPQUFRLEtBQ3ZCLEVBQVEsR0FBUSxPQUFTLE1BQ25CLE1BQVIsR0FBZ0IsRUFBUSxHQUFRLFFBQVUsSUFFNUMsRUFBUSxHQUFRLEtBQUssS0FBTSxHQUMzQixHQUFVLEVBQ1YsRUFBTyxPQUFRLEVBQU8sS0FPbkIsR0FBWSxHQUNoQixHQUFPLFFBQVMsS0FBTSxNQUl6QixPQUFRLFNBQVUsR0FJakIsT0FIYyxJQUFULElBQ0osRUFBTyxHQUFRLE1BRVQsS0FBSyxLQUFNLFdBQ2pCLEdBQUksR0FDSCxFQUFPLEdBQVMsSUFBSyxNQUNyQixFQUFRLEVBQU0sRUFBTyxTQUNyQixFQUFRLEVBQU0sRUFBTyxjQUNyQixFQUFTLEdBQU8sT0FDaEIsRUFBUyxFQUFRLEVBQU0sT0FBUyxDQWFqQyxLQVZBLEVBQUssUUFBUyxFQUdkLEdBQU8sTUFBTyxLQUFNLE1BRWYsR0FBUyxFQUFNLE1BQ25CLEVBQU0sS0FBSyxLQUFNLE1BQU0sR0FJbEIsRUFBUSxFQUFPLE9BQVEsS0FDdkIsRUFBUSxHQUFRLE9BQVMsTUFBUSxFQUFRLEdBQVEsUUFBVSxJQUMvRCxFQUFRLEdBQVEsS0FBSyxNQUFNLEdBQzNCLEVBQU8sT0FBUSxFQUFPLEdBS3hCLEtBQU0sRUFBUSxFQUFHLEVBQVEsRUFBUSxJQUMzQixFQUFPLElBQVcsRUFBTyxHQUFRLFFBQ3JDLEVBQU8sR0FBUSxPQUFPLEtBQU0sWUFLdkIsR0FBSyxZQUtmLEdBQU8sTUFBUSxTQUFVLE9BQVEsUUFBVSxTQUFVLEVBQUcsR0FDdkQsR0FBSSxHQUFRLEdBQU8sR0FBSSxFQUN2QixJQUFPLEdBQUksR0FBUyxTQUFVLEVBQU8sRUFBUSxHQUM1QyxNQUFnQixPQUFULEdBQWtDLGlCQUFWLEdBQzlCLEVBQU0sTUFBTyxLQUFNLFdBQ25CLEtBQUssUUFBUyxFQUFPLEdBQU0sR0FBUSxFQUFPLEVBQVEsTUFLckQsR0FBTyxNQUNOLFVBQVcsRUFBTyxRQUNsQixRQUFTLEVBQU8sUUFDaEIsWUFBYSxFQUFPLFVBQ3BCLFFBQVUsUUFBUyxRQUNuQixTQUFXLFFBQVMsUUFDcEIsWUFBYyxRQUFTLFdBQ3JCLFNBQVUsRUFBTSxHQUNsQixHQUFPLEdBQUksR0FBUyxTQUFVLEVBQU8sRUFBUSxHQUM1QyxNQUFPLE1BQUssUUFBUyxFQUFPLEVBQU8sRUFBUSxNQUk3QyxHQUFPLFVBQ1AsR0FBTyxHQUFHLEtBQU8sV0FDaEIsR0FBSSxHQUNILEVBQUksRUFDSixFQUFTLEdBQU8sTUFJakIsS0FGQSxHQUFRLEtBQUssTUFFTCxFQUFJLEVBQU8sT0FBUSxLQUMxQixFQUFRLEVBQVEsT0FHQyxFQUFRLEtBQVEsR0FDaEMsRUFBTyxPQUFRLElBQUssRUFJaEIsR0FBTyxRQUNaLEdBQU8sR0FBRyxPQUVYLE9BQVEsSUFHVCxHQUFPLEdBQUcsTUFBUSxTQUFVLEdBQzNCLEdBQU8sT0FBTyxLQUFNLEdBQ3BCLEdBQU8sR0FBRyxTQUdYLEdBQU8sR0FBRyxTQUFXLEdBQ3JCLEdBQU8sR0FBRyxNQUFRLFdBQ1osS0FJTCxJQUFhLEVBQ2IsTUFHRCxHQUFPLEdBQUcsS0FBTyxXQUNoQixHQUFhLE1BR2QsR0FBTyxHQUFHLFFBQ1QsS0FBTSxJQUNOLEtBQU0sSUFHTixTQUFVLEtBTVgsR0FBTyxHQUFHLE1BQVEsU0FBVSxFQUFNLEdBSWpDLE1BSEEsR0FBTyxHQUFPLEdBQUssR0FBTyxHQUFHLE9BQVEsSUFBVSxFQUFPLEVBQ3RELEVBQU8sR0FBUSxLQUVSLEtBQUssTUFBTyxFQUFNLFNBQVUsRUFBTSxHQUN4QyxHQUFJLEdBQVUsRUFBTyxXQUFZLEVBQU0sRUFDdkMsR0FBTSxLQUFPLFdBQ1osRUFBTyxhQUFjLE9BTXhCLFdBQ0MsR0FBSSxHQUFRLEdBQVMsY0FBZSxTQUNuQyxFQUFTLEdBQVMsY0FBZSxVQUNqQyxFQUFNLEVBQU8sWUFBYSxHQUFTLGNBQWUsVUFFbkQsR0FBTSxLQUFPLFdBSWIsR0FBUSxRQUEwQixLQUFoQixFQUFNLE1BSXhCLEdBQVEsWUFBYyxFQUFJLFNBSTFCLEVBQVEsR0FBUyxjQUFlLFNBQ2hDLEVBQU0sTUFBUSxJQUNkLEVBQU0sS0FBTyxRQUNiLEdBQVEsV0FBNkIsTUFBaEIsRUFBTSxRQUk1QixJQUFJLElBQ0gsR0FBYSxHQUFPLEtBQUssVUFFMUIsSUFBTyxHQUFHLFFBQ1QsS0FBTSxTQUFVLEVBQU0sR0FDckIsTUFBTyxJQUFRLEtBQU0sR0FBTyxLQUFNLEVBQU0sRUFBTyxVQUFVLE9BQVMsSUFHbkUsV0FBWSxTQUFVLEdBQ3JCLE1BQU8sTUFBSyxLQUFNLFdBQ2pCLEdBQU8sV0FBWSxLQUFNLFFBSzVCLEdBQU8sUUFDTixLQUFNLFNBQVUsRUFBTSxFQUFNLEdBQzNCLEdBQUksR0FBSyxFQUNSLEVBQVEsRUFBSyxRQUdkLElBQWUsSUFBVixHQUF5QixJQUFWLEdBQXlCLElBQVYsRUFLbkMsV0FBa0MsS0FBdEIsRUFBSyxhQUNULEdBQU8sS0FBTSxFQUFNLEVBQU0sSUFLbEIsSUFBVixHQUFnQixHQUFPLFNBQVUsS0FDckMsRUFBUSxHQUFPLFVBQVcsRUFBSyxpQkFDNUIsR0FBTyxLQUFLLE1BQU0sS0FBSyxLQUFNLEdBQVMsT0FBVyxTQUd0QyxLQUFWLEVBQ1csT0FBVixNQUNKLElBQU8sV0FBWSxFQUFNLEdBSXJCLEdBQVMsT0FBUyxRQUN1QixNQUEzQyxFQUFNLEVBQU0sSUFBSyxFQUFNLEVBQU8sSUFDekIsR0FHUixFQUFLLGFBQWMsRUFBTSxFQUFRLElBQzFCLEdBR0gsR0FBUyxPQUFTLElBQStDLFFBQXBDLEVBQU0sRUFBTSxJQUFLLEVBQU0sSUFDakQsR0FHUixFQUFNLEdBQU8sS0FBSyxLQUFNLEVBQU0sR0FHaEIsTUFBUCxNQUFjLEdBQVksS0FHbEMsV0FDQyxNQUNDLElBQUssU0FBVSxFQUFNLEdBQ3BCLElBQU0sR0FBUSxZQUF3QixVQUFWLEdBQzNCLEVBQVUsRUFBTSxTQUFZLENBQzVCLEdBQUksR0FBTSxFQUFLLEtBS2YsT0FKQSxHQUFLLGFBQWMsT0FBUSxHQUN0QixJQUNKLEVBQUssTUFBUSxHQUVQLE1BTVgsV0FBWSxTQUFVLEVBQU0sR0FDM0IsR0FBSSxHQUNILEVBQUksRUFJSixFQUFZLEdBQVMsRUFBTSxNQUFPLEdBRW5DLElBQUssR0FBK0IsSUFBbEIsRUFBSyxTQUN0QixLQUFVLEVBQU8sRUFBVyxNQUMzQixFQUFLLGdCQUFpQixNQU8xQixJQUNDLElBQUssU0FBVSxFQUFNLEVBQU8sR0FRM0IsT0FQZSxJQUFWLEVBR0osR0FBTyxXQUFZLEVBQU0sR0FFekIsRUFBSyxhQUFjLEVBQU0sR0FFbkIsSUFJVCxHQUFPLEtBQU0sR0FBTyxLQUFLLE1BQU0sS0FBSyxPQUFPLE1BQU8sUUFBVSxTQUFVLEVBQUcsR0FDeEUsR0FBSSxHQUFTLEdBQVksSUFBVSxHQUFPLEtBQUssSUFFL0MsSUFBWSxHQUFTLFNBQVUsRUFBTSxFQUFNLEdBQzFDLEdBQUksR0FBSyxFQUNSLEVBQWdCLEVBQUssYUFZdEIsT0FWTSxLQUdMLEVBQVMsR0FBWSxHQUNyQixHQUFZLEdBQWtCLEVBQzlCLEVBQXFDLE1BQS9CLEVBQVEsRUFBTSxFQUFNLEdBQ3pCLEVBQ0EsS0FDRCxHQUFZLEdBQWtCLEdBRXhCLElBT1QsSUFBSSxJQUFhLHNDQUNoQixHQUFhLGVBRWQsSUFBTyxHQUFHLFFBQ1QsS0FBTSxTQUFVLEVBQU0sR0FDckIsTUFBTyxJQUFRLEtBQU0sR0FBTyxLQUFNLEVBQU0sRUFBTyxVQUFVLE9BQVMsSUFHbkUsV0FBWSxTQUFVLEdBQ3JCLE1BQU8sTUFBSyxLQUFNLGlCQUNWLE1BQU0sR0FBTyxRQUFTLElBQVUsUUFLMUMsR0FBTyxRQUNOLEtBQU0sU0FBVSxFQUFNLEVBQU0sR0FDM0IsR0FBSSxHQUFLLEVBQ1IsRUFBUSxFQUFLLFFBR2QsSUFBZSxJQUFWLEdBQXlCLElBQVYsR0FBeUIsSUFBVixFQVduQyxNQVBlLEtBQVYsR0FBZ0IsR0FBTyxTQUFVLEtBR3JDLEVBQU8sR0FBTyxRQUFTLElBQVUsRUFDakMsRUFBUSxHQUFPLFVBQVcsUUFHWixLQUFWLEVBQ0MsR0FBUyxPQUFTLFFBQ3VCLE1BQTNDLEVBQU0sRUFBTSxJQUFLLEVBQU0sRUFBTyxJQUN6QixFQUdDLEVBQU0sR0FBUyxFQUdwQixHQUFTLE9BQVMsSUFBK0MsUUFBcEMsRUFBTSxFQUFNLElBQUssRUFBTSxJQUNqRCxFQUdELEVBQU0sSUFHZCxXQUNDLFVBQ0MsSUFBSyxTQUFVLEdBT2QsR0FBSSxHQUFXLEdBQU8sS0FBSyxLQUFNLEVBQU0sV0FFdkMsT0FBSyxHQUNHLFNBQVUsRUFBVSxJQUkzQixHQUFXLEtBQU0sRUFBSyxXQUN0QixHQUFXLEtBQU0sRUFBSyxXQUN0QixFQUFLLEtBRUUsR0FHQSxLQUtYLFNBQ0MsSUFBTyxVQUNQLE1BQVMsZUFZTCxHQUFRLGNBQ2IsR0FBTyxVQUFVLFVBQ2hCLElBQUssU0FBVSxHQUlkLEdBQUksR0FBUyxFQUFLLFVBSWxCLE9BSEssSUFBVSxFQUFPLFlBQ3JCLEVBQU8sV0FBVyxjQUVaLE1BRVIsSUFBSyxTQUFVLEdBSWQsR0FBSSxHQUFTLEVBQUssVUFDYixLQUNKLEVBQU8sY0FFRixFQUFPLFlBQ1gsRUFBTyxXQUFXLGtCQU92QixHQUFPLE1BQ04sV0FDQSxXQUNBLFlBQ0EsY0FDQSxjQUNBLFVBQ0EsVUFDQSxTQUNBLGNBQ0EsbUJBQ0UsV0FDRixHQUFPLFFBQVMsS0FBSyxlQUFrQixPQTRCeEMsR0FBTyxHQUFHLFFBQ1QsU0FBVSxTQUFVLEdBQ25CLEdBQUksR0FBUyxFQUFNLEVBQUssRUFBVSxFQUFPLEVBQUcsRUFDM0MsRUFBSSxDQUVMLElBQUssR0FBWSxHQUNoQixNQUFPLE1BQUssS0FBTSxTQUFVLEdBQzNCLEdBQVEsTUFBTyxTQUFVLEVBQU0sS0FBTSxLQUFNLEVBQUcsRUFBVSxTQU0xRCxJQUZBLEVBQVUsR0FBZ0IsR0FFckIsRUFBUSxPQUNaLEtBQVUsRUFBTyxLQUFNLE1BSXRCLEdBSEEsRUFBVyxFQUFVLEdBQ3JCLEVBQXdCLElBQWxCLEVBQUssVUFBb0IsSUFBTSxFQUFrQixHQUFhLElBRXpELENBRVYsSUFEQSxFQUFJLEVBQ00sRUFBUSxFQUFTLE1BQ3JCLEVBQUksUUFBUyxJQUFNLEVBQVEsS0FBUSxJQUN2QyxHQUFPLEVBQVEsSUFLakIsR0FBYSxFQUFrQixHQUMxQixJQUFhLEdBQ2pCLEVBQUssYUFBYyxRQUFTLEdBTWhDLE1BQU8sT0FHUixZQUFhLFNBQVUsR0FDdEIsR0FBSSxHQUFTLEVBQU0sRUFBSyxFQUFVLEVBQU8sRUFBRyxFQUMzQyxFQUFJLENBRUwsSUFBSyxHQUFZLEdBQ2hCLE1BQU8sTUFBSyxLQUFNLFNBQVUsR0FDM0IsR0FBUSxNQUFPLFlBQWEsRUFBTSxLQUFNLEtBQU0sRUFBRyxFQUFVLFNBSTdELEtBQU0sVUFBVSxPQUNmLE1BQU8sTUFBSyxLQUFNLFFBQVMsR0FLNUIsSUFGQSxFQUFVLEdBQWdCLEdBRXJCLEVBQVEsT0FDWixLQUFVLEVBQU8sS0FBTSxNQU10QixHQUxBLEVBQVcsRUFBVSxHQUdyQixFQUF3QixJQUFsQixFQUFLLFVBQW9CLElBQU0sRUFBa0IsR0FBYSxJQUV6RCxDQUVWLElBREEsRUFBSSxFQUNNLEVBQVEsRUFBUyxNQUcxQixLQUFRLEVBQUksUUFBUyxJQUFNLEVBQVEsTUFBUyxHQUMzQyxFQUFNLEVBQUksUUFBUyxJQUFNLEVBQVEsSUFBSyxJQUt4QyxHQUFhLEVBQWtCLEdBQzFCLElBQWEsR0FDakIsRUFBSyxhQUFjLFFBQVMsR0FNaEMsTUFBTyxPQUdSLFlBQWEsU0FBVSxFQUFPLEdBQzdCLEdBQUksU0FBYyxHQUNqQixFQUF3QixXQUFULEdBQXFCLE1BQU0sUUFBUyxFQUVwRCxPQUF5QixpQkFBYixJQUEwQixFQUM5QixFQUFXLEtBQUssU0FBVSxHQUFVLEtBQUssWUFBYSxHQUd6RCxHQUFZLEdBQ1QsS0FBSyxLQUFNLFNBQVUsR0FDM0IsR0FBUSxNQUFPLFlBQ2QsRUFBTSxLQUFNLEtBQU0sRUFBRyxFQUFVLE1BQVEsR0FDdkMsS0FLSSxLQUFLLEtBQU0sV0FDakIsR0FBSSxHQUFXLEVBQUcsRUFBTSxDQUV4QixJQUFLLEVBT0osSUFKQSxFQUFJLEVBQ0osRUFBTyxHQUFRLE1BQ2YsRUFBYSxHQUFnQixHQUVuQixFQUFZLEVBQVksTUFHNUIsRUFBSyxTQUFVLEdBQ25CLEVBQUssWUFBYSxHQUVsQixFQUFLLFNBQVUsWUFLSSxLQUFWLEdBQWdDLFlBQVQsSUFDbEMsRUFBWSxFQUFVLE1BQ2pCLEdBR0osR0FBUyxJQUFLLEtBQU0sZ0JBQWlCLEdBT2pDLEtBQUssY0FDVCxLQUFLLGFBQWMsUUFDbEIsSUFBdUIsSUFBVixFQUNiLEdBQ0EsR0FBUyxJQUFLLEtBQU0sa0JBQXFCLFFBTzlDLFNBQVUsU0FBVSxHQUNuQixHQUFJLEdBQVcsRUFDZCxFQUFJLENBR0wsS0FEQSxFQUFZLElBQU0sRUFBVyxJQUNuQixFQUFPLEtBQU0sTUFDdEIsR0FBdUIsSUFBbEIsRUFBSyxXQUNQLElBQU0sRUFBa0IsRUFBVSxJQUFXLEtBQU0sUUFBUyxJQUFlLEVBQzVFLE9BQU8sQ0FJVixRQUFPLElBT1QsSUFBSSxJQUFVLEtBRWQsSUFBTyxHQUFHLFFBQ1QsSUFBSyxTQUFVLEdBQ2QsR0FBSSxHQUFPLEVBQUssRUFDZixFQUFPLEtBQU0sRUFFZCxFQUFBLEdBQU0sVUFBVSxPQTRCaEIsTUFGQSxHQUFrQixHQUFZLEdBRXZCLEtBQUssS0FBTSxTQUFVLEdBQzNCLEdBQUksRUFFbUIsS0FBbEIsS0FBSyxXQUtULEVBREksRUFDRSxFQUFNLEtBQU0sS0FBTSxFQUFHLEdBQVEsTUFBTyxPQUVwQyxFQUlLLE1BQVAsRUFDSixFQUFNLEdBRW9CLGdCQUFSLEdBQ2xCLEdBQU8sR0FFSSxNQUFNLFFBQVMsS0FDMUIsRUFBTSxHQUFPLElBQUssRUFBSyxTQUFVLEdBQ2hDLE1BQWdCLE9BQVQsRUFBZ0IsR0FBSyxFQUFRLE9BSXRDLEVBQVEsR0FBTyxTQUFVLEtBQUssT0FBVSxHQUFPLFNBQVUsS0FBSyxTQUFTLGlCQUdyRCxPQUFTLFFBQStDLEtBQXBDLEVBQU0sSUFBSyxLQUFNLEVBQUssV0FDM0QsS0FBSyxNQUFRLEtBekRkLElBQUssRUFJSixPQUhBLEVBQVEsR0FBTyxTQUFVLEVBQUssT0FDN0IsR0FBTyxTQUFVLEVBQUssU0FBUyxpQkFHL0IsT0FBUyxRQUNnQyxNQUF2QyxFQUFNLEVBQU0sSUFBSyxFQUFNLFVBRWxCLEdBR1IsRUFBTSxFQUFLLE1BR1MsZ0JBQVIsR0FDSixFQUFJLFFBQVMsR0FBUyxJQUloQixNQUFQLEVBQWMsR0FBSyxPQTRDOUIsR0FBTyxRQUNOLFVBQ0MsUUFDQyxJQUFLLFNBQVUsR0FFZCxHQUFJLEdBQU0sR0FBTyxLQUFLLEtBQU0sRUFBTSxRQUNsQyxPQUFjLE9BQVAsRUFDTixFQU1BLEVBQWtCLEdBQU8sS0FBTSxNQUdsQyxRQUNDLElBQUssU0FBVSxHQUNkLEdBQUksR0FBTyxFQUFRLEVBQ2xCLEVBQVUsRUFBSyxRQUNmLEVBQVEsRUFBSyxjQUNiLEVBQW9CLGVBQWQsRUFBSyxLQUNYLEVBQVMsRUFBTSxRQUNmLEVBQU0sRUFBTSxFQUFRLEVBQUksRUFBUSxNQVVqQyxLQVBDLEVBREksRUFBUSxFQUNSLEVBR0EsRUFBTSxFQUFRLEVBSVgsRUFBSSxFQUFLLElBS2hCLEdBSkEsRUFBUyxFQUFTLElBSVgsRUFBTyxVQUFZLElBQU0sS0FHN0IsRUFBTyxZQUNMLEVBQU8sV0FBVyxXQUNuQixFQUFVLEVBQU8sV0FBWSxhQUFpQixDQU1qRCxHQUhBLEVBQVEsR0FBUSxHQUFTLE1BR3BCLEVBQ0osTUFBTyxFQUlSLEdBQU8sS0FBTSxHQUlmLE1BQU8sSUFHUixJQUFLLFNBQVUsRUFBTSxHQU1wQixJQUxBLEdBQUksR0FBVyxFQUNkLEVBQVUsRUFBSyxRQUNmLEVBQVMsR0FBTyxVQUFXLEdBQzNCLEVBQUksRUFBUSxPQUVMLEtBQ1AsRUFBUyxFQUFTLElBSWIsRUFBTyxTQUNYLEdBQU8sUUFBUyxHQUFPLFNBQVMsT0FBTyxJQUFLLEdBQVUsSUFBWSxLQUVsRSxHQUFZLEVBVWQsT0FITSxLQUNMLEVBQUssZUFBaUIsR0FFaEIsT0FPWCxHQUFPLE1BQVEsUUFBUyxZQUFjLFdBQ3JDLEdBQU8sU0FBVSxPQUNoQixJQUFLLFNBQVUsRUFBTSxHQUNwQixHQUFLLE1BQU0sUUFBUyxHQUNuQixNQUFTLEdBQUssUUFBVSxHQUFPLFFBQVMsR0FBUSxHQUFPLE1BQU8sSUFBVyxJQUl0RSxHQUFRLFVBQ2IsR0FBTyxTQUFVLE1BQU8sSUFBTSxTQUFVLEdBQ3ZDLE1BQXdDLFFBQWpDLEVBQUssYUFBYyxTQUFxQixLQUFPLEVBQUssVUFXOUQsR0FBUSxRQUFVLGFBQWUsRUFHakMsSUFBSSxJQUFjLGtDQUNqQixHQUEwQixTQUFVLEdBQ25DLEVBQUUsa0JBR0osSUFBTyxPQUFRLEdBQU8sT0FFckIsUUFBUyxTQUFVLEVBQU8sRUFBTSxFQUFNLEdBRXJDLEdBQUksR0FBRyxFQUFLLEVBQUssRUFBWSxFQUFRLEVBQVEsRUFBUyxFQUNyRCxHQUFjLEdBQVEsSUFDdEIsRUFBTyxHQUFPLEtBQU0sRUFBTyxRQUFXLEVBQU0sS0FBTyxFQUNuRCxFQUFhLEdBQU8sS0FBTSxFQUFPLGFBQWdCLEVBQU0sVUFBVSxNQUFPLE9BS3pFLElBSEEsRUFBTSxFQUFjLEVBQU0sRUFBTyxHQUFRLEdBR2xCLElBQWxCLEVBQUssVUFBb0MsSUFBbEIsRUFBSyxXQUs1QixHQUFZLEtBQU0sRUFBTyxHQUFPLE1BQU0sYUFJdEMsRUFBSyxRQUFTLE1BQVMsSUFHM0IsRUFBYSxFQUFLLE1BQU8sS0FDekIsRUFBTyxFQUFXLFFBQ2xCLEVBQVcsUUFFWixFQUFTLEVBQUssUUFBUyxLQUFRLEdBQUssS0FBTyxFQUczQyxFQUFRLEVBQU8sR0FBTyxTQUNyQixFQUNBLEdBQUksSUFBTyxNQUFPLEVBQXVCLGdCQUFWLElBQXNCLEdBR3RELEVBQU0sVUFBWSxFQUFlLEVBQUksRUFDckMsRUFBTSxVQUFZLEVBQVcsS0FBTSxLQUNuQyxFQUFNLFdBQWEsRUFBTSxVQUN4QixHQUFJLFFBQVEsVUFBWSxFQUFXLEtBQU0saUJBQW9CLFdBQzdELEtBR0QsRUFBTSxXQUFTLEdBQ1QsRUFBTSxTQUNYLEVBQU0sT0FBUyxHQUloQixFQUFlLE1BQVIsR0FDSixHQUNGLEdBQU8sVUFBVyxHQUFRLElBRzNCLEVBQVUsR0FBTyxNQUFNLFFBQVMsT0FDMUIsSUFBZ0IsRUFBUSxVQUFtRCxJQUF4QyxFQUFRLFFBQVEsTUFBTyxFQUFNLElBQXRFLENBTUEsSUFBTSxJQUFpQixFQUFRLFdBQWEsR0FBVSxHQUFTLENBTTlELElBSkEsRUFBYSxFQUFRLGNBQWdCLEVBQy9CLEdBQVksS0FBTSxFQUFhLEtBQ3BDLEVBQU0sRUFBSSxZQUVILEVBQUssRUFBTSxFQUFJLFdBQ3RCLEVBQVUsS0FBTSxHQUNoQixFQUFNLENBSUYsTUFBVSxFQUFLLGVBQWlCLEtBQ3BDLEVBQVUsS0FBTSxFQUFJLGFBQWUsRUFBSSxjQUFnQixHQU16RCxJQURBLEVBQUksR0FDTSxFQUFNLEVBQVcsUUFBWSxFQUFNLHdCQUM1QyxFQUFjLEVBQ2QsRUFBTSxLQUFPLEVBQUksRUFDaEIsRUFDQSxFQUFRLFVBQVksRUFHckIsR0FBVyxHQUFTLElBQUssRUFBSyxlQUFvQixFQUFNLE9BQ3ZELEdBQVMsSUFBSyxFQUFLLFVBQ2YsR0FDSixFQUFPLE1BQU8sRUFBSyxJQUlwQixFQUFTLEdBQVUsRUFBSyxLQUNULEVBQU8sT0FBUyxHQUFZLEtBQzFDLEVBQU0sT0FBUyxFQUFPLE1BQU8sRUFBSyxJQUNaLElBQWpCLEVBQU0sUUFDVixFQUFNLGlCQThDVCxPQTFDQSxHQUFNLEtBQU8sRUFHUCxHQUFpQixFQUFNLHNCQUVwQixFQUFRLFdBQ3FDLElBQXBELEVBQVEsU0FBUyxNQUFPLEVBQVUsTUFBTyxLQUN6QyxHQUFZLElBSVAsR0FBVSxHQUFZLEVBQU0sTUFBYSxHQUFVLEtBR3ZELEVBQU0sRUFBTSxHQUVQLElBQ0osRUFBTSxHQUFXLE1BSWxCLEdBQU8sTUFBTSxVQUFZLEVBRXBCLEVBQU0sd0JBQ1YsRUFBWSxpQkFBa0IsRUFBTSxJQUdyQyxFQUFNLEtBRUQsRUFBTSx3QkFDVixFQUFZLG9CQUFxQixFQUFNLElBR3hDLEdBQU8sTUFBTSxjQUFZLEdBRXBCLElBQ0osRUFBTSxHQUFXLElBTWQsRUFBTSxTQUtkLFNBQVUsU0FBVSxFQUFNLEVBQU0sR0FDL0IsR0FBSSxHQUFJLEdBQU8sT0FDZCxHQUFJLElBQU8sTUFDWCxHQUVDLEtBQU0sRUFDTixhQUFhLEdBSWYsSUFBTyxNQUFNLFFBQVMsRUFBRyxLQUFNLE1BS2pDLEdBQU8sR0FBRyxRQUVULFFBQVMsU0FBVSxFQUFNLEdBQ3hCLE1BQU8sTUFBSyxLQUFNLFdBQ2pCLEdBQU8sTUFBTSxRQUFTLEVBQU0sRUFBTSxTQUdwQyxlQUFnQixTQUFVLEVBQU0sR0FDL0IsR0FBSSxHQUFPLEtBQU0sRUFDakIsSUFBSyxFQUNKLE1BQU8sSUFBTyxNQUFNLFFBQVMsRUFBTSxFQUFNLEdBQU0sTUFjNUMsR0FBUSxTQUNiLEdBQU8sTUFBUSxNQUFPLFVBQVcsS0FBTSxZQUFjLFNBQVUsRUFBTSxHQUdwRSxHQUFJLEdBQVUsU0FBVSxHQUN2QixHQUFPLE1BQU0sU0FBVSxFQUFLLEVBQU0sT0FBUSxHQUFPLE1BQU0sSUFBSyxJQUc3RCxJQUFPLE1BQU0sUUFBUyxJQUNyQixNQUFPLFdBQ04sR0FBSSxHQUFNLEtBQUssZUFBaUIsS0FDL0IsRUFBVyxHQUFTLE9BQVEsRUFBSyxFQUU1QixJQUNMLEVBQUksaUJBQWtCLEVBQU0sR0FBUyxHQUV0QyxHQUFTLE9BQVEsRUFBSyxHQUFPLEdBQVksR0FBTSxJQUVoRCxTQUFVLFdBQ1QsR0FBSSxHQUFNLEtBQUssZUFBaUIsS0FDL0IsRUFBVyxHQUFTLE9BQVEsRUFBSyxHQUFRLENBRXBDLEdBS0wsR0FBUyxPQUFRLEVBQUssRUFBSyxJQUozQixFQUFJLG9CQUFxQixFQUFNLEdBQVMsR0FDeEMsR0FBUyxPQUFRLEVBQUssT0FTM0IsSUFBSSxJQUFXLEVBQU8sU0FFbEIsR0FBUSxLQUFLLE1BRWIsR0FBUyxJQUtiLElBQU8sU0FBVyxTQUFVLEdBQzNCLEdBQUksRUFDSixLQUFNLEdBQXdCLGdCQUFULEdBQ3BCLE1BQU8sS0FLUixLQUNDLEdBQU0sR0FBTSxHQUFPLFdBQWMsZ0JBQWlCLEVBQU0sWUFDdkQsTUFBUSxHQUNULE1BQU0sR0FNUCxNQUhNLEtBQU8sRUFBSSxxQkFBc0IsZUFBZ0IsUUFDdEQsR0FBTyxNQUFPLGdCQUFrQixHQUUxQixFQUlSLElBQ0MsSUFBVyxRQUNYLEdBQVEsU0FDUixHQUFrQix3Q0FDbEIsR0FBZSxvQ0EwQ2hCLElBQU8sTUFBUSxTQUFVLEVBQUcsR0FDM0IsR0FBSSxHQUNILEtBQ0EsRUFBTSxTQUFVLEVBQUssR0FHcEIsR0FBSSxHQUFRLEdBQVksR0FDdkIsSUFDQSxDQUVELEdBQUcsRUFBRSxRQUFXLG1CQUFvQixHQUFRLElBQzNDLG1CQUE2QixNQUFULEVBQWdCLEdBQUssR0FHNUMsSUFBVSxNQUFMLEVBQ0osTUFBTyxFQUlSLElBQUssTUFBTSxRQUFTLElBQVMsRUFBRSxTQUFXLEdBQU8sY0FBZSxHQUcvRCxHQUFPLEtBQU0sRUFBRyxXQUNmLEVBQUssS0FBSyxLQUFNLEtBQUssYUFPdEIsS0FBTSxJQUFVLEdBQ2YsR0FBYSxFQUFRLEVBQUcsR0FBVSxFQUFhLEVBS2pELE9BQU8sR0FBRSxLQUFNLE1BR2hCLEdBQU8sR0FBRyxRQUNULFVBQVcsV0FDVixNQUFPLElBQU8sTUFBTyxLQUFLLG1CQUUzQixlQUFnQixXQUNmLE1BQU8sTUFBSyxJQUFLLFdBR2hCLEdBQUksR0FBVyxHQUFPLEtBQU0sS0FBTSxXQUNsQyxPQUFPLEdBQVcsR0FBTyxVQUFXLEdBQWEsT0FFakQsT0FBUSxXQUNSLEdBQUksR0FBTyxLQUFLLElBR2hCLE9BQU8sTUFBSyxPQUFTLEdBQVEsTUFBTyxHQUFJLGNBQ3ZDLEdBQWEsS0FBTSxLQUFLLFlBQWUsR0FBZ0IsS0FBTSxLQUMzRCxLQUFLLFVBQVksR0FBZSxLQUFNLE1BRXpDLElBQUssU0FBVSxFQUFHLEdBQ2xCLEdBQUksR0FBTSxHQUFRLE1BQU8sS0FFekIsT0FBWSxPQUFQLEVBQ0csS0FHSCxNQUFNLFFBQVMsR0FDWixHQUFPLElBQUssRUFBSyxTQUFVLEdBQ2pDLE9BQVMsS0FBTSxFQUFLLEtBQU0sTUFBTyxFQUFJLFFBQVMsR0FBTyxZQUk5QyxLQUFNLEVBQUssS0FBTSxNQUFPLEVBQUksUUFBUyxHQUFPLFdBQ2xELFFBS04sSUFDQyxJQUFNLE9BQ04sR0FBUSxPQUNSLEdBQWEsZ0JBQ2IsR0FBVyw2QkFHWCxHQUFpQiw0REFDakIsR0FBYSxpQkFDYixHQUFZLFFBV1osTUFPQSxNQUdBLEdBQVcsS0FBSyxPQUFRLEtBR3hCLEdBQWUsR0FBUyxjQUFlLElBQ3ZDLElBQWEsS0FBTyxHQUFTLEtBZ1A5QixHQUFPLFFBR04sT0FBUSxFQUdSLGdCQUNBLFFBRUEsY0FDQyxJQUFLLEdBQVMsS0FDZCxLQUFNLE1BQ04sUUFBUyxHQUFlLEtBQU0sR0FBUyxVQUN2QyxRQUFRLEVBQ1IsYUFBYSxFQUNiLE9BQU8sRUFDUCxZQUFhLG1EQWNiLFNBQ0MsSUFBSyxHQUNMLEtBQU0sYUFDTixLQUFNLFlBQ04sSUFBSyw0QkFDTCxLQUFNLHFDQUdQLFVBQ0MsSUFBSyxVQUNMLEtBQU0sU0FDTixLQUFNLFlBR1AsZ0JBQ0MsSUFBSyxjQUNMLEtBQU0sZUFDTixLQUFNLGdCQUtQLFlBR0MsU0FBVSxPQUdWLGFBQWEsRUFHYixZQUFhLEtBQUssTUFHbEIsV0FBWSxHQUFPLFVBT3BCLGFBQ0MsS0FBSyxFQUNMLFNBQVMsSUFPWCxVQUFXLFNBQVUsRUFBUSxHQUM1QixNQUFPLEdBR04sR0FBWSxHQUFZLEVBQVEsR0FBTyxjQUFnQixHQUd2RCxHQUFZLEdBQU8sYUFBYyxJQUduQyxjQUFlLEdBQTZCLElBQzVDLGNBQWUsR0FBNkIsSUFHNUMsS0FBTSxTQUFVLEVBQUssR0FxVXBCLFFBQVMsR0FBTSxFQUFRLEVBQWtCLEVBQVcsR0FDbkQsR0FBSSxHQUFXLEVBQVMsRUFBTyxFQUFVLEVBQ3hDLEVBQWEsQ0FHVCxLQUlMLEdBQVksRUFHUCxHQUNKLEVBQU8sYUFBYyxHQUt0QixNQUFZLEdBR1osRUFBd0IsR0FBVyxHQUduQyxFQUFNLFdBQWEsRUFBUyxFQUFJLEVBQUksRUFHcEMsRUFBWSxHQUFVLEtBQU8sRUFBUyxLQUFrQixNQUFYLEVBR3hDLElBQ0osRUFBVyxHQUFxQixFQUFHLEVBQU8sSUFJM0MsRUFBVyxHQUFhLEVBQUcsRUFBVSxFQUFPLEdBR3ZDLEdBR0MsRUFBRSxhQUNOLEVBQVcsRUFBTSxrQkFBbUIsaUJBQy9CLElBQ0osR0FBTyxhQUFjLEdBQWEsSUFFbkMsRUFBVyxFQUFNLGtCQUFtQixXQUVuQyxHQUFPLEtBQU0sR0FBYSxJQUtaLE1BQVgsR0FBNkIsU0FBWCxFQUFFLEtBQ3hCLEVBQWEsWUFHUyxNQUFYLEVBQ1gsRUFBYSxlQUliLEVBQWEsRUFBUyxNQUN0QixFQUFVLEVBQVMsS0FDbkIsRUFBUSxFQUFTLE1BQ2pCLEdBQWEsS0FLZCxFQUFRLEdBQ0gsR0FBVyxJQUNmLEVBQWEsUUFDUixFQUFTLElBQ2IsRUFBUyxLQU1aLEVBQU0sT0FBUyxFQUNmLEVBQU0sWUFBZSxHQUFvQixHQUFlLEdBR25ELEVBQ0osRUFBUyxZQUFhLEdBQW1CLEVBQVMsRUFBWSxJQUU5RCxFQUFTLFdBQVksR0FBbUIsRUFBTyxFQUFZLElBSTVELEVBQU0sV0FBWSxHQUNsQixNQUFhLEdBRVIsR0FDSixFQUFtQixRQUFTLEVBQVksY0FBZ0IsYUFDckQsRUFBTyxFQUFHLEVBQVksRUFBVSxJQUlwQyxFQUFpQixTQUFVLEdBQW1CLEVBQU8sSUFFaEQsSUFDSixFQUFtQixRQUFTLGdCQUFrQixFQUFPLE1BRzNDLEdBQU8sUUFDaEIsR0FBTyxNQUFNLFFBQVMsY0E3YUwsZ0JBQVIsS0FDWCxFQUFVLEVBQ1YsTUFBTSxJQUlQLEVBQVUsS0FFVixJQUFJLEdBR0gsRUFHQSxFQUNBLEVBR0EsRUFHQSxFQUdBLEVBR0EsRUFHQSxFQUdBLEVBR0EsRUFBSSxHQUFPLGFBQWUsR0FHMUIsRUFBa0IsRUFBRSxTQUFXLEVBRy9CLEVBQXFCLEVBQUUsVUFDcEIsRUFBZ0IsVUFBWSxFQUFnQixRQUM3QyxHQUFRLEdBQ1IsR0FBTyxNQUdULEVBQVcsR0FBTyxXQUNsQixFQUFtQixHQUFPLFVBQVcsZUFHckMsRUFBYSxFQUFFLGVBR2YsS0FDQSxLQUdBLEVBQVcsV0FHWCxHQUNDLFdBQVksRUFHWixrQkFBbUIsU0FBVSxHQUM1QixHQUFJLEVBQ0osSUFBSyxFQUFZLENBQ2hCLElBQU0sRUFFTCxJQURBLEtBQ1UsRUFBUSxHQUFTLEtBQU0sSUFDaEMsRUFBaUIsRUFBTyxHQUFJLGNBQWdCLE1BQ3pDLEVBQWlCLEVBQU8sR0FBSSxjQUFnQixVQUM1QyxPQUFRLEVBQU8sR0FHcEIsR0FBUSxFQUFpQixFQUFJLGNBQWdCLEtBRTlDLE1BQWdCLE9BQVQsRUFBZ0IsS0FBTyxFQUFNLEtBQU0sT0FJM0Msc0JBQXVCLFdBQ3RCLE1BQU8sR0FBWSxFQUF3QixNQUk1QyxpQkFBa0IsU0FBVSxFQUFNLEdBTWpDLE1BTGtCLE9BQWIsSUFDSixFQUFPLEVBQXFCLEVBQUssZUFDaEMsRUFBcUIsRUFBSyxnQkFBbUIsRUFDOUMsRUFBZ0IsR0FBUyxHQUVuQixNQUlSLGlCQUFrQixTQUFVLEdBSTNCLE1BSGtCLE9BQWIsSUFDSixFQUFFLFNBQVcsR0FFUCxNQUlSLFdBQVksU0FBVSxHQUNyQixHQUFJLEVBQ0osSUFBSyxFQUNKLEdBQUssRUFHSixFQUFNLE9BQVEsRUFBSyxFQUFNLGFBSXpCLEtBQU0sSUFBUSxHQUNiLEVBQVksSUFBVyxFQUFZLEdBQVEsRUFBSyxHQUluRCxPQUFPLE9BSVIsTUFBTyxTQUFVLEdBQ2hCLEdBQUksR0FBWSxHQUFjLENBSzlCLE9BSkssSUFDSixFQUFVLE1BQU8sR0FFbEIsRUFBTSxFQUFHLEdBQ0YsTUFvQlYsSUFmQSxFQUFTLFFBQVMsR0FLbEIsRUFBRSxNQUFVLEdBQU8sRUFBRSxLQUFPLEdBQVMsTUFBUyxJQUM1QyxRQUFTLEdBQVcsR0FBUyxTQUFXLE1BRzFDLEVBQUUsS0FBTyxFQUFRLFFBQVUsRUFBUSxNQUFRLEVBQUUsUUFBVSxFQUFFLEtBR3pELEVBQUUsV0FBYyxFQUFFLFVBQVksS0FBTSxjQUFjLE1BQU8sTUFBcUIsSUFHeEQsTUFBakIsRUFBRSxZQUFzQixDQUM1QixFQUFZLEdBQVMsY0FBZSxJQUtwQyxLQUNDLEVBQVUsS0FBTyxFQUFFLElBSW5CLEVBQVUsS0FBTyxFQUFVLEtBQzNCLEVBQUUsWUFBYyxHQUFhLFNBQVcsS0FBTyxHQUFhLE1BQzNELEVBQVUsU0FBVyxLQUFPLEVBQVUsS0FDdEMsTUFBUSxHQUlULEVBQUUsYUFBYyxHQWFsQixHQVJLLEVBQUUsTUFBUSxFQUFFLGFBQWlDLGdCQUFYLEdBQUUsT0FDeEMsRUFBRSxLQUFPLEdBQU8sTUFBTyxFQUFFLEtBQU0sRUFBRSxjQUlsQyxHQUErQixHQUFZLEVBQUcsRUFBUyxHQUdsRCxFQUNKLE1BQU8sRUFLUixHQUFjLEdBQU8sT0FBUyxFQUFFLE9BRzNCLEdBQW1DLEdBQXBCLEdBQU8sVUFDMUIsR0FBTyxNQUFNLFFBQVMsYUFJdkIsRUFBRSxLQUFPLEVBQUUsS0FBSyxjQUdoQixFQUFFLFlBQWMsR0FBVyxLQUFNLEVBQUUsTUFLbkMsRUFBVyxFQUFFLElBQUksUUFBUyxHQUFPLElBRzNCLEVBQUUsV0F1QkksRUFBRSxNQUFRLEVBQUUsYUFDb0QsS0FBekUsRUFBRSxhQUFlLElBQUssUUFBUyx1Q0FDakMsRUFBRSxLQUFPLEVBQUUsS0FBSyxRQUFTLEdBQUssT0F0QjlCLEVBQVcsRUFBRSxJQUFJLE1BQU8sRUFBUyxRQUc1QixFQUFFLE9BQVUsRUFBRSxhQUFpQyxnQkFBWCxHQUFFLFFBQzFDLElBQWMsR0FBTyxLQUFNLEdBQWEsSUFBTSxLQUFRLEVBQUUsV0FHakQsR0FBRSxPQUlPLElBQVosRUFBRSxRQUNOLEVBQVcsRUFBUyxRQUFTLEdBQVksTUFDekMsR0FBYSxHQUFPLEtBQU0sR0FBYSxJQUFNLEtBQVEsS0FBUyxLQUFZLEdBSTNFLEVBQUUsSUFBTSxFQUFXLEdBU2YsRUFBRSxhQUNELEdBQU8sYUFBYyxJQUN6QixFQUFNLGlCQUFrQixvQkFBcUIsR0FBTyxhQUFjLElBRTlELEdBQU8sS0FBTSxJQUNqQixFQUFNLGlCQUFrQixnQkFBaUIsR0FBTyxLQUFNLE1BS25ELEVBQUUsTUFBUSxFQUFFLGFBQWdDLElBQWxCLEVBQUUsYUFBeUIsRUFBUSxjQUNqRSxFQUFNLGlCQUFrQixlQUFnQixFQUFFLGFBSTNDLEVBQU0saUJBQ0wsU0FDQSxFQUFFLFVBQVcsSUFBTyxFQUFFLFFBQVMsRUFBRSxVQUFXLElBQzNDLEVBQUUsUUFBUyxFQUFFLFVBQVcsS0FDQSxNQUFyQixFQUFFLFVBQVcsR0FBYyxLQUFPLEdBQVcsV0FBYSxJQUM3RCxFQUFFLFFBQVMsS0FJYixLQUFNLElBQUssR0FBRSxRQUNaLEVBQU0saUJBQWtCLEVBQUcsRUFBRSxRQUFTLEdBSXZDLElBQUssRUFBRSxjQUMrQyxJQUFuRCxFQUFFLFdBQVcsS0FBTSxFQUFpQixFQUFPLElBQWlCLEdBRzlELE1BQU8sR0FBTSxPQWVkLElBWEEsRUFBVyxRQUdYLEVBQWlCLElBQUssRUFBRSxVQUN4QixFQUFNLEtBQU0sRUFBRSxTQUNkLEVBQU0sS0FBTSxFQUFFLE9BR2QsRUFBWSxHQUErQixHQUFZLEVBQUcsRUFBUyxHQUs1RCxDQVNOLEdBUkEsRUFBTSxXQUFhLEVBR2QsR0FDSixFQUFtQixRQUFTLFlBQWMsRUFBTyxJQUk3QyxFQUNKLE1BQU8sRUFJSCxHQUFFLE9BQVMsRUFBRSxRQUFVLElBQzNCLEVBQWUsRUFBTyxXQUFZLFdBQ2pDLEVBQU0sTUFBTyxZQUNYLEVBQUUsU0FHTixLQUNDLEdBQVksRUFDWixFQUFVLEtBQU0sRUFBZ0IsR0FDL0IsTUFBUSxHQUdULEdBQUssRUFDSixLQUFNLEVBSVAsSUFBTyxFQUFHLFFBaENYLElBQU8sRUFBRyxlQXFKWCxPQUFPLElBR1IsUUFBUyxTQUFVLEVBQUssRUFBTSxHQUM3QixNQUFPLElBQU8sSUFBSyxFQUFLLEVBQU0sRUFBVSxTQUd6QyxVQUFXLFNBQVUsRUFBSyxHQUN6QixNQUFPLElBQU8sSUFBSyxNQUFLLEdBQVcsRUFBVSxhQUkvQyxHQUFPLE1BQVEsTUFBTyxRQUFVLFNBQVUsRUFBRyxHQUM1QyxHQUFRLEdBQVcsU0FBVSxFQUFLLEVBQU0sRUFBVSxHQVVqRCxNQVBLLElBQVksS0FDaEIsRUFBTyxHQUFRLEVBQ2YsRUFBVyxFQUNYLE1BQU8sSUFJRCxHQUFPLEtBQU0sR0FBTyxRQUMxQixJQUFLLEVBQ0wsS0FBTSxFQUNOLFNBQVUsRUFDVixLQUFNLEVBQ04sUUFBUyxHQUNQLEdBQU8sY0FBZSxJQUFTLE9BS3BDLEdBQU8sU0FBVyxTQUFVLEVBQUssR0FDaEMsTUFBTyxJQUFPLE1BQ2IsSUFBSyxFQUdMLEtBQU0sTUFDTixTQUFVLFNBQ1YsT0FBTyxFQUNQLE9BQU8sRUFDUCxRQUFRLEVBS1IsWUFDQyxjQUFlLGNBRWhCLFdBQVksU0FBVSxHQUNyQixHQUFPLFdBQVksRUFBVSxPQU1oQyxHQUFPLEdBQUcsUUFDVCxRQUFTLFNBQVUsR0FDbEIsR0FBSSxFQXlCSixPQXZCSyxNQUFNLEtBQ0wsR0FBWSxLQUNoQixFQUFPLEVBQUssS0FBTSxLQUFNLEtBSXpCLEVBQU8sR0FBUSxFQUFNLEtBQU0sR0FBSSxlQUFnQixHQUFJLEdBQUksT0FBTyxHQUV6RCxLQUFNLEdBQUksWUFDZCxFQUFLLGFBQWMsS0FBTSxJQUcxQixFQUFLLElBQUssV0FHVCxJQUZBLEdBQUksR0FBTyxLQUVILEVBQUssbUJBQ1osRUFBTyxFQUFLLGlCQUdiLE9BQU8sS0FDSixPQUFRLE9BR04sTUFHUixVQUFXLFNBQVUsR0FDcEIsTUFBSyxJQUFZLEdBQ1QsS0FBSyxLQUFNLFNBQVUsR0FDM0IsR0FBUSxNQUFPLFVBQVcsRUFBSyxLQUFNLEtBQU0sTUFJdEMsS0FBSyxLQUFNLFdBQ2pCLEdBQUksR0FBTyxHQUFRLE1BQ2xCLEVBQVcsRUFBSyxVQUVaLEdBQVMsT0FDYixFQUFTLFFBQVMsR0FHbEIsRUFBSyxPQUFRLE1BS2hCLEtBQU0sU0FBVSxHQUNmLEdBQUksR0FBaUIsR0FBWSxFQUVqQyxPQUFPLE1BQUssS0FBTSxTQUFVLEdBQzNCLEdBQVEsTUFBTyxRQUFTLEVBQWlCLEVBQUssS0FBTSxLQUFNLEdBQU0sTUFJbEUsT0FBUSxTQUFVLEdBSWpCLE1BSEEsTUFBSyxPQUFRLEdBQVcsSUFBSyxRQUFTLEtBQU0sV0FDM0MsR0FBUSxNQUFPLFlBQWEsS0FBSyxjQUUzQixRQUtULEdBQU8sS0FBSyxRQUFRLE9BQVMsU0FBVSxHQUN0QyxPQUFRLEdBQU8sS0FBSyxRQUFRLFFBQVMsSUFFdEMsR0FBTyxLQUFLLFFBQVEsUUFBVSxTQUFVLEdBQ3ZDLFNBQVcsRUFBSyxhQUFlLEVBQUssY0FBZ0IsRUFBSyxpQkFBaUIsU0FNM0UsR0FBTyxhQUFhLElBQU0sV0FDekIsSUFDQyxNQUFPLElBQUksR0FBTyxlQUNqQixNQUFRLEtBR1gsSUFBSSxLQUdGLEVBQUcsSUFJSCxLQUFNLEtBRVAsR0FBZSxHQUFPLGFBQWEsS0FFcEMsSUFBUSxPQUFTLElBQWtCLG1CQUFxQixJQUN4RCxHQUFRLEtBQU8sS0FBaUIsR0FFaEMsR0FBTyxjQUFlLFNBQVUsR0FDL0IsR0FBSSxHQUFVLENBR2QsSUFBSyxHQUFRLE1BQVEsS0FBaUIsRUFBUSxZQUM3QyxPQUNDLEtBQU0sU0FBVSxFQUFTLEdBQ3hCLEdBQUksR0FDSCxFQUFNLEVBQVEsS0FXZixJQVRBLEVBQUksS0FDSCxFQUFRLEtBQ1IsRUFBUSxJQUNSLEVBQVEsTUFDUixFQUFRLFNBQ1IsRUFBUSxVQUlKLEVBQVEsVUFDWixJQUFNLElBQUssR0FBUSxVQUNsQixFQUFLLEdBQU0sRUFBUSxVQUFXLEVBSzNCLEdBQVEsVUFBWSxFQUFJLGtCQUM1QixFQUFJLGlCQUFrQixFQUFRLFVBUXpCLEVBQVEsYUFBZ0IsRUFBUyxzQkFDdEMsRUFBUyxvQkFBdUIsaUJBSWpDLEtBQU0sSUFBSyxHQUNWLEVBQUksaUJBQWtCLEVBQUcsRUFBUyxHQUluQyxHQUFXLFNBQVUsR0FDcEIsTUFBTyxZQUNELElBQ0osRUFBVyxFQUFnQixFQUFJLE9BQzlCLEVBQUksUUFBVSxFQUFJLFFBQVUsRUFBSSxVQUMvQixFQUFJLG1CQUFxQixLQUViLFVBQVQsRUFDSixFQUFJLFFBQ2dCLFVBQVQsRUFLZ0IsZ0JBQWYsR0FBSSxPQUNmLEVBQVUsRUFBRyxTQUViLEVBR0MsRUFBSSxPQUNKLEVBQUksWUFJTixFQUNDLEdBQWtCLEVBQUksU0FBWSxFQUFJLE9BQ3RDLEVBQUksV0FLK0IsVUFBakMsRUFBSSxjQUFnQixTQUNNLGdCQUFyQixHQUFJLGNBQ1IsT0FBUSxFQUFJLFdBQ1osS0FBTSxFQUFJLGNBQ2IsRUFBSSw0QkFRVCxFQUFJLE9BQVMsSUFDYixFQUFnQixFQUFJLFFBQVUsRUFBSSxVQUFZLEVBQVUsYUFLbkMsS0FBaEIsRUFBSSxRQUNSLEVBQUksUUFBVSxFQUVkLEVBQUksbUJBQXFCLFdBR0EsSUFBbkIsRUFBSSxZQU1SLEVBQU8sV0FBWSxXQUNiLEdBQ0osT0FRTCxFQUFXLEVBQVUsUUFFckIsS0FHQyxFQUFJLEtBQU0sRUFBUSxZQUFjLEVBQVEsTUFBUSxNQUMvQyxNQUFRLEdBR1QsR0FBSyxFQUNKLEtBQU0sS0FLVCxNQUFPLFdBQ0QsR0FDSixRQVdMLEdBQU8sY0FBZSxTQUFVLEdBQzFCLEVBQUUsY0FDTixFQUFFLFNBQVMsUUFBUyxLQUt0QixHQUFPLFdBQ04sU0FDQyxPQUFRLDZGQUdULFVBQ0MsT0FBUSwyQkFFVCxZQUNDLGNBQWUsU0FBVSxHQUV4QixNQURBLElBQU8sV0FBWSxHQUNaLE1BTVYsR0FBTyxjQUFlLFNBQVUsU0FBVSxPQUN4QixLQUFaLEVBQUUsUUFDTixFQUFFLE9BQVEsR0FFTixFQUFFLGNBQ04sRUFBRSxLQUFPLFNBS1gsR0FBTyxjQUFlLFNBQVUsU0FBVSxHQUd6QyxHQUFLLEVBQUUsYUFBZSxFQUFFLFlBQWMsQ0FDckMsR0FBSSxHQUFRLENBQ1osUUFDQyxLQUFNLFNBQVUsRUFBRyxHQUNsQixFQUFTLEdBQVEsWUFDZixLQUFNLEVBQUUsaUJBQ1IsTUFBUSxRQUFTLEVBQUUsY0FBZSxJQUFLLEVBQUUsTUFDekMsR0FBSSxhQUFjLEVBQVcsU0FBVSxHQUN2QyxFQUFPLFNBQ1AsRUFBVyxLQUNOLEdBQ0osRUFBdUIsVUFBYixFQUFJLEtBQW1CLElBQU0sSUFBSyxFQUFJLFFBS25ELEdBQVMsS0FBSyxZQUFhLEVBQVEsS0FFcEMsTUFBTyxXQUNELEdBQ0osUUFVTCxJQUFJLE9BQ0gsR0FBUyxtQkFHVixJQUFPLFdBQ04sTUFBTyxXQUNQLGNBQWUsV0FDZCxHQUFJLEdBQVcsR0FBYSxPQUFXLEdBQU8sUUFBVSxJQUFRLElBRWhFLE9BREEsTUFBTSxJQUFhLEVBQ1osS0FLVCxHQUFPLGNBQWUsYUFBYyxTQUFVLEVBQUcsRUFBa0IsR0FFbEUsR0FBSSxHQUFjLEVBQWEsRUFDOUIsR0FBdUIsSUFBWixFQUFFLFFBQXFCLEdBQU8sS0FBTSxFQUFFLEtBQ2hELE1BQ2tCLGdCQUFYLEdBQUUsTUFFNkMsS0FEbkQsRUFBRSxhQUFlLElBQ2pCLFFBQVMsc0NBQ1gsR0FBTyxLQUFNLEVBQUUsT0FBVSxPQUk1QixJQUFLLEdBQWlDLFVBQXJCLEVBQUUsVUFBVyxHQThEN0IsTUEzREEsR0FBZSxFQUFFLGNBQWdCLEdBQVksRUFBRSxlQUM5QyxFQUFFLGdCQUNGLEVBQUUsY0FHRSxFQUNKLEVBQUcsR0FBYSxFQUFHLEdBQVcsUUFBUyxHQUFRLEtBQU8sSUFDL0IsSUFBWixFQUFFLFFBQ2IsRUFBRSxNQUFTLEdBQU8sS0FBTSxFQUFFLEtBQVEsSUFBTSxLQUFRLEVBQUUsTUFBUSxJQUFNLEdBSWpFLEVBQUUsV0FBWSxlQUFrQixXQUkvQixNQUhNLElBQ0wsR0FBTyxNQUFPLEVBQWUsbUJBRXZCLEVBQW1CLElBSTNCLEVBQUUsVUFBVyxHQUFNLE9BR25CLEVBQWMsRUFBUSxHQUN0QixFQUFRLEdBQWlCLFdBQ3hCLEVBQW9CLFdBSXJCLEVBQU0sT0FBUSxlQUdRLEtBQWhCLEVBQ0osR0FBUSxHQUFTLFdBQVksR0FJN0IsRUFBUSxHQUFpQixFQUlyQixFQUFHLEtBR1AsRUFBRSxjQUFnQixFQUFpQixjQUduQyxHQUFhLEtBQU0sSUFJZixHQUFxQixHQUFZLElBQ3JDLEVBQWEsRUFBbUIsSUFHakMsRUFBb0IsTUFBYyxLQUk1QixXQVlULEdBQVEsbUJBQXFCLFdBQzVCLEdBQUksR0FBTyxHQUFTLGVBQWUsbUJBQW9CLElBQUssSUFFNUQsT0FEQSxHQUFLLFVBQVksNkJBQ2lCLElBQTNCLEVBQUssV0FBVyxVQVF4QixHQUFPLFVBQVksU0FBVSxFQUFNLEVBQVMsR0FDM0MsR0FBcUIsZ0JBQVQsR0FDWCxRQUV1QixrQkFBWixLQUNYLEVBQWMsRUFDZCxHQUFVLEVBR1gsSUFBSSxHQUFNLEVBQVEsQ0F3QmxCLE9BdEJNLEtBSUEsR0FBUSxvQkFDWixFQUFVLEdBQVMsZUFBZSxtQkFBb0IsSUFLdEQsRUFBTyxFQUFRLGNBQWUsUUFDOUIsRUFBSyxLQUFPLEdBQVMsU0FBUyxLQUM5QixFQUFRLEtBQUssWUFBYSxJQUUxQixFQUFVLElBSVosRUFBUyxHQUFXLEtBQU0sR0FDMUIsR0FBVyxNQUdOLEdBQ0ssRUFBUSxjQUFlLEVBQVEsTUFHekMsRUFBUyxHQUFpQixHQUFRLEVBQVMsR0FFdEMsR0FBVyxFQUFRLFFBQ3ZCLEdBQVEsR0FBVSxTQUdaLEdBQU8sU0FBVyxFQUFPLGNBT2pDLEdBQU8sR0FBRyxLQUFPLFNBQVUsRUFBSyxFQUFRLEdBQ3ZDLEdBQUksR0FBVSxFQUFNLEVBQ25CLEVBQU8sS0FDUCxFQUFNLEVBQUksUUFBUyxJQXNEcEIsT0FwREssSUFBTyxJQUNYLEVBQVcsRUFBa0IsRUFBSSxNQUFPLElBQ3hDLEVBQU0sRUFBSSxNQUFPLEVBQUcsSUFJaEIsR0FBWSxJQUdoQixFQUFXLEVBQ1gsTUFBUyxJQUdFLEdBQTRCLGdCQUFYLEtBQzVCLEVBQU8sUUFJSCxFQUFLLE9BQVMsR0FDbEIsR0FBTyxNQUNOLElBQUssRUFLTCxLQUFNLEdBQVEsTUFDZCxTQUFVLE9BQ1YsS0FBTSxJQUNILEtBQU0sU0FBVSxHQUduQixFQUFXLFVBRVgsRUFBSyxLQUFNLEVBSVYsR0FBUSxTQUFVLE9BQVEsR0FBTyxVQUFXLElBQWlCLEtBQU0sR0FHbkUsS0FLRSxPQUFRLEdBQVksU0FBVSxFQUFPLEdBQ3hDLEVBQUssS0FBTSxXQUNWLEVBQVMsTUFBTyxLQUFNLElBQWMsRUFBTSxhQUFjLEVBQVEsUUFLNUQsTUFPUixHQUFPLE1BQ04sWUFDQSxXQUNBLGVBQ0EsWUFDQSxjQUNBLFlBQ0UsU0FBVSxFQUFHLEdBQ2YsR0FBTyxHQUFJLEdBQVMsU0FBVSxHQUM3QixNQUFPLE1BQUssR0FBSSxFQUFNLE1BT3hCLEdBQU8sS0FBSyxRQUFRLFNBQVcsU0FBVSxHQUN4QyxNQUFPLElBQU8sS0FBTSxHQUFPLE9BQVEsU0FBVSxHQUM1QyxNQUFPLEtBQVMsRUFBRyxPQUNoQixRQU1MLEdBQU8sUUFDTixVQUFXLFNBQVUsRUFBTSxFQUFTLEdBQ25DLEdBQUksR0FBYSxFQUFTLEVBQVcsRUFBUSxFQUFXLEVBQVksRUFDbkUsRUFBVyxHQUFPLElBQUssRUFBTSxZQUM3QixFQUFVLEdBQVEsR0FDbEIsSUFHaUIsWUFBYixJQUNKLEVBQUssTUFBTSxTQUFXLFlBR3ZCLEVBQVksRUFBUSxTQUNwQixFQUFZLEdBQU8sSUFBSyxFQUFNLE9BQzlCLEVBQWEsR0FBTyxJQUFLLEVBQU0sUUFDL0IsR0FBbUMsYUFBYixHQUF3QyxVQUFiLEtBQzlDLEVBQVksR0FBYSxRQUFTLFNBQVksRUFJNUMsR0FDSixFQUFjLEVBQVEsV0FDdEIsRUFBUyxFQUFZLElBQ3JCLEVBQVUsRUFBWSxPQUd0QixFQUFTLFdBQVksSUFBZSxFQUNwQyxFQUFVLFdBQVksSUFBZ0IsR0FHbEMsR0FBWSxLQUdoQixFQUFVLEVBQVEsS0FBTSxFQUFNLEVBQUcsR0FBTyxVQUFZLEtBR2pDLE1BQWYsRUFBUSxNQUNaLEVBQU0sSUFBUSxFQUFRLElBQU0sRUFBVSxJQUFRLEdBRTFCLE1BQWhCLEVBQVEsT0FDWixFQUFNLEtBQVMsRUFBUSxLQUFPLEVBQVUsS0FBUyxHQUc3QyxTQUFXLEdBQ2YsRUFBUSxNQUFNLEtBQU0sRUFBTSxHQUcxQixFQUFRLElBQUssS0FLaEIsR0FBTyxHQUFHLFFBR1QsT0FBUSxTQUFVLEdBR2pCLEdBQUssVUFBVSxPQUNkLFdBQW1CLEtBQVosRUFDTixLQUNBLEtBQUssS0FBTSxTQUFVLEdBQ3BCLEdBQU8sT0FBTyxVQUFXLEtBQU0sRUFBUyxJQUkzQyxJQUFJLEdBQU0sRUFDVCxFQUFPLEtBQU0sRUFFZCxJQUFNLEVBUU4sTUFBTSxHQUFLLGlCQUFpQixRQUs1QixFQUFPLEVBQUssd0JBQ1osRUFBTSxFQUFLLGNBQWMsYUFFeEIsSUFBSyxFQUFLLElBQU0sRUFBSSxZQUNwQixLQUFNLEVBQUssS0FBTyxFQUFJLGVBUmIsSUFBSyxFQUFHLEtBQU0sSUFjekIsU0FBVSxXQUNULEdBQU0sS0FBTSxHQUFaLENBSUEsR0FBSSxHQUFjLEVBQVEsRUFDekIsRUFBTyxLQUFNLEdBQ2IsR0FBaUIsSUFBSyxFQUFHLEtBQU0sRUFHaEMsSUFBd0MsVUFBbkMsR0FBTyxJQUFLLEVBQU0sWUFHdEIsRUFBUyxFQUFLLDRCQUVSLENBT04sSUFOQSxFQUFTLEtBQUssU0FJZCxFQUFNLEVBQUssY0FDWCxFQUFlLEVBQUssY0FBZ0IsRUFBSSxnQkFDaEMsSUFDTCxJQUFpQixFQUFJLE1BQVEsSUFBaUIsRUFBSSxrQkFDVCxXQUEzQyxHQUFPLElBQUssRUFBYyxhQUUxQixFQUFlLEVBQWEsVUFFeEIsSUFBZ0IsSUFBaUIsR0FBa0MsSUFBMUIsRUFBYSxXQUcxRCxFQUFlLEdBQVEsR0FBZSxTQUN0QyxFQUFhLEtBQU8sR0FBTyxJQUFLLEVBQWMsa0JBQWtCLEdBQ2hFLEVBQWEsTUFBUSxHQUFPLElBQUssRUFBYyxtQkFBbUIsSUFLcEUsT0FDQyxJQUFLLEVBQU8sSUFBTSxFQUFhLElBQU0sR0FBTyxJQUFLLEVBQU0sYUFBYSxHQUNwRSxLQUFNLEVBQU8sS0FBTyxFQUFhLEtBQU8sR0FBTyxJQUFLLEVBQU0sY0FBYyxNQWMxRSxhQUFjLFdBQ2IsTUFBTyxNQUFLLElBQUssV0FHaEIsSUFGQSxHQUFJLEdBQWUsS0FBSyxhQUVoQixHQUEyRCxXQUEzQyxHQUFPLElBQUssRUFBYyxhQUNqRCxFQUFlLEVBQWEsWUFHN0IsT0FBTyxJQUFnQixRQU0xQixHQUFPLE1BQVEsV0FBWSxjQUFlLFVBQVcsZUFBaUIsU0FBVSxFQUFRLEdBQ3ZGLEdBQUksR0FBTSxnQkFBa0IsQ0FFNUIsSUFBTyxHQUFJLEdBQVcsU0FBVSxHQUMvQixNQUFPLElBQVEsS0FBTSxTQUFVLEVBQU0sRUFBUSxHQUc1QyxHQUFJLEVBT0osSUFOSyxHQUFVLEdBQ2QsRUFBTSxFQUN1QixJQUFsQixFQUFLLFdBQ2hCLEVBQU0sRUFBSyxpQkFHQyxLQUFSLEVBQ0osTUFBTyxHQUFNLEVBQUssR0FBUyxFQUFNLEVBRzdCLEdBQ0osRUFBSSxTQUNGLEVBQVksRUFBSSxZQUFWLEVBQ1AsRUFBTSxFQUFNLEVBQUksYUFJakIsRUFBTSxHQUFXLEdBRWhCLEVBQVEsRUFBSyxVQUFVLFdBVTVCLEdBQU8sTUFBUSxNQUFPLFFBQVUsU0FBVSxFQUFHLEdBQzVDLEdBQU8sU0FBVSxHQUFTLEVBQWMsR0FBUSxjQUMvQyxTQUFVLEVBQU0sR0FDZixHQUFLLEVBSUosTUFIQSxHQUFXLEVBQVEsRUFBTSxHQUdsQixHQUFVLEtBQU0sR0FDdEIsR0FBUSxHQUFPLFdBQVksR0FBUyxLQUNwQyxNQVFMLEdBQU8sTUFBUSxPQUFRLFNBQVUsTUFBTyxTQUFXLFNBQVUsRUFBTSxHQUNsRSxHQUFPLE1BQVEsUUFBUyxRQUFVLEVBQU0sUUFBUyxFQUFNLEdBQUksUUFBVSxHQUNwRSxTQUFVLEVBQWMsR0FHeEIsR0FBTyxHQUFJLEdBQWEsU0FBVSxFQUFRLEdBQ3pDLEdBQUksR0FBWSxVQUFVLFNBQVksR0FBa0MsaUJBQVgsSUFDNUQsRUFBUSxLQUE2QixJQUFYLElBQTZCLElBQVYsRUFBaUIsU0FBVyxTQUUxRSxPQUFPLElBQVEsS0FBTSxTQUFVLEVBQU0sRUFBTSxHQUMxQyxHQUFJLEVBRUosT0FBSyxJQUFVLEdBR3lCLElBQWhDLEVBQVMsUUFBUyxTQUN4QixFQUFNLFFBQVUsR0FDaEIsRUFBSyxTQUFTLGdCQUFpQixTQUFXLEdBSXJCLElBQWxCLEVBQUssVUFDVCxFQUFNLEVBQUssZ0JBSUosS0FBSyxJQUNYLEVBQUssS0FBTSxTQUFXLEdBQVEsRUFBSyxTQUFXLEdBQzlDLEVBQUssS0FBTSxTQUFXLEdBQVEsRUFBSyxTQUFXLEdBQzlDLEVBQUssU0FBVyxTQUlELEtBQVYsRUFHTixHQUFPLElBQUssRUFBTSxFQUFNLEdBR3hCLEdBQU8sTUFBTyxFQUFNLEVBQU0sRUFBTyxJQUNoQyxFQUFNLEVBQVksTUFBUyxHQUFXLFFBTTVDLEdBQU8sS0FBTSx3TEFFZ0QsTUFBTyxLQUNuRSxTQUFVLEVBQUcsR0FHYixHQUFPLEdBQUksR0FBUyxTQUFVLEVBQU0sR0FDbkMsTUFBTyxXQUFVLE9BQVMsRUFDekIsS0FBSyxHQUFJLEVBQU0sS0FBTSxFQUFNLEdBQzNCLEtBQUssUUFBUyxNQUlqQixHQUFPLEdBQUcsUUFDVCxNQUFPLFNBQVUsRUFBUSxHQUN4QixNQUFPLE1BQUssV0FBWSxHQUFTLFdBQVksR0FBUyxNQU94RCxHQUFPLEdBQUcsUUFFVCxLQUFNLFNBQVUsRUFBTyxFQUFNLEdBQzVCLE1BQU8sTUFBSyxHQUFJLEVBQU8sS0FBTSxFQUFNLElBRXBDLE9BQVEsU0FBVSxFQUFPLEdBQ3hCLE1BQU8sTUFBSyxJQUFLLEVBQU8sS0FBTSxJQUcvQixTQUFVLFNBQVUsRUFBVSxFQUFPLEVBQU0sR0FDMUMsTUFBTyxNQUFLLEdBQUksRUFBTyxFQUFVLEVBQU0sSUFFeEMsV0FBWSxTQUFVLEVBQVUsRUFBTyxHQUd0QyxNQUE0QixLQUFyQixVQUFVLE9BQ2hCLEtBQUssSUFBSyxFQUFVLE1BQ3BCLEtBQUssSUFBSyxFQUFPLEdBQVksS0FBTSxNQVF0QyxHQUFPLE1BQVEsU0FBVSxFQUFJLEdBQzVCLEdBQUksR0FBSyxFQUFNLENBVWYsSUFSd0IsZ0JBQVosS0FDWCxFQUFNLEVBQUksR0FDVixFQUFVLEVBQ1YsRUFBSyxHQUtBLEdBQVksR0FhbEIsTUFSQSxHQUFPLEdBQU0sS0FBTSxVQUFXLEdBQzlCLEVBQVEsV0FDUCxNQUFPLEdBQUcsTUFBTyxHQUFXLEtBQU0sRUFBSyxPQUFRLEdBQU0sS0FBTSxjQUk1RCxFQUFNLEtBQU8sRUFBRyxLQUFPLEVBQUcsTUFBUSxHQUFPLE9BRWxDLEdBR1IsR0FBTyxVQUFZLFNBQVUsR0FDdkIsRUFDSixHQUFPLFlBRVAsR0FBTyxPQUFPLElBR2hCLEdBQU8sUUFBVSxNQUFNLFFBQ3ZCLEdBQU8sVUFBWSxLQUFLLE1BQ3hCLEdBQU8sU0FBVyxFQUNsQixHQUFPLFdBQWEsR0FDcEIsR0FBTyxTQUFXLEdBQ2xCLEdBQU8sVUFBWSxFQUNuQixHQUFPLEtBQU8sRUFFZCxHQUFPLElBQU0sS0FBSyxJQUVsQixHQUFPLFVBQVksU0FBVSxHQUs1QixHQUFJLEdBQU8sR0FBTyxLQUFNLEVBQ3hCLFFBQWtCLFdBQVQsR0FBOEIsV0FBVCxLQUs1QixNQUFPLEVBQU0sV0FBWSxLQW1CTCxrQkFBWCxTQUF5QixPQUFPLEtBQzNDLE9BQVEsWUFBYyxXQUNyQixNQUFPLEtBT1QsSUFHQyxJQUFVLEVBQU8sT0FHakIsR0FBSyxFQUFPLENBd0JiLE9BdEJBLElBQU8sV0FBYSxTQUFVLEdBUzdCLE1BUkssR0FBTyxJQUFNLEtBQ2pCLEVBQU8sRUFBSSxJQUdQLEdBQVEsRUFBTyxTQUFXLEtBQzlCLEVBQU8sT0FBUyxJQUdWLElBTUYsSUFDTCxFQUFPLE9BQVMsRUFBTyxFQUFJLElBTXJCOzs7Q0M3MVVMLFNBQVUsR0FDWCxHQUFJLEVBU0osSUFSc0Isa0JBQVgsU0FBeUIsT0FBTyxNQUMxQyxPQUFPLEdBQ1AsR0FBMkIsR0FFTCxnQkFBWixXQUNWLE9BQU8sUUFBVSxJQUNqQixHQUEyQixJQUV2QixFQUEwQixDQUM5QixHQUFJLEdBQWEsT0FBTyxRQUNwQixFQUFNLE9BQU8sUUFBVSxHQUMzQixHQUFJLFdBQWEsV0FFaEIsTUFEQSxRQUFPLFFBQVUsRUFDVixLQUdSLFdBQ0QsUUFBUyxLQUdSLElBRkEsR0FBSSxHQUFJLEVBQ0osS0FDRyxFQUFJLFVBQVUsT0FBUSxJQUFLLENBQ2pDLEdBQUksR0FBYSxVQUFXLEVBQzVCLEtBQUssR0FBSSxLQUFPLEdBQ2YsRUFBTyxHQUFPLEVBQVcsR0FHM0IsTUFBTyxHQUdSLFFBQVMsR0FBUSxHQUNoQixNQUFPLEdBQUUsUUFBUSxtQkFBb0Isb0JBR3RDLFFBQVMsR0FBTSxHQUNkLFFBQVMsTUFFVCxRQUFTLEdBQUssRUFBSyxFQUFPLEdBQ3pCLEdBQXdCLG1CQUFiLFVBQVgsQ0FJQSxFQUFhLEdBQ1osS0FBTSxLQUNKLEVBQUksU0FBVSxHQUVpQixnQkFBdkIsR0FBVyxVQUNyQixFQUFXLFFBQVUsR0FBSSxNQUFrQixFQUFiLEdBQUksTUFBa0MsTUFBckIsRUFBVyxVQUkzRCxFQUFXLFFBQVUsRUFBVyxRQUFVLEVBQVcsUUFBUSxjQUFnQixFQUU3RSxLQUNDLEdBQUksR0FBUyxLQUFLLFVBQVUsRUFDeEIsV0FBVSxLQUFLLEtBQ2xCLEVBQVEsR0FFUixNQUFPLElBRVQsRUFBUSxFQUFVLE1BQ2pCLEVBQVUsTUFBTSxFQUFPLEdBQ3ZCLG1CQUFtQixPQUFPLElBQ3hCLFFBQVEsNERBQTZELG9CQUV4RSxFQUFNLG1CQUFtQixPQUFPLElBQzlCLFFBQVEsMkJBQTRCLG9CQUNwQyxRQUFRLFVBQVcsT0FFckIsSUFBSSxHQUF3QixFQUM1QixLQUFLLEdBQUksS0FBaUIsR0FDcEIsRUFBVyxLQUdoQixHQUF5QixLQUFPLEdBQ0UsSUFBOUIsRUFBVyxLQVdmLEdBQXlCLElBQU0sRUFBVyxHQUFlLE1BQU0sS0FBSyxJQUdyRSxPQUFRLFVBQVMsT0FBUyxFQUFNLElBQU0sRUFBUSxHQUcvQyxRQUFTLEdBQUssRUFBSyxHQUNsQixHQUF3QixtQkFBYixVQUFYLENBVUEsSUFOQSxHQUFJLE1BR0EsRUFBVSxTQUFTLE9BQVMsU0FBUyxPQUFPLE1BQU0sU0FDbEQsRUFBSSxFQUVELEVBQUksRUFBUSxPQUFRLElBQUssQ0FDL0IsR0FBSSxHQUFRLEVBQVEsR0FBRyxNQUFNLEtBQ3pCLEVBQVMsRUFBTSxNQUFNLEdBQUcsS0FBSyxJQUU1QixJQUE2QixNQUFyQixFQUFPLE9BQU8sS0FDMUIsRUFBUyxFQUFPLE1BQU0sR0FBSSxHQUczQixLQUNDLEdBQUksR0FBTyxFQUFPLEVBQU0sR0FJeEIsSUFIQSxHQUFVLEVBQVUsTUFBUSxHQUFXLEVBQVEsSUFDOUMsRUFBTyxHQUVKLEVBQ0gsSUFDQyxFQUFTLEtBQUssTUFBTSxHQUNuQixNQUFPLElBS1YsR0FGQSxFQUFJLEdBQVEsRUFFUixJQUFRLEVBQ1gsTUFFQSxNQUFPLEtBR1YsTUFBTyxHQUFNLEVBQUksR0FBTyxHQW9CekIsTUFqQkEsR0FBSSxJQUFNLEVBQ1YsRUFBSSxJQUFNLFNBQVUsR0FDbkIsTUFBTyxHQUFJLEdBQUssSUFFakIsRUFBSSxRQUFVLFNBQVUsR0FDdkIsTUFBTyxHQUFJLEdBQUssSUFFakIsRUFBSSxPQUFTLFNBQVUsRUFBSyxHQUMzQixFQUFJLEVBQUssR0FBSSxFQUFPLEdBQ25CLFNBQVUsTUFJWixFQUFJLFlBRUosRUFBSSxjQUFnQixFQUViLEVBR1IsTUFBTyxHQUFLOzs7Q0M5SlgsU0FBVSxHQUNVLGtCQUFYLFNBQXlCLE9BQU8sSUFFMUMsUUFBUSxVQUFXLEdBR25CLEVBRjhCLGdCQUFaLFNBRVYsUUFBUSxVQUdSLE9BQU8sUUFBVSxPQUFPLFFBRTlCLFNBQVMsR0FhWixHQWtCSSxHQUdILEVBRUEsRUFDQSxFQUNBLEVBQ0EsRUFQQSxFQUFnQixhQUNoQixJQUFXLE9BQWEsT0FFeEIsRUFBVSxFQUFFLFFBVVQsRUFBUyxTQUFTLEVBQU0sR0FDMUIsRUFBSSxHQUFHLEdBMUJILE1BMEJXLEVBekJMLE9BeUJzQixJQUVqQyxFQUFTLFNBQVMsRUFBVyxFQUFVLEVBQU0sR0FDNUMsR0FBSSxHQUFLLFNBQVMsY0FBYyxNQWFoQyxPQVpBLEdBQUcsVUFBWSxPQUFPLEVBQ25CLElBQ0YsRUFBRyxVQUFZLEdBRVosRUFLTSxHQUNULEVBQVMsWUFBWSxJQUxyQixFQUFLLEVBQUUsR0FDSixHQUNGLEVBQUcsU0FBUyxJQUtQLEdBRVIsRUFBYyxTQUFTLEVBQUcsR0FDekIsRUFBSSxHQUFHLGVBN0NILE1BNkN1QixFQUFHLEdBRTNCLEVBQUksR0FBRyxZQUVULEVBQUksRUFBRSxPQUFPLEdBQUcsY0FBZ0IsRUFBRSxNQUFNLEdBQ3JDLEVBQUksR0FBRyxVQUFVLElBQ25CLEVBQUksR0FBRyxVQUFVLEdBQUcsTUFBTSxFQUFLLEVBQUUsUUFBUSxHQUFRLEdBQVEsTUFJNUQsRUFBZSxTQUFTLEdBS3ZCLE1BSkcsS0FBUyxHQUFtQixFQUFJLGFBQWEsV0FDL0MsRUFBSSxhQUFhLFNBQVcsRUFBRyxFQUFJLEdBQUcsWUFBWSxRQUFRLFVBQVcsRUFBSSxHQUFHLFNBQzVFLEVBQWlCLEdBRVgsRUFBSSxhQUFhLFVBR3pCLEVBQWlCLFdBQ1osRUFBRSxjQUFjLFdBRW5CLEVBQU0sR0FBSSxHQUNWLEVBQUksT0FDSixFQUFFLGNBQWMsU0FBVyxJQUk3QixFQUFzQixXQUNyQixHQUFJLEdBQUksU0FBUyxjQUFjLEtBQUssTUFDbkMsR0FBSyxLQUFLLElBQUksTUFBTSxTQUVyQixRQUF3QixLQUFwQixFQUFjLFdBQ2pCLE9BQU8sQ0FHUixNQUFPLEVBQUUsUUFDUixHQUFJLEVBQUUsTUFBUSxjQUFnQixHQUM3QixPQUFPLENBSVQsUUFBTyxFQVFULEdBQWMsV0FFYixZQUFhLEVBTWIsS0FBTSxXQUNMLEdBQUksR0FBYSxVQUFVLFVBQzNCLEdBQUksUUFBVSxFQUFJLE1BQVEsU0FBUyxNQUFRLFNBQVMsaUJBQ3BELEVBQUksVUFBWSxZQUFjLEtBQUssR0FDbkMsRUFBSSxNQUFRLHFCQUF1QixLQUFLLEdBQ3hDLEVBQUksbUJBQXFCLElBSXpCLEVBQUksZUFBa0IsRUFBSSxXQUFhLEVBQUksT0FBUyw4RUFBOEUsS0FBSyxVQUFVLFdBQ2pKLEVBQVksRUFBRSxVQUVkLEVBQUksZ0JBT0wsS0FBTSxTQUFTLEdBRWQsR0FBSSxFQUVKLEtBQWtCLElBQWYsRUFBSyxNQUFpQixDQUV4QixFQUFJLE1BQVEsRUFBSyxNQUFNLFVBRXZCLEVBQUksTUFBUSxDQUNaLElBQ0MsR0FERyxFQUFRLEVBQUssS0FFakIsS0FBSSxFQUFJLEVBQUcsRUFBSSxFQUFNLE9BQVEsSUFLNUIsR0FKQSxFQUFPLEVBQU0sR0FDVixFQUFLLFNBQ1AsRUFBTyxFQUFLLEdBQUcsSUFFYixJQUFTLEVBQUssR0FBRyxHQUFJLENBQ3ZCLEVBQUksTUFBUSxDQUNaLFlBSUYsR0FBSSxNQUFRLEVBQUUsUUFBUSxFQUFLLE9BQVMsRUFBSyxPQUFTLEVBQUssT0FDdkQsRUFBSSxNQUFRLEVBQUssT0FBUyxDQUkzQixJQUFHLEVBQUksT0FFTixXQURBLEdBQUksZ0JBSUwsR0FBSSxTQUNKLEVBQWUsR0FDWixFQUFLLFFBQVUsRUFBSyxPQUFPLE9BQzdCLEVBQUksR0FBSyxFQUFLLE9BQU8sR0FBRyxHQUV4QixFQUFJLEdBQUssRUFHUCxFQUFLLEtBQ0gsRUFBSSxZQUFZLEVBQUssT0FDeEIsRUFBSSxZQUFZLEVBQUssU0FFdEIsRUFBSSxhQUFlLEVBQUksWUFBWSxFQUFLLE1BRXhDLEVBQUksZ0JBS0wsRUFBSSxHQUFLLEVBQUUsUUFBTyxLQUFVLEVBQUUsY0FBYyxTQUFVLEdBQ3RELEVBQUksZ0JBQTZDLFNBQTNCLEVBQUksR0FBRyxpQkFBOEIsRUFBSSxlQUFpQixFQUFJLEdBQUcsZ0JBRXBGLEVBQUksR0FBRyxRQUNULEVBQUksR0FBRyxxQkFBc0IsRUFDN0IsRUFBSSxHQUFHLGdCQUFpQixFQUN4QixFQUFJLEdBQUcsY0FBZSxFQUN0QixFQUFJLEdBQUcsaUJBQWtCLEdBTXRCLEVBQUksWUFHUCxFQUFJLFVBQVksRUFBTyxNQUFNLEdBQUcsWUFBa0IsV0FDakQsRUFBSSxVQUdMLEVBQUksS0FBTyxFQUFPLFFBQVEsS0FBSyxZQUFhLEdBQUcsR0FBRyxZQUFrQixTQUFTLEdBQ3pFLEVBQUksY0FBYyxFQUFFLFNBQ3RCLEVBQUksVUFJTixFQUFJLFVBQVksRUFBTyxZQUFhLEVBQUksT0FHekMsRUFBSSxpQkFBbUIsRUFBTyxXQUMzQixFQUFJLEdBQUcsWUFDVCxFQUFJLFVBQVksRUFBTyxZQUFhLEVBQUksVUFBVyxFQUFJLEdBQUcsVUFLM0QsSUFBSSxHQUFVLEVBQUUsY0FBYyxPQUM5QixLQUFJLEVBQUksRUFBRyxFQUFJLEVBQVEsT0FBUSxJQUFLLENBQ25DLEdBQUksR0FBSSxFQUFRLEVBQ2hCLEdBQUksRUFBRSxPQUFPLEdBQUcsY0FBZ0IsRUFBRSxNQUFNLEdBQ3hDLEVBQUksT0FBTyxHQUFHLEtBQUssR0FFcEIsRUFBWSxjQUdULEVBQUksR0FBRyxlQUVMLEVBQUksR0FBRyxnQkFHVixFQWpPa0IsY0FpT1MsU0FBUyxFQUFHLEVBQVUsRUFBUSxHQUN4RCxFQUFPLGtCQUFvQixFQUFhLEVBQUssUUFFOUMsR0FBZ0IscUJBTGhCLEVBQUksS0FBSyxPQUFRLE1BU2hCLEVBQUksR0FBRyxXQUNULEdBQWdCLGtCQUtkLEVBQUksZ0JBQ04sRUFBSSxLQUFLLEtBQ1IsU0FBVSxFQUFJLEdBQUcsVUFDakIsVUFBVyxTQUNYLFVBQVcsRUFBSSxHQUFHLFlBR25CLEVBQUksS0FBSyxLQUNSLElBQUssRUFBUSxZQUNiLFNBQVUsZUFHYyxJQUF0QixFQUFJLEdBQUcsWUFBK0MsU0FBdEIsRUFBSSxHQUFHLGFBQTBCLEVBQUksa0JBQ3hFLEVBQUksVUFBVSxLQUNiLE9BQVEsRUFBVSxTQUNsQixTQUFVLGFBTVQsRUFBSSxHQUFHLGlCQUVULEVBQVUsR0FBRyxZQUFvQixTQUFTLEdBQ3hCLEtBQWQsRUFBRSxTQUNKLEVBQUksVUFLUCxFQUFRLEdBQUcsYUFBcUIsV0FDL0IsRUFBSSxlQUlELEVBQUksR0FBRyxzQkFDVixHQUFnQixvQkFHZCxHQUNGLEVBQUksS0FBSyxTQUFTLEVBSW5CLElBQUksR0FBZSxFQUFJLEdBQUssRUFBUSxTQUdoQyxJQUVKLElBQUksRUFBSSxpQkFDSyxFQUFJLGNBQWMsR0FBYyxDQUMvQixHQUFJLEdBQUksRUFBSSxtQkFDVCxLQUNDLEVBQWEsWUFBYyxHQUsxQyxFQUFJLGtCQUNGLEVBQUksTUFJUCxFQUFFLGNBQWMsSUFBSSxXQUFZLFVBSGhDLEVBQWEsU0FBVyxTQVMxQixJQUFJLEdBQWUsRUFBSSxHQUFHLFNBMEMxQixPQXpDRyxHQUFJLFFBQ04sR0FBZ0IsWUFFZCxHQUNGLEVBQUksZUFBZ0IsR0FJckIsRUFBSSxpQkFFSixFQUFZLGlCQUdaLEVBQUUsUUFBUSxJQUFJLEdBR2QsRUFBSSxVQUFVLElBQUksRUFBSSxNQUFNLFVBQVcsRUFBSSxHQUFHLFdBQWEsRUFBRSxTQUFTLE9BR3RFLEVBQUksZUFBaUIsU0FBUyxjQUc5QixXQUFXLFdBRVAsRUFBSSxTQUNOLEVBQUksZUF4VU8sYUF5VVgsRUFBSSxhQUdKLEVBQUksVUFBVSxTQTVVSCxhQWdWWixFQUFVLEdBQUcsY0FBc0IsRUFBSSxhQUVyQyxJQUVILEVBQUksUUFBUyxFQUNiLEVBQUksV0FBVyxHQUNmLEVBMVZZLFFBNFZMLEdBTVIsTUFBTyxXQUNGLEVBQUksU0FDUixFQXhXb0IsZUEwV3BCLEVBQUksUUFBUyxFQUVWLEVBQUksR0FBRyxlQUFpQixFQUFJLFNBQVcsRUFBSSxvQkFDN0MsRUFBSSxlQXBXVyxnQkFxV2YsV0FBVyxXQUNWLEVBQUksVUFDRixFQUFJLEdBQUcsZUFFVixFQUFJLFdBT04sT0FBUSxXQUNQLEVBM1hnQixRQTZYaEIsSUFBSSxHQUFrQix5QkFZdEIsSUFWQSxFQUFJLFVBQVUsU0FDZCxFQUFJLEtBQUssU0FDVCxFQUFJLFVBQVUsUUFFWCxFQUFJLEdBQUcsWUFDVCxHQUFtQixFQUFJLEdBQUcsVUFBWSxLQUd2QyxFQUFJLG9CQUFvQixHQUVyQixFQUFJLGdCQUFpQixDQUN2QixHQUFJLElBQWdCLFlBQWEsR0FDOUIsR0FBSSxNQUNOLEVBQUUsY0FBYyxJQUFJLFdBQVksSUFFaEMsRUFBYSxTQUFXLEdBRXpCLEVBQUUsUUFBUSxJQUFJLEdBR2YsRUFBVSxJQUFJLHlCQUNkLEVBQUksR0FBRyxJQTVZRyxRQStZVixFQUFJLEtBQUssS0FBSyxRQUFTLFlBQVksV0FBVyxTQUM5QyxFQUFJLFVBQVUsS0FBSyxRQUFTLFVBQzVCLEVBQUksVUFBVSxLQUFLLFFBQVMsa0JBR3pCLEVBQUksR0FBRyxjQUNSLEVBQUksR0FBRyxpQkFBMEQsSUFBeEMsRUFBSSxhQUFhLEVBQUksU0FBUyxPQUNyRCxFQUFJLGFBQWEsVUFDbkIsRUFBSSxhQUFhLFNBQVMsU0FJekIsRUFBSSxHQUFHLGVBQWlCLEVBQUksZ0JBQzlCLEVBQUUsRUFBSSxnQkFBZ0IsUUFFdkIsRUFBSSxTQUFXLEtBQ2YsRUFBSSxRQUFVLEtBQ2QsRUFBSSxhQUFlLEtBQ25CLEVBQUksV0FBYSxFQUVqQixFQXphbUIsZUE0YXBCLFdBQVksU0FBUyxHQUVwQixHQUFHLEVBQUksTUFBTyxDQUViLEdBQUksR0FBWSxTQUFTLGdCQUFnQixZQUFjLE9BQU8sV0FDMUQsRUFBUyxPQUFPLFlBQWMsQ0FDbEMsR0FBSSxLQUFLLElBQUksU0FBVSxHQUN2QixFQUFJLEdBQUssTUFFVCxHQUFJLEdBQUssR0FBYSxFQUFRLFFBRzNCLEdBQUksaUJBQ1AsRUFBSSxLQUFLLElBQUksU0FBVSxFQUFJLElBRzVCLEVBQVksV0FPYixlQUFnQixXQUNmLEdBQUksR0FBTyxFQUFJLE1BQU0sRUFBSSxNQUd6QixHQUFJLGlCQUFpQixTQUVsQixFQUFJLFNBQ04sRUFBSSxRQUFRLFNBRVQsRUFBSyxTQUNSLEVBQU8sRUFBSSxRQUFTLEVBQUksT0FHekIsSUFBSSxHQUFPLEVBQUssSUFRaEIsSUFOQSxFQUFZLGdCQUFpQixFQUFJLFNBQVcsRUFBSSxTQUFTLEtBQU8sR0FBSSxJQUlwRSxFQUFJLFNBQVcsR0FFWCxFQUFJLGFBQWEsR0FBTyxDQUMzQixHQUFJLEtBQVMsRUFBSSxHQUFHLElBQVEsRUFBSSxHQUFHLEdBQU0sTUFHekMsR0FBWSxtQkFBb0IsR0FHL0IsRUFBSSxhQUFhLElBRGYsR0FDdUIsRUFBRSxHQU8xQixHQUFvQixJQUFxQixFQUFLLE1BQ2hELEVBQUksVUFBVSxZQUFZLE9BQU8sRUFBaUIsVUFHbkQsSUFBSSxHQUFhLEVBQUksTUFBUSxFQUFLLE9BQU8sR0FBRyxjQUFnQixFQUFLLE1BQU0sSUFBSSxFQUFNLEVBQUksYUFBYSxHQUNsRyxHQUFJLGNBQWMsRUFBWSxHQUU5QixFQUFLLFdBQVksRUFFakIsRUEzZWMsU0EyZVksR0FDMUIsRUFBbUIsRUFBSyxLQUd4QixFQUFJLFVBQVUsUUFBUSxFQUFJLGtCQUUxQixFQUFZLGdCQU9iLGNBQWUsU0FBUyxFQUFZLEdBQ25DLEVBQUksUUFBVSxFQUVYLEVBQ0MsRUFBSSxHQUFHLGNBQWdCLEVBQUksR0FBRyxpQkFDTCxJQUEzQixFQUFJLGFBQWEsR0FFYixFQUFJLFFBQVEsS0FBSyxjQUFjLFFBQ2xDLEVBQUksUUFBUSxPQUFPLEtBR3BCLEVBQUksUUFBVSxFQUdmLEVBQUksUUFBVSxHQUdmLEVBNWdCcUIsZ0JBNmdCckIsRUFBSSxVQUFVLFNBQVMsT0FBTyxFQUFLLFdBRW5DLEVBQUksaUJBQWlCLE9BQU8sRUFBSSxVQVFqQyxRQUFTLFNBQVMsR0FDakIsR0FDQyxHQURHLEVBQU8sRUFBSSxNQUFNLEVBVXJCLElBUEcsRUFBSyxRQUNQLEdBQVMsR0FBSSxFQUFFLEtBRWYsRUFBTyxFQUFLLEtBQ1osR0FBUyxLQUFNLEVBQU0sSUFBSyxFQUFLLE1BRzdCLEVBQUssR0FBSSxDQUlYLElBQUksR0FIQSxHQUFRLEVBQUksTUFHUixFQUFJLEVBQUcsRUFBSSxFQUFNLE9BQVEsSUFDaEMsR0FBSSxFQUFLLEdBQUcsU0FBUyxPQUFPLEVBQU0sSUFBTSxDQUN2QyxFQUFPLEVBQU0sRUFDYixPQUlGLEVBQUssSUFBTSxFQUFLLEdBQUcsS0FBSyxnQkFDcEIsRUFBSyxNQUNSLEVBQUssSUFBTSxFQUFLLEdBQUcsS0FBSyxTQVUxQixNQU5BLEdBQUssS0FBTyxHQUFRLEVBQUksR0FBRyxNQUFRLFNBQ25DLEVBQUssTUFBUSxFQUNiLEVBQUssUUFBUyxFQUNkLEVBQUksTUFBTSxHQUFTLEVBQ25CLEVBQVksZUFBZ0IsR0FFckIsRUFBSSxNQUFNLElBT2xCLFNBQVUsU0FBUyxFQUFJLEdBQ3RCLEdBQUksR0FBVyxTQUFTLEdBQ3ZCLEVBQUUsTUFBUSxLQUNWLEVBQUksV0FBVyxFQUFHLEVBQUksR0FHbkIsS0FDSCxLQUdELElBQUksR0FBUSxxQkFDWixHQUFRLE9BQVMsRUFFZCxFQUFRLE9BQ1YsRUFBUSxPQUFRLEVBQ2hCLEVBQUcsSUFBSSxHQUFPLEdBQUcsRUFBTyxLQUV4QixFQUFRLE9BQVEsRUFDYixFQUFRLFNBQ1YsRUFBRyxJQUFJLEdBQU8sR0FBRyxFQUFPLEVBQVEsU0FBVyxJQUUzQyxFQUFRLE1BQVEsRUFDaEIsRUFBRyxJQUFJLEdBQU8sR0FBRyxFQUFPLE1BSTNCLFdBQVksU0FBUyxFQUFHLEVBQUksR0FJM0IsUUFIb0MsS0FBckIsRUFBUSxTQUF5QixFQUFRLFNBQVcsRUFBRSxjQUFjLFNBQVMsYUFHOUQsSUFBWixFQUFFLE9BQWUsRUFBRSxTQUFXLEVBQUUsU0FBVyxFQUFFLFFBQVUsRUFBRSxVQUEzRSxDQUlBLEdBQUksT0FBa0MsS0FBdEIsRUFBUSxVQUEwQixFQUFRLFVBQVksRUFBRSxjQUFjLFNBQVMsU0FFL0YsSUFBRyxFQUNGLEdBQUcsRUFBRSxXQUFXLElBQ2YsSUFBSyxFQUFVLEtBQUssR0FDbkIsT0FBTyxNQUdSLElBQUksRUFBUSxRQUFVLEVBQ3JCLE9BQU8sQ0FLUCxHQUFFLE9BQ0osRUFBRSxpQkFHQyxFQUFJLFFBQ04sRUFBRSxtQkFJSixFQUFRLEdBQUssRUFBRSxFQUFFLE9BQ2QsRUFBUSxXQUNWLEVBQVEsTUFBUSxFQUFHLEtBQUssRUFBUSxXQUVqQyxFQUFJLEtBQUssS0FPVixhQUFjLFNBQVMsRUFBUSxHQUU5QixHQUFHLEVBQUksVUFBVyxDQUNkLElBQWdCLEdBQ2xCLEVBQUksVUFBVSxZQUFZLFNBQVMsR0FHaEMsR0FBbUIsWUFBWCxJQUNYLEVBQU8sRUFBSSxHQUFHLFNBR2YsSUFBSSxJQUNILE9BQVEsRUFDUixLQUFNLEVBR1AsR0FBWSxlQUFnQixHQUU1QixFQUFTLEVBQUssT0FDZCxFQUFPLEVBQUssS0FFWixFQUFJLFVBQVUsS0FBSyxHQUVuQixFQUFJLFVBQVUsS0FBSyxLQUFLLEdBQUcsUUFBUyxTQUFTLEdBQzVDLEVBQUUsNkJBR0gsRUFBSSxVQUFVLFNBQVMsU0FBUyxHQUNoQyxFQUFjLElBVWhCLGNBQWUsU0FBUyxHQUV2QixJQUFHLEVBQUUsR0FBUSxTQXBxQlEscUJBb3FCckIsQ0FJQSxHQUFJLEdBQWlCLEVBQUksR0FBRyxvQkFDeEIsRUFBWSxFQUFJLEdBQUcsY0FFdkIsSUFBRyxHQUFrQixFQUNwQixPQUFPLENBSVAsS0FBSSxFQUFJLFNBQVcsRUFBRSxHQUFRLFNBQVMsY0FBaUIsRUFBSSxXQUFhLElBQVcsRUFBSSxVQUFVLEdBQ2hHLE9BQU8sQ0FJUixJQUFNLElBQVcsRUFBSSxRQUFRLElBQU8sRUFBRSxTQUFTLEVBQUksUUFBUSxHQUFJLElBT3hELEdBQUcsRUFDVCxPQUFPLE1BUFAsSUFBRyxHQUVFLEVBQUUsU0FBUyxTQUFVLEdBQ3hCLE9BQU8sQ0FRWCxRQUFPLElBRVIsZUFBZ0IsU0FBUyxHQUN4QixFQUFJLFVBQVUsU0FBUyxHQUN2QixFQUFJLEtBQUssU0FBUyxJQUVuQixvQkFBcUIsU0FBUyxHQUM3QixLQUFLLFVBQVUsWUFBWSxHQUMzQixFQUFJLEtBQUssWUFBWSxJQUV0QixjQUFlLFNBQVMsR0FDdkIsT0FBVyxFQUFJLE1BQVEsRUFBVSxTQUFXLFNBQVMsS0FBSyxlQUFpQixHQUFhLEVBQVEsV0FFakcsVUFBVyxZQUNULEVBQUksR0FBRyxNQUFRLEVBQUksUUFBUSxLQUFLLEVBQUksR0FBRyxPQUFPLEdBQUcsR0FBSyxFQUFJLE1BQU0sU0FFbEUsV0FBWSxTQUFTLEdBQ3BCLEdBQUksRUFBRSxTQUFXLEVBQUksS0FBSyxLQUFPLEVBQUUsU0FBUyxFQUFJLEtBQUssR0FBSSxFQUFFLFFBRTFELE1BREEsR0FBSSxhQUNHLEdBR1QsYUFBYyxTQUFTLEVBQVUsRUFBUSxHQUN4QyxHQUFJLEVBQ0QsR0FBSyxPQUNQLEVBQVMsRUFBRSxPQUFPLEVBQUssS0FBTSxJQUU5QixFQW51Qm9CLGVBbXVCYSxFQUFVLEVBQVEsSUFFbkQsRUFBRSxLQUFLLEVBQVEsU0FBUyxFQUFLLEdBQzVCLE9BQWEsS0FBVixJQUFpQyxJQUFWLEVBQ3pCLE9BQU8sQ0FHUixJQURBLEVBQU0sRUFBSSxNQUFNLEtBQ2IsRUFBSSxPQUFTLEVBQUcsQ0FDbEIsR0FBSSxHQUFLLEVBQVMsS0FBSyxRQUFlLEVBQUksR0FFMUMsSUFBRyxFQUFHLE9BQVMsRUFBRyxDQUNqQixHQUFJLEdBQU8sRUFBSSxFQUNILGlCQUFULEVBQ0MsRUFBRyxLQUFPLEVBQU0sSUFDbEIsRUFBRyxZQUFZLEdBRUUsUUFBVCxFQUNOLEVBQUcsR0FBRyxPQUNSLEVBQUcsS0FBSyxNQUFPLEdBRWYsRUFBRyxZQUFhLEVBQUUsU0FBUyxLQUFLLE1BQU8sR0FBTyxLQUFLLFFBQVMsRUFBRyxLQUFLLFdBR3JFLEVBQUcsS0FBSyxFQUFJLEdBQUksUUFLbEIsR0FBUyxLQUFLLFFBQWUsR0FBSyxLQUFLLE1BSzFDLGtCQUFtQixXQUVsQixPQUF5QixLQUF0QixFQUFJLGNBQTZCLENBQ25DLEdBQUksR0FBWSxTQUFTLGNBQWMsTUFDdkMsR0FBVSxNQUFNLFFBQVUsaUZBQzFCLFNBQVMsS0FBSyxZQUFZLEdBQzFCLEVBQUksY0FBZ0IsRUFBVSxZQUFjLEVBQVUsWUFDdEQsU0FBUyxLQUFLLFlBQVksR0FFM0IsTUFBTyxHQUFJLGdCQVdiLEVBQUUsZUFDRCxTQUFVLEtBQ1YsTUFBTyxFQUFjLFVBQ3JCLFdBRUEsS0FBTSxTQUFTLEVBQVMsR0FXdkIsTUFWQSxLQUtDLEVBSEcsRUFHTyxFQUFFLFFBQU8sS0FBVSxNQUc5QixFQUFRLE9BQVEsRUFDaEIsRUFBUSxNQUFRLEdBQVMsRUFDbEIsS0FBSyxTQUFTLEtBQUssSUFHM0IsTUFBTyxXQUNOLE1BQU8sR0FBRSxjQUFjLFVBQVksRUFBRSxjQUFjLFNBQVMsU0FHN0QsZUFBZ0IsU0FBUyxFQUFNLEdBQzNCLEVBQU8sVUFDVCxFQUFFLGNBQWMsU0FBUyxHQUFRLEVBQU8sU0FFekMsRUFBRSxPQUFPLEtBQUssTUFBTyxFQUFPLE9BQzVCLEtBQUssUUFBUSxLQUFLLElBR25CLFVBS0MsVUFBVyxFQUVYLElBQUssS0FFTCxVQUFVLEVBRVYsVUFBVyxHQUVYLFdBQVcsRUFFWCxNQUFPLEdBRVAscUJBQXFCLEVBRXJCLGdCQUFnQixFQUVoQixnQkFBZ0IsRUFFaEIsY0FBYyxFQUVkLGlCQUFpQixFQUVqQixPQUFPLEVBRVAsVUFBVSxFQUVWLGFBQWMsRUFFZCxVQUFXLEtBRVgsZ0JBQWlCLE9BRWpCLFdBQVksT0FFWixVQUFXLE9BRVgsWUFBYSwwRUFFYixPQUFRLGNBRVIsU0FBVSxhQUVWLGVBQWUsSUFPakIsRUFBRSxHQUFHLGNBQWdCLFNBQVMsR0FDN0IsR0FFQSxJQUFJLEdBQU8sRUFBRSxLQUdiLElBQXVCLGdCQUFaLEdBRVYsR0FBZSxTQUFaLEVBQW9CLENBQ3RCLEdBQUksR0FDSCxFQUFXLEVBQVEsRUFBSyxLQUFLLGlCQUFtQixFQUFLLEdBQUcsY0FDeEQsRUFBUSxTQUFTLFVBQVUsR0FBSSxLQUFPLENBRXBDLEdBQVMsTUFDWCxFQUFRLEVBQVMsTUFBTSxJQUV2QixFQUFRLEVBQ0wsRUFBUyxXQUNYLEVBQVEsRUFBTSxLQUFLLEVBQVMsV0FFN0IsRUFBUSxFQUFNLEdBQUksSUFFbkIsRUFBSSxZQUFZLE1BQU0sR0FBUSxFQUFNLE9BRWpDLEdBQUksUUFDTixFQUFJLEdBQVMsTUFBTSxFQUFLLE1BQU0sVUFBVSxNQUFNLEtBQUssVUFBVyxRQUtoRSxHQUFVLEVBQUUsUUFBTyxLQUFVLEdBTzFCLEVBQ0YsRUFBSyxLQUFLLGdCQUFpQixHQUUzQixFQUFLLEdBQUcsY0FBZ0IsRUFHekIsRUFBSSxTQUFTLEVBQU0sRUFHcEIsT0FBTyxHQU9SLElBQ0MsR0FDQSxFQUNBLEVBQ0EsRUFBeUIsV0FDckIsSUFDRixFQUFtQixNQUFPLEVBQW1CLFNBQVMsSUFBZ0IsU0FDdEUsRUFBcUIsTUFJeEIsR0FBRSxjQUFjLGVBWEEsVUFZZixTQUNDLFlBQWEsT0FDYixPQUFRLEdBQ1IsVUFBVyxxQkFFWixPQUVDLFdBQVksV0FDWCxFQUFJLE1BQU0sS0FwQkcsVUFzQmIsRUFBTyxlQUEyQixXQUNqQyxPQUlGLFVBQVcsU0FBUyxFQUFNLEdBSXpCLEdBRkEsSUFFRyxFQUFLLElBQUssQ0FDWixHQUFJLEdBQVcsRUFBSSxHQUFHLE9BQ3JCLEVBQUssRUFBRSxFQUFLLElBRWIsSUFBRyxFQUFHLE9BQVEsQ0FHYixHQUFJLEdBQVMsRUFBRyxHQUFHLFVBQ2hCLElBQVUsRUFBTyxVQUNmLElBQ0gsRUFBZSxFQUFTLFlBQ3hCLEVBQXFCLEVBQU8sR0FDNUIsRUFBZSxPQUFPLEdBR3ZCLEVBQXFCLEVBQUcsTUFBTSxHQUFvQixTQUFTLFlBQVksSUFHeEUsRUFBSSxhQUFhLGFBRWpCLEdBQUksYUFBYSxRQUFTLEVBQVMsV0FDbkMsRUFBSyxFQUFFLFFBSVIsT0FEQSxHQUFLLGNBQWdCLEVBQ2QsRUFLUixNQUZBLEdBQUksYUFBYSxTQUNqQixFQUFJLGFBQWEsS0FBYyxHQUN4QixLQVFWLElBQ0MsR0FDQSxFQUFvQixXQUNoQixHQUNGLEVBQUUsU0FBUyxNQUFNLFlBQVksSUFHL0IsRUFBc0IsV0FDckIsSUFDRyxFQUFJLEtBQ04sRUFBSSxJQUFJLFFBSVgsR0FBRSxjQUFjLGVBZEYsUUFnQmIsU0FDQyxTQUFVLEtBQ1YsT0FBUSxlQUNSLE9BQVEsd0RBR1QsT0FDQyxTQUFVLFdBQ1QsRUFBSSxNQUFNLEtBeEJDLFFBeUJYLEVBQVcsRUFBSSxHQUFHLEtBQUssT0FFdkIsRUFBTyxhQUF5QixHQUNoQyxFQUFPLG9CQUEyQixJQUVuQyxRQUFTLFNBQVMsR0FFZCxHQUNGLEVBQUUsU0FBUyxNQUFNLFNBQVMsR0FHM0IsRUFBSSxhQUFhLFVBRWpCLElBQUksR0FBTyxFQUFFLFFBQ1osSUFBSyxFQUFLLElBQ1YsUUFBUyxTQUFTLEVBQU0sRUFBWSxHQUNuQyxHQUFJLElBQ0gsS0FBSyxFQUNMLElBQUksRUFHTCxHQUFZLFlBQWEsR0FFekIsRUFBSSxjQUFlLEVBQUUsRUFBSyxNQWhEakIsUUFrRFQsRUFBSyxVQUFXLEVBRWhCLElBRUEsRUFBSSxZQUVKLFdBQVcsV0FDVixFQUFJLEtBQUssU0EzaENBLGNBNGhDUCxJQUVILEVBQUksYUFBYSxTQUVqQixFQUFZLHFCQUViLE1BQU8sV0FDTixJQUNBLEVBQUssU0FBVyxFQUFLLFdBQVksRUFDakMsRUFBSSxhQUFhLFFBQVMsRUFBSSxHQUFHLEtBQUssT0FBTyxRQUFRLFFBQVMsRUFBSyxRQUVsRSxFQUFJLEdBQUcsS0FBSyxTQUlmLE9BRkEsR0FBSSxJQUFNLEVBQUUsS0FBSyxHQUVWLE1BUVYsSUFBSSxHQUNILEVBQVksU0FBUyxHQUNwQixHQUFHLEVBQUssVUFBNEIsS0FBcEIsRUFBSyxLQUFLLE1BQ3pCLE1BQU8sR0FBSyxLQUFLLEtBRWxCLElBQUksR0FBTSxFQUFJLEdBQUcsTUFBTSxRQUV2QixJQUFHLEVBQUssQ0FDUCxHQUFHLEVBQUUsV0FBVyxHQUNmLE1BQU8sR0FBSSxLQUFLLEVBQUssRUFDZixJQUFHLEVBQUssR0FDZCxNQUFPLEdBQUssR0FBRyxLQUFLLElBQVEsR0FHOUIsTUFBTyxHQUdULEdBQUUsY0FBYyxlQUFlLFNBRTlCLFNBQ0MsT0FBUSxpT0FZUixPQUFRLG1CQUNSLFNBQVUsUUFDVixhQUFhLEVBQ2IsT0FBUSxzREFHVCxPQUNDLFVBQVcsV0FDVixHQUFJLEdBQVEsRUFBSSxHQUFHLE1BQ2xCLEVBQUssUUFFTixHQUFJLE1BQU0sS0FBSyxTQUVmLEVBcG1DVyxPQW9tQ08sRUFBSSxXQUNJLFVBQXRCLEVBQUksU0FBUyxNQUFvQixFQUFNLFFBQ3pDLEVBQUUsU0FBUyxNQUFNLFNBQVMsRUFBTSxVQUlsQyxFQS9tQ2UsUUErbUNJLEVBQUksV0FDbkIsRUFBTSxRQUNSLEVBQUUsU0FBUyxNQUFNLFlBQVksRUFBTSxRQUVwQyxFQUFRLElBQUksZ0JBR2IsRUFBTyxTQUFTLEVBQUksRUFBSSxhQUNyQixFQUFJLFNBQ04sRUFBTyxjQUFlLEVBQUksY0FHNUIsWUFBYSxXQUNaLEdBQUksR0FBTyxFQUFJLFFBQ2YsSUFBSSxHQUFTLEVBQUssS0FFZixFQUFJLEdBQUcsTUFBTSxZQUFhLENBQzVCLEdBQUksR0FBTyxDQUVSLEdBQUksVUFDTixFQUFPLFNBQVMsRUFBSyxJQUFJLElBQUksZUFBZ0IsSUFBTSxTQUFTLEVBQUssSUFBSSxJQUFJLGtCQUFrQixLQUU1RixFQUFLLElBQUksSUFBSSxhQUFjLEVBQUksR0FBRyxLQUdwQyxnQkFBaUIsU0FBUyxHQUN0QixFQUFLLE1BRVAsRUFBSyxTQUFVLEVBRVosR0FDRixjQUFjLEdBR2YsRUFBSyxtQkFBb0IsRUFFekIsRUFBWSxlQUFnQixHQUV6QixFQUFLLFlBQ0osRUFBSSxTQUNOLEVBQUksUUFBUSxZQUFZLGVBRXpCLEVBQUssV0FBWSxLQVNwQixjQUFlLFNBQVMsR0FFdkIsR0FBSSxHQUFVLEVBQ2IsRUFBTSxFQUFLLElBQUksR0FDZixFQUFpQixTQUFTLEdBRXRCLEdBQ0YsY0FBYyxHQUdmLEVBQWUsWUFBWSxXQUMxQixHQUFHLEVBQUksYUFBZSxFQUVyQixXQURBLEdBQUksZ0JBQWdCLEVBSWxCLEdBQVUsS0FDWixjQUFjLEdBR2YsSUFDZSxJQUFaLEVBQ0YsRUFBZSxJQUNNLEtBQVosRUFDVCxFQUFlLElBQ00sTUFBWixHQUNULEVBQWUsTUFFZCxHQUdMLEdBQWUsSUFHaEIsU0FBVSxTQUFTLEVBQU0sR0FFeEIsR0FBSSxHQUFRLEVBR1gsRUFBaUIsV0FDYixJQUNFLEVBQUssSUFBSSxHQUFHLFVBQ2YsRUFBSyxJQUFJLElBQUksY0FFVixJQUFTLEVBQUksV0FDZixFQUFJLGdCQUFnQixHQUVwQixFQUFJLGFBQWEsVUFHbEIsRUFBSyxTQUFVLEVBQ2YsRUFBSyxRQUFTLEVBRWQsRUFBWSx1QkFLWixJQUNHLEVBQVEsSUFDVixXQUFXLEVBQWUsS0FFMUIsT0FPSixFQUFjLFdBQ1YsSUFDRixFQUFLLElBQUksSUFBSSxjQUNWLElBQVMsRUFBSSxXQUNmLEVBQUksZ0JBQWdCLEdBQ3BCLEVBQUksYUFBYSxRQUFTLEVBQU0sT0FBTyxRQUFRLFFBQVMsRUFBSyxPQUc5RCxFQUFLLFNBQVUsRUFDZixFQUFLLFFBQVMsRUFDZCxFQUFLLFdBQVksSUFHbkIsRUFBUSxFQUFJLEdBQUcsTUFHWixFQUFLLEVBQVMsS0FBSyxXQUN2QixJQUFHLEVBQUcsT0FBUSxDQUNiLEdBQUksR0FBTSxTQUFTLGNBQWMsTUFDakMsR0FBSSxVQUFZLFVBQ2IsRUFBSyxJQUFNLEVBQUssR0FBRyxLQUFLLE9BQU8sU0FDakMsRUFBSSxJQUFNLEVBQUssR0FBRyxLQUFLLE9BQU8sS0FBSyxRQUVwQyxFQUFLLElBQU0sRUFBRSxHQUFLLEdBQUcsaUJBQWtCLEdBQWdCLEdBQUcsa0JBQW1CLEdBQzdFLEVBQUksSUFBTSxFQUFLLElBSVosRUFBRyxHQUFHLFNBQ1IsRUFBSyxJQUFNLEVBQUssSUFBSSxTQUdyQixFQUFNLEVBQUssSUFBSSxHQUNaLEVBQUksYUFBZSxFQUNyQixFQUFLLFNBQVUsRUFDTCxFQUFJLFFBQ2QsRUFBSyxTQUFVLEdBV2pCLE1BUEEsR0FBSSxhQUFhLEdBQ2hCLE1BQU8sRUFBVSxHQUNqQixnQkFBaUIsRUFBSyxLQUNwQixHQUVILEVBQUksY0FFRCxFQUFLLFNBQ0osR0FBYyxjQUFjLEdBRTVCLEVBQUssV0FDUCxFQUFTLFNBQVMsZUFDbEIsRUFBSSxhQUFhLFFBQVMsRUFBTSxPQUFPLFFBQVEsUUFBUyxFQUFLLFFBRTdELEVBQVMsWUFBWSxlQUNyQixFQUFJLGFBQWEsVUFFWCxJQUdSLEVBQUksYUFBYSxXQUNqQixFQUFLLFNBQVUsRUFFWCxFQUFLLFVBQ1IsRUFBSyxXQUFZLEVBQ2pCLEVBQVMsU0FBUyxlQUNsQixFQUFJLGNBQWMsSUFHWixNQVFWLElBQUksR0FDSCxFQUFxQixXQUlwQixXQUh1QixLQUFwQixJQUNGLE1BQXFFLEtBQW5ELFNBQVMsY0FBYyxLQUFLLE1BQU0sY0FFOUMsRUFHVCxHQUFFLGNBQWMsZUFBZSxRQUU5QixTQUNDLFNBQVMsRUFDVCxPQUFRLGNBQ1IsU0FBVSxJQUNWLE9BQVEsU0FBUyxHQUNoQixNQUFPLEdBQVEsR0FBRyxPQUFTLEVBQVUsRUFBUSxLQUFLLFNBSXBELE9BRUMsU0FBVSxXQUNULEdBRUMsR0FGRyxFQUFTLEVBQUksR0FBRyxLQUNuQixFQUFLLE9BR04sSUFBSSxFQUFPLFNBQVksRUFBSSxtQkFBM0IsQ0FJQSxHQXFCQyxHQUNBLEVBdEJHLEVBQVcsRUFBTyxTQUNyQixFQUFpQixTQUFTLEdBQ3pCLEdBQUksR0FBUyxFQUFNLFFBQVEsV0FBVyxTQUFTLFdBQVcsU0FBUyxTQUFTLHNCQUMzRSxFQUFhLE9BQVEsRUFBTyxTQUFTLElBQU0sS0FBTyxFQUFPLE9BQ3pELEdBQ0MsU0FBVSxRQUNWLE9BQVEsS0FDUixLQUFNLEVBQ04sSUFBSyxFQUNMLDhCQUErQixVQUVoQyxFQUFJLFlBS0wsT0FIQSxHQUFPLFdBQVcsR0FBSyxFQUFPLFFBQVEsR0FBSyxFQUFPLE1BQU0sR0FBSyxFQUFPLEdBQUssRUFFekUsRUFBTyxJQUFJLEdBQ0osR0FFUixFQUFrQixXQUNqQixFQUFJLFFBQVEsSUFBSSxhQUFjLFdBS2hDLEdBQU8sZ0JBQWdCLEVBQUksV0FDMUIsR0FBRyxFQUFJLGFBQWMsQ0FTcEIsR0FQQSxhQUFhLEdBQ2IsRUFBSSxRQUFRLElBQUksYUFBYyxZQUk5QixFQUFRLEVBQUksa0JBSVgsV0FEQSxJQUlELEdBQWMsRUFBZSxHQUU3QixFQUFZLElBQUssRUFBSSxjQUVyQixFQUFJLEtBQUssT0FBTyxHQUVoQixFQUFjLFdBQVcsV0FDeEIsRUFBWSxJQUFLLEVBQUksWUFBWSxJQUNqQyxFQUFjLFdBQVcsV0FFeEIsSUFFQSxXQUFXLFdBQ1YsRUFBWSxTQUNaLEVBQVEsRUFBYyxLQUN0QixFQUFZLHVCQUNWLEtBRUQsSUFFRCxPQU1MLEVBbDVDbUIsY0FrNUNPLEVBQUksV0FDN0IsR0FBRyxFQUFJLGFBQWMsQ0FNcEIsR0FKQSxhQUFhLEdBRWIsRUFBSSxHQUFHLGFBQWUsR0FFbEIsRUFBTyxDQUVWLEtBREEsRUFBUSxFQUFJLGtCQUVYLE1BRUQsR0FBYyxFQUFlLEdBRzlCLEVBQVksSUFBSyxFQUFJLFlBQVcsSUFDaEMsRUFBSSxLQUFLLE9BQU8sR0FDaEIsRUFBSSxRQUFRLElBQUksYUFBYyxVQUU5QixXQUFXLFdBQ1YsRUFBWSxJQUFLLEVBQUksZUFDbkIsT0FLTCxFQTc2Q2UsUUE2NkNJLEVBQUksV0FDbkIsRUFBSSxlQUNOLElBQ0csR0FDRixFQUFZLFNBRWIsRUFBUSxVQUtYLFdBQVksV0FDWCxNQUE2QixVQUF0QixFQUFJLFNBQVMsTUFHckIsZUFBZ0IsV0FDZixRQUFHLEVBQUksU0FBUyxTQUNSLEVBQUksU0FBUyxLQU90QixXQUFZLFNBQVMsR0FDcEIsR0FBSSxFQUVILEdBREUsRUFDRyxFQUFJLFNBQVMsSUFFYixFQUFJLEdBQUcsS0FBSyxPQUFPLEVBQUksU0FBUyxJQUFNLEVBQUksU0FHaEQsSUFBSSxHQUFTLEVBQUcsU0FDWixFQUFhLFNBQVMsRUFBRyxJQUFJLGVBQWUsSUFDNUMsRUFBZ0IsU0FBUyxFQUFHLElBQUksa0JBQWtCLEdBQ3RELEdBQU8sS0FBUyxFQUFFLFFBQVEsWUFBYyxDQVF4QyxJQUFJLElBQ0gsTUFBTyxFQUFHLFFBRVYsUUFBUyxFQUFRLEVBQUcsY0FBZ0IsRUFBRyxHQUFHLGNBQWdCLEVBQWdCLEVBVTNFLE9BTkksS0FDSCxFQUFJLGtCQUFvQixFQUFlLFVBQUksYUFBZSxFQUFPLEtBQU8sTUFBUSxFQUFPLElBQU0sT0FFN0YsRUFBSSxLQUFPLEVBQU8sS0FDbEIsRUFBSSxJQUFNLEVBQU8sS0FFWCxLQVlWLElBR0MsR0FBaUIsU0FBUyxHQUN6QixHQUFHLEVBQUksYUFBc0IsT0FBRyxDQUMvQixHQUFJLEdBQUssRUFBSSxhQUFzQixPQUFFLEtBQUssU0FDdkMsR0FBRyxTQUVELElBQ0gsRUFBRyxHQUFHLElBUkcsaUJBWVAsRUFBSSxPQUNOLEVBQUcsSUFBSSxVQUFXLEVBQVksUUFBVSxVQU03QyxHQUFFLGNBQWMsZUFwQkEsVUFzQmYsU0FDQyxPQUFRLDZKQUtSLFVBQVcsYUFHWCxVQUNDLFNBQ0MsTUFBTyxjQUNQLEdBQUksS0FDSixJQUFLLDJDQUVOLE9BQ0MsTUFBTyxhQUNQLEdBQUksSUFDSixJQUFLLDRDQUVOLE9BQ0MsTUFBTyxpQkFDUCxJQUFLLHVCQUtSLE9BQ0MsV0FBWSxXQUNYLEVBQUksTUFBTSxLQW5ERyxVQXFEYixFQUFPLGVBQWdCLFNBQVMsRUFBRyxFQUFVLEdBQ3pDLElBQWEsSUF0REosV0F1RFIsRUFDRixJQXhEVSxXQXlERCxHQUNULEdBQWUsTUFPbEIsRUFBTyxlQUErQixXQUNyQyxPQUlGLFVBQVcsU0FBUyxFQUFNLEdBQ3pCLEdBQUksR0FBVyxFQUFLLElBQ2hCLEVBQVcsRUFBSSxHQUFHLE1BRXRCLEdBQUUsS0FBSyxFQUFTLFNBQVUsV0FDekIsR0FBRyxFQUFTLFFBQVMsS0FBSyxRQUFXLEVBU3BDLE1BUkcsTUFBSyxLQUVOLEVBRHFCLGdCQUFaLE1BQUssR0FDSCxFQUFTLE9BQU8sRUFBUyxZQUFZLEtBQUssSUFBSSxLQUFLLEdBQUcsT0FBUSxFQUFTLFFBRXZFLEtBQUssR0FBRyxLQUFNLEtBQU0sSUFHakMsRUFBVyxLQUFLLElBQUksUUFBUSxPQUFRLElBQzdCLEdBSVQsSUFBSSxLQVFKLE9BUEcsR0FBUyxZQUNYLEVBQVEsRUFBUyxXQUFhLEdBRS9CLEVBQUksYUFBYSxFQUFVLEVBQVMsR0FFcEMsRUFBSSxhQUFhLFNBRVYsS0FhVixJQUFJLEdBQWUsU0FBUyxHQUMxQixHQUFJLEdBQVksRUFBSSxNQUFNLE1BQzFCLE9BQUcsR0FBUSxFQUFZLEVBQ2YsRUFBUSxFQUNMLEVBQVEsRUFDWCxFQUFZLEVBRWIsR0FFUixFQUFvQixTQUFTLEVBQU0sRUFBTSxHQUN4QyxNQUFPLEdBQUssUUFBUSxXQUFZLEVBQU8sR0FBRyxRQUFRLFlBQWEsR0FHakUsR0FBRSxjQUFjLGVBQWUsV0FFOUIsU0FDQyxTQUFTLEVBQ1QsWUFBYSxvRkFDYixTQUFVLEVBQUUsR0FDWixvQkFBb0IsRUFDcEIsUUFBUSxFQUVSLE1BQU8sNEJBQ1AsTUFBTyx5QkFDUCxTQUFVLHFCQUdYLE9BQ0MsWUFBYSxXQUVaLEdBQUksR0FBTSxFQUFJLEdBQUcsUUFDaEIsRUFBSyxjQUlOLElBRkEsRUFBSSxXQUFZLEdBRVosSUFBUSxFQUFJLFFBQVUsT0FBTyxDQUVqQyxJQUFnQixlQUVoQixFQWhvRFcsT0Fnb0RPLEVBQUksV0FFbEIsRUFBSSxvQkFDTixFQUFJLEtBQUssR0FBRyxRQUFRLEVBQUksV0FBWSxXQUNuQyxHQUFHLEVBQUksTUFBTSxPQUFTLEVBRXJCLE1BREEsR0FBSSxRQUNHLElBS1YsRUFBVSxHQUFHLFVBQVUsRUFBSSxTQUFTLEdBQ2pCLEtBQWQsRUFBRSxRQUNMLEVBQUksT0FDb0IsS0FBZCxFQUFFLFNBQ1osRUFBSSxXQUtQLEVBQU8sZUFBZSxFQUFJLFNBQVMsRUFBRyxHQUNsQyxFQUFLLE9BQ1AsRUFBSyxLQUFPLEVBQWtCLEVBQUssS0FBTSxFQUFJLFNBQVMsTUFBTyxFQUFJLE1BQU0sV0FJekUsRUEzcERtQixjQTJwRE8sRUFBSSxTQUFTLEVBQUcsRUFBUyxFQUFRLEdBQzFELEdBQUksR0FBSSxFQUFJLE1BQU0sTUFDbEIsR0FBTyxRQUFVLEVBQUksRUFBSSxFQUFrQixFQUFJLFNBQVUsRUFBSyxNQUFPLEdBQUssS0FHM0UsRUFBTyxnQkFBa0IsRUFBSSxXQUM1QixHQUFHLEVBQUksTUFBTSxPQUFTLEdBQUssRUFBSSxTQUFXLEVBQUksVUFBVyxDQUN4RCxHQUFJLEdBQVMsRUFBSSxZQUNoQixFQUFZLEVBQUksVUFBWSxFQUFHLEVBQU8sUUFBUSxZQUFhLEVBQUksT0FBTyxRQUFRLFVBQVcsU0FBVSxTQTVwRGxGLHFCQTZwRGpCLEVBQWEsRUFBSSxXQUFhLEVBQUcsRUFBTyxRQUFRLFlBQWEsRUFBSSxPQUFPLFFBQVEsVUFBVyxVQUFXLFNBN3BEckYsb0JBK3BEbEIsR0FBVSxNQUFNLFdBQ2YsRUFBSSxTQUVMLEVBQVcsTUFBTSxXQUNoQixFQUFJLFNBR0wsRUFBSSxVQUFVLE9BQU8sRUFBVSxJQUFJLE9BSXJDLEVBL3FEYSxTQStxRE8sRUFBSSxXQUNwQixFQUFJLGlCQUFpQixhQUFhLEVBQUksaUJBRXpDLEVBQUksZ0JBQWtCLFdBQVcsV0FDaEMsRUFBSSxzQkFDSixFQUFJLGdCQUFrQixNQUNwQixNQUlKLEVBL3JEZSxRQStyREksRUFBSSxXQUN0QixFQUFVLElBQUksR0FDZCxFQUFJLEtBQUssSUFBSSxRQUFRLEdBQ3JCLEVBQUksV0FBYSxFQUFJLFVBQVksUUFJbkMsS0FBTSxXQUNMLEVBQUksV0FBWSxFQUNoQixFQUFJLE1BQVEsRUFBYSxFQUFJLE1BQVEsR0FDckMsRUFBSSxrQkFFTCxLQUFNLFdBQ0wsRUFBSSxXQUFZLEVBQ2hCLEVBQUksTUFBUSxFQUFhLEVBQUksTUFBUSxHQUNyQyxFQUFJLGtCQUVMLEtBQU0sU0FBUyxHQUNkLEVBQUksVUFBYSxHQUFZLEVBQUksTUFDakMsRUFBSSxNQUFRLEVBQ1osRUFBSSxrQkFFTCxvQkFBcUIsV0FDcEIsR0FHQyxHQUhHLEVBQUksRUFBSSxHQUFHLFFBQVEsUUFDdEIsRUFBZ0IsS0FBSyxJQUFJLEVBQUUsR0FBSSxFQUFJLE1BQU0sUUFDekMsRUFBZSxLQUFLLElBQUksRUFBRSxHQUFJLEVBQUksTUFBTSxPQUd6QyxLQUFJLEVBQUksRUFBRyxJQUFNLEVBQUksVUFBWSxFQUFlLEdBQWdCLElBQy9ELEVBQUksYUFBYSxFQUFJLE1BQU0sRUFFNUIsS0FBSSxFQUFJLEVBQUcsSUFBTSxFQUFJLFVBQVksRUFBZ0IsR0FBZSxJQUMvRCxFQUFJLGFBQWEsRUFBSSxNQUFNLElBRzdCLGFBQWMsU0FBUyxHQUd0QixHQUZBLEVBQVEsRUFBYSxJQUVsQixFQUFJLE1BQU0sR0FBTyxVQUFwQixDQUlBLEdBQUksR0FBTyxFQUFJLE1BQU0sRUFDakIsR0FBSyxTQUNSLEVBQU8sRUFBSSxRQUFTLElBR3JCLEVBQVksV0FBWSxHQUVQLFVBQWQsRUFBSyxPQUNQLEVBQUssSUFBTSxFQUFFLDJCQUEyQixHQUFHLGlCQUFrQixXQUM1RCxFQUFLLFNBQVUsSUFDYixHQUFHLGtCQUFtQixXQUN4QixFQUFLLFNBQVUsRUFDZixFQUFLLFdBQVksRUFDakIsRUFBWSxnQkFBaUIsS0FDM0IsS0FBSyxNQUFPLEVBQUssTUFJckIsRUFBSyxXQUFZLE1BV3BCLEdBQUUsY0FBYyxlQUZBLFVBR2YsU0FDQyxXQUFZLFNBQVMsR0FDcEIsTUFBTyxHQUFLLElBQUksUUFBUSxTQUFVLFNBQVMsR0FBSyxNQUFPLE1BQVEsS0FFaEUsTUFBTyxHQUVSLE9BQ0MsV0FBWSxXQUNYLEdBQUcsT0FBTyxpQkFBbUIsRUFBRyxDQUUvQixHQUFJLEdBQUssRUFBSSxHQUFHLE9BQ2YsRUFBUSxFQUFHLEtBRVosR0FBUyxNQUFNLEdBQWlCLElBQVIsRUFFckIsRUFBUSxJQUNWLEVBQU8sc0JBQWtDLFNBQVMsRUFBRyxHQUNwRCxFQUFLLElBQUksS0FDUixZQUFhLEVBQUssSUFBSSxHQUFHLGFBQWUsRUFDeEMsTUFBUyxXQUdYLEVBQU8sc0JBQWtDLFNBQVMsRUFBRyxHQUNwRCxFQUFLLElBQU0sRUFBRyxXQUFXLEVBQU0sV0FVcEM7OztDQzF6REEsU0FBVSxHQXNFVixRQUFTLEdBQWdCLEVBQU0sR0FFOUIsR0FBcUIsV0FBakIsRUFBTyxHQUVWLE1BQU8sRUFFUixLQUFLLEdBQUksS0FBTyxHQUVXLFdBQXRCLEVBQU8sRUFBSyxLQUE4QyxXQUF4QixFQUFPLEVBQU8sSUFFbkQsRUFBSyxHQUFPLEVBQWdCLEVBQUssR0FBTSxFQUFPLElBSTlDLEVBQUssR0FBTyxFQUFPLEVBTXJCLE9BQU8sR0FZUixRQUFTLEdBQU0sRUFBTyxFQUFXLEdBRWhDLEdBQUksR0FBUyxFQUFLLEdBQ2pCLEVBQU8sRUFBSyxRQUVULEdBQTRCLFdBQW5CLEVBQU8sTUFFbkIsS0FFRCxLQUFLLEdBQUksR0FBTSxFQUFFLEVBQU0sSUFBTyxFQUFPLENBRXBDLEdBQUksR0FBTyxFQUFLLEVBSWhCLElBQWEsV0FGTCxFQUFPLEdBSWYsSUFBSyxHQUFJLEtBQU8sR0FFZixHQUFZLGNBQVIsRUFBSixDQUVBLEdBQUksR0FBUSxFQUFRLEVBQU8sTUFBTSxFQUFLLElBQVEsRUFBSyxFQUlsRCxHQUFPLEdBRkosRUFFVyxFQUFnQixFQUFPLEdBQU0sR0FJN0IsR0FRakIsTUFBTyxHQVlSLFFBQVMsR0FBTyxHQUVmLFNBQVksU0FBUyxLQUFLLEdBQU8sTUFBTSxHQUFJLEdBQUcsY0FoSi9DLEdBQUksR0FBUyxTQUFTLEdBRXJCLE1BQU8sSUFBZ0IsSUFBVixHQUFnQixFQUFPLFdBV3JDLEdBQU8sVUFBWSxTQUFTLEdBRTNCLE1BQU8sSUFBZ0IsSUFBVixHQUFnQixFQUFNLFlBVXBDLEVBQU8sTUFBUSxTQUFTLEdBRXZCLEdBRUMsR0FBTyxFQUZKLEVBQVMsRUFDWixFQUFPLEVBQU8sRUFHZixJQUFhLFVBQVQsRUFLSCxJQUhBLEtBQ0EsRUFBTyxFQUFNLE9BRVIsRUFBTSxFQUFFLEVBQU0sSUFBTyxFQUV6QixFQUFPLEdBQVMsRUFBTyxNQUFNLEVBQU0sUUFFOUIsSUFBYSxXQUFULEVBQW1CLENBRTdCLElBRUEsS0FBSyxJQUFTLEdBRWIsRUFBTyxHQUFTLEVBQU8sTUFBTSxFQUFNLElBSXJDLE1BQU8sSUFrR0osRUFFSCxPQUFPLFFBQVUsRUFJakIsT0FBaUIsTUFBSSxHQUlGLGdCQUFYLFNBQXVCLFFBQW9DLGdCQUFuQixRQUFPLFNBQXdCLE9BQU87OztDQzlLdEYsU0FBVSxFQUFRLEdBQ0csZ0JBQVosVUFBMEMsbUJBQVgsUUFBeUIsT0FBTyxRQUFVLElBQzlELGtCQUFYLFNBQXlCLE9BQU8sSUFBTSxPQUFPLEdBQ3BELEVBQU8sT0FBUyxLQUNsQixLQUFNLFdBQWUsWUFJbkIsU0FBUyxLQUNMLE1BQU8sSUFBYSxNQUFNLEtBQU0sV0FTcEMsUUFBUyxHQUFRLEdBQ2IsTUFBTyxhQUFpQixRQUFtRCxtQkFBMUMsT0FBTyxVQUFVLFNBQVMsS0FBSyxHQUdwRSxRQUFTLEdBQVMsR0FHZCxNQUFnQixPQUFULEdBQTJELG9CQUExQyxPQUFPLFVBQVUsU0FBUyxLQUFLLEdBRzNELFFBQVMsR0FBYyxHQUNuQixHQUFJLE9BQU8sb0JBQ1AsTUFBbUQsS0FBM0MsT0FBTyxvQkFBb0IsR0FBSyxNQUV4QyxJQUFJLEVBQ0osS0FBSyxJQUFLLEdBQ04sR0FBSSxFQUFJLGVBQWUsR0FDbkIsT0FBTyxDQUdmLFFBQU8sRUFJZixRQUFTLEdBQVksR0FDakIsV0FBaUIsS0FBVixFQUdYLFFBQVMsR0FBUyxHQUNkLE1BQXdCLGdCQUFWLElBQWdFLG9CQUExQyxPQUFPLFVBQVUsU0FBUyxLQUFLLEdBR3ZFLFFBQVMsR0FBTyxHQUNaLE1BQU8sYUFBaUIsT0FBa0Qsa0JBQTFDLE9BQU8sVUFBVSxTQUFTLEtBQUssR0FHbkUsUUFBUyxHQUFJLEVBQUssR0FDZCxHQUFjLEdBQVYsSUFDSixLQUFLLEVBQUksRUFBRyxFQUFJLEVBQUksU0FBVSxFQUMxQixFQUFJLEtBQUssRUFBRyxFQUFJLEdBQUksR0FFeEIsT0FBTyxHQUdYLFFBQVMsR0FBVyxFQUFHLEdBQ25CLE1BQU8sUUFBTyxVQUFVLGVBQWUsS0FBSyxFQUFHLEdBR25ELFFBQVMsR0FBTyxFQUFHLEdBQ2YsSUFBSyxHQUFJLEtBQUssR0FDTixFQUFXLEVBQUcsS0FDZCxFQUFFLEdBQUssRUFBRSxHQVlqQixPQVJJLEdBQVcsRUFBRyxjQUNkLEVBQUUsU0FBVyxFQUFFLFVBR2YsRUFBVyxFQUFHLGFBQ2QsRUFBRSxRQUFVLEVBQUUsU0FHWCxFQUdYLFFBQVMsR0FBVyxFQUFPLEVBQVEsRUFBUSxHQUN2QyxNQUFPLElBQWlCLEVBQU8sRUFBUSxFQUFRLEdBQVEsR0FBTSxNQUdqRSxRQUFTLEtBRUwsT0FDSSxPQUFrQixFQUNsQixnQkFDQSxlQUNBLFVBQW1CLEVBQ25CLGNBQWtCLEVBQ2xCLFdBQWtCLEVBQ2xCLGFBQWtCLEtBQ2xCLGVBQWtCLEVBQ2xCLGlCQUFrQixFQUNsQixLQUFrQixFQUNsQixtQkFDQSxTQUFrQixLQUNsQixTQUFrQixFQUNsQixpQkFBa0IsR0FJMUIsUUFBUyxHQUFnQixHQUlyQixNQUhhLE9BQVQsRUFBRSxNQUNGLEVBQUUsSUFBTSxLQUVMLEVBQUUsSUFxQmIsUUFBUyxHQUFRLEdBQ2IsR0FBa0IsTUFBZCxFQUFFLFNBQWtCLENBQ3BCLEdBQUksR0FBUSxFQUFnQixHQUN4QixFQUFjLEdBQUssS0FBSyxFQUFNLGdCQUFpQixTQUFVLEdBQ3pELE1BQVksT0FBTCxJQUVQLEdBQWMsTUFBTSxFQUFFLEdBQUcsWUFDekIsRUFBTSxTQUFXLElBQ2hCLEVBQU0sUUFDTixFQUFNLGVBQ04sRUFBTSxpQkFDTixFQUFNLGtCQUNOLEVBQU0sWUFDTixFQUFNLGdCQUNOLEVBQU0sbUJBQ0wsRUFBTSxVQUFhLEVBQU0sVUFBWSxFQVMzQyxJQVBJLEVBQUUsVUFDRixFQUFhLEdBQ2UsSUFBeEIsRUFBTSxlQUN3QixJQUE5QixFQUFNLGFBQWEsWUFDRCxLQUFsQixFQUFNLFNBR1MsTUFBbkIsT0FBTyxVQUFxQixPQUFPLFNBQVMsR0FJNUMsTUFBTyxFQUhQLEdBQUUsU0FBVyxFQU1yQixNQUFPLEdBQUUsU0FHYixRQUFTLEdBQWUsR0FDcEIsR0FBSSxHQUFJLEVBQVUsSUFRbEIsT0FQYSxPQUFULEVBQ0EsRUFBTyxFQUFnQixHQUFJLEdBRzNCLEVBQWdCLEdBQUcsaUJBQWtCLEVBR2xDLEVBT1gsUUFBUyxHQUFXLEVBQUksR0FDcEIsR0FBSSxHQUFHLEVBQU0sQ0FpQ2IsSUEvQkssRUFBWSxFQUFLLG9CQUNsQixFQUFHLGlCQUFtQixFQUFLLGtCQUUxQixFQUFZLEVBQUssTUFDbEIsRUFBRyxHQUFLLEVBQUssSUFFWixFQUFZLEVBQUssTUFDbEIsRUFBRyxHQUFLLEVBQUssSUFFWixFQUFZLEVBQUssTUFDbEIsRUFBRyxHQUFLLEVBQUssSUFFWixFQUFZLEVBQUssV0FDbEIsRUFBRyxRQUFVLEVBQUssU0FFakIsRUFBWSxFQUFLLFFBQ2xCLEVBQUcsS0FBTyxFQUFLLE1BRWQsRUFBWSxFQUFLLFVBQ2xCLEVBQUcsT0FBUyxFQUFLLFFBRWhCLEVBQVksRUFBSyxXQUNsQixFQUFHLFFBQVUsRUFBSyxTQUVqQixFQUFZLEVBQUssT0FDbEIsRUFBRyxJQUFNLEVBQWdCLElBRXhCLEVBQVksRUFBSyxXQUNsQixFQUFHLFFBQVUsRUFBSyxTQUdsQixHQUFpQixPQUFTLEVBQzFCLElBQUssRUFBSSxFQUFHLEVBQUksR0FBaUIsT0FBUSxJQUNyQyxFQUFPLEdBQWlCLEdBQ3hCLEVBQU0sRUFBSyxHQUNOLEVBQVksS0FDYixFQUFHLEdBQVEsRUFLdkIsT0FBTyxHQU1YLFFBQVMsR0FBTyxHQUNaLEVBQVcsS0FBTSxHQUNqQixLQUFLLEdBQUssR0FBSSxNQUFrQixNQUFiLEVBQU8sR0FBYSxFQUFPLEdBQUcsVUFBWSxLQUN4RCxLQUFLLFlBQ04sS0FBSyxHQUFLLEdBQUksTUFBSyxPQUlFLElBQXJCLEtBQ0EsSUFBbUIsRUFDbkIsRUFBTSxhQUFhLE1BQ25CLElBQW1CLEdBSTNCLFFBQVMsR0FBVSxHQUNmLE1BQU8sYUFBZSxJQUFrQixNQUFQLEdBQXVDLE1BQXhCLEVBQUksaUJBR3hELFFBQVMsR0FBVSxHQUNmLE1BQUksR0FBUyxFQUVGLEtBQUssS0FBSyxJQUFXLEVBRXJCLEtBQUssTUFBTSxHQUkxQixRQUFTLEdBQU0sR0FDWCxHQUFJLElBQWlCLEVBQ2pCLEVBQVEsQ0FNWixPQUpzQixLQUFsQixHQUF1QixTQUFTLEtBQ2hDLEVBQVEsRUFBUyxJQUdkLEVBSVgsUUFBUyxHQUFjLEVBQVEsRUFBUSxHQUNuQyxHQUdJLEdBSEEsRUFBTSxLQUFLLElBQUksRUFBTyxPQUFRLEVBQU8sUUFDckMsRUFBYSxLQUFLLElBQUksRUFBTyxPQUFTLEVBQU8sUUFDN0MsRUFBUSxDQUVaLEtBQUssRUFBSSxFQUFHLEVBQUksRUFBSyxLQUNaLEdBQWUsRUFBTyxLQUFPLEVBQU8sS0FDbkMsR0FBZSxFQUFNLEVBQU8sTUFBUSxFQUFNLEVBQU8sTUFDbkQsR0FHUixPQUFPLEdBQVEsRUFHbkIsUUFBUyxHQUFLLElBQ2dDLElBQXRDLEVBQU0sNkJBQ21CLG1CQUFiLFVBQTZCLFFBQVEsTUFDakQsUUFBUSxLQUFLLHdCQUEwQixHQUkvQyxRQUFTLEdBQVUsRUFBSyxHQUNwQixHQUFJLElBQVksQ0FFaEIsT0FBTyxHQUFPLFdBSVYsR0FIZ0MsTUFBNUIsRUFBTSxvQkFDTixFQUFNLG1CQUFtQixLQUFNLEdBRS9CLEVBQVcsQ0FHWCxJQUFLLEdBREQsR0FEQSxLQUVLLEVBQUksRUFBRyxFQUFJLFVBQVUsT0FBUSxJQUFLLENBRXZDLEdBREEsRUFBTSxHQUNzQixnQkFBakIsV0FBVSxHQUFpQixDQUNsQyxHQUFPLE1BQVEsRUFBSSxJQUNuQixLQUFLLEdBQUksS0FBTyxXQUFVLEdBQ3RCLEdBQU8sRUFBTSxLQUFPLFVBQVUsR0FBRyxHQUFPLElBRTVDLEdBQU0sRUFBSSxNQUFNLEdBQUksT0FFcEIsR0FBTSxVQUFVLEVBRXBCLEdBQUssS0FBSyxHQUVkLEVBQUssRUFBTSxnQkFBa0IsTUFBTSxVQUFVLE1BQU0sS0FBSyxHQUFNLEtBQUssSUFBTSxNQUFPLEdBQUssUUFBUyxPQUM5RixHQUFZLEVBRWhCLE1BQU8sR0FBRyxNQUFNLEtBQU0sWUFDdkIsR0FLUCxRQUFTLEdBQWdCLEVBQU0sR0FDSyxNQUE1QixFQUFNLG9CQUNOLEVBQU0sbUJBQW1CLEVBQU0sR0FFOUIsR0FBYSxLQUNkLEVBQUssR0FDTCxHQUFhLElBQVEsR0FPN0IsUUFBUyxHQUFXLEdBQ2hCLE1BQU8sYUFBaUIsV0FBc0Qsc0JBQTFDLE9BQU8sVUFBVSxTQUFTLEtBQUssR0FHdkUsUUFBUyxHQUFLLEdBQ1YsR0FBSSxHQUFNLENBQ1YsS0FBSyxJQUFLLEdBQ04sRUFBTyxFQUFPLEdBQ1YsRUFBVyxHQUNYLEtBQUssR0FBSyxFQUVWLEtBQUssSUFBTSxHQUFLLENBR3hCLE1BQUssUUFBVSxFQUlmLEtBQUssK0JBQWlDLEdBQUksU0FDckMsS0FBSyx3QkFBd0IsUUFBVSxLQUFLLGNBQWMsUUFDdkQsSUFBTSxVQUFZLFFBRzlCLFFBQVMsR0FBYSxFQUFjLEdBQ2hDLEdBQW9DLEdBQWhDLEVBQU0sS0FBVyxFQUNyQixLQUFLLElBQVEsR0FDTCxFQUFXLEVBQWEsS0FDcEIsRUFBUyxFQUFhLEtBQVUsRUFBUyxFQUFZLEtBQ3JELEVBQUksTUFDSixFQUFPLEVBQUksR0FBTyxFQUFhLElBQy9CLEVBQU8sRUFBSSxHQUFPLEVBQVksS0FDRixNQUFyQixFQUFZLEdBQ25CLEVBQUksR0FBUSxFQUFZLFNBRWpCLEdBQUksR0FJdkIsS0FBSyxJQUFRLEdBQ0wsRUFBVyxFQUFjLEtBQ3BCLEVBQVcsRUFBYSxJQUN6QixFQUFTLEVBQWEsTUFFMUIsRUFBSSxHQUFRLEtBQVcsRUFBSSxJQUduQyxPQUFPLEdBR1gsUUFBUyxHQUFPLEdBQ0UsTUFBVixHQUNBLEtBQUssSUFBSSxHQTZCakIsUUFBUyxHQUFVLEVBQUssRUFBSyxHQUN6QixHQUFJLEdBQVMsS0FBSyxVQUFVLElBQVEsS0FBSyxVQUFvQixRQUM3RCxPQUFPLEdBQVcsR0FBVSxFQUFPLEtBQUssRUFBSyxHQUFPLEVBWXhELFFBQVMsR0FBZ0IsR0FDckIsR0FBSSxHQUFTLEtBQUssZ0JBQWdCLEdBQzlCLEVBQWMsS0FBSyxnQkFBZ0IsRUFBSSxjQUUzQyxPQUFJLEtBQVcsRUFDSixHQUdYLEtBQUssZ0JBQWdCLEdBQU8sRUFBWSxRQUFRLG1CQUFvQixTQUFVLEdBQzFFLE1BQU8sR0FBSSxNQUFNLEtBR2QsS0FBSyxnQkFBZ0IsSUFLaEMsUUFBUyxLQUNMLE1BQU8sTUFBSyxhQU1oQixRQUFTLEdBQVMsR0FDZCxNQUFPLE1BQUssU0FBUyxRQUFRLEtBQU0sR0FvQnZDLFFBQVMsR0FBYyxFQUFRLEVBQWUsRUFBUSxHQUNsRCxHQUFJLEdBQVMsS0FBSyxjQUFjLEVBQ2hDLE9BQVEsR0FBVyxHQUNmLEVBQU8sRUFBUSxFQUFlLEVBQVEsR0FDdEMsRUFBTyxRQUFRLE1BQU8sR0FHOUIsUUFBUyxHQUFZLEVBQU0sR0FDdkIsR0FBSSxHQUFTLEtBQUssY0FBYyxFQUFPLEVBQUksU0FBVyxPQUN0RCxPQUFPLEdBQVcsR0FBVSxFQUFPLEdBQVUsRUFBTyxRQUFRLE1BQU8sR0FLdkUsUUFBUyxHQUFjLEVBQU0sR0FDekIsR0FBSSxHQUFZLEVBQUssYUFDckIsSUFBUSxHQUFhLEdBQVEsRUFBWSxLQUFPLEdBQVEsR0FBYSxFQUd6RSxRQUFTLEdBQWUsR0FDcEIsTUFBd0IsZ0JBQVYsR0FBcUIsR0FBUSxJQUFVLEdBQVEsRUFBTSxtQkFBaUIsR0FHeEYsUUFBUyxHQUFxQixHQUMxQixHQUNJLEdBQ0EsRUFGQSxJQUlKLEtBQUssSUFBUSxHQUNMLEVBQVcsRUFBYSxLQUN4QixFQUFpQixFQUFlLE1BRTVCLEVBQWdCLEdBQWtCLEVBQVksR0FLMUQsT0FBTyxHQUtYLFFBQVMsR0FBZ0IsRUFBTSxHQUMzQixHQUFXLEdBQVEsRUFHdkIsUUFBUyxHQUFvQixHQUN6QixHQUFJLEtBQ0osS0FBSyxHQUFJLEtBQUssR0FDVixFQUFNLE1BQU0sS0FBTSxFQUFHLFNBQVUsR0FBVyxJQUs5QyxPQUhBLEdBQU0sS0FBSyxTQUFVLEVBQUcsR0FDcEIsTUFBTyxHQUFFLFNBQVcsRUFBRSxXQUVuQixFQUdYLFFBQVMsR0FBUyxFQUFRLEVBQWMsR0FDcEMsR0FBSSxHQUFZLEdBQUssS0FBSyxJQUFJLEdBQzFCLEVBQWMsRUFBZSxFQUFVLE1BRTNDLFFBRFcsR0FBVSxFQUNMLEVBQVksSUFBTSxHQUFNLEtBQ3BDLEtBQUssSUFBSSxHQUFJLEtBQUssSUFBSSxFQUFHLElBQWMsV0FBVyxPQUFPLEdBQUssRUFldEUsUUFBUyxHQUFnQixFQUFPLEVBQVEsRUFBUyxHQUM3QyxHQUFJLEdBQU8sQ0FDYSxpQkFBYixLQUNQLEVBQU8sV0FDSCxNQUFPLE1BQUssT0FHaEIsSUFDQSxHQUFxQixHQUFTLEdBRTlCLElBQ0EsR0FBcUIsRUFBTyxJQUFNLFdBQzlCLE1BQU8sR0FBUyxFQUFLLE1BQU0sS0FBTSxXQUFZLEVBQU8sR0FBSSxFQUFPLE1BR25FLElBQ0EsR0FBcUIsR0FBVyxXQUM1QixNQUFPLE1BQUssYUFBYSxRQUFRLEVBQUssTUFBTSxLQUFNLFdBQVksS0FLMUUsUUFBUyxHQUF1QixHQUM1QixNQUFJLEdBQU0sTUFBTSxZQUNMLEVBQU0sUUFBUSxXQUFZLElBRTlCLEVBQU0sUUFBUSxNQUFPLElBR2hDLFFBQVMsR0FBbUIsR0FDeEIsR0FBNEMsR0FBRyxFQUEzQyxFQUFRLEVBQU8sTUFBTSxHQUV6QixLQUFLLEVBQUksRUFBRyxFQUFTLEVBQU0sT0FBUSxFQUFJLEVBQVEsSUFDdkMsR0FBcUIsRUFBTSxJQUMzQixFQUFNLEdBQUssR0FBcUIsRUFBTSxJQUV0QyxFQUFNLEdBQUssRUFBdUIsRUFBTSxHQUloRCxPQUFPLFVBQVUsR0FDYixHQUFpQixHQUFiLEVBQVMsRUFDYixLQUFLLEVBQUksRUFBRyxFQUFJLEVBQVEsSUFDcEIsR0FBVSxFQUFXLEVBQU0sSUFBTSxFQUFNLEdBQUcsS0FBSyxFQUFLLEdBQVUsRUFBTSxFQUV4RSxPQUFPLElBS2YsUUFBUyxHQUFhLEVBQUcsR0FDckIsTUFBSyxHQUFFLFdBSVAsRUFBUyxFQUFhLEVBQVEsRUFBRSxjQUNoQyxHQUFnQixHQUFVLEdBQWdCLElBQVcsRUFBbUIsR0FFakUsR0FBZ0IsR0FBUSxJQU5wQixFQUFFLGFBQWEsY0FTOUIsUUFBUyxHQUFhLEVBQVEsR0FHMUIsUUFBUyxHQUE0QixHQUNqQyxNQUFPLEdBQU8sZUFBZSxJQUFVLEVBSDNDLEdBQUksR0FBSSxDQU9SLEtBREEsR0FBc0IsVUFBWSxFQUMzQixHQUFLLEdBQUssR0FBc0IsS0FBSyxJQUN4QyxFQUFTLEVBQU8sUUFBUSxHQUF1QixHQUMvQyxHQUFzQixVQUFZLEVBQ2xDLEdBQUssQ0FHVCxPQUFPLEdBNkJYLFFBQVMsR0FBZSxFQUFPLEVBQU8sR0FDbEMsR0FBUSxHQUFTLEVBQVcsR0FBUyxFQUFRLFNBQVUsRUFBVSxHQUM3RCxNQUFRLElBQVksRUFBZSxFQUFjLEdBSXpELFFBQVMsR0FBdUIsRUFBTyxHQUNuQyxNQUFLLEdBQVcsR0FBUyxHQUlsQixHQUFRLEdBQU8sRUFBTyxRQUFTLEVBQU8sU0FIbEMsR0FBSSxRQUFPLEVBQWUsSUFPekMsUUFBUyxHQUFlLEdBQ3BCLE1BQU8sR0FBWSxFQUFFLFFBQVEsS0FBTSxJQUFJLFFBQVEsc0NBQXVDLFNBQVUsRUFBUyxFQUFJLEVBQUksRUFBSSxHQUNqSCxNQUFPLElBQU0sR0FBTSxHQUFNLEtBSWpDLFFBQVMsR0FBWSxHQUNqQixNQUFPLEdBQUUsUUFBUSx5QkFBMEIsUUFLL0MsUUFBUyxHQUFlLEVBQU8sR0FDM0IsR0FBSSxHQUFHLEVBQU8sQ0FTZCxLQVJxQixnQkFBVixLQUNQLEdBQVMsSUFFVCxFQUFTLEtBQ1QsRUFBTyxTQUFVLEVBQU8sR0FDcEIsRUFBTSxHQUFZLEVBQU0sS0FHM0IsRUFBSSxFQUFHLEVBQUksRUFBTSxPQUFRLElBQzFCLEdBQU8sRUFBTSxJQUFNLEVBSTNCLFFBQVMsR0FBbUIsRUFBTyxHQUMvQixFQUFjLEVBQU8sU0FBVSxFQUFPLEVBQU8sRUFBUSxHQUNqRCxFQUFPLEdBQUssRUFBTyxPQUNuQixFQUFTLEVBQU8sRUFBTyxHQUFJLEVBQVEsS0FJM0MsUUFBUyxHQUF3QixFQUFPLEVBQU8sR0FDOUIsTUFBVCxHQUFpQixFQUFXLEdBQVEsSUFDcEMsR0FBTyxHQUFPLEVBQU8sRUFBTyxHQUFJLEVBQVEsR0EwRGhELFFBQVMsR0FBVyxHQUNoQixNQUFPLEdBQVcsR0FBUSxJQUFNLElBR3BDLFFBQVMsR0FBVyxHQUNoQixNQUFRLEdBQU8sR0FBTSxHQUFLLEVBQU8sS0FBUSxHQUFNLEVBQU8sS0FBUSxFQWFsRSxRQUFTLE1BQ0wsTUFBTyxHQUFXLEtBQUssUUFHM0IsUUFBUyxJQUFZLEVBQU0sR0FDdkIsTUFBTyxVQUFVLEdBQ2IsTUFBYSxPQUFULEdBQ0EsR0FBTSxLQUFNLEVBQU0sR0FDbEIsRUFBTSxhQUFhLEtBQU0sR0FDbEIsTUFFQSxHQUFJLEtBQU0sSUFLN0IsUUFBUyxJQUFLLEVBQUssR0FDZixNQUFPLEdBQUksVUFDUCxFQUFJLEdBQUcsT0FBUyxFQUFJLE9BQVMsTUFBUSxJQUFNLEtBQVUsSUFHN0QsUUFBUyxJQUFPLEVBQUssRUFBTSxHQUNuQixFQUFJLFlBQWMsTUFBTSxLQUNYLGFBQVQsR0FBdUIsRUFBVyxFQUFJLFNBQTJCLElBQWhCLEVBQUksU0FBZ0MsS0FBZixFQUFJLE9BQzFFLEVBQUksR0FBRyxPQUFTLEVBQUksT0FBUyxNQUFRLElBQU0sR0FBTSxFQUFPLEVBQUksUUFBUyxHQUFZLEVBQU8sRUFBSSxVQUc1RixFQUFJLEdBQUcsT0FBUyxFQUFJLE9BQVMsTUFBUSxJQUFNLEdBQU0sSUFPN0QsUUFBUyxJQUFXLEdBRWhCLE1BREEsR0FBUSxFQUFlLEdBQ25CLEVBQVcsS0FBSyxJQUNULEtBQUssS0FFVCxLQUlYLFFBQVMsSUFBVyxFQUFPLEdBQ3ZCLEdBQXFCLGdCQUFWLEdBQW9CLENBQzNCLEVBQVEsRUFBcUIsRUFFN0IsS0FBSyxHQURELEdBQWMsRUFBb0IsR0FDN0IsRUFBSSxFQUFHLEVBQUksRUFBWSxPQUFRLElBQ3BDLEtBQUssRUFBWSxHQUFHLE1BQU0sRUFBTSxFQUFZLEdBQUcsV0FJbkQsSUFEQSxFQUFRLEVBQWUsR0FDbkIsRUFBVyxLQUFLLElBQ2hCLE1BQU8sTUFBSyxHQUFPLEVBRzNCLE9BQU8sTUFHWCxRQUFTLElBQUksRUFBRyxHQUNaLE9BQVMsRUFBSSxFQUFLLEdBQUssRUFvQjNCLFFBQVMsSUFBWSxFQUFNLEdBQ3ZCLEdBQUksTUFBTSxJQUFTLE1BQU0sR0FDckIsTUFBTyxJQUVYLElBQUksR0FBVyxHQUFJLEVBQU8sR0FFMUIsT0FEQSxLQUFTLEVBQVEsR0FBWSxHQUNULElBQWIsRUFBa0IsRUFBVyxHQUFRLEdBQUssR0FBTyxHQUFLLEVBQVcsRUFBSSxFQXNEaEYsUUFBUyxJQUFjLEVBQUcsR0FDdEIsTUFBSyxHQUlFLEVBQVEsS0FBSyxTQUFXLEtBQUssUUFBUSxFQUFFLFNBQzFDLEtBQUssU0FBUyxLQUFLLFFBQVEsVUFBWSxJQUFrQixLQUFLLEdBQVUsU0FBVyxjQUFjLEVBQUUsU0FKNUYsRUFBUSxLQUFLLFNBQVcsS0FBSyxRQUNoQyxLQUFLLFFBQW9CLFdBT3JDLFFBQVMsSUFBbUIsRUFBRyxHQUMzQixNQUFLLEdBSUUsRUFBUSxLQUFLLGNBQWdCLEtBQUssYUFBYSxFQUFFLFNBQ3BELEtBQUssYUFBYSxHQUFpQixLQUFLLEdBQVUsU0FBVyxjQUFjLEVBQUUsU0FKdEUsRUFBUSxLQUFLLGNBQWdCLEtBQUssYUFDckMsS0FBSyxhQUF5QixXQU0xQyxRQUFTLElBQWtCLEVBQVcsRUFBUSxHQUMxQyxHQUFJLEdBQUcsRUFBSSxFQUFLLEVBQU0sRUFBVSxtQkFDaEMsS0FBSyxLQUFLLGFBS04sSUFIQSxLQUFLLGdCQUNMLEtBQUssb0JBQ0wsS0FBSyxxQkFDQSxFQUFJLEVBQUcsRUFBSSxLQUFNLEVBQ2xCLEVBQU0sR0FBVyxJQUFNLElBQ3ZCLEtBQUssa0JBQWtCLEdBQUssS0FBSyxZQUFZLEVBQUssSUFBSSxvQkFDdEQsS0FBSyxpQkFBaUIsR0FBSyxLQUFLLE9BQU8sRUFBSyxJQUFJLG1CQUl4RCxPQUFJLEdBQ2UsUUFBWCxHQUNBLEVBQUssR0FBUSxLQUFLLEtBQUssa0JBQW1CLElBQzNCLElBQVIsRUFBWSxFQUFLLE9BRXhCLEVBQUssR0FBUSxLQUFLLEtBQUssaUJBQWtCLElBQzFCLElBQVIsRUFBWSxFQUFLLE1BR2IsUUFBWCxHQUVZLEtBRFosRUFBSyxHQUFRLEtBQUssS0FBSyxrQkFBbUIsSUFFL0IsR0FFWCxFQUFLLEdBQVEsS0FBSyxLQUFLLGlCQUFrQixJQUMxQixJQUFSLEVBQVksRUFBSyxPQUdaLEtBRFosRUFBSyxHQUFRLEtBQUssS0FBSyxpQkFBa0IsSUFFOUIsR0FFWCxFQUFLLEdBQVEsS0FBSyxLQUFLLGtCQUFtQixJQUMzQixJQUFSLEVBQVksRUFBSyxNQUtwQyxRQUFTLElBQW1CLEVBQVcsRUFBUSxHQUMzQyxHQUFJLEdBQUcsRUFBSyxDQUVaLElBQUksS0FBSyxrQkFDTCxNQUFPLElBQWtCLEtBQUssS0FBTSxFQUFXLEVBQVEsRUFZM0QsS0FUSyxLQUFLLGVBQ04sS0FBSyxnQkFDTCxLQUFLLG9CQUNMLEtBQUssc0JBTUosRUFBSSxFQUFHLEVBQUksR0FBSSxJQUFLLENBWXJCLEdBVkEsRUFBTSxHQUFXLElBQU0sSUFDbkIsSUFBVyxLQUFLLGlCQUFpQixLQUNqQyxLQUFLLGlCQUFpQixHQUFLLEdBQUksUUFBTyxJQUFNLEtBQUssT0FBTyxFQUFLLElBQUksUUFBUSxJQUFLLElBQU0sSUFBSyxLQUN6RixLQUFLLGtCQUFrQixHQUFLLEdBQUksUUFBTyxJQUFNLEtBQUssWUFBWSxFQUFLLElBQUksUUFBUSxJQUFLLElBQU0sSUFBSyxNQUU5RixHQUFXLEtBQUssYUFBYSxLQUM5QixFQUFRLElBQU0sS0FBSyxPQUFPLEVBQUssSUFBTSxLQUFPLEtBQUssWUFBWSxFQUFLLElBQ2xFLEtBQUssYUFBYSxHQUFLLEdBQUksUUFBTyxFQUFNLFFBQVEsSUFBSyxJQUFLLE1BRzFELEdBQXFCLFNBQVgsR0FBcUIsS0FBSyxpQkFBaUIsR0FBRyxLQUFLLEdBQzdELE1BQU8sRUFDSixJQUFJLEdBQXFCLFFBQVgsR0FBb0IsS0FBSyxrQkFBa0IsR0FBRyxLQUFLLEdBQ3BFLE1BQU8sRUFDSixLQUFLLEdBQVUsS0FBSyxhQUFhLEdBQUcsS0FBSyxHQUM1QyxNQUFPLElBT25CLFFBQVMsSUFBVSxFQUFLLEdBQ3BCLEdBQUksRUFFSixLQUFLLEVBQUksVUFFTCxNQUFPLEVBR1gsSUFBcUIsZ0JBQVYsR0FDUCxHQUFJLFFBQVEsS0FBSyxHQUNiLEVBQVEsRUFBTSxPQUlkLElBRkEsRUFBUSxFQUFJLGFBQWEsWUFBWSxJQUVoQyxFQUFTLEdBQ1YsTUFBTyxFQU9uQixPQUZBLEdBQWEsS0FBSyxJQUFJLEVBQUksT0FBUSxHQUFZLEVBQUksT0FBUSxJQUMxRCxFQUFJLEdBQUcsT0FBUyxFQUFJLE9BQVMsTUFBUSxJQUFNLFNBQVMsRUFBTyxHQUNwRCxFQUdYLFFBQVMsSUFBYSxHQUNsQixNQUFhLE9BQVQsR0FDQSxHQUFTLEtBQU0sR0FDZixFQUFNLGFBQWEsTUFBTSxHQUNsQixNQUVBLEdBQUksS0FBTSxTQUl6QixRQUFTLE1BQ0wsTUFBTyxJQUFZLEtBQUssT0FBUSxLQUFLLFNBSXpDLFFBQVMsSUFBa0IsR0FDdkIsTUFBSSxNQUFLLG1CQUNBLEVBQVcsS0FBTSxpQkFDbEIsR0FBbUIsS0FBSyxNQUV4QixFQUNPLEtBQUssd0JBRUwsS0FBSyxvQkFHWCxFQUFXLEtBQU0sdUJBQ2xCLEtBQUssa0JBQW9CLElBRXRCLEtBQUsseUJBQTJCLEVBQ25DLEtBQUssd0JBQTBCLEtBQUssbUJBS2hELFFBQVMsSUFBYSxHQUNsQixNQUFJLE1BQUssbUJBQ0EsRUFBVyxLQUFNLGlCQUNsQixHQUFtQixLQUFLLE1BRXhCLEVBQ08sS0FBSyxtQkFFTCxLQUFLLGVBR1gsRUFBVyxLQUFNLGtCQUNsQixLQUFLLGFBQWUsSUFFakIsS0FBSyxvQkFBc0IsRUFDOUIsS0FBSyxtQkFBcUIsS0FBSyxjQUkzQyxRQUFTLE1BQ0wsUUFBUyxHQUFVLEVBQUcsR0FDbEIsTUFBTyxHQUFFLE9BQVMsRUFBRSxPQUd4QixHQUNJLEdBQUcsRUFESCxLQUFrQixLQUFpQixJQUV2QyxLQUFLLEVBQUksRUFBRyxFQUFJLEdBQUksSUFFaEIsRUFBTSxHQUFXLElBQU0sSUFDdkIsRUFBWSxLQUFLLEtBQUssWUFBWSxFQUFLLEtBQ3ZDLEVBQVcsS0FBSyxLQUFLLE9BQU8sRUFBSyxLQUNqQyxFQUFZLEtBQUssS0FBSyxPQUFPLEVBQUssS0FDbEMsRUFBWSxLQUFLLEtBQUssWUFBWSxFQUFLLElBTzNDLEtBSEEsRUFBWSxLQUFLLEdBQ2pCLEVBQVcsS0FBSyxHQUNoQixFQUFZLEtBQUssR0FDWixFQUFJLEVBQUcsRUFBSSxHQUFJLElBQ2hCLEVBQVksR0FBSyxFQUFZLEVBQVksSUFDekMsRUFBVyxHQUFLLEVBQVksRUFBVyxHQUUzQyxLQUFLLEVBQUksRUFBRyxFQUFJLEdBQUksSUFDaEIsRUFBWSxHQUFLLEVBQVksRUFBWSxHQUc3QyxNQUFLLGFBQWUsR0FBSSxRQUFPLEtBQU8sRUFBWSxLQUFLLEtBQU8sSUFBSyxLQUNuRSxLQUFLLGtCQUFvQixLQUFLLGFBQzlCLEtBQUssbUJBQXFCLEdBQUksUUFBTyxLQUFPLEVBQVcsS0FBSyxLQUFPLElBQUssS0FDeEUsS0FBSyx3QkFBMEIsR0FBSSxRQUFPLEtBQU8sRUFBWSxLQUFLLEtBQU8sSUFBSyxLQUdsRixRQUFTLElBQVksRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsR0FHbkMsR0FBSSxFQVlKLE9BVkksR0FBSSxLQUFPLEdBQUssR0FFaEIsRUFBTyxHQUFJLE1BQUssRUFBSSxJQUFLLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxHQUNwQyxTQUFTLEVBQUssZ0JBQ2QsRUFBSyxZQUFZLElBR3JCLEVBQU8sR0FBSSxNQUFLLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEdBRy9CLEVBR1gsUUFBUyxJQUFlLEdBQ3BCLEdBQUksRUFFSixJQUFJLEVBQUksS0FBTyxHQUFLLEVBQUcsQ0FDbkIsR0FBSSxHQUFPLE1BQU0sVUFBVSxNQUFNLEtBQUssVUFFdEMsR0FBSyxHQUFLLEVBQUksSUFDZCxFQUFPLEdBQUksTUFBSyxLQUFLLElBQUksTUFBTSxLQUFNLElBQ2pDLFNBQVMsRUFBSyxtQkFDZCxFQUFLLGVBQWUsT0FHeEIsR0FBTyxHQUFJLE1BQUssS0FBSyxJQUFJLE1BQU0sS0FBTSxXQUd6QyxPQUFPLEdBSVgsUUFBUyxJQUFnQixFQUFNLEVBQUssR0FDaEMsR0FDSSxHQUFNLEVBQUksRUFBTSxDQUlwQixTQUZhLEVBQUksR0FBYyxFQUFNLEVBQUcsR0FBSyxZQUFjLEdBQU8sRUFFbEQsRUFBTSxFQUkxQixRQUFTLElBQW1CLEVBQU0sRUFBTSxFQUFTLEVBQUssR0FDbEQsR0FHSSxHQUFTLEVBSFQsR0FBZ0IsRUFBSSxFQUFVLEdBQU8sRUFDckMsRUFBYSxHQUFnQixFQUFNLEVBQUssR0FDeEMsRUFBWSxFQUFJLEdBQUssRUFBTyxHQUFLLEVBQWUsQ0FjcEQsT0FYSSxJQUFhLEdBQ2IsRUFBVSxFQUFPLEVBQ2pCLEVBQWUsRUFBVyxHQUFXLEdBQzlCLEVBQVksRUFBVyxJQUM5QixFQUFVLEVBQU8sRUFDakIsRUFBZSxFQUFZLEVBQVcsS0FFdEMsRUFBVSxFQUNWLEVBQWUsSUFJZixLQUFNLEVBQ04sVUFBVyxHQUluQixRQUFTLElBQVcsRUFBSyxFQUFLLEdBQzFCLEdBRUksR0FBUyxFQUZULEVBQWEsR0FBZ0IsRUFBSSxPQUFRLEVBQUssR0FDOUMsRUFBTyxLQUFLLE9BQU8sRUFBSSxZQUFjLEVBQWEsR0FBSyxHQUFLLENBY2hFLE9BWEksR0FBTyxHQUNQLEVBQVUsRUFBSSxPQUFTLEVBQ3ZCLEVBQVUsRUFBTyxHQUFZLEVBQVMsRUFBSyxJQUNwQyxFQUFPLEdBQVksRUFBSSxPQUFRLEVBQUssSUFDM0MsRUFBVSxFQUFPLEdBQVksRUFBSSxPQUFRLEVBQUssR0FDOUMsRUFBVSxFQUFJLE9BQVMsSUFFdkIsRUFBVSxFQUFJLE9BQ2QsRUFBVSxJQUlWLEtBQU0sRUFDTixLQUFNLEdBSWQsUUFBUyxJQUFZLEVBQU0sRUFBSyxHQUM1QixHQUFJLEdBQWEsR0FBZ0IsRUFBTSxFQUFLLEdBQ3hDLEVBQWlCLEdBQWdCLEVBQU8sRUFBRyxFQUFLLEVBQ3BELFFBQVEsRUFBVyxHQUFRLEVBQWEsR0FBa0IsRUFpQzlELFFBQVMsSUFBWSxHQUNqQixNQUFPLElBQVcsRUFBSyxLQUFLLE1BQU0sSUFBSyxLQUFLLE1BQU0sS0FBSyxLQVEzRCxRQUFTLE1BQ0wsTUFBTyxNQUFLLE1BQU0sSUFHdEIsUUFBUyxNQUNMLE1BQU8sTUFBSyxNQUFNLElBS3RCLFFBQVMsSUFBWSxHQUNqQixHQUFJLEdBQU8sS0FBSyxhQUFhLEtBQUssS0FDbEMsT0FBZ0IsT0FBVCxFQUFnQixFQUFPLEtBQUssSUFBcUIsR0FBaEIsRUFBUSxHQUFXLEtBRy9ELFFBQVMsSUFBZSxHQUNwQixHQUFJLEdBQU8sR0FBVyxLQUFNLEVBQUcsR0FBRyxJQUNsQyxPQUFnQixPQUFULEVBQWdCLEVBQU8sS0FBSyxJQUFxQixHQUFoQixFQUFRLEdBQVcsS0FnRS9ELFFBQVMsSUFBYSxFQUFPLEdBQ3pCLE1BQXFCLGdCQUFWLEdBQ0EsRUFHTixNQUFNLElBSVgsRUFBUSxFQUFPLGNBQWMsR0FDUixnQkFBVixHQUNBLEVBR0osTUFSSSxTQUFTLEVBQU8sSUFXL0IsUUFBUyxJQUFnQixFQUFPLEdBQzVCLE1BQXFCLGdCQUFWLEdBQ0EsRUFBTyxjQUFjLEdBQVMsR0FBSyxFQUV2QyxNQUFNLEdBQVMsS0FBTyxFQUlqQyxRQUFTLElBQWUsRUFBSSxHQUN4QixNQUFPLEdBQUcsTUFBTSxFQUFHLEdBQUcsT0FBTyxFQUFHLE1BQU0sRUFBRyxJQUk3QyxRQUFTLElBQWdCLEVBQUcsR0FDeEIsR0FBSSxHQUFXLEVBQVEsS0FBSyxXQUFhLEtBQUssVUFDMUMsS0FBSyxVQUFXLElBQVcsSUFBTixHQUFjLEtBQUssVUFBVSxTQUFTLEtBQUssR0FBVyxTQUFXLGFBQzFGLFFBQWMsSUFBTixFQUFjLEdBQWMsRUFBVSxLQUFLLE1BQU0sS0FDbkQsRUFBTSxFQUFTLEVBQUUsT0FBUyxFQUlwQyxRQUFTLElBQXFCLEdBQzFCLE9BQWMsSUFBTixFQUFjLEdBQWMsS0FBSyxlQUFnQixLQUFLLE1BQU0sS0FDOUQsRUFBTSxLQUFLLGVBQWUsRUFBRSxPQUFTLEtBQUssZUFJcEQsUUFBUyxJQUFtQixHQUN4QixPQUFjLElBQU4sRUFBYyxHQUFjLEtBQUssYUFBYyxLQUFLLE1BQU0sS0FDNUQsRUFBTSxLQUFLLGFBQWEsRUFBRSxPQUFTLEtBQUssYUFHbEQsUUFBUyxJQUFvQixFQUFhLEVBQVEsR0FDOUMsR0FBSSxHQUFHLEVBQUksRUFBSyxFQUFNLEVBQVksbUJBQ2xDLEtBQUssS0FBSyxlQUtOLElBSkEsS0FBSyxrQkFDTCxLQUFLLHVCQUNMLEtBQUsscUJBRUEsRUFBSSxFQUFHLEVBQUksSUFBSyxFQUNqQixFQUFNLEdBQVcsSUFBTSxJQUFJLElBQUksR0FDL0IsS0FBSyxrQkFBa0IsR0FBSyxLQUFLLFlBQVksRUFBSyxJQUFJLG9CQUN0RCxLQUFLLG9CQUFvQixHQUFLLEtBQUssY0FBYyxFQUFLLElBQUksb0JBQzFELEtBQUssZUFBZSxHQUFLLEtBQUssU0FBUyxFQUFLLElBQUksbUJBSXhELE9BQUksR0FDZSxTQUFYLEdBQ0EsRUFBSyxHQUFRLEtBQUssS0FBSyxlQUFnQixJQUN4QixJQUFSLEVBQVksRUFBSyxNQUNOLFFBQVgsR0FDUCxFQUFLLEdBQVEsS0FBSyxLQUFLLG9CQUFxQixJQUM3QixJQUFSLEVBQVksRUFBSyxPQUV4QixFQUFLLEdBQVEsS0FBSyxLQUFLLGtCQUFtQixJQUMzQixJQUFSLEVBQVksRUFBSyxNQUdiLFNBQVgsR0FFWSxLQURaLEVBQUssR0FBUSxLQUFLLEtBQUssZUFBZ0IsSUFFNUIsR0FHQyxLQURaLEVBQUssR0FBUSxLQUFLLEtBQUssb0JBQXFCLElBRWpDLEdBRVgsRUFBSyxHQUFRLEtBQUssS0FBSyxrQkFBbUIsSUFDM0IsSUFBUixFQUFZLEVBQUssTUFDTixRQUFYLEdBRUssS0FEWixFQUFLLEdBQVEsS0FBSyxLQUFLLG9CQUFxQixJQUVqQyxHQUdDLEtBRFosRUFBSyxHQUFRLEtBQUssS0FBSyxlQUFnQixJQUU1QixHQUVYLEVBQUssR0FBUSxLQUFLLEtBQUssa0JBQW1CLElBQzNCLElBQVIsRUFBWSxFQUFLLE9BR1osS0FEWixFQUFLLEdBQVEsS0FBSyxLQUFLLGtCQUFtQixJQUUvQixHQUdDLEtBRFosRUFBSyxHQUFRLEtBQUssS0FBSyxlQUFnQixJQUU1QixHQUVYLEVBQUssR0FBUSxLQUFLLEtBQUssb0JBQXFCLElBQzdCLElBQVIsRUFBWSxFQUFLLE1BS3BDLFFBQVMsSUFBcUIsRUFBYSxFQUFRLEdBQy9DLEdBQUksR0FBRyxFQUFLLENBRVosSUFBSSxLQUFLLG9CQUNMLE1BQU8sSUFBb0IsS0FBSyxLQUFNLEVBQWEsRUFBUSxFQVUvRCxLQVBLLEtBQUssaUJBQ04sS0FBSyxrQkFDTCxLQUFLLHFCQUNMLEtBQUssdUJBQ0wsS0FBSyx1QkFHSixFQUFJLEVBQUcsRUFBSSxFQUFHLElBQUssQ0FjcEIsR0FYQSxFQUFNLEdBQVcsSUFBTSxJQUFJLElBQUksR0FDM0IsSUFBVyxLQUFLLG1CQUFtQixLQUNuQyxLQUFLLG1CQUFtQixHQUFLLEdBQUksUUFBTyxJQUFNLEtBQUssU0FBUyxFQUFLLElBQUksUUFBUSxJQUFLLFFBQVUsSUFBSyxLQUNqRyxLQUFLLG9CQUFvQixHQUFLLEdBQUksUUFBTyxJQUFNLEtBQUssY0FBYyxFQUFLLElBQUksUUFBUSxJQUFLLFFBQVUsSUFBSyxLQUN2RyxLQUFLLGtCQUFrQixHQUFLLEdBQUksUUFBTyxJQUFNLEtBQUssWUFBWSxFQUFLLElBQUksUUFBUSxJQUFLLFFBQVUsSUFBSyxNQUVsRyxLQUFLLGVBQWUsS0FDckIsRUFBUSxJQUFNLEtBQUssU0FBUyxFQUFLLElBQU0sS0FBTyxLQUFLLGNBQWMsRUFBSyxJQUFNLEtBQU8sS0FBSyxZQUFZLEVBQUssSUFDekcsS0FBSyxlQUFlLEdBQUssR0FBSSxRQUFPLEVBQU0sUUFBUSxJQUFLLElBQUssTUFHNUQsR0FBcUIsU0FBWCxHQUFxQixLQUFLLG1CQUFtQixHQUFHLEtBQUssR0FDL0QsTUFBTyxFQUNKLElBQUksR0FBcUIsUUFBWCxHQUFvQixLQUFLLG9CQUFvQixHQUFHLEtBQUssR0FDdEUsTUFBTyxFQUNKLElBQUksR0FBcUIsT0FBWCxHQUFtQixLQUFLLGtCQUFrQixHQUFHLEtBQUssR0FDbkUsTUFBTyxFQUNKLEtBQUssR0FBVSxLQUFLLGVBQWUsR0FBRyxLQUFLLEdBQzlDLE1BQU8sSUFPbkIsUUFBUyxJQUFpQixHQUN0QixJQUFLLEtBQUssVUFDTixNQUFnQixPQUFULEVBQWdCLEtBQU8sR0FFbEMsSUFBSSxHQUFNLEtBQUssT0FBUyxLQUFLLEdBQUcsWUFBYyxLQUFLLEdBQUcsUUFDdEQsT0FBYSxPQUFULEdBQ0EsRUFBUSxHQUFhLEVBQU8sS0FBSyxjQUMxQixLQUFLLElBQUksRUFBUSxFQUFLLE1BRXRCLEVBSWYsUUFBUyxJQUF1QixHQUM1QixJQUFLLEtBQUssVUFDTixNQUFnQixPQUFULEVBQWdCLEtBQU8sR0FFbEMsSUFBSSxJQUFXLEtBQUssTUFBUSxFQUFJLEtBQUssYUFBYSxNQUFNLEtBQU8sQ0FDL0QsT0FBZ0IsT0FBVCxFQUFnQixFQUFVLEtBQUssSUFBSSxFQUFRLEVBQVMsS0FHL0QsUUFBUyxJQUFvQixHQUN6QixJQUFLLEtBQUssVUFDTixNQUFnQixPQUFULEVBQWdCLEtBQU8sR0FPbEMsSUFBYSxNQUFULEVBQWUsQ0FDZixHQUFJLEdBQVUsR0FBZ0IsRUFBTyxLQUFLLGFBQzFDLE9BQU8sTUFBSyxJQUFJLEtBQUssTUFBUSxFQUFJLEVBQVUsRUFBVSxHQUVyRCxNQUFPLE1BQUssT0FBUyxFQUs3QixRQUFTLElBQWUsR0FDcEIsTUFBSSxNQUFLLHFCQUNBLEVBQVcsS0FBTSxtQkFDbEIsR0FBcUIsS0FBSyxNQUUxQixFQUNPLEtBQUsscUJBRUwsS0FBSyxpQkFHWCxFQUFXLEtBQU0sb0JBQ2xCLEtBQUssZUFBaUIsSUFFbkIsS0FBSyxzQkFBd0IsRUFDaEMsS0FBSyxxQkFBdUIsS0FBSyxnQkFLN0MsUUFBUyxJQUFvQixHQUN6QixNQUFJLE1BQUsscUJBQ0EsRUFBVyxLQUFNLG1CQUNsQixHQUFxQixLQUFLLE1BRTFCLEVBQ08sS0FBSywwQkFFTCxLQUFLLHNCQUdYLEVBQVcsS0FBTSx5QkFDbEIsS0FBSyxvQkFBc0IsSUFFeEIsS0FBSywyQkFBNkIsRUFDckMsS0FBSywwQkFBNEIsS0FBSyxxQkFLbEQsUUFBUyxJQUFrQixHQUN2QixNQUFJLE1BQUsscUJBQ0EsRUFBVyxLQUFNLG1CQUNsQixHQUFxQixLQUFLLE1BRTFCLEVBQ08sS0FBSyx3QkFFTCxLQUFLLG9CQUdYLEVBQVcsS0FBTSx1QkFDbEIsS0FBSyxrQkFBb0IsSUFFdEIsS0FBSyx5QkFBMkIsRUFDbkMsS0FBSyx3QkFBMEIsS0FBSyxtQkFLaEQsUUFBUyxNQUNMLFFBQVMsR0FBVSxFQUFHLEdBQ2xCLE1BQU8sR0FBRSxPQUFTLEVBQUUsT0FHeEIsR0FDSSxHQUFHLEVBQUssRUFBTSxFQUFRLEVBRHRCLEtBQWdCLEtBQWtCLEtBQWlCLElBRXZELEtBQUssRUFBSSxFQUFHLEVBQUksRUFBRyxJQUVmLEVBQU0sR0FBVyxJQUFNLElBQUksSUFBSSxHQUMvQixFQUFPLEtBQUssWUFBWSxFQUFLLElBQzdCLEVBQVMsS0FBSyxjQUFjLEVBQUssSUFDakMsRUFBUSxLQUFLLFNBQVMsRUFBSyxJQUMzQixFQUFVLEtBQUssR0FDZixFQUFZLEtBQUssR0FDakIsRUFBVyxLQUFLLEdBQ2hCLEVBQVksS0FBSyxHQUNqQixFQUFZLEtBQUssR0FDakIsRUFBWSxLQUFLLEVBUXJCLEtBSkEsRUFBVSxLQUFLLEdBQ2YsRUFBWSxLQUFLLEdBQ2pCLEVBQVcsS0FBSyxHQUNoQixFQUFZLEtBQUssR0FDWixFQUFJLEVBQUcsRUFBSSxFQUFHLElBQ2YsRUFBWSxHQUFLLEVBQVksRUFBWSxJQUN6QyxFQUFXLEdBQUssRUFBWSxFQUFXLElBQ3ZDLEVBQVksR0FBSyxFQUFZLEVBQVksR0FHN0MsTUFBSyxlQUFpQixHQUFJLFFBQU8sS0FBTyxFQUFZLEtBQUssS0FBTyxJQUFLLEtBQ3JFLEtBQUssb0JBQXNCLEtBQUssZUFDaEMsS0FBSyxrQkFBb0IsS0FBSyxlQUU5QixLQUFLLHFCQUF1QixHQUFJLFFBQU8sS0FBTyxFQUFXLEtBQUssS0FBTyxJQUFLLEtBQzFFLEtBQUssMEJBQTRCLEdBQUksUUFBTyxLQUFPLEVBQVksS0FBSyxLQUFPLElBQUssS0FDaEYsS0FBSyx3QkFBMEIsR0FBSSxRQUFPLEtBQU8sRUFBVSxLQUFLLEtBQU8sSUFBSyxLQUtoRixRQUFTLE1BQ0wsTUFBTyxNQUFLLFFBQVUsSUFBTSxHQUdoQyxRQUFTLE1BQ0wsTUFBTyxNQUFLLFNBQVcsR0F5QjNCLFFBQVMsSUFBVSxFQUFPLEdBQ3RCLEVBQWUsRUFBTyxFQUFHLEVBQUcsV0FDeEIsTUFBTyxNQUFLLGFBQWEsU0FBUyxLQUFLLFFBQVMsS0FBSyxVQUFXLEtBZ0J4RSxRQUFTLElBQWUsRUFBVSxHQUM5QixNQUFPLEdBQU8sZUEyRGxCLFFBQVMsSUFBWSxHQUdqQixNQUFpRCxPQUF4QyxFQUFRLElBQUksY0FBYyxPQUFPLEdBSTlDLFFBQVMsSUFBZ0IsRUFBTyxFQUFTLEdBQ3JDLE1BQUksR0FBUSxHQUNELEVBQVUsS0FBTyxLQUVqQixFQUFVLEtBQU8sS0FzQ2hDLFFBQVMsSUFBZ0IsR0FDckIsTUFBTyxHQUFNLEVBQUksY0FBYyxRQUFRLElBQUssS0FBTyxFQU12RCxRQUFTLElBQWEsR0FHbEIsSUFGQSxHQUFXLEdBQUcsRUFBTSxFQUFRLEVBQXhCLEVBQUksRUFFRCxFQUFJLEVBQU0sUUFBUSxDQUtyQixJQUpBLEVBQVEsR0FBZ0IsRUFBTSxJQUFJLE1BQU0sS0FDeEMsRUFBSSxFQUFNLE9BQ1YsRUFBTyxHQUFnQixFQUFNLEVBQUksSUFDakMsRUFBTyxFQUFPLEVBQUssTUFBTSxLQUFPLEtBQ3pCLEVBQUksR0FBRyxDQUVWLEdBREEsRUFBUyxHQUFXLEVBQU0sTUFBTSxFQUFHLEdBQUcsS0FBSyxNQUV2QyxNQUFPLEVBRVgsSUFBSSxHQUFRLEVBQUssUUFBVSxHQUFLLEVBQWMsRUFBTyxHQUFNLElBQVMsRUFBSSxFQUVwRSxLQUVKLEtBRUosSUFFSixNQUFPLElBR1gsUUFBUyxJQUFXLEdBQ2hCLEdBQUksR0FBWSxJQUVoQixLQUFLLEdBQVEsSUFBNEIsbUJBQVgsU0FDdEIsUUFBVSxPQUFPLFFBQ3JCLElBQ0ksRUFBWSxHQUFhLEtBQ0osU0FDTixZQUFjLEdBQzdCLEdBQW1CLEdBQ3JCLE1BQU8sSUFFYixNQUFPLElBQVEsR0FNbkIsUUFBUyxJQUFvQixFQUFLLEdBQzlCLEdBQUksRUFxQkosT0FwQkksS0FFSSxFQURBLEVBQVksR0FDTCxHQUFVLEdBR1YsR0FBYSxFQUFLLEdBR3pCLEVBRUEsR0FBZSxFQUdVLG1CQUFiLFVBQTZCLFFBQVEsTUFFN0MsUUFBUSxLQUFLLFVBQVksRUFBTywyQ0FLckMsR0FBYSxNQUd4QixRQUFTLElBQWMsRUFBTSxHQUN6QixHQUFlLE9BQVgsRUFBaUIsQ0FDakIsR0FBSSxHQUFRLEVBQWUsRUFFM0IsSUFEQSxFQUFPLEtBQU8sRUFDTyxNQUFqQixHQUFRLEdBQ1IsRUFBZ0IsdUJBQ1IsMk9BSVIsRUFBZSxHQUFRLEdBQU0sWUFDMUIsSUFBMkIsTUFBdkIsRUFBTyxhQUNkLEdBQW9DLE1BQWhDLEdBQVEsRUFBTyxjQUNmLEVBQWUsR0FBUSxFQUFPLGNBQWMsWUFDekMsQ0FFSCxHQUFjLE9BRGQsRUFBUyxHQUFXLEVBQU8sZUFXdkIsTUFQSyxJQUFlLEVBQU8sZ0JBQ3ZCLEdBQWUsRUFBTyxrQkFFMUIsR0FBZSxFQUFPLGNBQWMsTUFDaEMsS0FBTSxFQUNOLE9BQVEsSUFFTCxJQVRQLEdBQWUsRUFBTyxRQTJCbEMsTUFkQSxJQUFRLEdBQVEsR0FBSSxHQUFPLEVBQWEsRUFBYyxJQUVsRCxHQUFlLElBQ2YsR0FBZSxHQUFNLFFBQVEsU0FBVSxHQUNuQyxHQUFhLEVBQUUsS0FBTSxFQUFFLFVBTy9CLEdBQW1CLEdBR1osR0FBUSxHQUlmLGFBRE8sSUFBUSxHQUNSLEtBSWYsUUFBUyxJQUFhLEVBQU0sR0FDeEIsR0FBYyxNQUFWLEVBQWdCLENBQ2hCLEdBQUksR0FBUSxFQUFXLEVBQWUsRUFFdEMsR0FBWSxHQUFXLEdBQ04sTUFBYixJQUNBLEVBQWUsRUFBVSxTQUU3QixFQUFTLEVBQWEsRUFBYyxHQUNwQyxFQUFTLEdBQUksR0FBTyxHQUNwQixFQUFPLGFBQWUsR0FBUSxHQUM5QixHQUFRLEdBQVEsRUFHaEIsR0FBbUIsT0FHRSxPQUFqQixHQUFRLEtBQzBCLE1BQTlCLEdBQVEsR0FBTSxhQUNkLEdBQVEsR0FBUSxHQUFRLEdBQU0sYUFDTixNQUFqQixHQUFRLFVBQ1IsSUFBUSxHQUkzQixPQUFPLElBQVEsR0FJbkIsUUFBUyxJQUFXLEdBQ2hCLEdBQUksRUFNSixJQUpJLEdBQU8sRUFBSSxTQUFXLEVBQUksUUFBUSxRQUNsQyxFQUFNLEVBQUksUUFBUSxRQUdqQixFQUNELE1BQU8sR0FHWCxLQUFLLEVBQVEsR0FBTSxDQUdmLEdBREEsRUFBUyxHQUFXLEdBRWhCLE1BQU8sRUFFWCxJQUFPLEdBR1gsTUFBTyxJQUFhLEdBR3hCLFFBQVMsTUFDTCxNQUFPLElBQUssSUFHaEIsUUFBUyxJQUFlLEdBQ3BCLEdBQUksR0FDQSxFQUFJLEVBQUUsRUF5QlYsT0F2QkksS0FBc0MsSUFBakMsRUFBZ0IsR0FBRyxXQUN4QixFQUNJLEVBQUUsSUFBZSxHQUFLLEVBQUUsSUFBZSxHQUFNLEdBQzdDLEVBQUUsSUFBZSxHQUFLLEVBQUUsSUFBZSxHQUFZLEVBQUUsSUFBTyxFQUFFLEtBQVUsR0FDeEUsRUFBRSxJQUFlLEdBQUssRUFBRSxJQUFlLElBQW1CLEtBQVosRUFBRSxNQUErQixJQUFkLEVBQUUsS0FBK0IsSUFBZCxFQUFFLEtBQW9DLElBQW5CLEVBQUUsS0FBdUIsR0FDaEksRUFBRSxJQUFlLEdBQUssRUFBRSxJQUFlLEdBQU0sR0FDN0MsRUFBRSxJQUFlLEdBQUssRUFBRSxJQUFlLEdBQU0sR0FDN0MsRUFBRSxJQUFlLEdBQUssRUFBRSxJQUFlLElBQU0sSUFDNUMsRUFFRCxFQUFnQixHQUFHLHFCQUF1QixFQUFXLElBQVEsRUFBVyxNQUN4RSxFQUFXLElBRVgsRUFBZ0IsR0FBRyxpQkFBZ0MsSUFBZCxJQUNyQyxFQUFXLElBRVgsRUFBZ0IsR0FBRyxtQkFBa0MsSUFBZCxJQUN2QyxFQUFXLElBR2YsRUFBZ0IsR0FBRyxTQUFXLEdBRzNCLEVBSVgsUUFBUyxJQUFTLEVBQUcsRUFBRyxHQUNwQixNQUFTLE9BQUwsRUFDTyxFQUVGLE1BQUwsRUFDTyxFQUVKLEVBR1gsUUFBUyxJQUFpQixHQUV0QixHQUFJLEdBQVcsR0FBSSxNQUFLLEVBQU0sTUFDOUIsT0FBSSxHQUFPLFNBQ0MsRUFBUyxpQkFBa0IsRUFBUyxjQUFlLEVBQVMsZUFFaEUsRUFBUyxjQUFlLEVBQVMsV0FBWSxFQUFTLFdBT2xFLFFBQVMsSUFBaUIsR0FDdEIsR0FBSSxHQUFHLEVBQWtCLEVBQWEsRUFBaUIsRUFBMUMsSUFFYixLQUFJLEVBQU8sR0FBWCxDQTZCQSxJQXpCQSxFQUFjLEdBQWlCLEdBRzNCLEVBQU8sSUFBeUIsTUFBbkIsRUFBTyxHQUFHLEtBQXFDLE1BQXBCLEVBQU8sR0FBRyxLQUNsRCxHQUFzQixHQUlELE1BQXJCLEVBQU8sYUFDUCxFQUFZLEdBQVMsRUFBTyxHQUFHLElBQU8sRUFBWSxNQUU5QyxFQUFPLFdBQWEsRUFBVyxJQUFvQyxJQUF0QixFQUFPLGNBQ3BELEVBQWdCLEdBQVEsb0JBQXFCLEdBR2pELEVBQU8sR0FBYyxFQUFXLEVBQUcsRUFBTyxZQUMxQyxFQUFPLEdBQUcsSUFBUyxFQUFLLGNBQ3hCLEVBQU8sR0FBRyxJQUFRLEVBQUssY0FRdEIsRUFBSSxFQUFHLEVBQUksR0FBcUIsTUFBaEIsRUFBTyxHQUFHLEtBQWMsRUFDekMsRUFBTyxHQUFHLEdBQUssRUFBTSxHQUFLLEVBQVksRUFJMUMsTUFBTyxFQUFJLEVBQUcsSUFDVixFQUFPLEdBQUcsR0FBSyxFQUFNLEdBQXNCLE1BQWhCLEVBQU8sR0FBRyxHQUFxQixJQUFOLEVBQVUsRUFBSSxFQUFLLEVBQU8sR0FBRyxFQUk3RCxNQUFwQixFQUFPLEdBQUcsS0FDZ0IsSUFBdEIsRUFBTyxHQUFHLEtBQ1ksSUFBdEIsRUFBTyxHQUFHLEtBQ2lCLElBQTNCLEVBQU8sR0FBRyxNQUNkLEVBQU8sVUFBVyxFQUNsQixFQUFPLEdBQUcsSUFBUSxHQUd0QixFQUFPLElBQU0sRUFBTyxRQUFVLEdBQWdCLElBQVksTUFBTSxLQUFNLEdBQ3RFLEVBQWtCLEVBQU8sUUFBVSxFQUFPLEdBQUcsWUFBYyxFQUFPLEdBQUcsU0FJbEQsTUFBZixFQUFPLE1BQ1AsRUFBTyxHQUFHLGNBQWMsRUFBTyxHQUFHLGdCQUFrQixFQUFPLE1BRzNELEVBQU8sV0FDUCxFQUFPLEdBQUcsSUFBUSxJQUlsQixFQUFPLFFBQTZCLEtBQWhCLEVBQU8sR0FBRyxHQUFxQixFQUFPLEdBQUcsSUFBTSxJQUNuRSxFQUFnQixHQUFRLGlCQUFrQixJQUlsRCxRQUFTLElBQXNCLEdBQzNCLEdBQUksR0FBRyxFQUFVLEVBQU0sRUFBUyxFQUFLLEVBQUssRUFBTSxDQUdoRCxJQURBLEVBQUksRUFBTyxHQUNDLE1BQVIsRUFBRSxJQUFxQixNQUFQLEVBQUUsR0FBb0IsTUFBUCxFQUFFLEVBQ2pDLEVBQU0sRUFDTixFQUFNLEVBTU4sRUFBVyxHQUFTLEVBQUUsR0FBSSxFQUFPLEdBQUcsSUFBTyxHQUFXLEtBQWUsRUFBRyxHQUFHLE1BQzNFLEVBQU8sR0FBUyxFQUFFLEVBQUcsS0FDckIsRUFBVSxHQUFTLEVBQUUsRUFBRyxJQUNWLEdBQUssRUFBVSxLQUN6QixHQUFrQixPQUVuQixDQUNILEVBQU0sRUFBTyxRQUFRLE1BQU0sSUFDM0IsRUFBTSxFQUFPLFFBQVEsTUFBTSxHQUUzQixJQUFJLEdBQVUsR0FBVyxLQUFlLEVBQUssRUFFN0MsR0FBVyxHQUFTLEVBQUUsR0FBSSxFQUFPLEdBQUcsSUFBTyxFQUFRLE1BR25ELEVBQU8sR0FBUyxFQUFFLEVBQUcsRUFBUSxNQUVsQixNQUFQLEVBQUUsSUFFRixFQUFVLEVBQUUsR0FDRSxHQUFLLEVBQVUsS0FDekIsR0FBa0IsR0FFUixNQUFQLEVBQUUsR0FFVCxFQUFVLEVBQUUsRUFBSSxHQUNaLEVBQUUsRUFBSSxHQUFLLEVBQUUsRUFBSSxLQUNqQixHQUFrQixJQUl0QixFQUFVLEVBR2QsRUFBTyxHQUFLLEVBQU8sR0FBWSxFQUFVLEVBQUssR0FDOUMsRUFBZ0IsR0FBUSxnQkFBaUIsRUFDZixNQUFuQixFQUNQLEVBQWdCLEdBQVEsa0JBQW1CLEdBRTNDLEVBQU8sR0FBbUIsRUFBVSxFQUFNLEVBQVMsRUFBSyxHQUN4RCxFQUFPLEdBQUcsSUFBUSxFQUFLLEtBQ3ZCLEVBQU8sV0FBYSxFQUFLLFdBMENqQyxRQUFTLElBQWMsR0FDbkIsR0FBSSxHQUFHLEVBR0gsRUFBVyxFQUFZLEVBQVksRUFGbkMsRUFBUyxFQUFPLEdBQ2hCLEVBQVEsR0FBaUIsS0FBSyxJQUFXLEdBQWMsS0FBSyxFQUdoRSxJQUFJLEVBQU8sQ0FHUCxJQUZBLEVBQWdCLEdBQVEsS0FBTSxFQUV6QixFQUFJLEVBQUcsRUFBSSxHQUFTLE9BQVEsRUFBSSxFQUFHLElBQ3BDLEdBQUksR0FBUyxHQUFHLEdBQUcsS0FBSyxFQUFNLElBQUssQ0FDL0IsRUFBYSxHQUFTLEdBQUcsR0FDekIsR0FBK0IsSUFBbkIsR0FBUyxHQUFHLEVBQ3hCLE9BR1IsR0FBa0IsTUFBZCxFQUVBLFlBREEsRUFBTyxVQUFXLEVBR3RCLElBQUksRUFBTSxHQUFJLENBQ1YsSUFBSyxFQUFJLEVBQUcsRUFBSSxHQUFTLE9BQVEsRUFBSSxFQUFHLElBQ3BDLEdBQUksR0FBUyxHQUFHLEdBQUcsS0FBSyxFQUFNLElBQUssQ0FFL0IsR0FBYyxFQUFNLElBQU0sS0FBTyxHQUFTLEdBQUcsRUFDN0MsT0FHUixHQUFrQixNQUFkLEVBRUEsWUFEQSxFQUFPLFVBQVcsR0FJMUIsSUFBSyxHQUEyQixNQUFkLEVBRWQsWUFEQSxFQUFPLFVBQVcsRUFHdEIsSUFBSSxFQUFNLEdBQUksQ0FDVixJQUFJLEdBQVEsS0FBSyxFQUFNLElBSW5CLFlBREEsRUFBTyxVQUFXLEVBRmxCLEdBQVcsSUFNbkIsRUFBTyxHQUFLLEdBQWMsR0FBYyxLQUFPLEdBQVksSUFDM0QsR0FBMEIsT0FFMUIsR0FBTyxVQUFXLEVBTzFCLFFBQVMsSUFBMEIsRUFBUyxFQUFVLEVBQVEsRUFBUyxFQUFXLEdBQzlFLEdBQUksSUFDQSxHQUFlLEdBQ2YsR0FBeUIsUUFBUSxHQUNqQyxTQUFTLEVBQVEsSUFDakIsU0FBUyxFQUFTLElBQ2xCLFNBQVMsRUFBVyxJQU94QixPQUpJLElBQ0EsRUFBTyxLQUFLLFNBQVMsRUFBVyxLQUc3QixFQUdYLFFBQVMsSUFBZSxHQUNwQixHQUFJLEdBQU8sU0FBUyxFQUFTLEdBQzdCLE9BQUksSUFBUSxHQUNELElBQU8sRUFDUCxHQUFRLElBQ1IsS0FBTyxFQUVYLEVBR1gsUUFBUyxJQUFrQixHQUV2QixNQUFPLEdBQUUsUUFBUSxvQkFBcUIsS0FBSyxRQUFRLFdBQVksS0FBSyxRQUFRLFNBQVUsSUFBSSxRQUFRLFNBQVUsSUFHaEgsUUFBUyxJQUFhLEVBQVksRUFBYSxHQUMzQyxHQUFJLEVBQVksQ0FJWixHQUZzQixHQUEyQixRQUFRLEtBQ3JDLEdBQUksTUFBSyxFQUFZLEdBQUksRUFBWSxHQUFJLEVBQVksSUFBSSxTQUl6RSxNQUZBLEdBQWdCLEdBQVEsaUJBQWtCLEVBQzFDLEVBQU8sVUFBVyxHQUNYLEVBR2YsT0FBTyxFQWdCWCxRQUFTLElBQWdCLEVBQVcsRUFBZ0IsR0FDaEQsR0FBSSxFQUNBLE1BQU8sSUFBVyxFQUNmLElBQUksRUFFUCxNQUFPLEVBRVAsSUFBSSxHQUFLLFNBQVMsRUFBVyxJQUN6QixFQUFJLEVBQUssR0FDYixRQUR1QixFQUFLLEdBQUssSUFDdEIsR0FBSyxFQUt4QixRQUFTLElBQWtCLEdBQ3ZCLEdBQUksR0FBUSxHQUFRLEtBQUssR0FBa0IsRUFBTyxJQUNsRCxJQUFJLEVBQU8sQ0FDUCxHQUFJLEdBQWMsR0FBMEIsRUFBTSxHQUFJLEVBQU0sR0FBSSxFQUFNLEdBQUksRUFBTSxHQUFJLEVBQU0sR0FBSSxFQUFNLEdBQ3BHLEtBQUssR0FBYSxFQUFNLEdBQUksRUFBYSxHQUNyQyxNQUdKLEdBQU8sR0FBSyxFQUNaLEVBQU8sS0FBTyxHQUFnQixFQUFNLEdBQUksRUFBTSxHQUFJLEVBQU0sS0FFeEQsRUFBTyxHQUFLLEdBQWMsTUFBTSxLQUFNLEVBQU8sSUFDN0MsRUFBTyxHQUFHLGNBQWMsRUFBTyxHQUFHLGdCQUFrQixFQUFPLE1BRTNELEVBQWdCLEdBQVEsU0FBVSxNQUVsQyxHQUFPLFVBQVcsRUFLMUIsUUFBUyxJQUFpQixHQUN0QixHQUFJLEdBQVUsR0FBZ0IsS0FBSyxFQUFPLEdBRTFDLElBQWdCLE9BQVosRUFFQSxZQURBLEVBQU8sR0FBSyxHQUFJLE9BQU0sRUFBUSxJQUlsQyxJQUFjLElBQ1UsSUFBcEIsRUFBTyxpQkFDQSxHQUFPLFNBS2xCLEdBQWtCLElBQ00sSUFBcEIsRUFBTyxpQkFDQSxHQUFPLFNBTWxCLEVBQU0sd0JBQXdCLEtBb0JsQyxRQUFTLElBQTBCLEdBRS9CLEdBQUksRUFBTyxLQUFPLEVBQU0sU0FFcEIsV0FEQSxJQUFjLEVBR2xCLElBQUksRUFBTyxLQUFPLEVBQU0sU0FFcEIsV0FEQSxJQUFrQixFQUd0QixHQUFPLE1BQ1AsRUFBZ0IsR0FBUSxPQUFRLENBR2hDLElBQ0ksR0FBRyxFQUFhLEVBQVEsRUFBTyxFQUQvQixFQUFTLEdBQUssRUFBTyxHQUVyQixFQUFlLEVBQU8sT0FDdEIsRUFBeUIsQ0FJN0IsS0FGQSxFQUFTLEVBQWEsRUFBTyxHQUFJLEVBQU8sU0FBUyxNQUFNLFFBRWxELEVBQUksRUFBRyxFQUFJLEVBQU8sT0FBUSxJQUMzQixFQUFRLEVBQU8sR0FDZixHQUFlLEVBQU8sTUFBTSxFQUFzQixFQUFPLFNBQWdCLEdBR3JFLElBQ0EsRUFBVSxFQUFPLE9BQU8sRUFBRyxFQUFPLFFBQVEsSUFDdEMsRUFBUSxPQUFTLEdBQ2pCLEVBQWdCLEdBQVEsWUFBWSxLQUFLLEdBRTdDLEVBQVMsRUFBTyxNQUFNLEVBQU8sUUFBUSxHQUFlLEVBQVksUUFDaEUsR0FBMEIsRUFBWSxRQUd0QyxHQUFxQixJQUNqQixFQUNBLEVBQWdCLEdBQVEsT0FBUSxFQUdoQyxFQUFnQixHQUFRLGFBQWEsS0FBSyxHQUU5QyxFQUF3QixFQUFPLEVBQWEsSUFFdkMsRUFBTyxVQUFZLEdBQ3hCLEVBQWdCLEdBQVEsYUFBYSxLQUFLLEVBS2xELEdBQWdCLEdBQVEsY0FBZ0IsRUFBZSxFQUNuRCxFQUFPLE9BQVMsR0FDaEIsRUFBZ0IsR0FBUSxZQUFZLEtBQUssR0FJekMsRUFBTyxHQUFHLEtBQVMsS0FDaUIsSUFBcEMsRUFBZ0IsR0FBUSxTQUN4QixFQUFPLEdBQUcsSUFBUSxJQUNsQixFQUFnQixHQUFRLFlBQVUsSUFHdEMsRUFBZ0IsR0FBUSxnQkFBa0IsRUFBTyxHQUFHLE1BQU0sR0FDMUQsRUFBZ0IsR0FBUSxTQUFXLEVBQU8sVUFFMUMsRUFBTyxHQUFHLElBQVEsR0FBZ0IsRUFBTyxRQUFTLEVBQU8sR0FBRyxJQUFPLEVBQU8sV0FFMUUsR0FBZ0IsR0FDaEIsR0FBYyxHQUlsQixRQUFTLElBQWlCLEVBQVEsRUFBTSxHQUNwQyxHQUFJLEVBRUosT0FBZ0IsT0FBWixFQUVPLEVBRWdCLE1BQXZCLEVBQU8sYUFDQSxFQUFPLGFBQWEsRUFBTSxHQUNYLE1BQWYsRUFBTyxNQUVkLEVBQU8sRUFBTyxLQUFLLEdBQ2YsR0FBUSxFQUFPLEtBQ2YsR0FBUSxJQUVQLEdBQWlCLEtBQVQsSUFDVCxFQUFPLEdBRUosR0FHQSxFQUtmLFFBQVMsSUFBeUIsR0FDOUIsR0FBSSxHQUNBLEVBRUEsRUFDQSxFQUNBLENBRUosSUFBeUIsSUFBckIsRUFBTyxHQUFHLE9BR1YsTUFGQSxHQUFnQixHQUFRLGVBQWdCLE9BQ3hDLEVBQU8sR0FBSyxHQUFJLE1BQUssS0FJekIsS0FBSyxFQUFJLEVBQUcsRUFBSSxFQUFPLEdBQUcsT0FBUSxJQUM5QixFQUFlLEVBQ2YsRUFBYSxLQUFlLEdBQ04sTUFBbEIsRUFBTyxVQUNQLEVBQVcsUUFBVSxFQUFPLFNBRWhDLEVBQVcsR0FBSyxFQUFPLEdBQUcsR0FDMUIsR0FBMEIsR0FFckIsRUFBUSxLQUtiLEdBQWdCLEVBQWdCLEdBQVksY0FHNUMsR0FBa0UsR0FBbEQsRUFBZ0IsR0FBWSxhQUFhLE9BRXpELEVBQWdCLEdBQVksTUFBUSxHQUVqQixNQUFmLEdBQXVCLEVBQWUsS0FDdEMsRUFBYyxFQUNkLEVBQWEsR0FJckIsR0FBTyxFQUFRLEdBQWMsR0FHakMsUUFBUyxJQUFpQixHQUN0QixJQUFJLEVBQU8sR0FBWCxDQUlBLEdBQUksR0FBSSxFQUFxQixFQUFPLEdBQ3BDLEdBQU8sR0FBSyxHQUFLLEVBQUUsS0FBTSxFQUFFLE1BQU8sRUFBRSxLQUFPLEVBQUUsS0FBTSxFQUFFLEtBQU0sRUFBRSxPQUFRLEVBQUUsT0FBUSxFQUFFLGFBQWMsU0FBVSxHQUNyRyxNQUFPLElBQU8sU0FBUyxFQUFLLE1BR2hDLEdBQWdCLElBR3BCLFFBQVMsSUFBa0IsR0FDdkIsR0FBSSxHQUFNLEdBQUksR0FBTyxHQUFjLEdBQWMsSUFPakQsT0FOSSxHQUFJLFdBRUosRUFBSSxJQUFJLEVBQUcsS0FDWCxFQUFJLGFBQVcsSUFHWixFQUdYLFFBQVMsSUFBZSxHQUNwQixHQUFJLEdBQVEsRUFBTyxHQUNmLEVBQVMsRUFBTyxFQUlwQixPQUZBLEdBQU8sUUFBVSxFQUFPLFNBQVcsR0FBVSxFQUFPLElBRXRDLE9BQVYsT0FBOEIsS0FBWCxHQUFrQyxLQUFWLEVBQ3BDLEdBQWUsV0FBVyxLQUdoQixnQkFBVixLQUNQLEVBQU8sR0FBSyxFQUFRLEVBQU8sUUFBUSxTQUFTLElBRzVDLEVBQVMsR0FDRixHQUFJLEdBQU8sR0FBYyxLQUN6QixFQUFPLEdBQ2QsRUFBTyxHQUFLLEVBQ0wsRUFBUSxHQUNmLEdBQXlCLEdBQ2xCLEVBQ1AsR0FBMEIsR0FFMUIsR0FBZ0IsR0FHZixFQUFRLEtBQ1QsRUFBTyxHQUFLLE1BR1QsSUFHWCxRQUFTLElBQWdCLEdBQ3JCLEdBQUksR0FBUSxFQUFPLEVBQ2YsR0FBWSxHQUNaLEVBQU8sR0FBSyxHQUFJLE1BQUssRUFBTSxPQUNwQixFQUFPLEdBQ2QsRUFBTyxHQUFLLEdBQUksTUFBSyxFQUFNLFdBQ0gsZ0JBQVYsR0FDZCxHQUFpQixHQUNWLEVBQVEsSUFDZixFQUFPLEdBQUssRUFBSSxFQUFNLE1BQU0sR0FBSSxTQUFVLEdBQ3RDLE1BQU8sVUFBUyxFQUFLLE1BRXpCLEdBQWdCLElBQ1QsRUFBUyxHQUNoQixHQUFpQixHQUNWLEVBQVMsR0FFaEIsRUFBTyxHQUFLLEdBQUksTUFBSyxHQUVyQixFQUFNLHdCQUF3QixHQUl0QyxRQUFTLElBQWtCLEVBQU8sRUFBUSxFQUFRLEVBQVEsR0FDdEQsR0FBSSxLQW9CSixRQWxCZSxJQUFYLElBQThCLElBQVgsSUFDbkIsRUFBUyxFQUNULE1BQVMsS0FHUixFQUFTLElBQVUsRUFBYyxJQUM3QixFQUFRLElBQTJCLElBQWpCLEVBQU0sVUFDN0IsTUFBUSxJQUlaLEVBQUUsa0JBQW1CLEVBQ3JCLEVBQUUsUUFBVSxFQUFFLE9BQVMsRUFDdkIsRUFBRSxHQUFLLEVBQ1AsRUFBRSxHQUFLLEVBQ1AsRUFBRSxHQUFLLEVBQ1AsRUFBRSxRQUFVLEVBRUwsR0FBaUIsR0FHNUIsUUFBUyxJQUFhLEVBQU8sRUFBUSxFQUFRLEdBQ3pDLE1BQU8sSUFBaUIsRUFBTyxFQUFRLEVBQVEsR0FBUSxHQWdDM0QsUUFBUyxJQUFPLEVBQUksR0FDaEIsR0FBSSxHQUFLLENBSVQsSUFIdUIsSUFBbkIsRUFBUSxRQUFnQixFQUFRLEVBQVEsTUFDeEMsRUFBVSxFQUFRLEtBRWpCLEVBQVEsT0FDVCxNQUFPLEtBR1gsS0FEQSxFQUFNLEVBQVEsR0FDVCxFQUFJLEVBQUcsRUFBSSxFQUFRLFNBQVUsRUFDekIsRUFBUSxHQUFHLFlBQWEsRUFBUSxHQUFHLEdBQUksS0FDeEMsRUFBTSxFQUFRLEdBR3RCLE9BQU8sR0FJWCxRQUFTLE1BR0wsTUFBTyxJQUFPLGNBRkEsTUFBTSxLQUFLLFVBQVcsSUFLeEMsUUFBUyxNQUdMLE1BQU8sSUFBTyxhQUZBLE1BQU0sS0FBSyxVQUFXLElBV3hDLFFBQVMsSUFBZ0IsR0FDckIsSUFBSyxHQUFJLEtBQU8sR0FDWixJQUF1QyxJQUFqQyxHQUFRLEtBQUssR0FBVSxJQUEwQixNQUFWLEVBQUUsSUFBaUIsTUFBTSxFQUFFLElBQ3BFLE9BQU8sQ0FLZixLQUFLLEdBREQsSUFBaUIsRUFDWixFQUFJLEVBQUcsRUFBSSxHQUFTLFNBQVUsRUFDbkMsR0FBSSxFQUFFLEdBQVMsSUFBSyxDQUNoQixHQUFJLEVBQ0EsT0FBTyxDQUVQLFlBQVcsRUFBRSxHQUFTLE9BQVMsRUFBTSxFQUFFLEdBQVMsT0FDaEQsR0FBaUIsR0FLN0IsT0FBTyxFQUdYLFFBQVMsTUFDTCxNQUFPLE1BQUssU0FHaEIsUUFBUyxNQUNMLE1BQU8sSUFBZSxLQUcxQixRQUFTLElBQVUsR0FDZixHQUFJLEdBQWtCLEVBQXFCLEdBQ3ZDLEVBQVEsRUFBZ0IsTUFBUSxFQUNoQyxFQUFXLEVBQWdCLFNBQVcsRUFDdEMsRUFBUyxFQUFnQixPQUFTLEVBQ2xDLEVBQVEsRUFBZ0IsTUFBUSxFQUFnQixTQUFXLEVBQzNELEVBQU8sRUFBZ0IsS0FBTyxFQUM5QixFQUFRLEVBQWdCLE1BQVEsRUFDaEMsRUFBVSxFQUFnQixRQUFVLEVBQ3BDLEVBQVUsRUFBZ0IsUUFBVSxFQUNwQyxFQUFlLEVBQWdCLGFBQWUsQ0FFbEQsTUFBSyxTQUFXLEdBQWdCLEdBR2hDLEtBQUssZUFBaUIsRUFDUixJQUFWLEVBQ1UsSUFBVixFQUNRLElBQVIsRUFBZSxHQUFLLEdBR3hCLEtBQUssT0FBUyxFQUNGLEVBQVIsRUFJSixLQUFLLFNBQVcsRUFDRCxFQUFYLEVBQ1EsR0FBUixFQUVKLEtBQUssU0FFTCxLQUFLLFFBQVUsS0FFZixLQUFLLFVBR1QsUUFBUyxJQUFZLEdBQ2pCLE1BQU8sYUFBZSxJQUcxQixRQUFTLElBQVUsR0FDZixNQUFJLEdBQVMsR0FDeUIsRUFBM0IsS0FBSyxPQUFPLEVBQUksR0FFaEIsS0FBSyxNQUFNLEdBTTFCLFFBQVMsSUFBUSxFQUFPLEdBQ3BCLEVBQWUsRUFBTyxFQUFHLEVBQUcsV0FDeEIsR0FBSSxHQUFTLEtBQUssWUFDZCxFQUFPLEdBS1gsT0FKSSxHQUFTLElBQ1QsR0FBVSxFQUNWLEVBQU8sS0FFSixFQUFPLEtBQVksRUFBUyxJQUFLLEdBQUssRUFBWSxJQUFXLEVBQVcsR0FBSSxLQXVCM0YsUUFBUyxJQUFpQixFQUFTLEdBQy9CLEdBQUksSUFBVyxHQUFVLElBQUksTUFBTSxFQUVuQyxJQUFnQixPQUFaLEVBQ0EsTUFBTyxLQUdYLElBQUksR0FBVSxFQUFRLEVBQVEsT0FBUyxPQUNuQyxHQUFXLEVBQVEsSUFBSSxNQUFNLE1BQWlCLElBQUssRUFBRyxHQUN0RCxFQUF1QixHQUFYLEVBQU0sR0FBVyxFQUFNLEVBQU0sR0FFN0MsT0FBbUIsS0FBWixFQUNMLEVBQ2EsTUFBYixFQUFNLEdBQWEsR0FBVyxFQUlwQyxRQUFTLElBQWdCLEVBQU8sR0FDNUIsR0FBSSxHQUFLLENBQ1QsT0FBSSxHQUFNLFFBQ04sRUFBTSxFQUFNLFFBQ1osR0FBUSxFQUFTLElBQVUsRUFBTyxHQUFTLEVBQU0sVUFBWSxHQUFZLEdBQU8sV0FBYSxFQUFJLFVBRWpHLEVBQUksR0FBRyxRQUFRLEVBQUksR0FBRyxVQUFZLEdBQ2xDLEVBQU0sYUFBYSxHQUFLLEdBQ2pCLEdBRUEsR0FBWSxHQUFPLFFBSWxDLFFBQVMsSUFBZSxHQUdwQixNQUFvRCxLQUE1QyxLQUFLLE1BQU0sRUFBRSxHQUFHLG9CQUFzQixJQXFCbEQsUUFBUyxJQUFjLEVBQU8sRUFBZSxHQUN6QyxHQUNJLEdBREEsRUFBUyxLQUFLLFNBQVcsQ0FFN0IsS0FBSyxLQUFLLFVBQ04sTUFBZ0IsT0FBVCxFQUFnQixLQUFPLEdBRWxDLElBQWEsTUFBVCxFQUFlLENBQ2YsR0FBcUIsZ0JBQVYsSUFFUCxHQUFjLFFBRGQsRUFBUSxHQUFpQixHQUFrQixJQUV2QyxNQUFPLFVBRUosTUFBSyxJQUFJLEdBQVMsS0FBTyxJQUNoQyxHQUFnQixHQW1CcEIsUUFqQkssS0FBSyxRQUFVLElBQ2hCLEVBQWMsR0FBYyxPQUVoQyxLQUFLLFFBQVUsRUFDZixLQUFLLFFBQVMsRUFDSyxNQUFmLEdBQ0EsS0FBSyxJQUFJLEVBQWEsS0FFdEIsSUFBVyxLQUNOLEdBQWlCLEtBQUssa0JBQ3ZCLEdBQVksS0FBTSxHQUFlLEVBQVEsRUFBUSxLQUFNLEdBQUcsR0FDbEQsS0FBSyxvQkFDYixLQUFLLG1CQUFvQixFQUN6QixFQUFNLGFBQWEsTUFBTSxHQUN6QixLQUFLLGtCQUFvQixPQUcxQixLQUVQLE1BQU8sTUFBSyxPQUFTLEVBQVMsR0FBYyxNQUlwRCxRQUFTLElBQVksRUFBTyxHQUN4QixNQUFhLE9BQVQsR0FDcUIsZ0JBQVYsS0FDUCxHQUFTLEdBR2IsS0FBSyxVQUFVLEVBQU8sR0FFZixPQUVDLEtBQUssWUFJckIsUUFBUyxJQUFnQixHQUNyQixNQUFPLE1BQUssVUFBVSxFQUFHLEdBRzdCLFFBQVMsSUFBa0IsR0FTdkIsTUFSSSxNQUFLLFNBQ0wsS0FBSyxVQUFVLEVBQUcsR0FDbEIsS0FBSyxRQUFTLEVBRVYsR0FDQSxLQUFLLFNBQVMsR0FBYyxNQUFPLE1BR3BDLEtBR1gsUUFBUyxNQUNMLEdBQWlCLE1BQWIsS0FBSyxLQUNMLEtBQUssVUFBVSxLQUFLLE1BQU0sR0FBTyxPQUM5QixJQUF1QixnQkFBWixNQUFLLEdBQWlCLENBQ3BDLEdBQUksR0FBUSxHQUFpQixHQUFhLEtBQUssR0FDbEMsT0FBVCxFQUNBLEtBQUssVUFBVSxHQUdmLEtBQUssVUFBVSxHQUFHLEdBRzFCLE1BQU8sTUFHWCxRQUFTLElBQXNCLEdBQzNCLFFBQUssS0FBSyxZQUdWLEVBQVEsRUFBUSxHQUFZLEdBQU8sWUFBYyxHQUV6QyxLQUFLLFlBQWMsR0FBUyxJQUFPLEdBRy9DLFFBQVMsTUFDTCxNQUNJLE1BQUssWUFBYyxLQUFLLFFBQVEsTUFBTSxHQUFHLGFBQ3pDLEtBQUssWUFBYyxLQUFLLFFBQVEsTUFBTSxHQUFHLFlBSWpELFFBQVMsTUFDTCxJQUFLLEVBQVksS0FBSyxlQUNsQixNQUFPLE1BQUssYUFHaEIsSUFBSSxLQUtKLElBSEEsRUFBVyxFQUFHLE1BQ2QsRUFBSSxHQUFjLEdBRWQsRUFBRSxHQUFJLENBQ04sR0FBSSxHQUFRLEVBQUUsT0FBUyxFQUFVLEVBQUUsSUFBTSxHQUFZLEVBQUUsR0FDdkQsTUFBSyxjQUFnQixLQUFLLFdBQ3RCLEVBQWMsRUFBRSxHQUFJLEVBQU0sV0FBYSxNQUUzQyxNQUFLLGVBQWdCLENBR3pCLE9BQU8sTUFBSyxjQUdoQixRQUFTLE1BQ0wsUUFBTyxLQUFLLFlBQWEsS0FBSyxPQUdsQyxRQUFTLE1BQ0wsUUFBTyxLQUFLLFdBQVksS0FBSyxPQUdqQyxRQUFTLE1BQ0wsUUFBTyxLQUFLLFlBQVksS0FBSyxRQUEyQixJQUFqQixLQUFLLFNBV2hELFFBQVMsSUFBZ0IsRUFBTyxHQUM1QixHQUdJLEdBQ0EsRUFDQSxFQUxBLEVBQVcsRUFFWCxFQUFRLElBdURaLE9BbERJLElBQVcsR0FDWCxHQUNJLEdBQUssRUFBTSxjQUNYLEVBQUssRUFBTSxNQUNYLEVBQUssRUFBTSxTQUVSLEVBQVMsSUFDaEIsS0FDSSxFQUNBLEVBQVMsR0FBTyxFQUVoQixFQUFTLGFBQWUsSUFFbEIsRUFBUSxHQUFZLEtBQUssS0FDbkMsRUFBcUIsTUFBYixFQUFNLElBQWUsRUFBSSxFQUNqQyxHQUNJLEVBQUssRUFDTCxFQUFLLEVBQU0sRUFBTSxLQUFpQyxFQUNsRCxFQUFLLEVBQU0sRUFBTSxLQUFpQyxFQUNsRCxFQUFLLEVBQU0sRUFBTSxLQUFpQyxFQUNsRCxFQUFLLEVBQU0sRUFBTSxLQUFpQyxFQUNsRCxHQUFLLEVBQU0sR0FBOEIsSUFBckIsRUFBTSxNQUF3QixLQUU1QyxFQUFRLEdBQVMsS0FBSyxLQUNoQyxFQUFxQixNQUFiLEVBQU0sSUFBZSxFQUFJLEVBQ2pDLEdBQ0ksRUFBSSxHQUFTLEVBQU0sR0FBSSxHQUN2QixFQUFJLEdBQVMsRUFBTSxHQUFJLEdBQ3ZCLEVBQUksR0FBUyxFQUFNLEdBQUksR0FDdkIsRUFBSSxHQUFTLEVBQU0sR0FBSSxHQUN2QixFQUFJLEdBQVMsRUFBTSxHQUFJLEdBQ3ZCLEVBQUksR0FBUyxFQUFNLEdBQUksR0FDdkIsRUFBSSxHQUFTLEVBQU0sR0FBSSxLQUVSLE1BQVosRUFDUCxLQUMyQixnQkFBYixLQUEwQixRQUFVLElBQVksTUFBUSxNQUN0RSxFQUFVLEdBQWtCLEdBQVksRUFBUyxNQUFPLEdBQVksRUFBUyxLQUU3RSxLQUNBLEVBQVMsR0FBSyxFQUFRLGFBQ3RCLEVBQVMsRUFBSSxFQUFRLFFBR3pCLEVBQU0sR0FBSSxJQUFTLEdBRWYsR0FBVyxJQUFVLEVBQVcsRUFBTyxhQUN2QyxFQUFJLFFBQVUsRUFBTSxTQUdqQixFQU1YLFFBQVMsSUFBVSxFQUFLLEdBSXBCLEdBQUksR0FBTSxHQUFPLFdBQVcsRUFBSSxRQUFRLElBQUssS0FFN0MsUUFBUSxNQUFNLEdBQU8sRUFBSSxHQUFPLEVBR3BDLFFBQVMsSUFBMEIsRUFBTSxHQUNyQyxHQUFJLEtBVUosT0FSQSxHQUFJLE9BQVMsRUFBTSxRQUFVLEVBQUssUUFDQyxJQUE5QixFQUFNLE9BQVMsRUFBSyxRQUNyQixFQUFLLFFBQVEsSUFBSSxFQUFJLE9BQVEsS0FBSyxRQUFRLE1BQ3hDLEVBQUksT0FHVixFQUFJLGNBQWdCLEdBQVUsRUFBSyxRQUFRLElBQUksRUFBSSxPQUFRLEtBRXBELEVBR1gsUUFBUyxJQUFrQixFQUFNLEdBQzdCLEdBQUksRUFDSixPQUFNLEdBQUssV0FBYSxFQUFNLFdBSTlCLEVBQVEsR0FBZ0IsRUFBTyxHQUMzQixFQUFLLFNBQVMsR0FDZCxFQUFNLEdBQTBCLEVBQU0sSUFFdEMsRUFBTSxHQUEwQixFQUFPLEdBQ3ZDLEVBQUksY0FBZ0IsRUFBSSxhQUN4QixFQUFJLFFBQVUsRUFBSSxRQUdmLElBWkssYUFBYyxFQUFHLE9BQVEsR0FnQnpDLFFBQVMsSUFBWSxFQUFXLEdBQzVCLE1BQU8sVUFBVSxFQUFLLEdBQ2xCLEdBQUksR0FBSyxDQVdULE9BVGUsUUFBWCxHQUFvQixPQUFPLEtBQzNCLEVBQWdCLEVBQU0sWUFBYyxFQUFRLHVEQUF5RCxFQUFPLGtHQUU1RyxFQUFNLEVBQUssRUFBTSxFQUFRLEVBQVMsR0FHdEMsRUFBcUIsZ0JBQVIsSUFBb0IsRUFBTSxFQUN2QyxFQUFNLEdBQWUsRUFBSyxHQUMxQixHQUFZLEtBQU0sRUFBSyxHQUNoQixNQUlmLFFBQVMsSUFBYSxFQUFLLEVBQVUsRUFBVSxHQUMzQyxHQUFJLEdBQWUsRUFBUyxjQUN4QixFQUFPLEdBQVMsRUFBUyxPQUN6QixFQUFTLEdBQVMsRUFBUyxRQUUxQixHQUFJLFlBS1QsRUFBK0IsTUFBaEIsR0FBOEIsRUFFekMsR0FDQSxHQUFTLEVBQUssR0FBSSxFQUFLLFNBQVcsRUFBUyxHQUUzQyxHQUNBLEdBQU0sRUFBSyxPQUFRLEdBQUksRUFBSyxRQUFVLEVBQU8sR0FFN0MsR0FDQSxFQUFJLEdBQUcsUUFBUSxFQUFJLEdBQUcsVUFBWSxFQUFlLEdBRWpELEdBQ0EsRUFBTSxhQUFhLEVBQUssR0FBUSxJQU94QyxRQUFTLElBQWtCLEVBQVUsR0FDakMsR0FBSSxHQUFPLEVBQVMsS0FBSyxFQUFLLFFBQVEsRUFDdEMsT0FBTyxJQUFRLEVBQUksV0FDWCxHQUFRLEVBQUksV0FDWixFQUFPLEVBQUksVUFDWCxFQUFPLEVBQUksVUFDWCxFQUFPLEVBQUksVUFDWCxFQUFPLEVBQUksV0FBYSxXQUdwQyxRQUFTLElBQVksRUFBTSxHQUd2QixHQUFJLEdBQU0sR0FBUSxLQUNkLEVBQU0sR0FBZ0IsRUFBSyxNQUFNLFFBQVEsT0FDekMsRUFBUyxFQUFNLGVBQWUsS0FBTSxJQUFRLFdBRTVDLEVBQVMsSUFBWSxFQUFXLEVBQVEsSUFBVyxFQUFRLEdBQVEsS0FBSyxLQUFNLEdBQU8sRUFBUSxHQUVqRyxPQUFPLE1BQUssT0FBTyxHQUFVLEtBQUssYUFBYSxTQUFTLEVBQVEsS0FBTSxHQUFZLEtBR3RGLFFBQVMsTUFDTCxNQUFPLElBQUksR0FBTyxNQUd0QixRQUFTLElBQVMsRUFBTyxHQUNyQixHQUFJLEdBQWEsRUFBUyxHQUFTLEVBQVEsR0FBWSxFQUN2RCxVQUFNLEtBQUssWUFBYSxFQUFXLGFBR25DLEVBQVEsRUFBZSxJQUFVLGNBQ25CLGdCQUFWLEVBQ08sS0FBSyxVQUFZLEVBQVcsVUFFNUIsRUFBVyxVQUFZLEtBQUssUUFBUSxRQUFRLEdBQU8sV0FJbEUsUUFBUyxJQUFVLEVBQU8sR0FDdEIsR0FBSSxHQUFhLEVBQVMsR0FBUyxFQUFRLEdBQVksRUFDdkQsVUFBTSxLQUFLLFlBQWEsRUFBVyxhQUduQyxFQUFRLEVBQWUsSUFBVSxjQUNuQixnQkFBVixFQUNPLEtBQUssVUFBWSxFQUFXLFVBRTVCLEtBQUssUUFBUSxNQUFNLEdBQU8sVUFBWSxFQUFXLFdBSWhFLFFBQVMsSUFBVyxFQUFNLEVBQUksRUFBTyxHQUNqQyxHQUFJLEdBQVksRUFBUyxHQUFRLEVBQU8sR0FBWSxHQUNoRCxFQUFVLEVBQVMsR0FBTSxFQUFLLEdBQVksRUFDOUMsVUFBTSxLQUFLLFdBQWEsRUFBVSxXQUFhLEVBQVEsYUFHdkQsRUFBYyxHQUFlLE1BQ0YsTUFBbkIsRUFBWSxHQUFhLEtBQUssUUFBUSxFQUFXLElBQVUsS0FBSyxTQUFTLEVBQVcsTUFDcEUsTUFBbkIsRUFBWSxHQUFhLEtBQUssU0FBUyxFQUFTLElBQVUsS0FBSyxRQUFRLEVBQVMsS0FHekYsUUFBUyxJQUFRLEVBQU8sR0FDcEIsR0FDSSxHQURBLEVBQWEsRUFBUyxHQUFTLEVBQVEsR0FBWSxFQUV2RCxVQUFNLEtBQUssWUFBYSxFQUFXLGFBR25DLEVBQVEsRUFBZSxJQUFVLGNBQ25CLGdCQUFWLEVBQ08sS0FBSyxZQUFjLEVBQVcsV0FFckMsRUFBVSxFQUFXLFVBQ2QsS0FBSyxRQUFRLFFBQVEsR0FBTyxXQUFhLEdBQVcsR0FBVyxLQUFLLFFBQVEsTUFBTSxHQUFPLFlBSXhHLFFBQVMsSUFBZSxFQUFPLEdBQzNCLE1BQU8sTUFBSyxPQUFPLEVBQU8sSUFBVSxLQUFLLFFBQVEsRUFBTyxHQUc1RCxRQUFTLElBQWdCLEVBQU8sR0FDNUIsTUFBTyxNQUFLLE9BQU8sRUFBTyxJQUFVLEtBQUssU0FBUyxFQUFPLEdBRzdELFFBQVMsSUFBTSxFQUFPLEVBQU8sR0FDekIsR0FBSSxHQUNBLEVBQ0EsQ0FFSixLQUFLLEtBQUssVUFDTixNQUFPLElBS1gsSUFGQSxFQUFPLEdBQWdCLEVBQU8sT0FFekIsRUFBSyxVQUNOLE1BQU8sSUFPWCxRQUpBLEVBQW9ELEtBQXZDLEVBQUssWUFBYyxLQUFLLGFBRXJDLEVBQVEsRUFBZSxJQUduQixJQUFLLE9BQVEsRUFBUyxHQUFVLEtBQU0sR0FBUSxFQUFJLE1BQ2xELEtBQUssUUFBUyxFQUFTLEdBQVUsS0FBTSxFQUFPLE1BQzlDLEtBQUssVUFBVyxFQUFTLEdBQVUsS0FBTSxHQUFRLENBQUcsTUFDcEQsS0FBSyxTQUFVLEdBQVUsS0FBTyxHQUFRLEdBQUssTUFDN0MsS0FBSyxTQUFVLEdBQVUsS0FBTyxHQUFRLEdBQUssTUFDN0MsS0FBSyxPQUFRLEdBQVUsS0FBTyxHQUFRLElBQU0sTUFDNUMsS0FBSyxNQUFPLEdBQVUsS0FBTyxFQUFPLEdBQWEsS0FBTyxNQUN4RCxLQUFLLE9BQVEsR0FBVSxLQUFPLEVBQU8sR0FBYSxNQUFRLE1BQzFELFNBQVMsRUFBUyxLQUFPLEVBRzdCLE1BQU8sR0FBVSxFQUFTLEVBQVMsR0FHdkMsUUFBUyxJQUFXLEVBQUcsR0FFbkIsR0FHSSxHQUFTLEVBSFQsRUFBMEMsSUFBdkIsRUFBRSxPQUFTLEVBQUUsU0FBaUIsRUFBRSxRQUFVLEVBQUUsU0FFL0QsRUFBUyxFQUFFLFFBQVEsSUFBSSxFQUFnQixTQWMzQyxPQVhJLEdBQUksRUFBUyxHQUNiLEVBQVUsRUFBRSxRQUFRLElBQUksRUFBaUIsRUFBRyxVQUU1QyxHQUFVLEVBQUksSUFBVyxFQUFTLEtBRWxDLEVBQVUsRUFBRSxRQUFRLElBQUksRUFBaUIsRUFBRyxVQUU1QyxHQUFVLEVBQUksSUFBVyxFQUFVLE1BSTlCLEVBQWlCLElBQVcsRUFNekMsUUFBUyxNQUNMLE1BQU8sTUFBSyxRQUFRLE9BQU8sTUFBTSxPQUFPLG9DQUc1QyxRQUFTLElBQVksR0FDakIsSUFBSyxLQUFLLFVBQ04sTUFBTyxLQUVYLElBQUksSUFBcUIsSUFBZixFQUNOLEVBQUksRUFBTSxLQUFLLFFBQVEsTUFBUSxJQUNuQyxPQUFJLEdBQUUsT0FBUyxHQUFLLEVBQUUsT0FBUyxLQUNwQixFQUFhLEVBQUcsRUFBTSxpQ0FBbUMsZ0NBRWhFLEVBQVcsS0FBSyxVQUFVLGFBRXRCLEVBQ08sS0FBSyxTQUFTLGNBRWQsR0FBSSxNQUFLLEtBQUssVUFBK0IsR0FBbkIsS0FBSyxZQUFtQixLQUFNLGNBQWMsUUFBUSxJQUFLLEVBQWEsRUFBRyxNQUczRyxFQUFhLEVBQUcsRUFBTSwrQkFBaUMsOEJBU2xFLFFBQVMsTUFDTCxJQUFLLEtBQUssVUFDTixNQUFPLHFCQUF1QixLQUFLLEdBQUssTUFFNUMsSUFBSSxHQUFPLFNBQ1AsRUFBTyxFQUNOLE1BQUssWUFDTixFQUE0QixJQUFyQixLQUFLLFlBQW9CLGFBQWUsbUJBQy9DLEVBQU8sSUFFWCxJQUFJLEdBQVMsSUFBTSxFQUFPLE1BQ3RCLEVBQVEsR0FBSyxLQUFLLFFBQVUsS0FBSyxRQUFVLEtBQVEsT0FBUyxTQUU1RCxFQUFTLEVBQU8sTUFFcEIsT0FBTyxNQUFLLE9BQU8sRUFBUyxFQUhiLHdCQUcrQixHQUdsRCxRQUFTLElBQVEsR0FDUixJQUNELEVBQWMsS0FBSyxRQUFVLEVBQU0saUJBQW1CLEVBQU0sY0FFaEUsSUFBSSxHQUFTLEVBQWEsS0FBTSxFQUNoQyxPQUFPLE1BQUssYUFBYSxXQUFXLEdBR3hDLFFBQVMsSUFBTSxFQUFNLEdBQ2pCLE1BQUksTUFBSyxZQUNDLEVBQVMsSUFBUyxFQUFLLFdBQ3hCLEdBQVksR0FBTSxXQUNoQixJQUFnQixHQUFJLEtBQU0sS0FBTSxJQUFPLE9BQU8sS0FBSyxVQUFVLFVBQVUsR0FFdkUsS0FBSyxhQUFhLGNBSWpDLFFBQVMsSUFBUyxHQUNkLE1BQU8sTUFBSyxLQUFLLEtBQWUsR0FHcEMsUUFBUyxJQUFJLEVBQU0sR0FDZixNQUFJLE1BQUssWUFDQyxFQUFTLElBQVMsRUFBSyxXQUN4QixHQUFZLEdBQU0sV0FDaEIsSUFBZ0IsS0FBTSxLQUFNLEdBQUksSUFBTyxPQUFPLEtBQUssVUFBVSxVQUFVLEdBRXZFLEtBQUssYUFBYSxjQUlqQyxRQUFTLElBQU8sR0FDWixNQUFPLE1BQUssR0FBRyxLQUFlLEdBTWxDLFFBQVMsSUFBUSxHQUNiLEdBQUksRUFFSixZQUFZLEtBQVIsRUFDTyxLQUFLLFFBQVEsT0FFcEIsRUFBZ0IsR0FBVSxHQUNMLE1BQWpCLElBQ0EsS0FBSyxRQUFVLEdBRVosTUFlZixRQUFTLE1BQ0wsTUFBTyxNQUFLLFFBU2hCLFFBQVMsSUFBTSxFQUFVO2lCQUNyQixPQUFRLEVBQVcsRUFBVSxHQUFXLEVBRzVDLFFBQVMsSUFBaUIsRUFBRyxFQUFHLEdBRTVCLE1BQUksR0FBSSxLQUFPLEdBQUssRUFFVCxHQUFJLE1BQUssRUFBSSxJQUFLLEVBQUcsR0FBSyxHQUUxQixHQUFJLE1BQUssRUFBRyxFQUFHLEdBQUcsVUFJakMsUUFBUyxJQUFlLEVBQUcsRUFBRyxHQUUxQixNQUFJLEdBQUksS0FBTyxHQUFLLEVBRVQsS0FBSyxJQUFJLEVBQUksSUFBSyxFQUFHLEdBQUssR0FFMUIsS0FBSyxJQUFJLEVBQUcsRUFBRyxHQUk5QixRQUFTLElBQVMsR0FDZCxHQUFJLEVBRUosUUFBYyxNQURkLEVBQVEsRUFBZSxLQUNjLGdCQUFWLElBQTRCLEtBQUssVUFDeEQsTUFBTyxLQUdYLElBQUksR0FBYyxLQUFLLE9BQVMsR0FBaUIsRUFFakQsUUFBUSxHQUNKLElBQUssT0FDRCxFQUFPLEVBQVksS0FBSyxPQUFRLEVBQUcsRUFDbkMsTUFDSixLQUFLLFVBQ0QsRUFBTyxFQUFZLEtBQUssT0FBUSxLQUFLLFFBQVUsS0FBSyxRQUFVLEVBQUcsRUFDakUsTUFDSixLQUFLLFFBQ0QsRUFBTyxFQUFZLEtBQUssT0FBUSxLQUFLLFFBQVMsRUFDOUMsTUFDSixLQUFLLE9BQ0QsRUFBTyxFQUFZLEtBQUssT0FBUSxLQUFLLFFBQVMsS0FBSyxPQUFTLEtBQUssVUFDakUsTUFDSixLQUFLLFVBQ0QsRUFBTyxFQUFZLEtBQUssT0FBUSxLQUFLLFFBQVMsS0FBSyxRQUFVLEtBQUssYUFBZSxHQUNqRixNQUNKLEtBQUssTUFDTCxJQUFLLE9BQ0QsRUFBTyxFQUFZLEtBQUssT0FBUSxLQUFLLFFBQVMsS0FBSyxPQUNuRCxNQUNKLEtBQUssT0FDRCxFQUFPLEtBQUssR0FBRyxVQUNmLEdBQVEsR0FBTSxHQUFRLEtBQUssT0FBUyxFQUFJLEtBQUssWUFBYyxJQUFnQixHQUMzRSxNQUNKLEtBQUssU0FDRCxFQUFPLEtBQUssR0FBRyxVQUNmLEdBQVEsR0FBTSxFQUFNLEdBQ3BCLE1BQ0osS0FBSyxTQUNELEVBQU8sS0FBSyxHQUFHLFVBQ2YsR0FBUSxHQUFNLEVBQU0sSUFNNUIsTUFGQSxNQUFLLEdBQUcsUUFBUSxHQUNoQixFQUFNLGFBQWEsTUFBTSxHQUNsQixLQUdYLFFBQVMsSUFBTyxHQUNaLEdBQUksRUFFSixRQUFjLE1BRGQsRUFBUSxFQUFlLEtBQ2MsZ0JBQVYsSUFBNEIsS0FBSyxVQUN4RCxNQUFPLEtBR1gsSUFBSSxHQUFjLEtBQUssT0FBUyxHQUFpQixFQUVqRCxRQUFRLEdBQ0osSUFBSyxPQUNELEVBQU8sRUFBWSxLQUFLLE9BQVMsRUFBRyxFQUFHLEdBQUssQ0FDNUMsTUFDSixLQUFLLFVBQ0QsRUFBTyxFQUFZLEtBQUssT0FBUSxLQUFLLFFBQVUsS0FBSyxRQUFVLEVBQUksRUFBRyxHQUFLLENBQzFFLE1BQ0osS0FBSyxRQUNELEVBQU8sRUFBWSxLQUFLLE9BQVEsS0FBSyxRQUFVLEVBQUcsR0FBSyxDQUN2RCxNQUNKLEtBQUssT0FDRCxFQUFPLEVBQVksS0FBSyxPQUFRLEtBQUssUUFBUyxLQUFLLE9BQVMsS0FBSyxVQUFZLEdBQUssQ0FDbEYsTUFDSixLQUFLLFVBQ0QsRUFBTyxFQUFZLEtBQUssT0FBUSxLQUFLLFFBQVMsS0FBSyxRQUFVLEtBQUssYUFBZSxHQUFLLEdBQUssQ0FDM0YsTUFDSixLQUFLLE1BQ0wsSUFBSyxPQUNELEVBQU8sRUFBWSxLQUFLLE9BQVEsS0FBSyxRQUFTLEtBQUssT0FBUyxHQUFLLENBQ2pFLE1BQ0osS0FBSyxPQUNELEVBQU8sS0FBSyxHQUFHLFVBQ2YsR0FBUSxHQUFjLEdBQU0sR0FBUSxLQUFLLE9BQVMsRUFBSSxLQUFLLFlBQWMsSUFBZ0IsSUFBZSxDQUN4RyxNQUNKLEtBQUssU0FDRCxFQUFPLEtBQUssR0FBRyxVQUNmLEdBQVEsR0FBZ0IsR0FBTSxFQUFNLElBQWlCLENBQ3JELE1BQ0osS0FBSyxTQUNELEVBQU8sS0FBSyxHQUFHLFVBQ2YsR0FBUSxHQUFnQixHQUFNLEVBQU0sSUFBaUIsRUFNN0QsTUFGQSxNQUFLLEdBQUcsUUFBUSxHQUNoQixFQUFNLGFBQWEsTUFBTSxHQUNsQixLQUdYLFFBQVMsTUFDTCxNQUFPLE1BQUssR0FBRyxVQUFtQyxLQUFyQixLQUFLLFNBQVcsR0FHakQsUUFBUyxNQUNMLE1BQU8sTUFBSyxNQUFNLEtBQUssVUFBWSxLQUd2QyxRQUFTLE1BQ0wsTUFBTyxJQUFJLE1BQUssS0FBSyxXQUd6QixRQUFTLE1BQ0wsR0FBSSxHQUFJLElBQ1IsUUFBUSxFQUFFLE9BQVEsRUFBRSxRQUFTLEVBQUUsT0FBUSxFQUFFLE9BQVEsRUFBRSxTQUFVLEVBQUUsU0FBVSxFQUFFLGVBRy9FLFFBQVMsTUFDTCxHQUFJLEdBQUksSUFDUixRQUNJLE1BQU8sRUFBRSxPQUNULE9BQVEsRUFBRSxRQUNWLEtBQU0sRUFBRSxPQUNSLE1BQU8sRUFBRSxRQUNULFFBQVMsRUFBRSxVQUNYLFFBQVMsRUFBRSxVQUNYLGFBQWMsRUFBRSxnQkFJeEIsUUFBUyxNQUVMLE1BQU8sTUFBSyxVQUFZLEtBQUssY0FBZ0IsS0FHakQsUUFBUyxNQUNMLE1BQU8sR0FBUSxNQUduQixRQUFTLE1BQ0wsTUFBTyxNQUFXLEVBQWdCLE9BR3RDLFFBQVMsTUFDTCxNQUFPLEdBQWdCLE1BQU0sU0FHakMsUUFBUyxNQUNMLE9BQ0ksTUFBTyxLQUFLLEdBQ1osT0FBUSxLQUFLLEdBQ2IsT0FBUSxLQUFLLFFBQ2IsTUFBTyxLQUFLLE9BQ1osT0FBUSxLQUFLLFNBY3JCLFFBQVMsSUFBd0IsRUFBTyxHQUNwQyxFQUFlLEdBQUksRUFBTyxFQUFNLFFBQVMsRUFBRyxHQXdDaEQsUUFBUyxJQUFnQixHQUNyQixNQUFPLElBQXFCLEtBQUssS0FDekIsRUFDQSxLQUFLLE9BQ0wsS0FBSyxVQUNMLEtBQUssYUFBYSxNQUFNLElBQ3hCLEtBQUssYUFBYSxNQUFNLEtBR3BDLFFBQVMsSUFBbUIsR0FDeEIsTUFBTyxJQUFxQixLQUFLLEtBQ3pCLEVBQU8sS0FBSyxVQUFXLEtBQUssYUFBYyxFQUFHLEdBR3pELFFBQVMsTUFDTCxNQUFPLElBQVksS0FBSyxPQUFRLEVBQUcsR0FHdkMsUUFBUyxNQUNMLEdBQUksR0FBVyxLQUFLLGFBQWEsS0FDakMsT0FBTyxJQUFZLEtBQUssT0FBUSxFQUFTLElBQUssRUFBUyxLQUczRCxRQUFTLElBQXFCLEVBQU8sRUFBTSxFQUFTLEVBQUssR0FDckQsR0FBSSxFQUNKLE9BQWEsT0FBVCxFQUNPLEdBQVcsS0FBTSxFQUFLLEdBQUssTUFFbEMsRUFBYyxHQUFZLEVBQU8sRUFBSyxHQUNsQyxFQUFPLElBQ1AsRUFBTyxHQUVKLEdBQVcsS0FBSyxLQUFNLEVBQU8sRUFBTSxFQUFTLEVBQUssSUFJaEUsUUFBUyxJQUFXLEVBQVUsRUFBTSxFQUFTLEVBQUssR0FDOUMsR0FBSSxHQUFnQixHQUFtQixFQUFVLEVBQU0sRUFBUyxFQUFLLEdBQ2pFLEVBQU8sR0FBYyxFQUFjLEtBQU0sRUFBRyxFQUFjLFVBSzlELE9BSEEsTUFBSyxLQUFLLEVBQUssa0JBQ2YsS0FBSyxNQUFNLEVBQUssZUFDaEIsS0FBSyxLQUFLLEVBQUssY0FDUixLQXdCWCxRQUFTLElBQWUsR0FDcEIsTUFBZ0IsT0FBVCxFQUFnQixLQUFLLE1BQU0sS0FBSyxRQUFVLEdBQUssR0FBSyxLQUFLLE1BQW9CLEdBQWIsRUFBUSxHQUFTLEtBQUssUUFBVSxHQXlEM0csUUFBUyxJQUFpQixHQUN0QixHQUFJLEdBQVksS0FBSyxPQUFPLEtBQUssUUFBUSxRQUFRLE9BQVMsS0FBSyxRQUFRLFFBQVEsU0FBVyxPQUFTLENBQ25HLE9BQWdCLE9BQVQsRUFBZ0IsRUFBWSxLQUFLLElBQUssRUFBUSxFQUFZLEtBaUdyRSxRQUFTLElBQVEsRUFBTyxHQUNwQixFQUFNLElBQWUsRUFBdUIsS0FBaEIsS0FBTyxJQWlCdkMsUUFBUyxNQUNMLE1BQU8sTUFBSyxPQUFTLE1BQVEsR0FHakMsUUFBUyxNQUNMLE1BQU8sTUFBSyxPQUFTLDZCQUErQixHQWlGeEQsUUFBUyxJQUFZLEdBQ2pCLE1BQU8sSUFBb0IsSUFBUixHQUd2QixRQUFTLE1BQ0wsTUFBTyxJQUFZLE1BQU0sS0FBTSxXQUFXLFlBRzlDLFFBQVMsSUFBb0IsR0FDekIsTUFBTyxHQW9DWCxRQUFTLElBQU8sRUFBUSxFQUFPLEVBQU8sR0FDbEMsR0FBSSxHQUFTLEtBQ1QsRUFBTSxJQUFZLElBQUksRUFBUSxFQUNsQyxPQUFPLEdBQU8sR0FBTyxFQUFLLEdBRzlCLFFBQVMsSUFBZ0IsRUFBUSxFQUFPLEdBUXBDLEdBUEksRUFBUyxLQUNULEVBQVEsRUFDUixNQUFTLElBR2IsRUFBUyxHQUFVLEdBRU4sTUFBVCxFQUNBLE1BQU8sSUFBTSxFQUFRLEVBQU8sRUFBTyxRQUd2QyxJQUFJLEdBQ0EsSUFDSixLQUFLLEVBQUksRUFBRyxFQUFJLEdBQUksSUFDaEIsRUFBSSxHQUFLLEdBQU0sRUFBUSxFQUFHLEVBQU8sUUFFckMsT0FBTyxHQVdYLFFBQVMsSUFBa0IsRUFBYyxFQUFRLEVBQU8sR0FDeEIsaUJBQWpCLElBQ0gsRUFBUyxLQUNULEVBQVEsRUFDUixNQUFTLElBR2IsRUFBUyxHQUFVLEtBRW5CLEVBQVMsRUFDVCxFQUFRLEVBQ1IsR0FBZSxFQUVYLEVBQVMsS0FDVCxFQUFRLEVBQ1IsTUFBUyxJQUdiLEVBQVMsR0FBVSxHQUd2QixJQUFJLEdBQVMsS0FDVCxFQUFRLEVBQWUsRUFBTyxNQUFNLElBQU0sQ0FFOUMsSUFBYSxNQUFULEVBQ0EsTUFBTyxJQUFNLEdBQVMsRUFBUSxHQUFTLEVBQUcsRUFBTyxNQUdyRCxJQUFJLEdBQ0EsSUFDSixLQUFLLEVBQUksRUFBRyxFQUFJLEVBQUcsSUFDZixFQUFJLEdBQUssR0FBTSxHQUFTLEVBQUksR0FBUyxFQUFHLEVBQU8sTUFFbkQsT0FBTyxHQUdYLFFBQVMsSUFBWSxFQUFRLEdBQ3pCLE1BQU8sSUFBZSxFQUFRLEVBQU8sVUFHekMsUUFBUyxJQUFpQixFQUFRLEdBQzlCLE1BQU8sSUFBZSxFQUFRLEVBQU8sZUFHekMsUUFBUyxJQUFjLEVBQWMsRUFBUSxHQUN6QyxNQUFPLElBQWlCLEVBQWMsRUFBUSxFQUFPLFlBR3pELFFBQVMsSUFBbUIsRUFBYyxFQUFRLEdBQzlDLE1BQU8sSUFBaUIsRUFBYyxFQUFRLEVBQU8saUJBR3pELFFBQVMsSUFBaUIsRUFBYyxFQUFRLEdBQzVDLE1BQU8sSUFBaUIsRUFBYyxFQUFRLEVBQU8sZUFzQnpELFFBQVMsTUFDTCxHQUFJLEdBQWlCLEtBQUssS0FhMUIsT0FYQSxNQUFLLGNBQWdCLEdBQVEsS0FBSyxlQUNsQyxLQUFLLE1BQWdCLEdBQVEsS0FBSyxPQUNsQyxLQUFLLFFBQWdCLEdBQVEsS0FBSyxTQUVsQyxFQUFLLGFBQWdCLEdBQVEsRUFBSyxjQUNsQyxFQUFLLFFBQWdCLEdBQVEsRUFBSyxTQUNsQyxFQUFLLFFBQWdCLEdBQVEsRUFBSyxTQUNsQyxFQUFLLE1BQWdCLEdBQVEsRUFBSyxPQUNsQyxFQUFLLE9BQWdCLEdBQVEsRUFBSyxRQUNsQyxFQUFLLE1BQWdCLEdBQVEsRUFBSyxPQUUzQixLQUdYLFFBQVMsSUFBZSxFQUFVLEVBQU8sRUFBTyxHQUM1QyxHQUFJLEdBQVEsR0FBZSxFQUFPLEVBTWxDLE9BSkEsR0FBUyxlQUFpQixFQUFZLEVBQU0sY0FDNUMsRUFBUyxPQUFpQixFQUFZLEVBQU0sTUFDNUMsRUFBUyxTQUFpQixFQUFZLEVBQU0sUUFFckMsRUFBUyxVQUlwQixRQUFTLElBQU8sRUFBTyxHQUNuQixNQUFPLElBQWMsS0FBTSxFQUFPLEVBQU8sR0FJN0MsUUFBUyxJQUFZLEVBQU8sR0FDeEIsTUFBTyxJQUFjLEtBQU0sRUFBTyxHQUFRLEdBRzlDLFFBQVMsSUFBUyxHQUNkLE1BQUksR0FBUyxFQUNGLEtBQUssTUFBTSxHQUVYLEtBQUssS0FBSyxHQUl6QixRQUFTLE1BQ0wsR0FJSSxHQUFTLEVBQVMsRUFBTyxFQUFPLEVBSmhDLEVBQWUsS0FBSyxjQUNwQixFQUFlLEtBQUssTUFDcEIsRUFBZSxLQUFLLFFBQ3BCLEVBQWUsS0FBSyxLQXdDeEIsT0FuQ08sSUFBZ0IsR0FBSyxHQUFRLEdBQUssR0FBVSxHQUMxQyxHQUFnQixHQUFLLEdBQVEsR0FBSyxHQUFVLElBQ2pELEdBQXVELE1BQXZDLEdBQVEsR0FBYSxHQUFVLEdBQy9DLEVBQU8sRUFDUCxFQUFTLEdBS2IsRUFBSyxhQUFlLEVBQWUsSUFFbkMsRUFBb0IsRUFBUyxFQUFlLEtBQzVDLEVBQUssUUFBZSxFQUFVLEdBRTlCLEVBQW9CLEVBQVMsRUFBVSxJQUN2QyxFQUFLLFFBQWUsRUFBVSxHQUU5QixFQUFvQixFQUFTLEVBQVUsSUFDdkMsRUFBSyxNQUFlLEVBQVEsR0FFNUIsR0FBUSxFQUFTLEVBQVEsSUFHekIsRUFBaUIsRUFBUyxHQUFhLElBQ3ZDLEdBQVUsRUFDVixHQUFRLEdBQVEsR0FBYSxJQUc3QixFQUFRLEVBQVMsRUFBUyxJQUMxQixHQUFVLEdBRVYsRUFBSyxLQUFTLEVBQ2QsRUFBSyxPQUFTLEVBQ2QsRUFBSyxNQUFTLEVBRVAsS0FHWCxRQUFTLElBQWMsR0FHbkIsTUFBYyxNQUFQLEVBQWMsT0FHekIsUUFBUyxJQUFjLEdBRW5CLE1BQWdCLFFBQVQsRUFBa0IsS0FHN0IsUUFBUyxJQUFJLEdBQ1QsSUFBSyxLQUFLLFVBQ04sTUFBTyxJQUVYLElBQUksR0FDQSxFQUNBLEVBQWUsS0FBSyxhQUl4QixJQUFjLFdBRmQsRUFBUSxFQUFlLEtBRVksWUFBVixHQUFpQyxTQUFWLEVBRzVDLE9BRkEsRUFBTyxLQUFLLE1BQVEsRUFBZSxNQUNuQyxFQUFTLEtBQUssUUFBVSxHQUFhLEdBQzdCLEdBQ0osSUFBSyxRQUFXLE1BQU8sRUFDdkIsS0FBSyxVQUFXLE1BQU8sR0FBUyxDQUNoQyxLQUFLLE9BQVcsTUFBTyxHQUFTLE9BS3BDLFFBREEsRUFBTyxLQUFLLE1BQVEsS0FBSyxNQUFNLEdBQWEsS0FBSyxVQUN6QyxHQUNKLElBQUssT0FBVyxNQUFPLEdBQU8sRUFBUSxFQUFlLE1BQ3JELEtBQUssTUFBVyxNQUFPLEdBQWUsRUFBZSxLQUNyRCxLQUFLLE9BQVcsTUFBYyxJQUFQLEVBQWUsRUFBZSxJQUNyRCxLQUFLLFNBQVcsTUFBYyxNQUFQLEVBQWUsRUFBZSxHQUNyRCxLQUFLLFNBQVcsTUFBYyxPQUFQLEVBQWUsRUFBZSxHQUVyRCxLQUFLLGNBQWUsTUFBTyxNQUFLLE1BQWEsTUFBUCxHQUFnQixDQUN0RCxTQUFTLEtBQU0sSUFBSSxPQUFNLGdCQUFrQixJQU12RCxRQUFTLE1BQ0wsTUFBSyxNQUFLLFVBSU4sS0FBSyxjQUNRLE1BQWIsS0FBSyxNQUNKLEtBQUssUUFBVSxHQUFNLE9BQ0ssUUFBM0IsRUFBTSxLQUFLLFFBQVUsSUFOZCxJQVVmLFFBQVMsSUFBUSxHQUNiLE1BQU8sWUFDSCxNQUFPLE1BQUssR0FBRyxJQWN2QixRQUFTLE1BQ0wsTUFBTyxJQUFlLE1BRzFCLFFBQVMsSUFBTyxHQUVaLE1BREEsR0FBUSxFQUFlLEdBQ2hCLEtBQUssVUFBWSxLQUFLLEVBQVEsT0FBUyxJQUdsRCxRQUFTLElBQVcsR0FDaEIsTUFBTyxZQUNILE1BQU8sTUFBSyxVQUFZLEtBQUssTUFBTSxHQUFRLEtBWW5ELFFBQVMsTUFDTCxNQUFPLEdBQVMsS0FBSyxPQUFTLEdBY2xDLFFBQVMsSUFBa0IsRUFBUSxFQUFRLEVBQWUsRUFBVSxHQUNoRSxNQUFPLEdBQU8sYUFBYSxHQUFVLElBQUssRUFBZSxFQUFRLEdBR3JFLFFBQVMsSUFBZ0IsRUFBZ0IsRUFBZSxHQUNwRCxHQUFJLEdBQVcsR0FBZSxHQUFnQixNQUMxQyxFQUFXLEdBQU0sRUFBUyxHQUFHLE1BQzdCLEVBQVcsR0FBTSxFQUFTLEdBQUcsTUFDN0IsRUFBVyxHQUFNLEVBQVMsR0FBRyxNQUM3QixFQUFXLEdBQU0sRUFBUyxHQUFHLE1BQzdCLEVBQVcsR0FBTSxFQUFTLEdBQUcsTUFDN0IsRUFBVyxHQUFNLEVBQVMsR0FBRyxNQUU3QixFQUFJLEdBQVcsR0FBVyxLQUFPLElBQUssSUFDbEMsRUFBVSxHQUFXLElBQVEsS0FBTSxJQUNuQyxHQUFXLElBQWtCLE1BQzdCLEVBQVUsR0FBVyxJQUFRLEtBQU0sSUFDbkMsR0FBVyxJQUFrQixNQUM3QixFQUFVLEdBQVcsSUFBUSxLQUFNLElBQ25DLEdBQVcsSUFBa0IsTUFDN0IsRUFBVSxHQUFXLElBQVEsS0FBTSxJQUNuQyxHQUFXLElBQWtCLE1BQzdCLEVBQVUsR0FBVyxJQUFRLEtBQU0sSUFDbkMsR0FBVyxJQUFrQixPQUFtQixLQUFNLEVBSzlELE9BSEEsR0FBRSxHQUFLLEVBQ1AsRUFBRSxJQUFNLEVBQWlCLEVBQ3pCLEVBQUUsR0FBSyxFQUNBLEdBQWtCLE1BQU0sS0FBTSxHQUl6QyxRQUFTLElBQTRCLEdBQ2pDLFdBQXlCLEtBQXJCLEVBQ08sR0FFc0Isa0JBQXZCLEtBQ04sR0FBUSxHQUNELEdBTWYsUUFBUyxJQUE2QixFQUFXLEdBQzdDLFdBQThCLEtBQTFCLEdBQVcsU0FHRCxLQUFWLEVBQ08sR0FBVyxJQUV0QixHQUFXLEdBQWEsRUFDTixNQUFkLElBQ0EsR0FBVyxHQUFLLEVBQVEsSUFFckIsSUFHWCxRQUFTLElBQVUsR0FDZixJQUFLLEtBQUssVUFDTixNQUFPLE1BQUssYUFBYSxhQUc3QixJQUFJLEdBQVMsS0FBSyxhQUNkLEVBQVMsR0FBZSxNQUFPLEVBQVksRUFNL0MsT0FKSSxLQUNBLEVBQVMsRUFBTyxZQUFZLEtBQU0sSUFHL0IsRUFBTyxXQUFXLEdBSzdCLFFBQVMsSUFBSyxHQUNWLE9BQVMsRUFBSSxJQUFNLEVBQUksS0FBUSxFQUduQyxRQUFTLE1BUUwsSUFBSyxLQUFLLFVBQ04sTUFBTyxNQUFLLGFBQWEsYUFHN0IsSUFHSSxHQUFTLEVBQU8sRUFIaEIsRUFBVSxHQUFNLEtBQUssZUFBaUIsSUFDdEMsRUFBZSxHQUFNLEtBQUssT0FDMUIsRUFBZSxHQUFNLEtBQUssUUFJOUIsR0FBb0IsRUFBUyxFQUFVLElBQ3ZDLEVBQW9CLEVBQVMsRUFBVSxJQUN2QyxHQUFXLEdBQ1gsR0FBVyxHQUdYLEVBQVMsRUFBUyxFQUFTLElBQzNCLEdBQVUsRUFJVixJQUFJLEdBQUksRUFDSixFQUFJLEVBQ0osRUFBSSxFQUNKLEVBQUksRUFDSixFQUFJLEVBQ0osRUFBSSxFQUFVLEVBQVEsUUFBUSxHQUFHLFFBQVEsU0FBVSxJQUFNLEdBQ3pELEVBQVEsS0FBSyxXQUVqQixLQUFLLEVBR0QsTUFBTyxLQUdYLElBQUksR0FBWSxFQUFRLEVBQUksSUFBTSxHQUM5QixFQUFTLEdBQUssS0FBSyxXQUFhLEdBQUssR0FBUyxJQUFNLEdBQ3BELEVBQVcsR0FBSyxLQUFLLFNBQVcsR0FBSyxHQUFTLElBQU0sR0FDcEQsRUFBVSxHQUFLLEtBQUssaUJBQW1CLEdBQUssR0FBUyxJQUFNLEVBRS9ELE9BQU8sR0FBWSxLQUNkLEVBQUksRUFBUyxFQUFJLElBQU0sS0FDdkIsRUFBSSxFQUFTLEVBQUksSUFBTSxLQUN2QixFQUFJLEVBQVcsRUFBSSxJQUFNLEtBQ3hCLEdBQUssR0FBSyxFQUFLLElBQU0sS0FDdEIsRUFBSSxFQUFVLEVBQUksSUFBTSxLQUN4QixFQUFJLEVBQVUsRUFBSSxJQUFNLEtBQ3hCLEVBQUksRUFBVSxFQUFJLElBQU0sSUFwNElqQyxHQUFJLElBNkdBLEVBRUEsSUFEQSxNQUFNLFVBQVUsS0FDVCxNQUFNLFVBQVUsS0FFaEIsU0FBVSxHQUliLElBQUssR0FIRCxHQUFJLE9BQU8sTUFDWCxFQUFNLEVBQUUsU0FBVyxFQUVkLEVBQUksRUFBRyxFQUFJLEVBQUssSUFDckIsR0FBSSxJQUFLLElBQUssRUFBSSxLQUFLLEtBQU0sRUFBRSxHQUFJLEVBQUcsR0FDbEMsT0FBTyxDQUlmLFFBQU8sRUFvRGYsSUFBSSxJQUFtQixFQUFNLG9CQWlEekIsSUFBbUIsRUE4Rm5CLEtBWUosR0FBTSw2QkFBOEIsRUFDcEMsRUFBTSxtQkFBcUIsSUF5RDNCLElBQUksR0FHQSxJQURBLE9BQU8sS0FDQSxPQUFPLEtBRVAsU0FBVSxHQUNiLEdBQUksR0FBRyxJQUNQLEtBQUssSUFBSyxHQUNGLEVBQVcsRUFBSyxJQUNoQixFQUFJLEtBQUssRUFHakIsT0FBTyxHQUlmLElBQUksS0FDQSxRQUFVLGdCQUNWLFFBQVUsbUJBQ1YsU0FBVyxlQUNYLFFBQVUsb0JBQ1YsU0FBVyxzQkFDWCxTQUFXLEtBUVgsSUFDQSxJQUFPLFlBQ1AsR0FBTyxTQUNQLEVBQU8sYUFDUCxHQUFPLGVBQ1AsSUFBTyxzQkFDUCxLQUFPLDZCQXlCUCxHQUFnQyxVQU1oQyxJQUNBLE9BQVMsUUFDVCxLQUFTLFNBQ1QsRUFBSyxnQkFDTCxHQUFLLGFBQ0wsRUFBSyxXQUNMLEdBQUssYUFDTCxFQUFLLFVBQ0wsR0FBSyxXQUNMLEVBQUssUUFDTCxHQUFLLFVBQ0wsRUFBSyxVQUNMLEdBQUssWUFDTCxFQUFLLFNBQ0wsR0FBSyxZQWVMLE1BNEJBLE1BeUJBLEdBQW1CLHVMQUVuQixHQUF3Qiw2Q0FFeEIsTUFFQSxNQW9GQSxHQUFpQixLQUNqQixHQUFpQixPQUNqQixHQUFpQixRQUNqQixHQUFpQixRQUNqQixHQUFpQixhQUNqQixHQUFpQixRQUNqQixHQUFpQixZQUNqQixHQUFpQixnQkFDakIsR0FBaUIsVUFDakIsR0FBaUIsVUFDakIsR0FBaUIsZUFFakIsR0FBaUIsTUFDakIsR0FBaUIsV0FFakIsR0FBaUIscUJBQ2pCLEdBQW1CLDBCQUVuQixHQUFpQix1QkFJakIsR0FBWSx3SkFFWixNQTJCQSxNQThCQSxHQUFPLEVBQ1AsR0FBUSxFQUNSLEdBQU8sRUFDUCxHQUFPLEVBQ1AsR0FBUyxFQUNULEdBQVMsRUFDVCxHQUFjLEVBQ2QsR0FBTyxFQUNQLEdBQVUsQ0FJZCxHQUFlLElBQUssRUFBRyxFQUFHLFdBQ3RCLEdBQUksR0FBSSxLQUFLLE1BQ2IsT0FBTyxJQUFLLEtBQU8sR0FBSyxFQUFJLElBQU0sSUFHdEMsRUFBZSxHQUFJLEtBQU0sR0FBSSxFQUFHLFdBQzVCLE1BQU8sTUFBSyxPQUFTLE1BR3pCLEVBQWUsR0FBSSxPQUFVLEdBQVUsRUFBRyxRQUMxQyxFQUFlLEdBQUksUUFBVSxHQUFVLEVBQUcsUUFDMUMsRUFBZSxHQUFJLFNBQVUsR0FBRyxHQUFPLEVBQUcsUUFJMUMsRUFBYSxPQUFRLEtBSXJCLEVBQWdCLE9BQVEsR0FJeEIsRUFBYyxJQUFVLElBQ3hCLEVBQWMsS0FBVSxHQUFXLElBQ25DLEVBQWMsT0FBVSxHQUFXLElBQ25DLEVBQWMsUUFBVSxHQUFXLElBQ25DLEVBQWMsU0FBVSxHQUFXLElBRW5DLEdBQWUsUUFBUyxVQUFXLElBQ25DLEVBQWMsT0FBUSxTQUFVLEVBQU8sR0FDbkMsRUFBTSxJQUF5QixJQUFqQixFQUFNLE9BQWUsRUFBTSxrQkFBa0IsR0FBUyxFQUFNLEtBRTlFLEVBQWMsS0FBTSxTQUFVLEVBQU8sR0FDakMsRUFBTSxJQUFRLEVBQU0sa0JBQWtCLEtBRTFDLEVBQWMsSUFBSyxTQUFVLEVBQU8sR0FDaEMsRUFBTSxJQUFRLFNBQVMsRUFBTyxNQWVsQyxFQUFNLGtCQUFvQixTQUFVLEdBQ2hDLE1BQU8sR0FBTSxJQUFVLEVBQU0sR0FBUyxHQUFLLEtBQU8sS0FLdEQsSUFpRUksSUFqRUEsR0FBYSxHQUFXLFlBQVksRUFvRXBDLElBREEsTUFBTSxVQUFVLFFBQ04sTUFBTSxVQUFVLFFBRWhCLFNBQVUsR0FFaEIsR0FBSSxFQUNKLEtBQUssRUFBSSxFQUFHLEVBQUksS0FBSyxTQUFVLEVBQzNCLEdBQUksS0FBSyxLQUFPLEVBQ1osTUFBTyxFQUdmLFFBQVEsR0FlaEIsRUFBZSxLQUFNLEtBQU0sR0FBSSxLQUFNLFdBQ2pDLE1BQU8sTUFBSyxRQUFVLElBRzFCLEVBQWUsTUFBTyxFQUFHLEVBQUcsU0FBVSxHQUNsQyxNQUFPLE1BQUssYUFBYSxZQUFZLEtBQU0sS0FHL0MsRUFBZSxPQUFRLEVBQUcsRUFBRyxTQUFVLEdBQ25DLE1BQU8sTUFBSyxhQUFhLE9BQU8sS0FBTSxLQUsxQyxFQUFhLFFBQVMsS0FJdEIsRUFBZ0IsUUFBUyxHQUl6QixFQUFjLElBQVEsSUFDdEIsRUFBYyxLQUFRLEdBQVcsSUFDakMsRUFBYyxNQUFRLFNBQVUsRUFBVSxHQUN0QyxNQUFPLEdBQU8saUJBQWlCLEtBRW5DLEVBQWMsT0FBUSxTQUFVLEVBQVUsR0FDdEMsTUFBTyxHQUFPLFlBQVksS0FHOUIsR0FBZSxJQUFLLE1BQU8sU0FBVSxFQUFPLEdBQ3hDLEVBQU0sSUFBUyxFQUFNLEdBQVMsSUFHbEMsR0FBZSxNQUFPLFFBQVMsU0FBVSxFQUFPLEVBQU8sRUFBUSxHQUMzRCxHQUFJLEdBQVEsRUFBTyxRQUFRLFlBQVksRUFBTyxFQUFPLEVBQU8sUUFFL0MsT0FBVCxFQUNBLEVBQU0sSUFBUyxFQUVmLEVBQWdCLEdBQVEsYUFBZSxHQU0vQyxJQUFJLElBQW1CLGdDQUNuQixHQUFzQix3RkFBd0YsTUFBTSxLQVVwSCxHQUEyQixrREFBa0QsTUFBTSxLQWtJbkYsR0FBMEIsR0FvQjFCLEdBQXFCLEVBMEp6QixHQUFlLEtBQU0sS0FBTSxHQUFJLEtBQU0sUUFDckMsRUFBZSxLQUFNLEtBQU0sR0FBSSxLQUFNLFdBSXJDLEVBQWEsT0FBUSxLQUNyQixFQUFhLFVBQVcsS0FJeEIsRUFBZ0IsT0FBUSxHQUN4QixFQUFnQixVQUFXLEdBSTNCLEVBQWMsSUFBTSxJQUNwQixFQUFjLEtBQU0sR0FBVyxJQUMvQixFQUFjLElBQU0sSUFDcEIsRUFBYyxLQUFNLEdBQVcsSUFFL0IsR0FBbUIsSUFBSyxLQUFNLElBQUssTUFBTyxTQUFVLEVBQU8sRUFBTSxFQUFRLEdBQ3JFLEVBQUssRUFBTSxPQUFPLEVBQUcsSUFBTSxFQUFNLElBV3JDLElBQUksS0FDQSxJQUFNLEVBQ04sSUFBTSxFQXlCVixHQUFlLElBQUssRUFBRyxLQUFNLE9BRTdCLEVBQWUsS0FBTSxFQUFHLEVBQUcsU0FBVSxHQUNqQyxNQUFPLE1BQUssYUFBYSxZQUFZLEtBQU0sS0FHL0MsRUFBZSxNQUFPLEVBQUcsRUFBRyxTQUFVLEdBQ2xDLE1BQU8sTUFBSyxhQUFhLGNBQWMsS0FBTSxLQUdqRCxFQUFlLE9BQVEsRUFBRyxFQUFHLFNBQVUsR0FDbkMsTUFBTyxNQUFLLGFBQWEsU0FBUyxLQUFNLEtBRzVDLEVBQWUsSUFBSyxFQUFHLEVBQUcsV0FDMUIsRUFBZSxJQUFLLEVBQUcsRUFBRyxjQUkxQixFQUFhLE1BQU8sS0FDcEIsRUFBYSxVQUFXLEtBQ3hCLEVBQWEsYUFBYyxLQUczQixFQUFnQixNQUFPLElBQ3ZCLEVBQWdCLFVBQVcsSUFDM0IsRUFBZ0IsYUFBYyxJQUk5QixFQUFjLElBQVEsSUFDdEIsRUFBYyxJQUFRLElBQ3RCLEVBQWMsSUFBUSxJQUN0QixFQUFjLEtBQVEsU0FBVSxFQUFVLEdBQ3RDLE1BQU8sR0FBTyxpQkFBaUIsS0FFbkMsRUFBYyxNQUFTLFNBQVUsRUFBVSxHQUN2QyxNQUFPLEdBQU8sbUJBQW1CLEtBRXJDLEVBQWMsT0FBVSxTQUFVLEVBQVUsR0FDeEMsTUFBTyxHQUFPLGNBQWMsS0FHaEMsR0FBbUIsS0FBTSxNQUFPLFFBQVMsU0FBVSxFQUFPLEVBQU0sRUFBUSxHQUNwRSxHQUFJLEdBQVUsRUFBTyxRQUFRLGNBQWMsRUFBTyxFQUFPLEVBQU8sUUFFakQsT0FBWCxFQUNBLEVBQUssRUFBSSxFQUVULEVBQWdCLEdBQVEsZUFBaUIsSUFJakQsR0FBbUIsSUFBSyxJQUFLLEtBQU0sU0FBVSxFQUFPLEVBQU0sRUFBUSxHQUM5RCxFQUFLLEdBQVMsRUFBTSxJQWtDeEIsSUFBSSxJQUF3QiwyREFBMkQsTUFBTSxLQVF6RixHQUE2Qiw4QkFBOEIsTUFBTSxLQU1qRSxHQUEyQix1QkFBdUIsTUFBTSxLQXNKeEQsR0FBdUIsR0FvQnZCLEdBQTRCLEdBb0I1QixHQUEwQixFQXdFOUIsR0FBZSxLQUFNLEtBQU0sR0FBSSxFQUFHLFFBQ2xDLEVBQWUsS0FBTSxLQUFNLEdBQUksRUFBRyxJQUNsQyxFQUFlLEtBQU0sS0FBTSxHQUFJLEVBQUcsSUFFbEMsRUFBZSxNQUFPLEVBQUcsRUFBRyxXQUN4QixNQUFPLEdBQUssR0FBUSxNQUFNLE1BQVEsRUFBUyxLQUFLLFVBQVcsS0FHL0QsRUFBZSxRQUFTLEVBQUcsRUFBRyxXQUMxQixNQUFPLEdBQUssR0FBUSxNQUFNLE1BQVEsRUFBUyxLQUFLLFVBQVcsR0FDdkQsRUFBUyxLQUFLLFVBQVcsS0FHakMsRUFBZSxNQUFPLEVBQUcsRUFBRyxXQUN4QixNQUFPLEdBQUssS0FBSyxRQUFVLEVBQVMsS0FBSyxVQUFXLEtBR3hELEVBQWUsUUFBUyxFQUFHLEVBQUcsV0FDMUIsTUFBTyxHQUFLLEtBQUssUUFBVSxFQUFTLEtBQUssVUFBVyxHQUNoRCxFQUFTLEtBQUssVUFBVyxLQVNqQyxHQUFTLEtBQUssR0FDZCxHQUFTLEtBQUssR0FJZCxFQUFhLE9BQVEsS0FHckIsRUFBZ0IsT0FBUSxJQVF4QixFQUFjLElBQU0sSUFDcEIsRUFBYyxJQUFNLElBQ3BCLEVBQWMsSUFBTSxJQUNwQixFQUFjLElBQU0sSUFDcEIsRUFBYyxJQUFNLElBQ3BCLEVBQWMsS0FBTSxHQUFXLElBQy9CLEVBQWMsS0FBTSxHQUFXLElBQy9CLEVBQWMsS0FBTSxHQUFXLElBRS9CLEVBQWMsTUFBTyxJQUNyQixFQUFjLFFBQVMsSUFDdkIsRUFBYyxNQUFPLElBQ3JCLEVBQWMsUUFBUyxJQUV2QixHQUFlLElBQUssTUFBTyxJQUMzQixHQUFlLElBQUssTUFBTyxTQUFVLEVBQU8sRUFBTyxHQUMvQyxHQUFJLEdBQVMsRUFBTSxFQUNuQixHQUFNLElBQW1CLEtBQVgsRUFBZ0IsRUFBSSxJQUV0QyxHQUFlLElBQUssS0FBTSxTQUFVLEVBQU8sRUFBTyxHQUM5QyxFQUFPLE1BQVEsRUFBTyxRQUFRLEtBQUssR0FDbkMsRUFBTyxVQUFZLElBRXZCLEdBQWUsSUFBSyxNQUFPLFNBQVUsRUFBTyxFQUFPLEdBQy9DLEVBQU0sSUFBUSxFQUFNLEdBQ3BCLEVBQWdCLEdBQVEsU0FBVSxJQUV0QyxFQUFjLE1BQU8sU0FBVSxFQUFPLEVBQU8sR0FDekMsR0FBSSxHQUFNLEVBQU0sT0FBUyxDQUN6QixHQUFNLElBQVEsRUFBTSxFQUFNLE9BQU8sRUFBRyxJQUNwQyxFQUFNLElBQVUsRUFBTSxFQUFNLE9BQU8sSUFDbkMsRUFBZ0IsR0FBUSxTQUFVLElBRXRDLEVBQWMsUUFBUyxTQUFVLEVBQU8sRUFBTyxHQUMzQyxHQUFJLEdBQU8sRUFBTSxPQUFTLEVBQ3RCLEVBQU8sRUFBTSxPQUFTLENBQzFCLEdBQU0sSUFBUSxFQUFNLEVBQU0sT0FBTyxFQUFHLElBQ3BDLEVBQU0sSUFBVSxFQUFNLEVBQU0sT0FBTyxFQUFNLElBQ3pDLEVBQU0sSUFBVSxFQUFNLEVBQU0sT0FBTyxJQUNuQyxFQUFnQixHQUFRLFNBQVUsSUFFdEMsRUFBYyxNQUFPLFNBQVUsRUFBTyxFQUFPLEdBQ3pDLEdBQUksR0FBTSxFQUFNLE9BQVMsQ0FDekIsR0FBTSxJQUFRLEVBQU0sRUFBTSxPQUFPLEVBQUcsSUFDcEMsRUFBTSxJQUFVLEVBQU0sRUFBTSxPQUFPLE1BRXZDLEVBQWMsUUFBUyxTQUFVLEVBQU8sRUFBTyxHQUMzQyxHQUFJLEdBQU8sRUFBTSxPQUFTLEVBQ3RCLEVBQU8sRUFBTSxPQUFTLENBQzFCLEdBQU0sSUFBUSxFQUFNLEVBQU0sT0FBTyxFQUFHLElBQ3BDLEVBQU0sSUFBVSxFQUFNLEVBQU0sT0FBTyxFQUFNLElBQ3pDLEVBQU0sSUFBVSxFQUFNLEVBQU0sT0FBTyxLQVd2QyxJQXlDSSxJQXpDQSxHQUE2QixnQkFnQjdCLEdBQWEsR0FBVyxTQUFTLEdBRWpDLElBQ0EsU0FBVSxHQUNWLGVBQWdCLEdBQ2hCLFlBN3pDcUIsZUE4ekNyQixRQXh6Q2lCLEtBeXpDakIsdUJBQXdCLEdBQ3hCLGFBQWMsR0FFZCxPQUFRLEdBQ1IsWUFBYSxHQUViLEtBQU0sR0FFTixTQUFVLEdBQ1YsWUFBYSxHQUNiLGNBQWUsR0FFZixjQUFlLElBSWYsTUFDQSxNQStXQSxHQUFtQixtSkFDbkIsR0FBZ0IsOElBRWhCLEdBQVUsd0JBRVYsS0FDQyxlQUFnQix3QkFDaEIsYUFBYyxvQkFDZCxlQUFnQixtQkFDaEIsYUFBYyxlQUFlLElBQzdCLFdBQVksZ0JBQ1osVUFBVyxjQUFjLElBQ3pCLGFBQWMsZUFDZCxXQUFZLFVBRVosYUFBYyxnQkFDZCxZQUFhLGVBQWUsSUFDNUIsVUFBVyxVQUlaLEtBQ0MsZ0JBQWlCLHdCQUNqQixnQkFBaUIsdUJBQ2pCLFdBQVksbUJBQ1osUUFBUyxjQUNULGNBQWUsc0JBQ2YsY0FBZSxxQkFDZixTQUFVLGlCQUNWLE9BQVEsYUFDUixLQUFNLFNBR1AsR0FBa0Isc0JBd0RsQixHQUFVLDBMQStDVixJQUNBLEdBQUksRUFDSixJQUFLLEVBQ0wsS0FBSyxJQUNMLEtBQUssSUFDTCxLQUFLLElBQ0wsS0FBSyxJQUNMLEtBQUssSUFDTCxLQUFLLElBQ0wsS0FBSyxJQUNMLEtBQUssSUFnRVQsR0FBTSx3QkFBMEIsRUFDNUIsaVZBSUEsU0FBVSxHQUNOLEVBQU8sR0FBSyxHQUFJLE1BQUssRUFBTyxJQUFNLEVBQU8sUUFBVSxPQUFTLE9BS3BFLEVBQU0sU0FBVyxhQUdqQixFQUFNLFNBQVcsWUE2UGpCLElBQUksSUFBZSxFQUNmLHFHQUNBLFdBQ0ksR0FBSSxHQUFRLEdBQVksTUFBTSxLQUFNLFVBQ3BDLE9BQUksTUFBSyxXQUFhLEVBQU0sVUFDakIsRUFBUSxLQUFPLEtBQU8sRUFFdEIsTUFLZixHQUFlLEVBQ2YscUdBQ0EsV0FDSSxHQUFJLEdBQVEsR0FBWSxNQUFNLEtBQU0sVUFDcEMsT0FBSSxNQUFLLFdBQWEsRUFBTSxVQUNqQixFQUFRLEtBQU8sS0FBTyxFQUV0QixNQXdDZixHQUFNLFdBQ04sTUFBTyxNQUFLLElBQU0sS0FBSyxPQUFTLEdBQUssT0FHckMsSUFBWSxPQUFRLFVBQVcsUUFBUyxPQUFRLE1BQU8sT0FBUSxTQUFVLFNBQVUsY0ErRnZGLElBQU8sSUFBSyxLQUNaLEdBQU8sS0FBTSxJQUliLEVBQWMsSUFBTSxJQUNwQixFQUFjLEtBQU0sSUFDcEIsR0FBZSxJQUFLLE1BQU8sU0FBVSxFQUFPLEVBQU8sR0FDL0MsRUFBTyxTQUFVLEVBQ2pCLEVBQU8sS0FBTyxHQUFpQixHQUFrQixJQVFyRCxJQUFJLElBQWMsaUJBMkNsQixHQUFNLGFBQWUsWUFtSnJCLElBQUksSUFBYywyREFLZCxHQUFXLHFLQStEZixJQUFlLEdBQUssR0FBUyxVQUM3QixHQUFlLFFBQVUsRUF1RnpCLElBQUksSUFBVyxHQUFZLEVBQUcsT0FDMUIsR0FBVyxJQUFhLEVBQUcsV0ErSS9CLEdBQU0sY0FBZ0IsdUJBQ3RCLEVBQU0saUJBQW1CLHdCQXVHekIsSUFBSSxJQUFPLEVBQ1Asa0pBQ0EsU0FBVSxHQUNOLFdBQVksS0FBUixFQUNPLEtBQUssYUFFTCxLQUFLLE9BQU8sS0FTM0IsR0FBZ0IsSUFDaEIsR0FBZ0IsR0FBSyxHQUNyQixHQUFjLEdBQUssR0FDbkIsR0FBbUIsUUFBd0IsRUFzTC9DLEdBQWUsR0FBSSxLQUFNLEdBQUksRUFBRyxXQUM1QixNQUFPLE1BQUssV0FBYSxNQUc3QixFQUFlLEdBQUksS0FBTSxHQUFJLEVBQUcsV0FDNUIsTUFBTyxNQUFLLGNBQWdCLE1BT2hDLEdBQXVCLE9BQVksWUFDbkMsR0FBdUIsUUFBWSxZQUNuQyxHQUF1QixPQUFTLGVBQ2hDLEdBQXVCLFFBQVMsZUFJaEMsRUFBYSxXQUFZLE1BQ3pCLEVBQWEsY0FBZSxNQUk1QixFQUFnQixXQUFZLEdBQzVCLEVBQWdCLGNBQWUsR0FLL0IsRUFBYyxJQUFVLElBQ3hCLEVBQWMsSUFBVSxJQUN4QixFQUFjLEtBQVUsR0FBVyxJQUNuQyxFQUFjLEtBQVUsR0FBVyxJQUNuQyxFQUFjLE9BQVUsR0FBVyxJQUNuQyxFQUFjLE9BQVUsR0FBVyxJQUNuQyxFQUFjLFFBQVUsR0FBVyxJQUNuQyxFQUFjLFFBQVUsR0FBVyxJQUVuQyxHQUFtQixPQUFRLFFBQVMsT0FBUSxTQUFVLFNBQVUsRUFBTyxFQUFNLEVBQVEsR0FDakYsRUFBSyxFQUFNLE9BQU8sRUFBRyxJQUFNLEVBQU0sS0FHckMsR0FBbUIsS0FBTSxNQUFPLFNBQVUsRUFBTyxFQUFNLEVBQVEsR0FDM0QsRUFBSyxHQUFTLEVBQU0sa0JBQWtCLEtBcUQxQyxFQUFlLElBQUssRUFBRyxLQUFNLFdBSTdCLEVBQWEsVUFBVyxLQUl4QixFQUFnQixVQUFXLEdBSTNCLEVBQWMsSUFBSyxJQUNuQixFQUFjLElBQUssU0FBVSxFQUFPLEdBQ2hDLEVBQU0sSUFBOEIsR0FBcEIsRUFBTSxHQUFTLEtBV25DLEVBQWUsS0FBTSxLQUFNLEdBQUksS0FBTSxRQUlyQyxFQUFhLE9BQVEsS0FHckIsRUFBZ0IsT0FBUSxHQUl4QixFQUFjLElBQU0sSUFDcEIsRUFBYyxLQUFNLEdBQVcsSUFDL0IsRUFBYyxLQUFNLFNBQVUsRUFBVSxHQUVwQyxNQUFPLEdBQ0osRUFBTyx5QkFBMkIsRUFBTyxjQUMxQyxFQUFPLGlDQUdiLEdBQWUsSUFBSyxNQUFPLElBQzNCLEVBQWMsS0FBTSxTQUFVLEVBQU8sR0FDakMsRUFBTSxJQUFRLEVBQU0sRUFBTSxNQUFNLElBQVcsS0FLL0MsSUFBSSxJQUFtQixHQUFXLFFBQVEsRUFJMUMsR0FBZSxPQUFRLE9BQVEsR0FBSSxPQUFRLGFBSTNDLEVBQWEsWUFBYSxPQUcxQixFQUFnQixZQUFhLEdBSTdCLEVBQWMsTUFBUSxJQUN0QixFQUFjLE9BQVEsSUFDdEIsR0FBZSxNQUFPLFFBQVMsU0FBVSxFQUFPLEVBQU8sR0FDbkQsRUFBTyxXQUFhLEVBQU0sS0FjOUIsRUFBZSxLQUFNLEtBQU0sR0FBSSxFQUFHLFVBSWxDLEVBQWEsU0FBVSxLQUl2QixFQUFnQixTQUFVLElBSTFCLEVBQWMsSUFBTSxJQUNwQixFQUFjLEtBQU0sR0FBVyxJQUMvQixHQUFlLElBQUssTUFBTyxHQUkzQixJQUFJLElBQWUsR0FBVyxXQUFXLEVBSXpDLEdBQWUsS0FBTSxLQUFNLEdBQUksRUFBRyxVQUlsQyxFQUFhLFNBQVUsS0FJdkIsRUFBZ0IsU0FBVSxJQUkxQixFQUFjLElBQU0sSUFDcEIsRUFBYyxLQUFNLEdBQVcsSUFDL0IsR0FBZSxJQUFLLE1BQU8sR0FJM0IsSUFBSSxJQUFlLEdBQVcsV0FBVyxFQUl6QyxHQUFlLElBQUssRUFBRyxFQUFHLFdBQ3RCLFNBQVUsS0FBSyxjQUFnQixPQUduQyxFQUFlLEdBQUksS0FBTSxHQUFJLEVBQUcsV0FDNUIsU0FBVSxLQUFLLGNBQWdCLE1BR25DLEVBQWUsR0FBSSxNQUFPLEdBQUksRUFBRyxlQUNqQyxFQUFlLEdBQUksT0FBUSxHQUFJLEVBQUcsV0FDOUIsTUFBNEIsSUFBckIsS0FBSyxnQkFFaEIsRUFBZSxHQUFJLFFBQVMsR0FBSSxFQUFHLFdBQy9CLE1BQTRCLEtBQXJCLEtBQUssZ0JBRWhCLEVBQWUsR0FBSSxTQUFVLEdBQUksRUFBRyxXQUNoQyxNQUE0QixLQUFyQixLQUFLLGdCQUVoQixFQUFlLEdBQUksVUFBVyxHQUFJLEVBQUcsV0FDakMsTUFBNEIsS0FBckIsS0FBSyxnQkFFaEIsRUFBZSxHQUFJLFdBQVksR0FBSSxFQUFHLFdBQ2xDLE1BQTRCLEtBQXJCLEtBQUssZ0JBRWhCLEVBQWUsR0FBSSxZQUFhLEdBQUksRUFBRyxXQUNuQyxNQUE0QixLQUFyQixLQUFLLGdCQU1oQixFQUFhLGNBQWUsTUFJNUIsRUFBZ0IsY0FBZSxJQUkvQixFQUFjLElBQVEsR0FBVyxJQUNqQyxFQUFjLEtBQVEsR0FBVyxJQUNqQyxFQUFjLE1BQVEsR0FBVyxHQUVqQyxJQUFJLEdBQ0osS0FBSyxHQUFRLE9BQVEsR0FBTSxRQUFVLEVBQUcsSUFBUyxJQUM3QyxFQUFjLEdBQU8sR0FPekIsS0FBSyxHQUFRLElBQUssR0FBTSxRQUFVLEVBQUcsSUFBUyxJQUMxQyxFQUFjLEdBQU8sR0FJekIsSUFBSSxJQUFvQixHQUFXLGdCQUFnQixFQUluRCxHQUFlLElBQU0sRUFBRyxFQUFHLFlBQzNCLEVBQWUsS0FBTSxFQUFHLEVBQUcsV0FZM0IsSUFBSSxJQUFRLEVBQU8sU0FFbkIsSUFBTSxJQUFvQixHQUMxQixHQUFNLFNBQW9CLEdBQzFCLEdBQU0sTUFBb0IsR0FDMUIsR0FBTSxLQUFvQixHQUMxQixHQUFNLE1BQW9CLEdBQzFCLEdBQU0sT0FBb0IsR0FDMUIsR0FBTSxLQUFvQixHQUMxQixHQUFNLFFBQW9CLEdBQzFCLEdBQU0sR0FBb0IsR0FDMUIsR0FBTSxNQUFvQixHQUMxQixHQUFNLElBQW9CLEdBQzFCLEdBQU0sVUFBb0IsR0FDMUIsR0FBTSxRQUFvQixHQUMxQixHQUFNLFNBQW9CLEdBQzFCLEdBQU0sVUFBb0IsR0FDMUIsR0FBTSxPQUFvQixHQUMxQixHQUFNLGNBQW9CLEdBQzFCLEdBQU0sZUFBb0IsR0FDMUIsR0FBTSxRQUFvQixHQUMxQixHQUFNLEtBQW9CLEdBQzFCLEdBQU0sT0FBb0IsR0FDMUIsR0FBTSxXQUFvQixHQUMxQixHQUFNLElBQW9CLEdBQzFCLEdBQU0sSUFBb0IsR0FDMUIsR0FBTSxhQUFvQixHQUMxQixHQUFNLElBQW9CLEdBQzFCLEdBQU0sUUFBb0IsR0FDMUIsR0FBTSxTQUFvQixHQUMxQixHQUFNLFFBQW9CLEdBQzFCLEdBQU0sU0FBb0IsR0FDMUIsR0FBTSxPQUFvQixHQUMxQixHQUFNLFlBQW9CLEdBQzFCLEdBQU0sUUFBb0IsR0FDMUIsR0FBTSxPQUFvQixHQUMxQixHQUFNLFNBQW9CLEdBQzFCLEdBQU0sS0FBb0IsR0FDMUIsR0FBTSxRQUFvQixHQUMxQixHQUFNLGFBQW9CLEdBQzFCLEdBQU0sS0FBYSxHQUNuQixHQUFNLFdBQWEsR0FDbkIsR0FBTSxTQUFjLEdBQ3BCLEdBQU0sWUFBYyxHQUNwQixHQUFNLFFBQVUsR0FBTSxTQUFXLEdBQ2pDLEdBQU0sTUFBYyxHQUNwQixHQUFNLFlBQWMsR0FDcEIsR0FBTSxLQUFpQixHQUFNLE1BQWUsR0FDNUMsR0FBTSxRQUFpQixHQUFNLFNBQWUsR0FDNUMsR0FBTSxZQUFpQixHQUN2QixHQUFNLGVBQWlCLEdBQ3ZCLEdBQU0sS0FBYSxHQUNuQixHQUFNLElBQWEsR0FBTSxLQUFtQixHQUM1QyxHQUFNLFFBQWEsR0FDbkIsR0FBTSxXQUFhLEdBQ25CLEdBQU0sVUFBYSxHQUNuQixHQUFNLEtBQU8sR0FBTSxNQUFRLEdBQzNCLEdBQU0sT0FBUyxHQUFNLFFBQVUsR0FDL0IsR0FBTSxPQUFTLEdBQU0sUUFBVSxHQUMvQixHQUFNLFlBQWMsR0FBTSxhQUFlLEdBQ3pDLEdBQU0sVUFBdUIsR0FDN0IsR0FBTSxJQUF1QixHQUM3QixHQUFNLE1BQXVCLEdBQzdCLEdBQU0sVUFBdUIsR0FDN0IsR0FBTSxxQkFBdUIsR0FDN0IsR0FBTSxNQUF1QixHQUM3QixHQUFNLFFBQXVCLEdBQzdCLEdBQU0sWUFBdUIsR0FDN0IsR0FBTSxNQUF1QixHQUM3QixHQUFNLE1BQXVCLEdBQzdCLEdBQU0sU0FBVyxHQUNqQixHQUFNLFNBQVcsR0FDakIsR0FBTSxNQUFTLEVBQVUsa0RBQW1ELElBQzVFLEdBQU0sT0FBUyxFQUFVLG1EQUFvRCxJQUM3RSxHQUFNLE1BQVMsRUFBVSxpREFBa0QsSUFDM0UsR0FBTSxLQUFTLEVBQVUsMkdBQTRHLElBQ3JJLEdBQU0sYUFBZSxFQUFVLDBHQUEyRyxHQWMxSSxJQUFJLElBQVUsRUFBTyxTQUVyQixJQUFRLFNBQWtCLEVBQzFCLEdBQVEsZUFBa0IsRUFDMUIsR0FBUSxZQUFrQixFQUMxQixHQUFRLFFBQWtCLEVBQzFCLEdBQVEsU0FBa0IsR0FDMUIsR0FBUSxXQUFrQixHQUMxQixHQUFRLGFBQWtCLEVBQzFCLEdBQVEsV0FBa0IsRUFDMUIsR0FBUSxJQUFrQixFQUUxQixHQUFRLE9BQTJCLEdBQ25DLEdBQVEsWUFBMkIsR0FDbkMsR0FBUSxZQUEyQixHQUNuQyxHQUFRLFlBQW9CLEdBQzVCLEdBQVEsaUJBQW9CLEdBQzVCLEdBQVEsS0FBTyxHQUNmLEdBQVEsZUFBaUIsR0FDekIsR0FBUSxlQUFpQixHQUV6QixHQUFRLFNBQXdCLEdBQ2hDLEdBQVEsWUFBd0IsR0FDaEMsR0FBUSxjQUF3QixHQUNoQyxHQUFRLGNBQXdCLEdBRWhDLEdBQVEsY0FBNkIsR0FDckMsR0FBUSxtQkFBNkIsR0FDckMsR0FBUSxpQkFBNkIsR0FFckMsR0FBUSxLQUFPLEdBQ2YsR0FBUSxTQUFXLEdBNEZuQixHQUFtQixNQUNmLHVCQUF3Qix1QkFDeEIsUUFBVSxTQUFVLEdBQ2hCLEdBQUksR0FBSSxFQUFTLEVBS2pCLE9BQU8sSUFKb0MsSUFBN0IsRUFBTSxFQUFTLElBQU0sSUFBYSxLQUNyQyxJQUFOLEVBQVcsS0FDTCxJQUFOLEVBQVcsS0FDTCxJQUFOLEVBQVcsS0FBTyxTQU8vQixFQUFNLEtBQU8sRUFBVSx3REFBeUQsSUFDaEYsRUFBTSxTQUFXLEVBQVUsZ0VBQWlFLEdBRTVGLElBQUksSUFBVSxLQUFLLElBOEpmLEdBQWlCLEdBQU8sTUFDeEIsR0FBaUIsR0FBTyxLQUN4QixHQUFpQixHQUFPLEtBQ3hCLEdBQWlCLEdBQU8sS0FDeEIsR0FBaUIsR0FBTyxLQUN4QixHQUFpQixHQUFPLEtBQ3hCLEdBQWlCLEdBQU8sS0FDeEIsR0FBaUIsR0FBTyxLQUN4QixHQUFpQixHQUFPLEtBaUJ4QixHQUFlLEdBQVcsZ0JBQzFCLEdBQWUsR0FBVyxXQUMxQixHQUFlLEdBQVcsV0FDMUIsR0FBZSxHQUFXLFNBQzFCLEdBQWUsR0FBVyxRQUMxQixHQUFlLEdBQVcsVUFDMUIsR0FBZSxHQUFXLFNBTTFCLEdBQVEsS0FBSyxNQUNiLElBQ0EsR0FBSSxHQUNKLEVBQUksR0FDSixFQUFJLEdBQ0osRUFBSSxHQUNKLEVBQUksR0FDSixFQUFJLElBNkVKLEdBQVEsS0FBSyxJQWdFYixHQUFVLEdBQVMsU0F3R3ZCLE9BdEdBLElBQVEsUUFBaUIsR0FDekIsR0FBUSxJQUFpQixHQUN6QixHQUFRLElBQWlCLEdBQ3pCLEdBQVEsU0FBaUIsR0FDekIsR0FBUSxHQUFpQixHQUN6QixHQUFRLGVBQWlCLEdBQ3pCLEdBQVEsVUFBaUIsR0FDekIsR0FBUSxVQUFpQixHQUN6QixHQUFRLFFBQWlCLEdBQ3pCLEdBQVEsT0FBaUIsR0FDekIsR0FBUSxRQUFpQixHQUN6QixHQUFRLFNBQWlCLEdBQ3pCLEdBQVEsV0FBaUIsR0FDekIsR0FBUSxRQUFpQixHQUN6QixHQUFRLFFBQWlCLEdBQ3pCLEdBQVEsUUFBaUIsR0FDekIsR0FBUSxNQUFpQixHQUN6QixHQUFRLElBQWlCLEdBQ3pCLEdBQVEsYUFBaUIsR0FDekIsR0FBUSxRQUFpQixHQUN6QixHQUFRLFFBQWlCLEdBQ3pCLEdBQVEsTUFBaUIsR0FDekIsR0FBUSxLQUFpQixHQUN6QixHQUFRLE1BQWlCLEdBQ3pCLEdBQVEsT0FBaUIsR0FDekIsR0FBUSxNQUFpQixHQUN6QixHQUFRLFNBQWlCLEdBQ3pCLEdBQVEsWUFBaUIsR0FDekIsR0FBUSxTQUFpQixHQUN6QixHQUFRLE9BQWlCLEdBQ3pCLEdBQVEsT0FBaUIsR0FDekIsR0FBUSxXQUFpQixHQUV6QixHQUFRLFlBQWMsRUFBVSxzRkFBdUYsSUFDdkgsR0FBUSxLQUFPLEdBTWYsRUFBZSxJQUFLLEVBQUcsRUFBRyxRQUMxQixFQUFlLElBQUssRUFBRyxFQUFHLFdBSTFCLEVBQWMsSUFBSyxJQUNuQixFQUFjLElBQUssSUFDbkIsRUFBYyxJQUFLLFNBQVUsRUFBTyxFQUFPLEdBQ3ZDLEVBQU8sR0FBSyxHQUFJLE1BQTZCLElBQXhCLFdBQVcsRUFBTyxPQUUzQyxFQUFjLElBQUssU0FBVSxFQUFPLEVBQU8sR0FDdkMsRUFBTyxHQUFLLEdBQUksTUFBSyxFQUFNLE1BTS9CLEVBQU0sUUFBVSxTQTE3SWhCLFNBQTBCLEdBQ3RCLEdBQWUsR0EyN0lILElBRWhCLEVBQU0sR0FBd0IsR0FDOUIsRUFBTSxJQUF3QixHQUM5QixFQUFNLElBQXdCLEdBQzlCLEVBQU0sSUFBd0IsR0FDOUIsRUFBTSxJQUF3QixFQUM5QixFQUFNLEtBQXdCLEdBQzlCLEVBQU0sT0FBd0IsR0FDOUIsRUFBTSxPQUF3QixFQUM5QixFQUFNLE9BQXdCLEdBQzlCLEVBQU0sUUFBd0IsRUFDOUIsRUFBTSxTQUF3QixHQUM5QixFQUFNLFNBQXdCLEVBQzlCLEVBQU0sU0FBd0IsR0FDOUIsRUFBTSxVQUF3QixHQUM5QixFQUFNLFdBQXdCLEdBQzlCLEVBQU0sV0FBd0IsR0FDOUIsRUFBTSxZQUF3QixHQUM5QixFQUFNLFlBQXdCLEdBQzlCLEVBQU0sYUFBd0IsR0FDOUIsRUFBTSxhQUF3QixHQUM5QixFQUFNLFFBQXdCLEdBQzlCLEVBQU0sY0FBd0IsR0FDOUIsRUFBTSxlQUF3QixFQUM5QixFQUFNLHFCQUF3QixHQUM5QixFQUFNLHNCQUF3QixHQUM5QixFQUFNLGVBQXdCLEdBQzlCLEVBQU0sVUFBd0IsR0FHOUIsRUFBTSxXQUNGLGVBQWdCLG1CQUNoQix1QkFBd0Isc0JBQ3hCLGtCQUFtQiwwQkFDbkIsS0FBTSxhQUNOLEtBQU0sUUFDTixhQUFjLFdBQ2QsUUFBUyxlQUNULEtBQU0sYUFDTixNQUFPLFdBR0o7OztDQ2gvSVYsU0FBeUIsRUFBUSxHQUNULGdCQUFaLFVBQXdCLFNBQXVDLGdCQUFyQixTQUFRLFNBQzNELEVBQVEsU0FDbUIsa0JBQVgsU0FBeUIsT0FBTyxJQUNoRCxRQUFRLFdBQVksSUFFcEIsRUFBTyxZQUNQLEVBQVEsRUFBTyxZQUVqQixLQUFNLFNBQTBCLEdBT2hDLFFBQVMsR0FBWSxHQUNuQixNQUF5QixrQkFBWCxHQU9oQixRQUFTLEdBQVMsR0FDaEIsTUFBTyxHQUFRLEdBQU8sY0FBaUIsR0FHekMsUUFBUyxHQUFjLEdBQ3JCLE1BQU8sR0FBTyxRQUFRLDhCQUErQixRQU92RCxRQUFTLEdBQWEsRUFBSyxHQUN6QixNQUFjLE9BQVAsR0FBOEIsZ0JBQVIsSUFBcUIsSUFBWSxHQU1oRSxRQUFTLEdBQVksRUFBSSxHQUN2QixNQUFPLEdBQVcsS0FBSyxFQUFJLEdBSTdCLFFBQVMsR0FBYyxHQUNyQixPQUFRLEVBQVcsRUFBWSxHQWNqQyxRQUFTLEdBQVksR0FDbkIsTUFBTyxRQUFPLEdBQVEsUUFBUSxlQUFnQixTQUF3QixHQUNwRSxNQUFPLEdBQVUsS0FnQ3JCLFFBQVMsR0FBZSxFQUFVLEdBeUJoQyxRQUFTLEdBQWEsR0FJcEIsR0FINkIsZ0JBQWxCLEtBQ1QsRUFBZ0IsRUFBYyxNQUFNLEVBQVMsS0FFMUMsRUFBUSxJQUEyQyxJQUF6QixFQUFjLE9BQzNDLEtBQU0sSUFBSSxPQUFNLGlCQUFtQixFQUVyQyxHQUFlLEdBQUksUUFBTyxFQUFhLEVBQWMsSUFBTSxRQUMzRCxFQUFlLEdBQUksUUFBTyxPQUFTLEVBQWEsRUFBYyxLQUM5RCxFQUFpQixHQUFJLFFBQU8sT0FBUyxFQUFhLElBQU0sRUFBYyxLQWpDeEUsSUFBSyxFQUNILFFBRUYsSUFvQkksR0FBYyxFQUFjLEVBcEI1QixLQUNBLEtBQ0EsS0FDQSxHQUFTLEVBQ1QsR0FBVyxDQTZCZixHQUFZLEdBQVEsRUFBUyxLQUs3QixLQUhBLEdBRUksR0FBTyxFQUFNLEVBQU8sRUFBSyxFQUFPLEVBRmhDLEVBQVUsR0FBSSxHQUFRLElBR2xCLEVBQVEsT0FBTyxDQU1yQixHQUxBLEVBQVEsRUFBUSxJQUdoQixFQUFRLEVBQVEsVUFBVSxHQUd4QixJQUFLLEdBQUksR0FBSSxFQUFHLEVBQWMsRUFBTSxPQUFRLEVBQUksSUFBZSxFQUM3RCxFQUFNLEVBQU0sT0FBTyxHQUVmLEVBQWEsR0FDZixFQUFPLEtBQUssRUFBTyxRQUVuQixHQUFXLEVBR2IsRUFBTyxNQUFPLE9BQVEsRUFBSyxFQUFPLEVBQVEsSUFDMUMsR0FBUyxFQUdHLE9BQVIsR0FsRFYsV0FDRSxHQUFJLElBQVcsRUFDYixLQUFPLEVBQU8sY0FDTCxHQUFPLEVBQU8sV0FFdkIsS0FHRixJQUFTLEVBQ1QsR0FBVyxJQStDWCxLQUFLLEVBQVEsS0FBSyxHQUNoQixLQXVCRixJQXJCQSxHQUFTLEVBR1QsRUFBTyxFQUFRLEtBQUssSUFBVSxPQUM5QixFQUFRLEtBQUssR0FHQSxNQUFULEdBQ0YsRUFBUSxFQUFRLFVBQVUsR0FDMUIsRUFBUSxLQUFLLEdBQ2IsRUFBUSxVQUFVLElBQ0EsTUFBVCxHQUNULEVBQVEsRUFBUSxVQUFVLEdBQzFCLEVBQVEsS0FBSyxHQUNiLEVBQVEsVUFBVSxHQUNsQixFQUFPLEtBRVAsRUFBUSxFQUFRLFVBQVUsSUFJdkIsRUFBUSxLQUFLLEdBQ2hCLEtBQU0sSUFBSSxPQUFNLG1CQUFxQixFQUFRLElBSy9DLElBSEEsR0FBVSxFQUFNLEVBQU8sRUFBTyxFQUFRLEtBQ3RDLEVBQU8sS0FBSyxHQUVDLE1BQVQsR0FBeUIsTUFBVCxFQUNsQixFQUFTLEtBQUssT0FDVCxJQUFhLE1BQVQsRUFBYyxDQUl2QixLQUZBLEVBQWMsRUFBUyxPQUdyQixLQUFNLElBQUksT0FBTSxxQkFBdUIsRUFBUSxRQUFVLEVBRTNELElBQUksRUFBWSxLQUFPLEVBQ3JCLEtBQU0sSUFBSSxPQUFNLHFCQUF1QixFQUFZLEdBQUssUUFBVSxPQUNsRCxTQUFULEdBQTRCLE1BQVQsR0FBeUIsTUFBVCxFQUM1QyxHQUFXLEVBQ08sTUFBVCxHQUVULEVBQVksR0FPaEIsR0FGQSxFQUFjLEVBQVMsTUFHckIsS0FBTSxJQUFJLE9BQU0scUJBQXVCLEVBQVksR0FBSyxRQUFVLEVBQVEsSUFFNUUsT0FBTyxHQUFXLEVBQWEsSUFPakMsUUFBUyxHQUFjLEdBSXJCLElBQUssR0FERCxHQUFPLEVBRlAsS0FHSyxFQUFJLEVBQUcsRUFBWSxFQUFPLE9BQVEsRUFBSSxJQUFhLEdBQzFELEVBQVEsRUFBTyxNQUdJLFNBQWIsRUFBTSxJQUFpQixHQUE4QixTQUFqQixFQUFVLElBQ2hELEVBQVUsSUFBTSxFQUFNLEdBQ3RCLEVBQVUsR0FBSyxFQUFNLEtBRXJCLEVBQWUsS0FBSyxHQUNwQixFQUFZLEdBS2xCLE9BQU8sR0FTVCxRQUFTLEdBQVksR0FNbkIsSUFBSyxHQURELEdBQU8sRUFKUCxLQUNBLEVBQVksRUFDWixLQUdLLEVBQUksRUFBRyxFQUFZLEVBQU8sT0FBUSxFQUFJLElBQWEsRUFHMUQsT0FGQSxFQUFRLEVBQU8sR0FFUCxFQUFNLElBQ1osSUFBSyxJQUNMLElBQUssSUFDSCxFQUFVLEtBQUssR0FDZixFQUFTLEtBQUssR0FDZCxFQUFZLEVBQU0sS0FDbEIsTUFDRixLQUFLLElBQ0gsRUFBVSxFQUFTLE1BQ25CLEVBQVEsR0FBSyxFQUFNLEdBQ25CLEVBQVksRUFBUyxPQUFTLEVBQUksRUFBUyxFQUFTLE9BQVMsR0FBRyxHQUFLLENBQ3JFLE1BQ0YsU0FDRSxFQUFVLEtBQUssR0FJckIsTUFBTyxHQU9ULFFBQVMsR0FBUyxHQUNoQixLQUFLLE9BQVMsRUFDZCxLQUFLLEtBQU8sRUFDWixLQUFLLElBQU0sRUF5RGIsUUFBUyxHQUFTLEVBQU0sR0FDdEIsS0FBSyxLQUFPLEVBQ1osS0FBSyxPQUFVLElBQUssS0FBSyxNQUN6QixLQUFLLE9BQVMsRUF3RWhCLFFBQVMsS0FDUCxLQUFLLFNBNVpQLEdBQUksR0FBaUIsT0FBTyxVQUFVLFNBQ2xDLEVBQVUsTUFBTSxTQUFXLFNBQTBCLEdBQ3ZELE1BQXVDLG1CQUFoQyxFQUFlLEtBQUssSUE2QnpCLEVBQWEsT0FBTyxVQUFVLEtBSzlCLEVBQWEsS0FLYixHQUNGLElBQUssUUFDTCxJQUFLLE9BQ0wsSUFBSyxPQUNMLElBQUssU0FDTCxJQUFLLFFBQ0wsSUFBSyxTQUNMLElBQUssU0FDTCxJQUFLLFVBU0gsRUFBVSxNQUNWLEVBQVUsTUFDVixFQUFXLE9BQ1gsRUFBVSxRQUNWLEVBQVEsb0JBK05aLEdBQVEsVUFBVSxJQUFNLFdBQ3RCLE1BQXFCLEtBQWQsS0FBSyxNQU9kLEVBQVEsVUFBVSxLQUFPLFNBQWUsR0FDdEMsR0FBSSxHQUFRLEtBQUssS0FBSyxNQUFNLEVBRTVCLEtBQUssR0FBeUIsSUFBaEIsRUFBTSxNQUNsQixNQUFPLEVBRVQsSUFBSSxHQUFTLEVBQU0sRUFLbkIsT0FIQSxNQUFLLEtBQU8sS0FBSyxLQUFLLFVBQVUsRUFBTyxRQUN2QyxLQUFLLEtBQU8sRUFBTyxPQUVaLEdBT1QsRUFBUSxVQUFVLFVBQVksU0FBb0IsR0FDaEQsR0FBa0MsR0FBOUIsRUFBUSxLQUFLLEtBQUssT0FBTyxFQUU3QixRQUFRLEdBQ04sS0FBTSxFQUNKLEVBQVEsS0FBSyxLQUNiLEtBQUssS0FBTyxFQUNaLE1BQ0YsS0FBSyxHQUNILEVBQVEsRUFDUixNQUNGLFNBQ0UsRUFBUSxLQUFLLEtBQUssVUFBVSxFQUFHLEdBQy9CLEtBQUssS0FBTyxLQUFLLEtBQUssVUFBVSxHQUtwQyxNQUZBLE1BQUssS0FBTyxFQUFNLE9BRVgsR0FpQlQsRUFBUSxVQUFVLEtBQU8sU0FBZSxHQUN0QyxNQUFPLElBQUksR0FBUSxFQUFNLE9BTzNCLEVBQVEsVUFBVSxPQUFTLFNBQWlCLEdBQzFDLEdBRUksR0FGQSxFQUFRLEtBQUssS0FHakIsSUFBSSxFQUFNLGVBQWUsR0FDdkIsRUFBUSxFQUFNLE9BQ1QsQ0FHTCxJQUZBLEdBQW9CLEdBQU8sRUFBdkIsRUFBVSxLQUFvQixHQUFZLEVBRXZDLEdBQVMsQ0FDZCxHQUFJLEVBQUssUUFBUSxLQUFPLEVBZ0J0QixJQWZBLEVBQVEsRUFBUSxLQUNoQixFQUFRLEVBQUssTUFBTSxLQUNuQixFQUFRLEVBYVEsTUFBVCxHQUFpQixFQUFRLEVBQU0sUUFDaEMsSUFBVSxFQUFNLE9BQVMsSUFDM0IsRUFBWSxFQUFZLEVBQU8sRUFBTSxLQUV2QyxFQUFRLEVBQU0sRUFBTSxVQUd0QixHQUFRLEVBQVEsS0FBSyxHQUNyQixFQUFZLEVBQVksRUFBUSxLQUFNLEVBR3hDLElBQUksRUFDRixLQUVGLEdBQVUsRUFBUSxPQUdwQixFQUFNLEdBQVEsRUFNaEIsTUFISSxHQUFXLEtBQ2IsRUFBUSxFQUFNLEtBQUssS0FBSyxPQUVuQixHQWVULEVBQU8sVUFBVSxXQUFhLFdBQzVCLEtBQUssVUFPUCxFQUFPLFVBQVUsTUFBUSxTQUFnQixFQUFVLEdBQ2pELEdBQUksR0FBUSxLQUFLLE1BQ2IsRUFBUyxFQUFNLEVBS25CLE9BSGMsT0FBVixJQUNGLEVBQVMsRUFBTSxHQUFZLEVBQWMsRUFBVSxJQUU5QyxHQVlULEVBQU8sVUFBVSxPQUFTLFNBQWlCLEVBQVUsRUFBTSxHQUN6RCxHQUFJLEdBQVMsS0FBSyxNQUFNLEdBQ3BCLEVBQVcsWUFBZ0IsR0FBVyxFQUFPLEdBQUksR0FBUSxFQUM3RCxPQUFPLE1BQUssYUFBYSxFQUFRLEVBQVMsRUFBVSxJQVl0RCxFQUFPLFVBQVUsYUFBZSxTQUF1QixFQUFRLEVBQVMsRUFBVSxHQUloRixJQUFLLEdBREQsR0FBTyxFQUFRLEVBRmYsRUFBUyxHQUdKLEVBQUksRUFBRyxFQUFZLEVBQU8sT0FBUSxFQUFJLElBQWEsRUFDMUQsTUFBUSxHQUNSLEVBQVEsRUFBTyxHQUNmLEVBQVMsRUFBTSxHQUVBLE1BQVgsRUFBZ0IsRUFBUSxLQUFLLGNBQWMsRUFBTyxFQUFTLEVBQVUsR0FDckQsTUFBWCxFQUFnQixFQUFRLEtBQUssZUFBZSxFQUFPLEVBQVMsRUFBVSxHQUMzRCxNQUFYLEVBQWdCLEVBQVEsS0FBSyxjQUFjLEVBQU8sRUFBUyxFQUFVLEdBQzFELE1BQVgsRUFBZ0IsRUFBUSxLQUFLLGVBQWUsRUFBTyxHQUN4QyxTQUFYLEVBQW1CLEVBQVEsS0FBSyxhQUFhLEVBQU8sR0FDekMsU0FBWCxJQUFtQixFQUFRLEtBQUssU0FBUyxRQUVwQyxLQUFWLElBQ0YsR0FBVSxFQUdkLE9BQU8sSUFHVCxFQUFPLFVBQVUsY0FBZ0IsU0FBd0IsRUFBTyxFQUFTLEVBQVUsR0FPakYsUUFBUyxHQUFXLEdBQ2xCLE1BQU8sR0FBSyxPQUFPLEVBQVUsRUFBUyxHQVB4QyxHQUFJLEdBQU8sS0FDUCxFQUFTLEdBQ1QsRUFBUSxFQUFRLE9BQU8sRUFBTSxHQVFqQyxJQUFLLEVBQUwsQ0FFQSxHQUFJLEVBQVEsR0FDVixJQUFLLEdBQUksR0FBSSxFQUFHLEVBQWMsRUFBTSxPQUFRLEVBQUksSUFBZSxFQUM3RCxHQUFVLEtBQUssYUFBYSxFQUFNLEdBQUksRUFBUSxLQUFLLEVBQU0sSUFBSyxFQUFVLE9BRXJFLElBQXFCLGdCQUFWLElBQXVDLGdCQUFWLElBQXVDLGdCQUFWLEdBQzFFLEdBQVUsS0FBSyxhQUFhLEVBQU0sR0FBSSxFQUFRLEtBQUssR0FBUSxFQUFVLE9BQ2hFLElBQUksRUFBVyxHQUFRLENBQzVCLEdBQWdDLGdCQUFyQixHQUNULEtBQU0sSUFBSSxPQUFNLGlFQUdsQixHQUFRLEVBQU0sS0FBSyxFQUFRLEtBQU0sRUFBaUIsTUFBTSxFQUFNLEdBQUksRUFBTSxJQUFLLEdBRWhFLE1BQVQsSUFDRixHQUFVLE9BRVosSUFBVSxLQUFLLGFBQWEsRUFBTSxHQUFJLEVBQVMsRUFBVSxFQUUzRCxPQUFPLEtBR1QsRUFBTyxVQUFVLGVBQWlCLFNBQXlCLEVBQU8sRUFBUyxFQUFVLEdBQ25GLEdBQUksR0FBUSxFQUFRLE9BQU8sRUFBTSxHQUlqQyxLQUFLLEdBQVUsRUFBUSxJQUEyQixJQUFqQixFQUFNLE9BQ3JDLE1BQU8sTUFBSyxhQUFhLEVBQU0sR0FBSSxFQUFTLEVBQVUsSUFHMUQsRUFBTyxVQUFVLGNBQWdCLFNBQXdCLEVBQU8sRUFBUyxHQUN2RSxHQUFLLEVBQUwsQ0FFQSxHQUFJLEdBQVEsRUFBVyxHQUFZLEVBQVMsRUFBTSxJQUFNLEVBQVMsRUFBTSxHQUN2RSxPQUFhLE9BQVQsRUFDSyxLQUFLLGFBQWEsS0FBSyxNQUFNLEdBQVEsRUFBUyxFQUFVLE9BRGpFLEtBSUYsRUFBTyxVQUFVLGVBQWlCLFNBQXlCLEVBQU8sR0FDaEUsR0FBSSxHQUFRLEVBQVEsT0FBTyxFQUFNLEdBQ2pDLElBQWEsTUFBVCxFQUNGLE1BQU8sSUFHWCxFQUFPLFVBQVUsYUFBZSxTQUF1QixFQUFPLEdBQzVELEdBQUksR0FBUSxFQUFRLE9BQU8sRUFBTSxHQUNqQyxJQUFhLE1BQVQsRUFDRixNQUFPLEdBQVMsT0FBTyxJQUczQixFQUFPLFVBQVUsU0FBVyxTQUFtQixHQUM3QyxNQUFPLEdBQU0sSUFHZixFQUFTLEtBQU8sY0FDaEIsRUFBUyxRQUFVLFFBQ25CLEVBQVMsTUFBUyxLQUFNLEtBR3hCLElBQUksR0FBZ0IsR0FBSSxFQXVEeEIsT0FsREEsR0FBUyxXQUFhLFdBQ3BCLE1BQU8sR0FBYyxjQVF2QixFQUFTLE1BQVEsU0FBZ0IsRUFBVSxHQUN6QyxNQUFPLEdBQWMsTUFBTSxFQUFVLElBT3ZDLEVBQVMsT0FBUyxTQUFpQixFQUFVLEVBQU0sR0FDakQsR0FBd0IsZ0JBQWIsR0FDVCxLQUFNLElBQUksV0FBVSx3REFDVSxFQUFRLEdBQVksa0ZBSXBELE9BQU8sR0FBYyxPQUFPLEVBQVUsRUFBTSxJQUs5QyxFQUFTLFFBQVUsU0FBa0IsRUFBVSxFQUFNLEVBQVUsR0FHN0QsR0FBSSxHQUFTLEVBQVMsT0FBTyxFQUFVLEVBQU0sRUFFN0MsS0FBSSxFQUFXLEdBR2IsTUFBTyxFQUZQLEdBQUssSUFRVCxFQUFTLE9BQVMsRUFHbEIsRUFBUyxRQUFVLEVBQ25CLEVBQVMsUUFBVSxFQUNuQixFQUFTLE9BQVMsRUFFWDs7O0FDOW1CVCxZQU1BLFNBQVMsVUFBUyxHQUNqQixHQUFZLE9BQVIsT0FBd0IsS0FBUixFQUNuQixLQUFNLElBQUksV0FBVSx3REFHckIsT0FBTyxRQUFPLEdBR2YsUUFBUyxtQkFDUixJQUNDLElBQUssT0FBTyxPQUNYLE9BQU8sQ0FNUixJQUFJLEdBQVEsR0FBSSxRQUFPLE1BRXZCLElBREEsRUFBTSxHQUFLLEtBQ2tDLE1BQXpDLE9BQU8sb0JBQW9CLEdBQU8sR0FDckMsT0FBTyxDQUtSLEtBQUssR0FERCxNQUNLLEVBQUksRUFBRyxFQUFJLEdBQUksSUFDdkIsRUFBTSxJQUFNLE9BQU8sYUFBYSxJQUFNLENBS3ZDLElBQXdCLGVBSFgsT0FBTyxvQkFBb0IsR0FBTyxJQUFJLFNBQVUsR0FDNUQsTUFBTyxHQUFNLEtBRUgsS0FBSyxJQUNmLE9BQU8sQ0FJUixJQUFJLEtBSUosT0FIQSx1QkFBdUIsTUFBTSxJQUFJLFFBQVEsU0FBVSxHQUNsRCxFQUFNLEdBQVUsSUFHZix5QkFERSxPQUFPLEtBQUssT0FBTyxVQUFXLElBQVEsS0FBSyxJQU05QyxNQUFPLEdBRVIsT0FBTyxHQXBEVCxHQUFJLHVCQUF3QixPQUFPLHNCQUMvQixlQUFpQixPQUFPLFVBQVUsZUFDbEMsaUJBQW1CLE9BQU8sVUFBVSxvQkFzRHhDLFFBQU8sUUFBVSxrQkFBb0IsT0FBTyxPQUFTLFNBQVUsRUFBUSxHQUt0RSxJQUFLLEdBSkQsR0FFQSxFQURBLEVBQUssU0FBUyxHQUdULEVBQUksRUFBRyxFQUFJLFVBQVUsT0FBUSxJQUFLLENBQzFDLEVBQU8sT0FBTyxVQUFVLEdBRXhCLEtBQUssR0FBSSxLQUFPLEdBQ1gsZUFBZSxLQUFLLEVBQU0sS0FDN0IsRUFBRyxHQUFPLEVBQUssR0FJakIsSUFBSSxzQkFBdUIsQ0FDMUIsRUFBVSxzQkFBc0IsRUFDaEMsS0FBSyxHQUFJLEdBQUksRUFBRyxFQUFJLEVBQVEsT0FBUSxJQUMvQixpQkFBaUIsS0FBSyxFQUFNLEVBQVEsTUFDdkMsRUFBRyxFQUFRLElBQU0sRUFBSyxFQUFRLE1BTWxDLE1BQU87OztBQ3ZGUixZQWFBLFNBQVMsbUJBQWtCLEVBQUcsR0FDN0IsTUFBUSx1RUFBeUUsRUFBSSxhQUFlLEVBQUksaUJBR3pHLFFBQVMsb0JBQW1CLEdBQzNCLEdBQUksRUFBRyxTQUFXLG9CQUFzQixPQUFPLFlBQWEsQ0FDM0QsR0FBSSxHQUFLLE9BQU8sWUFBWSxDQUV2QixHQUFHLEVBQUcsS0FBUSxFQUFHLEVBQUcsSUFBSSxRQUU1QixFQUFHLFFBQVEsR0FBSyxVQUFVLElBR3RCLEVBQUcsRUFBRyxJQUFJLFNBRWQsRUFBRyxFQUFHLElBQUksV0FBWSxFQUN0QixFQUFHLFFBQVEsR0FBSyxVQUFVLEtBSTNCLEVBQUcsV0FBYSxFQUFHLEVBQUcsSUFBSSxRQUFVLEVBQUcsS0FJekMsUUFBUyxVQUFTLEdBSWpCLElBSEEsR0FDSSxHQURBLEVBQVEsaUJBQWlCLEdBQUksV0FFN0IsS0FDd0MsUUFBcEMsRUFBUyxVQUFVLEtBQUssS0FDL0IsRUFBTSxFQUFPLElBQU0sRUFBTyxFQUUzQixPQUFPLEdBR1IsUUFBUyxnQkFBZSxFQUFLLEVBQU8sR0FFbkMsR0FBSSxHQUFjLGtCQUFrQixHQUFTLEVBQUcsR0FBVSxFQUd0RCxvQkFBbUIsS0FBSyxFQUFLLFNBQVcsR0FDM0MsbUJBQW1CLEtBQUssRUFBSyxNQUFPLEdBSXRDLFFBQVMsY0FBYSxFQUFLLEdBR3RCLEVBQUksYUFDUCxFQUFTLEdBRVQsV0FBVyxhQUFjLElBQUssRUFBSyxHQUlyQyxRQUFTLFFBQU8sR0FDZixHQUFJLEdBQVEsU0FBUyxHQUNqQixFQUFNLEVBQUcsSUFJYixJQUhBLEVBQU0sY0FBZ0IsRUFBTSxlQUFpQixRQUd4QyxFQUFJLElBQUssQ0FFYixHQUE0QixTQUF4QixFQUFNLGNBQ1QsTUFJRCxLQUNFLEVBQUksVUFDTCxvQkFDQyxFQUFNLG1CQUVQLE9BS0YsSUFBSyxFQUFJLElBQUssQ0FDYixFQUFJLElBQU0sR0FBSSxPQUFNLEVBQUcsTUFBTyxFQUFHLFFBQ2pDLEVBQUksSUFBSSxPQUFTLG1CQUFtQixLQUFLLEVBQUksb0JBQXNCLEVBQUcsT0FDdEUsRUFBSSxJQUFJLElBQU0sbUJBQW1CLEtBQUssRUFBSSxpQkFBbUIsRUFBRyxJQUloRSxtQkFBbUIsS0FBSyxFQUFJLGVBQWdCLEVBQUcsS0FDM0MsRUFBRyxRQUNOLG1CQUFtQixLQUFLLEVBQUksa0JBQW1CLEVBQUcsUUFHbkQsZUFBZSxFQUFJLEVBQUcsY0FBZ0IsRUFBRyxNQUFPLEVBQUcsZUFBaUIsRUFBRyxRQUduRSxFQUFHLFNBQ04sRUFBRyxPQUFTLEdBRWIsS0FDQyxjQUFjLEdBQ2IsTUFBTyxHQUNKLE9BQU8sU0FDVixRQUFRLEtBQUssbUNBS2hCLG1CQUFtQixFQUFJLEtBRXZCLEVBQUcsTUFBTSxnQkFBa0IsU0FBYSxFQUFJLElBQUksWUFBYyxFQUFJLElBQUksS0FBSyxRQUFRLEtBQU0sT0FBVSxLQUNuRyxFQUFHLE1BQU0sbUJBQXFCLEVBQU0sb0JBQXNCLFNBQzFELEVBQUcsTUFBTSxpQkFBbUIsWUFDNUIsRUFBRyxNQUFNLGlCQUFtQixjQUV4QixhQUFhLEtBQUssRUFBTSxlQUMzQixhQUFhLEVBQUksSUFBSyxXQUNqQixFQUFJLElBQUksYUFBZSxFQUFHLE9BQVMsRUFBSSxJQUFJLGNBQWdCLEVBQUcsT0FDakUsRUFBRyxNQUFNLGVBQWlCLFVBRTFCLEVBQUcsTUFBTSxlQUFpQixTQUk1QixFQUFHLE1BQU0sZUFBaUIsRUFBTSxjQUFjLFFBQVEsT0FBUSxRQUFRLFFBQVEsT0FBUSxhQUd2RixhQUFhLEVBQUksSUFBSyxTQUFVLEdBQy9CLGVBQWUsRUFBSSxFQUFJLGFBQWMsRUFBSSxpQkFJM0MsUUFBUyxlQUFjLEdBQ3RCLEdBQUksSUFDSCxJQUFLLFNBQWEsR0FDakIsTUFBTyxHQUFHLEtBQUssSUFBSSxHQUFjLFFBRWxDLElBQUssU0FBYSxFQUFPLEdBSXhCLE1BSEEsR0FBRyxLQUFLLElBQUksR0FBYyxPQUFTLEVBQ25DLG1CQUFtQixLQUFLLEVBQUssWUFBYyxFQUFPLEdBQ2xELE9BQU8sR0FDQSxHQUdULFFBQU8sZUFBZSxFQUFJLE1BQU8sR0FDakMsT0FBTyxlQUFlLEVBQUksY0FDekIsSUFBSyxXQUFjLE1BQU8sR0FBWSxJQUFJLGlCQUUzQyxPQUFPLGVBQWUsRUFBSSxVQUN6QixJQUFLLFdBQWMsTUFBTyxHQUFZLElBQUksV0FDMUMsSUFBSyxTQUFVLEdBQU0sTUFBTyxHQUFZLElBQUksRUFBSSxhQUlsRCxRQUFTLG9CQUNSLFFBQVMsR0FBaUIsRUFBSSxHQUM3QixNQUFPLEdBQUcsTUFBUSxFQUFHLEtBQUssTUFBaUIsUUFBVCxHQUEyQixXQUFULEdBQXFCLEVBQUcsS0FBSyxJQUFNLEVBRW5GLHlCQUNKLGlCQUFpQixVQUFVLGFBQWUsU0FBVSxHQUNuRCxNQUFPLG9CQUFtQixLQUFLLEVBQWlCLEtBQU0sR0FBTyxJQUc5RCxpQkFBaUIsVUFBVSxhQUFlLFNBQVUsRUFBTSxHQUN6RCxNQUFPLG9CQUFtQixLQUFLLEVBQWlCLEtBQU0sR0FBTyxFQUFNLE9BQU8sTUFLN0UsUUFBUyxLQUFJLEVBQU0sR0FDbEIsR0FBSSxJQUFpQixrQkFBb0IsQ0FJekMsSUFIQSxFQUFPLE1BQ1AsRUFBTyxHQUFRLE1BRVYseUJBQTJCLEVBQUssV0FBYyxZQUNsRCxPQUFPLENBSUssU0FBVCxFQUNILEVBQU8sU0FBUyxxQkFBcUIsT0FDWCxnQkFBVCxHQUNqQixFQUFPLFNBQVMsaUJBQWlCLEdBQ3JCLFVBQVksS0FDeEIsR0FBUSxHQUlULEtBQUssR0FBSSxHQUFJLEVBQUcsRUFBSSxFQUFLLE9BQVEsSUFDaEMsRUFBSyxHQUFHLEtBQU8sRUFBSyxHQUFHLE9BQ3RCLFNBQVUsRUFBSyxVQUVoQixPQUFPLEVBQUssR0FHVCxLQUNILFNBQVMsS0FBSyxpQkFBaUIsT0FBUSxTQUFVLEdBQ3ZCLFFBQXJCLEVBQUUsT0FBTyxTQUNaLElBQUksRUFBRSxRQUNMLFNBQVUsRUFBSyxhQUdmLEdBQ0gsaUJBQWtCLEVBQ2xCLEVBQU8sT0FJSixFQUFLLFNBQ1IsT0FBTyxpQkFBaUIsU0FBVSxJQUFJLEtBQUssS0FBTSxHQUNoRCxTQUFVLEVBQUssWUF6TmxCLEdBQUksS0FBTSw2QkFDTixVQUFZLG1EQUNaLFFBQTJCLG1CQUFWLFFBQXlCLE9BQVEsa0JBQW1CLElBQU0sR0FBSSxPQUMvRSxrQkFBb0IsY0FBZ0IsU0FBUSxNQUM1Qyx1QkFBeUIsbUJBQXFCLFNBQVEsTUFDdEQsWUFBYyxtQkFBcUIsU0FBUSxNQUMzQyxtQkFBbUQsZ0JBQXZCLFNBQVEsV0FDcEMsbUJBQXFCLFFBQVEsYUFDN0IsbUJBQXFCLFFBQVEsYUFDN0IsaUJBQWtCLENBcU50QixLQUFJLGtCQUFvQixrQkFDeEIsSUFBSSx1QkFBeUIsdUJBRTdCLG1CQUVBLE9BQU8sUUFBVTs7O0FDdE9qQixNQUFNLFVBQVUsVUFBVSxPQUFPLGVBQWUsTUFBTSxVQUFVLFlBQVksTUFBTSxTQUFTLEVBQUUsR0FBRyxHQUFHLE1BQU0sS0FBSyxLQUFNLElBQUksV0FBVSxnQ0FBaUMsSUFBSSxHQUFFLE9BQU8sTUFBTSxFQUFFLEVBQUUsU0FBUyxDQUFFLElBQUcsSUFBSSxFQUFFLE9BQU0sQ0FBRyxLQUFJLEdBQUksR0FBRSxFQUFFLEVBQUUsRUFBRSxLQUFLLElBQUksR0FBRyxFQUFFLEVBQUUsRUFBRSxLQUFLLElBQUksR0FBRyxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsU0FBUyxFQUFFLEdBQUcsTUFBTyxLQUFJLEdBQUcsZ0JBQWlCLElBQUcsZ0JBQWlCLElBQUcsTUFBTSxJQUFJLE1BQU0sSUFBSSxFQUFFLEdBQUcsR0FBRyxPQUFNLENBQUcsS0FBSSxPQUFNOzs7Q0NPblksU0FBVSxFQUFRLEdBQ0MsZ0JBQVosVUFBMEMsbUJBQVgsUUFBeUIsT0FBTyxRQUFVLEVBQVEsUUFBUSxRQUM5RSxrQkFBWCxTQUF5QixPQUFPLElBQU0sUUFBUSxPQUFRLEdBQzVELEVBQU8sVUFBWSxFQUFRLEVBQU8sTUFDbEMsS0FBTSxTQUFXLEdBQU8sWUF3RjFCLFNBQVMsR0FBa0IsR0FHekIsSUFBSyxHQUZELEdBQU0sRUFBRyxnQkFBa0IsRUFBRyxjQUM5QixLQUNLLEVBQUksRUFBRyxFQUFJLEVBQUksT0FBUSxJQUFLLENBQ25DLEdBQUksR0FBTyxFQUFJLEVBQ1gsR0FBSyxRQUNQLEVBQU0sRUFBSyxNQUF1QixLQUFmLEVBQUssT0FBc0IsRUFBSyxPQUd2RCxHQUFJLE9BQVEsR0FDUixNQUFRLEVBY1osT0FiSSxHQUFNLFFBQ1IsRUFBUSxFQUFNLFlBQ1AsR0FBTSxPQUVYLEVBQU0sUUFDUixFQUFRLEVBQU0sWUFDUCxHQUFNLFFBR2IsTUFBTyxFQUNQLE1BQU8sRUFDUCxNQUFPLEdBS1gsUUFBUyxHQUFPLEdBQ2QsTUFBSSxPQUFNLFFBQVEsSUFBeUUsZ0JBQS9DLEtBQVQsRUFBdUIsWUFBYyxFQUFRLElBQ3ZFLE9BQU8sT0FBTyxHQUVoQixFQUdULFFBQVMsR0FBa0IsR0FDekIsR0FBSSxHQUFZLFVBQVUsT0FBUyxPQUFzQixLQUFqQixVQUFVLEdBQW1CLFVBQVUsS0FFL0UsT0FBTyxHQUFXLE9BQU8sU0FBVSxFQUFZLEdBQzdDLEdBQUksR0FBZ0IsRUFBVSxXQUFXLEVBRXpDLE9BREEsR0FBeUMsa0JBQWxCLEdBQStCLEVBQWMsR0FBYSxFQUFVLFdBQ3BGLEVBQVcsT0FBTyxRQUk3QixRQUFTLEdBQVcsRUFBTyxHQUN6QixNQUFPLEdBQU0sSUFBSSxTQUFVLEVBQUcsR0FDNUIsT0FBUSxFQUFLLEtBQ1osS0FBSyxTQUFVLEVBQUcsR0FDbkIsTUFBTyxNQUFLLEVBQUUsR0FBSSxFQUFFLEtBQU8sRUFBRSxHQUFLLEVBQUUsSUFDcEMsS0FBSyxJQUFZLElBQUksU0FBVSxHQUMvQixNQUFPLEdBQUUsS0F5SWIsUUFBUyxHQUFTLEVBQUcsR0FDbkIsTUFBTyxZQUNMLEdBQUssRUFBRSxNQUFNLEtBQU0sV0FDbkIsR0FBSyxFQUFFLE1BQU0sS0FBTSxZQW1UdkIsUUFBUyxHQUFRLEdBQ2YsR0FBSSxHQUFPLFVBQVUsT0FBUyxPQUFzQixLQUFqQixVQUFVLEdBQW1CLFVBQVUsS0FFMUUsR0FBTyxVQUFVLEVBQUssWUFBYyxTQUFVLEdBQzlDLEVBQU8sVUFBVSxFQUFLLGtCQUFvQixlQUFnQixHQTNrQjVELEVBQU0sR0FBTyxFQUFJLGVBQWUsV0FBYSxFQUFhLFFBQUksQ0FFOUQsSUFBSSxHQUE0QixrQkFBWCxTQUFvRCxnQkFBcEIsUUFBTyxTQUF3QixTQUFVLEdBQzVGLGFBQWMsSUFDWixTQUFVLEdBQ1osTUFBTyxJQUF5QixrQkFBWCxTQUF5QixFQUFJLGNBQWdCLFFBQVUsSUFBUSxPQUFPLFVBQVksZUFBa0IsSUF1QnZILEVBQVcsT0FBTyxRQUFVLFNBQVUsR0FDeEMsSUFBSyxHQUFJLEdBQUksRUFBRyxFQUFJLFVBQVUsT0FBUSxJQUFLLENBQ3pDLEdBQUksR0FBUyxVQUFVLEVBRXZCLEtBQUssR0FBSSxLQUFPLEdBQ1YsT0FBTyxVQUFVLGVBQWUsS0FBSyxFQUFRLEtBQy9DLEVBQU8sR0FBTyxFQUFPLElBSzNCLE1BQU8sSUFxQ0wsRUFBb0IsU0FBVSxHQUNoQyxHQUFJLE1BQU0sUUFBUSxHQUFNLENBQ3RCLElBQUssR0FBSSxHQUFJLEVBQUcsRUFBTyxNQUFNLEVBQUksUUFBUyxFQUFJLEVBQUksT0FBUSxJQUFLLEVBQUssR0FBSyxFQUFJLEVBRTdFLE9BQU8sR0FFUCxNQUFPLE9BQU0sS0FBSyxJQTBEbEIsS0FFQSxFQUFXLEVBQUksUUFDakIsS0FBTSxXQUNKLE9BQVMsV0FBWSxJQUV2QixTQUNFLEtBQU0sU0FBYyxHQUNsQixHQUFJLEdBQUssRUFBVSxHQUNmLEVBQU8sRUFBVSxLQUNqQixFQUFhLEVBQVUsVUFFM0IsSUFBSyxHQUFPLEdBQVMsRUFBckIsQ0FFQSxFQUFVLFdBQWEsRUFBTyxJQUVKLElBRGYsT0FBTyxLQUFLLEtBQUssWUFDbkIsUUFBUSxJQUNmLEVBQUksSUFBSSxLQUFLLFdBQVksS0FHM0IsSUFBSSxHQUFlLEtBQUssa0JBQWtCLEdBRXRDLEVBQWdCLEtBQUssV0FBVyxHQUFJLE1BQU0sSUFDeEIsSUFBbEIsRUFDRixFQUFjLEtBQUssR0FFbkIsRUFBYyxHQUFnQixFQUVoQyxLQUFLLFdBQVcsR0FBTSxFQUFXLEVBQWUsU0FBVSxFQUFHLEdBQzNELE1BQU8sR0FBRSxNQUFRLEVBQUUsVUFHdkIsTUFBTyxTQUFlLEdBQ3BCLEdBQUksR0FBUSxVQUFVLE9BQVMsT0FBc0IsS0FBakIsVUFBVSxJQUFtQixVQUFVLEdBQ3ZFLEVBQUssRUFBVSxHQUNmLEVBQU8sRUFBVSxJQUVyQixJQUFLLEdBQU8sR0FDUCxLQUFLLFdBQVcsR0FJckIsR0FBSSxFQUNGLEtBQUssV0FBVyxVQUNYLENBQ0wsR0FBSSxHQUFRLEtBQUssa0JBQWtCLEVBQ25DLElBQUksR0FBUyxFQUFHLENBRWQsR0FBSSxHQUFnQixLQUFLLFdBQVcsR0FBSSxNQUFNLEVBQzlDLEdBQWMsT0FBTyxFQUFPLEdBQzVCLEtBQUssV0FBVyxHQUFNLEtBSTVCLFVBQVcsU0FBbUIsR0FDNUIsTUFBTyxNQUFLLFdBQVcsZUFBZSxJQUV4QyxjQUFlLFNBQXVCLEdBQ3BDLFFBQUssS0FBSyxXQUFXLElBR2QsS0FBSyxjQUFjLEdBQUksT0FBUyxHQUV6QyxhQUFjLFNBQXNCLEdBQ2xDLE1BQU8sTUFBSyxXQUFXLElBQU8sS0FBSyxXQUFXLEdBQUksR0FBRyxNQUV2RCxjQUFlLFNBQXVCLEdBQ3BDLEdBQUksR0FBYSxLQUFLLFdBQVcsRUFDakMsSUFBSyxFQUdMLE1BQU8sR0FBa0IsSUFFM0Isa0JBQW1CLFNBQTJCLEdBQzVDLEdBQUksR0FBSyxFQUFLLEdBQ1YsRUFBTyxFQUFLLElBRWhCLEtBQUssR0FBSSxLQUFLLE1BQUssV0FBVyxHQUM1QixHQUFJLEtBQUssV0FBVyxHQUFJLEdBQUcsT0FBUyxFQUNsQyxNQUFPLEVBR1gsUUFBUSxNQUtWLEVBQVcsR0FBSSxHQUFTLEdBRXhCLEVBQVMsK0NBRVQsRUFBOEIsU0FBd0IsR0FDeEQsTUFBTyxHQUFLLE9BQU8sU0FBVSxFQUFHLEdBQzlCLEdBQUksR0FBSSxFQUFJLEVBQUssRUFBVyxDQUM1QixLQUFLLElBQU8sR0FHVixHQUZBLEVBQUssRUFBRSxHQUNQLEVBQUssRUFBRSxHQUNILEdBQU0sRUFBTyxLQUFLLEdBY3BCLEdBWlksVUFBUixJQUNnQixnQkFBUCxLQUNULEVBQU8sRUFDUCxFQUFFLEdBQU8sS0FDVCxFQUFHLElBQVEsR0FFSyxnQkFBUCxLQUNULEVBQU8sRUFDUCxFQUFFLEdBQU8sS0FDVCxFQUFHLElBQVEsSUFHSCxPQUFSLEdBQXdCLGFBQVIsR0FBOEIsU0FBUixFQUV4QyxJQUFLLElBQWEsR0FDaEIsRUFBRyxHQUFhLEVBQVEsRUFBRyxHQUFZLEVBQUcsUUFFdkMsSUFBSSxNQUFNLFFBQVEsR0FDdkIsRUFBRSxHQUFPLEVBQUcsT0FBTyxPQUNkLElBQUksTUFBTSxRQUFRLEdBQ3ZCLEVBQUUsSUFBUSxHQUFJLE9BQU8sT0FFckIsS0FBSyxJQUFhLEdBQ2hCLEVBQUcsR0FBYSxFQUFHLE9BSXZCLEdBQUUsR0FBTyxFQUFFLEVBR2YsT0FBTyxTQVlQLEdBQ0YsVUFBVSxFQUNWLEtBQU0sZUFDTixPQUNFLFlBQWMsS0FBTSxPQUFRLFFBQVMsV0FDakMsV0FFSixVQUFZLEtBQU0sUUFBUyxTQUFTLEdBQ3BDLE1BQVEsS0FBTSxPQUFRLFVBQVUsR0FDaEMsTUFBUSxLQUFNLFFBQVMsU0FBUyxHQUNoQyxXQUFhLEtBQU0sT0FBUSxRQUFTLFdBQ2hDLFdBRUosS0FBTyxLQUFNLE9BQVEsUUFBUyxPQUM5QixZQUFjLE1BQU8sUUFBUyxPQUFRLFFBQVMsU0FBUyxHQUN4RCxrQkFBb0IsS0FBTSxPQUFRLFFBQVMsV0FDdkMsWUFHTixLQUFNLFdBQ0osT0FDRSxXQUFZLEVBQVMsV0FDckIsYUFBYSxJQUdqQixRQUFTLFdBQ0YsS0FBSyxXQUFXLEtBQUssT0FDeEIsS0FBSyxLQUFLLEtBQUssV0FBWSxLQUFLLFVBR3BDLFFBQVMsV0FDUCxHQUFJLEdBQVEsSUFFWixNQUFLLFFBQVUsS0FBSyxPQUFPLGdCQUFpQixLQUFLLFlBQ2pELEtBQUssVUFBVSxXQUNULEVBQU0sYUFFUixFQUFNLGFBQWMsS0FHcEIsS0FBSyxTQUFTLFdBQ2hCLEtBQUssU0FBUyxVQUFXLElBRzdCLFFBQVMsV0FDSCxLQUFLLFNBQVMsV0FDaEIsS0FBSyxTQUFTLFVBQVcsSUFHN0IsY0FBZSxXQUNiLEtBQUssV0FJUCxVQUNFLGNBQWUsV0FDYixHQUFJLEdBQWdCLEtBQUssV0FBVyxLQUFLLFNBQ3pDLE9BQUksTUFBSyxTQUNBLEVBRXVCLElBQXpCLEVBQWMsV0FBcUIsRUFBYyxFQUFjLE9BQVMsS0FFakYsV0FBWSxXQUNWLE1BQU8sR0FBa0IsS0FBSyxjQUFlLEtBQUssWUFFcEQsY0FBZSxXQUNiLE1BQU8sUUFBTyxLQUFLLEtBQUssWUFBWSxPQUFTLEdBRS9DLGVBQWdCLFdBQ2QsUUFBUyxLQUFLLFlBRWhCLGVBQWdCLFdBQ2QsR0FBSSxHQUFJLEtBQUssV0FDVCxJQUtKLE9BQUksTUFBSyxhQUE0QyxXQUE3QixFQUFRLEtBQUssY0FBNkIsS0FBSyxXQUFXLFFBQ2hGLEVBQUssT0FBVSxLQUFNLGlDQUNkLElBR1EsZ0JBQU4sR0FDVCxFQUFLLE9BQVUsS0FBTSxHQUM4QyxnQkFBNUMsS0FBTixFQUFvQixZQUFjLEVBQVEsTUFDM0QsRUFBSyxNQUFRLEdBRVgsS0FBSyxhQUNQLEVBQUssTUFBTSxJQUFNLEtBQUssS0FFeEIsRUFBSyxHQUFLLEtBQUssaUJBRVIsSUFFVCxtQkFBb0IsV0FDbEIsTUFBTyxNQUFLLGNBQWMsSUFBSSxTQUFVLEdBQ3RDLE1BQU8sR0FBVSxRQUNoQixPQUFPLFNBQVUsRUFBTyxHQUN6QixNQUFPLEdBQU0sT0FBTyxVQU0xQixTQUNFLFdBQVksU0FBb0IsRUFBZSxHQUM3QyxHQUFJLEtBQUssU0FDUCxLQUFLLE1BQU0sWUFBYSxPQUFPLEVBQWtCLE9BQW9CLE9BQU8sRUFBa0IsU0FDekYsQ0FDTCxHQUFJLEdBQXdDLElBQXpCLEVBQWMsV0FBZSxHQUFZLEVBQWMsR0FDdEUsRUFBd0MsSUFBekIsRUFBYyxXQUFlLEdBQVksRUFBYyxFQUMxRSxNQUFLLE1BQU0sU0FBVSxLQUFhLEdBQWUsS0FBYSxNQUtsRSxTQUFVLFdBQ1IsTUFBa0MsS0FBM0IsS0FBSyxXQUFXLE9BQWUsS0FBSyxXQUFhLEtBQUssT0FBTyxhQUV0RSxVQUFXLFdBQ1QsR0FBSSxJQUFhLEtBQUssZUFBaUIsS0FBSyxJQUk1QyxPQUhJLElBQWEsS0FBSyxXQUFXLE9BQVMsR0FDeEMsUUFBUSxLQUFLLHVGQUVSLElBR1gsT0FBUSxTQUFnQixHQUN0QixLQUFLLFNBQVMsVUFBVyxDQUN6QixJQUFJLEdBQVksS0FBSyxZQUNqQixFQUFXLEtBQUssV0FDaEIsRUFBaUIsRUFBWSxhQUFlLG1CQUM1QyxFQUFNLEtBQUssR0FFZixPQUFJLE1BQUssZUFDQSxFQUNMLEVBQ0EsR0FBNkIsS0FBSyxnQkFBa0IsTUFBUyx3QkFDNUQsSUFJRSxFQUFZLEVBQVMsR0FBSyxFQUMvQixFQUNBLElBQ0UsTUFBUyxxQkFBdUIsS0FBSyxtQkFBbUIsS0FBSyxNQUM1RCxLQUFLLGNBQ1AsTUFLSCxFQUE4QixtQkFBWCxRQUVuQixFQUFNLEVBRU4sR0FDRixVQUFVLEVBQ1YsS0FBTSxTQUNOLE9BRUUsVUFBWSxLQUFNLFFBQVMsU0FBUyxHQUNwQyxNQUFRLEtBQU0sT0FBUSxRQUFTLFdBQzNCLE1BQU8sUUFBTyxPQUVsQixPQUFTLEtBQU0sT0FBUSxRQUFTLEdBQ2hDLE1BQVEsS0FBTSxRQUFTLFNBQVMsR0FDaEMsV0FBYSxLQUFNLE9BQVEsUUFBUyxXQUNoQyxXQUVKLEtBQU8sTUFBTyxRQUFTLFFBQVMsT0FDaEMsVUFBWSxLQUFNLEdBQWEsT0FBUSxhQUFlLFFBQ3RELGFBQWUsS0FBTSxRQUNyQixJQUNFLEtBQU0sT0FDTixRQUFTLFdBQ1AsTUFBTyxRQUFPLEtBQUssTUFBc0IsSUFBaEIsS0FBSyxjQUtwQyxRQUFTLFdBQ0gsS0FBSyxVQUNQLEtBQUssZ0JBRUYsS0FBSyxVQUNSLEtBQUssYUFJSCxLQUFLLFNBQVMsV0FDaEIsS0FBSyxTQUFTLFVBQVcsSUFHN0IsUUFBUyxXQUNILEtBQUssU0FDUCxLQUFLLFFBRUwsS0FBSyxhQUlILEtBQUssU0FBUyxXQUNoQixLQUFLLFNBQVMsVUFBVyxJQUc3QixjQUFlLFdBQ2IsS0FBSyxRQUNELEtBQUssYUFDUCxLQUFLLFlBQVksWUFJckIsT0FDRSxHQUFJLFNBQVksRUFBVSxHQUN4QixHQUFZLElBQWEsR0FBWSxLQUFLLE1BQU0sR0FDaEQsS0FBSyxjQUVQLFNBQVUsU0FBa0IsRUFBVSxHQUNoQyxHQUNGLEtBQUssa0JBS1gsU0FDRSxnQkFBaUIsV0FDZixNQUFPLE1BQUssYUFBYSxTQUFXLEtBQUssYUFBYSxTQUFXLEtBQUssT0FBTyxTQUUvRSxXQUFZLFdBQ1YsR0FBSSxHQUFjLEtBQUssaUJBRW5CLEdBQ0YsRUFBUyxNQUNQLEtBQU0sS0FBSyxLQUNYLEdBQUksS0FBSyxHQUNULGNBQWUsT0FBTyxFQUFrQixJQUN4QyxNQUFPLEtBQUssYUFBZSxLQUFLLFlBQVksTUFBTSxLQUNsRCxNQUFPLEtBQUssUUFHZCxLQUFLLFNBR1QsTUFBTyxTQUFlLEdBQ3BCLEVBQVMsT0FDUCxLQUFNLEtBQUssS0FDWCxHQUFJLEdBQVUsS0FBSyxNQUd2QixjQUFlLFdBQ2IsR0FBSSxPQUFLLEdBQ0wsRUFBUyxLQUFLLFFBRWxCLElBQXNCLGdCQUFYLEdBQ1QsRUFBSyxTQUFTLGNBQWMsT0FDdkIsQ0FBQSxLQUFJLFlBQWtCLGNBSTNCLFdBREEsU0FBUSxLQUFLLHdFQUZiLEdBQUssRUFNUCxHQUFJLEVBQUksQ0FDTixHQUFJLEdBQVksR0FBSSxHQUFJLEtBQWEsR0FDbkMsT0FBUSxLQUNSLFdBQ0UsS0FBTSxLQUFLLEdBQ1gsSUFBSyxFQUFHLFFBQ1IsV0FBWSxFQUFrQixNQUdsQyxHQUFVLE9BQU8sR0FDakIsS0FBSyxZQUFjLE1BRW5CLFNBQVEsS0FBSyx3Q0FBMEMsRUFBUyxtQkFHcEUsa0JBQW1CLFNBQTJCLEdBQzVDLE1BQTJCLGtCQUFiLEdBQTBCLEVBQVMsS0FBSyxXQUFhLElBSXZFLE9BQVEsU0FBZ0IsR0FDdEIsR0FBSSxHQUFXLEtBQUssT0FBTyxTQUFXLEtBQUssYUFBYSxZQUNwRCxFQUFNLEtBQUssR0FDZixPQUFJLEdBQVMsUUFBVSxLQUFLLFVBRTFCLEtBQUssU0FBUyxVQUFXLEVBQ2xCLEVBQVMsUUFBVSxHQUFLLEtBQUssS0FBTyxFQUFTLEdBQUssRUFBRSxHQUFNLEtBQUssa0JBQWtCLE1BRWpGLEVBQUUsR0FDUCxNQUFTLFdBQ1QsTUFBTyxnQkFDUCxJQUFLLDBCQXdCYixPQVhzQixtQkFBWCxTQUEwQixPQUFPLEtBQzFDLE9BQU8sSUFBSSxLQUFNLFFBQVMsS0FJMUIsUUFBUyxFQUNULE9BQVEsRUFDUixhQUFjLEVBQ2QsU0FBVTs7O0FDdmxCWixRQUFTLG9CQUNMLEtBQU0sSUFBSSxPQUFNLG1DQUVwQixRQUFTLHVCQUNMLEtBQU0sSUFBSSxPQUFNLHFDQXNCcEIsUUFBUyxZQUFXLEdBQ2hCLEdBQUksbUJBQXFCLFdBRXJCLE1BQU8sWUFBVyxFQUFLLEVBRzNCLEtBQUssbUJBQXFCLG1CQUFxQixtQkFBcUIsV0FFaEUsTUFEQSxrQkFBbUIsV0FDWixXQUFXLEVBQUssRUFFM0IsS0FFSSxNQUFPLGtCQUFpQixFQUFLLEdBQy9CLE1BQU0sR0FDSixJQUVJLE1BQU8sa0JBQWlCLEtBQUssS0FBTSxFQUFLLEdBQzFDLE1BQU0sR0FFSixNQUFPLGtCQUFpQixLQUFLLEtBQU0sRUFBSyxLQU1wRCxRQUFTLGlCQUFnQixHQUNyQixHQUFJLHFCQUF1QixhQUV2QixNQUFPLGNBQWEsRUFHeEIsS0FBSyxxQkFBdUIsc0JBQXdCLHFCQUF1QixhQUV2RSxNQURBLG9CQUFxQixhQUNkLGFBQWEsRUFFeEIsS0FFSSxNQUFPLG9CQUFtQixHQUM1QixNQUFPLEdBQ0wsSUFFSSxNQUFPLG9CQUFtQixLQUFLLEtBQU0sR0FDdkMsTUFBTyxHQUdMLE1BQU8sb0JBQW1CLEtBQUssS0FBTSxLQVlqRCxRQUFTLG1CQUNBLFVBQWEsZUFHbEIsVUFBVyxFQUNQLGFBQWEsT0FDYixNQUFRLGFBQWEsT0FBTyxPQUU1QixZQUFjLEVBRWQsTUFBTSxRQUNOLGNBSVIsUUFBUyxjQUNMLElBQUksU0FBSixDQUdBLEdBQUksR0FBVSxXQUFXLGdCQUN6QixXQUFXLENBR1gsS0FEQSxHQUFJLEdBQU0sTUFBTSxPQUNWLEdBQUssQ0FHUCxJQUZBLGFBQWUsTUFDZixXQUNTLFdBQWEsR0FDZCxjQUNBLGFBQWEsWUFBWSxLQUdqQyxhQUFjLEVBQ2QsRUFBTSxNQUFNLE9BRWhCLGFBQWUsS0FDZixVQUFXLEVBQ1gsZ0JBQWdCLElBaUJwQixRQUFTLE1BQUssRUFBSyxHQUNmLEtBQUssSUFBTSxFQUNYLEtBQUssTUFBUSxFQVlqQixRQUFTLFNBaEtULEdBQUksU0FBVSxPQUFPLFdBT2pCLGlCQUNBLG9CQVFILFdBQ0csSUFFUSxpQkFEc0Isa0JBQWYsWUFDWSxXQUVBLGlCQUV6QixNQUFPLEdBQ0wsaUJBQW1CLGlCQUV2QixJQUVRLG1CQUR3QixrQkFBakIsY0FDYyxhQUVBLG9CQUUzQixNQUFPLEdBQ0wsbUJBQXFCLHVCQXVEN0IsSUFBSSxVQUNBLFVBQVcsRUFDWCxhQUNBLFlBQWMsQ0F5Q2xCLFNBQVEsU0FBVyxTQUFVLEdBQ3pCLEdBQUksR0FBTyxHQUFJLE9BQU0sVUFBVSxPQUFTLEVBQ3hDLElBQUksVUFBVSxPQUFTLEVBQ25CLElBQUssR0FBSSxHQUFJLEVBQUcsRUFBSSxVQUFVLE9BQVEsSUFDbEMsRUFBSyxFQUFJLEdBQUssVUFBVSxFQUdoQyxPQUFNLEtBQUssR0FBSSxNQUFLLEVBQUssSUFDSixJQUFqQixNQUFNLFFBQWlCLFVBQ3ZCLFdBQVcsYUFTbkIsS0FBSyxVQUFVLElBQU0sV0FDakIsS0FBSyxJQUFJLE1BQU0sS0FBTSxLQUFLLFFBRTlCLFFBQVEsTUFBUSxVQUNoQixRQUFRLFNBQVUsRUFDbEIsUUFBUSxPQUNSLFFBQVEsUUFDUixRQUFRLFFBQVUsR0FDbEIsUUFBUSxZQUlSLFFBQVEsR0FBSyxLQUNiLFFBQVEsWUFBYyxLQUN0QixRQUFRLEtBQU8sS0FDZixRQUFRLElBQU0sS0FDZCxRQUFRLGVBQWlCLEtBQ3pCLFFBQVEsbUJBQXFCLEtBQzdCLFFBQVEsS0FBTyxLQUNmLFFBQVEsZ0JBQWtCLEtBQzFCLFFBQVEsb0JBQXNCLEtBRTlCLFFBQVEsVUFBWSxTQUFVLEdBQVEsVUFFdEMsUUFBUSxRQUFVLFNBQVUsR0FDeEIsS0FBTSxJQUFJLE9BQU0scUNBR3BCLFFBQVEsSUFBTSxXQUFjLE1BQU8sS0FDbkMsUUFBUSxNQUFRLFNBQVUsR0FDdEIsS0FBTSxJQUFJLE9BQU0sbUNBRXBCLFFBQVEsTUFBUSxXQUFhLE1BQU87OztBQ3ZMcEMsWUFLQSxTQUFTLHVCQUFzQixHQUM5QixPQUFRLEVBQUssYUFDWixJQUFLLFFBQ0osTUFBTyxVQUFVLEVBQUssRUFBTyxHQUM1QixNQUFpQixRQUFWLEdBQ04sT0FBTyxFQUFLLEdBQ1osSUFDQSxFQUNBLEtBQ0MsS0FBSyxLQUNOLE9BQU8sRUFBSyxHQUNaLElBQ0EsT0FBTyxFQUFPLEdBQ2QsS0FDQSxPQUFPLEVBQU8sSUFDYixLQUFLLElBR1QsS0FBSyxVQUNKLE1BQU8sVUFBVSxFQUFLLEdBQ3JCLE1BQWlCLFFBQVYsRUFBaUIsT0FBTyxFQUFLLElBQ25DLE9BQU8sRUFBSyxHQUNaLE1BQ0EsT0FBTyxFQUFPLElBQ2IsS0FBSyxJQUdULFNBQ0MsTUFBTyxVQUFVLEVBQUssR0FDckIsTUFBaUIsUUFBVixFQUFpQixPQUFPLEVBQUssSUFDbkMsT0FBTyxFQUFLLEdBQ1osSUFDQSxPQUFPLEVBQU8sSUFDYixLQUFLLE1BS1gsUUFBUyxzQkFBcUIsR0FDN0IsR0FBSSxFQUVKLFFBQVEsRUFBSyxhQUNaLElBQUssUUFDSixNQUFPLFVBQVUsRUFBSyxFQUFPLEdBSzVCLEdBSkEsRUFBUyxhQUFhLEtBQUssR0FFM0IsRUFBTSxFQUFJLFFBQVEsV0FBWSxLQUV6QixFQUVKLFlBREEsRUFBWSxHQUFPLE9BSUssS0FBckIsRUFBWSxLQUNmLEVBQVksT0FHYixFQUFZLEdBQUssRUFBTyxJQUFNLEVBR2hDLEtBQUssVUFDSixNQUFPLFVBQVUsRUFBSyxFQUFPLEdBSTVCLE1BSEEsR0FBUyxVQUFVLEtBQUssR0FDeEIsRUFBTSxFQUFJLFFBQVEsUUFBUyxJQUV0QixNQUcyQixLQUFyQixFQUFZLFFBQ3RCLEVBQVksSUFBUSxTQUlyQixFQUFZLE1BQVUsT0FBTyxFQUFZLEdBQU0sU0FQOUMsRUFBWSxHQUFPLEdBVXRCLFNBQ0MsTUFBTyxVQUFVLEVBQUssRUFBTyxHQUM1QixPQUF5QixLQUFyQixFQUFZLEdBRWYsWUFEQSxFQUFZLEdBQU8sRUFJcEIsR0FBWSxNQUFVLE9BQU8sRUFBWSxHQUFNLEtBS25ELFFBQVMsUUFBTyxFQUFPLEdBQ3RCLE1BQUksR0FBSyxPQUNELEVBQUssT0FBUyxnQkFBZ0IsR0FBUyxtQkFBbUIsR0FHM0QsRUFHUixRQUFTLFlBQVcsR0FDbkIsTUFBSSxPQUFNLFFBQVEsR0FDVixFQUFNLE9BQ2MsZ0JBQVYsR0FDVixXQUFXLE9BQU8sS0FBSyxJQUFRLEtBQUssU0FBVSxFQUFHLEdBQ3ZELE1BQU8sUUFBTyxHQUFLLE9BQU8sS0FDeEIsSUFBSSxTQUFVLEdBQ2hCLE1BQU8sR0FBTSxLQUlSLEVBR1IsUUFBUyxTQUFRLEdBQ2hCLEdBQUksR0FBYSxFQUFJLFFBQVEsSUFDN0IsUUFBb0IsSUFBaEIsRUFDSSxHQUVELEVBQUksTUFBTSxFQUFhLEdBRy9CLFFBQVMsT0FBTSxFQUFLLEdBQ25CLEVBQU8sY0FBYyxZQUFhLFFBQVMsRUFFM0MsSUFBSSxHQUFZLHFCQUFxQixHQUlqQyxFQUFNLE9BQU8sT0FBTyxLQUV4QixPQUFtQixnQkFBUixHQUNILEdBR1IsRUFBTSxFQUFJLE9BQU8sUUFBUSxTQUFVLE1BTW5DLEVBQUksTUFBTSxLQUFLLFFBQVEsU0FBVSxHQUNoQyxHQUFJLEdBQVEsRUFBTSxRQUFRLE1BQU8sS0FBSyxNQUFNLEtBR3hDLEVBQU0sRUFBTSxRQUNaLEVBQU0sRUFBTSxPQUFTLEVBQUksRUFBTSxLQUFLLFNBQU8sRUFJL0MsT0FBYyxLQUFSLEVBQW9CLEtBQU8sZ0JBQWdCLEdBRWpELEVBQVUsZ0JBQWdCLEdBQU0sRUFBSyxLQUcvQixPQUFPLEtBQUssR0FBSyxPQUFPLE9BQU8sU0FBVSxFQUFRLEdBQ3ZELEdBQUksR0FBTSxFQUFJLEVBUWQsT0FQSSxTQUFRLElBQXVCLGdCQUFSLEtBQXFCLE1BQU0sUUFBUSxHQUU3RCxFQUFPLEdBQU8sV0FBVyxHQUV6QixFQUFPLEdBQU8sRUFHUixHQUNMLE9BQU8sT0FBTyxRQTNCVCxFQTFJVCxHQUFJLGlCQUFrQixRQUFRLHFCQUMxQixhQUFlLFFBQVEsaUJBQ3ZCLGdCQUFrQixRQUFRLHVCQXNLOUIsU0FBUSxRQUFVLFFBQ2xCLFFBQVEsTUFBUSxNQUVoQixRQUFRLFVBQVksU0FBVSxFQUFLLEdBT2xDLEVBQU8sY0FMTixRQUFRLEVBQ1IsUUFBUSxFQUNSLFlBQWEsUUFHZ0IsSUFFWixJQUFkLEVBQUssT0FDUixFQUFLLEtBQU8sYUFHYixJQUFJLEdBQVksc0JBQXNCLEVBRXRDLE9BQU8sR0FBTSxPQUFPLEtBQUssR0FBSyxLQUFLLEVBQUssTUFBTSxJQUFJLFNBQVUsR0FDM0QsR0FBSSxHQUFNLEVBQUksRUFFZCxRQUFZLEtBQVIsRUFDSCxNQUFPLEVBR1IsSUFBWSxPQUFSLEVBQ0gsTUFBTyxRQUFPLEVBQUssRUFHcEIsSUFBSSxNQUFNLFFBQVEsR0FBTSxDQUN2QixHQUFJLEtBVUosT0FSQSxHQUFJLFFBQVEsUUFBUSxTQUFVLE9BQ2hCLEtBQVQsR0FJSixFQUFPLEtBQUssRUFBVSxFQUFLLEVBQU0sRUFBTyxXQUdsQyxFQUFPLEtBQUssS0FHcEIsTUFBTyxRQUFPLEVBQUssR0FBUSxJQUFNLE9BQU8sRUFBSyxLQUMzQyxPQUFPLFNBQVUsR0FDbkIsTUFBTyxHQUFFLE9BQVMsSUFDaEIsS0FBSyxLQUFPLElBR2hCLFFBQVEsU0FBVyxTQUFVLEVBQUssR0FDakMsT0FDQyxJQUFLLEVBQUksTUFBTSxLQUFLLElBQU0sR0FDMUIsTUFBTyxNQUFNLFFBQVEsR0FBTTs7O0FDcE43QixHQUFJLEdBQUksV0FBYyxNQUFPLFVBQWEsU0FBUyxpQkFJL0MsV0FBYSxFQUFFLG9CQUNqQixPQUFPLG9CQUFvQixHQUFHLFFBQVEsdUJBQXlCLEVBRzdELFdBQWEsWUFBYyxFQUFFLGtCQU9qQyxJQUpBLEVBQUUsdUJBQXFCLEdBRXZCLE9BQU8sUUFBVSxRQUFRLGFBRXJCLFdBRUYsRUFBRSxtQkFBcUIsZUFHdkIsV0FDUyxHQUFFLG1CQUNULE1BQU0sR0FDTixFQUFFLHVCQUFxQjs7O0NDekIxQixTQUFVLEdBQ1QsWUEyQkEsU0FBUyxHQUFLLEVBQVMsRUFBUyxFQUFNLEdBRXBDLEdBQUksR0FBaUIsR0FBVyxFQUFRLG9CQUFxQixHQUFZLEVBQVUsRUFDL0UsRUFBWSxPQUFPLE9BQU8sRUFBZSxXQUN6QyxFQUFVLEdBQUksR0FBUSxNQU0xQixPQUZBLEdBQVUsUUFBVSxFQUFpQixFQUFTLEVBQU0sR0FFN0MsRUFjVCxRQUFTLEdBQVMsRUFBSSxFQUFLLEdBQ3pCLElBQ0UsT0FBUyxLQUFNLFNBQVUsSUFBSyxFQUFHLEtBQUssRUFBSyxJQUMzQyxNQUFPLEdBQ1AsT0FBUyxLQUFNLFFBQVMsSUFBSyxJQWlCakMsUUFBUyxNQUNULFFBQVMsTUFDVCxRQUFTLE1BNEJULFFBQVMsR0FBc0IsSUFDNUIsT0FBUSxRQUFTLFVBQVUsUUFBUSxTQUFTLEdBQzNDLEVBQVUsR0FBVSxTQUFTLEdBQzNCLE1BQU8sTUFBSyxRQUFRLEVBQVEsTUFvQ2xDLFFBQVMsR0FBYyxHQUNyQixRQUFTLEdBQU8sRUFBUSxFQUFLLEVBQVMsR0FDcEMsR0FBSSxHQUFTLEVBQVMsRUFBVSxHQUFTLEVBQVcsRUFDcEQsSUFBb0IsVUFBaEIsRUFBTyxLQUVKLENBQ0wsR0FBSSxHQUFTLEVBQU8sSUFDaEIsRUFBUSxFQUFPLEtBQ25CLE9BQUksSUFDaUIsZ0JBQVYsSUFDUCxFQUFPLEtBQUssRUFBTyxXQUNkLFFBQVEsUUFBUSxFQUFNLFNBQVMsS0FBSyxTQUFTLEdBQ2xELEVBQU8sT0FBUSxFQUFPLEVBQVMsSUFDOUIsU0FBUyxHQUNWLEVBQU8sUUFBUyxFQUFLLEVBQVMsS0FJM0IsUUFBUSxRQUFRLEdBQU8sS0FBSyxTQUFTLEdBZ0IxQyxFQUFPLE1BQVEsRUFDZixFQUFRLElBQ1AsR0FoQ0gsRUFBTyxFQUFPLEtBc0NsQixRQUFTLEdBQVEsRUFBUSxHQUN2QixRQUFTLEtBQ1AsTUFBTyxJQUFJLFNBQVEsU0FBUyxFQUFTLEdBQ25DLEVBQU8sRUFBUSxFQUFLLEVBQVMsS0FJakMsTUFBTyxHQWFMLEVBQWtCLEVBQWdCLEtBQ2hDLEVBR0EsR0FDRSxJQTNCUixHQUFJLEVBZ0NKLE1BQUssUUFBVSxFQXdCakIsUUFBUyxHQUFpQixFQUFTLEVBQU0sR0FDdkMsR0FBSSxHQUFRLENBRVosT0FBTyxVQUFnQixFQUFRLEdBQzdCLEdBQUksSUFBVSxFQUNaLEtBQU0sSUFBSSxPQUFNLCtCQUdsQixJQUFJLElBQVUsRUFBbUIsQ0FDL0IsR0FBZSxVQUFYLEVBQ0YsS0FBTSxFQUtSLE9BQU8sS0FNVCxJQUhBLEVBQVEsT0FBUyxFQUNqQixFQUFRLElBQU0sSUFFRCxDQUNYLEdBQUksR0FBVyxFQUFRLFFBQ3ZCLElBQUksRUFBVSxDQUNaLEdBQUksR0FBaUIsRUFBb0IsRUFBVSxFQUNuRCxJQUFJLEVBQWdCLENBQ2xCLEdBQUksSUFBbUIsRUFBa0IsUUFDekMsT0FBTyxJQUlYLEdBQXVCLFNBQW5CLEVBQVEsT0FHVixFQUFRLEtBQU8sRUFBUSxNQUFRLEVBQVEsUUFFbEMsSUFBdUIsVUFBbkIsRUFBUSxPQUFvQixDQUNyQyxHQUFJLElBQVUsRUFFWixLQURBLEdBQVEsRUFDRixFQUFRLEdBR2hCLEdBQVEsa0JBQWtCLEVBQVEsU0FFTixXQUFuQixFQUFRLFFBQ2pCLEVBQVEsT0FBTyxTQUFVLEVBQVEsSUFHbkMsR0FBUSxDQUVSLElBQUksR0FBUyxFQUFTLEVBQVMsRUFBTSxFQUNyQyxJQUFvQixXQUFoQixFQUFPLEtBQW1CLENBTzVCLEdBSkEsRUFBUSxFQUFRLEtBQ1osRUFDQSxFQUVBLEVBQU8sTUFBUSxFQUNqQixRQUdGLFFBQ0UsTUFBTyxFQUFPLElBQ2QsS0FBTSxFQUFRLE1BR1MsVUFBaEIsRUFBTyxPQUNoQixFQUFRLEVBR1IsRUFBUSxPQUFTLFFBQ2pCLEVBQVEsSUFBTSxFQUFPLE9BVTdCLFFBQVMsR0FBb0IsRUFBVSxHQUNyQyxHQUFJLEdBQVMsRUFBUyxTQUFTLEVBQVEsT0FDdkMsSUFBSSxJQUFXLEVBQVcsQ0FLeEIsR0FGQSxFQUFRLFNBQVcsS0FFSSxVQUFuQixFQUFRLE9BQW9CLENBQzlCLEdBQUksRUFBUyxTQUFTLFNBR3BCLEVBQVEsT0FBUyxTQUNqQixFQUFRLElBQU0sRUFDZCxFQUFvQixFQUFVLEdBRVAsVUFBbkIsRUFBUSxRQUdWLE1BQU8sRUFJWCxHQUFRLE9BQVMsUUFDakIsRUFBUSxJQUFNLEdBQUksV0FDaEIsa0RBR0osTUFBTyxHQUdULEdBQUksR0FBUyxFQUFTLEVBQVEsRUFBUyxTQUFVLEVBQVEsSUFFekQsSUFBb0IsVUFBaEIsRUFBTyxLQUlULE1BSEEsR0FBUSxPQUFTLFFBQ2pCLEVBQVEsSUFBTSxFQUFPLElBQ3JCLEVBQVEsU0FBVyxLQUNaLENBR1QsSUFBSSxHQUFPLEVBQU8sR0FFbEIsT0FBTSxHQU9GLEVBQUssTUFHUCxFQUFRLEVBQVMsWUFBYyxFQUFLLE1BR3BDLEVBQVEsS0FBTyxFQUFTLFFBUUQsV0FBbkIsRUFBUSxTQUNWLEVBQVEsT0FBUyxPQUNqQixFQUFRLElBQU0sR0FVbEIsRUFBUSxTQUFXLEtBQ1osR0FORSxHQTNCUCxFQUFRLE9BQVMsUUFDakIsRUFBUSxJQUFNLEdBQUksV0FBVSxvQ0FDNUIsRUFBUSxTQUFXLEtBQ1osR0FvRFgsUUFBUyxHQUFhLEdBQ3BCLEdBQUksSUFBVSxPQUFRLEVBQUssR0FFdkIsS0FBSyxLQUNQLEVBQU0sU0FBVyxFQUFLLElBR3BCLElBQUssS0FDUCxFQUFNLFdBQWEsRUFBSyxHQUN4QixFQUFNLFNBQVcsRUFBSyxJQUd4QixLQUFLLFdBQVcsS0FBSyxHQUd2QixRQUFTLEdBQWMsR0FDckIsR0FBSSxHQUFTLEVBQU0sY0FDbkIsR0FBTyxLQUFPLGVBQ1AsR0FBTyxJQUNkLEVBQU0sV0FBYSxFQUdyQixRQUFTLEdBQVEsR0FJZixLQUFLLGFBQWdCLE9BQVEsU0FDN0IsRUFBWSxRQUFRLEVBQWMsTUFDbEMsS0FBSyxPQUFNLEdBOEJiLFFBQVMsR0FBTyxHQUNkLEdBQUksRUFBVSxDQUNaLEdBQUksR0FBaUIsRUFBUyxFQUM5QixJQUFJLEVBQ0YsTUFBTyxHQUFlLEtBQUssRUFHN0IsSUFBNkIsa0JBQWxCLEdBQVMsS0FDbEIsTUFBTyxFQUdULEtBQUssTUFBTSxFQUFTLFFBQVMsQ0FDM0IsR0FBSSxJQUFLLEVBQUcsRUFBTyxRQUFTLEtBQzFCLE9BQVMsRUFBSSxFQUFTLFFBQ3BCLEdBQUksRUFBTyxLQUFLLEVBQVUsR0FHeEIsTUFGQSxHQUFLLE1BQVEsRUFBUyxHQUN0QixFQUFLLE1BQU8sRUFDTCxDQU9YLE9BSEEsR0FBSyxNQUFRLEVBQ2IsRUFBSyxNQUFPLEVBRUwsRUFHVCxPQUFPLEdBQUssS0FBTyxHQUt2QixPQUFTLEtBQU0sR0FJakIsUUFBUyxLQUNQLE9BQVMsTUFBTyxFQUFXLE1BQU0sR0E3Zm5DLEdBRUksR0FGQSxFQUFLLE9BQU8sVUFDWixFQUFTLEVBQUcsZUFFWixFQUE0QixrQkFBWCxRQUF3QixVQUN6QyxFQUFpQixFQUFRLFVBQVksYUFDckMsRUFBc0IsRUFBUSxlQUFpQixrQkFDL0MsRUFBb0IsRUFBUSxhQUFlLGdCQUUzQyxFQUE2QixnQkFBWCxRQUNsQixFQUFVLEVBQU8sa0JBQ3JCLElBQUksRUFRRixZQVBJLElBR0YsT0FBTyxRQUFVLEdBU3JCLEdBQVUsRUFBTyxtQkFBcUIsRUFBVyxPQUFPLFdBY3hELEVBQVEsS0FBTyxDQW9CZixJQUFJLEdBQXlCLGlCQUN6QixFQUF5QixpQkFDekIsRUFBb0IsWUFDcEIsRUFBb0IsWUFJcEIsS0FZQSxJQUNKLEdBQWtCLEdBQWtCLFdBQ2xDLE1BQU8sTUFHVCxJQUFJLEdBQVcsT0FBTyxlQUNsQixFQUEwQixHQUFZLEVBQVMsRUFBUyxPQUN4RCxJQUNBLElBQTRCLEdBQzVCLEVBQU8sS0FBSyxFQUF5QixLQUd2QyxFQUFvQixFQUd0QixJQUFJLEdBQUssRUFBMkIsVUFDbEMsRUFBVSxVQUFZLE9BQU8sT0FBTyxFQUN0QyxHQUFrQixVQUFZLEVBQUcsWUFBYyxFQUMvQyxFQUEyQixZQUFjLEVBQ3pDLEVBQTJCLEdBQ3pCLEVBQWtCLFlBQWMsb0JBWWxDLEVBQVEsb0JBQXNCLFNBQVMsR0FDckMsR0FBSSxHQUF5QixrQkFBWCxJQUF5QixFQUFPLFdBQ2xELFNBQU8sSUFDSCxJQUFTLEdBRzJCLHVCQUFuQyxFQUFLLGFBQWUsRUFBSyxRQUloQyxFQUFRLEtBQU8sU0FBUyxHQVV0QixNQVRJLFFBQU8sZUFDVCxPQUFPLGVBQWUsRUFBUSxJQUU5QixFQUFPLFVBQVksRUFDYixJQUFxQixLQUN6QixFQUFPLEdBQXFCLHNCQUdoQyxFQUFPLFVBQVksT0FBTyxPQUFPLEdBQzFCLEdBT1QsRUFBUSxNQUFRLFNBQVMsR0FDdkIsT0FBUyxRQUFTLElBOEVwQixFQUFzQixFQUFjLFdBQ3BDLEVBQWMsVUFBVSxHQUF1QixXQUM3QyxNQUFPLE9BRVQsRUFBUSxjQUFnQixFQUt4QixFQUFRLE1BQVEsU0FBUyxFQUFTLEVBQVMsRUFBTSxHQUMvQyxHQUFJLEdBQU8sR0FBSSxHQUNiLEVBQUssRUFBUyxFQUFTLEVBQU0sR0FHL0IsT0FBTyxHQUFRLG9CQUFvQixHQUMvQixFQUNBLEVBQUssT0FBTyxLQUFLLFNBQVMsR0FDeEIsTUFBTyxHQUFPLEtBQU8sRUFBTyxNQUFRLEVBQUssVUFzS2pELEVBQXNCLEdBRXRCLEVBQUcsR0FBcUIsWUFPeEIsRUFBRyxHQUFrQixXQUNuQixNQUFPLE9BR1QsRUFBRyxTQUFXLFdBQ1osTUFBTyxzQkFrQ1QsRUFBUSxLQUFPLFNBQVMsR0FDdEIsR0FBSSxLQUNKLEtBQUssR0FBSSxLQUFPLEdBQ2QsRUFBSyxLQUFLLEVBTVosT0FKQSxHQUFLLFVBSUUsUUFBUyxLQUNkLEtBQU8sRUFBSyxRQUFRLENBQ2xCLEdBQUksR0FBTSxFQUFLLEtBQ2YsSUFBSSxJQUFPLEdBR1QsTUFGQSxHQUFLLE1BQVEsRUFDYixFQUFLLE1BQU8sRUFDTCxFQVFYLE1BREEsR0FBSyxNQUFPLEVBQ0wsSUFzQ1gsRUFBUSxPQUFTLEVBTWpCLEVBQVEsV0FDTixZQUFhLEVBRWIsTUFBTyxTQUFTLEdBY2QsR0FiQSxLQUFLLEtBQU8sRUFDWixLQUFLLEtBQU8sRUFHWixLQUFLLEtBQU8sS0FBSyxNQUFRLEVBQ3pCLEtBQUssTUFBTyxFQUNaLEtBQUssU0FBVyxLQUVoQixLQUFLLE9BQVMsT0FDZCxLQUFLLElBQU0sRUFFWCxLQUFLLFdBQVcsUUFBUSxJQUVuQixFQUNILElBQUssR0FBSSxLQUFRLE1BRVEsTUFBbkIsRUFBSyxPQUFPLElBQ1osRUFBTyxLQUFLLEtBQU0sS0FDakIsT0FBTyxFQUFLLE1BQU0sTUFDckIsS0FBSyxHQUFRLElBTXJCLEtBQU0sV0FDSixLQUFLLE1BQU8sQ0FFWixJQUFJLEdBQVksS0FBSyxXQUFXLEdBQzVCLEVBQWEsRUFBVSxVQUMzQixJQUF3QixVQUFwQixFQUFXLEtBQ2IsS0FBTSxHQUFXLEdBR25CLE9BQU8sTUFBSyxNQUdkLGtCQUFtQixTQUFTLEdBTTFCLFFBQVMsR0FBTyxFQUFLLEdBWW5CLE1BWEEsR0FBTyxLQUFPLFFBQ2QsRUFBTyxJQUFNLEVBQ2IsRUFBUSxLQUFPLEVBRVgsSUFHRixFQUFRLE9BQVMsT0FDakIsRUFBUSxJQUFNLEtBR04sRUFqQlosR0FBSSxLQUFLLEtBQ1AsS0FBTSxFQW1CUixLQUFLLEdBaEJELEdBQVUsS0FnQkwsRUFBSSxLQUFLLFdBQVcsT0FBUyxFQUFHLEdBQUssSUFBSyxFQUFHLENBQ3BELEdBQUksR0FBUSxLQUFLLFdBQVcsR0FDeEIsRUFBUyxFQUFNLFVBRW5CLElBQXFCLFNBQWpCLEVBQU0sT0FJUixNQUFPLEdBQU8sTUFHaEIsSUFBSSxFQUFNLFFBQVUsS0FBSyxLQUFNLENBQzdCLEdBQUksR0FBVyxFQUFPLEtBQUssRUFBTyxZQUM5QixFQUFhLEVBQU8sS0FBSyxFQUFPLGFBRXBDLElBQUksR0FBWSxFQUFZLENBQzFCLEdBQUksS0FBSyxLQUFPLEVBQU0sU0FDcEIsTUFBTyxHQUFPLEVBQU0sVUFBVSxFQUN6QixJQUFJLEtBQUssS0FBTyxFQUFNLFdBQzNCLE1BQU8sR0FBTyxFQUFNLGdCQUdqQixJQUFJLEdBQ1QsR0FBSSxLQUFLLEtBQU8sRUFBTSxTQUNwQixNQUFPLEdBQU8sRUFBTSxVQUFVLE9BRzNCLENBQUEsSUFBSSxFQU1ULEtBQU0sSUFBSSxPQUFNLHlDQUxoQixJQUFJLEtBQUssS0FBTyxFQUFNLFdBQ3BCLE1BQU8sR0FBTyxFQUFNLGdCQVU5QixPQUFRLFNBQVMsRUFBTSxHQUNyQixJQUFLLEdBQUksR0FBSSxLQUFLLFdBQVcsT0FBUyxFQUFHLEdBQUssSUFBSyxFQUFHLENBQ3BELEdBQUksR0FBUSxLQUFLLFdBQVcsRUFDNUIsSUFBSSxFQUFNLFFBQVUsS0FBSyxNQUNyQixFQUFPLEtBQUssRUFBTyxlQUNuQixLQUFLLEtBQU8sRUFBTSxXQUFZLENBQ2hDLEdBQUksR0FBZSxDQUNuQixRQUlBLElBQ1UsVUFBVCxHQUNTLGFBQVQsSUFDRCxFQUFhLFFBQVUsR0FDdkIsR0FBTyxFQUFhLGFBR3RCLEVBQWUsS0FHakIsSUFBSSxHQUFTLEVBQWUsRUFBYSxhQUl6QyxPQUhBLEdBQU8sS0FBTyxFQUNkLEVBQU8sSUFBTSxFQUVULEdBQ0YsS0FBSyxPQUFTLE9BQ2QsS0FBSyxLQUFPLEVBQWEsV0FDbEIsR0FHRixLQUFLLFNBQVMsSUFHdkIsU0FBVSxTQUFTLEVBQVEsR0FDekIsR0FBb0IsVUFBaEIsRUFBTyxLQUNULEtBQU0sR0FBTyxHQWNmLE9BWG9CLFVBQWhCLEVBQU8sTUFDUyxhQUFoQixFQUFPLEtBQ1QsS0FBSyxLQUFPLEVBQU8sSUFDTSxXQUFoQixFQUFPLE1BQ2hCLEtBQUssS0FBTyxLQUFLLElBQU0sRUFBTyxJQUM5QixLQUFLLE9BQVMsU0FDZCxLQUFLLEtBQU8sT0FDYSxXQUFoQixFQUFPLE1BQXFCLElBQ3JDLEtBQUssS0FBTyxHQUdQLEdBR1QsT0FBUSxTQUFTLEdBQ2YsSUFBSyxHQUFJLEdBQUksS0FBSyxXQUFXLE9BQVMsRUFBRyxHQUFLLElBQUssRUFBRyxDQUNwRCxHQUFJLEdBQVEsS0FBSyxXQUFXLEVBQzVCLElBQUksRUFBTSxhQUFlLEVBR3ZCLE1BRkEsTUFBSyxTQUFTLEVBQU0sV0FBWSxFQUFNLFVBQ3RDLEVBQWMsR0FDUCxJQUtiLE1BQVMsU0FBUyxHQUNoQixJQUFLLEdBQUksR0FBSSxLQUFLLFdBQVcsT0FBUyxFQUFHLEdBQUssSUFBSyxFQUFHLENBQ3BELEdBQUksR0FBUSxLQUFLLFdBQVcsRUFDNUIsSUFBSSxFQUFNLFNBQVcsRUFBUSxDQUMzQixHQUFJLEdBQVMsRUFBTSxVQUNuQixJQUFvQixVQUFoQixFQUFPLEtBQWtCLENBQzNCLEdBQUksR0FBUyxFQUFPLEdBQ3BCLEdBQWMsR0FFaEIsTUFBTyxJQU1YLEtBQU0sSUFBSSxPQUFNLDBCQUdsQixjQUFlLFNBQVMsRUFBVSxFQUFZLEdBYTVDLE1BWkEsTUFBSyxVQUNILFNBQVUsRUFBTyxHQUNqQixXQUFZLEVBQ1osUUFBUyxHQUdTLFNBQWhCLEtBQUssU0FHUCxLQUFLLElBQU0sR0FHTixLQU9YLFdBQWMsTUFBTyxVQUFhLFNBQVM7OztBQ3J0QjdDLFlBQ0EsUUFBTyxRQUFVLFNBQVUsR0FDMUIsTUFBTyxvQkFBbUIsR0FBSyxRQUFRLFdBQVksU0FBVSxHQUM1RCxNQUFPLElBQU0sRUFBRSxXQUFXLEdBQUcsU0FBUyxJQUFJOzs7O0FDYzVDLFFBQVMsU0FBUSxFQUFJLEdBQ25CLEtBQUssSUFBTSxFQUNYLEtBQUssU0FBVyxFQW5CbEIsR0FBSSxVQUFXLFFBQVEsc0JBQXNCLFNBQ3pDLE1BQVEsU0FBUyxVQUFVLE1BQzNCLE1BQVEsTUFBTSxVQUFVLE1BQ3hCLGdCQUNBLGdCQUFrQixDQUl0QixTQUFRLFdBQWEsV0FDbkIsTUFBTyxJQUFJLFNBQVEsTUFBTSxLQUFLLFdBQVksT0FBUSxXQUFZLGVBRWhFLFFBQVEsWUFBYyxXQUNwQixNQUFPLElBQUksU0FBUSxNQUFNLEtBQUssWUFBYSxPQUFRLFdBQVksZ0JBRWpFLFFBQVEsYUFDUixRQUFRLGNBQWdCLFNBQVMsR0FBVyxFQUFRLFNBTXBELFFBQVEsVUFBVSxNQUFRLFFBQVEsVUFBVSxJQUFNLGFBQ2xELFFBQVEsVUFBVSxNQUFRLFdBQ3hCLEtBQUssU0FBUyxLQUFLLE9BQVEsS0FBSyxNQUlsQyxRQUFRLE9BQVMsU0FBUyxFQUFNLEdBQzlCLGFBQWEsRUFBSyxnQkFDbEIsRUFBSyxhQUFlLEdBR3RCLFFBQVEsU0FBVyxTQUFTLEdBQzFCLGFBQWEsRUFBSyxnQkFDbEIsRUFBSyxjQUFnQixHQUd2QixRQUFRLGFBQWUsUUFBUSxPQUFTLFNBQVMsR0FDL0MsYUFBYSxFQUFLLGVBRWxCLElBQUksR0FBUSxFQUFLLFlBQ2IsSUFBUyxJQUNYLEVBQUssZUFBaUIsV0FBVyxXQUMzQixFQUFLLFlBQ1AsRUFBSyxjQUNOLEtBS1AsUUFBUSxhQUF1QyxrQkFBakIsY0FBOEIsYUFBZSxTQUFTLEdBQ2xGLEdBQUksR0FBSyxrQkFDTCxJQUFPLFVBQVUsT0FBUyxJQUFZLE1BQU0sS0FBSyxVQUFXLEVBa0JoRSxPQWhCQSxjQUFhLElBQU0sRUFFbkIsU0FBUyxXQUNILGFBQWEsS0FHWCxFQUNGLEVBQUcsTUFBTSxLQUFNLEdBRWYsRUFBRyxLQUFLLE1BR1YsUUFBUSxlQUFlLE1BSXBCLEdBR1QsUUFBUSxlQUEyQyxrQkFBbkIsZ0JBQWdDLGVBQWlCLFNBQVMsU0FDakYsY0FBYTs7Ozs7QUNBdEIsUUFBUyxnQkFBZSxFQUFJLEdBQzFCLEdBQUksRUFBUSxXQUFZLENBQ3RCLEdBQUksR0FBUyxFQUFRLE1BQ3JCLEdBQVEsT0FBUyxTQUFVLEVBQUcsR0FDNUIsR0FBSSxHQUFZLElBQUksR0FBSSxTQUl4QixPQUhJLElBQU8sRUFBVSxRQUFRLEVBQUksUUFBVSxHQUN6QyxFQUFVLEtBQUssRUFBSSxRQUVkLEVBQU8sRUFBRyxRQUduQixZQUFXLEVBQVMsYUFBYyxXQUNoQyxHQUFJLEdBQVMsSUFBSSxFQUNaLEdBQU8sT0FDVixFQUFPLEtBQU8sS0FBSyxhQUVyQixFQUFPLFVBQVUsS0FBSyxRQUV4QixXQUFXLEVBQVMsZ0JBQWlCLFdBQ25DLEdBQUksR0FBWSxJQUFJLEdBQUksU0FDeEIsR0FBVSxPQUFPLEVBQVUsUUFBUSxNQUFPLEtBY2hELFFBQVMsWUFBVyxFQUFTLEVBQU0sR0FDakMsR0FBSSxHQUFXLEVBQVEsRUFDdkIsR0FBUSxHQUFRLEVBQ1osTUFBTSxRQUFRLEdBQVksRUFBUyxPQUFPLElBQVMsRUFBVSxJQUM1RCxHQUdQLFFBQVMsU0FBUSxHQUNmLE1BQU8sVUFBVSxFQUFJLEdBQ25CLElBQ0UsRUFBRyxFQUFJLEdBQ1AsTUFBTyxHQUNQLFFBQVEsTUFBTSxHQUNkLFFBQVEsS0FDTixpRkFNUixRQUFTLGVBQWUsRUFBWSxHQUNsQyxJQUFLLEdBQUksS0FBTyxHQUNSLElBQU8sVUFDSixHQUFXLEVBR3RCLEtBQUssR0FBSSxLQUFTLEdBQ2hCLEVBQVcsR0FBUyxFQUFXLEdBeUhuQyxRQUFTLGtCQUFrQixHQUN6QixHQUFLLEVBQVMsR0FBZCxDQUVBLEdBQUksR0FBVyxFQUFTLEVBVXhCLE9BVEEsR0FBUyxHQUFLLFNBQVUsR0FDdEIsSUFFRSxNQUFPLEdBQVMsR0FBTyxHQUN2QixNQUFPLEdBRVAsTUFBTyxHQUFTLEVBQU8sTUFBTSxLQUcxQixXQUNMLEVBQVMsR0FBSyxJQTlRbEIsR0FBSSxLQUNBLFFBQ0EsSUFBTSxPQUFPLE9BQU8sS0FDRixvQkFBWCxVQUNULE9BQU8sZ0JBQWtCLElBRTNCLElBQUksWUFBWSxFQUNaLGNBQWUsRUFDZixhQUFlLGNBRW5CLFNBQVEsUUFBVSxTQUFVLEVBQUssR0FDL0IsSUFBSSxVQWFKLE1BWkEsWUFBWSxFQUVaLElBQU0sRUFBSSxXQUFhLEVBQUksUUFBVSxFQUNyQyxRQUFVLElBQUksUUFBUSxNQUFNLEtBQUssSUFBSSxRQUNyQyxhQUFlLEVBR1gsSUFBSSxPQUFPLGdCQUFnQixRQUFRLFNBQVcsSUFDaEQsYUFBZSxRQUdqQixRQUFRLFdBQWEsUUFBUSxJQUFNLEVBQzlCLFFBQVEsZUFBYixPQUNFLFNBQVEsS0FDTix5R0FlTixRQUFRLGFBQWUsU0FBVSxFQUFJLEdBQ25DLElBQUcsSUFBSSxHQUFQLENBRUEsR0FBSSxHQUFPLElBQ1ksbUJBQVosS0FDVCxFQUFPLEVBQ1AsRUFBVSxFQUFLLFNBRWpCLGVBQWUsRUFBSSxHQUNuQixJQUFJLElBQ0YsS0FBTSxFQUNOLFFBQVMsRUFDVCxnQkFVSixRQUFRLFdBQWEsU0FBVSxHQUM3QixXQUEwQixLQUFaLElBQUksSUEyRXBCLFFBQVEsU0FBVyxRQUFRLFNBQVUsRUFBSSxHQUN2QyxHQUFJLEdBQVMsSUFBSSxFQUNqQixLQUFLLEVBSUgsV0FIQSxHQUFPLFVBQVUsUUFBUSxRQUFRLFNBQVUsR0FDekMsRUFBUyxnQkFPYixJQUh1QixrQkFBWixLQUNULEVBQVUsRUFBUSxTQUVoQixFQUFPLEtBQ1QsRUFBTyxLQUFLLFFBQVEsT0FBUyxFQUFRLE9BQ3JDLEVBQU8sS0FBSyxRQUFRLGdCQUFrQixFQUFRLGdCQUM5QyxFQUFPLFVBQVUsUUFBUSxRQUFRLFNBQVUsR0FDekMsRUFBUyxTQUFTLE9BQVMsRUFBUSxPQUNuQyxFQUFTLFNBQVMsZ0JBQWtCLEVBQVEsZ0JBR3hDLEVBQVMsZUFDWCxFQUFTLGlCQUdQLE1BQU0sUUFBUSxFQUFPLEtBQUssUUFBUSxVQUNwQyxFQUFPLEtBQUssUUFBUSxXQUdsQixNQUFNLFFBQVEsRUFBUyxTQUFTLFVBQ2xDLEVBQVMsU0FBUyxVQVNwQixJQUFJLEdBQVUsaUJBQWlCLEVBQy9CLEdBQVMsZUFDVCxFQUFTLFVBQVUsU0FRckIsSUFKQSxFQUFPLFFBQVEsT0FBUyxFQUFRLE9BQ2hDLEVBQU8sUUFBUSxnQkFBa0IsRUFBUSxnQkFHckMsRUFBTyxRQUFRLFdBQVksQ0FFN0IsR0FBSSxPQUFPLEtBQUssR0FBUyxPQUFTLEVBQ2hDLGNBQWMsRUFBTyxRQUFTLE9BQ3pCLENBSUwsR0FBSSxHQUFlLEVBQU8sUUFBUSxhQUNsQyxJQUFJLEVBQWMsQ0FDaEIsR0FBSSxHQUFTLEVBQVEsTUFDckIsR0FBTyxRQUFRLE9BQVMsU0FBVSxFQUFHLEdBRW5DLE1BREEsR0FBYSxLQUFLLEdBQ1gsRUFBTyxFQUFHLEtBSXZCLEVBQU8sUUFBUSxNQUFRLEtBRW5CLE1BQU0sUUFBUSxFQUFPLFFBQVEsVUFDL0IsRUFBTyxRQUFRLFdBRWpCLEVBQU8sVUFBVSxRQUFRLFFBQVEsU0FBVSxHQUN6QyxFQUFTLG9CQU1qQixRQUFRLE9BQVMsUUFBUSxTQUFVLEVBQUksR0FDckMsR0FBSSxHQUFTLElBQUksRUFDakIsSUFBSSxFQUtGLEdBSnVCLGtCQUFaLEtBQ1QsRUFBVSxFQUFRLFNBRXBCLGVBQWUsRUFBSSxHQUNmLEVBQU8sS0FBTSxDQUNYLFFBQVEsR0FBSyxJQUVmLEVBQU8sS0FBSyxjQUFnQixFQUU5QixJQUFJLEdBQVUsRUFBTyxLQUFLLE1BQU0sT0FBTyxFQUV2QyxHQUFRLFFBQVEsTUFBUSxFQUFPLFFBQVEsTUFDdkMsRUFBTyxLQUFLLFFBQVUsRUFBUSxRQUM5QixFQUFPLEtBQUssSUFBTSxFQUFRLElBQzFCLEVBQU8sS0FBSyxVQUFZLEVBQVEsVUFDNUIsRUFBUSxTQUVWLEVBQVEsY0FHVixlQUFjLEVBQU8sUUFBUyxFQUdsQyxHQUFPLFVBQVUsUUFBUSxRQUFRLFNBQVUsR0FDckMsRUFBUyxRQUFVLEVBQVMsT0FBTyxRQUNyQyxFQUFTLE9BQU8sUUFBUSxlQUV4QixRQUFRLEtBQ047OztDQ3RQUCxTQUFTLEVBQUUsR0FBRyxnQkFBaUIsVUFBUyxnQkFBaUIsUUFBTyxPQUFPLFFBQVEsSUFBSSxrQkFBbUIsU0FBUSxPQUFPLElBQUksVUFBVSxHQUFHLGdCQUFpQixTQUFRLFFBQVEsZ0JBQWdCLElBQUksRUFBRSxnQkFBZ0IsS0FBSyxPQUFPLFdBQVcsTUFBTyxVQUFTLEdBQVksUUFBUyxHQUFFLEdBQUcsR0FBRyxFQUFFLEdBQUcsTUFBTyxHQUFFLEdBQUcsT0FBUSxJQUFJLEdBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxHQUFFLEVBQUcsV0FBWSxPQUFPLEdBQUUsR0FBRyxLQUFLLEVBQUUsUUFBUSxFQUFFLEVBQUUsUUFBUSxHQUFHLEVBQUUsR0FBRSxFQUFHLEVBQUUsUUFBdkksR0FBSSxLQUEySSxPQUFPLEdBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLElBQUksT0FBTyxlQUFlLEVBQUUsR0FBRyxZQUFXLEVBQUcsSUFBSSxLQUFLLEVBQUUsRUFBRSxTQUFTLEdBQUcsbUJBQW9CLFNBQVEsT0FBTyxhQUFhLE9BQU8sZUFBZSxFQUFFLE9BQU8sYUFBYSxNQUFNLFdBQVcsT0FBTyxlQUFlLEVBQUUsY0FBYyxPQUFNLEtBQU0sRUFBRSxFQUFFLFNBQVMsRUFBRSxHQUFHLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxNQUFPLEVBQUUsSUFBRyxFQUFFLEdBQUcsZ0JBQWlCLElBQUcsR0FBRyxFQUFFLFdBQVcsTUFBTyxFQUFFLElBQUksR0FBRSxPQUFPLE9BQU8sS0FBTSxJQUFHLEVBQUUsRUFBRSxHQUFHLE9BQU8sZUFBZSxFQUFFLFdBQVcsWUFBVyxFQUFHLE1BQU0sSUFBSSxFQUFFLEdBQUcsZ0JBQWlCLEdBQUUsSUFBSSxHQUFJLEtBQUssR0FBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLFNBQVMsR0FBRyxNQUFPLEdBQUUsSUFBSSxLQUFLLEtBQUssR0FBSSxPQUFPLElBQUcsRUFBRSxFQUFFLFNBQVMsR0FBRyxHQUFJLEdBQUUsR0FBRyxFQUFFLFdBQVcsV0FBVyxNQUFPLEdBQUUsU0FBUyxXQUFXLE1BQU8sR0FBRyxPQUFPLEdBQUUsRUFBRSxFQUFFLElBQUksR0FBRyxHQUFHLEVBQUUsRUFBRSxTQUFTLEVBQUUsR0FBRyxNQUFPLFFBQU8sVUFBVSxlQUFlLEtBQUssRUFBRSxJQUFJLEVBQUUsRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFLE1BQU0sU0FBUyxFQUFFLEVBQUUsR0FBRyxHQUFJLEdBQUUsRUFBRSxFQUFHLGlCQUFpQixLQUFJLElBQUksRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsU0FBUSxFQUFHLEVBQUUsR0FBRyxTQUFTLFdBQVcsR0FBRSxPQUFRLFNBQVMsRUFBRSxFQUFFLEdBQUcsR0FBSSxHQUFFLEVBQUUsRUFBRyxpQkFBaUIsS0FBSSxJQUFJLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLFNBQVEsRUFBRyxFQUFFLEdBQUcsU0FBUyxXQUFXLEdBQUUsT0FBUSxTQUFTLEVBQUUsRUFBRSxHQUFHLEdBQUksR0FBRSxFQUFFLEdBQUksaUJBQWlCLEtBQUksSUFBSSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxTQUFRLEVBQUcsRUFBRSxHQUFHLFNBQVMsV0FBVyxHQUFFLE9BQVEsU0FBUyxFQUFFLEdBQUcsRUFBRSxRQUFRLFNBQVMsR0FBRyxHQUFJLEtBQUssT0FBTyxHQUFFLFNBQVMsV0FBVyxNQUFPLE1BQUssSUFBSSxTQUFTLEdBQUcsR0FBSSxHQUFFLFNBQVMsRUFBRSxHQUFHLEdBQUksR0FBRSxFQUFFLElBQUksR0FBRyxFQUFFLEVBQUUsRUFBRyxLQUFJLEVBQUUsTUFBTyxFQUFFLElBQUcsR0FBRyxrQkFBbUIsTUFBSyxDQUFDLEdBQUksSUFBRyxFQUFFLEVBQUUsbUVBQW1FLEtBQUssU0FBUyxtQkFBbUIsS0FBSyxVQUFVLE1BQU0sTUFBaUYsUUFBTyxHQUFHLE9BQWxGLEVBQUUsUUFBUSxJQUFJLFNBQVMsR0FBRyxNQUFNLGlCQUFpQixFQUFFLFdBQVcsRUFBRSxTQUE0QixRQUFRLElBQUksS0FBSyxNQUFNLEdBQUksRUFBRSxRQUFPLEdBQUcsS0FBSyxPQUFPLEVBQUUsRUFBRyxPQUFPLEdBQUUsR0FBRyxVQUFVLEVBQUUsR0FBRyxJQUFJLEVBQUUsSUFBSSxJQUFJLEtBQUssS0FBSyxFQUFFLEVBQUUsU0FBUyxFQUFFLEdBQUcsZ0JBQWlCLEtBQUksSUFBSSxLQUFLLEVBQUUsS0FBTSxLQUFJLEdBQUksTUFBSyxFQUFFLEVBQUUsRUFBRSxLQUFLLE9BQU8sSUFBSSxDQUFDLEdBQUksR0FBRSxLQUFLLEdBQUcsRUFBRyxpQkFBaUIsS0FBSSxFQUFFLElBQUcsR0FBSSxJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxJQUFJLENBQUMsR0FBSSxHQUFFLEVBQUUsRUFBRyxpQkFBaUIsR0FBRSxJQUFJLEVBQUUsRUFBRSxNQUFNLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLElBQUksRUFBRSxHQUFHLFVBQVUsRUFBRSxLQUFLLEVBQUUsS0FBSyxNQUFNLElBQUksU0FBUyxFQUFFLEVBQUUsR0FBRyxZQUFhLFNBQVMsR0FBRSxFQUFFLEdBQUcsSUFBSSxHQUFJLE1BQUssS0FBSyxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sSUFBSSxDQUFDLEdBQUksR0FBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLE1BQU0sRUFBRSxHQUFHLFVBQVUsRUFBRSxHQUFJLEdBQUUsR0FBRyxFQUFFLEdBQUcsTUFBTSxLQUFLLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxHQUFHLEVBQUUsT0FBTyxLQUFLLE1BQU8sR0FBK2YsUUFBUyxHQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsS0FBTSxJQUFJLEdBQUUsRUFBRSxFQUFFLEVBQUcsT0FBTyxHQUFFLEdBQUcsU0FBUyxHQUFHLElBQUksR0FBSSxNQUFLLEVBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxJQUFJLENBQUMsR0FBSSxHQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxLQUFLLE9BQU8sRUFBRSxLQUFLLEdBQXNCLElBQW5CLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxJQUFJLEtBQVMsRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLElBQUksQ0FBQyxHQUFJLEVBQUUsSUFBRyxLQUFLLEVBQUUsRUFBRSxJQUFJLEtBQUssQ0FBQyxJQUFJLEdBQUksR0FBRSxFQUFFLEVBQUUsRUFBRSxNQUFNLE9BQU8sSUFBSSxFQUFFLE1BQU0sV0FBWSxHQUFFLEVBQUUsT0FBTyxRQUFTLEdBQUUsR0FBRyxJQUFJLEdBQUksR0FBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLElBQUksQ0FBQyxHQUFJLEdBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUksSUFBRyxFQUFFLENBQUMsRUFBRSxNQUFPLEtBQUksR0FBSSxHQUFFLEVBQUUsRUFBRSxFQUFFLE1BQU0sT0FBTyxJQUFJLEVBQUUsTUFBTSxHQUFHLEVBQUUsTUFBTSxHQUFJLE1BQUssRUFBRSxFQUFFLE1BQU0sT0FBTyxJQUFJLEVBQUUsTUFBTSxLQUFLLEVBQUUsRUFBRSxNQUFNLElBQUssR0FBRSxNQUFNLE9BQU8sRUFBRSxNQUFNLFNBQVMsRUFBRSxNQUFNLE9BQU8sRUFBRSxNQUFNLFlBQVksQ0FBQyxHQUFJLEtBQUssS0FBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLE1BQU0sT0FBTyxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsTUFBTSxJQUFLLEdBQUUsRUFBRSxLQUFLLEdBQUcsRUFBRSxHQUFHLEtBQUssRUFBRSxNQUFNLEtBQUssUUFBUyxLQUFJLEdBQUksR0FBRSxTQUFTLGNBQWMsUUFBUyxPQUFPLEdBQUUsS0FBSyxXQUFXLEVBQUUsWUFBWSxHQUFHLEVBQUUsUUFBUyxHQUFFLEdBQUcsR0FBSSxHQUFFLEVBQUUsRUFBRSxTQUFTLGNBQWMsU0FBUyxFQUFFLE1BQU0sRUFBRSxHQUFHLEtBQU0sSUFBRyxFQUFFLENBQUMsR0FBRyxFQUFFLE1BQU8sRUFBRSxHQUFFLFdBQVcsWUFBWSxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUksR0FBRSxHQUFJLEdBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLEtBQUssS0FBSyxFQUFFLEdBQUUsR0FBSSxFQUFFLEVBQUUsS0FBSyxLQUFLLEVBQUUsR0FBRSxPQUFTLEdBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxHQUFHLEdBQUksR0FBRSxFQUFFLElBQUksRUFBRSxFQUFFLE1BQU0sRUFBRSxFQUFFLFNBQTJPLElBQWpPLEdBQUcsRUFBRSxhQUFhLFFBQVEsR0FBRyxFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsRUFBRSxJQUFJLElBQUksR0FBRyxtQkFBbUIsRUFBRSxRQUFRLEdBQUcsTUFBTSxHQUFHLHVEQUF1RCxLQUFLLFNBQVMsbUJBQW1CLEtBQUssVUFBVSxNQUFNLE9BQVUsRUFBRSxXQUFXLEVBQUUsV0FBVyxRQUFRLE1BQU0sQ0FBQyxLQUFLLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxXQUFZLEdBQUUsWUFBWSxTQUFTLGVBQWUsTUFBTSxLQUFLLEtBQUssR0FBRyxFQUFFLFdBQVcsRUFBRSxXQUFXLFlBQVksR0FBSSxPQUFPLEdBQUUsR0FBRyxTQUFTLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsVUFBVSxNQUFPLEdBQUUsRUFBRSxPQUFRLE1BQThFLFFBQVMsR0FBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEdBQUksR0FBRSxFQUFFLEdBQUcsRUFBRSxHQUFJLElBQUcsRUFBRSxXQUFXLEVBQUUsV0FBVyxRQUFRLEVBQUUsRUFBRSxPQUFPLENBQUMsR0FBSSxHQUFFLFNBQVMsZUFBZSxHQUFHLEVBQUUsRUFBRSxVQUFXLEdBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxFQUFFLElBQUksRUFBRSxZQUFZLElB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QUFPLEtBQUssR0FBRyxPQUFPLEtBQUssRUFBRSxLQUFLLE1BQU0sV0FBVyxJQUFJLE9BQU8sS0FBSyxHQUFHLE1BQU0sSUFBSSxFQUFHLFNBQVEsT0FBTyxLQUFLLEdBQUcsTUFBTSxLQUFLLEVBQUUsU0FBUyxHQUFHLEdBQUcsZ0JBQWlCLEdBQUUsTUFBTyxJQUFHLENBQUUsSUFBSSxHQUFFLEVBQUUsRUFBRyxRQUFPLE1BQU0sRUFBRSxNQUFNLE9BQU8sRUFBRSxPQUFPLEVBQUUsRUFBRSxPQUFXLEdBQUcsS0FBSyxhQUFhLE9BQU8sTUFBTSxVQUFTLEVBQUcsS0FBSyxRQUFRLE9BQU8sS0FBSyxPQUFPLFFBQVEsR0FBRyxXQUFXLEtBQUssUUFBUSxTQUFRLEdBQUksVUFBVSxLQUFLLFFBQVEsU0FBUSxHQUFJLFdBQVcsTUFBTSxRQUFRLFFBQVEsU0FBUSxHQUFJLFlBQVksS0FBSyxRQUFRLFNBQVEsR0FBSSxPQUFPLEtBQUssUUFBUSxTQUFRLEdBQUksbUJBQW1CLEtBQUssT0FBTyxRQUFRLGdCQUFnQixZQUFZLEtBQUssUUFBUSxjQUFjLEtBQUssUUFBUSxTQUFRLEdBQUksU0FBUyxNQUFNLE9BQU8sT0FBTyxRQUFRLFlBQVksVUFBVSxLQUFLLE9BQU8sUUFBUSxFQUFFLFVBQVUsU0FBUyxHQUFHLE1BQU8sSUFBRyxJQUFJLFdBQVcsS0FBSyxPQUFPLFFBQVEsRUFBRSxVQUFVLFNBQVMsR0FBRyxNQUFPLElBQUcsSUFBSSxVQUFVLEtBQUssT0FBTyxRQUFRLEVBQUEsR0FBSyxXQUFXLEtBQUssT0FBTyxRQUFRLEVBQUEsR0FBSyxPQUFPLE1BQU0sT0FBTyxRQUFRLFFBQVEsSUFBSSxVQUFVLEdBQUcsUUFBUSxNQUFNLE9BQU8sUUFBUSxRQUFRLElBQUksVUFBVSxTQUFTLEdBQUcsTUFBTSxTQUFTLEdBQUcsRUFBRSxLQUFLLFFBQVEsS0FBSyxPQUFPLFFBQVEsR0FBRyxVQUFVLFNBQVMsR0FBRyxNQUFPLElBQUcsR0FBRyxHQUFHLElBQUksUUFBUSxLQUFLLE9BQU8sUUFBUSxHQUFHLFVBQVUsU0FBUyxHQUFHLE1BQU8sSUFBRyxHQUFHLEdBQUcsS0FBSyxZQUFZLFFBQVEsR0FBRyxLQUFLLFdBQVcsT0FBTyxTQUFRLEVBQUcsWUFBWSxPQUFNLEVBQUcsU0FBUSxHQUFJLE9BQU8sS0FBSyxFQUFFLElBQUksR0FBRyxPQUFPLE1BQU0sRUFBRSxVQUFVLEtBQUssT0FBTyxFQUFFLFdBQVcsS0FBSyxlQUFlLEdBQUcsUUFBUSxNQUFNLEVBQUUsT0FBTyxHQUFHLGlCQUFpQixPQUFPLFFBQVEsV0FBVyxLQUFLLGtCQUFrQixZQUFZLFdBQVcsR0FBSSxHQUFFLElBQUssSUFBRyxFQUFFLE1BQU0sSUFBSSxTQUFTLEtBQUssbUJBQW1CLE9BQU8saUJBQWlCLFNBQVMsS0FBSyxvQkFBb0IsS0FBSyxxQkFBcUIsS0FBSyxhQUFhLEtBQUssY0FBYyxRQUFRLEtBQUssVUFBVSxPQUFPLEtBQUssS0FBSyxzQ0FBc0MsNkJBQTZCLE9BQU8sS0FBSyxPQUFPLE1BQU0sS0FBSyxhQUFhLENBQUMsR0FBSSxHQUFFLFdBQVcsR0FBRyxtQkFBb0IsUUFBTyxJQUFJLEdBQUksSUFBRyxHQUFHLFNBQVMsTUFBTSxJQUFJLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLElBQUksQ0FBQyxHQUFJLEdBQUUsRUFBRSxHQUFHLGtCQUFtQixJQUFHLElBQUssUUFBTyxNQUFPLFFBQU8sR0FBRyxPQUFNLElBQU0sS0FBSSxLQUFLLGlCQUFpQixHQUFJLEdBQUUsU0FBUyxHQUFHLEVBQUUsMEJBQTBCLEtBQUssY0FBYyxPQUFPLGlCQUFpQixRQUFRLEtBQUssb0JBQW9CLGNBQWMsV0FBVyxFQUFFLE1BQU0sS0FBSyxTQUFTLEtBQUssbUJBQW1CLE9BQU8sb0JBQW9CLFNBQVMsS0FBSyxvQkFBb0IsS0FBSyxjQUFjLE9BQU8sb0JBQW9CLFFBQVEsS0FBSyxtQkFBbUIsS0FBSyxZQUFZLFNBQVMsS0FBSyxVQUFVLE9BQU8sMEJBQTBCLFVBQVUsYUFBYSxXQUFXLE1BQU0sU0FBUyxLQUFLLE1BQU0sWUFBWSxTQUFTLFdBQVcsR0FBSSxHQUFFLEtBQUssT0FBTyxFQUFFLEtBQUssTUFBTSxFQUFFLEtBQUssT0FBTyxFQUFFLEtBQUssT0FBTyxFQUFFLEtBQUssZUFBZSxFQUFFLEtBQUssZ0JBQWdCLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxDQUFFLFFBQU8sS0FBSyxTQUFTLEVBQUUsRUFBRSxFQUFFLElBQUksSUFBSSxTQUFTLEVBQUUsRUFBRSxFQUFFLE1BQU0sZUFBZSxXQUFXLEdBQUksR0FBRSxLQUFLLE9BQU8sRUFBRSxLQUFLLE1BQU0sRUFBRSxLQUFLLFNBQVMsRUFBRSxLQUFLLFNBQVMsRUFBRSxLQUFLLFNBQVMsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sSUFBSSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsS0FBSyxJQUFJLEVBQUUsTUFBTSxFQUFHLE9BQU8sR0FBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEdBQUcsZ0JBQWdCLFdBQVcsR0FBSSxHQUFFLEtBQUssT0FBTyxFQUFFLEtBQUssTUFBTSxFQUFFLEtBQUssYUFBYSxFQUFFLEtBQUssU0FBUyxFQUFFLEtBQUssVUFBVSxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsT0FBTyxJQUFJLEVBQUUsT0FBTyxFQUFFLE1BQU8sSUFBRyxFQUFFLE1BQU8sTUFBSyxNQUFNLGNBQWUsSUFBSSxHQUFFLEtBQUssSUFBSSxFQUFFLE9BQU8sRUFBRyxPQUFPLEdBQUUsRUFBRSxLQUFLLFVBQVUsRUFBRSxHQUFHLEdBQUcsYUFBYSxXQUFXLE9BQU8sb0JBQW1CLEVBQUcsV0FBVyxLQUFLLFlBQVksS0FBSyxlQUFlLFdBQVcsV0FBVyxPQUFPLGVBQWUsS0FBSyxVQUFVLFdBQVcsV0FBVyxPQUFPLElBQUksS0FBSyxTQUFTLElBQUksS0FBSyxLQUFLLEtBQUssU0FBUyxLQUFLLEtBQUssTUFBTSxLQUFLLGVBQWUsS0FBSyxPQUFPLEtBQUssYUFBYSxPQUFP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QUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsSUFBSSxJQUFJLFlBQVksSUFBSSxNQUFNLFNBQVMsR0FBRyxFQUFFLE9BQU8sS0FBSyxFQUFFLFdBQVcsU0FBUyxZQUFZLEVBQUUsZ0JBQWUsR0FBSSxFQUFFLGNBQWMsTUFBTyxHQUFFLGVBQWMsQ0FBRyxJQUFJLEdBQUUsR0FBRyxLQUFLLFdBQVcsT0FBTyxZQUFZLFFBQVEsV0FBVyxLQUFLLE1BQU0sa0JBQWtCLE1BQU0sU0FBUyxJQUFJLFNBQVMsR0FBRyxHQUFJLEdBQUUsS0FBSyxFQUFFLEVBQUUsVUFBVSxZQUFRLEtBQVMsVUFBVSxHQUFHLFVBQVUsTUFBTSxFQUFFLEVBQUUsVUFBVSxZQUFRLEtBQVMsVUFBVSxHQUFHLFVBQVUsTUFBTSxFQUFFLEVBQUUsVUFBVSxZQUFRLEtBQVMsVUFBVSxHQUFHLFVBQVUsTUFBTSxFQUFFLElBQUksRUFBRSxFQUFFLE1BQU0sa0JBQWtCLENBQUUsTUFBSyxPQUFPLE1BQU0sR0FBRyxFQUFFLFdBQVcsU0FBUyxHQUFHLElBQUksR0FBSSxHQUFFLEVBQUUsRUFBRSxVQUFVLE9BQU8sSUFBSSxDQUFDLEdBQUksR0FBRSxNQUFNLFVBQVUsR0FBRyxVQUFVLE1BQU0sRUFBRSxPQUFPLEtBQUssRUFBRyxtQkFBbUIsUUFBTyx3QkFBd0IsRUFBRSxFQUFFLE9BQU8sT0FBTyxzQkFBc0IsR0FBRyxPQUFPLFNBQVMsR0FBRyxNQUFPLFFBQU8seUJBQXlCLEVBQUUsR0FBRyxlQUFlLEVBQUUsUUFBUSxTQUFTLEdBQUcsR0FBSSxHQUFFLEVBQUUsQ0FBRSxHQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxJQUFLLEdBQUUsT0FBTyxlQUFlLEVBQUUsR0FBRyxNQUFNLEVBQUUsWUFBVyxFQUFHLGNBQWEsRUFBRyxVQUFTLElBQUssRUFBRSxHQUFHLElBQUksTUFBTyxPQUFNLEdBQUcsS0FBSyxJQUFJLGVBQWUsRUFBRSxVQUFVLEVBQUUsZUFBZSxJQUFJLEtBQUssVUFBVSxXQUFXLEVBQUUsT0FBTyxLQUFLLE1BQU0sT0FB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RSxJQUEwQyxRQUFTLEdBQUUsRUFBRSxHQUFHLE1BQU8sR0FBRSxLQUFLLEVBQUUsR0FBRyxRQUFTLEdBQUUsR0FBRyxHQUFJLEdBQUUsT0FBTyxPQUFPLEtBQU0sT0FBTyxVQUFTLEdBQUcsTUFBTyxHQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsS0FBa2IsUUFBUyxHQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBRSxLQUFJLEdBQUksR0FBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLEdBQUksT0FBTSxHQUFHLEtBQUssRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFHLE9BQU8sR0FBRSxRQUFTLEdBQUUsRUFBRSxHQUFHLElBQUksR0FBSSxLQUFLLEdBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRyxPQUFPLEdBQUUsUUFBUyxHQUFFLEdBQUcsSUFBSSxHQUFJLE1BQUssRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLElBQUksRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLEdBQUksT0FBTyxHQUFFLFFBQVMsR0FBRSxFQUFFLEVBQUUsSUFBNEQsUUFBUyxHQUFFLEVBQUUsR0FBRyxHQUFHLElBQUksRUFBRSxPQUFNLENBQUcsSUFBSSxHQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRyxLQUFJLElBQUksRUFBRSxPQUFPLElBQUksR0FBRyxPQUFPLEtBQUssT0FBTyxFQUFHLEtBQUksR0FBSSxHQUFFLE1BQU0sUUFBUSxHQUFHLEVBQUUsTUFBTSxRQUFRLEVBQUcsSUFBRyxHQUFHLEVBQUUsTUFBTyxHQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxTQUFTLEVBQUUsR0FBRyxNQUFPLEdBQUUsRUFBRSxFQUFFLEtBQU0sSUFBRyxZQUFhLE9BQU0sWUFBYSxNQUFLLE1BQU8sR0FBRSxZQUFZLEVBQUUsU0FBVSxJQUFHLEdBQUcsRUFBRSxPQUFNLENBQUcsSUFBSSxHQUFFLE9BQU8sS0FBSyxHQUFHLEVBQUUsT0FBTyxLQUFLLEVBQUcsT0FBTyxHQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxTQUFTLEdBQUcsTUFBTyxHQUFFLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxHQUFHLE9BQU0sR0FBSSxRQUFTLEdBQUUsRUFBRSxHQUFHLElBQUksR0FBSSxHQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sSUFBSSxHQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsTUFBTyxFQUFFLFFBQU8sRUFBRSxRQUFTLEdBQUUsR0FBRyxHQUFJLElBQUUsQ0FBRyxPQUFPLFlBQVcsSUFBSSxHQUFFLEVBQUcsRUFBRSxNQUFNLEtBQUssYUFBaXRCLFFBQVMsR0FBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLE9BQU8sZUFBZSxFQUFFLEdBQUcsTUFBTSxFQUFFLGFBQWEsRUFBRSxVQUFTLEVBQUcsY0FBYSxJQUFpekIsUUFBUyxJQUFHLEdBQUcsTUFBTSxrQkFBbUIsSUFBRyxjQUFjLEtBQUssRUFBRSxZQUE0c0IsUUFBUyxJQUFHLEdBQUcsR0FBRyxLQUFLLEdBQUcsR0FBRyxPQUFPLEVBQUUsUUFBUyxNQUFLLEdBQUcsTUFBTSxHQUFHLE9BQU8sR0FBRyxHQUFHLE9BQU8sR0FBeXBCLFFBQVMsSUFBRyxHQUFHLE1BQU8sSUFBSSxRQUFHLE9BQU8sT0FBTyxHQUFPLE9BQU8sSUFBSSxRQUFTLElBQUcsR0FBRyxHQUFJLEdBQUUsR0FBSSxJQUFHLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsU0FBUyxRQUFRLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsaUJBQWlCLEVBQUUsYUFBYyxPQUFPLEdBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVMsRUFBRyxFQUE0WixRQUFTLElBQUcsR0FBRyxHQUFHLEVBQXlQLFFBQVMsSUFBRyxFQUFFLEdBQUcsR0FBSSxFQUFFLElBQUcsRUFBRSxNQUFNLFlBQWEsS0FBSSxNQUFPLEdBQUUsRUFBRSxXQUFXLEVBQUUsaUJBQWtCLElBQUcsRUFBRSxFQUFFLE9BQU8sS0FBSyxPQUFPLE1BQU0sUUFBUSxJQUFJLEVBQUUsS0FBSyxPQUFPLGFBQWEsS0FBSyxFQUFFLFNBQVMsRUFBRSxHQUFJLElBQUcsSUFBSSxHQUFHLEdBQUcsRUFBRSxVQUFVLEVBQUUsUUFBUyxJQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFJLEdBQUUsR0FBSSxJQUFHLEVBQUUsT0FBTyx5QkFBeUIsRUFBRSxFQUFHLEtBQUksSUFBRyxJQUFLLEVBQUUsYUFBYSxDQUFDLEdBQUksR0FBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFJLEtBQUksR0FBRyxJQUFJLFVBQVUsU0FBUyxFQUFFLEVBQUUsR0FBSSxJQUFJLElBQUcsR0FBRyxHQUFHLEVBQUcsUUFBTyxlQUFlLEVBQUUsR0FBRyxZQUFXLEVBQUcsY0FBYSxFQUFHLElBQUksV0FBVyxHQUFJLEdBQUUsRUFBRSxFQUFFLEtBQUssR0FBRyxDQUFFLE9BQU8sSUFBRyxTQUFTLEVBQUUsU0FBUyxJQUFJLEVBQUUsSUFBSSxTQUFTLE1BQU0sUUFBUSxJQUFJLFFBQVMsR0FBRSxHQUFHLElBQUksR0FBSSxPQUFFLEdBQU8sRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLE9BQU8sSUFBSSxTQUFTLE1BQU0sUUFBUSxJQUFJLEVBQUUsSUFBSSxLQUFLLEdBQUcsSUFBSSxTQUFTLEdBQUcsR0FBSSxHQUFFLEVBQUUsRUFBRSxLQUFLLEdBQUcsQ0FBRSxLQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLElBQUksRUFBRSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsR0FBRyxHQUFHLEVBQUUsY0FBYyxRQUFTLElBQUcsRUFBRSxFQUFFLEdBQUcsR0FBRyxNQUFNLFFBQVEsSUFBSSxFQUFFLEdBQUcsTUFBTyxHQUFFLE9BQU8sS0FBSyxJQUFJLEVBQUUsT0FBTyxHQUFHLEVBQUUsT0FBTyxFQUFFLEVBQUUsR0FBRyxDQUFFLElBQUcsSUFBSyxNQUFLLElBQUssUUFBTyxXQUFXLE1BQU8sR0FBRSxHQUFHLEVBQUUsQ0FBRSxJQUFJLEdBQUUsRUFBRSxNQUFPLE9BQU8sR0FBRSxRQUFRLEdBQUcsRUFBRSxRQUFRLEVBQUUsR0FBRyxHQUFHLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxJQUFJLFNBQVMsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLFFBQVMsSUFBRyxFQUFFLEdBQUcsR0FBRyxNQUFNLFFBQVEsSUFBSSxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLEdBQUksR0FBRSxFQUFFLE1BQU8sR0FBRSxRQUFRLEdBQUcsRUFBRSxTQUFTLEVBQUUsRUFBRSxXQUFZLEdBQUUsR0FBRyxHQUFHLEVBQUUsSUFBSSxXQUErTSxRQUFTLElBQUcsRUFBRSxHQUFHLElBQUksRUFBRSxNQUFPLEVBQUUsS0FBSSxHQUFJLEdBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxRQUFRLFFBQVEsR0FBRyxPQUFPLEtBQUssR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sSUFBSSxZQUFZLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLElBQUksR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLEdBQUcsRUFBRSxHQUFHLEdBQUcsRUFBRSxFQUFFLEdBQUksT0FBTyxHQUFFLFFBQVMsSUFBRyxFQUFFLEVBQUUsR0FBRyxNQUFPLEdBQUUsV0FBVyxHQUFJLEdBQUUsa0JBQW1CLEdBQUUsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEVBQUUsa0JBQW1CLEdBQUUsRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFFLE9BQU8sR0FBRSxHQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsRUFBRSxXQUFXLE1BQU8sSUFBRyxrQkFBbUIsR0FBRSxFQUFFLEtBQUssS0FBSyxNQUFNLEVBQUUsa0JBQW1CLEdBQUUsRUFBRSxLQUFLLEtBQUssTUFBTSxJQUFJLEVBQUUsRUFBRSxRQUFTLElBQUcsRUFBRSxHQUFHLEdBQUksR0FBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLEdBQUcsTUFBTSxRQUFRLEdBQUcsR0FBRyxHQUFHLENBQUUsT0FBTyxHQUFFLFNBQVMsR0FBRyxJQUFJLEdBQUksTUFBSyxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sS0FBSyxJQUFJLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsR0FBSSxPQUFPLElBQUcsR0FBRyxFQUFFLFFBQVMsSUFBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEdBQUksR0FBRSxPQUFPLE9BQU8sR0FBRyxLQUFNLE9BQU8sR0FBRSxFQUFFLEVBQUUsR0FBRyxFQUFza0IsUUFBUyxJQUFHLEVBQUUsRUFBRSxHQUEwdEIsUUFBUyxHQUFFLEdBQUcsR0FBSSxHQUFFLEdBQUcsSUFBSSxFQUFHLEdBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUF4d0IsR0FBRyxrQkFBbUIsS0FBSSxFQUFFLEVBQUUsU0FBUyxTQUFTLEVBQUUsR0FBRyxHQUFJLEdBQUUsRUFBRSxLQUFNLElBQUcsRUFBRSxDQUFDLEdBQUksR0FBRSxFQUFFLElBQUssSUFBRyxNQUFNLFFBQVEsR0FBRyxJQUFJLEVBQUUsRUFBRSxPQUFPLEtBQUssaUJBQWlCLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxLQUFLLEtBQUssV0FBWSxJQUFHLEVBQUUsR0FBRyxJQUFJLEdBQUksS0FBSyxHQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxJQUFJLEVBQUUsR0FBRyxHQUFHLEtBQUssRUFBRyxHQUFFLE1BQU0sSUFBSSxHQUFHLFNBQVMsRUFBRSxHQUFHLEdBQUksR0FBRSxFQUFFLE1BQU8sSUFBRyxFQUFFLENBQUMsR0FBSSxHQUFFLEVBQUUsU0FBVSxJQUFHLE1BQU0sUUFBUSxHQUFHLElBQUksR0FBSSxHQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sSUFBSSxFQUFFLEVBQUUsS0FBSyxLQUFLLEVBQUUsUUFBUyxJQUFHLEVBQUUsR0FBRyxJQUFJLEdBQUksS0FBSyxHQUFFLENBQUMsR0FBSSxHQUFFLEVBQUUsRUFBRyxHQUFFLEdBQUcsRUFBRSxHQUFHLEdBQUcsS0FBSyxHQUFHLElBQUksS0FBSyxNQUFNLEdBQUcsU0FBUyxHQUFHLEdBQUksR0FBRSxFQUFFLFVBQVcsSUFBRyxFQUFFLElBQUksR0FBSSxLQUFLLEdBQUUsQ0FBQyxHQUFJLEdBQUUsRUFBRSxFQUFHLG1CQUFtQixLQUFJLEVBQUUsSUFBSSxLQUFLLEVBQUUsT0FBTyxNQUFNLElBQUksRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxFQUFFLFFBQVEsSUFBSSxFQUFFLFFBQVEsSUFBSSxHQUFJLEdBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxPQUFPLEVBQUUsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEVBQUUsT0FBTyxHQUFHLEVBQUcsSUFBSSxHQUFFLElBQUssS0FBSSxJQUFLLEdBQUUsRUFBRSxFQUFHLEtBQUksSUFBSyxHQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBdUQsT0FBTyxHQUFFLFFBQVMsSUFBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEdBQUcsZ0JBQWlCLEdBQUUsQ0FBQyxHQUFJLEdBQUUsRUFBRSxFQUFHLElBQUcsRUFBRSxFQUFFLEdBQUcsTUFBTyxHQUFFLEVBQUcsSUFBSSxHQUFFLEVBQUUsRUFBRyxJQUFHLEVBQUUsRUFBRSxHQUFHLE1BQU8sR0FBRSxFQUFHLElBQUksR0FBRSxFQUFFLEVBQUcsT0FBTyxHQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksUUFBUyxJQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBSSxHQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxRQUFRLEVBQUUsS0FBTSxJQUFHLEdBQUcsRUFBRSxHQUFHLElBQUksRUFBRSxFQUFFLFdBQVcsR0FBRSxNQUFRLElBQUcsS0FBSyxHQUFHLElBQUksRUFBRSxHQUFHLENBQUMsR0FBSSxHQUFFLEdBQUcsT0FBTyxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsS0FBSyxHQUFFLEdBQUksT0FBRyxLQUFTLEVBQUUsQ0FBQyxFQUFFLFNBQVMsRUFBRSxFQUFFLEdBQUcsR0FBSSxFQUFFLEVBQUUsV0FBUixDQUEwQixHQUFJLEdBQUUsRUFBRSxPQUFRLE9BQUcsSUFBRyxFQUFFLFNBQVMsZUFBVyxLQUFTLEVBQUUsU0FBUyxVQUFVLFFBQUksS0FBUyxFQUFFLE9BQU8sR0FBVSxFQUFFLE9BQU8sR0FBUyxrQkFBbUIsSUFBRyxhQUFhLEdBQUcsRUFBRSxNQUFNLEVBQUUsS0FBSyxHQUFHLElBQUcsRUFBRSxFQUFFLEVBQUcsSUFBSSxHQUFFLEVBQUcsS0FBRyxHQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsTUFBTyxHQUFFLFFBQVMsSUFBRyxHQUFHLEdBQUksR0FBRSxHQUFHLEVBQUUsV0FBVyxNQUFNLHFCQUFzQixPQUFPLEdBQUUsRUFBRSxHQUFHLEdBQUcsUUFBUyxJQUFHLEVBQUUsR0FBRyxNQUFPLElBQUcsS0FBSyxHQUFHLEdBQUcsUUFBUyxJQUFHLEVBQUUsR0FBRyxJQUFJLE1BQU0sUUFBUSxHQUFHLE1BQU8sSUFBRyxFQUFFLEdBQUcsR0FBRyxDQUFFLEtBQUksR0FBSSxHQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLElBQUksR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLE1BQU8sRUFBRSxRQUFPLEVBQUUsUUFBUyxJQUFHLEVBQUUsRUFBRSxHQUFHLElBQUssS0FBSSxHQUFHLEVBQUUsSUFBSSxHQUFJLEdBQUUsRUFBRSxFQUFFLEVBQUUsU0FBUyxDQUFDLEdBQUksR0FBRSxFQUFFLFNBQVMsYUFBYyxJQUFHLEVBQUUsSUFBSSxHQUFJLEdBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxJQUFJLElBQUksSUFBRyxJQUFLLEVBQUUsR0FBRyxLQUFLLEVBQUUsRUFBRSxFQUFFLEdBQUcsT0FBTyxNQUFNLEdBQUcsR0FBRyxFQUFFLEVBQUUsdUJBQXVCLEdBQUcsRUFBRSxFQUFFLEdBQUcsUUFBUSxNQUFNLFFBQVMsSUFBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBSSxFQUFFLE1BQUssRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxLQUFLLE1BQU0sRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxNQUFNLFNBQVMsR0FBRyxNQUFPLElBQUcsRUFBRSxFQUFFLEVBQUUsc0JBQXNCLEVBQUUsVUFBUyxHQUFJLE1BQU0sR0FBRyxHQUFHLEVBQUUsRUFBRSxHQUFHLE1BQU8sR0FBRSxRQUFTLElBQUcsRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLGFBQWEsSUFBSSxNQUFPLEdBQUUsYUFBYSxLQUFLLEtBQUssRUFBRSxFQUFFLEdBQUcsTUFBTSxHQUFHLElBQUksR0FBRyxHQUFHLEVBQUUsS0FBSyx1QkFBdUIsR0FBRyxFQUFFLEVBQUUsR0FBRyxRQUFTLElBQUcsRUFBRSxFQUFFLEdBQUcsSUFBSSxJQUFJLEdBQUcsbUJBQW9CLFNBQVEsS0FBTSxFQUFFLFNBQVEsTUFBTSxHQUE0QixRQUFTLE1BQUssSUFBRyxDQUFHLElBQUksR0FBRSxHQUFHLE1BQU0sRUFBRyxJQUFHLE9BQU8sQ0FBRSxLQUFJLEdBQUksR0FBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLElBQUksRUFBRSxLQUFpaUIsUUFBUyxJQUFHLEVBQUUsR0FBRyxHQUFJLEVBQUUsSUFBRyxHQUFHLEtBQUssV0FBVyxHQUFHLEVBQUUsSUFBSSxFQUFFLEtBQUssR0FBRyxNQUFNLEdBQUcsR0FBRyxFQUFFLEVBQUUsZ0JBQWlCLElBQUcsRUFBRSxLQUFLLEtBQUssSUFBRyxFQUFHLE9BQU8sR0FBRyxtQkFBb0IsU0FBUSxNQUFPLElBQUksU0FBUSxTQUFTLEdBQUcsRUFBRSxJQUFrQixRQUFTLElBQUcsSUFBSSxRQUFTLEdBQUUsRUFBRSxHQUFHLEdBQUksR0FBRSxFQUFNLEVBQUUsTUFBTSxRQUFRLEVBQUcsT0FBSSxJQUFJLEVBQUUsSUFBSSxPQUFPLFNBQVMsSUFBSSxZQUFhLEtBQS9DLENBQXlELEdBQUcsRUFBRSxPQUFPLENBQUMsR0FBSSxHQUFFLEVBQUUsT0FBTyxJQUFJLEVBQUcsSUFBRyxFQUFFLElBQUksR0FBRyxNQUFPLEdBQUUsSUFBSSxHQUFHLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxPQUFPLEtBQUssRUFBRSxFQUFFLEdBQUcsT0FBUSxLQUFJLEVBQUUsT0FBTyxLQUFLLEdBQUcsRUFBRSxFQUFFLE9BQU8sS0FBSyxFQUFFLEVBQUUsRUFBRSxJQUFJLEtBQUksRUFBRSxJQUFJLEdBQUcsUUFBMEwsUUFBUyxJQUFHLEVBQUUsR0FBRyxRQUFTLEtBQUksR0FBSSxHQUFFLFVBQVUsRUFBRSxFQUFFLEdBQUksS0FBSSxNQUFNLFFBQVEsR0FBRyxNQUFPLElBQUcsRUFBRSxLQUFLLFVBQVUsRUFBRSxlQUFnQixLQUFJLEdBQUksR0FBRSxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLElBQUksR0FBRyxFQUFFLEdBQUcsS0FBSyxFQUFFLEVBQUUsZ0JBQWdCLE1BQU8sR0FBRSxJQUFJLEVBQUUsRUFBRSxRQUFTLElBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBSSxHQUFFLEVBQUUsRUFBRSxDQUFFLEtBQUksSUFBSyxHQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLFFBQVEsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFLFVBQVUsRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsU0FBUyxJQUFJLElBQUksRUFBRSxJQUFJLEVBQUUsRUFBRSxHQUFHLEdBQUksS0FBSSxJQUFLLEdBQUUsRUFBRSxFQUFFLEtBQUssR0FBRyxFQUFFLEdBQUcsSUFBSSxLQUFLLEVBQUUsR0FBRyxFQUFFLFNBQVMsUUFBUyxJQUFHLEVBQUUsRUFBRSxHQUF1RSxRQUFTLEtBQUksRUFBRSxNQUFNLEtBQUssV0FBVyxFQUFFLEVBQUUsSUFBSSxHQUFqSCxHQUFJLEVBQUUsYUFBYSxNQUFLLEVBQUUsRUFBRSxLQUFLLE9BQU8sRUFBRSxLQUFLLFNBQVUsSUFBSSxHQUFFLEVBQUUsRUFBbUQsR0FBRSxHQUFHLEVBQUUsSUFBSSxJQUFJLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxTQUFTLEVBQUUsR0FBRyxJQUFJLEtBQUssR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsUUFBTyxFQUFHLEVBQUUsR0FBRyxFQUFFLFFBQVMsSUFBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsRUFBRSxHQUFHLE1BQU8sR0FBRSxHQUFHLEVBQUUsR0FBRyxTQUFVLEdBQUUsSUFBRyxDQUFHLElBQUcsRUFBRSxFQUFFLEdBQUcsTUFBTyxHQUFFLEdBQUcsRUFBRSxHQUFHLFNBQVUsR0FBRSxJQUFHLEVBQUcsT0FBTSxFQUFHLFFBQVMsSUFBRyxHQUFHLE1BQU8sR0FBRSxJQUFJLEdBQUcsSUFBSSxNQUFNLFFBQVEsR0FBRyxRQUFTLEdBQUUsRUFBRSxHQUFHLEdBQWEsR0FBRSxFQUFFLEVBQUUsRUFBZixJQUFpQixLQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxJQUFJLEVBQUUsRUFBRSxFQUFFLEtBQUssaUJBQWtCLEtBQUksRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsR0FBRyxNQUFNLFFBQVEsR0FBRyxFQUFFLE9BQU8sSUFBSSxJQUFJLEVBQUUsRUFBRSxHQUFHLEdBQUcsSUFBSSxJQUFJLElBQUksS0FBSyxHQUFHLEtBQUssRUFBRSxHQUFHLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxNQUFNLEVBQUUsU0FBUyxFQUFFLEtBQUssTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxFQUFFLEtBQUssR0FBRyxLQUFLLEdBQUcsRUFBRSxLQUFLLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxFQUFFLFdBQVcsRUFBRSxFQUFFLE1BQU0sRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsSUFBSSxVQUFVLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxLQUFLLElBQUssT0FBTyxJQUFHLE9BQUcsR0FBTyxRQUFTLElBQUcsR0FBRyxNQUFPLEdBQUUsSUFBSSxFQUFFLEVBQUUsUUFBTyxJQUFLLEVBQUUsVUFBVSxRQUFTLElBQUcsRUFBRSxHQUFHLEdBQUcsRUFBRSxDQUFDLElBQUksR0FBSSxHQUFFLE9BQU8sT0FBTyxNQUFNLEVBQUUsR0FBRyxRQUFRLFFBQVEsR0FBRyxPQUFPLEtBQUssR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sSUFBSSxDQUFDLEdBQUksR0FBRSxFQUFFLEVBQUcsSUFBRyxXQUFXLEVBQUUsQ0FBQyxJQUFJLEdBQUksR0FBRSxFQUFFLEdBQUcsS0FBSyxFQUFFLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxXQUFXLEVBQUUsRUFBRSxVQUFVLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxVQUFVLEVBQUcsT0FBTSxFQUFFLEVBQUUsUUFBUSxJQUFJLEdBQUcsV0FBWSxHQUFFLEdBQUcsQ0FBQyxHQUFJLEdBQUUsRUFBRSxHQUFHLE9BQVEsR0FBRSxHQUFHLGtCQUFtQixHQUFFLEVBQUUsS0FBSyxHQUFHLElBQUksTUFBTyxJQUFHLFFBQVMsSUFBRyxFQUFFLEdBQUcsSUFBSSxJQUFJLEVBQUUsT0FBTyxRQUFTLEtBQUksR0FBSSxNQUFLLEVBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsSUFBSSxDQUFDLEdBQUksR0FBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLElBQUssSUFBRyxHQUFHLEVBQUUsT0FBTyxFQUFFLE1BQU0sWUFBYSxHQUFFLE1BQU0sS0FBSyxFQUFFLFVBQVUsR0FBRyxFQUFFLFlBQVksSUFBSSxHQUFHLE1BQU0sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLGFBQWEsS0FBSyxPQUFPLENBQUMsR0FBSSxHQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsS0FBSyxFQUFFLE1BQU8sY0FBYSxFQUFFLElBQUksRUFBRSxLQUFLLE1BQU0sRUFBRSxFQUFFLGNBQWMsRUFBRSxLQUFLLElBQUksSUFBSSxHQUFJLEtBQUssR0FBRSxFQUFFLEdBQUcsTUFBTSxXQUFZLEdBQUUsRUFBRyxPQUFPLEdBQUUsUUFBUyxJQUFHLEdBQUcsTUFBTyxHQUFFLFlBQVksRUFBRSxjQUFjLE1BQU0sRUFBRSxLQUFLLFFBQVMsSUFBRyxFQUFFLEVBQUUsR0FBRyxHQUFJLEdBQUUsRUFBRSxPQUFPLEtBQUssR0FBRyxPQUFPLEVBQUUsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLEVBQUUsR0FBRyxFQUFFLElBQUssSUFBRyxFQUFFLENBQUMsR0FBRyxFQUFFLFlBQVksTUFBTyxHQUFFLFdBQVksSUFBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLElBQUksRUFBRSxPQUFPLElBQUksRUFBRSxXQUFXLE1BQU8sRUFBRSxLQUFJLEdBQUksS0FBSyxNQUFLLEVBQUUsRUFBRSxJQUFJLE1BQU0sRUFBRSxLQUFLLEVBQUUsR0FBRyxHQUFHLEVBQUUsRUFBRSxFQUFFLFNBQVUsS0FBSyxLQUFJLEdBQUksS0FBSyxHQUFFLElBQUssS0FBSSxFQUFFLEdBQUcsR0FBRyxFQUFFLEdBQUksT0FBTyxJQUFHLE9BQU8sYUFBYSxLQUFLLEVBQUUsWUFBWSxHQUFHLEVBQUUsRUFBRSxVQUFVLEdBQUcsRUFBRSxFQUFFLE9BQU8sR0FBRyxFQUFFLEVBQUUsYUFBYSxHQUFHLEVBQUUsUUFBUyxJQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUksR0FBRSxXQUFXLEdBQUksR0FBRSxVQUFVLE9BQU8sRUFBRSxNQUFNLEtBQUssV0FBVyxLQUFNLFFBQU8sRUFBRSxHQUFHLGdCQUFpQixLQUFJLE1BQU0sUUFBUSxJQUFJLEdBQUcsR0FBRyxNQUFNLElBQUksRUFBRSxRQUFRLElBQUksRUFBRSxRQUFRLEVBQUUsR0FBRyxlQUFXLEdBQU8sRUFBRyxPQUFPLEdBQUUsT0FBTyxPQUFPLGVBQWUsRUFBRSxHQUFHLElBQUksRUFBRSxZQUFXLEVBQUcsY0FBYSxJQUFLLEVBQUUsUUFBUyxJQUFHLEVBQUUsR0FBRyxNQUFPLFlBQVcsTUFBTyxHQUFFLElBQUksUUFBUyxJQUFHLEVBQUUsR0FBRyxHQUFJLEdBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBRSxJQUFHLE1BQU0sUUFBUSxJQUFJLGdCQUFpQixHQUFFLElBQUksRUFBRSxHQUFJLE9BQU0sRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsT0FBUSxJQUFHLGdCQUFpQixHQUFFLElBQUksRUFBRSxHQUFJLE9BQU0sR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLE9BQVEsSUFBRyxFQUFFLEdBQUcsR0FBRyxJQUFJLEVBQUUsT0FBTyxVQUFVLENBQUMsSUFBSyxLQUFJLEdBQUksR0FBRSxFQUFFLE9BQU8sWUFBWSxFQUFFLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLEVBQUUsV0FBWSxLQUFJLEVBQUUsT0FBTyxLQUFLLEdBQUcsRUFBRSxHQUFJLE9BQU0sRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFHLE9BQU8sR0FBRSxLQUFLLE1BQU0sRUFBRSxVQUFTLEVBQUcsRUFBRSxRQUFTLElBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFJLEdBQUUsRUFBRSxLQUFLLGFBQWEsRUFBRyxJQUFHLEVBQUUsTUFBTSxJQUFJLEVBQUUsRUFBRSxLQUFLLEdBQUcsSUFBSSxFQUFFLEVBQUUsSUFBSSxHQUFHLEVBQUUsS0FBSyxPQUFPLElBQUksQ0FBRSxJQUFJLEdBQUUsR0FBRyxFQUFFLElBQUssT0FBTyxHQUFFLEtBQUssZUFBZSxZQUFZLEtBQUssR0FBRyxHQUFHLEVBQUUsUUFBUyxJQUFHLEdBQUcsTUFBTyxJQUFHLEtBQUssU0FBUyxVQUFVLElBQUksRUFBRSxRQUFTLElBQUcsRUFBRSxHQUFHLE1BQU8sT0FBTSxRQUFRLElBQUksSUFBSSxFQUFFLFFBQVEsR0FBRyxJQUFJLEVBQUUsUUFBUyxJQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFJLEdBQUUsRUFBRSxTQUFTLElBQUksQ0FBRSxPQUFPLElBQUcsSUFBSSxFQUFFLFNBQVMsR0FBRyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxLQUFLLE1BQUUsR0FBTyxRQUFTLElBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEdBQUcsR0FBSyxFQUFFLEdBQUcsQ0FBQyxHQUFJLEVBQUUsT0FBTSxRQUFRLEtBQUssRUFBRSxFQUFFLEdBQWdSLEtBQUksR0FBSSxLQUFLLElBQW5SLFNBQVMsR0FBRyxHQUFHLFVBQVUsR0FBRyxVQUFVLEdBQUcsRUFBRSxHQUFHLEVBQUUsTUFBTSxDQUFDLEdBQUksR0FBRSxFQUFFLE9BQU8sRUFBRSxNQUFNLElBQUssR0FBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLEVBQUUsR0FBRyxFQUFFLFdBQVcsRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFFLFVBQVUsR0FBSSxHQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRyxLQUFLLElBQUcsSUFBSyxLQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsS0FBSyxFQUFFLEtBQUssRUFBRSxRQUFRLFVBQVUsR0FBRyxTQUFTLEdBQUcsRUFBRSxHQUFHLE1BQXVCLEdBQVEsTUFBTyxHQUFFLFFBQVMsSUFBRyxFQUFFLEdBQUcsR0FBSSxHQUFFLEtBQUssZUFBZSxLQUFLLGlCQUFpQixFQUFFLEVBQUUsRUFBRyxPQUFPLEtBQUksRUFBRSxHQUFHLEdBQUcsRUFBRSxFQUFFLEdBQUcsS0FBSyxTQUFTLGdCQUFnQixHQUFHLEtBQUssS0FBSyxhQUFhLEtBQUssTUFBTSxhQUFhLEdBQUUsR0FBSSxHQUFHLFFBQVMsSUFBRyxFQUFFLEVBQUUsR0FBRyxNQUFPLElBQUcsRUFBRSxXQUFXLEdBQUcsRUFBRSxJQUFJLEVBQUUsS0FBSSxHQUFJLEVBQUUsUUFBUyxJQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsTUFBTSxRQUFRLEdBQUcsSUFBSSxHQUFJLEdBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxJQUFJLEVBQUUsSUFBSSxnQkFBaUIsR0FBRSxJQUFJLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLE9BQVEsSUFBRyxFQUFFLEVBQUUsR0FBRyxRQUFTLElBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxVQUFTLEVBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxPQUFPLEVBQUUsUUFBUyxJQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUssRUFBRSxHQUFHLENBQUMsR0FBSSxHQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsS0FBSyxFQUFFLE1BQU8sS0FBSSxHQUFJLEtBQUssR0FBRSxDQUFDLEdBQUksR0FBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUcsR0FBRSxHQUFHLEtBQUssT0FBTyxFQUFFLEdBQUcsR0FBUSxNQUFPLEdBQUUsUUFBUyxJQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxJQUFJLFNBQVMsRUFBRyxLQUFJLEdBQUksR0FBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLElBQUksQ0FBQyxHQUFJLEdBQUUsRUFBRSxFQUFHLE9BQU0sUUFBUSxHQUFHLEdBQUcsRUFBRSxFQUFFLEdBQUcsSUFBSSxFQUFFLFFBQVEsRUFBRSxHQUFHLE9BQU0sR0FBSSxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksTUFBTyxLQUFJLEVBQUUsS0FBSyxHQUFHLEVBQUUsUUFBUyxJQUFHLEVBQUUsR0FBRyxJQUFJLEdBQUksR0FBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLEdBQUcsRUFBRSxDQUFDLEdBQUksR0FBRSxFQUFFLEVBQUcsaUJBQWlCLElBQUcsSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsSUFBSSxNQUFPLEdBQUUsUUFBUyxJQUFHLEVBQUUsR0FBRyxNQUFNLGdCQUFpQixHQUFFLEVBQUUsRUFBRSxFQUFFLFFBQVMsSUFBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLFFBQVMsSUFBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBSSxHQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsT0FBUSxHQUFFLEVBQUUsU0FBUyxFQUFFLE9BQU8sT0FBTyxJQUFJLFVBQVUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLFVBQVcsSUFBSSxHQUFFLEVBQUUsRUFBRSxXQUFXLEdBQUcsQ0FBRSxNQUFLLEtBQUssRUFBRSxLQUFLLE1BQU0sRUFBRSxLQUFLLFNBQVMsRUFBRSxLQUFLLE9BQU8sRUFBRSxLQUFLLFVBQVUsRUFBRSxJQUFJLEVBQUUsS0FBSyxXQUFXLEdBQUcsRUFBRSxPQUFPLEdBQUcsS0FBSyxNQUFNLFdBQVcsTUFBTyxHQUFFLFFBQVEsR0FBRyxFQUFFLFlBQVksRUFBRSxPQUFPLEdBQUcsRUFBRSxJQUFJLEVBQUUsUUFBUSxPQUFPLGVBQWUsS0FBSyxlQUFlLFlBQVcsRUFBRyxJQUFJLFdBQVcsTUFBTyxJQUFHLEVBQUUsWUFBWSxLQUFLLFlBQVksSUFBSSxLQUFLLFNBQVMsRUFBRSxLQUFLLE9BQU8sS0FBSyxRQUFRLEtBQUssYUFBYSxHQUFHLEVBQUUsWUFBWSxLQUFLLFNBQVMsRUFBRSxTQUFTLEtBQUssR0FBRyxTQUFTLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBSSxHQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUcsT0FBTyxLQUFJLE1BQU0sUUFBUSxLQUFLLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxVQUFVLEdBQUcsR0FBRyxLQUFLLEdBQUcsU0FBUyxFQUFFLEVBQUUsRUFBRSxHQUFHLE1BQU8sSUFBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsSUFBSSxRQUFTLElBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEdBQUksR0FBRSxHQUFHLEVBQUcsT0FBTyxHQUFFLFVBQVUsRUFBRSxFQUFFLFVBQVUsRUFBRSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsVUFBVSxLQUFLLEVBQUUsTUFBTSxFQUFFLFFBQVMsSUFBRyxFQUFFLEdBQUcsSUFBSSxHQUFJLEtBQUssR0FBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEdBQXlrRCxRQUFTLElBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLElBQUksRUFBRSxHQUFHLENBQUMsR0FBSSxHQUFFLEVBQUUsU0FBUyxLQUFNLElBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRSxPQUFPLElBQUksa0JBQW1CLEdBQUUsQ0FBQyxHQUFJLEVBQUUsSUFBRyxFQUFFLEVBQUUsVUFBTSxNQUFVLEVBQUUsU0FBUyxFQUFFLEdBQUcsR0FBRyxFQUFFLEVBQUUsUUFBUSxFQUFFLEVBQUUsV0FBVyxNQUFPLEdBQUUsU0FBVSxJQUFHLEVBQUUsRUFBRSxVQUFVLE1BQU8sR0FBRSxRQUFTLElBQUksR0FBRSxFQUE4RCxJQUEzRCxHQUFHLEVBQUUsRUFBRSxVQUFVLElBQUksRUFBRSxPQUFPLFFBQVEsSUFBSSxFQUFFLE9BQU8sS0FBSyxHQUFNLEVBQUUsRUFBRSxVQUFVLEVBQUUsRUFBRSxhQUFhLE1BQU8sR0FBRSxXQUFZLElBQUcsSUFBSSxFQUFFLEVBQUUsUUFBUSxDQUFDLEdBQUksR0FBRSxFQUFFLFFBQVEsR0FBRyxHQUFFLEVBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSyxHQUFFLElBQUksaUJBQWlCLFdBQVcsTUFBTyxHQUFFLEVBQUUsSUFBSyxJQUFJLEdBQUUsU0FBUyxHQUFHLElBQUksR0FBSSxHQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLElBQUksRUFBRSxHQUFHLGNBQWUsS0FBSSxFQUFFLE9BQU8sRUFBRSxPQUFPLElBQUksYUFBYSxHQUFHLEVBQUUsTUFBTSxPQUFPLElBQUksYUFBYSxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsU0FBUyxHQUFHLEVBQUUsU0FBUyxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsT0FBTyxFQUFFLEdBQUUsS0FBTSxFQUFFLEVBQUUsU0FBUyxHQUFHLEVBQUUsRUFBRSxhQUFhLEVBQUUsT0FBTSxFQUFHLEdBQUUsTUFBTyxFQUFFLEVBQUUsRUFBRSxFQUFHLE9BQU8sR0FBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsRUFBRSxhQUFhLEVBQUUsVUFBVSxLQUFLLEVBQUUsR0FBRyxFQUFFLEVBQUUsU0FBUyxFQUFFLFVBQVUsR0FBRyxFQUFFLE1BQU0sSUFBSSxFQUFFLEVBQUUsV0FBVyxFQUFFLFlBQVksR0FBRyxFQUFFLFFBQVEsR0FBRyxJQUFJLEVBQUUsTUFBTSxFQUFFLFNBQVEsRUFBRyxFQUFFLFdBQVcsV0FBVyxFQUFFLEtBQUssRUFBRSxFQUFFLFdBQVcsRUFBRSxFQUFFLFNBQVMsRUFBRSxTQUFRLEVBQUcsR0FBRSxLQUFNLEVBQUUsT0FBTyxNQUFNLEVBQUUsRUFBRSxXQUFXLEVBQUUsV0FBVyxXQUFXLEVBQUUsS0FBSyxFQUFFLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxZQUFZLEdBQUUsRUFBRyxFQUFFLFFBQVEsRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLEVBQUUsSUFBSSxNQUFPLFVBQVMsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEdBQUksR0FBRSxJQUFLLE9BQU8sR0FBRSxhQUFhLEVBQUUsRUFBRSxXQUFXLEtBQUssRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLElBQUksR0FBRyxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRyxHQUFFLE1BQU0sR0FBRyxHQUFHLEVBQUUsRUFBRSxRQUFRLFNBQVMsRUFBRSxHQUFHLEdBQUksR0FBRSxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sUUFBUSxFQUFFLEVBQUUsT0FBTyxFQUFFLE1BQU0sT0FBTyxTQUFTLEVBQUUsUUFBUSxFQUFFLFdBQVcsR0FBRyxFQUFFLE1BQU0sS0FBTSxJQUFJLEdBQUUsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsTUFBTSxRQUFTLEdBQUUsSUFBSSxNQUFNLFFBQVEsSUFBSSxJQUFJLEVBQUUsUUFBUSxHQUFHLElBQUksS0FBSyxFQUFFLElBQUksR0FBRyxPQUFPLElBQUksRUFBRSxHQUFHLEdBQUcsRUFBRSxRQUFRLEVBQUcsSUFBSSxHQUFFLFNBQVMsRUFBRSxFQUFFLEdBQUcsR0FBSSxHQUFFLEVBQUUsUUFBUSxLQUFNLEtBQUksRUFBRSxHQUFHLENBQUMsR0FBSSxNQUFLLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxLQUFNLElBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxJQUFJLEdBQUksS0FBSyxHQUFFLENBQUMsR0FBSSxHQUFFLEVBQUUsRUFBRyxJQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUUsSUFBSyxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUUsR0FBSSxNQUFPLEtBQUksRUFBRSxFQUFHLElBQUcsRUFBRSxFQUFFLFFBQVEsWUFBWSxNQUFPLFVBQVMsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEdBQUksR0FBRSxFQUFFLFFBQVEsS0FBSyxFQUFFLEVBQUUsS0FBTSxJQUFHLEVBQUUsR0FBRyxJQUFJLEdBQUksS0FBSyxHQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsRUFBRSxHQUFHLE9BQVEsR0FBRSxFQUFFLFFBQVEsR0FBRyxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsUUFBUSxHQUFHLEVBQUUsRUFBRSxNQUFPLElBQUksR0FBRSxHQUFJLElBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxPQUFPLEtBQUssS0FBSyxFQUFFLEdBQUcsRUFBRyxJQUFHLFlBQWEsSUFBRyxNQUFPLElBQUcsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFHLElBQUcsTUFBTSxRQUFRLEdBQUcsQ0FBQyxJQUFJLEdBQUksR0FBRSxHQUFHLE9BQU8sRUFBRSxHQUFJLE9BQU0sRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxJQUFJLEVBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsT0FBTyxFQUFHLE9BQU8sS0FBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUcsSUFBSSxHQUFFLEVBQUUsRUFBRyxJQUFHLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxFQUFFLFFBQVEsVUFBVSxDQUFDLEdBQUksR0FBRSxFQUFFLElBQUssTUFBSyxJQUFJLEVBQUUsS0FBSyxJQUFJLFNBQVMsR0FBRyxJQUFJLEdBQUksR0FBRSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFLEdBQUcsT0FBTyxJQUFJLENBQUMsR0FBSSxHQUFFLEdBQUcsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRyxLQUFJLEdBQUcsR0FBRyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsS0FBSyxFQUFHLElBQUksR0FBRSxFQUFFLFFBQVEsTUFBTSxDQUFFLE9BQU8sSUFBSSxJQUFHLGlCQUFpQixFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxNQUFFLE9BQU8sT0FBTyxHQUFPLEdBQUcsS0FBSyxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLFNBQVMsR0FBRyxLQUFLLFFBQVMsSUFBRyxFQUFFLEdBQUcsR0FBSSxHQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFJLE9BQU8sR0FBRSxTQUFRLEVBQUcsRUFBZ0IsUUFBUyxJQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLE9BQU8sTUFBTSxRQUFRLElBQUksRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsTUFBRSxJQUFRLEVBQUUsS0FBSyxFQUFFLElBQUksU0FBUyxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLFFBQVEsTUFBTyxLQUE2QixJQUF4QixFQUFFLElBQUksRUFBRSxFQUFFLE1BQU0sRUFBRSxFQUFFLEtBQVEsRUFBRSxNQUFPLEtBQUssT0FBTSxRQUFRLElBQUksa0JBQW1CLEdBQUUsTUFBTSxFQUFFLE9BQU8sYUFBYSxRQUFRLEVBQUUsSUFBSSxFQUFFLE9BQU8sR0FBRyxJQUFJLEdBQUcsRUFBRSxHQUFHLEdBQUcsSUFBSSxLQUFLLEVBQUUsU0FBUyxHQUFHLElBQUksR0FBSSxHQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sSUFBSSxHQUFHLE1BQU0sUUFBUSxFQUFFLElBQUksTUFBTyxPQUFNLFVBQVUsT0FBTyxTQUFTLEVBQUcsT0FBTyxJQUFHLEdBQUksSUFBSSxHQUFFLENBQUUsSUFBRyxnQkFBaUIsR0FBRSxDQUFDLEdBQUksRUFBRSxHQUFFLEVBQUUsUUFBUSxFQUFFLE9BQU8sSUFBSSxFQUFFLGdCQUFnQixHQUFHLEVBQUUsRUFBRSxjQUFjLEdBQUcsR0FBSSxJQUFHLEVBQUUscUJBQXFCLEdBQUcsRUFBRSxNQUFFLE9BQU8sR0FBTyxHQUFHLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxHQUFHLEVBQUUsU0FBUyxhQUFhLElBQUksR0FBSSxJQUFHLEVBQUUsRUFBRSxNQUFFLE9BQU8sR0FBTyxHQUFHLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFRLEdBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFHLE9BQU8sT0FBTSxRQUFRLEdBQUcsRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLFFBQVMsR0FBRSxFQUFFLEVBQUUsR0FBbUQsR0FBaEQsRUFBRSxHQUFHLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxNQUFFLEdBQU8sR0FBRSxHQUFPLEVBQUUsRUFBRSxVQUFVLElBQUksR0FBSSxHQUFFLEVBQUUsRUFBRSxFQUFFLFNBQVMsT0FBTyxFQUFFLEVBQUUsSUFBSSxDQUFDLEdBQUksR0FBRSxFQUFFLFNBQVMsRUFBRyxHQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksUUFBUSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxJQUFJLFNBQVMsR0FBRyxFQUFFLEVBQUUsUUFBUSxHQUFHLEVBQUUsT0FBTyxFQUFFLEVBQUUsUUFBUSxHQUFHLEVBQUUsUUFBUSxHQUFHLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQWtCLFFBQVMsSUFBRyxFQUFFLEdBQUcsT0FBTyxFQUFFLFlBQVksSUFBSSxXQUFXLEVBQUUsT0FBTyxnQkFBZ0IsRUFBRSxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsT0FBTyxHQUFHLEVBQUUsUUFBUyxJQUFHLEdBQUcsTUFBTyxHQUFFLFdBQVcsRUFBRSxhQUFhLFFBQVMsSUFBRyxHQUFHLEdBQUcsTUFBTSxRQUFRLEdBQUcsSUFBSSxHQUFJLEdBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxJQUFJLENBQUMsR0FBSSxHQUFFLEVBQUUsRUFBRyxJQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsbUJBQW1CLEdBQUcsSUFBSSxNQUFPLElBQUcsUUFBUyxJQUFHLEVBQUUsR0FBRyxHQUFHLElBQUksRUFBRSxHQUFHLFFBQVMsSUFBRyxFQUFFLEdBQUcsR0FBRyxLQUFLLEVBQUUsR0FBRyxRQUFTLElBQUcsRUFBRSxHQUFHLEdBQUksR0FBRSxFQUFHLE9BQU8sU0FBUyxLQUFJLE9BQU8sRUFBRSxNQUFNLEtBQUssWUFBWSxFQUFFLEtBQUssRUFBRSxJQUFJLFFBQVMsSUFBRyxFQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxFQUFFLE1BQU0sR0FBRyxHQUFHLEdBQUcsR0FBRyxPQUFHLEdBQW1CLFFBQVMsSUFBRyxHQUFHLEdBQUksR0FBRSxFQUFHLE9BQU8sSUFBRyxFQUFFLFdBQVcsR0FBRyxHQUFHLFFBQVMsSUFBRyxHQUFHLEtBQUssSUFBSSxFQUFFLEVBQUUsVUFBVSxHQUFHLEVBQUUsVUFBVSxPQUFNLENBQUcsUUFBTSxFQUFHLFFBQVMsSUFBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEdBQUcsRUFBRSxpQkFBZ0IsRUFBRyxHQUFHLEdBQUcsV0FBWSxJQUFHLEVBQUUsZ0JBQWdCLE1BQU8sSUFBRyxFQUFFLFdBQVcsT0FBTyxFQUFFLFVBQVUsQ0FBQyxFQUFFLFdBQVUsQ0FBRyxLQUFJLEdBQUksR0FBRSxFQUFFLEVBQUUsRUFBRSxVQUFVLE9BQU8sSUFBSSxHQUFHLEVBQUUsVUFBVSxHQUFJLElBQUcsRUFBRSxjQUFjLFFBQVMsSUFBRyxFQUFFLEdBQUcsSUFBSyxJQUFJLEdBQUUsRUFBRSxTQUFTLEdBQUcsRUFBRSxFQUFFLE9BQVEsSUFBRyxFQUFFLElBQUksR0FBSSxHQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLElBQUksR0FBRyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRyxHQUFFLGVBQWUsRUFBRSxNQUFNLFFBQVEsR0FBRyxLQUFtTixRQUFTLE1BQUssR0FBSSxHQUFFLENBQUUsS0FBSSxHQUFHLEtBQUssSUFBRyxFQUFHLEdBQUcsS0FBSyxTQUFTLEVBQUUsR0FBRyxNQUFPLEdBQUUsR0FBRyxFQUFFLEtBQUssR0FBRyxFQUFFLEdBQUcsR0FBRyxPQUFPLE1BQU0sRUFBRSxHQUFHLEtBQUssUUFBUSxFQUFFLFNBQVMsRUFBRSxFQUFFLEdBQUcsR0FBRyxHQUFHLEtBQUssRUFBRSxLQUFNLElBQUksR0FBRSxHQUFHLFFBQVEsRUFBRSxHQUFHLE9BQVEsSUFBRyxHQUFHLE9BQU8sR0FBRyxPQUFPLEVBQUUsTUFBTSxHQUFHLElBQUcsRUFBRyxTQUFTLEdBQUcsSUFBSSxHQUFJLEdBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxJQUFJLEVBQUUsR0FBRyxXQUFVLEVBQUcsR0FBRyxFQUFFLElBQUcsSUFBSyxHQUFHLFNBQVMsR0FBa0IsSUFBZixHQUFJLEdBQUUsRUFBRSxPQUFZLEtBQUssQ0FBQyxHQUFJLEdBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFHLEdBQUUsV0FBVyxHQUFHLEVBQUUsYUFBYSxFQUFFLGNBQWMsR0FBRyxFQUFFLGFBQWEsR0FBRyxJQUFJLEVBQUUsVUFBVSxHQUFHLEtBQUssU0FBdXBFLFFBQVMsSUFBRyxFQUFFLEVBQUUsR0FBRyxHQUFHLElBQUksV0FBVyxNQUFPLE1BQUssR0FBRyxJQUFJLEdBQUcsSUFBSSxTQUFTLEdBQUcsS0FBSyxHQUFHLEdBQUcsR0FBRyxPQUFPLGVBQWUsRUFBRSxFQUFFLElBQUksUUFBUyxJQUFHLEdBQUcsRUFBRSxZQUFhLElBQUksR0FBRSxFQUFFLFFBQVMsR0FBRSxPQUFPLFNBQVMsRUFBRSxHQUFHLEdBQUksR0FBRSxFQUFFLFNBQVMsY0FBYyxFQUFFLEVBQUUsVUFBVSxFQUFFLEVBQUUsU0FBUyxZQUFhLEdBQUUsU0FBUyxJQUFHLEVBQXNGLEtBQUksR0FBSSxLQUFLLElBQXpGLFNBQVMsR0FBRyxFQUFFLEtBQUssRUFBRyxJQUFJLEdBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFHLElBQUcsRUFBRSxFQUFFLEdBQUcsSUFBSyxJQUFHLEdBQUcsRUFBRSxTQUFTLElBQXFCLEVBQUcsS0FBRyxJQUFLLEVBQUUsRUFBRSxPQUFPLEVBQUUsU0FBUyxTQUFTLEVBQUUsR0FBRyxFQUFFLFNBQVMsS0FBTSxLQUFJLEdBQUksS0FBSyxHQUFFLEVBQUUsR0FBRyxrQkFBbUIsR0FBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsSUFBSSxFQUFFLEVBQUUsU0FBUyxFQUFFLEtBQUssU0FBUyxHQUFHLEdBQUksR0FBRSxFQUFFLFNBQVMsSUFBSyxHQUFFLEVBQUUsRUFBRSxNQUFNLGtCQUFtQixHQUFFLFNBQVMsRUFBRSxHQUFHLElBQUssS0FBSSxNQUFPLEdBQUUsS0FBSyxFQUFFLEdBQUcsTUFBTSxHQUFHLE1BQU8sSUFBRyxFQUFFLEVBQUUsYUFBYSxRQUFRLE9BQU8sRUFBRSxHQUFHLFNBQVMsS0FBOEUsS0FBeEUsR0FBSSxHQUFFLE9BQU8sS0FBSyxHQUFHLEVBQUUsRUFBRSxTQUFTLE1BQU0sR0FBRyxFQUFFLFNBQVMsUUFBUSxFQUFFLFFBQWEsS0FBSyxDQUFDLEdBQUksR0FBRSxFQUFFLEVBQUcsSUFBRyxFQUFFLEVBQUUsS0FBSyxNQUFFLEdBQU8sTUFBTSxHQUFHLEVBQUUsSUFBSSxXQUFXLEtBQUssS0FBSyxHQUFHLEdBQUcsRUFBRSxRQUFRLElBQUksR0FBSSxFQUFFLElBQUcsR0FBRSxJQUFLLEdBQUcsR0FBRyxFQUFFLFVBQVMsR0FBSSxFQUFFLFVBQVUsU0FBUyxFQUFFLEdBQUcsR0FBSSxHQUFFLEVBQUUsa0JBQWtCLE9BQU8sT0FBTyxNQUFNLEVBQUUsSUFBSyxLQUFJLEdBQUksS0FBSyxHQUFFLENBQUMsR0FBSSxHQUFFLEVBQUUsR0FBRyxFQUFFLGtCQUFtQixHQUFFLEVBQUUsRUFBRSxHQUFJLEtBQUksRUFBRSxHQUFHLEdBQUksSUFBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEtBQUssSUFBSyxJQUFHLEdBQUcsRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsUUFBUSxHQUFHLFNBQVMsRUFBRSxHQUFHLElBQUksR0FBSSxLQUFLLEdBQUUsQ0FBQyxHQUFJLEdBQUUsRUFBRSxFQUFHLElBQUcsTUFBTSxRQUFRLEdBQUcsSUFBSSxHQUFJLEdBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxJQUFJLEdBQUcsRUFBRSxFQUFFLEVBQUUsUUFBUyxJQUFHLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxPQUF3QixRQUFTLElBQUcsRUFBRSxFQUFFLEdBQUcsR0FBSSxJQUFHLElBQUssbUJBQW1CLElBQUcsR0FBRyxJQUFJLEVBQUUsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksSUFBSSxHQUFHLElBQUksRUFBRSxJQUFJLElBQUcsSUFBSyxFQUFFLE1BQU0sR0FBRyxHQUFHLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxJQUFJLEVBQUUsS0FBSyxHQUFHLE9BQU8sZUFBZSxFQUFFLEVBQUUsSUFBSSxRQUFTLElBQUcsR0FBRyxNQUFPLFlBQVcsR0FBSSxHQUFFLEtBQUssbUJBQW1CLEtBQUssa0JBQWtCLEVBQUcsSUFBRyxFQUFFLE1BQU8sR0FBRSxPQUFPLEVBQUUsV0FBVyxHQUFHLFFBQVEsRUFBRSxTQUFTLEVBQUUsT0FBTyxRQUFTLElBQUcsR0FBRyxNQUFPLFlBQVcsTUFBTyxHQUFFLEtBQUssS0FBSyxPQUFPLFFBQVMsSUFBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLE1BQU8sR0FBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLEVBQUUsU0FBUyxnQkFBaUIsS0FBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxFQUFFLEdBQVksUUFBUyxJQUFHLEdBQUcsR0FBSSxHQUFFLEVBQUUsT0FBUSxJQUFHLEVBQUUsTUFBTSxDQUFDLEdBQUksR0FBRSxHQUFHLEVBQUUsTUFBTyxJQUFHLElBQUksRUFBRSxhQUFhLENBQUMsRUFBRSxhQUFhLENBQUUsSUFBSSxHQUFFLFNBQVMsR0FBRyxHQUFJLEdBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxFQUFFLGFBQWMsS0FBSSxHQUFJLEtBQUssR0FBRSxFQUFFLEtBQUssRUFBRSxLQUFLLElBQUksTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFJLE9BQU8sSUFBRyxFQUFHLElBQUcsRUFBRSxFQUFFLGNBQWMsSUFBSSxFQUFFLEVBQUUsUUFBUSxHQUFHLEVBQUUsRUFBRSxnQkFBZ0IsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLElBQUksTUFBTyxHQUFFLFFBQVMsSUFBRyxHQUFHLEtBQUssTUFBTSxHQUFHLFFBQVMsSUFBRyxHQUFHLEVBQUUsSUFBSSxDQUFFLElBQUksR0FBRSxDQUFFLEdBQUUsT0FBTyxTQUFTLEdBQUcsRUFBRSxLQUFNLElBQUksR0FBRSxLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxRQUFRLEVBQUUsU0FBVSxJQUFHLEVBQUUsR0FBRyxNQUFPLEdBQUUsRUFBRyxJQUFJLEdBQUUsRUFBRSxNQUFNLEVBQUUsUUFBUSxLQUFLLEVBQUUsU0FBUyxHQUFHLEtBQUssTUFBTSxHQUFJLFFBQU8sRUFBRSxVQUFVLE9BQU8sT0FBTyxFQUFFLFlBQVksWUFBWSxFQUFFLEVBQUUsSUFBSSxJQUFJLEVBQUUsUUFBUSxHQUFHLEVBQUUsUUFBUSxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsUUFBUSxPQUFPLFNBQVMsR0FBRyxHQUFJLEdBQUUsRUFBRSxRQUFRLEtBQU0sS0FBSSxHQUFJLEtBQUssR0FBRSxHQUFHLEVBQUUsVUFBVSxTQUFTLElBQUksR0FBRyxFQUFFLFFBQVEsVUFBVSxTQUFTLEdBQUcsR0FBSSxHQUFFLEVBQUUsUUFBUSxRQUFTLEtBQUksR0FBSSxLQUFLLEdBQUUsR0FBRyxFQUFFLFVBQVUsRUFBRSxFQUFFLEtBQUssR0FBRyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFFBQVEsU0FBUyxHQUFHLEVBQUUsR0FBRyxFQUFFLEtBQUssSUFBSSxFQUFFLFFBQVEsV0FBVyxHQUFHLEdBQUcsRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFFLGNBQWMsRUFBRSxFQUFFLGNBQWMsS0FBSyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsR0FBRyxRQUFTLElBQUcsR0FBRyxNQUFPLEtBQUksRUFBRSxLQUFLLFFBQVEsTUFBTSxFQUFFLEtBQUssUUFBUyxJQUFHLEVBQUUsR0FBRyxNQUFPLE9BQU0sUUFBUSxHQUFHLEVBQUUsUUFBUSxJQUFJLEVBQUUsZ0JBQWlCLEdBQUUsRUFBRSxNQUFNLEtBQUssUUFBUSxJQUFJLEdBQUcsRUFBRSxFQUFFLG9CQUFvQixFQUFFLEtBQUssSUFBSSxFQUFFLEtBQUssR0FBSSxJQUFJLEdBQUUsUUFBUyxJQUFHLEVBQUUsR0FBRyxHQUFJLEdBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxNQUFPLEtBQUksR0FBSSxLQUFLLEdBQUUsQ0FBQyxHQUFJLEdBQUUsRUFBRSxFQUFHLElBQUcsRUFBRSxDQUFDLEdBQUksR0FBRSxHQUFHLEVBQUUsaUJBQWtCLEtBQUksRUFBRSxJQUFJLEdBQUcsRUFBRSxFQUFFLEVBQUUsS0FBSyxRQUFTLElBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFJLEdBQUUsRUFBRSxJQUFJLEdBQUcsR0FBRyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsa0JBQWtCLFdBQVcsRUFBRSxHQUFHLEtBQUssRUFBRSxFQUFFLEdBQW9rTyxRQUFTLElBQUcsR0FBRyxJQUFJLEdBQUksR0FBRSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUscUJBQXFCLEVBQUUsRUFBRSxrQkFBa0IsU0FBUyxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsS0FBSyxHQUFJLE1BQUssRUFBRSxFQUFFLEVBQUUsU0FBUyxHQUFHLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxFQUFFLE1BQU8sT0FBTyxVQUFTLEVBQUUsR0FBRyxNQUFHLEdBQUUsSUFBSSxFQUFFLEdBQVUsR0FBRyxFQUFFLEdBQUcsSUFBVSxJQUFJLEVBQUUsWUFBWSxFQUFFLE9BQU8sUUFBUyxJQUFHLEVBQUUsR0FBRyxPQUFPLFlBQVksR0FBRyxFQUFFLFlBQVksRUFBRSxhQUFhLE1BQU0sRUFBRSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sUUFBUyxJQUFHLEVBQUUsR0FBRyxNQUFPLEdBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEdBQUcsR0FBRyxRQUFTLElBQUcsR0FBRyxNQUFPLE9BQU0sUUFBUSxHQUFHLFNBQVMsR0FBRyxJQUFJLEdBQUksR0FBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxHQUFHLEVBQUUsTUFBTSxLQUFLLElBQUksSUFBSSxHQUFHLEtBQUssR0FBRyxFQUFHLE9BQU8sSUFBRyxHQUFHLEVBQUUsR0FBRyxTQUFTLEdBQUcsR0FBSSxHQUFFLEVBQUcsS0FBSSxHQUFJLEtBQUssR0FBRSxFQUFFLEtBQUssSUFBSSxHQUFHLEtBQUssR0FBRyxFQUFHLE9BQU8sSUFBRyxHQUFHLGdCQUFpQixHQUFFLEVBQUUsR0FBZzlCLFFBQVMsSUFBRyxHQUFHLE1BQU8sSUFBRyxHQUFHLE1BQU0sU0FBUyxFQUFFLFdBQU8sR0FBd0YsUUFBUyxJQUFHLEdBQUcsR0FBRyxnQkFBaUIsR0FBRSxDQUFpQyxNQUExQixVQUFTLGNBQWMsSUFBYSxTQUFTLGNBQWMsT0FBTyxNQUFPLEdBQXUzQixRQUFTLElBQUcsRUFBRSxHQUFHLEdBQUksR0FBRSxFQUFFLEtBQUssR0FBSSxJQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUksR0FBRSxFQUFFLFFBQVEsRUFBRSxFQUFFLG1CQUFtQixFQUFFLElBQUksRUFBRSxFQUFFLEtBQU0sR0FBRSxNQUFNLFFBQVEsRUFBRSxJQUFJLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxLQUFLLElBQUksRUFBRSxPQUFHLElBQVEsRUFBRSxLQUFLLFNBQVMsTUFBTSxRQUFRLEVBQUUsSUFBSSxFQUFFLEdBQUcsUUFBUSxHQUFHLEdBQUcsRUFBRSxHQUFHLEtBQUssR0FBRyxFQUFFLElBQUksR0FBRyxFQUFFLEdBQUcsR0FBZ0YsUUFBUyxJQUFHLEVBQUUsR0FBRyxNQUFPLEdBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsRUFBRSxRQUFRLEVBQUUsRUFBRSxPQUFPLFNBQVMsRUFBRSxHQUFHLEdBQUcsVUFBVSxFQUFFLElBQUksT0FBTSxDQUFHLElBQUksR0FBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFLLE9BQU8sS0FBSSxHQUFHLEdBQUcsSUFBSSxHQUFHLElBQUksRUFBRSxJQUFJLEVBQUUsRUFBRSxxQkFBcUIsRUFBRSxlQUFlLEVBQUUsY0FBYyxFQUFFLEVBQUUsYUFBYSxRQUFRLFFBQVMsSUFBRyxFQUFFLEVBQUUsR0FBRyxHQUFJLEdBQUUsRUFBRSxJQUFLLEtBQUksRUFBRSxFQUFFLEdBQUcsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsT0FBTyxFQUFFLEdBQUcsRUFBRyxPQUFPLEdBQTZELFFBQVMsSUFBRyxFQUFFLElBQUksRUFBRSxLQUFLLFlBQVksRUFBRSxLQUFLLGFBQWEsU0FBUyxFQUFFLEdBQUcsR0FBSSxHQUFFLEVBQUUsRUFBRSxFQUFFLElBQUksR0FBRyxFQUFFLElBQUksR0FBRyxFQUFFLEdBQUcsRUFBRSxLQUFLLFdBQVcsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLEtBQUssV0FBVyxFQUFFLFNBQVMsS0FBSyxJQUFLLEtBQUksSUFBSyxHQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxJQUFJLEdBQUcsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLGtCQUFrQixFQUFFLEtBQUssS0FBSyxHQUFHLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxVQUFVLEVBQUUsS0FBSyxHQUFJLElBQUcsRUFBRSxPQUFPLENBQUMsR0FBSSxHQUFFLFdBQVcsSUFBSSxHQUFJLEdBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxJQUFJLEdBQUcsRUFBRSxHQUFHLFdBQVcsRUFBRSxHQUFJLEdBQUUsR0FBRyxFQUFFLFNBQVMsR0FBRyxJQUF1RyxHQUFuRyxFQUFFLFFBQVEsR0FBRyxFQUFFLFlBQVksV0FBVyxJQUFJLEdBQUksR0FBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLElBQUksR0FBRyxFQUFFLEdBQUcsbUJBQW1CLEVBQUUsTUFBUyxFQUFFLElBQUksSUFBSyxHQUFFLEVBQUUsSUFBSSxHQUFHLEVBQUUsR0FBRyxTQUFTLEVBQUUsRUFBRSxJQUFJLEVBQUUsR0FBOEIsUUFBUyxJQUFHLEVBQUUsR0FBRyxHQUFJLEdBQUUsRUFBRSxFQUFFLE9BQU8sT0FBTyxLQUFNLEtBQUksRUFBRSxNQUFPLEVBQUUsS0FBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sS0FBSyxFQUFFLEVBQUUsSUFBSSxZQUFZLEVBQUUsVUFBVSxJQUFJLEVBQUUsR0FBRyxJQUFJLEVBQUUsRUFBRSxJQUFJLEdBQUcsRUFBRSxTQUFTLGFBQWEsRUFBRSxLQUFNLE9BQU8sR0FBRSxRQUFTLElBQUcsR0FBRyxNQUFPLEdBQUUsU0FBUyxFQUFFLEtBQUssSUFBSSxPQUFPLEtBQUssRUFBRSxlQUFlLEtBQUssS0FBSyxRQUFTLElBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEdBQUksR0FBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUcsSUFBRyxFQUFFLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsR0FBRyxNQUFNLEdBQUcsR0FBRyxFQUFFLEVBQUUsUUFBUSxhQUFhLEVBQUUsS0FBSyxJQUFJLEVBQUUsVUFBeUIsUUFBUyxJQUFHLEVBQUUsR0FBRyxHQUFJLEdBQUUsRUFBRSxnQkFBaUIsTUFBSyxFQUFFLEtBQUksSUFBSyxFQUFFLEtBQUssUUFBUSxjQUFjLEVBQUUsRUFBRSxLQUFLLFFBQVEsRUFBRSxFQUFFLEtBQUssUUFBUSxDQUFDLEdBQUksR0FBRSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxLQUFLLFVBQVUsRUFBRSxFQUFFLEtBQUssU0FBVSxLQUFJLElBQUssR0FBRSxFQUFFLFVBQVUsRUFBRSxFQUFFLEtBQUssTUFBTSxLQUFLLElBQUksRUFBRSxFQUFFLEVBQUUs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QUssR0FBRyxHQUFHLEtBQUssS0FBSyxHQUFFLGFBQVUsS0FBUyxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsR0FBRyxRQUFRLEdBQTZELFFBQUcsS0FBUyxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsR0FBRyxPQUFPLElBQUksR0FBRyxJQUFJLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sSUFBSSxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUksT0FBTyxHQUFFLFFBQVMsSUFBRyxFQUFFLEdBQUcsR0FBSSxHQUFFLEVBQUUsUUFBUSxJQUFLLElBQUcsRUFBRSxFQUFFLE1BQU0sT0FBTyxFQUFFLE1BQU0sRUFBRSxHQUFJLElBQUksR0FBRSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRyxPQUFNLE9BQU8sRUFBRSxNQUFNLEdBQUcsTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLFFBQVMsSUFBRyxFQUFFLEdBQUcsUUFBUSxNQUFNLG1CQUFtQixHQUFHLFFBQVMsSUFBRyxFQUFFLEdBQUcsTUFBTyxHQUFFLEVBQUUsSUFBSSxTQUFTLEdBQUcsTUFBTyxHQUFFLEtBQUssT0FBTyxTQUFTLEdBQUcsTUFBTyxRQUFPLFFBQVMsSUFBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsV0FBVyxLQUFLLElBQUksS0FBSyxFQUFFLE1BQU0sRUFBRSxRQUFRLEdBQUcsSUFBSSxFQUFFLE9BQU0sRUFBRyxRQUFTLElBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxlQUFlLEVBQUUsaUJBQWlCLEVBQUUsUUFBUSxFQUFFLFdBQVcsS0FBSyxJQUFJLEtBQUssRUFBRSxNQUFNLEVBQUUsUUFBUSxHQUFHLElBQUksRUFBRSxPQUFNLEVBQUcsUUFBUyxJQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxTQUFTLEdBQUcsRUFBRSxFQUFFLFVBQVUsS0FBSyxJQUFJLEtBQUssRUFBRSxNQUFNLEdBQUcsSUFBSSxRQUFTLElBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFLGdCQUFnQixLQUFLLElBQUksS0FBSyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxVQUFVLEdBQUcsSUFBSSxFQUFFLE9BQU0sRUFBRyxRQUFTLElBQUcsRUFBRSxFQUFFLEdBQUcsTUFBTyxHQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEVBQUUsUUFBUyxJQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFJLElBQUcsRUFBRSxHQUFHLEdBQUcsTUFBTSxFQUFFLEVBQUUsSUFBSSxFQUFFLDhCQUE4QixFQUFFLElBQUksVUFBVSxJQUFJLEVBQUUsb0JBQXFCLEdBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxFQUFFLElBQUksRUFBRSwwQkFBMEIsRUFBRSxJQUFJLFVBQVUsSUFBSSxFQUFFLFlBQVksRUFBRSxnQkFBaUIsR0FBRSxRQUFRLEVBQUUsR0FBRyxJQUFJLEVBQUUsSUFBSSxFQUFFLGFBQWMsR0FBRSxLQUFLLEVBQUUsR0FBRyxJQUFJLEVBQUUsSUFBSSxFQUFFLGdCQUFpQixHQUFFLFFBQVEsRUFBRSxHQUFHLElBQUksRUFBRSxJQUFJLEVBQUUsY0FBZSxHQUFFLE9BQU8sRUFBRSxFQUFFLGVBQWUsRUFBRSxrQkFBa0IsRUFBRSxFQUFFLFNBQVMsRUFBRSxVQUFXLElBQUksR0FBRSxJQUFJLE1BQU0sRUFBRSxPQUFPLFFBQVEsR0FBRyxFQUFHLEtBQUksSUFBSSxFQUFFLFVBQVUsRUFBRyxJQUFJLEdBQUUsRUFBRSxFQUFHLE9BQU0sUUFBUSxHQUFHLEVBQUUsRUFBRSxRQUFRLEdBQUcsRUFBRSxLQUFLLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsRUFBRSxPQUFNLEVBQUcsUUFBUyxJQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUksR0FBRSxHQUFHLEVBQUUsSUFBSSxJQUFJLEdBQUcsRUFBRSxVQUFVLEVBQUcsSUFBRyxNQUFNLEVBQUUsTUFBTyxJQUFHLEVBQUcsS0FBRyxJQUFLLEVBQUUsQ0FBQyxHQUFJLEdBQUUsR0FBRyxFQUFFLEVBQUcsSUFBRyxNQUFNLEVBQUUsTUFBTyxNQUFLLFVBQVUsSUFBSSxRQUFTLElBQUcsRUFBRSxFQUFFLEdBQUcsR0FBSSxFQUFFLElBQUcsT0FBTyxFQUFFLEVBQUUsU0FBUyxJQUFJLElBQUksR0FBSSxHQUFFLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLElBQUksR0FBRyxFQUFFLEdBQUcsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsRUFBRyxPQUFNLE1BQU8sVUFBVSxHQUFFLFNBQVMsR0FBRyxFQUFFLFFBQVMsSUFBRyxFQUFFLEdBQUcsSUFBSSxHQUFJLEdBQUUsRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsSUFBSSxDQUFDLEdBQUksR0FBRSxFQUFFLEVBQUcsSUFBRyxFQUFFLEtBQUssRUFBRSxNQUFNLE1BQU8sR0FBRSxPQUFPLEVBQUUsR0FBRyxHQUFHLFFBQVMsSUFBRyxFQUFFLEdBQUcsTUFBTyxLQUFJLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE9BQU8sTUFBTSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLFFBQVMsSUFBRyxFQUFFLEVBQUUsR0FBRyxHQUFJLEdBQUUsTUFBTSxFQUFFLEVBQUUsT0FBTyxFQUFFLEtBQU0sR0FBRSxPQUFPLEVBQUUsOENBQThDLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSyxJQUFJLEdBQUUsR0FBRyxFQUFFLEVBQUcsR0FBRSxPQUFPLE1BQU0sSUFBSSxFQUFFLElBQUksV0FBVyxLQUFLLFVBQVUsR0FBRyxTQUFTLG1CQUFtQixFQUFFLEtBQUssUUFBUyxJQUFHLEVBQUUsR0FBRyxHQUFJLEdBQUUsU0FBUyxHQUFHLEdBQUcsRUFBRSxFQUFFLE9BQU8sR0FBRyxFQUFFLE9BQU8sRUFBRSxRQUFRLEtBQUssR0FBRyxFQUFFLFlBQVksS0FBSyxHQUFHLEVBQUUsT0FBTyxHQUFHLEVBQUUsWUFBWSxPQUFPLEdBQUcsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLElBQUksSUFBSSxFQUFFLE1BQU0sR0FBRyxHQUFHLE1BQU0sSUFBSSxFQUFFLElBQUksS0FBc0IsS0FBaEIsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEdBQVEsTUFBTSxHQUFHLEdBQUcsTUFBTSxHQUFHLElBQUksS0FBSyxJQUFJLEdBQUcsR0FBSSxRQUFPLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxJQUFJLEVBQUUsTUFBTSxHQUFHLEVBQUUsTUFBTSxFQUFHLE9BQU8sUUFBTyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksS0FBSyxFQUFFLElBQUksS0FBSyxFQUFFLElBQUksUUFBUyxNQUFLLE1BQU8sSUFBRyxhQUFhLElBQUksUUFBUyxNQUFLLE1BQU8sS0FBSSxHQUFHLFFBQVMsSUFBRyxHQUFHLE1BQU8sTUFBSyxHQUFHLEtBQUssRUFBRSxRQUFTLElBQUcsR0FBRyxHQUFJLEdBQUUsQ0FBRSxLQUFJLEdBQUcsSUFBSSxNQUFNLEdBQUcsR0FBRyxFQUFFLE1BQU0sR0FBRyxPQUFRLElBQUcsS0FBSyxHQUFHLElBQUksS0FBSyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUMsR0FBRyxFQUFHLFFBQU8sUUFBUyxJQUFHLEdBQUcsSUFBSSxHQUFJLEdBQUUsR0FBRyxPQUFPLEVBQUUsUUFBUSxLQUE4QixRQUFTLElBQUcsRUFBRSxFQUFFLEdBQUcsR0FBSSxHQUFFLEVBQUcsT0FBTyxTQUFTLEtBQUksT0FBTyxFQUFFLE1BQU0sS0FBSyxZQUFZLEdBQUcsRUFBRSxFQUFFLEVBQUUsSUFBc0MsUUFBUyxJQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBSSxHQUFFLEdBQUcsRUFBRSxDQUFFLEdBQUUsRUFBRSxTQUFTLFNBQVMsR0FBRyxHQUFHLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRSxXQUFXLEdBQUcsRUFBRSxXQUFXLEdBQUcsRUFBRSxPQUFPLGdCQUFnQixTQUFTLE1BQU8sR0FBRSxNQUFNLEtBQUssWUFBWSxHQUFHLGlCQUFpQixFQUFFLEVBQUUsR0FBRyxRQUFRLEVBQUUsUUFBUSxHQUFHLEdBQUcsUUFBUyxJQUFHLEVBQUUsRUFBRSxFQUFFLElBQUksR0FBRyxJQUFJLG9CQUFvQixFQUFFLEVBQUUsVUFBVSxFQUFFLEdBQUcsUUFBUyxJQUFHLEVBQUUsR0FBRyxJQUFJLEVBQUUsRUFBRSxLQUFLLE1BQU0sRUFBRSxFQUFFLEtBQUssSUFBSSxDQUFDLEdBQUksR0FBRSxFQUFFLEtBQUssT0FBTyxFQUFFLEVBQUUsS0FBSyxNQUFPLElBQUcsRUFBRSxJQUFJLFNBQVMsR0FBRyxHQUFHLEVBQUUsRUFBRSxLQUFLLENBQUMsR0FBSSxHQUFFLEVBQUUsU0FBUyxPQUFRLEdBQUUsTUFBTSxPQUFPLEVBQUUsSUFBSSxFQUFFLGNBQWUsR0FBRSxJQUFJLEVBQUUsRUFBRSxPQUFPLEVBQUUsVUFBVSxPQUFPLEVBQUUsSUFBSSxFQUFFLGtCQUFtQixHQUFFLE1BQU0sR0FBRyxHQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLFNBQVMsT0FBRyxJQUF3QyxRQUFTLElBQUcsRUFBRSxHQUFHLElBQUksRUFBRSxFQUFFLEtBQUssWUFBWSxFQUFFLEVBQUUsS0FBSyxVQUFVLENBQUMsR0FBSSxHQUFFLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEtBQUssYUFBYSxFQUFFLEVBQUUsS0FBSyxZQUFhLEtBQUksSUFBSyxHQUFFLEVBQUUsVUFBVSxFQUFFLEVBQUUsS0FBSyxTQUFTLEtBQUssSUFBSSxFQUFFLElBQUssS0FBSSxFQUFFLEdBQUcsR0FBSSxLQUFJLElBQUssR0FBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLEdBQUcsZ0JBQWdCLEdBQUcsY0FBYyxFQUFFLENBQUMsR0FBRyxFQUFFLFdBQVcsRUFBRSxTQUFTLE9BQU8sR0FBRyxJQUFJLEVBQUUsR0FBRyxRQUFTLEtBQUksRUFBRSxXQUFXLFFBQVEsRUFBRSxZQUFZLEVBQUUsV0FBVyxJQUFJLEdBQUcsVUFBVSxHQUFHLGFBQWEsRUFBRSxRQUFRLENBQUMsRUFBRSxPQUFPLENBQUUsSUFBSSxHQUFFLEVBQUUsR0FBRyxHQUFHLE9BQU8sRUFBRyxJQUFHLEVBQUUsS0FBSyxFQUFFLE1BQU0sT0FBUSxJQUFHLGNBQWMsR0FBRyxHQUFHLEVBQUUsVUFBVSxFQUFFLEVBQUUsV0FBVyxFQUFFLEdBQUcsSUFBSSxTQUFTLGNBQWMsUUFBUSxVQUFVLFFBQVEsRUFBRSxRQUFTLEtBQUksR0FBSSxHQUFFLEdBQUcsV0FBVyxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsV0FBWSxNQUFLLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxnQkFBaUIsSUFBRyxJQUFJLEVBQUUsR0FBRyxJQUFJLEVBQUUsR0FBRyxFQUFFLE1BQU0sT0FBTyxRQUFTLElBQUcsRUFBRSxHQUFHLE9BQU8sRUFBRSxZQUFZLFdBQVcsRUFBRSxTQUFTLFNBQVMsRUFBRSxHQUFHLEdBQUksSUFBRSxDQUFHLEtBQUksRUFBRSxTQUFTLGdCQUFnQixFQUFFLE1BQU0sSUFBSSxNQUFPLElBQUcsRUFBRSxRQUFRLEdBQUcsRUFBRSxJQUFJLFNBQVMsRUFBRSxHQUFHLEdBQUksR0FBRSxFQUFFLE1BQU0sRUFBRSxFQUFFLFdBQVksSUFBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsT0FBTyxNQUFPLEdBQUUsS0FBSyxFQUFFLEVBQUcsSUFBRyxFQUFFLEtBQUssTUFBTyxHQUFFLFNBQVMsRUFBRSxPQUFPLE1BQU8sS0FBSSxHQUFHLEVBQUUsSUFBZ00sUUFBUyxJQUFHLEdBQUcsR0FBSSxHQUFFLEdBQUcsRUFBRSxNQUFPLE9BQU8sR0FBRSxZQUFZLEVBQUUsRUFBRSxZQUFZLEdBQUcsRUFBRSxRQUFTLElBQUcsR0FBRyxNQUFPLE9BQU0sUUFBUSxHQUFHLEVBQUUsR0FBRyxnQkFBaUIsR0FBRSxHQUFHLEdB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SUFBSSxHQUFHLEdBQUcsR0FBRyxFQUFFLEVBQUUsRUFBRSxXQUFXLEVBQUUsb0JBQW9CLEVBQUUsR0FBRyxLQUFLLEVBQUUsU0FBUyxHQUFHLEVBQUUsU0FBUyxLQUFLLEdBQUcsR0FBRyxJQUFLLFlBQVcsV0FBVyxFQUFFLEdBQUcsS0FBSyxFQUFFLEdBQUcsRUFBRSxpQkFBaUIsRUFBRSxHQUFtQyxRQUFTLElBQUcsRUFBRSxHQUFHLEdBQUksR0FBRSxFQUFFLE9BQU8saUJBQWlCLEdBQUcsR0FBRyxFQUFFLEdBQUcsVUFBVSxJQUFJLE1BQU0sTUFBTSxHQUFHLEVBQUUsR0FBRyxhQUFhLElBQUksTUFBTSxNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsR0FBRyxFQUFFLEdBQUcsVUFBVSxJQUFJLE1BQU0sTUFBTSxHQUFHLEVBQUUsR0FBRyxhQUFhLElBQUksTUFBTSxNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBRSxPQUFPLEtBQUksR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsUUFBUSxJQUFJLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLFFBQVEsR0FBRyxHQUFHLEVBQUUsS0FBSyxJQUFJLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxHQUFHLEdBQUcsTUFBTSxJQUFJLEdBQUcsRUFBRSxPQUFPLEVBQUUsT0FBTyxHQUFHLEtBQUssRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLGFBQWEsSUFBSSxJQUFJLEdBQUcsS0FBSyxFQUFFLEdBQUcsY0FBYyxRQUFTLElBQUcsRUFBRSxHQUFHLEtBQUssRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLEVBQUUsT0FBTyxFQUFHLE9BQU8sTUFBSyxJQUFJLE1BQU0sS0FBSyxFQUFFLElBQUksU0FBUyxFQUFFLEdBQUcsTUFBTyxJQUFHLEdBQUcsR0FBRyxFQUFFLE9BQU8sUUFBUyxJQUFHLEdBQUcsTUFBTyxLQUFJLE9BQU8sRUFBRSxNQUFNLEdBQUcsR0FBRyxRQUFRLElBQUksTUFBTSxRQUFTLElBQUcsRUFBRSxHQUFHLEdBQUksR0FBRSxFQUFFLEdBQUksR0FBRSxFQUFFLFlBQVksRUFBRSxTQUFTLFdBQVUsRUFBRyxFQUFFLFdBQVksSUFBSSxHQUFFLEdBQUcsRUFBRSxLQUFLLFdBQVksS0FBSSxFQUFFLEtBQUssRUFBRSxFQUFFLFdBQVcsSUFBSSxFQUFFLFNBQVMsQ0FBQyxJQUFJLEdBQUksR0FBRSxFQUFFLElBQUksRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFLFdBQVcsRUFBRSxFQUFFLGFBQWEsRUFBRSxFQUFFLGlCQUFpQixFQUFFLEVBQUUsWUFBWSxFQUFFLEVBQUUsY0FBYyxFQUFFLEVBQUUsa0JBQWtCLEVBQUUsRUFBRSxZQUFZLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxXQUFXLEVBQUUsRUFBRSxlQUFlLEVBQUUsRUFBRSxhQUFhLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxZQUFZLEVBQUUsRUFBRSxnQkFBZ0IsRUFBRSxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsR0FBRyxPQUFPLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxRQUFRLEVBQUUsRUFBRSxNQUFPLElBQUksSUFBRyxFQUFFLGFBQWEsRUFBRSxZQUFhLEtBQUksR0FBRyxHQUFHLEtBQUssRUFBRSxDQUFDLEdBQUksR0FBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxFQUFFLEdBQUcsa0JBQW1CLEdBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsTUFBTSxHQUFHLEdBQUUsSUFBSyxJQUFJLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxFQUFFLFNBQVMsRUFBRSxXQUFXLElBQUksR0FBRyxFQUFFLEdBQUcsR0FBRyxFQUFFLElBQUksRUFBRSxXQUFXLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxFQUFFLElBQUksR0FBRyxFQUFFLEdBQUcsRUFBRSxTQUFTLE1BQU8sR0FBRSxLQUFLLE1BQU0sR0FBRyxFQUFFLFNBQVMsV0FBVyxHQUFJLEdBQUUsRUFBRSxXQUFXLEVBQUUsR0FBRyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsSUFBSyxJQUFHLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxJQUFJLFVBQVUsRUFBRSxJQUFJLFdBQVcsR0FBRyxFQUFFLEVBQUUsS0FBSyxHQUFHLEVBQUUsR0FBRyxJQUFJLEdBQUcsRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsV0FBVyxHQUFHLEVBQUUsR0FBRyxFQUFFLFlBQVksR0FBRyxFQUFFLEdBQUcsSUFBSSxHQUFHLEdBQUcsV0FBVyxFQUFFLEdBQUcsR0FBRyxFQUFFLEVBQUUsUUFBUSxFQUFFLEtBQUssT0FBTyxHQUFHLElBQUksR0FBRyxFQUFFLEVBQUUsSUFBSSxHQUFHLEdBQUcsTUFBTSxRQUFTLElBQUcsRUFBRSxHQUFzaUIsUUFBUyxLQUFJLEVBQUUsYUFBYSxFQUFFLEtBQUssTUFBTSxFQUFFLGNBQWMsRUFBRSxXQUFXLFdBQVcsRUFBRSxXQUFXLGNBQWMsRUFBRSxLQUFLLEdBQUcsR0FBRyxFQUFFLEdBQUcsSUFBSSxHQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLFdBQVcsR0FBRyxFQUFFLEdBQUcsRUFBRSxZQUFZLEdBQUcsRUFBRSxHQUFHLElBQUksR0FBRyxHQUFHLFdBQVcsRUFBRSxHQUFHLEdBQUcsRUFBRSxFQUFFLFFBQVEsR0FBRyxFQUFFLEVBQUUsR0FBRyxHQUFHLEdBQUcsS0FBMXhCLEdBQUksR0FBRSxFQUFFLEdBQUksR0FBRSxFQUFFLFlBQVksRUFBRSxTQUFTLFdBQVUsRUFBRyxFQUFFLFdBQVksSUFBSSxHQUFFLEdBQUcsRUFBRSxLQUFLLFdBQVksSUFBRyxFQUFFLElBQUksSUFBSSxFQUFFLFNBQVMsTUFBTyxJQUFJLEtBQUksRUFBRSxFQUFFLFVBQVUsQ0FBQyxHQUFJLEdBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxXQUFXLEVBQUUsRUFBRSxhQUFhLEVBQUUsRUFBRSxpQkFBaUIsRUFBRSxFQUFFLFlBQVksRUFBRSxFQUFFLE1BQU0sRUFBRSxFQUFFLFdBQVcsRUFBRSxFQUFFLGVBQWUsRUFBRSxFQUFFLFdBQVcsRUFBRSxFQUFFLFNBQVMsR0FBRSxJQUFLLElBQUksRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsTUFBTSxHQUFHLEVBQUUsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxXQUFXLFdBQVcsRUFBRSxXQUFXLFNBQVMsRUFBRSxLQUFLLE1BQU0sSUFBSSxHQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsSUFBSSxFQUFFLFdBQVcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsS0FBSyxJQUFJLEdBQUcsRUFBRSxJQUFJLEVBQUUsU0FBUyxNQUFPLEdBQUUsRUFBRSxHQUFHLEtBQWlRLFFBQVMsSUFBRyxHQUFHLE1BQU0sZ0JBQWlCLEtBQUksTUFBTSxHQUFHLFFBQVMsSUFBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLE9BQU0sQ0FBRyxJQUFJLEdBQUUsRUFBRSxHQUFJLE9BQU8sR0FBRSxHQUFHLEdBQUcsTUFBTSxRQUFRLEdBQUcsRUFBRSxHQUFHLElBQUksRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLFFBQVMsSUFBRyxFQUFFLElBQUcsSUFBSyxFQUFFLEtBQUssTUFBTSxHQUFHLEdBQWt3TSxRQUFTLElBQUcsRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLEVBQUUsSUFBSSxHQUFHLElBQUksV0FBVyxXQUFXLEdBQUcsRUFBRSxFQUFFLElBQUksR0FBRyxRQUFTLElBQUcsRUFBRSxFQUFFLEdBQUcsR0FBSSxHQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUsUUFBUyxLQUFJLEdBQUcsTUFBTSxRQUFRLEdBQUcsQ0FBQyxJQUFJLEdBQUksR0FBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsUUFBUSxPQUFPLEVBQUUsRUFBRSxJQUFJLEdBQUcsRUFBRSxFQUFFLFFBQVEsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsS0FBSyxFQUFFLEVBQUUsV0FBVyxJQUFJLEVBQUUsU0FBUyxPQUFRLElBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxZQUFZLEVBQUUsZ0JBQWdCLElBQUksRUFBRSxjQUFjLEdBQUksS0FBSSxFQUFFLGVBQWUsSUFBSSxRQUFTLElBQUcsRUFBRSxHQUFHLE1BQU8sR0FBRSxNQUFNLFNBQVMsR0FBRyxPQUFPLEVBQUUsRUFBRSxLQUFLLFFBQVMsSUFBRyxHQUFHLE1BQU0sVUFBVyxHQUFFLEVBQUUsT0FBTyxFQUFFLE1BQU0sUUFBUyxJQUFHLEdBQUcsRUFBRSxPQUFPLFdBQVUsRUFBRyxRQUFTLElBQUcsR0FBRyxFQUFFLE9BQU8sWUFBWSxFQUFFLE9BQU8sV0FBVSxFQUFHLEdBQUcsRUFBRSxPQUFPLFVBQVUsUUFBUyxJQUFHLEVBQUUsR0FBRyxHQUFJLEdBQUUsU0FBUyxZQUFZLGFBQWMsR0FBRSxVQUFVLEdBQUUsR0FBRyxHQUFJLEVBQUUsY0FBYyxHQUFHLFFBQVMsSUFBRyxHQUFHLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLEVBQUUsS0FBSyxXQUFXLEVBQUUsR0FBRyxFQUFFLGtCQUFrQixRQUFvMkIsUUFBUyxJQUFHLEdBQUcsR0FBSSxHQUFFLEdBQUcsRUFBRSxnQkFBaUIsT0FBTyxJQUFHLEVBQUUsS0FBSyxRQUFRLFNBQVMsR0FBRyxHQUFHLEVBQUUsV0FBVyxFQUFFLFFBQVMsSUFBRyxHQUFHLEdBQUksTUFBSyxFQUFFLEVBQUUsUUFBUyxLQUFJLEdBQUksS0FBSyxHQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsRUFBRyxJQUFJLEdBQUUsRUFBRSxnQkFBaUIsS0FBSSxHQUFJLEtBQUssR0FBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUcsT0FBTyxHQUFFLFFBQVMsSUFBRyxFQUFFLEdBQUcsR0FBRyxpQkFBaUIsS0FBSyxFQUFFLEtBQUssTUFBTyxHQUFFLGNBQWMsTUFBTSxFQUFFLGlCQUFpQixZQUFtbkMsUUFBUyxJQUFHLEdBQUcsRUFBRSxJQUFJLFNBQVMsRUFBRSxJQUFJLFVBQVUsRUFBRSxJQUFJLFVBQVUsRUFBRSxJQUFJLFdBQVcsUUFBUyxJQUFHLEdBQUcsRUFBRSxLQUFLLE9BQU8sRUFBRSxJQUFJLHdCQUF3QixRQUFTLElBQUcsR0FBRyxHQUFJLEdBQUUsRUFBRSxLQUFLLElBQUksRUFBRSxFQUFFLEtBQUssT0FBTyxFQUFFLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxHQUFJLElBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxLQUFLLE9BQU0sQ0FBRyxJQUFJLEdBQUUsRUFBRSxJQUFJLEtBQU0sR0FBRSxVQUFVLEVBQUUsZ0JBQWdCLGFBQWEsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLG1CQUFtQixNQUEyNEksUUFBUyxJQUFHLEVBQUUsR0FBRyxHQUFJLEdBQUUsRUFBRSxHQUFHLEVBQUcsT0FBTyxHQUFFLFFBQVEsRUFBRSxTQUFTLEdBQUcsTUFBTyxJQUFHLEtBQW9TLFFBQVMsSUFBRyxFQUFFLEVBQUUsR0FBRyxPQUFPLEtBQUssRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLFNBQVMsR0FBRyxHQUFHLGVBQWUsT0FBTyxFQUFFLGFBQWEsUUFBUyxJQUFHLEVBQUUsR0FBMFIsUUFBUyxHQUFFLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxFQUFFLFlBQVksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLFFBQVEsSUFBSSxHQUFHLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxPQUFPLEdBQUcsR0FBRyxJQUFJLEVBQUUsT0FBTyxNQUFNLElBQUksSUFBSSxFQUFFLFVBQVUsR0FBRyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLFNBQVMsR0FBa0IsSUFBZixHQUFJLEdBQUUsRUFBRSxPQUFZLEtBQUssQ0FBQyxHQUFHLElBQUksRUFBRSxHQUFHLEtBQUssTUFBTyxHQUFFLEVBQUcs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SSxFQUFFLENBQUMsR0FBRyxHQUFHLEtBQUssR0FBRyxDQUFDLEdBQUksR0FBRSxFQUFFLFFBQVEsU0FBVSxJQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsbUJBQW1CLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUcsV0FBVSxHQUFHLEdBQUcsS0FBSyxHQUFHLENBQUMsR0FBSSxHQUFFLEVBQUUsUUFBUSxLQUFNLElBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUcsV0FBVSxHQUFJLEdBQUUsRUFBRSxNQUFNLEdBQUksSUFBRyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsT0FBUSxVQUFTLEdBQUksR0FBRSxFQUFFLE1BQU0sR0FBSSxJQUFHLEVBQUUsQ0FBQyxHQUFJLEdBQUUsQ0FBRSxHQUFFLEVBQUUsR0FBRyxRQUFRLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRyxVQUFTLEdBQUksR0FBaVcsV0FBYSxHQUFJLEdBQUUsRUFBRSxNQUFNLEdBQUksSUFBRyxFQUFFLENBQUMsR0FBSSxHQUFFLEVBQUUsR0FBRyxRQUFRLEVBQUUsR0FBRyxTQUFTLE1BQU0sRUFBRyxLQUFJLEVBQUUsRUFBRSxHQUFHLFVBQVUsRUFBRSxFQUFFLE1BQU0sT0FBTyxFQUFFLEVBQUUsTUFBTSxLQUFLLEVBQUUsTUFBTSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxHQUFHLFFBQVEsRUFBRSxJQUFJLEVBQUUsRUFBRSxNQUFNLEtBQUssRUFBRyxJQUFHLEVBQUUsTUFBTyxHQUFFLFdBQVcsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLFFBQVEsRUFBRSxJQUFJLEVBQUUsS0FBbmxCLElBQUcsRUFBRSxFQUFpbEIsU0FBVyxHQUFHLEdBQUksR0FBRSxFQUFFLFFBQVEsRUFBRSxFQUFFLFVBQVcsS0FBSSxNQUFNLEdBQUcsR0FBRyxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksSUFBSSxHQUFHLEVBQUUsR0FBSSxLQUFJLEdBQUksR0FBRSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsTUFBTSxPQUFPLEVBQUUsR0FBSSxPQUFNLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsR0FBSSxHQUFFLEVBQUUsTUFBTSxHQUFHLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksR0FBRyxFQUFFLE1BQU0sR0FBRyxTQUFTLEVBQUUsR0FBRyxFQUFFLDRCQUE0QixFQUFFLG9CQUFxQixHQUFFLElBQUksS0FBSyxFQUFFLEdBQUcsTUFBTSxHQUFHLEVBQUUsSUFBSSxJQUFJLEVBQUUsTUFBTSxJQUFJLEVBQUUsY0FBYyxFQUFFLGNBQWMsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLElBQUksRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLE9BQXIvQixHQUFHLEdBQUcsRUFBRSxRQUFRLElBQUksRUFBRSxFQUFHLFdBQVUsR0FBSSxPQUFFLEdBQU8sTUFBRSxHQUFPLE1BQUUsRUFBTyxJQUFHLEdBQUcsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLE1BQU0sS0FBSyxHQUFHLEtBQUssSUFBSSxHQUFHLEtBQUssSUFBSSxHQUFHLEtBQUssSUFBSSxHQUFHLEtBQUssS0FBSyxFQUFFLEVBQUUsUUFBUSxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRyxHQUFFLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxHQUFHLEVBQUUsRUFBRSxRQUFRLEVBQUUsT0FBTyxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxPQUFPLEdBQUcsR0FBRyxJQUFJLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUcsUUFBa2lDLEtBQUssR0FBRyxLQUFLLEdBQUcsV0FBVyxFQUFFLFdBQVcsV0FBVyxFQUFFLFdBQVcsaUJBQWlCLEVBQUUsaUJBQWlCLHFCQUFxQixFQUFFLHFCQUFxQiw0QkFBNEIsRUFBRSw0QkFBNEIsa0JBQWtCLEVBQUUsU0FBUyxrQkFBa0IsRUFBRSxrQkFBa0IsTUFBTSxTQUFTLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFJLEdBQUUsR0FBRyxFQUFFLElBQUksR0FBRyxFQUFHLElBQUcsUUFBUSxJQUFJLEVBQUUsU0FBUyxHQUFHLElBQUksR0FBSSxNQUFLLEVBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxJQUFJLENBQUMsR0FBSSxHQUFFLEVBQUUsRUFBRyxJQUFHLEtBQUssRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLEtBQUssUUFBUSxHQUFHLElBQUksRUFBRSxLQUFLLElBQUksTUFBTyxJQUFHLEdBQUksSUFBSSxHQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRyxLQUFJLEVBQUUsR0FBRyxHQUFHLFdBQVcsRUFBRSxHQUFHLE1BQU0sV0FBVyxFQUFFLEtBQUssRUFBRSxTQUFTLE1BQU0sb0JBQW9CLEVBQUUsU0FBUyxPQUFPLE9BQU8sRUFBRSxXQUFVLEVBQUksS0FBSSxHQUFJLEdBQUUsRUFBRSxFQUFFLEdBQUcsT0FBTyxJQUFJLEVBQUUsR0FBRyxHQUFHLEVBQUUsSUFBSSxDQUFFLEtBQUssU0FBUyxHQUFHLE1BQU0sR0FBRyxFQUFFLFdBQVcsRUFBRSxLQUFJLElBQUssR0FBRyxFQUFFLE1BQU0sR0FBRSxJQUFLLEdBQUcsRUFBRSxPQUFPLEdBQUUsR0FBSSxFQUFFLFNBQVMsR0FBRyxHQUFJLEdBQUUsRUFBRSxVQUFVLEVBQUUsRUFBRSxNQUFPLElBQUcsRUFBRSxJQUFJLEdBQUksR0FBRSxFQUFFLE1BQU0sR0FBSSxPQUFNLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxLQUFLLEVBQUUsR0FBRyxLQUFLLE1BQU0sS0FBSyxVQUFVLEVBQUUsR0FBRyxRQUFRLE1BQU0sRUFBRSxHQUFHLFFBQVEsRUFBRSxHQUFHLE1BQU0sRUFBRSxHQUFHLE1BQU0sRUFBRSxHQUFHLElBQUksRUFBRSxHQUFHLFNBQVUsR0FBRSxNQUFNLEVBQUUsT0FBTSxJQUFLLEdBQUcsRUFBRSxZQUFZLEdBQUcsR0FBRyxTQUFTLEdBQUcsR0FBSSxHQUFFLEdBQUcsRUFBRSxPQUFRLElBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEdBQUcsSUFBSSxFQUFFLE1BQU0sUUFBUSxDQUFDLE1BQU0sR0FBRyxFQUFFLFlBQVksRUFBRSxNQUFLLEVBQUksSUFBSSxHQUFFLEdBQUcsRUFBRSxZQUFhLEtBQUksRUFBRSxPQUFPLEtBQUssR0FBRyxTQUFTLEdBQUcsTUFBTSxHQUFHLEVBQUUsWUFBWSxFQUFFLE1BQUssSUFBSyxJQUFJLElBQUksRUFBRSxHQUFHLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLEtBQUssS0FBSyxJQUFJLFNBQVMsRUFBRSxFQUFFLEdBQUcsR0FBSSxHQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUcsR0FBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxHQUFHLEVBQUUsSUFBSSxNQUFNLFNBQVMsRUFBRSxFQUFFLEdBQUcsR0FBRyxLQUFLLEdBQUcsYUFBYSxFQUFFLEtBQUssRUFBRSxTQUFTLGNBQWMsR0FBRyxDQUFDLEdBQUksR0FBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLFVBQVksRUFBRSxHQUFHLEVBQUUsT0FBTyxZQUFZLEVBQUUsR0FBRyxLQUFLLFVBQVUsRUFBRSxJQUFJLEVBQUUsR0FBRyxHQUFHLEVBQUUsT0FBTyxFQUFFLGFBQWEsR0FBRyxHQUFHLEtBQUssR0FBRyxHQUFHLElBQUksRUFBRSxJQUFJLEdBQUcsTUFBRyxHQUFHLGFBQWEsSUFBSSxFQUFFLEVBQUUsUUFBUSxHQUFHLE9BQU8sR0FBRyxNQUFNLElBQUksRUFBRSxTQUFTLEVBQUUsR0FBRyxHQUFJLEdBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRyxJQUFHLEVBQUUsS0FBSyxHQUFHLENBQUMsSUFBSSxHQUFJLEdBQUUsRUFBRSxFQUFFLEtBQUssS0FBSyxFQUFFLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRSxLQUFLLElBQUksRUFBRSxFQUFFLEVBQUUsT0FBTyxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxLQUFLLEtBQUssVUFBVSxJQUFLLElBQUksR0FBRSxHQUFHLEVBQUUsR0FBRyxPQUFRLEdBQUUsS0FBSyxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sV0FBVyxJQUFJLEVBQUUsRUFBRSxFQUFFLEdBQUcsT0FBTyxNQUFPLEdBQUUsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLEVBQUUsTUFBTSxJQUFJLEVBQUUsS0FBSyxLQUFLLFVBQVUsTUFBTSxXQUFXLEVBQUUsS0FBSyxLQUFLLE9BQU8sS0FBSyxFQUFFLEtBQUssR0FBRyxLQUFLLEVBQUUsV0FBVyxFQUFFLFdBQVcsT0FBTyxFQUFFLE9BQU8sS0FBSyxHQUFHLE1BQU0sR0FBRyxFQUFFLFFBQVEsTUFBTSxFQUFFLEVBQUUsT0FBTyxHQUFHLE9BQU8sR0FBRyxLQUFLLEVBQUUsS0FBSyxJQUFJLEdBQUcsRUFBRSxLQUFLLE1BQUssUUFBUSxTQUFTLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUksSUFBRyxLQUFLLEVBQUUsS0FBSyxFQUFFLFdBQVUsRUFBSSxHQUFFLFNBQVMsS0FBSyxPQUFPLEVBQUUsUUFBUyxJQUFHLEVBQUUsR0FBRyxHQUFJLEdBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLFVBQVUsRUFBRSxJQUFJLEdBQUcsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLGNBQWMsRUFBRSxVQUFVLE9BQU8sU0FBUyxHQUFHLEdBQUksR0FBRSxHQUFHLEVBQUUsTUFBTyxLQUFJLEVBQUUsSUFBSSxFQUFFLEVBQUUsU0FBUyxTQUFTLEdBQVcsSUFBUixHQUFJLEdBQUUsRUFBTyxHQUFHLENBQUMsT0FBRyxLQUFTLEVBQUUsSUFBSSxPQUFNLENBQUcsR0FBRSxFQUFFLE9BQU8sT0FBTSxHQUFJLEtBQUssR0FBRyxTQUFTLEdBQUcsR0FBSSxFQUFFLGNBQWEsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxVQUFVLEdBQUcsR0FBRyxFQUFFLGdCQUFnQixFQUFFLEdBQUcsRUFBRSxpQkFBaUIsRUFBRSxVQUFVLEVBQUcsSUFBSSxHQUFFLEdBQUcsRUFBRSxPQUE0USxJQUFwUSxJQUFJLEVBQUUsV0FBVyxPQUFPLEVBQUUsWUFBWSxFQUFFLEVBQUUscUJBQXFCLEVBQUUsU0FBUyxXQUFXLEVBQUUsU0FBUyxnQkFBZ0IsYUFBYSxFQUFFLEtBQUssRUFBRSxXQUFXLEdBQUcsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLEdBQUcsTUFBTyxHQUFFLFlBQVksSUFBSSxJQUFJLEVBQUUsWUFBWSxVQUFVLElBQUksRUFBRSxZQUFZLElBQUksRUFBRSxVQUFhLGFBQWEsRUFBRSxJQUFJLENBQUMsR0FBSSxHQUFFLEdBQUcsRUFBRSxHQUFJLElBQUcsRUFBRSxDQUFDLEdBQUksR0FBRSxHQUFHLEdBQUcsRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFLE9BQVEsR0FBRSxXQUFXLEVBQUUsRUFBRSxrQkFBa0IsRUFBRSxFQUFFLFVBQVUsRUFBRSxPQUFPLFFBQVEsQ0FBQyxHQUFJLEdBQUUsR0FBRyxFQUFFLEdBQUksSUFBRyxFQUFFLENBQUMsR0FBSSxHQUFFLEVBQUUsY0FBYyxFQUFFLGdCQUFnQixFQUFFLEdBQUcsR0FBRyxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsUUFBUSxFQUFFLEVBQUUsR0FBRyxHQUFHLGNBQWMsRUFBRyxHQUFFLFdBQVcsRUFBRSxFQUFFLGtCQUFrQixFQUFFLEVBQUUsU0FBUyxFQUFFLFNBQVMsT0FBTyxTQUFTLEdBQUcsSUFBSSxFQUFFLFVBQVUsTUFBTyxHQUFFLE9BQU8sR0FBRSxJQUFLLEVBQUUsVUFBVSxFQUFFLE9BQU8sR0FBRyxFQUFFLFlBQVksRUFBRSxPQUFNLEtBQU0sR0FBRyxTQUFTLEdBQUcsU0FBUyxFQUFFLE1BQU0sRUFBRSxTQUFTLEdBQUcsRUFBRSxVQUFVLEdBQUcsU0FBUyxHQUFHLEdBQUksSUFBRyxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsVUFBVSxHQUFHLE1BQU0sR0FBRyxFQUFFLHFCQUFxQixFQUFFLGdCQUFlLElBQUssRUFBRyxLQUFJLEdBQUksR0FBRSxFQUFFLEVBQUUsR0FBRyxPQUFPLElBQUksRUFBRSxHQUFHLEdBQUcsRUFBRSxJQUFJLENBQUUsT0FBTyxVQUFTLEdBQUcsR0FBSSxHQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLFNBQVUsS0FBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLElBQUksR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEtBQUssRUFBRSxFQUFFLEdBQUcsTUFBTSxHQUFHLEtBQUssR0FBRyxHQUFHLEVBQUUsYUFBWSxHQUFJLEVBQUUsR0FBRyxFQUFFLFFBQVEsR0FBRyxRQUFRLEVBQUUsRUFBRSxRQUFRLEdBQUcsS0FBSyxHQUFHLEtBQUssR0FBRyxFQUFFLEVBQUUsUUFBUSxHQUFHLElBQUksRUFBRSxHQUFHLElBQUksRUFBRSxHQUFHLEtBQUssTUFBTSxFQUFFLEVBQUUsTUFBTSxHQUFHLElBQUksSUFBSSxFQUFFLE9BQU8sR0FBRyxlQUFlLEVBQUUsRUFBRSxNQUFNLEVBQUUsYUFBYSxFQUFFLFFBQVEsSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxjQUFjLEVBQUUsSUFBSSxFQUFFLE1BQUssRUFBRyxFQUFFLEVBQUUsSUFBRyxJQUFLLEdBQUcsRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLE1BQUssRUFBRyxFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEdBQUcsRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLE1BQUssRUFBRyxFQUFFLEVBQUUsT0FBTyxHQUFHLEVBQUUsT0FBTyxFQUFFLFdBQVcsR0FBRyxFQUFFLElBQUksRUFBRSxTQUFTLEtBQUssR0FBRyxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLE9BQVEsSUFBRyxHQUFHLEtBQUssR0FBRyxFQUFFLEVBQUUsUUFBUSxHQUFHLEtBQUssRUFBRSxHQUFHLEtBQUssTUFBTSxFQUFFLEVBQUUsTUFBTSxHQUFHLElBQUksR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFFLEVBQUcsRUFBRSxFQUFFLEdBQUcsT0FBTyxDQUFDLEdBQUksSUFBRyxFQUFFLEVBQUUsUUFBUSxHQUFHLEtBQUssTUFBTSxJQUFJLEVBQUUsR0FBRyxFQUFFLEVBQUcsSUFBRSxFQUFHLElBQUksRUFBRSxFQUFFLE1BQU0sSUFBSSxFQUFFLE9BQU8sSUFBSSxHQUFHLEtBQUssS0FBSyxFQUFFLEVBQUUsTUFBTSxHQUFHLEdBQUcsR0FBRSxJQUFLLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLFFBQVMsSUFBRyxFQUFFLEVBQUUsS0FBSyxVQUFVLEdBQUcsRUFBRSxLQUFLLEVBQUUsV0FBVyxVQUFVLEdBQUcsR0FBRyxFQUFFLElBQUksRUFBRSxTQUFTLEtBQUssSUFBSSxHQUFHLEVBQUUsRUFBRSxPQUFPLEVBQUUsS0FBSyxHQUFHLEVBQUUsUUFBUyxJQUFHLEdBQUcsR0FBSSxFQUFFLElBQUcsRUFBRSxHQUFHLEVBQUUsU0FBUyxDQUFDLEdBQUksR0FBRSxTQUFTLEdBQUcsR0FBSSxHQUFFLEVBQUUsTUFBTSxHQUFJLElBQUksRUFBSixDQUFhLEdBQUksS0FBSyxHQUFFLElBQUksRUFBRSxHQUFHLE1BQU8sSUFBSSxHQUFFLEVBQUUsR0FBRyxPQUFPLFFBQVEsR0FBRyxJQUFJLEVBQUUsRUFBRSxNQUFNLEdBQTBHLE9BQXRHLElBQUcsRUFBRSxNQUFNLEVBQUUsUUFBUSxHQUFHLElBQUksT0FBTyxFQUFFLFVBQVUsRUFBRSxHQUFHLE9BQU8sRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLEdBQUcsU0FBUyxFQUFFLE1BQU0sRUFBUyxJQUFHLEVBQUcsSUFBRyxFQUFFLEVBQUUsSUFBSSxRQUFTLElBQUcsRUFBRSxHQUFHLEVBQUUsZUFBZSxFQUFFLGlCQUFpQixFQUFFLGFBQWEsS0FBSyxHQUFHLFFBQVMsSUFBRyxHQUFHLEdBQUksR0FBRSxFQUFFLEtBQUssUUFBUSxHQUFHLEdBQUksT0FBTyxJQUFHLE1BQU0sRUFBRSxLQUFLLEtBQUssRUFBRSxXQUFXLEdBQUcsS0FBSyxJQUFJLEtBQUssRUFBRSxNQUFNLEdBQUcsR0FBRyxTQUFRLElBQUssS0FBSyxJQUFJLEVBQUUsSUFBSSxTQUFRLEdBQUksUUFBUyxJQUFHLEdBQUcsR0FBSSxHQUFFLEVBQUUsTUFBTSxHQUFJLElBQUcsRUFBRSxDQUFDLEdBQUksS0FBSyxPQUFPLEdBQUUsUUFBUSxTQUFTLEdBQUcsRUFBRSxFQUFFLE1BQU0sS0FBSSxJQUFLLEdBQUcsUUFBUyxJQUFHLEdBQUcsSUFBSSxHQUFJLE1BQUssRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxHQUFHLE1BQU0sRUFBRSxHQUFHLEtBQU0sT0FBTyxHQUFxQyxRQUFTLElBQUcsR0FBRyxNQUFPLElBQUcsRUFBRSxJQUFJLEVBQUUsVUFBVSxRQUFRLEVBQUUsUUFBOHlGLFFBQVMsSUFBRyxFQUFFLEdBQUcsSUFBSSxHQUFHLEdBQUcsRUFBRSxZQUFZLElBQUksR0FBRyxFQUFFLGVBQWUsRUFBRSxRQUFTLEdBQUUsR0FBK1EsR0FBNVEsRUFBRSxPQUFPLFNBQVMsR0FBRyxNQUFHLEtBQUksRUFBRSxPQUFpQixJQUFJLEVBQUUsU0FBdUIsRUFBRSxNQUFNLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxPQUFPLEdBQUcsRUFBRSxNQUFNLFNBQVMsR0FBRyxLQUFLLEVBQUUsUUFBUSxDQUFDLEdBQUcsY0FBYyxFQUFFLEVBQUUsUUFBUSxJQUFJLE9BQU0sQ0FBRyxJQUFHLEVBQUUsSUFBSSxPQUFNLEVBQUcsT0FBTSxHQUFJLEtBQUssT0FBTyxLQUFLLEdBQUcsTUFBTSxRQUFPLEdBQU0sSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJLEdBQUcsRUFBRSxNQUFNLFNBQVMsRUFBRSxLQUFLLE1BQU0sRUFBRSxTQUFTLG1CQUFtQixNQUFPLEtBQUksR0FBSSxHQUFFLEVBQUUsRUFBRSxFQUFFLFNBQVMsT0FBTyxFQUFFLEVBQUUsSUFBSSxDQUFDLEdBQUksR0FBRSxFQUFFLFNBQVMsRUFBRyxHQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsUUFBTyxHQUFJLEdBQUcsRUFBRSxhQUFhLElBQUksR0FBSSxHQUFFLEVBQUUsRUFBRSxFQUFFLGFBQWEsT0FBTyxFQUFFLEVBQUUsSUFBSSxDQUFDLEdBQUksR0FBRSxFQUFFLGFBQWEsR0FBRyxLQUFNLEdBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxRQUFPLE1BQU8sR0FBRyxRQUFTLEdBQUUsRUFBRSxHQUFHLEdBQUcsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxZQUFZLEdBQUcsRUFBRSxRQUFRLEVBQUUsU0FBUyxTQUFTLElBQUksRUFBRSxTQUFTLFFBQVEsSUFBSSxFQUFFLFNBQVMsR0FBRyxNQUFNLFlBQVksRUFBRSxZQUFXLEVBQUksSUFBRyxFQUFFLFlBQVcsRUFBRyxFQUFFLFNBQVMsSUFBSSxHQUFJLEdBQUUsRUFBRSxFQUFFLEVBQUUsU0FBUyxPQUFPLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxTQUFTLEdBQUcsS0FBSyxFQUFFLElBQUssSUFBRyxFQUFFLGFBQWEsSUFBSSxHQUFJLEdBQUUsRUFBRSxFQUFFLEVBQUUsYUFBYSxPQUFPLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxhQUFhLEdBQUcsTUFBTSxLQUFLLEdBQUUsSUFBcTVCLFFBQVMsSUFBRyxFQUFFLEdBQUcsR0FBSSxHQUFFLEVBQUUsWUFBWSxNQUFNLEVBQUUsR0FBRyxFQUFFLEVBQUcsS0FBSSxHQUFJLEtBQUssR0FBRSxDQUFDLEdBQUksR0FBRSxHQUFHLEVBQUUsR0FBSSxHQUFFLElBQUksRUFBRSxHQUFHLFFBQVEsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLEdBQUcsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLE1BQU8sR0FBRSxJQUFJLEVBQUUsTUFBTSxHQUFHLEdBQUcsSUFBSSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEdBQUcsR0FBRyxLQUFLLEVBQUUsRUFBRSxRQUFTLElBQUcsR0FBRyxJQUFJLEVBQUUsTUFBTSxjQUFlLElBQUcsTUFBTSxRQUFRLEdBQUcsTUFBTSxJQUFJLEVBQUUsSUFBSSxTQUFTLEdBQUcsTUFBTyxJQUFHLEtBQUssS0FBSyxLQUFLLEdBQUksSUFBSSxHQUFFLEdBQUcsS0FBSyxFQUFFLE9BQU8sRUFBRSxHQUFHLEtBQUssRUFBRSxPQUFPLEVBQUUsR0FBRyxLQUFLLEVBQUUsTUFBTSxRQUFRLEdBQUcsSUFBSyxJQUFHLEVBQUUsVUFBVSxDQUFDLEdBQUksR0FBRSxHQUFHLEVBQUUsR0FBRyxJQUFLLEtBQUksR0FBSSxLQUFLLEdBQUUsVUFBVSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksRUFBRSxLQUFLLE9BQVEsSUFBRyxVQUFVLEVBQUUsQ0FBQyxHQUFJLEdBQUUsRUFBRSxTQUFVLElBQUcsSUFBSSxPQUFPLFFBQVEsTUFBTSxRQUFRLE9BQU8sU0FBUyxHQUFHLE9BQU8sRUFBRSxLQUFLLElBQUksU0FBUyxHQUFHLE1BQU0sVUFBVSxFQUFFLFFBQVEsS0FBSyxXQUFZLEdBQUUsS0FBSyxFQUFHLE9BQU8sR0FBRSxTQUFTLEdBQUcsU0FBUyxHQUFHLE1BQU0sbUNBQW1DLEVBQUUsSUFBSSxJQUFJLEtBQUssTUFBTSxpQkFBaUIsSUFBSSxJQUFJLEdBQUcsR0FBRyxvQkFBb0IsR0FBRyxFQUFFLFVBQVUsRUFBRSxNQUFNLFdBQVcsRUFBRSxXQUFXLEVBQUUsTUFBTSxZQUFZLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxPQUFPLElBQUksTUFBTyxJQUFHLEVBQUUsRUFBRSxNQUFNLHFCQUFxQixFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsT0FBTyxJQUFJLFFBQVMsSUFBRyxHQUFHLEdBQUksR0FBRSxTQUFTLEVBQUUsR0FBSSxJQUFHLEVBQUUsTUFBTSxvQkFBb0IsQ0FBRSxJQUFJLEdBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxFQUFHLE9BQU0scUJBQXFCLEtBQUssVUFBVSxHQUFHLElBQUksS0FBSyxVQUFVLEdBQUcsZUFBZSxLQUFLLFVBQVUsR0FBRyxJQUFvbEIsUUFBUyxJQUFHLEVBQUUsR0FBRyxHQUFJLEdBQUUsR0FBSSxJQUFHLEVBQUcsUUFBTyxPQUFPLHNCQUFzQixFQUFFLEdBQUcsRUFBRSxHQUFHLGFBQWEsSUFBSSxnQkFBZ0IsRUFBRSxpQkFBaUIsUUFBUyxJQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsT0FBTyxLQUFLLEVBQUUsYUFBYSxFQUFFLGdCQUFnQixNQUFPLElBQUcsRUFBRSxFQUFHLElBQUcsRUFBRSxPQUFPLEVBQUUsY0FBYyxNQUFPLElBQUcsRUFBRSxFQUFHLElBQUcsRUFBRSxNQUFNLEVBQUUsYUFBYSxNQUFPLElBQUcsRUFBRSxFQUFHLElBQUcsRUFBRSxLQUFLLEVBQUUsWUFBWSxNQUFPLElBQUcsRUFBRSxFQUFHLElBQUcsYUFBYSxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsSUFBSSxDQUFDLEdBQUcsU0FBUyxFQUFFLElBQUksTUFBTyxVQUFTLEVBQUUsR0FBRyxHQUFJLEdBQUUsRUFBRSxVQUFVLFlBQVksRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLE1BQU0sR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsRUFBRSxPQUFPLEVBQUUsYUFBYSxJQUFJLEVBQUUsV0FBVyxPQUFPLEVBQUUsa0JBQWtCLElBQUksU0FBUyxHQUFHLE9BQU8sS0FBSyxFQUFFLEVBQUUsTUFBTSxNQUFNLEVBQUUsTUFBTSxRQUFRLEVBQUUsWUFBWSxLQUFLLEVBQUUsRUFBRSxTQUFTLFNBQTZFLFFBQWxFLElBQUksR0FBRyxJQUFJLEdBQUcsU0FBUyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksSUFBSSxFQUFFLEdBQUcsU0FBUyxJQUFJLEdBQVUsRUFBRSxLQUFLLEVBQUUsRUFBRyxJQUFJLEVBQUUsSUFBRyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsRUFBRSxHQUFHLEdBQUksR0FBRSxFQUFFLGVBQWUsS0FBSyxHQUFHLEVBQUUsR0FBRSxFQUFJLE9BQU0sTUFBTSxFQUFFLElBQUksR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxLQUFLLEVBQUUsVUFBVSxFQUFFLE9BQU8sQ0FBQyxHQUFJLEtBQUksRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLGVBQWUsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFJLElBQUksR0FBRSxFQUFFLGVBQWUsS0FBSyxHQUFHLEVBQUUsR0FBRSxFQUFJLEdBQUUsT0FBTyxFQUFFLElBQUksS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksSUFBSSxJQUFJLEdBQUksR0FBRSxFQUFFLEVBQUUsRUFBRSxXQUFXLE9BQU8sSUFBSSxFQUFFLEVBQUUsV0FBVyxHQUFHLEVBQUUsRUFBRyxPQUFPLEdBQUUsTUFBTyxJQUFHLEVBQUUsSUFBSSxTQUFTLFFBQVMsSUFBRyxFQUFFLEdBQUcsRUFBRSxpQkFBZ0IsQ0FBRyxJQUFJLEdBQUUsRUFBRSxHQUFJLE9BQU8sR0FBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxnQkFBZ0IsS0FBSyxxQkFBcUIsR0FBRyxFQUFFLEdBQUcsS0FBSyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLE9BQU8sSUFBSSxFQUFFLFlBQVksUUFBUSxJQUFJLElBQUksUUFBUyxJQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsZUFBYyxFQUFHLEVBQUUsS0FBSyxFQUFFLFlBQVksTUFBTyxJQUFHLEVBQUUsRUFBRyxJQUFHLEVBQUUsWUFBWSxDQUFDLElBQUksR0FBSSxHQUFFLEdBQUcsRUFBRSxFQUFFLE9BQU8sR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLEdBQUksT0FBTSxFQUFFLEVBQUUsT0FBTyxNQUFPLEdBQUUsTUFBTSxHQUFHLEVBQUUsR0FBRyxJQUFJLEVBQUUsU0FBUyxJQUFJLEVBQUUsSUFBSSxHQUFHLEVBQUUsR0FBRyxNQUFPLElBQUcsRUFBRSxHQUFHLFFBQVMsSUFBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLE1BQU8sR0FBRSxhQUFZLEVBQUcsUUFBUyxHQUFFLEVBQUUsRUFBRSxFQUFFLEdBQXFILFFBQVMsR0FBRSxHQUFHLE1BQU8sR0FBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEtBQUssR0FBRyxFQUFFLEdBQUcsR0FBRyxFQUFFLEdBQXBLLElBQUksRUFBRSxPQUFPLE1BQU8sSUFBRyxNQUFPLElBQUksR0FBRSxFQUFFLE9BQVEsT0FBTyxHQUFFLElBQUksSUFBSSxFQUFFLElBQUksS0FBSyxFQUFFLEVBQUUsT0FBTyxJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsRUFBRSxRQUE4RCxFQUFFLGFBQWEsUUFBUSxFQUFFLEVBQUUsR0FBRyxRQUFTLElBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFJLEdBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxVQUFVLElBQUksRUFBRSxVQUFVLEdBQUcsRUFBRSxFQUFFLFVBQVUsSUFBSSxFQUFFLFVBQVUsRUFBRyxPQUFPLEdBQUUsY0FBYSxHQUFJLEdBQUcsTUFBTSxLQUFLLEVBQUUsY0FBYyxFQUFFLEVBQUUsRUFBRSxhQUFhLEdBQUcsSUFBSSxFQUFFLEdBQUcsS0FBSyxRQUFTLElBQUcsRUFBRSxHQUFHLEdBQUksR0FBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLEdBQUcsR0FBSSxHQUFFLEVBQUUsVUFBVyxJQUFJLEVBQUosQ0FBYSxHQUFJLEdBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxlQUFlLEdBQUUsQ0FBRyxLQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxHQUFHLEdBQUUsQ0FBRyxJQUFJLEdBQUUsRUFBRSxXQUFXLEVBQUUsS0FBTSxLQUFJLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLElBQUksR0FBRSxFQUFHLEdBQUcsVUFBVSxFQUFFLEtBQUssY0FBYyxFQUFFLFFBQVEsS0FBSyxFQUFFLE1BQU0sV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLEtBQUssVUFBVSxFQUFFLE9BQU8sS0FBSyxFQUFFLElBQUksU0FBUyxFQUFFLGFBQWEsRUFBRSxJQUFJLElBQUksRUFBRSxJQUFJLEtBQUssS0FBSyxFQUFFLFVBQVUsY0FBYyxLQUFLLFVBQVUsRUFBRSxXQUFXLElBQUksTUFBTSxNQUFHLEdBQVMsRUFBRSxNQUFNLEdBQUcsR0FBRyxRQUExQixLQUErQixFQUFFLEVBQUcsS0FBSSxHQUFHLEVBQUUsS0FBSyxFQUFFLE1BQU0sR0FBRyxPQUFPLEVBQUUsSUFBSSxLQUFLLEVBQUUsTUFBTSxHQUFHLE9BQU8sRUFBRSxJQUFJLEtBQUssRUFBRSxXQUFXLEdBQUcsa0JBQWtCLEVBQUUsTUFBTSxHQUFHLGFBQWEsRUFBRSxZQUFZLEdBQUcsUUFBUSxFQUFFLElBQUksS0FBTSxLQUFJLEdBQUksR0FBRSxFQUFFLEVBQUUsRUFBRSxXQUFXLE9BQU8sSUFBSSxHQUFHLEVBQUUsV0FBVyxHQUFHLEVBQUcsSUFBRyxFQUFFLFFBQVEsR0FBRyxTQUFTLEdBQUcsRUFBRSxPQUFPLEtBQUssRUFBRSxRQUFRLEdBQUcsWUFBWSxHQUFHLEVBQUUsT0FBTyxLQUFLLEVBQUUsU0FBUyxHQUFHLEdBQUcsRUFBRSxRQUFPLEdBQUksS0FBSyxFQUFFLGVBQWUsR0FBRyxHQUFHLEVBQUUsY0FBYSxHQUFJLEtBQUssRUFBRSxhQUFhLEVBQUUsWUFBWSxHQUFHLFFBQVEsRUFBRSxXQUFXLEtBQUssRUFBRSxjQUFjLEdBQUcsU0FBUyxFQUFFLEVBQUUsR0FBRyxHQUFJLEdBQUUsRUFBRSxLQUFLLE9BQU8sS0FBSyxHQUFHLEtBQUssU0FBUyxHQUFHLEdBQUksR0FBRSxFQUFFLEVBQUcsT0FBTyxHQUFFLG1CQUFtQixFQUFFLElBQUksRUFBRSxLQUFLLEdBQUcsS0FBSyxJQUFJLEVBQUUsRUFBRyxLQUFJLEVBQUUsSUFBSSxHQUFJLEdBQUUsRUFBRSxPQUFPLEdBQUcsQ0FBQyxHQUFHLEVBQUUsV0FBVyxFQUFFLFlBQVksSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFFLENBQUcsT0FBTSxFQUFFLEtBQUssR0FBRSxHQUFJLEVBQUUsRUFBRSxPQUFPLEdBQUksR0FBRSxPQUFPLEtBQUssR0FBRyxJQUFJLFNBQVMsR0FBRyxNQUFPLElBQUcsRUFBRSxHQUFHLEtBQUssS0FBSyxJQUFLLE9BQU0sbUJBQW1CLEVBQUUsS0FBSyxFQUFFLGFBQWEsTUFBTSxHQUFHLEVBQUUsZUFBZSxTQUFTLEdBQXlCLElBQXRCLEdBQUksR0FBRSxLQUFLLEVBQUUsRUFBRSxPQUFZLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxhQUFhLEVBQUcsT0FBTyxLQUFJLEdBQUcsR0FBRyxJQUFJLEtBQUssRUFBRSxFQUFFLFlBQVksR0FBRyxLQUFLLEVBQUUsUUFBUSxHQUFHLGdCQUFnQixFQUFFLE1BQU0sTUFBTSxhQUFhLEVBQUUsTUFBTSxTQUFTLGVBQWUsRUFBRSxNQUFNLFdBQVcsTUFBTSxFQUFFLGVBQWUsQ0FBQyxHQUFJLEdBQUUsU0FBUyxFQUFFLEdBQUcsR0FBSSxHQUFFLEVBQUUsU0FBUyxFQUFHLElBQUcsR0FBRyxJQUFJLEVBQUUsS0FBSyxDQUFDLEdBQUksR0FBRSxHQUFHLEVBQUUsRUFBRSxRQUFTLE9BQU0scUNBQXFDLEVBQUUsT0FBTyxzQkFBc0IsRUFBRSxnQkFBZ0IsSUFBSSxTQUFTLEdBQUcsTUFBTSxjQUFjLEVBQUUsTUFBTSxLQUFLLEtBQUssT0FBTyxFQUFFLEVBQUcsS0FBSSxHQUFHLEVBQUUsS0FBSyxNQUFPLEdBQUUsRUFBRSxRQUFRLEtBQUssSUFBSSxJQUFJLEVBQUUsZUFBZSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsSUFBSSxLQUFLLEdBQUcsRUFBRSxjQUFjLEtBQUssRUFBRSxXQUFXLEVBQUUsRUFBRSxTQUFTLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxFQUFFLGNBQWMsSUFBSSxFQUFFLFFBQVMsSUFBRyxHQUFHLE1BQU8sS0FBSSxFQUFFLE9BQU8sU0FBUyxFQUFFLEtBQUssRUFBRSxTQUFTLEtBQUssS0FBSyxRQUFTLElBQUcsRUFBRSxHQUFHLEdBQUksR0FBRSxFQUFFLFNBQVMsYUFBYyxJQUFHLEVBQUUsS0FBSyxFQUFFLGNBQWMsRUFBRSxNQUFPLElBQUcsRUFBRSxFQUFFLEdBQUcsT0FBUSxJQUFHLEVBQUUsTUFBTSxFQUFFLGFBQWEsTUFBTyxJQUFHLEVBQUUsRUFBRSxHQUFJLElBQUksR0FBRSxFQUFFLFlBQVksR0FBRyxHQUFHLE9BQU8sRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLGFBQWEsYUFBYSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUcsTUFBTSxHQUFHLEVBQUUsSUFBSSxhQUFhLGFBQWEsR0FBRyxFQUFFLElBQUksWUFBWSxHQUFHLEVBQUUsSUFBSSxJQUFJLEVBQUUsRUFBRSxHQUFHLGFBQWMsT0FBTSxTQUFTLEVBQUUsWUFBWSxhQUFhLE9BQU8sRUFBRSxFQUFFLElBQUksUUFBUyxJQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFJLEdBQUUsRUFBRSxRQUFTLElBQUcsRUFBRSxPQUFPLENBQUMsR0FBSSxHQUFFLEVBQUUsRUFBRyxJQUFHLElBQUksRUFBRSxRQUFRLEVBQUUsS0FBSyxhQUFhLEVBQUUsS0FBSyxTQUFTLEVBQUUsSUFBSSxDQUFDLEdBQUksR0FBRSxFQUFFLEVBQUUsZUFBZSxHQUFHLEtBQUssS0FBSyxFQUFHLE9BQU0sSUFBSSxHQUFHLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBSSxHQUFFLEVBQUUsU0FBUyxFQUFFLEdBQUcsSUFBSSxHQUFJLEdBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sSUFBSSxDQUFDLEdBQUksR0FBRSxFQUFFLEVBQUcsSUFBRyxJQUFJLEVBQUUsS0FBSyxDQUFDLEdBQUcsR0FBRyxJQUFJLEVBQUUsY0FBYyxFQUFFLGFBQWEsS0FBSyxTQUFTLEdBQUcsTUFBTyxJQUFHLEVBQUUsU0FBUyxDQUFDLEVBQUUsQ0FBRSxRQUFPLEVBQUUsSUFBSSxFQUFFLGNBQWMsRUFBRSxhQUFhLEtBQUssU0FBUyxHQUFHLE1BQU8sR0FBRSxFQUFFLFlBQVksRUFBRSxJQUFJLE1BQU8sSUFBRyxFQUFFLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRSxHQUFHLEVBQUcsT0FBTSxJQUFJLEVBQUUsSUFBSSxTQUFTLEdBQUcsTUFBTyxHQUFFLEVBQUUsS0FBSyxLQUFLLEtBQUssS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLFFBQVMsSUFBRyxHQUFHLFdBQU8sS0FBUyxFQUFFLEtBQUssYUFBYSxFQUFFLEtBQUssU0FBUyxFQUFFLElBQUksUUFBUyxJQUFHLEVBQUUsR0FBRyxNQUFPLEtBQUksRUFBRSxLQUFLLEdBQUcsRUFBRSxHQUFHLElBQUksRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLEVBQUUsTUFBTSxLQUFLLFVBQVUsRUFBRSxNQUFNLEtBQUssT0FBTyxLQUFLLEVBQUUsR0FBRyxLQUFLLEVBQUUsV0FBVyxHQUFHLEtBQUssVUFBVSxFQUFFLFFBQVEsR0FBSSxJQUFJLEdBQUUsRUFBRSxRQUFTLElBQUcsR0FBRyxJQUFJLEdBQUksR0FBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sSUFBSSxDQUFDLEdBQUksR0FBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsTUFBTyxHQUFFLFFBQVEsR0FBRyxFQUFFLEtBQUssSUFBSSxFQUFFLElBQUksR0FBRyxJQUFJLEVBQUUsS0FBSyxLQUFLLEVBQUUsSUFBSSxNQUFPLEdBQUUsSUFBSSxFQUFFLE1BQU0sR0FBRyxHQUFHLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sR0FBRyxHQUFHLEtBQUssRUFBRSxRQUFTLElBQUcsR0FBRyxNQUFPLEdBQUUsUUFBUSxVQUFVLFdBQVcsUUFBUSxVQUFVLFdBQStQLFFBQVMsSUFBRyxFQUFFLEdBQUcsSUFBSSxNQUFPLElBQUksVUFBUyxHQUFHLE1BQU0sR0FBRyxNQUFPLEdB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QU8saUJBQWlCLGVBQWUsS0FBSyxJQUFJLE1BQU0sSUFBSSxHQUFJLElBQUcsV0FBVyxXQUFPLEtBQVMsSUFBSSxHQUFHLElBQUksR0FBRyxtQkFBb0IsU0FBUyxPQUFPLFNBQVMsV0FBVyxPQUFPLFFBQVEsSUFBSSxTQUFVLEdBQUcsR0FBRyxHQUFHLE9BQU8sNkJBQTZHLEdBQUcsR0FBRyxtQkFBb0IsU0FBUSxHQUFHLFNBQVMsbUJBQW9CLFVBQVMsR0FBRyxRQUFRLFFBQVMsSUFBRyxtQkFBb0IsTUFBSyxHQUFHLEtBQUssSUFBSSxXQUFXLFFBQVMsS0FBSSxLQUFLLElBQUksT0FBTyxPQUFPLE1BQU0sTUFBTyxHQUFFLFVBQVUsSUFBSSxTQUFTLEdBQUcsT0FBTSxJQUFLLEtBQUssSUFBSSxJQUFJLEVBQUUsVUFBVSxJQUFJLFNBQVMsR0FBRyxLQUFLLElBQUksSUFBRyxHQUFJLEVBQUUsVUFBVSxNQUFNLFdBQVcsS0FBSyxJQUFJLE9BQU8sT0FBTyxPQUFPLElBQUssSUFBSSxJQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsV0FBVyxLQUFLLEdBQUcsS0FBSyxLQUFLLFFBQVMsSUFBRyxVQUFVLE9BQU8sU0FBUyxHQUFHLEtBQUssS0FBSyxLQUFLLElBQUksR0FBRyxVQUFVLFVBQVUsU0FBUyxHQUFHLEVBQUUsS0FBSyxLQUFLLElBQUksR0FBRyxVQUFVLE9BQU8sV0FBVyxHQUFHLFFBQVEsR0FBRyxPQUFPLE9BQU8sT0FBTyxHQUFHLFVBQVUsT0FBTyxXQUFXLElBQUksR0FBSSxHQUFFLEtBQUssS0FBSyxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsSUFBSSxFQUFFLEdBQUcsVUFBVSxHQUFHLE9BQU8sSUFBSyxJQUFJLE9BQWlHLEdBQUcsU0FBUyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsS0FBSyxJQUFJLEVBQUUsS0FBSyxLQUFLLEVBQUUsS0FBSyxTQUFTLEVBQUUsS0FBSyxLQUFLLEVBQUUsS0FBSyxJQUFJLEVBQUUsS0FBSyxPQUFHLEdBQU8sS0FBSyxRQUFRLEVBQUUsS0FBSyxjQUFVLEdBQU8sS0FBSyxjQUFVLEdBQU8sS0FBSyxjQUFVLEdBQU8sS0FBSyxJQUFJLEdBQUcsRUFBRSxJQUFJLEtBQUssaUJBQWlCLEVBQUUsS0FBSyxzQkFBa0IsR0FBTyxLQUFLLFdBQU8sR0FBTyxLQUFLLEtBQUksRUFBRyxLQUFLLFVBQVMsRUFBRyxLQUFLLGNBQWEsRUFBRyxLQUFLLFdBQVUsRUFBRyxLQUFLLFVBQVMsRUFBRyxLQUFLLFFBQU8sRUFBRyxLQUFLLGFBQWEsRUFBRSxLQUFLLGNBQVUsR0FBTyxLQUFLLG9CQUFtQixHQUFJLElBQUksT0FBTyxjQUFhLEdBQUssSUFBRyxNQUFNLElBQUksV0FBVyxNQUFPLE1BQUssbUJBQW1CLE9BQU8saUJBQWlCLEdBQUcsVUFBVSxHQUFJLElBQUksSUFBRyxTQUFTLE9BQUcsS0FBUyxJQUFJLEVBQUUsR0FBSSxJQUFJLEdBQUUsR0FBSSxHQUFHLE9BQU8sR0FBRSxLQUFLLEVBQUUsRUFBRSxXQUFVLEVBQUcsR0FBaVksR0FBRyxNQUFNLFVBQVUsR0FBRyxPQUFPLE9BQU8sS0FBSyxPQUFPLE1BQU0sUUFBUSxVQUFVLFNBQVMsT0FBTyxXQUFXLFFBQVEsU0FBUyxHQUFHLEdBQUksR0FBRSxHQUFHLEVBQUcsR0FBRSxHQUFHLEVBQUUsV0FBVyxJQUFJLEdBQUksTUFBSyxFQUFFLFVBQVUsT0FBTyxLQUFLLEVBQUUsR0FBRyxVQUFVLEVBQUcsSUFBSSxHQUFFLEVBQUUsRUFBRSxNQUFNLEtBQUssR0FBRyxFQUFFLEtBQUssTUFBTyxRQUFPLEdBQUcsSUFBSSxPQUFPLElBQUksVUFBVSxFQUFFLENBQUUsTUFBTSxLQUFJLFNBQVMsRUFBRSxFQUFFLE1BQU0sR0FBRyxNQUFPLElBQUcsRUFBRSxhQUFhLEdBQUcsRUFBRSxJQUFJLFNBQVMsS0FBTSxJQUFJLElBQUcsT0FBTyxvQkFBb0IsSUFBSSxJQUFHLEVBQTJCLEdBQUcsU0FBUyxHQUFHLEdBQUksRUFBRSxNQUFLLE1BQU0sRUFBRSxLQUFLLElBQUksR0FBSSxJQUFHLEtBQUssUUFBUSxFQUFFLEVBQUUsRUFBRSxTQUFTLE1BQU0sTUFBTSxRQUFRLElBQUksR0FBRyxFQUFFLEdBQUcsRUFBRSxVQUFVLEdBQUcsU0FBUyxFQUFFLEVBQUUsR0FBRyxJQUFJLEdBQUksR0FBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxJQUFJLENBQUMsR0FBSSxHQUFFLEVBQUUsRUFBRyxHQUFFLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxHQUFHLElBQUksS0FBSyxhQUFhLElBQUksS0FBSyxLQUFLLEdBQWlxQyxJQUFHLFVBQVUsS0FBSyxTQUFTLEdBQUcsSUFBSSxHQUFJLEdBQUUsT0FBTyxLQUFLLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLElBQUksR0FBRyxFQUFFLEVBQUUsS0FBSyxHQUFHLFVBQVUsYUFBYSxTQUFTLEdBQUcsSUFBSSxHQUFJLEdBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsSUFBSSxHQUFHLEVBQUUsSUFBSyxJQUFJLElBQUcsRUFBRSxxQkFBNnJCLElBQUcsS0FBSyxTQUFTLEVBQUUsRUFBRSxHQUFHLE1BQU8sR0FBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsa0JBQW1CLEdBQUUsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLFFBQVEsU0FBUyxHQUFHLEdBQUcsR0FBRyxLQUFLLEVBQUUsUUFBUSxTQUFTLEdBQUcsR0FBRyxFQUFFLEtBQUssS0FBSyxHQUFHLE1BQU0sU0FBUyxFQUFFLEVBQUUsRUFBRSxHQUFHLEdBQUcsSUFBSSxJQUFJLE1BQUUsSUFBUSxJQUFJLElBQUksTUFBRSxLQUFTLEVBQUUsTUFBTyxRQUFPLE9BQU8sR0FBRyxLQUFNLEtBQUksRUFBRSxNQUFPLEVBQUUsSUFBSSxLQUFLLEtBQUksR0FBSSxLQUFLLEdBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFJLEdBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFHLEtBQUksTUFBTSxRQUFRLEtBQUssR0FBRyxJQUFJLEVBQUUsR0FB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QVcsTUFBTyxJQUFHLFFBQW9kLEdBQUksSUFBRyxFQUFFLEdBQUcsU0FBUyxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsS0FBSyxHQUFHLEVBQUUsSUFBSSxFQUFFLFNBQVMsTUFBTSxFQUFFLFVBQVUsS0FBSyxNQUFNLEdBQUcsS0FBSyxPQUFPLEVBQUUsS0FBSyxLQUFLLE9BQU8sRUFBRSxLQUFLLEtBQUssT0FBTyxFQUFFLEtBQUssS0FBSyxPQUFPLEVBQUUsS0FBSyxLQUFLLE9BQU8sRUFBRSxRQUFRLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssTUFBSyxFQUFHLEtBQUssR0FBRyxFQUFFLEtBQUssS0FBSyxHQUFHLEtBQUssUUFBTyxFQUFHLEtBQUssTUFBTSxLQUFLLEtBQUssS0FBSyxRQUFRLEtBQUssV0FBVyxLQUFLLE9BQU8sR0FBSSxJQUFHLEtBQUssVUFBVSxHQUFJLElBQUcsS0FBSyxXQUFXLEdBQUcsa0JBQW1CLEdBQUUsS0FBSyxPQUFPLEdBQUcsS0FBSyxPQUFPLFNBQVMsR0FBRyxJQUFJLEVBQUUsS0FBSyxHQUFHLENBQUMsR0FBSSxHQUFFLEVBQUUsTUFBTSxJQUFLLE9BQU8sVUFBUyxHQUFHLElBQUksR0FBSSxHQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sSUFBSSxDQUFDLElBQUksRUFBRSxNQUFPLEdBQUUsRUFBRSxFQUFFLElBQUksTUFBTyxNQUFLLEdBQUcsS0FBSyxTQUFTLEtBQUssT0FBTyxJQUFJLEtBQUssTUFBTSxLQUFLLFNBQUssR0FBTyxLQUFLLE1BQU8sSUFBRyxVQUFVLElBQUksV0FBVyxHQUFJLEVBQUUsSUFBRyxLQUFNLElBQUksR0FBRSxLQUFLLEVBQUcsS0FBSSxFQUFFLEtBQUssT0FBTyxLQUFLLEVBQUUsR0FBRyxNQUFNLEdBQUcsSUFBSSxLQUFLLEtBQUssS0FBTSxFQUFFLElBQUcsRUFBRSxFQUFFLHVCQUF1QixLQUFLLFdBQVcsS0FBSyxRQUFRLEtBQUssTUFBTSxHQUFHLEdBQUcsS0FBSyxLQUFLLGNBQWMsTUFBTyxJQUFHLEdBQUcsVUFBVSxPQUFPLFNBQVMsR0FBRyxHQUFJLEdBQUUsRUFBRSxFQUFHLE1BQUssVUFBVSxJQUFJLEtBQUssS0FBSyxVQUFVLElBQUksR0FBRyxLQUFLLFFBQVEsS0FBSyxHQUFHLEtBQUssT0FBTyxJQUFJLElBQUksRUFBRSxPQUFPLFFBQVEsR0FBRyxVQUFVLFlBQVksV0FBVyxJQUFJLEdBQUksR0FBRSxLQUFLLEtBQUssT0FBTyxLQUFLLENBQUMsR0FBSSxHQUFFLEtBQUssS0FBSyxFQUFHLE1BQUssVUFBVSxJQUFJLEVBQUUsS0FBSyxFQUFFLFVBQVUsTUFBTSxHQUFJLEdBQUUsS0FBSyxNQUFPLE1BQUssT0FBTyxLQUFLLFVBQVUsS0FBSyxVQUFVLEVBQUUsS0FBSyxVQUFVLFFBQVEsRUFBRSxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssUUFBUSxLQUFLLFFBQVEsRUFBRSxLQUFLLFFBQVEsT0FBTyxHQUFHLEdBQUcsVUFBVSxPQUFPLFdBQVcsS0FBSyxLQUFLLEtBQUssT0FBTSxFQUFHLEtBQUssS0FBSyxLQUFLLE1BQU0sU0FBUyxHQUFHLEdBQUksR0FBRSxFQUFFLEVBQUcsSUFBRyxNQUFNLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFHLEVBQUcsR0FBRyxDQUFDLElBQUksR0FBSSxHQUFFLEdBQUcsT0FBTyxFQUFFLEVBQUUsSUFBSSxHQUFHLEdBQUcsR0FBRyxFQUFFLElBQUksR0FBSSxJQUFHLE9BQU8sRUFBRSxFQUFFLEVBQUUsT0FBUSxJQUFHLEtBQUssRUFBRyxNQUFLLElBQUcsRUFBRyxHQUFHLE9BQU8sT0FBTyxHQUFHLFVBQVUsSUFBSSxXQUFXLEdBQUcsS0FBSyxPQUFPLENBQUMsR0FBSSxHQUFFLEtBQUssS0FBTSxJQUFHLElBQUksS0FBSyxPQUFPLEVBQUUsSUFBSSxLQUFLLEtBQUssQ0FBQyxHQUFJLEdBQUUsS0FBSyxLQUFNLElBQUcsS0FBSyxNQUFNLEVBQUUsS0FBSyxLQUFLLElBQUksS0FBSyxHQUFHLEtBQUssS0FBSyxHQUFHLEVBQUUsR0FBRyxNQUFNLEdBQUcsR0FBRyxFQUFFLEtBQUssR0FBRyx5QkFBeUIsS0FBSyxXQUFXLFNBQVUsTUFBSyxHQUFHLEtBQUssS0FBSyxHQUFHLEVBQUUsTUFBTSxHQUFHLFVBQVUsU0FBUyxXQUFXLEtBQUssTUFBTSxLQUFLLE1BQU0sS0FBSyxPQUFNLEdBQUksR0FBRyxVQUFVLE9BQU8sV0FBVyxJQUFJLEdBQUksR0FBRSxLQUFLLEtBQUssT0FBTyxLQUFLLEtBQUssS0FBSyxHQUFHLFVBQVUsR0FBRyxVQUFVLFNBQVMsV0FBVyxHQUFHLEtBQUssT0FBTyxDQUFDLEtBQUssR0FBRyxtQkFBbUIsRUFBRSxLQUFLLEdBQUcsVUFBVSxLQUFNLEtBQUksR0FBSSxHQUFFLEtBQUssS0FBSyxPQUFPLEtBQUssS0FBSyxLQUFLLEdBQUcsVUFBVSxLQUFNLE1BQUssUUFBTyxHQUFLLElBQUksS0FBSSxZQUFXLEVBQUcsY0FBYSxFQUFHLElBQUksRUFBRSxJQUFJLEdBQWl2QyxJQUFJLE1BQUssR0FBaWYsR0FBRyxHQUF3OEMsU0FBUyxHQUFHLEVBQUUsVUFBVSxNQUFNLFNBQVMsR0FBRyxHQUFJLEdBQUUsSUFBSyxHQUFFLEtBQUssS0FBSyxFQUFFLFFBQU8sRUFBRyxHQUFHLEVBQUUsYUFBYSxTQUFTLEVBQUUsR0FBRyxHQUFJLEdBQUUsRUFBRSxTQUFTLE9BQU8sT0FBTyxFQUFFLFlBQVksU0FBUyxFQUFFLEVBQUUsWUFBYSxHQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsYUFBYSxDQUFFLElBQUksR0FBRSxFQUFFLGdCQUFpQixHQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsaUJBQWlCLEVBQUUsVUFBVSxFQUFFLGdCQUFnQixFQUFFLFNBQVMsRUFBRSxjQUFjLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGtCQUFrQixFQUFFLEdBQUcsRUFBRSxTQUFTLEdBQUcsR0FBRyxFQUFFLGFBQWEsTUFBTSxHQUFHLEVBQUUsYUFBYSxFQUFFLEVBQUUsTUFBTSxFQUFFLFNBQVMsR0FBRyxHQUFJLEdBQUUsRUFBRSxTQUFTLEVBQUUsRUFBRSxNQUFPLElBQUcsSUFBSSxFQUFFLFNBQVMsQ0FBQyxLQUFLLEVBQUUsU0FBUyxVQUFVLEVBQUUsU0FBUyxFQUFFLEVBQUUsT0FBUSxHQUFFLFVBQVUsS0FBSyxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUsYUFBYSxFQUFFLFNBQVMsRUFBRSxTQUFTLEtBQUssRUFBRSxVQUFVLEtBQUssRUFBRSxpQkFBZ0IsRUFBRyxFQUFFLFlBQVcsRUFBRyxFQUFFLGNBQWEsRUFBRyxFQUFFLG1CQUFrQixHQUFJLEdBQUcsU0FBUyxHQUFHLEVBQUUsUUFBUSxPQUFPLE9BQU8sTUFBTSxFQUFFLGVBQWMsQ0FBRyxJQUFJLEdBQUUsRUFBRSxTQUFTLGdCQUFpQixJQUFHLEdBQUcsRUFBRSxJQUFJLEdBQUcsU0FBUyxHQUFHLEVBQUUsT0FBTyxLQUFLLEVBQUUsYUFBYTttQkFBSyxJQUFJLEdBQUUsRUFBRSxTQUFTLEVBQUUsRUFBRSxPQUFPLEVBQUUsYUFBYSxFQUFFLEdBQUcsRUFBRSxPQUFRLEdBQUUsT0FBTyxHQUFHLEVBQUUsZ0JBQWdCLEdBQUcsRUFBRSxhQUFhLEVBQUUsRUFBRSxHQUFHLFNBQVMsRUFBRSxFQUFFLEVBQUUsR0FBRyxNQUFPLElBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFFLElBQUssRUFBRSxlQUFlLFNBQVMsRUFBRSxFQUFFLEVBQUUsR0FBRyxNQUFPLElBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFFLEdBQUssSUFBSSxHQUFFLEdBQUcsRUFBRSxJQUFLLElBQUcsRUFBRSxTQUFTLEdBQUcsRUFBRSxPQUFPLEVBQUUsTUFBSyxHQUFJLEdBQUcsRUFBRSxhQUFhLEVBQUUsa0JBQWtCLEVBQUUsTUFBSyxJQUFLLEdBQUcsR0FBRyxFQUFFLGdCQUFnQixTQUFTLEdBQUcsR0FBSSxHQUFFLEdBQUcsRUFBRSxTQUFTLE9BQU8sRUFBRyxLQUFJLElBQUcsR0FBSSxPQUFPLEtBQUssR0FBRyxRQUFRLFNBQVMsR0FBRyxHQUFHLEVBQUUsRUFBRSxFQUFFLE1BQU0sSUFBRyxLQUFNLEdBQUcsR0FBRyxHQUFHLFNBQVMsR0FBRyxHQUFJLEdBQUUsRUFBRSxTQUFTLE9BQVEsS0FBSSxFQUFFLFVBQVUsa0JBQW1CLEdBQUUsRUFBRSxLQUFLLEdBQUcsSUFBSSxHQUFHLEdBQUcsRUFBRSxXQUFXLEVBQUUsU0FBUyxJQUFJLEVBQUUsT0FBTyxFQUFFLFNBQVMsTUFBTSxJQUFJLFNBQVMsR0FBRyxHQUFJLElBQUcsSUFBSSxXQUFXLE1BQU8sTUFBSyxRQUFRLEdBQUcsSUFBSSxXQUFXLE1BQU8sTUFBSyxRQUFTLFFBQU8sZUFBZSxFQUFFLFVBQVUsUUFBUSxHQUFHLE9BQU8sZUFBZSxFQUFFLFVBQVUsU0FBUyxHQUFHLEVBQUUsVUFBVSxLQUFLLEdBQUcsRUFBRSxVQUFVLFFBQVEsR0FBRyxFQUFFLFVBQVUsT0FBTyxTQUFTLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLE1BQU8sSUFBRyxLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsT0FBTyxNQUFLLENBQUcsSUFBSSxHQUFFLEdBQUksSUFBRyxLQUFLLEVBQUUsRUFBRSxFQUFHLElBQUcsRUFBRSxVQUFVLElBQUksRUFBRSxLQUFLLEtBQUssRUFBRSxPQUFPLE1BQU0sR0FBRyxHQUFHLEVBQUUsS0FBSyxtQ0FBbUMsRUFBRSxXQUFXLEtBQUssTUFBTyxZQUFXLEVBQUUsY0FBYyxJQUFJLFNBQVMsR0FBRyxHQUFJLEdBQUUsUUFBUyxHQUFFLFVBQVUsSUFBSSxTQUFTLEVBQUUsR0FBRyxHQUFJLEdBQUUsSUFBSyxJQUFHLE1BQU0sUUFBUSxHQUFHLElBQUksR0FBSSxHQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxRQUFRLEVBQUUsUUFBUSxLQUFLLEVBQUUsUUFBUSxRQUFRLEtBQUssR0FBRyxFQUFFLEtBQUssS0FBSyxFQUFFLGVBQWMsRUFBSSxPQUFPLElBQUcsRUFBRSxVQUFVLE1BQU0sU0FBUyxFQUFFLEdBQWMsUUFBUyxLQUFJLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsV0FBOUMsR0FBSSxHQUFFLElBQW1ELE9BQU8sR0FBRSxHQUFHLEVBQUUsRUFBRSxJQUFJLEVBQUUsR0FBRyxHQUFHLEVBQUUsVUFBVSxLQUFLLFNBQVMsRUFBRSxHQUFHLEdBQUksR0FBRSxJQUFLLEtBQUksVUFBVSxPQUFPLE1BQU8sR0FBRSxRQUFRLE9BQU8sT0FBTyxNQUFNLENBQUUsSUFBRyxNQUFNLFFBQVEsR0FBRyxDQUFDLElBQUksR0FBSSxHQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFHLE9BQU8sR0FBRSxHQUFJLEdBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRyxLQUFJLEVBQUUsTUFBTyxFQUFFLEtBQUksRUFBRSxNQUFPLEdBQUUsUUFBUSxHQUFHLEtBQUssQ0FBRSxLQUFJLEdBQUksR0FBRSxFQUFFLE9BQU8sS0FBSyxJQUFJLEVBQUUsRUFBRSxNQUFNLEdBQUcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxFQUFHLE9BQU0sTUFBTyxJQUFHLEVBQUUsVUFBVSxNQUFNLFNBQVMsR0FBRyxHQUFJLEdBQUUsS0FBSyxRQUFRLEVBQUcsSUFBRyxFQUFFLENBQUMsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLEdBQUcsQ0FBRSxLQUFJLEdBQUksR0FBRSxFQUFFLFVBQVUsR0FBRyxFQUFFLHNCQUFzQixFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxJQUFJLEdBQUcsRUFBRSxHQUFHLEtBQUssRUFBRSxLQUFLLEdBQUcsTUFBTyxRQUFPLElBQUksU0FBUyxHQUFHLEVBQUUsVUFBVSxRQUFRLFNBQVMsRUFBRSxHQUFHLEdBQUksR0FBRSxLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFHLEdBQUUsT0FBTyxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLEdBQUUsR0FBSSxJQUFJLElBQUksRUFBRSxRQUFRLE1BQU0sRUFBRSxNQUFNLEVBQUUsSUFBSSxRQUFRLEdBQUcsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxRQUFRLFNBQVMsRUFBRSxRQUFRLElBQUksRUFBRSxNQUFNLEVBQUUsVUFBVSxhQUFhLFdBQVcsS0FBSyxVQUFVLEtBQUssU0FBUyxVQUFVLEVBQUUsVUFBVSxTQUFTLFdBQVcsR0FBSSxHQUFFLElBQUssS0FBSSxFQUFFLGtCQUFrQixDQUFDLEdBQUcsRUFBRSxpQkFBaUIsRUFBRSxtQkFBa0IsQ0FBRyxJQUFJLEdBQUUsRUFBRSxTQUFTLEdBQUcsRUFBRSxtQkFBbUIsRUFBRSxTQUFTLFVBQVUsRUFBRSxFQUFFLFVBQVUsR0FBRyxFQUFFLFVBQVUsRUFBRSxTQUFTLFVBQVcsS0FBSSxHQUFJLEdBQUUsRUFBRSxVQUFVLE9BQU8sS0FBSyxFQUFFLFVBQVUsR0FBRyxVQUFXLEdBQUUsTUFBTSxRQUFRLEVBQUUsTUFBTSxPQUFPLFVBQVUsRUFBRSxjQUFhLEVBQUcsRUFBRSxVQUFVLEVBQUUsT0FBTyxNQUFNLEdBQUcsRUFBRSxhQUFhLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxJQUFJLFFBQVEsTUFBTSxFQUFFLFNBQVMsRUFBRSxPQUFPLE9BQU8sU0FBUyxJQUFJLFNBQVMsR0FBRyxHQUFHLEVBQUUsV0FBVyxFQUFFLFVBQVUsVUFBVSxTQUFTLEdBQUcsTUFBTyxJQUFHLEVBQUUsT0FBTyxFQUFFLFVBQVUsUUFBUSxXQUFXLEdBQUksR0FBRSxFQUFFLEtBQUssRUFBRSxFQUFFLFNBQVMsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLFlBQWEsS0FBSSxFQUFFLGFBQWEsR0FBRyxFQUFFLEtBQUssWUFBWSxFQUFFLE9BQU8sRUFBRSxlQUFlLEVBQUUsT0FBTyxDQUFFLEtBQUksR0FBRyxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLGdCQUFnQixNQUFNLEdBQUcsR0FBRyxFQUFFLEVBQUUsVUFBVSxFQUFFLEVBQUUsT0FBTyxRQUFRLEdBQUcsS0FBSyxNQUFPLE9BQU0sUUFBUSxJQUFJLElBQUksRUFBRSxTQUFTLEVBQUUsRUFBRSxJQUFJLFlBQWEsTUFBSyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsSUFBSSxHQUFJLElBQUksS0FBSSxPQUFPLE9BQU8sT0FBTyxJQUFJLFdBQVcsS0FBSyxhQUFhLFVBQVMsRUFBRyxPQUFPLFFBQVEsR0FBRyxRQUFRLEdBQUcsS0FBSyxPQUFPLFNBQVMsUUFBUSxXQUFXLEtBQUssTUFBTSxPQUFPLE9BQU8sTUFBTSxLQUFLLFNBQVMsVUFBVSxXQUFXLElBQUksR0FBSSxLQUFLLE1BQUssTUFBTSxHQUFHLEtBQUssTUFBTSxFQUFFLEtBQUssT0FBTyxRQUFRLFdBQVcsR0FBSSxHQUFFLElBQUssTUFBSyxPQUFPLFVBQVUsU0FBUyxHQUFHLEdBQUcsRUFBRSxTQUFTLEdBQUcsTUFBTyxJQUFHLEVBQUUsT0FBTyxLQUFLLE9BQU8sVUFBVSxTQUFTLEdBQUcsR0FBRyxFQUFFLFNBQVMsR0FBRyxPQUFPLEdBQUcsRUFBRSxRQUFRLE9BQU8sV0FBVyxHQUFJLEdBQUUsS0FBSyxPQUFPLFFBQVEsRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEVBQUUsZ0JBQWlCLElBQUcsRUFBRSxDQUFDLEdBQUksR0FBRSxHQUFHLEdBQUcsRUFBRSxLQUFLLFFBQVEsRUFBRSxLQUFLLE9BQVEsSUFBRyxLQUFLLElBQUksR0FBRyxFQUFFLEtBQUssR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLE1BQU8sRUFBRSxJQUFJLEdBQUUsS0FBSyxNQUFNLEVBQUUsS0FBSyxLQUFLLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxLQUFLLEtBQUssRUFBRSxJQUFJLEtBQUssRUFBRSxJQUFJLElBQUksRUFBRSxHQUFJLEdBQUUsSUFBSSxFQUFFLGtCQUFrQixFQUFFLEdBQUcsa0JBQWtCLEVBQUUsRUFBRSxHQUFHLEVBQUUsS0FBSyxLQUFLLEVBQUUsR0FBRyxFQUFFLEVBQUUsS0FBSyxHQUFHLEtBQUssS0FBSyxFQUFFLE9BQU8sU0FBUyxLQUFLLE1BQU0sR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLEtBQUssU0FBUyxFQUFFLEtBQUssV0FBVSxFQUFHLE1BQU8sSUFBRyxHQUFHLEVBQUUsT0FBTyxTQUFTLEdBQUcsR0FBSSxJQUFHLElBQUksV0FBVyxNQUFPLElBQUksUUFBTyxlQUFlLEVBQUUsU0FBUyxHQUFHLEVBQUUsTUFBTSxLQUFLLEdBQUcsT0FBTyxFQUFFLGFBQWEsR0FBRyxlQUFlLElBQUksRUFBRSxJQUFJLEdBQUcsRUFBRSxPQUFPLEdBQUcsRUFBRSxTQUFTLEdBQUcsRUFBRSxXQUFXLFNBQVMsR0FBRyxNQUFPLElBQUcsR0FBRyxHQUFHLEVBQUUsUUFBUSxPQUFPLE9BQU8sTUFBTSxFQUFFLFFBQVEsU0FBUyxHQUFHLEVBQUUsUUFBUSxFQUFFLEtBQUssT0FBTyxPQUFPLFFBQVEsRUFBRSxRQUFRLE1BQU0sRUFBRSxFQUFFLEVBQUUsUUFBUSxXQUFXLElBQUksU0FBUyxHQUFHLEVBQUUsSUFBSSxTQUFTLEdBQUcsR0FBSSxHQUFFLEtBQUssb0JBQW9CLEtBQUsscUJBQXNCLElBQUcsRUFBRSxRQUFRLElBQUksRUFBRSxNQUFPLEtBQUssSUFBSSxHQUFFLEVBQUUsVUFBVSxFQUFHLE9BQU8sR0FBRSxRQUFRLE1BQU0sa0JBQW1CLEdBQUUsUUFBUSxFQUFFLFFBQVEsTUFBTSxFQUFFLEdBQUcsa0JBQW1CLElBQUcsRUFBRSxNQUFNLEtBQUssR0FBRyxFQUFFLEtBQUssR0FBRyxPQUFPLEdBQUcsU0FBUyxHQUFHLEVBQUUsTUFBTSxTQUFTLEdBQUcsTUFBTyxNQUFLLFFBQVEsR0FBRyxLQUFLLFFBQVEsR0FBRyxPQUFPLEdBQUcsR0FBRyxHQUFHLFNBQVMsR0FBRyxFQUFFLFFBQVEsU0FBUyxHQUFHLEVBQUUsR0FBRyxTQUFTLEVBQUUsR0FBRyxNQUFPLElBQUcsY0FBYyxHQUFHLEVBQUUsS0FB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QUUsRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLElBQUksUUFBUyxHQUFFLEVBQUUsRUFBRSxHQUFHLEdBQUcsTUFBTSxRQUFRLEdBQUcsSUFBSSxHQUFJLEdBQUUsRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxJQUFJLE1BQUssRUFBRyxFQUFFLE9BQVEsR0FBRSxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFFLGVBQWUsT0FBTyxFQUFFLFFBQVEsUUFBUyxHQUFFLEdBQUcsS0FBSyxFQUFFLG1CQUFtQixFQUFFLEVBQUUsa0JBQWtCLE1BQU8sT0FBTyxHQUFFLEVBQUUsS0FBSyxRQUFTLEdBQUUsRUFBRSxHQUFHLElBQUksR0FBSSxHQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sU0FBUyxFQUFFLEVBQUUsT0FBTyxHQUFHLEdBQUcsRUFBRyxHQUFFLEVBQUUsRUFBRSxLQUFLLFFBQVEsRUFBRSxFQUFFLFNBQVMsRUFBRSxPQUFPLEdBQUcsR0FBRyxFQUFFLEVBQUUsU0FBUyxFQUFFLEtBQUssSUFBSSxRQUFTLEdBQUUsR0FBRyxHQUFJLEVBQUUsSUFBRyxFQUFFLEVBQUUsRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLElBQUksT0FBUSxLQUFJLEdBQUksR0FBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRSxTQUFTLFdBQVcsRUFBRSxjQUFjLEVBQUUsSUFBSSxHQUFHLEVBQUUsRUFBRSxNQUFPLEdBQUUsRUFBRSxLQUFLLElBQUksRUFBRSxTQUFTLElBQUksRUFBRSxXQUFXLEVBQUUsRUFBRSxFQUFFLFNBQVMsV0FBVyxFQUFFLGNBQWMsRUFBRSxJQUFJLEdBQUcsUUFBUyxHQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEtBQUssR0FBRyxJQUFJLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUUsRUFBRyxFQUFFLEdBQUcsUUFBUyxHQUFFLEdBQUcsR0FBSSxHQUFFLEVBQUUsRUFBRSxFQUFFLElBQUssSUFBRyxFQUFFLEdBQUcsSUFBSSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsUUFBUSxTQUFTLEVBQUUsRUFBRSxRQUFRLEdBQUcsRUFBRyxJQUFHLEVBQUUsRUFBRSxFQUFFLFVBQVUsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLFNBQVMsU0FBUyxFQUFFLEVBQUUsRUFBRSxTQUFTLElBQUksUUFBUyxHQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsS0FBSyxHQUFHLElBQUksRUFBRSxDQUFDLEdBQUksR0FBRSxFQUFFLEVBQUcsR0FBRSxLQUFLLEVBQUUsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLE9BQU8sUUFBUyxHQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUUsTUFBTSxDQUFDLEdBQUksR0FBRSxFQUFFLEVBQUUsT0FBTyxPQUFPLENBQUUsS0FBSSxFQUFFLEdBQUcsRUFBRSxXQUFXLEVBQUUsRUFBRSxTQUFTLEVBQUUsR0FBRyxRQUFTLEtBQUksS0FBSyxFQUFFLFdBQVcsRUFBRSxHQUFHLE1BQU8sR0FBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLElBQUksR0FBRyxFQUFFLEVBQUUsRUFBRSxvQkFBb0IsRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sU0FBUyxFQUFFLEVBQUUsT0FBTyxHQUFHLEVBQUUsRUFBRyxHQUFFLEVBQUUsRUFBRSxLQUFLLE9BQU8sRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLEVBQUUsR0FBRyxRQUFTLEdBQUUsRUFBRSxLQUFLLFFBQVMsR0FBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLElBQUksR0FBSSxHQUFFLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxHQUFJLEdBQUUsRUFBRSxFQUFHLElBQUcsRUFBRSxJQUFJLEdBQUcsRUFBRSxHQUFHLE1BQU8sSUFBRyxRQUFTLEdBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBRyxJQUFJLEVBQUUsQ0FBQyxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFLEdBQUcsR0FBRyxHQUFJLElBQUksR0FBRSxFQUFFLElBQUksRUFBRSxHQUFJLElBQUcsRUFBRSxFQUFFLG9CQUFvQixFQUFFLEVBQUUsYUFBYSxVQUFVLEVBQUUsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLG9CQUFtQixNQUFRLElBQUcsRUFBRSxFQUFFLFdBQVcsRUFBRSxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsV0FBVyxFQUFFLEVBQUUsU0FBUyxFQUFFLGtCQUFrQixFQUFFLHNCQUFzQixDQUFDLEdBQUksR0FBRSxFQUFFLEVBQUUsSUFBSyxHQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxXQUFXLEVBQUUsRUFBRSxFQUFHLElBQUksR0FBRSxFQUFFLFNBQVMsRUFBRSxFQUFFLFFBQVMsSUFBRyxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sU0FBUyxFQUFFLEVBQUUsT0FBTyxHQUFHLEVBQUUsRUFBRyxHQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FBRyxJQUFJLEdBQUcsU0FBUyxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsSUFBSSxHQUFJLEdBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLEdBQUcsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxJQUFJLEdBQUcsRUFBRSxJQUFJLElBQUksR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxJQUFJLEdBQUcsRUFBRSxJQUFJLElBQUksR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLGFBQWEsRUFBRSxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLElBQUksR0FBRyxFQUFFLElBQUksSUFBSSxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsYUFBYSxFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEdBQUcsRUFBRSxJQUFJLEtBQUssRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxLQUFJLEVBQUcsRUFBRSxHQUFHLEdBQUcsRUFBRSxFQUFFLEdBQUcsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLE9BQUcsR0FBTyxHQUFHLEVBQUUsYUFBYSxFQUFFLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEtBQUksRUFBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLEdBQUksR0FBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxJQUFJLEtBQUssRUFBRSxFQUFFLEdBQUcsSUFBSSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxJQUFJLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxHQUFHLEVBQUUsRUFBRSxPQUFPLEVBQUUsZUFBZSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLGVBQWUsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsWUFBWSxFQUFFLEVBQUUsS0FBSyxRQUFTLEdBQUUsRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLFFBQVEsRUFBRSxPQUFPLEtBQUssY0FBYyxNQUFPLEtBQUksR0FBSSxHQUFFLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxFQUFFLEdBQUcsS0FBSyxLQUFLLE9BQU8sRUFBRSxJQUF1RCxRQUFTLEdBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFJLEdBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFLFFBQVMsSUFBRyxFQUFFLEdBQUcsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLFlBQVksRUFBRSxFQUFFLGNBQWMsTUFBTyxHQUFFLG9CQUFtQixHQUFHLENBQUcsSUFBRyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsR0FBRSxHQUFJLEVBQUUsRUFBRSxFQUFFLG9CQUFvQixNQUFPLEdBQUUsRUFBRSxJQUFHLENBQUcsSUFBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsZ0JBQWdCLEdBQUcsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsV0FBVyxFQUFFLEVBQUUsRUFBRSxZQUFZLEdBQUcsSUFBSSxFQUFFLFVBQVUsT0FBTSxNQUFPLENBQUMsSUFBSSxHQUFJLElBQUUsRUFBRyxFQUFFLEVBQUUsV0FBVyxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sSUFBSSxDQUFDLElBQUksSUFBSSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUUsQ0FBRyxPQUFNLEVBQUUsRUFBRSxZQUFZLElBQUksR0FBRyxFQUFFLE9BQU0sTUFBUSxHQUFFLEVBQUUsRUFBRSxFQUFHLElBQUcsRUFBRSxHQUFHLENBQUMsR0FBSSxJQUFFLENBQUcsS0FBSSxHQUFJLEtBQUssR0FBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUUsRUFBRyxFQUFFLEVBQUUsRUFBRyxRQUFPLEdBQUcsRUFBRSxPQUFPLEdBQUcsRUFBRSxZQUFhLEdBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBTSxRQUFNLEVBQWhvSixHQUFJLEdBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxRQUFRLEVBQUUsRUFBRSxPQUFRLEtBQUksRUFBRSxFQUFFLEVBQUUsR0FBRyxTQUFTLEVBQUUsSUFBSSxFQUFFLEdBQUcsT0FBTyxFQUFFLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFHLE1BQU0sRUFBRSxHQUFHLElBQUksS0FBSyxFQUFFLEdBQUcsR0FBRyxJQUFpMkgsSUFBSSxHQUFFLEVBQUUsMENBQW9wQixPQUFPLFVBQVMsRUFBRSxFQUFFLEVBQUUsR0FBRyxJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUksR0FBRSxHQUFFLEVBQUcsSUFBSyxJQUFHLEVBQUUsR0FBRyxHQUFFLEVBQUcsRUFBRSxFQUFFLE9BQU8sQ0FBQyxHQUFJLEdBQUUsRUFBRSxFQUFFLFNBQVUsS0FBSSxHQUFHLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsS0FBSyxLQUFLLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLElBQUksRUFBRSxVQUFVLEVBQUUsYUFBYSxLQUFLLEVBQUUsZ0JBQWdCLEdBQUcsR0FBRSxHQUFJLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxHQUFHLE1BQU8sR0FBRSxFQUFFLEdBQUUsR0FBSSxDQUFFLEdBQUUsRUFBRSxFQUFFLEdBQUksSUFBRyxFQUFFLFFBQVEsR0FBRyx3QkFBb0IsR0FBTyxHQUFHLEdBQUksR0FBRSxFQUFFLElBQUksRUFBRSxFQUFFLFdBQVcsRUFBRyxJQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsU0FBUyxLQUFLLEVBQUUsRUFBRSxZQUFZLElBQUksRUFBRSxFQUFFLFFBQVEsSUFBSSxHQUFJLEdBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxHQUFHLEdBQUcsQ0FBQyxJQUFJLEdBQUksR0FBRSxFQUFFLEVBQUUsRUFBRSxRQUFRLFNBQVMsRUFBRSxFQUFFLFFBQVEsR0FBRyxFQUFHLElBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsSUFBSSxHQUFJLEdBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxTQUFTLEVBQUUsRUFBRSxPQUFPLEdBQUcsR0FBRyxFQUFHLElBQUksR0FBRSxFQUFFLEtBQUssS0FBSyxNQUFPLElBQUcsRUFBRSxPQUFPLElBQUksR0FBSSxHQUFFLEVBQUUsRUFBRSxFQUFFLElBQUksT0FBTyxJQUFJLEVBQUUsSUFBSSxTQUFVLElBQUcsRUFBRyxHQUFFLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxNQUFPLEdBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE1BQU0sUUFBUSxHQUFHLFNBQVMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsT0FBTyxHQUFHLFNBQVMsR0FBRyxPQUFPLFNBQVMsRUFBRSxJQUFHLElBQUssRUFBRSxLQUFLLEtBQUssR0FBRyxFQUFFLEdBQUcsVUFBVSxPQUFPLEtBQU0sSUFBRyxTQUFTLGlCQUFpQixrQkFBa0IsV0FBVyxHQUFJLEdBQUUsU0FBUyxhQUFjLElBQUcsRUFBRSxRQUFRLEdBQUcsRUFBRSxVQUFXLElBQUksS0FBSSxTQUFTLFNBQVMsRUFBRSxFQUFFLEVBQUUsR0FBRyxXQUFXLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxJQUFJLFVBQVUsR0FBRyxFQUFFLFlBQVksV0FBVyxHQUFHLGlCQUFpQixFQUFFLEVBQUUsS0FBSyxHQUFHLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxhQUFhLElBQUksS0FBSyxFQUFFLFFBQVEsTUFBTSxhQUFhLEVBQUUsS0FBSyxHQUFHLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsVUFBVSxPQUFPLEVBQUUsaUJBQWlCLG1CQUFtQixJQUFJLEVBQUUsaUJBQWlCLGlCQUFpQixJQUFJLEVBQUUsaUJBQWlCLFNBQVMsSUFBSSxJQUFJLEVBQUUsUUFBTyxNQUFPLGlCQUFpQixTQUFTLEVBQUUsRUFBRSxHQUFHLEdBQUcsV0FBVyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLFFBQVMsSUFBSSxHQUFFLEVBQUUsVUFBVSxFQUFFLEVBQUUsYUFBYSxJQUFJLEtBQUssRUFBRSxRQUFRLEdBQU8sR0FBRSxLQUFLLFNBQVMsRUFBRSxHQUFHLE9BQU8sRUFBRSxFQUFFLEVBQUUsUUFBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEtBQUssU0FBUyxHQUFHLE1BQU8sSUFBRyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsVUFBVSxHQUFHLEVBQUUsTUFBTSxLQUFLLEdBQUcsRUFBRSxhQUE2eEIsSUFBSSxNQUFNLEdBQUcsTUFBTSxLQUFLLFNBQVMsRUFBRSxFQUFFLEdBQUcsR0FBSSxHQUFFLEVBQUUsTUFBTSxHQUFHLEVBQUUsR0FBRyxJQUFJLE1BQU0sRUFBRSxLQUFLLFdBQVcsRUFBRSxFQUFFLG1CQUFtQixTQUFTLEVBQUUsTUFBTSxRQUFRLEdBQUcsRUFBRSxNQUFNLE9BQVEsSUFBRyxHQUFHLEVBQUUsS0FBSyxNQUFLLEVBQUcsR0FBRyxFQUFFLFdBQVcsRUFBRSxNQUFNLFFBQVEsS0FBSyxFQUFFLE1BQU0sUUFBUSxFQUFFLEVBQUUsUUFBUSxPQUFPLFNBQVMsRUFBRSxFQUFFLEdBQUcsR0FBSSxHQUFFLEVBQUUsT0FBTyxJQUFJLEVBQUUsWUFBWSxFQUFFLEdBQUcsSUFBSSxNQUFNLEVBQUUsS0FBSyxZQUFZLEVBQUUsS0FBSyxNQUFLLEVBQUcsRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLE1BQU0sUUFBUSxFQUFFLHFCQUFxQixHQUFHLEVBQUUsV0FBVyxFQUFFLE1BQU0sUUFBUSxVQUFVLEVBQUUsTUFBTSxRQUFRLEVBQUUsRUFBRSxtQkFBbUIsU0FBUyxPQUFPLFNBQVMsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLElBQUksRUFBRSxNQUFNLFFBQVEsRUFBRSx1QkFBdUIsSUFBSSxLQUFLLE9BQU8sT0FBTyxRQUFRLElBQUksUUFBUSxLQUFLLE9BQU8sS0FBSyxPQUFPLFdBQVcsT0FBTyxXQUFXLE9BQU8sYUFBYSxPQUFPLGFBQWEsT0FBTyxpQkFBaUIsT0FBTyxpQkFBaUIsT0FBTyxZQUFZLE9BQU8sa0JBQWtCLE9BQU8sY0FBYyxPQUFPLFVBQVUsT0FBTyxPQUFPLFNBQWtXLEdBQUcsU0FBUyxHQUFHLE1BQU8sR0FBRSxLQUFLLEdBQUcsSUFBSSxHQUFHLFNBQVMsR0FBRyxNQUFNLFNBQVMsRUFBRSxNQUFNLElBQUksS0FBSyxhQUFhLE1BQU0sR0FBRyxVQUFTLEVBQUcsT0FBTyxTQUFTLEdBQUcsR0FBSSxHQUFFLEtBQUssRUFBRSxLQUFLLE9BQU8sT0FBUSxJQUFHLElBQUksRUFBRSxFQUFFLE9BQU8sS0FBSyxPQUFPLENBQUMsR0FBSSxHQUFFLEtBQUssS0FBSyxFQUFFLEVBQUUsRUFBRyxJQUFHLFNBQVMsR0FBRyxLQUFLLEVBQUUsRUFBRSxRQUFRLEdBQUcsRUFBRSxLQUFLLFdBQVcsT0FBTSxHQUFJLEtBQUssUUFBUSxNQUFPLEVBQUUsSUFBSSxHQUFFLEdBQUcsRUFBRyxLQUFJLEVBQUUsTUFBTyxFQUFFLElBQUcsS0FBSyxTQUFTLE1BQU8sSUFBRyxFQUFFLEVBQUcsSUFBSSxHQUFFLGdCQUFnQixLQUFLLEtBQUssR0FBSSxHQUFFLElBQUksTUFBTSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsS0FBSyxJQUFJLE9BQU8sRUFBRSxLQUFLLFFBQVEsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxHQUFJLElBQUksSUFBRyxFQUFFLE9BQU8sRUFBRSxVQUFVLFdBQVcsR0FBRyxNQUFNLEVBQUUsS0FBSyxPQUFPLEVBQUUsR0FBRyxFQUFHLElBQUcsRUFBRSxLQUFLLFlBQVksRUFBRSxLQUFLLFdBQVcsS0FBSyxNQUFNLEVBQUUsS0FBSyxNQUFLLEdBQUksR0FBRyxFQUFFLE9BQU8sU0FBUyxFQUFFLEdBQUcsTUFBTyxHQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEdBQUcsTUFBTSxFQUFFLG9CQUFvQixFQUFFLGtCQUFrQixPQUFPLFdBQVcsQ0FBQyxHQUFJLEdBQUUsRUFBRSxLQUFLLFdBQVcsS0FBSyxFQUFHLElBQUcsV0FBVyxFQUFFLE1BQU8sTUFBSyxVQUFTLEVBQUcsR0FBRyxFQUFFLGFBQWEsV0FBVyxFQUFFLFVBQVMsRUFBRyxFQUFFLGlCQUFpQixHQUFHLEVBQUUsRUFBRyxJQUFHLFdBQVcsRUFBRSxDQUFDLEdBQUcsR0FBRyxHQUFHLE1BQU8sRUFBRSxJQUFJLEdBQUUsRUFBRSxXQUFXLElBQUssSUFBRyxFQUFFLGFBQWEsR0FBRyxHQUFHLEVBQUUsaUJBQWlCLEdBQUcsR0FBRyxFQUFFLGFBQWEsU0FBUyxHQUFHLEVBQUUsS0FBSyxNQUFPLE1BQUssR0FBRyxHQUFHLElBQUksT0FBTyxVQUFVLFFBQVEsVUFBb1csSUFBRyxJQUFLLElBQUksS0FBSSxXQUFXLEdBQUcsaUJBQWlCLE1BQU0sR0FBRyxZQUFZLFdBQVcsR0FBSSxHQUFFLEtBQUssRUFBRSxLQUFLLE9BQVEsTUFBSyxRQUFRLFNBQVMsRUFBRSxHQUFHLEdBQUksR0FBRSxHQUFHLEVBQUcsR0FBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLE1BQUssR0FBRyxHQUFJLEVBQUUsT0FBTyxFQUFFLEtBQUssSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLEtBQUssT0FBTyxTQUFTLEdBQUcsSUFBSSxHQUFJLEdBQUUsS0FBSyxLQUFLLEtBQUssT0FBTyxLQUFLLEtBQUssT0FBTyxFQUFFLE9BQU8sT0FBTyxNQUFNLEVBQUUsS0FBSyxhQUFhLEtBQUssU0FBUyxFQUFFLEtBQUssT0FBTyxZQUFZLEVBQUUsS0FBSyxZQUFZLEVBQUUsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxJQUFJLENBQUMsR0FBSSxHQUFFLEVBQUUsRUFBRyxHQUFFLEtBQUssTUFBTSxFQUFFLEtBQUssSUFBSSxPQUFPLEVBQUUsS0FBSyxRQUFRLGFBQWEsRUFBRSxLQUFLLEdBQUcsRUFBRSxFQUFFLEtBQUssR0FBRyxFQUFFLE9BQU8sRUFBRSxVQUFVLFdBQVcsR0FBRyxHQUFHLEVBQUUsQ0FBQyxJQUFJLEdBQUksTUFBSyxLQUFLLEVBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxJQUFJLENBQUMsR0FBSSxHQUFFLEVBQUUsRUFBRyxHQUFFLEtBQUssV0FBVyxFQUFFLEVBQUUsS0FBSyxJQUFJLEVBQUUsSUFBSSx3QkFBd0IsRUFBRSxFQUFFLEtBQUssRUFBRSxLQUFLLEdBQUcsRUFBRSxLQUFLLEdBQUcsS0FBSyxLQUFLLEVBQUUsRUFBRSxLQUFLLEdBQUcsS0FBSyxRQUFRLEVBQUUsTUFBTyxHQUFFLEVBQUUsS0FBSyxJQUFJLFFBQVEsV0FBVyxHQUFJLEdBQUUsS0FBSyxhQUFhLEVBQUUsS0FBSyxZQUFZLEtBQUssTUFBTSxLQUFLLE9BQVEsR0FBRSxRQUFRLEtBQUssUUFBUSxFQUFFLEdBQUcsSUFBSSxLQUFLLEVBQUUsUUFBUSxJQUFJLEVBQUUsUUFBUSxJQUFJLEVBQUUsUUFBUSxJQUFJLEtBQUssUUFBUSxTQUFTLEtBQUssYUFBYSxFQUFFLFFBQVEsU0FBUyxHQUFHLEdBQUcsRUFBRSxLQUFLLE1BQU0sQ0FBQyxHQUFJLEdBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxLQUFNLElBQUcsRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFFLGdCQUFn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QUFJLENBQUMsR0FBSSxHQUFFLEVBQUUsRUFBRSxRQUFTLEtBQUksRUFBRSxXQUFXLE1BQU8sS0FBSSxFQUFFLFVBQVUsRUFBRSxrQkFBa0IsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLE1BQU0sSUFBSSxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsVUFBVSxVQUFVLEVBQUUsQ0FBQyxHQUFJLEdBQUUsR0FBRyxFQUFFLFFBQU8sR0FBSSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksR0FBRyxFQUFFLE1BQU0sR0FBRyxFQUFFLFVBQVMsR0FBSSxFQUFFLEdBQUcsRUFBRSxhQUFZLEdBQUksRUFBRSxHQUFHLEVBQUcsSUFBRyxHQUFHLEdBQUcsRUFBRSxPQUFPLFlBQVksR0FBRyxFQUFFLEdBQUcsRUFBRSxXQUFVLEVBQUcsRUFBRSxHQUFHLElBQUksRUFBRSxpQkFBaUIsRUFBRSxHQUFHLEdBQUcsSUFBSSxFQUFFLEdBQUcsTUFBTSxHQUFJLElBQUksR0FBRSxHQUFHLEVBQUcsSUFBRyxFQUFFLFNBQVEsR0FBSSxHQUFHLEVBQUUsT0FBTyxTQUFTLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxJQUFJLElBQUksRUFBRSxjQUFjLEVBQUUsTUFBTSxHQUFJLElBQUksR0FBRSxHQUFHLEVBQUcsT0FBTyxJQUFHLEVBQUUsU0FBUSxHQUFJLEdBQUcsRUFBRSxRQUFRLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLElBQUksRUFBRSxNQUFNLElBQUksRUFBRSxFQUFFLE1BQUssRUFBRyxJQUFJLEVBQUUsT0FBTyxHQUFHLE9BQVcsR0FBRyxHQUFHLElBQUksWUFBVyxFQUFHLFFBQVEsR0FBRyxZQUFZLE1BQU0sU0FBUyxFQUFFLEVBQUUsR0FBRyxHQUFJLEdBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxVQUFVLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxTQUFTLElBQUssSUFBRyxFQUFFLFVBQVUsTUFBTyxJQUFHLEVBQUUsRUFBRSxJQUFHLENBQUcsSUFBRyxXQUFXLEdBQUcsU0FBUyxFQUFFLEVB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QUFPLElBQUcsSUFBSyxFQUFFLFVBQVUsR0FBRyxFQUFFLEVBQUcsSUFBSSxHQUFFLEdBQUcsRUFBRSxFQUFHLFFBQU8sSUFBSSxFQUFFLE9BQU8sRUFBRSxPQUFPLGdCQUFnQixFQUFFLGtCQUFrQixTQUFTLEdBQUcsUUFBUyxHQUFFLEVBQUUsR0FBRyxHQUFJLEdBQUUsT0FBTyxPQUFPLEdBQUcsS0FBSyxJQUFLLElBQUcsRUFBRSxJQUFJLEdBQUksS0FBSyxHQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsYUFBYSxPQUFPLEVBQUUsVUFBVSxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsT0FBTyxPQUFPLEVBQUUsWUFBWSxNQUFNLEVBQUUsYUFBYSxFQUFFLFlBQVksR0FBRyxlQUFlLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBSSxHQUFFLEtBQUssU0FBUyxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsR0FBRyxLQUFLLEdBQUksSUFBSSxHQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUcsT0FBTyxHQUFFLE9BQU8sRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFLE9BQU8sUUFBUSxFQUFFLG1CQUFtQixHQUFHLE1BQU0sSUFBSSxJQUFJLEdBQUcsUUFBUSxHQUFHLG9CQUFpSyxLQUFLLEdBQUcsSUFBRyxHQUFJLEtBQUssR0FBRyxJQUFHLEdBQUksR0FBRyxFQUFFLFNBQVMsR0FBRyxHQUFJLEdBQUUsR0FBRyxFQUFHLE9BQU8sSUFBRyxFQUFFLFlBQVksR0FBRyxHQUFHLFVBQVUsTUFBTyxJQUFHLFVBQVUsT0FBTyxTQUFTLEVBQUUsR0FBRyxJQUFJLEVBQUUsR0FBRyxHQUFHLE1BQU0sU0FBUyxNQUFNLElBQUksU0FBUyxnQkFBZ0IsTUFBTyxLQUFLLElBQUksR0FBRSxLQUFLLFFBQVMsS0FBSSxFQUFFLE9BQU8sQ0FBQyxHQUFJLEdBQUUsRUFBRSxRQUFTLElBQUcsRUFBRSxHQUFHLGdCQUFpQixHQUFFLE1BQU0sRUFBRSxPQUFPLEtBQUssRUFBRSxHQUFHLFFBQVEsQ0FBQyxJQUFJLEVBQUUsU0FBUyxNQUFPLEtBQUssR0FBRSxFQUFFLGNBQWUsS0FBSSxFQUFFLFNBQVMsR0FBRyxHQUFHLEVBQUUsVUFBVSxNQUFPLEdBQUUsU0FBVSxJQUFJLEdBQUUsU0FBUyxjQUFjLE1BQU8sT0FBTyxHQUFFLFlBQVksRUFBRSxXQUFVLElBQUssRUFBRSxXQUFXLEdBQUksSUFBRyxFQUFFLENBQUMsR0FBSSxHQUFFLEdBQUcsR0FBRyxtQkFBa0IsRUFBRyxxQkFBcUIsR0FBRyw0QkFBNEIsR0FBRyxXQUFXLEVBQUUsV0FBVyxTQUFTLEVBQUUsVUFBVSxNQUFNLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxlQUFnQixHQUFFLE9BQU8sRUFBRSxFQUFFLGdCQUFnQixHQUFHLE1BQU8sSUFBRyxLQUFLLEtBQUssRUFBRSxJQUFJLEdBQUcsUUFBUSxHQUFHLE9BQU8sUUFBUTs7Ozs7QUNKenUyRixPQUFPLFFBQVUsUUFBUTs7OztBQ0kzQixZQUFxQyxTQUFTLEdBQUUsR0FBRyxNQUFPLE9BQU0sRUFBRSxRQUFTLEdBQUUsR0FBRyxNQUFPLE9BQU0sRUFBRSxRQUFTLEdBQUUsR0FBRyxPQUFNLElBQUssRUFBRSxRQUFTLEdBQUUsR0FBRyxNQUFNLGdCQUFpQixJQUFHLGdCQUFpQixJQUFHLGdCQUFpQixJQUFHLGlCQUFrQixHQUFFLFFBQVMsR0FBRSxHQUFHLE1BQU8sUUFBTyxHQUFHLGdCQUFpQixHQUFrQyxRQUFTLEdBQUUsR0FBRyxNQUFNLG9CQUFvQixFQUFFLEtBQUssR0FBRyxRQUFTLEdBQUUsR0FBRyxHQUFJLEdBQUUsV0FBVyxPQUFPLEdBQUksT0FBTyxJQUFHLEdBQUcsS0FBSyxNQUFNLEtBQUssR0FBRyxTQUFTLEdBQUcsUUFBUyxHQUFFLEdBQUcsTUFBTyxHQUFFLElBQUksa0JBQW1CLEdBQUUsTUFBTSxrQkFBbUIsR0FBRSxNQUFNLFFBQVMsR0FBRSxHQUFHLE1BQU8sT0FBTSxFQUFFLEdBQUcsTUFBTSxRQUFRLElBQUksRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLEtBQUssVUFBVSxFQUFFLEtBQUssR0FBRyxPQUFPLEdBQUcsUUFBUyxHQUFFLEdBQUcsR0FBSSxHQUFFLFdBQVcsRUFBRyxPQUFPLE9BQU0sR0FBRyxFQUFFLEVBQUUsUUFBUyxHQUFFLEVBQUUsR0FBRyxJQUFJLEdBQUksR0FBRSxPQUFPLE9BQU8sTUFBTSxFQUFFLEVBQUUsTUFBTSxLQUFLLEVBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxJQUFJLEVBQUUsRUFBRSxLQUFJLENBQUcsT0FBTyxHQUFFLFNBQVMsR0FBRyxNQUFPLEdBQUUsRUFBRSxnQkFBZ0IsU0FBUyxHQUFHLE1BQU8sR0FBRSxJQUEwQyxRQUFTLEdBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxPQUFPLENBQUMsR0FBSSxHQUFFLEVBQUUsUUFBUSxFQUFHLElBQUcsR0FBRyxFQUFFLE1BQU8sR0FBRSxPQUFPLEVBQUUsSUFBMEMsUUFBUyxHQUFFLEVBQUUsR0FBRyxNQUFPLEdBQUUsS0FBSyxFQUFFLEdBQUcsUUFBUyxHQUFFLEdBQUcsR0FBSSxHQUFFLE9BQU8sT0FBTyxLQUFNLE9BQU8sVUFBUyxHQUFHLE1BQU8sR0FBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEtBQWtiLFFBQVMsR0FBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUUsS0FBSSxHQUFJLEdBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxHQUFJLE9BQU0sR0FBRyxLQUFLLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRyxPQUFPLEdBQUUsUUFBUyxHQUFFLEVBQUUsR0FBRyxJQUFJLEdBQUksS0FBSyxHQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUcsT0FBTyxHQUFFLFFBQVMsR0FBRSxHQUFHLElBQUksR0FBSSxNQUFLLEVBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxJQUFJLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxHQUFJLE9BQU8sR0FBRSxRQUFTLEdBQUUsRUFBRSxFQUFFLElBQTRELFFBQVMsR0FBRSxFQUFFLEdBQUcsR0FBRyxJQUFJLEVBQUUsT0FBTSxDQUFHLElBQUksR0FBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUcsS0FBSSxJQUFJLEVBQUUsT0FBTyxJQUFJLEdBQUcsT0FBTyxLQUFLLE9BQU8sRUFBRyxLQUFJLEdBQUksR0FBRSxNQUFNLFFBQVEsR0FBRyxFQUFFLE1BQU0sUUFBUSxFQUFHLElBQUcsR0FBRyxFQUFFLE1BQU8sR0FBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0sU0FBUyxFQUFFLEdBQUcsTUFBTyxHQUFFLEVBQUUsRUFBRSxLQUFNLElBQUcsWUFBYSxPQUFNLFlBQWEsTUFBSyxNQUFPLEdBQUUsWUFBWSxFQUFFLFNBQVUsSUFBRyxHQUFHLEVBQUUsT0FBTSxDQUFHLElBQUksR0FBRSxPQUFPLEtBQUssR0FBRyxFQUFFLE9BQU8sS0FBSyxFQUFHLE9BQU8sR0FBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0sU0FBUyxHQUFHLE1BQU8sR0FBRSxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sR0FBRyxPQUFNLEdBQUksUUFBUyxHQUFFLEVBQUUsR0FBRyxJQUFJLEdBQUksR0FBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLElBQUksR0FBRyxFQUFFLEVBQUUsR0FBRyxHQUFHLE1BQU8sRUFBRSxRQUFPLEVBQUUsUUFBUyxHQUFFLEdBQUcsR0FBSSxJQUFFLENBQUcsT0FBTyxZQUFXLElBQUksR0FBRSxFQUFHLEVBQUUsTUFBTSxLQUFLLGFBQWlqQixRQUFTLEdBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxPQUFPLGVBQWUsRUFBRSxHQUFHLE1BQU0sRUFBRSxhQUFhLEVBQUUsVUFBUyxFQUFHLGNBQWEsSUFBeThCLFFBQVMsSUFBRyxHQUFHLE1BQU0sa0JBQW1CLElBQUcsY0FBYyxLQUFLLEVBQUUsWUFBNHNCLFFBQVMsSUFBRyxHQUFHLEdBQUcsS0FBSyxHQUFHLEdBQUcsT0FBTyxFQUFFLFFBQVMsTUFBSyxHQUFHLE1BQU0sR0FBRyxPQUFPLEdBQUcsR0FBRyxPQUFPLEdBQXlwQixRQUFTLElBQUcsR0FBRyxNQUFPLElBQUksUUFBRyxPQUFPLE9BQU8sR0FBTyxPQUFPLElBQUksUUFBUyxJQUFHLEdBQUcsR0FBSSxHQUFFLEdBQUksSUFBRyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLFNBQVMsUUFBUSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLGlCQUFpQixFQUFFLGFBQWMsT0FBTyxHQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFTLEVBQUcsRUFBNFosUUFBUyxJQUFHLEdBQUcsR0FBRyxFQUF5UCxRQUFTLElBQUcsRUFBRSxHQUFHLEdBQUksRUFBRSxJQUFHLEVBQUUsTUFBTSxZQUFhLEtBQUksTUFBTyxHQUFFLEVBQUUsV0FBVyxFQUFFLGlCQUFrQixJQUFHLEVBQUUsRUFBRSxPQUFPLEtBQUssTUFBTSxNQUFNLFFBQVEsSUFBSSxFQUFFLEtBQUssT0FBTyxhQUFhLEtBQUssRUFBRSxTQUFTLEVBQUUsR0FBSSxJQUFHLElBQUksR0FBRyxHQUFHLEVBQUUsVUFBVSxFQUFFLFFBQVMsSUFBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBSSxHQUFFLEdBQUksSUFBRyxFQUFFLE9BQU8seUJBQXlCLEVBQUUsRUFBRyxLQUFJLElBQUcsSUFBSyxFQUFFLGFBQWEsQ0FBQyxHQUFJLEdBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBSSxLQUFJLEdBQUcsSUFBSSxVQUFVLFNBQVMsRUFBRSxFQUFFLEdBQUksSUFBSSxJQUFHLEdBQUcsR0FBRyxFQUFHLFFBQU8sZUFBZSxFQUFFLEdBQUcsWUFBVyxFQUFHLGNBQWEsRUFBRyxJQUFJLFdBQVcsR0FBSSxHQUFFLEVBQUUsRUFBRSxLQUFLLEdBQUcsQ0FBRSxPQUFPLElBQUcsU0FBUyxFQUFFLFNBQVMsSUFBSSxFQUFFLElBQUksU0FBUyxNQUFNLFFBQVEsSUFBSSxRQUFTLEdBQUUsR0FBRyxJQUFJLEdBQUksT0FBRSxHQUFPLEVBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxPQUFPLElBQUksU0FBUyxNQUFNLFFBQVEsSUFBSSxFQUFFLElBQUksS0FBSyxHQUFHLElBQUksU0FBUyxHQUFHLEdBQUksR0FBRSxFQUFFLEVBQUUsS0FBSyxHQUFHLENBQUUsS0FBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxJQUFJLEVBQUUsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxHQUFHLEdBQUcsR0FBRyxFQUFFLGNBQWMsUUFBUyxJQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsTUFBTSxRQUFRLElBQUksRUFBRSxHQUFHLE1BQU8sR0FBRSxPQUFPLEtBQUssSUFBSSxFQUFFLE9BQU8sR0FBRyxFQUFFLE9BQU8sRUFBRSxFQUFFLEdBQUcsQ0FBRSxJQUFHLElBQUssTUFBSyxJQUFLLFFBQU8sV0FBVyxNQUFPLEdBQUUsR0FBRyxFQUFFLENBQUUsSUFBSSxHQUFFLEVBQUUsTUFBTyxPQUFPLEdBQUUsUUFBUSxHQUFHLEVBQUUsUUFBUSxFQUFFLEdBQUcsR0FBRyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsSUFBSSxTQUFTLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxRQUFTLElBQUcsRUFBRSxHQUFHLEdBQUcsTUFBTSxRQUFRLElBQUksRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxHQUFJLEdBQUUsRUFBRSxNQUFPLEdBQUUsUUFBUSxHQUFHLEVBQUUsU0FBUyxFQUFFLEVBQUUsV0FBWSxHQUFFLEdBQUcsR0FBRyxFQUFFLElBQUksV0FBK00sUUFBUyxJQUFHLEVBQUUsR0FBRyxJQUFJLEVBQUUsTUFBTyxFQUFFLEtBQUksR0FBSSxHQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsUUFBUSxRQUFRLEdBQUcsT0FBTyxLQUFLLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLElBQUksWUFBWSxFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxJQUFJLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxHQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsRUFBRSxHQUFJLE9BQU8sR0FBRSxRQUFTLElBQUcsRUFBRSxFQUFFLEdBQUcsTUFBTyxHQUFFLFdBQVcsR0FBSSxHQUFFLGtCQUFtQixHQUFFLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxFQUFFLGtCQUFtQixHQUFFLEVBQUUsS0FBSyxFQUFFLEdBQUcsQ0FBRSxPQUFPLEdBQUUsR0FBRyxFQUFFLEdBQUcsR0FBRyxFQUFFLEVBQUUsV0FBVyxNQUFPLElBQUcsa0JBQW1CLEdBQUUsRUFBRSxLQUFLLEtBQUssTUFBTSxFQUFFLGtCQUFtQixHQUFFLEVBQUUsS0FBSyxLQUFLLE1BQU0sSUFBSSxFQUFFLEVBQUUsUUFBUyxJQUFHLEVBQUUsR0FBRyxHQUFJLEdBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxHQUFHLE1BQU0sUUFBUSxHQUFHLEdBQUcsR0FBRyxDQUFFLE9BQU8sR0FBRSxTQUFTLEdBQUcsSUFBSSxHQUFJLE1BQUssRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLEtBQUssSUFBSSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEdBQUksT0FBTyxJQUFHLEdBQUcsRUFBRSxRQUFTLElBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFJLEdBQUUsT0FBTyxPQUFPLEdBQUcsS0FBTSxPQUFPLEdBQUUsRUFBRSxFQUFFLEdBQUcsRUFBc2tCLFFBQVMsSUFBRyxFQUFFLEVBQUUsR0FBMHRCLFFBQVMsR0FBRSxHQUFHLEdBQUksR0FBRSxHQUFHLElBQUksRUFBRyxHQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBeHdCLEdBQUcsa0JBQW1CLEtBQUksRUFBRSxFQUFFLFNBQVMsU0FBUyxFQUFFLEdBQUcsR0FBSSxHQUFFLEVBQUUsS0FBTSxJQUFHLEVBQUUsQ0FBQyxHQUFJLEdBQUUsRUFBRSxJQUFLLElBQUcsTUFBTSxRQUFRLEdBQUcsSUFBSSxFQUFFLEVBQUUsT0FBTyxLQUFLLGlCQUFpQixFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUsS0FBSyxLQUFLLFdBQVksSUFBRyxFQUFFLEdBQUcsSUFBSSxHQUFJLEtBQUssR0FBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsSUFBSSxFQUFFLEdBQUcsR0FBRyxLQUFLLEVBQUcsR0FBRSxNQUFNLElBQUksR0FBRyxTQUFTLEVBQUUsR0FBRyxHQUFJLEdBQUUsRUFBRSxNQUFPLElBQUcsRUFBRSxDQUFDLEdBQUksR0FBRSxFQUFFLFNBQVUsSUFBRyxNQUFNLFFBQVEsR0FBRyxJQUFJLEdBQUksR0FBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLElBQUksRUFBRSxFQUFFLEtBQUssS0FBSyxFQUFFLFFBQVMsSUFBRyxFQUFFLEdBQUcsSUFBSSxHQUFJLEtBQUssR0FBRSxDQUFDLEdBQUksR0FBRSxFQUFFLEVBQUcsR0FBRSxHQUFHLEVBQUUsR0FBRyxHQUFHLEtBQUssR0FBRyxJQUFJLEtBQUssTUFBTSxHQUFHLFNBQVMsR0FBRyxHQUFJLEdBQUUsRUFBRSxVQUFXLElBQUcsRUFBRSxJQUFJLEdBQUksS0FBSyxHQUFFLENBQUMsR0FBSSxHQUFFLEVBQUUsRUFBRyxtQkFBbUIsS0FBSSxFQUFFLElBQUksS0FBSyxFQUFFLE9BQU8sTUFBTSxJQUFJLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsRUFBRSxRQUFRLElBQUksRUFBRSxRQUFRLElBQUksR0FBSSxHQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sT0FBTyxFQUFFLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxFQUFFLE9BQU8sR0FBRyxFQUFHLElBQUksR0FBRSxJQUFLLEtBQUksSUFBSyxHQUFFLEVBQUUsRUFBRyxLQUFJLElBQUssR0FBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQXVELE9BQU8sR0FBRSxRQUFTLElBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFHLGdCQUFpQixHQUFFLENBQUMsR0FBSSxHQUFFLEVBQUUsRUFBRyxJQUFHLEVBQUUsRUFBRSxHQUFHLE1BQU8sR0FBRSxFQUFHLElBQUksR0FBRSxFQUFFLEVBQUcsSUFBRyxFQUFFLEVBQUUsR0FBRyxNQUFPLEdBQUUsRUFBRyxJQUFJLEdBQUUsRUFBRSxFQUFHLE9BQU8sR0FBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLFFBQVMsSUFBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEdBQUksR0FBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsUUFBUSxFQUFFLEtBQU0sSUFBRyxHQUFHLEVBQUUsR0FBRyxJQUFJLEVBQUUsRUFBRSxXQUFXLEdBQUUsTUFBUSxJQUFHLEtBQUssR0FBRyxJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUksR0FBRSxHQUFHLE9BQU8sRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLEtBQUssR0FBRSxHQUFJLE9BQUcsS0FBUyxFQUFFLENBQUMsRUFBRSxTQUFTLEVBQUUsRUFBRSxHQUFHLEdBQUksRUFBRSxFQUFFLFdBQVIsQ0FBMEIsR0FBSSxHQUFFLEVBQUUsT0FBUSxPQUFHLElBQUcsRUFBRSxTQUFTLGVBQVcsS0FBUyxFQUFFLFNBQVMsVUFBVSxRQUFJLEtBQVMsRUFBRSxPQUFPLEdBQVUsRUFBRSxPQUFPLEdBQVMsa0JBQW1CLElBQUcsYUFBYSxHQUFHLEVBQUUsTUFBTSxFQUFFLEtBQUssR0FBRyxJQUFHLEVBQUUsRUFBRSxFQUFHLElBQUksR0FBRSxFQUFHLEtBQUcsR0FBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLE1BQU8sR0FBRSxRQUFTLElBQUcsR0FBRyxHQUFJLEdBQUUsR0FBRyxFQUFFLFdBQVcsTUFBTSxxQkFBc0IsT0FBTyxHQUFFLEVBQUUsR0FBRyxHQUFHLFFBQVMsSUFBRyxFQUFFLEdBQUcsTUFBTyxJQUFHLEtBQUssR0FBRyxHQUFHLFFBQVMsSUFBRyxFQUFFLEdBQUcsSUFBSSxNQUFNLFFBQVEsR0FBRyxNQUFPLElBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBRSxLQUFJLEdBQUksR0FBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxJQUFJLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxNQUFPLEVBQUUsUUFBTyxFQUFFLFFBQVMsSUFBRyxFQUFFLEVBQUUsR0FBRyxJQUFLLEtBQUksR0FBRyxFQUFFLElBQUksR0FBSSxHQUFFLEVBQUUsRUFBRSxFQUFFLFNBQVMsQ0FBQyxHQUFJLEdBQUUsRUFBRSxTQUFTLGFBQWMsSUFBRyxFQUFFLElBQUksR0FBSSxHQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sSUFBSSxJQUFJLElBQUcsSUFBSyxFQUFFLEdBQUcsS0FBSyxFQUFFLEVBQUUsRUFBRSxHQUFHLE9BQU8sTUFBTSxHQUFHLEdBQUcsRUFBRSxFQUFFLHVCQUF1QixHQUFHLEVBQUUsRUFBRSxHQUFHLFFBQVEsTUFBTSxRQUFTLElBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEdBQUksRUFBRSxNQUFLLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsS0FBSyxNQUFNLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsTUFBTSxTQUFTLEdBQUcsTUFBTyxJQUFHLEVBQUUsRUFBRSxFQUFFLHNCQUFzQixFQUFFLFVBQVMsR0FBSSxNQUFNLEdBQUcsR0FBRyxFQUFFLEVBQUUsR0FBRyxNQUFPLEdBQUUsUUFBUyxJQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxhQUFhLElBQUksTUFBTyxHQUFFLGFBQWEsS0FBSyxLQUFLLEVBQUUsRUFBRSxHQUFHLE1BQU0sR0FBRyxJQUFJLEdBQUcsR0FBRyxFQUFFLEtBQUssdUJBQXVCLEdBQUcsRUFBRSxFQUFFLEdBQUcsUUFBUyxJQUFHLEVBQUUsRUFBRSxHQUFHLElBQUksSUFBSSxHQUFHLG1CQUFvQixTQUFRLEtBQU0sRUFBRSxTQUFRLE1BQU0sR0FBNEIsUUFBUyxNQUFLLElBQUcsQ0FBRyxJQUFJLEdBQUUsR0FBRyxNQUFNLEVBQUcsSUFBRyxPQUFPLENBQUUsS0FBSSxHQUFJLEdBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxJQUFJLEVBQUUsS0FBaWlCLFFBQVMsSUFBRyxFQUFFLEdBQUcsR0FBSSxFQUFFLElBQUcsR0FBRyxLQUFLLFdBQVcsR0FBRyxFQUFFLElBQUksRUFBRSxLQUFLLEdBQUcsTUFBTSxHQUFHLEdBQUcsRUFBRSxFQUFFLGdCQUFpQixJQUFHLEVBQUUsS0FBSyxLQUFLLElBQUcsRUFBRyxPQUFPLEdBQUcsbUJBQW9CLFNBQVEsTUFBTyxJQUFJLFNBQVEsU0FBUyxHQUFHLEVBQUUsSUFBa0IsUUFBUyxJQUFHLElBQUksUUFBUyxHQUFFLEVBQUUsR0FBRyxHQUFJLEdBQUUsRUFBTSxFQUFFLE1BQU0sUUFBUSxFQUFHLE9BQUksSUFBSSxFQUFFLElBQUksT0FBTyxTQUFTLElBQUksWUFBYSxLQUEvQyxDQUF5RCxHQUFHLEVBQUUsT0FBTyxDQUFDLEdBQUksR0FBRSxFQUFFLE9BQU8sSUFBSSxFQUFHLElBQUcsRUFBRSxJQUFJLEdBQUcsTUFBTyxHQUFFLElBQUksR0FBRyxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUUsT0FBTyxLQUFLLEVBQUUsRUFBRSxHQUFHLE9BQVEsS0FBSSxFQUFFLE9BQU8sS0FBSyxHQUFHLEVBQUUsRUFBRSxPQUFPLEtBQUssRUFBRSxFQUFFLEVBQUUsSUFBSSxLQUFJLEVBQUUsSUFBSSxHQUFHLFFBQTBMLFFBQVMsSUFBRyxFQUFFLEdBQUcsUUFBUyxLQUFJLEdBQUksR0FBRSxVQUFVLEVBQUUsRUFBRSxHQUFJLEtBQUksTUFBTSxRQUFRLEdBQUcsTUFBTyxJQUFHLEVBQUUsS0FBSyxVQUFVLEVBQUUsZUFBZ0IsS0FBSSxHQUFJLEdBQUUsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxJQUFJLEdBQUcsRUFBRSxHQUFHLEtBQUssRUFBRSxFQUFFLGdCQUFnQixNQUFPLEdBQUUsSUFBSSxFQUFFLEVBQUUsUUFBUyxJQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEdBQUksR0FBRSxFQUFFLEVBQUUsQ0FBRSxLQUFJLElBQUssR0FBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxRQUFRLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxVQUFVLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFNBQVMsSUFBSSxJQUFJLEVBQUUsSUFBSSxFQUFFLEVBQUUsR0FBRyxHQUFJLEtBQUksSUFBSyxHQUFFLEVBQUUsRUFBRSxLQUFLLEdBQUcsRUFBRSxHQUFHLElBQUksS0FBSyxFQUFFLEdBQUcsRUFBRSxTQUFTLFFBQVMsSUFBRyxFQUFFLEVBQUUsR0FBdUUsUUFBUyxLQUFJLEVBQUUsTUFBTSxLQUFLLFdBQVcsRUFBRSxFQUFFLElBQUksR0FBakgsR0FBSSxFQUFFLGFBQWEsTUFBSyxFQUFFLEVBQUUsS0FBSyxPQUFPLEVBQUUsS0FBSyxTQUFVLElBQUksR0FBRSxFQUFFLEVBQW1ELEdBQUUsR0FBRyxFQUFFLElBQUksSUFBSSxFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUsU0FBUyxFQUFFLEdBQUcsSUFBSSxLQUFLLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFFBQU8sRUFBRyxFQUFFLEdBQUcsRUFBRSxRQUFTLElBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEVBQUUsR0FBRyxNQUFPLEdBQUUsR0FBRyxFQUFFLEdBQUcsU0FBVSxHQUFFLElBQUcsQ0FBRyxJQUFHLEVBQUUsRUFBRSxHQUFHLE1BQU8sR0FBRSxHQUFHLEVBQUUsR0FBRyxTQUFVLEdBQUUsSUFBRyxFQUFHLE9BQU0sRUFBRyxRQUFTLElBQUcsR0FBRyxNQUFPLEdBQUUsSUFBSSxHQUFHLElBQUksTUFBTSxRQUFRLEdBQUcsUUFBUyxHQUFFLEVBQUUsR0FBRyxHQUFhLEdBQUUsRUFBRSxFQUFFLEVBQWYsSUFBaUIsS0FBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sSUFBSSxFQUFFLEVBQUUsRUFBRSxLQUFLLGlCQUFrQixLQUFJLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLEdBQUcsTUFBTSxRQUFRLEdBQUcsRUFBRSxPQUFPLElBQUksSUFBSSxFQUFFLEVBQUUsR0FBRyxHQUFHLElBQUksSUFBSSxJQUFJLEtBQUssR0FBRyxLQUFLLEVBQUUsR0FBRyxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsTUFBTSxFQUFFLFNBQVMsRUFBRSxLQUFLLE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsRUFBRSxLQUFLLEdBQUcsS0FBSyxHQUFHLEVBQUUsS0FBSyxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsRUFBRSxXQUFXLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLElBQUksVUFBVSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxJQUFLLE9BQU8sSUFBRyxPQUFHLEdBQU8sUUFBUyxJQUFHLEdBQUcsTUFBTyxHQUFFLElBQUksRUFBRSxFQUFFLFFBQU8sSUFBSyxFQUFFLFVBQVUsUUFBUyxJQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsQ0FBQyxJQUFJLEdBQUksR0FBRSxPQUFPLE9BQU8sTUFBTSxFQUFFLEdBQUcsUUFBUSxRQUFRLEdBQUcsT0FBTyxLQUFLLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLElBQUksQ0FBQyxHQUFJLEdBQUUsRUFBRSxFQUFHLElBQUcsV0FBVyxFQUFFLENBQUMsSUFBSSxHQUFJLEdBQUUsRUFBRSxHQUFHLEtBQUssRUFBRSxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsV0FBVyxFQUFFLEVBQUUsVUFBVSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFHLE9BQU0sRUFBRSxFQUFFLFFBQVEsSUFBSSxHQUFHLFdBQVksR0FBRSxHQUFHLENBQUMsR0FBSSxHQUFFLEVBQUUsR0FBRyxPQUFRLEdBQUUsR0FBRyxrQkFBbUIsR0FBRSxFQUFFLEtBQUssR0FBRyxJQUFJLE1BQU8sSUFBRyxRQUFTLElBQUcsRUFBRSxHQUFHLElBQUksSUFBSSxFQUFFLE9BQU8sUUFBUyxLQUFJLEdBQUksTUFBSyxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLElBQUksQ0FBQyxHQUFJLEdBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxJQUFLLElBQUcsR0FBRyxFQUFFLE9BQU8sRUFBRSxNQUFNLFlBQWEsR0FBRSxNQUFNLEtBQUssRUFBRSxVQUFVLEdBQUcsRUFBRSxZQUFZLElBQUksR0FBRyxNQUFNLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxhQUFhLEtBQUssT0FBTyxDQUFDLEdBQUksR0FBRSxFQUFFLEtBQUssRUFBRSxFQUFFLEtBQUssRUFBRSxNQUFPLGNBQWEsRUFBRSxJQUFJLEVBQUUsS0FBSyxNQUFNLEVBQUUsRUFBRSxjQUFjLEVBQUUsS0FBSyxJQUFJLElBQUksR0FBSSxLQUFLLEdBQUUsRUFBRSxHQUFHLE1BQU0sV0FBWSxHQUFFLEVBQUcsT0FBTyxHQUFFLFFBQVMsSUFBRyxHQUFHLE1BQU8sR0FBRSxZQUFZLEVBQUUsY0FBYyxNQUFNLEVBQUUsS0FBSyxRQUFTLElBQUcsRUFBRSxFQUFFLEdBQUcsR0FBSSxHQUFFLEVBQUUsT0FBTyxLQUFLLEdBQUcsT0FBTyxFQUFFLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxFQUFFLEdBQUcsRUFBRSxJQUFLLElBQUcsRUFBRSxDQUFDLEdBQUcsRUFBRSxZQUFZLE1BQU8sR0FBRSxXQUFZLElBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxJQUFJLEVBQUUsT0FBTyxJQUFJLEVBQUUsV0FBVyxNQUFPLEVBQUUsS0FBSSxHQUFJLEtBQUssTUFBSyxFQUFFLEVBQUUsSUFBSSxNQUFNLEVBQUUsS0FBSyxFQUFFLEdBQUcsR0FBRyxFQUFFLEVBQUUsRUFBRSxTQUFVLEtBQUssS0FBSSxHQUFJLEtBQUssR0FBRSxJQUFLLEtBQUksRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFJLE9BQU8sSUFBRyxPQUFPLGFBQWEsS0FBSyxFQUFFLFlBQVksR0FBRyxFQUFFLEVBQUUsVUFBVSxHQUFHLEVBQUUsRUFBRSxPQUFPLEdBQUcsRUFBRSxFQUFFLGFBQWEsR0FBRyxFQUFFLFFBQVMsSUFBRyxFQUFFLEVBQUUsR0FBRyxHQUFJLEdBQUUsV0FBVyxHQUFJLEdBQUUsVUFBVSxPQUFPLEVBQUUsTUFBTSxLQUFLLFdBQVcsS0FBTSxRQUFPLEVBQUUsR0FBRyxnQkFBaUIsS0FBSSxNQUFNLFFBQVEsSUFBSSxHQUFHLEdBQUcsTUFBTSxJQUFJLEVBQUUsUUFBUSxJQUFJLEVBQUUsUUFBUSxFQUFFLEdBQUcsZUFBVyxHQUFPLEVBQUcsT0FBTyxHQUFFLE9BQU8sT0FBTyxlQUFlLEVBQUUsR0FBRyxJQUFJLEVBQUUsWUFBVyxFQUFHLGNBQWEsSUFBSyxFQUFFLFFBQVMsSUFBRyxFQUFFLEdBQUcsTUFBTyxZQUFXLE1BQU8sR0FBRSxJQUFJLFFBQVMsSUFBRyxFQUFFLEdBQUcsR0FBSSxHQUFFLEVBQUUsRUFBRSxFQUFFLENBQUUsSUFBRyxNQUFNLFFBQVEsSUFBSSxnQkFBaUIsR0FBRSxJQUFJLEVBQUUsR0FBSSxPQUFNLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLE9BQVEsSUFBRyxnQkFBaUIsR0FBRSxJQUFJLEVBQUUsR0FBSSxPQUFNLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxPQUFRLElBQUcsRUFBRSxHQUFHLEdBQUcsSUFBSSxFQUFFLE9BQU8sVUFBVSxDQUFDLElBQUssS0FBSSxHQUFJLEdBQUUsRUFBRSxPQUFPLFlBQVksRUFBRSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxFQUFFLFdBQVksS0FBSSxFQUFFLE9BQU8sS0FBSyxHQUFHLEVBQUUsR0FBSSxPQUFNLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRyxPQUFPLEdBQUUsS0FBSyxNQUFNLEVBQUUsVUFBUyxFQUFHLEVBQUUsUUFBUyxJQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBSSxHQUFFLEVBQUUsS0FBSyxhQUFhLEVBQUcsSUFBRyxFQUFFLE1BQU0sSUFBSSxFQUFFLEVBQUUsS0FBSyxHQUFHLElBQUksRUFBRSxFQUFFLElBQUksR0FBRyxFQUFFLEtBQUssT0FBTyxJQUFJLENBQUUsSUFBSSxHQUFFLEdBQUcsRUFBRSxJQUFLLE9BQU8sR0FBRSxLQUFLLGVBQWUsWUFBWSxLQUFLLEdBQUcsR0FBRyxFQUFFLFFBQVMsSUFBRyxHQUFHLE1BQU8sSUFBRyxLQUFLLFNBQVMsVUFBVSxJQUFJLEVBQUUsUUFBUyxJQUFHLEVBQUUsR0FBRyxNQUFPLE9BQU0sUUFBUSxJQUFJLElBQUksRUFBRSxRQUFRLEdBQUcsSUFBSSxFQUFFLFFBQVMsSUFBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBSSxHQUFFLEVBQUUsU0FBUyxJQUFJLENBQUUsT0FBTyxJQUFHLElBQUksRUFBRSxTQUFTLEdBQUcsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsS0FBSyxNQUFFLEdBQU8sUUFBUyxJQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFHLEdBQUssRUFBRSxHQUFHLENBQUMsR0FBSSxFQUFFLE9BQU0sUUFBUSxLQUFLLEVBQUUsRUFBRSxHQUFnUixLQUFJLEdBQUksS0FBSyxJQUFuUixTQUFTLEdBQUcsR0FBRyxVQUFVLEdBQUcsVUFBVSxHQUFHLEVBQUUsR0FBRyxFQUFFLE1BQU0sQ0FBQyxHQUFJLEdBQUUsRUFBRSxPQUFPLEVBQUUsTUFBTSxJQUFLLEdBQUUsR0FBRyxFQUFFLFlBQVksRUFBRSxFQUFFLEdBQUcsRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLFFBQVEsRUFBRSxVQUFVLEdBQUksR0FBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUcsS0FBSyxJQUFHLElBQUssS0FBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEtBQUssRUFBRSxLQUFLLEVBQUUsUUFBUSxVQUFVLEdBQUcsU0FBUyxHQUFHLEVBQUUsR0FBRyxNQUF1QixHQUFRLE1BQU8sR0FBRSxRQUFTLElBQUcsRUFBRSxHQUFHLEdBQUksR0FBRSxLQUFLLGVBQWUsS0FBSyxpQkFBaUIsRUFBRSxFQUFFLEVBQUcsT0FBTyxLQUFJLEVBQUUsR0FBRyxHQUFHLEVBQUUsRUFBRSxHQUFHLEtBQUssU0FBUyxnQkFBZ0IsR0FBRyxLQUFLLEtBQUssYUFBYSxLQUFLLE1BQU0sYUFBYSxHQUFFLEdBQUksR0FBRyxRQUFTLElBQUcsRUFBRSxFQUFFLEdBQUcsTUFBTyxJQUFHLEVBQUUsV0FBVyxHQUFHLEVBQUUsSUFBSSxFQUFFLEtBQUksR0FBSSxFQUFFLFFBQVMsSUFBRyxFQUFFLEVBQUUsR0FBRyxHQUFHLE1BQU0sUUFBUSxHQUFHLElBQUksR0FBSSxHQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sSUFBSSxFQUFFLElBQUksZ0JBQWlCLEdBQUUsSUFBSSxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxPQUFRLElBQUcsRUFBRSxFQUFFLEdBQUcsUUFBUyxJQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsVUFBUyxFQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUUsT0FBTyxFQUFFLFFBQVMsSUFBRyxFQUFFLEdBQUcsR0FBRyxHQUFLLEVBQUUsR0FBRyxDQUFDLEdBQUksR0FBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEtBQUssRUFBRSxNQUFPLEtBQUksR0FBSSxLQUFLLEdBQUUsQ0FBQyxHQUFJLEdBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFHLEdBQUUsR0FBRyxLQUFLLE9BQU8sRUFBRSxHQUFHLEdBQVEsTUFBTyxHQUFFLFFBQVMsSUFBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsSUFBSSxTQUFTLEVBQUcsS0FBSSxHQUFJLEdBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxJQUFJLENBQUMsR0FBSSxHQUFFLEVBQUUsRUFBRyxPQUFNLFFBQVEsR0FBRyxHQUFHLEVBQUUsRUFBRSxHQUFHLElBQUksRUFBRSxRQUFRLEVBQUUsR0FBRyxPQUFNLEdBQUksRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLE1BQU8sS0FBSSxFQUFFLEtBQUssR0FBRyxFQUFFLFFBQVMsSUFBRyxFQUFFLEdBQUcsSUFBSSxHQUFJLEdBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxHQUFHLEVBQUUsQ0FBQyxHQUFJLEdBQUUsRUFBRSxFQUFHLGlCQUFpQixJQUFHLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLElBQUksTUFBTyxHQUFFLFFBQVMsSUFBRyxFQUFFLEdBQUcsTUFBTSxnQkFBaUIsR0FBRSxFQUFFLEVBQUUsRUFBRSxRQUFTLElBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxRQUFTLElBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEdBQUksR0FBRSxFQUFFLEtBQUssRUFBRSxFQUFFLE9BQVEsR0FBRSxFQUFFLFNBQVMsRUFBRSxPQUFPLE9BQU8sSUFBSSxVQUFVLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxVQUFXLElBQUksR0FBRSxFQUFFLEVBQUUsV0FBVyxHQUFHLENBQUUsTUFBSyxLQUFLLEVBQUUsS0FBSyxNQUFNLEVBQUUsS0FBSyxTQUFTLEVBQUUsS0FBSyxPQUFPLEVBQUUsS0FBSyxVQUFVLEVBQUUsSUFBSSxFQUFFLEtBQUssV0FBVyxHQUFHLEVBQUUsT0FBTyxHQUFHLEtBQUssTUFBTSxXQUFXLE1BQU8sR0FBRSxRQUFRLEdBQUcsRUFBRSxZQUFZLEVBQUUsT0FBTyxHQUFHLEVBQUUsSUFBSSxFQUFFLFFBQVEsT0FBTyxlQUFlLEtBQUssZUFBZSxZQUFXLEVBQUcsSUFBSSxXQUFXLE1BQU8sSUFBRyxFQUFFLFlBQVksS0FBSyxZQUFZLElBQUksS0FBSyxTQUFTLEVBQUUsS0FBSyxPQUFPLEtBQUssUUFBUSxLQUFLLGFBQWEsR0FBRyxFQUFFLFlBQVksS0FBSyxTQUFTLEVBQUUsU0FBUyxLQUFLLEdBQUcsU0FBUyxFQUFFLEVBQUUsRUFBRSxHQUFHLEdBQUksR0FBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFHLE9BQU8sS0FBSSxNQUFNLFFBQVEsS0FBSyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsVUFBVSxHQUFHLEdBQUcsS0FBSyxHQUFHLFNBQVMsRUFBRSxFQUFFLEVBQUUsR0FBRyxNQUFPLElBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLElBQUksUUFBUyxJQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFJLEdBQUUsR0FBRyxFQUFHLE9BQU8sR0FBRSxVQUFVLEVBQUUsRUFBRSxVQUFVLEVBQUUsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLFVBQVUsS0FBSyxFQUFFLE1BQU0sRUFBRSxRQUFTLElBQUcsRUFBRSxHQUFHLElBQUksR0FBSSxLQUFLLEdBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxHQUF5a0QsUUFBUyxJQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUksR0FBRSxFQUFFLFNBQVMsS0FBTSxJQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsT0FBTyxJQUFJLGtCQUFtQixHQUFFLENBQUMsR0FBSSxFQUFFLElBQUcsRUFBRSxFQUFFLFVBQU0sTUFBVSxFQUFFLFNBQVMsRUFBRSxHQUFHLEdBQUcsRUFBRSxFQUFFLFFBQVEsRUFBRSxFQUFFLFdBQVcsTUFBTyxHQUFFLFNBQVUsSUFBRyxFQUFFLEVBQUUsVUFBVSxNQUFPLEdBQUUsUUFBUyxJQUFJLEdBQUUsRUFBOEQsSUFBM0QsR0FBRyxFQUFFLEVBQUUsVUFBVSxJQUFJLEVBQUUsT0FBTyxRQUFRLElBQUksRUFBRSxPQUFPLEtBQUssR0FBTSxFQUFFLEVBQUUsVUFBVSxFQUFFLEVBQUUsYUFBYSxNQUFPLEdBQUUsV0FBWSxJQUFHLElBQUksRUFBRSxFQUFFLFFBQVEsQ0FBQyxHQUFJLEdBQUUsRUFBRSxRQUFRLEdBQUcsR0FBRSxFQUFHLEVBQUUsS0FBSyxFQUFFLElBQUssR0FBRSxJQUFJLGlCQUFpQixXQUFXLE1BQU8sR0FBRSxFQUFFLElBQUssSUFBSSxHQUFFLFNBQVMsR0FBRyxJQUFJLEdBQUksR0FBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxJQUFJLEVBQUUsR0FBRyxjQUFlLEtBQUksRUFBRSxPQUFPLEVBQUUsT0FBTyxJQUFJLGFBQWEsR0FBRyxFQUFFLE1BQU0sT0FBTyxJQUFJLGFBQWEsR0FBRyxFQUFFLFFBQVEsRUFBRSxFQUFFLFNBQVMsR0FBRyxFQUFFLFNBQVMsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLE9BQU8sRUFBRSxHQUFFLEtBQU0sRUFBRSxFQUFFLFNBQVMsR0FBRyxFQUFFLEVBQUUsYUFBYSxFQUFFLE9BQU0sRUFBRyxHQUFFLE1BQU8sRUFBRSxFQUFFLEVBQUUsRUFBRyxPQUFPLEdBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEVBQUUsYUFBYSxFQUFFLFVBQVUsS0FBSyxFQUFFLEdBQUcsRUFBRSxFQUFFLFNBQVMsRUFBRSxVQUFVLEdBQUcsRUFBRSxNQUFNLElBQUksRUFBRSxFQUFFLFdBQVcsRUFBRSxZQUFZLEdBQUcsRUFBRSxRQUFRLEdBQUcsSUFBSSxFQUFFLE1BQU0sRUFBRSxTQUFRLEVBQUcsRUFBRSxXQUFXLFdBQVcsRUFBRSxLQUFLLEVBQUUsRUFBRSxXQUFXLEVBQUUsRUFBRSxTQUFTLEVBQUUsU0FBUSxFQUFHLEdBQUUsS0FBTSxFQUFFLE9BQU8sTUFBTSxFQUFFLEVBQUUsV0FBVyxFQUFFLFdBQVcsV0FBVyxFQUFFLEtBQUssRUFBRSxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUUsWUFBWSxHQUFFLEVBQUcsRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxFQUFFLElBQUksTUFBTyxVQUFTLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFJLEdBQUUsSUFBSyxPQUFPLEdBQUUsYUFBYSxFQUFFLEVBQUUsV0FBVyxLQUFLLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxJQUFJLEdBQUcsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUcsR0FBRSxNQUFNLEdBQUcsR0FBRyxFQUFFLEVBQUUsUUFBUSxTQUFTLEVBQUUsR0FBRyxHQUFJLEdBQUUsRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLFFBQVEsRUFBRSxFQUFFLE9BQU8sRUFBRSxNQUFNLE9BQU8sU0FBUyxFQUFFLFFBQVEsRUFBRSxXQUFXLEdBQUcsRUFBRSxNQUFNLEtBQU0sSUFBSSxHQUFFLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLE1BQU0sUUFBUyxHQUFFLElBQUksTUFBTSxRQUFRLElBQUksSUFBSSxFQUFFLFFBQVEsR0FBRyxJQUFJLEtBQUssRUFBRSxJQUFJLEdBQUcsT0FBTyxJQUFJLEVBQUUsR0FBRyxHQUFHLEVBQUUsUUFBUSxFQUFHLElBQUksR0FBRSxTQUFTLEVBQUUsRUFBRSxHQUFHLEdBQUksR0FBRSxFQUFFLFFBQVEsS0FBTSxLQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUksTUFBSyxFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUsS0FBTSxJQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsSUFBSSxHQUFJLEtBQUssR0FBRSxDQUFDLEdBQUksR0FBRSxFQUFFLEVBQUcsSUFBRyxFQUFFLEVBQUUsRUFBRSxHQUFFLElBQUssR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFFLEdBQUksTUFBTyxLQUFJLEVBQUUsRUFBRyxJQUFHLEVBQUUsRUFBRSxRQUFRLFlBQVksTUFBTyxVQUFTLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFJLEdBQUUsRUFBRSxRQUFRLEtBQUssRUFBRSxFQUFFLEtBQU0sSUFBRyxFQUFFLEdBQUcsSUFBSSxHQUFJLEtBQUssR0FBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLEVBQUUsR0FBRyxPQUFRLEdBQUUsRUFBRSxRQUFRLEdBQUcsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLFFBQVEsR0FBRyxFQUFFLEVBQUUsTUFBTyxJQUFJLEdBQUUsR0FBSSxJQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsT0FBTyxLQUFLLEtBQUssRUFBRSxHQUFHLEVBQUcsSUFBRyxZQUFhLElBQUcsTUFBTyxJQUFHLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRyxJQUFHLE1BQU0sUUFBUSxHQUFHLENBQUMsSUFBSSxHQUFJLEdBQUUsR0FBRyxPQUFPLEVBQUUsR0FBSSxPQUFNLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sSUFBSSxFQUFFLEdBQUcsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLE9BQU8sRUFBRyxPQUFPLEtBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFHLElBQUksR0FBRSxFQUFFLEVBQUcsSUFBRyxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsRUFBRSxRQUFRLFVBQVUsQ0FBQyxHQUFJLEdBQUUsRUFBRSxJQUFLLE1BQUssSUFBSSxFQUFFLEtBQUssSUFBSSxTQUFTLEdBQUcsSUFBSSxHQUFJLEdBQUUsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRSxHQUFHLE9BQU8sSUFBSSxDQUFDLEdBQUksR0FBRSxHQUFHLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUcsS0FBSSxHQUFHLEdBQUcsRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEtBQUssRUFBRyxJQUFJLEdBQUUsRUFBRSxRQUFRLE1BQU0sQ0FBRSxPQUFPLElBQUksSUFBRyxpQkFBaUIsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksTUFBRSxPQUFPLE9BQU8sR0FBTyxHQUFHLEtBQUssRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxTQUFTLEdBQUcsS0FBSyxRQUFTLElBQUcsRUFBRSxHQUFHLEdBQUksR0FBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBSSxPQUFPLEdBQUUsU0FBUSxFQUFHLEVBQWdCLFFBQVMsSUFBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxPQUFPLE1BQU0sUUFBUSxJQUFJLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLE1BQUUsSUFBUSxFQUFFLEtBQUssRUFBRSxJQUFJLFNBQVMsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxRQUFRLE1BQU8sS0FBNkIsSUFBeEIsRUFBRSxJQUFJLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxLQUFRLEVBQUUsTUFBTyxLQUFLLE9BQU0sUUFBUSxJQUFJLGtCQUFtQixHQUFFLE1BQU0sRUFBRSxPQUFPLGFBQWEsUUFBUSxFQUFFLElBQUksRUFBRSxPQUFPLEdBQUcsSUFBSSxHQUFHLEVBQUUsR0FBRyxHQUFHLElBQUksS0FBSyxFQUFFLFNBQVMsR0FBRyxJQUFJLEdBQUksR0FBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLElBQUksR0FBRyxNQUFNLFFBQVEsRUFBRSxJQUFJLE1BQU8sT0FBTSxVQUFVLE9BQU8sU0FBUyxFQUFHLE9BQU8sSUFBRyxHQUFJLElBQUksR0FBRSxDQUFFLElBQUcsZ0JBQWlCLEdBQUUsQ0FBQyxHQUFJLEVBQUUsR0FBRSxFQUFFLFFBQVEsRUFBRSxPQUFPLElBQUksRUFBRSxnQkFBZ0IsR0FBRyxFQUFFLEVBQUUsY0FBYyxHQUFHLEdBQUksSUFBRyxFQUFFLHFCQUFxQixHQUFHLEVBQUUsTUFBRSxPQUFPLEdBQU8sR0FBRyxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsR0FBRyxFQUFFLFNBQVMsYUFBYSxJQUFJLEdBQUksSUFBRyxFQUFFLEVBQUUsTUFBRSxPQUFPLEdBQU8sR0FBRyxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsT0FBUSxHQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRyxPQUFPLE9BQU0sUUFBUSxHQUFHLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxRQUFTLEdBQUUsRUFBRSxFQUFFLEdBQW1ELEdBQWhELEVBQUUsR0FBRyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sTUFBRSxHQUFPLEdBQUUsR0FBTyxFQUFFLEVBQUUsVUFBVSxJQUFJLEdBQUksR0FBRSxFQUFFLEVBQUUsRUFBRSxTQUFTLE9BQU8sRUFBRSxFQUFFLElBQUksQ0FBQyxHQUFJLEdBQUUsRUFBRSxTQUFTLEVBQUcsR0FBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLFFBQVEsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsSUFBSSxTQUFTLEdBQUcsRUFBRSxFQUFFLFFBQVEsR0FBRyxFQUFFLE9BQU8sRUFBRSxFQUFFLFFBQVEsR0FBRyxFQUFFLFFBQVEsR0FBRyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFrQixRQUFTLElBQUcsRUFBRSxHQUFHLE9BQU8sRUFBRSxZQUFZLElBQUksV0FBVyxFQUFFLE9BQU8sZ0JBQWdCLEVBQUUsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE9BQU8sR0FBRyxFQUFFLFFBQVMsSUFBRyxHQUFHLE1BQU8sR0FBRSxXQUFXLEVBQUUsYUFBYSxRQUFTLElBQUcsR0FBRyxHQUFHLE1BQU0sUUFBUSxHQUFHLElBQUksR0FBSSxHQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sSUFBSSxDQUFDLEdBQUksR0FBRSxFQUFFLEVBQUcsSUFBRyxFQUFFLEtBQUssRUFBRSxFQUFFLG1CQUFtQixHQUFHLElBQUksTUFBTyxJQUFHLFFBQVMsSUFBRyxFQUFFLEdBQUcsR0FBRyxJQUFJLEVBQUUsR0FBRyxRQUFTLElBQUcsRUFBRSxHQUFHLEdBQUcsS0FBSyxFQUFFLEdBQUcsUUFBUyxJQUFHLEVBQUUsR0FBRyxHQUFJLEdBQUUsRUFBRyxPQUFPLFNBQVMsS0FBSSxPQUFPLEVBQUUsTUFBTSxLQUFLLFlBQVksRUFBRSxLQUFLLEVBQUUsSUFBSSxRQUFTLElBQUcsRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLEdBQUcsRUFBRSxNQUFNLEdBQUcsR0FBRyxHQUFHLEdBQUcsT0FBRyxHQUFtQixRQUFTLElBQUcsR0FBRyxHQUFJLEdBQUUsRUFBRyxPQUFPLElBQUcsRUFBRSxXQUFXLEdBQUcsR0FBRyxRQUFTLElBQUcsR0FBRyxLQUFLLElBQUksRUFBRSxFQUFFLFVBQVUsR0FBRyxFQUFFLFVBQVUsT0FBTSxDQUFHLFFBQU0sRUFBRyxRQUFTLElBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxHQUFHLEVBQUUsaUJBQWdCLEVBQUcsR0FBRyxHQUFHLFdBQVksSUFBRyxFQUFFLGdCQUFnQixNQUFPLElBQUcsRUFBRSxXQUFXLE9BQU8sRUFBRSxVQUFVLENBQUMsRUFBRSxXQUFVLENBQUcsS0FBSSxHQUFJLEdBQUUsRUFBRSxFQUFFLEVBQUUsVUFBVSxPQUFPLElBQUksR0FBRyxFQUFFLFVBQVUsR0FBSSxJQUFHLEVBQUUsY0FBYyxRQUFTLElBQUcsRUFBRSxHQUFHLElBQUssSUFBSSxHQUFFLEVBQUUsU0FBUyxHQUFHLEVBQUUsRUFBRSxPQUFRLElBQUcsRUFBRSxJQUFJLEdBQUksR0FBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxJQUFJLEdBQUcsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUcsR0FBRSxlQUFlLEVBQUUsTUFBTSxRQUFRLEdBQUcsS0FBbU4sUUFBUyxNQUFLLEdBQUksR0FBRSxDQUFFLEtBQUksR0FBRyxLQUFLLElBQUcsRUFBRyxHQUFHLEtBQUssU0FBUyxFQUFFLEdBQUcsTUFBTyxHQUFFLEdBQUcsRUFBRSxLQUFLLEdBQUcsRUFBRSxHQUFHLEdBQUcsT0FBTyxNQUFNLEVBQUUsR0FBRyxLQUFLLFFBQVEsRUFBRSxTQUFTLEVBQUUsRUFBRSxHQUFHLEdBQUcsR0FBRyxLQUFLLEVBQUUsS0FBTSxJQUFJLEdBQUUsR0FBRyxRQUFRLEVBQUUsR0FBRyxPQUFRLElBQUcsR0FBRyxPQUFPLEdBQUcsT0FBTyxFQUFFLE1BQU0sR0FBRyxJQUFHLEVBQUcsU0FBUyxHQUFHLElBQUksR0FBSSxHQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sSUFBSSxFQUFFLEdBQUcsV0FBVSxFQUFHLEdBQUcsRUFBRSxJQUFHLElBQUssR0FBRyxTQUFTLEdBQWtCLElBQWYsR0FBSSxHQUFFLEVBQUUsT0FBWSxLQUFLLENBQUMsR0FBSSxHQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRyxHQUFFLFdBQVcsR0FBRyxFQUFFLGFBQWEsRUFBRSxjQUFjLEdBQUcsRUFBRSxhQUFhLEdBQUcsSUFBSSxFQUFFLFVBQVUsR0FBRyxLQUFLLFNBQXVwRSxRQUFTLElBQUcsRUFBRSxFQUFFLEdBQUcsR0FBRyxJQUFJLFdBQVcsTUFBTyxNQUFLLEdBQUcsSUFBSSxHQUFHLElBQUksU0FBUyxHQUFHLEtBQUssR0FBRyxHQUFHLEdBQUcsT0FBTyxlQUFlLEVBQUUsRUFBRSxJQUFJLFFBQVMsSUFBRyxHQUFHLEVBQUUsWUFBYSxJQUFJLEdBQUUsRUFBRSxRQUFTLEdBQUUsT0FBTyxTQUFTLEVBQUUsR0FBRyxHQUFJLEdBQUUsRUFBRSxTQUFTLGNBQWMsRUFBRSxFQUFFLFVBQVUsRUFBRSxFQUFFLFNBQVMsWUFBYSxHQUFFLFNBQVMsSUFBRyxFQUFzRixLQUFJLEdBQUksS0FBSyxJQUF6RixTQUFTLEdBQUcsRUFBRSxLQUFLLEVBQUcsSUFBSSxHQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRyxJQUFHLEVBQUUsRUFBRSxHQUFHLElBQUssSUFBRyxHQUFHLEVBQUUsU0FBUyxJQUFxQixFQUFHLEtBQUcsSUFBSyxFQUFFLEVBQUUsT0FBTyxFQUFFLFNBQVMsU0FBUyxFQUFFLEdBQUcsRUFBRSxTQUFTLEtBQU0sS0FBSSxHQUFJLEtBQUssR0FBRSxFQUFFLEdBQUcsa0JBQW1CLEdBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLElBQUksRUFBRSxFQUFFLFNBQVMsRUFBRSxLQUFLLFNBQVMsR0FBRyxHQUFJLEdBQUUsRUFBRSxTQUFTLElBQUssR0FBRSxFQUFFLEVBQUUsTUFBTSxrQkFBbUIsR0FBRSxTQUFTLEVBQUUsR0FBRyxJQUFLLEtBQUksTUFBTyxHQUFFLEtBQUssRUFBRSxHQUFHLE1BQU0sR0FBRyxNQUFPLElBQUcsRUFBRSxFQUFFLGFBQWEsUUFBUSxPQUFPLEVBQUUsR0FBRyxTQUFTLEtBQThFLEtBQXhFLEdBQUksR0FBRSxPQUFPLEtBQUssR0FBRyxFQUFFLEVBQUUsU0FBUyxNQUFNLEdBQUcsRUFBRSxTQUFTLFFBQVEsRUFBRSxRQUFhLEtBQUssQ0FBQyxHQUFJLEdBQUUsRUFBRSxFQUFHLElBQUcsRUFBRSxFQUFFLEtBQUssTUFBRSxHQUFPLE1BQU0sR0FBRyxFQUFFLElBQUksV0FBVyxLQUFLLEtBQUssR0FBRyxHQUFHLEVBQUUsUUFBUSxJQUFJLEdBQUksRUFBRSxJQUFHLEdBQUUsSUFBSyxHQUFHLEdBQUcsRUFBRSxVQUFTLEdBQUksRUFBRSxVQUFVLFNBQVMsRUFBRSxHQUFHLEdBQUksR0FBRSxFQUFFLGtCQUFrQixPQUFPLE9BQU8sTUFBTSxFQUFFLEdBQUksS0FBSSxHQUFJLEtBQUssR0FBRSxDQUFDLEdBQUksR0FBRSxFQUFFLEdBQUcsRUFBRSxrQkFBbUIsR0FBRSxFQUFFLEVBQUUsR0FBSSxLQUFJLEVBQUUsR0FBRyxHQUFJLElBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxLQUFLLElBQUssSUFBRyxHQUFHLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLFFBQVEsR0FBRyxTQUFTLEVBQUUsR0FBRyxJQUFJLEdBQUksS0FBSyxHQUFFLENBQUMsR0FBSSxHQUFFLEVBQUUsRUFBRyxJQUFHLE1BQU0sUUFBUSxHQUFHLElBQUksR0FBSSxHQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sSUFBSSxHQUFHLEVBQUUsRUFBRSxFQUFFLFFBQVMsSUFBRyxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsT0FBd0IsUUFBUyxJQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUksSUFBRyxHQUFJLG1CQUFtQixJQUFHLEdBQUcsSUFBSSxFQUFFLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLElBQUksR0FBRyxJQUFJLEVBQUUsSUFBSSxJQUFHLElBQUssRUFBRSxNQUFNLEdBQUcsR0FBRyxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsSUFBSSxFQUFFLEtBQUssR0FBRyxPQUFPLGVBQWUsRUFBRSxFQUFFLElBQUksUUFBUyxJQUFHLEdBQUcsTUFBTyxZQUFXLEdBQUksR0FBRSxLQUFLLG1CQUFtQixLQUFLLGtCQUFrQixFQUFHLElBQUcsRUFBRSxNQUFPLEdBQUUsT0FBTyxFQUFFLFdBQVcsR0FBRyxRQUFRLEVBQUUsU0FBUyxFQUFFLE9BQU8sUUFBUyxJQUFHLEdBQUcsTUFBTyxZQUFXLE1BQU8sR0FBRSxLQUFLLEtBQUssT0FBTyxRQUFTLElBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxNQUFPLEdBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxFQUFFLFNBQVMsZ0JBQWlCLEtBQUksRUFBRSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsRUFBRSxHQUFZLFFBQVMsSUFBRyxHQUFHLEdBQUksR0FBRSxFQUFFLE9BQVEsSUFBRyxFQUFFLE1BQU0sQ0FBQyxHQUFJLEdBQUUsR0FBRyxFQUFFLE1BQU8sSUFBRyxJQUFJLEVBQUUsYUFBYSxDQUFDLEVBQUUsYUFBYSxDQUFFLElBQUksR0FBRSxTQUFTLEdBQUcsR0FBSSxHQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUUsRUFBRSxhQUFjLEtBQUksR0FBSSxLQUFLLEdBQUUsRUFBRSxLQUFLLEVBQUUsS0FBSyxJQUFJLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBSSxPQUFPLElBQUcsRUFBRyxJQUFHLEVBQUUsRUFBRSxjQUFjLElBQUksRUFBRSxFQUFFLFFBQVEsR0FBRyxFQUFFLEVBQUUsZ0JBQWdCLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxJQUFJLE1BQU8sR0FBRSxRQUFTLElBQUcsR0FBRyxLQUFLLE1BQU0sR0FBRyxRQUFTLElBQUcsR0FBRyxFQUFFLElBQUksQ0FBRSxJQUFJLEdBQUUsQ0FBRSxHQUFFLE9BQU8sU0FBUyxHQUFHLEVBQUUsS0FBTSxJQUFJLEdBQUUsS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsUUFBUSxFQUFFLFNBQVUsSUFBRyxFQUFFLEdBQUcsTUFBTyxHQUFFLEVBQUcsSUFBSSxHQUFFLEVBQUUsTUFBTSxFQUFFLFFBQVEsS0FBSyxFQUFFLFNBQVMsR0FBRyxLQUFLLE1BQU0sR0FBSSxRQUFPLEVBQUUsVUFBVSxPQUFPLE9BQU8sRUFBRSxZQUFZLFlBQVksRUFBRSxFQUFFLElBQUksSUFBSSxFQUFFLFFBQVEsR0FBRyxFQUFFLFFBQVEsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLFFBQVEsT0FBTyxTQUFTLEdBQUcsR0FBSSxHQUFFLEVBQUUsUUFBUSxLQUFNLEtBQUksR0FBSSxLQUFLLEdBQUUsR0FBRyxFQUFFLFVBQVUsU0FBUyxJQUFJLEdBQUcsRUFBRSxRQUFRLFVBQVUsU0FBUyxHQUFHLEdBQUksR0FBRSxFQUFFLFFBQVEsUUFBUyxLQUFJLEdBQUksS0FBSyxHQUFFLEdBQUcsRUFBRSxVQUFVLEVBQUUsRUFBRSxLQUFLLEdBQUcsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxRQUFRLFNBQVMsR0FBRyxFQUFFLEdBQUcsRUFBRSxLQUFLLElBQUksRUFBRSxRQUFRLFdBQVcsR0FBRyxHQUFHLEVBQUUsYUFBYSxFQUFFLFFBQVEsRUFBRSxjQUFjLEVBQUUsRUFBRSxjQUFjLEtBQUssRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLEdBQUcsUUFBUyxJQUFHLEdBQUcsTUFBTyxLQUFJLEVBQUUsS0FBSyxRQUFRLE1BQU0sRUFBRSxLQUFLLFFBQVMsSUFBRyxFQUFFLEdBQUcsTUFBTyxPQUFNLFFBQVEsR0FBRyxFQUFFLFFBQVEsSUFBSSxFQUFFLGdCQUFpQixHQUFFLEVBQUUsTUFBTSxLQUFLLFFBQVEsSUFBSSxHQUFHLEVBQUUsRUFBRSxvQkFBb0IsRUFBRSxLQUFLLElBQUksRUFBRSxLQUFLLEdBQUksSUFBSSxHQUFFLFFBQVMsSUFBRyxFQUFFLEdBQUcsR0FBSSxHQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsTUFBTyxLQUFJLEdBQUksS0FBSyxHQUFFLENBQUMsR0FBSSxHQUFFLEVBQUUsRUFBRyxJQUFHLEVBQUUsQ0FBQyxHQUFJLEdBQUUsR0FBRyxFQUFFLGlCQUFrQixLQUFJLEVBQUUsSUFBSSxHQUFHLEVBQUUsRUFBRSxFQUFFLEtBQUssUUFBUyxJQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBSSxHQUFFLEVBQUUsSUFBSSxHQUFHLEdBQUcsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLGtCQUFrQixXQUFXLEVBQUUsR0FBRyxLQUFLLEVBQUUsRUFBRSxHQUFvN04sUUFBUyxJQUFHLEdBQUcsSUFBSSxHQUFJLEdBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLHFCQUFxQixFQUFFLEVBQUUsa0JBQWtCLFNBQVMsRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLEtBQUssR0FBSSxNQUFLLEVBQUUsRUFBRSxFQUFFLFNBQVMsR0FBRyxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsRUFBRSxNQUFPLE9BQU8sVUFBUyxFQUFFLEdBQUcsTUFBRyxHQUFFLElBQUksRUFBRSxHQUFVLEdBQUcsRUFBRSxHQUFHLElBQVUsSUFBSSxFQUFFLFlBQVksRUFBRSxPQUFPLFFBQVMsSUFBRyxFQUFFLEdBQUcsT0FBTyxZQUFZLEdBQUcsRUFBRSxZQUFZLEVBQUUsYUFBYSxNQUFNLEVBQUUsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLFFBQVMsSUFBRyxFQUFFLEdBQUcsTUFBTyxHQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxHQUFHLEdBQUcsUUFBUyxJQUFHLEdBQUcsTUFBTyxPQUFNLFFBQVEsR0FBRyxTQUFTLEdBQUcsSUFBSSxHQUFJLEdBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsR0FBRyxFQUFFLE1BQU0sS0FBSyxJQUFJLElBQUksR0FBRyxLQUFLLEdBQUcsRUFBRyxPQUFPLElBQUcsR0FBRyxFQUFFLEdBQUcsU0FBUyxHQUFHLEdBQUksR0FBRSxFQUFHLEtBQUksR0FBSSxLQUFLLEdBQUUsRUFBRSxLQUFLLElBQUksR0FBRyxLQUFLLEdBQUcsRUFBRyxPQUFPLElBQUcsR0FBRyxnQkFBaUIsR0FBRSxFQUFFLEdBQXM1RCxRQUFTLElBQUcsRUFBRSxHQUFHLEdBQUksR0FBRSxFQUFFLEtBQUssR0FBSSxJQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUksR0FBRSxFQUFFLFFBQVEsRUFBRSxFQUFFLG1CQUFtQixFQUFFLElBQUksRUFBRSxFQUFFLEtBQU0sR0FBRSxNQUFNLFFBQVEsRUFBRSxJQUFJLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxLQUFLLElBQUksRUFBRSxPQUFHLElBQVEsRUFBRSxLQUFLLFNBQVMsTUFBTSxRQUFRLEVBQUUsSUFBSSxFQUFFLEdBQUcsUUFBUSxHQUFHLEdBQUcsRUFBRSxHQUFHLEtBQUssR0FBRyxFQUFFLElBQUksR0FBRyxFQUFFLEdBQUcsR0FBZ0YsUUFBUyxJQUFHLEVBQUUsR0FBRyxNQUFPLEdBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsRUFBRSxRQUFRLEVBQUUsRUFBRSxPQUFPLFNBQVMsRUFBRSxHQUFHLEdBQUcsVUFBVSxFQUFFLElBQUksT0FBTSxDQUFHLElBQUksR0FBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFLLE9BQU8sS0FBSSxHQUFHLEdBQUcsSUFBSSxHQUFHLElBQUksRUFBRSxJQUFJLEVBQUUsRUFBRSxxQkFBcUIsRUFBRSxlQUFlLEVBQUUsY0FBYyxFQUFFLEVBQUUsYUFBYSxRQUFRLFFBQVMsSUFBRyxFQUFFLEVBQUUsR0FBRyxHQUFJLEdBQUUsRUFBRSxJQUFLLEtBQUksRUFBRSxFQUFFLEdBQUcsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsT0FBTyxFQUFFLEdBQUcsRUFBRyxPQUFPLEdBQTZELFFBQVMsSUFBRyxFQUFFLElBQUksRUFBRSxLQUFLLFlBQVksRUFBRSxLQUFLLGFBQWEsU0FBUyxFQUFFLEdBQUcsR0FBSSxHQUFFLEVBQUUsRUFBRSxFQUFFLElBQUksR0FBRyxFQUFFLElBQUksR0FBRyxFQUFFLEdBQUcsRUFBRSxLQUFLLFdBQVcsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLEtBQUssV0FBVyxFQUFFLFNBQVMsS0FBSyxJQUFLLEtBQUksSUFBSyxHQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxJQUFJLEdBQUcsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLGtCQUFrQixFQUFFLEtBQUssS0FBSyxHQUFHLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxVQUFVLEVBQUUsS0FBSyxHQUFJLElBQUcsRUFBRSxPQUFPLENBQUMsR0FBSSxHQUFFLFdBQVcsSUFBSSxHQUFJLEdBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxJQUFJLEdBQUcsRUFBRSxHQUFHLFdBQVcsRUFBRSxHQUFJLEdBQUUsR0FBRyxFQUFFLFNBQVMsR0FBRyxJQUF1RyxHQUFuRyxFQUFFLFFBQVEsR0FBRyxFQUFFLFlBQVksV0FBVyxJQUFJLEdBQUksR0FBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLElBQUksR0FBRyxFQUFFLEdBQUcsbUJBQW1CLEVBQUUsTUFBUyxFQUFFLElBQUksSUFBSyxHQUFFLEVBQUUsSUFBSSxHQUFHLEVBQUUsR0FBRyxTQUFTLEVBQUUsRUFBRSxJQUFJLEVBQUUsR0FBOEIsUUFBUyxJQUFHLEVBQUUsR0FBRyxHQUFJLEdBQUUsRUFBRSxFQUFFLE9BQU8sT0FBTyxLQUFNLEtBQUksRUFBRSxNQUFPLEVBQUUsS0FBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sS0FBSyxFQUFFLEVBQUUsSUFBSSxZQUFZLEVBQUUsVUFBVSxJQUFJLEVBQUUsR0FBRyxJQUFJLEVBQUUsRUFBRSxJQUFJLEdBQUcsRUFBRSxTQUFTLGFBQWEsRUFBRSxLQUFNLE9BQU8sR0FBRSxRQUFTLElBQUcsR0FBRyxNQUFPLEdBQUUsU0FBUyxFQUFFLEtBQUssSUFBSSxPQUFPLEtBQUssRUFBRSxlQUFlLEtBQUssS0FBSyxRQUFTLElBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEdBQUksR0FBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUcsSUFBRyxFQUFFLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsR0FBRyxNQUFNLEdBQUcsR0FBRyxFQUFFLEVBQUUsUUFBUSxhQUFhLEVBQUUsS0FBSyxJQUFJLEVBQUUsVUFBeUIsUUFBUyxJQUFHLEVBQUUsR0FBRyxHQUFJLEdBQUUsRUFBRSxnQkFBaUIsTUFBSyxFQUFFLEtB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QUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUcsS0FBSSxHQUFJLEdBQUUsRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRyxPQUFPLElBQUcsRUFBTSxLQUFJLElBQUssR0FBRSxFQUFFLEVBQUUsS0FBSyxHQUFHLEVBQUUsRUFBRSxHQUFJLEtBQUksSUFBSyxJQUFHLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxHQUFHLEVBQUUsRUFBRSxNQUFNLEVBQUUsR0FBRyxJQUEwQyxRQUFTLElBQUcsRUFBRSxHQUFHLEdBQUcsSUFBSSxFQUFFLEVBQUUsUUFBUSxHQUFHLEVBQUUsVUFBVSxFQUFFLFFBQVEsTUFBTSxFQUFFLEVBQUUsTUFBTSxJQUFJLFFBQVEsU0FBUyxHQUFHLE1BQU8sR0FBRSxVQUFVLElBQUksS0FBSyxFQUFFLFVBQVUsSUFBSSxPQUFPLENBQUMsR0FBSSxHQUFFLEtBQUssRUFBRSxhQUFhLFVBQVUsSUFBSSxHQUFJLEdBQUUsUUFBUSxJQUFJLEVBQUUsS0FBSyxHQUFHLEVBQUUsYUFBYSxTQUFTLEVBQUUsR0FBRyxTQUFTLFFBQVMsSUFBRyxFQUFFLEdBQUcsR0FBRyxJQUFJLEVBQUUsRUFBRSxRQUFRLEdBQUcsRUFBRSxVQUFVLEVBQUUsUUFBUSxNQUFNLEVBQUUsRUFBRSxNQUFNLElBQUksUUFBUSxTQUFTLEdBQUcsTUFBTyxHQUFFLFVBQVUsT0FBTyxLQUFLLEVBQUUsVUFBVSxPQUFPLEdBQUcsRUFBRSxVQUFVLFFBQVEsRUFBRSxnQkFBZ0IsYUFBYSxDQUFDLElBQUksR0FBSSxHQUFFLEtBQUssRUFBRSxhQUFhLFVBQVUsSUFBSSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxRQUFRLElBQUksR0FBRyxFQUFFLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxFQUFFLFFBQVEsRUFBRSxhQUFhLFFBQVEsR0FBRyxFQUFFLGdCQUFnQixVQUFVLFFBQVMsSUFBRyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsZ0JBQWlCLEdBQUUsQ0FBQyxHQUFJLEtBQUssUUFBTSxJQUFLLEVBQUUsS0FBSyxFQUFFLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxFQUFFLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWlCLEdBQUUsR0FBRyxPQUFHLElBQWtxQixRQUFTLElBQUcsR0FBRyxHQUFHLFdBQVcsR0FBRyxLQUFLLFFBQVMsSUFBRyxFQUFFLEdBQUcsR0FBSSxHQUFFLEVBQUUscUJBQXFCLEVBQUUsc0JBQXVCLEdBQUUsUUFBUSxHQUFHLElBQUksRUFBRSxLQUFLLEdBQUcsR0FBRyxFQUFFLElBQUksUUFBUyxJQUFHLEVBQUUsR0FBRyxFQUFFLG9CQUFvQixFQUFFLEVBQUUsbUJBQW1CLEdBQUcsR0FBRyxFQUFFLEdBQUcsUUFBUyxJQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUksR0FBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsUUFBUSxFQUFFLEVBQUUsU0FBVSxLQUFJLEVBQUUsTUFBTyxJQUFJLElBQUksR0FBRSxJQUFJLEdBQUcsR0FBRyxHQUFHLEVBQUUsRUFBRSxFQUFFLFdBQVcsRUFBRSxvQkFBb0IsRUFBRSxHQUFHLEtBQUssRUFBRSxTQUFTLEdBQUcsRUFBRSxTQUFTLEtBQUssR0FBRyxHQUFHLElBQUssWUFBVyxXQUFXLEVBQUUsR0FBRyxLQUFLLEVBQUUsR0FBRyxFQUFFLGlCQUFpQixFQUFFLEdBQW1DLFFBQVMsSUFBRyxFQUFFLEdBQUcsR0FBSSxHQUFFLEVBQUUsT0FBTyxpQkFBaUIsR0FBRyxHQUFHLEVBQUUsR0FBRyxVQUFVLElBQUksTUFBTSxNQUFNLEdBQUcsRUFBRSxHQUFHLGFBQWEsSUFBSSxNQUFNLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxVQUFVLElBQUksTUFBTSxNQUFNLEdBQUcsRUFBRSxHQUFHLGFBQWEsSUFBSSxNQUFNLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFFLE9BQU8sS0FBSSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxRQUFRLElBQUksR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsUUFBUSxHQUFHLEdBQUcsRUFBRSxLQUFLLElBQUksRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBRyxNQUFNLElBQUksR0FBRyxFQUFFLE9BQU8sRUFBRSxPQUFPLEdBQUcsS0FBSyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsYUFBYSxJQUFJLElBQUksR0FBRyxLQUFLLEVBQUUsR0FBRyxjQUFjLFFBQVMsSUFBRyxFQUFFLEdBQUcsS0FBSyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsRUFBRSxPQUFPLEVBQUcsT0FBTyxNQUFLLElBQUksTUFBTSxLQUFLLEVBQUUsSUFBSSxTQUFTLEVBQUUsR0FBRyxNQUFPLElBQUcsR0FBRyxHQUFHLEVBQUUsT0FBTyxRQUFTLElBQUcsR0FBRyxNQUFPLEtBQUksT0FBTyxFQUFFLE1BQU0sR0FBRyxHQUFHLFFBQVEsSUFBSSxNQUFNLFFBQVMsSUFBRyxFQUFFLEdBQUcsR0FBSSxHQUFFLEVBQUUsR0FBSSxHQUFFLEVBQUUsWUFBWSxFQUFFLFNBQVMsV0FBVSxFQUFHLEVBQUUsV0FBWSxJQUFJLEdBQUUsR0FBRyxFQUFFLEtBQUssV0FBWSxLQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsV0FBVyxJQUFJLEVBQUUsU0FBUyxDQUFDLElBQUksR0FBSSxHQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsV0FBVyxFQUFFLEVBQUUsYUFBYSxFQUFFLEVBQUUsaUJBQWlCLEVBQUUsRUFBRSxZQUFZLEVBQUUsRUFBRSxjQUFjLEVBQUUsRUFBRSxrQkFBa0IsRUFBRSxFQUFFLFlBQVksRUFBRSxFQUFFLE1BQU0sRUFBRSxFQUFFLFdBQVcsRUFBRSxFQUFFLGVBQWUsRUFBRSxFQUFFLGFBQWEsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLFlBQVksRUFBRSxFQUFFLGdCQUFnQixFQUFFLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxHQUFHLE9BQU8sR0FBRyxFQUFFLFFBQVEsRUFBRSxFQUFFLFFBQVEsRUFBRSxFQUFFLE1BQU8sSUFBSSxJQUFHLEVBQUUsYUFBYSxFQUFFLFlBQWEsS0FBSSxHQUFHLEdBQUcsS0FBSyxFQUFFLENBQUMsR0FBSSxHQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLEVBQUUsR0FBRyxrQkFBbUIsR0FBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxNQUFNLEdBQUcsR0FBRSxJQUFLLElBQUksRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLEVBQUUsU0FBUyxFQUFFLFdBQVcsSUFBSSxHQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsSUFBSSxFQUFFLFdBQVcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsSUFBSSxHQUFHLEVBQUUsR0FBRyxFQUFFLFNBQVMsTUFBTyxHQUFFLEtBQUssTUFBTSxHQUFHLEVBQUUsU0FBUyxXQUFXLEdBQUksR0FBRSxFQUFFLFdBQVcsRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxJQUFLLElBQUcsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLElBQUksVUFBVSxFQUFFLElBQUksV0FBVyxHQUFHLEVBQUUsRUFBRSxLQUFLLEdBQUcsRUFBRSxHQUFHLElBQUksR0FBRyxFQUFFLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxXQUFXLEdBQUcsRUFBRSxHQUFHLEVBQUUsWUFBWSxHQUFHLEVBQUUsR0FBRyxJQUFJLEdBQUcsR0FBRyxXQUFXLEVBQUUsR0FBRyxHQUFHLEVBQUUsRUFBRSxRQUFRLEVBQUUsS0FBSyxPQUFPLEdBQUcsSUFBSSxHQUFHLEVBQUUsRUFBRSxJQUFJLEdBQUcsR0FBRyxNQUFNLFFBQVMsSUFBRyxFQUFFLEdBQXNpQixRQUFTLEtBQUksRUFBRSxhQUFhLEVBQUUsS0FBSyxNQUFNLEVBQUUsY0FBYyxFQUFFLFdBQVcsV0FBVyxFQUFFLFdBQVcsY0FBYyxFQUFFLEtBQUssR0FBRyxHQUFHLEVBQUUsR0FBRyxJQUFJLEdBQUcsRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsV0FBVyxHQUFHLEVBQUUsR0FBRyxFQUFFLFlBQVksR0FBRyxFQUFFLEdBQUcsSUFBSSxHQUFHLEdBQUcsV0FBVyxFQUFFLEdBQUcsR0FBRyxFQUFFLEVBQUUsUUFBUSxHQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsR0FBRyxLQUExeEIsR0FBSSxHQUFFLEVBQUUsR0FBSSxHQUFFLEVBQUUsWUFBWSxFQUFFLFNBQVMsV0FBVSxFQUFHLEVBQUUsV0FBWSxJQUFJLEdBQUUsR0FBRyxFQUFFLEtBQUssV0FBWSxJQUFHLEVBQUUsSUFBSSxJQUFJLEVBQUUsU0FBUyxNQUFPLElBQUksS0FBSSxFQUFFLEVBQUUsVUFBVSxDQUFDLEdBQUksR0FBRSxFQUFFLElBQUksRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFLFdBQVcsRUFBRSxFQUFFLGFBQWEsRUFBRSxFQUFFLGlCQUFpQixFQUFFLEVBQUUsWUFBWSxFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUsV0FBVyxFQUFFLEVBQUUsZUFBZSxFQUFFLEVBQUUsV0FBVyxFQUFFLEVBQUUsU0FBUyxHQUFFLElBQUssSUFBSSxFQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxNQUFNLEdBQUcsRUFBRSxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLFdBQVcsV0FBVyxFQUFFLFdBQVcsU0FBUyxFQUFFLEtBQUssTUFBTSxJQUFJLEdBQUcsRUFBRSxHQUFHLEdBQUcsRUFBRSxJQUFJLEVBQUUsV0FBVyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsRUFBRSxLQUFLLElBQUksR0FBRyxFQUFFLElBQUksRUFBRSxTQUFTLE1BQU8sR0FBRSxFQUFFLEdBQUcsS0FBaVEsUUFBUyxJQUFHLEdBQUcsTUFBTSxnQkFBaUIsS0FBSSxNQUFNLEdBQUcsUUFBUyxJQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsT0FBTSxDQUFHLElBQUksR0FBRSxFQUFFLEdBQUksT0FBTyxHQUFFLEdBQUcsR0FBRyxNQUFNLFFBQVEsR0FBRyxFQUFFLEdBQUcsSUFBSSxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsUUFBUyxJQUFHLEVBQUUsSUFBRyxJQUFLLEVBQUUsS0FBSyxNQUFNLEdBQUcsR0FBa3dNLFFBQVMsSUFBRyxFQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsRUFBRSxJQUFJLEdBQUcsSUFBSSxXQUFXLFdBQVcsR0FBRyxFQUFFLEVBQUUsSUFBSSxHQUFHLFFBQVMsSUFBRyxFQUFFLEVBQUUsR0FBRyxHQUFJLEdBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxRQUFTLEtBQUksR0FBRyxNQUFNLFFBQVEsR0FBRyxDQUFDLElBQUksR0FBSSxHQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxRQUFRLE9BQU8sRUFBRSxFQUFFLElBQUksR0FBRyxFQUFFLEVBQUUsUUFBUSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxLQUFLLEVBQUUsRUFBRSxXQUFXLElBQUksRUFBRSxTQUFTLE9BQVEsSUFBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLFlBQVksRUFBRSxnQkFBZ0IsSUFBSSxFQUFFLGNBQWMsR0FBSSxLQUFJLEVBQUUsZUFBZSxJQUFJLFFBQVMsSUFBRyxFQUFFLEdBQUcsTUFBTyxHQUFFLE1BQU0sU0FBUyxHQUFHLE9BQU8sRUFBRSxFQUFFLEtBQUssUUFBUyxJQUFHLEdBQUcsTUFBTSxVQUFXLEdBQUUsRUFBRSxPQUFPLEVBQUUsTUFBTSxRQUFTLElBQUcsR0FBRyxFQUFFLE9BQU8sV0FBVSxFQUFHLFFBQVMsSUFBRyxHQUFHLEVBQUUsT0FBTyxZQUFZLEVBQUUs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LEdBQUcsTUFBTSxVQUFVLEdBQUcsT0FBTyxPQUFPLEtBQUssT0FBTyxNQUFNLFFBQVEsVUFBVSxTQUFTLE9BQU8sV0FBVyxRQUFRLFNBQVMsR0FBRyxHQUFJLEdBQUUsR0FBRyxFQUFHLEdBQUUsR0FBRyxFQUFFLFdBQVcsSUFBSSxHQUFJLE1BQUssRUFBRSxVQUFVLE9BQU8sS0FBSyxFQUFFLEdBQUcsVUFBVSxFQUFHLElBQUksR0FBRSxFQUFFLEVBQUUsTUFBTSxLQUFLLEdBQUcsRUFBRSxLQUFLLE1BQU8sUUFBTyxHQUFHLElBQUksT0FBTyxJQUFJLFVBQVUsRUFBRSxDQUFFLE1BQU0sS0FBSSxTQUFTLEVBQUUsRUFBRSxNQUFNLEdBQUcsTUFBTyxJQUFHLEVBQUUsYUFBYSxHQUFHLEVBQUUsSUFBSSxTQUFTLEtBQU0sSUFBSSxJQUFHLE9BQU8sb0JBQW9CLElBQUksSUFBRyxFQUEyQixHQUFHLFNBQVMsR0FBRyxHQUFJLEVBQUUsTUFBSyxNQUFNLEVBQUUsS0FBSyxJQUFJLEdBQUksSUFBRyxLQUFLLFFBQVEsRUFBRSxFQUFFLEVBQUUsU0FBUyxNQUFNLE1BQU0sUUFBUSxJQUFJLEdBQUcsRUFBRSxHQUFHLEVBQUUsVUFBVSxHQUFHLFNBQVMsRUFBRSxFQUFFLEdBQUcsSUFBSSxHQUFJLEdBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsSUFBSSxDQUFDLEdBQUksR0FBRSxFQUFFLEVBQUcsR0FBRSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsR0FBRyxJQUFJLEtBQUssYUFBYSxJQUFJLEtBQUssS0FBSyxHQUFncUMsSUFBRyxVQUFVLEtBQUssU0FBUyxHQUFHLElBQUksR0FBSSxHQUFFLE9BQU8sS0FBSyxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxJQUFJLEdBQUcsRUFBRSxFQUFFLEtBQUssR0FBRyxVQUFVLGFBQWEsU0FBUyxHQUFHLElBQUksR0FBSSxHQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLElBQUksR0FBRyxFQUFFLElBQUssSUFBSSxJQUFHLEVBQUUscUJBQTZyQixJQUFHLEtBQUssU0FBUyxFQUFFLEVBQUUsR0FBRyxNQUFPLEdBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxHQUFHLGtCQUFtQixHQUFFLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxRQUFRLFNBQVMsR0FBRyxHQUFHLEdBQUcsS0FBSyxFQUFFLFFBQVEsU0FBUyxHQUFHLEdBQUcsRUFBRSxLQUFLLEtBQUssR0FBRyxNQUFNLFNBQVMsRUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFHLElBQUksSUFBSSxNQUFFLElBQVEsSUFBSSxJQUFJLE1BQUUsS0FBUyxFQUFFLE1BQU8sUUFBTyxPQUFPLEdBQUcsS0FBTSxLQUFJLEVBQUUsTUFBTyxFQUFFLElBQUksS0FBSyxLQUFJLEdBQUksS0FBSyxHQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBSSxHQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRyxLQUFJLE1BQU0sUUFBUSxLQUFLLEdBQUcsSUFBSSxFQUFFLEdBQUcsRUFBRSxFQUFFLE9BQU8sR0FBRyxNQUFNLFFBQVEsR0FBRyxHQUFHLEdBQUcsTUFBTyxJQUFHLEdBQUcsTUFBTSxHQUFHLFFBQVEsR0FBRyxPQUFPLEdBQUcsU0FBUyxTQUFTLEVBQUUsRUFBRSxFQUFFLEdBQUcsSUFBSSxFQUFFLE1BQU8sRUFBRSxJQUFJLEdBQUUsT0FBTyxPQUFPLEtBQU0sT0FBTyxHQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsR0FBRyxRQUFRLEVBQUcsSUFBSSxJQUFHLFNBQVMsRUFBRSxHQUFHLFdBQU8sS0FBUyxFQUFFLEVBQUUsR0FBeXdFLEdBQUcsSUFBRyxFQUFHLE1BQU0sSUFBRyxDQUF1RixJQUFHLG1CQUFvQixVQUFTLEdBQUcsU0FBUyxDQUFDLEdBQUksSUFBRyxRQUFRLFNBQVUsSUFBRyxXQUFXLEdBQUcsS0FBSyxJQUFJLEdBQUcsV0FBVyxJQUFJLElBQUcsTUFBUSxJQUFHLEdBQUcsbUJBQW9CLG9CQUFtQixHQUFHLG1CQUFtQix5Q0FBeUMsaUJBQWlC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SUFBSSxFQUFFLEtBQUssR0FBRyxDQUFDLEdBQUksR0FBRSxFQUFFLE1BQU0sSUFBSyxPQUFPLFVBQVMsR0FBRyxJQUFJLEdBQUksR0FBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTyxHQUFFLEVBQUUsRUFBRSxJQUFJLE1BQU8sTUFBSyxHQUFHLEtBQUssU0FBUyxLQUFLLE9BQU8sSUFBSSxLQUFLLE1BQU0sS0FBSyxTQUFLLEdBQU8sS0FBSyxNQUFPLElBQUcsVUFBVSxJQUFJLFdBQVcsR0FBSSxFQUFFLElBQUcsS0FBTSxJQUFJLEdBQUUsS0FBSyxFQUFHLEtBQUksRUFBRSxLQUFLLE9BQU8sS0FBSyxFQUFFLEdBQUcsTUFBTSxHQUFHLElBQUksS0FBSyxLQUFLLEtBQU0sRUFBRSxJQUFHLEVBQUUsRUFBRSx1QkFBdUIsS0FBSyxXQUFXLEtBQUssUUFBUSxLQUFLLE1BQU0sR0FBRyxHQUFHLEtBQUssS0FBSyxjQUFjLE1BQU8sSUFBRyxHQUFHLFVBQVUsT0FBTyxTQUFTLEdBQUcsR0FBSSxHQUFFLEVBQUUsRUFBRyxNQUFLLFVBQVUsSUFBSSxLQUFLLEtBQUssVUFBVSxJQUFJLEdBQUcsS0FBSyxRQUFRLEtBQUssR0FBRyxLQUFLLE9BQU8sSUFBSSxJQUFJLEVBQUUsT0FBTyxRQUFRLEdBQUcsVUFBVSxZQUFZLFdBQVcsSUFBSSxHQUFJLEdBQUUsS0FBSyxLQUFLLE9BQU8sS0FBSyxDQUFDLEdBQUksR0FBRSxLQUFLLEtBQUssRUFBRyxNQUFLLFVBQVUsSUFBSSxFQUFFLEtBQUssRUFBRSxVQUFVLE1BQU0sR0FBSSxHQUFFLEtBQUssTUFBTyxNQUFLLE9BQU8sS0FBSyxVQUFVLEtBQUssVUFBVSxFQUFFLEtBQUssVUFBVSxRQUFRLEVBQUUsS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLFFBQVEsS0FBSyxRQUFRLEVBQUUsS0FBSyxRQUFRLE9BQU8sR0FBRyxHQUFHLFVBQVUsT0FBTyxXQUFXLEtBQUssS0FBSyxLQUFLLE9BQU0sRUFBRyxLQUFLLEtBQUssS0FBSyxNQUFNLFNBQVMsR0FBRyxHQUFJLEdBQUUsRUFBRSxFQUFHLElBQUcsTUFBTSxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBRyxFQUFHLEdBQUcsQ0FBQyxJQUFJLEdBQUksR0FBRSxHQUFHLE9BQU8sRUFBRSxFQUFFLElBQUksR0FBRyxHQUFHLEdBQUcsRUFBRSxJQUFJLEdBQUksSUFBRyxPQUFPLEVBQUUsRUFBRSxFQUFFLE9BQVEsSUFBRyxLQUFLLEVBQUcsTUFBSyxJQUFHLEVBQUcsR0FBRyxPQUFPLE9BQU8sR0FBRyxVQUFVLElBQUksV0FBVyxHQUFHLEtBQUssT0FBTyxDQUFDLEdBQUksR0FBRSxLQUFLLEtBQU0sSUFBRyxJQUFJLEtBQUssT0FBTyxFQUFFLElBQUksS0FBSyxLQUFLLENBQUMsR0FBSSxHQUFFLEtBQUssS0FBTSxJQUFHLEtBQUssTUFBTSxFQUFFLEtBQUssS0FBSyxJQUFJLEtBQUssR0FBRyxLQUFLLEtBQUssR0FBRyxFQUFFLEdBQUcsTUFBTSxHQUFHLEdBQUcsRUFBRSxLQUFLLEdBQUcseUJBQXlCLEtBQUssV0FBVyxTQUFVLE1BQUssR0FBRyxLQUFLLEtBQUssR0FBRyxFQUFFLE1BQU0sR0FBRyxVQUFVLFNBQVMsV0FBVyxLQUFLLE1BQU0sS0FBSyxNQUFNLEtBQUssT0FBTSxHQUFJLEdBQUcsVUFBVSxPQUFPLFdBQVcsSUFBSSxHQUFJLEdBQUUsS0FBSyxLQUFLLE9BQU8sS0FBSyxLQUFLLEtBQUssR0FBRyxVQUFVLEdBQUcsVUFBVSxTQUFTLFdBQVcsR0FBRyxLQUFLLE9BQU8sQ0FBQyxLQUFLLEdBQUcsbUJBQW1CLEVBQUUsS0FBSyxHQUFHLFVBQVUsS0FBTSxLQUFJLEdBQUksR0FBRSxLQUFLLEtBQUssT0FBTyxLQUFLLEtBQUssS0FBSyxHQUFHLFVBQVUsS0FBTSxNQUFLLFFBQU8sR0FBSyxJQUFJLEtBQUksWUFBVyxFQUFHLGNBQWEsRUFBRyxJQUFJLEVBQUUsSUFBSSxHQUFndkMsSUFBSSxNQUFLLEdBQWdmLEdBQUcsR0FBdzhDLFNBQVMsR0FBRyxFQUFFLFVBQVUsTUFBTSxTQUFTLEdBQUcsR0FBSSxHQUFFLElBQUssR0FBRSxLQUFLLEtBQUssRUFBRSxRQUFPLEVBQUcsR0FBRyxFQUFFLGFBQWEsU0FBUyxFQUFFLEdBQUcsR0FBSSxHQUFFLEVBQUUsU0FBUyxPQUFPLE9BQU8sRUFBRSxZQUFZLFNBQVMsRUFBRSxFQUFFLFlBQWEsR0FBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLGFBQWEsQ0FBRSxJQUFJLEdBQUUsRUFBRSxnQkFBaUIsR0FBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLGlCQUFpQixFQUFFLFVBQVUsRUFBRSxnQkFBZ0IsRUFBRSxTQUFTLEVBQUUsY0FBYyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxrQkFBa0IsRUFBRSxHQUFHLEVBQUUsU0FBUyxHQUFHLEdBQUcsRUFBRSxhQUFhLE1BQU0sR0FBRyxFQUFFLGFBQWEsRUFBRSxFQUFFLE1BQU0sRUFBRSxTQUFTLEdBQUcsR0FBSSxHQUFFLEVBQUUsU0FBUyxFQUFFLEVBQUUsTUFBTyxJQUFHLElBQUksRUFBRSxTQUFTLENBQUMsS0FBSyxFQUFFLFNBQVMsVUFBVSxFQUFFLFNBQVMsRUFBRSxFQUFFLE9BQVEsR0FBRSxVQUFVLEtBQUssR0FBRyxFQUFFLFFBQVEsRUFBRSxFQUFFLE1BQU0sRUFBRSxFQUFFLE1BQU0sRUFBRSxFQUFFLGFBQWEsRUFBRSxTQUFTLEVBQUUsU0FBUyxLQUFLLEVBQUUsVUFBVSxLQUFLLEVBQUUsaUJBQWdCLEVBQUcsRUFBRSxZQUFXLEVBQUcsRUFBRSxjQUFhLEVBQUcsRUFBRSxtQkFBa0IsR0FBSSxHQUFHLFNBQVMsR0FBRyxFQUFFLFFBQVEsT0FBTyxPQUFPLE1BQU0sRUFBRSxlQUFjLENBQUcsSUFBSSxHQUFFLEVBQUUsU0FBUyxnQkFBaUIsSUFBRyxHQUFHLEVBQUUsSUFBSSxHQUFHLFNBQVMsR0FBRyxFQUFFLE9BQU8sS0FBSyxFQUFFLGFBQWEsSUFBSyxJQUFJLEdBQUUsRUFBRSxTQUFTLEVBQUUsRUFBRSxPQUFPLEVBQUUsYUFBYSxFQUFFLEdBQUcsRUFBRSxPQUFRLEdBQUUsT0FBTyxHQUFHLEVBQUUsZ0JBQWdCLEdBQUcsRUFBRSxhQUFhLEVBQUUsRUFBRSxHQUFHLFNBQVMsRUFBRSxFQUFFLEVBQUUsR0FBRyxNQUFPLElBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFFLElBQUssRUFBRSxlQUFlLFNBQVMsRUFBRSxFQUFFLEVBQUUsR0FBRyxNQUFPLElBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFFLEdBQUssSUFBSSxHQUFFLEdBQUcsRUFBRSxJQUFLLElBQUcsRUFBRSxTQUFTLEdBQUcsRUFBRSxPQUFPLEVBQUUsTUFBSyxHQUFJLEdBQUcsRUFBRSxhQUFhLEVBQUUsa0JBQWtCLEVBQUUsTUFBSyxJQUFLLEdBQUcsR0FBRyxFQUFFLGdCQUFnQixTQUFTLEdBQUcsR0FBSSxHQUFFLEdBQUcsRUFBRSxTQUFTLE9BQU8sRUFBRyxLQUFJLElBQUcsR0FBSSxPQUFPLEtBQUssR0FBRyxRQUFRLFNBQVMsR0FBRyxHQUFHLEVBQUUsRUFBRSxFQUFFLE1BQU0sSUFBRyxLQUFNLEdBQUcsR0FBRyxHQUFHLFNBQVMsR0FBRyxHQUFJLEdBQUUsRUFBRSxTQUFTLE9BQVEsS0FBSSxFQUFFLFVBQVUsa0JBQW1CLEdBQUUsRUFBRSxLQUFLLEdBQUcsSUFBSSxHQUFHLEdBQUcsRUFBRSxXQUFXLEVBQUUsU0FBUyxJQUFJLEVBQUUsT0FBTyxFQUFFLFNBQVMsTUFBTSxJQUFJLFNBQVMsR0FBRyxHQUFJLElBQUcsSUFBSSxXQUFXLE1BQU8sTUFBSyxRQUFRLEdBQUcsSUFBSSxXQUFXLE1BQU8sTUFBSyxRQUFTLFFBQU8sZUFBZSxFQUFFLFVBQVUsUUFBUSxHQUFHLE9BQU8sZUFBZSxFQUFFLFVBQVUsU0FBUyxHQUFHLEVBQUUsVUFBVSxLQUFLLEdBQUcsRUFBRSxVQUFVLFFBQVEsR0FBRyxFQUFFLFVBQVUsT0FBTyxTQUFTLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLE1BQU8sSUFBRyxLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsT0FBTyxNQUFLLENBQUcsSUFBSSxHQUFFLEdBQUksSUFBRyxLQUFLLEVBQUUsRUFBRSxFQUFHLElBQUcsRUFBRSxVQUFVLElBQUksRUFBRSxLQUFLLEtBQUssRUFBRSxPQUFPLE1BQU0sR0FBRyxHQUFHLEVBQUUsS0FBSyxtQ0FBbUMsRUFBRSxXQUFXLEtBQUssTUFBTyxZQUFXLEVBQUUsY0FBYyxJQUFJLFNBQVMsR0FBRyxHQUFJLEdBQUUsUUFBUyxHQUFFLFVBQVUsSUFBSSxTQUFTLEVBQUUsR0FBRyxHQUFJLEdBQUUsSUFBSyxJQUFHLE1BQU0sUUFBUSxHQUFHLElBQUksR0FBSSxHQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxRQUFRLEVBQUUsUUFBUSxLQUFLLEVBQUUsUUFBUSxRQUFRLEtBQUssR0FBRyxFQUFFLEtBQUssS0FBSyxFQUFFLGVBQWMsRUFBSSxPQUFPLElBQUcsRUFBRSxVQUFVLE1BQU0sU0FBUyxFQUFFLEdBQWMsUUFBUyxLQUFJLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsV0FBOUMsR0FBSSxHQUFFLElBQW1ELE9BQU8sR0FBRSxHQUFHLEVBQUUsRUFBRSxJQUFJLEVBQUUsR0FBRyxHQUFHLEVBQUUsVUFBVSxLQUFLLFNBQVMsRUFBRSxHQUFHLEdBQUksR0FBRSxJQUFLLEtBQUksVUFBVSxPQUFPLE1BQU8sR0FBRSxRQUFRLE9BQU8sT0FBTyxNQUFNLENBQUUsSUFBRyxNQUFNLFFBQVEsR0FBRyxDQUFDLElBQUksR0FBSSxHQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFHLE9BQU8sR0FBRSxHQUFJLEdBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRyxLQUFJLEVBQUUsTUFBTyxFQUFFLEtBQUksRUFBRSxNQUFPLEdBQUUsUUFBUSxHQUFHLEtBQUssQ0FBRSxLQUFJLEdBQUksR0FBRSxFQUFFLE9BQU8sS0FBSyxJQUFJLEVBQUUsRUFBRSxNQUFNLEdBQUcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxFQUFHLE9BQU0sTUFBTyxJQUFHLEVBQUUsVUFBVSxNQUFNLFNBQVMsR0FBRyxHQUFJLEdBQUUsS0FBSyxRQUFRLEVBQUcsSUFBRyxFQUFFLENBQUMsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLEdBQUcsQ0FBRSxLQUFJLEdBQUksR0FBRSxFQUFFLFVBQVUsR0FBRyxFQUFFLHNCQUFzQixFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxJQUFJLEdBQUcsRUFBRSxHQUFHLEtBQUssRUFBRSxLQUFLLEdBQUcsTUFBTyxRQUFPLElBQUksU0FBUyxHQUFHLEVBQUUsVUFBVSxRQUFRLFNBQVMsRUFBRSxHQUFHLEdBQUksR0FBRSxLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFHLEdBQUUsT0FBTyxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLEdBQUUsR0FBSSxJQUFJLElBQUksRUFBRSxRQUFRLE1BQU0sRUFBRSxNQUFNLEVBQUUsSUFBSSxRQUFRLEdBQUcsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxRQUFRLFNBQVMsRUFBRSxRQUFRLElBQUksRUFBRSxNQUFNLEVBQUUsVUFBVSxhQUFhLFdBQVcsS0FBSyxVQUFVLEtBQUssU0FBUyxVQUFVLEVBQUUsVUFBVSxTQUFTLFdBQVcsR0FBSSxHQUFFLElBQUssS0FBSSxFQUFFLGtCQUFrQixDQUFDLEdBQUcsRUFBRSxpQkFBaUIsRUFBRSxtQkFBa0IsQ0FBRyxJQUFJLEdBQUUsRUFBRSxTQUFTLEdBQUcsRUFBRSxtQkFBbUIsRUFBRSxTQUFTLFVBQVUsRUFBRSxFQUFFLFVBQVUsR0FBRyxFQUFFLFVBQVUsRUFBRSxTQUFTLFVBQVcsS0FBSSxHQUFJLEdBQUUsRUFBRSxVQUFVLE9BQU8sS0FBSyxFQUFFLFVBQVUsR0FBRyxVQUFXLEdBQUUsTUFBTSxRQUFRLEVBQUUsTUFBTSxPQUFPLFVBQVUsRUFBRSxjQUFhLEVBQUcsRUFBRSxVQUFVLEVBQUUsT0FBTyxNQUFNLEdBQUcsRUFBRSxhQUFhLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxJQUFJLFFBQVEsTUFBTSxFQUFFLFNBQVMsRUFBRSxPQUFPLE9BQU8sU0FBUyxJQUFJLFNBQVMsR0FBRyxHQUFHLEVBQUUsV0FBVyxFQUFFLFVBQVUsVUFBVSxTQUFTLEdBQUcsTUFBTyxJQUFHLEVBQUUsT0FBTyxFQUFFLFVBQVUsUUFBUSxXQUFXLEdBQUksR0FBRSxFQUFFLEtBQUssRUFBRSxFQUFFLFNBQVMsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLFlBQWEsS0FBSSxFQUFFLGFBQWEsR0FBRyxFQUFFLEtBQUssWUFBWSxFQUFFLE9BQU8sRUFBRSxlQUFlLEVBQUUsT0FBTyxDQUFFLEtBQUksR0FBRyxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLGdCQUFnQixNQUFNLEdBQUcsR0FBRyxFQUFFLEVBQUUsVUFBVSxFQUFFLEVBQUUsT0FBTyxRQUFRLEdBQUcsS0FBSyxNQUFPLE9BQU0sUUFBUSxJQUFJLElBQUksRUFBRSxTQUFTLEVBQUUsRUFBRSxJQUFJLFlBQWEsTUFBSyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsSUFBSSxHQUFJLElBQUksS0FBSSxPQUFPLE9BQU8sT0FBTyxJQUFJLFdBQVcsS0FBSyxhQUFhLFVBQVMsRUFBRyxPQUFPLFFBQVEsR0FBRyxRQUFRLEdBQUcsS0FBSyxPQUFPLFNBQVMsUUFBUSxXQUFXLEtBQUssTUFBTSxPQUFPLE9BQU8sTUFBTSxLQUFLLFNBQVMsVUFBVSxXQUFXLElBQUksR0FBSSxLQUFLLE1BQUssTUFBTSxHQUFHLEtBQUssTUFBTSxFQUFFLEtBQUssT0FBTyxRQUFRLFdBQVcsR0FBSSxHQUFFLElBQUssTUFBSyxPQUFPLFVBQVUsU0FBUyxHQUFHLEdBQUcsRUFBRSxTQUFTLEdBQUcsTUFBTyxJQUFHLEVBQUUsT0FBTyxLQUFLLE9BQU8sVUFBVSxTQUFTLEdBQUcsR0FBRyxFQUFFLFNBQVMsR0FBRyxPQUFPLEdBQUcsRUFBRSxRQUFRLE9BQU8sV0FBVyxHQUFJLEdBQUUsS0FBSyxPQUFPLFFBQVEsRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEVBQUUsZ0JBQWlCLElBQUcsRUFBRSxDQUFDLEdBQUksR0FBRSxHQUFHLEdBQUcsRUFBRSxLQUFLLFFBQVEsRUFBRSxLQUFLLE9BQVEsSUFBRyxLQUFLLElBQUksR0FBRyxFQUFFLEtBQUssR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLE1BQU8sRUFBRSxJQUFJLEdBQUUsS0FBSyxNQUFNLEVBQUUsS0FBSyxLQUFLLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxLQUFLLEtBQUssRUFBRSxJQUFJLEtBQUssRUFBRSxJQUFJLElBQUksRUFBRSxHQUFJLEdBQUUsSUFBSSxFQUFFLGtCQUFrQixFQUFFLEdBQUcsa0JBQWtCLEVBQUUsRUFBRSxHQUFHLEVBQUUsS0FBSyxLQUFLLEVBQUUsR0FBRyxFQUFFLEVBQUUsS0FBSyxHQUFHLEtBQUssS0FBSyxFQUFFLE9BQU8sU0FBUyxLQUFLLE1BQU0sR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLEtBQUssU0FBUyxFQUFFLEtBQUssV0FBVSxFQUFHLE1BQU8sSUFBRyxHQUFHLEVBQUUsT0FBTyxTQUFTLEdBQUcsR0FBSSxJQUFHLElBQUksV0FBVyxNQUFPLElBQUksUUFBTyxlQUFlLEVBQUUsU0FBUyxHQUFHLEVBQUUsTUFBTSxLQUFLLEdBQUcsT0FBTyxFQUFFLGFBQWEsR0FBRyxlQUFlLElBQUksRUFBRSxJQUFJLEdBQUcsRUFBRSxPQUFPLEdBQUcsRUFBRSxTQUFTLEdBQUcsRUFBRSxXQUFXLFNBQVMsR0FBRyxNQUFPLElBQUcsR0FBRyxHQUFHLEVBQUUsUUFBUSxPQUFPLE9BQU8sTUFBTSxFQUFFLFFBQVEsU0FBUyxHQUFHLEVBQUUsUUFBUSxFQUFFLEtBQUssT0FBTyxPQUFPLFFBQVEsRUFBRSxRQUFRLE1BQU0sRUFB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QU0sRUFBRSxLQUFLLEVBQUUsRUFBRSxHQUFHLEdBQUcsSUFBSSxFQUFFLGNBQWMsR0FBRyxTQUFTLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBSSxHQUFFLEVBQUUsSUFBSyxJQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUksR0FBRSxFQUFFLEVBQUUsb0JBQW9CLEVBQUUsU0FBVSxJQUFHLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLEdBQUUsR0FBSSxFQUFFLEVBQUUsbUJBQW1CLE1BQU8sR0FBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsSUFBSSxHQUFHLEVBQUUsSUFBSSxTQUFTLEVBQUUsRUFBRSxFQUFFLEdBQUcsSUFBSSxHQUFJLEdBQUUsRUFBRSxFQUFFLEVBQUUsbUJBQW1CLEdBQUcsRUFBRSxFQUFFLGtCQUFrQixPQUFPLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsWUFBWSxDQUFDLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxTQUFTLFNBQVMsRUFBRSxFQUFFLFNBQVMsR0FBRyxHQUFHLEVBQUcsR0FBRSxLQUFLLEVBQUcsT0FBTSxFQUFFLEVBQUUsRUFBRSxJQUFJLElBQUksRUFBRSxFQUFFLEVBQUUsSUFBRyxJQUFLLEVBQUUsRUFBRSxFQUFFLEdBQUcsQ0FBQyxHQUFJLEdBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxTQUFTLEVBQUUsRUFBRSxHQUFJLEdBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsZ0JBQWdCLEVBQUUsR0FBRyxHQUFHLEVBQUUsY0FBYyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLElBQUksSUFBSSxFQUFFLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxJQUFJLEtBQUssRUFBRSxJQUFJLEVBQUUsZUFBZSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsSUFBSSxLQUFLLFFBQVMsR0FBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEtBQUssaUJBQWlCLEVBQUUsS0FBSyxNQUFNLEVBQUUsRUFBRSxLQUFLLGVBQWUsRUFBRSxLQUFLLGNBQWMsTUFBTSxFQUFFLElBQUksRUFBRSxrQkFBa0IsSUFBSSxFQUFFLElBQUksRUFBRSxFQUFFLEdBQUcsRUFBRSxLQUFLLEdBQUcsR0FBRyxFQUFFLEtBQUssSUFBSSxRQUFTLEdBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLFdBQVcsS0FBSyxHQUFHLEVBQUUsYUFBYSxFQUFFLEVBQUUsR0FBRyxFQUFFLFlBQVksRUFBRSxJQUFJLFFBQVMsR0FBRSxFQUFFLEVBQUUsR0FBRyxHQUFHLE1BQU0sUUFBUSxHQUFHLElBQUksR0FBSSxHQUFFLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsSUFBSSxNQUFLLEVBQUcsRUFBRSxPQUFRLEdBQUUsRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxlQUFlLE9BQU8sRUFBRSxRQUFRLFFBQVMsR0FBRSxHQUFHLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxFQUFFLGtCQUFrQixNQUFPLE9BQU8sR0FBRSxFQUFFLEtBQUssUUFBUyxHQUFFLEVBQUUsR0FBRyxJQUFJLEdBQUksR0FBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLFNBQVMsRUFBRSxFQUFFLE9BQU8sR0FBRyxHQUFHLEVBQUcsR0FBRSxFQUFFLEVBQUUsS0FBSyxRQUFRLEVBQUUsRUFBRSxTQUFTLEVBQUUsT0FBTyxHQUFHLEdBQUcsRUFBRSxFQUFFLFNBQVMsRUFBRSxLQUFLLElBQUksUUFBUyxHQUFFLEdBQUcsR0FBSSxFQUFFLElBQUcsRUFBRSxFQUFFLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxJQUFJLE9BQVEsS0FBSSxHQUFJLEdBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUUsU0FBUyxXQUFXLEVBQUUsY0FBYyxFQUFFLElBQUksR0FBRyxFQUFFLEVBQUUsTUFBTyxHQUFFLEVBQUUsS0FBSyxJQUFJLEVBQUUsU0FBUyxJQUFJLEVBQUUsV0FBVyxFQUFFLEVBQUUsRUFBRSxTQUFTLFdBQVcsRUFBRSxjQUFjLEVBQUUsSUFBSSxHQUFHLFFBQVMsR0FBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxLQUFLLEdBQUcsSUFBSSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFFLEVBQUcsRUFBRSxHQUFHLFFBQVMsR0FBRSxHQUFHLEdBQUksR0FBRSxFQUFFLEVBQUUsRUFBRSxJQUFLLElBQUcsRUFBRSxHQUFHLElBQUksRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLFFBQVEsU0FBUyxFQUFFLEVBQUUsUUFBUSxHQUFHLEVBQUcsSUFBRyxFQUFFLEVBQUUsRUFBRSxVQUFVLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxTQUFTLFNBQVMsRUFBRSxFQUFFLEVBQUUsU0FBUyxJQUFJLFFBQVMsR0FBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEtBQUssR0FBRyxJQUFJLEVBQUUsQ0FBQyxHQUFJLEdBQUUsRUFBRSxFQUFHLEdBQUUsS0FBSyxFQUFFLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxPQUFPLFFBQVMsR0FBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLE1BQU0sQ0FBQyxHQUFJLEdBQUUsRUFBRSxFQUFFLE9BQU8sT0FBTyxDQUFFLEtBQUksRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLEVBQUUsU0FBUyxFQUFFLEdBQUcsUUFBUyxLQUFJLEtBQUssRUFBRSxXQUFXLEVBQUUsR0FBRyxNQUFPLEdBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxJQUFJLEdBQUcsRUFBRSxFQUFFLEVBQUUsb0JBQW9CLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLFNBQVMsRUFBRSxFQUFFLE9BQU8sR0FBRyxFQUFFLEVBQUcsR0FBRSxFQUFFLEVBQUUsS0FBSyxPQUFPLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxFQUFFLEdBQUcsUUFBUyxHQUFFLEVBQUUsS0FBSyxRQUFTLEdBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxJQUFJLEdBQUksR0FBRSxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsR0FBSSxHQUFFLEVBQUUsRUFBRyxJQUFHLEVBQUUsSUFBSSxHQUFHLEVBQUUsR0FBRyxNQUFPLElBQUcsUUFBUyxHQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEdBQUcsSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBRSxHQUFHLEdBQUcsR0FBSSxJQUFJLEdBQUUsRUFBRSxJQUFJLEVBQUUsR0FBSSxJQUFHLEVBQUUsRUFBRSxvQkFBb0IsRUFBRSxFQUFFLGFBQWEsVUFBVSxFQUFFLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxvQkFBbUIsTUFBUSxJQUFHLEVBQUUsRUFBRSxXQUFXLEVBQUUsRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxFQUFFLFdBQVcsRUFBRSxFQUFFLFNBQVMsRUFBRSxrQkFBa0IsRUFBRSxzQkFBc0IsQ0FBQyxHQUFJLEdBQUUsRUFBRSxFQUFFLElBQUssR0FBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsV0FBVyxFQUFFLEVBQUUsRUFBRyxJQUFJLEdBQUUsRUFBRSxTQUFTLEVBQUUsRUFBRSxRQUFTLElBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLFNBQVMsRUFBRSxFQUFFLE9BQU8sR0FBRyxFQUFFLEVBQUcsR0FBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEdBQUcsSUFBSSxHQUFHLFNBQVMsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLElBQUksR0FBSSxHQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxHQUFHLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsSUFBSSxHQUFHLEVBQUUsSUFBSSxJQUFJLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsSUFBSSxHQUFHLEVBQUUsSUFBSSxJQUFJLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxhQUFhLEVBQUUsRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxJQUFJLEdBQUcsRUFBRSxJQUFJLElBQUksR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLGFBQWEsRUFBRSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxHQUFHLEVBQUUsSUFBSSxLQUFLLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsS0FBSSxFQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsRUFBRSxHQUFHLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxPQUFHLEdBQU8sR0FBRyxFQUFFLGFBQWEsRUFBRSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxLQUFJLEVBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxHQUFJLEdBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsSUFBSSxLQUFLLEVBQUUsRUFBRSxHQUFHLElBQUksRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLE9BQU8sRUFBRSxlQUFlLEVBQUUsSUFBSSxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sR0FBRyxFQUFFLEVBQUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxlQUFlLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLFlBQVksRUFBRSxFQUFFLEtBQUssUUFBUyxHQUFFLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxRQUFRLEVBQUUsT0FBTyxLQUFLLGNBQWMsTUFBTyxLQUFJLEdBQUksR0FBRSxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsRUFBRSxHQUFHLEtBQUssS0FBSyxPQUFPLEVBQUUsSUFBdUQsUUFBUyxHQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBSSxHQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxRQUFTLElBQUcsRUFBRSxHQUFHLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxZQUFZLEVBQUUsRUFBRSxjQUFjLE1BQU8sR0FBRSxvQkFBbUIsR0FBRyxDQUFHLElBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLEdBQUUsR0FBSSxFQUFFLEVBQUUsRUFBRSxvQkFBb0IsTUFBTyxHQUFFLEVBQUUsSUFBRyxDQUFHLElBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsR0FBRyxFQUFFLGdCQUFnQixHQUFHLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLFdBQVcsRUFBRSxFQUFFLEVBQUUsWUFBWSxHQUFHLElBQUksRUFBRSxVQUFVLE9BQU0sTUFBTyxDQUFDLElBQUksR0FBSSxJQUFFLEVBQUcsRUFBRSxFQUFFLFdBQVcsRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLElBQUksQ0FBQyxJQUFJLElBQUksRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFFLENBQUcsT0FBTSxFQUFFLEVBQUUsWUFBWSxJQUFJLEdBQUcsRUFBRSxPQUFNLE1BQVEsR0FBRSxFQUFFLEVBQUUsRUFBRyxJQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUksSUFBRSxDQUFHLEtBQUksR0FBSSxLQUFLLEdBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxHQUFFLEVBQUcsRUFBRSxFQUFFLEVBQUcsUUFBTyxHQUFHLEVBQUUsT0FBTyxHQUFHLEVBQUUsWUFBYSxHQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQU0sUUFBTSxFQUFob0osR0FBSSxHQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsUUFBUSxFQUFFLEVBQUUsT0FBUSxLQUFJLEVBQUUsRUFBRSxFQUFFLEdBQUcsU0FBUyxFQUFFLElBQUksRUFBRSxHQUFHLE9BQU8sRUFBRSxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBRyxNQUFNLEVBQUUsR0FBRyxJQUFJLEtBQUssRUFBRSxHQUFHLEdBQUcsSUFBaTJILElBQUksR0FBRSxFQUFFLDBDQUFvcEIsT0FBTyxVQUFTLEVBQUUsRUFBRSxFQUFFLEdBQUcsSUFBSSxFQUFFLEdBQUcsQ0FBQyxHQUFJLEdBQUUsR0FBRSxFQUFHLElBQUssSUFBRyxFQUFFLEdBQUcsR0FBRSxFQUFHLEVBQUUsRUFBRSxPQUFPLENBQUMsR0FBSSxHQUFFLEVBQUUsRUFBRSxTQUFVLEtBQUksR0FBRyxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEtBQUssS0FBSyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxJQUFJLEVBQUUsVUFBVSxFQUFFLGFBQWEsS0FBSyxFQUFFLGdCQUFnQixHQUFHLEdBQUUsR0FBSSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsR0FBRyxNQUFPLEdBQUUsRUFBRSxHQUFFLEdBQUksQ0FBRSxHQUFFLEVBQUUsRUFBRSxHQUFJLElBQUcsRUFBRSxRQUFRLEdBQUcsd0JBQW9CLEdBQU8sR0FBRyxHQUFJLEdBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxXQUFXLEVBQUcsSUFBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLFNBQVMsS0FBSyxFQUFFLEVBQUUsWUFBWSxJQUFJLEVBQUUsRUFBRSxRQUFRLElBQUksR0FBSSxHQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsR0FBRyxHQUFHLENBQUMsSUFBSSxHQUFJLEdBQUUsRUFBRSxFQUFFLEVBQUUsUUFBUSxTQUFTLEVBQUUsRUFBRSxRQUFRLEdBQUcsRUFBRyxJQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLElBQUksR0FBSSxHQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sU0FBUyxFQUFFLEVBQUUsT0FBTyxHQUFHLEdBQUcsRUFBRyxJQUFJLEdBQUUsRUFBRSxLQUFLLEtBQUssTUFBTyxJQUFHLEVBQUUsT0FBTyxJQUFJLEdBQUksR0FBRSxFQUFFLEVBQUUsRUFBRSxJQUFJLE9BQU8sSUFBSSxFQUFFLElBQUksU0FBVSxJQUFHLEVBQUcsR0FBRSxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksTUFBTyxHQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxNQUFNLFFBQVEsR0FBRyxTQUFTLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLE9BQU8sR0FBRyxTQUFTLEdBQUcsT0FBTyxTQUFTLEVBQUUsSUFBRyxJQUFLLEVBQUUsS0FBSyxLQUFLLEdBQUcsRUFBRSxHQUFHLFVBQVUsT0FBTyxLQUFNLElBQUcsU0FBUyxpQkFBaUIsa0JBQWtCLFdBQVcsR0FBSSxHQUFFLFNBQVMsYUFBYyxJQUFHLEVBQUUsUUFBUSxHQUFHLEVBQUUsVUFBVyxJQUFJLEtBQUksU0FBUyxTQUFTLEVBQUUsRUFBRSxFQUFFLEdBQUcsV0FBVyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsSUFBSSxVQUFVLEdBQUcsRUFBRSxZQUFZLFdBQVcsR0FBRyxpQkFBaUIsRUFBRSxFQUFFLEtBQUssR0FBRyxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsYUFBYSxJQUFJLEtBQUssRUFBRSxRQUFRLE1BQU0sYUFBYSxFQUFFLEtBQUssR0FBRyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLFVBQVUsT0FBTyxFQUFFLGlCQUFpQixtQkFBbUIsSUFBSSxFQUFFLGlCQUFpQixpQkFBaUIsSUFBSSxFQUFFLGlCQUFpQixTQUFTLElBQUksSUFBSSxFQUFFLFFBQU8sTUFBTyxpQkFBaUIsU0FBUyxFQUFFLEVBQUUsR0FBRyxHQUFHLFdBQVcsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxRQUFTLElBQUksR0FBRSxFQUFFLFVBQVUsRUFBRSxFQUFFLGFBQWEsSUFBSSxLQUFLLEVBQUUsUUFBUSxHQUFPLEdBQUUsS0FBSyxTQUFTLEVBQUUsR0FBRyxPQUFPLEVBQUUsRUFBRSxFQUFFLFFBQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxLQUFLLFNBQVMsR0FBRyxNQUFPLElBQUcsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLFVBQVUsR0FBRyxFQUFFLE1BQU0sS0FBSyxHQUFHLEVBQUUsYUFBNnhCLElBQUksTUFBTSxHQUFHLE1BQU0sS0FBSyxTQUFTLEVBQUUsRUFBRSxHQUFHLEdBQUksR0FBRSxFQUFFLE1BQU0sR0FBRyxFQUFFLEdBQUcsSUFBSSxNQUFNLEVBQUUsS0FBSyxXQUFXLEVBQUUsRUFBRSxtQkFBbUIsU0FBUyxFQUFFLE1BQU0sUUFBUSxHQUFHLEVBQUUsTUFBTSxPQUFRLElBQUcsR0FBRyxFQUFFLEtBQUssTUFBSyxFQUFHLEdBQUcsRUFBRSxXQUFXLEVBQUUsTUFBTSxRQUFRLEtBQUssRUFBRSxNQUFNLFFBQVEsRUFBRSxFQUFFLFFBQVEsT0FBTyxTQUFTLEVBQUUsRUFBRSxHQUFHLEdBQUksR0FBRSxFQUFFLE9BQU8sSUFBSSxFQUFFLFlBQVksRUFBRSxHQUFHLElBQUksTUFBTSxFQUFFLEtBQUssWUFBWSxFQUFFLEtBQUssTUFBSyxFQUFHLEVBQUUsR0FBRyxFQUFFLFdBQVcsRUFBRSxNQUFNLFFBQVEsRUFBRSxxQkFBcUIsR0FBRyxFQUFFLFdBQVcsRUFBRSxNQUFNLFFBQVEsVUFBVSxFQUFFLE1BQU0sUUFBUSxFQUFFLEVBQUUsbUJBQW1CLFNBQVMsT0FBTyxTQUFTLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxJQUFJLEVBQUUsTUFBTSxRQUFRLEVBQUUsdUJBQXVCLElBQUksS0FBSyxPQUFPLE9BQU8sUUFBUSxJQUFJLFFBQVEsS0FBSyxPQUFPLEtBQUssT0FBTyxXQUFXLE9BQU8sV0FBVyxPQUFPLGFBQWEsT0FBTyxhQUFhLE9BQU8saUJBQWlCLE9BQU8saUJBQWlCLE9BQU8sWUFBWSxPQUFPLGtCQUFrQixPQUFPLGNBQWMsT0FBTyxVQUFVLE9BQU8sT0FBTyxTQUFrVyxHQUFHLFNBQVMsR0FBRyxNQUFPLEdBQUUsS0FBSyxHQUFHLElBQUksR0FBRyxTQUFTLEdBQUcsTUFBTSxTQUFTLEVBQUUsTUFBTSxJQUFJLEtBQUssYUFBYSxNQUFNLEdBQUcsVUFBUyxFQUFHLE9BQU8sU0FBUyxHQUFHLEdBQUksR0FBRSxLQUFLLEVBQUUsS0FBSyxPQUFPLE9BQVEsSUFBRyxJQUFJLEVBQUUsRUFBRSxPQUFPLEtBQUssT0FBTyxDQUFDLEdBQUksR0FBRSxLQUFLLEtBQUssRUFBRSxFQUFFLEVBQUcsSUFBRyxTQUFTLEdBQUcsS0FBSyxFQUFFLEVBQUUsUUFBUSxHQUFHLEVBQUUsS0FBSyxXQUFXLE9BQU0sR0FBSSxLQUFLLFFBQVEsTUFBTyxFQUFFLElBQUksR0FBRSxHQUFHLEVBQUcsS0FBSSxFQUFFLE1BQU8sRUFBRSxJQUFHLEtBQUssU0FBUyxNQUFPLElBQUcsRUFBRSxFQUFHLElBQUksR0FBRSxnQkFBZ0IsS0FBSyxLQUFLLEdBQUksR0FBRSxJQUFJLE1BQU0sRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEtBQUssSUFBSSxPQUFPLEVBQUUsS0FBSyxRQUFRLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsR0FBSSxJQUFJLElBQUcsRUFBRSxPQUFPLEVBQUUsVUFBVSxXQUFXLEdBQUcsTUFBTSxFQUFFLEtBQUssT0FBTyxFQUFFLEdBQUcsRUFBRyxJQUFHLEVBQUUsS0FBSyxZQUFZLEVBQUUsS0FBSyxXQUFXLEtBQUssTUFBTSxFQUFFLEtBQUssTUFBSyxHQUFJLEdBQUcsRUFBRSxPQUFPLFNBQVMsRUFBRSxHQUFHLE1BQU8sR0FBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxHQUFHLE1BQU0sRUFBRSxvQkFBb0IsRUFBRSxrQkFBa0IsT0FBTyxXQUFXLENBQUMsR0FBSSxHQUFFLEVBQUUsS0FBSyxXQUFXLEtBQUssRUFBRyxJQUFHLFdBQVcsRUFBRSxNQUFPLE1BQUssVUFBUyxFQUFHLEdBQUcsRUFBRSxhQUFhLFdBQVcsRUFBRSxVQUFTLEVBQUcsRUFBRSxpQkFBaUIsR0FBRyxFQUFFLEVBQUcsSUFBRyxXQUFXLEVBQUUsQ0FBQyxHQUFHLEdBQUcsR0FBRyxNQUFPLEVBQUUsSUFBSSxHQUFFLEVBQUUsV0FBVyxJQUFLLElBQUcsRUFBRSxhQUFhLEdBQUcsR0FBRyxFQUFFLGlCQUFpQixHQUFHLEdBQUcsRUFBRSxhQUFhLFNBQVMsR0FBRyxFQUFFLEtBQUssTUFBTyxNQUFLLEdBQUcsR0FBRyxJQUFJLE9BQU8sVUFBVSxRQUFRLFVBQW9XLElBQUcsSUFBSyxJQUFJLEtBQUksV0FBVyxHQUFHLGlCQUFpQixNQUFNLEdBQUcsWUFBWSxXQUFXLEdBQUksR0FBRSxLQUFLLEVBQUUsS0FBSyxPQUFRLE1BQUssUUFBUSxTQUFTLEVBQUUsR0FBRyxHQUFJLEdBQUUsR0FBRyxFQUFHLEdBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxNQUFLLEdBQUcsR0FBSSxFQUFFLE9BQU8sRUFBRSxLQUFLLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxLQUFLLE9BQU8sU0FBUyxHQUFHLElBQUksR0FBSSxHQUFFLEtBQUssS0FBSyxLQUFLLE9BQU8sS0FBSyxLQUFLLE9BQU8sRUFBRSxPQUFPLE9BQU8sTUFBTSxFQUFFLEtBQUssYUFBYSxLQUFLLFNBQVMsRUFBRSxLQUFLLE9BQU8sWUFBWSxFQUFFLEtBQUssWUFBWSxFQUFFLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sSUFBSSxDQUFDLEdBQUksR0FBRSxFQUFFLEVBQUcsR0FBRSxLQUFLLE1BQU0sRUFBRSxLQUFLLElBQUksT0FBTyxFQUFFLEtBQUssUUFBUSxhQUFhLEVBQUUsS0FBSyxHQUFHLEVBQUUsRUFBRSxLQUFLLEdBQUcsRUFBRSxPQUFPLEVBQUUsVUFBVSxXQUFXLEdBQUcsR0FBRyxFQUFFLENBQUMsSUFBSSxHQUFJLE1BQUssS0FBSyxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sSUFBSSxDQUFDLEdBQUksR0FBRSxFQUFFLEVBQUcsR0FBRSxLQUFLLFdBQVcsRUFBRSxFQUFFLEtBQUssSUFBSSxFQUFFLElBQUksd0JBQXdCLEVBQUUsRUFBRSxLQUFLLEVBQUUsS0FBSyxHQUFHLEVBQUUsS0FBSyxHQUFHLEtBQUssS0FBSyxFQUFFLEVBQUUsS0FBSyxHQUFHLEtBQUssUUFBUSxFQUFFLE1BQU8sR0FBRSxFQUFFLEtBQUssSUFBSSxRQUFRLFdBQVcsR0FBSSxH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QU8sbUJBQW9CLE9BQU0sS0FBSyxNQUFNLEtBQUssS0FBSyxTQUFTLGdCQUFpQixpQkFBaUIsT0FBTSxJQUFJLElBQUksU0FBUyxFQUFFLEdBQUcsR0FBSSxNQUFLLGNBQWUsR0FBRSxRQUFRLFNBQVMsRUFBRSxHQUFHLE1BQU8sR0FBRSxLQUFLLEVBQUUsS0FBSyxTQUFTLEVBQUUsRUFBRSxHQUFHLEdBQUksR0FBRSxFQUFFLElBQUksRUFBRSxFQUFFLEdBQUksR0FBRSxRQUFRLFNBQVMsR0FBRyxNQUFPLEdBQUUsRUFBRSxNQUFNLFNBQVMsRUFBRSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsR0FBRyxXQUFXLE1BQU8sSUFBRyxPQUFPLGtCQUFrQixLQUFLLElBQUksV0FBVyxNQUFPLE1BQUssS0FBSyxTQUFTLEVBQUUsRUFBRSxHQUFHLEdBQUksR0FBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUksR0FBRSxRQUFRLEVBQUUsR0FBRyxTQUFTLEVBQUUsRUFBRSxHQUFHLE1BQU8sR0FBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsS0FBSyxTQUFTLEVBQUUsRUFBRSxHQUFHLE1BQU8sR0FBRSxHQUFHLEVBQUUsSUFBSSxTQUFTLEVBQUUsRUFBRSxHQUFHLEdBQUksR0FBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxPQUFPLGNBQWUsR0FBRSxFQUFFLEVBQUUsR0FBRyxPQUFPLGVBQWUsU0FBUyxFQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRSxHQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksTUFBTyxHQUFFLEVBQUUsRUFBRSxHQUFHLE1BQU0sSUFBSSxHQUFHLE9BQVEsSUFBRyxPQUFRLEdBQUUsS0FBTSxXQUFVLDJCQUE0QixPQUFNLFNBQVUsS0FBSSxFQUFFLEdBQUcsRUFBRSxPQUFPLElBQUksU0FBUyxFQUFFLEVBQUUsR0FBRyxHQUFJLEdBQUUsRUFBRSxJQUFJLE9BQU8sRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEdBQUcsT0FBTyxFQUFFLGtCQUFtQixJQUFHLEVBQUUsUUFBUSxTQUFTLEdBQUcsTUFBTyxHQUFFLEtBQUssRUFBRSxHQUFHLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRSxHQUFHLFVBQVUsTUFBTSxNQUFNLEdBQUcsU0FBUyxFQUFFLEVBQUUsR0FBRyxHQUFJLEdBQUUsRUFBRSxFQUFHLEdBQUUsUUFBUSxTQUFTLEdBQUcsSUFBSSxFQUFFLEdBQUcsS0FBTSxXQUFVLEVBQUUscUJBQXNCLE9BQU8sS0FBSSxTQUFTLEVBQUUsR0FBRyxFQUFFLFFBQVEsU0FBUyxHQUFHLElBQUksUUFBUSxJQUFJLE1BQU0sR0FBRyxPQUFNLEtBQU0sU0FBUyxFQUFFLEdBQUcsRUFBRSxRQUFRLFNBQVMsR0FBRyxNQUFNLGdCQUFpQixHQUFFLE9BQU8sRUFBRSxrQkFBbUIsS0FBSSxTQUFTLEVBQUUsRUFBRSxHQUFHLEdBQUksR0FBRSxFQUFFLElBQUksRUFBRSxFQUFFLEdBQUksR0FBRSxRQUFRLE9BQU8sTUFBTSxTQUFTLEdBQUcsTUFBTyxHQUFFLEVBQUUsS0FBSyxTQUFTLEVBQUUsR0FBRyxFQUFFLFFBQVEsU0FBUyxFQUFFLEdBQUcsT0FBTyxhQUFhLEVBQUUsR0FBRyxlQUFlLEVBQUUsR0FBRyxXQUFXLEVBQUUsR0FBRyxNQUFNLEtBQUssU0FBUyxFQUFFLEdBQUcsR0FBSSxHQUFFLEVBQUUsRUFBRSxLQUFLLFFBQVMsR0FBRSxRQUFRLFNBQVMsR0FBRyxNQUFNLFVBQVUsV0FBTyxLQUFTLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxHQUFHLFNBQVMsT0FBTyxTQUFTLEVBQUUsR0FBRyxHQUFJLEdBQUUsRUFBRSxTQUFTLFFBQVEsUUFBUyxpQkFBaUIsT0FBTSxJQUFJLElBQUksU0FBUyxFQUFFLEdBQUcsRUFBRSxRQUFRLFNBQVMsR0FBRyxPQUFHLElBQVEsRUFBRSxLQUFNLFdBQVUseUJBQXlCLEVBQUcsT0FBTyxLQUFJLFNBQVMsRUFBRSxHQUFHLEVBQUUsUUFBUSxnR0FBZ0csTUFBTSxNQUFNLFNBQVMsRUFBRSxHQUFHLEVBQUUsWUFBWSxTQUFTLEVBQUUsR0FBRyxFQUFFLFNBQVEsR0FBSSxTQUFTLEVBQUUsR0FBRyxFQUFFLEtBQUssc0JBQXNCLFNBQVMsRUFBRSxFQUFFLEdBQUcsR0FBSSxHQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLGNBQWUsR0FBRSxRQUFRLFNBQVMsRUFBRSxFQUFFLEdBQUcsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsVUFBVSxJQUFJLEVBQUUsRUFBRSxHQUFHLGNBQWEsRUFBRyxNQUFNLE1BQU0sU0FBUyxFQUFFLEVBQUUsR0FBRyxHQUFJLEdBQUUsRUFBRSxJQUFJLFFBQVEsRUFBRSxFQUFFLEdBQUksR0FBRSxRQUFRLFNBQVMsR0FBRyxNQUFPLEdBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxNQUFNLFNBQVMsRUFBRSxFQUFFLEdBQUcsR0FBSSxHQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsd0JBQXdCLEVBQUUseUJBQTBCLEdBQUUsUUFBUSxTQUFTLEdBQUcsTUFBTyxHQUFFLEtBQUssRUFBRSxTQUFTLFNBQVMsRUFBRSxHQUFHLEdBQUksR0FBRSxLQUFLLEtBQUssRUFBRSxLQUFLLEtBQU0sR0FBRSxRQUFRLFNBQVMsR0FBRyxNQUFPLE9BQU0sR0FBRyxHQUFHLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxLQUFLLFNBQVMsRUFBRSxFQUFFLEdBQUcsR0FBSSxHQUFFLEVBQUUsRUFBRyxHQUFFLFFBQVEsU0FBUyxFQUFFLEdBQUcsSUFBSSxFQUFFLEdBQUcsTUFBTyxFQUFFLElBQUksR0FBRSxDQUFFLElBQUcsR0FBRyxtQkFBbUIsRUFBRSxFQUFFLFlBQVksRUFBRSxFQUFFLEVBQUUsS0FBSyxJQUFJLE1BQU8sRUFBRSxJQUFHLG1CQUFtQixFQUFFLEVBQUUsV0FBVyxFQUFFLEVBQUUsRUFBRSxLQUFLLElBQUksTUFBTyxFQUFFLEtBQUksR0FBRyxtQkFBbUIsRUFBRSxFQUFFLFlBQVksRUFBRSxFQUFFLEVBQUUsS0FBSyxJQUFJLE1BQU8sRUFBRSxNQUFNLFdBQVUsNkNBQTZDLFNBQVMsRUFBRSxFQUFFLEdBQUcsR0FBSSxHQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsR0FBRyxDQUFFLEdBQUUsUUFBUSxTQUFTLEdBQUcsR0FBSSxHQUFFLEVBQUUsU0FBUyxFQUFFLE9BQU8sS0FBSyxFQUFFLFdBQVksTUFBSyxFQUFFLE9BQU8sSUFBSSxJQUFLLElBQUcsRUFBRSxFQUFFLEdBQUcsTUFBTSxFQUFFLEVBQUUsT0FBTyxTQUFTLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLElBQUksU0FBUyxFQUFFLEVBQUUsR0FBRyxZQUFhLEdBQUUsR0FBRyxjQUFjLElBQUksU0FBUyxZQUFZLFFBQVEsVUFBVSxXQUFXLFlBQVksUUFBUSxRQUFRLE1BQU0sUUFBUSxRQUFRLFdBQVcsWUFBWSxVQUFVLFdBQVcsWUFBWSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxRQUFRLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sUUFBUSxJQUFJLFNBQVMsU0FBUyxLQUFJLEVBQUcsUUFBUSxVQUFVLFFBQVEsU0FBUyxPQUFPLFFBQVEsT0FBTyxRQUFRLFFBQVEsUUFBUSxTQUFTLFNBQVMsU0FBUyxVQUFVLE1BQU0sUUFBUSxTQUFTLE9BQU8sUUFBUSxPQUFPLFFBQVEsUUFBUSxRQUFRLFNBQVMsU0FBUyxTQUFTLFdBQVcsTUFBTSxNQUFNLFFBQVEsU0FBUyxTQUFTLE9BQU8sT0FBTyxRQUFRLElBQUksU0FBUyxZQUFZLFFBQVEsVUFBVSxTQUFTLFdBQVcsT0FBTyxRQUFRLE1BQU0sTUFBTSxNQUFNLFNBQVMsWUFBWSxXQUFXLFVBQVUsWUFBWSxNQUFNLEtBQUssTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxRQUFRLE1BQU0sS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssT0FBTyxJQUFJLFNBQVMsVUFBVSxRQUFRLFVBQVUsU0FBUyxVQUFVLE9BQU8sUUFBUSxNQUFNLE9BQU8sT0FBTyxTQUFTLFlBQVksVUFBVSxXQUFXLFlBQVksTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sUUFBUSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLFFBQVEsSUFBSSxTQUFTLFFBQVEsUUFBUSxVQUFVLFFBQVEsT0FBTyxTQUFTLFFBQVEsU0FBUyxTQUFTLFdBQVcsUUFBUSxPQUFPLFFBQVEsV0FBVyxZQUFZLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLFFBQVEsTUFBTSxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxPQUFPLElBQUksU0FBUyxTQUFTLFFBQVEsVUFBVSxTQUFTLFVBQVUsUUFBUSxRQUFRLE1BQU0sT0FBTyxPQUFPLFNBQVMsWUFBWSxVQUFVLFdBQVcsWUFBWSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxRQUFRLE1BQU0sS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssT0FBTyxJQUFJLFNBQVMsU0FBUyxRQUFRLFVBQVUsU0FBUyxVQUFVLE9BQU8sUUFBUSxNQUFNLE9BQU8sT0FBTyxTQUFTLFlBQVksVUFBVSxXQUFXLFlBQVksTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sUUFBUSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLFFBQVEsSUFBSSxTQUFTLFdBQVcsUUFBUSxVQUFVLFVBQVUsV0FBVyxRQUFRLFNBQVMsTUFBTSxRQUFRLFFBQVEsU0FBUyxZQUFZLFdBQVcsV0FBVyxhQUFhLE1BQU0sT0FBTyxRQUFRLFFBQVEsTUFBTSxNQUFNLFFBQVEsUUFBUSxNQUFNLE9BQU8sTUFBTSxNQUFNLFNBQVMsTUFBTSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxNQUFNLElBQUksU0FBUyxRQUFRLFFBQVEsVUFBVSxhQUFhLGNBQWMsVUFBVSxXQUFXLFFBQVEsVUFBVSxVQUFVLFlBQVksY0FBYyxZQUFZLFlBQVksY0FBYyxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxPQUFPLE9BQU8sTUFBTSxNQUFNLE1BQU0sTUFBTSxRQUFRLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sUUFBUSxJQUFJLFNBQVMsVUFBVSxRQUFRLFVBQVUsVUFBVSxXQUFXLFFBQVEsUUFBUSxNQUFNLE9BQU8sT0FBTyxTQUFTLFlBQVksVUFBVSxXQUFXLFlBQVksTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sUUFBUSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLFFBQVEsSUFBSSxTQUFTLFVBQVUsUUFBUSxVQUFVLFFBQVEsVUFBVSxRQUFRLFFBQVEsT0FBTyxRQUFRLFFBQVEsU0FBUyxhQUFhLFVBQVUsWUFBWSxhQUFhLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLFFBQVEsTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxRQUFRLElBQUksU0FBUyxVQUFVLFFBQVEsVUFBVSxRQUFRLFNBQVMsT0FBTyxRQUFRLE9BQU8sT0FBTyxTQUFTLFFBQVEsV0FBVyxVQUFVLFdBQVcsWUFBWSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxRQUFRLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sUUFBUSxJQUFJLFNBQVMsU0FBUyxRQUFRLFVBQVUsV0FBVyxXQUFXLFlBQVksV0FBVyxXQUFXLFVBQVUsV0FBVyxTQUFTLFVBQVUsVUFBVSxZQUFZLFlBQVksTUFBTSxRQUFRLFFBQVEsU0FBUyxRQUFRLFFBQVEsT0FBTyxRQUFRLE1BQU0sT0FBTyxPQUFPLFNBQVMsVUFBVSxNQUFNLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLE9BQU8sSUFBSSxTQUFTLFNBQVMsUUFBUSxVQUFVLFVBQVUsVUFBVSxPQUFPLFFBQVEsTUFBTSxPQUFPLFVBQVUsT0FBTyxZQUFZLFVBQVUsV0FBVyxZQUFZLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE9BQU8sT0FBTyxPQUFPLE1BQU0sTUFBTSxNQUFNLFFBQVEsTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxRQUFRLElBQUksU0FBUyxVQUFVLFFBQVEsVUFBVSxVQUFVLFlBQVksUUFBUSxTQUFTLFFBQVEsU0FBUyxTQUFTLFVBQVUsYUFBYSxZQUFZLFdBQVcsYUFBYSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxRQUFRLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sUUFBUSxJQUFJLFNBQVMsV0FBVyxLQUFJLEVBQUcsUUFBUSxVQUFVLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLE1BQU0sTUFBTSxPQUFPLE1BQU0sS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssTUFBTSxNQUFNLFFBQVEsTUFBTSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxNQUFNLElBQUksU0FBUyxTQUFTLEtBQUksRUFBRyxRQUFRLFVBQVUsUUFBUSxTQUFTLE1BQU0sUUFBUSxNQUFNLE9BQU8sT0FBTyxTQUFTLFNBQVMsVUFBVSxTQUFTLFNBQVMsTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sUUFBUSxNQUFNLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLE1BQU0sSUFBSSxTQUFTLFlBQVksS0FBSSxFQUFHLFFBQVEsVUFBVSxTQUFTLFVBQVUsVUFBVSxVQUFVLFFBQVEsU0FBUyxTQUFTLFlBQVksYUFBYSxVQUFVLFdBQVcsWUFBWSxNQUFNLE1BQU0sT0FBTyxPQUFPLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxRQUFRLE1BQU0sTUFBTSxRQUFRLE1BQU0sTUFBTSxNQUFNLEtBQUssTUFBTSxNQUFNLE1BQU0sUUFBUSxJQUFJLFNBQVMsV0FBVyxRQUFRLFVBQVUsV0FBVyxVQUFVLFNBQVMsVUFBVSxVQUFVLFNBQVMsU0FBUyxVQUFVLFFBQVEsV0FBVyxVQUFVLFlBQVksTUFBTSxNQUFNLE9BQU8sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sUUFBUSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLFFBQVEsSUFBSSxTQUFTLGFBQWEsUUFBUSxVQUFVLFVBQVUsV0FBVyxRQUFRLFFBQVEsTUFBTSxPQUFPLE9BQU8sVUFBVSxZQUFZLFVBQVUsV0FBVyxZQUFZLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLFFBQVEsTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxRQUFRLElBQUksU0FBUyxVQUFVLFFBQVEsVUFBVSxVQUFVLFdBQVcsUUFBUSxTQUFTLFNBQVMsU0FBUyxTQUFTLFNBQVMsWUFBWSxVQUFVLFdBQVcsWUFBWSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxRQUFRLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sUUFBUSxJQUFJLFNBQVMsWUFBWSxRQUFRLFVBQVUsU0FBUyxVQUFVLE9BQU8sUUFBUSxNQUFNLE9BQU8sT0FBTyxRQUFRLFlBQVksVUFBVSxXQUFXLFlBQVksTUFBTSxNQUFNLE1BQU0sT0FBTyxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sUUFBUSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLFFBQVEsSUFBSSxTQUFTLFVBQVUsUUFBUSxVQUFVLFVBQVUsV0FBVyxRQUFRLE1BQU0sUUFBUSxTQUFTLE1BQU0sT0FBTyxNQUFNLEtBQUssT0FBTyxTQUFTLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sS0FBSyxNQUFNLFFBQVEsTUFBTSxTQUFTLFNBQVMsVUFBVSxXQUFXLFVBQVUsT0FBTyxTQUFTLElBQUksU0FBUyxTQUFTLEtBQUksRUFBRyxRQUFRLFVBQVUsS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssTUFBTSxNQUFNLE9BQU8sTUFBTSxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxNQUFNLE1BQU0sUUFBUSxNQUFNLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLE1BQU0sSUFBSSxTQUFTLGdCQUFnQixRQUFRLFVBQVUsU0FBUyxVQUFVLFFBQVEsU0FBUyxNQUFNLE9BQU8sT0FBTyxTQUFTLFlBQVksVUFBVSxXQUFXLFlBQVksTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sUUFBUSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLFFBQVEsSUFBSSxTQUFTLGFBQWEsS0FBSSxFQUFHLFFBQVEsVUFBVSxTQUFTLFVBQVUsUUFBUSxXQUFXLFNBQVMsV0FBVyxRQUFRLFlBQVksV0FBVyxTQUFTLFlBQVksV0FBVyxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sT0FBTyxPQUFPLE1BQU0sTUFBTSxRQUFRLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sUUFBUSxJQUFJLFNBQVMsVUFBVSxRQUFRLFVBQVUsV0FBVyxZQUFZLFFBQVEsVUFBVSxRQUFRLFNBQVMsU0FBUyxVQUFVLGFBQWEsV0FBVyxZQUFZLGFBQWEsTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sUUFBUSxNQUFNLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLE9BQU8sSUFBSSxTQUFTLFdBQVcsS0FBSSxFQUFHLFFBQVEsVUFBVSxlQUFlLGVBQWUsZUFBZSxlQUFlLGVBQWUsZUFBZSxlQUFlLGVBQWUsZUFBZSxnQkFBZ0IsZ0JBQWdCLGlCQUFpQixNQUFNLFVBQVUsVUFBVSxVQUFVLFVBQVUsVUFBVSxVQUFVLFVBQVUsVUFBVSxVQUFVLFdBQVcsV0FBVyxhQUFhLE1BQU0sS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssT0FBTyxJQUFJLFNBQVMsUUFBUSxRQUFRLFVBQVUsVUFBVSxXQUFXLFFBQVEsUUFBUSxNQUFNLE9BQU8sT0FBTyxXQUFXLFlBQVksVUFBVSxXQUFXLFlBQVksTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sUUFBUSxNQUFNLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLE9BQU8sU0FBUyxTQUFTLG1CQUFtQixRQUFRLFVBQVUsU0FBUyxVQUFVLE9BQU8sUUFBUSxNQUFNLE9BQU8sT0FBTyxTQUFTLFlBQVksVUFBVSxXQUFXLFlBQVksTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sUUFBUSxNQUFNLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLE9BQU8sSUFBSSxTQUFTLFNBQVMsUUFBUSxVQUFVLFVBQVUsT0FBTyxTQUFTLFdBQVcsTUFBTSxXQUFXLFNBQVMsV0FBVyxXQUFXLGNBQWMsV0FBVyxZQUFZLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLFFBQVEsTUFBTSxLQUFLLEtBQUssS0FBSyxLQUFLLE1BQU0sS0FBSyxRQUFRLFNBQVMsU0FBUyxZQUFZLFFBQVEsVUFBVSxVQUFVLFlBQVksUUFBUSxRQUFRLE9BQU8sUUFBUSxRQUFRLFNBQVMsV0FBVyxVQUFVLFdBQVcsWUFBWSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxRQUFRLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sUUFBUSxJQUFJLFNBQVMsV0FBVyxRQUFRLFVBQVUsV0FBVyxZQUFZLFNBQVMsVUFBVSxNQUFNLFFBQVEsUUFBUSxTQUFTLGFBQWEsWUFBWSxZQUFZLGFBQWEsTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sUUFBUSxNQUFNLElBQUksSUFBSSxLQUFLLEtBQUssSUFBSSxJQUFJLE1BQU0sSUFBSSxTQUFTLFVBQVUsUUFBUSxVQUFVLFNBQVMsVUFBVSxPQUFPLFNBQVMsTUFBTSxPQUFPLE9BQU8sU0FBUyxXQUFXLFVBQVUsU0FBUyxXQUFXLE1BQU0sTUFBTSxPQUFPLE9BQU8sTUFBTSxNQUFNLE9BQU8sT0FBTyxNQUFNLE9BQU8sTUFBTSxPQUFPLFFBQVEsTUFBTSxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxPQUFPLElBQUksU0FBUyxVQUFVLFFBQVEsVUFBVSxVQUFVLFdBQVcsT0FBTyxRQUFRLE1BQU0sT0FBTyxPQUFPLFVBQVUsWUFBWSxVQUFVLFdBQVcsWUFBWSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxRQUFRLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sUUFBUSxJQUFJLFNBQVMsWUFBWSxRQUFRLFVBQVUsU0FBUyxVQUFVLFFBQVEsUUFBUSxNQUFNLE1BQU0sTUFBTSxTQUFTLFlBQVksVUFBVSxXQUFXLFlBQVksTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sUUFBUSxNQUFNLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLE9BQU8sU0FBUyxTQUFTLFdBQVcsUUFBUSxVQUFVLFNBQVMsVUFBVSxRQUFRLFFBQVEsTUFBTSxRQUFRLFFBQVEsU0FBUyxZQUFZLFVBQVUsV0FBVyxZQUFZLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLFFBQVEsTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxRQUFRLElBQUksU0FBUyxVQUFVLFFBQVEsVUFBVSxTQUFTLFVBQVUsT0FBTyxRQUFRLE1BQU0sTUFBTSxNQUFNLFNBQVMsWUFBWSxVQUFVLFdBQVcsWUFBWSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxRQUFRLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sUUFBUSxXQUFXLFNBQVMsNkJBQTZCLFFBQVEsVUFBVSxTQUFTLFVBQVUsT0FBTyxRQUFRLE1BQU0sTUFBTSxNQUFNLFNBQVMsWUFBWSxVQUFVLFdBQVcsWUFBWSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxRQUFRLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sUUFBUSxJQUFJLFNBQVMsT0FBTyxRQUFRLFVBQVUsU0FBUyxhQUFhLFNBQVMsU0FBUyxVQUFVLFdBQVcsVUFBVSxVQUFVLFVBQVUsU0FBUyxZQUFZLFdBQVcsTUFBTSxPQUFPLE9BQU8sUUFBUSxRQUFRLE9BQU8sUUFBUSxPQUFPLE9BQU8sT0FBTyxPQUFPLE9BQU8sU0FBUyxNQUFNLEtBQUssSUFBSSxJQUFJLElBQUksS0FBSyxJQUFJLE1BQU0sSUFBSSxTQUFTLFVBQVUsUUFBUSxVQUFVLE9BQU8sUUFBUSxPQUFPLFFBQVEsUUFBUSxVQUFVLFNBQVMsVUFBVSxRQUFRLE9BQU8sUUFBUSxVQUFVLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLFFBQVEsTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxRQUFRLElBQUksU0FBUyxVQUFVLFFBQVEsVUFBVSxTQUFTLFFBQVEsV0FBVyxVQUFVLFVBQVUsVUFBVSxTQUFTLFVBQVUsV0FBVyxVQUFVLFdBQVcsV0FBVyxNQUFNLE1BQU0sTUFBTSxNQUFNLE9BQU8sT0FBTyxNQUFNLE1BQU0sT0FBTyxNQUFNLE9BQU8sT0FBTyxTQUFTLE1BQU0sS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssT0FBTyxJQUFJLFNBQVMsT0FBTyxLQUFJLEVBQUcsUUFBUSxVQUFVLFFBQVEsUUFBUSxPQUFPLFFBQVEsTUFBTSxNQUFNLFNBQVMsT0FBTyxTQUFTLFNBQVMsUUFBUSxTQUFTLE1BQU0sUUFBUSxRQUFRLE9BQU8sUUFBUSxNQUFNLE1BQU0sU0FBUyxPQUFPLFNBQVMsU0FBUyxRQUFRLFVBQVUsTUFBTSxRQUFRLE1BQU0sT0FBTyxNQUFNLFNBQVMsT0FBTyxTQUFTLElBQUksU0FBUyxjQUFjLFFBQVEsVUFBVSxVQUFVLFVBQVUsVUFBVSxVQUFVLFVBQVUsVUFBVSxVQUFVLFVBQVUsVUFBVSxXQUFXLFdBQVcsWUFBWSxNQUFNLE9BQU8sT0FBTyxPQUFPLE9BQU8sT0FBTyxPQUFPLE9BQU8sT0FBTyxPQUFPLE9BQU8sT0FBTyxTQUFTLE1BQU0sS0FBSyxRQUFRLFFBQVEsUUFBUSxRQUFRLFFBQVEsVUFBVSxJQUFJLFNBQVMsVUFBVSxLQUFJLEVBQUcsUUFBUSxVQUFVLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssTUFBTSxPQUFPLE1BQU0sS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxNQUFNLFFBQVEsTUFBTSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxTQUFTLFNBQVMsRUFBRSxHQUFHLEdBQUksTUFBSyxRQUFTLEdBQUUsUUFBUSxTQUFTLEdBQUcsTUFBTyxHQUFFLEtBQUssR0FBRyxNQUFNLEdBQUcsS0FBSyxTQUFTLEVBQUUsRUFBRSxHQUFHLEdBQUksR0FBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsU0FBUyxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsY0FBZSxHQUFFLFFBQVEsU0FBUyxHQUFHLE1BQU8sR0FBRSxFQUFFLGNBQWMsUUFBUSxTQUFTLEVBQUUsRUFBRSxHQUFHLEdBQUksR0FBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsRUFBRSxHQUFHLEdBQUksR0FBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLFFBQVEsU0FBVSxLQUFJLEVBQUUsRUFBRyxLQUFJLElBQUssSUFBRyxHQUFHLEdBQUcsT0FBRyxLQUFTLEVBQUUsS0FBSyxJQUFLLEtBQUksRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEdBQUcsa0JBQW1CLEdBQUUsR0FBRyxFQUFFLEdBQUcsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxJQUFJLEVBQUUsU0FBUyxHQUFHLEdBQUksR0FBRSxTQUFTLEVBQUUsRUFBRSxHQUFHLEdBQUcsZUFBZ0IsR0FBRSxDQUFDLE9BQU8sVUFBVSxRQUFRLElBQUssR0FBRSxNQUFPLElBQUksRUFBRSxLQUFLLEdBQUUsTUFBTyxJQUFJLEdBQUUsRUFBRyxLQUFLLEdBQUUsTUFBTyxJQUFJLEdBQUUsRUFBRSxHQUFHLE1BQU8sSUFBSSxHQUFFLEVBQUUsRUFBRSxHQUFHLE1BQU8sR0FBRSxNQUFNLEtBQUssV0FBWSxPQUFPLEdBQUUsVUFBVSxFQUFFLFVBQVUsR0FBRyxHQUFHLEdBQUcsa0JBQW1CLEdBQUUsRUFBRSxTQUFTLEtBQUssR0FBRyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsYUFBYSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsSUFBSSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsS0FBTSxHQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsSUFBSSxFQUFFLFFBQVEsR0FBRyxTQUFTLEVBQUUsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxHQUFHLFdBQVcsTUFBTyxJQUFHLE9BQU8sZUFBZSxFQUFFLElBQUksT0FBTyxLQUFLLElBQUksV0FBVyxNQUFPLE1BQUssS0FBSyxTQUFTLEVBQUUsRUFBRSxHQUFHLFlBQWEsSUFBSSxHQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsR0FBRyxZQUFZLE9BQU8sTUFBTSxXQUFXLFFBQVEsRUFBRSxXQUFXLE1BQU8sTUFBTSxHQUFFLFFBQVEsU0FBUyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUcsSUFBSSxHQUFFLEVBQUUsRUFBRSxFQUFFLFNBQVMsR0FBRyxJQUFJLEdBQUcsSUFBSyxHQUFFLE1BQU8sR0FBRSxFQUFHLFFBQU8sR0FBRyxJQUFJLE9BQU8sSUFBSSxTQUFTLE1BQU8sWUFBVyxNQUFPLElBQUksR0FBRSxLQUFLLElBQUksTUFBTyxZQUFXLE1BQU8sSUFBSSxHQUFFLEtBQUssS0FBSyxFQUFFLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxHQUFFLEVBQUcsRUFBRSxFQUFFLFVBQVUsRUFBRSxFQUFFLElBQUksRUFBRSxlQUFlLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxXQUFXLE1BQUUsR0FBTyxFQUFFLFNBQVMsRUFBRSxFQUFFLFNBQVMsRUFBRSxDQUFFLElBQUcsSUFBSSxFQUFFLEVBQUUsRUFBRSxLQUFLLEdBQUksUUFBTyxPQUFPLFlBQVksRUFBRSxFQUFFLEdBQUUsR0FBSSxHQUFHLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLElBQUksR0FBRyxHQUFHLFdBQVcsRUFBRSxPQUFPLEdBQUUsRUFBRyxFQUFFLFdBQVcsTUFBTyxHQUFFLEtBQUssUUFBUSxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxHQUFHLE9BQU8sRUFBRSxFQUFFLEVBQUUsVUFBVSxLQUFLLEVBQUUsRUFBRSxFQUFFLFFBQVEsUUFBUSxHQUFHLEVBQUUsSUFBSSxJQUFLLEdBQUUsSUFBSyxJQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsUUFBUyxHQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsRUFBRyxPQUFPLEtBQUksU0FBUyxFQUFFLEVBQUUsR0FBRyxHQUFJLEdBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxJQUFJLFlBQVksRUFBRSxhQUFhLEVBQUUsV0FBVyxHQUFJLEdBQUUsRUFBRSxFQUFFLElBQUksVUFBVSxFQUFFLEVBQUUsTUFBTyxLQUFJLEVBQUUsTUFBTSxRQUFRLE9BQU8sRUFBRSxJQUFJLFlBQVksR0FBRyxFQUFFLElBQUksY0FBYyxFQUFFLEVBQUUsY0FBYyxTQUFTLEVBQUUsT0FBTyxFQUFFLE1BQU0sdUNBQXVDLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxXQUFZLEdBQUUsVUFBVSxFQUFFLEdBQUksT0FBTyxLQUFLLEdBQUUsUUFBUSxPQUFPLFFBQVEsU0FBUyxFQUFFLEdBQUcsR0FBSSxFQUFFLE9BQU8sUUFBTyxHQUFHLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxHQUFJLEdBQUUsRUFBRSxVQUFVLEtBQUssRUFBRSxHQUFHLEdBQUcsRUFBRSxRQUFJLEtBQVMsRUFBRSxFQUFFLEVBQUUsRUFBRSxLQUFLLFNBQVMsRUFBRSxFQUFFLEdBQUcsR0FBSSxHQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsSUFBSSxPQUFPLFNBQVMsWUFBYSxHQUFFLEVBQUUsT0FBTyxxQkFBcUIsU0FBUyxHQUFHLE1BQU8sR0FBRSxFQUFFLEtBQUssU0FBUyxFQUFFLEdBQUcsRUFBRSxFQUFFLE9BQU8sdUJBQXVCLFNBQVMsRUFBRSxFQUFFLEdBQUcsR0FBSSxHQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsS0FBSSxHQUFJLEVBQUUsRUFBRSxJQUFJLFdBQVksR0FBRSxRQUFRLFNBQVMsRUFBRSxHQUFHLEdBQUksR0FBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsSUFBSyxLQUFJLElBQUssR0FBRSxHQUFHLEdBQUcsRUFBRSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUcsTUFBSyxFQUFFLE9BQU8sR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxFQUFFLElBQUksRUFBRSxLQUFLLEdBQUksT0FBTyxLQUFJLFNBQVMsRUFBRSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsSUFBSSxTQUFTLEVBQUUsRUFBRSxHQUFHLFlBQWEsUUFBTyxlQUFlLEVBQUUsY0FBYyxPQUFNLEdBQUssSUFBSSxHQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsR0FBSSxHQUFFLFNBQVMsT0FBTyxPQUFPLFVBQVUsU0FBUyxHQUFHLE1BQU8sUUFBTyxHQUFHLFlBQWEsT0FBTSxnQkFBaUIsSUFBRyxnQkFBaUIsS0FBSSxLQUFLLE9BQU8sUUFBUSxPQUFPLEdBQUcsT0FBTyxRQUFRLE1BQU0sT0FBTyxVQUFVLFFBQVEsZUFBZSxVQUFVLEtBQUssT0FBTyxRQUFRLE1BQU0sVUFBVSxVQUFVLFNBQVMsR0FBRyxNQUFPLFFBQU8sR0FBRyxZQUFhLE9BQU0sZ0JBQWlCLEtBQUksY0FBYyxRQUFRLFNBQVMsT0FBTyxZQUFZLE9BQU8sWUFBWSxPQUFPLE9BQU8sUUFBUSxlQUFlLE9BQU8sUUFBUSxZQUFZLE9BQU8sUUFBUSxjQUFjLE9BQU8sUUFBUSxZQUFZLFFBQVEsWUFBWSxRQUFRLGdCQUFnQixPQUFPLGVBQWUsUUFBUSxtQkFBbUIsT0FBTywwQkFBMEIsT0FBTyxpQkFBaUIsUUFBUSxZQUFZLE9BQU8sZUFBZSxRQUFRLFNBQVMsUUFBUSxhQUFhLEtBQUssT0FBTyxRQUFRLE9BQU8sYUFBYSxLQUFLLE9BQU8sUUFBUSxTQUFTLEtBQUssV0FBVyxPQUFPLGVBQWUsS0FBSyxTQUFTLEdBQUksTUFBSyxLQUFLLFVBQVUsR0FBSSxPQUFNLFFBQVEsR0FBRyxhQUFhLEtBQUssYUFBWSxFQUFHLGVBQWMsRUFBRyxjQUFhLEVBQUcsZUFBZSxJQUFJLE9BQU8sTUFBTSxTQUFTLEdBQUcsS0FBSyxTQUFTLElBQUksU0FBUyxXQUFXLEtBQUssZUFBZSxZQUFZLFdBQVcsS0FBSyxtQkFBbUIsVUFBVSxvQkFBb0IsV0FBVyxNQUFPLE1BQUssWUFBWSxLQUFLLFlBQVksS0FBSyxhQUFhLFNBQVMsV0FBVyxNQUFPLElBQUksTUFBSyxLQUFLLGdCQUFnQixlQUFlLFdBQVcsTUFBTyxNQUFLLGFBQWEsa0JBQW1CLE1BQUssT0FBTyxLQUFLLE9BQU8sS0FBSyxjQUFjLEVBQUUsRUFBRSxXQUFXLEdBQUksTUFBSyxLQUFLLGNBQWMsS0FBSyxPQUFPLEtBQUssYUFBYSxNQUFNLFlBQVksV0FBVyxNQUFPLEdBQUUsRUFBRSxhQUFhLEtBQUssV0FBVyxjQUFjLFdBQVcsR0FBSSxHQUFFLEtBQUssY0FBYyxLQUFLLFlBQVksT0FBTyxTQUFTLEtBQUssWUFBWSxPQUFPLElBQUssT0FBTyxHQUFFLEVBQUUsaUJBQWlCLEtBQUssU0FBUyxXQUFXLElBQUksU0FBUyxXQUFXLE1BQU8sTUFBSyxTQUFTLGVBQWUsVUFBVSxXQUFXLEdBQUksR0FBRSxLQUFLLFNBQVMsRUFBRSxHQUFJLE1BQUssRUFBRSxjQUFjLEVBQUUsV0FBVyxFQUFFLEVBQUUsV0FBVyxFQUFFLGFBQWMsT0FBTyxNQUFLLFlBQVksRUFBRSxTQUFTLEVBQUUsRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFLFVBQVUsV0FBVyxXQUFXLEdBQUcsS0FBSyxZQUFZLENBQUMsR0FBSSxHQUFFLEtBQUssWUFBWSxLQUFLLE9BQVEsT0FBTyxHQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTyxNQUFLLFlBQVksTUFBTSxLQUFLLFdBQVcsSUFBSSxHQUFJLEdBQUUsS0FBSyxTQUFTLEtBQUssRUFBRSxHQUFJLE1BQUssRUFBRSxjQUFjLEVBQUUsV0FBVyxFQUFFLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxFQUFFLEVBQUUsWUFBWSxFQUFFLGNBQWMsRUFBRSxZQUFZLEVBQUUsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLE1BQU0sS0FBSyxFQUFFLFVBQVUsVUFBVSxFQUFFLFVBQVUsV0FBVyxLQUFLLGVBQWUsR0FBRyxXQUFXLEtBQUssZUFBZSxHQUFHLGNBQWMsS0FBSyxrQkFBa0IsR0FBRyxpQkFBaUIsS0FBSyxpQkFBaUIsR0FBRyxlQUFlLEtBQUssZUFBZSxHQUFHLFFBQVEsRUFBRSxrQkFBaUIsR0FBSyxPQUFNLGVBQWUsVUFBVSxJQUFJLEVBQUUsVUFBVSxJQUFJLEVBQUUsU0FBUyxXQUFXLElBQUksRUFBRSxTQUFTLFNBQVMsSUFBSSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFHLE9BQU8sSUFBRyxPQUFPLFdBQVcsSUFBSSxHQUFJLEdBQUUsS0FBSyxTQUFTLEtBQUssRUFBRSxHQUFJLE1BQUssRUFBRSxjQUFjLEVBQUUsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxFQUFFLEVBQUUsR0FBRyxJQUFJLEVBQUUsTUFBTSxNQUFNLEVBQUUsRUFBRSxhQUFhLEVBQUUsS0FBSyxZQUFZLE9BQU8sVUFBVSxVQUFVLEVBQUUsVUFBVSxXQUFXLEtBQUssZ0JBQWdCLEdBQUcsV0FBVyxLQUFLLGdCQUFnQixLQUFLLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRyxPQUFPLElBQUcsTUFBTSxXQUFXLElBQUksR0FBSSxHQUFFLEtBQUssU0FBUyxLQUFLLEVBQUUsR0FBSSxNQUFLLEdBQUcsS0FBSyxNQUFNLEVBQUUsY0FBYyxJQUFJLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLEVBQUUsRUFBRSxHQUFHLElBQUksRUFBRSxNQUFNLEtBQUssRUFBRSxjQUFjLFVBQVUsRUFBRSxVQUFVLFdBQVcsS0FBSyxlQUFlLEdBQUcsV0FBVyxLQUFLLGVBQWUsS0FBSyxFQUFFLFlBQVksRUFBRSxjQUFjLEVBQUcsT0FBTyxJQUFHLGNBQWMsV0FBVyxPQUFPLFNBQVMsS0FBSyxTQUFTLGFBQVMsS0FBUyxPQUFPLFdBQVcsTUFBTyxNQUFLLGFBQWEsS0FBSyxlQUFlLEtBQUssY0FBYyxTQUFTLFdBQVcsUUFBUSxLQUFLLFFBQVEsTUFBTSxXQUFXLE9BQU0sSUFBSyxLQUFLLFlBQVksS0FBSyxNQUFNLFdBQVcsT0FBTSxJQUFLLEtBQUssWUFBWSxNQUFNLFNBQVMsTUFBTSxTQUFTLEdBQUcsS0FBSyxZQUFZLEtBQUssY0FBYyxLQUFLLGNBQWEsRUFBRyxLQUFLLFdBQVcsR0FBRyxLQUFLLE1BQU0sVUFBVSxTQUFTLG9CQUFvQixRQUFRLEtBQUssY0FBYSxLQUFNLGlCQUFpQixXQUFXLEdBQUcsT0FBTyxLQUFLLGFBQWEsV0FBWSxNQUFLLGFBQWMsTUFBSyxZQUFZLEtBQUssZUFBZSxhQUFhLFdBQVcsT0FBTyxLQUFLLGlCQUFpQixLQUFLLFdBQVcsS0FBSyxPQUFPLEtBQUssT0FBTSxJQUFL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QUUsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxhQUFhLFNBQVMsRUFBRSxHQUFHLEVBQUUsUUFBUSxTQUFTLEdBQUcsR0FBRyxrQkFBbUIsR0FBRSxLQUFNLFdBQVUsRUFBRSxzQkFBdUIsT0FBTyxLQUFJLFNBQVMsRUFBRSxHQUFHLEVBQUUsUUFBUSxjQUFjLFNBQVMsRUFBRSxFQUFFLEdBQUcsR0FBSSxHQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsR0FBSSxHQUFFLFFBQVEsU0FBUyxHQUFHLE1BQU8sVUFBUyxFQUFFLEVBQUUsR0FBRyxHQUFJLEdBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFHLElBQUcsR0FBRyxHQUFHLEdBQUcsS0FBSyxFQUFFLEdBQUcsSUFBSSxFQUFFLEVBQUUsT0FBTyxFQUFFLE9BQU0sTUFBUSxNQUFLLEVBQUUsRUFBRSxJQUFJLElBQUksR0FBRyxJQUFLLEtBQUksRUFBRSxLQUFLLEVBQUUsTUFBTyxJQUFHLEdBQUcsQ0FBRSxRQUFPLElBQUksS0FBSyxTQUFTLEVBQUUsRUFBRSxHQUFHLEdBQUksR0FBRSxFQUFFLEdBQUksR0FBRSxRQUFRLFNBQVMsRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLE9BQUcsS0FBUyxFQUFFLE1BQU8sRUFBRSxRQUFPLEdBQUcsSUFBSyxHQUFFLE1BQU8sVUFBUyxHQUFHLE1BQU8sR0FBRSxLQUFLLEVBQUUsR0FBSSxLQUFLLEdBQUUsTUFBTyxVQUFTLEVBQUUsR0FBRyxNQUFPLEdBQUUsS0FBSyxFQUFFLEVBQUUsR0FBSSxLQUFLLEdBQUUsTUFBTyxVQUFTLEVBQUUsRUFBRSxHQUFHLE1BQU8sR0FBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLElBQUksTUFBTyxZQUFXLE1BQU8sR0FBRSxNQUFNLEVBQUUsY0FBYyxTQUFTLEVBQUUsRUFBRSxHQUFHLEdBQUksR0FBRSxFQUFFLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEdBQUksR0FBRSxRQUFRLFNBQVMsR0FBRyxHQUFJLEdBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFFLElBQUcsRUFBRSxJQUFJLEdBQUksR0FBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUcsT0FBTyxLQUFJLFNBQVMsRUFBRSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsR0FBRyxVQUFVLFNBQVMsaUJBQWlCLFNBQVMsRUFBRSxFQUFFLEdBQUcsR0FBSSxHQUFFLEVBQUUsR0FBSSxHQUFFLFFBQVEsT0FBTyxLQUFLLHFCQUFxQixHQUFHLE9BQU8sU0FBUyxHQUFHLE1BQU0sVUFBVSxFQUFFLEdBQUcsRUFBRSxNQUFNLElBQUksT0FBTyxLQUFLLFNBQVMsRUFBRSxFQUFFLEdBQUcsR0FBSSxHQUFFLEVBQUUsR0FBSSxHQUFFLFFBQVEsTUFBTSxTQUFTLFNBQVMsR0FBRyxNQUFNLFNBQVMsRUFBRSxLQUFLLFNBQVMsRUFBRSxFQUFFLEdBQUcsWUFBYSxJQUFJLEdBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxJQUFJLElBQUssR0FBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLFlBQVksV0FBVyxNQUFPLFFBQU8sRUFBRSxRQUFRLFNBQVMsRUFBRSxFQUFFLEdBQUcsRUFBRSxVQUFVLEVBQUUsR0FBRyxLQUFLLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLGVBQWUsU0FBUyxFQUFFLEdBQUcsRUFBRSxRQUFRLFNBQVMsRUFBRSxHQUFHLE9BQU8sTUFBTSxFQUFFLE9BQU8sS0FBSyxTQUFTLEVBQUUsRUFBRSxHQUFHLEdBQUksR0FBRSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUcsR0FBRSxRQUFRLFNBQVMsRUFBRSxHQUFHLElBQUksR0FBSSxHQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUUsTUFBTyxLQUFJLFNBQVMsRUFBRSxFQUFFLEdBQUcsR0FBSSxHQUFFLEVBQUUsSUFBSSxRQUFRLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxjQUFjLFdBQVcsT0FBTSxHQUFJLEdBQUcsRUFBRSxHQUFHLFdBQVcsTUFBTyxHQUFFLE9BQU8seUJBQXlCLEVBQUUsU0FBUyxHQUFHLEVBQUUsRUFBRSxHQUFHLE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxHQUFHLElBQUksRUFBRSxHQUFHLE1BQU0sZ0JBQWlCLEdBQUUsR0FBRyxnQkFBaUIsR0FBRSxJQUFJLEtBQUssQ0FBRSxLQUFJLEVBQUUsRUFBRSxHQUFHLENBQUMsSUFBSSxFQUFFLEdBQUcsTUFBTSxHQUFJLEtBQUksRUFBRSxNQUFNLEdBQUksR0FBRSxHQUFHLE1BQU8sR0FBRSxHQUFHLEdBQUcsRUFBRSxTQUFTLEVBQUUsR0FBRyxJQUFJLEVBQUUsRUFBRSxHQUFHLENBQUMsSUFBSSxFQUFFLEdBQUcsT0FBTSxDQUFHLEtBQUksRUFBRSxPQUFNLENBQUcsR0FBRSxHQUFHLE1BQU8sR0FBRSxHQUFHLEdBQUcsRUFBRSxTQUFTLEdBQUcsTUFBTyxJQUFHLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxHQUFHLEdBQUcsRUFBRSxFQUFFLFNBQVMsSUFBSSxFQUFFLE1BQUssRUFBRyxRQUFRLEVBQUUsUUFBUSxFQUFFLFNBQVMsSUFBSSxTQUFTLEVBQUUsRUFBRSxHQUFHLEdBQUksR0FBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUksR0FBRSxRQUFRLEVBQUUsR0FBRyxPQUFPLGlCQUFpQixTQUFTLEVBQUUsR0FBRyxFQUFFLEVBQUcsS0FBSSxHQUFJLEdBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLEdBQUksT0FBTyxLQUFJLFNBQVMsRUFBRSxFQUFFLEdBQUcsR0FBSSxHQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsSUFBSSxFQUFFLE9BQU8sd0JBQXlCLEdBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsR0FBRyxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFFLEdBQUksRUFBRSxJQUFJLE1BQU8sR0FBRSxFQUFFLEdBQUcsTUFBTSxJQUFJLEdBQUcsRUFBRSxFQUFFLEdBQUcsTUFBTyxJQUFHLEVBQUUsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLE1BQU0sU0FBUyxFQUFFLEVBQUUsR0FBRyxHQUFJLEdBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxJQUFJLEVBQUUsS0FBSyxTQUFTLEVBQUUsZ0JBQWlCLFNBQVEsUUFBUSxPQUFPLG9CQUFvQixPQUFPLG9CQUFvQixXQUFXLEVBQUUsU0FBUyxHQUFHLElBQUksTUFBTyxHQUFFLEdBQUcsTUFBTSxHQUFHLE1BQU8sR0FBRSxTQUFVLEdBQUUsUUFBUSxFQUFFLFNBQVMsR0FBRyxNQUFPLElBQUcsbUJBQW1CLEVBQUUsS0FBSyxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsTUFBTSxTQUFTLEVBQUUsRUFBRSxHQUFHLEdBQUksR0FBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLElBQUksWUFBWSxFQUFFLE9BQU8sU0FBVSxHQUFFLFFBQVEsT0FBTyxnQkFBZ0IsU0FBUyxHQUFHLE1BQU8sR0FBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLGtCQUFtQixHQUFFLGFBQWEsWUFBYSxHQUFFLFlBQVksRUFBRSxZQUFZLFVBQVUsWUFBYSxRQUFPLEVBQUUsT0FBTyxTQUFTLEVBQUUsRUFBRSxHQUFHLEdBQUksR0FBRSxFQUFFLElBQUksRUFBRSxFQUFFLEdBQUksR0FBRSxRQUFRLFNBQVMsR0FBRyxNQUFPLFVBQVMsRUFBRSxHQUFHLEdBQUksR0FBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLE1BQU8sT0FBTyxHQUFFLEdBQUcsR0FBRyxFQUFFLEVBQUUsT0FBRyxJQUFRLEVBQUUsRUFBRSxXQUFXLEdBQUcsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksSUFBSSxFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFLE9BQU8sR0FBRyxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLE9BQU8sSUFBSSxVQUFVLFNBQVMsRUFBRSxFQUFFLEdBQUcsR0FBSSxHQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssSUFBSSxFQUFFLEtBQUssR0FBSSxHQUFFLFFBQVEsU0FBUyxFQUFFLEdBQUcsTUFBTyxHQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsS0FBSyxTQUFTLEVBQUUsRUFBRSxHQUFHLEdBQUksR0FBRSxFQUFFLElBQUksRUFBRSxLQUFLLEdBQUksR0FBRSxRQUFRLFNBQVMsR0FBRyxNQUFPLEdBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxrQkFBa0IsSUFBSSxTQUFTLEVBQUUsRUFBRSxHQUFHLEdBQUksR0FBRSxFQUFFLEdBQUksR0FBRSxRQUFRLFNBQVMsR0FBRyxNQUFPLFFBQU8sRUFBRSxNQUFNLFNBQVMsRUFBRSxFQUFFLEdBQUcsWUFBYSxJQUFJLEdBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFHLEdBQUUsUUFBUSxFQUFFLElBQUksTUFBTSxRQUFRLFNBQVMsRUFBRSxHQUFHLEtBQUssR0FBRyxFQUFFLEdBQUcsS0FBSyxHQUFHLEVBQUUsS0FBSyxHQUFHLEdBQUcsV0FBVyxHQUFJLEdBQUUsS0FBSyxHQUFHLEVBQUUsS0FBSyxHQUFHLEVBQUUsS0FBSyxJQUFLLFFBQU8sR0FBRyxHQUFHLEVBQUUsUUFBUSxLQUFLLE9BQUcsR0FBTyxFQUFFLElBQUksUUFBUSxFQUFFLEVBQUUsRUFBRSxHQUFHLFVBQVUsRUFBRSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEVBQUUsTUFBTSxVQUFVLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLFlBQVksU0FBUyxFQUFFLEtBQUssU0FBUyxFQUFFLEVBQUUsR0FBRyxZQUFhLElBQUksR0FBRSxFQUFFLEtBQUksRUFBSSxHQUFFLElBQUksT0FBTyxTQUFTLFNBQVMsR0FBRyxLQUFLLEdBQUcsT0FBTyxHQUFHLEtBQUssR0FBRyxHQUFHLFdBQVcsR0FBSSxHQUFFLEVBQUUsS0FBSyxHQUFHLEVBQUUsS0FBSyxFQUFHLE9BQU8sSUFBRyxFQUFFLFFBQVEsVUFBTSxHQUFPLE1BQUssSUFBSyxFQUFFLEVBQUUsRUFBRSxHQUFHLEtBQUssSUFBSSxFQUFFLFFBQVEsTUFBTSxFQUFFLE1BQUssT0FBUSxTQUFTLEVBQUUsRUFBRSxHQUFHLFlBQWEsSUFBSSxHQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsSUFBSSxJQUFJLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLFVBQVUsRUFBRSxFQUFFLFdBQVcsRUFBRSxFQUFFLGVBQWUsS0FBSyxxQkFBcUIsRUFBRSxFQUFFLG1CQUFtQixFQUFFLEVBQUUsV0FBVyxFQUFFLEVBQUUsY0FBYyxFQUFFLE9BQU8sVUFBVSxFQUFFLGtCQUFtQixHQUFFLEVBQUUsRUFBRSxRQUFRLEdBQUcsSUFBSSxFQUFFLFlBQVksRUFBRSxVQUFVLFVBQVUsRUFBRSxHQUFHLEVBQUUsV0FBVyxNQUFPLElBQUcsRUFBRSxLQUFLLEtBQUssSUFBSSxXQUFXLE1BQU8sR0FBRSxLQUFLLEtBQUssTUFBTSxJQUFJLE1BQU0sSUFBSSxTQUFTLEVBQUUsRUFBRSxHQUFHLEdBQUksR0FBRSxFQUFFLEVBQUUsRUFBRyxVQUFVLEdBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEdBQUcsSUFBSSxHQUFHLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLFNBQVMsR0FBRyxHQUFJLEdBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxVQUFXLE9BQU8sR0FBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsZ0JBQWlCLEdBQUUsU0FBUyxTQUFTLEdBQUcsTUFBTSxnQkFBaUIsSUFBRyxTQUFTLEdBQUcsTUFBTyxhQUFhLElBQUcsRUFBRSxTQUFTLEVBQUUsRUFBRSxHQUFHLE1BQU8sS0FBSSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFFLEdBQUksRUFBRSxHQUFHLEVBQUUsRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLEVBQUUsSUFBSSxFQUFFLEdBQUcsS0FBSyxFQUFFLEdBQUcsSUFBRyxHQUFJLEVBQUUsRUFBRSxHQUFHLFdBQVcsRUFBRSxHQUFFLE9BQVEsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsR0FBRyxJQUFHLEdBQUksRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxFQUFHLEtBQUksR0FBSSxHQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLEdBQUksT0FBTyxJQUFHLEVBQUUsU0FBUyxFQUFFLEdBQUcsV0FBTyxLQUFTLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLElBQUksRUFBRSxTQUFTLEdBQUcsR0FBSSxHQUFFLEVBQUUsS0FBSyxLQUFLLEVBQUUsRUFBRSxHQUFFLEdBQUssU0FBUSxPQUFPLEdBQUcsRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFLFFBQVEsSUFBSSxFQUFFLEtBQUssS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssSUFBSSxLQUFLLEdBQUcsS0FBSyxJQUFJLEVBQUUsU0FBUyxFQUFFLEdBQUcsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRSxHQUFJLElBQUksSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsR0FBRyxDQUFDLEdBQUksR0FBRSxFQUFFLEVBQUUsRUFBRyxRQUFPLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxHQUFHLEtBQUssRUFBRSxZQUFXLEdBQUksSUFBSSxFQUFFLFNBQVMsR0FBRyxJQUFJLEdBQUksR0FBRSxFQUFFLEVBQUUsRUFBRSxJQUFJLEtBQUssRUFBRSxFQUFFLEVBQUUsT0FBTyxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxHQUFHLEdBQUcsR0FBRyxHQUFHLEVBQUUsS0FBSyxFQUFHLE9BQU8sSUFBRyxFQUFFLFNBQVMsR0FBRyxJQUFJLEdBQUksR0FBRSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsSUFBSSxLQUFLLEVBQUUsRUFBRSxFQUFFLE9BQU8sSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxHQUFJLE9BQU8sR0FBRyxLQUFJLEVBQUUsV0FBVyxHQUFHLGVBQWdCLEdBQUUsS0FBTSxXQUFVLCtCQUFnQyxJQUFJLEdBQUUsRUFBRSxVQUFVLE9BQU8sRUFBRSxVQUFVLE9BQUcsSUFBUSxFQUFFLFNBQVMsR0FBRyxPQUFPLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEtBQUssSUFBSSxFQUFFLEtBQUssR0FBRyxLQUFLLEtBQUssR0FBRyxJQUFHLEdBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLElBQUssT0FBTyxJQUFHLEdBQUcsRUFBRSxFQUFFLEdBQUcsY0FBYSxFQUFHLElBQUksSUFBSSxFQUFFLElBQUksRUFBRSxFQUFFLFVBQVUsV0FBVyxXQUFXLE1BQU8sTUFBSyxLQUFLLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsdUJBQXVCLEdBQUUsR0FBSSxFQUFFLEVBQUUsU0FBUyxHQUFHLE1BQU8sR0FBRSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFHLE9BQU8sR0FBSSxLQUFJLEdBQUksSUFBRyxpSEFBaUgsTUFBTSxLQUFLLEdBQUcsRUFBRSxHQUFHLE9BQU8sSUFBSSxFQUFFLEdBQUcsTUFBTyxLQUFJLEdBQUksSUFBRyxFQUFFLEVBQUUsT0FBTyxHQUFHLEVBQUUsR0FBRyxPQUFPLElBQUksRUFBRSxHQUFHLE1BQU8sR0FBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsVUFBVSxJQUFJLFNBQVMsR0FBRyxNQUFPLEdBQUUsRUFBRSxHQUFHLElBQUksRUFBRSxHQUFHLEVBQUUsR0FB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RyxpQkFBaUIsS0FBSSxFQUFFLElBQUcsR0FBSSxJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxJQUFJLENBQUMsR0FBSSxHQUFFLEVBQUUsRUFBRyxpQkFBaUIsR0FBRSxJQUFJLEVBQUUsRUFBRSxNQUFNLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLElBQUksRUFBRSxHQUFHLFVBQVUsRUFBRSxLQUFLLEVBQUUsS0FBSyxNQUFNLElBQUksU0FBUyxFQUFFLEVBQUUsR0FBRyxRQUFTLEdBQUUsR0FBRyxFQUFFLElBQUksR0FBSSxHQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsS0FBSyxLQUFNLEdBQUUsUUFBUSxFQUFFLFNBQVMsU0FBUyxFQUFFLEVBQUUsR0FBRyxRQUFTLEdBQUUsR0FBRyxJQUFJLEdBQUksR0FBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLElBQUksQ0FBQyxHQUFJLEdBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUksSUFBRyxFQUFFLENBQUMsRUFBRSxNQUFPLEtBQUksR0FBSSxHQUFFLEVBQUUsRUFBRSxFQUFFLE1BQU0sT0FBTyxJQUFJLEVBQUUsTUFBTSxHQUFHLEVBQUUsTUFBTSxHQUFJLE1BQUssRUFBRSxFQUFFLE1BQU0sT0FBTyxJQUFJLEVBQUUsTUFBTSxLQUFLLEVBQUUsRUFBRSxNQUFNLElBQUssR0FBRSxNQUFNLE9BQU8sRUFBRSxNQUFNLFNBQVMsRUFBRSxNQUFNLE9BQU8sRUFBRSxNQUFNLFlBQVksQ0FBQyxJQUFJLEdBQUksTUFBSyxFQUFFLEVBQUUsRUFBRSxFQUFFLE1BQU0sT0FBTyxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsTUFBTSxJQUFLLEdBQUUsRUFBRSxLQUFLLEdBQUcsRUFBRSxHQUFHLEtBQUssRUFBRSxNQUFNLEtBQUssUUFBUyxLQUFJLEdBQUksR0FBRSxTQUFTLGNBQWMsUUFBUyxPQUFPLEdBQUUsS0FBSyxXQUFXLEVBQUUsWUFBWSxHQUFHLEVBQUUsUUFBUyxHQUFFLEdBQUcsR0FBSSxHQUFFLEVBQUUsRUFBRSxTQUFTLGNBQWMsMkJBQTJCLEVBQUUsR0FBRyxLQUFNLElBQUcsRUFBRSxDQUFDLEdBQUcsRUFBRSxNQUFPLEVBQUUsR0FBRSxXQUFXLFlBQVksR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFJLEdBQUUsR0FBSSxHQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxLQUFLLEtBQUssRUFBRSxHQUFFLEdBQUksRUFBRSxFQUFFLEtBQUssS0FBSyxFQUFFLEdBQUUsT0FBUyxHQUFFLElBQUksRUFBRSxFQUFFLEtBQUssS0FBSyxHQUFHLEVBQUUsV0FBVyxFQUFFLFdBQVcsWUFBWSxHQUFJLE9BQU8sR0FBRSxHQUFHLFNBQVMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxVQUFVLE1BQU8sR0FBRSxFQUFFLE9BQVEsTUFBSyxRQUFTLEdBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFJLEdBQUUsRUFBRSxHQUFHLEVBQUUsR0FBSSxJQUFHLEVBQUUsV0FBVyxFQUFFLFdBQVcsUUFBUSxFQUFFLEVBQUUsT0FBTyxDQUFDLEdBQUksR0FBRSxTQUFTLGVBQWUsR0FBRyxFQUFFLEVBQUUsVUFBVyxHQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsRUFBRSxJQUFJLEVBQUUsWUFBWSxJQUFJLFFBQVMsR0FBRSxFQUFFLEdBQUcsR0FBSSxHQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUsU0FBVSxJQUFHLEdBQUcsRUFBRSxhQUFhLFFBQVEsR0FBRyxJQUFJLEdBQUcsbUJBQW1CLEVBQUUsUUFBUSxHQUFHLE1BQU0sR0FBRyx1REFBdUQsS0FBSyxTQUFTLG1CQUFtQixLQUFLLFVBQVUsTUFBTSxPQUFPLEVBQUUsV0FBVyxFQUFFLFdBQVcsUUFBUSxNQUFNLENBQUMsS0FBSyxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsV0FBWSxHQUFFLFlBQVksU0FBUyxlQUFlLEtBQUssR0FBSSxHQUFFLG1CQUFvQixTQUFTLElBQUcsbUJBQW9CLFFBQU8sUUFBUSxFQUFFLEtBQU0sSUFBSSxPQUFNLDBKQUEySixJQUFJLEdBQUUsRUFBRSxJQUFJLEtBQUssRUFBRSxJQUFJLFNBQVMsTUFBTSxTQUFTLHFCQUFxQixRQUFRLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxHQUFFLEVBQUcsRUFBRSxhQUFhLEVBQUUsbUJBQW9CLFlBQVcsZUFBZSxLQUFLLFVBQVUsVUFBVSxjQUFlLEdBQUUsUUFBUSxTQUFTLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBRSxJQUFJLEdBQUUsRUFBRSxFQUFFLEVBQUcsT0FBTyxHQUFFLEdBQUcsU0FBUyxHQUFHLElBQUksR0FBSSxNQUFLLEVBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxJQUFJLENBQUMsR0FBSSxHQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFJLEdBQUUsT0FBTyxFQUFFLEtBQUssR0FBRyxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxJQUFJLElBQUssS0FBSSxHQUFJLEdBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxJQUFJLENBQUMsR0FBSSxHQUFFLEVBQUUsRUFBRyxJQUFHLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSSxHQUFJLEdBQUUsRUFBRSxFQUFFLEVBQUUsTUFBTSxPQUFPLElBQUksRUFBRSxNQUFNLFdBQVksR0FBRSxFQUFFLE9BQVEsSUFBSSxHQUFFLFdBQVcsR0FBSSxLQUFLLE9BQU8sVUFBUyxFQUFFLEdBQUcsTUFBTyxHQUFFLEdBQUcsRUFBRSxFQUFFLE9BQU8sU0FBUyxLQUFLLFdBQVcsU0FBUyxFQUFFLEdBQUcsRUFBRSxRQUFRLFNBQVMsRUFBRSxHQUFHLElBQUksR0FBSSxNQUFLLEtBQUssRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLElBQUksQ0FBQyxHQUFJLEdBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxH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RUEsVUFBQSxXQUtBLE1BSEEsTUFBQSxVQUdBLFFBQUEsS0FBQSxPQUFBLFlBR0EsS0FBQSxPQUNBLE1BQUEsR0FDQSxNQUFBLEtBQUEsSUFBQSxRQUNBLEtBQUEsU0FFQSxLQUFBLE9BQ0EsTUFBQSxXQUNBLEtBQUEsV0FFQSxLQUFBLGlCQUNBLE1BQUEsR0FDQSxNQUFBLEtBQUEsSUFBQSxrQkFDQSxLQUFBLEtBQUEsc0JBQUEsT0FBQSxXQUVBLEtBQUEsYUFDQSxNQUFBLEdBQ0EsTUFBQSxLQUFBLElBQUEsY0FDQSxLQUFBLFNBRUEsS0FBQSxVQUNBLE1BQUEsR0FDQSxNQUFBLEtBQUEsSUFBQSxXQUNBLEtBQUEsU0FFQSxLQUFBLGFBQ0EsTUFBQSxHQUNBLE1BQUEsS0FBQSxJQUFBLGNBQ0EsS0FBQSxTQUVBLEtBQUEsYUFDQSxNQUFBLEdBQ0EsTUFBQSxLQUFBLElBQUEsY0FDQSxLQUFBLFNBRUEsS0FBQSxVQUNBLE1BQUEsS0FBQSxPQUFBLE1BQUEsS0FBQSxLQUFBLFNBQUEsS0FBQSxPQUFBLE1BQUEsS0FBQSxLQUFBLFFBQUEsYUFBQSxHQUNBLE1BQUEsS0FBQSxJQUFBLFdBQ0EsUUFBQSxLQUFBLE9BQUEsUUFBQSxxQkFDQSxLQUFBLFdBRUEsU0FBQSxLQUFBLE9BQUEsV0FDQSxLQUFBLFlBRUEsS0FBQSxPQUNBLE1BQUEsS0FBQSxLQUFBLEtBQ0EsTUFBQSxLQUFBLElBQUEsUUFDQSxLQUFBLFNBRUEsS0FBQSxPQUNBLE1BQUEsS0FBQSxLQUFBLEtBQ0EsS0FBQSxXQUVBLEtBQUEsS0FDQSxNQUFBLEtBQUEsS0FBQSxHQUNBLEtBQUEsV0FFQSxLQUFBLGlCQUNBLE1BQUEsS0FBQSxLQUFBLGVBQ0EsTUFBQSxLQUFBLElBQUEsa0JBQ0EsS0FBQSxLQUFBLHNCQUFBLE9BQUEsV0FFQSxLQUFBLGFBQ0EsTUFBQSxLQUFBLEtBQUEsV0FDQSxNQUFBLEtBQUEsSUFBQSxjQUNBLEtBQUEsU0FFQSxLQUFBLFVBQ0EsTUFBQSxLQUFBLEtBQUEsUUFDQSxNQUFBLEtBQUEsSUFBQSxXQUNBLEtBQUEsU0FFQSxLQUFBLGFBQ0EsTUFBQSxLQUFBLEtBQUEsV0FDQSxNQUFBLEtBQUEsSUFBQSxjQUNBLEtBQUEsU0FFQSxLQUFBLGFBQ0EsTUFBQSxLQUFBLEtBQUEsV0FDQSxNQUFBLEtBQUEsSUFBQSxjQUNBLEtBQUEsU0FFQSxLQUFBLFVBQ0EsTUFBQSxLQUFBLEtBQUEsU0FBQSxLQUFBLEtBQUEsUUFBQSxhQUFBLEdBQ0EsTUFBQSxLQUFBLElBQUEsV0FDQSxRQUFBLEtBQUEsT0FBQSxRQUFBLHFCQUNBLEtBQUEsZ0JBN0NBLElBaURBLEtBQUEsV0FDQSxLQUFBLE9BQUEsU0FBQSxnQkFDQSxLQUFBLGlCQUNBLEtBQUEsT0FBQSxLQUFBLEtBQUEsWUFFQSxNQUFBLFNBQUEsR0FDQSxLQUFBLFVBQ0EsSUFDQSxHQUNBLE9BQUEsV0FHQSxLQUFBLFFBQUEsSUFFQSxLQUFBLE9BQUEsS0FBQSxLQUFBLFlBRUEsV0FBQSxXQUFBLEdBQUEsR0FBQSxLQUNBLEVBQUEsSUFDQSxPQUFBLE1BQUEsS0FBQSxXQUFBLEtBQUEsVUFBQSxLQUFBLFNBQUEsR0FHQSxNQUFBLEVBQUEsT0FDQSxFQUFBLFdBQUEsRUFBQSxPQUFBLFFBR0EsTUFBQSxFQUFBLE9BQ0EsRUFBQSxPQUFBLE9BQUEsYUFBQSxFQUFBLE9BQUEsU0FDQSxFQUFBLE9BQUEsT0FBQSxnQkFJQSxjQUFBLFdBQUEsR0FBQSxHQUFBLEtBQ0EsRUFBQSxJQUVBLE9BQUEsTUFBQSxLQUFBLGNBQUEsS0FBQSxTQUFBLEdBQUEsS0FBQSxVQUFBLEtBQUEsU0FBQSxHQUdBLE1BQUEsRUFBQSxPQUNBLEVBQUEsV0FBQSxFQUFBLE9BQUEsUUFHQSxNQUFBLEVBQUEsT0FDQSxFQUFBLE9BQUEsT0FBQSxnQkFBQSxFQUFBLE9BQUEsU0FDQSxFQUFBLE9BQUEsT0FBQSxpQkFLQSxPQUNBLFVBQUEsV0FDQSxLQUFBLHNWQTlOQSxpQkFBQSxPQUFBLFdBQUEsR0FBQSxHQUFBLEtBQUEsRUFBQSxFQUFBLGVBQUEsRUFBQSxFQUFBLE1BQUEsSUFBQSxDQUFBLE9BQUEsR0FBQSxPQUFBLEVBQUEsU0FBQSxPQUFBLEtBQUEsRUFBQSxVQUFBLGtCQUFBLEVBQUEsT0FBQSxPQUFBLFlBQUEsS0FBQSxFQUFBLG1CQUFBLE9BQUEsTUFBQSxRQUFBLEVBQUEsVUFBQSxFQUFBLElBQUEsY0FBQSxFQUFBLElBQUEsZ0JBQUEsSUFBQSxNQUFBLEVBQUEsU0FBQSxFQUFBLFVBQUEsT0FBQSxPQUFBLEVBQUEsT0FBQSxZQUFBLEVBQUEsU0FBQSxjQUFBLEVBQUEsY0FBQSxFQUFBLE9BQUEsWUFBQSxvQkFBQSxPQUFBLEtBQUEsV0FBQSxLQUFBLFlBQUEsRUFBQSxVQUFBLFlBQUEsa0JBQUEsT0FBQSxLQUFBLFVBQUEsSUFBQSxNQUFBLEVBQUEsU0FBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsSUFBQSxjQUFBLEVBQUEsR0FBQSxLQUFBLFFBQUEsRUFBQSxVQUFBLEVBQUEsVUFBQSxZQUFBLGlCQUFBLE9BQUEsS0FBQSxVQUFBLElBQUEsTUFBQSxFQUFBLGNBQUEsRUFBQSxHQUFBLEVBQUEsR0FBQSxFQUFBLElBQUEsa0JBQUEsRUFBQSxLQUFBLEVBQUEsR0FBQSxLQUFBLFNBQUEsRUFBQSxVQUFBLEVBQUEsVUFBQSxZQUFBLGlCQUFBLE9BQUEsS0FBQSxVQUFBLElBQUEsTUFBQSxFQUFBLGlCQUFBLEVBQUEsR0FBQSxFQUFBLEdBQUEsRUFBQSxJQUFBLHFCQUFBLEVBQUEsVUFBQSxJQUFBLElBQUEsSUFBQSxpQkFBQTs7O3NTQ21CQSxFQUFBLFFBQUEsZ0NBQ0EsRUFBQSxRQUFBLHNDQUNBLEVBQUEsUUFBQSx1QkFDQSxFQUFBLFFBQUEsbURBR0EsWUFDQSxrQkFBQSxFQUFBLFFBQ0Esd0JBQUEsRUFBQSxRQUNBLFNBQUEsRUFBQSxTQUVBLEtBQUEsaUJBQ0EsT0FBQSxXQUFBLGFBQUEsY0FDQSxLQUFBLFdBQ0EsT0FDQSxjQUNBLFlBQ0EsUUFDQSxLQUFBLFlBQ0EsV0FBQSxFQUNBLGNBQUEsRUFDQSxZQUFBLEVBQ0EsbUJBQUEsR0FDQSxtQkFBQSxHQUNBLGlCQUFBLEtBR0EsVUFDQSxLQUFBLFdBQ0EsTUFBQSxNQUFBLE9BQUEsTUFBQSxLQUFBLE1BRUEsUUFBQSxXQUNBLE1BQUEsTUFBQSxPQUFBLE1BQUEsS0FBQSxTQUVBLE9BQUEsV0FDQSxNQUFBLE1BQUEsYUFFQSxVQUFBLFdBQ0EsTUFBQSxNQUFBLEtBQUEsSUFBQSxLQUFBLFlBR0EsU0FDQSxZQUFBLFNBQUEsR0FDQSxnQkFBQSxFQUFBLE1BQ0EsS0FBQSxTQUFBLGNBRUEsS0FBQSxlQUFBLEtBQUEsU0FBQSxlQUlBLDBCQUFBLFNBQUEsR0FDQSxLQUFBLGNBQ0EsS0FBQSxPQUFBLE1BQUEsdUJBQ0EsU0FBQSxLQUNBLEtBQUEsWUFDQSxZQUFBLEVBQ0EsY0FDQSxNQUFBLGVBQ0EsVUFBQSxLQUFBLElBQUEsZ0RBS0Esa0JBQUEsV0FDQSxLQUFBLGFBRUEsZUFBQSxXQUFBLEdBQUEsR0FBQSxJQUNBLE1BQUEsY0FDQSxLQUFBLFlBQ0EsS0FBQSxRQUNBLEtBQUEsbUJBQUEsR0FFQSxLQUFBLE9BQUEsWUFDQSxFQUFBLEVBQUEsU0FBQSxLQUFBLE9BQUEsV0FBQSxRQUFBLFNBQUEsR0FDQSxFQUFBLEtBQUEsR0FBQSxFQUFBLE9BQUEsVUFBQSxLQUlBLEtBQUEscUJBRUEsVUFBQSxXQUVBLEdBQUEsUUFBQSxLQUFBLE9BQUEsVUFDQSxRQUNBLEtBQUEsZUFDQSxNQUFBLEtBQUEsS0FBQSxhQUNBLE1BQUEsS0FBQSxJQUFBLGdCQUNBLEtBQUEsU0FFQSxLQUFBLE9BQ0EsTUFBQSxLQUFBLEtBQUEsTUFBQSxLQUFBLG1CQUNBLE1BQUEsS0FBQSxJQUFBLFFBQ0EsS0FBQSxTQUVBLEtBQUEsY0FDQSxNQUFBLEtBQUEsS0FBQSxZQUNBLE1BQUEsS0FBQSxJQUFBLG1DQUNBLEtBQUEsU0FFQSxLQUFBLGNBQ0EsTUFBQSxLQUFBLEtBQUEsYUFBQSxLQUFBLG1CQUNBLFlBQUEsS0FBQSxJQUFBLDJDQUNBLE1BQUEsS0FBQSxJQUFBLHFDQUNBLEtBQUEsYUFFQSxLQUFBLGtCQUNBLE1BQUEsS0FBQSxLQUFBLGdCQUNBLE1BQUEsS0FBQSxJQUFBLHlDQUNBLEtBQUEsU0FFQSxLQUFBLFlBQ0EsTUFBQSxLQUFBLEtBQUEsV0FBQSxLQUFBLGlCQUVBLE1BQUEsS0FBQSxJQUFBLG1DQUNBLEtBQUEsYUFFQSxLQUFBLGdCQUNBLE1BQUEsS0FBQSxLQUFBLGNBQ0EsTUFBQSxLQUFBLElBQUEsdUNBQ0EsS0FBQSxTQUVBLEtBQUEsY0FDQSxNQUFBLEtBQUEsSUFBQSxxQ0FDQSxLQUFBLGFBQ0EsU0FBQSxRQUNBLGNBQUEsU0FDQSxXQUFBLEVBQ0EsU0FDQSxTQUNBLE1BQUEsS0FBQSxJQUFBLDZCQUNBLFlBQUEsS0FBQSxJQUFBLDZCQUNBLEtBQUEsT0FDQSxLQUFBLFNBRUEsTUFBQSxLQUFBLElBQUEsMkJBQ0EsWUFBQSxLQUFBLElBQUEsMkJBQ0EsS0FBQSxPQUNBLEtBQUEsT0FFQSxNQUFBLEtBQUEsSUFBQSwrQkFDQSxZQUFBLEtBQUEsSUFBQSwrQkFDQSxLQUFBLFNBQ0EsS0FBQSxXQUVBLE1BQUEsS0FBQSxJQUFBLDhCQUNBLFlBQUEsS0FBQSxJQUFBLDhCQUNBLEtBQUEsV0FDQSxLQUFBLFlBR0EsS0FBQSxXQUNBLE1BQUEsS0FBQSxJQUFBLDhCQUNBLEtBQUEsYUFDQSxTQUFBLFFBQ0EsY0FBQSxRQUNBLFdBQUEsRUFDQSxTQUNBLFNBQ0EsTUFBQSxLQUFBLElBQUEsMEJBQ0EsWUFBQSxLQUFBLElBQUEsMEJBQ0EsS0FBQSxPQUNBLEtBQUEsU0FFQSxNQUFBLEtBQUEsSUFBQSwyQkFDQSxZQUFBLEtBQUEsSUFBQSwyQkFDQSxLQUFBLFNBQ0EsS0FBQSxVQUVBLE1BQUEsS0FBQSxJQUFBLDJCQUNBLFlBQUEsS0FBQSxJQUFBLDJCQUNBLEtBQUEsV0FDQSxLQUFBLFlBR0EsS0FBQSxRQUNBLFVBQUEsRUFDQSxTQUNBLEtBQUEsUUFFQSxNQUFBLE9BQUEsV0FJQSxLQUFBLFdBQ0EsS0FBQSxpQkFDQSxLQUFBLE9BQUEsS0FBQSxLQUFBLFlBRUEsTUFBQSxTQUFBLEdBQ0EsS0FBQSxVQUNBLElBQ0EsR0FDQSxPQUFBLFdBR0EsS0FBQSxRQUFBLElBRUEsS0FBQSxPQUFBLEtBQUEsS0FBQSxZQUVBLGVBQUEsU0FBQSxHQUFBLEdBQUEsR0FBQSxJQUFBLFFBQUEsRUFBQSxFQUFBLFNBQUEsRUFBQSxRQUFBLEtBQUEsUUFBQSxLQUFBLEdBQUEsR0FBQSxDQUFBLE9BQUEsR0FBQSxRQUFBLEtBQUEsU0FBQSxHQUFBLE9BQUEsT0FBQSxFQUFBLEtBQUEsRUFBQSxNQUFBLElBQUEsR0FBQSxNQUVBLEdBQUEsRUFBQSxTQUZBLEVBQUEsS0FBQSxFQUFBLEVBQUEsS0FBQSxtQkFBQSxFQUFBLEtBQUEsR0FBQSxHQUlBLEVBQUEsRUFBQSxLQUVBLEtBQUEsRUFBQSxNQUNBLEVBQUEsT0FBQSxlQUFBLHFCQUNBLEVBQUEsU0FBQSxLQUFBLEVBQUEsT0FBQSxnQkFBQSxZQUNBLEVBQUEsbUJBQUEsRUFBQSxPQUFBLGdCQUFBLFlBQ0EsRUFBQSxTQUFBLFlBQUEsRUFBQSxZQUNBLEVBQUEsS0FBQSxZQUFBLEVBQUEsU0FBQSxZQUNBLEVBQUEsS0FBQSxhQUFBLEVBQ0EsRUFBQSxTQUFBLGFBQUEsR0FiQSxNQUFBLEVBQUEsS0FBQSxDQUFBLEVBQUEsS0FBQSxDQUFBLE9BQUEsTUFrQkEsR0FBQSxtQkFBQSxHQUNBLEVBQUEsU0FBQSxLQUFBLEdBbkJBLEVBQUEsT0FBQSxTQUFBLEtBQUEsR0FBQSxHQUFBLE1BQUEsRUFBQSxLQUFBLENBQUEsRUFBQSxLQUFBLEVBQUEsT0FBQSxNQXdCQSxHQUFBLFNBQUEsS0FBQSxHQXhCQSxFQUFBLE9BQUEsU0FBQSxLQUFBLElBQUEsSUFBQSxNQUFBLE1BQUEsR0FBQSxTQUFBLEVBQUEsU0E0QkEsYUFBQSxXQUFBLEdBQUEsR0FBQSxJQUFBLFFBQUEsRUFBQSxFQUFBLFNBQUEsRUFBQSxRQUFBLEtBQUEsUUFBQSxLQUFBLEdBQUEsR0FBQSxFQUFBLEVBQUEsRUFBQSxFQUFBLEVBQUEsQ0FBQSxPQUFBLEdBQUEsUUFBQSxLQUFBLFNBQUEsR0FBQSxPQUFBLE9BQUEsRUFBQSxLQUFBLEVBQUEsTUFBQSxJQUFBLEdBQUEsTUFDQSxHQUFBLFlBQUEsRUFEQSxFQUFBLEtBQUEsRUFBQSxFQUFBLEtBQUEsY0FJQSxhQUFBLEVBQUEsU0FBQSxhQUNBLFlBQUEsRUFBQSxTQUFBLFlBQ0EsZ0JBQUEsRUFBQSxTQUFBLGdCQUNBLFVBQUEsRUFBQSxTQUFBLFVBQ0EsY0FBQSxFQUFBLFNBQUEsY0FDQSxZQUFBLEVBQUEsU0FBQSxZQUNBLFlBQUEsRUFBQSxTQUFBLFlBQ0EsU0FBQSxFQUFBLFNBQUEsVUFYQSxLQUFBLEdBQUEsR0FHQSxFQUFBLEVBQUEsS0FIQSxNQUFBLEVBQUEsS0FBQSxDQUFBLEVBQUEsS0FBQSxDQUFBLE9BQUEsTUFpQkEsR0FBQSxXQUFBLEVBQUEsT0FBQSxPQUNBLEVBQUEsWUFBQSxFQWxCQSxFQUFBLE9BQUEsU0FBQSxLQUFBLEdBQUEsR0FBQSxNQUFBLEVBQUEsS0FBQSxDQUFBLEVBQUEsS0FBQSxFQUFBLE9BQUEsTUF1QkEsR0FBQSxZQUFBLEVBdkJBLEVBQUEsT0FBQSxTQUFBLEtBQUEsSUE0QkEsRUFBQSxFQUFBLE9BQUEsVUFDQSxFQUFBLEVBQUEsT0FBQSxVQUFBLEtBR0EsR0FDQSxNQUFBLHdCQUNBLGNBQUEsRUFDQSxrQkFBQSxFQUFBLFNBQUEsY0FFQSxtQkFBQSxZQUNBLEVBQUEsUUFBQSxzQkFBQSxHQUdBLEVBQUEsV0FBQSxFQUFBLFNBQUEsTUFBQSxPQUNBLEVBQUEsY0FBQSxFQUVBLEVBQUEsRUFBQSxFQUFBLEVBQUEsU0FBQSxNQUFBLE1BNUNBLEtBQUEsSUFBQSxLQUFBLEVBQUEsR0FBQSxDQUFBLEVBQUEsS0FBQSxFQUFBLE9BQUEsTUE2Q0EsR0FBQSxFQUFBLFNBQUEsTUFBQSxHQUVBLEVBQUEsZ0JBL0NBLEVBQUEsS0FBQSxHQUFBLEVBQUEsS0FBQSxpQkFBQSxHQWtEQSxLQUFBLEVBQUEsTUFsREEsS0FBQSxJQUFBLEdBaURBLEVBQUEsRUFBQSxLQWpEQSxNQUFBLEVBQUEsS0FBQSxDQUFBLEVBQUEsS0FBQSxFQUFBLE9BQUEsTUFzREEsR0FBQSxZQUFBLEVBdERBLEVBQUEsT0FBQSxTQUFBLEtBQUEsSUE0Q0EsSUE1Q0EsRUFBQSxLQUFBLEVBQUEsTUFBQSxLQUFBLElBNERBLEVBQUEsT0FBQSxPQUFBLGVBQUEsR0FHQSxFQUFBLE9BQUEsU0FBQSxlQUFBLEdBRUEsRUFBQSxZQUFBLEVBQ0EsRUFBQSxPQUFBLE9BQUEsV0FsRUEsS0FBQSxJQUFBLElBQUEsTUFBQSxNQUFBLEdBQUEsU0FBQSxFQUFBLFVBcUVBLE9BQ0EsVUFBQSxXQUNBLEtBQUEsc1ZBNVRBLGlCQUFBLE9BQUEsV0FBQSxHQUFBLEdBQUEsS0FBQSxFQUFBLEVBQUEsZUFBQSxFQUFBLEVBQUEsTUFBQSxJQUFBLENBQUEsT0FBQSxHQUFBLFNBQUEsT0FBQSxLQUFBLEVBQUEsVUFBQSxrQkFBQSxFQUFBLE9BQUEsT0FBQSxZQUFBLEtBQUEsRUFBQSxtQkFBQSxPQUFBLE1BQUEsUUFBQSxFQUFBLFVBQUEsRUFBQSxJQUFBLGdCQUFBLEVBQUEsSUFBQSxrQkFBQSxJQUFBLE1BQUEsRUFBQSxTQUFBLEVBQUEseUJBQUEsT0FBQSxZQUFBLEVBQUEsS0FBQSxlQUFBLEVBQUEsV0FBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLFVBQUEsT0FBQSxPQUFBLEVBQUEsT0FBQSxZQUFBLEVBQUEsU0FBQSxjQUFBLEVBQUEsV0FBQSxVQUFBLEVBQUEsZUFBQSxFQUFBLE9BQUEsT0FBQSxLQUFBLFdBQUEsS0FBQSxZQUFBLEVBQUEsY0FBQSxFQUFBLEtBQUEsRUFBQSxHQUFBLEVBQUEsR0FBQSxFQUFBLElBQUEsa0JBQUEsS0FBQSxFQUFBLEdBQUEsRUFBQSxlQUFBLE1BQUEsRUFBQSxHQUFBLEVBQUEsZUFBQSxFQUFBLEtBQUEsRUFBQSxHQUFBLE9BQUEsRUFBQSxHQUFBLEtBQUEsRUFBQSxVQUFBLFlBQUEsa0JBQUEsT0FBQSxLQUFBLFVBQUEsSUFBQSxNQUFBLEVBQUEsU0FBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsSUFBQSxjQUFBLEVBQUEsR0FBQSxLQUFBLFFBQUEsRUFBQSxVQUFBLEVBQUEsVUFBQSxZQUFBLGlCQUFBLE9BQUEsU0FBQSxFQUFBLFdBQUEsS0FBQSxVQUFBLElBQUEsTUFBQSxFQUFBLGdCQUFBLEVBQUEsR0FBQSxFQUFBLEdBQUEsRUFBQSxJQUFBLG9CQUFBLEVBQUEsVUFBQSxJQUFBLElBQUEsaUJBQUE7OztzU0NrQkEsRUFBQSxRQUFBLGdDQUNBLEVBQUEsUUFBQSx3Q0FHQSxZQUNBLGtCQUFBLEVBQUEsUUFDQSxTQUFBLEVBQUEsU0FFQSxLQUFBLFlBQ0EsT0FBQSxXQUFBLGFBQUEsY0FDQSxLQUFBLFdBQ0EsT0FDQSxjQUNBLFlBQ0EsS0FBQSxPQUNBLFVBQUEsRUFDQSxVQUdBLFVBQ0EsT0FBQSxXQUVBLEdBQUEsS0FBQSxPQUFBLFFBQUEscUJBQ0EsTUFBQSxNQUFBLGFBR0EsVUFBQSxXQUNBLE1BQUEsTUFBQSxLQUFBLElBQUEsS0FBQSxXQUVBLFlBQUEsV0FFQSxNQUFBLE1BQUEsS0FBQSxLQUFBLEtBQUEsT0FBQSxNQUFBLEtBQUEsS0FBQSxLQUdBLFNBQ0EsZUFBQSxXQUFBLEdBQUEsR0FBQSxJQUNBLE1BQUEsY0FDQSxLQUFBLFlBQ0EsS0FBQSxRQUVBLEtBQUEsT0FBQSxZQUNBLEVBQUEsRUFBQSxTQUFBLEtBQUEsT0FBQSxXQUFBLFFBQUEsU0FBQSxHQUNBLEVBQUEsS0FBQSxHQUFBLEVBQUEsT0FBQSxVQUFBLEtBSUEsS0FBQSxxQkFFQSxrQkFBQSxXQUNBLEtBQUEsYUFFQSxVQUFBLFdBS0EsTUFIQSxNQUFBLFVBR0EsUUFBQSxLQUFBLE9BQUEsWUFFQSxLQUFBLFlBQ0EsTUFBQSxHQUNBLE1BQUEsS0FBQSxJQUFBLGFBQ0EsS0FBQSxTQUVBLEtBQUEsV0FDQSxNQUFBLEdBQ0EsTUFBQSxLQUFBLElBQUEsWUFDQSxLQUFBLFNBRUEsS0FBQSxXQUNBLE1BQUEsR0FDQSxNQUFBLEtBQUEsSUFBQSx5QkFDQSxLQUFBLFVBRUEsS0FBQSxVQUNBLE1BQUEsS0FBQSxLQUFBLFVBQ0EsTUFBQSxHQUNBLEtBQUEsV0FFQSxLQUFBLFFBQ0EsTUFBQSxHQUNBLE1BQUEsS0FBQSxJQUFBLFNBQ0EsS0FBQSxTQUVBLEtBQUEsT0FDQSxNQUFBLEdBQ0EsTUFBQSxLQUFBLElBQUEscUJBQ0EsVUFDQSxNQUFBLFdBQ0EsS0FBQSxLQUFBLElBQUEsb0JBRUEsTUFBQSxpQkFDQSxLQUFBLEtBQUEsSUFBQSx5QkFFQSxLQUFBLFdBRUEsS0FBQSxVQUNBLE1BQUEsS0FBQSxLQUFBLGFBQUEsR0FDQSxNQUFBLEtBQUEsSUFBQSxXQUNBLFFBQUEsS0FBQSxPQUFBLFFBQUEscUJBQ0EsS0FBQSxXQUVBLFNBQUEsS0FBQSxPQUFBLFlBRUEsS0FBQSxLQUNBLE1BQUEsS0FBQSxLQUFBLEdBQ0EsS0FBQSxXQUVBLEtBQUEsWUFDQSxNQUFBLEtBQUEsS0FBQSxVQUNBLE1BQUEsS0FBQSxJQUFBLGFBQ0EsS0FBQSxTQUVBLEtBQUEsV0FDQSxNQUFBLEtBQUEsS0FBQSxTQUNBLE1BQUEsS0FBQSxJQUFBLFlBQ0EsS0FBQSxTQUVBLEtBQUEsUUFDQSxNQUFBLEtBQUEsS0FBQSxNQUNBLE1BQUEsS0FBQSxJQUFBLFNBQ0EsS0FBQSxTQUVBLEtBQUEsT0FDQSxNQUFBLEtBQUEsS0FBQSxLQUNBLE1BQUEsS0FBQSxJQUFBLHFCQUNBLFVBQ0EsTUFBQSxXQUNBLEtBQUEsS0FBQSxJQUFBLG9CQUVBLE1BQUEsaUJBQ0EsS0FBQSxLQUFBLElBQUEseUJBRUEsS0FBQSxLQUFBLFlBQUEsU0FBQSxXQUVBLEtBQUEsVUFDQSxNQUFBLEtBQUEsS0FBQSxTQUFBLEtBQUEsS0FBQSxRQUFBLGFBQUEsR0FDQSxNQUFBLEtBQUEsSUFBQSxXQUNBLFFBQUEsS0FBQSxPQUFBLFFBQUEscUJBQ0EsS0FBQSxlQXJDQSxJQXlDQSxLQUFBLFdBQ0EsS0FBQSxPQUFBLFNBQUEsZ0JBQ0EsS0FBQSxpQkFDQSxLQUFBLE9BQUEsS0FBQSxLQUFBLFlBRUEsTUFBQSxTQUFBLEdBQ0EsS0FBQSxVQUNBLElBQ0EsR0FDQSxPQUFBLFdBR0EsS0FBQSxRQUFBLElBRUEsS0FBQSxPQUFBLEtBQUEsS0FBQSxZQUVBLFFBQUEsV0FBQSxHQUFBLEdBQUEsS0FDQSxFQUFBLElBQ0EsT0FBQSxNQUFBLEtBQUEsUUFBQSxLQUFBLFVBQUEsS0FBQSxTQUFBLEdBR0EsTUFBQSxFQUFBLE9BQ0EsRUFBQSxXQUFBLEVBQUEsT0FBQSxRQUdBLE1BQUEsRUFBQSxPQUNBLEVBQUEsT0FBQSxPQUFBLFVBQUEsRUFBQSxPQUFBLE1BQ0EsRUFBQSxPQUFBLE9BQUEsWUFDQSxFQUFBLGdCQUFBLEVBQUEsT0FBQSxVQUlBLGdCQUFBLFNBQUEsR0FBQSxHQUFBLEdBQUEsSUFBQSxRQUFBLEVBQUEsRUFBQSxTQUFBLEVBQUEsUUFBQSxLQUFBLFFBQUEsS0FBQSxHQUFBLEVBQUEsT0FBQSxHQUFBLFFBQUEsS0FBQSxTQUFBLEdBQUEsT0FBQSxPQUFBLEVBQUEsS0FBQSxFQUFBLE1BQUEsSUFBQSxHQUFBLEdBQUEsRUFBQSxNQUFBLENBQUEsRUFBQSxLQUFBLENBQUEsT0FBQSxNQUFBLEdBQUEsS0FBQSxFQUFBLEVBQUEsS0FBQSxVQUFBLEtBQUEsR0FFQSxFQUFBLEVBQUEsS0FDQSxNQUFBLEVBQUEsT0FDQSxFQUFBLE1BQUEsRUFBQSxPQUFBLE1BSkEsS0FBQSxHQUFBLE1BQUEsR0FBQSxPQUFBLFNBQUEsRUFBQSxLQUFBLGtCQVNBLE1BQUEsRUFBQSxNQUNBLFNBQUEsRUFBQSxXQUZBLEtBQUEsU0FBQSxHQUtBLEVBQUEsTUFBQSxHQUdBLE1BQUEsRUFBQSxPQUNBLEVBQUEsV0FBQSxFQUFBLE9BQUEsUUFHQSxNQUFBLEVBQUEsT0FDQSxFQUFBLGNBQUEsS0FyQkEsS0FBQSxHQUFBLElBQUEsTUFBQSxNQUFBLEdBQUEsU0FBQSxFQUFBLFNBeUJBLFdBQUEsV0FBQSxHQUFBLEdBQUEsS0FDQSxFQUFBLElBQ0EsT0FBQSxNQUFBLEtBQUEsV0FBQSxLQUFBLFNBQUEsR0FBQSxLQUFBLFVBQUEsS0FBQSxTQUFBLEdBR0EsTUFBQSxFQUFBLE9BQ0EsRUFBQSxXQUFBLEVBQUEsT0FBQSxRQUdBLE1BQUEsRUFBQSxPQUNBLEVBQUEsT0FBQSxPQUFBLGFBQUEsRUFBQSxPQUFBLE1BQ0EsRUFBQSxPQUFBLE9BQUEsaUJBS0EsT0FDQSxVQUFBLFdBQ0EsS0FBQSxzVkEzT0EsaUJBQUEsT0FBQSxXQUFBLEdBQUEsR0FBQSxLQUFBLEVBQUEsRUFBQSxlQUFBLEVBQUEsRUFBQSxNQUFBLElBQUEsQ0FBQSxPQUFBLEdBQUEsT0FBQSxFQUFBLFNBQUEsT0FBQSxLQUFBLEVBQUEsVUFBQSxrQkFBQSxFQUFBLE9BQUEsT0FBQSxZQUFBLEtBQUEsRUFBQSxtQkFBQSxPQUFBLE1BQUEsUUFBQSxFQUFBLFVBQUEsRUFBQSxJQUFBLFdBQUEsRUFBQSxJQUFBLGFBQUEsSUFBQSxNQUFBLEVBQUEsU0FBQSxFQUFBLFVBQUEsT0FBQSxPQUFBLEVBQUEsT0FBQSxZQUFBLEVBQUEsU0FBQSxjQUFBLEVBQUEsY0FBQSxFQUFBLE9BQUEsWUFBQSxvQkFBQSxPQUFBLEtBQUEsV0FBQSxLQUFBLFlBQUEsRUFBQSxVQUFBLFlBQUEsa0JBQUEsT0FBQSxLQUFBLFVBQUEsSUFBQSxNQUFBLEVBQUEsU0FBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsSUFBQSxjQUFBLEVBQUEsR0FBQSxLQUFBLFFBQUEsRUFBQSxVQUFBLEVBQUEsVUFBQSxZQUFBLGlCQUFBLE9BQUEsS0FBQSxVQUFBLElBQUEsTUFBQSxFQUFBLFdBQUEsRUFBQSxHQUFBLEVBQUEsR0FBQSxFQUFBLElBQUEsZUFBQSxFQUFBLEtBQUEsRUFBQSxHQUFBLEtBQUEsU0FBQSxFQUFBLFVBQUEsRUFBQSxVQUFBLFlBQUEsaUJBQUEsT0FBQSxLQUFBLFVBQUEsSUFBQSxNQUFBLEVBQUEsY0FBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsSUFBQSxrQkFBQSxFQUFBLFVBQUEsSUFBQSxJQUFBLElBQUEsaUJBQUE7OztzU0NlQSxFQUFBLFFBQUEsZ0NBQ0EsRUFBQSxRQUFBLHdDQUdBLFlBQ0Esa0JBQUEsRUFBQSxRQUNBLFNBQUEsRUFBQSxTQUVBLEtBQUEsNEJBQ0EsT0FBQSxXQUFBLGFBQUEsY0FDQSxLQUFBLFdBQ0EsT0FDQSxjQUNBLFlBQ0EsUUFDQSxLQUFBLHdCQUNBLFlBQUEsSUFHQSxVQUNBLE9BQUEsV0FDQSxNQUFBLE1BQUEsYUFFQSxVQUFBLFdBQ0EsTUFBQSxNQUFBLEtBQUEsSUFBQSxLQUFBLFlBR0EsU0FDQSxrQkFBQSxXQUNBLEtBQUEsYUFFQSxlQUFBLFdBQUEsR0FBQSxHQUFBLElBQ0EsTUFBQSxjQUNBLEtBQUEsWUFDQSxLQUFBLFFBRUEsS0FBQSxPQUFBLFlBQ0EsRUFBQSxFQUFBLFNBQUEsS0FBQSxPQUFBLFdBQUEsUUFBQSxTQUFBLEdBQ0EsRUFBQSxLQUFBLEdBQUEsRUFBQSxPQUFBLFVBQUEsS0FJQSxLQUFBLHFCQUVBLFVBQUEsV0FFQSxHQUFBLFFBQUEsS0FBQSxPQUFBLFVBQ0EsUUFDQSxLQUFBLHFCQUNBLFFBQUEsS0FBQSxJQUFBLHNCQUNBLEtBQUEsWUFHQSxLQUFBLGVBQ0EsTUFBQSxLQUFBLEtBQUEsYUFDQSxNQUFBLEtBQUEsSUFBQSxnQkFBQSxLQUNBLEtBQUEsU0FHQSxLQUFBLFVBQ0EsTUFBQSxLQUFBLEtBQUEsUUFDQSxNQUFBLEtBQUEsSUFBQSxnQkFBQSxLQUNBLEtBQUEsU0FHQSxLQUFBLGVBQ0EsTUFBQSxLQUFBLElBQUEsZ0NBQ0EsS0FBQSxhQUNBLFdBQUEsRUFDQSxXQUFBLEtBQUEsSUFBQSxVQUNBLFNBQ0EsU0FFQSxLQUFBLGVBQ0EsTUFBQSxLQUFBLEtBQUEsYUFDQSxNQUFBLEtBQUEsSUFBQSxnQkFBQSxLQUNBLEtBQUEsU0FHQSxLQUFBLFVBQ0EsTUFBQSxLQUFBLEtBQUEsUUFDQSxNQUFBLEtBQUEsSUFBQSxnQkFBQSxLQUNBLEtBQUEsV0FJQSxLQUFBLDZCQUNBLFFBQUEsS0FBQSxJQUFBLHVCQUNBLEtBQUEsWUFHQSxLQUFBLG9CQUNBLE1BQUEsS0FBQSxLQUFBLGtCQUNBLE1BQUEsS0FBQSxJQUFBLGFBQUEsS0FDQSxLQUFBLFNBR0EsS0FBQSxtQkFDQSxNQUFBLEtBQUEsS0FBQSxpQkFDQSxNQUFBLEtBQUEsSUFBQSxZQUFBLEtBQ0EsS0FBQSxTQUdBLEtBQUEsa0JBQ0EsTUFBQSxLQUFBLEtBQUEsZ0JBQ0EsTUFBQSxLQUFBLElBQUEsV0FDQSxLQUFBLFNBR0EsS0FBQSxnQkFDQSxNQUFBLEtBQUEsS0FBQSxjQUNBLE1BQUEsS0FBQSxJQUFBLFNBQUEsS0FDQSxLQUFBLFVBR0EsS0FBQSxnQkFDQSxNQUFBLEtBQUEsS0FBQSxjQUNBLE1BQUEsS0FBQSxJQUFBLFNBQ0EsS0FBQSxTQUdBLEtBQUEsZUFDQSxNQUFBLEtBQUEsS0FBQSxhQUNBLE1BQUEsS0FBQSxJQUFBLGdCQUFBLEtBQ0EsS0FBQSxTQUdBLEtBQUEsa0JBQ0EsTUFBQSxLQUFBLEtBQUEsZ0JBQ0EsTUFBQSxLQUFBLElBQUEsV0FDQSxLQUFBLFNBR0EsS0FBQSxxQkFDQSxNQUFBLEtBQUEsS0FBQSxtQkFDQSxNQUFBLEtBQUEsSUFBQSxjQUFBLEtBQ0EsS0FBQSxTQUdBLEtBQUEscUJBQ0EsTUFBQSxLQUFBLEtBQUEsbUJBQ0EsTUFBQSxLQUFBLElBQUEsY0FBQSxLQUNBLEtBQUEsU0FHQSxLQUFBLGtCQUNBLE1BQUEsS0FBQSxLQUFBLG1CQUNBLE1BQUEsS0FBQSxJQUFBLFdBQUEsS0FDQSxLQUFBLFNBR0EsS0FBQSxpQkFDQSxNQUFBLEtBQUEsS0FBQSxlQUNBLE1BQUEsS0FBQSxJQUFBLDBCQUNBLEtBQUEsU0FTQSxLQUFBLDJCQUNBLFFBQUEsS0FBQSxJQUFBLHFCQUNBLEtBQUEsWUFHQSxLQUFBLGtCQUNBLE1BQUEsS0FBQSxPQUFBLE1BQUEsS0FBQSxLQUFBLFVBQ0EsTUFBQSxLQUFBLElBQUEsYUFBQSxLQUNBLEtBQUEsU0FHQSxLQUFBLGlCQUNBLE1BQUEsS0FBQSxPQUFBLE1BQUEsS0FBQSxLQUFBLFNBQ0EsTUFBQSxLQUFBLElBQUEsWUFBQSxLQUNBLEtBQUEsU0FHQSxLQUFBLGNBQ0EsTUFBQSxLQUFBLE9BQUEsTUFBQSxLQUFBLEtBQUEsU0FDQSxNQUFBLEtBQUEsSUFBQSxTQUFBLEtBQ0EsS0FBQSxVQUdBLEtBQUEsY0FDQSxNQUFBLEtBQUEsT0FBQSxNQUFBLEtBQUEsUUFBQSxLQUNBLE1BQUEsS0FBQSxJQUFBLFNBQUEsS0FDQSxLQUFBLFNBR0EsS0FBQSxtQkFDQSxNQUFBLEtBQUEsT0FBQSxNQUFBLEtBQUEsUUFBQSxXQUNBLE1BQUEsS0FBQSxJQUFBLGNBQ0EsS0FBQSxTQUdBLEtBQUEsc0JBQ0EsTUFBQSxLQUFBLE9BQUEsTUFBQSxLQUFBLFFBQUEsUUFDQSxNQUFBLEtBQUEsSUFBQSxXQUNBLEtBQUEsU0FHQSxLQUFBLG1CQUNBLE1BQUEsS0FBQSxPQUFBLE1BQUEsS0FBQSxRQUFBLFdBQ0EsTUFBQSxLQUFBLElBQUEsY0FDQSxLQUFBLFNBR0EsS0FBQSxtQkFDQSxNQUFBLEtBQUEsT0FBQSxNQUFBLEtBQUEsUUFBQSxXQUNBLE1BQUEsS0FBQSxJQUFBLGNBQ0EsS0FBQSxTQUdBLEtBQUEsbUNBQ0EsUUFBQSxLQUFBLElBQUEsNkJBQ0EsS0FBQSxZQUdBLEtBQUEsaUJBQ0EsTUFBQSxLQUFBLEtBQUEsZUFDQSxNQUFBLEtBQUEsSUFBQSxtREFBQSxLQUNBLEtBQUEsU0FHQSxLQUFBLHlCQUNBLE1BQUEsS0FBQSxLQUFBLHVCQUNBLE1BQUEsS0FBQSxJQUFBLG1EQUFBLEtBQ0EsS0FBQSxTQWVBLEtBQUEsZ0JBQ0EsUUFBQSxJQUNBLEtBQUEsWUFHQSxLQUFBLGlCQUNBLE1BQUEsS0FBQSxLQUFBLGVBQ0EsTUFBQSxLQUFBLElBQUEsbURBQUEsS0FDQSxLQUFBLFNBR0EsS0FBQSxjQUNBLE1BQUEsS0FBQSxLQUFBLFlBQ0EsTUFBQSxLQUFBLElBQUEsZUFBQSxLQUNBLEtBQUEsS0FBQSxJQUFBLG1CQUNBLEtBQUEsU0FHQSxLQUFBLG1DQUNBLE1BQUEsS0FBQSxLQUFBLGlDQUNBLE1BQUEsS0FBQSxJQUFBLG9DQUFBLE1BQ0EsS0FBQSxLQUFBLElBQUEsbUJBQ0EsS0FBQSxRQUdBLE1BQUEsT0FBQSxXQUlBLEtBQUEsV0FDQSxLQUFBLGlCQUNBLEtBQUEsT0FBQSxLQUFBLEtBQUEsWUFFQSxNQUFBLFNBQUEsR0FDQSxLQUFBLFVBQ0EsSUFDQSxHQUNBLE9BQUEsV0FHQSxLQUFBLFFBQUEsSUFFQSxLQUFBLE9BQUEsS0FBQSxLQUFBLFlBRUEsd0JBQUEsV0FBQSxHQUFBLEdBQUEsSUFBQSxRQUFBLEVBQUEsRUFBQSxTQUFBLEVBQUEsUUFBQSxLQUFBLFFBQUEsS0FBQSxHQUFBLEdBQUEsRUFBQSxDQUFBLE9BQUEsR0FBQSxRQUFBLEtBQUEsU0FBQSxHQUFBLE9BQUEsT0FBQSxFQUFBLEtBQUEsRUFBQSxNQUFBLElBQUEsR0FBQSxNQUNBLEdBQUEsWUFBQSxFQURBLEVBQUEsS0FBQSxFQUFBLEVBQUEsS0FBQSx5QkFJQSxhQUFBLEVBQUEsU0FBQSxhQUNBLFFBQUEsRUFBQSxTQUFBLFFBQ0EsYUFBQSxFQUFBLFNBQUEsYUFDQSxrQkFBQSxFQUFBLFNBQUEsa0JBQ0EsaUJBQUEsRUFBQSxTQUFBLGlCQUNBLGdCQUFBLEVBQUEsU0FBQSxnQkFDQSxjQUFBLEVBQUEsU0FBQSxjQUNBLGNBQUEsRUFBQSxTQUFBLGNBQ0EsYUFBQSxFQUFBLFNBQUEsYUFDQSxnQkFBQSxFQUFBLFNBQUEsZ0JBQ0EsbUJBQUEsRUFBQSxTQUFBLG1CQUNBLG1CQUFBLEVBQUEsU0FBQSxtQkFDQSxnQkFBQSxFQUFBLFNBQUEsZ0JBQ0EsZUFBQSxFQUFBLFNBQUEsZUFFQSxnQkFBQSxFQUFBLFNBQUEsZ0JBQ0EsZUFBQSxFQUFBLFNBQUEsZUFDQSxZQUFBLEVBQUEsU0FBQSxZQUNBLFlBQUEsRUFBQSxTQUFBLFlBQ0EsaUJBQUEsRUFBQSxTQUFBLGlCQUNBLG9CQUFBLEVBQUEsU0FBQSxvQkFDQSxpQkFBQSxFQUFBLFNBQUEsaUJBQ0EsaUJBQUEsRUFBQSxTQUFBLGlCQUNBLGVBQUEsRUFBQSxTQUFBLGVBQ0EsdUJBQUEsRUFBQSxTQUFBLHVCQUdBLGVBQUEsRUFBQSxTQUFBLGVBQ0EsWUFBQSxFQUFBLFNBQUEsWUFDQSxpQ0FBQSxFQUFBLFNBQUEsa0NBakNBLEtBQUEsR0FBQSxHQUdBLEVBQUEsRUFBQSxLQUhBLE1BQUEsRUFBQSxLQUFBLENBQUEsRUFBQSxLQUFBLENBQUEsT0FBQSxNQXFDQSxHQUFBLFdBQUEsRUFBQSxPQUFBLE9BQ0EsRUFBQSxZQUFBLEVBdENBLEVBQUEsT0FBQSxTQUFBLEtBQUEsR0FBQSxHQUFBLE1BQUEsRUFBQSxLQUFBLENBQUEsRUFBQSxLQUFBLEVBQUEsT0FBQSxNQTJDQSxHQUFBLFlBQUEsRUEzQ0EsRUFBQSxPQUFBLFNBQUEsS0FBQSxJQStDQSxFQUFBLEVBQUEsT0FBQSxxQkFDQSxFQUFBLEVBQUEsT0FBQSxxQkFBQSxLQUdBLEVBQUEsT0FBQSxPQUFBLDBCQUFBLEdBR0EsRUFBQSxPQUFBLFNBQUEsMEJBQUEsR0FFQSxFQUFBLFlBQUEsRUFDQSxFQUFBLE9BQUEsT0FBQSxXQXpEQSxLQUFBLElBQUEsSUFBQSxNQUFBLE1BQUEsR0FBQSxTQUFBLEVBQUEsVUE0REEsT0FDQSxVQUFBLFdBQ0EsS0FBQSxzVkE5V0EsaUJBQUEsT0FBQSxXQUFBLEdBQUEsR0FBQSxLQUFBLEVBQUEsRUFBQSxlQUFBLEVBQUEsRUFBQSxNQUFBLElBQUEsQ0FBQSxPQUFBLEdBQUEsU0FBQSxPQUFBLEtBQUEsRUFBQSxVQUFBLGtCQUFBLEVBQUEsT0FBQSxPQUFBLFlBQUEsS0FBQSxFQUFBLG1CQUFBLE9BQUEsTUFBQSxRQUFBLEVBQUEsVUFBQSxFQUFBLElBQUEsMkJBQUEsRUFBQSxJQUFBLDZCQUFBLElBQUEsTUFBQSxFQUFBLFNBQUEsRUFBQSxVQUFBLE9BQUEsT0FBQSxFQUFBLE9BQUEsWUFBQSxFQUFBLFNBQUEsY0FBQSxFQUFBLGNBQUEsRUFBQSxPQUFBLE9BQUEsS0FBQSxXQUFBLEtBQUEsWUFBQSxFQUFBLFVBQUEsWUFBQSxrQkFBQSxPQUFBLEtBQUEsVUFBQSxJQUFBLE1BQUEsRUFBQSxTQUFBLEVBQUEsR0FBQSxFQUFBLEdBQUEsRUFBQSxJQUFBLGNBQUEsRUFBQSxHQUFBLEtBQUEsUUFBQSxFQUFBLFVBQUEsRUFBQSxVQUFBLFlBQUEsaUJBQUEsT0FBQSxTQUFBLEVBQUEsV0FBQSxLQUFBLFVBQUEsSUFBQSxNQUFBLEVBQUEsMkJBQUEsRUFBQSxHQUFBLEVBQUEsR0FBQSxFQUFBLElBQUEsK0JBQUEsRUFBQSxVQUFBLElBQUEsSUFBQSxpQkFBQTs7O3FGQ0FBLEdBQUEsTUFBQSxRQUFBLHlDQU1BLE9BQUEsUUFBSSxVQUFVLHVCQUNaLFNBQVU7OztxRkNQWixHQUFBLE1BQUEsUUFBQSx5Q0FNQSxPQUFBLFFBQUksVUFBVSxzQkFDWixTQUFVLDhCQUNWLE9BQVEsaUJBQ1IsVUFDRSxnQkFEUSxXQUVOLE1BQU8sTUFBSyxPQUFPOzs7cUZDWHpCLEdBQUEsTUFBQSxRQUFBLHlDQU1BLE9BQUEsUUFBSSxVQUFVLGlCQUNaLFNBQVUseUJBQ1YsS0FBTSxXQUNKLE9BQ0UsV0FBWSxLQUdoQixVQUNFLGNBRFEsV0FFTixNQUFPLE1BQUssT0FBTyxNQUFNLFVBQVUsZUFFckMsTUFKUSxXQUtOLE1BQU8sTUFBSyxPQUFPLE1BQU0sVUFBVSxPQUVyQyxZQVBRLFdBUU4sTUFBTyxNQUFLLE9BQU8sTUFBTSxVQUFVLGFBRXJDLFNBVlEsV0FXTixNQUFPLE1BQUssT0FBTyxNQUFNLFVBQVUsV0FHdkMsT0FDRSxXQUFZLFNBQVUsR0FDcEIsS0FBSyxPQUFPLE9BQU8seUJBQTBCLEtBQUssY0FHdEQsUUFBUyxXQUVQLEdBQU0sR0FBWSxTQUFTLGVBQWUsZUFDdkMsSUFDRCxFQUFVOzs7aUdDckJoQixLQUFBLHFCQUNBLE9BQUEsVUFBQSxZQUFBLGdCQUNBLEtBQUEsV0FDQSxPQUNBLFVBQUEsT0FHQSxVQUNBLEtBQUEsV0FBQSxHQUFBLEdBQUEsSUFFQSxJQUFBLEtBQUEsT0FBQSxTQUNBLE1BQUEsTUFBQSxPQUFBLFFBR0EsSUFBQSxHQUFBLEtBQUEsT0FBQSxNQUFBLE1BQUEsT0FBQSxTQUFBLEdBQUEsTUFBQSxHQUFBLEtBQUEsRUFBQSxPQUFBLFNBQUEsRUFPQSxPQUxBLEtBQ0EsS0FBQSxVQUFBLEVBQUEsUUFDQSxLQUFBLE9BQUEsU0FBQSxhQUFBLEtBQUEsWUFHQSxPQUVBLFFBQUEsV0FBQSxHQUFBLEdBQUEsSUFFQSxPQUFBLE1BQUEsT0FBQSxZQUNBLEtBQUEsT0FBQSxZQUVBLEtBQUEsT0FBQSxNQUFBLFVBQUEsT0FBQSxTQUFBLEdBQUEsTUFBQSxHQUFBLEtBQUEsRUFBQSxZQUFBLFNBS0EsUUFBQSxXQUdBLEdBQUEsS0FBQSxPQUFBLFNBQ0EsTUFBQSxNQUFBLE9BQUEsUUFHQSxNQUFBLE9BQUEsUUFDQSxLQUFBLE9BQUEsU0FBQSxVQUFBLEtBQUEsT0FBQSxTQUdBLE9BQ0EsT0FBQSxTQUFBLEdBQ0EsR0FDQSxLQUFBLE9BQUEsU0FBQSxVQUFBLHdVQTdEQSxpQkFBQSxPQUFBLFdBQUEsR0FBQSxHQUFBLEtBQUEsRUFBQSxFQUFBLGVBQUEsRUFBQSxFQUFBLE1BQUEsSUFBQSxDQUFBLE9BQUEsR0FBQSxPQUFBLEVBQUEsS0FBQSxFQUFBLFVBQUEsRUFBQSxHQUFBLEVBQUEsR0FBQSxFQUFBLElBQUEsY0FBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLEdBQUEsRUFBQSxLQUFBLFdBQUEsSUFBQSxFQUFBLEdBQUEsRUFBQSxLQUFBLFdBQUEsRUFBQSxNQUFBLEVBQUEsR0FBQSxLQUFBLEVBQUEsVUFBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsSUFBQSxvQkFBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLEdBQUEsRUFBQSxRQUFBLE9BQUEsRUFBQSxNQUFBLEVBQUEsR0FBQSxLQUFBLEVBQUEsVUFBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsSUFBQSxlQUFBLEVBQUEsR0FBQSxLQUFBLEVBQUEsR0FBQSxFQUFBLFFBQUEsU0FBQSxLQUFBLEVBQUEsR0FBQSxFQUFBLFFBQUEsWUFBQSxJQUFBLEVBQUEsR0FBQSxFQUFBLFFBQUEsWUFBQSxLQUFBLEVBQUEsR0FBQSxFQUFBLFFBQUEsU0FBQSxFQUFBLFFBQUEsUUFBQSxPQUFBLEVBQUEsTUFBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLEtBQUEsTUFBQSxFQUFBLFFBQUEsRUFBQSxVQUFBLEVBQUEsR0FBQSxFQUFBLEdBQUEsRUFBQSxJQUFBLGFBQUEsRUFBQSxHQUFBLEtBQUEsRUFBQSxHQUFBLEVBQUEsS0FBQSxRQUFBLEVBQUEsUUFBQSxFQUFBLEtBQUEsRUFBQSxHQUFBLEtBQUEsRUFBQSxVQUFBLEVBQUEsR0FBQSxFQUFBLEdBQUEsRUFBQSxJQUFBLGFBQUEsRUFBQSxHQUFBLEtBQUEsRUFBQSxHQUFBLEVBQUEsS0FBQSxVQUFBLGFBQUEsaUJBQUE7OztpR0NRQSxLQUFBLGlCQUNBLE9BQUEsUUFBQSxlQUFBLGVBQUEsZUFDQSxLQUFBLFdBQ0EsT0FDQSxlQUFBLEVBQ0EsUUFBQSxJQUNBLGVBQUEsSUFDQSxTQUFBLE1BR0EsVUFDQSxjQUNBLElBQUEsV0FDQSxHQUFBLEdBQUEsS0FBQSxLQU9BLE9BTEEsUUFBQSxLQUFBLFFBQ0EsS0FBQSxNQUFBLFFBQUEsR0FDQSxFQUFBLEdBR0EsS0FBQSxjQUNBLEtBQUEscUJBQUEsR0FBQSxJQUdBLEVBQUEsRUFBQSxXQUVBLEVBQUEsV0FBQSxFQUFBLFFBQUEsS0FBQSxNQUFBLFFBQUEsR0FHQSxNQUFBLEtBQ0EsRUFBQSxHQUdBLEtBQUEsTUFBQSxRQUFBLFdBQUEsSUFFQSxLQUFBLHFCQUFBLEdBQUEsS0FHQSxJQUFBLFNBQUEsR0FFQSxHQUFBLEdBQUEsR0FBQSxRQUFBLGFBQUEsS0FDQSxFQUFBLEVBQUEsUUFBQSxFQUFBLEdBSUEsTUFBQSxNQUFBLFFBQUEsTUFJQSxTQUNBLHFCQUFBLFNBQUEsRUFBQSxHQUNBLEdBQUEsR0FBQSxFQUFBLFdBRUEsRUFBQSxHQUFBLFFBQUEsYUFBQSxJQVFBLE9BUEEsR0FBQSxFQUFBLFFBQUEsRUFBQSxJQUVBLE1BQUEsS0FBQSxVQUNBLEVBQUEsRUFBQSxRQUFBLEtBQUEsTUFJQSxHQUFBLElBQUEsRUFHQSxHQUFBLEVBQUEsSUFBQSxLQUFBLFNBQUEsSUFGQSxLQUtBLFFBQUEsV0FDQSxLQUFBLFFBQUEsS0FBQSxhQUFBLEtBQUEsUUFDQSxLQUFBLGVBQUEsTUFBQSxLQUFBLFFBQUEsSUFBQSx3VUE5RUEsaUJBQUEsT0FBQSxXQUFBLEdBQUEsR0FBQSxLQUFBLEVBQUEsRUFBQSxlQUFBLEVBQUEsRUFBQSxNQUFBLElBQUEsQ0FBQSxPQUFBLEdBQUEsUUFBQSxFQUFBLFlBQUEsRUFBQSxRQUFBLEVBQUEsR0FBQSxFQUFBLEdBQUEsRUFBQSxpQkFBQSxFQUFBLFNBQUEsYUFBQSxLQUFBLFFBQUEsUUFBQSxVQUFBLE1BQUEsRUFBQSxhQUFBLFdBQUEsaUJBQUEsTUFBQSxFQUFBLFdBQUEsT0FBQSxLQUFBLFFBQUEsVUFBQSxNQUFBLEVBQUEsY0FBQSxJQUFBLEtBQUEsU0FBQSxHQUFBLEVBQUEsZUFBQSxHQUFBLE1BQUEsU0FBQSxHQUFBLEVBQUEsZUFBQSxHQUFBLFFBQUEsU0FBQSxHQUFBLElBQUEsRUFBQSxLQUFBLFFBQUEsUUFBQSxFQUFBLEdBQUEsRUFBQSxRQUFBLFFBQUEsR0FBQSxFQUFBLElBQUEsU0FBQSxNQUFBLEtBQUEsR0FBQSxrQkFBQSxNQUFBLFNBQUEsR0FBQSxFQUFBLE9BQUEsWUFBQSxFQUFBLGFBQUEsRUFBQSxPQUFBLGNBQUEsaUJBQUE7OztrSUN5Q0EsSUFBQSxHQUFBLFFBQUEsaUNBQ0EsRUFBQSxRQUFBLGdEQUdBLFlBQ0EsbUJBQUEsRUFBQSxRQUNBLGlCQUFBLEVBQUEsU0FFQSxLQUFBLGFBQ0EsS0FBQSxXQUNBLE9BQ0EsU0FDQSxhQUNBLFVBQ0EsS0FBQSxHQUNBLE9BQUEseUJBSUEsT0FDQSxTQUFBLE9BQ0EsY0FBQSxPQUNBLFNBQUEsU0FDQSxPQUFBLE1BQ0EsS0FBQSxNQUNBLFVBQUEsUUFDQSxXQUFBLE9BQ0EsT0FBQSxPQUNBLFVBQ0EsU0FBQSxFQUNBLEtBQUEsVUFHQSxVQUNBLFVBQUEsV0FDQSxPQUFBLEtBQUEsYUFJQSxLQUFBLE1BQUEsUUFFQSxTQUFBLFdBQUEsR0FBQSxHQUFBLEtBQ0EsRUFBQSxDQVNBLE9BUkEsTUFBQSxNQUFBLFFBQUEsU0FBQSxHQUNBLEdBQUEsR0FBQSxFQUFBLEVBQUEsZ0JBQUEsRUFDQSxHQUFBLEVBQUEsRUFBQSxXQUFBLEdBQUEsQ0FDQSxpQkFBQSxLQUNBLEdBQUEsS0FJQSxJQUdBLFNBQ0Esa0JBQUEsU0FBQSxFQUFBLEdBQ0EsR0FBQSxHQUFBLEtBQUEsVUFBQSxFQUVBLE9BQUEsSUFBQSxFQUFBLElBQUEsRUFBQSxHQUFBLGNBRUEsUUFBQSxXQUNBLEdBQUEsS0FDQSxNQUFBLE9BQUEsUUFBQSxTQUFBLEdBQ0EsRUFBQSxFQUFBLE1BQUEsT0FHQSxLQUFBLE1BQUEsS0FBQSxJQUVBLFdBQUEsU0FBQSxHQUNBLEtBQUEsTUFBQSxPQUFBLEVBQUEsR0FDQSxrQkFBQSxNQUFBLFVBQ0EsS0FBQSxTQUFBLEtBQUEsUUFHQSxPQUFBLFNBQUEsR0FDQSxrQkFBQSxNQUFBLFVBQ0EsS0FBQSxTQUFBLEtBQUEsU0FJQSxRQUFBLFdBQ0EsS0FBQSxNQUFBLEtBQUEsVUFFQSxPQUNBLEtBQUEsV0FDQSxLQUFBLE1BQUEsS0FBQSxVQUVBLE9BQUEsV0FDQSxLQUFBLFVBQUEsS0FBQSxnVkFqSUEsaUJBQUEsT0FBQSxXQUFBLEdBQUEsR0FBQSxLQUFBLEVBQUEsRUFBQSxlQUFBLEVBQUEsRUFBQSxNQUFBLElBQUEsQ0FBQSxPQUFBLEdBQUEsT0FBQSxZQUFBLGlCQUFBLEVBQUEsVUFBQSxFQUFBLFNBQUEsWUFBQSw4QkFBQSxFQUFBLFNBQUEsRUFBQSxHQUFBLEVBQUEsT0FBQSxTQUFBLEdBQUEsTUFBQSxHQUFBLE1BQUEsSUFBQSxFQUFBLE9BQUEsRUFBQSxHQUFBLGFBQUEsRUFBQSxHQUFBLEVBQUEsT0FBQSxnQkFBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLFNBQUEsRUFBQSxNQUFBLEVBQUEsR0FBQSxPQUFBLEVBQUEsTUFBQSxHQUFBLEVBQUEsR0FBQSxLQUFBLEVBQUEsR0FBQSxFQUFBLE1BQUEsU0FBQSxFQUFBLEdBQUEsTUFBQSxHQUFBLE1BQUEsSUFBQSxJQUFBLEVBQUEsR0FBQSxFQUFBLE9BQUEsU0FBQSxHQUFBLE1BQUEsR0FBQSxNQUFBLElBQUEsRUFBQSxLQUFBLFlBQUEscUJBQUEsRUFBQSxHQUFBLEVBQUEsa0JBQUEsRUFBQSxFQUFBLE1BQUEsU0FBQSxFQUFBLEdBQUEsTUFBQSxHQUFBLFFBQUEsSUFBQSxFQUFBLFlBQUEsd0JBQUEsRUFBQSxHQUFBLGVBQUEsRUFBQSxHQUFBLElBQUEsRUFBQSxVQUFBLEVBQUEsR0FBQSxLQUFBLEVBQUEsU0FBQSxFQUFBLE9BQUEsV0FBQSxFQUFBLEtBQUEsRUFBQSxrQkFBQSxPQUFBLGNBQUEsc0JBQUEsZUFBQSxLQUFBLE9BQUEsTUFBQSxFQUFBLEVBQUEsTUFBQSxTQUFBLFNBQUEsR0FBQSxFQUFBLEtBQUEsRUFBQSxFQUFBLEtBQUEsSUFBQSxXQUFBLHNCQUFBLEVBQUEsS0FBQSxFQUFBLEdBQUEsS0FBQSxhQUFBLEVBQUEsS0FBQSxFQUFBLG9CQUFBLE9BQUEsY0FBQSxzQkFBQSxlQUFBLEtBQUEsT0FBQSxNQUFBLEVBQUEsRUFBQSxNQUFBLFNBQUEsU0FBQSxHQUFBLEVBQUEsS0FBQSxFQUFBLEVBQUEsS0FBQSxJQUFBLFdBQUEsc0JBQUEsRUFBQSxLQUFBLEVBQUEsR0FBQSxLQUFBLFNBQUEsRUFBQSxLQUFBLEVBQUEsU0FBQSxhQUFBLEtBQUEsUUFBQSxRQUFBLFVBQUEsTUFBQSxFQUFBLEVBQUEsTUFBQSxXQUFBLHFCQUFBLFlBQUEsc0JBQUEsT0FBQSxZQUFBLEVBQUEsYUFBQSxVQUFBLE1BQUEsRUFBQSxFQUFBLE9BQUEsSUFBQSxRQUFBLFNBQUEsR0FBQSxJQUFBLEVBQUEsS0FBQSxRQUFBLFFBQUEsRUFBQSxHQUFBLEVBQUEsUUFBQSxRQUFBLEdBQUEsRUFBQSxJQUFBLFNBQUEsTUFBQSxLQUFBLEdBQUEsa0JBQUEsTUFBQSxTQUFBLEdBQUEsRUFBQSxPQUFBLFdBQUEsRUFBQSxLQUFBLEVBQUEsRUFBQSxLQUFBLEVBQUEsT0FBQSxXQUFBLEVBQUEsTUFBQSxHQUFBLEVBQUEsS0FBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLFNBQUEsRUFBQSxLQUFBLEVBQUEsT0FBQSxXQUFBLEVBQUEsS0FBQSxFQUFBLGtCQUFBLE9BQUEsZ0JBQUEsRUFBQSxjQUFBLHNCQUFBLGVBQUEsS0FBQSxPQUFBLE1BQUEsRUFBQSxFQUFBLE1BQUEsU0FBQSxTQUFBLEdBQUEsRUFBQSxLQUFBLEVBQUEsRUFBQSxLQUFBLElBQUEsV0FBQSxzQkFBQSxFQUFBLEtBQUEsRUFBQSxHQUFBLEtBQUEsYUFBQSxFQUFBLEtBQUEsRUFBQSxvQkFBQSxPQUFBLGdCQUFBLEVBQUEsY0FBQSxzQkFBQSxlQUFBLEtBQUEsT0FBQSxNQUFBLEVBQUEsRUFBQSxNQUFBLFNBQUEsU0FBQSxHQUFBLEVBQUEsS0FBQSxFQUFBLEVBQUEsS0FBQSxJQUFBLFdBQUEsc0JBQUEsRUFBQSxLQUFBLEVBQUEsR0FBQSxLQUFBLFNBQUEsRUFBQSxLQUFBLEVBQUEsUUFBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsRUFBQSxVQUFBLEVBQUEsTUFBQSxJQUFBLEtBQUEsRUFBQSxHQUFBLEtBQUEsRUFBQSxTQUFBLEVBQUEsTUFBQSxZQUFBLHNFQUFBLEVBQUEsVUFBQSxZQUFBLDRDQUFBLElBQUEsTUFBQSxTQUFBLEdBQUEsTUFBQSxHQUFBLFdBQUEsT0FBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsSUFBQSxnQkFBQSxFQUFBLE1BQUEsS0FBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLFNBQUEsRUFBQSxNQUFBLEVBQUEsR0FBQSxFQUFBLE9BQUEsU0FBQSxHQUFBLE1BQUEsR0FBQSxNQUFBLElBQUEsRUFBQSxPQUFBLEVBQUEsV0FBQSxFQUFBLEtBQUEsRUFBQSxPQUFBLEVBQUEsR0FBQSxXQUFBLEVBQUEsb0JBQUEsT0FBQSxnQkFBQSxFQUFBLE1BQUEsRUFBQSxTQUFBLGVBQUEsUUFBQSxHQUFBLEVBQUEsT0FBQSxFQUFBLEdBQUEsV0FBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLFNBQUEsRUFBQSxNQUFBLEVBQUEsR0FBQSxPQUFBLEVBQUEsTUFBQSxHQUFBLEVBQUEsTUFBQSxHQUFBLEVBQUEsS0FBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLFNBQUEsRUFBQSxVQUFBLFlBQUEsMENBQUEsSUFBQSxNQUFBLFNBQUEsR0FBQSxNQUFBLEdBQUEsY0FBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsWUFBQSxFQUFBLElBQUEsY0FBQSxFQUFBLFFBQUEsaUJBQUE7OztpR0NtQkEsS0FBQSxRQUNBLEtBQUEsV0FDQSxPQUNBLGVBR0EsT0FBQSxXQUFBLFlBQUEsb0JBQ0EsVUFDQSxhQUFBLFdBQ0EsUUFBQSxLQUFBLGdCQUFBLEtBQUEsZ0JBQUEsS0FBQSxVQUFBLFNBR0EsU0FDQSxXQUFBLFNBQUEsR0FDQSxLQUFBLFVBQUEsT0FBQSxFQUFBLEdBQ0EsS0FBQSxTQUFBLEtBQUEsWUFFQSxlQUFBLFdBQ0EsS0FBQSxNQUFBLFVBQUEsU0FHQSxVQUFBLFNBQUEsR0FDQSxHQUFBLEdBQUEsc0dBQ0EsU0FBQSxFQUFBLE9BQUEsTUFBQSxJQUVBLGFBQUEsU0FBQSxHQUdBLElBQUEsR0FIQSxHQUFBLEtBQ0EsRUFBQSxFQUFBLE9BQUEsT0FBQSxFQUFBLGFBQUEsVUFFQSxFQUFBLEVBQUEsRUFBQSxFQUFBLE9BQUEsS0FIQSxTQUFBLEdBSUEsR0FBQSxHQUFBLEVBQUEsR0FDQSxFQUFBLEdBQUEsV0FFQSxHQUFBLGlCQUFBLE9BQUEsWUFDQSxFQUFBLGNBQUEsRUFBQSxVQUFBLEVBQUEsVUFDQSxFQUFBLFVBQUEsTUFDQSxLQUFBLEVBQUEsT0FDQSxLQUFBLEVBQ0EsS0FBQSxFQUFBLEtBQ0EsS0FBQSxFQUFBLEtBQ0EsS0FBQSxFQUFBLE9BR0Esa0JBQUEsR0FBQSxVQUNBLEVBQUEsU0FBQSxFQUFBLGNBR0EsR0FFQSxFQUFBLGNBQUEsSUFwQkEsd1VBL0NBLGlCQUFBLE9BQUEsV0FBQSxHQUFBLEdBQUEsS0FBQSxFQUFBLEVBQUEsZUFBQSxFQUFBLEVBQUEsTUFBQSxJQUFBLENBQUEsT0FBQSxHQUFBLE9BQUEsWUFBQSxXQUFBLEVBQUEsVUFBQSxZQUFBLGdDQUFBLE9BQUEsU0FBQSxFQUFBLGNBQUEsSUFBQSxNQUFBLEVBQUEsa0JBQUEsRUFBQSxHQUFBLEVBQUEsR0FBQSxFQUFBLElBQUEsZ0JBQUEsRUFBQSxHQUFBLEtBQUEsRUFBQSxTQUFBLElBQUEsWUFBQSxZQUFBLHFCQUFBLE9BQUEsU0FBQSxFQUFBLGFBQUEsS0FBQSxPQUFBLFdBQUEsRUFBQSxVQUFBLElBQUEsT0FBQSxFQUFBLGdCQUFBLEVBQUEsR0FBQSxLQUFBLEVBQUEsVUFBQSxPQUFBLEVBQUEsT0FBQSxZQUFBLGtCQUFBLEVBQUEsTUFBQSxZQUFBLHdCQUFBLEVBQUEsR0FBQSxFQUFBLEdBQUEsRUFBQSxJQUFBLGtCQUFBLEVBQUEsR0FBQSxLQUFBLEVBQUEsU0FBQSxZQUFBLFNBQUEsRUFBQSxHQUFBLEVBQUEsVUFBQSxTQUFBLEVBQUEsR0FBQSxNQUFBLEdBQUEsTUFBQSxJQUFBLElBQUEsRUFBQSxNQUFBLEVBQUEsR0FBQSxFQUFBLEdBQUEsRUFBQSxTQUFBLEVBQUEsR0FBQSxLQUFBLEVBQUEsTUFBQSxZQUFBLDZCQUFBLEVBQUEsVUFBQSxZQUFBLHVDQUFBLElBQUEsTUFBQSxTQUFBLEdBQUEsTUFBQSxHQUFBLFdBQUEsT0FBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsSUFBQSx3QkFBQSxLQUFBLEVBQUEsUUFBQSxpQkFBQTs7OzRFQ3FFQSxRQUFBLEtBQ0EsR0FBQSxHQUFBLFdBQ0EsT0FBQSxPQUFBLEVBQUEsS0FBQSxVQUFBLEdBQUEsU0FBQSxJQUFBLFVBQUEsR0FHQSxPQUFBLEtBQUEsSUFBQSxJQUFBLElBQUEsSUFBQSxJQUFBLElBQUEsSUFBQSxJQUFBLElBQUEsSUFBQSwwREFWQSxJQUFBLEdBQUEsUUFBQSxnQ0FDQSxFQUFBLFFBQUEsdUJBQ0EsRUFBQSxRQUFBLDJCQUNBLEVBQUEsUUFBQSw4Q0FVQSxZQUNBLGtCQUFBLEVBQUEsUUFDQSxXQUFBLEVBQUEsUUFDQSxTQUFBLEVBQUEsUUFDQSxlQUFBLEVBQUEsU0FFQSxPQUFBLGFBQUEsV0FBQSxhQUFBLFlBQUEsV0FDQSxLQUFBLFdBQ0EsT0FDQSxZQUFBLElBQ0EsV0FBQSxLQUdBLFNBQ0EsS0FBQSxTQUFBLEdBQ0EsTUFBQSxTQUFBLEVBQUEsV0FFQSxlQUFBLFdBQ0EsS0FBQSxTQUFBLEtBQUEsVUFBQSxNQUFBLEtBQUEsVUFBQSxNQUNBLEtBQUEsV0FBQSxLQUFBLFVBQUEsTUFFQSxrQkFBQSxNQUFBLFVBQ0EsS0FBQSxTQUFBLEtBQUEsV0FHQSxZQUFBLFdBQ0Esa0JBQUEsTUFBQSxRQUNBLEtBQUEsT0FBQSxLQUFBLFlBR0EsY0FBQSxTQUFBLEdBQ0EsS0FBQSxVQUFBLE1BQUEsRUFDQSxLQUFBLG1CQUdBLFVBQ0EsU0FBQSxXQUNBLE1BQUEsTUFBQSxPQUFBLE1BQUEsVUFFQSxjQUFBLFdBQ0EsR0FBQSxHQUFBLEtBQUEsV0FBQSxLQUFBLFVBQUEsS0FFQSxPQUFBLElBQUEsRUFBQSxjQUVBLFdBQUEsV0FDQSxHQUFBLEdBQUEsS0FBQSxXQUFBLEtBQUEsVUFBQSxLQUVBLE9BQUEsSUFBQSxFQUFBLE9BQUEsTUFFQSxtQkFBQSxXQUNBLE1BQUEsYUFBQSxLQUFBLFVBQUEsTUFBQSxLQUFBLFlBQUEsSUFFQSxtQkFBQSxXQUVBLElBQUEsR0FBQSxHQUFBLEVBQUEsRUFBQSxLQUFBLFVBQUEsUUFBQSxPQUFBLElBQ0EsR0FBQSxLQUFBLFlBQUEsS0FBQSxVQUFBLFFBQUEsR0FBQSxNQUNBLE1BQUEsTUFBQSxVQUFBLFFBQUEsR0FBQSxJQUdBLE9BQUEsS0FHQSxRQUFBLFdBQ0EsS0FBQSxrQkFFQSxPQUVBLFVBQUEsV0FDQSxLQUFBLHNWQWpKQSxpQkFBQSxPQUFBLFdBQUEsR0FBQSxHQUFBLEtBQUEsRUFBQSxFQUFBLGVBQUEsRUFBQSxFQUFBLE1BQUEsSUFBQSxDQUFBLE9BQUEsR0FBQSxPQUFBLFlBQUEsaUJBQUEsV0FBQSxFQUFBLFVBQUEsTUFBQSxZQUFBLEVBQUEsVUFBQSxNQUFBLFNBQUEsRUFBQSxVQUFBLEtBQUEsRUFBQSxTQUFBLFlBQUEsc0JBQUEsT0FBQSxJQUFBLEVBQUEsZUFBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsVUFBQSxVQUFBLEVBQUEsS0FBQSxFQUFBLEdBQUEsS0FBQSxRQUFBLEVBQUEsVUFBQSxLQUFBLEVBQUEsU0FBQSxZQUFBLHdCQUFBLEVBQUEsR0FBQSxFQUFBLEdBQUEsRUFBQSxVQUFBLFVBQUEsRUFBQSxLQUFBLEVBQUEsR0FBQSxLQUFBLEVBQUEsVUFBQSxLQUFBLEVBQUEsT0FBQSxVQUFBLFVBQUEsRUFBQSxHQUFBLEVBQUEsS0FBQSxFQUFBLFVBQUEsVUFBQSxFQUFBLEtBQUEsRUFBQSxHQUFBLEtBQUEsRUFBQSxjQUFBLE9BQUEsRUFBQSxLQUFBLFlBQUEsd0JBQUEsRUFBQSxHQUFBLEVBQUEsY0FBQSxTQUFBLEVBQUEsR0FBQSxNQUFBLEdBQUEsUUFBQSxJQUFBLElBQUEsRUFBQSxHQUFBLEVBQUEsR0FBQSxJQUFBLEVBQUEsVUFBQSxHQUFBLEVBQUEsS0FBQSxFQUFBLEdBQUEsS0FBQSxTQUFBLEVBQUEsVUFBQSxLQUFBLEVBQUEsU0FBQSxhQUFBLEtBQUEsUUFBQSxRQUFBLFVBQUEsTUFBQSxFQUFBLFVBQUEsTUFBQSxXQUFBLG9CQUFBLFlBQUEscUJBQUEsT0FBQSxHQUFBLEVBQUEsWUFBQSxLQUFBLE9BQUEsWUFBQSxFQUFBLFVBQUEsYUFBQSxVQUFBLE1BQUEsRUFBQSxVQUFBLE9BQUEsSUFBQSxLQUFBLEVBQUEsWUFBQSxPQUFBLFNBQUEsR0FBQSxFQUFBLE9BQUEsV0FBQSxFQUFBLEtBQUEsRUFBQSxVQUFBLFFBQUEsRUFBQSxPQUFBLFFBQUEsRUFBQSxnQkFBQSxRQUFBLFNBQUEsR0FBQSxJQUFBLEVBQUEsS0FBQSxRQUFBLFFBQUEsRUFBQSxHQUFBLEVBQUEsUUFBQSxRQUFBLEdBQUEsRUFBQSxJQUFBLFNBQUEsTUFBQSxLQUFBLEdBQUEscUJBQUEsRUFBQSxLQUFBLEVBQUEsR0FBQSxLQUFBLGFBQUEsRUFBQSxVQUFBLEtBQUEsRUFBQSxZQUFBLGFBQUEsS0FBQSxRQUFBLFFBQUEsVUFBQSxNQUFBLEVBQUEsVUFBQSxNQUFBLFdBQUEsb0JBQUEsWUFBQSxxQkFBQSxPQUFBLEdBQUEsRUFBQSxZQUFBLFlBQUEsRUFBQSxVQUFBLGFBQUEsVUFBQSxNQUFBLEVBQUEsVUFBQSxPQUFBLElBQUEsT0FBQSxTQUFBLEdBQUEsRUFBQSxPQUFBLFdBQUEsRUFBQSxLQUFBLEVBQUEsVUFBQSxRQUFBLEVBQUEsT0FBQSxRQUFBLEVBQUEsbUJBQUEsRUFBQSxLQUFBLEVBQUEsR0FBQSxLQUFBLFNBQUEsRUFBQSxVQUFBLEtBQUEsRUFBQSxjQUFBLFlBQUEscUJBQUEsT0FBQSxTQUFBLEVBQUEsU0FBQSxPQUFBLGFBQUEsZ0JBQUEsRUFBQSxHQUFBLEVBQUEsYUFBQSxJQUFBLE1BQUEsRUFBQSxnQkFBQSxPQUFBLE1BQUEsRUFBQSxVQUFBLE1BQUEsU0FBQSxTQUFBLEdBQUEsRUFBQSxLQUFBLEVBQUEsVUFBQSxRQUFBLElBQUEsV0FBQSxxQkFBQSxFQUFBLEtBQUEsRUFBQSxHQUFBLEtBQUEsVUFBQSxFQUFBLFVBQUEsS0FBQSxFQUFBLFNBQUEsYUFBQSxLQUFBLFFBQUEsUUFBQSxVQUFBLE1BQUEsRUFBQSxVQUFBLE1BQUEsV0FBQSxvQkFBQSxZQUFBLHNCQUFBLE9BQUEsR0FBQSxFQUFBLFlBQUEsS0FBQSxTQUFBLFVBQUEsTUFBQSxFQUFBLFVBQUEsT0FBQSxJQUFBLE9BQUEsU0FBQSxHQUFBLEVBQUEsT0FBQSxXQUFBLEVBQUEsS0FBQSxFQUFBLFVBQUEsUUFBQSxFQUFBLE9BQUEsUUFBQSxFQUFBLG1CQUFBLEVBQUEsS0FBQSxFQUFBLEdBQUEsS0FBQSxzQkFBQSxFQUFBLFVBQUEsS0FBQSxFQUFBLG1CQUFBLE9BQUEsU0FBQSxFQUFBLGNBQUEsRUFBQSxTQUFBLGFBQUEsS0FBQSxRQUFBLFFBQUEsVUFBQSxNQUFBLEVBQUEsVUFBQSxNQUFBLFdBQUEsb0JBQUEsWUFBQSx5REFBQSxPQUFBLGFBQUEsZUFBQSxHQUFBLEVBQUEsWUFBQSxLQUFBLFlBQUEsVUFBQSxNQUFBLEVBQUEsVUFBQSxPQUFBLElBQUEsT0FBQSxTQUFBLEdBQUEsRUFBQSxPQUFBLFdBQUEsRUFBQSxLQUFBLEVBQUEsVUFBQSxRQUFBLEVBQUEsT0FBQSxRQUFBLEVBQUEscUJBQUEsRUFBQSxLQUFBLEVBQUEsR0FBQSxLQUFBLGFBQUEsRUFBQSxVQUFBLEtBQUEsRUFBQSxTQUFBLGFBQUEsS0FBQSxRQUFBLFFBQUEsVUFBQSxNQUFBLEVBQUEsVUFBQSxNQUFBLFdBQUEsb0JBQUEsWUFBQSx5QkFBQSxPQUFBLGFBQUEsZUFBQSxHQUFBLEVBQUEsWUFBQSxLQUFBLFlBQUEsVUFBQSxNQUFBLEVBQUEsVUFBQSxPQUFBLElBQUEsT0FBQSxTQUFBLEdBQUEsRUFBQSxPQUFBLFdBQUEsRUFBQSxLQUFBLEVBQUEsVUFBQSxRQUFBLEVBQUEsT0FBQSxRQUFBLEVBQUEsbUJBQUEsRUFBQSxLQUFBLEVBQUEsR0FBQSxLQUFBLFdBQUEsRUFBQSxVQUFBLEtBQUEsRUFBQSxTQUFBLGFBQUEsS0FBQSxRQUFBLFFBQUEsVUFBQSxNQUFBLEVBQUEsVUFBQSxNQUFBLFdBQUEsb0JBQUEsT0FBQSxLQUFBLFVBQUEsVUFBQSxNQUFBLEVBQUEsVUFBQSxPQUFBLElBQUEsTUFBQSxTQUFBLEdBQUEsRUFBQSxPQUFBLFdBQUEsRUFBQSxLQUFBLEVBQUEsVUFBQSxRQUFBLEVBQUEsT0FBQSxXQUFBLEVBQUEsS0FBQSxFQUFBLEdBQUEsS0FBQSxVQUFBLEVBQUEsVUFBQSxLQUFBLEVBQUEsT0FBQSxZQUFBLG9FQUFBLEVBQUEsT0FBQSxZQUFBLDBGQUFBLEVBQUEsR0FBQSxLQUFBLEVBQUEsUUFBQSxZQUFBLGtEQUFBLE9BQUEsR0FBQSxFQUFBLGVBQUEsRUFBQSxHQUFBLEVBQUEsR0FBQSxFQUFBLHVCQUFBLEVBQUEsR0FBQSxLQUFBLEVBQUEsVUFBQSxhQUFBLEtBQUEsUUFBQSxRQUFBLFVBQUEsTUFBQSxFQUFBLFVBQUEsTUFBQSxXQUFBLG9CQUFBLFlBQUEsZ0lBQUEsT0FBQSxHQUFBLEVBQUEsYUFBQSxJQUFBLFFBQUEsU0FBQSxHQUFBLEdBQUEsR0FBQSxNQUFBLFVBQUEsT0FBQSxLQUFBLEVBQUEsT0FBQSxRQUFBLFNBQUEsR0FBQSxNQUFBLEdBQUEsV0FBQSxJQUFBLFNBQUEsR0FBQSxNQUFBLFVBQUEsR0FBQSxFQUFBLE9BQUEsRUFBQSxPQUFBLEdBQUEsS0FBQSxFQUFBLFVBQUEsUUFBQSxFQUFBLE9BQUEsU0FBQSxFQUFBLEVBQUEsS0FBQSxFQUFBLG1CQUFBLEVBQUEsVUFBQSxPQUFBLFNBQUEsR0FBQSxNQUFBLE1BQUEsRUFBQSxHQUFBLEVBQUEsR0FBQSxFQUFBLElBQUEsaUNBQUEsRUFBQSxHQUFBLEtBQUEsRUFBQSxHQUFBLEVBQUEsVUFBQSxRQUFBLFNBQUEsR0FBQSxNQUFBLEdBQUEsVUFBQSxJQUFBLEVBQUEsS0FBQSxPQUFBLFNBQUEscUJBQUEsS0FBQSxFQUFBLE1BQUEsVUFBQSxNQUFBLEVBQUEsU0FBQSxFQUFBLEdBQUEsYUFBQSxFQUFBLEdBQUEsRUFBQSxNQUFBLGlCQUFBLEtBQUEsRUFBQSxLQUFBLEVBQUEsR0FBQSxLQUFBLFdBQUEsRUFBQSxVQUFBLEtBQUEsRUFBQSxPQUFBLFlBQUEsNEJBQUEsRUFBQSxNQUFBLEVBQUEsR0FBQSxFQUFBLEdBQUEsRUFBQSxVQUFBLGNBQUEsRUFBQSxLQUFBLEVBQUEsR0FBQSxLQUFBLFFBQUEsRUFBQSxVQUFBLEtBQUEsRUFBQSxPQUFBLFlBQUEsd0JBQUEsRUFBQSxTQUFBLFlBQUEsb0JBQUEsRUFBQSxTQUFBLGFBQUEsS0FBQSxRQUFBLFFBQUEsVUFBQSxNQUFBLEVBQUEsVUFBQSxNQUFBLFdBQUEsb0JBQUEsT0FBQSxLQUFBLFFBQUEsR0FBQSxFQUFBLFlBQUEsS0FBQSxFQUFBLFlBQUEsTUFBQSxLQUFBLFVBQUEsUUFBQSxFQUFBLEdBQUEsRUFBQSxVQUFBLE1BQUEsTUFBQSxJQUFBLFFBQUEsU0FBQSxHQUFBLE1BQUEsR0FBQSxLQUFBLEVBQUEsVUFBQSxRQUFBLE1BQUEsRUFBQSxtQkFBQSxFQUFBLEdBQUEsSUFBQSxFQUFBLEdBQUEsRUFBQSxJQUFBLG9CQUFBLE9BQUEsRUFBQSxHQUFBLEtBQUEsRUFBQSxTQUFBLFlBQUEsb0JBQUEsRUFBQSxTQUFBLGFBQUEsS0FBQSxRQUFBLFFBQUEsVUFBQSxNQUFBLEVBQUEsVUFBQSxNQUFBLFdBQUEsb0JBQUEsT0FBQSxLQUFBLFFBQUEsR0FBQSxFQUFBLFlBQUEsS0FBQSxFQUFBLFlBQUEsTUFBQSxLQUFBLFVBQUEsUUFBQSxFQUFBLEdBQUEsRUFBQSxVQUFBLE1BQUEsTUFBQSxJQUFBLFFBQUEsU0FBQSxHQUFBLE1BQUEsR0FBQSxLQUFBLEVBQUEsVUFBQSxRQUFBLE1BQUEsRUFBQSxtQkFBQSxFQUFBLEdBQUEsSUFBQSxFQUFBLEdBQUEsRUFBQSxJQUFBLG1CQUFBLFNBQUEsRUFBQSxLQUFBLEVBQUEsR0FBQSxLQUFBLGVBQUEsRUFBQSxVQUFBLEtBQUEsRUFBQSxnQkFBQSxPQUFBLGFBQUEsRUFBQSxVQUFBLFVBQUEsWUFBQSxFQUFBLFVBQUEsU0FBQSxpQkFBQSxFQUFBLFVBQUEsY0FBQSxPQUFBLEVBQUEsVUFBQSxPQUFBLEtBQUEsRUFBQSxVQUFBLE1BQUEsT0FBQSxFQUFBLFdBQUEsZUFBQSxFQUFBLFVBQUEsY0FBQSxFQUFBLEtBQUEsRUFBQSxHQUFBLEtBQUEsU0FBQSxFQUFBLFVBQUEsS0FBQSxFQUFBLFVBQUEsT0FBQSxtQkFBQSxFQUFBLFVBQUEsZUFBQSxXQUFBLEVBQUEsVUFBQSxTQUFBLFlBQUEsRUFBQSxpQkFBQSxFQUFBLE1BQUEsSUFBQSxpQkFBQTs7OytFQ1VBLElBQUEsR0FBQSxRQUFBLDhGQUdBLFlBQ0EsZUFBQSxFQUFBLFNBRUEsT0FBQSxTQUFBLFlBQUEsY0FBQSxZQUFBLFdBQ0EsU0FFQSxnQkFBQSxpVkFuQkEsaUJBQUEsT0FBQSxXQUFBLEdBQUEsR0FBQSxLQUFBLEVBQUEsRUFBQSxlQUFBLEVBQUEsRUFBQSxNQUFBLElBQUEsQ0FBQSxPQUFBLEdBQUEsUUFBQSxZQUFBLFNBQUEsT0FBQSxPQUFBLEdBQUEsT0FBQSxRQUFBLElBQUEsT0FBQSxTQUFBLEdBQUEsTUFBQSxHQUFBLGlCQUFBLEVBQUEsZ0JBQUEsT0FBQSxFQUFBLEdBQUEsRUFBQSxPQUFBLFNBQUEsR0FBQSxNQUFBLEdBQUEsZ0JBQUEsSUFBQSxFQUFBLEtBQUEsT0FBQSxhQUFBLEVBQUEsWUFBQSxFQUFBLFNBQUEsY0FBQSxFQUFBLFdBQUEsWUFBQSxFQUFBLFNBQUEsVUFBQSxFQUFBLFlBQUEsRUFBQSxHQUFBLEtBQUEsRUFBQSxHQUFBLFdBQUEsRUFBQSxHQUFBLEtBQUEsRUFBQSxXQUFBLDBCQUFBLEVBQUEsS0FBQSxZQUFBLDhCQUFBLEVBQUEsR0FBQSxFQUFBLEdBQUEsRUFBQSxJQUFBLG1EQUFBLEVBQUEsS0FBQSxFQUFBLEdBQUEsS0FBQSxPQUFBLEtBQUEsRUFBQSxZQUFBLE9BQUEsSUFBQSxFQUFBLFdBQUEsV0FBQSxFQUFBLEtBQUEsWUFBQSw4QkFBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsSUFBQSxnQ0FBQSxFQUFBLE1BQUEsSUFBQSxpQkFBQTs7O2lHQ2FBLE9BQUEsU0FDQSxTQUNBLE1BQUEsV0FDQSxLQUFBLE1BQUEsOFVBaEJBLGlCQUFBLE9BQUEsV0FBQSxHQUFBLEdBQUEsS0FBQSxFQUFBLEVBQUEsZUFBQSxFQUFBLEVBQUEsTUFBQSxJQUFBLENBQUEsT0FBQSxHQUFBLE9BQUEsWUFBQSxvQ0FBQSxFQUFBLE9BQUEsWUFBQSxpQkFBQSxFQUFBLE1BQUEsRUFBQSxNQUFBLFlBQUEsdUNBQUEsRUFBQSxHQUFBLEVBQUEsR0FBQSxFQUFBLFVBQUEsRUFBQSxLQUFBLEVBQUEsR0FBQSxLQUFBLEVBQUEsVUFBQSxZQUFBLHlCQUFBLE9BQUEsS0FBQSxVQUFBLElBQUEsTUFBQSxFQUFBLFNBQUEsRUFBQSxHQUFBLFNBQUEsRUFBQSxHQUFBLEtBQUEsRUFBQSxPQUFBLFlBQUEsNkJBQUEsRUFBQSxHQUFBLFlBQUEsR0FBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLE9BQUEsWUFBQSw2QkFBQSxFQUFBLEdBQUEsWUFBQSxNQUFBLGlCQUFBOzs7aUdDU0EsS0FBQSxpQkFDQSxPQUFBLFFBQUEsY0FBQSxlQUFBLGdCQUNBLEtBQUEsV0FDQSxPQUNBLGVBQUEsRUFDQSxRQUFBLE1BR0EsVUFDQSxjQUNBLElBQUEsV0FDQSxHQUFBLEdBQUEsS0FBQSxLQU9BLE9BTEEsUUFBQSxLQUFBLFFBQ0EsS0FBQSxNQUFBLFFBQUEsR0FDQSxFQUFBLEdBR0EsS0FBQSxjQUNBLEtBQUEscUJBQUEsR0FBQSxJQUdBLEVBQUEsRUFBQSxXQUVBLEVBQUEsV0FBQSxFQUFBLFFBQUEsS0FBQSxNQUFBLFFBQUEsR0FHQSxNQUFBLEtBQ0EsRUFBQSxHQUdBLEtBQUEsTUFBQSxRQUFBLFdBQUEsSUFFQSxLQUFBLHFCQUFBLEdBQUEsS0FHQSxJQUFBLFNBQUEsR0FFQSxHQUFBLEdBQUEsR0FBQSxRQUFBLGFBQUEsS0FDQSxFQUFBLEVBQUEsUUFBQSxFQUFBLEdBSUEsTUFBQSxNQUFBLFFBQUEsTUFJQSxTQUNBLHFCQUFBLFNBQUEsR0FDQSxHQUFBLEdBQUEsRUFBQSxXQUVBLEVBQUEsR0FBQSxRQUFBLGFBQUEsSUFPQSxPQU5BLEdBQUEsRUFBQSxRQUFBLEVBQUEsSUFFQSxNQUFBLEtBQUEsVUFDQSxFQUFBLEVBQUEsUUFBQSxLQUFBLE1BR0EsSUFHQSxRQUFBLFdBQ0EsS0FBQSxRQUFBLEtBQUEsYUFBQSxLQUFBLDRVQXZFQSxpQkFBQSxPQUFBLFdBQUEsR0FBQSxHQUFBLEtBQUEsRUFBQSxFQUFBLGVBQUEsRUFBQSxFQUFBLE1BQUEsSUFBQSxDQUFBLE9BQUEsR0FBQSxRQUFBLEVBQUEsWUFBQSxFQUFBLFFBQUEsRUFBQSxHQUFBLEVBQUEsR0FBQSxFQUFBLGlCQUFBLEVBQUEsU0FBQSxhQUFBLEtBQUEsUUFBQSxRQUFBLFVBQUEsTUFBQSxFQUFBLGFBQUEsV0FBQSxpQkFBQSxNQUFBLEVBQUEsV0FBQSxPQUFBLEtBQUEsUUFBQSxVQUFBLE1BQUEsRUFBQSxjQUFBLElBQUEsS0FBQSxTQUFBLEdBQUEsRUFBQSxlQUFBLEdBQUEsTUFBQSxTQUFBLEdBQUEsRUFBQSxlQUFBLEdBQUEsUUFBQSxTQUFBLEdBQUEsSUFBQSxFQUFBLEtBQUEsUUFBQSxRQUFBLEVBQUEsR0FBQSxFQUFBLFFBQUEsUUFBQSxHQUFBLEVBQUEsSUFBQSxTQUFBLE1BQUEsS0FBQSxHQUFBLGtCQUFBLE1BQUEsU0FBQSxHQUFBLEVBQUEsT0FBQSxZQUFBLEVBQUEsYUFBQSxFQUFBLE9BQUEsY0FBQSxpQkFBQTs7O2lHQ2dCQSxLQUFBLGdCQUNBLE9BQUEsWUFDQSxVQUVBLGNBQUEsV0FVQSxJQUFBLEdBUEEsR0FBQSxLQUFBLFNBRUEsRUFBQSxFQUdBLEtBRUEsRUFBQSxFQUFBLEVBQUEsRUFBQSxPQUFBLElBQ0EsRUFBQSxFQUFBLEtBQUEsRUFBQSxFQUFBLEtBQUEsR0FBQSxFQUNBLEdBQUEsRUFBQSxFQUFBLEVBQUEsR0FJQSxJQUFBLElBQ0EsT0FBQSxLQUFBLEtBQUEsR0FDQSxNQUFBLFFBQUEsS0FBQSxHQUNBLE1BQUEsUUFBQSxLQUFBLEdBQ0EsU0FBQSxLQUFBLEtBQUEsSUFHQSxFQUFBLENBQ0EsS0FBQSxHQUFBLEtBQUEsR0FDQSxJQUFBLElBQUEsRUFBQSxHQUFBLEVBQUEsQ0FTQSxPQVBBLElBQUEsSUFBQSxFQUFBLEdBR0EsRUFBQSxRQTdCQSxJQThCQSxHQUFBLEVBQUEsT0E5QkEsR0FpQ0EsR0FFQSxjQUFBLFdBQ0EsR0FBQSxHQUFBLEtBQUEsYUFFQSxPQUFBLEdBQUEsR0FDQSxZQUdBLEVBQUEsR0FDQSxVQUdBLEdBQUEsR0FDQSxVQUdBLEVBQUEsRUFDQSxjQURBLHdVQXZFQSxpQkFBQSxPQUFBLFdBQUEsR0FBQSxHQUFBLEtBQUEsRUFBQSxFQUFBLGVBQUEsRUFBQSxFQUFBLE1BQUEsSUFBQSxDQUFBLE9BQUEsR0FBQSxPQUFBLFlBQUEsa0JBQUEsTUFBQSxFQUFBLGdCQUFBLEVBQUEsR0FBQSxXQUFBLEVBQUEsR0FBQSxLQUFBLEVBQUEsR0FBQSxHQUFBLEVBQUEsR0FBQSxLQUFBLEVBQUEsT0FBQSxZQUFBLHNEQUFBLEVBQUEsR0FBQSxFQUFBLEdBQUEsRUFBQSxJQUFBLHlCQUFBLEVBQUEsR0FBQSxLQUFBLEVBQUEsT0FBQSxZQUFBLHNEQUFBLEVBQUEsR0FBQSxFQUFBLEdBQUEsRUFBQSxJQUFBLHlCQUFBLEVBQUEsR0FBQSxLQUFBLEVBQUEsT0FBQSxZQUFBLHNEQUFBLEVBQUEsR0FBQSxFQUFBLEdBQUEsRUFBQSxJQUFBLHlCQUFBLEVBQUEsR0FBQSxLQUFBLEVBQUEsT0FBQSxZQUFBLHdEQUFBLEVBQUEsR0FBQSxFQUFBLEdBQUEsRUFBQSxJQUFBLDRCQUFBLElBQUEsaUJBQUEsaUJBQUEsV0FBQSxHQUFBLEdBQUEsS0FBQSxFQUFBLEVBQUEsZUFBQSxFQUFBLEVB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Y0FBQSxPQUFBLEVBQUEsRUFBQSxJQUFBLENBQ0EsR0FBQSxHQUFBLEVBQUEsY0FBQSxtQkFHQSxPQUFBLEVBR0EsT0FBQSxJQUdBLE1BQUEsSUFFQSxjQUFBLFdBQ0EsTUFBQSxNQUFBLFdBckRBLFNBeURBLFdBQUEsV0FDQSxLQUFBLE1BQUEsZ0JBQUEsU0FEQSxRQUFBLFdBS0EsS0FBQSxPQUFBLFNBQUEsd0RBR0EsU0FBQSxHQUNBLE1BQUEsS0FBQSxJQUFBLHVDQUNBLFlBQUEsS0FBQSxJQUFBLDZDQUNBLGVBQUEsd1VBL0dBLGlCQUFBLE9BQUEsV0FBQSxHQUFBLEdBQUEsS0FBQSxFQUFBLEVBQUEsZUFBQSxFQUFBLEVBQUEsTUFBQSxJQUFBLENBQUEsT0FBQSxHQUFBLHVCQUFBLEVBQUEsT0FBQSxhQUFBLE1BQUEsUUFBQSxnQkFBQSxVQUFBLEVBQUEsUUFBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEtBQUEsSUFBQSxlQUFBLEVBQUEsR0FBQSxLQUFBLEVBQUEsT0FBQSxZQUFBLG9EQUFBLGFBQUEsTUFBQSxPQUFBLFNBQUEsY0FBQSxFQUFBLFFBQUEsWUFBQSxvREFBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsa0JBQUEsRUFBQSxHQUFBLEtBQUEsRUFBQSxVQUFBLGFBQUEsS0FBQSxRQUFBLFFBQUEsVUFBQSxNQUFBLEVBQUEsU0FBQSxXQUFBLGFBQUEsWUFBQSwyRkFBQSxJQUFBLFFBQUEsU0FBQSxHQUFBLEdBQUEsR0FBQSxNQUFBLFVBQUEsT0FBQSxLQUFBLEVBQUEsT0FBQSxRQUFBLFNBQUEsR0FBQSxNQUFBLEdBQUEsV0FBQSxJQUFBLFNBQUEsR0FBQSxNQUFBLFVBQUEsR0FBQSxFQUFBLE9BQUEsRUFBQSxPQUFBLEdBQUEsU0FBQSxFQUFBLE9BQUEsU0FBQSxFQUFBLEVBQUEsSUFBQSxTQUFBLEdBQUEsTUFBQSxHQUFBLE1BQUEsTUFBQSxTQUFBLEVBQUEsT0FBQSxZQUFBLEVBQUEsVUFBQSxPQUFBLEtBQUEsR0FBQSxNQUFBLFFBQUEsRUFBQSxHQUFBLFFBQUEsRUFBQSxHQUFBLEtBQUEsRUFBQSxVQUFBLE9BQUEsS0FBQSxHQUFBLE1BQUEsUUFBQSxFQUFBLEdBQUEsY0FBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLGtCQUFBLElBQUEsUUFBQSxPQUFBLFFBQUEsRUFBQSxRQUFBLEtBQUEsRUFBQSxhQUFBLFFBQUEsRUFBQSxTQUFBLFlBQUEsRUFBQSxLQUFBLElBQUEsT0FBQSxHQUFBLFNBQUEsR0FBQSxNQUFBLEdBQUEsZUFBQSxPQUFBLElBQUEsS0FBQSxVQUFBLFFBQUEsR0FBQSxFQUFBLElBQUEsUUFBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsSUFBQSxZQUFBLElBQUEsV0FBQSxHQUFBLFNBQUEsR0FBQSxNQUFBLEdBQUEsU0FBQSxFQUFBLEdBQUEsRUFBQSxJQUFBLFNBQUEsU0FBQSxFQUFBLEdBQUEsTUFBQSxHQUFBLE9BQUEsSUFBQSxJQUFBLEVBQUEsR0FBQSxhQUFBLEVBQUEsR0FBQSxHQUFBLGdCQUFBLFNBQUEsRUFBQSxHQUFBLEtBQUEsRUFBQSxVQUFBLFlBQUEsaUJBQUEsSUFBQSxNQUFBLEVBQUEsY0FBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsSUFBQSxrQkFBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLGlCQUFBLElBQUEsa0JBQUEsT0FBQSxhQUFBLFVBQUEsSUFBQSxpQkFBQTs7O2tJQzJDQSxJQUFBLEdBQUEsUUFBQSw4QkFDQSxFQUFBLFFBQUEsNENBR0EsWUFDQSxnQkFBQSxFQUFBLFFBQ0EsYUFBQSxFQUFBLFNBRUEsS0FBQSxXQUNBLE9BQ0EsV0FBQSxHQUNBLGVBQUEsWUFBQSxXQUFBLFdBQUEsUUFBQSxRQUNBLFFBQUEsTUFDQSxTQUFBLE9BQUEsV0FBQSxRQUFBLE9BQUEsV0FDQSxVQUFBLE9BQUEsV0FBQSxRQUFBLFFBQ0EsWUFBQSxPQUFBLFdBQUEsUUFBQSxRQUNBLGdCQUNBLGNBQUEsRUFDQSxVQUFBLEtBQ0EsU0FBQSxPQUdBLFVBQ0EsUUFBQSxXQUNBLE9BQ0EsWUFBQSxFQUNBLFVBQ0EsS0FBQSxLQUFBLElBQUEsUUFDQSxTQUFBLEtBQUEsSUFBQSxTQUNBLE1BQUEsS0FBQSxJQUFBLFNBQ0EsS0FBQSxLQUFBLElBQUEsU0FFQSxPQUNBLE1BQUEsS0FBQSxJQUFBLG1CQUNBLE1BQUEsS0FBQSxJQUFBLFdBQ0EsVUFBQSxLQUFBLElBQUEsd0JBSUEsUUFBQSxXQUNBLElBQUEsR0FBQSxHQUFBLEVBQUEsRUFBQSxLQUFBLE9BQUEsTUFBQSxVQUFBLE9BQUEsRUFBQSxFQUFBLElBQ0EsR0FBQSxLQUFBLE9BQUEsTUFBQSxVQUFBLEdBQUEsS0FBQSxLQUFBLFVBQ0EsTUFBQSxNQUFBLE9BQUEsTUFBQSxVQUFBLEVBR0EsUUFDQSxhQUdBLGVBQUEsV0FFQSxNQUFBLE1BQUEsWUFBQSxTQUFBLE9BQUEsT0FBQSxvQkFBQSxLQUFBLE9BQUEsTUFBQSxLQUFBLE9BRUEsV0FBQSxXQUVBLE1BQUEsWUFBQSxLQUFBLFFBQUEsTUFHQSxLQUFBLFlBQUEsU0FBQSxPQUFBLE9BQUEseUJBQUEsS0FBQSxPQUFBLE1BQUEsS0FBQSxPQUdBLGlCQUFBLFdBR0EsTUFBQSxNQUFBLFlBQUEsS0FBQSxPQUFBLE1BQUEsS0FBQSxRQUFBLE9BS0EsS0FBQSxZQUFBLFNBQUEsT0FBQSxPQUFBLHNCQUFBLEtBQUEsT0FBQSxNQUFBLEtBQUEsT0FBQSxLQUFBLGFBQUEsU0FNQSxhQUFBLFdBQ0EsT0FBQSxLQUFBLFFBQUEsTUFDQSxJQUFBLFdBQ0EsTUFBQSxNQUFBLFlBQUEsU0FBQSxPQUFBLE9BQUEsbUNBQUEsS0FBQSxPQUFBLE1BQUEsS0FBQSxLQUVBLEtBQUEsV0FDQSxNQUFBLE1BQUEsWUFBQSxTQUFBLE9BQUEsT0FBQSxtQ0FBQSxLQUFBLE9BQUEsTUFBQSxLQUFBLE1BSUEsT0FBQSxHQUVBLGFBQUEsV0FBQSxHQUFBLEdBQUEsSUFDQSxPQUFBLE1BQUEsT0FBQSxNQUFBLE1BQUEsT0FBQSxTQUFBLEdBQ0EsTUFBQSxHQUFBLFVBQUEsRUFBQSxRQUFBLE1BR0EsYUFBQSxXQUNBLE9BQ0EsVUFBQSxLQUFBLFFBQUEsR0FDQSxZQUFBLEtBQUEsUUFBQSxTQUFBLEtBQUEsUUFBQSxRQUFBLGFBQUEsS0FHQSxhQUFBLFdBQ0EsR0FBQSxHQUFBLEtBQ0EsRUFBQSxLQUFBLE9BQUEsTUFBQSxVQUFBLFdBQ0EsRUFBQSxLQUFBLFlBRUEsSUFBQSxFQUFBLENBQ0EsR0FBQSxHQUFBLEdBQUEsUUFBQSxFQUFBLElBRUEsT0FBQSxHQUFBLE9BQUEsU0FBQSxHQUNBLElBQUEsR0FBQSxHQUFBLEVBQUEsRUFBQSxFQUFBLGNBQUEsT0FBQSxFQUFBLEVBQUEsSUFBQSxDQUNBLEdBQUEsR0FBQSxFQUFBLGNBQUEsRUFFQSxJQUFBLEVBQUEsS0FBQSxFQUFBLElBQ0EsT0FBQSxFQUdBLE9BQUEsSUFHQSxNQUFBLElBRUEsY0FBQSxXQUNBLE1BQUEsTUFBQSxXQUdBLFNBQ0EsY0FBQSxTQUFBLEdBRUEsTUFBQSxHQUFBLEtBQUEsS0FBQSxPQUFBLE1BQUEsS0FBQSxLQUFBLElBRUEsY0FBQSxXQUFBLEdBQUEsR0FBQSxLQUNBLEVBQUEsS0FBQSxJQUFBLHNCQUFBLFFBQUEsYUFBQSxLQUFBLFFBQUEsS0FFQSxJQUFBLFFBQUEsR0FDQSxNQUFBLE1BQUEsS0FBQSxjQUFBLEtBQUEsUUFBQSxJQUFBLEtBQUEsU0FBQSxHQUNBLE1BQUEsRUFBQSxPQUNBLEVBQUEsT0FBQSxPQUFBLGdCQUFBLEVBQUEsUUFBQSxJQUNBLEVBQUEsUUFBQSxTQUFBLEtBQUEsYUFLQSxZQUFBLFdBQ0EsS0FBQSxNQUFBLGFBQUEsUUFFQSxTQUFBLFNBQUEsR0FDQSxLQUFBLGFBQUEsRUFDQSxLQUFBLE1BQUEsY0FBQSxRQUVBLFFBQUEsV0FDQSxLQUFBLE1BQUEsYUFBQSxRQUVBLFdBQUEsU0FBQSxHQUFBLEdBQUEsR0FBQSxLQUNBLEVBQUEsS0FBQSxJQUFBLHNCQUFBLFFBQUEsYUFBQSxFQUFBLFNBQUEsS0FBQSxFQUFBLFVBRUEsSUFBQSxRQUFBLEdBQ0EsTUFBQSxNQUFBLEtBQUEsV0FBQSxFQUFBLElBQUEsS0FBQSxTQUFBLEdBQ0EsTUFBQSxFQUFBLE1BQ0EsRUFBQSxPQUFBLE9BQUEsYUFBQSxFQUFBLE9BS0EsYUFBQSxTQUFBLEdBQ0EsTUFBQSxVQUFBLEdBRUEsV0FBQSxTQUFBLEdBQ0EsTUFBQSxPQUFBLElBR0EsUUFBQSxXQUdBLEtBQUEsVUFBQSxLQUFBLE9BQUEsT0FBQSxJQUFBLEtBQUEsT0FBQSxNQUFBLEtBQUEsUUFBQSxHQUVBLEtBQUEsT0FBQSxPQUFBLEtBQ0EsS0FBQSxjQUFBLEdBR0EsS0FBQSxPQUFBLFNBQUEsYUFBQSxLQUFBLFdBQ0EsS0FBQSxPQUFBLFNBQUEsa0JBQUEsS0FBQSxXQUVBLEtBQUEsT0FBQSxPQUFBLGdCQUNBLFNBQUEsR0FDQSxNQUFBLEdBQ0EsWUFBQSxHQUNBLGVBQUEsd1VBbk9BLGlCQUFBLE9BQUEsV0FBQSxHQUFBLEdBQUEsS0FBQSxFQUFBLEVBQUEsZUFBQSxFQUFBLEVBQUEsTUFBQSxJQUFBLENBQUEsT0FBQSxHQUFBLHNCQUFBLEVBQUEsT0FBQSxPQUFBLEtBQUEsaUJBQUEsS0FBQSxrQkFBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsUUFBQSxTQUFBLEVBQUEsR0FBQSxLQUFBLEVBQUEsT0FBQSxPQUFBLEtBQUEsV0FBQSxLQUFBLFlBQUEsRUFBQSxLQUFBLEVBQUEsR0FBQSxFQUFBLEdBQUEsRUFBQSxRQUFBLFVBQUEsRUFBQSxNQUFBLEVBQUEsR0FBQSxTQUFBLEVBQUEsR0FBQSxFQUFBLFFBQUEsWUFBQSxJQUFBLEVBQUEsR0FBQSxFQUFBLFFBQUEsYUFBQSxFQUFBLE1BQUEsRUFBQSxHQUFBLFNBQUEsRUFBQSxHQUFBLEVBQUEsUUFBQSxRQUFBLFNBQUEsRUFBQSxHQUFBLEtBQUEsRUFBQSxLQUFBLEVBQUEsR0FBQSxXQUFBLEVBQUEsR0FBQSxFQUFBLElBQUEsZUFBQSxLQUFBLEVBQUEsR0FBQSxFQUFBLFFBQUEsYUFBQSxFQUFBLE1BQUEsRUFBQSxHQUFBLFdBQUEsRUFBQSxHQUFBLEVBQUEsSUFBQSxtQkFBQSxLQUFBLEVBQUEsR0FBQSxFQUFBLFFBQUEsZ0JBQUEsWUFBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLGVBQUEsRUFBQSxVQUFBLFlBQUEsaUJBQUEsSUFBQSxNQUFBLEVBQUEsZUFBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsSUFBQSxtQkFBQSxFQUFBLEtBQUEsRUFBQSxHQUFBLEtBQUEsRUFBQSxpQkFBQSxFQUFBLFVBQUEsWUFBQSxpQkFBQSxJQUFBLE1BQUEsRUFBQSxpQkFBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsSUFBQSxxQkFBQSxFQUFBLE9BQUEsRUFBQSxHQUFBLEtBQUEsRUFBQSxPQUFBLGFBQUEsTUFBQSxRQUFBLGdCQUFBLFVBQUEsRUFBQSxRQUFBLEVBQUEsR0FBQSxFQUFBLEdBQUEsS0FBQSxJQUFBLGVBQUEsRUFBQSxHQUFBLEtBQUEsRUFBQSxPQUFBLFlBQUEsb0RBQUEsYUFBQSxNQUFBLE9BQUEsU0FBQSxjQUFBLEVBQUEsUUFBQSxZQUFBLG9EQUFBLEVBQUEsR0FBQSxFQUFBLEdBQUEsRUFBQSxrQkFBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLFVBQUEsYUFBQSxLQUFBLFFBQUEsUUFBQSxVQUFBLE1BQUEsRUFBQSxTQUFBLFdBQUEsYUFBQSxZQUFBLDJGQUFBLElBQUEsUUFBQSxTQUFBLEdBQUEsR0FBQSxHQUFBLE1BQUEsVUFBQSxPQUFBLEtBQUEsRUFBQSxPQUFBLFFBQUEsU0FBQSxHQUFBLE1BQUEsR0FBQSxXQUFBLElBQUEsU0FBQSxHQUFBLE1BQUEsVUFBQSxHQUFBLEVBQUEsT0FBQSxFQUFBLE9BQUEsR0FBQSxTQUFBLEVBQUEsT0FBQSxTQUFBLEVBQUEsRUFBQSxJQUFBLFNBQUEsR0FBQSxNQUFBLEdBQUEsTUFBQSxNQUFBLFNBQUEsRUFBQSxPQUFBLFlBQUEsRUFBQSxVQUFBLE9BQUEsS0FBQSxHQUFBLE1BQUEsUUFBQSxFQUFBLEdBQUEsUUFBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLFVBQUEsT0FBQSxLQUFBLEdBQUEsTUFBQSxRQUFBLEVBQUEsR0FBQSxjQUFBLEVBQUEsR0FBQSxLQUFBLEVBQUEsa0JBQUEsSUFBQSxRQUFBLE9BQUEsUUFBQSxFQUFBLFFBQUEsS0FBQSxFQUFBLGFBQUEsUUFBQSxFQUFBLFNBQUEsWUFBQSxFQUFBLEtBQUEsSUFBQSxPQUFBLEdBQUEsU0FBQSxHQUFBLE1BQUEsR0FBQSxVQUFBLEVBQUEsR0FBQSxFQUFBLEdBQUEsRUFBQSxJQUFBLFVBQUEsS0FBQSxFQUFBLEdBQUEsRUFBQSxJQUFBLGlCQUFBLElBQUEsV0FBQSxHQUFBLFNBQUEsR0FBQSxNQUFBLEdBQUEsS0FBQSxPQUFBLEtBQUEsRUFBQSxhQUFBLEVBQUEsSUFBQSxhQUFBLEVBQUEsR0FBQSxFQUFBLEdBQUEsRUFBQSxJQUFBLGdCQUFBLElBQUEsUUFBQSxHQUFBLFNBQUEsR0FBQSxNQUFBLEdBQUEsS0FBQSxPQUFBLEtBQUEsRUFBQSxXQUFBLEVBQUEsSUFBQSxVQUFBLEVBQUEsR0FBQSxFQUFBLEdBQUEsRUFBQSxJQUFBLGFBQUEsSUFBQSxVQUFBLEdBQUEsU0FBQSxHQUFBLE1BQUEsR0FBQSxhQUFBLEVBQUEsVUFBQSxFQUFBLFVBQUEsWUFBQSxNQUFBLElBQUEsTUFBQSxTQUFBLEdBQUEsTUFBQSxHQUFBLFNBQUEsRUFBQSxTQUFBLEVBQUEsR0FBQSxFQUFBLEdBQUEsRUFBQSxJQUFBLGdCQUFBLEVBQUEsR0FBQSxLQUFBLEVBQUEsY0FBQSxFQUFBLEtBQUEsRUFBQSxVQUFBLFlBQUEsTUFBQSxJQUFBLE1BQUEsU0FBQSxHQUFBLE1BQUEsR0FBQSxXQUFBLEVBQUEsU0FBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsSUFBQSxrQkFBQSxFQUFBLE9BQUEsRUFBQSxRQUFBLE1BQUEsS0FBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLFdBQUEsRUFBQSxVQUFBLFlBQUEsaUJBQUEsSUFBQSxNQUFBLEVBQUEsV0FBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsSUFBQSxlQUFBLEVBQUEsS0FBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLGlCQUFBLElBQUEsZUFBQSxPQUFBLGFBQUEsT0FBQSxhQUFBLEVBQUEsV0FBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLGNBQUEsSUFBQSxlQUFBLE9BQUEsYUFBQSxNQUFBLGFBQUEsRUFBQSxnQkFBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLGNBQUEsSUFBQSxnQkFBQSxPQUFBLGFBQUEsT0FBQSxhQUFBLEVBQUEsaUJBQUEsSUFBQSxpQkFBQTs7O2tJQ3dDQSxJQUFBLEdBQUEsUUFBQSxzQ0FDQSxFQUFBLFFBQUEsNkJBQ0EsRUFBQSxRQUFBLGtEQUdBLEtBQUEsZ0JBQ0EsWUFDQSx3QkFBQSxFQUFBLFFBQ0EsZUFBQSxFQUFBLFFBQ0EsbUJBQUEsRUFBQSxTQUVBLEtBQUEsV0FDQSxPQUNBLFlBQUEsT0FHQSxVQUNBLFNBQUEsV0FDQSxNQUFBLE1BQUEsV0FBQSxLQUFBLFVBQUEsV0FFQSxnQkFBQSxXQUNBLE1BQUEsTUFBQSxXQUFBLEtBQUEsVUFBQSxrQkFFQSxpQkFBQSxXQUNBLE1BQUEsTUFBQSxXQUFBLEtBQUEsVUFBQSxlQUVBLGdCQUFBLFdBQ0EsTUFBQSxNQUFBLFdBQUEsS0FBQSxVQUFBLGNBRUEsVUFBQSxXQUFBLEdBQUEsR0FBQSxJQUNBLE9BQUEsTUFBQSxPQUFBLE1BQUEsV0FBQSxPQUFBLFNBQUEsR0FBQSxNQUFBLEdBQUEsT0FBQSxFQUFBLGNBQUEsSUFFQSxnQkFBQSxXQUNBLE9BQ0EsU0FBQSxRQUNBLFdBQUEsRUFDQSxTQUNBLFNBQ0EsTUFBQSxLQUFBLElBQUEsNkJBQ0EsWUFBQSxLQUFBLElBQUEsNkJBQ0EsS0FBQSxPQUNBLEtBQUEsU0FFQSxNQUFBLEtBQUEsSUFBQSwyQkFDQSxZQUFBLEtBQUEsSUFBQSwyQkFDQSxLQUFBLE9BQ0EsS0FBQSxPQUVBLE1BQUEsS0FBQSxJQUFBLCtCQUNBLFlBQUEsS0FBQSxJQUFBLCtCQUNBLEtBQUEsU0FDQSxLQUFBLFdBRUEsTUFBQSxLQUFBLElBQUEsOEJBQ0EsWUFBQSxLQUFBLElBQUEsOEJBQ0EsS0FBQSxXQUNBLEtBQUEsWUFJQSxhQUFBLFdBQ0EsT0FDQSxTQUFBLFFBQ0EsY0FBQSxRQUNBLFdBQUEsRUFDQSxTQUNBLFNBQ0EsTUFBQSxLQUFBLElBQUEsMEJBQ0EsWUFBQSxLQUFBLElBQUEsMEJBQ0EsS0FBQSxPQUNBLEtBQUEsU0FFQSxNQUFBLEtBQUEsSUFBQSwyQkFDQSxZQUFBLEtBQUEsSUFBQSwyQkFDQSxLQUFBLFNBQ0EsS0FBQSxVQUVBLE1BQUEsS0FBQSxJQUFBLDJCQUNBLFlBQUEsS0FBQSxJQUFBLDJCQUNBLEtBQUEsV0FDQSxLQUFBLFlBSUEsWUFBQSxXQUFBLEdBQUEsR0FBQSxLQUNBLEVBQUEsQ0FHQSxNQUFBLE9BQUEsTUFBQSxXQUFBLE9BQUEsU0FBQSxHQUFBLE1BQUEsR0FBQSxPQUFBLEVBQUEsY0FBQSxFQVVBLE9BUEEsTUFBQSxVQUFBLFlBQUEsUUFBQSxTQUFBLEdBQ0EsR0FBQSxFQUFBLE9BQUEsRUFBQSxRQUdBLEtBQUEsVUFBQSxTQUFBLFFBQUEsU0FBQSxHQUNBLEdBQUEsRUFBQSxNQUFBLEVBQUEsUUFFQSxJQUdBLFNBQ0EsV0FBQSxTQUFBLEdBQ0EsR0FBQSxHQUFBLEVBZUEsT0FaQSxHQUFBLFFBQUEsTUFBQSxJQUdBLE1BQUEsUUFFQSxRQUFBLFNBQUEsR0FDQSxHQUFBLE1BRUEsR0FBQSxFQUFBLFFBQUEsTUFBQSxRQUNBLEdBQUEsU0FHQSxJQUdBLFFBQUEsV0FFQSxLQUFBLFlBQUEsS0FBQSxPQUFBLE9BQUEsR0FFQSxLQUFBLE9BQUEsU0FBQSxlQUFBLEtBQUEsaVZBcEtBLGlCQUFBLE9BQUEsV0FBQSxHQUFBLEdBQUEsS0FBQSxFQUFBLEVBQUEsZUFBQSxFQUFBLEVBQUEsTUFBQSxJQUFBLENBQUEsT0FBQSxHQUFBLFVBQUEsRUFBQSx1QkFBQSxFQUFBLE1BQUEsRUFBQSxHQUFBLEVBQUEsR0FBQSxFQUFBLElBQUEsV0FBQSxLQUFBLEVBQUEsR0FBQSxFQUFBLFVBQUEsT0FBQSxTQUFBLEVBQUEsR0FBQSxLQUFBLEVBQUEsS0FBQSxFQUFBLFVBQUEsRUFBQSxHQUFBLEVBQUEsR0FBQSxFQUFBLElBQUEsbUJBQUEsRUFBQSxHQUFBLEtBQUEsRUFBQSxHQUFBLEVBQUEsVUFBQSxTQUFBLEVBQUEsR0FBQSxLQUFBLEVBQUEsS0FBQSxFQUFBLFVBQUEsRUFBQSxHQUFBLEVBQUEsR0FBQSxFQUFBLElBQUEsb0JBQUEsRUFBQSxHQUFBLE1BQUEsRUFBQSxlQUFBLE9BQUEsSUFBQSxLQUFBLG1CQUFBLFFBQUEsYUFBQSxFQUFBLFVBQUEsa0JBQUEsRUFBQSxHQUFBLEVBQUEsR0FBQSxFQUFBLFVBQUEsaUJBQUEsRUFBQSxNQUFBLEVBQUEsR0FBQSxLQUFBLEVBQUEsVUFBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsSUFBQSw2QkFBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLEdBQUEsRUFBQSxVQUFBLGNBQUEsU0FBQSxHQUFBLEVBQUEsR0FBQSxLQUFBLEVBQUEsVUFBQSxhQUFBLEVBQUEsT0FBQSxZQUFBLHdCQUFBLEVBQUEsTUFBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsSUFBQSxvQkFBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLEtBQUEsVUFBQSxVQUFBLEVBQUEsR0FBQSxFQUFBLHVCQUFBLEVBQUEsS0FBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLFVBQUEsS0FBQSxFQUFBLHlCQUFBLE9BQUEsWUFBQSxFQUFBLFVBQUEsS0FBQSxlQUFBLEVBQUEsVUFBQSxXQUFBLEVBQUEsS0FBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsSUFBQSwrQkFBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLE1BQUEsRUFBQSxHQUFBLEVBQUEsR0FBQSxFQUFBLElBQUEsc0NBQUEsT0FBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLE9BQUEsVUFBQSxVQUFBLEVBQUEsR0FBQSxFQUFBLG9CQUFBLEVBQUEsR0FBQSxLQUFBLEVBQUEsTUFBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsSUFBQSxzQ0FBQSxPQUFBLEVBQUEsR0FBQSxLQUFBLEVBQUEsVUFBQSxnQkFBQSxFQUFBLE9BQUEsVUFBQSxVQUFBLEVBQUEsR0FBQSxFQUFBLG9CQUFBLEVBQUEsZ0JBQUEsT0FBQSxhQUFBLEVBQUEsYUFBQSxFQUFBLGdCQUFBLFVBQUEsY0FBQSxTQUFBLFlBQUEsRUFBQSxnQkFBQSxTQUFBLE9BQUEsRUFBQSxnQkFBQSxPQUFBLEtBQUEsRUFBQSxVQUFBLFlBQUEsZ0JBQUEsS0FBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLE1BQUEsRUFBQSxHQUFBLEVBQUEsR0FBQSxFQUFBLElBQUEsK0JBQUEsT0FBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLFVBQUEsU0FBQSxFQUFBLE9BQUEsVUFBQSxVQUFBLEVBQUEsR0FBQSxFQUFBLGFBQUEsRUFBQSxnQkFBQSxPQUFBLGFBQUEsRUFBQSxhQUFBLEVBQUEsYUFBQSxVQUFBLFlBQUEsRUFBQSxhQUFBLFNBQUEsaUJBQUEsRUFBQSxhQUFBLGNBQUEsT0FBQSxFQUFBLGFBQUEsT0FBQSxLQUFBLEVBQUEsVUFBQSxTQUFBLGdCQUFBLEtBQUEsRUFBQSxHQUFBLEtBQUEsRUFBQSxZQUFBLEVBQUEsT0FBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsSUFBQSxlQUFBLE1BQUEsRUFBQSxvQkFBQSxPQUFBLGdCQUFBLEVBQUEsTUFBQSxFQUFBLFlBQUEsZUFBQSxRQUFBLEdBQUEsRUFBQSxLQUFBLEVBQUEsR0FBQSxLQUFBLEVBQUEsTUFBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsSUFBQSxVQUFBLE9BQUEsRUFBQSxHQUFBLEtBQUEsRUFBQSxVQUFBLE1BQUEsT0FBQSxFQUFBLE1BQUEsRUFBQSxHQUFBLEVBQUEsVUFBQSxNQUFBLFNBQUEsR0FBQSxNQUFBLEdBQUEsT0FBQSxJQUFBLEVBQUEsTUFBQSxFQUFBLEtBQUEsT0FBQSxLQUFBLEVBQUEsSUFBQSxPQUFBLFlBQUEsRUFBQSxHQUFBLEVBQUEsR0FBQSxFQUFBLGFBQUEsR0FBQSxFQUFBLEtBQUEsRUFBQSxHQUFBLEVBQUEsR0FBQSxFQUFBLElBQUEsZ0JBQUEsR0FBQSxFQUFBLE1BQUEsaUJBQUE7OztrSUNZQSxJQUFBLEdBQUEsUUFBQSx1QkFDQSxFQUFBLFFBQUEsaURBR0EsS0FBQSxpQkFDQSxZQUNBLGtCQUFBLEVBQUEsUUFDQSxTQUFBLEVBQUEsU0FFQSxLQUFBLFdBQ0EsT0FDQSxZQUNBLGNBQ0EsV0FBQSxHQUNBLGVBQUEsT0FBQSxlQUFBLFlBQUEsU0FBQSxRQUNBLFNBQUEsT0FBQSxlQUFBLFlBQUEsU0FBQSxRQUNBLFVBQUEsT0FBQSxlQUFBLFlBQUEsU0FBQSxRQUNBLFlBQUEsT0FBQSxlQUFBLFlBQUEsU0FBQSxVQUdBLFVBQ0EsV0FBQSxXQUNBLFFBQ0EsS0FBQSxRQUNBLFVBQUEsRUFDQSxTQUNBLEtBQUEsVUFHQSxRQUFBLFdBQ0EsT0FDQSxZQUFBLEVBQ0EsVUFDQSxLQUFBLEtBQUEsSUFBQSxlQUNBLGFBQUEsS0FBQSxJQUFBLGdCQUNBLFVBQUEsS0FBQSxJQUFBLHNCQUNBLE9BQUEsS0FBQSxJQUFBLFVBQ0EsS0FBQSxLQUFBLElBQUEsbUJBS0EsV0FBQSxXQUNBLE1BQUEsTUFBQSxPQUFBLE1BQUEsV0FBQSxJQUFBLFNBQUEsR0FDQSxPQUNBLEtBQUEsRUFBQSxLQUNBLGFBQUEsRUFBQSxhQUNBLFNBQUEsRUFBQSxTQUNBLE9BQUEsRUFBQSxRQUFBLEVBQUEsT0FBQSxLQUNBLFVBQUEsRUFBQSxXQUFBLEVBQUEsVUFBQSxVQUNBLEtBQUEsRUFBQSxTQUtBLGFBQUEsV0FDQSxHQUFBLEdBQUEsS0FDQSxFQUFBLEtBQUEsT0FBQSxNQUFBLFVBQUEsV0FDQSxFQUFBLEtBQUEsVUFFQSxJQUFBLEVBQUEsQ0FDQSxHQUFBLEdBQUEsR0FBQSxRQUFBLEVBQUEsSUFFQSxPQUFBLEdBQUEsT0FBQSxTQUFBLEdBQ0EsSUFBQSxHQUFBLEdBQUEsRUFBQSxFQUFBLEVBQUEsY0FBQSxPQUFBLEVBQUEsRUFBQSxJQUFBLENBQ0EsR0FBQSxHQUFBLEVBQUEsY0FBQSxFQUVBLElBQUEsRUFBQSxLQUFBLEVBQUEsSUFDQSxPQUFBLEVBR0EsT0FBQSxJQUdBLE1BQUEsS0FHQSxTQUNBLGFBQUEsV0FDQSxLQUFBLE1BQUEsa0JBQUEsU0FHQSxRQUFBLFdBQ0EsS0FBQSxPQUFBLFNBQUEsaUJBRUEsS0FBQSxPQUFBLE9BQUEsZ0JBQ0EsU0FBQSxHQUNBLE1BQUEsS0FBQSxJQUFBLHdDQUNBLFlBQUEsR0FDQSxlQUFBLHdVQXRHQSxpQkFBQSxPQUFBLFdBQUEsR0FBQSxHQUFBLEtBQUEsRUFBQSxFQUFBLGVBQUEsRUFBQSxFQUFBLE1BQUEsSUFBQSxDQUFBLE9BQUEsR0FBQSx1QkFBQSxFQUFBLE9BQUEsWUFBQSxnQkFBQSxFQUFBLFVBQUEsWUFBQSxpQkFBQSxJQUFBLE1BQUEsRUFBQSxnQkFBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsSUFBQSxzQkFBQSxFQUFBLE1BQUEsRUFBQSxHQUFBLEtBQUEsRUFBQSxrQkFBQSxPQUFBLFFBQUEsRUFBQSxRQUFBLEtBQUEsRUFBQSxhQUFBLFFBQUEsRUFBQSxTQUFBLFlBQUEsRUFBQSxLQUFBLElBQUEsT0FBQSxHQUFBLFNBQUEsR0FBQSxNQUFBLEdBQUEsZUFBQSxPQUFBLElBQUEsS0FBQSxZQUFBLFFBQUEsR0FBQSxFQUFBLElBQUEsVUFBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsSUFBQSxZQUFBLElBQUEsZUFBQSxHQUFBLFNBQUEsR0FBQSxNQUFBLEdBQUEsZUFBQSxPQUFBLElBQUEsS0FBQSxtQkFBQSxRQUFBLGFBQUEsRUFBQSxJQUFBLGtCQUFBLEVBQUEsR0FBQSxFQUFBLEdBQUEsRUFBQSxJQUFBLHVCQUFBLEVBQUEsR0FBQSxLQUFBLEVBQUEsbUJBQUEsSUFBQSxvQkFBQSxPQUFBLGFBQUEsVUFBQSxJQUFBLGlCQUFBOzs7Z1BDNkhBLEVBQUEsUUFBQSx3Q0FHQSxZQUNBLFNBQUEsRUFBQSxTQUVBLEtBQUEsc0JBQ0EsS0FBQSxXQUNBLE9BQ0EsYUFBQSxHQUNBLGVBQUEsT0FBQSxlQUFBLFlBQUEsU0FBQSxnQkFDQSxTQUFBLE9BQUEsZUFBQSxZQUFBLFNBQUEsZ0JBQ0EsVUFBQSxPQUFBLGVBQUEsWUFBQSxTQUFBLGdCQUNBLFlBQUEsT0FBQSxlQUFBLFlBQUEsU0FBQSxnQkFDQSxTQUFBLEtBQ0EsWUFDQSxjQUNBLGlCQUFBLEVBQ0EsMkJBQUEsRUFDQSxpQkFBQSxFQUNBLGNBQUEsRUFDQSxpQkFBQSxFQUNBLHNCQUFBLEdBQ0EsaUJBQUEsRUFDQSxtQkFBQSxFQUNBLGNBQUEsRUFDQSxxQkFBQSxFQUNBLFdBQUEsRUFDQSxjQUFBLElBR0EsVUFDQSxPQUFBLFdBQ0EsTUFBQSxNQUFBLE9BQUEsUUFBQSx3QkFFQSxLQUFBLEtBQ0EsTUFBQSxLQUFBLE9BQUEsTUFBQSxLQUFBLEtBQUEsR0FDQSxNQUFBLEtBQ0EsS0FBQSxXQUVBLEtBQUEsaUJBQ0EsTUFBQSxLQUFBLFFBQUEsZUFDQSxNQUFBLEtBQUEsSUFBQSxXQUNBLFFBQUEsS0FBQSxPQUFBLFFBQUEsc0JBQ0EsS0FBQSxXQUVBLEtBQUEsZUFDQSxNQUFBLEtBQUEsYUFDQSxNQUFBLEtBQUEsSUFBQSxnQkFDQSxLQUFBLGFBS0EsS0FBQSxLQUNBLE1BQUEsR0FDQSxNQUFBLEtBQUEsSUFBQSxXQUNBLEtBQUEsU0FFQSxLQUFBLGVBQ0EsTUFBQSxLQUFBLGFBQ0EsTUFBQSxLQUFBLElBQUEsZ0JBQ0EsS0FBQSxZQUdBLHVCQUFBLFdBQ0EsR0FBQSxHQUFBLEtBQ0EsRUFBQSxLQUFBLE9BQUEsTUFBQSxVQUFBLFdBQ0EsRUFBQSxLQUFBLFVBRUEsSUFBQSxFQUFBLENBQ0EsR0FBQSxHQUFBLEdBQUEsUUFBQSxFQUFBLElBRUEsT0FBQSxHQUFBLE9BQUEsU0FBQSxHQUNBLElBQUEsR0FBQSxHQUFBLEVBQUEsRUFBQSxFQUFBLGNBQUEsT0FBQSxFQUFBLEVBQUEsSUFBQSxDQUNBLEdBQUEsR0FBQSxFQUFBLGNBQUEsRUFFQSxJQUFBLEVBQUEsS0FBQSxFQUFBLElBQ0EsT0FBQSxFQUdBLE9BQUEsSUFHQSxNQUFBLElBRUEsUUFBQSxXQUNBLE9BQ0EsWUFBQSxFQUNBLFVBQ0EsS0FBQSxLQUFBLElBQUEsZUFDQSxhQUFBLEtBQUEsSUFBQSxnQkFDQSxVQUFBLEtBQUEsSUFBQSxzQkFDQSxPQUFBLEtBQUEsSUFBQSxVQUNBLGFBQUEsS0FBQSxJQUFBLGlCQUVBLE9BQ0EsTUFBQSxLQUFBLElBQUEsbUJBQ0EsTUFBQSxLQUFBLElBQUEsV0FDQSxVQUFBLEtBQUEsSUFBQSx3QkFJQSxrQkFBQSxXQUNBLE9BQ0EsWUFBQSxFQUNBLFVBQ0EsS0FBQSxLQUFBLElBQUEsZUFDQSxhQUFBLEtBQUEsSUFBQSxnQkFDQSxVQUFBLEtBQUEsSUFBQSxzQkFDQSxPQUFBLEtBQUEsSUFBQSxVQUNBLGFBQUEsS0FBQSxJQUFBLDBCQUVBLE9BQ0EsTUFBQSxLQUFBLElBQUEsbUJBQ0EsTUFBQSxLQUFBLElBQUEsV0FDQSxVQUFBLEtBQUEsSUFBQSx3QkFJQSxXQUFBLFdBQUEsR0FBQSxHQUFBLElBQ0EsT0FBQSxNQUFBLE9BQUEsTUFBQSxXQUFBLE9BQUEsU0FBQSxHQUFBLE1BQUEsR0FBQSxlQUFBLEVBQUEsZUFBQSxJQUFBLFNBQUEsR0FDQSxPQUNBLEtBQUEsRUFBQSxLQUNBLGFBQUEsRUFBQSxhQUNBLFNBQUEsRUFBQSxTQUNBLE9BQUEsRUFBQSxRQUFBLEVBQUEsT0FBQSxLQUNBLFVBQUEsRUFBQSxXQUFBLEVBQUEsVUFBQSxVQUNBLGFBQUEsRUFBQSxpQkFJQSxRQUFBLFdBQ0EsSUFBQSxHQUFBLEdBQUEsRUFBQSxFQUFBLEtBQUEsT0FBQSxNQUFBLGlCQUFBLE9BQUEsRUFBQSxFQUFBLElBQ0EsR0FBQSxLQUFBLE9BQUEsTUFBQSxpQkFBQSxHQUFBLGVBQUEsS0FBQSxhQVFBLE1BUEEsTUFBQSxPQUFBLE9BQUEsZ0JBQ0EsU0FBQSxHQUNBLE1BQUEsS0FBQSxPQUFBLE1BQUEsaUJBQUEsR0FBQSxpQkFDQSxZQUFBLEdBQ0EsZUFBQSxJQUVBLEtBQUEsc0JBQUEsS0FBQSxPQUFBLE1BQUEsaUJBQUEsR0FBQSxzQkFDQSxLQUFBLE9BQUEsTUFBQSxpQkFBQSxFQUtBLFFBQ0EsV0FDQSxrQkFHQSxlQUFBLFdBQ0EsSUFBQSxHQUFBLEdBQUEsRUFBQSxFQUFBLEtBQUEsT0FBQSxNQUFBLHVCQUFBLE9BQUEsRUFBQSxFQUFBLElBQ0EsR0FBQSxLQUFBLE9BQUEsTUFBQSx1QkFBQSxHQUFBLGVBQUEsS0FBQSxhQUNBLE1BQUEsTUFBQSxPQUFBLE1BQUEsdUJBQUEsRUFLQSxZQUdBLFNBQ0EsT0FBQSxXQUFBLEdBQUEsR0FBQSxJQUFBLFFBQUEsRUFBQSxFQUFBLFNBQUEsRUFBQSxRQUFBLEtBQUEsUUFBQSxLQUFBLE1BQUEsR0FBQSxRQUFBLEtBQUEsU0FBQSxHQUFBLE9BQUEsT0FBQSxFQUFBLEtBQUEsRUFBQSxNQUFBLElBQUEsR0FBQSxNQUNBLEdBQUEsY0FBQSxFQURBLEVBQUEsT0FBQSxTQUFBLEVBQUEsS0FBQSwyQkFBQSxFQUFBLFNBQUEsYUFBQSxFQUFBLFVBQUEsS0FBQSxTQUFBLEdBR0EsRUFBQSxjQUFBLEVBR0EsTUFBQSxFQUFBLE9BQ0EsRUFBQSxXQUFBLEVBQUEsT0FBQSxRQUlBLE1BQUEsRUFBQSxPQUNBLEVBQUEscUJBQUEsRUFDQSxFQUFBLE9BQUEsU0FBQSxxQkFBQSxFQUFBLGNBQ0EsRUFBQSxXQUFBLEtBZEEsS0FBQSxHQUFBLElBQUEsTUFBQSxNQUFBLEdBQUEsU0FBQSxFQUFBLFNBcUJBLGVBQUEsV0FDQSxLQUFBLGlCQUFBLEVBQ0EsS0FBQSxVQUFBLFdBQ0EsR0FBQSxHQUFBLFNBQUEsZUFBQSxXQUNBLEdBQUEsUUFDQSxFQUFBLE1BQUEsT0FBQSxFQUFBLGFBQUEsUUFJQSxZQUFBLFNBQUEsR0FDQSxLQUFBLGNBQUEsRUFDQSxLQUFBLGlCQUFBLEVBQ0EsS0FBQSxzQkFBQSxFQUFBLE9BQUEsS0FDQSxJQUFBLEdBQUEsRUFBQSxNQUNBLEdBQUEsTUFBQSxPQUFBLE9BQ0EsRUFBQSxNQUFBLE9BQUEsRUFBQSxhQUFBLE1BR0EsS0FBQSxXQUFBLEdBQUEsR0FBQSxJQUFBLFFBQUEsRUFBQSxFQUFBLFNBQUEsRUFBQSxRQUFBLEtBQUEsUUFBQSxLQUFBLEdBQUEsRUFBQSxPQUFBLEdBQUEsUUFBQSxLQUFBLFNBQUEsR0FBQSxPQUFBLE9BQUEsRUFBQSxLQUFBLEVBQUEsTUFBQSxJQUFBLEdBQUEsTUFDQSxHQUFBLGNBQUEsRUFFQSxHQUNBLHNCQUFBLEVBQUEsdUJBSkEsRUFBQSxPQUFBLFNBQUEsRUFBQSxLQUFBLCtCQUFBLEVBQUEsYUFBQSxHQUFBLEtBQUEsU0FBQSxHQVVBLE1BQUEsRUFBQSxNQUFBLE1BQUEsRUFBQSxPQUNBLFFBQUEsTUFBQSxFQUFBLE9BQUEsUUFDQSxFQUFBLG1CQUFBLEdBR0EsTUFBQSxFQUFBLE9BQ0EsRUFBQSxtQkFBQSxFQUNBLEVBQUEsT0FBQSxTQUFBLHFCQUFBLEVBQUEsZUFHQSxFQUFBLGlCQUFBLEVBRUEsV0FBQSxXQUNBLEVBQUEsaUJBQUEsRUFDQSxFQUFBLGlCQUFBLEVBQUEsa0JBQ0EsRUFBQSxlQUFBLEVBQUEsbUJBQ0EsT0ExQkEsS0FBQSxHQUFBLElBQUEsTUFBQSxNQUFBLEdBQUEsU0FBQSxFQUFBLFVBZ0NBLFFBQUEsV0FLQSxLQUFBLGtCQUFBLEtBQUEsWUFBQSxTQUFBLE9BQUEsT0FBQSxvQkFBQSxLQUFBLE9BQUEsTUFBQSxLQUFBLE1BS0EsS0FBQSw0QkFBQSxLQUFBLFlBQUEsU0FBQSxPQUFBLE9BQUEsa0JBQUEsS0FBQSxPQUFBLE1BQUEsS0FBQSxNQUtBLEtBQUEsYUFBQSxLQUFBLE9BQUEsT0FBQSxhQUVBLEtBQUEscUJBQUEsRUFDQSxLQUFBLE9BQUEsU0FBQSxxQkFBQSxLQUFBLGNBQ0EsS0FBQSxPQUFBLFNBQUEsNEJBQUEsS0FBQSxjQUNBLEtBQUEsT0FBQSxTQUFBLHFCQUNBLEtBQUEsT0FBQSxTQUFBLGlCQUNBLGFBQUEsS0FBQSxlQUdBLEtBQUEsT0FBQSxPQUFBLGdCQUNBLFNBQUEsR0FDQSxNQUFBLEdBQ0EsWUFBQSxHQUNBLGVBQUEsd1VBcllBLGlCQUFBLE9BQUEsV0FBQSxHQUFBLEdBQUEsS0FBQSxFQUFBLEVBQUEsZUFBQSxFQUFBLEVBQUEsTUFBQSxJQUFBLENBQUEsT0FBQSxHQUFBLHVCQUFBLEVBQUEsUUFBQSxhQUFBLEVBQUEsT0FBQSxPQUFBLElBQUEsRUFBQSxRQUFBLGdCQUFBLEVBQUEsS0FBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLE1BQUEsRUFBQSxHQUFBLEVBQUEsR0FBQSxFQUFBLElBQUEscURBQUEsRUFBQSxHQUFBLEtBQUEsRUFBQSxPQUFBLFlBQUEsUUFBQSxFQUFBLE9BQUEsWUFBQSx1QkFBQSxFQUFBLFNBQUEsWUFBQSxVQUFBLEVBQUEsTUFBQSxFQUFBLE1BQUEsWUFBQSxxQkFBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsSUFBQSxpQkFBQSxPQUFBLEVBQUEsR0FBQSxLQUFBLEVBQUEsTUFBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsUUFBQSxtQkFBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLFFBQUEsc0JBQUEsRUFBQSxRQUFBLHFCQUFBLFVBQUEsRUFBQSxNQUFBLEVBQUEsTUFBQSxZQUFBLHFCQUFBLEVBQUEsR0FBQSxFQUFBLEdBQUEsRUFBQSxJQUFBLHFCQUFBLE9BQUEsRUFBQSxHQUFBLEtBQUEsRUFBQSxNQUFBLEVBQUEsR0FBQSxFQUFBLEdBQUEsRUFBQSxRQUFBLHFCQUFBLGdCQUFBLEVBQUEsS0FBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLFFBQUEsY0FBQSxFQUFBLFFBQUEsYUFBQSxVQUFBLEVBQUEsTUFBQSxFQUFBLE1BQUEsWUFBQSxxQkFBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsSUFBQSxzQ0FBQSxPQUFBLEVBQUEsR0FBQSxLQUFBLEVBQUEsTUFBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsUUFBQSxhQUFBLGdCQUFBLEVBQUEsS0FBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLFFBQUEsV0FBQSxFQUFBLFFBQUEsVUFBQSxVQUFBLEVBQUEsTUFBQSxFQUFBLE1BQUEsWUFBQSxxQkFBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsSUFBQSxxQkFBQSxPQUFBLEVBQUEsR0FBQSxLQUFBLEVBQUEsTUFBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsUUFBQSxVQUFBLGdCQUFBLEVBQUEsS0FBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLFFBQUEsbUJBQUEsRUFBQSxRQUFBLGtCQUFBLFVBQUEsRUFBQSxNQUFBLEVBQUEsTUFBQSxZQUFBLHFCQUFBLEVBQUEsR0FBQSxFQUFBLEdBQUEsRUFBQSxJQUFBLHNCQUFBLE9BQUEsRUFBQSxHQUFBLEtBQUEsRUFBQSxNQUFBLEVBQUEsR0FBQSxFQUFBLEdBQUEsRUFBQSxRQUFBLGtCQUFBLGdCQUFBLEVBQUEsS0FBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLE1BQUEsRUFBQSxNQUFBLFlBQUEscUJBQUEsRUFBQSxHQUFBLEVBQUEsR0FBQSxFQUFBLElBQUEsWUFBQSxPQUFBLEVBQUEsR0FBQSxLQUFBLEVBQUEsUUFBQSxxQkFBQSxFQUFBLE1BQUEsRUFBQSxHQUFBLEVBQUEsR0FBQSxFQUFBLFFBQUEseUJBQUEsRUFBQSxNQUFBLEVBQUEsR0FBQSxFQUFBLEdBQUEsRUFBQSxRQUFBLGtCQUFBLEVBQUEsR0FBQSxLQUFBLEVBQUEsTUFBQSxFQUFBLE1BQUEsWUFBQSxxQkFBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsSUFBQSxZQUFBLE9BQUEsRUFBQSxHQUFBLEtBQUEsRUFBQSxNQUFBLEVBQUEsR0FBQSxFQUFBLEdBQUEsRUFBQSxRQUFBLFFBQUEsV0FBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLE1BQUEsRUFBQSxNQUFBLFlBQUEsd0JBQUEsRUFBQSxHQUFBLEVBQUEsR0FBQSxFQUFBLElBQUEsMEJBQUEsT0FBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLE1BQUEsRUFBQSxPQUFBLFlBQUEsbUNBQUEsRUFBQSxnQkFBQSxFQUFBLE9BQUEsWUFBQSxpQ0FBQSxFQUFBLFlBQUEsWUFBQSwwQ0FBQSxPQUFBLEdBQUEsWUFBQSxVQUFBLE1BQUEsRUFBQSx1QkFBQSxJQUFBLE1BQUEsRUFBQSxlQUFBLEVBQUEsR0FBQSxLQUFBLEVBQUEsT0FBQSxZQUFBLFdBQUEsRUFBQSxVQUFBLFlBQUEsMkJBQUEsTUFBQSxFQUFBLGdCQUFBLFVBQUEsWUFBQSxPQUFBLFNBQUEsRUFBQSxjQUFBLElBQUEsTUFBQSxFQUFBLFFBQUEsRUFBQSxHQUFBLHlCQUFBLEVBQUEsR0FBQSxFQUFBLElBQUEsU0FBQSwwQkFBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLE9BQUEsWUFBQSxnQkFBQSxNQUFBLEVBQUEsZ0JBQUEsVUFBQSxjQUFBLEVBQUEsR0FBQSx5QkFBQSxFQUFBLEdBQUEsRUFBQSxrQkFBQSxFQUFBLElBQUEscUJBQUEsRUFBQSxJQUFBLGlCQUFBLDhCQUFBLEVBQUEsT0FBQSxZQUFBLGNBQUEsRUFBQSxPQUFBLEVBQUEsR0FBQSxFQUFBLEdBQUEsRUFBQSxRQUFBLDRCQUFBLEVBQUEsR0FBQSxLQUFBLEVBQUEsT0FBQSxZQUFBLHdCQUFBLEVBQUEsMEJBQUEsRUFBQSxRQUFBLFlBQUEsMkJBQUEsT0FBQSxLQUFBLFVBQUEsSUFBQSxNQUFBLEVBQUEsa0JBQUEsRUFBQSxlQUFBLEVBQUEsR0FBQSxLQUFBLEVBQUEsUUFBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLE9BQUEsWUFBQSx1QkFBQSxFQUFBLFFBQUEsWUFBQSxFQUFBLEtBQUEsWUFBQSxpQkFBQSxPQUFBLEtBQUEsRUFBQSxRQUFBLFlBQUEsT0FBQSxZQUFBLEVBQUEsR0FBQSxhQUFBLEVBQUEsR0FBQSxFQUFBLElBQUEsbURBQUEsY0FBQSxFQUFBLFNBQUEsRUFBQSxHQUFBLEtBQUEsRUFBQSxnQkFBQSxFQUFBLE9BQUEsWUFBQSxpQkFBQSxFQUFBLE9BQUEsWUFBQSxRQUFBLEVBQUEsT0FBQSxZQUFBLHVCQUFBLEVBQUEsVUFBQSxZQUFBLGlCQUFBLE9BQUEsT0FBQSxVQUFBLElBQUEsTUFBQSxTQUFBLEdBQUEsRUFBQSxxQkFBQSxFQUFBLEVBQUEsV0FBQSxFQUFBLGNBQUEsRUFBQSxHQUFBLGVBQUEsRUFBQSxHQUFBLEVBQUEsSUFBQSxnREFBQSxvQkFBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLE9BQUEsWUFBQSxRQUFBLEVBQUEsT0FBQSxZQUFBLHVCQUFBLEVBQUEsb0JBQUEsRUFBQSxPQUFBLFlBQUEsWUFBQSxFQUFBLE9BQUEsWUFBQSxZQUFBLEVBQUEsR0FBQSxpQkFBQSxFQUFBLEdBQUEsRUFBQSxJQUFBLG1EQUFBLG9CQUFBLEVBQUEsT0FBQSxZQUFBLHdCQUFBLEVBQUEsVUFBQSxFQUFBLE9BQUEsWUFBQSxjQUFBLEVBQUEsTUFBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsSUFBQSxrREFBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLFVBQUEsT0FBQSxPQUFBLEVBQUEsT0FBQSxZQUFBLEVBQUEsU0FBQSxjQUFBLEVBQUEsY0FBQSxFQUFBLE9BQUEsWUFBQSxvQkFBQSxPQUFBLEtBQUEsV0FBQSxLQUFBLFlBQUEsRUFBQSxVQUFBLFlBQUEsaUJBQUEsT0FBQSxTQUFBLEVBQUEsYUFBQSxLQUFBLFVBQUEsSUFBQSxNQUFBLEVBQUEsVUFBQSxFQUFBLEdBQUEsdUJBQUEsRUFBQSxHQUFBLEVBQUEsSUFBQSxzQkFBQSw2QkFBQSxHQUFBLEVBQUEsYUFBQSxFQUFBLEtBQUEsRUFBQSxHQUFBLEtBQUEsRUFBQSxXQUFBLE9BQUEsRUFBQSxPQUFBLEVBQUEsTUFBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsSUFBQSxrQkFBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLGtCQUFBLE9BQUEsUUFBQSxFQUFBLFFBQUEsS0FBQSxFQUFBLHVCQUFBLFFBQUEsRUFBQSxTQUFBLFlBQUEsRUFBQSxLQUFBLElBQUEsT0FBQSxHQUFBLFNBQUEsR0FBQSxNQUFBLEdBQUEsZUFBQSxPQUFBLElBQUEsS0FBQSxZQUFBLFFBQUEsR0FBQSxFQUFBLElBQUEsVUFBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsSUFBQSxZQUFBLE1BQUEsRUFBQSxlQUFBLEdBQUEsRUFBQSxRQUFBLGlCQUFBOzs7c1BDMkJBLEVBQUEsUUFBQSx1QkFDQSxFQUFBLFFBQUEsdUJBQ0EsRUFBQSxRQUFBLGlCQUNBLEVBQUEsUUFBQSxrQ0FHQSxLQUFBLHVCQUNBLFlBQ0EsU0FBQSxFQUFBLFNBRUEsS0FBQSxXQUNBLE9BQ0EsY0FDQSxZQUNBLFlBQ0EsYUFBQSxHQUNBLFVBQUEsR0FDQSxrQkFBQSxHQUNBLGdCQUFBLEdBQ0EsUUFBQSxHQUNBLGVBQUEsR0FDQSxhQUFBLElBRUEsa0JBQUEsRUFDQSxXQUFBLEdBQ0EsZUFBQSxtQkFBQSxlQUFBLGdDQUFBLGNBQUEscUJBQUEsV0FDQSxTQUFBLG1CQUFBLGVBQUEsdUJBQUEsY0FBQSxZQUFBLFdBQ0EsVUFBQSxtQkFBQSxlQUFBLHVCQUFBLGNBQUEsWUFBQSxXQUNBLFlBQUEsbUJBQUEsZUFBQSx1QkFBQSxjQUFBLFlBQUEsV0FDQSxTQUFBLE9BR0EsVUFDQSxhQUFBLFdBRUEsTUFBQSxNQUFBLG1CQUtBLEtBQUEsZUFDQSxNQUFBLEtBQUEsV0FBQSxhQUNBLE1BQUEsS0FBQSxJQUFBLGdCQUNBLEtBQUEsU0FFQSxLQUFBLG9CQUNBLE1BQUEsS0FBQSxXQUFBLGtCQUFBLEdBQUEsTUFBQSxLQUFBLFdBQUEsbUJBQUEsR0FDQSxNQUFBLEtBQUEsSUFBQSxxQkFDQSxLQUFBLFNBRUEsS0FBQSxrQkFDQSxNQUFBLEtBQUEsV0FBQSxnQkFBQSxHQUFBLE1BQUEsS0FBQSxXQUFBLGlCQUFBLEdBQ0EsTUFBQSxLQUFBLElBQUEsbUJBQ0EsS0FBQSxTQUVBLEtBQUEsWUFDQSxNQUFBLEtBQUEsV0FBQSxVQUNBLE1BQUEsS0FBQSxJQUFBLGdCQUNBLFFBQUEsS0FBQSxtQkFDQSxLQUFBLFdBRUEsS0FBQSxVQUNBLE1BQUEsS0FBQSxXQUFBLFFBQ0EsTUFBQSxLQUFBLElBQUEsV0FDQSxRQUFBLEtBQUEsZUFDQSxLQUFBLFdBRUEsS0FBQSxpQkFDQSxNQUFBLEtBQUEsV0FBQSxlQUFBLEdBQUEsTUFBQSxLQUFBLFdBQUEsZ0JBQUEsR0FDQSxNQUFBLEtBQUEsSUFBQSxrQkFDQSxLQUFBLFNBRUEsS0FBQSxlQUNBLE1BQUEsS0FBQSxXQUFBLGFBQUEsR0FBQSxNQUFBLEtBQUEsV0FBQSxjQUFBLEdBQ0EsTUFBQSxLQUFBLElBQUEsZ0JBQ0EsS0FBQSxhQUdBLGVBQUEsV0FDQSxHQUFBLE1BQ0EsSUFtQkEsT0FqQkEsR0FBQSxNQUNBLE1BQUEsR0FDQSxLQUFBLE9BR0EsS0FBQSxPQUFBLE1BQUEsaUJBQUEsUUFBQSxTQUFBLElBQ0EsSUFBQSxFQUFBLFFBQUEsRUFBQSxRQUFBLGVBRUEsRUFBQSxNQUNBLE1BQUEsRUFBQSxRQUFBLFlBQ0EsS0FBQSxFQUFBLFFBQUEsT0FHQSxFQUFBLEtBQUEsRUFBQSxRQUFBLGdCQUdBLEVBQUEsS0FBQSxTQUFBLEVBQUEsR0FBQSxNQUFBLEdBQUEsS0FBQSxFQUFBLEtBQUEsR0FBQSxJQUNBLEdBRUEsbUJBQUEsV0FDQSxHQUFBLE1BQ0EsSUFxQkEsT0FuQkEsR0FBQSxNQUNBLE1BQUEsR0FDQSxLQUFBLE9BR0EsS0FBQSxPQUFBLE1BQUEsaUJBQUEsUUFBQSxTQUFBLElBQ0EsSUFBQSxFQUFBLFFBQUEsRUFBQSxxQkFBQSxPQUFBLEVBQUEsdUJBRUEsT0FBQSxFQUFBLG9CQUNBLEVBQUEsTUFDQSxNQUFBLEVBQUEsbUJBQ0EsS0FBQSxFQUFBLHVCQUlBLEVBQUEsS0FBQSxFQUFBLHVCQUdBLEVBQUEsS0FBQSxTQUFBLEVBQUEsR0FBQSxNQUFBLEdBQUEsS0FBQSxFQUFBLEtBQUEsR0FBQSxJQUNBLEdBRUEsWUFBQSxXQUNBLEdBQUEsS0FjQSxPQVpBLE1BQUEsT0FBQSxNQUFBLGlCQUFBLFFBQUEsU0FBQSxHQUNBLEdBQUEsR0FBQSxLQUFBLE9BQUEsRUFBQSxFQUFBLFNBQUEsR0FDQSxHQUFBLFlBQUEsRUFBQSxRQUFBLFlBQ0EsRUFBQSxRQUFBLEVBQUEsUUFBQSxLQUNBLEVBQUEsOEJBQUEsRUFBQSxhQUFBLFVBQ0EsRUFBQSxxQkFBQSxFQUFBLGFBQUEsS0FDQSxFQUFBLG1CQUFBLEVBQUEsVUFBQSxVQUNBLEVBQUEsVUFBQSxFQUFBLFVBQUEsS0FDQSxFQUFBLFlBQUEsSUFBQSxFQUFBLHFCQUFBLEVBQUEscUJBQUEsRUFBQSxZQUNBLEVBQUEsS0FBQSxLQUdBLEdBRUEsUUFBQSxXQUNBLE9BQ0EsWUFBQSxFQUNBLFVBQ0EsaUJBQUEsS0FBQSxJQUFBLGdCQUNBLGFBQUEsS0FBQSxJQUFBLGdCQUNBLHFCQUFBLEtBQUEsSUFBQSxxQ0FDQSxZQUFBLEtBQUEsSUFBQSxXQUNBLFFBQUEsS0FBQSxJQUFBLFdBQ0EsVUFBQSxLQUFBLElBQUEscUJBRUEsT0FDQSxNQUFBLEtBQUEsSUFBQSxtQkFDQSxNQUFBLEtBQUEsSUFBQSxXQUNBLFVBQUEsS0FBQSxJQUFBLHNCQUVBLEtBQUEscUJBSUEsYUFBQSxXQUFBLEdBQUEsR0FBQSxLQUdBLEdBREEsS0FBQSxPQUFBLE1BQUEsVUFBQSxXQUNBLEtBQUEsWUFDQSxNQUFBLFVBRUEsT0FBQSxHQUFBLE9BQUEsU0FBQSxHQUNBLElBQUEsR0FBQSxLQUFBLEdBQUEsV0FDQSxPQUFBLEdBQ0EsSUFBQSxlQUNBLEdBQUEsRUFBQSxXQUFBLGFBQUEsQ0FJQSxJQUhBLEdBQUEsUUFBQSxFQUFBLFdBQUEsYUFBQSxLQUdBLEtBQUEsRUFBQSxjQUNBLE9BQUEsRUFHQSxLQUNBLEtBQUEsb0JBQ0EsR0FBQSxFQUFBLFdBQUEscUJBRUEsRUFBQSxzQkFBQSxFQUFBLFdBQUEsbUJBQUEsRUFBQSxxQkFBQSxFQUFBLFdBQUEsbUJBQ0EsT0FBQSxDQUdBLE1BQ0EsS0FBQSxrQkFDQSxHQUFBLEVBQUEsV0FBQSxtQkFFQSxFQUFBLHNCQUFBLEVBQUEsV0FBQSxpQkFBQSxFQUFBLHFCQUFBLEVBQUEsV0FBQSxpQkFDQSxPQUFBLENBR0EsTUFDQSxLQUFBLGlCQUNBLEdBQUEsRUFBQSxXQUFBLGtCQUVBLEVBQUEsV0FBQSxFQUFBLFdBQUEsZ0JBQUEsRUFBQSxVQUFBLEVBQUEsV0FBQSxnQkFDQSxPQUFBLENBR0EsTUFDQSxLQUFBLGVBQ0EsR0FBQSxFQUFBLFdBQUEsZ0JBRUEsRUFBQSxXQUFBLEVBQUEsV0FBQSxjQUFBLEVBQUEsVUFBQSxFQUFBLFdBQUEsY0FDQSxPQUFBLENBR0EsTUFDQSxLQUFBLFlBRUEsR0FBQSxFQUFBLFdBQUEsV0FBQSxFQUFBLHFCQUFBLEVBQUEsV0FBQSxVQUNBLE9BQUEsQ0FFQSxNQUNBLEtBQUEsVUFFQSxHQUFBLEVBQUEsV0FBQSxTQUFBLEVBQUEsY0FBQSxFQUFBLFdBQUEsUUFDQSxPQUFBLEVBT0EsT0FBQSxLQUlBLGNBQUEsV0FDQSxNQUFBLE1BQUEsV0FHQSxTQUVBLGVBQUEsU0FBQSxHQUNBLEdBQ0EsSUFDQSxhQUFBLEVBQUEsYUFDQSxVQUFBLEVBQUEsVUFBQSxFQUFBLFVBQUEsR0FDQSxRQUFBLEVBQUEsUUFBQSxFQUFBLFFBQUEsR0FDQSxrQkFBQSxHQUNBLGdCQUFBLEdBQ0EsZUFBQSxHQUNBLGFBQUEsR0FHQSxJQUFBLEVBQUEsa0JBQUEsQ0FDQSxHQUFBLElBQUEsRUFBQSxFQUFBLFNBQUEsRUFBQSxtQkFBQSxPQVpBLFVBYUEsR0FBQSxrQkFBQSxNQUVBLEdBQUEsa0JBQUEsRUFHQSxJQUFBLEVBQUEsZ0JBQUEsQ0FDQSxHQUFBLElBQUEsRUFBQSxFQUFBLFNBQUEsRUFBQSxpQkFBQSxPQW5CQSxVQW9CQSxHQUFBLGdCQUFBLE1BRUEsR0FBQSxnQkFBQSxFQUdBLElBQUEsRUFBQSxlQUFBLENBQ0EsR0FBQSxJQUFBLEVBQUEsRUFBQSxTQUFBLEVBQUEsZ0JBQUEsT0ExQkEsVUEyQkEsR0FBQSxlQUFBLE1BRUEsR0FBQSxlQUFBLEVBR0EsSUFBQSxFQUFBLGFBQUEsQ0FDQSxHQUFBLElBQUEsRUFBQSxFQUFBLFNBQUEsRUFBQSxjQUFBLE9BakNBLFVBa0NBLEdBQUEsYUFBQSxNQUVBLEdBQUEsYUFBQSxFQUdBLE1BQUEsaUJBQUEsR0FDQSxLQUFBLFlBQ0EsS0FBQSxNQUFBLE1BQUEsUUFBQSxJQUdBLGlCQUFBLFNBQUEsR0FBQSxHQUFBLEdBQUEsTUFDQSxFQUFBLEVBQUEsU0FBQSxHQUFBLFFBQUEsU0FBQSxHQUNBLEVBQUEsV0FBQSxHQUFBLEVBQUEsTUFHQSxVQUFBLFdBQUEsR0FBQSxHQUFBLEtBQ0EsTUFHQSxFQUFBLEVBQUEsU0FBQSxLQUFBLFlBQUEsUUFBQSxTQUFBLEdBQ0EsR0FBQSxHQUFBLEVBQUEsV0FBQSxFQUNBLE1BQUEsSUFDQSxFQUFBLEdBQUEsS0FJQSxLQUFBLG9CQUNBLEVBQUEsRUFBQSxTQUFBLEdBQUEsT0FDQSxLQUFBLFFBQUEsU0FBQSxPQUFBLFFBQUEsRUFBQSxRQUFBLFVBQUEsTUFLQSxLQUFBLFFBQUEsU0FBQSxXQUFBLE1BQUEsU0FBQSxRQUtBLFdBQUEsWUFDQSxFQUFBLEVBQUEsU0FBQSxrQkFBQSxZQUFBLGlCQUdBLFFBQUEsV0FFQSxHQUFBLEdBQUEsS0FBQSxPQUFBLE1BQUEsT0FFQSxJQUFBLEVBQUEsQ0FDQSxHQUFBLEdBQUEsRUFBQSxRQUFBLE1BQUEsRUFDQSxJQUNBLEtBQUEsaUJBQUEsR0FJQSxLQUFBLGtCQUFBLEVBRUEsS0FBQSxPQUFBLFNBQUEsc0JBQUEsS0FBQSxPQUFBLE1BQUEsS0FBQSxRQUFBLElBQUEsS0FBQSxZQUVBLEVBQUEsRUFBQSxTQUFBLFlBQUEsU0FJQSxLQUFBLE9BQUEsT0FBQSxnQkFDQSxTQUFBLEdBQ0EsTUFBQSxLQUFBLElBQUEsOENBQ0EsWUFBQSxLQUFBLElBQUEsb0RBQ0EsZUFBQSxLQUdBLEVBQUEsRUFBQSxTQUFBLFFBQUEsU0FBQSxNQUNBLEVBQUEsRUFBQSxTQUFBLHVCQUFBLFFBQUEsWUFBQSxTQUFBLGdDQUtBLEVBQUEsRUFBQSxTQUFBLFFBQUEsT0FBQSxZQUNBLEVBQUEsRUFBQSxTQUFBLFFBQUEsU0FBQSxLQUNBLEVBQUEsRUFBQSxTQUFBLHVCQUFBLFFBQUEsWUFBQSxTQUFBLGdDQUlBLEVBQUEsRUFBQSxTQUFBLHVCQUFBLFFBQUEsWUFBQSxZQUFBLHFXQTlYQSxpQkFBQSxPQUFBLFdBQUEsR0FBQSxHQUFBLEtBQUEsRUFBQSxFQUFBLGVBQUEsRUFBQSxFQUFBLE1BQUEsSUFBQSxDQUFBLE9BQUEsR0FBQSxzQkFBQSxFQUFBLE9BQUEsWUFBQSxxQkFBQSxPQUFBLEtBQUEsaUJBQUEsSUFBQSxNQUFBLEVBQUEsWUFBQSxLQUFBLGtCQUFBLEVBQUEsR0FBQSxFQUFBLEdBQUEsRUFBQSxJQUFBLHFCQUFBLEVBQUEsR0FBQSxLQUFBLEVBQUEsT0FBQSxZQUFBLDRCQUFBLE9BQUEsS0FBQSxXQUFBLEtBQUEsWUFBQSxFQUFBLFVBQUEsT0FBQSxPQUFBLEVBQUEsYUFBQSxZQUFBLEVBQUEsU0FBQSxjQUFBLEVBQUEsV0FBQSxZQUFBLEVBQUEsbUJBQUEsR0FBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLE9BQUEsWUFBQSxjQUFBLGFBQUEsTUFBQSxRQUFBLGdCQUFBLFVBQUEsRUFBQSxPQUFBLEVBQUEsR0FBQSxFQUFBLEdBQUEsS0FBQSxJQUFBLGVBQUEsRUFBQSxHQUFBLEtBQUEsRUFBQSxPQUFBLFlBQUEseUNBQUEsYUFBQSxNQUFBLFdBQUEsRUFBQSxPQUFBLFlBQUEsMkVBQUEsRUFBQSxRQUFBLFlBQUEsb0RBQUEsRUFBQSxHQUFBLEVBQUEsR0FBQSxFQUFBLGtCQUFBLEVBQUEsR0FBQSxLQUFBLEVBQUEsVUFBQSxhQUFBLEtBQUEsUUFBQSxRQUFBLFVBQUEsTUFBQSxFQUFBLFNBQUEsV0FBQSxhQUFBLFlBQUEsMkZBQUEsSUFBQSxRQUFBLFNBQUEsR0FBQSxHQUFBLEdBQUEsTUFBQSxVQUFBLE9BQUEsS0FBQSxFQUFBLE9BQUEsUUFBQSxTQUFBLEdBQUEsTUFBQSxHQUFBLFdBQUEsSUFBQSxTQUFBLEdBQUEsTUFBQSxVQUFBLEdBQUEsRUFBQSxPQUFBLEVBQUEsT0FBQSxHQUFBLFNBQUEsRUFBQSxPQUFBLFNBQUEsRUFBQSxFQUFBLElBQUEsU0FBQSxHQUFBLE1BQUEsR0FBQSxNQUFBLE1BQUEsU0FBQSxFQUFBLE9BQUEsWUFBQSxFQUFBLFVBQUEsT0FBQSxLQUFBLEdBQUEsTUFBQSxRQUFBLEVBQUEsR0FBQSxRQUFBLEVBQUEsR0FBQSxLQUFBLEVBQUEsVUFBQSxPQUFBLEtBQUEsR0FBQSxNQUFBLFFBQUEsRUFBQSxHQUFBLGdCQUFBLEVBQUEsR0FBQSxLQUFBLEVBQUEsa0JBQUEsSUFBQSxRQUFBLE9BQUEsUUFBQSxFQUFBLFFBQUEsS0FBQSxFQUFBLGFBQUEsUUFBQSxFQUFBLFNBQUEsWUFBQSxFQUFBLEtBQUEsSUFBQSxlQUFBLEdBQUEsU0FBQSxHQUFBLE1BQUEsR0FBQSxlQUFBLE9BQUEsSUFBQSxLQUFBLG1CQUFBLFFBQUEsYUFBQSxFQUFBLElBQUEsa0JBQUEsRUFBQSxHQUFBLEVBQUEsR0FBQSxFQUFBLElBQUEsb0JBQUEsSUFBQSx1QkFBQSxHQUFBLFNBQUEsR0FBQSxNQUFBLEdBQUEsVUFBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsSUFBQSx3Q0FBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLE9BQUEsWUFBQSxhQUFBLElBQUEsaUJBQUE7OztnUENpQkEsRUFBQSxRQUFBLHdDQUdBLFlBQ0EsU0FBQSxFQUFBLFNBRUEsS0FBQSxrQkFDQSxLQUFBLFdBQ0EsT0FDQSxjQUNBLFlBQ0EsZ0JBQUEsRUFDQSxjQUFBLElBR0EsVUFDQSxPQUFBLFdBQ0EsTUFBQSxNQUFBLE9BQUEsUUFBQSx1QkFFQSxLQUFBLEtBQ0EsTUFBQSxLQUFBLE9BQUEsTUFBQSxLQUFBLEtBQUEsR0FDQSxNQUFBLEtBQUEsSUFBQSxhQUNBLEtBQUEsV0FFQSxLQUFBLE9BQ0EsTUFBQSxLQUFBLE9BQUEsTUFBQSxLQUFBLEtBQ0EsTUFBQSxLQUFBLElBQUEsUUFDQSxLQUFBLFdBRUEsS0FBQSxZQUNBLE1BQUEsS0FBQSxPQUFBLE1BQUEsS0FBQSxLQUFBLFVBQ0EsTUFBQSxLQUFBLElBQUEsYUFDQSxLQUFBLFNBRUEsS0FBQSxXQUNBLE1BQUEsS0FBQSxPQUFBLE1BQUEsS0FBQSxLQUFBLFNBQ0EsTUFBQSxLQUFBLElBQUEsWUFDQSxLQUFBLFNBRUEsS0FBQSxRQUNBLE1BQUEsS0FBQSxPQUFBLE1BQUEsS0FBQSxLQUFBLE1BQ0EsTUFBQSxLQUFBLElBQUEsU0FDQSxLQUFBLFNBRUEsS0FBQSxVQUNBLE1BQUEsS0FBQSxPQUFBLE1BQUEsS0FBQSxLQUFBLFNBQUEsS0FBQSxPQUFBLE1BQUEsS0FBQSxLQUFBLFFBQUEsYUFBQSxHQUNBLE1BQUEsS0FBQSxJQUFBLFdBQ0EsUUFBQSxLQUFBLE9BQUEsUUFBQSxxQkFDQSxLQUFBLGdCQU9BLFNBQ0EsT0FBQSxXQUFBLEdBQUEsR0FBQSxJQUFBLFFBQUEsRUFBQSxFQUFBLFNBQUEsRUFBQSxRQUFBLEtBQUEsUUFBQSxLQUFBLE1BQUEsR0FBQSxRQUFBLEtBQUEsU0FBQSxHQUFBLE9BQUEsT0FBQSxFQUFBLEtBQUEsRUFBQSxNQUFBLElBQUEsR0FBQSxNQUNBLEdBQUEsY0FBQSxFQURBLEVBQUEsT0FBQSxTQUFBLEVBQUEsS0FBQSxXQUFBLEVBQUEsU0FBQSxHQUFBLEVBQUEsVUFBQSxLQUFBLFNBQUEsR0FJQSxFQUFBLGNBQUEsRUFHQSxNQUFBLEVBQUEsT0FDQSxFQUFBLFdBQUEsRUFBQSxPQUFBLFFBR0EsTUFBQSxFQUFBLE9BQ0EsRUFBQSxPQUFBLE9BQUEsaUJBQUEsRUFBQSxPQUFBLE1BQ0EsRUFBQSxnQkFBQSxLQWJBLEtBQUEsR0FBQSxJQUFBLE1BQUEsTUFBQSxHQUFBLFNBQUEsRUFBQSxVQW1CQSxRQUFBLFdBQ0EsS0FBQSxPQUFBLFNBQUEsb1ZBN0ZBLGlCQUFBLE9BQUEsV0FBQSxHQUFBLEdBQUEsS0FBQSxFQUFBLEVBQUEsZUFBQSxFQUFBLEVBQUEsTUFBQSxJQUFBLENBQUEsT0FBQSxHQUFBLE9BQUEsRUFBQSxlQUFBLEVBQUEsT0FBQSxFQUFBLE1BQUEsVUFBQSxVQUFBLEVBQUEsR0FBQSxFQUFBLElBQUEsK0NBQUEsRUFBQSxPQUFBLEVBQUEsVUFBQSxPQUFBLE9BQUEsRUFBQSxPQUFBLFlBQUEsRUFBQSxTQUFBLGNBQUEsRUFBQSxjQUFBLEVBQUEsT0FBQSxZQUFBLG9CQUFBLE9BQUEsS0FBQSxXQUFBLEtBQUEsWUFBQSxFQUFBLFVBQUEsWUFBQSxpQkFBQSxPQUFBLFNBQUEsRUFBQSxhQUFBLEtBQUEsVUFBQSxJQUFBLE1BQUEsRUFBQSxVQUFBLEVBQUEsR0FBQSxFQUFBLEdBQUEsRUFBQSxJQUFBLDhCQUFBLE1BQUEsaUJBQUE7OztnUENrQkEsRUFBQSxRQUFBLHdDQUdBLFlBQ0EsU0FBQSxFQUFBLFNBRUEsS0FBQSxxQkFDQSxLQUFBLFdBQ0EsT0FDQSxjQUNBLFlBQ0EsY0FBQSxFQUNBLE1BQUEsS0FDQSxjQUFBLElBR0EsVUFDQSxPQUFBLFdBQ0EsUUFDQSxLQUFBLFFBQ0EsTUFBQSxHQUNBLE1BQUEsS0FBQSxJQUFBLFNBQ0EsS0FBQSxXQUVBLEtBQUEsV0FDQSxNQUFBLEdBQ0EsTUFBQSxLQUFBLElBQUEsWUFDQSxLQUFBLFdBSUEsU0FDQSxLQUFBLFdBQUEsR0FBQSxHQUFBLElBQUEsUUFBQSxFQUFBLEVBQUEsU0FBQSxFQUFBLFFBQUEsS0FBQSxRQUFBLEtBQUEsR0FBQSxHQUFBLENBQUEsT0FBQSxHQUFBLFFBQUEsS0FBQSxTQUFBLEdBQUEsT0FBQSxPQUFBLEVBQUEsS0FBQSxFQUFBLE1BQUEsSUFBQSxHQUFBLEdBQ0EsRUFBQSxFQUVBLEVBQUEsY0FBQSxFQUhBLEVBQUEsTUFBQSxDQUFBLEVBQUEsS0FBQSxDQUFBLE9BQUEsTUFBQSxHQUFBLEtBQUEsRUFBQSxFQUFBLEtBQUEsVUFBQSxLQUFBLEdBTUEsRUFBQSxFQUFBLEtBQ0EsTUFBQSxFQUFBLE9BQ0EsRUFBQSxNQUFBLEVBQUEsT0FBQSxNQVJBLEtBQUEsR0FBQSxNQUFBLEdBQUEsT0FBQSxTQUFBLEVBQUEsS0FBQSxnQkFhQSxNQUFBLEVBQUEsTUFDQSxTQUFBLEVBQUEsU0FBQSxXQUZBLEtBQUEsU0FBQSxHQUtBLEVBQUEsY0FBQSxFQUNBLEVBQUEsTUFBQSxHQUdBLE1BQUEsRUFBQSxPQUNBLEVBQUEsV0FBQSxFQUFBLE9BQUEsUUFHQSxNQUFBLEVBQUEsT0FDQSxFQUFBLGNBQUEsS0ExQkEsS0FBQSxHQUFBLElBQUEsTUFBQSxNQUFBLEdBQUEsU0FBQSxFQUFBLFVBK0JBLFFBQUEsV0FBQSxHQUFBLEdBQUEsSUFDQSxNQUFBLEtBQUEsV0FBQSxLQUFBLFNBQUEsR0FDQSxNQUFBLEVBQUEsT0FDQSxFQUFBLE1BQUEsRUFBQSxPQUFBLFNBR0EsS0FBQSxPQUFBLE9BQUEsZ0JBQ0EsU0FBQSxHQUNBLE1BQUEsS0FBQSxJQUFBLCtDQUNBLFlBQUEsR0FDQSxlQUFBLHdVQTNGQSxpQkFBQSxPQUFBLFdBQUEsR0FBQSxHQUFBLEtBQUEsRUFBQSxFQUFBLGVBQUEsRUFBQSxFQUFBLE1BQUEsSUFBQSxDQUFBLE9BQUEsR0FBQSxPQUFBLEVBQUEsYUFBQSxFQUFBLE9BQUEsRUFBQSxHQUFBLFNBQUEsRUFBQSxHQUFBLEVBQUEsSUFBQSw4Q0FBQSxVQUFBLEVBQUEsT0FBQSxFQUFBLFVBQUEsT0FBQSxPQUFBLEVBQUEsT0FBQSxZQUFBLEVBQUEsU0FBQSxjQUFBLEVBQUEsY0FBQSxFQUFBLE9BQUEsT0FBQSxLQUFBLFdBQUEsS0FBQSxZQUFBLEVBQUEsVUFBQSxZQUFBLGlCQUFBLE9BQUEsU0FBQSxFQUFBLGFBQUEsS0FBQSxVQUFBLElBQUEsTUFBQSxFQUFBLFFBQUEsRUFBQSxHQUFBLEVBQUEsR0FBQSxFQUFBLElBQUEsNkJBQUEsTUFBQSxpQkFBQTs7O2dQQ29CQSxFQUFBLFFBQUEsd0NBR0EsWUFDQSxTQUFBLEVBQUEsU0FFQSxLQUFBLHFCQUNBLEtBQUEsV0FDQSxPQUNBLGNBQ0EsWUFDQSxpQkFBQSxFQUNBLE1BQUEsS0FDQSxjQUFBLEVBQ0EsV0FBQSxHQUNBLGNBQUEsSUFHQSxVQUNBLGFBQUEsV0FDQSxPQUFBLEtBQUEsWUFBQSxLQUFBLGNBRUEsT0FBQSxXQUNBLFFBQ0EsS0FBQSxRQUNBLE1BQUEsR0FDQSxNQUFBLEtBQUEsV0FDQSxLQUFBLFdBRUEsS0FBQSxjQUNBLE1BQUEsR0FDQSxNQUFBLEtBQUEsSUFBQSxlQUNBLEtBQUEsc0JBRUEsS0FBQSxxQkFDQSxNQUFBLEdBQ0EsTUFBQSxLQUFBLElBQUEsb0JBQ0EsS0FBQSxlQUlBLFNBQ0EsS0FBQSxXQUFBLEdBQUEsR0FBQSxJQUFBLFFBQUEsRUFBQSxFQUFBLFNBQUEsRUFBQSxRQUFBLEtBQUEsUUFBQSxLQUFBLEdBQUEsRUFBQSxPQUFBLEdBQUEsUUFBQSxLQUFBLFNBQUEsR0FBQSxPQUFBLE9BQUEsRUFBQSxLQUFBLEVBQUEsTUFBQSxJQUFBLEdBQUEsTUFDQSxHQUFBLEVBRUEsRUFBQSxjQUFBLEVBSEEsRUFBQSxPQUFBLFNBQUEsRUFBQSxLQUFBLGdCQU1BLE1BQUEsRUFBQSxXQUNBLFlBQUEsRUFBQSxTQUFBLFlBQ0EsbUJBQUEsRUFBQSxTQUFBLHFCQUhBLEtBQUEsU0FBQSxHQU1BLEVBQUEsY0FBQSxFQUdBLE1BQUEsRUFBQSxPQUNBLEVBQUEsV0FBQSxFQUFBLE9BQUEsT0FFQSxFQUFBLE9BQUEsT0FBQSxRQUNBLEVBQUEsY0FBQSxJQUlBLE1BQUEsRUFBQSxPQUNBLEVBQUEsaUJBQUEsS0F2QkEsS0FBQSxHQUFBLElBQUEsTUFBQSxNQUFBLEdBQUEsU0FBQSxFQUFBLFVBNEJBLFFBQUEsV0FDQSxLQUFBLFdBQUEsS0FBQSxPQUFBLE1BQUEsK1VBM0ZBLGlCQUFBLE9BQUEsV0FBQSxHQUFBLEdBQUEsS0FBQSxFQUFBLEVBQUEsZUFBQSxFQUFBLEVBQUEsTUFBQSxJQUFBLENBQUEsT0FBQSxHQUFBLE9BQUEsRUFBQSxhQUFBLEVBQUEsS0FBQSxVQUFBLFVBQUEsRUFBQSxHQUFBLEVBQUEsSUFBQSw4Q0FBQSxFQUFBLE9BQUEsRUFBQSxnQkFBQSxFQUFBLE9BQUEsRUFBQSxLQUFBLFVBQUEsVUFBQSxFQUFBLEdBQUEsRUFBQSxJQUFBLG1EQUFBLEVBQUEsT0FBQSxFQUFBLFVBQUEsT0FBQSxPQUFBLEVBQUEsT0FBQSxZQUFBLEVBQUEsU0FBQSxjQUFBLEVBQUEsY0FBQSxFQUFBLE9BQUEsT0FBQSxLQUFBLFdBQUEsS0FBQSxZQUFBLEVBQUEsVUFBQSxZQUFBLGlCQUFBLE9BQUEsU0FBQSxFQUFBLGFBQUEsS0FBQSxVQUFBLElBQUEsTUFBQSxFQUFBLFFBQUEsRUFBQSxHQUFBLEVBQUEsR0FBQSxFQUFBLElBQUEsMkJBQUEsUUFBQSxpQkFBQTs7O2lHQ2FBLEtBQUEsbUJBQ0EsS0FBQSxXQUNBLFVBR0EsWUFFQSxXQUVBLFFBQUEsV0FDQSxLQUFBLE9BQUEsT0FBQSxnQkFDQSxNQUFBLEdBQ0EsWUFBQSxHQUNBLGVBQUEsd1VBMUJBLGlCQUFBLE9BQUEsV0FBQSxHQUFBLEdBQUEsS0FBQSxFQUFBLEVBQUEsZUFBQSxFQUFBLEVBQUEsTUFBQSxJQUFBLENBQUEsT0FBQSxHQUFBLHNCQUFBLEVBQUEsT0FBQSxZQUFBLHdCQUFBLE9BQUEsS0FBQSxXQUFBLEtBQUEsWUFBQSxFQUFBLGVBQUEsWUFBQSxnQkFBQSxPQUFBLElBQUEsS0FBQSxzQkFBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsSUFBQSxzQkFBQSxFQUFBLE1BQUEsRUFBQSxHQUFBLEtBQUEsRUFBQSxlQUFBLFlBQUEsZ0JBQUEsT0FBQSxJQUFBLEtBQUEsbUJBQUEsRUFBQSxHQUFBLEVBQUEsR0FBQSxFQUFBLElBQUEsK0JBQUEsR0FBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLGdCQUFBLElBQUEsaUJBQUE7OztpR0NpRUEsS0FBQSwyQkFDQSxLQUFBLFdBQ0EsT0FDQSx1QkFBQSxPQUdBLFVBQ0EscUJBQUEsV0FBQSxHQUFBLEdBQUEsS0FDQSxFQUFBLEtBQUEsT0FBQSxNQUFBLHNCQUFBLE9BQUEsU0FBQSxHQUFBLE1BQUEsR0FBQSxPQUFBLEVBQUEseUJBQUEsRUFFQSxJQUFBLElBQ0EsRUFBQSxnQkFBQSxLQUFBLEVBQUEsWUFBQSxLQUFBLElBQUEsbUJBQUEsS0FBQSxJQUFBLGtCQUVBLEVBQUEsYUFBQSxXQUFBLENBQ0EsR0FBQSxHQUFBLEdBQUEsTUFBQSxFQUFBLGFBQUEsTUFFQSxFQUFBLEVBQUEsY0FDQSxFQUFBLEVBQUEsV0FBQSxDQUNBLEdBQUEsRUFBQSxXQUNBLEVBQUEsR0FBQSxFQUFBLE9BQUEsSUFBQSxFQUFBLENBRUEsSUFBQSxHQUFBLEVBQUEsU0FDQSxHQUFBLEVBQUEsV0FDQSxFQUFBLEdBQUEsRUFBQSxPQUFBLElBQUEsRUFBQSxFQUVBLEVBQUEsc0JBQUEsRUFBQSxJQUFBLEVBQUEsSUFBQSxFQUlBLE1BQUEsS0FHQSxTQUNBLE1BQUEsU0FBQSxHQUNBLEVBQUEsaUJBQ0EsT0FBQSxVQUdBLFFBQUEsV0FFQSxLQUFBLHVCQUFBLEtBQUEsT0FBQSxPQUFBLEdBRUEsS0FBQSxPQUFBLFNBQUEsMEJBQUEsS0FBQSx3QkFFQSxLQUFBLE9BQUEsT0FBQSxnQkFDQSxTQUFBLEdBQ0EsTUFBQSxLQUFBLElBQUEsbURBQ0EsWUFBQSxHQUNBLGVBQUEsR0FHQSxJQUFBLEdBQUEsU0FBQSx1QkFBQSxlQUNBLEdBQUEsU0FDQSxFQUFBLEVBQUEsR0FDQSxFQUFBLFVBQUEsSUFBQSxxVkF0SEEsaUJBQUEsT0FBQSxXQUFBLEdBQUEsR0FBQSxLQUFBLEVBQUEsRUFBQSxlQUFBLEVBQUEsRUFBQSxNQUFBLElBQUEsQ0FBQSxPQUFBLEdBQUEscUJBQUEsRUFBQSx1QkFBQSxFQUFBLE1BQUEsRUFBQSxHQUFBLFNBQUEsRUFBQSxHQUFBLEVBQUEsSUFBQSx5QkFBQSxVQUFBLEVBQUEsUUFBQSxhQUFBLFlBQUEsT0FBQSxjQUFBLE1BQUEsTUFBQSx3QkFBQSxFQUFBLEdBQUEsWUFBQSxFQUFBLEdBQUEsRUFBQSxxQkFBQSxNQUFBLGVBQUEsRUFBQSxHQUFBLEtBQUEsRUFBQSxNQUFBLEVBQUEsR0FBQSxFQUFBLEdBQUEsRUFBQSxJQUFBLDBCQUFBLEVBQUEsTUFBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLEtBQUEsRUFBQSxVQUFBLEVBQUEsR0FBQSxFQUFBLEdBQUEsRUFBQSxJQUFBLG9CQUFBLEVBQUEsR0FBQSxLQUFBLEVBQUEsR0FBQSxFQUFBLHFCQUFBLGVBQUEsRUFBQSxNQUFBLEVBQUEsR0FBQSxLQUFBLEVBQUEsVUFBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsSUFBQSxvQkFBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLEdBQUEsRUFBQSxxQkFBQSxVQUFBLEVBQUEsTUFBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLFVBQUEsRUFBQSxHQUFBLEVBQUEsR0FBQSxFQUFBLElBQUEsd0JBQUEsRUFBQSxHQUFBLEtBQUEsRUFBQSxHQUFBLEVBQUEscUJBQUEsd0JBQUEsRUFBQSxRQUFBLEVBQUEsR0FBQSxLQUFBLEVBQUEsTUFBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsSUFBQSwyQkFBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLE1BQUEsRUFBQSxHQUFBLEtBQUEsRUFBQSxLQUFBLEVBQUEsVUFBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsSUFBQSxpQkFBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLEdBQUEsRUFBQSxxQkFBQSxvQkFBQSxFQUFBLE1BQUEsRUFBQSxHQUFBLEtBQUEsRUFBQSxVQUFBLEVBQUEsR0FBQSxFQUFBLEdBQUEsRUFBQSxJQUFBLGdCQUFBLEVBQUEsR0FBQSxLQUFBLEVBQUEsR0FBQSxFQUFBLHFCQUFBLG1CQUFBLEVBQUEsTUFBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLHFCQUFBLGdCQUFBLEVBQUEsUUFBQSxFQUFBLFVBQUEsRUFBQSxHQUFBLEVBQUEsR0FBQSxFQUFBLElBQUEsdUJBQUEsRUFBQSxHQUFBLEtBQUEsRUFBQSxHQUFBLEVBQUEscUJBQUEsa0JBQUEsRUFBQSxRQUFBLEVBQUEsS0FBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLFVBQUEsRUFBQSxHQUFBLEVBQUEsR0FBQSxFQUFBLElBQUEsYUFBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLEdBQUEsRUFBQSxxQkFBQSxnQkFBQSxFQUFBLE1BQUEsRUFBQSxHQUFBLEtBQUEsRUFBQSxxQkFBQSxjQUFBLEVBQUEsUUFBQSxFQUFBLFVBQUEsRUFBQSxHQUFBLEVBQUEsR0FBQSxFQUFBLElBQUEsYUFBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLEdBQUEsRUFBQSxxQkFBQSxnQkFBQSxFQUFBLFFBQUEsRUFBQSxLQUFBLEVBQUEsR0FBQSxLQUFBLEVBQUEscUJBQUEsZ0JBQUEsRUFBQSxRQUFBLEVBQUEsVUFBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsSUFBQSxlQUFBLEVBQUEsR0FBQSxLQUFBLEVBQUEsR0FBQSxFQUFBLHFCQUFBLGtCQUFBLEVBQUEsUUFBQSxFQUFBLEtBQUEsRUFBQSxHQUFBLEtBQUEsRUFBQSxxQkFBQSxtQkFBQSxFQUFBLFFBQUEsRUFBQSxVQUFBLEVBQUEsR0FBQSxFQUFBLEdBQUEsRUFBQSxJQUFBLGtCQUFBLEVBQUEsR0FBQSxLQUFBLEVBQUEsR0FBQSxFQUFBLHFCQUFBLHFCQUFBLEVBQUEsUUFBQSxFQUFBLEtBQUEsRUFBQSxHQUFBLEtBQUEsRUFBQSxxQkFBQSxtQkFBQSxFQUFBLFFBQUEsRUFBQSxVQUFBLEVBQUEsR0FBQSxFQUFBLEdBQUEsRUFBQSxJQUFBLGtCQUFBLEVBQUEsR0FBQSxLQUFBLEVBQUEsR0FBQSxFQUFBLHFCQUFBLHFCQUFBLEVBQUEsUUFBQSxFQUFBLEtBQUEsRUFBQSxHQUFBLEtBQUEsRUFBQSxxQkFBQSxnQkFBQSxFQUFBLFFBQUEsRUFBQSxVQUFBLEVBQUEsR0FBQSxFQUFBLEdBQUEsRUFBQSxJQUFBLGVBQUEsRUFBQSxHQUFBLEtBQUEsRUFBQSxHQUFBLEVBQUEscUJBQUEsa0JBQUEsRUFBQSxRQUFBLEVBQUEsT0FBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLE1BQUEsRUFBQSxHQUFBLEVBQUEsR0FBQSxFQUFBLElBQUEseUJBQUEsRUFBQSxHQUFBLEtBQUEsRUFBQSxNQUFBLEVBQUEsR0FBQSxLQUFBLEVBQUEsS0FBQSxFQUFBLFVBQUEsRUFBQSxHQUFBLEVBQUEsR0FBQSxFQUFBLElBQUEsaUJBQUEsRUFBQSxHQUFBLEtBQUEsRUFBQSxHQUFBLEVBQUEscUJBQUEsa0JBQUEsRUFBQSxNQUFBLEVBQUEsR0FBQSxLQUFBLEVBQUEsVUFBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsSUFBQSxnQkFBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLEdBQUEsRUFBQSxxQkFBQSxpQkFBQSxFQUFBLE1BQUEsRUFBQSxHQUFBLEtBQUEsRUFBQSxVQUFBLEVBQUEsR0FBQSxFQUFBLEdBQUEsRUFBQSxJQUFBLGFBQUEsRUFBQSxHQUFBLEtBQUEsRUFBQSxHQUFBLEVBQUEscUJBQUEsY0FBQSxFQUFBLE1BQUEsRUFBQSxHQUFBLEtBQUEsRUFBQSxVQUFBLEVBQUEsR0FBQSxFQUFBLEdBQUEsRUFBQSxJQUFBLGFBQUEsRUFBQSxHQUFBLEtBQUEsRUFBQSxHQUFBLEVBQUEscUJBQUEsY0FBQSxFQUFBLE1BQUEsRUFBQSxHQUFBLEtBQUEsRUFBQSxxQkFBQSxpQkFBQSxFQUFBLFFBQUEsRUFBQSxVQUFBLEVBQUEsR0FBQSxFQUFBLEdBQUEsRUFBQSxJQUFBLGtCQUFBLEVBQUEsR0FBQSxLQUFBLEVBQUEsR0FBQSxFQUFBLHFCQUFBLG1CQUFBLEVBQUEsUUFBQSxFQUFBLEtBQUEsRUFBQSxHQUFBLEtBQUEsRUFBQSxxQkFBQSxvQkFBQSxFQUFBLFFBQUEsRUFBQSxVQUFBLEVBQUEsR0FBQSxFQUFBLEdBQUEsRUFBQSxJQUFBLGVBQUEsRUFBQSxHQUFBLEtBQUEsRUFBQSxHQUFBLEVBQUEscUJBQUEsc0JBQUEsRUFBQSxRQUFBLEVBQUEsS0FBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLHFCQUFBLGlCQUFBLEVBQUEsUUFBQSxFQUFBLFVBQUEsRUFBQSxHQUFBLEVBQUEsR0FBQSxFQUFBLElBQUEsa0JBQUEsRUFBQSxHQUFBLEtBQUEsRUFBQSxHQUFBLEVBQUEscUJBQUEsbUJBQUEsRUFBQSxRQUFBLEVBQUEsS0FBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLHFCQUFBLGlCQUFBLEVBQUEsUUFBQSxFQUFBLFVBQUEsRUFBQSxHQUFBLEVBQUEsR0FBQSxFQUFBLElBQUEsa0JBQUEsRUFBQSxHQUFBLEtBQUEsRUFBQSxHQUFBLEVBQUEscUJBQUEsbUJBQUEsRUFBQSxRQUFBLEVBQUEsT0FBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLE1BQUEsRUFBQSxHQUFBLEVBQUEsR0FBQSxFQUFBLElBQUEsaUNBQUEsRUFBQSxNQUFBLEVBQUEsR0FBQSxLQUFBLEVBQUEsS0FBQSxFQUFBLFVBQUEsRUFBQSxHQUFBLEVBQUEsR0FBQSxFQUFBLElBQUEsdURBQUEsRUFBQSxHQUFBLEtBQUEsRUFBQSxHQUFBLEVBQUEsSUFBQSxxQkFBQSxFQUFBLE1BQUEsRUFBQSxHQUFBLEtBQUEsRUFBQSxVQUFBLEVBQUEsR0FBQSxFQUFBLEdBQUEsRUFBQSxJQUFBLHVEQUFBLEVBQUEsR0FBQSxLQUFBLEVBQUEsR0FBQSxFQUFBLElBQUEscUJBQUEsRUFBQSxRQUFBLEVBQUEsR0FBQSxLQUFBLEVBQUEsTUFBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLEtBQUEsRUFBQSxVQUFBLEVBQUEsR0FBQSxFQUFBLEdBQUEsRUFBQSxJQUFBLHVEQUFBLEVBQUEsR0FBQSxLQUFBLEVBQUEsR0FBQSxFQUFBLElBQUEscUJBQUEsRUFBQSxRQUFBLEVBQUEsR0FBQSxLQUFBLEVBQUEsS0FBQSxFQUFBLFVBQUEsRUFBQSxHQUFBLEVBQUEsR0FBQSxFQUFBLElBQUEsbUJBQUEsRUFBQSxHQUFB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SSxPQUFPLFNBQ1osRUFBUSxPQUFPLGdCQUFpQixFQUFJLE9BQU8sWUFJakQsUUFoS08sU0FBQSxFQWdLVyxHQUFRLEdBQWpCLEdBQWlCLEVBQWpCLE1BQ1AsT0FBTyxLQUFJLFFBQVEsR0FDbEIsS0FBSyxTQUFBLEdBQ0QsRUFBSSxPQUFPLE1BQ1osRUFBTyxVQUFXLEVBQUksT0FBTyxVQUtyQyxTQUNFLHFCQUFzQixTQUFBLEdBQ3BCLE1BQU8sR0FBTSxVQUFVLElBQUksU0FBQSxHQUN6QixPQUNFLE1BQU8sRUFBSyxZQUNaLEtBQU0sRUFBSyxTQUlqQixlQUFnQixTQUFBLEdBTWQsTUFKd0MsZUFBekIsRUFBTSxLQUFLLEtBQUssS0FDakIsRUFBTSxVQUFVLE9BQU8sU0FDdkIsRUFBTSxVQUFVLE9BQU8sU0FBQSxHQUFhLE1BQU8sR0FBUSxTQUFXLEVBQU0sS0FBSyxRQUFRLE1BSWpHLHNCQUF1QixTQUFBLEdBS3JCLE9BSmdELGVBQXpCLEVBQU0sS0FBSyxLQUFLLEtBQ3pCLEVBQU0sVUFBVSxPQUFPLFNBQ3ZCLEVBQU0sVUFBVSxPQUFPLFNBQUEsR0FBYSxNQUFPLEdBQVEsU0FBVyxFQUFNLEtBQUssUUFBUSxNQUV2RSxJQUFLLFNBQUEsR0FDM0IsT0FDRSxNQUFPLEVBQUssR0FDWixLQUFNLEVBQUssV0FRckIsZUFBQSxRQUFZLGFBQWEsdUJBRVYiLCJmaWxlIjoiZ2VuZXJhdGVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbigpe2Z1bmN0aW9uIHIoZSxuLHQpe2Z1bmN0aW9uIG8oaSxmKXtpZighbltpXSl7aWYoIWVbaV0pe3ZhciBjPVwiZnVuY3Rpb25cIj09dHlwZW9mIHJlcXVpcmUmJnJlcXVpcmU7aWYoIWYmJmMpcmV0dXJuIGMoaSwhMCk7aWYodSlyZXR1cm4gdShpLCEwKTt2YXIgYT1uZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiK2krXCInXCIpO3Rocm93IGEuY29kZT1cIk1PRFVMRV9OT1RfRk9VTkRcIixhfXZhciBwPW5baV09e2V4cG9ydHM6e319O2VbaV1bMF0uY2FsbChwLmV4cG9ydHMsZnVuY3Rpb24ocil7dmFyIG49ZVtpXVsxXVtyXTtyZXR1cm4gbyhufHxyKX0scCxwLmV4cG9ydHMscixlLG4sdCl9cmV0dXJuIG5baV0uZXhwb3J0c31mb3IodmFyIHU9XCJmdW5jdGlvblwiPT10eXBlb2YgcmVxdWlyZSYmcmVxdWlyZSxpPTA7aTx0Lmxlbmd0aDtpKyspbyh0W2ldKTtyZXR1cm4gb31yZXR1cm4gcn0pKCkiLCIoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuXHR0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgPyBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKSA6XG5cdHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShmYWN0b3J5KSA6XG5cdChnbG9iYWwuQXJyYXlJbnRlcnNlY3QgPSBmYWN0b3J5KCkpO1xufSh0aGlzLCAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7XG5cbnZhciBpbnRlcnNlY3QgPSBmdW5jdGlvbiBpbnRlcnNlY3QoZmlyc3QpIHtcbiAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIHJlc3QgPSBuZXcgQXJyYXkoX2xlbiA+IDEgPyBfbGVuIC0gMSA6IDApLCBfa2V5ID0gMTsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgIHJlc3RbX2tleSAtIDFdID0gYXJndW1lbnRzW19rZXldO1xuICB9XG5cbiAgcmV0dXJuIHJlc3QucmVkdWNlKGZ1bmN0aW9uIChhY2N1bSwgY3VycmVudCkge1xuICAgIHJldHVybiBhY2N1bS5maWx0ZXIoZnVuY3Rpb24gKHgpIHtcbiAgICAgIHJldHVybiBjdXJyZW50LmluZGV4T2YoeCkgIT09IC0xO1xuICAgIH0pO1xuICB9LCBmaXJzdCk7XG59O1xuXG5yZXR1cm4gaW50ZXJzZWN0O1xuXG59KSkpO1xuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2xpYi9heGlvcycpOyIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi8uLi91dGlscycpO1xudmFyIHNldHRsZSA9IHJlcXVpcmUoJy4vLi4vY29yZS9zZXR0bGUnKTtcbnZhciBidWlsZFVSTCA9IHJlcXVpcmUoJy4vLi4vaGVscGVycy9idWlsZFVSTCcpO1xudmFyIHBhcnNlSGVhZGVycyA9IHJlcXVpcmUoJy4vLi4vaGVscGVycy9wYXJzZUhlYWRlcnMnKTtcbnZhciBpc1VSTFNhbWVPcmlnaW4gPSByZXF1aXJlKCcuLy4uL2hlbHBlcnMvaXNVUkxTYW1lT3JpZ2luJyk7XG52YXIgY3JlYXRlRXJyb3IgPSByZXF1aXJlKCcuLi9jb3JlL2NyZWF0ZUVycm9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24geGhyQWRhcHRlcihjb25maWcpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIGRpc3BhdGNoWGhyUmVxdWVzdChyZXNvbHZlLCByZWplY3QpIHtcbiAgICB2YXIgcmVxdWVzdERhdGEgPSBjb25maWcuZGF0YTtcbiAgICB2YXIgcmVxdWVzdEhlYWRlcnMgPSBjb25maWcuaGVhZGVycztcblxuICAgIGlmICh1dGlscy5pc0Zvcm1EYXRhKHJlcXVlc3REYXRhKSkge1xuICAgICAgZGVsZXRlIHJlcXVlc3RIZWFkZXJzWydDb250ZW50LVR5cGUnXTsgLy8gTGV0IHRoZSBicm93c2VyIHNldCBpdFxuICAgIH1cblxuICAgIHZhciByZXF1ZXN0ID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG5cbiAgICAvLyBIVFRQIGJhc2ljIGF1dGhlbnRpY2F0aW9uXG4gICAgaWYgKGNvbmZpZy5hdXRoKSB7XG4gICAgICB2YXIgdXNlcm5hbWUgPSBjb25maWcuYXV0aC51c2VybmFtZSB8fCAnJztcbiAgICAgIHZhciBwYXNzd29yZCA9IGNvbmZpZy5hdXRoLnBhc3N3b3JkIHx8ICcnO1xuICAgICAgcmVxdWVzdEhlYWRlcnMuQXV0aG9yaXphdGlvbiA9ICdCYXNpYyAnICsgYnRvYSh1c2VybmFtZSArICc6JyArIHBhc3N3b3JkKTtcbiAgICB9XG5cbiAgICByZXF1ZXN0Lm9wZW4oY29uZmlnLm1ldGhvZC50b1VwcGVyQ2FzZSgpLCBidWlsZFVSTChjb25maWcudXJsLCBjb25maWcucGFyYW1zLCBjb25maWcucGFyYW1zU2VyaWFsaXplciksIHRydWUpO1xuXG4gICAgLy8gU2V0IHRoZSByZXF1ZXN0IHRpbWVvdXQgaW4gTVNcbiAgICByZXF1ZXN0LnRpbWVvdXQgPSBjb25maWcudGltZW91dDtcblxuICAgIC8vIExpc3RlbiBmb3IgcmVhZHkgc3RhdGVcbiAgICByZXF1ZXN0Lm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uIGhhbmRsZUxvYWQoKSB7XG4gICAgICBpZiAoIXJlcXVlc3QgfHwgcmVxdWVzdC5yZWFkeVN0YXRlICE9PSA0KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gVGhlIHJlcXVlc3QgZXJyb3JlZCBvdXQgYW5kIHdlIGRpZG4ndCBnZXQgYSByZXNwb25zZSwgdGhpcyB3aWxsIGJlXG4gICAgICAvLyBoYW5kbGVkIGJ5IG9uZXJyb3IgaW5zdGVhZFxuICAgICAgLy8gV2l0aCBvbmUgZXhjZXB0aW9uOiByZXF1ZXN0IHRoYXQgdXNpbmcgZmlsZTogcHJvdG9jb2wsIG1vc3QgYnJvd3NlcnNcbiAgICAgIC8vIHdpbGwgcmV0dXJuIHN0YXR1cyBhcyAwIGV2ZW4gdGhvdWdoIGl0J3MgYSBzdWNjZXNzZnVsIHJlcXVlc3RcbiAgICAgIGlmIChyZXF1ZXN0LnN0YXR1cyA9PT0gMCAmJiAhKHJlcXVlc3QucmVzcG9uc2VVUkwgJiYgcmVxdWVzdC5yZXNwb25zZVVSTC5pbmRleE9mKCdmaWxlOicpID09PSAwKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIFByZXBhcmUgdGhlIHJlc3BvbnNlXG4gICAgICB2YXIgcmVzcG9uc2VIZWFkZXJzID0gJ2dldEFsbFJlc3BvbnNlSGVhZGVycycgaW4gcmVxdWVzdCA/IHBhcnNlSGVhZGVycyhyZXF1ZXN0LmdldEFsbFJlc3BvbnNlSGVhZGVycygpKSA6IG51bGw7XG4gICAgICB2YXIgcmVzcG9uc2VEYXRhID0gIWNvbmZpZy5yZXNwb25zZVR5cGUgfHwgY29uZmlnLnJlc3BvbnNlVHlwZSA9PT0gJ3RleHQnID8gcmVxdWVzdC5yZXNwb25zZVRleHQgOiByZXF1ZXN0LnJlc3BvbnNlO1xuICAgICAgdmFyIHJlc3BvbnNlID0ge1xuICAgICAgICBkYXRhOiByZXNwb25zZURhdGEsXG4gICAgICAgIHN0YXR1czogcmVxdWVzdC5zdGF0dXMsXG4gICAgICAgIHN0YXR1c1RleHQ6IHJlcXVlc3Quc3RhdHVzVGV4dCxcbiAgICAgICAgaGVhZGVyczogcmVzcG9uc2VIZWFkZXJzLFxuICAgICAgICBjb25maWc6IGNvbmZpZyxcbiAgICAgICAgcmVxdWVzdDogcmVxdWVzdFxuICAgICAgfTtcblxuICAgICAgc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgcmVzcG9uc2UpO1xuXG4gICAgICAvLyBDbGVhbiB1cCByZXF1ZXN0XG4gICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICB9O1xuXG4gICAgLy8gSGFuZGxlIGJyb3dzZXIgcmVxdWVzdCBjYW5jZWxsYXRpb24gKGFzIG9wcG9zZWQgdG8gYSBtYW51YWwgY2FuY2VsbGF0aW9uKVxuICAgIHJlcXVlc3Qub25hYm9ydCA9IGZ1bmN0aW9uIGhhbmRsZUFib3J0KCkge1xuICAgICAgaWYgKCFyZXF1ZXN0KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgcmVqZWN0KGNyZWF0ZUVycm9yKCdSZXF1ZXN0IGFib3J0ZWQnLCBjb25maWcsICdFQ09OTkFCT1JURUQnLCByZXF1ZXN0KSk7XG5cbiAgICAgIC8vIENsZWFuIHVwIHJlcXVlc3RcbiAgICAgIHJlcXVlc3QgPSBudWxsO1xuICAgIH07XG5cbiAgICAvLyBIYW5kbGUgbG93IGxldmVsIG5ldHdvcmsgZXJyb3JzXG4gICAgcmVxdWVzdC5vbmVycm9yID0gZnVuY3Rpb24gaGFuZGxlRXJyb3IoKSB7XG4gICAgICAvLyBSZWFsIGVycm9ycyBhcmUgaGlkZGVuIGZyb20gdXMgYnkgdGhlIGJyb3dzZXJcbiAgICAgIC8vIG9uZXJyb3Igc2hvdWxkIG9ubHkgZmlyZSBpZiBpdCdzIGEgbmV0d29yayBlcnJvclxuICAgICAgcmVqZWN0KGNyZWF0ZUVycm9yKCdOZXR3b3JrIEVycm9yJywgY29uZmlnLCBudWxsLCByZXF1ZXN0KSk7XG5cbiAgICAgIC8vIENsZWFuIHVwIHJlcXVlc3RcbiAgICAgIHJlcXVlc3QgPSBudWxsO1xuICAgIH07XG5cbiAgICAvLyBIYW5kbGUgdGltZW91dFxuICAgIHJlcXVlc3Qub250aW1lb3V0ID0gZnVuY3Rpb24gaGFuZGxlVGltZW91dCgpIHtcbiAgICAgIHJlamVjdChjcmVhdGVFcnJvcigndGltZW91dCBvZiAnICsgY29uZmlnLnRpbWVvdXQgKyAnbXMgZXhjZWVkZWQnLCBjb25maWcsICdFQ09OTkFCT1JURUQnLFxuICAgICAgICByZXF1ZXN0KSk7XG5cbiAgICAgIC8vIENsZWFuIHVwIHJlcXVlc3RcbiAgICAgIHJlcXVlc3QgPSBudWxsO1xuICAgIH07XG5cbiAgICAvLyBBZGQgeHNyZiBoZWFkZXJcbiAgICAvLyBUaGlzIGlzIG9ubHkgZG9uZSBpZiBydW5uaW5nIGluIGEgc3RhbmRhcmQgYnJvd3NlciBlbnZpcm9ubWVudC5cbiAgICAvLyBTcGVjaWZpY2FsbHkgbm90IGlmIHdlJ3JlIGluIGEgd2ViIHdvcmtlciwgb3IgcmVhY3QtbmF0aXZlLlxuICAgIGlmICh1dGlscy5pc1N0YW5kYXJkQnJvd3NlckVudigpKSB7XG4gICAgICB2YXIgY29va2llcyA9IHJlcXVpcmUoJy4vLi4vaGVscGVycy9jb29raWVzJyk7XG5cbiAgICAgIC8vIEFkZCB4c3JmIGhlYWRlclxuICAgICAgdmFyIHhzcmZWYWx1ZSA9IChjb25maWcud2l0aENyZWRlbnRpYWxzIHx8IGlzVVJMU2FtZU9yaWdpbihjb25maWcudXJsKSkgJiYgY29uZmlnLnhzcmZDb29raWVOYW1lID9cbiAgICAgICAgY29va2llcy5yZWFkKGNvbmZpZy54c3JmQ29va2llTmFtZSkgOlxuICAgICAgICB1bmRlZmluZWQ7XG5cbiAgICAgIGlmICh4c3JmVmFsdWUpIHtcbiAgICAgICAgcmVxdWVzdEhlYWRlcnNbY29uZmlnLnhzcmZIZWFkZXJOYW1lXSA9IHhzcmZWYWx1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBBZGQgaGVhZGVycyB0byB0aGUgcmVxdWVzdFxuICAgIGlmICgnc2V0UmVxdWVzdEhlYWRlcicgaW4gcmVxdWVzdCkge1xuICAgICAgdXRpbHMuZm9yRWFjaChyZXF1ZXN0SGVhZGVycywgZnVuY3Rpb24gc2V0UmVxdWVzdEhlYWRlcih2YWwsIGtleSkge1xuICAgICAgICBpZiAodHlwZW9mIHJlcXVlc3REYXRhID09PSAndW5kZWZpbmVkJyAmJiBrZXkudG9Mb3dlckNhc2UoKSA9PT0gJ2NvbnRlbnQtdHlwZScpIHtcbiAgICAgICAgICAvLyBSZW1vdmUgQ29udGVudC1UeXBlIGlmIGRhdGEgaXMgdW5kZWZpbmVkXG4gICAgICAgICAgZGVsZXRlIHJlcXVlc3RIZWFkZXJzW2tleV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gT3RoZXJ3aXNlIGFkZCBoZWFkZXIgdG8gdGhlIHJlcXVlc3RcbiAgICAgICAgICByZXF1ZXN0LnNldFJlcXVlc3RIZWFkZXIoa2V5LCB2YWwpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBBZGQgd2l0aENyZWRlbnRpYWxzIHRvIHJlcXVlc3QgaWYgbmVlZGVkXG4gICAgaWYgKGNvbmZpZy53aXRoQ3JlZGVudGlhbHMpIHtcbiAgICAgIHJlcXVlc3Qud2l0aENyZWRlbnRpYWxzID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBBZGQgcmVzcG9uc2VUeXBlIHRvIHJlcXVlc3QgaWYgbmVlZGVkXG4gICAgaWYgKGNvbmZpZy5yZXNwb25zZVR5cGUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJlcXVlc3QucmVzcG9uc2VUeXBlID0gY29uZmlnLnJlc3BvbnNlVHlwZTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgLy8gRXhwZWN0ZWQgRE9NRXhjZXB0aW9uIHRocm93biBieSBicm93c2VycyBub3QgY29tcGF0aWJsZSBYTUxIdHRwUmVxdWVzdCBMZXZlbCAyLlxuICAgICAgICAvLyBCdXQsIHRoaXMgY2FuIGJlIHN1cHByZXNzZWQgZm9yICdqc29uJyB0eXBlIGFzIGl0IGNhbiBiZSBwYXJzZWQgYnkgZGVmYXVsdCAndHJhbnNmb3JtUmVzcG9uc2UnIGZ1bmN0aW9uLlxuICAgICAgICBpZiAoY29uZmlnLnJlc3BvbnNlVHlwZSAhPT0gJ2pzb24nKSB7XG4gICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEhhbmRsZSBwcm9ncmVzcyBpZiBuZWVkZWRcbiAgICBpZiAodHlwZW9mIGNvbmZpZy5vbkRvd25sb2FkUHJvZ3Jlc3MgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJlcXVlc3QuYWRkRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCBjb25maWcub25Eb3dubG9hZFByb2dyZXNzKTtcbiAgICB9XG5cbiAgICAvLyBOb3QgYWxsIGJyb3dzZXJzIHN1cHBvcnQgdXBsb2FkIGV2ZW50c1xuICAgIGlmICh0eXBlb2YgY29uZmlnLm9uVXBsb2FkUHJvZ3Jlc3MgPT09ICdmdW5jdGlvbicgJiYgcmVxdWVzdC51cGxvYWQpIHtcbiAgICAgIHJlcXVlc3QudXBsb2FkLmFkZEV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgY29uZmlnLm9uVXBsb2FkUHJvZ3Jlc3MpO1xuICAgIH1cblxuICAgIGlmIChjb25maWcuY2FuY2VsVG9rZW4pIHtcbiAgICAgIC8vIEhhbmRsZSBjYW5jZWxsYXRpb25cbiAgICAgIGNvbmZpZy5jYW5jZWxUb2tlbi5wcm9taXNlLnRoZW4oZnVuY3Rpb24gb25DYW5jZWxlZChjYW5jZWwpIHtcbiAgICAgICAgaWYgKCFyZXF1ZXN0KSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVxdWVzdC5hYm9ydCgpO1xuICAgICAgICByZWplY3QoY2FuY2VsKTtcbiAgICAgICAgLy8gQ2xlYW4gdXAgcmVxdWVzdFxuICAgICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChyZXF1ZXN0RGF0YSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXF1ZXN0RGF0YSA9IG51bGw7XG4gICAgfVxuXG4gICAgLy8gU2VuZCB0aGUgcmVxdWVzdFxuICAgIHJlcXVlc3Quc2VuZChyZXF1ZXN0RGF0YSk7XG4gIH0pO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi91dGlscycpO1xudmFyIGJpbmQgPSByZXF1aXJlKCcuL2hlbHBlcnMvYmluZCcpO1xudmFyIEF4aW9zID0gcmVxdWlyZSgnLi9jb3JlL0F4aW9zJyk7XG52YXIgbWVyZ2VDb25maWcgPSByZXF1aXJlKCcuL2NvcmUvbWVyZ2VDb25maWcnKTtcbnZhciBkZWZhdWx0cyA9IHJlcXVpcmUoJy4vZGVmYXVsdHMnKTtcblxuLyoqXG4gKiBDcmVhdGUgYW4gaW5zdGFuY2Ugb2YgQXhpb3NcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gZGVmYXVsdENvbmZpZyBUaGUgZGVmYXVsdCBjb25maWcgZm9yIHRoZSBpbnN0YW5jZVxuICogQHJldHVybiB7QXhpb3N9IEEgbmV3IGluc3RhbmNlIG9mIEF4aW9zXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUluc3RhbmNlKGRlZmF1bHRDb25maWcpIHtcbiAgdmFyIGNvbnRleHQgPSBuZXcgQXhpb3MoZGVmYXVsdENvbmZpZyk7XG4gIHZhciBpbnN0YW5jZSA9IGJpbmQoQXhpb3MucHJvdG90eXBlLnJlcXVlc3QsIGNvbnRleHQpO1xuXG4gIC8vIENvcHkgYXhpb3MucHJvdG90eXBlIHRvIGluc3RhbmNlXG4gIHV0aWxzLmV4dGVuZChpbnN0YW5jZSwgQXhpb3MucHJvdG90eXBlLCBjb250ZXh0KTtcblxuICAvLyBDb3B5IGNvbnRleHQgdG8gaW5zdGFuY2VcbiAgdXRpbHMuZXh0ZW5kKGluc3RhbmNlLCBjb250ZXh0KTtcblxuICByZXR1cm4gaW5zdGFuY2U7XG59XG5cbi8vIENyZWF0ZSB0aGUgZGVmYXVsdCBpbnN0YW5jZSB0byBiZSBleHBvcnRlZFxudmFyIGF4aW9zID0gY3JlYXRlSW5zdGFuY2UoZGVmYXVsdHMpO1xuXG4vLyBFeHBvc2UgQXhpb3MgY2xhc3MgdG8gYWxsb3cgY2xhc3MgaW5oZXJpdGFuY2VcbmF4aW9zLkF4aW9zID0gQXhpb3M7XG5cbi8vIEZhY3RvcnkgZm9yIGNyZWF0aW5nIG5ldyBpbnN0YW5jZXNcbmF4aW9zLmNyZWF0ZSA9IGZ1bmN0aW9uIGNyZWF0ZShpbnN0YW5jZUNvbmZpZykge1xuICByZXR1cm4gY3JlYXRlSW5zdGFuY2UobWVyZ2VDb25maWcoYXhpb3MuZGVmYXVsdHMsIGluc3RhbmNlQ29uZmlnKSk7XG59O1xuXG4vLyBFeHBvc2UgQ2FuY2VsICYgQ2FuY2VsVG9rZW5cbmF4aW9zLkNhbmNlbCA9IHJlcXVpcmUoJy4vY2FuY2VsL0NhbmNlbCcpO1xuYXhpb3MuQ2FuY2VsVG9rZW4gPSByZXF1aXJlKCcuL2NhbmNlbC9DYW5jZWxUb2tlbicpO1xuYXhpb3MuaXNDYW5jZWwgPSByZXF1aXJlKCcuL2NhbmNlbC9pc0NhbmNlbCcpO1xuXG4vLyBFeHBvc2UgYWxsL3NwcmVhZFxuYXhpb3MuYWxsID0gZnVuY3Rpb24gYWxsKHByb21pc2VzKSB7XG4gIHJldHVybiBQcm9taXNlLmFsbChwcm9taXNlcyk7XG59O1xuYXhpb3Muc3ByZWFkID0gcmVxdWlyZSgnLi9oZWxwZXJzL3NwcmVhZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGF4aW9zO1xuXG4vLyBBbGxvdyB1c2Ugb2YgZGVmYXVsdCBpbXBvcnQgc3ludGF4IGluIFR5cGVTY3JpcHRcbm1vZHVsZS5leHBvcnRzLmRlZmF1bHQgPSBheGlvcztcbiIsIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBBIGBDYW5jZWxgIGlzIGFuIG9iamVjdCB0aGF0IGlzIHRocm93biB3aGVuIGFuIG9wZXJhdGlvbiBpcyBjYW5jZWxlZC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBwYXJhbSB7c3RyaW5nPX0gbWVzc2FnZSBUaGUgbWVzc2FnZS5cbiAqL1xuZnVuY3Rpb24gQ2FuY2VsKG1lc3NhZ2UpIHtcbiAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZTtcbn1cblxuQ2FuY2VsLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICByZXR1cm4gJ0NhbmNlbCcgKyAodGhpcy5tZXNzYWdlID8gJzogJyArIHRoaXMubWVzc2FnZSA6ICcnKTtcbn07XG5cbkNhbmNlbC5wcm90b3R5cGUuX19DQU5DRUxfXyA9IHRydWU7XG5cbm1vZHVsZS5leHBvcnRzID0gQ2FuY2VsO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgQ2FuY2VsID0gcmVxdWlyZSgnLi9DYW5jZWwnKTtcblxuLyoqXG4gKiBBIGBDYW5jZWxUb2tlbmAgaXMgYW4gb2JqZWN0IHRoYXQgY2FuIGJlIHVzZWQgdG8gcmVxdWVzdCBjYW5jZWxsYXRpb24gb2YgYW4gb3BlcmF0aW9uLlxuICpcbiAqIEBjbGFzc1xuICogQHBhcmFtIHtGdW5jdGlvbn0gZXhlY3V0b3IgVGhlIGV4ZWN1dG9yIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBDYW5jZWxUb2tlbihleGVjdXRvcikge1xuICBpZiAodHlwZW9mIGV4ZWN1dG9yICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignZXhlY3V0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uLicpO1xuICB9XG5cbiAgdmFyIHJlc29sdmVQcm9taXNlO1xuICB0aGlzLnByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiBwcm9taXNlRXhlY3V0b3IocmVzb2x2ZSkge1xuICAgIHJlc29sdmVQcm9taXNlID0gcmVzb2x2ZTtcbiAgfSk7XG5cbiAgdmFyIHRva2VuID0gdGhpcztcbiAgZXhlY3V0b3IoZnVuY3Rpb24gY2FuY2VsKG1lc3NhZ2UpIHtcbiAgICBpZiAodG9rZW4ucmVhc29uKSB7XG4gICAgICAvLyBDYW5jZWxsYXRpb24gaGFzIGFscmVhZHkgYmVlbiByZXF1ZXN0ZWRcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0b2tlbi5yZWFzb24gPSBuZXcgQ2FuY2VsKG1lc3NhZ2UpO1xuICAgIHJlc29sdmVQcm9taXNlKHRva2VuLnJlYXNvbik7XG4gIH0pO1xufVxuXG4vKipcbiAqIFRocm93cyBhIGBDYW5jZWxgIGlmIGNhbmNlbGxhdGlvbiBoYXMgYmVlbiByZXF1ZXN0ZWQuXG4gKi9cbkNhbmNlbFRva2VuLnByb3RvdHlwZS50aHJvd0lmUmVxdWVzdGVkID0gZnVuY3Rpb24gdGhyb3dJZlJlcXVlc3RlZCgpIHtcbiAgaWYgKHRoaXMucmVhc29uKSB7XG4gICAgdGhyb3cgdGhpcy5yZWFzb247XG4gIH1cbn07XG5cbi8qKlxuICogUmV0dXJucyBhbiBvYmplY3QgdGhhdCBjb250YWlucyBhIG5ldyBgQ2FuY2VsVG9rZW5gIGFuZCBhIGZ1bmN0aW9uIHRoYXQsIHdoZW4gY2FsbGVkLFxuICogY2FuY2VscyB0aGUgYENhbmNlbFRva2VuYC5cbiAqL1xuQ2FuY2VsVG9rZW4uc291cmNlID0gZnVuY3Rpb24gc291cmNlKCkge1xuICB2YXIgY2FuY2VsO1xuICB2YXIgdG9rZW4gPSBuZXcgQ2FuY2VsVG9rZW4oZnVuY3Rpb24gZXhlY3V0b3IoYykge1xuICAgIGNhbmNlbCA9IGM7XG4gIH0pO1xuICByZXR1cm4ge1xuICAgIHRva2VuOiB0b2tlbixcbiAgICBjYW5jZWw6IGNhbmNlbFxuICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBDYW5jZWxUb2tlbjtcbiIsIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc0NhbmNlbCh2YWx1ZSkge1xuICByZXR1cm4gISEodmFsdWUgJiYgdmFsdWUuX19DQU5DRUxfXyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XG52YXIgYnVpbGRVUkwgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2J1aWxkVVJMJyk7XG52YXIgSW50ZXJjZXB0b3JNYW5hZ2VyID0gcmVxdWlyZSgnLi9JbnRlcmNlcHRvck1hbmFnZXInKTtcbnZhciBkaXNwYXRjaFJlcXVlc3QgPSByZXF1aXJlKCcuL2Rpc3BhdGNoUmVxdWVzdCcpO1xudmFyIG1lcmdlQ29uZmlnID0gcmVxdWlyZSgnLi9tZXJnZUNvbmZpZycpO1xuXG4vKipcbiAqIENyZWF0ZSBhIG5ldyBpbnN0YW5jZSBvZiBBeGlvc1xuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBpbnN0YW5jZUNvbmZpZyBUaGUgZGVmYXVsdCBjb25maWcgZm9yIHRoZSBpbnN0YW5jZVxuICovXG5mdW5jdGlvbiBBeGlvcyhpbnN0YW5jZUNvbmZpZykge1xuICB0aGlzLmRlZmF1bHRzID0gaW5zdGFuY2VDb25maWc7XG4gIHRoaXMuaW50ZXJjZXB0b3JzID0ge1xuICAgIHJlcXVlc3Q6IG5ldyBJbnRlcmNlcHRvck1hbmFnZXIoKSxcbiAgICByZXNwb25zZTogbmV3IEludGVyY2VwdG9yTWFuYWdlcigpXG4gIH07XG59XG5cbi8qKlxuICogRGlzcGF0Y2ggYSByZXF1ZXN0XG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZyBUaGUgY29uZmlnIHNwZWNpZmljIGZvciB0aGlzIHJlcXVlc3QgKG1lcmdlZCB3aXRoIHRoaXMuZGVmYXVsdHMpXG4gKi9cbkF4aW9zLnByb3RvdHlwZS5yZXF1ZXN0ID0gZnVuY3Rpb24gcmVxdWVzdChjb25maWcpIHtcbiAgLyplc2xpbnQgbm8tcGFyYW0tcmVhc3NpZ246MCovXG4gIC8vIEFsbG93IGZvciBheGlvcygnZXhhbXBsZS91cmwnWywgY29uZmlnXSkgYSBsYSBmZXRjaCBBUElcbiAgaWYgKHR5cGVvZiBjb25maWcgPT09ICdzdHJpbmcnKSB7XG4gICAgY29uZmlnID0gYXJndW1lbnRzWzFdIHx8IHt9O1xuICAgIGNvbmZpZy51cmwgPSBhcmd1bWVudHNbMF07XG4gIH0gZWxzZSB7XG4gICAgY29uZmlnID0gY29uZmlnIHx8IHt9O1xuICB9XG5cbiAgY29uZmlnID0gbWVyZ2VDb25maWcodGhpcy5kZWZhdWx0cywgY29uZmlnKTtcbiAgY29uZmlnLm1ldGhvZCA9IGNvbmZpZy5tZXRob2QgPyBjb25maWcubWV0aG9kLnRvTG93ZXJDYXNlKCkgOiAnZ2V0JztcblxuICAvLyBIb29rIHVwIGludGVyY2VwdG9ycyBtaWRkbGV3YXJlXG4gIHZhciBjaGFpbiA9IFtkaXNwYXRjaFJlcXVlc3QsIHVuZGVmaW5lZF07XG4gIHZhciBwcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKGNvbmZpZyk7XG5cbiAgdGhpcy5pbnRlcmNlcHRvcnMucmVxdWVzdC5mb3JFYWNoKGZ1bmN0aW9uIHVuc2hpZnRSZXF1ZXN0SW50ZXJjZXB0b3JzKGludGVyY2VwdG9yKSB7XG4gICAgY2hhaW4udW5zaGlmdChpbnRlcmNlcHRvci5mdWxmaWxsZWQsIGludGVyY2VwdG9yLnJlamVjdGVkKTtcbiAgfSk7XG5cbiAgdGhpcy5pbnRlcmNlcHRvcnMucmVzcG9uc2UuZm9yRWFjaChmdW5jdGlvbiBwdXNoUmVzcG9uc2VJbnRlcmNlcHRvcnMoaW50ZXJjZXB0b3IpIHtcbiAgICBjaGFpbi5wdXNoKGludGVyY2VwdG9yLmZ1bGZpbGxlZCwgaW50ZXJjZXB0b3IucmVqZWN0ZWQpO1xuICB9KTtcblxuICB3aGlsZSAoY2hhaW4ubGVuZ3RoKSB7XG4gICAgcHJvbWlzZSA9IHByb21pc2UudGhlbihjaGFpbi5zaGlmdCgpLCBjaGFpbi5zaGlmdCgpKTtcbiAgfVxuXG4gIHJldHVybiBwcm9taXNlO1xufTtcblxuQXhpb3MucHJvdG90eXBlLmdldFVyaSA9IGZ1bmN0aW9uIGdldFVyaShjb25maWcpIHtcbiAgY29uZmlnID0gbWVyZ2VDb25maWcodGhpcy5kZWZhdWx0cywgY29uZmlnKTtcbiAgcmV0dXJuIGJ1aWxkVVJMKGNvbmZpZy51cmwsIGNvbmZpZy5wYXJhbXMsIGNvbmZpZy5wYXJhbXNTZXJpYWxpemVyKS5yZXBsYWNlKC9eXFw/LywgJycpO1xufTtcblxuLy8gUHJvdmlkZSBhbGlhc2VzIGZvciBzdXBwb3J0ZWQgcmVxdWVzdCBtZXRob2RzXG51dGlscy5mb3JFYWNoKFsnZGVsZXRlJywgJ2dldCcsICdoZWFkJywgJ29wdGlvbnMnXSwgZnVuY3Rpb24gZm9yRWFjaE1ldGhvZE5vRGF0YShtZXRob2QpIHtcbiAgLyplc2xpbnQgZnVuYy1uYW1lczowKi9cbiAgQXhpb3MucHJvdG90eXBlW21ldGhvZF0gPSBmdW5jdGlvbih1cmwsIGNvbmZpZykge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QodXRpbHMubWVyZ2UoY29uZmlnIHx8IHt9LCB7XG4gICAgICBtZXRob2Q6IG1ldGhvZCxcbiAgICAgIHVybDogdXJsXG4gICAgfSkpO1xuICB9O1xufSk7XG5cbnV0aWxzLmZvckVhY2goWydwb3N0JywgJ3B1dCcsICdwYXRjaCddLCBmdW5jdGlvbiBmb3JFYWNoTWV0aG9kV2l0aERhdGEobWV0aG9kKSB7XG4gIC8qZXNsaW50IGZ1bmMtbmFtZXM6MCovXG4gIEF4aW9zLnByb3RvdHlwZVttZXRob2RdID0gZnVuY3Rpb24odXJsLCBkYXRhLCBjb25maWcpIHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KHV0aWxzLm1lcmdlKGNvbmZpZyB8fCB7fSwge1xuICAgICAgbWV0aG9kOiBtZXRob2QsXG4gICAgICB1cmw6IHVybCxcbiAgICAgIGRhdGE6IGRhdGFcbiAgICB9KSk7XG4gIH07XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBBeGlvcztcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi8uLi91dGlscycpO1xuXG5mdW5jdGlvbiBJbnRlcmNlcHRvck1hbmFnZXIoKSB7XG4gIHRoaXMuaGFuZGxlcnMgPSBbXTtcbn1cblxuLyoqXG4gKiBBZGQgYSBuZXcgaW50ZXJjZXB0b3IgdG8gdGhlIHN0YWNrXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVsZmlsbGVkIFRoZSBmdW5jdGlvbiB0byBoYW5kbGUgYHRoZW5gIGZvciBhIGBQcm9taXNlYFxuICogQHBhcmFtIHtGdW5jdGlvbn0gcmVqZWN0ZWQgVGhlIGZ1bmN0aW9uIHRvIGhhbmRsZSBgcmVqZWN0YCBmb3IgYSBgUHJvbWlzZWBcbiAqXG4gKiBAcmV0dXJuIHtOdW1iZXJ9IEFuIElEIHVzZWQgdG8gcmVtb3ZlIGludGVyY2VwdG9yIGxhdGVyXG4gKi9cbkludGVyY2VwdG9yTWFuYWdlci5wcm90b3R5cGUudXNlID0gZnVuY3Rpb24gdXNlKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpIHtcbiAgdGhpcy5oYW5kbGVycy5wdXNoKHtcbiAgICBmdWxmaWxsZWQ6IGZ1bGZpbGxlZCxcbiAgICByZWplY3RlZDogcmVqZWN0ZWRcbiAgfSk7XG4gIHJldHVybiB0aGlzLmhhbmRsZXJzLmxlbmd0aCAtIDE7XG59O1xuXG4vKipcbiAqIFJlbW92ZSBhbiBpbnRlcmNlcHRvciBmcm9tIHRoZSBzdGFja1xuICpcbiAqIEBwYXJhbSB7TnVtYmVyfSBpZCBUaGUgSUQgdGhhdCB3YXMgcmV0dXJuZWQgYnkgYHVzZWBcbiAqL1xuSW50ZXJjZXB0b3JNYW5hZ2VyLnByb3RvdHlwZS5lamVjdCA9IGZ1bmN0aW9uIGVqZWN0KGlkKSB7XG4gIGlmICh0aGlzLmhhbmRsZXJzW2lkXSkge1xuICAgIHRoaXMuaGFuZGxlcnNbaWRdID0gbnVsbDtcbiAgfVxufTtcblxuLyoqXG4gKiBJdGVyYXRlIG92ZXIgYWxsIHRoZSByZWdpc3RlcmVkIGludGVyY2VwdG9yc1xuICpcbiAqIFRoaXMgbWV0aG9kIGlzIHBhcnRpY3VsYXJseSB1c2VmdWwgZm9yIHNraXBwaW5nIG92ZXIgYW55XG4gKiBpbnRlcmNlcHRvcnMgdGhhdCBtYXkgaGF2ZSBiZWNvbWUgYG51bGxgIGNhbGxpbmcgYGVqZWN0YC5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgZnVuY3Rpb24gdG8gY2FsbCBmb3IgZWFjaCBpbnRlcmNlcHRvclxuICovXG5JbnRlcmNlcHRvck1hbmFnZXIucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbiBmb3JFYWNoKGZuKSB7XG4gIHV0aWxzLmZvckVhY2godGhpcy5oYW5kbGVycywgZnVuY3Rpb24gZm9yRWFjaEhhbmRsZXIoaCkge1xuICAgIGlmIChoICE9PSBudWxsKSB7XG4gICAgICBmbihoKTtcbiAgICB9XG4gIH0pO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBJbnRlcmNlcHRvck1hbmFnZXI7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBlbmhhbmNlRXJyb3IgPSByZXF1aXJlKCcuL2VuaGFuY2VFcnJvcicpO1xuXG4vKipcbiAqIENyZWF0ZSBhbiBFcnJvciB3aXRoIHRoZSBzcGVjaWZpZWQgbWVzc2FnZSwgY29uZmlnLCBlcnJvciBjb2RlLCByZXF1ZXN0IGFuZCByZXNwb25zZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZSBUaGUgZXJyb3IgbWVzc2FnZS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcgVGhlIGNvbmZpZy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbY29kZV0gVGhlIGVycm9yIGNvZGUgKGZvciBleGFtcGxlLCAnRUNPTk5BQk9SVEVEJykuXG4gKiBAcGFyYW0ge09iamVjdH0gW3JlcXVlc3RdIFRoZSByZXF1ZXN0LlxuICogQHBhcmFtIHtPYmplY3R9IFtyZXNwb25zZV0gVGhlIHJlc3BvbnNlLlxuICogQHJldHVybnMge0Vycm9yfSBUaGUgY3JlYXRlZCBlcnJvci5cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBjcmVhdGVFcnJvcihtZXNzYWdlLCBjb25maWcsIGNvZGUsIHJlcXVlc3QsIHJlc3BvbnNlKSB7XG4gIHZhciBlcnJvciA9IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgcmV0dXJuIGVuaGFuY2VFcnJvcihlcnJvciwgY29uZmlnLCBjb2RlLCByZXF1ZXN0LCByZXNwb25zZSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XG52YXIgdHJhbnNmb3JtRGF0YSA9IHJlcXVpcmUoJy4vdHJhbnNmb3JtRGF0YScpO1xudmFyIGlzQ2FuY2VsID0gcmVxdWlyZSgnLi4vY2FuY2VsL2lzQ2FuY2VsJyk7XG52YXIgZGVmYXVsdHMgPSByZXF1aXJlKCcuLi9kZWZhdWx0cycpO1xudmFyIGlzQWJzb2x1dGVVUkwgPSByZXF1aXJlKCcuLy4uL2hlbHBlcnMvaXNBYnNvbHV0ZVVSTCcpO1xudmFyIGNvbWJpbmVVUkxzID0gcmVxdWlyZSgnLi8uLi9oZWxwZXJzL2NvbWJpbmVVUkxzJyk7XG5cbi8qKlxuICogVGhyb3dzIGEgYENhbmNlbGAgaWYgY2FuY2VsbGF0aW9uIGhhcyBiZWVuIHJlcXVlc3RlZC5cbiAqL1xuZnVuY3Rpb24gdGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZChjb25maWcpIHtcbiAgaWYgKGNvbmZpZy5jYW5jZWxUb2tlbikge1xuICAgIGNvbmZpZy5jYW5jZWxUb2tlbi50aHJvd0lmUmVxdWVzdGVkKCk7XG4gIH1cbn1cblxuLyoqXG4gKiBEaXNwYXRjaCBhIHJlcXVlc3QgdG8gdGhlIHNlcnZlciB1c2luZyB0aGUgY29uZmlndXJlZCBhZGFwdGVyLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBjb25maWcgVGhlIGNvbmZpZyB0aGF0IGlzIHRvIGJlIHVzZWQgZm9yIHRoZSByZXF1ZXN0XG4gKiBAcmV0dXJucyB7UHJvbWlzZX0gVGhlIFByb21pc2UgdG8gYmUgZnVsZmlsbGVkXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZGlzcGF0Y2hSZXF1ZXN0KGNvbmZpZykge1xuICB0aHJvd0lmQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKGNvbmZpZyk7XG5cbiAgLy8gU3VwcG9ydCBiYXNlVVJMIGNvbmZpZ1xuICBpZiAoY29uZmlnLmJhc2VVUkwgJiYgIWlzQWJzb2x1dGVVUkwoY29uZmlnLnVybCkpIHtcbiAgICBjb25maWcudXJsID0gY29tYmluZVVSTHMoY29uZmlnLmJhc2VVUkwsIGNvbmZpZy51cmwpO1xuICB9XG5cbiAgLy8gRW5zdXJlIGhlYWRlcnMgZXhpc3RcbiAgY29uZmlnLmhlYWRlcnMgPSBjb25maWcuaGVhZGVycyB8fCB7fTtcblxuICAvLyBUcmFuc2Zvcm0gcmVxdWVzdCBkYXRhXG4gIGNvbmZpZy5kYXRhID0gdHJhbnNmb3JtRGF0YShcbiAgICBjb25maWcuZGF0YSxcbiAgICBjb25maWcuaGVhZGVycyxcbiAgICBjb25maWcudHJhbnNmb3JtUmVxdWVzdFxuICApO1xuXG4gIC8vIEZsYXR0ZW4gaGVhZGVyc1xuICBjb25maWcuaGVhZGVycyA9IHV0aWxzLm1lcmdlKFxuICAgIGNvbmZpZy5oZWFkZXJzLmNvbW1vbiB8fCB7fSxcbiAgICBjb25maWcuaGVhZGVyc1tjb25maWcubWV0aG9kXSB8fCB7fSxcbiAgICBjb25maWcuaGVhZGVycyB8fCB7fVxuICApO1xuXG4gIHV0aWxzLmZvckVhY2goXG4gICAgWydkZWxldGUnLCAnZ2V0JywgJ2hlYWQnLCAncG9zdCcsICdwdXQnLCAncGF0Y2gnLCAnY29tbW9uJ10sXG4gICAgZnVuY3Rpb24gY2xlYW5IZWFkZXJDb25maWcobWV0aG9kKSB7XG4gICAgICBkZWxldGUgY29uZmlnLmhlYWRlcnNbbWV0aG9kXTtcbiAgICB9XG4gICk7XG5cbiAgdmFyIGFkYXB0ZXIgPSBjb25maWcuYWRhcHRlciB8fCBkZWZhdWx0cy5hZGFwdGVyO1xuXG4gIHJldHVybiBhZGFwdGVyKGNvbmZpZykudGhlbihmdW5jdGlvbiBvbkFkYXB0ZXJSZXNvbHV0aW9uKHJlc3BvbnNlKSB7XG4gICAgdGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZChjb25maWcpO1xuXG4gICAgLy8gVHJhbnNmb3JtIHJlc3BvbnNlIGRhdGFcbiAgICByZXNwb25zZS5kYXRhID0gdHJhbnNmb3JtRGF0YShcbiAgICAgIHJlc3BvbnNlLmRhdGEsXG4gICAgICByZXNwb25zZS5oZWFkZXJzLFxuICAgICAgY29uZmlnLnRyYW5zZm9ybVJlc3BvbnNlXG4gICAgKTtcblxuICAgIHJldHVybiByZXNwb25zZTtcbiAgfSwgZnVuY3Rpb24gb25BZGFwdGVyUmVqZWN0aW9uKHJlYXNvbikge1xuICAgIGlmICghaXNDYW5jZWwocmVhc29uKSkge1xuICAgICAgdGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZChjb25maWcpO1xuXG4gICAgICAvLyBUcmFuc2Zvcm0gcmVzcG9uc2UgZGF0YVxuICAgICAgaWYgKHJlYXNvbiAmJiByZWFzb24ucmVzcG9uc2UpIHtcbiAgICAgICAgcmVhc29uLnJlc3BvbnNlLmRhdGEgPSB0cmFuc2Zvcm1EYXRhKFxuICAgICAgICAgIHJlYXNvbi5yZXNwb25zZS5kYXRhLFxuICAgICAgICAgIHJlYXNvbi5yZXNwb25zZS5oZWFkZXJzLFxuICAgICAgICAgIGNvbmZpZy50cmFuc2Zvcm1SZXNwb25zZVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBQcm9taXNlLnJlamVjdChyZWFzb24pO1xuICB9KTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogVXBkYXRlIGFuIEVycm9yIHdpdGggdGhlIHNwZWNpZmllZCBjb25maWcsIGVycm9yIGNvZGUsIGFuZCByZXNwb25zZS5cbiAqXG4gKiBAcGFyYW0ge0Vycm9yfSBlcnJvciBUaGUgZXJyb3IgdG8gdXBkYXRlLlxuICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZyBUaGUgY29uZmlnLlxuICogQHBhcmFtIHtzdHJpbmd9IFtjb2RlXSBUaGUgZXJyb3IgY29kZSAoZm9yIGV4YW1wbGUsICdFQ09OTkFCT1JURUQnKS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbcmVxdWVzdF0gVGhlIHJlcXVlc3QuXG4gKiBAcGFyYW0ge09iamVjdH0gW3Jlc3BvbnNlXSBUaGUgcmVzcG9uc2UuXG4gKiBAcmV0dXJucyB7RXJyb3J9IFRoZSBlcnJvci5cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBlbmhhbmNlRXJyb3IoZXJyb3IsIGNvbmZpZywgY29kZSwgcmVxdWVzdCwgcmVzcG9uc2UpIHtcbiAgZXJyb3IuY29uZmlnID0gY29uZmlnO1xuICBpZiAoY29kZSkge1xuICAgIGVycm9yLmNvZGUgPSBjb2RlO1xuICB9XG5cbiAgZXJyb3IucmVxdWVzdCA9IHJlcXVlc3Q7XG4gIGVycm9yLnJlc3BvbnNlID0gcmVzcG9uc2U7XG4gIGVycm9yLmlzQXhpb3NFcnJvciA9IHRydWU7XG5cbiAgZXJyb3IudG9KU09OID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC8vIFN0YW5kYXJkXG4gICAgICBtZXNzYWdlOiB0aGlzLm1lc3NhZ2UsXG4gICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICAvLyBNaWNyb3NvZnRcbiAgICAgIGRlc2NyaXB0aW9uOiB0aGlzLmRlc2NyaXB0aW9uLFxuICAgICAgbnVtYmVyOiB0aGlzLm51bWJlcixcbiAgICAgIC8vIE1vemlsbGFcbiAgICAgIGZpbGVOYW1lOiB0aGlzLmZpbGVOYW1lLFxuICAgICAgbGluZU51bWJlcjogdGhpcy5saW5lTnVtYmVyLFxuICAgICAgY29sdW1uTnVtYmVyOiB0aGlzLmNvbHVtbk51bWJlcixcbiAgICAgIHN0YWNrOiB0aGlzLnN0YWNrLFxuICAgICAgLy8gQXhpb3NcbiAgICAgIGNvbmZpZzogdGhpcy5jb25maWcsXG4gICAgICBjb2RlOiB0aGlzLmNvZGVcbiAgICB9O1xuICB9O1xuICByZXR1cm4gZXJyb3I7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpO1xuXG4vKipcbiAqIENvbmZpZy1zcGVjaWZpYyBtZXJnZS1mdW5jdGlvbiB3aGljaCBjcmVhdGVzIGEgbmV3IGNvbmZpZy1vYmplY3RcbiAqIGJ5IG1lcmdpbmcgdHdvIGNvbmZpZ3VyYXRpb24gb2JqZWN0cyB0b2dldGhlci5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gY29uZmlnMVxuICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZzJcbiAqIEByZXR1cm5zIHtPYmplY3R9IE5ldyBvYmplY3QgcmVzdWx0aW5nIGZyb20gbWVyZ2luZyBjb25maWcyIHRvIGNvbmZpZzFcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBtZXJnZUNvbmZpZyhjb25maWcxLCBjb25maWcyKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICBjb25maWcyID0gY29uZmlnMiB8fCB7fTtcbiAgdmFyIGNvbmZpZyA9IHt9O1xuXG4gIHV0aWxzLmZvckVhY2goWyd1cmwnLCAnbWV0aG9kJywgJ3BhcmFtcycsICdkYXRhJ10sIGZ1bmN0aW9uIHZhbHVlRnJvbUNvbmZpZzIocHJvcCkge1xuICAgIGlmICh0eXBlb2YgY29uZmlnMltwcm9wXSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGNvbmZpZ1twcm9wXSA9IGNvbmZpZzJbcHJvcF07XG4gICAgfVxuICB9KTtcblxuICB1dGlscy5mb3JFYWNoKFsnaGVhZGVycycsICdhdXRoJywgJ3Byb3h5J10sIGZ1bmN0aW9uIG1lcmdlRGVlcFByb3BlcnRpZXMocHJvcCkge1xuICAgIGlmICh1dGlscy5pc09iamVjdChjb25maWcyW3Byb3BdKSkge1xuICAgICAgY29uZmlnW3Byb3BdID0gdXRpbHMuZGVlcE1lcmdlKGNvbmZpZzFbcHJvcF0sIGNvbmZpZzJbcHJvcF0pO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGNvbmZpZzJbcHJvcF0gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBjb25maWdbcHJvcF0gPSBjb25maWcyW3Byb3BdO1xuICAgIH0gZWxzZSBpZiAodXRpbHMuaXNPYmplY3QoY29uZmlnMVtwcm9wXSkpIHtcbiAgICAgIGNvbmZpZ1twcm9wXSA9IHV0aWxzLmRlZXBNZXJnZShjb25maWcxW3Byb3BdKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBjb25maWcxW3Byb3BdICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgY29uZmlnW3Byb3BdID0gY29uZmlnMVtwcm9wXTtcbiAgICB9XG4gIH0pO1xuXG4gIHV0aWxzLmZvckVhY2goW1xuICAgICdiYXNlVVJMJywgJ3RyYW5zZm9ybVJlcXVlc3QnLCAndHJhbnNmb3JtUmVzcG9uc2UnLCAncGFyYW1zU2VyaWFsaXplcicsXG4gICAgJ3RpbWVvdXQnLCAnd2l0aENyZWRlbnRpYWxzJywgJ2FkYXB0ZXInLCAncmVzcG9uc2VUeXBlJywgJ3hzcmZDb29raWVOYW1lJyxcbiAgICAneHNyZkhlYWRlck5hbWUnLCAnb25VcGxvYWRQcm9ncmVzcycsICdvbkRvd25sb2FkUHJvZ3Jlc3MnLCAnbWF4Q29udGVudExlbmd0aCcsXG4gICAgJ3ZhbGlkYXRlU3RhdHVzJywgJ21heFJlZGlyZWN0cycsICdodHRwQWdlbnQnLCAnaHR0cHNBZ2VudCcsICdjYW5jZWxUb2tlbicsXG4gICAgJ3NvY2tldFBhdGgnXG4gIF0sIGZ1bmN0aW9uIGRlZmF1bHRUb0NvbmZpZzIocHJvcCkge1xuICAgIGlmICh0eXBlb2YgY29uZmlnMltwcm9wXSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGNvbmZpZ1twcm9wXSA9IGNvbmZpZzJbcHJvcF07XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgY29uZmlnMVtwcm9wXSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGNvbmZpZ1twcm9wXSA9IGNvbmZpZzFbcHJvcF07XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gY29uZmlnO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGNyZWF0ZUVycm9yID0gcmVxdWlyZSgnLi9jcmVhdGVFcnJvcicpO1xuXG4vKipcbiAqIFJlc29sdmUgb3IgcmVqZWN0IGEgUHJvbWlzZSBiYXNlZCBvbiByZXNwb25zZSBzdGF0dXMuXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcmVzb2x2ZSBBIGZ1bmN0aW9uIHRoYXQgcmVzb2x2ZXMgdGhlIHByb21pc2UuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSByZWplY3QgQSBmdW5jdGlvbiB0aGF0IHJlamVjdHMgdGhlIHByb21pc2UuXG4gKiBAcGFyYW0ge29iamVjdH0gcmVzcG9uc2UgVGhlIHJlc3BvbnNlLlxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHNldHRsZShyZXNvbHZlLCByZWplY3QsIHJlc3BvbnNlKSB7XG4gIHZhciB2YWxpZGF0ZVN0YXR1cyA9IHJlc3BvbnNlLmNvbmZpZy52YWxpZGF0ZVN0YXR1cztcbiAgaWYgKCF2YWxpZGF0ZVN0YXR1cyB8fCB2YWxpZGF0ZVN0YXR1cyhyZXNwb25zZS5zdGF0dXMpKSB7XG4gICAgcmVzb2x2ZShyZXNwb25zZSk7XG4gIH0gZWxzZSB7XG4gICAgcmVqZWN0KGNyZWF0ZUVycm9yKFxuICAgICAgJ1JlcXVlc3QgZmFpbGVkIHdpdGggc3RhdHVzIGNvZGUgJyArIHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgIHJlc3BvbnNlLmNvbmZpZyxcbiAgICAgIG51bGwsXG4gICAgICByZXNwb25zZS5yZXF1ZXN0LFxuICAgICAgcmVzcG9uc2VcbiAgICApKTtcbiAgfVxufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi8uLi91dGlscycpO1xuXG4vKipcbiAqIFRyYW5zZm9ybSB0aGUgZGF0YSBmb3IgYSByZXF1ZXN0IG9yIGEgcmVzcG9uc2VcbiAqXG4gKiBAcGFyYW0ge09iamVjdHxTdHJpbmd9IGRhdGEgVGhlIGRhdGEgdG8gYmUgdHJhbnNmb3JtZWRcbiAqIEBwYXJhbSB7QXJyYXl9IGhlYWRlcnMgVGhlIGhlYWRlcnMgZm9yIHRoZSByZXF1ZXN0IG9yIHJlc3BvbnNlXG4gKiBAcGFyYW0ge0FycmF5fEZ1bmN0aW9ufSBmbnMgQSBzaW5nbGUgZnVuY3Rpb24gb3IgQXJyYXkgb2YgZnVuY3Rpb25zXG4gKiBAcmV0dXJucyB7Kn0gVGhlIHJlc3VsdGluZyB0cmFuc2Zvcm1lZCBkYXRhXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gdHJhbnNmb3JtRGF0YShkYXRhLCBoZWFkZXJzLCBmbnMpIHtcbiAgLyplc2xpbnQgbm8tcGFyYW0tcmVhc3NpZ246MCovXG4gIHV0aWxzLmZvckVhY2goZm5zLCBmdW5jdGlvbiB0cmFuc2Zvcm0oZm4pIHtcbiAgICBkYXRhID0gZm4oZGF0YSwgaGVhZGVycyk7XG4gIH0pO1xuXG4gIHJldHVybiBkYXRhO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi91dGlscycpO1xudmFyIG5vcm1hbGl6ZUhlYWRlck5hbWUgPSByZXF1aXJlKCcuL2hlbHBlcnMvbm9ybWFsaXplSGVhZGVyTmFtZScpO1xuXG52YXIgREVGQVVMVF9DT05URU5UX1RZUEUgPSB7XG4gICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJ1xufTtcblxuZnVuY3Rpb24gc2V0Q29udGVudFR5cGVJZlVuc2V0KGhlYWRlcnMsIHZhbHVlKSB7XG4gIGlmICghdXRpbHMuaXNVbmRlZmluZWQoaGVhZGVycykgJiYgdXRpbHMuaXNVbmRlZmluZWQoaGVhZGVyc1snQ29udGVudC1UeXBlJ10pKSB7XG4gICAgaGVhZGVyc1snQ29udGVudC1UeXBlJ10gPSB2YWx1ZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXREZWZhdWx0QWRhcHRlcigpIHtcbiAgdmFyIGFkYXB0ZXI7XG4gIC8vIE9ubHkgTm9kZS5KUyBoYXMgYSBwcm9jZXNzIHZhcmlhYmxlIHRoYXQgaXMgb2YgW1tDbGFzc11dIHByb2Nlc3NcbiAgaWYgKHR5cGVvZiBwcm9jZXNzICE9PSAndW5kZWZpbmVkJyAmJiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwocHJvY2VzcykgPT09ICdbb2JqZWN0IHByb2Nlc3NdJykge1xuICAgIC8vIEZvciBub2RlIHVzZSBIVFRQIGFkYXB0ZXJcbiAgICBhZGFwdGVyID0gcmVxdWlyZSgnLi9hZGFwdGVycy9odHRwJyk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIFhNTEh0dHBSZXF1ZXN0ICE9PSAndW5kZWZpbmVkJykge1xuICAgIC8vIEZvciBicm93c2VycyB1c2UgWEhSIGFkYXB0ZXJcbiAgICBhZGFwdGVyID0gcmVxdWlyZSgnLi9hZGFwdGVycy94aHInKTtcbiAgfVxuICByZXR1cm4gYWRhcHRlcjtcbn1cblxudmFyIGRlZmF1bHRzID0ge1xuICBhZGFwdGVyOiBnZXREZWZhdWx0QWRhcHRlcigpLFxuXG4gIHRyYW5zZm9ybVJlcXVlc3Q6IFtmdW5jdGlvbiB0cmFuc2Zvcm1SZXF1ZXN0KGRhdGEsIGhlYWRlcnMpIHtcbiAgICBub3JtYWxpemVIZWFkZXJOYW1lKGhlYWRlcnMsICdBY2NlcHQnKTtcbiAgICBub3JtYWxpemVIZWFkZXJOYW1lKGhlYWRlcnMsICdDb250ZW50LVR5cGUnKTtcbiAgICBpZiAodXRpbHMuaXNGb3JtRGF0YShkYXRhKSB8fFxuICAgICAgdXRpbHMuaXNBcnJheUJ1ZmZlcihkYXRhKSB8fFxuICAgICAgdXRpbHMuaXNCdWZmZXIoZGF0YSkgfHxcbiAgICAgIHV0aWxzLmlzU3RyZWFtKGRhdGEpIHx8XG4gICAgICB1dGlscy5pc0ZpbGUoZGF0YSkgfHxcbiAgICAgIHV0aWxzLmlzQmxvYihkYXRhKVxuICAgICkge1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuICAgIGlmICh1dGlscy5pc0FycmF5QnVmZmVyVmlldyhkYXRhKSkge1xuICAgICAgcmV0dXJuIGRhdGEuYnVmZmVyO1xuICAgIH1cbiAgICBpZiAodXRpbHMuaXNVUkxTZWFyY2hQYXJhbXMoZGF0YSkpIHtcbiAgICAgIHNldENvbnRlbnRUeXBlSWZVbnNldChoZWFkZXJzLCAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkO2NoYXJzZXQ9dXRmLTgnKTtcbiAgICAgIHJldHVybiBkYXRhLnRvU3RyaW5nKCk7XG4gICAgfVxuICAgIGlmICh1dGlscy5pc09iamVjdChkYXRhKSkge1xuICAgICAgc2V0Q29udGVudFR5cGVJZlVuc2V0KGhlYWRlcnMsICdhcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTgnKTtcbiAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShkYXRhKTtcbiAgICB9XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1dLFxuXG4gIHRyYW5zZm9ybVJlc3BvbnNlOiBbZnVuY3Rpb24gdHJhbnNmb3JtUmVzcG9uc2UoZGF0YSkge1xuICAgIC8qZXNsaW50IG5vLXBhcmFtLXJlYXNzaWduOjAqL1xuICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGRhdGEgPSBKU09OLnBhcnNlKGRhdGEpO1xuICAgICAgfSBjYXRjaCAoZSkgeyAvKiBJZ25vcmUgKi8gfVxuICAgIH1cbiAgICByZXR1cm4gZGF0YTtcbiAgfV0sXG5cbiAgLyoqXG4gICAqIEEgdGltZW91dCBpbiBtaWxsaXNlY29uZHMgdG8gYWJvcnQgYSByZXF1ZXN0LiBJZiBzZXQgdG8gMCAoZGVmYXVsdCkgYVxuICAgKiB0aW1lb3V0IGlzIG5vdCBjcmVhdGVkLlxuICAgKi9cbiAgdGltZW91dDogMCxcblxuICB4c3JmQ29va2llTmFtZTogJ1hTUkYtVE9LRU4nLFxuICB4c3JmSGVhZGVyTmFtZTogJ1gtWFNSRi1UT0tFTicsXG5cbiAgbWF4Q29udGVudExlbmd0aDogLTEsXG5cbiAgdmFsaWRhdGVTdGF0dXM6IGZ1bmN0aW9uIHZhbGlkYXRlU3RhdHVzKHN0YXR1cykge1xuICAgIHJldHVybiBzdGF0dXMgPj0gMjAwICYmIHN0YXR1cyA8IDMwMDtcbiAgfVxufTtcblxuZGVmYXVsdHMuaGVhZGVycyA9IHtcbiAgY29tbW9uOiB7XG4gICAgJ0FjY2VwdCc6ICdhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L3BsYWluLCAqLyonXG4gIH1cbn07XG5cbnV0aWxzLmZvckVhY2goWydkZWxldGUnLCAnZ2V0JywgJ2hlYWQnXSwgZnVuY3Rpb24gZm9yRWFjaE1ldGhvZE5vRGF0YShtZXRob2QpIHtcbiAgZGVmYXVsdHMuaGVhZGVyc1ttZXRob2RdID0ge307XG59KTtcblxudXRpbHMuZm9yRWFjaChbJ3Bvc3QnLCAncHV0JywgJ3BhdGNoJ10sIGZ1bmN0aW9uIGZvckVhY2hNZXRob2RXaXRoRGF0YShtZXRob2QpIHtcbiAgZGVmYXVsdHMuaGVhZGVyc1ttZXRob2RdID0gdXRpbHMubWVyZ2UoREVGQVVMVF9DT05URU5UX1RZUEUpO1xufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gZGVmYXVsdHM7XG4iLCIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYmluZChmbiwgdGhpc0FyZykge1xuICByZXR1cm4gZnVuY3Rpb24gd3JhcCgpIHtcbiAgICB2YXIgYXJncyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3MubGVuZ3RoOyBpKyspIHtcbiAgICAgIGFyZ3NbaV0gPSBhcmd1bWVudHNbaV07XG4gICAgfVxuICAgIHJldHVybiBmbi5hcHBseSh0aGlzQXJnLCBhcmdzKTtcbiAgfTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcblxuZnVuY3Rpb24gZW5jb2RlKHZhbCkge1xuICByZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KHZhbCkuXG4gICAgcmVwbGFjZSgvJTQwL2dpLCAnQCcpLlxuICAgIHJlcGxhY2UoLyUzQS9naSwgJzonKS5cbiAgICByZXBsYWNlKC8lMjQvZywgJyQnKS5cbiAgICByZXBsYWNlKC8lMkMvZ2ksICcsJykuXG4gICAgcmVwbGFjZSgvJTIwL2csICcrJykuXG4gICAgcmVwbGFjZSgvJTVCL2dpLCAnWycpLlxuICAgIHJlcGxhY2UoLyU1RC9naSwgJ10nKTtcbn1cblxuLyoqXG4gKiBCdWlsZCBhIFVSTCBieSBhcHBlbmRpbmcgcGFyYW1zIHRvIHRoZSBlbmRcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdXJsIFRoZSBiYXNlIG9mIHRoZSB1cmwgKGUuZy4sIGh0dHA6Ly93d3cuZ29vZ2xlLmNvbSlcbiAqIEBwYXJhbSB7b2JqZWN0fSBbcGFyYW1zXSBUaGUgcGFyYW1zIHRvIGJlIGFwcGVuZGVkXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgZm9ybWF0dGVkIHVybFxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGJ1aWxkVVJMKHVybCwgcGFyYW1zLCBwYXJhbXNTZXJpYWxpemVyKSB7XG4gIC8qZXNsaW50IG5vLXBhcmFtLXJlYXNzaWduOjAqL1xuICBpZiAoIXBhcmFtcykge1xuICAgIHJldHVybiB1cmw7XG4gIH1cblxuICB2YXIgc2VyaWFsaXplZFBhcmFtcztcbiAgaWYgKHBhcmFtc1NlcmlhbGl6ZXIpIHtcbiAgICBzZXJpYWxpemVkUGFyYW1zID0gcGFyYW1zU2VyaWFsaXplcihwYXJhbXMpO1xuICB9IGVsc2UgaWYgKHV0aWxzLmlzVVJMU2VhcmNoUGFyYW1zKHBhcmFtcykpIHtcbiAgICBzZXJpYWxpemVkUGFyYW1zID0gcGFyYW1zLnRvU3RyaW5nKCk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIHBhcnRzID0gW107XG5cbiAgICB1dGlscy5mb3JFYWNoKHBhcmFtcywgZnVuY3Rpb24gc2VyaWFsaXplKHZhbCwga2V5KSB7XG4gICAgICBpZiAodmFsID09PSBudWxsIHx8IHR5cGVvZiB2YWwgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKHV0aWxzLmlzQXJyYXkodmFsKSkge1xuICAgICAgICBrZXkgPSBrZXkgKyAnW10nO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFsID0gW3ZhbF07XG4gICAgICB9XG5cbiAgICAgIHV0aWxzLmZvckVhY2godmFsLCBmdW5jdGlvbiBwYXJzZVZhbHVlKHYpIHtcbiAgICAgICAgaWYgKHV0aWxzLmlzRGF0ZSh2KSkge1xuICAgICAgICAgIHYgPSB2LnRvSVNPU3RyaW5nKCk7XG4gICAgICAgIH0gZWxzZSBpZiAodXRpbHMuaXNPYmplY3QodikpIHtcbiAgICAgICAgICB2ID0gSlNPTi5zdHJpbmdpZnkodik7XG4gICAgICAgIH1cbiAgICAgICAgcGFydHMucHVzaChlbmNvZGUoa2V5KSArICc9JyArIGVuY29kZSh2KSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHNlcmlhbGl6ZWRQYXJhbXMgPSBwYXJ0cy5qb2luKCcmJyk7XG4gIH1cblxuICBpZiAoc2VyaWFsaXplZFBhcmFtcykge1xuICAgIHZhciBoYXNobWFya0luZGV4ID0gdXJsLmluZGV4T2YoJyMnKTtcbiAgICBpZiAoaGFzaG1hcmtJbmRleCAhPT0gLTEpIHtcbiAgICAgIHVybCA9IHVybC5zbGljZSgwLCBoYXNobWFya0luZGV4KTtcbiAgICB9XG5cbiAgICB1cmwgKz0gKHVybC5pbmRleE9mKCc/JykgPT09IC0xID8gJz8nIDogJyYnKSArIHNlcmlhbGl6ZWRQYXJhbXM7XG4gIH1cblxuICByZXR1cm4gdXJsO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IFVSTCBieSBjb21iaW5pbmcgdGhlIHNwZWNpZmllZCBVUkxzXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGJhc2VVUkwgVGhlIGJhc2UgVVJMXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVsYXRpdmVVUkwgVGhlIHJlbGF0aXZlIFVSTFxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGNvbWJpbmVkIFVSTFxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGNvbWJpbmVVUkxzKGJhc2VVUkwsIHJlbGF0aXZlVVJMKSB7XG4gIHJldHVybiByZWxhdGl2ZVVSTFxuICAgID8gYmFzZVVSTC5yZXBsYWNlKC9cXC8rJC8sICcnKSArICcvJyArIHJlbGF0aXZlVVJMLnJlcGxhY2UoL15cXC8rLywgJycpXG4gICAgOiBiYXNlVVJMO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi8uLi91dGlscycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IChcbiAgdXRpbHMuaXNTdGFuZGFyZEJyb3dzZXJFbnYoKSA/XG5cbiAgLy8gU3RhbmRhcmQgYnJvd3NlciBlbnZzIHN1cHBvcnQgZG9jdW1lbnQuY29va2llXG4gICAgKGZ1bmN0aW9uIHN0YW5kYXJkQnJvd3NlckVudigpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHdyaXRlOiBmdW5jdGlvbiB3cml0ZShuYW1lLCB2YWx1ZSwgZXhwaXJlcywgcGF0aCwgZG9tYWluLCBzZWN1cmUpIHtcbiAgICAgICAgICB2YXIgY29va2llID0gW107XG4gICAgICAgICAgY29va2llLnB1c2gobmFtZSArICc9JyArIGVuY29kZVVSSUNvbXBvbmVudCh2YWx1ZSkpO1xuXG4gICAgICAgICAgaWYgKHV0aWxzLmlzTnVtYmVyKGV4cGlyZXMpKSB7XG4gICAgICAgICAgICBjb29raWUucHVzaCgnZXhwaXJlcz0nICsgbmV3IERhdGUoZXhwaXJlcykudG9HTVRTdHJpbmcoKSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHV0aWxzLmlzU3RyaW5nKHBhdGgpKSB7XG4gICAgICAgICAgICBjb29raWUucHVzaCgncGF0aD0nICsgcGF0aCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHV0aWxzLmlzU3RyaW5nKGRvbWFpbikpIHtcbiAgICAgICAgICAgIGNvb2tpZS5wdXNoKCdkb21haW49JyArIGRvbWFpbik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHNlY3VyZSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgY29va2llLnB1c2goJ3NlY3VyZScpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGRvY3VtZW50LmNvb2tpZSA9IGNvb2tpZS5qb2luKCc7ICcpO1xuICAgICAgICB9LFxuXG4gICAgICAgIHJlYWQ6IGZ1bmN0aW9uIHJlYWQobmFtZSkge1xuICAgICAgICAgIHZhciBtYXRjaCA9IGRvY3VtZW50LmNvb2tpZS5tYXRjaChuZXcgUmVnRXhwKCcoXnw7XFxcXHMqKSgnICsgbmFtZSArICcpPShbXjtdKiknKSk7XG4gICAgICAgICAgcmV0dXJuIChtYXRjaCA/IGRlY29kZVVSSUNvbXBvbmVudChtYXRjaFszXSkgOiBudWxsKTtcbiAgICAgICAgfSxcblxuICAgICAgICByZW1vdmU6IGZ1bmN0aW9uIHJlbW92ZShuYW1lKSB7XG4gICAgICAgICAgdGhpcy53cml0ZShuYW1lLCAnJywgRGF0ZS5ub3coKSAtIDg2NDAwMDAwKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9KSgpIDpcblxuICAvLyBOb24gc3RhbmRhcmQgYnJvd3NlciBlbnYgKHdlYiB3b3JrZXJzLCByZWFjdC1uYXRpdmUpIGxhY2sgbmVlZGVkIHN1cHBvcnQuXG4gICAgKGZ1bmN0aW9uIG5vblN0YW5kYXJkQnJvd3NlckVudigpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHdyaXRlOiBmdW5jdGlvbiB3cml0ZSgpIHt9LFxuICAgICAgICByZWFkOiBmdW5jdGlvbiByZWFkKCkgeyByZXR1cm4gbnVsbDsgfSxcbiAgICAgICAgcmVtb3ZlOiBmdW5jdGlvbiByZW1vdmUoKSB7fVxuICAgICAgfTtcbiAgICB9KSgpXG4pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciB0aGUgc3BlY2lmaWVkIFVSTCBpcyBhYnNvbHV0ZVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB1cmwgVGhlIFVSTCB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgc3BlY2lmaWVkIFVSTCBpcyBhYnNvbHV0ZSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNBYnNvbHV0ZVVSTCh1cmwpIHtcbiAgLy8gQSBVUkwgaXMgY29uc2lkZXJlZCBhYnNvbHV0ZSBpZiBpdCBiZWdpbnMgd2l0aCBcIjxzY2hlbWU+Oi8vXCIgb3IgXCIvL1wiIChwcm90b2NvbC1yZWxhdGl2ZSBVUkwpLlxuICAvLyBSRkMgMzk4NiBkZWZpbmVzIHNjaGVtZSBuYW1lIGFzIGEgc2VxdWVuY2Ugb2YgY2hhcmFjdGVycyBiZWdpbm5pbmcgd2l0aCBhIGxldHRlciBhbmQgZm9sbG93ZWRcbiAgLy8gYnkgYW55IGNvbWJpbmF0aW9uIG9mIGxldHRlcnMsIGRpZ2l0cywgcGx1cywgcGVyaW9kLCBvciBoeXBoZW4uXG4gIHJldHVybiAvXihbYS16XVthLXpcXGRcXCtcXC1cXC5dKjopP1xcL1xcLy9pLnRlc3QodXJsKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSAoXG4gIHV0aWxzLmlzU3RhbmRhcmRCcm93c2VyRW52KCkgP1xuXG4gIC8vIFN0YW5kYXJkIGJyb3dzZXIgZW52cyBoYXZlIGZ1bGwgc3VwcG9ydCBvZiB0aGUgQVBJcyBuZWVkZWQgdG8gdGVzdFxuICAvLyB3aGV0aGVyIHRoZSByZXF1ZXN0IFVSTCBpcyBvZiB0aGUgc2FtZSBvcmlnaW4gYXMgY3VycmVudCBsb2NhdGlvbi5cbiAgICAoZnVuY3Rpb24gc3RhbmRhcmRCcm93c2VyRW52KCkge1xuICAgICAgdmFyIG1zaWUgPSAvKG1zaWV8dHJpZGVudCkvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xuICAgICAgdmFyIHVybFBhcnNpbmdOb2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuICAgICAgdmFyIG9yaWdpblVSTDtcblxuICAgICAgLyoqXG4gICAgKiBQYXJzZSBhIFVSTCB0byBkaXNjb3ZlciBpdCdzIGNvbXBvbmVudHNcbiAgICAqXG4gICAgKiBAcGFyYW0ge1N0cmluZ30gdXJsIFRoZSBVUkwgdG8gYmUgcGFyc2VkXG4gICAgKiBAcmV0dXJucyB7T2JqZWN0fVxuICAgICovXG4gICAgICBmdW5jdGlvbiByZXNvbHZlVVJMKHVybCkge1xuICAgICAgICB2YXIgaHJlZiA9IHVybDtcblxuICAgICAgICBpZiAobXNpZSkge1xuICAgICAgICAvLyBJRSBuZWVkcyBhdHRyaWJ1dGUgc2V0IHR3aWNlIHRvIG5vcm1hbGl6ZSBwcm9wZXJ0aWVzXG4gICAgICAgICAgdXJsUGFyc2luZ05vZGUuc2V0QXR0cmlidXRlKCdocmVmJywgaHJlZik7XG4gICAgICAgICAgaHJlZiA9IHVybFBhcnNpbmdOb2RlLmhyZWY7XG4gICAgICAgIH1cblxuICAgICAgICB1cmxQYXJzaW5nTm9kZS5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCBocmVmKTtcblxuICAgICAgICAvLyB1cmxQYXJzaW5nTm9kZSBwcm92aWRlcyB0aGUgVXJsVXRpbHMgaW50ZXJmYWNlIC0gaHR0cDovL3VybC5zcGVjLndoYXR3Zy5vcmcvI3VybHV0aWxzXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgaHJlZjogdXJsUGFyc2luZ05vZGUuaHJlZixcbiAgICAgICAgICBwcm90b2NvbDogdXJsUGFyc2luZ05vZGUucHJvdG9jb2wgPyB1cmxQYXJzaW5nTm9kZS5wcm90b2NvbC5yZXBsYWNlKC86JC8sICcnKSA6ICcnLFxuICAgICAgICAgIGhvc3Q6IHVybFBhcnNpbmdOb2RlLmhvc3QsXG4gICAgICAgICAgc2VhcmNoOiB1cmxQYXJzaW5nTm9kZS5zZWFyY2ggPyB1cmxQYXJzaW5nTm9kZS5zZWFyY2gucmVwbGFjZSgvXlxcPy8sICcnKSA6ICcnLFxuICAgICAgICAgIGhhc2g6IHVybFBhcnNpbmdOb2RlLmhhc2ggPyB1cmxQYXJzaW5nTm9kZS5oYXNoLnJlcGxhY2UoL14jLywgJycpIDogJycsXG4gICAgICAgICAgaG9zdG5hbWU6IHVybFBhcnNpbmdOb2RlLmhvc3RuYW1lLFxuICAgICAgICAgIHBvcnQ6IHVybFBhcnNpbmdOb2RlLnBvcnQsXG4gICAgICAgICAgcGF0aG5hbWU6ICh1cmxQYXJzaW5nTm9kZS5wYXRobmFtZS5jaGFyQXQoMCkgPT09ICcvJykgP1xuICAgICAgICAgICAgdXJsUGFyc2luZ05vZGUucGF0aG5hbWUgOlxuICAgICAgICAgICAgJy8nICsgdXJsUGFyc2luZ05vZGUucGF0aG5hbWVcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgb3JpZ2luVVJMID0gcmVzb2x2ZVVSTCh3aW5kb3cubG9jYXRpb24uaHJlZik7XG5cbiAgICAgIC8qKlxuICAgICogRGV0ZXJtaW5lIGlmIGEgVVJMIHNoYXJlcyB0aGUgc2FtZSBvcmlnaW4gYXMgdGhlIGN1cnJlbnQgbG9jYXRpb25cbiAgICAqXG4gICAgKiBAcGFyYW0ge1N0cmluZ30gcmVxdWVzdFVSTCBUaGUgVVJMIHRvIHRlc3RcbiAgICAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIFVSTCBzaGFyZXMgdGhlIHNhbWUgb3JpZ2luLCBvdGhlcndpc2UgZmFsc2VcbiAgICAqL1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uIGlzVVJMU2FtZU9yaWdpbihyZXF1ZXN0VVJMKSB7XG4gICAgICAgIHZhciBwYXJzZWQgPSAodXRpbHMuaXNTdHJpbmcocmVxdWVzdFVSTCkpID8gcmVzb2x2ZVVSTChyZXF1ZXN0VVJMKSA6IHJlcXVlc3RVUkw7XG4gICAgICAgIHJldHVybiAocGFyc2VkLnByb3RvY29sID09PSBvcmlnaW5VUkwucHJvdG9jb2wgJiZcbiAgICAgICAgICAgIHBhcnNlZC5ob3N0ID09PSBvcmlnaW5VUkwuaG9zdCk7XG4gICAgICB9O1xuICAgIH0pKCkgOlxuXG4gIC8vIE5vbiBzdGFuZGFyZCBicm93c2VyIGVudnMgKHdlYiB3b3JrZXJzLCByZWFjdC1uYXRpdmUpIGxhY2sgbmVlZGVkIHN1cHBvcnQuXG4gICAgKGZ1bmN0aW9uIG5vblN0YW5kYXJkQnJvd3NlckVudigpIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbiBpc1VSTFNhbWVPcmlnaW4oKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfTtcbiAgICB9KSgpXG4pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIG5vcm1hbGl6ZUhlYWRlck5hbWUoaGVhZGVycywgbm9ybWFsaXplZE5hbWUpIHtcbiAgdXRpbHMuZm9yRWFjaChoZWFkZXJzLCBmdW5jdGlvbiBwcm9jZXNzSGVhZGVyKHZhbHVlLCBuYW1lKSB7XG4gICAgaWYgKG5hbWUgIT09IG5vcm1hbGl6ZWROYW1lICYmIG5hbWUudG9VcHBlckNhc2UoKSA9PT0gbm9ybWFsaXplZE5hbWUudG9VcHBlckNhc2UoKSkge1xuICAgICAgaGVhZGVyc1tub3JtYWxpemVkTmFtZV0gPSB2YWx1ZTtcbiAgICAgIGRlbGV0ZSBoZWFkZXJzW25hbWVdO1xuICAgIH1cbiAgfSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XG5cbi8vIEhlYWRlcnMgd2hvc2UgZHVwbGljYXRlcyBhcmUgaWdub3JlZCBieSBub2RlXG4vLyBjLmYuIGh0dHBzOi8vbm9kZWpzLm9yZy9hcGkvaHR0cC5odG1sI2h0dHBfbWVzc2FnZV9oZWFkZXJzXG52YXIgaWdub3JlRHVwbGljYXRlT2YgPSBbXG4gICdhZ2UnLCAnYXV0aG9yaXphdGlvbicsICdjb250ZW50LWxlbmd0aCcsICdjb250ZW50LXR5cGUnLCAnZXRhZycsXG4gICdleHBpcmVzJywgJ2Zyb20nLCAnaG9zdCcsICdpZi1tb2RpZmllZC1zaW5jZScsICdpZi11bm1vZGlmaWVkLXNpbmNlJyxcbiAgJ2xhc3QtbW9kaWZpZWQnLCAnbG9jYXRpb24nLCAnbWF4LWZvcndhcmRzJywgJ3Byb3h5LWF1dGhvcml6YXRpb24nLFxuICAncmVmZXJlcicsICdyZXRyeS1hZnRlcicsICd1c2VyLWFnZW50J1xuXTtcblxuLyoqXG4gKiBQYXJzZSBoZWFkZXJzIGludG8gYW4gb2JqZWN0XG4gKlxuICogYGBgXG4gKiBEYXRlOiBXZWQsIDI3IEF1ZyAyMDE0IDA4OjU4OjQ5IEdNVFxuICogQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi9qc29uXG4gKiBDb25uZWN0aW9uOiBrZWVwLWFsaXZlXG4gKiBUcmFuc2Zlci1FbmNvZGluZzogY2h1bmtlZFxuICogYGBgXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGhlYWRlcnMgSGVhZGVycyBuZWVkaW5nIHRvIGJlIHBhcnNlZFxuICogQHJldHVybnMge09iamVjdH0gSGVhZGVycyBwYXJzZWQgaW50byBhbiBvYmplY3RcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBwYXJzZUhlYWRlcnMoaGVhZGVycykge1xuICB2YXIgcGFyc2VkID0ge307XG4gIHZhciBrZXk7XG4gIHZhciB2YWw7XG4gIHZhciBpO1xuXG4gIGlmICghaGVhZGVycykgeyByZXR1cm4gcGFyc2VkOyB9XG5cbiAgdXRpbHMuZm9yRWFjaChoZWFkZXJzLnNwbGl0KCdcXG4nKSwgZnVuY3Rpb24gcGFyc2VyKGxpbmUpIHtcbiAgICBpID0gbGluZS5pbmRleE9mKCc6Jyk7XG4gICAga2V5ID0gdXRpbHMudHJpbShsaW5lLnN1YnN0cigwLCBpKSkudG9Mb3dlckNhc2UoKTtcbiAgICB2YWwgPSB1dGlscy50cmltKGxpbmUuc3Vic3RyKGkgKyAxKSk7XG5cbiAgICBpZiAoa2V5KSB7XG4gICAgICBpZiAocGFyc2VkW2tleV0gJiYgaWdub3JlRHVwbGljYXRlT2YuaW5kZXhPZihrZXkpID49IDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKGtleSA9PT0gJ3NldC1jb29raWUnKSB7XG4gICAgICAgIHBhcnNlZFtrZXldID0gKHBhcnNlZFtrZXldID8gcGFyc2VkW2tleV0gOiBbXSkuY29uY2F0KFt2YWxdKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBhcnNlZFtrZXldID0gcGFyc2VkW2tleV0gPyBwYXJzZWRba2V5XSArICcsICcgKyB2YWwgOiB2YWw7XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gcGFyc2VkO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBTeW50YWN0aWMgc3VnYXIgZm9yIGludm9raW5nIGEgZnVuY3Rpb24gYW5kIGV4cGFuZGluZyBhbiBhcnJheSBmb3IgYXJndW1lbnRzLlxuICpcbiAqIENvbW1vbiB1c2UgY2FzZSB3b3VsZCBiZSB0byB1c2UgYEZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseWAuXG4gKlxuICogIGBgYGpzXG4gKiAgZnVuY3Rpb24gZih4LCB5LCB6KSB7fVxuICogIHZhciBhcmdzID0gWzEsIDIsIDNdO1xuICogIGYuYXBwbHkobnVsbCwgYXJncyk7XG4gKiAgYGBgXG4gKlxuICogV2l0aCBgc3ByZWFkYCB0aGlzIGV4YW1wbGUgY2FuIGJlIHJlLXdyaXR0ZW4uXG4gKlxuICogIGBgYGpzXG4gKiAgc3ByZWFkKGZ1bmN0aW9uKHgsIHksIHopIHt9KShbMSwgMiwgM10pO1xuICogIGBgYFxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259XG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gc3ByZWFkKGNhbGxiYWNrKSB7XG4gIHJldHVybiBmdW5jdGlvbiB3cmFwKGFycikge1xuICAgIHJldHVybiBjYWxsYmFjay5hcHBseShudWxsLCBhcnIpO1xuICB9O1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGJpbmQgPSByZXF1aXJlKCcuL2hlbHBlcnMvYmluZCcpO1xudmFyIGlzQnVmZmVyID0gcmVxdWlyZSgnaXMtYnVmZmVyJyk7XG5cbi8qZ2xvYmFsIHRvU3RyaW5nOnRydWUqL1xuXG4vLyB1dGlscyBpcyBhIGxpYnJhcnkgb2YgZ2VuZXJpYyBoZWxwZXIgZnVuY3Rpb25zIG5vbi1zcGVjaWZpYyB0byBheGlvc1xuXG52YXIgdG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGFuIEFycmF5XG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYW4gQXJyYXksIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0FycmF5KHZhbCkge1xuICByZXR1cm4gdG9TdHJpbmcuY2FsbCh2YWwpID09PSAnW29iamVjdCBBcnJheV0nO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGFuIEFycmF5QnVmZmVyXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYW4gQXJyYXlCdWZmZXIsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0FycmF5QnVmZmVyKHZhbCkge1xuICByZXR1cm4gdG9TdHJpbmcuY2FsbCh2YWwpID09PSAnW29iamVjdCBBcnJheUJ1ZmZlcl0nO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRm9ybURhdGFcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhbiBGb3JtRGF0YSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzRm9ybURhdGEodmFsKSB7XG4gIHJldHVybiAodHlwZW9mIEZvcm1EYXRhICE9PSAndW5kZWZpbmVkJykgJiYgKHZhbCBpbnN0YW5jZW9mIEZvcm1EYXRhKTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIHZpZXcgb24gYW4gQXJyYXlCdWZmZXJcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIHZpZXcgb24gYW4gQXJyYXlCdWZmZXIsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0FycmF5QnVmZmVyVmlldyh2YWwpIHtcbiAgdmFyIHJlc3VsdDtcbiAgaWYgKCh0eXBlb2YgQXJyYXlCdWZmZXIgIT09ICd1bmRlZmluZWQnKSAmJiAoQXJyYXlCdWZmZXIuaXNWaWV3KSkge1xuICAgIHJlc3VsdCA9IEFycmF5QnVmZmVyLmlzVmlldyh2YWwpO1xuICB9IGVsc2Uge1xuICAgIHJlc3VsdCA9ICh2YWwpICYmICh2YWwuYnVmZmVyKSAmJiAodmFsLmJ1ZmZlciBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgU3RyaW5nXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBTdHJpbmcsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc1N0cmluZyh2YWwpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgTnVtYmVyXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBOdW1iZXIsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc051bWJlcih2YWwpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWwgPT09ICdudW1iZXInO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIHVuZGVmaW5lZFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSB2YWx1ZSBpcyB1bmRlZmluZWQsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc1VuZGVmaW5lZCh2YWwpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWwgPT09ICd1bmRlZmluZWQnO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGFuIE9iamVjdFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGFuIE9iamVjdCwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzT2JqZWN0KHZhbCkge1xuICByZXR1cm4gdmFsICE9PSBudWxsICYmIHR5cGVvZiB2YWwgPT09ICdvYmplY3QnO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRGF0ZVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgRGF0ZSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzRGF0ZSh2YWwpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwodmFsKSA9PT0gJ1tvYmplY3QgRGF0ZV0nO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRmlsZVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgRmlsZSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzRmlsZSh2YWwpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwodmFsKSA9PT0gJ1tvYmplY3QgRmlsZV0nO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgQmxvYlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgQmxvYiwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQmxvYih2YWwpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwodmFsKSA9PT0gJ1tvYmplY3QgQmxvYl0nO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRnVuY3Rpb25cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEZ1bmN0aW9uLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNGdW5jdGlvbih2YWwpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwodmFsKSA9PT0gJ1tvYmplY3QgRnVuY3Rpb25dJztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIFN0cmVhbVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgU3RyZWFtLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNTdHJlYW0odmFsKSB7XG4gIHJldHVybiBpc09iamVjdCh2YWwpICYmIGlzRnVuY3Rpb24odmFsLnBpcGUpO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgVVJMU2VhcmNoUGFyYW1zIG9iamVjdFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgVVJMU2VhcmNoUGFyYW1zIG9iamVjdCwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzVVJMU2VhcmNoUGFyYW1zKHZhbCkge1xuICByZXR1cm4gdHlwZW9mIFVSTFNlYXJjaFBhcmFtcyAhPT0gJ3VuZGVmaW5lZCcgJiYgdmFsIGluc3RhbmNlb2YgVVJMU2VhcmNoUGFyYW1zO1xufVxuXG4vKipcbiAqIFRyaW0gZXhjZXNzIHdoaXRlc3BhY2Ugb2ZmIHRoZSBiZWdpbm5pbmcgYW5kIGVuZCBvZiBhIHN0cmluZ1xuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHIgVGhlIFN0cmluZyB0byB0cmltXG4gKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgU3RyaW5nIGZyZWVkIG9mIGV4Y2VzcyB3aGl0ZXNwYWNlXG4gKi9cbmZ1bmN0aW9uIHRyaW0oc3RyKSB7XG4gIHJldHVybiBzdHIucmVwbGFjZSgvXlxccyovLCAnJykucmVwbGFjZSgvXFxzKiQvLCAnJyk7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIHdlJ3JlIHJ1bm5pbmcgaW4gYSBzdGFuZGFyZCBicm93c2VyIGVudmlyb25tZW50XG4gKlxuICogVGhpcyBhbGxvd3MgYXhpb3MgdG8gcnVuIGluIGEgd2ViIHdvcmtlciwgYW5kIHJlYWN0LW5hdGl2ZS5cbiAqIEJvdGggZW52aXJvbm1lbnRzIHN1cHBvcnQgWE1MSHR0cFJlcXVlc3QsIGJ1dCBub3QgZnVsbHkgc3RhbmRhcmQgZ2xvYmFscy5cbiAqXG4gKiB3ZWIgd29ya2VyczpcbiAqICB0eXBlb2Ygd2luZG93IC0+IHVuZGVmaW5lZFxuICogIHR5cGVvZiBkb2N1bWVudCAtPiB1bmRlZmluZWRcbiAqXG4gKiByZWFjdC1uYXRpdmU6XG4gKiAgbmF2aWdhdG9yLnByb2R1Y3QgLT4gJ1JlYWN0TmF0aXZlJ1xuICogbmF0aXZlc2NyaXB0XG4gKiAgbmF2aWdhdG9yLnByb2R1Y3QgLT4gJ05hdGl2ZVNjcmlwdCcgb3IgJ05TJ1xuICovXG5mdW5jdGlvbiBpc1N0YW5kYXJkQnJvd3NlckVudigpIHtcbiAgaWYgKHR5cGVvZiBuYXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnICYmIChuYXZpZ2F0b3IucHJvZHVjdCA9PT0gJ1JlYWN0TmF0aXZlJyB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdmlnYXRvci5wcm9kdWN0ID09PSAnTmF0aXZlU2NyaXB0JyB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdmlnYXRvci5wcm9kdWN0ID09PSAnTlMnKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gKFxuICAgIHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmXG4gICAgdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJ1xuICApO1xufVxuXG4vKipcbiAqIEl0ZXJhdGUgb3ZlciBhbiBBcnJheSBvciBhbiBPYmplY3QgaW52b2tpbmcgYSBmdW5jdGlvbiBmb3IgZWFjaCBpdGVtLlxuICpcbiAqIElmIGBvYmpgIGlzIGFuIEFycmF5IGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkIHBhc3NpbmdcbiAqIHRoZSB2YWx1ZSwgaW5kZXgsIGFuZCBjb21wbGV0ZSBhcnJheSBmb3IgZWFjaCBpdGVtLlxuICpcbiAqIElmICdvYmonIGlzIGFuIE9iamVjdCBjYWxsYmFjayB3aWxsIGJlIGNhbGxlZCBwYXNzaW5nXG4gKiB0aGUgdmFsdWUsIGtleSwgYW5kIGNvbXBsZXRlIG9iamVjdCBmb3IgZWFjaCBwcm9wZXJ0eS5cbiAqXG4gKiBAcGFyYW0ge09iamVjdHxBcnJheX0gb2JqIFRoZSBvYmplY3QgdG8gaXRlcmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gVGhlIGNhbGxiYWNrIHRvIGludm9rZSBmb3IgZWFjaCBpdGVtXG4gKi9cbmZ1bmN0aW9uIGZvckVhY2gob2JqLCBmbikge1xuICAvLyBEb24ndCBib3RoZXIgaWYgbm8gdmFsdWUgcHJvdmlkZWRcbiAgaWYgKG9iaiA9PT0gbnVsbCB8fCB0eXBlb2Ygb2JqID09PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIEZvcmNlIGFuIGFycmF5IGlmIG5vdCBhbHJlYWR5IHNvbWV0aGluZyBpdGVyYWJsZVxuICBpZiAodHlwZW9mIG9iaiAhPT0gJ29iamVjdCcpIHtcbiAgICAvKmVzbGludCBuby1wYXJhbS1yZWFzc2lnbjowKi9cbiAgICBvYmogPSBbb2JqXTtcbiAgfVxuXG4gIGlmIChpc0FycmF5KG9iaikpIHtcbiAgICAvLyBJdGVyYXRlIG92ZXIgYXJyYXkgdmFsdWVzXG4gICAgZm9yICh2YXIgaSA9IDAsIGwgPSBvYmoubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICBmbi5jYWxsKG51bGwsIG9ialtpXSwgaSwgb2JqKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gSXRlcmF0ZSBvdmVyIG9iamVjdCBrZXlzXG4gICAgZm9yICh2YXIga2V5IGluIG9iaikge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSkpIHtcbiAgICAgICAgZm4uY2FsbChudWxsLCBvYmpba2V5XSwga2V5LCBvYmopO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEFjY2VwdHMgdmFyYXJncyBleHBlY3RpbmcgZWFjaCBhcmd1bWVudCB0byBiZSBhbiBvYmplY3QsIHRoZW5cbiAqIGltbXV0YWJseSBtZXJnZXMgdGhlIHByb3BlcnRpZXMgb2YgZWFjaCBvYmplY3QgYW5kIHJldHVybnMgcmVzdWx0LlxuICpcbiAqIFdoZW4gbXVsdGlwbGUgb2JqZWN0cyBjb250YWluIHRoZSBzYW1lIGtleSB0aGUgbGF0ZXIgb2JqZWN0IGluXG4gKiB0aGUgYXJndW1lbnRzIGxpc3Qgd2lsbCB0YWtlIHByZWNlZGVuY2UuXG4gKlxuICogRXhhbXBsZTpcbiAqXG4gKiBgYGBqc1xuICogdmFyIHJlc3VsdCA9IG1lcmdlKHtmb286IDEyM30sIHtmb286IDQ1Nn0pO1xuICogY29uc29sZS5sb2cocmVzdWx0LmZvbyk7IC8vIG91dHB1dHMgNDU2XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqMSBPYmplY3QgdG8gbWVyZ2VcbiAqIEByZXR1cm5zIHtPYmplY3R9IFJlc3VsdCBvZiBhbGwgbWVyZ2UgcHJvcGVydGllc1xuICovXG5mdW5jdGlvbiBtZXJnZSgvKiBvYmoxLCBvYmoyLCBvYmozLCAuLi4gKi8pIHtcbiAgdmFyIHJlc3VsdCA9IHt9O1xuICBmdW5jdGlvbiBhc3NpZ25WYWx1ZSh2YWwsIGtleSkge1xuICAgIGlmICh0eXBlb2YgcmVzdWx0W2tleV0gPT09ICdvYmplY3QnICYmIHR5cGVvZiB2YWwgPT09ICdvYmplY3QnKSB7XG4gICAgICByZXN1bHRba2V5XSA9IG1lcmdlKHJlc3VsdFtrZXldLCB2YWwpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHRba2V5XSA9IHZhbDtcbiAgICB9XG4gIH1cblxuICBmb3IgKHZhciBpID0gMCwgbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICBmb3JFYWNoKGFyZ3VtZW50c1tpXSwgYXNzaWduVmFsdWUpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogRnVuY3Rpb24gZXF1YWwgdG8gbWVyZ2Ugd2l0aCB0aGUgZGlmZmVyZW5jZSBiZWluZyB0aGF0IG5vIHJlZmVyZW5jZVxuICogdG8gb3JpZ2luYWwgb2JqZWN0cyBpcyBrZXB0LlxuICpcbiAqIEBzZWUgbWVyZ2VcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmoxIE9iamVjdCB0byBtZXJnZVxuICogQHJldHVybnMge09iamVjdH0gUmVzdWx0IG9mIGFsbCBtZXJnZSBwcm9wZXJ0aWVzXG4gKi9cbmZ1bmN0aW9uIGRlZXBNZXJnZSgvKiBvYmoxLCBvYmoyLCBvYmozLCAuLi4gKi8pIHtcbiAgdmFyIHJlc3VsdCA9IHt9O1xuICBmdW5jdGlvbiBhc3NpZ25WYWx1ZSh2YWwsIGtleSkge1xuICAgIGlmICh0eXBlb2YgcmVzdWx0W2tleV0gPT09ICdvYmplY3QnICYmIHR5cGVvZiB2YWwgPT09ICdvYmplY3QnKSB7XG4gICAgICByZXN1bHRba2V5XSA9IGRlZXBNZXJnZShyZXN1bHRba2V5XSwgdmFsKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWwgPT09ICdvYmplY3QnKSB7XG4gICAgICByZXN1bHRba2V5XSA9IGRlZXBNZXJnZSh7fSwgdmFsKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0W2tleV0gPSB2YWw7XG4gICAgfVxuICB9XG5cbiAgZm9yICh2YXIgaSA9IDAsIGwgPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgZm9yRWFjaChhcmd1bWVudHNbaV0sIGFzc2lnblZhbHVlKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIEV4dGVuZHMgb2JqZWN0IGEgYnkgbXV0YWJseSBhZGRpbmcgdG8gaXQgdGhlIHByb3BlcnRpZXMgb2Ygb2JqZWN0IGIuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGEgVGhlIG9iamVjdCB0byBiZSBleHRlbmRlZFxuICogQHBhcmFtIHtPYmplY3R9IGIgVGhlIG9iamVjdCB0byBjb3B5IHByb3BlcnRpZXMgZnJvbVxuICogQHBhcmFtIHtPYmplY3R9IHRoaXNBcmcgVGhlIG9iamVjdCB0byBiaW5kIGZ1bmN0aW9uIHRvXG4gKiBAcmV0dXJuIHtPYmplY3R9IFRoZSByZXN1bHRpbmcgdmFsdWUgb2Ygb2JqZWN0IGFcbiAqL1xuZnVuY3Rpb24gZXh0ZW5kKGEsIGIsIHRoaXNBcmcpIHtcbiAgZm9yRWFjaChiLCBmdW5jdGlvbiBhc3NpZ25WYWx1ZSh2YWwsIGtleSkge1xuICAgIGlmICh0aGlzQXJnICYmIHR5cGVvZiB2YWwgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGFba2V5XSA9IGJpbmQodmFsLCB0aGlzQXJnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYVtrZXldID0gdmFsO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBhO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgaXNBcnJheTogaXNBcnJheSxcbiAgaXNBcnJheUJ1ZmZlcjogaXNBcnJheUJ1ZmZlcixcbiAgaXNCdWZmZXI6IGlzQnVmZmVyLFxuICBpc0Zvcm1EYXRhOiBpc0Zvcm1EYXRhLFxuICBpc0FycmF5QnVmZmVyVmlldzogaXNBcnJheUJ1ZmZlclZpZXcsXG4gIGlzU3RyaW5nOiBpc1N0cmluZyxcbiAgaXNOdW1iZXI6IGlzTnVtYmVyLFxuICBpc09iamVjdDogaXNPYmplY3QsXG4gIGlzVW5kZWZpbmVkOiBpc1VuZGVmaW5lZCxcbiAgaXNEYXRlOiBpc0RhdGUsXG4gIGlzRmlsZTogaXNGaWxlLFxuICBpc0Jsb2I6IGlzQmxvYixcbiAgaXNGdW5jdGlvbjogaXNGdW5jdGlvbixcbiAgaXNTdHJlYW06IGlzU3RyZWFtLFxuICBpc1VSTFNlYXJjaFBhcmFtczogaXNVUkxTZWFyY2hQYXJhbXMsXG4gIGlzU3RhbmRhcmRCcm93c2VyRW52OiBpc1N0YW5kYXJkQnJvd3NlckVudixcbiAgZm9yRWFjaDogZm9yRWFjaCxcbiAgbWVyZ2U6IG1lcmdlLFxuICBkZWVwTWVyZ2U6IGRlZXBNZXJnZSxcbiAgZXh0ZW5kOiBleHRlbmQsXG4gIHRyaW06IHRyaW1cbn07XG4iLCJ2YXIgbmVzdFJFID0gL14oYXR0cnN8cHJvcHN8b258bmF0aXZlT258Y2xhc3N8c3R5bGV8aG9vaykkL1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIG1lcmdlSlNYUHJvcHMgKG9ianMpIHtcbiAgcmV0dXJuIG9ianMucmVkdWNlKGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgdmFyIGFhLCBiYiwga2V5LCBuZXN0ZWRLZXksIHRlbXBcbiAgICBmb3IgKGtleSBpbiBiKSB7XG4gICAgICBhYSA9IGFba2V5XVxuICAgICAgYmIgPSBiW2tleV1cbiAgICAgIGlmIChhYSAmJiBuZXN0UkUudGVzdChrZXkpKSB7XG4gICAgICAgIC8vIG5vcm1hbGl6ZSBjbGFzc1xuICAgICAgICBpZiAoa2V5ID09PSAnY2xhc3MnKSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBhYSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHRlbXAgPSBhYVxuICAgICAgICAgICAgYVtrZXldID0gYWEgPSB7fVxuICAgICAgICAgICAgYWFbdGVtcF0gPSB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh0eXBlb2YgYmIgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICB0ZW1wID0gYmJcbiAgICAgICAgICAgIGJba2V5XSA9IGJiID0ge31cbiAgICAgICAgICAgIGJiW3RlbXBdID0gdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoa2V5ID09PSAnb24nIHx8IGtleSA9PT0gJ25hdGl2ZU9uJyB8fCBrZXkgPT09ICdob29rJykge1xuICAgICAgICAgIC8vIG1lcmdlIGZ1bmN0aW9uc1xuICAgICAgICAgIGZvciAobmVzdGVkS2V5IGluIGJiKSB7XG4gICAgICAgICAgICBhYVtuZXN0ZWRLZXldID0gbWVyZ2VGbihhYVtuZXN0ZWRLZXldLCBiYltuZXN0ZWRLZXldKVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGFhKSkge1xuICAgICAgICAgIGFba2V5XSA9IGFhLmNvbmNhdChiYilcbiAgICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGJiKSkge1xuICAgICAgICAgIGFba2V5XSA9IFthYV0uY29uY2F0KGJiKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGZvciAobmVzdGVkS2V5IGluIGJiKSB7XG4gICAgICAgICAgICBhYVtuZXN0ZWRLZXldID0gYmJbbmVzdGVkS2V5XVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYVtrZXldID0gYltrZXldXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBhXG4gIH0sIHt9KVxufVxuXG5mdW5jdGlvbiBtZXJnZUZuIChhLCBiKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgYSAmJiBhLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbiAgICBiICYmIGIuYXBwbHkodGhpcywgYXJndW1lbnRzKVxuICB9XG59XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHsgXCJkZWZhdWx0XCI6IHJlcXVpcmUoXCJjb3JlLWpzL2xpYnJhcnkvZm4vanNvbi9zdHJpbmdpZnlcIiksIF9fZXNNb2R1bGU6IHRydWUgfTsiLCJtb2R1bGUuZXhwb3J0cyA9IHsgXCJkZWZhdWx0XCI6IHJlcXVpcmUoXCJjb3JlLWpzL2xpYnJhcnkvZm4vb2JqZWN0L2tleXNcIiksIF9fZXNNb2R1bGU6IHRydWUgfTsiLCJtb2R1bGUuZXhwb3J0cyA9IHsgXCJkZWZhdWx0XCI6IHJlcXVpcmUoXCJjb3JlLWpzL2xpYnJhcnkvZm4vcHJvbWlzZVwiKSwgX19lc01vZHVsZTogdHJ1ZSB9OyIsIm1vZHVsZS5leHBvcnRzID0geyBcImRlZmF1bHRcIjogcmVxdWlyZShcImNvcmUtanMvbGlicmFyeS9mbi9zeW1ib2xcIiksIF9fZXNNb2R1bGU6IHRydWUgfTsiLCJtb2R1bGUuZXhwb3J0cyA9IHsgXCJkZWZhdWx0XCI6IHJlcXVpcmUoXCJjb3JlLWpzL2xpYnJhcnkvZm4vc3ltYm9sL2l0ZXJhdG9yXCIpLCBfX2VzTW9kdWxlOiB0cnVlIH07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cbnZhciBfcHJvbWlzZSA9IHJlcXVpcmUoXCIuLi9jb3JlLWpzL3Byb21pc2VcIik7XG5cbnZhciBfcHJvbWlzZTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9wcm9taXNlKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuZXhwb3J0cy5kZWZhdWx0ID0gZnVuY3Rpb24gKGZuKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGdlbiA9IGZuLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgcmV0dXJuIG5ldyBfcHJvbWlzZTIuZGVmYXVsdChmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICBmdW5jdGlvbiBzdGVwKGtleSwgYXJnKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdmFyIGluZm8gPSBnZW5ba2V5XShhcmcpO1xuICAgICAgICAgIHZhciB2YWx1ZSA9IGluZm8udmFsdWU7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaW5mby5kb25lKSB7XG4gICAgICAgICAgcmVzb2x2ZSh2YWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIF9wcm9taXNlMi5kZWZhdWx0LnJlc29sdmUodmFsdWUpLnRoZW4oZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICBzdGVwKFwibmV4dFwiLCB2YWx1ZSk7XG4gICAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgc3RlcChcInRocm93XCIsIGVycik7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHN0ZXAoXCJuZXh0XCIpO1xuICAgIH0pO1xuICB9O1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblxuZXhwb3J0cy5kZWZhdWx0ID0gZnVuY3Rpb24gKGluc3RhbmNlLCBDb25zdHJ1Y3Rvcikge1xuICBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7XG4gIH1cbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cbnZhciBfaXRlcmF0b3IgPSByZXF1aXJlKFwiLi4vY29yZS1qcy9zeW1ib2wvaXRlcmF0b3JcIik7XG5cbnZhciBfaXRlcmF0b3IyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfaXRlcmF0b3IpO1xuXG52YXIgX3N5bWJvbCA9IHJlcXVpcmUoXCIuLi9jb3JlLWpzL3N5bWJvbFwiKTtcblxudmFyIF9zeW1ib2wyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfc3ltYm9sKTtcblxudmFyIF90eXBlb2YgPSB0eXBlb2YgX3N5bWJvbDIuZGVmYXVsdCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBfaXRlcmF0b3IyLmRlZmF1bHQgPT09IFwic3ltYm9sXCIgPyBmdW5jdGlvbiAob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9IDogZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBfc3ltYm9sMi5kZWZhdWx0ID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBfc3ltYm9sMi5kZWZhdWx0ICYmIG9iaiAhPT0gX3N5bWJvbDIuZGVmYXVsdC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuZXhwb3J0cy5kZWZhdWx0ID0gdHlwZW9mIF9zeW1ib2wyLmRlZmF1bHQgPT09IFwiZnVuY3Rpb25cIiAmJiBfdHlwZW9mKF9pdGVyYXRvcjIuZGVmYXVsdCkgPT09IFwic3ltYm9sXCIgPyBmdW5jdGlvbiAob2JqKSB7XG4gIHJldHVybiB0eXBlb2Ygb2JqID09PSBcInVuZGVmaW5lZFwiID8gXCJ1bmRlZmluZWRcIiA6IF90eXBlb2Yob2JqKTtcbn0gOiBmdW5jdGlvbiAob2JqKSB7XG4gIHJldHVybiBvYmogJiYgdHlwZW9mIF9zeW1ib2wyLmRlZmF1bHQgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IF9zeW1ib2wyLmRlZmF1bHQgJiYgb2JqICE9PSBfc3ltYm9sMi5kZWZhdWx0LnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqID09PSBcInVuZGVmaW5lZFwiID8gXCJ1bmRlZmluZWRcIiA6IF90eXBlb2Yob2JqKTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicmVnZW5lcmF0b3ItcnVudGltZVwiKTtcbiIsIid1c2Ugc3RyaWN0J1xuXG5leHBvcnRzLmJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoXG5leHBvcnRzLnRvQnl0ZUFycmF5ID0gdG9CeXRlQXJyYXlcbmV4cG9ydHMuZnJvbUJ5dGVBcnJheSA9IGZyb21CeXRlQXJyYXlcblxudmFyIGxvb2t1cCA9IFtdXG52YXIgcmV2TG9va3VwID0gW11cbnZhciBBcnIgPSB0eXBlb2YgVWludDhBcnJheSAhPT0gJ3VuZGVmaW5lZCcgPyBVaW50OEFycmF5IDogQXJyYXlcblxudmFyIGNvZGUgPSAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLydcbmZvciAodmFyIGkgPSAwLCBsZW4gPSBjb2RlLmxlbmd0aDsgaSA8IGxlbjsgKytpKSB7XG4gIGxvb2t1cFtpXSA9IGNvZGVbaV1cbiAgcmV2TG9va3VwW2NvZGUuY2hhckNvZGVBdChpKV0gPSBpXG59XG5cbi8vIFN1cHBvcnQgZGVjb2RpbmcgVVJMLXNhZmUgYmFzZTY0IHN0cmluZ3MsIGFzIE5vZGUuanMgZG9lcy5cbi8vIFNlZTogaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQmFzZTY0I1VSTF9hcHBsaWNhdGlvbnNcbnJldkxvb2t1cFsnLScuY2hhckNvZGVBdCgwKV0gPSA2MlxucmV2TG9va3VwWydfJy5jaGFyQ29kZUF0KDApXSA9IDYzXG5cbmZ1bmN0aW9uIGdldExlbnMgKGI2NCkge1xuICB2YXIgbGVuID0gYjY0Lmxlbmd0aFxuXG4gIGlmIChsZW4gJSA0ID4gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBzdHJpbmcuIExlbmd0aCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNCcpXG4gIH1cblxuICAvLyBUcmltIG9mZiBleHRyYSBieXRlcyBhZnRlciBwbGFjZWhvbGRlciBieXRlcyBhcmUgZm91bmRcbiAgLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vYmVhdGdhbW1pdC9iYXNlNjQtanMvaXNzdWVzLzQyXG4gIHZhciB2YWxpZExlbiA9IGI2NC5pbmRleE9mKCc9JylcbiAgaWYgKHZhbGlkTGVuID09PSAtMSkgdmFsaWRMZW4gPSBsZW5cblxuICB2YXIgcGxhY2VIb2xkZXJzTGVuID0gdmFsaWRMZW4gPT09IGxlblxuICAgID8gMFxuICAgIDogNCAtICh2YWxpZExlbiAlIDQpXG5cbiAgcmV0dXJuIFt2YWxpZExlbiwgcGxhY2VIb2xkZXJzTGVuXVxufVxuXG4vLyBiYXNlNjQgaXMgNC8zICsgdXAgdG8gdHdvIGNoYXJhY3RlcnMgb2YgdGhlIG9yaWdpbmFsIGRhdGFcbmZ1bmN0aW9uIGJ5dGVMZW5ndGggKGI2NCkge1xuICB2YXIgbGVucyA9IGdldExlbnMoYjY0KVxuICB2YXIgdmFsaWRMZW4gPSBsZW5zWzBdXG4gIHZhciBwbGFjZUhvbGRlcnNMZW4gPSBsZW5zWzFdXG4gIHJldHVybiAoKHZhbGlkTGVuICsgcGxhY2VIb2xkZXJzTGVuKSAqIDMgLyA0KSAtIHBsYWNlSG9sZGVyc0xlblxufVxuXG5mdW5jdGlvbiBfYnl0ZUxlbmd0aCAoYjY0LCB2YWxpZExlbiwgcGxhY2VIb2xkZXJzTGVuKSB7XG4gIHJldHVybiAoKHZhbGlkTGVuICsgcGxhY2VIb2xkZXJzTGVuKSAqIDMgLyA0KSAtIHBsYWNlSG9sZGVyc0xlblxufVxuXG5mdW5jdGlvbiB0b0J5dGVBcnJheSAoYjY0KSB7XG4gIHZhciB0bXBcbiAgdmFyIGxlbnMgPSBnZXRMZW5zKGI2NClcbiAgdmFyIHZhbGlkTGVuID0gbGVuc1swXVxuICB2YXIgcGxhY2VIb2xkZXJzTGVuID0gbGVuc1sxXVxuXG4gIHZhciBhcnIgPSBuZXcgQXJyKF9ieXRlTGVuZ3RoKGI2NCwgdmFsaWRMZW4sIHBsYWNlSG9sZGVyc0xlbikpXG5cbiAgdmFyIGN1ckJ5dGUgPSAwXG5cbiAgLy8gaWYgdGhlcmUgYXJlIHBsYWNlaG9sZGVycywgb25seSBnZXQgdXAgdG8gdGhlIGxhc3QgY29tcGxldGUgNCBjaGFyc1xuICB2YXIgbGVuID0gcGxhY2VIb2xkZXJzTGVuID4gMFxuICAgID8gdmFsaWRMZW4gLSA0XG4gICAgOiB2YWxpZExlblxuXG4gIHZhciBpXG4gIGZvciAoaSA9IDA7IGkgPCBsZW47IGkgKz0gNCkge1xuICAgIHRtcCA9XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkpXSA8PCAxOCkgfFxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpICsgMSldIDw8IDEyKSB8XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAyKV0gPDwgNikgfFxuICAgICAgcmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAzKV1cbiAgICBhcnJbY3VyQnl0ZSsrXSA9ICh0bXAgPj4gMTYpICYgMHhGRlxuICAgIGFycltjdXJCeXRlKytdID0gKHRtcCA+PiA4KSAmIDB4RkZcbiAgICBhcnJbY3VyQnl0ZSsrXSA9IHRtcCAmIDB4RkZcbiAgfVxuXG4gIGlmIChwbGFjZUhvbGRlcnNMZW4gPT09IDIpIHtcbiAgICB0bXAgPVxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpKV0gPDwgMikgfFxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpICsgMSldID4+IDQpXG4gICAgYXJyW2N1ckJ5dGUrK10gPSB0bXAgJiAweEZGXG4gIH1cblxuICBpZiAocGxhY2VIb2xkZXJzTGVuID09PSAxKSB7XG4gICAgdG1wID1cbiAgICAgIChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSldIDw8IDEwKSB8XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAxKV0gPDwgNCkgfFxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpICsgMildID4+IDIpXG4gICAgYXJyW2N1ckJ5dGUrK10gPSAodG1wID4+IDgpICYgMHhGRlxuICAgIGFycltjdXJCeXRlKytdID0gdG1wICYgMHhGRlxuICB9XG5cbiAgcmV0dXJuIGFyclxufVxuXG5mdW5jdGlvbiB0cmlwbGV0VG9CYXNlNjQgKG51bSkge1xuICByZXR1cm4gbG9va3VwW251bSA+PiAxOCAmIDB4M0ZdICtcbiAgICBsb29rdXBbbnVtID4+IDEyICYgMHgzRl0gK1xuICAgIGxvb2t1cFtudW0gPj4gNiAmIDB4M0ZdICtcbiAgICBsb29rdXBbbnVtICYgMHgzRl1cbn1cblxuZnVuY3Rpb24gZW5jb2RlQ2h1bmsgKHVpbnQ4LCBzdGFydCwgZW5kKSB7XG4gIHZhciB0bXBcbiAgdmFyIG91dHB1dCA9IFtdXG4gIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGVuZDsgaSArPSAzKSB7XG4gICAgdG1wID1cbiAgICAgICgodWludDhbaV0gPDwgMTYpICYgMHhGRjAwMDApICtcbiAgICAgICgodWludDhbaSArIDFdIDw8IDgpICYgMHhGRjAwKSArXG4gICAgICAodWludDhbaSArIDJdICYgMHhGRilcbiAgICBvdXRwdXQucHVzaCh0cmlwbGV0VG9CYXNlNjQodG1wKSlcbiAgfVxuICByZXR1cm4gb3V0cHV0LmpvaW4oJycpXG59XG5cbmZ1bmN0aW9uIGZyb21CeXRlQXJyYXkgKHVpbnQ4KSB7XG4gIHZhciB0bXBcbiAgdmFyIGxlbiA9IHVpbnQ4Lmxlbmd0aFxuICB2YXIgZXh0cmFCeXRlcyA9IGxlbiAlIDMgLy8gaWYgd2UgaGF2ZSAxIGJ5dGUgbGVmdCwgcGFkIDIgYnl0ZXNcbiAgdmFyIHBhcnRzID0gW11cbiAgdmFyIG1heENodW5rTGVuZ3RoID0gMTYzODMgLy8gbXVzdCBiZSBtdWx0aXBsZSBvZiAzXG5cbiAgLy8gZ28gdGhyb3VnaCB0aGUgYXJyYXkgZXZlcnkgdGhyZWUgYnl0ZXMsIHdlJ2xsIGRlYWwgd2l0aCB0cmFpbGluZyBzdHVmZiBsYXRlclxuICBmb3IgKHZhciBpID0gMCwgbGVuMiA9IGxlbiAtIGV4dHJhQnl0ZXM7IGkgPCBsZW4yOyBpICs9IG1heENodW5rTGVuZ3RoKSB7XG4gICAgcGFydHMucHVzaChlbmNvZGVDaHVuayhcbiAgICAgIHVpbnQ4LCBpLCAoaSArIG1heENodW5rTGVuZ3RoKSA+IGxlbjIgPyBsZW4yIDogKGkgKyBtYXhDaHVua0xlbmd0aClcbiAgICApKVxuICB9XG5cbiAgLy8gcGFkIHRoZSBlbmQgd2l0aCB6ZXJvcywgYnV0IG1ha2Ugc3VyZSB0byBub3QgZm9yZ2V0IHRoZSBleHRyYSBieXRlc1xuICBpZiAoZXh0cmFCeXRlcyA9PT0gMSkge1xuICAgIHRtcCA9IHVpbnQ4W2xlbiAtIDFdXG4gICAgcGFydHMucHVzaChcbiAgICAgIGxvb2t1cFt0bXAgPj4gMl0gK1xuICAgICAgbG9va3VwWyh0bXAgPDwgNCkgJiAweDNGXSArXG4gICAgICAnPT0nXG4gICAgKVxuICB9IGVsc2UgaWYgKGV4dHJhQnl0ZXMgPT09IDIpIHtcbiAgICB0bXAgPSAodWludDhbbGVuIC0gMl0gPDwgOCkgKyB1aW50OFtsZW4gLSAxXVxuICAgIHBhcnRzLnB1c2goXG4gICAgICBsb29rdXBbdG1wID4+IDEwXSArXG4gICAgICBsb29rdXBbKHRtcCA+PiA0KSAmIDB4M0ZdICtcbiAgICAgIGxvb2t1cFsodG1wIDw8IDIpICYgMHgzRl0gK1xuICAgICAgJz0nXG4gICAgKVxuICB9XG5cbiAgcmV0dXJuIHBhcnRzLmpvaW4oJycpXG59XG4iLCIvKiFcbiAqIFRoZSBidWZmZXIgbW9kdWxlIGZyb20gbm9kZS5qcywgZm9yIHRoZSBicm93c2VyLlxuICpcbiAqIEBhdXRob3IgICBGZXJvc3MgQWJvdWtoYWRpamVoIDxodHRwOi8vZmVyb3NzLm9yZz5cbiAqIEBsaWNlbnNlICBNSVRcbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tcHJvdG8gKi9cblxuJ3VzZSBzdHJpY3QnXG5cbnZhciBiYXNlNjQgPSByZXF1aXJlKCdiYXNlNjQtanMnKVxudmFyIGllZWU3NTQgPSByZXF1aXJlKCdpZWVlNzU0JylcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnaXNhcnJheScpXG5cbmV4cG9ydHMuQnVmZmVyID0gQnVmZmVyXG5leHBvcnRzLlNsb3dCdWZmZXIgPSBTbG93QnVmZmVyXG5leHBvcnRzLklOU1BFQ1RfTUFYX0JZVEVTID0gNTBcblxuLyoqXG4gKiBJZiBgQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlRgOlxuICogICA9PT0gdHJ1ZSAgICBVc2UgVWludDhBcnJheSBpbXBsZW1lbnRhdGlvbiAoZmFzdGVzdClcbiAqICAgPT09IGZhbHNlICAgVXNlIE9iamVjdCBpbXBsZW1lbnRhdGlvbiAobW9zdCBjb21wYXRpYmxlLCBldmVuIElFNilcbiAqXG4gKiBCcm93c2VycyB0aGF0IHN1cHBvcnQgdHlwZWQgYXJyYXlzIGFyZSBJRSAxMCssIEZpcmVmb3ggNCssIENocm9tZSA3KywgU2FmYXJpIDUuMSssXG4gKiBPcGVyYSAxMS42KywgaU9TIDQuMisuXG4gKlxuICogRHVlIHRvIHZhcmlvdXMgYnJvd3NlciBidWdzLCBzb21ldGltZXMgdGhlIE9iamVjdCBpbXBsZW1lbnRhdGlvbiB3aWxsIGJlIHVzZWQgZXZlblxuICogd2hlbiB0aGUgYnJvd3NlciBzdXBwb3J0cyB0eXBlZCBhcnJheXMuXG4gKlxuICogTm90ZTpcbiAqXG4gKiAgIC0gRmlyZWZveCA0LTI5IGxhY2tzIHN1cHBvcnQgZm9yIGFkZGluZyBuZXcgcHJvcGVydGllcyB0byBgVWludDhBcnJheWAgaW5zdGFuY2VzLFxuICogICAgIFNlZTogaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njk1NDM4LlxuICpcbiAqICAgLSBDaHJvbWUgOS0xMCBpcyBtaXNzaW5nIHRoZSBgVHlwZWRBcnJheS5wcm90b3R5cGUuc3ViYXJyYXlgIGZ1bmN0aW9uLlxuICpcbiAqICAgLSBJRTEwIGhhcyBhIGJyb2tlbiBgVHlwZWRBcnJheS5wcm90b3R5cGUuc3ViYXJyYXlgIGZ1bmN0aW9uIHdoaWNoIHJldHVybnMgYXJyYXlzIG9mXG4gKiAgICAgaW5jb3JyZWN0IGxlbmd0aCBpbiBzb21lIHNpdHVhdGlvbnMuXG5cbiAqIFdlIGRldGVjdCB0aGVzZSBidWdneSBicm93c2VycyBhbmQgc2V0IGBCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVGAgdG8gYGZhbHNlYCBzbyB0aGV5XG4gKiBnZXQgdGhlIE9iamVjdCBpbXBsZW1lbnRhdGlvbiwgd2hpY2ggaXMgc2xvd2VyIGJ1dCBiZWhhdmVzIGNvcnJlY3RseS5cbiAqL1xuQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQgPSBnbG9iYWwuVFlQRURfQVJSQVlfU1VQUE9SVCAhPT0gdW5kZWZpbmVkXG4gID8gZ2xvYmFsLlRZUEVEX0FSUkFZX1NVUFBPUlRcbiAgOiB0eXBlZEFycmF5U3VwcG9ydCgpXG5cbi8qXG4gKiBFeHBvcnQga01heExlbmd0aCBhZnRlciB0eXBlZCBhcnJheSBzdXBwb3J0IGlzIGRldGVybWluZWQuXG4gKi9cbmV4cG9ydHMua01heExlbmd0aCA9IGtNYXhMZW5ndGgoKVxuXG5mdW5jdGlvbiB0eXBlZEFycmF5U3VwcG9ydCAoKSB7XG4gIHRyeSB7XG4gICAgdmFyIGFyciA9IG5ldyBVaW50OEFycmF5KDEpXG4gICAgYXJyLl9fcHJvdG9fXyA9IHtfX3Byb3RvX186IFVpbnQ4QXJyYXkucHJvdG90eXBlLCBmb286IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDQyIH19XG4gICAgcmV0dXJuIGFyci5mb28oKSA9PT0gNDIgJiYgLy8gdHlwZWQgYXJyYXkgaW5zdGFuY2VzIGNhbiBiZSBhdWdtZW50ZWRcbiAgICAgICAgdHlwZW9mIGFyci5zdWJhcnJheSA9PT0gJ2Z1bmN0aW9uJyAmJiAvLyBjaHJvbWUgOS0xMCBsYWNrIGBzdWJhcnJheWBcbiAgICAgICAgYXJyLnN1YmFycmF5KDEsIDEpLmJ5dGVMZW5ndGggPT09IDAgLy8gaWUxMCBoYXMgYnJva2VuIGBzdWJhcnJheWBcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG59XG5cbmZ1bmN0aW9uIGtNYXhMZW5ndGggKCkge1xuICByZXR1cm4gQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlRcbiAgICA/IDB4N2ZmZmZmZmZcbiAgICA6IDB4M2ZmZmZmZmZcbn1cblxuZnVuY3Rpb24gY3JlYXRlQnVmZmVyICh0aGF0LCBsZW5ndGgpIHtcbiAgaWYgKGtNYXhMZW5ndGgoKSA8IGxlbmd0aCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdJbnZhbGlkIHR5cGVkIGFycmF5IGxlbmd0aCcpXG4gIH1cbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgLy8gUmV0dXJuIGFuIGF1Z21lbnRlZCBgVWludDhBcnJheWAgaW5zdGFuY2UsIGZvciBiZXN0IHBlcmZvcm1hbmNlXG4gICAgdGhhdCA9IG5ldyBVaW50OEFycmF5KGxlbmd0aClcbiAgICB0aGF0Ll9fcHJvdG9fXyA9IEJ1ZmZlci5wcm90b3R5cGVcbiAgfSBlbHNlIHtcbiAgICAvLyBGYWxsYmFjazogUmV0dXJuIGFuIG9iamVjdCBpbnN0YW5jZSBvZiB0aGUgQnVmZmVyIGNsYXNzXG4gICAgaWYgKHRoYXQgPT09IG51bGwpIHtcbiAgICAgIHRoYXQgPSBuZXcgQnVmZmVyKGxlbmd0aClcbiAgICB9XG4gICAgdGhhdC5sZW5ndGggPSBsZW5ndGhcbiAgfVxuXG4gIHJldHVybiB0aGF0XG59XG5cbi8qKlxuICogVGhlIEJ1ZmZlciBjb25zdHJ1Y3RvciByZXR1cm5zIGluc3RhbmNlcyBvZiBgVWludDhBcnJheWAgdGhhdCBoYXZlIHRoZWlyXG4gKiBwcm90b3R5cGUgY2hhbmdlZCB0byBgQnVmZmVyLnByb3RvdHlwZWAuIEZ1cnRoZXJtb3JlLCBgQnVmZmVyYCBpcyBhIHN1YmNsYXNzIG9mXG4gKiBgVWludDhBcnJheWAsIHNvIHRoZSByZXR1cm5lZCBpbnN0YW5jZXMgd2lsbCBoYXZlIGFsbCB0aGUgbm9kZSBgQnVmZmVyYCBtZXRob2RzXG4gKiBhbmQgdGhlIGBVaW50OEFycmF5YCBtZXRob2RzLiBTcXVhcmUgYnJhY2tldCBub3RhdGlvbiB3b3JrcyBhcyBleHBlY3RlZCAtLSBpdFxuICogcmV0dXJucyBhIHNpbmdsZSBvY3RldC5cbiAqXG4gKiBUaGUgYFVpbnQ4QXJyYXlgIHByb3RvdHlwZSByZW1haW5zIHVubW9kaWZpZWQuXG4gKi9cblxuZnVuY3Rpb24gQnVmZmVyIChhcmcsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aCkge1xuICBpZiAoIUJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUICYmICEodGhpcyBpbnN0YW5jZW9mIEJ1ZmZlcikpIHtcbiAgICByZXR1cm4gbmV3IEJ1ZmZlcihhcmcsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aClcbiAgfVxuXG4gIC8vIENvbW1vbiBjYXNlLlxuICBpZiAodHlwZW9mIGFyZyA9PT0gJ251bWJlcicpIHtcbiAgICBpZiAodHlwZW9mIGVuY29kaW5nT3JPZmZzZXQgPT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdJZiBlbmNvZGluZyBpcyBzcGVjaWZpZWQgdGhlbiB0aGUgZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZydcbiAgICAgIClcbiAgICB9XG4gICAgcmV0dXJuIGFsbG9jVW5zYWZlKHRoaXMsIGFyZylcbiAgfVxuICByZXR1cm4gZnJvbSh0aGlzLCBhcmcsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aClcbn1cblxuQnVmZmVyLnBvb2xTaXplID0gODE5MiAvLyBub3QgdXNlZCBieSB0aGlzIGltcGxlbWVudGF0aW9uXG5cbi8vIFRPRE86IExlZ2FjeSwgbm90IG5lZWRlZCBhbnltb3JlLiBSZW1vdmUgaW4gbmV4dCBtYWpvciB2ZXJzaW9uLlxuQnVmZmVyLl9hdWdtZW50ID0gZnVuY3Rpb24gKGFycikge1xuICBhcnIuX19wcm90b19fID0gQnVmZmVyLnByb3RvdHlwZVxuICByZXR1cm4gYXJyXG59XG5cbmZ1bmN0aW9uIGZyb20gKHRoYXQsIHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdcInZhbHVlXCIgYXJndW1lbnQgbXVzdCBub3QgYmUgYSBudW1iZXInKVxuICB9XG5cbiAgaWYgKHR5cGVvZiBBcnJheUJ1ZmZlciAhPT0gJ3VuZGVmaW5lZCcgJiYgdmFsdWUgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikge1xuICAgIHJldHVybiBmcm9tQXJyYXlCdWZmZXIodGhhdCwgdmFsdWUsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aClcbiAgfVxuXG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGZyb21TdHJpbmcodGhhdCwgdmFsdWUsIGVuY29kaW5nT3JPZmZzZXQpXG4gIH1cblxuICByZXR1cm4gZnJvbU9iamVjdCh0aGF0LCB2YWx1ZSlcbn1cblxuLyoqXG4gKiBGdW5jdGlvbmFsbHkgZXF1aXZhbGVudCB0byBCdWZmZXIoYXJnLCBlbmNvZGluZykgYnV0IHRocm93cyBhIFR5cGVFcnJvclxuICogaWYgdmFsdWUgaXMgYSBudW1iZXIuXG4gKiBCdWZmZXIuZnJvbShzdHJbLCBlbmNvZGluZ10pXG4gKiBCdWZmZXIuZnJvbShhcnJheSlcbiAqIEJ1ZmZlci5mcm9tKGJ1ZmZlcilcbiAqIEJ1ZmZlci5mcm9tKGFycmF5QnVmZmVyWywgYnl0ZU9mZnNldFssIGxlbmd0aF1dKVxuICoqL1xuQnVmZmVyLmZyb20gPSBmdW5jdGlvbiAodmFsdWUsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aCkge1xuICByZXR1cm4gZnJvbShudWxsLCB2YWx1ZSwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKVxufVxuXG5pZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgQnVmZmVyLnByb3RvdHlwZS5fX3Byb3RvX18gPSBVaW50OEFycmF5LnByb3RvdHlwZVxuICBCdWZmZXIuX19wcm90b19fID0gVWludDhBcnJheVxuICBpZiAodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnNwZWNpZXMgJiZcbiAgICAgIEJ1ZmZlcltTeW1ib2wuc3BlY2llc10gPT09IEJ1ZmZlcikge1xuICAgIC8vIEZpeCBzdWJhcnJheSgpIGluIEVTMjAxNi4gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vZmVyb3NzL2J1ZmZlci9wdWxsLzk3XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEJ1ZmZlciwgU3ltYm9sLnNwZWNpZXMsIHtcbiAgICAgIHZhbHVlOiBudWxsLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSlcbiAgfVxufVxuXG5mdW5jdGlvbiBhc3NlcnRTaXplIChzaXplKSB7XG4gIGlmICh0eXBlb2Ygc2l6ZSAhPT0gJ251bWJlcicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdcInNpemVcIiBhcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyJylcbiAgfSBlbHNlIGlmIChzaXplIDwgMCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdcInNpemVcIiBhcmd1bWVudCBtdXN0IG5vdCBiZSBuZWdhdGl2ZScpXG4gIH1cbn1cblxuZnVuY3Rpb24gYWxsb2MgKHRoYXQsIHNpemUsIGZpbGwsIGVuY29kaW5nKSB7XG4gIGFzc2VydFNpemUoc2l6ZSlcbiAgaWYgKHNpemUgPD0gMCkge1xuICAgIHJldHVybiBjcmVhdGVCdWZmZXIodGhhdCwgc2l6ZSlcbiAgfVxuICBpZiAoZmlsbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgLy8gT25seSBwYXkgYXR0ZW50aW9uIHRvIGVuY29kaW5nIGlmIGl0J3MgYSBzdHJpbmcuIFRoaXNcbiAgICAvLyBwcmV2ZW50cyBhY2NpZGVudGFsbHkgc2VuZGluZyBpbiBhIG51bWJlciB0aGF0IHdvdWxkXG4gICAgLy8gYmUgaW50ZXJwcmV0dGVkIGFzIGEgc3RhcnQgb2Zmc2V0LlxuICAgIHJldHVybiB0eXBlb2YgZW5jb2RpbmcgPT09ICdzdHJpbmcnXG4gICAgICA/IGNyZWF0ZUJ1ZmZlcih0aGF0LCBzaXplKS5maWxsKGZpbGwsIGVuY29kaW5nKVxuICAgICAgOiBjcmVhdGVCdWZmZXIodGhhdCwgc2l6ZSkuZmlsbChmaWxsKVxuICB9XG4gIHJldHVybiBjcmVhdGVCdWZmZXIodGhhdCwgc2l6ZSlcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IGZpbGxlZCBCdWZmZXIgaW5zdGFuY2UuXG4gKiBhbGxvYyhzaXplWywgZmlsbFssIGVuY29kaW5nXV0pXG4gKiovXG5CdWZmZXIuYWxsb2MgPSBmdW5jdGlvbiAoc2l6ZSwgZmlsbCwgZW5jb2RpbmcpIHtcbiAgcmV0dXJuIGFsbG9jKG51bGwsIHNpemUsIGZpbGwsIGVuY29kaW5nKVxufVxuXG5mdW5jdGlvbiBhbGxvY1Vuc2FmZSAodGhhdCwgc2l6ZSkge1xuICBhc3NlcnRTaXplKHNpemUpXG4gIHRoYXQgPSBjcmVhdGVCdWZmZXIodGhhdCwgc2l6ZSA8IDAgPyAwIDogY2hlY2tlZChzaXplKSB8IDApXG4gIGlmICghQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNpemU7ICsraSkge1xuICAgICAgdGhhdFtpXSA9IDBcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRoYXRcbn1cblxuLyoqXG4gKiBFcXVpdmFsZW50IHRvIEJ1ZmZlcihudW0pLCBieSBkZWZhdWx0IGNyZWF0ZXMgYSBub24temVyby1maWxsZWQgQnVmZmVyIGluc3RhbmNlLlxuICogKi9cbkJ1ZmZlci5hbGxvY1Vuc2FmZSA9IGZ1bmN0aW9uIChzaXplKSB7XG4gIHJldHVybiBhbGxvY1Vuc2FmZShudWxsLCBzaXplKVxufVxuLyoqXG4gKiBFcXVpdmFsZW50IHRvIFNsb3dCdWZmZXIobnVtKSwgYnkgZGVmYXVsdCBjcmVhdGVzIGEgbm9uLXplcm8tZmlsbGVkIEJ1ZmZlciBpbnN0YW5jZS5cbiAqL1xuQnVmZmVyLmFsbG9jVW5zYWZlU2xvdyA9IGZ1bmN0aW9uIChzaXplKSB7XG4gIHJldHVybiBhbGxvY1Vuc2FmZShudWxsLCBzaXplKVxufVxuXG5mdW5jdGlvbiBmcm9tU3RyaW5nICh0aGF0LCBzdHJpbmcsIGVuY29kaW5nKSB7XG4gIGlmICh0eXBlb2YgZW5jb2RpbmcgIT09ICdzdHJpbmcnIHx8IGVuY29kaW5nID09PSAnJykge1xuICAgIGVuY29kaW5nID0gJ3V0ZjgnXG4gIH1cblxuICBpZiAoIUJ1ZmZlci5pc0VuY29kaW5nKGVuY29kaW5nKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1wiZW5jb2RpbmdcIiBtdXN0IGJlIGEgdmFsaWQgc3RyaW5nIGVuY29kaW5nJylcbiAgfVxuXG4gIHZhciBsZW5ndGggPSBieXRlTGVuZ3RoKHN0cmluZywgZW5jb2RpbmcpIHwgMFxuICB0aGF0ID0gY3JlYXRlQnVmZmVyKHRoYXQsIGxlbmd0aClcblxuICB2YXIgYWN0dWFsID0gdGhhdC53cml0ZShzdHJpbmcsIGVuY29kaW5nKVxuXG4gIGlmIChhY3R1YWwgIT09IGxlbmd0aCkge1xuICAgIC8vIFdyaXRpbmcgYSBoZXggc3RyaW5nLCBmb3IgZXhhbXBsZSwgdGhhdCBjb250YWlucyBpbnZhbGlkIGNoYXJhY3RlcnMgd2lsbFxuICAgIC8vIGNhdXNlIGV2ZXJ5dGhpbmcgYWZ0ZXIgdGhlIGZpcnN0IGludmFsaWQgY2hhcmFjdGVyIHRvIGJlIGlnbm9yZWQuIChlLmcuXG4gICAgLy8gJ2FieHhjZCcgd2lsbCBiZSB0cmVhdGVkIGFzICdhYicpXG4gICAgdGhhdCA9IHRoYXQuc2xpY2UoMCwgYWN0dWFsKVxuICB9XG5cbiAgcmV0dXJuIHRoYXRcbn1cblxuZnVuY3Rpb24gZnJvbUFycmF5TGlrZSAodGhhdCwgYXJyYXkpIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aCA8IDAgPyAwIDogY2hlY2tlZChhcnJheS5sZW5ndGgpIHwgMFxuICB0aGF0ID0gY3JlYXRlQnVmZmVyKHRoYXQsIGxlbmd0aClcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkgKz0gMSkge1xuICAgIHRoYXRbaV0gPSBhcnJheVtpXSAmIDI1NVxuICB9XG4gIHJldHVybiB0aGF0XG59XG5cbmZ1bmN0aW9uIGZyb21BcnJheUJ1ZmZlciAodGhhdCwgYXJyYXksIGJ5dGVPZmZzZXQsIGxlbmd0aCkge1xuICBhcnJheS5ieXRlTGVuZ3RoIC8vIHRoaXMgdGhyb3dzIGlmIGBhcnJheWAgaXMgbm90IGEgdmFsaWQgQXJyYXlCdWZmZXJcblxuICBpZiAoYnl0ZU9mZnNldCA8IDAgfHwgYXJyYXkuYnl0ZUxlbmd0aCA8IGJ5dGVPZmZzZXQpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignXFwnb2Zmc2V0XFwnIGlzIG91dCBvZiBib3VuZHMnKVxuICB9XG5cbiAgaWYgKGFycmF5LmJ5dGVMZW5ndGggPCBieXRlT2Zmc2V0ICsgKGxlbmd0aCB8fCAwKSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdcXCdsZW5ndGhcXCcgaXMgb3V0IG9mIGJvdW5kcycpXG4gIH1cblxuICBpZiAoYnl0ZU9mZnNldCA9PT0gdW5kZWZpbmVkICYmIGxlbmd0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgYXJyYXkgPSBuZXcgVWludDhBcnJheShhcnJheSlcbiAgfSBlbHNlIGlmIChsZW5ndGggPT09IHVuZGVmaW5lZCkge1xuICAgIGFycmF5ID0gbmV3IFVpbnQ4QXJyYXkoYXJyYXksIGJ5dGVPZmZzZXQpXG4gIH0gZWxzZSB7XG4gICAgYXJyYXkgPSBuZXcgVWludDhBcnJheShhcnJheSwgYnl0ZU9mZnNldCwgbGVuZ3RoKVxuICB9XG5cbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgLy8gUmV0dXJuIGFuIGF1Z21lbnRlZCBgVWludDhBcnJheWAgaW5zdGFuY2UsIGZvciBiZXN0IHBlcmZvcm1hbmNlXG4gICAgdGhhdCA9IGFycmF5XG4gICAgdGhhdC5fX3Byb3RvX18gPSBCdWZmZXIucHJvdG90eXBlXG4gIH0gZWxzZSB7XG4gICAgLy8gRmFsbGJhY2s6IFJldHVybiBhbiBvYmplY3QgaW5zdGFuY2Ugb2YgdGhlIEJ1ZmZlciBjbGFzc1xuICAgIHRoYXQgPSBmcm9tQXJyYXlMaWtlKHRoYXQsIGFycmF5KVxuICB9XG4gIHJldHVybiB0aGF0XG59XG5cbmZ1bmN0aW9uIGZyb21PYmplY3QgKHRoYXQsIG9iaikge1xuICBpZiAoQnVmZmVyLmlzQnVmZmVyKG9iaikpIHtcbiAgICB2YXIgbGVuID0gY2hlY2tlZChvYmoubGVuZ3RoKSB8IDBcbiAgICB0aGF0ID0gY3JlYXRlQnVmZmVyKHRoYXQsIGxlbilcblxuICAgIGlmICh0aGF0Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHRoYXRcbiAgICB9XG5cbiAgICBvYmouY29weSh0aGF0LCAwLCAwLCBsZW4pXG4gICAgcmV0dXJuIHRoYXRcbiAgfVxuXG4gIGlmIChvYmopIHtcbiAgICBpZiAoKHR5cGVvZiBBcnJheUJ1ZmZlciAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgICAgb2JqLmJ1ZmZlciBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSB8fCAnbGVuZ3RoJyBpbiBvYmopIHtcbiAgICAgIGlmICh0eXBlb2Ygb2JqLmxlbmd0aCAhPT0gJ251bWJlcicgfHwgaXNuYW4ob2JqLmxlbmd0aCkpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUJ1ZmZlcih0aGF0LCAwKVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZyb21BcnJheUxpa2UodGhhdCwgb2JqKVxuICAgIH1cblxuICAgIGlmIChvYmoudHlwZSA9PT0gJ0J1ZmZlcicgJiYgaXNBcnJheShvYmouZGF0YSkpIHtcbiAgICAgIHJldHVybiBmcm9tQXJyYXlMaWtlKHRoYXQsIG9iai5kYXRhKVxuICAgIH1cbiAgfVxuXG4gIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYSBzdHJpbmcsIEJ1ZmZlciwgQXJyYXlCdWZmZXIsIEFycmF5LCBvciBhcnJheS1saWtlIG9iamVjdC4nKVxufVxuXG5mdW5jdGlvbiBjaGVja2VkIChsZW5ndGgpIHtcbiAgLy8gTm90ZTogY2Fubm90IHVzZSBgbGVuZ3RoIDwga01heExlbmd0aCgpYCBoZXJlIGJlY2F1c2UgdGhhdCBmYWlscyB3aGVuXG4gIC8vIGxlbmd0aCBpcyBOYU4gKHdoaWNoIGlzIG90aGVyd2lzZSBjb2VyY2VkIHRvIHplcm8uKVxuICBpZiAobGVuZ3RoID49IGtNYXhMZW5ndGgoKSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdBdHRlbXB0IHRvIGFsbG9jYXRlIEJ1ZmZlciBsYXJnZXIgdGhhbiBtYXhpbXVtICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICdzaXplOiAweCcgKyBrTWF4TGVuZ3RoKCkudG9TdHJpbmcoMTYpICsgJyBieXRlcycpXG4gIH1cbiAgcmV0dXJuIGxlbmd0aCB8IDBcbn1cblxuZnVuY3Rpb24gU2xvd0J1ZmZlciAobGVuZ3RoKSB7XG4gIGlmICgrbGVuZ3RoICE9IGxlbmd0aCkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGVxZXFlcVxuICAgIGxlbmd0aCA9IDBcbiAgfVxuICByZXR1cm4gQnVmZmVyLmFsbG9jKCtsZW5ndGgpXG59XG5cbkJ1ZmZlci5pc0J1ZmZlciA9IGZ1bmN0aW9uIGlzQnVmZmVyIChiKSB7XG4gIHJldHVybiAhIShiICE9IG51bGwgJiYgYi5faXNCdWZmZXIpXG59XG5cbkJ1ZmZlci5jb21wYXJlID0gZnVuY3Rpb24gY29tcGFyZSAoYSwgYikge1xuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihhKSB8fCAhQnVmZmVyLmlzQnVmZmVyKGIpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnRzIG11c3QgYmUgQnVmZmVycycpXG4gIH1cblxuICBpZiAoYSA9PT0gYikgcmV0dXJuIDBcblxuICB2YXIgeCA9IGEubGVuZ3RoXG4gIHZhciB5ID0gYi5sZW5ndGhcblxuICBmb3IgKHZhciBpID0gMCwgbGVuID0gTWF0aC5taW4oeCwgeSk7IGkgPCBsZW47ICsraSkge1xuICAgIGlmIChhW2ldICE9PSBiW2ldKSB7XG4gICAgICB4ID0gYVtpXVxuICAgICAgeSA9IGJbaV1cbiAgICAgIGJyZWFrXG4gICAgfVxuICB9XG5cbiAgaWYgKHggPCB5KSByZXR1cm4gLTFcbiAgaWYgKHkgPCB4KSByZXR1cm4gMVxuICByZXR1cm4gMFxufVxuXG5CdWZmZXIuaXNFbmNvZGluZyA9IGZ1bmN0aW9uIGlzRW5jb2RpbmcgKGVuY29kaW5nKSB7XG4gIHN3aXRjaCAoU3RyaW5nKGVuY29kaW5nKS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgY2FzZSAnaGV4JzpcbiAgICBjYXNlICd1dGY4JzpcbiAgICBjYXNlICd1dGYtOCc6XG4gICAgY2FzZSAnYXNjaWknOlxuICAgIGNhc2UgJ2xhdGluMSc6XG4gICAgY2FzZSAnYmluYXJ5JzpcbiAgICBjYXNlICdiYXNlNjQnOlxuICAgIGNhc2UgJ3VjczInOlxuICAgIGNhc2UgJ3Vjcy0yJzpcbiAgICBjYXNlICd1dGYxNmxlJzpcbiAgICBjYXNlICd1dGYtMTZsZSc6XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gZmFsc2VcbiAgfVxufVxuXG5CdWZmZXIuY29uY2F0ID0gZnVuY3Rpb24gY29uY2F0IChsaXN0LCBsZW5ndGgpIHtcbiAgaWYgKCFpc0FycmF5KGxpc3QpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignXCJsaXN0XCIgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheSBvZiBCdWZmZXJzJylcbiAgfVxuXG4gIGlmIChsaXN0Lmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBCdWZmZXIuYWxsb2MoMClcbiAgfVxuXG4gIHZhciBpXG4gIGlmIChsZW5ndGggPT09IHVuZGVmaW5lZCkge1xuICAgIGxlbmd0aCA9IDBcbiAgICBmb3IgKGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7ICsraSkge1xuICAgICAgbGVuZ3RoICs9IGxpc3RbaV0ubGVuZ3RoXG4gICAgfVxuICB9XG5cbiAgdmFyIGJ1ZmZlciA9IEJ1ZmZlci5hbGxvY1Vuc2FmZShsZW5ndGgpXG4gIHZhciBwb3MgPSAwXG4gIGZvciAoaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgKytpKSB7XG4gICAgdmFyIGJ1ZiA9IGxpc3RbaV1cbiAgICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihidWYpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdcImxpc3RcIiBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5IG9mIEJ1ZmZlcnMnKVxuICAgIH1cbiAgICBidWYuY29weShidWZmZXIsIHBvcylcbiAgICBwb3MgKz0gYnVmLmxlbmd0aFxuICB9XG4gIHJldHVybiBidWZmZXJcbn1cblxuZnVuY3Rpb24gYnl0ZUxlbmd0aCAoc3RyaW5nLCBlbmNvZGluZykge1xuICBpZiAoQnVmZmVyLmlzQnVmZmVyKHN0cmluZykpIHtcbiAgICByZXR1cm4gc3RyaW5nLmxlbmd0aFxuICB9XG4gIGlmICh0eXBlb2YgQXJyYXlCdWZmZXIgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBBcnJheUJ1ZmZlci5pc1ZpZXcgPT09ICdmdW5jdGlvbicgJiZcbiAgICAgIChBcnJheUJ1ZmZlci5pc1ZpZXcoc3RyaW5nKSB8fCBzdHJpbmcgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikpIHtcbiAgICByZXR1cm4gc3RyaW5nLmJ5dGVMZW5ndGhcbiAgfVxuICBpZiAodHlwZW9mIHN0cmluZyAhPT0gJ3N0cmluZycpIHtcbiAgICBzdHJpbmcgPSAnJyArIHN0cmluZ1xuICB9XG5cbiAgdmFyIGxlbiA9IHN0cmluZy5sZW5ndGhcbiAgaWYgKGxlbiA9PT0gMCkgcmV0dXJuIDBcblxuICAvLyBVc2UgYSBmb3IgbG9vcCB0byBhdm9pZCByZWN1cnNpb25cbiAgdmFyIGxvd2VyZWRDYXNlID0gZmFsc2VcbiAgZm9yICg7Oykge1xuICAgIHN3aXRjaCAoZW5jb2RpbmcpIHtcbiAgICAgIGNhc2UgJ2FzY2lpJzpcbiAgICAgIGNhc2UgJ2xhdGluMSc6XG4gICAgICBjYXNlICdiaW5hcnknOlxuICAgICAgICByZXR1cm4gbGVuXG4gICAgICBjYXNlICd1dGY4JzpcbiAgICAgIGNhc2UgJ3V0Zi04JzpcbiAgICAgIGNhc2UgdW5kZWZpbmVkOlxuICAgICAgICByZXR1cm4gdXRmOFRvQnl0ZXMoc3RyaW5nKS5sZW5ndGhcbiAgICAgIGNhc2UgJ3VjczInOlxuICAgICAgY2FzZSAndWNzLTInOlxuICAgICAgY2FzZSAndXRmMTZsZSc6XG4gICAgICBjYXNlICd1dGYtMTZsZSc6XG4gICAgICAgIHJldHVybiBsZW4gKiAyXG4gICAgICBjYXNlICdoZXgnOlxuICAgICAgICByZXR1cm4gbGVuID4+PiAxXG4gICAgICBjYXNlICdiYXNlNjQnOlxuICAgICAgICByZXR1cm4gYmFzZTY0VG9CeXRlcyhzdHJpbmcpLmxlbmd0aFxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKGxvd2VyZWRDYXNlKSByZXR1cm4gdXRmOFRvQnl0ZXMoc3RyaW5nKS5sZW5ndGggLy8gYXNzdW1lIHV0ZjhcbiAgICAgICAgZW5jb2RpbmcgPSAoJycgKyBlbmNvZGluZykudG9Mb3dlckNhc2UoKVxuICAgICAgICBsb3dlcmVkQ2FzZSA9IHRydWVcbiAgICB9XG4gIH1cbn1cbkJ1ZmZlci5ieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aFxuXG5mdW5jdGlvbiBzbG93VG9TdHJpbmcgKGVuY29kaW5nLCBzdGFydCwgZW5kKSB7XG4gIHZhciBsb3dlcmVkQ2FzZSA9IGZhbHNlXG5cbiAgLy8gTm8gbmVlZCB0byB2ZXJpZnkgdGhhdCBcInRoaXMubGVuZ3RoIDw9IE1BWF9VSU5UMzJcIiBzaW5jZSBpdCdzIGEgcmVhZC1vbmx5XG4gIC8vIHByb3BlcnR5IG9mIGEgdHlwZWQgYXJyYXkuXG5cbiAgLy8gVGhpcyBiZWhhdmVzIG5laXRoZXIgbGlrZSBTdHJpbmcgbm9yIFVpbnQ4QXJyYXkgaW4gdGhhdCB3ZSBzZXQgc3RhcnQvZW5kXG4gIC8vIHRvIHRoZWlyIHVwcGVyL2xvd2VyIGJvdW5kcyBpZiB0aGUgdmFsdWUgcGFzc2VkIGlzIG91dCBvZiByYW5nZS5cbiAgLy8gdW5kZWZpbmVkIGlzIGhhbmRsZWQgc3BlY2lhbGx5IGFzIHBlciBFQ01BLTI2MiA2dGggRWRpdGlvbixcbiAgLy8gU2VjdGlvbiAxMy4zLjMuNyBSdW50aW1lIFNlbWFudGljczogS2V5ZWRCaW5kaW5nSW5pdGlhbGl6YXRpb24uXG4gIGlmIChzdGFydCA9PT0gdW5kZWZpbmVkIHx8IHN0YXJ0IDwgMCkge1xuICAgIHN0YXJ0ID0gMFxuICB9XG4gIC8vIFJldHVybiBlYXJseSBpZiBzdGFydCA+IHRoaXMubGVuZ3RoLiBEb25lIGhlcmUgdG8gcHJldmVudCBwb3RlbnRpYWwgdWludDMyXG4gIC8vIGNvZXJjaW9uIGZhaWwgYmVsb3cuXG4gIGlmIChzdGFydCA+IHRoaXMubGVuZ3RoKSB7XG4gICAgcmV0dXJuICcnXG4gIH1cblxuICBpZiAoZW5kID09PSB1bmRlZmluZWQgfHwgZW5kID4gdGhpcy5sZW5ndGgpIHtcbiAgICBlbmQgPSB0aGlzLmxlbmd0aFxuICB9XG5cbiAgaWYgKGVuZCA8PSAwKSB7XG4gICAgcmV0dXJuICcnXG4gIH1cblxuICAvLyBGb3JjZSBjb2Vyc2lvbiB0byB1aW50MzIuIFRoaXMgd2lsbCBhbHNvIGNvZXJjZSBmYWxzZXkvTmFOIHZhbHVlcyB0byAwLlxuICBlbmQgPj4+PSAwXG4gIHN0YXJ0ID4+Pj0gMFxuXG4gIGlmIChlbmQgPD0gc3RhcnQpIHtcbiAgICByZXR1cm4gJydcbiAgfVxuXG4gIGlmICghZW5jb2RpbmcpIGVuY29kaW5nID0gJ3V0ZjgnXG5cbiAgd2hpbGUgKHRydWUpIHtcbiAgICBzd2l0Y2ggKGVuY29kaW5nKSB7XG4gICAgICBjYXNlICdoZXgnOlxuICAgICAgICByZXR1cm4gaGV4U2xpY2UodGhpcywgc3RhcnQsIGVuZClcblxuICAgICAgY2FzZSAndXRmOCc6XG4gICAgICBjYXNlICd1dGYtOCc6XG4gICAgICAgIHJldHVybiB1dGY4U2xpY2UodGhpcywgc3RhcnQsIGVuZClcblxuICAgICAgY2FzZSAnYXNjaWknOlxuICAgICAgICByZXR1cm4gYXNjaWlTbGljZSh0aGlzLCBzdGFydCwgZW5kKVxuXG4gICAgICBjYXNlICdsYXRpbjEnOlxuICAgICAgY2FzZSAnYmluYXJ5JzpcbiAgICAgICAgcmV0dXJuIGxhdGluMVNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpXG5cbiAgICAgIGNhc2UgJ2Jhc2U2NCc6XG4gICAgICAgIHJldHVybiBiYXNlNjRTbGljZSh0aGlzLCBzdGFydCwgZW5kKVxuXG4gICAgICBjYXNlICd1Y3MyJzpcbiAgICAgIGNhc2UgJ3Vjcy0yJzpcbiAgICAgIGNhc2UgJ3V0ZjE2bGUnOlxuICAgICAgY2FzZSAndXRmLTE2bGUnOlxuICAgICAgICByZXR1cm4gdXRmMTZsZVNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpXG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmIChsb3dlcmVkQ2FzZSkgdGhyb3cgbmV3IFR5cGVFcnJvcignVW5rbm93biBlbmNvZGluZzogJyArIGVuY29kaW5nKVxuICAgICAgICBlbmNvZGluZyA9IChlbmNvZGluZyArICcnKS50b0xvd2VyQ2FzZSgpXG4gICAgICAgIGxvd2VyZWRDYXNlID0gdHJ1ZVxuICAgIH1cbiAgfVxufVxuXG4vLyBUaGUgcHJvcGVydHkgaXMgdXNlZCBieSBgQnVmZmVyLmlzQnVmZmVyYCBhbmQgYGlzLWJ1ZmZlcmAgKGluIFNhZmFyaSA1LTcpIHRvIGRldGVjdFxuLy8gQnVmZmVyIGluc3RhbmNlcy5cbkJ1ZmZlci5wcm90b3R5cGUuX2lzQnVmZmVyID0gdHJ1ZVxuXG5mdW5jdGlvbiBzd2FwIChiLCBuLCBtKSB7XG4gIHZhciBpID0gYltuXVxuICBiW25dID0gYlttXVxuICBiW21dID0gaVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnN3YXAxNiA9IGZ1bmN0aW9uIHN3YXAxNiAoKSB7XG4gIHZhciBsZW4gPSB0aGlzLmxlbmd0aFxuICBpZiAobGVuICUgMiAhPT0gMCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMTYtYml0cycpXG4gIH1cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkgKz0gMikge1xuICAgIHN3YXAodGhpcywgaSwgaSArIDEpXG4gIH1cbiAgcmV0dXJuIHRoaXNcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5zd2FwMzIgPSBmdW5jdGlvbiBzd2FwMzIgKCkge1xuICB2YXIgbGVuID0gdGhpcy5sZW5ndGhcbiAgaWYgKGxlbiAlIDQgIT09IDApIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDMyLWJpdHMnKVxuICB9XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpICs9IDQpIHtcbiAgICBzd2FwKHRoaXMsIGksIGkgKyAzKVxuICAgIHN3YXAodGhpcywgaSArIDEsIGkgKyAyKVxuICB9XG4gIHJldHVybiB0aGlzXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuc3dhcDY0ID0gZnVuY3Rpb24gc3dhcDY0ICgpIHtcbiAgdmFyIGxlbiA9IHRoaXMubGVuZ3RoXG4gIGlmIChsZW4gJSA4ICE9PSAwKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0J1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA2NC1iaXRzJylcbiAgfVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSArPSA4KSB7XG4gICAgc3dhcCh0aGlzLCBpLCBpICsgNylcbiAgICBzd2FwKHRoaXMsIGkgKyAxLCBpICsgNilcbiAgICBzd2FwKHRoaXMsIGkgKyAyLCBpICsgNSlcbiAgICBzd2FwKHRoaXMsIGkgKyAzLCBpICsgNClcbiAgfVxuICByZXR1cm4gdGhpc1xufVxuXG5CdWZmZXIucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gdG9TdHJpbmcgKCkge1xuICB2YXIgbGVuZ3RoID0gdGhpcy5sZW5ndGggfCAwXG4gIGlmIChsZW5ndGggPT09IDApIHJldHVybiAnJ1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHV0ZjhTbGljZSh0aGlzLCAwLCBsZW5ndGgpXG4gIHJldHVybiBzbG93VG9TdHJpbmcuYXBwbHkodGhpcywgYXJndW1lbnRzKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLmVxdWFscyA9IGZ1bmN0aW9uIGVxdWFscyAoYikge1xuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihiKSkgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlcicpXG4gIGlmICh0aGlzID09PSBiKSByZXR1cm4gdHJ1ZVxuICByZXR1cm4gQnVmZmVyLmNvbXBhcmUodGhpcywgYikgPT09IDBcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5pbnNwZWN0ID0gZnVuY3Rpb24gaW5zcGVjdCAoKSB7XG4gIHZhciBzdHIgPSAnJ1xuICB2YXIgbWF4ID0gZXhwb3J0cy5JTlNQRUNUX01BWF9CWVRFU1xuICBpZiAodGhpcy5sZW5ndGggPiAwKSB7XG4gICAgc3RyID0gdGhpcy50b1N0cmluZygnaGV4JywgMCwgbWF4KS5tYXRjaCgvLnsyfS9nKS5qb2luKCcgJylcbiAgICBpZiAodGhpcy5sZW5ndGggPiBtYXgpIHN0ciArPSAnIC4uLiAnXG4gIH1cbiAgcmV0dXJuICc8QnVmZmVyICcgKyBzdHIgKyAnPidcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5jb21wYXJlID0gZnVuY3Rpb24gY29tcGFyZSAodGFyZ2V0LCBzdGFydCwgZW5kLCB0aGlzU3RhcnQsIHRoaXNFbmQpIHtcbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIodGFyZ2V0KSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXInKVxuICB9XG5cbiAgaWYgKHN0YXJ0ID09PSB1bmRlZmluZWQpIHtcbiAgICBzdGFydCA9IDBcbiAgfVxuICBpZiAoZW5kID09PSB1bmRlZmluZWQpIHtcbiAgICBlbmQgPSB0YXJnZXQgPyB0YXJnZXQubGVuZ3RoIDogMFxuICB9XG4gIGlmICh0aGlzU3RhcnQgPT09IHVuZGVmaW5lZCkge1xuICAgIHRoaXNTdGFydCA9IDBcbiAgfVxuICBpZiAodGhpc0VuZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhpc0VuZCA9IHRoaXMubGVuZ3RoXG4gIH1cblxuICBpZiAoc3RhcnQgPCAwIHx8IGVuZCA+IHRhcmdldC5sZW5ndGggfHwgdGhpc1N0YXJ0IDwgMCB8fCB0aGlzRW5kID4gdGhpcy5sZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignb3V0IG9mIHJhbmdlIGluZGV4JylcbiAgfVxuXG4gIGlmICh0aGlzU3RhcnQgPj0gdGhpc0VuZCAmJiBzdGFydCA+PSBlbmQpIHtcbiAgICByZXR1cm4gMFxuICB9XG4gIGlmICh0aGlzU3RhcnQgPj0gdGhpc0VuZCkge1xuICAgIHJldHVybiAtMVxuICB9XG4gIGlmIChzdGFydCA+PSBlbmQpIHtcbiAgICByZXR1cm4gMVxuICB9XG5cbiAgc3RhcnQgPj4+PSAwXG4gIGVuZCA+Pj49IDBcbiAgdGhpc1N0YXJ0ID4+Pj0gMFxuICB0aGlzRW5kID4+Pj0gMFxuXG4gIGlmICh0aGlzID09PSB0YXJnZXQpIHJldHVybiAwXG5cbiAgdmFyIHggPSB0aGlzRW5kIC0gdGhpc1N0YXJ0XG4gIHZhciB5ID0gZW5kIC0gc3RhcnRcbiAgdmFyIGxlbiA9IE1hdGgubWluKHgsIHkpXG5cbiAgdmFyIHRoaXNDb3B5ID0gdGhpcy5zbGljZSh0aGlzU3RhcnQsIHRoaXNFbmQpXG4gIHZhciB0YXJnZXRDb3B5ID0gdGFyZ2V0LnNsaWNlKHN0YXJ0LCBlbmQpXG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSkge1xuICAgIGlmICh0aGlzQ29weVtpXSAhPT0gdGFyZ2V0Q29weVtpXSkge1xuICAgICAgeCA9IHRoaXNDb3B5W2ldXG4gICAgICB5ID0gdGFyZ2V0Q29weVtpXVxuICAgICAgYnJlYWtcbiAgICB9XG4gIH1cblxuICBpZiAoeCA8IHkpIHJldHVybiAtMVxuICBpZiAoeSA8IHgpIHJldHVybiAxXG4gIHJldHVybiAwXG59XG5cbi8vIEZpbmRzIGVpdGhlciB0aGUgZmlyc3QgaW5kZXggb2YgYHZhbGAgaW4gYGJ1ZmZlcmAgYXQgb2Zmc2V0ID49IGBieXRlT2Zmc2V0YCxcbi8vIE9SIHRoZSBsYXN0IGluZGV4IG9mIGB2YWxgIGluIGBidWZmZXJgIGF0IG9mZnNldCA8PSBgYnl0ZU9mZnNldGAuXG4vL1xuLy8gQXJndW1lbnRzOlxuLy8gLSBidWZmZXIgLSBhIEJ1ZmZlciB0byBzZWFyY2hcbi8vIC0gdmFsIC0gYSBzdHJpbmcsIEJ1ZmZlciwgb3IgbnVtYmVyXG4vLyAtIGJ5dGVPZmZzZXQgLSBhbiBpbmRleCBpbnRvIGBidWZmZXJgOyB3aWxsIGJlIGNsYW1wZWQgdG8gYW4gaW50MzJcbi8vIC0gZW5jb2RpbmcgLSBhbiBvcHRpb25hbCBlbmNvZGluZywgcmVsZXZhbnQgaXMgdmFsIGlzIGEgc3RyaW5nXG4vLyAtIGRpciAtIHRydWUgZm9yIGluZGV4T2YsIGZhbHNlIGZvciBsYXN0SW5kZXhPZlxuZnVuY3Rpb24gYmlkaXJlY3Rpb25hbEluZGV4T2YgKGJ1ZmZlciwgdmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZywgZGlyKSB7XG4gIC8vIEVtcHR5IGJ1ZmZlciBtZWFucyBubyBtYXRjaFxuICBpZiAoYnVmZmVyLmxlbmd0aCA9PT0gMCkgcmV0dXJuIC0xXG5cbiAgLy8gTm9ybWFsaXplIGJ5dGVPZmZzZXRcbiAgaWYgKHR5cGVvZiBieXRlT2Zmc2V0ID09PSAnc3RyaW5nJykge1xuICAgIGVuY29kaW5nID0gYnl0ZU9mZnNldFxuICAgIGJ5dGVPZmZzZXQgPSAwXG4gIH0gZWxzZSBpZiAoYnl0ZU9mZnNldCA+IDB4N2ZmZmZmZmYpIHtcbiAgICBieXRlT2Zmc2V0ID0gMHg3ZmZmZmZmZlxuICB9IGVsc2UgaWYgKGJ5dGVPZmZzZXQgPCAtMHg4MDAwMDAwMCkge1xuICAgIGJ5dGVPZmZzZXQgPSAtMHg4MDAwMDAwMFxuICB9XG4gIGJ5dGVPZmZzZXQgPSArYnl0ZU9mZnNldCAgLy8gQ29lcmNlIHRvIE51bWJlci5cbiAgaWYgKGlzTmFOKGJ5dGVPZmZzZXQpKSB7XG4gICAgLy8gYnl0ZU9mZnNldDogaXQgaXQncyB1bmRlZmluZWQsIG51bGwsIE5hTiwgXCJmb29cIiwgZXRjLCBzZWFyY2ggd2hvbGUgYnVmZmVyXG4gICAgYnl0ZU9mZnNldCA9IGRpciA/IDAgOiAoYnVmZmVyLmxlbmd0aCAtIDEpXG4gIH1cblxuICAvLyBOb3JtYWxpemUgYnl0ZU9mZnNldDogbmVnYXRpdmUgb2Zmc2V0cyBzdGFydCBmcm9tIHRoZSBlbmQgb2YgdGhlIGJ1ZmZlclxuICBpZiAoYnl0ZU9mZnNldCA8IDApIGJ5dGVPZmZzZXQgPSBidWZmZXIubGVuZ3RoICsgYnl0ZU9mZnNldFxuICBpZiAoYnl0ZU9mZnNldCA+PSBidWZmZXIubGVuZ3RoKSB7XG4gICAgaWYgKGRpcikgcmV0dXJuIC0xXG4gICAgZWxzZSBieXRlT2Zmc2V0ID0gYnVmZmVyLmxlbmd0aCAtIDFcbiAgfSBlbHNlIGlmIChieXRlT2Zmc2V0IDwgMCkge1xuICAgIGlmIChkaXIpIGJ5dGVPZmZzZXQgPSAwXG4gICAgZWxzZSByZXR1cm4gLTFcbiAgfVxuXG4gIC8vIE5vcm1hbGl6ZSB2YWxcbiAgaWYgKHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnKSB7XG4gICAgdmFsID0gQnVmZmVyLmZyb20odmFsLCBlbmNvZGluZylcbiAgfVxuXG4gIC8vIEZpbmFsbHksIHNlYXJjaCBlaXRoZXIgaW5kZXhPZiAoaWYgZGlyIGlzIHRydWUpIG9yIGxhc3RJbmRleE9mXG4gIGlmIChCdWZmZXIuaXNCdWZmZXIodmFsKSkge1xuICAgIC8vIFNwZWNpYWwgY2FzZTogbG9va2luZyBmb3IgZW1wdHkgc3RyaW5nL2J1ZmZlciBhbHdheXMgZmFpbHNcbiAgICBpZiAodmFsLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIC0xXG4gICAgfVxuICAgIHJldHVybiBhcnJheUluZGV4T2YoYnVmZmVyLCB2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nLCBkaXIpXG4gIH0gZWxzZSBpZiAodHlwZW9mIHZhbCA9PT0gJ251bWJlcicpIHtcbiAgICB2YWwgPSB2YWwgJiAweEZGIC8vIFNlYXJjaCBmb3IgYSBieXRlIHZhbHVlIFswLTI1NV1cbiAgICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQgJiZcbiAgICAgICAgdHlwZW9mIFVpbnQ4QXJyYXkucHJvdG90eXBlLmluZGV4T2YgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGlmIChkaXIpIHtcbiAgICAgICAgcmV0dXJuIFVpbnQ4QXJyYXkucHJvdG90eXBlLmluZGV4T2YuY2FsbChidWZmZXIsIHZhbCwgYnl0ZU9mZnNldClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBVaW50OEFycmF5LnByb3RvdHlwZS5sYXN0SW5kZXhPZi5jYWxsKGJ1ZmZlciwgdmFsLCBieXRlT2Zmc2V0KVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYXJyYXlJbmRleE9mKGJ1ZmZlciwgWyB2YWwgXSwgYnl0ZU9mZnNldCwgZW5jb2RpbmcsIGRpcilcbiAgfVxuXG4gIHRocm93IG5ldyBUeXBlRXJyb3IoJ3ZhbCBtdXN0IGJlIHN0cmluZywgbnVtYmVyIG9yIEJ1ZmZlcicpXG59XG5cbmZ1bmN0aW9uIGFycmF5SW5kZXhPZiAoYXJyLCB2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nLCBkaXIpIHtcbiAgdmFyIGluZGV4U2l6ZSA9IDFcbiAgdmFyIGFyckxlbmd0aCA9IGFyci5sZW5ndGhcbiAgdmFyIHZhbExlbmd0aCA9IHZhbC5sZW5ndGhcblxuICBpZiAoZW5jb2RpbmcgIT09IHVuZGVmaW5lZCkge1xuICAgIGVuY29kaW5nID0gU3RyaW5nKGVuY29kaW5nKS50b0xvd2VyQ2FzZSgpXG4gICAgaWYgKGVuY29kaW5nID09PSAndWNzMicgfHwgZW5jb2RpbmcgPT09ICd1Y3MtMicgfHxcbiAgICAgICAgZW5jb2RpbmcgPT09ICd1dGYxNmxlJyB8fCBlbmNvZGluZyA9PT0gJ3V0Zi0xNmxlJykge1xuICAgICAgaWYgKGFyci5sZW5ndGggPCAyIHx8IHZhbC5sZW5ndGggPCAyKSB7XG4gICAgICAgIHJldHVybiAtMVxuICAgICAgfVxuICAgICAgaW5kZXhTaXplID0gMlxuICAgICAgYXJyTGVuZ3RoIC89IDJcbiAgICAgIHZhbExlbmd0aCAvPSAyXG4gICAgICBieXRlT2Zmc2V0IC89IDJcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiByZWFkIChidWYsIGkpIHtcbiAgICBpZiAoaW5kZXhTaXplID09PSAxKSB7XG4gICAgICByZXR1cm4gYnVmW2ldXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBidWYucmVhZFVJbnQxNkJFKGkgKiBpbmRleFNpemUpXG4gICAgfVxuICB9XG5cbiAgdmFyIGlcbiAgaWYgKGRpcikge1xuICAgIHZhciBmb3VuZEluZGV4ID0gLTFcbiAgICBmb3IgKGkgPSBieXRlT2Zmc2V0OyBpIDwgYXJyTGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChyZWFkKGFyciwgaSkgPT09IHJlYWQodmFsLCBmb3VuZEluZGV4ID09PSAtMSA/IDAgOiBpIC0gZm91bmRJbmRleCkpIHtcbiAgICAgICAgaWYgKGZvdW5kSW5kZXggPT09IC0xKSBmb3VuZEluZGV4ID0gaVxuICAgICAgICBpZiAoaSAtIGZvdW5kSW5kZXggKyAxID09PSB2YWxMZW5ndGgpIHJldHVybiBmb3VuZEluZGV4ICogaW5kZXhTaXplXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoZm91bmRJbmRleCAhPT0gLTEpIGkgLT0gaSAtIGZvdW5kSW5kZXhcbiAgICAgICAgZm91bmRJbmRleCA9IC0xXG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGlmIChieXRlT2Zmc2V0ICsgdmFsTGVuZ3RoID4gYXJyTGVuZ3RoKSBieXRlT2Zmc2V0ID0gYXJyTGVuZ3RoIC0gdmFsTGVuZ3RoXG4gICAgZm9yIChpID0gYnl0ZU9mZnNldDsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIHZhciBmb3VuZCA9IHRydWVcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdmFsTGVuZ3RoOyBqKyspIHtcbiAgICAgICAgaWYgKHJlYWQoYXJyLCBpICsgaikgIT09IHJlYWQodmFsLCBqKSkge1xuICAgICAgICAgIGZvdW5kID0gZmFsc2VcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoZm91bmQpIHJldHVybiBpXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIC0xXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuaW5jbHVkZXMgPSBmdW5jdGlvbiBpbmNsdWRlcyAodmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZykge1xuICByZXR1cm4gdGhpcy5pbmRleE9mKHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcpICE9PSAtMVxufVxuXG5CdWZmZXIucHJvdG90eXBlLmluZGV4T2YgPSBmdW5jdGlvbiBpbmRleE9mICh2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nKSB7XG4gIHJldHVybiBiaWRpcmVjdGlvbmFsSW5kZXhPZih0aGlzLCB2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nLCB0cnVlKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLmxhc3RJbmRleE9mID0gZnVuY3Rpb24gbGFzdEluZGV4T2YgKHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcpIHtcbiAgcmV0dXJuIGJpZGlyZWN0aW9uYWxJbmRleE9mKHRoaXMsIHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcsIGZhbHNlKVxufVxuXG5mdW5jdGlvbiBoZXhXcml0ZSAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIG9mZnNldCA9IE51bWJlcihvZmZzZXQpIHx8IDBcbiAgdmFyIHJlbWFpbmluZyA9IGJ1Zi5sZW5ndGggLSBvZmZzZXRcbiAgaWYgKCFsZW5ndGgpIHtcbiAgICBsZW5ndGggPSByZW1haW5pbmdcbiAgfSBlbHNlIHtcbiAgICBsZW5ndGggPSBOdW1iZXIobGVuZ3RoKVxuICAgIGlmIChsZW5ndGggPiByZW1haW5pbmcpIHtcbiAgICAgIGxlbmd0aCA9IHJlbWFpbmluZ1xuICAgIH1cbiAgfVxuXG4gIC8vIG11c3QgYmUgYW4gZXZlbiBudW1iZXIgb2YgZGlnaXRzXG4gIHZhciBzdHJMZW4gPSBzdHJpbmcubGVuZ3RoXG4gIGlmIChzdHJMZW4gJSAyICE9PSAwKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIGhleCBzdHJpbmcnKVxuXG4gIGlmIChsZW5ndGggPiBzdHJMZW4gLyAyKSB7XG4gICAgbGVuZ3RoID0gc3RyTGVuIC8gMlxuICB9XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiAgICB2YXIgcGFyc2VkID0gcGFyc2VJbnQoc3RyaW5nLnN1YnN0cihpICogMiwgMiksIDE2KVxuICAgIGlmIChpc05hTihwYXJzZWQpKSByZXR1cm4gaVxuICAgIGJ1ZltvZmZzZXQgKyBpXSA9IHBhcnNlZFxuICB9XG4gIHJldHVybiBpXG59XG5cbmZ1bmN0aW9uIHV0ZjhXcml0ZSAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBibGl0QnVmZmVyKHV0ZjhUb0J5dGVzKHN0cmluZywgYnVmLmxlbmd0aCAtIG9mZnNldCksIGJ1Ziwgb2Zmc2V0LCBsZW5ndGgpXG59XG5cbmZ1bmN0aW9uIGFzY2lpV3JpdGUgKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCkge1xuICByZXR1cm4gYmxpdEJ1ZmZlcihhc2NpaVRvQnl0ZXMoc3RyaW5nKSwgYnVmLCBvZmZzZXQsIGxlbmd0aClcbn1cblxuZnVuY3Rpb24gbGF0aW4xV3JpdGUgKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCkge1xuICByZXR1cm4gYXNjaWlXcml0ZShidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpXG59XG5cbmZ1bmN0aW9uIGJhc2U2NFdyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGJsaXRCdWZmZXIoYmFzZTY0VG9CeXRlcyhzdHJpbmcpLCBidWYsIG9mZnNldCwgbGVuZ3RoKVxufVxuXG5mdW5jdGlvbiB1Y3MyV3JpdGUgKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCkge1xuICByZXR1cm4gYmxpdEJ1ZmZlcih1dGYxNmxlVG9CeXRlcyhzdHJpbmcsIGJ1Zi5sZW5ndGggLSBvZmZzZXQpLCBidWYsIG9mZnNldCwgbGVuZ3RoKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24gd3JpdGUgKHN0cmluZywgb2Zmc2V0LCBsZW5ndGgsIGVuY29kaW5nKSB7XG4gIC8vIEJ1ZmZlciN3cml0ZShzdHJpbmcpXG4gIGlmIChvZmZzZXQgPT09IHVuZGVmaW5lZCkge1xuICAgIGVuY29kaW5nID0gJ3V0ZjgnXG4gICAgbGVuZ3RoID0gdGhpcy5sZW5ndGhcbiAgICBvZmZzZXQgPSAwXG4gIC8vIEJ1ZmZlciN3cml0ZShzdHJpbmcsIGVuY29kaW5nKVxuICB9IGVsc2UgaWYgKGxlbmd0aCA9PT0gdW5kZWZpbmVkICYmIHR5cGVvZiBvZmZzZXQgPT09ICdzdHJpbmcnKSB7XG4gICAgZW5jb2RpbmcgPSBvZmZzZXRcbiAgICBsZW5ndGggPSB0aGlzLmxlbmd0aFxuICAgIG9mZnNldCA9IDBcbiAgLy8gQnVmZmVyI3dyaXRlKHN0cmluZywgb2Zmc2V0WywgbGVuZ3RoXVssIGVuY29kaW5nXSlcbiAgfSBlbHNlIGlmIChpc0Zpbml0ZShvZmZzZXQpKSB7XG4gICAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICAgIGlmIChpc0Zpbml0ZShsZW5ndGgpKSB7XG4gICAgICBsZW5ndGggPSBsZW5ndGggfCAwXG4gICAgICBpZiAoZW5jb2RpbmcgPT09IHVuZGVmaW5lZCkgZW5jb2RpbmcgPSAndXRmOCdcbiAgICB9IGVsc2Uge1xuICAgICAgZW5jb2RpbmcgPSBsZW5ndGhcbiAgICAgIGxlbmd0aCA9IHVuZGVmaW5lZFxuICAgIH1cbiAgLy8gbGVnYWN5IHdyaXRlKHN0cmluZywgZW5jb2RpbmcsIG9mZnNldCwgbGVuZ3RoKSAtIHJlbW92ZSBpbiB2MC4xM1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICdCdWZmZXIud3JpdGUoc3RyaW5nLCBlbmNvZGluZywgb2Zmc2V0WywgbGVuZ3RoXSkgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZCdcbiAgICApXG4gIH1cblxuICB2YXIgcmVtYWluaW5nID0gdGhpcy5sZW5ndGggLSBvZmZzZXRcbiAgaWYgKGxlbmd0aCA9PT0gdW5kZWZpbmVkIHx8IGxlbmd0aCA+IHJlbWFpbmluZykgbGVuZ3RoID0gcmVtYWluaW5nXG5cbiAgaWYgKChzdHJpbmcubGVuZ3RoID4gMCAmJiAobGVuZ3RoIDwgMCB8fCBvZmZzZXQgPCAwKSkgfHwgb2Zmc2V0ID4gdGhpcy5sZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignQXR0ZW1wdCB0byB3cml0ZSBvdXRzaWRlIGJ1ZmZlciBib3VuZHMnKVxuICB9XG5cbiAgaWYgKCFlbmNvZGluZykgZW5jb2RpbmcgPSAndXRmOCdcblxuICB2YXIgbG93ZXJlZENhc2UgPSBmYWxzZVxuICBmb3IgKDs7KSB7XG4gICAgc3dpdGNoIChlbmNvZGluZykge1xuICAgICAgY2FzZSAnaGV4JzpcbiAgICAgICAgcmV0dXJuIGhleFdyaXRlKHRoaXMsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpXG5cbiAgICAgIGNhc2UgJ3V0ZjgnOlxuICAgICAgY2FzZSAndXRmLTgnOlxuICAgICAgICByZXR1cm4gdXRmOFdyaXRlKHRoaXMsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpXG5cbiAgICAgIGNhc2UgJ2FzY2lpJzpcbiAgICAgICAgcmV0dXJuIGFzY2lpV3JpdGUodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcblxuICAgICAgY2FzZSAnbGF0aW4xJzpcbiAgICAgIGNhc2UgJ2JpbmFyeSc6XG4gICAgICAgIHJldHVybiBsYXRpbjFXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxuXG4gICAgICBjYXNlICdiYXNlNjQnOlxuICAgICAgICAvLyBXYXJuaW5nOiBtYXhMZW5ndGggbm90IHRha2VuIGludG8gYWNjb3VudCBpbiBiYXNlNjRXcml0ZVxuICAgICAgICByZXR1cm4gYmFzZTY0V3JpdGUodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcblxuICAgICAgY2FzZSAndWNzMic6XG4gICAgICBjYXNlICd1Y3MtMic6XG4gICAgICBjYXNlICd1dGYxNmxlJzpcbiAgICAgIGNhc2UgJ3V0Zi0xNmxlJzpcbiAgICAgICAgcmV0dXJuIHVjczJXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAobG93ZXJlZENhc2UpIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Vua25vd24gZW5jb2Rpbmc6ICcgKyBlbmNvZGluZylcbiAgICAgICAgZW5jb2RpbmcgPSAoJycgKyBlbmNvZGluZykudG9Mb3dlckNhc2UoKVxuICAgICAgICBsb3dlcmVkQ2FzZSA9IHRydWVcbiAgICB9XG4gIH1cbn1cblxuQnVmZmVyLnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbiB0b0pTT04gKCkge1xuICByZXR1cm4ge1xuICAgIHR5cGU6ICdCdWZmZXInLFxuICAgIGRhdGE6IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMuX2FyciB8fCB0aGlzLCAwKVxuICB9XG59XG5cbmZ1bmN0aW9uIGJhc2U2NFNsaWNlIChidWYsIHN0YXJ0LCBlbmQpIHtcbiAgaWYgKHN0YXJ0ID09PSAwICYmIGVuZCA9PT0gYnVmLmxlbmd0aCkge1xuICAgIHJldHVybiBiYXNlNjQuZnJvbUJ5dGVBcnJheShidWYpXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGJhc2U2NC5mcm9tQnl0ZUFycmF5KGJ1Zi5zbGljZShzdGFydCwgZW5kKSlcbiAgfVxufVxuXG5mdW5jdGlvbiB1dGY4U2xpY2UgKGJ1Ziwgc3RhcnQsIGVuZCkge1xuICBlbmQgPSBNYXRoLm1pbihidWYubGVuZ3RoLCBlbmQpXG4gIHZhciByZXMgPSBbXVxuXG4gIHZhciBpID0gc3RhcnRcbiAgd2hpbGUgKGkgPCBlbmQpIHtcbiAgICB2YXIgZmlyc3RCeXRlID0gYnVmW2ldXG4gICAgdmFyIGNvZGVQb2ludCA9IG51bGxcbiAgICB2YXIgYnl0ZXNQZXJTZXF1ZW5jZSA9IChmaXJzdEJ5dGUgPiAweEVGKSA/IDRcbiAgICAgIDogKGZpcnN0Qnl0ZSA+IDB4REYpID8gM1xuICAgICAgOiAoZmlyc3RCeXRlID4gMHhCRikgPyAyXG4gICAgICA6IDFcblxuICAgIGlmIChpICsgYnl0ZXNQZXJTZXF1ZW5jZSA8PSBlbmQpIHtcbiAgICAgIHZhciBzZWNvbmRCeXRlLCB0aGlyZEJ5dGUsIGZvdXJ0aEJ5dGUsIHRlbXBDb2RlUG9pbnRcblxuICAgICAgc3dpdGNoIChieXRlc1BlclNlcXVlbmNlKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBpZiAoZmlyc3RCeXRlIDwgMHg4MCkge1xuICAgICAgICAgICAgY29kZVBvaW50ID0gZmlyc3RCeXRlXG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBzZWNvbmRCeXRlID0gYnVmW2kgKyAxXVxuICAgICAgICAgIGlmICgoc2Vjb25kQnl0ZSAmIDB4QzApID09PSAweDgwKSB7XG4gICAgICAgICAgICB0ZW1wQ29kZVBvaW50ID0gKGZpcnN0Qnl0ZSAmIDB4MUYpIDw8IDB4NiB8IChzZWNvbmRCeXRlICYgMHgzRilcbiAgICAgICAgICAgIGlmICh0ZW1wQ29kZVBvaW50ID4gMHg3Rikge1xuICAgICAgICAgICAgICBjb2RlUG9pbnQgPSB0ZW1wQ29kZVBvaW50XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICBzZWNvbmRCeXRlID0gYnVmW2kgKyAxXVxuICAgICAgICAgIHRoaXJkQnl0ZSA9IGJ1ZltpICsgMl1cbiAgICAgICAgICBpZiAoKHNlY29uZEJ5dGUgJiAweEMwKSA9PT0gMHg4MCAmJiAodGhpcmRCeXRlICYgMHhDMCkgPT09IDB4ODApIHtcbiAgICAgICAgICAgIHRlbXBDb2RlUG9pbnQgPSAoZmlyc3RCeXRlICYgMHhGKSA8PCAweEMgfCAoc2Vjb25kQnl0ZSAmIDB4M0YpIDw8IDB4NiB8ICh0aGlyZEJ5dGUgJiAweDNGKVxuICAgICAgICAgICAgaWYgKHRlbXBDb2RlUG9pbnQgPiAweDdGRiAmJiAodGVtcENvZGVQb2ludCA8IDB4RDgwMCB8fCB0ZW1wQ29kZVBvaW50ID4gMHhERkZGKSkge1xuICAgICAgICAgICAgICBjb2RlUG9pbnQgPSB0ZW1wQ29kZVBvaW50XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICBzZWNvbmRCeXRlID0gYnVmW2kgKyAxXVxuICAgICAgICAgIHRoaXJkQnl0ZSA9IGJ1ZltpICsgMl1cbiAgICAgICAgICBmb3VydGhCeXRlID0gYnVmW2kgKyAzXVxuICAgICAgICAgIGlmICgoc2Vjb25kQnl0ZSAmIDB4QzApID09PSAweDgwICYmICh0aGlyZEJ5dGUgJiAweEMwKSA9PT0gMHg4MCAmJiAoZm91cnRoQnl0ZSAmIDB4QzApID09PSAweDgwKSB7XG4gICAgICAgICAgICB0ZW1wQ29kZVBvaW50ID0gKGZpcnN0Qnl0ZSAmIDB4RikgPDwgMHgxMiB8IChzZWNvbmRCeXRlICYgMHgzRikgPDwgMHhDIHwgKHRoaXJkQnl0ZSAmIDB4M0YpIDw8IDB4NiB8IChmb3VydGhCeXRlICYgMHgzRilcbiAgICAgICAgICAgIGlmICh0ZW1wQ29kZVBvaW50ID4gMHhGRkZGICYmIHRlbXBDb2RlUG9pbnQgPCAweDExMDAwMCkge1xuICAgICAgICAgICAgICBjb2RlUG9pbnQgPSB0ZW1wQ29kZVBvaW50XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjb2RlUG9pbnQgPT09IG51bGwpIHtcbiAgICAgIC8vIHdlIGRpZCBub3QgZ2VuZXJhdGUgYSB2YWxpZCBjb2RlUG9pbnQgc28gaW5zZXJ0IGFcbiAgICAgIC8vIHJlcGxhY2VtZW50IGNoYXIgKFUrRkZGRCkgYW5kIGFkdmFuY2Ugb25seSAxIGJ5dGVcbiAgICAgIGNvZGVQb2ludCA9IDB4RkZGRFxuICAgICAgYnl0ZXNQZXJTZXF1ZW5jZSA9IDFcbiAgICB9IGVsc2UgaWYgKGNvZGVQb2ludCA+IDB4RkZGRikge1xuICAgICAgLy8gZW5jb2RlIHRvIHV0ZjE2IChzdXJyb2dhdGUgcGFpciBkYW5jZSlcbiAgICAgIGNvZGVQb2ludCAtPSAweDEwMDAwXG4gICAgICByZXMucHVzaChjb2RlUG9pbnQgPj4+IDEwICYgMHgzRkYgfCAweEQ4MDApXG4gICAgICBjb2RlUG9pbnQgPSAweERDMDAgfCBjb2RlUG9pbnQgJiAweDNGRlxuICAgIH1cblxuICAgIHJlcy5wdXNoKGNvZGVQb2ludClcbiAgICBpICs9IGJ5dGVzUGVyU2VxdWVuY2VcbiAgfVxuXG4gIHJldHVybiBkZWNvZGVDb2RlUG9pbnRzQXJyYXkocmVzKVxufVxuXG4vLyBCYXNlZCBvbiBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8yMjc0NzI3Mi82ODA3NDIsIHRoZSBicm93c2VyIHdpdGhcbi8vIHRoZSBsb3dlc3QgbGltaXQgaXMgQ2hyb21lLCB3aXRoIDB4MTAwMDAgYXJncy5cbi8vIFdlIGdvIDEgbWFnbml0dWRlIGxlc3MsIGZvciBzYWZldHlcbnZhciBNQVhfQVJHVU1FTlRTX0xFTkdUSCA9IDB4MTAwMFxuXG5mdW5jdGlvbiBkZWNvZGVDb2RlUG9pbnRzQXJyYXkgKGNvZGVQb2ludHMpIHtcbiAgdmFyIGxlbiA9IGNvZGVQb2ludHMubGVuZ3RoXG4gIGlmIChsZW4gPD0gTUFYX0FSR1VNRU5UU19MRU5HVEgpIHtcbiAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsIGNvZGVQb2ludHMpIC8vIGF2b2lkIGV4dHJhIHNsaWNlKClcbiAgfVxuXG4gIC8vIERlY29kZSBpbiBjaHVua3MgdG8gYXZvaWQgXCJjYWxsIHN0YWNrIHNpemUgZXhjZWVkZWRcIi5cbiAgdmFyIHJlcyA9ICcnXG4gIHZhciBpID0gMFxuICB3aGlsZSAoaSA8IGxlbikge1xuICAgIHJlcyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFxuICAgICAgU3RyaW5nLFxuICAgICAgY29kZVBvaW50cy5zbGljZShpLCBpICs9IE1BWF9BUkdVTUVOVFNfTEVOR1RIKVxuICAgIClcbiAgfVxuICByZXR1cm4gcmVzXG59XG5cbmZ1bmN0aW9uIGFzY2lpU2xpY2UgKGJ1Ziwgc3RhcnQsIGVuZCkge1xuICB2YXIgcmV0ID0gJydcbiAgZW5kID0gTWF0aC5taW4oYnVmLmxlbmd0aCwgZW5kKVxuXG4gIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGVuZDsgKytpKSB7XG4gICAgcmV0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYnVmW2ldICYgMHg3RilcbiAgfVxuICByZXR1cm4gcmV0XG59XG5cbmZ1bmN0aW9uIGxhdGluMVNsaWNlIChidWYsIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIHJldCA9ICcnXG4gIGVuZCA9IE1hdGgubWluKGJ1Zi5sZW5ndGgsIGVuZClcblxuICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPCBlbmQ7ICsraSkge1xuICAgIHJldCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGJ1ZltpXSlcbiAgfVxuICByZXR1cm4gcmV0XG59XG5cbmZ1bmN0aW9uIGhleFNsaWNlIChidWYsIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIGxlbiA9IGJ1Zi5sZW5ndGhcblxuICBpZiAoIXN0YXJ0IHx8IHN0YXJ0IDwgMCkgc3RhcnQgPSAwXG4gIGlmICghZW5kIHx8IGVuZCA8IDAgfHwgZW5kID4gbGVuKSBlbmQgPSBsZW5cblxuICB2YXIgb3V0ID0gJydcbiAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgZW5kOyArK2kpIHtcbiAgICBvdXQgKz0gdG9IZXgoYnVmW2ldKVxuICB9XG4gIHJldHVybiBvdXRcbn1cblxuZnVuY3Rpb24gdXRmMTZsZVNsaWNlIChidWYsIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIGJ5dGVzID0gYnVmLnNsaWNlKHN0YXJ0LCBlbmQpXG4gIHZhciByZXMgPSAnJ1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGJ5dGVzLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgcmVzICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYnl0ZXNbaV0gKyBieXRlc1tpICsgMV0gKiAyNTYpXG4gIH1cbiAgcmV0dXJuIHJlc1xufVxuXG5CdWZmZXIucHJvdG90eXBlLnNsaWNlID0gZnVuY3Rpb24gc2xpY2UgKHN0YXJ0LCBlbmQpIHtcbiAgdmFyIGxlbiA9IHRoaXMubGVuZ3RoXG4gIHN0YXJ0ID0gfn5zdGFydFxuICBlbmQgPSBlbmQgPT09IHVuZGVmaW5lZCA/IGxlbiA6IH5+ZW5kXG5cbiAgaWYgKHN0YXJ0IDwgMCkge1xuICAgIHN0YXJ0ICs9IGxlblxuICAgIGlmIChzdGFydCA8IDApIHN0YXJ0ID0gMFxuICB9IGVsc2UgaWYgKHN0YXJ0ID4gbGVuKSB7XG4gICAgc3RhcnQgPSBsZW5cbiAgfVxuXG4gIGlmIChlbmQgPCAwKSB7XG4gICAgZW5kICs9IGxlblxuICAgIGlmIChlbmQgPCAwKSBlbmQgPSAwXG4gIH0gZWxzZSBpZiAoZW5kID4gbGVuKSB7XG4gICAgZW5kID0gbGVuXG4gIH1cblxuICBpZiAoZW5kIDwgc3RhcnQpIGVuZCA9IHN0YXJ0XG5cbiAgdmFyIG5ld0J1ZlxuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICBuZXdCdWYgPSB0aGlzLnN1YmFycmF5KHN0YXJ0LCBlbmQpXG4gICAgbmV3QnVmLl9fcHJvdG9fXyA9IEJ1ZmZlci5wcm90b3R5cGVcbiAgfSBlbHNlIHtcbiAgICB2YXIgc2xpY2VMZW4gPSBlbmQgLSBzdGFydFxuICAgIG5ld0J1ZiA9IG5ldyBCdWZmZXIoc2xpY2VMZW4sIHVuZGVmaW5lZClcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNsaWNlTGVuOyArK2kpIHtcbiAgICAgIG5ld0J1ZltpXSA9IHRoaXNbaSArIHN0YXJ0XVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXdCdWZcbn1cblxuLypcbiAqIE5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgYnVmZmVyIGlzbid0IHRyeWluZyB0byB3cml0ZSBvdXQgb2YgYm91bmRzLlxuICovXG5mdW5jdGlvbiBjaGVja09mZnNldCAob2Zmc2V0LCBleHQsIGxlbmd0aCkge1xuICBpZiAoKG9mZnNldCAlIDEpICE9PSAwIHx8IG9mZnNldCA8IDApIHRocm93IG5ldyBSYW5nZUVycm9yKCdvZmZzZXQgaXMgbm90IHVpbnQnKVxuICBpZiAob2Zmc2V0ICsgZXh0ID4gbGVuZ3RoKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignVHJ5aW5nIHRvIGFjY2VzcyBiZXlvbmQgYnVmZmVyIGxlbmd0aCcpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnRMRSA9IGZ1bmN0aW9uIHJlYWRVSW50TEUgKG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCBieXRlTGVuZ3RoLCB0aGlzLmxlbmd0aClcblxuICB2YXIgdmFsID0gdGhpc1tvZmZzZXRdXG4gIHZhciBtdWwgPSAxXG4gIHZhciBpID0gMFxuICB3aGlsZSAoKytpIDwgYnl0ZUxlbmd0aCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIHZhbCArPSB0aGlzW29mZnNldCArIGldICogbXVsXG4gIH1cblxuICByZXR1cm4gdmFsXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnRCRSA9IGZ1bmN0aW9uIHJlYWRVSW50QkUgKG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aCB8IDBcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIGNoZWNrT2Zmc2V0KG9mZnNldCwgYnl0ZUxlbmd0aCwgdGhpcy5sZW5ndGgpXG4gIH1cblxuICB2YXIgdmFsID0gdGhpc1tvZmZzZXQgKyAtLWJ5dGVMZW5ndGhdXG4gIHZhciBtdWwgPSAxXG4gIHdoaWxlIChieXRlTGVuZ3RoID4gMCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIHZhbCArPSB0aGlzW29mZnNldCArIC0tYnl0ZUxlbmd0aF0gKiBtdWxcbiAgfVxuXG4gIHJldHVybiB2YWxcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludDggPSBmdW5jdGlvbiByZWFkVUludDggKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCAxLCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuIHRoaXNbb2Zmc2V0XVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50MTZMRSA9IGZ1bmN0aW9uIHJlYWRVSW50MTZMRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDIsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gdGhpc1tvZmZzZXRdIHwgKHRoaXNbb2Zmc2V0ICsgMV0gPDwgOClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludDE2QkUgPSBmdW5jdGlvbiByZWFkVUludDE2QkUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCAyLCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuICh0aGlzW29mZnNldF0gPDwgOCkgfCB0aGlzW29mZnNldCArIDFdXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnQzMkxFID0gZnVuY3Rpb24gcmVhZFVJbnQzMkxFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpXG5cbiAgcmV0dXJuICgodGhpc1tvZmZzZXRdKSB8XG4gICAgICAodGhpc1tvZmZzZXQgKyAxXSA8PCA4KSB8XG4gICAgICAodGhpc1tvZmZzZXQgKyAyXSA8PCAxNikpICtcbiAgICAgICh0aGlzW29mZnNldCArIDNdICogMHgxMDAwMDAwKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50MzJCRSA9IGZ1bmN0aW9uIHJlYWRVSW50MzJCRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDQsIHRoaXMubGVuZ3RoKVxuXG4gIHJldHVybiAodGhpc1tvZmZzZXRdICogMHgxMDAwMDAwKSArXG4gICAgKCh0aGlzW29mZnNldCArIDFdIDw8IDE2KSB8XG4gICAgKHRoaXNbb2Zmc2V0ICsgMl0gPDwgOCkgfFxuICAgIHRoaXNbb2Zmc2V0ICsgM10pXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludExFID0gZnVuY3Rpb24gcmVhZEludExFIChvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgYnl0ZUxlbmd0aCwgdGhpcy5sZW5ndGgpXG5cbiAgdmFyIHZhbCA9IHRoaXNbb2Zmc2V0XVxuICB2YXIgbXVsID0gMVxuICB2YXIgaSA9IDBcbiAgd2hpbGUgKCsraSA8IGJ5dGVMZW5ndGggJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICB2YWwgKz0gdGhpc1tvZmZzZXQgKyBpXSAqIG11bFxuICB9XG4gIG11bCAqPSAweDgwXG5cbiAgaWYgKHZhbCA+PSBtdWwpIHZhbCAtPSBNYXRoLnBvdygyLCA4ICogYnl0ZUxlbmd0aClcblxuICByZXR1cm4gdmFsXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludEJFID0gZnVuY3Rpb24gcmVhZEludEJFIChvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgYnl0ZUxlbmd0aCwgdGhpcy5sZW5ndGgpXG5cbiAgdmFyIGkgPSBieXRlTGVuZ3RoXG4gIHZhciBtdWwgPSAxXG4gIHZhciB2YWwgPSB0aGlzW29mZnNldCArIC0taV1cbiAgd2hpbGUgKGkgPiAwICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgdmFsICs9IHRoaXNbb2Zmc2V0ICsgLS1pXSAqIG11bFxuICB9XG4gIG11bCAqPSAweDgwXG5cbiAgaWYgKHZhbCA+PSBtdWwpIHZhbCAtPSBNYXRoLnBvdygyLCA4ICogYnl0ZUxlbmd0aClcblxuICByZXR1cm4gdmFsXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludDggPSBmdW5jdGlvbiByZWFkSW50OCAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDEsIHRoaXMubGVuZ3RoKVxuICBpZiAoISh0aGlzW29mZnNldF0gJiAweDgwKSkgcmV0dXJuICh0aGlzW29mZnNldF0pXG4gIHJldHVybiAoKDB4ZmYgLSB0aGlzW29mZnNldF0gKyAxKSAqIC0xKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnQxNkxFID0gZnVuY3Rpb24gcmVhZEludDE2TEUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCAyLCB0aGlzLmxlbmd0aClcbiAgdmFyIHZhbCA9IHRoaXNbb2Zmc2V0XSB8ICh0aGlzW29mZnNldCArIDFdIDw8IDgpXG4gIHJldHVybiAodmFsICYgMHg4MDAwKSA/IHZhbCB8IDB4RkZGRjAwMDAgOiB2YWxcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50MTZCRSA9IGZ1bmN0aW9uIHJlYWRJbnQxNkJFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMiwgdGhpcy5sZW5ndGgpXG4gIHZhciB2YWwgPSB0aGlzW29mZnNldCArIDFdIHwgKHRoaXNbb2Zmc2V0XSA8PCA4KVxuICByZXR1cm4gKHZhbCAmIDB4ODAwMCkgPyB2YWwgfCAweEZGRkYwMDAwIDogdmFsXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludDMyTEUgPSBmdW5jdGlvbiByZWFkSW50MzJMRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDQsIHRoaXMubGVuZ3RoKVxuXG4gIHJldHVybiAodGhpc1tvZmZzZXRdKSB8XG4gICAgKHRoaXNbb2Zmc2V0ICsgMV0gPDwgOCkgfFxuICAgICh0aGlzW29mZnNldCArIDJdIDw8IDE2KSB8XG4gICAgKHRoaXNbb2Zmc2V0ICsgM10gPDwgMjQpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludDMyQkUgPSBmdW5jdGlvbiByZWFkSW50MzJCRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDQsIHRoaXMubGVuZ3RoKVxuXG4gIHJldHVybiAodGhpc1tvZmZzZXRdIDw8IDI0KSB8XG4gICAgKHRoaXNbb2Zmc2V0ICsgMV0gPDwgMTYpIHxcbiAgICAodGhpc1tvZmZzZXQgKyAyXSA8PCA4KSB8XG4gICAgKHRoaXNbb2Zmc2V0ICsgM10pXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEZsb2F0TEUgPSBmdW5jdGlvbiByZWFkRmxvYXRMRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDQsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gaWVlZTc1NC5yZWFkKHRoaXMsIG9mZnNldCwgdHJ1ZSwgMjMsIDQpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEZsb2F0QkUgPSBmdW5jdGlvbiByZWFkRmxvYXRCRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDQsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gaWVlZTc1NC5yZWFkKHRoaXMsIG9mZnNldCwgZmFsc2UsIDIzLCA0KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWREb3VibGVMRSA9IGZ1bmN0aW9uIHJlYWREb3VibGVMRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDgsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gaWVlZTc1NC5yZWFkKHRoaXMsIG9mZnNldCwgdHJ1ZSwgNTIsIDgpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZERvdWJsZUJFID0gZnVuY3Rpb24gcmVhZERvdWJsZUJFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgOCwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiBpZWVlNzU0LnJlYWQodGhpcywgb2Zmc2V0LCBmYWxzZSwgNTIsIDgpXG59XG5cbmZ1bmN0aW9uIGNoZWNrSW50IChidWYsIHZhbHVlLCBvZmZzZXQsIGV4dCwgbWF4LCBtaW4pIHtcbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoYnVmKSkgdGhyb3cgbmV3IFR5cGVFcnJvcignXCJidWZmZXJcIiBhcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyIGluc3RhbmNlJylcbiAgaWYgKHZhbHVlID4gbWF4IHx8IHZhbHVlIDwgbWluKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignXCJ2YWx1ZVwiIGFyZ3VtZW50IGlzIG91dCBvZiBib3VuZHMnKVxuICBpZiAob2Zmc2V0ICsgZXh0ID4gYnVmLmxlbmd0aCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0luZGV4IG91dCBvZiByYW5nZScpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50TEUgPSBmdW5jdGlvbiB3cml0ZVVJbnRMRSAodmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aCB8IDBcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIHZhciBtYXhCeXRlcyA9IE1hdGgucG93KDIsIDggKiBieXRlTGVuZ3RoKSAtIDFcbiAgICBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBtYXhCeXRlcywgMClcbiAgfVxuXG4gIHZhciBtdWwgPSAxXG4gIHZhciBpID0gMFxuICB0aGlzW29mZnNldF0gPSB2YWx1ZSAmIDB4RkZcbiAgd2hpbGUgKCsraSA8IGJ5dGVMZW5ndGggJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICB0aGlzW29mZnNldCArIGldID0gKHZhbHVlIC8gbXVsKSAmIDB4RkZcbiAgfVxuXG4gIHJldHVybiBvZmZzZXQgKyBieXRlTGVuZ3RoXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50QkUgPSBmdW5jdGlvbiB3cml0ZVVJbnRCRSAodmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aCB8IDBcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIHZhciBtYXhCeXRlcyA9IE1hdGgucG93KDIsIDggKiBieXRlTGVuZ3RoKSAtIDFcbiAgICBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBtYXhCeXRlcywgMClcbiAgfVxuXG4gIHZhciBpID0gYnl0ZUxlbmd0aCAtIDFcbiAgdmFyIG11bCA9IDFcbiAgdGhpc1tvZmZzZXQgKyBpXSA9IHZhbHVlICYgMHhGRlxuICB3aGlsZSAoLS1pID49IDAgJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICB0aGlzW29mZnNldCArIGldID0gKHZhbHVlIC8gbXVsKSAmIDB4RkZcbiAgfVxuXG4gIHJldHVybiBvZmZzZXQgKyBieXRlTGVuZ3RoXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50OCA9IGZ1bmN0aW9uIHdyaXRlVUludDggKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMSwgMHhmZiwgMClcbiAgaWYgKCFCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkgdmFsdWUgPSBNYXRoLmZsb29yKHZhbHVlKVxuICB0aGlzW29mZnNldF0gPSAodmFsdWUgJiAweGZmKVxuICByZXR1cm4gb2Zmc2V0ICsgMVxufVxuXG5mdW5jdGlvbiBvYmplY3RXcml0ZVVJbnQxNiAoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBsaXR0bGVFbmRpYW4pIHtcbiAgaWYgKHZhbHVlIDwgMCkgdmFsdWUgPSAweGZmZmYgKyB2YWx1ZSArIDFcbiAgZm9yICh2YXIgaSA9IDAsIGogPSBNYXRoLm1pbihidWYubGVuZ3RoIC0gb2Zmc2V0LCAyKTsgaSA8IGo7ICsraSkge1xuICAgIGJ1ZltvZmZzZXQgKyBpXSA9ICh2YWx1ZSAmICgweGZmIDw8ICg4ICogKGxpdHRsZUVuZGlhbiA/IGkgOiAxIC0gaSkpKSkgPj4+XG4gICAgICAobGl0dGxlRW5kaWFuID8gaSA6IDEgLSBpKSAqIDhcbiAgfVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludDE2TEUgPSBmdW5jdGlvbiB3cml0ZVVJbnQxNkxFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDIsIDB4ZmZmZiwgMClcbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgdGhpc1tvZmZzZXRdID0gKHZhbHVlICYgMHhmZilcbiAgICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlID4+PiA4KVxuICB9IGVsc2Uge1xuICAgIG9iamVjdFdyaXRlVUludDE2KHRoaXMsIHZhbHVlLCBvZmZzZXQsIHRydWUpXG4gIH1cbiAgcmV0dXJuIG9mZnNldCArIDJcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnQxNkJFID0gZnVuY3Rpb24gd3JpdGVVSW50MTZCRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAyLCAweGZmZmYsIDApXG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSA+Pj4gOClcbiAgICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlICYgMHhmZilcbiAgfSBlbHNlIHtcbiAgICBvYmplY3RXcml0ZVVJbnQxNih0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBmYWxzZSlcbiAgfVxuICByZXR1cm4gb2Zmc2V0ICsgMlxufVxuXG5mdW5jdGlvbiBvYmplY3RXcml0ZVVJbnQzMiAoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBsaXR0bGVFbmRpYW4pIHtcbiAgaWYgKHZhbHVlIDwgMCkgdmFsdWUgPSAweGZmZmZmZmZmICsgdmFsdWUgKyAxXG4gIGZvciAodmFyIGkgPSAwLCBqID0gTWF0aC5taW4oYnVmLmxlbmd0aCAtIG9mZnNldCwgNCk7IGkgPCBqOyArK2kpIHtcbiAgICBidWZbb2Zmc2V0ICsgaV0gPSAodmFsdWUgPj4+IChsaXR0bGVFbmRpYW4gPyBpIDogMyAtIGkpICogOCkgJiAweGZmXG4gIH1cbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnQzMkxFID0gZnVuY3Rpb24gd3JpdGVVSW50MzJMRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCA0LCAweGZmZmZmZmZmLCAwKVxuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICB0aGlzW29mZnNldCArIDNdID0gKHZhbHVlID4+PiAyNClcbiAgICB0aGlzW29mZnNldCArIDJdID0gKHZhbHVlID4+PiAxNilcbiAgICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlID4+PiA4KVxuICAgIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIH0gZWxzZSB7XG4gICAgb2JqZWN0V3JpdGVVSW50MzIodGhpcywgdmFsdWUsIG9mZnNldCwgdHJ1ZSlcbiAgfVxuICByZXR1cm4gb2Zmc2V0ICsgNFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludDMyQkUgPSBmdW5jdGlvbiB3cml0ZVVJbnQzMkJFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDQsIDB4ZmZmZmZmZmYsIDApXG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSA+Pj4gMjQpXG4gICAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gMTYpXG4gICAgdGhpc1tvZmZzZXQgKyAyXSA9ICh2YWx1ZSA+Pj4gOClcbiAgICB0aGlzW29mZnNldCArIDNdID0gKHZhbHVlICYgMHhmZilcbiAgfSBlbHNlIHtcbiAgICBvYmplY3RXcml0ZVVJbnQzMih0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBmYWxzZSlcbiAgfVxuICByZXR1cm4gb2Zmc2V0ICsgNFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlSW50TEUgPSBmdW5jdGlvbiB3cml0ZUludExFICh2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICB2YXIgbGltaXQgPSBNYXRoLnBvdygyLCA4ICogYnl0ZUxlbmd0aCAtIDEpXG5cbiAgICBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBsaW1pdCAtIDEsIC1saW1pdClcbiAgfVxuXG4gIHZhciBpID0gMFxuICB2YXIgbXVsID0gMVxuICB2YXIgc3ViID0gMFxuICB0aGlzW29mZnNldF0gPSB2YWx1ZSAmIDB4RkZcbiAgd2hpbGUgKCsraSA8IGJ5dGVMZW5ndGggJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICBpZiAodmFsdWUgPCAwICYmIHN1YiA9PT0gMCAmJiB0aGlzW29mZnNldCArIGkgLSAxXSAhPT0gMCkge1xuICAgICAgc3ViID0gMVxuICAgIH1cbiAgICB0aGlzW29mZnNldCArIGldID0gKCh2YWx1ZSAvIG11bCkgPj4gMCkgLSBzdWIgJiAweEZGXG4gIH1cblxuICByZXR1cm4gb2Zmc2V0ICsgYnl0ZUxlbmd0aFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlSW50QkUgPSBmdW5jdGlvbiB3cml0ZUludEJFICh2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICB2YXIgbGltaXQgPSBNYXRoLnBvdygyLCA4ICogYnl0ZUxlbmd0aCAtIDEpXG5cbiAgICBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBsaW1pdCAtIDEsIC1saW1pdClcbiAgfVxuXG4gIHZhciBpID0gYnl0ZUxlbmd0aCAtIDFcbiAgdmFyIG11bCA9IDFcbiAgdmFyIHN1YiA9IDBcbiAgdGhpc1tvZmZzZXQgKyBpXSA9IHZhbHVlICYgMHhGRlxuICB3aGlsZSAoLS1pID49IDAgJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICBpZiAodmFsdWUgPCAwICYmIHN1YiA9PT0gMCAmJiB0aGlzW29mZnNldCArIGkgKyAxXSAhPT0gMCkge1xuICAgICAgc3ViID0gMVxuICAgIH1cbiAgICB0aGlzW29mZnNldCArIGldID0gKCh2YWx1ZSAvIG11bCkgPj4gMCkgLSBzdWIgJiAweEZGXG4gIH1cblxuICByZXR1cm4gb2Zmc2V0ICsgYnl0ZUxlbmd0aFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlSW50OCA9IGZ1bmN0aW9uIHdyaXRlSW50OCAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAxLCAweDdmLCAtMHg4MClcbiAgaWYgKCFCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkgdmFsdWUgPSBNYXRoLmZsb29yKHZhbHVlKVxuICBpZiAodmFsdWUgPCAwKSB2YWx1ZSA9IDB4ZmYgKyB2YWx1ZSArIDFcbiAgdGhpc1tvZmZzZXRdID0gKHZhbHVlICYgMHhmZilcbiAgcmV0dXJuIG9mZnNldCArIDFcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludDE2TEUgPSBmdW5jdGlvbiB3cml0ZUludDE2TEUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMiwgMHg3ZmZmLCAtMHg4MDAwKVxuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICB0aGlzW29mZnNldF0gPSAodmFsdWUgJiAweGZmKVxuICAgIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgPj4+IDgpXG4gIH0gZWxzZSB7XG4gICAgb2JqZWN0V3JpdGVVSW50MTYodGhpcywgdmFsdWUsIG9mZnNldCwgdHJ1ZSlcbiAgfVxuICByZXR1cm4gb2Zmc2V0ICsgMlxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlSW50MTZCRSA9IGZ1bmN0aW9uIHdyaXRlSW50MTZCRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAyLCAweDdmZmYsIC0weDgwMDApXG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSA+Pj4gOClcbiAgICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlICYgMHhmZilcbiAgfSBlbHNlIHtcbiAgICBvYmplY3RXcml0ZVVJbnQxNih0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBmYWxzZSlcbiAgfVxuICByZXR1cm4gb2Zmc2V0ICsgMlxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlSW50MzJMRSA9IGZ1bmN0aW9uIHdyaXRlSW50MzJMRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCA0LCAweDdmZmZmZmZmLCAtMHg4MDAwMDAwMClcbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgdGhpc1tvZmZzZXRdID0gKHZhbHVlICYgMHhmZilcbiAgICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlID4+PiA4KVxuICAgIHRoaXNbb2Zmc2V0ICsgMl0gPSAodmFsdWUgPj4+IDE2KVxuICAgIHRoaXNbb2Zmc2V0ICsgM10gPSAodmFsdWUgPj4+IDI0KVxuICB9IGVsc2Uge1xuICAgIG9iamVjdFdyaXRlVUludDMyKHRoaXMsIHZhbHVlLCBvZmZzZXQsIHRydWUpXG4gIH1cbiAgcmV0dXJuIG9mZnNldCArIDRcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludDMyQkUgPSBmdW5jdGlvbiB3cml0ZUludDMyQkUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgNCwgMHg3ZmZmZmZmZiwgLTB4ODAwMDAwMDApXG4gIGlmICh2YWx1ZSA8IDApIHZhbHVlID0gMHhmZmZmZmZmZiArIHZhbHVlICsgMVxuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICB0aGlzW29mZnNldF0gPSAodmFsdWUgPj4+IDI0KVxuICAgIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgPj4+IDE2KVxuICAgIHRoaXNbb2Zmc2V0ICsgMl0gPSAodmFsdWUgPj4+IDgpXG4gICAgdGhpc1tvZmZzZXQgKyAzXSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIH0gZWxzZSB7XG4gICAgb2JqZWN0V3JpdGVVSW50MzIodGhpcywgdmFsdWUsIG9mZnNldCwgZmFsc2UpXG4gIH1cbiAgcmV0dXJuIG9mZnNldCArIDRcbn1cblxuZnVuY3Rpb24gY2hlY2tJRUVFNzU0IChidWYsIHZhbHVlLCBvZmZzZXQsIGV4dCwgbWF4LCBtaW4pIHtcbiAgaWYgKG9mZnNldCArIGV4dCA+IGJ1Zi5sZW5ndGgpIHRocm93IG5ldyBSYW5nZUVycm9yKCdJbmRleCBvdXQgb2YgcmFuZ2UnKVxuICBpZiAob2Zmc2V0IDwgMCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0luZGV4IG91dCBvZiByYW5nZScpXG59XG5cbmZ1bmN0aW9uIHdyaXRlRmxvYXQgKGJ1ZiwgdmFsdWUsIG9mZnNldCwgbGl0dGxlRW5kaWFuLCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgY2hlY2tJRUVFNzU0KGJ1ZiwgdmFsdWUsIG9mZnNldCwgNCwgMy40MDI4MjM0NjYzODUyODg2ZSszOCwgLTMuNDAyODIzNDY2Mzg1Mjg4NmUrMzgpXG4gIH1cbiAgaWVlZTc1NC53cml0ZShidWYsIHZhbHVlLCBvZmZzZXQsIGxpdHRsZUVuZGlhbiwgMjMsIDQpXG4gIHJldHVybiBvZmZzZXQgKyA0XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVGbG9hdExFID0gZnVuY3Rpb24gd3JpdGVGbG9hdExFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICByZXR1cm4gd3JpdGVGbG9hdCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCB0cnVlLCBub0Fzc2VydClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUZsb2F0QkUgPSBmdW5jdGlvbiB3cml0ZUZsb2F0QkUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHJldHVybiB3cml0ZUZsb2F0KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGZhbHNlLCBub0Fzc2VydClcbn1cblxuZnVuY3Rpb24gd3JpdGVEb3VibGUgKGJ1ZiwgdmFsdWUsIG9mZnNldCwgbGl0dGxlRW5kaWFuLCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgY2hlY2tJRUVFNzU0KGJ1ZiwgdmFsdWUsIG9mZnNldCwgOCwgMS43OTc2OTMxMzQ4NjIzMTU3RSszMDgsIC0xLjc5NzY5MzEzNDg2MjMxNTdFKzMwOClcbiAgfVxuICBpZWVlNzU0LndyaXRlKGJ1ZiwgdmFsdWUsIG9mZnNldCwgbGl0dGxlRW5kaWFuLCA1MiwgOClcbiAgcmV0dXJuIG9mZnNldCArIDhcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZURvdWJsZUxFID0gZnVuY3Rpb24gd3JpdGVEb3VibGVMRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgcmV0dXJuIHdyaXRlRG91YmxlKHRoaXMsIHZhbHVlLCBvZmZzZXQsIHRydWUsIG5vQXNzZXJ0KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlRG91YmxlQkUgPSBmdW5jdGlvbiB3cml0ZURvdWJsZUJFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICByZXR1cm4gd3JpdGVEb3VibGUodGhpcywgdmFsdWUsIG9mZnNldCwgZmFsc2UsIG5vQXNzZXJ0KVxufVxuXG4vLyBjb3B5KHRhcmdldEJ1ZmZlciwgdGFyZ2V0U3RhcnQ9MCwgc291cmNlU3RhcnQ9MCwgc291cmNlRW5kPWJ1ZmZlci5sZW5ndGgpXG5CdWZmZXIucHJvdG90eXBlLmNvcHkgPSBmdW5jdGlvbiBjb3B5ICh0YXJnZXQsIHRhcmdldFN0YXJ0LCBzdGFydCwgZW5kKSB7XG4gIGlmICghc3RhcnQpIHN0YXJ0ID0gMFxuICBpZiAoIWVuZCAmJiBlbmQgIT09IDApIGVuZCA9IHRoaXMubGVuZ3RoXG4gIGlmICh0YXJnZXRTdGFydCA+PSB0YXJnZXQubGVuZ3RoKSB0YXJnZXRTdGFydCA9IHRhcmdldC5sZW5ndGhcbiAgaWYgKCF0YXJnZXRTdGFydCkgdGFyZ2V0U3RhcnQgPSAwXG4gIGlmIChlbmQgPiAwICYmIGVuZCA8IHN0YXJ0KSBlbmQgPSBzdGFydFxuXG4gIC8vIENvcHkgMCBieXRlczsgd2UncmUgZG9uZVxuICBpZiAoZW5kID09PSBzdGFydCkgcmV0dXJuIDBcbiAgaWYgKHRhcmdldC5sZW5ndGggPT09IDAgfHwgdGhpcy5sZW5ndGggPT09IDApIHJldHVybiAwXG5cbiAgLy8gRmF0YWwgZXJyb3IgY29uZGl0aW9uc1xuICBpZiAodGFyZ2V0U3RhcnQgPCAwKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ3RhcmdldFN0YXJ0IG91dCBvZiBib3VuZHMnKVxuICB9XG4gIGlmIChzdGFydCA8IDAgfHwgc3RhcnQgPj0gdGhpcy5sZW5ndGgpIHRocm93IG5ldyBSYW5nZUVycm9yKCdzb3VyY2VTdGFydCBvdXQgb2YgYm91bmRzJylcbiAgaWYgKGVuZCA8IDApIHRocm93IG5ldyBSYW5nZUVycm9yKCdzb3VyY2VFbmQgb3V0IG9mIGJvdW5kcycpXG5cbiAgLy8gQXJlIHdlIG9vYj9cbiAgaWYgKGVuZCA+IHRoaXMubGVuZ3RoKSBlbmQgPSB0aGlzLmxlbmd0aFxuICBpZiAodGFyZ2V0Lmxlbmd0aCAtIHRhcmdldFN0YXJ0IDwgZW5kIC0gc3RhcnQpIHtcbiAgICBlbmQgPSB0YXJnZXQubGVuZ3RoIC0gdGFyZ2V0U3RhcnQgKyBzdGFydFxuICB9XG5cbiAgdmFyIGxlbiA9IGVuZCAtIHN0YXJ0XG4gIHZhciBpXG5cbiAgaWYgKHRoaXMgPT09IHRhcmdldCAmJiBzdGFydCA8IHRhcmdldFN0YXJ0ICYmIHRhcmdldFN0YXJ0IDwgZW5kKSB7XG4gICAgLy8gZGVzY2VuZGluZyBjb3B5IGZyb20gZW5kXG4gICAgZm9yIChpID0gbGVuIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgIHRhcmdldFtpICsgdGFyZ2V0U3RhcnRdID0gdGhpc1tpICsgc3RhcnRdXG4gICAgfVxuICB9IGVsc2UgaWYgKGxlbiA8IDEwMDAgfHwgIUJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgLy8gYXNjZW5kaW5nIGNvcHkgZnJvbSBzdGFydFxuICAgIGZvciAoaSA9IDA7IGkgPCBsZW47ICsraSkge1xuICAgICAgdGFyZ2V0W2kgKyB0YXJnZXRTdGFydF0gPSB0aGlzW2kgKyBzdGFydF1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgVWludDhBcnJheS5wcm90b3R5cGUuc2V0LmNhbGwoXG4gICAgICB0YXJnZXQsXG4gICAgICB0aGlzLnN1YmFycmF5KHN0YXJ0LCBzdGFydCArIGxlbiksXG4gICAgICB0YXJnZXRTdGFydFxuICAgIClcbiAgfVxuXG4gIHJldHVybiBsZW5cbn1cblxuLy8gVXNhZ2U6XG4vLyAgICBidWZmZXIuZmlsbChudW1iZXJbLCBvZmZzZXRbLCBlbmRdXSlcbi8vICAgIGJ1ZmZlci5maWxsKGJ1ZmZlclssIG9mZnNldFssIGVuZF1dKVxuLy8gICAgYnVmZmVyLmZpbGwoc3RyaW5nWywgb2Zmc2V0WywgZW5kXV1bLCBlbmNvZGluZ10pXG5CdWZmZXIucHJvdG90eXBlLmZpbGwgPSBmdW5jdGlvbiBmaWxsICh2YWwsIHN0YXJ0LCBlbmQsIGVuY29kaW5nKSB7XG4gIC8vIEhhbmRsZSBzdHJpbmcgY2FzZXM6XG4gIGlmICh0eXBlb2YgdmFsID09PSAnc3RyaW5nJykge1xuICAgIGlmICh0eXBlb2Ygc3RhcnQgPT09ICdzdHJpbmcnKSB7XG4gICAgICBlbmNvZGluZyA9IHN0YXJ0XG4gICAgICBzdGFydCA9IDBcbiAgICAgIGVuZCA9IHRoaXMubGVuZ3RoXG4gICAgfSBlbHNlIGlmICh0eXBlb2YgZW5kID09PSAnc3RyaW5nJykge1xuICAgICAgZW5jb2RpbmcgPSBlbmRcbiAgICAgIGVuZCA9IHRoaXMubGVuZ3RoXG4gICAgfVxuICAgIGlmICh2YWwubGVuZ3RoID09PSAxKSB7XG4gICAgICB2YXIgY29kZSA9IHZhbC5jaGFyQ29kZUF0KDApXG4gICAgICBpZiAoY29kZSA8IDI1Nikge1xuICAgICAgICB2YWwgPSBjb2RlXG4gICAgICB9XG4gICAgfVxuICAgIGlmIChlbmNvZGluZyAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiBlbmNvZGluZyAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2VuY29kaW5nIG11c3QgYmUgYSBzdHJpbmcnKVxuICAgIH1cbiAgICBpZiAodHlwZW9mIGVuY29kaW5nID09PSAnc3RyaW5nJyAmJiAhQnVmZmVyLmlzRW5jb2RpbmcoZW5jb2RpbmcpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbmtub3duIGVuY29kaW5nOiAnICsgZW5jb2RpbmcpXG4gICAgfVxuICB9IGVsc2UgaWYgKHR5cGVvZiB2YWwgPT09ICdudW1iZXInKSB7XG4gICAgdmFsID0gdmFsICYgMjU1XG4gIH1cblxuICAvLyBJbnZhbGlkIHJhbmdlcyBhcmUgbm90IHNldCB0byBhIGRlZmF1bHQsIHNvIGNhbiByYW5nZSBjaGVjayBlYXJseS5cbiAgaWYgKHN0YXJ0IDwgMCB8fCB0aGlzLmxlbmd0aCA8IHN0YXJ0IHx8IHRoaXMubGVuZ3RoIDwgZW5kKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ091dCBvZiByYW5nZSBpbmRleCcpXG4gIH1cblxuICBpZiAoZW5kIDw9IHN0YXJ0KSB7XG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIHN0YXJ0ID0gc3RhcnQgPj4+IDBcbiAgZW5kID0gZW5kID09PSB1bmRlZmluZWQgPyB0aGlzLmxlbmd0aCA6IGVuZCA+Pj4gMFxuXG4gIGlmICghdmFsKSB2YWwgPSAwXG5cbiAgdmFyIGlcbiAgaWYgKHR5cGVvZiB2YWwgPT09ICdudW1iZXInKSB7XG4gICAgZm9yIChpID0gc3RhcnQ7IGkgPCBlbmQ7ICsraSkge1xuICAgICAgdGhpc1tpXSA9IHZhbFxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB2YXIgYnl0ZXMgPSBCdWZmZXIuaXNCdWZmZXIodmFsKVxuICAgICAgPyB2YWxcbiAgICAgIDogdXRmOFRvQnl0ZXMobmV3IEJ1ZmZlcih2YWwsIGVuY29kaW5nKS50b1N0cmluZygpKVxuICAgIHZhciBsZW4gPSBieXRlcy5sZW5ndGhcbiAgICBmb3IgKGkgPSAwOyBpIDwgZW5kIC0gc3RhcnQ7ICsraSkge1xuICAgICAgdGhpc1tpICsgc3RhcnRdID0gYnl0ZXNbaSAlIGxlbl1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGhpc1xufVxuXG4vLyBIRUxQRVIgRlVOQ1RJT05TXG4vLyA9PT09PT09PT09PT09PT09XG5cbnZhciBJTlZBTElEX0JBU0U2NF9SRSA9IC9bXitcXC8wLTlBLVphLXotX10vZ1xuXG5mdW5jdGlvbiBiYXNlNjRjbGVhbiAoc3RyKSB7XG4gIC8vIE5vZGUgc3RyaXBzIG91dCBpbnZhbGlkIGNoYXJhY3RlcnMgbGlrZSBcXG4gYW5kIFxcdCBmcm9tIHRoZSBzdHJpbmcsIGJhc2U2NC1qcyBkb2VzIG5vdFxuICBzdHIgPSBzdHJpbmd0cmltKHN0cikucmVwbGFjZShJTlZBTElEX0JBU0U2NF9SRSwgJycpXG4gIC8vIE5vZGUgY29udmVydHMgc3RyaW5ncyB3aXRoIGxlbmd0aCA8IDIgdG8gJydcbiAgaWYgKHN0ci5sZW5ndGggPCAyKSByZXR1cm4gJydcbiAgLy8gTm9kZSBhbGxvd3MgZm9yIG5vbi1wYWRkZWQgYmFzZTY0IHN0cmluZ3MgKG1pc3NpbmcgdHJhaWxpbmcgPT09KSwgYmFzZTY0LWpzIGRvZXMgbm90XG4gIHdoaWxlIChzdHIubGVuZ3RoICUgNCAhPT0gMCkge1xuICAgIHN0ciA9IHN0ciArICc9J1xuICB9XG4gIHJldHVybiBzdHJcbn1cblxuZnVuY3Rpb24gc3RyaW5ndHJpbSAoc3RyKSB7XG4gIGlmIChzdHIudHJpbSkgcmV0dXJuIHN0ci50cmltKClcbiAgcmV0dXJuIHN0ci5yZXBsYWNlKC9eXFxzK3xcXHMrJC9nLCAnJylcbn1cblxuZnVuY3Rpb24gdG9IZXggKG4pIHtcbiAgaWYgKG4gPCAxNikgcmV0dXJuICcwJyArIG4udG9TdHJpbmcoMTYpXG4gIHJldHVybiBuLnRvU3RyaW5nKDE2KVxufVxuXG5mdW5jdGlvbiB1dGY4VG9CeXRlcyAoc3RyaW5nLCB1bml0cykge1xuICB1bml0cyA9IHVuaXRzIHx8IEluZmluaXR5XG4gIHZhciBjb2RlUG9pbnRcbiAgdmFyIGxlbmd0aCA9IHN0cmluZy5sZW5ndGhcbiAgdmFyIGxlYWRTdXJyb2dhdGUgPSBudWxsXG4gIHZhciBieXRlcyA9IFtdXG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkge1xuICAgIGNvZGVQb2ludCA9IHN0cmluZy5jaGFyQ29kZUF0KGkpXG5cbiAgICAvLyBpcyBzdXJyb2dhdGUgY29tcG9uZW50XG4gICAgaWYgKGNvZGVQb2ludCA+IDB4RDdGRiAmJiBjb2RlUG9pbnQgPCAweEUwMDApIHtcbiAgICAgIC8vIGxhc3QgY2hhciB3YXMgYSBsZWFkXG4gICAgICBpZiAoIWxlYWRTdXJyb2dhdGUpIHtcbiAgICAgICAgLy8gbm8gbGVhZCB5ZXRcbiAgICAgICAgaWYgKGNvZGVQb2ludCA+IDB4REJGRikge1xuICAgICAgICAgIC8vIHVuZXhwZWN0ZWQgdHJhaWxcbiAgICAgICAgICBpZiAoKHVuaXRzIC09IDMpID4gLTEpIGJ5dGVzLnB1c2goMHhFRiwgMHhCRiwgMHhCRClcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9IGVsc2UgaWYgKGkgKyAxID09PSBsZW5ndGgpIHtcbiAgICAgICAgICAvLyB1bnBhaXJlZCBsZWFkXG4gICAgICAgICAgaWYgKCh1bml0cyAtPSAzKSA+IC0xKSBieXRlcy5wdXNoKDB4RUYsIDB4QkYsIDB4QkQpXG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHZhbGlkIGxlYWRcbiAgICAgICAgbGVhZFN1cnJvZ2F0ZSA9IGNvZGVQb2ludFxuXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIC8vIDIgbGVhZHMgaW4gYSByb3dcbiAgICAgIGlmIChjb2RlUG9pbnQgPCAweERDMDApIHtcbiAgICAgICAgaWYgKCh1bml0cyAtPSAzKSA+IC0xKSBieXRlcy5wdXNoKDB4RUYsIDB4QkYsIDB4QkQpXG4gICAgICAgIGxlYWRTdXJyb2dhdGUgPSBjb2RlUG9pbnRcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgLy8gdmFsaWQgc3Vycm9nYXRlIHBhaXJcbiAgICAgIGNvZGVQb2ludCA9IChsZWFkU3Vycm9nYXRlIC0gMHhEODAwIDw8IDEwIHwgY29kZVBvaW50IC0gMHhEQzAwKSArIDB4MTAwMDBcbiAgICB9IGVsc2UgaWYgKGxlYWRTdXJyb2dhdGUpIHtcbiAgICAgIC8vIHZhbGlkIGJtcCBjaGFyLCBidXQgbGFzdCBjaGFyIHdhcyBhIGxlYWRcbiAgICAgIGlmICgodW5pdHMgLT0gMykgPiAtMSkgYnl0ZXMucHVzaCgweEVGLCAweEJGLCAweEJEKVxuICAgIH1cblxuICAgIGxlYWRTdXJyb2dhdGUgPSBudWxsXG5cbiAgICAvLyBlbmNvZGUgdXRmOFxuICAgIGlmIChjb2RlUG9pbnQgPCAweDgwKSB7XG4gICAgICBpZiAoKHVuaXRzIC09IDEpIDwgMCkgYnJlYWtcbiAgICAgIGJ5dGVzLnB1c2goY29kZVBvaW50KVxuICAgIH0gZWxzZSBpZiAoY29kZVBvaW50IDwgMHg4MDApIHtcbiAgICAgIGlmICgodW5pdHMgLT0gMikgPCAwKSBicmVha1xuICAgICAgYnl0ZXMucHVzaChcbiAgICAgICAgY29kZVBvaW50ID4+IDB4NiB8IDB4QzAsXG4gICAgICAgIGNvZGVQb2ludCAmIDB4M0YgfCAweDgwXG4gICAgICApXG4gICAgfSBlbHNlIGlmIChjb2RlUG9pbnQgPCAweDEwMDAwKSB7XG4gICAgICBpZiAoKHVuaXRzIC09IDMpIDwgMCkgYnJlYWtcbiAgICAgIGJ5dGVzLnB1c2goXG4gICAgICAgIGNvZGVQb2ludCA+PiAweEMgfCAweEUwLFxuICAgICAgICBjb2RlUG9pbnQgPj4gMHg2ICYgMHgzRiB8IDB4ODAsXG4gICAgICAgIGNvZGVQb2ludCAmIDB4M0YgfCAweDgwXG4gICAgICApXG4gICAgfSBlbHNlIGlmIChjb2RlUG9pbnQgPCAweDExMDAwMCkge1xuICAgICAgaWYgKCh1bml0cyAtPSA0KSA8IDApIGJyZWFrXG4gICAgICBieXRlcy5wdXNoKFxuICAgICAgICBjb2RlUG9pbnQgPj4gMHgxMiB8IDB4RjAsXG4gICAgICAgIGNvZGVQb2ludCA+PiAweEMgJiAweDNGIHwgMHg4MCxcbiAgICAgICAgY29kZVBvaW50ID4+IDB4NiAmIDB4M0YgfCAweDgwLFxuICAgICAgICBjb2RlUG9pbnQgJiAweDNGIHwgMHg4MFxuICAgICAgKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgY29kZSBwb2ludCcpXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGJ5dGVzXG59XG5cbmZ1bmN0aW9uIGFzY2lpVG9CeXRlcyAoc3RyKSB7XG4gIHZhciBieXRlQXJyYXkgPSBbXVxuICBmb3IgKHZhciBpID0gMDsgaSA8IHN0ci5sZW5ndGg7ICsraSkge1xuICAgIC8vIE5vZGUncyBjb2RlIHNlZW1zIHRvIGJlIGRvaW5nIHRoaXMgYW5kIG5vdCAmIDB4N0YuLlxuICAgIGJ5dGVBcnJheS5wdXNoKHN0ci5jaGFyQ29kZUF0KGkpICYgMHhGRilcbiAgfVxuICByZXR1cm4gYnl0ZUFycmF5XG59XG5cbmZ1bmN0aW9uIHV0ZjE2bGVUb0J5dGVzIChzdHIsIHVuaXRzKSB7XG4gIHZhciBjLCBoaSwgbG9cbiAgdmFyIGJ5dGVBcnJheSA9IFtdXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgKytpKSB7XG4gICAgaWYgKCh1bml0cyAtPSAyKSA8IDApIGJyZWFrXG5cbiAgICBjID0gc3RyLmNoYXJDb2RlQXQoaSlcbiAgICBoaSA9IGMgPj4gOFxuICAgIGxvID0gYyAlIDI1NlxuICAgIGJ5dGVBcnJheS5wdXNoKGxvKVxuICAgIGJ5dGVBcnJheS5wdXNoKGhpKVxuICB9XG5cbiAgcmV0dXJuIGJ5dGVBcnJheVxufVxuXG5mdW5jdGlvbiBiYXNlNjRUb0J5dGVzIChzdHIpIHtcbiAgcmV0dXJuIGJhc2U2NC50b0J5dGVBcnJheShiYXNlNjRjbGVhbihzdHIpKVxufVxuXG5mdW5jdGlvbiBibGl0QnVmZmVyIChzcmMsIGRzdCwgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkge1xuICAgIGlmICgoaSArIG9mZnNldCA+PSBkc3QubGVuZ3RoKSB8fCAoaSA+PSBzcmMubGVuZ3RoKSkgYnJlYWtcbiAgICBkc3RbaSArIG9mZnNldF0gPSBzcmNbaV1cbiAgfVxuICByZXR1cm4gaVxufVxuXG5mdW5jdGlvbiBpc25hbiAodmFsKSB7XG4gIHJldHVybiB2YWwgIT09IHZhbCAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXNlbGYtY29tcGFyZVxufVxuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9tb2R1bGVzL19jb3JlJyk7XG52YXIgJEpTT04gPSBjb3JlLkpTT04gfHwgKGNvcmUuSlNPTiA9IHsgc3RyaW5naWZ5OiBKU09OLnN0cmluZ2lmeSB9KTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gc3RyaW5naWZ5KGl0KSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgcmV0dXJuICRKU09OLnN0cmluZ2lmeS5hcHBseSgkSlNPTiwgYXJndW1lbnRzKTtcbn07XG4iLCJyZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzNi5vYmplY3Qua2V5cycpO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi8uLi9tb2R1bGVzL19jb3JlJykuT2JqZWN0LmtleXM7XG4iLCJyZXF1aXJlKCcuLi9tb2R1bGVzL2VzNi5vYmplY3QudG8tc3RyaW5nJyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzNi5zdHJpbmcuaXRlcmF0b3InKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvd2ViLmRvbS5pdGVyYWJsZScpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lczYucHJvbWlzZScpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lczcucHJvbWlzZS5maW5hbGx5Jyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzNy5wcm9taXNlLnRyeScpO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi9tb2R1bGVzL19jb3JlJykuUHJvbWlzZTtcbiIsInJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXM2LnN5bWJvbCcpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lczYub2JqZWN0LnRvLXN0cmluZycpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lczcuc3ltYm9sLmFzeW5jLWl0ZXJhdG9yJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzNy5zeW1ib2wub2JzZXJ2YWJsZScpO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi8uLi9tb2R1bGVzL19jb3JlJykuU3ltYm9sO1xuIiwicmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lczYuc3RyaW5nLml0ZXJhdG9yJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL3dlYi5kb20uaXRlcmFibGUnKTtcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9fd2tzLWV4dCcpLmYoJ2l0ZXJhdG9yJyk7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAodHlwZW9mIGl0ICE9ICdmdW5jdGlvbicpIHRocm93IFR5cGVFcnJvcihpdCArICcgaXMgbm90IGEgZnVuY3Rpb24hJyk7XG4gIHJldHVybiBpdDtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCBDb25zdHJ1Y3RvciwgbmFtZSwgZm9yYmlkZGVuRmllbGQpIHtcbiAgaWYgKCEoaXQgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikgfHwgKGZvcmJpZGRlbkZpZWxkICE9PSB1bmRlZmluZWQgJiYgZm9yYmlkZGVuRmllbGQgaW4gaXQpKSB7XG4gICAgdGhyb3cgVHlwZUVycm9yKG5hbWUgKyAnOiBpbmNvcnJlY3QgaW52b2NhdGlvbiEnKTtcbiAgfSByZXR1cm4gaXQ7XG59O1xuIiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoIWlzT2JqZWN0KGl0KSkgdGhyb3cgVHlwZUVycm9yKGl0ICsgJyBpcyBub3QgYW4gb2JqZWN0IScpO1xuICByZXR1cm4gaXQ7XG59O1xuIiwiLy8gZmFsc2UgLT4gQXJyYXkjaW5kZXhPZlxuLy8gdHJ1ZSAgLT4gQXJyYXkjaW5jbHVkZXNcbnZhciB0b0lPYmplY3QgPSByZXF1aXJlKCcuL190by1pb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciB0b0Fic29sdXRlSW5kZXggPSByZXF1aXJlKCcuL190by1hYnNvbHV0ZS1pbmRleCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoSVNfSU5DTFVERVMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgkdGhpcywgZWwsIGZyb21JbmRleCkge1xuICAgIHZhciBPID0gdG9JT2JqZWN0KCR0aGlzKTtcbiAgICB2YXIgbGVuZ3RoID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICAgIHZhciBpbmRleCA9IHRvQWJzb2x1dGVJbmRleChmcm9tSW5kZXgsIGxlbmd0aCk7XG4gICAgdmFyIHZhbHVlO1xuICAgIC8vIEFycmF5I2luY2x1ZGVzIHVzZXMgU2FtZVZhbHVlWmVybyBlcXVhbGl0eSBhbGdvcml0aG1cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgaWYgKElTX0lOQ0xVREVTICYmIGVsICE9IGVsKSB3aGlsZSAobGVuZ3RoID4gaW5kZXgpIHtcbiAgICAgIHZhbHVlID0gT1tpbmRleCsrXTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICAgIGlmICh2YWx1ZSAhPSB2YWx1ZSkgcmV0dXJuIHRydWU7XG4gICAgLy8gQXJyYXkjaW5kZXhPZiBpZ25vcmVzIGhvbGVzLCBBcnJheSNpbmNsdWRlcyAtIG5vdFxuICAgIH0gZWxzZSBmb3IgKDtsZW5ndGggPiBpbmRleDsgaW5kZXgrKykgaWYgKElTX0lOQ0xVREVTIHx8IGluZGV4IGluIE8pIHtcbiAgICAgIGlmIChPW2luZGV4XSA9PT0gZWwpIHJldHVybiBJU19JTkNMVURFUyB8fCBpbmRleCB8fCAwO1xuICAgIH0gcmV0dXJuICFJU19JTkNMVURFUyAmJiAtMTtcbiAgfTtcbn07XG4iLCIvLyBnZXR0aW5nIHRhZyBmcm9tIDE5LjEuMy42IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcoKVxudmFyIGNvZiA9IHJlcXVpcmUoJy4vX2NvZicpO1xudmFyIFRBRyA9IHJlcXVpcmUoJy4vX3drcycpKCd0b1N0cmluZ1RhZycpO1xuLy8gRVMzIHdyb25nIGhlcmVcbnZhciBBUkcgPSBjb2YoZnVuY3Rpb24gKCkgeyByZXR1cm4gYXJndW1lbnRzOyB9KCkpID09ICdBcmd1bWVudHMnO1xuXG4vLyBmYWxsYmFjayBmb3IgSUUxMSBTY3JpcHQgQWNjZXNzIERlbmllZCBlcnJvclxudmFyIHRyeUdldCA9IGZ1bmN0aW9uIChpdCwga2V5KSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGl0W2tleV07XG4gIH0gY2F0Y2ggKGUpIHsgLyogZW1wdHkgKi8gfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIE8sIFQsIEI7XG4gIHJldHVybiBpdCA9PT0gdW5kZWZpbmVkID8gJ1VuZGVmaW5lZCcgOiBpdCA9PT0gbnVsbCA/ICdOdWxsJ1xuICAgIC8vIEBAdG9TdHJpbmdUYWcgY2FzZVxuICAgIDogdHlwZW9mIChUID0gdHJ5R2V0KE8gPSBPYmplY3QoaXQpLCBUQUcpKSA9PSAnc3RyaW5nJyA/IFRcbiAgICAvLyBidWlsdGluVGFnIGNhc2VcbiAgICA6IEFSRyA/IGNvZihPKVxuICAgIC8vIEVTMyBhcmd1bWVudHMgZmFsbGJhY2tcbiAgICA6IChCID0gY29mKE8pKSA9PSAnT2JqZWN0JyAmJiB0eXBlb2YgTy5jYWxsZWUgPT0gJ2Z1bmN0aW9uJyA/ICdBcmd1bWVudHMnIDogQjtcbn07XG4iLCJ2YXIgdG9TdHJpbmcgPSB7fS50b1N0cmluZztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwoaXQpLnNsaWNlKDgsIC0xKTtcbn07XG4iLCJ2YXIgY29yZSA9IG1vZHVsZS5leHBvcnRzID0geyB2ZXJzaW9uOiAnMi42LjExJyB9O1xuaWYgKHR5cGVvZiBfX2UgPT0gJ251bWJlcicpIF9fZSA9IGNvcmU7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5kZWZcbiIsIi8vIG9wdGlvbmFsIC8gc2ltcGxlIGNvbnRleHQgYmluZGluZ1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGZuLCB0aGF0LCBsZW5ndGgpIHtcbiAgYUZ1bmN0aW9uKGZuKTtcbiAgaWYgKHRoYXQgPT09IHVuZGVmaW5lZCkgcmV0dXJuIGZuO1xuICBzd2l0Y2ggKGxlbmd0aCkge1xuICAgIGNhc2UgMTogcmV0dXJuIGZ1bmN0aW9uIChhKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhKTtcbiAgICB9O1xuICAgIGNhc2UgMjogcmV0dXJuIGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhLCBiKTtcbiAgICB9O1xuICAgIGNhc2UgMzogcmV0dXJuIGZ1bmN0aW9uIChhLCBiLCBjKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhLCBiLCBjKTtcbiAgICB9O1xuICB9XG4gIHJldHVybiBmdW5jdGlvbiAoLyogLi4uYXJncyAqLykge1xuICAgIHJldHVybiBmbi5hcHBseSh0aGF0LCBhcmd1bWVudHMpO1xuICB9O1xufTtcbiIsIi8vIDcuMi4xIFJlcXVpcmVPYmplY3RDb2VyY2libGUoYXJndW1lbnQpXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoaXQgPT0gdW5kZWZpbmVkKSB0aHJvdyBUeXBlRXJyb3IoXCJDYW4ndCBjYWxsIG1ldGhvZCBvbiAgXCIgKyBpdCk7XG4gIHJldHVybiBpdDtcbn07XG4iLCIvLyBUaGFuaydzIElFOCBmb3IgaGlzIGZ1bm55IGRlZmluZVByb3BlcnR5XG5tb2R1bGUuZXhwb3J0cyA9ICFyZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwgJ2EnLCB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfSB9KS5hICE9IDc7XG59KTtcbiIsInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIGRvY3VtZW50ID0gcmVxdWlyZSgnLi9fZ2xvYmFsJykuZG9jdW1lbnQ7XG4vLyB0eXBlb2YgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCBpcyAnb2JqZWN0JyBpbiBvbGQgSUVcbnZhciBpcyA9IGlzT2JqZWN0KGRvY3VtZW50KSAmJiBpc09iamVjdChkb2N1bWVudC5jcmVhdGVFbGVtZW50KTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpcyA/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+PSA4OyBidWZmZXJbb2Zmc2V0ICsgaV0gPSBtICYgMHhmZiwgaSArPSBkLCBtIC89IDI1NiwgbUxlbiAtPSA4KSB7fVxuXG4gIGUgPSAoZSA8PCBtTGVuKSB8IG1cbiAgZUxlbiArPSBtTGVuXG4gIGZvciAoOyBlTGVuID4gMDsgYnVmZmVyW29mZnNldCArIGldID0gZSAmIDB4ZmYsIGkgKz0gZCwgZSAvPSAyNTYsIGVMZW4gLT0gOCkge31cblxuICBidWZmZXJbb2Zmc2V0ICsgaSAtIGRdIHw9IHMgKiAxMjhcbn1cbiIsIi8qIVxuICogRGV0ZXJtaW5lIGlmIGFuIG9iamVjdCBpcyBhIEJ1ZmZlclxuICpcbiAqIEBhdXRob3IgICBGZXJvc3MgQWJvdWtoYWRpamVoIDxodHRwczovL2Zlcm9zcy5vcmc+XG4gKiBAbGljZW5zZSAgTUlUXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc0J1ZmZlciAob2JqKSB7XG4gIHJldHVybiBvYmogIT0gbnVsbCAmJiBvYmouY29uc3RydWN0b3IgIT0gbnVsbCAmJlxuICAgIHR5cGVvZiBvYmouY29uc3RydWN0b3IuaXNCdWZmZXIgPT09ICdmdW5jdGlvbicgJiYgb2JqLmNvbnN0cnVjdG9yLmlzQnVmZmVyKG9iailcbn1cbiIsInZhciB0b1N0cmluZyA9IHt9LnRvU3RyaW5nO1xuXG5tb2R1bGUuZXhwb3J0cyA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gKGFycikge1xuICByZXR1cm4gdG9TdHJpbmcuY2FsbChhcnIpID09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuIiwiLyohXG4gKiBqUXVlcnkgSmF2YVNjcmlwdCBMaWJyYXJ5IHYzLjQuMVxuICogaHR0cHM6Ly9qcXVlcnkuY29tL1xuICpcbiAqIEluY2x1ZGVzIFNpenpsZS5qc1xuICogaHR0cHM6Ly9zaXp6bGVqcy5jb20vXG4gKlxuICogQ29weXJpZ2h0IEpTIEZvdW5kYXRpb24gYW5kIG90aGVyIGNvbnRyaWJ1dG9yc1xuICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlXG4gKiBodHRwczovL2pxdWVyeS5vcmcvbGljZW5zZVxuICpcbiAqIERhdGU6IDIwMTktMDUtMDFUMjE6MDRaXG4gKi9cbiggZnVuY3Rpb24oIGdsb2JhbCwgZmFjdG9yeSApIHtcblxuXHRcInVzZSBzdHJpY3RcIjtcblxuXHRpZiAoIHR5cGVvZiBtb2R1bGUgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIG1vZHVsZS5leHBvcnRzID09PSBcIm9iamVjdFwiICkge1xuXG5cdFx0Ly8gRm9yIENvbW1vbkpTIGFuZCBDb21tb25KUy1saWtlIGVudmlyb25tZW50cyB3aGVyZSBhIHByb3BlciBgd2luZG93YFxuXHRcdC8vIGlzIHByZXNlbnQsIGV4ZWN1dGUgdGhlIGZhY3RvcnkgYW5kIGdldCBqUXVlcnkuXG5cdFx0Ly8gRm9yIGVudmlyb25tZW50cyB0aGF0IGRvIG5vdCBoYXZlIGEgYHdpbmRvd2Agd2l0aCBhIGBkb2N1bWVudGBcblx0XHQvLyAoc3VjaCBhcyBOb2RlLmpzKSwgZXhwb3NlIGEgZmFjdG9yeSBhcyBtb2R1bGUuZXhwb3J0cy5cblx0XHQvLyBUaGlzIGFjY2VudHVhdGVzIHRoZSBuZWVkIGZvciB0aGUgY3JlYXRpb24gb2YgYSByZWFsIGB3aW5kb3dgLlxuXHRcdC8vIGUuZy4gdmFyIGpRdWVyeSA9IHJlcXVpcmUoXCJqcXVlcnlcIikod2luZG93KTtcblx0XHQvLyBTZWUgdGlja2V0ICMxNDU0OSBmb3IgbW9yZSBpbmZvLlxuXHRcdG1vZHVsZS5leHBvcnRzID0gZ2xvYmFsLmRvY3VtZW50ID9cblx0XHRcdGZhY3RvcnkoIGdsb2JhbCwgdHJ1ZSApIDpcblx0XHRcdGZ1bmN0aW9uKCB3ICkge1xuXHRcdFx0XHRpZiAoICF3LmRvY3VtZW50ICkge1xuXHRcdFx0XHRcdHRocm93IG5ldyBFcnJvciggXCJqUXVlcnkgcmVxdWlyZXMgYSB3aW5kb3cgd2l0aCBhIGRvY3VtZW50XCIgKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gZmFjdG9yeSggdyApO1xuXHRcdFx0fTtcblx0fSBlbHNlIHtcblx0XHRmYWN0b3J5KCBnbG9iYWwgKTtcblx0fVxuXG4vLyBQYXNzIHRoaXMgaWYgd2luZG93IGlzIG5vdCBkZWZpbmVkIHlldFxufSApKCB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiID8gd2luZG93IDogdGhpcywgZnVuY3Rpb24oIHdpbmRvdywgbm9HbG9iYWwgKSB7XG5cbi8vIEVkZ2UgPD0gMTIgLSAxMyssIEZpcmVmb3ggPD0xOCAtIDQ1KywgSUUgMTAgLSAxMSwgU2FmYXJpIDUuMSAtIDkrLCBpT1MgNiAtIDkuMVxuLy8gdGhyb3cgZXhjZXB0aW9ucyB3aGVuIG5vbi1zdHJpY3QgY29kZSAoZS5nLiwgQVNQLk5FVCA0LjUpIGFjY2Vzc2VzIHN0cmljdCBtb2RlXG4vLyBhcmd1bWVudHMuY2FsbGVlLmNhbGxlciAodHJhYy0xMzMzNSkuIEJ1dCBhcyBvZiBqUXVlcnkgMy4wICgyMDE2KSwgc3RyaWN0IG1vZGUgc2hvdWxkIGJlIGNvbW1vblxuLy8gZW5vdWdoIHRoYXQgYWxsIHN1Y2ggYXR0ZW1wdHMgYXJlIGd1YXJkZWQgaW4gYSB0cnkgYmxvY2suXG5cInVzZSBzdHJpY3RcIjtcblxudmFyIGFyciA9IFtdO1xuXG52YXIgZG9jdW1lbnQgPSB3aW5kb3cuZG9jdW1lbnQ7XG5cbnZhciBnZXRQcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZjtcblxudmFyIHNsaWNlID0gYXJyLnNsaWNlO1xuXG52YXIgY29uY2F0ID0gYXJyLmNvbmNhdDtcblxudmFyIHB1c2ggPSBhcnIucHVzaDtcblxudmFyIGluZGV4T2YgPSBhcnIuaW5kZXhPZjtcblxudmFyIGNsYXNzMnR5cGUgPSB7fTtcblxudmFyIHRvU3RyaW5nID0gY2xhc3MydHlwZS50b1N0cmluZztcblxudmFyIGhhc093biA9IGNsYXNzMnR5cGUuaGFzT3duUHJvcGVydHk7XG5cbnZhciBmblRvU3RyaW5nID0gaGFzT3duLnRvU3RyaW5nO1xuXG52YXIgT2JqZWN0RnVuY3Rpb25TdHJpbmcgPSBmblRvU3RyaW5nLmNhbGwoIE9iamVjdCApO1xuXG52YXIgc3VwcG9ydCA9IHt9O1xuXG52YXIgaXNGdW5jdGlvbiA9IGZ1bmN0aW9uIGlzRnVuY3Rpb24oIG9iaiApIHtcblxuICAgICAgLy8gU3VwcG9ydDogQ2hyb21lIDw9NTcsIEZpcmVmb3ggPD01MlxuICAgICAgLy8gSW4gc29tZSBicm93c2VycywgdHlwZW9mIHJldHVybnMgXCJmdW5jdGlvblwiIGZvciBIVE1MIDxvYmplY3Q+IGVsZW1lbnRzXG4gICAgICAvLyAoaS5lLiwgYHR5cGVvZiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcIm9iamVjdFwiICkgPT09IFwiZnVuY3Rpb25cImApLlxuICAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBjbGFzc2lmeSAqYW55KiBET00gbm9kZSBhcyBhIGZ1bmN0aW9uLlxuICAgICAgcmV0dXJuIHR5cGVvZiBvYmogPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2Ygb2JqLm5vZGVUeXBlICE9PSBcIm51bWJlclwiO1xuICB9O1xuXG5cbnZhciBpc1dpbmRvdyA9IGZ1bmN0aW9uIGlzV2luZG93KCBvYmogKSB7XG5cdFx0cmV0dXJuIG9iaiAhPSBudWxsICYmIG9iaiA9PT0gb2JqLndpbmRvdztcblx0fTtcblxuXG5cblxuXHR2YXIgcHJlc2VydmVkU2NyaXB0QXR0cmlidXRlcyA9IHtcblx0XHR0eXBlOiB0cnVlLFxuXHRcdHNyYzogdHJ1ZSxcblx0XHRub25jZTogdHJ1ZSxcblx0XHRub01vZHVsZTogdHJ1ZVxuXHR9O1xuXG5cdGZ1bmN0aW9uIERPTUV2YWwoIGNvZGUsIG5vZGUsIGRvYyApIHtcblx0XHRkb2MgPSBkb2MgfHwgZG9jdW1lbnQ7XG5cblx0XHR2YXIgaSwgdmFsLFxuXHRcdFx0c2NyaXB0ID0gZG9jLmNyZWF0ZUVsZW1lbnQoIFwic2NyaXB0XCIgKTtcblxuXHRcdHNjcmlwdC50ZXh0ID0gY29kZTtcblx0XHRpZiAoIG5vZGUgKSB7XG5cdFx0XHRmb3IgKCBpIGluIHByZXNlcnZlZFNjcmlwdEF0dHJpYnV0ZXMgKSB7XG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogRmlyZWZveCA2NCssIEVkZ2UgMTgrXG5cdFx0XHRcdC8vIFNvbWUgYnJvd3NlcnMgZG9uJ3Qgc3VwcG9ydCB0aGUgXCJub25jZVwiIHByb3BlcnR5IG9uIHNjcmlwdHMuXG5cdFx0XHRcdC8vIE9uIHRoZSBvdGhlciBoYW5kLCBqdXN0IHVzaW5nIGBnZXRBdHRyaWJ1dGVgIGlzIG5vdCBlbm91Z2ggYXNcblx0XHRcdFx0Ly8gdGhlIGBub25jZWAgYXR0cmlidXRlIGlzIHJlc2V0IHRvIGFuIGVtcHR5IHN0cmluZyB3aGVuZXZlciBpdFxuXHRcdFx0XHQvLyBiZWNvbWVzIGJyb3dzaW5nLWNvbnRleHQgY29ubmVjdGVkLlxuXHRcdFx0XHQvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3doYXR3Zy9odG1sL2lzc3Vlcy8yMzY5XG5cdFx0XHRcdC8vIFNlZSBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnLyNub25jZS1hdHRyaWJ1dGVzXG5cdFx0XHRcdC8vIFRoZSBgbm9kZS5nZXRBdHRyaWJ1dGVgIGNoZWNrIHdhcyBhZGRlZCBmb3IgdGhlIHNha2Ugb2Zcblx0XHRcdFx0Ly8gYGpRdWVyeS5nbG9iYWxFdmFsYCBzbyB0aGF0IGl0IGNhbiBmYWtlIGEgbm9uY2UtY29udGFpbmluZyBub2RlXG5cdFx0XHRcdC8vIHZpYSBhbiBvYmplY3QuXG5cdFx0XHRcdHZhbCA9IG5vZGVbIGkgXSB8fCBub2RlLmdldEF0dHJpYnV0ZSAmJiBub2RlLmdldEF0dHJpYnV0ZSggaSApO1xuXHRcdFx0XHRpZiAoIHZhbCApIHtcblx0XHRcdFx0XHRzY3JpcHQuc2V0QXR0cmlidXRlKCBpLCB2YWwgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRkb2MuaGVhZC5hcHBlbmRDaGlsZCggc2NyaXB0ICkucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCggc2NyaXB0ICk7XG5cdH1cblxuXG5mdW5jdGlvbiB0b1R5cGUoIG9iaiApIHtcblx0aWYgKCBvYmogPT0gbnVsbCApIHtcblx0XHRyZXR1cm4gb2JqICsgXCJcIjtcblx0fVxuXG5cdC8vIFN1cHBvcnQ6IEFuZHJvaWQgPD0yLjMgb25seSAoZnVuY3Rpb25pc2ggUmVnRXhwKVxuXHRyZXR1cm4gdHlwZW9mIG9iaiA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2Ygb2JqID09PSBcImZ1bmN0aW9uXCIgP1xuXHRcdGNsYXNzMnR5cGVbIHRvU3RyaW5nLmNhbGwoIG9iaiApIF0gfHwgXCJvYmplY3RcIiA6XG5cdFx0dHlwZW9mIG9iajtcbn1cbi8qIGdsb2JhbCBTeW1ib2wgKi9cbi8vIERlZmluaW5nIHRoaXMgZ2xvYmFsIGluIC5lc2xpbnRyYy5qc29uIHdvdWxkIGNyZWF0ZSBhIGRhbmdlciBvZiB1c2luZyB0aGUgZ2xvYmFsXG4vLyB1bmd1YXJkZWQgaW4gYW5vdGhlciBwbGFjZSwgaXQgc2VlbXMgc2FmZXIgdG8gZGVmaW5lIGdsb2JhbCBvbmx5IGZvciB0aGlzIG1vZHVsZVxuXG5cblxudmFyXG5cdHZlcnNpb24gPSBcIjMuNC4xXCIsXG5cblx0Ly8gRGVmaW5lIGEgbG9jYWwgY29weSBvZiBqUXVlcnlcblx0alF1ZXJ5ID0gZnVuY3Rpb24oIHNlbGVjdG9yLCBjb250ZXh0ICkge1xuXG5cdFx0Ly8gVGhlIGpRdWVyeSBvYmplY3QgaXMgYWN0dWFsbHkganVzdCB0aGUgaW5pdCBjb25zdHJ1Y3RvciAnZW5oYW5jZWQnXG5cdFx0Ly8gTmVlZCBpbml0IGlmIGpRdWVyeSBpcyBjYWxsZWQgKGp1c3QgYWxsb3cgZXJyb3IgdG8gYmUgdGhyb3duIGlmIG5vdCBpbmNsdWRlZClcblx0XHRyZXR1cm4gbmV3IGpRdWVyeS5mbi5pbml0KCBzZWxlY3RvciwgY29udGV4dCApO1xuXHR9LFxuXG5cdC8vIFN1cHBvcnQ6IEFuZHJvaWQgPD00LjAgb25seVxuXHQvLyBNYWtlIHN1cmUgd2UgdHJpbSBCT00gYW5kIE5CU1Bcblx0cnRyaW0gPSAvXltcXHNcXHVGRUZGXFx4QTBdK3xbXFxzXFx1RkVGRlxceEEwXSskL2c7XG5cbmpRdWVyeS5mbiA9IGpRdWVyeS5wcm90b3R5cGUgPSB7XG5cblx0Ly8gVGhlIGN1cnJlbnQgdmVyc2lvbiBvZiBqUXVlcnkgYmVpbmcgdXNlZFxuXHRqcXVlcnk6IHZlcnNpb24sXG5cblx0Y29uc3RydWN0b3I6IGpRdWVyeSxcblxuXHQvLyBUaGUgZGVmYXVsdCBsZW5ndGggb2YgYSBqUXVlcnkgb2JqZWN0IGlzIDBcblx0bGVuZ3RoOiAwLFxuXG5cdHRvQXJyYXk6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBzbGljZS5jYWxsKCB0aGlzICk7XG5cdH0sXG5cblx0Ly8gR2V0IHRoZSBOdGggZWxlbWVudCBpbiB0aGUgbWF0Y2hlZCBlbGVtZW50IHNldCBPUlxuXHQvLyBHZXQgdGhlIHdob2xlIG1hdGNoZWQgZWxlbWVudCBzZXQgYXMgYSBjbGVhbiBhcnJheVxuXHRnZXQ6IGZ1bmN0aW9uKCBudW0gKSB7XG5cblx0XHQvLyBSZXR1cm4gYWxsIHRoZSBlbGVtZW50cyBpbiBhIGNsZWFuIGFycmF5XG5cdFx0aWYgKCBudW0gPT0gbnVsbCApIHtcblx0XHRcdHJldHVybiBzbGljZS5jYWxsKCB0aGlzICk7XG5cdFx0fVxuXG5cdFx0Ly8gUmV0dXJuIGp1c3QgdGhlIG9uZSBlbGVtZW50IGZyb20gdGhlIHNldFxuXHRcdHJldHVybiBudW0gPCAwID8gdGhpc1sgbnVtICsgdGhpcy5sZW5ndGggXSA6IHRoaXNbIG51bSBdO1xuXHR9LFxuXG5cdC8vIFRha2UgYW4gYXJyYXkgb2YgZWxlbWVudHMgYW5kIHB1c2ggaXQgb250byB0aGUgc3RhY2tcblx0Ly8gKHJldHVybmluZyB0aGUgbmV3IG1hdGNoZWQgZWxlbWVudCBzZXQpXG5cdHB1c2hTdGFjazogZnVuY3Rpb24oIGVsZW1zICkge1xuXG5cdFx0Ly8gQnVpbGQgYSBuZXcgalF1ZXJ5IG1hdGNoZWQgZWxlbWVudCBzZXRcblx0XHR2YXIgcmV0ID0galF1ZXJ5Lm1lcmdlKCB0aGlzLmNvbnN0cnVjdG9yKCksIGVsZW1zICk7XG5cblx0XHQvLyBBZGQgdGhlIG9sZCBvYmplY3Qgb250byB0aGUgc3RhY2sgKGFzIGEgcmVmZXJlbmNlKVxuXHRcdHJldC5wcmV2T2JqZWN0ID0gdGhpcztcblxuXHRcdC8vIFJldHVybiB0aGUgbmV3bHktZm9ybWVkIGVsZW1lbnQgc2V0XG5cdFx0cmV0dXJuIHJldDtcblx0fSxcblxuXHQvLyBFeGVjdXRlIGEgY2FsbGJhY2sgZm9yIGV2ZXJ5IGVsZW1lbnQgaW4gdGhlIG1hdGNoZWQgc2V0LlxuXHRlYWNoOiBmdW5jdGlvbiggY2FsbGJhY2sgKSB7XG5cdFx0cmV0dXJuIGpRdWVyeS5lYWNoKCB0aGlzLCBjYWxsYmFjayApO1xuXHR9LFxuXG5cdG1hcDogZnVuY3Rpb24oIGNhbGxiYWNrICkge1xuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggalF1ZXJ5Lm1hcCggdGhpcywgZnVuY3Rpb24oIGVsZW0sIGkgKSB7XG5cdFx0XHRyZXR1cm4gY2FsbGJhY2suY2FsbCggZWxlbSwgaSwgZWxlbSApO1xuXHRcdH0gKSApO1xuXHR9LFxuXG5cdHNsaWNlOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soIHNsaWNlLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKSApO1xuXHR9LFxuXG5cdGZpcnN0OiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5lcSggMCApO1xuXHR9LFxuXG5cdGxhc3Q6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLmVxKCAtMSApO1xuXHR9LFxuXG5cdGVxOiBmdW5jdGlvbiggaSApIHtcblx0XHR2YXIgbGVuID0gdGhpcy5sZW5ndGgsXG5cdFx0XHRqID0gK2kgKyAoIGkgPCAwID8gbGVuIDogMCApO1xuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggaiA+PSAwICYmIGogPCBsZW4gPyBbIHRoaXNbIGogXSBdIDogW10gKTtcblx0fSxcblxuXHRlbmQ6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLnByZXZPYmplY3QgfHwgdGhpcy5jb25zdHJ1Y3RvcigpO1xuXHR9LFxuXG5cdC8vIEZvciBpbnRlcm5hbCB1c2Ugb25seS5cblx0Ly8gQmVoYXZlcyBsaWtlIGFuIEFycmF5J3MgbWV0aG9kLCBub3QgbGlrZSBhIGpRdWVyeSBtZXRob2QuXG5cdHB1c2g6IHB1c2gsXG5cdHNvcnQ6IGFyci5zb3J0LFxuXHRzcGxpY2U6IGFyci5zcGxpY2Vcbn07XG5cbmpRdWVyeS5leHRlbmQgPSBqUXVlcnkuZm4uZXh0ZW5kID0gZnVuY3Rpb24oKSB7XG5cdHZhciBvcHRpb25zLCBuYW1lLCBzcmMsIGNvcHksIGNvcHlJc0FycmF5LCBjbG9uZSxcblx0XHR0YXJnZXQgPSBhcmd1bWVudHNbIDAgXSB8fCB7fSxcblx0XHRpID0gMSxcblx0XHRsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoLFxuXHRcdGRlZXAgPSBmYWxzZTtcblxuXHQvLyBIYW5kbGUgYSBkZWVwIGNvcHkgc2l0dWF0aW9uXG5cdGlmICggdHlwZW9mIHRhcmdldCA9PT0gXCJib29sZWFuXCIgKSB7XG5cdFx0ZGVlcCA9IHRhcmdldDtcblxuXHRcdC8vIFNraXAgdGhlIGJvb2xlYW4gYW5kIHRoZSB0YXJnZXRcblx0XHR0YXJnZXQgPSBhcmd1bWVudHNbIGkgXSB8fCB7fTtcblx0XHRpKys7XG5cdH1cblxuXHQvLyBIYW5kbGUgY2FzZSB3aGVuIHRhcmdldCBpcyBhIHN0cmluZyBvciBzb21ldGhpbmcgKHBvc3NpYmxlIGluIGRlZXAgY29weSlcblx0aWYgKCB0eXBlb2YgdGFyZ2V0ICE9PSBcIm9iamVjdFwiICYmICFpc0Z1bmN0aW9uKCB0YXJnZXQgKSApIHtcblx0XHR0YXJnZXQgPSB7fTtcblx0fVxuXG5cdC8vIEV4dGVuZCBqUXVlcnkgaXRzZWxmIGlmIG9ubHkgb25lIGFyZ3VtZW50IGlzIHBhc3NlZFxuXHRpZiAoIGkgPT09IGxlbmd0aCApIHtcblx0XHR0YXJnZXQgPSB0aGlzO1xuXHRcdGktLTtcblx0fVxuXG5cdGZvciAoIDsgaSA8IGxlbmd0aDsgaSsrICkge1xuXG5cdFx0Ly8gT25seSBkZWFsIHdpdGggbm9uLW51bGwvdW5kZWZpbmVkIHZhbHVlc1xuXHRcdGlmICggKCBvcHRpb25zID0gYXJndW1lbnRzWyBpIF0gKSAhPSBudWxsICkge1xuXG5cdFx0XHQvLyBFeHRlbmQgdGhlIGJhc2Ugb2JqZWN0XG5cdFx0XHRmb3IgKCBuYW1lIGluIG9wdGlvbnMgKSB7XG5cdFx0XHRcdGNvcHkgPSBvcHRpb25zWyBuYW1lIF07XG5cblx0XHRcdFx0Ly8gUHJldmVudCBPYmplY3QucHJvdG90eXBlIHBvbGx1dGlvblxuXHRcdFx0XHQvLyBQcmV2ZW50IG5ldmVyLWVuZGluZyBsb29wXG5cdFx0XHRcdGlmICggbmFtZSA9PT0gXCJfX3Byb3RvX19cIiB8fCB0YXJnZXQgPT09IGNvcHkgKSB7XG5cdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBSZWN1cnNlIGlmIHdlJ3JlIG1lcmdpbmcgcGxhaW4gb2JqZWN0cyBvciBhcnJheXNcblx0XHRcdFx0aWYgKCBkZWVwICYmIGNvcHkgJiYgKCBqUXVlcnkuaXNQbGFpbk9iamVjdCggY29weSApIHx8XG5cdFx0XHRcdFx0KCBjb3B5SXNBcnJheSA9IEFycmF5LmlzQXJyYXkoIGNvcHkgKSApICkgKSB7XG5cdFx0XHRcdFx0c3JjID0gdGFyZ2V0WyBuYW1lIF07XG5cblx0XHRcdFx0XHQvLyBFbnN1cmUgcHJvcGVyIHR5cGUgZm9yIHRoZSBzb3VyY2UgdmFsdWVcblx0XHRcdFx0XHRpZiAoIGNvcHlJc0FycmF5ICYmICFBcnJheS5pc0FycmF5KCBzcmMgKSApIHtcblx0XHRcdFx0XHRcdGNsb25lID0gW107XG5cdFx0XHRcdFx0fSBlbHNlIGlmICggIWNvcHlJc0FycmF5ICYmICFqUXVlcnkuaXNQbGFpbk9iamVjdCggc3JjICkgKSB7XG5cdFx0XHRcdFx0XHRjbG9uZSA9IHt9O1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRjbG9uZSA9IHNyYztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Y29weUlzQXJyYXkgPSBmYWxzZTtcblxuXHRcdFx0XHRcdC8vIE5ldmVyIG1vdmUgb3JpZ2luYWwgb2JqZWN0cywgY2xvbmUgdGhlbVxuXHRcdFx0XHRcdHRhcmdldFsgbmFtZSBdID0galF1ZXJ5LmV4dGVuZCggZGVlcCwgY2xvbmUsIGNvcHkgKTtcblxuXHRcdFx0XHQvLyBEb24ndCBicmluZyBpbiB1bmRlZmluZWQgdmFsdWVzXG5cdFx0XHRcdH0gZWxzZSBpZiAoIGNvcHkgIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0XHR0YXJnZXRbIG5hbWUgXSA9IGNvcHk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBSZXR1cm4gdGhlIG1vZGlmaWVkIG9iamVjdFxuXHRyZXR1cm4gdGFyZ2V0O1xufTtcblxualF1ZXJ5LmV4dGVuZCgge1xuXG5cdC8vIFVuaXF1ZSBmb3IgZWFjaCBjb3B5IG9mIGpRdWVyeSBvbiB0aGUgcGFnZVxuXHRleHBhbmRvOiBcImpRdWVyeVwiICsgKCB2ZXJzaW9uICsgTWF0aC5yYW5kb20oKSApLnJlcGxhY2UoIC9cXEQvZywgXCJcIiApLFxuXG5cdC8vIEFzc3VtZSBqUXVlcnkgaXMgcmVhZHkgd2l0aG91dCB0aGUgcmVhZHkgbW9kdWxlXG5cdGlzUmVhZHk6IHRydWUsXG5cblx0ZXJyb3I6IGZ1bmN0aW9uKCBtc2cgKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKCBtc2cgKTtcblx0fSxcblxuXHRub29wOiBmdW5jdGlvbigpIHt9LFxuXG5cdGlzUGxhaW5PYmplY3Q6IGZ1bmN0aW9uKCBvYmogKSB7XG5cdFx0dmFyIHByb3RvLCBDdG9yO1xuXG5cdFx0Ly8gRGV0ZWN0IG9idmlvdXMgbmVnYXRpdmVzXG5cdFx0Ly8gVXNlIHRvU3RyaW5nIGluc3RlYWQgb2YgalF1ZXJ5LnR5cGUgdG8gY2F0Y2ggaG9zdCBvYmplY3RzXG5cdFx0aWYgKCAhb2JqIHx8IHRvU3RyaW5nLmNhbGwoIG9iaiApICE9PSBcIltvYmplY3QgT2JqZWN0XVwiICkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdHByb3RvID0gZ2V0UHJvdG8oIG9iaiApO1xuXG5cdFx0Ly8gT2JqZWN0cyB3aXRoIG5vIHByb3RvdHlwZSAoZS5nLiwgYE9iamVjdC5jcmVhdGUoIG51bGwgKWApIGFyZSBwbGFpblxuXHRcdGlmICggIXByb3RvICkge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXG5cdFx0Ly8gT2JqZWN0cyB3aXRoIHByb3RvdHlwZSBhcmUgcGxhaW4gaWZmIHRoZXkgd2VyZSBjb25zdHJ1Y3RlZCBieSBhIGdsb2JhbCBPYmplY3QgZnVuY3Rpb25cblx0XHRDdG9yID0gaGFzT3duLmNhbGwoIHByb3RvLCBcImNvbnN0cnVjdG9yXCIgKSAmJiBwcm90by5jb25zdHJ1Y3Rvcjtcblx0XHRyZXR1cm4gdHlwZW9mIEN0b3IgPT09IFwiZnVuY3Rpb25cIiAmJiBmblRvU3RyaW5nLmNhbGwoIEN0b3IgKSA9PT0gT2JqZWN0RnVuY3Rpb25TdHJpbmc7XG5cdH0sXG5cblx0aXNFbXB0eU9iamVjdDogZnVuY3Rpb24oIG9iaiApIHtcblx0XHR2YXIgbmFtZTtcblxuXHRcdGZvciAoIG5hbWUgaW4gb2JqICkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSxcblxuXHQvLyBFdmFsdWF0ZXMgYSBzY3JpcHQgaW4gYSBnbG9iYWwgY29udGV4dFxuXHRnbG9iYWxFdmFsOiBmdW5jdGlvbiggY29kZSwgb3B0aW9ucyApIHtcblx0XHRET01FdmFsKCBjb2RlLCB7IG5vbmNlOiBvcHRpb25zICYmIG9wdGlvbnMubm9uY2UgfSApO1xuXHR9LFxuXG5cdGVhY2g6IGZ1bmN0aW9uKCBvYmosIGNhbGxiYWNrICkge1xuXHRcdHZhciBsZW5ndGgsIGkgPSAwO1xuXG5cdFx0aWYgKCBpc0FycmF5TGlrZSggb2JqICkgKSB7XG5cdFx0XHRsZW5ndGggPSBvYmoubGVuZ3RoO1xuXHRcdFx0Zm9yICggOyBpIDwgbGVuZ3RoOyBpKysgKSB7XG5cdFx0XHRcdGlmICggY2FsbGJhY2suY2FsbCggb2JqWyBpIF0sIGksIG9ialsgaSBdICkgPT09IGZhbHNlICkge1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdGZvciAoIGkgaW4gb2JqICkge1xuXHRcdFx0XHRpZiAoIGNhbGxiYWNrLmNhbGwoIG9ialsgaSBdLCBpLCBvYmpbIGkgXSApID09PSBmYWxzZSApIHtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBvYmo7XG5cdH0sXG5cblx0Ly8gU3VwcG9ydDogQW5kcm9pZCA8PTQuMCBvbmx5XG5cdHRyaW06IGZ1bmN0aW9uKCB0ZXh0ICkge1xuXHRcdHJldHVybiB0ZXh0ID09IG51bGwgP1xuXHRcdFx0XCJcIiA6XG5cdFx0XHQoIHRleHQgKyBcIlwiICkucmVwbGFjZSggcnRyaW0sIFwiXCIgKTtcblx0fSxcblxuXHQvLyByZXN1bHRzIGlzIGZvciBpbnRlcm5hbCB1c2FnZSBvbmx5XG5cdG1ha2VBcnJheTogZnVuY3Rpb24oIGFyciwgcmVzdWx0cyApIHtcblx0XHR2YXIgcmV0ID0gcmVzdWx0cyB8fCBbXTtcblxuXHRcdGlmICggYXJyICE9IG51bGwgKSB7XG5cdFx0XHRpZiAoIGlzQXJyYXlMaWtlKCBPYmplY3QoIGFyciApICkgKSB7XG5cdFx0XHRcdGpRdWVyeS5tZXJnZSggcmV0LFxuXHRcdFx0XHRcdHR5cGVvZiBhcnIgPT09IFwic3RyaW5nXCIgP1xuXHRcdFx0XHRcdFsgYXJyIF0gOiBhcnJcblx0XHRcdFx0KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHB1c2guY2FsbCggcmV0LCBhcnIgKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gcmV0O1xuXHR9LFxuXG5cdGluQXJyYXk6IGZ1bmN0aW9uKCBlbGVtLCBhcnIsIGkgKSB7XG5cdFx0cmV0dXJuIGFyciA9PSBudWxsID8gLTEgOiBpbmRleE9mLmNhbGwoIGFyciwgZWxlbSwgaSApO1xuXHR9LFxuXG5cdC8vIFN1cHBvcnQ6IEFuZHJvaWQgPD00LjAgb25seSwgUGhhbnRvbUpTIDEgb25seVxuXHQvLyBwdXNoLmFwcGx5KF8sIGFycmF5bGlrZSkgdGhyb3dzIG9uIGFuY2llbnQgV2ViS2l0XG5cdG1lcmdlOiBmdW5jdGlvbiggZmlyc3QsIHNlY29uZCApIHtcblx0XHR2YXIgbGVuID0gK3NlY29uZC5sZW5ndGgsXG5cdFx0XHRqID0gMCxcblx0XHRcdGkgPSBmaXJzdC5sZW5ndGg7XG5cblx0XHRmb3IgKCA7IGogPCBsZW47IGorKyApIHtcblx0XHRcdGZpcnN0WyBpKysgXSA9IHNlY29uZFsgaiBdO1xuXHRcdH1cblxuXHRcdGZpcnN0Lmxlbmd0aCA9IGk7XG5cblx0XHRyZXR1cm4gZmlyc3Q7XG5cdH0sXG5cblx0Z3JlcDogZnVuY3Rpb24oIGVsZW1zLCBjYWxsYmFjaywgaW52ZXJ0ICkge1xuXHRcdHZhciBjYWxsYmFja0ludmVyc2UsXG5cdFx0XHRtYXRjaGVzID0gW10sXG5cdFx0XHRpID0gMCxcblx0XHRcdGxlbmd0aCA9IGVsZW1zLmxlbmd0aCxcblx0XHRcdGNhbGxiYWNrRXhwZWN0ID0gIWludmVydDtcblxuXHRcdC8vIEdvIHRocm91Z2ggdGhlIGFycmF5LCBvbmx5IHNhdmluZyB0aGUgaXRlbXNcblx0XHQvLyB0aGF0IHBhc3MgdGhlIHZhbGlkYXRvciBmdW5jdGlvblxuXHRcdGZvciAoIDsgaSA8IGxlbmd0aDsgaSsrICkge1xuXHRcdFx0Y2FsbGJhY2tJbnZlcnNlID0gIWNhbGxiYWNrKCBlbGVtc1sgaSBdLCBpICk7XG5cdFx0XHRpZiAoIGNhbGxiYWNrSW52ZXJzZSAhPT0gY2FsbGJhY2tFeHBlY3QgKSB7XG5cdFx0XHRcdG1hdGNoZXMucHVzaCggZWxlbXNbIGkgXSApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBtYXRjaGVzO1xuXHR9LFxuXG5cdC8vIGFyZyBpcyBmb3IgaW50ZXJuYWwgdXNhZ2Ugb25seVxuXHRtYXA6IGZ1bmN0aW9uKCBlbGVtcywgY2FsbGJhY2ssIGFyZyApIHtcblx0XHR2YXIgbGVuZ3RoLCB2YWx1ZSxcblx0XHRcdGkgPSAwLFxuXHRcdFx0cmV0ID0gW107XG5cblx0XHQvLyBHbyB0aHJvdWdoIHRoZSBhcnJheSwgdHJhbnNsYXRpbmcgZWFjaCBvZiB0aGUgaXRlbXMgdG8gdGhlaXIgbmV3IHZhbHVlc1xuXHRcdGlmICggaXNBcnJheUxpa2UoIGVsZW1zICkgKSB7XG5cdFx0XHRsZW5ndGggPSBlbGVtcy5sZW5ndGg7XG5cdFx0XHRmb3IgKCA7IGkgPCBsZW5ndGg7IGkrKyApIHtcblx0XHRcdFx0dmFsdWUgPSBjYWxsYmFjayggZWxlbXNbIGkgXSwgaSwgYXJnICk7XG5cblx0XHRcdFx0aWYgKCB2YWx1ZSAhPSBudWxsICkge1xuXHRcdFx0XHRcdHJldC5wdXNoKCB2YWx1ZSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHQvLyBHbyB0aHJvdWdoIGV2ZXJ5IGtleSBvbiB0aGUgb2JqZWN0LFxuXHRcdH0gZWxzZSB7XG5cdFx0XHRmb3IgKCBpIGluIGVsZW1zICkge1xuXHRcdFx0XHR2YWx1ZSA9IGNhbGxiYWNrKCBlbGVtc1sgaSBdLCBpLCBhcmcgKTtcblxuXHRcdFx0XHRpZiAoIHZhbHVlICE9IG51bGwgKSB7XG5cdFx0XHRcdFx0cmV0LnB1c2goIHZhbHVlICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBGbGF0dGVuIGFueSBuZXN0ZWQgYXJyYXlzXG5cdFx0cmV0dXJuIGNvbmNhdC5hcHBseSggW10sIHJldCApO1xuXHR9LFxuXG5cdC8vIEEgZ2xvYmFsIEdVSUQgY291bnRlciBmb3Igb2JqZWN0c1xuXHRndWlkOiAxLFxuXG5cdC8vIGpRdWVyeS5zdXBwb3J0IGlzIG5vdCB1c2VkIGluIENvcmUgYnV0IG90aGVyIHByb2plY3RzIGF0dGFjaCB0aGVpclxuXHQvLyBwcm9wZXJ0aWVzIHRvIGl0IHNvIGl0IG5lZWRzIHRvIGV4aXN0LlxuXHRzdXBwb3J0OiBzdXBwb3J0XG59ICk7XG5cbmlmICggdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICkge1xuXHRqUXVlcnkuZm5bIFN5bWJvbC5pdGVyYXRvciBdID0gYXJyWyBTeW1ib2wuaXRlcmF0b3IgXTtcbn1cblxuLy8gUG9wdWxhdGUgdGhlIGNsYXNzMnR5cGUgbWFwXG5qUXVlcnkuZWFjaCggXCJCb29sZWFuIE51bWJlciBTdHJpbmcgRnVuY3Rpb24gQXJyYXkgRGF0ZSBSZWdFeHAgT2JqZWN0IEVycm9yIFN5bWJvbFwiLnNwbGl0KCBcIiBcIiApLFxuZnVuY3Rpb24oIGksIG5hbWUgKSB7XG5cdGNsYXNzMnR5cGVbIFwiW29iamVjdCBcIiArIG5hbWUgKyBcIl1cIiBdID0gbmFtZS50b0xvd2VyQ2FzZSgpO1xufSApO1xuXG5mdW5jdGlvbiBpc0FycmF5TGlrZSggb2JqICkge1xuXG5cdC8vIFN1cHBvcnQ6IHJlYWwgaU9TIDguMiBvbmx5IChub3QgcmVwcm9kdWNpYmxlIGluIHNpbXVsYXRvcilcblx0Ly8gYGluYCBjaGVjayB1c2VkIHRvIHByZXZlbnQgSklUIGVycm9yIChnaC0yMTQ1KVxuXHQvLyBoYXNPd24gaXNuJ3QgdXNlZCBoZXJlIGR1ZSB0byBmYWxzZSBuZWdhdGl2ZXNcblx0Ly8gcmVnYXJkaW5nIE5vZGVsaXN0IGxlbmd0aCBpbiBJRVxuXHR2YXIgbGVuZ3RoID0gISFvYmogJiYgXCJsZW5ndGhcIiBpbiBvYmogJiYgb2JqLmxlbmd0aCxcblx0XHR0eXBlID0gdG9UeXBlKCBvYmogKTtcblxuXHRpZiAoIGlzRnVuY3Rpb24oIG9iaiApIHx8IGlzV2luZG93KCBvYmogKSApIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRyZXR1cm4gdHlwZSA9PT0gXCJhcnJheVwiIHx8IGxlbmd0aCA9PT0gMCB8fFxuXHRcdHR5cGVvZiBsZW5ndGggPT09IFwibnVtYmVyXCIgJiYgbGVuZ3RoID4gMCAmJiAoIGxlbmd0aCAtIDEgKSBpbiBvYmo7XG59XG52YXIgU2l6emxlID1cbi8qIVxuICogU2l6emxlIENTUyBTZWxlY3RvciBFbmdpbmUgdjIuMy40XG4gKiBodHRwczovL3NpenpsZWpzLmNvbS9cbiAqXG4gKiBDb3B5cmlnaHQgSlMgRm91bmRhdGlvbiBhbmQgb3RoZXIgY29udHJpYnV0b3JzXG4gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2VcbiAqIGh0dHBzOi8vanMuZm91bmRhdGlvbi9cbiAqXG4gKiBEYXRlOiAyMDE5LTA0LTA4XG4gKi9cbihmdW5jdGlvbiggd2luZG93ICkge1xuXG52YXIgaSxcblx0c3VwcG9ydCxcblx0RXhwcixcblx0Z2V0VGV4dCxcblx0aXNYTUwsXG5cdHRva2VuaXplLFxuXHRjb21waWxlLFxuXHRzZWxlY3QsXG5cdG91dGVybW9zdENvbnRleHQsXG5cdHNvcnRJbnB1dCxcblx0aGFzRHVwbGljYXRlLFxuXG5cdC8vIExvY2FsIGRvY3VtZW50IHZhcnNcblx0c2V0RG9jdW1lbnQsXG5cdGRvY3VtZW50LFxuXHRkb2NFbGVtLFxuXHRkb2N1bWVudElzSFRNTCxcblx0cmJ1Z2d5UVNBLFxuXHRyYnVnZ3lNYXRjaGVzLFxuXHRtYXRjaGVzLFxuXHRjb250YWlucyxcblxuXHQvLyBJbnN0YW5jZS1zcGVjaWZpYyBkYXRhXG5cdGV4cGFuZG8gPSBcInNpenpsZVwiICsgMSAqIG5ldyBEYXRlKCksXG5cdHByZWZlcnJlZERvYyA9IHdpbmRvdy5kb2N1bWVudCxcblx0ZGlycnVucyA9IDAsXG5cdGRvbmUgPSAwLFxuXHRjbGFzc0NhY2hlID0gY3JlYXRlQ2FjaGUoKSxcblx0dG9rZW5DYWNoZSA9IGNyZWF0ZUNhY2hlKCksXG5cdGNvbXBpbGVyQ2FjaGUgPSBjcmVhdGVDYWNoZSgpLFxuXHRub25uYXRpdmVTZWxlY3RvckNhY2hlID0gY3JlYXRlQ2FjaGUoKSxcblx0c29ydE9yZGVyID0gZnVuY3Rpb24oIGEsIGIgKSB7XG5cdFx0aWYgKCBhID09PSBiICkge1xuXHRcdFx0aGFzRHVwbGljYXRlID0gdHJ1ZTtcblx0XHR9XG5cdFx0cmV0dXJuIDA7XG5cdH0sXG5cblx0Ly8gSW5zdGFuY2UgbWV0aG9kc1xuXHRoYXNPd24gPSAoe30pLmhhc093blByb3BlcnR5LFxuXHRhcnIgPSBbXSxcblx0cG9wID0gYXJyLnBvcCxcblx0cHVzaF9uYXRpdmUgPSBhcnIucHVzaCxcblx0cHVzaCA9IGFyci5wdXNoLFxuXHRzbGljZSA9IGFyci5zbGljZSxcblx0Ly8gVXNlIGEgc3RyaXBwZWQtZG93biBpbmRleE9mIGFzIGl0J3MgZmFzdGVyIHRoYW4gbmF0aXZlXG5cdC8vIGh0dHBzOi8vanNwZXJmLmNvbS90aG9yLWluZGV4b2YtdnMtZm9yLzVcblx0aW5kZXhPZiA9IGZ1bmN0aW9uKCBsaXN0LCBlbGVtICkge1xuXHRcdHZhciBpID0gMCxcblx0XHRcdGxlbiA9IGxpc3QubGVuZ3RoO1xuXHRcdGZvciAoIDsgaSA8IGxlbjsgaSsrICkge1xuXHRcdFx0aWYgKCBsaXN0W2ldID09PSBlbGVtICkge1xuXHRcdFx0XHRyZXR1cm4gaTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIC0xO1xuXHR9LFxuXG5cdGJvb2xlYW5zID0gXCJjaGVja2VkfHNlbGVjdGVkfGFzeW5jfGF1dG9mb2N1c3xhdXRvcGxheXxjb250cm9sc3xkZWZlcnxkaXNhYmxlZHxoaWRkZW58aXNtYXB8bG9vcHxtdWx0aXBsZXxvcGVufHJlYWRvbmx5fHJlcXVpcmVkfHNjb3BlZFwiLFxuXG5cdC8vIFJlZ3VsYXIgZXhwcmVzc2lvbnNcblxuXHQvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9jc3MzLXNlbGVjdG9ycy8jd2hpdGVzcGFjZVxuXHR3aGl0ZXNwYWNlID0gXCJbXFxcXHgyMFxcXFx0XFxcXHJcXFxcblxcXFxmXVwiLFxuXG5cdC8vIGh0dHA6Ly93d3cudzMub3JnL1RSL0NTUzIxL3N5bmRhdGEuaHRtbCN2YWx1ZS1kZWYtaWRlbnRpZmllclxuXHRpZGVudGlmaWVyID0gXCIoPzpcXFxcXFxcXC58W1xcXFx3LV18W15cXDAtXFxcXHhhMF0pK1wiLFxuXG5cdC8vIEF0dHJpYnV0ZSBzZWxlY3RvcnM6IGh0dHA6Ly93d3cudzMub3JnL1RSL3NlbGVjdG9ycy8jYXR0cmlidXRlLXNlbGVjdG9yc1xuXHRhdHRyaWJ1dGVzID0gXCJcXFxcW1wiICsgd2hpdGVzcGFjZSArIFwiKihcIiArIGlkZW50aWZpZXIgKyBcIikoPzpcIiArIHdoaXRlc3BhY2UgK1xuXHRcdC8vIE9wZXJhdG9yIChjYXB0dXJlIDIpXG5cdFx0XCIqKFsqXiR8IX5dPz0pXCIgKyB3aGl0ZXNwYWNlICtcblx0XHQvLyBcIkF0dHJpYnV0ZSB2YWx1ZXMgbXVzdCBiZSBDU1MgaWRlbnRpZmllcnMgW2NhcHR1cmUgNV0gb3Igc3RyaW5ncyBbY2FwdHVyZSAzIG9yIGNhcHR1cmUgNF1cIlxuXHRcdFwiKig/OicoKD86XFxcXFxcXFwufFteXFxcXFxcXFwnXSkqKSd8XFxcIigoPzpcXFxcXFxcXC58W15cXFxcXFxcXFxcXCJdKSopXFxcInwoXCIgKyBpZGVudGlmaWVyICsgXCIpKXwpXCIgKyB3aGl0ZXNwYWNlICtcblx0XHRcIipcXFxcXVwiLFxuXG5cdHBzZXVkb3MgPSBcIjooXCIgKyBpZGVudGlmaWVyICsgXCIpKD86XFxcXCgoXCIgK1xuXHRcdC8vIFRvIHJlZHVjZSB0aGUgbnVtYmVyIG9mIHNlbGVjdG9ycyBuZWVkaW5nIHRva2VuaXplIGluIHRoZSBwcmVGaWx0ZXIsIHByZWZlciBhcmd1bWVudHM6XG5cdFx0Ly8gMS4gcXVvdGVkIChjYXB0dXJlIDM7IGNhcHR1cmUgNCBvciBjYXB0dXJlIDUpXG5cdFx0XCIoJygoPzpcXFxcXFxcXC58W15cXFxcXFxcXCddKSopJ3xcXFwiKCg/OlxcXFxcXFxcLnxbXlxcXFxcXFxcXFxcIl0pKilcXFwiKXxcIiArXG5cdFx0Ly8gMi4gc2ltcGxlIChjYXB0dXJlIDYpXG5cdFx0XCIoKD86XFxcXFxcXFwufFteXFxcXFxcXFwoKVtcXFxcXV18XCIgKyBhdHRyaWJ1dGVzICsgXCIpKil8XCIgK1xuXHRcdC8vIDMuIGFueXRoaW5nIGVsc2UgKGNhcHR1cmUgMilcblx0XHRcIi4qXCIgK1xuXHRcdFwiKVxcXFwpfClcIixcblxuXHQvLyBMZWFkaW5nIGFuZCBub24tZXNjYXBlZCB0cmFpbGluZyB3aGl0ZXNwYWNlLCBjYXB0dXJpbmcgc29tZSBub24td2hpdGVzcGFjZSBjaGFyYWN0ZXJzIHByZWNlZGluZyB0aGUgbGF0dGVyXG5cdHJ3aGl0ZXNwYWNlID0gbmV3IFJlZ0V4cCggd2hpdGVzcGFjZSArIFwiK1wiLCBcImdcIiApLFxuXHRydHJpbSA9IG5ldyBSZWdFeHAoIFwiXlwiICsgd2hpdGVzcGFjZSArIFwiK3woKD86XnxbXlxcXFxcXFxcXSkoPzpcXFxcXFxcXC4pKilcIiArIHdoaXRlc3BhY2UgKyBcIiskXCIsIFwiZ1wiICksXG5cblx0cmNvbW1hID0gbmV3IFJlZ0V4cCggXCJeXCIgKyB3aGl0ZXNwYWNlICsgXCIqLFwiICsgd2hpdGVzcGFjZSArIFwiKlwiICksXG5cdHJjb21iaW5hdG9ycyA9IG5ldyBSZWdFeHAoIFwiXlwiICsgd2hpdGVzcGFjZSArIFwiKihbPit+XXxcIiArIHdoaXRlc3BhY2UgKyBcIilcIiArIHdoaXRlc3BhY2UgKyBcIipcIiApLFxuXHRyZGVzY2VuZCA9IG5ldyBSZWdFeHAoIHdoaXRlc3BhY2UgKyBcInw+XCIgKSxcblxuXHRycHNldWRvID0gbmV3IFJlZ0V4cCggcHNldWRvcyApLFxuXHRyaWRlbnRpZmllciA9IG5ldyBSZWdFeHAoIFwiXlwiICsgaWRlbnRpZmllciArIFwiJFwiICksXG5cblx0bWF0Y2hFeHByID0ge1xuXHRcdFwiSURcIjogbmV3IFJlZ0V4cCggXCJeIyhcIiArIGlkZW50aWZpZXIgKyBcIilcIiApLFxuXHRcdFwiQ0xBU1NcIjogbmV3IFJlZ0V4cCggXCJeXFxcXC4oXCIgKyBpZGVudGlmaWVyICsgXCIpXCIgKSxcblx0XHRcIlRBR1wiOiBuZXcgUmVnRXhwKCBcIl4oXCIgKyBpZGVudGlmaWVyICsgXCJ8WypdKVwiICksXG5cdFx0XCJBVFRSXCI6IG5ldyBSZWdFeHAoIFwiXlwiICsgYXR0cmlidXRlcyApLFxuXHRcdFwiUFNFVURPXCI6IG5ldyBSZWdFeHAoIFwiXlwiICsgcHNldWRvcyApLFxuXHRcdFwiQ0hJTERcIjogbmV3IFJlZ0V4cCggXCJeOihvbmx5fGZpcnN0fGxhc3R8bnRofG50aC1sYXN0KS0oY2hpbGR8b2YtdHlwZSkoPzpcXFxcKFwiICsgd2hpdGVzcGFjZSArXG5cdFx0XHRcIiooZXZlbnxvZGR8KChbKy1dfCkoXFxcXGQqKW58KVwiICsgd2hpdGVzcGFjZSArIFwiKig/OihbKy1dfClcIiArIHdoaXRlc3BhY2UgK1xuXHRcdFx0XCIqKFxcXFxkKyl8KSlcIiArIHdoaXRlc3BhY2UgKyBcIipcXFxcKXwpXCIsIFwiaVwiICksXG5cdFx0XCJib29sXCI6IG5ldyBSZWdFeHAoIFwiXig/OlwiICsgYm9vbGVhbnMgKyBcIikkXCIsIFwiaVwiICksXG5cdFx0Ly8gRm9yIHVzZSBpbiBsaWJyYXJpZXMgaW1wbGVtZW50aW5nIC5pcygpXG5cdFx0Ly8gV2UgdXNlIHRoaXMgZm9yIFBPUyBtYXRjaGluZyBpbiBgc2VsZWN0YFxuXHRcdFwibmVlZHNDb250ZXh0XCI6IG5ldyBSZWdFeHAoIFwiXlwiICsgd2hpdGVzcGFjZSArIFwiKls+K35dfDooZXZlbnxvZGR8ZXF8Z3R8bHR8bnRofGZpcnN0fGxhc3QpKD86XFxcXChcIiArXG5cdFx0XHR3aGl0ZXNwYWNlICsgXCIqKCg/Oi1cXFxcZCk/XFxcXGQqKVwiICsgd2hpdGVzcGFjZSArIFwiKlxcXFwpfCkoPz1bXi1dfCQpXCIsIFwiaVwiIClcblx0fSxcblxuXHRyaHRtbCA9IC9IVE1MJC9pLFxuXHRyaW5wdXRzID0gL14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8YnV0dG9uKSQvaSxcblx0cmhlYWRlciA9IC9eaFxcZCQvaSxcblxuXHRybmF0aXZlID0gL15bXntdK1xce1xccypcXFtuYXRpdmUgXFx3LyxcblxuXHQvLyBFYXNpbHktcGFyc2VhYmxlL3JldHJpZXZhYmxlIElEIG9yIFRBRyBvciBDTEFTUyBzZWxlY3RvcnNcblx0cnF1aWNrRXhwciA9IC9eKD86IyhbXFx3LV0rKXwoXFx3Kyl8XFwuKFtcXHctXSspKSQvLFxuXG5cdHJzaWJsaW5nID0gL1srfl0vLFxuXG5cdC8vIENTUyBlc2NhcGVzXG5cdC8vIGh0dHA6Ly93d3cudzMub3JnL1RSL0NTUzIxL3N5bmRhdGEuaHRtbCNlc2NhcGVkLWNoYXJhY3RlcnNcblx0cnVuZXNjYXBlID0gbmV3IFJlZ0V4cCggXCJcXFxcXFxcXChbXFxcXGRhLWZdezEsNn1cIiArIHdoaXRlc3BhY2UgKyBcIj98KFwiICsgd2hpdGVzcGFjZSArIFwiKXwuKVwiLCBcImlnXCIgKSxcblx0ZnVuZXNjYXBlID0gZnVuY3Rpb24oIF8sIGVzY2FwZWQsIGVzY2FwZWRXaGl0ZXNwYWNlICkge1xuXHRcdHZhciBoaWdoID0gXCIweFwiICsgZXNjYXBlZCAtIDB4MTAwMDA7XG5cdFx0Ly8gTmFOIG1lYW5zIG5vbi1jb2RlcG9pbnRcblx0XHQvLyBTdXBwb3J0OiBGaXJlZm94PDI0XG5cdFx0Ly8gV29ya2Fyb3VuZCBlcnJvbmVvdXMgbnVtZXJpYyBpbnRlcnByZXRhdGlvbiBvZiArXCIweFwiXG5cdFx0cmV0dXJuIGhpZ2ggIT09IGhpZ2ggfHwgZXNjYXBlZFdoaXRlc3BhY2UgP1xuXHRcdFx0ZXNjYXBlZCA6XG5cdFx0XHRoaWdoIDwgMCA/XG5cdFx0XHRcdC8vIEJNUCBjb2RlcG9pbnRcblx0XHRcdFx0U3RyaW5nLmZyb21DaGFyQ29kZSggaGlnaCArIDB4MTAwMDAgKSA6XG5cdFx0XHRcdC8vIFN1cHBsZW1lbnRhbCBQbGFuZSBjb2RlcG9pbnQgKHN1cnJvZ2F0ZSBwYWlyKVxuXHRcdFx0XHRTdHJpbmcuZnJvbUNoYXJDb2RlKCBoaWdoID4+IDEwIHwgMHhEODAwLCBoaWdoICYgMHgzRkYgfCAweERDMDAgKTtcblx0fSxcblxuXHQvLyBDU1Mgc3RyaW5nL2lkZW50aWZpZXIgc2VyaWFsaXphdGlvblxuXHQvLyBodHRwczovL2RyYWZ0cy5jc3N3Zy5vcmcvY3Nzb20vI2NvbW1vbi1zZXJpYWxpemluZy1pZGlvbXNcblx0cmNzc2VzY2FwZSA9IC8oW1xcMC1cXHgxZlxceDdmXXxeLT9cXGQpfF4tJHxbXlxcMC1cXHgxZlxceDdmLVxcdUZGRkZcXHctXS9nLFxuXHRmY3NzZXNjYXBlID0gZnVuY3Rpb24oIGNoLCBhc0NvZGVQb2ludCApIHtcblx0XHRpZiAoIGFzQ29kZVBvaW50ICkge1xuXG5cdFx0XHQvLyBVKzAwMDAgTlVMTCBiZWNvbWVzIFUrRkZGRCBSRVBMQUNFTUVOVCBDSEFSQUNURVJcblx0XHRcdGlmICggY2ggPT09IFwiXFwwXCIgKSB7XG5cdFx0XHRcdHJldHVybiBcIlxcdUZGRkRcIjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQ29udHJvbCBjaGFyYWN0ZXJzIGFuZCAoZGVwZW5kZW50IHVwb24gcG9zaXRpb24pIG51bWJlcnMgZ2V0IGVzY2FwZWQgYXMgY29kZSBwb2ludHNcblx0XHRcdHJldHVybiBjaC5zbGljZSggMCwgLTEgKSArIFwiXFxcXFwiICsgY2guY2hhckNvZGVBdCggY2gubGVuZ3RoIC0gMSApLnRvU3RyaW5nKCAxNiApICsgXCIgXCI7XG5cdFx0fVxuXG5cdFx0Ly8gT3RoZXIgcG90ZW50aWFsbHktc3BlY2lhbCBBU0NJSSBjaGFyYWN0ZXJzIGdldCBiYWNrc2xhc2gtZXNjYXBlZFxuXHRcdHJldHVybiBcIlxcXFxcIiArIGNoO1xuXHR9LFxuXG5cdC8vIFVzZWQgZm9yIGlmcmFtZXNcblx0Ly8gU2VlIHNldERvY3VtZW50KClcblx0Ly8gUmVtb3ZpbmcgdGhlIGZ1bmN0aW9uIHdyYXBwZXIgY2F1c2VzIGEgXCJQZXJtaXNzaW9uIERlbmllZFwiXG5cdC8vIGVycm9yIGluIElFXG5cdHVubG9hZEhhbmRsZXIgPSBmdW5jdGlvbigpIHtcblx0XHRzZXREb2N1bWVudCgpO1xuXHR9LFxuXG5cdGluRGlzYWJsZWRGaWVsZHNldCA9IGFkZENvbWJpbmF0b3IoXG5cdFx0ZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gZWxlbS5kaXNhYmxlZCA9PT0gdHJ1ZSAmJiBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09IFwiZmllbGRzZXRcIjtcblx0XHR9LFxuXHRcdHsgZGlyOiBcInBhcmVudE5vZGVcIiwgbmV4dDogXCJsZWdlbmRcIiB9XG5cdCk7XG5cbi8vIE9wdGltaXplIGZvciBwdXNoLmFwcGx5KCBfLCBOb2RlTGlzdCApXG50cnkge1xuXHRwdXNoLmFwcGx5KFxuXHRcdChhcnIgPSBzbGljZS5jYWxsKCBwcmVmZXJyZWREb2MuY2hpbGROb2RlcyApKSxcblx0XHRwcmVmZXJyZWREb2MuY2hpbGROb2Rlc1xuXHQpO1xuXHQvLyBTdXBwb3J0OiBBbmRyb2lkPDQuMFxuXHQvLyBEZXRlY3Qgc2lsZW50bHkgZmFpbGluZyBwdXNoLmFwcGx5XG5cdGFyclsgcHJlZmVycmVkRG9jLmNoaWxkTm9kZXMubGVuZ3RoIF0ubm9kZVR5cGU7XG59IGNhdGNoICggZSApIHtcblx0cHVzaCA9IHsgYXBwbHk6IGFyci5sZW5ndGggP1xuXG5cdFx0Ly8gTGV2ZXJhZ2Ugc2xpY2UgaWYgcG9zc2libGVcblx0XHRmdW5jdGlvbiggdGFyZ2V0LCBlbHMgKSB7XG5cdFx0XHRwdXNoX25hdGl2ZS5hcHBseSggdGFyZ2V0LCBzbGljZS5jYWxsKGVscykgKTtcblx0XHR9IDpcblxuXHRcdC8vIFN1cHBvcnQ6IElFPDlcblx0XHQvLyBPdGhlcndpc2UgYXBwZW5kIGRpcmVjdGx5XG5cdFx0ZnVuY3Rpb24oIHRhcmdldCwgZWxzICkge1xuXHRcdFx0dmFyIGogPSB0YXJnZXQubGVuZ3RoLFxuXHRcdFx0XHRpID0gMDtcblx0XHRcdC8vIENhbid0IHRydXN0IE5vZGVMaXN0Lmxlbmd0aFxuXHRcdFx0d2hpbGUgKCAodGFyZ2V0W2orK10gPSBlbHNbaSsrXSkgKSB7fVxuXHRcdFx0dGFyZ2V0Lmxlbmd0aCA9IGogLSAxO1xuXHRcdH1cblx0fTtcbn1cblxuZnVuY3Rpb24gU2l6emxlKCBzZWxlY3RvciwgY29udGV4dCwgcmVzdWx0cywgc2VlZCApIHtcblx0dmFyIG0sIGksIGVsZW0sIG5pZCwgbWF0Y2gsIGdyb3VwcywgbmV3U2VsZWN0b3IsXG5cdFx0bmV3Q29udGV4dCA9IGNvbnRleHQgJiYgY29udGV4dC5vd25lckRvY3VtZW50LFxuXG5cdFx0Ly8gbm9kZVR5cGUgZGVmYXVsdHMgdG8gOSwgc2luY2UgY29udGV4dCBkZWZhdWx0cyB0byBkb2N1bWVudFxuXHRcdG5vZGVUeXBlID0gY29udGV4dCA/IGNvbnRleHQubm9kZVR5cGUgOiA5O1xuXG5cdHJlc3VsdHMgPSByZXN1bHRzIHx8IFtdO1xuXG5cdC8vIFJldHVybiBlYXJseSBmcm9tIGNhbGxzIHdpdGggaW52YWxpZCBzZWxlY3RvciBvciBjb250ZXh0XG5cdGlmICggdHlwZW9mIHNlbGVjdG9yICE9PSBcInN0cmluZ1wiIHx8ICFzZWxlY3RvciB8fFxuXHRcdG5vZGVUeXBlICE9PSAxICYmIG5vZGVUeXBlICE9PSA5ICYmIG5vZGVUeXBlICE9PSAxMSApIHtcblxuXHRcdHJldHVybiByZXN1bHRzO1xuXHR9XG5cblx0Ly8gVHJ5IHRvIHNob3J0Y3V0IGZpbmQgb3BlcmF0aW9ucyAoYXMgb3Bwb3NlZCB0byBmaWx0ZXJzKSBpbiBIVE1MIGRvY3VtZW50c1xuXHRpZiAoICFzZWVkICkge1xuXG5cdFx0aWYgKCAoIGNvbnRleHQgPyBjb250ZXh0Lm93bmVyRG9jdW1lbnQgfHwgY29udGV4dCA6IHByZWZlcnJlZERvYyApICE9PSBkb2N1bWVudCApIHtcblx0XHRcdHNldERvY3VtZW50KCBjb250ZXh0ICk7XG5cdFx0fVxuXHRcdGNvbnRleHQgPSBjb250ZXh0IHx8IGRvY3VtZW50O1xuXG5cdFx0aWYgKCBkb2N1bWVudElzSFRNTCApIHtcblxuXHRcdFx0Ly8gSWYgdGhlIHNlbGVjdG9yIGlzIHN1ZmZpY2llbnRseSBzaW1wbGUsIHRyeSB1c2luZyBhIFwiZ2V0KkJ5KlwiIERPTSBtZXRob2Rcblx0XHRcdC8vIChleGNlcHRpbmcgRG9jdW1lbnRGcmFnbWVudCBjb250ZXh0LCB3aGVyZSB0aGUgbWV0aG9kcyBkb24ndCBleGlzdClcblx0XHRcdGlmICggbm9kZVR5cGUgIT09IDExICYmIChtYXRjaCA9IHJxdWlja0V4cHIuZXhlYyggc2VsZWN0b3IgKSkgKSB7XG5cblx0XHRcdFx0Ly8gSUQgc2VsZWN0b3Jcblx0XHRcdFx0aWYgKCAobSA9IG1hdGNoWzFdKSApIHtcblxuXHRcdFx0XHRcdC8vIERvY3VtZW50IGNvbnRleHRcblx0XHRcdFx0XHRpZiAoIG5vZGVUeXBlID09PSA5ICkge1xuXHRcdFx0XHRcdFx0aWYgKCAoZWxlbSA9IGNvbnRleHQuZ2V0RWxlbWVudEJ5SWQoIG0gKSkgKSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUsIE9wZXJhLCBXZWJraXRcblx0XHRcdFx0XHRcdFx0Ly8gVE9ETzogaWRlbnRpZnkgdmVyc2lvbnNcblx0XHRcdFx0XHRcdFx0Ly8gZ2V0RWxlbWVudEJ5SWQgY2FuIG1hdGNoIGVsZW1lbnRzIGJ5IG5hbWUgaW5zdGVhZCBvZiBJRFxuXHRcdFx0XHRcdFx0XHRpZiAoIGVsZW0uaWQgPT09IG0gKSB7XG5cdFx0XHRcdFx0XHRcdFx0cmVzdWx0cy5wdXNoKCBlbGVtICk7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHJlc3VsdHM7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiByZXN1bHRzO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gRWxlbWVudCBjb250ZXh0XG5cdFx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUsIE9wZXJhLCBXZWJraXRcblx0XHRcdFx0XHRcdC8vIFRPRE86IGlkZW50aWZ5IHZlcnNpb25zXG5cdFx0XHRcdFx0XHQvLyBnZXRFbGVtZW50QnlJZCBjYW4gbWF0Y2ggZWxlbWVudHMgYnkgbmFtZSBpbnN0ZWFkIG9mIElEXG5cdFx0XHRcdFx0XHRpZiAoIG5ld0NvbnRleHQgJiYgKGVsZW0gPSBuZXdDb250ZXh0LmdldEVsZW1lbnRCeUlkKCBtICkpICYmXG5cdFx0XHRcdFx0XHRcdGNvbnRhaW5zKCBjb250ZXh0LCBlbGVtICkgJiZcblx0XHRcdFx0XHRcdFx0ZWxlbS5pZCA9PT0gbSApIHtcblxuXHRcdFx0XHRcdFx0XHRyZXN1bHRzLnB1c2goIGVsZW0gKTtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHJlc3VsdHM7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFR5cGUgc2VsZWN0b3Jcblx0XHRcdFx0fSBlbHNlIGlmICggbWF0Y2hbMl0gKSB7XG5cdFx0XHRcdFx0cHVzaC5hcHBseSggcmVzdWx0cywgY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSggc2VsZWN0b3IgKSApO1xuXHRcdFx0XHRcdHJldHVybiByZXN1bHRzO1xuXG5cdFx0XHRcdC8vIENsYXNzIHNlbGVjdG9yXG5cdFx0XHRcdH0gZWxzZSBpZiAoIChtID0gbWF0Y2hbM10pICYmIHN1cHBvcnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSAmJlxuXHRcdFx0XHRcdGNvbnRleHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSApIHtcblxuXHRcdFx0XHRcdHB1c2guYXBwbHkoIHJlc3VsdHMsIGNvbnRleHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSggbSApICk7XG5cdFx0XHRcdFx0cmV0dXJuIHJlc3VsdHM7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gVGFrZSBhZHZhbnRhZ2Ugb2YgcXVlcnlTZWxlY3RvckFsbFxuXHRcdFx0aWYgKCBzdXBwb3J0LnFzYSAmJlxuXHRcdFx0XHQhbm9ubmF0aXZlU2VsZWN0b3JDYWNoZVsgc2VsZWN0b3IgKyBcIiBcIiBdICYmXG5cdFx0XHRcdCghcmJ1Z2d5UVNBIHx8ICFyYnVnZ3lRU0EudGVzdCggc2VsZWN0b3IgKSkgJiZcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA4IG9ubHlcblx0XHRcdFx0Ly8gRXhjbHVkZSBvYmplY3QgZWxlbWVudHNcblx0XHRcdFx0KG5vZGVUeXBlICE9PSAxIHx8IGNvbnRleHQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSAhPT0gXCJvYmplY3RcIikgKSB7XG5cblx0XHRcdFx0bmV3U2VsZWN0b3IgPSBzZWxlY3Rvcjtcblx0XHRcdFx0bmV3Q29udGV4dCA9IGNvbnRleHQ7XG5cblx0XHRcdFx0Ly8gcVNBIGNvbnNpZGVycyBlbGVtZW50cyBvdXRzaWRlIGEgc2NvcGluZyByb290IHdoZW4gZXZhbHVhdGluZyBjaGlsZCBvclxuXHRcdFx0XHQvLyBkZXNjZW5kYW50IGNvbWJpbmF0b3JzLCB3aGljaCBpcyBub3Qgd2hhdCB3ZSB3YW50LlxuXHRcdFx0XHQvLyBJbiBzdWNoIGNhc2VzLCB3ZSB3b3JrIGFyb3VuZCB0aGUgYmVoYXZpb3IgYnkgcHJlZml4aW5nIGV2ZXJ5IHNlbGVjdG9yIGluIHRoZVxuXHRcdFx0XHQvLyBsaXN0IHdpdGggYW4gSUQgc2VsZWN0b3IgcmVmZXJlbmNpbmcgdGhlIHNjb3BlIGNvbnRleHQuXG5cdFx0XHRcdC8vIFRoYW5rcyB0byBBbmRyZXcgRHVwb250IGZvciB0aGlzIHRlY2huaXF1ZS5cblx0XHRcdFx0aWYgKCBub2RlVHlwZSA9PT0gMSAmJiByZGVzY2VuZC50ZXN0KCBzZWxlY3RvciApICkge1xuXG5cdFx0XHRcdFx0Ly8gQ2FwdHVyZSB0aGUgY29udGV4dCBJRCwgc2V0dGluZyBpdCBmaXJzdCBpZiBuZWNlc3Nhcnlcblx0XHRcdFx0XHRpZiAoIChuaWQgPSBjb250ZXh0LmdldEF0dHJpYnV0ZSggXCJpZFwiICkpICkge1xuXHRcdFx0XHRcdFx0bmlkID0gbmlkLnJlcGxhY2UoIHJjc3Nlc2NhcGUsIGZjc3Nlc2NhcGUgKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0Y29udGV4dC5zZXRBdHRyaWJ1dGUoIFwiaWRcIiwgKG5pZCA9IGV4cGFuZG8pICk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gUHJlZml4IGV2ZXJ5IHNlbGVjdG9yIGluIHRoZSBsaXN0XG5cdFx0XHRcdFx0Z3JvdXBzID0gdG9rZW5pemUoIHNlbGVjdG9yICk7XG5cdFx0XHRcdFx0aSA9IGdyb3Vwcy5sZW5ndGg7XG5cdFx0XHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRcdFx0XHRncm91cHNbaV0gPSBcIiNcIiArIG5pZCArIFwiIFwiICsgdG9TZWxlY3RvciggZ3JvdXBzW2ldICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdG5ld1NlbGVjdG9yID0gZ3JvdXBzLmpvaW4oIFwiLFwiICk7XG5cblx0XHRcdFx0XHQvLyBFeHBhbmQgY29udGV4dCBmb3Igc2libGluZyBzZWxlY3RvcnNcblx0XHRcdFx0XHRuZXdDb250ZXh0ID0gcnNpYmxpbmcudGVzdCggc2VsZWN0b3IgKSAmJiB0ZXN0Q29udGV4dCggY29udGV4dC5wYXJlbnROb2RlICkgfHxcblx0XHRcdFx0XHRcdGNvbnRleHQ7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdHB1c2guYXBwbHkoIHJlc3VsdHMsXG5cdFx0XHRcdFx0XHRuZXdDb250ZXh0LnF1ZXJ5U2VsZWN0b3JBbGwoIG5ld1NlbGVjdG9yIClcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdHJldHVybiByZXN1bHRzO1xuXHRcdFx0XHR9IGNhdGNoICggcXNhRXJyb3IgKSB7XG5cdFx0XHRcdFx0bm9ubmF0aXZlU2VsZWN0b3JDYWNoZSggc2VsZWN0b3IsIHRydWUgKTtcblx0XHRcdFx0fSBmaW5hbGx5IHtcblx0XHRcdFx0XHRpZiAoIG5pZCA9PT0gZXhwYW5kbyApIHtcblx0XHRcdFx0XHRcdGNvbnRleHQucmVtb3ZlQXR0cmlidXRlKCBcImlkXCIgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBBbGwgb3RoZXJzXG5cdHJldHVybiBzZWxlY3QoIHNlbGVjdG9yLnJlcGxhY2UoIHJ0cmltLCBcIiQxXCIgKSwgY29udGV4dCwgcmVzdWx0cywgc2VlZCApO1xufVxuXG4vKipcbiAqIENyZWF0ZSBrZXktdmFsdWUgY2FjaGVzIG9mIGxpbWl0ZWQgc2l6ZVxuICogQHJldHVybnMge2Z1bmN0aW9uKHN0cmluZywgb2JqZWN0KX0gUmV0dXJucyB0aGUgT2JqZWN0IGRhdGEgYWZ0ZXIgc3RvcmluZyBpdCBvbiBpdHNlbGYgd2l0aFxuICpcdHByb3BlcnR5IG5hbWUgdGhlIChzcGFjZS1zdWZmaXhlZCkgc3RyaW5nIGFuZCAoaWYgdGhlIGNhY2hlIGlzIGxhcmdlciB0aGFuIEV4cHIuY2FjaGVMZW5ndGgpXG4gKlx0ZGVsZXRpbmcgdGhlIG9sZGVzdCBlbnRyeVxuICovXG5mdW5jdGlvbiBjcmVhdGVDYWNoZSgpIHtcblx0dmFyIGtleXMgPSBbXTtcblxuXHRmdW5jdGlvbiBjYWNoZSgga2V5LCB2YWx1ZSApIHtcblx0XHQvLyBVc2UgKGtleSArIFwiIFwiKSB0byBhdm9pZCBjb2xsaXNpb24gd2l0aCBuYXRpdmUgcHJvdG90eXBlIHByb3BlcnRpZXMgKHNlZSBJc3N1ZSAjMTU3KVxuXHRcdGlmICgga2V5cy5wdXNoKCBrZXkgKyBcIiBcIiApID4gRXhwci5jYWNoZUxlbmd0aCApIHtcblx0XHRcdC8vIE9ubHkga2VlcCB0aGUgbW9zdCByZWNlbnQgZW50cmllc1xuXHRcdFx0ZGVsZXRlIGNhY2hlWyBrZXlzLnNoaWZ0KCkgXTtcblx0XHR9XG5cdFx0cmV0dXJuIChjYWNoZVsga2V5ICsgXCIgXCIgXSA9IHZhbHVlKTtcblx0fVxuXHRyZXR1cm4gY2FjaGU7XG59XG5cbi8qKlxuICogTWFyayBhIGZ1bmN0aW9uIGZvciBzcGVjaWFsIHVzZSBieSBTaXp6bGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBmdW5jdGlvbiB0byBtYXJrXG4gKi9cbmZ1bmN0aW9uIG1hcmtGdW5jdGlvbiggZm4gKSB7XG5cdGZuWyBleHBhbmRvIF0gPSB0cnVlO1xuXHRyZXR1cm4gZm47XG59XG5cbi8qKlxuICogU3VwcG9ydCB0ZXN0aW5nIHVzaW5nIGFuIGVsZW1lbnRcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFBhc3NlZCB0aGUgY3JlYXRlZCBlbGVtZW50IGFuZCByZXR1cm5zIGEgYm9vbGVhbiByZXN1bHRcbiAqL1xuZnVuY3Rpb24gYXNzZXJ0KCBmbiApIHtcblx0dmFyIGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImZpZWxkc2V0XCIpO1xuXG5cdHRyeSB7XG5cdFx0cmV0dXJuICEhZm4oIGVsICk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH0gZmluYWxseSB7XG5cdFx0Ly8gUmVtb3ZlIGZyb20gaXRzIHBhcmVudCBieSBkZWZhdWx0XG5cdFx0aWYgKCBlbC5wYXJlbnROb2RlICkge1xuXHRcdFx0ZWwucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCggZWwgKTtcblx0XHR9XG5cdFx0Ly8gcmVsZWFzZSBtZW1vcnkgaW4gSUVcblx0XHRlbCA9IG51bGw7XG5cdH1cbn1cblxuLyoqXG4gKiBBZGRzIHRoZSBzYW1lIGhhbmRsZXIgZm9yIGFsbCBvZiB0aGUgc3BlY2lmaWVkIGF0dHJzXG4gKiBAcGFyYW0ge1N0cmluZ30gYXR0cnMgUGlwZS1zZXBhcmF0ZWQgbGlzdCBvZiBhdHRyaWJ1dGVzXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBoYW5kbGVyIFRoZSBtZXRob2QgdGhhdCB3aWxsIGJlIGFwcGxpZWRcbiAqL1xuZnVuY3Rpb24gYWRkSGFuZGxlKCBhdHRycywgaGFuZGxlciApIHtcblx0dmFyIGFyciA9IGF0dHJzLnNwbGl0KFwifFwiKSxcblx0XHRpID0gYXJyLmxlbmd0aDtcblxuXHR3aGlsZSAoIGktLSApIHtcblx0XHRFeHByLmF0dHJIYW5kbGVbIGFycltpXSBdID0gaGFuZGxlcjtcblx0fVxufVxuXG4vKipcbiAqIENoZWNrcyBkb2N1bWVudCBvcmRlciBvZiB0d28gc2libGluZ3NcbiAqIEBwYXJhbSB7RWxlbWVudH0gYVxuICogQHBhcmFtIHtFbGVtZW50fSBiXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBSZXR1cm5zIGxlc3MgdGhhbiAwIGlmIGEgcHJlY2VkZXMgYiwgZ3JlYXRlciB0aGFuIDAgaWYgYSBmb2xsb3dzIGJcbiAqL1xuZnVuY3Rpb24gc2libGluZ0NoZWNrKCBhLCBiICkge1xuXHR2YXIgY3VyID0gYiAmJiBhLFxuXHRcdGRpZmYgPSBjdXIgJiYgYS5ub2RlVHlwZSA9PT0gMSAmJiBiLm5vZGVUeXBlID09PSAxICYmXG5cdFx0XHRhLnNvdXJjZUluZGV4IC0gYi5zb3VyY2VJbmRleDtcblxuXHQvLyBVc2UgSUUgc291cmNlSW5kZXggaWYgYXZhaWxhYmxlIG9uIGJvdGggbm9kZXNcblx0aWYgKCBkaWZmICkge1xuXHRcdHJldHVybiBkaWZmO1xuXHR9XG5cblx0Ly8gQ2hlY2sgaWYgYiBmb2xsb3dzIGFcblx0aWYgKCBjdXIgKSB7XG5cdFx0d2hpbGUgKCAoY3VyID0gY3VyLm5leHRTaWJsaW5nKSApIHtcblx0XHRcdGlmICggY3VyID09PSBiICkge1xuXHRcdFx0XHRyZXR1cm4gLTE7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGEgPyAxIDogLTE7XG59XG5cbi8qKlxuICogUmV0dXJucyBhIGZ1bmN0aW9uIHRvIHVzZSBpbiBwc2V1ZG9zIGZvciBpbnB1dCB0eXBlc1xuICogQHBhcmFtIHtTdHJpbmd9IHR5cGVcbiAqL1xuZnVuY3Rpb24gY3JlYXRlSW5wdXRQc2V1ZG8oIHR5cGUgKSB7XG5cdHJldHVybiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHR2YXIgbmFtZSA9IGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcblx0XHRyZXR1cm4gbmFtZSA9PT0gXCJpbnB1dFwiICYmIGVsZW0udHlwZSA9PT0gdHlwZTtcblx0fTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgZnVuY3Rpb24gdG8gdXNlIGluIHBzZXVkb3MgZm9yIGJ1dHRvbnNcbiAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUJ1dHRvblBzZXVkbyggdHlwZSApIHtcblx0cmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHZhciBuYW1lID0gZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuXHRcdHJldHVybiAobmFtZSA9PT0gXCJpbnB1dFwiIHx8IG5hbWUgPT09IFwiYnV0dG9uXCIpICYmIGVsZW0udHlwZSA9PT0gdHlwZTtcblx0fTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgZnVuY3Rpb24gdG8gdXNlIGluIHBzZXVkb3MgZm9yIDplbmFibGVkLzpkaXNhYmxlZFxuICogQHBhcmFtIHtCb29sZWFufSBkaXNhYmxlZCB0cnVlIGZvciA6ZGlzYWJsZWQ7IGZhbHNlIGZvciA6ZW5hYmxlZFxuICovXG5mdW5jdGlvbiBjcmVhdGVEaXNhYmxlZFBzZXVkbyggZGlzYWJsZWQgKSB7XG5cblx0Ly8gS25vd24gOmRpc2FibGVkIGZhbHNlIHBvc2l0aXZlczogZmllbGRzZXRbZGlzYWJsZWRdID4gbGVnZW5kOm50aC1vZi10eXBlKG4rMikgOmNhbi1kaXNhYmxlXG5cdHJldHVybiBmdW5jdGlvbiggZWxlbSApIHtcblxuXHRcdC8vIE9ubHkgY2VydGFpbiBlbGVtZW50cyBjYW4gbWF0Y2ggOmVuYWJsZWQgb3IgOmRpc2FibGVkXG5cdFx0Ly8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc2NyaXB0aW5nLmh0bWwjc2VsZWN0b3ItZW5hYmxlZFxuXHRcdC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3NjcmlwdGluZy5odG1sI3NlbGVjdG9yLWRpc2FibGVkXG5cdFx0aWYgKCBcImZvcm1cIiBpbiBlbGVtICkge1xuXG5cdFx0XHQvLyBDaGVjayBmb3IgaW5oZXJpdGVkIGRpc2FibGVkbmVzcyBvbiByZWxldmFudCBub24tZGlzYWJsZWQgZWxlbWVudHM6XG5cdFx0XHQvLyAqIGxpc3RlZCBmb3JtLWFzc29jaWF0ZWQgZWxlbWVudHMgaW4gYSBkaXNhYmxlZCBmaWVsZHNldFxuXHRcdFx0Ly8gICBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9mb3Jtcy5odG1sI2NhdGVnb3J5LWxpc3RlZFxuXHRcdFx0Ly8gICBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9mb3Jtcy5odG1sI2NvbmNlcHQtZmUtZGlzYWJsZWRcblx0XHRcdC8vICogb3B0aW9uIGVsZW1lbnRzIGluIGEgZGlzYWJsZWQgb3B0Z3JvdXBcblx0XHRcdC8vICAgaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvZm9ybXMuaHRtbCNjb25jZXB0LW9wdGlvbi1kaXNhYmxlZFxuXHRcdFx0Ly8gQWxsIHN1Y2ggZWxlbWVudHMgaGF2ZSBhIFwiZm9ybVwiIHByb3BlcnR5LlxuXHRcdFx0aWYgKCBlbGVtLnBhcmVudE5vZGUgJiYgZWxlbS5kaXNhYmxlZCA9PT0gZmFsc2UgKSB7XG5cblx0XHRcdFx0Ly8gT3B0aW9uIGVsZW1lbnRzIGRlZmVyIHRvIGEgcGFyZW50IG9wdGdyb3VwIGlmIHByZXNlbnRcblx0XHRcdFx0aWYgKCBcImxhYmVsXCIgaW4gZWxlbSApIHtcblx0XHRcdFx0XHRpZiAoIFwibGFiZWxcIiBpbiBlbGVtLnBhcmVudE5vZGUgKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZWxlbS5wYXJlbnROb2RlLmRpc2FibGVkID09PSBkaXNhYmxlZDtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGVsZW0uZGlzYWJsZWQgPT09IGRpc2FibGVkO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDYgLSAxMVxuXHRcdFx0XHQvLyBVc2UgdGhlIGlzRGlzYWJsZWQgc2hvcnRjdXQgcHJvcGVydHkgdG8gY2hlY2sgZm9yIGRpc2FibGVkIGZpZWxkc2V0IGFuY2VzdG9yc1xuXHRcdFx0XHRyZXR1cm4gZWxlbS5pc0Rpc2FibGVkID09PSBkaXNhYmxlZCB8fFxuXG5cdFx0XHRcdFx0Ly8gV2hlcmUgdGhlcmUgaXMgbm8gaXNEaXNhYmxlZCwgY2hlY2sgbWFudWFsbHlcblx0XHRcdFx0XHQvKiBqc2hpbnQgLVcwMTggKi9cblx0XHRcdFx0XHRlbGVtLmlzRGlzYWJsZWQgIT09ICFkaXNhYmxlZCAmJlxuXHRcdFx0XHRcdFx0aW5EaXNhYmxlZEZpZWxkc2V0KCBlbGVtICkgPT09IGRpc2FibGVkO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZWxlbS5kaXNhYmxlZCA9PT0gZGlzYWJsZWQ7XG5cblx0XHQvLyBUcnkgdG8gd2lubm93IG91dCBlbGVtZW50cyB0aGF0IGNhbid0IGJlIGRpc2FibGVkIGJlZm9yZSB0cnVzdGluZyB0aGUgZGlzYWJsZWQgcHJvcGVydHkuXG5cdFx0Ly8gU29tZSB2aWN0aW1zIGdldCBjYXVnaHQgaW4gb3VyIG5ldCAobGFiZWwsIGxlZ2VuZCwgbWVudSwgdHJhY2spLCBidXQgaXQgc2hvdWxkbid0XG5cdFx0Ly8gZXZlbiBleGlzdCBvbiB0aGVtLCBsZXQgYWxvbmUgaGF2ZSBhIGJvb2xlYW4gdmFsdWUuXG5cdFx0fSBlbHNlIGlmICggXCJsYWJlbFwiIGluIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gZWxlbS5kaXNhYmxlZCA9PT0gZGlzYWJsZWQ7XG5cdFx0fVxuXG5cdFx0Ly8gUmVtYWluaW5nIGVsZW1lbnRzIGFyZSBuZWl0aGVyIDplbmFibGVkIG5vciA6ZGlzYWJsZWRcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH07XG59XG5cbi8qKlxuICogUmV0dXJucyBhIGZ1bmN0aW9uIHRvIHVzZSBpbiBwc2V1ZG9zIGZvciBwb3NpdGlvbmFsc1xuICogQHBhcmFtIHtGdW5jdGlvbn0gZm5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlUG9zaXRpb25hbFBzZXVkbyggZm4gKSB7XG5cdHJldHVybiBtYXJrRnVuY3Rpb24oZnVuY3Rpb24oIGFyZ3VtZW50ICkge1xuXHRcdGFyZ3VtZW50ID0gK2FyZ3VtZW50O1xuXHRcdHJldHVybiBtYXJrRnVuY3Rpb24oZnVuY3Rpb24oIHNlZWQsIG1hdGNoZXMgKSB7XG5cdFx0XHR2YXIgaixcblx0XHRcdFx0bWF0Y2hJbmRleGVzID0gZm4oIFtdLCBzZWVkLmxlbmd0aCwgYXJndW1lbnQgKSxcblx0XHRcdFx0aSA9IG1hdGNoSW5kZXhlcy5sZW5ndGg7XG5cblx0XHRcdC8vIE1hdGNoIGVsZW1lbnRzIGZvdW5kIGF0IHRoZSBzcGVjaWZpZWQgaW5kZXhlc1xuXHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRcdGlmICggc2VlZFsgKGogPSBtYXRjaEluZGV4ZXNbaV0pIF0gKSB7XG5cdFx0XHRcdFx0c2VlZFtqXSA9ICEobWF0Y2hlc1tqXSA9IHNlZWRbal0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH0pO1xufVxuXG4vKipcbiAqIENoZWNrcyBhIG5vZGUgZm9yIHZhbGlkaXR5IGFzIGEgU2l6emxlIGNvbnRleHRcbiAqIEBwYXJhbSB7RWxlbWVudHxPYmplY3Q9fSBjb250ZXh0XG4gKiBAcmV0dXJucyB7RWxlbWVudHxPYmplY3R8Qm9vbGVhbn0gVGhlIGlucHV0IG5vZGUgaWYgYWNjZXB0YWJsZSwgb3RoZXJ3aXNlIGEgZmFsc3kgdmFsdWVcbiAqL1xuZnVuY3Rpb24gdGVzdENvbnRleHQoIGNvbnRleHQgKSB7XG5cdHJldHVybiBjb250ZXh0ICYmIHR5cGVvZiBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lICE9PSBcInVuZGVmaW5lZFwiICYmIGNvbnRleHQ7XG59XG5cbi8vIEV4cG9zZSBzdXBwb3J0IHZhcnMgZm9yIGNvbnZlbmllbmNlXG5zdXBwb3J0ID0gU2l6emxlLnN1cHBvcnQgPSB7fTtcblxuLyoqXG4gKiBEZXRlY3RzIFhNTCBub2Rlc1xuICogQHBhcmFtIHtFbGVtZW50fE9iamVjdH0gZWxlbSBBbiBlbGVtZW50IG9yIGEgZG9jdW1lbnRcbiAqIEByZXR1cm5zIHtCb29sZWFufSBUcnVlIGlmZiBlbGVtIGlzIGEgbm9uLUhUTUwgWE1MIG5vZGVcbiAqL1xuaXNYTUwgPSBTaXp6bGUuaXNYTUwgPSBmdW5jdGlvbiggZWxlbSApIHtcblx0dmFyIG5hbWVzcGFjZSA9IGVsZW0ubmFtZXNwYWNlVVJJLFxuXHRcdGRvY0VsZW0gPSAoZWxlbS5vd25lckRvY3VtZW50IHx8IGVsZW0pLmRvY3VtZW50RWxlbWVudDtcblxuXHQvLyBTdXBwb3J0OiBJRSA8PThcblx0Ly8gQXNzdW1lIEhUTUwgd2hlbiBkb2N1bWVudEVsZW1lbnQgZG9lc24ndCB5ZXQgZXhpc3QsIHN1Y2ggYXMgaW5zaWRlIGxvYWRpbmcgaWZyYW1lc1xuXHQvLyBodHRwczovL2J1Z3MuanF1ZXJ5LmNvbS90aWNrZXQvNDgzM1xuXHRyZXR1cm4gIXJodG1sLnRlc3QoIG5hbWVzcGFjZSB8fCBkb2NFbGVtICYmIGRvY0VsZW0ubm9kZU5hbWUgfHwgXCJIVE1MXCIgKTtcbn07XG5cbi8qKlxuICogU2V0cyBkb2N1bWVudC1yZWxhdGVkIHZhcmlhYmxlcyBvbmNlIGJhc2VkIG9uIHRoZSBjdXJyZW50IGRvY3VtZW50XG4gKiBAcGFyYW0ge0VsZW1lbnR8T2JqZWN0fSBbZG9jXSBBbiBlbGVtZW50IG9yIGRvY3VtZW50IG9iamVjdCB0byB1c2UgdG8gc2V0IHRoZSBkb2N1bWVudFxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgY3VycmVudCBkb2N1bWVudFxuICovXG5zZXREb2N1bWVudCA9IFNpenpsZS5zZXREb2N1bWVudCA9IGZ1bmN0aW9uKCBub2RlICkge1xuXHR2YXIgaGFzQ29tcGFyZSwgc3ViV2luZG93LFxuXHRcdGRvYyA9IG5vZGUgPyBub2RlLm93bmVyRG9jdW1lbnQgfHwgbm9kZSA6IHByZWZlcnJlZERvYztcblxuXHQvLyBSZXR1cm4gZWFybHkgaWYgZG9jIGlzIGludmFsaWQgb3IgYWxyZWFkeSBzZWxlY3RlZFxuXHRpZiAoIGRvYyA9PT0gZG9jdW1lbnQgfHwgZG9jLm5vZGVUeXBlICE9PSA5IHx8ICFkb2MuZG9jdW1lbnRFbGVtZW50ICkge1xuXHRcdHJldHVybiBkb2N1bWVudDtcblx0fVxuXG5cdC8vIFVwZGF0ZSBnbG9iYWwgdmFyaWFibGVzXG5cdGRvY3VtZW50ID0gZG9jO1xuXHRkb2NFbGVtID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuXHRkb2N1bWVudElzSFRNTCA9ICFpc1hNTCggZG9jdW1lbnQgKTtcblxuXHQvLyBTdXBwb3J0OiBJRSA5LTExLCBFZGdlXG5cdC8vIEFjY2Vzc2luZyBpZnJhbWUgZG9jdW1lbnRzIGFmdGVyIHVubG9hZCB0aHJvd3MgXCJwZXJtaXNzaW9uIGRlbmllZFwiIGVycm9ycyAoalF1ZXJ5ICMxMzkzNilcblx0aWYgKCBwcmVmZXJyZWREb2MgIT09IGRvY3VtZW50ICYmXG5cdFx0KHN1YldpbmRvdyA9IGRvY3VtZW50LmRlZmF1bHRWaWV3KSAmJiBzdWJXaW5kb3cudG9wICE9PSBzdWJXaW5kb3cgKSB7XG5cblx0XHQvLyBTdXBwb3J0OiBJRSAxMSwgRWRnZVxuXHRcdGlmICggc3ViV2luZG93LmFkZEV2ZW50TGlzdGVuZXIgKSB7XG5cdFx0XHRzdWJXaW5kb3cuYWRkRXZlbnRMaXN0ZW5lciggXCJ1bmxvYWRcIiwgdW5sb2FkSGFuZGxlciwgZmFsc2UgKTtcblxuXHRcdC8vIFN1cHBvcnQ6IElFIDkgLSAxMCBvbmx5XG5cdFx0fSBlbHNlIGlmICggc3ViV2luZG93LmF0dGFjaEV2ZW50ICkge1xuXHRcdFx0c3ViV2luZG93LmF0dGFjaEV2ZW50KCBcIm9udW5sb2FkXCIsIHVubG9hZEhhbmRsZXIgKTtcblx0XHR9XG5cdH1cblxuXHQvKiBBdHRyaWJ1dGVzXG5cdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuXHQvLyBTdXBwb3J0OiBJRTw4XG5cdC8vIFZlcmlmeSB0aGF0IGdldEF0dHJpYnV0ZSByZWFsbHkgcmV0dXJucyBhdHRyaWJ1dGVzIGFuZCBub3QgcHJvcGVydGllc1xuXHQvLyAoZXhjZXB0aW5nIElFOCBib29sZWFucylcblx0c3VwcG9ydC5hdHRyaWJ1dGVzID0gYXNzZXJ0KGZ1bmN0aW9uKCBlbCApIHtcblx0XHRlbC5jbGFzc05hbWUgPSBcImlcIjtcblx0XHRyZXR1cm4gIWVsLmdldEF0dHJpYnV0ZShcImNsYXNzTmFtZVwiKTtcblx0fSk7XG5cblx0LyogZ2V0RWxlbWVudChzKUJ5KlxuXHQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cblx0Ly8gQ2hlY2sgaWYgZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCIqXCIpIHJldHVybnMgb25seSBlbGVtZW50c1xuXHRzdXBwb3J0LmdldEVsZW1lbnRzQnlUYWdOYW1lID0gYXNzZXJ0KGZ1bmN0aW9uKCBlbCApIHtcblx0XHRlbC5hcHBlbmRDaGlsZCggZG9jdW1lbnQuY3JlYXRlQ29tbWVudChcIlwiKSApO1xuXHRcdHJldHVybiAhZWwuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCIqXCIpLmxlbmd0aDtcblx0fSk7XG5cblx0Ly8gU3VwcG9ydDogSUU8OVxuXHRzdXBwb3J0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUgPSBybmF0aXZlLnRlc3QoIGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUgKTtcblxuXHQvLyBTdXBwb3J0OiBJRTwxMFxuXHQvLyBDaGVjayBpZiBnZXRFbGVtZW50QnlJZCByZXR1cm5zIGVsZW1lbnRzIGJ5IG5hbWVcblx0Ly8gVGhlIGJyb2tlbiBnZXRFbGVtZW50QnlJZCBtZXRob2RzIGRvbid0IHBpY2sgdXAgcHJvZ3JhbW1hdGljYWxseS1zZXQgbmFtZXMsXG5cdC8vIHNvIHVzZSBhIHJvdW5kYWJvdXQgZ2V0RWxlbWVudHNCeU5hbWUgdGVzdFxuXHRzdXBwb3J0LmdldEJ5SWQgPSBhc3NlcnQoZnVuY3Rpb24oIGVsICkge1xuXHRcdGRvY0VsZW0uYXBwZW5kQ2hpbGQoIGVsICkuaWQgPSBleHBhbmRvO1xuXHRcdHJldHVybiAhZG9jdW1lbnQuZ2V0RWxlbWVudHNCeU5hbWUgfHwgIWRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lKCBleHBhbmRvICkubGVuZ3RoO1xuXHR9KTtcblxuXHQvLyBJRCBmaWx0ZXIgYW5kIGZpbmRcblx0aWYgKCBzdXBwb3J0LmdldEJ5SWQgKSB7XG5cdFx0RXhwci5maWx0ZXJbXCJJRFwiXSA9IGZ1bmN0aW9uKCBpZCApIHtcblx0XHRcdHZhciBhdHRySWQgPSBpZC5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApO1xuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0XHRyZXR1cm4gZWxlbS5nZXRBdHRyaWJ1dGUoXCJpZFwiKSA9PT0gYXR0cklkO1xuXHRcdFx0fTtcblx0XHR9O1xuXHRcdEV4cHIuZmluZFtcIklEXCJdID0gZnVuY3Rpb24oIGlkLCBjb250ZXh0ICkge1xuXHRcdFx0aWYgKCB0eXBlb2YgY29udGV4dC5nZXRFbGVtZW50QnlJZCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBkb2N1bWVudElzSFRNTCApIHtcblx0XHRcdFx0dmFyIGVsZW0gPSBjb250ZXh0LmdldEVsZW1lbnRCeUlkKCBpZCApO1xuXHRcdFx0XHRyZXR1cm4gZWxlbSA/IFsgZWxlbSBdIDogW107XG5cdFx0XHR9XG5cdFx0fTtcblx0fSBlbHNlIHtcblx0XHRFeHByLmZpbHRlcltcIklEXCJdID0gIGZ1bmN0aW9uKCBpZCApIHtcblx0XHRcdHZhciBhdHRySWQgPSBpZC5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApO1xuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0XHR2YXIgbm9kZSA9IHR5cGVvZiBlbGVtLmdldEF0dHJpYnV0ZU5vZGUgIT09IFwidW5kZWZpbmVkXCIgJiZcblx0XHRcdFx0XHRlbGVtLmdldEF0dHJpYnV0ZU5vZGUoXCJpZFwiKTtcblx0XHRcdFx0cmV0dXJuIG5vZGUgJiYgbm9kZS52YWx1ZSA9PT0gYXR0cklkO1xuXHRcdFx0fTtcblx0XHR9O1xuXG5cdFx0Ly8gU3VwcG9ydDogSUUgNiAtIDcgb25seVxuXHRcdC8vIGdldEVsZW1lbnRCeUlkIGlzIG5vdCByZWxpYWJsZSBhcyBhIGZpbmQgc2hvcnRjdXRcblx0XHRFeHByLmZpbmRbXCJJRFwiXSA9IGZ1bmN0aW9uKCBpZCwgY29udGV4dCApIHtcblx0XHRcdGlmICggdHlwZW9mIGNvbnRleHQuZ2V0RWxlbWVudEJ5SWQgIT09IFwidW5kZWZpbmVkXCIgJiYgZG9jdW1lbnRJc0hUTUwgKSB7XG5cdFx0XHRcdHZhciBub2RlLCBpLCBlbGVtcyxcblx0XHRcdFx0XHRlbGVtID0gY29udGV4dC5nZXRFbGVtZW50QnlJZCggaWQgKTtcblxuXHRcdFx0XHRpZiAoIGVsZW0gKSB7XG5cblx0XHRcdFx0XHQvLyBWZXJpZnkgdGhlIGlkIGF0dHJpYnV0ZVxuXHRcdFx0XHRcdG5vZGUgPSBlbGVtLmdldEF0dHJpYnV0ZU5vZGUoXCJpZFwiKTtcblx0XHRcdFx0XHRpZiAoIG5vZGUgJiYgbm9kZS52YWx1ZSA9PT0gaWQgKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gWyBlbGVtIF07XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gRmFsbCBiYWNrIG9uIGdldEVsZW1lbnRzQnlOYW1lXG5cdFx0XHRcdFx0ZWxlbXMgPSBjb250ZXh0LmdldEVsZW1lbnRzQnlOYW1lKCBpZCApO1xuXHRcdFx0XHRcdGkgPSAwO1xuXHRcdFx0XHRcdHdoaWxlICggKGVsZW0gPSBlbGVtc1tpKytdKSApIHtcblx0XHRcdFx0XHRcdG5vZGUgPSBlbGVtLmdldEF0dHJpYnV0ZU5vZGUoXCJpZFwiKTtcblx0XHRcdFx0XHRcdGlmICggbm9kZSAmJiBub2RlLnZhbHVlID09PSBpZCApIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIFsgZWxlbSBdO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiBbXTtcblx0XHRcdH1cblx0XHR9O1xuXHR9XG5cblx0Ly8gVGFnXG5cdEV4cHIuZmluZFtcIlRBR1wiXSA9IHN1cHBvcnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUgP1xuXHRcdGZ1bmN0aW9uKCB0YWcsIGNvbnRleHQgKSB7XG5cdFx0XHRpZiAoIHR5cGVvZiBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lICE9PSBcInVuZGVmaW5lZFwiICkge1xuXHRcdFx0XHRyZXR1cm4gY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSggdGFnICk7XG5cblx0XHRcdC8vIERvY3VtZW50RnJhZ21lbnQgbm9kZXMgZG9uJ3QgaGF2ZSBnRUJUTlxuXHRcdFx0fSBlbHNlIGlmICggc3VwcG9ydC5xc2EgKSB7XG5cdFx0XHRcdHJldHVybiBjb250ZXh0LnF1ZXJ5U2VsZWN0b3JBbGwoIHRhZyApO1xuXHRcdFx0fVxuXHRcdH0gOlxuXG5cdFx0ZnVuY3Rpb24oIHRhZywgY29udGV4dCApIHtcblx0XHRcdHZhciBlbGVtLFxuXHRcdFx0XHR0bXAgPSBbXSxcblx0XHRcdFx0aSA9IDAsXG5cdFx0XHRcdC8vIEJ5IGhhcHB5IGNvaW5jaWRlbmNlLCBhIChicm9rZW4pIGdFQlROIGFwcGVhcnMgb24gRG9jdW1lbnRGcmFnbWVudCBub2RlcyB0b29cblx0XHRcdFx0cmVzdWx0cyA9IGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIHRhZyApO1xuXG5cdFx0XHQvLyBGaWx0ZXIgb3V0IHBvc3NpYmxlIGNvbW1lbnRzXG5cdFx0XHRpZiAoIHRhZyA9PT0gXCIqXCIgKSB7XG5cdFx0XHRcdHdoaWxlICggKGVsZW0gPSByZXN1bHRzW2krK10pICkge1xuXHRcdFx0XHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSApIHtcblx0XHRcdFx0XHRcdHRtcC5wdXNoKCBlbGVtICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIHRtcDtcblx0XHRcdH1cblx0XHRcdHJldHVybiByZXN1bHRzO1xuXHRcdH07XG5cblx0Ly8gQ2xhc3Ncblx0RXhwci5maW5kW1wiQ0xBU1NcIl0gPSBzdXBwb3J0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUgJiYgZnVuY3Rpb24oIGNsYXNzTmFtZSwgY29udGV4dCApIHtcblx0XHRpZiAoIHR5cGVvZiBjb250ZXh0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUgIT09IFwidW5kZWZpbmVkXCIgJiYgZG9jdW1lbnRJc0hUTUwgKSB7XG5cdFx0XHRyZXR1cm4gY29udGV4dC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCBjbGFzc05hbWUgKTtcblx0XHR9XG5cdH07XG5cblx0LyogUVNBL21hdGNoZXNTZWxlY3RvclxuXHQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cblx0Ly8gUVNBIGFuZCBtYXRjaGVzU2VsZWN0b3Igc3VwcG9ydFxuXG5cdC8vIG1hdGNoZXNTZWxlY3Rvcig6YWN0aXZlKSByZXBvcnRzIGZhbHNlIHdoZW4gdHJ1ZSAoSUU5L09wZXJhIDExLjUpXG5cdHJidWdneU1hdGNoZXMgPSBbXTtcblxuXHQvLyBxU2EoOmZvY3VzKSByZXBvcnRzIGZhbHNlIHdoZW4gdHJ1ZSAoQ2hyb21lIDIxKVxuXHQvLyBXZSBhbGxvdyB0aGlzIGJlY2F1c2Ugb2YgYSBidWcgaW4gSUU4LzkgdGhhdCB0aHJvd3MgYW4gZXJyb3Jcblx0Ly8gd2hlbmV2ZXIgYGRvY3VtZW50LmFjdGl2ZUVsZW1lbnRgIGlzIGFjY2Vzc2VkIG9uIGFuIGlmcmFtZVxuXHQvLyBTbywgd2UgYWxsb3cgOmZvY3VzIHRvIHBhc3MgdGhyb3VnaCBRU0EgYWxsIHRoZSB0aW1lIHRvIGF2b2lkIHRoZSBJRSBlcnJvclxuXHQvLyBTZWUgaHR0cHM6Ly9idWdzLmpxdWVyeS5jb20vdGlja2V0LzEzMzc4XG5cdHJidWdneVFTQSA9IFtdO1xuXG5cdGlmICggKHN1cHBvcnQucXNhID0gcm5hdGl2ZS50ZXN0KCBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsICkpICkge1xuXHRcdC8vIEJ1aWxkIFFTQSByZWdleFxuXHRcdC8vIFJlZ2V4IHN0cmF0ZWd5IGFkb3B0ZWQgZnJvbSBEaWVnbyBQZXJpbmlcblx0XHRhc3NlcnQoZnVuY3Rpb24oIGVsICkge1xuXHRcdFx0Ly8gU2VsZWN0IGlzIHNldCB0byBlbXB0eSBzdHJpbmcgb24gcHVycG9zZVxuXHRcdFx0Ly8gVGhpcyBpcyB0byB0ZXN0IElFJ3MgdHJlYXRtZW50IG9mIG5vdCBleHBsaWNpdGx5XG5cdFx0XHQvLyBzZXR0aW5nIGEgYm9vbGVhbiBjb250ZW50IGF0dHJpYnV0ZSxcblx0XHRcdC8vIHNpbmNlIGl0cyBwcmVzZW5jZSBzaG91bGQgYmUgZW5vdWdoXG5cdFx0XHQvLyBodHRwczovL2J1Z3MuanF1ZXJ5LmNvbS90aWNrZXQvMTIzNTlcblx0XHRcdGRvY0VsZW0uYXBwZW5kQ2hpbGQoIGVsICkuaW5uZXJIVE1MID0gXCI8YSBpZD0nXCIgKyBleHBhbmRvICsgXCInPjwvYT5cIiArXG5cdFx0XHRcdFwiPHNlbGVjdCBpZD0nXCIgKyBleHBhbmRvICsgXCItXFxyXFxcXCcgbXNhbGxvd2NhcHR1cmU9Jyc+XCIgK1xuXHRcdFx0XHRcIjxvcHRpb24gc2VsZWN0ZWQ9Jyc+PC9vcHRpb24+PC9zZWxlY3Q+XCI7XG5cblx0XHRcdC8vIFN1cHBvcnQ6IElFOCwgT3BlcmEgMTEtMTIuMTZcblx0XHRcdC8vIE5vdGhpbmcgc2hvdWxkIGJlIHNlbGVjdGVkIHdoZW4gZW1wdHkgc3RyaW5ncyBmb2xsb3cgXj0gb3IgJD0gb3IgKj1cblx0XHRcdC8vIFRoZSB0ZXN0IGF0dHJpYnV0ZSBtdXN0IGJlIHVua25vd24gaW4gT3BlcmEgYnV0IFwic2FmZVwiIGZvciBXaW5SVFxuXHRcdFx0Ly8gaHR0cHM6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS9pZS9oaDQ2NTM4OC5hc3B4I2F0dHJpYnV0ZV9zZWN0aW9uXG5cdFx0XHRpZiAoIGVsLnF1ZXJ5U2VsZWN0b3JBbGwoXCJbbXNhbGxvd2NhcHR1cmVePScnXVwiKS5sZW5ndGggKSB7XG5cdFx0XHRcdHJidWdneVFTQS5wdXNoKCBcIlsqXiRdPVwiICsgd2hpdGVzcGFjZSArIFwiKig/OicnfFxcXCJcXFwiKVwiICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFN1cHBvcnQ6IElFOFxuXHRcdFx0Ly8gQm9vbGVhbiBhdHRyaWJ1dGVzIGFuZCBcInZhbHVlXCIgYXJlIG5vdCB0cmVhdGVkIGNvcnJlY3RseVxuXHRcdFx0aWYgKCAhZWwucXVlcnlTZWxlY3RvckFsbChcIltzZWxlY3RlZF1cIikubGVuZ3RoICkge1xuXHRcdFx0XHRyYnVnZ3lRU0EucHVzaCggXCJcXFxcW1wiICsgd2hpdGVzcGFjZSArIFwiKig/OnZhbHVlfFwiICsgYm9vbGVhbnMgKyBcIilcIiApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBTdXBwb3J0OiBDaHJvbWU8MjksIEFuZHJvaWQ8NC40LCBTYWZhcmk8Ny4wKywgaU9TPDcuMCssIFBoYW50b21KUzwxLjkuOCtcblx0XHRcdGlmICggIWVsLnF1ZXJ5U2VsZWN0b3JBbGwoIFwiW2lkfj1cIiArIGV4cGFuZG8gKyBcIi1dXCIgKS5sZW5ndGggKSB7XG5cdFx0XHRcdHJidWdneVFTQS5wdXNoKFwifj1cIik7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFdlYmtpdC9PcGVyYSAtIDpjaGVja2VkIHNob3VsZCByZXR1cm4gc2VsZWN0ZWQgb3B0aW9uIGVsZW1lbnRzXG5cdFx0XHQvLyBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDExL1JFQy1jc3MzLXNlbGVjdG9ycy0yMDExMDkyOS8jY2hlY2tlZFxuXHRcdFx0Ly8gSUU4IHRocm93cyBlcnJvciBoZXJlIGFuZCB3aWxsIG5vdCBzZWUgbGF0ZXIgdGVzdHNcblx0XHRcdGlmICggIWVsLnF1ZXJ5U2VsZWN0b3JBbGwoXCI6Y2hlY2tlZFwiKS5sZW5ndGggKSB7XG5cdFx0XHRcdHJidWdneVFTQS5wdXNoKFwiOmNoZWNrZWRcIik7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFN1cHBvcnQ6IFNhZmFyaSA4KywgaU9TIDgrXG5cdFx0XHQvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM2ODUxXG5cdFx0XHQvLyBJbi1wYWdlIGBzZWxlY3RvciNpZCBzaWJsaW5nLWNvbWJpbmF0b3Igc2VsZWN0b3JgIGZhaWxzXG5cdFx0XHRpZiAoICFlbC5xdWVyeVNlbGVjdG9yQWxsKCBcImEjXCIgKyBleHBhbmRvICsgXCIrKlwiICkubGVuZ3RoICkge1xuXHRcdFx0XHRyYnVnZ3lRU0EucHVzaChcIi4jLitbK35dXCIpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0YXNzZXJ0KGZ1bmN0aW9uKCBlbCApIHtcblx0XHRcdGVsLmlubmVySFRNTCA9IFwiPGEgaHJlZj0nJyBkaXNhYmxlZD0nZGlzYWJsZWQnPjwvYT5cIiArXG5cdFx0XHRcdFwiPHNlbGVjdCBkaXNhYmxlZD0nZGlzYWJsZWQnPjxvcHRpb24vPjwvc2VsZWN0PlwiO1xuXG5cdFx0XHQvLyBTdXBwb3J0OiBXaW5kb3dzIDggTmF0aXZlIEFwcHNcblx0XHRcdC8vIFRoZSB0eXBlIGFuZCBuYW1lIGF0dHJpYnV0ZXMgYXJlIHJlc3RyaWN0ZWQgZHVyaW5nIC5pbm5lckhUTUwgYXNzaWdubWVudFxuXHRcdFx0dmFyIGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlucHV0XCIpO1xuXHRcdFx0aW5wdXQuc2V0QXR0cmlidXRlKCBcInR5cGVcIiwgXCJoaWRkZW5cIiApO1xuXHRcdFx0ZWwuYXBwZW5kQ2hpbGQoIGlucHV0ICkuc2V0QXR0cmlidXRlKCBcIm5hbWVcIiwgXCJEXCIgKTtcblxuXHRcdFx0Ly8gU3VwcG9ydDogSUU4XG5cdFx0XHQvLyBFbmZvcmNlIGNhc2Utc2Vuc2l0aXZpdHkgb2YgbmFtZSBhdHRyaWJ1dGVcblx0XHRcdGlmICggZWwucXVlcnlTZWxlY3RvckFsbChcIltuYW1lPWRdXCIpLmxlbmd0aCApIHtcblx0XHRcdFx0cmJ1Z2d5UVNBLnB1c2goIFwibmFtZVwiICsgd2hpdGVzcGFjZSArIFwiKlsqXiR8IX5dPz1cIiApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBGRiAzLjUgLSA6ZW5hYmxlZC86ZGlzYWJsZWQgYW5kIGhpZGRlbiBlbGVtZW50cyAoaGlkZGVuIGVsZW1lbnRzIGFyZSBzdGlsbCBlbmFibGVkKVxuXHRcdFx0Ly8gSUU4IHRocm93cyBlcnJvciBoZXJlIGFuZCB3aWxsIG5vdCBzZWUgbGF0ZXIgdGVzdHNcblx0XHRcdGlmICggZWwucXVlcnlTZWxlY3RvckFsbChcIjplbmFibGVkXCIpLmxlbmd0aCAhPT0gMiApIHtcblx0XHRcdFx0cmJ1Z2d5UVNBLnB1c2goIFwiOmVuYWJsZWRcIiwgXCI6ZGlzYWJsZWRcIiApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBTdXBwb3J0OiBJRTktMTErXG5cdFx0XHQvLyBJRSdzIDpkaXNhYmxlZCBzZWxlY3RvciBkb2VzIG5vdCBwaWNrIHVwIHRoZSBjaGlsZHJlbiBvZiBkaXNhYmxlZCBmaWVsZHNldHNcblx0XHRcdGRvY0VsZW0uYXBwZW5kQ2hpbGQoIGVsICkuZGlzYWJsZWQgPSB0cnVlO1xuXHRcdFx0aWYgKCBlbC5xdWVyeVNlbGVjdG9yQWxsKFwiOmRpc2FibGVkXCIpLmxlbmd0aCAhPT0gMiApIHtcblx0XHRcdFx0cmJ1Z2d5UVNBLnB1c2goIFwiOmVuYWJsZWRcIiwgXCI6ZGlzYWJsZWRcIiApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBPcGVyYSAxMC0xMSBkb2VzIG5vdCB0aHJvdyBvbiBwb3N0LWNvbW1hIGludmFsaWQgcHNldWRvc1xuXHRcdFx0ZWwucXVlcnlTZWxlY3RvckFsbChcIiosOnhcIik7XG5cdFx0XHRyYnVnZ3lRU0EucHVzaChcIiwuKjpcIik7XG5cdFx0fSk7XG5cdH1cblxuXHRpZiAoIChzdXBwb3J0Lm1hdGNoZXNTZWxlY3RvciA9IHJuYXRpdmUudGVzdCggKG1hdGNoZXMgPSBkb2NFbGVtLm1hdGNoZXMgfHxcblx0XHRkb2NFbGVtLndlYmtpdE1hdGNoZXNTZWxlY3RvciB8fFxuXHRcdGRvY0VsZW0ubW96TWF0Y2hlc1NlbGVjdG9yIHx8XG5cdFx0ZG9jRWxlbS5vTWF0Y2hlc1NlbGVjdG9yIHx8XG5cdFx0ZG9jRWxlbS5tc01hdGNoZXNTZWxlY3RvcikgKSkgKSB7XG5cblx0XHRhc3NlcnQoZnVuY3Rpb24oIGVsICkge1xuXHRcdFx0Ly8gQ2hlY2sgdG8gc2VlIGlmIGl0J3MgcG9zc2libGUgdG8gZG8gbWF0Y2hlc1NlbGVjdG9yXG5cdFx0XHQvLyBvbiBhIGRpc2Nvbm5lY3RlZCBub2RlIChJRSA5KVxuXHRcdFx0c3VwcG9ydC5kaXNjb25uZWN0ZWRNYXRjaCA9IG1hdGNoZXMuY2FsbCggZWwsIFwiKlwiICk7XG5cblx0XHRcdC8vIFRoaXMgc2hvdWxkIGZhaWwgd2l0aCBhbiBleGNlcHRpb25cblx0XHRcdC8vIEdlY2tvIGRvZXMgbm90IGVycm9yLCByZXR1cm5zIGZhbHNlIGluc3RlYWRcblx0XHRcdG1hdGNoZXMuY2FsbCggZWwsIFwiW3MhPScnXTp4XCIgKTtcblx0XHRcdHJidWdneU1hdGNoZXMucHVzaCggXCIhPVwiLCBwc2V1ZG9zICk7XG5cdFx0fSk7XG5cdH1cblxuXHRyYnVnZ3lRU0EgPSByYnVnZ3lRU0EubGVuZ3RoICYmIG5ldyBSZWdFeHAoIHJidWdneVFTQS5qb2luKFwifFwiKSApO1xuXHRyYnVnZ3lNYXRjaGVzID0gcmJ1Z2d5TWF0Y2hlcy5sZW5ndGggJiYgbmV3IFJlZ0V4cCggcmJ1Z2d5TWF0Y2hlcy5qb2luKFwifFwiKSApO1xuXG5cdC8qIENvbnRhaW5zXG5cdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblx0aGFzQ29tcGFyZSA9IHJuYXRpdmUudGVzdCggZG9jRWxlbS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiApO1xuXG5cdC8vIEVsZW1lbnQgY29udGFpbnMgYW5vdGhlclxuXHQvLyBQdXJwb3NlZnVsbHkgc2VsZi1leGNsdXNpdmVcblx0Ly8gQXMgaW4sIGFuIGVsZW1lbnQgZG9lcyBub3QgY29udGFpbiBpdHNlbGZcblx0Y29udGFpbnMgPSBoYXNDb21wYXJlIHx8IHJuYXRpdmUudGVzdCggZG9jRWxlbS5jb250YWlucyApID9cblx0XHRmdW5jdGlvbiggYSwgYiApIHtcblx0XHRcdHZhciBhZG93biA9IGEubm9kZVR5cGUgPT09IDkgPyBhLmRvY3VtZW50RWxlbWVudCA6IGEsXG5cdFx0XHRcdGJ1cCA9IGIgJiYgYi5wYXJlbnROb2RlO1xuXHRcdFx0cmV0dXJuIGEgPT09IGJ1cCB8fCAhISggYnVwICYmIGJ1cC5ub2RlVHlwZSA9PT0gMSAmJiAoXG5cdFx0XHRcdGFkb3duLmNvbnRhaW5zID9cblx0XHRcdFx0XHRhZG93bi5jb250YWlucyggYnVwICkgOlxuXHRcdFx0XHRcdGEuY29tcGFyZURvY3VtZW50UG9zaXRpb24gJiYgYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiggYnVwICkgJiAxNlxuXHRcdFx0KSk7XG5cdFx0fSA6XG5cdFx0ZnVuY3Rpb24oIGEsIGIgKSB7XG5cdFx0XHRpZiAoIGIgKSB7XG5cdFx0XHRcdHdoaWxlICggKGIgPSBiLnBhcmVudE5vZGUpICkge1xuXHRcdFx0XHRcdGlmICggYiA9PT0gYSApIHtcblx0XHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH07XG5cblx0LyogU29ydGluZ1xuXHQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cblx0Ly8gRG9jdW1lbnQgb3JkZXIgc29ydGluZ1xuXHRzb3J0T3JkZXIgPSBoYXNDb21wYXJlID9cblx0ZnVuY3Rpb24oIGEsIGIgKSB7XG5cblx0XHQvLyBGbGFnIGZvciBkdXBsaWNhdGUgcmVtb3ZhbFxuXHRcdGlmICggYSA9PT0gYiApIHtcblx0XHRcdGhhc0R1cGxpY2F0ZSA9IHRydWU7XG5cdFx0XHRyZXR1cm4gMDtcblx0XHR9XG5cblx0XHQvLyBTb3J0IG9uIG1ldGhvZCBleGlzdGVuY2UgaWYgb25seSBvbmUgaW5wdXQgaGFzIGNvbXBhcmVEb2N1bWVudFBvc2l0aW9uXG5cdFx0dmFyIGNvbXBhcmUgPSAhYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiAtICFiLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uO1xuXHRcdGlmICggY29tcGFyZSApIHtcblx0XHRcdHJldHVybiBjb21wYXJlO1xuXHRcdH1cblxuXHRcdC8vIENhbGN1bGF0ZSBwb3NpdGlvbiBpZiBib3RoIGlucHV0cyBiZWxvbmcgdG8gdGhlIHNhbWUgZG9jdW1lbnRcblx0XHRjb21wYXJlID0gKCBhLm93bmVyRG9jdW1lbnQgfHwgYSApID09PSAoIGIub3duZXJEb2N1bWVudCB8fCBiICkgP1xuXHRcdFx0YS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiggYiApIDpcblxuXHRcdFx0Ly8gT3RoZXJ3aXNlIHdlIGtub3cgdGhleSBhcmUgZGlzY29ubmVjdGVkXG5cdFx0XHQxO1xuXG5cdFx0Ly8gRGlzY29ubmVjdGVkIG5vZGVzXG5cdFx0aWYgKCBjb21wYXJlICYgMSB8fFxuXHRcdFx0KCFzdXBwb3J0LnNvcnREZXRhY2hlZCAmJiBiLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKCBhICkgPT09IGNvbXBhcmUpICkge1xuXG5cdFx0XHQvLyBDaG9vc2UgdGhlIGZpcnN0IGVsZW1lbnQgdGhhdCBpcyByZWxhdGVkIHRvIG91ciBwcmVmZXJyZWQgZG9jdW1lbnRcblx0XHRcdGlmICggYSA9PT0gZG9jdW1lbnQgfHwgYS5vd25lckRvY3VtZW50ID09PSBwcmVmZXJyZWREb2MgJiYgY29udGFpbnMocHJlZmVycmVkRG9jLCBhKSApIHtcblx0XHRcdFx0cmV0dXJuIC0xO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCBiID09PSBkb2N1bWVudCB8fCBiLm93bmVyRG9jdW1lbnQgPT09IHByZWZlcnJlZERvYyAmJiBjb250YWlucyhwcmVmZXJyZWREb2MsIGIpICkge1xuXHRcdFx0XHRyZXR1cm4gMTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gTWFpbnRhaW4gb3JpZ2luYWwgb3JkZXJcblx0XHRcdHJldHVybiBzb3J0SW5wdXQgP1xuXHRcdFx0XHQoIGluZGV4T2YoIHNvcnRJbnB1dCwgYSApIC0gaW5kZXhPZiggc29ydElucHV0LCBiICkgKSA6XG5cdFx0XHRcdDA7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGNvbXBhcmUgJiA0ID8gLTEgOiAxO1xuXHR9IDpcblx0ZnVuY3Rpb24oIGEsIGIgKSB7XG5cdFx0Ly8gRXhpdCBlYXJseSBpZiB0aGUgbm9kZXMgYXJlIGlkZW50aWNhbFxuXHRcdGlmICggYSA9PT0gYiApIHtcblx0XHRcdGhhc0R1cGxpY2F0ZSA9IHRydWU7XG5cdFx0XHRyZXR1cm4gMDtcblx0XHR9XG5cblx0XHR2YXIgY3VyLFxuXHRcdFx0aSA9IDAsXG5cdFx0XHRhdXAgPSBhLnBhcmVudE5vZGUsXG5cdFx0XHRidXAgPSBiLnBhcmVudE5vZGUsXG5cdFx0XHRhcCA9IFsgYSBdLFxuXHRcdFx0YnAgPSBbIGIgXTtcblxuXHRcdC8vIFBhcmVudGxlc3Mgbm9kZXMgYXJlIGVpdGhlciBkb2N1bWVudHMgb3IgZGlzY29ubmVjdGVkXG5cdFx0aWYgKCAhYXVwIHx8ICFidXAgKSB7XG5cdFx0XHRyZXR1cm4gYSA9PT0gZG9jdW1lbnQgPyAtMSA6XG5cdFx0XHRcdGIgPT09IGRvY3VtZW50ID8gMSA6XG5cdFx0XHRcdGF1cCA/IC0xIDpcblx0XHRcdFx0YnVwID8gMSA6XG5cdFx0XHRcdHNvcnRJbnB1dCA/XG5cdFx0XHRcdCggaW5kZXhPZiggc29ydElucHV0LCBhICkgLSBpbmRleE9mKCBzb3J0SW5wdXQsIGIgKSApIDpcblx0XHRcdFx0MDtcblxuXHRcdC8vIElmIHRoZSBub2RlcyBhcmUgc2libGluZ3MsIHdlIGNhbiBkbyBhIHF1aWNrIGNoZWNrXG5cdFx0fSBlbHNlIGlmICggYXVwID09PSBidXAgKSB7XG5cdFx0XHRyZXR1cm4gc2libGluZ0NoZWNrKCBhLCBiICk7XG5cdFx0fVxuXG5cdFx0Ly8gT3RoZXJ3aXNlIHdlIG5lZWQgZnVsbCBsaXN0cyBvZiB0aGVpciBhbmNlc3RvcnMgZm9yIGNvbXBhcmlzb25cblx0XHRjdXIgPSBhO1xuXHRcdHdoaWxlICggKGN1ciA9IGN1ci5wYXJlbnROb2RlKSApIHtcblx0XHRcdGFwLnVuc2hpZnQoIGN1ciApO1xuXHRcdH1cblx0XHRjdXIgPSBiO1xuXHRcdHdoaWxlICggKGN1ciA9IGN1ci5wYXJlbnROb2RlKSApIHtcblx0XHRcdGJwLnVuc2hpZnQoIGN1ciApO1xuXHRcdH1cblxuXHRcdC8vIFdhbGsgZG93biB0aGUgdHJlZSBsb29raW5nIGZvciBhIGRpc2NyZXBhbmN5XG5cdFx0d2hpbGUgKCBhcFtpXSA9PT0gYnBbaV0gKSB7XG5cdFx0XHRpKys7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGkgP1xuXHRcdFx0Ly8gRG8gYSBzaWJsaW5nIGNoZWNrIGlmIHRoZSBub2RlcyBoYXZlIGEgY29tbW9uIGFuY2VzdG9yXG5cdFx0XHRzaWJsaW5nQ2hlY2soIGFwW2ldLCBicFtpXSApIDpcblxuXHRcdFx0Ly8gT3RoZXJ3aXNlIG5vZGVzIGluIG91ciBkb2N1bWVudCBzb3J0IGZpcnN0XG5cdFx0XHRhcFtpXSA9PT0gcHJlZmVycmVkRG9jID8gLTEgOlxuXHRcdFx0YnBbaV0gPT09IHByZWZlcnJlZERvYyA/IDEgOlxuXHRcdFx0MDtcblx0fTtcblxuXHRyZXR1cm4gZG9jdW1lbnQ7XG59O1xuXG5TaXp6bGUubWF0Y2hlcyA9IGZ1bmN0aW9uKCBleHByLCBlbGVtZW50cyApIHtcblx0cmV0dXJuIFNpenpsZSggZXhwciwgbnVsbCwgbnVsbCwgZWxlbWVudHMgKTtcbn07XG5cblNpenpsZS5tYXRjaGVzU2VsZWN0b3IgPSBmdW5jdGlvbiggZWxlbSwgZXhwciApIHtcblx0Ly8gU2V0IGRvY3VtZW50IHZhcnMgaWYgbmVlZGVkXG5cdGlmICggKCBlbGVtLm93bmVyRG9jdW1lbnQgfHwgZWxlbSApICE9PSBkb2N1bWVudCApIHtcblx0XHRzZXREb2N1bWVudCggZWxlbSApO1xuXHR9XG5cblx0aWYgKCBzdXBwb3J0Lm1hdGNoZXNTZWxlY3RvciAmJiBkb2N1bWVudElzSFRNTCAmJlxuXHRcdCFub25uYXRpdmVTZWxlY3RvckNhY2hlWyBleHByICsgXCIgXCIgXSAmJlxuXHRcdCggIXJidWdneU1hdGNoZXMgfHwgIXJidWdneU1hdGNoZXMudGVzdCggZXhwciApICkgJiZcblx0XHQoICFyYnVnZ3lRU0EgICAgIHx8ICFyYnVnZ3lRU0EudGVzdCggZXhwciApICkgKSB7XG5cblx0XHR0cnkge1xuXHRcdFx0dmFyIHJldCA9IG1hdGNoZXMuY2FsbCggZWxlbSwgZXhwciApO1xuXG5cdFx0XHQvLyBJRSA5J3MgbWF0Y2hlc1NlbGVjdG9yIHJldHVybnMgZmFsc2Ugb24gZGlzY29ubmVjdGVkIG5vZGVzXG5cdFx0XHRpZiAoIHJldCB8fCBzdXBwb3J0LmRpc2Nvbm5lY3RlZE1hdGNoIHx8XG5cdFx0XHRcdFx0Ly8gQXMgd2VsbCwgZGlzY29ubmVjdGVkIG5vZGVzIGFyZSBzYWlkIHRvIGJlIGluIGEgZG9jdW1lbnRcblx0XHRcdFx0XHQvLyBmcmFnbWVudCBpbiBJRSA5XG5cdFx0XHRcdFx0ZWxlbS5kb2N1bWVudCAmJiBlbGVtLmRvY3VtZW50Lm5vZGVUeXBlICE9PSAxMSApIHtcblx0XHRcdFx0cmV0dXJuIHJldDtcblx0XHRcdH1cblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRub25uYXRpdmVTZWxlY3RvckNhY2hlKCBleHByLCB0cnVlICk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIFNpenpsZSggZXhwciwgZG9jdW1lbnQsIG51bGwsIFsgZWxlbSBdICkubGVuZ3RoID4gMDtcbn07XG5cblNpenpsZS5jb250YWlucyA9IGZ1bmN0aW9uKCBjb250ZXh0LCBlbGVtICkge1xuXHQvLyBTZXQgZG9jdW1lbnQgdmFycyBpZiBuZWVkZWRcblx0aWYgKCAoIGNvbnRleHQub3duZXJEb2N1bWVudCB8fCBjb250ZXh0ICkgIT09IGRvY3VtZW50ICkge1xuXHRcdHNldERvY3VtZW50KCBjb250ZXh0ICk7XG5cdH1cblx0cmV0dXJuIGNvbnRhaW5zKCBjb250ZXh0LCBlbGVtICk7XG59O1xuXG5TaXp6bGUuYXR0ciA9IGZ1bmN0aW9uKCBlbGVtLCBuYW1lICkge1xuXHQvLyBTZXQgZG9jdW1lbnQgdmFycyBpZiBuZWVkZWRcblx0aWYgKCAoIGVsZW0ub3duZXJEb2N1bWVudCB8fCBlbGVtICkgIT09IGRvY3VtZW50ICkge1xuXHRcdHNldERvY3VtZW50KCBlbGVtICk7XG5cdH1cblxuXHR2YXIgZm4gPSBFeHByLmF0dHJIYW5kbGVbIG5hbWUudG9Mb3dlckNhc2UoKSBdLFxuXHRcdC8vIERvbid0IGdldCBmb29sZWQgYnkgT2JqZWN0LnByb3RvdHlwZSBwcm9wZXJ0aWVzIChqUXVlcnkgIzEzODA3KVxuXHRcdHZhbCA9IGZuICYmIGhhc093bi5jYWxsKCBFeHByLmF0dHJIYW5kbGUsIG5hbWUudG9Mb3dlckNhc2UoKSApID9cblx0XHRcdGZuKCBlbGVtLCBuYW1lLCAhZG9jdW1lbnRJc0hUTUwgKSA6XG5cdFx0XHR1bmRlZmluZWQ7XG5cblx0cmV0dXJuIHZhbCAhPT0gdW5kZWZpbmVkID9cblx0XHR2YWwgOlxuXHRcdHN1cHBvcnQuYXR0cmlidXRlcyB8fCAhZG9jdW1lbnRJc0hUTUwgP1xuXHRcdFx0ZWxlbS5nZXRBdHRyaWJ1dGUoIG5hbWUgKSA6XG5cdFx0XHQodmFsID0gZWxlbS5nZXRBdHRyaWJ1dGVOb2RlKG5hbWUpKSAmJiB2YWwuc3BlY2lmaWVkID9cblx0XHRcdFx0dmFsLnZhbHVlIDpcblx0XHRcdFx0bnVsbDtcbn07XG5cblNpenpsZS5lc2NhcGUgPSBmdW5jdGlvbiggc2VsICkge1xuXHRyZXR1cm4gKHNlbCArIFwiXCIpLnJlcGxhY2UoIHJjc3Nlc2NhcGUsIGZjc3Nlc2NhcGUgKTtcbn07XG5cblNpenpsZS5lcnJvciA9IGZ1bmN0aW9uKCBtc2cgKSB7XG5cdHRocm93IG5ldyBFcnJvciggXCJTeW50YXggZXJyb3IsIHVucmVjb2duaXplZCBleHByZXNzaW9uOiBcIiArIG1zZyApO1xufTtcblxuLyoqXG4gKiBEb2N1bWVudCBzb3J0aW5nIGFuZCByZW1vdmluZyBkdXBsaWNhdGVzXG4gKiBAcGFyYW0ge0FycmF5TGlrZX0gcmVzdWx0c1xuICovXG5TaXp6bGUudW5pcXVlU29ydCA9IGZ1bmN0aW9uKCByZXN1bHRzICkge1xuXHR2YXIgZWxlbSxcblx0XHRkdXBsaWNhdGVzID0gW10sXG5cdFx0aiA9IDAsXG5cdFx0aSA9IDA7XG5cblx0Ly8gVW5sZXNzIHdlICprbm93KiB3ZSBjYW4gZGV0ZWN0IGR1cGxpY2F0ZXMsIGFzc3VtZSB0aGVpciBwcmVzZW5jZVxuXHRoYXNEdXBsaWNhdGUgPSAhc3VwcG9ydC5kZXRlY3REdXBsaWNhdGVzO1xuXHRzb3J0SW5wdXQgPSAhc3VwcG9ydC5zb3J0U3RhYmxlICYmIHJlc3VsdHMuc2xpY2UoIDAgKTtcblx0cmVzdWx0cy5zb3J0KCBzb3J0T3JkZXIgKTtcblxuXHRpZiAoIGhhc0R1cGxpY2F0ZSApIHtcblx0XHR3aGlsZSAoIChlbGVtID0gcmVzdWx0c1tpKytdKSApIHtcblx0XHRcdGlmICggZWxlbSA9PT0gcmVzdWx0c1sgaSBdICkge1xuXHRcdFx0XHRqID0gZHVwbGljYXRlcy5wdXNoKCBpICk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHdoaWxlICggai0tICkge1xuXHRcdFx0cmVzdWx0cy5zcGxpY2UoIGR1cGxpY2F0ZXNbIGogXSwgMSApO1xuXHRcdH1cblx0fVxuXG5cdC8vIENsZWFyIGlucHV0IGFmdGVyIHNvcnRpbmcgdG8gcmVsZWFzZSBvYmplY3RzXG5cdC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vanF1ZXJ5L3NpenpsZS9wdWxsLzIyNVxuXHRzb3J0SW5wdXQgPSBudWxsO1xuXG5cdHJldHVybiByZXN1bHRzO1xufTtcblxuLyoqXG4gKiBVdGlsaXR5IGZ1bmN0aW9uIGZvciByZXRyaWV2aW5nIHRoZSB0ZXh0IHZhbHVlIG9mIGFuIGFycmF5IG9mIERPTSBub2Rlc1xuICogQHBhcmFtIHtBcnJheXxFbGVtZW50fSBlbGVtXG4gKi9cbmdldFRleHQgPSBTaXp6bGUuZ2V0VGV4dCA9IGZ1bmN0aW9uKCBlbGVtICkge1xuXHR2YXIgbm9kZSxcblx0XHRyZXQgPSBcIlwiLFxuXHRcdGkgPSAwLFxuXHRcdG5vZGVUeXBlID0gZWxlbS5ub2RlVHlwZTtcblxuXHRpZiAoICFub2RlVHlwZSApIHtcblx0XHQvLyBJZiBubyBub2RlVHlwZSwgdGhpcyBpcyBleHBlY3RlZCB0byBiZSBhbiBhcnJheVxuXHRcdHdoaWxlICggKG5vZGUgPSBlbGVtW2krK10pICkge1xuXHRcdFx0Ly8gRG8gbm90IHRyYXZlcnNlIGNvbW1lbnQgbm9kZXNcblx0XHRcdHJldCArPSBnZXRUZXh0KCBub2RlICk7XG5cdFx0fVxuXHR9IGVsc2UgaWYgKCBub2RlVHlwZSA9PT0gMSB8fCBub2RlVHlwZSA9PT0gOSB8fCBub2RlVHlwZSA9PT0gMTEgKSB7XG5cdFx0Ly8gVXNlIHRleHRDb250ZW50IGZvciBlbGVtZW50c1xuXHRcdC8vIGlubmVyVGV4dCB1c2FnZSByZW1vdmVkIGZvciBjb25zaXN0ZW5jeSBvZiBuZXcgbGluZXMgKGpRdWVyeSAjMTExNTMpXG5cdFx0aWYgKCB0eXBlb2YgZWxlbS50ZXh0Q29udGVudCA9PT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdHJldHVybiBlbGVtLnRleHRDb250ZW50O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBUcmF2ZXJzZSBpdHMgY2hpbGRyZW5cblx0XHRcdGZvciAoIGVsZW0gPSBlbGVtLmZpcnN0Q2hpbGQ7IGVsZW07IGVsZW0gPSBlbGVtLm5leHRTaWJsaW5nICkge1xuXHRcdFx0XHRyZXQgKz0gZ2V0VGV4dCggZWxlbSApO1xuXHRcdFx0fVxuXHRcdH1cblx0fSBlbHNlIGlmICggbm9kZVR5cGUgPT09IDMgfHwgbm9kZVR5cGUgPT09IDQgKSB7XG5cdFx0cmV0dXJuIGVsZW0ubm9kZVZhbHVlO1xuXHR9XG5cdC8vIERvIG5vdCBpbmNsdWRlIGNvbW1lbnQgb3IgcHJvY2Vzc2luZyBpbnN0cnVjdGlvbiBub2Rlc1xuXG5cdHJldHVybiByZXQ7XG59O1xuXG5FeHByID0gU2l6emxlLnNlbGVjdG9ycyA9IHtcblxuXHQvLyBDYW4gYmUgYWRqdXN0ZWQgYnkgdGhlIHVzZXJcblx0Y2FjaGVMZW5ndGg6IDUwLFxuXG5cdGNyZWF0ZVBzZXVkbzogbWFya0Z1bmN0aW9uLFxuXG5cdG1hdGNoOiBtYXRjaEV4cHIsXG5cblx0YXR0ckhhbmRsZToge30sXG5cblx0ZmluZDoge30sXG5cblx0cmVsYXRpdmU6IHtcblx0XHRcIj5cIjogeyBkaXI6IFwicGFyZW50Tm9kZVwiLCBmaXJzdDogdHJ1ZSB9LFxuXHRcdFwiIFwiOiB7IGRpcjogXCJwYXJlbnROb2RlXCIgfSxcblx0XHRcIitcIjogeyBkaXI6IFwicHJldmlvdXNTaWJsaW5nXCIsIGZpcnN0OiB0cnVlIH0sXG5cdFx0XCJ+XCI6IHsgZGlyOiBcInByZXZpb3VzU2libGluZ1wiIH1cblx0fSxcblxuXHRwcmVGaWx0ZXI6IHtcblx0XHRcIkFUVFJcIjogZnVuY3Rpb24oIG1hdGNoICkge1xuXHRcdFx0bWF0Y2hbMV0gPSBtYXRjaFsxXS5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApO1xuXG5cdFx0XHQvLyBNb3ZlIHRoZSBnaXZlbiB2YWx1ZSB0byBtYXRjaFszXSB3aGV0aGVyIHF1b3RlZCBvciB1bnF1b3RlZFxuXHRcdFx0bWF0Y2hbM10gPSAoIG1hdGNoWzNdIHx8IG1hdGNoWzRdIHx8IG1hdGNoWzVdIHx8IFwiXCIgKS5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApO1xuXG5cdFx0XHRpZiAoIG1hdGNoWzJdID09PSBcIn49XCIgKSB7XG5cdFx0XHRcdG1hdGNoWzNdID0gXCIgXCIgKyBtYXRjaFszXSArIFwiIFwiO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gbWF0Y2guc2xpY2UoIDAsIDQgKTtcblx0XHR9LFxuXG5cdFx0XCJDSElMRFwiOiBmdW5jdGlvbiggbWF0Y2ggKSB7XG5cdFx0XHQvKiBtYXRjaGVzIGZyb20gbWF0Y2hFeHByW1wiQ0hJTERcIl1cblx0XHRcdFx0MSB0eXBlIChvbmx5fG50aHwuLi4pXG5cdFx0XHRcdDIgd2hhdCAoY2hpbGR8b2YtdHlwZSlcblx0XHRcdFx0MyBhcmd1bWVudCAoZXZlbnxvZGR8XFxkKnxcXGQqbihbKy1dXFxkKyk/fC4uLilcblx0XHRcdFx0NCB4bi1jb21wb25lbnQgb2YgeG4reSBhcmd1bWVudCAoWystXT9cXGQqbnwpXG5cdFx0XHRcdDUgc2lnbiBvZiB4bi1jb21wb25lbnRcblx0XHRcdFx0NiB4IG9mIHhuLWNvbXBvbmVudFxuXHRcdFx0XHQ3IHNpZ24gb2YgeS1jb21wb25lbnRcblx0XHRcdFx0OCB5IG9mIHktY29tcG9uZW50XG5cdFx0XHQqL1xuXHRcdFx0bWF0Y2hbMV0gPSBtYXRjaFsxXS50b0xvd2VyQ2FzZSgpO1xuXG5cdFx0XHRpZiAoIG1hdGNoWzFdLnNsaWNlKCAwLCAzICkgPT09IFwibnRoXCIgKSB7XG5cdFx0XHRcdC8vIG50aC0qIHJlcXVpcmVzIGFyZ3VtZW50XG5cdFx0XHRcdGlmICggIW1hdGNoWzNdICkge1xuXHRcdFx0XHRcdFNpenpsZS5lcnJvciggbWF0Y2hbMF0gKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIG51bWVyaWMgeCBhbmQgeSBwYXJhbWV0ZXJzIGZvciBFeHByLmZpbHRlci5DSElMRFxuXHRcdFx0XHQvLyByZW1lbWJlciB0aGF0IGZhbHNlL3RydWUgY2FzdCByZXNwZWN0aXZlbHkgdG8gMC8xXG5cdFx0XHRcdG1hdGNoWzRdID0gKyggbWF0Y2hbNF0gPyBtYXRjaFs1XSArIChtYXRjaFs2XSB8fCAxKSA6IDIgKiAoIG1hdGNoWzNdID09PSBcImV2ZW5cIiB8fCBtYXRjaFszXSA9PT0gXCJvZGRcIiApICk7XG5cdFx0XHRcdG1hdGNoWzVdID0gKyggKCBtYXRjaFs3XSArIG1hdGNoWzhdICkgfHwgbWF0Y2hbM10gPT09IFwib2RkXCIgKTtcblxuXHRcdFx0Ly8gb3RoZXIgdHlwZXMgcHJvaGliaXQgYXJndW1lbnRzXG5cdFx0XHR9IGVsc2UgaWYgKCBtYXRjaFszXSApIHtcblx0XHRcdFx0U2l6emxlLmVycm9yKCBtYXRjaFswXSApO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gbWF0Y2g7XG5cdFx0fSxcblxuXHRcdFwiUFNFVURPXCI6IGZ1bmN0aW9uKCBtYXRjaCApIHtcblx0XHRcdHZhciBleGNlc3MsXG5cdFx0XHRcdHVucXVvdGVkID0gIW1hdGNoWzZdICYmIG1hdGNoWzJdO1xuXG5cdFx0XHRpZiAoIG1hdGNoRXhwcltcIkNISUxEXCJdLnRlc3QoIG1hdGNoWzBdICkgKSB7XG5cdFx0XHRcdHJldHVybiBudWxsO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBBY2NlcHQgcXVvdGVkIGFyZ3VtZW50cyBhcy1pc1xuXHRcdFx0aWYgKCBtYXRjaFszXSApIHtcblx0XHRcdFx0bWF0Y2hbMl0gPSBtYXRjaFs0XSB8fCBtYXRjaFs1XSB8fCBcIlwiO1xuXG5cdFx0XHQvLyBTdHJpcCBleGNlc3MgY2hhcmFjdGVycyBmcm9tIHVucXVvdGVkIGFyZ3VtZW50c1xuXHRcdFx0fSBlbHNlIGlmICggdW5xdW90ZWQgJiYgcnBzZXVkby50ZXN0KCB1bnF1b3RlZCApICYmXG5cdFx0XHRcdC8vIEdldCBleGNlc3MgZnJvbSB0b2tlbml6ZSAocmVjdXJzaXZlbHkpXG5cdFx0XHRcdChleGNlc3MgPSB0b2tlbml6ZSggdW5xdW90ZWQsIHRydWUgKSkgJiZcblx0XHRcdFx0Ly8gYWR2YW5jZSB0byB0aGUgbmV4dCBjbG9zaW5nIHBhcmVudGhlc2lzXG5cdFx0XHRcdChleGNlc3MgPSB1bnF1b3RlZC5pbmRleE9mKCBcIilcIiwgdW5xdW90ZWQubGVuZ3RoIC0gZXhjZXNzICkgLSB1bnF1b3RlZC5sZW5ndGgpICkge1xuXG5cdFx0XHRcdC8vIGV4Y2VzcyBpcyBhIG5lZ2F0aXZlIGluZGV4XG5cdFx0XHRcdG1hdGNoWzBdID0gbWF0Y2hbMF0uc2xpY2UoIDAsIGV4Y2VzcyApO1xuXHRcdFx0XHRtYXRjaFsyXSA9IHVucXVvdGVkLnNsaWNlKCAwLCBleGNlc3MgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gUmV0dXJuIG9ubHkgY2FwdHVyZXMgbmVlZGVkIGJ5IHRoZSBwc2V1ZG8gZmlsdGVyIG1ldGhvZCAodHlwZSBhbmQgYXJndW1lbnQpXG5cdFx0XHRyZXR1cm4gbWF0Y2guc2xpY2UoIDAsIDMgKTtcblx0XHR9XG5cdH0sXG5cblx0ZmlsdGVyOiB7XG5cblx0XHRcIlRBR1wiOiBmdW5jdGlvbiggbm9kZU5hbWVTZWxlY3RvciApIHtcblx0XHRcdHZhciBub2RlTmFtZSA9IG5vZGVOYW1lU2VsZWN0b3IucmVwbGFjZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKS50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0cmV0dXJuIG5vZGVOYW1lU2VsZWN0b3IgPT09IFwiKlwiID9cblx0XHRcdFx0ZnVuY3Rpb24oKSB7IHJldHVybiB0cnVlOyB9IDpcblx0XHRcdFx0ZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGVsZW0ubm9kZU5hbWUgJiYgZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSBub2RlTmFtZTtcblx0XHRcdFx0fTtcblx0XHR9LFxuXG5cdFx0XCJDTEFTU1wiOiBmdW5jdGlvbiggY2xhc3NOYW1lICkge1xuXHRcdFx0dmFyIHBhdHRlcm4gPSBjbGFzc0NhY2hlWyBjbGFzc05hbWUgKyBcIiBcIiBdO1xuXG5cdFx0XHRyZXR1cm4gcGF0dGVybiB8fFxuXHRcdFx0XHQocGF0dGVybiA9IG5ldyBSZWdFeHAoIFwiKF58XCIgKyB3aGl0ZXNwYWNlICsgXCIpXCIgKyBjbGFzc05hbWUgKyBcIihcIiArIHdoaXRlc3BhY2UgKyBcInwkKVwiICkpICYmXG5cdFx0XHRcdGNsYXNzQ2FjaGUoIGNsYXNzTmFtZSwgZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHBhdHRlcm4udGVzdCggdHlwZW9mIGVsZW0uY2xhc3NOYW1lID09PSBcInN0cmluZ1wiICYmIGVsZW0uY2xhc3NOYW1lIHx8IHR5cGVvZiBlbGVtLmdldEF0dHJpYnV0ZSAhPT0gXCJ1bmRlZmluZWRcIiAmJiBlbGVtLmdldEF0dHJpYnV0ZShcImNsYXNzXCIpIHx8IFwiXCIgKTtcblx0XHRcdFx0fSk7XG5cdFx0fSxcblxuXHRcdFwiQVRUUlwiOiBmdW5jdGlvbiggbmFtZSwgb3BlcmF0b3IsIGNoZWNrICkge1xuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0XHR2YXIgcmVzdWx0ID0gU2l6emxlLmF0dHIoIGVsZW0sIG5hbWUgKTtcblxuXHRcdFx0XHRpZiAoIHJlc3VsdCA9PSBudWxsICkge1xuXHRcdFx0XHRcdHJldHVybiBvcGVyYXRvciA9PT0gXCIhPVwiO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICggIW9wZXJhdG9yICkge1xuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmVzdWx0ICs9IFwiXCI7XG5cblx0XHRcdFx0cmV0dXJuIG9wZXJhdG9yID09PSBcIj1cIiA/IHJlc3VsdCA9PT0gY2hlY2sgOlxuXHRcdFx0XHRcdG9wZXJhdG9yID09PSBcIiE9XCIgPyByZXN1bHQgIT09IGNoZWNrIDpcblx0XHRcdFx0XHRvcGVyYXRvciA9PT0gXCJePVwiID8gY2hlY2sgJiYgcmVzdWx0LmluZGV4T2YoIGNoZWNrICkgPT09IDAgOlxuXHRcdFx0XHRcdG9wZXJhdG9yID09PSBcIio9XCIgPyBjaGVjayAmJiByZXN1bHQuaW5kZXhPZiggY2hlY2sgKSA+IC0xIDpcblx0XHRcdFx0XHRvcGVyYXRvciA9PT0gXCIkPVwiID8gY2hlY2sgJiYgcmVzdWx0LnNsaWNlKCAtY2hlY2subGVuZ3RoICkgPT09IGNoZWNrIDpcblx0XHRcdFx0XHRvcGVyYXRvciA9PT0gXCJ+PVwiID8gKCBcIiBcIiArIHJlc3VsdC5yZXBsYWNlKCByd2hpdGVzcGFjZSwgXCIgXCIgKSArIFwiIFwiICkuaW5kZXhPZiggY2hlY2sgKSA+IC0xIDpcblx0XHRcdFx0XHRvcGVyYXRvciA9PT0gXCJ8PVwiID8gcmVzdWx0ID09PSBjaGVjayB8fCByZXN1bHQuc2xpY2UoIDAsIGNoZWNrLmxlbmd0aCArIDEgKSA9PT0gY2hlY2sgKyBcIi1cIiA6XG5cdFx0XHRcdFx0ZmFsc2U7XG5cdFx0XHR9O1xuXHRcdH0sXG5cblx0XHRcIkNISUxEXCI6IGZ1bmN0aW9uKCB0eXBlLCB3aGF0LCBhcmd1bWVudCwgZmlyc3QsIGxhc3QgKSB7XG5cdFx0XHR2YXIgc2ltcGxlID0gdHlwZS5zbGljZSggMCwgMyApICE9PSBcIm50aFwiLFxuXHRcdFx0XHRmb3J3YXJkID0gdHlwZS5zbGljZSggLTQgKSAhPT0gXCJsYXN0XCIsXG5cdFx0XHRcdG9mVHlwZSA9IHdoYXQgPT09IFwib2YtdHlwZVwiO1xuXG5cdFx0XHRyZXR1cm4gZmlyc3QgPT09IDEgJiYgbGFzdCA9PT0gMCA/XG5cblx0XHRcdFx0Ly8gU2hvcnRjdXQgZm9yIDpudGgtKihuKVxuXHRcdFx0XHRmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0XHRyZXR1cm4gISFlbGVtLnBhcmVudE5vZGU7XG5cdFx0XHRcdH0gOlxuXG5cdFx0XHRcdGZ1bmN0aW9uKCBlbGVtLCBjb250ZXh0LCB4bWwgKSB7XG5cdFx0XHRcdFx0dmFyIGNhY2hlLCB1bmlxdWVDYWNoZSwgb3V0ZXJDYWNoZSwgbm9kZSwgbm9kZUluZGV4LCBzdGFydCxcblx0XHRcdFx0XHRcdGRpciA9IHNpbXBsZSAhPT0gZm9yd2FyZCA/IFwibmV4dFNpYmxpbmdcIiA6IFwicHJldmlvdXNTaWJsaW5nXCIsXG5cdFx0XHRcdFx0XHRwYXJlbnQgPSBlbGVtLnBhcmVudE5vZGUsXG5cdFx0XHRcdFx0XHRuYW1lID0gb2ZUeXBlICYmIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSxcblx0XHRcdFx0XHRcdHVzZUNhY2hlID0gIXhtbCAmJiAhb2ZUeXBlLFxuXHRcdFx0XHRcdFx0ZGlmZiA9IGZhbHNlO1xuXG5cdFx0XHRcdFx0aWYgKCBwYXJlbnQgKSB7XG5cblx0XHRcdFx0XHRcdC8vIDooZmlyc3R8bGFzdHxvbmx5KS0oY2hpbGR8b2YtdHlwZSlcblx0XHRcdFx0XHRcdGlmICggc2ltcGxlICkge1xuXHRcdFx0XHRcdFx0XHR3aGlsZSAoIGRpciApIHtcblx0XHRcdFx0XHRcdFx0XHRub2RlID0gZWxlbTtcblx0XHRcdFx0XHRcdFx0XHR3aGlsZSAoIChub2RlID0gbm9kZVsgZGlyIF0pICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKCBvZlR5cGUgP1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRub2RlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09IG5hbWUgOlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRub2RlLm5vZGVUeXBlID09PSAxICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0Ly8gUmV2ZXJzZSBkaXJlY3Rpb24gZm9yIDpvbmx5LSogKGlmIHdlIGhhdmVuJ3QgeWV0IGRvbmUgc28pXG5cdFx0XHRcdFx0XHRcdFx0c3RhcnQgPSBkaXIgPSB0eXBlID09PSBcIm9ubHlcIiAmJiAhc3RhcnQgJiYgXCJuZXh0U2libGluZ1wiO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRzdGFydCA9IFsgZm9yd2FyZCA/IHBhcmVudC5maXJzdENoaWxkIDogcGFyZW50Lmxhc3RDaGlsZCBdO1xuXG5cdFx0XHRcdFx0XHQvLyBub24teG1sIDpudGgtY2hpbGQoLi4uKSBzdG9yZXMgY2FjaGUgZGF0YSBvbiBgcGFyZW50YFxuXHRcdFx0XHRcdFx0aWYgKCBmb3J3YXJkICYmIHVzZUNhY2hlICkge1xuXG5cdFx0XHRcdFx0XHRcdC8vIFNlZWsgYGVsZW1gIGZyb20gYSBwcmV2aW91c2x5LWNhY2hlZCBpbmRleFxuXG5cdFx0XHRcdFx0XHRcdC8vIC4uLmluIGEgZ3ppcC1mcmllbmRseSB3YXlcblx0XHRcdFx0XHRcdFx0bm9kZSA9IHBhcmVudDtcblx0XHRcdFx0XHRcdFx0b3V0ZXJDYWNoZSA9IG5vZGVbIGV4cGFuZG8gXSB8fCAobm9kZVsgZXhwYW5kbyBdID0ge30pO1xuXG5cdFx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDw5IG9ubHlcblx0XHRcdFx0XHRcdFx0Ly8gRGVmZW5kIGFnYWluc3QgY2xvbmVkIGF0dHJvcGVydGllcyAoalF1ZXJ5IGdoLTE3MDkpXG5cdFx0XHRcdFx0XHRcdHVuaXF1ZUNhY2hlID0gb3V0ZXJDYWNoZVsgbm9kZS51bmlxdWVJRCBdIHx8XG5cdFx0XHRcdFx0XHRcdFx0KG91dGVyQ2FjaGVbIG5vZGUudW5pcXVlSUQgXSA9IHt9KTtcblxuXHRcdFx0XHRcdFx0XHRjYWNoZSA9IHVuaXF1ZUNhY2hlWyB0eXBlIF0gfHwgW107XG5cdFx0XHRcdFx0XHRcdG5vZGVJbmRleCA9IGNhY2hlWyAwIF0gPT09IGRpcnJ1bnMgJiYgY2FjaGVbIDEgXTtcblx0XHRcdFx0XHRcdFx0ZGlmZiA9IG5vZGVJbmRleCAmJiBjYWNoZVsgMiBdO1xuXHRcdFx0XHRcdFx0XHRub2RlID0gbm9kZUluZGV4ICYmIHBhcmVudC5jaGlsZE5vZGVzWyBub2RlSW5kZXggXTtcblxuXHRcdFx0XHRcdFx0XHR3aGlsZSAoIChub2RlID0gKytub2RlSW5kZXggJiYgbm9kZSAmJiBub2RlWyBkaXIgXSB8fFxuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gRmFsbGJhY2sgdG8gc2Vla2luZyBgZWxlbWAgZnJvbSB0aGUgc3RhcnRcblx0XHRcdFx0XHRcdFx0XHQoZGlmZiA9IG5vZGVJbmRleCA9IDApIHx8IHN0YXJ0LnBvcCgpKSApIHtcblxuXHRcdFx0XHRcdFx0XHRcdC8vIFdoZW4gZm91bmQsIGNhY2hlIGluZGV4ZXMgb24gYHBhcmVudGAgYW5kIGJyZWFrXG5cdFx0XHRcdFx0XHRcdFx0aWYgKCBub2RlLm5vZGVUeXBlID09PSAxICYmICsrZGlmZiAmJiBub2RlID09PSBlbGVtICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0dW5pcXVlQ2FjaGVbIHR5cGUgXSA9IFsgZGlycnVucywgbm9kZUluZGV4LCBkaWZmIF07XG5cdFx0XHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0Ly8gVXNlIHByZXZpb3VzbHktY2FjaGVkIGVsZW1lbnQgaW5kZXggaWYgYXZhaWxhYmxlXG5cdFx0XHRcdFx0XHRcdGlmICggdXNlQ2FjaGUgKSB7XG5cdFx0XHRcdFx0XHRcdFx0Ly8gLi4uaW4gYSBnemlwLWZyaWVuZGx5IHdheVxuXHRcdFx0XHRcdFx0XHRcdG5vZGUgPSBlbGVtO1xuXHRcdFx0XHRcdFx0XHRcdG91dGVyQ2FjaGUgPSBub2RlWyBleHBhbmRvIF0gfHwgKG5vZGVbIGV4cGFuZG8gXSA9IHt9KTtcblxuXHRcdFx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDw5IG9ubHlcblx0XHRcdFx0XHRcdFx0XHQvLyBEZWZlbmQgYWdhaW5zdCBjbG9uZWQgYXR0cm9wZXJ0aWVzIChqUXVlcnkgZ2gtMTcwOSlcblx0XHRcdFx0XHRcdFx0XHR1bmlxdWVDYWNoZSA9IG91dGVyQ2FjaGVbIG5vZGUudW5pcXVlSUQgXSB8fFxuXHRcdFx0XHRcdFx0XHRcdFx0KG91dGVyQ2FjaGVbIG5vZGUudW5pcXVlSUQgXSA9IHt9KTtcblxuXHRcdFx0XHRcdFx0XHRcdGNhY2hlID0gdW5pcXVlQ2FjaGVbIHR5cGUgXSB8fCBbXTtcblx0XHRcdFx0XHRcdFx0XHRub2RlSW5kZXggPSBjYWNoZVsgMCBdID09PSBkaXJydW5zICYmIGNhY2hlWyAxIF07XG5cdFx0XHRcdFx0XHRcdFx0ZGlmZiA9IG5vZGVJbmRleDtcblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdC8vIHhtbCA6bnRoLWNoaWxkKC4uLilcblx0XHRcdFx0XHRcdFx0Ly8gb3IgOm50aC1sYXN0LWNoaWxkKC4uLikgb3IgOm50aCgtbGFzdCk/LW9mLXR5cGUoLi4uKVxuXHRcdFx0XHRcdFx0XHRpZiAoIGRpZmYgPT09IGZhbHNlICkge1xuXHRcdFx0XHRcdFx0XHRcdC8vIFVzZSB0aGUgc2FtZSBsb29wIGFzIGFib3ZlIHRvIHNlZWsgYGVsZW1gIGZyb20gdGhlIHN0YXJ0XG5cdFx0XHRcdFx0XHRcdFx0d2hpbGUgKCAobm9kZSA9ICsrbm9kZUluZGV4ICYmIG5vZGUgJiYgbm9kZVsgZGlyIF0gfHxcblx0XHRcdFx0XHRcdFx0XHRcdChkaWZmID0gbm9kZUluZGV4ID0gMCkgfHwgc3RhcnQucG9wKCkpICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoICggb2ZUeXBlID9cblx0XHRcdFx0XHRcdFx0XHRcdFx0bm9kZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSBuYW1lIDpcblx0XHRcdFx0XHRcdFx0XHRcdFx0bm9kZS5ub2RlVHlwZSA9PT0gMSApICYmXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCsrZGlmZiApIHtcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBDYWNoZSB0aGUgaW5kZXggb2YgZWFjaCBlbmNvdW50ZXJlZCBlbGVtZW50XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmICggdXNlQ2FjaGUgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0b3V0ZXJDYWNoZSA9IG5vZGVbIGV4cGFuZG8gXSB8fCAobm9kZVsgZXhwYW5kbyBdID0ge30pO1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPDkgb25seVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIERlZmVuZCBhZ2FpbnN0IGNsb25lZCBhdHRyb3BlcnRpZXMgKGpRdWVyeSBnaC0xNzA5KVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHVuaXF1ZUNhY2hlID0gb3V0ZXJDYWNoZVsgbm9kZS51bmlxdWVJRCBdIHx8XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQob3V0ZXJDYWNoZVsgbm9kZS51bmlxdWVJRCBdID0ge30pO1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dW5pcXVlQ2FjaGVbIHR5cGUgXSA9IFsgZGlycnVucywgZGlmZiBdO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKCBub2RlID09PSBlbGVtICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdC8vIEluY29ycG9yYXRlIHRoZSBvZmZzZXQsIHRoZW4gY2hlY2sgYWdhaW5zdCBjeWNsZSBzaXplXG5cdFx0XHRcdFx0XHRkaWZmIC09IGxhc3Q7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZGlmZiA9PT0gZmlyc3QgfHwgKCBkaWZmICUgZmlyc3QgPT09IDAgJiYgZGlmZiAvIGZpcnN0ID49IDAgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH07XG5cdFx0fSxcblxuXHRcdFwiUFNFVURPXCI6IGZ1bmN0aW9uKCBwc2V1ZG8sIGFyZ3VtZW50ICkge1xuXHRcdFx0Ly8gcHNldWRvLWNsYXNzIG5hbWVzIGFyZSBjYXNlLWluc2Vuc2l0aXZlXG5cdFx0XHQvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9zZWxlY3RvcnMvI3BzZXVkby1jbGFzc2VzXG5cdFx0XHQvLyBQcmlvcml0aXplIGJ5IGNhc2Ugc2Vuc2l0aXZpdHkgaW4gY2FzZSBjdXN0b20gcHNldWRvcyBhcmUgYWRkZWQgd2l0aCB1cHBlcmNhc2UgbGV0dGVyc1xuXHRcdFx0Ly8gUmVtZW1iZXIgdGhhdCBzZXRGaWx0ZXJzIGluaGVyaXRzIGZyb20gcHNldWRvc1xuXHRcdFx0dmFyIGFyZ3MsXG5cdFx0XHRcdGZuID0gRXhwci5wc2V1ZG9zWyBwc2V1ZG8gXSB8fCBFeHByLnNldEZpbHRlcnNbIHBzZXVkby50b0xvd2VyQ2FzZSgpIF0gfHxcblx0XHRcdFx0XHRTaXp6bGUuZXJyb3IoIFwidW5zdXBwb3J0ZWQgcHNldWRvOiBcIiArIHBzZXVkbyApO1xuXG5cdFx0XHQvLyBUaGUgdXNlciBtYXkgdXNlIGNyZWF0ZVBzZXVkbyB0byBpbmRpY2F0ZSB0aGF0XG5cdFx0XHQvLyBhcmd1bWVudHMgYXJlIG5lZWRlZCB0byBjcmVhdGUgdGhlIGZpbHRlciBmdW5jdGlvblxuXHRcdFx0Ly8ganVzdCBhcyBTaXp6bGUgZG9lc1xuXHRcdFx0aWYgKCBmblsgZXhwYW5kbyBdICkge1xuXHRcdFx0XHRyZXR1cm4gZm4oIGFyZ3VtZW50ICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEJ1dCBtYWludGFpbiBzdXBwb3J0IGZvciBvbGQgc2lnbmF0dXJlc1xuXHRcdFx0aWYgKCBmbi5sZW5ndGggPiAxICkge1xuXHRcdFx0XHRhcmdzID0gWyBwc2V1ZG8sIHBzZXVkbywgXCJcIiwgYXJndW1lbnQgXTtcblx0XHRcdFx0cmV0dXJuIEV4cHIuc2V0RmlsdGVycy5oYXNPd25Qcm9wZXJ0eSggcHNldWRvLnRvTG93ZXJDYXNlKCkgKSA/XG5cdFx0XHRcdFx0bWFya0Z1bmN0aW9uKGZ1bmN0aW9uKCBzZWVkLCBtYXRjaGVzICkge1xuXHRcdFx0XHRcdFx0dmFyIGlkeCxcblx0XHRcdFx0XHRcdFx0bWF0Y2hlZCA9IGZuKCBzZWVkLCBhcmd1bWVudCApLFxuXHRcdFx0XHRcdFx0XHRpID0gbWF0Y2hlZC5sZW5ndGg7XG5cdFx0XHRcdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0XHRcdFx0aWR4ID0gaW5kZXhPZiggc2VlZCwgbWF0Y2hlZFtpXSApO1xuXHRcdFx0XHRcdFx0XHRzZWVkWyBpZHggXSA9ICEoIG1hdGNoZXNbIGlkeCBdID0gbWF0Y2hlZFtpXSApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pIDpcblx0XHRcdFx0XHRmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0XHRcdHJldHVybiBmbiggZWxlbSwgMCwgYXJncyApO1xuXHRcdFx0XHRcdH07XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBmbjtcblx0XHR9XG5cdH0sXG5cblx0cHNldWRvczoge1xuXHRcdC8vIFBvdGVudGlhbGx5IGNvbXBsZXggcHNldWRvc1xuXHRcdFwibm90XCI6IG1hcmtGdW5jdGlvbihmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cdFx0XHQvLyBUcmltIHRoZSBzZWxlY3RvciBwYXNzZWQgdG8gY29tcGlsZVxuXHRcdFx0Ly8gdG8gYXZvaWQgdHJlYXRpbmcgbGVhZGluZyBhbmQgdHJhaWxpbmdcblx0XHRcdC8vIHNwYWNlcyBhcyBjb21iaW5hdG9yc1xuXHRcdFx0dmFyIGlucHV0ID0gW10sXG5cdFx0XHRcdHJlc3VsdHMgPSBbXSxcblx0XHRcdFx0bWF0Y2hlciA9IGNvbXBpbGUoIHNlbGVjdG9yLnJlcGxhY2UoIHJ0cmltLCBcIiQxXCIgKSApO1xuXG5cdFx0XHRyZXR1cm4gbWF0Y2hlclsgZXhwYW5kbyBdID9cblx0XHRcdFx0bWFya0Z1bmN0aW9uKGZ1bmN0aW9uKCBzZWVkLCBtYXRjaGVzLCBjb250ZXh0LCB4bWwgKSB7XG5cdFx0XHRcdFx0dmFyIGVsZW0sXG5cdFx0XHRcdFx0XHR1bm1hdGNoZWQgPSBtYXRjaGVyKCBzZWVkLCBudWxsLCB4bWwsIFtdICksXG5cdFx0XHRcdFx0XHRpID0gc2VlZC5sZW5ndGg7XG5cblx0XHRcdFx0XHQvLyBNYXRjaCBlbGVtZW50cyB1bm1hdGNoZWQgYnkgYG1hdGNoZXJgXG5cdFx0XHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRcdFx0XHRpZiAoIChlbGVtID0gdW5tYXRjaGVkW2ldKSApIHtcblx0XHRcdFx0XHRcdFx0c2VlZFtpXSA9ICEobWF0Y2hlc1tpXSA9IGVsZW0pO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSkgOlxuXHRcdFx0XHRmdW5jdGlvbiggZWxlbSwgY29udGV4dCwgeG1sICkge1xuXHRcdFx0XHRcdGlucHV0WzBdID0gZWxlbTtcblx0XHRcdFx0XHRtYXRjaGVyKCBpbnB1dCwgbnVsbCwgeG1sLCByZXN1bHRzICk7XG5cdFx0XHRcdFx0Ly8gRG9uJ3Qga2VlcCB0aGUgZWxlbWVudCAoaXNzdWUgIzI5OSlcblx0XHRcdFx0XHRpbnB1dFswXSA9IG51bGw7XG5cdFx0XHRcdFx0cmV0dXJuICFyZXN1bHRzLnBvcCgpO1xuXHRcdFx0XHR9O1xuXHRcdH0pLFxuXG5cdFx0XCJoYXNcIjogbWFya0Z1bmN0aW9uKGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHRcdHJldHVybiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0cmV0dXJuIFNpenpsZSggc2VsZWN0b3IsIGVsZW0gKS5sZW5ndGggPiAwO1xuXHRcdFx0fTtcblx0XHR9KSxcblxuXHRcdFwiY29udGFpbnNcIjogbWFya0Z1bmN0aW9uKGZ1bmN0aW9uKCB0ZXh0ICkge1xuXHRcdFx0dGV4dCA9IHRleHQucmVwbGFjZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKTtcblx0XHRcdHJldHVybiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0cmV0dXJuICggZWxlbS50ZXh0Q29udGVudCB8fCBnZXRUZXh0KCBlbGVtICkgKS5pbmRleE9mKCB0ZXh0ICkgPiAtMTtcblx0XHRcdH07XG5cdFx0fSksXG5cblx0XHQvLyBcIldoZXRoZXIgYW4gZWxlbWVudCBpcyByZXByZXNlbnRlZCBieSBhIDpsYW5nKCkgc2VsZWN0b3Jcblx0XHQvLyBpcyBiYXNlZCBzb2xlbHkgb24gdGhlIGVsZW1lbnQncyBsYW5ndWFnZSB2YWx1ZVxuXHRcdC8vIGJlaW5nIGVxdWFsIHRvIHRoZSBpZGVudGlmaWVyIEMsXG5cdFx0Ly8gb3IgYmVnaW5uaW5nIHdpdGggdGhlIGlkZW50aWZpZXIgQyBpbW1lZGlhdGVseSBmb2xsb3dlZCBieSBcIi1cIi5cblx0XHQvLyBUaGUgbWF0Y2hpbmcgb2YgQyBhZ2FpbnN0IHRoZSBlbGVtZW50J3MgbGFuZ3VhZ2UgdmFsdWUgaXMgcGVyZm9ybWVkIGNhc2UtaW5zZW5zaXRpdmVseS5cblx0XHQvLyBUaGUgaWRlbnRpZmllciBDIGRvZXMgbm90IGhhdmUgdG8gYmUgYSB2YWxpZCBsYW5ndWFnZSBuYW1lLlwiXG5cdFx0Ly8gaHR0cDovL3d3dy53My5vcmcvVFIvc2VsZWN0b3JzLyNsYW5nLXBzZXVkb1xuXHRcdFwibGFuZ1wiOiBtYXJrRnVuY3Rpb24oIGZ1bmN0aW9uKCBsYW5nICkge1xuXHRcdFx0Ly8gbGFuZyB2YWx1ZSBtdXN0IGJlIGEgdmFsaWQgaWRlbnRpZmllclxuXHRcdFx0aWYgKCAhcmlkZW50aWZpZXIudGVzdChsYW5nIHx8IFwiXCIpICkge1xuXHRcdFx0XHRTaXp6bGUuZXJyb3IoIFwidW5zdXBwb3J0ZWQgbGFuZzogXCIgKyBsYW5nICk7XG5cdFx0XHR9XG5cdFx0XHRsYW5nID0gbGFuZy5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApLnRvTG93ZXJDYXNlKCk7XG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRcdHZhciBlbGVtTGFuZztcblx0XHRcdFx0ZG8ge1xuXHRcdFx0XHRcdGlmICggKGVsZW1MYW5nID0gZG9jdW1lbnRJc0hUTUwgP1xuXHRcdFx0XHRcdFx0ZWxlbS5sYW5nIDpcblx0XHRcdFx0XHRcdGVsZW0uZ2V0QXR0cmlidXRlKFwieG1sOmxhbmdcIikgfHwgZWxlbS5nZXRBdHRyaWJ1dGUoXCJsYW5nXCIpKSApIHtcblxuXHRcdFx0XHRcdFx0ZWxlbUxhbmcgPSBlbGVtTGFuZy50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0XHRcdFx0cmV0dXJuIGVsZW1MYW5nID09PSBsYW5nIHx8IGVsZW1MYW5nLmluZGV4T2YoIGxhbmcgKyBcIi1cIiApID09PSAwO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSB3aGlsZSAoIChlbGVtID0gZWxlbS5wYXJlbnROb2RlKSAmJiBlbGVtLm5vZGVUeXBlID09PSAxICk7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH07XG5cdFx0fSksXG5cblx0XHQvLyBNaXNjZWxsYW5lb3VzXG5cdFx0XCJ0YXJnZXRcIjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHR2YXIgaGFzaCA9IHdpbmRvdy5sb2NhdGlvbiAmJiB3aW5kb3cubG9jYXRpb24uaGFzaDtcblx0XHRcdHJldHVybiBoYXNoICYmIGhhc2guc2xpY2UoIDEgKSA9PT0gZWxlbS5pZDtcblx0XHR9LFxuXG5cdFx0XCJyb290XCI6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuIGVsZW0gPT09IGRvY0VsZW07XG5cdFx0fSxcblxuXHRcdFwiZm9jdXNcIjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gZWxlbSA9PT0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudCAmJiAoIWRvY3VtZW50Lmhhc0ZvY3VzIHx8IGRvY3VtZW50Lmhhc0ZvY3VzKCkpICYmICEhKGVsZW0udHlwZSB8fCBlbGVtLmhyZWYgfHwgfmVsZW0udGFiSW5kZXgpO1xuXHRcdH0sXG5cblx0XHQvLyBCb29sZWFuIHByb3BlcnRpZXNcblx0XHRcImVuYWJsZWRcIjogY3JlYXRlRGlzYWJsZWRQc2V1ZG8oIGZhbHNlICksXG5cdFx0XCJkaXNhYmxlZFwiOiBjcmVhdGVEaXNhYmxlZFBzZXVkbyggdHJ1ZSApLFxuXG5cdFx0XCJjaGVja2VkXCI6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0Ly8gSW4gQ1NTMywgOmNoZWNrZWQgc2hvdWxkIHJldHVybiBib3RoIGNoZWNrZWQgYW5kIHNlbGVjdGVkIGVsZW1lbnRzXG5cdFx0XHQvLyBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDExL1JFQy1jc3MzLXNlbGVjdG9ycy0yMDExMDkyOS8jY2hlY2tlZFxuXHRcdFx0dmFyIG5vZGVOYW1lID0gZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0cmV0dXJuIChub2RlTmFtZSA9PT0gXCJpbnB1dFwiICYmICEhZWxlbS5jaGVja2VkKSB8fCAobm9kZU5hbWUgPT09IFwib3B0aW9uXCIgJiYgISFlbGVtLnNlbGVjdGVkKTtcblx0XHR9LFxuXG5cdFx0XCJzZWxlY3RlZFwiOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdC8vIEFjY2Vzc2luZyB0aGlzIHByb3BlcnR5IG1ha2VzIHNlbGVjdGVkLWJ5LWRlZmF1bHRcblx0XHRcdC8vIG9wdGlvbnMgaW4gU2FmYXJpIHdvcmsgcHJvcGVybHlcblx0XHRcdGlmICggZWxlbS5wYXJlbnROb2RlICkge1xuXHRcdFx0XHRlbGVtLnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleDtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGVsZW0uc2VsZWN0ZWQgPT09IHRydWU7XG5cdFx0fSxcblxuXHRcdC8vIENvbnRlbnRzXG5cdFx0XCJlbXB0eVwiOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdC8vIGh0dHA6Ly93d3cudzMub3JnL1RSL3NlbGVjdG9ycy8jZW1wdHktcHNldWRvXG5cdFx0XHQvLyA6ZW1wdHkgaXMgbmVnYXRlZCBieSBlbGVtZW50ICgxKSBvciBjb250ZW50IG5vZGVzICh0ZXh0OiAzOyBjZGF0YTogNDsgZW50aXR5IHJlZjogNSksXG5cdFx0XHQvLyAgIGJ1dCBub3QgYnkgb3RoZXJzIChjb21tZW50OiA4OyBwcm9jZXNzaW5nIGluc3RydWN0aW9uOiA3OyBldGMuKVxuXHRcdFx0Ly8gbm9kZVR5cGUgPCA2IHdvcmtzIGJlY2F1c2UgYXR0cmlidXRlcyAoMikgZG8gbm90IGFwcGVhciBhcyBjaGlsZHJlblxuXHRcdFx0Zm9yICggZWxlbSA9IGVsZW0uZmlyc3RDaGlsZDsgZWxlbTsgZWxlbSA9IGVsZW0ubmV4dFNpYmxpbmcgKSB7XG5cdFx0XHRcdGlmICggZWxlbS5ub2RlVHlwZSA8IDYgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9LFxuXG5cdFx0XCJwYXJlbnRcIjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gIUV4cHIucHNldWRvc1tcImVtcHR5XCJdKCBlbGVtICk7XG5cdFx0fSxcblxuXHRcdC8vIEVsZW1lbnQvaW5wdXQgdHlwZXNcblx0XHRcImhlYWRlclwiOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiByaGVhZGVyLnRlc3QoIGVsZW0ubm9kZU5hbWUgKTtcblx0XHR9LFxuXG5cdFx0XCJpbnB1dFwiOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiByaW5wdXRzLnRlc3QoIGVsZW0ubm9kZU5hbWUgKTtcblx0XHR9LFxuXG5cdFx0XCJidXR0b25cIjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHR2YXIgbmFtZSA9IGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcblx0XHRcdHJldHVybiBuYW1lID09PSBcImlucHV0XCIgJiYgZWxlbS50eXBlID09PSBcImJ1dHRvblwiIHx8IG5hbWUgPT09IFwiYnV0dG9uXCI7XG5cdFx0fSxcblxuXHRcdFwidGV4dFwiOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHZhciBhdHRyO1xuXHRcdFx0cmV0dXJuIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gXCJpbnB1dFwiICYmXG5cdFx0XHRcdGVsZW0udHlwZSA9PT0gXCJ0ZXh0XCIgJiZcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBJRTw4XG5cdFx0XHRcdC8vIE5ldyBIVE1MNSBhdHRyaWJ1dGUgdmFsdWVzIChlLmcuLCBcInNlYXJjaFwiKSBhcHBlYXIgd2l0aCBlbGVtLnR5cGUgPT09IFwidGV4dFwiXG5cdFx0XHRcdCggKGF0dHIgPSBlbGVtLmdldEF0dHJpYnV0ZShcInR5cGVcIikpID09IG51bGwgfHwgYXR0ci50b0xvd2VyQ2FzZSgpID09PSBcInRleHRcIiApO1xuXHRcdH0sXG5cblx0XHQvLyBQb3NpdGlvbi1pbi1jb2xsZWN0aW9uXG5cdFx0XCJmaXJzdFwiOiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKGZ1bmN0aW9uKCkge1xuXHRcdFx0cmV0dXJuIFsgMCBdO1xuXHRcdH0pLFxuXG5cdFx0XCJsYXN0XCI6IGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oZnVuY3Rpb24oIG1hdGNoSW5kZXhlcywgbGVuZ3RoICkge1xuXHRcdFx0cmV0dXJuIFsgbGVuZ3RoIC0gMSBdO1xuXHRcdH0pLFxuXG5cdFx0XCJlcVwiOiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKGZ1bmN0aW9uKCBtYXRjaEluZGV4ZXMsIGxlbmd0aCwgYXJndW1lbnQgKSB7XG5cdFx0XHRyZXR1cm4gWyBhcmd1bWVudCA8IDAgPyBhcmd1bWVudCArIGxlbmd0aCA6IGFyZ3VtZW50IF07XG5cdFx0fSksXG5cblx0XHRcImV2ZW5cIjogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyhmdW5jdGlvbiggbWF0Y2hJbmRleGVzLCBsZW5ndGggKSB7XG5cdFx0XHR2YXIgaSA9IDA7XG5cdFx0XHRmb3IgKCA7IGkgPCBsZW5ndGg7IGkgKz0gMiApIHtcblx0XHRcdFx0bWF0Y2hJbmRleGVzLnB1c2goIGkgKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBtYXRjaEluZGV4ZXM7XG5cdFx0fSksXG5cblx0XHRcIm9kZFwiOiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKGZ1bmN0aW9uKCBtYXRjaEluZGV4ZXMsIGxlbmd0aCApIHtcblx0XHRcdHZhciBpID0gMTtcblx0XHRcdGZvciAoIDsgaSA8IGxlbmd0aDsgaSArPSAyICkge1xuXHRcdFx0XHRtYXRjaEluZGV4ZXMucHVzaCggaSApO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIG1hdGNoSW5kZXhlcztcblx0XHR9KSxcblxuXHRcdFwibHRcIjogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyhmdW5jdGlvbiggbWF0Y2hJbmRleGVzLCBsZW5ndGgsIGFyZ3VtZW50ICkge1xuXHRcdFx0dmFyIGkgPSBhcmd1bWVudCA8IDAgP1xuXHRcdFx0XHRhcmd1bWVudCArIGxlbmd0aCA6XG5cdFx0XHRcdGFyZ3VtZW50ID4gbGVuZ3RoID9cblx0XHRcdFx0XHRsZW5ndGggOlxuXHRcdFx0XHRcdGFyZ3VtZW50O1xuXHRcdFx0Zm9yICggOyAtLWkgPj0gMDsgKSB7XG5cdFx0XHRcdG1hdGNoSW5kZXhlcy5wdXNoKCBpICk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gbWF0Y2hJbmRleGVzO1xuXHRcdH0pLFxuXG5cdFx0XCJndFwiOiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKGZ1bmN0aW9uKCBtYXRjaEluZGV4ZXMsIGxlbmd0aCwgYXJndW1lbnQgKSB7XG5cdFx0XHR2YXIgaSA9IGFyZ3VtZW50IDwgMCA/IGFyZ3VtZW50ICsgbGVuZ3RoIDogYXJndW1lbnQ7XG5cdFx0XHRmb3IgKCA7ICsraSA8IGxlbmd0aDsgKSB7XG5cdFx0XHRcdG1hdGNoSW5kZXhlcy5wdXNoKCBpICk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gbWF0Y2hJbmRleGVzO1xuXHRcdH0pXG5cdH1cbn07XG5cbkV4cHIucHNldWRvc1tcIm50aFwiXSA9IEV4cHIucHNldWRvc1tcImVxXCJdO1xuXG4vLyBBZGQgYnV0dG9uL2lucHV0IHR5cGUgcHNldWRvc1xuZm9yICggaSBpbiB7IHJhZGlvOiB0cnVlLCBjaGVja2JveDogdHJ1ZSwgZmlsZTogdHJ1ZSwgcGFzc3dvcmQ6IHRydWUsIGltYWdlOiB0cnVlIH0gKSB7XG5cdEV4cHIucHNldWRvc1sgaSBdID0gY3JlYXRlSW5wdXRQc2V1ZG8oIGkgKTtcbn1cbmZvciAoIGkgaW4geyBzdWJtaXQ6IHRydWUsIHJlc2V0OiB0cnVlIH0gKSB7XG5cdEV4cHIucHNldWRvc1sgaSBdID0gY3JlYXRlQnV0dG9uUHNldWRvKCBpICk7XG59XG5cbi8vIEVhc3kgQVBJIGZvciBjcmVhdGluZyBuZXcgc2V0RmlsdGVyc1xuZnVuY3Rpb24gc2V0RmlsdGVycygpIHt9XG5zZXRGaWx0ZXJzLnByb3RvdHlwZSA9IEV4cHIuZmlsdGVycyA9IEV4cHIucHNldWRvcztcbkV4cHIuc2V0RmlsdGVycyA9IG5ldyBzZXRGaWx0ZXJzKCk7XG5cbnRva2VuaXplID0gU2l6emxlLnRva2VuaXplID0gZnVuY3Rpb24oIHNlbGVjdG9yLCBwYXJzZU9ubHkgKSB7XG5cdHZhciBtYXRjaGVkLCBtYXRjaCwgdG9rZW5zLCB0eXBlLFxuXHRcdHNvRmFyLCBncm91cHMsIHByZUZpbHRlcnMsXG5cdFx0Y2FjaGVkID0gdG9rZW5DYWNoZVsgc2VsZWN0b3IgKyBcIiBcIiBdO1xuXG5cdGlmICggY2FjaGVkICkge1xuXHRcdHJldHVybiBwYXJzZU9ubHkgPyAwIDogY2FjaGVkLnNsaWNlKCAwICk7XG5cdH1cblxuXHRzb0ZhciA9IHNlbGVjdG9yO1xuXHRncm91cHMgPSBbXTtcblx0cHJlRmlsdGVycyA9IEV4cHIucHJlRmlsdGVyO1xuXG5cdHdoaWxlICggc29GYXIgKSB7XG5cblx0XHQvLyBDb21tYSBhbmQgZmlyc3QgcnVuXG5cdFx0aWYgKCAhbWF0Y2hlZCB8fCAobWF0Y2ggPSByY29tbWEuZXhlYyggc29GYXIgKSkgKSB7XG5cdFx0XHRpZiAoIG1hdGNoICkge1xuXHRcdFx0XHQvLyBEb24ndCBjb25zdW1lIHRyYWlsaW5nIGNvbW1hcyBhcyB2YWxpZFxuXHRcdFx0XHRzb0ZhciA9IHNvRmFyLnNsaWNlKCBtYXRjaFswXS5sZW5ndGggKSB8fCBzb0Zhcjtcblx0XHRcdH1cblx0XHRcdGdyb3Vwcy5wdXNoKCAodG9rZW5zID0gW10pICk7XG5cdFx0fVxuXG5cdFx0bWF0Y2hlZCA9IGZhbHNlO1xuXG5cdFx0Ly8gQ29tYmluYXRvcnNcblx0XHRpZiAoIChtYXRjaCA9IHJjb21iaW5hdG9ycy5leGVjKCBzb0ZhciApKSApIHtcblx0XHRcdG1hdGNoZWQgPSBtYXRjaC5zaGlmdCgpO1xuXHRcdFx0dG9rZW5zLnB1c2goe1xuXHRcdFx0XHR2YWx1ZTogbWF0Y2hlZCxcblx0XHRcdFx0Ly8gQ2FzdCBkZXNjZW5kYW50IGNvbWJpbmF0b3JzIHRvIHNwYWNlXG5cdFx0XHRcdHR5cGU6IG1hdGNoWzBdLnJlcGxhY2UoIHJ0cmltLCBcIiBcIiApXG5cdFx0XHR9KTtcblx0XHRcdHNvRmFyID0gc29GYXIuc2xpY2UoIG1hdGNoZWQubGVuZ3RoICk7XG5cdFx0fVxuXG5cdFx0Ly8gRmlsdGVyc1xuXHRcdGZvciAoIHR5cGUgaW4gRXhwci5maWx0ZXIgKSB7XG5cdFx0XHRpZiAoIChtYXRjaCA9IG1hdGNoRXhwclsgdHlwZSBdLmV4ZWMoIHNvRmFyICkpICYmICghcHJlRmlsdGVyc1sgdHlwZSBdIHx8XG5cdFx0XHRcdChtYXRjaCA9IHByZUZpbHRlcnNbIHR5cGUgXSggbWF0Y2ggKSkpICkge1xuXHRcdFx0XHRtYXRjaGVkID0gbWF0Y2guc2hpZnQoKTtcblx0XHRcdFx0dG9rZW5zLnB1c2goe1xuXHRcdFx0XHRcdHZhbHVlOiBtYXRjaGVkLFxuXHRcdFx0XHRcdHR5cGU6IHR5cGUsXG5cdFx0XHRcdFx0bWF0Y2hlczogbWF0Y2hcblx0XHRcdFx0fSk7XG5cdFx0XHRcdHNvRmFyID0gc29GYXIuc2xpY2UoIG1hdGNoZWQubGVuZ3RoICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKCAhbWF0Y2hlZCApIHtcblx0XHRcdGJyZWFrO1xuXHRcdH1cblx0fVxuXG5cdC8vIFJldHVybiB0aGUgbGVuZ3RoIG9mIHRoZSBpbnZhbGlkIGV4Y2Vzc1xuXHQvLyBpZiB3ZSdyZSBqdXN0IHBhcnNpbmdcblx0Ly8gT3RoZXJ3aXNlLCB0aHJvdyBhbiBlcnJvciBvciByZXR1cm4gdG9rZW5zXG5cdHJldHVybiBwYXJzZU9ubHkgP1xuXHRcdHNvRmFyLmxlbmd0aCA6XG5cdFx0c29GYXIgP1xuXHRcdFx0U2l6emxlLmVycm9yKCBzZWxlY3RvciApIDpcblx0XHRcdC8vIENhY2hlIHRoZSB0b2tlbnNcblx0XHRcdHRva2VuQ2FjaGUoIHNlbGVjdG9yLCBncm91cHMgKS5zbGljZSggMCApO1xufTtcblxuZnVuY3Rpb24gdG9TZWxlY3RvciggdG9rZW5zICkge1xuXHR2YXIgaSA9IDAsXG5cdFx0bGVuID0gdG9rZW5zLmxlbmd0aCxcblx0XHRzZWxlY3RvciA9IFwiXCI7XG5cdGZvciAoIDsgaSA8IGxlbjsgaSsrICkge1xuXHRcdHNlbGVjdG9yICs9IHRva2Vuc1tpXS52YWx1ZTtcblx0fVxuXHRyZXR1cm4gc2VsZWN0b3I7XG59XG5cbmZ1bmN0aW9uIGFkZENvbWJpbmF0b3IoIG1hdGNoZXIsIGNvbWJpbmF0b3IsIGJhc2UgKSB7XG5cdHZhciBkaXIgPSBjb21iaW5hdG9yLmRpcixcblx0XHRza2lwID0gY29tYmluYXRvci5uZXh0LFxuXHRcdGtleSA9IHNraXAgfHwgZGlyLFxuXHRcdGNoZWNrTm9uRWxlbWVudHMgPSBiYXNlICYmIGtleSA9PT0gXCJwYXJlbnROb2RlXCIsXG5cdFx0ZG9uZU5hbWUgPSBkb25lKys7XG5cblx0cmV0dXJuIGNvbWJpbmF0b3IuZmlyc3QgP1xuXHRcdC8vIENoZWNrIGFnYWluc3QgY2xvc2VzdCBhbmNlc3Rvci9wcmVjZWRpbmcgZWxlbWVudFxuXHRcdGZ1bmN0aW9uKCBlbGVtLCBjb250ZXh0LCB4bWwgKSB7XG5cdFx0XHR3aGlsZSAoIChlbGVtID0gZWxlbVsgZGlyIF0pICkge1xuXHRcdFx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgfHwgY2hlY2tOb25FbGVtZW50cyApIHtcblx0XHRcdFx0XHRyZXR1cm4gbWF0Y2hlciggZWxlbSwgY29udGV4dCwgeG1sICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9IDpcblxuXHRcdC8vIENoZWNrIGFnYWluc3QgYWxsIGFuY2VzdG9yL3ByZWNlZGluZyBlbGVtZW50c1xuXHRcdGZ1bmN0aW9uKCBlbGVtLCBjb250ZXh0LCB4bWwgKSB7XG5cdFx0XHR2YXIgb2xkQ2FjaGUsIHVuaXF1ZUNhY2hlLCBvdXRlckNhY2hlLFxuXHRcdFx0XHRuZXdDYWNoZSA9IFsgZGlycnVucywgZG9uZU5hbWUgXTtcblxuXHRcdFx0Ly8gV2UgY2FuJ3Qgc2V0IGFyYml0cmFyeSBkYXRhIG9uIFhNTCBub2Rlcywgc28gdGhleSBkb24ndCBiZW5lZml0IGZyb20gY29tYmluYXRvciBjYWNoaW5nXG5cdFx0XHRpZiAoIHhtbCApIHtcblx0XHRcdFx0d2hpbGUgKCAoZWxlbSA9IGVsZW1bIGRpciBdKSApIHtcblx0XHRcdFx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgfHwgY2hlY2tOb25FbGVtZW50cyApIHtcblx0XHRcdFx0XHRcdGlmICggbWF0Y2hlciggZWxlbSwgY29udGV4dCwgeG1sICkgKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0d2hpbGUgKCAoZWxlbSA9IGVsZW1bIGRpciBdKSApIHtcblx0XHRcdFx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgfHwgY2hlY2tOb25FbGVtZW50cyApIHtcblx0XHRcdFx0XHRcdG91dGVyQ2FjaGUgPSBlbGVtWyBleHBhbmRvIF0gfHwgKGVsZW1bIGV4cGFuZG8gXSA9IHt9KTtcblxuXHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPDkgb25seVxuXHRcdFx0XHRcdFx0Ly8gRGVmZW5kIGFnYWluc3QgY2xvbmVkIGF0dHJvcGVydGllcyAoalF1ZXJ5IGdoLTE3MDkpXG5cdFx0XHRcdFx0XHR1bmlxdWVDYWNoZSA9IG91dGVyQ2FjaGVbIGVsZW0udW5pcXVlSUQgXSB8fCAob3V0ZXJDYWNoZVsgZWxlbS51bmlxdWVJRCBdID0ge30pO1xuXG5cdFx0XHRcdFx0XHRpZiAoIHNraXAgJiYgc2tpcCA9PT0gZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpICkge1xuXHRcdFx0XHRcdFx0XHRlbGVtID0gZWxlbVsgZGlyIF0gfHwgZWxlbTtcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoIChvbGRDYWNoZSA9IHVuaXF1ZUNhY2hlWyBrZXkgXSkgJiZcblx0XHRcdFx0XHRcdFx0b2xkQ2FjaGVbIDAgXSA9PT0gZGlycnVucyAmJiBvbGRDYWNoZVsgMSBdID09PSBkb25lTmFtZSApIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBBc3NpZ24gdG8gbmV3Q2FjaGUgc28gcmVzdWx0cyBiYWNrLXByb3BhZ2F0ZSB0byBwcmV2aW91cyBlbGVtZW50c1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gKG5ld0NhY2hlWyAyIF0gPSBvbGRDYWNoZVsgMiBdKTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdC8vIFJldXNlIG5ld2NhY2hlIHNvIHJlc3VsdHMgYmFjay1wcm9wYWdhdGUgdG8gcHJldmlvdXMgZWxlbWVudHNcblx0XHRcdFx0XHRcdFx0dW5pcXVlQ2FjaGVbIGtleSBdID0gbmV3Q2FjaGU7XG5cblx0XHRcdFx0XHRcdFx0Ly8gQSBtYXRjaCBtZWFucyB3ZSdyZSBkb25lOyBhIGZhaWwgbWVhbnMgd2UgaGF2ZSB0byBrZWVwIGNoZWNraW5nXG5cdFx0XHRcdFx0XHRcdGlmICggKG5ld0NhY2hlWyAyIF0gPSBtYXRjaGVyKCBlbGVtLCBjb250ZXh0LCB4bWwgKSkgKSB7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9O1xufVxuXG5mdW5jdGlvbiBlbGVtZW50TWF0Y2hlciggbWF0Y2hlcnMgKSB7XG5cdHJldHVybiBtYXRjaGVycy5sZW5ndGggPiAxID9cblx0XHRmdW5jdGlvbiggZWxlbSwgY29udGV4dCwgeG1sICkge1xuXHRcdFx0dmFyIGkgPSBtYXRjaGVycy5sZW5ndGg7XG5cdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0aWYgKCAhbWF0Y2hlcnNbaV0oIGVsZW0sIGNvbnRleHQsIHhtbCApICkge1xuXHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fSA6XG5cdFx0bWF0Y2hlcnNbMF07XG59XG5cbmZ1bmN0aW9uIG11bHRpcGxlQ29udGV4dHMoIHNlbGVjdG9yLCBjb250ZXh0cywgcmVzdWx0cyApIHtcblx0dmFyIGkgPSAwLFxuXHRcdGxlbiA9IGNvbnRleHRzLmxlbmd0aDtcblx0Zm9yICggOyBpIDwgbGVuOyBpKysgKSB7XG5cdFx0U2l6emxlKCBzZWxlY3RvciwgY29udGV4dHNbaV0sIHJlc3VsdHMgKTtcblx0fVxuXHRyZXR1cm4gcmVzdWx0cztcbn1cblxuZnVuY3Rpb24gY29uZGVuc2UoIHVubWF0Y2hlZCwgbWFwLCBmaWx0ZXIsIGNvbnRleHQsIHhtbCApIHtcblx0dmFyIGVsZW0sXG5cdFx0bmV3VW5tYXRjaGVkID0gW10sXG5cdFx0aSA9IDAsXG5cdFx0bGVuID0gdW5tYXRjaGVkLmxlbmd0aCxcblx0XHRtYXBwZWQgPSBtYXAgIT0gbnVsbDtcblxuXHRmb3IgKCA7IGkgPCBsZW47IGkrKyApIHtcblx0XHRpZiAoIChlbGVtID0gdW5tYXRjaGVkW2ldKSApIHtcblx0XHRcdGlmICggIWZpbHRlciB8fCBmaWx0ZXIoIGVsZW0sIGNvbnRleHQsIHhtbCApICkge1xuXHRcdFx0XHRuZXdVbm1hdGNoZWQucHVzaCggZWxlbSApO1xuXHRcdFx0XHRpZiAoIG1hcHBlZCApIHtcblx0XHRcdFx0XHRtYXAucHVzaCggaSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIG5ld1VubWF0Y2hlZDtcbn1cblxuZnVuY3Rpb24gc2V0TWF0Y2hlciggcHJlRmlsdGVyLCBzZWxlY3RvciwgbWF0Y2hlciwgcG9zdEZpbHRlciwgcG9zdEZpbmRlciwgcG9zdFNlbGVjdG9yICkge1xuXHRpZiAoIHBvc3RGaWx0ZXIgJiYgIXBvc3RGaWx0ZXJbIGV4cGFuZG8gXSApIHtcblx0XHRwb3N0RmlsdGVyID0gc2V0TWF0Y2hlciggcG9zdEZpbHRlciApO1xuXHR9XG5cdGlmICggcG9zdEZpbmRlciAmJiAhcG9zdEZpbmRlclsgZXhwYW5kbyBdICkge1xuXHRcdHBvc3RGaW5kZXIgPSBzZXRNYXRjaGVyKCBwb3N0RmluZGVyLCBwb3N0U2VsZWN0b3IgKTtcblx0fVxuXHRyZXR1cm4gbWFya0Z1bmN0aW9uKGZ1bmN0aW9uKCBzZWVkLCByZXN1bHRzLCBjb250ZXh0LCB4bWwgKSB7XG5cdFx0dmFyIHRlbXAsIGksIGVsZW0sXG5cdFx0XHRwcmVNYXAgPSBbXSxcblx0XHRcdHBvc3RNYXAgPSBbXSxcblx0XHRcdHByZWV4aXN0aW5nID0gcmVzdWx0cy5sZW5ndGgsXG5cblx0XHRcdC8vIEdldCBpbml0aWFsIGVsZW1lbnRzIGZyb20gc2VlZCBvciBjb250ZXh0XG5cdFx0XHRlbGVtcyA9IHNlZWQgfHwgbXVsdGlwbGVDb250ZXh0cyggc2VsZWN0b3IgfHwgXCIqXCIsIGNvbnRleHQubm9kZVR5cGUgPyBbIGNvbnRleHQgXSA6IGNvbnRleHQsIFtdICksXG5cblx0XHRcdC8vIFByZWZpbHRlciB0byBnZXQgbWF0Y2hlciBpbnB1dCwgcHJlc2VydmluZyBhIG1hcCBmb3Igc2VlZC1yZXN1bHRzIHN5bmNocm9uaXphdGlvblxuXHRcdFx0bWF0Y2hlckluID0gcHJlRmlsdGVyICYmICggc2VlZCB8fCAhc2VsZWN0b3IgKSA/XG5cdFx0XHRcdGNvbmRlbnNlKCBlbGVtcywgcHJlTWFwLCBwcmVGaWx0ZXIsIGNvbnRleHQsIHhtbCApIDpcblx0XHRcdFx0ZWxlbXMsXG5cblx0XHRcdG1hdGNoZXJPdXQgPSBtYXRjaGVyID9cblx0XHRcdFx0Ly8gSWYgd2UgaGF2ZSBhIHBvc3RGaW5kZXIsIG9yIGZpbHRlcmVkIHNlZWQsIG9yIG5vbi1zZWVkIHBvc3RGaWx0ZXIgb3IgcHJlZXhpc3RpbmcgcmVzdWx0cyxcblx0XHRcdFx0cG9zdEZpbmRlciB8fCAoIHNlZWQgPyBwcmVGaWx0ZXIgOiBwcmVleGlzdGluZyB8fCBwb3N0RmlsdGVyICkgP1xuXG5cdFx0XHRcdFx0Ly8gLi4uaW50ZXJtZWRpYXRlIHByb2Nlc3NpbmcgaXMgbmVjZXNzYXJ5XG5cdFx0XHRcdFx0W10gOlxuXG5cdFx0XHRcdFx0Ly8gLi4ub3RoZXJ3aXNlIHVzZSByZXN1bHRzIGRpcmVjdGx5XG5cdFx0XHRcdFx0cmVzdWx0cyA6XG5cdFx0XHRcdG1hdGNoZXJJbjtcblxuXHRcdC8vIEZpbmQgcHJpbWFyeSBtYXRjaGVzXG5cdFx0aWYgKCBtYXRjaGVyICkge1xuXHRcdFx0bWF0Y2hlciggbWF0Y2hlckluLCBtYXRjaGVyT3V0LCBjb250ZXh0LCB4bWwgKTtcblx0XHR9XG5cblx0XHQvLyBBcHBseSBwb3N0RmlsdGVyXG5cdFx0aWYgKCBwb3N0RmlsdGVyICkge1xuXHRcdFx0dGVtcCA9IGNvbmRlbnNlKCBtYXRjaGVyT3V0LCBwb3N0TWFwICk7XG5cdFx0XHRwb3N0RmlsdGVyKCB0ZW1wLCBbXSwgY29udGV4dCwgeG1sICk7XG5cblx0XHRcdC8vIFVuLW1hdGNoIGZhaWxpbmcgZWxlbWVudHMgYnkgbW92aW5nIHRoZW0gYmFjayB0byBtYXRjaGVySW5cblx0XHRcdGkgPSB0ZW1wLmxlbmd0aDtcblx0XHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0XHRpZiAoIChlbGVtID0gdGVtcFtpXSkgKSB7XG5cdFx0XHRcdFx0bWF0Y2hlck91dFsgcG9zdE1hcFtpXSBdID0gIShtYXRjaGVySW5bIHBvc3RNYXBbaV0gXSA9IGVsZW0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKCBzZWVkICkge1xuXHRcdFx0aWYgKCBwb3N0RmluZGVyIHx8IHByZUZpbHRlciApIHtcblx0XHRcdFx0aWYgKCBwb3N0RmluZGVyICkge1xuXHRcdFx0XHRcdC8vIEdldCB0aGUgZmluYWwgbWF0Y2hlck91dCBieSBjb25kZW5zaW5nIHRoaXMgaW50ZXJtZWRpYXRlIGludG8gcG9zdEZpbmRlciBjb250ZXh0c1xuXHRcdFx0XHRcdHRlbXAgPSBbXTtcblx0XHRcdFx0XHRpID0gbWF0Y2hlck91dC5sZW5ndGg7XG5cdFx0XHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRcdFx0XHRpZiAoIChlbGVtID0gbWF0Y2hlck91dFtpXSkgKSB7XG5cdFx0XHRcdFx0XHRcdC8vIFJlc3RvcmUgbWF0Y2hlckluIHNpbmNlIGVsZW0gaXMgbm90IHlldCBhIGZpbmFsIG1hdGNoXG5cdFx0XHRcdFx0XHRcdHRlbXAucHVzaCggKG1hdGNoZXJJbltpXSA9IGVsZW0pICk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHBvc3RGaW5kZXIoIG51bGwsIChtYXRjaGVyT3V0ID0gW10pLCB0ZW1wLCB4bWwgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIE1vdmUgbWF0Y2hlZCBlbGVtZW50cyBmcm9tIHNlZWQgdG8gcmVzdWx0cyB0byBrZWVwIHRoZW0gc3luY2hyb25pemVkXG5cdFx0XHRcdGkgPSBtYXRjaGVyT3V0Lmxlbmd0aDtcblx0XHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRcdFx0aWYgKCAoZWxlbSA9IG1hdGNoZXJPdXRbaV0pICYmXG5cdFx0XHRcdFx0XHQodGVtcCA9IHBvc3RGaW5kZXIgPyBpbmRleE9mKCBzZWVkLCBlbGVtICkgOiBwcmVNYXBbaV0pID4gLTEgKSB7XG5cblx0XHRcdFx0XHRcdHNlZWRbdGVtcF0gPSAhKHJlc3VsdHNbdGVtcF0gPSBlbGVtKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdC8vIEFkZCBlbGVtZW50cyB0byByZXN1bHRzLCB0aHJvdWdoIHBvc3RGaW5kZXIgaWYgZGVmaW5lZFxuXHRcdH0gZWxzZSB7XG5cdFx0XHRtYXRjaGVyT3V0ID0gY29uZGVuc2UoXG5cdFx0XHRcdG1hdGNoZXJPdXQgPT09IHJlc3VsdHMgP1xuXHRcdFx0XHRcdG1hdGNoZXJPdXQuc3BsaWNlKCBwcmVleGlzdGluZywgbWF0Y2hlck91dC5sZW5ndGggKSA6XG5cdFx0XHRcdFx0bWF0Y2hlck91dFxuXHRcdFx0KTtcblx0XHRcdGlmICggcG9zdEZpbmRlciApIHtcblx0XHRcdFx0cG9zdEZpbmRlciggbnVsbCwgcmVzdWx0cywgbWF0Y2hlck91dCwgeG1sICk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRwdXNoLmFwcGx5KCByZXN1bHRzLCBtYXRjaGVyT3V0ICk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcbn1cblxuZnVuY3Rpb24gbWF0Y2hlckZyb21Ub2tlbnMoIHRva2VucyApIHtcblx0dmFyIGNoZWNrQ29udGV4dCwgbWF0Y2hlciwgaixcblx0XHRsZW4gPSB0b2tlbnMubGVuZ3RoLFxuXHRcdGxlYWRpbmdSZWxhdGl2ZSA9IEV4cHIucmVsYXRpdmVbIHRva2Vuc1swXS50eXBlIF0sXG5cdFx0aW1wbGljaXRSZWxhdGl2ZSA9IGxlYWRpbmdSZWxhdGl2ZSB8fCBFeHByLnJlbGF0aXZlW1wiIFwiXSxcblx0XHRpID0gbGVhZGluZ1JlbGF0aXZlID8gMSA6IDAsXG5cblx0XHQvLyBUaGUgZm91bmRhdGlvbmFsIG1hdGNoZXIgZW5zdXJlcyB0aGF0IGVsZW1lbnRzIGFyZSByZWFjaGFibGUgZnJvbSB0b3AtbGV2ZWwgY29udGV4dChzKVxuXHRcdG1hdGNoQ29udGV4dCA9IGFkZENvbWJpbmF0b3IoIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuIGVsZW0gPT09IGNoZWNrQ29udGV4dDtcblx0XHR9LCBpbXBsaWNpdFJlbGF0aXZlLCB0cnVlICksXG5cdFx0bWF0Y2hBbnlDb250ZXh0ID0gYWRkQ29tYmluYXRvciggZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gaW5kZXhPZiggY2hlY2tDb250ZXh0LCBlbGVtICkgPiAtMTtcblx0XHR9LCBpbXBsaWNpdFJlbGF0aXZlLCB0cnVlICksXG5cdFx0bWF0Y2hlcnMgPSBbIGZ1bmN0aW9uKCBlbGVtLCBjb250ZXh0LCB4bWwgKSB7XG5cdFx0XHR2YXIgcmV0ID0gKCAhbGVhZGluZ1JlbGF0aXZlICYmICggeG1sIHx8IGNvbnRleHQgIT09IG91dGVybW9zdENvbnRleHQgKSApIHx8IChcblx0XHRcdFx0KGNoZWNrQ29udGV4dCA9IGNvbnRleHQpLm5vZGVUeXBlID9cblx0XHRcdFx0XHRtYXRjaENvbnRleHQoIGVsZW0sIGNvbnRleHQsIHhtbCApIDpcblx0XHRcdFx0XHRtYXRjaEFueUNvbnRleHQoIGVsZW0sIGNvbnRleHQsIHhtbCApICk7XG5cdFx0XHQvLyBBdm9pZCBoYW5naW5nIG9udG8gZWxlbWVudCAoaXNzdWUgIzI5OSlcblx0XHRcdGNoZWNrQ29udGV4dCA9IG51bGw7XG5cdFx0XHRyZXR1cm4gcmV0O1xuXHRcdH0gXTtcblxuXHRmb3IgKCA7IGkgPCBsZW47IGkrKyApIHtcblx0XHRpZiAoIChtYXRjaGVyID0gRXhwci5yZWxhdGl2ZVsgdG9rZW5zW2ldLnR5cGUgXSkgKSB7XG5cdFx0XHRtYXRjaGVycyA9IFsgYWRkQ29tYmluYXRvcihlbGVtZW50TWF0Y2hlciggbWF0Y2hlcnMgKSwgbWF0Y2hlcikgXTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0bWF0Y2hlciA9IEV4cHIuZmlsdGVyWyB0b2tlbnNbaV0udHlwZSBdLmFwcGx5KCBudWxsLCB0b2tlbnNbaV0ubWF0Y2hlcyApO1xuXG5cdFx0XHQvLyBSZXR1cm4gc3BlY2lhbCB1cG9uIHNlZWluZyBhIHBvc2l0aW9uYWwgbWF0Y2hlclxuXHRcdFx0aWYgKCBtYXRjaGVyWyBleHBhbmRvIF0gKSB7XG5cdFx0XHRcdC8vIEZpbmQgdGhlIG5leHQgcmVsYXRpdmUgb3BlcmF0b3IgKGlmIGFueSkgZm9yIHByb3BlciBoYW5kbGluZ1xuXHRcdFx0XHRqID0gKytpO1xuXHRcdFx0XHRmb3IgKCA7IGogPCBsZW47IGorKyApIHtcblx0XHRcdFx0XHRpZiAoIEV4cHIucmVsYXRpdmVbIHRva2Vuc1tqXS50eXBlIF0gKSB7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHNldE1hdGNoZXIoXG5cdFx0XHRcdFx0aSA+IDEgJiYgZWxlbWVudE1hdGNoZXIoIG1hdGNoZXJzICksXG5cdFx0XHRcdFx0aSA+IDEgJiYgdG9TZWxlY3Rvcihcblx0XHRcdFx0XHRcdC8vIElmIHRoZSBwcmVjZWRpbmcgdG9rZW4gd2FzIGEgZGVzY2VuZGFudCBjb21iaW5hdG9yLCBpbnNlcnQgYW4gaW1wbGljaXQgYW55LWVsZW1lbnQgYCpgXG5cdFx0XHRcdFx0XHR0b2tlbnMuc2xpY2UoIDAsIGkgLSAxICkuY29uY2F0KHsgdmFsdWU6IHRva2Vuc1sgaSAtIDIgXS50eXBlID09PSBcIiBcIiA/IFwiKlwiIDogXCJcIiB9KVxuXHRcdFx0XHRcdCkucmVwbGFjZSggcnRyaW0sIFwiJDFcIiApLFxuXHRcdFx0XHRcdG1hdGNoZXIsXG5cdFx0XHRcdFx0aSA8IGogJiYgbWF0Y2hlckZyb21Ub2tlbnMoIHRva2Vucy5zbGljZSggaSwgaiApICksXG5cdFx0XHRcdFx0aiA8IGxlbiAmJiBtYXRjaGVyRnJvbVRva2VucyggKHRva2VucyA9IHRva2Vucy5zbGljZSggaiApKSApLFxuXHRcdFx0XHRcdGogPCBsZW4gJiYgdG9TZWxlY3RvciggdG9rZW5zIClcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHRcdG1hdGNoZXJzLnB1c2goIG1hdGNoZXIgKTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gZWxlbWVudE1hdGNoZXIoIG1hdGNoZXJzICk7XG59XG5cbmZ1bmN0aW9uIG1hdGNoZXJGcm9tR3JvdXBNYXRjaGVycyggZWxlbWVudE1hdGNoZXJzLCBzZXRNYXRjaGVycyApIHtcblx0dmFyIGJ5U2V0ID0gc2V0TWF0Y2hlcnMubGVuZ3RoID4gMCxcblx0XHRieUVsZW1lbnQgPSBlbGVtZW50TWF0Y2hlcnMubGVuZ3RoID4gMCxcblx0XHRzdXBlck1hdGNoZXIgPSBmdW5jdGlvbiggc2VlZCwgY29udGV4dCwgeG1sLCByZXN1bHRzLCBvdXRlcm1vc3QgKSB7XG5cdFx0XHR2YXIgZWxlbSwgaiwgbWF0Y2hlcixcblx0XHRcdFx0bWF0Y2hlZENvdW50ID0gMCxcblx0XHRcdFx0aSA9IFwiMFwiLFxuXHRcdFx0XHR1bm1hdGNoZWQgPSBzZWVkICYmIFtdLFxuXHRcdFx0XHRzZXRNYXRjaGVkID0gW10sXG5cdFx0XHRcdGNvbnRleHRCYWNrdXAgPSBvdXRlcm1vc3RDb250ZXh0LFxuXHRcdFx0XHQvLyBXZSBtdXN0IGFsd2F5cyBoYXZlIGVpdGhlciBzZWVkIGVsZW1lbnRzIG9yIG91dGVybW9zdCBjb250ZXh0XG5cdFx0XHRcdGVsZW1zID0gc2VlZCB8fCBieUVsZW1lbnQgJiYgRXhwci5maW5kW1wiVEFHXCJdKCBcIipcIiwgb3V0ZXJtb3N0ICksXG5cdFx0XHRcdC8vIFVzZSBpbnRlZ2VyIGRpcnJ1bnMgaWZmIHRoaXMgaXMgdGhlIG91dGVybW9zdCBtYXRjaGVyXG5cdFx0XHRcdGRpcnJ1bnNVbmlxdWUgPSAoZGlycnVucyArPSBjb250ZXh0QmFja3VwID09IG51bGwgPyAxIDogTWF0aC5yYW5kb20oKSB8fCAwLjEpLFxuXHRcdFx0XHRsZW4gPSBlbGVtcy5sZW5ndGg7XG5cblx0XHRcdGlmICggb3V0ZXJtb3N0ICkge1xuXHRcdFx0XHRvdXRlcm1vc3RDb250ZXh0ID0gY29udGV4dCA9PT0gZG9jdW1lbnQgfHwgY29udGV4dCB8fCBvdXRlcm1vc3Q7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEFkZCBlbGVtZW50cyBwYXNzaW5nIGVsZW1lbnRNYXRjaGVycyBkaXJlY3RseSB0byByZXN1bHRzXG5cdFx0XHQvLyBTdXBwb3J0OiBJRTw5LCBTYWZhcmlcblx0XHRcdC8vIFRvbGVyYXRlIE5vZGVMaXN0IHByb3BlcnRpZXMgKElFOiBcImxlbmd0aFwiOyBTYWZhcmk6IDxudW1iZXI+KSBtYXRjaGluZyBlbGVtZW50cyBieSBpZFxuXHRcdFx0Zm9yICggOyBpICE9PSBsZW4gJiYgKGVsZW0gPSBlbGVtc1tpXSkgIT0gbnVsbDsgaSsrICkge1xuXHRcdFx0XHRpZiAoIGJ5RWxlbWVudCAmJiBlbGVtICkge1xuXHRcdFx0XHRcdGogPSAwO1xuXHRcdFx0XHRcdGlmICggIWNvbnRleHQgJiYgZWxlbS5vd25lckRvY3VtZW50ICE9PSBkb2N1bWVudCApIHtcblx0XHRcdFx0XHRcdHNldERvY3VtZW50KCBlbGVtICk7XG5cdFx0XHRcdFx0XHR4bWwgPSAhZG9jdW1lbnRJc0hUTUw7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHdoaWxlICggKG1hdGNoZXIgPSBlbGVtZW50TWF0Y2hlcnNbaisrXSkgKSB7XG5cdFx0XHRcdFx0XHRpZiAoIG1hdGNoZXIoIGVsZW0sIGNvbnRleHQgfHwgZG9jdW1lbnQsIHhtbCkgKSB7XG5cdFx0XHRcdFx0XHRcdHJlc3VsdHMucHVzaCggZWxlbSApO1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKCBvdXRlcm1vc3QgKSB7XG5cdFx0XHRcdFx0XHRkaXJydW5zID0gZGlycnVuc1VuaXF1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBUcmFjayB1bm1hdGNoZWQgZWxlbWVudHMgZm9yIHNldCBmaWx0ZXJzXG5cdFx0XHRcdGlmICggYnlTZXQgKSB7XG5cdFx0XHRcdFx0Ly8gVGhleSB3aWxsIGhhdmUgZ29uZSB0aHJvdWdoIGFsbCBwb3NzaWJsZSBtYXRjaGVyc1xuXHRcdFx0XHRcdGlmICggKGVsZW0gPSAhbWF0Y2hlciAmJiBlbGVtKSApIHtcblx0XHRcdFx0XHRcdG1hdGNoZWRDb3VudC0tO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIExlbmd0aGVuIHRoZSBhcnJheSBmb3IgZXZlcnkgZWxlbWVudCwgbWF0Y2hlZCBvciBub3Rcblx0XHRcdFx0XHRpZiAoIHNlZWQgKSB7XG5cdFx0XHRcdFx0XHR1bm1hdGNoZWQucHVzaCggZWxlbSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBgaWAgaXMgbm93IHRoZSBjb3VudCBvZiBlbGVtZW50cyB2aXNpdGVkIGFib3ZlLCBhbmQgYWRkaW5nIGl0IHRvIGBtYXRjaGVkQ291bnRgXG5cdFx0XHQvLyBtYWtlcyB0aGUgbGF0dGVyIG5vbm5lZ2F0aXZlLlxuXHRcdFx0bWF0Y2hlZENvdW50ICs9IGk7XG5cblx0XHRcdC8vIEFwcGx5IHNldCBmaWx0ZXJzIHRvIHVubWF0Y2hlZCBlbGVtZW50c1xuXHRcdFx0Ly8gTk9URTogVGhpcyBjYW4gYmUgc2tpcHBlZCBpZiB0aGVyZSBhcmUgbm8gdW5tYXRjaGVkIGVsZW1lbnRzIChpLmUuLCBgbWF0Y2hlZENvdW50YFxuXHRcdFx0Ly8gZXF1YWxzIGBpYCksIHVubGVzcyB3ZSBkaWRuJ3QgdmlzaXQgX2FueV8gZWxlbWVudHMgaW4gdGhlIGFib3ZlIGxvb3AgYmVjYXVzZSB3ZSBoYXZlXG5cdFx0XHQvLyBubyBlbGVtZW50IG1hdGNoZXJzIGFuZCBubyBzZWVkLlxuXHRcdFx0Ly8gSW5jcmVtZW50aW5nIGFuIGluaXRpYWxseS1zdHJpbmcgXCIwXCIgYGlgIGFsbG93cyBgaWAgdG8gcmVtYWluIGEgc3RyaW5nIG9ubHkgaW4gdGhhdFxuXHRcdFx0Ly8gY2FzZSwgd2hpY2ggd2lsbCByZXN1bHQgaW4gYSBcIjAwXCIgYG1hdGNoZWRDb3VudGAgdGhhdCBkaWZmZXJzIGZyb20gYGlgIGJ1dCBpcyBhbHNvXG5cdFx0XHQvLyBudW1lcmljYWxseSB6ZXJvLlxuXHRcdFx0aWYgKCBieVNldCAmJiBpICE9PSBtYXRjaGVkQ291bnQgKSB7XG5cdFx0XHRcdGogPSAwO1xuXHRcdFx0XHR3aGlsZSAoIChtYXRjaGVyID0gc2V0TWF0Y2hlcnNbaisrXSkgKSB7XG5cdFx0XHRcdFx0bWF0Y2hlciggdW5tYXRjaGVkLCBzZXRNYXRjaGVkLCBjb250ZXh0LCB4bWwgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICggc2VlZCApIHtcblx0XHRcdFx0XHQvLyBSZWludGVncmF0ZSBlbGVtZW50IG1hdGNoZXMgdG8gZWxpbWluYXRlIHRoZSBuZWVkIGZvciBzb3J0aW5nXG5cdFx0XHRcdFx0aWYgKCBtYXRjaGVkQ291bnQgPiAwICkge1xuXHRcdFx0XHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRcdFx0XHRcdGlmICggISh1bm1hdGNoZWRbaV0gfHwgc2V0TWF0Y2hlZFtpXSkgKSB7XG5cdFx0XHRcdFx0XHRcdFx0c2V0TWF0Y2hlZFtpXSA9IHBvcC5jYWxsKCByZXN1bHRzICk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBEaXNjYXJkIGluZGV4IHBsYWNlaG9sZGVyIHZhbHVlcyB0byBnZXQgb25seSBhY3R1YWwgbWF0Y2hlc1xuXHRcdFx0XHRcdHNldE1hdGNoZWQgPSBjb25kZW5zZSggc2V0TWF0Y2hlZCApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gQWRkIG1hdGNoZXMgdG8gcmVzdWx0c1xuXHRcdFx0XHRwdXNoLmFwcGx5KCByZXN1bHRzLCBzZXRNYXRjaGVkICk7XG5cblx0XHRcdFx0Ly8gU2VlZGxlc3Mgc2V0IG1hdGNoZXMgc3VjY2VlZGluZyBtdWx0aXBsZSBzdWNjZXNzZnVsIG1hdGNoZXJzIHN0aXB1bGF0ZSBzb3J0aW5nXG5cdFx0XHRcdGlmICggb3V0ZXJtb3N0ICYmICFzZWVkICYmIHNldE1hdGNoZWQubGVuZ3RoID4gMCAmJlxuXHRcdFx0XHRcdCggbWF0Y2hlZENvdW50ICsgc2V0TWF0Y2hlcnMubGVuZ3RoICkgPiAxICkge1xuXG5cdFx0XHRcdFx0U2l6emxlLnVuaXF1ZVNvcnQoIHJlc3VsdHMgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBPdmVycmlkZSBtYW5pcHVsYXRpb24gb2YgZ2xvYmFscyBieSBuZXN0ZWQgbWF0Y2hlcnNcblx0XHRcdGlmICggb3V0ZXJtb3N0ICkge1xuXHRcdFx0XHRkaXJydW5zID0gZGlycnVuc1VuaXF1ZTtcblx0XHRcdFx0b3V0ZXJtb3N0Q29udGV4dCA9IGNvbnRleHRCYWNrdXA7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiB1bm1hdGNoZWQ7XG5cdFx0fTtcblxuXHRyZXR1cm4gYnlTZXQgP1xuXHRcdG1hcmtGdW5jdGlvbiggc3VwZXJNYXRjaGVyICkgOlxuXHRcdHN1cGVyTWF0Y2hlcjtcbn1cblxuY29tcGlsZSA9IFNpenpsZS5jb21waWxlID0gZnVuY3Rpb24oIHNlbGVjdG9yLCBtYXRjaCAvKiBJbnRlcm5hbCBVc2UgT25seSAqLyApIHtcblx0dmFyIGksXG5cdFx0c2V0TWF0Y2hlcnMgPSBbXSxcblx0XHRlbGVtZW50TWF0Y2hlcnMgPSBbXSxcblx0XHRjYWNoZWQgPSBjb21waWxlckNhY2hlWyBzZWxlY3RvciArIFwiIFwiIF07XG5cblx0aWYgKCAhY2FjaGVkICkge1xuXHRcdC8vIEdlbmVyYXRlIGEgZnVuY3Rpb24gb2YgcmVjdXJzaXZlIGZ1bmN0aW9ucyB0aGF0IGNhbiBiZSB1c2VkIHRvIGNoZWNrIGVhY2ggZWxlbWVudFxuXHRcdGlmICggIW1hdGNoICkge1xuXHRcdFx0bWF0Y2ggPSB0b2tlbml6ZSggc2VsZWN0b3IgKTtcblx0XHR9XG5cdFx0aSA9IG1hdGNoLmxlbmd0aDtcblx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdGNhY2hlZCA9IG1hdGNoZXJGcm9tVG9rZW5zKCBtYXRjaFtpXSApO1xuXHRcdFx0aWYgKCBjYWNoZWRbIGV4cGFuZG8gXSApIHtcblx0XHRcdFx0c2V0TWF0Y2hlcnMucHVzaCggY2FjaGVkICk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRlbGVtZW50TWF0Y2hlcnMucHVzaCggY2FjaGVkICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gQ2FjaGUgdGhlIGNvbXBpbGVkIGZ1bmN0aW9uXG5cdFx0Y2FjaGVkID0gY29tcGlsZXJDYWNoZSggc2VsZWN0b3IsIG1hdGNoZXJGcm9tR3JvdXBNYXRjaGVycyggZWxlbWVudE1hdGNoZXJzLCBzZXRNYXRjaGVycyApICk7XG5cblx0XHQvLyBTYXZlIHNlbGVjdG9yIGFuZCB0b2tlbml6YXRpb25cblx0XHRjYWNoZWQuc2VsZWN0b3IgPSBzZWxlY3Rvcjtcblx0fVxuXHRyZXR1cm4gY2FjaGVkO1xufTtcblxuLyoqXG4gKiBBIGxvdy1sZXZlbCBzZWxlY3Rpb24gZnVuY3Rpb24gdGhhdCB3b3JrcyB3aXRoIFNpenpsZSdzIGNvbXBpbGVkXG4gKiAgc2VsZWN0b3IgZnVuY3Rpb25zXG4gKiBAcGFyYW0ge1N0cmluZ3xGdW5jdGlvbn0gc2VsZWN0b3IgQSBzZWxlY3RvciBvciBhIHByZS1jb21waWxlZFxuICogIHNlbGVjdG9yIGZ1bmN0aW9uIGJ1aWx0IHdpdGggU2l6emxlLmNvbXBpbGVcbiAqIEBwYXJhbSB7RWxlbWVudH0gY29udGV4dFxuICogQHBhcmFtIHtBcnJheX0gW3Jlc3VsdHNdXG4gKiBAcGFyYW0ge0FycmF5fSBbc2VlZF0gQSBzZXQgb2YgZWxlbWVudHMgdG8gbWF0Y2ggYWdhaW5zdFxuICovXG5zZWxlY3QgPSBTaXp6bGUuc2VsZWN0ID0gZnVuY3Rpb24oIHNlbGVjdG9yLCBjb250ZXh0LCByZXN1bHRzLCBzZWVkICkge1xuXHR2YXIgaSwgdG9rZW5zLCB0b2tlbiwgdHlwZSwgZmluZCxcblx0XHRjb21waWxlZCA9IHR5cGVvZiBzZWxlY3RvciA9PT0gXCJmdW5jdGlvblwiICYmIHNlbGVjdG9yLFxuXHRcdG1hdGNoID0gIXNlZWQgJiYgdG9rZW5pemUoIChzZWxlY3RvciA9IGNvbXBpbGVkLnNlbGVjdG9yIHx8IHNlbGVjdG9yKSApO1xuXG5cdHJlc3VsdHMgPSByZXN1bHRzIHx8IFtdO1xuXG5cdC8vIFRyeSB0byBtaW5pbWl6ZSBvcGVyYXRpb25zIGlmIHRoZXJlIGlzIG9ubHkgb25lIHNlbGVjdG9yIGluIHRoZSBsaXN0IGFuZCBubyBzZWVkXG5cdC8vICh0aGUgbGF0dGVyIG9mIHdoaWNoIGd1YXJhbnRlZXMgdXMgY29udGV4dClcblx0aWYgKCBtYXRjaC5sZW5ndGggPT09IDEgKSB7XG5cblx0XHQvLyBSZWR1Y2UgY29udGV4dCBpZiB0aGUgbGVhZGluZyBjb21wb3VuZCBzZWxlY3RvciBpcyBhbiBJRFxuXHRcdHRva2VucyA9IG1hdGNoWzBdID0gbWF0Y2hbMF0uc2xpY2UoIDAgKTtcblx0XHRpZiAoIHRva2Vucy5sZW5ndGggPiAyICYmICh0b2tlbiA9IHRva2Vuc1swXSkudHlwZSA9PT0gXCJJRFwiICYmXG5cdFx0XHRcdGNvbnRleHQubm9kZVR5cGUgPT09IDkgJiYgZG9jdW1lbnRJc0hUTUwgJiYgRXhwci5yZWxhdGl2ZVsgdG9rZW5zWzFdLnR5cGUgXSApIHtcblxuXHRcdFx0Y29udGV4dCA9ICggRXhwci5maW5kW1wiSURcIl0oIHRva2VuLm1hdGNoZXNbMF0ucmVwbGFjZShydW5lc2NhcGUsIGZ1bmVzY2FwZSksIGNvbnRleHQgKSB8fCBbXSApWzBdO1xuXHRcdFx0aWYgKCAhY29udGV4dCApIHtcblx0XHRcdFx0cmV0dXJuIHJlc3VsdHM7XG5cblx0XHRcdC8vIFByZWNvbXBpbGVkIG1hdGNoZXJzIHdpbGwgc3RpbGwgdmVyaWZ5IGFuY2VzdHJ5LCBzbyBzdGVwIHVwIGEgbGV2ZWxcblx0XHRcdH0gZWxzZSBpZiAoIGNvbXBpbGVkICkge1xuXHRcdFx0XHRjb250ZXh0ID0gY29udGV4dC5wYXJlbnROb2RlO1xuXHRcdFx0fVxuXG5cdFx0XHRzZWxlY3RvciA9IHNlbGVjdG9yLnNsaWNlKCB0b2tlbnMuc2hpZnQoKS52YWx1ZS5sZW5ndGggKTtcblx0XHR9XG5cblx0XHQvLyBGZXRjaCBhIHNlZWQgc2V0IGZvciByaWdodC10by1sZWZ0IG1hdGNoaW5nXG5cdFx0aSA9IG1hdGNoRXhwcltcIm5lZWRzQ29udGV4dFwiXS50ZXN0KCBzZWxlY3RvciApID8gMCA6IHRva2Vucy5sZW5ndGg7XG5cdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHR0b2tlbiA9IHRva2Vuc1tpXTtcblxuXHRcdFx0Ly8gQWJvcnQgaWYgd2UgaGl0IGEgY29tYmluYXRvclxuXHRcdFx0aWYgKCBFeHByLnJlbGF0aXZlWyAodHlwZSA9IHRva2VuLnR5cGUpIF0gKSB7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCAoZmluZCA9IEV4cHIuZmluZFsgdHlwZSBdKSApIHtcblx0XHRcdFx0Ly8gU2VhcmNoLCBleHBhbmRpbmcgY29udGV4dCBmb3IgbGVhZGluZyBzaWJsaW5nIGNvbWJpbmF0b3JzXG5cdFx0XHRcdGlmICggKHNlZWQgPSBmaW5kKFxuXHRcdFx0XHRcdHRva2VuLm1hdGNoZXNbMF0ucmVwbGFjZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKSxcblx0XHRcdFx0XHRyc2libGluZy50ZXN0KCB0b2tlbnNbMF0udHlwZSApICYmIHRlc3RDb250ZXh0KCBjb250ZXh0LnBhcmVudE5vZGUgKSB8fCBjb250ZXh0XG5cdFx0XHRcdCkpICkge1xuXG5cdFx0XHRcdFx0Ly8gSWYgc2VlZCBpcyBlbXB0eSBvciBubyB0b2tlbnMgcmVtYWluLCB3ZSBjYW4gcmV0dXJuIGVhcmx5XG5cdFx0XHRcdFx0dG9rZW5zLnNwbGljZSggaSwgMSApO1xuXHRcdFx0XHRcdHNlbGVjdG9yID0gc2VlZC5sZW5ndGggJiYgdG9TZWxlY3RvciggdG9rZW5zICk7XG5cdFx0XHRcdFx0aWYgKCAhc2VsZWN0b3IgKSB7XG5cdFx0XHRcdFx0XHRwdXNoLmFwcGx5KCByZXN1bHRzLCBzZWVkICk7XG5cdFx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0cztcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIENvbXBpbGUgYW5kIGV4ZWN1dGUgYSBmaWx0ZXJpbmcgZnVuY3Rpb24gaWYgb25lIGlzIG5vdCBwcm92aWRlZFxuXHQvLyBQcm92aWRlIGBtYXRjaGAgdG8gYXZvaWQgcmV0b2tlbml6YXRpb24gaWYgd2UgbW9kaWZpZWQgdGhlIHNlbGVjdG9yIGFib3ZlXG5cdCggY29tcGlsZWQgfHwgY29tcGlsZSggc2VsZWN0b3IsIG1hdGNoICkgKShcblx0XHRzZWVkLFxuXHRcdGNvbnRleHQsXG5cdFx0IWRvY3VtZW50SXNIVE1MLFxuXHRcdHJlc3VsdHMsXG5cdFx0IWNvbnRleHQgfHwgcnNpYmxpbmcudGVzdCggc2VsZWN0b3IgKSAmJiB0ZXN0Q29udGV4dCggY29udGV4dC5wYXJlbnROb2RlICkgfHwgY29udGV4dFxuXHQpO1xuXHRyZXR1cm4gcmVzdWx0cztcbn07XG5cbi8vIE9uZS10aW1lIGFzc2lnbm1lbnRzXG5cbi8vIFNvcnQgc3RhYmlsaXR5XG5zdXBwb3J0LnNvcnRTdGFibGUgPSBleHBhbmRvLnNwbGl0KFwiXCIpLnNvcnQoIHNvcnRPcmRlciApLmpvaW4oXCJcIikgPT09IGV4cGFuZG87XG5cbi8vIFN1cHBvcnQ6IENocm9tZSAxNC0zNStcbi8vIEFsd2F5cyBhc3N1bWUgZHVwbGljYXRlcyBpZiB0aGV5IGFyZW4ndCBwYXNzZWQgdG8gdGhlIGNvbXBhcmlzb24gZnVuY3Rpb25cbnN1cHBvcnQuZGV0ZWN0RHVwbGljYXRlcyA9ICEhaGFzRHVwbGljYXRlO1xuXG4vLyBJbml0aWFsaXplIGFnYWluc3QgdGhlIGRlZmF1bHQgZG9jdW1lbnRcbnNldERvY3VtZW50KCk7XG5cbi8vIFN1cHBvcnQ6IFdlYmtpdDw1MzcuMzIgLSBTYWZhcmkgNi4wLjMvQ2hyb21lIDI1IChmaXhlZCBpbiBDaHJvbWUgMjcpXG4vLyBEZXRhY2hlZCBub2RlcyBjb25mb3VuZGluZ2x5IGZvbGxvdyAqZWFjaCBvdGhlcipcbnN1cHBvcnQuc29ydERldGFjaGVkID0gYXNzZXJ0KGZ1bmN0aW9uKCBlbCApIHtcblx0Ly8gU2hvdWxkIHJldHVybiAxLCBidXQgcmV0dXJucyA0IChmb2xsb3dpbmcpXG5cdHJldHVybiBlbC5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiggZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImZpZWxkc2V0XCIpICkgJiAxO1xufSk7XG5cbi8vIFN1cHBvcnQ6IElFPDhcbi8vIFByZXZlbnQgYXR0cmlidXRlL3Byb3BlcnR5IFwiaW50ZXJwb2xhdGlvblwiXG4vLyBodHRwczovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L21zNTM2NDI5JTI4VlMuODUlMjkuYXNweFxuaWYgKCAhYXNzZXJ0KGZ1bmN0aW9uKCBlbCApIHtcblx0ZWwuaW5uZXJIVE1MID0gXCI8YSBocmVmPScjJz48L2E+XCI7XG5cdHJldHVybiBlbC5maXJzdENoaWxkLmdldEF0dHJpYnV0ZShcImhyZWZcIikgPT09IFwiI1wiIDtcbn0pICkge1xuXHRhZGRIYW5kbGUoIFwidHlwZXxocmVmfGhlaWdodHx3aWR0aFwiLCBmdW5jdGlvbiggZWxlbSwgbmFtZSwgaXNYTUwgKSB7XG5cdFx0aWYgKCAhaXNYTUwgKSB7XG5cdFx0XHRyZXR1cm4gZWxlbS5nZXRBdHRyaWJ1dGUoIG5hbWUsIG5hbWUudG9Mb3dlckNhc2UoKSA9PT0gXCJ0eXBlXCIgPyAxIDogMiApO1xuXHRcdH1cblx0fSk7XG59XG5cbi8vIFN1cHBvcnQ6IElFPDlcbi8vIFVzZSBkZWZhdWx0VmFsdWUgaW4gcGxhY2Ugb2YgZ2V0QXR0cmlidXRlKFwidmFsdWVcIilcbmlmICggIXN1cHBvcnQuYXR0cmlidXRlcyB8fCAhYXNzZXJ0KGZ1bmN0aW9uKCBlbCApIHtcblx0ZWwuaW5uZXJIVE1MID0gXCI8aW5wdXQvPlwiO1xuXHRlbC5maXJzdENoaWxkLnNldEF0dHJpYnV0ZSggXCJ2YWx1ZVwiLCBcIlwiICk7XG5cdHJldHVybiBlbC5maXJzdENoaWxkLmdldEF0dHJpYnV0ZSggXCJ2YWx1ZVwiICkgPT09IFwiXCI7XG59KSApIHtcblx0YWRkSGFuZGxlKCBcInZhbHVlXCIsIGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCBpc1hNTCApIHtcblx0XHRpZiAoICFpc1hNTCAmJiBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09IFwiaW5wdXRcIiApIHtcblx0XHRcdHJldHVybiBlbGVtLmRlZmF1bHRWYWx1ZTtcblx0XHR9XG5cdH0pO1xufVxuXG4vLyBTdXBwb3J0OiBJRTw5XG4vLyBVc2UgZ2V0QXR0cmlidXRlTm9kZSB0byBmZXRjaCBib29sZWFucyB3aGVuIGdldEF0dHJpYnV0ZSBsaWVzXG5pZiAoICFhc3NlcnQoZnVuY3Rpb24oIGVsICkge1xuXHRyZXR1cm4gZWwuZ2V0QXR0cmlidXRlKFwiZGlzYWJsZWRcIikgPT0gbnVsbDtcbn0pICkge1xuXHRhZGRIYW5kbGUoIGJvb2xlYW5zLCBmdW5jdGlvbiggZWxlbSwgbmFtZSwgaXNYTUwgKSB7XG5cdFx0dmFyIHZhbDtcblx0XHRpZiAoICFpc1hNTCApIHtcblx0XHRcdHJldHVybiBlbGVtWyBuYW1lIF0gPT09IHRydWUgPyBuYW1lLnRvTG93ZXJDYXNlKCkgOlxuXHRcdFx0XHRcdCh2YWwgPSBlbGVtLmdldEF0dHJpYnV0ZU5vZGUoIG5hbWUgKSkgJiYgdmFsLnNwZWNpZmllZCA/XG5cdFx0XHRcdFx0dmFsLnZhbHVlIDpcblx0XHRcdFx0bnVsbDtcblx0XHR9XG5cdH0pO1xufVxuXG5yZXR1cm4gU2l6emxlO1xuXG59KSggd2luZG93ICk7XG5cblxuXG5qUXVlcnkuZmluZCA9IFNpenpsZTtcbmpRdWVyeS5leHByID0gU2l6emxlLnNlbGVjdG9ycztcblxuLy8gRGVwcmVjYXRlZFxualF1ZXJ5LmV4cHJbIFwiOlwiIF0gPSBqUXVlcnkuZXhwci5wc2V1ZG9zO1xualF1ZXJ5LnVuaXF1ZVNvcnQgPSBqUXVlcnkudW5pcXVlID0gU2l6emxlLnVuaXF1ZVNvcnQ7XG5qUXVlcnkudGV4dCA9IFNpenpsZS5nZXRUZXh0O1xualF1ZXJ5LmlzWE1MRG9jID0gU2l6emxlLmlzWE1MO1xualF1ZXJ5LmNvbnRhaW5zID0gU2l6emxlLmNvbnRhaW5zO1xualF1ZXJ5LmVzY2FwZVNlbGVjdG9yID0gU2l6emxlLmVzY2FwZTtcblxuXG5cblxudmFyIGRpciA9IGZ1bmN0aW9uKCBlbGVtLCBkaXIsIHVudGlsICkge1xuXHR2YXIgbWF0Y2hlZCA9IFtdLFxuXHRcdHRydW5jYXRlID0gdW50aWwgIT09IHVuZGVmaW5lZDtcblxuXHR3aGlsZSAoICggZWxlbSA9IGVsZW1bIGRpciBdICkgJiYgZWxlbS5ub2RlVHlwZSAhPT0gOSApIHtcblx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7XG5cdFx0XHRpZiAoIHRydW5jYXRlICYmIGpRdWVyeSggZWxlbSApLmlzKCB1bnRpbCApICkge1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHRcdG1hdGNoZWQucHVzaCggZWxlbSApO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gbWF0Y2hlZDtcbn07XG5cblxudmFyIHNpYmxpbmdzID0gZnVuY3Rpb24oIG4sIGVsZW0gKSB7XG5cdHZhciBtYXRjaGVkID0gW107XG5cblx0Zm9yICggOyBuOyBuID0gbi5uZXh0U2libGluZyApIHtcblx0XHRpZiAoIG4ubm9kZVR5cGUgPT09IDEgJiYgbiAhPT0gZWxlbSApIHtcblx0XHRcdG1hdGNoZWQucHVzaCggbiApO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBtYXRjaGVkO1xufTtcblxuXG52YXIgcm5lZWRzQ29udGV4dCA9IGpRdWVyeS5leHByLm1hdGNoLm5lZWRzQ29udGV4dDtcblxuXG5cbmZ1bmN0aW9uIG5vZGVOYW1lKCBlbGVtLCBuYW1lICkge1xuXG4gIHJldHVybiBlbGVtLm5vZGVOYW1lICYmIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gbmFtZS50b0xvd2VyQ2FzZSgpO1xuXG59O1xudmFyIHJzaW5nbGVUYWcgPSAoIC9ePChbYS16XVteXFwvXFwwPjpcXHgyMFxcdFxcclxcblxcZl0qKVtcXHgyMFxcdFxcclxcblxcZl0qXFwvPz4oPzo8XFwvXFwxPnwpJC9pICk7XG5cblxuXG4vLyBJbXBsZW1lbnQgdGhlIGlkZW50aWNhbCBmdW5jdGlvbmFsaXR5IGZvciBmaWx0ZXIgYW5kIG5vdFxuZnVuY3Rpb24gd2lubm93KCBlbGVtZW50cywgcXVhbGlmaWVyLCBub3QgKSB7XG5cdGlmICggaXNGdW5jdGlvbiggcXVhbGlmaWVyICkgKSB7XG5cdFx0cmV0dXJuIGpRdWVyeS5ncmVwKCBlbGVtZW50cywgZnVuY3Rpb24oIGVsZW0sIGkgKSB7XG5cdFx0XHRyZXR1cm4gISFxdWFsaWZpZXIuY2FsbCggZWxlbSwgaSwgZWxlbSApICE9PSBub3Q7XG5cdFx0fSApO1xuXHR9XG5cblx0Ly8gU2luZ2xlIGVsZW1lbnRcblx0aWYgKCBxdWFsaWZpZXIubm9kZVR5cGUgKSB7XG5cdFx0cmV0dXJuIGpRdWVyeS5ncmVwKCBlbGVtZW50cywgZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gKCBlbGVtID09PSBxdWFsaWZpZXIgKSAhPT0gbm90O1xuXHRcdH0gKTtcblx0fVxuXG5cdC8vIEFycmF5bGlrZSBvZiBlbGVtZW50cyAoalF1ZXJ5LCBhcmd1bWVudHMsIEFycmF5KVxuXHRpZiAoIHR5cGVvZiBxdWFsaWZpZXIgIT09IFwic3RyaW5nXCIgKSB7XG5cdFx0cmV0dXJuIGpRdWVyeS5ncmVwKCBlbGVtZW50cywgZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gKCBpbmRleE9mLmNhbGwoIHF1YWxpZmllciwgZWxlbSApID4gLTEgKSAhPT0gbm90O1xuXHRcdH0gKTtcblx0fVxuXG5cdC8vIEZpbHRlcmVkIGRpcmVjdGx5IGZvciBib3RoIHNpbXBsZSBhbmQgY29tcGxleCBzZWxlY3RvcnNcblx0cmV0dXJuIGpRdWVyeS5maWx0ZXIoIHF1YWxpZmllciwgZWxlbWVudHMsIG5vdCApO1xufVxuXG5qUXVlcnkuZmlsdGVyID0gZnVuY3Rpb24oIGV4cHIsIGVsZW1zLCBub3QgKSB7XG5cdHZhciBlbGVtID0gZWxlbXNbIDAgXTtcblxuXHRpZiAoIG5vdCApIHtcblx0XHRleHByID0gXCI6bm90KFwiICsgZXhwciArIFwiKVwiO1xuXHR9XG5cblx0aWYgKCBlbGVtcy5sZW5ndGggPT09IDEgJiYgZWxlbS5ub2RlVHlwZSA9PT0gMSApIHtcblx0XHRyZXR1cm4galF1ZXJ5LmZpbmQubWF0Y2hlc1NlbGVjdG9yKCBlbGVtLCBleHByICkgPyBbIGVsZW0gXSA6IFtdO1xuXHR9XG5cblx0cmV0dXJuIGpRdWVyeS5maW5kLm1hdGNoZXMoIGV4cHIsIGpRdWVyeS5ncmVwKCBlbGVtcywgZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0cmV0dXJuIGVsZW0ubm9kZVR5cGUgPT09IDE7XG5cdH0gKSApO1xufTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRmaW5kOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cdFx0dmFyIGksIHJldCxcblx0XHRcdGxlbiA9IHRoaXMubGVuZ3RoLFxuXHRcdFx0c2VsZiA9IHRoaXM7XG5cblx0XHRpZiAoIHR5cGVvZiBzZWxlY3RvciAhPT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggalF1ZXJ5KCBzZWxlY3RvciApLmZpbHRlciggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGZvciAoIGkgPSAwOyBpIDwgbGVuOyBpKysgKSB7XG5cdFx0XHRcdFx0aWYgKCBqUXVlcnkuY29udGFpbnMoIHNlbGZbIGkgXSwgdGhpcyApICkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9ICkgKTtcblx0XHR9XG5cblx0XHRyZXQgPSB0aGlzLnB1c2hTdGFjayggW10gKTtcblxuXHRcdGZvciAoIGkgPSAwOyBpIDwgbGVuOyBpKysgKSB7XG5cdFx0XHRqUXVlcnkuZmluZCggc2VsZWN0b3IsIHNlbGZbIGkgXSwgcmV0ICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGxlbiA+IDEgPyBqUXVlcnkudW5pcXVlU29ydCggcmV0ICkgOiByZXQ7XG5cdH0sXG5cdGZpbHRlcjogZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggd2lubm93KCB0aGlzLCBzZWxlY3RvciB8fCBbXSwgZmFsc2UgKSApO1xuXHR9LFxuXHRub3Q6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soIHdpbm5vdyggdGhpcywgc2VsZWN0b3IgfHwgW10sIHRydWUgKSApO1xuXHR9LFxuXHRpczogZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdHJldHVybiAhIXdpbm5vdyhcblx0XHRcdHRoaXMsXG5cblx0XHRcdC8vIElmIHRoaXMgaXMgYSBwb3NpdGlvbmFsL3JlbGF0aXZlIHNlbGVjdG9yLCBjaGVjayBtZW1iZXJzaGlwIGluIHRoZSByZXR1cm5lZCBzZXRcblx0XHRcdC8vIHNvICQoXCJwOmZpcnN0XCIpLmlzKFwicDpsYXN0XCIpIHdvbid0IHJldHVybiB0cnVlIGZvciBhIGRvYyB3aXRoIHR3byBcInBcIi5cblx0XHRcdHR5cGVvZiBzZWxlY3RvciA9PT0gXCJzdHJpbmdcIiAmJiBybmVlZHNDb250ZXh0LnRlc3QoIHNlbGVjdG9yICkgP1xuXHRcdFx0XHRqUXVlcnkoIHNlbGVjdG9yICkgOlxuXHRcdFx0XHRzZWxlY3RvciB8fCBbXSxcblx0XHRcdGZhbHNlXG5cdFx0KS5sZW5ndGg7XG5cdH1cbn0gKTtcblxuXG4vLyBJbml0aWFsaXplIGEgalF1ZXJ5IG9iamVjdFxuXG5cbi8vIEEgY2VudHJhbCByZWZlcmVuY2UgdG8gdGhlIHJvb3QgalF1ZXJ5KGRvY3VtZW50KVxudmFyIHJvb3RqUXVlcnksXG5cblx0Ly8gQSBzaW1wbGUgd2F5IHRvIGNoZWNrIGZvciBIVE1MIHN0cmluZ3Ncblx0Ly8gUHJpb3JpdGl6ZSAjaWQgb3ZlciA8dGFnPiB0byBhdm9pZCBYU1MgdmlhIGxvY2F0aW9uLmhhc2ggKCM5NTIxKVxuXHQvLyBTdHJpY3QgSFRNTCByZWNvZ25pdGlvbiAoIzExMjkwOiBtdXN0IHN0YXJ0IHdpdGggPClcblx0Ly8gU2hvcnRjdXQgc2ltcGxlICNpZCBjYXNlIGZvciBzcGVlZFxuXHRycXVpY2tFeHByID0gL14oPzpcXHMqKDxbXFx3XFxXXSs+KVtePl0qfCMoW1xcdy1dKykpJC8sXG5cblx0aW5pdCA9IGpRdWVyeS5mbi5pbml0ID0gZnVuY3Rpb24oIHNlbGVjdG9yLCBjb250ZXh0LCByb290ICkge1xuXHRcdHZhciBtYXRjaCwgZWxlbTtcblxuXHRcdC8vIEhBTkRMRTogJChcIlwiKSwgJChudWxsKSwgJCh1bmRlZmluZWQpLCAkKGZhbHNlKVxuXHRcdGlmICggIXNlbGVjdG9yICkge1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXG5cdFx0Ly8gTWV0aG9kIGluaXQoKSBhY2NlcHRzIGFuIGFsdGVybmF0ZSByb290alF1ZXJ5XG5cdFx0Ly8gc28gbWlncmF0ZSBjYW4gc3VwcG9ydCBqUXVlcnkuc3ViIChnaC0yMTAxKVxuXHRcdHJvb3QgPSByb290IHx8IHJvb3RqUXVlcnk7XG5cblx0XHQvLyBIYW5kbGUgSFRNTCBzdHJpbmdzXG5cdFx0aWYgKCB0eXBlb2Ygc2VsZWN0b3IgPT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRpZiAoIHNlbGVjdG9yWyAwIF0gPT09IFwiPFwiICYmXG5cdFx0XHRcdHNlbGVjdG9yWyBzZWxlY3Rvci5sZW5ndGggLSAxIF0gPT09IFwiPlwiICYmXG5cdFx0XHRcdHNlbGVjdG9yLmxlbmd0aCA+PSAzICkge1xuXG5cdFx0XHRcdC8vIEFzc3VtZSB0aGF0IHN0cmluZ3MgdGhhdCBzdGFydCBhbmQgZW5kIHdpdGggPD4gYXJlIEhUTUwgYW5kIHNraXAgdGhlIHJlZ2V4IGNoZWNrXG5cdFx0XHRcdG1hdGNoID0gWyBudWxsLCBzZWxlY3RvciwgbnVsbCBdO1xuXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRtYXRjaCA9IHJxdWlja0V4cHIuZXhlYyggc2VsZWN0b3IgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gTWF0Y2ggaHRtbCBvciBtYWtlIHN1cmUgbm8gY29udGV4dCBpcyBzcGVjaWZpZWQgZm9yICNpZFxuXHRcdFx0aWYgKCBtYXRjaCAmJiAoIG1hdGNoWyAxIF0gfHwgIWNvbnRleHQgKSApIHtcblxuXHRcdFx0XHQvLyBIQU5ETEU6ICQoaHRtbCkgLT4gJChhcnJheSlcblx0XHRcdFx0aWYgKCBtYXRjaFsgMSBdICkge1xuXHRcdFx0XHRcdGNvbnRleHQgPSBjb250ZXh0IGluc3RhbmNlb2YgalF1ZXJ5ID8gY29udGV4dFsgMCBdIDogY29udGV4dDtcblxuXHRcdFx0XHRcdC8vIE9wdGlvbiB0byBydW4gc2NyaXB0cyBpcyB0cnVlIGZvciBiYWNrLWNvbXBhdFxuXHRcdFx0XHRcdC8vIEludGVudGlvbmFsbHkgbGV0IHRoZSBlcnJvciBiZSB0aHJvd24gaWYgcGFyc2VIVE1MIGlzIG5vdCBwcmVzZW50XG5cdFx0XHRcdFx0alF1ZXJ5Lm1lcmdlKCB0aGlzLCBqUXVlcnkucGFyc2VIVE1MKFxuXHRcdFx0XHRcdFx0bWF0Y2hbIDEgXSxcblx0XHRcdFx0XHRcdGNvbnRleHQgJiYgY29udGV4dC5ub2RlVHlwZSA/IGNvbnRleHQub3duZXJEb2N1bWVudCB8fCBjb250ZXh0IDogZG9jdW1lbnQsXG5cdFx0XHRcdFx0XHR0cnVlXG5cdFx0XHRcdFx0KSApO1xuXG5cdFx0XHRcdFx0Ly8gSEFORExFOiAkKGh0bWwsIHByb3BzKVxuXHRcdFx0XHRcdGlmICggcnNpbmdsZVRhZy50ZXN0KCBtYXRjaFsgMSBdICkgJiYgalF1ZXJ5LmlzUGxhaW5PYmplY3QoIGNvbnRleHQgKSApIHtcblx0XHRcdFx0XHRcdGZvciAoIG1hdGNoIGluIGNvbnRleHQgKSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gUHJvcGVydGllcyBvZiBjb250ZXh0IGFyZSBjYWxsZWQgYXMgbWV0aG9kcyBpZiBwb3NzaWJsZVxuXHRcdFx0XHRcdFx0XHRpZiAoIGlzRnVuY3Rpb24oIHRoaXNbIG1hdGNoIF0gKSApIHtcblx0XHRcdFx0XHRcdFx0XHR0aGlzWyBtYXRjaCBdKCBjb250ZXh0WyBtYXRjaCBdICk7XG5cblx0XHRcdFx0XHRcdFx0Ly8gLi4uYW5kIG90aGVyd2lzZSBzZXQgYXMgYXR0cmlidXRlc1xuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdHRoaXMuYXR0ciggbWF0Y2gsIGNvbnRleHRbIG1hdGNoIF0gKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHJldHVybiB0aGlzO1xuXG5cdFx0XHRcdC8vIEhBTkRMRTogJCgjaWQpXG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0ZWxlbSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCBtYXRjaFsgMiBdICk7XG5cblx0XHRcdFx0XHRpZiAoIGVsZW0gKSB7XG5cblx0XHRcdFx0XHRcdC8vIEluamVjdCB0aGUgZWxlbWVudCBkaXJlY3RseSBpbnRvIHRoZSBqUXVlcnkgb2JqZWN0XG5cdFx0XHRcdFx0XHR0aGlzWyAwIF0gPSBlbGVtO1xuXHRcdFx0XHRcdFx0dGhpcy5sZW5ndGggPSAxO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdFx0fVxuXG5cdFx0XHQvLyBIQU5ETEU6ICQoZXhwciwgJCguLi4pKVxuXHRcdFx0fSBlbHNlIGlmICggIWNvbnRleHQgfHwgY29udGV4dC5qcXVlcnkgKSB7XG5cdFx0XHRcdHJldHVybiAoIGNvbnRleHQgfHwgcm9vdCApLmZpbmQoIHNlbGVjdG9yICk7XG5cblx0XHRcdC8vIEhBTkRMRTogJChleHByLCBjb250ZXh0KVxuXHRcdFx0Ly8gKHdoaWNoIGlzIGp1c3QgZXF1aXZhbGVudCB0bzogJChjb250ZXh0KS5maW5kKGV4cHIpXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5jb25zdHJ1Y3RvciggY29udGV4dCApLmZpbmQoIHNlbGVjdG9yICk7XG5cdFx0XHR9XG5cblx0XHQvLyBIQU5ETEU6ICQoRE9NRWxlbWVudClcblx0XHR9IGVsc2UgaWYgKCBzZWxlY3Rvci5ub2RlVHlwZSApIHtcblx0XHRcdHRoaXNbIDAgXSA9IHNlbGVjdG9yO1xuXHRcdFx0dGhpcy5sZW5ndGggPSAxO1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cblx0XHQvLyBIQU5ETEU6ICQoZnVuY3Rpb24pXG5cdFx0Ly8gU2hvcnRjdXQgZm9yIGRvY3VtZW50IHJlYWR5XG5cdFx0fSBlbHNlIGlmICggaXNGdW5jdGlvbiggc2VsZWN0b3IgKSApIHtcblx0XHRcdHJldHVybiByb290LnJlYWR5ICE9PSB1bmRlZmluZWQgP1xuXHRcdFx0XHRyb290LnJlYWR5KCBzZWxlY3RvciApIDpcblxuXHRcdFx0XHQvLyBFeGVjdXRlIGltbWVkaWF0ZWx5IGlmIHJlYWR5IGlzIG5vdCBwcmVzZW50XG5cdFx0XHRcdHNlbGVjdG9yKCBqUXVlcnkgKTtcblx0XHR9XG5cblx0XHRyZXR1cm4galF1ZXJ5Lm1ha2VBcnJheSggc2VsZWN0b3IsIHRoaXMgKTtcblx0fTtcblxuLy8gR2l2ZSB0aGUgaW5pdCBmdW5jdGlvbiB0aGUgalF1ZXJ5IHByb3RvdHlwZSBmb3IgbGF0ZXIgaW5zdGFudGlhdGlvblxuaW5pdC5wcm90b3R5cGUgPSBqUXVlcnkuZm47XG5cbi8vIEluaXRpYWxpemUgY2VudHJhbCByZWZlcmVuY2VcbnJvb3RqUXVlcnkgPSBqUXVlcnkoIGRvY3VtZW50ICk7XG5cblxudmFyIHJwYXJlbnRzcHJldiA9IC9eKD86cGFyZW50c3xwcmV2KD86VW50aWx8QWxsKSkvLFxuXG5cdC8vIE1ldGhvZHMgZ3VhcmFudGVlZCB0byBwcm9kdWNlIGEgdW5pcXVlIHNldCB3aGVuIHN0YXJ0aW5nIGZyb20gYSB1bmlxdWUgc2V0XG5cdGd1YXJhbnRlZWRVbmlxdWUgPSB7XG5cdFx0Y2hpbGRyZW46IHRydWUsXG5cdFx0Y29udGVudHM6IHRydWUsXG5cdFx0bmV4dDogdHJ1ZSxcblx0XHRwcmV2OiB0cnVlXG5cdH07XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0aGFzOiBmdW5jdGlvbiggdGFyZ2V0ICkge1xuXHRcdHZhciB0YXJnZXRzID0galF1ZXJ5KCB0YXJnZXQsIHRoaXMgKSxcblx0XHRcdGwgPSB0YXJnZXRzLmxlbmd0aDtcblxuXHRcdHJldHVybiB0aGlzLmZpbHRlciggZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgaSA9IDA7XG5cdFx0XHRmb3IgKCA7IGkgPCBsOyBpKysgKSB7XG5cdFx0XHRcdGlmICggalF1ZXJ5LmNvbnRhaW5zKCB0aGlzLCB0YXJnZXRzWyBpIF0gKSApIHtcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gKTtcblx0fSxcblxuXHRjbG9zZXN0OiBmdW5jdGlvbiggc2VsZWN0b3JzLCBjb250ZXh0ICkge1xuXHRcdHZhciBjdXIsXG5cdFx0XHRpID0gMCxcblx0XHRcdGwgPSB0aGlzLmxlbmd0aCxcblx0XHRcdG1hdGNoZWQgPSBbXSxcblx0XHRcdHRhcmdldHMgPSB0eXBlb2Ygc2VsZWN0b3JzICE9PSBcInN0cmluZ1wiICYmIGpRdWVyeSggc2VsZWN0b3JzICk7XG5cblx0XHQvLyBQb3NpdGlvbmFsIHNlbGVjdG9ycyBuZXZlciBtYXRjaCwgc2luY2UgdGhlcmUncyBubyBfc2VsZWN0aW9uXyBjb250ZXh0XG5cdFx0aWYgKCAhcm5lZWRzQ29udGV4dC50ZXN0KCBzZWxlY3RvcnMgKSApIHtcblx0XHRcdGZvciAoIDsgaSA8IGw7IGkrKyApIHtcblx0XHRcdFx0Zm9yICggY3VyID0gdGhpc1sgaSBdOyBjdXIgJiYgY3VyICE9PSBjb250ZXh0OyBjdXIgPSBjdXIucGFyZW50Tm9kZSApIHtcblxuXHRcdFx0XHRcdC8vIEFsd2F5cyBza2lwIGRvY3VtZW50IGZyYWdtZW50c1xuXHRcdFx0XHRcdGlmICggY3VyLm5vZGVUeXBlIDwgMTEgJiYgKCB0YXJnZXRzID9cblx0XHRcdFx0XHRcdHRhcmdldHMuaW5kZXgoIGN1ciApID4gLTEgOlxuXG5cdFx0XHRcdFx0XHQvLyBEb24ndCBwYXNzIG5vbi1lbGVtZW50cyB0byBTaXp6bGVcblx0XHRcdFx0XHRcdGN1ci5ub2RlVHlwZSA9PT0gMSAmJlxuXHRcdFx0XHRcdFx0XHRqUXVlcnkuZmluZC5tYXRjaGVzU2VsZWN0b3IoIGN1ciwgc2VsZWN0b3JzICkgKSApIHtcblxuXHRcdFx0XHRcdFx0bWF0Y2hlZC5wdXNoKCBjdXIgKTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggbWF0Y2hlZC5sZW5ndGggPiAxID8galF1ZXJ5LnVuaXF1ZVNvcnQoIG1hdGNoZWQgKSA6IG1hdGNoZWQgKTtcblx0fSxcblxuXHQvLyBEZXRlcm1pbmUgdGhlIHBvc2l0aW9uIG9mIGFuIGVsZW1lbnQgd2l0aGluIHRoZSBzZXRcblx0aW5kZXg6IGZ1bmN0aW9uKCBlbGVtICkge1xuXG5cdFx0Ly8gTm8gYXJndW1lbnQsIHJldHVybiBpbmRleCBpbiBwYXJlbnRcblx0XHRpZiAoICFlbGVtICkge1xuXHRcdFx0cmV0dXJuICggdGhpc1sgMCBdICYmIHRoaXNbIDAgXS5wYXJlbnROb2RlICkgPyB0aGlzLmZpcnN0KCkucHJldkFsbCgpLmxlbmd0aCA6IC0xO1xuXHRcdH1cblxuXHRcdC8vIEluZGV4IGluIHNlbGVjdG9yXG5cdFx0aWYgKCB0eXBlb2YgZWxlbSA9PT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdHJldHVybiBpbmRleE9mLmNhbGwoIGpRdWVyeSggZWxlbSApLCB0aGlzWyAwIF0gKTtcblx0XHR9XG5cblx0XHQvLyBMb2NhdGUgdGhlIHBvc2l0aW9uIG9mIHRoZSBkZXNpcmVkIGVsZW1lbnRcblx0XHRyZXR1cm4gaW5kZXhPZi5jYWxsKCB0aGlzLFxuXG5cdFx0XHQvLyBJZiBpdCByZWNlaXZlcyBhIGpRdWVyeSBvYmplY3QsIHRoZSBmaXJzdCBlbGVtZW50IGlzIHVzZWRcblx0XHRcdGVsZW0uanF1ZXJ5ID8gZWxlbVsgMCBdIDogZWxlbVxuXHRcdCk7XG5cdH0sXG5cblx0YWRkOiBmdW5jdGlvbiggc2VsZWN0b3IsIGNvbnRleHQgKSB7XG5cdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKFxuXHRcdFx0alF1ZXJ5LnVuaXF1ZVNvcnQoXG5cdFx0XHRcdGpRdWVyeS5tZXJnZSggdGhpcy5nZXQoKSwgalF1ZXJ5KCBzZWxlY3RvciwgY29udGV4dCApIClcblx0XHRcdClcblx0XHQpO1xuXHR9LFxuXG5cdGFkZEJhY2s6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHRyZXR1cm4gdGhpcy5hZGQoIHNlbGVjdG9yID09IG51bGwgP1xuXHRcdFx0dGhpcy5wcmV2T2JqZWN0IDogdGhpcy5wcmV2T2JqZWN0LmZpbHRlciggc2VsZWN0b3IgKVxuXHRcdCk7XG5cdH1cbn0gKTtcblxuZnVuY3Rpb24gc2libGluZyggY3VyLCBkaXIgKSB7XG5cdHdoaWxlICggKCBjdXIgPSBjdXJbIGRpciBdICkgJiYgY3VyLm5vZGVUeXBlICE9PSAxICkge31cblx0cmV0dXJuIGN1cjtcbn1cblxualF1ZXJ5LmVhY2goIHtcblx0cGFyZW50OiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHR2YXIgcGFyZW50ID0gZWxlbS5wYXJlbnROb2RlO1xuXHRcdHJldHVybiBwYXJlbnQgJiYgcGFyZW50Lm5vZGVUeXBlICE9PSAxMSA/IHBhcmVudCA6IG51bGw7XG5cdH0sXG5cdHBhcmVudHM6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHJldHVybiBkaXIoIGVsZW0sIFwicGFyZW50Tm9kZVwiICk7XG5cdH0sXG5cdHBhcmVudHNVbnRpbDogZnVuY3Rpb24oIGVsZW0sIGksIHVudGlsICkge1xuXHRcdHJldHVybiBkaXIoIGVsZW0sIFwicGFyZW50Tm9kZVwiLCB1bnRpbCApO1xuXHR9LFxuXHRuZXh0OiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRyZXR1cm4gc2libGluZyggZWxlbSwgXCJuZXh0U2libGluZ1wiICk7XG5cdH0sXG5cdHByZXY6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHJldHVybiBzaWJsaW5nKCBlbGVtLCBcInByZXZpb3VzU2libGluZ1wiICk7XG5cdH0sXG5cdG5leHRBbGw6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHJldHVybiBkaXIoIGVsZW0sIFwibmV4dFNpYmxpbmdcIiApO1xuXHR9LFxuXHRwcmV2QWxsOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRyZXR1cm4gZGlyKCBlbGVtLCBcInByZXZpb3VzU2libGluZ1wiICk7XG5cdH0sXG5cdG5leHRVbnRpbDogZnVuY3Rpb24oIGVsZW0sIGksIHVudGlsICkge1xuXHRcdHJldHVybiBkaXIoIGVsZW0sIFwibmV4dFNpYmxpbmdcIiwgdW50aWwgKTtcblx0fSxcblx0cHJldlVudGlsOiBmdW5jdGlvbiggZWxlbSwgaSwgdW50aWwgKSB7XG5cdFx0cmV0dXJuIGRpciggZWxlbSwgXCJwcmV2aW91c1NpYmxpbmdcIiwgdW50aWwgKTtcblx0fSxcblx0c2libGluZ3M6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHJldHVybiBzaWJsaW5ncyggKCBlbGVtLnBhcmVudE5vZGUgfHwge30gKS5maXJzdENoaWxkLCBlbGVtICk7XG5cdH0sXG5cdGNoaWxkcmVuOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRyZXR1cm4gc2libGluZ3MoIGVsZW0uZmlyc3RDaGlsZCApO1xuXHR9LFxuXHRjb250ZW50czogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0aWYgKCB0eXBlb2YgZWxlbS5jb250ZW50RG9jdW1lbnQgIT09IFwidW5kZWZpbmVkXCIgKSB7XG5cdFx0XHRyZXR1cm4gZWxlbS5jb250ZW50RG9jdW1lbnQ7XG5cdFx0fVxuXG5cdFx0Ly8gU3VwcG9ydDogSUUgOSAtIDExIG9ubHksIGlPUyA3IG9ubHksIEFuZHJvaWQgQnJvd3NlciA8PTQuMyBvbmx5XG5cdFx0Ly8gVHJlYXQgdGhlIHRlbXBsYXRlIGVsZW1lbnQgYXMgYSByZWd1bGFyIG9uZSBpbiBicm93c2VycyB0aGF0XG5cdFx0Ly8gZG9uJ3Qgc3VwcG9ydCBpdC5cblx0XHRpZiAoIG5vZGVOYW1lKCBlbGVtLCBcInRlbXBsYXRlXCIgKSApIHtcblx0XHRcdGVsZW0gPSBlbGVtLmNvbnRlbnQgfHwgZWxlbTtcblx0XHR9XG5cblx0XHRyZXR1cm4galF1ZXJ5Lm1lcmdlKCBbXSwgZWxlbS5jaGlsZE5vZGVzICk7XG5cdH1cbn0sIGZ1bmN0aW9uKCBuYW1lLCBmbiApIHtcblx0alF1ZXJ5LmZuWyBuYW1lIF0gPSBmdW5jdGlvbiggdW50aWwsIHNlbGVjdG9yICkge1xuXHRcdHZhciBtYXRjaGVkID0galF1ZXJ5Lm1hcCggdGhpcywgZm4sIHVudGlsICk7XG5cblx0XHRpZiAoIG5hbWUuc2xpY2UoIC01ICkgIT09IFwiVW50aWxcIiApIHtcblx0XHRcdHNlbGVjdG9yID0gdW50aWw7XG5cdFx0fVxuXG5cdFx0aWYgKCBzZWxlY3RvciAmJiB0eXBlb2Ygc2VsZWN0b3IgPT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRtYXRjaGVkID0galF1ZXJ5LmZpbHRlciggc2VsZWN0b3IsIG1hdGNoZWQgKTtcblx0XHR9XG5cblx0XHRpZiAoIHRoaXMubGVuZ3RoID4gMSApIHtcblxuXHRcdFx0Ly8gUmVtb3ZlIGR1cGxpY2F0ZXNcblx0XHRcdGlmICggIWd1YXJhbnRlZWRVbmlxdWVbIG5hbWUgXSApIHtcblx0XHRcdFx0alF1ZXJ5LnVuaXF1ZVNvcnQoIG1hdGNoZWQgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gUmV2ZXJzZSBvcmRlciBmb3IgcGFyZW50cyogYW5kIHByZXYtZGVyaXZhdGl2ZXNcblx0XHRcdGlmICggcnBhcmVudHNwcmV2LnRlc3QoIG5hbWUgKSApIHtcblx0XHRcdFx0bWF0Y2hlZC5yZXZlcnNlKCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKCBtYXRjaGVkICk7XG5cdH07XG59ICk7XG52YXIgcm5vdGh0bWx3aGl0ZSA9ICggL1teXFx4MjBcXHRcXHJcXG5cXGZdKy9nICk7XG5cblxuXG4vLyBDb252ZXJ0IFN0cmluZy1mb3JtYXR0ZWQgb3B0aW9ucyBpbnRvIE9iamVjdC1mb3JtYXR0ZWQgb25lc1xuZnVuY3Rpb24gY3JlYXRlT3B0aW9ucyggb3B0aW9ucyApIHtcblx0dmFyIG9iamVjdCA9IHt9O1xuXHRqUXVlcnkuZWFjaCggb3B0aW9ucy5tYXRjaCggcm5vdGh0bWx3aGl0ZSApIHx8IFtdLCBmdW5jdGlvbiggXywgZmxhZyApIHtcblx0XHRvYmplY3RbIGZsYWcgXSA9IHRydWU7XG5cdH0gKTtcblx0cmV0dXJuIG9iamVjdDtcbn1cblxuLypcbiAqIENyZWF0ZSBhIGNhbGxiYWNrIGxpc3QgdXNpbmcgdGhlIGZvbGxvd2luZyBwYXJhbWV0ZXJzOlxuICpcbiAqXHRvcHRpb25zOiBhbiBvcHRpb25hbCBsaXN0IG9mIHNwYWNlLXNlcGFyYXRlZCBvcHRpb25zIHRoYXQgd2lsbCBjaGFuZ2UgaG93XG4gKlx0XHRcdHRoZSBjYWxsYmFjayBsaXN0IGJlaGF2ZXMgb3IgYSBtb3JlIHRyYWRpdGlvbmFsIG9wdGlvbiBvYmplY3RcbiAqXG4gKiBCeSBkZWZhdWx0IGEgY2FsbGJhY2sgbGlzdCB3aWxsIGFjdCBsaWtlIGFuIGV2ZW50IGNhbGxiYWNrIGxpc3QgYW5kIGNhbiBiZVxuICogXCJmaXJlZFwiIG11bHRpcGxlIHRpbWVzLlxuICpcbiAqIFBvc3NpYmxlIG9wdGlvbnM6XG4gKlxuICpcdG9uY2U6XHRcdFx0d2lsbCBlbnN1cmUgdGhlIGNhbGxiYWNrIGxpc3QgY2FuIG9ubHkgYmUgZmlyZWQgb25jZSAobGlrZSBhIERlZmVycmVkKVxuICpcbiAqXHRtZW1vcnk6XHRcdFx0d2lsbCBrZWVwIHRyYWNrIG9mIHByZXZpb3VzIHZhbHVlcyBhbmQgd2lsbCBjYWxsIGFueSBjYWxsYmFjayBhZGRlZFxuICpcdFx0XHRcdFx0YWZ0ZXIgdGhlIGxpc3QgaGFzIGJlZW4gZmlyZWQgcmlnaHQgYXdheSB3aXRoIHRoZSBsYXRlc3QgXCJtZW1vcml6ZWRcIlxuICpcdFx0XHRcdFx0dmFsdWVzIChsaWtlIGEgRGVmZXJyZWQpXG4gKlxuICpcdHVuaXF1ZTpcdFx0XHR3aWxsIGVuc3VyZSBhIGNhbGxiYWNrIGNhbiBvbmx5IGJlIGFkZGVkIG9uY2UgKG5vIGR1cGxpY2F0ZSBpbiB0aGUgbGlzdClcbiAqXG4gKlx0c3RvcE9uRmFsc2U6XHRpbnRlcnJ1cHQgY2FsbGluZ3Mgd2hlbiBhIGNhbGxiYWNrIHJldHVybnMgZmFsc2VcbiAqXG4gKi9cbmpRdWVyeS5DYWxsYmFja3MgPSBmdW5jdGlvbiggb3B0aW9ucyApIHtcblxuXHQvLyBDb252ZXJ0IG9wdGlvbnMgZnJvbSBTdHJpbmctZm9ybWF0dGVkIHRvIE9iamVjdC1mb3JtYXR0ZWQgaWYgbmVlZGVkXG5cdC8vICh3ZSBjaGVjayBpbiBjYWNoZSBmaXJzdClcblx0b3B0aW9ucyA9IHR5cGVvZiBvcHRpb25zID09PSBcInN0cmluZ1wiID9cblx0XHRjcmVhdGVPcHRpb25zKCBvcHRpb25zICkgOlxuXHRcdGpRdWVyeS5leHRlbmQoIHt9LCBvcHRpb25zICk7XG5cblx0dmFyIC8vIEZsYWcgdG8ga25vdyBpZiBsaXN0IGlzIGN1cnJlbnRseSBmaXJpbmdcblx0XHRmaXJpbmcsXG5cblx0XHQvLyBMYXN0IGZpcmUgdmFsdWUgZm9yIG5vbi1mb3JnZXR0YWJsZSBsaXN0c1xuXHRcdG1lbW9yeSxcblxuXHRcdC8vIEZsYWcgdG8ga25vdyBpZiBsaXN0IHdhcyBhbHJlYWR5IGZpcmVkXG5cdFx0ZmlyZWQsXG5cblx0XHQvLyBGbGFnIHRvIHByZXZlbnQgZmlyaW5nXG5cdFx0bG9ja2VkLFxuXG5cdFx0Ly8gQWN0dWFsIGNhbGxiYWNrIGxpc3Rcblx0XHRsaXN0ID0gW10sXG5cblx0XHQvLyBRdWV1ZSBvZiBleGVjdXRpb24gZGF0YSBmb3IgcmVwZWF0YWJsZSBsaXN0c1xuXHRcdHF1ZXVlID0gW10sXG5cblx0XHQvLyBJbmRleCBvZiBjdXJyZW50bHkgZmlyaW5nIGNhbGxiYWNrIChtb2RpZmllZCBieSBhZGQvcmVtb3ZlIGFzIG5lZWRlZClcblx0XHRmaXJpbmdJbmRleCA9IC0xLFxuXG5cdFx0Ly8gRmlyZSBjYWxsYmFja3Ncblx0XHRmaXJlID0gZnVuY3Rpb24oKSB7XG5cblx0XHRcdC8vIEVuZm9yY2Ugc2luZ2xlLWZpcmluZ1xuXHRcdFx0bG9ja2VkID0gbG9ja2VkIHx8IG9wdGlvbnMub25jZTtcblxuXHRcdFx0Ly8gRXhlY3V0ZSBjYWxsYmFja3MgZm9yIGFsbCBwZW5kaW5nIGV4ZWN1dGlvbnMsXG5cdFx0XHQvLyByZXNwZWN0aW5nIGZpcmluZ0luZGV4IG92ZXJyaWRlcyBhbmQgcnVudGltZSBjaGFuZ2VzXG5cdFx0XHRmaXJlZCA9IGZpcmluZyA9IHRydWU7XG5cdFx0XHRmb3IgKCA7IHF1ZXVlLmxlbmd0aDsgZmlyaW5nSW5kZXggPSAtMSApIHtcblx0XHRcdFx0bWVtb3J5ID0gcXVldWUuc2hpZnQoKTtcblx0XHRcdFx0d2hpbGUgKCArK2ZpcmluZ0luZGV4IDwgbGlzdC5sZW5ndGggKSB7XG5cblx0XHRcdFx0XHQvLyBSdW4gY2FsbGJhY2sgYW5kIGNoZWNrIGZvciBlYXJseSB0ZXJtaW5hdGlvblxuXHRcdFx0XHRcdGlmICggbGlzdFsgZmlyaW5nSW5kZXggXS5hcHBseSggbWVtb3J5WyAwIF0sIG1lbW9yeVsgMSBdICkgPT09IGZhbHNlICYmXG5cdFx0XHRcdFx0XHRvcHRpb25zLnN0b3BPbkZhbHNlICkge1xuXG5cdFx0XHRcdFx0XHQvLyBKdW1wIHRvIGVuZCBhbmQgZm9yZ2V0IHRoZSBkYXRhIHNvIC5hZGQgZG9lc24ndCByZS1maXJlXG5cdFx0XHRcdFx0XHRmaXJpbmdJbmRleCA9IGxpc3QubGVuZ3RoO1xuXHRcdFx0XHRcdFx0bWVtb3J5ID0gZmFsc2U7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIEZvcmdldCB0aGUgZGF0YSBpZiB3ZSdyZSBkb25lIHdpdGggaXRcblx0XHRcdGlmICggIW9wdGlvbnMubWVtb3J5ICkge1xuXHRcdFx0XHRtZW1vcnkgPSBmYWxzZTtcblx0XHRcdH1cblxuXHRcdFx0ZmlyaW5nID0gZmFsc2U7XG5cblx0XHRcdC8vIENsZWFuIHVwIGlmIHdlJ3JlIGRvbmUgZmlyaW5nIGZvciBnb29kXG5cdFx0XHRpZiAoIGxvY2tlZCApIHtcblxuXHRcdFx0XHQvLyBLZWVwIGFuIGVtcHR5IGxpc3QgaWYgd2UgaGF2ZSBkYXRhIGZvciBmdXR1cmUgYWRkIGNhbGxzXG5cdFx0XHRcdGlmICggbWVtb3J5ICkge1xuXHRcdFx0XHRcdGxpc3QgPSBbXTtcblxuXHRcdFx0XHQvLyBPdGhlcndpc2UsIHRoaXMgb2JqZWN0IGlzIHNwZW50XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0bGlzdCA9IFwiXCI7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0Ly8gQWN0dWFsIENhbGxiYWNrcyBvYmplY3Rcblx0XHRzZWxmID0ge1xuXG5cdFx0XHQvLyBBZGQgYSBjYWxsYmFjayBvciBhIGNvbGxlY3Rpb24gb2YgY2FsbGJhY2tzIHRvIHRoZSBsaXN0XG5cdFx0XHRhZGQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRpZiAoIGxpc3QgKSB7XG5cblx0XHRcdFx0XHQvLyBJZiB3ZSBoYXZlIG1lbW9yeSBmcm9tIGEgcGFzdCBydW4sIHdlIHNob3VsZCBmaXJlIGFmdGVyIGFkZGluZ1xuXHRcdFx0XHRcdGlmICggbWVtb3J5ICYmICFmaXJpbmcgKSB7XG5cdFx0XHRcdFx0XHRmaXJpbmdJbmRleCA9IGxpc3QubGVuZ3RoIC0gMTtcblx0XHRcdFx0XHRcdHF1ZXVlLnB1c2goIG1lbW9yeSApO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdCggZnVuY3Rpb24gYWRkKCBhcmdzICkge1xuXHRcdFx0XHRcdFx0alF1ZXJ5LmVhY2goIGFyZ3MsIGZ1bmN0aW9uKCBfLCBhcmcgKSB7XG5cdFx0XHRcdFx0XHRcdGlmICggaXNGdW5jdGlvbiggYXJnICkgKSB7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKCAhb3B0aW9ucy51bmlxdWUgfHwgIXNlbGYuaGFzKCBhcmcgKSApIHtcblx0XHRcdFx0XHRcdFx0XHRcdGxpc3QucHVzaCggYXJnICk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKCBhcmcgJiYgYXJnLmxlbmd0aCAmJiB0b1R5cGUoIGFyZyApICE9PSBcInN0cmluZ1wiICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gSW5zcGVjdCByZWN1cnNpdmVseVxuXHRcdFx0XHRcdFx0XHRcdGFkZCggYXJnICk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0gKTtcblx0XHRcdFx0XHR9ICkoIGFyZ3VtZW50cyApO1xuXG5cdFx0XHRcdFx0aWYgKCBtZW1vcnkgJiYgIWZpcmluZyApIHtcblx0XHRcdFx0XHRcdGZpcmUoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9LFxuXG5cdFx0XHQvLyBSZW1vdmUgYSBjYWxsYmFjayBmcm9tIHRoZSBsaXN0XG5cdFx0XHRyZW1vdmU6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRqUXVlcnkuZWFjaCggYXJndW1lbnRzLCBmdW5jdGlvbiggXywgYXJnICkge1xuXHRcdFx0XHRcdHZhciBpbmRleDtcblx0XHRcdFx0XHR3aGlsZSAoICggaW5kZXggPSBqUXVlcnkuaW5BcnJheSggYXJnLCBsaXN0LCBpbmRleCApICkgPiAtMSApIHtcblx0XHRcdFx0XHRcdGxpc3Quc3BsaWNlKCBpbmRleCwgMSApO1xuXG5cdFx0XHRcdFx0XHQvLyBIYW5kbGUgZmlyaW5nIGluZGV4ZXNcblx0XHRcdFx0XHRcdGlmICggaW5kZXggPD0gZmlyaW5nSW5kZXggKSB7XG5cdFx0XHRcdFx0XHRcdGZpcmluZ0luZGV4LS07XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9ICk7XG5cdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0fSxcblxuXHRcdFx0Ly8gQ2hlY2sgaWYgYSBnaXZlbiBjYWxsYmFjayBpcyBpbiB0aGUgbGlzdC5cblx0XHRcdC8vIElmIG5vIGFyZ3VtZW50IGlzIGdpdmVuLCByZXR1cm4gd2hldGhlciBvciBub3QgbGlzdCBoYXMgY2FsbGJhY2tzIGF0dGFjaGVkLlxuXHRcdFx0aGFzOiBmdW5jdGlvbiggZm4gKSB7XG5cdFx0XHRcdHJldHVybiBmbiA/XG5cdFx0XHRcdFx0alF1ZXJ5LmluQXJyYXkoIGZuLCBsaXN0ICkgPiAtMSA6XG5cdFx0XHRcdFx0bGlzdC5sZW5ndGggPiAwO1xuXHRcdFx0fSxcblxuXHRcdFx0Ly8gUmVtb3ZlIGFsbCBjYWxsYmFja3MgZnJvbSB0aGUgbGlzdFxuXHRcdFx0ZW1wdHk6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRpZiAoIGxpc3QgKSB7XG5cdFx0XHRcdFx0bGlzdCA9IFtdO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0fSxcblxuXHRcdFx0Ly8gRGlzYWJsZSAuZmlyZSBhbmQgLmFkZFxuXHRcdFx0Ly8gQWJvcnQgYW55IGN1cnJlbnQvcGVuZGluZyBleGVjdXRpb25zXG5cdFx0XHQvLyBDbGVhciBhbGwgY2FsbGJhY2tzIGFuZCB2YWx1ZXNcblx0XHRcdGRpc2FibGU6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRsb2NrZWQgPSBxdWV1ZSA9IFtdO1xuXHRcdFx0XHRsaXN0ID0gbWVtb3J5ID0gXCJcIjtcblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9LFxuXHRcdFx0ZGlzYWJsZWQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRyZXR1cm4gIWxpc3Q7XG5cdFx0XHR9LFxuXG5cdFx0XHQvLyBEaXNhYmxlIC5maXJlXG5cdFx0XHQvLyBBbHNvIGRpc2FibGUgLmFkZCB1bmxlc3Mgd2UgaGF2ZSBtZW1vcnkgKHNpbmNlIGl0IHdvdWxkIGhhdmUgbm8gZWZmZWN0KVxuXHRcdFx0Ly8gQWJvcnQgYW55IHBlbmRpbmcgZXhlY3V0aW9uc1xuXHRcdFx0bG9jazogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGxvY2tlZCA9IHF1ZXVlID0gW107XG5cdFx0XHRcdGlmICggIW1lbW9yeSAmJiAhZmlyaW5nICkge1xuXHRcdFx0XHRcdGxpc3QgPSBtZW1vcnkgPSBcIlwiO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0fSxcblx0XHRcdGxvY2tlZDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHJldHVybiAhIWxvY2tlZDtcblx0XHRcdH0sXG5cblx0XHRcdC8vIENhbGwgYWxsIGNhbGxiYWNrcyB3aXRoIHRoZSBnaXZlbiBjb250ZXh0IGFuZCBhcmd1bWVudHNcblx0XHRcdGZpcmVXaXRoOiBmdW5jdGlvbiggY29udGV4dCwgYXJncyApIHtcblx0XHRcdFx0aWYgKCAhbG9ja2VkICkge1xuXHRcdFx0XHRcdGFyZ3MgPSBhcmdzIHx8IFtdO1xuXHRcdFx0XHRcdGFyZ3MgPSBbIGNvbnRleHQsIGFyZ3Muc2xpY2UgPyBhcmdzLnNsaWNlKCkgOiBhcmdzIF07XG5cdFx0XHRcdFx0cXVldWUucHVzaCggYXJncyApO1xuXHRcdFx0XHRcdGlmICggIWZpcmluZyApIHtcblx0XHRcdFx0XHRcdGZpcmUoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9LFxuXG5cdFx0XHQvLyBDYWxsIGFsbCB0aGUgY2FsbGJhY2tzIHdpdGggdGhlIGdpdmVuIGFyZ3VtZW50c1xuXHRcdFx0ZmlyZTogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHNlbGYuZmlyZVdpdGgoIHRoaXMsIGFyZ3VtZW50cyApO1xuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH0sXG5cblx0XHRcdC8vIFRvIGtub3cgaWYgdGhlIGNhbGxiYWNrcyBoYXZlIGFscmVhZHkgYmVlbiBjYWxsZWQgYXQgbGVhc3Qgb25jZVxuXHRcdFx0ZmlyZWQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRyZXR1cm4gISFmaXJlZDtcblx0XHRcdH1cblx0XHR9O1xuXG5cdHJldHVybiBzZWxmO1xufTtcblxuXG5mdW5jdGlvbiBJZGVudGl0eSggdiApIHtcblx0cmV0dXJuIHY7XG59XG5mdW5jdGlvbiBUaHJvd2VyKCBleCApIHtcblx0dGhyb3cgZXg7XG59XG5cbmZ1bmN0aW9uIGFkb3B0VmFsdWUoIHZhbHVlLCByZXNvbHZlLCByZWplY3QsIG5vVmFsdWUgKSB7XG5cdHZhciBtZXRob2Q7XG5cblx0dHJ5IHtcblxuXHRcdC8vIENoZWNrIGZvciBwcm9taXNlIGFzcGVjdCBmaXJzdCB0byBwcml2aWxlZ2Ugc3luY2hyb25vdXMgYmVoYXZpb3Jcblx0XHRpZiAoIHZhbHVlICYmIGlzRnVuY3Rpb24oICggbWV0aG9kID0gdmFsdWUucHJvbWlzZSApICkgKSB7XG5cdFx0XHRtZXRob2QuY2FsbCggdmFsdWUgKS5kb25lKCByZXNvbHZlICkuZmFpbCggcmVqZWN0ICk7XG5cblx0XHQvLyBPdGhlciB0aGVuYWJsZXNcblx0XHR9IGVsc2UgaWYgKCB2YWx1ZSAmJiBpc0Z1bmN0aW9uKCAoIG1ldGhvZCA9IHZhbHVlLnRoZW4gKSApICkge1xuXHRcdFx0bWV0aG9kLmNhbGwoIHZhbHVlLCByZXNvbHZlLCByZWplY3QgKTtcblxuXHRcdC8vIE90aGVyIG5vbi10aGVuYWJsZXNcblx0XHR9IGVsc2Uge1xuXG5cdFx0XHQvLyBDb250cm9sIGByZXNvbHZlYCBhcmd1bWVudHMgYnkgbGV0dGluZyBBcnJheSNzbGljZSBjYXN0IGJvb2xlYW4gYG5vVmFsdWVgIHRvIGludGVnZXI6XG5cdFx0XHQvLyAqIGZhbHNlOiBbIHZhbHVlIF0uc2xpY2UoIDAgKSA9PiByZXNvbHZlKCB2YWx1ZSApXG5cdFx0XHQvLyAqIHRydWU6IFsgdmFsdWUgXS5zbGljZSggMSApID0+IHJlc29sdmUoKVxuXHRcdFx0cmVzb2x2ZS5hcHBseSggdW5kZWZpbmVkLCBbIHZhbHVlIF0uc2xpY2UoIG5vVmFsdWUgKSApO1xuXHRcdH1cblxuXHQvLyBGb3IgUHJvbWlzZXMvQSssIGNvbnZlcnQgZXhjZXB0aW9ucyBpbnRvIHJlamVjdGlvbnNcblx0Ly8gU2luY2UgalF1ZXJ5LndoZW4gZG9lc24ndCB1bndyYXAgdGhlbmFibGVzLCB3ZSBjYW4gc2tpcCB0aGUgZXh0cmEgY2hlY2tzIGFwcGVhcmluZyBpblxuXHQvLyBEZWZlcnJlZCN0aGVuIHRvIGNvbmRpdGlvbmFsbHkgc3VwcHJlc3MgcmVqZWN0aW9uLlxuXHR9IGNhdGNoICggdmFsdWUgKSB7XG5cblx0XHQvLyBTdXBwb3J0OiBBbmRyb2lkIDQuMCBvbmx5XG5cdFx0Ly8gU3RyaWN0IG1vZGUgZnVuY3Rpb25zIGludm9rZWQgd2l0aG91dCAuY2FsbC8uYXBwbHkgZ2V0IGdsb2JhbC1vYmplY3QgY29udGV4dFxuXHRcdHJlamVjdC5hcHBseSggdW5kZWZpbmVkLCBbIHZhbHVlIF0gKTtcblx0fVxufVxuXG5qUXVlcnkuZXh0ZW5kKCB7XG5cblx0RGVmZXJyZWQ6IGZ1bmN0aW9uKCBmdW5jICkge1xuXHRcdHZhciB0dXBsZXMgPSBbXG5cblx0XHRcdFx0Ly8gYWN0aW9uLCBhZGQgbGlzdGVuZXIsIGNhbGxiYWNrcyxcblx0XHRcdFx0Ly8gLi4uIC50aGVuIGhhbmRsZXJzLCBhcmd1bWVudCBpbmRleCwgW2ZpbmFsIHN0YXRlXVxuXHRcdFx0XHRbIFwibm90aWZ5XCIsIFwicHJvZ3Jlc3NcIiwgalF1ZXJ5LkNhbGxiYWNrcyggXCJtZW1vcnlcIiApLFxuXHRcdFx0XHRcdGpRdWVyeS5DYWxsYmFja3MoIFwibWVtb3J5XCIgKSwgMiBdLFxuXHRcdFx0XHRbIFwicmVzb2x2ZVwiLCBcImRvbmVcIiwgalF1ZXJ5LkNhbGxiYWNrcyggXCJvbmNlIG1lbW9yeVwiICksXG5cdFx0XHRcdFx0alF1ZXJ5LkNhbGxiYWNrcyggXCJvbmNlIG1lbW9yeVwiICksIDAsIFwicmVzb2x2ZWRcIiBdLFxuXHRcdFx0XHRbIFwicmVqZWN0XCIsIFwiZmFpbFwiLCBqUXVlcnkuQ2FsbGJhY2tzKCBcIm9uY2UgbWVtb3J5XCIgKSxcblx0XHRcdFx0XHRqUXVlcnkuQ2FsbGJhY2tzKCBcIm9uY2UgbWVtb3J5XCIgKSwgMSwgXCJyZWplY3RlZFwiIF1cblx0XHRcdF0sXG5cdFx0XHRzdGF0ZSA9IFwicGVuZGluZ1wiLFxuXHRcdFx0cHJvbWlzZSA9IHtcblx0XHRcdFx0c3RhdGU6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdHJldHVybiBzdGF0ZTtcblx0XHRcdFx0fSxcblx0XHRcdFx0YWx3YXlzOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRkZWZlcnJlZC5kb25lKCBhcmd1bWVudHMgKS5mYWlsKCBhcmd1bWVudHMgKTtcblx0XHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdFx0fSxcblx0XHRcdFx0XCJjYXRjaFwiOiBmdW5jdGlvbiggZm4gKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHByb21pc2UudGhlbiggbnVsbCwgZm4gKTtcblx0XHRcdFx0fSxcblxuXHRcdFx0XHQvLyBLZWVwIHBpcGUgZm9yIGJhY2stY29tcGF0XG5cdFx0XHRcdHBpcGU6IGZ1bmN0aW9uKCAvKiBmbkRvbmUsIGZuRmFpbCwgZm5Qcm9ncmVzcyAqLyApIHtcblx0XHRcdFx0XHR2YXIgZm5zID0gYXJndW1lbnRzO1xuXG5cdFx0XHRcdFx0cmV0dXJuIGpRdWVyeS5EZWZlcnJlZCggZnVuY3Rpb24oIG5ld0RlZmVyICkge1xuXHRcdFx0XHRcdFx0alF1ZXJ5LmVhY2goIHR1cGxlcywgZnVuY3Rpb24oIGksIHR1cGxlICkge1xuXG5cdFx0XHRcdFx0XHRcdC8vIE1hcCB0dXBsZXMgKHByb2dyZXNzLCBkb25lLCBmYWlsKSB0byBhcmd1bWVudHMgKGRvbmUsIGZhaWwsIHByb2dyZXNzKVxuXHRcdFx0XHRcdFx0XHR2YXIgZm4gPSBpc0Z1bmN0aW9uKCBmbnNbIHR1cGxlWyA0IF0gXSApICYmIGZuc1sgdHVwbGVbIDQgXSBdO1xuXG5cdFx0XHRcdFx0XHRcdC8vIGRlZmVycmVkLnByb2dyZXNzKGZ1bmN0aW9uKCkgeyBiaW5kIHRvIG5ld0RlZmVyIG9yIG5ld0RlZmVyLm5vdGlmeSB9KVxuXHRcdFx0XHRcdFx0XHQvLyBkZWZlcnJlZC5kb25lKGZ1bmN0aW9uKCkgeyBiaW5kIHRvIG5ld0RlZmVyIG9yIG5ld0RlZmVyLnJlc29sdmUgfSlcblx0XHRcdFx0XHRcdFx0Ly8gZGVmZXJyZWQuZmFpbChmdW5jdGlvbigpIHsgYmluZCB0byBuZXdEZWZlciBvciBuZXdEZWZlci5yZWplY3QgfSlcblx0XHRcdFx0XHRcdFx0ZGVmZXJyZWRbIHR1cGxlWyAxIF0gXSggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIHJldHVybmVkID0gZm4gJiYgZm4uYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApO1xuXHRcdFx0XHRcdFx0XHRcdGlmICggcmV0dXJuZWQgJiYgaXNGdW5jdGlvbiggcmV0dXJuZWQucHJvbWlzZSApICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuZWQucHJvbWlzZSgpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC5wcm9ncmVzcyggbmV3RGVmZXIubm90aWZ5IClcblx0XHRcdFx0XHRcdFx0XHRcdFx0LmRvbmUoIG5ld0RlZmVyLnJlc29sdmUgKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQuZmFpbCggbmV3RGVmZXIucmVqZWN0ICk7XG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdG5ld0RlZmVyWyB0dXBsZVsgMCBdICsgXCJXaXRoXCIgXShcblx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0Zm4gPyBbIHJldHVybmVkIF0gOiBhcmd1bWVudHNcblx0XHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9ICk7XG5cdFx0XHRcdFx0XHR9ICk7XG5cdFx0XHRcdFx0XHRmbnMgPSBudWxsO1xuXHRcdFx0XHRcdH0gKS5wcm9taXNlKCk7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHRoZW46IGZ1bmN0aW9uKCBvbkZ1bGZpbGxlZCwgb25SZWplY3RlZCwgb25Qcm9ncmVzcyApIHtcblx0XHRcdFx0XHR2YXIgbWF4RGVwdGggPSAwO1xuXHRcdFx0XHRcdGZ1bmN0aW9uIHJlc29sdmUoIGRlcHRoLCBkZWZlcnJlZCwgaGFuZGxlciwgc3BlY2lhbCApIHtcblx0XHRcdFx0XHRcdHJldHVybiBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdFx0dmFyIHRoYXQgPSB0aGlzLFxuXHRcdFx0XHRcdFx0XHRcdGFyZ3MgPSBhcmd1bWVudHMsXG5cdFx0XHRcdFx0XHRcdFx0bWlnaHRUaHJvdyA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIHJldHVybmVkLCB0aGVuO1xuXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBQcm9taXNlcy9BKyBzZWN0aW9uIDIuMy4zLjMuM1xuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gaHR0cHM6Ly9wcm9taXNlc2FwbHVzLmNvbS8jcG9pbnQtNTlcblx0XHRcdFx0XHRcdFx0XHRcdC8vIElnbm9yZSBkb3VibGUtcmVzb2x1dGlvbiBhdHRlbXB0c1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKCBkZXB0aCA8IG1heERlcHRoICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybmVkID0gaGFuZGxlci5hcHBseSggdGhhdCwgYXJncyApO1xuXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBQcm9taXNlcy9BKyBzZWN0aW9uIDIuMy4xXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBodHRwczovL3Byb21pc2VzYXBsdXMuY29tLyNwb2ludC00OFxuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKCByZXR1cm5lZCA9PT0gZGVmZXJyZWQucHJvbWlzZSgpICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCBcIlRoZW5hYmxlIHNlbGYtcmVzb2x1dGlvblwiICk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IFByb21pc2VzL0ErIHNlY3Rpb25zIDIuMy4zLjEsIDMuNVxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gaHR0cHM6Ly9wcm9taXNlc2FwbHVzLmNvbS8jcG9pbnQtNTRcblx0XHRcdFx0XHRcdFx0XHRcdC8vIGh0dHBzOi8vcHJvbWlzZXNhcGx1cy5jb20vI3BvaW50LTc1XG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBSZXRyaWV2ZSBgdGhlbmAgb25seSBvbmNlXG5cdFx0XHRcdFx0XHRcdFx0XHR0aGVuID0gcmV0dXJuZWQgJiZcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBQcm9taXNlcy9BKyBzZWN0aW9uIDIuMy40XG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIGh0dHBzOi8vcHJvbWlzZXNhcGx1cy5jb20vI3BvaW50LTY0XG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIE9ubHkgY2hlY2sgb2JqZWN0cyBhbmQgZnVuY3Rpb25zIGZvciB0aGVuYWJpbGl0eVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQoIHR5cGVvZiByZXR1cm5lZCA9PT0gXCJvYmplY3RcIiB8fFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHR5cGVvZiByZXR1cm5lZCA9PT0gXCJmdW5jdGlvblwiICkgJiZcblx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuZWQudGhlbjtcblxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gSGFuZGxlIGEgcmV0dXJuZWQgdGhlbmFibGVcblx0XHRcdFx0XHRcdFx0XHRcdGlmICggaXNGdW5jdGlvbiggdGhlbiApICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIFNwZWNpYWwgcHJvY2Vzc29ycyAobm90aWZ5KSBqdXN0IHdhaXQgZm9yIHJlc29sdXRpb25cblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKCBzcGVjaWFsICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoZW4uY2FsbChcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybmVkLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmVzb2x2ZSggbWF4RGVwdGgsIGRlZmVycmVkLCBJZGVudGl0eSwgc3BlY2lhbCApLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmVzb2x2ZSggbWF4RGVwdGgsIGRlZmVycmVkLCBUaHJvd2VyLCBzcGVjaWFsIClcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpO1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIE5vcm1hbCBwcm9jZXNzb3JzIChyZXNvbHZlKSBhbHNvIGhvb2sgaW50byBwcm9ncmVzc1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gLi4uYW5kIGRpc3JlZ2FyZCBvbGRlciByZXNvbHV0aW9uIHZhbHVlc1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG1heERlcHRoKys7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aGVuLmNhbGwoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm5lZCxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJlc29sdmUoIG1heERlcHRoLCBkZWZlcnJlZCwgSWRlbnRpdHksIHNwZWNpYWwgKSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJlc29sdmUoIG1heERlcHRoLCBkZWZlcnJlZCwgVGhyb3dlciwgc3BlY2lhbCApLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmVzb2x2ZSggbWF4RGVwdGgsIGRlZmVycmVkLCBJZGVudGl0eSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGVmZXJyZWQubm90aWZ5V2l0aCApXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBIYW5kbGUgYWxsIG90aGVyIHJldHVybmVkIHZhbHVlc1xuXHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBPbmx5IHN1YnN0aXR1dGUgaGFuZGxlcnMgcGFzcyBvbiBjb250ZXh0XG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIGFuZCBtdWx0aXBsZSB2YWx1ZXMgKG5vbi1zcGVjIGJlaGF2aW9yKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoIGhhbmRsZXIgIT09IElkZW50aXR5ICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoYXQgPSB1bmRlZmluZWQ7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0YXJncyA9IFsgcmV0dXJuZWQgXTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIFByb2Nlc3MgdGhlIHZhbHVlKHMpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIERlZmF1bHQgcHJvY2VzcyBpcyByZXNvbHZlXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCggc3BlY2lhbCB8fCBkZWZlcnJlZC5yZXNvbHZlV2l0aCApKCB0aGF0LCBhcmdzICk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fSxcblxuXHRcdFx0XHRcdFx0XHRcdC8vIE9ubHkgbm9ybWFsIHByb2Nlc3NvcnMgKHJlc29sdmUpIGNhdGNoIGFuZCByZWplY3QgZXhjZXB0aW9uc1xuXHRcdFx0XHRcdFx0XHRcdHByb2Nlc3MgPSBzcGVjaWFsID9cblx0XHRcdFx0XHRcdFx0XHRcdG1pZ2h0VGhyb3cgOlxuXHRcdFx0XHRcdFx0XHRcdFx0ZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0bWlnaHRUaHJvdygpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9IGNhdGNoICggZSApIHtcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmICggalF1ZXJ5LkRlZmVycmVkLmV4Y2VwdGlvbkhvb2sgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRqUXVlcnkuRGVmZXJyZWQuZXhjZXB0aW9uSG9vayggZSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cHJvY2Vzcy5zdGFja1RyYWNlICk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogUHJvbWlzZXMvQSsgc2VjdGlvbiAyLjMuMy4zLjQuMVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIGh0dHBzOi8vcHJvbWlzZXNhcGx1cy5jb20vI3BvaW50LTYxXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gSWdub3JlIHBvc3QtcmVzb2x1dGlvbiBleGNlcHRpb25zXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKCBkZXB0aCArIDEgPj0gbWF4RGVwdGggKSB7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIE9ubHkgc3Vic3RpdHV0ZSBoYW5kbGVycyBwYXNzIG9uIGNvbnRleHRcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIGFuZCBtdWx0aXBsZSB2YWx1ZXMgKG5vbi1zcGVjIGJlaGF2aW9yKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKCBoYW5kbGVyICE9PSBUaHJvd2VyICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aGF0ID0gdW5kZWZpbmVkO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhcmdzID0gWyBlIF07XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRlZmVycmVkLnJlamVjdFdpdGgoIHRoYXQsIGFyZ3MgKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdH07XG5cblx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogUHJvbWlzZXMvQSsgc2VjdGlvbiAyLjMuMy4zLjFcblx0XHRcdFx0XHRcdFx0Ly8gaHR0cHM6Ly9wcm9taXNlc2FwbHVzLmNvbS8jcG9pbnQtNTdcblx0XHRcdFx0XHRcdFx0Ly8gUmUtcmVzb2x2ZSBwcm9taXNlcyBpbW1lZGlhdGVseSB0byBkb2RnZSBmYWxzZSByZWplY3Rpb24gZnJvbVxuXHRcdFx0XHRcdFx0XHQvLyBzdWJzZXF1ZW50IGVycm9yc1xuXHRcdFx0XHRcdFx0XHRpZiAoIGRlcHRoICkge1xuXHRcdFx0XHRcdFx0XHRcdHByb2Nlc3MoKTtcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdFx0XHRcdC8vIENhbGwgYW4gb3B0aW9uYWwgaG9vayB0byByZWNvcmQgdGhlIHN0YWNrLCBpbiBjYXNlIG9mIGV4Y2VwdGlvblxuXHRcdFx0XHRcdFx0XHRcdC8vIHNpbmNlIGl0J3Mgb3RoZXJ3aXNlIGxvc3Qgd2hlbiBleGVjdXRpb24gZ29lcyBhc3luY1xuXHRcdFx0XHRcdFx0XHRcdGlmICggalF1ZXJ5LkRlZmVycmVkLmdldFN0YWNrSG9vayApIHtcblx0XHRcdFx0XHRcdFx0XHRcdHByb2Nlc3Muc3RhY2tUcmFjZSA9IGpRdWVyeS5EZWZlcnJlZC5nZXRTdGFja0hvb2soKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0d2luZG93LnNldFRpbWVvdXQoIHByb2Nlc3MgKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRyZXR1cm4galF1ZXJ5LkRlZmVycmVkKCBmdW5jdGlvbiggbmV3RGVmZXIgKSB7XG5cblx0XHRcdFx0XHRcdC8vIHByb2dyZXNzX2hhbmRsZXJzLmFkZCggLi4uIClcblx0XHRcdFx0XHRcdHR1cGxlc1sgMCBdWyAzIF0uYWRkKFxuXHRcdFx0XHRcdFx0XHRyZXNvbHZlKFxuXHRcdFx0XHRcdFx0XHRcdDAsXG5cdFx0XHRcdFx0XHRcdFx0bmV3RGVmZXIsXG5cdFx0XHRcdFx0XHRcdFx0aXNGdW5jdGlvbiggb25Qcm9ncmVzcyApID9cblx0XHRcdFx0XHRcdFx0XHRcdG9uUHJvZ3Jlc3MgOlxuXHRcdFx0XHRcdFx0XHRcdFx0SWRlbnRpdHksXG5cdFx0XHRcdFx0XHRcdFx0bmV3RGVmZXIubm90aWZ5V2l0aFxuXHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHQpO1xuXG5cdFx0XHRcdFx0XHQvLyBmdWxmaWxsZWRfaGFuZGxlcnMuYWRkKCAuLi4gKVxuXHRcdFx0XHRcdFx0dHVwbGVzWyAxIF1bIDMgXS5hZGQoXG5cdFx0XHRcdFx0XHRcdHJlc29sdmUoXG5cdFx0XHRcdFx0XHRcdFx0MCxcblx0XHRcdFx0XHRcdFx0XHRuZXdEZWZlcixcblx0XHRcdFx0XHRcdFx0XHRpc0Z1bmN0aW9uKCBvbkZ1bGZpbGxlZCApID9cblx0XHRcdFx0XHRcdFx0XHRcdG9uRnVsZmlsbGVkIDpcblx0XHRcdFx0XHRcdFx0XHRcdElkZW50aXR5XG5cdFx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdCk7XG5cblx0XHRcdFx0XHRcdC8vIHJlamVjdGVkX2hhbmRsZXJzLmFkZCggLi4uIClcblx0XHRcdFx0XHRcdHR1cGxlc1sgMiBdWyAzIF0uYWRkKFxuXHRcdFx0XHRcdFx0XHRyZXNvbHZlKFxuXHRcdFx0XHRcdFx0XHRcdDAsXG5cdFx0XHRcdFx0XHRcdFx0bmV3RGVmZXIsXG5cdFx0XHRcdFx0XHRcdFx0aXNGdW5jdGlvbiggb25SZWplY3RlZCApID9cblx0XHRcdFx0XHRcdFx0XHRcdG9uUmVqZWN0ZWQgOlxuXHRcdFx0XHRcdFx0XHRcdFx0VGhyb3dlclxuXHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH0gKS5wcm9taXNlKCk7XG5cdFx0XHRcdH0sXG5cblx0XHRcdFx0Ly8gR2V0IGEgcHJvbWlzZSBmb3IgdGhpcyBkZWZlcnJlZFxuXHRcdFx0XHQvLyBJZiBvYmogaXMgcHJvdmlkZWQsIHRoZSBwcm9taXNlIGFzcGVjdCBpcyBhZGRlZCB0byB0aGUgb2JqZWN0XG5cdFx0XHRcdHByb21pc2U6IGZ1bmN0aW9uKCBvYmogKSB7XG5cdFx0XHRcdFx0cmV0dXJuIG9iaiAhPSBudWxsID8galF1ZXJ5LmV4dGVuZCggb2JqLCBwcm9taXNlICkgOiBwcm9taXNlO1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0ZGVmZXJyZWQgPSB7fTtcblxuXHRcdC8vIEFkZCBsaXN0LXNwZWNpZmljIG1ldGhvZHNcblx0XHRqUXVlcnkuZWFjaCggdHVwbGVzLCBmdW5jdGlvbiggaSwgdHVwbGUgKSB7XG5cdFx0XHR2YXIgbGlzdCA9IHR1cGxlWyAyIF0sXG5cdFx0XHRcdHN0YXRlU3RyaW5nID0gdHVwbGVbIDUgXTtcblxuXHRcdFx0Ly8gcHJvbWlzZS5wcm9ncmVzcyA9IGxpc3QuYWRkXG5cdFx0XHQvLyBwcm9taXNlLmRvbmUgPSBsaXN0LmFkZFxuXHRcdFx0Ly8gcHJvbWlzZS5mYWlsID0gbGlzdC5hZGRcblx0XHRcdHByb21pc2VbIHR1cGxlWyAxIF0gXSA9IGxpc3QuYWRkO1xuXG5cdFx0XHQvLyBIYW5kbGUgc3RhdGVcblx0XHRcdGlmICggc3RhdGVTdHJpbmcgKSB7XG5cdFx0XHRcdGxpc3QuYWRkKFxuXHRcdFx0XHRcdGZ1bmN0aW9uKCkge1xuXG5cdFx0XHRcdFx0XHQvLyBzdGF0ZSA9IFwicmVzb2x2ZWRcIiAoaS5lLiwgZnVsZmlsbGVkKVxuXHRcdFx0XHRcdFx0Ly8gc3RhdGUgPSBcInJlamVjdGVkXCJcblx0XHRcdFx0XHRcdHN0YXRlID0gc3RhdGVTdHJpbmc7XG5cdFx0XHRcdFx0fSxcblxuXHRcdFx0XHRcdC8vIHJlamVjdGVkX2NhbGxiYWNrcy5kaXNhYmxlXG5cdFx0XHRcdFx0Ly8gZnVsZmlsbGVkX2NhbGxiYWNrcy5kaXNhYmxlXG5cdFx0XHRcdFx0dHVwbGVzWyAzIC0gaSBdWyAyIF0uZGlzYWJsZSxcblxuXHRcdFx0XHRcdC8vIHJlamVjdGVkX2hhbmRsZXJzLmRpc2FibGVcblx0XHRcdFx0XHQvLyBmdWxmaWxsZWRfaGFuZGxlcnMuZGlzYWJsZVxuXHRcdFx0XHRcdHR1cGxlc1sgMyAtIGkgXVsgMyBdLmRpc2FibGUsXG5cblx0XHRcdFx0XHQvLyBwcm9ncmVzc19jYWxsYmFja3MubG9ja1xuXHRcdFx0XHRcdHR1cGxlc1sgMCBdWyAyIF0ubG9jayxcblxuXHRcdFx0XHRcdC8vIHByb2dyZXNzX2hhbmRsZXJzLmxvY2tcblx0XHRcdFx0XHR0dXBsZXNbIDAgXVsgMyBdLmxvY2tcblx0XHRcdFx0KTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gcHJvZ3Jlc3NfaGFuZGxlcnMuZmlyZVxuXHRcdFx0Ly8gZnVsZmlsbGVkX2hhbmRsZXJzLmZpcmVcblx0XHRcdC8vIHJlamVjdGVkX2hhbmRsZXJzLmZpcmVcblx0XHRcdGxpc3QuYWRkKCB0dXBsZVsgMyBdLmZpcmUgKTtcblxuXHRcdFx0Ly8gZGVmZXJyZWQubm90aWZ5ID0gZnVuY3Rpb24oKSB7IGRlZmVycmVkLm5vdGlmeVdpdGgoLi4uKSB9XG5cdFx0XHQvLyBkZWZlcnJlZC5yZXNvbHZlID0gZnVuY3Rpb24oKSB7IGRlZmVycmVkLnJlc29sdmVXaXRoKC4uLikgfVxuXHRcdFx0Ly8gZGVmZXJyZWQucmVqZWN0ID0gZnVuY3Rpb24oKSB7IGRlZmVycmVkLnJlamVjdFdpdGgoLi4uKSB9XG5cdFx0XHRkZWZlcnJlZFsgdHVwbGVbIDAgXSBdID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGRlZmVycmVkWyB0dXBsZVsgMCBdICsgXCJXaXRoXCIgXSggdGhpcyA9PT0gZGVmZXJyZWQgPyB1bmRlZmluZWQgOiB0aGlzLCBhcmd1bWVudHMgKTtcblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9O1xuXG5cdFx0XHQvLyBkZWZlcnJlZC5ub3RpZnlXaXRoID0gbGlzdC5maXJlV2l0aFxuXHRcdFx0Ly8gZGVmZXJyZWQucmVzb2x2ZVdpdGggPSBsaXN0LmZpcmVXaXRoXG5cdFx0XHQvLyBkZWZlcnJlZC5yZWplY3RXaXRoID0gbGlzdC5maXJlV2l0aFxuXHRcdFx0ZGVmZXJyZWRbIHR1cGxlWyAwIF0gKyBcIldpdGhcIiBdID0gbGlzdC5maXJlV2l0aDtcblx0XHR9ICk7XG5cblx0XHQvLyBNYWtlIHRoZSBkZWZlcnJlZCBhIHByb21pc2Vcblx0XHRwcm9taXNlLnByb21pc2UoIGRlZmVycmVkICk7XG5cblx0XHQvLyBDYWxsIGdpdmVuIGZ1bmMgaWYgYW55XG5cdFx0aWYgKCBmdW5jICkge1xuXHRcdFx0ZnVuYy5jYWxsKCBkZWZlcnJlZCwgZGVmZXJyZWQgKTtcblx0XHR9XG5cblx0XHQvLyBBbGwgZG9uZSFcblx0XHRyZXR1cm4gZGVmZXJyZWQ7XG5cdH0sXG5cblx0Ly8gRGVmZXJyZWQgaGVscGVyXG5cdHdoZW46IGZ1bmN0aW9uKCBzaW5nbGVWYWx1ZSApIHtcblx0XHR2YXJcblxuXHRcdFx0Ly8gY291bnQgb2YgdW5jb21wbGV0ZWQgc3Vib3JkaW5hdGVzXG5cdFx0XHRyZW1haW5pbmcgPSBhcmd1bWVudHMubGVuZ3RoLFxuXG5cdFx0XHQvLyBjb3VudCBvZiB1bnByb2Nlc3NlZCBhcmd1bWVudHNcblx0XHRcdGkgPSByZW1haW5pbmcsXG5cblx0XHRcdC8vIHN1Ym9yZGluYXRlIGZ1bGZpbGxtZW50IGRhdGFcblx0XHRcdHJlc29sdmVDb250ZXh0cyA9IEFycmF5KCBpICksXG5cdFx0XHRyZXNvbHZlVmFsdWVzID0gc2xpY2UuY2FsbCggYXJndW1lbnRzICksXG5cblx0XHRcdC8vIHRoZSBtYXN0ZXIgRGVmZXJyZWRcblx0XHRcdG1hc3RlciA9IGpRdWVyeS5EZWZlcnJlZCgpLFxuXG5cdFx0XHQvLyBzdWJvcmRpbmF0ZSBjYWxsYmFjayBmYWN0b3J5XG5cdFx0XHR1cGRhdGVGdW5jID0gZnVuY3Rpb24oIGkgKSB7XG5cdFx0XHRcdHJldHVybiBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0XHRcdFx0cmVzb2x2ZUNvbnRleHRzWyBpIF0gPSB0aGlzO1xuXHRcdFx0XHRcdHJlc29sdmVWYWx1ZXNbIGkgXSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxID8gc2xpY2UuY2FsbCggYXJndW1lbnRzICkgOiB2YWx1ZTtcblx0XHRcdFx0XHRpZiAoICEoIC0tcmVtYWluaW5nICkgKSB7XG5cdFx0XHRcdFx0XHRtYXN0ZXIucmVzb2x2ZVdpdGgoIHJlc29sdmVDb250ZXh0cywgcmVzb2x2ZVZhbHVlcyApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fTtcblx0XHRcdH07XG5cblx0XHQvLyBTaW5nbGUtIGFuZCBlbXB0eSBhcmd1bWVudHMgYXJlIGFkb3B0ZWQgbGlrZSBQcm9taXNlLnJlc29sdmVcblx0XHRpZiAoIHJlbWFpbmluZyA8PSAxICkge1xuXHRcdFx0YWRvcHRWYWx1ZSggc2luZ2xlVmFsdWUsIG1hc3Rlci5kb25lKCB1cGRhdGVGdW5jKCBpICkgKS5yZXNvbHZlLCBtYXN0ZXIucmVqZWN0LFxuXHRcdFx0XHQhcmVtYWluaW5nICk7XG5cblx0XHRcdC8vIFVzZSAudGhlbigpIHRvIHVud3JhcCBzZWNvbmRhcnkgdGhlbmFibGVzIChjZi4gZ2gtMzAwMClcblx0XHRcdGlmICggbWFzdGVyLnN0YXRlKCkgPT09IFwicGVuZGluZ1wiIHx8XG5cdFx0XHRcdGlzRnVuY3Rpb24oIHJlc29sdmVWYWx1ZXNbIGkgXSAmJiByZXNvbHZlVmFsdWVzWyBpIF0udGhlbiApICkge1xuXG5cdFx0XHRcdHJldHVybiBtYXN0ZXIudGhlbigpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIE11bHRpcGxlIGFyZ3VtZW50cyBhcmUgYWdncmVnYXRlZCBsaWtlIFByb21pc2UuYWxsIGFycmF5IGVsZW1lbnRzXG5cdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRhZG9wdFZhbHVlKCByZXNvbHZlVmFsdWVzWyBpIF0sIHVwZGF0ZUZ1bmMoIGkgKSwgbWFzdGVyLnJlamVjdCApO1xuXHRcdH1cblxuXHRcdHJldHVybiBtYXN0ZXIucHJvbWlzZSgpO1xuXHR9XG59ICk7XG5cblxuLy8gVGhlc2UgdXN1YWxseSBpbmRpY2F0ZSBhIHByb2dyYW1tZXIgbWlzdGFrZSBkdXJpbmcgZGV2ZWxvcG1lbnQsXG4vLyB3YXJuIGFib3V0IHRoZW0gQVNBUCByYXRoZXIgdGhhbiBzd2FsbG93aW5nIHRoZW0gYnkgZGVmYXVsdC5cbnZhciByZXJyb3JOYW1lcyA9IC9eKEV2YWx8SW50ZXJuYWx8UmFuZ2V8UmVmZXJlbmNlfFN5bnRheHxUeXBlfFVSSSlFcnJvciQvO1xuXG5qUXVlcnkuRGVmZXJyZWQuZXhjZXB0aW9uSG9vayA9IGZ1bmN0aW9uKCBlcnJvciwgc3RhY2sgKSB7XG5cblx0Ly8gU3VwcG9ydDogSUUgOCAtIDkgb25seVxuXHQvLyBDb25zb2xlIGV4aXN0cyB3aGVuIGRldiB0b29scyBhcmUgb3Blbiwgd2hpY2ggY2FuIGhhcHBlbiBhdCBhbnkgdGltZVxuXHRpZiAoIHdpbmRvdy5jb25zb2xlICYmIHdpbmRvdy5jb25zb2xlLndhcm4gJiYgZXJyb3IgJiYgcmVycm9yTmFtZXMudGVzdCggZXJyb3IubmFtZSApICkge1xuXHRcdHdpbmRvdy5jb25zb2xlLndhcm4oIFwialF1ZXJ5LkRlZmVycmVkIGV4Y2VwdGlvbjogXCIgKyBlcnJvci5tZXNzYWdlLCBlcnJvci5zdGFjaywgc3RhY2sgKTtcblx0fVxufTtcblxuXG5cblxualF1ZXJ5LnJlYWR5RXhjZXB0aW9uID0gZnVuY3Rpb24oIGVycm9yICkge1xuXHR3aW5kb3cuc2V0VGltZW91dCggZnVuY3Rpb24oKSB7XG5cdFx0dGhyb3cgZXJyb3I7XG5cdH0gKTtcbn07XG5cblxuXG5cbi8vIFRoZSBkZWZlcnJlZCB1c2VkIG9uIERPTSByZWFkeVxudmFyIHJlYWR5TGlzdCA9IGpRdWVyeS5EZWZlcnJlZCgpO1xuXG5qUXVlcnkuZm4ucmVhZHkgPSBmdW5jdGlvbiggZm4gKSB7XG5cblx0cmVhZHlMaXN0XG5cdFx0LnRoZW4oIGZuIClcblxuXHRcdC8vIFdyYXAgalF1ZXJ5LnJlYWR5RXhjZXB0aW9uIGluIGEgZnVuY3Rpb24gc28gdGhhdCB0aGUgbG9va3VwXG5cdFx0Ly8gaGFwcGVucyBhdCB0aGUgdGltZSBvZiBlcnJvciBoYW5kbGluZyBpbnN0ZWFkIG9mIGNhbGxiYWNrXG5cdFx0Ly8gcmVnaXN0cmF0aW9uLlxuXHRcdC5jYXRjaCggZnVuY3Rpb24oIGVycm9yICkge1xuXHRcdFx0alF1ZXJ5LnJlYWR5RXhjZXB0aW9uKCBlcnJvciApO1xuXHRcdH0gKTtcblxuXHRyZXR1cm4gdGhpcztcbn07XG5cbmpRdWVyeS5leHRlbmQoIHtcblxuXHQvLyBJcyB0aGUgRE9NIHJlYWR5IHRvIGJlIHVzZWQ/IFNldCB0byB0cnVlIG9uY2UgaXQgb2NjdXJzLlxuXHRpc1JlYWR5OiBmYWxzZSxcblxuXHQvLyBBIGNvdW50ZXIgdG8gdHJhY2sgaG93IG1hbnkgaXRlbXMgdG8gd2FpdCBmb3IgYmVmb3JlXG5cdC8vIHRoZSByZWFkeSBldmVudCBmaXJlcy4gU2VlICM2NzgxXG5cdHJlYWR5V2FpdDogMSxcblxuXHQvLyBIYW5kbGUgd2hlbiB0aGUgRE9NIGlzIHJlYWR5XG5cdHJlYWR5OiBmdW5jdGlvbiggd2FpdCApIHtcblxuXHRcdC8vIEFib3J0IGlmIHRoZXJlIGFyZSBwZW5kaW5nIGhvbGRzIG9yIHdlJ3JlIGFscmVhZHkgcmVhZHlcblx0XHRpZiAoIHdhaXQgPT09IHRydWUgPyAtLWpRdWVyeS5yZWFkeVdhaXQgOiBqUXVlcnkuaXNSZWFkeSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBSZW1lbWJlciB0aGF0IHRoZSBET00gaXMgcmVhZHlcblx0XHRqUXVlcnkuaXNSZWFkeSA9IHRydWU7XG5cblx0XHQvLyBJZiBhIG5vcm1hbCBET00gUmVhZHkgZXZlbnQgZmlyZWQsIGRlY3JlbWVudCwgYW5kIHdhaXQgaWYgbmVlZCBiZVxuXHRcdGlmICggd2FpdCAhPT0gdHJ1ZSAmJiAtLWpRdWVyeS5yZWFkeVdhaXQgPiAwICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIElmIHRoZXJlIGFyZSBmdW5jdGlvbnMgYm91bmQsIHRvIGV4ZWN1dGVcblx0XHRyZWFkeUxpc3QucmVzb2x2ZVdpdGgoIGRvY3VtZW50LCBbIGpRdWVyeSBdICk7XG5cdH1cbn0gKTtcblxualF1ZXJ5LnJlYWR5LnRoZW4gPSByZWFkeUxpc3QudGhlbjtcblxuLy8gVGhlIHJlYWR5IGV2ZW50IGhhbmRsZXIgYW5kIHNlbGYgY2xlYW51cCBtZXRob2RcbmZ1bmN0aW9uIGNvbXBsZXRlZCgpIHtcblx0ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lciggXCJET01Db250ZW50TG9hZGVkXCIsIGNvbXBsZXRlZCApO1xuXHR3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lciggXCJsb2FkXCIsIGNvbXBsZXRlZCApO1xuXHRqUXVlcnkucmVhZHkoKTtcbn1cblxuLy8gQ2F0Y2ggY2FzZXMgd2hlcmUgJChkb2N1bWVudCkucmVhZHkoKSBpcyBjYWxsZWRcbi8vIGFmdGVyIHRoZSBicm93c2VyIGV2ZW50IGhhcyBhbHJlYWR5IG9jY3VycmVkLlxuLy8gU3VwcG9ydDogSUUgPD05IC0gMTAgb25seVxuLy8gT2xkZXIgSUUgc29tZXRpbWVzIHNpZ25hbHMgXCJpbnRlcmFjdGl2ZVwiIHRvbyBzb29uXG5pZiAoIGRvY3VtZW50LnJlYWR5U3RhdGUgPT09IFwiY29tcGxldGVcIiB8fFxuXHQoIGRvY3VtZW50LnJlYWR5U3RhdGUgIT09IFwibG9hZGluZ1wiICYmICFkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuZG9TY3JvbGwgKSApIHtcblxuXHQvLyBIYW5kbGUgaXQgYXN5bmNocm9ub3VzbHkgdG8gYWxsb3cgc2NyaXB0cyB0aGUgb3Bwb3J0dW5pdHkgdG8gZGVsYXkgcmVhZHlcblx0d2luZG93LnNldFRpbWVvdXQoIGpRdWVyeS5yZWFkeSApO1xuXG59IGVsc2Uge1xuXG5cdC8vIFVzZSB0aGUgaGFuZHkgZXZlbnQgY2FsbGJhY2tcblx0ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lciggXCJET01Db250ZW50TG9hZGVkXCIsIGNvbXBsZXRlZCApO1xuXG5cdC8vIEEgZmFsbGJhY2sgdG8gd2luZG93Lm9ubG9hZCwgdGhhdCB3aWxsIGFsd2F5cyB3b3JrXG5cdHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCBcImxvYWRcIiwgY29tcGxldGVkICk7XG59XG5cblxuXG5cbi8vIE11bHRpZnVuY3Rpb25hbCBtZXRob2QgdG8gZ2V0IGFuZCBzZXQgdmFsdWVzIG9mIGEgY29sbGVjdGlvblxuLy8gVGhlIHZhbHVlL3MgY2FuIG9wdGlvbmFsbHkgYmUgZXhlY3V0ZWQgaWYgaXQncyBhIGZ1bmN0aW9uXG52YXIgYWNjZXNzID0gZnVuY3Rpb24oIGVsZW1zLCBmbiwga2V5LCB2YWx1ZSwgY2hhaW5hYmxlLCBlbXB0eUdldCwgcmF3ICkge1xuXHR2YXIgaSA9IDAsXG5cdFx0bGVuID0gZWxlbXMubGVuZ3RoLFxuXHRcdGJ1bGsgPSBrZXkgPT0gbnVsbDtcblxuXHQvLyBTZXRzIG1hbnkgdmFsdWVzXG5cdGlmICggdG9UeXBlKCBrZXkgKSA9PT0gXCJvYmplY3RcIiApIHtcblx0XHRjaGFpbmFibGUgPSB0cnVlO1xuXHRcdGZvciAoIGkgaW4ga2V5ICkge1xuXHRcdFx0YWNjZXNzKCBlbGVtcywgZm4sIGksIGtleVsgaSBdLCB0cnVlLCBlbXB0eUdldCwgcmF3ICk7XG5cdFx0fVxuXG5cdC8vIFNldHMgb25lIHZhbHVlXG5cdH0gZWxzZSBpZiAoIHZhbHVlICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0Y2hhaW5hYmxlID0gdHJ1ZTtcblxuXHRcdGlmICggIWlzRnVuY3Rpb24oIHZhbHVlICkgKSB7XG5cdFx0XHRyYXcgPSB0cnVlO1xuXHRcdH1cblxuXHRcdGlmICggYnVsayApIHtcblxuXHRcdFx0Ly8gQnVsayBvcGVyYXRpb25zIHJ1biBhZ2FpbnN0IHRoZSBlbnRpcmUgc2V0XG5cdFx0XHRpZiAoIHJhdyApIHtcblx0XHRcdFx0Zm4uY2FsbCggZWxlbXMsIHZhbHVlICk7XG5cdFx0XHRcdGZuID0gbnVsbDtcblxuXHRcdFx0Ly8gLi4uZXhjZXB0IHdoZW4gZXhlY3V0aW5nIGZ1bmN0aW9uIHZhbHVlc1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0YnVsayA9IGZuO1xuXHRcdFx0XHRmbiA9IGZ1bmN0aW9uKCBlbGVtLCBrZXksIHZhbHVlICkge1xuXHRcdFx0XHRcdHJldHVybiBidWxrLmNhbGwoIGpRdWVyeSggZWxlbSApLCB2YWx1ZSApO1xuXHRcdFx0XHR9O1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmICggZm4gKSB7XG5cdFx0XHRmb3IgKCA7IGkgPCBsZW47IGkrKyApIHtcblx0XHRcdFx0Zm4oXG5cdFx0XHRcdFx0ZWxlbXNbIGkgXSwga2V5LCByYXcgP1xuXHRcdFx0XHRcdHZhbHVlIDpcblx0XHRcdFx0XHR2YWx1ZS5jYWxsKCBlbGVtc1sgaSBdLCBpLCBmbiggZWxlbXNbIGkgXSwga2V5ICkgKVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGlmICggY2hhaW5hYmxlICkge1xuXHRcdHJldHVybiBlbGVtcztcblx0fVxuXG5cdC8vIEdldHNcblx0aWYgKCBidWxrICkge1xuXHRcdHJldHVybiBmbi5jYWxsKCBlbGVtcyApO1xuXHR9XG5cblx0cmV0dXJuIGxlbiA/IGZuKCBlbGVtc1sgMCBdLCBrZXkgKSA6IGVtcHR5R2V0O1xufTtcblxuXG4vLyBNYXRjaGVzIGRhc2hlZCBzdHJpbmcgZm9yIGNhbWVsaXppbmdcbnZhciBybXNQcmVmaXggPSAvXi1tcy0vLFxuXHRyZGFzaEFscGhhID0gLy0oW2Etel0pL2c7XG5cbi8vIFVzZWQgYnkgY2FtZWxDYXNlIGFzIGNhbGxiYWNrIHRvIHJlcGxhY2UoKVxuZnVuY3Rpb24gZmNhbWVsQ2FzZSggYWxsLCBsZXR0ZXIgKSB7XG5cdHJldHVybiBsZXR0ZXIudG9VcHBlckNhc2UoKTtcbn1cblxuLy8gQ29udmVydCBkYXNoZWQgdG8gY2FtZWxDYXNlOyB1c2VkIGJ5IHRoZSBjc3MgYW5kIGRhdGEgbW9kdWxlc1xuLy8gU3VwcG9ydDogSUUgPD05IC0gMTEsIEVkZ2UgMTIgLSAxNVxuLy8gTWljcm9zb2Z0IGZvcmdvdCB0byBodW1wIHRoZWlyIHZlbmRvciBwcmVmaXggKCM5NTcyKVxuZnVuY3Rpb24gY2FtZWxDYXNlKCBzdHJpbmcgKSB7XG5cdHJldHVybiBzdHJpbmcucmVwbGFjZSggcm1zUHJlZml4LCBcIm1zLVwiICkucmVwbGFjZSggcmRhc2hBbHBoYSwgZmNhbWVsQ2FzZSApO1xufVxudmFyIGFjY2VwdERhdGEgPSBmdW5jdGlvbiggb3duZXIgKSB7XG5cblx0Ly8gQWNjZXB0cyBvbmx5OlxuXHQvLyAgLSBOb2RlXG5cdC8vICAgIC0gTm9kZS5FTEVNRU5UX05PREVcblx0Ly8gICAgLSBOb2RlLkRPQ1VNRU5UX05PREVcblx0Ly8gIC0gT2JqZWN0XG5cdC8vICAgIC0gQW55XG5cdHJldHVybiBvd25lci5ub2RlVHlwZSA9PT0gMSB8fCBvd25lci5ub2RlVHlwZSA9PT0gOSB8fCAhKCArb3duZXIubm9kZVR5cGUgKTtcbn07XG5cblxuXG5cbmZ1bmN0aW9uIERhdGEoKSB7XG5cdHRoaXMuZXhwYW5kbyA9IGpRdWVyeS5leHBhbmRvICsgRGF0YS51aWQrKztcbn1cblxuRGF0YS51aWQgPSAxO1xuXG5EYXRhLnByb3RvdHlwZSA9IHtcblxuXHRjYWNoZTogZnVuY3Rpb24oIG93bmVyICkge1xuXG5cdFx0Ly8gQ2hlY2sgaWYgdGhlIG93bmVyIG9iamVjdCBhbHJlYWR5IGhhcyBhIGNhY2hlXG5cdFx0dmFyIHZhbHVlID0gb3duZXJbIHRoaXMuZXhwYW5kbyBdO1xuXG5cdFx0Ly8gSWYgbm90LCBjcmVhdGUgb25lXG5cdFx0aWYgKCAhdmFsdWUgKSB7XG5cdFx0XHR2YWx1ZSA9IHt9O1xuXG5cdFx0XHQvLyBXZSBjYW4gYWNjZXB0IGRhdGEgZm9yIG5vbi1lbGVtZW50IG5vZGVzIGluIG1vZGVybiBicm93c2Vycyxcblx0XHRcdC8vIGJ1dCB3ZSBzaG91bGQgbm90LCBzZWUgIzgzMzUuXG5cdFx0XHQvLyBBbHdheXMgcmV0dXJuIGFuIGVtcHR5IG9iamVjdC5cblx0XHRcdGlmICggYWNjZXB0RGF0YSggb3duZXIgKSApIHtcblxuXHRcdFx0XHQvLyBJZiBpdCBpcyBhIG5vZGUgdW5saWtlbHkgdG8gYmUgc3RyaW5naWZ5LWVkIG9yIGxvb3BlZCBvdmVyXG5cdFx0XHRcdC8vIHVzZSBwbGFpbiBhc3NpZ25tZW50XG5cdFx0XHRcdGlmICggb3duZXIubm9kZVR5cGUgKSB7XG5cdFx0XHRcdFx0b3duZXJbIHRoaXMuZXhwYW5kbyBdID0gdmFsdWU7XG5cblx0XHRcdFx0Ly8gT3RoZXJ3aXNlIHNlY3VyZSBpdCBpbiBhIG5vbi1lbnVtZXJhYmxlIHByb3BlcnR5XG5cdFx0XHRcdC8vIGNvbmZpZ3VyYWJsZSBtdXN0IGJlIHRydWUgdG8gYWxsb3cgdGhlIHByb3BlcnR5IHRvIGJlXG5cdFx0XHRcdC8vIGRlbGV0ZWQgd2hlbiBkYXRhIGlzIHJlbW92ZWRcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoIG93bmVyLCB0aGlzLmV4cGFuZG8sIHtcblx0XHRcdFx0XHRcdHZhbHVlOiB2YWx1ZSxcblx0XHRcdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZVxuXHRcdFx0XHRcdH0gKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB2YWx1ZTtcblx0fSxcblx0c2V0OiBmdW5jdGlvbiggb3duZXIsIGRhdGEsIHZhbHVlICkge1xuXHRcdHZhciBwcm9wLFxuXHRcdFx0Y2FjaGUgPSB0aGlzLmNhY2hlKCBvd25lciApO1xuXG5cdFx0Ly8gSGFuZGxlOiBbIG93bmVyLCBrZXksIHZhbHVlIF0gYXJnc1xuXHRcdC8vIEFsd2F5cyB1c2UgY2FtZWxDYXNlIGtleSAoZ2gtMjI1Nylcblx0XHRpZiAoIHR5cGVvZiBkYXRhID09PSBcInN0cmluZ1wiICkge1xuXHRcdFx0Y2FjaGVbIGNhbWVsQ2FzZSggZGF0YSApIF0gPSB2YWx1ZTtcblxuXHRcdC8vIEhhbmRsZTogWyBvd25lciwgeyBwcm9wZXJ0aWVzIH0gXSBhcmdzXG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0Ly8gQ29weSB0aGUgcHJvcGVydGllcyBvbmUtYnktb25lIHRvIHRoZSBjYWNoZSBvYmplY3Rcblx0XHRcdGZvciAoIHByb3AgaW4gZGF0YSApIHtcblx0XHRcdFx0Y2FjaGVbIGNhbWVsQ2FzZSggcHJvcCApIF0gPSBkYXRhWyBwcm9wIF07XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBjYWNoZTtcblx0fSxcblx0Z2V0OiBmdW5jdGlvbiggb3duZXIsIGtleSApIHtcblx0XHRyZXR1cm4ga2V5ID09PSB1bmRlZmluZWQgP1xuXHRcdFx0dGhpcy5jYWNoZSggb3duZXIgKSA6XG5cblx0XHRcdC8vIEFsd2F5cyB1c2UgY2FtZWxDYXNlIGtleSAoZ2gtMjI1Nylcblx0XHRcdG93bmVyWyB0aGlzLmV4cGFuZG8gXSAmJiBvd25lclsgdGhpcy5leHBhbmRvIF1bIGNhbWVsQ2FzZSgga2V5ICkgXTtcblx0fSxcblx0YWNjZXNzOiBmdW5jdGlvbiggb3duZXIsIGtleSwgdmFsdWUgKSB7XG5cblx0XHQvLyBJbiBjYXNlcyB3aGVyZSBlaXRoZXI6XG5cdFx0Ly9cblx0XHQvLyAgIDEuIE5vIGtleSB3YXMgc3BlY2lmaWVkXG5cdFx0Ly8gICAyLiBBIHN0cmluZyBrZXkgd2FzIHNwZWNpZmllZCwgYnV0IG5vIHZhbHVlIHByb3ZpZGVkXG5cdFx0Ly9cblx0XHQvLyBUYWtlIHRoZSBcInJlYWRcIiBwYXRoIGFuZCBhbGxvdyB0aGUgZ2V0IG1ldGhvZCB0byBkZXRlcm1pbmVcblx0XHQvLyB3aGljaCB2YWx1ZSB0byByZXR1cm4sIHJlc3BlY3RpdmVseSBlaXRoZXI6XG5cdFx0Ly9cblx0XHQvLyAgIDEuIFRoZSBlbnRpcmUgY2FjaGUgb2JqZWN0XG5cdFx0Ly8gICAyLiBUaGUgZGF0YSBzdG9yZWQgYXQgdGhlIGtleVxuXHRcdC8vXG5cdFx0aWYgKCBrZXkgPT09IHVuZGVmaW5lZCB8fFxuXHRcdFx0XHQoICgga2V5ICYmIHR5cGVvZiBrZXkgPT09IFwic3RyaW5nXCIgKSAmJiB2YWx1ZSA9PT0gdW5kZWZpbmVkICkgKSB7XG5cblx0XHRcdHJldHVybiB0aGlzLmdldCggb3duZXIsIGtleSApO1xuXHRcdH1cblxuXHRcdC8vIFdoZW4gdGhlIGtleSBpcyBub3QgYSBzdHJpbmcsIG9yIGJvdGggYSBrZXkgYW5kIHZhbHVlXG5cdFx0Ly8gYXJlIHNwZWNpZmllZCwgc2V0IG9yIGV4dGVuZCAoZXhpc3Rpbmcgb2JqZWN0cykgd2l0aCBlaXRoZXI6XG5cdFx0Ly9cblx0XHQvLyAgIDEuIEFuIG9iamVjdCBvZiBwcm9wZXJ0aWVzXG5cdFx0Ly8gICAyLiBBIGtleSBhbmQgdmFsdWVcblx0XHQvL1xuXHRcdHRoaXMuc2V0KCBvd25lciwga2V5LCB2YWx1ZSApO1xuXG5cdFx0Ly8gU2luY2UgdGhlIFwic2V0XCIgcGF0aCBjYW4gaGF2ZSB0d28gcG9zc2libGUgZW50cnkgcG9pbnRzXG5cdFx0Ly8gcmV0dXJuIHRoZSBleHBlY3RlZCBkYXRhIGJhc2VkIG9uIHdoaWNoIHBhdGggd2FzIHRha2VuWypdXG5cdFx0cmV0dXJuIHZhbHVlICE9PSB1bmRlZmluZWQgPyB2YWx1ZSA6IGtleTtcblx0fSxcblx0cmVtb3ZlOiBmdW5jdGlvbiggb3duZXIsIGtleSApIHtcblx0XHR2YXIgaSxcblx0XHRcdGNhY2hlID0gb3duZXJbIHRoaXMuZXhwYW5kbyBdO1xuXG5cdFx0aWYgKCBjYWNoZSA9PT0gdW5kZWZpbmVkICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmICgga2V5ICE9PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdC8vIFN1cHBvcnQgYXJyYXkgb3Igc3BhY2Ugc2VwYXJhdGVkIHN0cmluZyBvZiBrZXlzXG5cdFx0XHRpZiAoIEFycmF5LmlzQXJyYXkoIGtleSApICkge1xuXG5cdFx0XHRcdC8vIElmIGtleSBpcyBhbiBhcnJheSBvZiBrZXlzLi4uXG5cdFx0XHRcdC8vIFdlIGFsd2F5cyBzZXQgY2FtZWxDYXNlIGtleXMsIHNvIHJlbW92ZSB0aGF0LlxuXHRcdFx0XHRrZXkgPSBrZXkubWFwKCBjYW1lbENhc2UgKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGtleSA9IGNhbWVsQ2FzZSgga2V5ICk7XG5cblx0XHRcdFx0Ly8gSWYgYSBrZXkgd2l0aCB0aGUgc3BhY2VzIGV4aXN0cywgdXNlIGl0LlxuXHRcdFx0XHQvLyBPdGhlcndpc2UsIGNyZWF0ZSBhbiBhcnJheSBieSBtYXRjaGluZyBub24td2hpdGVzcGFjZVxuXHRcdFx0XHRrZXkgPSBrZXkgaW4gY2FjaGUgP1xuXHRcdFx0XHRcdFsga2V5IF0gOlxuXHRcdFx0XHRcdCgga2V5Lm1hdGNoKCBybm90aHRtbHdoaXRlICkgfHwgW10gKTtcblx0XHRcdH1cblxuXHRcdFx0aSA9IGtleS5sZW5ndGg7XG5cblx0XHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0XHRkZWxldGUgY2FjaGVbIGtleVsgaSBdIF07XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gUmVtb3ZlIHRoZSBleHBhbmRvIGlmIHRoZXJlJ3Mgbm8gbW9yZSBkYXRhXG5cdFx0aWYgKCBrZXkgPT09IHVuZGVmaW5lZCB8fCBqUXVlcnkuaXNFbXB0eU9iamVjdCggY2FjaGUgKSApIHtcblxuXHRcdFx0Ly8gU3VwcG9ydDogQ2hyb21lIDw9MzUgLSA0NVxuXHRcdFx0Ly8gV2Via2l0ICYgQmxpbmsgcGVyZm9ybWFuY2Ugc3VmZmVycyB3aGVuIGRlbGV0aW5nIHByb3BlcnRpZXNcblx0XHRcdC8vIGZyb20gRE9NIG5vZGVzLCBzbyBzZXQgdG8gdW5kZWZpbmVkIGluc3RlYWRcblx0XHRcdC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTM3ODYwNyAoYnVnIHJlc3RyaWN0ZWQpXG5cdFx0XHRpZiAoIG93bmVyLm5vZGVUeXBlICkge1xuXHRcdFx0XHRvd25lclsgdGhpcy5leHBhbmRvIF0gPSB1bmRlZmluZWQ7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRkZWxldGUgb3duZXJbIHRoaXMuZXhwYW5kbyBdO1xuXHRcdFx0fVxuXHRcdH1cblx0fSxcblx0aGFzRGF0YTogZnVuY3Rpb24oIG93bmVyICkge1xuXHRcdHZhciBjYWNoZSA9IG93bmVyWyB0aGlzLmV4cGFuZG8gXTtcblx0XHRyZXR1cm4gY2FjaGUgIT09IHVuZGVmaW5lZCAmJiAhalF1ZXJ5LmlzRW1wdHlPYmplY3QoIGNhY2hlICk7XG5cdH1cbn07XG52YXIgZGF0YVByaXYgPSBuZXcgRGF0YSgpO1xuXG52YXIgZGF0YVVzZXIgPSBuZXcgRGF0YSgpO1xuXG5cblxuLy9cdEltcGxlbWVudGF0aW9uIFN1bW1hcnlcbi8vXG4vL1x0MS4gRW5mb3JjZSBBUEkgc3VyZmFjZSBhbmQgc2VtYW50aWMgY29tcGF0aWJpbGl0eSB3aXRoIDEuOS54IGJyYW5jaFxuLy9cdDIuIEltcHJvdmUgdGhlIG1vZHVsZSdzIG1haW50YWluYWJpbGl0eSBieSByZWR1Y2luZyB0aGUgc3RvcmFnZVxuLy9cdFx0cGF0aHMgdG8gYSBzaW5nbGUgbWVjaGFuaXNtLlxuLy9cdDMuIFVzZSB0aGUgc2FtZSBzaW5nbGUgbWVjaGFuaXNtIHRvIHN1cHBvcnQgXCJwcml2YXRlXCIgYW5kIFwidXNlclwiIGRhdGEuXG4vL1x0NC4gX05ldmVyXyBleHBvc2UgXCJwcml2YXRlXCIgZGF0YSB0byB1c2VyIGNvZGUgKFRPRE86IERyb3AgX2RhdGEsIF9yZW1vdmVEYXRhKVxuLy9cdDUuIEF2b2lkIGV4cG9zaW5nIGltcGxlbWVudGF0aW9uIGRldGFpbHMgb24gdXNlciBvYmplY3RzIChlZy4gZXhwYW5kbyBwcm9wZXJ0aWVzKVxuLy9cdDYuIFByb3ZpZGUgYSBjbGVhciBwYXRoIGZvciBpbXBsZW1lbnRhdGlvbiB1cGdyYWRlIHRvIFdlYWtNYXAgaW4gMjAxNFxuXG52YXIgcmJyYWNlID0gL14oPzpcXHtbXFx3XFxXXSpcXH18XFxbW1xcd1xcV10qXFxdKSQvLFxuXHRybXVsdGlEYXNoID0gL1tBLVpdL2c7XG5cbmZ1bmN0aW9uIGdldERhdGEoIGRhdGEgKSB7XG5cdGlmICggZGF0YSA9PT0gXCJ0cnVlXCIgKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHRpZiAoIGRhdGEgPT09IFwiZmFsc2VcIiApIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRpZiAoIGRhdGEgPT09IFwibnVsbFwiICkge1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0Ly8gT25seSBjb252ZXJ0IHRvIGEgbnVtYmVyIGlmIGl0IGRvZXNuJ3QgY2hhbmdlIHRoZSBzdHJpbmdcblx0aWYgKCBkYXRhID09PSArZGF0YSArIFwiXCIgKSB7XG5cdFx0cmV0dXJuICtkYXRhO1xuXHR9XG5cblx0aWYgKCByYnJhY2UudGVzdCggZGF0YSApICkge1xuXHRcdHJldHVybiBKU09OLnBhcnNlKCBkYXRhICk7XG5cdH1cblxuXHRyZXR1cm4gZGF0YTtcbn1cblxuZnVuY3Rpb24gZGF0YUF0dHIoIGVsZW0sIGtleSwgZGF0YSApIHtcblx0dmFyIG5hbWU7XG5cblx0Ly8gSWYgbm90aGluZyB3YXMgZm91bmQgaW50ZXJuYWxseSwgdHJ5IHRvIGZldGNoIGFueVxuXHQvLyBkYXRhIGZyb20gdGhlIEhUTUw1IGRhdGEtKiBhdHRyaWJ1dGVcblx0aWYgKCBkYXRhID09PSB1bmRlZmluZWQgJiYgZWxlbS5ub2RlVHlwZSA9PT0gMSApIHtcblx0XHRuYW1lID0gXCJkYXRhLVwiICsga2V5LnJlcGxhY2UoIHJtdWx0aURhc2gsIFwiLSQmXCIgKS50b0xvd2VyQ2FzZSgpO1xuXHRcdGRhdGEgPSBlbGVtLmdldEF0dHJpYnV0ZSggbmFtZSApO1xuXG5cdFx0aWYgKCB0eXBlb2YgZGF0YSA9PT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGRhdGEgPSBnZXREYXRhKCBkYXRhICk7XG5cdFx0XHR9IGNhdGNoICggZSApIHt9XG5cblx0XHRcdC8vIE1ha2Ugc3VyZSB3ZSBzZXQgdGhlIGRhdGEgc28gaXQgaXNuJ3QgY2hhbmdlZCBsYXRlclxuXHRcdFx0ZGF0YVVzZXIuc2V0KCBlbGVtLCBrZXksIGRhdGEgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0ZGF0YSA9IHVuZGVmaW5lZDtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGRhdGE7XG59XG5cbmpRdWVyeS5leHRlbmQoIHtcblx0aGFzRGF0YTogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0cmV0dXJuIGRhdGFVc2VyLmhhc0RhdGEoIGVsZW0gKSB8fCBkYXRhUHJpdi5oYXNEYXRhKCBlbGVtICk7XG5cdH0sXG5cblx0ZGF0YTogZnVuY3Rpb24oIGVsZW0sIG5hbWUsIGRhdGEgKSB7XG5cdFx0cmV0dXJuIGRhdGFVc2VyLmFjY2VzcyggZWxlbSwgbmFtZSwgZGF0YSApO1xuXHR9LFxuXG5cdHJlbW92ZURhdGE6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lICkge1xuXHRcdGRhdGFVc2VyLnJlbW92ZSggZWxlbSwgbmFtZSApO1xuXHR9LFxuXG5cdC8vIFRPRE86IE5vdyB0aGF0IGFsbCBjYWxscyB0byBfZGF0YSBhbmQgX3JlbW92ZURhdGEgaGF2ZSBiZWVuIHJlcGxhY2VkXG5cdC8vIHdpdGggZGlyZWN0IGNhbGxzIHRvIGRhdGFQcml2IG1ldGhvZHMsIHRoZXNlIGNhbiBiZSBkZXByZWNhdGVkLlxuXHRfZGF0YTogZnVuY3Rpb24oIGVsZW0sIG5hbWUsIGRhdGEgKSB7XG5cdFx0cmV0dXJuIGRhdGFQcml2LmFjY2VzcyggZWxlbSwgbmFtZSwgZGF0YSApO1xuXHR9LFxuXG5cdF9yZW1vdmVEYXRhOiBmdW5jdGlvbiggZWxlbSwgbmFtZSApIHtcblx0XHRkYXRhUHJpdi5yZW1vdmUoIGVsZW0sIG5hbWUgKTtcblx0fVxufSApO1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdGRhdGE6IGZ1bmN0aW9uKCBrZXksIHZhbHVlICkge1xuXHRcdHZhciBpLCBuYW1lLCBkYXRhLFxuXHRcdFx0ZWxlbSA9IHRoaXNbIDAgXSxcblx0XHRcdGF0dHJzID0gZWxlbSAmJiBlbGVtLmF0dHJpYnV0ZXM7XG5cblx0XHQvLyBHZXRzIGFsbCB2YWx1ZXNcblx0XHRpZiAoIGtleSA9PT0gdW5kZWZpbmVkICkge1xuXHRcdFx0aWYgKCB0aGlzLmxlbmd0aCApIHtcblx0XHRcdFx0ZGF0YSA9IGRhdGFVc2VyLmdldCggZWxlbSApO1xuXG5cdFx0XHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSAmJiAhZGF0YVByaXYuZ2V0KCBlbGVtLCBcImhhc0RhdGFBdHRyc1wiICkgKSB7XG5cdFx0XHRcdFx0aSA9IGF0dHJzLmxlbmd0aDtcblx0XHRcdFx0XHR3aGlsZSAoIGktLSApIHtcblxuXHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgMTEgb25seVxuXHRcdFx0XHRcdFx0Ly8gVGhlIGF0dHJzIGVsZW1lbnRzIGNhbiBiZSBudWxsICgjMTQ4OTQpXG5cdFx0XHRcdFx0XHRpZiAoIGF0dHJzWyBpIF0gKSB7XG5cdFx0XHRcdFx0XHRcdG5hbWUgPSBhdHRyc1sgaSBdLm5hbWU7XG5cdFx0XHRcdFx0XHRcdGlmICggbmFtZS5pbmRleE9mKCBcImRhdGEtXCIgKSA9PT0gMCApIHtcblx0XHRcdFx0XHRcdFx0XHRuYW1lID0gY2FtZWxDYXNlKCBuYW1lLnNsaWNlKCA1ICkgKTtcblx0XHRcdFx0XHRcdFx0XHRkYXRhQXR0ciggZWxlbSwgbmFtZSwgZGF0YVsgbmFtZSBdICk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0ZGF0YVByaXYuc2V0KCBlbGVtLCBcImhhc0RhdGFBdHRyc1wiLCB0cnVlICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGRhdGE7XG5cdFx0fVxuXG5cdFx0Ly8gU2V0cyBtdWx0aXBsZSB2YWx1ZXNcblx0XHRpZiAoIHR5cGVvZiBrZXkgPT09IFwib2JqZWN0XCIgKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0ZGF0YVVzZXIuc2V0KCB0aGlzLCBrZXkgKTtcblx0XHRcdH0gKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gYWNjZXNzKCB0aGlzLCBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0XHR2YXIgZGF0YTtcblxuXHRcdFx0Ly8gVGhlIGNhbGxpbmcgalF1ZXJ5IG9iamVjdCAoZWxlbWVudCBtYXRjaGVzKSBpcyBub3QgZW1wdHlcblx0XHRcdC8vIChhbmQgdGhlcmVmb3JlIGhhcyBhbiBlbGVtZW50IGFwcGVhcnMgYXQgdGhpc1sgMCBdKSBhbmQgdGhlXG5cdFx0XHQvLyBgdmFsdWVgIHBhcmFtZXRlciB3YXMgbm90IHVuZGVmaW5lZC4gQW4gZW1wdHkgalF1ZXJ5IG9iamVjdFxuXHRcdFx0Ly8gd2lsbCByZXN1bHQgaW4gYHVuZGVmaW5lZGAgZm9yIGVsZW0gPSB0aGlzWyAwIF0gd2hpY2ggd2lsbFxuXHRcdFx0Ly8gdGhyb3cgYW4gZXhjZXB0aW9uIGlmIGFuIGF0dGVtcHQgdG8gcmVhZCBhIGRhdGEgY2FjaGUgaXMgbWFkZS5cblx0XHRcdGlmICggZWxlbSAmJiB2YWx1ZSA9PT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRcdC8vIEF0dGVtcHQgdG8gZ2V0IGRhdGEgZnJvbSB0aGUgY2FjaGVcblx0XHRcdFx0Ly8gVGhlIGtleSB3aWxsIGFsd2F5cyBiZSBjYW1lbENhc2VkIGluIERhdGFcblx0XHRcdFx0ZGF0YSA9IGRhdGFVc2VyLmdldCggZWxlbSwga2V5ICk7XG5cdFx0XHRcdGlmICggZGF0YSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRcdHJldHVybiBkYXRhO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gQXR0ZW1wdCB0byBcImRpc2NvdmVyXCIgdGhlIGRhdGEgaW5cblx0XHRcdFx0Ly8gSFRNTDUgY3VzdG9tIGRhdGEtKiBhdHRyc1xuXHRcdFx0XHRkYXRhID0gZGF0YUF0dHIoIGVsZW0sIGtleSApO1xuXHRcdFx0XHRpZiAoIGRhdGEgIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0XHRyZXR1cm4gZGF0YTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFdlIHRyaWVkIHJlYWxseSBoYXJkLCBidXQgdGhlIGRhdGEgZG9lc24ndCBleGlzdC5cblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBTZXQgdGhlIGRhdGEuLi5cblx0XHRcdHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cblx0XHRcdFx0Ly8gV2UgYWx3YXlzIHN0b3JlIHRoZSBjYW1lbENhc2VkIGtleVxuXHRcdFx0XHRkYXRhVXNlci5zZXQoIHRoaXMsIGtleSwgdmFsdWUgKTtcblx0XHRcdH0gKTtcblx0XHR9LCBudWxsLCB2YWx1ZSwgYXJndW1lbnRzLmxlbmd0aCA+IDEsIG51bGwsIHRydWUgKTtcblx0fSxcblxuXHRyZW1vdmVEYXRhOiBmdW5jdGlvbigga2V5ICkge1xuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0ZGF0YVVzZXIucmVtb3ZlKCB0aGlzLCBrZXkgKTtcblx0XHR9ICk7XG5cdH1cbn0gKTtcblxuXG5qUXVlcnkuZXh0ZW5kKCB7XG5cdHF1ZXVlOiBmdW5jdGlvbiggZWxlbSwgdHlwZSwgZGF0YSApIHtcblx0XHR2YXIgcXVldWU7XG5cblx0XHRpZiAoIGVsZW0gKSB7XG5cdFx0XHR0eXBlID0gKCB0eXBlIHx8IFwiZnhcIiApICsgXCJxdWV1ZVwiO1xuXHRcdFx0cXVldWUgPSBkYXRhUHJpdi5nZXQoIGVsZW0sIHR5cGUgKTtcblxuXHRcdFx0Ly8gU3BlZWQgdXAgZGVxdWV1ZSBieSBnZXR0aW5nIG91dCBxdWlja2x5IGlmIHRoaXMgaXMganVzdCBhIGxvb2t1cFxuXHRcdFx0aWYgKCBkYXRhICkge1xuXHRcdFx0XHRpZiAoICFxdWV1ZSB8fCBBcnJheS5pc0FycmF5KCBkYXRhICkgKSB7XG5cdFx0XHRcdFx0cXVldWUgPSBkYXRhUHJpdi5hY2Nlc3MoIGVsZW0sIHR5cGUsIGpRdWVyeS5tYWtlQXJyYXkoIGRhdGEgKSApO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHF1ZXVlLnB1c2goIGRhdGEgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHF1ZXVlIHx8IFtdO1xuXHRcdH1cblx0fSxcblxuXHRkZXF1ZXVlOiBmdW5jdGlvbiggZWxlbSwgdHlwZSApIHtcblx0XHR0eXBlID0gdHlwZSB8fCBcImZ4XCI7XG5cblx0XHR2YXIgcXVldWUgPSBqUXVlcnkucXVldWUoIGVsZW0sIHR5cGUgKSxcblx0XHRcdHN0YXJ0TGVuZ3RoID0gcXVldWUubGVuZ3RoLFxuXHRcdFx0Zm4gPSBxdWV1ZS5zaGlmdCgpLFxuXHRcdFx0aG9va3MgPSBqUXVlcnkuX3F1ZXVlSG9va3MoIGVsZW0sIHR5cGUgKSxcblx0XHRcdG5leHQgPSBmdW5jdGlvbigpIHtcblx0XHRcdFx0alF1ZXJ5LmRlcXVldWUoIGVsZW0sIHR5cGUgKTtcblx0XHRcdH07XG5cblx0XHQvLyBJZiB0aGUgZnggcXVldWUgaXMgZGVxdWV1ZWQsIGFsd2F5cyByZW1vdmUgdGhlIHByb2dyZXNzIHNlbnRpbmVsXG5cdFx0aWYgKCBmbiA9PT0gXCJpbnByb2dyZXNzXCIgKSB7XG5cdFx0XHRmbiA9IHF1ZXVlLnNoaWZ0KCk7XG5cdFx0XHRzdGFydExlbmd0aC0tO1xuXHRcdH1cblxuXHRcdGlmICggZm4gKSB7XG5cblx0XHRcdC8vIEFkZCBhIHByb2dyZXNzIHNlbnRpbmVsIHRvIHByZXZlbnQgdGhlIGZ4IHF1ZXVlIGZyb20gYmVpbmdcblx0XHRcdC8vIGF1dG9tYXRpY2FsbHkgZGVxdWV1ZWRcblx0XHRcdGlmICggdHlwZSA9PT0gXCJmeFwiICkge1xuXHRcdFx0XHRxdWV1ZS51bnNoaWZ0KCBcImlucHJvZ3Jlc3NcIiApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBDbGVhciB1cCB0aGUgbGFzdCBxdWV1ZSBzdG9wIGZ1bmN0aW9uXG5cdFx0XHRkZWxldGUgaG9va3Muc3RvcDtcblx0XHRcdGZuLmNhbGwoIGVsZW0sIG5leHQsIGhvb2tzICk7XG5cdFx0fVxuXG5cdFx0aWYgKCAhc3RhcnRMZW5ndGggJiYgaG9va3MgKSB7XG5cdFx0XHRob29rcy5lbXB0eS5maXJlKCk7XG5cdFx0fVxuXHR9LFxuXG5cdC8vIE5vdCBwdWJsaWMgLSBnZW5lcmF0ZSBhIHF1ZXVlSG9va3Mgb2JqZWN0LCBvciByZXR1cm4gdGhlIGN1cnJlbnQgb25lXG5cdF9xdWV1ZUhvb2tzOiBmdW5jdGlvbiggZWxlbSwgdHlwZSApIHtcblx0XHR2YXIga2V5ID0gdHlwZSArIFwicXVldWVIb29rc1wiO1xuXHRcdHJldHVybiBkYXRhUHJpdi5nZXQoIGVsZW0sIGtleSApIHx8IGRhdGFQcml2LmFjY2VzcyggZWxlbSwga2V5LCB7XG5cdFx0XHRlbXB0eTogalF1ZXJ5LkNhbGxiYWNrcyggXCJvbmNlIG1lbW9yeVwiICkuYWRkKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0ZGF0YVByaXYucmVtb3ZlKCBlbGVtLCBbIHR5cGUgKyBcInF1ZXVlXCIsIGtleSBdICk7XG5cdFx0XHR9IClcblx0XHR9ICk7XG5cdH1cbn0gKTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRxdWV1ZTogZnVuY3Rpb24oIHR5cGUsIGRhdGEgKSB7XG5cdFx0dmFyIHNldHRlciA9IDI7XG5cblx0XHRpZiAoIHR5cGVvZiB0eXBlICE9PSBcInN0cmluZ1wiICkge1xuXHRcdFx0ZGF0YSA9IHR5cGU7XG5cdFx0XHR0eXBlID0gXCJmeFwiO1xuXHRcdFx0c2V0dGVyLS07XG5cdFx0fVxuXG5cdFx0aWYgKCBhcmd1bWVudHMubGVuZ3RoIDwgc2V0dGVyICkge1xuXHRcdFx0cmV0dXJuIGpRdWVyeS5xdWV1ZSggdGhpc1sgMCBdLCB0eXBlICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGRhdGEgPT09IHVuZGVmaW5lZCA/XG5cdFx0XHR0aGlzIDpcblx0XHRcdHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHZhciBxdWV1ZSA9IGpRdWVyeS5xdWV1ZSggdGhpcywgdHlwZSwgZGF0YSApO1xuXG5cdFx0XHRcdC8vIEVuc3VyZSBhIGhvb2tzIGZvciB0aGlzIHF1ZXVlXG5cdFx0XHRcdGpRdWVyeS5fcXVldWVIb29rcyggdGhpcywgdHlwZSApO1xuXG5cdFx0XHRcdGlmICggdHlwZSA9PT0gXCJmeFwiICYmIHF1ZXVlWyAwIF0gIT09IFwiaW5wcm9ncmVzc1wiICkge1xuXHRcdFx0XHRcdGpRdWVyeS5kZXF1ZXVlKCB0aGlzLCB0eXBlICk7XG5cdFx0XHRcdH1cblx0XHRcdH0gKTtcblx0fSxcblx0ZGVxdWV1ZTogZnVuY3Rpb24oIHR5cGUgKSB7XG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRqUXVlcnkuZGVxdWV1ZSggdGhpcywgdHlwZSApO1xuXHRcdH0gKTtcblx0fSxcblx0Y2xlYXJRdWV1ZTogZnVuY3Rpb24oIHR5cGUgKSB7XG5cdFx0cmV0dXJuIHRoaXMucXVldWUoIHR5cGUgfHwgXCJmeFwiLCBbXSApO1xuXHR9LFxuXG5cdC8vIEdldCBhIHByb21pc2UgcmVzb2x2ZWQgd2hlbiBxdWV1ZXMgb2YgYSBjZXJ0YWluIHR5cGVcblx0Ly8gYXJlIGVtcHRpZWQgKGZ4IGlzIHRoZSB0eXBlIGJ5IGRlZmF1bHQpXG5cdHByb21pc2U6IGZ1bmN0aW9uKCB0eXBlLCBvYmogKSB7XG5cdFx0dmFyIHRtcCxcblx0XHRcdGNvdW50ID0gMSxcblx0XHRcdGRlZmVyID0galF1ZXJ5LkRlZmVycmVkKCksXG5cdFx0XHRlbGVtZW50cyA9IHRoaXMsXG5cdFx0XHRpID0gdGhpcy5sZW5ndGgsXG5cdFx0XHRyZXNvbHZlID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGlmICggISggLS1jb3VudCApICkge1xuXHRcdFx0XHRcdGRlZmVyLnJlc29sdmVXaXRoKCBlbGVtZW50cywgWyBlbGVtZW50cyBdICk7XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cblx0XHRpZiAoIHR5cGVvZiB0eXBlICE9PSBcInN0cmluZ1wiICkge1xuXHRcdFx0b2JqID0gdHlwZTtcblx0XHRcdHR5cGUgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdHR5cGUgPSB0eXBlIHx8IFwiZnhcIjtcblxuXHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0dG1wID0gZGF0YVByaXYuZ2V0KCBlbGVtZW50c1sgaSBdLCB0eXBlICsgXCJxdWV1ZUhvb2tzXCIgKTtcblx0XHRcdGlmICggdG1wICYmIHRtcC5lbXB0eSApIHtcblx0XHRcdFx0Y291bnQrKztcblx0XHRcdFx0dG1wLmVtcHR5LmFkZCggcmVzb2x2ZSApO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXNvbHZlKCk7XG5cdFx0cmV0dXJuIGRlZmVyLnByb21pc2UoIG9iaiApO1xuXHR9XG59ICk7XG52YXIgcG51bSA9ICggL1srLV0/KD86XFxkKlxcLnwpXFxkKyg/OltlRV1bKy1dP1xcZCt8KS8gKS5zb3VyY2U7XG5cbnZhciByY3NzTnVtID0gbmV3IFJlZ0V4cCggXCJeKD86KFsrLV0pPXwpKFwiICsgcG51bSArIFwiKShbYS16JV0qKSRcIiwgXCJpXCIgKTtcblxuXG52YXIgY3NzRXhwYW5kID0gWyBcIlRvcFwiLCBcIlJpZ2h0XCIsIFwiQm90dG9tXCIsIFwiTGVmdFwiIF07XG5cbnZhciBkb2N1bWVudEVsZW1lbnQgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG5cblxuXG5cdHZhciBpc0F0dGFjaGVkID0gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4galF1ZXJ5LmNvbnRhaW5zKCBlbGVtLm93bmVyRG9jdW1lbnQsIGVsZW0gKTtcblx0XHR9LFxuXHRcdGNvbXBvc2VkID0geyBjb21wb3NlZDogdHJ1ZSB9O1xuXG5cdC8vIFN1cHBvcnQ6IElFIDkgLSAxMSssIEVkZ2UgMTIgLSAxOCssIGlPUyAxMC4wIC0gMTAuMiBvbmx5XG5cdC8vIENoZWNrIGF0dGFjaG1lbnQgYWNyb3NzIHNoYWRvdyBET00gYm91bmRhcmllcyB3aGVuIHBvc3NpYmxlIChnaC0zNTA0KVxuXHQvLyBTdXBwb3J0OiBpT1MgMTAuMC0xMC4yIG9ubHlcblx0Ly8gRWFybHkgaU9TIDEwIHZlcnNpb25zIHN1cHBvcnQgYGF0dGFjaFNoYWRvd2AgYnV0IG5vdCBgZ2V0Um9vdE5vZGVgLFxuXHQvLyBsZWFkaW5nIHRvIGVycm9ycy4gV2UgbmVlZCB0byBjaGVjayBmb3IgYGdldFJvb3ROb2RlYC5cblx0aWYgKCBkb2N1bWVudEVsZW1lbnQuZ2V0Um9vdE5vZGUgKSB7XG5cdFx0aXNBdHRhY2hlZCA9IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuIGpRdWVyeS5jb250YWlucyggZWxlbS5vd25lckRvY3VtZW50LCBlbGVtICkgfHxcblx0XHRcdFx0ZWxlbS5nZXRSb290Tm9kZSggY29tcG9zZWQgKSA9PT0gZWxlbS5vd25lckRvY3VtZW50O1xuXHRcdH07XG5cdH1cbnZhciBpc0hpZGRlbldpdGhpblRyZWUgPSBmdW5jdGlvbiggZWxlbSwgZWwgKSB7XG5cblx0XHQvLyBpc0hpZGRlbldpdGhpblRyZWUgbWlnaHQgYmUgY2FsbGVkIGZyb20galF1ZXJ5I2ZpbHRlciBmdW5jdGlvbjtcblx0XHQvLyBpbiB0aGF0IGNhc2UsIGVsZW1lbnQgd2lsbCBiZSBzZWNvbmQgYXJndW1lbnRcblx0XHRlbGVtID0gZWwgfHwgZWxlbTtcblxuXHRcdC8vIElubGluZSBzdHlsZSB0cnVtcHMgYWxsXG5cdFx0cmV0dXJuIGVsZW0uc3R5bGUuZGlzcGxheSA9PT0gXCJub25lXCIgfHxcblx0XHRcdGVsZW0uc3R5bGUuZGlzcGxheSA9PT0gXCJcIiAmJlxuXG5cdFx0XHQvLyBPdGhlcndpc2UsIGNoZWNrIGNvbXB1dGVkIHN0eWxlXG5cdFx0XHQvLyBTdXBwb3J0OiBGaXJlZm94IDw9NDMgLSA0NVxuXHRcdFx0Ly8gRGlzY29ubmVjdGVkIGVsZW1lbnRzIGNhbiBoYXZlIGNvbXB1dGVkIGRpc3BsYXk6IG5vbmUsIHNvIGZpcnN0IGNvbmZpcm0gdGhhdCBlbGVtIGlzXG5cdFx0XHQvLyBpbiB0aGUgZG9jdW1lbnQuXG5cdFx0XHRpc0F0dGFjaGVkKCBlbGVtICkgJiZcblxuXHRcdFx0alF1ZXJ5LmNzcyggZWxlbSwgXCJkaXNwbGF5XCIgKSA9PT0gXCJub25lXCI7XG5cdH07XG5cbnZhciBzd2FwID0gZnVuY3Rpb24oIGVsZW0sIG9wdGlvbnMsIGNhbGxiYWNrLCBhcmdzICkge1xuXHR2YXIgcmV0LCBuYW1lLFxuXHRcdG9sZCA9IHt9O1xuXG5cdC8vIFJlbWVtYmVyIHRoZSBvbGQgdmFsdWVzLCBhbmQgaW5zZXJ0IHRoZSBuZXcgb25lc1xuXHRmb3IgKCBuYW1lIGluIG9wdGlvbnMgKSB7XG5cdFx0b2xkWyBuYW1lIF0gPSBlbGVtLnN0eWxlWyBuYW1lIF07XG5cdFx0ZWxlbS5zdHlsZVsgbmFtZSBdID0gb3B0aW9uc1sgbmFtZSBdO1xuXHR9XG5cblx0cmV0ID0gY2FsbGJhY2suYXBwbHkoIGVsZW0sIGFyZ3MgfHwgW10gKTtcblxuXHQvLyBSZXZlcnQgdGhlIG9sZCB2YWx1ZXNcblx0Zm9yICggbmFtZSBpbiBvcHRpb25zICkge1xuXHRcdGVsZW0uc3R5bGVbIG5hbWUgXSA9IG9sZFsgbmFtZSBdO1xuXHR9XG5cblx0cmV0dXJuIHJldDtcbn07XG5cblxuXG5cbmZ1bmN0aW9uIGFkanVzdENTUyggZWxlbSwgcHJvcCwgdmFsdWVQYXJ0cywgdHdlZW4gKSB7XG5cdHZhciBhZGp1c3RlZCwgc2NhbGUsXG5cdFx0bWF4SXRlcmF0aW9ucyA9IDIwLFxuXHRcdGN1cnJlbnRWYWx1ZSA9IHR3ZWVuID9cblx0XHRcdGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRyZXR1cm4gdHdlZW4uY3VyKCk7XG5cdFx0XHR9IDpcblx0XHRcdGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRyZXR1cm4galF1ZXJ5LmNzcyggZWxlbSwgcHJvcCwgXCJcIiApO1xuXHRcdFx0fSxcblx0XHRpbml0aWFsID0gY3VycmVudFZhbHVlKCksXG5cdFx0dW5pdCA9IHZhbHVlUGFydHMgJiYgdmFsdWVQYXJ0c1sgMyBdIHx8ICggalF1ZXJ5LmNzc051bWJlclsgcHJvcCBdID8gXCJcIiA6IFwicHhcIiApLFxuXG5cdFx0Ly8gU3RhcnRpbmcgdmFsdWUgY29tcHV0YXRpb24gaXMgcmVxdWlyZWQgZm9yIHBvdGVudGlhbCB1bml0IG1pc21hdGNoZXNcblx0XHRpbml0aWFsSW5Vbml0ID0gZWxlbS5ub2RlVHlwZSAmJlxuXHRcdFx0KCBqUXVlcnkuY3NzTnVtYmVyWyBwcm9wIF0gfHwgdW5pdCAhPT0gXCJweFwiICYmICtpbml0aWFsICkgJiZcblx0XHRcdHJjc3NOdW0uZXhlYyggalF1ZXJ5LmNzcyggZWxlbSwgcHJvcCApICk7XG5cblx0aWYgKCBpbml0aWFsSW5Vbml0ICYmIGluaXRpYWxJblVuaXRbIDMgXSAhPT0gdW5pdCApIHtcblxuXHRcdC8vIFN1cHBvcnQ6IEZpcmVmb3ggPD01NFxuXHRcdC8vIEhhbHZlIHRoZSBpdGVyYXRpb24gdGFyZ2V0IHZhbHVlIHRvIHByZXZlbnQgaW50ZXJmZXJlbmNlIGZyb20gQ1NTIHVwcGVyIGJvdW5kcyAoZ2gtMjE0NClcblx0XHRpbml0aWFsID0gaW5pdGlhbCAvIDI7XG5cblx0XHQvLyBUcnVzdCB1bml0cyByZXBvcnRlZCBieSBqUXVlcnkuY3NzXG5cdFx0dW5pdCA9IHVuaXQgfHwgaW5pdGlhbEluVW5pdFsgMyBdO1xuXG5cdFx0Ly8gSXRlcmF0aXZlbHkgYXBwcm94aW1hdGUgZnJvbSBhIG5vbnplcm8gc3RhcnRpbmcgcG9pbnRcblx0XHRpbml0aWFsSW5Vbml0ID0gK2luaXRpYWwgfHwgMTtcblxuXHRcdHdoaWxlICggbWF4SXRlcmF0aW9ucy0tICkge1xuXG5cdFx0XHQvLyBFdmFsdWF0ZSBhbmQgdXBkYXRlIG91ciBiZXN0IGd1ZXNzIChkb3VibGluZyBndWVzc2VzIHRoYXQgemVybyBvdXQpLlxuXHRcdFx0Ly8gRmluaXNoIGlmIHRoZSBzY2FsZSBlcXVhbHMgb3IgY3Jvc3NlcyAxIChtYWtpbmcgdGhlIG9sZCpuZXcgcHJvZHVjdCBub24tcG9zaXRpdmUpLlxuXHRcdFx0alF1ZXJ5LnN0eWxlKCBlbGVtLCBwcm9wLCBpbml0aWFsSW5Vbml0ICsgdW5pdCApO1xuXHRcdFx0aWYgKCAoIDEgLSBzY2FsZSApICogKCAxIC0gKCBzY2FsZSA9IGN1cnJlbnRWYWx1ZSgpIC8gaW5pdGlhbCB8fCAwLjUgKSApIDw9IDAgKSB7XG5cdFx0XHRcdG1heEl0ZXJhdGlvbnMgPSAwO1xuXHRcdFx0fVxuXHRcdFx0aW5pdGlhbEluVW5pdCA9IGluaXRpYWxJblVuaXQgLyBzY2FsZTtcblxuXHRcdH1cblxuXHRcdGluaXRpYWxJblVuaXQgPSBpbml0aWFsSW5Vbml0ICogMjtcblx0XHRqUXVlcnkuc3R5bGUoIGVsZW0sIHByb3AsIGluaXRpYWxJblVuaXQgKyB1bml0ICk7XG5cblx0XHQvLyBNYWtlIHN1cmUgd2UgdXBkYXRlIHRoZSB0d2VlbiBwcm9wZXJ0aWVzIGxhdGVyIG9uXG5cdFx0dmFsdWVQYXJ0cyA9IHZhbHVlUGFydHMgfHwgW107XG5cdH1cblxuXHRpZiAoIHZhbHVlUGFydHMgKSB7XG5cdFx0aW5pdGlhbEluVW5pdCA9ICtpbml0aWFsSW5Vbml0IHx8ICtpbml0aWFsIHx8IDA7XG5cblx0XHQvLyBBcHBseSByZWxhdGl2ZSBvZmZzZXQgKCs9Ly09KSBpZiBzcGVjaWZpZWRcblx0XHRhZGp1c3RlZCA9IHZhbHVlUGFydHNbIDEgXSA/XG5cdFx0XHRpbml0aWFsSW5Vbml0ICsgKCB2YWx1ZVBhcnRzWyAxIF0gKyAxICkgKiB2YWx1ZVBhcnRzWyAyIF0gOlxuXHRcdFx0K3ZhbHVlUGFydHNbIDIgXTtcblx0XHRpZiAoIHR3ZWVuICkge1xuXHRcdFx0dHdlZW4udW5pdCA9IHVuaXQ7XG5cdFx0XHR0d2Vlbi5zdGFydCA9IGluaXRpYWxJblVuaXQ7XG5cdFx0XHR0d2Vlbi5lbmQgPSBhZGp1c3RlZDtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGFkanVzdGVkO1xufVxuXG5cbnZhciBkZWZhdWx0RGlzcGxheU1hcCA9IHt9O1xuXG5mdW5jdGlvbiBnZXREZWZhdWx0RGlzcGxheSggZWxlbSApIHtcblx0dmFyIHRlbXAsXG5cdFx0ZG9jID0gZWxlbS5vd25lckRvY3VtZW50LFxuXHRcdG5vZGVOYW1lID0gZWxlbS5ub2RlTmFtZSxcblx0XHRkaXNwbGF5ID0gZGVmYXVsdERpc3BsYXlNYXBbIG5vZGVOYW1lIF07XG5cblx0aWYgKCBkaXNwbGF5ICkge1xuXHRcdHJldHVybiBkaXNwbGF5O1xuXHR9XG5cblx0dGVtcCA9IGRvYy5ib2R5LmFwcGVuZENoaWxkKCBkb2MuY3JlYXRlRWxlbWVudCggbm9kZU5hbWUgKSApO1xuXHRkaXNwbGF5ID0galF1ZXJ5LmNzcyggdGVtcCwgXCJkaXNwbGF5XCIgKTtcblxuXHR0ZW1wLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoIHRlbXAgKTtcblxuXHRpZiAoIGRpc3BsYXkgPT09IFwibm9uZVwiICkge1xuXHRcdGRpc3BsYXkgPSBcImJsb2NrXCI7XG5cdH1cblx0ZGVmYXVsdERpc3BsYXlNYXBbIG5vZGVOYW1lIF0gPSBkaXNwbGF5O1xuXG5cdHJldHVybiBkaXNwbGF5O1xufVxuXG5mdW5jdGlvbiBzaG93SGlkZSggZWxlbWVudHMsIHNob3cgKSB7XG5cdHZhciBkaXNwbGF5LCBlbGVtLFxuXHRcdHZhbHVlcyA9IFtdLFxuXHRcdGluZGV4ID0gMCxcblx0XHRsZW5ndGggPSBlbGVtZW50cy5sZW5ndGg7XG5cblx0Ly8gRGV0ZXJtaW5lIG5ldyBkaXNwbGF5IHZhbHVlIGZvciBlbGVtZW50cyB0aGF0IG5lZWQgdG8gY2hhbmdlXG5cdGZvciAoIDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KysgKSB7XG5cdFx0ZWxlbSA9IGVsZW1lbnRzWyBpbmRleCBdO1xuXHRcdGlmICggIWVsZW0uc3R5bGUgKSB7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cblx0XHRkaXNwbGF5ID0gZWxlbS5zdHlsZS5kaXNwbGF5O1xuXHRcdGlmICggc2hvdyApIHtcblxuXHRcdFx0Ly8gU2luY2Ugd2UgZm9yY2UgdmlzaWJpbGl0eSB1cG9uIGNhc2NhZGUtaGlkZGVuIGVsZW1lbnRzLCBhbiBpbW1lZGlhdGUgKGFuZCBzbG93KVxuXHRcdFx0Ly8gY2hlY2sgaXMgcmVxdWlyZWQgaW4gdGhpcyBmaXJzdCBsb29wIHVubGVzcyB3ZSBoYXZlIGEgbm9uZW1wdHkgZGlzcGxheSB2YWx1ZSAoZWl0aGVyXG5cdFx0XHQvLyBpbmxpbmUgb3IgYWJvdXQtdG8tYmUtcmVzdG9yZWQpXG5cdFx0XHRpZiAoIGRpc3BsYXkgPT09IFwibm9uZVwiICkge1xuXHRcdFx0XHR2YWx1ZXNbIGluZGV4IF0gPSBkYXRhUHJpdi5nZXQoIGVsZW0sIFwiZGlzcGxheVwiICkgfHwgbnVsbDtcblx0XHRcdFx0aWYgKCAhdmFsdWVzWyBpbmRleCBdICkge1xuXHRcdFx0XHRcdGVsZW0uc3R5bGUuZGlzcGxheSA9IFwiXCI7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmICggZWxlbS5zdHlsZS5kaXNwbGF5ID09PSBcIlwiICYmIGlzSGlkZGVuV2l0aGluVHJlZSggZWxlbSApICkge1xuXHRcdFx0XHR2YWx1ZXNbIGluZGV4IF0gPSBnZXREZWZhdWx0RGlzcGxheSggZWxlbSApO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRpZiAoIGRpc3BsYXkgIT09IFwibm9uZVwiICkge1xuXHRcdFx0XHR2YWx1ZXNbIGluZGV4IF0gPSBcIm5vbmVcIjtcblxuXHRcdFx0XHQvLyBSZW1lbWJlciB3aGF0IHdlJ3JlIG92ZXJ3cml0aW5nXG5cdFx0XHRcdGRhdGFQcml2LnNldCggZWxlbSwgXCJkaXNwbGF5XCIsIGRpc3BsYXkgKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBTZXQgdGhlIGRpc3BsYXkgb2YgdGhlIGVsZW1lbnRzIGluIGEgc2Vjb25kIGxvb3AgdG8gYXZvaWQgY29uc3RhbnQgcmVmbG93XG5cdGZvciAoIGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KysgKSB7XG5cdFx0aWYgKCB2YWx1ZXNbIGluZGV4IF0gIT0gbnVsbCApIHtcblx0XHRcdGVsZW1lbnRzWyBpbmRleCBdLnN0eWxlLmRpc3BsYXkgPSB2YWx1ZXNbIGluZGV4IF07XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGVsZW1lbnRzO1xufVxuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdHNob3c6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBzaG93SGlkZSggdGhpcywgdHJ1ZSApO1xuXHR9LFxuXHRoaWRlOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gc2hvd0hpZGUoIHRoaXMgKTtcblx0fSxcblx0dG9nZ2xlOiBmdW5jdGlvbiggc3RhdGUgKSB7XG5cdFx0aWYgKCB0eXBlb2Ygc3RhdGUgPT09IFwiYm9vbGVhblwiICkge1xuXHRcdFx0cmV0dXJuIHN0YXRlID8gdGhpcy5zaG93KCkgOiB0aGlzLmhpZGUoKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdGlmICggaXNIaWRkZW5XaXRoaW5UcmVlKCB0aGlzICkgKSB7XG5cdFx0XHRcdGpRdWVyeSggdGhpcyApLnNob3coKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGpRdWVyeSggdGhpcyApLmhpZGUoKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH1cbn0gKTtcbnZhciByY2hlY2thYmxlVHlwZSA9ICggL14oPzpjaGVja2JveHxyYWRpbykkL2kgKTtcblxudmFyIHJ0YWdOYW1lID0gKCAvPChbYS16XVteXFwvXFwwPlxceDIwXFx0XFxyXFxuXFxmXSopL2kgKTtcblxudmFyIHJzY3JpcHRUeXBlID0gKCAvXiR8Xm1vZHVsZSR8XFwvKD86amF2YXxlY21hKXNjcmlwdC9pICk7XG5cblxuXG4vLyBXZSBoYXZlIHRvIGNsb3NlIHRoZXNlIHRhZ3MgdG8gc3VwcG9ydCBYSFRNTCAoIzEzMjAwKVxudmFyIHdyYXBNYXAgPSB7XG5cblx0Ly8gU3VwcG9ydDogSUUgPD05IG9ubHlcblx0b3B0aW9uOiBbIDEsIFwiPHNlbGVjdCBtdWx0aXBsZT0nbXVsdGlwbGUnPlwiLCBcIjwvc2VsZWN0PlwiIF0sXG5cblx0Ly8gWEhUTUwgcGFyc2VycyBkbyBub3QgbWFnaWNhbGx5IGluc2VydCBlbGVtZW50cyBpbiB0aGVcblx0Ly8gc2FtZSB3YXkgdGhhdCB0YWcgc291cCBwYXJzZXJzIGRvLiBTbyB3ZSBjYW5ub3Qgc2hvcnRlblxuXHQvLyB0aGlzIGJ5IG9taXR0aW5nIDx0Ym9keT4gb3Igb3RoZXIgcmVxdWlyZWQgZWxlbWVudHMuXG5cdHRoZWFkOiBbIDEsIFwiPHRhYmxlPlwiLCBcIjwvdGFibGU+XCIgXSxcblx0Y29sOiBbIDIsIFwiPHRhYmxlPjxjb2xncm91cD5cIiwgXCI8L2NvbGdyb3VwPjwvdGFibGU+XCIgXSxcblx0dHI6IFsgMiwgXCI8dGFibGU+PHRib2R5PlwiLCBcIjwvdGJvZHk+PC90YWJsZT5cIiBdLFxuXHR0ZDogWyAzLCBcIjx0YWJsZT48dGJvZHk+PHRyPlwiLCBcIjwvdHI+PC90Ym9keT48L3RhYmxlPlwiIF0sXG5cblx0X2RlZmF1bHQ6IFsgMCwgXCJcIiwgXCJcIiBdXG59O1xuXG4vLyBTdXBwb3J0OiBJRSA8PTkgb25seVxud3JhcE1hcC5vcHRncm91cCA9IHdyYXBNYXAub3B0aW9uO1xuXG53cmFwTWFwLnRib2R5ID0gd3JhcE1hcC50Zm9vdCA9IHdyYXBNYXAuY29sZ3JvdXAgPSB3cmFwTWFwLmNhcHRpb24gPSB3cmFwTWFwLnRoZWFkO1xud3JhcE1hcC50aCA9IHdyYXBNYXAudGQ7XG5cblxuZnVuY3Rpb24gZ2V0QWxsKCBjb250ZXh0LCB0YWcgKSB7XG5cblx0Ly8gU3VwcG9ydDogSUUgPD05IC0gMTEgb25seVxuXHQvLyBVc2UgdHlwZW9mIHRvIGF2b2lkIHplcm8tYXJndW1lbnQgbWV0aG9kIGludm9jYXRpb24gb24gaG9zdCBvYmplY3RzICgjMTUxNTEpXG5cdHZhciByZXQ7XG5cblx0aWYgKCB0eXBlb2YgY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSAhPT0gXCJ1bmRlZmluZWRcIiApIHtcblx0XHRyZXQgPSBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lKCB0YWcgfHwgXCIqXCIgKTtcblxuXHR9IGVsc2UgaWYgKCB0eXBlb2YgY29udGV4dC5xdWVyeVNlbGVjdG9yQWxsICE9PSBcInVuZGVmaW5lZFwiICkge1xuXHRcdHJldCA9IGNvbnRleHQucXVlcnlTZWxlY3RvckFsbCggdGFnIHx8IFwiKlwiICk7XG5cblx0fSBlbHNlIHtcblx0XHRyZXQgPSBbXTtcblx0fVxuXG5cdGlmICggdGFnID09PSB1bmRlZmluZWQgfHwgdGFnICYmIG5vZGVOYW1lKCBjb250ZXh0LCB0YWcgKSApIHtcblx0XHRyZXR1cm4galF1ZXJ5Lm1lcmdlKCBbIGNvbnRleHQgXSwgcmV0ICk7XG5cdH1cblxuXHRyZXR1cm4gcmV0O1xufVxuXG5cbi8vIE1hcmsgc2NyaXB0cyBhcyBoYXZpbmcgYWxyZWFkeSBiZWVuIGV2YWx1YXRlZFxuZnVuY3Rpb24gc2V0R2xvYmFsRXZhbCggZWxlbXMsIHJlZkVsZW1lbnRzICkge1xuXHR2YXIgaSA9IDAsXG5cdFx0bCA9IGVsZW1zLmxlbmd0aDtcblxuXHRmb3IgKCA7IGkgPCBsOyBpKysgKSB7XG5cdFx0ZGF0YVByaXYuc2V0KFxuXHRcdFx0ZWxlbXNbIGkgXSxcblx0XHRcdFwiZ2xvYmFsRXZhbFwiLFxuXHRcdFx0IXJlZkVsZW1lbnRzIHx8IGRhdGFQcml2LmdldCggcmVmRWxlbWVudHNbIGkgXSwgXCJnbG9iYWxFdmFsXCIgKVxuXHRcdCk7XG5cdH1cbn1cblxuXG52YXIgcmh0bWwgPSAvPHwmIz9cXHcrOy87XG5cbmZ1bmN0aW9uIGJ1aWxkRnJhZ21lbnQoIGVsZW1zLCBjb250ZXh0LCBzY3JpcHRzLCBzZWxlY3Rpb24sIGlnbm9yZWQgKSB7XG5cdHZhciBlbGVtLCB0bXAsIHRhZywgd3JhcCwgYXR0YWNoZWQsIGosXG5cdFx0ZnJhZ21lbnQgPSBjb250ZXh0LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxcblx0XHRub2RlcyA9IFtdLFxuXHRcdGkgPSAwLFxuXHRcdGwgPSBlbGVtcy5sZW5ndGg7XG5cblx0Zm9yICggOyBpIDwgbDsgaSsrICkge1xuXHRcdGVsZW0gPSBlbGVtc1sgaSBdO1xuXG5cdFx0aWYgKCBlbGVtIHx8IGVsZW0gPT09IDAgKSB7XG5cblx0XHRcdC8vIEFkZCBub2RlcyBkaXJlY3RseVxuXHRcdFx0aWYgKCB0b1R5cGUoIGVsZW0gKSA9PT0gXCJvYmplY3RcIiApIHtcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBBbmRyb2lkIDw9NC4wIG9ubHksIFBoYW50b21KUyAxIG9ubHlcblx0XHRcdFx0Ly8gcHVzaC5hcHBseShfLCBhcnJheWxpa2UpIHRocm93cyBvbiBhbmNpZW50IFdlYktpdFxuXHRcdFx0XHRqUXVlcnkubWVyZ2UoIG5vZGVzLCBlbGVtLm5vZGVUeXBlID8gWyBlbGVtIF0gOiBlbGVtICk7XG5cblx0XHRcdC8vIENvbnZlcnQgbm9uLWh0bWwgaW50byBhIHRleHQgbm9kZVxuXHRcdFx0fSBlbHNlIGlmICggIXJodG1sLnRlc3QoIGVsZW0gKSApIHtcblx0XHRcdFx0bm9kZXMucHVzaCggY29udGV4dC5jcmVhdGVUZXh0Tm9kZSggZWxlbSApICk7XG5cblx0XHRcdC8vIENvbnZlcnQgaHRtbCBpbnRvIERPTSBub2Rlc1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dG1wID0gdG1wIHx8IGZyYWdtZW50LmFwcGVuZENoaWxkKCBjb250ZXh0LmNyZWF0ZUVsZW1lbnQoIFwiZGl2XCIgKSApO1xuXG5cdFx0XHRcdC8vIERlc2VyaWFsaXplIGEgc3RhbmRhcmQgcmVwcmVzZW50YXRpb25cblx0XHRcdFx0dGFnID0gKCBydGFnTmFtZS5leGVjKCBlbGVtICkgfHwgWyBcIlwiLCBcIlwiIF0gKVsgMSBdLnRvTG93ZXJDYXNlKCk7XG5cdFx0XHRcdHdyYXAgPSB3cmFwTWFwWyB0YWcgXSB8fCB3cmFwTWFwLl9kZWZhdWx0O1xuXHRcdFx0XHR0bXAuaW5uZXJIVE1MID0gd3JhcFsgMSBdICsgalF1ZXJ5Lmh0bWxQcmVmaWx0ZXIoIGVsZW0gKSArIHdyYXBbIDIgXTtcblxuXHRcdFx0XHQvLyBEZXNjZW5kIHRocm91Z2ggd3JhcHBlcnMgdG8gdGhlIHJpZ2h0IGNvbnRlbnRcblx0XHRcdFx0aiA9IHdyYXBbIDAgXTtcblx0XHRcdFx0d2hpbGUgKCBqLS0gKSB7XG5cdFx0XHRcdFx0dG1wID0gdG1wLmxhc3RDaGlsZDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQgPD00LjAgb25seSwgUGhhbnRvbUpTIDEgb25seVxuXHRcdFx0XHQvLyBwdXNoLmFwcGx5KF8sIGFycmF5bGlrZSkgdGhyb3dzIG9uIGFuY2llbnQgV2ViS2l0XG5cdFx0XHRcdGpRdWVyeS5tZXJnZSggbm9kZXMsIHRtcC5jaGlsZE5vZGVzICk7XG5cblx0XHRcdFx0Ly8gUmVtZW1iZXIgdGhlIHRvcC1sZXZlbCBjb250YWluZXJcblx0XHRcdFx0dG1wID0gZnJhZ21lbnQuZmlyc3RDaGlsZDtcblxuXHRcdFx0XHQvLyBFbnN1cmUgdGhlIGNyZWF0ZWQgbm9kZXMgYXJlIG9ycGhhbmVkICgjMTIzOTIpXG5cdFx0XHRcdHRtcC50ZXh0Q29udGVudCA9IFwiXCI7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gUmVtb3ZlIHdyYXBwZXIgZnJvbSBmcmFnbWVudFxuXHRmcmFnbWVudC50ZXh0Q29udGVudCA9IFwiXCI7XG5cblx0aSA9IDA7XG5cdHdoaWxlICggKCBlbGVtID0gbm9kZXNbIGkrKyBdICkgKSB7XG5cblx0XHQvLyBTa2lwIGVsZW1lbnRzIGFscmVhZHkgaW4gdGhlIGNvbnRleHQgY29sbGVjdGlvbiAodHJhYy00MDg3KVxuXHRcdGlmICggc2VsZWN0aW9uICYmIGpRdWVyeS5pbkFycmF5KCBlbGVtLCBzZWxlY3Rpb24gKSA+IC0xICkge1xuXHRcdFx0aWYgKCBpZ25vcmVkICkge1xuXHRcdFx0XHRpZ25vcmVkLnB1c2goIGVsZW0gKTtcblx0XHRcdH1cblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdGF0dGFjaGVkID0gaXNBdHRhY2hlZCggZWxlbSApO1xuXG5cdFx0Ly8gQXBwZW5kIHRvIGZyYWdtZW50XG5cdFx0dG1wID0gZ2V0QWxsKCBmcmFnbWVudC5hcHBlbmRDaGlsZCggZWxlbSApLCBcInNjcmlwdFwiICk7XG5cblx0XHQvLyBQcmVzZXJ2ZSBzY3JpcHQgZXZhbHVhdGlvbiBoaXN0b3J5XG5cdFx0aWYgKCBhdHRhY2hlZCApIHtcblx0XHRcdHNldEdsb2JhbEV2YWwoIHRtcCApO1xuXHRcdH1cblxuXHRcdC8vIENhcHR1cmUgZXhlY3V0YWJsZXNcblx0XHRpZiAoIHNjcmlwdHMgKSB7XG5cdFx0XHRqID0gMDtcblx0XHRcdHdoaWxlICggKCBlbGVtID0gdG1wWyBqKysgXSApICkge1xuXHRcdFx0XHRpZiAoIHJzY3JpcHRUeXBlLnRlc3QoIGVsZW0udHlwZSB8fCBcIlwiICkgKSB7XG5cdFx0XHRcdFx0c2NyaXB0cy5wdXNoKCBlbGVtICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gZnJhZ21lbnQ7XG59XG5cblxuKCBmdW5jdGlvbigpIHtcblx0dmFyIGZyYWdtZW50ID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLFxuXHRcdGRpdiA9IGZyYWdtZW50LmFwcGVuZENoaWxkKCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImRpdlwiICkgKSxcblx0XHRpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiaW5wdXRcIiApO1xuXG5cdC8vIFN1cHBvcnQ6IEFuZHJvaWQgNC4wIC0gNC4zIG9ubHlcblx0Ly8gQ2hlY2sgc3RhdGUgbG9zdCBpZiB0aGUgbmFtZSBpcyBzZXQgKCMxMTIxNylcblx0Ly8gU3VwcG9ydDogV2luZG93cyBXZWIgQXBwcyAoV1dBKVxuXHQvLyBgbmFtZWAgYW5kIGB0eXBlYCBtdXN0IHVzZSAuc2V0QXR0cmlidXRlIGZvciBXV0EgKCMxNDkwMSlcblx0aW5wdXQuc2V0QXR0cmlidXRlKCBcInR5cGVcIiwgXCJyYWRpb1wiICk7XG5cdGlucHV0LnNldEF0dHJpYnV0ZSggXCJjaGVja2VkXCIsIFwiY2hlY2tlZFwiICk7XG5cdGlucHV0LnNldEF0dHJpYnV0ZSggXCJuYW1lXCIsIFwidFwiICk7XG5cblx0ZGl2LmFwcGVuZENoaWxkKCBpbnB1dCApO1xuXG5cdC8vIFN1cHBvcnQ6IEFuZHJvaWQgPD00LjEgb25seVxuXHQvLyBPbGRlciBXZWJLaXQgZG9lc24ndCBjbG9uZSBjaGVja2VkIHN0YXRlIGNvcnJlY3RseSBpbiBmcmFnbWVudHNcblx0c3VwcG9ydC5jaGVja0Nsb25lID0gZGl2LmNsb25lTm9kZSggdHJ1ZSApLmNsb25lTm9kZSggdHJ1ZSApLmxhc3RDaGlsZC5jaGVja2VkO1xuXG5cdC8vIFN1cHBvcnQ6IElFIDw9MTEgb25seVxuXHQvLyBNYWtlIHN1cmUgdGV4dGFyZWEgKGFuZCBjaGVja2JveCkgZGVmYXVsdFZhbHVlIGlzIHByb3Blcmx5IGNsb25lZFxuXHRkaXYuaW5uZXJIVE1MID0gXCI8dGV4dGFyZWE+eDwvdGV4dGFyZWE+XCI7XG5cdHN1cHBvcnQubm9DbG9uZUNoZWNrZWQgPSAhIWRpdi5jbG9uZU5vZGUoIHRydWUgKS5sYXN0Q2hpbGQuZGVmYXVsdFZhbHVlO1xufSApKCk7XG5cblxudmFyXG5cdHJrZXlFdmVudCA9IC9ea2V5Lyxcblx0cm1vdXNlRXZlbnQgPSAvXig/Om1vdXNlfHBvaW50ZXJ8Y29udGV4dG1lbnV8ZHJhZ3xkcm9wKXxjbGljay8sXG5cdHJ0eXBlbmFtZXNwYWNlID0gL14oW14uXSopKD86XFwuKC4rKXwpLztcblxuZnVuY3Rpb24gcmV0dXJuVHJ1ZSgpIHtcblx0cmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIHJldHVybkZhbHNlKCkge1xuXHRyZXR1cm4gZmFsc2U7XG59XG5cbi8vIFN1cHBvcnQ6IElFIDw9OSAtIDExK1xuLy8gZm9jdXMoKSBhbmQgYmx1cigpIGFyZSBhc3luY2hyb25vdXMsIGV4Y2VwdCB3aGVuIHRoZXkgYXJlIG5vLW9wLlxuLy8gU28gZXhwZWN0IGZvY3VzIHRvIGJlIHN5bmNocm9ub3VzIHdoZW4gdGhlIGVsZW1lbnQgaXMgYWxyZWFkeSBhY3RpdmUsXG4vLyBhbmQgYmx1ciB0byBiZSBzeW5jaHJvbm91cyB3aGVuIHRoZSBlbGVtZW50IGlzIG5vdCBhbHJlYWR5IGFjdGl2ZS5cbi8vIChmb2N1cyBhbmQgYmx1ciBhcmUgYWx3YXlzIHN5bmNocm9ub3VzIGluIG90aGVyIHN1cHBvcnRlZCBicm93c2Vycyxcbi8vIHRoaXMganVzdCBkZWZpbmVzIHdoZW4gd2UgY2FuIGNvdW50IG9uIGl0KS5cbmZ1bmN0aW9uIGV4cGVjdFN5bmMoIGVsZW0sIHR5cGUgKSB7XG5cdHJldHVybiAoIGVsZW0gPT09IHNhZmVBY3RpdmVFbGVtZW50KCkgKSA9PT0gKCB0eXBlID09PSBcImZvY3VzXCIgKTtcbn1cblxuLy8gU3VwcG9ydDogSUUgPD05IG9ubHlcbi8vIEFjY2Vzc2luZyBkb2N1bWVudC5hY3RpdmVFbGVtZW50IGNhbiB0aHJvdyB1bmV4cGVjdGVkbHlcbi8vIGh0dHBzOi8vYnVncy5qcXVlcnkuY29tL3RpY2tldC8xMzM5M1xuZnVuY3Rpb24gc2FmZUFjdGl2ZUVsZW1lbnQoKSB7XG5cdHRyeSB7XG5cdFx0cmV0dXJuIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XG5cdH0gY2F0Y2ggKCBlcnIgKSB7IH1cbn1cblxuZnVuY3Rpb24gb24oIGVsZW0sIHR5cGVzLCBzZWxlY3RvciwgZGF0YSwgZm4sIG9uZSApIHtcblx0dmFyIG9yaWdGbiwgdHlwZTtcblxuXHQvLyBUeXBlcyBjYW4gYmUgYSBtYXAgb2YgdHlwZXMvaGFuZGxlcnNcblx0aWYgKCB0eXBlb2YgdHlwZXMgPT09IFwib2JqZWN0XCIgKSB7XG5cblx0XHQvLyAoIHR5cGVzLU9iamVjdCwgc2VsZWN0b3IsIGRhdGEgKVxuXHRcdGlmICggdHlwZW9mIHNlbGVjdG9yICE9PSBcInN0cmluZ1wiICkge1xuXG5cdFx0XHQvLyAoIHR5cGVzLU9iamVjdCwgZGF0YSApXG5cdFx0XHRkYXRhID0gZGF0YSB8fCBzZWxlY3Rvcjtcblx0XHRcdHNlbGVjdG9yID0gdW5kZWZpbmVkO1xuXHRcdH1cblx0XHRmb3IgKCB0eXBlIGluIHR5cGVzICkge1xuXHRcdFx0b24oIGVsZW0sIHR5cGUsIHNlbGVjdG9yLCBkYXRhLCB0eXBlc1sgdHlwZSBdLCBvbmUgKTtcblx0XHR9XG5cdFx0cmV0dXJuIGVsZW07XG5cdH1cblxuXHRpZiAoIGRhdGEgPT0gbnVsbCAmJiBmbiA9PSBudWxsICkge1xuXG5cdFx0Ly8gKCB0eXBlcywgZm4gKVxuXHRcdGZuID0gc2VsZWN0b3I7XG5cdFx0ZGF0YSA9IHNlbGVjdG9yID0gdW5kZWZpbmVkO1xuXHR9IGVsc2UgaWYgKCBmbiA9PSBudWxsICkge1xuXHRcdGlmICggdHlwZW9mIHNlbGVjdG9yID09PSBcInN0cmluZ1wiICkge1xuXG5cdFx0XHQvLyAoIHR5cGVzLCBzZWxlY3RvciwgZm4gKVxuXHRcdFx0Zm4gPSBkYXRhO1xuXHRcdFx0ZGF0YSA9IHVuZGVmaW5lZDtcblx0XHR9IGVsc2Uge1xuXG5cdFx0XHQvLyAoIHR5cGVzLCBkYXRhLCBmbiApXG5cdFx0XHRmbiA9IGRhdGE7XG5cdFx0XHRkYXRhID0gc2VsZWN0b3I7XG5cdFx0XHRzZWxlY3RvciA9IHVuZGVmaW5lZDtcblx0XHR9XG5cdH1cblx0aWYgKCBmbiA9PT0gZmFsc2UgKSB7XG5cdFx0Zm4gPSByZXR1cm5GYWxzZTtcblx0fSBlbHNlIGlmICggIWZuICkge1xuXHRcdHJldHVybiBlbGVtO1xuXHR9XG5cblx0aWYgKCBvbmUgPT09IDEgKSB7XG5cdFx0b3JpZ0ZuID0gZm47XG5cdFx0Zm4gPSBmdW5jdGlvbiggZXZlbnQgKSB7XG5cblx0XHRcdC8vIENhbiB1c2UgYW4gZW1wdHkgc2V0LCBzaW5jZSBldmVudCBjb250YWlucyB0aGUgaW5mb1xuXHRcdFx0alF1ZXJ5KCkub2ZmKCBldmVudCApO1xuXHRcdFx0cmV0dXJuIG9yaWdGbi5hcHBseSggdGhpcywgYXJndW1lbnRzICk7XG5cdFx0fTtcblxuXHRcdC8vIFVzZSBzYW1lIGd1aWQgc28gY2FsbGVyIGNhbiByZW1vdmUgdXNpbmcgb3JpZ0ZuXG5cdFx0Zm4uZ3VpZCA9IG9yaWdGbi5ndWlkIHx8ICggb3JpZ0ZuLmd1aWQgPSBqUXVlcnkuZ3VpZCsrICk7XG5cdH1cblx0cmV0dXJuIGVsZW0uZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0alF1ZXJ5LmV2ZW50LmFkZCggdGhpcywgdHlwZXMsIGZuLCBkYXRhLCBzZWxlY3RvciApO1xuXHR9ICk7XG59XG5cbi8qXG4gKiBIZWxwZXIgZnVuY3Rpb25zIGZvciBtYW5hZ2luZyBldmVudHMgLS0gbm90IHBhcnQgb2YgdGhlIHB1YmxpYyBpbnRlcmZhY2UuXG4gKiBQcm9wcyB0byBEZWFuIEVkd2FyZHMnIGFkZEV2ZW50IGxpYnJhcnkgZm9yIG1hbnkgb2YgdGhlIGlkZWFzLlxuICovXG5qUXVlcnkuZXZlbnQgPSB7XG5cblx0Z2xvYmFsOiB7fSxcblxuXHRhZGQ6IGZ1bmN0aW9uKCBlbGVtLCB0eXBlcywgaGFuZGxlciwgZGF0YSwgc2VsZWN0b3IgKSB7XG5cblx0XHR2YXIgaGFuZGxlT2JqSW4sIGV2ZW50SGFuZGxlLCB0bXAsXG5cdFx0XHRldmVudHMsIHQsIGhhbmRsZU9iaixcblx0XHRcdHNwZWNpYWwsIGhhbmRsZXJzLCB0eXBlLCBuYW1lc3BhY2VzLCBvcmlnVHlwZSxcblx0XHRcdGVsZW1EYXRhID0gZGF0YVByaXYuZ2V0KCBlbGVtICk7XG5cblx0XHQvLyBEb24ndCBhdHRhY2ggZXZlbnRzIHRvIG5vRGF0YSBvciB0ZXh0L2NvbW1lbnQgbm9kZXMgKGJ1dCBhbGxvdyBwbGFpbiBvYmplY3RzKVxuXHRcdGlmICggIWVsZW1EYXRhICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIENhbGxlciBjYW4gcGFzcyBpbiBhbiBvYmplY3Qgb2YgY3VzdG9tIGRhdGEgaW4gbGlldSBvZiB0aGUgaGFuZGxlclxuXHRcdGlmICggaGFuZGxlci5oYW5kbGVyICkge1xuXHRcdFx0aGFuZGxlT2JqSW4gPSBoYW5kbGVyO1xuXHRcdFx0aGFuZGxlciA9IGhhbmRsZU9iakluLmhhbmRsZXI7XG5cdFx0XHRzZWxlY3RvciA9IGhhbmRsZU9iakluLnNlbGVjdG9yO1xuXHRcdH1cblxuXHRcdC8vIEVuc3VyZSB0aGF0IGludmFsaWQgc2VsZWN0b3JzIHRocm93IGV4Y2VwdGlvbnMgYXQgYXR0YWNoIHRpbWVcblx0XHQvLyBFdmFsdWF0ZSBhZ2FpbnN0IGRvY3VtZW50RWxlbWVudCBpbiBjYXNlIGVsZW0gaXMgYSBub24tZWxlbWVudCBub2RlIChlLmcuLCBkb2N1bWVudClcblx0XHRpZiAoIHNlbGVjdG9yICkge1xuXHRcdFx0alF1ZXJ5LmZpbmQubWF0Y2hlc1NlbGVjdG9yKCBkb2N1bWVudEVsZW1lbnQsIHNlbGVjdG9yICk7XG5cdFx0fVxuXG5cdFx0Ly8gTWFrZSBzdXJlIHRoYXQgdGhlIGhhbmRsZXIgaGFzIGEgdW5pcXVlIElELCB1c2VkIHRvIGZpbmQvcmVtb3ZlIGl0IGxhdGVyXG5cdFx0aWYgKCAhaGFuZGxlci5ndWlkICkge1xuXHRcdFx0aGFuZGxlci5ndWlkID0galF1ZXJ5Lmd1aWQrKztcblx0XHR9XG5cblx0XHQvLyBJbml0IHRoZSBlbGVtZW50J3MgZXZlbnQgc3RydWN0dXJlIGFuZCBtYWluIGhhbmRsZXIsIGlmIHRoaXMgaXMgdGhlIGZpcnN0XG5cdFx0aWYgKCAhKCBldmVudHMgPSBlbGVtRGF0YS5ldmVudHMgKSApIHtcblx0XHRcdGV2ZW50cyA9IGVsZW1EYXRhLmV2ZW50cyA9IHt9O1xuXHRcdH1cblx0XHRpZiAoICEoIGV2ZW50SGFuZGxlID0gZWxlbURhdGEuaGFuZGxlICkgKSB7XG5cdFx0XHRldmVudEhhbmRsZSA9IGVsZW1EYXRhLmhhbmRsZSA9IGZ1bmN0aW9uKCBlICkge1xuXG5cdFx0XHRcdC8vIERpc2NhcmQgdGhlIHNlY29uZCBldmVudCBvZiBhIGpRdWVyeS5ldmVudC50cmlnZ2VyKCkgYW5kXG5cdFx0XHRcdC8vIHdoZW4gYW4gZXZlbnQgaXMgY2FsbGVkIGFmdGVyIGEgcGFnZSBoYXMgdW5sb2FkZWRcblx0XHRcdFx0cmV0dXJuIHR5cGVvZiBqUXVlcnkgIT09IFwidW5kZWZpbmVkXCIgJiYgalF1ZXJ5LmV2ZW50LnRyaWdnZXJlZCAhPT0gZS50eXBlID9cblx0XHRcdFx0XHRqUXVlcnkuZXZlbnQuZGlzcGF0Y2guYXBwbHkoIGVsZW0sIGFyZ3VtZW50cyApIDogdW5kZWZpbmVkO1xuXHRcdFx0fTtcblx0XHR9XG5cblx0XHQvLyBIYW5kbGUgbXVsdGlwbGUgZXZlbnRzIHNlcGFyYXRlZCBieSBhIHNwYWNlXG5cdFx0dHlwZXMgPSAoIHR5cGVzIHx8IFwiXCIgKS5tYXRjaCggcm5vdGh0bWx3aGl0ZSApIHx8IFsgXCJcIiBdO1xuXHRcdHQgPSB0eXBlcy5sZW5ndGg7XG5cdFx0d2hpbGUgKCB0LS0gKSB7XG5cdFx0XHR0bXAgPSBydHlwZW5hbWVzcGFjZS5leGVjKCB0eXBlc1sgdCBdICkgfHwgW107XG5cdFx0XHR0eXBlID0gb3JpZ1R5cGUgPSB0bXBbIDEgXTtcblx0XHRcdG5hbWVzcGFjZXMgPSAoIHRtcFsgMiBdIHx8IFwiXCIgKS5zcGxpdCggXCIuXCIgKS5zb3J0KCk7XG5cblx0XHRcdC8vIFRoZXJlICptdXN0KiBiZSBhIHR5cGUsIG5vIGF0dGFjaGluZyBuYW1lc3BhY2Utb25seSBoYW5kbGVyc1xuXHRcdFx0aWYgKCAhdHlwZSApIHtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdC8vIElmIGV2ZW50IGNoYW5nZXMgaXRzIHR5cGUsIHVzZSB0aGUgc3BlY2lhbCBldmVudCBoYW5kbGVycyBmb3IgdGhlIGNoYW5nZWQgdHlwZVxuXHRcdFx0c3BlY2lhbCA9IGpRdWVyeS5ldmVudC5zcGVjaWFsWyB0eXBlIF0gfHwge307XG5cblx0XHRcdC8vIElmIHNlbGVjdG9yIGRlZmluZWQsIGRldGVybWluZSBzcGVjaWFsIGV2ZW50IGFwaSB0eXBlLCBvdGhlcndpc2UgZ2l2ZW4gdHlwZVxuXHRcdFx0dHlwZSA9ICggc2VsZWN0b3IgPyBzcGVjaWFsLmRlbGVnYXRlVHlwZSA6IHNwZWNpYWwuYmluZFR5cGUgKSB8fCB0eXBlO1xuXG5cdFx0XHQvLyBVcGRhdGUgc3BlY2lhbCBiYXNlZCBvbiBuZXdseSByZXNldCB0eXBlXG5cdFx0XHRzcGVjaWFsID0galF1ZXJ5LmV2ZW50LnNwZWNpYWxbIHR5cGUgXSB8fCB7fTtcblxuXHRcdFx0Ly8gaGFuZGxlT2JqIGlzIHBhc3NlZCB0byBhbGwgZXZlbnQgaGFuZGxlcnNcblx0XHRcdGhhbmRsZU9iaiA9IGpRdWVyeS5leHRlbmQoIHtcblx0XHRcdFx0dHlwZTogdHlwZSxcblx0XHRcdFx0b3JpZ1R5cGU6IG9yaWdUeXBlLFxuXHRcdFx0XHRkYXRhOiBkYXRhLFxuXHRcdFx0XHRoYW5kbGVyOiBoYW5kbGVyLFxuXHRcdFx0XHRndWlkOiBoYW5kbGVyLmd1aWQsXG5cdFx0XHRcdHNlbGVjdG9yOiBzZWxlY3Rvcixcblx0XHRcdFx0bmVlZHNDb250ZXh0OiBzZWxlY3RvciAmJiBqUXVlcnkuZXhwci5tYXRjaC5uZWVkc0NvbnRleHQudGVzdCggc2VsZWN0b3IgKSxcblx0XHRcdFx0bmFtZXNwYWNlOiBuYW1lc3BhY2VzLmpvaW4oIFwiLlwiIClcblx0XHRcdH0sIGhhbmRsZU9iakluICk7XG5cblx0XHRcdC8vIEluaXQgdGhlIGV2ZW50IGhhbmRsZXIgcXVldWUgaWYgd2UncmUgdGhlIGZpcnN0XG5cdFx0XHRpZiAoICEoIGhhbmRsZXJzID0gZXZlbnRzWyB0eXBlIF0gKSApIHtcblx0XHRcdFx0aGFuZGxlcnMgPSBldmVudHNbIHR5cGUgXSA9IFtdO1xuXHRcdFx0XHRoYW5kbGVycy5kZWxlZ2F0ZUNvdW50ID0gMDtcblxuXHRcdFx0XHQvLyBPbmx5IHVzZSBhZGRFdmVudExpc3RlbmVyIGlmIHRoZSBzcGVjaWFsIGV2ZW50cyBoYW5kbGVyIHJldHVybnMgZmFsc2Vcblx0XHRcdFx0aWYgKCAhc3BlY2lhbC5zZXR1cCB8fFxuXHRcdFx0XHRcdHNwZWNpYWwuc2V0dXAuY2FsbCggZWxlbSwgZGF0YSwgbmFtZXNwYWNlcywgZXZlbnRIYW5kbGUgKSA9PT0gZmFsc2UgKSB7XG5cblx0XHRcdFx0XHRpZiAoIGVsZW0uYWRkRXZlbnRMaXN0ZW5lciApIHtcblx0XHRcdFx0XHRcdGVsZW0uYWRkRXZlbnRMaXN0ZW5lciggdHlwZSwgZXZlbnRIYW5kbGUgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0aWYgKCBzcGVjaWFsLmFkZCApIHtcblx0XHRcdFx0c3BlY2lhbC5hZGQuY2FsbCggZWxlbSwgaGFuZGxlT2JqICk7XG5cblx0XHRcdFx0aWYgKCAhaGFuZGxlT2JqLmhhbmRsZXIuZ3VpZCApIHtcblx0XHRcdFx0XHRoYW5kbGVPYmouaGFuZGxlci5ndWlkID0gaGFuZGxlci5ndWlkO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIEFkZCB0byB0aGUgZWxlbWVudCdzIGhhbmRsZXIgbGlzdCwgZGVsZWdhdGVzIGluIGZyb250XG5cdFx0XHRpZiAoIHNlbGVjdG9yICkge1xuXHRcdFx0XHRoYW5kbGVycy5zcGxpY2UoIGhhbmRsZXJzLmRlbGVnYXRlQ291bnQrKywgMCwgaGFuZGxlT2JqICk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRoYW5kbGVycy5wdXNoKCBoYW5kbGVPYmogKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gS2VlcCB0cmFjayBvZiB3aGljaCBldmVudHMgaGF2ZSBldmVyIGJlZW4gdXNlZCwgZm9yIGV2ZW50IG9wdGltaXphdGlvblxuXHRcdFx0alF1ZXJ5LmV2ZW50Lmdsb2JhbFsgdHlwZSBdID0gdHJ1ZTtcblx0XHR9XG5cblx0fSxcblxuXHQvLyBEZXRhY2ggYW4gZXZlbnQgb3Igc2V0IG9mIGV2ZW50cyBmcm9tIGFuIGVsZW1lbnRcblx0cmVtb3ZlOiBmdW5jdGlvbiggZWxlbSwgdHlwZXMsIGhhbmRsZXIsIHNlbGVjdG9yLCBtYXBwZWRUeXBlcyApIHtcblxuXHRcdHZhciBqLCBvcmlnQ291bnQsIHRtcCxcblx0XHRcdGV2ZW50cywgdCwgaGFuZGxlT2JqLFxuXHRcdFx0c3BlY2lhbCwgaGFuZGxlcnMsIHR5cGUsIG5hbWVzcGFjZXMsIG9yaWdUeXBlLFxuXHRcdFx0ZWxlbURhdGEgPSBkYXRhUHJpdi5oYXNEYXRhKCBlbGVtICkgJiYgZGF0YVByaXYuZ2V0KCBlbGVtICk7XG5cblx0XHRpZiAoICFlbGVtRGF0YSB8fCAhKCBldmVudHMgPSBlbGVtRGF0YS5ldmVudHMgKSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBPbmNlIGZvciBlYWNoIHR5cGUubmFtZXNwYWNlIGluIHR5cGVzOyB0eXBlIG1heSBiZSBvbWl0dGVkXG5cdFx0dHlwZXMgPSAoIHR5cGVzIHx8IFwiXCIgKS5tYXRjaCggcm5vdGh0bWx3aGl0ZSApIHx8IFsgXCJcIiBdO1xuXHRcdHQgPSB0eXBlcy5sZW5ndGg7XG5cdFx0d2hpbGUgKCB0LS0gKSB7XG5cdFx0XHR0bXAgPSBydHlwZW5hbWVzcGFjZS5leGVjKCB0eXBlc1sgdCBdICkgfHwgW107XG5cdFx0XHR0eXBlID0gb3JpZ1R5cGUgPSB0bXBbIDEgXTtcblx0XHRcdG5hbWVzcGFjZXMgPSAoIHRtcFsgMiBdIHx8IFwiXCIgKS5zcGxpdCggXCIuXCIgKS5zb3J0KCk7XG5cblx0XHRcdC8vIFVuYmluZCBhbGwgZXZlbnRzIChvbiB0aGlzIG5hbWVzcGFjZSwgaWYgcHJvdmlkZWQpIGZvciB0aGUgZWxlbWVudFxuXHRcdFx0aWYgKCAhdHlwZSApIHtcblx0XHRcdFx0Zm9yICggdHlwZSBpbiBldmVudHMgKSB7XG5cdFx0XHRcdFx0alF1ZXJ5LmV2ZW50LnJlbW92ZSggZWxlbSwgdHlwZSArIHR5cGVzWyB0IF0sIGhhbmRsZXIsIHNlbGVjdG9yLCB0cnVlICk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdHNwZWNpYWwgPSBqUXVlcnkuZXZlbnQuc3BlY2lhbFsgdHlwZSBdIHx8IHt9O1xuXHRcdFx0dHlwZSA9ICggc2VsZWN0b3IgPyBzcGVjaWFsLmRlbGVnYXRlVHlwZSA6IHNwZWNpYWwuYmluZFR5cGUgKSB8fCB0eXBlO1xuXHRcdFx0aGFuZGxlcnMgPSBldmVudHNbIHR5cGUgXSB8fCBbXTtcblx0XHRcdHRtcCA9IHRtcFsgMiBdICYmXG5cdFx0XHRcdG5ldyBSZWdFeHAoIFwiKF58XFxcXC4pXCIgKyBuYW1lc3BhY2VzLmpvaW4oIFwiXFxcXC4oPzouKlxcXFwufClcIiApICsgXCIoXFxcXC58JClcIiApO1xuXG5cdFx0XHQvLyBSZW1vdmUgbWF0Y2hpbmcgZXZlbnRzXG5cdFx0XHRvcmlnQ291bnQgPSBqID0gaGFuZGxlcnMubGVuZ3RoO1xuXHRcdFx0d2hpbGUgKCBqLS0gKSB7XG5cdFx0XHRcdGhhbmRsZU9iaiA9IGhhbmRsZXJzWyBqIF07XG5cblx0XHRcdFx0aWYgKCAoIG1hcHBlZFR5cGVzIHx8IG9yaWdUeXBlID09PSBoYW5kbGVPYmoub3JpZ1R5cGUgKSAmJlxuXHRcdFx0XHRcdCggIWhhbmRsZXIgfHwgaGFuZGxlci5ndWlkID09PSBoYW5kbGVPYmouZ3VpZCApICYmXG5cdFx0XHRcdFx0KCAhdG1wIHx8IHRtcC50ZXN0KCBoYW5kbGVPYmoubmFtZXNwYWNlICkgKSAmJlxuXHRcdFx0XHRcdCggIXNlbGVjdG9yIHx8IHNlbGVjdG9yID09PSBoYW5kbGVPYmouc2VsZWN0b3IgfHxcblx0XHRcdFx0XHRcdHNlbGVjdG9yID09PSBcIioqXCIgJiYgaGFuZGxlT2JqLnNlbGVjdG9yICkgKSB7XG5cdFx0XHRcdFx0aGFuZGxlcnMuc3BsaWNlKCBqLCAxICk7XG5cblx0XHRcdFx0XHRpZiAoIGhhbmRsZU9iai5zZWxlY3RvciApIHtcblx0XHRcdFx0XHRcdGhhbmRsZXJzLmRlbGVnYXRlQ291bnQtLTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKCBzcGVjaWFsLnJlbW92ZSApIHtcblx0XHRcdFx0XHRcdHNwZWNpYWwucmVtb3ZlLmNhbGwoIGVsZW0sIGhhbmRsZU9iaiApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBSZW1vdmUgZ2VuZXJpYyBldmVudCBoYW5kbGVyIGlmIHdlIHJlbW92ZWQgc29tZXRoaW5nIGFuZCBubyBtb3JlIGhhbmRsZXJzIGV4aXN0XG5cdFx0XHQvLyAoYXZvaWRzIHBvdGVudGlhbCBmb3IgZW5kbGVzcyByZWN1cnNpb24gZHVyaW5nIHJlbW92YWwgb2Ygc3BlY2lhbCBldmVudCBoYW5kbGVycylcblx0XHRcdGlmICggb3JpZ0NvdW50ICYmICFoYW5kbGVycy5sZW5ndGggKSB7XG5cdFx0XHRcdGlmICggIXNwZWNpYWwudGVhcmRvd24gfHxcblx0XHRcdFx0XHRzcGVjaWFsLnRlYXJkb3duLmNhbGwoIGVsZW0sIG5hbWVzcGFjZXMsIGVsZW1EYXRhLmhhbmRsZSApID09PSBmYWxzZSApIHtcblxuXHRcdFx0XHRcdGpRdWVyeS5yZW1vdmVFdmVudCggZWxlbSwgdHlwZSwgZWxlbURhdGEuaGFuZGxlICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRkZWxldGUgZXZlbnRzWyB0eXBlIF07XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gUmVtb3ZlIGRhdGEgYW5kIHRoZSBleHBhbmRvIGlmIGl0J3Mgbm8gbG9uZ2VyIHVzZWRcblx0XHRpZiAoIGpRdWVyeS5pc0VtcHR5T2JqZWN0KCBldmVudHMgKSApIHtcblx0XHRcdGRhdGFQcml2LnJlbW92ZSggZWxlbSwgXCJoYW5kbGUgZXZlbnRzXCIgKTtcblx0XHR9XG5cdH0sXG5cblx0ZGlzcGF0Y2g6IGZ1bmN0aW9uKCBuYXRpdmVFdmVudCApIHtcblxuXHRcdC8vIE1ha2UgYSB3cml0YWJsZSBqUXVlcnkuRXZlbnQgZnJvbSB0aGUgbmF0aXZlIGV2ZW50IG9iamVjdFxuXHRcdHZhciBldmVudCA9IGpRdWVyeS5ldmVudC5maXgoIG5hdGl2ZUV2ZW50ICk7XG5cblx0XHR2YXIgaSwgaiwgcmV0LCBtYXRjaGVkLCBoYW5kbGVPYmosIGhhbmRsZXJRdWV1ZSxcblx0XHRcdGFyZ3MgPSBuZXcgQXJyYXkoIGFyZ3VtZW50cy5sZW5ndGggKSxcblx0XHRcdGhhbmRsZXJzID0gKCBkYXRhUHJpdi5nZXQoIHRoaXMsIFwiZXZlbnRzXCIgKSB8fCB7fSApWyBldmVudC50eXBlIF0gfHwgW10sXG5cdFx0XHRzcGVjaWFsID0galF1ZXJ5LmV2ZW50LnNwZWNpYWxbIGV2ZW50LnR5cGUgXSB8fCB7fTtcblxuXHRcdC8vIFVzZSB0aGUgZml4LWVkIGpRdWVyeS5FdmVudCByYXRoZXIgdGhhbiB0aGUgKHJlYWQtb25seSkgbmF0aXZlIGV2ZW50XG5cdFx0YXJnc1sgMCBdID0gZXZlbnQ7XG5cblx0XHRmb3IgKCBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKyApIHtcblx0XHRcdGFyZ3NbIGkgXSA9IGFyZ3VtZW50c1sgaSBdO1xuXHRcdH1cblxuXHRcdGV2ZW50LmRlbGVnYXRlVGFyZ2V0ID0gdGhpcztcblxuXHRcdC8vIENhbGwgdGhlIHByZURpc3BhdGNoIGhvb2sgZm9yIHRoZSBtYXBwZWQgdHlwZSwgYW5kIGxldCBpdCBiYWlsIGlmIGRlc2lyZWRcblx0XHRpZiAoIHNwZWNpYWwucHJlRGlzcGF0Y2ggJiYgc3BlY2lhbC5wcmVEaXNwYXRjaC5jYWxsKCB0aGlzLCBldmVudCApID09PSBmYWxzZSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBEZXRlcm1pbmUgaGFuZGxlcnNcblx0XHRoYW5kbGVyUXVldWUgPSBqUXVlcnkuZXZlbnQuaGFuZGxlcnMuY2FsbCggdGhpcywgZXZlbnQsIGhhbmRsZXJzICk7XG5cblx0XHQvLyBSdW4gZGVsZWdhdGVzIGZpcnN0OyB0aGV5IG1heSB3YW50IHRvIHN0b3AgcHJvcGFnYXRpb24gYmVuZWF0aCB1c1xuXHRcdGkgPSAwO1xuXHRcdHdoaWxlICggKCBtYXRjaGVkID0gaGFuZGxlclF1ZXVlWyBpKysgXSApICYmICFldmVudC5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpICkge1xuXHRcdFx0ZXZlbnQuY3VycmVudFRhcmdldCA9IG1hdGNoZWQuZWxlbTtcblxuXHRcdFx0aiA9IDA7XG5cdFx0XHR3aGlsZSAoICggaGFuZGxlT2JqID0gbWF0Y2hlZC5oYW5kbGVyc1sgaisrIF0gKSAmJlxuXHRcdFx0XHQhZXZlbnQuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQoKSApIHtcblxuXHRcdFx0XHQvLyBJZiB0aGUgZXZlbnQgaXMgbmFtZXNwYWNlZCwgdGhlbiBlYWNoIGhhbmRsZXIgaXMgb25seSBpbnZva2VkIGlmIGl0IGlzXG5cdFx0XHRcdC8vIHNwZWNpYWxseSB1bml2ZXJzYWwgb3IgaXRzIG5hbWVzcGFjZXMgYXJlIGEgc3VwZXJzZXQgb2YgdGhlIGV2ZW50J3MuXG5cdFx0XHRcdGlmICggIWV2ZW50LnJuYW1lc3BhY2UgfHwgaGFuZGxlT2JqLm5hbWVzcGFjZSA9PT0gZmFsc2UgfHxcblx0XHRcdFx0XHRldmVudC5ybmFtZXNwYWNlLnRlc3QoIGhhbmRsZU9iai5uYW1lc3BhY2UgKSApIHtcblxuXHRcdFx0XHRcdGV2ZW50LmhhbmRsZU9iaiA9IGhhbmRsZU9iajtcblx0XHRcdFx0XHRldmVudC5kYXRhID0gaGFuZGxlT2JqLmRhdGE7XG5cblx0XHRcdFx0XHRyZXQgPSAoICggalF1ZXJ5LmV2ZW50LnNwZWNpYWxbIGhhbmRsZU9iai5vcmlnVHlwZSBdIHx8IHt9ICkuaGFuZGxlIHx8XG5cdFx0XHRcdFx0XHRoYW5kbGVPYmouaGFuZGxlciApLmFwcGx5KCBtYXRjaGVkLmVsZW0sIGFyZ3MgKTtcblxuXHRcdFx0XHRcdGlmICggcmV0ICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdFx0XHRpZiAoICggZXZlbnQucmVzdWx0ID0gcmV0ICkgPT09IGZhbHNlICkge1xuXHRcdFx0XHRcdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0XHRcdFx0XHRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBDYWxsIHRoZSBwb3N0RGlzcGF0Y2ggaG9vayBmb3IgdGhlIG1hcHBlZCB0eXBlXG5cdFx0aWYgKCBzcGVjaWFsLnBvc3REaXNwYXRjaCApIHtcblx0XHRcdHNwZWNpYWwucG9zdERpc3BhdGNoLmNhbGwoIHRoaXMsIGV2ZW50ICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGV2ZW50LnJlc3VsdDtcblx0fSxcblxuXHRoYW5kbGVyczogZnVuY3Rpb24oIGV2ZW50LCBoYW5kbGVycyApIHtcblx0XHR2YXIgaSwgaGFuZGxlT2JqLCBzZWwsIG1hdGNoZWRIYW5kbGVycywgbWF0Y2hlZFNlbGVjdG9ycyxcblx0XHRcdGhhbmRsZXJRdWV1ZSA9IFtdLFxuXHRcdFx0ZGVsZWdhdGVDb3VudCA9IGhhbmRsZXJzLmRlbGVnYXRlQ291bnQsXG5cdFx0XHRjdXIgPSBldmVudC50YXJnZXQ7XG5cblx0XHQvLyBGaW5kIGRlbGVnYXRlIGhhbmRsZXJzXG5cdFx0aWYgKCBkZWxlZ2F0ZUNvdW50ICYmXG5cblx0XHRcdC8vIFN1cHBvcnQ6IElFIDw9OVxuXHRcdFx0Ly8gQmxhY2staG9sZSBTVkcgPHVzZT4gaW5zdGFuY2UgdHJlZXMgKHRyYWMtMTMxODApXG5cdFx0XHRjdXIubm9kZVR5cGUgJiZcblxuXHRcdFx0Ly8gU3VwcG9ydDogRmlyZWZveCA8PTQyXG5cdFx0XHQvLyBTdXBwcmVzcyBzcGVjLXZpb2xhdGluZyBjbGlja3MgaW5kaWNhdGluZyBhIG5vbi1wcmltYXJ5IHBvaW50ZXIgYnV0dG9uICh0cmFjLTM4NjEpXG5cdFx0XHQvLyBodHRwczovL3d3dy53My5vcmcvVFIvRE9NLUxldmVsLTMtRXZlbnRzLyNldmVudC10eXBlLWNsaWNrXG5cdFx0XHQvLyBTdXBwb3J0OiBJRSAxMSBvbmx5XG5cdFx0XHQvLyAuLi5idXQgbm90IGFycm93IGtleSBcImNsaWNrc1wiIG9mIHJhZGlvIGlucHV0cywgd2hpY2ggY2FuIGhhdmUgYGJ1dHRvbmAgLTEgKGdoLTIzNDMpXG5cdFx0XHQhKCBldmVudC50eXBlID09PSBcImNsaWNrXCIgJiYgZXZlbnQuYnV0dG9uID49IDEgKSApIHtcblxuXHRcdFx0Zm9yICggOyBjdXIgIT09IHRoaXM7IGN1ciA9IGN1ci5wYXJlbnROb2RlIHx8IHRoaXMgKSB7XG5cblx0XHRcdFx0Ly8gRG9uJ3QgY2hlY2sgbm9uLWVsZW1lbnRzICgjMTMyMDgpXG5cdFx0XHRcdC8vIERvbid0IHByb2Nlc3MgY2xpY2tzIG9uIGRpc2FibGVkIGVsZW1lbnRzICgjNjkxMSwgIzgxNjUsICMxMTM4MiwgIzExNzY0KVxuXHRcdFx0XHRpZiAoIGN1ci5ub2RlVHlwZSA9PT0gMSAmJiAhKCBldmVudC50eXBlID09PSBcImNsaWNrXCIgJiYgY3VyLmRpc2FibGVkID09PSB0cnVlICkgKSB7XG5cdFx0XHRcdFx0bWF0Y2hlZEhhbmRsZXJzID0gW107XG5cdFx0XHRcdFx0bWF0Y2hlZFNlbGVjdG9ycyA9IHt9O1xuXHRcdFx0XHRcdGZvciAoIGkgPSAwOyBpIDwgZGVsZWdhdGVDb3VudDsgaSsrICkge1xuXHRcdFx0XHRcdFx0aGFuZGxlT2JqID0gaGFuZGxlcnNbIGkgXTtcblxuXHRcdFx0XHRcdFx0Ly8gRG9uJ3QgY29uZmxpY3Qgd2l0aCBPYmplY3QucHJvdG90eXBlIHByb3BlcnRpZXMgKCMxMzIwMylcblx0XHRcdFx0XHRcdHNlbCA9IGhhbmRsZU9iai5zZWxlY3RvciArIFwiIFwiO1xuXG5cdFx0XHRcdFx0XHRpZiAoIG1hdGNoZWRTZWxlY3RvcnNbIHNlbCBdID09PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdFx0XHRcdG1hdGNoZWRTZWxlY3RvcnNbIHNlbCBdID0gaGFuZGxlT2JqLm5lZWRzQ29udGV4dCA/XG5cdFx0XHRcdFx0XHRcdFx0alF1ZXJ5KCBzZWwsIHRoaXMgKS5pbmRleCggY3VyICkgPiAtMSA6XG5cdFx0XHRcdFx0XHRcdFx0alF1ZXJ5LmZpbmQoIHNlbCwgdGhpcywgbnVsbCwgWyBjdXIgXSApLmxlbmd0aDtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGlmICggbWF0Y2hlZFNlbGVjdG9yc1sgc2VsIF0gKSB7XG5cdFx0XHRcdFx0XHRcdG1hdGNoZWRIYW5kbGVycy5wdXNoKCBoYW5kbGVPYmogKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKCBtYXRjaGVkSGFuZGxlcnMubGVuZ3RoICkge1xuXHRcdFx0XHRcdFx0aGFuZGxlclF1ZXVlLnB1c2goIHsgZWxlbTogY3VyLCBoYW5kbGVyczogbWF0Y2hlZEhhbmRsZXJzIH0gKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBBZGQgdGhlIHJlbWFpbmluZyAoZGlyZWN0bHktYm91bmQpIGhhbmRsZXJzXG5cdFx0Y3VyID0gdGhpcztcblx0XHRpZiAoIGRlbGVnYXRlQ291bnQgPCBoYW5kbGVycy5sZW5ndGggKSB7XG5cdFx0XHRoYW5kbGVyUXVldWUucHVzaCggeyBlbGVtOiBjdXIsIGhhbmRsZXJzOiBoYW5kbGVycy5zbGljZSggZGVsZWdhdGVDb3VudCApIH0gKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gaGFuZGxlclF1ZXVlO1xuXHR9LFxuXG5cdGFkZFByb3A6IGZ1bmN0aW9uKCBuYW1lLCBob29rICkge1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eSggalF1ZXJ5LkV2ZW50LnByb3RvdHlwZSwgbmFtZSwge1xuXHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcblx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblxuXHRcdFx0Z2V0OiBpc0Z1bmN0aW9uKCBob29rICkgP1xuXHRcdFx0XHRmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRpZiAoIHRoaXMub3JpZ2luYWxFdmVudCApIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGhvb2soIHRoaXMub3JpZ2luYWxFdmVudCApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSA6XG5cdFx0XHRcdGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdGlmICggdGhpcy5vcmlnaW5hbEV2ZW50ICkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdGhpcy5vcmlnaW5hbEV2ZW50WyBuYW1lIF07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXG5cdFx0XHRzZXQ6IGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KCB0aGlzLCBuYW1lLCB7XG5cdFx0XHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcblx0XHRcdFx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cdFx0XHRcdFx0d3JpdGFibGU6IHRydWUsXG5cdFx0XHRcdFx0dmFsdWU6IHZhbHVlXG5cdFx0XHRcdH0gKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH0sXG5cblx0Zml4OiBmdW5jdGlvbiggb3JpZ2luYWxFdmVudCApIHtcblx0XHRyZXR1cm4gb3JpZ2luYWxFdmVudFsgalF1ZXJ5LmV4cGFuZG8gXSA/XG5cdFx0XHRvcmlnaW5hbEV2ZW50IDpcblx0XHRcdG5ldyBqUXVlcnkuRXZlbnQoIG9yaWdpbmFsRXZlbnQgKTtcblx0fSxcblxuXHRzcGVjaWFsOiB7XG5cdFx0bG9hZDoge1xuXG5cdFx0XHQvLyBQcmV2ZW50IHRyaWdnZXJlZCBpbWFnZS5sb2FkIGV2ZW50cyBmcm9tIGJ1YmJsaW5nIHRvIHdpbmRvdy5sb2FkXG5cdFx0XHRub0J1YmJsZTogdHJ1ZVxuXHRcdH0sXG5cdFx0Y2xpY2s6IHtcblxuXHRcdFx0Ly8gVXRpbGl6ZSBuYXRpdmUgZXZlbnQgdG8gZW5zdXJlIGNvcnJlY3Qgc3RhdGUgZm9yIGNoZWNrYWJsZSBpbnB1dHNcblx0XHRcdHNldHVwOiBmdW5jdGlvbiggZGF0YSApIHtcblxuXHRcdFx0XHQvLyBGb3IgbXV0dWFsIGNvbXByZXNzaWJpbGl0eSB3aXRoIF9kZWZhdWx0LCByZXBsYWNlIGB0aGlzYCBhY2Nlc3Mgd2l0aCBhIGxvY2FsIHZhci5cblx0XHRcdFx0Ly8gYHx8IGRhdGFgIGlzIGRlYWQgY29kZSBtZWFudCBvbmx5IHRvIHByZXNlcnZlIHRoZSB2YXJpYWJsZSB0aHJvdWdoIG1pbmlmaWNhdGlvbi5cblx0XHRcdFx0dmFyIGVsID0gdGhpcyB8fCBkYXRhO1xuXG5cdFx0XHRcdC8vIENsYWltIHRoZSBmaXJzdCBoYW5kbGVyXG5cdFx0XHRcdGlmICggcmNoZWNrYWJsZVR5cGUudGVzdCggZWwudHlwZSApICYmXG5cdFx0XHRcdFx0ZWwuY2xpY2sgJiYgbm9kZU5hbWUoIGVsLCBcImlucHV0XCIgKSApIHtcblxuXHRcdFx0XHRcdC8vIGRhdGFQcml2LnNldCggZWwsIFwiY2xpY2tcIiwgLi4uIClcblx0XHRcdFx0XHRsZXZlcmFnZU5hdGl2ZSggZWwsIFwiY2xpY2tcIiwgcmV0dXJuVHJ1ZSApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gUmV0dXJuIGZhbHNlIHRvIGFsbG93IG5vcm1hbCBwcm9jZXNzaW5nIGluIHRoZSBjYWxsZXJcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fSxcblx0XHRcdHRyaWdnZXI6IGZ1bmN0aW9uKCBkYXRhICkge1xuXG5cdFx0XHRcdC8vIEZvciBtdXR1YWwgY29tcHJlc3NpYmlsaXR5IHdpdGggX2RlZmF1bHQsIHJlcGxhY2UgYHRoaXNgIGFjY2VzcyB3aXRoIGEgbG9jYWwgdmFyLlxuXHRcdFx0XHQvLyBgfHwgZGF0YWAgaXMgZGVhZCBjb2RlIG1lYW50IG9ubHkgdG8gcHJlc2VydmUgdGhlIHZhcmlhYmxlIHRocm91Z2ggbWluaWZpY2F0aW9uLlxuXHRcdFx0XHR2YXIgZWwgPSB0aGlzIHx8IGRhdGE7XG5cblx0XHRcdFx0Ly8gRm9yY2Ugc2V0dXAgYmVmb3JlIHRyaWdnZXJpbmcgYSBjbGlja1xuXHRcdFx0XHRpZiAoIHJjaGVja2FibGVUeXBlLnRlc3QoIGVsLnR5cGUgKSAmJlxuXHRcdFx0XHRcdGVsLmNsaWNrICYmIG5vZGVOYW1lKCBlbCwgXCJpbnB1dFwiICkgKSB7XG5cblx0XHRcdFx0XHRsZXZlcmFnZU5hdGl2ZSggZWwsIFwiY2xpY2tcIiApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gUmV0dXJuIG5vbi1mYWxzZSB0byBhbGxvdyBub3JtYWwgZXZlbnQtcGF0aCBwcm9wYWdhdGlvblxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH0sXG5cblx0XHRcdC8vIEZvciBjcm9zcy1icm93c2VyIGNvbnNpc3RlbmN5LCBzdXBwcmVzcyBuYXRpdmUgLmNsaWNrKCkgb24gbGlua3Ncblx0XHRcdC8vIEFsc28gcHJldmVudCBpdCBpZiB3ZSdyZSBjdXJyZW50bHkgaW5zaWRlIGEgbGV2ZXJhZ2VkIG5hdGl2ZS1ldmVudCBzdGFja1xuXHRcdFx0X2RlZmF1bHQ6IGZ1bmN0aW9uKCBldmVudCApIHtcblx0XHRcdFx0dmFyIHRhcmdldCA9IGV2ZW50LnRhcmdldDtcblx0XHRcdFx0cmV0dXJuIHJjaGVja2FibGVUeXBlLnRlc3QoIHRhcmdldC50eXBlICkgJiZcblx0XHRcdFx0XHR0YXJnZXQuY2xpY2sgJiYgbm9kZU5hbWUoIHRhcmdldCwgXCJpbnB1dFwiICkgJiZcblx0XHRcdFx0XHRkYXRhUHJpdi5nZXQoIHRhcmdldCwgXCJjbGlja1wiICkgfHxcblx0XHRcdFx0XHRub2RlTmFtZSggdGFyZ2V0LCBcImFcIiApO1xuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHRiZWZvcmV1bmxvYWQ6IHtcblx0XHRcdHBvc3REaXNwYXRjaDogZnVuY3Rpb24oIGV2ZW50ICkge1xuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IEZpcmVmb3ggMjArXG5cdFx0XHRcdC8vIEZpcmVmb3ggZG9lc24ndCBhbGVydCBpZiB0aGUgcmV0dXJuVmFsdWUgZmllbGQgaXMgbm90IHNldC5cblx0XHRcdFx0aWYgKCBldmVudC5yZXN1bHQgIT09IHVuZGVmaW5lZCAmJiBldmVudC5vcmlnaW5hbEV2ZW50ICkge1xuXHRcdFx0XHRcdGV2ZW50Lm9yaWdpbmFsRXZlbnQucmV0dXJuVmFsdWUgPSBldmVudC5yZXN1bHQ7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cbn07XG5cbi8vIEVuc3VyZSB0aGUgcHJlc2VuY2Ugb2YgYW4gZXZlbnQgbGlzdGVuZXIgdGhhdCBoYW5kbGVzIG1hbnVhbGx5LXRyaWdnZXJlZFxuLy8gc3ludGhldGljIGV2ZW50cyBieSBpbnRlcnJ1cHRpbmcgcHJvZ3Jlc3MgdW50aWwgcmVpbnZva2VkIGluIHJlc3BvbnNlIHRvXG4vLyAqbmF0aXZlKiBldmVudHMgdGhhdCBpdCBmaXJlcyBkaXJlY3RseSwgZW5zdXJpbmcgdGhhdCBzdGF0ZSBjaGFuZ2VzIGhhdmVcbi8vIGFscmVhZHkgb2NjdXJyZWQgYmVmb3JlIG90aGVyIGxpc3RlbmVycyBhcmUgaW52b2tlZC5cbmZ1bmN0aW9uIGxldmVyYWdlTmF0aXZlKCBlbCwgdHlwZSwgZXhwZWN0U3luYyApIHtcblxuXHQvLyBNaXNzaW5nIGV4cGVjdFN5bmMgaW5kaWNhdGVzIGEgdHJpZ2dlciBjYWxsLCB3aGljaCBtdXN0IGZvcmNlIHNldHVwIHRocm91Z2ggalF1ZXJ5LmV2ZW50LmFkZFxuXHRpZiAoICFleHBlY3RTeW5jICkge1xuXHRcdGlmICggZGF0YVByaXYuZ2V0KCBlbCwgdHlwZSApID09PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRqUXVlcnkuZXZlbnQuYWRkKCBlbCwgdHlwZSwgcmV0dXJuVHJ1ZSApO1xuXHRcdH1cblx0XHRyZXR1cm47XG5cdH1cblxuXHQvLyBSZWdpc3RlciB0aGUgY29udHJvbGxlciBhcyBhIHNwZWNpYWwgdW5pdmVyc2FsIGhhbmRsZXIgZm9yIGFsbCBldmVudCBuYW1lc3BhY2VzXG5cdGRhdGFQcml2LnNldCggZWwsIHR5cGUsIGZhbHNlICk7XG5cdGpRdWVyeS5ldmVudC5hZGQoIGVsLCB0eXBlLCB7XG5cdFx0bmFtZXNwYWNlOiBmYWxzZSxcblx0XHRoYW5kbGVyOiBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0XHR2YXIgbm90QXN5bmMsIHJlc3VsdCxcblx0XHRcdFx0c2F2ZWQgPSBkYXRhUHJpdi5nZXQoIHRoaXMsIHR5cGUgKTtcblxuXHRcdFx0aWYgKCAoIGV2ZW50LmlzVHJpZ2dlciAmIDEgKSAmJiB0aGlzWyB0eXBlIF0gKSB7XG5cblx0XHRcdFx0Ly8gSW50ZXJydXB0IHByb2Nlc3Npbmcgb2YgdGhlIG91dGVyIHN5bnRoZXRpYyAudHJpZ2dlcigpZWQgZXZlbnRcblx0XHRcdFx0Ly8gU2F2ZWQgZGF0YSBzaG91bGQgYmUgZmFsc2UgaW4gc3VjaCBjYXNlcywgYnV0IG1pZ2h0IGJlIGEgbGVmdG92ZXIgY2FwdHVyZSBvYmplY3Rcblx0XHRcdFx0Ly8gZnJvbSBhbiBhc3luYyBuYXRpdmUgaGFuZGxlciAoZ2gtNDM1MClcblx0XHRcdFx0aWYgKCAhc2F2ZWQubGVuZ3RoICkge1xuXG5cdFx0XHRcdFx0Ly8gU3RvcmUgYXJndW1lbnRzIGZvciB1c2Ugd2hlbiBoYW5kbGluZyB0aGUgaW5uZXIgbmF0aXZlIGV2ZW50XG5cdFx0XHRcdFx0Ly8gVGhlcmUgd2lsbCBhbHdheXMgYmUgYXQgbGVhc3Qgb25lIGFyZ3VtZW50IChhbiBldmVudCBvYmplY3QpLCBzbyB0aGlzIGFycmF5XG5cdFx0XHRcdFx0Ly8gd2lsbCBub3QgYmUgY29uZnVzZWQgd2l0aCBhIGxlZnRvdmVyIGNhcHR1cmUgb2JqZWN0LlxuXHRcdFx0XHRcdHNhdmVkID0gc2xpY2UuY2FsbCggYXJndW1lbnRzICk7XG5cdFx0XHRcdFx0ZGF0YVByaXYuc2V0KCB0aGlzLCB0eXBlLCBzYXZlZCApO1xuXG5cdFx0XHRcdFx0Ly8gVHJpZ2dlciB0aGUgbmF0aXZlIGV2ZW50IGFuZCBjYXB0dXJlIGl0cyByZXN1bHRcblx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA8PTkgLSAxMStcblx0XHRcdFx0XHQvLyBmb2N1cygpIGFuZCBibHVyKCkgYXJlIGFzeW5jaHJvbm91c1xuXHRcdFx0XHRcdG5vdEFzeW5jID0gZXhwZWN0U3luYyggdGhpcywgdHlwZSApO1xuXHRcdFx0XHRcdHRoaXNbIHR5cGUgXSgpO1xuXHRcdFx0XHRcdHJlc3VsdCA9IGRhdGFQcml2LmdldCggdGhpcywgdHlwZSApO1xuXHRcdFx0XHRcdGlmICggc2F2ZWQgIT09IHJlc3VsdCB8fCBub3RBc3luYyApIHtcblx0XHRcdFx0XHRcdGRhdGFQcml2LnNldCggdGhpcywgdHlwZSwgZmFsc2UgKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0cmVzdWx0ID0ge307XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmICggc2F2ZWQgIT09IHJlc3VsdCApIHtcblxuXHRcdFx0XHRcdFx0Ly8gQ2FuY2VsIHRoZSBvdXRlciBzeW50aGV0aWMgZXZlbnRcblx0XHRcdFx0XHRcdGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuXHRcdFx0XHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdFx0XHRcdHJldHVybiByZXN1bHQudmFsdWU7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIElmIHRoaXMgaXMgYW4gaW5uZXIgc3ludGhldGljIGV2ZW50IGZvciBhbiBldmVudCB3aXRoIGEgYnViYmxpbmcgc3Vycm9nYXRlXG5cdFx0XHRcdC8vIChmb2N1cyBvciBibHVyKSwgYXNzdW1lIHRoYXQgdGhlIHN1cnJvZ2F0ZSBhbHJlYWR5IHByb3BhZ2F0ZWQgZnJvbSB0cmlnZ2VyaW5nIHRoZVxuXHRcdFx0XHQvLyBuYXRpdmUgZXZlbnQgYW5kIHByZXZlbnQgdGhhdCBmcm9tIGhhcHBlbmluZyBhZ2FpbiBoZXJlLlxuXHRcdFx0XHQvLyBUaGlzIHRlY2huaWNhbGx5IGdldHMgdGhlIG9yZGVyaW5nIHdyb25nIHcuci50LiB0byBgLnRyaWdnZXIoKWAgKGluIHdoaWNoIHRoZVxuXHRcdFx0XHQvLyBidWJibGluZyBzdXJyb2dhdGUgcHJvcGFnYXRlcyAqYWZ0ZXIqIHRoZSBub24tYnViYmxpbmcgYmFzZSksIGJ1dCB0aGF0IHNlZW1zXG5cdFx0XHRcdC8vIGxlc3MgYmFkIHRoYW4gZHVwbGljYXRpb24uXG5cdFx0XHRcdH0gZWxzZSBpZiAoICggalF1ZXJ5LmV2ZW50LnNwZWNpYWxbIHR5cGUgXSB8fCB7fSApLmRlbGVnYXRlVHlwZSApIHtcblx0XHRcdFx0XHRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblx0XHRcdFx0fVxuXG5cdFx0XHQvLyBJZiB0aGlzIGlzIGEgbmF0aXZlIGV2ZW50IHRyaWdnZXJlZCBhYm92ZSwgZXZlcnl0aGluZyBpcyBub3cgaW4gb3JkZXJcblx0XHRcdC8vIEZpcmUgYW4gaW5uZXIgc3ludGhldGljIGV2ZW50IHdpdGggdGhlIG9yaWdpbmFsIGFyZ3VtZW50c1xuXHRcdFx0fSBlbHNlIGlmICggc2F2ZWQubGVuZ3RoICkge1xuXG5cdFx0XHRcdC8vIC4uLmFuZCBjYXB0dXJlIHRoZSByZXN1bHRcblx0XHRcdFx0ZGF0YVByaXYuc2V0KCB0aGlzLCB0eXBlLCB7XG5cdFx0XHRcdFx0dmFsdWU6IGpRdWVyeS5ldmVudC50cmlnZ2VyKFxuXG5cdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA8PTkgLSAxMStcblx0XHRcdFx0XHRcdC8vIEV4dGVuZCB3aXRoIHRoZSBwcm90b3R5cGUgdG8gcmVzZXQgdGhlIGFib3ZlIHN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpXG5cdFx0XHRcdFx0XHRqUXVlcnkuZXh0ZW5kKCBzYXZlZFsgMCBdLCBqUXVlcnkuRXZlbnQucHJvdG90eXBlICksXG5cdFx0XHRcdFx0XHRzYXZlZC5zbGljZSggMSApLFxuXHRcdFx0XHRcdFx0dGhpc1xuXHRcdFx0XHRcdClcblx0XHRcdFx0fSApO1xuXG5cdFx0XHRcdC8vIEFib3J0IGhhbmRsaW5nIG9mIHRoZSBuYXRpdmUgZXZlbnRcblx0XHRcdFx0ZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9ICk7XG59XG5cbmpRdWVyeS5yZW1vdmVFdmVudCA9IGZ1bmN0aW9uKCBlbGVtLCB0eXBlLCBoYW5kbGUgKSB7XG5cblx0Ly8gVGhpcyBcImlmXCIgaXMgbmVlZGVkIGZvciBwbGFpbiBvYmplY3RzXG5cdGlmICggZWxlbS5yZW1vdmVFdmVudExpc3RlbmVyICkge1xuXHRcdGVsZW0ucmVtb3ZlRXZlbnRMaXN0ZW5lciggdHlwZSwgaGFuZGxlICk7XG5cdH1cbn07XG5cbmpRdWVyeS5FdmVudCA9IGZ1bmN0aW9uKCBzcmMsIHByb3BzICkge1xuXG5cdC8vIEFsbG93IGluc3RhbnRpYXRpb24gd2l0aG91dCB0aGUgJ25ldycga2V5d29yZFxuXHRpZiAoICEoIHRoaXMgaW5zdGFuY2VvZiBqUXVlcnkuRXZlbnQgKSApIHtcblx0XHRyZXR1cm4gbmV3IGpRdWVyeS5FdmVudCggc3JjLCBwcm9wcyApO1xuXHR9XG5cblx0Ly8gRXZlbnQgb2JqZWN0XG5cdGlmICggc3JjICYmIHNyYy50eXBlICkge1xuXHRcdHRoaXMub3JpZ2luYWxFdmVudCA9IHNyYztcblx0XHR0aGlzLnR5cGUgPSBzcmMudHlwZTtcblxuXHRcdC8vIEV2ZW50cyBidWJibGluZyB1cCB0aGUgZG9jdW1lbnQgbWF5IGhhdmUgYmVlbiBtYXJrZWQgYXMgcHJldmVudGVkXG5cdFx0Ly8gYnkgYSBoYW5kbGVyIGxvd2VyIGRvd24gdGhlIHRyZWU7IHJlZmxlY3QgdGhlIGNvcnJlY3QgdmFsdWUuXG5cdFx0dGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQgPSBzcmMuZGVmYXVsdFByZXZlbnRlZCB8fFxuXHRcdFx0XHRzcmMuZGVmYXVsdFByZXZlbnRlZCA9PT0gdW5kZWZpbmVkICYmXG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogQW5kcm9pZCA8PTIuMyBvbmx5XG5cdFx0XHRcdHNyYy5yZXR1cm5WYWx1ZSA9PT0gZmFsc2UgP1xuXHRcdFx0cmV0dXJuVHJ1ZSA6XG5cdFx0XHRyZXR1cm5GYWxzZTtcblxuXHRcdC8vIENyZWF0ZSB0YXJnZXQgcHJvcGVydGllc1xuXHRcdC8vIFN1cHBvcnQ6IFNhZmFyaSA8PTYgLSA3IG9ubHlcblx0XHQvLyBUYXJnZXQgc2hvdWxkIG5vdCBiZSBhIHRleHQgbm9kZSAoIzUwNCwgIzEzMTQzKVxuXHRcdHRoaXMudGFyZ2V0ID0gKCBzcmMudGFyZ2V0ICYmIHNyYy50YXJnZXQubm9kZVR5cGUgPT09IDMgKSA/XG5cdFx0XHRzcmMudGFyZ2V0LnBhcmVudE5vZGUgOlxuXHRcdFx0c3JjLnRhcmdldDtcblxuXHRcdHRoaXMuY3VycmVudFRhcmdldCA9IHNyYy5jdXJyZW50VGFyZ2V0O1xuXHRcdHRoaXMucmVsYXRlZFRhcmdldCA9IHNyYy5yZWxhdGVkVGFyZ2V0O1xuXG5cdC8vIEV2ZW50IHR5cGVcblx0fSBlbHNlIHtcblx0XHR0aGlzLnR5cGUgPSBzcmM7XG5cdH1cblxuXHQvLyBQdXQgZXhwbGljaXRseSBwcm92aWRlZCBwcm9wZXJ0aWVzIG9udG8gdGhlIGV2ZW50IG9iamVjdFxuXHRpZiAoIHByb3BzICkge1xuXHRcdGpRdWVyeS5leHRlbmQoIHRoaXMsIHByb3BzICk7XG5cdH1cblxuXHQvLyBDcmVhdGUgYSB0aW1lc3RhbXAgaWYgaW5jb21pbmcgZXZlbnQgZG9lc24ndCBoYXZlIG9uZVxuXHR0aGlzLnRpbWVTdGFtcCA9IHNyYyAmJiBzcmMudGltZVN0YW1wIHx8IERhdGUubm93KCk7XG5cblx0Ly8gTWFyayBpdCBhcyBmaXhlZFxuXHR0aGlzWyBqUXVlcnkuZXhwYW5kbyBdID0gdHJ1ZTtcbn07XG5cbi8vIGpRdWVyeS5FdmVudCBpcyBiYXNlZCBvbiBET00zIEV2ZW50cyBhcyBzcGVjaWZpZWQgYnkgdGhlIEVDTUFTY3JpcHQgTGFuZ3VhZ2UgQmluZGluZ1xuLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSLzIwMDMvV0QtRE9NLUxldmVsLTMtRXZlbnRzLTIwMDMwMzMxL2VjbWEtc2NyaXB0LWJpbmRpbmcuaHRtbFxualF1ZXJ5LkV2ZW50LnByb3RvdHlwZSA9IHtcblx0Y29uc3RydWN0b3I6IGpRdWVyeS5FdmVudCxcblx0aXNEZWZhdWx0UHJldmVudGVkOiByZXR1cm5GYWxzZSxcblx0aXNQcm9wYWdhdGlvblN0b3BwZWQ6IHJldHVybkZhbHNlLFxuXHRpc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZDogcmV0dXJuRmFsc2UsXG5cdGlzU2ltdWxhdGVkOiBmYWxzZSxcblxuXHRwcmV2ZW50RGVmYXVsdDogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGUgPSB0aGlzLm9yaWdpbmFsRXZlbnQ7XG5cblx0XHR0aGlzLmlzRGVmYXVsdFByZXZlbnRlZCA9IHJldHVyblRydWU7XG5cblx0XHRpZiAoIGUgJiYgIXRoaXMuaXNTaW11bGF0ZWQgKSB7XG5cdFx0XHRlLnByZXZlbnREZWZhdWx0KCk7XG5cdFx0fVxuXHR9LFxuXHRzdG9wUHJvcGFnYXRpb246IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBlID0gdGhpcy5vcmlnaW5hbEV2ZW50O1xuXG5cdFx0dGhpcy5pc1Byb3BhZ2F0aW9uU3RvcHBlZCA9IHJldHVyblRydWU7XG5cblx0XHRpZiAoIGUgJiYgIXRoaXMuaXNTaW11bGF0ZWQgKSB7XG5cdFx0XHRlLnN0b3BQcm9wYWdhdGlvbigpO1xuXHRcdH1cblx0fSxcblx0c3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgZSA9IHRoaXMub3JpZ2luYWxFdmVudDtcblxuXHRcdHRoaXMuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQgPSByZXR1cm5UcnVlO1xuXG5cdFx0aWYgKCBlICYmICF0aGlzLmlzU2ltdWxhdGVkICkge1xuXHRcdFx0ZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcblx0XHR9XG5cblx0XHR0aGlzLnN0b3BQcm9wYWdhdGlvbigpO1xuXHR9XG59O1xuXG4vLyBJbmNsdWRlcyBhbGwgY29tbW9uIGV2ZW50IHByb3BzIGluY2x1ZGluZyBLZXlFdmVudCBhbmQgTW91c2VFdmVudCBzcGVjaWZpYyBwcm9wc1xualF1ZXJ5LmVhY2goIHtcblx0YWx0S2V5OiB0cnVlLFxuXHRidWJibGVzOiB0cnVlLFxuXHRjYW5jZWxhYmxlOiB0cnVlLFxuXHRjaGFuZ2VkVG91Y2hlczogdHJ1ZSxcblx0Y3RybEtleTogdHJ1ZSxcblx0ZGV0YWlsOiB0cnVlLFxuXHRldmVudFBoYXNlOiB0cnVlLFxuXHRtZXRhS2V5OiB0cnVlLFxuXHRwYWdlWDogdHJ1ZSxcblx0cGFnZVk6IHRydWUsXG5cdHNoaWZ0S2V5OiB0cnVlLFxuXHR2aWV3OiB0cnVlLFxuXHRcImNoYXJcIjogdHJ1ZSxcblx0Y29kZTogdHJ1ZSxcblx0Y2hhckNvZGU6IHRydWUsXG5cdGtleTogdHJ1ZSxcblx0a2V5Q29kZTogdHJ1ZSxcblx0YnV0dG9uOiB0cnVlLFxuXHRidXR0b25zOiB0cnVlLFxuXHRjbGllbnRYOiB0cnVlLFxuXHRjbGllbnRZOiB0cnVlLFxuXHRvZmZzZXRYOiB0cnVlLFxuXHRvZmZzZXRZOiB0cnVlLFxuXHRwb2ludGVySWQ6IHRydWUsXG5cdHBvaW50ZXJUeXBlOiB0cnVlLFxuXHRzY3JlZW5YOiB0cnVlLFxuXHRzY3JlZW5ZOiB0cnVlLFxuXHR0YXJnZXRUb3VjaGVzOiB0cnVlLFxuXHR0b0VsZW1lbnQ6IHRydWUsXG5cdHRvdWNoZXM6IHRydWUsXG5cblx0d2hpY2g6IGZ1bmN0aW9uKCBldmVudCApIHtcblx0XHR2YXIgYnV0dG9uID0gZXZlbnQuYnV0dG9uO1xuXG5cdFx0Ly8gQWRkIHdoaWNoIGZvciBrZXkgZXZlbnRzXG5cdFx0aWYgKCBldmVudC53aGljaCA9PSBudWxsICYmIHJrZXlFdmVudC50ZXN0KCBldmVudC50eXBlICkgKSB7XG5cdFx0XHRyZXR1cm4gZXZlbnQuY2hhckNvZGUgIT0gbnVsbCA/IGV2ZW50LmNoYXJDb2RlIDogZXZlbnQua2V5Q29kZTtcblx0XHR9XG5cblx0XHQvLyBBZGQgd2hpY2ggZm9yIGNsaWNrOiAxID09PSBsZWZ0OyAyID09PSBtaWRkbGU7IDMgPT09IHJpZ2h0XG5cdFx0aWYgKCAhZXZlbnQud2hpY2ggJiYgYnV0dG9uICE9PSB1bmRlZmluZWQgJiYgcm1vdXNlRXZlbnQudGVzdCggZXZlbnQudHlwZSApICkge1xuXHRcdFx0aWYgKCBidXR0b24gJiAxICkge1xuXHRcdFx0XHRyZXR1cm4gMTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCBidXR0b24gJiAyICkge1xuXHRcdFx0XHRyZXR1cm4gMztcblx0XHRcdH1cblxuXHRcdFx0aWYgKCBidXR0b24gJiA0ICkge1xuXHRcdFx0XHRyZXR1cm4gMjtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIDA7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGV2ZW50LndoaWNoO1xuXHR9XG59LCBqUXVlcnkuZXZlbnQuYWRkUHJvcCApO1xuXG5qUXVlcnkuZWFjaCggeyBmb2N1czogXCJmb2N1c2luXCIsIGJsdXI6IFwiZm9jdXNvdXRcIiB9LCBmdW5jdGlvbiggdHlwZSwgZGVsZWdhdGVUeXBlICkge1xuXHRqUXVlcnkuZXZlbnQuc3BlY2lhbFsgdHlwZSBdID0ge1xuXG5cdFx0Ly8gVXRpbGl6ZSBuYXRpdmUgZXZlbnQgaWYgcG9zc2libGUgc28gYmx1ci9mb2N1cyBzZXF1ZW5jZSBpcyBjb3JyZWN0XG5cdFx0c2V0dXA6IGZ1bmN0aW9uKCkge1xuXG5cdFx0XHQvLyBDbGFpbSB0aGUgZmlyc3QgaGFuZGxlclxuXHRcdFx0Ly8gZGF0YVByaXYuc2V0KCB0aGlzLCBcImZvY3VzXCIsIC4uLiApXG5cdFx0XHQvLyBkYXRhUHJpdi5zZXQoIHRoaXMsIFwiYmx1clwiLCAuLi4gKVxuXHRcdFx0bGV2ZXJhZ2VOYXRpdmUoIHRoaXMsIHR5cGUsIGV4cGVjdFN5bmMgKTtcblxuXHRcdFx0Ly8gUmV0dXJuIGZhbHNlIHRvIGFsbG93IG5vcm1hbCBwcm9jZXNzaW5nIGluIHRoZSBjYWxsZXJcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9LFxuXHRcdHRyaWdnZXI6IGZ1bmN0aW9uKCkge1xuXG5cdFx0XHQvLyBGb3JjZSBzZXR1cCBiZWZvcmUgdHJpZ2dlclxuXHRcdFx0bGV2ZXJhZ2VOYXRpdmUoIHRoaXMsIHR5cGUgKTtcblxuXHRcdFx0Ly8gUmV0dXJuIG5vbi1mYWxzZSB0byBhbGxvdyBub3JtYWwgZXZlbnQtcGF0aCBwcm9wYWdhdGlvblxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fSxcblxuXHRcdGRlbGVnYXRlVHlwZTogZGVsZWdhdGVUeXBlXG5cdH07XG59ICk7XG5cbi8vIENyZWF0ZSBtb3VzZWVudGVyL2xlYXZlIGV2ZW50cyB1c2luZyBtb3VzZW92ZXIvb3V0IGFuZCBldmVudC10aW1lIGNoZWNrc1xuLy8gc28gdGhhdCBldmVudCBkZWxlZ2F0aW9uIHdvcmtzIGluIGpRdWVyeS5cbi8vIERvIHRoZSBzYW1lIGZvciBwb2ludGVyZW50ZXIvcG9pbnRlcmxlYXZlIGFuZCBwb2ludGVyb3Zlci9wb2ludGVyb3V0XG4vL1xuLy8gU3VwcG9ydDogU2FmYXJpIDcgb25seVxuLy8gU2FmYXJpIHNlbmRzIG1vdXNlZW50ZXIgdG9vIG9mdGVuOyBzZWU6XG4vLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD00NzAyNThcbi8vIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIGJ1ZyAoaXQgZXhpc3RlZCBpbiBvbGRlciBDaHJvbWUgdmVyc2lvbnMgYXMgd2VsbCkuXG5qUXVlcnkuZWFjaCgge1xuXHRtb3VzZWVudGVyOiBcIm1vdXNlb3ZlclwiLFxuXHRtb3VzZWxlYXZlOiBcIm1vdXNlb3V0XCIsXG5cdHBvaW50ZXJlbnRlcjogXCJwb2ludGVyb3ZlclwiLFxuXHRwb2ludGVybGVhdmU6IFwicG9pbnRlcm91dFwiXG59LCBmdW5jdGlvbiggb3JpZywgZml4ICkge1xuXHRqUXVlcnkuZXZlbnQuc3BlY2lhbFsgb3JpZyBdID0ge1xuXHRcdGRlbGVnYXRlVHlwZTogZml4LFxuXHRcdGJpbmRUeXBlOiBmaXgsXG5cblx0XHRoYW5kbGU6IGZ1bmN0aW9uKCBldmVudCApIHtcblx0XHRcdHZhciByZXQsXG5cdFx0XHRcdHRhcmdldCA9IHRoaXMsXG5cdFx0XHRcdHJlbGF0ZWQgPSBldmVudC5yZWxhdGVkVGFyZ2V0LFxuXHRcdFx0XHRoYW5kbGVPYmogPSBldmVudC5oYW5kbGVPYmo7XG5cblx0XHRcdC8vIEZvciBtb3VzZWVudGVyL2xlYXZlIGNhbGwgdGhlIGhhbmRsZXIgaWYgcmVsYXRlZCBpcyBvdXRzaWRlIHRoZSB0YXJnZXQuXG5cdFx0XHQvLyBOQjogTm8gcmVsYXRlZFRhcmdldCBpZiB0aGUgbW91c2UgbGVmdC9lbnRlcmVkIHRoZSBicm93c2VyIHdpbmRvd1xuXHRcdFx0aWYgKCAhcmVsYXRlZCB8fCAoIHJlbGF0ZWQgIT09IHRhcmdldCAmJiAhalF1ZXJ5LmNvbnRhaW5zKCB0YXJnZXQsIHJlbGF0ZWQgKSApICkge1xuXHRcdFx0XHRldmVudC50eXBlID0gaGFuZGxlT2JqLm9yaWdUeXBlO1xuXHRcdFx0XHRyZXQgPSBoYW5kbGVPYmouaGFuZGxlci5hcHBseSggdGhpcywgYXJndW1lbnRzICk7XG5cdFx0XHRcdGV2ZW50LnR5cGUgPSBmaXg7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gcmV0O1xuXHRcdH1cblx0fTtcbn0gKTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXG5cdG9uOiBmdW5jdGlvbiggdHlwZXMsIHNlbGVjdG9yLCBkYXRhLCBmbiApIHtcblx0XHRyZXR1cm4gb24oIHRoaXMsIHR5cGVzLCBzZWxlY3RvciwgZGF0YSwgZm4gKTtcblx0fSxcblx0b25lOiBmdW5jdGlvbiggdHlwZXMsIHNlbGVjdG9yLCBkYXRhLCBmbiApIHtcblx0XHRyZXR1cm4gb24oIHRoaXMsIHR5cGVzLCBzZWxlY3RvciwgZGF0YSwgZm4sIDEgKTtcblx0fSxcblx0b2ZmOiBmdW5jdGlvbiggdHlwZXMsIHNlbGVjdG9yLCBmbiApIHtcblx0XHR2YXIgaGFuZGxlT2JqLCB0eXBlO1xuXHRcdGlmICggdHlwZXMgJiYgdHlwZXMucHJldmVudERlZmF1bHQgJiYgdHlwZXMuaGFuZGxlT2JqICkge1xuXG5cdFx0XHQvLyAoIGV2ZW50ICkgIGRpc3BhdGNoZWQgalF1ZXJ5LkV2ZW50XG5cdFx0XHRoYW5kbGVPYmogPSB0eXBlcy5oYW5kbGVPYmo7XG5cdFx0XHRqUXVlcnkoIHR5cGVzLmRlbGVnYXRlVGFyZ2V0ICkub2ZmKFxuXHRcdFx0XHRoYW5kbGVPYmoubmFtZXNwYWNlID9cblx0XHRcdFx0XHRoYW5kbGVPYmoub3JpZ1R5cGUgKyBcIi5cIiArIGhhbmRsZU9iai5uYW1lc3BhY2UgOlxuXHRcdFx0XHRcdGhhbmRsZU9iai5vcmlnVHlwZSxcblx0XHRcdFx0aGFuZGxlT2JqLnNlbGVjdG9yLFxuXHRcdFx0XHRoYW5kbGVPYmouaGFuZGxlclxuXHRcdFx0KTtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblx0XHRpZiAoIHR5cGVvZiB0eXBlcyA9PT0gXCJvYmplY3RcIiApIHtcblxuXHRcdFx0Ly8gKCB0eXBlcy1vYmplY3QgWywgc2VsZWN0b3JdIClcblx0XHRcdGZvciAoIHR5cGUgaW4gdHlwZXMgKSB7XG5cdFx0XHRcdHRoaXMub2ZmKCB0eXBlLCBzZWxlY3RvciwgdHlwZXNbIHR5cGUgXSApO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXHRcdGlmICggc2VsZWN0b3IgPT09IGZhbHNlIHx8IHR5cGVvZiBzZWxlY3RvciA9PT0gXCJmdW5jdGlvblwiICkge1xuXG5cdFx0XHQvLyAoIHR5cGVzIFssIGZuXSApXG5cdFx0XHRmbiA9IHNlbGVjdG9yO1xuXHRcdFx0c2VsZWN0b3IgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdGlmICggZm4gPT09IGZhbHNlICkge1xuXHRcdFx0Zm4gPSByZXR1cm5GYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRqUXVlcnkuZXZlbnQucmVtb3ZlKCB0aGlzLCB0eXBlcywgZm4sIHNlbGVjdG9yICk7XG5cdFx0fSApO1xuXHR9XG59ICk7XG5cblxudmFyXG5cblx0LyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiAqL1xuXG5cdC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vZXNsaW50L2VzbGludC9pc3N1ZXMvMzIyOVxuXHRyeGh0bWxUYWcgPSAvPCg/IWFyZWF8YnJ8Y29sfGVtYmVkfGhyfGltZ3xpbnB1dHxsaW5rfG1ldGF8cGFyYW0pKChbYS16XVteXFwvXFwwPlxceDIwXFx0XFxyXFxuXFxmXSopW14+XSopXFwvPi9naSxcblxuXHQvKiBlc2xpbnQtZW5hYmxlICovXG5cblx0Ly8gU3VwcG9ydDogSUUgPD0xMCAtIDExLCBFZGdlIDEyIC0gMTMgb25seVxuXHQvLyBJbiBJRS9FZGdlIHVzaW5nIHJlZ2V4IGdyb3VwcyBoZXJlIGNhdXNlcyBzZXZlcmUgc2xvd2Rvd25zLlxuXHQvLyBTZWUgaHR0cHM6Ly9jb25uZWN0Lm1pY3Jvc29mdC5jb20vSUUvZmVlZGJhY2svZGV0YWlscy8xNzM2NTEyL1xuXHRybm9Jbm5lcmh0bWwgPSAvPHNjcmlwdHw8c3R5bGV8PGxpbmsvaSxcblxuXHQvLyBjaGVja2VkPVwiY2hlY2tlZFwiIG9yIGNoZWNrZWRcblx0cmNoZWNrZWQgPSAvY2hlY2tlZFxccyooPzpbXj1dfD1cXHMqLmNoZWNrZWQuKS9pLFxuXHRyY2xlYW5TY3JpcHQgPSAvXlxccyo8ISg/OlxcW0NEQVRBXFxbfC0tKXwoPzpcXF1cXF18LS0pPlxccyokL2c7XG5cbi8vIFByZWZlciBhIHRib2R5IG92ZXIgaXRzIHBhcmVudCB0YWJsZSBmb3IgY29udGFpbmluZyBuZXcgcm93c1xuZnVuY3Rpb24gbWFuaXB1bGF0aW9uVGFyZ2V0KCBlbGVtLCBjb250ZW50ICkge1xuXHRpZiAoIG5vZGVOYW1lKCBlbGVtLCBcInRhYmxlXCIgKSAmJlxuXHRcdG5vZGVOYW1lKCBjb250ZW50Lm5vZGVUeXBlICE9PSAxMSA/IGNvbnRlbnQgOiBjb250ZW50LmZpcnN0Q2hpbGQsIFwidHJcIiApICkge1xuXG5cdFx0cmV0dXJuIGpRdWVyeSggZWxlbSApLmNoaWxkcmVuKCBcInRib2R5XCIgKVsgMCBdIHx8IGVsZW07XG5cdH1cblxuXHRyZXR1cm4gZWxlbTtcbn1cblxuLy8gUmVwbGFjZS9yZXN0b3JlIHRoZSB0eXBlIGF0dHJpYnV0ZSBvZiBzY3JpcHQgZWxlbWVudHMgZm9yIHNhZmUgRE9NIG1hbmlwdWxhdGlvblxuZnVuY3Rpb24gZGlzYWJsZVNjcmlwdCggZWxlbSApIHtcblx0ZWxlbS50eXBlID0gKCBlbGVtLmdldEF0dHJpYnV0ZSggXCJ0eXBlXCIgKSAhPT0gbnVsbCApICsgXCIvXCIgKyBlbGVtLnR5cGU7XG5cdHJldHVybiBlbGVtO1xufVxuZnVuY3Rpb24gcmVzdG9yZVNjcmlwdCggZWxlbSApIHtcblx0aWYgKCAoIGVsZW0udHlwZSB8fCBcIlwiICkuc2xpY2UoIDAsIDUgKSA9PT0gXCJ0cnVlL1wiICkge1xuXHRcdGVsZW0udHlwZSA9IGVsZW0udHlwZS5zbGljZSggNSApO1xuXHR9IGVsc2Uge1xuXHRcdGVsZW0ucmVtb3ZlQXR0cmlidXRlKCBcInR5cGVcIiApO1xuXHR9XG5cblx0cmV0dXJuIGVsZW07XG59XG5cbmZ1bmN0aW9uIGNsb25lQ29weUV2ZW50KCBzcmMsIGRlc3QgKSB7XG5cdHZhciBpLCBsLCB0eXBlLCBwZGF0YU9sZCwgcGRhdGFDdXIsIHVkYXRhT2xkLCB1ZGF0YUN1ciwgZXZlbnRzO1xuXG5cdGlmICggZGVzdC5ub2RlVHlwZSAhPT0gMSApIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHQvLyAxLiBDb3B5IHByaXZhdGUgZGF0YTogZXZlbnRzLCBoYW5kbGVycywgZXRjLlxuXHRpZiAoIGRhdGFQcml2Lmhhc0RhdGEoIHNyYyApICkge1xuXHRcdHBkYXRhT2xkID0gZGF0YVByaXYuYWNjZXNzKCBzcmMgKTtcblx0XHRwZGF0YUN1ciA9IGRhdGFQcml2LnNldCggZGVzdCwgcGRhdGFPbGQgKTtcblx0XHRldmVudHMgPSBwZGF0YU9sZC5ldmVudHM7XG5cblx0XHRpZiAoIGV2ZW50cyApIHtcblx0XHRcdGRlbGV0ZSBwZGF0YUN1ci5oYW5kbGU7XG5cdFx0XHRwZGF0YUN1ci5ldmVudHMgPSB7fTtcblxuXHRcdFx0Zm9yICggdHlwZSBpbiBldmVudHMgKSB7XG5cdFx0XHRcdGZvciAoIGkgPSAwLCBsID0gZXZlbnRzWyB0eXBlIF0ubGVuZ3RoOyBpIDwgbDsgaSsrICkge1xuXHRcdFx0XHRcdGpRdWVyeS5ldmVudC5hZGQoIGRlc3QsIHR5cGUsIGV2ZW50c1sgdHlwZSBdWyBpIF0gKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIDIuIENvcHkgdXNlciBkYXRhXG5cdGlmICggZGF0YVVzZXIuaGFzRGF0YSggc3JjICkgKSB7XG5cdFx0dWRhdGFPbGQgPSBkYXRhVXNlci5hY2Nlc3MoIHNyYyApO1xuXHRcdHVkYXRhQ3VyID0galF1ZXJ5LmV4dGVuZCgge30sIHVkYXRhT2xkICk7XG5cblx0XHRkYXRhVXNlci5zZXQoIGRlc3QsIHVkYXRhQ3VyICk7XG5cdH1cbn1cblxuLy8gRml4IElFIGJ1Z3MsIHNlZSBzdXBwb3J0IHRlc3RzXG5mdW5jdGlvbiBmaXhJbnB1dCggc3JjLCBkZXN0ICkge1xuXHR2YXIgbm9kZU5hbWUgPSBkZXN0Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG5cblx0Ly8gRmFpbHMgdG8gcGVyc2lzdCB0aGUgY2hlY2tlZCBzdGF0ZSBvZiBhIGNsb25lZCBjaGVja2JveCBvciByYWRpbyBidXR0b24uXG5cdGlmICggbm9kZU5hbWUgPT09IFwiaW5wdXRcIiAmJiByY2hlY2thYmxlVHlwZS50ZXN0KCBzcmMudHlwZSApICkge1xuXHRcdGRlc3QuY2hlY2tlZCA9IHNyYy5jaGVja2VkO1xuXG5cdC8vIEZhaWxzIHRvIHJldHVybiB0aGUgc2VsZWN0ZWQgb3B0aW9uIHRvIHRoZSBkZWZhdWx0IHNlbGVjdGVkIHN0YXRlIHdoZW4gY2xvbmluZyBvcHRpb25zXG5cdH0gZWxzZSBpZiAoIG5vZGVOYW1lID09PSBcImlucHV0XCIgfHwgbm9kZU5hbWUgPT09IFwidGV4dGFyZWFcIiApIHtcblx0XHRkZXN0LmRlZmF1bHRWYWx1ZSA9IHNyYy5kZWZhdWx0VmFsdWU7XG5cdH1cbn1cblxuZnVuY3Rpb24gZG9tTWFuaXAoIGNvbGxlY3Rpb24sIGFyZ3MsIGNhbGxiYWNrLCBpZ25vcmVkICkge1xuXG5cdC8vIEZsYXR0ZW4gYW55IG5lc3RlZCBhcnJheXNcblx0YXJncyA9IGNvbmNhdC5hcHBseSggW10sIGFyZ3MgKTtcblxuXHR2YXIgZnJhZ21lbnQsIGZpcnN0LCBzY3JpcHRzLCBoYXNTY3JpcHRzLCBub2RlLCBkb2MsXG5cdFx0aSA9IDAsXG5cdFx0bCA9IGNvbGxlY3Rpb24ubGVuZ3RoLFxuXHRcdGlOb0Nsb25lID0gbCAtIDEsXG5cdFx0dmFsdWUgPSBhcmdzWyAwIF0sXG5cdFx0dmFsdWVJc0Z1bmN0aW9uID0gaXNGdW5jdGlvbiggdmFsdWUgKTtcblxuXHQvLyBXZSBjYW4ndCBjbG9uZU5vZGUgZnJhZ21lbnRzIHRoYXQgY29udGFpbiBjaGVja2VkLCBpbiBXZWJLaXRcblx0aWYgKCB2YWx1ZUlzRnVuY3Rpb24gfHxcblx0XHRcdCggbCA+IDEgJiYgdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiICYmXG5cdFx0XHRcdCFzdXBwb3J0LmNoZWNrQ2xvbmUgJiYgcmNoZWNrZWQudGVzdCggdmFsdWUgKSApICkge1xuXHRcdHJldHVybiBjb2xsZWN0aW9uLmVhY2goIGZ1bmN0aW9uKCBpbmRleCApIHtcblx0XHRcdHZhciBzZWxmID0gY29sbGVjdGlvbi5lcSggaW5kZXggKTtcblx0XHRcdGlmICggdmFsdWVJc0Z1bmN0aW9uICkge1xuXHRcdFx0XHRhcmdzWyAwIF0gPSB2YWx1ZS5jYWxsKCB0aGlzLCBpbmRleCwgc2VsZi5odG1sKCkgKTtcblx0XHRcdH1cblx0XHRcdGRvbU1hbmlwKCBzZWxmLCBhcmdzLCBjYWxsYmFjaywgaWdub3JlZCApO1xuXHRcdH0gKTtcblx0fVxuXG5cdGlmICggbCApIHtcblx0XHRmcmFnbWVudCA9IGJ1aWxkRnJhZ21lbnQoIGFyZ3MsIGNvbGxlY3Rpb25bIDAgXS5vd25lckRvY3VtZW50LCBmYWxzZSwgY29sbGVjdGlvbiwgaWdub3JlZCApO1xuXHRcdGZpcnN0ID0gZnJhZ21lbnQuZmlyc3RDaGlsZDtcblxuXHRcdGlmICggZnJhZ21lbnQuY2hpbGROb2Rlcy5sZW5ndGggPT09IDEgKSB7XG5cdFx0XHRmcmFnbWVudCA9IGZpcnN0O1xuXHRcdH1cblxuXHRcdC8vIFJlcXVpcmUgZWl0aGVyIG5ldyBjb250ZW50IG9yIGFuIGludGVyZXN0IGluIGlnbm9yZWQgZWxlbWVudHMgdG8gaW52b2tlIHRoZSBjYWxsYmFja1xuXHRcdGlmICggZmlyc3QgfHwgaWdub3JlZCApIHtcblx0XHRcdHNjcmlwdHMgPSBqUXVlcnkubWFwKCBnZXRBbGwoIGZyYWdtZW50LCBcInNjcmlwdFwiICksIGRpc2FibGVTY3JpcHQgKTtcblx0XHRcdGhhc1NjcmlwdHMgPSBzY3JpcHRzLmxlbmd0aDtcblxuXHRcdFx0Ly8gVXNlIHRoZSBvcmlnaW5hbCBmcmFnbWVudCBmb3IgdGhlIGxhc3QgaXRlbVxuXHRcdFx0Ly8gaW5zdGVhZCBvZiB0aGUgZmlyc3QgYmVjYXVzZSBpdCBjYW4gZW5kIHVwXG5cdFx0XHQvLyBiZWluZyBlbXB0aWVkIGluY29ycmVjdGx5IGluIGNlcnRhaW4gc2l0dWF0aW9ucyAoIzgwNzApLlxuXHRcdFx0Zm9yICggOyBpIDwgbDsgaSsrICkge1xuXHRcdFx0XHRub2RlID0gZnJhZ21lbnQ7XG5cblx0XHRcdFx0aWYgKCBpICE9PSBpTm9DbG9uZSApIHtcblx0XHRcdFx0XHRub2RlID0galF1ZXJ5LmNsb25lKCBub2RlLCB0cnVlLCB0cnVlICk7XG5cblx0XHRcdFx0XHQvLyBLZWVwIHJlZmVyZW5jZXMgdG8gY2xvbmVkIHNjcmlwdHMgZm9yIGxhdGVyIHJlc3RvcmF0aW9uXG5cdFx0XHRcdFx0aWYgKCBoYXNTY3JpcHRzICkge1xuXG5cdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBBbmRyb2lkIDw9NC4wIG9ubHksIFBoYW50b21KUyAxIG9ubHlcblx0XHRcdFx0XHRcdC8vIHB1c2guYXBwbHkoXywgYXJyYXlsaWtlKSB0aHJvd3Mgb24gYW5jaWVudCBXZWJLaXRcblx0XHRcdFx0XHRcdGpRdWVyeS5tZXJnZSggc2NyaXB0cywgZ2V0QWxsKCBub2RlLCBcInNjcmlwdFwiICkgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjYWxsYmFjay5jYWxsKCBjb2xsZWN0aW9uWyBpIF0sIG5vZGUsIGkgKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCBoYXNTY3JpcHRzICkge1xuXHRcdFx0XHRkb2MgPSBzY3JpcHRzWyBzY3JpcHRzLmxlbmd0aCAtIDEgXS5vd25lckRvY3VtZW50O1xuXG5cdFx0XHRcdC8vIFJlZW5hYmxlIHNjcmlwdHNcblx0XHRcdFx0alF1ZXJ5Lm1hcCggc2NyaXB0cywgcmVzdG9yZVNjcmlwdCApO1xuXG5cdFx0XHRcdC8vIEV2YWx1YXRlIGV4ZWN1dGFibGUgc2NyaXB0cyBvbiBmaXJzdCBkb2N1bWVudCBpbnNlcnRpb25cblx0XHRcdFx0Zm9yICggaSA9IDA7IGkgPCBoYXNTY3JpcHRzOyBpKysgKSB7XG5cdFx0XHRcdFx0bm9kZSA9IHNjcmlwdHNbIGkgXTtcblx0XHRcdFx0XHRpZiAoIHJzY3JpcHRUeXBlLnRlc3QoIG5vZGUudHlwZSB8fCBcIlwiICkgJiZcblx0XHRcdFx0XHRcdCFkYXRhUHJpdi5hY2Nlc3MoIG5vZGUsIFwiZ2xvYmFsRXZhbFwiICkgJiZcblx0XHRcdFx0XHRcdGpRdWVyeS5jb250YWlucyggZG9jLCBub2RlICkgKSB7XG5cblx0XHRcdFx0XHRcdGlmICggbm9kZS5zcmMgJiYgKCBub2RlLnR5cGUgfHwgXCJcIiApLnRvTG93ZXJDYXNlKCkgICE9PSBcIm1vZHVsZVwiICkge1xuXG5cdFx0XHRcdFx0XHRcdC8vIE9wdGlvbmFsIEFKQVggZGVwZW5kZW5jeSwgYnV0IHdvbid0IHJ1biBzY3JpcHRzIGlmIG5vdCBwcmVzZW50XG5cdFx0XHRcdFx0XHRcdGlmICggalF1ZXJ5Ll9ldmFsVXJsICYmICFub2RlLm5vTW9kdWxlICkge1xuXHRcdFx0XHRcdFx0XHRcdGpRdWVyeS5fZXZhbFVybCggbm9kZS5zcmMsIHtcblx0XHRcdFx0XHRcdFx0XHRcdG5vbmNlOiBub2RlLm5vbmNlIHx8IG5vZGUuZ2V0QXR0cmlidXRlKCBcIm5vbmNlXCIgKVxuXHRcdFx0XHRcdFx0XHRcdH0gKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0RE9NRXZhbCggbm9kZS50ZXh0Q29udGVudC5yZXBsYWNlKCByY2xlYW5TY3JpcHQsIFwiXCIgKSwgbm9kZSwgZG9jICk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGNvbGxlY3Rpb247XG59XG5cbmZ1bmN0aW9uIHJlbW92ZSggZWxlbSwgc2VsZWN0b3IsIGtlZXBEYXRhICkge1xuXHR2YXIgbm9kZSxcblx0XHRub2RlcyA9IHNlbGVjdG9yID8galF1ZXJ5LmZpbHRlciggc2VsZWN0b3IsIGVsZW0gKSA6IGVsZW0sXG5cdFx0aSA9IDA7XG5cblx0Zm9yICggOyAoIG5vZGUgPSBub2Rlc1sgaSBdICkgIT0gbnVsbDsgaSsrICkge1xuXHRcdGlmICggIWtlZXBEYXRhICYmIG5vZGUubm9kZVR5cGUgPT09IDEgKSB7XG5cdFx0XHRqUXVlcnkuY2xlYW5EYXRhKCBnZXRBbGwoIG5vZGUgKSApO1xuXHRcdH1cblxuXHRcdGlmICggbm9kZS5wYXJlbnROb2RlICkge1xuXHRcdFx0aWYgKCBrZWVwRGF0YSAmJiBpc0F0dGFjaGVkKCBub2RlICkgKSB7XG5cdFx0XHRcdHNldEdsb2JhbEV2YWwoIGdldEFsbCggbm9kZSwgXCJzY3JpcHRcIiApICk7XG5cdFx0XHR9XG5cdFx0XHRub2RlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoIG5vZGUgKTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gZWxlbTtcbn1cblxualF1ZXJ5LmV4dGVuZCgge1xuXHRodG1sUHJlZmlsdGVyOiBmdW5jdGlvbiggaHRtbCApIHtcblx0XHRyZXR1cm4gaHRtbC5yZXBsYWNlKCByeGh0bWxUYWcsIFwiPCQxPjwvJDI+XCIgKTtcblx0fSxcblxuXHRjbG9uZTogZnVuY3Rpb24oIGVsZW0sIGRhdGFBbmRFdmVudHMsIGRlZXBEYXRhQW5kRXZlbnRzICkge1xuXHRcdHZhciBpLCBsLCBzcmNFbGVtZW50cywgZGVzdEVsZW1lbnRzLFxuXHRcdFx0Y2xvbmUgPSBlbGVtLmNsb25lTm9kZSggdHJ1ZSApLFxuXHRcdFx0aW5QYWdlID0gaXNBdHRhY2hlZCggZWxlbSApO1xuXG5cdFx0Ly8gRml4IElFIGNsb25pbmcgaXNzdWVzXG5cdFx0aWYgKCAhc3VwcG9ydC5ub0Nsb25lQ2hlY2tlZCAmJiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgfHwgZWxlbS5ub2RlVHlwZSA9PT0gMTEgKSAmJlxuXHRcdFx0XHQhalF1ZXJ5LmlzWE1MRG9jKCBlbGVtICkgKSB7XG5cblx0XHRcdC8vIFdlIGVzY2hldyBTaXp6bGUgaGVyZSBmb3IgcGVyZm9ybWFuY2UgcmVhc29uczogaHR0cHM6Ly9qc3BlcmYuY29tL2dldGFsbC12cy1zaXp6bGUvMlxuXHRcdFx0ZGVzdEVsZW1lbnRzID0gZ2V0QWxsKCBjbG9uZSApO1xuXHRcdFx0c3JjRWxlbWVudHMgPSBnZXRBbGwoIGVsZW0gKTtcblxuXHRcdFx0Zm9yICggaSA9IDAsIGwgPSBzcmNFbGVtZW50cy5sZW5ndGg7IGkgPCBsOyBpKysgKSB7XG5cdFx0XHRcdGZpeElucHV0KCBzcmNFbGVtZW50c1sgaSBdLCBkZXN0RWxlbWVudHNbIGkgXSApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIENvcHkgdGhlIGV2ZW50cyBmcm9tIHRoZSBvcmlnaW5hbCB0byB0aGUgY2xvbmVcblx0XHRpZiAoIGRhdGFBbmRFdmVudHMgKSB7XG5cdFx0XHRpZiAoIGRlZXBEYXRhQW5kRXZlbnRzICkge1xuXHRcdFx0XHRzcmNFbGVtZW50cyA9IHNyY0VsZW1lbnRzIHx8IGdldEFsbCggZWxlbSApO1xuXHRcdFx0XHRkZXN0RWxlbWVudHMgPSBkZXN0RWxlbWVudHMgfHwgZ2V0QWxsKCBjbG9uZSApO1xuXG5cdFx0XHRcdGZvciAoIGkgPSAwLCBsID0gc3JjRWxlbWVudHMubGVuZ3RoOyBpIDwgbDsgaSsrICkge1xuXHRcdFx0XHRcdGNsb25lQ29weUV2ZW50KCBzcmNFbGVtZW50c1sgaSBdLCBkZXN0RWxlbWVudHNbIGkgXSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjbG9uZUNvcHlFdmVudCggZWxlbSwgY2xvbmUgKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBQcmVzZXJ2ZSBzY3JpcHQgZXZhbHVhdGlvbiBoaXN0b3J5XG5cdFx0ZGVzdEVsZW1lbnRzID0gZ2V0QWxsKCBjbG9uZSwgXCJzY3JpcHRcIiApO1xuXHRcdGlmICggZGVzdEVsZW1lbnRzLmxlbmd0aCA+IDAgKSB7XG5cdFx0XHRzZXRHbG9iYWxFdmFsKCBkZXN0RWxlbWVudHMsICFpblBhZ2UgJiYgZ2V0QWxsKCBlbGVtLCBcInNjcmlwdFwiICkgKTtcblx0XHR9XG5cblx0XHQvLyBSZXR1cm4gdGhlIGNsb25lZCBzZXRcblx0XHRyZXR1cm4gY2xvbmU7XG5cdH0sXG5cblx0Y2xlYW5EYXRhOiBmdW5jdGlvbiggZWxlbXMgKSB7XG5cdFx0dmFyIGRhdGEsIGVsZW0sIHR5cGUsXG5cdFx0XHRzcGVjaWFsID0galF1ZXJ5LmV2ZW50LnNwZWNpYWwsXG5cdFx0XHRpID0gMDtcblxuXHRcdGZvciAoIDsgKCBlbGVtID0gZWxlbXNbIGkgXSApICE9PSB1bmRlZmluZWQ7IGkrKyApIHtcblx0XHRcdGlmICggYWNjZXB0RGF0YSggZWxlbSApICkge1xuXHRcdFx0XHRpZiAoICggZGF0YSA9IGVsZW1bIGRhdGFQcml2LmV4cGFuZG8gXSApICkge1xuXHRcdFx0XHRcdGlmICggZGF0YS5ldmVudHMgKSB7XG5cdFx0XHRcdFx0XHRmb3IgKCB0eXBlIGluIGRhdGEuZXZlbnRzICkge1xuXHRcdFx0XHRcdFx0XHRpZiAoIHNwZWNpYWxbIHR5cGUgXSApIHtcblx0XHRcdFx0XHRcdFx0XHRqUXVlcnkuZXZlbnQucmVtb3ZlKCBlbGVtLCB0eXBlICk7XG5cblx0XHRcdFx0XHRcdFx0Ly8gVGhpcyBpcyBhIHNob3J0Y3V0IHRvIGF2b2lkIGpRdWVyeS5ldmVudC5yZW1vdmUncyBvdmVyaGVhZFxuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdGpRdWVyeS5yZW1vdmVFdmVudCggZWxlbSwgdHlwZSwgZGF0YS5oYW5kbGUgKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIFN1cHBvcnQ6IENocm9tZSA8PTM1IC0gNDUrXG5cdFx0XHRcdFx0Ly8gQXNzaWduIHVuZGVmaW5lZCBpbnN0ZWFkIG9mIHVzaW5nIGRlbGV0ZSwgc2VlIERhdGEjcmVtb3ZlXG5cdFx0XHRcdFx0ZWxlbVsgZGF0YVByaXYuZXhwYW5kbyBdID0gdW5kZWZpbmVkO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICggZWxlbVsgZGF0YVVzZXIuZXhwYW5kbyBdICkge1xuXG5cdFx0XHRcdFx0Ly8gU3VwcG9ydDogQ2hyb21lIDw9MzUgLSA0NStcblx0XHRcdFx0XHQvLyBBc3NpZ24gdW5kZWZpbmVkIGluc3RlYWQgb2YgdXNpbmcgZGVsZXRlLCBzZWUgRGF0YSNyZW1vdmVcblx0XHRcdFx0XHRlbGVtWyBkYXRhVXNlci5leHBhbmRvIF0gPSB1bmRlZmluZWQ7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cbn0gKTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRkZXRhY2g6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHRyZXR1cm4gcmVtb3ZlKCB0aGlzLCBzZWxlY3RvciwgdHJ1ZSApO1xuXHR9LFxuXG5cdHJlbW92ZTogZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdHJldHVybiByZW1vdmUoIHRoaXMsIHNlbGVjdG9yICk7XG5cdH0sXG5cblx0dGV4dDogZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdHJldHVybiBhY2Nlc3MoIHRoaXMsIGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHRcdHJldHVybiB2YWx1ZSA9PT0gdW5kZWZpbmVkID9cblx0XHRcdFx0alF1ZXJ5LnRleHQoIHRoaXMgKSA6XG5cdFx0XHRcdHRoaXMuZW1wdHkoKS5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRpZiAoIHRoaXMubm9kZVR5cGUgPT09IDEgfHwgdGhpcy5ub2RlVHlwZSA9PT0gMTEgfHwgdGhpcy5ub2RlVHlwZSA9PT0gOSApIHtcblx0XHRcdFx0XHRcdHRoaXMudGV4dENvbnRlbnQgPSB2YWx1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gKTtcblx0XHR9LCBudWxsLCB2YWx1ZSwgYXJndW1lbnRzLmxlbmd0aCApO1xuXHR9LFxuXG5cdGFwcGVuZDogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIGRvbU1hbmlwKCB0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0aWYgKCB0aGlzLm5vZGVUeXBlID09PSAxIHx8IHRoaXMubm9kZVR5cGUgPT09IDExIHx8IHRoaXMubm9kZVR5cGUgPT09IDkgKSB7XG5cdFx0XHRcdHZhciB0YXJnZXQgPSBtYW5pcHVsYXRpb25UYXJnZXQoIHRoaXMsIGVsZW0gKTtcblx0XHRcdFx0dGFyZ2V0LmFwcGVuZENoaWxkKCBlbGVtICk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9LFxuXG5cdHByZXBlbmQ6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBkb21NYW5pcCggdGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdGlmICggdGhpcy5ub2RlVHlwZSA9PT0gMSB8fCB0aGlzLm5vZGVUeXBlID09PSAxMSB8fCB0aGlzLm5vZGVUeXBlID09PSA5ICkge1xuXHRcdFx0XHR2YXIgdGFyZ2V0ID0gbWFuaXB1bGF0aW9uVGFyZ2V0KCB0aGlzLCBlbGVtICk7XG5cdFx0XHRcdHRhcmdldC5pbnNlcnRCZWZvcmUoIGVsZW0sIHRhcmdldC5maXJzdENoaWxkICk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9LFxuXG5cdGJlZm9yZTogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIGRvbU1hbmlwKCB0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0aWYgKCB0aGlzLnBhcmVudE5vZGUgKSB7XG5cdFx0XHRcdHRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoIGVsZW0sIHRoaXMgKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH0sXG5cblx0YWZ0ZXI6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBkb21NYW5pcCggdGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdGlmICggdGhpcy5wYXJlbnROb2RlICkge1xuXHRcdFx0XHR0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKCBlbGVtLCB0aGlzLm5leHRTaWJsaW5nICk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9LFxuXG5cdGVtcHR5OiBmdW5jdGlvbigpIHtcblx0XHR2YXIgZWxlbSxcblx0XHRcdGkgPSAwO1xuXG5cdFx0Zm9yICggOyAoIGVsZW0gPSB0aGlzWyBpIF0gKSAhPSBudWxsOyBpKysgKSB7XG5cdFx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7XG5cblx0XHRcdFx0Ly8gUHJldmVudCBtZW1vcnkgbGVha3Ncblx0XHRcdFx0alF1ZXJ5LmNsZWFuRGF0YSggZ2V0QWxsKCBlbGVtLCBmYWxzZSApICk7XG5cblx0XHRcdFx0Ly8gUmVtb3ZlIGFueSByZW1haW5pbmcgbm9kZXNcblx0XHRcdFx0ZWxlbS50ZXh0Q29udGVudCA9IFwiXCI7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Y2xvbmU6IGZ1bmN0aW9uKCBkYXRhQW5kRXZlbnRzLCBkZWVwRGF0YUFuZEV2ZW50cyApIHtcblx0XHRkYXRhQW5kRXZlbnRzID0gZGF0YUFuZEV2ZW50cyA9PSBudWxsID8gZmFsc2UgOiBkYXRhQW5kRXZlbnRzO1xuXHRcdGRlZXBEYXRhQW5kRXZlbnRzID0gZGVlcERhdGFBbmRFdmVudHMgPT0gbnVsbCA/IGRhdGFBbmRFdmVudHMgOiBkZWVwRGF0YUFuZEV2ZW50cztcblxuXHRcdHJldHVybiB0aGlzLm1hcCggZnVuY3Rpb24oKSB7XG5cdFx0XHRyZXR1cm4galF1ZXJ5LmNsb25lKCB0aGlzLCBkYXRhQW5kRXZlbnRzLCBkZWVwRGF0YUFuZEV2ZW50cyApO1xuXHRcdH0gKTtcblx0fSxcblxuXHRodG1sOiBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0cmV0dXJuIGFjY2VzcyggdGhpcywgZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdFx0dmFyIGVsZW0gPSB0aGlzWyAwIF0gfHwge30sXG5cdFx0XHRcdGkgPSAwLFxuXHRcdFx0XHRsID0gdGhpcy5sZW5ndGg7XG5cblx0XHRcdGlmICggdmFsdWUgPT09IHVuZGVmaW5lZCAmJiBlbGVtLm5vZGVUeXBlID09PSAxICkge1xuXHRcdFx0XHRyZXR1cm4gZWxlbS5pbm5lckhUTUw7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFNlZSBpZiB3ZSBjYW4gdGFrZSBhIHNob3J0Y3V0IGFuZCBqdXN0IHVzZSBpbm5lckhUTUxcblx0XHRcdGlmICggdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiICYmICFybm9Jbm5lcmh0bWwudGVzdCggdmFsdWUgKSAmJlxuXHRcdFx0XHQhd3JhcE1hcFsgKCBydGFnTmFtZS5leGVjKCB2YWx1ZSApIHx8IFsgXCJcIiwgXCJcIiBdIClbIDEgXS50b0xvd2VyQ2FzZSgpIF0gKSB7XG5cblx0XHRcdFx0dmFsdWUgPSBqUXVlcnkuaHRtbFByZWZpbHRlciggdmFsdWUgKTtcblxuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdGZvciAoIDsgaSA8IGw7IGkrKyApIHtcblx0XHRcdFx0XHRcdGVsZW0gPSB0aGlzWyBpIF0gfHwge307XG5cblx0XHRcdFx0XHRcdC8vIFJlbW92ZSBlbGVtZW50IG5vZGVzIGFuZCBwcmV2ZW50IG1lbW9yeSBsZWFrc1xuXHRcdFx0XHRcdFx0aWYgKCBlbGVtLm5vZGVUeXBlID09PSAxICkge1xuXHRcdFx0XHRcdFx0XHRqUXVlcnkuY2xlYW5EYXRhKCBnZXRBbGwoIGVsZW0sIGZhbHNlICkgKTtcblx0XHRcdFx0XHRcdFx0ZWxlbS5pbm5lckhUTUwgPSB2YWx1ZTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRlbGVtID0gMDtcblxuXHRcdFx0XHQvLyBJZiB1c2luZyBpbm5lckhUTUwgdGhyb3dzIGFuIGV4Y2VwdGlvbiwgdXNlIHRoZSBmYWxsYmFjayBtZXRob2Rcblx0XHRcdFx0fSBjYXRjaCAoIGUgKSB7fVxuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIGVsZW0gKSB7XG5cdFx0XHRcdHRoaXMuZW1wdHkoKS5hcHBlbmQoIHZhbHVlICk7XG5cdFx0XHR9XG5cdFx0fSwgbnVsbCwgdmFsdWUsIGFyZ3VtZW50cy5sZW5ndGggKTtcblx0fSxcblxuXHRyZXBsYWNlV2l0aDogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGlnbm9yZWQgPSBbXTtcblxuXHRcdC8vIE1ha2UgdGhlIGNoYW5nZXMsIHJlcGxhY2luZyBlYWNoIG5vbi1pZ25vcmVkIGNvbnRleHQgZWxlbWVudCB3aXRoIHRoZSBuZXcgY29udGVudFxuXHRcdHJldHVybiBkb21NYW5pcCggdGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHZhciBwYXJlbnQgPSB0aGlzLnBhcmVudE5vZGU7XG5cblx0XHRcdGlmICggalF1ZXJ5LmluQXJyYXkoIHRoaXMsIGlnbm9yZWQgKSA8IDAgKSB7XG5cdFx0XHRcdGpRdWVyeS5jbGVhbkRhdGEoIGdldEFsbCggdGhpcyApICk7XG5cdFx0XHRcdGlmICggcGFyZW50ICkge1xuXHRcdFx0XHRcdHBhcmVudC5yZXBsYWNlQ2hpbGQoIGVsZW0sIHRoaXMgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0Ly8gRm9yY2UgY2FsbGJhY2sgaW52b2NhdGlvblxuXHRcdH0sIGlnbm9yZWQgKTtcblx0fVxufSApO1xuXG5qUXVlcnkuZWFjaCgge1xuXHRhcHBlbmRUbzogXCJhcHBlbmRcIixcblx0cHJlcGVuZFRvOiBcInByZXBlbmRcIixcblx0aW5zZXJ0QmVmb3JlOiBcImJlZm9yZVwiLFxuXHRpbnNlcnRBZnRlcjogXCJhZnRlclwiLFxuXHRyZXBsYWNlQWxsOiBcInJlcGxhY2VXaXRoXCJcbn0sIGZ1bmN0aW9uKCBuYW1lLCBvcmlnaW5hbCApIHtcblx0alF1ZXJ5LmZuWyBuYW1lIF0gPSBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cdFx0dmFyIGVsZW1zLFxuXHRcdFx0cmV0ID0gW10sXG5cdFx0XHRpbnNlcnQgPSBqUXVlcnkoIHNlbGVjdG9yICksXG5cdFx0XHRsYXN0ID0gaW5zZXJ0Lmxlbmd0aCAtIDEsXG5cdFx0XHRpID0gMDtcblxuXHRcdGZvciAoIDsgaSA8PSBsYXN0OyBpKysgKSB7XG5cdFx0XHRlbGVtcyA9IGkgPT09IGxhc3QgPyB0aGlzIDogdGhpcy5jbG9uZSggdHJ1ZSApO1xuXHRcdFx0alF1ZXJ5KCBpbnNlcnRbIGkgXSApWyBvcmlnaW5hbCBdKCBlbGVtcyApO1xuXG5cdFx0XHQvLyBTdXBwb3J0OiBBbmRyb2lkIDw9NC4wIG9ubHksIFBoYW50b21KUyAxIG9ubHlcblx0XHRcdC8vIC5nZXQoKSBiZWNhdXNlIHB1c2guYXBwbHkoXywgYXJyYXlsaWtlKSB0aHJvd3Mgb24gYW5jaWVudCBXZWJLaXRcblx0XHRcdHB1c2guYXBwbHkoIHJldCwgZWxlbXMuZ2V0KCkgKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soIHJldCApO1xuXHR9O1xufSApO1xudmFyIHJudW1ub25weCA9IG5ldyBSZWdFeHAoIFwiXihcIiArIHBudW0gKyBcIikoPyFweClbYS16JV0rJFwiLCBcImlcIiApO1xuXG52YXIgZ2V0U3R5bGVzID0gZnVuY3Rpb24oIGVsZW0gKSB7XG5cblx0XHQvLyBTdXBwb3J0OiBJRSA8PTExIG9ubHksIEZpcmVmb3ggPD0zMCAoIzE1MDk4LCAjMTQxNTApXG5cdFx0Ly8gSUUgdGhyb3dzIG9uIGVsZW1lbnRzIGNyZWF0ZWQgaW4gcG9wdXBzXG5cdFx0Ly8gRkYgbWVhbndoaWxlIHRocm93cyBvbiBmcmFtZSBlbGVtZW50cyB0aHJvdWdoIFwiZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZVwiXG5cdFx0dmFyIHZpZXcgPSBlbGVtLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXc7XG5cblx0XHRpZiAoICF2aWV3IHx8ICF2aWV3Lm9wZW5lciApIHtcblx0XHRcdHZpZXcgPSB3aW5kb3c7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHZpZXcuZ2V0Q29tcHV0ZWRTdHlsZSggZWxlbSApO1xuXHR9O1xuXG52YXIgcmJveFN0eWxlID0gbmV3IFJlZ0V4cCggY3NzRXhwYW5kLmpvaW4oIFwifFwiICksIFwiaVwiICk7XG5cblxuXG4oIGZ1bmN0aW9uKCkge1xuXG5cdC8vIEV4ZWN1dGluZyBib3RoIHBpeGVsUG9zaXRpb24gJiBib3hTaXppbmdSZWxpYWJsZSB0ZXN0cyByZXF1aXJlIG9ubHkgb25lIGxheW91dFxuXHQvLyBzbyB0aGV5J3JlIGV4ZWN1dGVkIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSB0aGUgc2Vjb25kIGNvbXB1dGF0aW9uLlxuXHRmdW5jdGlvbiBjb21wdXRlU3R5bGVUZXN0cygpIHtcblxuXHRcdC8vIFRoaXMgaXMgYSBzaW5nbGV0b24sIHdlIG5lZWQgdG8gZXhlY3V0ZSBpdCBvbmx5IG9uY2Vcblx0XHRpZiAoICFkaXYgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Y29udGFpbmVyLnN0eWxlLmNzc1RleHQgPSBcInBvc2l0aW9uOmFic29sdXRlO2xlZnQ6LTExMTExcHg7d2lkdGg6NjBweDtcIiArXG5cdFx0XHRcIm1hcmdpbi10b3A6MXB4O3BhZGRpbmc6MDtib3JkZXI6MFwiO1xuXHRcdGRpdi5zdHlsZS5jc3NUZXh0ID1cblx0XHRcdFwicG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3g7b3ZlcmZsb3c6c2Nyb2xsO1wiICtcblx0XHRcdFwibWFyZ2luOmF1dG87Ym9yZGVyOjFweDtwYWRkaW5nOjFweDtcIiArXG5cdFx0XHRcIndpZHRoOjYwJTt0b3A6MSVcIjtcblx0XHRkb2N1bWVudEVsZW1lbnQuYXBwZW5kQ2hpbGQoIGNvbnRhaW5lciApLmFwcGVuZENoaWxkKCBkaXYgKTtcblxuXHRcdHZhciBkaXZTdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKCBkaXYgKTtcblx0XHRwaXhlbFBvc2l0aW9uVmFsID0gZGl2U3R5bGUudG9wICE9PSBcIjElXCI7XG5cblx0XHQvLyBTdXBwb3J0OiBBbmRyb2lkIDQuMCAtIDQuMyBvbmx5LCBGaXJlZm94IDw9MyAtIDQ0XG5cdFx0cmVsaWFibGVNYXJnaW5MZWZ0VmFsID0gcm91bmRQaXhlbE1lYXN1cmVzKCBkaXZTdHlsZS5tYXJnaW5MZWZ0ICkgPT09IDEyO1xuXG5cdFx0Ly8gU3VwcG9ydDogQW5kcm9pZCA0LjAgLSA0LjMgb25seSwgU2FmYXJpIDw9OS4xIC0gMTAuMSwgaU9TIDw9Ny4wIC0gOS4zXG5cdFx0Ly8gU29tZSBzdHlsZXMgY29tZSBiYWNrIHdpdGggcGVyY2VudGFnZSB2YWx1ZXMsIGV2ZW4gdGhvdWdoIHRoZXkgc2hvdWxkbid0XG5cdFx0ZGl2LnN0eWxlLnJpZ2h0ID0gXCI2MCVcIjtcblx0XHRwaXhlbEJveFN0eWxlc1ZhbCA9IHJvdW5kUGl4ZWxNZWFzdXJlcyggZGl2U3R5bGUucmlnaHQgKSA9PT0gMzY7XG5cblx0XHQvLyBTdXBwb3J0OiBJRSA5IC0gMTEgb25seVxuXHRcdC8vIERldGVjdCBtaXNyZXBvcnRpbmcgb2YgY29udGVudCBkaW1lbnNpb25zIGZvciBib3gtc2l6aW5nOmJvcmRlci1ib3ggZWxlbWVudHNcblx0XHRib3hTaXppbmdSZWxpYWJsZVZhbCA9IHJvdW5kUGl4ZWxNZWFzdXJlcyggZGl2U3R5bGUud2lkdGggKSA9PT0gMzY7XG5cblx0XHQvLyBTdXBwb3J0OiBJRSA5IG9ubHlcblx0XHQvLyBEZXRlY3Qgb3ZlcmZsb3c6c2Nyb2xsIHNjcmV3aW5lc3MgKGdoLTM2OTkpXG5cdFx0Ly8gU3VwcG9ydDogQ2hyb21lIDw9NjRcblx0XHQvLyBEb24ndCBnZXQgdHJpY2tlZCB3aGVuIHpvb20gYWZmZWN0cyBvZmZzZXRXaWR0aCAoZ2gtNDAyOSlcblx0XHRkaXYuc3R5bGUucG9zaXRpb24gPSBcImFic29sdXRlXCI7XG5cdFx0c2Nyb2xsYm94U2l6ZVZhbCA9IHJvdW5kUGl4ZWxNZWFzdXJlcyggZGl2Lm9mZnNldFdpZHRoIC8gMyApID09PSAxMjtcblxuXHRcdGRvY3VtZW50RWxlbWVudC5yZW1vdmVDaGlsZCggY29udGFpbmVyICk7XG5cblx0XHQvLyBOdWxsaWZ5IHRoZSBkaXYgc28gaXQgd291bGRuJ3QgYmUgc3RvcmVkIGluIHRoZSBtZW1vcnkgYW5kXG5cdFx0Ly8gaXQgd2lsbCBhbHNvIGJlIGEgc2lnbiB0aGF0IGNoZWNrcyBhbHJlYWR5IHBlcmZvcm1lZFxuXHRcdGRpdiA9IG51bGw7XG5cdH1cblxuXHRmdW5jdGlvbiByb3VuZFBpeGVsTWVhc3VyZXMoIG1lYXN1cmUgKSB7XG5cdFx0cmV0dXJuIE1hdGgucm91bmQoIHBhcnNlRmxvYXQoIG1lYXN1cmUgKSApO1xuXHR9XG5cblx0dmFyIHBpeGVsUG9zaXRpb25WYWwsIGJveFNpemluZ1JlbGlhYmxlVmFsLCBzY3JvbGxib3hTaXplVmFsLCBwaXhlbEJveFN0eWxlc1ZhbCxcblx0XHRyZWxpYWJsZU1hcmdpbkxlZnRWYWwsXG5cdFx0Y29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJkaXZcIiApLFxuXHRcdGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiZGl2XCIgKTtcblxuXHQvLyBGaW5pc2ggZWFybHkgaW4gbGltaXRlZCAobm9uLWJyb3dzZXIpIGVudmlyb25tZW50c1xuXHRpZiAoICFkaXYuc3R5bGUgKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0Ly8gU3VwcG9ydDogSUUgPD05IC0gMTEgb25seVxuXHQvLyBTdHlsZSBvZiBjbG9uZWQgZWxlbWVudCBhZmZlY3RzIHNvdXJjZSBlbGVtZW50IGNsb25lZCAoIzg5MDgpXG5cdGRpdi5zdHlsZS5iYWNrZ3JvdW5kQ2xpcCA9IFwiY29udGVudC1ib3hcIjtcblx0ZGl2LmNsb25lTm9kZSggdHJ1ZSApLnN0eWxlLmJhY2tncm91bmRDbGlwID0gXCJcIjtcblx0c3VwcG9ydC5jbGVhckNsb25lU3R5bGUgPSBkaXYuc3R5bGUuYmFja2dyb3VuZENsaXAgPT09IFwiY29udGVudC1ib3hcIjtcblxuXHRqUXVlcnkuZXh0ZW5kKCBzdXBwb3J0LCB7XG5cdFx0Ym94U2l6aW5nUmVsaWFibGU6IGZ1bmN0aW9uKCkge1xuXHRcdFx0Y29tcHV0ZVN0eWxlVGVzdHMoKTtcblx0XHRcdHJldHVybiBib3hTaXppbmdSZWxpYWJsZVZhbDtcblx0XHR9LFxuXHRcdHBpeGVsQm94U3R5bGVzOiBmdW5jdGlvbigpIHtcblx0XHRcdGNvbXB1dGVTdHlsZVRlc3RzKCk7XG5cdFx0XHRyZXR1cm4gcGl4ZWxCb3hTdHlsZXNWYWw7XG5cdFx0fSxcblx0XHRwaXhlbFBvc2l0aW9uOiBmdW5jdGlvbigpIHtcblx0XHRcdGNvbXB1dGVTdHlsZVRlc3RzKCk7XG5cdFx0XHRyZXR1cm4gcGl4ZWxQb3NpdGlvblZhbDtcblx0XHR9LFxuXHRcdHJlbGlhYmxlTWFyZ2luTGVmdDogZnVuY3Rpb24oKSB7XG5cdFx0XHRjb21wdXRlU3R5bGVUZXN0cygpO1xuXHRcdFx0cmV0dXJuIHJlbGlhYmxlTWFyZ2luTGVmdFZhbDtcblx0XHR9LFxuXHRcdHNjcm9sbGJveFNpemU6IGZ1bmN0aW9uKCkge1xuXHRcdFx0Y29tcHV0ZVN0eWxlVGVzdHMoKTtcblx0XHRcdHJldHVybiBzY3JvbGxib3hTaXplVmFsO1xuXHRcdH1cblx0fSApO1xufSApKCk7XG5cblxuZnVuY3Rpb24gY3VyQ1NTKCBlbGVtLCBuYW1lLCBjb21wdXRlZCApIHtcblx0dmFyIHdpZHRoLCBtaW5XaWR0aCwgbWF4V2lkdGgsIHJldCxcblxuXHRcdC8vIFN1cHBvcnQ6IEZpcmVmb3ggNTErXG5cdFx0Ly8gUmV0cmlldmluZyBzdHlsZSBiZWZvcmUgY29tcHV0ZWQgc29tZWhvd1xuXHRcdC8vIGZpeGVzIGFuIGlzc3VlIHdpdGggZ2V0dGluZyB3cm9uZyB2YWx1ZXNcblx0XHQvLyBvbiBkZXRhY2hlZCBlbGVtZW50c1xuXHRcdHN0eWxlID0gZWxlbS5zdHlsZTtcblxuXHRjb21wdXRlZCA9IGNvbXB1dGVkIHx8IGdldFN0eWxlcyggZWxlbSApO1xuXG5cdC8vIGdldFByb3BlcnR5VmFsdWUgaXMgbmVlZGVkIGZvcjpcblx0Ly8gICAuY3NzKCdmaWx0ZXInKSAoSUUgOSBvbmx5LCAjMTI1MzcpXG5cdC8vICAgLmNzcygnLS1jdXN0b21Qcm9wZXJ0eSkgKCMzMTQ0KVxuXHRpZiAoIGNvbXB1dGVkICkge1xuXHRcdHJldCA9IGNvbXB1dGVkLmdldFByb3BlcnR5VmFsdWUoIG5hbWUgKSB8fCBjb21wdXRlZFsgbmFtZSBdO1xuXG5cdFx0aWYgKCByZXQgPT09IFwiXCIgJiYgIWlzQXR0YWNoZWQoIGVsZW0gKSApIHtcblx0XHRcdHJldCA9IGpRdWVyeS5zdHlsZSggZWxlbSwgbmFtZSApO1xuXHRcdH1cblxuXHRcdC8vIEEgdHJpYnV0ZSB0byB0aGUgXCJhd2Vzb21lIGhhY2sgYnkgRGVhbiBFZHdhcmRzXCJcblx0XHQvLyBBbmRyb2lkIEJyb3dzZXIgcmV0dXJucyBwZXJjZW50YWdlIGZvciBzb21lIHZhbHVlcyxcblx0XHQvLyBidXQgd2lkdGggc2VlbXMgdG8gYmUgcmVsaWFibHkgcGl4ZWxzLlxuXHRcdC8vIFRoaXMgaXMgYWdhaW5zdCB0aGUgQ1NTT00gZHJhZnQgc3BlYzpcblx0XHQvLyBodHRwczovL2RyYWZ0cy5jc3N3Zy5vcmcvY3Nzb20vI3Jlc29sdmVkLXZhbHVlc1xuXHRcdGlmICggIXN1cHBvcnQucGl4ZWxCb3hTdHlsZXMoKSAmJiBybnVtbm9ucHgudGVzdCggcmV0ICkgJiYgcmJveFN0eWxlLnRlc3QoIG5hbWUgKSApIHtcblxuXHRcdFx0Ly8gUmVtZW1iZXIgdGhlIG9yaWdpbmFsIHZhbHVlc1xuXHRcdFx0d2lkdGggPSBzdHlsZS53aWR0aDtcblx0XHRcdG1pbldpZHRoID0gc3R5bGUubWluV2lkdGg7XG5cdFx0XHRtYXhXaWR0aCA9IHN0eWxlLm1heFdpZHRoO1xuXG5cdFx0XHQvLyBQdXQgaW4gdGhlIG5ldyB2YWx1ZXMgdG8gZ2V0IGEgY29tcHV0ZWQgdmFsdWUgb3V0XG5cdFx0XHRzdHlsZS5taW5XaWR0aCA9IHN0eWxlLm1heFdpZHRoID0gc3R5bGUud2lkdGggPSByZXQ7XG5cdFx0XHRyZXQgPSBjb21wdXRlZC53aWR0aDtcblxuXHRcdFx0Ly8gUmV2ZXJ0IHRoZSBjaGFuZ2VkIHZhbHVlc1xuXHRcdFx0c3R5bGUud2lkdGggPSB3aWR0aDtcblx0XHRcdHN0eWxlLm1pbldpZHRoID0gbWluV2lkdGg7XG5cdFx0XHRzdHlsZS5tYXhXaWR0aCA9IG1heFdpZHRoO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiByZXQgIT09IHVuZGVmaW5lZCA/XG5cblx0XHQvLyBTdXBwb3J0OiBJRSA8PTkgLSAxMSBvbmx5XG5cdFx0Ly8gSUUgcmV0dXJucyB6SW5kZXggdmFsdWUgYXMgYW4gaW50ZWdlci5cblx0XHRyZXQgKyBcIlwiIDpcblx0XHRyZXQ7XG59XG5cblxuZnVuY3Rpb24gYWRkR2V0SG9va0lmKCBjb25kaXRpb25GbiwgaG9va0ZuICkge1xuXG5cdC8vIERlZmluZSB0aGUgaG9vaywgd2UnbGwgY2hlY2sgb24gdGhlIGZpcnN0IHJ1biBpZiBpdCdzIHJlYWxseSBuZWVkZWQuXG5cdHJldHVybiB7XG5cdFx0Z2V0OiBmdW5jdGlvbigpIHtcblx0XHRcdGlmICggY29uZGl0aW9uRm4oKSApIHtcblxuXHRcdFx0XHQvLyBIb29rIG5vdCBuZWVkZWQgKG9yIGl0J3Mgbm90IHBvc3NpYmxlIHRvIHVzZSBpdCBkdWVcblx0XHRcdFx0Ly8gdG8gbWlzc2luZyBkZXBlbmRlbmN5KSwgcmVtb3ZlIGl0LlxuXHRcdFx0XHRkZWxldGUgdGhpcy5nZXQ7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gSG9vayBuZWVkZWQ7IHJlZGVmaW5lIGl0IHNvIHRoYXQgdGhlIHN1cHBvcnQgdGVzdCBpcyBub3QgZXhlY3V0ZWQgYWdhaW4uXG5cdFx0XHRyZXR1cm4gKCB0aGlzLmdldCA9IGhvb2tGbiApLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTtcblx0XHR9XG5cdH07XG59XG5cblxudmFyIGNzc1ByZWZpeGVzID0gWyBcIldlYmtpdFwiLCBcIk1velwiLCBcIm1zXCIgXSxcblx0ZW1wdHlTdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiZGl2XCIgKS5zdHlsZSxcblx0dmVuZG9yUHJvcHMgPSB7fTtcblxuLy8gUmV0dXJuIGEgdmVuZG9yLXByZWZpeGVkIHByb3BlcnR5IG9yIHVuZGVmaW5lZFxuZnVuY3Rpb24gdmVuZG9yUHJvcE5hbWUoIG5hbWUgKSB7XG5cblx0Ly8gQ2hlY2sgZm9yIHZlbmRvciBwcmVmaXhlZCBuYW1lc1xuXHR2YXIgY2FwTmFtZSA9IG5hbWVbIDAgXS50b1VwcGVyQ2FzZSgpICsgbmFtZS5zbGljZSggMSApLFxuXHRcdGkgPSBjc3NQcmVmaXhlcy5sZW5ndGg7XG5cblx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0bmFtZSA9IGNzc1ByZWZpeGVzWyBpIF0gKyBjYXBOYW1lO1xuXHRcdGlmICggbmFtZSBpbiBlbXB0eVN0eWxlICkge1xuXHRcdFx0cmV0dXJuIG5hbWU7XG5cdFx0fVxuXHR9XG59XG5cbi8vIFJldHVybiBhIHBvdGVudGlhbGx5LW1hcHBlZCBqUXVlcnkuY3NzUHJvcHMgb3IgdmVuZG9yIHByZWZpeGVkIHByb3BlcnR5XG5mdW5jdGlvbiBmaW5hbFByb3BOYW1lKCBuYW1lICkge1xuXHR2YXIgZmluYWwgPSBqUXVlcnkuY3NzUHJvcHNbIG5hbWUgXSB8fCB2ZW5kb3JQcm9wc1sgbmFtZSBdO1xuXG5cdGlmICggZmluYWwgKSB7XG5cdFx0cmV0dXJuIGZpbmFsO1xuXHR9XG5cdGlmICggbmFtZSBpbiBlbXB0eVN0eWxlICkge1xuXHRcdHJldHVybiBuYW1lO1xuXHR9XG5cdHJldHVybiB2ZW5kb3JQcm9wc1sgbmFtZSBdID0gdmVuZG9yUHJvcE5hbWUoIG5hbWUgKSB8fCBuYW1lO1xufVxuXG5cbnZhclxuXG5cdC8vIFN3YXBwYWJsZSBpZiBkaXNwbGF5IGlzIG5vbmUgb3Igc3RhcnRzIHdpdGggdGFibGVcblx0Ly8gZXhjZXB0IFwidGFibGVcIiwgXCJ0YWJsZS1jZWxsXCIsIG9yIFwidGFibGUtY2FwdGlvblwiXG5cdC8vIFNlZSBoZXJlIGZvciBkaXNwbGF5IHZhbHVlczogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9DU1MvZGlzcGxheVxuXHRyZGlzcGxheXN3YXAgPSAvXihub25lfHRhYmxlKD8hLWNbZWFdKS4rKS8sXG5cdHJjdXN0b21Qcm9wID0gL14tLS8sXG5cdGNzc1Nob3cgPSB7IHBvc2l0aW9uOiBcImFic29sdXRlXCIsIHZpc2liaWxpdHk6IFwiaGlkZGVuXCIsIGRpc3BsYXk6IFwiYmxvY2tcIiB9LFxuXHRjc3NOb3JtYWxUcmFuc2Zvcm0gPSB7XG5cdFx0bGV0dGVyU3BhY2luZzogXCIwXCIsXG5cdFx0Zm9udFdlaWdodDogXCI0MDBcIlxuXHR9O1xuXG5mdW5jdGlvbiBzZXRQb3NpdGl2ZU51bWJlciggZWxlbSwgdmFsdWUsIHN1YnRyYWN0ICkge1xuXG5cdC8vIEFueSByZWxhdGl2ZSAoKy8tKSB2YWx1ZXMgaGF2ZSBhbHJlYWR5IGJlZW5cblx0Ly8gbm9ybWFsaXplZCBhdCB0aGlzIHBvaW50XG5cdHZhciBtYXRjaGVzID0gcmNzc051bS5leGVjKCB2YWx1ZSApO1xuXHRyZXR1cm4gbWF0Y2hlcyA/XG5cblx0XHQvLyBHdWFyZCBhZ2FpbnN0IHVuZGVmaW5lZCBcInN1YnRyYWN0XCIsIGUuZy4sIHdoZW4gdXNlZCBhcyBpbiBjc3NIb29rc1xuXHRcdE1hdGgubWF4KCAwLCBtYXRjaGVzWyAyIF0gLSAoIHN1YnRyYWN0IHx8IDAgKSApICsgKCBtYXRjaGVzWyAzIF0gfHwgXCJweFwiICkgOlxuXHRcdHZhbHVlO1xufVxuXG5mdW5jdGlvbiBib3hNb2RlbEFkanVzdG1lbnQoIGVsZW0sIGRpbWVuc2lvbiwgYm94LCBpc0JvcmRlckJveCwgc3R5bGVzLCBjb21wdXRlZFZhbCApIHtcblx0dmFyIGkgPSBkaW1lbnNpb24gPT09IFwid2lkdGhcIiA/IDEgOiAwLFxuXHRcdGV4dHJhID0gMCxcblx0XHRkZWx0YSA9IDA7XG5cblx0Ly8gQWRqdXN0bWVudCBtYXkgbm90IGJlIG5lY2Vzc2FyeVxuXHRpZiAoIGJveCA9PT0gKCBpc0JvcmRlckJveCA/IFwiYm9yZGVyXCIgOiBcImNvbnRlbnRcIiApICkge1xuXHRcdHJldHVybiAwO1xuXHR9XG5cblx0Zm9yICggOyBpIDwgNDsgaSArPSAyICkge1xuXG5cdFx0Ly8gQm90aCBib3ggbW9kZWxzIGV4Y2x1ZGUgbWFyZ2luXG5cdFx0aWYgKCBib3ggPT09IFwibWFyZ2luXCIgKSB7XG5cdFx0XHRkZWx0YSArPSBqUXVlcnkuY3NzKCBlbGVtLCBib3ggKyBjc3NFeHBhbmRbIGkgXSwgdHJ1ZSwgc3R5bGVzICk7XG5cdFx0fVxuXG5cdFx0Ly8gSWYgd2UgZ2V0IGhlcmUgd2l0aCBhIGNvbnRlbnQtYm94LCB3ZSdyZSBzZWVraW5nIFwicGFkZGluZ1wiIG9yIFwiYm9yZGVyXCIgb3IgXCJtYXJnaW5cIlxuXHRcdGlmICggIWlzQm9yZGVyQm94ICkge1xuXG5cdFx0XHQvLyBBZGQgcGFkZGluZ1xuXHRcdFx0ZGVsdGEgKz0galF1ZXJ5LmNzcyggZWxlbSwgXCJwYWRkaW5nXCIgKyBjc3NFeHBhbmRbIGkgXSwgdHJ1ZSwgc3R5bGVzICk7XG5cblx0XHRcdC8vIEZvciBcImJvcmRlclwiIG9yIFwibWFyZ2luXCIsIGFkZCBib3JkZXJcblx0XHRcdGlmICggYm94ICE9PSBcInBhZGRpbmdcIiApIHtcblx0XHRcdFx0ZGVsdGEgKz0galF1ZXJ5LmNzcyggZWxlbSwgXCJib3JkZXJcIiArIGNzc0V4cGFuZFsgaSBdICsgXCJXaWR0aFwiLCB0cnVlLCBzdHlsZXMgKTtcblxuXHRcdFx0Ly8gQnV0IHN0aWxsIGtlZXAgdHJhY2sgb2YgaXQgb3RoZXJ3aXNlXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRleHRyYSArPSBqUXVlcnkuY3NzKCBlbGVtLCBcImJvcmRlclwiICsgY3NzRXhwYW5kWyBpIF0gKyBcIldpZHRoXCIsIHRydWUsIHN0eWxlcyApO1xuXHRcdFx0fVxuXG5cdFx0Ly8gSWYgd2UgZ2V0IGhlcmUgd2l0aCBhIGJvcmRlci1ib3ggKGNvbnRlbnQgKyBwYWRkaW5nICsgYm9yZGVyKSwgd2UncmUgc2Vla2luZyBcImNvbnRlbnRcIiBvclxuXHRcdC8vIFwicGFkZGluZ1wiIG9yIFwibWFyZ2luXCJcblx0XHR9IGVsc2Uge1xuXG5cdFx0XHQvLyBGb3IgXCJjb250ZW50XCIsIHN1YnRyYWN0IHBhZGRpbmdcblx0XHRcdGlmICggYm94ID09PSBcImNvbnRlbnRcIiApIHtcblx0XHRcdFx0ZGVsdGEgLT0galF1ZXJ5LmNzcyggZWxlbSwgXCJwYWRkaW5nXCIgKyBjc3NFeHBhbmRbIGkgXSwgdHJ1ZSwgc3R5bGVzICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEZvciBcImNvbnRlbnRcIiBvciBcInBhZGRpbmdcIiwgc3VidHJhY3QgYm9yZGVyXG5cdFx0XHRpZiAoIGJveCAhPT0gXCJtYXJnaW5cIiApIHtcblx0XHRcdFx0ZGVsdGEgLT0galF1ZXJ5LmNzcyggZWxlbSwgXCJib3JkZXJcIiArIGNzc0V4cGFuZFsgaSBdICsgXCJXaWR0aFwiLCB0cnVlLCBzdHlsZXMgKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBBY2NvdW50IGZvciBwb3NpdGl2ZSBjb250ZW50LWJveCBzY3JvbGwgZ3V0dGVyIHdoZW4gcmVxdWVzdGVkIGJ5IHByb3ZpZGluZyBjb21wdXRlZFZhbFxuXHRpZiAoICFpc0JvcmRlckJveCAmJiBjb21wdXRlZFZhbCA+PSAwICkge1xuXG5cdFx0Ly8gb2Zmc2V0V2lkdGgvb2Zmc2V0SGVpZ2h0IGlzIGEgcm91bmRlZCBzdW0gb2YgY29udGVudCwgcGFkZGluZywgc2Nyb2xsIGd1dHRlciwgYW5kIGJvcmRlclxuXHRcdC8vIEFzc3VtaW5nIGludGVnZXIgc2Nyb2xsIGd1dHRlciwgc3VidHJhY3QgdGhlIHJlc3QgYW5kIHJvdW5kIGRvd25cblx0XHRkZWx0YSArPSBNYXRoLm1heCggMCwgTWF0aC5jZWlsKFxuXHRcdFx0ZWxlbVsgXCJvZmZzZXRcIiArIGRpbWVuc2lvblsgMCBdLnRvVXBwZXJDYXNlKCkgKyBkaW1lbnNpb24uc2xpY2UoIDEgKSBdIC1cblx0XHRcdGNvbXB1dGVkVmFsIC1cblx0XHRcdGRlbHRhIC1cblx0XHRcdGV4dHJhIC1cblx0XHRcdDAuNVxuXG5cdFx0Ly8gSWYgb2Zmc2V0V2lkdGgvb2Zmc2V0SGVpZ2h0IGlzIHVua25vd24sIHRoZW4gd2UgY2FuJ3QgZGV0ZXJtaW5lIGNvbnRlbnQtYm94IHNjcm9sbCBndXR0ZXJcblx0XHQvLyBVc2UgYW4gZXhwbGljaXQgemVybyB0byBhdm9pZCBOYU4gKGdoLTM5NjQpXG5cdFx0KSApIHx8IDA7XG5cdH1cblxuXHRyZXR1cm4gZGVsdGE7XG59XG5cbmZ1bmN0aW9uIGdldFdpZHRoT3JIZWlnaHQoIGVsZW0sIGRpbWVuc2lvbiwgZXh0cmEgKSB7XG5cblx0Ly8gU3RhcnQgd2l0aCBjb21wdXRlZCBzdHlsZVxuXHR2YXIgc3R5bGVzID0gZ2V0U3R5bGVzKCBlbGVtICksXG5cblx0XHQvLyBUbyBhdm9pZCBmb3JjaW5nIGEgcmVmbG93LCBvbmx5IGZldGNoIGJveFNpemluZyBpZiB3ZSBuZWVkIGl0IChnaC00MzIyKS5cblx0XHQvLyBGYWtlIGNvbnRlbnQtYm94IHVudGlsIHdlIGtub3cgaXQncyBuZWVkZWQgdG8ga25vdyB0aGUgdHJ1ZSB2YWx1ZS5cblx0XHRib3hTaXppbmdOZWVkZWQgPSAhc3VwcG9ydC5ib3hTaXppbmdSZWxpYWJsZSgpIHx8IGV4dHJhLFxuXHRcdGlzQm9yZGVyQm94ID0gYm94U2l6aW5nTmVlZGVkICYmXG5cdFx0XHRqUXVlcnkuY3NzKCBlbGVtLCBcImJveFNpemluZ1wiLCBmYWxzZSwgc3R5bGVzICkgPT09IFwiYm9yZGVyLWJveFwiLFxuXHRcdHZhbHVlSXNCb3JkZXJCb3ggPSBpc0JvcmRlckJveCxcblxuXHRcdHZhbCA9IGN1ckNTUyggZWxlbSwgZGltZW5zaW9uLCBzdHlsZXMgKSxcblx0XHRvZmZzZXRQcm9wID0gXCJvZmZzZXRcIiArIGRpbWVuc2lvblsgMCBdLnRvVXBwZXJDYXNlKCkgKyBkaW1lbnNpb24uc2xpY2UoIDEgKTtcblxuXHQvLyBTdXBwb3J0OiBGaXJlZm94IDw9NTRcblx0Ly8gUmV0dXJuIGEgY29uZm91bmRpbmcgbm9uLXBpeGVsIHZhbHVlIG9yIGZlaWduIGlnbm9yYW5jZSwgYXMgYXBwcm9wcmlhdGUuXG5cdGlmICggcm51bW5vbnB4LnRlc3QoIHZhbCApICkge1xuXHRcdGlmICggIWV4dHJhICkge1xuXHRcdFx0cmV0dXJuIHZhbDtcblx0XHR9XG5cdFx0dmFsID0gXCJhdXRvXCI7XG5cdH1cblxuXG5cdC8vIEZhbGwgYmFjayB0byBvZmZzZXRXaWR0aC9vZmZzZXRIZWlnaHQgd2hlbiB2YWx1ZSBpcyBcImF1dG9cIlxuXHQvLyBUaGlzIGhhcHBlbnMgZm9yIGlubGluZSBlbGVtZW50cyB3aXRoIG5vIGV4cGxpY2l0IHNldHRpbmcgKGdoLTM1NzEpXG5cdC8vIFN1cHBvcnQ6IEFuZHJvaWQgPD00LjEgLSA0LjMgb25seVxuXHQvLyBBbHNvIHVzZSBvZmZzZXRXaWR0aC9vZmZzZXRIZWlnaHQgZm9yIG1pc3JlcG9ydGVkIGlubGluZSBkaW1lbnNpb25zIChnaC0zNjAyKVxuXHQvLyBTdXBwb3J0OiBJRSA5LTExIG9ubHlcblx0Ly8gQWxzbyB1c2Ugb2Zmc2V0V2lkdGgvb2Zmc2V0SGVpZ2h0IGZvciB3aGVuIGJveCBzaXppbmcgaXMgdW5yZWxpYWJsZVxuXHQvLyBXZSB1c2UgZ2V0Q2xpZW50UmVjdHMoKSB0byBjaGVjayBmb3IgaGlkZGVuL2Rpc2Nvbm5lY3RlZC5cblx0Ly8gSW4gdGhvc2UgY2FzZXMsIHRoZSBjb21wdXRlZCB2YWx1ZSBjYW4gYmUgdHJ1c3RlZCB0byBiZSBib3JkZXItYm94XG5cdGlmICggKCAhc3VwcG9ydC5ib3hTaXppbmdSZWxpYWJsZSgpICYmIGlzQm9yZGVyQm94IHx8XG5cdFx0dmFsID09PSBcImF1dG9cIiB8fFxuXHRcdCFwYXJzZUZsb2F0KCB2YWwgKSAmJiBqUXVlcnkuY3NzKCBlbGVtLCBcImRpc3BsYXlcIiwgZmFsc2UsIHN0eWxlcyApID09PSBcImlubGluZVwiICkgJiZcblx0XHRlbGVtLmdldENsaWVudFJlY3RzKCkubGVuZ3RoICkge1xuXG5cdFx0aXNCb3JkZXJCb3ggPSBqUXVlcnkuY3NzKCBlbGVtLCBcImJveFNpemluZ1wiLCBmYWxzZSwgc3R5bGVzICkgPT09IFwiYm9yZGVyLWJveFwiO1xuXG5cdFx0Ly8gV2hlcmUgYXZhaWxhYmxlLCBvZmZzZXRXaWR0aC9vZmZzZXRIZWlnaHQgYXBwcm94aW1hdGUgYm9yZGVyIGJveCBkaW1lbnNpb25zLlxuXHRcdC8vIFdoZXJlIG5vdCBhdmFpbGFibGUgKGUuZy4sIFNWRyksIGFzc3VtZSB1bnJlbGlhYmxlIGJveC1zaXppbmcgYW5kIGludGVycHJldCB0aGVcblx0XHQvLyByZXRyaWV2ZWQgdmFsdWUgYXMgYSBjb250ZW50IGJveCBkaW1lbnNpb24uXG5cdFx0dmFsdWVJc0JvcmRlckJveCA9IG9mZnNldFByb3AgaW4gZWxlbTtcblx0XHRpZiAoIHZhbHVlSXNCb3JkZXJCb3ggKSB7XG5cdFx0XHR2YWwgPSBlbGVtWyBvZmZzZXRQcm9wIF07XG5cdFx0fVxuXHR9XG5cblx0Ly8gTm9ybWFsaXplIFwiXCIgYW5kIGF1dG9cblx0dmFsID0gcGFyc2VGbG9hdCggdmFsICkgfHwgMDtcblxuXHQvLyBBZGp1c3QgZm9yIHRoZSBlbGVtZW50J3MgYm94IG1vZGVsXG5cdHJldHVybiAoIHZhbCArXG5cdFx0Ym94TW9kZWxBZGp1c3RtZW50KFxuXHRcdFx0ZWxlbSxcblx0XHRcdGRpbWVuc2lvbixcblx0XHRcdGV4dHJhIHx8ICggaXNCb3JkZXJCb3ggPyBcImJvcmRlclwiIDogXCJjb250ZW50XCIgKSxcblx0XHRcdHZhbHVlSXNCb3JkZXJCb3gsXG5cdFx0XHRzdHlsZXMsXG5cblx0XHRcdC8vIFByb3ZpZGUgdGhlIGN1cnJlbnQgY29tcHV0ZWQgc2l6ZSB0byByZXF1ZXN0IHNjcm9sbCBndXR0ZXIgY2FsY3VsYXRpb24gKGdoLTM1ODkpXG5cdFx0XHR2YWxcblx0XHQpXG5cdCkgKyBcInB4XCI7XG59XG5cbmpRdWVyeS5leHRlbmQoIHtcblxuXHQvLyBBZGQgaW4gc3R5bGUgcHJvcGVydHkgaG9va3MgZm9yIG92ZXJyaWRpbmcgdGhlIGRlZmF1bHRcblx0Ly8gYmVoYXZpb3Igb2YgZ2V0dGluZyBhbmQgc2V0dGluZyBhIHN0eWxlIHByb3BlcnR5XG5cdGNzc0hvb2tzOiB7XG5cdFx0b3BhY2l0eToge1xuXHRcdFx0Z2V0OiBmdW5jdGlvbiggZWxlbSwgY29tcHV0ZWQgKSB7XG5cdFx0XHRcdGlmICggY29tcHV0ZWQgKSB7XG5cblx0XHRcdFx0XHQvLyBXZSBzaG91bGQgYWx3YXlzIGdldCBhIG51bWJlciBiYWNrIGZyb20gb3BhY2l0eVxuXHRcdFx0XHRcdHZhciByZXQgPSBjdXJDU1MoIGVsZW0sIFwib3BhY2l0eVwiICk7XG5cdFx0XHRcdFx0cmV0dXJuIHJldCA9PT0gXCJcIiA/IFwiMVwiIDogcmV0O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXG5cdC8vIERvbid0IGF1dG9tYXRpY2FsbHkgYWRkIFwicHhcIiB0byB0aGVzZSBwb3NzaWJseS11bml0bGVzcyBwcm9wZXJ0aWVzXG5cdGNzc051bWJlcjoge1xuXHRcdFwiYW5pbWF0aW9uSXRlcmF0aW9uQ291bnRcIjogdHJ1ZSxcblx0XHRcImNvbHVtbkNvdW50XCI6IHRydWUsXG5cdFx0XCJmaWxsT3BhY2l0eVwiOiB0cnVlLFxuXHRcdFwiZmxleEdyb3dcIjogdHJ1ZSxcblx0XHRcImZsZXhTaHJpbmtcIjogdHJ1ZSxcblx0XHRcImZvbnRXZWlnaHRcIjogdHJ1ZSxcblx0XHRcImdyaWRBcmVhXCI6IHRydWUsXG5cdFx0XCJncmlkQ29sdW1uXCI6IHRydWUsXG5cdFx0XCJncmlkQ29sdW1uRW5kXCI6IHRydWUsXG5cdFx0XCJncmlkQ29sdW1uU3RhcnRcIjogdHJ1ZSxcblx0XHRcImdyaWRSb3dcIjogdHJ1ZSxcblx0XHRcImdyaWRSb3dFbmRcIjogdHJ1ZSxcblx0XHRcImdyaWRSb3dTdGFydFwiOiB0cnVlLFxuXHRcdFwibGluZUhlaWdodFwiOiB0cnVlLFxuXHRcdFwib3BhY2l0eVwiOiB0cnVlLFxuXHRcdFwib3JkZXJcIjogdHJ1ZSxcblx0XHRcIm9ycGhhbnNcIjogdHJ1ZSxcblx0XHRcIndpZG93c1wiOiB0cnVlLFxuXHRcdFwiekluZGV4XCI6IHRydWUsXG5cdFx0XCJ6b29tXCI6IHRydWVcblx0fSxcblxuXHQvLyBBZGQgaW4gcHJvcGVydGllcyB3aG9zZSBuYW1lcyB5b3Ugd2lzaCB0byBmaXggYmVmb3JlXG5cdC8vIHNldHRpbmcgb3IgZ2V0dGluZyB0aGUgdmFsdWVcblx0Y3NzUHJvcHM6IHt9LFxuXG5cdC8vIEdldCBhbmQgc2V0IHRoZSBzdHlsZSBwcm9wZXJ0eSBvbiBhIERPTSBOb2RlXG5cdHN0eWxlOiBmdW5jdGlvbiggZWxlbSwgbmFtZSwgdmFsdWUsIGV4dHJhICkge1xuXG5cdFx0Ly8gRG9uJ3Qgc2V0IHN0eWxlcyBvbiB0ZXh0IGFuZCBjb21tZW50IG5vZGVzXG5cdFx0aWYgKCAhZWxlbSB8fCBlbGVtLm5vZGVUeXBlID09PSAzIHx8IGVsZW0ubm9kZVR5cGUgPT09IDggfHwgIWVsZW0uc3R5bGUgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gTWFrZSBzdXJlIHRoYXQgd2UncmUgd29ya2luZyB3aXRoIHRoZSByaWdodCBuYW1lXG5cdFx0dmFyIHJldCwgdHlwZSwgaG9va3MsXG5cdFx0XHRvcmlnTmFtZSA9IGNhbWVsQ2FzZSggbmFtZSApLFxuXHRcdFx0aXNDdXN0b21Qcm9wID0gcmN1c3RvbVByb3AudGVzdCggbmFtZSApLFxuXHRcdFx0c3R5bGUgPSBlbGVtLnN0eWxlO1xuXG5cdFx0Ly8gTWFrZSBzdXJlIHRoYXQgd2UncmUgd29ya2luZyB3aXRoIHRoZSByaWdodCBuYW1lLiBXZSBkb24ndFxuXHRcdC8vIHdhbnQgdG8gcXVlcnkgdGhlIHZhbHVlIGlmIGl0IGlzIGEgQ1NTIGN1c3RvbSBwcm9wZXJ0eVxuXHRcdC8vIHNpbmNlIHRoZXkgYXJlIHVzZXItZGVmaW5lZC5cblx0XHRpZiAoICFpc0N1c3RvbVByb3AgKSB7XG5cdFx0XHRuYW1lID0gZmluYWxQcm9wTmFtZSggb3JpZ05hbWUgKTtcblx0XHR9XG5cblx0XHQvLyBHZXRzIGhvb2sgZm9yIHRoZSBwcmVmaXhlZCB2ZXJzaW9uLCB0aGVuIHVucHJlZml4ZWQgdmVyc2lvblxuXHRcdGhvb2tzID0galF1ZXJ5LmNzc0hvb2tzWyBuYW1lIF0gfHwgalF1ZXJ5LmNzc0hvb2tzWyBvcmlnTmFtZSBdO1xuXG5cdFx0Ly8gQ2hlY2sgaWYgd2UncmUgc2V0dGluZyBhIHZhbHVlXG5cdFx0aWYgKCB2YWx1ZSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0dHlwZSA9IHR5cGVvZiB2YWx1ZTtcblxuXHRcdFx0Ly8gQ29udmVydCBcIis9XCIgb3IgXCItPVwiIHRvIHJlbGF0aXZlIG51bWJlcnMgKCM3MzQ1KVxuXHRcdFx0aWYgKCB0eXBlID09PSBcInN0cmluZ1wiICYmICggcmV0ID0gcmNzc051bS5leGVjKCB2YWx1ZSApICkgJiYgcmV0WyAxIF0gKSB7XG5cdFx0XHRcdHZhbHVlID0gYWRqdXN0Q1NTKCBlbGVtLCBuYW1lLCByZXQgKTtcblxuXHRcdFx0XHQvLyBGaXhlcyBidWcgIzkyMzdcblx0XHRcdFx0dHlwZSA9IFwibnVtYmVyXCI7XG5cdFx0XHR9XG5cblx0XHRcdC8vIE1ha2Ugc3VyZSB0aGF0IG51bGwgYW5kIE5hTiB2YWx1ZXMgYXJlbid0IHNldCAoIzcxMTYpXG5cdFx0XHRpZiAoIHZhbHVlID09IG51bGwgfHwgdmFsdWUgIT09IHZhbHVlICkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdC8vIElmIGEgbnVtYmVyIHdhcyBwYXNzZWQgaW4sIGFkZCB0aGUgdW5pdCAoZXhjZXB0IGZvciBjZXJ0YWluIENTUyBwcm9wZXJ0aWVzKVxuXHRcdFx0Ly8gVGhlIGlzQ3VzdG9tUHJvcCBjaGVjayBjYW4gYmUgcmVtb3ZlZCBpbiBqUXVlcnkgNC4wIHdoZW4gd2Ugb25seSBhdXRvLWFwcGVuZFxuXHRcdFx0Ly8gXCJweFwiIHRvIGEgZmV3IGhhcmRjb2RlZCB2YWx1ZXMuXG5cdFx0XHRpZiAoIHR5cGUgPT09IFwibnVtYmVyXCIgJiYgIWlzQ3VzdG9tUHJvcCApIHtcblx0XHRcdFx0dmFsdWUgKz0gcmV0ICYmIHJldFsgMyBdIHx8ICggalF1ZXJ5LmNzc051bWJlclsgb3JpZ05hbWUgXSA/IFwiXCIgOiBcInB4XCIgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gYmFja2dyb3VuZC0qIHByb3BzIGFmZmVjdCBvcmlnaW5hbCBjbG9uZSdzIHZhbHVlc1xuXHRcdFx0aWYgKCAhc3VwcG9ydC5jbGVhckNsb25lU3R5bGUgJiYgdmFsdWUgPT09IFwiXCIgJiYgbmFtZS5pbmRleE9mKCBcImJhY2tncm91bmRcIiApID09PSAwICkge1xuXHRcdFx0XHRzdHlsZVsgbmFtZSBdID0gXCJpbmhlcml0XCI7XG5cdFx0XHR9XG5cblx0XHRcdC8vIElmIGEgaG9vayB3YXMgcHJvdmlkZWQsIHVzZSB0aGF0IHZhbHVlLCBvdGhlcndpc2UganVzdCBzZXQgdGhlIHNwZWNpZmllZCB2YWx1ZVxuXHRcdFx0aWYgKCAhaG9va3MgfHwgISggXCJzZXRcIiBpbiBob29rcyApIHx8XG5cdFx0XHRcdCggdmFsdWUgPSBob29rcy5zZXQoIGVsZW0sIHZhbHVlLCBleHRyYSApICkgIT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0XHRpZiAoIGlzQ3VzdG9tUHJvcCApIHtcblx0XHRcdFx0XHRzdHlsZS5zZXRQcm9wZXJ0eSggbmFtZSwgdmFsdWUgKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRzdHlsZVsgbmFtZSBdID0gdmFsdWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdH0gZWxzZSB7XG5cblx0XHRcdC8vIElmIGEgaG9vayB3YXMgcHJvdmlkZWQgZ2V0IHRoZSBub24tY29tcHV0ZWQgdmFsdWUgZnJvbSB0aGVyZVxuXHRcdFx0aWYgKCBob29rcyAmJiBcImdldFwiIGluIGhvb2tzICYmXG5cdFx0XHRcdCggcmV0ID0gaG9va3MuZ2V0KCBlbGVtLCBmYWxzZSwgZXh0cmEgKSApICE9PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdFx0cmV0dXJuIHJldDtcblx0XHRcdH1cblxuXHRcdFx0Ly8gT3RoZXJ3aXNlIGp1c3QgZ2V0IHRoZSB2YWx1ZSBmcm9tIHRoZSBzdHlsZSBvYmplY3Rcblx0XHRcdHJldHVybiBzdHlsZVsgbmFtZSBdO1xuXHRcdH1cblx0fSxcblxuXHRjc3M6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCBleHRyYSwgc3R5bGVzICkge1xuXHRcdHZhciB2YWwsIG51bSwgaG9va3MsXG5cdFx0XHRvcmlnTmFtZSA9IGNhbWVsQ2FzZSggbmFtZSApLFxuXHRcdFx0aXNDdXN0b21Qcm9wID0gcmN1c3RvbVByb3AudGVzdCggbmFtZSApO1xuXG5cdFx0Ly8gTWFrZSBzdXJlIHRoYXQgd2UncmUgd29ya2luZyB3aXRoIHRoZSByaWdodCBuYW1lLiBXZSBkb24ndFxuXHRcdC8vIHdhbnQgdG8gbW9kaWZ5IHRoZSB2YWx1ZSBpZiBpdCBpcyBhIENTUyBjdXN0b20gcHJvcGVydHlcblx0XHQvLyBzaW5jZSB0aGV5IGFyZSB1c2VyLWRlZmluZWQuXG5cdFx0aWYgKCAhaXNDdXN0b21Qcm9wICkge1xuXHRcdFx0bmFtZSA9IGZpbmFsUHJvcE5hbWUoIG9yaWdOYW1lICk7XG5cdFx0fVxuXG5cdFx0Ly8gVHJ5IHByZWZpeGVkIG5hbWUgZm9sbG93ZWQgYnkgdGhlIHVucHJlZml4ZWQgbmFtZVxuXHRcdGhvb2tzID0galF1ZXJ5LmNzc0hvb2tzWyBuYW1lIF0gfHwgalF1ZXJ5LmNzc0hvb2tzWyBvcmlnTmFtZSBdO1xuXG5cdFx0Ly8gSWYgYSBob29rIHdhcyBwcm92aWRlZCBnZXQgdGhlIGNvbXB1dGVkIHZhbHVlIGZyb20gdGhlcmVcblx0XHRpZiAoIGhvb2tzICYmIFwiZ2V0XCIgaW4gaG9va3MgKSB7XG5cdFx0XHR2YWwgPSBob29rcy5nZXQoIGVsZW0sIHRydWUsIGV4dHJhICk7XG5cdFx0fVxuXG5cdFx0Ly8gT3RoZXJ3aXNlLCBpZiBhIHdheSB0byBnZXQgdGhlIGNvbXB1dGVkIHZhbHVlIGV4aXN0cywgdXNlIHRoYXRcblx0XHRpZiAoIHZhbCA9PT0gdW5kZWZpbmVkICkge1xuXHRcdFx0dmFsID0gY3VyQ1NTKCBlbGVtLCBuYW1lLCBzdHlsZXMgKTtcblx0XHR9XG5cblx0XHQvLyBDb252ZXJ0IFwibm9ybWFsXCIgdG8gY29tcHV0ZWQgdmFsdWVcblx0XHRpZiAoIHZhbCA9PT0gXCJub3JtYWxcIiAmJiBuYW1lIGluIGNzc05vcm1hbFRyYW5zZm9ybSApIHtcblx0XHRcdHZhbCA9IGNzc05vcm1hbFRyYW5zZm9ybVsgbmFtZSBdO1xuXHRcdH1cblxuXHRcdC8vIE1ha2UgbnVtZXJpYyBpZiBmb3JjZWQgb3IgYSBxdWFsaWZpZXIgd2FzIHByb3ZpZGVkIGFuZCB2YWwgbG9va3MgbnVtZXJpY1xuXHRcdGlmICggZXh0cmEgPT09IFwiXCIgfHwgZXh0cmEgKSB7XG5cdFx0XHRudW0gPSBwYXJzZUZsb2F0KCB2YWwgKTtcblx0XHRcdHJldHVybiBleHRyYSA9PT0gdHJ1ZSB8fCBpc0Zpbml0ZSggbnVtICkgPyBudW0gfHwgMCA6IHZhbDtcblx0XHR9XG5cblx0XHRyZXR1cm4gdmFsO1xuXHR9XG59ICk7XG5cbmpRdWVyeS5lYWNoKCBbIFwiaGVpZ2h0XCIsIFwid2lkdGhcIiBdLCBmdW5jdGlvbiggaSwgZGltZW5zaW9uICkge1xuXHRqUXVlcnkuY3NzSG9va3NbIGRpbWVuc2lvbiBdID0ge1xuXHRcdGdldDogZnVuY3Rpb24oIGVsZW0sIGNvbXB1dGVkLCBleHRyYSApIHtcblx0XHRcdGlmICggY29tcHV0ZWQgKSB7XG5cblx0XHRcdFx0Ly8gQ2VydGFpbiBlbGVtZW50cyBjYW4gaGF2ZSBkaW1lbnNpb24gaW5mbyBpZiB3ZSBpbnZpc2libHkgc2hvdyB0aGVtXG5cdFx0XHRcdC8vIGJ1dCBpdCBtdXN0IGhhdmUgYSBjdXJyZW50IGRpc3BsYXkgc3R5bGUgdGhhdCB3b3VsZCBiZW5lZml0XG5cdFx0XHRcdHJldHVybiByZGlzcGxheXN3YXAudGVzdCggalF1ZXJ5LmNzcyggZWxlbSwgXCJkaXNwbGF5XCIgKSApICYmXG5cblx0XHRcdFx0XHQvLyBTdXBwb3J0OiBTYWZhcmkgOCtcblx0XHRcdFx0XHQvLyBUYWJsZSBjb2x1bW5zIGluIFNhZmFyaSBoYXZlIG5vbi16ZXJvIG9mZnNldFdpZHRoICYgemVyb1xuXHRcdFx0XHRcdC8vIGdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoIHVubGVzcyBkaXNwbGF5IGlzIGNoYW5nZWQuXG5cdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPD0xMSBvbmx5XG5cdFx0XHRcdFx0Ly8gUnVubmluZyBnZXRCb3VuZGluZ0NsaWVudFJlY3Qgb24gYSBkaXNjb25uZWN0ZWQgbm9kZVxuXHRcdFx0XHRcdC8vIGluIElFIHRocm93cyBhbiBlcnJvci5cblx0XHRcdFx0XHQoICFlbGVtLmdldENsaWVudFJlY3RzKCkubGVuZ3RoIHx8ICFlbGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoICkgP1xuXHRcdFx0XHRcdFx0c3dhcCggZWxlbSwgY3NzU2hvdywgZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBnZXRXaWR0aE9ySGVpZ2h0KCBlbGVtLCBkaW1lbnNpb24sIGV4dHJhICk7XG5cdFx0XHRcdFx0XHR9ICkgOlxuXHRcdFx0XHRcdFx0Z2V0V2lkdGhPckhlaWdodCggZWxlbSwgZGltZW5zaW9uLCBleHRyYSApO1xuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHRzZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSwgZXh0cmEgKSB7XG5cdFx0XHR2YXIgbWF0Y2hlcyxcblx0XHRcdFx0c3R5bGVzID0gZ2V0U3R5bGVzKCBlbGVtICksXG5cblx0XHRcdFx0Ly8gT25seSByZWFkIHN0eWxlcy5wb3NpdGlvbiBpZiB0aGUgdGVzdCBoYXMgYSBjaGFuY2UgdG8gZmFpbFxuXHRcdFx0XHQvLyB0byBhdm9pZCBmb3JjaW5nIGEgcmVmbG93LlxuXHRcdFx0XHRzY3JvbGxib3hTaXplQnVnZ3kgPSAhc3VwcG9ydC5zY3JvbGxib3hTaXplKCkgJiZcblx0XHRcdFx0XHRzdHlsZXMucG9zaXRpb24gPT09IFwiYWJzb2x1dGVcIixcblxuXHRcdFx0XHQvLyBUbyBhdm9pZCBmb3JjaW5nIGEgcmVmbG93LCBvbmx5IGZldGNoIGJveFNpemluZyBpZiB3ZSBuZWVkIGl0IChnaC0zOTkxKVxuXHRcdFx0XHRib3hTaXppbmdOZWVkZWQgPSBzY3JvbGxib3hTaXplQnVnZ3kgfHwgZXh0cmEsXG5cdFx0XHRcdGlzQm9yZGVyQm94ID0gYm94U2l6aW5nTmVlZGVkICYmXG5cdFx0XHRcdFx0alF1ZXJ5LmNzcyggZWxlbSwgXCJib3hTaXppbmdcIiwgZmFsc2UsIHN0eWxlcyApID09PSBcImJvcmRlci1ib3hcIixcblx0XHRcdFx0c3VidHJhY3QgPSBleHRyYSA/XG5cdFx0XHRcdFx0Ym94TW9kZWxBZGp1c3RtZW50KFxuXHRcdFx0XHRcdFx0ZWxlbSxcblx0XHRcdFx0XHRcdGRpbWVuc2lvbixcblx0XHRcdFx0XHRcdGV4dHJhLFxuXHRcdFx0XHRcdFx0aXNCb3JkZXJCb3gsXG5cdFx0XHRcdFx0XHRzdHlsZXNcblx0XHRcdFx0XHQpIDpcblx0XHRcdFx0XHQwO1xuXG5cdFx0XHQvLyBBY2NvdW50IGZvciB1bnJlbGlhYmxlIGJvcmRlci1ib3ggZGltZW5zaW9ucyBieSBjb21wYXJpbmcgb2Zmc2V0KiB0byBjb21wdXRlZCBhbmRcblx0XHRcdC8vIGZha2luZyBhIGNvbnRlbnQtYm94IHRvIGdldCBib3JkZXIgYW5kIHBhZGRpbmcgKGdoLTM2OTkpXG5cdFx0XHRpZiAoIGlzQm9yZGVyQm94ICYmIHNjcm9sbGJveFNpemVCdWdneSApIHtcblx0XHRcdFx0c3VidHJhY3QgLT0gTWF0aC5jZWlsKFxuXHRcdFx0XHRcdGVsZW1bIFwib2Zmc2V0XCIgKyBkaW1lbnNpb25bIDAgXS50b1VwcGVyQ2FzZSgpICsgZGltZW5zaW9uLnNsaWNlKCAxICkgXSAtXG5cdFx0XHRcdFx0cGFyc2VGbG9hdCggc3R5bGVzWyBkaW1lbnNpb24gXSApIC1cblx0XHRcdFx0XHRib3hNb2RlbEFkanVzdG1lbnQoIGVsZW0sIGRpbWVuc2lvbiwgXCJib3JkZXJcIiwgZmFsc2UsIHN0eWxlcyApIC1cblx0XHRcdFx0XHQwLjVcblx0XHRcdFx0KTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQ29udmVydCB0byBwaXhlbHMgaWYgdmFsdWUgYWRqdXN0bWVudCBpcyBuZWVkZWRcblx0XHRcdGlmICggc3VidHJhY3QgJiYgKCBtYXRjaGVzID0gcmNzc051bS5leGVjKCB2YWx1ZSApICkgJiZcblx0XHRcdFx0KCBtYXRjaGVzWyAzIF0gfHwgXCJweFwiICkgIT09IFwicHhcIiApIHtcblxuXHRcdFx0XHRlbGVtLnN0eWxlWyBkaW1lbnNpb24gXSA9IHZhbHVlO1xuXHRcdFx0XHR2YWx1ZSA9IGpRdWVyeS5jc3MoIGVsZW0sIGRpbWVuc2lvbiApO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gc2V0UG9zaXRpdmVOdW1iZXIoIGVsZW0sIHZhbHVlLCBzdWJ0cmFjdCApO1xuXHRcdH1cblx0fTtcbn0gKTtcblxualF1ZXJ5LmNzc0hvb2tzLm1hcmdpbkxlZnQgPSBhZGRHZXRIb29rSWYoIHN1cHBvcnQucmVsaWFibGVNYXJnaW5MZWZ0LFxuXHRmdW5jdGlvbiggZWxlbSwgY29tcHV0ZWQgKSB7XG5cdFx0aWYgKCBjb21wdXRlZCApIHtcblx0XHRcdHJldHVybiAoIHBhcnNlRmxvYXQoIGN1ckNTUyggZWxlbSwgXCJtYXJnaW5MZWZ0XCIgKSApIHx8XG5cdFx0XHRcdGVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdCAtXG5cdFx0XHRcdFx0c3dhcCggZWxlbSwgeyBtYXJnaW5MZWZ0OiAwIH0sIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdDtcblx0XHRcdFx0XHR9IClcblx0XHRcdFx0KSArIFwicHhcIjtcblx0XHR9XG5cdH1cbik7XG5cbi8vIFRoZXNlIGhvb2tzIGFyZSB1c2VkIGJ5IGFuaW1hdGUgdG8gZXhwYW5kIHByb3BlcnRpZXNcbmpRdWVyeS5lYWNoKCB7XG5cdG1hcmdpbjogXCJcIixcblx0cGFkZGluZzogXCJcIixcblx0Ym9yZGVyOiBcIldpZHRoXCJcbn0sIGZ1bmN0aW9uKCBwcmVmaXgsIHN1ZmZpeCApIHtcblx0alF1ZXJ5LmNzc0hvb2tzWyBwcmVmaXggKyBzdWZmaXggXSA9IHtcblx0XHRleHBhbmQ6IGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHRcdHZhciBpID0gMCxcblx0XHRcdFx0ZXhwYW5kZWQgPSB7fSxcblxuXHRcdFx0XHQvLyBBc3N1bWVzIGEgc2luZ2xlIG51bWJlciBpZiBub3QgYSBzdHJpbmdcblx0XHRcdFx0cGFydHMgPSB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgPyB2YWx1ZS5zcGxpdCggXCIgXCIgKSA6IFsgdmFsdWUgXTtcblxuXHRcdFx0Zm9yICggOyBpIDwgNDsgaSsrICkge1xuXHRcdFx0XHRleHBhbmRlZFsgcHJlZml4ICsgY3NzRXhwYW5kWyBpIF0gKyBzdWZmaXggXSA9XG5cdFx0XHRcdFx0cGFydHNbIGkgXSB8fCBwYXJ0c1sgaSAtIDIgXSB8fCBwYXJ0c1sgMCBdO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZXhwYW5kZWQ7XG5cdFx0fVxuXHR9O1xuXG5cdGlmICggcHJlZml4ICE9PSBcIm1hcmdpblwiICkge1xuXHRcdGpRdWVyeS5jc3NIb29rc1sgcHJlZml4ICsgc3VmZml4IF0uc2V0ID0gc2V0UG9zaXRpdmVOdW1iZXI7XG5cdH1cbn0gKTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRjc3M6IGZ1bmN0aW9uKCBuYW1lLCB2YWx1ZSApIHtcblx0XHRyZXR1cm4gYWNjZXNzKCB0aGlzLCBmdW5jdGlvbiggZWxlbSwgbmFtZSwgdmFsdWUgKSB7XG5cdFx0XHR2YXIgc3R5bGVzLCBsZW4sXG5cdFx0XHRcdG1hcCA9IHt9LFxuXHRcdFx0XHRpID0gMDtcblxuXHRcdFx0aWYgKCBBcnJheS5pc0FycmF5KCBuYW1lICkgKSB7XG5cdFx0XHRcdHN0eWxlcyA9IGdldFN0eWxlcyggZWxlbSApO1xuXHRcdFx0XHRsZW4gPSBuYW1lLmxlbmd0aDtcblxuXHRcdFx0XHRmb3IgKCA7IGkgPCBsZW47IGkrKyApIHtcblx0XHRcdFx0XHRtYXBbIG5hbWVbIGkgXSBdID0galF1ZXJ5LmNzcyggZWxlbSwgbmFtZVsgaSBdLCBmYWxzZSwgc3R5bGVzICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gbWFwO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gdmFsdWUgIT09IHVuZGVmaW5lZCA/XG5cdFx0XHRcdGpRdWVyeS5zdHlsZSggZWxlbSwgbmFtZSwgdmFsdWUgKSA6XG5cdFx0XHRcdGpRdWVyeS5jc3MoIGVsZW0sIG5hbWUgKTtcblx0XHR9LCBuYW1lLCB2YWx1ZSwgYXJndW1lbnRzLmxlbmd0aCA+IDEgKTtcblx0fVxufSApO1xuXG5cbmZ1bmN0aW9uIFR3ZWVuKCBlbGVtLCBvcHRpb25zLCBwcm9wLCBlbmQsIGVhc2luZyApIHtcblx0cmV0dXJuIG5ldyBUd2Vlbi5wcm90b3R5cGUuaW5pdCggZWxlbSwgb3B0aW9ucywgcHJvcCwgZW5kLCBlYXNpbmcgKTtcbn1cbmpRdWVyeS5Ud2VlbiA9IFR3ZWVuO1xuXG5Ud2Vlbi5wcm90b3R5cGUgPSB7XG5cdGNvbnN0cnVjdG9yOiBUd2Vlbixcblx0aW5pdDogZnVuY3Rpb24oIGVsZW0sIG9wdGlvbnMsIHByb3AsIGVuZCwgZWFzaW5nLCB1bml0ICkge1xuXHRcdHRoaXMuZWxlbSA9IGVsZW07XG5cdFx0dGhpcy5wcm9wID0gcHJvcDtcblx0XHR0aGlzLmVhc2luZyA9IGVhc2luZyB8fCBqUXVlcnkuZWFzaW5nLl9kZWZhdWx0O1xuXHRcdHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG5cdFx0dGhpcy5zdGFydCA9IHRoaXMubm93ID0gdGhpcy5jdXIoKTtcblx0XHR0aGlzLmVuZCA9IGVuZDtcblx0XHR0aGlzLnVuaXQgPSB1bml0IHx8ICggalF1ZXJ5LmNzc051bWJlclsgcHJvcCBdID8gXCJcIiA6IFwicHhcIiApO1xuXHR9LFxuXHRjdXI6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBob29rcyA9IFR3ZWVuLnByb3BIb29rc1sgdGhpcy5wcm9wIF07XG5cblx0XHRyZXR1cm4gaG9va3MgJiYgaG9va3MuZ2V0ID9cblx0XHRcdGhvb2tzLmdldCggdGhpcyApIDpcblx0XHRcdFR3ZWVuLnByb3BIb29rcy5fZGVmYXVsdC5nZXQoIHRoaXMgKTtcblx0fSxcblx0cnVuOiBmdW5jdGlvbiggcGVyY2VudCApIHtcblx0XHR2YXIgZWFzZWQsXG5cdFx0XHRob29rcyA9IFR3ZWVuLnByb3BIb29rc1sgdGhpcy5wcm9wIF07XG5cblx0XHRpZiAoIHRoaXMub3B0aW9ucy5kdXJhdGlvbiApIHtcblx0XHRcdHRoaXMucG9zID0gZWFzZWQgPSBqUXVlcnkuZWFzaW5nWyB0aGlzLmVhc2luZyBdKFxuXHRcdFx0XHRwZXJjZW50LCB0aGlzLm9wdGlvbnMuZHVyYXRpb24gKiBwZXJjZW50LCAwLCAxLCB0aGlzLm9wdGlvbnMuZHVyYXRpb25cblx0XHRcdCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMucG9zID0gZWFzZWQgPSBwZXJjZW50O1xuXHRcdH1cblx0XHR0aGlzLm5vdyA9ICggdGhpcy5lbmQgLSB0aGlzLnN0YXJ0ICkgKiBlYXNlZCArIHRoaXMuc3RhcnQ7XG5cblx0XHRpZiAoIHRoaXMub3B0aW9ucy5zdGVwICkge1xuXHRcdFx0dGhpcy5vcHRpb25zLnN0ZXAuY2FsbCggdGhpcy5lbGVtLCB0aGlzLm5vdywgdGhpcyApO1xuXHRcdH1cblxuXHRcdGlmICggaG9va3MgJiYgaG9va3Muc2V0ICkge1xuXHRcdFx0aG9va3Muc2V0KCB0aGlzICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdFR3ZWVuLnByb3BIb29rcy5fZGVmYXVsdC5zZXQoIHRoaXMgKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cbn07XG5cblR3ZWVuLnByb3RvdHlwZS5pbml0LnByb3RvdHlwZSA9IFR3ZWVuLnByb3RvdHlwZTtcblxuVHdlZW4ucHJvcEhvb2tzID0ge1xuXHRfZGVmYXVsdDoge1xuXHRcdGdldDogZnVuY3Rpb24oIHR3ZWVuICkge1xuXHRcdFx0dmFyIHJlc3VsdDtcblxuXHRcdFx0Ly8gVXNlIGEgcHJvcGVydHkgb24gdGhlIGVsZW1lbnQgZGlyZWN0bHkgd2hlbiBpdCBpcyBub3QgYSBET00gZWxlbWVudCxcblx0XHRcdC8vIG9yIHdoZW4gdGhlcmUgaXMgbm8gbWF0Y2hpbmcgc3R5bGUgcHJvcGVydHkgdGhhdCBleGlzdHMuXG5cdFx0XHRpZiAoIHR3ZWVuLmVsZW0ubm9kZVR5cGUgIT09IDEgfHxcblx0XHRcdFx0dHdlZW4uZWxlbVsgdHdlZW4ucHJvcCBdICE9IG51bGwgJiYgdHdlZW4uZWxlbS5zdHlsZVsgdHdlZW4ucHJvcCBdID09IG51bGwgKSB7XG5cdFx0XHRcdHJldHVybiB0d2Vlbi5lbGVtWyB0d2Vlbi5wcm9wIF07XG5cdFx0XHR9XG5cblx0XHRcdC8vIFBhc3NpbmcgYW4gZW1wdHkgc3RyaW5nIGFzIGEgM3JkIHBhcmFtZXRlciB0byAuY3NzIHdpbGwgYXV0b21hdGljYWxseVxuXHRcdFx0Ly8gYXR0ZW1wdCBhIHBhcnNlRmxvYXQgYW5kIGZhbGxiYWNrIHRvIGEgc3RyaW5nIGlmIHRoZSBwYXJzZSBmYWlscy5cblx0XHRcdC8vIFNpbXBsZSB2YWx1ZXMgc3VjaCBhcyBcIjEwcHhcIiBhcmUgcGFyc2VkIHRvIEZsb2F0O1xuXHRcdFx0Ly8gY29tcGxleCB2YWx1ZXMgc3VjaCBhcyBcInJvdGF0ZSgxcmFkKVwiIGFyZSByZXR1cm5lZCBhcy1pcy5cblx0XHRcdHJlc3VsdCA9IGpRdWVyeS5jc3MoIHR3ZWVuLmVsZW0sIHR3ZWVuLnByb3AsIFwiXCIgKTtcblxuXHRcdFx0Ly8gRW1wdHkgc3RyaW5ncywgbnVsbCwgdW5kZWZpbmVkIGFuZCBcImF1dG9cIiBhcmUgY29udmVydGVkIHRvIDAuXG5cdFx0XHRyZXR1cm4gIXJlc3VsdCB8fCByZXN1bHQgPT09IFwiYXV0b1wiID8gMCA6IHJlc3VsdDtcblx0XHR9LFxuXHRcdHNldDogZnVuY3Rpb24oIHR3ZWVuICkge1xuXG5cdFx0XHQvLyBVc2Ugc3RlcCBob29rIGZvciBiYWNrIGNvbXBhdC5cblx0XHRcdC8vIFVzZSBjc3NIb29rIGlmIGl0cyB0aGVyZS5cblx0XHRcdC8vIFVzZSAuc3R5bGUgaWYgYXZhaWxhYmxlIGFuZCB1c2UgcGxhaW4gcHJvcGVydGllcyB3aGVyZSBhdmFpbGFibGUuXG5cdFx0XHRpZiAoIGpRdWVyeS5meC5zdGVwWyB0d2Vlbi5wcm9wIF0gKSB7XG5cdFx0XHRcdGpRdWVyeS5meC5zdGVwWyB0d2Vlbi5wcm9wIF0oIHR3ZWVuICk7XG5cdFx0XHR9IGVsc2UgaWYgKCB0d2Vlbi5lbGVtLm5vZGVUeXBlID09PSAxICYmIChcblx0XHRcdFx0XHRqUXVlcnkuY3NzSG9va3NbIHR3ZWVuLnByb3AgXSB8fFxuXHRcdFx0XHRcdHR3ZWVuLmVsZW0uc3R5bGVbIGZpbmFsUHJvcE5hbWUoIHR3ZWVuLnByb3AgKSBdICE9IG51bGwgKSApIHtcblx0XHRcdFx0alF1ZXJ5LnN0eWxlKCB0d2Vlbi5lbGVtLCB0d2Vlbi5wcm9wLCB0d2Vlbi5ub3cgKyB0d2Vlbi51bml0ICk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0d2Vlbi5lbGVtWyB0d2Vlbi5wcm9wIF0gPSB0d2Vlbi5ub3c7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59O1xuXG4vLyBTdXBwb3J0OiBJRSA8PTkgb25seVxuLy8gUGFuaWMgYmFzZWQgYXBwcm9hY2ggdG8gc2V0dGluZyB0aGluZ3Mgb24gZGlzY29ubmVjdGVkIG5vZGVzXG5Ud2Vlbi5wcm9wSG9va3Muc2Nyb2xsVG9wID0gVHdlZW4ucHJvcEhvb2tzLnNjcm9sbExlZnQgPSB7XG5cdHNldDogZnVuY3Rpb24oIHR3ZWVuICkge1xuXHRcdGlmICggdHdlZW4uZWxlbS5ub2RlVHlwZSAmJiB0d2Vlbi5lbGVtLnBhcmVudE5vZGUgKSB7XG5cdFx0XHR0d2Vlbi5lbGVtWyB0d2Vlbi5wcm9wIF0gPSB0d2Vlbi5ub3c7XG5cdFx0fVxuXHR9XG59O1xuXG5qUXVlcnkuZWFzaW5nID0ge1xuXHRsaW5lYXI6IGZ1bmN0aW9uKCBwICkge1xuXHRcdHJldHVybiBwO1xuXHR9LFxuXHRzd2luZzogZnVuY3Rpb24oIHAgKSB7XG5cdFx0cmV0dXJuIDAuNSAtIE1hdGguY29zKCBwICogTWF0aC5QSSApIC8gMjtcblx0fSxcblx0X2RlZmF1bHQ6IFwic3dpbmdcIlxufTtcblxualF1ZXJ5LmZ4ID0gVHdlZW4ucHJvdG90eXBlLmluaXQ7XG5cbi8vIEJhY2sgY29tcGF0IDwxLjggZXh0ZW5zaW9uIHBvaW50XG5qUXVlcnkuZnguc3RlcCA9IHt9O1xuXG5cblxuXG52YXJcblx0ZnhOb3csIGluUHJvZ3Jlc3MsXG5cdHJmeHR5cGVzID0gL14oPzp0b2dnbGV8c2hvd3xoaWRlKSQvLFxuXHRycnVuID0gL3F1ZXVlSG9va3MkLztcblxuZnVuY3Rpb24gc2NoZWR1bGUoKSB7XG5cdGlmICggaW5Qcm9ncmVzcyApIHtcblx0XHRpZiAoIGRvY3VtZW50LmhpZGRlbiA9PT0gZmFsc2UgJiYgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSApIHtcblx0XHRcdHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoIHNjaGVkdWxlICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHdpbmRvdy5zZXRUaW1lb3V0KCBzY2hlZHVsZSwgalF1ZXJ5LmZ4LmludGVydmFsICk7XG5cdFx0fVxuXG5cdFx0alF1ZXJ5LmZ4LnRpY2soKTtcblx0fVxufVxuXG4vLyBBbmltYXRpb25zIGNyZWF0ZWQgc3luY2hyb25vdXNseSB3aWxsIHJ1biBzeW5jaHJvbm91c2x5XG5mdW5jdGlvbiBjcmVhdGVGeE5vdygpIHtcblx0d2luZG93LnNldFRpbWVvdXQoIGZ1bmN0aW9uKCkge1xuXHRcdGZ4Tm93ID0gdW5kZWZpbmVkO1xuXHR9ICk7XG5cdHJldHVybiAoIGZ4Tm93ID0gRGF0ZS5ub3coKSApO1xufVxuXG4vLyBHZW5lcmF0ZSBwYXJhbWV0ZXJzIHRvIGNyZWF0ZSBhIHN0YW5kYXJkIGFuaW1hdGlvblxuZnVuY3Rpb24gZ2VuRngoIHR5cGUsIGluY2x1ZGVXaWR0aCApIHtcblx0dmFyIHdoaWNoLFxuXHRcdGkgPSAwLFxuXHRcdGF0dHJzID0geyBoZWlnaHQ6IHR5cGUgfTtcblxuXHQvLyBJZiB3ZSBpbmNsdWRlIHdpZHRoLCBzdGVwIHZhbHVlIGlzIDEgdG8gZG8gYWxsIGNzc0V4cGFuZCB2YWx1ZXMsXG5cdC8vIG90aGVyd2lzZSBzdGVwIHZhbHVlIGlzIDIgdG8gc2tpcCBvdmVyIExlZnQgYW5kIFJpZ2h0XG5cdGluY2x1ZGVXaWR0aCA9IGluY2x1ZGVXaWR0aCA/IDEgOiAwO1xuXHRmb3IgKCA7IGkgPCA0OyBpICs9IDIgLSBpbmNsdWRlV2lkdGggKSB7XG5cdFx0d2hpY2ggPSBjc3NFeHBhbmRbIGkgXTtcblx0XHRhdHRyc1sgXCJtYXJnaW5cIiArIHdoaWNoIF0gPSBhdHRyc1sgXCJwYWRkaW5nXCIgKyB3aGljaCBdID0gdHlwZTtcblx0fVxuXG5cdGlmICggaW5jbHVkZVdpZHRoICkge1xuXHRcdGF0dHJzLm9wYWNpdHkgPSBhdHRycy53aWR0aCA9IHR5cGU7XG5cdH1cblxuXHRyZXR1cm4gYXR0cnM7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVR3ZWVuKCB2YWx1ZSwgcHJvcCwgYW5pbWF0aW9uICkge1xuXHR2YXIgdHdlZW4sXG5cdFx0Y29sbGVjdGlvbiA9ICggQW5pbWF0aW9uLnR3ZWVuZXJzWyBwcm9wIF0gfHwgW10gKS5jb25jYXQoIEFuaW1hdGlvbi50d2VlbmVyc1sgXCIqXCIgXSApLFxuXHRcdGluZGV4ID0gMCxcblx0XHRsZW5ndGggPSBjb2xsZWN0aW9uLmxlbmd0aDtcblx0Zm9yICggOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKyApIHtcblx0XHRpZiAoICggdHdlZW4gPSBjb2xsZWN0aW9uWyBpbmRleCBdLmNhbGwoIGFuaW1hdGlvbiwgcHJvcCwgdmFsdWUgKSApICkge1xuXG5cdFx0XHQvLyBXZSdyZSBkb25lIHdpdGggdGhpcyBwcm9wZXJ0eVxuXHRcdFx0cmV0dXJuIHR3ZWVuO1xuXHRcdH1cblx0fVxufVxuXG5mdW5jdGlvbiBkZWZhdWx0UHJlZmlsdGVyKCBlbGVtLCBwcm9wcywgb3B0cyApIHtcblx0dmFyIHByb3AsIHZhbHVlLCB0b2dnbGUsIGhvb2tzLCBvbGRmaXJlLCBwcm9wVHdlZW4sIHJlc3RvcmVEaXNwbGF5LCBkaXNwbGF5LFxuXHRcdGlzQm94ID0gXCJ3aWR0aFwiIGluIHByb3BzIHx8IFwiaGVpZ2h0XCIgaW4gcHJvcHMsXG5cdFx0YW5pbSA9IHRoaXMsXG5cdFx0b3JpZyA9IHt9LFxuXHRcdHN0eWxlID0gZWxlbS5zdHlsZSxcblx0XHRoaWRkZW4gPSBlbGVtLm5vZGVUeXBlICYmIGlzSGlkZGVuV2l0aGluVHJlZSggZWxlbSApLFxuXHRcdGRhdGFTaG93ID0gZGF0YVByaXYuZ2V0KCBlbGVtLCBcImZ4c2hvd1wiICk7XG5cblx0Ly8gUXVldWUtc2tpcHBpbmcgYW5pbWF0aW9ucyBoaWphY2sgdGhlIGZ4IGhvb2tzXG5cdGlmICggIW9wdHMucXVldWUgKSB7XG5cdFx0aG9va3MgPSBqUXVlcnkuX3F1ZXVlSG9va3MoIGVsZW0sIFwiZnhcIiApO1xuXHRcdGlmICggaG9va3MudW5xdWV1ZWQgPT0gbnVsbCApIHtcblx0XHRcdGhvb2tzLnVucXVldWVkID0gMDtcblx0XHRcdG9sZGZpcmUgPSBob29rcy5lbXB0eS5maXJlO1xuXHRcdFx0aG9va3MuZW1wdHkuZmlyZSA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRpZiAoICFob29rcy51bnF1ZXVlZCApIHtcblx0XHRcdFx0XHRvbGRmaXJlKCk7XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cdFx0fVxuXHRcdGhvb2tzLnVucXVldWVkKys7XG5cblx0XHRhbmltLmFsd2F5cyggZnVuY3Rpb24oKSB7XG5cblx0XHRcdC8vIEVuc3VyZSB0aGUgY29tcGxldGUgaGFuZGxlciBpcyBjYWxsZWQgYmVmb3JlIHRoaXMgY29tcGxldGVzXG5cdFx0XHRhbmltLmFsd2F5cyggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGhvb2tzLnVucXVldWVkLS07XG5cdFx0XHRcdGlmICggIWpRdWVyeS5xdWV1ZSggZWxlbSwgXCJmeFwiICkubGVuZ3RoICkge1xuXHRcdFx0XHRcdGhvb2tzLmVtcHR5LmZpcmUoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSApO1xuXHRcdH0gKTtcblx0fVxuXG5cdC8vIERldGVjdCBzaG93L2hpZGUgYW5pbWF0aW9uc1xuXHRmb3IgKCBwcm9wIGluIHByb3BzICkge1xuXHRcdHZhbHVlID0gcHJvcHNbIHByb3AgXTtcblx0XHRpZiAoIHJmeHR5cGVzLnRlc3QoIHZhbHVlICkgKSB7XG5cdFx0XHRkZWxldGUgcHJvcHNbIHByb3AgXTtcblx0XHRcdHRvZ2dsZSA9IHRvZ2dsZSB8fCB2YWx1ZSA9PT0gXCJ0b2dnbGVcIjtcblx0XHRcdGlmICggdmFsdWUgPT09ICggaGlkZGVuID8gXCJoaWRlXCIgOiBcInNob3dcIiApICkge1xuXG5cdFx0XHRcdC8vIFByZXRlbmQgdG8gYmUgaGlkZGVuIGlmIHRoaXMgaXMgYSBcInNob3dcIiBhbmRcblx0XHRcdFx0Ly8gdGhlcmUgaXMgc3RpbGwgZGF0YSBmcm9tIGEgc3RvcHBlZCBzaG93L2hpZGVcblx0XHRcdFx0aWYgKCB2YWx1ZSA9PT0gXCJzaG93XCIgJiYgZGF0YVNob3cgJiYgZGF0YVNob3dbIHByb3AgXSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRcdGhpZGRlbiA9IHRydWU7XG5cblx0XHRcdFx0Ly8gSWdub3JlIGFsbCBvdGhlciBuby1vcCBzaG93L2hpZGUgZGF0YVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRvcmlnWyBwcm9wIF0gPSBkYXRhU2hvdyAmJiBkYXRhU2hvd1sgcHJvcCBdIHx8IGpRdWVyeS5zdHlsZSggZWxlbSwgcHJvcCApO1xuXHRcdH1cblx0fVxuXG5cdC8vIEJhaWwgb3V0IGlmIHRoaXMgaXMgYSBuby1vcCBsaWtlIC5oaWRlKCkuaGlkZSgpXG5cdHByb3BUd2VlbiA9ICFqUXVlcnkuaXNFbXB0eU9iamVjdCggcHJvcHMgKTtcblx0aWYgKCAhcHJvcFR3ZWVuICYmIGpRdWVyeS5pc0VtcHR5T2JqZWN0KCBvcmlnICkgKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0Ly8gUmVzdHJpY3QgXCJvdmVyZmxvd1wiIGFuZCBcImRpc3BsYXlcIiBzdHlsZXMgZHVyaW5nIGJveCBhbmltYXRpb25zXG5cdGlmICggaXNCb3ggJiYgZWxlbS5ub2RlVHlwZSA9PT0gMSApIHtcblxuXHRcdC8vIFN1cHBvcnQ6IElFIDw9OSAtIDExLCBFZGdlIDEyIC0gMTVcblx0XHQvLyBSZWNvcmQgYWxsIDMgb3ZlcmZsb3cgYXR0cmlidXRlcyBiZWNhdXNlIElFIGRvZXMgbm90IGluZmVyIHRoZSBzaG9ydGhhbmRcblx0XHQvLyBmcm9tIGlkZW50aWNhbGx5LXZhbHVlZCBvdmVyZmxvd1ggYW5kIG92ZXJmbG93WSBhbmQgRWRnZSBqdXN0IG1pcnJvcnNcblx0XHQvLyB0aGUgb3ZlcmZsb3dYIHZhbHVlIHRoZXJlLlxuXHRcdG9wdHMub3ZlcmZsb3cgPSBbIHN0eWxlLm92ZXJmbG93LCBzdHlsZS5vdmVyZmxvd1gsIHN0eWxlLm92ZXJmbG93WSBdO1xuXG5cdFx0Ly8gSWRlbnRpZnkgYSBkaXNwbGF5IHR5cGUsIHByZWZlcnJpbmcgb2xkIHNob3cvaGlkZSBkYXRhIG92ZXIgdGhlIENTUyBjYXNjYWRlXG5cdFx0cmVzdG9yZURpc3BsYXkgPSBkYXRhU2hvdyAmJiBkYXRhU2hvdy5kaXNwbGF5O1xuXHRcdGlmICggcmVzdG9yZURpc3BsYXkgPT0gbnVsbCApIHtcblx0XHRcdHJlc3RvcmVEaXNwbGF5ID0gZGF0YVByaXYuZ2V0KCBlbGVtLCBcImRpc3BsYXlcIiApO1xuXHRcdH1cblx0XHRkaXNwbGF5ID0galF1ZXJ5LmNzcyggZWxlbSwgXCJkaXNwbGF5XCIgKTtcblx0XHRpZiAoIGRpc3BsYXkgPT09IFwibm9uZVwiICkge1xuXHRcdFx0aWYgKCByZXN0b3JlRGlzcGxheSApIHtcblx0XHRcdFx0ZGlzcGxheSA9IHJlc3RvcmVEaXNwbGF5O1xuXHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHQvLyBHZXQgbm9uZW1wdHkgdmFsdWUocykgYnkgdGVtcG9yYXJpbHkgZm9yY2luZyB2aXNpYmlsaXR5XG5cdFx0XHRcdHNob3dIaWRlKCBbIGVsZW0gXSwgdHJ1ZSApO1xuXHRcdFx0XHRyZXN0b3JlRGlzcGxheSA9IGVsZW0uc3R5bGUuZGlzcGxheSB8fCByZXN0b3JlRGlzcGxheTtcblx0XHRcdFx0ZGlzcGxheSA9IGpRdWVyeS5jc3MoIGVsZW0sIFwiZGlzcGxheVwiICk7XG5cdFx0XHRcdHNob3dIaWRlKCBbIGVsZW0gXSApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIEFuaW1hdGUgaW5saW5lIGVsZW1lbnRzIGFzIGlubGluZS1ibG9ja1xuXHRcdGlmICggZGlzcGxheSA9PT0gXCJpbmxpbmVcIiB8fCBkaXNwbGF5ID09PSBcImlubGluZS1ibG9ja1wiICYmIHJlc3RvcmVEaXNwbGF5ICE9IG51bGwgKSB7XG5cdFx0XHRpZiAoIGpRdWVyeS5jc3MoIGVsZW0sIFwiZmxvYXRcIiApID09PSBcIm5vbmVcIiApIHtcblxuXHRcdFx0XHQvLyBSZXN0b3JlIHRoZSBvcmlnaW5hbCBkaXNwbGF5IHZhbHVlIGF0IHRoZSBlbmQgb2YgcHVyZSBzaG93L2hpZGUgYW5pbWF0aW9uc1xuXHRcdFx0XHRpZiAoICFwcm9wVHdlZW4gKSB7XG5cdFx0XHRcdFx0YW5pbS5kb25lKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdHN0eWxlLmRpc3BsYXkgPSByZXN0b3JlRGlzcGxheTtcblx0XHRcdFx0XHR9ICk7XG5cdFx0XHRcdFx0aWYgKCByZXN0b3JlRGlzcGxheSA9PSBudWxsICkge1xuXHRcdFx0XHRcdFx0ZGlzcGxheSA9IHN0eWxlLmRpc3BsYXk7XG5cdFx0XHRcdFx0XHRyZXN0b3JlRGlzcGxheSA9IGRpc3BsYXkgPT09IFwibm9uZVwiID8gXCJcIiA6IGRpc3BsYXk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdHN0eWxlLmRpc3BsYXkgPSBcImlubGluZS1ibG9ja1wiO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGlmICggb3B0cy5vdmVyZmxvdyApIHtcblx0XHRzdHlsZS5vdmVyZmxvdyA9IFwiaGlkZGVuXCI7XG5cdFx0YW5pbS5hbHdheXMoIGZ1bmN0aW9uKCkge1xuXHRcdFx0c3R5bGUub3ZlcmZsb3cgPSBvcHRzLm92ZXJmbG93WyAwIF07XG5cdFx0XHRzdHlsZS5vdmVyZmxvd1ggPSBvcHRzLm92ZXJmbG93WyAxIF07XG5cdFx0XHRzdHlsZS5vdmVyZmxvd1kgPSBvcHRzLm92ZXJmbG93WyAyIF07XG5cdFx0fSApO1xuXHR9XG5cblx0Ly8gSW1wbGVtZW50IHNob3cvaGlkZSBhbmltYXRpb25zXG5cdHByb3BUd2VlbiA9IGZhbHNlO1xuXHRmb3IgKCBwcm9wIGluIG9yaWcgKSB7XG5cblx0XHQvLyBHZW5lcmFsIHNob3cvaGlkZSBzZXR1cCBmb3IgdGhpcyBlbGVtZW50IGFuaW1hdGlvblxuXHRcdGlmICggIXByb3BUd2VlbiApIHtcblx0XHRcdGlmICggZGF0YVNob3cgKSB7XG5cdFx0XHRcdGlmICggXCJoaWRkZW5cIiBpbiBkYXRhU2hvdyApIHtcblx0XHRcdFx0XHRoaWRkZW4gPSBkYXRhU2hvdy5oaWRkZW47XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGRhdGFTaG93ID0gZGF0YVByaXYuYWNjZXNzKCBlbGVtLCBcImZ4c2hvd1wiLCB7IGRpc3BsYXk6IHJlc3RvcmVEaXNwbGF5IH0gKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU3RvcmUgaGlkZGVuL3Zpc2libGUgZm9yIHRvZ2dsZSBzbyBgLnN0b3AoKS50b2dnbGUoKWAgXCJyZXZlcnNlc1wiXG5cdFx0XHRpZiAoIHRvZ2dsZSApIHtcblx0XHRcdFx0ZGF0YVNob3cuaGlkZGVuID0gIWhpZGRlbjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU2hvdyBlbGVtZW50cyBiZWZvcmUgYW5pbWF0aW5nIHRoZW1cblx0XHRcdGlmICggaGlkZGVuICkge1xuXHRcdFx0XHRzaG93SGlkZSggWyBlbGVtIF0sIHRydWUgKTtcblx0XHRcdH1cblxuXHRcdFx0LyogZXNsaW50LWRpc2FibGUgbm8tbG9vcC1mdW5jICovXG5cblx0XHRcdGFuaW0uZG9uZSggZnVuY3Rpb24oKSB7XG5cblx0XHRcdC8qIGVzbGludC1lbmFibGUgbm8tbG9vcC1mdW5jICovXG5cblx0XHRcdFx0Ly8gVGhlIGZpbmFsIHN0ZXAgb2YgYSBcImhpZGVcIiBhbmltYXRpb24gaXMgYWN0dWFsbHkgaGlkaW5nIHRoZSBlbGVtZW50XG5cdFx0XHRcdGlmICggIWhpZGRlbiApIHtcblx0XHRcdFx0XHRzaG93SGlkZSggWyBlbGVtIF0gKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRkYXRhUHJpdi5yZW1vdmUoIGVsZW0sIFwiZnhzaG93XCIgKTtcblx0XHRcdFx0Zm9yICggcHJvcCBpbiBvcmlnICkge1xuXHRcdFx0XHRcdGpRdWVyeS5zdHlsZSggZWxlbSwgcHJvcCwgb3JpZ1sgcHJvcCBdICk7XG5cdFx0XHRcdH1cblx0XHRcdH0gKTtcblx0XHR9XG5cblx0XHQvLyBQZXItcHJvcGVydHkgc2V0dXBcblx0XHRwcm9wVHdlZW4gPSBjcmVhdGVUd2VlbiggaGlkZGVuID8gZGF0YVNob3dbIHByb3AgXSA6IDAsIHByb3AsIGFuaW0gKTtcblx0XHRpZiAoICEoIHByb3AgaW4gZGF0YVNob3cgKSApIHtcblx0XHRcdGRhdGFTaG93WyBwcm9wIF0gPSBwcm9wVHdlZW4uc3RhcnQ7XG5cdFx0XHRpZiAoIGhpZGRlbiApIHtcblx0XHRcdFx0cHJvcFR3ZWVuLmVuZCA9IHByb3BUd2Vlbi5zdGFydDtcblx0XHRcdFx0cHJvcFR3ZWVuLnN0YXJ0ID0gMDtcblx0XHRcdH1cblx0XHR9XG5cdH1cbn1cblxuZnVuY3Rpb24gcHJvcEZpbHRlciggcHJvcHMsIHNwZWNpYWxFYXNpbmcgKSB7XG5cdHZhciBpbmRleCwgbmFtZSwgZWFzaW5nLCB2YWx1ZSwgaG9va3M7XG5cblx0Ly8gY2FtZWxDYXNlLCBzcGVjaWFsRWFzaW5nIGFuZCBleHBhbmQgY3NzSG9vayBwYXNzXG5cdGZvciAoIGluZGV4IGluIHByb3BzICkge1xuXHRcdG5hbWUgPSBjYW1lbENhc2UoIGluZGV4ICk7XG5cdFx0ZWFzaW5nID0gc3BlY2lhbEVhc2luZ1sgbmFtZSBdO1xuXHRcdHZhbHVlID0gcHJvcHNbIGluZGV4IF07XG5cdFx0aWYgKCBBcnJheS5pc0FycmF5KCB2YWx1ZSApICkge1xuXHRcdFx0ZWFzaW5nID0gdmFsdWVbIDEgXTtcblx0XHRcdHZhbHVlID0gcHJvcHNbIGluZGV4IF0gPSB2YWx1ZVsgMCBdO1xuXHRcdH1cblxuXHRcdGlmICggaW5kZXggIT09IG5hbWUgKSB7XG5cdFx0XHRwcm9wc1sgbmFtZSBdID0gdmFsdWU7XG5cdFx0XHRkZWxldGUgcHJvcHNbIGluZGV4IF07XG5cdFx0fVxuXG5cdFx0aG9va3MgPSBqUXVlcnkuY3NzSG9va3NbIG5hbWUgXTtcblx0XHRpZiAoIGhvb2tzICYmIFwiZXhwYW5kXCIgaW4gaG9va3MgKSB7XG5cdFx0XHR2YWx1ZSA9IGhvb2tzLmV4cGFuZCggdmFsdWUgKTtcblx0XHRcdGRlbGV0ZSBwcm9wc1sgbmFtZSBdO1xuXG5cdFx0XHQvLyBOb3QgcXVpdGUgJC5leHRlbmQsIHRoaXMgd29uJ3Qgb3ZlcndyaXRlIGV4aXN0aW5nIGtleXMuXG5cdFx0XHQvLyBSZXVzaW5nICdpbmRleCcgYmVjYXVzZSB3ZSBoYXZlIHRoZSBjb3JyZWN0IFwibmFtZVwiXG5cdFx0XHRmb3IgKCBpbmRleCBpbiB2YWx1ZSApIHtcblx0XHRcdFx0aWYgKCAhKCBpbmRleCBpbiBwcm9wcyApICkge1xuXHRcdFx0XHRcdHByb3BzWyBpbmRleCBdID0gdmFsdWVbIGluZGV4IF07XG5cdFx0XHRcdFx0c3BlY2lhbEVhc2luZ1sgaW5kZXggXSA9IGVhc2luZztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRzcGVjaWFsRWFzaW5nWyBuYW1lIF0gPSBlYXNpbmc7XG5cdFx0fVxuXHR9XG59XG5cbmZ1bmN0aW9uIEFuaW1hdGlvbiggZWxlbSwgcHJvcGVydGllcywgb3B0aW9ucyApIHtcblx0dmFyIHJlc3VsdCxcblx0XHRzdG9wcGVkLFxuXHRcdGluZGV4ID0gMCxcblx0XHRsZW5ndGggPSBBbmltYXRpb24ucHJlZmlsdGVycy5sZW5ndGgsXG5cdFx0ZGVmZXJyZWQgPSBqUXVlcnkuRGVmZXJyZWQoKS5hbHdheXMoIGZ1bmN0aW9uKCkge1xuXG5cdFx0XHQvLyBEb24ndCBtYXRjaCBlbGVtIGluIHRoZSA6YW5pbWF0ZWQgc2VsZWN0b3Jcblx0XHRcdGRlbGV0ZSB0aWNrLmVsZW07XG5cdFx0fSApLFxuXHRcdHRpY2sgPSBmdW5jdGlvbigpIHtcblx0XHRcdGlmICggc3RvcHBlZCApIHtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXHRcdFx0dmFyIGN1cnJlbnRUaW1lID0gZnhOb3cgfHwgY3JlYXRlRnhOb3coKSxcblx0XHRcdFx0cmVtYWluaW5nID0gTWF0aC5tYXgoIDAsIGFuaW1hdGlvbi5zdGFydFRpbWUgKyBhbmltYXRpb24uZHVyYXRpb24gLSBjdXJyZW50VGltZSApLFxuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQgMi4zIG9ubHlcblx0XHRcdFx0Ly8gQXJjaGFpYyBjcmFzaCBidWcgd29uJ3QgYWxsb3cgdXMgdG8gdXNlIGAxIC0gKCAwLjUgfHwgMCApYCAoIzEyNDk3KVxuXHRcdFx0XHR0ZW1wID0gcmVtYWluaW5nIC8gYW5pbWF0aW9uLmR1cmF0aW9uIHx8IDAsXG5cdFx0XHRcdHBlcmNlbnQgPSAxIC0gdGVtcCxcblx0XHRcdFx0aW5kZXggPSAwLFxuXHRcdFx0XHRsZW5ndGggPSBhbmltYXRpb24udHdlZW5zLmxlbmd0aDtcblxuXHRcdFx0Zm9yICggOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKyApIHtcblx0XHRcdFx0YW5pbWF0aW9uLnR3ZWVuc1sgaW5kZXggXS5ydW4oIHBlcmNlbnQgKTtcblx0XHRcdH1cblxuXHRcdFx0ZGVmZXJyZWQubm90aWZ5V2l0aCggZWxlbSwgWyBhbmltYXRpb24sIHBlcmNlbnQsIHJlbWFpbmluZyBdICk7XG5cblx0XHRcdC8vIElmIHRoZXJlJ3MgbW9yZSB0byBkbywgeWllbGRcblx0XHRcdGlmICggcGVyY2VudCA8IDEgJiYgbGVuZ3RoICkge1xuXHRcdFx0XHRyZXR1cm4gcmVtYWluaW5nO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBJZiB0aGlzIHdhcyBhbiBlbXB0eSBhbmltYXRpb24sIHN5bnRoZXNpemUgYSBmaW5hbCBwcm9ncmVzcyBub3RpZmljYXRpb25cblx0XHRcdGlmICggIWxlbmd0aCApIHtcblx0XHRcdFx0ZGVmZXJyZWQubm90aWZ5V2l0aCggZWxlbSwgWyBhbmltYXRpb24sIDEsIDAgXSApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBSZXNvbHZlIHRoZSBhbmltYXRpb24gYW5kIHJlcG9ydCBpdHMgY29uY2x1c2lvblxuXHRcdFx0ZGVmZXJyZWQucmVzb2x2ZVdpdGgoIGVsZW0sIFsgYW5pbWF0aW9uIF0gKTtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9LFxuXHRcdGFuaW1hdGlvbiA9IGRlZmVycmVkLnByb21pc2UoIHtcblx0XHRcdGVsZW06IGVsZW0sXG5cdFx0XHRwcm9wczogalF1ZXJ5LmV4dGVuZCgge30sIHByb3BlcnRpZXMgKSxcblx0XHRcdG9wdHM6IGpRdWVyeS5leHRlbmQoIHRydWUsIHtcblx0XHRcdFx0c3BlY2lhbEVhc2luZzoge30sXG5cdFx0XHRcdGVhc2luZzogalF1ZXJ5LmVhc2luZy5fZGVmYXVsdFxuXHRcdFx0fSwgb3B0aW9ucyApLFxuXHRcdFx0b3JpZ2luYWxQcm9wZXJ0aWVzOiBwcm9wZXJ0aWVzLFxuXHRcdFx0b3JpZ2luYWxPcHRpb25zOiBvcHRpb25zLFxuXHRcdFx0c3RhcnRUaW1lOiBmeE5vdyB8fCBjcmVhdGVGeE5vdygpLFxuXHRcdFx0ZHVyYXRpb246IG9wdGlvbnMuZHVyYXRpb24sXG5cdFx0XHR0d2VlbnM6IFtdLFxuXHRcdFx0Y3JlYXRlVHdlZW46IGZ1bmN0aW9uKCBwcm9wLCBlbmQgKSB7XG5cdFx0XHRcdHZhciB0d2VlbiA9IGpRdWVyeS5Ud2VlbiggZWxlbSwgYW5pbWF0aW9uLm9wdHMsIHByb3AsIGVuZCxcblx0XHRcdFx0XHRcdGFuaW1hdGlvbi5vcHRzLnNwZWNpYWxFYXNpbmdbIHByb3AgXSB8fCBhbmltYXRpb24ub3B0cy5lYXNpbmcgKTtcblx0XHRcdFx0YW5pbWF0aW9uLnR3ZWVucy5wdXNoKCB0d2VlbiApO1xuXHRcdFx0XHRyZXR1cm4gdHdlZW47XG5cdFx0XHR9LFxuXHRcdFx0c3RvcDogZnVuY3Rpb24oIGdvdG9FbmQgKSB7XG5cdFx0XHRcdHZhciBpbmRleCA9IDAsXG5cblx0XHRcdFx0XHQvLyBJZiB3ZSBhcmUgZ29pbmcgdG8gdGhlIGVuZCwgd2Ugd2FudCB0byBydW4gYWxsIHRoZSB0d2VlbnNcblx0XHRcdFx0XHQvLyBvdGhlcndpc2Ugd2Ugc2tpcCB0aGlzIHBhcnRcblx0XHRcdFx0XHRsZW5ndGggPSBnb3RvRW5kID8gYW5pbWF0aW9uLnR3ZWVucy5sZW5ndGggOiAwO1xuXHRcdFx0XHRpZiAoIHN0b3BwZWQgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHRcdH1cblx0XHRcdFx0c3RvcHBlZCA9IHRydWU7XG5cdFx0XHRcdGZvciAoIDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KysgKSB7XG5cdFx0XHRcdFx0YW5pbWF0aW9uLnR3ZWVuc1sgaW5kZXggXS5ydW4oIDEgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFJlc29sdmUgd2hlbiB3ZSBwbGF5ZWQgdGhlIGxhc3QgZnJhbWU7IG90aGVyd2lzZSwgcmVqZWN0XG5cdFx0XHRcdGlmICggZ290b0VuZCApIHtcblx0XHRcdFx0XHRkZWZlcnJlZC5ub3RpZnlXaXRoKCBlbGVtLCBbIGFuaW1hdGlvbiwgMSwgMCBdICk7XG5cdFx0XHRcdFx0ZGVmZXJyZWQucmVzb2x2ZVdpdGgoIGVsZW0sIFsgYW5pbWF0aW9uLCBnb3RvRW5kIF0gKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRkZWZlcnJlZC5yZWplY3RXaXRoKCBlbGVtLCBbIGFuaW1hdGlvbiwgZ290b0VuZCBdICk7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9XG5cdFx0fSApLFxuXHRcdHByb3BzID0gYW5pbWF0aW9uLnByb3BzO1xuXG5cdHByb3BGaWx0ZXIoIHByb3BzLCBhbmltYXRpb24ub3B0cy5zcGVjaWFsRWFzaW5nICk7XG5cblx0Zm9yICggOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKyApIHtcblx0XHRyZXN1bHQgPSBBbmltYXRpb24ucHJlZmlsdGVyc1sgaW5kZXggXS5jYWxsKCBhbmltYXRpb24sIGVsZW0sIHByb3BzLCBhbmltYXRpb24ub3B0cyApO1xuXHRcdGlmICggcmVzdWx0ICkge1xuXHRcdFx0aWYgKCBpc0Z1bmN0aW9uKCByZXN1bHQuc3RvcCApICkge1xuXHRcdFx0XHRqUXVlcnkuX3F1ZXVlSG9va3MoIGFuaW1hdGlvbi5lbGVtLCBhbmltYXRpb24ub3B0cy5xdWV1ZSApLnN0b3AgPVxuXHRcdFx0XHRcdHJlc3VsdC5zdG9wLmJpbmQoIHJlc3VsdCApO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHR9XG5cdH1cblxuXHRqUXVlcnkubWFwKCBwcm9wcywgY3JlYXRlVHdlZW4sIGFuaW1hdGlvbiApO1xuXG5cdGlmICggaXNGdW5jdGlvbiggYW5pbWF0aW9uLm9wdHMuc3RhcnQgKSApIHtcblx0XHRhbmltYXRpb24ub3B0cy5zdGFydC5jYWxsKCBlbGVtLCBhbmltYXRpb24gKTtcblx0fVxuXG5cdC8vIEF0dGFjaCBjYWxsYmFja3MgZnJvbSBvcHRpb25zXG5cdGFuaW1hdGlvblxuXHRcdC5wcm9ncmVzcyggYW5pbWF0aW9uLm9wdHMucHJvZ3Jlc3MgKVxuXHRcdC5kb25lKCBhbmltYXRpb24ub3B0cy5kb25lLCBhbmltYXRpb24ub3B0cy5jb21wbGV0ZSApXG5cdFx0LmZhaWwoIGFuaW1hdGlvbi5vcHRzLmZhaWwgKVxuXHRcdC5hbHdheXMoIGFuaW1hdGlvbi5vcHRzLmFsd2F5cyApO1xuXG5cdGpRdWVyeS5meC50aW1lcihcblx0XHRqUXVlcnkuZXh0ZW5kKCB0aWNrLCB7XG5cdFx0XHRlbGVtOiBlbGVtLFxuXHRcdFx0YW5pbTogYW5pbWF0aW9uLFxuXHRcdFx0cXVldWU6IGFuaW1hdGlvbi5vcHRzLnF1ZXVlXG5cdFx0fSApXG5cdCk7XG5cblx0cmV0dXJuIGFuaW1hdGlvbjtcbn1cblxualF1ZXJ5LkFuaW1hdGlvbiA9IGpRdWVyeS5leHRlbmQoIEFuaW1hdGlvbiwge1xuXG5cdHR3ZWVuZXJzOiB7XG5cdFx0XCIqXCI6IFsgZnVuY3Rpb24oIHByb3AsIHZhbHVlICkge1xuXHRcdFx0dmFyIHR3ZWVuID0gdGhpcy5jcmVhdGVUd2VlbiggcHJvcCwgdmFsdWUgKTtcblx0XHRcdGFkanVzdENTUyggdHdlZW4uZWxlbSwgcHJvcCwgcmNzc051bS5leGVjKCB2YWx1ZSApLCB0d2VlbiApO1xuXHRcdFx0cmV0dXJuIHR3ZWVuO1xuXHRcdH0gXVxuXHR9LFxuXG5cdHR3ZWVuZXI6IGZ1bmN0aW9uKCBwcm9wcywgY2FsbGJhY2sgKSB7XG5cdFx0aWYgKCBpc0Z1bmN0aW9uKCBwcm9wcyApICkge1xuXHRcdFx0Y2FsbGJhY2sgPSBwcm9wcztcblx0XHRcdHByb3BzID0gWyBcIipcIiBdO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRwcm9wcyA9IHByb3BzLm1hdGNoKCBybm90aHRtbHdoaXRlICk7XG5cdFx0fVxuXG5cdFx0dmFyIHByb3AsXG5cdFx0XHRpbmRleCA9IDAsXG5cdFx0XHRsZW5ndGggPSBwcm9wcy5sZW5ndGg7XG5cblx0XHRmb3IgKCA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrICkge1xuXHRcdFx0cHJvcCA9IHByb3BzWyBpbmRleCBdO1xuXHRcdFx0QW5pbWF0aW9uLnR3ZWVuZXJzWyBwcm9wIF0gPSBBbmltYXRpb24udHdlZW5lcnNbIHByb3AgXSB8fCBbXTtcblx0XHRcdEFuaW1hdGlvbi50d2VlbmVyc1sgcHJvcCBdLnVuc2hpZnQoIGNhbGxiYWNrICk7XG5cdFx0fVxuXHR9LFxuXG5cdHByZWZpbHRlcnM6IFsgZGVmYXVsdFByZWZpbHRlciBdLFxuXG5cdHByZWZpbHRlcjogZnVuY3Rpb24oIGNhbGxiYWNrLCBwcmVwZW5kICkge1xuXHRcdGlmICggcHJlcGVuZCApIHtcblx0XHRcdEFuaW1hdGlvbi5wcmVmaWx0ZXJzLnVuc2hpZnQoIGNhbGxiYWNrICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdEFuaW1hdGlvbi5wcmVmaWx0ZXJzLnB1c2goIGNhbGxiYWNrICk7XG5cdFx0fVxuXHR9XG59ICk7XG5cbmpRdWVyeS5zcGVlZCA9IGZ1bmN0aW9uKCBzcGVlZCwgZWFzaW5nLCBmbiApIHtcblx0dmFyIG9wdCA9IHNwZWVkICYmIHR5cGVvZiBzcGVlZCA9PT0gXCJvYmplY3RcIiA/IGpRdWVyeS5leHRlbmQoIHt9LCBzcGVlZCApIDoge1xuXHRcdGNvbXBsZXRlOiBmbiB8fCAhZm4gJiYgZWFzaW5nIHx8XG5cdFx0XHRpc0Z1bmN0aW9uKCBzcGVlZCApICYmIHNwZWVkLFxuXHRcdGR1cmF0aW9uOiBzcGVlZCxcblx0XHRlYXNpbmc6IGZuICYmIGVhc2luZyB8fCBlYXNpbmcgJiYgIWlzRnVuY3Rpb24oIGVhc2luZyApICYmIGVhc2luZ1xuXHR9O1xuXG5cdC8vIEdvIHRvIHRoZSBlbmQgc3RhdGUgaWYgZnggYXJlIG9mZlxuXHRpZiAoIGpRdWVyeS5meC5vZmYgKSB7XG5cdFx0b3B0LmR1cmF0aW9uID0gMDtcblxuXHR9IGVsc2Uge1xuXHRcdGlmICggdHlwZW9mIG9wdC5kdXJhdGlvbiAhPT0gXCJudW1iZXJcIiApIHtcblx0XHRcdGlmICggb3B0LmR1cmF0aW9uIGluIGpRdWVyeS5meC5zcGVlZHMgKSB7XG5cdFx0XHRcdG9wdC5kdXJhdGlvbiA9IGpRdWVyeS5meC5zcGVlZHNbIG9wdC5kdXJhdGlvbiBdO1xuXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRvcHQuZHVyYXRpb24gPSBqUXVlcnkuZnguc3BlZWRzLl9kZWZhdWx0O1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIE5vcm1hbGl6ZSBvcHQucXVldWUgLSB0cnVlL3VuZGVmaW5lZC9udWxsIC0+IFwiZnhcIlxuXHRpZiAoIG9wdC5xdWV1ZSA9PSBudWxsIHx8IG9wdC5xdWV1ZSA9PT0gdHJ1ZSApIHtcblx0XHRvcHQucXVldWUgPSBcImZ4XCI7XG5cdH1cblxuXHQvLyBRdWV1ZWluZ1xuXHRvcHQub2xkID0gb3B0LmNvbXBsZXRlO1xuXG5cdG9wdC5jb21wbGV0ZSA9IGZ1bmN0aW9uKCkge1xuXHRcdGlmICggaXNGdW5jdGlvbiggb3B0Lm9sZCApICkge1xuXHRcdFx0b3B0Lm9sZC5jYWxsKCB0aGlzICk7XG5cdFx0fVxuXG5cdFx0aWYgKCBvcHQucXVldWUgKSB7XG5cdFx0XHRqUXVlcnkuZGVxdWV1ZSggdGhpcywgb3B0LnF1ZXVlICk7XG5cdFx0fVxuXHR9O1xuXG5cdHJldHVybiBvcHQ7XG59O1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdGZhZGVUbzogZnVuY3Rpb24oIHNwZWVkLCB0bywgZWFzaW5nLCBjYWxsYmFjayApIHtcblxuXHRcdC8vIFNob3cgYW55IGhpZGRlbiBlbGVtZW50cyBhZnRlciBzZXR0aW5nIG9wYWNpdHkgdG8gMFxuXHRcdHJldHVybiB0aGlzLmZpbHRlciggaXNIaWRkZW5XaXRoaW5UcmVlICkuY3NzKCBcIm9wYWNpdHlcIiwgMCApLnNob3coKVxuXG5cdFx0XHQvLyBBbmltYXRlIHRvIHRoZSB2YWx1ZSBzcGVjaWZpZWRcblx0XHRcdC5lbmQoKS5hbmltYXRlKCB7IG9wYWNpdHk6IHRvIH0sIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICk7XG5cdH0sXG5cdGFuaW1hdGU6IGZ1bmN0aW9uKCBwcm9wLCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayApIHtcblx0XHR2YXIgZW1wdHkgPSBqUXVlcnkuaXNFbXB0eU9iamVjdCggcHJvcCApLFxuXHRcdFx0b3B0YWxsID0galF1ZXJ5LnNwZWVkKCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayApLFxuXHRcdFx0ZG9BbmltYXRpb24gPSBmdW5jdGlvbigpIHtcblxuXHRcdFx0XHQvLyBPcGVyYXRlIG9uIGEgY29weSBvZiBwcm9wIHNvIHBlci1wcm9wZXJ0eSBlYXNpbmcgd29uJ3QgYmUgbG9zdFxuXHRcdFx0XHR2YXIgYW5pbSA9IEFuaW1hdGlvbiggdGhpcywgalF1ZXJ5LmV4dGVuZCgge30sIHByb3AgKSwgb3B0YWxsICk7XG5cblx0XHRcdFx0Ly8gRW1wdHkgYW5pbWF0aW9ucywgb3IgZmluaXNoaW5nIHJlc29sdmVzIGltbWVkaWF0ZWx5XG5cdFx0XHRcdGlmICggZW1wdHkgfHwgZGF0YVByaXYuZ2V0KCB0aGlzLCBcImZpbmlzaFwiICkgKSB7XG5cdFx0XHRcdFx0YW5pbS5zdG9wKCB0cnVlICk7XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cdFx0XHRkb0FuaW1hdGlvbi5maW5pc2ggPSBkb0FuaW1hdGlvbjtcblxuXHRcdHJldHVybiBlbXB0eSB8fCBvcHRhbGwucXVldWUgPT09IGZhbHNlID9cblx0XHRcdHRoaXMuZWFjaCggZG9BbmltYXRpb24gKSA6XG5cdFx0XHR0aGlzLnF1ZXVlKCBvcHRhbGwucXVldWUsIGRvQW5pbWF0aW9uICk7XG5cdH0sXG5cdHN0b3A6IGZ1bmN0aW9uKCB0eXBlLCBjbGVhclF1ZXVlLCBnb3RvRW5kICkge1xuXHRcdHZhciBzdG9wUXVldWUgPSBmdW5jdGlvbiggaG9va3MgKSB7XG5cdFx0XHR2YXIgc3RvcCA9IGhvb2tzLnN0b3A7XG5cdFx0XHRkZWxldGUgaG9va3Muc3RvcDtcblx0XHRcdHN0b3AoIGdvdG9FbmQgKTtcblx0XHR9O1xuXG5cdFx0aWYgKCB0eXBlb2YgdHlwZSAhPT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdGdvdG9FbmQgPSBjbGVhclF1ZXVlO1xuXHRcdFx0Y2xlYXJRdWV1ZSA9IHR5cGU7XG5cdFx0XHR0eXBlID0gdW5kZWZpbmVkO1xuXHRcdH1cblx0XHRpZiAoIGNsZWFyUXVldWUgJiYgdHlwZSAhPT0gZmFsc2UgKSB7XG5cdFx0XHR0aGlzLnF1ZXVlKCB0eXBlIHx8IFwiZnhcIiwgW10gKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBkZXF1ZXVlID0gdHJ1ZSxcblx0XHRcdFx0aW5kZXggPSB0eXBlICE9IG51bGwgJiYgdHlwZSArIFwicXVldWVIb29rc1wiLFxuXHRcdFx0XHR0aW1lcnMgPSBqUXVlcnkudGltZXJzLFxuXHRcdFx0XHRkYXRhID0gZGF0YVByaXYuZ2V0KCB0aGlzICk7XG5cblx0XHRcdGlmICggaW5kZXggKSB7XG5cdFx0XHRcdGlmICggZGF0YVsgaW5kZXggXSAmJiBkYXRhWyBpbmRleCBdLnN0b3AgKSB7XG5cdFx0XHRcdFx0c3RvcFF1ZXVlKCBkYXRhWyBpbmRleCBdICk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGZvciAoIGluZGV4IGluIGRhdGEgKSB7XG5cdFx0XHRcdFx0aWYgKCBkYXRhWyBpbmRleCBdICYmIGRhdGFbIGluZGV4IF0uc3RvcCAmJiBycnVuLnRlc3QoIGluZGV4ICkgKSB7XG5cdFx0XHRcdFx0XHRzdG9wUXVldWUoIGRhdGFbIGluZGV4IF0gKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Zm9yICggaW5kZXggPSB0aW1lcnMubGVuZ3RoOyBpbmRleC0tOyApIHtcblx0XHRcdFx0aWYgKCB0aW1lcnNbIGluZGV4IF0uZWxlbSA9PT0gdGhpcyAmJlxuXHRcdFx0XHRcdCggdHlwZSA9PSBudWxsIHx8IHRpbWVyc1sgaW5kZXggXS5xdWV1ZSA9PT0gdHlwZSApICkge1xuXG5cdFx0XHRcdFx0dGltZXJzWyBpbmRleCBdLmFuaW0uc3RvcCggZ290b0VuZCApO1xuXHRcdFx0XHRcdGRlcXVldWUgPSBmYWxzZTtcblx0XHRcdFx0XHR0aW1lcnMuc3BsaWNlKCBpbmRleCwgMSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIFN0YXJ0IHRoZSBuZXh0IGluIHRoZSBxdWV1ZSBpZiB0aGUgbGFzdCBzdGVwIHdhc24ndCBmb3JjZWQuXG5cdFx0XHQvLyBUaW1lcnMgY3VycmVudGx5IHdpbGwgY2FsbCB0aGVpciBjb21wbGV0ZSBjYWxsYmFja3MsIHdoaWNoXG5cdFx0XHQvLyB3aWxsIGRlcXVldWUgYnV0IG9ubHkgaWYgdGhleSB3ZXJlIGdvdG9FbmQuXG5cdFx0XHRpZiAoIGRlcXVldWUgfHwgIWdvdG9FbmQgKSB7XG5cdFx0XHRcdGpRdWVyeS5kZXF1ZXVlKCB0aGlzLCB0eXBlICk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9LFxuXHRmaW5pc2g6IGZ1bmN0aW9uKCB0eXBlICkge1xuXHRcdGlmICggdHlwZSAhPT0gZmFsc2UgKSB7XG5cdFx0XHR0eXBlID0gdHlwZSB8fCBcImZ4XCI7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIGluZGV4LFxuXHRcdFx0XHRkYXRhID0gZGF0YVByaXYuZ2V0KCB0aGlzICksXG5cdFx0XHRcdHF1ZXVlID0gZGF0YVsgdHlwZSArIFwicXVldWVcIiBdLFxuXHRcdFx0XHRob29rcyA9IGRhdGFbIHR5cGUgKyBcInF1ZXVlSG9va3NcIiBdLFxuXHRcdFx0XHR0aW1lcnMgPSBqUXVlcnkudGltZXJzLFxuXHRcdFx0XHRsZW5ndGggPSBxdWV1ZSA/IHF1ZXVlLmxlbmd0aCA6IDA7XG5cblx0XHRcdC8vIEVuYWJsZSBmaW5pc2hpbmcgZmxhZyBvbiBwcml2YXRlIGRhdGFcblx0XHRcdGRhdGEuZmluaXNoID0gdHJ1ZTtcblxuXHRcdFx0Ly8gRW1wdHkgdGhlIHF1ZXVlIGZpcnN0XG5cdFx0XHRqUXVlcnkucXVldWUoIHRoaXMsIHR5cGUsIFtdICk7XG5cblx0XHRcdGlmICggaG9va3MgJiYgaG9va3Muc3RvcCApIHtcblx0XHRcdFx0aG9va3Muc3RvcC5jYWxsKCB0aGlzLCB0cnVlICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIExvb2sgZm9yIGFueSBhY3RpdmUgYW5pbWF0aW9ucywgYW5kIGZpbmlzaCB0aGVtXG5cdFx0XHRmb3IgKCBpbmRleCA9IHRpbWVycy5sZW5ndGg7IGluZGV4LS07ICkge1xuXHRcdFx0XHRpZiAoIHRpbWVyc1sgaW5kZXggXS5lbGVtID09PSB0aGlzICYmIHRpbWVyc1sgaW5kZXggXS5xdWV1ZSA9PT0gdHlwZSApIHtcblx0XHRcdFx0XHR0aW1lcnNbIGluZGV4IF0uYW5pbS5zdG9wKCB0cnVlICk7XG5cdFx0XHRcdFx0dGltZXJzLnNwbGljZSggaW5kZXgsIDEgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBMb29rIGZvciBhbnkgYW5pbWF0aW9ucyBpbiB0aGUgb2xkIHF1ZXVlIGFuZCBmaW5pc2ggdGhlbVxuXHRcdFx0Zm9yICggaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKyApIHtcblx0XHRcdFx0aWYgKCBxdWV1ZVsgaW5kZXggXSAmJiBxdWV1ZVsgaW5kZXggXS5maW5pc2ggKSB7XG5cdFx0XHRcdFx0cXVldWVbIGluZGV4IF0uZmluaXNoLmNhbGwoIHRoaXMgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBUdXJuIG9mZiBmaW5pc2hpbmcgZmxhZ1xuXHRcdFx0ZGVsZXRlIGRhdGEuZmluaXNoO1xuXHRcdH0gKTtcblx0fVxufSApO1xuXG5qUXVlcnkuZWFjaCggWyBcInRvZ2dsZVwiLCBcInNob3dcIiwgXCJoaWRlXCIgXSwgZnVuY3Rpb24oIGksIG5hbWUgKSB7XG5cdHZhciBjc3NGbiA9IGpRdWVyeS5mblsgbmFtZSBdO1xuXHRqUXVlcnkuZm5bIG5hbWUgXSA9IGZ1bmN0aW9uKCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayApIHtcblx0XHRyZXR1cm4gc3BlZWQgPT0gbnVsbCB8fCB0eXBlb2Ygc3BlZWQgPT09IFwiYm9vbGVhblwiID9cblx0XHRcdGNzc0ZuLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKSA6XG5cdFx0XHR0aGlzLmFuaW1hdGUoIGdlbkZ4KCBuYW1lLCB0cnVlICksIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICk7XG5cdH07XG59ICk7XG5cbi8vIEdlbmVyYXRlIHNob3J0Y3V0cyBmb3IgY3VzdG9tIGFuaW1hdGlvbnNcbmpRdWVyeS5lYWNoKCB7XG5cdHNsaWRlRG93bjogZ2VuRngoIFwic2hvd1wiICksXG5cdHNsaWRlVXA6IGdlbkZ4KCBcImhpZGVcIiApLFxuXHRzbGlkZVRvZ2dsZTogZ2VuRngoIFwidG9nZ2xlXCIgKSxcblx0ZmFkZUluOiB7IG9wYWNpdHk6IFwic2hvd1wiIH0sXG5cdGZhZGVPdXQ6IHsgb3BhY2l0eTogXCJoaWRlXCIgfSxcblx0ZmFkZVRvZ2dsZTogeyBvcGFjaXR5OiBcInRvZ2dsZVwiIH1cbn0sIGZ1bmN0aW9uKCBuYW1lLCBwcm9wcyApIHtcblx0alF1ZXJ5LmZuWyBuYW1lIF0gPSBmdW5jdGlvbiggc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKSB7XG5cdFx0cmV0dXJuIHRoaXMuYW5pbWF0ZSggcHJvcHMsIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICk7XG5cdH07XG59ICk7XG5cbmpRdWVyeS50aW1lcnMgPSBbXTtcbmpRdWVyeS5meC50aWNrID0gZnVuY3Rpb24oKSB7XG5cdHZhciB0aW1lcixcblx0XHRpID0gMCxcblx0XHR0aW1lcnMgPSBqUXVlcnkudGltZXJzO1xuXG5cdGZ4Tm93ID0gRGF0ZS5ub3coKTtcblxuXHRmb3IgKCA7IGkgPCB0aW1lcnMubGVuZ3RoOyBpKysgKSB7XG5cdFx0dGltZXIgPSB0aW1lcnNbIGkgXTtcblxuXHRcdC8vIFJ1biB0aGUgdGltZXIgYW5kIHNhZmVseSByZW1vdmUgaXQgd2hlbiBkb25lIChhbGxvd2luZyBmb3IgZXh0ZXJuYWwgcmVtb3ZhbClcblx0XHRpZiAoICF0aW1lcigpICYmIHRpbWVyc1sgaSBdID09PSB0aW1lciApIHtcblx0XHRcdHRpbWVycy5zcGxpY2UoIGktLSwgMSApO1xuXHRcdH1cblx0fVxuXG5cdGlmICggIXRpbWVycy5sZW5ndGggKSB7XG5cdFx0alF1ZXJ5LmZ4LnN0b3AoKTtcblx0fVxuXHRmeE5vdyA9IHVuZGVmaW5lZDtcbn07XG5cbmpRdWVyeS5meC50aW1lciA9IGZ1bmN0aW9uKCB0aW1lciApIHtcblx0alF1ZXJ5LnRpbWVycy5wdXNoKCB0aW1lciApO1xuXHRqUXVlcnkuZnguc3RhcnQoKTtcbn07XG5cbmpRdWVyeS5meC5pbnRlcnZhbCA9IDEzO1xualF1ZXJ5LmZ4LnN0YXJ0ID0gZnVuY3Rpb24oKSB7XG5cdGlmICggaW5Qcm9ncmVzcyApIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRpblByb2dyZXNzID0gdHJ1ZTtcblx0c2NoZWR1bGUoKTtcbn07XG5cbmpRdWVyeS5meC5zdG9wID0gZnVuY3Rpb24oKSB7XG5cdGluUHJvZ3Jlc3MgPSBudWxsO1xufTtcblxualF1ZXJ5LmZ4LnNwZWVkcyA9IHtcblx0c2xvdzogNjAwLFxuXHRmYXN0OiAyMDAsXG5cblx0Ly8gRGVmYXVsdCBzcGVlZFxuXHRfZGVmYXVsdDogNDAwXG59O1xuXG5cbi8vIEJhc2VkIG9mZiBvZiB0aGUgcGx1Z2luIGJ5IENsaW50IEhlbGZlcnMsIHdpdGggcGVybWlzc2lvbi5cbi8vIGh0dHBzOi8vd2ViLmFyY2hpdmUub3JnL3dlYi8yMDEwMDMyNDAxNDc0Ny9odHRwOi8vYmxpbmRzaWduYWxzLmNvbS9pbmRleC5waHAvMjAwOS8wNy9qcXVlcnktZGVsYXkvXG5qUXVlcnkuZm4uZGVsYXkgPSBmdW5jdGlvbiggdGltZSwgdHlwZSApIHtcblx0dGltZSA9IGpRdWVyeS5meCA/IGpRdWVyeS5meC5zcGVlZHNbIHRpbWUgXSB8fCB0aW1lIDogdGltZTtcblx0dHlwZSA9IHR5cGUgfHwgXCJmeFwiO1xuXG5cdHJldHVybiB0aGlzLnF1ZXVlKCB0eXBlLCBmdW5jdGlvbiggbmV4dCwgaG9va3MgKSB7XG5cdFx0dmFyIHRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCggbmV4dCwgdGltZSApO1xuXHRcdGhvb2tzLnN0b3AgPSBmdW5jdGlvbigpIHtcblx0XHRcdHdpbmRvdy5jbGVhclRpbWVvdXQoIHRpbWVvdXQgKTtcblx0XHR9O1xuXHR9ICk7XG59O1xuXG5cbiggZnVuY3Rpb24oKSB7XG5cdHZhciBpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiaW5wdXRcIiApLFxuXHRcdHNlbGVjdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwic2VsZWN0XCIgKSxcblx0XHRvcHQgPSBzZWxlY3QuYXBwZW5kQ2hpbGQoIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwib3B0aW9uXCIgKSApO1xuXG5cdGlucHV0LnR5cGUgPSBcImNoZWNrYm94XCI7XG5cblx0Ly8gU3VwcG9ydDogQW5kcm9pZCA8PTQuMyBvbmx5XG5cdC8vIERlZmF1bHQgdmFsdWUgZm9yIGEgY2hlY2tib3ggc2hvdWxkIGJlIFwib25cIlxuXHRzdXBwb3J0LmNoZWNrT24gPSBpbnB1dC52YWx1ZSAhPT0gXCJcIjtcblxuXHQvLyBTdXBwb3J0OiBJRSA8PTExIG9ubHlcblx0Ly8gTXVzdCBhY2Nlc3Mgc2VsZWN0ZWRJbmRleCB0byBtYWtlIGRlZmF1bHQgb3B0aW9ucyBzZWxlY3Rcblx0c3VwcG9ydC5vcHRTZWxlY3RlZCA9IG9wdC5zZWxlY3RlZDtcblxuXHQvLyBTdXBwb3J0OiBJRSA8PTExIG9ubHlcblx0Ly8gQW4gaW5wdXQgbG9zZXMgaXRzIHZhbHVlIGFmdGVyIGJlY29taW5nIGEgcmFkaW9cblx0aW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImlucHV0XCIgKTtcblx0aW5wdXQudmFsdWUgPSBcInRcIjtcblx0aW5wdXQudHlwZSA9IFwicmFkaW9cIjtcblx0c3VwcG9ydC5yYWRpb1ZhbHVlID0gaW5wdXQudmFsdWUgPT09IFwidFwiO1xufSApKCk7XG5cblxudmFyIGJvb2xIb29rLFxuXHRhdHRySGFuZGxlID0galF1ZXJ5LmV4cHIuYXR0ckhhbmRsZTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRhdHRyOiBmdW5jdGlvbiggbmFtZSwgdmFsdWUgKSB7XG5cdFx0cmV0dXJuIGFjY2VzcyggdGhpcywgalF1ZXJ5LmF0dHIsIG5hbWUsIHZhbHVlLCBhcmd1bWVudHMubGVuZ3RoID4gMSApO1xuXHR9LFxuXG5cdHJlbW92ZUF0dHI6IGZ1bmN0aW9uKCBuYW1lICkge1xuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0alF1ZXJ5LnJlbW92ZUF0dHIoIHRoaXMsIG5hbWUgKTtcblx0XHR9ICk7XG5cdH1cbn0gKTtcblxualF1ZXJ5LmV4dGVuZCgge1xuXHRhdHRyOiBmdW5jdGlvbiggZWxlbSwgbmFtZSwgdmFsdWUgKSB7XG5cdFx0dmFyIHJldCwgaG9va3MsXG5cdFx0XHRuVHlwZSA9IGVsZW0ubm9kZVR5cGU7XG5cblx0XHQvLyBEb24ndCBnZXQvc2V0IGF0dHJpYnV0ZXMgb24gdGV4dCwgY29tbWVudCBhbmQgYXR0cmlidXRlIG5vZGVzXG5cdFx0aWYgKCBuVHlwZSA9PT0gMyB8fCBuVHlwZSA9PT0gOCB8fCBuVHlwZSA9PT0gMiApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBGYWxsYmFjayB0byBwcm9wIHdoZW4gYXR0cmlidXRlcyBhcmUgbm90IHN1cHBvcnRlZFxuXHRcdGlmICggdHlwZW9mIGVsZW0uZ2V0QXR0cmlidXRlID09PSBcInVuZGVmaW5lZFwiICkge1xuXHRcdFx0cmV0dXJuIGpRdWVyeS5wcm9wKCBlbGVtLCBuYW1lLCB2YWx1ZSApO1xuXHRcdH1cblxuXHRcdC8vIEF0dHJpYnV0ZSBob29rcyBhcmUgZGV0ZXJtaW5lZCBieSB0aGUgbG93ZXJjYXNlIHZlcnNpb25cblx0XHQvLyBHcmFiIG5lY2Vzc2FyeSBob29rIGlmIG9uZSBpcyBkZWZpbmVkXG5cdFx0aWYgKCBuVHlwZSAhPT0gMSB8fCAhalF1ZXJ5LmlzWE1MRG9jKCBlbGVtICkgKSB7XG5cdFx0XHRob29rcyA9IGpRdWVyeS5hdHRySG9va3NbIG5hbWUudG9Mb3dlckNhc2UoKSBdIHx8XG5cdFx0XHRcdCggalF1ZXJ5LmV4cHIubWF0Y2guYm9vbC50ZXN0KCBuYW1lICkgPyBib29sSG9vayA6IHVuZGVmaW5lZCApO1xuXHRcdH1cblxuXHRcdGlmICggdmFsdWUgIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdGlmICggdmFsdWUgPT09IG51bGwgKSB7XG5cdFx0XHRcdGpRdWVyeS5yZW1vdmVBdHRyKCBlbGVtLCBuYW1lICk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCBob29rcyAmJiBcInNldFwiIGluIGhvb2tzICYmXG5cdFx0XHRcdCggcmV0ID0gaG9va3Muc2V0KCBlbGVtLCB2YWx1ZSwgbmFtZSApICkgIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0cmV0dXJuIHJldDtcblx0XHRcdH1cblxuXHRcdFx0ZWxlbS5zZXRBdHRyaWJ1dGUoIG5hbWUsIHZhbHVlICsgXCJcIiApO1xuXHRcdFx0cmV0dXJuIHZhbHVlO1xuXHRcdH1cblxuXHRcdGlmICggaG9va3MgJiYgXCJnZXRcIiBpbiBob29rcyAmJiAoIHJldCA9IGhvb2tzLmdldCggZWxlbSwgbmFtZSApICkgIT09IG51bGwgKSB7XG5cdFx0XHRyZXR1cm4gcmV0O1xuXHRcdH1cblxuXHRcdHJldCA9IGpRdWVyeS5maW5kLmF0dHIoIGVsZW0sIG5hbWUgKTtcblxuXHRcdC8vIE5vbi1leGlzdGVudCBhdHRyaWJ1dGVzIHJldHVybiBudWxsLCB3ZSBub3JtYWxpemUgdG8gdW5kZWZpbmVkXG5cdFx0cmV0dXJuIHJldCA9PSBudWxsID8gdW5kZWZpbmVkIDogcmV0O1xuXHR9LFxuXG5cdGF0dHJIb29rczoge1xuXHRcdHR5cGU6IHtcblx0XHRcdHNldDogZnVuY3Rpb24oIGVsZW0sIHZhbHVlICkge1xuXHRcdFx0XHRpZiAoICFzdXBwb3J0LnJhZGlvVmFsdWUgJiYgdmFsdWUgPT09IFwicmFkaW9cIiAmJlxuXHRcdFx0XHRcdG5vZGVOYW1lKCBlbGVtLCBcImlucHV0XCIgKSApIHtcblx0XHRcdFx0XHR2YXIgdmFsID0gZWxlbS52YWx1ZTtcblx0XHRcdFx0XHRlbGVtLnNldEF0dHJpYnV0ZSggXCJ0eXBlXCIsIHZhbHVlICk7XG5cdFx0XHRcdFx0aWYgKCB2YWwgKSB7XG5cdFx0XHRcdFx0XHRlbGVtLnZhbHVlID0gdmFsO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gdmFsdWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cblx0cmVtb3ZlQXR0cjogZnVuY3Rpb24oIGVsZW0sIHZhbHVlICkge1xuXHRcdHZhciBuYW1lLFxuXHRcdFx0aSA9IDAsXG5cblx0XHRcdC8vIEF0dHJpYnV0ZSBuYW1lcyBjYW4gY29udGFpbiBub24tSFRNTCB3aGl0ZXNwYWNlIGNoYXJhY3RlcnNcblx0XHRcdC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3N5bnRheC5odG1sI2F0dHJpYnV0ZXMtMlxuXHRcdFx0YXR0ck5hbWVzID0gdmFsdWUgJiYgdmFsdWUubWF0Y2goIHJub3RodG1sd2hpdGUgKTtcblxuXHRcdGlmICggYXR0ck5hbWVzICYmIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7XG5cdFx0XHR3aGlsZSAoICggbmFtZSA9IGF0dHJOYW1lc1sgaSsrIF0gKSApIHtcblx0XHRcdFx0ZWxlbS5yZW1vdmVBdHRyaWJ1dGUoIG5hbWUgKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cbn0gKTtcblxuLy8gSG9va3MgZm9yIGJvb2xlYW4gYXR0cmlidXRlc1xuYm9vbEhvb2sgPSB7XG5cdHNldDogZnVuY3Rpb24oIGVsZW0sIHZhbHVlLCBuYW1lICkge1xuXHRcdGlmICggdmFsdWUgPT09IGZhbHNlICkge1xuXG5cdFx0XHQvLyBSZW1vdmUgYm9vbGVhbiBhdHRyaWJ1dGVzIHdoZW4gc2V0IHRvIGZhbHNlXG5cdFx0XHRqUXVlcnkucmVtb3ZlQXR0ciggZWxlbSwgbmFtZSApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRlbGVtLnNldEF0dHJpYnV0ZSggbmFtZSwgbmFtZSApO1xuXHRcdH1cblx0XHRyZXR1cm4gbmFtZTtcblx0fVxufTtcblxualF1ZXJ5LmVhY2goIGpRdWVyeS5leHByLm1hdGNoLmJvb2wuc291cmNlLm1hdGNoKCAvXFx3Ky9nICksIGZ1bmN0aW9uKCBpLCBuYW1lICkge1xuXHR2YXIgZ2V0dGVyID0gYXR0ckhhbmRsZVsgbmFtZSBdIHx8IGpRdWVyeS5maW5kLmF0dHI7XG5cblx0YXR0ckhhbmRsZVsgbmFtZSBdID0gZnVuY3Rpb24oIGVsZW0sIG5hbWUsIGlzWE1MICkge1xuXHRcdHZhciByZXQsIGhhbmRsZSxcblx0XHRcdGxvd2VyY2FzZU5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG5cblx0XHRpZiAoICFpc1hNTCApIHtcblxuXHRcdFx0Ly8gQXZvaWQgYW4gaW5maW5pdGUgbG9vcCBieSB0ZW1wb3JhcmlseSByZW1vdmluZyB0aGlzIGZ1bmN0aW9uIGZyb20gdGhlIGdldHRlclxuXHRcdFx0aGFuZGxlID0gYXR0ckhhbmRsZVsgbG93ZXJjYXNlTmFtZSBdO1xuXHRcdFx0YXR0ckhhbmRsZVsgbG93ZXJjYXNlTmFtZSBdID0gcmV0O1xuXHRcdFx0cmV0ID0gZ2V0dGVyKCBlbGVtLCBuYW1lLCBpc1hNTCApICE9IG51bGwgP1xuXHRcdFx0XHRsb3dlcmNhc2VOYW1lIDpcblx0XHRcdFx0bnVsbDtcblx0XHRcdGF0dHJIYW5kbGVbIGxvd2VyY2FzZU5hbWUgXSA9IGhhbmRsZTtcblx0XHR9XG5cdFx0cmV0dXJuIHJldDtcblx0fTtcbn0gKTtcblxuXG5cblxudmFyIHJmb2N1c2FibGUgPSAvXig/OmlucHV0fHNlbGVjdHx0ZXh0YXJlYXxidXR0b24pJC9pLFxuXHRyY2xpY2thYmxlID0gL14oPzphfGFyZWEpJC9pO1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdHByb3A6IGZ1bmN0aW9uKCBuYW1lLCB2YWx1ZSApIHtcblx0XHRyZXR1cm4gYWNjZXNzKCB0aGlzLCBqUXVlcnkucHJvcCwgbmFtZSwgdmFsdWUsIGFyZ3VtZW50cy5sZW5ndGggPiAxICk7XG5cdH0sXG5cblx0cmVtb3ZlUHJvcDogZnVuY3Rpb24oIG5hbWUgKSB7XG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRkZWxldGUgdGhpc1sgalF1ZXJ5LnByb3BGaXhbIG5hbWUgXSB8fCBuYW1lIF07XG5cdFx0fSApO1xuXHR9XG59ICk7XG5cbmpRdWVyeS5leHRlbmQoIHtcblx0cHJvcDogZnVuY3Rpb24oIGVsZW0sIG5hbWUsIHZhbHVlICkge1xuXHRcdHZhciByZXQsIGhvb2tzLFxuXHRcdFx0blR5cGUgPSBlbGVtLm5vZGVUeXBlO1xuXG5cdFx0Ly8gRG9uJ3QgZ2V0L3NldCBwcm9wZXJ0aWVzIG9uIHRleHQsIGNvbW1lbnQgYW5kIGF0dHJpYnV0ZSBub2Rlc1xuXHRcdGlmICggblR5cGUgPT09IDMgfHwgblR5cGUgPT09IDggfHwgblR5cGUgPT09IDIgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKCBuVHlwZSAhPT0gMSB8fCAhalF1ZXJ5LmlzWE1MRG9jKCBlbGVtICkgKSB7XG5cblx0XHRcdC8vIEZpeCBuYW1lIGFuZCBhdHRhY2ggaG9va3Ncblx0XHRcdG5hbWUgPSBqUXVlcnkucHJvcEZpeFsgbmFtZSBdIHx8IG5hbWU7XG5cdFx0XHRob29rcyA9IGpRdWVyeS5wcm9wSG9va3NbIG5hbWUgXTtcblx0XHR9XG5cblx0XHRpZiAoIHZhbHVlICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRpZiAoIGhvb2tzICYmIFwic2V0XCIgaW4gaG9va3MgJiZcblx0XHRcdFx0KCByZXQgPSBob29rcy5zZXQoIGVsZW0sIHZhbHVlLCBuYW1lICkgKSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRyZXR1cm4gcmV0O1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gKCBlbGVtWyBuYW1lIF0gPSB2YWx1ZSApO1xuXHRcdH1cblxuXHRcdGlmICggaG9va3MgJiYgXCJnZXRcIiBpbiBob29rcyAmJiAoIHJldCA9IGhvb2tzLmdldCggZWxlbSwgbmFtZSApICkgIT09IG51bGwgKSB7XG5cdFx0XHRyZXR1cm4gcmV0O1xuXHRcdH1cblxuXHRcdHJldHVybiBlbGVtWyBuYW1lIF07XG5cdH0sXG5cblx0cHJvcEhvb2tzOiB7XG5cdFx0dGFiSW5kZXg6IHtcblx0XHRcdGdldDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPD05IC0gMTEgb25seVxuXHRcdFx0XHQvLyBlbGVtLnRhYkluZGV4IGRvZXNuJ3QgYWx3YXlzIHJldHVybiB0aGVcblx0XHRcdFx0Ly8gY29ycmVjdCB2YWx1ZSB3aGVuIGl0IGhhc24ndCBiZWVuIGV4cGxpY2l0bHkgc2V0XG5cdFx0XHRcdC8vIGh0dHBzOi8vd2ViLmFyY2hpdmUub3JnL3dlYi8yMDE0MTExNjIzMzM0Ny9odHRwOi8vZmx1aWRwcm9qZWN0Lm9yZy9ibG9nLzIwMDgvMDEvMDkvZ2V0dGluZy1zZXR0aW5nLWFuZC1yZW1vdmluZy10YWJpbmRleC12YWx1ZXMtd2l0aC1qYXZhc2NyaXB0L1xuXHRcdFx0XHQvLyBVc2UgcHJvcGVyIGF0dHJpYnV0ZSByZXRyaWV2YWwoIzEyMDcyKVxuXHRcdFx0XHR2YXIgdGFiaW5kZXggPSBqUXVlcnkuZmluZC5hdHRyKCBlbGVtLCBcInRhYmluZGV4XCIgKTtcblxuXHRcdFx0XHRpZiAoIHRhYmluZGV4ICkge1xuXHRcdFx0XHRcdHJldHVybiBwYXJzZUludCggdGFiaW5kZXgsIDEwICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0cmZvY3VzYWJsZS50ZXN0KCBlbGVtLm5vZGVOYW1lICkgfHxcblx0XHRcdFx0XHRyY2xpY2thYmxlLnRlc3QoIGVsZW0ubm9kZU5hbWUgKSAmJlxuXHRcdFx0XHRcdGVsZW0uaHJlZlxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRyZXR1cm4gMDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiAtMTtcblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cblx0cHJvcEZpeDoge1xuXHRcdFwiZm9yXCI6IFwiaHRtbEZvclwiLFxuXHRcdFwiY2xhc3NcIjogXCJjbGFzc05hbWVcIlxuXHR9XG59ICk7XG5cbi8vIFN1cHBvcnQ6IElFIDw9MTEgb25seVxuLy8gQWNjZXNzaW5nIHRoZSBzZWxlY3RlZEluZGV4IHByb3BlcnR5XG4vLyBmb3JjZXMgdGhlIGJyb3dzZXIgdG8gcmVzcGVjdCBzZXR0aW5nIHNlbGVjdGVkXG4vLyBvbiB0aGUgb3B0aW9uXG4vLyBUaGUgZ2V0dGVyIGVuc3VyZXMgYSBkZWZhdWx0IG9wdGlvbiBpcyBzZWxlY3RlZFxuLy8gd2hlbiBpbiBhbiBvcHRncm91cFxuLy8gZXNsaW50IHJ1bGUgXCJuby11bnVzZWQtZXhwcmVzc2lvbnNcIiBpcyBkaXNhYmxlZCBmb3IgdGhpcyBjb2RlXG4vLyBzaW5jZSBpdCBjb25zaWRlcnMgc3VjaCBhY2Nlc3Npb25zIG5vb3BcbmlmICggIXN1cHBvcnQub3B0U2VsZWN0ZWQgKSB7XG5cdGpRdWVyeS5wcm9wSG9va3Muc2VsZWN0ZWQgPSB7XG5cdFx0Z2V0OiBmdW5jdGlvbiggZWxlbSApIHtcblxuXHRcdFx0LyogZXNsaW50IG5vLXVudXNlZC1leHByZXNzaW9uczogXCJvZmZcIiAqL1xuXG5cdFx0XHR2YXIgcGFyZW50ID0gZWxlbS5wYXJlbnROb2RlO1xuXHRcdFx0aWYgKCBwYXJlbnQgJiYgcGFyZW50LnBhcmVudE5vZGUgKSB7XG5cdFx0XHRcdHBhcmVudC5wYXJlbnROb2RlLnNlbGVjdGVkSW5kZXg7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9LFxuXHRcdHNldDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cblx0XHRcdC8qIGVzbGludCBuby11bnVzZWQtZXhwcmVzc2lvbnM6IFwib2ZmXCIgKi9cblxuXHRcdFx0dmFyIHBhcmVudCA9IGVsZW0ucGFyZW50Tm9kZTtcblx0XHRcdGlmICggcGFyZW50ICkge1xuXHRcdFx0XHRwYXJlbnQuc2VsZWN0ZWRJbmRleDtcblxuXHRcdFx0XHRpZiAoIHBhcmVudC5wYXJlbnROb2RlICkge1xuXHRcdFx0XHRcdHBhcmVudC5wYXJlbnROb2RlLnNlbGVjdGVkSW5kZXg7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH07XG59XG5cbmpRdWVyeS5lYWNoKCBbXG5cdFwidGFiSW5kZXhcIixcblx0XCJyZWFkT25seVwiLFxuXHRcIm1heExlbmd0aFwiLFxuXHRcImNlbGxTcGFjaW5nXCIsXG5cdFwiY2VsbFBhZGRpbmdcIixcblx0XCJyb3dTcGFuXCIsXG5cdFwiY29sU3BhblwiLFxuXHRcInVzZU1hcFwiLFxuXHRcImZyYW1lQm9yZGVyXCIsXG5cdFwiY29udGVudEVkaXRhYmxlXCJcbl0sIGZ1bmN0aW9uKCkge1xuXHRqUXVlcnkucHJvcEZpeFsgdGhpcy50b0xvd2VyQ2FzZSgpIF0gPSB0aGlzO1xufSApO1xuXG5cblxuXG5cdC8vIFN0cmlwIGFuZCBjb2xsYXBzZSB3aGl0ZXNwYWNlIGFjY29yZGluZyB0byBIVE1MIHNwZWNcblx0Ly8gaHR0cHM6Ly9pbmZyYS5zcGVjLndoYXR3Zy5vcmcvI3N0cmlwLWFuZC1jb2xsYXBzZS1hc2NpaS13aGl0ZXNwYWNlXG5cdGZ1bmN0aW9uIHN0cmlwQW5kQ29sbGFwc2UoIHZhbHVlICkge1xuXHRcdHZhciB0b2tlbnMgPSB2YWx1ZS5tYXRjaCggcm5vdGh0bWx3aGl0ZSApIHx8IFtdO1xuXHRcdHJldHVybiB0b2tlbnMuam9pbiggXCIgXCIgKTtcblx0fVxuXG5cbmZ1bmN0aW9uIGdldENsYXNzKCBlbGVtICkge1xuXHRyZXR1cm4gZWxlbS5nZXRBdHRyaWJ1dGUgJiYgZWxlbS5nZXRBdHRyaWJ1dGUoIFwiY2xhc3NcIiApIHx8IFwiXCI7XG59XG5cbmZ1bmN0aW9uIGNsYXNzZXNUb0FycmF5KCB2YWx1ZSApIHtcblx0aWYgKCBBcnJheS5pc0FycmF5KCB2YWx1ZSApICkge1xuXHRcdHJldHVybiB2YWx1ZTtcblx0fVxuXHRpZiAoIHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiApIHtcblx0XHRyZXR1cm4gdmFsdWUubWF0Y2goIHJub3RodG1sd2hpdGUgKSB8fCBbXTtcblx0fVxuXHRyZXR1cm4gW107XG59XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0YWRkQ2xhc3M6IGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHR2YXIgY2xhc3NlcywgZWxlbSwgY3VyLCBjdXJWYWx1ZSwgY2xhenosIGosIGZpbmFsVmFsdWUsXG5cdFx0XHRpID0gMDtcblxuXHRcdGlmICggaXNGdW5jdGlvbiggdmFsdWUgKSApIHtcblx0XHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCBqICkge1xuXHRcdFx0XHRqUXVlcnkoIHRoaXMgKS5hZGRDbGFzcyggdmFsdWUuY2FsbCggdGhpcywgaiwgZ2V0Q2xhc3MoIHRoaXMgKSApICk7XG5cdFx0XHR9ICk7XG5cdFx0fVxuXG5cdFx0Y2xhc3NlcyA9IGNsYXNzZXNUb0FycmF5KCB2YWx1ZSApO1xuXG5cdFx0aWYgKCBjbGFzc2VzLmxlbmd0aCApIHtcblx0XHRcdHdoaWxlICggKCBlbGVtID0gdGhpc1sgaSsrIF0gKSApIHtcblx0XHRcdFx0Y3VyVmFsdWUgPSBnZXRDbGFzcyggZWxlbSApO1xuXHRcdFx0XHRjdXIgPSBlbGVtLm5vZGVUeXBlID09PSAxICYmICggXCIgXCIgKyBzdHJpcEFuZENvbGxhcHNlKCBjdXJWYWx1ZSApICsgXCIgXCIgKTtcblxuXHRcdFx0XHRpZiAoIGN1ciApIHtcblx0XHRcdFx0XHRqID0gMDtcblx0XHRcdFx0XHR3aGlsZSAoICggY2xhenogPSBjbGFzc2VzWyBqKysgXSApICkge1xuXHRcdFx0XHRcdFx0aWYgKCBjdXIuaW5kZXhPZiggXCIgXCIgKyBjbGF6eiArIFwiIFwiICkgPCAwICkge1xuXHRcdFx0XHRcdFx0XHRjdXIgKz0gY2xhenogKyBcIiBcIjtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBPbmx5IGFzc2lnbiBpZiBkaWZmZXJlbnQgdG8gYXZvaWQgdW5uZWVkZWQgcmVuZGVyaW5nLlxuXHRcdFx0XHRcdGZpbmFsVmFsdWUgPSBzdHJpcEFuZENvbGxhcHNlKCBjdXIgKTtcblx0XHRcdFx0XHRpZiAoIGN1clZhbHVlICE9PSBmaW5hbFZhbHVlICkge1xuXHRcdFx0XHRcdFx0ZWxlbS5zZXRBdHRyaWJ1dGUoIFwiY2xhc3NcIiwgZmluYWxWYWx1ZSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHJlbW92ZUNsYXNzOiBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0dmFyIGNsYXNzZXMsIGVsZW0sIGN1ciwgY3VyVmFsdWUsIGNsYXp6LCBqLCBmaW5hbFZhbHVlLFxuXHRcdFx0aSA9IDA7XG5cblx0XHRpZiAoIGlzRnVuY3Rpb24oIHZhbHVlICkgKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbiggaiApIHtcblx0XHRcdFx0alF1ZXJ5KCB0aGlzICkucmVtb3ZlQ2xhc3MoIHZhbHVlLmNhbGwoIHRoaXMsIGosIGdldENsYXNzKCB0aGlzICkgKSApO1xuXHRcdFx0fSApO1xuXHRcdH1cblxuXHRcdGlmICggIWFyZ3VtZW50cy5sZW5ndGggKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5hdHRyKCBcImNsYXNzXCIsIFwiXCIgKTtcblx0XHR9XG5cblx0XHRjbGFzc2VzID0gY2xhc3Nlc1RvQXJyYXkoIHZhbHVlICk7XG5cblx0XHRpZiAoIGNsYXNzZXMubGVuZ3RoICkge1xuXHRcdFx0d2hpbGUgKCAoIGVsZW0gPSB0aGlzWyBpKysgXSApICkge1xuXHRcdFx0XHRjdXJWYWx1ZSA9IGdldENsYXNzKCBlbGVtICk7XG5cblx0XHRcdFx0Ly8gVGhpcyBleHByZXNzaW9uIGlzIGhlcmUgZm9yIGJldHRlciBjb21wcmVzc2liaWxpdHkgKHNlZSBhZGRDbGFzcylcblx0XHRcdFx0Y3VyID0gZWxlbS5ub2RlVHlwZSA9PT0gMSAmJiAoIFwiIFwiICsgc3RyaXBBbmRDb2xsYXBzZSggY3VyVmFsdWUgKSArIFwiIFwiICk7XG5cblx0XHRcdFx0aWYgKCBjdXIgKSB7XG5cdFx0XHRcdFx0aiA9IDA7XG5cdFx0XHRcdFx0d2hpbGUgKCAoIGNsYXp6ID0gY2xhc3Nlc1sgaisrIF0gKSApIHtcblxuXHRcdFx0XHRcdFx0Ly8gUmVtb3ZlICphbGwqIGluc3RhbmNlc1xuXHRcdFx0XHRcdFx0d2hpbGUgKCBjdXIuaW5kZXhPZiggXCIgXCIgKyBjbGF6eiArIFwiIFwiICkgPiAtMSApIHtcblx0XHRcdFx0XHRcdFx0Y3VyID0gY3VyLnJlcGxhY2UoIFwiIFwiICsgY2xhenogKyBcIiBcIiwgXCIgXCIgKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBPbmx5IGFzc2lnbiBpZiBkaWZmZXJlbnQgdG8gYXZvaWQgdW5uZWVkZWQgcmVuZGVyaW5nLlxuXHRcdFx0XHRcdGZpbmFsVmFsdWUgPSBzdHJpcEFuZENvbGxhcHNlKCBjdXIgKTtcblx0XHRcdFx0XHRpZiAoIGN1clZhbHVlICE9PSBmaW5hbFZhbHVlICkge1xuXHRcdFx0XHRcdFx0ZWxlbS5zZXRBdHRyaWJ1dGUoIFwiY2xhc3NcIiwgZmluYWxWYWx1ZSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHRvZ2dsZUNsYXNzOiBmdW5jdGlvbiggdmFsdWUsIHN0YXRlVmFsICkge1xuXHRcdHZhciB0eXBlID0gdHlwZW9mIHZhbHVlLFxuXHRcdFx0aXNWYWxpZFZhbHVlID0gdHlwZSA9PT0gXCJzdHJpbmdcIiB8fCBBcnJheS5pc0FycmF5KCB2YWx1ZSApO1xuXG5cdFx0aWYgKCB0eXBlb2Ygc3RhdGVWYWwgPT09IFwiYm9vbGVhblwiICYmIGlzVmFsaWRWYWx1ZSApIHtcblx0XHRcdHJldHVybiBzdGF0ZVZhbCA/IHRoaXMuYWRkQ2xhc3MoIHZhbHVlICkgOiB0aGlzLnJlbW92ZUNsYXNzKCB2YWx1ZSApO1xuXHRcdH1cblxuXHRcdGlmICggaXNGdW5jdGlvbiggdmFsdWUgKSApIHtcblx0XHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCBpICkge1xuXHRcdFx0XHRqUXVlcnkoIHRoaXMgKS50b2dnbGVDbGFzcyhcblx0XHRcdFx0XHR2YWx1ZS5jYWxsKCB0aGlzLCBpLCBnZXRDbGFzcyggdGhpcyApLCBzdGF0ZVZhbCApLFxuXHRcdFx0XHRcdHN0YXRlVmFsXG5cdFx0XHRcdCk7XG5cdFx0XHR9ICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgY2xhc3NOYW1lLCBpLCBzZWxmLCBjbGFzc05hbWVzO1xuXG5cdFx0XHRpZiAoIGlzVmFsaWRWYWx1ZSApIHtcblxuXHRcdFx0XHQvLyBUb2dnbGUgaW5kaXZpZHVhbCBjbGFzcyBuYW1lc1xuXHRcdFx0XHRpID0gMDtcblx0XHRcdFx0c2VsZiA9IGpRdWVyeSggdGhpcyApO1xuXHRcdFx0XHRjbGFzc05hbWVzID0gY2xhc3Nlc1RvQXJyYXkoIHZhbHVlICk7XG5cblx0XHRcdFx0d2hpbGUgKCAoIGNsYXNzTmFtZSA9IGNsYXNzTmFtZXNbIGkrKyBdICkgKSB7XG5cblx0XHRcdFx0XHQvLyBDaGVjayBlYWNoIGNsYXNzTmFtZSBnaXZlbiwgc3BhY2Ugc2VwYXJhdGVkIGxpc3Rcblx0XHRcdFx0XHRpZiAoIHNlbGYuaGFzQ2xhc3MoIGNsYXNzTmFtZSApICkge1xuXHRcdFx0XHRcdFx0c2VsZi5yZW1vdmVDbGFzcyggY2xhc3NOYW1lICk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHNlbGYuYWRkQ2xhc3MoIGNsYXNzTmFtZSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHQvLyBUb2dnbGUgd2hvbGUgY2xhc3MgbmFtZVxuXHRcdFx0fSBlbHNlIGlmICggdmFsdWUgPT09IHVuZGVmaW5lZCB8fCB0eXBlID09PSBcImJvb2xlYW5cIiApIHtcblx0XHRcdFx0Y2xhc3NOYW1lID0gZ2V0Q2xhc3MoIHRoaXMgKTtcblx0XHRcdFx0aWYgKCBjbGFzc05hbWUgKSB7XG5cblx0XHRcdFx0XHQvLyBTdG9yZSBjbGFzc05hbWUgaWYgc2V0XG5cdFx0XHRcdFx0ZGF0YVByaXYuc2V0KCB0aGlzLCBcIl9fY2xhc3NOYW1lX19cIiwgY2xhc3NOYW1lICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBJZiB0aGUgZWxlbWVudCBoYXMgYSBjbGFzcyBuYW1lIG9yIGlmIHdlJ3JlIHBhc3NlZCBgZmFsc2VgLFxuXHRcdFx0XHQvLyB0aGVuIHJlbW92ZSB0aGUgd2hvbGUgY2xhc3NuYW1lIChpZiB0aGVyZSB3YXMgb25lLCB0aGUgYWJvdmUgc2F2ZWQgaXQpLlxuXHRcdFx0XHQvLyBPdGhlcndpc2UgYnJpbmcgYmFjayB3aGF0ZXZlciB3YXMgcHJldmlvdXNseSBzYXZlZCAoaWYgYW55dGhpbmcpLFxuXHRcdFx0XHQvLyBmYWxsaW5nIGJhY2sgdG8gdGhlIGVtcHR5IHN0cmluZyBpZiBub3RoaW5nIHdhcyBzdG9yZWQuXG5cdFx0XHRcdGlmICggdGhpcy5zZXRBdHRyaWJ1dGUgKSB7XG5cdFx0XHRcdFx0dGhpcy5zZXRBdHRyaWJ1dGUoIFwiY2xhc3NcIixcblx0XHRcdFx0XHRcdGNsYXNzTmFtZSB8fCB2YWx1ZSA9PT0gZmFsc2UgP1xuXHRcdFx0XHRcdFx0XCJcIiA6XG5cdFx0XHRcdFx0XHRkYXRhUHJpdi5nZXQoIHRoaXMsIFwiX19jbGFzc05hbWVfX1wiICkgfHwgXCJcIlxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9ICk7XG5cdH0sXG5cblx0aGFzQ2xhc3M6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHR2YXIgY2xhc3NOYW1lLCBlbGVtLFxuXHRcdFx0aSA9IDA7XG5cblx0XHRjbGFzc05hbWUgPSBcIiBcIiArIHNlbGVjdG9yICsgXCIgXCI7XG5cdFx0d2hpbGUgKCAoIGVsZW0gPSB0aGlzWyBpKysgXSApICkge1xuXHRcdFx0aWYgKCBlbGVtLm5vZGVUeXBlID09PSAxICYmXG5cdFx0XHRcdCggXCIgXCIgKyBzdHJpcEFuZENvbGxhcHNlKCBnZXRDbGFzcyggZWxlbSApICkgKyBcIiBcIiApLmluZGV4T2YoIGNsYXNzTmFtZSApID4gLTEgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59ICk7XG5cblxuXG5cbnZhciBycmV0dXJuID0gL1xcci9nO1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdHZhbDogZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdHZhciBob29rcywgcmV0LCB2YWx1ZUlzRnVuY3Rpb24sXG5cdFx0XHRlbGVtID0gdGhpc1sgMCBdO1xuXG5cdFx0aWYgKCAhYXJndW1lbnRzLmxlbmd0aCApIHtcblx0XHRcdGlmICggZWxlbSApIHtcblx0XHRcdFx0aG9va3MgPSBqUXVlcnkudmFsSG9va3NbIGVsZW0udHlwZSBdIHx8XG5cdFx0XHRcdFx0alF1ZXJ5LnZhbEhvb2tzWyBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgXTtcblxuXHRcdFx0XHRpZiAoIGhvb2tzICYmXG5cdFx0XHRcdFx0XCJnZXRcIiBpbiBob29rcyAmJlxuXHRcdFx0XHRcdCggcmV0ID0gaG9va3MuZ2V0KCBlbGVtLCBcInZhbHVlXCIgKSApICE9PSB1bmRlZmluZWRcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0cmV0dXJuIHJldDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldCA9IGVsZW0udmFsdWU7XG5cblx0XHRcdFx0Ly8gSGFuZGxlIG1vc3QgY29tbW9uIHN0cmluZyBjYXNlc1xuXHRcdFx0XHRpZiAoIHR5cGVvZiByZXQgPT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHJldC5yZXBsYWNlKCBycmV0dXJuLCBcIlwiICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBIYW5kbGUgY2FzZXMgd2hlcmUgdmFsdWUgaXMgbnVsbC91bmRlZiBvciBudW1iZXJcblx0XHRcdFx0cmV0dXJuIHJldCA9PSBudWxsID8gXCJcIiA6IHJldDtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHZhbHVlSXNGdW5jdGlvbiA9IGlzRnVuY3Rpb24oIHZhbHVlICk7XG5cblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbiggaSApIHtcblx0XHRcdHZhciB2YWw7XG5cblx0XHRcdGlmICggdGhpcy5ub2RlVHlwZSAhPT0gMSApIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIHZhbHVlSXNGdW5jdGlvbiApIHtcblx0XHRcdFx0dmFsID0gdmFsdWUuY2FsbCggdGhpcywgaSwgalF1ZXJ5KCB0aGlzICkudmFsKCkgKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHZhbCA9IHZhbHVlO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBUcmVhdCBudWxsL3VuZGVmaW5lZCBhcyBcIlwiOyBjb252ZXJ0IG51bWJlcnMgdG8gc3RyaW5nXG5cdFx0XHRpZiAoIHZhbCA9PSBudWxsICkge1xuXHRcdFx0XHR2YWwgPSBcIlwiO1xuXG5cdFx0XHR9IGVsc2UgaWYgKCB0eXBlb2YgdmFsID09PSBcIm51bWJlclwiICkge1xuXHRcdFx0XHR2YWwgKz0gXCJcIjtcblxuXHRcdFx0fSBlbHNlIGlmICggQXJyYXkuaXNBcnJheSggdmFsICkgKSB7XG5cdFx0XHRcdHZhbCA9IGpRdWVyeS5tYXAoIHZhbCwgZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdFx0XHRcdHJldHVybiB2YWx1ZSA9PSBudWxsID8gXCJcIiA6IHZhbHVlICsgXCJcIjtcblx0XHRcdFx0fSApO1xuXHRcdFx0fVxuXG5cdFx0XHRob29rcyA9IGpRdWVyeS52YWxIb29rc1sgdGhpcy50eXBlIF0gfHwgalF1ZXJ5LnZhbEhvb2tzWyB0aGlzLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgXTtcblxuXHRcdFx0Ly8gSWYgc2V0IHJldHVybnMgdW5kZWZpbmVkLCBmYWxsIGJhY2sgdG8gbm9ybWFsIHNldHRpbmdcblx0XHRcdGlmICggIWhvb2tzIHx8ICEoIFwic2V0XCIgaW4gaG9va3MgKSB8fCBob29rcy5zZXQoIHRoaXMsIHZhbCwgXCJ2YWx1ZVwiICkgPT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0dGhpcy52YWx1ZSA9IHZhbDtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH1cbn0gKTtcblxualF1ZXJ5LmV4dGVuZCgge1xuXHR2YWxIb29rczoge1xuXHRcdG9wdGlvbjoge1xuXHRcdFx0Z2V0OiBmdW5jdGlvbiggZWxlbSApIHtcblxuXHRcdFx0XHR2YXIgdmFsID0galF1ZXJ5LmZpbmQuYXR0ciggZWxlbSwgXCJ2YWx1ZVwiICk7XG5cdFx0XHRcdHJldHVybiB2YWwgIT0gbnVsbCA/XG5cdFx0XHRcdFx0dmFsIDpcblxuXHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDw9MTAgLSAxMSBvbmx5XG5cdFx0XHRcdFx0Ly8gb3B0aW9uLnRleHQgdGhyb3dzIGV4Y2VwdGlvbnMgKCMxNDY4NiwgIzE0ODU4KVxuXHRcdFx0XHRcdC8vIFN0cmlwIGFuZCBjb2xsYXBzZSB3aGl0ZXNwYWNlXG5cdFx0XHRcdFx0Ly8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy8jc3RyaXAtYW5kLWNvbGxhcHNlLXdoaXRlc3BhY2Vcblx0XHRcdFx0XHRzdHJpcEFuZENvbGxhcHNlKCBqUXVlcnkudGV4dCggZWxlbSApICk7XG5cdFx0XHR9XG5cdFx0fSxcblx0XHRzZWxlY3Q6IHtcblx0XHRcdGdldDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRcdHZhciB2YWx1ZSwgb3B0aW9uLCBpLFxuXHRcdFx0XHRcdG9wdGlvbnMgPSBlbGVtLm9wdGlvbnMsXG5cdFx0XHRcdFx0aW5kZXggPSBlbGVtLnNlbGVjdGVkSW5kZXgsXG5cdFx0XHRcdFx0b25lID0gZWxlbS50eXBlID09PSBcInNlbGVjdC1vbmVcIixcblx0XHRcdFx0XHR2YWx1ZXMgPSBvbmUgPyBudWxsIDogW10sXG5cdFx0XHRcdFx0bWF4ID0gb25lID8gaW5kZXggKyAxIDogb3B0aW9ucy5sZW5ndGg7XG5cblx0XHRcdFx0aWYgKCBpbmRleCA8IDAgKSB7XG5cdFx0XHRcdFx0aSA9IG1heDtcblxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGkgPSBvbmUgPyBpbmRleCA6IDA7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBMb29wIHRocm91Z2ggYWxsIHRoZSBzZWxlY3RlZCBvcHRpb25zXG5cdFx0XHRcdGZvciAoIDsgaSA8IG1heDsgaSsrICkge1xuXHRcdFx0XHRcdG9wdGlvbiA9IG9wdGlvbnNbIGkgXTtcblxuXHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDw9OSBvbmx5XG5cdFx0XHRcdFx0Ly8gSUU4LTkgZG9lc24ndCB1cGRhdGUgc2VsZWN0ZWQgYWZ0ZXIgZm9ybSByZXNldCAoIzI1NTEpXG5cdFx0XHRcdFx0aWYgKCAoIG9wdGlvbi5zZWxlY3RlZCB8fCBpID09PSBpbmRleCApICYmXG5cblx0XHRcdFx0XHRcdFx0Ly8gRG9uJ3QgcmV0dXJuIG9wdGlvbnMgdGhhdCBhcmUgZGlzYWJsZWQgb3IgaW4gYSBkaXNhYmxlZCBvcHRncm91cFxuXHRcdFx0XHRcdFx0XHQhb3B0aW9uLmRpc2FibGVkICYmXG5cdFx0XHRcdFx0XHRcdCggIW9wdGlvbi5wYXJlbnROb2RlLmRpc2FibGVkIHx8XG5cdFx0XHRcdFx0XHRcdFx0IW5vZGVOYW1lKCBvcHRpb24ucGFyZW50Tm9kZSwgXCJvcHRncm91cFwiICkgKSApIHtcblxuXHRcdFx0XHRcdFx0Ly8gR2V0IHRoZSBzcGVjaWZpYyB2YWx1ZSBmb3IgdGhlIG9wdGlvblxuXHRcdFx0XHRcdFx0dmFsdWUgPSBqUXVlcnkoIG9wdGlvbiApLnZhbCgpO1xuXG5cdFx0XHRcdFx0XHQvLyBXZSBkb24ndCBuZWVkIGFuIGFycmF5IGZvciBvbmUgc2VsZWN0c1xuXHRcdFx0XHRcdFx0aWYgKCBvbmUgKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0Ly8gTXVsdGktU2VsZWN0cyByZXR1cm4gYW4gYXJyYXlcblx0XHRcdFx0XHRcdHZhbHVlcy5wdXNoKCB2YWx1ZSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiB2YWx1ZXM7XG5cdFx0XHR9LFxuXG5cdFx0XHRzZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSApIHtcblx0XHRcdFx0dmFyIG9wdGlvblNldCwgb3B0aW9uLFxuXHRcdFx0XHRcdG9wdGlvbnMgPSBlbGVtLm9wdGlvbnMsXG5cdFx0XHRcdFx0dmFsdWVzID0galF1ZXJ5Lm1ha2VBcnJheSggdmFsdWUgKSxcblx0XHRcdFx0XHRpID0gb3B0aW9ucy5sZW5ndGg7XG5cblx0XHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRcdFx0b3B0aW9uID0gb3B0aW9uc1sgaSBdO1xuXG5cdFx0XHRcdFx0LyogZXNsaW50LWRpc2FibGUgbm8tY29uZC1hc3NpZ24gKi9cblxuXHRcdFx0XHRcdGlmICggb3B0aW9uLnNlbGVjdGVkID1cblx0XHRcdFx0XHRcdGpRdWVyeS5pbkFycmF5KCBqUXVlcnkudmFsSG9va3Mub3B0aW9uLmdldCggb3B0aW9uICksIHZhbHVlcyApID4gLTFcblx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdG9wdGlvblNldCA9IHRydWU7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0LyogZXNsaW50LWVuYWJsZSBuby1jb25kLWFzc2lnbiAqL1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gRm9yY2UgYnJvd3NlcnMgdG8gYmVoYXZlIGNvbnNpc3RlbnRseSB3aGVuIG5vbi1tYXRjaGluZyB2YWx1ZSBpcyBzZXRcblx0XHRcdFx0aWYgKCAhb3B0aW9uU2V0ICkge1xuXHRcdFx0XHRcdGVsZW0uc2VsZWN0ZWRJbmRleCA9IC0xO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB2YWx1ZXM7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59ICk7XG5cbi8vIFJhZGlvcyBhbmQgY2hlY2tib3hlcyBnZXR0ZXIvc2V0dGVyXG5qUXVlcnkuZWFjaCggWyBcInJhZGlvXCIsIFwiY2hlY2tib3hcIiBdLCBmdW5jdGlvbigpIHtcblx0alF1ZXJ5LnZhbEhvb2tzWyB0aGlzIF0gPSB7XG5cdFx0c2V0OiBmdW5jdGlvbiggZWxlbSwgdmFsdWUgKSB7XG5cdFx0XHRpZiAoIEFycmF5LmlzQXJyYXkoIHZhbHVlICkgKSB7XG5cdFx0XHRcdHJldHVybiAoIGVsZW0uY2hlY2tlZCA9IGpRdWVyeS5pbkFycmF5KCBqUXVlcnkoIGVsZW0gKS52YWwoKSwgdmFsdWUgKSA+IC0xICk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xuXHRpZiAoICFzdXBwb3J0LmNoZWNrT24gKSB7XG5cdFx0alF1ZXJ5LnZhbEhvb2tzWyB0aGlzIF0uZ2V0ID0gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gZWxlbS5nZXRBdHRyaWJ1dGUoIFwidmFsdWVcIiApID09PSBudWxsID8gXCJvblwiIDogZWxlbS52YWx1ZTtcblx0XHR9O1xuXHR9XG59ICk7XG5cblxuXG5cbi8vIFJldHVybiBqUXVlcnkgZm9yIGF0dHJpYnV0ZXMtb25seSBpbmNsdXNpb25cblxuXG5zdXBwb3J0LmZvY3VzaW4gPSBcIm9uZm9jdXNpblwiIGluIHdpbmRvdztcblxuXG52YXIgcmZvY3VzTW9ycGggPSAvXig/OmZvY3VzaW5mb2N1c3xmb2N1c291dGJsdXIpJC8sXG5cdHN0b3BQcm9wYWdhdGlvbkNhbGxiYWNrID0gZnVuY3Rpb24oIGUgKSB7XG5cdFx0ZS5zdG9wUHJvcGFnYXRpb24oKTtcblx0fTtcblxualF1ZXJ5LmV4dGVuZCggalF1ZXJ5LmV2ZW50LCB7XG5cblx0dHJpZ2dlcjogZnVuY3Rpb24oIGV2ZW50LCBkYXRhLCBlbGVtLCBvbmx5SGFuZGxlcnMgKSB7XG5cblx0XHR2YXIgaSwgY3VyLCB0bXAsIGJ1YmJsZVR5cGUsIG9udHlwZSwgaGFuZGxlLCBzcGVjaWFsLCBsYXN0RWxlbWVudCxcblx0XHRcdGV2ZW50UGF0aCA9IFsgZWxlbSB8fCBkb2N1bWVudCBdLFxuXHRcdFx0dHlwZSA9IGhhc093bi5jYWxsKCBldmVudCwgXCJ0eXBlXCIgKSA/IGV2ZW50LnR5cGUgOiBldmVudCxcblx0XHRcdG5hbWVzcGFjZXMgPSBoYXNPd24uY2FsbCggZXZlbnQsIFwibmFtZXNwYWNlXCIgKSA/IGV2ZW50Lm5hbWVzcGFjZS5zcGxpdCggXCIuXCIgKSA6IFtdO1xuXG5cdFx0Y3VyID0gbGFzdEVsZW1lbnQgPSB0bXAgPSBlbGVtID0gZWxlbSB8fCBkb2N1bWVudDtcblxuXHRcdC8vIERvbid0IGRvIGV2ZW50cyBvbiB0ZXh0IGFuZCBjb21tZW50IG5vZGVzXG5cdFx0aWYgKCBlbGVtLm5vZGVUeXBlID09PSAzIHx8IGVsZW0ubm9kZVR5cGUgPT09IDggKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gZm9jdXMvYmx1ciBtb3JwaHMgdG8gZm9jdXNpbi9vdXQ7IGVuc3VyZSB3ZSdyZSBub3QgZmlyaW5nIHRoZW0gcmlnaHQgbm93XG5cdFx0aWYgKCByZm9jdXNNb3JwaC50ZXN0KCB0eXBlICsgalF1ZXJ5LmV2ZW50LnRyaWdnZXJlZCApICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmICggdHlwZS5pbmRleE9mKCBcIi5cIiApID4gLTEgKSB7XG5cblx0XHRcdC8vIE5hbWVzcGFjZWQgdHJpZ2dlcjsgY3JlYXRlIGEgcmVnZXhwIHRvIG1hdGNoIGV2ZW50IHR5cGUgaW4gaGFuZGxlKClcblx0XHRcdG5hbWVzcGFjZXMgPSB0eXBlLnNwbGl0KCBcIi5cIiApO1xuXHRcdFx0dHlwZSA9IG5hbWVzcGFjZXMuc2hpZnQoKTtcblx0XHRcdG5hbWVzcGFjZXMuc29ydCgpO1xuXHRcdH1cblx0XHRvbnR5cGUgPSB0eXBlLmluZGV4T2YoIFwiOlwiICkgPCAwICYmIFwib25cIiArIHR5cGU7XG5cblx0XHQvLyBDYWxsZXIgY2FuIHBhc3MgaW4gYSBqUXVlcnkuRXZlbnQgb2JqZWN0LCBPYmplY3QsIG9yIGp1c3QgYW4gZXZlbnQgdHlwZSBzdHJpbmdcblx0XHRldmVudCA9IGV2ZW50WyBqUXVlcnkuZXhwYW5kbyBdID9cblx0XHRcdGV2ZW50IDpcblx0XHRcdG5ldyBqUXVlcnkuRXZlbnQoIHR5cGUsIHR5cGVvZiBldmVudCA9PT0gXCJvYmplY3RcIiAmJiBldmVudCApO1xuXG5cdFx0Ly8gVHJpZ2dlciBiaXRtYXNrOiAmIDEgZm9yIG5hdGl2ZSBoYW5kbGVyczsgJiAyIGZvciBqUXVlcnkgKGFsd2F5cyB0cnVlKVxuXHRcdGV2ZW50LmlzVHJpZ2dlciA9IG9ubHlIYW5kbGVycyA/IDIgOiAzO1xuXHRcdGV2ZW50Lm5hbWVzcGFjZSA9IG5hbWVzcGFjZXMuam9pbiggXCIuXCIgKTtcblx0XHRldmVudC5ybmFtZXNwYWNlID0gZXZlbnQubmFtZXNwYWNlID9cblx0XHRcdG5ldyBSZWdFeHAoIFwiKF58XFxcXC4pXCIgKyBuYW1lc3BhY2VzLmpvaW4oIFwiXFxcXC4oPzouKlxcXFwufClcIiApICsgXCIoXFxcXC58JClcIiApIDpcblx0XHRcdG51bGw7XG5cblx0XHQvLyBDbGVhbiB1cCB0aGUgZXZlbnQgaW4gY2FzZSBpdCBpcyBiZWluZyByZXVzZWRcblx0XHRldmVudC5yZXN1bHQgPSB1bmRlZmluZWQ7XG5cdFx0aWYgKCAhZXZlbnQudGFyZ2V0ICkge1xuXHRcdFx0ZXZlbnQudGFyZ2V0ID0gZWxlbTtcblx0XHR9XG5cblx0XHQvLyBDbG9uZSBhbnkgaW5jb21pbmcgZGF0YSBhbmQgcHJlcGVuZCB0aGUgZXZlbnQsIGNyZWF0aW5nIHRoZSBoYW5kbGVyIGFyZyBsaXN0XG5cdFx0ZGF0YSA9IGRhdGEgPT0gbnVsbCA/XG5cdFx0XHRbIGV2ZW50IF0gOlxuXHRcdFx0alF1ZXJ5Lm1ha2VBcnJheSggZGF0YSwgWyBldmVudCBdICk7XG5cblx0XHQvLyBBbGxvdyBzcGVjaWFsIGV2ZW50cyB0byBkcmF3IG91dHNpZGUgdGhlIGxpbmVzXG5cdFx0c3BlY2lhbCA9IGpRdWVyeS5ldmVudC5zcGVjaWFsWyB0eXBlIF0gfHwge307XG5cdFx0aWYgKCAhb25seUhhbmRsZXJzICYmIHNwZWNpYWwudHJpZ2dlciAmJiBzcGVjaWFsLnRyaWdnZXIuYXBwbHkoIGVsZW0sIGRhdGEgKSA9PT0gZmFsc2UgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gRGV0ZXJtaW5lIGV2ZW50IHByb3BhZ2F0aW9uIHBhdGggaW4gYWR2YW5jZSwgcGVyIFczQyBldmVudHMgc3BlYyAoIzk5NTEpXG5cdFx0Ly8gQnViYmxlIHVwIHRvIGRvY3VtZW50LCB0aGVuIHRvIHdpbmRvdzsgd2F0Y2ggZm9yIGEgZ2xvYmFsIG93bmVyRG9jdW1lbnQgdmFyICgjOTcyNClcblx0XHRpZiAoICFvbmx5SGFuZGxlcnMgJiYgIXNwZWNpYWwubm9CdWJibGUgJiYgIWlzV2luZG93KCBlbGVtICkgKSB7XG5cblx0XHRcdGJ1YmJsZVR5cGUgPSBzcGVjaWFsLmRlbGVnYXRlVHlwZSB8fCB0eXBlO1xuXHRcdFx0aWYgKCAhcmZvY3VzTW9ycGgudGVzdCggYnViYmxlVHlwZSArIHR5cGUgKSApIHtcblx0XHRcdFx0Y3VyID0gY3VyLnBhcmVudE5vZGU7XG5cdFx0XHR9XG5cdFx0XHRmb3IgKCA7IGN1cjsgY3VyID0gY3VyLnBhcmVudE5vZGUgKSB7XG5cdFx0XHRcdGV2ZW50UGF0aC5wdXNoKCBjdXIgKTtcblx0XHRcdFx0dG1wID0gY3VyO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBPbmx5IGFkZCB3aW5kb3cgaWYgd2UgZ290IHRvIGRvY3VtZW50IChlLmcuLCBub3QgcGxhaW4gb2JqIG9yIGRldGFjaGVkIERPTSlcblx0XHRcdGlmICggdG1wID09PSAoIGVsZW0ub3duZXJEb2N1bWVudCB8fCBkb2N1bWVudCApICkge1xuXHRcdFx0XHRldmVudFBhdGgucHVzaCggdG1wLmRlZmF1bHRWaWV3IHx8IHRtcC5wYXJlbnRXaW5kb3cgfHwgd2luZG93ICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gRmlyZSBoYW5kbGVycyBvbiB0aGUgZXZlbnQgcGF0aFxuXHRcdGkgPSAwO1xuXHRcdHdoaWxlICggKCBjdXIgPSBldmVudFBhdGhbIGkrKyBdICkgJiYgIWV2ZW50LmlzUHJvcGFnYXRpb25TdG9wcGVkKCkgKSB7XG5cdFx0XHRsYXN0RWxlbWVudCA9IGN1cjtcblx0XHRcdGV2ZW50LnR5cGUgPSBpID4gMSA/XG5cdFx0XHRcdGJ1YmJsZVR5cGUgOlxuXHRcdFx0XHRzcGVjaWFsLmJpbmRUeXBlIHx8IHR5cGU7XG5cblx0XHRcdC8vIGpRdWVyeSBoYW5kbGVyXG5cdFx0XHRoYW5kbGUgPSAoIGRhdGFQcml2LmdldCggY3VyLCBcImV2ZW50c1wiICkgfHwge30gKVsgZXZlbnQudHlwZSBdICYmXG5cdFx0XHRcdGRhdGFQcml2LmdldCggY3VyLCBcImhhbmRsZVwiICk7XG5cdFx0XHRpZiAoIGhhbmRsZSApIHtcblx0XHRcdFx0aGFuZGxlLmFwcGx5KCBjdXIsIGRhdGEgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gTmF0aXZlIGhhbmRsZXJcblx0XHRcdGhhbmRsZSA9IG9udHlwZSAmJiBjdXJbIG9udHlwZSBdO1xuXHRcdFx0aWYgKCBoYW5kbGUgJiYgaGFuZGxlLmFwcGx5ICYmIGFjY2VwdERhdGEoIGN1ciApICkge1xuXHRcdFx0XHRldmVudC5yZXN1bHQgPSBoYW5kbGUuYXBwbHkoIGN1ciwgZGF0YSApO1xuXHRcdFx0XHRpZiAoIGV2ZW50LnJlc3VsdCA9PT0gZmFsc2UgKSB7XG5cdFx0XHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRldmVudC50eXBlID0gdHlwZTtcblxuXHRcdC8vIElmIG5vYm9keSBwcmV2ZW50ZWQgdGhlIGRlZmF1bHQgYWN0aW9uLCBkbyBpdCBub3dcblx0XHRpZiAoICFvbmx5SGFuZGxlcnMgJiYgIWV2ZW50LmlzRGVmYXVsdFByZXZlbnRlZCgpICkge1xuXG5cdFx0XHRpZiAoICggIXNwZWNpYWwuX2RlZmF1bHQgfHxcblx0XHRcdFx0c3BlY2lhbC5fZGVmYXVsdC5hcHBseSggZXZlbnRQYXRoLnBvcCgpLCBkYXRhICkgPT09IGZhbHNlICkgJiZcblx0XHRcdFx0YWNjZXB0RGF0YSggZWxlbSApICkge1xuXG5cdFx0XHRcdC8vIENhbGwgYSBuYXRpdmUgRE9NIG1ldGhvZCBvbiB0aGUgdGFyZ2V0IHdpdGggdGhlIHNhbWUgbmFtZSBhcyB0aGUgZXZlbnQuXG5cdFx0XHRcdC8vIERvbid0IGRvIGRlZmF1bHQgYWN0aW9ucyBvbiB3aW5kb3csIHRoYXQncyB3aGVyZSBnbG9iYWwgdmFyaWFibGVzIGJlICgjNjE3MClcblx0XHRcdFx0aWYgKCBvbnR5cGUgJiYgaXNGdW5jdGlvbiggZWxlbVsgdHlwZSBdICkgJiYgIWlzV2luZG93KCBlbGVtICkgKSB7XG5cblx0XHRcdFx0XHQvLyBEb24ndCByZS10cmlnZ2VyIGFuIG9uRk9PIGV2ZW50IHdoZW4gd2UgY2FsbCBpdHMgRk9PKCkgbWV0aG9kXG5cdFx0XHRcdFx0dG1wID0gZWxlbVsgb250eXBlIF07XG5cblx0XHRcdFx0XHRpZiAoIHRtcCApIHtcblx0XHRcdFx0XHRcdGVsZW1bIG9udHlwZSBdID0gbnVsbDtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBQcmV2ZW50IHJlLXRyaWdnZXJpbmcgb2YgdGhlIHNhbWUgZXZlbnQsIHNpbmNlIHdlIGFscmVhZHkgYnViYmxlZCBpdCBhYm92ZVxuXHRcdFx0XHRcdGpRdWVyeS5ldmVudC50cmlnZ2VyZWQgPSB0eXBlO1xuXG5cdFx0XHRcdFx0aWYgKCBldmVudC5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpICkge1xuXHRcdFx0XHRcdFx0bGFzdEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lciggdHlwZSwgc3RvcFByb3BhZ2F0aW9uQ2FsbGJhY2sgKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRlbGVtWyB0eXBlIF0oKTtcblxuXHRcdFx0XHRcdGlmICggZXZlbnQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSApIHtcblx0XHRcdFx0XHRcdGxhc3RFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIHR5cGUsIHN0b3BQcm9wYWdhdGlvbkNhbGxiYWNrICk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0alF1ZXJ5LmV2ZW50LnRyaWdnZXJlZCA9IHVuZGVmaW5lZDtcblxuXHRcdFx0XHRcdGlmICggdG1wICkge1xuXHRcdFx0XHRcdFx0ZWxlbVsgb250eXBlIF0gPSB0bXA7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGV2ZW50LnJlc3VsdDtcblx0fSxcblxuXHQvLyBQaWdneWJhY2sgb24gYSBkb25vciBldmVudCB0byBzaW11bGF0ZSBhIGRpZmZlcmVudCBvbmVcblx0Ly8gVXNlZCBvbmx5IGZvciBgZm9jdXMoaW4gfCBvdXQpYCBldmVudHNcblx0c2ltdWxhdGU6IGZ1bmN0aW9uKCB0eXBlLCBlbGVtLCBldmVudCApIHtcblx0XHR2YXIgZSA9IGpRdWVyeS5leHRlbmQoXG5cdFx0XHRuZXcgalF1ZXJ5LkV2ZW50KCksXG5cdFx0XHRldmVudCxcblx0XHRcdHtcblx0XHRcdFx0dHlwZTogdHlwZSxcblx0XHRcdFx0aXNTaW11bGF0ZWQ6IHRydWVcblx0XHRcdH1cblx0XHQpO1xuXG5cdFx0alF1ZXJ5LmV2ZW50LnRyaWdnZXIoIGUsIG51bGwsIGVsZW0gKTtcblx0fVxuXG59ICk7XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblxuXHR0cmlnZ2VyOiBmdW5jdGlvbiggdHlwZSwgZGF0YSApIHtcblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdGpRdWVyeS5ldmVudC50cmlnZ2VyKCB0eXBlLCBkYXRhLCB0aGlzICk7XG5cdFx0fSApO1xuXHR9LFxuXHR0cmlnZ2VySGFuZGxlcjogZnVuY3Rpb24oIHR5cGUsIGRhdGEgKSB7XG5cdFx0dmFyIGVsZW0gPSB0aGlzWyAwIF07XG5cdFx0aWYgKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuIGpRdWVyeS5ldmVudC50cmlnZ2VyKCB0eXBlLCBkYXRhLCBlbGVtLCB0cnVlICk7XG5cdFx0fVxuXHR9XG59ICk7XG5cblxuLy8gU3VwcG9ydDogRmlyZWZveCA8PTQ0XG4vLyBGaXJlZm94IGRvZXNuJ3QgaGF2ZSBmb2N1cyhpbiB8IG91dCkgZXZlbnRzXG4vLyBSZWxhdGVkIHRpY2tldCAtIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTY4Nzc4N1xuLy9cbi8vIFN1cHBvcnQ6IENocm9tZSA8PTQ4IC0gNDksIFNhZmFyaSA8PTkuMCAtIDkuMVxuLy8gZm9jdXMoaW4gfCBvdXQpIGV2ZW50cyBmaXJlIGFmdGVyIGZvY3VzICYgYmx1ciBldmVudHMsXG4vLyB3aGljaCBpcyBzcGVjIHZpb2xhdGlvbiAtIGh0dHA6Ly93d3cudzMub3JnL1RSL0RPTS1MZXZlbC0zLUV2ZW50cy8jZXZlbnRzLWZvY3VzZXZlbnQtZXZlbnQtb3JkZXJcbi8vIFJlbGF0ZWQgdGlja2V0IC0gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9NDQ5ODU3XG5pZiAoICFzdXBwb3J0LmZvY3VzaW4gKSB7XG5cdGpRdWVyeS5lYWNoKCB7IGZvY3VzOiBcImZvY3VzaW5cIiwgYmx1cjogXCJmb2N1c291dFwiIH0sIGZ1bmN0aW9uKCBvcmlnLCBmaXggKSB7XG5cblx0XHQvLyBBdHRhY2ggYSBzaW5nbGUgY2FwdHVyaW5nIGhhbmRsZXIgb24gdGhlIGRvY3VtZW50IHdoaWxlIHNvbWVvbmUgd2FudHMgZm9jdXNpbi9mb2N1c291dFxuXHRcdHZhciBoYW5kbGVyID0gZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdFx0alF1ZXJ5LmV2ZW50LnNpbXVsYXRlKCBmaXgsIGV2ZW50LnRhcmdldCwgalF1ZXJ5LmV2ZW50LmZpeCggZXZlbnQgKSApO1xuXHRcdH07XG5cblx0XHRqUXVlcnkuZXZlbnQuc3BlY2lhbFsgZml4IF0gPSB7XG5cdFx0XHRzZXR1cDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHZhciBkb2MgPSB0aGlzLm93bmVyRG9jdW1lbnQgfHwgdGhpcyxcblx0XHRcdFx0XHRhdHRhY2hlcyA9IGRhdGFQcml2LmFjY2VzcyggZG9jLCBmaXggKTtcblxuXHRcdFx0XHRpZiAoICFhdHRhY2hlcyApIHtcblx0XHRcdFx0XHRkb2MuYWRkRXZlbnRMaXN0ZW5lciggb3JpZywgaGFuZGxlciwgdHJ1ZSApO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGRhdGFQcml2LmFjY2VzcyggZG9jLCBmaXgsICggYXR0YWNoZXMgfHwgMCApICsgMSApO1xuXHRcdFx0fSxcblx0XHRcdHRlYXJkb3duOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0dmFyIGRvYyA9IHRoaXMub3duZXJEb2N1bWVudCB8fCB0aGlzLFxuXHRcdFx0XHRcdGF0dGFjaGVzID0gZGF0YVByaXYuYWNjZXNzKCBkb2MsIGZpeCApIC0gMTtcblxuXHRcdFx0XHRpZiAoICFhdHRhY2hlcyApIHtcblx0XHRcdFx0XHRkb2MucmVtb3ZlRXZlbnRMaXN0ZW5lciggb3JpZywgaGFuZGxlciwgdHJ1ZSApO1xuXHRcdFx0XHRcdGRhdGFQcml2LnJlbW92ZSggZG9jLCBmaXggKTtcblxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGRhdGFQcml2LmFjY2VzcyggZG9jLCBmaXgsIGF0dGFjaGVzICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9O1xuXHR9ICk7XG59XG52YXIgbG9jYXRpb24gPSB3aW5kb3cubG9jYXRpb247XG5cbnZhciBub25jZSA9IERhdGUubm93KCk7XG5cbnZhciBycXVlcnkgPSAoIC9cXD8vICk7XG5cblxuXG4vLyBDcm9zcy1icm93c2VyIHhtbCBwYXJzaW5nXG5qUXVlcnkucGFyc2VYTUwgPSBmdW5jdGlvbiggZGF0YSApIHtcblx0dmFyIHhtbDtcblx0aWYgKCAhZGF0YSB8fCB0eXBlb2YgZGF0YSAhPT0gXCJzdHJpbmdcIiApIHtcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdC8vIFN1cHBvcnQ6IElFIDkgLSAxMSBvbmx5XG5cdC8vIElFIHRocm93cyBvbiBwYXJzZUZyb21TdHJpbmcgd2l0aCBpbnZhbGlkIGlucHV0LlxuXHR0cnkge1xuXHRcdHhtbCA9ICggbmV3IHdpbmRvdy5ET01QYXJzZXIoKSApLnBhcnNlRnJvbVN0cmluZyggZGF0YSwgXCJ0ZXh0L3htbFwiICk7XG5cdH0gY2F0Y2ggKCBlICkge1xuXHRcdHhtbCA9IHVuZGVmaW5lZDtcblx0fVxuXG5cdGlmICggIXhtbCB8fCB4bWwuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIFwicGFyc2VyZXJyb3JcIiApLmxlbmd0aCApIHtcblx0XHRqUXVlcnkuZXJyb3IoIFwiSW52YWxpZCBYTUw6IFwiICsgZGF0YSApO1xuXHR9XG5cdHJldHVybiB4bWw7XG59O1xuXG5cbnZhclxuXHRyYnJhY2tldCA9IC9cXFtcXF0kLyxcblx0ckNSTEYgPSAvXFxyP1xcbi9nLFxuXHRyc3VibWl0dGVyVHlwZXMgPSAvXig/OnN1Ym1pdHxidXR0b258aW1hZ2V8cmVzZXR8ZmlsZSkkL2ksXG5cdHJzdWJtaXR0YWJsZSA9IC9eKD86aW5wdXR8c2VsZWN0fHRleHRhcmVhfGtleWdlbikvaTtcblxuZnVuY3Rpb24gYnVpbGRQYXJhbXMoIHByZWZpeCwgb2JqLCB0cmFkaXRpb25hbCwgYWRkICkge1xuXHR2YXIgbmFtZTtcblxuXHRpZiAoIEFycmF5LmlzQXJyYXkoIG9iaiApICkge1xuXG5cdFx0Ly8gU2VyaWFsaXplIGFycmF5IGl0ZW0uXG5cdFx0alF1ZXJ5LmVhY2goIG9iaiwgZnVuY3Rpb24oIGksIHYgKSB7XG5cdFx0XHRpZiAoIHRyYWRpdGlvbmFsIHx8IHJicmFja2V0LnRlc3QoIHByZWZpeCApICkge1xuXG5cdFx0XHRcdC8vIFRyZWF0IGVhY2ggYXJyYXkgaXRlbSBhcyBhIHNjYWxhci5cblx0XHRcdFx0YWRkKCBwcmVmaXgsIHYgKTtcblxuXHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHQvLyBJdGVtIGlzIG5vbi1zY2FsYXIgKGFycmF5IG9yIG9iamVjdCksIGVuY29kZSBpdHMgbnVtZXJpYyBpbmRleC5cblx0XHRcdFx0YnVpbGRQYXJhbXMoXG5cdFx0XHRcdFx0cHJlZml4ICsgXCJbXCIgKyAoIHR5cGVvZiB2ID09PSBcIm9iamVjdFwiICYmIHYgIT0gbnVsbCA/IGkgOiBcIlwiICkgKyBcIl1cIixcblx0XHRcdFx0XHR2LFxuXHRcdFx0XHRcdHRyYWRpdGlvbmFsLFxuXHRcdFx0XHRcdGFkZFxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH0gKTtcblxuXHR9IGVsc2UgaWYgKCAhdHJhZGl0aW9uYWwgJiYgdG9UeXBlKCBvYmogKSA9PT0gXCJvYmplY3RcIiApIHtcblxuXHRcdC8vIFNlcmlhbGl6ZSBvYmplY3QgaXRlbS5cblx0XHRmb3IgKCBuYW1lIGluIG9iaiApIHtcblx0XHRcdGJ1aWxkUGFyYW1zKCBwcmVmaXggKyBcIltcIiArIG5hbWUgKyBcIl1cIiwgb2JqWyBuYW1lIF0sIHRyYWRpdGlvbmFsLCBhZGQgKTtcblx0XHR9XG5cblx0fSBlbHNlIHtcblxuXHRcdC8vIFNlcmlhbGl6ZSBzY2FsYXIgaXRlbS5cblx0XHRhZGQoIHByZWZpeCwgb2JqICk7XG5cdH1cbn1cblxuLy8gU2VyaWFsaXplIGFuIGFycmF5IG9mIGZvcm0gZWxlbWVudHMgb3IgYSBzZXQgb2Zcbi8vIGtleS92YWx1ZXMgaW50byBhIHF1ZXJ5IHN0cmluZ1xualF1ZXJ5LnBhcmFtID0gZnVuY3Rpb24oIGEsIHRyYWRpdGlvbmFsICkge1xuXHR2YXIgcHJlZml4LFxuXHRcdHMgPSBbXSxcblx0XHRhZGQgPSBmdW5jdGlvbigga2V5LCB2YWx1ZU9yRnVuY3Rpb24gKSB7XG5cblx0XHRcdC8vIElmIHZhbHVlIGlzIGEgZnVuY3Rpb24sIGludm9rZSBpdCBhbmQgdXNlIGl0cyByZXR1cm4gdmFsdWVcblx0XHRcdHZhciB2YWx1ZSA9IGlzRnVuY3Rpb24oIHZhbHVlT3JGdW5jdGlvbiApID9cblx0XHRcdFx0dmFsdWVPckZ1bmN0aW9uKCkgOlxuXHRcdFx0XHR2YWx1ZU9yRnVuY3Rpb247XG5cblx0XHRcdHNbIHMubGVuZ3RoIF0gPSBlbmNvZGVVUklDb21wb25lbnQoIGtleSApICsgXCI9XCIgK1xuXHRcdFx0XHRlbmNvZGVVUklDb21wb25lbnQoIHZhbHVlID09IG51bGwgPyBcIlwiIDogdmFsdWUgKTtcblx0XHR9O1xuXG5cdGlmICggYSA9PSBudWxsICkge1xuXHRcdHJldHVybiBcIlwiO1xuXHR9XG5cblx0Ly8gSWYgYW4gYXJyYXkgd2FzIHBhc3NlZCBpbiwgYXNzdW1lIHRoYXQgaXQgaXMgYW4gYXJyYXkgb2YgZm9ybSBlbGVtZW50cy5cblx0aWYgKCBBcnJheS5pc0FycmF5KCBhICkgfHwgKCBhLmpxdWVyeSAmJiAhalF1ZXJ5LmlzUGxhaW5PYmplY3QoIGEgKSApICkge1xuXG5cdFx0Ly8gU2VyaWFsaXplIHRoZSBmb3JtIGVsZW1lbnRzXG5cdFx0alF1ZXJ5LmVhY2goIGEsIGZ1bmN0aW9uKCkge1xuXHRcdFx0YWRkKCB0aGlzLm5hbWUsIHRoaXMudmFsdWUgKTtcblx0XHR9ICk7XG5cblx0fSBlbHNlIHtcblxuXHRcdC8vIElmIHRyYWRpdGlvbmFsLCBlbmNvZGUgdGhlIFwib2xkXCIgd2F5ICh0aGUgd2F5IDEuMy4yIG9yIG9sZGVyXG5cdFx0Ly8gZGlkIGl0KSwgb3RoZXJ3aXNlIGVuY29kZSBwYXJhbXMgcmVjdXJzaXZlbHkuXG5cdFx0Zm9yICggcHJlZml4IGluIGEgKSB7XG5cdFx0XHRidWlsZFBhcmFtcyggcHJlZml4LCBhWyBwcmVmaXggXSwgdHJhZGl0aW9uYWwsIGFkZCApO1xuXHRcdH1cblx0fVxuXG5cdC8vIFJldHVybiB0aGUgcmVzdWx0aW5nIHNlcmlhbGl6YXRpb25cblx0cmV0dXJuIHMuam9pbiggXCImXCIgKTtcbn07XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0c2VyaWFsaXplOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4galF1ZXJ5LnBhcmFtKCB0aGlzLnNlcmlhbGl6ZUFycmF5KCkgKTtcblx0fSxcblx0c2VyaWFsaXplQXJyYXk6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLm1hcCggZnVuY3Rpb24oKSB7XG5cblx0XHRcdC8vIENhbiBhZGQgcHJvcEhvb2sgZm9yIFwiZWxlbWVudHNcIiB0byBmaWx0ZXIgb3IgYWRkIGZvcm0gZWxlbWVudHNcblx0XHRcdHZhciBlbGVtZW50cyA9IGpRdWVyeS5wcm9wKCB0aGlzLCBcImVsZW1lbnRzXCIgKTtcblx0XHRcdHJldHVybiBlbGVtZW50cyA/IGpRdWVyeS5tYWtlQXJyYXkoIGVsZW1lbnRzICkgOiB0aGlzO1xuXHRcdH0gKVxuXHRcdC5maWx0ZXIoIGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIHR5cGUgPSB0aGlzLnR5cGU7XG5cblx0XHRcdC8vIFVzZSAuaXMoIFwiOmRpc2FibGVkXCIgKSBzbyB0aGF0IGZpZWxkc2V0W2Rpc2FibGVkXSB3b3Jrc1xuXHRcdFx0cmV0dXJuIHRoaXMubmFtZSAmJiAhalF1ZXJ5KCB0aGlzICkuaXMoIFwiOmRpc2FibGVkXCIgKSAmJlxuXHRcdFx0XHRyc3VibWl0dGFibGUudGVzdCggdGhpcy5ub2RlTmFtZSApICYmICFyc3VibWl0dGVyVHlwZXMudGVzdCggdHlwZSApICYmXG5cdFx0XHRcdCggdGhpcy5jaGVja2VkIHx8ICFyY2hlY2thYmxlVHlwZS50ZXN0KCB0eXBlICkgKTtcblx0XHR9IClcblx0XHQubWFwKCBmdW5jdGlvbiggaSwgZWxlbSApIHtcblx0XHRcdHZhciB2YWwgPSBqUXVlcnkoIHRoaXMgKS52YWwoKTtcblxuXHRcdFx0aWYgKCB2YWwgPT0gbnVsbCApIHtcblx0XHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0XHR9XG5cblx0XHRcdGlmICggQXJyYXkuaXNBcnJheSggdmFsICkgKSB7XG5cdFx0XHRcdHJldHVybiBqUXVlcnkubWFwKCB2YWwsIGZ1bmN0aW9uKCB2YWwgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHsgbmFtZTogZWxlbS5uYW1lLCB2YWx1ZTogdmFsLnJlcGxhY2UoIHJDUkxGLCBcIlxcclxcblwiICkgfTtcblx0XHRcdFx0fSApO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4geyBuYW1lOiBlbGVtLm5hbWUsIHZhbHVlOiB2YWwucmVwbGFjZSggckNSTEYsIFwiXFxyXFxuXCIgKSB9O1xuXHRcdH0gKS5nZXQoKTtcblx0fVxufSApO1xuXG5cbnZhclxuXHRyMjAgPSAvJTIwL2csXG5cdHJoYXNoID0gLyMuKiQvLFxuXHRyYW50aUNhY2hlID0gLyhbPyZdKV89W14mXSovLFxuXHRyaGVhZGVycyA9IC9eKC4qPyk6WyBcXHRdKihbXlxcclxcbl0qKSQvbWcsXG5cblx0Ly8gIzc2NTMsICM4MTI1LCAjODE1MjogbG9jYWwgcHJvdG9jb2wgZGV0ZWN0aW9uXG5cdHJsb2NhbFByb3RvY29sID0gL14oPzphYm91dHxhcHB8YXBwLXN0b3JhZ2V8ListZXh0ZW5zaW9ufGZpbGV8cmVzfHdpZGdldCk6JC8sXG5cdHJub0NvbnRlbnQgPSAvXig/OkdFVHxIRUFEKSQvLFxuXHRycHJvdG9jb2wgPSAvXlxcL1xcLy8sXG5cblx0LyogUHJlZmlsdGVyc1xuXHQgKiAxKSBUaGV5IGFyZSB1c2VmdWwgdG8gaW50cm9kdWNlIGN1c3RvbSBkYXRhVHlwZXMgKHNlZSBhamF4L2pzb25wLmpzIGZvciBhbiBleGFtcGxlKVxuXHQgKiAyKSBUaGVzZSBhcmUgY2FsbGVkOlxuXHQgKiAgICAtIEJFRk9SRSBhc2tpbmcgZm9yIGEgdHJhbnNwb3J0XG5cdCAqICAgIC0gQUZURVIgcGFyYW0gc2VyaWFsaXphdGlvbiAocy5kYXRhIGlzIGEgc3RyaW5nIGlmIHMucHJvY2Vzc0RhdGEgaXMgdHJ1ZSlcblx0ICogMykga2V5IGlzIHRoZSBkYXRhVHlwZVxuXHQgKiA0KSB0aGUgY2F0Y2hhbGwgc3ltYm9sIFwiKlwiIGNhbiBiZSB1c2VkXG5cdCAqIDUpIGV4ZWN1dGlvbiB3aWxsIHN0YXJ0IHdpdGggdHJhbnNwb3J0IGRhdGFUeXBlIGFuZCBUSEVOIGNvbnRpbnVlIGRvd24gdG8gXCIqXCIgaWYgbmVlZGVkXG5cdCAqL1xuXHRwcmVmaWx0ZXJzID0ge30sXG5cblx0LyogVHJhbnNwb3J0cyBiaW5kaW5nc1xuXHQgKiAxKSBrZXkgaXMgdGhlIGRhdGFUeXBlXG5cdCAqIDIpIHRoZSBjYXRjaGFsbCBzeW1ib2wgXCIqXCIgY2FuIGJlIHVzZWRcblx0ICogMykgc2VsZWN0aW9uIHdpbGwgc3RhcnQgd2l0aCB0cmFuc3BvcnQgZGF0YVR5cGUgYW5kIFRIRU4gZ28gdG8gXCIqXCIgaWYgbmVlZGVkXG5cdCAqL1xuXHR0cmFuc3BvcnRzID0ge30sXG5cblx0Ly8gQXZvaWQgY29tbWVudC1wcm9sb2cgY2hhciBzZXF1ZW5jZSAoIzEwMDk4KTsgbXVzdCBhcHBlYXNlIGxpbnQgYW5kIGV2YWRlIGNvbXByZXNzaW9uXG5cdGFsbFR5cGVzID0gXCIqL1wiLmNvbmNhdCggXCIqXCIgKSxcblxuXHQvLyBBbmNob3IgdGFnIGZvciBwYXJzaW5nIHRoZSBkb2N1bWVudCBvcmlnaW5cblx0b3JpZ2luQW5jaG9yID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJhXCIgKTtcblx0b3JpZ2luQW5jaG9yLmhyZWYgPSBsb2NhdGlvbi5ocmVmO1xuXG4vLyBCYXNlIFwiY29uc3RydWN0b3JcIiBmb3IgalF1ZXJ5LmFqYXhQcmVmaWx0ZXIgYW5kIGpRdWVyeS5hamF4VHJhbnNwb3J0XG5mdW5jdGlvbiBhZGRUb1ByZWZpbHRlcnNPclRyYW5zcG9ydHMoIHN0cnVjdHVyZSApIHtcblxuXHQvLyBkYXRhVHlwZUV4cHJlc3Npb24gaXMgb3B0aW9uYWwgYW5kIGRlZmF1bHRzIHRvIFwiKlwiXG5cdHJldHVybiBmdW5jdGlvbiggZGF0YVR5cGVFeHByZXNzaW9uLCBmdW5jICkge1xuXG5cdFx0aWYgKCB0eXBlb2YgZGF0YVR5cGVFeHByZXNzaW9uICE9PSBcInN0cmluZ1wiICkge1xuXHRcdFx0ZnVuYyA9IGRhdGFUeXBlRXhwcmVzc2lvbjtcblx0XHRcdGRhdGFUeXBlRXhwcmVzc2lvbiA9IFwiKlwiO1xuXHRcdH1cblxuXHRcdHZhciBkYXRhVHlwZSxcblx0XHRcdGkgPSAwLFxuXHRcdFx0ZGF0YVR5cGVzID0gZGF0YVR5cGVFeHByZXNzaW9uLnRvTG93ZXJDYXNlKCkubWF0Y2goIHJub3RodG1sd2hpdGUgKSB8fCBbXTtcblxuXHRcdGlmICggaXNGdW5jdGlvbiggZnVuYyApICkge1xuXG5cdFx0XHQvLyBGb3IgZWFjaCBkYXRhVHlwZSBpbiB0aGUgZGF0YVR5cGVFeHByZXNzaW9uXG5cdFx0XHR3aGlsZSAoICggZGF0YVR5cGUgPSBkYXRhVHlwZXNbIGkrKyBdICkgKSB7XG5cblx0XHRcdFx0Ly8gUHJlcGVuZCBpZiByZXF1ZXN0ZWRcblx0XHRcdFx0aWYgKCBkYXRhVHlwZVsgMCBdID09PSBcIitcIiApIHtcblx0XHRcdFx0XHRkYXRhVHlwZSA9IGRhdGFUeXBlLnNsaWNlKCAxICkgfHwgXCIqXCI7XG5cdFx0XHRcdFx0KCBzdHJ1Y3R1cmVbIGRhdGFUeXBlIF0gPSBzdHJ1Y3R1cmVbIGRhdGFUeXBlIF0gfHwgW10gKS51bnNoaWZ0KCBmdW5jICk7XG5cblx0XHRcdFx0Ly8gT3RoZXJ3aXNlIGFwcGVuZFxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdCggc3RydWN0dXJlWyBkYXRhVHlwZSBdID0gc3RydWN0dXJlWyBkYXRhVHlwZSBdIHx8IFtdICkucHVzaCggZnVuYyApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xufVxuXG4vLyBCYXNlIGluc3BlY3Rpb24gZnVuY3Rpb24gZm9yIHByZWZpbHRlcnMgYW5kIHRyYW5zcG9ydHNcbmZ1bmN0aW9uIGluc3BlY3RQcmVmaWx0ZXJzT3JUcmFuc3BvcnRzKCBzdHJ1Y3R1cmUsIG9wdGlvbnMsIG9yaWdpbmFsT3B0aW9ucywganFYSFIgKSB7XG5cblx0dmFyIGluc3BlY3RlZCA9IHt9LFxuXHRcdHNlZWtpbmdUcmFuc3BvcnQgPSAoIHN0cnVjdHVyZSA9PT0gdHJhbnNwb3J0cyApO1xuXG5cdGZ1bmN0aW9uIGluc3BlY3QoIGRhdGFUeXBlICkge1xuXHRcdHZhciBzZWxlY3RlZDtcblx0XHRpbnNwZWN0ZWRbIGRhdGFUeXBlIF0gPSB0cnVlO1xuXHRcdGpRdWVyeS5lYWNoKCBzdHJ1Y3R1cmVbIGRhdGFUeXBlIF0gfHwgW10sIGZ1bmN0aW9uKCBfLCBwcmVmaWx0ZXJPckZhY3RvcnkgKSB7XG5cdFx0XHR2YXIgZGF0YVR5cGVPclRyYW5zcG9ydCA9IHByZWZpbHRlck9yRmFjdG9yeSggb3B0aW9ucywgb3JpZ2luYWxPcHRpb25zLCBqcVhIUiApO1xuXHRcdFx0aWYgKCB0eXBlb2YgZGF0YVR5cGVPclRyYW5zcG9ydCA9PT0gXCJzdHJpbmdcIiAmJlxuXHRcdFx0XHQhc2Vla2luZ1RyYW5zcG9ydCAmJiAhaW5zcGVjdGVkWyBkYXRhVHlwZU9yVHJhbnNwb3J0IF0gKSB7XG5cblx0XHRcdFx0b3B0aW9ucy5kYXRhVHlwZXMudW5zaGlmdCggZGF0YVR5cGVPclRyYW5zcG9ydCApO1xuXHRcdFx0XHRpbnNwZWN0KCBkYXRhVHlwZU9yVHJhbnNwb3J0ICk7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH0gZWxzZSBpZiAoIHNlZWtpbmdUcmFuc3BvcnQgKSB7XG5cdFx0XHRcdHJldHVybiAhKCBzZWxlY3RlZCA9IGRhdGFUeXBlT3JUcmFuc3BvcnQgKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdFx0cmV0dXJuIHNlbGVjdGVkO1xuXHR9XG5cblx0cmV0dXJuIGluc3BlY3QoIG9wdGlvbnMuZGF0YVR5cGVzWyAwIF0gKSB8fCAhaW5zcGVjdGVkWyBcIipcIiBdICYmIGluc3BlY3QoIFwiKlwiICk7XG59XG5cbi8vIEEgc3BlY2lhbCBleHRlbmQgZm9yIGFqYXggb3B0aW9uc1xuLy8gdGhhdCB0YWtlcyBcImZsYXRcIiBvcHRpb25zIChub3QgdG8gYmUgZGVlcCBleHRlbmRlZClcbi8vIEZpeGVzICM5ODg3XG5mdW5jdGlvbiBhamF4RXh0ZW5kKCB0YXJnZXQsIHNyYyApIHtcblx0dmFyIGtleSwgZGVlcCxcblx0XHRmbGF0T3B0aW9ucyA9IGpRdWVyeS5hamF4U2V0dGluZ3MuZmxhdE9wdGlvbnMgfHwge307XG5cblx0Zm9yICgga2V5IGluIHNyYyApIHtcblx0XHRpZiAoIHNyY1sga2V5IF0gIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdCggZmxhdE9wdGlvbnNbIGtleSBdID8gdGFyZ2V0IDogKCBkZWVwIHx8ICggZGVlcCA9IHt9ICkgKSApWyBrZXkgXSA9IHNyY1sga2V5IF07XG5cdFx0fVxuXHR9XG5cdGlmICggZGVlcCApIHtcblx0XHRqUXVlcnkuZXh0ZW5kKCB0cnVlLCB0YXJnZXQsIGRlZXAgKTtcblx0fVxuXG5cdHJldHVybiB0YXJnZXQ7XG59XG5cbi8qIEhhbmRsZXMgcmVzcG9uc2VzIHRvIGFuIGFqYXggcmVxdWVzdDpcbiAqIC0gZmluZHMgdGhlIHJpZ2h0IGRhdGFUeXBlIChtZWRpYXRlcyBiZXR3ZWVuIGNvbnRlbnQtdHlwZSBhbmQgZXhwZWN0ZWQgZGF0YVR5cGUpXG4gKiAtIHJldHVybnMgdGhlIGNvcnJlc3BvbmRpbmcgcmVzcG9uc2VcbiAqL1xuZnVuY3Rpb24gYWpheEhhbmRsZVJlc3BvbnNlcyggcywganFYSFIsIHJlc3BvbnNlcyApIHtcblxuXHR2YXIgY3QsIHR5cGUsIGZpbmFsRGF0YVR5cGUsIGZpcnN0RGF0YVR5cGUsXG5cdFx0Y29udGVudHMgPSBzLmNvbnRlbnRzLFxuXHRcdGRhdGFUeXBlcyA9IHMuZGF0YVR5cGVzO1xuXG5cdC8vIFJlbW92ZSBhdXRvIGRhdGFUeXBlIGFuZCBnZXQgY29udGVudC10eXBlIGluIHRoZSBwcm9jZXNzXG5cdHdoaWxlICggZGF0YVR5cGVzWyAwIF0gPT09IFwiKlwiICkge1xuXHRcdGRhdGFUeXBlcy5zaGlmdCgpO1xuXHRcdGlmICggY3QgPT09IHVuZGVmaW5lZCApIHtcblx0XHRcdGN0ID0gcy5taW1lVHlwZSB8fCBqcVhIUi5nZXRSZXNwb25zZUhlYWRlciggXCJDb250ZW50LVR5cGVcIiApO1xuXHRcdH1cblx0fVxuXG5cdC8vIENoZWNrIGlmIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIGtub3duIGNvbnRlbnQtdHlwZVxuXHRpZiAoIGN0ICkge1xuXHRcdGZvciAoIHR5cGUgaW4gY29udGVudHMgKSB7XG5cdFx0XHRpZiAoIGNvbnRlbnRzWyB0eXBlIF0gJiYgY29udGVudHNbIHR5cGUgXS50ZXN0KCBjdCApICkge1xuXHRcdFx0XHRkYXRhVHlwZXMudW5zaGlmdCggdHlwZSApO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBDaGVjayB0byBzZWUgaWYgd2UgaGF2ZSBhIHJlc3BvbnNlIGZvciB0aGUgZXhwZWN0ZWQgZGF0YVR5cGVcblx0aWYgKCBkYXRhVHlwZXNbIDAgXSBpbiByZXNwb25zZXMgKSB7XG5cdFx0ZmluYWxEYXRhVHlwZSA9IGRhdGFUeXBlc1sgMCBdO1xuXHR9IGVsc2Uge1xuXG5cdFx0Ly8gVHJ5IGNvbnZlcnRpYmxlIGRhdGFUeXBlc1xuXHRcdGZvciAoIHR5cGUgaW4gcmVzcG9uc2VzICkge1xuXHRcdFx0aWYgKCAhZGF0YVR5cGVzWyAwIF0gfHwgcy5jb252ZXJ0ZXJzWyB0eXBlICsgXCIgXCIgKyBkYXRhVHlwZXNbIDAgXSBdICkge1xuXHRcdFx0XHRmaW5hbERhdGFUeXBlID0gdHlwZTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHRpZiAoICFmaXJzdERhdGFUeXBlICkge1xuXHRcdFx0XHRmaXJzdERhdGFUeXBlID0gdHlwZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBPciBqdXN0IHVzZSBmaXJzdCBvbmVcblx0XHRmaW5hbERhdGFUeXBlID0gZmluYWxEYXRhVHlwZSB8fCBmaXJzdERhdGFUeXBlO1xuXHR9XG5cblx0Ly8gSWYgd2UgZm91bmQgYSBkYXRhVHlwZVxuXHQvLyBXZSBhZGQgdGhlIGRhdGFUeXBlIHRvIHRoZSBsaXN0IGlmIG5lZWRlZFxuXHQvLyBhbmQgcmV0dXJuIHRoZSBjb3JyZXNwb25kaW5nIHJlc3BvbnNlXG5cdGlmICggZmluYWxEYXRhVHlwZSApIHtcblx0XHRpZiAoIGZpbmFsRGF0YVR5cGUgIT09IGRhdGFUeXBlc1sgMCBdICkge1xuXHRcdFx0ZGF0YVR5cGVzLnVuc2hpZnQoIGZpbmFsRGF0YVR5cGUgKTtcblx0XHR9XG5cdFx0cmV0dXJuIHJlc3BvbnNlc1sgZmluYWxEYXRhVHlwZSBdO1xuXHR9XG59XG5cbi8qIENoYWluIGNvbnZlcnNpb25zIGdpdmVuIHRoZSByZXF1ZXN0IGFuZCB0aGUgb3JpZ2luYWwgcmVzcG9uc2VcbiAqIEFsc28gc2V0cyB0aGUgcmVzcG9uc2VYWFggZmllbGRzIG9uIHRoZSBqcVhIUiBpbnN0YW5jZVxuICovXG5mdW5jdGlvbiBhamF4Q29udmVydCggcywgcmVzcG9uc2UsIGpxWEhSLCBpc1N1Y2Nlc3MgKSB7XG5cdHZhciBjb252MiwgY3VycmVudCwgY29udiwgdG1wLCBwcmV2LFxuXHRcdGNvbnZlcnRlcnMgPSB7fSxcblxuXHRcdC8vIFdvcmsgd2l0aCBhIGNvcHkgb2YgZGF0YVR5cGVzIGluIGNhc2Ugd2UgbmVlZCB0byBtb2RpZnkgaXQgZm9yIGNvbnZlcnNpb25cblx0XHRkYXRhVHlwZXMgPSBzLmRhdGFUeXBlcy5zbGljZSgpO1xuXG5cdC8vIENyZWF0ZSBjb252ZXJ0ZXJzIG1hcCB3aXRoIGxvd2VyY2FzZWQga2V5c1xuXHRpZiAoIGRhdGFUeXBlc1sgMSBdICkge1xuXHRcdGZvciAoIGNvbnYgaW4gcy5jb252ZXJ0ZXJzICkge1xuXHRcdFx0Y29udmVydGVyc1sgY29udi50b0xvd2VyQ2FzZSgpIF0gPSBzLmNvbnZlcnRlcnNbIGNvbnYgXTtcblx0XHR9XG5cdH1cblxuXHRjdXJyZW50ID0gZGF0YVR5cGVzLnNoaWZ0KCk7XG5cblx0Ly8gQ29udmVydCB0byBlYWNoIHNlcXVlbnRpYWwgZGF0YVR5cGVcblx0d2hpbGUgKCBjdXJyZW50ICkge1xuXG5cdFx0aWYgKCBzLnJlc3BvbnNlRmllbGRzWyBjdXJyZW50IF0gKSB7XG5cdFx0XHRqcVhIUlsgcy5yZXNwb25zZUZpZWxkc1sgY3VycmVudCBdIF0gPSByZXNwb25zZTtcblx0XHR9XG5cblx0XHQvLyBBcHBseSB0aGUgZGF0YUZpbHRlciBpZiBwcm92aWRlZFxuXHRcdGlmICggIXByZXYgJiYgaXNTdWNjZXNzICYmIHMuZGF0YUZpbHRlciApIHtcblx0XHRcdHJlc3BvbnNlID0gcy5kYXRhRmlsdGVyKCByZXNwb25zZSwgcy5kYXRhVHlwZSApO1xuXHRcdH1cblxuXHRcdHByZXYgPSBjdXJyZW50O1xuXHRcdGN1cnJlbnQgPSBkYXRhVHlwZXMuc2hpZnQoKTtcblxuXHRcdGlmICggY3VycmVudCApIHtcblxuXHRcdFx0Ly8gVGhlcmUncyBvbmx5IHdvcmsgdG8gZG8gaWYgY3VycmVudCBkYXRhVHlwZSBpcyBub24tYXV0b1xuXHRcdFx0aWYgKCBjdXJyZW50ID09PSBcIipcIiApIHtcblxuXHRcdFx0XHRjdXJyZW50ID0gcHJldjtcblxuXHRcdFx0Ly8gQ29udmVydCByZXNwb25zZSBpZiBwcmV2IGRhdGFUeXBlIGlzIG5vbi1hdXRvIGFuZCBkaWZmZXJzIGZyb20gY3VycmVudFxuXHRcdFx0fSBlbHNlIGlmICggcHJldiAhPT0gXCIqXCIgJiYgcHJldiAhPT0gY3VycmVudCApIHtcblxuXHRcdFx0XHQvLyBTZWVrIGEgZGlyZWN0IGNvbnZlcnRlclxuXHRcdFx0XHRjb252ID0gY29udmVydGVyc1sgcHJldiArIFwiIFwiICsgY3VycmVudCBdIHx8IGNvbnZlcnRlcnNbIFwiKiBcIiArIGN1cnJlbnQgXTtcblxuXHRcdFx0XHQvLyBJZiBub25lIGZvdW5kLCBzZWVrIGEgcGFpclxuXHRcdFx0XHRpZiAoICFjb252ICkge1xuXHRcdFx0XHRcdGZvciAoIGNvbnYyIGluIGNvbnZlcnRlcnMgKSB7XG5cblx0XHRcdFx0XHRcdC8vIElmIGNvbnYyIG91dHB1dHMgY3VycmVudFxuXHRcdFx0XHRcdFx0dG1wID0gY29udjIuc3BsaXQoIFwiIFwiICk7XG5cdFx0XHRcdFx0XHRpZiAoIHRtcFsgMSBdID09PSBjdXJyZW50ICkge1xuXG5cdFx0XHRcdFx0XHRcdC8vIElmIHByZXYgY2FuIGJlIGNvbnZlcnRlZCB0byBhY2NlcHRlZCBpbnB1dFxuXHRcdFx0XHRcdFx0XHRjb252ID0gY29udmVydGVyc1sgcHJldiArIFwiIFwiICsgdG1wWyAwIF0gXSB8fFxuXHRcdFx0XHRcdFx0XHRcdGNvbnZlcnRlcnNbIFwiKiBcIiArIHRtcFsgMCBdIF07XG5cdFx0XHRcdFx0XHRcdGlmICggY29udiApIHtcblxuXHRcdFx0XHRcdFx0XHRcdC8vIENvbmRlbnNlIGVxdWl2YWxlbmNlIGNvbnZlcnRlcnNcblx0XHRcdFx0XHRcdFx0XHRpZiAoIGNvbnYgPT09IHRydWUgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRjb252ID0gY29udmVydGVyc1sgY29udjIgXTtcblxuXHRcdFx0XHRcdFx0XHRcdC8vIE90aGVyd2lzZSwgaW5zZXJ0IHRoZSBpbnRlcm1lZGlhdGUgZGF0YVR5cGVcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKCBjb252ZXJ0ZXJzWyBjb252MiBdICE9PSB0cnVlICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0Y3VycmVudCA9IHRtcFsgMCBdO1xuXHRcdFx0XHRcdFx0XHRcdFx0ZGF0YVR5cGVzLnVuc2hpZnQoIHRtcFsgMSBdICk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gQXBwbHkgY29udmVydGVyIChpZiBub3QgYW4gZXF1aXZhbGVuY2UpXG5cdFx0XHRcdGlmICggY29udiAhPT0gdHJ1ZSApIHtcblxuXHRcdFx0XHRcdC8vIFVubGVzcyBlcnJvcnMgYXJlIGFsbG93ZWQgdG8gYnViYmxlLCBjYXRjaCBhbmQgcmV0dXJuIHRoZW1cblx0XHRcdFx0XHRpZiAoIGNvbnYgJiYgcy50aHJvd3MgKSB7XG5cdFx0XHRcdFx0XHRyZXNwb25zZSA9IGNvbnYoIHJlc3BvbnNlICk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRcdHJlc3BvbnNlID0gY29udiggcmVzcG9uc2UgKTtcblx0XHRcdFx0XHRcdH0gY2F0Y2ggKCBlICkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdFx0XHRcdHN0YXRlOiBcInBhcnNlcmVycm9yXCIsXG5cdFx0XHRcdFx0XHRcdFx0ZXJyb3I6IGNvbnYgPyBlIDogXCJObyBjb252ZXJzaW9uIGZyb20gXCIgKyBwcmV2ICsgXCIgdG8gXCIgKyBjdXJyZW50XG5cdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHsgc3RhdGU6IFwic3VjY2Vzc1wiLCBkYXRhOiByZXNwb25zZSB9O1xufVxuXG5qUXVlcnkuZXh0ZW5kKCB7XG5cblx0Ly8gQ291bnRlciBmb3IgaG9sZGluZyB0aGUgbnVtYmVyIG9mIGFjdGl2ZSBxdWVyaWVzXG5cdGFjdGl2ZTogMCxcblxuXHQvLyBMYXN0LU1vZGlmaWVkIGhlYWRlciBjYWNoZSBmb3IgbmV4dCByZXF1ZXN0XG5cdGxhc3RNb2RpZmllZDoge30sXG5cdGV0YWc6IHt9LFxuXG5cdGFqYXhTZXR0aW5nczoge1xuXHRcdHVybDogbG9jYXRpb24uaHJlZixcblx0XHR0eXBlOiBcIkdFVFwiLFxuXHRcdGlzTG9jYWw6IHJsb2NhbFByb3RvY29sLnRlc3QoIGxvY2F0aW9uLnByb3RvY29sICksXG5cdFx0Z2xvYmFsOiB0cnVlLFxuXHRcdHByb2Nlc3NEYXRhOiB0cnVlLFxuXHRcdGFzeW5jOiB0cnVlLFxuXHRcdGNvbnRlbnRUeXBlOiBcImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDsgY2hhcnNldD1VVEYtOFwiLFxuXG5cdFx0Lypcblx0XHR0aW1lb3V0OiAwLFxuXHRcdGRhdGE6IG51bGwsXG5cdFx0ZGF0YVR5cGU6IG51bGwsXG5cdFx0dXNlcm5hbWU6IG51bGwsXG5cdFx0cGFzc3dvcmQ6IG51bGwsXG5cdFx0Y2FjaGU6IG51bGwsXG5cdFx0dGhyb3dzOiBmYWxzZSxcblx0XHR0cmFkaXRpb25hbDogZmFsc2UsXG5cdFx0aGVhZGVyczoge30sXG5cdFx0Ki9cblxuXHRcdGFjY2VwdHM6IHtcblx0XHRcdFwiKlwiOiBhbGxUeXBlcyxcblx0XHRcdHRleHQ6IFwidGV4dC9wbGFpblwiLFxuXHRcdFx0aHRtbDogXCJ0ZXh0L2h0bWxcIixcblx0XHRcdHhtbDogXCJhcHBsaWNhdGlvbi94bWwsIHRleHQveG1sXCIsXG5cdFx0XHRqc29uOiBcImFwcGxpY2F0aW9uL2pzb24sIHRleHQvamF2YXNjcmlwdFwiXG5cdFx0fSxcblxuXHRcdGNvbnRlbnRzOiB7XG5cdFx0XHR4bWw6IC9cXGJ4bWxcXGIvLFxuXHRcdFx0aHRtbDogL1xcYmh0bWwvLFxuXHRcdFx0anNvbjogL1xcYmpzb25cXGIvXG5cdFx0fSxcblxuXHRcdHJlc3BvbnNlRmllbGRzOiB7XG5cdFx0XHR4bWw6IFwicmVzcG9uc2VYTUxcIixcblx0XHRcdHRleHQ6IFwicmVzcG9uc2VUZXh0XCIsXG5cdFx0XHRqc29uOiBcInJlc3BvbnNlSlNPTlwiXG5cdFx0fSxcblxuXHRcdC8vIERhdGEgY29udmVydGVyc1xuXHRcdC8vIEtleXMgc2VwYXJhdGUgc291cmNlIChvciBjYXRjaGFsbCBcIipcIikgYW5kIGRlc3RpbmF0aW9uIHR5cGVzIHdpdGggYSBzaW5nbGUgc3BhY2Vcblx0XHRjb252ZXJ0ZXJzOiB7XG5cblx0XHRcdC8vIENvbnZlcnQgYW55dGhpbmcgdG8gdGV4dFxuXHRcdFx0XCIqIHRleHRcIjogU3RyaW5nLFxuXG5cdFx0XHQvLyBUZXh0IHRvIGh0bWwgKHRydWUgPSBubyB0cmFuc2Zvcm1hdGlvbilcblx0XHRcdFwidGV4dCBodG1sXCI6IHRydWUsXG5cblx0XHRcdC8vIEV2YWx1YXRlIHRleHQgYXMgYSBqc29uIGV4cHJlc3Npb25cblx0XHRcdFwidGV4dCBqc29uXCI6IEpTT04ucGFyc2UsXG5cblx0XHRcdC8vIFBhcnNlIHRleHQgYXMgeG1sXG5cdFx0XHRcInRleHQgeG1sXCI6IGpRdWVyeS5wYXJzZVhNTFxuXHRcdH0sXG5cblx0XHQvLyBGb3Igb3B0aW9ucyB0aGF0IHNob3VsZG4ndCBiZSBkZWVwIGV4dGVuZGVkOlxuXHRcdC8vIHlvdSBjYW4gYWRkIHlvdXIgb3duIGN1c3RvbSBvcHRpb25zIGhlcmUgaWZcblx0XHQvLyBhbmQgd2hlbiB5b3UgY3JlYXRlIG9uZSB0aGF0IHNob3VsZG4ndCBiZVxuXHRcdC8vIGRlZXAgZXh0ZW5kZWQgKHNlZSBhamF4RXh0ZW5kKVxuXHRcdGZsYXRPcHRpb25zOiB7XG5cdFx0XHR1cmw6IHRydWUsXG5cdFx0XHRjb250ZXh0OiB0cnVlXG5cdFx0fVxuXHR9LFxuXG5cdC8vIENyZWF0ZXMgYSBmdWxsIGZsZWRnZWQgc2V0dGluZ3Mgb2JqZWN0IGludG8gdGFyZ2V0XG5cdC8vIHdpdGggYm90aCBhamF4U2V0dGluZ3MgYW5kIHNldHRpbmdzIGZpZWxkcy5cblx0Ly8gSWYgdGFyZ2V0IGlzIG9taXR0ZWQsIHdyaXRlcyBpbnRvIGFqYXhTZXR0aW5ncy5cblx0YWpheFNldHVwOiBmdW5jdGlvbiggdGFyZ2V0LCBzZXR0aW5ncyApIHtcblx0XHRyZXR1cm4gc2V0dGluZ3MgP1xuXG5cdFx0XHQvLyBCdWlsZGluZyBhIHNldHRpbmdzIG9iamVjdFxuXHRcdFx0YWpheEV4dGVuZCggYWpheEV4dGVuZCggdGFyZ2V0LCBqUXVlcnkuYWpheFNldHRpbmdzICksIHNldHRpbmdzICkgOlxuXG5cdFx0XHQvLyBFeHRlbmRpbmcgYWpheFNldHRpbmdzXG5cdFx0XHRhamF4RXh0ZW5kKCBqUXVlcnkuYWpheFNldHRpbmdzLCB0YXJnZXQgKTtcblx0fSxcblxuXHRhamF4UHJlZmlsdGVyOiBhZGRUb1ByZWZpbHRlcnNPclRyYW5zcG9ydHMoIHByZWZpbHRlcnMgKSxcblx0YWpheFRyYW5zcG9ydDogYWRkVG9QcmVmaWx0ZXJzT3JUcmFuc3BvcnRzKCB0cmFuc3BvcnRzICksXG5cblx0Ly8gTWFpbiBtZXRob2Rcblx0YWpheDogZnVuY3Rpb24oIHVybCwgb3B0aW9ucyApIHtcblxuXHRcdC8vIElmIHVybCBpcyBhbiBvYmplY3QsIHNpbXVsYXRlIHByZS0xLjUgc2lnbmF0dXJlXG5cdFx0aWYgKCB0eXBlb2YgdXJsID09PSBcIm9iamVjdFwiICkge1xuXHRcdFx0b3B0aW9ucyA9IHVybDtcblx0XHRcdHVybCA9IHVuZGVmaW5lZDtcblx0XHR9XG5cblx0XHQvLyBGb3JjZSBvcHRpb25zIHRvIGJlIGFuIG9iamVjdFxuXHRcdG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG5cdFx0dmFyIHRyYW5zcG9ydCxcblxuXHRcdFx0Ly8gVVJMIHdpdGhvdXQgYW50aS1jYWNoZSBwYXJhbVxuXHRcdFx0Y2FjaGVVUkwsXG5cblx0XHRcdC8vIFJlc3BvbnNlIGhlYWRlcnNcblx0XHRcdHJlc3BvbnNlSGVhZGVyc1N0cmluZyxcblx0XHRcdHJlc3BvbnNlSGVhZGVycyxcblxuXHRcdFx0Ly8gdGltZW91dCBoYW5kbGVcblx0XHRcdHRpbWVvdXRUaW1lcixcblxuXHRcdFx0Ly8gVXJsIGNsZWFudXAgdmFyXG5cdFx0XHR1cmxBbmNob3IsXG5cblx0XHRcdC8vIFJlcXVlc3Qgc3RhdGUgKGJlY29tZXMgZmFsc2UgdXBvbiBzZW5kIGFuZCB0cnVlIHVwb24gY29tcGxldGlvbilcblx0XHRcdGNvbXBsZXRlZCxcblxuXHRcdFx0Ly8gVG8ga25vdyBpZiBnbG9iYWwgZXZlbnRzIGFyZSB0byBiZSBkaXNwYXRjaGVkXG5cdFx0XHRmaXJlR2xvYmFscyxcblxuXHRcdFx0Ly8gTG9vcCB2YXJpYWJsZVxuXHRcdFx0aSxcblxuXHRcdFx0Ly8gdW5jYWNoZWQgcGFydCBvZiB0aGUgdXJsXG5cdFx0XHR1bmNhY2hlZCxcblxuXHRcdFx0Ly8gQ3JlYXRlIHRoZSBmaW5hbCBvcHRpb25zIG9iamVjdFxuXHRcdFx0cyA9IGpRdWVyeS5hamF4U2V0dXAoIHt9LCBvcHRpb25zICksXG5cblx0XHRcdC8vIENhbGxiYWNrcyBjb250ZXh0XG5cdFx0XHRjYWxsYmFja0NvbnRleHQgPSBzLmNvbnRleHQgfHwgcyxcblxuXHRcdFx0Ly8gQ29udGV4dCBmb3IgZ2xvYmFsIGV2ZW50cyBpcyBjYWxsYmFja0NvbnRleHQgaWYgaXQgaXMgYSBET00gbm9kZSBvciBqUXVlcnkgY29sbGVjdGlvblxuXHRcdFx0Z2xvYmFsRXZlbnRDb250ZXh0ID0gcy5jb250ZXh0ICYmXG5cdFx0XHRcdCggY2FsbGJhY2tDb250ZXh0Lm5vZGVUeXBlIHx8IGNhbGxiYWNrQ29udGV4dC5qcXVlcnkgKSA/XG5cdFx0XHRcdFx0alF1ZXJ5KCBjYWxsYmFja0NvbnRleHQgKSA6XG5cdFx0XHRcdFx0alF1ZXJ5LmV2ZW50LFxuXG5cdFx0XHQvLyBEZWZlcnJlZHNcblx0XHRcdGRlZmVycmVkID0galF1ZXJ5LkRlZmVycmVkKCksXG5cdFx0XHRjb21wbGV0ZURlZmVycmVkID0galF1ZXJ5LkNhbGxiYWNrcyggXCJvbmNlIG1lbW9yeVwiICksXG5cblx0XHRcdC8vIFN0YXR1cy1kZXBlbmRlbnQgY2FsbGJhY2tzXG5cdFx0XHRzdGF0dXNDb2RlID0gcy5zdGF0dXNDb2RlIHx8IHt9LFxuXG5cdFx0XHQvLyBIZWFkZXJzICh0aGV5IGFyZSBzZW50IGFsbCBhdCBvbmNlKVxuXHRcdFx0cmVxdWVzdEhlYWRlcnMgPSB7fSxcblx0XHRcdHJlcXVlc3RIZWFkZXJzTmFtZXMgPSB7fSxcblxuXHRcdFx0Ly8gRGVmYXVsdCBhYm9ydCBtZXNzYWdlXG5cdFx0XHRzdHJBYm9ydCA9IFwiY2FuY2VsZWRcIixcblxuXHRcdFx0Ly8gRmFrZSB4aHJcblx0XHRcdGpxWEhSID0ge1xuXHRcdFx0XHRyZWFkeVN0YXRlOiAwLFxuXG5cdFx0XHRcdC8vIEJ1aWxkcyBoZWFkZXJzIGhhc2h0YWJsZSBpZiBuZWVkZWRcblx0XHRcdFx0Z2V0UmVzcG9uc2VIZWFkZXI6IGZ1bmN0aW9uKCBrZXkgKSB7XG5cdFx0XHRcdFx0dmFyIG1hdGNoO1xuXHRcdFx0XHRcdGlmICggY29tcGxldGVkICkge1xuXHRcdFx0XHRcdFx0aWYgKCAhcmVzcG9uc2VIZWFkZXJzICkge1xuXHRcdFx0XHRcdFx0XHRyZXNwb25zZUhlYWRlcnMgPSB7fTtcblx0XHRcdFx0XHRcdFx0d2hpbGUgKCAoIG1hdGNoID0gcmhlYWRlcnMuZXhlYyggcmVzcG9uc2VIZWFkZXJzU3RyaW5nICkgKSApIHtcblx0XHRcdFx0XHRcdFx0XHRyZXNwb25zZUhlYWRlcnNbIG1hdGNoWyAxIF0udG9Mb3dlckNhc2UoKSArIFwiIFwiIF0gPVxuXHRcdFx0XHRcdFx0XHRcdFx0KCByZXNwb25zZUhlYWRlcnNbIG1hdGNoWyAxIF0udG9Mb3dlckNhc2UoKSArIFwiIFwiIF0gfHwgW10gKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQuY29uY2F0KCBtYXRjaFsgMiBdICk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdG1hdGNoID0gcmVzcG9uc2VIZWFkZXJzWyBrZXkudG9Mb3dlckNhc2UoKSArIFwiIFwiIF07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiBtYXRjaCA9PSBudWxsID8gbnVsbCA6IG1hdGNoLmpvaW4oIFwiLCBcIiApO1xuXHRcdFx0XHR9LFxuXG5cdFx0XHRcdC8vIFJhdyBzdHJpbmdcblx0XHRcdFx0Z2V0QWxsUmVzcG9uc2VIZWFkZXJzOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRyZXR1cm4gY29tcGxldGVkID8gcmVzcG9uc2VIZWFkZXJzU3RyaW5nIDogbnVsbDtcblx0XHRcdFx0fSxcblxuXHRcdFx0XHQvLyBDYWNoZXMgdGhlIGhlYWRlclxuXHRcdFx0XHRzZXRSZXF1ZXN0SGVhZGVyOiBmdW5jdGlvbiggbmFtZSwgdmFsdWUgKSB7XG5cdFx0XHRcdFx0aWYgKCBjb21wbGV0ZWQgPT0gbnVsbCApIHtcblx0XHRcdFx0XHRcdG5hbWUgPSByZXF1ZXN0SGVhZGVyc05hbWVzWyBuYW1lLnRvTG93ZXJDYXNlKCkgXSA9XG5cdFx0XHRcdFx0XHRcdHJlcXVlc3RIZWFkZXJzTmFtZXNbIG5hbWUudG9Mb3dlckNhc2UoKSBdIHx8IG5hbWU7XG5cdFx0XHRcdFx0XHRyZXF1ZXN0SGVhZGVyc1sgbmFtZSBdID0gdmFsdWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0XHR9LFxuXG5cdFx0XHRcdC8vIE92ZXJyaWRlcyByZXNwb25zZSBjb250ZW50LXR5cGUgaGVhZGVyXG5cdFx0XHRcdG92ZXJyaWRlTWltZVR5cGU6IGZ1bmN0aW9uKCB0eXBlICkge1xuXHRcdFx0XHRcdGlmICggY29tcGxldGVkID09IG51bGwgKSB7XG5cdFx0XHRcdFx0XHRzLm1pbWVUeXBlID0gdHlwZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHRcdH0sXG5cblx0XHRcdFx0Ly8gU3RhdHVzLWRlcGVuZGVudCBjYWxsYmFja3Ncblx0XHRcdFx0c3RhdHVzQ29kZTogZnVuY3Rpb24oIG1hcCApIHtcblx0XHRcdFx0XHR2YXIgY29kZTtcblx0XHRcdFx0XHRpZiAoIG1hcCApIHtcblx0XHRcdFx0XHRcdGlmICggY29tcGxldGVkICkge1xuXG5cdFx0XHRcdFx0XHRcdC8vIEV4ZWN1dGUgdGhlIGFwcHJvcHJpYXRlIGNhbGxiYWNrc1xuXHRcdFx0XHRcdFx0XHRqcVhIUi5hbHdheXMoIG1hcFsganFYSFIuc3RhdHVzIF0gKTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gTGF6eS1hZGQgdGhlIG5ldyBjYWxsYmFja3MgaW4gYSB3YXkgdGhhdCBwcmVzZXJ2ZXMgb2xkIG9uZXNcblx0XHRcdFx0XHRcdFx0Zm9yICggY29kZSBpbiBtYXAgKSB7XG5cdFx0XHRcdFx0XHRcdFx0c3RhdHVzQ29kZVsgY29kZSBdID0gWyBzdGF0dXNDb2RlWyBjb2RlIF0sIG1hcFsgY29kZSBdIF07XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHRcdH0sXG5cblx0XHRcdFx0Ly8gQ2FuY2VsIHRoZSByZXF1ZXN0XG5cdFx0XHRcdGFib3J0OiBmdW5jdGlvbiggc3RhdHVzVGV4dCApIHtcblx0XHRcdFx0XHR2YXIgZmluYWxUZXh0ID0gc3RhdHVzVGV4dCB8fCBzdHJBYm9ydDtcblx0XHRcdFx0XHRpZiAoIHRyYW5zcG9ydCApIHtcblx0XHRcdFx0XHRcdHRyYW5zcG9ydC5hYm9ydCggZmluYWxUZXh0ICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGRvbmUoIDAsIGZpbmFsVGV4dCApO1xuXHRcdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXG5cdFx0Ly8gQXR0YWNoIGRlZmVycmVkc1xuXHRcdGRlZmVycmVkLnByb21pc2UoIGpxWEhSICk7XG5cblx0XHQvLyBBZGQgcHJvdG9jb2wgaWYgbm90IHByb3ZpZGVkIChwcmVmaWx0ZXJzIG1pZ2h0IGV4cGVjdCBpdClcblx0XHQvLyBIYW5kbGUgZmFsc3kgdXJsIGluIHRoZSBzZXR0aW5ncyBvYmplY3QgKCMxMDA5MzogY29uc2lzdGVuY3kgd2l0aCBvbGQgc2lnbmF0dXJlKVxuXHRcdC8vIFdlIGFsc28gdXNlIHRoZSB1cmwgcGFyYW1ldGVyIGlmIGF2YWlsYWJsZVxuXHRcdHMudXJsID0gKCAoIHVybCB8fCBzLnVybCB8fCBsb2NhdGlvbi5ocmVmICkgKyBcIlwiIClcblx0XHRcdC5yZXBsYWNlKCBycHJvdG9jb2wsIGxvY2F0aW9uLnByb3RvY29sICsgXCIvL1wiICk7XG5cblx0XHQvLyBBbGlhcyBtZXRob2Qgb3B0aW9uIHRvIHR5cGUgYXMgcGVyIHRpY2tldCAjMTIwMDRcblx0XHRzLnR5cGUgPSBvcHRpb25zLm1ldGhvZCB8fCBvcHRpb25zLnR5cGUgfHwgcy5tZXRob2QgfHwgcy50eXBlO1xuXG5cdFx0Ly8gRXh0cmFjdCBkYXRhVHlwZXMgbGlzdFxuXHRcdHMuZGF0YVR5cGVzID0gKCBzLmRhdGFUeXBlIHx8IFwiKlwiICkudG9Mb3dlckNhc2UoKS5tYXRjaCggcm5vdGh0bWx3aGl0ZSApIHx8IFsgXCJcIiBdO1xuXG5cdFx0Ly8gQSBjcm9zcy1kb21haW4gcmVxdWVzdCBpcyBpbiBvcmRlciB3aGVuIHRoZSBvcmlnaW4gZG9lc24ndCBtYXRjaCB0aGUgY3VycmVudCBvcmlnaW4uXG5cdFx0aWYgKCBzLmNyb3NzRG9tYWluID09IG51bGwgKSB7XG5cdFx0XHR1cmxBbmNob3IgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImFcIiApO1xuXG5cdFx0XHQvLyBTdXBwb3J0OiBJRSA8PTggLSAxMSwgRWRnZSAxMiAtIDE1XG5cdFx0XHQvLyBJRSB0aHJvd3MgZXhjZXB0aW9uIG9uIGFjY2Vzc2luZyB0aGUgaHJlZiBwcm9wZXJ0eSBpZiB1cmwgaXMgbWFsZm9ybWVkLFxuXHRcdFx0Ly8gZS5nLiBodHRwOi8vZXhhbXBsZS5jb206ODB4L1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0dXJsQW5jaG9yLmhyZWYgPSBzLnVybDtcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA8PTggLSAxMSBvbmx5XG5cdFx0XHRcdC8vIEFuY2hvcidzIGhvc3QgcHJvcGVydHkgaXNuJ3QgY29ycmVjdGx5IHNldCB3aGVuIHMudXJsIGlzIHJlbGF0aXZlXG5cdFx0XHRcdHVybEFuY2hvci5ocmVmID0gdXJsQW5jaG9yLmhyZWY7XG5cdFx0XHRcdHMuY3Jvc3NEb21haW4gPSBvcmlnaW5BbmNob3IucHJvdG9jb2wgKyBcIi8vXCIgKyBvcmlnaW5BbmNob3IuaG9zdCAhPT1cblx0XHRcdFx0XHR1cmxBbmNob3IucHJvdG9jb2wgKyBcIi8vXCIgKyB1cmxBbmNob3IuaG9zdDtcblx0XHRcdH0gY2F0Y2ggKCBlICkge1xuXG5cdFx0XHRcdC8vIElmIHRoZXJlIGlzIGFuIGVycm9yIHBhcnNpbmcgdGhlIFVSTCwgYXNzdW1lIGl0IGlzIGNyb3NzRG9tYWluLFxuXHRcdFx0XHQvLyBpdCBjYW4gYmUgcmVqZWN0ZWQgYnkgdGhlIHRyYW5zcG9ydCBpZiBpdCBpcyBpbnZhbGlkXG5cdFx0XHRcdHMuY3Jvc3NEb21haW4gPSB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIENvbnZlcnQgZGF0YSBpZiBub3QgYWxyZWFkeSBhIHN0cmluZ1xuXHRcdGlmICggcy5kYXRhICYmIHMucHJvY2Vzc0RhdGEgJiYgdHlwZW9mIHMuZGF0YSAhPT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdHMuZGF0YSA9IGpRdWVyeS5wYXJhbSggcy5kYXRhLCBzLnRyYWRpdGlvbmFsICk7XG5cdFx0fVxuXG5cdFx0Ly8gQXBwbHkgcHJlZmlsdGVyc1xuXHRcdGluc3BlY3RQcmVmaWx0ZXJzT3JUcmFuc3BvcnRzKCBwcmVmaWx0ZXJzLCBzLCBvcHRpb25zLCBqcVhIUiApO1xuXG5cdFx0Ly8gSWYgcmVxdWVzdCB3YXMgYWJvcnRlZCBpbnNpZGUgYSBwcmVmaWx0ZXIsIHN0b3AgdGhlcmVcblx0XHRpZiAoIGNvbXBsZXRlZCApIHtcblx0XHRcdHJldHVybiBqcVhIUjtcblx0XHR9XG5cblx0XHQvLyBXZSBjYW4gZmlyZSBnbG9iYWwgZXZlbnRzIGFzIG9mIG5vdyBpZiBhc2tlZCB0b1xuXHRcdC8vIERvbid0IGZpcmUgZXZlbnRzIGlmIGpRdWVyeS5ldmVudCBpcyB1bmRlZmluZWQgaW4gYW4gQU1ELXVzYWdlIHNjZW5hcmlvICgjMTUxMTgpXG5cdFx0ZmlyZUdsb2JhbHMgPSBqUXVlcnkuZXZlbnQgJiYgcy5nbG9iYWw7XG5cblx0XHQvLyBXYXRjaCBmb3IgYSBuZXcgc2V0IG9mIHJlcXVlc3RzXG5cdFx0aWYgKCBmaXJlR2xvYmFscyAmJiBqUXVlcnkuYWN0aXZlKysgPT09IDAgKSB7XG5cdFx0XHRqUXVlcnkuZXZlbnQudHJpZ2dlciggXCJhamF4U3RhcnRcIiApO1xuXHRcdH1cblxuXHRcdC8vIFVwcGVyY2FzZSB0aGUgdHlwZVxuXHRcdHMudHlwZSA9IHMudHlwZS50b1VwcGVyQ2FzZSgpO1xuXG5cdFx0Ly8gRGV0ZXJtaW5lIGlmIHJlcXVlc3QgaGFzIGNvbnRlbnRcblx0XHRzLmhhc0NvbnRlbnQgPSAhcm5vQ29udGVudC50ZXN0KCBzLnR5cGUgKTtcblxuXHRcdC8vIFNhdmUgdGhlIFVSTCBpbiBjYXNlIHdlJ3JlIHRveWluZyB3aXRoIHRoZSBJZi1Nb2RpZmllZC1TaW5jZVxuXHRcdC8vIGFuZC9vciBJZi1Ob25lLU1hdGNoIGhlYWRlciBsYXRlciBvblxuXHRcdC8vIFJlbW92ZSBoYXNoIHRvIHNpbXBsaWZ5IHVybCBtYW5pcHVsYXRpb25cblx0XHRjYWNoZVVSTCA9IHMudXJsLnJlcGxhY2UoIHJoYXNoLCBcIlwiICk7XG5cblx0XHQvLyBNb3JlIG9wdGlvbnMgaGFuZGxpbmcgZm9yIHJlcXVlc3RzIHdpdGggbm8gY29udGVudFxuXHRcdGlmICggIXMuaGFzQ29udGVudCApIHtcblxuXHRcdFx0Ly8gUmVtZW1iZXIgdGhlIGhhc2ggc28gd2UgY2FuIHB1dCBpdCBiYWNrXG5cdFx0XHR1bmNhY2hlZCA9IHMudXJsLnNsaWNlKCBjYWNoZVVSTC5sZW5ndGggKTtcblxuXHRcdFx0Ly8gSWYgZGF0YSBpcyBhdmFpbGFibGUgYW5kIHNob3VsZCBiZSBwcm9jZXNzZWQsIGFwcGVuZCBkYXRhIHRvIHVybFxuXHRcdFx0aWYgKCBzLmRhdGEgJiYgKCBzLnByb2Nlc3NEYXRhIHx8IHR5cGVvZiBzLmRhdGEgPT09IFwic3RyaW5nXCIgKSApIHtcblx0XHRcdFx0Y2FjaGVVUkwgKz0gKCBycXVlcnkudGVzdCggY2FjaGVVUkwgKSA/IFwiJlwiIDogXCI/XCIgKSArIHMuZGF0YTtcblxuXHRcdFx0XHQvLyAjOTY4MjogcmVtb3ZlIGRhdGEgc28gdGhhdCBpdCdzIG5vdCB1c2VkIGluIGFuIGV2ZW50dWFsIHJldHJ5XG5cdFx0XHRcdGRlbGV0ZSBzLmRhdGE7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEFkZCBvciB1cGRhdGUgYW50aS1jYWNoZSBwYXJhbSBpZiBuZWVkZWRcblx0XHRcdGlmICggcy5jYWNoZSA9PT0gZmFsc2UgKSB7XG5cdFx0XHRcdGNhY2hlVVJMID0gY2FjaGVVUkwucmVwbGFjZSggcmFudGlDYWNoZSwgXCIkMVwiICk7XG5cdFx0XHRcdHVuY2FjaGVkID0gKCBycXVlcnkudGVzdCggY2FjaGVVUkwgKSA/IFwiJlwiIDogXCI/XCIgKSArIFwiXz1cIiArICggbm9uY2UrKyApICsgdW5jYWNoZWQ7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFB1dCBoYXNoIGFuZCBhbnRpLWNhY2hlIG9uIHRoZSBVUkwgdGhhdCB3aWxsIGJlIHJlcXVlc3RlZCAoZ2gtMTczMilcblx0XHRcdHMudXJsID0gY2FjaGVVUkwgKyB1bmNhY2hlZDtcblxuXHRcdC8vIENoYW5nZSAnJTIwJyB0byAnKycgaWYgdGhpcyBpcyBlbmNvZGVkIGZvcm0gYm9keSBjb250ZW50IChnaC0yNjU4KVxuXHRcdH0gZWxzZSBpZiAoIHMuZGF0YSAmJiBzLnByb2Nlc3NEYXRhICYmXG5cdFx0XHQoIHMuY29udGVudFR5cGUgfHwgXCJcIiApLmluZGV4T2YoIFwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkXCIgKSA9PT0gMCApIHtcblx0XHRcdHMuZGF0YSA9IHMuZGF0YS5yZXBsYWNlKCByMjAsIFwiK1wiICk7XG5cdFx0fVxuXG5cdFx0Ly8gU2V0IHRoZSBJZi1Nb2RpZmllZC1TaW5jZSBhbmQvb3IgSWYtTm9uZS1NYXRjaCBoZWFkZXIsIGlmIGluIGlmTW9kaWZpZWQgbW9kZS5cblx0XHRpZiAoIHMuaWZNb2RpZmllZCApIHtcblx0XHRcdGlmICggalF1ZXJ5Lmxhc3RNb2RpZmllZFsgY2FjaGVVUkwgXSApIHtcblx0XHRcdFx0anFYSFIuc2V0UmVxdWVzdEhlYWRlciggXCJJZi1Nb2RpZmllZC1TaW5jZVwiLCBqUXVlcnkubGFzdE1vZGlmaWVkWyBjYWNoZVVSTCBdICk7XG5cdFx0XHR9XG5cdFx0XHRpZiAoIGpRdWVyeS5ldGFnWyBjYWNoZVVSTCBdICkge1xuXHRcdFx0XHRqcVhIUi5zZXRSZXF1ZXN0SGVhZGVyKCBcIklmLU5vbmUtTWF0Y2hcIiwgalF1ZXJ5LmV0YWdbIGNhY2hlVVJMIF0gKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBTZXQgdGhlIGNvcnJlY3QgaGVhZGVyLCBpZiBkYXRhIGlzIGJlaW5nIHNlbnRcblx0XHRpZiAoIHMuZGF0YSAmJiBzLmhhc0NvbnRlbnQgJiYgcy5jb250ZW50VHlwZSAhPT0gZmFsc2UgfHwgb3B0aW9ucy5jb250ZW50VHlwZSApIHtcblx0XHRcdGpxWEhSLnNldFJlcXVlc3RIZWFkZXIoIFwiQ29udGVudC1UeXBlXCIsIHMuY29udGVudFR5cGUgKTtcblx0XHR9XG5cblx0XHQvLyBTZXQgdGhlIEFjY2VwdHMgaGVhZGVyIGZvciB0aGUgc2VydmVyLCBkZXBlbmRpbmcgb24gdGhlIGRhdGFUeXBlXG5cdFx0anFYSFIuc2V0UmVxdWVzdEhlYWRlcihcblx0XHRcdFwiQWNjZXB0XCIsXG5cdFx0XHRzLmRhdGFUeXBlc1sgMCBdICYmIHMuYWNjZXB0c1sgcy5kYXRhVHlwZXNbIDAgXSBdID9cblx0XHRcdFx0cy5hY2NlcHRzWyBzLmRhdGFUeXBlc1sgMCBdIF0gK1xuXHRcdFx0XHRcdCggcy5kYXRhVHlwZXNbIDAgXSAhPT0gXCIqXCIgPyBcIiwgXCIgKyBhbGxUeXBlcyArIFwiOyBxPTAuMDFcIiA6IFwiXCIgKSA6XG5cdFx0XHRcdHMuYWNjZXB0c1sgXCIqXCIgXVxuXHRcdCk7XG5cblx0XHQvLyBDaGVjayBmb3IgaGVhZGVycyBvcHRpb25cblx0XHRmb3IgKCBpIGluIHMuaGVhZGVycyApIHtcblx0XHRcdGpxWEhSLnNldFJlcXVlc3RIZWFkZXIoIGksIHMuaGVhZGVyc1sgaSBdICk7XG5cdFx0fVxuXG5cdFx0Ly8gQWxsb3cgY3VzdG9tIGhlYWRlcnMvbWltZXR5cGVzIGFuZCBlYXJseSBhYm9ydFxuXHRcdGlmICggcy5iZWZvcmVTZW5kICYmXG5cdFx0XHQoIHMuYmVmb3JlU2VuZC5jYWxsKCBjYWxsYmFja0NvbnRleHQsIGpxWEhSLCBzICkgPT09IGZhbHNlIHx8IGNvbXBsZXRlZCApICkge1xuXG5cdFx0XHQvLyBBYm9ydCBpZiBub3QgZG9uZSBhbHJlYWR5IGFuZCByZXR1cm5cblx0XHRcdHJldHVybiBqcVhIUi5hYm9ydCgpO1xuXHRcdH1cblxuXHRcdC8vIEFib3J0aW5nIGlzIG5vIGxvbmdlciBhIGNhbmNlbGxhdGlvblxuXHRcdHN0ckFib3J0ID0gXCJhYm9ydFwiO1xuXG5cdFx0Ly8gSW5zdGFsbCBjYWxsYmFja3Mgb24gZGVmZXJyZWRzXG5cdFx0Y29tcGxldGVEZWZlcnJlZC5hZGQoIHMuY29tcGxldGUgKTtcblx0XHRqcVhIUi5kb25lKCBzLnN1Y2Nlc3MgKTtcblx0XHRqcVhIUi5mYWlsKCBzLmVycm9yICk7XG5cblx0XHQvLyBHZXQgdHJhbnNwb3J0XG5cdFx0dHJhbnNwb3J0ID0gaW5zcGVjdFByZWZpbHRlcnNPclRyYW5zcG9ydHMoIHRyYW5zcG9ydHMsIHMsIG9wdGlvbnMsIGpxWEhSICk7XG5cblx0XHQvLyBJZiBubyB0cmFuc3BvcnQsIHdlIGF1dG8tYWJvcnRcblx0XHRpZiAoICF0cmFuc3BvcnQgKSB7XG5cdFx0XHRkb25lKCAtMSwgXCJObyBUcmFuc3BvcnRcIiApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRqcVhIUi5yZWFkeVN0YXRlID0gMTtcblxuXHRcdFx0Ly8gU2VuZCBnbG9iYWwgZXZlbnRcblx0XHRcdGlmICggZmlyZUdsb2JhbHMgKSB7XG5cdFx0XHRcdGdsb2JhbEV2ZW50Q29udGV4dC50cmlnZ2VyKCBcImFqYXhTZW5kXCIsIFsganFYSFIsIHMgXSApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBJZiByZXF1ZXN0IHdhcyBhYm9ydGVkIGluc2lkZSBhamF4U2VuZCwgc3RvcCB0aGVyZVxuXHRcdFx0aWYgKCBjb21wbGV0ZWQgKSB7XG5cdFx0XHRcdHJldHVybiBqcVhIUjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gVGltZW91dFxuXHRcdFx0aWYgKCBzLmFzeW5jICYmIHMudGltZW91dCA+IDAgKSB7XG5cdFx0XHRcdHRpbWVvdXRUaW1lciA9IHdpbmRvdy5zZXRUaW1lb3V0KCBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRqcVhIUi5hYm9ydCggXCJ0aW1lb3V0XCIgKTtcblx0XHRcdFx0fSwgcy50aW1lb3V0ICk7XG5cdFx0XHR9XG5cblx0XHRcdHRyeSB7XG5cdFx0XHRcdGNvbXBsZXRlZCA9IGZhbHNlO1xuXHRcdFx0XHR0cmFuc3BvcnQuc2VuZCggcmVxdWVzdEhlYWRlcnMsIGRvbmUgKTtcblx0XHRcdH0gY2F0Y2ggKCBlICkge1xuXG5cdFx0XHRcdC8vIFJldGhyb3cgcG9zdC1jb21wbGV0aW9uIGV4Y2VwdGlvbnNcblx0XHRcdFx0aWYgKCBjb21wbGV0ZWQgKSB7XG5cdFx0XHRcdFx0dGhyb3cgZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFByb3BhZ2F0ZSBvdGhlcnMgYXMgcmVzdWx0c1xuXHRcdFx0XHRkb25lKCAtMSwgZSApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIENhbGxiYWNrIGZvciB3aGVuIGV2ZXJ5dGhpbmcgaXMgZG9uZVxuXHRcdGZ1bmN0aW9uIGRvbmUoIHN0YXR1cywgbmF0aXZlU3RhdHVzVGV4dCwgcmVzcG9uc2VzLCBoZWFkZXJzICkge1xuXHRcdFx0dmFyIGlzU3VjY2Vzcywgc3VjY2VzcywgZXJyb3IsIHJlc3BvbnNlLCBtb2RpZmllZCxcblx0XHRcdFx0c3RhdHVzVGV4dCA9IG5hdGl2ZVN0YXR1c1RleHQ7XG5cblx0XHRcdC8vIElnbm9yZSByZXBlYXQgaW52b2NhdGlvbnNcblx0XHRcdGlmICggY29tcGxldGVkICkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGNvbXBsZXRlZCA9IHRydWU7XG5cblx0XHRcdC8vIENsZWFyIHRpbWVvdXQgaWYgaXQgZXhpc3RzXG5cdFx0XHRpZiAoIHRpbWVvdXRUaW1lciApIHtcblx0XHRcdFx0d2luZG93LmNsZWFyVGltZW91dCggdGltZW91dFRpbWVyICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIERlcmVmZXJlbmNlIHRyYW5zcG9ydCBmb3IgZWFybHkgZ2FyYmFnZSBjb2xsZWN0aW9uXG5cdFx0XHQvLyAobm8gbWF0dGVyIGhvdyBsb25nIHRoZSBqcVhIUiBvYmplY3Qgd2lsbCBiZSB1c2VkKVxuXHRcdFx0dHJhbnNwb3J0ID0gdW5kZWZpbmVkO1xuXG5cdFx0XHQvLyBDYWNoZSByZXNwb25zZSBoZWFkZXJzXG5cdFx0XHRyZXNwb25zZUhlYWRlcnNTdHJpbmcgPSBoZWFkZXJzIHx8IFwiXCI7XG5cblx0XHRcdC8vIFNldCByZWFkeVN0YXRlXG5cdFx0XHRqcVhIUi5yZWFkeVN0YXRlID0gc3RhdHVzID4gMCA/IDQgOiAwO1xuXG5cdFx0XHQvLyBEZXRlcm1pbmUgaWYgc3VjY2Vzc2Z1bFxuXHRcdFx0aXNTdWNjZXNzID0gc3RhdHVzID49IDIwMCAmJiBzdGF0dXMgPCAzMDAgfHwgc3RhdHVzID09PSAzMDQ7XG5cblx0XHRcdC8vIEdldCByZXNwb25zZSBkYXRhXG5cdFx0XHRpZiAoIHJlc3BvbnNlcyApIHtcblx0XHRcdFx0cmVzcG9uc2UgPSBhamF4SGFuZGxlUmVzcG9uc2VzKCBzLCBqcVhIUiwgcmVzcG9uc2VzICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIENvbnZlcnQgbm8gbWF0dGVyIHdoYXQgKHRoYXQgd2F5IHJlc3BvbnNlWFhYIGZpZWxkcyBhcmUgYWx3YXlzIHNldClcblx0XHRcdHJlc3BvbnNlID0gYWpheENvbnZlcnQoIHMsIHJlc3BvbnNlLCBqcVhIUiwgaXNTdWNjZXNzICk7XG5cblx0XHRcdC8vIElmIHN1Y2Nlc3NmdWwsIGhhbmRsZSB0eXBlIGNoYWluaW5nXG5cdFx0XHRpZiAoIGlzU3VjY2VzcyApIHtcblxuXHRcdFx0XHQvLyBTZXQgdGhlIElmLU1vZGlmaWVkLVNpbmNlIGFuZC9vciBJZi1Ob25lLU1hdGNoIGhlYWRlciwgaWYgaW4gaWZNb2RpZmllZCBtb2RlLlxuXHRcdFx0XHRpZiAoIHMuaWZNb2RpZmllZCApIHtcblx0XHRcdFx0XHRtb2RpZmllZCA9IGpxWEhSLmdldFJlc3BvbnNlSGVhZGVyKCBcIkxhc3QtTW9kaWZpZWRcIiApO1xuXHRcdFx0XHRcdGlmICggbW9kaWZpZWQgKSB7XG5cdFx0XHRcdFx0XHRqUXVlcnkubGFzdE1vZGlmaWVkWyBjYWNoZVVSTCBdID0gbW9kaWZpZWQ7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdG1vZGlmaWVkID0ganFYSFIuZ2V0UmVzcG9uc2VIZWFkZXIoIFwiZXRhZ1wiICk7XG5cdFx0XHRcdFx0aWYgKCBtb2RpZmllZCApIHtcblx0XHRcdFx0XHRcdGpRdWVyeS5ldGFnWyBjYWNoZVVSTCBdID0gbW9kaWZpZWQ7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gaWYgbm8gY29udGVudFxuXHRcdFx0XHRpZiAoIHN0YXR1cyA9PT0gMjA0IHx8IHMudHlwZSA9PT0gXCJIRUFEXCIgKSB7XG5cdFx0XHRcdFx0c3RhdHVzVGV4dCA9IFwibm9jb250ZW50XCI7XG5cblx0XHRcdFx0Ly8gaWYgbm90IG1vZGlmaWVkXG5cdFx0XHRcdH0gZWxzZSBpZiAoIHN0YXR1cyA9PT0gMzA0ICkge1xuXHRcdFx0XHRcdHN0YXR1c1RleHQgPSBcIm5vdG1vZGlmaWVkXCI7XG5cblx0XHRcdFx0Ly8gSWYgd2UgaGF2ZSBkYXRhLCBsZXQncyBjb252ZXJ0IGl0XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0c3RhdHVzVGV4dCA9IHJlc3BvbnNlLnN0YXRlO1xuXHRcdFx0XHRcdHN1Y2Nlc3MgPSByZXNwb25zZS5kYXRhO1xuXHRcdFx0XHRcdGVycm9yID0gcmVzcG9uc2UuZXJyb3I7XG5cdFx0XHRcdFx0aXNTdWNjZXNzID0gIWVycm9yO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdC8vIEV4dHJhY3QgZXJyb3IgZnJvbSBzdGF0dXNUZXh0IGFuZCBub3JtYWxpemUgZm9yIG5vbi1hYm9ydHNcblx0XHRcdFx0ZXJyb3IgPSBzdGF0dXNUZXh0O1xuXHRcdFx0XHRpZiAoIHN0YXR1cyB8fCAhc3RhdHVzVGV4dCApIHtcblx0XHRcdFx0XHRzdGF0dXNUZXh0ID0gXCJlcnJvclwiO1xuXHRcdFx0XHRcdGlmICggc3RhdHVzIDwgMCApIHtcblx0XHRcdFx0XHRcdHN0YXR1cyA9IDA7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIFNldCBkYXRhIGZvciB0aGUgZmFrZSB4aHIgb2JqZWN0XG5cdFx0XHRqcVhIUi5zdGF0dXMgPSBzdGF0dXM7XG5cdFx0XHRqcVhIUi5zdGF0dXNUZXh0ID0gKCBuYXRpdmVTdGF0dXNUZXh0IHx8IHN0YXR1c1RleHQgKSArIFwiXCI7XG5cblx0XHRcdC8vIFN1Y2Nlc3MvRXJyb3Jcblx0XHRcdGlmICggaXNTdWNjZXNzICkge1xuXHRcdFx0XHRkZWZlcnJlZC5yZXNvbHZlV2l0aCggY2FsbGJhY2tDb250ZXh0LCBbIHN1Y2Nlc3MsIHN0YXR1c1RleHQsIGpxWEhSIF0gKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGRlZmVycmVkLnJlamVjdFdpdGgoIGNhbGxiYWNrQ29udGV4dCwgWyBqcVhIUiwgc3RhdHVzVGV4dCwgZXJyb3IgXSApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBTdGF0dXMtZGVwZW5kZW50IGNhbGxiYWNrc1xuXHRcdFx0anFYSFIuc3RhdHVzQ29kZSggc3RhdHVzQ29kZSApO1xuXHRcdFx0c3RhdHVzQ29kZSA9IHVuZGVmaW5lZDtcblxuXHRcdFx0aWYgKCBmaXJlR2xvYmFscyApIHtcblx0XHRcdFx0Z2xvYmFsRXZlbnRDb250ZXh0LnRyaWdnZXIoIGlzU3VjY2VzcyA/IFwiYWpheFN1Y2Nlc3NcIiA6IFwiYWpheEVycm9yXCIsXG5cdFx0XHRcdFx0WyBqcVhIUiwgcywgaXNTdWNjZXNzID8gc3VjY2VzcyA6IGVycm9yIF0gKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQ29tcGxldGVcblx0XHRcdGNvbXBsZXRlRGVmZXJyZWQuZmlyZVdpdGgoIGNhbGxiYWNrQ29udGV4dCwgWyBqcVhIUiwgc3RhdHVzVGV4dCBdICk7XG5cblx0XHRcdGlmICggZmlyZUdsb2JhbHMgKSB7XG5cdFx0XHRcdGdsb2JhbEV2ZW50Q29udGV4dC50cmlnZ2VyKCBcImFqYXhDb21wbGV0ZVwiLCBbIGpxWEhSLCBzIF0gKTtcblxuXHRcdFx0XHQvLyBIYW5kbGUgdGhlIGdsb2JhbCBBSkFYIGNvdW50ZXJcblx0XHRcdFx0aWYgKCAhKCAtLWpRdWVyeS5hY3RpdmUgKSApIHtcblx0XHRcdFx0XHRqUXVlcnkuZXZlbnQudHJpZ2dlciggXCJhamF4U3RvcFwiICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4ganFYSFI7XG5cdH0sXG5cblx0Z2V0SlNPTjogZnVuY3Rpb24oIHVybCwgZGF0YSwgY2FsbGJhY2sgKSB7XG5cdFx0cmV0dXJuIGpRdWVyeS5nZXQoIHVybCwgZGF0YSwgY2FsbGJhY2ssIFwianNvblwiICk7XG5cdH0sXG5cblx0Z2V0U2NyaXB0OiBmdW5jdGlvbiggdXJsLCBjYWxsYmFjayApIHtcblx0XHRyZXR1cm4galF1ZXJ5LmdldCggdXJsLCB1bmRlZmluZWQsIGNhbGxiYWNrLCBcInNjcmlwdFwiICk7XG5cdH1cbn0gKTtcblxualF1ZXJ5LmVhY2goIFsgXCJnZXRcIiwgXCJwb3N0XCIgXSwgZnVuY3Rpb24oIGksIG1ldGhvZCApIHtcblx0alF1ZXJ5WyBtZXRob2QgXSA9IGZ1bmN0aW9uKCB1cmwsIGRhdGEsIGNhbGxiYWNrLCB0eXBlICkge1xuXG5cdFx0Ly8gU2hpZnQgYXJndW1lbnRzIGlmIGRhdGEgYXJndW1lbnQgd2FzIG9taXR0ZWRcblx0XHRpZiAoIGlzRnVuY3Rpb24oIGRhdGEgKSApIHtcblx0XHRcdHR5cGUgPSB0eXBlIHx8IGNhbGxiYWNrO1xuXHRcdFx0Y2FsbGJhY2sgPSBkYXRhO1xuXHRcdFx0ZGF0YSA9IHVuZGVmaW5lZDtcblx0XHR9XG5cblx0XHQvLyBUaGUgdXJsIGNhbiBiZSBhbiBvcHRpb25zIG9iamVjdCAod2hpY2ggdGhlbiBtdXN0IGhhdmUgLnVybClcblx0XHRyZXR1cm4galF1ZXJ5LmFqYXgoIGpRdWVyeS5leHRlbmQoIHtcblx0XHRcdHVybDogdXJsLFxuXHRcdFx0dHlwZTogbWV0aG9kLFxuXHRcdFx0ZGF0YVR5cGU6IHR5cGUsXG5cdFx0XHRkYXRhOiBkYXRhLFxuXHRcdFx0c3VjY2VzczogY2FsbGJhY2tcblx0XHR9LCBqUXVlcnkuaXNQbGFpbk9iamVjdCggdXJsICkgJiYgdXJsICkgKTtcblx0fTtcbn0gKTtcblxuXG5qUXVlcnkuX2V2YWxVcmwgPSBmdW5jdGlvbiggdXJsLCBvcHRpb25zICkge1xuXHRyZXR1cm4galF1ZXJ5LmFqYXgoIHtcblx0XHR1cmw6IHVybCxcblxuXHRcdC8vIE1ha2UgdGhpcyBleHBsaWNpdCwgc2luY2UgdXNlciBjYW4gb3ZlcnJpZGUgdGhpcyB0aHJvdWdoIGFqYXhTZXR1cCAoIzExMjY0KVxuXHRcdHR5cGU6IFwiR0VUXCIsXG5cdFx0ZGF0YVR5cGU6IFwic2NyaXB0XCIsXG5cdFx0Y2FjaGU6IHRydWUsXG5cdFx0YXN5bmM6IGZhbHNlLFxuXHRcdGdsb2JhbDogZmFsc2UsXG5cblx0XHQvLyBPbmx5IGV2YWx1YXRlIHRoZSByZXNwb25zZSBpZiBpdCBpcyBzdWNjZXNzZnVsIChnaC00MTI2KVxuXHRcdC8vIGRhdGFGaWx0ZXIgaXMgbm90IGludm9rZWQgZm9yIGZhaWx1cmUgcmVzcG9uc2VzLCBzbyB1c2luZyBpdCBpbnN0ZWFkXG5cdFx0Ly8gb2YgdGhlIGRlZmF1bHQgY29udmVydGVyIGlzIGtsdWRneSBidXQgaXQgd29ya3MuXG5cdFx0Y29udmVydGVyczoge1xuXHRcdFx0XCJ0ZXh0IHNjcmlwdFwiOiBmdW5jdGlvbigpIHt9XG5cdFx0fSxcblx0XHRkYXRhRmlsdGVyOiBmdW5jdGlvbiggcmVzcG9uc2UgKSB7XG5cdFx0XHRqUXVlcnkuZ2xvYmFsRXZhbCggcmVzcG9uc2UsIG9wdGlvbnMgKTtcblx0XHR9XG5cdH0gKTtcbn07XG5cblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHR3cmFwQWxsOiBmdW5jdGlvbiggaHRtbCApIHtcblx0XHR2YXIgd3JhcDtcblxuXHRcdGlmICggdGhpc1sgMCBdICkge1xuXHRcdFx0aWYgKCBpc0Z1bmN0aW9uKCBodG1sICkgKSB7XG5cdFx0XHRcdGh0bWwgPSBodG1sLmNhbGwoIHRoaXNbIDAgXSApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBUaGUgZWxlbWVudHMgdG8gd3JhcCB0aGUgdGFyZ2V0IGFyb3VuZFxuXHRcdFx0d3JhcCA9IGpRdWVyeSggaHRtbCwgdGhpc1sgMCBdLm93bmVyRG9jdW1lbnQgKS5lcSggMCApLmNsb25lKCB0cnVlICk7XG5cblx0XHRcdGlmICggdGhpc1sgMCBdLnBhcmVudE5vZGUgKSB7XG5cdFx0XHRcdHdyYXAuaW5zZXJ0QmVmb3JlKCB0aGlzWyAwIF0gKTtcblx0XHRcdH1cblxuXHRcdFx0d3JhcC5tYXAoIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHR2YXIgZWxlbSA9IHRoaXM7XG5cblx0XHRcdFx0d2hpbGUgKCBlbGVtLmZpcnN0RWxlbWVudENoaWxkICkge1xuXHRcdFx0XHRcdGVsZW0gPSBlbGVtLmZpcnN0RWxlbWVudENoaWxkO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIGVsZW07XG5cdFx0XHR9ICkuYXBwZW5kKCB0aGlzICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0d3JhcElubmVyOiBmdW5jdGlvbiggaHRtbCApIHtcblx0XHRpZiAoIGlzRnVuY3Rpb24oIGh0bWwgKSApIHtcblx0XHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCBpICkge1xuXHRcdFx0XHRqUXVlcnkoIHRoaXMgKS53cmFwSW5uZXIoIGh0bWwuY2FsbCggdGhpcywgaSApICk7XG5cdFx0XHR9ICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgc2VsZiA9IGpRdWVyeSggdGhpcyApLFxuXHRcdFx0XHRjb250ZW50cyA9IHNlbGYuY29udGVudHMoKTtcblxuXHRcdFx0aWYgKCBjb250ZW50cy5sZW5ndGggKSB7XG5cdFx0XHRcdGNvbnRlbnRzLndyYXBBbGwoIGh0bWwgKTtcblxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0c2VsZi5hcHBlbmQoIGh0bWwgKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH0sXG5cblx0d3JhcDogZnVuY3Rpb24oIGh0bWwgKSB7XG5cdFx0dmFyIGh0bWxJc0Z1bmN0aW9uID0gaXNGdW5jdGlvbiggaHRtbCApO1xuXG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oIGkgKSB7XG5cdFx0XHRqUXVlcnkoIHRoaXMgKS53cmFwQWxsKCBodG1sSXNGdW5jdGlvbiA/IGh0bWwuY2FsbCggdGhpcywgaSApIDogaHRtbCApO1xuXHRcdH0gKTtcblx0fSxcblxuXHR1bndyYXA6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHR0aGlzLnBhcmVudCggc2VsZWN0b3IgKS5ub3QoIFwiYm9keVwiICkuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRqUXVlcnkoIHRoaXMgKS5yZXBsYWNlV2l0aCggdGhpcy5jaGlsZE5vZGVzICk7XG5cdFx0fSApO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG59ICk7XG5cblxualF1ZXJ5LmV4cHIucHNldWRvcy5oaWRkZW4gPSBmdW5jdGlvbiggZWxlbSApIHtcblx0cmV0dXJuICFqUXVlcnkuZXhwci5wc2V1ZG9zLnZpc2libGUoIGVsZW0gKTtcbn07XG5qUXVlcnkuZXhwci5wc2V1ZG9zLnZpc2libGUgPSBmdW5jdGlvbiggZWxlbSApIHtcblx0cmV0dXJuICEhKCBlbGVtLm9mZnNldFdpZHRoIHx8IGVsZW0ub2Zmc2V0SGVpZ2h0IHx8IGVsZW0uZ2V0Q2xpZW50UmVjdHMoKS5sZW5ndGggKTtcbn07XG5cblxuXG5cbmpRdWVyeS5hamF4U2V0dGluZ3MueGhyID0gZnVuY3Rpb24oKSB7XG5cdHRyeSB7XG5cdFx0cmV0dXJuIG5ldyB3aW5kb3cuWE1MSHR0cFJlcXVlc3QoKTtcblx0fSBjYXRjaCAoIGUgKSB7fVxufTtcblxudmFyIHhoclN1Y2Nlc3NTdGF0dXMgPSB7XG5cblx0XHQvLyBGaWxlIHByb3RvY29sIGFsd2F5cyB5aWVsZHMgc3RhdHVzIGNvZGUgMCwgYXNzdW1lIDIwMFxuXHRcdDA6IDIwMCxcblxuXHRcdC8vIFN1cHBvcnQ6IElFIDw9OSBvbmx5XG5cdFx0Ly8gIzE0NTA6IHNvbWV0aW1lcyBJRSByZXR1cm5zIDEyMjMgd2hlbiBpdCBzaG91bGQgYmUgMjA0XG5cdFx0MTIyMzogMjA0XG5cdH0sXG5cdHhoclN1cHBvcnRlZCA9IGpRdWVyeS5hamF4U2V0dGluZ3MueGhyKCk7XG5cbnN1cHBvcnQuY29ycyA9ICEheGhyU3VwcG9ydGVkICYmICggXCJ3aXRoQ3JlZGVudGlhbHNcIiBpbiB4aHJTdXBwb3J0ZWQgKTtcbnN1cHBvcnQuYWpheCA9IHhoclN1cHBvcnRlZCA9ICEheGhyU3VwcG9ydGVkO1xuXG5qUXVlcnkuYWpheFRyYW5zcG9ydCggZnVuY3Rpb24oIG9wdGlvbnMgKSB7XG5cdHZhciBjYWxsYmFjaywgZXJyb3JDYWxsYmFjaztcblxuXHQvLyBDcm9zcyBkb21haW4gb25seSBhbGxvd2VkIGlmIHN1cHBvcnRlZCB0aHJvdWdoIFhNTEh0dHBSZXF1ZXN0XG5cdGlmICggc3VwcG9ydC5jb3JzIHx8IHhoclN1cHBvcnRlZCAmJiAhb3B0aW9ucy5jcm9zc0RvbWFpbiApIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0c2VuZDogZnVuY3Rpb24oIGhlYWRlcnMsIGNvbXBsZXRlICkge1xuXHRcdFx0XHR2YXIgaSxcblx0XHRcdFx0XHR4aHIgPSBvcHRpb25zLnhocigpO1xuXG5cdFx0XHRcdHhoci5vcGVuKFxuXHRcdFx0XHRcdG9wdGlvbnMudHlwZSxcblx0XHRcdFx0XHRvcHRpb25zLnVybCxcblx0XHRcdFx0XHRvcHRpb25zLmFzeW5jLFxuXHRcdFx0XHRcdG9wdGlvbnMudXNlcm5hbWUsXG5cdFx0XHRcdFx0b3B0aW9ucy5wYXNzd29yZFxuXHRcdFx0XHQpO1xuXG5cdFx0XHRcdC8vIEFwcGx5IGN1c3RvbSBmaWVsZHMgaWYgcHJvdmlkZWRcblx0XHRcdFx0aWYgKCBvcHRpb25zLnhockZpZWxkcyApIHtcblx0XHRcdFx0XHRmb3IgKCBpIGluIG9wdGlvbnMueGhyRmllbGRzICkge1xuXHRcdFx0XHRcdFx0eGhyWyBpIF0gPSBvcHRpb25zLnhockZpZWxkc1sgaSBdO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIE92ZXJyaWRlIG1pbWUgdHlwZSBpZiBuZWVkZWRcblx0XHRcdFx0aWYgKCBvcHRpb25zLm1pbWVUeXBlICYmIHhoci5vdmVycmlkZU1pbWVUeXBlICkge1xuXHRcdFx0XHRcdHhoci5vdmVycmlkZU1pbWVUeXBlKCBvcHRpb25zLm1pbWVUeXBlICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBYLVJlcXVlc3RlZC1XaXRoIGhlYWRlclxuXHRcdFx0XHQvLyBGb3IgY3Jvc3MtZG9tYWluIHJlcXVlc3RzLCBzZWVpbmcgYXMgY29uZGl0aW9ucyBmb3IgYSBwcmVmbGlnaHQgYXJlXG5cdFx0XHRcdC8vIGFraW4gdG8gYSBqaWdzYXcgcHV6emxlLCB3ZSBzaW1wbHkgbmV2ZXIgc2V0IGl0IHRvIGJlIHN1cmUuXG5cdFx0XHRcdC8vIChpdCBjYW4gYWx3YXlzIGJlIHNldCBvbiBhIHBlci1yZXF1ZXN0IGJhc2lzIG9yIGV2ZW4gdXNpbmcgYWpheFNldHVwKVxuXHRcdFx0XHQvLyBGb3Igc2FtZS1kb21haW4gcmVxdWVzdHMsIHdvbid0IGNoYW5nZSBoZWFkZXIgaWYgYWxyZWFkeSBwcm92aWRlZC5cblx0XHRcdFx0aWYgKCAhb3B0aW9ucy5jcm9zc0RvbWFpbiAmJiAhaGVhZGVyc1sgXCJYLVJlcXVlc3RlZC1XaXRoXCIgXSApIHtcblx0XHRcdFx0XHRoZWFkZXJzWyBcIlgtUmVxdWVzdGVkLVdpdGhcIiBdID0gXCJYTUxIdHRwUmVxdWVzdFwiO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gU2V0IGhlYWRlcnNcblx0XHRcdFx0Zm9yICggaSBpbiBoZWFkZXJzICkge1xuXHRcdFx0XHRcdHhoci5zZXRSZXF1ZXN0SGVhZGVyKCBpLCBoZWFkZXJzWyBpIF0gKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIENhbGxiYWNrXG5cdFx0XHRcdGNhbGxiYWNrID0gZnVuY3Rpb24oIHR5cGUgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0aWYgKCBjYWxsYmFjayApIHtcblx0XHRcdFx0XHRcdFx0Y2FsbGJhY2sgPSBlcnJvckNhbGxiYWNrID0geGhyLm9ubG9hZCA9XG5cdFx0XHRcdFx0XHRcdFx0eGhyLm9uZXJyb3IgPSB4aHIub25hYm9ydCA9IHhoci5vbnRpbWVvdXQgPVxuXHRcdFx0XHRcdFx0XHRcdFx0eGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IG51bGw7XG5cblx0XHRcdFx0XHRcdFx0aWYgKCB0eXBlID09PSBcImFib3J0XCIgKSB7XG5cdFx0XHRcdFx0XHRcdFx0eGhyLmFib3J0KCk7XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoIHR5cGUgPT09IFwiZXJyb3JcIiApIHtcblxuXHRcdFx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDw9OSBvbmx5XG5cdFx0XHRcdFx0XHRcdFx0Ly8gT24gYSBtYW51YWwgbmF0aXZlIGFib3J0LCBJRTkgdGhyb3dzXG5cdFx0XHRcdFx0XHRcdFx0Ly8gZXJyb3JzIG9uIGFueSBwcm9wZXJ0eSBhY2Nlc3MgdGhhdCBpcyBub3QgcmVhZHlTdGF0ZVxuXHRcdFx0XHRcdFx0XHRcdGlmICggdHlwZW9mIHhoci5zdGF0dXMgIT09IFwibnVtYmVyXCIgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRjb21wbGV0ZSggMCwgXCJlcnJvclwiICk7XG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdGNvbXBsZXRlKFxuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIEZpbGU6IHByb3RvY29sIGFsd2F5cyB5aWVsZHMgc3RhdHVzIDA7IHNlZSAjODYwNSwgIzE0MjA3XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHhoci5zdGF0dXMsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHhoci5zdGF0dXNUZXh0XG5cdFx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRjb21wbGV0ZShcblx0XHRcdFx0XHRcdFx0XHRcdHhoclN1Y2Nlc3NTdGF0dXNbIHhoci5zdGF0dXMgXSB8fCB4aHIuc3RhdHVzLFxuXHRcdFx0XHRcdFx0XHRcdFx0eGhyLnN0YXR1c1RleHQsXG5cblx0XHRcdFx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDw9OSBvbmx5XG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBJRTkgaGFzIG5vIFhIUjIgYnV0IHRocm93cyBvbiBiaW5hcnkgKHRyYWMtMTE0MjYpXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBGb3IgWEhSMiBub24tdGV4dCwgbGV0IHRoZSBjYWxsZXIgaGFuZGxlIGl0IChnaC0yNDk4KVxuXHRcdFx0XHRcdFx0XHRcdFx0KCB4aHIucmVzcG9uc2VUeXBlIHx8IFwidGV4dFwiICkgIT09IFwidGV4dFwiICB8fFxuXHRcdFx0XHRcdFx0XHRcdFx0dHlwZW9mIHhoci5yZXNwb25zZVRleHQgIT09IFwic3RyaW5nXCIgP1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR7IGJpbmFyeTogeGhyLnJlc3BvbnNlIH0gOlxuXHRcdFx0XHRcdFx0XHRcdFx0XHR7IHRleHQ6IHhoci5yZXNwb25zZVRleHQgfSxcblx0XHRcdFx0XHRcdFx0XHRcdHhoci5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKVxuXHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9O1xuXHRcdFx0XHR9O1xuXG5cdFx0XHRcdC8vIExpc3RlbiB0byBldmVudHNcblx0XHRcdFx0eGhyLm9ubG9hZCA9IGNhbGxiYWNrKCk7XG5cdFx0XHRcdGVycm9yQ2FsbGJhY2sgPSB4aHIub25lcnJvciA9IHhoci5vbnRpbWVvdXQgPSBjYWxsYmFjayggXCJlcnJvclwiICk7XG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgOSBvbmx5XG5cdFx0XHRcdC8vIFVzZSBvbnJlYWR5c3RhdGVjaGFuZ2UgdG8gcmVwbGFjZSBvbmFib3J0XG5cdFx0XHRcdC8vIHRvIGhhbmRsZSB1bmNhdWdodCBhYm9ydHNcblx0XHRcdFx0aWYgKCB4aHIub25hYm9ydCAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRcdHhoci5vbmFib3J0ID0gZXJyb3JDYWxsYmFjaztcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oKSB7XG5cblx0XHRcdFx0XHRcdC8vIENoZWNrIHJlYWR5U3RhdGUgYmVmb3JlIHRpbWVvdXQgYXMgaXQgY2hhbmdlc1xuXHRcdFx0XHRcdFx0aWYgKCB4aHIucmVhZHlTdGF0ZSA9PT0gNCApIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBBbGxvdyBvbmVycm9yIHRvIGJlIGNhbGxlZCBmaXJzdCxcblx0XHRcdFx0XHRcdFx0Ly8gYnV0IHRoYXQgd2lsbCBub3QgaGFuZGxlIGEgbmF0aXZlIGFib3J0XG5cdFx0XHRcdFx0XHRcdC8vIEFsc28sIHNhdmUgZXJyb3JDYWxsYmFjayB0byBhIHZhcmlhYmxlXG5cdFx0XHRcdFx0XHRcdC8vIGFzIHhoci5vbmVycm9yIGNhbm5vdCBiZSBhY2Nlc3NlZFxuXHRcdFx0XHRcdFx0XHR3aW5kb3cuc2V0VGltZW91dCggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKCBjYWxsYmFjayApIHtcblx0XHRcdFx0XHRcdFx0XHRcdGVycm9yQ2FsbGJhY2soKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0gKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9O1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gQ3JlYXRlIHRoZSBhYm9ydCBjYWxsYmFja1xuXHRcdFx0XHRjYWxsYmFjayA9IGNhbGxiYWNrKCBcImFib3J0XCIgKTtcblxuXHRcdFx0XHR0cnkge1xuXG5cdFx0XHRcdFx0Ly8gRG8gc2VuZCB0aGUgcmVxdWVzdCAodGhpcyBtYXkgcmFpc2UgYW4gZXhjZXB0aW9uKVxuXHRcdFx0XHRcdHhoci5zZW5kKCBvcHRpb25zLmhhc0NvbnRlbnQgJiYgb3B0aW9ucy5kYXRhIHx8IG51bGwgKTtcblx0XHRcdFx0fSBjYXRjaCAoIGUgKSB7XG5cblx0XHRcdFx0XHQvLyAjMTQ2ODM6IE9ubHkgcmV0aHJvdyBpZiB0aGlzIGhhc24ndCBiZWVuIG5vdGlmaWVkIGFzIGFuIGVycm9yIHlldFxuXHRcdFx0XHRcdGlmICggY2FsbGJhY2sgKSB7XG5cdFx0XHRcdFx0XHR0aHJvdyBlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSxcblxuXHRcdFx0YWJvcnQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRpZiAoIGNhbGxiYWNrICkge1xuXHRcdFx0XHRcdGNhbGxiYWNrKCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9O1xuXHR9XG59ICk7XG5cblxuXG5cbi8vIFByZXZlbnQgYXV0by1leGVjdXRpb24gb2Ygc2NyaXB0cyB3aGVuIG5vIGV4cGxpY2l0IGRhdGFUeXBlIHdhcyBwcm92aWRlZCAoU2VlIGdoLTI0MzIpXG5qUXVlcnkuYWpheFByZWZpbHRlciggZnVuY3Rpb24oIHMgKSB7XG5cdGlmICggcy5jcm9zc0RvbWFpbiApIHtcblx0XHRzLmNvbnRlbnRzLnNjcmlwdCA9IGZhbHNlO1xuXHR9XG59ICk7XG5cbi8vIEluc3RhbGwgc2NyaXB0IGRhdGFUeXBlXG5qUXVlcnkuYWpheFNldHVwKCB7XG5cdGFjY2VwdHM6IHtcblx0XHRzY3JpcHQ6IFwidGV4dC9qYXZhc2NyaXB0LCBhcHBsaWNhdGlvbi9qYXZhc2NyaXB0LCBcIiArXG5cdFx0XHRcImFwcGxpY2F0aW9uL2VjbWFzY3JpcHQsIGFwcGxpY2F0aW9uL3gtZWNtYXNjcmlwdFwiXG5cdH0sXG5cdGNvbnRlbnRzOiB7XG5cdFx0c2NyaXB0OiAvXFxiKD86amF2YXxlY21hKXNjcmlwdFxcYi9cblx0fSxcblx0Y29udmVydGVyczoge1xuXHRcdFwidGV4dCBzY3JpcHRcIjogZnVuY3Rpb24oIHRleHQgKSB7XG5cdFx0XHRqUXVlcnkuZ2xvYmFsRXZhbCggdGV4dCApO1xuXHRcdFx0cmV0dXJuIHRleHQ7XG5cdFx0fVxuXHR9XG59ICk7XG5cbi8vIEhhbmRsZSBjYWNoZSdzIHNwZWNpYWwgY2FzZSBhbmQgY3Jvc3NEb21haW5cbmpRdWVyeS5hamF4UHJlZmlsdGVyKCBcInNjcmlwdFwiLCBmdW5jdGlvbiggcyApIHtcblx0aWYgKCBzLmNhY2hlID09PSB1bmRlZmluZWQgKSB7XG5cdFx0cy5jYWNoZSA9IGZhbHNlO1xuXHR9XG5cdGlmICggcy5jcm9zc0RvbWFpbiApIHtcblx0XHRzLnR5cGUgPSBcIkdFVFwiO1xuXHR9XG59ICk7XG5cbi8vIEJpbmQgc2NyaXB0IHRhZyBoYWNrIHRyYW5zcG9ydFxualF1ZXJ5LmFqYXhUcmFuc3BvcnQoIFwic2NyaXB0XCIsIGZ1bmN0aW9uKCBzICkge1xuXG5cdC8vIFRoaXMgdHJhbnNwb3J0IG9ubHkgZGVhbHMgd2l0aCBjcm9zcyBkb21haW4gb3IgZm9yY2VkLWJ5LWF0dHJzIHJlcXVlc3RzXG5cdGlmICggcy5jcm9zc0RvbWFpbiB8fCBzLnNjcmlwdEF0dHJzICkge1xuXHRcdHZhciBzY3JpcHQsIGNhbGxiYWNrO1xuXHRcdHJldHVybiB7XG5cdFx0XHRzZW5kOiBmdW5jdGlvbiggXywgY29tcGxldGUgKSB7XG5cdFx0XHRcdHNjcmlwdCA9IGpRdWVyeSggXCI8c2NyaXB0PlwiIClcblx0XHRcdFx0XHQuYXR0ciggcy5zY3JpcHRBdHRycyB8fCB7fSApXG5cdFx0XHRcdFx0LnByb3AoIHsgY2hhcnNldDogcy5zY3JpcHRDaGFyc2V0LCBzcmM6IHMudXJsIH0gKVxuXHRcdFx0XHRcdC5vbiggXCJsb2FkIGVycm9yXCIsIGNhbGxiYWNrID0gZnVuY3Rpb24oIGV2dCApIHtcblx0XHRcdFx0XHRcdHNjcmlwdC5yZW1vdmUoKTtcblx0XHRcdFx0XHRcdGNhbGxiYWNrID0gbnVsbDtcblx0XHRcdFx0XHRcdGlmICggZXZ0ICkge1xuXHRcdFx0XHRcdFx0XHRjb21wbGV0ZSggZXZ0LnR5cGUgPT09IFwiZXJyb3JcIiA/IDQwNCA6IDIwMCwgZXZ0LnR5cGUgKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9ICk7XG5cblx0XHRcdFx0Ly8gVXNlIG5hdGl2ZSBET00gbWFuaXB1bGF0aW9uIHRvIGF2b2lkIG91ciBkb21NYW5pcCBBSkFYIHRyaWNrZXJ5XG5cdFx0XHRcdGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoIHNjcmlwdFsgMCBdICk7XG5cdFx0XHR9LFxuXHRcdFx0YWJvcnQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRpZiAoIGNhbGxiYWNrICkge1xuXHRcdFx0XHRcdGNhbGxiYWNrKCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9O1xuXHR9XG59ICk7XG5cblxuXG5cbnZhciBvbGRDYWxsYmFja3MgPSBbXSxcblx0cmpzb25wID0gLyg9KVxcPyg/PSZ8JCl8XFw/XFw/LztcblxuLy8gRGVmYXVsdCBqc29ucCBzZXR0aW5nc1xualF1ZXJ5LmFqYXhTZXR1cCgge1xuXHRqc29ucDogXCJjYWxsYmFja1wiLFxuXHRqc29ucENhbGxiYWNrOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgY2FsbGJhY2sgPSBvbGRDYWxsYmFja3MucG9wKCkgfHwgKCBqUXVlcnkuZXhwYW5kbyArIFwiX1wiICsgKCBub25jZSsrICkgKTtcblx0XHR0aGlzWyBjYWxsYmFjayBdID0gdHJ1ZTtcblx0XHRyZXR1cm4gY2FsbGJhY2s7XG5cdH1cbn0gKTtcblxuLy8gRGV0ZWN0LCBub3JtYWxpemUgb3B0aW9ucyBhbmQgaW5zdGFsbCBjYWxsYmFja3MgZm9yIGpzb25wIHJlcXVlc3RzXG5qUXVlcnkuYWpheFByZWZpbHRlciggXCJqc29uIGpzb25wXCIsIGZ1bmN0aW9uKCBzLCBvcmlnaW5hbFNldHRpbmdzLCBqcVhIUiApIHtcblxuXHR2YXIgY2FsbGJhY2tOYW1lLCBvdmVyd3JpdHRlbiwgcmVzcG9uc2VDb250YWluZXIsXG5cdFx0anNvblByb3AgPSBzLmpzb25wICE9PSBmYWxzZSAmJiAoIHJqc29ucC50ZXN0KCBzLnVybCApID9cblx0XHRcdFwidXJsXCIgOlxuXHRcdFx0dHlwZW9mIHMuZGF0YSA9PT0gXCJzdHJpbmdcIiAmJlxuXHRcdFx0XHQoIHMuY29udGVudFR5cGUgfHwgXCJcIiApXG5cdFx0XHRcdFx0LmluZGV4T2YoIFwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkXCIgKSA9PT0gMCAmJlxuXHRcdFx0XHRyanNvbnAudGVzdCggcy5kYXRhICkgJiYgXCJkYXRhXCJcblx0XHQpO1xuXG5cdC8vIEhhbmRsZSBpZmYgdGhlIGV4cGVjdGVkIGRhdGEgdHlwZSBpcyBcImpzb25wXCIgb3Igd2UgaGF2ZSBhIHBhcmFtZXRlciB0byBzZXRcblx0aWYgKCBqc29uUHJvcCB8fCBzLmRhdGFUeXBlc1sgMCBdID09PSBcImpzb25wXCIgKSB7XG5cblx0XHQvLyBHZXQgY2FsbGJhY2sgbmFtZSwgcmVtZW1iZXJpbmcgcHJlZXhpc3RpbmcgdmFsdWUgYXNzb2NpYXRlZCB3aXRoIGl0XG5cdFx0Y2FsbGJhY2tOYW1lID0gcy5qc29ucENhbGxiYWNrID0gaXNGdW5jdGlvbiggcy5qc29ucENhbGxiYWNrICkgP1xuXHRcdFx0cy5qc29ucENhbGxiYWNrKCkgOlxuXHRcdFx0cy5qc29ucENhbGxiYWNrO1xuXG5cdFx0Ly8gSW5zZXJ0IGNhbGxiYWNrIGludG8gdXJsIG9yIGZvcm0gZGF0YVxuXHRcdGlmICgganNvblByb3AgKSB7XG5cdFx0XHRzWyBqc29uUHJvcCBdID0gc1sganNvblByb3AgXS5yZXBsYWNlKCByanNvbnAsIFwiJDFcIiArIGNhbGxiYWNrTmFtZSApO1xuXHRcdH0gZWxzZSBpZiAoIHMuanNvbnAgIT09IGZhbHNlICkge1xuXHRcdFx0cy51cmwgKz0gKCBycXVlcnkudGVzdCggcy51cmwgKSA/IFwiJlwiIDogXCI/XCIgKSArIHMuanNvbnAgKyBcIj1cIiArIGNhbGxiYWNrTmFtZTtcblx0XHR9XG5cblx0XHQvLyBVc2UgZGF0YSBjb252ZXJ0ZXIgdG8gcmV0cmlldmUganNvbiBhZnRlciBzY3JpcHQgZXhlY3V0aW9uXG5cdFx0cy5jb252ZXJ0ZXJzWyBcInNjcmlwdCBqc29uXCIgXSA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0aWYgKCAhcmVzcG9uc2VDb250YWluZXIgKSB7XG5cdFx0XHRcdGpRdWVyeS5lcnJvciggY2FsbGJhY2tOYW1lICsgXCIgd2FzIG5vdCBjYWxsZWRcIiApO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHJlc3BvbnNlQ29udGFpbmVyWyAwIF07XG5cdFx0fTtcblxuXHRcdC8vIEZvcmNlIGpzb24gZGF0YVR5cGVcblx0XHRzLmRhdGFUeXBlc1sgMCBdID0gXCJqc29uXCI7XG5cblx0XHQvLyBJbnN0YWxsIGNhbGxiYWNrXG5cdFx0b3ZlcndyaXR0ZW4gPSB3aW5kb3dbIGNhbGxiYWNrTmFtZSBdO1xuXHRcdHdpbmRvd1sgY2FsbGJhY2tOYW1lIF0gPSBmdW5jdGlvbigpIHtcblx0XHRcdHJlc3BvbnNlQ29udGFpbmVyID0gYXJndW1lbnRzO1xuXHRcdH07XG5cblx0XHQvLyBDbGVhbi11cCBmdW5jdGlvbiAoZmlyZXMgYWZ0ZXIgY29udmVydGVycylcblx0XHRqcVhIUi5hbHdheXMoIGZ1bmN0aW9uKCkge1xuXG5cdFx0XHQvLyBJZiBwcmV2aW91cyB2YWx1ZSBkaWRuJ3QgZXhpc3QgLSByZW1vdmUgaXRcblx0XHRcdGlmICggb3ZlcndyaXR0ZW4gPT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0alF1ZXJ5KCB3aW5kb3cgKS5yZW1vdmVQcm9wKCBjYWxsYmFja05hbWUgKTtcblxuXHRcdFx0Ly8gT3RoZXJ3aXNlIHJlc3RvcmUgcHJlZXhpc3RpbmcgdmFsdWVcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHdpbmRvd1sgY2FsbGJhY2tOYW1lIF0gPSBvdmVyd3JpdHRlbjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU2F2ZSBiYWNrIGFzIGZyZWVcblx0XHRcdGlmICggc1sgY2FsbGJhY2tOYW1lIF0gKSB7XG5cblx0XHRcdFx0Ly8gTWFrZSBzdXJlIHRoYXQgcmUtdXNpbmcgdGhlIG9wdGlvbnMgZG9lc24ndCBzY3JldyB0aGluZ3MgYXJvdW5kXG5cdFx0XHRcdHMuanNvbnBDYWxsYmFjayA9IG9yaWdpbmFsU2V0dGluZ3MuanNvbnBDYWxsYmFjaztcblxuXHRcdFx0XHQvLyBTYXZlIHRoZSBjYWxsYmFjayBuYW1lIGZvciBmdXR1cmUgdXNlXG5cdFx0XHRcdG9sZENhbGxiYWNrcy5wdXNoKCBjYWxsYmFja05hbWUgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQ2FsbCBpZiBpdCB3YXMgYSBmdW5jdGlvbiBhbmQgd2UgaGF2ZSBhIHJlc3BvbnNlXG5cdFx0XHRpZiAoIHJlc3BvbnNlQ29udGFpbmVyICYmIGlzRnVuY3Rpb24oIG92ZXJ3cml0dGVuICkgKSB7XG5cdFx0XHRcdG92ZXJ3cml0dGVuKCByZXNwb25zZUNvbnRhaW5lclsgMCBdICk7XG5cdFx0XHR9XG5cblx0XHRcdHJlc3BvbnNlQ29udGFpbmVyID0gb3ZlcndyaXR0ZW4gPSB1bmRlZmluZWQ7XG5cdFx0fSApO1xuXG5cdFx0Ly8gRGVsZWdhdGUgdG8gc2NyaXB0XG5cdFx0cmV0dXJuIFwic2NyaXB0XCI7XG5cdH1cbn0gKTtcblxuXG5cblxuLy8gU3VwcG9ydDogU2FmYXJpIDggb25seVxuLy8gSW4gU2FmYXJpIDggZG9jdW1lbnRzIGNyZWF0ZWQgdmlhIGRvY3VtZW50LmltcGxlbWVudGF0aW9uLmNyZWF0ZUhUTUxEb2N1bWVudFxuLy8gY29sbGFwc2Ugc2libGluZyBmb3JtczogdGhlIHNlY29uZCBvbmUgYmVjb21lcyBhIGNoaWxkIG9mIHRoZSBmaXJzdCBvbmUuXG4vLyBCZWNhdXNlIG9mIHRoYXQsIHRoaXMgc2VjdXJpdHkgbWVhc3VyZSBoYXMgdG8gYmUgZGlzYWJsZWQgaW4gU2FmYXJpIDguXG4vLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM3MzM3XG5zdXBwb3J0LmNyZWF0ZUhUTUxEb2N1bWVudCA9ICggZnVuY3Rpb24oKSB7XG5cdHZhciBib2R5ID0gZG9jdW1lbnQuaW1wbGVtZW50YXRpb24uY3JlYXRlSFRNTERvY3VtZW50KCBcIlwiICkuYm9keTtcblx0Ym9keS5pbm5lckhUTUwgPSBcIjxmb3JtPjwvZm9ybT48Zm9ybT48L2Zvcm0+XCI7XG5cdHJldHVybiBib2R5LmNoaWxkTm9kZXMubGVuZ3RoID09PSAyO1xufSApKCk7XG5cblxuLy8gQXJndW1lbnQgXCJkYXRhXCIgc2hvdWxkIGJlIHN0cmluZyBvZiBodG1sXG4vLyBjb250ZXh0IChvcHRpb25hbCk6IElmIHNwZWNpZmllZCwgdGhlIGZyYWdtZW50IHdpbGwgYmUgY3JlYXRlZCBpbiB0aGlzIGNvbnRleHQsXG4vLyBkZWZhdWx0cyB0byBkb2N1bWVudFxuLy8ga2VlcFNjcmlwdHMgKG9wdGlvbmFsKTogSWYgdHJ1ZSwgd2lsbCBpbmNsdWRlIHNjcmlwdHMgcGFzc2VkIGluIHRoZSBodG1sIHN0cmluZ1xualF1ZXJ5LnBhcnNlSFRNTCA9IGZ1bmN0aW9uKCBkYXRhLCBjb250ZXh0LCBrZWVwU2NyaXB0cyApIHtcblx0aWYgKCB0eXBlb2YgZGF0YSAhPT0gXCJzdHJpbmdcIiApIHtcblx0XHRyZXR1cm4gW107XG5cdH1cblx0aWYgKCB0eXBlb2YgY29udGV4dCA9PT0gXCJib29sZWFuXCIgKSB7XG5cdFx0a2VlcFNjcmlwdHMgPSBjb250ZXh0O1xuXHRcdGNvbnRleHQgPSBmYWxzZTtcblx0fVxuXG5cdHZhciBiYXNlLCBwYXJzZWQsIHNjcmlwdHM7XG5cblx0aWYgKCAhY29udGV4dCApIHtcblxuXHRcdC8vIFN0b3Agc2NyaXB0cyBvciBpbmxpbmUgZXZlbnQgaGFuZGxlcnMgZnJvbSBiZWluZyBleGVjdXRlZCBpbW1lZGlhdGVseVxuXHRcdC8vIGJ5IHVzaW5nIGRvY3VtZW50LmltcGxlbWVudGF0aW9uXG5cdFx0aWYgKCBzdXBwb3J0LmNyZWF0ZUhUTUxEb2N1bWVudCApIHtcblx0XHRcdGNvbnRleHQgPSBkb2N1bWVudC5pbXBsZW1lbnRhdGlvbi5jcmVhdGVIVE1MRG9jdW1lbnQoIFwiXCIgKTtcblxuXHRcdFx0Ly8gU2V0IHRoZSBiYXNlIGhyZWYgZm9yIHRoZSBjcmVhdGVkIGRvY3VtZW50XG5cdFx0XHQvLyBzbyBhbnkgcGFyc2VkIGVsZW1lbnRzIHdpdGggVVJMc1xuXHRcdFx0Ly8gYXJlIGJhc2VkIG9uIHRoZSBkb2N1bWVudCdzIFVSTCAoZ2gtMjk2NSlcblx0XHRcdGJhc2UgPSBjb250ZXh0LmNyZWF0ZUVsZW1lbnQoIFwiYmFzZVwiICk7XG5cdFx0XHRiYXNlLmhyZWYgPSBkb2N1bWVudC5sb2NhdGlvbi5ocmVmO1xuXHRcdFx0Y29udGV4dC5oZWFkLmFwcGVuZENoaWxkKCBiYXNlICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnRleHQgPSBkb2N1bWVudDtcblx0XHR9XG5cdH1cblxuXHRwYXJzZWQgPSByc2luZ2xlVGFnLmV4ZWMoIGRhdGEgKTtcblx0c2NyaXB0cyA9ICFrZWVwU2NyaXB0cyAmJiBbXTtcblxuXHQvLyBTaW5nbGUgdGFnXG5cdGlmICggcGFyc2VkICkge1xuXHRcdHJldHVybiBbIGNvbnRleHQuY3JlYXRlRWxlbWVudCggcGFyc2VkWyAxIF0gKSBdO1xuXHR9XG5cblx0cGFyc2VkID0gYnVpbGRGcmFnbWVudCggWyBkYXRhIF0sIGNvbnRleHQsIHNjcmlwdHMgKTtcblxuXHRpZiAoIHNjcmlwdHMgJiYgc2NyaXB0cy5sZW5ndGggKSB7XG5cdFx0alF1ZXJ5KCBzY3JpcHRzICkucmVtb3ZlKCk7XG5cdH1cblxuXHRyZXR1cm4galF1ZXJ5Lm1lcmdlKCBbXSwgcGFyc2VkLmNoaWxkTm9kZXMgKTtcbn07XG5cblxuLyoqXG4gKiBMb2FkIGEgdXJsIGludG8gYSBwYWdlXG4gKi9cbmpRdWVyeS5mbi5sb2FkID0gZnVuY3Rpb24oIHVybCwgcGFyYW1zLCBjYWxsYmFjayApIHtcblx0dmFyIHNlbGVjdG9yLCB0eXBlLCByZXNwb25zZSxcblx0XHRzZWxmID0gdGhpcyxcblx0XHRvZmYgPSB1cmwuaW5kZXhPZiggXCIgXCIgKTtcblxuXHRpZiAoIG9mZiA+IC0xICkge1xuXHRcdHNlbGVjdG9yID0gc3RyaXBBbmRDb2xsYXBzZSggdXJsLnNsaWNlKCBvZmYgKSApO1xuXHRcdHVybCA9IHVybC5zbGljZSggMCwgb2ZmICk7XG5cdH1cblxuXHQvLyBJZiBpdCdzIGEgZnVuY3Rpb25cblx0aWYgKCBpc0Z1bmN0aW9uKCBwYXJhbXMgKSApIHtcblxuXHRcdC8vIFdlIGFzc3VtZSB0aGF0IGl0J3MgdGhlIGNhbGxiYWNrXG5cdFx0Y2FsbGJhY2sgPSBwYXJhbXM7XG5cdFx0cGFyYW1zID0gdW5kZWZpbmVkO1xuXG5cdC8vIE90aGVyd2lzZSwgYnVpbGQgYSBwYXJhbSBzdHJpbmdcblx0fSBlbHNlIGlmICggcGFyYW1zICYmIHR5cGVvZiBwYXJhbXMgPT09IFwib2JqZWN0XCIgKSB7XG5cdFx0dHlwZSA9IFwiUE9TVFwiO1xuXHR9XG5cblx0Ly8gSWYgd2UgaGF2ZSBlbGVtZW50cyB0byBtb2RpZnksIG1ha2UgdGhlIHJlcXVlc3Rcblx0aWYgKCBzZWxmLmxlbmd0aCA+IDAgKSB7XG5cdFx0alF1ZXJ5LmFqYXgoIHtcblx0XHRcdHVybDogdXJsLFxuXG5cdFx0XHQvLyBJZiBcInR5cGVcIiB2YXJpYWJsZSBpcyB1bmRlZmluZWQsIHRoZW4gXCJHRVRcIiBtZXRob2Qgd2lsbCBiZSB1c2VkLlxuXHRcdFx0Ly8gTWFrZSB2YWx1ZSBvZiB0aGlzIGZpZWxkIGV4cGxpY2l0IHNpbmNlXG5cdFx0XHQvLyB1c2VyIGNhbiBvdmVycmlkZSBpdCB0aHJvdWdoIGFqYXhTZXR1cCBtZXRob2Rcblx0XHRcdHR5cGU6IHR5cGUgfHwgXCJHRVRcIixcblx0XHRcdGRhdGFUeXBlOiBcImh0bWxcIixcblx0XHRcdGRhdGE6IHBhcmFtc1xuXHRcdH0gKS5kb25lKCBmdW5jdGlvbiggcmVzcG9uc2VUZXh0ICkge1xuXG5cdFx0XHQvLyBTYXZlIHJlc3BvbnNlIGZvciB1c2UgaW4gY29tcGxldGUgY2FsbGJhY2tcblx0XHRcdHJlc3BvbnNlID0gYXJndW1lbnRzO1xuXG5cdFx0XHRzZWxmLmh0bWwoIHNlbGVjdG9yID9cblxuXHRcdFx0XHQvLyBJZiBhIHNlbGVjdG9yIHdhcyBzcGVjaWZpZWQsIGxvY2F0ZSB0aGUgcmlnaHQgZWxlbWVudHMgaW4gYSBkdW1teSBkaXZcblx0XHRcdFx0Ly8gRXhjbHVkZSBzY3JpcHRzIHRvIGF2b2lkIElFICdQZXJtaXNzaW9uIERlbmllZCcgZXJyb3JzXG5cdFx0XHRcdGpRdWVyeSggXCI8ZGl2PlwiICkuYXBwZW5kKCBqUXVlcnkucGFyc2VIVE1MKCByZXNwb25zZVRleHQgKSApLmZpbmQoIHNlbGVjdG9yICkgOlxuXG5cdFx0XHRcdC8vIE90aGVyd2lzZSB1c2UgdGhlIGZ1bGwgcmVzdWx0XG5cdFx0XHRcdHJlc3BvbnNlVGV4dCApO1xuXG5cdFx0Ly8gSWYgdGhlIHJlcXVlc3Qgc3VjY2VlZHMsIHRoaXMgZnVuY3Rpb24gZ2V0cyBcImRhdGFcIiwgXCJzdGF0dXNcIiwgXCJqcVhIUlwiXG5cdFx0Ly8gYnV0IHRoZXkgYXJlIGlnbm9yZWQgYmVjYXVzZSByZXNwb25zZSB3YXMgc2V0IGFib3ZlLlxuXHRcdC8vIElmIGl0IGZhaWxzLCB0aGlzIGZ1bmN0aW9uIGdldHMgXCJqcVhIUlwiLCBcInN0YXR1c1wiLCBcImVycm9yXCJcblx0XHR9ICkuYWx3YXlzKCBjYWxsYmFjayAmJiBmdW5jdGlvbigganFYSFIsIHN0YXR1cyApIHtcblx0XHRcdHNlbGYuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGNhbGxiYWNrLmFwcGx5KCB0aGlzLCByZXNwb25zZSB8fCBbIGpxWEhSLnJlc3BvbnNlVGV4dCwgc3RhdHVzLCBqcVhIUiBdICk7XG5cdFx0XHR9ICk7XG5cdFx0fSApO1xuXHR9XG5cblx0cmV0dXJuIHRoaXM7XG59O1xuXG5cblxuXG4vLyBBdHRhY2ggYSBidW5jaCBvZiBmdW5jdGlvbnMgZm9yIGhhbmRsaW5nIGNvbW1vbiBBSkFYIGV2ZW50c1xualF1ZXJ5LmVhY2goIFtcblx0XCJhamF4U3RhcnRcIixcblx0XCJhamF4U3RvcFwiLFxuXHRcImFqYXhDb21wbGV0ZVwiLFxuXHRcImFqYXhFcnJvclwiLFxuXHRcImFqYXhTdWNjZXNzXCIsXG5cdFwiYWpheFNlbmRcIlxuXSwgZnVuY3Rpb24oIGksIHR5cGUgKSB7XG5cdGpRdWVyeS5mblsgdHlwZSBdID0gZnVuY3Rpb24oIGZuICkge1xuXHRcdHJldHVybiB0aGlzLm9uKCB0eXBlLCBmbiApO1xuXHR9O1xufSApO1xuXG5cblxuXG5qUXVlcnkuZXhwci5wc2V1ZG9zLmFuaW1hdGVkID0gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdHJldHVybiBqUXVlcnkuZ3JlcCggalF1ZXJ5LnRpbWVycywgZnVuY3Rpb24oIGZuICkge1xuXHRcdHJldHVybiBlbGVtID09PSBmbi5lbGVtO1xuXHR9ICkubGVuZ3RoO1xufTtcblxuXG5cblxualF1ZXJ5Lm9mZnNldCA9IHtcblx0c2V0T2Zmc2V0OiBmdW5jdGlvbiggZWxlbSwgb3B0aW9ucywgaSApIHtcblx0XHR2YXIgY3VyUG9zaXRpb24sIGN1ckxlZnQsIGN1ckNTU1RvcCwgY3VyVG9wLCBjdXJPZmZzZXQsIGN1ckNTU0xlZnQsIGNhbGN1bGF0ZVBvc2l0aW9uLFxuXHRcdFx0cG9zaXRpb24gPSBqUXVlcnkuY3NzKCBlbGVtLCBcInBvc2l0aW9uXCIgKSxcblx0XHRcdGN1ckVsZW0gPSBqUXVlcnkoIGVsZW0gKSxcblx0XHRcdHByb3BzID0ge307XG5cblx0XHQvLyBTZXQgcG9zaXRpb24gZmlyc3QsIGluLWNhc2UgdG9wL2xlZnQgYXJlIHNldCBldmVuIG9uIHN0YXRpYyBlbGVtXG5cdFx0aWYgKCBwb3NpdGlvbiA9PT0gXCJzdGF0aWNcIiApIHtcblx0XHRcdGVsZW0uc3R5bGUucG9zaXRpb24gPSBcInJlbGF0aXZlXCI7XG5cdFx0fVxuXG5cdFx0Y3VyT2Zmc2V0ID0gY3VyRWxlbS5vZmZzZXQoKTtcblx0XHRjdXJDU1NUb3AgPSBqUXVlcnkuY3NzKCBlbGVtLCBcInRvcFwiICk7XG5cdFx0Y3VyQ1NTTGVmdCA9IGpRdWVyeS5jc3MoIGVsZW0sIFwibGVmdFwiICk7XG5cdFx0Y2FsY3VsYXRlUG9zaXRpb24gPSAoIHBvc2l0aW9uID09PSBcImFic29sdXRlXCIgfHwgcG9zaXRpb24gPT09IFwiZml4ZWRcIiApICYmXG5cdFx0XHQoIGN1ckNTU1RvcCArIGN1ckNTU0xlZnQgKS5pbmRleE9mKCBcImF1dG9cIiApID4gLTE7XG5cblx0XHQvLyBOZWVkIHRvIGJlIGFibGUgdG8gY2FsY3VsYXRlIHBvc2l0aW9uIGlmIGVpdGhlclxuXHRcdC8vIHRvcCBvciBsZWZ0IGlzIGF1dG8gYW5kIHBvc2l0aW9uIGlzIGVpdGhlciBhYnNvbHV0ZSBvciBmaXhlZFxuXHRcdGlmICggY2FsY3VsYXRlUG9zaXRpb24gKSB7XG5cdFx0XHRjdXJQb3NpdGlvbiA9IGN1ckVsZW0ucG9zaXRpb24oKTtcblx0XHRcdGN1clRvcCA9IGN1clBvc2l0aW9uLnRvcDtcblx0XHRcdGN1ckxlZnQgPSBjdXJQb3NpdGlvbi5sZWZ0O1xuXG5cdFx0fSBlbHNlIHtcblx0XHRcdGN1clRvcCA9IHBhcnNlRmxvYXQoIGN1ckNTU1RvcCApIHx8IDA7XG5cdFx0XHRjdXJMZWZ0ID0gcGFyc2VGbG9hdCggY3VyQ1NTTGVmdCApIHx8IDA7XG5cdFx0fVxuXG5cdFx0aWYgKCBpc0Z1bmN0aW9uKCBvcHRpb25zICkgKSB7XG5cblx0XHRcdC8vIFVzZSBqUXVlcnkuZXh0ZW5kIGhlcmUgdG8gYWxsb3cgbW9kaWZpY2F0aW9uIG9mIGNvb3JkaW5hdGVzIGFyZ3VtZW50IChnaC0xODQ4KVxuXHRcdFx0b3B0aW9ucyA9IG9wdGlvbnMuY2FsbCggZWxlbSwgaSwgalF1ZXJ5LmV4dGVuZCgge30sIGN1ck9mZnNldCApICk7XG5cdFx0fVxuXG5cdFx0aWYgKCBvcHRpb25zLnRvcCAhPSBudWxsICkge1xuXHRcdFx0cHJvcHMudG9wID0gKCBvcHRpb25zLnRvcCAtIGN1ck9mZnNldC50b3AgKSArIGN1clRvcDtcblx0XHR9XG5cdFx0aWYgKCBvcHRpb25zLmxlZnQgIT0gbnVsbCApIHtcblx0XHRcdHByb3BzLmxlZnQgPSAoIG9wdGlvbnMubGVmdCAtIGN1ck9mZnNldC5sZWZ0ICkgKyBjdXJMZWZ0O1xuXHRcdH1cblxuXHRcdGlmICggXCJ1c2luZ1wiIGluIG9wdGlvbnMgKSB7XG5cdFx0XHRvcHRpb25zLnVzaW5nLmNhbGwoIGVsZW0sIHByb3BzICk7XG5cblx0XHR9IGVsc2Uge1xuXHRcdFx0Y3VyRWxlbS5jc3MoIHByb3BzICk7XG5cdFx0fVxuXHR9XG59O1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cblx0Ly8gb2Zmc2V0KCkgcmVsYXRlcyBhbiBlbGVtZW50J3MgYm9yZGVyIGJveCB0byB0aGUgZG9jdW1lbnQgb3JpZ2luXG5cdG9mZnNldDogZnVuY3Rpb24oIG9wdGlvbnMgKSB7XG5cblx0XHQvLyBQcmVzZXJ2ZSBjaGFpbmluZyBmb3Igc2V0dGVyXG5cdFx0aWYgKCBhcmd1bWVudHMubGVuZ3RoICkge1xuXHRcdFx0cmV0dXJuIG9wdGlvbnMgPT09IHVuZGVmaW5lZCA/XG5cdFx0XHRcdHRoaXMgOlxuXHRcdFx0XHR0aGlzLmVhY2goIGZ1bmN0aW9uKCBpICkge1xuXHRcdFx0XHRcdGpRdWVyeS5vZmZzZXQuc2V0T2Zmc2V0KCB0aGlzLCBvcHRpb25zLCBpICk7XG5cdFx0XHRcdH0gKTtcblx0XHR9XG5cblx0XHR2YXIgcmVjdCwgd2luLFxuXHRcdFx0ZWxlbSA9IHRoaXNbIDAgXTtcblxuXHRcdGlmICggIWVsZW0gKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gUmV0dXJuIHplcm9zIGZvciBkaXNjb25uZWN0ZWQgYW5kIGhpZGRlbiAoZGlzcGxheTogbm9uZSkgZWxlbWVudHMgKGdoLTIzMTApXG5cdFx0Ly8gU3VwcG9ydDogSUUgPD0xMSBvbmx5XG5cdFx0Ly8gUnVubmluZyBnZXRCb3VuZGluZ0NsaWVudFJlY3Qgb24gYVxuXHRcdC8vIGRpc2Nvbm5lY3RlZCBub2RlIGluIElFIHRocm93cyBhbiBlcnJvclxuXHRcdGlmICggIWVsZW0uZ2V0Q2xpZW50UmVjdHMoKS5sZW5ndGggKSB7XG5cdFx0XHRyZXR1cm4geyB0b3A6IDAsIGxlZnQ6IDAgfTtcblx0XHR9XG5cblx0XHQvLyBHZXQgZG9jdW1lbnQtcmVsYXRpdmUgcG9zaXRpb24gYnkgYWRkaW5nIHZpZXdwb3J0IHNjcm9sbCB0byB2aWV3cG9ydC1yZWxhdGl2ZSBnQkNSXG5cdFx0cmVjdCA9IGVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cdFx0d2luID0gZWxlbS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3O1xuXHRcdHJldHVybiB7XG5cdFx0XHR0b3A6IHJlY3QudG9wICsgd2luLnBhZ2VZT2Zmc2V0LFxuXHRcdFx0bGVmdDogcmVjdC5sZWZ0ICsgd2luLnBhZ2VYT2Zmc2V0XG5cdFx0fTtcblx0fSxcblxuXHQvLyBwb3NpdGlvbigpIHJlbGF0ZXMgYW4gZWxlbWVudCdzIG1hcmdpbiBib3ggdG8gaXRzIG9mZnNldCBwYXJlbnQncyBwYWRkaW5nIGJveFxuXHQvLyBUaGlzIGNvcnJlc3BvbmRzIHRvIHRoZSBiZWhhdmlvciBvZiBDU1MgYWJzb2x1dGUgcG9zaXRpb25pbmdcblx0cG9zaXRpb246IGZ1bmN0aW9uKCkge1xuXHRcdGlmICggIXRoaXNbIDAgXSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHR2YXIgb2Zmc2V0UGFyZW50LCBvZmZzZXQsIGRvYyxcblx0XHRcdGVsZW0gPSB0aGlzWyAwIF0sXG5cdFx0XHRwYXJlbnRPZmZzZXQgPSB7IHRvcDogMCwgbGVmdDogMCB9O1xuXG5cdFx0Ly8gcG9zaXRpb246Zml4ZWQgZWxlbWVudHMgYXJlIG9mZnNldCBmcm9tIHRoZSB2aWV3cG9ydCwgd2hpY2ggaXRzZWxmIGFsd2F5cyBoYXMgemVybyBvZmZzZXRcblx0XHRpZiAoIGpRdWVyeS5jc3MoIGVsZW0sIFwicG9zaXRpb25cIiApID09PSBcImZpeGVkXCIgKSB7XG5cblx0XHRcdC8vIEFzc3VtZSBwb3NpdGlvbjpmaXhlZCBpbXBsaWVzIGF2YWlsYWJpbGl0eSBvZiBnZXRCb3VuZGluZ0NsaWVudFJlY3Rcblx0XHRcdG9mZnNldCA9IGVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cblx0XHR9IGVsc2Uge1xuXHRcdFx0b2Zmc2V0ID0gdGhpcy5vZmZzZXQoKTtcblxuXHRcdFx0Ly8gQWNjb3VudCBmb3IgdGhlICpyZWFsKiBvZmZzZXQgcGFyZW50LCB3aGljaCBjYW4gYmUgdGhlIGRvY3VtZW50IG9yIGl0cyByb290IGVsZW1lbnRcblx0XHRcdC8vIHdoZW4gYSBzdGF0aWNhbGx5IHBvc2l0aW9uZWQgZWxlbWVudCBpcyBpZGVudGlmaWVkXG5cdFx0XHRkb2MgPSBlbGVtLm93bmVyRG9jdW1lbnQ7XG5cdFx0XHRvZmZzZXRQYXJlbnQgPSBlbGVtLm9mZnNldFBhcmVudCB8fCBkb2MuZG9jdW1lbnRFbGVtZW50O1xuXHRcdFx0d2hpbGUgKCBvZmZzZXRQYXJlbnQgJiZcblx0XHRcdFx0KCBvZmZzZXRQYXJlbnQgPT09IGRvYy5ib2R5IHx8IG9mZnNldFBhcmVudCA9PT0gZG9jLmRvY3VtZW50RWxlbWVudCApICYmXG5cdFx0XHRcdGpRdWVyeS5jc3MoIG9mZnNldFBhcmVudCwgXCJwb3NpdGlvblwiICkgPT09IFwic3RhdGljXCIgKSB7XG5cblx0XHRcdFx0b2Zmc2V0UGFyZW50ID0gb2Zmc2V0UGFyZW50LnBhcmVudE5vZGU7XG5cdFx0XHR9XG5cdFx0XHRpZiAoIG9mZnNldFBhcmVudCAmJiBvZmZzZXRQYXJlbnQgIT09IGVsZW0gJiYgb2Zmc2V0UGFyZW50Lm5vZGVUeXBlID09PSAxICkge1xuXG5cdFx0XHRcdC8vIEluY29ycG9yYXRlIGJvcmRlcnMgaW50byBpdHMgb2Zmc2V0LCBzaW5jZSB0aGV5IGFyZSBvdXRzaWRlIGl0cyBjb250ZW50IG9yaWdpblxuXHRcdFx0XHRwYXJlbnRPZmZzZXQgPSBqUXVlcnkoIG9mZnNldFBhcmVudCApLm9mZnNldCgpO1xuXHRcdFx0XHRwYXJlbnRPZmZzZXQudG9wICs9IGpRdWVyeS5jc3MoIG9mZnNldFBhcmVudCwgXCJib3JkZXJUb3BXaWR0aFwiLCB0cnVlICk7XG5cdFx0XHRcdHBhcmVudE9mZnNldC5sZWZ0ICs9IGpRdWVyeS5jc3MoIG9mZnNldFBhcmVudCwgXCJib3JkZXJMZWZ0V2lkdGhcIiwgdHJ1ZSApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIFN1YnRyYWN0IHBhcmVudCBvZmZzZXRzIGFuZCBlbGVtZW50IG1hcmdpbnNcblx0XHRyZXR1cm4ge1xuXHRcdFx0dG9wOiBvZmZzZXQudG9wIC0gcGFyZW50T2Zmc2V0LnRvcCAtIGpRdWVyeS5jc3MoIGVsZW0sIFwibWFyZ2luVG9wXCIsIHRydWUgKSxcblx0XHRcdGxlZnQ6IG9mZnNldC5sZWZ0IC0gcGFyZW50T2Zmc2V0LmxlZnQgLSBqUXVlcnkuY3NzKCBlbGVtLCBcIm1hcmdpbkxlZnRcIiwgdHJ1ZSApXG5cdFx0fTtcblx0fSxcblxuXHQvLyBUaGlzIG1ldGhvZCB3aWxsIHJldHVybiBkb2N1bWVudEVsZW1lbnQgaW4gdGhlIGZvbGxvd2luZyBjYXNlczpcblx0Ly8gMSkgRm9yIHRoZSBlbGVtZW50IGluc2lkZSB0aGUgaWZyYW1lIHdpdGhvdXQgb2Zmc2V0UGFyZW50LCB0aGlzIG1ldGhvZCB3aWxsIHJldHVyblxuXHQvLyAgICBkb2N1bWVudEVsZW1lbnQgb2YgdGhlIHBhcmVudCB3aW5kb3dcblx0Ly8gMikgRm9yIHRoZSBoaWRkZW4gb3IgZGV0YWNoZWQgZWxlbWVudFxuXHQvLyAzKSBGb3IgYm9keSBvciBodG1sIGVsZW1lbnQsIGkuZS4gaW4gY2FzZSBvZiB0aGUgaHRtbCBub2RlIC0gaXQgd2lsbCByZXR1cm4gaXRzZWxmXG5cdC8vXG5cdC8vIGJ1dCB0aG9zZSBleGNlcHRpb25zIHdlcmUgbmV2ZXIgcHJlc2VudGVkIGFzIGEgcmVhbCBsaWZlIHVzZS1jYXNlc1xuXHQvLyBhbmQgbWlnaHQgYmUgY29uc2lkZXJlZCBhcyBtb3JlIHByZWZlcmFibGUgcmVzdWx0cy5cblx0Ly9cblx0Ly8gVGhpcyBsb2dpYywgaG93ZXZlciwgaXMgbm90IGd1YXJhbnRlZWQgYW5kIGNhbiBjaGFuZ2UgYXQgYW55IHBvaW50IGluIHRoZSBmdXR1cmVcblx0b2Zmc2V0UGFyZW50OiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5tYXAoIGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIG9mZnNldFBhcmVudCA9IHRoaXMub2Zmc2V0UGFyZW50O1xuXG5cdFx0XHR3aGlsZSAoIG9mZnNldFBhcmVudCAmJiBqUXVlcnkuY3NzKCBvZmZzZXRQYXJlbnQsIFwicG9zaXRpb25cIiApID09PSBcInN0YXRpY1wiICkge1xuXHRcdFx0XHRvZmZzZXRQYXJlbnQgPSBvZmZzZXRQYXJlbnQub2Zmc2V0UGFyZW50O1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gb2Zmc2V0UGFyZW50IHx8IGRvY3VtZW50RWxlbWVudDtcblx0XHR9ICk7XG5cdH1cbn0gKTtcblxuLy8gQ3JlYXRlIHNjcm9sbExlZnQgYW5kIHNjcm9sbFRvcCBtZXRob2RzXG5qUXVlcnkuZWFjaCggeyBzY3JvbGxMZWZ0OiBcInBhZ2VYT2Zmc2V0XCIsIHNjcm9sbFRvcDogXCJwYWdlWU9mZnNldFwiIH0sIGZ1bmN0aW9uKCBtZXRob2QsIHByb3AgKSB7XG5cdHZhciB0b3AgPSBcInBhZ2VZT2Zmc2V0XCIgPT09IHByb3A7XG5cblx0alF1ZXJ5LmZuWyBtZXRob2QgXSA9IGZ1bmN0aW9uKCB2YWwgKSB7XG5cdFx0cmV0dXJuIGFjY2VzcyggdGhpcywgZnVuY3Rpb24oIGVsZW0sIG1ldGhvZCwgdmFsICkge1xuXG5cdFx0XHQvLyBDb2FsZXNjZSBkb2N1bWVudHMgYW5kIHdpbmRvd3Ncblx0XHRcdHZhciB3aW47XG5cdFx0XHRpZiAoIGlzV2luZG93KCBlbGVtICkgKSB7XG5cdFx0XHRcdHdpbiA9IGVsZW07XG5cdFx0XHR9IGVsc2UgaWYgKCBlbGVtLm5vZGVUeXBlID09PSA5ICkge1xuXHRcdFx0XHR3aW4gPSBlbGVtLmRlZmF1bHRWaWV3O1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIHZhbCA9PT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRyZXR1cm4gd2luID8gd2luWyBwcm9wIF0gOiBlbGVtWyBtZXRob2QgXTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCB3aW4gKSB7XG5cdFx0XHRcdHdpbi5zY3JvbGxUbyhcblx0XHRcdFx0XHQhdG9wID8gdmFsIDogd2luLnBhZ2VYT2Zmc2V0LFxuXHRcdFx0XHRcdHRvcCA/IHZhbCA6IHdpbi5wYWdlWU9mZnNldFxuXHRcdFx0XHQpO1xuXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRlbGVtWyBtZXRob2QgXSA9IHZhbDtcblx0XHRcdH1cblx0XHR9LCBtZXRob2QsIHZhbCwgYXJndW1lbnRzLmxlbmd0aCApO1xuXHR9O1xufSApO1xuXG4vLyBTdXBwb3J0OiBTYWZhcmkgPD03IC0gOS4xLCBDaHJvbWUgPD0zNyAtIDQ5XG4vLyBBZGQgdGhlIHRvcC9sZWZ0IGNzc0hvb2tzIHVzaW5nIGpRdWVyeS5mbi5wb3NpdGlvblxuLy8gV2Via2l0IGJ1ZzogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI5MDg0XG4vLyBCbGluayBidWc6IGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTU4OTM0N1xuLy8gZ2V0Q29tcHV0ZWRTdHlsZSByZXR1cm5zIHBlcmNlbnQgd2hlbiBzcGVjaWZpZWQgZm9yIHRvcC9sZWZ0L2JvdHRvbS9yaWdodDtcbi8vIHJhdGhlciB0aGFuIG1ha2UgdGhlIGNzcyBtb2R1bGUgZGVwZW5kIG9uIHRoZSBvZmZzZXQgbW9kdWxlLCBqdXN0IGNoZWNrIGZvciBpdCBoZXJlXG5qUXVlcnkuZWFjaCggWyBcInRvcFwiLCBcImxlZnRcIiBdLCBmdW5jdGlvbiggaSwgcHJvcCApIHtcblx0alF1ZXJ5LmNzc0hvb2tzWyBwcm9wIF0gPSBhZGRHZXRIb29rSWYoIHN1cHBvcnQucGl4ZWxQb3NpdGlvbixcblx0XHRmdW5jdGlvbiggZWxlbSwgY29tcHV0ZWQgKSB7XG5cdFx0XHRpZiAoIGNvbXB1dGVkICkge1xuXHRcdFx0XHRjb21wdXRlZCA9IGN1ckNTUyggZWxlbSwgcHJvcCApO1xuXG5cdFx0XHRcdC8vIElmIGN1ckNTUyByZXR1cm5zIHBlcmNlbnRhZ2UsIGZhbGxiYWNrIHRvIG9mZnNldFxuXHRcdFx0XHRyZXR1cm4gcm51bW5vbnB4LnRlc3QoIGNvbXB1dGVkICkgP1xuXHRcdFx0XHRcdGpRdWVyeSggZWxlbSApLnBvc2l0aW9uKClbIHByb3AgXSArIFwicHhcIiA6XG5cdFx0XHRcdFx0Y29tcHV0ZWQ7XG5cdFx0XHR9XG5cdFx0fVxuXHQpO1xufSApO1xuXG5cbi8vIENyZWF0ZSBpbm5lckhlaWdodCwgaW5uZXJXaWR0aCwgaGVpZ2h0LCB3aWR0aCwgb3V0ZXJIZWlnaHQgYW5kIG91dGVyV2lkdGggbWV0aG9kc1xualF1ZXJ5LmVhY2goIHsgSGVpZ2h0OiBcImhlaWdodFwiLCBXaWR0aDogXCJ3aWR0aFwiIH0sIGZ1bmN0aW9uKCBuYW1lLCB0eXBlICkge1xuXHRqUXVlcnkuZWFjaCggeyBwYWRkaW5nOiBcImlubmVyXCIgKyBuYW1lLCBjb250ZW50OiB0eXBlLCBcIlwiOiBcIm91dGVyXCIgKyBuYW1lIH0sXG5cdFx0ZnVuY3Rpb24oIGRlZmF1bHRFeHRyYSwgZnVuY05hbWUgKSB7XG5cblx0XHQvLyBNYXJnaW4gaXMgb25seSBmb3Igb3V0ZXJIZWlnaHQsIG91dGVyV2lkdGhcblx0XHRqUXVlcnkuZm5bIGZ1bmNOYW1lIF0gPSBmdW5jdGlvbiggbWFyZ2luLCB2YWx1ZSApIHtcblx0XHRcdHZhciBjaGFpbmFibGUgPSBhcmd1bWVudHMubGVuZ3RoICYmICggZGVmYXVsdEV4dHJhIHx8IHR5cGVvZiBtYXJnaW4gIT09IFwiYm9vbGVhblwiICksXG5cdFx0XHRcdGV4dHJhID0gZGVmYXVsdEV4dHJhIHx8ICggbWFyZ2luID09PSB0cnVlIHx8IHZhbHVlID09PSB0cnVlID8gXCJtYXJnaW5cIiA6IFwiYm9yZGVyXCIgKTtcblxuXHRcdFx0cmV0dXJuIGFjY2VzcyggdGhpcywgZnVuY3Rpb24oIGVsZW0sIHR5cGUsIHZhbHVlICkge1xuXHRcdFx0XHR2YXIgZG9jO1xuXG5cdFx0XHRcdGlmICggaXNXaW5kb3coIGVsZW0gKSApIHtcblxuXHRcdFx0XHRcdC8vICQoIHdpbmRvdyApLm91dGVyV2lkdGgvSGVpZ2h0IHJldHVybiB3L2ggaW5jbHVkaW5nIHNjcm9sbGJhcnMgKGdoLTE3MjkpXG5cdFx0XHRcdFx0cmV0dXJuIGZ1bmNOYW1lLmluZGV4T2YoIFwib3V0ZXJcIiApID09PSAwID9cblx0XHRcdFx0XHRcdGVsZW1bIFwiaW5uZXJcIiArIG5hbWUgXSA6XG5cdFx0XHRcdFx0XHRlbGVtLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudFsgXCJjbGllbnRcIiArIG5hbWUgXTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIEdldCBkb2N1bWVudCB3aWR0aCBvciBoZWlnaHRcblx0XHRcdFx0aWYgKCBlbGVtLm5vZGVUeXBlID09PSA5ICkge1xuXHRcdFx0XHRcdGRvYyA9IGVsZW0uZG9jdW1lbnRFbGVtZW50O1xuXG5cdFx0XHRcdFx0Ly8gRWl0aGVyIHNjcm9sbFtXaWR0aC9IZWlnaHRdIG9yIG9mZnNldFtXaWR0aC9IZWlnaHRdIG9yIGNsaWVudFtXaWR0aC9IZWlnaHRdLFxuXHRcdFx0XHRcdC8vIHdoaWNoZXZlciBpcyBncmVhdGVzdFxuXHRcdFx0XHRcdHJldHVybiBNYXRoLm1heChcblx0XHRcdFx0XHRcdGVsZW0uYm9keVsgXCJzY3JvbGxcIiArIG5hbWUgXSwgZG9jWyBcInNjcm9sbFwiICsgbmFtZSBdLFxuXHRcdFx0XHRcdFx0ZWxlbS5ib2R5WyBcIm9mZnNldFwiICsgbmFtZSBdLCBkb2NbIFwib2Zmc2V0XCIgKyBuYW1lIF0sXG5cdFx0XHRcdFx0XHRkb2NbIFwiY2xpZW50XCIgKyBuYW1lIF1cblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQgP1xuXG5cdFx0XHRcdFx0Ly8gR2V0IHdpZHRoIG9yIGhlaWdodCBvbiB0aGUgZWxlbWVudCwgcmVxdWVzdGluZyBidXQgbm90IGZvcmNpbmcgcGFyc2VGbG9hdFxuXHRcdFx0XHRcdGpRdWVyeS5jc3MoIGVsZW0sIHR5cGUsIGV4dHJhICkgOlxuXG5cdFx0XHRcdFx0Ly8gU2V0IHdpZHRoIG9yIGhlaWdodCBvbiB0aGUgZWxlbWVudFxuXHRcdFx0XHRcdGpRdWVyeS5zdHlsZSggZWxlbSwgdHlwZSwgdmFsdWUsIGV4dHJhICk7XG5cdFx0XHR9LCB0eXBlLCBjaGFpbmFibGUgPyBtYXJnaW4gOiB1bmRlZmluZWQsIGNoYWluYWJsZSApO1xuXHRcdH07XG5cdH0gKTtcbn0gKTtcblxuXG5qUXVlcnkuZWFjaCggKCBcImJsdXIgZm9jdXMgZm9jdXNpbiBmb2N1c291dCByZXNpemUgc2Nyb2xsIGNsaWNrIGRibGNsaWNrIFwiICtcblx0XCJtb3VzZWRvd24gbW91c2V1cCBtb3VzZW1vdmUgbW91c2VvdmVyIG1vdXNlb3V0IG1vdXNlZW50ZXIgbW91c2VsZWF2ZSBcIiArXG5cdFwiY2hhbmdlIHNlbGVjdCBzdWJtaXQga2V5ZG93biBrZXlwcmVzcyBrZXl1cCBjb250ZXh0bWVudVwiICkuc3BsaXQoIFwiIFwiICksXG5cdGZ1bmN0aW9uKCBpLCBuYW1lICkge1xuXG5cdC8vIEhhbmRsZSBldmVudCBiaW5kaW5nXG5cdGpRdWVyeS5mblsgbmFtZSBdID0gZnVuY3Rpb24oIGRhdGEsIGZuICkge1xuXHRcdHJldHVybiBhcmd1bWVudHMubGVuZ3RoID4gMCA/XG5cdFx0XHR0aGlzLm9uKCBuYW1lLCBudWxsLCBkYXRhLCBmbiApIDpcblx0XHRcdHRoaXMudHJpZ2dlciggbmFtZSApO1xuXHR9O1xufSApO1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdGhvdmVyOiBmdW5jdGlvbiggZm5PdmVyLCBmbk91dCApIHtcblx0XHRyZXR1cm4gdGhpcy5tb3VzZWVudGVyKCBmbk92ZXIgKS5tb3VzZWxlYXZlKCBmbk91dCB8fCBmbk92ZXIgKTtcblx0fVxufSApO1xuXG5cblxuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cblx0YmluZDogZnVuY3Rpb24oIHR5cGVzLCBkYXRhLCBmbiApIHtcblx0XHRyZXR1cm4gdGhpcy5vbiggdHlwZXMsIG51bGwsIGRhdGEsIGZuICk7XG5cdH0sXG5cdHVuYmluZDogZnVuY3Rpb24oIHR5cGVzLCBmbiApIHtcblx0XHRyZXR1cm4gdGhpcy5vZmYoIHR5cGVzLCBudWxsLCBmbiApO1xuXHR9LFxuXG5cdGRlbGVnYXRlOiBmdW5jdGlvbiggc2VsZWN0b3IsIHR5cGVzLCBkYXRhLCBmbiApIHtcblx0XHRyZXR1cm4gdGhpcy5vbiggdHlwZXMsIHNlbGVjdG9yLCBkYXRhLCBmbiApO1xuXHR9LFxuXHR1bmRlbGVnYXRlOiBmdW5jdGlvbiggc2VsZWN0b3IsIHR5cGVzLCBmbiApIHtcblxuXHRcdC8vICggbmFtZXNwYWNlICkgb3IgKCBzZWxlY3RvciwgdHlwZXMgWywgZm5dIClcblx0XHRyZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA9PT0gMSA/XG5cdFx0XHR0aGlzLm9mZiggc2VsZWN0b3IsIFwiKipcIiApIDpcblx0XHRcdHRoaXMub2ZmKCB0eXBlcywgc2VsZWN0b3IgfHwgXCIqKlwiLCBmbiApO1xuXHR9XG59ICk7XG5cbi8vIEJpbmQgYSBmdW5jdGlvbiB0byBhIGNvbnRleHQsIG9wdGlvbmFsbHkgcGFydGlhbGx5IGFwcGx5aW5nIGFueVxuLy8gYXJndW1lbnRzLlxuLy8galF1ZXJ5LnByb3h5IGlzIGRlcHJlY2F0ZWQgdG8gcHJvbW90ZSBzdGFuZGFyZHMgKHNwZWNpZmljYWxseSBGdW5jdGlvbiNiaW5kKVxuLy8gSG93ZXZlciwgaXQgaXMgbm90IHNsYXRlZCBmb3IgcmVtb3ZhbCBhbnkgdGltZSBzb29uXG5qUXVlcnkucHJveHkgPSBmdW5jdGlvbiggZm4sIGNvbnRleHQgKSB7XG5cdHZhciB0bXAsIGFyZ3MsIHByb3h5O1xuXG5cdGlmICggdHlwZW9mIGNvbnRleHQgPT09IFwic3RyaW5nXCIgKSB7XG5cdFx0dG1wID0gZm5bIGNvbnRleHQgXTtcblx0XHRjb250ZXh0ID0gZm47XG5cdFx0Zm4gPSB0bXA7XG5cdH1cblxuXHQvLyBRdWljayBjaGVjayB0byBkZXRlcm1pbmUgaWYgdGFyZ2V0IGlzIGNhbGxhYmxlLCBpbiB0aGUgc3BlY1xuXHQvLyB0aGlzIHRocm93cyBhIFR5cGVFcnJvciwgYnV0IHdlIHdpbGwganVzdCByZXR1cm4gdW5kZWZpbmVkLlxuXHRpZiAoICFpc0Z1bmN0aW9uKCBmbiApICkge1xuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblxuXHQvLyBTaW11bGF0ZWQgYmluZFxuXHRhcmdzID0gc2xpY2UuY2FsbCggYXJndW1lbnRzLCAyICk7XG5cdHByb3h5ID0gZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIGZuLmFwcGx5KCBjb250ZXh0IHx8IHRoaXMsIGFyZ3MuY29uY2F0KCBzbGljZS5jYWxsKCBhcmd1bWVudHMgKSApICk7XG5cdH07XG5cblx0Ly8gU2V0IHRoZSBndWlkIG9mIHVuaXF1ZSBoYW5kbGVyIHRvIHRoZSBzYW1lIG9mIG9yaWdpbmFsIGhhbmRsZXIsIHNvIGl0IGNhbiBiZSByZW1vdmVkXG5cdHByb3h5Lmd1aWQgPSBmbi5ndWlkID0gZm4uZ3VpZCB8fCBqUXVlcnkuZ3VpZCsrO1xuXG5cdHJldHVybiBwcm94eTtcbn07XG5cbmpRdWVyeS5ob2xkUmVhZHkgPSBmdW5jdGlvbiggaG9sZCApIHtcblx0aWYgKCBob2xkICkge1xuXHRcdGpRdWVyeS5yZWFkeVdhaXQrKztcblx0fSBlbHNlIHtcblx0XHRqUXVlcnkucmVhZHkoIHRydWUgKTtcblx0fVxufTtcbmpRdWVyeS5pc0FycmF5ID0gQXJyYXkuaXNBcnJheTtcbmpRdWVyeS5wYXJzZUpTT04gPSBKU09OLnBhcnNlO1xualF1ZXJ5Lm5vZGVOYW1lID0gbm9kZU5hbWU7XG5qUXVlcnkuaXNGdW5jdGlvbiA9IGlzRnVuY3Rpb247XG5qUXVlcnkuaXNXaW5kb3cgPSBpc1dpbmRvdztcbmpRdWVyeS5jYW1lbENhc2UgPSBjYW1lbENhc2U7XG5qUXVlcnkudHlwZSA9IHRvVHlwZTtcblxualF1ZXJ5Lm5vdyA9IERhdGUubm93O1xuXG5qUXVlcnkuaXNOdW1lcmljID0gZnVuY3Rpb24oIG9iaiApIHtcblxuXHQvLyBBcyBvZiBqUXVlcnkgMy4wLCBpc051bWVyaWMgaXMgbGltaXRlZCB0b1xuXHQvLyBzdHJpbmdzIGFuZCBudW1iZXJzIChwcmltaXRpdmVzIG9yIG9iamVjdHMpXG5cdC8vIHRoYXQgY2FuIGJlIGNvZXJjZWQgdG8gZmluaXRlIG51bWJlcnMgKGdoLTI2NjIpXG5cdHZhciB0eXBlID0galF1ZXJ5LnR5cGUoIG9iaiApO1xuXHRyZXR1cm4gKCB0eXBlID09PSBcIm51bWJlclwiIHx8IHR5cGUgPT09IFwic3RyaW5nXCIgKSAmJlxuXG5cdFx0Ly8gcGFyc2VGbG9hdCBOYU5zIG51bWVyaWMtY2FzdCBmYWxzZSBwb3NpdGl2ZXMgKFwiXCIpXG5cdFx0Ly8gLi4uYnV0IG1pc2ludGVycHJldHMgbGVhZGluZy1udW1iZXIgc3RyaW5ncywgcGFydGljdWxhcmx5IGhleCBsaXRlcmFscyAoXCIweC4uLlwiKVxuXHRcdC8vIHN1YnRyYWN0aW9uIGZvcmNlcyBpbmZpbml0aWVzIHRvIE5hTlxuXHRcdCFpc05hTiggb2JqIC0gcGFyc2VGbG9hdCggb2JqICkgKTtcbn07XG5cblxuXG5cbi8vIFJlZ2lzdGVyIGFzIGEgbmFtZWQgQU1EIG1vZHVsZSwgc2luY2UgalF1ZXJ5IGNhbiBiZSBjb25jYXRlbmF0ZWQgd2l0aCBvdGhlclxuLy8gZmlsZXMgdGhhdCBtYXkgdXNlIGRlZmluZSwgYnV0IG5vdCB2aWEgYSBwcm9wZXIgY29uY2F0ZW5hdGlvbiBzY3JpcHQgdGhhdFxuLy8gdW5kZXJzdGFuZHMgYW5vbnltb3VzIEFNRCBtb2R1bGVzLiBBIG5hbWVkIEFNRCBpcyBzYWZlc3QgYW5kIG1vc3Qgcm9idXN0XG4vLyB3YXkgdG8gcmVnaXN0ZXIuIExvd2VyY2FzZSBqcXVlcnkgaXMgdXNlZCBiZWNhdXNlIEFNRCBtb2R1bGUgbmFtZXMgYXJlXG4vLyBkZXJpdmVkIGZyb20gZmlsZSBuYW1lcywgYW5kIGpRdWVyeSBpcyBub3JtYWxseSBkZWxpdmVyZWQgaW4gYSBsb3dlcmNhc2Vcbi8vIGZpbGUgbmFtZS4gRG8gdGhpcyBhZnRlciBjcmVhdGluZyB0aGUgZ2xvYmFsIHNvIHRoYXQgaWYgYW4gQU1EIG1vZHVsZSB3YW50c1xuLy8gdG8gY2FsbCBub0NvbmZsaWN0IHRvIGhpZGUgdGhpcyB2ZXJzaW9uIG9mIGpRdWVyeSwgaXQgd2lsbCB3b3JrLlxuXG4vLyBOb3RlIHRoYXQgZm9yIG1heGltdW0gcG9ydGFiaWxpdHksIGxpYnJhcmllcyB0aGF0IGFyZSBub3QgalF1ZXJ5IHNob3VsZFxuLy8gZGVjbGFyZSB0aGVtc2VsdmVzIGFzIGFub255bW91cyBtb2R1bGVzLCBhbmQgYXZvaWQgc2V0dGluZyBhIGdsb2JhbCBpZiBhblxuLy8gQU1EIGxvYWRlciBpcyBwcmVzZW50LiBqUXVlcnkgaXMgYSBzcGVjaWFsIGNhc2UuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWVcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9qcmJ1cmtlL3JlcXVpcmVqcy93aWtpL1VwZGF0aW5nLWV4aXN0aW5nLWxpYnJhcmllcyN3aWtpLWFub25cblxuaWYgKCB0eXBlb2YgZGVmaW5lID09PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCApIHtcblx0ZGVmaW5lKCBcImpxdWVyeVwiLCBbXSwgZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIGpRdWVyeTtcblx0fSApO1xufVxuXG5cblxuXG52YXJcblxuXHQvLyBNYXAgb3ZlciBqUXVlcnkgaW4gY2FzZSBvZiBvdmVyd3JpdGVcblx0X2pRdWVyeSA9IHdpbmRvdy5qUXVlcnksXG5cblx0Ly8gTWFwIG92ZXIgdGhlICQgaW4gY2FzZSBvZiBvdmVyd3JpdGVcblx0XyQgPSB3aW5kb3cuJDtcblxualF1ZXJ5Lm5vQ29uZmxpY3QgPSBmdW5jdGlvbiggZGVlcCApIHtcblx0aWYgKCB3aW5kb3cuJCA9PT0galF1ZXJ5ICkge1xuXHRcdHdpbmRvdy4kID0gXyQ7XG5cdH1cblxuXHRpZiAoIGRlZXAgJiYgd2luZG93LmpRdWVyeSA9PT0galF1ZXJ5ICkge1xuXHRcdHdpbmRvdy5qUXVlcnkgPSBfalF1ZXJ5O1xuXHR9XG5cblx0cmV0dXJuIGpRdWVyeTtcbn07XG5cbi8vIEV4cG9zZSBqUXVlcnkgYW5kICQgaWRlbnRpZmllcnMsIGV2ZW4gaW4gQU1EXG4vLyAoIzcxMDIjY29tbWVudDoxMCwgaHR0cHM6Ly9naXRodWIuY29tL2pxdWVyeS9qcXVlcnkvcHVsbC81NTcpXG4vLyBhbmQgQ29tbW9uSlMgZm9yIGJyb3dzZXIgZW11bGF0b3JzICgjMTM1NjYpXG5pZiAoICFub0dsb2JhbCApIHtcblx0d2luZG93LmpRdWVyeSA9IHdpbmRvdy4kID0galF1ZXJ5O1xufVxuXG5cblxuXG5yZXR1cm4galF1ZXJ5O1xufSApO1xuIiwiLyohXG4gKiBKYXZhU2NyaXB0IENvb2tpZSB2Mi4yLjFcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9qcy1jb29raWUvanMtY29va2llXG4gKlxuICogQ29weXJpZ2h0IDIwMDYsIDIwMTUgS2xhdXMgSGFydGwgJiBGYWduZXIgQnJhY2tcbiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZVxuICovXG47KGZ1bmN0aW9uIChmYWN0b3J5KSB7XG5cdHZhciByZWdpc3RlcmVkSW5Nb2R1bGVMb2FkZXI7XG5cdGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpIHtcblx0XHRkZWZpbmUoZmFjdG9yeSk7XG5cdFx0cmVnaXN0ZXJlZEluTW9kdWxlTG9hZGVyID0gdHJ1ZTtcblx0fVxuXHRpZiAodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKSB7XG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCk7XG5cdFx0cmVnaXN0ZXJlZEluTW9kdWxlTG9hZGVyID0gdHJ1ZTtcblx0fVxuXHRpZiAoIXJlZ2lzdGVyZWRJbk1vZHVsZUxvYWRlcikge1xuXHRcdHZhciBPbGRDb29raWVzID0gd2luZG93LkNvb2tpZXM7XG5cdFx0dmFyIGFwaSA9IHdpbmRvdy5Db29raWVzID0gZmFjdG9yeSgpO1xuXHRcdGFwaS5ub0NvbmZsaWN0ID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0d2luZG93LkNvb2tpZXMgPSBPbGRDb29raWVzO1xuXHRcdFx0cmV0dXJuIGFwaTtcblx0XHR9O1xuXHR9XG59KGZ1bmN0aW9uICgpIHtcblx0ZnVuY3Rpb24gZXh0ZW5kICgpIHtcblx0XHR2YXIgaSA9IDA7XG5cdFx0dmFyIHJlc3VsdCA9IHt9O1xuXHRcdGZvciAoOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHR2YXIgYXR0cmlidXRlcyA9IGFyZ3VtZW50c1sgaSBdO1xuXHRcdFx0Zm9yICh2YXIga2V5IGluIGF0dHJpYnV0ZXMpIHtcblx0XHRcdFx0cmVzdWx0W2tleV0gPSBhdHRyaWJ1dGVzW2tleV07XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRmdW5jdGlvbiBkZWNvZGUgKHMpIHtcblx0XHRyZXR1cm4gcy5yZXBsYWNlKC8oJVswLTlBLVpdezJ9KSsvZywgZGVjb2RlVVJJQ29tcG9uZW50KTtcblx0fVxuXG5cdGZ1bmN0aW9uIGluaXQgKGNvbnZlcnRlcikge1xuXHRcdGZ1bmN0aW9uIGFwaSgpIHt9XG5cblx0XHRmdW5jdGlvbiBzZXQgKGtleSwgdmFsdWUsIGF0dHJpYnV0ZXMpIHtcblx0XHRcdGlmICh0eXBlb2YgZG9jdW1lbnQgPT09ICd1bmRlZmluZWQnKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0YXR0cmlidXRlcyA9IGV4dGVuZCh7XG5cdFx0XHRcdHBhdGg6ICcvJ1xuXHRcdFx0fSwgYXBpLmRlZmF1bHRzLCBhdHRyaWJ1dGVzKTtcblxuXHRcdFx0aWYgKHR5cGVvZiBhdHRyaWJ1dGVzLmV4cGlyZXMgPT09ICdudW1iZXInKSB7XG5cdFx0XHRcdGF0dHJpYnV0ZXMuZXhwaXJlcyA9IG5ldyBEYXRlKG5ldyBEYXRlKCkgKiAxICsgYXR0cmlidXRlcy5leHBpcmVzICogODY0ZSs1KTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gV2UncmUgdXNpbmcgXCJleHBpcmVzXCIgYmVjYXVzZSBcIm1heC1hZ2VcIiBpcyBub3Qgc3VwcG9ydGVkIGJ5IElFXG5cdFx0XHRhdHRyaWJ1dGVzLmV4cGlyZXMgPSBhdHRyaWJ1dGVzLmV4cGlyZXMgPyBhdHRyaWJ1dGVzLmV4cGlyZXMudG9VVENTdHJpbmcoKSA6ICcnO1xuXG5cdFx0XHR0cnkge1xuXHRcdFx0XHR2YXIgcmVzdWx0ID0gSlNPTi5zdHJpbmdpZnkodmFsdWUpO1xuXHRcdFx0XHRpZiAoL15bXFx7XFxbXS8udGVzdChyZXN1bHQpKSB7XG5cdFx0XHRcdFx0dmFsdWUgPSByZXN1bHQ7XG5cdFx0XHRcdH1cblx0XHRcdH0gY2F0Y2ggKGUpIHt9XG5cblx0XHRcdHZhbHVlID0gY29udmVydGVyLndyaXRlID9cblx0XHRcdFx0Y29udmVydGVyLndyaXRlKHZhbHVlLCBrZXkpIDpcblx0XHRcdFx0ZW5jb2RlVVJJQ29tcG9uZW50KFN0cmluZyh2YWx1ZSkpXG5cdFx0XHRcdFx0LnJlcGxhY2UoLyUoMjN8MjR8MjZ8MkJ8M0F8M0N8M0V8M0R8MkZ8M0Z8NDB8NUJ8NUR8NUV8NjB8N0J8N0R8N0MpL2csIGRlY29kZVVSSUNvbXBvbmVudCk7XG5cblx0XHRcdGtleSA9IGVuY29kZVVSSUNvbXBvbmVudChTdHJpbmcoa2V5KSlcblx0XHRcdFx0LnJlcGxhY2UoLyUoMjN8MjR8MjZ8MkJ8NUV8NjB8N0MpL2csIGRlY29kZVVSSUNvbXBvbmVudClcblx0XHRcdFx0LnJlcGxhY2UoL1tcXChcXCldL2csIGVzY2FwZSk7XG5cblx0XHRcdHZhciBzdHJpbmdpZmllZEF0dHJpYnV0ZXMgPSAnJztcblx0XHRcdGZvciAodmFyIGF0dHJpYnV0ZU5hbWUgaW4gYXR0cmlidXRlcykge1xuXHRcdFx0XHRpZiAoIWF0dHJpYnV0ZXNbYXR0cmlidXRlTmFtZV0pIHtcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRzdHJpbmdpZmllZEF0dHJpYnV0ZXMgKz0gJzsgJyArIGF0dHJpYnV0ZU5hbWU7XG5cdFx0XHRcdGlmIChhdHRyaWJ1dGVzW2F0dHJpYnV0ZU5hbWVdID09PSB0cnVlKSB7XG5cdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBDb25zaWRlcnMgUkZDIDYyNjUgc2VjdGlvbiA1LjI6XG5cdFx0XHRcdC8vIC4uLlxuXHRcdFx0XHQvLyAzLiAgSWYgdGhlIHJlbWFpbmluZyB1bnBhcnNlZC1hdHRyaWJ1dGVzIGNvbnRhaW5zIGEgJXgzQiAoXCI7XCIpXG5cdFx0XHRcdC8vICAgICBjaGFyYWN0ZXI6XG5cdFx0XHRcdC8vIENvbnN1bWUgdGhlIGNoYXJhY3RlcnMgb2YgdGhlIHVucGFyc2VkLWF0dHJpYnV0ZXMgdXAgdG8sXG5cdFx0XHRcdC8vIG5vdCBpbmNsdWRpbmcsIHRoZSBmaXJzdCAleDNCIChcIjtcIikgY2hhcmFjdGVyLlxuXHRcdFx0XHQvLyAuLi5cblx0XHRcdFx0c3RyaW5naWZpZWRBdHRyaWJ1dGVzICs9ICc9JyArIGF0dHJpYnV0ZXNbYXR0cmlidXRlTmFtZV0uc3BsaXQoJzsnKVswXTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIChkb2N1bWVudC5jb29raWUgPSBrZXkgKyAnPScgKyB2YWx1ZSArIHN0cmluZ2lmaWVkQXR0cmlidXRlcyk7XG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gZ2V0IChrZXksIGpzb24pIHtcblx0XHRcdGlmICh0eXBlb2YgZG9jdW1lbnQgPT09ICd1bmRlZmluZWQnKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0dmFyIGphciA9IHt9O1xuXHRcdFx0Ly8gVG8gcHJldmVudCB0aGUgZm9yIGxvb3AgaW4gdGhlIGZpcnN0IHBsYWNlIGFzc2lnbiBhbiBlbXB0eSBhcnJheVxuXHRcdFx0Ly8gaW4gY2FzZSB0aGVyZSBhcmUgbm8gY29va2llcyBhdCBhbGwuXG5cdFx0XHR2YXIgY29va2llcyA9IGRvY3VtZW50LmNvb2tpZSA/IGRvY3VtZW50LmNvb2tpZS5zcGxpdCgnOyAnKSA6IFtdO1xuXHRcdFx0dmFyIGkgPSAwO1xuXG5cdFx0XHRmb3IgKDsgaSA8IGNvb2tpZXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0dmFyIHBhcnRzID0gY29va2llc1tpXS5zcGxpdCgnPScpO1xuXHRcdFx0XHR2YXIgY29va2llID0gcGFydHMuc2xpY2UoMSkuam9pbignPScpO1xuXG5cdFx0XHRcdGlmICghanNvbiAmJiBjb29raWUuY2hhckF0KDApID09PSAnXCInKSB7XG5cdFx0XHRcdFx0Y29va2llID0gY29va2llLnNsaWNlKDEsIC0xKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0dmFyIG5hbWUgPSBkZWNvZGUocGFydHNbMF0pO1xuXHRcdFx0XHRcdGNvb2tpZSA9IChjb252ZXJ0ZXIucmVhZCB8fCBjb252ZXJ0ZXIpKGNvb2tpZSwgbmFtZSkgfHxcblx0XHRcdFx0XHRcdGRlY29kZShjb29raWUpO1xuXG5cdFx0XHRcdFx0aWYgKGpzb24pIHtcblx0XHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRcdGNvb2tpZSA9IEpTT04ucGFyc2UoY29va2llKTtcblx0XHRcdFx0XHRcdH0gY2F0Y2ggKGUpIHt9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0amFyW25hbWVdID0gY29va2llO1xuXG5cdFx0XHRcdFx0aWYgKGtleSA9PT0gbmFtZSkge1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGNhdGNoIChlKSB7fVxuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4ga2V5ID8gamFyW2tleV0gOiBqYXI7XG5cdFx0fVxuXG5cdFx0YXBpLnNldCA9IHNldDtcblx0XHRhcGkuZ2V0ID0gZnVuY3Rpb24gKGtleSkge1xuXHRcdFx0cmV0dXJuIGdldChrZXksIGZhbHNlIC8qIHJlYWQgYXMgcmF3ICovKTtcblx0XHR9O1xuXHRcdGFwaS5nZXRKU09OID0gZnVuY3Rpb24gKGtleSkge1xuXHRcdFx0cmV0dXJuIGdldChrZXksIHRydWUgLyogcmVhZCBhcyBqc29uICovKTtcblx0XHR9O1xuXHRcdGFwaS5yZW1vdmUgPSBmdW5jdGlvbiAoa2V5LCBhdHRyaWJ1dGVzKSB7XG5cdFx0XHRzZXQoa2V5LCAnJywgZXh0ZW5kKGF0dHJpYnV0ZXMsIHtcblx0XHRcdFx0ZXhwaXJlczogLTFcblx0XHRcdH0pKTtcblx0XHR9O1xuXG5cdFx0YXBpLmRlZmF1bHRzID0ge307XG5cblx0XHRhcGkud2l0aENvbnZlcnRlciA9IGluaXQ7XG5cblx0XHRyZXR1cm4gYXBpO1xuXHR9XG5cblx0cmV0dXJuIGluaXQoZnVuY3Rpb24gKCkge30pO1xufSkpO1xuIiwiLyohIE1hZ25pZmljIFBvcHVwIC0gdjEuMS4wIC0gMjAxNi0wMi0yMFxuKiBodHRwOi8vZGltc2VtZW5vdi5jb20vcGx1Z2lucy9tYWduaWZpYy1wb3B1cC9cbiogQ29weXJpZ2h0IChjKSAyMDE2IERtaXRyeSBTZW1lbm92OyAqL1xuOyhmdW5jdGlvbiAoZmFjdG9yeSkgeyBcbmlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpIHsgXG4gLy8gQU1ELiBSZWdpc3RlciBhcyBhbiBhbm9ueW1vdXMgbW9kdWxlLiBcbiBkZWZpbmUoWydqcXVlcnknXSwgZmFjdG9yeSk7IFxuIH0gZWxzZSBpZiAodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKSB7IFxuIC8vIE5vZGUvQ29tbW9uSlMgXG4gZmFjdG9yeShyZXF1aXJlKCdqcXVlcnknKSk7IFxuIH0gZWxzZSB7IFxuIC8vIEJyb3dzZXIgZ2xvYmFscyBcbiBmYWN0b3J5KHdpbmRvdy5qUXVlcnkgfHwgd2luZG93LlplcHRvKTsgXG4gfSBcbiB9KGZ1bmN0aW9uKCQpIHsgXG5cbi8qPj5jb3JlKi9cbi8qKlxuICogXG4gKiBNYWduaWZpYyBQb3B1cCBDb3JlIEpTIGZpbGVcbiAqIFxuICovXG5cblxuLyoqXG4gKiBQcml2YXRlIHN0YXRpYyBjb25zdGFudHNcbiAqL1xudmFyIENMT1NFX0VWRU5UID0gJ0Nsb3NlJyxcblx0QkVGT1JFX0NMT1NFX0VWRU5UID0gJ0JlZm9yZUNsb3NlJyxcblx0QUZURVJfQ0xPU0VfRVZFTlQgPSAnQWZ0ZXJDbG9zZScsXG5cdEJFRk9SRV9BUFBFTkRfRVZFTlQgPSAnQmVmb3JlQXBwZW5kJyxcblx0TUFSS1VQX1BBUlNFX0VWRU5UID0gJ01hcmt1cFBhcnNlJyxcblx0T1BFTl9FVkVOVCA9ICdPcGVuJyxcblx0Q0hBTkdFX0VWRU5UID0gJ0NoYW5nZScsXG5cdE5TID0gJ21mcCcsXG5cdEVWRU5UX05TID0gJy4nICsgTlMsXG5cdFJFQURZX0NMQVNTID0gJ21mcC1yZWFkeScsXG5cdFJFTU9WSU5HX0NMQVNTID0gJ21mcC1yZW1vdmluZycsXG5cdFBSRVZFTlRfQ0xPU0VfQ0xBU1MgPSAnbWZwLXByZXZlbnQtY2xvc2UnO1xuXG5cbi8qKlxuICogUHJpdmF0ZSB2YXJzIFxuICovXG4vKmpzaGludCAtVzA3OSAqL1xudmFyIG1mcCwgLy8gQXMgd2UgaGF2ZSBvbmx5IG9uZSBpbnN0YW5jZSBvZiBNYWduaWZpY1BvcHVwIG9iamVjdCwgd2UgZGVmaW5lIGl0IGxvY2FsbHkgdG8gbm90IHRvIHVzZSAndGhpcydcblx0TWFnbmlmaWNQb3B1cCA9IGZ1bmN0aW9uKCl7fSxcblx0X2lzSlEgPSAhISh3aW5kb3cualF1ZXJ5KSxcblx0X3ByZXZTdGF0dXMsXG5cdF93aW5kb3cgPSAkKHdpbmRvdyksXG5cdF9kb2N1bWVudCxcblx0X3ByZXZDb250ZW50VHlwZSxcblx0X3dyYXBDbGFzc2VzLFxuXHRfY3VyclBvcHVwVHlwZTtcblxuXG4vKipcbiAqIFByaXZhdGUgZnVuY3Rpb25zXG4gKi9cbnZhciBfbWZwT24gPSBmdW5jdGlvbihuYW1lLCBmKSB7XG5cdFx0bWZwLmV2Lm9uKE5TICsgbmFtZSArIEVWRU5UX05TLCBmKTtcblx0fSxcblx0X2dldEVsID0gZnVuY3Rpb24oY2xhc3NOYW1lLCBhcHBlbmRUbywgaHRtbCwgcmF3KSB7XG5cdFx0dmFyIGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG5cdFx0ZWwuY2xhc3NOYW1lID0gJ21mcC0nK2NsYXNzTmFtZTtcblx0XHRpZihodG1sKSB7XG5cdFx0XHRlbC5pbm5lckhUTUwgPSBodG1sO1xuXHRcdH1cblx0XHRpZighcmF3KSB7XG5cdFx0XHRlbCA9ICQoZWwpO1xuXHRcdFx0aWYoYXBwZW5kVG8pIHtcblx0XHRcdFx0ZWwuYXBwZW5kVG8oYXBwZW5kVG8pO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZihhcHBlbmRUbykge1xuXHRcdFx0YXBwZW5kVG8uYXBwZW5kQ2hpbGQoZWwpO1xuXHRcdH1cblx0XHRyZXR1cm4gZWw7XG5cdH0sXG5cdF9tZnBUcmlnZ2VyID0gZnVuY3Rpb24oZSwgZGF0YSkge1xuXHRcdG1mcC5ldi50cmlnZ2VySGFuZGxlcihOUyArIGUsIGRhdGEpO1xuXG5cdFx0aWYobWZwLnN0LmNhbGxiYWNrcykge1xuXHRcdFx0Ly8gY29udmVydHMgXCJtZnBFdmVudE5hbWVcIiB0byBcImV2ZW50TmFtZVwiIGNhbGxiYWNrIGFuZCB0cmlnZ2VycyBpdCBpZiBpdCdzIHByZXNlbnRcblx0XHRcdGUgPSBlLmNoYXJBdCgwKS50b0xvd2VyQ2FzZSgpICsgZS5zbGljZSgxKTtcblx0XHRcdGlmKG1mcC5zdC5jYWxsYmFja3NbZV0pIHtcblx0XHRcdFx0bWZwLnN0LmNhbGxiYWNrc1tlXS5hcHBseShtZnAsICQuaXNBcnJheShkYXRhKSA/IGRhdGEgOiBbZGF0YV0pO1xuXHRcdFx0fVxuXHRcdH1cblx0fSxcblx0X2dldENsb3NlQnRuID0gZnVuY3Rpb24odHlwZSkge1xuXHRcdGlmKHR5cGUgIT09IF9jdXJyUG9wdXBUeXBlIHx8ICFtZnAuY3VyclRlbXBsYXRlLmNsb3NlQnRuKSB7XG5cdFx0XHRtZnAuY3VyclRlbXBsYXRlLmNsb3NlQnRuID0gJCggbWZwLnN0LmNsb3NlTWFya3VwLnJlcGxhY2UoJyV0aXRsZSUnLCBtZnAuc3QudENsb3NlICkgKTtcblx0XHRcdF9jdXJyUG9wdXBUeXBlID0gdHlwZTtcblx0XHR9XG5cdFx0cmV0dXJuIG1mcC5jdXJyVGVtcGxhdGUuY2xvc2VCdG47XG5cdH0sXG5cdC8vIEluaXRpYWxpemUgTWFnbmlmaWMgUG9wdXAgb25seSB3aGVuIGNhbGxlZCBhdCBsZWFzdCBvbmNlXG5cdF9jaGVja0luc3RhbmNlID0gZnVuY3Rpb24oKSB7XG5cdFx0aWYoISQubWFnbmlmaWNQb3B1cC5pbnN0YW5jZSkge1xuXHRcdFx0Lypqc2hpbnQgLVcwMjAgKi9cblx0XHRcdG1mcCA9IG5ldyBNYWduaWZpY1BvcHVwKCk7XG5cdFx0XHRtZnAuaW5pdCgpO1xuXHRcdFx0JC5tYWduaWZpY1BvcHVwLmluc3RhbmNlID0gbWZwO1xuXHRcdH1cblx0fSxcblx0Ly8gQ1NTIHRyYW5zaXRpb24gZGV0ZWN0aW9uLCBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzcyNjQ4OTkvZGV0ZWN0LWNzcy10cmFuc2l0aW9ucy11c2luZy1qYXZhc2NyaXB0LWFuZC13aXRob3V0LW1vZGVybml6clxuXHRzdXBwb3J0c1RyYW5zaXRpb25zID0gZnVuY3Rpb24oKSB7XG5cdFx0dmFyIHMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdwJykuc3R5bGUsIC8vICdzJyBmb3Igc3R5bGUuIGJldHRlciB0byBjcmVhdGUgYW4gZWxlbWVudCBpZiBib2R5IHlldCB0byBleGlzdFxuXHRcdFx0diA9IFsnbXMnLCdPJywnTW96JywnV2Via2l0J107IC8vICd2JyBmb3IgdmVuZG9yXG5cblx0XHRpZiggc1sndHJhbnNpdGlvbiddICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTsgXG5cdFx0fVxuXHRcdFx0XG5cdFx0d2hpbGUoIHYubGVuZ3RoICkge1xuXHRcdFx0aWYoIHYucG9wKCkgKyAnVHJhbnNpdGlvbicgaW4gcyApIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdFx0XHRcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH07XG5cblxuXG4vKipcbiAqIFB1YmxpYyBmdW5jdGlvbnNcbiAqL1xuTWFnbmlmaWNQb3B1cC5wcm90b3R5cGUgPSB7XG5cblx0Y29uc3RydWN0b3I6IE1hZ25pZmljUG9wdXAsXG5cblx0LyoqXG5cdCAqIEluaXRpYWxpemVzIE1hZ25pZmljIFBvcHVwIHBsdWdpbi4gXG5cdCAqIFRoaXMgZnVuY3Rpb24gaXMgdHJpZ2dlcmVkIG9ubHkgb25jZSB3aGVuICQuZm4ubWFnbmlmaWNQb3B1cCBvciAkLm1hZ25pZmljUG9wdXAgaXMgZXhlY3V0ZWRcblx0ICovXG5cdGluaXQ6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBhcHBWZXJzaW9uID0gbmF2aWdhdG9yLmFwcFZlcnNpb247XG5cdFx0bWZwLmlzTG93SUUgPSBtZnAuaXNJRTggPSBkb2N1bWVudC5hbGwgJiYgIWRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXI7XG5cdFx0bWZwLmlzQW5kcm9pZCA9ICgvYW5kcm9pZC9naSkudGVzdChhcHBWZXJzaW9uKTtcblx0XHRtZnAuaXNJT1MgPSAoL2lwaG9uZXxpcGFkfGlwb2QvZ2kpLnRlc3QoYXBwVmVyc2lvbik7XG5cdFx0bWZwLnN1cHBvcnRzVHJhbnNpdGlvbiA9IHN1cHBvcnRzVHJhbnNpdGlvbnMoKTtcblxuXHRcdC8vIFdlIGRpc2FibGUgZml4ZWQgcG9zaXRpb25lZCBsaWdodGJveCBvbiBkZXZpY2VzIHRoYXQgZG9uJ3QgaGFuZGxlIGl0IG5pY2VseS5cblx0XHQvLyBJZiB5b3Uga25vdyBhIGJldHRlciB3YXkgb2YgZGV0ZWN0aW5nIHRoaXMgLSBsZXQgbWUga25vdy5cblx0XHRtZnAucHJvYmFibHlNb2JpbGUgPSAobWZwLmlzQW5kcm9pZCB8fCBtZnAuaXNJT1MgfHwgLyhPcGVyYSBNaW5pKXxLaW5kbGV8d2ViT1N8QmxhY2tCZXJyeXwoT3BlcmEgTW9iaSl8KFdpbmRvd3MgUGhvbmUpfElFTW9iaWxlL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSApO1xuXHRcdF9kb2N1bWVudCA9ICQoZG9jdW1lbnQpO1xuXG5cdFx0bWZwLnBvcHVwc0NhY2hlID0ge307XG5cdH0sXG5cblx0LyoqXG5cdCAqIE9wZW5zIHBvcHVwXG5cdCAqIEBwYXJhbSAgZGF0YSBbZGVzY3JpcHRpb25dXG5cdCAqL1xuXHRvcGVuOiBmdW5jdGlvbihkYXRhKSB7XG5cblx0XHR2YXIgaTtcblxuXHRcdGlmKGRhdGEuaXNPYmogPT09IGZhbHNlKSB7IFxuXHRcdFx0Ly8gY29udmVydCBqUXVlcnkgY29sbGVjdGlvbiB0byBhcnJheSB0byBhdm9pZCBjb25mbGljdHMgbGF0ZXJcblx0XHRcdG1mcC5pdGVtcyA9IGRhdGEuaXRlbXMudG9BcnJheSgpO1xuXG5cdFx0XHRtZnAuaW5kZXggPSAwO1xuXHRcdFx0dmFyIGl0ZW1zID0gZGF0YS5pdGVtcyxcblx0XHRcdFx0aXRlbTtcblx0XHRcdGZvcihpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdGl0ZW0gPSBpdGVtc1tpXTtcblx0XHRcdFx0aWYoaXRlbS5wYXJzZWQpIHtcblx0XHRcdFx0XHRpdGVtID0gaXRlbS5lbFswXTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZihpdGVtID09PSBkYXRhLmVsWzBdKSB7XG5cdFx0XHRcdFx0bWZwLmluZGV4ID0gaTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRtZnAuaXRlbXMgPSAkLmlzQXJyYXkoZGF0YS5pdGVtcykgPyBkYXRhLml0ZW1zIDogW2RhdGEuaXRlbXNdO1xuXHRcdFx0bWZwLmluZGV4ID0gZGF0YS5pbmRleCB8fCAwO1xuXHRcdH1cblxuXHRcdC8vIGlmIHBvcHVwIGlzIGFscmVhZHkgb3BlbmVkIC0gd2UganVzdCB1cGRhdGUgdGhlIGNvbnRlbnRcblx0XHRpZihtZnAuaXNPcGVuKSB7XG5cdFx0XHRtZnAudXBkYXRlSXRlbUhUTUwoKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0XG5cdFx0bWZwLnR5cGVzID0gW107IFxuXHRcdF93cmFwQ2xhc3NlcyA9ICcnO1xuXHRcdGlmKGRhdGEubWFpbkVsICYmIGRhdGEubWFpbkVsLmxlbmd0aCkge1xuXHRcdFx0bWZwLmV2ID0gZGF0YS5tYWluRWwuZXEoMCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdG1mcC5ldiA9IF9kb2N1bWVudDtcblx0XHR9XG5cblx0XHRpZihkYXRhLmtleSkge1xuXHRcdFx0aWYoIW1mcC5wb3B1cHNDYWNoZVtkYXRhLmtleV0pIHtcblx0XHRcdFx0bWZwLnBvcHVwc0NhY2hlW2RhdGEua2V5XSA9IHt9O1xuXHRcdFx0fVxuXHRcdFx0bWZwLmN1cnJUZW1wbGF0ZSA9IG1mcC5wb3B1cHNDYWNoZVtkYXRhLmtleV07XG5cdFx0fSBlbHNlIHtcblx0XHRcdG1mcC5jdXJyVGVtcGxhdGUgPSB7fTtcblx0XHR9XG5cblxuXG5cdFx0bWZwLnN0ID0gJC5leHRlbmQodHJ1ZSwge30sICQubWFnbmlmaWNQb3B1cC5kZWZhdWx0cywgZGF0YSApOyBcblx0XHRtZnAuZml4ZWRDb250ZW50UG9zID0gbWZwLnN0LmZpeGVkQ29udGVudFBvcyA9PT0gJ2F1dG8nID8gIW1mcC5wcm9iYWJseU1vYmlsZSA6IG1mcC5zdC5maXhlZENvbnRlbnRQb3M7XG5cblx0XHRpZihtZnAuc3QubW9kYWwpIHtcblx0XHRcdG1mcC5zdC5jbG9zZU9uQ29udGVudENsaWNrID0gZmFsc2U7XG5cdFx0XHRtZnAuc3QuY2xvc2VPbkJnQ2xpY2sgPSBmYWxzZTtcblx0XHRcdG1mcC5zdC5zaG93Q2xvc2VCdG4gPSBmYWxzZTtcblx0XHRcdG1mcC5zdC5lbmFibGVFc2NhcGVLZXkgPSBmYWxzZTtcblx0XHR9XG5cdFx0XG5cblx0XHQvLyBCdWlsZGluZyBtYXJrdXBcblx0XHQvLyBtYWluIGNvbnRhaW5lcnMgYXJlIGNyZWF0ZWQgb25seSBvbmNlXG5cdFx0aWYoIW1mcC5iZ092ZXJsYXkpIHtcblxuXHRcdFx0Ly8gRGFyayBvdmVybGF5XG5cdFx0XHRtZnAuYmdPdmVybGF5ID0gX2dldEVsKCdiZycpLm9uKCdjbGljaycrRVZFTlRfTlMsIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRtZnAuY2xvc2UoKTtcblx0XHRcdH0pO1xuXG5cdFx0XHRtZnAud3JhcCA9IF9nZXRFbCgnd3JhcCcpLmF0dHIoJ3RhYmluZGV4JywgLTEpLm9uKCdjbGljaycrRVZFTlRfTlMsIGZ1bmN0aW9uKGUpIHtcblx0XHRcdFx0aWYobWZwLl9jaGVja0lmQ2xvc2UoZS50YXJnZXQpKSB7XG5cdFx0XHRcdFx0bWZwLmNsb3NlKCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXG5cdFx0XHRtZnAuY29udGFpbmVyID0gX2dldEVsKCdjb250YWluZXInLCBtZnAud3JhcCk7XG5cdFx0fVxuXG5cdFx0bWZwLmNvbnRlbnRDb250YWluZXIgPSBfZ2V0RWwoJ2NvbnRlbnQnKTtcblx0XHRpZihtZnAuc3QucHJlbG9hZGVyKSB7XG5cdFx0XHRtZnAucHJlbG9hZGVyID0gX2dldEVsKCdwcmVsb2FkZXInLCBtZnAuY29udGFpbmVyLCBtZnAuc3QudExvYWRpbmcpO1xuXHRcdH1cblxuXG5cdFx0Ly8gSW5pdGlhbGl6aW5nIG1vZHVsZXNcblx0XHR2YXIgbW9kdWxlcyA9ICQubWFnbmlmaWNQb3B1cC5tb2R1bGVzO1xuXHRcdGZvcihpID0gMDsgaSA8IG1vZHVsZXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdHZhciBuID0gbW9kdWxlc1tpXTtcblx0XHRcdG4gPSBuLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgbi5zbGljZSgxKTtcblx0XHRcdG1mcFsnaW5pdCcrbl0uY2FsbChtZnApO1xuXHRcdH1cblx0XHRfbWZwVHJpZ2dlcignQmVmb3JlT3BlbicpO1xuXG5cblx0XHRpZihtZnAuc3Quc2hvd0Nsb3NlQnRuKSB7XG5cdFx0XHQvLyBDbG9zZSBidXR0b25cblx0XHRcdGlmKCFtZnAuc3QuY2xvc2VCdG5JbnNpZGUpIHtcblx0XHRcdFx0bWZwLndyYXAuYXBwZW5kKCBfZ2V0Q2xvc2VCdG4oKSApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0X21mcE9uKE1BUktVUF9QQVJTRV9FVkVOVCwgZnVuY3Rpb24oZSwgdGVtcGxhdGUsIHZhbHVlcywgaXRlbSkge1xuXHRcdFx0XHRcdHZhbHVlcy5jbG9zZV9yZXBsYWNlV2l0aCA9IF9nZXRDbG9zZUJ0bihpdGVtLnR5cGUpO1xuXHRcdFx0XHR9KTtcblx0XHRcdFx0X3dyYXBDbGFzc2VzICs9ICcgbWZwLWNsb3NlLWJ0bi1pbic7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYobWZwLnN0LmFsaWduVG9wKSB7XG5cdFx0XHRfd3JhcENsYXNzZXMgKz0gJyBtZnAtYWxpZ24tdG9wJztcblx0XHR9XG5cblx0XG5cblx0XHRpZihtZnAuZml4ZWRDb250ZW50UG9zKSB7XG5cdFx0XHRtZnAud3JhcC5jc3Moe1xuXHRcdFx0XHRvdmVyZmxvdzogbWZwLnN0Lm92ZXJmbG93WSxcblx0XHRcdFx0b3ZlcmZsb3dYOiAnaGlkZGVuJyxcblx0XHRcdFx0b3ZlcmZsb3dZOiBtZnAuc3Qub3ZlcmZsb3dZXG5cdFx0XHR9KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0bWZwLndyYXAuY3NzKHsgXG5cdFx0XHRcdHRvcDogX3dpbmRvdy5zY3JvbGxUb3AoKSxcblx0XHRcdFx0cG9zaXRpb246ICdhYnNvbHV0ZSdcblx0XHRcdH0pO1xuXHRcdH1cblx0XHRpZiggbWZwLnN0LmZpeGVkQmdQb3MgPT09IGZhbHNlIHx8IChtZnAuc3QuZml4ZWRCZ1BvcyA9PT0gJ2F1dG8nICYmICFtZnAuZml4ZWRDb250ZW50UG9zKSApIHtcblx0XHRcdG1mcC5iZ092ZXJsYXkuY3NzKHtcblx0XHRcdFx0aGVpZ2h0OiBfZG9jdW1lbnQuaGVpZ2h0KCksXG5cdFx0XHRcdHBvc2l0aW9uOiAnYWJzb2x1dGUnXG5cdFx0XHR9KTtcblx0XHR9XG5cblx0XHRcblxuXHRcdGlmKG1mcC5zdC5lbmFibGVFc2NhcGVLZXkpIHtcblx0XHRcdC8vIENsb3NlIG9uIEVTQyBrZXlcblx0XHRcdF9kb2N1bWVudC5vbigna2V5dXAnICsgRVZFTlRfTlMsIGZ1bmN0aW9uKGUpIHtcblx0XHRcdFx0aWYoZS5rZXlDb2RlID09PSAyNykge1xuXHRcdFx0XHRcdG1mcC5jbG9zZSgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cblx0XHRfd2luZG93Lm9uKCdyZXNpemUnICsgRVZFTlRfTlMsIGZ1bmN0aW9uKCkge1xuXHRcdFx0bWZwLnVwZGF0ZVNpemUoKTtcblx0XHR9KTtcblxuXG5cdFx0aWYoIW1mcC5zdC5jbG9zZU9uQ29udGVudENsaWNrKSB7XG5cdFx0XHRfd3JhcENsYXNzZXMgKz0gJyBtZnAtYXV0by1jdXJzb3InO1xuXHRcdH1cblx0XHRcblx0XHRpZihfd3JhcENsYXNzZXMpXG5cdFx0XHRtZnAud3JhcC5hZGRDbGFzcyhfd3JhcENsYXNzZXMpO1xuXG5cblx0XHQvLyB0aGlzIHRyaWdnZXJzIHJlY2FsY3VsYXRpb24gb2YgbGF5b3V0LCBzbyB3ZSBnZXQgaXQgb25jZSB0byBub3QgdG8gdHJpZ2dlciB0d2ljZVxuXHRcdHZhciB3aW5kb3dIZWlnaHQgPSBtZnAud0ggPSBfd2luZG93LmhlaWdodCgpO1xuXG5cdFx0XG5cdFx0dmFyIHdpbmRvd1N0eWxlcyA9IHt9O1xuXG5cdFx0aWYoIG1mcC5maXhlZENvbnRlbnRQb3MgKSB7XG4gICAgICAgICAgICBpZihtZnAuX2hhc1Njcm9sbEJhcih3aW5kb3dIZWlnaHQpKXtcbiAgICAgICAgICAgICAgICB2YXIgcyA9IG1mcC5fZ2V0U2Nyb2xsYmFyU2l6ZSgpO1xuICAgICAgICAgICAgICAgIGlmKHMpIHtcbiAgICAgICAgICAgICAgICAgICAgd2luZG93U3R5bGVzLm1hcmdpblJpZ2h0ID0gcztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuXHRcdGlmKG1mcC5maXhlZENvbnRlbnRQb3MpIHtcblx0XHRcdGlmKCFtZnAuaXNJRTcpIHtcblx0XHRcdFx0d2luZG93U3R5bGVzLm92ZXJmbG93ID0gJ2hpZGRlbic7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvLyBpZTcgZG91YmxlLXNjcm9sbCBidWdcblx0XHRcdFx0JCgnYm9keSwgaHRtbCcpLmNzcygnb3ZlcmZsb3cnLCAnaGlkZGVuJyk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0XG5cdFx0XG5cdFx0dmFyIGNsYXNzZXNUb2FkZCA9IG1mcC5zdC5tYWluQ2xhc3M7XG5cdFx0aWYobWZwLmlzSUU3KSB7XG5cdFx0XHRjbGFzc2VzVG9hZGQgKz0gJyBtZnAtaWU3Jztcblx0XHR9XG5cdFx0aWYoY2xhc3Nlc1RvYWRkKSB7XG5cdFx0XHRtZnAuX2FkZENsYXNzVG9NRlAoIGNsYXNzZXNUb2FkZCApO1xuXHRcdH1cblxuXHRcdC8vIGFkZCBjb250ZW50XG5cdFx0bWZwLnVwZGF0ZUl0ZW1IVE1MKCk7XG5cblx0XHRfbWZwVHJpZ2dlcignQnVpbGRDb250cm9scycpO1xuXG5cdFx0Ly8gcmVtb3ZlIHNjcm9sbGJhciwgYWRkIG1hcmdpbiBlLnQuY1xuXHRcdCQoJ2h0bWwnKS5jc3Mod2luZG93U3R5bGVzKTtcblx0XHRcblx0XHQvLyBhZGQgZXZlcnl0aGluZyB0byBET01cblx0XHRtZnAuYmdPdmVybGF5LmFkZChtZnAud3JhcCkucHJlcGVuZFRvKCBtZnAuc3QucHJlcGVuZFRvIHx8ICQoZG9jdW1lbnQuYm9keSkgKTtcblxuXHRcdC8vIFNhdmUgbGFzdCBmb2N1c2VkIGVsZW1lbnRcblx0XHRtZnAuX2xhc3RGb2N1c2VkRWwgPSBkb2N1bWVudC5hY3RpdmVFbGVtZW50O1xuXHRcdFxuXHRcdC8vIFdhaXQgZm9yIG5leHQgY3ljbGUgdG8gYWxsb3cgQ1NTIHRyYW5zaXRpb25cblx0XHRzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuXHRcdFx0XG5cdFx0XHRpZihtZnAuY29udGVudCkge1xuXHRcdFx0XHRtZnAuX2FkZENsYXNzVG9NRlAoUkVBRFlfQ0xBU1MpO1xuXHRcdFx0XHRtZnAuX3NldEZvY3VzKCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvLyBpZiBjb250ZW50IGlzIG5vdCBkZWZpbmVkIChub3QgbG9hZGVkIGUudC5jKSB3ZSBhZGQgY2xhc3Mgb25seSBmb3IgQkdcblx0XHRcdFx0bWZwLmJnT3ZlcmxheS5hZGRDbGFzcyhSRUFEWV9DTEFTUyk7XG5cdFx0XHR9XG5cdFx0XHRcblx0XHRcdC8vIFRyYXAgdGhlIGZvY3VzIGluIHBvcHVwXG5cdFx0XHRfZG9jdW1lbnQub24oJ2ZvY3VzaW4nICsgRVZFTlRfTlMsIG1mcC5fb25Gb2N1c0luKTtcblxuXHRcdH0sIDE2KTtcblxuXHRcdG1mcC5pc09wZW4gPSB0cnVlO1xuXHRcdG1mcC51cGRhdGVTaXplKHdpbmRvd0hlaWdodCk7XG5cdFx0X21mcFRyaWdnZXIoT1BFTl9FVkVOVCk7XG5cblx0XHRyZXR1cm4gZGF0YTtcblx0fSxcblxuXHQvKipcblx0ICogQ2xvc2VzIHRoZSBwb3B1cFxuXHQgKi9cblx0Y2xvc2U6IGZ1bmN0aW9uKCkge1xuXHRcdGlmKCFtZnAuaXNPcGVuKSByZXR1cm47XG5cdFx0X21mcFRyaWdnZXIoQkVGT1JFX0NMT1NFX0VWRU5UKTtcblxuXHRcdG1mcC5pc09wZW4gPSBmYWxzZTtcblx0XHQvLyBmb3IgQ1NTMyBhbmltYXRpb25cblx0XHRpZihtZnAuc3QucmVtb3ZhbERlbGF5ICYmICFtZnAuaXNMb3dJRSAmJiBtZnAuc3VwcG9ydHNUcmFuc2l0aW9uICkgIHtcblx0XHRcdG1mcC5fYWRkQ2xhc3NUb01GUChSRU1PVklOR19DTEFTUyk7XG5cdFx0XHRzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRtZnAuX2Nsb3NlKCk7XG5cdFx0XHR9LCBtZnAuc3QucmVtb3ZhbERlbGF5KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0bWZwLl9jbG9zZSgpO1xuXHRcdH1cblx0fSxcblxuXHQvKipcblx0ICogSGVscGVyIGZvciBjbG9zZSgpIGZ1bmN0aW9uXG5cdCAqL1xuXHRfY2xvc2U6IGZ1bmN0aW9uKCkge1xuXHRcdF9tZnBUcmlnZ2VyKENMT1NFX0VWRU5UKTtcblxuXHRcdHZhciBjbGFzc2VzVG9SZW1vdmUgPSBSRU1PVklOR19DTEFTUyArICcgJyArIFJFQURZX0NMQVNTICsgJyAnO1xuXG5cdFx0bWZwLmJnT3ZlcmxheS5kZXRhY2goKTtcblx0XHRtZnAud3JhcC5kZXRhY2goKTtcblx0XHRtZnAuY29udGFpbmVyLmVtcHR5KCk7XG5cblx0XHRpZihtZnAuc3QubWFpbkNsYXNzKSB7XG5cdFx0XHRjbGFzc2VzVG9SZW1vdmUgKz0gbWZwLnN0Lm1haW5DbGFzcyArICcgJztcblx0XHR9XG5cblx0XHRtZnAuX3JlbW92ZUNsYXNzRnJvbU1GUChjbGFzc2VzVG9SZW1vdmUpO1xuXG5cdFx0aWYobWZwLmZpeGVkQ29udGVudFBvcykge1xuXHRcdFx0dmFyIHdpbmRvd1N0eWxlcyA9IHttYXJnaW5SaWdodDogJyd9O1xuXHRcdFx0aWYobWZwLmlzSUU3KSB7XG5cdFx0XHRcdCQoJ2JvZHksIGh0bWwnKS5jc3MoJ292ZXJmbG93JywgJycpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0d2luZG93U3R5bGVzLm92ZXJmbG93ID0gJyc7XG5cdFx0XHR9XG5cdFx0XHQkKCdodG1sJykuY3NzKHdpbmRvd1N0eWxlcyk7XG5cdFx0fVxuXHRcdFxuXHRcdF9kb2N1bWVudC5vZmYoJ2tleXVwJyArIEVWRU5UX05TICsgJyBmb2N1c2luJyArIEVWRU5UX05TKTtcblx0XHRtZnAuZXYub2ZmKEVWRU5UX05TKTtcblxuXHRcdC8vIGNsZWFuIHVwIERPTSBlbGVtZW50cyB0aGF0IGFyZW4ndCByZW1vdmVkXG5cdFx0bWZwLndyYXAuYXR0cignY2xhc3MnLCAnbWZwLXdyYXAnKS5yZW1vdmVBdHRyKCdzdHlsZScpO1xuXHRcdG1mcC5iZ092ZXJsYXkuYXR0cignY2xhc3MnLCAnbWZwLWJnJyk7XG5cdFx0bWZwLmNvbnRhaW5lci5hdHRyKCdjbGFzcycsICdtZnAtY29udGFpbmVyJyk7XG5cblx0XHQvLyByZW1vdmUgY2xvc2UgYnV0dG9uIGZyb20gdGFyZ2V0IGVsZW1lbnRcblx0XHRpZihtZnAuc3Quc2hvd0Nsb3NlQnRuICYmXG5cdFx0KCFtZnAuc3QuY2xvc2VCdG5JbnNpZGUgfHwgbWZwLmN1cnJUZW1wbGF0ZVttZnAuY3Vyckl0ZW0udHlwZV0gPT09IHRydWUpKSB7XG5cdFx0XHRpZihtZnAuY3VyclRlbXBsYXRlLmNsb3NlQnRuKVxuXHRcdFx0XHRtZnAuY3VyclRlbXBsYXRlLmNsb3NlQnRuLmRldGFjaCgpO1xuXHRcdH1cblxuXG5cdFx0aWYobWZwLnN0LmF1dG9Gb2N1c0xhc3QgJiYgbWZwLl9sYXN0Rm9jdXNlZEVsKSB7XG5cdFx0XHQkKG1mcC5fbGFzdEZvY3VzZWRFbCkuZm9jdXMoKTsgLy8gcHV0IHRhYiBmb2N1cyBiYWNrXG5cdFx0fVxuXHRcdG1mcC5jdXJySXRlbSA9IG51bGw7XHRcblx0XHRtZnAuY29udGVudCA9IG51bGw7XG5cdFx0bWZwLmN1cnJUZW1wbGF0ZSA9IG51bGw7XG5cdFx0bWZwLnByZXZIZWlnaHQgPSAwO1xuXG5cdFx0X21mcFRyaWdnZXIoQUZURVJfQ0xPU0VfRVZFTlQpO1xuXHR9LFxuXHRcblx0dXBkYXRlU2l6ZTogZnVuY3Rpb24od2luSGVpZ2h0KSB7XG5cblx0XHRpZihtZnAuaXNJT1MpIHtcblx0XHRcdC8vIGZpeGVzIGlPUyBuYXYgYmFycyBodHRwczovL2dpdGh1Yi5jb20vZGltc2VtZW5vdi9NYWduaWZpYy1Qb3B1cC9pc3N1ZXMvMlxuXHRcdFx0dmFyIHpvb21MZXZlbCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aCAvIHdpbmRvdy5pbm5lcldpZHRoO1xuXHRcdFx0dmFyIGhlaWdodCA9IHdpbmRvdy5pbm5lckhlaWdodCAqIHpvb21MZXZlbDtcblx0XHRcdG1mcC53cmFwLmNzcygnaGVpZ2h0JywgaGVpZ2h0KTtcblx0XHRcdG1mcC53SCA9IGhlaWdodDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0bWZwLndIID0gd2luSGVpZ2h0IHx8IF93aW5kb3cuaGVpZ2h0KCk7XG5cdFx0fVxuXHRcdC8vIEZpeGVzICM4NDogcG9wdXAgaW5jb3JyZWN0bHkgcG9zaXRpb25lZCB3aXRoIHBvc2l0aW9uOnJlbGF0aXZlIG9uIGJvZHlcblx0XHRpZighbWZwLmZpeGVkQ29udGVudFBvcykge1xuXHRcdFx0bWZwLndyYXAuY3NzKCdoZWlnaHQnLCBtZnAud0gpO1xuXHRcdH1cblxuXHRcdF9tZnBUcmlnZ2VyKCdSZXNpemUnKTtcblxuXHR9LFxuXG5cdC8qKlxuXHQgKiBTZXQgY29udGVudCBvZiBwb3B1cCBiYXNlZCBvbiBjdXJyZW50IGluZGV4XG5cdCAqL1xuXHR1cGRhdGVJdGVtSFRNTDogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGl0ZW0gPSBtZnAuaXRlbXNbbWZwLmluZGV4XTtcblxuXHRcdC8vIERldGFjaCBhbmQgcGVyZm9ybSBtb2RpZmljYXRpb25zXG5cdFx0bWZwLmNvbnRlbnRDb250YWluZXIuZGV0YWNoKCk7XG5cblx0XHRpZihtZnAuY29udGVudClcblx0XHRcdG1mcC5jb250ZW50LmRldGFjaCgpO1xuXG5cdFx0aWYoIWl0ZW0ucGFyc2VkKSB7XG5cdFx0XHRpdGVtID0gbWZwLnBhcnNlRWwoIG1mcC5pbmRleCApO1xuXHRcdH1cblxuXHRcdHZhciB0eXBlID0gaXRlbS50eXBlO1xuXG5cdFx0X21mcFRyaWdnZXIoJ0JlZm9yZUNoYW5nZScsIFttZnAuY3Vyckl0ZW0gPyBtZnAuY3Vyckl0ZW0udHlwZSA6ICcnLCB0eXBlXSk7XG5cdFx0Ly8gQmVmb3JlQ2hhbmdlIGV2ZW50IHdvcmtzIGxpa2Ugc286XG5cdFx0Ly8gX21mcE9uKCdCZWZvcmVDaGFuZ2UnLCBmdW5jdGlvbihlLCBwcmV2VHlwZSwgbmV3VHlwZSkgeyB9KTtcblxuXHRcdG1mcC5jdXJySXRlbSA9IGl0ZW07XG5cblx0XHRpZighbWZwLmN1cnJUZW1wbGF0ZVt0eXBlXSkge1xuXHRcdFx0dmFyIG1hcmt1cCA9IG1mcC5zdFt0eXBlXSA/IG1mcC5zdFt0eXBlXS5tYXJrdXAgOiBmYWxzZTtcblxuXHRcdFx0Ly8gYWxsb3dzIHRvIG1vZGlmeSBtYXJrdXBcblx0XHRcdF9tZnBUcmlnZ2VyKCdGaXJzdE1hcmt1cFBhcnNlJywgbWFya3VwKTtcblxuXHRcdFx0aWYobWFya3VwKSB7XG5cdFx0XHRcdG1mcC5jdXJyVGVtcGxhdGVbdHlwZV0gPSAkKG1hcmt1cCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvLyBpZiB0aGVyZSBpcyBubyBtYXJrdXAgZm91bmQgd2UganVzdCBkZWZpbmUgdGhhdCB0ZW1wbGF0ZSBpcyBwYXJzZWRcblx0XHRcdFx0bWZwLmN1cnJUZW1wbGF0ZVt0eXBlXSA9IHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYoX3ByZXZDb250ZW50VHlwZSAmJiBfcHJldkNvbnRlbnRUeXBlICE9PSBpdGVtLnR5cGUpIHtcblx0XHRcdG1mcC5jb250YWluZXIucmVtb3ZlQ2xhc3MoJ21mcC0nK19wcmV2Q29udGVudFR5cGUrJy1ob2xkZXInKTtcblx0XHR9XG5cblx0XHR2YXIgbmV3Q29udGVudCA9IG1mcFsnZ2V0JyArIHR5cGUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyB0eXBlLnNsaWNlKDEpXShpdGVtLCBtZnAuY3VyclRlbXBsYXRlW3R5cGVdKTtcblx0XHRtZnAuYXBwZW5kQ29udGVudChuZXdDb250ZW50LCB0eXBlKTtcblxuXHRcdGl0ZW0ucHJlbG9hZGVkID0gdHJ1ZTtcblxuXHRcdF9tZnBUcmlnZ2VyKENIQU5HRV9FVkVOVCwgaXRlbSk7XG5cdFx0X3ByZXZDb250ZW50VHlwZSA9IGl0ZW0udHlwZTtcblxuXHRcdC8vIEFwcGVuZCBjb250YWluZXIgYmFjayBhZnRlciBpdHMgY29udGVudCBjaGFuZ2VkXG5cdFx0bWZwLmNvbnRhaW5lci5wcmVwZW5kKG1mcC5jb250ZW50Q29udGFpbmVyKTtcblxuXHRcdF9tZnBUcmlnZ2VyKCdBZnRlckNoYW5nZScpO1xuXHR9LFxuXG5cblx0LyoqXG5cdCAqIFNldCBIVE1MIGNvbnRlbnQgb2YgcG9wdXBcblx0ICovXG5cdGFwcGVuZENvbnRlbnQ6IGZ1bmN0aW9uKG5ld0NvbnRlbnQsIHR5cGUpIHtcblx0XHRtZnAuY29udGVudCA9IG5ld0NvbnRlbnQ7XG5cblx0XHRpZihuZXdDb250ZW50KSB7XG5cdFx0XHRpZihtZnAuc3Quc2hvd0Nsb3NlQnRuICYmIG1mcC5zdC5jbG9zZUJ0bkluc2lkZSAmJlxuXHRcdFx0XHRtZnAuY3VyclRlbXBsYXRlW3R5cGVdID09PSB0cnVlKSB7XG5cdFx0XHRcdC8vIGlmIHRoZXJlIGlzIG5vIG1hcmt1cCwgd2UganVzdCBhcHBlbmQgY2xvc2UgYnV0dG9uIGVsZW1lbnQgaW5zaWRlXG5cdFx0XHRcdGlmKCFtZnAuY29udGVudC5maW5kKCcubWZwLWNsb3NlJykubGVuZ3RoKSB7XG5cdFx0XHRcdFx0bWZwLmNvbnRlbnQuYXBwZW5kKF9nZXRDbG9zZUJ0bigpKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0bWZwLmNvbnRlbnQgPSBuZXdDb250ZW50O1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRtZnAuY29udGVudCA9ICcnO1xuXHRcdH1cblxuXHRcdF9tZnBUcmlnZ2VyKEJFRk9SRV9BUFBFTkRfRVZFTlQpO1xuXHRcdG1mcC5jb250YWluZXIuYWRkQ2xhc3MoJ21mcC0nK3R5cGUrJy1ob2xkZXInKTtcblxuXHRcdG1mcC5jb250ZW50Q29udGFpbmVyLmFwcGVuZChtZnAuY29udGVudCk7XG5cdH0sXG5cblxuXHQvKipcblx0ICogQ3JlYXRlcyBNYWduaWZpYyBQb3B1cCBkYXRhIG9iamVjdCBiYXNlZCBvbiBnaXZlbiBkYXRhXG5cdCAqIEBwYXJhbSAge2ludH0gaW5kZXggSW5kZXggb2YgaXRlbSB0byBwYXJzZVxuXHQgKi9cblx0cGFyc2VFbDogZnVuY3Rpb24oaW5kZXgpIHtcblx0XHR2YXIgaXRlbSA9IG1mcC5pdGVtc1tpbmRleF0sXG5cdFx0XHR0eXBlO1xuXG5cdFx0aWYoaXRlbS50YWdOYW1lKSB7XG5cdFx0XHRpdGVtID0geyBlbDogJChpdGVtKSB9O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0eXBlID0gaXRlbS50eXBlO1xuXHRcdFx0aXRlbSA9IHsgZGF0YTogaXRlbSwgc3JjOiBpdGVtLnNyYyB9O1xuXHRcdH1cblxuXHRcdGlmKGl0ZW0uZWwpIHtcblx0XHRcdHZhciB0eXBlcyA9IG1mcC50eXBlcztcblxuXHRcdFx0Ly8gY2hlY2sgZm9yICdtZnAtVFlQRScgY2xhc3Ncblx0XHRcdGZvcih2YXIgaSA9IDA7IGkgPCB0eXBlcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRpZiggaXRlbS5lbC5oYXNDbGFzcygnbWZwLScrdHlwZXNbaV0pICkge1xuXHRcdFx0XHRcdHR5cGUgPSB0eXBlc1tpXTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRpdGVtLnNyYyA9IGl0ZW0uZWwuYXR0cignZGF0YS1tZnAtc3JjJyk7XG5cdFx0XHRpZighaXRlbS5zcmMpIHtcblx0XHRcdFx0aXRlbS5zcmMgPSBpdGVtLmVsLmF0dHIoJ2hyZWYnKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpdGVtLnR5cGUgPSB0eXBlIHx8IG1mcC5zdC50eXBlIHx8ICdpbmxpbmUnO1xuXHRcdGl0ZW0uaW5kZXggPSBpbmRleDtcblx0XHRpdGVtLnBhcnNlZCA9IHRydWU7XG5cdFx0bWZwLml0ZW1zW2luZGV4XSA9IGl0ZW07XG5cdFx0X21mcFRyaWdnZXIoJ0VsZW1lbnRQYXJzZScsIGl0ZW0pO1xuXG5cdFx0cmV0dXJuIG1mcC5pdGVtc1tpbmRleF07XG5cdH0sXG5cblxuXHQvKipcblx0ICogSW5pdGlhbGl6ZXMgc2luZ2xlIHBvcHVwIG9yIGEgZ3JvdXAgb2YgcG9wdXBzXG5cdCAqL1xuXHRhZGRHcm91cDogZnVuY3Rpb24oZWwsIG9wdGlvbnMpIHtcblx0XHR2YXIgZUhhbmRsZXIgPSBmdW5jdGlvbihlKSB7XG5cdFx0XHRlLm1mcEVsID0gdGhpcztcblx0XHRcdG1mcC5fb3BlbkNsaWNrKGUsIGVsLCBvcHRpb25zKTtcblx0XHR9O1xuXG5cdFx0aWYoIW9wdGlvbnMpIHtcblx0XHRcdG9wdGlvbnMgPSB7fTtcblx0XHR9XG5cblx0XHR2YXIgZU5hbWUgPSAnY2xpY2subWFnbmlmaWNQb3B1cCc7XG5cdFx0b3B0aW9ucy5tYWluRWwgPSBlbDtcblxuXHRcdGlmKG9wdGlvbnMuaXRlbXMpIHtcblx0XHRcdG9wdGlvbnMuaXNPYmogPSB0cnVlO1xuXHRcdFx0ZWwub2ZmKGVOYW1lKS5vbihlTmFtZSwgZUhhbmRsZXIpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRvcHRpb25zLmlzT2JqID0gZmFsc2U7XG5cdFx0XHRpZihvcHRpb25zLmRlbGVnYXRlKSB7XG5cdFx0XHRcdGVsLm9mZihlTmFtZSkub24oZU5hbWUsIG9wdGlvbnMuZGVsZWdhdGUgLCBlSGFuZGxlcik7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRvcHRpb25zLml0ZW1zID0gZWw7XG5cdFx0XHRcdGVsLm9mZihlTmFtZSkub24oZU5hbWUsIGVIYW5kbGVyKTtcblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cdF9vcGVuQ2xpY2s6IGZ1bmN0aW9uKGUsIGVsLCBvcHRpb25zKSB7XG5cdFx0dmFyIG1pZENsaWNrID0gb3B0aW9ucy5taWRDbGljayAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5taWRDbGljayA6ICQubWFnbmlmaWNQb3B1cC5kZWZhdWx0cy5taWRDbGljaztcblxuXG5cdFx0aWYoIW1pZENsaWNrICYmICggZS53aGljaCA9PT0gMiB8fCBlLmN0cmxLZXkgfHwgZS5tZXRhS2V5IHx8IGUuYWx0S2V5IHx8IGUuc2hpZnRLZXkgKSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHR2YXIgZGlzYWJsZU9uID0gb3B0aW9ucy5kaXNhYmxlT24gIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMuZGlzYWJsZU9uIDogJC5tYWduaWZpY1BvcHVwLmRlZmF1bHRzLmRpc2FibGVPbjtcblxuXHRcdGlmKGRpc2FibGVPbikge1xuXHRcdFx0aWYoJC5pc0Z1bmN0aW9uKGRpc2FibGVPbikpIHtcblx0XHRcdFx0aWYoICFkaXNhYmxlT24uY2FsbChtZnApICkge1xuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgeyAvLyBlbHNlIGl0J3MgbnVtYmVyXG5cdFx0XHRcdGlmKCBfd2luZG93LndpZHRoKCkgPCBkaXNhYmxlT24gKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZihlLnR5cGUpIHtcblx0XHRcdGUucHJldmVudERlZmF1bHQoKTtcblxuXHRcdFx0Ly8gVGhpcyB3aWxsIHByZXZlbnQgcG9wdXAgZnJvbSBjbG9zaW5nIGlmIGVsZW1lbnQgaXMgaW5zaWRlIGFuZCBwb3B1cCBpcyBhbHJlYWR5IG9wZW5lZFxuXHRcdFx0aWYobWZwLmlzT3Blbikge1xuXHRcdFx0XHRlLnN0b3BQcm9wYWdhdGlvbigpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdG9wdGlvbnMuZWwgPSAkKGUubWZwRWwpO1xuXHRcdGlmKG9wdGlvbnMuZGVsZWdhdGUpIHtcblx0XHRcdG9wdGlvbnMuaXRlbXMgPSBlbC5maW5kKG9wdGlvbnMuZGVsZWdhdGUpO1xuXHRcdH1cblx0XHRtZnAub3BlbihvcHRpb25zKTtcblx0fSxcblxuXG5cdC8qKlxuXHQgKiBVcGRhdGVzIHRleHQgb24gcHJlbG9hZGVyXG5cdCAqL1xuXHR1cGRhdGVTdGF0dXM6IGZ1bmN0aW9uKHN0YXR1cywgdGV4dCkge1xuXG5cdFx0aWYobWZwLnByZWxvYWRlcikge1xuXHRcdFx0aWYoX3ByZXZTdGF0dXMgIT09IHN0YXR1cykge1xuXHRcdFx0XHRtZnAuY29udGFpbmVyLnJlbW92ZUNsYXNzKCdtZnAtcy0nK19wcmV2U3RhdHVzKTtcblx0XHRcdH1cblxuXHRcdFx0aWYoIXRleHQgJiYgc3RhdHVzID09PSAnbG9hZGluZycpIHtcblx0XHRcdFx0dGV4dCA9IG1mcC5zdC50TG9hZGluZztcblx0XHRcdH1cblxuXHRcdFx0dmFyIGRhdGEgPSB7XG5cdFx0XHRcdHN0YXR1czogc3RhdHVzLFxuXHRcdFx0XHR0ZXh0OiB0ZXh0XG5cdFx0XHR9O1xuXHRcdFx0Ly8gYWxsb3dzIHRvIG1vZGlmeSBzdGF0dXNcblx0XHRcdF9tZnBUcmlnZ2VyKCdVcGRhdGVTdGF0dXMnLCBkYXRhKTtcblxuXHRcdFx0c3RhdHVzID0gZGF0YS5zdGF0dXM7XG5cdFx0XHR0ZXh0ID0gZGF0YS50ZXh0O1xuXG5cdFx0XHRtZnAucHJlbG9hZGVyLmh0bWwodGV4dCk7XG5cblx0XHRcdG1mcC5wcmVsb2FkZXIuZmluZCgnYScpLm9uKCdjbGljaycsIGZ1bmN0aW9uKGUpIHtcblx0XHRcdFx0ZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcblx0XHRcdH0pO1xuXG5cdFx0XHRtZnAuY29udGFpbmVyLmFkZENsYXNzKCdtZnAtcy0nK3N0YXR1cyk7XG5cdFx0XHRfcHJldlN0YXR1cyA9IHN0YXR1cztcblx0XHR9XG5cdH0sXG5cblxuXHQvKlxuXHRcdFwiUHJpdmF0ZVwiIGhlbHBlcnMgdGhhdCBhcmVuJ3QgcHJpdmF0ZSBhdCBhbGxcblx0ICovXG5cdC8vIENoZWNrIHRvIGNsb3NlIHBvcHVwIG9yIG5vdFxuXHQvLyBcInRhcmdldFwiIGlzIGFuIGVsZW1lbnQgdGhhdCB3YXMgY2xpY2tlZFxuXHRfY2hlY2tJZkNsb3NlOiBmdW5jdGlvbih0YXJnZXQpIHtcblxuXHRcdGlmKCQodGFyZ2V0KS5oYXNDbGFzcyhQUkVWRU5UX0NMT1NFX0NMQVNTKSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHZhciBjbG9zZU9uQ29udGVudCA9IG1mcC5zdC5jbG9zZU9uQ29udGVudENsaWNrO1xuXHRcdHZhciBjbG9zZU9uQmcgPSBtZnAuc3QuY2xvc2VPbkJnQ2xpY2s7XG5cblx0XHRpZihjbG9zZU9uQ29udGVudCAmJiBjbG9zZU9uQmcpIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH0gZWxzZSB7XG5cblx0XHRcdC8vIFdlIGNsb3NlIHRoZSBwb3B1cCBpZiBjbGljayBpcyBvbiBjbG9zZSBidXR0b24gb3Igb24gcHJlbG9hZGVyLiBPciBpZiB0aGVyZSBpcyBubyBjb250ZW50LlxuXHRcdFx0aWYoIW1mcC5jb250ZW50IHx8ICQodGFyZ2V0KS5oYXNDbGFzcygnbWZwLWNsb3NlJykgfHwgKG1mcC5wcmVsb2FkZXIgJiYgdGFyZ2V0ID09PSBtZnAucHJlbG9hZGVyWzBdKSApIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cblx0XHRcdC8vIGlmIGNsaWNrIGlzIG91dHNpZGUgdGhlIGNvbnRlbnRcblx0XHRcdGlmKCAgKHRhcmdldCAhPT0gbWZwLmNvbnRlbnRbMF0gJiYgISQuY29udGFpbnMobWZwLmNvbnRlbnRbMF0sIHRhcmdldCkpICApIHtcblx0XHRcdFx0aWYoY2xvc2VPbkJnKSB7XG5cdFx0XHRcdFx0Ly8gbGFzdCBjaGVjaywgaWYgdGhlIGNsaWNrZWQgZWxlbWVudCBpcyBpbiBET00sIChpbiBjYXNlIGl0J3MgcmVtb3ZlZCBvbmNsaWNrKVxuXHRcdFx0XHRcdGlmKCAkLmNvbnRhaW5zKGRvY3VtZW50LCB0YXJnZXQpICkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgaWYoY2xvc2VPbkNvbnRlbnQpIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9LFxuXHRfYWRkQ2xhc3NUb01GUDogZnVuY3Rpb24oY05hbWUpIHtcblx0XHRtZnAuYmdPdmVybGF5LmFkZENsYXNzKGNOYW1lKTtcblx0XHRtZnAud3JhcC5hZGRDbGFzcyhjTmFtZSk7XG5cdH0sXG5cdF9yZW1vdmVDbGFzc0Zyb21NRlA6IGZ1bmN0aW9uKGNOYW1lKSB7XG5cdFx0dGhpcy5iZ092ZXJsYXkucmVtb3ZlQ2xhc3MoY05hbWUpO1xuXHRcdG1mcC53cmFwLnJlbW92ZUNsYXNzKGNOYW1lKTtcblx0fSxcblx0X2hhc1Njcm9sbEJhcjogZnVuY3Rpb24od2luSGVpZ2h0KSB7XG5cdFx0cmV0dXJuICggIChtZnAuaXNJRTcgPyBfZG9jdW1lbnQuaGVpZ2h0KCkgOiBkb2N1bWVudC5ib2R5LnNjcm9sbEhlaWdodCkgPiAod2luSGVpZ2h0IHx8IF93aW5kb3cuaGVpZ2h0KCkpICk7XG5cdH0sXG5cdF9zZXRGb2N1czogZnVuY3Rpb24oKSB7XG5cdFx0KG1mcC5zdC5mb2N1cyA/IG1mcC5jb250ZW50LmZpbmQobWZwLnN0LmZvY3VzKS5lcSgwKSA6IG1mcC53cmFwKS5mb2N1cygpO1xuXHR9LFxuXHRfb25Gb2N1c0luOiBmdW5jdGlvbihlKSB7XG5cdFx0aWYoIGUudGFyZ2V0ICE9PSBtZnAud3JhcFswXSAmJiAhJC5jb250YWlucyhtZnAud3JhcFswXSwgZS50YXJnZXQpICkge1xuXHRcdFx0bWZwLl9zZXRGb2N1cygpO1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fSxcblx0X3BhcnNlTWFya3VwOiBmdW5jdGlvbih0ZW1wbGF0ZSwgdmFsdWVzLCBpdGVtKSB7XG5cdFx0dmFyIGFycjtcblx0XHRpZihpdGVtLmRhdGEpIHtcblx0XHRcdHZhbHVlcyA9ICQuZXh0ZW5kKGl0ZW0uZGF0YSwgdmFsdWVzKTtcblx0XHR9XG5cdFx0X21mcFRyaWdnZXIoTUFSS1VQX1BBUlNFX0VWRU5ULCBbdGVtcGxhdGUsIHZhbHVlcywgaXRlbV0gKTtcblxuXHRcdCQuZWFjaCh2YWx1ZXMsIGZ1bmN0aW9uKGtleSwgdmFsdWUpIHtcblx0XHRcdGlmKHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09IGZhbHNlKSB7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdFx0YXJyID0ga2V5LnNwbGl0KCdfJyk7XG5cdFx0XHRpZihhcnIubGVuZ3RoID4gMSkge1xuXHRcdFx0XHR2YXIgZWwgPSB0ZW1wbGF0ZS5maW5kKEVWRU5UX05TICsgJy0nK2FyclswXSk7XG5cblx0XHRcdFx0aWYoZWwubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdHZhciBhdHRyID0gYXJyWzFdO1xuXHRcdFx0XHRcdGlmKGF0dHIgPT09ICdyZXBsYWNlV2l0aCcpIHtcblx0XHRcdFx0XHRcdGlmKGVsWzBdICE9PSB2YWx1ZVswXSkge1xuXHRcdFx0XHRcdFx0XHRlbC5yZXBsYWNlV2l0aCh2YWx1ZSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSBlbHNlIGlmKGF0dHIgPT09ICdpbWcnKSB7XG5cdFx0XHRcdFx0XHRpZihlbC5pcygnaW1nJykpIHtcblx0XHRcdFx0XHRcdFx0ZWwuYXR0cignc3JjJywgdmFsdWUpO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0ZWwucmVwbGFjZVdpdGgoICQoJzxpbWc+JykuYXR0cignc3JjJywgdmFsdWUpLmF0dHIoJ2NsYXNzJywgZWwuYXR0cignY2xhc3MnKSkgKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0ZWwuYXR0cihhcnJbMV0sIHZhbHVlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGVtcGxhdGUuZmluZChFVkVOVF9OUyArICctJytrZXkpLmh0bWwodmFsdWUpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9LFxuXG5cdF9nZXRTY3JvbGxiYXJTaXplOiBmdW5jdGlvbigpIHtcblx0XHQvLyB0aHggRGF2aWRcblx0XHRpZihtZnAuc2Nyb2xsYmFyU2l6ZSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR2YXIgc2Nyb2xsRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcblx0XHRcdHNjcm9sbERpdi5zdHlsZS5jc3NUZXh0ID0gJ3dpZHRoOiA5OXB4OyBoZWlnaHQ6IDk5cHg7IG92ZXJmbG93OiBzY3JvbGw7IHBvc2l0aW9uOiBhYnNvbHV0ZTsgdG9wOiAtOTk5OXB4Oyc7XG5cdFx0XHRkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHNjcm9sbERpdik7XG5cdFx0XHRtZnAuc2Nyb2xsYmFyU2l6ZSA9IHNjcm9sbERpdi5vZmZzZXRXaWR0aCAtIHNjcm9sbERpdi5jbGllbnRXaWR0aDtcblx0XHRcdGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoc2Nyb2xsRGl2KTtcblx0XHR9XG5cdFx0cmV0dXJuIG1mcC5zY3JvbGxiYXJTaXplO1xuXHR9XG5cbn07IC8qIE1hZ25pZmljUG9wdXAgY29yZSBwcm90b3R5cGUgZW5kICovXG5cblxuXG5cbi8qKlxuICogUHVibGljIHN0YXRpYyBmdW5jdGlvbnNcbiAqL1xuJC5tYWduaWZpY1BvcHVwID0ge1xuXHRpbnN0YW5jZTogbnVsbCxcblx0cHJvdG86IE1hZ25pZmljUG9wdXAucHJvdG90eXBlLFxuXHRtb2R1bGVzOiBbXSxcblxuXHRvcGVuOiBmdW5jdGlvbihvcHRpb25zLCBpbmRleCkge1xuXHRcdF9jaGVja0luc3RhbmNlKCk7XG5cblx0XHRpZighb3B0aW9ucykge1xuXHRcdFx0b3B0aW9ucyA9IHt9O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRvcHRpb25zID0gJC5leHRlbmQodHJ1ZSwge30sIG9wdGlvbnMpO1xuXHRcdH1cblxuXHRcdG9wdGlvbnMuaXNPYmogPSB0cnVlO1xuXHRcdG9wdGlvbnMuaW5kZXggPSBpbmRleCB8fCAwO1xuXHRcdHJldHVybiB0aGlzLmluc3RhbmNlLm9wZW4ob3B0aW9ucyk7XG5cdH0sXG5cblx0Y2xvc2U6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiAkLm1hZ25pZmljUG9wdXAuaW5zdGFuY2UgJiYgJC5tYWduaWZpY1BvcHVwLmluc3RhbmNlLmNsb3NlKCk7XG5cdH0sXG5cblx0cmVnaXN0ZXJNb2R1bGU6IGZ1bmN0aW9uKG5hbWUsIG1vZHVsZSkge1xuXHRcdGlmKG1vZHVsZS5vcHRpb25zKSB7XG5cdFx0XHQkLm1hZ25pZmljUG9wdXAuZGVmYXVsdHNbbmFtZV0gPSBtb2R1bGUub3B0aW9ucztcblx0XHR9XG5cdFx0JC5leHRlbmQodGhpcy5wcm90bywgbW9kdWxlLnByb3RvKTtcblx0XHR0aGlzLm1vZHVsZXMucHVzaChuYW1lKTtcblx0fSxcblxuXHRkZWZhdWx0czoge1xuXG5cdFx0Ly8gSW5mbyBhYm91dCBvcHRpb25zIGlzIGluIGRvY3M6XG5cdFx0Ly8gaHR0cDovL2RpbXNlbWVub3YuY29tL3BsdWdpbnMvbWFnbmlmaWMtcG9wdXAvZG9jdW1lbnRhdGlvbi5odG1sI29wdGlvbnNcblxuXHRcdGRpc2FibGVPbjogMCxcblxuXHRcdGtleTogbnVsbCxcblxuXHRcdG1pZENsaWNrOiBmYWxzZSxcblxuXHRcdG1haW5DbGFzczogJycsXG5cblx0XHRwcmVsb2FkZXI6IHRydWUsXG5cblx0XHRmb2N1czogJycsIC8vIENTUyBzZWxlY3RvciBvZiBpbnB1dCB0byBmb2N1cyBhZnRlciBwb3B1cCBpcyBvcGVuZWRcblxuXHRcdGNsb3NlT25Db250ZW50Q2xpY2s6IGZhbHNlLFxuXG5cdFx0Y2xvc2VPbkJnQ2xpY2s6IHRydWUsXG5cblx0XHRjbG9zZUJ0bkluc2lkZTogdHJ1ZSxcblxuXHRcdHNob3dDbG9zZUJ0bjogdHJ1ZSxcblxuXHRcdGVuYWJsZUVzY2FwZUtleTogdHJ1ZSxcblxuXHRcdG1vZGFsOiBmYWxzZSxcblxuXHRcdGFsaWduVG9wOiBmYWxzZSxcblxuXHRcdHJlbW92YWxEZWxheTogMCxcblxuXHRcdHByZXBlbmRUbzogbnVsbCxcblxuXHRcdGZpeGVkQ29udGVudFBvczogJ2F1dG8nLFxuXG5cdFx0Zml4ZWRCZ1BvczogJ2F1dG8nLFxuXG5cdFx0b3ZlcmZsb3dZOiAnYXV0bycsXG5cblx0XHRjbG9zZU1hcmt1cDogJzxidXR0b24gdGl0bGU9XCIldGl0bGUlXCIgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwibWZwLWNsb3NlXCI+JiMyMTU7PC9idXR0b24+JyxcblxuXHRcdHRDbG9zZTogJ0Nsb3NlIChFc2MpJyxcblxuXHRcdHRMb2FkaW5nOiAnTG9hZGluZy4uLicsXG5cblx0XHRhdXRvRm9jdXNMYXN0OiB0cnVlXG5cblx0fVxufTtcblxuXG5cbiQuZm4ubWFnbmlmaWNQb3B1cCA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcblx0X2NoZWNrSW5zdGFuY2UoKTtcblxuXHR2YXIganFFbCA9ICQodGhpcyk7XG5cblx0Ly8gV2UgY2FsbCBzb21lIEFQSSBtZXRob2Qgb2YgZmlyc3QgcGFyYW0gaXMgYSBzdHJpbmdcblx0aWYgKHR5cGVvZiBvcHRpb25zID09PSBcInN0cmluZ1wiICkge1xuXG5cdFx0aWYob3B0aW9ucyA9PT0gJ29wZW4nKSB7XG5cdFx0XHR2YXIgaXRlbXMsXG5cdFx0XHRcdGl0ZW1PcHRzID0gX2lzSlEgPyBqcUVsLmRhdGEoJ21hZ25pZmljUG9wdXAnKSA6IGpxRWxbMF0ubWFnbmlmaWNQb3B1cCxcblx0XHRcdFx0aW5kZXggPSBwYXJzZUludChhcmd1bWVudHNbMV0sIDEwKSB8fCAwO1xuXG5cdFx0XHRpZihpdGVtT3B0cy5pdGVtcykge1xuXHRcdFx0XHRpdGVtcyA9IGl0ZW1PcHRzLml0ZW1zW2luZGV4XTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGl0ZW1zID0ganFFbDtcblx0XHRcdFx0aWYoaXRlbU9wdHMuZGVsZWdhdGUpIHtcblx0XHRcdFx0XHRpdGVtcyA9IGl0ZW1zLmZpbmQoaXRlbU9wdHMuZGVsZWdhdGUpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGl0ZW1zID0gaXRlbXMuZXEoIGluZGV4ICk7XG5cdFx0XHR9XG5cdFx0XHRtZnAuX29wZW5DbGljayh7bWZwRWw6aXRlbXN9LCBqcUVsLCBpdGVtT3B0cyk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGlmKG1mcC5pc09wZW4pXG5cdFx0XHRcdG1mcFtvcHRpb25zXS5hcHBseShtZnAsIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSkpO1xuXHRcdH1cblxuXHR9IGVsc2Uge1xuXHRcdC8vIGNsb25lIG9wdGlvbnMgb2JqXG5cdFx0b3B0aW9ucyA9ICQuZXh0ZW5kKHRydWUsIHt9LCBvcHRpb25zKTtcblxuXHRcdC8qXG5cdFx0ICogQXMgWmVwdG8gZG9lc24ndCBzdXBwb3J0IC5kYXRhKCkgbWV0aG9kIGZvciBvYmplY3RzXG5cdFx0ICogYW5kIGl0IHdvcmtzIG9ubHkgaW4gbm9ybWFsIGJyb3dzZXJzXG5cdFx0ICogd2UgYXNzaWduIFwib3B0aW9uc1wiIG9iamVjdCBkaXJlY3RseSB0byB0aGUgRE9NIGVsZW1lbnQuIEZUVyFcblx0XHQgKi9cblx0XHRpZihfaXNKUSkge1xuXHRcdFx0anFFbC5kYXRhKCdtYWduaWZpY1BvcHVwJywgb3B0aW9ucyk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGpxRWxbMF0ubWFnbmlmaWNQb3B1cCA9IG9wdGlvbnM7XG5cdFx0fVxuXG5cdFx0bWZwLmFkZEdyb3VwKGpxRWwsIG9wdGlvbnMpO1xuXG5cdH1cblx0cmV0dXJuIGpxRWw7XG59O1xuXG4vKj4+Y29yZSovXG5cbi8qPj5pbmxpbmUqL1xuXG52YXIgSU5MSU5FX05TID0gJ2lubGluZScsXG5cdF9oaWRkZW5DbGFzcyxcblx0X2lubGluZVBsYWNlaG9sZGVyLFxuXHRfbGFzdElubGluZUVsZW1lbnQsXG5cdF9wdXRJbmxpbmVFbGVtZW50c0JhY2sgPSBmdW5jdGlvbigpIHtcblx0XHRpZihfbGFzdElubGluZUVsZW1lbnQpIHtcblx0XHRcdF9pbmxpbmVQbGFjZWhvbGRlci5hZnRlciggX2xhc3RJbmxpbmVFbGVtZW50LmFkZENsYXNzKF9oaWRkZW5DbGFzcykgKS5kZXRhY2goKTtcblx0XHRcdF9sYXN0SW5saW5lRWxlbWVudCA9IG51bGw7XG5cdFx0fVxuXHR9O1xuXG4kLm1hZ25pZmljUG9wdXAucmVnaXN0ZXJNb2R1bGUoSU5MSU5FX05TLCB7XG5cdG9wdGlvbnM6IHtcblx0XHRoaWRkZW5DbGFzczogJ2hpZGUnLCAvLyB3aWxsIGJlIGFwcGVuZGVkIHdpdGggYG1mcC1gIHByZWZpeFxuXHRcdG1hcmt1cDogJycsXG5cdFx0dE5vdEZvdW5kOiAnQ29udGVudCBub3QgZm91bmQnXG5cdH0sXG5cdHByb3RvOiB7XG5cblx0XHRpbml0SW5saW5lOiBmdW5jdGlvbigpIHtcblx0XHRcdG1mcC50eXBlcy5wdXNoKElOTElORV9OUyk7XG5cblx0XHRcdF9tZnBPbihDTE9TRV9FVkVOVCsnLicrSU5MSU5FX05TLCBmdW5jdGlvbigpIHtcblx0XHRcdFx0X3B1dElubGluZUVsZW1lbnRzQmFjaygpO1xuXHRcdFx0fSk7XG5cdFx0fSxcblxuXHRcdGdldElubGluZTogZnVuY3Rpb24oaXRlbSwgdGVtcGxhdGUpIHtcblxuXHRcdFx0X3B1dElubGluZUVsZW1lbnRzQmFjaygpO1xuXG5cdFx0XHRpZihpdGVtLnNyYykge1xuXHRcdFx0XHR2YXIgaW5saW5lU3QgPSBtZnAuc3QuaW5saW5lLFxuXHRcdFx0XHRcdGVsID0gJChpdGVtLnNyYyk7XG5cblx0XHRcdFx0aWYoZWwubGVuZ3RoKSB7XG5cblx0XHRcdFx0XHQvLyBJZiB0YXJnZXQgZWxlbWVudCBoYXMgcGFyZW50IC0gd2UgcmVwbGFjZSBpdCB3aXRoIHBsYWNlaG9sZGVyIGFuZCBwdXQgaXQgYmFjayBhZnRlciBwb3B1cCBpcyBjbG9zZWRcblx0XHRcdFx0XHR2YXIgcGFyZW50ID0gZWxbMF0ucGFyZW50Tm9kZTtcblx0XHRcdFx0XHRpZihwYXJlbnQgJiYgcGFyZW50LnRhZ05hbWUpIHtcblx0XHRcdFx0XHRcdGlmKCFfaW5saW5lUGxhY2Vob2xkZXIpIHtcblx0XHRcdFx0XHRcdFx0X2hpZGRlbkNsYXNzID0gaW5saW5lU3QuaGlkZGVuQ2xhc3M7XG5cdFx0XHRcdFx0XHRcdF9pbmxpbmVQbGFjZWhvbGRlciA9IF9nZXRFbChfaGlkZGVuQ2xhc3MpO1xuXHRcdFx0XHRcdFx0XHRfaGlkZGVuQ2xhc3MgPSAnbWZwLScrX2hpZGRlbkNsYXNzO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0Ly8gcmVwbGFjZSB0YXJnZXQgaW5saW5lIGVsZW1lbnQgd2l0aCBwbGFjZWhvbGRlclxuXHRcdFx0XHRcdFx0X2xhc3RJbmxpbmVFbGVtZW50ID0gZWwuYWZ0ZXIoX2lubGluZVBsYWNlaG9sZGVyKS5kZXRhY2goKS5yZW1vdmVDbGFzcyhfaGlkZGVuQ2xhc3MpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdG1mcC51cGRhdGVTdGF0dXMoJ3JlYWR5Jyk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0bWZwLnVwZGF0ZVN0YXR1cygnZXJyb3InLCBpbmxpbmVTdC50Tm90Rm91bmQpO1xuXHRcdFx0XHRcdGVsID0gJCgnPGRpdj4nKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGl0ZW0uaW5saW5lRWxlbWVudCA9IGVsO1xuXHRcdFx0XHRyZXR1cm4gZWw7XG5cdFx0XHR9XG5cblx0XHRcdG1mcC51cGRhdGVTdGF0dXMoJ3JlYWR5Jyk7XG5cdFx0XHRtZnAuX3BhcnNlTWFya3VwKHRlbXBsYXRlLCB7fSwgaXRlbSk7XG5cdFx0XHRyZXR1cm4gdGVtcGxhdGU7XG5cdFx0fVxuXHR9XG59KTtcblxuLyo+PmlubGluZSovXG5cbi8qPj5hamF4Ki9cbnZhciBBSkFYX05TID0gJ2FqYXgnLFxuXHRfYWpheEN1cixcblx0X3JlbW92ZUFqYXhDdXJzb3IgPSBmdW5jdGlvbigpIHtcblx0XHRpZihfYWpheEN1cikge1xuXHRcdFx0JChkb2N1bWVudC5ib2R5KS5yZW1vdmVDbGFzcyhfYWpheEN1cik7XG5cdFx0fVxuXHR9LFxuXHRfZGVzdHJveUFqYXhSZXF1ZXN0ID0gZnVuY3Rpb24oKSB7XG5cdFx0X3JlbW92ZUFqYXhDdXJzb3IoKTtcblx0XHRpZihtZnAucmVxKSB7XG5cdFx0XHRtZnAucmVxLmFib3J0KCk7XG5cdFx0fVxuXHR9O1xuXG4kLm1hZ25pZmljUG9wdXAucmVnaXN0ZXJNb2R1bGUoQUpBWF9OUywge1xuXG5cdG9wdGlvbnM6IHtcblx0XHRzZXR0aW5nczogbnVsbCxcblx0XHRjdXJzb3I6ICdtZnAtYWpheC1jdXInLFxuXHRcdHRFcnJvcjogJzxhIGhyZWY9XCIldXJsJVwiPlRoZSBjb250ZW50PC9hPiBjb3VsZCBub3QgYmUgbG9hZGVkLidcblx0fSxcblxuXHRwcm90bzoge1xuXHRcdGluaXRBamF4OiBmdW5jdGlvbigpIHtcblx0XHRcdG1mcC50eXBlcy5wdXNoKEFKQVhfTlMpO1xuXHRcdFx0X2FqYXhDdXIgPSBtZnAuc3QuYWpheC5jdXJzb3I7XG5cblx0XHRcdF9tZnBPbihDTE9TRV9FVkVOVCsnLicrQUpBWF9OUywgX2Rlc3Ryb3lBamF4UmVxdWVzdCk7XG5cdFx0XHRfbWZwT24oJ0JlZm9yZUNoYW5nZS4nICsgQUpBWF9OUywgX2Rlc3Ryb3lBamF4UmVxdWVzdCk7XG5cdFx0fSxcblx0XHRnZXRBamF4OiBmdW5jdGlvbihpdGVtKSB7XG5cblx0XHRcdGlmKF9hamF4Q3VyKSB7XG5cdFx0XHRcdCQoZG9jdW1lbnQuYm9keSkuYWRkQ2xhc3MoX2FqYXhDdXIpO1xuXHRcdFx0fVxuXG5cdFx0XHRtZnAudXBkYXRlU3RhdHVzKCdsb2FkaW5nJyk7XG5cblx0XHRcdHZhciBvcHRzID0gJC5leHRlbmQoe1xuXHRcdFx0XHR1cmw6IGl0ZW0uc3JjLFxuXHRcdFx0XHRzdWNjZXNzOiBmdW5jdGlvbihkYXRhLCB0ZXh0U3RhdHVzLCBqcVhIUikge1xuXHRcdFx0XHRcdHZhciB0ZW1wID0ge1xuXHRcdFx0XHRcdFx0ZGF0YTpkYXRhLFxuXHRcdFx0XHRcdFx0eGhyOmpxWEhSXG5cdFx0XHRcdFx0fTtcblxuXHRcdFx0XHRcdF9tZnBUcmlnZ2VyKCdQYXJzZUFqYXgnLCB0ZW1wKTtcblxuXHRcdFx0XHRcdG1mcC5hcHBlbmRDb250ZW50KCAkKHRlbXAuZGF0YSksIEFKQVhfTlMgKTtcblxuXHRcdFx0XHRcdGl0ZW0uZmluaXNoZWQgPSB0cnVlO1xuXG5cdFx0XHRcdFx0X3JlbW92ZUFqYXhDdXJzb3IoKTtcblxuXHRcdFx0XHRcdG1mcC5fc2V0Rm9jdXMoKTtcblxuXHRcdFx0XHRcdHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRtZnAud3JhcC5hZGRDbGFzcyhSRUFEWV9DTEFTUyk7XG5cdFx0XHRcdFx0fSwgMTYpO1xuXG5cdFx0XHRcdFx0bWZwLnVwZGF0ZVN0YXR1cygncmVhZHknKTtcblxuXHRcdFx0XHRcdF9tZnBUcmlnZ2VyKCdBamF4Q29udGVudEFkZGVkJyk7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdGVycm9yOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRfcmVtb3ZlQWpheEN1cnNvcigpO1xuXHRcdFx0XHRcdGl0ZW0uZmluaXNoZWQgPSBpdGVtLmxvYWRFcnJvciA9IHRydWU7XG5cdFx0XHRcdFx0bWZwLnVwZGF0ZVN0YXR1cygnZXJyb3InLCBtZnAuc3QuYWpheC50RXJyb3IucmVwbGFjZSgnJXVybCUnLCBpdGVtLnNyYykpO1xuXHRcdFx0XHR9XG5cdFx0XHR9LCBtZnAuc3QuYWpheC5zZXR0aW5ncyk7XG5cblx0XHRcdG1mcC5yZXEgPSAkLmFqYXgob3B0cyk7XG5cblx0XHRcdHJldHVybiAnJztcblx0XHR9XG5cdH1cbn0pO1xuXG4vKj4+YWpheCovXG5cbi8qPj5pbWFnZSovXG52YXIgX2ltZ0ludGVydmFsLFxuXHRfZ2V0VGl0bGUgPSBmdW5jdGlvbihpdGVtKSB7XG5cdFx0aWYoaXRlbS5kYXRhICYmIGl0ZW0uZGF0YS50aXRsZSAhPT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIGl0ZW0uZGF0YS50aXRsZTtcblxuXHRcdHZhciBzcmMgPSBtZnAuc3QuaW1hZ2UudGl0bGVTcmM7XG5cblx0XHRpZihzcmMpIHtcblx0XHRcdGlmKCQuaXNGdW5jdGlvbihzcmMpKSB7XG5cdFx0XHRcdHJldHVybiBzcmMuY2FsbChtZnAsIGl0ZW0pO1xuXHRcdFx0fSBlbHNlIGlmKGl0ZW0uZWwpIHtcblx0XHRcdFx0cmV0dXJuIGl0ZW0uZWwuYXR0cihzcmMpIHx8ICcnO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gJyc7XG5cdH07XG5cbiQubWFnbmlmaWNQb3B1cC5yZWdpc3Rlck1vZHVsZSgnaW1hZ2UnLCB7XG5cblx0b3B0aW9uczoge1xuXHRcdG1hcmt1cDogJzxkaXYgY2xhc3M9XCJtZnAtZmlndXJlXCI+Jytcblx0XHRcdFx0XHQnPGRpdiBjbGFzcz1cIm1mcC1jbG9zZVwiPjwvZGl2PicrXG5cdFx0XHRcdFx0JzxmaWd1cmU+Jytcblx0XHRcdFx0XHRcdCc8ZGl2IGNsYXNzPVwibWZwLWltZ1wiPjwvZGl2PicrXG5cdFx0XHRcdFx0XHQnPGZpZ2NhcHRpb24+Jytcblx0XHRcdFx0XHRcdFx0JzxkaXYgY2xhc3M9XCJtZnAtYm90dG9tLWJhclwiPicrXG5cdFx0XHRcdFx0XHRcdFx0JzxkaXYgY2xhc3M9XCJtZnAtdGl0bGVcIj48L2Rpdj4nK1xuXHRcdFx0XHRcdFx0XHRcdCc8ZGl2IGNsYXNzPVwibWZwLWNvdW50ZXJcIj48L2Rpdj4nK1xuXHRcdFx0XHRcdFx0XHQnPC9kaXY+Jytcblx0XHRcdFx0XHRcdCc8L2ZpZ2NhcHRpb24+Jytcblx0XHRcdFx0XHQnPC9maWd1cmU+Jytcblx0XHRcdFx0JzwvZGl2PicsXG5cdFx0Y3Vyc29yOiAnbWZwLXpvb20tb3V0LWN1cicsXG5cdFx0dGl0bGVTcmM6ICd0aXRsZScsXG5cdFx0dmVydGljYWxGaXQ6IHRydWUsXG5cdFx0dEVycm9yOiAnPGEgaHJlZj1cIiV1cmwlXCI+VGhlIGltYWdlPC9hPiBjb3VsZCBub3QgYmUgbG9hZGVkLidcblx0fSxcblxuXHRwcm90bzoge1xuXHRcdGluaXRJbWFnZTogZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgaW1nU3QgPSBtZnAuc3QuaW1hZ2UsXG5cdFx0XHRcdG5zID0gJy5pbWFnZSc7XG5cblx0XHRcdG1mcC50eXBlcy5wdXNoKCdpbWFnZScpO1xuXG5cdFx0XHRfbWZwT24oT1BFTl9FVkVOVCtucywgZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGlmKG1mcC5jdXJySXRlbS50eXBlID09PSAnaW1hZ2UnICYmIGltZ1N0LmN1cnNvcikge1xuXHRcdFx0XHRcdCQoZG9jdW1lbnQuYm9keSkuYWRkQ2xhc3MoaW1nU3QuY3Vyc29yKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cblx0XHRcdF9tZnBPbihDTE9TRV9FVkVOVCtucywgZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGlmKGltZ1N0LmN1cnNvcikge1xuXHRcdFx0XHRcdCQoZG9jdW1lbnQuYm9keSkucmVtb3ZlQ2xhc3MoaW1nU3QuY3Vyc29yKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRfd2luZG93Lm9mZigncmVzaXplJyArIEVWRU5UX05TKTtcblx0XHRcdH0pO1xuXG5cdFx0XHRfbWZwT24oJ1Jlc2l6ZScrbnMsIG1mcC5yZXNpemVJbWFnZSk7XG5cdFx0XHRpZihtZnAuaXNMb3dJRSkge1xuXHRcdFx0XHRfbWZwT24oJ0FmdGVyQ2hhbmdlJywgbWZwLnJlc2l6ZUltYWdlKTtcblx0XHRcdH1cblx0XHR9LFxuXHRcdHJlc2l6ZUltYWdlOiBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBpdGVtID0gbWZwLmN1cnJJdGVtO1xuXHRcdFx0aWYoIWl0ZW0gfHwgIWl0ZW0uaW1nKSByZXR1cm47XG5cblx0XHRcdGlmKG1mcC5zdC5pbWFnZS52ZXJ0aWNhbEZpdCkge1xuXHRcdFx0XHR2YXIgZGVjciA9IDA7XG5cdFx0XHRcdC8vIGZpeCBib3gtc2l6aW5nIGluIGllNy84XG5cdFx0XHRcdGlmKG1mcC5pc0xvd0lFKSB7XG5cdFx0XHRcdFx0ZGVjciA9IHBhcnNlSW50KGl0ZW0uaW1nLmNzcygncGFkZGluZy10b3AnKSwgMTApICsgcGFyc2VJbnQoaXRlbS5pbWcuY3NzKCdwYWRkaW5nLWJvdHRvbScpLDEwKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpdGVtLmltZy5jc3MoJ21heC1oZWlnaHQnLCBtZnAud0gtZGVjcik7XG5cdFx0XHR9XG5cdFx0fSxcblx0XHRfb25JbWFnZUhhc1NpemU6IGZ1bmN0aW9uKGl0ZW0pIHtcblx0XHRcdGlmKGl0ZW0uaW1nKSB7XG5cblx0XHRcdFx0aXRlbS5oYXNTaXplID0gdHJ1ZTtcblxuXHRcdFx0XHRpZihfaW1nSW50ZXJ2YWwpIHtcblx0XHRcdFx0XHRjbGVhckludGVydmFsKF9pbWdJbnRlcnZhbCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpdGVtLmlzQ2hlY2tpbmdJbWdTaXplID0gZmFsc2U7XG5cblx0XHRcdFx0X21mcFRyaWdnZXIoJ0ltYWdlSGFzU2l6ZScsIGl0ZW0pO1xuXG5cdFx0XHRcdGlmKGl0ZW0uaW1nSGlkZGVuKSB7XG5cdFx0XHRcdFx0aWYobWZwLmNvbnRlbnQpXG5cdFx0XHRcdFx0XHRtZnAuY29udGVudC5yZW1vdmVDbGFzcygnbWZwLWxvYWRpbmcnKTtcblxuXHRcdFx0XHRcdGl0ZW0uaW1nSGlkZGVuID0gZmFsc2U7XG5cdFx0XHRcdH1cblxuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHQvKipcblx0XHQgKiBGdW5jdGlvbiB0aGF0IGxvb3BzIHVudGlsIHRoZSBpbWFnZSBoYXMgc2l6ZSB0byBkaXNwbGF5IGVsZW1lbnRzIHRoYXQgcmVseSBvbiBpdCBhc2FwXG5cdFx0ICovXG5cdFx0ZmluZEltYWdlU2l6ZTogZnVuY3Rpb24oaXRlbSkge1xuXG5cdFx0XHR2YXIgY291bnRlciA9IDAsXG5cdFx0XHRcdGltZyA9IGl0ZW0uaW1nWzBdLFxuXHRcdFx0XHRtZnBTZXRJbnRlcnZhbCA9IGZ1bmN0aW9uKGRlbGF5KSB7XG5cblx0XHRcdFx0XHRpZihfaW1nSW50ZXJ2YWwpIHtcblx0XHRcdFx0XHRcdGNsZWFySW50ZXJ2YWwoX2ltZ0ludGVydmFsKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Ly8gZGVjZWxlcmF0aW5nIGludGVydmFsIHRoYXQgY2hlY2tzIGZvciBzaXplIG9mIGFuIGltYWdlXG5cdFx0XHRcdFx0X2ltZ0ludGVydmFsID0gc2V0SW50ZXJ2YWwoZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRpZihpbWcubmF0dXJhbFdpZHRoID4gMCkge1xuXHRcdFx0XHRcdFx0XHRtZnAuX29uSW1hZ2VIYXNTaXplKGl0ZW0pO1xuXHRcdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGlmKGNvdW50ZXIgPiAyMDApIHtcblx0XHRcdFx0XHRcdFx0Y2xlYXJJbnRlcnZhbChfaW1nSW50ZXJ2YWwpO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRjb3VudGVyKys7XG5cdFx0XHRcdFx0XHRpZihjb3VudGVyID09PSAzKSB7XG5cdFx0XHRcdFx0XHRcdG1mcFNldEludGVydmFsKDEwKTtcblx0XHRcdFx0XHRcdH0gZWxzZSBpZihjb3VudGVyID09PSA0MCkge1xuXHRcdFx0XHRcdFx0XHRtZnBTZXRJbnRlcnZhbCg1MCk7XG5cdFx0XHRcdFx0XHR9IGVsc2UgaWYoY291bnRlciA9PT0gMTAwKSB7XG5cdFx0XHRcdFx0XHRcdG1mcFNldEludGVydmFsKDUwMCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSwgZGVsYXkpO1xuXHRcdFx0XHR9O1xuXG5cdFx0XHRtZnBTZXRJbnRlcnZhbCgxKTtcblx0XHR9LFxuXG5cdFx0Z2V0SW1hZ2U6IGZ1bmN0aW9uKGl0ZW0sIHRlbXBsYXRlKSB7XG5cblx0XHRcdHZhciBndWFyZCA9IDAsXG5cblx0XHRcdFx0Ly8gaW1hZ2UgbG9hZCBjb21wbGV0ZSBoYW5kbGVyXG5cdFx0XHRcdG9uTG9hZENvbXBsZXRlID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0aWYoaXRlbSkge1xuXHRcdFx0XHRcdFx0aWYgKGl0ZW0uaW1nWzBdLmNvbXBsZXRlKSB7XG5cdFx0XHRcdFx0XHRcdGl0ZW0uaW1nLm9mZignLm1mcGxvYWRlcicpO1xuXG5cdFx0XHRcdFx0XHRcdGlmKGl0ZW0gPT09IG1mcC5jdXJySXRlbSl7XG5cdFx0XHRcdFx0XHRcdFx0bWZwLl9vbkltYWdlSGFzU2l6ZShpdGVtKTtcblxuXHRcdFx0XHRcdFx0XHRcdG1mcC51cGRhdGVTdGF0dXMoJ3JlYWR5Jyk7XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRpdGVtLmhhc1NpemUgPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHRpdGVtLmxvYWRlZCA9IHRydWU7XG5cblx0XHRcdFx0XHRcdFx0X21mcFRyaWdnZXIoJ0ltYWdlTG9hZENvbXBsZXRlJyk7XG5cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGVsc2Uge1xuXHRcdFx0XHRcdFx0XHQvLyBpZiBpbWFnZSBjb21wbGV0ZSBjaGVjayBmYWlscyAyMDAgdGltZXMgKDIwIHNlYyksIHdlIGFzc3VtZSB0aGF0IHRoZXJlIHdhcyBhbiBlcnJvci5cblx0XHRcdFx0XHRcdFx0Z3VhcmQrKztcblx0XHRcdFx0XHRcdFx0aWYoZ3VhcmQgPCAyMDApIHtcblx0XHRcdFx0XHRcdFx0XHRzZXRUaW1lb3V0KG9uTG9hZENvbXBsZXRlLDEwMCk7XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0b25Mb2FkRXJyb3IoKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblxuXHRcdFx0XHQvLyBpbWFnZSBlcnJvciBoYW5kbGVyXG5cdFx0XHRcdG9uTG9hZEVycm9yID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0aWYoaXRlbSkge1xuXHRcdFx0XHRcdFx0aXRlbS5pbWcub2ZmKCcubWZwbG9hZGVyJyk7XG5cdFx0XHRcdFx0XHRpZihpdGVtID09PSBtZnAuY3Vyckl0ZW0pe1xuXHRcdFx0XHRcdFx0XHRtZnAuX29uSW1hZ2VIYXNTaXplKGl0ZW0pO1xuXHRcdFx0XHRcdFx0XHRtZnAudXBkYXRlU3RhdHVzKCdlcnJvcicsIGltZ1N0LnRFcnJvci5yZXBsYWNlKCcldXJsJScsIGl0ZW0uc3JjKSApO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRpdGVtLmhhc1NpemUgPSB0cnVlO1xuXHRcdFx0XHRcdFx0aXRlbS5sb2FkZWQgPSB0cnVlO1xuXHRcdFx0XHRcdFx0aXRlbS5sb2FkRXJyb3IgPSB0cnVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblx0XHRcdFx0aW1nU3QgPSBtZnAuc3QuaW1hZ2U7XG5cblxuXHRcdFx0dmFyIGVsID0gdGVtcGxhdGUuZmluZCgnLm1mcC1pbWcnKTtcblx0XHRcdGlmKGVsLmxlbmd0aCkge1xuXHRcdFx0XHR2YXIgaW1nID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW1nJyk7XG5cdFx0XHRcdGltZy5jbGFzc05hbWUgPSAnbWZwLWltZyc7XG5cdFx0XHRcdGlmKGl0ZW0uZWwgJiYgaXRlbS5lbC5maW5kKCdpbWcnKS5sZW5ndGgpIHtcblx0XHRcdFx0XHRpbWcuYWx0ID0gaXRlbS5lbC5maW5kKCdpbWcnKS5hdHRyKCdhbHQnKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpdGVtLmltZyA9ICQoaW1nKS5vbignbG9hZC5tZnBsb2FkZXInLCBvbkxvYWRDb21wbGV0ZSkub24oJ2Vycm9yLm1mcGxvYWRlcicsIG9uTG9hZEVycm9yKTtcblx0XHRcdFx0aW1nLnNyYyA9IGl0ZW0uc3JjO1xuXG5cdFx0XHRcdC8vIHdpdGhvdXQgY2xvbmUoKSBcImVycm9yXCIgZXZlbnQgaXMgbm90IGZpcmluZyB3aGVuIElNRyBpcyByZXBsYWNlZCBieSBuZXcgSU1HXG5cdFx0XHRcdC8vIFRPRE86IGZpbmQgYSB3YXkgdG8gYXZvaWQgc3VjaCBjbG9uaW5nXG5cdFx0XHRcdGlmKGVsLmlzKCdpbWcnKSkge1xuXHRcdFx0XHRcdGl0ZW0uaW1nID0gaXRlbS5pbWcuY2xvbmUoKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGltZyA9IGl0ZW0uaW1nWzBdO1xuXHRcdFx0XHRpZihpbWcubmF0dXJhbFdpZHRoID4gMCkge1xuXHRcdFx0XHRcdGl0ZW0uaGFzU2l6ZSA9IHRydWU7XG5cdFx0XHRcdH0gZWxzZSBpZighaW1nLndpZHRoKSB7XG5cdFx0XHRcdFx0aXRlbS5oYXNTaXplID0gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0bWZwLl9wYXJzZU1hcmt1cCh0ZW1wbGF0ZSwge1xuXHRcdFx0XHR0aXRsZTogX2dldFRpdGxlKGl0ZW0pLFxuXHRcdFx0XHRpbWdfcmVwbGFjZVdpdGg6IGl0ZW0uaW1nXG5cdFx0XHR9LCBpdGVtKTtcblxuXHRcdFx0bWZwLnJlc2l6ZUltYWdlKCk7XG5cblx0XHRcdGlmKGl0ZW0uaGFzU2l6ZSkge1xuXHRcdFx0XHRpZihfaW1nSW50ZXJ2YWwpIGNsZWFySW50ZXJ2YWwoX2ltZ0ludGVydmFsKTtcblxuXHRcdFx0XHRpZihpdGVtLmxvYWRFcnJvcikge1xuXHRcdFx0XHRcdHRlbXBsYXRlLmFkZENsYXNzKCdtZnAtbG9hZGluZycpO1xuXHRcdFx0XHRcdG1mcC51cGRhdGVTdGF0dXMoJ2Vycm9yJywgaW1nU3QudEVycm9yLnJlcGxhY2UoJyV1cmwlJywgaXRlbS5zcmMpICk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dGVtcGxhdGUucmVtb3ZlQ2xhc3MoJ21mcC1sb2FkaW5nJyk7XG5cdFx0XHRcdFx0bWZwLnVwZGF0ZVN0YXR1cygncmVhZHknKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gdGVtcGxhdGU7XG5cdFx0XHR9XG5cblx0XHRcdG1mcC51cGRhdGVTdGF0dXMoJ2xvYWRpbmcnKTtcblx0XHRcdGl0ZW0ubG9hZGluZyA9IHRydWU7XG5cblx0XHRcdGlmKCFpdGVtLmhhc1NpemUpIHtcblx0XHRcdFx0aXRlbS5pbWdIaWRkZW4gPSB0cnVlO1xuXHRcdFx0XHR0ZW1wbGF0ZS5hZGRDbGFzcygnbWZwLWxvYWRpbmcnKTtcblx0XHRcdFx0bWZwLmZpbmRJbWFnZVNpemUoaXRlbSk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiB0ZW1wbGF0ZTtcblx0XHR9XG5cdH1cbn0pO1xuXG4vKj4+aW1hZ2UqL1xuXG4vKj4+em9vbSovXG52YXIgaGFzTW96VHJhbnNmb3JtLFxuXHRnZXRIYXNNb3pUcmFuc2Zvcm0gPSBmdW5jdGlvbigpIHtcblx0XHRpZihoYXNNb3pUcmFuc2Zvcm0gPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0aGFzTW96VHJhbnNmb3JtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgncCcpLnN0eWxlLk1velRyYW5zZm9ybSAhPT0gdW5kZWZpbmVkO1xuXHRcdH1cblx0XHRyZXR1cm4gaGFzTW96VHJhbnNmb3JtO1xuXHR9O1xuXG4kLm1hZ25pZmljUG9wdXAucmVnaXN0ZXJNb2R1bGUoJ3pvb20nLCB7XG5cblx0b3B0aW9uczoge1xuXHRcdGVuYWJsZWQ6IGZhbHNlLFxuXHRcdGVhc2luZzogJ2Vhc2UtaW4tb3V0Jyxcblx0XHRkdXJhdGlvbjogMzAwLFxuXHRcdG9wZW5lcjogZnVuY3Rpb24oZWxlbWVudCkge1xuXHRcdFx0cmV0dXJuIGVsZW1lbnQuaXMoJ2ltZycpID8gZWxlbWVudCA6IGVsZW1lbnQuZmluZCgnaW1nJyk7XG5cdFx0fVxuXHR9LFxuXG5cdHByb3RvOiB7XG5cblx0XHRpbml0Wm9vbTogZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgem9vbVN0ID0gbWZwLnN0Lnpvb20sXG5cdFx0XHRcdG5zID0gJy56b29tJyxcblx0XHRcdFx0aW1hZ2U7XG5cblx0XHRcdGlmKCF6b29tU3QuZW5hYmxlZCB8fCAhbWZwLnN1cHBvcnRzVHJhbnNpdGlvbikge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdHZhciBkdXJhdGlvbiA9IHpvb21TdC5kdXJhdGlvbixcblx0XHRcdFx0Z2V0RWxUb0FuaW1hdGUgPSBmdW5jdGlvbihpbWFnZSkge1xuXHRcdFx0XHRcdHZhciBuZXdJbWcgPSBpbWFnZS5jbG9uZSgpLnJlbW92ZUF0dHIoJ3N0eWxlJykucmVtb3ZlQXR0cignY2xhc3MnKS5hZGRDbGFzcygnbWZwLWFuaW1hdGVkLWltYWdlJyksXG5cdFx0XHRcdFx0XHR0cmFuc2l0aW9uID0gJ2FsbCAnKyh6b29tU3QuZHVyYXRpb24vMTAwMCkrJ3MgJyArIHpvb21TdC5lYXNpbmcsXG5cdFx0XHRcdFx0XHRjc3NPYmogPSB7XG5cdFx0XHRcdFx0XHRcdHBvc2l0aW9uOiAnZml4ZWQnLFxuXHRcdFx0XHRcdFx0XHR6SW5kZXg6IDk5OTksXG5cdFx0XHRcdFx0XHRcdGxlZnQ6IDAsXG5cdFx0XHRcdFx0XHRcdHRvcDogMCxcblx0XHRcdFx0XHRcdFx0Jy13ZWJraXQtYmFja2ZhY2UtdmlzaWJpbGl0eSc6ICdoaWRkZW4nXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0dCA9ICd0cmFuc2l0aW9uJztcblxuXHRcdFx0XHRcdGNzc09ialsnLXdlYmtpdC0nK3RdID0gY3NzT2JqWyctbW96LScrdF0gPSBjc3NPYmpbJy1vLScrdF0gPSBjc3NPYmpbdF0gPSB0cmFuc2l0aW9uO1xuXG5cdFx0XHRcdFx0bmV3SW1nLmNzcyhjc3NPYmopO1xuXHRcdFx0XHRcdHJldHVybiBuZXdJbWc7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHNob3dNYWluQ29udGVudCA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdG1mcC5jb250ZW50LmNzcygndmlzaWJpbGl0eScsICd2aXNpYmxlJyk7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdG9wZW5UaW1lb3V0LFxuXHRcdFx0XHRhbmltYXRlZEltZztcblxuXHRcdFx0X21mcE9uKCdCdWlsZENvbnRyb2xzJytucywgZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGlmKG1mcC5fYWxsb3dab29tKCkpIHtcblxuXHRcdFx0XHRcdGNsZWFyVGltZW91dChvcGVuVGltZW91dCk7XG5cdFx0XHRcdFx0bWZwLmNvbnRlbnQuY3NzKCd2aXNpYmlsaXR5JywgJ2hpZGRlbicpO1xuXG5cdFx0XHRcdFx0Ly8gQmFzaWNhbGx5LCBhbGwgY29kZSBiZWxvdyBkb2VzIGlzIGNsb25lcyBleGlzdGluZyBpbWFnZSwgcHV0cyBpbiBvbiB0b3Agb2YgdGhlIGN1cnJlbnQgb25lIGFuZCBhbmltYXRlZCBpdFxuXG5cdFx0XHRcdFx0aW1hZ2UgPSBtZnAuX2dldEl0ZW1Ub1pvb20oKTtcblxuXHRcdFx0XHRcdGlmKCFpbWFnZSkge1xuXHRcdFx0XHRcdFx0c2hvd01haW5Db250ZW50KCk7XG5cdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0YW5pbWF0ZWRJbWcgPSBnZXRFbFRvQW5pbWF0ZShpbWFnZSk7XG5cblx0XHRcdFx0XHRhbmltYXRlZEltZy5jc3MoIG1mcC5fZ2V0T2Zmc2V0KCkgKTtcblxuXHRcdFx0XHRcdG1mcC53cmFwLmFwcGVuZChhbmltYXRlZEltZyk7XG5cblx0XHRcdFx0XHRvcGVuVGltZW91dCA9IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRhbmltYXRlZEltZy5jc3MoIG1mcC5fZ2V0T2Zmc2V0KCB0cnVlICkgKTtcblx0XHRcdFx0XHRcdG9wZW5UaW1lb3V0ID0gc2V0VGltZW91dChmdW5jdGlvbigpIHtcblxuXHRcdFx0XHRcdFx0XHRzaG93TWFpbkNvbnRlbnQoKTtcblxuXHRcdFx0XHRcdFx0XHRzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0XHRcdGFuaW1hdGVkSW1nLnJlbW92ZSgpO1xuXHRcdFx0XHRcdFx0XHRcdGltYWdlID0gYW5pbWF0ZWRJbWcgPSBudWxsO1xuXHRcdFx0XHRcdFx0XHRcdF9tZnBUcmlnZ2VyKCdab29tQW5pbWF0aW9uRW5kZWQnKTtcblx0XHRcdFx0XHRcdFx0fSwgMTYpOyAvLyBhdm9pZCBibGluayB3aGVuIHN3aXRjaGluZyBpbWFnZXNcblxuXHRcdFx0XHRcdFx0fSwgZHVyYXRpb24pOyAvLyB0aGlzIHRpbWVvdXQgZXF1YWxzIGFuaW1hdGlvbiBkdXJhdGlvblxuXG5cdFx0XHRcdFx0fSwgMTYpOyAvLyBieSBhZGRpbmcgdGhpcyB0aW1lb3V0IHdlIGF2b2lkIHNob3J0IGdsaXRjaCBhdCB0aGUgYmVnaW5uaW5nIG9mIGFuaW1hdGlvblxuXG5cblx0XHRcdFx0XHQvLyBMb3RzIG9mIHRpbWVvdXRzLi4uXG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdFx0X21mcE9uKEJFRk9SRV9DTE9TRV9FVkVOVCtucywgZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGlmKG1mcC5fYWxsb3dab29tKCkpIHtcblxuXHRcdFx0XHRcdGNsZWFyVGltZW91dChvcGVuVGltZW91dCk7XG5cblx0XHRcdFx0XHRtZnAuc3QucmVtb3ZhbERlbGF5ID0gZHVyYXRpb247XG5cblx0XHRcdFx0XHRpZighaW1hZ2UpIHtcblx0XHRcdFx0XHRcdGltYWdlID0gbWZwLl9nZXRJdGVtVG9ab29tKCk7XG5cdFx0XHRcdFx0XHRpZighaW1hZ2UpIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0YW5pbWF0ZWRJbWcgPSBnZXRFbFRvQW5pbWF0ZShpbWFnZSk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0YW5pbWF0ZWRJbWcuY3NzKCBtZnAuX2dldE9mZnNldCh0cnVlKSApO1xuXHRcdFx0XHRcdG1mcC53cmFwLmFwcGVuZChhbmltYXRlZEltZyk7XG5cdFx0XHRcdFx0bWZwLmNvbnRlbnQuY3NzKCd2aXNpYmlsaXR5JywgJ2hpZGRlbicpO1xuXG5cdFx0XHRcdFx0c2V0VGltZW91dChmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdGFuaW1hdGVkSW1nLmNzcyggbWZwLl9nZXRPZmZzZXQoKSApO1xuXHRcdFx0XHRcdH0sIDE2KTtcblx0XHRcdFx0fVxuXG5cdFx0XHR9KTtcblxuXHRcdFx0X21mcE9uKENMT1NFX0VWRU5UK25zLCBmdW5jdGlvbigpIHtcblx0XHRcdFx0aWYobWZwLl9hbGxvd1pvb20oKSkge1xuXHRcdFx0XHRcdHNob3dNYWluQ29udGVudCgpO1xuXHRcdFx0XHRcdGlmKGFuaW1hdGVkSW1nKSB7XG5cdFx0XHRcdFx0XHRhbmltYXRlZEltZy5yZW1vdmUoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aW1hZ2UgPSBudWxsO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9LFxuXG5cdFx0X2FsbG93Wm9vbTogZnVuY3Rpb24oKSB7XG5cdFx0XHRyZXR1cm4gbWZwLmN1cnJJdGVtLnR5cGUgPT09ICdpbWFnZSc7XG5cdFx0fSxcblxuXHRcdF9nZXRJdGVtVG9ab29tOiBmdW5jdGlvbigpIHtcblx0XHRcdGlmKG1mcC5jdXJySXRlbS5oYXNTaXplKSB7XG5cdFx0XHRcdHJldHVybiBtZnAuY3Vyckl0ZW0uaW1nO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHQvLyBHZXQgZWxlbWVudCBwb3N0aW9uIHJlbGF0aXZlIHRvIHZpZXdwb3J0XG5cdFx0X2dldE9mZnNldDogZnVuY3Rpb24oaXNMYXJnZSkge1xuXHRcdFx0dmFyIGVsO1xuXHRcdFx0aWYoaXNMYXJnZSkge1xuXHRcdFx0XHRlbCA9IG1mcC5jdXJySXRlbS5pbWc7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRlbCA9IG1mcC5zdC56b29tLm9wZW5lcihtZnAuY3Vyckl0ZW0uZWwgfHwgbWZwLmN1cnJJdGVtKTtcblx0XHRcdH1cblxuXHRcdFx0dmFyIG9mZnNldCA9IGVsLm9mZnNldCgpO1xuXHRcdFx0dmFyIHBhZGRpbmdUb3AgPSBwYXJzZUludChlbC5jc3MoJ3BhZGRpbmctdG9wJyksMTApO1xuXHRcdFx0dmFyIHBhZGRpbmdCb3R0b20gPSBwYXJzZUludChlbC5jc3MoJ3BhZGRpbmctYm90dG9tJyksMTApO1xuXHRcdFx0b2Zmc2V0LnRvcCAtPSAoICQod2luZG93KS5zY3JvbGxUb3AoKSAtIHBhZGRpbmdUb3AgKTtcblxuXG5cdFx0XHQvKlxuXG5cdFx0XHRBbmltYXRpbmcgbGVmdCArIHRvcCArIHdpZHRoL2hlaWdodCBsb29rcyBnbGl0Y2h5IGluIEZpcmVmb3gsIGJ1dCBwZXJmZWN0IGluIENocm9tZS4gQW5kIHZpY2UtdmVyc2EuXG5cblx0XHRcdCAqL1xuXHRcdFx0dmFyIG9iaiA9IHtcblx0XHRcdFx0d2lkdGg6IGVsLndpZHRoKCksXG5cdFx0XHRcdC8vIGZpeCBaZXB0byBoZWlnaHQrcGFkZGluZyBpc3N1ZVxuXHRcdFx0XHRoZWlnaHQ6IChfaXNKUSA/IGVsLmlubmVySGVpZ2h0KCkgOiBlbFswXS5vZmZzZXRIZWlnaHQpIC0gcGFkZGluZ0JvdHRvbSAtIHBhZGRpbmdUb3Bcblx0XHRcdH07XG5cblx0XHRcdC8vIEkgaGF0ZSB0byBkbyB0aGlzLCBidXQgdGhlcmUgaXMgbm8gYW5vdGhlciBvcHRpb25cblx0XHRcdGlmKCBnZXRIYXNNb3pUcmFuc2Zvcm0oKSApIHtcblx0XHRcdFx0b2JqWyctbW96LXRyYW5zZm9ybSddID0gb2JqWyd0cmFuc2Zvcm0nXSA9ICd0cmFuc2xhdGUoJyArIG9mZnNldC5sZWZ0ICsgJ3B4LCcgKyBvZmZzZXQudG9wICsgJ3B4KSc7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRvYmoubGVmdCA9IG9mZnNldC5sZWZ0O1xuXHRcdFx0XHRvYmoudG9wID0gb2Zmc2V0LnRvcDtcblx0XHRcdH1cblx0XHRcdHJldHVybiBvYmo7XG5cdFx0fVxuXG5cdH1cbn0pO1xuXG5cblxuLyo+Pnpvb20qL1xuXG4vKj4+aWZyYW1lKi9cblxudmFyIElGUkFNRV9OUyA9ICdpZnJhbWUnLFxuXHRfZW1wdHlQYWdlID0gJy8vYWJvdXQ6YmxhbmsnLFxuXG5cdF9maXhJZnJhbWVCdWdzID0gZnVuY3Rpb24oaXNTaG93aW5nKSB7XG5cdFx0aWYobWZwLmN1cnJUZW1wbGF0ZVtJRlJBTUVfTlNdKSB7XG5cdFx0XHR2YXIgZWwgPSBtZnAuY3VyclRlbXBsYXRlW0lGUkFNRV9OU10uZmluZCgnaWZyYW1lJyk7XG5cdFx0XHRpZihlbC5sZW5ndGgpIHtcblx0XHRcdFx0Ly8gcmVzZXQgc3JjIGFmdGVyIHRoZSBwb3B1cCBpcyBjbG9zZWQgdG8gYXZvaWQgXCJ2aWRlbyBrZWVwcyBwbGF5aW5nIGFmdGVyIHBvcHVwIGlzIGNsb3NlZFwiIGJ1Z1xuXHRcdFx0XHRpZighaXNTaG93aW5nKSB7XG5cdFx0XHRcdFx0ZWxbMF0uc3JjID0gX2VtcHR5UGFnZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIElFOCBibGFjayBzY3JlZW4gYnVnIGZpeFxuXHRcdFx0XHRpZihtZnAuaXNJRTgpIHtcblx0XHRcdFx0XHRlbC5jc3MoJ2Rpc3BsYXknLCBpc1Nob3dpbmcgPyAnYmxvY2snIDogJ25vbmUnKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fTtcblxuJC5tYWduaWZpY1BvcHVwLnJlZ2lzdGVyTW9kdWxlKElGUkFNRV9OUywge1xuXG5cdG9wdGlvbnM6IHtcblx0XHRtYXJrdXA6ICc8ZGl2IGNsYXNzPVwibWZwLWlmcmFtZS1zY2FsZXJcIj4nK1xuXHRcdFx0XHRcdCc8ZGl2IGNsYXNzPVwibWZwLWNsb3NlXCI+PC9kaXY+Jytcblx0XHRcdFx0XHQnPGlmcmFtZSBjbGFzcz1cIm1mcC1pZnJhbWVcIiBzcmM9XCIvL2Fib3V0OmJsYW5rXCIgZnJhbWVib3JkZXI9XCIwXCIgYWxsb3dmdWxsc2NyZWVuPjwvaWZyYW1lPicrXG5cdFx0XHRcdCc8L2Rpdj4nLFxuXG5cdFx0c3JjQWN0aW9uOiAnaWZyYW1lX3NyYycsXG5cblx0XHQvLyB3ZSBkb24ndCBjYXJlIGFuZCBzdXBwb3J0IG9ubHkgb25lIGRlZmF1bHQgdHlwZSBvZiBVUkwgYnkgZGVmYXVsdFxuXHRcdHBhdHRlcm5zOiB7XG5cdFx0XHR5b3V0dWJlOiB7XG5cdFx0XHRcdGluZGV4OiAneW91dHViZS5jb20nLFxuXHRcdFx0XHRpZDogJ3Y9Jyxcblx0XHRcdFx0c3JjOiAnLy93d3cueW91dHViZS5jb20vZW1iZWQvJWlkJT9hdXRvcGxheT0xJ1xuXHRcdFx0fSxcblx0XHRcdHZpbWVvOiB7XG5cdFx0XHRcdGluZGV4OiAndmltZW8uY29tLycsXG5cdFx0XHRcdGlkOiAnLycsXG5cdFx0XHRcdHNyYzogJy8vcGxheWVyLnZpbWVvLmNvbS92aWRlby8laWQlP2F1dG9wbGF5PTEnXG5cdFx0XHR9LFxuXHRcdFx0Z21hcHM6IHtcblx0XHRcdFx0aW5kZXg6ICcvL21hcHMuZ29vZ2xlLicsXG5cdFx0XHRcdHNyYzogJyVpZCUmb3V0cHV0PWVtYmVkJ1xuXHRcdFx0fVxuXHRcdH1cblx0fSxcblxuXHRwcm90bzoge1xuXHRcdGluaXRJZnJhbWU6IGZ1bmN0aW9uKCkge1xuXHRcdFx0bWZwLnR5cGVzLnB1c2goSUZSQU1FX05TKTtcblxuXHRcdFx0X21mcE9uKCdCZWZvcmVDaGFuZ2UnLCBmdW5jdGlvbihlLCBwcmV2VHlwZSwgbmV3VHlwZSkge1xuXHRcdFx0XHRpZihwcmV2VHlwZSAhPT0gbmV3VHlwZSkge1xuXHRcdFx0XHRcdGlmKHByZXZUeXBlID09PSBJRlJBTUVfTlMpIHtcblx0XHRcdFx0XHRcdF9maXhJZnJhbWVCdWdzKCk7IC8vIGlmcmFtZSBpZiByZW1vdmVkXG5cdFx0XHRcdFx0fSBlbHNlIGlmKG5ld1R5cGUgPT09IElGUkFNRV9OUykge1xuXHRcdFx0XHRcdFx0X2ZpeElmcmFtZUJ1Z3ModHJ1ZSk7IC8vIGlmcmFtZSBpcyBzaG93aW5nXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9Ly8gZWxzZSB7XG5cdFx0XHRcdFx0Ly8gaWZyYW1lIHNvdXJjZSBpcyBzd2l0Y2hlZCwgZG9uJ3QgZG8gYW55dGhpbmdcblx0XHRcdFx0Ly99XG5cdFx0XHR9KTtcblxuXHRcdFx0X21mcE9uKENMT1NFX0VWRU5UICsgJy4nICsgSUZSQU1FX05TLCBmdW5jdGlvbigpIHtcblx0XHRcdFx0X2ZpeElmcmFtZUJ1Z3MoKTtcblx0XHRcdH0pO1xuXHRcdH0sXG5cblx0XHRnZXRJZnJhbWU6IGZ1bmN0aW9uKGl0ZW0sIHRlbXBsYXRlKSB7XG5cdFx0XHR2YXIgZW1iZWRTcmMgPSBpdGVtLnNyYztcblx0XHRcdHZhciBpZnJhbWVTdCA9IG1mcC5zdC5pZnJhbWU7XG5cblx0XHRcdCQuZWFjaChpZnJhbWVTdC5wYXR0ZXJucywgZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGlmKGVtYmVkU3JjLmluZGV4T2YoIHRoaXMuaW5kZXggKSA+IC0xKSB7XG5cdFx0XHRcdFx0aWYodGhpcy5pZCkge1xuXHRcdFx0XHRcdFx0aWYodHlwZW9mIHRoaXMuaWQgPT09ICdzdHJpbmcnKSB7XG5cdFx0XHRcdFx0XHRcdGVtYmVkU3JjID0gZW1iZWRTcmMuc3Vic3RyKGVtYmVkU3JjLmxhc3RJbmRleE9mKHRoaXMuaWQpK3RoaXMuaWQubGVuZ3RoLCBlbWJlZFNyYy5sZW5ndGgpO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0ZW1iZWRTcmMgPSB0aGlzLmlkLmNhbGwoIHRoaXMsIGVtYmVkU3JjICk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGVtYmVkU3JjID0gdGhpcy5zcmMucmVwbGFjZSgnJWlkJScsIGVtYmVkU3JjICk7XG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlOyAvLyBicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cblx0XHRcdHZhciBkYXRhT2JqID0ge307XG5cdFx0XHRpZihpZnJhbWVTdC5zcmNBY3Rpb24pIHtcblx0XHRcdFx0ZGF0YU9ialtpZnJhbWVTdC5zcmNBY3Rpb25dID0gZW1iZWRTcmM7XG5cdFx0XHR9XG5cdFx0XHRtZnAuX3BhcnNlTWFya3VwKHRlbXBsYXRlLCBkYXRhT2JqLCBpdGVtKTtcblxuXHRcdFx0bWZwLnVwZGF0ZVN0YXR1cygncmVhZHknKTtcblxuXHRcdFx0cmV0dXJuIHRlbXBsYXRlO1xuXHRcdH1cblx0fVxufSk7XG5cblxuXG4vKj4+aWZyYW1lKi9cblxuLyo+PmdhbGxlcnkqL1xuLyoqXG4gKiBHZXQgbG9vcGVkIGluZGV4IGRlcGVuZGluZyBvbiBudW1iZXIgb2Ygc2xpZGVzXG4gKi9cbnZhciBfZ2V0TG9vcGVkSWQgPSBmdW5jdGlvbihpbmRleCkge1xuXHRcdHZhciBudW1TbGlkZXMgPSBtZnAuaXRlbXMubGVuZ3RoO1xuXHRcdGlmKGluZGV4ID4gbnVtU2xpZGVzIC0gMSkge1xuXHRcdFx0cmV0dXJuIGluZGV4IC0gbnVtU2xpZGVzO1xuXHRcdH0gZWxzZSAgaWYoaW5kZXggPCAwKSB7XG5cdFx0XHRyZXR1cm4gbnVtU2xpZGVzICsgaW5kZXg7XG5cdFx0fVxuXHRcdHJldHVybiBpbmRleDtcblx0fSxcblx0X3JlcGxhY2VDdXJyVG90YWwgPSBmdW5jdGlvbih0ZXh0LCBjdXJyLCB0b3RhbCkge1xuXHRcdHJldHVybiB0ZXh0LnJlcGxhY2UoLyVjdXJyJS9naSwgY3VyciArIDEpLnJlcGxhY2UoLyV0b3RhbCUvZ2ksIHRvdGFsKTtcblx0fTtcblxuJC5tYWduaWZpY1BvcHVwLnJlZ2lzdGVyTW9kdWxlKCdnYWxsZXJ5Jywge1xuXG5cdG9wdGlvbnM6IHtcblx0XHRlbmFibGVkOiBmYWxzZSxcblx0XHRhcnJvd01hcmt1cDogJzxidXR0b24gdGl0bGU9XCIldGl0bGUlXCIgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwibWZwLWFycm93IG1mcC1hcnJvdy0lZGlyJVwiPjwvYnV0dG9uPicsXG5cdFx0cHJlbG9hZDogWzAsMl0sXG5cdFx0bmF2aWdhdGVCeUltZ0NsaWNrOiB0cnVlLFxuXHRcdGFycm93czogdHJ1ZSxcblxuXHRcdHRQcmV2OiAnUHJldmlvdXMgKExlZnQgYXJyb3cga2V5KScsXG5cdFx0dE5leHQ6ICdOZXh0IChSaWdodCBhcnJvdyBrZXkpJyxcblx0XHR0Q291bnRlcjogJyVjdXJyJSBvZiAldG90YWwlJ1xuXHR9LFxuXG5cdHByb3RvOiB7XG5cdFx0aW5pdEdhbGxlcnk6IGZ1bmN0aW9uKCkge1xuXG5cdFx0XHR2YXIgZ1N0ID0gbWZwLnN0LmdhbGxlcnksXG5cdFx0XHRcdG5zID0gJy5tZnAtZ2FsbGVyeSc7XG5cblx0XHRcdG1mcC5kaXJlY3Rpb24gPSB0cnVlOyAvLyB0cnVlIC0gbmV4dCwgZmFsc2UgLSBwcmV2XG5cblx0XHRcdGlmKCFnU3QgfHwgIWdTdC5lbmFibGVkICkgcmV0dXJuIGZhbHNlO1xuXG5cdFx0XHRfd3JhcENsYXNzZXMgKz0gJyBtZnAtZ2FsbGVyeSc7XG5cblx0XHRcdF9tZnBPbihPUEVOX0VWRU5UK25zLCBmdW5jdGlvbigpIHtcblxuXHRcdFx0XHRpZihnU3QubmF2aWdhdGVCeUltZ0NsaWNrKSB7XG5cdFx0XHRcdFx0bWZwLndyYXAub24oJ2NsaWNrJytucywgJy5tZnAtaW1nJywgZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRpZihtZnAuaXRlbXMubGVuZ3RoID4gMSkge1xuXHRcdFx0XHRcdFx0XHRtZnAubmV4dCgpO1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRfZG9jdW1lbnQub24oJ2tleWRvd24nK25zLCBmdW5jdGlvbihlKSB7XG5cdFx0XHRcdFx0aWYgKGUua2V5Q29kZSA9PT0gMzcpIHtcblx0XHRcdFx0XHRcdG1mcC5wcmV2KCk7XG5cdFx0XHRcdFx0fSBlbHNlIGlmIChlLmtleUNvZGUgPT09IDM5KSB7XG5cdFx0XHRcdFx0XHRtZnAubmV4dCgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblxuXHRcdFx0X21mcE9uKCdVcGRhdGVTdGF0dXMnK25zLCBmdW5jdGlvbihlLCBkYXRhKSB7XG5cdFx0XHRcdGlmKGRhdGEudGV4dCkge1xuXHRcdFx0XHRcdGRhdGEudGV4dCA9IF9yZXBsYWNlQ3VyclRvdGFsKGRhdGEudGV4dCwgbWZwLmN1cnJJdGVtLmluZGV4LCBtZnAuaXRlbXMubGVuZ3RoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cblx0XHRcdF9tZnBPbihNQVJLVVBfUEFSU0VfRVZFTlQrbnMsIGZ1bmN0aW9uKGUsIGVsZW1lbnQsIHZhbHVlcywgaXRlbSkge1xuXHRcdFx0XHR2YXIgbCA9IG1mcC5pdGVtcy5sZW5ndGg7XG5cdFx0XHRcdHZhbHVlcy5jb3VudGVyID0gbCA+IDEgPyBfcmVwbGFjZUN1cnJUb3RhbChnU3QudENvdW50ZXIsIGl0ZW0uaW5kZXgsIGwpIDogJyc7XG5cdFx0XHR9KTtcblxuXHRcdFx0X21mcE9uKCdCdWlsZENvbnRyb2xzJyArIG5zLCBmdW5jdGlvbigpIHtcblx0XHRcdFx0aWYobWZwLml0ZW1zLmxlbmd0aCA+IDEgJiYgZ1N0LmFycm93cyAmJiAhbWZwLmFycm93TGVmdCkge1xuXHRcdFx0XHRcdHZhciBtYXJrdXAgPSBnU3QuYXJyb3dNYXJrdXAsXG5cdFx0XHRcdFx0XHRhcnJvd0xlZnQgPSBtZnAuYXJyb3dMZWZ0ID0gJCggbWFya3VwLnJlcGxhY2UoLyV0aXRsZSUvZ2ksIGdTdC50UHJldikucmVwbGFjZSgvJWRpciUvZ2ksICdsZWZ0JykgKS5hZGRDbGFzcyhQUkVWRU5UX0NMT1NFX0NMQVNTKSxcblx0XHRcdFx0XHRcdGFycm93UmlnaHQgPSBtZnAuYXJyb3dSaWdodCA9ICQoIG1hcmt1cC5yZXBsYWNlKC8ldGl0bGUlL2dpLCBnU3QudE5leHQpLnJlcGxhY2UoLyVkaXIlL2dpLCAncmlnaHQnKSApLmFkZENsYXNzKFBSRVZFTlRfQ0xPU0VfQ0xBU1MpO1xuXG5cdFx0XHRcdFx0YXJyb3dMZWZ0LmNsaWNrKGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0bWZwLnByZXYoKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRhcnJvd1JpZ2h0LmNsaWNrKGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0bWZwLm5leHQoKTtcblx0XHRcdFx0XHR9KTtcblxuXHRcdFx0XHRcdG1mcC5jb250YWluZXIuYXBwZW5kKGFycm93TGVmdC5hZGQoYXJyb3dSaWdodCkpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblxuXHRcdFx0X21mcE9uKENIQU5HRV9FVkVOVCtucywgZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGlmKG1mcC5fcHJlbG9hZFRpbWVvdXQpIGNsZWFyVGltZW91dChtZnAuX3ByZWxvYWRUaW1lb3V0KTtcblxuXHRcdFx0XHRtZnAuX3ByZWxvYWRUaW1lb3V0ID0gc2V0VGltZW91dChmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRtZnAucHJlbG9hZE5lYXJieUltYWdlcygpO1xuXHRcdFx0XHRcdG1mcC5fcHJlbG9hZFRpbWVvdXQgPSBudWxsO1xuXHRcdFx0XHR9LCAxNik7XG5cdFx0XHR9KTtcblxuXG5cdFx0XHRfbWZwT24oQ0xPU0VfRVZFTlQrbnMsIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRfZG9jdW1lbnQub2ZmKG5zKTtcblx0XHRcdFx0bWZwLndyYXAub2ZmKCdjbGljaycrbnMpO1xuXHRcdFx0XHRtZnAuYXJyb3dSaWdodCA9IG1mcC5hcnJvd0xlZnQgPSBudWxsO1xuXHRcdFx0fSk7XG5cblx0XHR9LFxuXHRcdG5leHQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0bWZwLmRpcmVjdGlvbiA9IHRydWU7XG5cdFx0XHRtZnAuaW5kZXggPSBfZ2V0TG9vcGVkSWQobWZwLmluZGV4ICsgMSk7XG5cdFx0XHRtZnAudXBkYXRlSXRlbUhUTUwoKTtcblx0XHR9LFxuXHRcdHByZXY6IGZ1bmN0aW9uKCkge1xuXHRcdFx0bWZwLmRpcmVjdGlvbiA9IGZhbHNlO1xuXHRcdFx0bWZwLmluZGV4ID0gX2dldExvb3BlZElkKG1mcC5pbmRleCAtIDEpO1xuXHRcdFx0bWZwLnVwZGF0ZUl0ZW1IVE1MKCk7XG5cdFx0fSxcblx0XHRnb1RvOiBmdW5jdGlvbihuZXdJbmRleCkge1xuXHRcdFx0bWZwLmRpcmVjdGlvbiA9IChuZXdJbmRleCA+PSBtZnAuaW5kZXgpO1xuXHRcdFx0bWZwLmluZGV4ID0gbmV3SW5kZXg7XG5cdFx0XHRtZnAudXBkYXRlSXRlbUhUTUwoKTtcblx0XHR9LFxuXHRcdHByZWxvYWROZWFyYnlJbWFnZXM6IGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIHAgPSBtZnAuc3QuZ2FsbGVyeS5wcmVsb2FkLFxuXHRcdFx0XHRwcmVsb2FkQmVmb3JlID0gTWF0aC5taW4ocFswXSwgbWZwLml0ZW1zLmxlbmd0aCksXG5cdFx0XHRcdHByZWxvYWRBZnRlciA9IE1hdGgubWluKHBbMV0sIG1mcC5pdGVtcy5sZW5ndGgpLFxuXHRcdFx0XHRpO1xuXG5cdFx0XHRmb3IoaSA9IDE7IGkgPD0gKG1mcC5kaXJlY3Rpb24gPyBwcmVsb2FkQWZ0ZXIgOiBwcmVsb2FkQmVmb3JlKTsgaSsrKSB7XG5cdFx0XHRcdG1mcC5fcHJlbG9hZEl0ZW0obWZwLmluZGV4K2kpO1xuXHRcdFx0fVxuXHRcdFx0Zm9yKGkgPSAxOyBpIDw9IChtZnAuZGlyZWN0aW9uID8gcHJlbG9hZEJlZm9yZSA6IHByZWxvYWRBZnRlcik7IGkrKykge1xuXHRcdFx0XHRtZnAuX3ByZWxvYWRJdGVtKG1mcC5pbmRleC1pKTtcblx0XHRcdH1cblx0XHR9LFxuXHRcdF9wcmVsb2FkSXRlbTogZnVuY3Rpb24oaW5kZXgpIHtcblx0XHRcdGluZGV4ID0gX2dldExvb3BlZElkKGluZGV4KTtcblxuXHRcdFx0aWYobWZwLml0ZW1zW2luZGV4XS5wcmVsb2FkZWQpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHR2YXIgaXRlbSA9IG1mcC5pdGVtc1tpbmRleF07XG5cdFx0XHRpZighaXRlbS5wYXJzZWQpIHtcblx0XHRcdFx0aXRlbSA9IG1mcC5wYXJzZUVsKCBpbmRleCApO1xuXHRcdFx0fVxuXG5cdFx0XHRfbWZwVHJpZ2dlcignTGF6eUxvYWQnLCBpdGVtKTtcblxuXHRcdFx0aWYoaXRlbS50eXBlID09PSAnaW1hZ2UnKSB7XG5cdFx0XHRcdGl0ZW0uaW1nID0gJCgnPGltZyBjbGFzcz1cIm1mcC1pbWdcIiAvPicpLm9uKCdsb2FkLm1mcGxvYWRlcicsIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdGl0ZW0uaGFzU2l6ZSA9IHRydWU7XG5cdFx0XHRcdH0pLm9uKCdlcnJvci5tZnBsb2FkZXInLCBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRpdGVtLmhhc1NpemUgPSB0cnVlO1xuXHRcdFx0XHRcdGl0ZW0ubG9hZEVycm9yID0gdHJ1ZTtcblx0XHRcdFx0XHRfbWZwVHJpZ2dlcignTGF6eUxvYWRFcnJvcicsIGl0ZW0pO1xuXHRcdFx0XHR9KS5hdHRyKCdzcmMnLCBpdGVtLnNyYyk7XG5cdFx0XHR9XG5cblxuXHRcdFx0aXRlbS5wcmVsb2FkZWQgPSB0cnVlO1xuXHRcdH1cblx0fVxufSk7XG5cbi8qPj5nYWxsZXJ5Ki9cblxuLyo+PnJldGluYSovXG5cbnZhciBSRVRJTkFfTlMgPSAncmV0aW5hJztcblxuJC5tYWduaWZpY1BvcHVwLnJlZ2lzdGVyTW9kdWxlKFJFVElOQV9OUywge1xuXHRvcHRpb25zOiB7XG5cdFx0cmVwbGFjZVNyYzogZnVuY3Rpb24oaXRlbSkge1xuXHRcdFx0cmV0dXJuIGl0ZW0uc3JjLnJlcGxhY2UoL1xcLlxcdyskLywgZnVuY3Rpb24obSkgeyByZXR1cm4gJ0AyeCcgKyBtOyB9KTtcblx0XHR9LFxuXHRcdHJhdGlvOiAxIC8vIEZ1bmN0aW9uIG9yIG51bWJlci4gIFNldCB0byAxIHRvIGRpc2FibGUuXG5cdH0sXG5cdHByb3RvOiB7XG5cdFx0aW5pdFJldGluYTogZnVuY3Rpb24oKSB7XG5cdFx0XHRpZih3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyA+IDEpIHtcblxuXHRcdFx0XHR2YXIgc3QgPSBtZnAuc3QucmV0aW5hLFxuXHRcdFx0XHRcdHJhdGlvID0gc3QucmF0aW87XG5cblx0XHRcdFx0cmF0aW8gPSAhaXNOYU4ocmF0aW8pID8gcmF0aW8gOiByYXRpbygpO1xuXG5cdFx0XHRcdGlmKHJhdGlvID4gMSkge1xuXHRcdFx0XHRcdF9tZnBPbignSW1hZ2VIYXNTaXplJyArICcuJyArIFJFVElOQV9OUywgZnVuY3Rpb24oZSwgaXRlbSkge1xuXHRcdFx0XHRcdFx0aXRlbS5pbWcuY3NzKHtcblx0XHRcdFx0XHRcdFx0J21heC13aWR0aCc6IGl0ZW0uaW1nWzBdLm5hdHVyYWxXaWR0aCAvIHJhdGlvLFxuXHRcdFx0XHRcdFx0XHQnd2lkdGgnOiAnMTAwJSdcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdF9tZnBPbignRWxlbWVudFBhcnNlJyArICcuJyArIFJFVElOQV9OUywgZnVuY3Rpb24oZSwgaXRlbSkge1xuXHRcdFx0XHRcdFx0aXRlbS5zcmMgPSBzdC5yZXBsYWNlU3JjKGl0ZW0sIHJhdGlvKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0fVxuXHR9XG59KTtcblxuLyo+PnJldGluYSovXG4gX2NoZWNrSW5zdGFuY2UoKTsgfSkpOyIsIi8qIVxyXG4gKiBAbmFtZSBKYXZhU2NyaXB0L05vZGVKUyBNZXJnZSB2MS4yLjFcclxuICogQGF1dGhvciB5ZWlrb3NcclxuICogQHJlcG9zaXRvcnkgaHR0cHM6Ly9naXRodWIuY29tL3llaWtvcy9qcy5tZXJnZVxyXG5cclxuICogQ29weXJpZ2h0IDIwMTQgeWVpa29zIC0gTUlUIGxpY2Vuc2VcclxuICogaHR0cHM6Ly9yYXcuZ2l0aHViLmNvbS95ZWlrb3MvanMubWVyZ2UvbWFzdGVyL0xJQ0VOU0VcclxuICovXHJcblxyXG47KGZ1bmN0aW9uKGlzTm9kZSkge1xyXG5cclxuXHQvKipcclxuXHQgKiBNZXJnZSBvbmUgb3IgbW9yZSBvYmplY3RzIFxyXG5cdCAqIEBwYXJhbSBib29sPyBjbG9uZVxyXG5cdCAqIEBwYXJhbSBtaXhlZCwuLi4gYXJndW1lbnRzXHJcblx0ICogQHJldHVybiBvYmplY3RcclxuXHQgKi9cclxuXHJcblx0dmFyIFB1YmxpYyA9IGZ1bmN0aW9uKGNsb25lKSB7XHJcblxyXG5cdFx0cmV0dXJuIG1lcmdlKGNsb25lID09PSB0cnVlLCBmYWxzZSwgYXJndW1lbnRzKTtcclxuXHJcblx0fSwgcHVibGljTmFtZSA9ICdtZXJnZSc7XHJcblxyXG5cdC8qKlxyXG5cdCAqIE1lcmdlIHR3byBvciBtb3JlIG9iamVjdHMgcmVjdXJzaXZlbHkgXHJcblx0ICogQHBhcmFtIGJvb2w/IGNsb25lXHJcblx0ICogQHBhcmFtIG1peGVkLC4uLiBhcmd1bWVudHNcclxuXHQgKiBAcmV0dXJuIG9iamVjdFxyXG5cdCAqL1xyXG5cclxuXHRQdWJsaWMucmVjdXJzaXZlID0gZnVuY3Rpb24oY2xvbmUpIHtcclxuXHJcblx0XHRyZXR1cm4gbWVyZ2UoY2xvbmUgPT09IHRydWUsIHRydWUsIGFyZ3VtZW50cyk7XHJcblxyXG5cdH07XHJcblxyXG5cdC8qKlxyXG5cdCAqIENsb25lIHRoZSBpbnB1dCByZW1vdmluZyBhbnkgcmVmZXJlbmNlXHJcblx0ICogQHBhcmFtIG1peGVkIGlucHV0XHJcblx0ICogQHJldHVybiBtaXhlZFxyXG5cdCAqL1xyXG5cclxuXHRQdWJsaWMuY2xvbmUgPSBmdW5jdGlvbihpbnB1dCkge1xyXG5cclxuXHRcdHZhciBvdXRwdXQgPSBpbnB1dCxcclxuXHRcdFx0dHlwZSA9IHR5cGVPZihpbnB1dCksXHJcblx0XHRcdGluZGV4LCBzaXplO1xyXG5cclxuXHRcdGlmICh0eXBlID09PSAnYXJyYXknKSB7XHJcblxyXG5cdFx0XHRvdXRwdXQgPSBbXTtcclxuXHRcdFx0c2l6ZSA9IGlucHV0Lmxlbmd0aDtcclxuXHJcblx0XHRcdGZvciAoaW5kZXg9MDtpbmRleDxzaXplOysraW5kZXgpXHJcblxyXG5cdFx0XHRcdG91dHB1dFtpbmRleF0gPSBQdWJsaWMuY2xvbmUoaW5wdXRbaW5kZXhdKTtcclxuXHJcblx0XHR9IGVsc2UgaWYgKHR5cGUgPT09ICdvYmplY3QnKSB7XHJcblxyXG5cdFx0XHRvdXRwdXQgPSB7fTtcclxuXHJcblx0XHRcdGZvciAoaW5kZXggaW4gaW5wdXQpXHJcblxyXG5cdFx0XHRcdG91dHB1dFtpbmRleF0gPSBQdWJsaWMuY2xvbmUoaW5wdXRbaW5kZXhdKTtcclxuXHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIG91dHB1dDtcclxuXHJcblx0fTtcclxuXHJcblx0LyoqXHJcblx0ICogTWVyZ2UgdHdvIG9iamVjdHMgcmVjdXJzaXZlbHlcclxuXHQgKiBAcGFyYW0gbWl4ZWQgaW5wdXRcclxuXHQgKiBAcGFyYW0gbWl4ZWQgZXh0ZW5kXHJcblx0ICogQHJldHVybiBtaXhlZFxyXG5cdCAqL1xyXG5cclxuXHRmdW5jdGlvbiBtZXJnZV9yZWN1cnNpdmUoYmFzZSwgZXh0ZW5kKSB7XHJcblxyXG5cdFx0aWYgKHR5cGVPZihiYXNlKSAhPT0gJ29iamVjdCcpXHJcblxyXG5cdFx0XHRyZXR1cm4gZXh0ZW5kO1xyXG5cclxuXHRcdGZvciAodmFyIGtleSBpbiBleHRlbmQpIHtcclxuXHJcblx0XHRcdGlmICh0eXBlT2YoYmFzZVtrZXldKSA9PT0gJ29iamVjdCcgJiYgdHlwZU9mKGV4dGVuZFtrZXldKSA9PT0gJ29iamVjdCcpIHtcclxuXHJcblx0XHRcdFx0YmFzZVtrZXldID0gbWVyZ2VfcmVjdXJzaXZlKGJhc2Vba2V5XSwgZXh0ZW5kW2tleV0pO1xyXG5cclxuXHRcdFx0fSBlbHNlIHtcclxuXHJcblx0XHRcdFx0YmFzZVtrZXldID0gZXh0ZW5kW2tleV07XHJcblxyXG5cdFx0XHR9XHJcblxyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBiYXNlO1xyXG5cclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIE1lcmdlIHR3byBvciBtb3JlIG9iamVjdHNcclxuXHQgKiBAcGFyYW0gYm9vbCBjbG9uZVxyXG5cdCAqIEBwYXJhbSBib29sIHJlY3Vyc2l2ZVxyXG5cdCAqIEBwYXJhbSBhcnJheSBhcmd2XHJcblx0ICogQHJldHVybiBvYmplY3RcclxuXHQgKi9cclxuXHJcblx0ZnVuY3Rpb24gbWVyZ2UoY2xvbmUsIHJlY3Vyc2l2ZSwgYXJndikge1xyXG5cclxuXHRcdHZhciByZXN1bHQgPSBhcmd2WzBdLFxyXG5cdFx0XHRzaXplID0gYXJndi5sZW5ndGg7XHJcblxyXG5cdFx0aWYgKGNsb25lIHx8IHR5cGVPZihyZXN1bHQpICE9PSAnb2JqZWN0JylcclxuXHJcblx0XHRcdHJlc3VsdCA9IHt9O1xyXG5cclxuXHRcdGZvciAodmFyIGluZGV4PTA7aW5kZXg8c2l6ZTsrK2luZGV4KSB7XHJcblxyXG5cdFx0XHR2YXIgaXRlbSA9IGFyZ3ZbaW5kZXhdLFxyXG5cclxuXHRcdFx0XHR0eXBlID0gdHlwZU9mKGl0ZW0pO1xyXG5cclxuXHRcdFx0aWYgKHR5cGUgIT09ICdvYmplY3QnKSBjb250aW51ZTtcclxuXHJcblx0XHRcdGZvciAodmFyIGtleSBpbiBpdGVtKSB7XHJcblxyXG5cdFx0XHRcdGlmIChrZXkgPT09ICdfX3Byb3RvX18nKSBjb250aW51ZTtcclxuXHJcblx0XHRcdFx0dmFyIHNpdGVtID0gY2xvbmUgPyBQdWJsaWMuY2xvbmUoaXRlbVtrZXldKSA6IGl0ZW1ba2V5XTtcclxuXHJcblx0XHRcdFx0aWYgKHJlY3Vyc2l2ZSkge1xyXG5cclxuXHRcdFx0XHRcdHJlc3VsdFtrZXldID0gbWVyZ2VfcmVjdXJzaXZlKHJlc3VsdFtrZXldLCBzaXRlbSk7XHJcblxyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblxyXG5cdFx0XHRcdFx0cmVzdWx0W2tleV0gPSBzaXRlbTtcclxuXHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0fVxyXG5cclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEdldCB0eXBlIG9mIHZhcmlhYmxlXHJcblx0ICogQHBhcmFtIG1peGVkIGlucHV0XHJcblx0ICogQHJldHVybiBzdHJpbmdcclxuXHQgKlxyXG5cdCAqIEBzZWUgaHR0cDovL2pzcGVyZi5jb20vdHlwZW9mdmFyXHJcblx0ICovXHJcblxyXG5cdGZ1bmN0aW9uIHR5cGVPZihpbnB1dCkge1xyXG5cclxuXHRcdHJldHVybiAoe30pLnRvU3RyaW5nLmNhbGwoaW5wdXQpLnNsaWNlKDgsIC0xKS50b0xvd2VyQ2FzZSgpO1xyXG5cclxuXHR9XHJcblxyXG5cdGlmIChpc05vZGUpIHtcclxuXHJcblx0XHRtb2R1bGUuZXhwb3J0cyA9IFB1YmxpYztcclxuXHJcblx0fSBlbHNlIHtcclxuXHJcblx0XHR3aW5kb3dbcHVibGljTmFtZV0gPSBQdWJsaWM7XHJcblxyXG5cdH1cclxuXHJcbn0pKHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnICYmIG1vZHVsZSAmJiB0eXBlb2YgbW9kdWxlLmV4cG9ydHMgPT09ICdvYmplY3QnICYmIG1vZHVsZS5leHBvcnRzKTsiLCIvLyEgbW9tZW50LmpzXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyA/IG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpIDpcbiAgICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoZmFjdG9yeSkgOlxuICAgIGdsb2JhbC5tb21lbnQgPSBmYWN0b3J5KClcbn0odGhpcywgKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgdmFyIGhvb2tDYWxsYmFjaztcblxuICAgIGZ1bmN0aW9uIGhvb2tzICgpIHtcbiAgICAgICAgcmV0dXJuIGhvb2tDYWxsYmFjay5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgIH1cblxuICAgIC8vIFRoaXMgaXMgZG9uZSB0byByZWdpc3RlciB0aGUgbWV0aG9kIGNhbGxlZCB3aXRoIG1vbWVudCgpXG4gICAgLy8gd2l0aG91dCBjcmVhdGluZyBjaXJjdWxhciBkZXBlbmRlbmNpZXMuXG4gICAgZnVuY3Rpb24gc2V0SG9va0NhbGxiYWNrIChjYWxsYmFjaykge1xuICAgICAgICBob29rQ2FsbGJhY2sgPSBjYWxsYmFjaztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0FycmF5KGlucHV0KSB7XG4gICAgICAgIHJldHVybiBpbnB1dCBpbnN0YW5jZW9mIEFycmF5IHx8IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChpbnB1dCkgPT09ICdbb2JqZWN0IEFycmF5XSc7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNPYmplY3QoaW5wdXQpIHtcbiAgICAgICAgLy8gSUU4IHdpbGwgdHJlYXQgdW5kZWZpbmVkIGFuZCBudWxsIGFzIG9iamVjdCBpZiBpdCB3YXNuJ3QgZm9yXG4gICAgICAgIC8vIGlucHV0ICE9IG51bGxcbiAgICAgICAgcmV0dXJuIGlucHV0ICE9IG51bGwgJiYgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGlucHV0KSA9PT0gJ1tvYmplY3QgT2JqZWN0XSc7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNPYmplY3RFbXB0eShvYmopIHtcbiAgICAgICAgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKSB7XG4gICAgICAgICAgICByZXR1cm4gKE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iaikubGVuZ3RoID09PSAwKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciBrO1xuICAgICAgICAgICAgZm9yIChrIGluIG9iaikge1xuICAgICAgICAgICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkoaykpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNVbmRlZmluZWQoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIGlucHV0ID09PSB2b2lkIDA7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNOdW1iZXIoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiBpbnB1dCA9PT0gJ251bWJlcicgfHwgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGlucHV0KSA9PT0gJ1tvYmplY3QgTnVtYmVyXSc7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNEYXRlKGlucHV0KSB7XG4gICAgICAgIHJldHVybiBpbnB1dCBpbnN0YW5jZW9mIERhdGUgfHwgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGlucHV0KSA9PT0gJ1tvYmplY3QgRGF0ZV0nO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1hcChhcnIsIGZuKSB7XG4gICAgICAgIHZhciByZXMgPSBbXSwgaTtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGFyci5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgcmVzLnB1c2goZm4oYXJyW2ldLCBpKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBoYXNPd25Qcm9wKGEsIGIpIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChhLCBiKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBleHRlbmQoYSwgYikge1xuICAgICAgICBmb3IgKHZhciBpIGluIGIpIHtcbiAgICAgICAgICAgIGlmIChoYXNPd25Qcm9wKGIsIGkpKSB7XG4gICAgICAgICAgICAgICAgYVtpXSA9IGJbaV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaGFzT3duUHJvcChiLCAndG9TdHJpbmcnKSkge1xuICAgICAgICAgICAgYS50b1N0cmluZyA9IGIudG9TdHJpbmc7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaGFzT3duUHJvcChiLCAndmFsdWVPZicpKSB7XG4gICAgICAgICAgICBhLnZhbHVlT2YgPSBiLnZhbHVlT2Y7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVVVEMgKGlucHV0LCBmb3JtYXQsIGxvY2FsZSwgc3RyaWN0KSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVMb2NhbE9yVVRDKGlucHV0LCBmb3JtYXQsIGxvY2FsZSwgc3RyaWN0LCB0cnVlKS51dGMoKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBkZWZhdWx0UGFyc2luZ0ZsYWdzKCkge1xuICAgICAgICAvLyBXZSBuZWVkIHRvIGRlZXAgY2xvbmUgdGhpcyBvYmplY3QuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBlbXB0eSAgICAgICAgICAgOiBmYWxzZSxcbiAgICAgICAgICAgIHVudXNlZFRva2VucyAgICA6IFtdLFxuICAgICAgICAgICAgdW51c2VkSW5wdXQgICAgIDogW10sXG4gICAgICAgICAgICBvdmVyZmxvdyAgICAgICAgOiAtMixcbiAgICAgICAgICAgIGNoYXJzTGVmdE92ZXIgICA6IDAsXG4gICAgICAgICAgICBudWxsSW5wdXQgICAgICAgOiBmYWxzZSxcbiAgICAgICAgICAgIGludmFsaWRNb250aCAgICA6IG51bGwsXG4gICAgICAgICAgICBpbnZhbGlkRm9ybWF0ICAgOiBmYWxzZSxcbiAgICAgICAgICAgIHVzZXJJbnZhbGlkYXRlZCA6IGZhbHNlLFxuICAgICAgICAgICAgaXNvICAgICAgICAgICAgIDogZmFsc2UsXG4gICAgICAgICAgICBwYXJzZWREYXRlUGFydHMgOiBbXSxcbiAgICAgICAgICAgIG1lcmlkaWVtICAgICAgICA6IG51bGwsXG4gICAgICAgICAgICByZmMyODIyICAgICAgICAgOiBmYWxzZSxcbiAgICAgICAgICAgIHdlZWtkYXlNaXNtYXRjaCA6IGZhbHNlXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0UGFyc2luZ0ZsYWdzKG0pIHtcbiAgICAgICAgaWYgKG0uX3BmID09IG51bGwpIHtcbiAgICAgICAgICAgIG0uX3BmID0gZGVmYXVsdFBhcnNpbmdGbGFncygpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtLl9wZjtcbiAgICB9XG5cbiAgICB2YXIgc29tZTtcbiAgICBpZiAoQXJyYXkucHJvdG90eXBlLnNvbWUpIHtcbiAgICAgICAgc29tZSA9IEFycmF5LnByb3RvdHlwZS5zb21lO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHNvbWUgPSBmdW5jdGlvbiAoZnVuKSB7XG4gICAgICAgICAgICB2YXIgdCA9IE9iamVjdCh0aGlzKTtcbiAgICAgICAgICAgIHZhciBsZW4gPSB0Lmxlbmd0aCA+Pj4gMDtcblxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgICAgICAgIGlmIChpIGluIHQgJiYgZnVuLmNhbGwodGhpcywgdFtpXSwgaSwgdCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNWYWxpZChtKSB7XG4gICAgICAgIGlmIChtLl9pc1ZhbGlkID09IG51bGwpIHtcbiAgICAgICAgICAgIHZhciBmbGFncyA9IGdldFBhcnNpbmdGbGFncyhtKTtcbiAgICAgICAgICAgIHZhciBwYXJzZWRQYXJ0cyA9IHNvbWUuY2FsbChmbGFncy5wYXJzZWREYXRlUGFydHMsIGZ1bmN0aW9uIChpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGkgIT0gbnVsbDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdmFyIGlzTm93VmFsaWQgPSAhaXNOYU4obS5fZC5nZXRUaW1lKCkpICYmXG4gICAgICAgICAgICAgICAgZmxhZ3Mub3ZlcmZsb3cgPCAwICYmXG4gICAgICAgICAgICAgICAgIWZsYWdzLmVtcHR5ICYmXG4gICAgICAgICAgICAgICAgIWZsYWdzLmludmFsaWRNb250aCAmJlxuICAgICAgICAgICAgICAgICFmbGFncy5pbnZhbGlkV2Vla2RheSAmJlxuICAgICAgICAgICAgICAgICFmbGFncy53ZWVrZGF5TWlzbWF0Y2ggJiZcbiAgICAgICAgICAgICAgICAhZmxhZ3MubnVsbElucHV0ICYmXG4gICAgICAgICAgICAgICAgIWZsYWdzLmludmFsaWRGb3JtYXQgJiZcbiAgICAgICAgICAgICAgICAhZmxhZ3MudXNlckludmFsaWRhdGVkICYmXG4gICAgICAgICAgICAgICAgKCFmbGFncy5tZXJpZGllbSB8fCAoZmxhZ3MubWVyaWRpZW0gJiYgcGFyc2VkUGFydHMpKTtcblxuICAgICAgICAgICAgaWYgKG0uX3N0cmljdCkge1xuICAgICAgICAgICAgICAgIGlzTm93VmFsaWQgPSBpc05vd1ZhbGlkICYmXG4gICAgICAgICAgICAgICAgICAgIGZsYWdzLmNoYXJzTGVmdE92ZXIgPT09IDAgJiZcbiAgICAgICAgICAgICAgICAgICAgZmxhZ3MudW51c2VkVG9rZW5zLmxlbmd0aCA9PT0gMCAmJlxuICAgICAgICAgICAgICAgICAgICBmbGFncy5iaWdIb3VyID09PSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChPYmplY3QuaXNGcm96ZW4gPT0gbnVsbCB8fCAhT2JqZWN0LmlzRnJvemVuKG0pKSB7XG4gICAgICAgICAgICAgICAgbS5faXNWYWxpZCA9IGlzTm93VmFsaWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNOb3dWYWxpZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbS5faXNWYWxpZDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVJbnZhbGlkIChmbGFncykge1xuICAgICAgICB2YXIgbSA9IGNyZWF0ZVVUQyhOYU4pO1xuICAgICAgICBpZiAoZmxhZ3MgIT0gbnVsbCkge1xuICAgICAgICAgICAgZXh0ZW5kKGdldFBhcnNpbmdGbGFncyhtKSwgZmxhZ3MpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKG0pLnVzZXJJbnZhbGlkYXRlZCA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICAvLyBQbHVnaW5zIHRoYXQgYWRkIHByb3BlcnRpZXMgc2hvdWxkIGFsc28gYWRkIHRoZSBrZXkgaGVyZSAobnVsbCB2YWx1ZSksXG4gICAgLy8gc28gd2UgY2FuIHByb3Blcmx5IGNsb25lIG91cnNlbHZlcy5cbiAgICB2YXIgbW9tZW50UHJvcGVydGllcyA9IGhvb2tzLm1vbWVudFByb3BlcnRpZXMgPSBbXTtcblxuICAgIGZ1bmN0aW9uIGNvcHlDb25maWcodG8sIGZyb20pIHtcbiAgICAgICAgdmFyIGksIHByb3AsIHZhbDtcblxuICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGZyb20uX2lzQU1vbWVudE9iamVjdCkpIHtcbiAgICAgICAgICAgIHRvLl9pc0FNb21lbnRPYmplY3QgPSBmcm9tLl9pc0FNb21lbnRPYmplY3Q7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChmcm9tLl9pKSkge1xuICAgICAgICAgICAgdG8uX2kgPSBmcm9tLl9pO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNVbmRlZmluZWQoZnJvbS5fZikpIHtcbiAgICAgICAgICAgIHRvLl9mID0gZnJvbS5fZjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGZyb20uX2wpKSB7XG4gICAgICAgICAgICB0by5fbCA9IGZyb20uX2w7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChmcm9tLl9zdHJpY3QpKSB7XG4gICAgICAgICAgICB0by5fc3RyaWN0ID0gZnJvbS5fc3RyaWN0O1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNVbmRlZmluZWQoZnJvbS5fdHptKSkge1xuICAgICAgICAgICAgdG8uX3R6bSA9IGZyb20uX3R6bTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGZyb20uX2lzVVRDKSkge1xuICAgICAgICAgICAgdG8uX2lzVVRDID0gZnJvbS5faXNVVEM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChmcm9tLl9vZmZzZXQpKSB7XG4gICAgICAgICAgICB0by5fb2Zmc2V0ID0gZnJvbS5fb2Zmc2V0O1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNVbmRlZmluZWQoZnJvbS5fcGYpKSB7XG4gICAgICAgICAgICB0by5fcGYgPSBnZXRQYXJzaW5nRmxhZ3MoZnJvbSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChmcm9tLl9sb2NhbGUpKSB7XG4gICAgICAgICAgICB0by5fbG9jYWxlID0gZnJvbS5fbG9jYWxlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG1vbWVudFByb3BlcnRpZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IG1vbWVudFByb3BlcnRpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBwcm9wID0gbW9tZW50UHJvcGVydGllc1tpXTtcbiAgICAgICAgICAgICAgICB2YWwgPSBmcm9tW3Byb3BdO1xuICAgICAgICAgICAgICAgIGlmICghaXNVbmRlZmluZWQodmFsKSkge1xuICAgICAgICAgICAgICAgICAgICB0b1twcm9wXSA9IHZhbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdG87XG4gICAgfVxuXG4gICAgdmFyIHVwZGF0ZUluUHJvZ3Jlc3MgPSBmYWxzZTtcblxuICAgIC8vIE1vbWVudCBwcm90b3R5cGUgb2JqZWN0XG4gICAgZnVuY3Rpb24gTW9tZW50KGNvbmZpZykge1xuICAgICAgICBjb3B5Q29uZmlnKHRoaXMsIGNvbmZpZyk7XG4gICAgICAgIHRoaXMuX2QgPSBuZXcgRGF0ZShjb25maWcuX2QgIT0gbnVsbCA/IGNvbmZpZy5fZC5nZXRUaW1lKCkgOiBOYU4pO1xuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICB0aGlzLl9kID0gbmV3IERhdGUoTmFOKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBQcmV2ZW50IGluZmluaXRlIGxvb3AgaW4gY2FzZSB1cGRhdGVPZmZzZXQgY3JlYXRlcyBuZXcgbW9tZW50XG4gICAgICAgIC8vIG9iamVjdHMuXG4gICAgICAgIGlmICh1cGRhdGVJblByb2dyZXNzID09PSBmYWxzZSkge1xuICAgICAgICAgICAgdXBkYXRlSW5Qcm9ncmVzcyA9IHRydWU7XG4gICAgICAgICAgICBob29rcy51cGRhdGVPZmZzZXQodGhpcyk7XG4gICAgICAgICAgICB1cGRhdGVJblByb2dyZXNzID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc01vbWVudCAob2JqKSB7XG4gICAgICAgIHJldHVybiBvYmogaW5zdGFuY2VvZiBNb21lbnQgfHwgKG9iaiAhPSBudWxsICYmIG9iai5faXNBTW9tZW50T2JqZWN0ICE9IG51bGwpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFic0Zsb29yIChudW1iZXIpIHtcbiAgICAgICAgaWYgKG51bWJlciA8IDApIHtcbiAgICAgICAgICAgIC8vIC0wIC0+IDBcbiAgICAgICAgICAgIHJldHVybiBNYXRoLmNlaWwobnVtYmVyKSB8fCAwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IobnVtYmVyKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRvSW50KGFyZ3VtZW50Rm9yQ29lcmNpb24pIHtcbiAgICAgICAgdmFyIGNvZXJjZWROdW1iZXIgPSArYXJndW1lbnRGb3JDb2VyY2lvbixcbiAgICAgICAgICAgIHZhbHVlID0gMDtcblxuICAgICAgICBpZiAoY29lcmNlZE51bWJlciAhPT0gMCAmJiBpc0Zpbml0ZShjb2VyY2VkTnVtYmVyKSkge1xuICAgICAgICAgICAgdmFsdWUgPSBhYnNGbG9vcihjb2VyY2VkTnVtYmVyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICAvLyBjb21wYXJlIHR3byBhcnJheXMsIHJldHVybiB0aGUgbnVtYmVyIG9mIGRpZmZlcmVuY2VzXG4gICAgZnVuY3Rpb24gY29tcGFyZUFycmF5cyhhcnJheTEsIGFycmF5MiwgZG9udENvbnZlcnQpIHtcbiAgICAgICAgdmFyIGxlbiA9IE1hdGgubWluKGFycmF5MS5sZW5ndGgsIGFycmF5Mi5sZW5ndGgpLFxuICAgICAgICAgICAgbGVuZ3RoRGlmZiA9IE1hdGguYWJzKGFycmF5MS5sZW5ndGggLSBhcnJheTIubGVuZ3RoKSxcbiAgICAgICAgICAgIGRpZmZzID0gMCxcbiAgICAgICAgICAgIGk7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgICAgaWYgKChkb250Q29udmVydCAmJiBhcnJheTFbaV0gIT09IGFycmF5MltpXSkgfHxcbiAgICAgICAgICAgICAgICAoIWRvbnRDb252ZXJ0ICYmIHRvSW50KGFycmF5MVtpXSkgIT09IHRvSW50KGFycmF5MltpXSkpKSB7XG4gICAgICAgICAgICAgICAgZGlmZnMrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGlmZnMgKyBsZW5ndGhEaWZmO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHdhcm4obXNnKSB7XG4gICAgICAgIGlmIChob29rcy5zdXBwcmVzc0RlcHJlY2F0aW9uV2FybmluZ3MgPT09IGZhbHNlICYmXG4gICAgICAgICAgICAgICAgKHR5cGVvZiBjb25zb2xlICE9PSAgJ3VuZGVmaW5lZCcpICYmIGNvbnNvbGUud2Fybikge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdEZXByZWNhdGlvbiB3YXJuaW5nOiAnICsgbXNnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRlcHJlY2F0ZShtc2csIGZuKSB7XG4gICAgICAgIHZhciBmaXJzdFRpbWUgPSB0cnVlO1xuXG4gICAgICAgIHJldHVybiBleHRlbmQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKGhvb2tzLmRlcHJlY2F0aW9uSGFuZGxlciAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgaG9va3MuZGVwcmVjYXRpb25IYW5kbGVyKG51bGwsIG1zZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZmlyc3RUaW1lKSB7XG4gICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBbXTtcbiAgICAgICAgICAgICAgICB2YXIgYXJnO1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGFyZyA9ICcnO1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGFyZ3VtZW50c1tpXSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZyArPSAnXFxuWycgKyBpICsgJ10gJztcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiBhcmd1bWVudHNbMF0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmcgKz0ga2V5ICsgJzogJyArIGFyZ3VtZW50c1swXVtrZXldICsgJywgJztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZyA9IGFyZy5zbGljZSgwLCAtMik7IC8vIFJlbW92ZSB0cmFpbGluZyBjb21tYSBhbmQgc3BhY2VcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZyA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBhcmdzLnB1c2goYXJnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgd2Fybihtc2cgKyAnXFxuQXJndW1lbnRzOiAnICsgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJncykuam9pbignJykgKyAnXFxuJyArIChuZXcgRXJyb3IoKSkuc3RhY2spO1xuICAgICAgICAgICAgICAgIGZpcnN0VGltZSA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGZuLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgIH0sIGZuKTtcbiAgICB9XG5cbiAgICB2YXIgZGVwcmVjYXRpb25zID0ge307XG5cbiAgICBmdW5jdGlvbiBkZXByZWNhdGVTaW1wbGUobmFtZSwgbXNnKSB7XG4gICAgICAgIGlmIChob29rcy5kZXByZWNhdGlvbkhhbmRsZXIgIT0gbnVsbCkge1xuICAgICAgICAgICAgaG9va3MuZGVwcmVjYXRpb25IYW5kbGVyKG5hbWUsIG1zZyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFkZXByZWNhdGlvbnNbbmFtZV0pIHtcbiAgICAgICAgICAgIHdhcm4obXNnKTtcbiAgICAgICAgICAgIGRlcHJlY2F0aW9uc1tuYW1lXSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBob29rcy5zdXBwcmVzc0RlcHJlY2F0aW9uV2FybmluZ3MgPSBmYWxzZTtcbiAgICBob29rcy5kZXByZWNhdGlvbkhhbmRsZXIgPSBudWxsO1xuXG4gICAgZnVuY3Rpb24gaXNGdW5jdGlvbihpbnB1dCkge1xuICAgICAgICByZXR1cm4gaW5wdXQgaW5zdGFuY2VvZiBGdW5jdGlvbiB8fCBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoaW5wdXQpID09PSAnW29iamVjdCBGdW5jdGlvbl0nO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNldCAoY29uZmlnKSB7XG4gICAgICAgIHZhciBwcm9wLCBpO1xuICAgICAgICBmb3IgKGkgaW4gY29uZmlnKSB7XG4gICAgICAgICAgICBwcm9wID0gY29uZmlnW2ldO1xuICAgICAgICAgICAgaWYgKGlzRnVuY3Rpb24ocHJvcCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzW2ldID0gcHJvcDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpc1snXycgKyBpXSA9IHByb3A7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fY29uZmlnID0gY29uZmlnO1xuICAgICAgICAvLyBMZW5pZW50IG9yZGluYWwgcGFyc2luZyBhY2NlcHRzIGp1c3QgYSBudW1iZXIgaW4gYWRkaXRpb24gdG9cbiAgICAgICAgLy8gbnVtYmVyICsgKHBvc3NpYmx5KSBzdHVmZiBjb21pbmcgZnJvbSBfZGF5T2ZNb250aE9yZGluYWxQYXJzZS5cbiAgICAgICAgLy8gVE9ETzogUmVtb3ZlIFwib3JkaW5hbFBhcnNlXCIgZmFsbGJhY2sgaW4gbmV4dCBtYWpvciByZWxlYXNlLlxuICAgICAgICB0aGlzLl9kYXlPZk1vbnRoT3JkaW5hbFBhcnNlTGVuaWVudCA9IG5ldyBSZWdFeHAoXG4gICAgICAgICAgICAodGhpcy5fZGF5T2ZNb250aE9yZGluYWxQYXJzZS5zb3VyY2UgfHwgdGhpcy5fb3JkaW5hbFBhcnNlLnNvdXJjZSkgK1xuICAgICAgICAgICAgICAgICd8JyArICgvXFxkezEsMn0vKS5zb3VyY2UpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1lcmdlQ29uZmlncyhwYXJlbnRDb25maWcsIGNoaWxkQ29uZmlnKSB7XG4gICAgICAgIHZhciByZXMgPSBleHRlbmQoe30sIHBhcmVudENvbmZpZyksIHByb3A7XG4gICAgICAgIGZvciAocHJvcCBpbiBjaGlsZENvbmZpZykge1xuICAgICAgICAgICAgaWYgKGhhc093blByb3AoY2hpbGRDb25maWcsIHByb3ApKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlzT2JqZWN0KHBhcmVudENvbmZpZ1twcm9wXSkgJiYgaXNPYmplY3QoY2hpbGRDb25maWdbcHJvcF0pKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc1twcm9wXSA9IHt9O1xuICAgICAgICAgICAgICAgICAgICBleHRlbmQocmVzW3Byb3BdLCBwYXJlbnRDb25maWdbcHJvcF0pO1xuICAgICAgICAgICAgICAgICAgICBleHRlbmQocmVzW3Byb3BdLCBjaGlsZENvbmZpZ1twcm9wXSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaGlsZENvbmZpZ1twcm9wXSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc1twcm9wXSA9IGNoaWxkQ29uZmlnW3Byb3BdO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSByZXNbcHJvcF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZvciAocHJvcCBpbiBwYXJlbnRDb25maWcpIHtcbiAgICAgICAgICAgIGlmIChoYXNPd25Qcm9wKHBhcmVudENvbmZpZywgcHJvcCkgJiZcbiAgICAgICAgICAgICAgICAgICAgIWhhc093blByb3AoY2hpbGRDb25maWcsIHByb3ApICYmXG4gICAgICAgICAgICAgICAgICAgIGlzT2JqZWN0KHBhcmVudENvbmZpZ1twcm9wXSkpIHtcbiAgICAgICAgICAgICAgICAvLyBtYWtlIHN1cmUgY2hhbmdlcyB0byBwcm9wZXJ0aWVzIGRvbid0IG1vZGlmeSBwYXJlbnQgY29uZmlnXG4gICAgICAgICAgICAgICAgcmVzW3Byb3BdID0gZXh0ZW5kKHt9LCByZXNbcHJvcF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gTG9jYWxlKGNvbmZpZykge1xuICAgICAgICBpZiAoY29uZmlnICE9IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0KGNvbmZpZyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIga2V5cztcblxuICAgIGlmIChPYmplY3Qua2V5cykge1xuICAgICAgICBrZXlzID0gT2JqZWN0LmtleXM7XG4gICAgfSBlbHNlIHtcbiAgICAgICAga2V5cyA9IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgICAgIHZhciBpLCByZXMgPSBbXTtcbiAgICAgICAgICAgIGZvciAoaSBpbiBvYmopIHtcbiAgICAgICAgICAgICAgICBpZiAoaGFzT3duUHJvcChvYmosIGkpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlcy5wdXNoKGkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgdmFyIGRlZmF1bHRDYWxlbmRhciA9IHtcbiAgICAgICAgc2FtZURheSA6ICdbVG9kYXkgYXRdIExUJyxcbiAgICAgICAgbmV4dERheSA6ICdbVG9tb3Jyb3cgYXRdIExUJyxcbiAgICAgICAgbmV4dFdlZWsgOiAnZGRkZCBbYXRdIExUJyxcbiAgICAgICAgbGFzdERheSA6ICdbWWVzdGVyZGF5IGF0XSBMVCcsXG4gICAgICAgIGxhc3RXZWVrIDogJ1tMYXN0XSBkZGRkIFthdF0gTFQnLFxuICAgICAgICBzYW1lRWxzZSA6ICdMJ1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBjYWxlbmRhciAoa2V5LCBtb20sIG5vdykge1xuICAgICAgICB2YXIgb3V0cHV0ID0gdGhpcy5fY2FsZW5kYXJba2V5XSB8fCB0aGlzLl9jYWxlbmRhclsnc2FtZUVsc2UnXTtcbiAgICAgICAgcmV0dXJuIGlzRnVuY3Rpb24ob3V0cHV0KSA/IG91dHB1dC5jYWxsKG1vbSwgbm93KSA6IG91dHB1dDtcbiAgICB9XG5cbiAgICB2YXIgZGVmYXVsdExvbmdEYXRlRm9ybWF0ID0ge1xuICAgICAgICBMVFMgIDogJ2g6bW06c3MgQScsXG4gICAgICAgIExUICAgOiAnaDptbSBBJyxcbiAgICAgICAgTCAgICA6ICdNTS9ERC9ZWVlZJyxcbiAgICAgICAgTEwgICA6ICdNTU1NIEQsIFlZWVknLFxuICAgICAgICBMTEwgIDogJ01NTU0gRCwgWVlZWSBoOm1tIEEnLFxuICAgICAgICBMTExMIDogJ2RkZGQsIE1NTU0gRCwgWVlZWSBoOm1tIEEnXG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIGxvbmdEYXRlRm9ybWF0IChrZXkpIHtcbiAgICAgICAgdmFyIGZvcm1hdCA9IHRoaXMuX2xvbmdEYXRlRm9ybWF0W2tleV0sXG4gICAgICAgICAgICBmb3JtYXRVcHBlciA9IHRoaXMuX2xvbmdEYXRlRm9ybWF0W2tleS50b1VwcGVyQ2FzZSgpXTtcblxuICAgICAgICBpZiAoZm9ybWF0IHx8ICFmb3JtYXRVcHBlcikge1xuICAgICAgICAgICAgcmV0dXJuIGZvcm1hdDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2xvbmdEYXRlRm9ybWF0W2tleV0gPSBmb3JtYXRVcHBlci5yZXBsYWNlKC9NTU1NfE1NfEREfGRkZGQvZywgZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgcmV0dXJuIHZhbC5zbGljZSgxKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX2xvbmdEYXRlRm9ybWF0W2tleV07XG4gICAgfVxuXG4gICAgdmFyIGRlZmF1bHRJbnZhbGlkRGF0ZSA9ICdJbnZhbGlkIGRhdGUnO1xuXG4gICAgZnVuY3Rpb24gaW52YWxpZERhdGUgKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faW52YWxpZERhdGU7XG4gICAgfVxuXG4gICAgdmFyIGRlZmF1bHRPcmRpbmFsID0gJyVkJztcbiAgICB2YXIgZGVmYXVsdERheU9mTW9udGhPcmRpbmFsUGFyc2UgPSAvXFxkezEsMn0vO1xuXG4gICAgZnVuY3Rpb24gb3JkaW5hbCAobnVtYmVyKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9vcmRpbmFsLnJlcGxhY2UoJyVkJywgbnVtYmVyKTtcbiAgICB9XG5cbiAgICB2YXIgZGVmYXVsdFJlbGF0aXZlVGltZSA9IHtcbiAgICAgICAgZnV0dXJlIDogJ2luICVzJyxcbiAgICAgICAgcGFzdCAgIDogJyVzIGFnbycsXG4gICAgICAgIHMgIDogJ2EgZmV3IHNlY29uZHMnLFxuICAgICAgICBzcyA6ICclZCBzZWNvbmRzJyxcbiAgICAgICAgbSAgOiAnYSBtaW51dGUnLFxuICAgICAgICBtbSA6ICclZCBtaW51dGVzJyxcbiAgICAgICAgaCAgOiAnYW4gaG91cicsXG4gICAgICAgIGhoIDogJyVkIGhvdXJzJyxcbiAgICAgICAgZCAgOiAnYSBkYXknLFxuICAgICAgICBkZCA6ICclZCBkYXlzJyxcbiAgICAgICAgTSAgOiAnYSBtb250aCcsXG4gICAgICAgIE1NIDogJyVkIG1vbnRocycsXG4gICAgICAgIHkgIDogJ2EgeWVhcicsXG4gICAgICAgIHl5IDogJyVkIHllYXJzJ1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiByZWxhdGl2ZVRpbWUgKG51bWJlciwgd2l0aG91dFN1ZmZpeCwgc3RyaW5nLCBpc0Z1dHVyZSkge1xuICAgICAgICB2YXIgb3V0cHV0ID0gdGhpcy5fcmVsYXRpdmVUaW1lW3N0cmluZ107XG4gICAgICAgIHJldHVybiAoaXNGdW5jdGlvbihvdXRwdXQpKSA/XG4gICAgICAgICAgICBvdXRwdXQobnVtYmVyLCB3aXRob3V0U3VmZml4LCBzdHJpbmcsIGlzRnV0dXJlKSA6XG4gICAgICAgICAgICBvdXRwdXQucmVwbGFjZSgvJWQvaSwgbnVtYmVyKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwYXN0RnV0dXJlIChkaWZmLCBvdXRwdXQpIHtcbiAgICAgICAgdmFyIGZvcm1hdCA9IHRoaXMuX3JlbGF0aXZlVGltZVtkaWZmID4gMCA/ICdmdXR1cmUnIDogJ3Bhc3QnXTtcbiAgICAgICAgcmV0dXJuIGlzRnVuY3Rpb24oZm9ybWF0KSA/IGZvcm1hdChvdXRwdXQpIDogZm9ybWF0LnJlcGxhY2UoLyVzL2ksIG91dHB1dCk7XG4gICAgfVxuXG4gICAgdmFyIGFsaWFzZXMgPSB7fTtcblxuICAgIGZ1bmN0aW9uIGFkZFVuaXRBbGlhcyAodW5pdCwgc2hvcnRoYW5kKSB7XG4gICAgICAgIHZhciBsb3dlckNhc2UgPSB1bml0LnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGFsaWFzZXNbbG93ZXJDYXNlXSA9IGFsaWFzZXNbbG93ZXJDYXNlICsgJ3MnXSA9IGFsaWFzZXNbc2hvcnRoYW5kXSA9IHVuaXQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbm9ybWFsaXplVW5pdHModW5pdHMpIHtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiB1bml0cyA9PT0gJ3N0cmluZycgPyBhbGlhc2VzW3VuaXRzXSB8fCBhbGlhc2VzW3VuaXRzLnRvTG93ZXJDYXNlKCldIDogdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG5vcm1hbGl6ZU9iamVjdFVuaXRzKGlucHV0T2JqZWN0KSB7XG4gICAgICAgIHZhciBub3JtYWxpemVkSW5wdXQgPSB7fSxcbiAgICAgICAgICAgIG5vcm1hbGl6ZWRQcm9wLFxuICAgICAgICAgICAgcHJvcDtcblxuICAgICAgICBmb3IgKHByb3AgaW4gaW5wdXRPYmplY3QpIHtcbiAgICAgICAgICAgIGlmIChoYXNPd25Qcm9wKGlucHV0T2JqZWN0LCBwcm9wKSkge1xuICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWRQcm9wID0gbm9ybWFsaXplVW5pdHMocHJvcCk7XG4gICAgICAgICAgICAgICAgaWYgKG5vcm1hbGl6ZWRQcm9wKSB7XG4gICAgICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWRJbnB1dFtub3JtYWxpemVkUHJvcF0gPSBpbnB1dE9iamVjdFtwcm9wXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbm9ybWFsaXplZElucHV0O1xuICAgIH1cblxuICAgIHZhciBwcmlvcml0aWVzID0ge307XG5cbiAgICBmdW5jdGlvbiBhZGRVbml0UHJpb3JpdHkodW5pdCwgcHJpb3JpdHkpIHtcbiAgICAgICAgcHJpb3JpdGllc1t1bml0XSA9IHByaW9yaXR5O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFByaW9yaXRpemVkVW5pdHModW5pdHNPYmopIHtcbiAgICAgICAgdmFyIHVuaXRzID0gW107XG4gICAgICAgIGZvciAodmFyIHUgaW4gdW5pdHNPYmopIHtcbiAgICAgICAgICAgIHVuaXRzLnB1c2goe3VuaXQ6IHUsIHByaW9yaXR5OiBwcmlvcml0aWVzW3VdfSk7XG4gICAgICAgIH1cbiAgICAgICAgdW5pdHMuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgICAgcmV0dXJuIGEucHJpb3JpdHkgLSBiLnByaW9yaXR5O1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHVuaXRzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHplcm9GaWxsKG51bWJlciwgdGFyZ2V0TGVuZ3RoLCBmb3JjZVNpZ24pIHtcbiAgICAgICAgdmFyIGFic051bWJlciA9ICcnICsgTWF0aC5hYnMobnVtYmVyKSxcbiAgICAgICAgICAgIHplcm9zVG9GaWxsID0gdGFyZ2V0TGVuZ3RoIC0gYWJzTnVtYmVyLmxlbmd0aCxcbiAgICAgICAgICAgIHNpZ24gPSBudW1iZXIgPj0gMDtcbiAgICAgICAgcmV0dXJuIChzaWduID8gKGZvcmNlU2lnbiA/ICcrJyA6ICcnKSA6ICctJykgK1xuICAgICAgICAgICAgTWF0aC5wb3coMTAsIE1hdGgubWF4KDAsIHplcm9zVG9GaWxsKSkudG9TdHJpbmcoKS5zdWJzdHIoMSkgKyBhYnNOdW1iZXI7XG4gICAgfVxuXG4gICAgdmFyIGZvcm1hdHRpbmdUb2tlbnMgPSAvKFxcW1teXFxbXSpcXF0pfChcXFxcKT8oW0hoXW1tKHNzKT98TW98TU0/TT9NP3xEb3xERERvfEREP0Q/RD98ZGRkP2Q/fGRvP3x3W298d10/fFdbb3xXXT98UW8/fFlZWVlZWXxZWVlZWXxZWVlZfFlZfGdnKGdnZz8pP3xHRyhHR0c/KT98ZXxFfGF8QXxoaD98SEg/fGtrP3xtbT98c3M/fFN7MSw5fXx4fFh8eno/fFpaP3wuKS9nO1xuXG4gICAgdmFyIGxvY2FsRm9ybWF0dGluZ1Rva2VucyA9IC8oXFxbW15cXFtdKlxcXSl8KFxcXFwpPyhMVFN8TFR8TEw/TD9MP3xsezEsNH0pL2c7XG5cbiAgICB2YXIgZm9ybWF0RnVuY3Rpb25zID0ge307XG5cbiAgICB2YXIgZm9ybWF0VG9rZW5GdW5jdGlvbnMgPSB7fTtcblxuICAgIC8vIHRva2VuOiAgICAnTSdcbiAgICAvLyBwYWRkZWQ6ICAgWydNTScsIDJdXG4gICAgLy8gb3JkaW5hbDogICdNbydcbiAgICAvLyBjYWxsYmFjazogZnVuY3Rpb24gKCkgeyB0aGlzLm1vbnRoKCkgKyAxIH1cbiAgICBmdW5jdGlvbiBhZGRGb3JtYXRUb2tlbiAodG9rZW4sIHBhZGRlZCwgb3JkaW5hbCwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIGZ1bmMgPSBjYWxsYmFjaztcbiAgICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGZ1bmMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXNbY2FsbGJhY2tdKCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGlmICh0b2tlbikge1xuICAgICAgICAgICAgZm9ybWF0VG9rZW5GdW5jdGlvbnNbdG9rZW5dID0gZnVuYztcbiAgICAgICAgfVxuICAgICAgICBpZiAocGFkZGVkKSB7XG4gICAgICAgICAgICBmb3JtYXRUb2tlbkZ1bmN0aW9uc1twYWRkZWRbMF1dID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB6ZXJvRmlsbChmdW5jLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyksIHBhZGRlZFsxXSwgcGFkZGVkWzJdKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9yZGluYWwpIHtcbiAgICAgICAgICAgIGZvcm1hdFRva2VuRnVuY3Rpb25zW29yZGluYWxdID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmxvY2FsZURhdGEoKS5vcmRpbmFsKGZ1bmMuYXBwbHkodGhpcywgYXJndW1lbnRzKSwgdG9rZW4pO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlbW92ZUZvcm1hdHRpbmdUb2tlbnMoaW5wdXQpIHtcbiAgICAgICAgaWYgKGlucHV0Lm1hdGNoKC9cXFtbXFxzXFxTXS8pKSB7XG4gICAgICAgICAgICByZXR1cm4gaW5wdXQucmVwbGFjZSgvXlxcW3xcXF0kL2csICcnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaW5wdXQucmVwbGFjZSgvXFxcXC9nLCAnJyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWFrZUZvcm1hdEZ1bmN0aW9uKGZvcm1hdCkge1xuICAgICAgICB2YXIgYXJyYXkgPSBmb3JtYXQubWF0Y2goZm9ybWF0dGluZ1Rva2VucyksIGksIGxlbmd0aDtcblxuICAgICAgICBmb3IgKGkgPSAwLCBsZW5ndGggPSBhcnJheS5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGZvcm1hdFRva2VuRnVuY3Rpb25zW2FycmF5W2ldXSkge1xuICAgICAgICAgICAgICAgIGFycmF5W2ldID0gZm9ybWF0VG9rZW5GdW5jdGlvbnNbYXJyYXlbaV1dO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBhcnJheVtpXSA9IHJlbW92ZUZvcm1hdHRpbmdUb2tlbnMoYXJyYXlbaV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChtb20pIHtcbiAgICAgICAgICAgIHZhciBvdXRwdXQgPSAnJywgaTtcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIG91dHB1dCArPSBpc0Z1bmN0aW9uKGFycmF5W2ldKSA/IGFycmF5W2ldLmNhbGwobW9tLCBmb3JtYXQpIDogYXJyYXlbaV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gb3V0cHV0O1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8vIGZvcm1hdCBkYXRlIHVzaW5nIG5hdGl2ZSBkYXRlIG9iamVjdFxuICAgIGZ1bmN0aW9uIGZvcm1hdE1vbWVudChtLCBmb3JtYXQpIHtcbiAgICAgICAgaWYgKCFtLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIG0ubG9jYWxlRGF0YSgpLmludmFsaWREYXRlKCk7XG4gICAgICAgIH1cblxuICAgICAgICBmb3JtYXQgPSBleHBhbmRGb3JtYXQoZm9ybWF0LCBtLmxvY2FsZURhdGEoKSk7XG4gICAgICAgIGZvcm1hdEZ1bmN0aW9uc1tmb3JtYXRdID0gZm9ybWF0RnVuY3Rpb25zW2Zvcm1hdF0gfHwgbWFrZUZvcm1hdEZ1bmN0aW9uKGZvcm1hdCk7XG5cbiAgICAgICAgcmV0dXJuIGZvcm1hdEZ1bmN0aW9uc1tmb3JtYXRdKG0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGV4cGFuZEZvcm1hdChmb3JtYXQsIGxvY2FsZSkge1xuICAgICAgICB2YXIgaSA9IDU7XG5cbiAgICAgICAgZnVuY3Rpb24gcmVwbGFjZUxvbmdEYXRlRm9ybWF0VG9rZW5zKGlucHV0KSB7XG4gICAgICAgICAgICByZXR1cm4gbG9jYWxlLmxvbmdEYXRlRm9ybWF0KGlucHV0KSB8fCBpbnB1dDtcbiAgICAgICAgfVxuXG4gICAgICAgIGxvY2FsRm9ybWF0dGluZ1Rva2Vucy5sYXN0SW5kZXggPSAwO1xuICAgICAgICB3aGlsZSAoaSA+PSAwICYmIGxvY2FsRm9ybWF0dGluZ1Rva2Vucy50ZXN0KGZvcm1hdCkpIHtcbiAgICAgICAgICAgIGZvcm1hdCA9IGZvcm1hdC5yZXBsYWNlKGxvY2FsRm9ybWF0dGluZ1Rva2VucywgcmVwbGFjZUxvbmdEYXRlRm9ybWF0VG9rZW5zKTtcbiAgICAgICAgICAgIGxvY2FsRm9ybWF0dGluZ1Rva2Vucy5sYXN0SW5kZXggPSAwO1xuICAgICAgICAgICAgaSAtPSAxO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZvcm1hdDtcbiAgICB9XG5cbiAgICB2YXIgbWF0Y2gxICAgICAgICAgPSAvXFxkLzsgICAgICAgICAgICAvLyAgICAgICAwIC0gOVxuICAgIHZhciBtYXRjaDIgICAgICAgICA9IC9cXGRcXGQvOyAgICAgICAgICAvLyAgICAgIDAwIC0gOTlcbiAgICB2YXIgbWF0Y2gzICAgICAgICAgPSAvXFxkezN9LzsgICAgICAgICAvLyAgICAgMDAwIC0gOTk5XG4gICAgdmFyIG1hdGNoNCAgICAgICAgID0gL1xcZHs0fS87ICAgICAgICAgLy8gICAgMDAwMCAtIDk5OTlcbiAgICB2YXIgbWF0Y2g2ICAgICAgICAgPSAvWystXT9cXGR7Nn0vOyAgICAvLyAtOTk5OTk5IC0gOTk5OTk5XG4gICAgdmFyIG1hdGNoMXRvMiAgICAgID0gL1xcZFxcZD8vOyAgICAgICAgIC8vICAgICAgIDAgLSA5OVxuICAgIHZhciBtYXRjaDN0bzQgICAgICA9IC9cXGRcXGRcXGRcXGQ/LzsgICAgIC8vICAgICA5OTkgLSA5OTk5XG4gICAgdmFyIG1hdGNoNXRvNiAgICAgID0gL1xcZFxcZFxcZFxcZFxcZFxcZD8vOyAvLyAgIDk5OTk5IC0gOTk5OTk5XG4gICAgdmFyIG1hdGNoMXRvMyAgICAgID0gL1xcZHsxLDN9LzsgICAgICAgLy8gICAgICAgMCAtIDk5OVxuICAgIHZhciBtYXRjaDF0bzQgICAgICA9IC9cXGR7MSw0fS87ICAgICAgIC8vICAgICAgIDAgLSA5OTk5XG4gICAgdmFyIG1hdGNoMXRvNiAgICAgID0gL1srLV0/XFxkezEsNn0vOyAgLy8gLTk5OTk5OSAtIDk5OTk5OVxuXG4gICAgdmFyIG1hdGNoVW5zaWduZWQgID0gL1xcZCsvOyAgICAgICAgICAgLy8gICAgICAgMCAtIGluZlxuICAgIHZhciBtYXRjaFNpZ25lZCAgICA9IC9bKy1dP1xcZCsvOyAgICAgIC8vICAgIC1pbmYgLSBpbmZcblxuICAgIHZhciBtYXRjaE9mZnNldCAgICA9IC9afFsrLV1cXGRcXGQ6P1xcZFxcZC9naTsgLy8gKzAwOjAwIC0wMDowMCArMDAwMCAtMDAwMCBvciBaXG4gICAgdmFyIG1hdGNoU2hvcnRPZmZzZXQgPSAvWnxbKy1dXFxkXFxkKD86Oj9cXGRcXGQpPy9naTsgLy8gKzAwIC0wMCArMDA6MDAgLTAwOjAwICswMDAwIC0wMDAwIG9yIFpcblxuICAgIHZhciBtYXRjaFRpbWVzdGFtcCA9IC9bKy1dP1xcZCsoXFwuXFxkezEsM30pPy87IC8vIDEyMzQ1Njc4OSAxMjM0NTY3ODkuMTIzXG5cbiAgICAvLyBhbnkgd29yZCAob3IgdHdvKSBjaGFyYWN0ZXJzIG9yIG51bWJlcnMgaW5jbHVkaW5nIHR3by90aHJlZSB3b3JkIG1vbnRoIGluIGFyYWJpYy5cbiAgICAvLyBpbmNsdWRlcyBzY290dGlzaCBnYWVsaWMgdHdvIHdvcmQgYW5kIGh5cGhlbmF0ZWQgbW9udGhzXG4gICAgdmFyIG1hdGNoV29yZCA9IC9bMC05XXswLDI1Nn1bJ2EtelxcdTAwQTAtXFx1MDVGRlxcdTA3MDAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkYwN1xcdUZGMTAtXFx1RkZFRl17MSwyNTZ9fFtcXHUwNjAwLVxcdTA2RkZcXC9dezEsMjU2fShcXHMqP1tcXHUwNjAwLVxcdTA2RkZdezEsMjU2fSl7MSwyfS9pO1xuXG4gICAgdmFyIHJlZ2V4ZXMgPSB7fTtcblxuICAgIGZ1bmN0aW9uIGFkZFJlZ2V4VG9rZW4gKHRva2VuLCByZWdleCwgc3RyaWN0UmVnZXgpIHtcbiAgICAgICAgcmVnZXhlc1t0b2tlbl0gPSBpc0Z1bmN0aW9uKHJlZ2V4KSA/IHJlZ2V4IDogZnVuY3Rpb24gKGlzU3RyaWN0LCBsb2NhbGVEYXRhKSB7XG4gICAgICAgICAgICByZXR1cm4gKGlzU3RyaWN0ICYmIHN0cmljdFJlZ2V4KSA/IHN0cmljdFJlZ2V4IDogcmVnZXg7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0UGFyc2VSZWdleEZvclRva2VuICh0b2tlbiwgY29uZmlnKSB7XG4gICAgICAgIGlmICghaGFzT3duUHJvcChyZWdleGVzLCB0b2tlbikpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUmVnRXhwKHVuZXNjYXBlRm9ybWF0KHRva2VuKSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVnZXhlc1t0b2tlbl0oY29uZmlnLl9zdHJpY3QsIGNvbmZpZy5fbG9jYWxlKTtcbiAgICB9XG5cbiAgICAvLyBDb2RlIGZyb20gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8zNTYxNDkzL2lzLXRoZXJlLWEtcmVnZXhwLWVzY2FwZS1mdW5jdGlvbi1pbi1qYXZhc2NyaXB0XG4gICAgZnVuY3Rpb24gdW5lc2NhcGVGb3JtYXQocykge1xuICAgICAgICByZXR1cm4gcmVnZXhFc2NhcGUocy5yZXBsYWNlKCdcXFxcJywgJycpLnJlcGxhY2UoL1xcXFwoXFxbKXxcXFxcKFxcXSl8XFxbKFteXFxdXFxbXSopXFxdfFxcXFwoLikvZywgZnVuY3Rpb24gKG1hdGNoZWQsIHAxLCBwMiwgcDMsIHA0KSB7XG4gICAgICAgICAgICByZXR1cm4gcDEgfHwgcDIgfHwgcDMgfHwgcDQ7XG4gICAgICAgIH0pKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZWdleEVzY2FwZShzKSB7XG4gICAgICAgIHJldHVybiBzLnJlcGxhY2UoL1stXFwvXFxcXF4kKis/LigpfFtcXF17fV0vZywgJ1xcXFwkJicpO1xuICAgIH1cblxuICAgIHZhciB0b2tlbnMgPSB7fTtcblxuICAgIGZ1bmN0aW9uIGFkZFBhcnNlVG9rZW4gKHRva2VuLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgaSwgZnVuYyA9IGNhbGxiYWNrO1xuICAgICAgICBpZiAodHlwZW9mIHRva2VuID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgdG9rZW4gPSBbdG9rZW5dO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc051bWJlcihjYWxsYmFjaykpIHtcbiAgICAgICAgICAgIGZ1bmMgPSBmdW5jdGlvbiAoaW5wdXQsIGFycmF5KSB7XG4gICAgICAgICAgICAgICAgYXJyYXlbY2FsbGJhY2tdID0gdG9JbnQoaW5wdXQpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdG9rZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHRva2Vuc1t0b2tlbltpXV0gPSBmdW5jO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYWRkV2Vla1BhcnNlVG9rZW4gKHRva2VuLCBjYWxsYmFjaykge1xuICAgICAgICBhZGRQYXJzZVRva2VuKHRva2VuLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcsIHRva2VuKSB7XG4gICAgICAgICAgICBjb25maWcuX3cgPSBjb25maWcuX3cgfHwge307XG4gICAgICAgICAgICBjYWxsYmFjayhpbnB1dCwgY29uZmlnLl93LCBjb25maWcsIHRva2VuKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYWRkVGltZVRvQXJyYXlGcm9tVG9rZW4odG9rZW4sIGlucHV0LCBjb25maWcpIHtcbiAgICAgICAgaWYgKGlucHV0ICE9IG51bGwgJiYgaGFzT3duUHJvcCh0b2tlbnMsIHRva2VuKSkge1xuICAgICAgICAgICAgdG9rZW5zW3Rva2VuXShpbnB1dCwgY29uZmlnLl9hLCBjb25maWcsIHRva2VuKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHZhciBZRUFSID0gMDtcbiAgICB2YXIgTU9OVEggPSAxO1xuICAgIHZhciBEQVRFID0gMjtcbiAgICB2YXIgSE9VUiA9IDM7XG4gICAgdmFyIE1JTlVURSA9IDQ7XG4gICAgdmFyIFNFQ09ORCA9IDU7XG4gICAgdmFyIE1JTExJU0VDT05EID0gNjtcbiAgICB2YXIgV0VFSyA9IDc7XG4gICAgdmFyIFdFRUtEQVkgPSA4O1xuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ1knLCAwLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciB5ID0gdGhpcy55ZWFyKCk7XG4gICAgICAgIHJldHVybiB5IDw9IDk5OTkgPyAnJyArIHkgOiAnKycgKyB5O1xuICAgIH0pO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydZWScsIDJdLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnllYXIoKSAlIDEwMDtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKDAsIFsnWVlZWScsICAgNF0sICAgICAgIDAsICd5ZWFyJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydZWVlZWScsICA1XSwgICAgICAgMCwgJ3llYXInKTtcbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ1lZWVlZWScsIDYsIHRydWVdLCAwLCAneWVhcicpO1xuXG4gICAgLy8gQUxJQVNFU1xuXG4gICAgYWRkVW5pdEFsaWFzKCd5ZWFyJywgJ3knKTtcblxuICAgIC8vIFBSSU9SSVRJRVNcblxuICAgIGFkZFVuaXRQcmlvcml0eSgneWVhcicsIDEpO1xuXG4gICAgLy8gUEFSU0lOR1xuXG4gICAgYWRkUmVnZXhUb2tlbignWScsICAgICAgbWF0Y2hTaWduZWQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ1lZJywgICAgIG1hdGNoMXRvMiwgbWF0Y2gyKTtcbiAgICBhZGRSZWdleFRva2VuKCdZWVlZJywgICBtYXRjaDF0bzQsIG1hdGNoNCk7XG4gICAgYWRkUmVnZXhUb2tlbignWVlZWVknLCAgbWF0Y2gxdG82LCBtYXRjaDYpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ1lZWVlZWScsIG1hdGNoMXRvNiwgbWF0Y2g2KTtcblxuICAgIGFkZFBhcnNlVG9rZW4oWydZWVlZWScsICdZWVlZWVknXSwgWUVBUik7XG4gICAgYWRkUGFyc2VUb2tlbignWVlZWScsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXkpIHtcbiAgICAgICAgYXJyYXlbWUVBUl0gPSBpbnB1dC5sZW5ndGggPT09IDIgPyBob29rcy5wYXJzZVR3b0RpZ2l0WWVhcihpbnB1dCkgOiB0b0ludChpbnB1dCk7XG4gICAgfSk7XG4gICAgYWRkUGFyc2VUb2tlbignWVknLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5KSB7XG4gICAgICAgIGFycmF5W1lFQVJdID0gaG9va3MucGFyc2VUd29EaWdpdFllYXIoaW5wdXQpO1xuICAgIH0pO1xuICAgIGFkZFBhcnNlVG9rZW4oJ1knLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5KSB7XG4gICAgICAgIGFycmF5W1lFQVJdID0gcGFyc2VJbnQoaW5wdXQsIDEwKTtcbiAgICB9KTtcblxuICAgIC8vIEhFTFBFUlNcblxuICAgIGZ1bmN0aW9uIGRheXNJblllYXIoeWVhcikge1xuICAgICAgICByZXR1cm4gaXNMZWFwWWVhcih5ZWFyKSA/IDM2NiA6IDM2NTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0xlYXBZZWFyKHllYXIpIHtcbiAgICAgICAgcmV0dXJuICh5ZWFyICUgNCA9PT0gMCAmJiB5ZWFyICUgMTAwICE9PSAwKSB8fCB5ZWFyICUgNDAwID09PSAwO1xuICAgIH1cblxuICAgIC8vIEhPT0tTXG5cbiAgICBob29rcy5wYXJzZVR3b0RpZ2l0WWVhciA9IGZ1bmN0aW9uIChpbnB1dCkge1xuICAgICAgICByZXR1cm4gdG9JbnQoaW5wdXQpICsgKHRvSW50KGlucHV0KSA+IDY4ID8gMTkwMCA6IDIwMDApO1xuICAgIH07XG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICB2YXIgZ2V0U2V0WWVhciA9IG1ha2VHZXRTZXQoJ0Z1bGxZZWFyJywgdHJ1ZSk7XG5cbiAgICBmdW5jdGlvbiBnZXRJc0xlYXBZZWFyICgpIHtcbiAgICAgICAgcmV0dXJuIGlzTGVhcFllYXIodGhpcy55ZWFyKCkpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1ha2VHZXRTZXQgKHVuaXQsIGtlZXBUaW1lKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgc2V0JDEodGhpcywgdW5pdCwgdmFsdWUpO1xuICAgICAgICAgICAgICAgIGhvb2tzLnVwZGF0ZU9mZnNldCh0aGlzLCBrZWVwVGltZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBnZXQodGhpcywgdW5pdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0IChtb20sIHVuaXQpIHtcbiAgICAgICAgcmV0dXJuIG1vbS5pc1ZhbGlkKCkgP1xuICAgICAgICAgICAgbW9tLl9kWydnZXQnICsgKG1vbS5faXNVVEMgPyAnVVRDJyA6ICcnKSArIHVuaXRdKCkgOiBOYU47XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2V0JDEgKG1vbSwgdW5pdCwgdmFsdWUpIHtcbiAgICAgICAgaWYgKG1vbS5pc1ZhbGlkKCkgJiYgIWlzTmFOKHZhbHVlKSkge1xuICAgICAgICAgICAgaWYgKHVuaXQgPT09ICdGdWxsWWVhcicgJiYgaXNMZWFwWWVhcihtb20ueWVhcigpKSAmJiBtb20ubW9udGgoKSA9PT0gMSAmJiBtb20uZGF0ZSgpID09PSAyOSkge1xuICAgICAgICAgICAgICAgIG1vbS5fZFsnc2V0JyArIChtb20uX2lzVVRDID8gJ1VUQycgOiAnJykgKyB1bml0XSh2YWx1ZSwgbW9tLm1vbnRoKCksIGRheXNJbk1vbnRoKHZhbHVlLCBtb20ubW9udGgoKSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgbW9tLl9kWydzZXQnICsgKG1vbS5faXNVVEMgPyAnVVRDJyA6ICcnKSArIHVuaXRdKHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIE1PTUVOVFNcblxuICAgIGZ1bmN0aW9uIHN0cmluZ0dldCAodW5pdHMpIHtcbiAgICAgICAgdW5pdHMgPSBub3JtYWxpemVVbml0cyh1bml0cyk7XG4gICAgICAgIGlmIChpc0Z1bmN0aW9uKHRoaXNbdW5pdHNdKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXNbdW5pdHNdKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG5cbiAgICBmdW5jdGlvbiBzdHJpbmdTZXQgKHVuaXRzLCB2YWx1ZSkge1xuICAgICAgICBpZiAodHlwZW9mIHVuaXRzID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgdW5pdHMgPSBub3JtYWxpemVPYmplY3RVbml0cyh1bml0cyk7XG4gICAgICAgICAgICB2YXIgcHJpb3JpdGl6ZWQgPSBnZXRQcmlvcml0aXplZFVuaXRzKHVuaXRzKTtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJpb3JpdGl6ZWQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICB0aGlzW3ByaW9yaXRpemVkW2ldLnVuaXRdKHVuaXRzW3ByaW9yaXRpemVkW2ldLnVuaXRdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHVuaXRzID0gbm9ybWFsaXplVW5pdHModW5pdHMpO1xuICAgICAgICAgICAgaWYgKGlzRnVuY3Rpb24odGhpc1t1bml0c10pKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXNbdW5pdHNdKHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtb2QobiwgeCkge1xuICAgICAgICByZXR1cm4gKChuICUgeCkgKyB4KSAlIHg7XG4gICAgfVxuXG4gICAgdmFyIGluZGV4T2Y7XG5cbiAgICBpZiAoQXJyYXkucHJvdG90eXBlLmluZGV4T2YpIHtcbiAgICAgICAgaW5kZXhPZiA9IEFycmF5LnByb3RvdHlwZS5pbmRleE9mO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGluZGV4T2YgPSBmdW5jdGlvbiAobykge1xuICAgICAgICAgICAgLy8gSSBrbm93XG4gICAgICAgICAgICB2YXIgaTtcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXNbaV0gPT09IG8pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRheXNJbk1vbnRoKHllYXIsIG1vbnRoKSB7XG4gICAgICAgIGlmIChpc05hTih5ZWFyKSB8fCBpc05hTihtb250aCkpIHtcbiAgICAgICAgICAgIHJldHVybiBOYU47XG4gICAgICAgIH1cbiAgICAgICAgdmFyIG1vZE1vbnRoID0gbW9kKG1vbnRoLCAxMik7XG4gICAgICAgIHllYXIgKz0gKG1vbnRoIC0gbW9kTW9udGgpIC8gMTI7XG4gICAgICAgIHJldHVybiBtb2RNb250aCA9PT0gMSA/IChpc0xlYXBZZWFyKHllYXIpID8gMjkgOiAyOCkgOiAoMzEgLSBtb2RNb250aCAlIDcgJSAyKTtcbiAgICB9XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBhZGRGb3JtYXRUb2tlbignTScsIFsnTU0nLCAyXSwgJ01vJywgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5tb250aCgpICsgMTtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKCdNTU0nLCAwLCAwLCBmdW5jdGlvbiAoZm9ybWF0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxvY2FsZURhdGEoKS5tb250aHNTaG9ydCh0aGlzLCBmb3JtYXQpO1xuICAgIH0pO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ01NTU0nLCAwLCAwLCBmdW5jdGlvbiAoZm9ybWF0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxvY2FsZURhdGEoKS5tb250aHModGhpcywgZm9ybWF0KTtcbiAgICB9KTtcblxuICAgIC8vIEFMSUFTRVNcblxuICAgIGFkZFVuaXRBbGlhcygnbW9udGgnLCAnTScpO1xuXG4gICAgLy8gUFJJT1JJVFlcblxuICAgIGFkZFVuaXRQcmlvcml0eSgnbW9udGgnLCA4KTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ00nLCAgICBtYXRjaDF0bzIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ01NJywgICBtYXRjaDF0bzIsIG1hdGNoMik7XG4gICAgYWRkUmVnZXhUb2tlbignTU1NJywgIGZ1bmN0aW9uIChpc1N0cmljdCwgbG9jYWxlKSB7XG4gICAgICAgIHJldHVybiBsb2NhbGUubW9udGhzU2hvcnRSZWdleChpc1N0cmljdCk7XG4gICAgfSk7XG4gICAgYWRkUmVnZXhUb2tlbignTU1NTScsIGZ1bmN0aW9uIChpc1N0cmljdCwgbG9jYWxlKSB7XG4gICAgICAgIHJldHVybiBsb2NhbGUubW9udGhzUmVnZXgoaXNTdHJpY3QpO1xuICAgIH0pO1xuXG4gICAgYWRkUGFyc2VUb2tlbihbJ00nLCAnTU0nXSwgZnVuY3Rpb24gKGlucHV0LCBhcnJheSkge1xuICAgICAgICBhcnJheVtNT05USF0gPSB0b0ludChpbnB1dCkgLSAxO1xuICAgIH0pO1xuXG4gICAgYWRkUGFyc2VUb2tlbihbJ01NTScsICdNTU1NJ10sIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZywgdG9rZW4pIHtcbiAgICAgICAgdmFyIG1vbnRoID0gY29uZmlnLl9sb2NhbGUubW9udGhzUGFyc2UoaW5wdXQsIHRva2VuLCBjb25maWcuX3N0cmljdCk7XG4gICAgICAgIC8vIGlmIHdlIGRpZG4ndCBmaW5kIGEgbW9udGggbmFtZSwgbWFyayB0aGUgZGF0ZSBhcyBpbnZhbGlkLlxuICAgICAgICBpZiAobW9udGggIT0gbnVsbCkge1xuICAgICAgICAgICAgYXJyYXlbTU9OVEhdID0gbW9udGg7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5pbnZhbGlkTW9udGggPSBpbnB1dDtcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gTE9DQUxFU1xuXG4gICAgdmFyIE1PTlRIU19JTl9GT1JNQVQgPSAvRFtvRF0/KFxcW1teXFxbXFxdXSpcXF18XFxzKStNTU1NPy87XG4gICAgdmFyIGRlZmF1bHRMb2NhbGVNb250aHMgPSAnSmFudWFyeV9GZWJydWFyeV9NYXJjaF9BcHJpbF9NYXlfSnVuZV9KdWx5X0F1Z3VzdF9TZXB0ZW1iZXJfT2N0b2Jlcl9Ob3ZlbWJlcl9EZWNlbWJlcicuc3BsaXQoJ18nKTtcbiAgICBmdW5jdGlvbiBsb2NhbGVNb250aHMgKG0sIGZvcm1hdCkge1xuICAgICAgICBpZiAoIW0pIHtcbiAgICAgICAgICAgIHJldHVybiBpc0FycmF5KHRoaXMuX21vbnRocykgPyB0aGlzLl9tb250aHMgOlxuICAgICAgICAgICAgICAgIHRoaXMuX21vbnRoc1snc3RhbmRhbG9uZSddO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpc0FycmF5KHRoaXMuX21vbnRocykgPyB0aGlzLl9tb250aHNbbS5tb250aCgpXSA6XG4gICAgICAgICAgICB0aGlzLl9tb250aHNbKHRoaXMuX21vbnRocy5pc0Zvcm1hdCB8fCBNT05USFNfSU5fRk9STUFUKS50ZXN0KGZvcm1hdCkgPyAnZm9ybWF0JyA6ICdzdGFuZGFsb25lJ11bbS5tb250aCgpXTtcbiAgICB9XG5cbiAgICB2YXIgZGVmYXVsdExvY2FsZU1vbnRoc1Nob3J0ID0gJ0phbl9GZWJfTWFyX0Fwcl9NYXlfSnVuX0p1bF9BdWdfU2VwX09jdF9Ob3ZfRGVjJy5zcGxpdCgnXycpO1xuICAgIGZ1bmN0aW9uIGxvY2FsZU1vbnRoc1Nob3J0IChtLCBmb3JtYXQpIHtcbiAgICAgICAgaWYgKCFtKSB7XG4gICAgICAgICAgICByZXR1cm4gaXNBcnJheSh0aGlzLl9tb250aHNTaG9ydCkgPyB0aGlzLl9tb250aHNTaG9ydCA6XG4gICAgICAgICAgICAgICAgdGhpcy5fbW9udGhzU2hvcnRbJ3N0YW5kYWxvbmUnXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXNBcnJheSh0aGlzLl9tb250aHNTaG9ydCkgPyB0aGlzLl9tb250aHNTaG9ydFttLm1vbnRoKCldIDpcbiAgICAgICAgICAgIHRoaXMuX21vbnRoc1Nob3J0W01PTlRIU19JTl9GT1JNQVQudGVzdChmb3JtYXQpID8gJ2Zvcm1hdCcgOiAnc3RhbmRhbG9uZSddW20ubW9udGgoKV07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaGFuZGxlU3RyaWN0UGFyc2UobW9udGhOYW1lLCBmb3JtYXQsIHN0cmljdCkge1xuICAgICAgICB2YXIgaSwgaWksIG1vbSwgbGxjID0gbW9udGhOYW1lLnRvTG9jYWxlTG93ZXJDYXNlKCk7XG4gICAgICAgIGlmICghdGhpcy5fbW9udGhzUGFyc2UpIHtcbiAgICAgICAgICAgIC8vIHRoaXMgaXMgbm90IHVzZWRcbiAgICAgICAgICAgIHRoaXMuX21vbnRoc1BhcnNlID0gW107XG4gICAgICAgICAgICB0aGlzLl9sb25nTW9udGhzUGFyc2UgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuX3Nob3J0TW9udGhzUGFyc2UgPSBbXTtcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCAxMjsgKytpKSB7XG4gICAgICAgICAgICAgICAgbW9tID0gY3JlYXRlVVRDKFsyMDAwLCBpXSk7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2hvcnRNb250aHNQYXJzZVtpXSA9IHRoaXMubW9udGhzU2hvcnQobW9tLCAnJykudG9Mb2NhbGVMb3dlckNhc2UoKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9sb25nTW9udGhzUGFyc2VbaV0gPSB0aGlzLm1vbnRocyhtb20sICcnKS50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN0cmljdCkge1xuICAgICAgICAgICAgaWYgKGZvcm1hdCA9PT0gJ01NTScpIHtcbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9zaG9ydE1vbnRoc1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpaSAhPT0gLTEgPyBpaSA6IG51bGw7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX2xvbmdNb250aHNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaWkgIT09IC0xID8gaWkgOiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKGZvcm1hdCA9PT0gJ01NTScpIHtcbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9zaG9ydE1vbnRoc1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIGlmIChpaSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9sb25nTW9udGhzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlpICE9PSAtMSA/IGlpIDogbnVsbDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fbG9uZ01vbnRoc1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIGlmIChpaSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9zaG9ydE1vbnRoc1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpaSAhPT0gLTEgPyBpaSA6IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsb2NhbGVNb250aHNQYXJzZSAobW9udGhOYW1lLCBmb3JtYXQsIHN0cmljdCkge1xuICAgICAgICB2YXIgaSwgbW9tLCByZWdleDtcblxuICAgICAgICBpZiAodGhpcy5fbW9udGhzUGFyc2VFeGFjdCkge1xuICAgICAgICAgICAgcmV0dXJuIGhhbmRsZVN0cmljdFBhcnNlLmNhbGwodGhpcywgbW9udGhOYW1lLCBmb3JtYXQsIHN0cmljdCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuX21vbnRoc1BhcnNlKSB7XG4gICAgICAgICAgICB0aGlzLl9tb250aHNQYXJzZSA9IFtdO1xuICAgICAgICAgICAgdGhpcy5fbG9uZ01vbnRoc1BhcnNlID0gW107XG4gICAgICAgICAgICB0aGlzLl9zaG9ydE1vbnRoc1BhcnNlID0gW107XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUT0RPOiBhZGQgc29ydGluZ1xuICAgICAgICAvLyBTb3J0aW5nIG1ha2VzIHN1cmUgaWYgb25lIG1vbnRoIChvciBhYmJyKSBpcyBhIHByZWZpeCBvZiBhbm90aGVyXG4gICAgICAgIC8vIHNlZSBzb3J0aW5nIGluIGNvbXB1dGVNb250aHNQYXJzZVxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMTI7IGkrKykge1xuICAgICAgICAgICAgLy8gbWFrZSB0aGUgcmVnZXggaWYgd2UgZG9uJ3QgaGF2ZSBpdCBhbHJlYWR5XG4gICAgICAgICAgICBtb20gPSBjcmVhdGVVVEMoWzIwMDAsIGldKTtcbiAgICAgICAgICAgIGlmIChzdHJpY3QgJiYgIXRoaXMuX2xvbmdNb250aHNQYXJzZVtpXSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2xvbmdNb250aHNQYXJzZVtpXSA9IG5ldyBSZWdFeHAoJ14nICsgdGhpcy5tb250aHMobW9tLCAnJykucmVwbGFjZSgnLicsICcnKSArICckJywgJ2knKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9zaG9ydE1vbnRoc1BhcnNlW2ldID0gbmV3IFJlZ0V4cCgnXicgKyB0aGlzLm1vbnRoc1Nob3J0KG1vbSwgJycpLnJlcGxhY2UoJy4nLCAnJykgKyAnJCcsICdpJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXN0cmljdCAmJiAhdGhpcy5fbW9udGhzUGFyc2VbaV0pIHtcbiAgICAgICAgICAgICAgICByZWdleCA9ICdeJyArIHRoaXMubW9udGhzKG1vbSwgJycpICsgJ3xeJyArIHRoaXMubW9udGhzU2hvcnQobW9tLCAnJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5fbW9udGhzUGFyc2VbaV0gPSBuZXcgUmVnRXhwKHJlZ2V4LnJlcGxhY2UoJy4nLCAnJyksICdpJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyB0ZXN0IHRoZSByZWdleFxuICAgICAgICAgICAgaWYgKHN0cmljdCAmJiBmb3JtYXQgPT09ICdNTU1NJyAmJiB0aGlzLl9sb25nTW9udGhzUGFyc2VbaV0udGVzdChtb250aE5hbWUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHN0cmljdCAmJiBmb3JtYXQgPT09ICdNTU0nICYmIHRoaXMuX3Nob3J0TW9udGhzUGFyc2VbaV0udGVzdChtb250aE5hbWUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCFzdHJpY3QgJiYgdGhpcy5fbW9udGhzUGFyc2VbaV0udGVzdChtb250aE5hbWUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICBmdW5jdGlvbiBzZXRNb250aCAobW9tLCB2YWx1ZSkge1xuICAgICAgICB2YXIgZGF5T2ZNb250aDtcblxuICAgICAgICBpZiAoIW1vbS5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIC8vIE5vIG9wXG4gICAgICAgICAgICByZXR1cm4gbW9tO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGlmICgvXlxcZCskLy50ZXN0KHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gdG9JbnQodmFsdWUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IG1vbS5sb2NhbGVEYXRhKCkubW9udGhzUGFyc2UodmFsdWUpO1xuICAgICAgICAgICAgICAgIC8vIFRPRE86IEFub3RoZXIgc2lsZW50IGZhaWx1cmU/XG4gICAgICAgICAgICAgICAgaWYgKCFpc051bWJlcih2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1vbTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBkYXlPZk1vbnRoID0gTWF0aC5taW4obW9tLmRhdGUoKSwgZGF5c0luTW9udGgobW9tLnllYXIoKSwgdmFsdWUpKTtcbiAgICAgICAgbW9tLl9kWydzZXQnICsgKG1vbS5faXNVVEMgPyAnVVRDJyA6ICcnKSArICdNb250aCddKHZhbHVlLCBkYXlPZk1vbnRoKTtcbiAgICAgICAgcmV0dXJuIG1vbTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRTZXRNb250aCAodmFsdWUpIHtcbiAgICAgICAgaWYgKHZhbHVlICE9IG51bGwpIHtcbiAgICAgICAgICAgIHNldE1vbnRoKHRoaXMsIHZhbHVlKTtcbiAgICAgICAgICAgIGhvb2tzLnVwZGF0ZU9mZnNldCh0aGlzLCB0cnVlKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGdldCh0aGlzLCAnTW9udGgnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldERheXNJbk1vbnRoICgpIHtcbiAgICAgICAgcmV0dXJuIGRheXNJbk1vbnRoKHRoaXMueWVhcigpLCB0aGlzLm1vbnRoKCkpO1xuICAgIH1cblxuICAgIHZhciBkZWZhdWx0TW9udGhzU2hvcnRSZWdleCA9IG1hdGNoV29yZDtcbiAgICBmdW5jdGlvbiBtb250aHNTaG9ydFJlZ2V4IChpc1N0cmljdCkge1xuICAgICAgICBpZiAodGhpcy5fbW9udGhzUGFyc2VFeGFjdCkge1xuICAgICAgICAgICAgaWYgKCFoYXNPd25Qcm9wKHRoaXMsICdfbW9udGhzUmVnZXgnKSkge1xuICAgICAgICAgICAgICAgIGNvbXB1dGVNb250aHNQYXJzZS5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzU3RyaWN0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21vbnRoc1Nob3J0U3RyaWN0UmVnZXg7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9tb250aHNTaG9ydFJlZ2V4O1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCFoYXNPd25Qcm9wKHRoaXMsICdfbW9udGhzU2hvcnRSZWdleCcpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbW9udGhzU2hvcnRSZWdleCA9IGRlZmF1bHRNb250aHNTaG9ydFJlZ2V4O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21vbnRoc1Nob3J0U3RyaWN0UmVnZXggJiYgaXNTdHJpY3QgP1xuICAgICAgICAgICAgICAgIHRoaXMuX21vbnRoc1Nob3J0U3RyaWN0UmVnZXggOiB0aGlzLl9tb250aHNTaG9ydFJlZ2V4O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGRlZmF1bHRNb250aHNSZWdleCA9IG1hdGNoV29yZDtcbiAgICBmdW5jdGlvbiBtb250aHNSZWdleCAoaXNTdHJpY3QpIHtcbiAgICAgICAgaWYgKHRoaXMuX21vbnRoc1BhcnNlRXhhY3QpIHtcbiAgICAgICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX21vbnRoc1JlZ2V4JykpIHtcbiAgICAgICAgICAgICAgICBjb21wdXRlTW9udGhzUGFyc2UuY2FsbCh0aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpc1N0cmljdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9tb250aHNTdHJpY3RSZWdleDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21vbnRoc1JlZ2V4O1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCFoYXNPd25Qcm9wKHRoaXMsICdfbW9udGhzUmVnZXgnKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX21vbnRoc1JlZ2V4ID0gZGVmYXVsdE1vbnRoc1JlZ2V4O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21vbnRoc1N0cmljdFJlZ2V4ICYmIGlzU3RyaWN0ID9cbiAgICAgICAgICAgICAgICB0aGlzLl9tb250aHNTdHJpY3RSZWdleCA6IHRoaXMuX21vbnRoc1JlZ2V4O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY29tcHV0ZU1vbnRoc1BhcnNlICgpIHtcbiAgICAgICAgZnVuY3Rpb24gY21wTGVuUmV2KGEsIGIpIHtcbiAgICAgICAgICAgIHJldHVybiBiLmxlbmd0aCAtIGEubGVuZ3RoO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHNob3J0UGllY2VzID0gW10sIGxvbmdQaWVjZXMgPSBbXSwgbWl4ZWRQaWVjZXMgPSBbXSxcbiAgICAgICAgICAgIGksIG1vbTtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IDEyOyBpKyspIHtcbiAgICAgICAgICAgIC8vIG1ha2UgdGhlIHJlZ2V4IGlmIHdlIGRvbid0IGhhdmUgaXQgYWxyZWFkeVxuICAgICAgICAgICAgbW9tID0gY3JlYXRlVVRDKFsyMDAwLCBpXSk7XG4gICAgICAgICAgICBzaG9ydFBpZWNlcy5wdXNoKHRoaXMubW9udGhzU2hvcnQobW9tLCAnJykpO1xuICAgICAgICAgICAgbG9uZ1BpZWNlcy5wdXNoKHRoaXMubW9udGhzKG1vbSwgJycpKTtcbiAgICAgICAgICAgIG1peGVkUGllY2VzLnB1c2godGhpcy5tb250aHMobW9tLCAnJykpO1xuICAgICAgICAgICAgbWl4ZWRQaWVjZXMucHVzaCh0aGlzLm1vbnRoc1Nob3J0KG1vbSwgJycpKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBTb3J0aW5nIG1ha2VzIHN1cmUgaWYgb25lIG1vbnRoIChvciBhYmJyKSBpcyBhIHByZWZpeCBvZiBhbm90aGVyIGl0XG4gICAgICAgIC8vIHdpbGwgbWF0Y2ggdGhlIGxvbmdlciBwaWVjZS5cbiAgICAgICAgc2hvcnRQaWVjZXMuc29ydChjbXBMZW5SZXYpO1xuICAgICAgICBsb25nUGllY2VzLnNvcnQoY21wTGVuUmV2KTtcbiAgICAgICAgbWl4ZWRQaWVjZXMuc29ydChjbXBMZW5SZXYpO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMTI7IGkrKykge1xuICAgICAgICAgICAgc2hvcnRQaWVjZXNbaV0gPSByZWdleEVzY2FwZShzaG9ydFBpZWNlc1tpXSk7XG4gICAgICAgICAgICBsb25nUGllY2VzW2ldID0gcmVnZXhFc2NhcGUobG9uZ1BpZWNlc1tpXSk7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IDI0OyBpKyspIHtcbiAgICAgICAgICAgIG1peGVkUGllY2VzW2ldID0gcmVnZXhFc2NhcGUobWl4ZWRQaWVjZXNbaV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fbW9udGhzUmVnZXggPSBuZXcgUmVnRXhwKCdeKCcgKyBtaXhlZFBpZWNlcy5qb2luKCd8JykgKyAnKScsICdpJyk7XG4gICAgICAgIHRoaXMuX21vbnRoc1Nob3J0UmVnZXggPSB0aGlzLl9tb250aHNSZWdleDtcbiAgICAgICAgdGhpcy5fbW9udGhzU3RyaWN0UmVnZXggPSBuZXcgUmVnRXhwKCdeKCcgKyBsb25nUGllY2VzLmpvaW4oJ3wnKSArICcpJywgJ2knKTtcbiAgICAgICAgdGhpcy5fbW9udGhzU2hvcnRTdHJpY3RSZWdleCA9IG5ldyBSZWdFeHAoJ14oJyArIHNob3J0UGllY2VzLmpvaW4oJ3wnKSArICcpJywgJ2knKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVEYXRlICh5LCBtLCBkLCBoLCBNLCBzLCBtcykge1xuICAgICAgICAvLyBjYW4ndCBqdXN0IGFwcGx5KCkgdG8gY3JlYXRlIGEgZGF0ZTpcbiAgICAgICAgLy8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xLzE4MTM0OFxuICAgICAgICB2YXIgZGF0ZTtcbiAgICAgICAgLy8gdGhlIGRhdGUgY29uc3RydWN0b3IgcmVtYXBzIHllYXJzIDAtOTkgdG8gMTkwMC0xOTk5XG4gICAgICAgIGlmICh5IDwgMTAwICYmIHkgPj0gMCkge1xuICAgICAgICAgICAgLy8gcHJlc2VydmUgbGVhcCB5ZWFycyB1c2luZyBhIGZ1bGwgNDAwIHllYXIgY3ljbGUsIHRoZW4gcmVzZXRcbiAgICAgICAgICAgIGRhdGUgPSBuZXcgRGF0ZSh5ICsgNDAwLCBtLCBkLCBoLCBNLCBzLCBtcyk7XG4gICAgICAgICAgICBpZiAoaXNGaW5pdGUoZGF0ZS5nZXRGdWxsWWVhcigpKSkge1xuICAgICAgICAgICAgICAgIGRhdGUuc2V0RnVsbFllYXIoeSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkYXRlID0gbmV3IERhdGUoeSwgbSwgZCwgaCwgTSwgcywgbXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGRhdGU7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlVVRDRGF0ZSAoeSkge1xuICAgICAgICB2YXIgZGF0ZTtcbiAgICAgICAgLy8gdGhlIERhdGUuVVRDIGZ1bmN0aW9uIHJlbWFwcyB5ZWFycyAwLTk5IHRvIDE5MDAtMTk5OVxuICAgICAgICBpZiAoeSA8IDEwMCAmJiB5ID49IDApIHtcbiAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcbiAgICAgICAgICAgIC8vIHByZXNlcnZlIGxlYXAgeWVhcnMgdXNpbmcgYSBmdWxsIDQwMCB5ZWFyIGN5Y2xlLCB0aGVuIHJlc2V0XG4gICAgICAgICAgICBhcmdzWzBdID0geSArIDQwMDtcbiAgICAgICAgICAgIGRhdGUgPSBuZXcgRGF0ZShEYXRlLlVUQy5hcHBseShudWxsLCBhcmdzKSk7XG4gICAgICAgICAgICBpZiAoaXNGaW5pdGUoZGF0ZS5nZXRVVENGdWxsWWVhcigpKSkge1xuICAgICAgICAgICAgICAgIGRhdGUuc2V0VVRDRnVsbFllYXIoeSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkYXRlID0gbmV3IERhdGUoRGF0ZS5VVEMuYXBwbHkobnVsbCwgYXJndW1lbnRzKSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZGF0ZTtcbiAgICB9XG5cbiAgICAvLyBzdGFydC1vZi1maXJzdC13ZWVrIC0gc3RhcnQtb2YteWVhclxuICAgIGZ1bmN0aW9uIGZpcnN0V2Vla09mZnNldCh5ZWFyLCBkb3csIGRveSkge1xuICAgICAgICB2YXIgLy8gZmlyc3Qtd2VlayBkYXkgLS0gd2hpY2ggamFudWFyeSBpcyBhbHdheXMgaW4gdGhlIGZpcnN0IHdlZWsgKDQgZm9yIGlzbywgMSBmb3Igb3RoZXIpXG4gICAgICAgICAgICBmd2QgPSA3ICsgZG93IC0gZG95LFxuICAgICAgICAgICAgLy8gZmlyc3Qtd2VlayBkYXkgbG9jYWwgd2Vla2RheSAtLSB3aGljaCBsb2NhbCB3ZWVrZGF5IGlzIGZ3ZFxuICAgICAgICAgICAgZndkbHcgPSAoNyArIGNyZWF0ZVVUQ0RhdGUoeWVhciwgMCwgZndkKS5nZXRVVENEYXkoKSAtIGRvdykgJSA3O1xuXG4gICAgICAgIHJldHVybiAtZndkbHcgKyBmd2QgLSAxO1xuICAgIH1cblxuICAgIC8vIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0lTT193ZWVrX2RhdGUjQ2FsY3VsYXRpbmdfYV9kYXRlX2dpdmVuX3RoZV95ZWFyLjJDX3dlZWtfbnVtYmVyX2FuZF93ZWVrZGF5XG4gICAgZnVuY3Rpb24gZGF5T2ZZZWFyRnJvbVdlZWtzKHllYXIsIHdlZWssIHdlZWtkYXksIGRvdywgZG95KSB7XG4gICAgICAgIHZhciBsb2NhbFdlZWtkYXkgPSAoNyArIHdlZWtkYXkgLSBkb3cpICUgNyxcbiAgICAgICAgICAgIHdlZWtPZmZzZXQgPSBmaXJzdFdlZWtPZmZzZXQoeWVhciwgZG93LCBkb3kpLFxuICAgICAgICAgICAgZGF5T2ZZZWFyID0gMSArIDcgKiAod2VlayAtIDEpICsgbG9jYWxXZWVrZGF5ICsgd2Vla09mZnNldCxcbiAgICAgICAgICAgIHJlc1llYXIsIHJlc0RheU9mWWVhcjtcblxuICAgICAgICBpZiAoZGF5T2ZZZWFyIDw9IDApIHtcbiAgICAgICAgICAgIHJlc1llYXIgPSB5ZWFyIC0gMTtcbiAgICAgICAgICAgIHJlc0RheU9mWWVhciA9IGRheXNJblllYXIocmVzWWVhcikgKyBkYXlPZlllYXI7XG4gICAgICAgIH0gZWxzZSBpZiAoZGF5T2ZZZWFyID4gZGF5c0luWWVhcih5ZWFyKSkge1xuICAgICAgICAgICAgcmVzWWVhciA9IHllYXIgKyAxO1xuICAgICAgICAgICAgcmVzRGF5T2ZZZWFyID0gZGF5T2ZZZWFyIC0gZGF5c0luWWVhcih5ZWFyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlc1llYXIgPSB5ZWFyO1xuICAgICAgICAgICAgcmVzRGF5T2ZZZWFyID0gZGF5T2ZZZWFyO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHllYXI6IHJlc1llYXIsXG4gICAgICAgICAgICBkYXlPZlllYXI6IHJlc0RheU9mWWVhclxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHdlZWtPZlllYXIobW9tLCBkb3csIGRveSkge1xuICAgICAgICB2YXIgd2Vla09mZnNldCA9IGZpcnN0V2Vla09mZnNldChtb20ueWVhcigpLCBkb3csIGRveSksXG4gICAgICAgICAgICB3ZWVrID0gTWF0aC5mbG9vcigobW9tLmRheU9mWWVhcigpIC0gd2Vla09mZnNldCAtIDEpIC8gNykgKyAxLFxuICAgICAgICAgICAgcmVzV2VlaywgcmVzWWVhcjtcblxuICAgICAgICBpZiAod2VlayA8IDEpIHtcbiAgICAgICAgICAgIHJlc1llYXIgPSBtb20ueWVhcigpIC0gMTtcbiAgICAgICAgICAgIHJlc1dlZWsgPSB3ZWVrICsgd2Vla3NJblllYXIocmVzWWVhciwgZG93LCBkb3kpO1xuICAgICAgICB9IGVsc2UgaWYgKHdlZWsgPiB3ZWVrc0luWWVhcihtb20ueWVhcigpLCBkb3csIGRveSkpIHtcbiAgICAgICAgICAgIHJlc1dlZWsgPSB3ZWVrIC0gd2Vla3NJblllYXIobW9tLnllYXIoKSwgZG93LCBkb3kpO1xuICAgICAgICAgICAgcmVzWWVhciA9IG1vbS55ZWFyKCkgKyAxO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzWWVhciA9IG1vbS55ZWFyKCk7XG4gICAgICAgICAgICByZXNXZWVrID0gd2VlaztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB3ZWVrOiByZXNXZWVrLFxuICAgICAgICAgICAgeWVhcjogcmVzWWVhclxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHdlZWtzSW5ZZWFyKHllYXIsIGRvdywgZG95KSB7XG4gICAgICAgIHZhciB3ZWVrT2Zmc2V0ID0gZmlyc3RXZWVrT2Zmc2V0KHllYXIsIGRvdywgZG95KSxcbiAgICAgICAgICAgIHdlZWtPZmZzZXROZXh0ID0gZmlyc3RXZWVrT2Zmc2V0KHllYXIgKyAxLCBkb3csIGRveSk7XG4gICAgICAgIHJldHVybiAoZGF5c0luWWVhcih5ZWFyKSAtIHdlZWtPZmZzZXQgKyB3ZWVrT2Zmc2V0TmV4dCkgLyA3O1xuICAgIH1cblxuICAgIC8vIEZPUk1BVFRJTkdcblxuICAgIGFkZEZvcm1hdFRva2VuKCd3JywgWyd3dycsIDJdLCAnd28nLCAnd2VlaycpO1xuICAgIGFkZEZvcm1hdFRva2VuKCdXJywgWydXVycsIDJdLCAnV28nLCAnaXNvV2VlaycpO1xuXG4gICAgLy8gQUxJQVNFU1xuXG4gICAgYWRkVW5pdEFsaWFzKCd3ZWVrJywgJ3cnKTtcbiAgICBhZGRVbml0QWxpYXMoJ2lzb1dlZWsnLCAnVycpO1xuXG4gICAgLy8gUFJJT1JJVElFU1xuXG4gICAgYWRkVW5pdFByaW9yaXR5KCd3ZWVrJywgNSk7XG4gICAgYWRkVW5pdFByaW9yaXR5KCdpc29XZWVrJywgNSk7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCd3JywgIG1hdGNoMXRvMik7XG4gICAgYWRkUmVnZXhUb2tlbignd3cnLCBtYXRjaDF0bzIsIG1hdGNoMik7XG4gICAgYWRkUmVnZXhUb2tlbignVycsICBtYXRjaDF0bzIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ1dXJywgbWF0Y2gxdG8yLCBtYXRjaDIpO1xuXG4gICAgYWRkV2Vla1BhcnNlVG9rZW4oWyd3JywgJ3d3JywgJ1cnLCAnV1cnXSwgZnVuY3Rpb24gKGlucHV0LCB3ZWVrLCBjb25maWcsIHRva2VuKSB7XG4gICAgICAgIHdlZWtbdG9rZW4uc3Vic3RyKDAsIDEpXSA9IHRvSW50KGlucHV0KTtcbiAgICB9KTtcblxuICAgIC8vIEhFTFBFUlNcblxuICAgIC8vIExPQ0FMRVNcblxuICAgIGZ1bmN0aW9uIGxvY2FsZVdlZWsgKG1vbSkge1xuICAgICAgICByZXR1cm4gd2Vla09mWWVhcihtb20sIHRoaXMuX3dlZWsuZG93LCB0aGlzLl93ZWVrLmRveSkud2VlaztcbiAgICB9XG5cbiAgICB2YXIgZGVmYXVsdExvY2FsZVdlZWsgPSB7XG4gICAgICAgIGRvdyA6IDAsIC8vIFN1bmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICBkb3kgOiA2ICAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA2dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIGxvY2FsZUZpcnN0RGF5T2ZXZWVrICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWsuZG93O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxvY2FsZUZpcnN0RGF5T2ZZZWFyICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWsuZG95O1xuICAgIH1cblxuICAgIC8vIE1PTUVOVFNcblxuICAgIGZ1bmN0aW9uIGdldFNldFdlZWsgKGlucHV0KSB7XG4gICAgICAgIHZhciB3ZWVrID0gdGhpcy5sb2NhbGVEYXRhKCkud2Vlayh0aGlzKTtcbiAgICAgICAgcmV0dXJuIGlucHV0ID09IG51bGwgPyB3ZWVrIDogdGhpcy5hZGQoKGlucHV0IC0gd2VlaykgKiA3LCAnZCcpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFNldElTT1dlZWsgKGlucHV0KSB7XG4gICAgICAgIHZhciB3ZWVrID0gd2Vla09mWWVhcih0aGlzLCAxLCA0KS53ZWVrO1xuICAgICAgICByZXR1cm4gaW5wdXQgPT0gbnVsbCA/IHdlZWsgOiB0aGlzLmFkZCgoaW5wdXQgLSB3ZWVrKSAqIDcsICdkJyk7XG4gICAgfVxuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ2QnLCAwLCAnZG8nLCAnZGF5Jyk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbignZGQnLCAwLCAwLCBmdW5jdGlvbiAoZm9ybWF0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxvY2FsZURhdGEoKS53ZWVrZGF5c01pbih0aGlzLCBmb3JtYXQpO1xuICAgIH0pO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ2RkZCcsIDAsIDAsIGZ1bmN0aW9uIChmb3JtYXQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLndlZWtkYXlzU2hvcnQodGhpcywgZm9ybWF0KTtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKCdkZGRkJywgMCwgMCwgZnVuY3Rpb24gKGZvcm1hdCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkud2Vla2RheXModGhpcywgZm9ybWF0KTtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKCdlJywgMCwgMCwgJ3dlZWtkYXknKTtcbiAgICBhZGRGb3JtYXRUb2tlbignRScsIDAsIDAsICdpc29XZWVrZGF5Jyk7XG5cbiAgICAvLyBBTElBU0VTXG5cbiAgICBhZGRVbml0QWxpYXMoJ2RheScsICdkJyk7XG4gICAgYWRkVW5pdEFsaWFzKCd3ZWVrZGF5JywgJ2UnKTtcbiAgICBhZGRVbml0QWxpYXMoJ2lzb1dlZWtkYXknLCAnRScpO1xuXG4gICAgLy8gUFJJT1JJVFlcbiAgICBhZGRVbml0UHJpb3JpdHkoJ2RheScsIDExKTtcbiAgICBhZGRVbml0UHJpb3JpdHkoJ3dlZWtkYXknLCAxMSk7XG4gICAgYWRkVW5pdFByaW9yaXR5KCdpc29XZWVrZGF5JywgMTEpO1xuXG4gICAgLy8gUEFSU0lOR1xuXG4gICAgYWRkUmVnZXhUb2tlbignZCcsICAgIG1hdGNoMXRvMik7XG4gICAgYWRkUmVnZXhUb2tlbignZScsICAgIG1hdGNoMXRvMik7XG4gICAgYWRkUmVnZXhUb2tlbignRScsICAgIG1hdGNoMXRvMik7XG4gICAgYWRkUmVnZXhUb2tlbignZGQnLCAgIGZ1bmN0aW9uIChpc1N0cmljdCwgbG9jYWxlKSB7XG4gICAgICAgIHJldHVybiBsb2NhbGUud2Vla2RheXNNaW5SZWdleChpc1N0cmljdCk7XG4gICAgfSk7XG4gICAgYWRkUmVnZXhUb2tlbignZGRkJywgICBmdW5jdGlvbiAoaXNTdHJpY3QsIGxvY2FsZSkge1xuICAgICAgICByZXR1cm4gbG9jYWxlLndlZWtkYXlzU2hvcnRSZWdleChpc1N0cmljdCk7XG4gICAgfSk7XG4gICAgYWRkUmVnZXhUb2tlbignZGRkZCcsICAgZnVuY3Rpb24gKGlzU3RyaWN0LCBsb2NhbGUpIHtcbiAgICAgICAgcmV0dXJuIGxvY2FsZS53ZWVrZGF5c1JlZ2V4KGlzU3RyaWN0KTtcbiAgICB9KTtcblxuICAgIGFkZFdlZWtQYXJzZVRva2VuKFsnZGQnLCAnZGRkJywgJ2RkZGQnXSwgZnVuY3Rpb24gKGlucHV0LCB3ZWVrLCBjb25maWcsIHRva2VuKSB7XG4gICAgICAgIHZhciB3ZWVrZGF5ID0gY29uZmlnLl9sb2NhbGUud2Vla2RheXNQYXJzZShpbnB1dCwgdG9rZW4sIGNvbmZpZy5fc3RyaWN0KTtcbiAgICAgICAgLy8gaWYgd2UgZGlkbid0IGdldCBhIHdlZWtkYXkgbmFtZSwgbWFyayB0aGUgZGF0ZSBhcyBpbnZhbGlkXG4gICAgICAgIGlmICh3ZWVrZGF5ICE9IG51bGwpIHtcbiAgICAgICAgICAgIHdlZWsuZCA9IHdlZWtkYXk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5pbnZhbGlkV2Vla2RheSA9IGlucHV0O1xuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICBhZGRXZWVrUGFyc2VUb2tlbihbJ2QnLCAnZScsICdFJ10sIGZ1bmN0aW9uIChpbnB1dCwgd2VlaywgY29uZmlnLCB0b2tlbikge1xuICAgICAgICB3ZWVrW3Rva2VuXSA9IHRvSW50KGlucHV0KTtcbiAgICB9KTtcblxuICAgIC8vIEhFTFBFUlNcblxuICAgIGZ1bmN0aW9uIHBhcnNlV2Vla2RheShpbnB1dCwgbG9jYWxlKSB7XG4gICAgICAgIGlmICh0eXBlb2YgaW5wdXQgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICByZXR1cm4gaW5wdXQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWlzTmFOKGlucHV0KSkge1xuICAgICAgICAgICAgcmV0dXJuIHBhcnNlSW50KGlucHV0LCAxMCk7XG4gICAgICAgIH1cblxuICAgICAgICBpbnB1dCA9IGxvY2FsZS53ZWVrZGF5c1BhcnNlKGlucHV0KTtcbiAgICAgICAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnB1dDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBhcnNlSXNvV2Vla2RheShpbnB1dCwgbG9jYWxlKSB7XG4gICAgICAgIGlmICh0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICByZXR1cm4gbG9jYWxlLndlZWtkYXlzUGFyc2UoaW5wdXQpICUgNyB8fCA3O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpc05hTihpbnB1dCkgPyBudWxsIDogaW5wdXQ7XG4gICAgfVxuXG4gICAgLy8gTE9DQUxFU1xuICAgIGZ1bmN0aW9uIHNoaWZ0V2Vla2RheXMgKHdzLCBuKSB7XG4gICAgICAgIHJldHVybiB3cy5zbGljZShuLCA3KS5jb25jYXQod3Muc2xpY2UoMCwgbikpO1xuICAgIH1cblxuICAgIHZhciBkZWZhdWx0TG9jYWxlV2Vla2RheXMgPSAnU3VuZGF5X01vbmRheV9UdWVzZGF5X1dlZG5lc2RheV9UaHVyc2RheV9GcmlkYXlfU2F0dXJkYXknLnNwbGl0KCdfJyk7XG4gICAgZnVuY3Rpb24gbG9jYWxlV2Vla2RheXMgKG0sIGZvcm1hdCkge1xuICAgICAgICB2YXIgd2Vla2RheXMgPSBpc0FycmF5KHRoaXMuX3dlZWtkYXlzKSA/IHRoaXMuX3dlZWtkYXlzIDpcbiAgICAgICAgICAgIHRoaXMuX3dlZWtkYXlzWyhtICYmIG0gIT09IHRydWUgJiYgdGhpcy5fd2Vla2RheXMuaXNGb3JtYXQudGVzdChmb3JtYXQpKSA/ICdmb3JtYXQnIDogJ3N0YW5kYWxvbmUnXTtcbiAgICAgICAgcmV0dXJuIChtID09PSB0cnVlKSA/IHNoaWZ0V2Vla2RheXMod2Vla2RheXMsIHRoaXMuX3dlZWsuZG93KVxuICAgICAgICAgICAgOiAobSkgPyB3ZWVrZGF5c1ttLmRheSgpXSA6IHdlZWtkYXlzO1xuICAgIH1cblxuICAgIHZhciBkZWZhdWx0TG9jYWxlV2Vla2RheXNTaG9ydCA9ICdTdW5fTW9uX1R1ZV9XZWRfVGh1X0ZyaV9TYXQnLnNwbGl0KCdfJyk7XG4gICAgZnVuY3Rpb24gbG9jYWxlV2Vla2RheXNTaG9ydCAobSkge1xuICAgICAgICByZXR1cm4gKG0gPT09IHRydWUpID8gc2hpZnRXZWVrZGF5cyh0aGlzLl93ZWVrZGF5c1Nob3J0LCB0aGlzLl93ZWVrLmRvdylcbiAgICAgICAgICAgIDogKG0pID8gdGhpcy5fd2Vla2RheXNTaG9ydFttLmRheSgpXSA6IHRoaXMuX3dlZWtkYXlzU2hvcnQ7XG4gICAgfVxuXG4gICAgdmFyIGRlZmF1bHRMb2NhbGVXZWVrZGF5c01pbiA9ICdTdV9Nb19UdV9XZV9UaF9Gcl9TYScuc3BsaXQoJ18nKTtcbiAgICBmdW5jdGlvbiBsb2NhbGVXZWVrZGF5c01pbiAobSkge1xuICAgICAgICByZXR1cm4gKG0gPT09IHRydWUpID8gc2hpZnRXZWVrZGF5cyh0aGlzLl93ZWVrZGF5c01pbiwgdGhpcy5fd2Vlay5kb3cpXG4gICAgICAgICAgICA6IChtKSA/IHRoaXMuX3dlZWtkYXlzTWluW20uZGF5KCldIDogdGhpcy5fd2Vla2RheXNNaW47XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaGFuZGxlU3RyaWN0UGFyc2UkMSh3ZWVrZGF5TmFtZSwgZm9ybWF0LCBzdHJpY3QpIHtcbiAgICAgICAgdmFyIGksIGlpLCBtb20sIGxsYyA9IHdlZWtkYXlOYW1lLnRvTG9jYWxlTG93ZXJDYXNlKCk7XG4gICAgICAgIGlmICghdGhpcy5fd2Vla2RheXNQYXJzZSkge1xuICAgICAgICAgICAgdGhpcy5fd2Vla2RheXNQYXJzZSA9IFtdO1xuICAgICAgICAgICAgdGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlID0gW107XG4gICAgICAgICAgICB0aGlzLl9taW5XZWVrZGF5c1BhcnNlID0gW107XG5cbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCA3OyArK2kpIHtcbiAgICAgICAgICAgICAgICBtb20gPSBjcmVhdGVVVEMoWzIwMDAsIDFdKS5kYXkoaSk7XG4gICAgICAgICAgICAgICAgdGhpcy5fbWluV2Vla2RheXNQYXJzZVtpXSA9IHRoaXMud2Vla2RheXNNaW4obW9tLCAnJykudG9Mb2NhbGVMb3dlckNhc2UoKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2VbaV0gPSB0aGlzLndlZWtkYXlzU2hvcnQobW9tLCAnJykudG9Mb2NhbGVMb3dlckNhc2UoKTtcbiAgICAgICAgICAgICAgICB0aGlzLl93ZWVrZGF5c1BhcnNlW2ldID0gdGhpcy53ZWVrZGF5cyhtb20sICcnKS50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN0cmljdCkge1xuICAgICAgICAgICAgaWYgKGZvcm1hdCA9PT0gJ2RkZGQnKSB7XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fd2Vla2RheXNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaWkgIT09IC0xID8gaWkgOiBudWxsO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChmb3JtYXQgPT09ICdkZGQnKSB7XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpaSAhPT0gLTEgPyBpaSA6IG51bGw7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX21pbldlZWtkYXlzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlpICE9PSAtMSA/IGlpIDogbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChmb3JtYXQgPT09ICdkZGRkJykge1xuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX3dlZWtkYXlzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgaWYgKGlpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaWk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICBpZiAoaWkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpaTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fbWluV2Vla2RheXNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaWkgIT09IC0xID8gaWkgOiBudWxsO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChmb3JtYXQgPT09ICdkZGQnKSB7XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIGlmIChpaSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl93ZWVrZGF5c1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIGlmIChpaSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9taW5XZWVrZGF5c1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpaSAhPT0gLTEgPyBpaSA6IG51bGw7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX21pbldlZWtkYXlzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgaWYgKGlpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaWk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX3dlZWtkYXlzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgaWYgKGlpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaWk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaWkgIT09IC0xID8gaWkgOiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbG9jYWxlV2Vla2RheXNQYXJzZSAod2Vla2RheU5hbWUsIGZvcm1hdCwgc3RyaWN0KSB7XG4gICAgICAgIHZhciBpLCBtb20sIHJlZ2V4O1xuXG4gICAgICAgIGlmICh0aGlzLl93ZWVrZGF5c1BhcnNlRXhhY3QpIHtcbiAgICAgICAgICAgIHJldHVybiBoYW5kbGVTdHJpY3RQYXJzZSQxLmNhbGwodGhpcywgd2Vla2RheU5hbWUsIGZvcm1hdCwgc3RyaWN0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5fd2Vla2RheXNQYXJzZSkge1xuICAgICAgICAgICAgdGhpcy5fd2Vla2RheXNQYXJzZSA9IFtdO1xuICAgICAgICAgICAgdGhpcy5fbWluV2Vla2RheXNQYXJzZSA9IFtdO1xuICAgICAgICAgICAgdGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlID0gW107XG4gICAgICAgICAgICB0aGlzLl9mdWxsV2Vla2RheXNQYXJzZSA9IFtdO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IDc7IGkrKykge1xuICAgICAgICAgICAgLy8gbWFrZSB0aGUgcmVnZXggaWYgd2UgZG9uJ3QgaGF2ZSBpdCBhbHJlYWR5XG5cbiAgICAgICAgICAgIG1vbSA9IGNyZWF0ZVVUQyhbMjAwMCwgMV0pLmRheShpKTtcbiAgICAgICAgICAgIGlmIChzdHJpY3QgJiYgIXRoaXMuX2Z1bGxXZWVrZGF5c1BhcnNlW2ldKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZnVsbFdlZWtkYXlzUGFyc2VbaV0gPSBuZXcgUmVnRXhwKCdeJyArIHRoaXMud2Vla2RheXMobW9tLCAnJykucmVwbGFjZSgnLicsICdcXFxcLj8nKSArICckJywgJ2knKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2VbaV0gPSBuZXcgUmVnRXhwKCdeJyArIHRoaXMud2Vla2RheXNTaG9ydChtb20sICcnKS5yZXBsYWNlKCcuJywgJ1xcXFwuPycpICsgJyQnLCAnaScpO1xuICAgICAgICAgICAgICAgIHRoaXMuX21pbldlZWtkYXlzUGFyc2VbaV0gPSBuZXcgUmVnRXhwKCdeJyArIHRoaXMud2Vla2RheXNNaW4obW9tLCAnJykucmVwbGFjZSgnLicsICdcXFxcLj8nKSArICckJywgJ2knKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghdGhpcy5fd2Vla2RheXNQYXJzZVtpXSkge1xuICAgICAgICAgICAgICAgIHJlZ2V4ID0gJ14nICsgdGhpcy53ZWVrZGF5cyhtb20sICcnKSArICd8XicgKyB0aGlzLndlZWtkYXlzU2hvcnQobW9tLCAnJykgKyAnfF4nICsgdGhpcy53ZWVrZGF5c01pbihtb20sICcnKTtcbiAgICAgICAgICAgICAgICB0aGlzLl93ZWVrZGF5c1BhcnNlW2ldID0gbmV3IFJlZ0V4cChyZWdleC5yZXBsYWNlKCcuJywgJycpLCAnaScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gdGVzdCB0aGUgcmVnZXhcbiAgICAgICAgICAgIGlmIChzdHJpY3QgJiYgZm9ybWF0ID09PSAnZGRkZCcgJiYgdGhpcy5fZnVsbFdlZWtkYXlzUGFyc2VbaV0udGVzdCh3ZWVrZGF5TmFtZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RyaWN0ICYmIGZvcm1hdCA9PT0gJ2RkZCcgJiYgdGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlW2ldLnRlc3Qod2Vla2RheU5hbWUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHN0cmljdCAmJiBmb3JtYXQgPT09ICdkZCcgJiYgdGhpcy5fbWluV2Vla2RheXNQYXJzZVtpXS50ZXN0KHdlZWtkYXlOYW1lKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICghc3RyaWN0ICYmIHRoaXMuX3dlZWtkYXlzUGFyc2VbaV0udGVzdCh3ZWVrZGF5TmFtZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIE1PTUVOVFNcblxuICAgIGZ1bmN0aW9uIGdldFNldERheU9mV2VlayAoaW5wdXQpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIGlucHV0ICE9IG51bGwgPyB0aGlzIDogTmFOO1xuICAgICAgICB9XG4gICAgICAgIHZhciBkYXkgPSB0aGlzLl9pc1VUQyA/IHRoaXMuX2QuZ2V0VVRDRGF5KCkgOiB0aGlzLl9kLmdldERheSgpO1xuICAgICAgICBpZiAoaW5wdXQgIT0gbnVsbCkge1xuICAgICAgICAgICAgaW5wdXQgPSBwYXJzZVdlZWtkYXkoaW5wdXQsIHRoaXMubG9jYWxlRGF0YSgpKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFkZChpbnB1dCAtIGRheSwgJ2QnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBkYXk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRTZXRMb2NhbGVEYXlPZldlZWsgKGlucHV0KSB7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnB1dCAhPSBudWxsID8gdGhpcyA6IE5hTjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgd2Vla2RheSA9ICh0aGlzLmRheSgpICsgNyAtIHRoaXMubG9jYWxlRGF0YSgpLl93ZWVrLmRvdykgJSA3O1xuICAgICAgICByZXR1cm4gaW5wdXQgPT0gbnVsbCA/IHdlZWtkYXkgOiB0aGlzLmFkZChpbnB1dCAtIHdlZWtkYXksICdkJyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0U2V0SVNPRGF5T2ZXZWVrIChpbnB1dCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gaW5wdXQgIT0gbnVsbCA/IHRoaXMgOiBOYU47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBiZWhhdmVzIHRoZSBzYW1lIGFzIG1vbWVudCNkYXkgZXhjZXB0XG4gICAgICAgIC8vIGFzIGEgZ2V0dGVyLCByZXR1cm5zIDcgaW5zdGVhZCBvZiAwICgxLTcgcmFuZ2UgaW5zdGVhZCBvZiAwLTYpXG4gICAgICAgIC8vIGFzIGEgc2V0dGVyLCBzdW5kYXkgc2hvdWxkIGJlbG9uZyB0byB0aGUgcHJldmlvdXMgd2Vlay5cblxuICAgICAgICBpZiAoaW5wdXQgIT0gbnVsbCkge1xuICAgICAgICAgICAgdmFyIHdlZWtkYXkgPSBwYXJzZUlzb1dlZWtkYXkoaW5wdXQsIHRoaXMubG9jYWxlRGF0YSgpKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRheSh0aGlzLmRheSgpICUgNyA/IHdlZWtkYXkgOiB3ZWVrZGF5IC0gNyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kYXkoKSB8fCA3O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGRlZmF1bHRXZWVrZGF5c1JlZ2V4ID0gbWF0Y2hXb3JkO1xuICAgIGZ1bmN0aW9uIHdlZWtkYXlzUmVnZXggKGlzU3RyaWN0KSB7XG4gICAgICAgIGlmICh0aGlzLl93ZWVrZGF5c1BhcnNlRXhhY3QpIHtcbiAgICAgICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX3dlZWtkYXlzUmVnZXgnKSkge1xuICAgICAgICAgICAgICAgIGNvbXB1dGVXZWVrZGF5c1BhcnNlLmNhbGwodGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNTdHJpY3QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fd2Vla2RheXNTdHJpY3RSZWdleDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWtkYXlzUmVnZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ193ZWVrZGF5c1JlZ2V4JykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl93ZWVrZGF5c1JlZ2V4ID0gZGVmYXVsdFdlZWtkYXlzUmVnZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fd2Vla2RheXNTdHJpY3RSZWdleCAmJiBpc1N0cmljdCA/XG4gICAgICAgICAgICAgICAgdGhpcy5fd2Vla2RheXNTdHJpY3RSZWdleCA6IHRoaXMuX3dlZWtkYXlzUmVnZXg7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgZGVmYXVsdFdlZWtkYXlzU2hvcnRSZWdleCA9IG1hdGNoV29yZDtcbiAgICBmdW5jdGlvbiB3ZWVrZGF5c1Nob3J0UmVnZXggKGlzU3RyaWN0KSB7XG4gICAgICAgIGlmICh0aGlzLl93ZWVrZGF5c1BhcnNlRXhhY3QpIHtcbiAgICAgICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX3dlZWtkYXlzUmVnZXgnKSkge1xuICAgICAgICAgICAgICAgIGNvbXB1dGVXZWVrZGF5c1BhcnNlLmNhbGwodGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNTdHJpY3QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fd2Vla2RheXNTaG9ydFN0cmljdFJlZ2V4O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fd2Vla2RheXNTaG9ydFJlZ2V4O1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCFoYXNPd25Qcm9wKHRoaXMsICdfd2Vla2RheXNTaG9ydFJlZ2V4JykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl93ZWVrZGF5c1Nob3J0UmVnZXggPSBkZWZhdWx0V2Vla2RheXNTaG9ydFJlZ2V4O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWtkYXlzU2hvcnRTdHJpY3RSZWdleCAmJiBpc1N0cmljdCA/XG4gICAgICAgICAgICAgICAgdGhpcy5fd2Vla2RheXNTaG9ydFN0cmljdFJlZ2V4IDogdGhpcy5fd2Vla2RheXNTaG9ydFJlZ2V4O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGRlZmF1bHRXZWVrZGF5c01pblJlZ2V4ID0gbWF0Y2hXb3JkO1xuICAgIGZ1bmN0aW9uIHdlZWtkYXlzTWluUmVnZXggKGlzU3RyaWN0KSB7XG4gICAgICAgIGlmICh0aGlzLl93ZWVrZGF5c1BhcnNlRXhhY3QpIHtcbiAgICAgICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX3dlZWtkYXlzUmVnZXgnKSkge1xuICAgICAgICAgICAgICAgIGNvbXB1dGVXZWVrZGF5c1BhcnNlLmNhbGwodGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNTdHJpY3QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fd2Vla2RheXNNaW5TdHJpY3RSZWdleDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWtkYXlzTWluUmVnZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ193ZWVrZGF5c01pblJlZ2V4JykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl93ZWVrZGF5c01pblJlZ2V4ID0gZGVmYXVsdFdlZWtkYXlzTWluUmVnZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fd2Vla2RheXNNaW5TdHJpY3RSZWdleCAmJiBpc1N0cmljdCA/XG4gICAgICAgICAgICAgICAgdGhpcy5fd2Vla2RheXNNaW5TdHJpY3RSZWdleCA6IHRoaXMuX3dlZWtkYXlzTWluUmVnZXg7XG4gICAgICAgIH1cbiAgICB9XG5cblxuICAgIGZ1bmN0aW9uIGNvbXB1dGVXZWVrZGF5c1BhcnNlICgpIHtcbiAgICAgICAgZnVuY3Rpb24gY21wTGVuUmV2KGEsIGIpIHtcbiAgICAgICAgICAgIHJldHVybiBiLmxlbmd0aCAtIGEubGVuZ3RoO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIG1pblBpZWNlcyA9IFtdLCBzaG9ydFBpZWNlcyA9IFtdLCBsb25nUGllY2VzID0gW10sIG1peGVkUGllY2VzID0gW10sXG4gICAgICAgICAgICBpLCBtb20sIG1pbnAsIHNob3J0cCwgbG9uZ3A7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCA3OyBpKyspIHtcbiAgICAgICAgICAgIC8vIG1ha2UgdGhlIHJlZ2V4IGlmIHdlIGRvbid0IGhhdmUgaXQgYWxyZWFkeVxuICAgICAgICAgICAgbW9tID0gY3JlYXRlVVRDKFsyMDAwLCAxXSkuZGF5KGkpO1xuICAgICAgICAgICAgbWlucCA9IHRoaXMud2Vla2RheXNNaW4obW9tLCAnJyk7XG4gICAgICAgICAgICBzaG9ydHAgPSB0aGlzLndlZWtkYXlzU2hvcnQobW9tLCAnJyk7XG4gICAgICAgICAgICBsb25ncCA9IHRoaXMud2Vla2RheXMobW9tLCAnJyk7XG4gICAgICAgICAgICBtaW5QaWVjZXMucHVzaChtaW5wKTtcbiAgICAgICAgICAgIHNob3J0UGllY2VzLnB1c2goc2hvcnRwKTtcbiAgICAgICAgICAgIGxvbmdQaWVjZXMucHVzaChsb25ncCk7XG4gICAgICAgICAgICBtaXhlZFBpZWNlcy5wdXNoKG1pbnApO1xuICAgICAgICAgICAgbWl4ZWRQaWVjZXMucHVzaChzaG9ydHApO1xuICAgICAgICAgICAgbWl4ZWRQaWVjZXMucHVzaChsb25ncCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gU29ydGluZyBtYWtlcyBzdXJlIGlmIG9uZSB3ZWVrZGF5IChvciBhYmJyKSBpcyBhIHByZWZpeCBvZiBhbm90aGVyIGl0XG4gICAgICAgIC8vIHdpbGwgbWF0Y2ggdGhlIGxvbmdlciBwaWVjZS5cbiAgICAgICAgbWluUGllY2VzLnNvcnQoY21wTGVuUmV2KTtcbiAgICAgICAgc2hvcnRQaWVjZXMuc29ydChjbXBMZW5SZXYpO1xuICAgICAgICBsb25nUGllY2VzLnNvcnQoY21wTGVuUmV2KTtcbiAgICAgICAgbWl4ZWRQaWVjZXMuc29ydChjbXBMZW5SZXYpO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgNzsgaSsrKSB7XG4gICAgICAgICAgICBzaG9ydFBpZWNlc1tpXSA9IHJlZ2V4RXNjYXBlKHNob3J0UGllY2VzW2ldKTtcbiAgICAgICAgICAgIGxvbmdQaWVjZXNbaV0gPSByZWdleEVzY2FwZShsb25nUGllY2VzW2ldKTtcbiAgICAgICAgICAgIG1peGVkUGllY2VzW2ldID0gcmVnZXhFc2NhcGUobWl4ZWRQaWVjZXNbaV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fd2Vla2RheXNSZWdleCA9IG5ldyBSZWdFeHAoJ14oJyArIG1peGVkUGllY2VzLmpvaW4oJ3wnKSArICcpJywgJ2knKTtcbiAgICAgICAgdGhpcy5fd2Vla2RheXNTaG9ydFJlZ2V4ID0gdGhpcy5fd2Vla2RheXNSZWdleDtcbiAgICAgICAgdGhpcy5fd2Vla2RheXNNaW5SZWdleCA9IHRoaXMuX3dlZWtkYXlzUmVnZXg7XG5cbiAgICAgICAgdGhpcy5fd2Vla2RheXNTdHJpY3RSZWdleCA9IG5ldyBSZWdFeHAoJ14oJyArIGxvbmdQaWVjZXMuam9pbignfCcpICsgJyknLCAnaScpO1xuICAgICAgICB0aGlzLl93ZWVrZGF5c1Nob3J0U3RyaWN0UmVnZXggPSBuZXcgUmVnRXhwKCdeKCcgKyBzaG9ydFBpZWNlcy5qb2luKCd8JykgKyAnKScsICdpJyk7XG4gICAgICAgIHRoaXMuX3dlZWtkYXlzTWluU3RyaWN0UmVnZXggPSBuZXcgUmVnRXhwKCdeKCcgKyBtaW5QaWVjZXMuam9pbignfCcpICsgJyknLCAnaScpO1xuICAgIH1cblxuICAgIC8vIEZPUk1BVFRJTkdcblxuICAgIGZ1bmN0aW9uIGhGb3JtYXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmhvdXJzKCkgJSAxMiB8fCAxMjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBrRm9ybWF0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5ob3VycygpIHx8IDI0O1xuICAgIH1cblxuICAgIGFkZEZvcm1hdFRva2VuKCdIJywgWydISCcsIDJdLCAwLCAnaG91cicpO1xuICAgIGFkZEZvcm1hdFRva2VuKCdoJywgWydoaCcsIDJdLCAwLCBoRm9ybWF0KTtcbiAgICBhZGRGb3JtYXRUb2tlbignaycsIFsna2snLCAyXSwgMCwga0Zvcm1hdCk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbignaG1tJywgMCwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gJycgKyBoRm9ybWF0LmFwcGx5KHRoaXMpICsgemVyb0ZpbGwodGhpcy5taW51dGVzKCksIDIpO1xuICAgIH0pO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ2htbXNzJywgMCwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gJycgKyBoRm9ybWF0LmFwcGx5KHRoaXMpICsgemVyb0ZpbGwodGhpcy5taW51dGVzKCksIDIpICtcbiAgICAgICAgICAgIHplcm9GaWxsKHRoaXMuc2Vjb25kcygpLCAyKTtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKCdIbW0nLCAwLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiAnJyArIHRoaXMuaG91cnMoKSArIHplcm9GaWxsKHRoaXMubWludXRlcygpLCAyKTtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKCdIbW1zcycsIDAsIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuICcnICsgdGhpcy5ob3VycygpICsgemVyb0ZpbGwodGhpcy5taW51dGVzKCksIDIpICtcbiAgICAgICAgICAgIHplcm9GaWxsKHRoaXMuc2Vjb25kcygpLCAyKTtcbiAgICB9KTtcblxuICAgIGZ1bmN0aW9uIG1lcmlkaWVtICh0b2tlbiwgbG93ZXJjYXNlKSB7XG4gICAgICAgIGFkZEZvcm1hdFRva2VuKHRva2VuLCAwLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkubWVyaWRpZW0odGhpcy5ob3VycygpLCB0aGlzLm1pbnV0ZXMoKSwgbG93ZXJjYXNlKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbWVyaWRpZW0oJ2EnLCB0cnVlKTtcbiAgICBtZXJpZGllbSgnQScsIGZhbHNlKTtcblxuICAgIC8vIEFMSUFTRVNcblxuICAgIGFkZFVuaXRBbGlhcygnaG91cicsICdoJyk7XG5cbiAgICAvLyBQUklPUklUWVxuICAgIGFkZFVuaXRQcmlvcml0eSgnaG91cicsIDEzKTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGZ1bmN0aW9uIG1hdGNoTWVyaWRpZW0gKGlzU3RyaWN0LCBsb2NhbGUpIHtcbiAgICAgICAgcmV0dXJuIGxvY2FsZS5fbWVyaWRpZW1QYXJzZTtcbiAgICB9XG5cbiAgICBhZGRSZWdleFRva2VuKCdhJywgIG1hdGNoTWVyaWRpZW0pO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0EnLCAgbWF0Y2hNZXJpZGllbSk7XG4gICAgYWRkUmVnZXhUb2tlbignSCcsICBtYXRjaDF0bzIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2gnLCAgbWF0Y2gxdG8yKTtcbiAgICBhZGRSZWdleFRva2VuKCdrJywgIG1hdGNoMXRvMik7XG4gICAgYWRkUmVnZXhUb2tlbignSEgnLCBtYXRjaDF0bzIsIG1hdGNoMik7XG4gICAgYWRkUmVnZXhUb2tlbignaGgnLCBtYXRjaDF0bzIsIG1hdGNoMik7XG4gICAgYWRkUmVnZXhUb2tlbigna2snLCBtYXRjaDF0bzIsIG1hdGNoMik7XG5cbiAgICBhZGRSZWdleFRva2VuKCdobW0nLCBtYXRjaDN0bzQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2htbXNzJywgbWF0Y2g1dG82KTtcbiAgICBhZGRSZWdleFRva2VuKCdIbW0nLCBtYXRjaDN0bzQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0htbXNzJywgbWF0Y2g1dG82KTtcblxuICAgIGFkZFBhcnNlVG9rZW4oWydIJywgJ0hIJ10sIEhPVVIpO1xuICAgIGFkZFBhcnNlVG9rZW4oWydrJywgJ2trJ10sIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZykge1xuICAgICAgICB2YXIga0lucHV0ID0gdG9JbnQoaW5wdXQpO1xuICAgICAgICBhcnJheVtIT1VSXSA9IGtJbnB1dCA9PT0gMjQgPyAwIDoga0lucHV0O1xuICAgIH0pO1xuICAgIGFkZFBhcnNlVG9rZW4oWydhJywgJ0EnXSwgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnKSB7XG4gICAgICAgIGNvbmZpZy5faXNQbSA9IGNvbmZpZy5fbG9jYWxlLmlzUE0oaW5wdXQpO1xuICAgICAgICBjb25maWcuX21lcmlkaWVtID0gaW5wdXQ7XG4gICAgfSk7XG4gICAgYWRkUGFyc2VUb2tlbihbJ2gnLCAnaGgnXSwgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnKSB7XG4gICAgICAgIGFycmF5W0hPVVJdID0gdG9JbnQoaW5wdXQpO1xuICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5iaWdIb3VyID0gdHJ1ZTtcbiAgICB9KTtcbiAgICBhZGRQYXJzZVRva2VuKCdobW0nLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcpIHtcbiAgICAgICAgdmFyIHBvcyA9IGlucHV0Lmxlbmd0aCAtIDI7XG4gICAgICAgIGFycmF5W0hPVVJdID0gdG9JbnQoaW5wdXQuc3Vic3RyKDAsIHBvcykpO1xuICAgICAgICBhcnJheVtNSU5VVEVdID0gdG9JbnQoaW5wdXQuc3Vic3RyKHBvcykpO1xuICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5iaWdIb3VyID0gdHJ1ZTtcbiAgICB9KTtcbiAgICBhZGRQYXJzZVRva2VuKCdobW1zcycsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZykge1xuICAgICAgICB2YXIgcG9zMSA9IGlucHV0Lmxlbmd0aCAtIDQ7XG4gICAgICAgIHZhciBwb3MyID0gaW5wdXQubGVuZ3RoIC0gMjtcbiAgICAgICAgYXJyYXlbSE9VUl0gPSB0b0ludChpbnB1dC5zdWJzdHIoMCwgcG9zMSkpO1xuICAgICAgICBhcnJheVtNSU5VVEVdID0gdG9JbnQoaW5wdXQuc3Vic3RyKHBvczEsIDIpKTtcbiAgICAgICAgYXJyYXlbU0VDT05EXSA9IHRvSW50KGlucHV0LnN1YnN0cihwb3MyKSk7XG4gICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLmJpZ0hvdXIgPSB0cnVlO1xuICAgIH0pO1xuICAgIGFkZFBhcnNlVG9rZW4oJ0htbScsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZykge1xuICAgICAgICB2YXIgcG9zID0gaW5wdXQubGVuZ3RoIC0gMjtcbiAgICAgICAgYXJyYXlbSE9VUl0gPSB0b0ludChpbnB1dC5zdWJzdHIoMCwgcG9zKSk7XG4gICAgICAgIGFycmF5W01JTlVURV0gPSB0b0ludChpbnB1dC5zdWJzdHIocG9zKSk7XG4gICAgfSk7XG4gICAgYWRkUGFyc2VUb2tlbignSG1tc3MnLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcpIHtcbiAgICAgICAgdmFyIHBvczEgPSBpbnB1dC5sZW5ndGggLSA0O1xuICAgICAgICB2YXIgcG9zMiA9IGlucHV0Lmxlbmd0aCAtIDI7XG4gICAgICAgIGFycmF5W0hPVVJdID0gdG9JbnQoaW5wdXQuc3Vic3RyKDAsIHBvczEpKTtcbiAgICAgICAgYXJyYXlbTUlOVVRFXSA9IHRvSW50KGlucHV0LnN1YnN0cihwb3MxLCAyKSk7XG4gICAgICAgIGFycmF5W1NFQ09ORF0gPSB0b0ludChpbnB1dC5zdWJzdHIocG9zMikpO1xuICAgIH0pO1xuXG4gICAgLy8gTE9DQUxFU1xuXG4gICAgZnVuY3Rpb24gbG9jYWxlSXNQTSAoaW5wdXQpIHtcbiAgICAgICAgLy8gSUU4IFF1aXJrcyBNb2RlICYgSUU3IFN0YW5kYXJkcyBNb2RlIGRvIG5vdCBhbGxvdyBhY2Nlc3Npbmcgc3RyaW5ncyBsaWtlIGFycmF5c1xuICAgICAgICAvLyBVc2luZyBjaGFyQXQgc2hvdWxkIGJlIG1vcmUgY29tcGF0aWJsZS5cbiAgICAgICAgcmV0dXJuICgoaW5wdXQgKyAnJykudG9Mb3dlckNhc2UoKS5jaGFyQXQoMCkgPT09ICdwJyk7XG4gICAgfVxuXG4gICAgdmFyIGRlZmF1bHRMb2NhbGVNZXJpZGllbVBhcnNlID0gL1thcF1cXC4/bT9cXC4/L2k7XG4gICAgZnVuY3Rpb24gbG9jYWxlTWVyaWRpZW0gKGhvdXJzLCBtaW51dGVzLCBpc0xvd2VyKSB7XG4gICAgICAgIGlmIChob3VycyA+IDExKSB7XG4gICAgICAgICAgICByZXR1cm4gaXNMb3dlciA/ICdwbScgOiAnUE0nO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGlzTG93ZXIgPyAnYW0nIDogJ0FNJztcbiAgICAgICAgfVxuICAgIH1cblxuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgLy8gU2V0dGluZyB0aGUgaG91ciBzaG91bGQga2VlcCB0aGUgdGltZSwgYmVjYXVzZSB0aGUgdXNlciBleHBsaWNpdGx5XG4gICAgLy8gc3BlY2lmaWVkIHdoaWNoIGhvdXIgdGhleSB3YW50LiBTbyB0cnlpbmcgdG8gbWFpbnRhaW4gdGhlIHNhbWUgaG91ciAoaW5cbiAgICAvLyBhIG5ldyB0aW1lem9uZSkgbWFrZXMgc2Vuc2UuIEFkZGluZy9zdWJ0cmFjdGluZyBob3VycyBkb2VzIG5vdCBmb2xsb3dcbiAgICAvLyB0aGlzIHJ1bGUuXG4gICAgdmFyIGdldFNldEhvdXIgPSBtYWtlR2V0U2V0KCdIb3VycycsIHRydWUpO1xuXG4gICAgdmFyIGJhc2VDb25maWcgPSB7XG4gICAgICAgIGNhbGVuZGFyOiBkZWZhdWx0Q2FsZW5kYXIsXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiBkZWZhdWx0TG9uZ0RhdGVGb3JtYXQsXG4gICAgICAgIGludmFsaWREYXRlOiBkZWZhdWx0SW52YWxpZERhdGUsXG4gICAgICAgIG9yZGluYWw6IGRlZmF1bHRPcmRpbmFsLFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiBkZWZhdWx0RGF5T2ZNb250aE9yZGluYWxQYXJzZSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiBkZWZhdWx0UmVsYXRpdmVUaW1lLFxuXG4gICAgICAgIG1vbnRoczogZGVmYXVsdExvY2FsZU1vbnRocyxcbiAgICAgICAgbW9udGhzU2hvcnQ6IGRlZmF1bHRMb2NhbGVNb250aHNTaG9ydCxcblxuICAgICAgICB3ZWVrOiBkZWZhdWx0TG9jYWxlV2VlayxcblxuICAgICAgICB3ZWVrZGF5czogZGVmYXVsdExvY2FsZVdlZWtkYXlzLFxuICAgICAgICB3ZWVrZGF5c01pbjogZGVmYXVsdExvY2FsZVdlZWtkYXlzTWluLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiBkZWZhdWx0TG9jYWxlV2Vla2RheXNTaG9ydCxcblxuICAgICAgICBtZXJpZGllbVBhcnNlOiBkZWZhdWx0TG9jYWxlTWVyaWRpZW1QYXJzZVxuICAgIH07XG5cbiAgICAvLyBpbnRlcm5hbCBzdG9yYWdlIGZvciBsb2NhbGUgY29uZmlnIGZpbGVzXG4gICAgdmFyIGxvY2FsZXMgPSB7fTtcbiAgICB2YXIgbG9jYWxlRmFtaWxpZXMgPSB7fTtcbiAgICB2YXIgZ2xvYmFsTG9jYWxlO1xuXG4gICAgZnVuY3Rpb24gbm9ybWFsaXplTG9jYWxlKGtleSkge1xuICAgICAgICByZXR1cm4ga2V5ID8ga2V5LnRvTG93ZXJDYXNlKCkucmVwbGFjZSgnXycsICctJykgOiBrZXk7XG4gICAgfVxuXG4gICAgLy8gcGljayB0aGUgbG9jYWxlIGZyb20gdGhlIGFycmF5XG4gICAgLy8gdHJ5IFsnZW4tYXUnLCAnZW4tZ2InXSBhcyAnZW4tYXUnLCAnZW4tZ2InLCAnZW4nLCBhcyBpbiBtb3ZlIHRocm91Z2ggdGhlIGxpc3QgdHJ5aW5nIGVhY2hcbiAgICAvLyBzdWJzdHJpbmcgZnJvbSBtb3N0IHNwZWNpZmljIHRvIGxlYXN0LCBidXQgbW92ZSB0byB0aGUgbmV4dCBhcnJheSBpdGVtIGlmIGl0J3MgYSBtb3JlIHNwZWNpZmljIHZhcmlhbnQgdGhhbiB0aGUgY3VycmVudCByb290XG4gICAgZnVuY3Rpb24gY2hvb3NlTG9jYWxlKG5hbWVzKSB7XG4gICAgICAgIHZhciBpID0gMCwgaiwgbmV4dCwgbG9jYWxlLCBzcGxpdDtcblxuICAgICAgICB3aGlsZSAoaSA8IG5hbWVzLmxlbmd0aCkge1xuICAgICAgICAgICAgc3BsaXQgPSBub3JtYWxpemVMb2NhbGUobmFtZXNbaV0pLnNwbGl0KCctJyk7XG4gICAgICAgICAgICBqID0gc3BsaXQubGVuZ3RoO1xuICAgICAgICAgICAgbmV4dCA9IG5vcm1hbGl6ZUxvY2FsZShuYW1lc1tpICsgMV0pO1xuICAgICAgICAgICAgbmV4dCA9IG5leHQgPyBuZXh0LnNwbGl0KCctJykgOiBudWxsO1xuICAgICAgICAgICAgd2hpbGUgKGogPiAwKSB7XG4gICAgICAgICAgICAgICAgbG9jYWxlID0gbG9hZExvY2FsZShzcGxpdC5zbGljZSgwLCBqKS5qb2luKCctJykpO1xuICAgICAgICAgICAgICAgIGlmIChsb2NhbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxvY2FsZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKG5leHQgJiYgbmV4dC5sZW5ndGggPj0gaiAmJiBjb21wYXJlQXJyYXlzKHNwbGl0LCBuZXh0LCB0cnVlKSA+PSBqIC0gMSkge1xuICAgICAgICAgICAgICAgICAgICAvL3RoZSBuZXh0IGFycmF5IGl0ZW0gaXMgYmV0dGVyIHRoYW4gYSBzaGFsbG93ZXIgc3Vic3RyaW5nIG9mIHRoaXMgb25lXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBqLS07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpKys7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGdsb2JhbExvY2FsZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsb2FkTG9jYWxlKG5hbWUpIHtcbiAgICAgICAgdmFyIG9sZExvY2FsZSA9IG51bGw7XG4gICAgICAgIC8vIFRPRE86IEZpbmQgYSBiZXR0ZXIgd2F5IHRvIHJlZ2lzdGVyIGFuZCBsb2FkIGFsbCB0aGUgbG9jYWxlcyBpbiBOb2RlXG4gICAgICAgIGlmICghbG9jYWxlc1tuYW1lXSAmJiAodHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcpICYmXG4gICAgICAgICAgICAgICAgbW9kdWxlICYmIG1vZHVsZS5leHBvcnRzKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIG9sZExvY2FsZSA9IGdsb2JhbExvY2FsZS5fYWJicjtcbiAgICAgICAgICAgICAgICB2YXIgYWxpYXNlZFJlcXVpcmUgPSByZXF1aXJlO1xuICAgICAgICAgICAgICAgIGFsaWFzZWRSZXF1aXJlKCcuL2xvY2FsZS8nICsgbmFtZSk7XG4gICAgICAgICAgICAgICAgZ2V0U2V0R2xvYmFsTG9jYWxlKG9sZExvY2FsZSk7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7fVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBsb2NhbGVzW25hbWVdO1xuICAgIH1cblxuICAgIC8vIFRoaXMgZnVuY3Rpb24gd2lsbCBsb2FkIGxvY2FsZSBhbmQgdGhlbiBzZXQgdGhlIGdsb2JhbCBsb2NhbGUuICBJZlxuICAgIC8vIG5vIGFyZ3VtZW50cyBhcmUgcGFzc2VkIGluLCBpdCB3aWxsIHNpbXBseSByZXR1cm4gdGhlIGN1cnJlbnQgZ2xvYmFsXG4gICAgLy8gbG9jYWxlIGtleS5cbiAgICBmdW5jdGlvbiBnZXRTZXRHbG9iYWxMb2NhbGUgKGtleSwgdmFsdWVzKSB7XG4gICAgICAgIHZhciBkYXRhO1xuICAgICAgICBpZiAoa2V5KSB7XG4gICAgICAgICAgICBpZiAoaXNVbmRlZmluZWQodmFsdWVzKSkge1xuICAgICAgICAgICAgICAgIGRhdGEgPSBnZXRMb2NhbGUoa2V5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGRhdGEgPSBkZWZpbmVMb2NhbGUoa2V5LCB2YWx1ZXMpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgICAgIC8vIG1vbWVudC5kdXJhdGlvbi5fbG9jYWxlID0gbW9tZW50Ll9sb2NhbGUgPSBkYXRhO1xuICAgICAgICAgICAgICAgIGdsb2JhbExvY2FsZSA9IGRhdGE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoKHR5cGVvZiBjb25zb2xlICE9PSAgJ3VuZGVmaW5lZCcpICYmIGNvbnNvbGUud2Fybikge1xuICAgICAgICAgICAgICAgICAgICAvL3dhcm4gdXNlciBpZiBhcmd1bWVudHMgYXJlIHBhc3NlZCBidXQgdGhlIGxvY2FsZSBjb3VsZCBub3QgYmUgc2V0XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignTG9jYWxlICcgKyBrZXkgKyAgJyBub3QgZm91bmQuIERpZCB5b3UgZm9yZ2V0IHRvIGxvYWQgaXQ/Jyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGdsb2JhbExvY2FsZS5fYWJicjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBkZWZpbmVMb2NhbGUgKG5hbWUsIGNvbmZpZykge1xuICAgICAgICBpZiAoY29uZmlnICE9PSBudWxsKSB7XG4gICAgICAgICAgICB2YXIgbG9jYWxlLCBwYXJlbnRDb25maWcgPSBiYXNlQ29uZmlnO1xuICAgICAgICAgICAgY29uZmlnLmFiYnIgPSBuYW1lO1xuICAgICAgICAgICAgaWYgKGxvY2FsZXNbbmFtZV0gIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGRlcHJlY2F0ZVNpbXBsZSgnZGVmaW5lTG9jYWxlT3ZlcnJpZGUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ3VzZSBtb21lbnQudXBkYXRlTG9jYWxlKGxvY2FsZU5hbWUsIGNvbmZpZykgdG8gY2hhbmdlICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJ2FuIGV4aXN0aW5nIGxvY2FsZS4gbW9tZW50LmRlZmluZUxvY2FsZShsb2NhbGVOYW1lLCAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICdjb25maWcpIHNob3VsZCBvbmx5IGJlIHVzZWQgZm9yIGNyZWF0aW5nIGEgbmV3IGxvY2FsZSAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICdTZWUgaHR0cDovL21vbWVudGpzLmNvbS9ndWlkZXMvIy93YXJuaW5ncy9kZWZpbmUtbG9jYWxlLyBmb3IgbW9yZSBpbmZvLicpO1xuICAgICAgICAgICAgICAgIHBhcmVudENvbmZpZyA9IGxvY2FsZXNbbmFtZV0uX2NvbmZpZztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY29uZmlnLnBhcmVudExvY2FsZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgaWYgKGxvY2FsZXNbY29uZmlnLnBhcmVudExvY2FsZV0gIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBwYXJlbnRDb25maWcgPSBsb2NhbGVzW2NvbmZpZy5wYXJlbnRMb2NhbGVdLl9jb25maWc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbG9jYWxlID0gbG9hZExvY2FsZShjb25maWcucGFyZW50TG9jYWxlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGxvY2FsZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRDb25maWcgPSBsb2NhbGUuX2NvbmZpZztcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbG9jYWxlRmFtaWxpZXNbY29uZmlnLnBhcmVudExvY2FsZV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbGVGYW1pbGllc1tjb25maWcucGFyZW50TG9jYWxlXSA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxlRmFtaWxpZXNbY29uZmlnLnBhcmVudExvY2FsZV0ucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWc6IGNvbmZpZ1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxvY2FsZXNbbmFtZV0gPSBuZXcgTG9jYWxlKG1lcmdlQ29uZmlncyhwYXJlbnRDb25maWcsIGNvbmZpZykpO1xuXG4gICAgICAgICAgICBpZiAobG9jYWxlRmFtaWxpZXNbbmFtZV0pIHtcbiAgICAgICAgICAgICAgICBsb2NhbGVGYW1pbGllc1tuYW1lXS5mb3JFYWNoKGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgICAgIGRlZmluZUxvY2FsZSh4Lm5hbWUsIHguY29uZmlnKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gYmFja3dhcmRzIGNvbXBhdCBmb3Igbm93OiBhbHNvIHNldCB0aGUgbG9jYWxlXG4gICAgICAgICAgICAvLyBtYWtlIHN1cmUgd2Ugc2V0IHRoZSBsb2NhbGUgQUZURVIgYWxsIGNoaWxkIGxvY2FsZXMgaGF2ZSBiZWVuXG4gICAgICAgICAgICAvLyBjcmVhdGVkLCBzbyB3ZSB3b24ndCBlbmQgdXAgd2l0aCB0aGUgY2hpbGQgbG9jYWxlIHNldC5cbiAgICAgICAgICAgIGdldFNldEdsb2JhbExvY2FsZShuYW1lKTtcblxuXG4gICAgICAgICAgICByZXR1cm4gbG9jYWxlc1tuYW1lXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIHVzZWZ1bCBmb3IgdGVzdGluZ1xuICAgICAgICAgICAgZGVsZXRlIGxvY2FsZXNbbmFtZV07XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHVwZGF0ZUxvY2FsZShuYW1lLCBjb25maWcpIHtcbiAgICAgICAgaWYgKGNvbmZpZyAhPSBudWxsKSB7XG4gICAgICAgICAgICB2YXIgbG9jYWxlLCB0bXBMb2NhbGUsIHBhcmVudENvbmZpZyA9IGJhc2VDb25maWc7XG4gICAgICAgICAgICAvLyBNRVJHRVxuICAgICAgICAgICAgdG1wTG9jYWxlID0gbG9hZExvY2FsZShuYW1lKTtcbiAgICAgICAgICAgIGlmICh0bXBMb2NhbGUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHBhcmVudENvbmZpZyA9IHRtcExvY2FsZS5fY29uZmlnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uZmlnID0gbWVyZ2VDb25maWdzKHBhcmVudENvbmZpZywgY29uZmlnKTtcbiAgICAgICAgICAgIGxvY2FsZSA9IG5ldyBMb2NhbGUoY29uZmlnKTtcbiAgICAgICAgICAgIGxvY2FsZS5wYXJlbnRMb2NhbGUgPSBsb2NhbGVzW25hbWVdO1xuICAgICAgICAgICAgbG9jYWxlc1tuYW1lXSA9IGxvY2FsZTtcblxuICAgICAgICAgICAgLy8gYmFja3dhcmRzIGNvbXBhdCBmb3Igbm93OiBhbHNvIHNldCB0aGUgbG9jYWxlXG4gICAgICAgICAgICBnZXRTZXRHbG9iYWxMb2NhbGUobmFtZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBwYXNzIG51bGwgZm9yIGNvbmZpZyB0byB1bnVwZGF0ZSwgdXNlZnVsIGZvciB0ZXN0c1xuICAgICAgICAgICAgaWYgKGxvY2FsZXNbbmFtZV0gIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGlmIChsb2NhbGVzW25hbWVdLnBhcmVudExvY2FsZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGxvY2FsZXNbbmFtZV0gPSBsb2NhbGVzW25hbWVdLnBhcmVudExvY2FsZTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGxvY2FsZXNbbmFtZV0gIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgbG9jYWxlc1tuYW1lXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGxvY2FsZXNbbmFtZV07XG4gICAgfVxuXG4gICAgLy8gcmV0dXJucyBsb2NhbGUgZGF0YVxuICAgIGZ1bmN0aW9uIGdldExvY2FsZSAoa2V5KSB7XG4gICAgICAgIHZhciBsb2NhbGU7XG5cbiAgICAgICAgaWYgKGtleSAmJiBrZXkuX2xvY2FsZSAmJiBrZXkuX2xvY2FsZS5fYWJicikge1xuICAgICAgICAgICAga2V5ID0ga2V5Ll9sb2NhbGUuX2FiYnI7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWtleSkge1xuICAgICAgICAgICAgcmV0dXJuIGdsb2JhbExvY2FsZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghaXNBcnJheShrZXkpKSB7XG4gICAgICAgICAgICAvL3Nob3J0LWNpcmN1aXQgZXZlcnl0aGluZyBlbHNlXG4gICAgICAgICAgICBsb2NhbGUgPSBsb2FkTG9jYWxlKGtleSk7XG4gICAgICAgICAgICBpZiAobG9jYWxlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGxvY2FsZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGtleSA9IFtrZXldO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNob29zZUxvY2FsZShrZXkpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpc3RMb2NhbGVzKCkge1xuICAgICAgICByZXR1cm4ga2V5cyhsb2NhbGVzKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjaGVja092ZXJmbG93IChtKSB7XG4gICAgICAgIHZhciBvdmVyZmxvdztcbiAgICAgICAgdmFyIGEgPSBtLl9hO1xuXG4gICAgICAgIGlmIChhICYmIGdldFBhcnNpbmdGbGFncyhtKS5vdmVyZmxvdyA9PT0gLTIpIHtcbiAgICAgICAgICAgIG92ZXJmbG93ID1cbiAgICAgICAgICAgICAgICBhW01PTlRIXSAgICAgICA8IDAgfHwgYVtNT05USF0gICAgICAgPiAxMSAgPyBNT05USCA6XG4gICAgICAgICAgICAgICAgYVtEQVRFXSAgICAgICAgPCAxIHx8IGFbREFURV0gICAgICAgID4gZGF5c0luTW9udGgoYVtZRUFSXSwgYVtNT05USF0pID8gREFURSA6XG4gICAgICAgICAgICAgICAgYVtIT1VSXSAgICAgICAgPCAwIHx8IGFbSE9VUl0gICAgICAgID4gMjQgfHwgKGFbSE9VUl0gPT09IDI0ICYmIChhW01JTlVURV0gIT09IDAgfHwgYVtTRUNPTkRdICE9PSAwIHx8IGFbTUlMTElTRUNPTkRdICE9PSAwKSkgPyBIT1VSIDpcbiAgICAgICAgICAgICAgICBhW01JTlVURV0gICAgICA8IDAgfHwgYVtNSU5VVEVdICAgICAgPiA1OSAgPyBNSU5VVEUgOlxuICAgICAgICAgICAgICAgIGFbU0VDT05EXSAgICAgIDwgMCB8fCBhW1NFQ09ORF0gICAgICA+IDU5ICA/IFNFQ09ORCA6XG4gICAgICAgICAgICAgICAgYVtNSUxMSVNFQ09ORF0gPCAwIHx8IGFbTUlMTElTRUNPTkRdID4gOTk5ID8gTUlMTElTRUNPTkQgOlxuICAgICAgICAgICAgICAgIC0xO1xuXG4gICAgICAgICAgICBpZiAoZ2V0UGFyc2luZ0ZsYWdzKG0pLl9vdmVyZmxvd0RheU9mWWVhciAmJiAob3ZlcmZsb3cgPCBZRUFSIHx8IG92ZXJmbG93ID4gREFURSkpIHtcbiAgICAgICAgICAgICAgICBvdmVyZmxvdyA9IERBVEU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZ2V0UGFyc2luZ0ZsYWdzKG0pLl9vdmVyZmxvd1dlZWtzICYmIG92ZXJmbG93ID09PSAtMSkge1xuICAgICAgICAgICAgICAgIG92ZXJmbG93ID0gV0VFSztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChnZXRQYXJzaW5nRmxhZ3MobSkuX292ZXJmbG93V2Vla2RheSAmJiBvdmVyZmxvdyA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICBvdmVyZmxvdyA9IFdFRUtEQVk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhtKS5vdmVyZmxvdyA9IG92ZXJmbG93O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgLy8gUGljayB0aGUgZmlyc3QgZGVmaW5lZCBvZiB0d28gb3IgdGhyZWUgYXJndW1lbnRzLlxuICAgIGZ1bmN0aW9uIGRlZmF1bHRzKGEsIGIsIGMpIHtcbiAgICAgICAgaWYgKGEgIT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIGE7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGIgIT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIGI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3VycmVudERhdGVBcnJheShjb25maWcpIHtcbiAgICAgICAgLy8gaG9va3MgaXMgYWN0dWFsbHkgdGhlIGV4cG9ydGVkIG1vbWVudCBvYmplY3RcbiAgICAgICAgdmFyIG5vd1ZhbHVlID0gbmV3IERhdGUoaG9va3Mubm93KCkpO1xuICAgICAgICBpZiAoY29uZmlnLl91c2VVVEMpIHtcbiAgICAgICAgICAgIHJldHVybiBbbm93VmFsdWUuZ2V0VVRDRnVsbFllYXIoKSwgbm93VmFsdWUuZ2V0VVRDTW9udGgoKSwgbm93VmFsdWUuZ2V0VVRDRGF0ZSgpXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW25vd1ZhbHVlLmdldEZ1bGxZZWFyKCksIG5vd1ZhbHVlLmdldE1vbnRoKCksIG5vd1ZhbHVlLmdldERhdGUoKV07XG4gICAgfVxuXG4gICAgLy8gY29udmVydCBhbiBhcnJheSB0byBhIGRhdGUuXG4gICAgLy8gdGhlIGFycmF5IHNob3VsZCBtaXJyb3IgdGhlIHBhcmFtZXRlcnMgYmVsb3dcbiAgICAvLyBub3RlOiBhbGwgdmFsdWVzIHBhc3QgdGhlIHllYXIgYXJlIG9wdGlvbmFsIGFuZCB3aWxsIGRlZmF1bHQgdG8gdGhlIGxvd2VzdCBwb3NzaWJsZSB2YWx1ZS5cbiAgICAvLyBbeWVhciwgbW9udGgsIGRheSAsIGhvdXIsIG1pbnV0ZSwgc2Vjb25kLCBtaWxsaXNlY29uZF1cbiAgICBmdW5jdGlvbiBjb25maWdGcm9tQXJyYXkgKGNvbmZpZykge1xuICAgICAgICB2YXIgaSwgZGF0ZSwgaW5wdXQgPSBbXSwgY3VycmVudERhdGUsIGV4cGVjdGVkV2Vla2RheSwgeWVhclRvVXNlO1xuXG4gICAgICAgIGlmIChjb25maWcuX2QpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGN1cnJlbnREYXRlID0gY3VycmVudERhdGVBcnJheShjb25maWcpO1xuXG4gICAgICAgIC8vY29tcHV0ZSBkYXkgb2YgdGhlIHllYXIgZnJvbSB3ZWVrcyBhbmQgd2Vla2RheXNcbiAgICAgICAgaWYgKGNvbmZpZy5fdyAmJiBjb25maWcuX2FbREFURV0gPT0gbnVsbCAmJiBjb25maWcuX2FbTU9OVEhdID09IG51bGwpIHtcbiAgICAgICAgICAgIGRheU9mWWVhckZyb21XZWVrSW5mbyhjb25maWcpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy9pZiB0aGUgZGF5IG9mIHRoZSB5ZWFyIGlzIHNldCwgZmlndXJlIG91dCB3aGF0IGl0IGlzXG4gICAgICAgIGlmIChjb25maWcuX2RheU9mWWVhciAhPSBudWxsKSB7XG4gICAgICAgICAgICB5ZWFyVG9Vc2UgPSBkZWZhdWx0cyhjb25maWcuX2FbWUVBUl0sIGN1cnJlbnREYXRlW1lFQVJdKTtcblxuICAgICAgICAgICAgaWYgKGNvbmZpZy5fZGF5T2ZZZWFyID4gZGF5c0luWWVhcih5ZWFyVG9Vc2UpIHx8IGNvbmZpZy5fZGF5T2ZZZWFyID09PSAwKSB7XG4gICAgICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuX292ZXJmbG93RGF5T2ZZZWFyID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZGF0ZSA9IGNyZWF0ZVVUQ0RhdGUoeWVhclRvVXNlLCAwLCBjb25maWcuX2RheU9mWWVhcik7XG4gICAgICAgICAgICBjb25maWcuX2FbTU9OVEhdID0gZGF0ZS5nZXRVVENNb250aCgpO1xuICAgICAgICAgICAgY29uZmlnLl9hW0RBVEVdID0gZGF0ZS5nZXRVVENEYXRlKCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBEZWZhdWx0IHRvIGN1cnJlbnQgZGF0ZS5cbiAgICAgICAgLy8gKiBpZiBubyB5ZWFyLCBtb250aCwgZGF5IG9mIG1vbnRoIGFyZSBnaXZlbiwgZGVmYXVsdCB0byB0b2RheVxuICAgICAgICAvLyAqIGlmIGRheSBvZiBtb250aCBpcyBnaXZlbiwgZGVmYXVsdCBtb250aCBhbmQgeWVhclxuICAgICAgICAvLyAqIGlmIG1vbnRoIGlzIGdpdmVuLCBkZWZhdWx0IG9ubHkgeWVhclxuICAgICAgICAvLyAqIGlmIHllYXIgaXMgZ2l2ZW4sIGRvbid0IGRlZmF1bHQgYW55dGhpbmdcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IDMgJiYgY29uZmlnLl9hW2ldID09IG51bGw7ICsraSkge1xuICAgICAgICAgICAgY29uZmlnLl9hW2ldID0gaW5wdXRbaV0gPSBjdXJyZW50RGF0ZVtpXTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFplcm8gb3V0IHdoYXRldmVyIHdhcyBub3QgZGVmYXVsdGVkLCBpbmNsdWRpbmcgdGltZVxuICAgICAgICBmb3IgKDsgaSA8IDc7IGkrKykge1xuICAgICAgICAgICAgY29uZmlnLl9hW2ldID0gaW5wdXRbaV0gPSAoY29uZmlnLl9hW2ldID09IG51bGwpID8gKGkgPT09IDIgPyAxIDogMCkgOiBjb25maWcuX2FbaV07XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDaGVjayBmb3IgMjQ6MDA6MDAuMDAwXG4gICAgICAgIGlmIChjb25maWcuX2FbSE9VUl0gPT09IDI0ICYmXG4gICAgICAgICAgICAgICAgY29uZmlnLl9hW01JTlVURV0gPT09IDAgJiZcbiAgICAgICAgICAgICAgICBjb25maWcuX2FbU0VDT05EXSA9PT0gMCAmJlxuICAgICAgICAgICAgICAgIGNvbmZpZy5fYVtNSUxMSVNFQ09ORF0gPT09IDApIHtcbiAgICAgICAgICAgIGNvbmZpZy5fbmV4dERheSA9IHRydWU7XG4gICAgICAgICAgICBjb25maWcuX2FbSE9VUl0gPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uZmlnLl9kID0gKGNvbmZpZy5fdXNlVVRDID8gY3JlYXRlVVRDRGF0ZSA6IGNyZWF0ZURhdGUpLmFwcGx5KG51bGwsIGlucHV0KTtcbiAgICAgICAgZXhwZWN0ZWRXZWVrZGF5ID0gY29uZmlnLl91c2VVVEMgPyBjb25maWcuX2QuZ2V0VVRDRGF5KCkgOiBjb25maWcuX2QuZ2V0RGF5KCk7XG5cbiAgICAgICAgLy8gQXBwbHkgdGltZXpvbmUgb2Zmc2V0IGZyb20gaW5wdXQuIFRoZSBhY3R1YWwgdXRjT2Zmc2V0IGNhbiBiZSBjaGFuZ2VkXG4gICAgICAgIC8vIHdpdGggcGFyc2Vab25lLlxuICAgICAgICBpZiAoY29uZmlnLl90em0gIT0gbnVsbCkge1xuICAgICAgICAgICAgY29uZmlnLl9kLnNldFVUQ01pbnV0ZXMoY29uZmlnLl9kLmdldFVUQ01pbnV0ZXMoKSAtIGNvbmZpZy5fdHptKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb25maWcuX25leHREYXkpIHtcbiAgICAgICAgICAgIGNvbmZpZy5fYVtIT1VSXSA9IDI0O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gY2hlY2sgZm9yIG1pc21hdGNoaW5nIGRheSBvZiB3ZWVrXG4gICAgICAgIGlmIChjb25maWcuX3cgJiYgdHlwZW9mIGNvbmZpZy5fdy5kICE9PSAndW5kZWZpbmVkJyAmJiBjb25maWcuX3cuZCAhPT0gZXhwZWN0ZWRXZWVrZGF5KSB7XG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS53ZWVrZGF5TWlzbWF0Y2ggPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZGF5T2ZZZWFyRnJvbVdlZWtJbmZvKGNvbmZpZykge1xuICAgICAgICB2YXIgdywgd2Vla1llYXIsIHdlZWssIHdlZWtkYXksIGRvdywgZG95LCB0ZW1wLCB3ZWVrZGF5T3ZlcmZsb3c7XG5cbiAgICAgICAgdyA9IGNvbmZpZy5fdztcbiAgICAgICAgaWYgKHcuR0cgIT0gbnVsbCB8fCB3LlcgIT0gbnVsbCB8fCB3LkUgIT0gbnVsbCkge1xuICAgICAgICAgICAgZG93ID0gMTtcbiAgICAgICAgICAgIGRveSA9IDQ7XG5cbiAgICAgICAgICAgIC8vIFRPRE86IFdlIG5lZWQgdG8gdGFrZSB0aGUgY3VycmVudCBpc29XZWVrWWVhciwgYnV0IHRoYXQgZGVwZW5kcyBvblxuICAgICAgICAgICAgLy8gaG93IHdlIGludGVycHJldCBub3cgKGxvY2FsLCB1dGMsIGZpeGVkIG9mZnNldCkuIFNvIGNyZWF0ZVxuICAgICAgICAgICAgLy8gYSBub3cgdmVyc2lvbiBvZiBjdXJyZW50IGNvbmZpZyAodGFrZSBsb2NhbC91dGMvb2Zmc2V0IGZsYWdzLCBhbmRcbiAgICAgICAgICAgIC8vIGNyZWF0ZSBub3cpLlxuICAgICAgICAgICAgd2Vla1llYXIgPSBkZWZhdWx0cyh3LkdHLCBjb25maWcuX2FbWUVBUl0sIHdlZWtPZlllYXIoY3JlYXRlTG9jYWwoKSwgMSwgNCkueWVhcik7XG4gICAgICAgICAgICB3ZWVrID0gZGVmYXVsdHMody5XLCAxKTtcbiAgICAgICAgICAgIHdlZWtkYXkgPSBkZWZhdWx0cyh3LkUsIDEpO1xuICAgICAgICAgICAgaWYgKHdlZWtkYXkgPCAxIHx8IHdlZWtkYXkgPiA3KSB7XG4gICAgICAgICAgICAgICAgd2Vla2RheU92ZXJmbG93ID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRvdyA9IGNvbmZpZy5fbG9jYWxlLl93ZWVrLmRvdztcbiAgICAgICAgICAgIGRveSA9IGNvbmZpZy5fbG9jYWxlLl93ZWVrLmRveTtcblxuICAgICAgICAgICAgdmFyIGN1cldlZWsgPSB3ZWVrT2ZZZWFyKGNyZWF0ZUxvY2FsKCksIGRvdywgZG95KTtcblxuICAgICAgICAgICAgd2Vla1llYXIgPSBkZWZhdWx0cyh3LmdnLCBjb25maWcuX2FbWUVBUl0sIGN1cldlZWsueWVhcik7XG5cbiAgICAgICAgICAgIC8vIERlZmF1bHQgdG8gY3VycmVudCB3ZWVrLlxuICAgICAgICAgICAgd2VlayA9IGRlZmF1bHRzKHcudywgY3VyV2Vlay53ZWVrKTtcblxuICAgICAgICAgICAgaWYgKHcuZCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgLy8gd2Vla2RheSAtLSBsb3cgZGF5IG51bWJlcnMgYXJlIGNvbnNpZGVyZWQgbmV4dCB3ZWVrXG4gICAgICAgICAgICAgICAgd2Vla2RheSA9IHcuZDtcbiAgICAgICAgICAgICAgICBpZiAod2Vla2RheSA8IDAgfHwgd2Vla2RheSA+IDYpIHtcbiAgICAgICAgICAgICAgICAgICAgd2Vla2RheU92ZXJmbG93ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHcuZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgLy8gbG9jYWwgd2Vla2RheSAtLSBjb3VudGluZyBzdGFydHMgZnJvbSBiZWdpbm5pbmcgb2Ygd2Vla1xuICAgICAgICAgICAgICAgIHdlZWtkYXkgPSB3LmUgKyBkb3c7XG4gICAgICAgICAgICAgICAgaWYgKHcuZSA8IDAgfHwgdy5lID4gNikge1xuICAgICAgICAgICAgICAgICAgICB3ZWVrZGF5T3ZlcmZsb3cgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gZGVmYXVsdCB0byBiZWdpbm5pbmcgb2Ygd2Vla1xuICAgICAgICAgICAgICAgIHdlZWtkYXkgPSBkb3c7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHdlZWsgPCAxIHx8IHdlZWsgPiB3ZWVrc0luWWVhcih3ZWVrWWVhciwgZG93LCBkb3kpKSB7XG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5fb3ZlcmZsb3dXZWVrcyA9IHRydWU7XG4gICAgICAgIH0gZWxzZSBpZiAod2Vla2RheU92ZXJmbG93ICE9IG51bGwpIHtcbiAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLl9vdmVyZmxvd1dlZWtkYXkgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGVtcCA9IGRheU9mWWVhckZyb21XZWVrcyh3ZWVrWWVhciwgd2Vlaywgd2Vla2RheSwgZG93LCBkb3kpO1xuICAgICAgICAgICAgY29uZmlnLl9hW1lFQVJdID0gdGVtcC55ZWFyO1xuICAgICAgICAgICAgY29uZmlnLl9kYXlPZlllYXIgPSB0ZW1wLmRheU9mWWVhcjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIGlzbyA4NjAxIHJlZ2V4XG4gICAgLy8gMDAwMC0wMC0wMCAwMDAwLVcwMCBvciAwMDAwLVcwMC0wICsgVCArIDAwIG9yIDAwOjAwIG9yIDAwOjAwOjAwIG9yIDAwOjAwOjAwLjAwMCArICswMDowMCBvciArMDAwMCBvciArMDApXG4gICAgdmFyIGV4dGVuZGVkSXNvUmVnZXggPSAvXlxccyooKD86WystXVxcZHs2fXxcXGR7NH0pLSg/OlxcZFxcZC1cXGRcXGR8V1xcZFxcZC1cXGR8V1xcZFxcZHxcXGRcXGRcXGR8XFxkXFxkKSkoPzooVHwgKShcXGRcXGQoPzo6XFxkXFxkKD86OlxcZFxcZCg/OlsuLF1cXGQrKT8pPyk/KShbXFwrXFwtXVxcZFxcZCg/Ojo/XFxkXFxkKT98XFxzKlopPyk/JC87XG4gICAgdmFyIGJhc2ljSXNvUmVnZXggPSAvXlxccyooKD86WystXVxcZHs2fXxcXGR7NH0pKD86XFxkXFxkXFxkXFxkfFdcXGRcXGRcXGR8V1xcZFxcZHxcXGRcXGRcXGR8XFxkXFxkKSkoPzooVHwgKShcXGRcXGQoPzpcXGRcXGQoPzpcXGRcXGQoPzpbLixdXFxkKyk/KT8pPykoW1xcK1xcLV1cXGRcXGQoPzo6P1xcZFxcZCk/fFxccypaKT8pPyQvO1xuXG4gICAgdmFyIHR6UmVnZXggPSAvWnxbKy1dXFxkXFxkKD86Oj9cXGRcXGQpPy87XG5cbiAgICB2YXIgaXNvRGF0ZXMgPSBbXG4gICAgICAgIFsnWVlZWVlZLU1NLUREJywgL1srLV1cXGR7Nn0tXFxkXFxkLVxcZFxcZC9dLFxuICAgICAgICBbJ1lZWVktTU0tREQnLCAvXFxkezR9LVxcZFxcZC1cXGRcXGQvXSxcbiAgICAgICAgWydHR0dHLVtXXVdXLUUnLCAvXFxkezR9LVdcXGRcXGQtXFxkL10sXG4gICAgICAgIFsnR0dHRy1bV11XVycsIC9cXGR7NH0tV1xcZFxcZC8sIGZhbHNlXSxcbiAgICAgICAgWydZWVlZLURERCcsIC9cXGR7NH0tXFxkezN9L10sXG4gICAgICAgIFsnWVlZWS1NTScsIC9cXGR7NH0tXFxkXFxkLywgZmFsc2VdLFxuICAgICAgICBbJ1lZWVlZWU1NREQnLCAvWystXVxcZHsxMH0vXSxcbiAgICAgICAgWydZWVlZTU1ERCcsIC9cXGR7OH0vXSxcbiAgICAgICAgLy8gWVlZWU1NIGlzIE5PVCBhbGxvd2VkIGJ5IHRoZSBzdGFuZGFyZFxuICAgICAgICBbJ0dHR0dbV11XV0UnLCAvXFxkezR9V1xcZHszfS9dLFxuICAgICAgICBbJ0dHR0dbV11XVycsIC9cXGR7NH1XXFxkezJ9LywgZmFsc2VdLFxuICAgICAgICBbJ1lZWVlEREQnLCAvXFxkezd9L11cbiAgICBdO1xuXG4gICAgLy8gaXNvIHRpbWUgZm9ybWF0cyBhbmQgcmVnZXhlc1xuICAgIHZhciBpc29UaW1lcyA9IFtcbiAgICAgICAgWydISDptbTpzcy5TU1NTJywgL1xcZFxcZDpcXGRcXGQ6XFxkXFxkXFwuXFxkKy9dLFxuICAgICAgICBbJ0hIOm1tOnNzLFNTU1MnLCAvXFxkXFxkOlxcZFxcZDpcXGRcXGQsXFxkKy9dLFxuICAgICAgICBbJ0hIOm1tOnNzJywgL1xcZFxcZDpcXGRcXGQ6XFxkXFxkL10sXG4gICAgICAgIFsnSEg6bW0nLCAvXFxkXFxkOlxcZFxcZC9dLFxuICAgICAgICBbJ0hIbW1zcy5TU1NTJywgL1xcZFxcZFxcZFxcZFxcZFxcZFxcLlxcZCsvXSxcbiAgICAgICAgWydISG1tc3MsU1NTUycsIC9cXGRcXGRcXGRcXGRcXGRcXGQsXFxkKy9dLFxuICAgICAgICBbJ0hIbW1zcycsIC9cXGRcXGRcXGRcXGRcXGRcXGQvXSxcbiAgICAgICAgWydISG1tJywgL1xcZFxcZFxcZFxcZC9dLFxuICAgICAgICBbJ0hIJywgL1xcZFxcZC9dXG4gICAgXTtcblxuICAgIHZhciBhc3BOZXRKc29uUmVnZXggPSAvXlxcLz9EYXRlXFwoKFxcLT9cXGQrKS9pO1xuXG4gICAgLy8gZGF0ZSBmcm9tIGlzbyBmb3JtYXRcbiAgICBmdW5jdGlvbiBjb25maWdGcm9tSVNPKGNvbmZpZykge1xuICAgICAgICB2YXIgaSwgbCxcbiAgICAgICAgICAgIHN0cmluZyA9IGNvbmZpZy5faSxcbiAgICAgICAgICAgIG1hdGNoID0gZXh0ZW5kZWRJc29SZWdleC5leGVjKHN0cmluZykgfHwgYmFzaWNJc29SZWdleC5leGVjKHN0cmluZyksXG4gICAgICAgICAgICBhbGxvd1RpbWUsIGRhdGVGb3JtYXQsIHRpbWVGb3JtYXQsIHR6Rm9ybWF0O1xuXG4gICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuaXNvID0gdHJ1ZTtcblxuICAgICAgICAgICAgZm9yIChpID0gMCwgbCA9IGlzb0RhdGVzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmIChpc29EYXRlc1tpXVsxXS5leGVjKG1hdGNoWzFdKSkge1xuICAgICAgICAgICAgICAgICAgICBkYXRlRm9ybWF0ID0gaXNvRGF0ZXNbaV1bMF07XG4gICAgICAgICAgICAgICAgICAgIGFsbG93VGltZSA9IGlzb0RhdGVzW2ldWzJdICE9PSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGRhdGVGb3JtYXQgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNvbmZpZy5faXNWYWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtYXRjaFszXSkge1xuICAgICAgICAgICAgICAgIGZvciAoaSA9IDAsIGwgPSBpc29UaW1lcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzb1RpbWVzW2ldWzFdLmV4ZWMobWF0Y2hbM10pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBtYXRjaFsyXSBzaG91bGQgYmUgJ1QnIG9yIHNwYWNlXG4gICAgICAgICAgICAgICAgICAgICAgICB0aW1lRm9ybWF0ID0gKG1hdGNoWzJdIHx8ICcgJykgKyBpc29UaW1lc1tpXVswXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0aW1lRm9ybWF0ID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uZmlnLl9pc1ZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWFsbG93VGltZSAmJiB0aW1lRm9ybWF0ICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBjb25maWcuX2lzVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobWF0Y2hbNF0pIHtcbiAgICAgICAgICAgICAgICBpZiAodHpSZWdleC5leGVjKG1hdGNoWzRdKSkge1xuICAgICAgICAgICAgICAgICAgICB0ekZvcm1hdCA9ICdaJztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb25maWcuX2lzVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbmZpZy5fZiA9IGRhdGVGb3JtYXQgKyAodGltZUZvcm1hdCB8fCAnJykgKyAodHpGb3JtYXQgfHwgJycpO1xuICAgICAgICAgICAgY29uZmlnRnJvbVN0cmluZ0FuZEZvcm1hdChjb25maWcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uZmlnLl9pc1ZhbGlkID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBSRkMgMjgyMiByZWdleDogRm9yIGRldGFpbHMgc2VlIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMyODIyI3NlY3Rpb24tMy4zXG4gICAgdmFyIHJmYzI4MjIgPSAvXig/OihNb258VHVlfFdlZHxUaHV8RnJpfFNhdHxTdW4pLD9cXHMpPyhcXGR7MSwyfSlcXHMoSmFufEZlYnxNYXJ8QXByfE1heXxKdW58SnVsfEF1Z3xTZXB8T2N0fE5vdnxEZWMpXFxzKFxcZHsyLDR9KVxccyhcXGRcXGQpOihcXGRcXGQpKD86OihcXGRcXGQpKT9cXHMoPzooVVR8R01UfFtFQ01QXVtTRF1UKXwoW1p6XSl8KFsrLV1cXGR7NH0pKSQvO1xuXG4gICAgZnVuY3Rpb24gZXh0cmFjdEZyb21SRkMyODIyU3RyaW5ncyh5ZWFyU3RyLCBtb250aFN0ciwgZGF5U3RyLCBob3VyU3RyLCBtaW51dGVTdHIsIHNlY29uZFN0cikge1xuICAgICAgICB2YXIgcmVzdWx0ID0gW1xuICAgICAgICAgICAgdW50cnVuY2F0ZVllYXIoeWVhclN0ciksXG4gICAgICAgICAgICBkZWZhdWx0TG9jYWxlTW9udGhzU2hvcnQuaW5kZXhPZihtb250aFN0ciksXG4gICAgICAgICAgICBwYXJzZUludChkYXlTdHIsIDEwKSxcbiAgICAgICAgICAgIHBhcnNlSW50KGhvdXJTdHIsIDEwKSxcbiAgICAgICAgICAgIHBhcnNlSW50KG1pbnV0ZVN0ciwgMTApXG4gICAgICAgIF07XG5cbiAgICAgICAgaWYgKHNlY29uZFN0cikge1xuICAgICAgICAgICAgcmVzdWx0LnB1c2gocGFyc2VJbnQoc2Vjb25kU3RyLCAxMCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB1bnRydW5jYXRlWWVhcih5ZWFyU3RyKSB7XG4gICAgICAgIHZhciB5ZWFyID0gcGFyc2VJbnQoeWVhclN0ciwgMTApO1xuICAgICAgICBpZiAoeWVhciA8PSA0OSkge1xuICAgICAgICAgICAgcmV0dXJuIDIwMDAgKyB5ZWFyO1xuICAgICAgICB9IGVsc2UgaWYgKHllYXIgPD0gOTk5KSB7XG4gICAgICAgICAgICByZXR1cm4gMTkwMCArIHllYXI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHllYXI7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcHJlcHJvY2Vzc1JGQzI4MjIocykge1xuICAgICAgICAvLyBSZW1vdmUgY29tbWVudHMgYW5kIGZvbGRpbmcgd2hpdGVzcGFjZSBhbmQgcmVwbGFjZSBtdWx0aXBsZS1zcGFjZXMgd2l0aCBhIHNpbmdsZSBzcGFjZVxuICAgICAgICByZXR1cm4gcy5yZXBsYWNlKC9cXChbXildKlxcKXxbXFxuXFx0XS9nLCAnICcpLnJlcGxhY2UoLyhcXHNcXHMrKS9nLCAnICcpLnJlcGxhY2UoL15cXHNcXHMqLywgJycpLnJlcGxhY2UoL1xcc1xccyokLywgJycpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNoZWNrV2Vla2RheSh3ZWVrZGF5U3RyLCBwYXJzZWRJbnB1dCwgY29uZmlnKSB7XG4gICAgICAgIGlmICh3ZWVrZGF5U3RyKSB7XG4gICAgICAgICAgICAvLyBUT0RPOiBSZXBsYWNlIHRoZSB2YW5pbGxhIEpTIERhdGUgb2JqZWN0IHdpdGggYW4gaW5kZXBlbnRlbnQgZGF5LW9mLXdlZWsgY2hlY2suXG4gICAgICAgICAgICB2YXIgd2Vla2RheVByb3ZpZGVkID0gZGVmYXVsdExvY2FsZVdlZWtkYXlzU2hvcnQuaW5kZXhPZih3ZWVrZGF5U3RyKSxcbiAgICAgICAgICAgICAgICB3ZWVrZGF5QWN0dWFsID0gbmV3IERhdGUocGFyc2VkSW5wdXRbMF0sIHBhcnNlZElucHV0WzFdLCBwYXJzZWRJbnB1dFsyXSkuZ2V0RGF5KCk7XG4gICAgICAgICAgICBpZiAod2Vla2RheVByb3ZpZGVkICE9PSB3ZWVrZGF5QWN0dWFsKSB7XG4gICAgICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykud2Vla2RheU1pc21hdGNoID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBjb25maWcuX2lzVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgdmFyIG9ic09mZnNldHMgPSB7XG4gICAgICAgIFVUOiAwLFxuICAgICAgICBHTVQ6IDAsXG4gICAgICAgIEVEVDogLTQgKiA2MCxcbiAgICAgICAgRVNUOiAtNSAqIDYwLFxuICAgICAgICBDRFQ6IC01ICogNjAsXG4gICAgICAgIENTVDogLTYgKiA2MCxcbiAgICAgICAgTURUOiAtNiAqIDYwLFxuICAgICAgICBNU1Q6IC03ICogNjAsXG4gICAgICAgIFBEVDogLTcgKiA2MCxcbiAgICAgICAgUFNUOiAtOCAqIDYwXG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIGNhbGN1bGF0ZU9mZnNldChvYnNPZmZzZXQsIG1pbGl0YXJ5T2Zmc2V0LCBudW1PZmZzZXQpIHtcbiAgICAgICAgaWYgKG9ic09mZnNldCkge1xuICAgICAgICAgICAgcmV0dXJuIG9ic09mZnNldHNbb2JzT2Zmc2V0XTtcbiAgICAgICAgfSBlbHNlIGlmIChtaWxpdGFyeU9mZnNldCkge1xuICAgICAgICAgICAgLy8gdGhlIG9ubHkgYWxsb3dlZCBtaWxpdGFyeSB0eiBpcyBaXG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciBobSA9IHBhcnNlSW50KG51bU9mZnNldCwgMTApO1xuICAgICAgICAgICAgdmFyIG0gPSBobSAlIDEwMCwgaCA9IChobSAtIG0pIC8gMTAwO1xuICAgICAgICAgICAgcmV0dXJuIGggKiA2MCArIG07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBkYXRlIGFuZCB0aW1lIGZyb20gcmVmIDI4MjIgZm9ybWF0XG4gICAgZnVuY3Rpb24gY29uZmlnRnJvbVJGQzI4MjIoY29uZmlnKSB7XG4gICAgICAgIHZhciBtYXRjaCA9IHJmYzI4MjIuZXhlYyhwcmVwcm9jZXNzUkZDMjgyMihjb25maWcuX2kpKTtcbiAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgICB2YXIgcGFyc2VkQXJyYXkgPSBleHRyYWN0RnJvbVJGQzI4MjJTdHJpbmdzKG1hdGNoWzRdLCBtYXRjaFszXSwgbWF0Y2hbMl0sIG1hdGNoWzVdLCBtYXRjaFs2XSwgbWF0Y2hbN10pO1xuICAgICAgICAgICAgaWYgKCFjaGVja1dlZWtkYXkobWF0Y2hbMV0sIHBhcnNlZEFycmF5LCBjb25maWcpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25maWcuX2EgPSBwYXJzZWRBcnJheTtcbiAgICAgICAgICAgIGNvbmZpZy5fdHptID0gY2FsY3VsYXRlT2Zmc2V0KG1hdGNoWzhdLCBtYXRjaFs5XSwgbWF0Y2hbMTBdKTtcblxuICAgICAgICAgICAgY29uZmlnLl9kID0gY3JlYXRlVVRDRGF0ZS5hcHBseShudWxsLCBjb25maWcuX2EpO1xuICAgICAgICAgICAgY29uZmlnLl9kLnNldFVUQ01pbnV0ZXMoY29uZmlnLl9kLmdldFVUQ01pbnV0ZXMoKSAtIGNvbmZpZy5fdHptKTtcblxuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykucmZjMjgyMiA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25maWcuX2lzVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIGRhdGUgZnJvbSBpc28gZm9ybWF0IG9yIGZhbGxiYWNrXG4gICAgZnVuY3Rpb24gY29uZmlnRnJvbVN0cmluZyhjb25maWcpIHtcbiAgICAgICAgdmFyIG1hdGNoZWQgPSBhc3BOZXRKc29uUmVnZXguZXhlYyhjb25maWcuX2kpO1xuXG4gICAgICAgIGlmIChtYXRjaGVkICE9PSBudWxsKSB7XG4gICAgICAgICAgICBjb25maWcuX2QgPSBuZXcgRGF0ZSgrbWF0Y2hlZFsxXSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25maWdGcm9tSVNPKGNvbmZpZyk7XG4gICAgICAgIGlmIChjb25maWcuX2lzVmFsaWQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICBkZWxldGUgY29uZmlnLl9pc1ZhbGlkO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uZmlnRnJvbVJGQzI4MjIoY29uZmlnKTtcbiAgICAgICAgaWYgKGNvbmZpZy5faXNWYWxpZCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIGRlbGV0ZSBjb25maWcuX2lzVmFsaWQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBGaW5hbCBhdHRlbXB0LCB1c2UgSW5wdXQgRmFsbGJhY2tcbiAgICAgICAgaG9va3MuY3JlYXRlRnJvbUlucHV0RmFsbGJhY2soY29uZmlnKTtcbiAgICB9XG5cbiAgICBob29rcy5jcmVhdGVGcm9tSW5wdXRGYWxsYmFjayA9IGRlcHJlY2F0ZShcbiAgICAgICAgJ3ZhbHVlIHByb3ZpZGVkIGlzIG5vdCBpbiBhIHJlY29nbml6ZWQgUkZDMjgyMiBvciBJU08gZm9ybWF0LiBtb21lbnQgY29uc3RydWN0aW9uIGZhbGxzIGJhY2sgdG8ganMgRGF0ZSgpLCAnICtcbiAgICAgICAgJ3doaWNoIGlzIG5vdCByZWxpYWJsZSBhY3Jvc3MgYWxsIGJyb3dzZXJzIGFuZCB2ZXJzaW9ucy4gTm9uIFJGQzI4MjIvSVNPIGRhdGUgZm9ybWF0cyBhcmUgJyArXG4gICAgICAgICdkaXNjb3VyYWdlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIGFuIHVwY29taW5nIG1ham9yIHJlbGVhc2UuIFBsZWFzZSByZWZlciB0byAnICtcbiAgICAgICAgJ2h0dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMvd2FybmluZ3MvanMtZGF0ZS8gZm9yIG1vcmUgaW5mby4nLFxuICAgICAgICBmdW5jdGlvbiAoY29uZmlnKSB7XG4gICAgICAgICAgICBjb25maWcuX2QgPSBuZXcgRGF0ZShjb25maWcuX2kgKyAoY29uZmlnLl91c2VVVEMgPyAnIFVUQycgOiAnJykpO1xuICAgICAgICB9XG4gICAgKTtcblxuICAgIC8vIGNvbnN0YW50IHRoYXQgcmVmZXJzIHRvIHRoZSBJU08gc3RhbmRhcmRcbiAgICBob29rcy5JU09fODYwMSA9IGZ1bmN0aW9uICgpIHt9O1xuXG4gICAgLy8gY29uc3RhbnQgdGhhdCByZWZlcnMgdG8gdGhlIFJGQyAyODIyIGZvcm1cbiAgICBob29rcy5SRkNfMjgyMiA9IGZ1bmN0aW9uICgpIHt9O1xuXG4gICAgLy8gZGF0ZSBmcm9tIHN0cmluZyBhbmQgZm9ybWF0IHN0cmluZ1xuICAgIGZ1bmN0aW9uIGNvbmZpZ0Zyb21TdHJpbmdBbmRGb3JtYXQoY29uZmlnKSB7XG4gICAgICAgIC8vIFRPRE86IE1vdmUgdGhpcyB0byBhbm90aGVyIHBhcnQgb2YgdGhlIGNyZWF0aW9uIGZsb3cgdG8gcHJldmVudCBjaXJjdWxhciBkZXBzXG4gICAgICAgIGlmIChjb25maWcuX2YgPT09IGhvb2tzLklTT184NjAxKSB7XG4gICAgICAgICAgICBjb25maWdGcm9tSVNPKGNvbmZpZyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbmZpZy5fZiA9PT0gaG9va3MuUkZDXzI4MjIpIHtcbiAgICAgICAgICAgIGNvbmZpZ0Zyb21SRkMyODIyKGNvbmZpZyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uZmlnLl9hID0gW107XG4gICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLmVtcHR5ID0gdHJ1ZTtcblxuICAgICAgICAvLyBUaGlzIGFycmF5IGlzIHVzZWQgdG8gbWFrZSBhIERhdGUsIGVpdGhlciB3aXRoIGBuZXcgRGF0ZWAgb3IgYERhdGUuVVRDYFxuICAgICAgICB2YXIgc3RyaW5nID0gJycgKyBjb25maWcuX2ksXG4gICAgICAgICAgICBpLCBwYXJzZWRJbnB1dCwgdG9rZW5zLCB0b2tlbiwgc2tpcHBlZCxcbiAgICAgICAgICAgIHN0cmluZ0xlbmd0aCA9IHN0cmluZy5sZW5ndGgsXG4gICAgICAgICAgICB0b3RhbFBhcnNlZElucHV0TGVuZ3RoID0gMDtcblxuICAgICAgICB0b2tlbnMgPSBleHBhbmRGb3JtYXQoY29uZmlnLl9mLCBjb25maWcuX2xvY2FsZSkubWF0Y2goZm9ybWF0dGluZ1Rva2VucykgfHwgW107XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHRva2Vucy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdG9rZW4gPSB0b2tlbnNbaV07XG4gICAgICAgICAgICBwYXJzZWRJbnB1dCA9IChzdHJpbmcubWF0Y2goZ2V0UGFyc2VSZWdleEZvclRva2VuKHRva2VuLCBjb25maWcpKSB8fCBbXSlbMF07XG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZygndG9rZW4nLCB0b2tlbiwgJ3BhcnNlZElucHV0JywgcGFyc2VkSW5wdXQsXG4gICAgICAgICAgICAvLyAgICAgICAgICdyZWdleCcsIGdldFBhcnNlUmVnZXhGb3JUb2tlbih0b2tlbiwgY29uZmlnKSk7XG4gICAgICAgICAgICBpZiAocGFyc2VkSW5wdXQpIHtcbiAgICAgICAgICAgICAgICBza2lwcGVkID0gc3RyaW5nLnN1YnN0cigwLCBzdHJpbmcuaW5kZXhPZihwYXJzZWRJbnB1dCkpO1xuICAgICAgICAgICAgICAgIGlmIChza2lwcGVkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykudW51c2VkSW5wdXQucHVzaChza2lwcGVkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc3RyaW5nID0gc3RyaW5nLnNsaWNlKHN0cmluZy5pbmRleE9mKHBhcnNlZElucHV0KSArIHBhcnNlZElucHV0Lmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgdG90YWxQYXJzZWRJbnB1dExlbmd0aCArPSBwYXJzZWRJbnB1dC5sZW5ndGg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBkb24ndCBwYXJzZSBpZiBpdCdzIG5vdCBhIGtub3duIHRva2VuXG4gICAgICAgICAgICBpZiAoZm9ybWF0VG9rZW5GdW5jdGlvbnNbdG9rZW5dKSB7XG4gICAgICAgICAgICAgICAgaWYgKHBhcnNlZElucHV0KSB7XG4gICAgICAgICAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLmVtcHR5ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS51bnVzZWRUb2tlbnMucHVzaCh0b2tlbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGFkZFRpbWVUb0FycmF5RnJvbVRva2VuKHRva2VuLCBwYXJzZWRJbnB1dCwgY29uZmlnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNvbmZpZy5fc3RyaWN0ICYmICFwYXJzZWRJbnB1dCkge1xuICAgICAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLnVudXNlZFRva2Vucy5wdXNoKHRva2VuKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGFkZCByZW1haW5pbmcgdW5wYXJzZWQgaW5wdXQgbGVuZ3RoIHRvIHRoZSBzdHJpbmdcbiAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuY2hhcnNMZWZ0T3ZlciA9IHN0cmluZ0xlbmd0aCAtIHRvdGFsUGFyc2VkSW5wdXRMZW5ndGg7XG4gICAgICAgIGlmIChzdHJpbmcubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykudW51c2VkSW5wdXQucHVzaChzdHJpbmcpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gY2xlYXIgXzEyaCBmbGFnIGlmIGhvdXIgaXMgPD0gMTJcbiAgICAgICAgaWYgKGNvbmZpZy5fYVtIT1VSXSA8PSAxMiAmJlxuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuYmlnSG91ciA9PT0gdHJ1ZSAmJlxuICAgICAgICAgICAgY29uZmlnLl9hW0hPVVJdID4gMCkge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuYmlnSG91ciA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLnBhcnNlZERhdGVQYXJ0cyA9IGNvbmZpZy5fYS5zbGljZSgwKTtcbiAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykubWVyaWRpZW0gPSBjb25maWcuX21lcmlkaWVtO1xuICAgICAgICAvLyBoYW5kbGUgbWVyaWRpZW1cbiAgICAgICAgY29uZmlnLl9hW0hPVVJdID0gbWVyaWRpZW1GaXhXcmFwKGNvbmZpZy5fbG9jYWxlLCBjb25maWcuX2FbSE9VUl0sIGNvbmZpZy5fbWVyaWRpZW0pO1xuXG4gICAgICAgIGNvbmZpZ0Zyb21BcnJheShjb25maWcpO1xuICAgICAgICBjaGVja092ZXJmbG93KGNvbmZpZyk7XG4gICAgfVxuXG5cbiAgICBmdW5jdGlvbiBtZXJpZGllbUZpeFdyYXAgKGxvY2FsZSwgaG91ciwgbWVyaWRpZW0pIHtcbiAgICAgICAgdmFyIGlzUG07XG5cbiAgICAgICAgaWYgKG1lcmlkaWVtID09IG51bGwpIHtcbiAgICAgICAgICAgIC8vIG5vdGhpbmcgdG8gZG9cbiAgICAgICAgICAgIHJldHVybiBob3VyO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsb2NhbGUubWVyaWRpZW1Ib3VyICE9IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBsb2NhbGUubWVyaWRpZW1Ib3VyKGhvdXIsIG1lcmlkaWVtKTtcbiAgICAgICAgfSBlbHNlIGlmIChsb2NhbGUuaXNQTSAhPSBudWxsKSB7XG4gICAgICAgICAgICAvLyBGYWxsYmFja1xuICAgICAgICAgICAgaXNQbSA9IGxvY2FsZS5pc1BNKG1lcmlkaWVtKTtcbiAgICAgICAgICAgIGlmIChpc1BtICYmIGhvdXIgPCAxMikge1xuICAgICAgICAgICAgICAgIGhvdXIgKz0gMTI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWlzUG0gJiYgaG91ciA9PT0gMTIpIHtcbiAgICAgICAgICAgICAgICBob3VyID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBob3VyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gdGhpcyBpcyBub3Qgc3VwcG9zZWQgdG8gaGFwcGVuXG4gICAgICAgICAgICByZXR1cm4gaG91cjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIGRhdGUgZnJvbSBzdHJpbmcgYW5kIGFycmF5IG9mIGZvcm1hdCBzdHJpbmdzXG4gICAgZnVuY3Rpb24gY29uZmlnRnJvbVN0cmluZ0FuZEFycmF5KGNvbmZpZykge1xuICAgICAgICB2YXIgdGVtcENvbmZpZyxcbiAgICAgICAgICAgIGJlc3RNb21lbnQsXG5cbiAgICAgICAgICAgIHNjb3JlVG9CZWF0LFxuICAgICAgICAgICAgaSxcbiAgICAgICAgICAgIGN1cnJlbnRTY29yZTtcblxuICAgICAgICBpZiAoY29uZmlnLl9mLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuaW52YWxpZEZvcm1hdCA9IHRydWU7XG4gICAgICAgICAgICBjb25maWcuX2QgPSBuZXcgRGF0ZShOYU4pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGNvbmZpZy5fZi5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY3VycmVudFNjb3JlID0gMDtcbiAgICAgICAgICAgIHRlbXBDb25maWcgPSBjb3B5Q29uZmlnKHt9LCBjb25maWcpO1xuICAgICAgICAgICAgaWYgKGNvbmZpZy5fdXNlVVRDICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0ZW1wQ29uZmlnLl91c2VVVEMgPSBjb25maWcuX3VzZVVUQztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRlbXBDb25maWcuX2YgPSBjb25maWcuX2ZbaV07XG4gICAgICAgICAgICBjb25maWdGcm9tU3RyaW5nQW5kRm9ybWF0KHRlbXBDb25maWcpO1xuXG4gICAgICAgICAgICBpZiAoIWlzVmFsaWQodGVtcENvbmZpZykpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gaWYgdGhlcmUgaXMgYW55IGlucHV0IHRoYXQgd2FzIG5vdCBwYXJzZWQgYWRkIGEgcGVuYWx0eSBmb3IgdGhhdCBmb3JtYXRcbiAgICAgICAgICAgIGN1cnJlbnRTY29yZSArPSBnZXRQYXJzaW5nRmxhZ3ModGVtcENvbmZpZykuY2hhcnNMZWZ0T3ZlcjtcblxuICAgICAgICAgICAgLy9vciB0b2tlbnNcbiAgICAgICAgICAgIGN1cnJlbnRTY29yZSArPSBnZXRQYXJzaW5nRmxhZ3ModGVtcENvbmZpZykudW51c2VkVG9rZW5zLmxlbmd0aCAqIDEwO1xuXG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3ModGVtcENvbmZpZykuc2NvcmUgPSBjdXJyZW50U2NvcmU7XG5cbiAgICAgICAgICAgIGlmIChzY29yZVRvQmVhdCA9PSBudWxsIHx8IGN1cnJlbnRTY29yZSA8IHNjb3JlVG9CZWF0KSB7XG4gICAgICAgICAgICAgICAgc2NvcmVUb0JlYXQgPSBjdXJyZW50U2NvcmU7XG4gICAgICAgICAgICAgICAgYmVzdE1vbWVudCA9IHRlbXBDb25maWc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBleHRlbmQoY29uZmlnLCBiZXN0TW9tZW50IHx8IHRlbXBDb25maWcpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbmZpZ0Zyb21PYmplY3QoY29uZmlnKSB7XG4gICAgICAgIGlmIChjb25maWcuX2QpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBpID0gbm9ybWFsaXplT2JqZWN0VW5pdHMoY29uZmlnLl9pKTtcbiAgICAgICAgY29uZmlnLl9hID0gbWFwKFtpLnllYXIsIGkubW9udGgsIGkuZGF5IHx8IGkuZGF0ZSwgaS5ob3VyLCBpLm1pbnV0ZSwgaS5zZWNvbmQsIGkubWlsbGlzZWNvbmRdLCBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgICAgICByZXR1cm4gb2JqICYmIHBhcnNlSW50KG9iaiwgMTApO1xuICAgICAgICB9KTtcblxuICAgICAgICBjb25maWdGcm9tQXJyYXkoY29uZmlnKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVGcm9tQ29uZmlnIChjb25maWcpIHtcbiAgICAgICAgdmFyIHJlcyA9IG5ldyBNb21lbnQoY2hlY2tPdmVyZmxvdyhwcmVwYXJlQ29uZmlnKGNvbmZpZykpKTtcbiAgICAgICAgaWYgKHJlcy5fbmV4dERheSkge1xuICAgICAgICAgICAgLy8gQWRkaW5nIGlzIHNtYXJ0IGVub3VnaCBhcm91bmQgRFNUXG4gICAgICAgICAgICByZXMuYWRkKDEsICdkJyk7XG4gICAgICAgICAgICByZXMuX25leHREYXkgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHByZXBhcmVDb25maWcgKGNvbmZpZykge1xuICAgICAgICB2YXIgaW5wdXQgPSBjb25maWcuX2ksXG4gICAgICAgICAgICBmb3JtYXQgPSBjb25maWcuX2Y7XG5cbiAgICAgICAgY29uZmlnLl9sb2NhbGUgPSBjb25maWcuX2xvY2FsZSB8fCBnZXRMb2NhbGUoY29uZmlnLl9sKTtcblxuICAgICAgICBpZiAoaW5wdXQgPT09IG51bGwgfHwgKGZvcm1hdCA9PT0gdW5kZWZpbmVkICYmIGlucHV0ID09PSAnJykpIHtcbiAgICAgICAgICAgIHJldHVybiBjcmVhdGVJbnZhbGlkKHtudWxsSW5wdXQ6IHRydWV9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBjb25maWcuX2kgPSBpbnB1dCA9IGNvbmZpZy5fbG9jYWxlLnByZXBhcnNlKGlucHV0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc01vbWVudChpbnB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgTW9tZW50KGNoZWNrT3ZlcmZsb3coaW5wdXQpKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc0RhdGUoaW5wdXQpKSB7XG4gICAgICAgICAgICBjb25maWcuX2QgPSBpbnB1dDtcbiAgICAgICAgfSBlbHNlIGlmIChpc0FycmF5KGZvcm1hdCkpIHtcbiAgICAgICAgICAgIGNvbmZpZ0Zyb21TdHJpbmdBbmRBcnJheShjb25maWcpO1xuICAgICAgICB9IGVsc2UgaWYgKGZvcm1hdCkge1xuICAgICAgICAgICAgY29uZmlnRnJvbVN0cmluZ0FuZEZvcm1hdChjb25maWcpO1xuICAgICAgICB9ICBlbHNlIHtcbiAgICAgICAgICAgIGNvbmZpZ0Zyb21JbnB1dChjb25maWcpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFpc1ZhbGlkKGNvbmZpZykpIHtcbiAgICAgICAgICAgIGNvbmZpZy5fZCA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY29uZmlnO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbmZpZ0Zyb21JbnB1dChjb25maWcpIHtcbiAgICAgICAgdmFyIGlucHV0ID0gY29uZmlnLl9pO1xuICAgICAgICBpZiAoaXNVbmRlZmluZWQoaW5wdXQpKSB7XG4gICAgICAgICAgICBjb25maWcuX2QgPSBuZXcgRGF0ZShob29rcy5ub3coKSk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNEYXRlKGlucHV0KSkge1xuICAgICAgICAgICAgY29uZmlnLl9kID0gbmV3IERhdGUoaW5wdXQudmFsdWVPZigpKTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBjb25maWdGcm9tU3RyaW5nKGNvbmZpZyk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNBcnJheShpbnB1dCkpIHtcbiAgICAgICAgICAgIGNvbmZpZy5fYSA9IG1hcChpbnB1dC5zbGljZSgwKSwgZnVuY3Rpb24gKG9iaikge1xuICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZUludChvYmosIDEwKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uZmlnRnJvbUFycmF5KGNvbmZpZyk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNPYmplY3QoaW5wdXQpKSB7XG4gICAgICAgICAgICBjb25maWdGcm9tT2JqZWN0KGNvbmZpZyk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNOdW1iZXIoaW5wdXQpKSB7XG4gICAgICAgICAgICAvLyBmcm9tIG1pbGxpc2Vjb25kc1xuICAgICAgICAgICAgY29uZmlnLl9kID0gbmV3IERhdGUoaW5wdXQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaG9va3MuY3JlYXRlRnJvbUlucHV0RmFsbGJhY2soY29uZmlnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZUxvY2FsT3JVVEMgKGlucHV0LCBmb3JtYXQsIGxvY2FsZSwgc3RyaWN0LCBpc1VUQykge1xuICAgICAgICB2YXIgYyA9IHt9O1xuXG4gICAgICAgIGlmIChsb2NhbGUgPT09IHRydWUgfHwgbG9jYWxlID09PSBmYWxzZSkge1xuICAgICAgICAgICAgc3RyaWN0ID0gbG9jYWxlO1xuICAgICAgICAgICAgbG9jYWxlID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKChpc09iamVjdChpbnB1dCkgJiYgaXNPYmplY3RFbXB0eShpbnB1dCkpIHx8XG4gICAgICAgICAgICAgICAgKGlzQXJyYXkoaW5wdXQpICYmIGlucHV0Lmxlbmd0aCA9PT0gMCkpIHtcbiAgICAgICAgICAgIGlucHV0ID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIC8vIG9iamVjdCBjb25zdHJ1Y3Rpb24gbXVzdCBiZSBkb25lIHRoaXMgd2F5LlxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vbW9tZW50L21vbWVudC9pc3N1ZXMvMTQyM1xuICAgICAgICBjLl9pc0FNb21lbnRPYmplY3QgPSB0cnVlO1xuICAgICAgICBjLl91c2VVVEMgPSBjLl9pc1VUQyA9IGlzVVRDO1xuICAgICAgICBjLl9sID0gbG9jYWxlO1xuICAgICAgICBjLl9pID0gaW5wdXQ7XG4gICAgICAgIGMuX2YgPSBmb3JtYXQ7XG4gICAgICAgIGMuX3N0cmljdCA9IHN0cmljdDtcblxuICAgICAgICByZXR1cm4gY3JlYXRlRnJvbUNvbmZpZyhjKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVMb2NhbCAoaW5wdXQsIGZvcm1hdCwgbG9jYWxlLCBzdHJpY3QpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUxvY2FsT3JVVEMoaW5wdXQsIGZvcm1hdCwgbG9jYWxlLCBzdHJpY3QsIGZhbHNlKTtcbiAgICB9XG5cbiAgICB2YXIgcHJvdG90eXBlTWluID0gZGVwcmVjYXRlKFxuICAgICAgICAnbW9tZW50KCkubWluIGlzIGRlcHJlY2F0ZWQsIHVzZSBtb21lbnQubWF4IGluc3RlYWQuIGh0dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMvd2FybmluZ3MvbWluLW1heC8nLFxuICAgICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgb3RoZXIgPSBjcmVhdGVMb2NhbC5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNWYWxpZCgpICYmIG90aGVyLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBvdGhlciA8IHRoaXMgPyB0aGlzIDogb3RoZXI7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVJbnZhbGlkKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgdmFyIHByb3RvdHlwZU1heCA9IGRlcHJlY2F0ZShcbiAgICAgICAgJ21vbWVudCgpLm1heCBpcyBkZXByZWNhdGVkLCB1c2UgbW9tZW50Lm1pbiBpbnN0ZWFkLiBodHRwOi8vbW9tZW50anMuY29tL2d1aWRlcy8jL3dhcm5pbmdzL21pbi1tYXgvJyxcbiAgICAgICAgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIG90aGVyID0gY3JlYXRlTG9jYWwuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzVmFsaWQoKSAmJiBvdGhlci5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gb3RoZXIgPiB0aGlzID8gdGhpcyA6IG90aGVyO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlSW52YWxpZCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgKTtcblxuICAgIC8vIFBpY2sgYSBtb21lbnQgbSBmcm9tIG1vbWVudHMgc28gdGhhdCBtW2ZuXShvdGhlcikgaXMgdHJ1ZSBmb3IgYWxsXG4gICAgLy8gb3RoZXIuIFRoaXMgcmVsaWVzIG9uIHRoZSBmdW5jdGlvbiBmbiB0byBiZSB0cmFuc2l0aXZlLlxuICAgIC8vXG4gICAgLy8gbW9tZW50cyBzaG91bGQgZWl0aGVyIGJlIGFuIGFycmF5IG9mIG1vbWVudCBvYmplY3RzIG9yIGFuIGFycmF5LCB3aG9zZVxuICAgIC8vIGZpcnN0IGVsZW1lbnQgaXMgYW4gYXJyYXkgb2YgbW9tZW50IG9iamVjdHMuXG4gICAgZnVuY3Rpb24gcGlja0J5KGZuLCBtb21lbnRzKSB7XG4gICAgICAgIHZhciByZXMsIGk7XG4gICAgICAgIGlmIChtb21lbnRzLmxlbmd0aCA9PT0gMSAmJiBpc0FycmF5KG1vbWVudHNbMF0pKSB7XG4gICAgICAgICAgICBtb21lbnRzID0gbW9tZW50c1swXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIW1vbWVudHMubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gY3JlYXRlTG9jYWwoKTtcbiAgICAgICAgfVxuICAgICAgICByZXMgPSBtb21lbnRzWzBdO1xuICAgICAgICBmb3IgKGkgPSAxOyBpIDwgbW9tZW50cy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgaWYgKCFtb21lbnRzW2ldLmlzVmFsaWQoKSB8fCBtb21lbnRzW2ldW2ZuXShyZXMpKSB7XG4gICAgICAgICAgICAgICAgcmVzID0gbW9tZW50c1tpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIC8vIFRPRE86IFVzZSBbXS5zb3J0IGluc3RlYWQ/XG4gICAgZnVuY3Rpb24gbWluICgpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMCk7XG5cbiAgICAgICAgcmV0dXJuIHBpY2tCeSgnaXNCZWZvcmUnLCBhcmdzKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYXggKCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAwKTtcblxuICAgICAgICByZXR1cm4gcGlja0J5KCdpc0FmdGVyJywgYXJncyk7XG4gICAgfVxuXG4gICAgdmFyIG5vdyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIERhdGUubm93ID8gRGF0ZS5ub3coKSA6ICsobmV3IERhdGUoKSk7XG4gICAgfTtcblxuICAgIHZhciBvcmRlcmluZyA9IFsneWVhcicsICdxdWFydGVyJywgJ21vbnRoJywgJ3dlZWsnLCAnZGF5JywgJ2hvdXInLCAnbWludXRlJywgJ3NlY29uZCcsICdtaWxsaXNlY29uZCddO1xuXG4gICAgZnVuY3Rpb24gaXNEdXJhdGlvblZhbGlkKG0pIHtcbiAgICAgICAgZm9yICh2YXIga2V5IGluIG0pIHtcbiAgICAgICAgICAgIGlmICghKGluZGV4T2YuY2FsbChvcmRlcmluZywga2V5KSAhPT0gLTEgJiYgKG1ba2V5XSA9PSBudWxsIHx8ICFpc05hTihtW2tleV0pKSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgdW5pdEhhc0RlY2ltYWwgPSBmYWxzZTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvcmRlcmluZy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgaWYgKG1bb3JkZXJpbmdbaV1dKSB7XG4gICAgICAgICAgICAgICAgaWYgKHVuaXRIYXNEZWNpbWFsKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gb25seSBhbGxvdyBub24taW50ZWdlcnMgZm9yIHNtYWxsZXN0IHVuaXRcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHBhcnNlRmxvYXQobVtvcmRlcmluZ1tpXV0pICE9PSB0b0ludChtW29yZGVyaW5nW2ldXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdW5pdEhhc0RlY2ltYWwgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzVmFsaWQkMSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzVmFsaWQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlSW52YWxpZCQxKCkge1xuICAgICAgICByZXR1cm4gY3JlYXRlRHVyYXRpb24oTmFOKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBEdXJhdGlvbiAoZHVyYXRpb24pIHtcbiAgICAgICAgdmFyIG5vcm1hbGl6ZWRJbnB1dCA9IG5vcm1hbGl6ZU9iamVjdFVuaXRzKGR1cmF0aW9uKSxcbiAgICAgICAgICAgIHllYXJzID0gbm9ybWFsaXplZElucHV0LnllYXIgfHwgMCxcbiAgICAgICAgICAgIHF1YXJ0ZXJzID0gbm9ybWFsaXplZElucHV0LnF1YXJ0ZXIgfHwgMCxcbiAgICAgICAgICAgIG1vbnRocyA9IG5vcm1hbGl6ZWRJbnB1dC5tb250aCB8fCAwLFxuICAgICAgICAgICAgd2Vla3MgPSBub3JtYWxpemVkSW5wdXQud2VlayB8fCBub3JtYWxpemVkSW5wdXQuaXNvV2VlayB8fCAwLFxuICAgICAgICAgICAgZGF5cyA9IG5vcm1hbGl6ZWRJbnB1dC5kYXkgfHwgMCxcbiAgICAgICAgICAgIGhvdXJzID0gbm9ybWFsaXplZElucHV0LmhvdXIgfHwgMCxcbiAgICAgICAgICAgIG1pbnV0ZXMgPSBub3JtYWxpemVkSW5wdXQubWludXRlIHx8IDAsXG4gICAgICAgICAgICBzZWNvbmRzID0gbm9ybWFsaXplZElucHV0LnNlY29uZCB8fCAwLFxuICAgICAgICAgICAgbWlsbGlzZWNvbmRzID0gbm9ybWFsaXplZElucHV0Lm1pbGxpc2Vjb25kIHx8IDA7XG5cbiAgICAgICAgdGhpcy5faXNWYWxpZCA9IGlzRHVyYXRpb25WYWxpZChub3JtYWxpemVkSW5wdXQpO1xuXG4gICAgICAgIC8vIHJlcHJlc2VudGF0aW9uIGZvciBkYXRlQWRkUmVtb3ZlXG4gICAgICAgIHRoaXMuX21pbGxpc2Vjb25kcyA9ICttaWxsaXNlY29uZHMgK1xuICAgICAgICAgICAgc2Vjb25kcyAqIDFlMyArIC8vIDEwMDBcbiAgICAgICAgICAgIG1pbnV0ZXMgKiA2ZTQgKyAvLyAxMDAwICogNjBcbiAgICAgICAgICAgIGhvdXJzICogMTAwMCAqIDYwICogNjA7IC8vdXNpbmcgMTAwMCAqIDYwICogNjAgaW5zdGVhZCBvZiAzNmU1IHRvIGF2b2lkIGZsb2F0aW5nIHBvaW50IHJvdW5kaW5nIGVycm9ycyBodHRwczovL2dpdGh1Yi5jb20vbW9tZW50L21vbWVudC9pc3N1ZXMvMjk3OFxuICAgICAgICAvLyBCZWNhdXNlIG9mIGRhdGVBZGRSZW1vdmUgdHJlYXRzIDI0IGhvdXJzIGFzIGRpZmZlcmVudCBmcm9tIGFcbiAgICAgICAgLy8gZGF5IHdoZW4gd29ya2luZyBhcm91bmQgRFNULCB3ZSBuZWVkIHRvIHN0b3JlIHRoZW0gc2VwYXJhdGVseVxuICAgICAgICB0aGlzLl9kYXlzID0gK2RheXMgK1xuICAgICAgICAgICAgd2Vla3MgKiA3O1xuICAgICAgICAvLyBJdCBpcyBpbXBvc3NpYmxlIHRvIHRyYW5zbGF0ZSBtb250aHMgaW50byBkYXlzIHdpdGhvdXQga25vd2luZ1xuICAgICAgICAvLyB3aGljaCBtb250aHMgeW91IGFyZSBhcmUgdGFsa2luZyBhYm91dCwgc28gd2UgaGF2ZSB0byBzdG9yZVxuICAgICAgICAvLyBpdCBzZXBhcmF0ZWx5LlxuICAgICAgICB0aGlzLl9tb250aHMgPSArbW9udGhzICtcbiAgICAgICAgICAgIHF1YXJ0ZXJzICogMyArXG4gICAgICAgICAgICB5ZWFycyAqIDEyO1xuXG4gICAgICAgIHRoaXMuX2RhdGEgPSB7fTtcblxuICAgICAgICB0aGlzLl9sb2NhbGUgPSBnZXRMb2NhbGUoKTtcblxuICAgICAgICB0aGlzLl9idWJibGUoKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0R1cmF0aW9uIChvYmopIHtcbiAgICAgICAgcmV0dXJuIG9iaiBpbnN0YW5jZW9mIER1cmF0aW9uO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFic1JvdW5kIChudW1iZXIpIHtcbiAgICAgICAgaWYgKG51bWJlciA8IDApIHtcbiAgICAgICAgICAgIHJldHVybiBNYXRoLnJvdW5kKC0xICogbnVtYmVyKSAqIC0xO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIE1hdGgucm91bmQobnVtYmVyKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIEZPUk1BVFRJTkdcblxuICAgIGZ1bmN0aW9uIG9mZnNldCAodG9rZW4sIHNlcGFyYXRvcikge1xuICAgICAgICBhZGRGb3JtYXRUb2tlbih0b2tlbiwgMCwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIG9mZnNldCA9IHRoaXMudXRjT2Zmc2V0KCk7XG4gICAgICAgICAgICB2YXIgc2lnbiA9ICcrJztcbiAgICAgICAgICAgIGlmIChvZmZzZXQgPCAwKSB7XG4gICAgICAgICAgICAgICAgb2Zmc2V0ID0gLW9mZnNldDtcbiAgICAgICAgICAgICAgICBzaWduID0gJy0nO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHNpZ24gKyB6ZXJvRmlsbCh+fihvZmZzZXQgLyA2MCksIDIpICsgc2VwYXJhdG9yICsgemVyb0ZpbGwofn4ob2Zmc2V0KSAlIDYwLCAyKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgb2Zmc2V0KCdaJywgJzonKTtcbiAgICBvZmZzZXQoJ1paJywgJycpO1xuXG4gICAgLy8gUEFSU0lOR1xuXG4gICAgYWRkUmVnZXhUb2tlbignWicsICBtYXRjaFNob3J0T2Zmc2V0KTtcbiAgICBhZGRSZWdleFRva2VuKCdaWicsIG1hdGNoU2hvcnRPZmZzZXQpO1xuICAgIGFkZFBhcnNlVG9rZW4oWydaJywgJ1paJ10sIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZykge1xuICAgICAgICBjb25maWcuX3VzZVVUQyA9IHRydWU7XG4gICAgICAgIGNvbmZpZy5fdHptID0gb2Zmc2V0RnJvbVN0cmluZyhtYXRjaFNob3J0T2Zmc2V0LCBpbnB1dCk7XG4gICAgfSk7XG5cbiAgICAvLyBIRUxQRVJTXG5cbiAgICAvLyB0aW1lem9uZSBjaHVua2VyXG4gICAgLy8gJysxMDowMCcgPiBbJzEwJywgICcwMCddXG4gICAgLy8gJy0xNTMwJyAgPiBbJy0xNScsICczMCddXG4gICAgdmFyIGNodW5rT2Zmc2V0ID0gLyhbXFwrXFwtXXxcXGRcXGQpL2dpO1xuXG4gICAgZnVuY3Rpb24gb2Zmc2V0RnJvbVN0cmluZyhtYXRjaGVyLCBzdHJpbmcpIHtcbiAgICAgICAgdmFyIG1hdGNoZXMgPSAoc3RyaW5nIHx8ICcnKS5tYXRjaChtYXRjaGVyKTtcblxuICAgICAgICBpZiAobWF0Y2hlcyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgY2h1bmsgICA9IG1hdGNoZXNbbWF0Y2hlcy5sZW5ndGggLSAxXSB8fCBbXTtcbiAgICAgICAgdmFyIHBhcnRzICAgPSAoY2h1bmsgKyAnJykubWF0Y2goY2h1bmtPZmZzZXQpIHx8IFsnLScsIDAsIDBdO1xuICAgICAgICB2YXIgbWludXRlcyA9ICsocGFydHNbMV0gKiA2MCkgKyB0b0ludChwYXJ0c1syXSk7XG5cbiAgICAgICAgcmV0dXJuIG1pbnV0ZXMgPT09IDAgP1xuICAgICAgICAgIDAgOlxuICAgICAgICAgIHBhcnRzWzBdID09PSAnKycgPyBtaW51dGVzIDogLW1pbnV0ZXM7XG4gICAgfVxuXG4gICAgLy8gUmV0dXJuIGEgbW9tZW50IGZyb20gaW5wdXQsIHRoYXQgaXMgbG9jYWwvdXRjL3pvbmUgZXF1aXZhbGVudCB0byBtb2RlbC5cbiAgICBmdW5jdGlvbiBjbG9uZVdpdGhPZmZzZXQoaW5wdXQsIG1vZGVsKSB7XG4gICAgICAgIHZhciByZXMsIGRpZmY7XG4gICAgICAgIGlmIChtb2RlbC5faXNVVEMpIHtcbiAgICAgICAgICAgIHJlcyA9IG1vZGVsLmNsb25lKCk7XG4gICAgICAgICAgICBkaWZmID0gKGlzTW9tZW50KGlucHV0KSB8fCBpc0RhdGUoaW5wdXQpID8gaW5wdXQudmFsdWVPZigpIDogY3JlYXRlTG9jYWwoaW5wdXQpLnZhbHVlT2YoKSkgLSByZXMudmFsdWVPZigpO1xuICAgICAgICAgICAgLy8gVXNlIGxvdy1sZXZlbCBhcGksIGJlY2F1c2UgdGhpcyBmbiBpcyBsb3ctbGV2ZWwgYXBpLlxuICAgICAgICAgICAgcmVzLl9kLnNldFRpbWUocmVzLl9kLnZhbHVlT2YoKSArIGRpZmYpO1xuICAgICAgICAgICAgaG9va3MudXBkYXRlT2Zmc2V0KHJlcywgZmFsc2UpO1xuICAgICAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBjcmVhdGVMb2NhbChpbnB1dCkubG9jYWwoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldERhdGVPZmZzZXQgKG0pIHtcbiAgICAgICAgLy8gT24gRmlyZWZveC4yNCBEYXRlI2dldFRpbWV6b25lT2Zmc2V0IHJldHVybnMgYSBmbG9hdGluZyBwb2ludC5cbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL21vbWVudC9tb21lbnQvcHVsbC8xODcxXG4gICAgICAgIHJldHVybiAtTWF0aC5yb3VuZChtLl9kLmdldFRpbWV6b25lT2Zmc2V0KCkgLyAxNSkgKiAxNTtcbiAgICB9XG5cbiAgICAvLyBIT09LU1xuXG4gICAgLy8gVGhpcyBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCB3aGVuZXZlciBhIG1vbWVudCBpcyBtdXRhdGVkLlxuICAgIC8vIEl0IGlzIGludGVuZGVkIHRvIGtlZXAgdGhlIG9mZnNldCBpbiBzeW5jIHdpdGggdGhlIHRpbWV6b25lLlxuICAgIGhvb2tzLnVwZGF0ZU9mZnNldCA9IGZ1bmN0aW9uICgpIHt9O1xuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgLy8ga2VlcExvY2FsVGltZSA9IHRydWUgbWVhbnMgb25seSBjaGFuZ2UgdGhlIHRpbWV6b25lLCB3aXRob3V0XG4gICAgLy8gYWZmZWN0aW5nIHRoZSBsb2NhbCBob3VyLiBTbyA1OjMxOjI2ICswMzAwIC0tW3V0Y09mZnNldCgyLCB0cnVlKV0tLT5cbiAgICAvLyA1OjMxOjI2ICswMjAwIEl0IGlzIHBvc3NpYmxlIHRoYXQgNTozMToyNiBkb2Vzbid0IGV4aXN0IHdpdGggb2Zmc2V0XG4gICAgLy8gKzAyMDAsIHNvIHdlIGFkanVzdCB0aGUgdGltZSBhcyBuZWVkZWQsIHRvIGJlIHZhbGlkLlxuICAgIC8vXG4gICAgLy8gS2VlcGluZyB0aGUgdGltZSBhY3R1YWxseSBhZGRzL3N1YnRyYWN0cyAob25lIGhvdXIpXG4gICAgLy8gZnJvbSB0aGUgYWN0dWFsIHJlcHJlc2VudGVkIHRpbWUuIFRoYXQgaXMgd2h5IHdlIGNhbGwgdXBkYXRlT2Zmc2V0XG4gICAgLy8gYSBzZWNvbmQgdGltZS4gSW4gY2FzZSBpdCB3YW50cyB1cyB0byBjaGFuZ2UgdGhlIG9mZnNldCBhZ2FpblxuICAgIC8vIF9jaGFuZ2VJblByb2dyZXNzID09IHRydWUgY2FzZSwgdGhlbiB3ZSBoYXZlIHRvIGFkanVzdCwgYmVjYXVzZVxuICAgIC8vIHRoZXJlIGlzIG5vIHN1Y2ggdGltZSBpbiB0aGUgZ2l2ZW4gdGltZXpvbmUuXG4gICAgZnVuY3Rpb24gZ2V0U2V0T2Zmc2V0IChpbnB1dCwga2VlcExvY2FsVGltZSwga2VlcE1pbnV0ZXMpIHtcbiAgICAgICAgdmFyIG9mZnNldCA9IHRoaXMuX29mZnNldCB8fCAwLFxuICAgICAgICAgICAgbG9jYWxBZGp1c3Q7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnB1dCAhPSBudWxsID8gdGhpcyA6IE5hTjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaW5wdXQgIT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICBpbnB1dCA9IG9mZnNldEZyb21TdHJpbmcobWF0Y2hTaG9ydE9mZnNldCwgaW5wdXQpO1xuICAgICAgICAgICAgICAgIGlmIChpbnB1dCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKE1hdGguYWJzKGlucHV0KSA8IDE2ICYmICFrZWVwTWludXRlcykge1xuICAgICAgICAgICAgICAgIGlucHV0ID0gaW5wdXQgKiA2MDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghdGhpcy5faXNVVEMgJiYga2VlcExvY2FsVGltZSkge1xuICAgICAgICAgICAgICAgIGxvY2FsQWRqdXN0ID0gZ2V0RGF0ZU9mZnNldCh0aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX29mZnNldCA9IGlucHV0O1xuICAgICAgICAgICAgdGhpcy5faXNVVEMgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKGxvY2FsQWRqdXN0ICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZChsb2NhbEFkanVzdCwgJ20nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvZmZzZXQgIT09IGlucHV0KSB7XG4gICAgICAgICAgICAgICAgaWYgKCFrZWVwTG9jYWxUaW1lIHx8IHRoaXMuX2NoYW5nZUluUHJvZ3Jlc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgYWRkU3VidHJhY3QodGhpcywgY3JlYXRlRHVyYXRpb24oaW5wdXQgLSBvZmZzZXQsICdtJyksIDEsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLl9jaGFuZ2VJblByb2dyZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5nZUluUHJvZ3Jlc3MgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBob29rcy51cGRhdGVPZmZzZXQodGhpcywgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5nZUluUHJvZ3Jlc3MgPSBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2lzVVRDID8gb2Zmc2V0IDogZ2V0RGF0ZU9mZnNldCh0aGlzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFNldFpvbmUgKGlucHV0LCBrZWVwTG9jYWxUaW1lKSB7XG4gICAgICAgIGlmIChpbnB1dCAhPSBudWxsKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGlucHV0ICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIGlucHV0ID0gLWlucHV0O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnV0Y09mZnNldChpbnB1dCwga2VlcExvY2FsVGltZSk7XG5cbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIC10aGlzLnV0Y09mZnNldCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2V0T2Zmc2V0VG9VVEMgKGtlZXBMb2NhbFRpbWUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudXRjT2Zmc2V0KDAsIGtlZXBMb2NhbFRpbWUpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNldE9mZnNldFRvTG9jYWwgKGtlZXBMb2NhbFRpbWUpIHtcbiAgICAgICAgaWYgKHRoaXMuX2lzVVRDKSB7XG4gICAgICAgICAgICB0aGlzLnV0Y09mZnNldCgwLCBrZWVwTG9jYWxUaW1lKTtcbiAgICAgICAgICAgIHRoaXMuX2lzVVRDID0gZmFsc2U7XG5cbiAgICAgICAgICAgIGlmIChrZWVwTG9jYWxUaW1lKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdWJ0cmFjdChnZXREYXRlT2Zmc2V0KHRoaXMpLCAnbScpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNldE9mZnNldFRvUGFyc2VkT2Zmc2V0ICgpIHtcbiAgICAgICAgaWYgKHRoaXMuX3R6bSAhPSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLnV0Y09mZnNldCh0aGlzLl90em0sIGZhbHNlLCB0cnVlKTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdGhpcy5faSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHZhciB0Wm9uZSA9IG9mZnNldEZyb21TdHJpbmcobWF0Y2hPZmZzZXQsIHRoaXMuX2kpO1xuICAgICAgICAgICAgaWYgKHRab25lICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnV0Y09mZnNldCh0Wm9uZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnV0Y09mZnNldCgwLCB0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBoYXNBbGlnbmVkSG91ck9mZnNldCAoaW5wdXQpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlucHV0ID0gaW5wdXQgPyBjcmVhdGVMb2NhbChpbnB1dCkudXRjT2Zmc2V0KCkgOiAwO1xuXG4gICAgICAgIHJldHVybiAodGhpcy51dGNPZmZzZXQoKSAtIGlucHV0KSAlIDYwID09PSAwO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzRGF5bGlnaHRTYXZpbmdUaW1lICgpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHRoaXMudXRjT2Zmc2V0KCkgPiB0aGlzLmNsb25lKCkubW9udGgoMCkudXRjT2Zmc2V0KCkgfHxcbiAgICAgICAgICAgIHRoaXMudXRjT2Zmc2V0KCkgPiB0aGlzLmNsb25lKCkubW9udGgoNSkudXRjT2Zmc2V0KClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0RheWxpZ2h0U2F2aW5nVGltZVNoaWZ0ZWQgKCkge1xuICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKHRoaXMuX2lzRFNUU2hpZnRlZCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9pc0RTVFNoaWZ0ZWQ7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgYyA9IHt9O1xuXG4gICAgICAgIGNvcHlDb25maWcoYywgdGhpcyk7XG4gICAgICAgIGMgPSBwcmVwYXJlQ29uZmlnKGMpO1xuXG4gICAgICAgIGlmIChjLl9hKSB7XG4gICAgICAgICAgICB2YXIgb3RoZXIgPSBjLl9pc1VUQyA/IGNyZWF0ZVVUQyhjLl9hKSA6IGNyZWF0ZUxvY2FsKGMuX2EpO1xuICAgICAgICAgICAgdGhpcy5faXNEU1RTaGlmdGVkID0gdGhpcy5pc1ZhbGlkKCkgJiZcbiAgICAgICAgICAgICAgICBjb21wYXJlQXJyYXlzKGMuX2EsIG90aGVyLnRvQXJyYXkoKSkgPiAwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5faXNEU1RTaGlmdGVkID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5faXNEU1RTaGlmdGVkO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzTG9jYWwgKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pc1ZhbGlkKCkgPyAhdGhpcy5faXNVVEMgOiBmYWxzZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1V0Y09mZnNldCAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzVmFsaWQoKSA/IHRoaXMuX2lzVVRDIDogZmFsc2U7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNVdGMgKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pc1ZhbGlkKCkgPyB0aGlzLl9pc1VUQyAmJiB0aGlzLl9vZmZzZXQgPT09IDAgOiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBBU1AuTkVUIGpzb24gZGF0ZSBmb3JtYXQgcmVnZXhcbiAgICB2YXIgYXNwTmV0UmVnZXggPSAvXihcXC18XFwrKT8oPzooXFxkKilbLiBdKT8oXFxkKylcXDooXFxkKykoPzpcXDooXFxkKykoXFwuXFxkKik/KT8kLztcblxuICAgIC8vIGZyb20gaHR0cDovL2RvY3MuY2xvc3VyZS1saWJyYXJ5Lmdvb2dsZWNvZGUuY29tL2dpdC9jbG9zdXJlX2dvb2dfZGF0ZV9kYXRlLmpzLnNvdXJjZS5odG1sXG4gICAgLy8gc29tZXdoYXQgbW9yZSBpbiBsaW5lIHdpdGggNC40LjMuMiAyMDA0IHNwZWMsIGJ1dCBhbGxvd3MgZGVjaW1hbCBhbnl3aGVyZVxuICAgIC8vIGFuZCBmdXJ0aGVyIG1vZGlmaWVkIHRvIGFsbG93IGZvciBzdHJpbmdzIGNvbnRhaW5pbmcgYm90aCB3ZWVrIGFuZCBkYXlcbiAgICB2YXIgaXNvUmVnZXggPSAvXigtfFxcKyk/UCg/OihbLStdP1swLTksLl0qKVkpPyg/OihbLStdP1swLTksLl0qKU0pPyg/OihbLStdP1swLTksLl0qKVcpPyg/OihbLStdP1swLTksLl0qKUQpPyg/OlQoPzooWy0rXT9bMC05LC5dKilIKT8oPzooWy0rXT9bMC05LC5dKilNKT8oPzooWy0rXT9bMC05LC5dKilTKT8pPyQvO1xuXG4gICAgZnVuY3Rpb24gY3JlYXRlRHVyYXRpb24gKGlucHV0LCBrZXkpIHtcbiAgICAgICAgdmFyIGR1cmF0aW9uID0gaW5wdXQsXG4gICAgICAgICAgICAvLyBtYXRjaGluZyBhZ2FpbnN0IHJlZ2V4cCBpcyBleHBlbnNpdmUsIGRvIGl0IG9uIGRlbWFuZFxuICAgICAgICAgICAgbWF0Y2ggPSBudWxsLFxuICAgICAgICAgICAgc2lnbixcbiAgICAgICAgICAgIHJldCxcbiAgICAgICAgICAgIGRpZmZSZXM7XG5cbiAgICAgICAgaWYgKGlzRHVyYXRpb24oaW5wdXQpKSB7XG4gICAgICAgICAgICBkdXJhdGlvbiA9IHtcbiAgICAgICAgICAgICAgICBtcyA6IGlucHV0Ll9taWxsaXNlY29uZHMsXG4gICAgICAgICAgICAgICAgZCAgOiBpbnB1dC5fZGF5cyxcbiAgICAgICAgICAgICAgICBNICA6IGlucHV0Ll9tb250aHNcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSBpZiAoaXNOdW1iZXIoaW5wdXQpKSB7XG4gICAgICAgICAgICBkdXJhdGlvbiA9IHt9O1xuICAgICAgICAgICAgaWYgKGtleSkge1xuICAgICAgICAgICAgICAgIGR1cmF0aW9uW2tleV0gPSBpbnB1dDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZHVyYXRpb24ubWlsbGlzZWNvbmRzID0gaW5wdXQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoISEobWF0Y2ggPSBhc3BOZXRSZWdleC5leGVjKGlucHV0KSkpIHtcbiAgICAgICAgICAgIHNpZ24gPSAobWF0Y2hbMV0gPT09ICctJykgPyAtMSA6IDE7XG4gICAgICAgICAgICBkdXJhdGlvbiA9IHtcbiAgICAgICAgICAgICAgICB5ICA6IDAsXG4gICAgICAgICAgICAgICAgZCAgOiB0b0ludChtYXRjaFtEQVRFXSkgICAgICAgICAgICAgICAgICAgICAgICAgKiBzaWduLFxuICAgICAgICAgICAgICAgIGggIDogdG9JbnQobWF0Y2hbSE9VUl0pICAgICAgICAgICAgICAgICAgICAgICAgICogc2lnbixcbiAgICAgICAgICAgICAgICBtICA6IHRvSW50KG1hdGNoW01JTlVURV0pICAgICAgICAgICAgICAgICAgICAgICAqIHNpZ24sXG4gICAgICAgICAgICAgICAgcyAgOiB0b0ludChtYXRjaFtTRUNPTkRdKSAgICAgICAgICAgICAgICAgICAgICAgKiBzaWduLFxuICAgICAgICAgICAgICAgIG1zIDogdG9JbnQoYWJzUm91bmQobWF0Y2hbTUlMTElTRUNPTkRdICogMTAwMCkpICogc2lnbiAvLyB0aGUgbWlsbGlzZWNvbmQgZGVjaW1hbCBwb2ludCBpcyBpbmNsdWRlZCBpbiB0aGUgbWF0Y2hcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSBpZiAoISEobWF0Y2ggPSBpc29SZWdleC5leGVjKGlucHV0KSkpIHtcbiAgICAgICAgICAgIHNpZ24gPSAobWF0Y2hbMV0gPT09ICctJykgPyAtMSA6IDE7XG4gICAgICAgICAgICBkdXJhdGlvbiA9IHtcbiAgICAgICAgICAgICAgICB5IDogcGFyc2VJc28obWF0Y2hbMl0sIHNpZ24pLFxuICAgICAgICAgICAgICAgIE0gOiBwYXJzZUlzbyhtYXRjaFszXSwgc2lnbiksXG4gICAgICAgICAgICAgICAgdyA6IHBhcnNlSXNvKG1hdGNoWzRdLCBzaWduKSxcbiAgICAgICAgICAgICAgICBkIDogcGFyc2VJc28obWF0Y2hbNV0sIHNpZ24pLFxuICAgICAgICAgICAgICAgIGggOiBwYXJzZUlzbyhtYXRjaFs2XSwgc2lnbiksXG4gICAgICAgICAgICAgICAgbSA6IHBhcnNlSXNvKG1hdGNoWzddLCBzaWduKSxcbiAgICAgICAgICAgICAgICBzIDogcGFyc2VJc28obWF0Y2hbOF0sIHNpZ24pXG4gICAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2UgaWYgKGR1cmF0aW9uID09IG51bGwpIHsvLyBjaGVja3MgZm9yIG51bGwgb3IgdW5kZWZpbmVkXG4gICAgICAgICAgICBkdXJhdGlvbiA9IHt9O1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBkdXJhdGlvbiA9PT0gJ29iamVjdCcgJiYgKCdmcm9tJyBpbiBkdXJhdGlvbiB8fCAndG8nIGluIGR1cmF0aW9uKSkge1xuICAgICAgICAgICAgZGlmZlJlcyA9IG1vbWVudHNEaWZmZXJlbmNlKGNyZWF0ZUxvY2FsKGR1cmF0aW9uLmZyb20pLCBjcmVhdGVMb2NhbChkdXJhdGlvbi50bykpO1xuXG4gICAgICAgICAgICBkdXJhdGlvbiA9IHt9O1xuICAgICAgICAgICAgZHVyYXRpb24ubXMgPSBkaWZmUmVzLm1pbGxpc2Vjb25kcztcbiAgICAgICAgICAgIGR1cmF0aW9uLk0gPSBkaWZmUmVzLm1vbnRocztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldCA9IG5ldyBEdXJhdGlvbihkdXJhdGlvbik7XG5cbiAgICAgICAgaWYgKGlzRHVyYXRpb24oaW5wdXQpICYmIGhhc093blByb3AoaW5wdXQsICdfbG9jYWxlJykpIHtcbiAgICAgICAgICAgIHJldC5fbG9jYWxlID0gaW5wdXQuX2xvY2FsZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXQ7XG4gICAgfVxuXG4gICAgY3JlYXRlRHVyYXRpb24uZm4gPSBEdXJhdGlvbi5wcm90b3R5cGU7XG4gICAgY3JlYXRlRHVyYXRpb24uaW52YWxpZCA9IGNyZWF0ZUludmFsaWQkMTtcblxuICAgIGZ1bmN0aW9uIHBhcnNlSXNvIChpbnAsIHNpZ24pIHtcbiAgICAgICAgLy8gV2UnZCBub3JtYWxseSB1c2Ugfn5pbnAgZm9yIHRoaXMsIGJ1dCB1bmZvcnR1bmF0ZWx5IGl0IGFsc29cbiAgICAgICAgLy8gY29udmVydHMgZmxvYXRzIHRvIGludHMuXG4gICAgICAgIC8vIGlucCBtYXkgYmUgdW5kZWZpbmVkLCBzbyBjYXJlZnVsIGNhbGxpbmcgcmVwbGFjZSBvbiBpdC5cbiAgICAgICAgdmFyIHJlcyA9IGlucCAmJiBwYXJzZUZsb2F0KGlucC5yZXBsYWNlKCcsJywgJy4nKSk7XG4gICAgICAgIC8vIGFwcGx5IHNpZ24gd2hpbGUgd2UncmUgYXQgaXRcbiAgICAgICAgcmV0dXJuIChpc05hTihyZXMpID8gMCA6IHJlcykgKiBzaWduO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBvc2l0aXZlTW9tZW50c0RpZmZlcmVuY2UoYmFzZSwgb3RoZXIpIHtcbiAgICAgICAgdmFyIHJlcyA9IHt9O1xuXG4gICAgICAgIHJlcy5tb250aHMgPSBvdGhlci5tb250aCgpIC0gYmFzZS5tb250aCgpICtcbiAgICAgICAgICAgIChvdGhlci55ZWFyKCkgLSBiYXNlLnllYXIoKSkgKiAxMjtcbiAgICAgICAgaWYgKGJhc2UuY2xvbmUoKS5hZGQocmVzLm1vbnRocywgJ00nKS5pc0FmdGVyKG90aGVyKSkge1xuICAgICAgICAgICAgLS1yZXMubW9udGhzO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVzLm1pbGxpc2Vjb25kcyA9ICtvdGhlciAtICsoYmFzZS5jbG9uZSgpLmFkZChyZXMubW9udGhzLCAnTScpKTtcblxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1vbWVudHNEaWZmZXJlbmNlKGJhc2UsIG90aGVyKSB7XG4gICAgICAgIHZhciByZXM7XG4gICAgICAgIGlmICghKGJhc2UuaXNWYWxpZCgpICYmIG90aGVyLmlzVmFsaWQoKSkpIHtcbiAgICAgICAgICAgIHJldHVybiB7bWlsbGlzZWNvbmRzOiAwLCBtb250aHM6IDB9O1xuICAgICAgICB9XG5cbiAgICAgICAgb3RoZXIgPSBjbG9uZVdpdGhPZmZzZXQob3RoZXIsIGJhc2UpO1xuICAgICAgICBpZiAoYmFzZS5pc0JlZm9yZShvdGhlcikpIHtcbiAgICAgICAgICAgIHJlcyA9IHBvc2l0aXZlTW9tZW50c0RpZmZlcmVuY2UoYmFzZSwgb3RoZXIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzID0gcG9zaXRpdmVNb21lbnRzRGlmZmVyZW5jZShvdGhlciwgYmFzZSk7XG4gICAgICAgICAgICByZXMubWlsbGlzZWNvbmRzID0gLXJlcy5taWxsaXNlY29uZHM7XG4gICAgICAgICAgICByZXMubW9udGhzID0gLXJlcy5tb250aHM7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIC8vIFRPRE86IHJlbW92ZSAnbmFtZScgYXJnIGFmdGVyIGRlcHJlY2F0aW9uIGlzIHJlbW92ZWRcbiAgICBmdW5jdGlvbiBjcmVhdGVBZGRlcihkaXJlY3Rpb24sIG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICh2YWwsIHBlcmlvZCkge1xuICAgICAgICAgICAgdmFyIGR1ciwgdG1wO1xuICAgICAgICAgICAgLy9pbnZlcnQgdGhlIGFyZ3VtZW50cywgYnV0IGNvbXBsYWluIGFib3V0IGl0XG4gICAgICAgICAgICBpZiAocGVyaW9kICE9PSBudWxsICYmICFpc05hTigrcGVyaW9kKSkge1xuICAgICAgICAgICAgICAgIGRlcHJlY2F0ZVNpbXBsZShuYW1lLCAnbW9tZW50KCkuJyArIG5hbWUgICsgJyhwZXJpb2QsIG51bWJlcikgaXMgZGVwcmVjYXRlZC4gUGxlYXNlIHVzZSBtb21lbnQoKS4nICsgbmFtZSArICcobnVtYmVyLCBwZXJpb2QpLiAnICtcbiAgICAgICAgICAgICAgICAnU2VlIGh0dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMvd2FybmluZ3MvYWRkLWludmVydGVkLXBhcmFtLyBmb3IgbW9yZSBpbmZvLicpO1xuICAgICAgICAgICAgICAgIHRtcCA9IHZhbDsgdmFsID0gcGVyaW9kOyBwZXJpb2QgPSB0bXA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhbCA9IHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnID8gK3ZhbCA6IHZhbDtcbiAgICAgICAgICAgIGR1ciA9IGNyZWF0ZUR1cmF0aW9uKHZhbCwgcGVyaW9kKTtcbiAgICAgICAgICAgIGFkZFN1YnRyYWN0KHRoaXMsIGR1ciwgZGlyZWN0aW9uKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFkZFN1YnRyYWN0IChtb20sIGR1cmF0aW9uLCBpc0FkZGluZywgdXBkYXRlT2Zmc2V0KSB7XG4gICAgICAgIHZhciBtaWxsaXNlY29uZHMgPSBkdXJhdGlvbi5fbWlsbGlzZWNvbmRzLFxuICAgICAgICAgICAgZGF5cyA9IGFic1JvdW5kKGR1cmF0aW9uLl9kYXlzKSxcbiAgICAgICAgICAgIG1vbnRocyA9IGFic1JvdW5kKGR1cmF0aW9uLl9tb250aHMpO1xuXG4gICAgICAgIGlmICghbW9tLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgLy8gTm8gb3BcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHVwZGF0ZU9mZnNldCA9IHVwZGF0ZU9mZnNldCA9PSBudWxsID8gdHJ1ZSA6IHVwZGF0ZU9mZnNldDtcblxuICAgICAgICBpZiAobW9udGhzKSB7XG4gICAgICAgICAgICBzZXRNb250aChtb20sIGdldChtb20sICdNb250aCcpICsgbW9udGhzICogaXNBZGRpbmcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkYXlzKSB7XG4gICAgICAgICAgICBzZXQkMShtb20sICdEYXRlJywgZ2V0KG1vbSwgJ0RhdGUnKSArIGRheXMgKiBpc0FkZGluZyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1pbGxpc2Vjb25kcykge1xuICAgICAgICAgICAgbW9tLl9kLnNldFRpbWUobW9tLl9kLnZhbHVlT2YoKSArIG1pbGxpc2Vjb25kcyAqIGlzQWRkaW5nKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodXBkYXRlT2Zmc2V0KSB7XG4gICAgICAgICAgICBob29rcy51cGRhdGVPZmZzZXQobW9tLCBkYXlzIHx8IG1vbnRocyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgYWRkICAgICAgPSBjcmVhdGVBZGRlcigxLCAnYWRkJyk7XG4gICAgdmFyIHN1YnRyYWN0ID0gY3JlYXRlQWRkZXIoLTEsICdzdWJ0cmFjdCcpO1xuXG4gICAgZnVuY3Rpb24gZ2V0Q2FsZW5kYXJGb3JtYXQobXlNb21lbnQsIG5vdykge1xuICAgICAgICB2YXIgZGlmZiA9IG15TW9tZW50LmRpZmYobm93LCAnZGF5cycsIHRydWUpO1xuICAgICAgICByZXR1cm4gZGlmZiA8IC02ID8gJ3NhbWVFbHNlJyA6XG4gICAgICAgICAgICAgICAgZGlmZiA8IC0xID8gJ2xhc3RXZWVrJyA6XG4gICAgICAgICAgICAgICAgZGlmZiA8IDAgPyAnbGFzdERheScgOlxuICAgICAgICAgICAgICAgIGRpZmYgPCAxID8gJ3NhbWVEYXknIDpcbiAgICAgICAgICAgICAgICBkaWZmIDwgMiA/ICduZXh0RGF5JyA6XG4gICAgICAgICAgICAgICAgZGlmZiA8IDcgPyAnbmV4dFdlZWsnIDogJ3NhbWVFbHNlJztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjYWxlbmRhciQxICh0aW1lLCBmb3JtYXRzKSB7XG4gICAgICAgIC8vIFdlIHdhbnQgdG8gY29tcGFyZSB0aGUgc3RhcnQgb2YgdG9kYXksIHZzIHRoaXMuXG4gICAgICAgIC8vIEdldHRpbmcgc3RhcnQtb2YtdG9kYXkgZGVwZW5kcyBvbiB3aGV0aGVyIHdlJ3JlIGxvY2FsL3V0Yy9vZmZzZXQgb3Igbm90LlxuICAgICAgICB2YXIgbm93ID0gdGltZSB8fCBjcmVhdGVMb2NhbCgpLFxuICAgICAgICAgICAgc29kID0gY2xvbmVXaXRoT2Zmc2V0KG5vdywgdGhpcykuc3RhcnRPZignZGF5JyksXG4gICAgICAgICAgICBmb3JtYXQgPSBob29rcy5jYWxlbmRhckZvcm1hdCh0aGlzLCBzb2QpIHx8ICdzYW1lRWxzZSc7XG5cbiAgICAgICAgdmFyIG91dHB1dCA9IGZvcm1hdHMgJiYgKGlzRnVuY3Rpb24oZm9ybWF0c1tmb3JtYXRdKSA/IGZvcm1hdHNbZm9ybWF0XS5jYWxsKHRoaXMsIG5vdykgOiBmb3JtYXRzW2Zvcm1hdF0pO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmZvcm1hdChvdXRwdXQgfHwgdGhpcy5sb2NhbGVEYXRhKCkuY2FsZW5kYXIoZm9ybWF0LCB0aGlzLCBjcmVhdGVMb2NhbChub3cpKSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY2xvbmUgKCkge1xuICAgICAgICByZXR1cm4gbmV3IE1vbWVudCh0aGlzKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0FmdGVyIChpbnB1dCwgdW5pdHMpIHtcbiAgICAgICAgdmFyIGxvY2FsSW5wdXQgPSBpc01vbWVudChpbnB1dCkgPyBpbnB1dCA6IGNyZWF0ZUxvY2FsKGlucHV0KTtcbiAgICAgICAgaWYgKCEodGhpcy5pc1ZhbGlkKCkgJiYgbG9jYWxJbnB1dC5pc1ZhbGlkKCkpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdW5pdHMgPSBub3JtYWxpemVVbml0cyh1bml0cykgfHwgJ21pbGxpc2Vjb25kJztcbiAgICAgICAgaWYgKHVuaXRzID09PSAnbWlsbGlzZWNvbmQnKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZU9mKCkgPiBsb2NhbElucHV0LnZhbHVlT2YoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBsb2NhbElucHV0LnZhbHVlT2YoKSA8IHRoaXMuY2xvbmUoKS5zdGFydE9mKHVuaXRzKS52YWx1ZU9mKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0JlZm9yZSAoaW5wdXQsIHVuaXRzKSB7XG4gICAgICAgIHZhciBsb2NhbElucHV0ID0gaXNNb21lbnQoaW5wdXQpID8gaW5wdXQgOiBjcmVhdGVMb2NhbChpbnB1dCk7XG4gICAgICAgIGlmICghKHRoaXMuaXNWYWxpZCgpICYmIGxvY2FsSW5wdXQuaXNWYWxpZCgpKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHVuaXRzID0gbm9ybWFsaXplVW5pdHModW5pdHMpIHx8ICdtaWxsaXNlY29uZCc7XG4gICAgICAgIGlmICh1bml0cyA9PT0gJ21pbGxpc2Vjb25kJykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVPZigpIDwgbG9jYWxJbnB1dC52YWx1ZU9mKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jbG9uZSgpLmVuZE9mKHVuaXRzKS52YWx1ZU9mKCkgPCBsb2NhbElucHV0LnZhbHVlT2YoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzQmV0d2VlbiAoZnJvbSwgdG8sIHVuaXRzLCBpbmNsdXNpdml0eSkge1xuICAgICAgICB2YXIgbG9jYWxGcm9tID0gaXNNb21lbnQoZnJvbSkgPyBmcm9tIDogY3JlYXRlTG9jYWwoZnJvbSksXG4gICAgICAgICAgICBsb2NhbFRvID0gaXNNb21lbnQodG8pID8gdG8gOiBjcmVhdGVMb2NhbCh0byk7XG4gICAgICAgIGlmICghKHRoaXMuaXNWYWxpZCgpICYmIGxvY2FsRnJvbS5pc1ZhbGlkKCkgJiYgbG9jYWxUby5pc1ZhbGlkKCkpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaW5jbHVzaXZpdHkgPSBpbmNsdXNpdml0eSB8fCAnKCknO1xuICAgICAgICByZXR1cm4gKGluY2x1c2l2aXR5WzBdID09PSAnKCcgPyB0aGlzLmlzQWZ0ZXIobG9jYWxGcm9tLCB1bml0cykgOiAhdGhpcy5pc0JlZm9yZShsb2NhbEZyb20sIHVuaXRzKSkgJiZcbiAgICAgICAgICAgIChpbmNsdXNpdml0eVsxXSA9PT0gJyknID8gdGhpcy5pc0JlZm9yZShsb2NhbFRvLCB1bml0cykgOiAhdGhpcy5pc0FmdGVyKGxvY2FsVG8sIHVuaXRzKSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNTYW1lIChpbnB1dCwgdW5pdHMpIHtcbiAgICAgICAgdmFyIGxvY2FsSW5wdXQgPSBpc01vbWVudChpbnB1dCkgPyBpbnB1dCA6IGNyZWF0ZUxvY2FsKGlucHV0KSxcbiAgICAgICAgICAgIGlucHV0TXM7XG4gICAgICAgIGlmICghKHRoaXMuaXNWYWxpZCgpICYmIGxvY2FsSW5wdXQuaXNWYWxpZCgpKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHVuaXRzID0gbm9ybWFsaXplVW5pdHModW5pdHMpIHx8ICdtaWxsaXNlY29uZCc7XG4gICAgICAgIGlmICh1bml0cyA9PT0gJ21pbGxpc2Vjb25kJykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVPZigpID09PSBsb2NhbElucHV0LnZhbHVlT2YoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlucHV0TXMgPSBsb2NhbElucHV0LnZhbHVlT2YoKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNsb25lKCkuc3RhcnRPZih1bml0cykudmFsdWVPZigpIDw9IGlucHV0TXMgJiYgaW5wdXRNcyA8PSB0aGlzLmNsb25lKCkuZW5kT2YodW5pdHMpLnZhbHVlT2YoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzU2FtZU9yQWZ0ZXIgKGlucHV0LCB1bml0cykge1xuICAgICAgICByZXR1cm4gdGhpcy5pc1NhbWUoaW5wdXQsIHVuaXRzKSB8fCB0aGlzLmlzQWZ0ZXIoaW5wdXQsIHVuaXRzKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1NhbWVPckJlZm9yZSAoaW5wdXQsIHVuaXRzKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzU2FtZShpbnB1dCwgdW5pdHMpIHx8IHRoaXMuaXNCZWZvcmUoaW5wdXQsIHVuaXRzKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBkaWZmIChpbnB1dCwgdW5pdHMsIGFzRmxvYXQpIHtcbiAgICAgICAgdmFyIHRoYXQsXG4gICAgICAgICAgICB6b25lRGVsdGEsXG4gICAgICAgICAgICBvdXRwdXQ7XG5cbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIE5hTjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoYXQgPSBjbG9uZVdpdGhPZmZzZXQoaW5wdXQsIHRoaXMpO1xuXG4gICAgICAgIGlmICghdGhhdC5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBOYU47XG4gICAgICAgIH1cblxuICAgICAgICB6b25lRGVsdGEgPSAodGhhdC51dGNPZmZzZXQoKSAtIHRoaXMudXRjT2Zmc2V0KCkpICogNmU0O1xuXG4gICAgICAgIHVuaXRzID0gbm9ybWFsaXplVW5pdHModW5pdHMpO1xuXG4gICAgICAgIHN3aXRjaCAodW5pdHMpIHtcbiAgICAgICAgICAgIGNhc2UgJ3llYXInOiBvdXRwdXQgPSBtb250aERpZmYodGhpcywgdGhhdCkgLyAxMjsgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdtb250aCc6IG91dHB1dCA9IG1vbnRoRGlmZih0aGlzLCB0aGF0KTsgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdxdWFydGVyJzogb3V0cHV0ID0gbW9udGhEaWZmKHRoaXMsIHRoYXQpIC8gMzsgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdzZWNvbmQnOiBvdXRwdXQgPSAodGhpcyAtIHRoYXQpIC8gMWUzOyBicmVhazsgLy8gMTAwMFxuICAgICAgICAgICAgY2FzZSAnbWludXRlJzogb3V0cHV0ID0gKHRoaXMgLSB0aGF0KSAvIDZlNDsgYnJlYWs7IC8vIDEwMDAgKiA2MFxuICAgICAgICAgICAgY2FzZSAnaG91cic6IG91dHB1dCA9ICh0aGlzIC0gdGhhdCkgLyAzNmU1OyBicmVhazsgLy8gMTAwMCAqIDYwICogNjBcbiAgICAgICAgICAgIGNhc2UgJ2RheSc6IG91dHB1dCA9ICh0aGlzIC0gdGhhdCAtIHpvbmVEZWx0YSkgLyA4NjRlNTsgYnJlYWs7IC8vIDEwMDAgKiA2MCAqIDYwICogMjQsIG5lZ2F0ZSBkc3RcbiAgICAgICAgICAgIGNhc2UgJ3dlZWsnOiBvdXRwdXQgPSAodGhpcyAtIHRoYXQgLSB6b25lRGVsdGEpIC8gNjA0OGU1OyBicmVhazsgLy8gMTAwMCAqIDYwICogNjAgKiAyNCAqIDcsIG5lZ2F0ZSBkc3RcbiAgICAgICAgICAgIGRlZmF1bHQ6IG91dHB1dCA9IHRoaXMgLSB0aGF0O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGFzRmxvYXQgPyBvdXRwdXQgOiBhYnNGbG9vcihvdXRwdXQpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1vbnRoRGlmZiAoYSwgYikge1xuICAgICAgICAvLyBkaWZmZXJlbmNlIGluIG1vbnRoc1xuICAgICAgICB2YXIgd2hvbGVNb250aERpZmYgPSAoKGIueWVhcigpIC0gYS55ZWFyKCkpICogMTIpICsgKGIubW9udGgoKSAtIGEubW9udGgoKSksXG4gICAgICAgICAgICAvLyBiIGlzIGluIChhbmNob3IgLSAxIG1vbnRoLCBhbmNob3IgKyAxIG1vbnRoKVxuICAgICAgICAgICAgYW5jaG9yID0gYS5jbG9uZSgpLmFkZCh3aG9sZU1vbnRoRGlmZiwgJ21vbnRocycpLFxuICAgICAgICAgICAgYW5jaG9yMiwgYWRqdXN0O1xuXG4gICAgICAgIGlmIChiIC0gYW5jaG9yIDwgMCkge1xuICAgICAgICAgICAgYW5jaG9yMiA9IGEuY2xvbmUoKS5hZGQod2hvbGVNb250aERpZmYgLSAxLCAnbW9udGhzJyk7XG4gICAgICAgICAgICAvLyBsaW5lYXIgYWNyb3NzIHRoZSBtb250aFxuICAgICAgICAgICAgYWRqdXN0ID0gKGIgLSBhbmNob3IpIC8gKGFuY2hvciAtIGFuY2hvcjIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYW5jaG9yMiA9IGEuY2xvbmUoKS5hZGQod2hvbGVNb250aERpZmYgKyAxLCAnbW9udGhzJyk7XG4gICAgICAgICAgICAvLyBsaW5lYXIgYWNyb3NzIHRoZSBtb250aFxuICAgICAgICAgICAgYWRqdXN0ID0gKGIgLSBhbmNob3IpIC8gKGFuY2hvcjIgLSBhbmNob3IpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy9jaGVjayBmb3IgbmVnYXRpdmUgemVybywgcmV0dXJuIHplcm8gaWYgbmVnYXRpdmUgemVyb1xuICAgICAgICByZXR1cm4gLSh3aG9sZU1vbnRoRGlmZiArIGFkanVzdCkgfHwgMDtcbiAgICB9XG5cbiAgICBob29rcy5kZWZhdWx0Rm9ybWF0ID0gJ1lZWVktTU0tRERUSEg6bW06c3NaJztcbiAgICBob29rcy5kZWZhdWx0Rm9ybWF0VXRjID0gJ1lZWVktTU0tRERUSEg6bW06c3NbWl0nO1xuXG4gICAgZnVuY3Rpb24gdG9TdHJpbmcgKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jbG9uZSgpLmxvY2FsZSgnZW4nKS5mb3JtYXQoJ2RkZCBNTU0gREQgWVlZWSBISDptbTpzcyBbR01UXVpaJyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdG9JU09TdHJpbmcoa2VlcE9mZnNldCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICB2YXIgdXRjID0ga2VlcE9mZnNldCAhPT0gdHJ1ZTtcbiAgICAgICAgdmFyIG0gPSB1dGMgPyB0aGlzLmNsb25lKCkudXRjKCkgOiB0aGlzO1xuICAgICAgICBpZiAobS55ZWFyKCkgPCAwIHx8IG0ueWVhcigpID4gOTk5OSkge1xuICAgICAgICAgICAgcmV0dXJuIGZvcm1hdE1vbWVudChtLCB1dGMgPyAnWVlZWVlZLU1NLUREW1RdSEg6bW06c3MuU1NTW1pdJyA6ICdZWVlZWVktTU0tRERbVF1ISDptbTpzcy5TU1NaJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzRnVuY3Rpb24oRGF0ZS5wcm90b3R5cGUudG9JU09TdHJpbmcpKSB7XG4gICAgICAgICAgICAvLyBuYXRpdmUgaW1wbGVtZW50YXRpb24gaXMgfjUweCBmYXN0ZXIsIHVzZSBpdCB3aGVuIHdlIGNhblxuICAgICAgICAgICAgaWYgKHV0Yykge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnRvRGF0ZSgpLnRvSVNPU3RyaW5nKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRGF0ZSh0aGlzLnZhbHVlT2YoKSArIHRoaXMudXRjT2Zmc2V0KCkgKiA2MCAqIDEwMDApLnRvSVNPU3RyaW5nKCkucmVwbGFjZSgnWicsIGZvcm1hdE1vbWVudChtLCAnWicpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZm9ybWF0TW9tZW50KG0sIHV0YyA/ICdZWVlZLU1NLUREW1RdSEg6bW06c3MuU1NTW1pdJyA6ICdZWVlZLU1NLUREW1RdSEg6bW06c3MuU1NTWicpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybiBhIGh1bWFuIHJlYWRhYmxlIHJlcHJlc2VudGF0aW9uIG9mIGEgbW9tZW50IHRoYXQgY2FuXG4gICAgICogYWxzbyBiZSBldmFsdWF0ZWQgdG8gZ2V0IGEgbmV3IG1vbWVudCB3aGljaCBpcyB0aGUgc2FtZVxuICAgICAqXG4gICAgICogQGxpbmsgaHR0cHM6Ly9ub2RlanMub3JnL2Rpc3QvbGF0ZXN0L2RvY3MvYXBpL3V0aWwuaHRtbCN1dGlsX2N1c3RvbV9pbnNwZWN0X2Z1bmN0aW9uX29uX29iamVjdHNcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpbnNwZWN0ICgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuICdtb21lbnQuaW52YWxpZCgvKiAnICsgdGhpcy5faSArICcgKi8pJztcbiAgICAgICAgfVxuICAgICAgICB2YXIgZnVuYyA9ICdtb21lbnQnO1xuICAgICAgICB2YXIgem9uZSA9ICcnO1xuICAgICAgICBpZiAoIXRoaXMuaXNMb2NhbCgpKSB7XG4gICAgICAgICAgICBmdW5jID0gdGhpcy51dGNPZmZzZXQoKSA9PT0gMCA/ICdtb21lbnQudXRjJyA6ICdtb21lbnQucGFyc2Vab25lJztcbiAgICAgICAgICAgIHpvbmUgPSAnWic7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHByZWZpeCA9ICdbJyArIGZ1bmMgKyAnKFwiXSc7XG4gICAgICAgIHZhciB5ZWFyID0gKDAgPD0gdGhpcy55ZWFyKCkgJiYgdGhpcy55ZWFyKCkgPD0gOTk5OSkgPyAnWVlZWScgOiAnWVlZWVlZJztcbiAgICAgICAgdmFyIGRhdGV0aW1lID0gJy1NTS1ERFtUXUhIOm1tOnNzLlNTUyc7XG4gICAgICAgIHZhciBzdWZmaXggPSB6b25lICsgJ1tcIildJztcblxuICAgICAgICByZXR1cm4gdGhpcy5mb3JtYXQocHJlZml4ICsgeWVhciArIGRhdGV0aW1lICsgc3VmZml4KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBmb3JtYXQgKGlucHV0U3RyaW5nKSB7XG4gICAgICAgIGlmICghaW5wdXRTdHJpbmcpIHtcbiAgICAgICAgICAgIGlucHV0U3RyaW5nID0gdGhpcy5pc1V0YygpID8gaG9va3MuZGVmYXVsdEZvcm1hdFV0YyA6IGhvb2tzLmRlZmF1bHRGb3JtYXQ7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIG91dHB1dCA9IGZvcm1hdE1vbWVudCh0aGlzLCBpbnB1dFN0cmluZyk7XG4gICAgICAgIHJldHVybiB0aGlzLmxvY2FsZURhdGEoKS5wb3N0Zm9ybWF0KG91dHB1dCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZnJvbSAodGltZSwgd2l0aG91dFN1ZmZpeCkge1xuICAgICAgICBpZiAodGhpcy5pc1ZhbGlkKCkgJiZcbiAgICAgICAgICAgICAgICAoKGlzTW9tZW50KHRpbWUpICYmIHRpbWUuaXNWYWxpZCgpKSB8fFxuICAgICAgICAgICAgICAgICBjcmVhdGVMb2NhbCh0aW1lKS5pc1ZhbGlkKCkpKSB7XG4gICAgICAgICAgICByZXR1cm4gY3JlYXRlRHVyYXRpb24oe3RvOiB0aGlzLCBmcm9tOiB0aW1lfSkubG9jYWxlKHRoaXMubG9jYWxlKCkpLmh1bWFuaXplKCF3aXRob3V0U3VmZml4KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmxvY2FsZURhdGEoKS5pbnZhbGlkRGF0ZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZnJvbU5vdyAod2l0aG91dFN1ZmZpeCkge1xuICAgICAgICByZXR1cm4gdGhpcy5mcm9tKGNyZWF0ZUxvY2FsKCksIHdpdGhvdXRTdWZmaXgpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRvICh0aW1lLCB3aXRob3V0U3VmZml4KSB7XG4gICAgICAgIGlmICh0aGlzLmlzVmFsaWQoKSAmJlxuICAgICAgICAgICAgICAgICgoaXNNb21lbnQodGltZSkgJiYgdGltZS5pc1ZhbGlkKCkpIHx8XG4gICAgICAgICAgICAgICAgIGNyZWF0ZUxvY2FsKHRpbWUpLmlzVmFsaWQoKSkpIHtcbiAgICAgICAgICAgIHJldHVybiBjcmVhdGVEdXJhdGlvbih7ZnJvbTogdGhpcywgdG86IHRpbWV9KS5sb2NhbGUodGhpcy5sb2NhbGUoKSkuaHVtYW5pemUoIXdpdGhvdXRTdWZmaXgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLmludmFsaWREYXRlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0b05vdyAod2l0aG91dFN1ZmZpeCkge1xuICAgICAgICByZXR1cm4gdGhpcy50byhjcmVhdGVMb2NhbCgpLCB3aXRob3V0U3VmZml4KTtcbiAgICB9XG5cbiAgICAvLyBJZiBwYXNzZWQgYSBsb2NhbGUga2V5LCBpdCB3aWxsIHNldCB0aGUgbG9jYWxlIGZvciB0aGlzXG4gICAgLy8gaW5zdGFuY2UuICBPdGhlcndpc2UsIGl0IHdpbGwgcmV0dXJuIHRoZSBsb2NhbGUgY29uZmlndXJhdGlvblxuICAgIC8vIHZhcmlhYmxlcyBmb3IgdGhpcyBpbnN0YW5jZS5cbiAgICBmdW5jdGlvbiBsb2NhbGUgKGtleSkge1xuICAgICAgICB2YXIgbmV3TG9jYWxlRGF0YTtcblxuICAgICAgICBpZiAoa2V5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9sb2NhbGUuX2FiYnI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBuZXdMb2NhbGVEYXRhID0gZ2V0TG9jYWxlKGtleSk7XG4gICAgICAgICAgICBpZiAobmV3TG9jYWxlRGF0YSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbG9jYWxlID0gbmV3TG9jYWxlRGF0YTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGxhbmcgPSBkZXByZWNhdGUoXG4gICAgICAgICdtb21lbnQoKS5sYW5nKCkgaXMgZGVwcmVjYXRlZC4gSW5zdGVhZCwgdXNlIG1vbWVudCgpLmxvY2FsZURhdGEoKSB0byBnZXQgdGhlIGxhbmd1YWdlIGNvbmZpZ3VyYXRpb24uIFVzZSBtb21lbnQoKS5sb2NhbGUoKSB0byBjaGFuZ2UgbGFuZ3VhZ2VzLicsXG4gICAgICAgIGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgIGlmIChrZXkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmxvY2FsZURhdGEoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlKGtleSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgZnVuY3Rpb24gbG9jYWxlRGF0YSAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9sb2NhbGU7XG4gICAgfVxuXG4gICAgdmFyIE1TX1BFUl9TRUNPTkQgPSAxMDAwO1xuICAgIHZhciBNU19QRVJfTUlOVVRFID0gNjAgKiBNU19QRVJfU0VDT05EO1xuICAgIHZhciBNU19QRVJfSE9VUiA9IDYwICogTVNfUEVSX01JTlVURTtcbiAgICB2YXIgTVNfUEVSXzQwMF9ZRUFSUyA9ICgzNjUgKiA0MDAgKyA5NykgKiAyNCAqIE1TX1BFUl9IT1VSO1xuXG4gICAgLy8gYWN0dWFsIG1vZHVsbyAtIGhhbmRsZXMgbmVnYXRpdmUgbnVtYmVycyAoZm9yIGRhdGVzIGJlZm9yZSAxOTcwKTpcbiAgICBmdW5jdGlvbiBtb2QkMShkaXZpZGVuZCwgZGl2aXNvcikge1xuICAgICAgICByZXR1cm4gKGRpdmlkZW5kICUgZGl2aXNvciArIGRpdmlzb3IpICUgZGl2aXNvcjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsb2NhbFN0YXJ0T2ZEYXRlKHksIG0sIGQpIHtcbiAgICAgICAgLy8gdGhlIGRhdGUgY29uc3RydWN0b3IgcmVtYXBzIHllYXJzIDAtOTkgdG8gMTkwMC0xOTk5XG4gICAgICAgIGlmICh5IDwgMTAwICYmIHkgPj0gMCkge1xuICAgICAgICAgICAgLy8gcHJlc2VydmUgbGVhcCB5ZWFycyB1c2luZyBhIGZ1bGwgNDAwIHllYXIgY3ljbGUsIHRoZW4gcmVzZXRcbiAgICAgICAgICAgIHJldHVybiBuZXcgRGF0ZSh5ICsgNDAwLCBtLCBkKSAtIE1TX1BFUl80MDBfWUVBUlM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IERhdGUoeSwgbSwgZCkudmFsdWVPZigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdXRjU3RhcnRPZkRhdGUoeSwgbSwgZCkge1xuICAgICAgICAvLyBEYXRlLlVUQyByZW1hcHMgeWVhcnMgMC05OSB0byAxOTAwLTE5OTlcbiAgICAgICAgaWYgKHkgPCAxMDAgJiYgeSA+PSAwKSB7XG4gICAgICAgICAgICAvLyBwcmVzZXJ2ZSBsZWFwIHllYXJzIHVzaW5nIGEgZnVsbCA0MDAgeWVhciBjeWNsZSwgdGhlbiByZXNldFxuICAgICAgICAgICAgcmV0dXJuIERhdGUuVVRDKHkgKyA0MDAsIG0sIGQpIC0gTVNfUEVSXzQwMF9ZRUFSUztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBEYXRlLlVUQyh5LCBtLCBkKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHN0YXJ0T2YgKHVuaXRzKSB7XG4gICAgICAgIHZhciB0aW1lO1xuICAgICAgICB1bml0cyA9IG5vcm1hbGl6ZVVuaXRzKHVuaXRzKTtcbiAgICAgICAgaWYgKHVuaXRzID09PSB1bmRlZmluZWQgfHwgdW5pdHMgPT09ICdtaWxsaXNlY29uZCcgfHwgIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBzdGFydE9mRGF0ZSA9IHRoaXMuX2lzVVRDID8gdXRjU3RhcnRPZkRhdGUgOiBsb2NhbFN0YXJ0T2ZEYXRlO1xuXG4gICAgICAgIHN3aXRjaCAodW5pdHMpIHtcbiAgICAgICAgICAgIGNhc2UgJ3llYXInOlxuICAgICAgICAgICAgICAgIHRpbWUgPSBzdGFydE9mRGF0ZSh0aGlzLnllYXIoKSwgMCwgMSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdxdWFydGVyJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gc3RhcnRPZkRhdGUodGhpcy55ZWFyKCksIHRoaXMubW9udGgoKSAtIHRoaXMubW9udGgoKSAlIDMsIDEpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnbW9udGgnOlxuICAgICAgICAgICAgICAgIHRpbWUgPSBzdGFydE9mRGF0ZSh0aGlzLnllYXIoKSwgdGhpcy5tb250aCgpLCAxKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3dlZWsnOlxuICAgICAgICAgICAgICAgIHRpbWUgPSBzdGFydE9mRGF0ZSh0aGlzLnllYXIoKSwgdGhpcy5tb250aCgpLCB0aGlzLmRhdGUoKSAtIHRoaXMud2Vla2RheSgpKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2lzb1dlZWsnOlxuICAgICAgICAgICAgICAgIHRpbWUgPSBzdGFydE9mRGF0ZSh0aGlzLnllYXIoKSwgdGhpcy5tb250aCgpLCB0aGlzLmRhdGUoKSAtICh0aGlzLmlzb1dlZWtkYXkoKSAtIDEpKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2RheSc6XG4gICAgICAgICAgICBjYXNlICdkYXRlJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gc3RhcnRPZkRhdGUodGhpcy55ZWFyKCksIHRoaXMubW9udGgoKSwgdGhpcy5kYXRlKCkpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnaG91cic6XG4gICAgICAgICAgICAgICAgdGltZSA9IHRoaXMuX2QudmFsdWVPZigpO1xuICAgICAgICAgICAgICAgIHRpbWUgLT0gbW9kJDEodGltZSArICh0aGlzLl9pc1VUQyA/IDAgOiB0aGlzLnV0Y09mZnNldCgpICogTVNfUEVSX01JTlVURSksIE1TX1BFUl9IT1VSKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ21pbnV0ZSc6XG4gICAgICAgICAgICAgICAgdGltZSA9IHRoaXMuX2QudmFsdWVPZigpO1xuICAgICAgICAgICAgICAgIHRpbWUgLT0gbW9kJDEodGltZSwgTVNfUEVSX01JTlVURSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdzZWNvbmQnOlxuICAgICAgICAgICAgICAgIHRpbWUgPSB0aGlzLl9kLnZhbHVlT2YoKTtcbiAgICAgICAgICAgICAgICB0aW1lIC09IG1vZCQxKHRpbWUsIE1TX1BFUl9TRUNPTkQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fZC5zZXRUaW1lKHRpbWUpO1xuICAgICAgICBob29rcy51cGRhdGVPZmZzZXQodGhpcywgdHJ1ZSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGVuZE9mICh1bml0cykge1xuICAgICAgICB2YXIgdGltZTtcbiAgICAgICAgdW5pdHMgPSBub3JtYWxpemVVbml0cyh1bml0cyk7XG4gICAgICAgIGlmICh1bml0cyA9PT0gdW5kZWZpbmVkIHx8IHVuaXRzID09PSAnbWlsbGlzZWNvbmQnIHx8ICF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgc3RhcnRPZkRhdGUgPSB0aGlzLl9pc1VUQyA/IHV0Y1N0YXJ0T2ZEYXRlIDogbG9jYWxTdGFydE9mRGF0ZTtcblxuICAgICAgICBzd2l0Y2ggKHVuaXRzKSB7XG4gICAgICAgICAgICBjYXNlICd5ZWFyJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gc3RhcnRPZkRhdGUodGhpcy55ZWFyKCkgKyAxLCAwLCAxKSAtIDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdxdWFydGVyJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gc3RhcnRPZkRhdGUodGhpcy55ZWFyKCksIHRoaXMubW9udGgoKSAtIHRoaXMubW9udGgoKSAlIDMgKyAzLCAxKSAtIDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdtb250aCc6XG4gICAgICAgICAgICAgICAgdGltZSA9IHN0YXJ0T2ZEYXRlKHRoaXMueWVhcigpLCB0aGlzLm1vbnRoKCkgKyAxLCAxKSAtIDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICd3ZWVrJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gc3RhcnRPZkRhdGUodGhpcy55ZWFyKCksIHRoaXMubW9udGgoKSwgdGhpcy5kYXRlKCkgLSB0aGlzLndlZWtkYXkoKSArIDcpIC0gMTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2lzb1dlZWsnOlxuICAgICAgICAgICAgICAgIHRpbWUgPSBzdGFydE9mRGF0ZSh0aGlzLnllYXIoKSwgdGhpcy5tb250aCgpLCB0aGlzLmRhdGUoKSAtICh0aGlzLmlzb1dlZWtkYXkoKSAtIDEpICsgNykgLSAxO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnZGF5JzpcbiAgICAgICAgICAgIGNhc2UgJ2RhdGUnOlxuICAgICAgICAgICAgICAgIHRpbWUgPSBzdGFydE9mRGF0ZSh0aGlzLnllYXIoKSwgdGhpcy5tb250aCgpLCB0aGlzLmRhdGUoKSArIDEpIC0gMTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2hvdXInOlxuICAgICAgICAgICAgICAgIHRpbWUgPSB0aGlzLl9kLnZhbHVlT2YoKTtcbiAgICAgICAgICAgICAgICB0aW1lICs9IE1TX1BFUl9IT1VSIC0gbW9kJDEodGltZSArICh0aGlzLl9pc1VUQyA/IDAgOiB0aGlzLnV0Y09mZnNldCgpICogTVNfUEVSX01JTlVURSksIE1TX1BFUl9IT1VSKSAtIDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdtaW51dGUnOlxuICAgICAgICAgICAgICAgIHRpbWUgPSB0aGlzLl9kLnZhbHVlT2YoKTtcbiAgICAgICAgICAgICAgICB0aW1lICs9IE1TX1BFUl9NSU5VVEUgLSBtb2QkMSh0aW1lLCBNU19QRVJfTUlOVVRFKSAtIDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdzZWNvbmQnOlxuICAgICAgICAgICAgICAgIHRpbWUgPSB0aGlzLl9kLnZhbHVlT2YoKTtcbiAgICAgICAgICAgICAgICB0aW1lICs9IE1TX1BFUl9TRUNPTkQgLSBtb2QkMSh0aW1lLCBNU19QRVJfU0VDT05EKSAtIDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9kLnNldFRpbWUodGltZSk7XG4gICAgICAgIGhvb2tzLnVwZGF0ZU9mZnNldCh0aGlzLCB0cnVlKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdmFsdWVPZiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kLnZhbHVlT2YoKSAtICgodGhpcy5fb2Zmc2V0IHx8IDApICogNjAwMDApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHVuaXggKCkge1xuICAgICAgICByZXR1cm4gTWF0aC5mbG9vcih0aGlzLnZhbHVlT2YoKSAvIDEwMDApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRvRGF0ZSAoKSB7XG4gICAgICAgIHJldHVybiBuZXcgRGF0ZSh0aGlzLnZhbHVlT2YoKSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdG9BcnJheSAoKSB7XG4gICAgICAgIHZhciBtID0gdGhpcztcbiAgICAgICAgcmV0dXJuIFttLnllYXIoKSwgbS5tb250aCgpLCBtLmRhdGUoKSwgbS5ob3VyKCksIG0ubWludXRlKCksIG0uc2Vjb25kKCksIG0ubWlsbGlzZWNvbmQoKV07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdG9PYmplY3QgKCkge1xuICAgICAgICB2YXIgbSA9IHRoaXM7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB5ZWFyczogbS55ZWFyKCksXG4gICAgICAgICAgICBtb250aHM6IG0ubW9udGgoKSxcbiAgICAgICAgICAgIGRhdGU6IG0uZGF0ZSgpLFxuICAgICAgICAgICAgaG91cnM6IG0uaG91cnMoKSxcbiAgICAgICAgICAgIG1pbnV0ZXM6IG0ubWludXRlcygpLFxuICAgICAgICAgICAgc2Vjb25kczogbS5zZWNvbmRzKCksXG4gICAgICAgICAgICBtaWxsaXNlY29uZHM6IG0ubWlsbGlzZWNvbmRzKClcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0b0pTT04gKCkge1xuICAgICAgICAvLyBuZXcgRGF0ZShOYU4pLnRvSlNPTigpID09PSBudWxsXG4gICAgICAgIHJldHVybiB0aGlzLmlzVmFsaWQoKSA/IHRoaXMudG9JU09TdHJpbmcoKSA6IG51bGw7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNWYWxpZCQyICgpIHtcbiAgICAgICAgcmV0dXJuIGlzVmFsaWQodGhpcyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcGFyc2luZ0ZsYWdzICgpIHtcbiAgICAgICAgcmV0dXJuIGV4dGVuZCh7fSwgZ2V0UGFyc2luZ0ZsYWdzKHRoaXMpKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbnZhbGlkQXQgKCkge1xuICAgICAgICByZXR1cm4gZ2V0UGFyc2luZ0ZsYWdzKHRoaXMpLm92ZXJmbG93O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0aW9uRGF0YSgpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGlucHV0OiB0aGlzLl9pLFxuICAgICAgICAgICAgZm9ybWF0OiB0aGlzLl9mLFxuICAgICAgICAgICAgbG9jYWxlOiB0aGlzLl9sb2NhbGUsXG4gICAgICAgICAgICBpc1VUQzogdGhpcy5faXNVVEMsXG4gICAgICAgICAgICBzdHJpY3Q6IHRoaXMuX3N0cmljdFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8vIEZPUk1BVFRJTkdcblxuICAgIGFkZEZvcm1hdFRva2VuKDAsIFsnZ2cnLCAyXSwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy53ZWVrWWVhcigpICUgMTAwO1xuICAgIH0pO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydHRycsIDJdLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzb1dlZWtZZWFyKCkgJSAxMDA7XG4gICAgfSk7XG5cbiAgICBmdW5jdGlvbiBhZGRXZWVrWWVhckZvcm1hdFRva2VuICh0b2tlbiwgZ2V0dGVyKSB7XG4gICAgICAgIGFkZEZvcm1hdFRva2VuKDAsIFt0b2tlbiwgdG9rZW4ubGVuZ3RoXSwgMCwgZ2V0dGVyKTtcbiAgICB9XG5cbiAgICBhZGRXZWVrWWVhckZvcm1hdFRva2VuKCdnZ2dnJywgICAgICd3ZWVrWWVhcicpO1xuICAgIGFkZFdlZWtZZWFyRm9ybWF0VG9rZW4oJ2dnZ2dnJywgICAgJ3dlZWtZZWFyJyk7XG4gICAgYWRkV2Vla1llYXJGb3JtYXRUb2tlbignR0dHRycsICAnaXNvV2Vla1llYXInKTtcbiAgICBhZGRXZWVrWWVhckZvcm1hdFRva2VuKCdHR0dHRycsICdpc29XZWVrWWVhcicpO1xuXG4gICAgLy8gQUxJQVNFU1xuXG4gICAgYWRkVW5pdEFsaWFzKCd3ZWVrWWVhcicsICdnZycpO1xuICAgIGFkZFVuaXRBbGlhcygnaXNvV2Vla1llYXInLCAnR0cnKTtcblxuICAgIC8vIFBSSU9SSVRZXG5cbiAgICBhZGRVbml0UHJpb3JpdHkoJ3dlZWtZZWFyJywgMSk7XG4gICAgYWRkVW5pdFByaW9yaXR5KCdpc29XZWVrWWVhcicsIDEpO1xuXG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCdHJywgICAgICBtYXRjaFNpZ25lZCk7XG4gICAgYWRkUmVnZXhUb2tlbignZycsICAgICAgbWF0Y2hTaWduZWQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0dHJywgICAgIG1hdGNoMXRvMiwgbWF0Y2gyKTtcbiAgICBhZGRSZWdleFRva2VuKCdnZycsICAgICBtYXRjaDF0bzIsIG1hdGNoMik7XG4gICAgYWRkUmVnZXhUb2tlbignR0dHRycsICAgbWF0Y2gxdG80LCBtYXRjaDQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2dnZ2cnLCAgIG1hdGNoMXRvNCwgbWF0Y2g0KTtcbiAgICBhZGRSZWdleFRva2VuKCdHR0dHRycsICBtYXRjaDF0bzYsIG1hdGNoNik7XG4gICAgYWRkUmVnZXhUb2tlbignZ2dnZ2cnLCAgbWF0Y2gxdG82LCBtYXRjaDYpO1xuXG4gICAgYWRkV2Vla1BhcnNlVG9rZW4oWydnZ2dnJywgJ2dnZ2dnJywgJ0dHR0cnLCAnR0dHR0cnXSwgZnVuY3Rpb24gKGlucHV0LCB3ZWVrLCBjb25maWcsIHRva2VuKSB7XG4gICAgICAgIHdlZWtbdG9rZW4uc3Vic3RyKDAsIDIpXSA9IHRvSW50KGlucHV0KTtcbiAgICB9KTtcblxuICAgIGFkZFdlZWtQYXJzZVRva2VuKFsnZ2cnLCAnR0cnXSwgZnVuY3Rpb24gKGlucHV0LCB3ZWVrLCBjb25maWcsIHRva2VuKSB7XG4gICAgICAgIHdlZWtbdG9rZW5dID0gaG9va3MucGFyc2VUd29EaWdpdFllYXIoaW5wdXQpO1xuICAgIH0pO1xuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgZnVuY3Rpb24gZ2V0U2V0V2Vla1llYXIgKGlucHV0KSB7XG4gICAgICAgIHJldHVybiBnZXRTZXRXZWVrWWVhckhlbHBlci5jYWxsKHRoaXMsXG4gICAgICAgICAgICAgICAgaW5wdXQsXG4gICAgICAgICAgICAgICAgdGhpcy53ZWVrKCksXG4gICAgICAgICAgICAgICAgdGhpcy53ZWVrZGF5KCksXG4gICAgICAgICAgICAgICAgdGhpcy5sb2NhbGVEYXRhKCkuX3dlZWsuZG93LFxuICAgICAgICAgICAgICAgIHRoaXMubG9jYWxlRGF0YSgpLl93ZWVrLmRveSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0U2V0SVNPV2Vla1llYXIgKGlucHV0KSB7XG4gICAgICAgIHJldHVybiBnZXRTZXRXZWVrWWVhckhlbHBlci5jYWxsKHRoaXMsXG4gICAgICAgICAgICAgICAgaW5wdXQsIHRoaXMuaXNvV2VlaygpLCB0aGlzLmlzb1dlZWtkYXkoKSwgMSwgNCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0SVNPV2Vla3NJblllYXIgKCkge1xuICAgICAgICByZXR1cm4gd2Vla3NJblllYXIodGhpcy55ZWFyKCksIDEsIDQpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFdlZWtzSW5ZZWFyICgpIHtcbiAgICAgICAgdmFyIHdlZWtJbmZvID0gdGhpcy5sb2NhbGVEYXRhKCkuX3dlZWs7XG4gICAgICAgIHJldHVybiB3ZWVrc0luWWVhcih0aGlzLnllYXIoKSwgd2Vla0luZm8uZG93LCB3ZWVrSW5mby5kb3kpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFNldFdlZWtZZWFySGVscGVyKGlucHV0LCB3ZWVrLCB3ZWVrZGF5LCBkb3csIGRveSkge1xuICAgICAgICB2YXIgd2Vla3NUYXJnZXQ7XG4gICAgICAgIGlmIChpbnB1dCA9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gd2Vla09mWWVhcih0aGlzLCBkb3csIGRveSkueWVhcjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHdlZWtzVGFyZ2V0ID0gd2Vla3NJblllYXIoaW5wdXQsIGRvdywgZG95KTtcbiAgICAgICAgICAgIGlmICh3ZWVrID4gd2Vla3NUYXJnZXQpIHtcbiAgICAgICAgICAgICAgICB3ZWVrID0gd2Vla3NUYXJnZXQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gc2V0V2Vla0FsbC5jYWxsKHRoaXMsIGlucHV0LCB3ZWVrLCB3ZWVrZGF5LCBkb3csIGRveSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzZXRXZWVrQWxsKHdlZWtZZWFyLCB3ZWVrLCB3ZWVrZGF5LCBkb3csIGRveSkge1xuICAgICAgICB2YXIgZGF5T2ZZZWFyRGF0YSA9IGRheU9mWWVhckZyb21XZWVrcyh3ZWVrWWVhciwgd2Vlaywgd2Vla2RheSwgZG93LCBkb3kpLFxuICAgICAgICAgICAgZGF0ZSA9IGNyZWF0ZVVUQ0RhdGUoZGF5T2ZZZWFyRGF0YS55ZWFyLCAwLCBkYXlPZlllYXJEYXRhLmRheU9mWWVhcik7XG5cbiAgICAgICAgdGhpcy55ZWFyKGRhdGUuZ2V0VVRDRnVsbFllYXIoKSk7XG4gICAgICAgIHRoaXMubW9udGgoZGF0ZS5nZXRVVENNb250aCgpKTtcbiAgICAgICAgdGhpcy5kYXRlKGRhdGUuZ2V0VVRDRGF0ZSgpKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ1EnLCAwLCAnUW8nLCAncXVhcnRlcicpO1xuXG4gICAgLy8gQUxJQVNFU1xuXG4gICAgYWRkVW5pdEFsaWFzKCdxdWFydGVyJywgJ1EnKTtcblxuICAgIC8vIFBSSU9SSVRZXG5cbiAgICBhZGRVbml0UHJpb3JpdHkoJ3F1YXJ0ZXInLCA3KTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ1EnLCBtYXRjaDEpO1xuICAgIGFkZFBhcnNlVG9rZW4oJ1EnLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5KSB7XG4gICAgICAgIGFycmF5W01PTlRIXSA9ICh0b0ludChpbnB1dCkgLSAxKSAqIDM7XG4gICAgfSk7XG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICBmdW5jdGlvbiBnZXRTZXRRdWFydGVyIChpbnB1dCkge1xuICAgICAgICByZXR1cm4gaW5wdXQgPT0gbnVsbCA/IE1hdGguY2VpbCgodGhpcy5tb250aCgpICsgMSkgLyAzKSA6IHRoaXMubW9udGgoKGlucHV0IC0gMSkgKiAzICsgdGhpcy5tb250aCgpICUgMyk7XG4gICAgfVxuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ0QnLCBbJ0REJywgMl0sICdEbycsICdkYXRlJyk7XG5cbiAgICAvLyBBTElBU0VTXG5cbiAgICBhZGRVbml0QWxpYXMoJ2RhdGUnLCAnRCcpO1xuXG4gICAgLy8gUFJJT1JJVFlcbiAgICBhZGRVbml0UHJpb3JpdHkoJ2RhdGUnLCA5KTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ0QnLCAgbWF0Y2gxdG8yKTtcbiAgICBhZGRSZWdleFRva2VuKCdERCcsIG1hdGNoMXRvMiwgbWF0Y2gyKTtcbiAgICBhZGRSZWdleFRva2VuKCdEbycsIGZ1bmN0aW9uIChpc1N0cmljdCwgbG9jYWxlKSB7XG4gICAgICAgIC8vIFRPRE86IFJlbW92ZSBcIm9yZGluYWxQYXJzZVwiIGZhbGxiYWNrIGluIG5leHQgbWFqb3IgcmVsZWFzZS5cbiAgICAgICAgcmV0dXJuIGlzU3RyaWN0ID9cbiAgICAgICAgICAobG9jYWxlLl9kYXlPZk1vbnRoT3JkaW5hbFBhcnNlIHx8IGxvY2FsZS5fb3JkaW5hbFBhcnNlKSA6XG4gICAgICAgICAgbG9jYWxlLl9kYXlPZk1vbnRoT3JkaW5hbFBhcnNlTGVuaWVudDtcbiAgICB9KTtcblxuICAgIGFkZFBhcnNlVG9rZW4oWydEJywgJ0REJ10sIERBVEUpO1xuICAgIGFkZFBhcnNlVG9rZW4oJ0RvJywgZnVuY3Rpb24gKGlucHV0LCBhcnJheSkge1xuICAgICAgICBhcnJheVtEQVRFXSA9IHRvSW50KGlucHV0Lm1hdGNoKG1hdGNoMXRvMilbMF0pO1xuICAgIH0pO1xuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgdmFyIGdldFNldERheU9mTW9udGggPSBtYWtlR2V0U2V0KCdEYXRlJywgdHJ1ZSk7XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBhZGRGb3JtYXRUb2tlbignREREJywgWydEREREJywgM10sICdERERvJywgJ2RheU9mWWVhcicpO1xuXG4gICAgLy8gQUxJQVNFU1xuXG4gICAgYWRkVW5pdEFsaWFzKCdkYXlPZlllYXInLCAnREREJyk7XG5cbiAgICAvLyBQUklPUklUWVxuICAgIGFkZFVuaXRQcmlvcml0eSgnZGF5T2ZZZWFyJywgNCk7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCdEREQnLCAgbWF0Y2gxdG8zKTtcbiAgICBhZGRSZWdleFRva2VuKCdEREREJywgbWF0Y2gzKTtcbiAgICBhZGRQYXJzZVRva2VuKFsnREREJywgJ0REREQnXSwgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnKSB7XG4gICAgICAgIGNvbmZpZy5fZGF5T2ZZZWFyID0gdG9JbnQoaW5wdXQpO1xuICAgIH0pO1xuXG4gICAgLy8gSEVMUEVSU1xuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgZnVuY3Rpb24gZ2V0U2V0RGF5T2ZZZWFyIChpbnB1dCkge1xuICAgICAgICB2YXIgZGF5T2ZZZWFyID0gTWF0aC5yb3VuZCgodGhpcy5jbG9uZSgpLnN0YXJ0T2YoJ2RheScpIC0gdGhpcy5jbG9uZSgpLnN0YXJ0T2YoJ3llYXInKSkgLyA4NjRlNSkgKyAxO1xuICAgICAgICByZXR1cm4gaW5wdXQgPT0gbnVsbCA/IGRheU9mWWVhciA6IHRoaXMuYWRkKChpbnB1dCAtIGRheU9mWWVhciksICdkJyk7XG4gICAgfVxuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ20nLCBbJ21tJywgMl0sIDAsICdtaW51dGUnKTtcblxuICAgIC8vIEFMSUFTRVNcblxuICAgIGFkZFVuaXRBbGlhcygnbWludXRlJywgJ20nKTtcblxuICAgIC8vIFBSSU9SSVRZXG5cbiAgICBhZGRVbml0UHJpb3JpdHkoJ21pbnV0ZScsIDE0KTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ20nLCAgbWF0Y2gxdG8yKTtcbiAgICBhZGRSZWdleFRva2VuKCdtbScsIG1hdGNoMXRvMiwgbWF0Y2gyKTtcbiAgICBhZGRQYXJzZVRva2VuKFsnbScsICdtbSddLCBNSU5VVEUpO1xuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgdmFyIGdldFNldE1pbnV0ZSA9IG1ha2VHZXRTZXQoJ01pbnV0ZXMnLCBmYWxzZSk7XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBhZGRGb3JtYXRUb2tlbigncycsIFsnc3MnLCAyXSwgMCwgJ3NlY29uZCcpO1xuXG4gICAgLy8gQUxJQVNFU1xuXG4gICAgYWRkVW5pdEFsaWFzKCdzZWNvbmQnLCAncycpO1xuXG4gICAgLy8gUFJJT1JJVFlcblxuICAgIGFkZFVuaXRQcmlvcml0eSgnc2Vjb25kJywgMTUpO1xuXG4gICAgLy8gUEFSU0lOR1xuXG4gICAgYWRkUmVnZXhUb2tlbigncycsICBtYXRjaDF0bzIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ3NzJywgbWF0Y2gxdG8yLCBtYXRjaDIpO1xuICAgIGFkZFBhcnNlVG9rZW4oWydzJywgJ3NzJ10sIFNFQ09ORCk7XG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICB2YXIgZ2V0U2V0U2Vjb25kID0gbWFrZUdldFNldCgnU2Vjb25kcycsIGZhbHNlKTtcblxuICAgIC8vIEZPUk1BVFRJTkdcblxuICAgIGFkZEZvcm1hdFRva2VuKCdTJywgMCwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gfn4odGhpcy5taWxsaXNlY29uZCgpIC8gMTAwKTtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKDAsIFsnU1MnLCAyXSwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gfn4odGhpcy5taWxsaXNlY29uZCgpIC8gMTApO1xuICAgIH0pO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydTU1MnLCAzXSwgMCwgJ21pbGxpc2Vjb25kJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydTU1NTJywgNF0sIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWlsbGlzZWNvbmQoKSAqIDEwO1xuICAgIH0pO1xuICAgIGFkZEZvcm1hdFRva2VuKDAsIFsnU1NTU1MnLCA1XSwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5taWxsaXNlY29uZCgpICogMTAwO1xuICAgIH0pO1xuICAgIGFkZEZvcm1hdFRva2VuKDAsIFsnU1NTU1NTJywgNl0sIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWlsbGlzZWNvbmQoKSAqIDEwMDA7XG4gICAgfSk7XG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydTU1NTU1NTJywgN10sIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWlsbGlzZWNvbmQoKSAqIDEwMDAwO1xuICAgIH0pO1xuICAgIGFkZEZvcm1hdFRva2VuKDAsIFsnU1NTU1NTU1MnLCA4XSwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5taWxsaXNlY29uZCgpICogMTAwMDAwO1xuICAgIH0pO1xuICAgIGFkZEZvcm1hdFRva2VuKDAsIFsnU1NTU1NTU1NTJywgOV0sIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWlsbGlzZWNvbmQoKSAqIDEwMDAwMDA7XG4gICAgfSk7XG5cblxuICAgIC8vIEFMSUFTRVNcblxuICAgIGFkZFVuaXRBbGlhcygnbWlsbGlzZWNvbmQnLCAnbXMnKTtcblxuICAgIC8vIFBSSU9SSVRZXG5cbiAgICBhZGRVbml0UHJpb3JpdHkoJ21pbGxpc2Vjb25kJywgMTYpO1xuXG4gICAgLy8gUEFSU0lOR1xuXG4gICAgYWRkUmVnZXhUb2tlbignUycsICAgIG1hdGNoMXRvMywgbWF0Y2gxKTtcbiAgICBhZGRSZWdleFRva2VuKCdTUycsICAgbWF0Y2gxdG8zLCBtYXRjaDIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ1NTUycsICBtYXRjaDF0bzMsIG1hdGNoMyk7XG5cbiAgICB2YXIgdG9rZW47XG4gICAgZm9yICh0b2tlbiA9ICdTU1NTJzsgdG9rZW4ubGVuZ3RoIDw9IDk7IHRva2VuICs9ICdTJykge1xuICAgICAgICBhZGRSZWdleFRva2VuKHRva2VuLCBtYXRjaFVuc2lnbmVkKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwYXJzZU1zKGlucHV0LCBhcnJheSkge1xuICAgICAgICBhcnJheVtNSUxMSVNFQ09ORF0gPSB0b0ludCgoJzAuJyArIGlucHV0KSAqIDEwMDApO1xuICAgIH1cblxuICAgIGZvciAodG9rZW4gPSAnUyc7IHRva2VuLmxlbmd0aCA8PSA5OyB0b2tlbiArPSAnUycpIHtcbiAgICAgICAgYWRkUGFyc2VUb2tlbih0b2tlbiwgcGFyc2VNcyk7XG4gICAgfVxuICAgIC8vIE1PTUVOVFNcblxuICAgIHZhciBnZXRTZXRNaWxsaXNlY29uZCA9IG1ha2VHZXRTZXQoJ01pbGxpc2Vjb25kcycsIGZhbHNlKTtcblxuICAgIC8vIEZPUk1BVFRJTkdcblxuICAgIGFkZEZvcm1hdFRva2VuKCd6JywgIDAsIDAsICd6b25lQWJicicpO1xuICAgIGFkZEZvcm1hdFRva2VuKCd6eicsIDAsIDAsICd6b25lTmFtZScpO1xuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgZnVuY3Rpb24gZ2V0Wm9uZUFiYnIgKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNVVEMgPyAnVVRDJyA6ICcnO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFpvbmVOYW1lICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzVVRDID8gJ0Nvb3JkaW5hdGVkIFVuaXZlcnNhbCBUaW1lJyA6ICcnO1xuICAgIH1cblxuICAgIHZhciBwcm90byA9IE1vbWVudC5wcm90b3R5cGU7XG5cbiAgICBwcm90by5hZGQgICAgICAgICAgICAgICA9IGFkZDtcbiAgICBwcm90by5jYWxlbmRhciAgICAgICAgICA9IGNhbGVuZGFyJDE7XG4gICAgcHJvdG8uY2xvbmUgICAgICAgICAgICAgPSBjbG9uZTtcbiAgICBwcm90by5kaWZmICAgICAgICAgICAgICA9IGRpZmY7XG4gICAgcHJvdG8uZW5kT2YgICAgICAgICAgICAgPSBlbmRPZjtcbiAgICBwcm90by5mb3JtYXQgICAgICAgICAgICA9IGZvcm1hdDtcbiAgICBwcm90by5mcm9tICAgICAgICAgICAgICA9IGZyb207XG4gICAgcHJvdG8uZnJvbU5vdyAgICAgICAgICAgPSBmcm9tTm93O1xuICAgIHByb3RvLnRvICAgICAgICAgICAgICAgID0gdG87XG4gICAgcHJvdG8udG9Ob3cgICAgICAgICAgICAgPSB0b05vdztcbiAgICBwcm90by5nZXQgICAgICAgICAgICAgICA9IHN0cmluZ0dldDtcbiAgICBwcm90by5pbnZhbGlkQXQgICAgICAgICA9IGludmFsaWRBdDtcbiAgICBwcm90by5pc0FmdGVyICAgICAgICAgICA9IGlzQWZ0ZXI7XG4gICAgcHJvdG8uaXNCZWZvcmUgICAgICAgICAgPSBpc0JlZm9yZTtcbiAgICBwcm90by5pc0JldHdlZW4gICAgICAgICA9IGlzQmV0d2VlbjtcbiAgICBwcm90by5pc1NhbWUgICAgICAgICAgICA9IGlzU2FtZTtcbiAgICBwcm90by5pc1NhbWVPckFmdGVyICAgICA9IGlzU2FtZU9yQWZ0ZXI7XG4gICAgcHJvdG8uaXNTYW1lT3JCZWZvcmUgICAgPSBpc1NhbWVPckJlZm9yZTtcbiAgICBwcm90by5pc1ZhbGlkICAgICAgICAgICA9IGlzVmFsaWQkMjtcbiAgICBwcm90by5sYW5nICAgICAgICAgICAgICA9IGxhbmc7XG4gICAgcHJvdG8ubG9jYWxlICAgICAgICAgICAgPSBsb2NhbGU7XG4gICAgcHJvdG8ubG9jYWxlRGF0YSAgICAgICAgPSBsb2NhbGVEYXRhO1xuICAgIHByb3RvLm1heCAgICAgICAgICAgICAgID0gcHJvdG90eXBlTWF4O1xuICAgIHByb3RvLm1pbiAgICAgICAgICAgICAgID0gcHJvdG90eXBlTWluO1xuICAgIHByb3RvLnBhcnNpbmdGbGFncyAgICAgID0gcGFyc2luZ0ZsYWdzO1xuICAgIHByb3RvLnNldCAgICAgICAgICAgICAgID0gc3RyaW5nU2V0O1xuICAgIHByb3RvLnN0YXJ0T2YgICAgICAgICAgID0gc3RhcnRPZjtcbiAgICBwcm90by5zdWJ0cmFjdCAgICAgICAgICA9IHN1YnRyYWN0O1xuICAgIHByb3RvLnRvQXJyYXkgICAgICAgICAgID0gdG9BcnJheTtcbiAgICBwcm90by50b09iamVjdCAgICAgICAgICA9IHRvT2JqZWN0O1xuICAgIHByb3RvLnRvRGF0ZSAgICAgICAgICAgID0gdG9EYXRlO1xuICAgIHByb3RvLnRvSVNPU3RyaW5nICAgICAgID0gdG9JU09TdHJpbmc7XG4gICAgcHJvdG8uaW5zcGVjdCAgICAgICAgICAgPSBpbnNwZWN0O1xuICAgIHByb3RvLnRvSlNPTiAgICAgICAgICAgID0gdG9KU09OO1xuICAgIHByb3RvLnRvU3RyaW5nICAgICAgICAgID0gdG9TdHJpbmc7XG4gICAgcHJvdG8udW5peCAgICAgICAgICAgICAgPSB1bml4O1xuICAgIHByb3RvLnZhbHVlT2YgICAgICAgICAgID0gdmFsdWVPZjtcbiAgICBwcm90by5jcmVhdGlvbkRhdGEgICAgICA9IGNyZWF0aW9uRGF0YTtcbiAgICBwcm90by55ZWFyICAgICAgID0gZ2V0U2V0WWVhcjtcbiAgICBwcm90by5pc0xlYXBZZWFyID0gZ2V0SXNMZWFwWWVhcjtcbiAgICBwcm90by53ZWVrWWVhciAgICA9IGdldFNldFdlZWtZZWFyO1xuICAgIHByb3RvLmlzb1dlZWtZZWFyID0gZ2V0U2V0SVNPV2Vla1llYXI7XG4gICAgcHJvdG8ucXVhcnRlciA9IHByb3RvLnF1YXJ0ZXJzID0gZ2V0U2V0UXVhcnRlcjtcbiAgICBwcm90by5tb250aCAgICAgICA9IGdldFNldE1vbnRoO1xuICAgIHByb3RvLmRheXNJbk1vbnRoID0gZ2V0RGF5c0luTW9udGg7XG4gICAgcHJvdG8ud2VlayAgICAgICAgICAgPSBwcm90by53ZWVrcyAgICAgICAgPSBnZXRTZXRXZWVrO1xuICAgIHByb3RvLmlzb1dlZWsgICAgICAgID0gcHJvdG8uaXNvV2Vla3MgICAgID0gZ2V0U2V0SVNPV2VlaztcbiAgICBwcm90by53ZWVrc0luWWVhciAgICA9IGdldFdlZWtzSW5ZZWFyO1xuICAgIHByb3RvLmlzb1dlZWtzSW5ZZWFyID0gZ2V0SVNPV2Vla3NJblllYXI7XG4gICAgcHJvdG8uZGF0ZSAgICAgICA9IGdldFNldERheU9mTW9udGg7XG4gICAgcHJvdG8uZGF5ICAgICAgICA9IHByb3RvLmRheXMgICAgICAgICAgICAgPSBnZXRTZXREYXlPZldlZWs7XG4gICAgcHJvdG8ud2Vla2RheSAgICA9IGdldFNldExvY2FsZURheU9mV2VlaztcbiAgICBwcm90by5pc29XZWVrZGF5ID0gZ2V0U2V0SVNPRGF5T2ZXZWVrO1xuICAgIHByb3RvLmRheU9mWWVhciAgPSBnZXRTZXREYXlPZlllYXI7XG4gICAgcHJvdG8uaG91ciA9IHByb3RvLmhvdXJzID0gZ2V0U2V0SG91cjtcbiAgICBwcm90by5taW51dGUgPSBwcm90by5taW51dGVzID0gZ2V0U2V0TWludXRlO1xuICAgIHByb3RvLnNlY29uZCA9IHByb3RvLnNlY29uZHMgPSBnZXRTZXRTZWNvbmQ7XG4gICAgcHJvdG8ubWlsbGlzZWNvbmQgPSBwcm90by5taWxsaXNlY29uZHMgPSBnZXRTZXRNaWxsaXNlY29uZDtcbiAgICBwcm90by51dGNPZmZzZXQgICAgICAgICAgICA9IGdldFNldE9mZnNldDtcbiAgICBwcm90by51dGMgICAgICAgICAgICAgICAgICA9IHNldE9mZnNldFRvVVRDO1xuICAgIHByb3RvLmxvY2FsICAgICAgICAgICAgICAgID0gc2V0T2Zmc2V0VG9Mb2NhbDtcbiAgICBwcm90by5wYXJzZVpvbmUgICAgICAgICAgICA9IHNldE9mZnNldFRvUGFyc2VkT2Zmc2V0O1xuICAgIHByb3RvLmhhc0FsaWduZWRIb3VyT2Zmc2V0ID0gaGFzQWxpZ25lZEhvdXJPZmZzZXQ7XG4gICAgcHJvdG8uaXNEU1QgICAgICAgICAgICAgICAgPSBpc0RheWxpZ2h0U2F2aW5nVGltZTtcbiAgICBwcm90by5pc0xvY2FsICAgICAgICAgICAgICA9IGlzTG9jYWw7XG4gICAgcHJvdG8uaXNVdGNPZmZzZXQgICAgICAgICAgPSBpc1V0Y09mZnNldDtcbiAgICBwcm90by5pc1V0YyAgICAgICAgICAgICAgICA9IGlzVXRjO1xuICAgIHByb3RvLmlzVVRDICAgICAgICAgICAgICAgID0gaXNVdGM7XG4gICAgcHJvdG8uem9uZUFiYnIgPSBnZXRab25lQWJicjtcbiAgICBwcm90by56b25lTmFtZSA9IGdldFpvbmVOYW1lO1xuICAgIHByb3RvLmRhdGVzICA9IGRlcHJlY2F0ZSgnZGF0ZXMgYWNjZXNzb3IgaXMgZGVwcmVjYXRlZC4gVXNlIGRhdGUgaW5zdGVhZC4nLCBnZXRTZXREYXlPZk1vbnRoKTtcbiAgICBwcm90by5tb250aHMgPSBkZXByZWNhdGUoJ21vbnRocyBhY2Nlc3NvciBpcyBkZXByZWNhdGVkLiBVc2UgbW9udGggaW5zdGVhZCcsIGdldFNldE1vbnRoKTtcbiAgICBwcm90by55ZWFycyAgPSBkZXByZWNhdGUoJ3llYXJzIGFjY2Vzc29yIGlzIGRlcHJlY2F0ZWQuIFVzZSB5ZWFyIGluc3RlYWQnLCBnZXRTZXRZZWFyKTtcbiAgICBwcm90by56b25lICAgPSBkZXByZWNhdGUoJ21vbWVudCgpLnpvbmUgaXMgZGVwcmVjYXRlZCwgdXNlIG1vbWVudCgpLnV0Y09mZnNldCBpbnN0ZWFkLiBodHRwOi8vbW9tZW50anMuY29tL2d1aWRlcy8jL3dhcm5pbmdzL3pvbmUvJywgZ2V0U2V0Wm9uZSk7XG4gICAgcHJvdG8uaXNEU1RTaGlmdGVkID0gZGVwcmVjYXRlKCdpc0RTVFNoaWZ0ZWQgaXMgZGVwcmVjYXRlZC4gU2VlIGh0dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMvd2FybmluZ3MvZHN0LXNoaWZ0ZWQvIGZvciBtb3JlIGluZm9ybWF0aW9uJywgaXNEYXlsaWdodFNhdmluZ1RpbWVTaGlmdGVkKTtcblxuICAgIGZ1bmN0aW9uIGNyZWF0ZVVuaXggKGlucHV0KSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVMb2NhbChpbnB1dCAqIDEwMDApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZUluWm9uZSAoKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVMb2NhbC5hcHBseShudWxsLCBhcmd1bWVudHMpLnBhcnNlWm9uZSgpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHByZVBhcnNlUG9zdEZvcm1hdCAoc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBzdHJpbmc7XG4gICAgfVxuXG4gICAgdmFyIHByb3RvJDEgPSBMb2NhbGUucHJvdG90eXBlO1xuXG4gICAgcHJvdG8kMS5jYWxlbmRhciAgICAgICAgPSBjYWxlbmRhcjtcbiAgICBwcm90byQxLmxvbmdEYXRlRm9ybWF0ICA9IGxvbmdEYXRlRm9ybWF0O1xuICAgIHByb3RvJDEuaW52YWxpZERhdGUgICAgID0gaW52YWxpZERhdGU7XG4gICAgcHJvdG8kMS5vcmRpbmFsICAgICAgICAgPSBvcmRpbmFsO1xuICAgIHByb3RvJDEucHJlcGFyc2UgICAgICAgID0gcHJlUGFyc2VQb3N0Rm9ybWF0O1xuICAgIHByb3RvJDEucG9zdGZvcm1hdCAgICAgID0gcHJlUGFyc2VQb3N0Rm9ybWF0O1xuICAgIHByb3RvJDEucmVsYXRpdmVUaW1lICAgID0gcmVsYXRpdmVUaW1lO1xuICAgIHByb3RvJDEucGFzdEZ1dHVyZSAgICAgID0gcGFzdEZ1dHVyZTtcbiAgICBwcm90byQxLnNldCAgICAgICAgICAgICA9IHNldDtcblxuICAgIHByb3RvJDEubW9udGhzICAgICAgICAgICAgPSAgICAgICAgbG9jYWxlTW9udGhzO1xuICAgIHByb3RvJDEubW9udGhzU2hvcnQgICAgICAgPSAgICAgICAgbG9jYWxlTW9udGhzU2hvcnQ7XG4gICAgcHJvdG8kMS5tb250aHNQYXJzZSAgICAgICA9ICAgICAgICBsb2NhbGVNb250aHNQYXJzZTtcbiAgICBwcm90byQxLm1vbnRoc1JlZ2V4ICAgICAgID0gbW9udGhzUmVnZXg7XG4gICAgcHJvdG8kMS5tb250aHNTaG9ydFJlZ2V4ICA9IG1vbnRoc1Nob3J0UmVnZXg7XG4gICAgcHJvdG8kMS53ZWVrID0gbG9jYWxlV2VlaztcbiAgICBwcm90byQxLmZpcnN0RGF5T2ZZZWFyID0gbG9jYWxlRmlyc3REYXlPZlllYXI7XG4gICAgcHJvdG8kMS5maXJzdERheU9mV2VlayA9IGxvY2FsZUZpcnN0RGF5T2ZXZWVrO1xuXG4gICAgcHJvdG8kMS53ZWVrZGF5cyAgICAgICA9ICAgICAgICBsb2NhbGVXZWVrZGF5cztcbiAgICBwcm90byQxLndlZWtkYXlzTWluICAgID0gICAgICAgIGxvY2FsZVdlZWtkYXlzTWluO1xuICAgIHByb3RvJDEud2Vla2RheXNTaG9ydCAgPSAgICAgICAgbG9jYWxlV2Vla2RheXNTaG9ydDtcbiAgICBwcm90byQxLndlZWtkYXlzUGFyc2UgID0gICAgICAgIGxvY2FsZVdlZWtkYXlzUGFyc2U7XG5cbiAgICBwcm90byQxLndlZWtkYXlzUmVnZXggICAgICAgPSAgICAgICAgd2Vla2RheXNSZWdleDtcbiAgICBwcm90byQxLndlZWtkYXlzU2hvcnRSZWdleCAgPSAgICAgICAgd2Vla2RheXNTaG9ydFJlZ2V4O1xuICAgIHByb3RvJDEud2Vla2RheXNNaW5SZWdleCAgICA9ICAgICAgICB3ZWVrZGF5c01pblJlZ2V4O1xuXG4gICAgcHJvdG8kMS5pc1BNID0gbG9jYWxlSXNQTTtcbiAgICBwcm90byQxLm1lcmlkaWVtID0gbG9jYWxlTWVyaWRpZW07XG5cbiAgICBmdW5jdGlvbiBnZXQkMSAoZm9ybWF0LCBpbmRleCwgZmllbGQsIHNldHRlcikge1xuICAgICAgICB2YXIgbG9jYWxlID0gZ2V0TG9jYWxlKCk7XG4gICAgICAgIHZhciB1dGMgPSBjcmVhdGVVVEMoKS5zZXQoc2V0dGVyLCBpbmRleCk7XG4gICAgICAgIHJldHVybiBsb2NhbGVbZmllbGRdKHV0YywgZm9ybWF0KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaXN0TW9udGhzSW1wbCAoZm9ybWF0LCBpbmRleCwgZmllbGQpIHtcbiAgICAgICAgaWYgKGlzTnVtYmVyKGZvcm1hdCkpIHtcbiAgICAgICAgICAgIGluZGV4ID0gZm9ybWF0O1xuICAgICAgICAgICAgZm9ybWF0ID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9ybWF0ID0gZm9ybWF0IHx8ICcnO1xuXG4gICAgICAgIGlmIChpbmRleCAhPSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0JDEoZm9ybWF0LCBpbmRleCwgZmllbGQsICdtb250aCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGk7XG4gICAgICAgIHZhciBvdXQgPSBbXTtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IDEyOyBpKyspIHtcbiAgICAgICAgICAgIG91dFtpXSA9IGdldCQxKGZvcm1hdCwgaSwgZmllbGQsICdtb250aCcpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvdXQ7XG4gICAgfVxuXG4gICAgLy8gKClcbiAgICAvLyAoNSlcbiAgICAvLyAoZm10LCA1KVxuICAgIC8vIChmbXQpXG4gICAgLy8gKHRydWUpXG4gICAgLy8gKHRydWUsIDUpXG4gICAgLy8gKHRydWUsIGZtdCwgNSlcbiAgICAvLyAodHJ1ZSwgZm10KVxuICAgIGZ1bmN0aW9uIGxpc3RXZWVrZGF5c0ltcGwgKGxvY2FsZVNvcnRlZCwgZm9ybWF0LCBpbmRleCwgZmllbGQpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBsb2NhbGVTb3J0ZWQgPT09ICdib29sZWFuJykge1xuICAgICAgICAgICAgaWYgKGlzTnVtYmVyKGZvcm1hdCkpIHtcbiAgICAgICAgICAgICAgICBpbmRleCA9IGZvcm1hdDtcbiAgICAgICAgICAgICAgICBmb3JtYXQgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvcm1hdCA9IGZvcm1hdCB8fCAnJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZvcm1hdCA9IGxvY2FsZVNvcnRlZDtcbiAgICAgICAgICAgIGluZGV4ID0gZm9ybWF0O1xuICAgICAgICAgICAgbG9jYWxlU29ydGVkID0gZmFsc2U7XG5cbiAgICAgICAgICAgIGlmIChpc051bWJlcihmb3JtYXQpKSB7XG4gICAgICAgICAgICAgICAgaW5kZXggPSBmb3JtYXQ7XG4gICAgICAgICAgICAgICAgZm9ybWF0ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3JtYXQgPSBmb3JtYXQgfHwgJyc7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgbG9jYWxlID0gZ2V0TG9jYWxlKCksXG4gICAgICAgICAgICBzaGlmdCA9IGxvY2FsZVNvcnRlZCA/IGxvY2FsZS5fd2Vlay5kb3cgOiAwO1xuXG4gICAgICAgIGlmIChpbmRleCAhPSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0JDEoZm9ybWF0LCAoaW5kZXggKyBzaGlmdCkgJSA3LCBmaWVsZCwgJ2RheScpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGk7XG4gICAgICAgIHZhciBvdXQgPSBbXTtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IDc7IGkrKykge1xuICAgICAgICAgICAgb3V0W2ldID0gZ2V0JDEoZm9ybWF0LCAoaSArIHNoaWZ0KSAlIDcsIGZpZWxkLCAnZGF5Jyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG91dDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaXN0TW9udGhzIChmb3JtYXQsIGluZGV4KSB7XG4gICAgICAgIHJldHVybiBsaXN0TW9udGhzSW1wbChmb3JtYXQsIGluZGV4LCAnbW9udGhzJyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGlzdE1vbnRoc1Nob3J0IChmb3JtYXQsIGluZGV4KSB7XG4gICAgICAgIHJldHVybiBsaXN0TW9udGhzSW1wbChmb3JtYXQsIGluZGV4LCAnbW9udGhzU2hvcnQnKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaXN0V2Vla2RheXMgKGxvY2FsZVNvcnRlZCwgZm9ybWF0LCBpbmRleCkge1xuICAgICAgICByZXR1cm4gbGlzdFdlZWtkYXlzSW1wbChsb2NhbGVTb3J0ZWQsIGZvcm1hdCwgaW5kZXgsICd3ZWVrZGF5cycpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpc3RXZWVrZGF5c1Nob3J0IChsb2NhbGVTb3J0ZWQsIGZvcm1hdCwgaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIGxpc3RXZWVrZGF5c0ltcGwobG9jYWxlU29ydGVkLCBmb3JtYXQsIGluZGV4LCAnd2Vla2RheXNTaG9ydCcpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpc3RXZWVrZGF5c01pbiAobG9jYWxlU29ydGVkLCBmb3JtYXQsIGluZGV4KSB7XG4gICAgICAgIHJldHVybiBsaXN0V2Vla2RheXNJbXBsKGxvY2FsZVNvcnRlZCwgZm9ybWF0LCBpbmRleCwgJ3dlZWtkYXlzTWluJyk7XG4gICAgfVxuXG4gICAgZ2V0U2V0R2xvYmFsTG9jYWxlKCdlbicsIHtcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9KHRofHN0fG5kfHJkKS8sXG4gICAgICAgIG9yZGluYWwgOiBmdW5jdGlvbiAobnVtYmVyKSB7XG4gICAgICAgICAgICB2YXIgYiA9IG51bWJlciAlIDEwLFxuICAgICAgICAgICAgICAgIG91dHB1dCA9ICh0b0ludChudW1iZXIgJSAxMDAgLyAxMCkgPT09IDEpID8gJ3RoJyA6XG4gICAgICAgICAgICAgICAgKGIgPT09IDEpID8gJ3N0JyA6XG4gICAgICAgICAgICAgICAgKGIgPT09IDIpID8gJ25kJyA6XG4gICAgICAgICAgICAgICAgKGIgPT09IDMpID8gJ3JkJyA6ICd0aCc7XG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgb3V0cHV0O1xuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBTaWRlIGVmZmVjdCBpbXBvcnRzXG5cbiAgICBob29rcy5sYW5nID0gZGVwcmVjYXRlKCdtb21lbnQubGFuZyBpcyBkZXByZWNhdGVkLiBVc2UgbW9tZW50LmxvY2FsZSBpbnN0ZWFkLicsIGdldFNldEdsb2JhbExvY2FsZSk7XG4gICAgaG9va3MubGFuZ0RhdGEgPSBkZXByZWNhdGUoJ21vbWVudC5sYW5nRGF0YSBpcyBkZXByZWNhdGVkLiBVc2UgbW9tZW50LmxvY2FsZURhdGEgaW5zdGVhZC4nLCBnZXRMb2NhbGUpO1xuXG4gICAgdmFyIG1hdGhBYnMgPSBNYXRoLmFicztcblxuICAgIGZ1bmN0aW9uIGFicyAoKSB7XG4gICAgICAgIHZhciBkYXRhICAgICAgICAgICA9IHRoaXMuX2RhdGE7XG5cbiAgICAgICAgdGhpcy5fbWlsbGlzZWNvbmRzID0gbWF0aEFicyh0aGlzLl9taWxsaXNlY29uZHMpO1xuICAgICAgICB0aGlzLl9kYXlzICAgICAgICAgPSBtYXRoQWJzKHRoaXMuX2RheXMpO1xuICAgICAgICB0aGlzLl9tb250aHMgICAgICAgPSBtYXRoQWJzKHRoaXMuX21vbnRocyk7XG5cbiAgICAgICAgZGF0YS5taWxsaXNlY29uZHMgID0gbWF0aEFicyhkYXRhLm1pbGxpc2Vjb25kcyk7XG4gICAgICAgIGRhdGEuc2Vjb25kcyAgICAgICA9IG1hdGhBYnMoZGF0YS5zZWNvbmRzKTtcbiAgICAgICAgZGF0YS5taW51dGVzICAgICAgID0gbWF0aEFicyhkYXRhLm1pbnV0ZXMpO1xuICAgICAgICBkYXRhLmhvdXJzICAgICAgICAgPSBtYXRoQWJzKGRhdGEuaG91cnMpO1xuICAgICAgICBkYXRhLm1vbnRocyAgICAgICAgPSBtYXRoQWJzKGRhdGEubW9udGhzKTtcbiAgICAgICAgZGF0YS55ZWFycyAgICAgICAgID0gbWF0aEFicyhkYXRhLnllYXJzKTtcblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhZGRTdWJ0cmFjdCQxIChkdXJhdGlvbiwgaW5wdXQsIHZhbHVlLCBkaXJlY3Rpb24pIHtcbiAgICAgICAgdmFyIG90aGVyID0gY3JlYXRlRHVyYXRpb24oaW5wdXQsIHZhbHVlKTtcblxuICAgICAgICBkdXJhdGlvbi5fbWlsbGlzZWNvbmRzICs9IGRpcmVjdGlvbiAqIG90aGVyLl9taWxsaXNlY29uZHM7XG4gICAgICAgIGR1cmF0aW9uLl9kYXlzICAgICAgICAgKz0gZGlyZWN0aW9uICogb3RoZXIuX2RheXM7XG4gICAgICAgIGR1cmF0aW9uLl9tb250aHMgICAgICAgKz0gZGlyZWN0aW9uICogb3RoZXIuX21vbnRocztcblxuICAgICAgICByZXR1cm4gZHVyYXRpb24uX2J1YmJsZSgpO1xuICAgIH1cblxuICAgIC8vIHN1cHBvcnRzIG9ubHkgMi4wLXN0eWxlIGFkZCgxLCAncycpIG9yIGFkZChkdXJhdGlvbilcbiAgICBmdW5jdGlvbiBhZGQkMSAoaW5wdXQsIHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBhZGRTdWJ0cmFjdCQxKHRoaXMsIGlucHV0LCB2YWx1ZSwgMSk7XG4gICAgfVxuXG4gICAgLy8gc3VwcG9ydHMgb25seSAyLjAtc3R5bGUgc3VidHJhY3QoMSwgJ3MnKSBvciBzdWJ0cmFjdChkdXJhdGlvbilcbiAgICBmdW5jdGlvbiBzdWJ0cmFjdCQxIChpbnB1dCwgdmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGFkZFN1YnRyYWN0JDEodGhpcywgaW5wdXQsIHZhbHVlLCAtMSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYWJzQ2VpbCAobnVtYmVyKSB7XG4gICAgICAgIGlmIChudW1iZXIgPCAwKSB7XG4gICAgICAgICAgICByZXR1cm4gTWF0aC5mbG9vcihudW1iZXIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIE1hdGguY2VpbChudW1iZXIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYnViYmxlICgpIHtcbiAgICAgICAgdmFyIG1pbGxpc2Vjb25kcyA9IHRoaXMuX21pbGxpc2Vjb25kcztcbiAgICAgICAgdmFyIGRheXMgICAgICAgICA9IHRoaXMuX2RheXM7XG4gICAgICAgIHZhciBtb250aHMgICAgICAgPSB0aGlzLl9tb250aHM7XG4gICAgICAgIHZhciBkYXRhICAgICAgICAgPSB0aGlzLl9kYXRhO1xuICAgICAgICB2YXIgc2Vjb25kcywgbWludXRlcywgaG91cnMsIHllYXJzLCBtb250aHNGcm9tRGF5cztcblxuICAgICAgICAvLyBpZiB3ZSBoYXZlIGEgbWl4IG9mIHBvc2l0aXZlIGFuZCBuZWdhdGl2ZSB2YWx1ZXMsIGJ1YmJsZSBkb3duIGZpcnN0XG4gICAgICAgIC8vIGNoZWNrOiBodHRwczovL2dpdGh1Yi5jb20vbW9tZW50L21vbWVudC9pc3N1ZXMvMjE2NlxuICAgICAgICBpZiAoISgobWlsbGlzZWNvbmRzID49IDAgJiYgZGF5cyA+PSAwICYmIG1vbnRocyA+PSAwKSB8fFxuICAgICAgICAgICAgICAgIChtaWxsaXNlY29uZHMgPD0gMCAmJiBkYXlzIDw9IDAgJiYgbW9udGhzIDw9IDApKSkge1xuICAgICAgICAgICAgbWlsbGlzZWNvbmRzICs9IGFic0NlaWwobW9udGhzVG9EYXlzKG1vbnRocykgKyBkYXlzKSAqIDg2NGU1O1xuICAgICAgICAgICAgZGF5cyA9IDA7XG4gICAgICAgICAgICBtb250aHMgPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVGhlIGZvbGxvd2luZyBjb2RlIGJ1YmJsZXMgdXAgdmFsdWVzLCBzZWUgdGhlIHRlc3RzIGZvclxuICAgICAgICAvLyBleGFtcGxlcyBvZiB3aGF0IHRoYXQgbWVhbnMuXG4gICAgICAgIGRhdGEubWlsbGlzZWNvbmRzID0gbWlsbGlzZWNvbmRzICUgMTAwMDtcblxuICAgICAgICBzZWNvbmRzICAgICAgICAgICA9IGFic0Zsb29yKG1pbGxpc2Vjb25kcyAvIDEwMDApO1xuICAgICAgICBkYXRhLnNlY29uZHMgICAgICA9IHNlY29uZHMgJSA2MDtcblxuICAgICAgICBtaW51dGVzICAgICAgICAgICA9IGFic0Zsb29yKHNlY29uZHMgLyA2MCk7XG4gICAgICAgIGRhdGEubWludXRlcyAgICAgID0gbWludXRlcyAlIDYwO1xuXG4gICAgICAgIGhvdXJzICAgICAgICAgICAgID0gYWJzRmxvb3IobWludXRlcyAvIDYwKTtcbiAgICAgICAgZGF0YS5ob3VycyAgICAgICAgPSBob3VycyAlIDI0O1xuXG4gICAgICAgIGRheXMgKz0gYWJzRmxvb3IoaG91cnMgLyAyNCk7XG5cbiAgICAgICAgLy8gY29udmVydCBkYXlzIHRvIG1vbnRoc1xuICAgICAgICBtb250aHNGcm9tRGF5cyA9IGFic0Zsb29yKGRheXNUb01vbnRocyhkYXlzKSk7XG4gICAgICAgIG1vbnRocyArPSBtb250aHNGcm9tRGF5cztcbiAgICAgICAgZGF5cyAtPSBhYnNDZWlsKG1vbnRoc1RvRGF5cyhtb250aHNGcm9tRGF5cykpO1xuXG4gICAgICAgIC8vIDEyIG1vbnRocyAtPiAxIHllYXJcbiAgICAgICAgeWVhcnMgPSBhYnNGbG9vcihtb250aHMgLyAxMik7XG4gICAgICAgIG1vbnRocyAlPSAxMjtcblxuICAgICAgICBkYXRhLmRheXMgICA9IGRheXM7XG4gICAgICAgIGRhdGEubW9udGhzID0gbW9udGhzO1xuICAgICAgICBkYXRhLnllYXJzICA9IHllYXJzO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRheXNUb01vbnRocyAoZGF5cykge1xuICAgICAgICAvLyA0MDAgeWVhcnMgaGF2ZSAxNDYwOTcgZGF5cyAodGFraW5nIGludG8gYWNjb3VudCBsZWFwIHllYXIgcnVsZXMpXG4gICAgICAgIC8vIDQwMCB5ZWFycyBoYXZlIDEyIG1vbnRocyA9PT0gNDgwMFxuICAgICAgICByZXR1cm4gZGF5cyAqIDQ4MDAgLyAxNDYwOTc7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbW9udGhzVG9EYXlzIChtb250aHMpIHtcbiAgICAgICAgLy8gdGhlIHJldmVyc2Ugb2YgZGF5c1RvTW9udGhzXG4gICAgICAgIHJldHVybiBtb250aHMgKiAxNDYwOTcgLyA0ODAwO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFzICh1bml0cykge1xuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gTmFOO1xuICAgICAgICB9XG4gICAgICAgIHZhciBkYXlzO1xuICAgICAgICB2YXIgbW9udGhzO1xuICAgICAgICB2YXIgbWlsbGlzZWNvbmRzID0gdGhpcy5fbWlsbGlzZWNvbmRzO1xuXG4gICAgICAgIHVuaXRzID0gbm9ybWFsaXplVW5pdHModW5pdHMpO1xuXG4gICAgICAgIGlmICh1bml0cyA9PT0gJ21vbnRoJyB8fCB1bml0cyA9PT0gJ3F1YXJ0ZXInIHx8IHVuaXRzID09PSAneWVhcicpIHtcbiAgICAgICAgICAgIGRheXMgPSB0aGlzLl9kYXlzICsgbWlsbGlzZWNvbmRzIC8gODY0ZTU7XG4gICAgICAgICAgICBtb250aHMgPSB0aGlzLl9tb250aHMgKyBkYXlzVG9Nb250aHMoZGF5cyk7XG4gICAgICAgICAgICBzd2l0Y2ggKHVuaXRzKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnbW9udGgnOiAgIHJldHVybiBtb250aHM7XG4gICAgICAgICAgICAgICAgY2FzZSAncXVhcnRlcic6IHJldHVybiBtb250aHMgLyAzO1xuICAgICAgICAgICAgICAgIGNhc2UgJ3llYXInOiAgICByZXR1cm4gbW9udGhzIC8gMTI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBoYW5kbGUgbWlsbGlzZWNvbmRzIHNlcGFyYXRlbHkgYmVjYXVzZSBvZiBmbG9hdGluZyBwb2ludCBtYXRoIGVycm9ycyAoaXNzdWUgIzE4NjcpXG4gICAgICAgICAgICBkYXlzID0gdGhpcy5fZGF5cyArIE1hdGgucm91bmQobW9udGhzVG9EYXlzKHRoaXMuX21vbnRocykpO1xuICAgICAgICAgICAgc3dpdGNoICh1bml0cykge1xuICAgICAgICAgICAgICAgIGNhc2UgJ3dlZWsnICAgOiByZXR1cm4gZGF5cyAvIDcgICAgICsgbWlsbGlzZWNvbmRzIC8gNjA0OGU1O1xuICAgICAgICAgICAgICAgIGNhc2UgJ2RheScgICAgOiByZXR1cm4gZGF5cyAgICAgICAgICsgbWlsbGlzZWNvbmRzIC8gODY0ZTU7XG4gICAgICAgICAgICAgICAgY2FzZSAnaG91cicgICA6IHJldHVybiBkYXlzICogMjQgICAgKyBtaWxsaXNlY29uZHMgLyAzNmU1O1xuICAgICAgICAgICAgICAgIGNhc2UgJ21pbnV0ZScgOiByZXR1cm4gZGF5cyAqIDE0NDAgICsgbWlsbGlzZWNvbmRzIC8gNmU0O1xuICAgICAgICAgICAgICAgIGNhc2UgJ3NlY29uZCcgOiByZXR1cm4gZGF5cyAqIDg2NDAwICsgbWlsbGlzZWNvbmRzIC8gMTAwMDtcbiAgICAgICAgICAgICAgICAvLyBNYXRoLmZsb29yIHByZXZlbnRzIGZsb2F0aW5nIHBvaW50IG1hdGggZXJyb3JzIGhlcmVcbiAgICAgICAgICAgICAgICBjYXNlICdtaWxsaXNlY29uZCc6IHJldHVybiBNYXRoLmZsb29yKGRheXMgKiA4NjRlNSkgKyBtaWxsaXNlY29uZHM7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDogdGhyb3cgbmV3IEVycm9yKCdVbmtub3duIHVuaXQgJyArIHVuaXRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFRPRE86IFVzZSB0aGlzLmFzKCdtcycpP1xuICAgIGZ1bmN0aW9uIHZhbHVlT2YkMSAoKSB7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBOYU47XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHRoaXMuX21pbGxpc2Vjb25kcyArXG4gICAgICAgICAgICB0aGlzLl9kYXlzICogODY0ZTUgK1xuICAgICAgICAgICAgKHRoaXMuX21vbnRocyAlIDEyKSAqIDI1OTJlNiArXG4gICAgICAgICAgICB0b0ludCh0aGlzLl9tb250aHMgLyAxMikgKiAzMTUzNmU2XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWFrZUFzIChhbGlhcykge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXMoYWxpYXMpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIHZhciBhc01pbGxpc2Vjb25kcyA9IG1ha2VBcygnbXMnKTtcbiAgICB2YXIgYXNTZWNvbmRzICAgICAgPSBtYWtlQXMoJ3MnKTtcbiAgICB2YXIgYXNNaW51dGVzICAgICAgPSBtYWtlQXMoJ20nKTtcbiAgICB2YXIgYXNIb3VycyAgICAgICAgPSBtYWtlQXMoJ2gnKTtcbiAgICB2YXIgYXNEYXlzICAgICAgICAgPSBtYWtlQXMoJ2QnKTtcbiAgICB2YXIgYXNXZWVrcyAgICAgICAgPSBtYWtlQXMoJ3cnKTtcbiAgICB2YXIgYXNNb250aHMgICAgICAgPSBtYWtlQXMoJ00nKTtcbiAgICB2YXIgYXNRdWFydGVycyAgICAgPSBtYWtlQXMoJ1EnKTtcbiAgICB2YXIgYXNZZWFycyAgICAgICAgPSBtYWtlQXMoJ3knKTtcblxuICAgIGZ1bmN0aW9uIGNsb25lJDEgKCkge1xuICAgICAgICByZXR1cm4gY3JlYXRlRHVyYXRpb24odGhpcyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0JDIgKHVuaXRzKSB7XG4gICAgICAgIHVuaXRzID0gbm9ybWFsaXplVW5pdHModW5pdHMpO1xuICAgICAgICByZXR1cm4gdGhpcy5pc1ZhbGlkKCkgPyB0aGlzW3VuaXRzICsgJ3MnXSgpIDogTmFOO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1ha2VHZXR0ZXIobmFtZSkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaXNWYWxpZCgpID8gdGhpcy5fZGF0YVtuYW1lXSA6IE5hTjtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICB2YXIgbWlsbGlzZWNvbmRzID0gbWFrZUdldHRlcignbWlsbGlzZWNvbmRzJyk7XG4gICAgdmFyIHNlY29uZHMgICAgICA9IG1ha2VHZXR0ZXIoJ3NlY29uZHMnKTtcbiAgICB2YXIgbWludXRlcyAgICAgID0gbWFrZUdldHRlcignbWludXRlcycpO1xuICAgIHZhciBob3VycyAgICAgICAgPSBtYWtlR2V0dGVyKCdob3VycycpO1xuICAgIHZhciBkYXlzICAgICAgICAgPSBtYWtlR2V0dGVyKCdkYXlzJyk7XG4gICAgdmFyIG1vbnRocyAgICAgICA9IG1ha2VHZXR0ZXIoJ21vbnRocycpO1xuICAgIHZhciB5ZWFycyAgICAgICAgPSBtYWtlR2V0dGVyKCd5ZWFycycpO1xuXG4gICAgZnVuY3Rpb24gd2Vla3MgKCkge1xuICAgICAgICByZXR1cm4gYWJzRmxvb3IodGhpcy5kYXlzKCkgLyA3KTtcbiAgICB9XG5cbiAgICB2YXIgcm91bmQgPSBNYXRoLnJvdW5kO1xuICAgIHZhciB0aHJlc2hvbGRzID0ge1xuICAgICAgICBzczogNDQsICAgICAgICAgLy8gYSBmZXcgc2Vjb25kcyB0byBzZWNvbmRzXG4gICAgICAgIHMgOiA0NSwgICAgICAgICAvLyBzZWNvbmRzIHRvIG1pbnV0ZVxuICAgICAgICBtIDogNDUsICAgICAgICAgLy8gbWludXRlcyB0byBob3VyXG4gICAgICAgIGggOiAyMiwgICAgICAgICAvLyBob3VycyB0byBkYXlcbiAgICAgICAgZCA6IDI2LCAgICAgICAgIC8vIGRheXMgdG8gbW9udGhcbiAgICAgICAgTSA6IDExICAgICAgICAgIC8vIG1vbnRocyB0byB5ZWFyXG4gICAgfTtcblxuICAgIC8vIGhlbHBlciBmdW5jdGlvbiBmb3IgbW9tZW50LmZuLmZyb20sIG1vbWVudC5mbi5mcm9tTm93LCBhbmQgbW9tZW50LmR1cmF0aW9uLmZuLmh1bWFuaXplXG4gICAgZnVuY3Rpb24gc3Vic3RpdHV0ZVRpbWVBZ28oc3RyaW5nLCBudW1iZXIsIHdpdGhvdXRTdWZmaXgsIGlzRnV0dXJlLCBsb2NhbGUpIHtcbiAgICAgICAgcmV0dXJuIGxvY2FsZS5yZWxhdGl2ZVRpbWUobnVtYmVyIHx8IDEsICEhd2l0aG91dFN1ZmZpeCwgc3RyaW5nLCBpc0Z1dHVyZSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVsYXRpdmVUaW1lJDEgKHBvc05lZ0R1cmF0aW9uLCB3aXRob3V0U3VmZml4LCBsb2NhbGUpIHtcbiAgICAgICAgdmFyIGR1cmF0aW9uID0gY3JlYXRlRHVyYXRpb24ocG9zTmVnRHVyYXRpb24pLmFicygpO1xuICAgICAgICB2YXIgc2Vjb25kcyAgPSByb3VuZChkdXJhdGlvbi5hcygncycpKTtcbiAgICAgICAgdmFyIG1pbnV0ZXMgID0gcm91bmQoZHVyYXRpb24uYXMoJ20nKSk7XG4gICAgICAgIHZhciBob3VycyAgICA9IHJvdW5kKGR1cmF0aW9uLmFzKCdoJykpO1xuICAgICAgICB2YXIgZGF5cyAgICAgPSByb3VuZChkdXJhdGlvbi5hcygnZCcpKTtcbiAgICAgICAgdmFyIG1vbnRocyAgID0gcm91bmQoZHVyYXRpb24uYXMoJ00nKSk7XG4gICAgICAgIHZhciB5ZWFycyAgICA9IHJvdW5kKGR1cmF0aW9uLmFzKCd5JykpO1xuXG4gICAgICAgIHZhciBhID0gc2Vjb25kcyA8PSB0aHJlc2hvbGRzLnNzICYmIFsncycsIHNlY29uZHNdICB8fFxuICAgICAgICAgICAgICAgIHNlY29uZHMgPCB0aHJlc2hvbGRzLnMgICAmJiBbJ3NzJywgc2Vjb25kc10gfHxcbiAgICAgICAgICAgICAgICBtaW51dGVzIDw9IDEgICAgICAgICAgICAgJiYgWydtJ10gICAgICAgICAgIHx8XG4gICAgICAgICAgICAgICAgbWludXRlcyA8IHRocmVzaG9sZHMubSAgICYmIFsnbW0nLCBtaW51dGVzXSB8fFxuICAgICAgICAgICAgICAgIGhvdXJzICAgPD0gMSAgICAgICAgICAgICAmJiBbJ2gnXSAgICAgICAgICAgfHxcbiAgICAgICAgICAgICAgICBob3VycyAgIDwgdGhyZXNob2xkcy5oICAgJiYgWydoaCcsIGhvdXJzXSAgIHx8XG4gICAgICAgICAgICAgICAgZGF5cyAgICA8PSAxICAgICAgICAgICAgICYmIFsnZCddICAgICAgICAgICB8fFxuICAgICAgICAgICAgICAgIGRheXMgICAgPCB0aHJlc2hvbGRzLmQgICAmJiBbJ2RkJywgZGF5c10gICAgfHxcbiAgICAgICAgICAgICAgICBtb250aHMgIDw9IDEgICAgICAgICAgICAgJiYgWydNJ10gICAgICAgICAgIHx8XG4gICAgICAgICAgICAgICAgbW9udGhzICA8IHRocmVzaG9sZHMuTSAgICYmIFsnTU0nLCBtb250aHNdICB8fFxuICAgICAgICAgICAgICAgIHllYXJzICAgPD0gMSAgICAgICAgICAgICAmJiBbJ3knXSAgICAgICAgICAgfHwgWyd5eScsIHllYXJzXTtcblxuICAgICAgICBhWzJdID0gd2l0aG91dFN1ZmZpeDtcbiAgICAgICAgYVszXSA9ICtwb3NOZWdEdXJhdGlvbiA+IDA7XG4gICAgICAgIGFbNF0gPSBsb2NhbGU7XG4gICAgICAgIHJldHVybiBzdWJzdGl0dXRlVGltZUFnby5hcHBseShudWxsLCBhKTtcbiAgICB9XG5cbiAgICAvLyBUaGlzIGZ1bmN0aW9uIGFsbG93cyB5b3UgdG8gc2V0IHRoZSByb3VuZGluZyBmdW5jdGlvbiBmb3IgcmVsYXRpdmUgdGltZSBzdHJpbmdzXG4gICAgZnVuY3Rpb24gZ2V0U2V0UmVsYXRpdmVUaW1lUm91bmRpbmcgKHJvdW5kaW5nRnVuY3Rpb24pIHtcbiAgICAgICAgaWYgKHJvdW5kaW5nRnVuY3Rpb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIHJvdW5kO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2Yocm91bmRpbmdGdW5jdGlvbikgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJvdW5kID0gcm91bmRpbmdGdW5jdGlvbjtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBUaGlzIGZ1bmN0aW9uIGFsbG93cyB5b3UgdG8gc2V0IGEgdGhyZXNob2xkIGZvciByZWxhdGl2ZSB0aW1lIHN0cmluZ3NcbiAgICBmdW5jdGlvbiBnZXRTZXRSZWxhdGl2ZVRpbWVUaHJlc2hvbGQgKHRocmVzaG9sZCwgbGltaXQpIHtcbiAgICAgICAgaWYgKHRocmVzaG9sZHNbdGhyZXNob2xkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxpbWl0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aHJlc2hvbGRzW3RocmVzaG9sZF07XG4gICAgICAgIH1cbiAgICAgICAgdGhyZXNob2xkc1t0aHJlc2hvbGRdID0gbGltaXQ7XG4gICAgICAgIGlmICh0aHJlc2hvbGQgPT09ICdzJykge1xuICAgICAgICAgICAgdGhyZXNob2xkcy5zcyA9IGxpbWl0IC0gMTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBodW1hbml6ZSAod2l0aFN1ZmZpeCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkuaW52YWxpZERhdGUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBsb2NhbGUgPSB0aGlzLmxvY2FsZURhdGEoKTtcbiAgICAgICAgdmFyIG91dHB1dCA9IHJlbGF0aXZlVGltZSQxKHRoaXMsICF3aXRoU3VmZml4LCBsb2NhbGUpO1xuXG4gICAgICAgIGlmICh3aXRoU3VmZml4KSB7XG4gICAgICAgICAgICBvdXRwdXQgPSBsb2NhbGUucGFzdEZ1dHVyZSgrdGhpcywgb3V0cHV0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBsb2NhbGUucG9zdGZvcm1hdChvdXRwdXQpO1xuICAgIH1cblxuICAgIHZhciBhYnMkMSA9IE1hdGguYWJzO1xuXG4gICAgZnVuY3Rpb24gc2lnbih4KSB7XG4gICAgICAgIHJldHVybiAoKHggPiAwKSAtICh4IDwgMCkpIHx8ICt4O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRvSVNPU3RyaW5nJDEoKSB7XG4gICAgICAgIC8vIGZvciBJU08gc3RyaW5ncyB3ZSBkbyBub3QgdXNlIHRoZSBub3JtYWwgYnViYmxpbmcgcnVsZXM6XG4gICAgICAgIC8vICAqIG1pbGxpc2Vjb25kcyBidWJibGUgdXAgdW50aWwgdGhleSBiZWNvbWUgaG91cnNcbiAgICAgICAgLy8gICogZGF5cyBkbyBub3QgYnViYmxlIGF0IGFsbFxuICAgICAgICAvLyAgKiBtb250aHMgYnViYmxlIHVwIHVudGlsIHRoZXkgYmVjb21lIHllYXJzXG4gICAgICAgIC8vIFRoaXMgaXMgYmVjYXVzZSB0aGVyZSBpcyBubyBjb250ZXh0LWZyZWUgY29udmVyc2lvbiBiZXR3ZWVuIGhvdXJzIGFuZCBkYXlzXG4gICAgICAgIC8vICh0aGluayBvZiBjbG9jayBjaGFuZ2VzKVxuICAgICAgICAvLyBhbmQgYWxzbyBub3QgYmV0d2VlbiBkYXlzIGFuZCBtb250aHMgKDI4LTMxIGRheXMgcGVyIG1vbnRoKVxuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkuaW52YWxpZERhdGUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBzZWNvbmRzID0gYWJzJDEodGhpcy5fbWlsbGlzZWNvbmRzKSAvIDEwMDA7XG4gICAgICAgIHZhciBkYXlzICAgICAgICAgPSBhYnMkMSh0aGlzLl9kYXlzKTtcbiAgICAgICAgdmFyIG1vbnRocyAgICAgICA9IGFicyQxKHRoaXMuX21vbnRocyk7XG4gICAgICAgIHZhciBtaW51dGVzLCBob3VycywgeWVhcnM7XG5cbiAgICAgICAgLy8gMzYwMCBzZWNvbmRzIC0+IDYwIG1pbnV0ZXMgLT4gMSBob3VyXG4gICAgICAgIG1pbnV0ZXMgICAgICAgICAgID0gYWJzRmxvb3Ioc2Vjb25kcyAvIDYwKTtcbiAgICAgICAgaG91cnMgICAgICAgICAgICAgPSBhYnNGbG9vcihtaW51dGVzIC8gNjApO1xuICAgICAgICBzZWNvbmRzICU9IDYwO1xuICAgICAgICBtaW51dGVzICU9IDYwO1xuXG4gICAgICAgIC8vIDEyIG1vbnRocyAtPiAxIHllYXJcbiAgICAgICAgeWVhcnMgID0gYWJzRmxvb3IobW9udGhzIC8gMTIpO1xuICAgICAgICBtb250aHMgJT0gMTI7XG5cblxuICAgICAgICAvLyBpbnNwaXJlZCBieSBodHRwczovL2dpdGh1Yi5jb20vZG9yZGlsbGUvbW9tZW50LWlzb2R1cmF0aW9uL2Jsb2IvbWFzdGVyL21vbWVudC5pc29kdXJhdGlvbi5qc1xuICAgICAgICB2YXIgWSA9IHllYXJzO1xuICAgICAgICB2YXIgTSA9IG1vbnRocztcbiAgICAgICAgdmFyIEQgPSBkYXlzO1xuICAgICAgICB2YXIgaCA9IGhvdXJzO1xuICAgICAgICB2YXIgbSA9IG1pbnV0ZXM7XG4gICAgICAgIHZhciBzID0gc2Vjb25kcyA/IHNlY29uZHMudG9GaXhlZCgzKS5yZXBsYWNlKC9cXC4/MCskLywgJycpIDogJyc7XG4gICAgICAgIHZhciB0b3RhbCA9IHRoaXMuYXNTZWNvbmRzKCk7XG5cbiAgICAgICAgaWYgKCF0b3RhbCkge1xuICAgICAgICAgICAgLy8gdGhpcyBpcyB0aGUgc2FtZSBhcyBDIydzIChOb2RhKSBhbmQgcHl0aG9uIChpc29kYXRlKS4uLlxuICAgICAgICAgICAgLy8gYnV0IG5vdCBvdGhlciBKUyAoZ29vZy5kYXRlKVxuICAgICAgICAgICAgcmV0dXJuICdQMEQnO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHRvdGFsU2lnbiA9IHRvdGFsIDwgMCA/ICctJyA6ICcnO1xuICAgICAgICB2YXIgeW1TaWduID0gc2lnbih0aGlzLl9tb250aHMpICE9PSBzaWduKHRvdGFsKSA/ICctJyA6ICcnO1xuICAgICAgICB2YXIgZGF5c1NpZ24gPSBzaWduKHRoaXMuX2RheXMpICE9PSBzaWduKHRvdGFsKSA/ICctJyA6ICcnO1xuICAgICAgICB2YXIgaG1zU2lnbiA9IHNpZ24odGhpcy5fbWlsbGlzZWNvbmRzKSAhPT0gc2lnbih0b3RhbCkgPyAnLScgOiAnJztcblxuICAgICAgICByZXR1cm4gdG90YWxTaWduICsgJ1AnICtcbiAgICAgICAgICAgIChZID8geW1TaWduICsgWSArICdZJyA6ICcnKSArXG4gICAgICAgICAgICAoTSA/IHltU2lnbiArIE0gKyAnTScgOiAnJykgK1xuICAgICAgICAgICAgKEQgPyBkYXlzU2lnbiArIEQgKyAnRCcgOiAnJykgK1xuICAgICAgICAgICAgKChoIHx8IG0gfHwgcykgPyAnVCcgOiAnJykgK1xuICAgICAgICAgICAgKGggPyBobXNTaWduICsgaCArICdIJyA6ICcnKSArXG4gICAgICAgICAgICAobSA/IGhtc1NpZ24gKyBtICsgJ00nIDogJycpICtcbiAgICAgICAgICAgIChzID8gaG1zU2lnbiArIHMgKyAnUycgOiAnJyk7XG4gICAgfVxuXG4gICAgdmFyIHByb3RvJDIgPSBEdXJhdGlvbi5wcm90b3R5cGU7XG5cbiAgICBwcm90byQyLmlzVmFsaWQgICAgICAgID0gaXNWYWxpZCQxO1xuICAgIHByb3RvJDIuYWJzICAgICAgICAgICAgPSBhYnM7XG4gICAgcHJvdG8kMi5hZGQgICAgICAgICAgICA9IGFkZCQxO1xuICAgIHByb3RvJDIuc3VidHJhY3QgICAgICAgPSBzdWJ0cmFjdCQxO1xuICAgIHByb3RvJDIuYXMgICAgICAgICAgICAgPSBhcztcbiAgICBwcm90byQyLmFzTWlsbGlzZWNvbmRzID0gYXNNaWxsaXNlY29uZHM7XG4gICAgcHJvdG8kMi5hc1NlY29uZHMgICAgICA9IGFzU2Vjb25kcztcbiAgICBwcm90byQyLmFzTWludXRlcyAgICAgID0gYXNNaW51dGVzO1xuICAgIHByb3RvJDIuYXNIb3VycyAgICAgICAgPSBhc0hvdXJzO1xuICAgIHByb3RvJDIuYXNEYXlzICAgICAgICAgPSBhc0RheXM7XG4gICAgcHJvdG8kMi5hc1dlZWtzICAgICAgICA9IGFzV2Vla3M7XG4gICAgcHJvdG8kMi5hc01vbnRocyAgICAgICA9IGFzTW9udGhzO1xuICAgIHByb3RvJDIuYXNRdWFydGVycyAgICAgPSBhc1F1YXJ0ZXJzO1xuICAgIHByb3RvJDIuYXNZZWFycyAgICAgICAgPSBhc1llYXJzO1xuICAgIHByb3RvJDIudmFsdWVPZiAgICAgICAgPSB2YWx1ZU9mJDE7XG4gICAgcHJvdG8kMi5fYnViYmxlICAgICAgICA9IGJ1YmJsZTtcbiAgICBwcm90byQyLmNsb25lICAgICAgICAgID0gY2xvbmUkMTtcbiAgICBwcm90byQyLmdldCAgICAgICAgICAgID0gZ2V0JDI7XG4gICAgcHJvdG8kMi5taWxsaXNlY29uZHMgICA9IG1pbGxpc2Vjb25kcztcbiAgICBwcm90byQyLnNlY29uZHMgICAgICAgID0gc2Vjb25kcztcbiAgICBwcm90byQyLm1pbnV0ZXMgICAgICAgID0gbWludXRlcztcbiAgICBwcm90byQyLmhvdXJzICAgICAgICAgID0gaG91cnM7XG4gICAgcHJvdG8kMi5kYXlzICAgICAgICAgICA9IGRheXM7XG4gICAgcHJvdG8kMi53ZWVrcyAgICAgICAgICA9IHdlZWtzO1xuICAgIHByb3RvJDIubW9udGhzICAgICAgICAgPSBtb250aHM7XG4gICAgcHJvdG8kMi55ZWFycyAgICAgICAgICA9IHllYXJzO1xuICAgIHByb3RvJDIuaHVtYW5pemUgICAgICAgPSBodW1hbml6ZTtcbiAgICBwcm90byQyLnRvSVNPU3RyaW5nICAgID0gdG9JU09TdHJpbmckMTtcbiAgICBwcm90byQyLnRvU3RyaW5nICAgICAgID0gdG9JU09TdHJpbmckMTtcbiAgICBwcm90byQyLnRvSlNPTiAgICAgICAgID0gdG9JU09TdHJpbmckMTtcbiAgICBwcm90byQyLmxvY2FsZSAgICAgICAgID0gbG9jYWxlO1xuICAgIHByb3RvJDIubG9jYWxlRGF0YSAgICAgPSBsb2NhbGVEYXRhO1xuXG4gICAgcHJvdG8kMi50b0lzb1N0cmluZyA9IGRlcHJlY2F0ZSgndG9Jc29TdHJpbmcoKSBpcyBkZXByZWNhdGVkLiBQbGVhc2UgdXNlIHRvSVNPU3RyaW5nKCkgaW5zdGVhZCAobm90aWNlIHRoZSBjYXBpdGFscyknLCB0b0lTT1N0cmluZyQxKTtcbiAgICBwcm90byQyLmxhbmcgPSBsYW5nO1xuXG4gICAgLy8gU2lkZSBlZmZlY3QgaW1wb3J0c1xuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ1gnLCAwLCAwLCAndW5peCcpO1xuICAgIGFkZEZvcm1hdFRva2VuKCd4JywgMCwgMCwgJ3ZhbHVlT2YnKTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ3gnLCBtYXRjaFNpZ25lZCk7XG4gICAgYWRkUmVnZXhUb2tlbignWCcsIG1hdGNoVGltZXN0YW1wKTtcbiAgICBhZGRQYXJzZVRva2VuKCdYJywgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnKSB7XG4gICAgICAgIGNvbmZpZy5fZCA9IG5ldyBEYXRlKHBhcnNlRmxvYXQoaW5wdXQsIDEwKSAqIDEwMDApO1xuICAgIH0pO1xuICAgIGFkZFBhcnNlVG9rZW4oJ3gnLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcpIHtcbiAgICAgICAgY29uZmlnLl9kID0gbmV3IERhdGUodG9JbnQoaW5wdXQpKTtcbiAgICB9KTtcblxuICAgIC8vIFNpZGUgZWZmZWN0IGltcG9ydHNcblxuXG4gICAgaG9va3MudmVyc2lvbiA9ICcyLjI0LjAnO1xuXG4gICAgc2V0SG9va0NhbGxiYWNrKGNyZWF0ZUxvY2FsKTtcblxuICAgIGhvb2tzLmZuICAgICAgICAgICAgICAgICAgICA9IHByb3RvO1xuICAgIGhvb2tzLm1pbiAgICAgICAgICAgICAgICAgICA9IG1pbjtcbiAgICBob29rcy5tYXggICAgICAgICAgICAgICAgICAgPSBtYXg7XG4gICAgaG9va3Mubm93ICAgICAgICAgICAgICAgICAgID0gbm93O1xuICAgIGhvb2tzLnV0YyAgICAgICAgICAgICAgICAgICA9IGNyZWF0ZVVUQztcbiAgICBob29rcy51bml4ICAgICAgICAgICAgICAgICAgPSBjcmVhdGVVbml4O1xuICAgIGhvb2tzLm1vbnRocyAgICAgICAgICAgICAgICA9IGxpc3RNb250aHM7XG4gICAgaG9va3MuaXNEYXRlICAgICAgICAgICAgICAgID0gaXNEYXRlO1xuICAgIGhvb2tzLmxvY2FsZSAgICAgICAgICAgICAgICA9IGdldFNldEdsb2JhbExvY2FsZTtcbiAgICBob29rcy5pbnZhbGlkICAgICAgICAgICAgICAgPSBjcmVhdGVJbnZhbGlkO1xuICAgIGhvb2tzLmR1cmF0aW9uICAgICAgICAgICAgICA9IGNyZWF0ZUR1cmF0aW9uO1xuICAgIGhvb2tzLmlzTW9tZW50ICAgICAgICAgICAgICA9IGlzTW9tZW50O1xuICAgIGhvb2tzLndlZWtkYXlzICAgICAgICAgICAgICA9IGxpc3RXZWVrZGF5cztcbiAgICBob29rcy5wYXJzZVpvbmUgICAgICAgICAgICAgPSBjcmVhdGVJblpvbmU7XG4gICAgaG9va3MubG9jYWxlRGF0YSAgICAgICAgICAgID0gZ2V0TG9jYWxlO1xuICAgIGhvb2tzLmlzRHVyYXRpb24gICAgICAgICAgICA9IGlzRHVyYXRpb247XG4gICAgaG9va3MubW9udGhzU2hvcnQgICAgICAgICAgID0gbGlzdE1vbnRoc1Nob3J0O1xuICAgIGhvb2tzLndlZWtkYXlzTWluICAgICAgICAgICA9IGxpc3RXZWVrZGF5c01pbjtcbiAgICBob29rcy5kZWZpbmVMb2NhbGUgICAgICAgICAgPSBkZWZpbmVMb2NhbGU7XG4gICAgaG9va3MudXBkYXRlTG9jYWxlICAgICAgICAgID0gdXBkYXRlTG9jYWxlO1xuICAgIGhvb2tzLmxvY2FsZXMgICAgICAgICAgICAgICA9IGxpc3RMb2NhbGVzO1xuICAgIGhvb2tzLndlZWtkYXlzU2hvcnQgICAgICAgICA9IGxpc3RXZWVrZGF5c1Nob3J0O1xuICAgIGhvb2tzLm5vcm1hbGl6ZVVuaXRzICAgICAgICA9IG5vcm1hbGl6ZVVuaXRzO1xuICAgIGhvb2tzLnJlbGF0aXZlVGltZVJvdW5kaW5nICA9IGdldFNldFJlbGF0aXZlVGltZVJvdW5kaW5nO1xuICAgIGhvb2tzLnJlbGF0aXZlVGltZVRocmVzaG9sZCA9IGdldFNldFJlbGF0aXZlVGltZVRocmVzaG9sZDtcbiAgICBob29rcy5jYWxlbmRhckZvcm1hdCAgICAgICAgPSBnZXRDYWxlbmRhckZvcm1hdDtcbiAgICBob29rcy5wcm90b3R5cGUgICAgICAgICAgICAgPSBwcm90bztcblxuICAgIC8vIGN1cnJlbnRseSBIVE1MNSBpbnB1dCB0eXBlIG9ubHkgc3VwcG9ydHMgMjQtaG91ciBmb3JtYXRzXG4gICAgaG9va3MuSFRNTDVfRk1UID0ge1xuICAgICAgICBEQVRFVElNRV9MT0NBTDogJ1lZWVktTU0tRERUSEg6bW0nLCAgICAgICAgICAgICAvLyA8aW5wdXQgdHlwZT1cImRhdGV0aW1lLWxvY2FsXCIgLz5cbiAgICAgICAgREFURVRJTUVfTE9DQUxfU0VDT05EUzogJ1lZWVktTU0tRERUSEg6bW06c3MnLCAgLy8gPGlucHV0IHR5cGU9XCJkYXRldGltZS1sb2NhbFwiIHN0ZXA9XCIxXCIgLz5cbiAgICAgICAgREFURVRJTUVfTE9DQUxfTVM6ICdZWVlZLU1NLUREVEhIOm1tOnNzLlNTUycsICAgLy8gPGlucHV0IHR5cGU9XCJkYXRldGltZS1sb2NhbFwiIHN0ZXA9XCIwLjAwMVwiIC8+XG4gICAgICAgIERBVEU6ICdZWVlZLU1NLUREJywgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDxpbnB1dCB0eXBlPVwiZGF0ZVwiIC8+XG4gICAgICAgIFRJTUU6ICdISDptbScsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDxpbnB1dCB0eXBlPVwidGltZVwiIC8+XG4gICAgICAgIFRJTUVfU0VDT05EUzogJ0hIOm1tOnNzJywgICAgICAgICAgICAgICAgICAgICAgIC8vIDxpbnB1dCB0eXBlPVwidGltZVwiIHN0ZXA9XCIxXCIgLz5cbiAgICAgICAgVElNRV9NUzogJ0hIOm1tOnNzLlNTUycsICAgICAgICAgICAgICAgICAgICAgICAgLy8gPGlucHV0IHR5cGU9XCJ0aW1lXCIgc3RlcD1cIjAuMDAxXCIgLz5cbiAgICAgICAgV0VFSzogJ0dHR0ctW1ddV1cnLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gPGlucHV0IHR5cGU9XCJ3ZWVrXCIgLz5cbiAgICAgICAgTU9OVEg6ICdZWVlZLU1NJyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gPGlucHV0IHR5cGU9XCJtb250aFwiIC8+XG4gICAgfTtcblxuICAgIHJldHVybiBob29rcztcblxufSkpKTtcbiIsIi8qIVxuICogbXVzdGFjaGUuanMgLSBMb2dpYy1sZXNzIHt7bXVzdGFjaGV9fSB0ZW1wbGF0ZXMgd2l0aCBKYXZhU2NyaXB0XG4gKiBodHRwOi8vZ2l0aHViLmNvbS9qYW5sL211c3RhY2hlLmpzXG4gKi9cblxuLypnbG9iYWwgZGVmaW5lOiBmYWxzZSBNdXN0YWNoZTogdHJ1ZSovXG5cbihmdW5jdGlvbiBkZWZpbmVNdXN0YWNoZSAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gIGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgZXhwb3J0cyAmJiB0eXBlb2YgZXhwb3J0cy5ub2RlTmFtZSAhPT0gJ3N0cmluZycpIHtcbiAgICBmYWN0b3J5KGV4cG9ydHMpOyAvLyBDb21tb25KU1xuICB9IGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkge1xuICAgIGRlZmluZShbJ2V4cG9ydHMnXSwgZmFjdG9yeSk7IC8vIEFNRFxuICB9IGVsc2Uge1xuICAgIGdsb2JhbC5NdXN0YWNoZSA9IHt9O1xuICAgIGZhY3RvcnkoZ2xvYmFsLk11c3RhY2hlKTsgLy8gc2NyaXB0LCB3c2gsIGFzcFxuICB9XG59KHRoaXMsIGZ1bmN0aW9uIG11c3RhY2hlRmFjdG9yeSAobXVzdGFjaGUpIHtcblxuICB2YXIgb2JqZWN0VG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuICB2YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gaXNBcnJheVBvbHlmaWxsIChvYmplY3QpIHtcbiAgICByZXR1cm4gb2JqZWN0VG9TdHJpbmcuY2FsbChvYmplY3QpID09PSAnW29iamVjdCBBcnJheV0nO1xuICB9O1xuXG4gIGZ1bmN0aW9uIGlzRnVuY3Rpb24gKG9iamVjdCkge1xuICAgIHJldHVybiB0eXBlb2Ygb2JqZWN0ID09PSAnZnVuY3Rpb24nO1xuICB9XG5cbiAgLyoqXG4gICAqIE1vcmUgY29ycmVjdCB0eXBlb2Ygc3RyaW5nIGhhbmRsaW5nIGFycmF5XG4gICAqIHdoaWNoIG5vcm1hbGx5IHJldHVybnMgdHlwZW9mICdvYmplY3QnXG4gICAqL1xuICBmdW5jdGlvbiB0eXBlU3RyIChvYmopIHtcbiAgICByZXR1cm4gaXNBcnJheShvYmopID8gJ2FycmF5JyA6IHR5cGVvZiBvYmo7XG4gIH1cblxuICBmdW5jdGlvbiBlc2NhcGVSZWdFeHAgKHN0cmluZykge1xuICAgIHJldHVybiBzdHJpbmcucmVwbGFjZSgvW1xcLVxcW1xcXXt9KCkqKz8uLFxcXFxcXF4kfCNcXHNdL2csICdcXFxcJCYnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBOdWxsIHNhZmUgd2F5IG9mIGNoZWNraW5nIHdoZXRoZXIgb3Igbm90IGFuIG9iamVjdCxcbiAgICogaW5jbHVkaW5nIGl0cyBwcm90b3R5cGUsIGhhcyBhIGdpdmVuIHByb3BlcnR5XG4gICAqL1xuICBmdW5jdGlvbiBoYXNQcm9wZXJ0eSAob2JqLCBwcm9wTmFtZSkge1xuICAgIHJldHVybiBvYmogIT0gbnVsbCAmJiB0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiAocHJvcE5hbWUgaW4gb2JqKTtcbiAgfVxuXG4gIC8vIFdvcmthcm91bmQgZm9yIGh0dHBzOi8vaXNzdWVzLmFwYWNoZS5vcmcvamlyYS9icm93c2UvQ09VQ0hEQi01NzdcbiAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9qYW5sL211c3RhY2hlLmpzL2lzc3Vlcy8xODlcbiAgdmFyIHJlZ0V4cFRlc3QgPSBSZWdFeHAucHJvdG90eXBlLnRlc3Q7XG4gIGZ1bmN0aW9uIHRlc3RSZWdFeHAgKHJlLCBzdHJpbmcpIHtcbiAgICByZXR1cm4gcmVnRXhwVGVzdC5jYWxsKHJlLCBzdHJpbmcpO1xuICB9XG5cbiAgdmFyIG5vblNwYWNlUmUgPSAvXFxTLztcbiAgZnVuY3Rpb24gaXNXaGl0ZXNwYWNlIChzdHJpbmcpIHtcbiAgICByZXR1cm4gIXRlc3RSZWdFeHAobm9uU3BhY2VSZSwgc3RyaW5nKTtcbiAgfVxuXG4gIHZhciBlbnRpdHlNYXAgPSB7XG4gICAgJyYnOiAnJmFtcDsnLFxuICAgICc8JzogJyZsdDsnLFxuICAgICc+JzogJyZndDsnLFxuICAgICdcIic6ICcmcXVvdDsnLFxuICAgIFwiJ1wiOiAnJiMzOTsnLFxuICAgICcvJzogJyYjeDJGOycsXG4gICAgJ2AnOiAnJiN4NjA7JyxcbiAgICAnPSc6ICcmI3gzRDsnXG4gIH07XG5cbiAgZnVuY3Rpb24gZXNjYXBlSHRtbCAoc3RyaW5nKSB7XG4gICAgcmV0dXJuIFN0cmluZyhzdHJpbmcpLnJlcGxhY2UoL1smPD5cIidgPVxcL10vZywgZnVuY3Rpb24gZnJvbUVudGl0eU1hcCAocykge1xuICAgICAgcmV0dXJuIGVudGl0eU1hcFtzXTtcbiAgICB9KTtcbiAgfVxuXG4gIHZhciB3aGl0ZVJlID0gL1xccyovO1xuICB2YXIgc3BhY2VSZSA9IC9cXHMrLztcbiAgdmFyIGVxdWFsc1JlID0gL1xccyo9LztcbiAgdmFyIGN1cmx5UmUgPSAvXFxzKlxcfS87XG4gIHZhciB0YWdSZSA9IC8jfFxcXnxcXC98PnxcXHt8Jnw9fCEvO1xuXG4gIC8qKlxuICAgKiBCcmVha3MgdXAgdGhlIGdpdmVuIGB0ZW1wbGF0ZWAgc3RyaW5nIGludG8gYSB0cmVlIG9mIHRva2Vucy4gSWYgdGhlIGB0YWdzYFxuICAgKiBhcmd1bWVudCBpcyBnaXZlbiBoZXJlIGl0IG11c3QgYmUgYW4gYXJyYXkgd2l0aCB0d28gc3RyaW5nIHZhbHVlczogdGhlXG4gICAqIG9wZW5pbmcgYW5kIGNsb3NpbmcgdGFncyB1c2VkIGluIHRoZSB0ZW1wbGF0ZSAoZS5nLiBbIFwiPCVcIiwgXCIlPlwiIF0pLiBPZlxuICAgKiBjb3Vyc2UsIHRoZSBkZWZhdWx0IGlzIHRvIHVzZSBtdXN0YWNoZXMgKGkuZS4gbXVzdGFjaGUudGFncykuXG4gICAqXG4gICAqIEEgdG9rZW4gaXMgYW4gYXJyYXkgd2l0aCBhdCBsZWFzdCA0IGVsZW1lbnRzLiBUaGUgZmlyc3QgZWxlbWVudCBpcyB0aGVcbiAgICogbXVzdGFjaGUgc3ltYm9sIHRoYXQgd2FzIHVzZWQgaW5zaWRlIHRoZSB0YWcsIGUuZy4gXCIjXCIgb3IgXCImXCIuIElmIHRoZSB0YWdcbiAgICogZGlkIG5vdCBjb250YWluIGEgc3ltYm9sIChpLmUuIHt7bXlWYWx1ZX19KSB0aGlzIGVsZW1lbnQgaXMgXCJuYW1lXCIuIEZvclxuICAgKiBhbGwgdGV4dCB0aGF0IGFwcGVhcnMgb3V0c2lkZSBhIHN5bWJvbCB0aGlzIGVsZW1lbnQgaXMgXCJ0ZXh0XCIuXG4gICAqXG4gICAqIFRoZSBzZWNvbmQgZWxlbWVudCBvZiBhIHRva2VuIGlzIGl0cyBcInZhbHVlXCIuIEZvciBtdXN0YWNoZSB0YWdzIHRoaXMgaXNcbiAgICogd2hhdGV2ZXIgZWxzZSB3YXMgaW5zaWRlIHRoZSB0YWcgYmVzaWRlcyB0aGUgb3BlbmluZyBzeW1ib2wuIEZvciB0ZXh0IHRva2Vuc1xuICAgKiB0aGlzIGlzIHRoZSB0ZXh0IGl0c2VsZi5cbiAgICpcbiAgICogVGhlIHRoaXJkIGFuZCBmb3VydGggZWxlbWVudHMgb2YgdGhlIHRva2VuIGFyZSB0aGUgc3RhcnQgYW5kIGVuZCBpbmRpY2VzLFxuICAgKiByZXNwZWN0aXZlbHksIG9mIHRoZSB0b2tlbiBpbiB0aGUgb3JpZ2luYWwgdGVtcGxhdGUuXG4gICAqXG4gICAqIFRva2VucyB0aGF0IGFyZSB0aGUgcm9vdCBub2RlIG9mIGEgc3VidHJlZSBjb250YWluIHR3byBtb3JlIGVsZW1lbnRzOiAxKSBhblxuICAgKiBhcnJheSBvZiB0b2tlbnMgaW4gdGhlIHN1YnRyZWUgYW5kIDIpIHRoZSBpbmRleCBpbiB0aGUgb3JpZ2luYWwgdGVtcGxhdGUgYXRcbiAgICogd2hpY2ggdGhlIGNsb3NpbmcgdGFnIGZvciB0aGF0IHNlY3Rpb24gYmVnaW5zLlxuICAgKi9cbiAgZnVuY3Rpb24gcGFyc2VUZW1wbGF0ZSAodGVtcGxhdGUsIHRhZ3MpIHtcbiAgICBpZiAoIXRlbXBsYXRlKVxuICAgICAgcmV0dXJuIFtdO1xuXG4gICAgdmFyIHNlY3Rpb25zID0gW107ICAgICAvLyBTdGFjayB0byBob2xkIHNlY3Rpb24gdG9rZW5zXG4gICAgdmFyIHRva2VucyA9IFtdOyAgICAgICAvLyBCdWZmZXIgdG8gaG9sZCB0aGUgdG9rZW5zXG4gICAgdmFyIHNwYWNlcyA9IFtdOyAgICAgICAvLyBJbmRpY2VzIG9mIHdoaXRlc3BhY2UgdG9rZW5zIG9uIHRoZSBjdXJyZW50IGxpbmVcbiAgICB2YXIgaGFzVGFnID0gZmFsc2U7ICAgIC8vIElzIHRoZXJlIGEge3t0YWd9fSBvbiB0aGUgY3VycmVudCBsaW5lP1xuICAgIHZhciBub25TcGFjZSA9IGZhbHNlOyAgLy8gSXMgdGhlcmUgYSBub24tc3BhY2UgY2hhciBvbiB0aGUgY3VycmVudCBsaW5lP1xuXG4gICAgLy8gU3RyaXBzIGFsbCB3aGl0ZXNwYWNlIHRva2VucyBhcnJheSBmb3IgdGhlIGN1cnJlbnQgbGluZVxuICAgIC8vIGlmIHRoZXJlIHdhcyBhIHt7I3RhZ319IG9uIGl0IGFuZCBvdGhlcndpc2Ugb25seSBzcGFjZS5cbiAgICBmdW5jdGlvbiBzdHJpcFNwYWNlICgpIHtcbiAgICAgIGlmIChoYXNUYWcgJiYgIW5vblNwYWNlKSB7XG4gICAgICAgIHdoaWxlIChzcGFjZXMubGVuZ3RoKVxuICAgICAgICAgIGRlbGV0ZSB0b2tlbnNbc3BhY2VzLnBvcCgpXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNwYWNlcyA9IFtdO1xuICAgICAgfVxuXG4gICAgICBoYXNUYWcgPSBmYWxzZTtcbiAgICAgIG5vblNwYWNlID0gZmFsc2U7XG4gICAgfVxuXG4gICAgdmFyIG9wZW5pbmdUYWdSZSwgY2xvc2luZ1RhZ1JlLCBjbG9zaW5nQ3VybHlSZTtcbiAgICBmdW5jdGlvbiBjb21waWxlVGFncyAodGFnc1RvQ29tcGlsZSkge1xuICAgICAgaWYgKHR5cGVvZiB0YWdzVG9Db21waWxlID09PSAnc3RyaW5nJylcbiAgICAgICAgdGFnc1RvQ29tcGlsZSA9IHRhZ3NUb0NvbXBpbGUuc3BsaXQoc3BhY2VSZSwgMik7XG5cbiAgICAgIGlmICghaXNBcnJheSh0YWdzVG9Db21waWxlKSB8fCB0YWdzVG9Db21waWxlLmxlbmd0aCAhPT0gMilcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHRhZ3M6ICcgKyB0YWdzVG9Db21waWxlKTtcblxuICAgICAgb3BlbmluZ1RhZ1JlID0gbmV3IFJlZ0V4cChlc2NhcGVSZWdFeHAodGFnc1RvQ29tcGlsZVswXSkgKyAnXFxcXHMqJyk7XG4gICAgICBjbG9zaW5nVGFnUmUgPSBuZXcgUmVnRXhwKCdcXFxccyonICsgZXNjYXBlUmVnRXhwKHRhZ3NUb0NvbXBpbGVbMV0pKTtcbiAgICAgIGNsb3NpbmdDdXJseVJlID0gbmV3IFJlZ0V4cCgnXFxcXHMqJyArIGVzY2FwZVJlZ0V4cCgnfScgKyB0YWdzVG9Db21waWxlWzFdKSk7XG4gICAgfVxuXG4gICAgY29tcGlsZVRhZ3ModGFncyB8fCBtdXN0YWNoZS50YWdzKTtcblxuICAgIHZhciBzY2FubmVyID0gbmV3IFNjYW5uZXIodGVtcGxhdGUpO1xuXG4gICAgdmFyIHN0YXJ0LCB0eXBlLCB2YWx1ZSwgY2hyLCB0b2tlbiwgb3BlblNlY3Rpb247XG4gICAgd2hpbGUgKCFzY2FubmVyLmVvcygpKSB7XG4gICAgICBzdGFydCA9IHNjYW5uZXIucG9zO1xuXG4gICAgICAvLyBNYXRjaCBhbnkgdGV4dCBiZXR3ZWVuIHRhZ3MuXG4gICAgICB2YWx1ZSA9IHNjYW5uZXIuc2NhblVudGlsKG9wZW5pbmdUYWdSZSk7XG5cbiAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICBmb3IgKHZhciBpID0gMCwgdmFsdWVMZW5ndGggPSB2YWx1ZS5sZW5ndGg7IGkgPCB2YWx1ZUxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgY2hyID0gdmFsdWUuY2hhckF0KGkpO1xuXG4gICAgICAgICAgaWYgKGlzV2hpdGVzcGFjZShjaHIpKSB7XG4gICAgICAgICAgICBzcGFjZXMucHVzaCh0b2tlbnMubGVuZ3RoKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbm9uU3BhY2UgPSB0cnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRva2Vucy5wdXNoKFsgJ3RleHQnLCBjaHIsIHN0YXJ0LCBzdGFydCArIDEgXSk7XG4gICAgICAgICAgc3RhcnQgKz0gMTtcblxuICAgICAgICAgIC8vIENoZWNrIGZvciB3aGl0ZXNwYWNlIG9uIHRoZSBjdXJyZW50IGxpbmUuXG4gICAgICAgICAgaWYgKGNociA9PT0gJ1xcbicpXG4gICAgICAgICAgICBzdHJpcFNwYWNlKCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gTWF0Y2ggdGhlIG9wZW5pbmcgdGFnLlxuICAgICAgaWYgKCFzY2FubmVyLnNjYW4ob3BlbmluZ1RhZ1JlKSlcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGhhc1RhZyA9IHRydWU7XG5cbiAgICAgIC8vIEdldCB0aGUgdGFnIHR5cGUuXG4gICAgICB0eXBlID0gc2Nhbm5lci5zY2FuKHRhZ1JlKSB8fCAnbmFtZSc7XG4gICAgICBzY2FubmVyLnNjYW4od2hpdGVSZSk7XG5cbiAgICAgIC8vIEdldCB0aGUgdGFnIHZhbHVlLlxuICAgICAgaWYgKHR5cGUgPT09ICc9Jykge1xuICAgICAgICB2YWx1ZSA9IHNjYW5uZXIuc2NhblVudGlsKGVxdWFsc1JlKTtcbiAgICAgICAgc2Nhbm5lci5zY2FuKGVxdWFsc1JlKTtcbiAgICAgICAgc2Nhbm5lci5zY2FuVW50aWwoY2xvc2luZ1RhZ1JlKTtcbiAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ3snKSB7XG4gICAgICAgIHZhbHVlID0gc2Nhbm5lci5zY2FuVW50aWwoY2xvc2luZ0N1cmx5UmUpO1xuICAgICAgICBzY2FubmVyLnNjYW4oY3VybHlSZSk7XG4gICAgICAgIHNjYW5uZXIuc2NhblVudGlsKGNsb3NpbmdUYWdSZSk7XG4gICAgICAgIHR5cGUgPSAnJic7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YWx1ZSA9IHNjYW5uZXIuc2NhblVudGlsKGNsb3NpbmdUYWdSZSk7XG4gICAgICB9XG5cbiAgICAgIC8vIE1hdGNoIHRoZSBjbG9zaW5nIHRhZy5cbiAgICAgIGlmICghc2Nhbm5lci5zY2FuKGNsb3NpbmdUYWdSZSkpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVW5jbG9zZWQgdGFnIGF0ICcgKyBzY2FubmVyLnBvcyk7XG5cbiAgICAgIHRva2VuID0gWyB0eXBlLCB2YWx1ZSwgc3RhcnQsIHNjYW5uZXIucG9zIF07XG4gICAgICB0b2tlbnMucHVzaCh0b2tlbik7XG5cbiAgICAgIGlmICh0eXBlID09PSAnIycgfHwgdHlwZSA9PT0gJ14nKSB7XG4gICAgICAgIHNlY3Rpb25zLnB1c2godG9rZW4pO1xuICAgICAgfSBlbHNlIGlmICh0eXBlID09PSAnLycpIHtcbiAgICAgICAgLy8gQ2hlY2sgc2VjdGlvbiBuZXN0aW5nLlxuICAgICAgICBvcGVuU2VjdGlvbiA9IHNlY3Rpb25zLnBvcCgpO1xuXG4gICAgICAgIGlmICghb3BlblNlY3Rpb24pXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbm9wZW5lZCBzZWN0aW9uIFwiJyArIHZhbHVlICsgJ1wiIGF0ICcgKyBzdGFydCk7XG5cbiAgICAgICAgaWYgKG9wZW5TZWN0aW9uWzFdICE9PSB2YWx1ZSlcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuY2xvc2VkIHNlY3Rpb24gXCInICsgb3BlblNlY3Rpb25bMV0gKyAnXCIgYXQgJyArIHN0YXJ0KTtcbiAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ25hbWUnIHx8IHR5cGUgPT09ICd7JyB8fCB0eXBlID09PSAnJicpIHtcbiAgICAgICAgbm9uU3BhY2UgPSB0cnVlO1xuICAgICAgfSBlbHNlIGlmICh0eXBlID09PSAnPScpIHtcbiAgICAgICAgLy8gU2V0IHRoZSB0YWdzIGZvciB0aGUgbmV4dCB0aW1lIGFyb3VuZC5cbiAgICAgICAgY29tcGlsZVRhZ3ModmFsdWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIE1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gb3BlbiBzZWN0aW9ucyB3aGVuIHdlJ3JlIGRvbmUuXG4gICAgb3BlblNlY3Rpb24gPSBzZWN0aW9ucy5wb3AoKTtcblxuICAgIGlmIChvcGVuU2VjdGlvbilcbiAgICAgIHRocm93IG5ldyBFcnJvcignVW5jbG9zZWQgc2VjdGlvbiBcIicgKyBvcGVuU2VjdGlvblsxXSArICdcIiBhdCAnICsgc2Nhbm5lci5wb3MpO1xuXG4gICAgcmV0dXJuIG5lc3RUb2tlbnMoc3F1YXNoVG9rZW5zKHRva2VucykpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbWJpbmVzIHRoZSB2YWx1ZXMgb2YgY29uc2VjdXRpdmUgdGV4dCB0b2tlbnMgaW4gdGhlIGdpdmVuIGB0b2tlbnNgIGFycmF5XG4gICAqIHRvIGEgc2luZ2xlIHRva2VuLlxuICAgKi9cbiAgZnVuY3Rpb24gc3F1YXNoVG9rZW5zICh0b2tlbnMpIHtcbiAgICB2YXIgc3F1YXNoZWRUb2tlbnMgPSBbXTtcblxuICAgIHZhciB0b2tlbiwgbGFzdFRva2VuO1xuICAgIGZvciAodmFyIGkgPSAwLCBudW1Ub2tlbnMgPSB0b2tlbnMubGVuZ3RoOyBpIDwgbnVtVG9rZW5zOyArK2kpIHtcbiAgICAgIHRva2VuID0gdG9rZW5zW2ldO1xuXG4gICAgICBpZiAodG9rZW4pIHtcbiAgICAgICAgaWYgKHRva2VuWzBdID09PSAndGV4dCcgJiYgbGFzdFRva2VuICYmIGxhc3RUb2tlblswXSA9PT0gJ3RleHQnKSB7XG4gICAgICAgICAgbGFzdFRva2VuWzFdICs9IHRva2VuWzFdO1xuICAgICAgICAgIGxhc3RUb2tlblszXSA9IHRva2VuWzNdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNxdWFzaGVkVG9rZW5zLnB1c2godG9rZW4pO1xuICAgICAgICAgIGxhc3RUb2tlbiA9IHRva2VuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHNxdWFzaGVkVG9rZW5zO1xuICB9XG5cbiAgLyoqXG4gICAqIEZvcm1zIHRoZSBnaXZlbiBhcnJheSBvZiBgdG9rZW5zYCBpbnRvIGEgbmVzdGVkIHRyZWUgc3RydWN0dXJlIHdoZXJlXG4gICAqIHRva2VucyB0aGF0IHJlcHJlc2VudCBhIHNlY3Rpb24gaGF2ZSB0d28gYWRkaXRpb25hbCBpdGVtczogMSkgYW4gYXJyYXkgb2ZcbiAgICogYWxsIHRva2VucyB0aGF0IGFwcGVhciBpbiB0aGF0IHNlY3Rpb24gYW5kIDIpIHRoZSBpbmRleCBpbiB0aGUgb3JpZ2luYWxcbiAgICogdGVtcGxhdGUgdGhhdCByZXByZXNlbnRzIHRoZSBlbmQgb2YgdGhhdCBzZWN0aW9uLlxuICAgKi9cbiAgZnVuY3Rpb24gbmVzdFRva2VucyAodG9rZW5zKSB7XG4gICAgdmFyIG5lc3RlZFRva2VucyA9IFtdO1xuICAgIHZhciBjb2xsZWN0b3IgPSBuZXN0ZWRUb2tlbnM7XG4gICAgdmFyIHNlY3Rpb25zID0gW107XG5cbiAgICB2YXIgdG9rZW4sIHNlY3Rpb247XG4gICAgZm9yICh2YXIgaSA9IDAsIG51bVRva2VucyA9IHRva2Vucy5sZW5ndGg7IGkgPCBudW1Ub2tlbnM7ICsraSkge1xuICAgICAgdG9rZW4gPSB0b2tlbnNbaV07XG5cbiAgICAgIHN3aXRjaCAodG9rZW5bMF0pIHtcbiAgICAgICAgY2FzZSAnIyc6XG4gICAgICAgIGNhc2UgJ14nOlxuICAgICAgICAgIGNvbGxlY3Rvci5wdXNoKHRva2VuKTtcbiAgICAgICAgICBzZWN0aW9ucy5wdXNoKHRva2VuKTtcbiAgICAgICAgICBjb2xsZWN0b3IgPSB0b2tlbls0XSA9IFtdO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICcvJzpcbiAgICAgICAgICBzZWN0aW9uID0gc2VjdGlvbnMucG9wKCk7XG4gICAgICAgICAgc2VjdGlvbls1XSA9IHRva2VuWzJdO1xuICAgICAgICAgIGNvbGxlY3RvciA9IHNlY3Rpb25zLmxlbmd0aCA+IDAgPyBzZWN0aW9uc1tzZWN0aW9ucy5sZW5ndGggLSAxXVs0XSA6IG5lc3RlZFRva2VucztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBjb2xsZWN0b3IucHVzaCh0b2tlbik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG5lc3RlZFRva2VucztcbiAgfVxuXG4gIC8qKlxuICAgKiBBIHNpbXBsZSBzdHJpbmcgc2Nhbm5lciB0aGF0IGlzIHVzZWQgYnkgdGhlIHRlbXBsYXRlIHBhcnNlciB0byBmaW5kXG4gICAqIHRva2VucyBpbiB0ZW1wbGF0ZSBzdHJpbmdzLlxuICAgKi9cbiAgZnVuY3Rpb24gU2Nhbm5lciAoc3RyaW5nKSB7XG4gICAgdGhpcy5zdHJpbmcgPSBzdHJpbmc7XG4gICAgdGhpcy50YWlsID0gc3RyaW5nO1xuICAgIHRoaXMucG9zID0gMDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgdGFpbCBpcyBlbXB0eSAoZW5kIG9mIHN0cmluZykuXG4gICAqL1xuICBTY2FubmVyLnByb3RvdHlwZS5lb3MgPSBmdW5jdGlvbiBlb3MgKCkge1xuICAgIHJldHVybiB0aGlzLnRhaWwgPT09ICcnO1xuICB9O1xuXG4gIC8qKlxuICAgKiBUcmllcyB0byBtYXRjaCB0aGUgZ2l2ZW4gcmVndWxhciBleHByZXNzaW9uIGF0IHRoZSBjdXJyZW50IHBvc2l0aW9uLlxuICAgKiBSZXR1cm5zIHRoZSBtYXRjaGVkIHRleHQgaWYgaXQgY2FuIG1hdGNoLCB0aGUgZW1wdHkgc3RyaW5nIG90aGVyd2lzZS5cbiAgICovXG4gIFNjYW5uZXIucHJvdG90eXBlLnNjYW4gPSBmdW5jdGlvbiBzY2FuIChyZSkge1xuICAgIHZhciBtYXRjaCA9IHRoaXMudGFpbC5tYXRjaChyZSk7XG5cbiAgICBpZiAoIW1hdGNoIHx8IG1hdGNoLmluZGV4ICE9PSAwKVxuICAgICAgcmV0dXJuICcnO1xuXG4gICAgdmFyIHN0cmluZyA9IG1hdGNoWzBdO1xuXG4gICAgdGhpcy50YWlsID0gdGhpcy50YWlsLnN1YnN0cmluZyhzdHJpbmcubGVuZ3RoKTtcbiAgICB0aGlzLnBvcyArPSBzdHJpbmcubGVuZ3RoO1xuXG4gICAgcmV0dXJuIHN0cmluZztcbiAgfTtcblxuICAvKipcbiAgICogU2tpcHMgYWxsIHRleHQgdW50aWwgdGhlIGdpdmVuIHJlZ3VsYXIgZXhwcmVzc2lvbiBjYW4gYmUgbWF0Y2hlZC4gUmV0dXJuc1xuICAgKiB0aGUgc2tpcHBlZCBzdHJpbmcsIHdoaWNoIGlzIHRoZSBlbnRpcmUgdGFpbCBpZiBubyBtYXRjaCBjYW4gYmUgbWFkZS5cbiAgICovXG4gIFNjYW5uZXIucHJvdG90eXBlLnNjYW5VbnRpbCA9IGZ1bmN0aW9uIHNjYW5VbnRpbCAocmUpIHtcbiAgICB2YXIgaW5kZXggPSB0aGlzLnRhaWwuc2VhcmNoKHJlKSwgbWF0Y2g7XG5cbiAgICBzd2l0Y2ggKGluZGV4KSB7XG4gICAgICBjYXNlIC0xOlxuICAgICAgICBtYXRjaCA9IHRoaXMudGFpbDtcbiAgICAgICAgdGhpcy50YWlsID0gJyc7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAwOlxuICAgICAgICBtYXRjaCA9ICcnO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIG1hdGNoID0gdGhpcy50YWlsLnN1YnN0cmluZygwLCBpbmRleCk7XG4gICAgICAgIHRoaXMudGFpbCA9IHRoaXMudGFpbC5zdWJzdHJpbmcoaW5kZXgpO1xuICAgIH1cblxuICAgIHRoaXMucG9zICs9IG1hdGNoLmxlbmd0aDtcblxuICAgIHJldHVybiBtYXRjaDtcbiAgfTtcblxuICAvKipcbiAgICogUmVwcmVzZW50cyBhIHJlbmRlcmluZyBjb250ZXh0IGJ5IHdyYXBwaW5nIGEgdmlldyBvYmplY3QgYW5kXG4gICAqIG1haW50YWluaW5nIGEgcmVmZXJlbmNlIHRvIHRoZSBwYXJlbnQgY29udGV4dC5cbiAgICovXG4gIGZ1bmN0aW9uIENvbnRleHQgKHZpZXcsIHBhcmVudENvbnRleHQpIHtcbiAgICB0aGlzLnZpZXcgPSB2aWV3O1xuICAgIHRoaXMuY2FjaGUgPSB7ICcuJzogdGhpcy52aWV3IH07XG4gICAgdGhpcy5wYXJlbnQgPSBwYXJlbnRDb250ZXh0O1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgY29udGV4dCB1c2luZyB0aGUgZ2l2ZW4gdmlldyB3aXRoIHRoaXMgY29udGV4dFxuICAgKiBhcyB0aGUgcGFyZW50LlxuICAgKi9cbiAgQ29udGV4dC5wcm90b3R5cGUucHVzaCA9IGZ1bmN0aW9uIHB1c2ggKHZpZXcpIHtcbiAgICByZXR1cm4gbmV3IENvbnRleHQodmlldywgdGhpcyk7XG4gIH07XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSBnaXZlbiBuYW1lIGluIHRoaXMgY29udGV4dCwgdHJhdmVyc2luZ1xuICAgKiB1cCB0aGUgY29udGV4dCBoaWVyYXJjaHkgaWYgdGhlIHZhbHVlIGlzIGFic2VudCBpbiB0aGlzIGNvbnRleHQncyB2aWV3LlxuICAgKi9cbiAgQ29udGV4dC5wcm90b3R5cGUubG9va3VwID0gZnVuY3Rpb24gbG9va3VwIChuYW1lKSB7XG4gICAgdmFyIGNhY2hlID0gdGhpcy5jYWNoZTtcblxuICAgIHZhciB2YWx1ZTtcbiAgICBpZiAoY2FjaGUuaGFzT3duUHJvcGVydHkobmFtZSkpIHtcbiAgICAgIHZhbHVlID0gY2FjaGVbbmFtZV07XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBjb250ZXh0ID0gdGhpcywgbmFtZXMsIGluZGV4LCBsb29rdXBIaXQgPSBmYWxzZTtcblxuICAgICAgd2hpbGUgKGNvbnRleHQpIHtcbiAgICAgICAgaWYgKG5hbWUuaW5kZXhPZignLicpID4gMCkge1xuICAgICAgICAgIHZhbHVlID0gY29udGV4dC52aWV3O1xuICAgICAgICAgIG5hbWVzID0gbmFtZS5zcGxpdCgnLicpO1xuICAgICAgICAgIGluZGV4ID0gMDtcblxuICAgICAgICAgIC8qKlxuICAgICAgICAgICAqIFVzaW5nIHRoZSBkb3Qgbm90aW9uIHBhdGggaW4gYG5hbWVgLCB3ZSBkZXNjZW5kIHRocm91Z2ggdGhlXG4gICAgICAgICAgICogbmVzdGVkIG9iamVjdHMuXG4gICAgICAgICAgICpcbiAgICAgICAgICAgKiBUbyBiZSBjZXJ0YWluIHRoYXQgdGhlIGxvb2t1cCBoYXMgYmVlbiBzdWNjZXNzZnVsLCB3ZSBoYXZlIHRvXG4gICAgICAgICAgICogY2hlY2sgaWYgdGhlIGxhc3Qgb2JqZWN0IGluIHRoZSBwYXRoIGFjdHVhbGx5IGhhcyB0aGUgcHJvcGVydHlcbiAgICAgICAgICAgKiB3ZSBhcmUgbG9va2luZyBmb3IuIFdlIHN0b3JlIHRoZSByZXN1bHQgaW4gYGxvb2t1cEhpdGAuXG4gICAgICAgICAgICpcbiAgICAgICAgICAgKiBUaGlzIGlzIHNwZWNpYWxseSBuZWNlc3NhcnkgZm9yIHdoZW4gdGhlIHZhbHVlIGhhcyBiZWVuIHNldCB0b1xuICAgICAgICAgICAqIGB1bmRlZmluZWRgIGFuZCB3ZSB3YW50IHRvIGF2b2lkIGxvb2tpbmcgdXAgcGFyZW50IGNvbnRleHRzLlxuICAgICAgICAgICAqKi9cbiAgICAgICAgICB3aGlsZSAodmFsdWUgIT0gbnVsbCAmJiBpbmRleCA8IG5hbWVzLmxlbmd0aCkge1xuICAgICAgICAgICAgaWYgKGluZGV4ID09PSBuYW1lcy5sZW5ndGggLSAxKVxuICAgICAgICAgICAgICBsb29rdXBIaXQgPSBoYXNQcm9wZXJ0eSh2YWx1ZSwgbmFtZXNbaW5kZXhdKTtcblxuICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZVtuYW1lc1tpbmRleCsrXV07XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhbHVlID0gY29udGV4dC52aWV3W25hbWVdO1xuICAgICAgICAgIGxvb2t1cEhpdCA9IGhhc1Byb3BlcnR5KGNvbnRleHQudmlldywgbmFtZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobG9va3VwSGl0KVxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNvbnRleHQgPSBjb250ZXh0LnBhcmVudDtcbiAgICAgIH1cblxuICAgICAgY2FjaGVbbmFtZV0gPSB2YWx1ZTtcbiAgICB9XG5cbiAgICBpZiAoaXNGdW5jdGlvbih2YWx1ZSkpXG4gICAgICB2YWx1ZSA9IHZhbHVlLmNhbGwodGhpcy52aWV3KTtcblxuICAgIHJldHVybiB2YWx1ZTtcbiAgfTtcblxuICAvKipcbiAgICogQSBXcml0ZXIga25vd3MgaG93IHRvIHRha2UgYSBzdHJlYW0gb2YgdG9rZW5zIGFuZCByZW5kZXIgdGhlbSB0byBhXG4gICAqIHN0cmluZywgZ2l2ZW4gYSBjb250ZXh0LiBJdCBhbHNvIG1haW50YWlucyBhIGNhY2hlIG9mIHRlbXBsYXRlcyB0b1xuICAgKiBhdm9pZCB0aGUgbmVlZCB0byBwYXJzZSB0aGUgc2FtZSB0ZW1wbGF0ZSB0d2ljZS5cbiAgICovXG4gIGZ1bmN0aW9uIFdyaXRlciAoKSB7XG4gICAgdGhpcy5jYWNoZSA9IHt9O1xuICB9XG5cbiAgLyoqXG4gICAqIENsZWFycyBhbGwgY2FjaGVkIHRlbXBsYXRlcyBpbiB0aGlzIHdyaXRlci5cbiAgICovXG4gIFdyaXRlci5wcm90b3R5cGUuY2xlYXJDYWNoZSA9IGZ1bmN0aW9uIGNsZWFyQ2FjaGUgKCkge1xuICAgIHRoaXMuY2FjaGUgPSB7fTtcbiAgfTtcblxuICAvKipcbiAgICogUGFyc2VzIGFuZCBjYWNoZXMgdGhlIGdpdmVuIGB0ZW1wbGF0ZWAgYW5kIHJldHVybnMgdGhlIGFycmF5IG9mIHRva2Vuc1xuICAgKiB0aGF0IGlzIGdlbmVyYXRlZCBmcm9tIHRoZSBwYXJzZS5cbiAgICovXG4gIFdyaXRlci5wcm90b3R5cGUucGFyc2UgPSBmdW5jdGlvbiBwYXJzZSAodGVtcGxhdGUsIHRhZ3MpIHtcbiAgICB2YXIgY2FjaGUgPSB0aGlzLmNhY2hlO1xuICAgIHZhciB0b2tlbnMgPSBjYWNoZVt0ZW1wbGF0ZV07XG5cbiAgICBpZiAodG9rZW5zID09IG51bGwpXG4gICAgICB0b2tlbnMgPSBjYWNoZVt0ZW1wbGF0ZV0gPSBwYXJzZVRlbXBsYXRlKHRlbXBsYXRlLCB0YWdzKTtcblxuICAgIHJldHVybiB0b2tlbnM7XG4gIH07XG5cbiAgLyoqXG4gICAqIEhpZ2gtbGV2ZWwgbWV0aG9kIHRoYXQgaXMgdXNlZCB0byByZW5kZXIgdGhlIGdpdmVuIGB0ZW1wbGF0ZWAgd2l0aFxuICAgKiB0aGUgZ2l2ZW4gYHZpZXdgLlxuICAgKlxuICAgKiBUaGUgb3B0aW9uYWwgYHBhcnRpYWxzYCBhcmd1bWVudCBtYXkgYmUgYW4gb2JqZWN0IHRoYXQgY29udGFpbnMgdGhlXG4gICAqIG5hbWVzIGFuZCB0ZW1wbGF0ZXMgb2YgcGFydGlhbHMgdGhhdCBhcmUgdXNlZCBpbiB0aGUgdGVtcGxhdGUuIEl0IG1heVxuICAgKiBhbHNvIGJlIGEgZnVuY3Rpb24gdGhhdCBpcyB1c2VkIHRvIGxvYWQgcGFydGlhbCB0ZW1wbGF0ZXMgb24gdGhlIGZseVxuICAgKiB0aGF0IHRha2VzIGEgc2luZ2xlIGFyZ3VtZW50OiB0aGUgbmFtZSBvZiB0aGUgcGFydGlhbC5cbiAgICovXG4gIFdyaXRlci5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyICh0ZW1wbGF0ZSwgdmlldywgcGFydGlhbHMpIHtcbiAgICB2YXIgdG9rZW5zID0gdGhpcy5wYXJzZSh0ZW1wbGF0ZSk7XG4gICAgdmFyIGNvbnRleHQgPSAodmlldyBpbnN0YW5jZW9mIENvbnRleHQpID8gdmlldyA6IG5ldyBDb250ZXh0KHZpZXcpO1xuICAgIHJldHVybiB0aGlzLnJlbmRlclRva2Vucyh0b2tlbnMsIGNvbnRleHQsIHBhcnRpYWxzLCB0ZW1wbGF0ZSk7XG4gIH07XG5cbiAgLyoqXG4gICAqIExvdy1sZXZlbCBtZXRob2QgdGhhdCByZW5kZXJzIHRoZSBnaXZlbiBhcnJheSBvZiBgdG9rZW5zYCB1c2luZ1xuICAgKiB0aGUgZ2l2ZW4gYGNvbnRleHRgIGFuZCBgcGFydGlhbHNgLlxuICAgKlxuICAgKiBOb3RlOiBUaGUgYG9yaWdpbmFsVGVtcGxhdGVgIGlzIG9ubHkgZXZlciB1c2VkIHRvIGV4dHJhY3QgdGhlIHBvcnRpb25cbiAgICogb2YgdGhlIG9yaWdpbmFsIHRlbXBsYXRlIHRoYXQgd2FzIGNvbnRhaW5lZCBpbiBhIGhpZ2hlci1vcmRlciBzZWN0aW9uLlxuICAgKiBJZiB0aGUgdGVtcGxhdGUgZG9lc24ndCB1c2UgaGlnaGVyLW9yZGVyIHNlY3Rpb25zLCB0aGlzIGFyZ3VtZW50IG1heVxuICAgKiBiZSBvbWl0dGVkLlxuICAgKi9cbiAgV3JpdGVyLnByb3RvdHlwZS5yZW5kZXJUb2tlbnMgPSBmdW5jdGlvbiByZW5kZXJUb2tlbnMgKHRva2VucywgY29udGV4dCwgcGFydGlhbHMsIG9yaWdpbmFsVGVtcGxhdGUpIHtcbiAgICB2YXIgYnVmZmVyID0gJyc7XG5cbiAgICB2YXIgdG9rZW4sIHN5bWJvbCwgdmFsdWU7XG4gICAgZm9yICh2YXIgaSA9IDAsIG51bVRva2VucyA9IHRva2Vucy5sZW5ndGg7IGkgPCBudW1Ub2tlbnM7ICsraSkge1xuICAgICAgdmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgICB0b2tlbiA9IHRva2Vuc1tpXTtcbiAgICAgIHN5bWJvbCA9IHRva2VuWzBdO1xuXG4gICAgICBpZiAoc3ltYm9sID09PSAnIycpIHZhbHVlID0gdGhpcy5yZW5kZXJTZWN0aW9uKHRva2VuLCBjb250ZXh0LCBwYXJ0aWFscywgb3JpZ2luYWxUZW1wbGF0ZSk7XG4gICAgICBlbHNlIGlmIChzeW1ib2wgPT09ICdeJykgdmFsdWUgPSB0aGlzLnJlbmRlckludmVydGVkKHRva2VuLCBjb250ZXh0LCBwYXJ0aWFscywgb3JpZ2luYWxUZW1wbGF0ZSk7XG4gICAgICBlbHNlIGlmIChzeW1ib2wgPT09ICc+JykgdmFsdWUgPSB0aGlzLnJlbmRlclBhcnRpYWwodG9rZW4sIGNvbnRleHQsIHBhcnRpYWxzLCBvcmlnaW5hbFRlbXBsYXRlKTtcbiAgICAgIGVsc2UgaWYgKHN5bWJvbCA9PT0gJyYnKSB2YWx1ZSA9IHRoaXMudW5lc2NhcGVkVmFsdWUodG9rZW4sIGNvbnRleHQpO1xuICAgICAgZWxzZSBpZiAoc3ltYm9sID09PSAnbmFtZScpIHZhbHVlID0gdGhpcy5lc2NhcGVkVmFsdWUodG9rZW4sIGNvbnRleHQpO1xuICAgICAgZWxzZSBpZiAoc3ltYm9sID09PSAndGV4dCcpIHZhbHVlID0gdGhpcy5yYXdWYWx1ZSh0b2tlbik7XG5cbiAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKVxuICAgICAgICBidWZmZXIgKz0gdmFsdWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJ1ZmZlcjtcbiAgfTtcblxuICBXcml0ZXIucHJvdG90eXBlLnJlbmRlclNlY3Rpb24gPSBmdW5jdGlvbiByZW5kZXJTZWN0aW9uICh0b2tlbiwgY29udGV4dCwgcGFydGlhbHMsIG9yaWdpbmFsVGVtcGxhdGUpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgdmFyIGJ1ZmZlciA9ICcnO1xuICAgIHZhciB2YWx1ZSA9IGNvbnRleHQubG9va3VwKHRva2VuWzFdKTtcblxuICAgIC8vIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byByZW5kZXIgYW4gYXJiaXRyYXJ5IHRlbXBsYXRlXG4gICAgLy8gaW4gdGhlIGN1cnJlbnQgY29udGV4dCBieSBoaWdoZXItb3JkZXIgc2VjdGlvbnMuXG4gICAgZnVuY3Rpb24gc3ViUmVuZGVyICh0ZW1wbGF0ZSkge1xuICAgICAgcmV0dXJuIHNlbGYucmVuZGVyKHRlbXBsYXRlLCBjb250ZXh0LCBwYXJ0aWFscyk7XG4gICAgfVxuXG4gICAgaWYgKCF2YWx1ZSkgcmV0dXJuO1xuXG4gICAgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG4gICAgICBmb3IgKHZhciBqID0gMCwgdmFsdWVMZW5ndGggPSB2YWx1ZS5sZW5ndGg7IGogPCB2YWx1ZUxlbmd0aDsgKytqKSB7XG4gICAgICAgIGJ1ZmZlciArPSB0aGlzLnJlbmRlclRva2Vucyh0b2tlbls0XSwgY29udGV4dC5wdXNoKHZhbHVlW2pdKSwgcGFydGlhbHMsIG9yaWdpbmFsVGVtcGxhdGUpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyB8fCB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgIGJ1ZmZlciArPSB0aGlzLnJlbmRlclRva2Vucyh0b2tlbls0XSwgY29udGV4dC5wdXNoKHZhbHVlKSwgcGFydGlhbHMsIG9yaWdpbmFsVGVtcGxhdGUpO1xuICAgIH0gZWxzZSBpZiAoaXNGdW5jdGlvbih2YWx1ZSkpIHtcbiAgICAgIGlmICh0eXBlb2Ygb3JpZ2luYWxUZW1wbGF0ZSAhPT0gJ3N0cmluZycpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IHVzZSBoaWdoZXItb3JkZXIgc2VjdGlvbnMgd2l0aG91dCB0aGUgb3JpZ2luYWwgdGVtcGxhdGUnKTtcblxuICAgICAgLy8gRXh0cmFjdCB0aGUgcG9ydGlvbiBvZiB0aGUgb3JpZ2luYWwgdGVtcGxhdGUgdGhhdCB0aGUgc2VjdGlvbiBjb250YWlucy5cbiAgICAgIHZhbHVlID0gdmFsdWUuY2FsbChjb250ZXh0LnZpZXcsIG9yaWdpbmFsVGVtcGxhdGUuc2xpY2UodG9rZW5bM10sIHRva2VuWzVdKSwgc3ViUmVuZGVyKTtcblxuICAgICAgaWYgKHZhbHVlICE9IG51bGwpXG4gICAgICAgIGJ1ZmZlciArPSB2YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgYnVmZmVyICs9IHRoaXMucmVuZGVyVG9rZW5zKHRva2VuWzRdLCBjb250ZXh0LCBwYXJ0aWFscywgb3JpZ2luYWxUZW1wbGF0ZSk7XG4gICAgfVxuICAgIHJldHVybiBidWZmZXI7XG4gIH07XG5cbiAgV3JpdGVyLnByb3RvdHlwZS5yZW5kZXJJbnZlcnRlZCA9IGZ1bmN0aW9uIHJlbmRlckludmVydGVkICh0b2tlbiwgY29udGV4dCwgcGFydGlhbHMsIG9yaWdpbmFsVGVtcGxhdGUpIHtcbiAgICB2YXIgdmFsdWUgPSBjb250ZXh0Lmxvb2t1cCh0b2tlblsxXSk7XG5cbiAgICAvLyBVc2UgSmF2YVNjcmlwdCdzIGRlZmluaXRpb24gb2YgZmFsc3kuIEluY2x1ZGUgZW1wdHkgYXJyYXlzLlxuICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vamFubC9tdXN0YWNoZS5qcy9pc3N1ZXMvMTg2XG4gICAgaWYgKCF2YWx1ZSB8fCAoaXNBcnJheSh2YWx1ZSkgJiYgdmFsdWUubGVuZ3RoID09PSAwKSlcbiAgICAgIHJldHVybiB0aGlzLnJlbmRlclRva2Vucyh0b2tlbls0XSwgY29udGV4dCwgcGFydGlhbHMsIG9yaWdpbmFsVGVtcGxhdGUpO1xuICB9O1xuXG4gIFdyaXRlci5wcm90b3R5cGUucmVuZGVyUGFydGlhbCA9IGZ1bmN0aW9uIHJlbmRlclBhcnRpYWwgKHRva2VuLCBjb250ZXh0LCBwYXJ0aWFscykge1xuICAgIGlmICghcGFydGlhbHMpIHJldHVybjtcblxuICAgIHZhciB2YWx1ZSA9IGlzRnVuY3Rpb24ocGFydGlhbHMpID8gcGFydGlhbHModG9rZW5bMV0pIDogcGFydGlhbHNbdG9rZW5bMV1dO1xuICAgIGlmICh2YWx1ZSAhPSBudWxsKVxuICAgICAgcmV0dXJuIHRoaXMucmVuZGVyVG9rZW5zKHRoaXMucGFyc2UodmFsdWUpLCBjb250ZXh0LCBwYXJ0aWFscywgdmFsdWUpO1xuICB9O1xuXG4gIFdyaXRlci5wcm90b3R5cGUudW5lc2NhcGVkVmFsdWUgPSBmdW5jdGlvbiB1bmVzY2FwZWRWYWx1ZSAodG9rZW4sIGNvbnRleHQpIHtcbiAgICB2YXIgdmFsdWUgPSBjb250ZXh0Lmxvb2t1cCh0b2tlblsxXSk7XG4gICAgaWYgKHZhbHVlICE9IG51bGwpXG4gICAgICByZXR1cm4gdmFsdWU7XG4gIH07XG5cbiAgV3JpdGVyLnByb3RvdHlwZS5lc2NhcGVkVmFsdWUgPSBmdW5jdGlvbiBlc2NhcGVkVmFsdWUgKHRva2VuLCBjb250ZXh0KSB7XG4gICAgdmFyIHZhbHVlID0gY29udGV4dC5sb29rdXAodG9rZW5bMV0pO1xuICAgIGlmICh2YWx1ZSAhPSBudWxsKVxuICAgICAgcmV0dXJuIG11c3RhY2hlLmVzY2FwZSh2YWx1ZSk7XG4gIH07XG5cbiAgV3JpdGVyLnByb3RvdHlwZS5yYXdWYWx1ZSA9IGZ1bmN0aW9uIHJhd1ZhbHVlICh0b2tlbikge1xuICAgIHJldHVybiB0b2tlblsxXTtcbiAgfTtcblxuICBtdXN0YWNoZS5uYW1lID0gJ211c3RhY2hlLmpzJztcbiAgbXVzdGFjaGUudmVyc2lvbiA9ICcyLjMuMic7XG4gIG11c3RhY2hlLnRhZ3MgPSBbICd7eycsICd9fScgXTtcblxuICAvLyBBbGwgaGlnaC1sZXZlbCBtdXN0YWNoZS4qIGZ1bmN0aW9ucyB1c2UgdGhpcyB3cml0ZXIuXG4gIHZhciBkZWZhdWx0V3JpdGVyID0gbmV3IFdyaXRlcigpO1xuXG4gIC8qKlxuICAgKiBDbGVhcnMgYWxsIGNhY2hlZCB0ZW1wbGF0ZXMgaW4gdGhlIGRlZmF1bHQgd3JpdGVyLlxuICAgKi9cbiAgbXVzdGFjaGUuY2xlYXJDYWNoZSA9IGZ1bmN0aW9uIGNsZWFyQ2FjaGUgKCkge1xuICAgIHJldHVybiBkZWZhdWx0V3JpdGVyLmNsZWFyQ2FjaGUoKTtcbiAgfTtcblxuICAvKipcbiAgICogUGFyc2VzIGFuZCBjYWNoZXMgdGhlIGdpdmVuIHRlbXBsYXRlIGluIHRoZSBkZWZhdWx0IHdyaXRlciBhbmQgcmV0dXJucyB0aGVcbiAgICogYXJyYXkgb2YgdG9rZW5zIGl0IGNvbnRhaW5zLiBEb2luZyB0aGlzIGFoZWFkIG9mIHRpbWUgYXZvaWRzIHRoZSBuZWVkIHRvXG4gICAqIHBhcnNlIHRlbXBsYXRlcyBvbiB0aGUgZmx5IGFzIHRoZXkgYXJlIHJlbmRlcmVkLlxuICAgKi9cbiAgbXVzdGFjaGUucGFyc2UgPSBmdW5jdGlvbiBwYXJzZSAodGVtcGxhdGUsIHRhZ3MpIHtcbiAgICByZXR1cm4gZGVmYXVsdFdyaXRlci5wYXJzZSh0ZW1wbGF0ZSwgdGFncyk7XG4gIH07XG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgdGhlIGB0ZW1wbGF0ZWAgd2l0aCB0aGUgZ2l2ZW4gYHZpZXdgIGFuZCBgcGFydGlhbHNgIHVzaW5nIHRoZVxuICAgKiBkZWZhdWx0IHdyaXRlci5cbiAgICovXG4gIG11c3RhY2hlLnJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlciAodGVtcGxhdGUsIHZpZXcsIHBhcnRpYWxzKSB7XG4gICAgaWYgKHR5cGVvZiB0ZW1wbGF0ZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgdGVtcGxhdGUhIFRlbXBsYXRlIHNob3VsZCBiZSBhIFwic3RyaW5nXCIgJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICdidXQgXCInICsgdHlwZVN0cih0ZW1wbGF0ZSkgKyAnXCIgd2FzIGdpdmVuIGFzIHRoZSBmaXJzdCAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FyZ3VtZW50IGZvciBtdXN0YWNoZSNyZW5kZXIodGVtcGxhdGUsIHZpZXcsIHBhcnRpYWxzKScpO1xuICAgIH1cblxuICAgIHJldHVybiBkZWZhdWx0V3JpdGVyLnJlbmRlcih0ZW1wbGF0ZSwgdmlldywgcGFydGlhbHMpO1xuICB9O1xuXG4gIC8vIFRoaXMgaXMgaGVyZSBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgd2l0aCAwLjQueC4sXG4gIC8qZXNsaW50LWRpc2FibGUgKi8gLy8gZXNsaW50IHdhbnRzIGNhbWVsIGNhc2VkIGZ1bmN0aW9uIG5hbWVcbiAgbXVzdGFjaGUudG9faHRtbCA9IGZ1bmN0aW9uIHRvX2h0bWwgKHRlbXBsYXRlLCB2aWV3LCBwYXJ0aWFscywgc2VuZCkge1xuICAgIC8qZXNsaW50LWVuYWJsZSovXG5cbiAgICB2YXIgcmVzdWx0ID0gbXVzdGFjaGUucmVuZGVyKHRlbXBsYXRlLCB2aWV3LCBwYXJ0aWFscyk7XG5cbiAgICBpZiAoaXNGdW5jdGlvbihzZW5kKSkge1xuICAgICAgc2VuZChyZXN1bHQpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgfTtcblxuICAvLyBFeHBvcnQgdGhlIGVzY2FwaW5nIGZ1bmN0aW9uIHNvIHRoYXQgdGhlIHVzZXIgbWF5IG92ZXJyaWRlIGl0LlxuICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2phbmwvbXVzdGFjaGUuanMvaXNzdWVzLzI0NFxuICBtdXN0YWNoZS5lc2NhcGUgPSBlc2NhcGVIdG1sO1xuXG4gIC8vIEV4cG9ydCB0aGVzZSBtYWlubHkgZm9yIHRlc3RpbmcsIGJ1dCBhbHNvIGZvciBhZHZhbmNlZCB1c2FnZS5cbiAgbXVzdGFjaGUuU2Nhbm5lciA9IFNjYW5uZXI7XG4gIG11c3RhY2hlLkNvbnRleHQgPSBDb250ZXh0O1xuICBtdXN0YWNoZS5Xcml0ZXIgPSBXcml0ZXI7XG5cbiAgcmV0dXJuIG11c3RhY2hlO1xufSkpO1xuIiwiLypcbm9iamVjdC1hc3NpZ25cbihjKSBTaW5kcmUgU29yaHVzXG5AbGljZW5zZSBNSVRcbiovXG5cbid1c2Ugc3RyaWN0Jztcbi8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC12YXJzICovXG52YXIgZ2V0T3duUHJvcGVydHlTeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbnZhciBoYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgcHJvcElzRW51bWVyYWJsZSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG5cbmZ1bmN0aW9uIHRvT2JqZWN0KHZhbCkge1xuXHRpZiAodmFsID09PSBudWxsIHx8IHZhbCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignT2JqZWN0LmFzc2lnbiBjYW5ub3QgYmUgY2FsbGVkIHdpdGggbnVsbCBvciB1bmRlZmluZWQnKTtcblx0fVxuXG5cdHJldHVybiBPYmplY3QodmFsKTtcbn1cblxuZnVuY3Rpb24gc2hvdWxkVXNlTmF0aXZlKCkge1xuXHR0cnkge1xuXHRcdGlmICghT2JqZWN0LmFzc2lnbikge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdC8vIERldGVjdCBidWdneSBwcm9wZXJ0eSBlbnVtZXJhdGlvbiBvcmRlciBpbiBvbGRlciBWOCB2ZXJzaW9ucy5cblxuXHRcdC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTQxMThcblx0XHR2YXIgdGVzdDEgPSBuZXcgU3RyaW5nKCdhYmMnKTsgIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3LXdyYXBwZXJzXG5cdFx0dGVzdDFbNV0gPSAnZGUnO1xuXHRcdGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0ZXN0MSlbMF0gPT09ICc1Jykge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTMwNTZcblx0XHR2YXIgdGVzdDIgPSB7fTtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IDEwOyBpKyspIHtcblx0XHRcdHRlc3QyWydfJyArIFN0cmluZy5mcm9tQ2hhckNvZGUoaSldID0gaTtcblx0XHR9XG5cdFx0dmFyIG9yZGVyMiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRlc3QyKS5tYXAoZnVuY3Rpb24gKG4pIHtcblx0XHRcdHJldHVybiB0ZXN0MltuXTtcblx0XHR9KTtcblx0XHRpZiAob3JkZXIyLmpvaW4oJycpICE9PSAnMDEyMzQ1Njc4OScpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHQvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0zMDU2XG5cdFx0dmFyIHRlc3QzID0ge307XG5cdFx0J2FiY2RlZmdoaWprbG1ub3BxcnN0Jy5zcGxpdCgnJykuZm9yRWFjaChmdW5jdGlvbiAobGV0dGVyKSB7XG5cdFx0XHR0ZXN0M1tsZXR0ZXJdID0gbGV0dGVyO1xuXHRcdH0pO1xuXHRcdGlmIChPYmplY3Qua2V5cyhPYmplY3QuYXNzaWduKHt9LCB0ZXN0MykpLmpvaW4oJycpICE9PVxuXHRcdFx0XHQnYWJjZGVmZ2hpamtsbW5vcHFyc3QnKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gY2F0Y2ggKGVycikge1xuXHRcdC8vIFdlIGRvbid0IGV4cGVjdCBhbnkgb2YgdGhlIGFib3ZlIHRvIHRocm93LCBidXQgYmV0dGVyIHRvIGJlIHNhZmUuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc2hvdWxkVXNlTmF0aXZlKCkgPyBPYmplY3QuYXNzaWduIDogZnVuY3Rpb24gKHRhcmdldCwgc291cmNlKSB7XG5cdHZhciBmcm9tO1xuXHR2YXIgdG8gPSB0b09iamVjdCh0YXJnZXQpO1xuXHR2YXIgc3ltYm9scztcblxuXHRmb3IgKHZhciBzID0gMTsgcyA8IGFyZ3VtZW50cy5sZW5ndGg7IHMrKykge1xuXHRcdGZyb20gPSBPYmplY3QoYXJndW1lbnRzW3NdKTtcblxuXHRcdGZvciAodmFyIGtleSBpbiBmcm9tKSB7XG5cdFx0XHRpZiAoaGFzT3duUHJvcGVydHkuY2FsbChmcm9tLCBrZXkpKSB7XG5cdFx0XHRcdHRvW2tleV0gPSBmcm9tW2tleV07XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKGdldE93blByb3BlcnR5U3ltYm9scykge1xuXHRcdFx0c3ltYm9scyA9IGdldE93blByb3BlcnR5U3ltYm9scyhmcm9tKTtcblx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgc3ltYm9scy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRpZiAocHJvcElzRW51bWVyYWJsZS5jYWxsKGZyb20sIHN5bWJvbHNbaV0pKSB7XG5cdFx0XHRcdFx0dG9bc3ltYm9sc1tpXV0gPSBmcm9tW3N5bWJvbHNbaV1dO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHRvO1xufTtcbiIsIi8qISBucG0uaW0vb2JqZWN0LWZpdC1pbWFnZXMgMy4yLjQgKi9cbid1c2Ugc3RyaWN0JztcblxudmFyIE9GSSA9ICdiZnJlZC1pdDpvYmplY3QtZml0LWltYWdlcyc7XG52YXIgcHJvcFJlZ2V4ID0gLyhvYmplY3QtZml0fG9iamVjdC1wb3NpdGlvbilcXHMqOlxccyooWy0uXFx3XFxzJV0rKS9nO1xudmFyIHRlc3RJbWcgPSB0eXBlb2YgSW1hZ2UgPT09ICd1bmRlZmluZWQnID8ge3N0eWxlOiB7J29iamVjdC1wb3NpdGlvbic6IDF9fSA6IG5ldyBJbWFnZSgpO1xudmFyIHN1cHBvcnRzT2JqZWN0Rml0ID0gJ29iamVjdC1maXQnIGluIHRlc3RJbWcuc3R5bGU7XG52YXIgc3VwcG9ydHNPYmplY3RQb3NpdGlvbiA9ICdvYmplY3QtcG9zaXRpb24nIGluIHRlc3RJbWcuc3R5bGU7XG52YXIgc3VwcG9ydHNPRkkgPSAnYmFja2dyb3VuZC1zaXplJyBpbiB0ZXN0SW1nLnN0eWxlO1xudmFyIHN1cHBvcnRzQ3VycmVudFNyYyA9IHR5cGVvZiB0ZXN0SW1nLmN1cnJlbnRTcmMgPT09ICdzdHJpbmcnO1xudmFyIG5hdGl2ZUdldEF0dHJpYnV0ZSA9IHRlc3RJbWcuZ2V0QXR0cmlidXRlO1xudmFyIG5hdGl2ZVNldEF0dHJpYnV0ZSA9IHRlc3RJbWcuc2V0QXR0cmlidXRlO1xudmFyIGF1dG9Nb2RlRW5hYmxlZCA9IGZhbHNlO1xuXG5mdW5jdGlvbiBjcmVhdGVQbGFjZWhvbGRlcih3LCBoKSB7XG5cdHJldHVybiAoXCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9J1wiICsgdyArIFwiJyBoZWlnaHQ9J1wiICsgaCArIFwiJyUzRSUzQy9zdmclM0VcIik7XG59XG5cbmZ1bmN0aW9uIHBvbHlmaWxsQ3VycmVudFNyYyhlbCkge1xuXHRpZiAoZWwuc3Jjc2V0ICYmICFzdXBwb3J0c0N1cnJlbnRTcmMgJiYgd2luZG93LnBpY3R1cmVmaWxsKSB7XG5cdFx0dmFyIHBmID0gd2luZG93LnBpY3R1cmVmaWxsLl87XG5cdFx0Ly8gcGFyc2Ugc3Jjc2V0IHdpdGggcGljdHVyZWZpbGwgd2hlcmUgY3VycmVudFNyYyBpc24ndCBhdmFpbGFibGVcblx0XHRpZiAoIWVsW3BmLm5zXSB8fCAhZWxbcGYubnNdLmV2YWxlZCkge1xuXHRcdFx0Ly8gZm9yY2Ugc3luY2hyb25vdXMgc3Jjc2V0IHBhcnNpbmdcblx0XHRcdHBmLmZpbGxJbWcoZWwsIHtyZXNlbGVjdDogdHJ1ZX0pO1xuXHRcdH1cblxuXHRcdGlmICghZWxbcGYubnNdLmN1clNyYykge1xuXHRcdFx0Ly8gZm9yY2UgcGljdHVyZWZpbGwgdG8gcGFyc2Ugc3Jjc2V0XG5cdFx0XHRlbFtwZi5uc10uc3VwcG9ydGVkID0gZmFsc2U7XG5cdFx0XHRwZi5maWxsSW1nKGVsLCB7cmVzZWxlY3Q6IHRydWV9KTtcblx0XHR9XG5cblx0XHQvLyByZXRyaWV2ZSBwYXJzZWQgY3VycmVudFNyYywgaWYgYW55XG5cdFx0ZWwuY3VycmVudFNyYyA9IGVsW3BmLm5zXS5jdXJTcmMgfHwgZWwuc3JjO1xuXHR9XG59XG5cbmZ1bmN0aW9uIGdldFN0eWxlKGVsKSB7XG5cdHZhciBzdHlsZSA9IGdldENvbXB1dGVkU3R5bGUoZWwpLmZvbnRGYW1pbHk7XG5cdHZhciBwYXJzZWQ7XG5cdHZhciBwcm9wcyA9IHt9O1xuXHR3aGlsZSAoKHBhcnNlZCA9IHByb3BSZWdleC5leGVjKHN0eWxlKSkgIT09IG51bGwpIHtcblx0XHRwcm9wc1twYXJzZWRbMV1dID0gcGFyc2VkWzJdO1xuXHR9XG5cdHJldHVybiBwcm9wcztcbn1cblxuZnVuY3Rpb24gc2V0UGxhY2Vob2xkZXIoaW1nLCB3aWR0aCwgaGVpZ2h0KSB7XG5cdC8vIERlZmF1bHQ6IGZpbGwgd2lkdGgsIG5vIGhlaWdodFxuXHR2YXIgcGxhY2Vob2xkZXIgPSBjcmVhdGVQbGFjZWhvbGRlcih3aWR0aCB8fCAxLCBoZWlnaHQgfHwgMCk7XG5cblx0Ly8gT25seSBzZXQgcGxhY2Vob2xkZXIgaWYgaXQncyBkaWZmZXJlbnRcblx0aWYgKG5hdGl2ZUdldEF0dHJpYnV0ZS5jYWxsKGltZywgJ3NyYycpICE9PSBwbGFjZWhvbGRlcikge1xuXHRcdG5hdGl2ZVNldEF0dHJpYnV0ZS5jYWxsKGltZywgJ3NyYycsIHBsYWNlaG9sZGVyKTtcblx0fVxufVxuXG5mdW5jdGlvbiBvbkltYWdlUmVhZHkoaW1nLCBjYWxsYmFjaykge1xuXHQvLyBuYXR1cmFsV2lkdGggaXMgb25seSBhdmFpbGFibGUgd2hlbiB0aGUgaW1hZ2UgaGVhZGVycyBhcmUgbG9hZGVkLFxuXHQvLyB0aGlzIGxvb3Agd2lsbCBwb2xsIGl0IGV2ZXJ5IDEwMG1zLlxuXHRpZiAoaW1nLm5hdHVyYWxXaWR0aCkge1xuXHRcdGNhbGxiYWNrKGltZyk7XG5cdH0gZWxzZSB7XG5cdFx0c2V0VGltZW91dChvbkltYWdlUmVhZHksIDEwMCwgaW1nLCBjYWxsYmFjayk7XG5cdH1cbn1cblxuZnVuY3Rpb24gZml4T25lKGVsKSB7XG5cdHZhciBzdHlsZSA9IGdldFN0eWxlKGVsKTtcblx0dmFyIG9maSA9IGVsW09GSV07XG5cdHN0eWxlWydvYmplY3QtZml0J10gPSBzdHlsZVsnb2JqZWN0LWZpdCddIHx8ICdmaWxsJzsgLy8gZGVmYXVsdCB2YWx1ZVxuXG5cdC8vIEF2b2lkIHJ1bm5pbmcgd2hlcmUgdW5uZWNlc3NhcnksIHVubGVzcyBPRkkgaGFkIGFscmVhZHkgZG9uZSBpdHMgZGVlZFxuXHRpZiAoIW9maS5pbWcpIHtcblx0XHQvLyBmaWxsIGlzIHRoZSBkZWZhdWx0IGJlaGF2aW9yIHNvIG5vIGFjdGlvbiBpcyBuZWNlc3Nhcnlcblx0XHRpZiAoc3R5bGVbJ29iamVjdC1maXQnXSA9PT0gJ2ZpbGwnKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gV2hlcmUgb2JqZWN0LWZpdCBpcyBzdXBwb3J0ZWQgYW5kIG9iamVjdC1wb3NpdGlvbiBpc24ndCAoU2FmYXJpIDwgMTApXG5cdFx0aWYgKFxuXHRcdFx0IW9maS5za2lwVGVzdCAmJiAvLyB1bmxlc3MgdXNlciB3YW50cyB0byBhcHBseSByZWdhcmRsZXNzIG9mIGJyb3dzZXIgc3VwcG9ydFxuXHRcdFx0c3VwcG9ydHNPYmplY3RGaXQgJiYgLy8gaWYgYnJvd3NlciBhbHJlYWR5IHN1cHBvcnRzIG9iamVjdC1maXRcblx0XHRcdCFzdHlsZVsnb2JqZWN0LXBvc2l0aW9uJ10gLy8gdW5sZXNzIG9iamVjdC1wb3NpdGlvbiBpcyB1c2VkXG5cdFx0KSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHR9XG5cblx0Ly8ga2VlcCBhIGNsb25lIGluIG1lbW9yeSB3aGlsZSByZXNldHRpbmcgdGhlIG9yaWdpbmFsIHRvIGEgYmxhbmtcblx0aWYgKCFvZmkuaW1nKSB7XG5cdFx0b2ZpLmltZyA9IG5ldyBJbWFnZShlbC53aWR0aCwgZWwuaGVpZ2h0KTtcblx0XHRvZmkuaW1nLnNyY3NldCA9IG5hdGl2ZUdldEF0dHJpYnV0ZS5jYWxsKGVsLCBcImRhdGEtb2ZpLXNyY3NldFwiKSB8fCBlbC5zcmNzZXQ7XG5cdFx0b2ZpLmltZy5zcmMgPSBuYXRpdmVHZXRBdHRyaWJ1dGUuY2FsbChlbCwgXCJkYXRhLW9maS1zcmNcIikgfHwgZWwuc3JjO1xuXG5cdFx0Ly8gcHJlc2VydmUgZm9yIGFueSBmdXR1cmUgY2xvbmVOb2RlIGNhbGxzXG5cdFx0Ly8gaHR0cHM6Ly9naXRodWIuY29tL2JmcmVkLWl0L29iamVjdC1maXQtaW1hZ2VzL2lzc3Vlcy81M1xuXHRcdG5hdGl2ZVNldEF0dHJpYnV0ZS5jYWxsKGVsLCBcImRhdGEtb2ZpLXNyY1wiLCBlbC5zcmMpO1xuXHRcdGlmIChlbC5zcmNzZXQpIHtcblx0XHRcdG5hdGl2ZVNldEF0dHJpYnV0ZS5jYWxsKGVsLCBcImRhdGEtb2ZpLXNyY3NldFwiLCBlbC5zcmNzZXQpO1xuXHRcdH1cblxuXHRcdHNldFBsYWNlaG9sZGVyKGVsLCBlbC5uYXR1cmFsV2lkdGggfHwgZWwud2lkdGgsIGVsLm5hdHVyYWxIZWlnaHQgfHwgZWwuaGVpZ2h0KTtcblxuXHRcdC8vIHJlbW92ZSBzcmNzZXQgYmVjYXVzZSBpdCBvdmVycmlkZXMgc3JjXG5cdFx0aWYgKGVsLnNyY3NldCkge1xuXHRcdFx0ZWwuc3Jjc2V0ID0gJyc7XG5cdFx0fVxuXHRcdHRyeSB7XG5cdFx0XHRrZWVwU3JjVXNhYmxlKGVsKTtcblx0XHR9IGNhdGNoIChlcnIpIHtcblx0XHRcdGlmICh3aW5kb3cuY29uc29sZSkge1xuXHRcdFx0XHRjb25zb2xlLndhcm4oJ2h0dHBzOi8vYml0Lmx5L29maS1vbGQtYnJvd3NlcicpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHBvbHlmaWxsQ3VycmVudFNyYyhvZmkuaW1nKTtcblxuXHRlbC5zdHlsZS5iYWNrZ3JvdW5kSW1hZ2UgPSBcInVybChcXFwiXCIgKyAoKG9maS5pbWcuY3VycmVudFNyYyB8fCBvZmkuaW1nLnNyYykucmVwbGFjZSgvXCIvZywgJ1xcXFxcIicpKSArIFwiXFxcIilcIjtcblx0ZWwuc3R5bGUuYmFja2dyb3VuZFBvc2l0aW9uID0gc3R5bGVbJ29iamVjdC1wb3NpdGlvbiddIHx8ICdjZW50ZXInO1xuXHRlbC5zdHlsZS5iYWNrZ3JvdW5kUmVwZWF0ID0gJ25vLXJlcGVhdCc7XG5cdGVsLnN0eWxlLmJhY2tncm91bmRPcmlnaW4gPSAnY29udGVudC1ib3gnO1xuXG5cdGlmICgvc2NhbGUtZG93bi8udGVzdChzdHlsZVsnb2JqZWN0LWZpdCddKSkge1xuXHRcdG9uSW1hZ2VSZWFkeShvZmkuaW1nLCBmdW5jdGlvbiAoKSB7XG5cdFx0XHRpZiAob2ZpLmltZy5uYXR1cmFsV2lkdGggPiBlbC53aWR0aCB8fCBvZmkuaW1nLm5hdHVyYWxIZWlnaHQgPiBlbC5oZWlnaHQpIHtcblx0XHRcdFx0ZWwuc3R5bGUuYmFja2dyb3VuZFNpemUgPSAnY29udGFpbic7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRlbC5zdHlsZS5iYWNrZ3JvdW5kU2l6ZSA9ICdhdXRvJztcblx0XHRcdH1cblx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHRlbC5zdHlsZS5iYWNrZ3JvdW5kU2l6ZSA9IHN0eWxlWydvYmplY3QtZml0J10ucmVwbGFjZSgnbm9uZScsICdhdXRvJykucmVwbGFjZSgnZmlsbCcsICcxMDAlIDEwMCUnKTtcblx0fVxuXG5cdG9uSW1hZ2VSZWFkeShvZmkuaW1nLCBmdW5jdGlvbiAoaW1nKSB7XG5cdFx0c2V0UGxhY2Vob2xkZXIoZWwsIGltZy5uYXR1cmFsV2lkdGgsIGltZy5uYXR1cmFsSGVpZ2h0KTtcblx0fSk7XG59XG5cbmZ1bmN0aW9uIGtlZXBTcmNVc2FibGUoZWwpIHtcblx0dmFyIGRlc2NyaXB0b3JzID0ge1xuXHRcdGdldDogZnVuY3Rpb24gZ2V0KHByb3ApIHtcblx0XHRcdHJldHVybiBlbFtPRkldLmltZ1twcm9wID8gcHJvcCA6ICdzcmMnXTtcblx0XHR9LFxuXHRcdHNldDogZnVuY3Rpb24gc2V0KHZhbHVlLCBwcm9wKSB7XG5cdFx0XHRlbFtPRkldLmltZ1twcm9wID8gcHJvcCA6ICdzcmMnXSA9IHZhbHVlO1xuXHRcdFx0bmF0aXZlU2V0QXR0cmlidXRlLmNhbGwoZWwsIChcImRhdGEtb2ZpLVwiICsgcHJvcCksIHZhbHVlKTsgLy8gcHJlc2VydmUgZm9yIGFueSBmdXR1cmUgY2xvbmVOb2RlXG5cdFx0XHRmaXhPbmUoZWwpO1xuXHRcdFx0cmV0dXJuIHZhbHVlO1xuXHRcdH1cblx0fTtcblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGVsLCAnc3JjJywgZGVzY3JpcHRvcnMpO1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZWwsICdjdXJyZW50U3JjJywge1xuXHRcdGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZGVzY3JpcHRvcnMuZ2V0KCdjdXJyZW50U3JjJyk7IH1cblx0fSk7XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlbCwgJ3NyY3NldCcsIHtcblx0XHRnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGRlc2NyaXB0b3JzLmdldCgnc3Jjc2V0Jyk7IH0sXG5cdFx0c2V0OiBmdW5jdGlvbiAoc3MpIHsgcmV0dXJuIGRlc2NyaXB0b3JzLnNldChzcywgJ3NyY3NldCcpOyB9XG5cdH0pO1xufVxuXG5mdW5jdGlvbiBoaWphY2tBdHRyaWJ1dGVzKCkge1xuXHRmdW5jdGlvbiBnZXRPZmlJbWFnZU1heWJlKGVsLCBuYW1lKSB7XG5cdFx0cmV0dXJuIGVsW09GSV0gJiYgZWxbT0ZJXS5pbWcgJiYgKG5hbWUgPT09ICdzcmMnIHx8IG5hbWUgPT09ICdzcmNzZXQnKSA/IGVsW09GSV0uaW1nIDogZWw7XG5cdH1cblx0aWYgKCFzdXBwb3J0c09iamVjdFBvc2l0aW9uKSB7XG5cdFx0SFRNTEltYWdlRWxlbWVudC5wcm90b3R5cGUuZ2V0QXR0cmlidXRlID0gZnVuY3Rpb24gKG5hbWUpIHtcblx0XHRcdHJldHVybiBuYXRpdmVHZXRBdHRyaWJ1dGUuY2FsbChnZXRPZmlJbWFnZU1heWJlKHRoaXMsIG5hbWUpLCBuYW1lKTtcblx0XHR9O1xuXG5cdFx0SFRNTEltYWdlRWxlbWVudC5wcm90b3R5cGUuc2V0QXR0cmlidXRlID0gZnVuY3Rpb24gKG5hbWUsIHZhbHVlKSB7XG5cdFx0XHRyZXR1cm4gbmF0aXZlU2V0QXR0cmlidXRlLmNhbGwoZ2V0T2ZpSW1hZ2VNYXliZSh0aGlzLCBuYW1lKSwgbmFtZSwgU3RyaW5nKHZhbHVlKSk7XG5cdFx0fTtcblx0fVxufVxuXG5mdW5jdGlvbiBmaXgoaW1ncywgb3B0cykge1xuXHR2YXIgc3RhcnRBdXRvTW9kZSA9ICFhdXRvTW9kZUVuYWJsZWQgJiYgIWltZ3M7XG5cdG9wdHMgPSBvcHRzIHx8IHt9O1xuXHRpbWdzID0gaW1ncyB8fCAnaW1nJztcblxuXHRpZiAoKHN1cHBvcnRzT2JqZWN0UG9zaXRpb24gJiYgIW9wdHMuc2tpcFRlc3QpIHx8ICFzdXBwb3J0c09GSSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdC8vIHVzZSBpbWdzIGFzIGEgc2VsZWN0b3Igb3IganVzdCBzZWxlY3QgYWxsIGltYWdlc1xuXHRpZiAoaW1ncyA9PT0gJ2ltZycpIHtcblx0XHRpbWdzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2ltZycpO1xuXHR9IGVsc2UgaWYgKHR5cGVvZiBpbWdzID09PSAnc3RyaW5nJykge1xuXHRcdGltZ3MgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGltZ3MpO1xuXHR9IGVsc2UgaWYgKCEoJ2xlbmd0aCcgaW4gaW1ncykpIHtcblx0XHRpbWdzID0gW2ltZ3NdO1xuXHR9XG5cblx0Ly8gYXBwbHkgZml4IHRvIGFsbFxuXHRmb3IgKHZhciBpID0gMDsgaSA8IGltZ3MubGVuZ3RoOyBpKyspIHtcblx0XHRpbWdzW2ldW09GSV0gPSBpbWdzW2ldW09GSV0gfHwge1xuXHRcdFx0c2tpcFRlc3Q6IG9wdHMuc2tpcFRlc3Rcblx0XHR9O1xuXHRcdGZpeE9uZShpbWdzW2ldKTtcblx0fVxuXG5cdGlmIChzdGFydEF1dG9Nb2RlKSB7XG5cdFx0ZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgZnVuY3Rpb24gKGUpIHtcblx0XHRcdGlmIChlLnRhcmdldC50YWdOYW1lID09PSAnSU1HJykge1xuXHRcdFx0XHRmaXgoZS50YXJnZXQsIHtcblx0XHRcdFx0XHRza2lwVGVzdDogb3B0cy5za2lwVGVzdFxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9LCB0cnVlKTtcblx0XHRhdXRvTW9kZUVuYWJsZWQgPSB0cnVlO1xuXHRcdGltZ3MgPSAnaW1nJzsgLy8gcmVzZXQgdG8gYSBnZW5lcmljIHNlbGVjdG9yIGZvciB3YXRjaE1RXG5cdH1cblxuXHQvLyBpZiByZXF1ZXN0ZWQsIHdhdGNoIG1lZGlhIHF1ZXJpZXMgZm9yIG9iamVjdC1maXQgY2hhbmdlXG5cdGlmIChvcHRzLndhdGNoTVEpIHtcblx0XHR3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgZml4LmJpbmQobnVsbCwgaW1ncywge1xuXHRcdFx0c2tpcFRlc3Q6IG9wdHMuc2tpcFRlc3Rcblx0XHR9KSk7XG5cdH1cbn1cblxuZml4LnN1cHBvcnRzT2JqZWN0Rml0ID0gc3VwcG9ydHNPYmplY3RGaXQ7XG5maXguc3VwcG9ydHNPYmplY3RQb3NpdGlvbiA9IHN1cHBvcnRzT2JqZWN0UG9zaXRpb247XG5cbmhpamFja0F0dHJpYnV0ZXMoKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmaXg7XG4iLCJBcnJheS5wcm90b3R5cGUuaW5jbHVkZXN8fE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBcnJheS5wcm90b3R5cGUsXCJpbmNsdWRlc1wiLHt2YWx1ZTpmdW5jdGlvbihyLGUpe2lmKG51bGw9PXRoaXMpdGhyb3cgbmV3IFR5cGVFcnJvcignXCJ0aGlzXCIgaXMgbnVsbCBvciBub3QgZGVmaW5lZCcpO3ZhciB0PU9iamVjdCh0aGlzKSxuPXQubGVuZ3RoPj4+MDtpZigwPT09bilyZXR1cm4hMTtmb3IodmFyIGk9MHxlLG89TWF0aC5tYXgoaT49MD9pOm4tTWF0aC5hYnMoaSksMCk7bzxuOyl7aWYoZnVuY3Rpb24ocixlKXtyZXR1cm4gcj09PWV8fFwibnVtYmVyXCI9PXR5cGVvZiByJiZcIm51bWJlclwiPT10eXBlb2YgZSYmaXNOYU4ocikmJmlzTmFOKGUpfSh0W29dLHIpKXJldHVybiEwO28rK31yZXR1cm4hMX19KTsiLCIvKlxuICAgIHBvcnRhbC12dWVcbiAgICBWZXJzaW9uOiAxLjUuMVxuICAgIExpY2VuY2U6IE1JVFxuICAgIChjKSBUaG9yc3RlbiBMw7xuYm9yZ1xuICAqL1xuICBcbihmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG5cdHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyA/IG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKCd2dWUnKSkgOlxuXHR0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWyd2dWUnXSwgZmFjdG9yeSkgOlxuXHQoZ2xvYmFsLlBvcnRhbFZ1ZSA9IGZhY3RvcnkoZ2xvYmFsLlZ1ZSkpO1xufSh0aGlzLCAoZnVuY3Rpb24gKFZ1ZSkgeyAndXNlIHN0cmljdCc7XG5cblZ1ZSA9IFZ1ZSAmJiBWdWUuaGFzT3duUHJvcGVydHkoJ2RlZmF1bHQnKSA/IFZ1ZVsnZGVmYXVsdCddIDogVnVlO1xuXG52YXIgX3R5cGVvZiA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiID8gZnVuY3Rpb24gKG9iaikge1xuICByZXR1cm4gdHlwZW9mIG9iajtcbn0gOiBmdW5jdGlvbiAob2JqKSB7XG4gIHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqO1xufTtcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbnZhciBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkge1xuICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07XG5cbiAgICBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkge1xuICAgICAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0YXJnZXQ7XG59O1xuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbnZhciB0b0NvbnN1bWFibGVBcnJheSA9IGZ1bmN0aW9uIChhcnIpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkge1xuICAgIGZvciAodmFyIGkgPSAwLCBhcnIyID0gQXJyYXkoYXJyLmxlbmd0aCk7IGkgPCBhcnIubGVuZ3RoOyBpKyspIGFycjJbaV0gPSBhcnJbaV07XG5cbiAgICByZXR1cm4gYXJyMjtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gQXJyYXkuZnJvbShhcnIpO1xuICB9XG59O1xuXG5mdW5jdGlvbiBleHRyYWN0QXR0cmlidXRlcyhlbCkge1xuICB2YXIgbWFwID0gZWwuaGFzQXR0cmlidXRlcygpID8gZWwuYXR0cmlidXRlcyA6IFtdO1xuICB2YXIgYXR0cnMgPSB7fTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBtYXAubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgYXR0ciA9IG1hcFtpXTtcbiAgICBpZiAoYXR0ci52YWx1ZSkge1xuICAgICAgYXR0cnNbYXR0ci5uYW1lXSA9IGF0dHIudmFsdWUgPT09ICcnID8gdHJ1ZSA6IGF0dHIudmFsdWU7XG4gICAgfVxuICB9XG4gIHZhciBrbGFzcyA9IHZvaWQgMCxcbiAgICAgIHN0eWxlID0gdm9pZCAwO1xuICBpZiAoYXR0cnMuY2xhc3MpIHtcbiAgICBrbGFzcyA9IGF0dHJzLmNsYXNzO1xuICAgIGRlbGV0ZSBhdHRycy5jbGFzcztcbiAgfVxuICBpZiAoYXR0cnMuc3R5bGUpIHtcbiAgICBzdHlsZSA9IGF0dHJzLnN0eWxlO1xuICAgIGRlbGV0ZSBhdHRycy5zdHlsZTtcbiAgfVxuICB2YXIgZGF0YSA9IHtcbiAgICBhdHRyczogYXR0cnMsXG4gICAgY2xhc3M6IGtsYXNzLFxuICAgIHN0eWxlOiBzdHlsZVxuICB9O1xuICByZXR1cm4gZGF0YTtcbn1cblxuZnVuY3Rpb24gZnJlZXplKGl0ZW0pIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoaXRlbSkgfHwgKHR5cGVvZiBpdGVtID09PSAndW5kZWZpbmVkJyA/ICd1bmRlZmluZWQnIDogX3R5cGVvZihpdGVtKSkgPT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIE9iamVjdC5mcmVlemUoaXRlbSk7XG4gIH1cbiAgcmV0dXJuIGl0ZW07XG59XG5cbmZ1bmN0aW9uIGNvbWJpbmVQYXNzZW5nZXJzKHRyYW5zcG9ydHMpIHtcbiAgdmFyIHNsb3RQcm9wcyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG5cbiAgcmV0dXJuIHRyYW5zcG9ydHMucmVkdWNlKGZ1bmN0aW9uIChwYXNzZW5nZXJzLCB0cmFuc3BvcnQpIHtcbiAgICB2YXIgbmV3UGFzc2VuZ2VycyA9IHRyYW5zcG9ydC5wYXNzZW5nZXJzWzBdO1xuICAgIG5ld1Bhc3NlbmdlcnMgPSB0eXBlb2YgbmV3UGFzc2VuZ2VycyA9PT0gJ2Z1bmN0aW9uJyA/IG5ld1Bhc3NlbmdlcnMoc2xvdFByb3BzKSA6IHRyYW5zcG9ydC5wYXNzZW5nZXJzO1xuICAgIHJldHVybiBwYXNzZW5nZXJzLmNvbmNhdChuZXdQYXNzZW5nZXJzKTtcbiAgfSwgW10pO1xufVxuXG5mdW5jdGlvbiBzdGFibGVTb3J0KGFycmF5LCBjb21wYXJlRm4pIHtcbiAgcmV0dXJuIGFycmF5Lm1hcChmdW5jdGlvbiAodiwgaWR4KSB7XG4gICAgcmV0dXJuIFtpZHgsIHZdO1xuICB9KS5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgcmV0dXJuIHRoaXMoYVsxXSwgYlsxXSkgfHwgYVswXSAtIGJbMF07XG4gIH0uYmluZChjb21wYXJlRm4pKS5tYXAoZnVuY3Rpb24gKGMpIHtcbiAgICByZXR1cm4gY1sxXTtcbiAgfSk7XG59XG5cbnZhciB0cmFuc3BvcnRzID0ge307XG5cbnZhciBXb3JtaG9sZSA9IFZ1ZS5leHRlbmQoe1xuICBkYXRhOiBmdW5jdGlvbiBkYXRhKCkge1xuICAgIHJldHVybiB7IHRyYW5zcG9ydHM6IHRyYW5zcG9ydHMgfTtcbiAgfSxcbiAgbWV0aG9kczoge1xuICAgIG9wZW46IGZ1bmN0aW9uIG9wZW4odHJhbnNwb3J0KSB7XG4gICAgICB2YXIgdG8gPSB0cmFuc3BvcnQudG8sXG4gICAgICAgICAgZnJvbSA9IHRyYW5zcG9ydC5mcm9tLFxuICAgICAgICAgIHBhc3NlbmdlcnMgPSB0cmFuc3BvcnQucGFzc2VuZ2VycztcblxuICAgICAgaWYgKCF0byB8fCAhZnJvbSB8fCAhcGFzc2VuZ2VycykgcmV0dXJuO1xuXG4gICAgICB0cmFuc3BvcnQucGFzc2VuZ2VycyA9IGZyZWV6ZShwYXNzZW5nZXJzKTtcbiAgICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXModGhpcy50cmFuc3BvcnRzKTtcbiAgICAgIGlmIChrZXlzLmluZGV4T2YodG8pID09PSAtMSkge1xuICAgICAgICBWdWUuc2V0KHRoaXMudHJhbnNwb3J0cywgdG8sIFtdKTtcbiAgICAgIH1cblxuICAgICAgdmFyIGN1cnJlbnRJbmRleCA9IHRoaXMuZ2V0VHJhbnNwb3J0SW5kZXgodHJhbnNwb3J0KTtcbiAgICAgIC8vIENvcHlpbmcgdGhlIGFycmF5IGhlcmUgc28gdGhhdCB0aGUgUG9ydGFsVGFyZ2V0IGNoYW5nZSBldmVudCB3aWxsIGFjdHVhbGx5IGNvbnRhaW4gdHdvIGRpc3RpbmN0IGFycmF5c1xuICAgICAgdmFyIG5ld1RyYW5zcG9ydHMgPSB0aGlzLnRyYW5zcG9ydHNbdG9dLnNsaWNlKDApO1xuICAgICAgaWYgKGN1cnJlbnRJbmRleCA9PT0gLTEpIHtcbiAgICAgICAgbmV3VHJhbnNwb3J0cy5wdXNoKHRyYW5zcG9ydCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuZXdUcmFuc3BvcnRzW2N1cnJlbnRJbmRleF0gPSB0cmFuc3BvcnQ7XG4gICAgICB9XG4gICAgICB0aGlzLnRyYW5zcG9ydHNbdG9dID0gc3RhYmxlU29ydChuZXdUcmFuc3BvcnRzLCBmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICByZXR1cm4gYS5vcmRlciAtIGIub3JkZXI7XG4gICAgICB9KTtcbiAgICB9LFxuICAgIGNsb3NlOiBmdW5jdGlvbiBjbG9zZSh0cmFuc3BvcnQpIHtcbiAgICAgIHZhciBmb3JjZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogZmFsc2U7XG4gICAgICB2YXIgdG8gPSB0cmFuc3BvcnQudG8sXG4gICAgICAgICAgZnJvbSA9IHRyYW5zcG9ydC5mcm9tO1xuXG4gICAgICBpZiAoIXRvIHx8ICFmcm9tKSByZXR1cm47XG4gICAgICBpZiAoIXRoaXMudHJhbnNwb3J0c1t0b10pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoZm9yY2UpIHtcbiAgICAgICAgdGhpcy50cmFuc3BvcnRzW3RvXSA9IFtdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5nZXRUcmFuc3BvcnRJbmRleCh0cmFuc3BvcnQpO1xuICAgICAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgICAgIC8vIENvcHlpbmcgdGhlIGFycmF5IGhlcmUgc28gdGhhdCB0aGUgUG9ydGFsVGFyZ2V0IGNoYW5nZSBldmVudCB3aWxsIGFjdHVhbGx5IGNvbnRhaW4gdHdvIGRpc3RpbmN0IGFycmF5c1xuICAgICAgICAgIHZhciBuZXdUcmFuc3BvcnRzID0gdGhpcy50cmFuc3BvcnRzW3RvXS5zbGljZSgwKTtcbiAgICAgICAgICBuZXdUcmFuc3BvcnRzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgdGhpcy50cmFuc3BvcnRzW3RvXSA9IG5ld1RyYW5zcG9ydHM7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIGhhc1RhcmdldDogZnVuY3Rpb24gaGFzVGFyZ2V0KHRvKSB7XG4gICAgICByZXR1cm4gdGhpcy50cmFuc3BvcnRzLmhhc093blByb3BlcnR5KHRvKTtcbiAgICB9LFxuICAgIGhhc0NvbnRlbnRGb3I6IGZ1bmN0aW9uIGhhc0NvbnRlbnRGb3IodG8pIHtcbiAgICAgIGlmICghdGhpcy50cmFuc3BvcnRzW3RvXSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5nZXRDb250ZW50Rm9yKHRvKS5sZW5ndGggPiAwO1xuICAgIH0sXG4gICAgZ2V0U291cmNlRm9yOiBmdW5jdGlvbiBnZXRTb3VyY2VGb3IodG8pIHtcbiAgICAgIHJldHVybiB0aGlzLnRyYW5zcG9ydHNbdG9dICYmIHRoaXMudHJhbnNwb3J0c1t0b11bMF0uZnJvbTtcbiAgICB9LFxuICAgIGdldENvbnRlbnRGb3I6IGZ1bmN0aW9uIGdldENvbnRlbnRGb3IodG8pIHtcbiAgICAgIHZhciB0cmFuc3BvcnRzID0gdGhpcy50cmFuc3BvcnRzW3RvXTtcbiAgICAgIGlmICghdHJhbnNwb3J0cykge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNvbWJpbmVQYXNzZW5nZXJzKHRyYW5zcG9ydHMpO1xuICAgIH0sXG4gICAgZ2V0VHJhbnNwb3J0SW5kZXg6IGZ1bmN0aW9uIGdldFRyYW5zcG9ydEluZGV4KF9yZWYpIHtcbiAgICAgIHZhciB0byA9IF9yZWYudG8sXG4gICAgICAgICAgZnJvbSA9IF9yZWYuZnJvbTtcblxuICAgICAgZm9yICh2YXIgaSBpbiB0aGlzLnRyYW5zcG9ydHNbdG9dKSB7XG4gICAgICAgIGlmICh0aGlzLnRyYW5zcG9ydHNbdG9dW2ldLmZyb20gPT09IGZyb20pIHtcbiAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIC0xO1xuICAgIH1cbiAgfVxufSk7XG5cbnZhciB3b3JtaG9sZSA9IG5ldyBXb3JtaG9sZSh0cmFuc3BvcnRzKTtcblxudmFyIG5lc3RSRSA9IC9eKGF0dHJzfHByb3BzfG9ufG5hdGl2ZU9ufGNsYXNzfHN0eWxlfGhvb2spJC87XG5cbnZhciBiYWJlbEhlbHBlclZ1ZUpzeE1lcmdlUHJvcHMgPSBmdW5jdGlvbiBtZXJnZUpTWFByb3BzIChvYmpzKSB7XG4gIHJldHVybiBvYmpzLnJlZHVjZShmdW5jdGlvbiAoYSwgYikge1xuICAgIHZhciBhYSwgYmIsIGtleSwgbmVzdGVkS2V5LCB0ZW1wO1xuICAgIGZvciAoa2V5IGluIGIpIHtcbiAgICAgIGFhID0gYVtrZXldO1xuICAgICAgYmIgPSBiW2tleV07XG4gICAgICBpZiAoYWEgJiYgbmVzdFJFLnRlc3Qoa2V5KSkge1xuICAgICAgICAvLyBub3JtYWxpemUgY2xhc3NcbiAgICAgICAgaWYgKGtleSA9PT0gJ2NsYXNzJykge1xuICAgICAgICAgIGlmICh0eXBlb2YgYWEgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICB0ZW1wID0gYWE7XG4gICAgICAgICAgICBhW2tleV0gPSBhYSA9IHt9O1xuICAgICAgICAgICAgYWFbdGVtcF0gPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodHlwZW9mIGJiID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgdGVtcCA9IGJiO1xuICAgICAgICAgICAgYltrZXldID0gYmIgPSB7fTtcbiAgICAgICAgICAgIGJiW3RlbXBdID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGtleSA9PT0gJ29uJyB8fCBrZXkgPT09ICduYXRpdmVPbicgfHwga2V5ID09PSAnaG9vaycpIHtcbiAgICAgICAgICAvLyBtZXJnZSBmdW5jdGlvbnNcbiAgICAgICAgICBmb3IgKG5lc3RlZEtleSBpbiBiYikge1xuICAgICAgICAgICAgYWFbbmVzdGVkS2V5XSA9IG1lcmdlRm4oYWFbbmVzdGVkS2V5XSwgYmJbbmVzdGVkS2V5XSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoYWEpKSB7XG4gICAgICAgICAgYVtrZXldID0gYWEuY29uY2F0KGJiKTtcbiAgICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGJiKSkge1xuICAgICAgICAgIGFba2V5XSA9IFthYV0uY29uY2F0KGJiKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBmb3IgKG5lc3RlZEtleSBpbiBiYikge1xuICAgICAgICAgICAgYWFbbmVzdGVkS2V5XSA9IGJiW25lc3RlZEtleV07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhW2tleV0gPSBiW2tleV07XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBhXG4gIH0sIHt9KVxufTtcblxuZnVuY3Rpb24gbWVyZ2VGbiAoYSwgYikge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIGEgJiYgYS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIGIgJiYgYi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9XG59XG5cbi8vIGltcG9ydCB7IHRyYW5zcG9ydHMgfSBmcm9tICcuL3dvcm1ob2xlJ1xudmFyIFBvcnRhbFRhcmdldCA9IHtcbiAgYWJzdHJhY3Q6IGZhbHNlLFxuICBuYW1lOiAncG9ydGFsVGFyZ2V0JyxcbiAgcHJvcHM6IHtcbiAgICBhdHRyaWJ1dGVzOiB7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDogZnVuY3Rpb24gX2RlZmF1bHQoKSB7XG4gICAgICAgIHJldHVybiB7fTtcbiAgICAgIH0gfSxcbiAgICBtdWx0aXBsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIG5hbWU6IHsgdHlwZTogU3RyaW5nLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHNsaW06IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBzbG90UHJvcHM6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiBmdW5jdGlvbiBfZGVmYXVsdCgpIHtcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgfSB9LFxuICAgIHRhZzogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICdkaXYnIH0sXG4gICAgdHJhbnNpdGlvbjogeyB0eXBlOiBbQm9vbGVhbiwgU3RyaW5nLCBPYmplY3RdLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIHRyYW5zaXRpb25FdmVudHM6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiBmdW5jdGlvbiBfZGVmYXVsdCgpIHtcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgfSB9XG4gIH0sXG4gIGRhdGE6IGZ1bmN0aW9uIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRyYW5zcG9ydHM6IHdvcm1ob2xlLnRyYW5zcG9ydHMsXG4gICAgICBmaXJzdFJlbmRlcjogdHJ1ZVxuICAgIH07XG4gIH0sXG4gIGNyZWF0ZWQ6IGZ1bmN0aW9uIGNyZWF0ZWQoKSB7XG4gICAgaWYgKCF0aGlzLnRyYW5zcG9ydHNbdGhpcy5uYW1lXSkge1xuICAgICAgdGhpcy4kc2V0KHRoaXMudHJhbnNwb3J0cywgdGhpcy5uYW1lLCBbXSk7XG4gICAgfVxuICB9LFxuICBtb3VudGVkOiBmdW5jdGlvbiBtb3VudGVkKCkge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICB0aGlzLnVud2F0Y2ggPSB0aGlzLiR3YXRjaCgnb3duVHJhbnNwb3J0cycsIHRoaXMuZW1pdENoYW5nZSk7XG4gICAgdGhpcy4kbmV4dFRpY2soZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKF90aGlzLnRyYW5zaXRpb24pIHtcbiAgICAgICAgLy8gb25seSB3aGVuIHdlIGhhdmUgYSB0cmFuc2l0aW9uLCBiZWNhdXNlIGl0IGNhdXNlcyBhIHJlLXJlbmRlclxuICAgICAgICBfdGhpcy5maXJzdFJlbmRlciA9IGZhbHNlO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGlmICh0aGlzLiRvcHRpb25zLmFic3RyYWN0KSB7XG4gICAgICB0aGlzLiRvcHRpb25zLmFic3RyYWN0ID0gZmFsc2U7XG4gICAgfVxuICB9LFxuICB1cGRhdGVkOiBmdW5jdGlvbiB1cGRhdGVkKCkge1xuICAgIGlmICh0aGlzLiRvcHRpb25zLmFic3RyYWN0KSB7XG4gICAgICB0aGlzLiRvcHRpb25zLmFic3RyYWN0ID0gZmFsc2U7XG4gICAgfVxuICB9LFxuICBiZWZvcmVEZXN0cm95OiBmdW5jdGlvbiBiZWZvcmVEZXN0cm95KCkge1xuICAgIHRoaXMudW53YXRjaCgpO1xuICB9LFxuXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBvd25UcmFuc3BvcnRzOiBmdW5jdGlvbiBvd25UcmFuc3BvcnRzKCkge1xuICAgICAgdmFyIHRyYW5zcG9ydHMkJDEgPSB0aGlzLnRyYW5zcG9ydHNbdGhpcy5uYW1lXSB8fCBbXTtcbiAgICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XG4gICAgICAgIHJldHVybiB0cmFuc3BvcnRzJCQxO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRyYW5zcG9ydHMkJDEubGVuZ3RoID09PSAwID8gW10gOiBbdHJhbnNwb3J0cyQkMVt0cmFuc3BvcnRzJCQxLmxlbmd0aCAtIDFdXTtcbiAgICB9LFxuICAgIHBhc3NlbmdlcnM6IGZ1bmN0aW9uIHBhc3NlbmdlcnMoKSB7XG4gICAgICByZXR1cm4gY29tYmluZVBhc3NlbmdlcnModGhpcy5vd25UcmFuc3BvcnRzLCB0aGlzLnNsb3RQcm9wcyk7XG4gICAgfSxcbiAgICBoYXNBdHRyaWJ1dGVzOiBmdW5jdGlvbiBoYXNBdHRyaWJ1dGVzKCkge1xuICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuYXR0cmlidXRlcykubGVuZ3RoID4gMDtcbiAgICB9LFxuICAgIHdpdGhUcmFuc2l0aW9uOiBmdW5jdGlvbiB3aXRoVHJhbnNpdGlvbigpIHtcbiAgICAgIHJldHVybiAhIXRoaXMudHJhbnNpdGlvbjtcbiAgICB9LFxuICAgIHRyYW5zaXRpb25EYXRhOiBmdW5jdGlvbiB0cmFuc2l0aW9uRGF0YSgpIHtcbiAgICAgIHZhciB0ID0gdGhpcy50cmFuc2l0aW9uO1xuICAgICAgdmFyIGRhdGEgPSB7fTtcblxuICAgICAgLy8gRHVyaW5nIGZpcnN0IHJlbmRlciwgd2UgcmVuZGVyIGEgZHVtYiB0cmFuc2l0aW9uIHdpdGhvdXQgYW55IGNsYXNzZXMsIGV2ZW50cyBhbmQgYSBmYWtlIG5hbWVcbiAgICAgIC8vIFdlIGhhdmUgdG8gZG8gdGhpcyB0byBlbXVsYXRlIHRoZSBub3JtYWwgYmVoYXZpb3VyIG9mIHRyYW5zaXRpb25zIHdpdGhvdXQgYGFwcGVhcmBcbiAgICAgIC8vIGJlY2F1c2UgaW4gUG9ydGFscywgdHJhbnNpdGlvbnMgY2FuIGJlaGF2ZSBhcyBpZiBhcHBlYXIgd2FzIGRlZmluZWQgdW5kZXIgY2VydGFpbiBjb25kaXRpb25zLlxuICAgICAgaWYgKHRoaXMuZmlyc3RSZW5kZXIgJiYgX3R5cGVvZih0aGlzLnRyYW5zaXRpb24pID09PSAnb2JqZWN0JyAmJiAhdGhpcy50cmFuc2l0aW9uLmFwcGVhcikge1xuICAgICAgICBkYXRhLnByb3BzID0geyBuYW1lOiAnX19ub3RyYW5zdGl0aW9uX19wb3J0YWwtdnVlX18nIH07XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIHQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGRhdGEucHJvcHMgPSB7IG5hbWU6IHQgfTtcbiAgICAgIH0gZWxzZSBpZiAoKHR5cGVvZiB0ID09PSAndW5kZWZpbmVkJyA/ICd1bmRlZmluZWQnIDogX3R5cGVvZih0KSkgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGRhdGEucHJvcHMgPSB0O1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMucmVuZGVyU2xpbSkge1xuICAgICAgICBkYXRhLnByb3BzLnRhZyA9IHRoaXMudGFnO1xuICAgICAgfVxuICAgICAgZGF0YS5vbiA9IHRoaXMudHJhbnNpdGlvbkV2ZW50cztcblxuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfSxcbiAgICB0cmFuc3BvcnRlZENsYXNzZXM6IGZ1bmN0aW9uIHRyYW5zcG9ydGVkQ2xhc3NlcygpIHtcbiAgICAgIHJldHVybiB0aGlzLm93blRyYW5zcG9ydHMubWFwKGZ1bmN0aW9uICh0cmFuc3BvcnQpIHtcbiAgICAgICAgcmV0dXJuIHRyYW5zcG9ydC5jbGFzcztcbiAgICAgIH0pLnJlZHVjZShmdW5jdGlvbiAoYXJyYXksIHN1YmFycmF5KSB7XG4gICAgICAgIHJldHVybiBhcnJheS5jb25jYXQoc3ViYXJyYXkpO1xuICAgICAgfSwgW10pO1xuICAgICAgLy8uZmlsdGVyKChzdHJpbmcsIGluZGV4LCBhcnJheSkgPT4gYXJyYXkuaW5kZXhPZihzdHJpbmcpID09PSBpbmRleClcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGVtaXRDaGFuZ2U6IGZ1bmN0aW9uIGVtaXRDaGFuZ2UobmV3VHJhbnNwb3J0cywgb2xkVHJhbnNwb3J0cykge1xuICAgICAgaWYgKHRoaXMubXVsdGlwbGUpIHtcbiAgICAgICAgdGhpcy4kZW1pdCgnY2hhbmdlJywgW10uY29uY2F0KHRvQ29uc3VtYWJsZUFycmF5KG5ld1RyYW5zcG9ydHMpKSwgW10uY29uY2F0KHRvQ29uc3VtYWJsZUFycmF5KG9sZFRyYW5zcG9ydHMpKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgbmV3VHJhbnNwb3J0ID0gbmV3VHJhbnNwb3J0cy5sZW5ndGggPT09IDAgPyB1bmRlZmluZWQgOiBuZXdUcmFuc3BvcnRzWzBdO1xuICAgICAgICB2YXIgb2xkVHJhbnNwb3J0ID0gb2xkVHJhbnNwb3J0cy5sZW5ndGggPT09IDAgPyB1bmRlZmluZWQgOiBvbGRUcmFuc3BvcnRzWzBdO1xuICAgICAgICB0aGlzLiRlbWl0KCdjaGFuZ2UnLCBfZXh0ZW5kcyh7fSwgbmV3VHJhbnNwb3J0KSwgX2V4dGVuZHMoe30sIG9sZFRyYW5zcG9ydCkpO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyBjYW4ndCBiZSBhIGNvbXB1dGVkIHByb3AgYmVjYXVzZSBpdCBoYXMgdG8gXCJyZWFjdFwiIHRvICRzbG90IGNoYW5nZXMuXG4gICAgY2hpbGRyZW46IGZ1bmN0aW9uIGNoaWxkcmVuKCkge1xuICAgICAgcmV0dXJuIHRoaXMucGFzc2VuZ2Vycy5sZW5ndGggIT09IDAgPyB0aGlzLnBhc3NlbmdlcnMgOiB0aGlzLiRzbG90cy5kZWZhdWx0IHx8IFtdO1xuICAgIH0sXG4gICAgbm9XcmFwcGVyOiBmdW5jdGlvbiBub1dyYXBwZXIoKSB7XG4gICAgICB2YXIgbm9XcmFwcGVyID0gIXRoaXMuaGFzQXR0cmlidXRlcyAmJiB0aGlzLnNsaW07XG4gICAgICBpZiAobm9XcmFwcGVyICYmIHRoaXMuY2hpbGRyZW4oKS5sZW5ndGggPiAxKSB7XG4gICAgICAgIGNvbnNvbGUud2FybignW3BvcnRhbC12dWVdOiBQb3J0YWxUYXJnZXQgd2l0aCBgc2xpbWAgb3B0aW9uIHJlY2VpdmVkIG1vcmUgdGhhbiBvbmUgY2hpbGQgZWxlbWVudC4nKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBub1dyYXBwZXI7XG4gICAgfVxuICB9LFxuICByZW5kZXI6IGZ1bmN0aW9uIHJlbmRlcihoKSB7XG4gICAgdGhpcy4kb3B0aW9ucy5hYnN0cmFjdCA9IHRydWU7XG4gICAgdmFyIG5vV3JhcHBlciA9IHRoaXMubm9XcmFwcGVyKCk7XG4gICAgdmFyIGNoaWxkcmVuID0gdGhpcy5jaGlsZHJlbigpO1xuICAgIHZhciBUcmFuc2l0aW9uVHlwZSA9IG5vV3JhcHBlciA/ICd0cmFuc2l0aW9uJyA6ICd0cmFuc2l0aW9uLWdyb3VwJztcbiAgICB2YXIgVGFnID0gdGhpcy50YWc7XG5cbiAgICBpZiAodGhpcy53aXRoVHJhbnNpdGlvbikge1xuICAgICAgcmV0dXJuIGgoXG4gICAgICAgIFRyYW5zaXRpb25UeXBlLFxuICAgICAgICBiYWJlbEhlbHBlclZ1ZUpzeE1lcmdlUHJvcHMoW3RoaXMudHJhbnNpdGlvbkRhdGEsIHsgJ2NsYXNzJzogJ3Z1ZS1wb3J0YWwtdGFyZ2V0JyB9XSksXG4gICAgICAgIFtjaGlsZHJlbl1cbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vV3JhcHBlciA/IGNoaWxkcmVuWzBdIDogaChcbiAgICAgIFRhZyxcbiAgICAgIGJhYmVsSGVscGVyVnVlSnN4TWVyZ2VQcm9wcyhbe1xuICAgICAgICAnY2xhc3MnOiAndnVlLXBvcnRhbC10YXJnZXQgJyArIHRoaXMudHJhbnNwb3J0ZWRDbGFzc2VzLmpvaW4oJyAnKVxuICAgICAgfSwgdGhpcy5hdHRyaWJ1dGVzXSksXG4gICAgICBbY2hpbGRyZW5dXG4gICAgKTtcbiAgfVxufTtcblxudmFyIGluQnJvd3NlciA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnO1xuXG52YXIgcGlkID0gMTtcblxudmFyIFBvcnRhbCA9IHtcbiAgYWJzdHJhY3Q6IGZhbHNlLFxuICBuYW1lOiAncG9ydGFsJyxcbiAgcHJvcHM6IHtcbiAgICAvKiBnbG9iYWwgSFRNTEVsZW1lbnQgKi9cbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIG5hbWU6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBmdW5jdGlvbiBfZGVmYXVsdCgpIHtcbiAgICAgICAgcmV0dXJuIFN0cmluZyhwaWQrKyk7XG4gICAgICB9IH0sXG4gICAgb3JkZXI6IHsgdHlwZTogTnVtYmVyLCBkZWZhdWx0OiAwIH0sXG4gICAgc2xpbTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIHNsb3RQcm9wczogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6IGZ1bmN0aW9uIF9kZWZhdWx0KCkge1xuICAgICAgICByZXR1cm4ge307XG4gICAgICB9IH0sXG4gICAgdGFnOiB7IHR5cGU6IFtTdHJpbmddLCBkZWZhdWx0OiAnRElWJyB9LFxuICAgIHRhcmdldEVsOiB7IHR5cGU6IGluQnJvd3NlciA/IFtTdHJpbmcsIEhUTUxFbGVtZW50XSA6IFN0cmluZyB9LFxuICAgIHRhcmdldENsYXNzOiB7IHR5cGU6IFN0cmluZyB9LFxuICAgIHRvOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiBmdW5jdGlvbiBfZGVmYXVsdCgpIHtcbiAgICAgICAgcmV0dXJuIFN0cmluZyhNYXRoLnJvdW5kKE1hdGgucmFuZG9tKCkgKiAxMDAwMDAwMCkpO1xuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtb3VudGVkOiBmdW5jdGlvbiBtb3VudGVkKCkge1xuICAgIGlmICh0aGlzLnRhcmdldEVsKSB7XG4gICAgICB0aGlzLm1vdW50VG9UYXJnZXQoKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLmRpc2FibGVkKSB7XG4gICAgICB0aGlzLnNlbmRVcGRhdGUoKTtcbiAgICB9XG4gICAgLy8gUmVzZXQgaGFjayB0byBtYWtlIGNoaWxkIGNvbXBvbmVudHMgc2tpcCB0aGUgcG9ydGFsIHdoZW4gZGVmaW5pbmcgdGhlaXIgJHBhcmVudFxuICAgIC8vIHdhcyBzZXQgdG8gdHJ1ZSBkdXJpbmcgcmVuZGVyIHdoZW4gd2UgcmVuZGVyIHNvbWV0aGluZyBsb2NhbGx5LlxuICAgIGlmICh0aGlzLiRvcHRpb25zLmFic3RyYWN0KSB7XG4gICAgICB0aGlzLiRvcHRpb25zLmFic3RyYWN0ID0gZmFsc2U7XG4gICAgfVxuICB9LFxuICB1cGRhdGVkOiBmdW5jdGlvbiB1cGRhdGVkKCkge1xuICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XG4gICAgICB0aGlzLmNsZWFyKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2VuZFVwZGF0ZSgpO1xuICAgIH1cbiAgICAvLyBSZXNldCBoYWNrIHRvIG1ha2UgY2hpbGQgY29tcG9uZW50cyBza2lwIHRoZSBwb3J0YWwgd2hlbiBkZWZpbmluZyB0aGVpciAkcGFyZW50XG4gICAgLy8gd2FzIHNldCB0byB0cnVlIGR1cmluZyByZW5kZXIgd2hlbiB3ZSByZW5kZXIgc29tZXRoaW5nIGxvY2FsbHkuXG4gICAgaWYgKHRoaXMuJG9wdGlvbnMuYWJzdHJhY3QpIHtcbiAgICAgIHRoaXMuJG9wdGlvbnMuYWJzdHJhY3QgPSBmYWxzZTtcbiAgICB9XG4gIH0sXG4gIGJlZm9yZURlc3Ryb3k6IGZ1bmN0aW9uIGJlZm9yZURlc3Ryb3koKSB7XG4gICAgdGhpcy5jbGVhcigpO1xuICAgIGlmICh0aGlzLm1vdW50ZWRDb21wKSB7XG4gICAgICB0aGlzLm1vdW50ZWRDb21wLiRkZXN0cm95KCk7XG4gICAgfVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgdG86IGZ1bmN0aW9uIHRvKG5ld1ZhbHVlLCBvbGRWYWx1ZSkge1xuICAgICAgb2xkVmFsdWUgJiYgb2xkVmFsdWUgIT09IG5ld1ZhbHVlICYmIHRoaXMuY2xlYXIob2xkVmFsdWUpO1xuICAgICAgdGhpcy5zZW5kVXBkYXRlKCk7XG4gICAgfSxcbiAgICB0YXJnZXRFbDogZnVuY3Rpb24gdGFyZ2V0RWwobmV3VmFsdWUsIG9sZFZhbHVlKSB7XG4gICAgICBpZiAobmV3VmFsdWUpIHtcbiAgICAgICAgdGhpcy5tb3VudFRvVGFyZ2V0KCk7XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBub3JtYWxpemVkU2xvdHM6IGZ1bmN0aW9uIG5vcm1hbGl6ZWRTbG90cygpIHtcbiAgICAgIHJldHVybiB0aGlzLiRzY29wZWRTbG90cy5kZWZhdWx0ID8gW3RoaXMuJHNjb3BlZFNsb3RzLmRlZmF1bHRdIDogdGhpcy4kc2xvdHMuZGVmYXVsdDtcbiAgICB9LFxuICAgIHNlbmRVcGRhdGU6IGZ1bmN0aW9uIHNlbmRVcGRhdGUoKSB7XG4gICAgICB2YXIgc2xvdENvbnRlbnQgPSB0aGlzLm5vcm1hbGl6ZWRTbG90cygpO1xuXG4gICAgICBpZiAoc2xvdENvbnRlbnQpIHtcbiAgICAgICAgd29ybWhvbGUub3Blbih7XG4gICAgICAgICAgZnJvbTogdGhpcy5uYW1lLFxuICAgICAgICAgIHRvOiB0aGlzLnRvLFxuICAgICAgICAgIHBhc3NlbmdlcnM6IFtdLmNvbmNhdCh0b0NvbnN1bWFibGVBcnJheShzbG90Q29udGVudCkpLFxuICAgICAgICAgIGNsYXNzOiB0aGlzLnRhcmdldENsYXNzICYmIHRoaXMudGFyZ2V0Q2xhc3Muc3BsaXQoJyAnKSxcbiAgICAgICAgICBvcmRlcjogdGhpcy5vcmRlclxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuY2xlYXIoKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGNsZWFyOiBmdW5jdGlvbiBjbGVhcih0YXJnZXQpIHtcbiAgICAgIHdvcm1ob2xlLmNsb3NlKHtcbiAgICAgICAgZnJvbTogdGhpcy5uYW1lLFxuICAgICAgICB0bzogdGFyZ2V0IHx8IHRoaXMudG9cbiAgICAgIH0pO1xuICAgIH0sXG4gICAgbW91bnRUb1RhcmdldDogZnVuY3Rpb24gbW91bnRUb1RhcmdldCgpIHtcbiAgICAgIHZhciBlbCA9IHZvaWQgMDtcbiAgICAgIHZhciB0YXJnZXQgPSB0aGlzLnRhcmdldEVsO1xuXG4gICAgICBpZiAodHlwZW9mIHRhcmdldCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgZWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHRhcmdldCk7XG4gICAgICB9IGVsc2UgaWYgKHRhcmdldCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG4gICAgICAgIGVsID0gdGFyZ2V0O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS53YXJuKCdbdnVlLXBvcnRhbF06IHZhbHVlIG9mIHRhcmdldEVsIG11c3QgYmUgb2YgdHlwZSBTdHJpbmcgb3IgSFRNTEVsZW1lbnQnKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoZWwpIHtcbiAgICAgICAgdmFyIG5ld1RhcmdldCA9IG5ldyBWdWUoX2V4dGVuZHMoe30sIFBvcnRhbFRhcmdldCwge1xuICAgICAgICAgIHBhcmVudDogdGhpcyxcbiAgICAgICAgICBwcm9wc0RhdGE6IHtcbiAgICAgICAgICAgIG5hbWU6IHRoaXMudG8sXG4gICAgICAgICAgICB0YWc6IGVsLnRhZ05hbWUsXG4gICAgICAgICAgICBhdHRyaWJ1dGVzOiBleHRyYWN0QXR0cmlidXRlcyhlbClcbiAgICAgICAgICB9XG4gICAgICAgIH0pKTtcbiAgICAgICAgbmV3VGFyZ2V0LiRtb3VudChlbCk7XG4gICAgICAgIHRoaXMubW91bnRlZENvbXAgPSBuZXdUYXJnZXQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLndhcm4oJ1t2dWUtcG9ydGFsXTogVGhlIHNwZWNpZmllZCB0YXJnZXRFbCAnICsgdGFyZ2V0ICsgJyB3YXMgbm90IGZvdW5kJyk7XG4gICAgICB9XG4gICAgfSxcbiAgICBub3JtYWxpemVDaGlsZHJlbjogZnVuY3Rpb24gbm9ybWFsaXplQ2hpbGRyZW4oY2hpbGRyZW4pIHtcbiAgICAgIHJldHVybiB0eXBlb2YgY2hpbGRyZW4gPT09ICdmdW5jdGlvbicgPyBjaGlsZHJlbih0aGlzLnNsb3RQcm9wcykgOiBjaGlsZHJlbjtcbiAgICB9XG4gIH0sXG5cbiAgcmVuZGVyOiBmdW5jdGlvbiByZW5kZXIoaCkge1xuICAgIHZhciBjaGlsZHJlbiA9IHRoaXMuJHNsb3RzLmRlZmF1bHQgfHwgdGhpcy4kc2NvcGVkU2xvdHMuZGVmYXVsdCB8fCBbXTtcbiAgICB2YXIgVGFnID0gdGhpcy50YWc7XG4gICAgaWYgKGNoaWxkcmVuLmxlbmd0aCAmJiB0aGlzLmRpc2FibGVkKSB7XG4gICAgICAvLyBoYWNrIHRvIG1ha2UgY2hpbGQgY29tcG9uZW50cyBza2lwIHRoZSBwb3J0YWwgd2hlbiBkZWZpbmluZyB0aGVpciAkcGFyZW50XG4gICAgICB0aGlzLiRvcHRpb25zLmFic3RyYWN0ID0gdHJ1ZTtcbiAgICAgIHJldHVybiBjaGlsZHJlbi5sZW5ndGggPD0gMSAmJiB0aGlzLnNsaW0gPyBjaGlsZHJlblswXSA6IGgoVGFnLCBbdGhpcy5ub3JtYWxpemVDaGlsZHJlbihjaGlsZHJlbildKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGgoVGFnLCB7XG4gICAgICAgICdjbGFzcyc6ICd2LXBvcnRhbCcsXG4gICAgICAgIHN0eWxlOiAnZGlzcGxheTogbm9uZScsXG4gICAgICAgIGtleTogJ3YtcG9ydGFsLXBsYWNlaG9sZGVyJ1xuICAgICAgfSk7XG4gICAgICAvLyBoKHRoaXMudGFnLCB7IGNsYXNzOiB7ICd2LXBvcnRhbCc6IHRydWUgfSwgc3R5bGU6IHsgZGlzcGxheTogJ25vbmUnIH0sIGtleTogJ3YtcG9ydGFsLXBsYWNlaG9sZGVyJyB9KVxuICAgIH1cbiAgfVxufTtcblxuZnVuY3Rpb24gaW5zdGFsbChWdWUkJDEpIHtcbiAgdmFyIG9wdHMgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9O1xuXG4gIFZ1ZSQkMS5jb21wb25lbnQob3B0cy5wb3J0YWxOYW1lIHx8ICdQb3J0YWwnLCBQb3J0YWwpO1xuICBWdWUkJDEuY29tcG9uZW50KG9wdHMucG9ydGFsVGFyZ2V0TmFtZSB8fCAnUG9ydGFsVGFyZ2V0JywgUG9ydGFsVGFyZ2V0KTtcbn1cbmlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuVnVlKSB7XG4gIHdpbmRvdy5WdWUudXNlKHsgaW5zdGFsbDogaW5zdGFsbCB9KTtcbn1cblxudmFyIGluZGV4ID0ge1xuICBpbnN0YWxsOiBpbnN0YWxsLFxuICBQb3J0YWw6IFBvcnRhbCxcbiAgUG9ydGFsVGFyZ2V0OiBQb3J0YWxUYXJnZXQsXG4gIFdvcm1ob2xlOiB3b3JtaG9sZVxufTtcblxucmV0dXJuIGluZGV4O1xuXG59KSkpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cG9ydGFsLXZ1ZS5qcy5tYXBcbiIsIi8vIHNoaW0gZm9yIHVzaW5nIHByb2Nlc3MgaW4gYnJvd3NlclxudmFyIHByb2Nlc3MgPSBtb2R1bGUuZXhwb3J0cyA9IHt9O1xuXG4vLyBjYWNoZWQgZnJvbSB3aGF0ZXZlciBnbG9iYWwgaXMgcHJlc2VudCBzbyB0aGF0IHRlc3QgcnVubmVycyB0aGF0IHN0dWIgaXRcbi8vIGRvbid0IGJyZWFrIHRoaW5ncy4gIEJ1dCB3ZSBuZWVkIHRvIHdyYXAgaXQgaW4gYSB0cnkgY2F0Y2ggaW4gY2FzZSBpdCBpc1xuLy8gd3JhcHBlZCBpbiBzdHJpY3QgbW9kZSBjb2RlIHdoaWNoIGRvZXNuJ3QgZGVmaW5lIGFueSBnbG9iYWxzLiAgSXQncyBpbnNpZGUgYVxuLy8gZnVuY3Rpb24gYmVjYXVzZSB0cnkvY2F0Y2hlcyBkZW9wdGltaXplIGluIGNlcnRhaW4gZW5naW5lcy5cblxudmFyIGNhY2hlZFNldFRpbWVvdXQ7XG52YXIgY2FjaGVkQ2xlYXJUaW1lb3V0O1xuXG5mdW5jdGlvbiBkZWZhdWx0U2V0VGltb3V0KCkge1xuICAgIHRocm93IG5ldyBFcnJvcignc2V0VGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZCcpO1xufVxuZnVuY3Rpb24gZGVmYXVsdENsZWFyVGltZW91dCAoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdjbGVhclRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQnKTtcbn1cbihmdW5jdGlvbiAoKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgaWYgKHR5cGVvZiBzZXRUaW1lb3V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gc2V0VGltZW91dDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBkZWZhdWx0U2V0VGltb3V0O1xuICAgICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gZGVmYXVsdFNldFRpbW91dDtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgaWYgKHR5cGVvZiBjbGVhclRpbWVvdXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGNsZWFyVGltZW91dDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGRlZmF1bHRDbGVhclRpbWVvdXQ7XG4gICAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGRlZmF1bHRDbGVhclRpbWVvdXQ7XG4gICAgfVxufSAoKSlcbmZ1bmN0aW9uIHJ1blRpbWVvdXQoZnVuKSB7XG4gICAgaWYgKGNhY2hlZFNldFRpbWVvdXQgPT09IHNldFRpbWVvdXQpIHtcbiAgICAgICAgLy9ub3JtYWwgZW52aXJvbWVudHMgaW4gc2FuZSBzaXR1YXRpb25zXG4gICAgICAgIHJldHVybiBzZXRUaW1lb3V0KGZ1biwgMCk7XG4gICAgfVxuICAgIC8vIGlmIHNldFRpbWVvdXQgd2Fzbid0IGF2YWlsYWJsZSBidXQgd2FzIGxhdHRlciBkZWZpbmVkXG4gICAgaWYgKChjYWNoZWRTZXRUaW1lb3V0ID09PSBkZWZhdWx0U2V0VGltb3V0IHx8ICFjYWNoZWRTZXRUaW1lb3V0KSAmJiBzZXRUaW1lb3V0KSB7XG4gICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBzZXRUaW1lb3V0O1xuICAgICAgICByZXR1cm4gc2V0VGltZW91dChmdW4sIDApO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICAvLyB3aGVuIHdoZW4gc29tZWJvZHkgaGFzIHNjcmV3ZWQgd2l0aCBzZXRUaW1lb3V0IGJ1dCBubyBJLkUuIG1hZGRuZXNzXG4gICAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0KGZ1biwgMCk7XG4gICAgfSBjYXRjaChlKXtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIFdoZW4gd2UgYXJlIGluIEkuRS4gYnV0IHRoZSBzY3JpcHQgaGFzIGJlZW4gZXZhbGVkIHNvIEkuRS4gZG9lc24ndCB0cnVzdCB0aGUgZ2xvYmFsIG9iamVjdCB3aGVuIGNhbGxlZCBub3JtYWxseVxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZFNldFRpbWVvdXQuY2FsbChudWxsLCBmdW4sIDApO1xuICAgICAgICB9IGNhdGNoKGUpe1xuICAgICAgICAgICAgLy8gc2FtZSBhcyBhYm92ZSBidXQgd2hlbiBpdCdzIGEgdmVyc2lvbiBvZiBJLkUuIHRoYXQgbXVzdCBoYXZlIHRoZSBnbG9iYWwgb2JqZWN0IGZvciAndGhpcycsIGhvcGZ1bGx5IG91ciBjb250ZXh0IGNvcnJlY3Qgb3RoZXJ3aXNlIGl0IHdpbGwgdGhyb3cgYSBnbG9iYWwgZXJyb3JcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0LmNhbGwodGhpcywgZnVuLCAwKTtcbiAgICAgICAgfVxuICAgIH1cblxuXG59XG5mdW5jdGlvbiBydW5DbGVhclRpbWVvdXQobWFya2VyKSB7XG4gICAgaWYgKGNhY2hlZENsZWFyVGltZW91dCA9PT0gY2xlYXJUaW1lb3V0KSB7XG4gICAgICAgIC8vbm9ybWFsIGVudmlyb21lbnRzIGluIHNhbmUgc2l0dWF0aW9uc1xuICAgICAgICByZXR1cm4gY2xlYXJUaW1lb3V0KG1hcmtlcik7XG4gICAgfVxuICAgIC8vIGlmIGNsZWFyVGltZW91dCB3YXNuJ3QgYXZhaWxhYmxlIGJ1dCB3YXMgbGF0dGVyIGRlZmluZWRcbiAgICBpZiAoKGNhY2hlZENsZWFyVGltZW91dCA9PT0gZGVmYXVsdENsZWFyVGltZW91dCB8fCAhY2FjaGVkQ2xlYXJUaW1lb3V0KSAmJiBjbGVhclRpbWVvdXQpIHtcbiAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gY2xlYXJUaW1lb3V0O1xuICAgICAgICByZXR1cm4gY2xlYXJUaW1lb3V0KG1hcmtlcik7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIC8vIHdoZW4gd2hlbiBzb21lYm9keSBoYXMgc2NyZXdlZCB3aXRoIHNldFRpbWVvdXQgYnV0IG5vIEkuRS4gbWFkZG5lc3NcbiAgICAgICAgcmV0dXJuIGNhY2hlZENsZWFyVGltZW91dChtYXJrZXIpO1xuICAgIH0gY2F0Y2ggKGUpe1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gV2hlbiB3ZSBhcmUgaW4gSS5FLiBidXQgdGhlIHNjcmlwdCBoYXMgYmVlbiBldmFsZWQgc28gSS5FLiBkb2Vzbid0ICB0cnVzdCB0aGUgZ2xvYmFsIG9iamVjdCB3aGVuIGNhbGxlZCBub3JtYWxseVxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZENsZWFyVGltZW91dC5jYWxsKG51bGwsIG1hcmtlcik7XG4gICAgICAgIH0gY2F0Y2ggKGUpe1xuICAgICAgICAgICAgLy8gc2FtZSBhcyBhYm92ZSBidXQgd2hlbiBpdCdzIGEgdmVyc2lvbiBvZiBJLkUuIHRoYXQgbXVzdCBoYXZlIHRoZSBnbG9iYWwgb2JqZWN0IGZvciAndGhpcycsIGhvcGZ1bGx5IG91ciBjb250ZXh0IGNvcnJlY3Qgb3RoZXJ3aXNlIGl0IHdpbGwgdGhyb3cgYSBnbG9iYWwgZXJyb3IuXG4gICAgICAgICAgICAvLyBTb21lIHZlcnNpb25zIG9mIEkuRS4gaGF2ZSBkaWZmZXJlbnQgcnVsZXMgZm9yIGNsZWFyVGltZW91dCB2cyBzZXRUaW1lb3V0XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkQ2xlYXJUaW1lb3V0LmNhbGwodGhpcywgbWFya2VyKTtcbiAgICAgICAgfVxuICAgIH1cblxuXG5cbn1cbnZhciBxdWV1ZSA9IFtdO1xudmFyIGRyYWluaW5nID0gZmFsc2U7XG52YXIgY3VycmVudFF1ZXVlO1xudmFyIHF1ZXVlSW5kZXggPSAtMTtcblxuZnVuY3Rpb24gY2xlYW5VcE5leHRUaWNrKCkge1xuICAgIGlmICghZHJhaW5pbmcgfHwgIWN1cnJlbnRRdWV1ZSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGRyYWluaW5nID0gZmFsc2U7XG4gICAgaWYgKGN1cnJlbnRRdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgcXVldWUgPSBjdXJyZW50UXVldWUuY29uY2F0KHF1ZXVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBxdWV1ZUluZGV4ID0gLTE7XG4gICAgfVxuICAgIGlmIChxdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgZHJhaW5RdWV1ZSgpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZHJhaW5RdWV1ZSgpIHtcbiAgICBpZiAoZHJhaW5pbmcpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgdGltZW91dCA9IHJ1blRpbWVvdXQoY2xlYW5VcE5leHRUaWNrKTtcbiAgICBkcmFpbmluZyA9IHRydWU7XG5cbiAgICB2YXIgbGVuID0gcXVldWUubGVuZ3RoO1xuICAgIHdoaWxlKGxlbikge1xuICAgICAgICBjdXJyZW50UXVldWUgPSBxdWV1ZTtcbiAgICAgICAgcXVldWUgPSBbXTtcbiAgICAgICAgd2hpbGUgKCsrcXVldWVJbmRleCA8IGxlbikge1xuICAgICAgICAgICAgaWYgKGN1cnJlbnRRdWV1ZSkge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRRdWV1ZVtxdWV1ZUluZGV4XS5ydW4oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBxdWV1ZUluZGV4ID0gLTE7XG4gICAgICAgIGxlbiA9IHF1ZXVlLmxlbmd0aDtcbiAgICB9XG4gICAgY3VycmVudFF1ZXVlID0gbnVsbDtcbiAgICBkcmFpbmluZyA9IGZhbHNlO1xuICAgIHJ1bkNsZWFyVGltZW91dCh0aW1lb3V0KTtcbn1cblxucHJvY2Vzcy5uZXh0VGljayA9IGZ1bmN0aW9uIChmdW4pIHtcbiAgICB2YXIgYXJncyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoIC0gMSk7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBhcmdzW2kgLSAxXSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBxdWV1ZS5wdXNoKG5ldyBJdGVtKGZ1biwgYXJncykpO1xuICAgIGlmIChxdWV1ZS5sZW5ndGggPT09IDEgJiYgIWRyYWluaW5nKSB7XG4gICAgICAgIHJ1blRpbWVvdXQoZHJhaW5RdWV1ZSk7XG4gICAgfVxufTtcblxuLy8gdjggbGlrZXMgcHJlZGljdGlibGUgb2JqZWN0c1xuZnVuY3Rpb24gSXRlbShmdW4sIGFycmF5KSB7XG4gICAgdGhpcy5mdW4gPSBmdW47XG4gICAgdGhpcy5hcnJheSA9IGFycmF5O1xufVxuSXRlbS5wcm90b3R5cGUucnVuID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZnVuLmFwcGx5KG51bGwsIHRoaXMuYXJyYXkpO1xufTtcbnByb2Nlc3MudGl0bGUgPSAnYnJvd3Nlcic7XG5wcm9jZXNzLmJyb3dzZXIgPSB0cnVlO1xucHJvY2Vzcy5lbnYgPSB7fTtcbnByb2Nlc3MuYXJndiA9IFtdO1xucHJvY2Vzcy52ZXJzaW9uID0gJyc7IC8vIGVtcHR5IHN0cmluZyB0byBhdm9pZCByZWdleHAgaXNzdWVzXG5wcm9jZXNzLnZlcnNpb25zID0ge307XG5cbmZ1bmN0aW9uIG5vb3AoKSB7fVxuXG5wcm9jZXNzLm9uID0gbm9vcDtcbnByb2Nlc3MuYWRkTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5vbmNlID0gbm9vcDtcbnByb2Nlc3Mub2ZmID0gbm9vcDtcbnByb2Nlc3MucmVtb3ZlTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5yZW1vdmVBbGxMaXN0ZW5lcnMgPSBub29wO1xucHJvY2Vzcy5lbWl0ID0gbm9vcDtcbnByb2Nlc3MucHJlcGVuZExpc3RlbmVyID0gbm9vcDtcbnByb2Nlc3MucHJlcGVuZE9uY2VMaXN0ZW5lciA9IG5vb3A7XG5cbnByb2Nlc3MubGlzdGVuZXJzID0gZnVuY3Rpb24gKG5hbWUpIHsgcmV0dXJuIFtdIH1cblxucHJvY2Vzcy5iaW5kaW5nID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuYmluZGluZyBpcyBub3Qgc3VwcG9ydGVkJyk7XG59O1xuXG5wcm9jZXNzLmN3ZCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuICcvJyB9O1xucHJvY2Vzcy5jaGRpciA9IGZ1bmN0aW9uIChkaXIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuY2hkaXIgaXMgbm90IHN1cHBvcnRlZCcpO1xufTtcbnByb2Nlc3MudW1hc2sgPSBmdW5jdGlvbigpIHsgcmV0dXJuIDA7IH07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgc3RyaWN0VXJpRW5jb2RlID0gcmVxdWlyZSgnc3RyaWN0LXVyaS1lbmNvZGUnKTtcbnZhciBvYmplY3RBc3NpZ24gPSByZXF1aXJlKCdvYmplY3QtYXNzaWduJyk7XG52YXIgZGVjb2RlQ29tcG9uZW50ID0gcmVxdWlyZSgnZGVjb2RlLXVyaS1jb21wb25lbnQnKTtcblxuZnVuY3Rpb24gZW5jb2RlckZvckFycmF5Rm9ybWF0KG9wdHMpIHtcblx0c3dpdGNoIChvcHRzLmFycmF5Rm9ybWF0KSB7XG5cdFx0Y2FzZSAnaW5kZXgnOlxuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uIChrZXksIHZhbHVlLCBpbmRleCkge1xuXHRcdFx0XHRyZXR1cm4gdmFsdWUgPT09IG51bGwgPyBbXG5cdFx0XHRcdFx0ZW5jb2RlKGtleSwgb3B0cyksXG5cdFx0XHRcdFx0J1snLFxuXHRcdFx0XHRcdGluZGV4LFxuXHRcdFx0XHRcdCddJ1xuXHRcdFx0XHRdLmpvaW4oJycpIDogW1xuXHRcdFx0XHRcdGVuY29kZShrZXksIG9wdHMpLFxuXHRcdFx0XHRcdCdbJyxcblx0XHRcdFx0XHRlbmNvZGUoaW5kZXgsIG9wdHMpLFxuXHRcdFx0XHRcdCddPScsXG5cdFx0XHRcdFx0ZW5jb2RlKHZhbHVlLCBvcHRzKVxuXHRcdFx0XHRdLmpvaW4oJycpO1xuXHRcdFx0fTtcblxuXHRcdGNhc2UgJ2JyYWNrZXQnOlxuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG5cdFx0XHRcdHJldHVybiB2YWx1ZSA9PT0gbnVsbCA/IGVuY29kZShrZXksIG9wdHMpIDogW1xuXHRcdFx0XHRcdGVuY29kZShrZXksIG9wdHMpLFxuXHRcdFx0XHRcdCdbXT0nLFxuXHRcdFx0XHRcdGVuY29kZSh2YWx1ZSwgb3B0cylcblx0XHRcdFx0XS5qb2luKCcnKTtcblx0XHRcdH07XG5cblx0XHRkZWZhdWx0OlxuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG5cdFx0XHRcdHJldHVybiB2YWx1ZSA9PT0gbnVsbCA/IGVuY29kZShrZXksIG9wdHMpIDogW1xuXHRcdFx0XHRcdGVuY29kZShrZXksIG9wdHMpLFxuXHRcdFx0XHRcdCc9Jyxcblx0XHRcdFx0XHRlbmNvZGUodmFsdWUsIG9wdHMpXG5cdFx0XHRcdF0uam9pbignJyk7XG5cdFx0XHR9O1xuXHR9XG59XG5cbmZ1bmN0aW9uIHBhcnNlckZvckFycmF5Rm9ybWF0KG9wdHMpIHtcblx0dmFyIHJlc3VsdDtcblxuXHRzd2l0Y2ggKG9wdHMuYXJyYXlGb3JtYXQpIHtcblx0XHRjYXNlICdpbmRleCc6XG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24gKGtleSwgdmFsdWUsIGFjY3VtdWxhdG9yKSB7XG5cdFx0XHRcdHJlc3VsdCA9IC9cXFsoXFxkKilcXF0kLy5leGVjKGtleSk7XG5cblx0XHRcdFx0a2V5ID0ga2V5LnJlcGxhY2UoL1xcW1xcZCpcXF0kLywgJycpO1xuXG5cdFx0XHRcdGlmICghcmVzdWx0KSB7XG5cdFx0XHRcdFx0YWNjdW11bGF0b3Jba2V5XSA9IHZhbHVlO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChhY2N1bXVsYXRvcltrZXldID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRhY2N1bXVsYXRvcltrZXldID0ge307XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRhY2N1bXVsYXRvcltrZXldW3Jlc3VsdFsxXV0gPSB2YWx1ZTtcblx0XHRcdH07XG5cblx0XHRjYXNlICdicmFja2V0Jzpcblx0XHRcdHJldHVybiBmdW5jdGlvbiAoa2V5LCB2YWx1ZSwgYWNjdW11bGF0b3IpIHtcblx0XHRcdFx0cmVzdWx0ID0gLyhcXFtcXF0pJC8uZXhlYyhrZXkpO1xuXHRcdFx0XHRrZXkgPSBrZXkucmVwbGFjZSgvXFxbXFxdJC8sICcnKTtcblxuXHRcdFx0XHRpZiAoIXJlc3VsdCkge1xuXHRcdFx0XHRcdGFjY3VtdWxhdG9yW2tleV0gPSB2YWx1ZTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH0gZWxzZSBpZiAoYWNjdW11bGF0b3Jba2V5XSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0YWNjdW11bGF0b3Jba2V5XSA9IFt2YWx1ZV07XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0YWNjdW11bGF0b3Jba2V5XSA9IFtdLmNvbmNhdChhY2N1bXVsYXRvcltrZXldLCB2YWx1ZSk7XG5cdFx0XHR9O1xuXG5cdFx0ZGVmYXVsdDpcblx0XHRcdHJldHVybiBmdW5jdGlvbiAoa2V5LCB2YWx1ZSwgYWNjdW11bGF0b3IpIHtcblx0XHRcdFx0aWYgKGFjY3VtdWxhdG9yW2tleV0gPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdGFjY3VtdWxhdG9yW2tleV0gPSB2YWx1ZTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRhY2N1bXVsYXRvcltrZXldID0gW10uY29uY2F0KGFjY3VtdWxhdG9yW2tleV0sIHZhbHVlKTtcblx0XHRcdH07XG5cdH1cbn1cblxuZnVuY3Rpb24gZW5jb2RlKHZhbHVlLCBvcHRzKSB7XG5cdGlmIChvcHRzLmVuY29kZSkge1xuXHRcdHJldHVybiBvcHRzLnN0cmljdCA/IHN0cmljdFVyaUVuY29kZSh2YWx1ZSkgOiBlbmNvZGVVUklDb21wb25lbnQodmFsdWUpO1xuXHR9XG5cblx0cmV0dXJuIHZhbHVlO1xufVxuXG5mdW5jdGlvbiBrZXlzU29ydGVyKGlucHV0KSB7XG5cdGlmIChBcnJheS5pc0FycmF5KGlucHV0KSkge1xuXHRcdHJldHVybiBpbnB1dC5zb3J0KCk7XG5cdH0gZWxzZSBpZiAodHlwZW9mIGlucHV0ID09PSAnb2JqZWN0Jykge1xuXHRcdHJldHVybiBrZXlzU29ydGVyKE9iamVjdC5rZXlzKGlucHV0KSkuc29ydChmdW5jdGlvbiAoYSwgYikge1xuXHRcdFx0cmV0dXJuIE51bWJlcihhKSAtIE51bWJlcihiKTtcblx0XHR9KS5tYXAoZnVuY3Rpb24gKGtleSkge1xuXHRcdFx0cmV0dXJuIGlucHV0W2tleV07XG5cdFx0fSk7XG5cdH1cblxuXHRyZXR1cm4gaW5wdXQ7XG59XG5cbmZ1bmN0aW9uIGV4dHJhY3Qoc3RyKSB7XG5cdHZhciBxdWVyeVN0YXJ0ID0gc3RyLmluZGV4T2YoJz8nKTtcblx0aWYgKHF1ZXJ5U3RhcnQgPT09IC0xKSB7XG5cdFx0cmV0dXJuICcnO1xuXHR9XG5cdHJldHVybiBzdHIuc2xpY2UocXVlcnlTdGFydCArIDEpO1xufVxuXG5mdW5jdGlvbiBwYXJzZShzdHIsIG9wdHMpIHtcblx0b3B0cyA9IG9iamVjdEFzc2lnbih7YXJyYXlGb3JtYXQ6ICdub25lJ30sIG9wdHMpO1xuXG5cdHZhciBmb3JtYXR0ZXIgPSBwYXJzZXJGb3JBcnJheUZvcm1hdChvcHRzKTtcblxuXHQvLyBDcmVhdGUgYW4gb2JqZWN0IHdpdGggbm8gcHJvdG90eXBlXG5cdC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9zaW5kcmVzb3JodXMvcXVlcnktc3RyaW5nL2lzc3Vlcy80N1xuXHR2YXIgcmV0ID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuXHRpZiAodHlwZW9mIHN0ciAhPT0gJ3N0cmluZycpIHtcblx0XHRyZXR1cm4gcmV0O1xuXHR9XG5cblx0c3RyID0gc3RyLnRyaW0oKS5yZXBsYWNlKC9eWz8jJl0vLCAnJyk7XG5cblx0aWYgKCFzdHIpIHtcblx0XHRyZXR1cm4gcmV0O1xuXHR9XG5cblx0c3RyLnNwbGl0KCcmJykuZm9yRWFjaChmdW5jdGlvbiAocGFyYW0pIHtcblx0XHR2YXIgcGFydHMgPSBwYXJhbS5yZXBsYWNlKC9cXCsvZywgJyAnKS5zcGxpdCgnPScpO1xuXHRcdC8vIEZpcmVmb3ggKHByZSA0MCkgZGVjb2RlcyBgJTNEYCB0byBgPWBcblx0XHQvLyBodHRwczovL2dpdGh1Yi5jb20vc2luZHJlc29yaHVzL3F1ZXJ5LXN0cmluZy9wdWxsLzM3XG5cdFx0dmFyIGtleSA9IHBhcnRzLnNoaWZ0KCk7XG5cdFx0dmFyIHZhbCA9IHBhcnRzLmxlbmd0aCA+IDAgPyBwYXJ0cy5qb2luKCc9JykgOiB1bmRlZmluZWQ7XG5cblx0XHQvLyBtaXNzaW5nIGA9YCBzaG91bGQgYmUgYG51bGxgOlxuXHRcdC8vIGh0dHA6Ly93My5vcmcvVFIvMjAxMi9XRC11cmwtMjAxMjA1MjQvI2NvbGxlY3QtdXJsLXBhcmFtZXRlcnNcblx0XHR2YWwgPSB2YWwgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBkZWNvZGVDb21wb25lbnQodmFsKTtcblxuXHRcdGZvcm1hdHRlcihkZWNvZGVDb21wb25lbnQoa2V5KSwgdmFsLCByZXQpO1xuXHR9KTtcblxuXHRyZXR1cm4gT2JqZWN0LmtleXMocmV0KS5zb3J0KCkucmVkdWNlKGZ1bmN0aW9uIChyZXN1bHQsIGtleSkge1xuXHRcdHZhciB2YWwgPSByZXRba2V5XTtcblx0XHRpZiAoQm9vbGVhbih2YWwpICYmIHR5cGVvZiB2YWwgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KHZhbCkpIHtcblx0XHRcdC8vIFNvcnQgb2JqZWN0IGtleXMsIG5vdCB2YWx1ZXNcblx0XHRcdHJlc3VsdFtrZXldID0ga2V5c1NvcnRlcih2YWwpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXN1bHRba2V5XSA9IHZhbDtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9LCBPYmplY3QuY3JlYXRlKG51bGwpKTtcbn1cblxuZXhwb3J0cy5leHRyYWN0ID0gZXh0cmFjdDtcbmV4cG9ydHMucGFyc2UgPSBwYXJzZTtcblxuZXhwb3J0cy5zdHJpbmdpZnkgPSBmdW5jdGlvbiAob2JqLCBvcHRzKSB7XG5cdHZhciBkZWZhdWx0cyA9IHtcblx0XHRlbmNvZGU6IHRydWUsXG5cdFx0c3RyaWN0OiB0cnVlLFxuXHRcdGFycmF5Rm9ybWF0OiAnbm9uZSdcblx0fTtcblxuXHRvcHRzID0gb2JqZWN0QXNzaWduKGRlZmF1bHRzLCBvcHRzKTtcblxuXHRpZiAob3B0cy5zb3J0ID09PSBmYWxzZSkge1xuXHRcdG9wdHMuc29ydCA9IGZ1bmN0aW9uICgpIHt9O1xuXHR9XG5cblx0dmFyIGZvcm1hdHRlciA9IGVuY29kZXJGb3JBcnJheUZvcm1hdChvcHRzKTtcblxuXHRyZXR1cm4gb2JqID8gT2JqZWN0LmtleXMob2JqKS5zb3J0KG9wdHMuc29ydCkubWFwKGZ1bmN0aW9uIChrZXkpIHtcblx0XHR2YXIgdmFsID0gb2JqW2tleV07XG5cblx0XHRpZiAodmFsID09PSB1bmRlZmluZWQpIHtcblx0XHRcdHJldHVybiAnJztcblx0XHR9XG5cblx0XHRpZiAodmFsID09PSBudWxsKSB7XG5cdFx0XHRyZXR1cm4gZW5jb2RlKGtleSwgb3B0cyk7XG5cdFx0fVxuXG5cdFx0aWYgKEFycmF5LmlzQXJyYXkodmFsKSkge1xuXHRcdFx0dmFyIHJlc3VsdCA9IFtdO1xuXG5cdFx0XHR2YWwuc2xpY2UoKS5mb3JFYWNoKGZ1bmN0aW9uICh2YWwyKSB7XG5cdFx0XHRcdGlmICh2YWwyID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXN1bHQucHVzaChmb3JtYXR0ZXIoa2V5LCB2YWwyLCByZXN1bHQubGVuZ3RoKSk7XG5cdFx0XHR9KTtcblxuXHRcdFx0cmV0dXJuIHJlc3VsdC5qb2luKCcmJyk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGVuY29kZShrZXksIG9wdHMpICsgJz0nICsgZW5jb2RlKHZhbCwgb3B0cyk7XG5cdH0pLmZpbHRlcihmdW5jdGlvbiAoeCkge1xuXHRcdHJldHVybiB4Lmxlbmd0aCA+IDA7XG5cdH0pLmpvaW4oJyYnKSA6ICcnO1xufTtcblxuZXhwb3J0cy5wYXJzZVVybCA9IGZ1bmN0aW9uIChzdHIsIG9wdHMpIHtcblx0cmV0dXJuIHtcblx0XHR1cmw6IHN0ci5zcGxpdCgnPycpWzBdIHx8ICcnLFxuXHRcdHF1ZXJ5OiBwYXJzZShleHRyYWN0KHN0ciksIG9wdHMpXG5cdH07XG59O1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTQtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG4vLyBUaGlzIG1ldGhvZCBvZiBvYnRhaW5pbmcgYSByZWZlcmVuY2UgdG8gdGhlIGdsb2JhbCBvYmplY3QgbmVlZHMgdG8gYmVcbi8vIGtlcHQgaWRlbnRpY2FsIHRvIHRoZSB3YXkgaXQgaXMgb2J0YWluZWQgaW4gcnVudGltZS5qc1xudmFyIGcgPSAoZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzIH0pKCkgfHwgRnVuY3Rpb24oXCJyZXR1cm4gdGhpc1wiKSgpO1xuXG4vLyBVc2UgYGdldE93blByb3BlcnR5TmFtZXNgIGJlY2F1c2Ugbm90IGFsbCBicm93c2VycyBzdXBwb3J0IGNhbGxpbmdcbi8vIGBoYXNPd25Qcm9wZXJ0eWAgb24gdGhlIGdsb2JhbCBgc2VsZmAgb2JqZWN0IGluIGEgd29ya2VyLiBTZWUgIzE4My5cbnZhciBoYWRSdW50aW1lID0gZy5yZWdlbmVyYXRvclJ1bnRpbWUgJiZcbiAgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoZykuaW5kZXhPZihcInJlZ2VuZXJhdG9yUnVudGltZVwiKSA+PSAwO1xuXG4vLyBTYXZlIHRoZSBvbGQgcmVnZW5lcmF0b3JSdW50aW1lIGluIGNhc2UgaXQgbmVlZHMgdG8gYmUgcmVzdG9yZWQgbGF0ZXIuXG52YXIgb2xkUnVudGltZSA9IGhhZFJ1bnRpbWUgJiYgZy5yZWdlbmVyYXRvclJ1bnRpbWU7XG5cbi8vIEZvcmNlIHJlZXZhbHV0YXRpb24gb2YgcnVudGltZS5qcy5cbmcucmVnZW5lcmF0b3JSdW50aW1lID0gdW5kZWZpbmVkO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCIuL3J1bnRpbWVcIik7XG5cbmlmIChoYWRSdW50aW1lKSB7XG4gIC8vIFJlc3RvcmUgdGhlIG9yaWdpbmFsIHJ1bnRpbWUuXG4gIGcucmVnZW5lcmF0b3JSdW50aW1lID0gb2xkUnVudGltZTtcbn0gZWxzZSB7XG4gIC8vIFJlbW92ZSB0aGUgZ2xvYmFsIHByb3BlcnR5IGFkZGVkIGJ5IHJ1bnRpbWUuanMuXG4gIHRyeSB7XG4gICAgZGVsZXRlIGcucmVnZW5lcmF0b3JSdW50aW1lO1xuICB9IGNhdGNoKGUpIHtcbiAgICBnLnJlZ2VuZXJhdG9yUnVudGltZSA9IHVuZGVmaW5lZDtcbiAgfVxufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTQtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG4hKGZ1bmN0aW9uKGdsb2JhbCkge1xuICBcInVzZSBzdHJpY3RcIjtcblxuICB2YXIgT3AgPSBPYmplY3QucHJvdG90eXBlO1xuICB2YXIgaGFzT3duID0gT3AuaGFzT3duUHJvcGVydHk7XG4gIHZhciB1bmRlZmluZWQ7IC8vIE1vcmUgY29tcHJlc3NpYmxlIHRoYW4gdm9pZCAwLlxuICB2YXIgJFN5bWJvbCA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiA/IFN5bWJvbCA6IHt9O1xuICB2YXIgaXRlcmF0b3JTeW1ib2wgPSAkU3ltYm9sLml0ZXJhdG9yIHx8IFwiQEBpdGVyYXRvclwiO1xuICB2YXIgYXN5bmNJdGVyYXRvclN5bWJvbCA9ICRTeW1ib2wuYXN5bmNJdGVyYXRvciB8fCBcIkBAYXN5bmNJdGVyYXRvclwiO1xuICB2YXIgdG9TdHJpbmdUYWdTeW1ib2wgPSAkU3ltYm9sLnRvU3RyaW5nVGFnIHx8IFwiQEB0b1N0cmluZ1RhZ1wiO1xuXG4gIHZhciBpbk1vZHVsZSA9IHR5cGVvZiBtb2R1bGUgPT09IFwib2JqZWN0XCI7XG4gIHZhciBydW50aW1lID0gZ2xvYmFsLnJlZ2VuZXJhdG9yUnVudGltZTtcbiAgaWYgKHJ1bnRpbWUpIHtcbiAgICBpZiAoaW5Nb2R1bGUpIHtcbiAgICAgIC8vIElmIHJlZ2VuZXJhdG9yUnVudGltZSBpcyBkZWZpbmVkIGdsb2JhbGx5IGFuZCB3ZSdyZSBpbiBhIG1vZHVsZSxcbiAgICAgIC8vIG1ha2UgdGhlIGV4cG9ydHMgb2JqZWN0IGlkZW50aWNhbCB0byByZWdlbmVyYXRvclJ1bnRpbWUuXG4gICAgICBtb2R1bGUuZXhwb3J0cyA9IHJ1bnRpbWU7XG4gICAgfVxuICAgIC8vIERvbid0IGJvdGhlciBldmFsdWF0aW5nIHRoZSByZXN0IG9mIHRoaXMgZmlsZSBpZiB0aGUgcnVudGltZSB3YXNcbiAgICAvLyBhbHJlYWR5IGRlZmluZWQgZ2xvYmFsbHkuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gRGVmaW5lIHRoZSBydW50aW1lIGdsb2JhbGx5IChhcyBleHBlY3RlZCBieSBnZW5lcmF0ZWQgY29kZSkgYXMgZWl0aGVyXG4gIC8vIG1vZHVsZS5leHBvcnRzIChpZiB3ZSdyZSBpbiBhIG1vZHVsZSkgb3IgYSBuZXcsIGVtcHR5IG9iamVjdC5cbiAgcnVudGltZSA9IGdsb2JhbC5yZWdlbmVyYXRvclJ1bnRpbWUgPSBpbk1vZHVsZSA/IG1vZHVsZS5leHBvcnRzIDoge307XG5cbiAgZnVuY3Rpb24gd3JhcChpbm5lckZuLCBvdXRlckZuLCBzZWxmLCB0cnlMb2NzTGlzdCkge1xuICAgIC8vIElmIG91dGVyRm4gcHJvdmlkZWQgYW5kIG91dGVyRm4ucHJvdG90eXBlIGlzIGEgR2VuZXJhdG9yLCB0aGVuIG91dGVyRm4ucHJvdG90eXBlIGluc3RhbmNlb2YgR2VuZXJhdG9yLlxuICAgIHZhciBwcm90b0dlbmVyYXRvciA9IG91dGVyRm4gJiYgb3V0ZXJGbi5wcm90b3R5cGUgaW5zdGFuY2VvZiBHZW5lcmF0b3IgPyBvdXRlckZuIDogR2VuZXJhdG9yO1xuICAgIHZhciBnZW5lcmF0b3IgPSBPYmplY3QuY3JlYXRlKHByb3RvR2VuZXJhdG9yLnByb3RvdHlwZSk7XG4gICAgdmFyIGNvbnRleHQgPSBuZXcgQ29udGV4dCh0cnlMb2NzTGlzdCB8fCBbXSk7XG5cbiAgICAvLyBUaGUgLl9pbnZva2UgbWV0aG9kIHVuaWZpZXMgdGhlIGltcGxlbWVudGF0aW9ucyBvZiB0aGUgLm5leHQsXG4gICAgLy8gLnRocm93LCBhbmQgLnJldHVybiBtZXRob2RzLlxuICAgIGdlbmVyYXRvci5faW52b2tlID0gbWFrZUludm9rZU1ldGhvZChpbm5lckZuLCBzZWxmLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBnZW5lcmF0b3I7XG4gIH1cbiAgcnVudGltZS53cmFwID0gd3JhcDtcblxuICAvLyBUcnkvY2F0Y2ggaGVscGVyIHRvIG1pbmltaXplIGRlb3B0aW1pemF0aW9ucy4gUmV0dXJucyBhIGNvbXBsZXRpb25cbiAgLy8gcmVjb3JkIGxpa2UgY29udGV4dC50cnlFbnRyaWVzW2ldLmNvbXBsZXRpb24uIFRoaXMgaW50ZXJmYWNlIGNvdWxkXG4gIC8vIGhhdmUgYmVlbiAoYW5kIHdhcyBwcmV2aW91c2x5KSBkZXNpZ25lZCB0byB0YWtlIGEgY2xvc3VyZSB0byBiZVxuICAvLyBpbnZva2VkIHdpdGhvdXQgYXJndW1lbnRzLCBidXQgaW4gYWxsIHRoZSBjYXNlcyB3ZSBjYXJlIGFib3V0IHdlXG4gIC8vIGFscmVhZHkgaGF2ZSBhbiBleGlzdGluZyBtZXRob2Qgd2Ugd2FudCB0byBjYWxsLCBzbyB0aGVyZSdzIG5vIG5lZWRcbiAgLy8gdG8gY3JlYXRlIGEgbmV3IGZ1bmN0aW9uIG9iamVjdC4gV2UgY2FuIGV2ZW4gZ2V0IGF3YXkgd2l0aCBhc3N1bWluZ1xuICAvLyB0aGUgbWV0aG9kIHRha2VzIGV4YWN0bHkgb25lIGFyZ3VtZW50LCBzaW5jZSB0aGF0IGhhcHBlbnMgdG8gYmUgdHJ1ZVxuICAvLyBpbiBldmVyeSBjYXNlLCBzbyB3ZSBkb24ndCBoYXZlIHRvIHRvdWNoIHRoZSBhcmd1bWVudHMgb2JqZWN0LiBUaGVcbiAgLy8gb25seSBhZGRpdGlvbmFsIGFsbG9jYXRpb24gcmVxdWlyZWQgaXMgdGhlIGNvbXBsZXRpb24gcmVjb3JkLCB3aGljaFxuICAvLyBoYXMgYSBzdGFibGUgc2hhcGUgYW5kIHNvIGhvcGVmdWxseSBzaG91bGQgYmUgY2hlYXAgdG8gYWxsb2NhdGUuXG4gIGZ1bmN0aW9uIHRyeUNhdGNoKGZuLCBvYmosIGFyZykge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4geyB0eXBlOiBcIm5vcm1hbFwiLCBhcmc6IGZuLmNhbGwob2JqLCBhcmcpIH07XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICByZXR1cm4geyB0eXBlOiBcInRocm93XCIsIGFyZzogZXJyIH07XG4gICAgfVxuICB9XG5cbiAgdmFyIEdlblN0YXRlU3VzcGVuZGVkU3RhcnQgPSBcInN1c3BlbmRlZFN0YXJ0XCI7XG4gIHZhciBHZW5TdGF0ZVN1c3BlbmRlZFlpZWxkID0gXCJzdXNwZW5kZWRZaWVsZFwiO1xuICB2YXIgR2VuU3RhdGVFeGVjdXRpbmcgPSBcImV4ZWN1dGluZ1wiO1xuICB2YXIgR2VuU3RhdGVDb21wbGV0ZWQgPSBcImNvbXBsZXRlZFwiO1xuXG4gIC8vIFJldHVybmluZyB0aGlzIG9iamVjdCBmcm9tIHRoZSBpbm5lckZuIGhhcyB0aGUgc2FtZSBlZmZlY3QgYXNcbiAgLy8gYnJlYWtpbmcgb3V0IG9mIHRoZSBkaXNwYXRjaCBzd2l0Y2ggc3RhdGVtZW50LlxuICB2YXIgQ29udGludWVTZW50aW5lbCA9IHt9O1xuXG4gIC8vIER1bW15IGNvbnN0cnVjdG9yIGZ1bmN0aW9ucyB0aGF0IHdlIHVzZSBhcyB0aGUgLmNvbnN0cnVjdG9yIGFuZFxuICAvLyAuY29uc3RydWN0b3IucHJvdG90eXBlIHByb3BlcnRpZXMgZm9yIGZ1bmN0aW9ucyB0aGF0IHJldHVybiBHZW5lcmF0b3JcbiAgLy8gb2JqZWN0cy4gRm9yIGZ1bGwgc3BlYyBjb21wbGlhbmNlLCB5b3UgbWF5IHdpc2ggdG8gY29uZmlndXJlIHlvdXJcbiAgLy8gbWluaWZpZXIgbm90IHRvIG1hbmdsZSB0aGUgbmFtZXMgb2YgdGhlc2UgdHdvIGZ1bmN0aW9ucy5cbiAgZnVuY3Rpb24gR2VuZXJhdG9yKCkge31cbiAgZnVuY3Rpb24gR2VuZXJhdG9yRnVuY3Rpb24oKSB7fVxuICBmdW5jdGlvbiBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSgpIHt9XG5cbiAgLy8gVGhpcyBpcyBhIHBvbHlmaWxsIGZvciAlSXRlcmF0b3JQcm90b3R5cGUlIGZvciBlbnZpcm9ubWVudHMgdGhhdFxuICAvLyBkb24ndCBuYXRpdmVseSBzdXBwb3J0IGl0LlxuICB2YXIgSXRlcmF0b3JQcm90b3R5cGUgPSB7fTtcbiAgSXRlcmF0b3JQcm90b3R5cGVbaXRlcmF0b3JTeW1ib2xdID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIHZhciBnZXRQcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZjtcbiAgdmFyIE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlID0gZ2V0UHJvdG8gJiYgZ2V0UHJvdG8oZ2V0UHJvdG8odmFsdWVzKFtdKSkpO1xuICBpZiAoTmF0aXZlSXRlcmF0b3JQcm90b3R5cGUgJiZcbiAgICAgIE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlICE9PSBPcCAmJlxuICAgICAgaGFzT3duLmNhbGwoTmF0aXZlSXRlcmF0b3JQcm90b3R5cGUsIGl0ZXJhdG9yU3ltYm9sKSkge1xuICAgIC8vIFRoaXMgZW52aXJvbm1lbnQgaGFzIGEgbmF0aXZlICVJdGVyYXRvclByb3RvdHlwZSU7IHVzZSBpdCBpbnN0ZWFkXG4gICAgLy8gb2YgdGhlIHBvbHlmaWxsLlxuICAgIEl0ZXJhdG9yUHJvdG90eXBlID0gTmF0aXZlSXRlcmF0b3JQcm90b3R5cGU7XG4gIH1cblxuICB2YXIgR3AgPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZS5wcm90b3R5cGUgPVxuICAgIEdlbmVyYXRvci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEl0ZXJhdG9yUHJvdG90eXBlKTtcbiAgR2VuZXJhdG9yRnVuY3Rpb24ucHJvdG90eXBlID0gR3AuY29uc3RydWN0b3IgPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZTtcbiAgR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUuY29uc3RydWN0b3IgPSBHZW5lcmF0b3JGdW5jdGlvbjtcbiAgR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGVbdG9TdHJpbmdUYWdTeW1ib2xdID1cbiAgICBHZW5lcmF0b3JGdW5jdGlvbi5kaXNwbGF5TmFtZSA9IFwiR2VuZXJhdG9yRnVuY3Rpb25cIjtcblxuICAvLyBIZWxwZXIgZm9yIGRlZmluaW5nIHRoZSAubmV4dCwgLnRocm93LCBhbmQgLnJldHVybiBtZXRob2RzIG9mIHRoZVxuICAvLyBJdGVyYXRvciBpbnRlcmZhY2UgaW4gdGVybXMgb2YgYSBzaW5nbGUgLl9pbnZva2UgbWV0aG9kLlxuICBmdW5jdGlvbiBkZWZpbmVJdGVyYXRvck1ldGhvZHMocHJvdG90eXBlKSB7XG4gICAgW1wibmV4dFwiLCBcInRocm93XCIsIFwicmV0dXJuXCJdLmZvckVhY2goZnVuY3Rpb24obWV0aG9kKSB7XG4gICAgICBwcm90b3R5cGVbbWV0aG9kXSA9IGZ1bmN0aW9uKGFyZykge1xuICAgICAgICByZXR1cm4gdGhpcy5faW52b2tlKG1ldGhvZCwgYXJnKTtcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICBydW50aW1lLmlzR2VuZXJhdG9yRnVuY3Rpb24gPSBmdW5jdGlvbihnZW5GdW4pIHtcbiAgICB2YXIgY3RvciA9IHR5cGVvZiBnZW5GdW4gPT09IFwiZnVuY3Rpb25cIiAmJiBnZW5GdW4uY29uc3RydWN0b3I7XG4gICAgcmV0dXJuIGN0b3JcbiAgICAgID8gY3RvciA9PT0gR2VuZXJhdG9yRnVuY3Rpb24gfHxcbiAgICAgICAgLy8gRm9yIHRoZSBuYXRpdmUgR2VuZXJhdG9yRnVuY3Rpb24gY29uc3RydWN0b3IsIHRoZSBiZXN0IHdlIGNhblxuICAgICAgICAvLyBkbyBpcyB0byBjaGVjayBpdHMgLm5hbWUgcHJvcGVydHkuXG4gICAgICAgIChjdG9yLmRpc3BsYXlOYW1lIHx8IGN0b3IubmFtZSkgPT09IFwiR2VuZXJhdG9yRnVuY3Rpb25cIlxuICAgICAgOiBmYWxzZTtcbiAgfTtcblxuICBydW50aW1lLm1hcmsgPSBmdW5jdGlvbihnZW5GdW4pIHtcbiAgICBpZiAoT2JqZWN0LnNldFByb3RvdHlwZU9mKSB7XG4gICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YoZ2VuRnVuLCBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGdlbkZ1bi5fX3Byb3RvX18gPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZTtcbiAgICAgIGlmICghKHRvU3RyaW5nVGFnU3ltYm9sIGluIGdlbkZ1bikpIHtcbiAgICAgICAgZ2VuRnVuW3RvU3RyaW5nVGFnU3ltYm9sXSA9IFwiR2VuZXJhdG9yRnVuY3Rpb25cIjtcbiAgICAgIH1cbiAgICB9XG4gICAgZ2VuRnVuLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoR3ApO1xuICAgIHJldHVybiBnZW5GdW47XG4gIH07XG5cbiAgLy8gV2l0aGluIHRoZSBib2R5IG9mIGFueSBhc3luYyBmdW5jdGlvbiwgYGF3YWl0IHhgIGlzIHRyYW5zZm9ybWVkIHRvXG4gIC8vIGB5aWVsZCByZWdlbmVyYXRvclJ1bnRpbWUuYXdyYXAoeClgLCBzbyB0aGF0IHRoZSBydW50aW1lIGNhbiB0ZXN0XG4gIC8vIGBoYXNPd24uY2FsbCh2YWx1ZSwgXCJfX2F3YWl0XCIpYCB0byBkZXRlcm1pbmUgaWYgdGhlIHlpZWxkZWQgdmFsdWUgaXNcbiAgLy8gbWVhbnQgdG8gYmUgYXdhaXRlZC5cbiAgcnVudGltZS5hd3JhcCA9IGZ1bmN0aW9uKGFyZykge1xuICAgIHJldHVybiB7IF9fYXdhaXQ6IGFyZyB9O1xuICB9O1xuXG4gIGZ1bmN0aW9uIEFzeW5jSXRlcmF0b3IoZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gaW52b2tlKG1ldGhvZCwgYXJnLCByZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIHZhciByZWNvcmQgPSB0cnlDYXRjaChnZW5lcmF0b3JbbWV0aG9kXSwgZ2VuZXJhdG9yLCBhcmcpO1xuICAgICAgaWYgKHJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcbiAgICAgICAgcmVqZWN0KHJlY29yZC5hcmcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IHJlY29yZC5hcmc7XG4gICAgICAgIHZhciB2YWx1ZSA9IHJlc3VsdC52YWx1ZTtcbiAgICAgICAgaWYgKHZhbHVlICYmXG4gICAgICAgICAgICB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiZcbiAgICAgICAgICAgIGhhc093bi5jYWxsKHZhbHVlLCBcIl9fYXdhaXRcIikpIHtcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHZhbHVlLl9fYXdhaXQpLnRoZW4oZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgICAgIGludm9rZShcIm5leHRcIiwgdmFsdWUsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgfSwgZnVuY3Rpb24oZXJyKSB7XG4gICAgICAgICAgICBpbnZva2UoXCJ0aHJvd1wiLCBlcnIsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHZhbHVlKS50aGVuKGZ1bmN0aW9uKHVud3JhcHBlZCkge1xuICAgICAgICAgIC8vIFdoZW4gYSB5aWVsZGVkIFByb21pc2UgaXMgcmVzb2x2ZWQsIGl0cyBmaW5hbCB2YWx1ZSBiZWNvbWVzXG4gICAgICAgICAgLy8gdGhlIC52YWx1ZSBvZiB0aGUgUHJvbWlzZTx7dmFsdWUsZG9uZX0+IHJlc3VsdCBmb3IgdGhlXG4gICAgICAgICAgLy8gY3VycmVudCBpdGVyYXRpb24uIElmIHRoZSBQcm9taXNlIGlzIHJlamVjdGVkLCBob3dldmVyLCB0aGVcbiAgICAgICAgICAvLyByZXN1bHQgZm9yIHRoaXMgaXRlcmF0aW9uIHdpbGwgYmUgcmVqZWN0ZWQgd2l0aCB0aGUgc2FtZVxuICAgICAgICAgIC8vIHJlYXNvbi4gTm90ZSB0aGF0IHJlamVjdGlvbnMgb2YgeWllbGRlZCBQcm9taXNlcyBhcmUgbm90XG4gICAgICAgICAgLy8gdGhyb3duIGJhY2sgaW50byB0aGUgZ2VuZXJhdG9yIGZ1bmN0aW9uLCBhcyBpcyB0aGUgY2FzZVxuICAgICAgICAgIC8vIHdoZW4gYW4gYXdhaXRlZCBQcm9taXNlIGlzIHJlamVjdGVkLiBUaGlzIGRpZmZlcmVuY2UgaW5cbiAgICAgICAgICAvLyBiZWhhdmlvciBiZXR3ZWVuIHlpZWxkIGFuZCBhd2FpdCBpcyBpbXBvcnRhbnQsIGJlY2F1c2UgaXRcbiAgICAgICAgICAvLyBhbGxvd3MgdGhlIGNvbnN1bWVyIHRvIGRlY2lkZSB3aGF0IHRvIGRvIHdpdGggdGhlIHlpZWxkZWRcbiAgICAgICAgICAvLyByZWplY3Rpb24gKHN3YWxsb3cgaXQgYW5kIGNvbnRpbnVlLCBtYW51YWxseSAudGhyb3cgaXQgYmFja1xuICAgICAgICAgIC8vIGludG8gdGhlIGdlbmVyYXRvciwgYWJhbmRvbiBpdGVyYXRpb24sIHdoYXRldmVyKS4gV2l0aFxuICAgICAgICAgIC8vIGF3YWl0LCBieSBjb250cmFzdCwgdGhlcmUgaXMgbm8gb3Bwb3J0dW5pdHkgdG8gZXhhbWluZSB0aGVcbiAgICAgICAgICAvLyByZWplY3Rpb24gcmVhc29uIG91dHNpZGUgdGhlIGdlbmVyYXRvciBmdW5jdGlvbiwgc28gdGhlXG4gICAgICAgICAgLy8gb25seSBvcHRpb24gaXMgdG8gdGhyb3cgaXQgZnJvbSB0aGUgYXdhaXQgZXhwcmVzc2lvbiwgYW5kXG4gICAgICAgICAgLy8gbGV0IHRoZSBnZW5lcmF0b3IgZnVuY3Rpb24gaGFuZGxlIHRoZSBleGNlcHRpb24uXG4gICAgICAgICAgcmVzdWx0LnZhbHVlID0gdW53cmFwcGVkO1xuICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgfSwgcmVqZWN0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgcHJldmlvdXNQcm9taXNlO1xuXG4gICAgZnVuY3Rpb24gZW5xdWV1ZShtZXRob2QsIGFyZykge1xuICAgICAgZnVuY3Rpb24gY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmcoKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICBpbnZva2UobWV0aG9kLCBhcmcsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcHJldmlvdXNQcm9taXNlID1cbiAgICAgICAgLy8gSWYgZW5xdWV1ZSBoYXMgYmVlbiBjYWxsZWQgYmVmb3JlLCB0aGVuIHdlIHdhbnQgdG8gd2FpdCB1bnRpbFxuICAgICAgICAvLyBhbGwgcHJldmlvdXMgUHJvbWlzZXMgaGF2ZSBiZWVuIHJlc29sdmVkIGJlZm9yZSBjYWxsaW5nIGludm9rZSxcbiAgICAgICAgLy8gc28gdGhhdCByZXN1bHRzIGFyZSBhbHdheXMgZGVsaXZlcmVkIGluIHRoZSBjb3JyZWN0IG9yZGVyLiBJZlxuICAgICAgICAvLyBlbnF1ZXVlIGhhcyBub3QgYmVlbiBjYWxsZWQgYmVmb3JlLCB0aGVuIGl0IGlzIGltcG9ydGFudCB0b1xuICAgICAgICAvLyBjYWxsIGludm9rZSBpbW1lZGlhdGVseSwgd2l0aG91dCB3YWl0aW5nIG9uIGEgY2FsbGJhY2sgdG8gZmlyZSxcbiAgICAgICAgLy8gc28gdGhhdCB0aGUgYXN5bmMgZ2VuZXJhdG9yIGZ1bmN0aW9uIGhhcyB0aGUgb3Bwb3J0dW5pdHkgdG8gZG9cbiAgICAgICAgLy8gYW55IG5lY2Vzc2FyeSBzZXR1cCBpbiBhIHByZWRpY3RhYmxlIHdheS4gVGhpcyBwcmVkaWN0YWJpbGl0eVxuICAgICAgICAvLyBpcyB3aHkgdGhlIFByb21pc2UgY29uc3RydWN0b3Igc3luY2hyb25vdXNseSBpbnZva2VzIGl0c1xuICAgICAgICAvLyBleGVjdXRvciBjYWxsYmFjaywgYW5kIHdoeSBhc3luYyBmdW5jdGlvbnMgc3luY2hyb25vdXNseVxuICAgICAgICAvLyBleGVjdXRlIGNvZGUgYmVmb3JlIHRoZSBmaXJzdCBhd2FpdC4gU2luY2Ugd2UgaW1wbGVtZW50IHNpbXBsZVxuICAgICAgICAvLyBhc3luYyBmdW5jdGlvbnMgaW4gdGVybXMgb2YgYXN5bmMgZ2VuZXJhdG9ycywgaXQgaXMgZXNwZWNpYWxseVxuICAgICAgICAvLyBpbXBvcnRhbnQgdG8gZ2V0IHRoaXMgcmlnaHQsIGV2ZW4gdGhvdWdoIGl0IHJlcXVpcmVzIGNhcmUuXG4gICAgICAgIHByZXZpb3VzUHJvbWlzZSA/IHByZXZpb3VzUHJvbWlzZS50aGVuKFxuICAgICAgICAgIGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnLFxuICAgICAgICAgIC8vIEF2b2lkIHByb3BhZ2F0aW5nIGZhaWx1cmVzIHRvIFByb21pc2VzIHJldHVybmVkIGJ5IGxhdGVyXG4gICAgICAgICAgLy8gaW52b2NhdGlvbnMgb2YgdGhlIGl0ZXJhdG9yLlxuICAgICAgICAgIGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnXG4gICAgICAgICkgOiBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZygpO1xuICAgIH1cblxuICAgIC8vIERlZmluZSB0aGUgdW5pZmllZCBoZWxwZXIgbWV0aG9kIHRoYXQgaXMgdXNlZCB0byBpbXBsZW1lbnQgLm5leHQsXG4gICAgLy8gLnRocm93LCBhbmQgLnJldHVybiAoc2VlIGRlZmluZUl0ZXJhdG9yTWV0aG9kcykuXG4gICAgdGhpcy5faW52b2tlID0gZW5xdWV1ZTtcbiAgfVxuXG4gIGRlZmluZUl0ZXJhdG9yTWV0aG9kcyhBc3luY0l0ZXJhdG9yLnByb3RvdHlwZSk7XG4gIEFzeW5jSXRlcmF0b3IucHJvdG90eXBlW2FzeW5jSXRlcmF0b3JTeW1ib2xdID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuICBydW50aW1lLkFzeW5jSXRlcmF0b3IgPSBBc3luY0l0ZXJhdG9yO1xuXG4gIC8vIE5vdGUgdGhhdCBzaW1wbGUgYXN5bmMgZnVuY3Rpb25zIGFyZSBpbXBsZW1lbnRlZCBvbiB0b3Agb2ZcbiAgLy8gQXN5bmNJdGVyYXRvciBvYmplY3RzOyB0aGV5IGp1c3QgcmV0dXJuIGEgUHJvbWlzZSBmb3IgdGhlIHZhbHVlIG9mXG4gIC8vIHRoZSBmaW5hbCByZXN1bHQgcHJvZHVjZWQgYnkgdGhlIGl0ZXJhdG9yLlxuICBydW50aW1lLmFzeW5jID0gZnVuY3Rpb24oaW5uZXJGbiwgb3V0ZXJGbiwgc2VsZiwgdHJ5TG9jc0xpc3QpIHtcbiAgICB2YXIgaXRlciA9IG5ldyBBc3luY0l0ZXJhdG9yKFxuICAgICAgd3JhcChpbm5lckZuLCBvdXRlckZuLCBzZWxmLCB0cnlMb2NzTGlzdClcbiAgICApO1xuXG4gICAgcmV0dXJuIHJ1bnRpbWUuaXNHZW5lcmF0b3JGdW5jdGlvbihvdXRlckZuKVxuICAgICAgPyBpdGVyIC8vIElmIG91dGVyRm4gaXMgYSBnZW5lcmF0b3IsIHJldHVybiB0aGUgZnVsbCBpdGVyYXRvci5cbiAgICAgIDogaXRlci5uZXh0KCkudGhlbihmdW5jdGlvbihyZXN1bHQpIHtcbiAgICAgICAgICByZXR1cm4gcmVzdWx0LmRvbmUgPyByZXN1bHQudmFsdWUgOiBpdGVyLm5leHQoKTtcbiAgICAgICAgfSk7XG4gIH07XG5cbiAgZnVuY3Rpb24gbWFrZUludm9rZU1ldGhvZChpbm5lckZuLCBzZWxmLCBjb250ZXh0KSB7XG4gICAgdmFyIHN0YXRlID0gR2VuU3RhdGVTdXNwZW5kZWRTdGFydDtcblxuICAgIHJldHVybiBmdW5jdGlvbiBpbnZva2UobWV0aG9kLCBhcmcpIHtcbiAgICAgIGlmIChzdGF0ZSA9PT0gR2VuU3RhdGVFeGVjdXRpbmcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgcnVubmluZ1wiKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHN0YXRlID09PSBHZW5TdGF0ZUNvbXBsZXRlZCkge1xuICAgICAgICBpZiAobWV0aG9kID09PSBcInRocm93XCIpIHtcbiAgICAgICAgICB0aHJvdyBhcmc7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBCZSBmb3JnaXZpbmcsIHBlciAyNS4zLjMuMy4zIG9mIHRoZSBzcGVjOlxuICAgICAgICAvLyBodHRwczovL3Blb3BsZS5tb3ppbGxhLm9yZy9+am9yZW5kb3JmZi9lczYtZHJhZnQuaHRtbCNzZWMtZ2VuZXJhdG9ycmVzdW1lXG4gICAgICAgIHJldHVybiBkb25lUmVzdWx0KCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnRleHQubWV0aG9kID0gbWV0aG9kO1xuICAgICAgY29udGV4dC5hcmcgPSBhcmc7XG5cbiAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgIHZhciBkZWxlZ2F0ZSA9IGNvbnRleHQuZGVsZWdhdGU7XG4gICAgICAgIGlmIChkZWxlZ2F0ZSkge1xuICAgICAgICAgIHZhciBkZWxlZ2F0ZVJlc3VsdCA9IG1heWJlSW52b2tlRGVsZWdhdGUoZGVsZWdhdGUsIGNvbnRleHQpO1xuICAgICAgICAgIGlmIChkZWxlZ2F0ZVJlc3VsdCkge1xuICAgICAgICAgICAgaWYgKGRlbGVnYXRlUmVzdWx0ID09PSBDb250aW51ZVNlbnRpbmVsKSBjb250aW51ZTtcbiAgICAgICAgICAgIHJldHVybiBkZWxlZ2F0ZVJlc3VsdDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29udGV4dC5tZXRob2QgPT09IFwibmV4dFwiKSB7XG4gICAgICAgICAgLy8gU2V0dGluZyBjb250ZXh0Ll9zZW50IGZvciBsZWdhY3kgc3VwcG9ydCBvZiBCYWJlbCdzXG4gICAgICAgICAgLy8gZnVuY3Rpb24uc2VudCBpbXBsZW1lbnRhdGlvbi5cbiAgICAgICAgICBjb250ZXh0LnNlbnQgPSBjb250ZXh0Ll9zZW50ID0gY29udGV4dC5hcmc7XG5cbiAgICAgICAgfSBlbHNlIGlmIChjb250ZXh0Lm1ldGhvZCA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgaWYgKHN0YXRlID09PSBHZW5TdGF0ZVN1c3BlbmRlZFN0YXJ0KSB7XG4gICAgICAgICAgICBzdGF0ZSA9IEdlblN0YXRlQ29tcGxldGVkO1xuICAgICAgICAgICAgdGhyb3cgY29udGV4dC5hcmc7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29udGV4dC5kaXNwYXRjaEV4Y2VwdGlvbihjb250ZXh0LmFyZyk7XG5cbiAgICAgICAgfSBlbHNlIGlmIChjb250ZXh0Lm1ldGhvZCA9PT0gXCJyZXR1cm5cIikge1xuICAgICAgICAgIGNvbnRleHQuYWJydXB0KFwicmV0dXJuXCIsIGNvbnRleHQuYXJnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHN0YXRlID0gR2VuU3RhdGVFeGVjdXRpbmc7XG5cbiAgICAgICAgdmFyIHJlY29yZCA9IHRyeUNhdGNoKGlubmVyRm4sIHNlbGYsIGNvbnRleHQpO1xuICAgICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwibm9ybWFsXCIpIHtcbiAgICAgICAgICAvLyBJZiBhbiBleGNlcHRpb24gaXMgdGhyb3duIGZyb20gaW5uZXJGbiwgd2UgbGVhdmUgc3RhdGUgPT09XG4gICAgICAgICAgLy8gR2VuU3RhdGVFeGVjdXRpbmcgYW5kIGxvb3AgYmFjayBmb3IgYW5vdGhlciBpbnZvY2F0aW9uLlxuICAgICAgICAgIHN0YXRlID0gY29udGV4dC5kb25lXG4gICAgICAgICAgICA/IEdlblN0YXRlQ29tcGxldGVkXG4gICAgICAgICAgICA6IEdlblN0YXRlU3VzcGVuZGVkWWllbGQ7XG5cbiAgICAgICAgICBpZiAocmVjb3JkLmFyZyA9PT0gQ29udGludWVTZW50aW5lbCkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHZhbHVlOiByZWNvcmQuYXJnLFxuICAgICAgICAgICAgZG9uZTogY29udGV4dC5kb25lXG4gICAgICAgICAgfTtcblxuICAgICAgICB9IGVsc2UgaWYgKHJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcbiAgICAgICAgICBzdGF0ZSA9IEdlblN0YXRlQ29tcGxldGVkO1xuICAgICAgICAgIC8vIERpc3BhdGNoIHRoZSBleGNlcHRpb24gYnkgbG9vcGluZyBiYWNrIGFyb3VuZCB0byB0aGVcbiAgICAgICAgICAvLyBjb250ZXh0LmRpc3BhdGNoRXhjZXB0aW9uKGNvbnRleHQuYXJnKSBjYWxsIGFib3ZlLlxuICAgICAgICAgIGNvbnRleHQubWV0aG9kID0gXCJ0aHJvd1wiO1xuICAgICAgICAgIGNvbnRleHQuYXJnID0gcmVjb3JkLmFyZztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICAvLyBDYWxsIGRlbGVnYXRlLml0ZXJhdG9yW2NvbnRleHQubWV0aG9kXShjb250ZXh0LmFyZykgYW5kIGhhbmRsZSB0aGVcbiAgLy8gcmVzdWx0LCBlaXRoZXIgYnkgcmV0dXJuaW5nIGEgeyB2YWx1ZSwgZG9uZSB9IHJlc3VsdCBmcm9tIHRoZVxuICAvLyBkZWxlZ2F0ZSBpdGVyYXRvciwgb3IgYnkgbW9kaWZ5aW5nIGNvbnRleHQubWV0aG9kIGFuZCBjb250ZXh0LmFyZyxcbiAgLy8gc2V0dGluZyBjb250ZXh0LmRlbGVnYXRlIHRvIG51bGwsIGFuZCByZXR1cm5pbmcgdGhlIENvbnRpbnVlU2VudGluZWwuXG4gIGZ1bmN0aW9uIG1heWJlSW52b2tlRGVsZWdhdGUoZGVsZWdhdGUsIGNvbnRleHQpIHtcbiAgICB2YXIgbWV0aG9kID0gZGVsZWdhdGUuaXRlcmF0b3JbY29udGV4dC5tZXRob2RdO1xuICAgIGlmIChtZXRob2QgPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gQSAudGhyb3cgb3IgLnJldHVybiB3aGVuIHRoZSBkZWxlZ2F0ZSBpdGVyYXRvciBoYXMgbm8gLnRocm93XG4gICAgICAvLyBtZXRob2QgYWx3YXlzIHRlcm1pbmF0ZXMgdGhlIHlpZWxkKiBsb29wLlxuICAgICAgY29udGV4dC5kZWxlZ2F0ZSA9IG51bGw7XG5cbiAgICAgIGlmIChjb250ZXh0Lm1ldGhvZCA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgIGlmIChkZWxlZ2F0ZS5pdGVyYXRvci5yZXR1cm4pIHtcbiAgICAgICAgICAvLyBJZiB0aGUgZGVsZWdhdGUgaXRlcmF0b3IgaGFzIGEgcmV0dXJuIG1ldGhvZCwgZ2l2ZSBpdCBhXG4gICAgICAgICAgLy8gY2hhbmNlIHRvIGNsZWFuIHVwLlxuICAgICAgICAgIGNvbnRleHQubWV0aG9kID0gXCJyZXR1cm5cIjtcbiAgICAgICAgICBjb250ZXh0LmFyZyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICBtYXliZUludm9rZURlbGVnYXRlKGRlbGVnYXRlLCBjb250ZXh0KTtcblxuICAgICAgICAgIGlmIChjb250ZXh0Lm1ldGhvZCA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgICAvLyBJZiBtYXliZUludm9rZURlbGVnYXRlKGNvbnRleHQpIGNoYW5nZWQgY29udGV4dC5tZXRob2QgZnJvbVxuICAgICAgICAgICAgLy8gXCJyZXR1cm5cIiB0byBcInRocm93XCIsIGxldCB0aGF0IG92ZXJyaWRlIHRoZSBUeXBlRXJyb3IgYmVsb3cuXG4gICAgICAgICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb250ZXh0Lm1ldGhvZCA9IFwidGhyb3dcIjtcbiAgICAgICAgY29udGV4dC5hcmcgPSBuZXcgVHlwZUVycm9yKFxuICAgICAgICAgIFwiVGhlIGl0ZXJhdG9yIGRvZXMgbm90IHByb3ZpZGUgYSAndGhyb3cnIG1ldGhvZFwiKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgfVxuXG4gICAgdmFyIHJlY29yZCA9IHRyeUNhdGNoKG1ldGhvZCwgZGVsZWdhdGUuaXRlcmF0b3IsIGNvbnRleHQuYXJnKTtcblxuICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICBjb250ZXh0Lm1ldGhvZCA9IFwidGhyb3dcIjtcbiAgICAgIGNvbnRleHQuYXJnID0gcmVjb3JkLmFyZztcbiAgICAgIGNvbnRleHQuZGVsZWdhdGUgPSBudWxsO1xuICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgfVxuXG4gICAgdmFyIGluZm8gPSByZWNvcmQuYXJnO1xuXG4gICAgaWYgKCEgaW5mbykge1xuICAgICAgY29udGV4dC5tZXRob2QgPSBcInRocm93XCI7XG4gICAgICBjb250ZXh0LmFyZyA9IG5ldyBUeXBlRXJyb3IoXCJpdGVyYXRvciByZXN1bHQgaXMgbm90IGFuIG9iamVjdFwiKTtcbiAgICAgIGNvbnRleHQuZGVsZWdhdGUgPSBudWxsO1xuICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgfVxuXG4gICAgaWYgKGluZm8uZG9uZSkge1xuICAgICAgLy8gQXNzaWduIHRoZSByZXN1bHQgb2YgdGhlIGZpbmlzaGVkIGRlbGVnYXRlIHRvIHRoZSB0ZW1wb3JhcnlcbiAgICAgIC8vIHZhcmlhYmxlIHNwZWNpZmllZCBieSBkZWxlZ2F0ZS5yZXN1bHROYW1lIChzZWUgZGVsZWdhdGVZaWVsZCkuXG4gICAgICBjb250ZXh0W2RlbGVnYXRlLnJlc3VsdE5hbWVdID0gaW5mby52YWx1ZTtcblxuICAgICAgLy8gUmVzdW1lIGV4ZWN1dGlvbiBhdCB0aGUgZGVzaXJlZCBsb2NhdGlvbiAoc2VlIGRlbGVnYXRlWWllbGQpLlxuICAgICAgY29udGV4dC5uZXh0ID0gZGVsZWdhdGUubmV4dExvYztcblxuICAgICAgLy8gSWYgY29udGV4dC5tZXRob2Qgd2FzIFwidGhyb3dcIiBidXQgdGhlIGRlbGVnYXRlIGhhbmRsZWQgdGhlXG4gICAgICAvLyBleGNlcHRpb24sIGxldCB0aGUgb3V0ZXIgZ2VuZXJhdG9yIHByb2NlZWQgbm9ybWFsbHkuIElmXG4gICAgICAvLyBjb250ZXh0Lm1ldGhvZCB3YXMgXCJuZXh0XCIsIGZvcmdldCBjb250ZXh0LmFyZyBzaW5jZSBpdCBoYXMgYmVlblxuICAgICAgLy8gXCJjb25zdW1lZFwiIGJ5IHRoZSBkZWxlZ2F0ZSBpdGVyYXRvci4gSWYgY29udGV4dC5tZXRob2Qgd2FzXG4gICAgICAvLyBcInJldHVyblwiLCBhbGxvdyB0aGUgb3JpZ2luYWwgLnJldHVybiBjYWxsIHRvIGNvbnRpbnVlIGluIHRoZVxuICAgICAgLy8gb3V0ZXIgZ2VuZXJhdG9yLlxuICAgICAgaWYgKGNvbnRleHQubWV0aG9kICE9PSBcInJldHVyblwiKSB7XG4gICAgICAgIGNvbnRleHQubWV0aG9kID0gXCJuZXh0XCI7XG4gICAgICAgIGNvbnRleHQuYXJnID0gdW5kZWZpbmVkO1xuICAgICAgfVxuXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFJlLXlpZWxkIHRoZSByZXN1bHQgcmV0dXJuZWQgYnkgdGhlIGRlbGVnYXRlIG1ldGhvZC5cbiAgICAgIHJldHVybiBpbmZvO1xuICAgIH1cblxuICAgIC8vIFRoZSBkZWxlZ2F0ZSBpdGVyYXRvciBpcyBmaW5pc2hlZCwgc28gZm9yZ2V0IGl0IGFuZCBjb250aW51ZSB3aXRoXG4gICAgLy8gdGhlIG91dGVyIGdlbmVyYXRvci5cbiAgICBjb250ZXh0LmRlbGVnYXRlID0gbnVsbDtcbiAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgfVxuXG4gIC8vIERlZmluZSBHZW5lcmF0b3IucHJvdG90eXBlLntuZXh0LHRocm93LHJldHVybn0gaW4gdGVybXMgb2YgdGhlXG4gIC8vIHVuaWZpZWQgLl9pbnZva2UgaGVscGVyIG1ldGhvZC5cbiAgZGVmaW5lSXRlcmF0b3JNZXRob2RzKEdwKTtcblxuICBHcFt0b1N0cmluZ1RhZ1N5bWJvbF0gPSBcIkdlbmVyYXRvclwiO1xuXG4gIC8vIEEgR2VuZXJhdG9yIHNob3VsZCBhbHdheXMgcmV0dXJuIGl0c2VsZiBhcyB0aGUgaXRlcmF0b3Igb2JqZWN0IHdoZW4gdGhlXG4gIC8vIEBAaXRlcmF0b3IgZnVuY3Rpb24gaXMgY2FsbGVkIG9uIGl0LiBTb21lIGJyb3dzZXJzJyBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlXG4gIC8vIGl0ZXJhdG9yIHByb3RvdHlwZSBjaGFpbiBpbmNvcnJlY3RseSBpbXBsZW1lbnQgdGhpcywgY2F1c2luZyB0aGUgR2VuZXJhdG9yXG4gIC8vIG9iamVjdCB0byBub3QgYmUgcmV0dXJuZWQgZnJvbSB0aGlzIGNhbGwuIFRoaXMgZW5zdXJlcyB0aGF0IGRvZXNuJ3QgaGFwcGVuLlxuICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlZ2VuZXJhdG9yL2lzc3Vlcy8yNzQgZm9yIG1vcmUgZGV0YWlscy5cbiAgR3BbaXRlcmF0b3JTeW1ib2xdID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgR3AudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gXCJbb2JqZWN0IEdlbmVyYXRvcl1cIjtcbiAgfTtcblxuICBmdW5jdGlvbiBwdXNoVHJ5RW50cnkobG9jcykge1xuICAgIHZhciBlbnRyeSA9IHsgdHJ5TG9jOiBsb2NzWzBdIH07XG5cbiAgICBpZiAoMSBpbiBsb2NzKSB7XG4gICAgICBlbnRyeS5jYXRjaExvYyA9IGxvY3NbMV07XG4gICAgfVxuXG4gICAgaWYgKDIgaW4gbG9jcykge1xuICAgICAgZW50cnkuZmluYWxseUxvYyA9IGxvY3NbMl07XG4gICAgICBlbnRyeS5hZnRlckxvYyA9IGxvY3NbM107XG4gICAgfVxuXG4gICAgdGhpcy50cnlFbnRyaWVzLnB1c2goZW50cnkpO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVzZXRUcnlFbnRyeShlbnRyeSkge1xuICAgIHZhciByZWNvcmQgPSBlbnRyeS5jb21wbGV0aW9uIHx8IHt9O1xuICAgIHJlY29yZC50eXBlID0gXCJub3JtYWxcIjtcbiAgICBkZWxldGUgcmVjb3JkLmFyZztcbiAgICBlbnRyeS5jb21wbGV0aW9uID0gcmVjb3JkO1xuICB9XG5cbiAgZnVuY3Rpb24gQ29udGV4dCh0cnlMb2NzTGlzdCkge1xuICAgIC8vIFRoZSByb290IGVudHJ5IG9iamVjdCAoZWZmZWN0aXZlbHkgYSB0cnkgc3RhdGVtZW50IHdpdGhvdXQgYSBjYXRjaFxuICAgIC8vIG9yIGEgZmluYWxseSBibG9jaykgZ2l2ZXMgdXMgYSBwbGFjZSB0byBzdG9yZSB2YWx1ZXMgdGhyb3duIGZyb21cbiAgICAvLyBsb2NhdGlvbnMgd2hlcmUgdGhlcmUgaXMgbm8gZW5jbG9zaW5nIHRyeSBzdGF0ZW1lbnQuXG4gICAgdGhpcy50cnlFbnRyaWVzID0gW3sgdHJ5TG9jOiBcInJvb3RcIiB9XTtcbiAgICB0cnlMb2NzTGlzdC5mb3JFYWNoKHB1c2hUcnlFbnRyeSwgdGhpcyk7XG4gICAgdGhpcy5yZXNldCh0cnVlKTtcbiAgfVxuXG4gIHJ1bnRpbWUua2V5cyA9IGZ1bmN0aW9uKG9iamVjdCkge1xuICAgIHZhciBrZXlzID0gW107XG4gICAgZm9yICh2YXIga2V5IGluIG9iamVjdCkge1xuICAgICAga2V5cy5wdXNoKGtleSk7XG4gICAgfVxuICAgIGtleXMucmV2ZXJzZSgpO1xuXG4gICAgLy8gUmF0aGVyIHRoYW4gcmV0dXJuaW5nIGFuIG9iamVjdCB3aXRoIGEgbmV4dCBtZXRob2QsIHdlIGtlZXBcbiAgICAvLyB0aGluZ3Mgc2ltcGxlIGFuZCByZXR1cm4gdGhlIG5leHQgZnVuY3Rpb24gaXRzZWxmLlxuICAgIHJldHVybiBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgd2hpbGUgKGtleXMubGVuZ3RoKSB7XG4gICAgICAgIHZhciBrZXkgPSBrZXlzLnBvcCgpO1xuICAgICAgICBpZiAoa2V5IGluIG9iamVjdCkge1xuICAgICAgICAgIG5leHQudmFsdWUgPSBrZXk7XG4gICAgICAgICAgbmV4dC5kb25lID0gZmFsc2U7XG4gICAgICAgICAgcmV0dXJuIG5leHQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gVG8gYXZvaWQgY3JlYXRpbmcgYW4gYWRkaXRpb25hbCBvYmplY3QsIHdlIGp1c3QgaGFuZyB0aGUgLnZhbHVlXG4gICAgICAvLyBhbmQgLmRvbmUgcHJvcGVydGllcyBvZmYgdGhlIG5leHQgZnVuY3Rpb24gb2JqZWN0IGl0c2VsZi4gVGhpc1xuICAgICAgLy8gYWxzbyBlbnN1cmVzIHRoYXQgdGhlIG1pbmlmaWVyIHdpbGwgbm90IGFub255bWl6ZSB0aGUgZnVuY3Rpb24uXG4gICAgICBuZXh0LmRvbmUgPSB0cnVlO1xuICAgICAgcmV0dXJuIG5leHQ7XG4gICAgfTtcbiAgfTtcblxuICBmdW5jdGlvbiB2YWx1ZXMoaXRlcmFibGUpIHtcbiAgICBpZiAoaXRlcmFibGUpIHtcbiAgICAgIHZhciBpdGVyYXRvck1ldGhvZCA9IGl0ZXJhYmxlW2l0ZXJhdG9yU3ltYm9sXTtcbiAgICAgIGlmIChpdGVyYXRvck1ldGhvZCkge1xuICAgICAgICByZXR1cm4gaXRlcmF0b3JNZXRob2QuY2FsbChpdGVyYWJsZSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgaXRlcmFibGUubmV4dCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHJldHVybiBpdGVyYWJsZTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFpc05hTihpdGVyYWJsZS5sZW5ndGgpKSB7XG4gICAgICAgIHZhciBpID0gLTEsIG5leHQgPSBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgICAgIHdoaWxlICgrK2kgPCBpdGVyYWJsZS5sZW5ndGgpIHtcbiAgICAgICAgICAgIGlmIChoYXNPd24uY2FsbChpdGVyYWJsZSwgaSkpIHtcbiAgICAgICAgICAgICAgbmV4dC52YWx1ZSA9IGl0ZXJhYmxlW2ldO1xuICAgICAgICAgICAgICBuZXh0LmRvbmUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgcmV0dXJuIG5leHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbmV4dC52YWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICBuZXh0LmRvbmUgPSB0cnVlO1xuXG4gICAgICAgICAgcmV0dXJuIG5leHQ7XG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIG5leHQubmV4dCA9IG5leHQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gUmV0dXJuIGFuIGl0ZXJhdG9yIHdpdGggbm8gdmFsdWVzLlxuICAgIHJldHVybiB7IG5leHQ6IGRvbmVSZXN1bHQgfTtcbiAgfVxuICBydW50aW1lLnZhbHVlcyA9IHZhbHVlcztcblxuICBmdW5jdGlvbiBkb25lUmVzdWx0KCkge1xuICAgIHJldHVybiB7IHZhbHVlOiB1bmRlZmluZWQsIGRvbmU6IHRydWUgfTtcbiAgfVxuXG4gIENvbnRleHQucHJvdG90eXBlID0ge1xuICAgIGNvbnN0cnVjdG9yOiBDb250ZXh0LFxuXG4gICAgcmVzZXQ6IGZ1bmN0aW9uKHNraXBUZW1wUmVzZXQpIHtcbiAgICAgIHRoaXMucHJldiA9IDA7XG4gICAgICB0aGlzLm5leHQgPSAwO1xuICAgICAgLy8gUmVzZXR0aW5nIGNvbnRleHQuX3NlbnQgZm9yIGxlZ2FjeSBzdXBwb3J0IG9mIEJhYmVsJ3NcbiAgICAgIC8vIGZ1bmN0aW9uLnNlbnQgaW1wbGVtZW50YXRpb24uXG4gICAgICB0aGlzLnNlbnQgPSB0aGlzLl9zZW50ID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5kb25lID0gZmFsc2U7XG4gICAgICB0aGlzLmRlbGVnYXRlID0gbnVsbDtcblxuICAgICAgdGhpcy5tZXRob2QgPSBcIm5leHRcIjtcbiAgICAgIHRoaXMuYXJnID0gdW5kZWZpbmVkO1xuXG4gICAgICB0aGlzLnRyeUVudHJpZXMuZm9yRWFjaChyZXNldFRyeUVudHJ5KTtcblxuICAgICAgaWYgKCFza2lwVGVtcFJlc2V0KSB7XG4gICAgICAgIGZvciAodmFyIG5hbWUgaW4gdGhpcykge1xuICAgICAgICAgIC8vIE5vdCBzdXJlIGFib3V0IHRoZSBvcHRpbWFsIG9yZGVyIG9mIHRoZXNlIGNvbmRpdGlvbnM6XG4gICAgICAgICAgaWYgKG5hbWUuY2hhckF0KDApID09PSBcInRcIiAmJlxuICAgICAgICAgICAgICBoYXNPd24uY2FsbCh0aGlzLCBuYW1lKSAmJlxuICAgICAgICAgICAgICAhaXNOYU4oK25hbWUuc2xpY2UoMSkpKSB7XG4gICAgICAgICAgICB0aGlzW25hbWVdID0gdW5kZWZpbmVkO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzdG9wOiBmdW5jdGlvbigpIHtcbiAgICAgIHRoaXMuZG9uZSA9IHRydWU7XG5cbiAgICAgIHZhciByb290RW50cnkgPSB0aGlzLnRyeUVudHJpZXNbMF07XG4gICAgICB2YXIgcm9vdFJlY29yZCA9IHJvb3RFbnRyeS5jb21wbGV0aW9uO1xuICAgICAgaWYgKHJvb3RSZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgIHRocm93IHJvb3RSZWNvcmQuYXJnO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5ydmFsO1xuICAgIH0sXG5cbiAgICBkaXNwYXRjaEV4Y2VwdGlvbjogZnVuY3Rpb24oZXhjZXB0aW9uKSB7XG4gICAgICBpZiAodGhpcy5kb25lKSB7XG4gICAgICAgIHRocm93IGV4Y2VwdGlvbjtcbiAgICAgIH1cblxuICAgICAgdmFyIGNvbnRleHQgPSB0aGlzO1xuICAgICAgZnVuY3Rpb24gaGFuZGxlKGxvYywgY2F1Z2h0KSB7XG4gICAgICAgIHJlY29yZC50eXBlID0gXCJ0aHJvd1wiO1xuICAgICAgICByZWNvcmQuYXJnID0gZXhjZXB0aW9uO1xuICAgICAgICBjb250ZXh0Lm5leHQgPSBsb2M7XG5cbiAgICAgICAgaWYgKGNhdWdodCkge1xuICAgICAgICAgIC8vIElmIHRoZSBkaXNwYXRjaGVkIGV4Y2VwdGlvbiB3YXMgY2F1Z2h0IGJ5IGEgY2F0Y2ggYmxvY2ssXG4gICAgICAgICAgLy8gdGhlbiBsZXQgdGhhdCBjYXRjaCBibG9jayBoYW5kbGUgdGhlIGV4Y2VwdGlvbiBub3JtYWxseS5cbiAgICAgICAgICBjb250ZXh0Lm1ldGhvZCA9IFwibmV4dFwiO1xuICAgICAgICAgIGNvbnRleHQuYXJnID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICEhIGNhdWdodDtcbiAgICAgIH1cblxuICAgICAgZm9yICh2YXIgaSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2YXIgZW50cnkgPSB0aGlzLnRyeUVudHJpZXNbaV07XG4gICAgICAgIHZhciByZWNvcmQgPSBlbnRyeS5jb21wbGV0aW9uO1xuXG4gICAgICAgIGlmIChlbnRyeS50cnlMb2MgPT09IFwicm9vdFwiKSB7XG4gICAgICAgICAgLy8gRXhjZXB0aW9uIHRocm93biBvdXRzaWRlIG9mIGFueSB0cnkgYmxvY2sgdGhhdCBjb3VsZCBoYW5kbGVcbiAgICAgICAgICAvLyBpdCwgc28gc2V0IHRoZSBjb21wbGV0aW9uIHZhbHVlIG9mIHRoZSBlbnRpcmUgZnVuY3Rpb24gdG9cbiAgICAgICAgICAvLyB0aHJvdyB0aGUgZXhjZXB0aW9uLlxuICAgICAgICAgIHJldHVybiBoYW5kbGUoXCJlbmRcIik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZW50cnkudHJ5TG9jIDw9IHRoaXMucHJldikge1xuICAgICAgICAgIHZhciBoYXNDYXRjaCA9IGhhc093bi5jYWxsKGVudHJ5LCBcImNhdGNoTG9jXCIpO1xuICAgICAgICAgIHZhciBoYXNGaW5hbGx5ID0gaGFzT3duLmNhbGwoZW50cnksIFwiZmluYWxseUxvY1wiKTtcblxuICAgICAgICAgIGlmIChoYXNDYXRjaCAmJiBoYXNGaW5hbGx5KSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wcmV2IDwgZW50cnkuY2F0Y2hMb2MpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZShlbnRyeS5jYXRjaExvYywgdHJ1ZSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMucHJldiA8IGVudHJ5LmZpbmFsbHlMb2MpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZShlbnRyeS5maW5hbGx5TG9jKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIH0gZWxzZSBpZiAoaGFzQ2F0Y2gpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBlbnRyeS5jYXRjaExvYykge1xuICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlKGVudHJ5LmNhdGNoTG9jLCB0cnVlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIH0gZWxzZSBpZiAoaGFzRmluYWxseSkge1xuICAgICAgICAgICAgaWYgKHRoaXMucHJldiA8IGVudHJ5LmZpbmFsbHlMb2MpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZShlbnRyeS5maW5hbGx5TG9jKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJ0cnkgc3RhdGVtZW50IHdpdGhvdXQgY2F0Y2ggb3IgZmluYWxseVwiKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYWJydXB0OiBmdW5jdGlvbih0eXBlLCBhcmcpIHtcbiAgICAgIGZvciAodmFyIGkgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy50cnlFbnRyaWVzW2ldO1xuICAgICAgICBpZiAoZW50cnkudHJ5TG9jIDw9IHRoaXMucHJldiAmJlxuICAgICAgICAgICAgaGFzT3duLmNhbGwoZW50cnksIFwiZmluYWxseUxvY1wiKSAmJlxuICAgICAgICAgICAgdGhpcy5wcmV2IDwgZW50cnkuZmluYWxseUxvYykge1xuICAgICAgICAgIHZhciBmaW5hbGx5RW50cnkgPSBlbnRyeTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoZmluYWxseUVudHJ5ICYmXG4gICAgICAgICAgKHR5cGUgPT09IFwiYnJlYWtcIiB8fFxuICAgICAgICAgICB0eXBlID09PSBcImNvbnRpbnVlXCIpICYmXG4gICAgICAgICAgZmluYWxseUVudHJ5LnRyeUxvYyA8PSBhcmcgJiZcbiAgICAgICAgICBhcmcgPD0gZmluYWxseUVudHJ5LmZpbmFsbHlMb2MpIHtcbiAgICAgICAgLy8gSWdub3JlIHRoZSBmaW5hbGx5IGVudHJ5IGlmIGNvbnRyb2wgaXMgbm90IGp1bXBpbmcgdG8gYVxuICAgICAgICAvLyBsb2NhdGlvbiBvdXRzaWRlIHRoZSB0cnkvY2F0Y2ggYmxvY2suXG4gICAgICAgIGZpbmFsbHlFbnRyeSA9IG51bGw7XG4gICAgICB9XG5cbiAgICAgIHZhciByZWNvcmQgPSBmaW5hbGx5RW50cnkgPyBmaW5hbGx5RW50cnkuY29tcGxldGlvbiA6IHt9O1xuICAgICAgcmVjb3JkLnR5cGUgPSB0eXBlO1xuICAgICAgcmVjb3JkLmFyZyA9IGFyZztcblxuICAgICAgaWYgKGZpbmFsbHlFbnRyeSkge1xuICAgICAgICB0aGlzLm1ldGhvZCA9IFwibmV4dFwiO1xuICAgICAgICB0aGlzLm5leHQgPSBmaW5hbGx5RW50cnkuZmluYWxseUxvYztcbiAgICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLmNvbXBsZXRlKHJlY29yZCk7XG4gICAgfSxcblxuICAgIGNvbXBsZXRlOiBmdW5jdGlvbihyZWNvcmQsIGFmdGVyTG9jKSB7XG4gICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICB0aHJvdyByZWNvcmQuYXJnO1xuICAgICAgfVxuXG4gICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwiYnJlYWtcIiB8fFxuICAgICAgICAgIHJlY29yZC50eXBlID09PSBcImNvbnRpbnVlXCIpIHtcbiAgICAgICAgdGhpcy5uZXh0ID0gcmVjb3JkLmFyZztcbiAgICAgIH0gZWxzZSBpZiAocmVjb3JkLnR5cGUgPT09IFwicmV0dXJuXCIpIHtcbiAgICAgICAgdGhpcy5ydmFsID0gdGhpcy5hcmcgPSByZWNvcmQuYXJnO1xuICAgICAgICB0aGlzLm1ldGhvZCA9IFwicmV0dXJuXCI7XG4gICAgICAgIHRoaXMubmV4dCA9IFwiZW5kXCI7XG4gICAgICB9IGVsc2UgaWYgKHJlY29yZC50eXBlID09PSBcIm5vcm1hbFwiICYmIGFmdGVyTG9jKSB7XG4gICAgICAgIHRoaXMubmV4dCA9IGFmdGVyTG9jO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICB9LFxuXG4gICAgZmluaXNoOiBmdW5jdGlvbihmaW5hbGx5TG9jKSB7XG4gICAgICBmb3IgKHZhciBpID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgIHZhciBlbnRyeSA9IHRoaXMudHJ5RW50cmllc1tpXTtcbiAgICAgICAgaWYgKGVudHJ5LmZpbmFsbHlMb2MgPT09IGZpbmFsbHlMb2MpIHtcbiAgICAgICAgICB0aGlzLmNvbXBsZXRlKGVudHJ5LmNvbXBsZXRpb24sIGVudHJ5LmFmdGVyTG9jKTtcbiAgICAgICAgICByZXNldFRyeUVudHJ5KGVudHJ5KTtcbiAgICAgICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBcImNhdGNoXCI6IGZ1bmN0aW9uKHRyeUxvYykge1xuICAgICAgZm9yICh2YXIgaSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2YXIgZW50cnkgPSB0aGlzLnRyeUVudHJpZXNbaV07XG4gICAgICAgIGlmIChlbnRyeS50cnlMb2MgPT09IHRyeUxvYykge1xuICAgICAgICAgIHZhciByZWNvcmQgPSBlbnRyeS5jb21wbGV0aW9uO1xuICAgICAgICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgICB2YXIgdGhyb3duID0gcmVjb3JkLmFyZztcbiAgICAgICAgICAgIHJlc2V0VHJ5RW50cnkoZW50cnkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdGhyb3duO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFRoZSBjb250ZXh0LmNhdGNoIG1ldGhvZCBtdXN0IG9ubHkgYmUgY2FsbGVkIHdpdGggYSBsb2NhdGlvblxuICAgICAgLy8gYXJndW1lbnQgdGhhdCBjb3JyZXNwb25kcyB0byBhIGtub3duIGNhdGNoIGJsb2NrLlxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiaWxsZWdhbCBjYXRjaCBhdHRlbXB0XCIpO1xuICAgIH0sXG5cbiAgICBkZWxlZ2F0ZVlpZWxkOiBmdW5jdGlvbihpdGVyYWJsZSwgcmVzdWx0TmFtZSwgbmV4dExvYykge1xuICAgICAgdGhpcy5kZWxlZ2F0ZSA9IHtcbiAgICAgICAgaXRlcmF0b3I6IHZhbHVlcyhpdGVyYWJsZSksXG4gICAgICAgIHJlc3VsdE5hbWU6IHJlc3VsdE5hbWUsXG4gICAgICAgIG5leHRMb2M6IG5leHRMb2NcbiAgICAgIH07XG5cbiAgICAgIGlmICh0aGlzLm1ldGhvZCA9PT0gXCJuZXh0XCIpIHtcbiAgICAgICAgLy8gRGVsaWJlcmF0ZWx5IGZvcmdldCB0aGUgbGFzdCBzZW50IHZhbHVlIHNvIHRoYXQgd2UgZG9uJ3RcbiAgICAgICAgLy8gYWNjaWRlbnRhbGx5IHBhc3MgaXQgb24gdG8gdGhlIGRlbGVnYXRlLlxuICAgICAgICB0aGlzLmFyZyA9IHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgfVxuICB9O1xufSkoXG4gIC8vIEluIHNsb3BweSBtb2RlLCB1bmJvdW5kIGB0aGlzYCByZWZlcnMgdG8gdGhlIGdsb2JhbCBvYmplY3QsIGZhbGxiYWNrIHRvXG4gIC8vIEZ1bmN0aW9uIGNvbnN0cnVjdG9yIGlmIHdlJ3JlIGluIGdsb2JhbCBzdHJpY3QgbW9kZS4gVGhhdCBpcyBzYWRseSBhIGZvcm1cbiAgLy8gb2YgaW5kaXJlY3QgZXZhbCB3aGljaCB2aW9sYXRlcyBDb250ZW50IFNlY3VyaXR5IFBvbGljeS5cbiAgKGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpcyB9KSgpIHx8IEZ1bmN0aW9uKFwicmV0dXJuIHRoaXNcIikoKVxuKTtcbiIsIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHN0cikge1xuXHRyZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KHN0cikucmVwbGFjZSgvWyEnKCkqXS9nLCBmdW5jdGlvbiAoYykge1xuXHRcdHJldHVybiAnJScgKyBjLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCk7XG5cdH0pO1xufTtcbiIsInZhciBuZXh0VGljayA9IHJlcXVpcmUoJ3Byb2Nlc3MvYnJvd3Nlci5qcycpLm5leHRUaWNrO1xudmFyIGFwcGx5ID0gRnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5O1xudmFyIHNsaWNlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlO1xudmFyIGltbWVkaWF0ZUlkcyA9IHt9O1xudmFyIG5leHRJbW1lZGlhdGVJZCA9IDA7XG5cbi8vIERPTSBBUElzLCBmb3IgY29tcGxldGVuZXNzXG5cbmV4cG9ydHMuc2V0VGltZW91dCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gbmV3IFRpbWVvdXQoYXBwbHkuY2FsbChzZXRUaW1lb3V0LCB3aW5kb3csIGFyZ3VtZW50cyksIGNsZWFyVGltZW91dCk7XG59O1xuZXhwb3J0cy5zZXRJbnRlcnZhbCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gbmV3IFRpbWVvdXQoYXBwbHkuY2FsbChzZXRJbnRlcnZhbCwgd2luZG93LCBhcmd1bWVudHMpLCBjbGVhckludGVydmFsKTtcbn07XG5leHBvcnRzLmNsZWFyVGltZW91dCA9XG5leHBvcnRzLmNsZWFySW50ZXJ2YWwgPSBmdW5jdGlvbih0aW1lb3V0KSB7IHRpbWVvdXQuY2xvc2UoKTsgfTtcblxuZnVuY3Rpb24gVGltZW91dChpZCwgY2xlYXJGbikge1xuICB0aGlzLl9pZCA9IGlkO1xuICB0aGlzLl9jbGVhckZuID0gY2xlYXJGbjtcbn1cblRpbWVvdXQucHJvdG90eXBlLnVucmVmID0gVGltZW91dC5wcm90b3R5cGUucmVmID0gZnVuY3Rpb24oKSB7fTtcblRpbWVvdXQucHJvdG90eXBlLmNsb3NlID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuX2NsZWFyRm4uY2FsbCh3aW5kb3csIHRoaXMuX2lkKTtcbn07XG5cbi8vIERvZXMgbm90IHN0YXJ0IHRoZSB0aW1lLCBqdXN0IHNldHMgdXAgdGhlIG1lbWJlcnMgbmVlZGVkLlxuZXhwb3J0cy5lbnJvbGwgPSBmdW5jdGlvbihpdGVtLCBtc2Vjcykge1xuICBjbGVhclRpbWVvdXQoaXRlbS5faWRsZVRpbWVvdXRJZCk7XG4gIGl0ZW0uX2lkbGVUaW1lb3V0ID0gbXNlY3M7XG59O1xuXG5leHBvcnRzLnVuZW5yb2xsID0gZnVuY3Rpb24oaXRlbSkge1xuICBjbGVhclRpbWVvdXQoaXRlbS5faWRsZVRpbWVvdXRJZCk7XG4gIGl0ZW0uX2lkbGVUaW1lb3V0ID0gLTE7XG59O1xuXG5leHBvcnRzLl91bnJlZkFjdGl2ZSA9IGV4cG9ydHMuYWN0aXZlID0gZnVuY3Rpb24oaXRlbSkge1xuICBjbGVhclRpbWVvdXQoaXRlbS5faWRsZVRpbWVvdXRJZCk7XG5cbiAgdmFyIG1zZWNzID0gaXRlbS5faWRsZVRpbWVvdXQ7XG4gIGlmIChtc2VjcyA+PSAwKSB7XG4gICAgaXRlbS5faWRsZVRpbWVvdXRJZCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gb25UaW1lb3V0KCkge1xuICAgICAgaWYgKGl0ZW0uX29uVGltZW91dClcbiAgICAgICAgaXRlbS5fb25UaW1lb3V0KCk7XG4gICAgfSwgbXNlY3MpO1xuICB9XG59O1xuXG4vLyBUaGF0J3Mgbm90IGhvdyBub2RlLmpzIGltcGxlbWVudHMgaXQgYnV0IHRoZSBleHBvc2VkIGFwaSBpcyB0aGUgc2FtZS5cbmV4cG9ydHMuc2V0SW1tZWRpYXRlID0gdHlwZW9mIHNldEltbWVkaWF0ZSA9PT0gXCJmdW5jdGlvblwiID8gc2V0SW1tZWRpYXRlIDogZnVuY3Rpb24oZm4pIHtcbiAgdmFyIGlkID0gbmV4dEltbWVkaWF0ZUlkKys7XG4gIHZhciBhcmdzID0gYXJndW1lbnRzLmxlbmd0aCA8IDIgPyBmYWxzZSA6IHNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcblxuICBpbW1lZGlhdGVJZHNbaWRdID0gdHJ1ZTtcblxuICBuZXh0VGljayhmdW5jdGlvbiBvbk5leHRUaWNrKCkge1xuICAgIGlmIChpbW1lZGlhdGVJZHNbaWRdKSB7XG4gICAgICAvLyBmbi5jYWxsKCkgaXMgZmFzdGVyIHNvIHdlIG9wdGltaXplIGZvciB0aGUgY29tbW9uIHVzZS1jYXNlXG4gICAgICAvLyBAc2VlIGh0dHA6Ly9qc3BlcmYuY29tL2NhbGwtYXBwbHktc2VndVxuICAgICAgaWYgKGFyZ3MpIHtcbiAgICAgICAgZm4uYXBwbHkobnVsbCwgYXJncyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmbi5jYWxsKG51bGwpO1xuICAgICAgfVxuICAgICAgLy8gUHJldmVudCBpZHMgZnJvbSBsZWFraW5nXG4gICAgICBleHBvcnRzLmNsZWFySW1tZWRpYXRlKGlkKTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBpZDtcbn07XG5cbmV4cG9ydHMuY2xlYXJJbW1lZGlhdGUgPSB0eXBlb2YgY2xlYXJJbW1lZGlhdGUgPT09IFwiZnVuY3Rpb25cIiA/IGNsZWFySW1tZWRpYXRlIDogZnVuY3Rpb24oaWQpIHtcbiAgZGVsZXRlIGltbWVkaWF0ZUlkc1tpZF07XG59OyIsInZhciBWdWUgLy8gbGF0ZSBiaW5kXG52YXIgdmVyc2lvblxudmFyIG1hcCA9IE9iamVjdC5jcmVhdGUobnVsbClcbmlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICB3aW5kb3cuX19WVUVfSE9UX01BUF9fID0gbWFwXG59XG52YXIgaW5zdGFsbGVkID0gZmFsc2VcbnZhciBpc0Jyb3dzZXJpZnkgPSBmYWxzZVxudmFyIGluaXRIb29rTmFtZSA9ICdiZWZvcmVDcmVhdGUnXG5cbmV4cG9ydHMuaW5zdGFsbCA9IGZ1bmN0aW9uICh2dWUsIGJyb3dzZXJpZnkpIHtcbiAgaWYgKGluc3RhbGxlZCkgeyByZXR1cm4gfVxuICBpbnN0YWxsZWQgPSB0cnVlXG5cbiAgVnVlID0gdnVlLl9fZXNNb2R1bGUgPyB2dWUuZGVmYXVsdCA6IHZ1ZVxuICB2ZXJzaW9uID0gVnVlLnZlcnNpb24uc3BsaXQoJy4nKS5tYXAoTnVtYmVyKVxuICBpc0Jyb3dzZXJpZnkgPSBicm93c2VyaWZ5XG5cbiAgLy8gY29tcGF0IHdpdGggPCAyLjAuMC1hbHBoYS43XG4gIGlmIChWdWUuY29uZmlnLl9saWZlY3ljbGVIb29rcy5pbmRleE9mKCdpbml0JykgPiAtMSkge1xuICAgIGluaXRIb29rTmFtZSA9ICdpbml0J1xuICB9XG5cbiAgZXhwb3J0cy5jb21wYXRpYmxlID0gdmVyc2lvblswXSA+PSAyXG4gIGlmICghZXhwb3J0cy5jb21wYXRpYmxlKSB7XG4gICAgY29uc29sZS53YXJuKFxuICAgICAgJ1tITVJdIFlvdSBhcmUgdXNpbmcgYSB2ZXJzaW9uIG9mIHZ1ZS1ob3QtcmVsb2FkLWFwaSB0aGF0IGlzICcgK1xuICAgICAgICAnb25seSBjb21wYXRpYmxlIHdpdGggVnVlLmpzIGNvcmUgXjIuMC4wLidcbiAgICApXG4gICAgcmV0dXJuXG4gIH1cbn1cblxuLyoqXG4gKiBDcmVhdGUgYSByZWNvcmQgZm9yIGEgaG90IG1vZHVsZSwgd2hpY2gga2VlcHMgdHJhY2sgb2YgaXRzIGNvbnN0cnVjdG9yXG4gKiBhbmQgaW5zdGFuY2VzXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGlkXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICovXG5cbmV4cG9ydHMuY3JlYXRlUmVjb3JkID0gZnVuY3Rpb24gKGlkLCBvcHRpb25zKSB7XG4gIGlmKG1hcFtpZF0pIHsgcmV0dXJuIH1cblxuICB2YXIgQ3RvciA9IG51bGxcbiAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnZnVuY3Rpb24nKSB7XG4gICAgQ3RvciA9IG9wdGlvbnNcbiAgICBvcHRpb25zID0gQ3Rvci5vcHRpb25zXG4gIH1cbiAgbWFrZU9wdGlvbnNIb3QoaWQsIG9wdGlvbnMpXG4gIG1hcFtpZF0gPSB7XG4gICAgQ3RvcjogQ3RvcixcbiAgICBvcHRpb25zOiBvcHRpb25zLFxuICAgIGluc3RhbmNlczogW11cbiAgfVxufVxuXG4vKipcbiAqIENoZWNrIGlmIG1vZHVsZSBpcyByZWNvcmRlZFxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBpZFxuICovXG5cbmV4cG9ydHMuaXNSZWNvcmRlZCA9IGZ1bmN0aW9uIChpZCkge1xuICByZXR1cm4gdHlwZW9mIG1hcFtpZF0gIT09ICd1bmRlZmluZWQnXG59XG5cbi8qKlxuICogTWFrZSBhIENvbXBvbmVudCBvcHRpb25zIG9iamVjdCBob3QuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGlkXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICovXG5cbmZ1bmN0aW9uIG1ha2VPcHRpb25zSG90KGlkLCBvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zLmZ1bmN0aW9uYWwpIHtcbiAgICB2YXIgcmVuZGVyID0gb3B0aW9ucy5yZW5kZXJcbiAgICBvcHRpb25zLnJlbmRlciA9IGZ1bmN0aW9uIChoLCBjdHgpIHtcbiAgICAgIHZhciBpbnN0YW5jZXMgPSBtYXBbaWRdLmluc3RhbmNlc1xuICAgICAgaWYgKGN0eCAmJiBpbnN0YW5jZXMuaW5kZXhPZihjdHgucGFyZW50KSA8IDApIHtcbiAgICAgICAgaW5zdGFuY2VzLnB1c2goY3R4LnBhcmVudClcbiAgICAgIH1cbiAgICAgIHJldHVybiByZW5kZXIoaCwgY3R4KVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpbmplY3RIb29rKG9wdGlvbnMsIGluaXRIb29rTmFtZSwgZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgcmVjb3JkID0gbWFwW2lkXVxuICAgICAgaWYgKCFyZWNvcmQuQ3Rvcikge1xuICAgICAgICByZWNvcmQuQ3RvciA9IHRoaXMuY29uc3RydWN0b3JcbiAgICAgIH1cbiAgICAgIHJlY29yZC5pbnN0YW5jZXMucHVzaCh0aGlzKVxuICAgIH0pXG4gICAgaW5qZWN0SG9vayhvcHRpb25zLCAnYmVmb3JlRGVzdHJveScsIGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIGluc3RhbmNlcyA9IG1hcFtpZF0uaW5zdGFuY2VzXG4gICAgICBpbnN0YW5jZXMuc3BsaWNlKGluc3RhbmNlcy5pbmRleE9mKHRoaXMpLCAxKVxuICAgIH0pXG4gIH1cbn1cblxuLyoqXG4gKiBJbmplY3QgYSBob29rIHRvIGEgaG90IHJlbG9hZGFibGUgY29tcG9uZW50IHNvIHRoYXRcbiAqIHdlIGNhbiBrZWVwIHRyYWNrIG9mIGl0LlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gKiBAcGFyYW0ge1N0cmluZ30gbmFtZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gaG9va1xuICovXG5cbmZ1bmN0aW9uIGluamVjdEhvb2sob3B0aW9ucywgbmFtZSwgaG9vaykge1xuICB2YXIgZXhpc3RpbmcgPSBvcHRpb25zW25hbWVdXG4gIG9wdGlvbnNbbmFtZV0gPSBleGlzdGluZ1xuICAgID8gQXJyYXkuaXNBcnJheShleGlzdGluZykgPyBleGlzdGluZy5jb25jYXQoaG9vaykgOiBbZXhpc3RpbmcsIGhvb2tdXG4gICAgOiBbaG9va11cbn1cblxuZnVuY3Rpb24gdHJ5V3JhcChmbikge1xuICByZXR1cm4gZnVuY3Rpb24gKGlkLCBhcmcpIHtcbiAgICB0cnkge1xuICAgICAgZm4oaWQsIGFyZylcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGUpXG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICdTb21ldGhpbmcgd2VudCB3cm9uZyBkdXJpbmcgVnVlIGNvbXBvbmVudCBob3QtcmVsb2FkLiBGdWxsIHJlbG9hZCByZXF1aXJlZC4nXG4gICAgICApXG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZU9wdGlvbnMgKG9sZE9wdGlvbnMsIG5ld09wdGlvbnMpIHtcbiAgZm9yICh2YXIga2V5IGluIG9sZE9wdGlvbnMpIHtcbiAgICBpZiAoIShrZXkgaW4gbmV3T3B0aW9ucykpIHtcbiAgICAgIGRlbGV0ZSBvbGRPcHRpb25zW2tleV1cbiAgICB9XG4gIH1cbiAgZm9yICh2YXIga2V5JDEgaW4gbmV3T3B0aW9ucykge1xuICAgIG9sZE9wdGlvbnNba2V5JDFdID0gbmV3T3B0aW9uc1trZXkkMV1cbiAgfVxufVxuXG5leHBvcnRzLnJlcmVuZGVyID0gdHJ5V3JhcChmdW5jdGlvbiAoaWQsIG9wdGlvbnMpIHtcbiAgdmFyIHJlY29yZCA9IG1hcFtpZF1cbiAgaWYgKCFvcHRpb25zKSB7XG4gICAgcmVjb3JkLmluc3RhbmNlcy5zbGljZSgpLmZvckVhY2goZnVuY3Rpb24gKGluc3RhbmNlKSB7XG4gICAgICBpbnN0YW5jZS4kZm9yY2VVcGRhdGUoKVxuICAgIH0pXG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnZnVuY3Rpb24nKSB7XG4gICAgb3B0aW9ucyA9IG9wdGlvbnMub3B0aW9uc1xuICB9XG4gIGlmIChyZWNvcmQuQ3Rvcikge1xuICAgIHJlY29yZC5DdG9yLm9wdGlvbnMucmVuZGVyID0gb3B0aW9ucy5yZW5kZXJcbiAgICByZWNvcmQuQ3Rvci5vcHRpb25zLnN0YXRpY1JlbmRlckZucyA9IG9wdGlvbnMuc3RhdGljUmVuZGVyRm5zXG4gICAgcmVjb3JkLmluc3RhbmNlcy5zbGljZSgpLmZvckVhY2goZnVuY3Rpb24gKGluc3RhbmNlKSB7XG4gICAgICBpbnN0YW5jZS4kb3B0aW9ucy5yZW5kZXIgPSBvcHRpb25zLnJlbmRlclxuICAgICAgaW5zdGFuY2UuJG9wdGlvbnMuc3RhdGljUmVuZGVyRm5zID0gb3B0aW9ucy5zdGF0aWNSZW5kZXJGbnNcbiAgICAgIC8vIHJlc2V0IHN0YXRpYyB0cmVlc1xuICAgICAgLy8gcHJlIDIuNSwgYWxsIHN0YXRpYyB0cmVlcyBhcmUgY2FjaGVkIHRvZ2V0aGVyIG9uIHRoZSBpbnN0YW5jZVxuICAgICAgaWYgKGluc3RhbmNlLl9zdGF0aWNUcmVlcykge1xuICAgICAgICBpbnN0YW5jZS5fc3RhdGljVHJlZXMgPSBbXVxuICAgICAgfVxuICAgICAgLy8gMi41LjBcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHJlY29yZC5DdG9yLm9wdGlvbnMuY2FjaGVkKSkge1xuICAgICAgICByZWNvcmQuQ3Rvci5vcHRpb25zLmNhY2hlZCA9IFtdXG4gICAgICB9XG4gICAgICAvLyAyLjUuM1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoaW5zdGFuY2UuJG9wdGlvbnMuY2FjaGVkKSkge1xuICAgICAgICBpbnN0YW5jZS4kb3B0aW9ucy5jYWNoZWQgPSBbXVxuICAgICAgfVxuXG4gICAgICAvLyBwb3N0IDIuNS40OiB2LW9uY2UgdHJlZXMgYXJlIGNhY2hlZCBvbiBpbnN0YW5jZS5fc3RhdGljVHJlZXMuXG4gICAgICAvLyBQdXJlIHN0YXRpYyB0cmVlcyBhcmUgY2FjaGVkIG9uIHRoZSBzdGF0aWNSZW5kZXJGbnMgYXJyYXlcbiAgICAgIC8vIChib3RoIGFscmVhZHkgcmVzZXQgYWJvdmUpXG5cbiAgICAgIC8vIDIuNjogdGVtcG9yYXJpbHkgbWFyayByZW5kZXJlZCBzY29wZWQgc2xvdHMgYXMgdW5zdGFibGUgc28gdGhhdFxuICAgICAgLy8gY2hpbGQgY29tcG9uZW50cyBjYW4gYmUgZm9yY2VkIHRvIHVwZGF0ZVxuICAgICAgdmFyIHJlc3RvcmUgPSBwYXRjaFNjb3BlZFNsb3RzKGluc3RhbmNlKVxuICAgICAgaW5zdGFuY2UuJGZvcmNlVXBkYXRlKClcbiAgICAgIGluc3RhbmNlLiRuZXh0VGljayhyZXN0b3JlKVxuICAgIH0pXG4gIH0gZWxzZSB7XG4gICAgLy8gZnVuY3Rpb25hbCBvciBubyBpbnN0YW5jZSBjcmVhdGVkIHlldFxuICAgIHJlY29yZC5vcHRpb25zLnJlbmRlciA9IG9wdGlvbnMucmVuZGVyXG4gICAgcmVjb3JkLm9wdGlvbnMuc3RhdGljUmVuZGVyRm5zID0gb3B0aW9ucy5zdGF0aWNSZW5kZXJGbnNcblxuICAgIC8vIGhhbmRsZSBmdW5jdGlvbmFsIGNvbXBvbmVudCByZS1yZW5kZXJcbiAgICBpZiAocmVjb3JkLm9wdGlvbnMuZnVuY3Rpb25hbCkge1xuICAgICAgLy8gcmVyZW5kZXIgd2l0aCBmdWxsIG9wdGlvbnNcbiAgICAgIGlmIChPYmplY3Qua2V5cyhvcHRpb25zKS5sZW5ndGggPiAyKSB7XG4gICAgICAgIHVwZGF0ZU9wdGlvbnMocmVjb3JkLm9wdGlvbnMsIG9wdGlvbnMpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyB0ZW1wbGF0ZS1vbmx5IHJlcmVuZGVyLlxuICAgICAgICAvLyBuZWVkIHRvIGluamVjdCB0aGUgc3R5bGUgaW5qZWN0aW9uIGNvZGUgZm9yIENTUyBtb2R1bGVzXG4gICAgICAgIC8vIHRvIHdvcmsgcHJvcGVybHkuXG4gICAgICAgIHZhciBpbmplY3RTdHlsZXMgPSByZWNvcmQub3B0aW9ucy5faW5qZWN0U3R5bGVzXG4gICAgICAgIGlmIChpbmplY3RTdHlsZXMpIHtcbiAgICAgICAgICB2YXIgcmVuZGVyID0gb3B0aW9ucy5yZW5kZXJcbiAgICAgICAgICByZWNvcmQub3B0aW9ucy5yZW5kZXIgPSBmdW5jdGlvbiAoaCwgY3R4KSB7XG4gICAgICAgICAgICBpbmplY3RTdHlsZXMuY2FsbChjdHgpXG4gICAgICAgICAgICByZXR1cm4gcmVuZGVyKGgsIGN0eClcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJlY29yZC5vcHRpb25zLl9DdG9yID0gbnVsbFxuICAgICAgLy8gMi41LjNcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHJlY29yZC5vcHRpb25zLmNhY2hlZCkpIHtcbiAgICAgICAgcmVjb3JkLm9wdGlvbnMuY2FjaGVkID0gW11cbiAgICAgIH1cbiAgICAgIHJlY29yZC5pbnN0YW5jZXMuc2xpY2UoKS5mb3JFYWNoKGZ1bmN0aW9uIChpbnN0YW5jZSkge1xuICAgICAgICBpbnN0YW5jZS4kZm9yY2VVcGRhdGUoKVxuICAgICAgfSlcbiAgICB9XG4gIH1cbn0pXG5cbmV4cG9ydHMucmVsb2FkID0gdHJ5V3JhcChmdW5jdGlvbiAoaWQsIG9wdGlvbnMpIHtcbiAgdmFyIHJlY29yZCA9IG1hcFtpZF1cbiAgaWYgKG9wdGlvbnMpIHtcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIG9wdGlvbnMgPSBvcHRpb25zLm9wdGlvbnNcbiAgICB9XG4gICAgbWFrZU9wdGlvbnNIb3QoaWQsIG9wdGlvbnMpXG4gICAgaWYgKHJlY29yZC5DdG9yKSB7XG4gICAgICBpZiAodmVyc2lvblsxXSA8IDIpIHtcbiAgICAgICAgLy8gcHJlc2VydmUgcHJlIDIuMiBiZWhhdmlvciBmb3IgZ2xvYmFsIG1peGluIGhhbmRsaW5nXG4gICAgICAgIHJlY29yZC5DdG9yLmV4dGVuZE9wdGlvbnMgPSBvcHRpb25zXG4gICAgICB9XG4gICAgICB2YXIgbmV3Q3RvciA9IHJlY29yZC5DdG9yLnN1cGVyLmV4dGVuZChvcHRpb25zKVxuICAgICAgLy8gcHJldmVudCByZWNvcmQub3B0aW9ucy5fQ3RvciBmcm9tIGJlaW5nIG92ZXJ3cml0dGVuIGFjY2lkZW50YWxseVxuICAgICAgbmV3Q3Rvci5vcHRpb25zLl9DdG9yID0gcmVjb3JkLm9wdGlvbnMuX0N0b3JcbiAgICAgIHJlY29yZC5DdG9yLm9wdGlvbnMgPSBuZXdDdG9yLm9wdGlvbnNcbiAgICAgIHJlY29yZC5DdG9yLmNpZCA9IG5ld0N0b3IuY2lkXG4gICAgICByZWNvcmQuQ3Rvci5wcm90b3R5cGUgPSBuZXdDdG9yLnByb3RvdHlwZVxuICAgICAgaWYgKG5ld0N0b3IucmVsZWFzZSkge1xuICAgICAgICAvLyB0ZW1wb3JhcnkgZ2xvYmFsIG1peGluIHN0cmF0ZWd5IHVzZWQgaW4gPCAyLjAuMC1hbHBoYS42XG4gICAgICAgIG5ld0N0b3IucmVsZWFzZSgpXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHVwZGF0ZU9wdGlvbnMocmVjb3JkLm9wdGlvbnMsIG9wdGlvbnMpXG4gICAgfVxuICB9XG4gIHJlY29yZC5pbnN0YW5jZXMuc2xpY2UoKS5mb3JFYWNoKGZ1bmN0aW9uIChpbnN0YW5jZSkge1xuICAgIGlmIChpbnN0YW5jZS4kdm5vZGUgJiYgaW5zdGFuY2UuJHZub2RlLmNvbnRleHQpIHtcbiAgICAgIGluc3RhbmNlLiR2bm9kZS5jb250ZXh0LiRmb3JjZVVwZGF0ZSgpXG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgJ1Jvb3Qgb3IgbWFudWFsbHkgbW91bnRlZCBpbnN0YW5jZSBtb2RpZmllZC4gRnVsbCByZWxvYWQgcmVxdWlyZWQuJ1xuICAgICAgKVxuICAgIH1cbiAgfSlcbn0pXG5cbi8vIDIuNiBvcHRpbWl6ZXMgdGVtcGxhdGUtY29tcGlsZWQgc2NvcGVkIHNsb3RzIGFuZCBza2lwcyB1cGRhdGVzIGlmIGNoaWxkXG4vLyBvbmx5IHVzZXMgc2NvcGVkIHNsb3RzLiBXZSBuZWVkIHRvIHBhdGNoIHRoZSBzY29wZWQgc2xvdHMgcmVzb2x2aW5nIGhlbHBlclxuLy8gdG8gdGVtcG9yYXJpbHkgbWFyayBhbGwgc2NvcGVkIHNsb3RzIGFzIHVuc3RhYmxlIGluIG9yZGVyIHRvIGZvcmNlIGNoaWxkXG4vLyB1cGRhdGVzLlxuZnVuY3Rpb24gcGF0Y2hTY29wZWRTbG90cyAoaW5zdGFuY2UpIHtcbiAgaWYgKCFpbnN0YW5jZS5fdSkgeyByZXR1cm4gfVxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vdnVlanMvdnVlL2Jsb2IvZGV2L3NyYy9jb3JlL2luc3RhbmNlL3JlbmRlci1oZWxwZXJzL3Jlc29sdmUtc2NvcGVkLXNsb3RzLmpzXG4gIHZhciBvcmlnaW5hbCA9IGluc3RhbmNlLl91XG4gIGluc3RhbmNlLl91ID0gZnVuY3Rpb24gKHNsb3RzKSB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIDIuNi40IH4gMi42LjZcbiAgICAgIHJldHVybiBvcmlnaW5hbChzbG90cywgdHJ1ZSlcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyAyLjUgLyA+PSAyLjYuN1xuICAgICAgcmV0dXJuIG9yaWdpbmFsKHNsb3RzLCBudWxsLCB0cnVlKVxuICAgIH1cbiAgfVxuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIGluc3RhbmNlLl91ID0gb3JpZ2luYWxcbiAgfVxufVxuIiwiIWZ1bmN0aW9uKGUsdCl7XCJvYmplY3RcIj09dHlwZW9mIGV4cG9ydHMmJlwib2JqZWN0XCI9PXR5cGVvZiBtb2R1bGU/bW9kdWxlLmV4cG9ydHM9dCgpOlwiZnVuY3Rpb25cIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoW10sdCk6XCJvYmplY3RcIj09dHlwZW9mIGV4cG9ydHM/ZXhwb3J0c1tcInZ1ZS1qcy1tb2RhbFwiXT10KCk6ZVtcInZ1ZS1qcy1tb2RhbFwiXT10KCl9KHdpbmRvdyxmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbihuKXt2YXIgbz17fTtmdW5jdGlvbiBpKGUpe2lmKG9bZV0pcmV0dXJuIG9bZV0uZXhwb3J0czt2YXIgdD1vW2VdPXtpOmUsbDohMSxleHBvcnRzOnt9fTtyZXR1cm4gbltlXS5jYWxsKHQuZXhwb3J0cyx0LHQuZXhwb3J0cyxpKSx0Lmw9ITAsdC5leHBvcnRzfXJldHVybiBpLm09bixpLmM9byxpLmQ9ZnVuY3Rpb24oZSx0LG4pe2kubyhlLHQpfHxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHtlbnVtZXJhYmxlOiEwLGdldDpufSl9LGkucj1mdW5jdGlvbihlKXtcInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZTeW1ib2wudG9TdHJpbmdUYWcmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6XCJNb2R1bGVcIn0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pfSxpLnQ9ZnVuY3Rpb24odCxlKXtpZigxJmUmJih0PWkodCkpLDgmZSlyZXR1cm4gdDtpZig0JmUmJlwib2JqZWN0XCI9PXR5cGVvZiB0JiZ0JiZ0Ll9fZXNNb2R1bGUpcmV0dXJuIHQ7dmFyIG49T2JqZWN0LmNyZWF0ZShudWxsKTtpZihpLnIobiksT2JqZWN0LmRlZmluZVByb3BlcnR5KG4sXCJkZWZhdWx0XCIse2VudW1lcmFibGU6ITAsdmFsdWU6dH0pLDImZSYmXCJzdHJpbmdcIiE9dHlwZW9mIHQpZm9yKHZhciBvIGluIHQpaS5kKG4sbyxmdW5jdGlvbihlKXtyZXR1cm4gdFtlXX0uYmluZChudWxsLG8pKTtyZXR1cm4gbn0saS5uPWZ1bmN0aW9uKGUpe3ZhciB0PWUmJmUuX19lc01vZHVsZT9mdW5jdGlvbigpe3JldHVybiBlLmRlZmF1bHR9OmZ1bmN0aW9uKCl7cmV0dXJuIGV9O3JldHVybiBpLmQodCxcImFcIix0KSx0fSxpLm89ZnVuY3Rpb24oZSx0KXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsdCl9LGkucD1cIi9kaXN0L1wiLGkoaS5zPTExKX0oW2Z1bmN0aW9uKGUsdCxuKXt2YXIgbz1uKDYpO1wic3RyaW5nXCI9PXR5cGVvZiBvJiYobz1bW2UuaSxvLFwiXCJdXSksby5sb2NhbHMmJihlLmV4cG9ydHM9by5sb2NhbHMpOygwLG4oNCkuZGVmYXVsdCkoXCIyN2Q4Mzc5NlwiLG8sITEse30pfSxmdW5jdGlvbihlLHQsbil7dmFyIG89big4KTtcInN0cmluZ1wiPT10eXBlb2YgbyYmKG89W1tlLmksbyxcIlwiXV0pLG8ubG9jYWxzJiYoZS5leHBvcnRzPW8ubG9jYWxzKTsoMCxuKDQpLmRlZmF1bHQpKFwiMGU3ODM0OTRcIixvLCExLHt9KX0sZnVuY3Rpb24oZSx0LG4pe3ZhciBvPW4oMTApO1wic3RyaW5nXCI9PXR5cGVvZiBvJiYobz1bW2UuaSxvLFwiXCJdXSksby5sb2NhbHMmJihlLmV4cG9ydHM9by5sb2NhbHMpOygwLG4oNCkuZGVmYXVsdCkoXCIxNzc1N2Y2MFwiLG8sITEse30pfSxmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbihuKXt2YXIgYT1bXTtyZXR1cm4gYS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm1hcChmdW5jdGlvbihlKXt2YXIgdD1mdW5jdGlvbihlLHQpe3ZhciBuPWVbMV18fFwiXCIsbz1lWzNdO2lmKCFvKXJldHVybiBuO2lmKHQmJlwiZnVuY3Rpb25cIj09dHlwZW9mIGJ0b2Epe3ZhciBpPShhPW8sXCIvKiMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtODtiYXNlNjQsXCIrYnRvYSh1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoSlNPTi5zdHJpbmdpZnkoYSkpKSkrXCIgKi9cIikscj1vLnNvdXJjZXMubWFwKGZ1bmN0aW9uKGUpe3JldHVyblwiLyojIHNvdXJjZVVSTD1cIitvLnNvdXJjZVJvb3QrZStcIiAqL1wifSk7cmV0dXJuW25dLmNvbmNhdChyKS5jb25jYXQoW2ldKS5qb2luKFwiXFxuXCIpfXZhciBhO3JldHVybltuXS5qb2luKFwiXFxuXCIpfShlLG4pO3JldHVybiBlWzJdP1wiQG1lZGlhIFwiK2VbMl0rXCJ7XCIrdCtcIn1cIjp0fSkuam9pbihcIlwiKX0sYS5pPWZ1bmN0aW9uKGUsdCl7XCJzdHJpbmdcIj09dHlwZW9mIGUmJihlPVtbbnVsbCxlLFwiXCJdXSk7Zm9yKHZhciBuPXt9LG89MDtvPHRoaXMubGVuZ3RoO28rKyl7dmFyIGk9dGhpc1tvXVswXTtcIm51bWJlclwiPT10eXBlb2YgaSYmKG5baV09ITApfWZvcihvPTA7bzxlLmxlbmd0aDtvKyspe3ZhciByPWVbb107XCJudW1iZXJcIj09dHlwZW9mIHJbMF0mJm5bclswXV18fCh0JiYhclsyXT9yWzJdPXQ6dCYmKHJbMl09XCIoXCIrclsyXStcIikgYW5kIChcIit0K1wiKVwiKSxhLnB1c2gocikpfX0sYX19LGZ1bmN0aW9uKGUsdCxuKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBsKGUsdCl7Zm9yKHZhciBuPVtdLG89e30saT0wO2k8dC5sZW5ndGg7aSsrKXt2YXIgcj10W2ldLGE9clswXSxzPXtpZDplK1wiOlwiK2ksY3NzOnJbMV0sbWVkaWE6clsyXSxzb3VyY2VNYXA6clszXX07b1thXT9vW2FdLnBhcnRzLnB1c2gocyk6bi5wdXNoKG9bYV09e2lkOmEscGFydHM6W3NdfSl9cmV0dXJuIG59bi5yKHQpLG4uZCh0LFwiZGVmYXVsdFwiLGZ1bmN0aW9uKCl7cmV0dXJuIHB9KTt2YXIgbz1cInVuZGVmaW5lZFwiIT10eXBlb2YgZG9jdW1lbnQ7aWYoXCJ1bmRlZmluZWRcIiE9dHlwZW9mIERFQlVHJiZERUJVRyYmIW8pdGhyb3cgbmV3IEVycm9yKFwidnVlLXN0eWxlLWxvYWRlciBjYW5ub3QgYmUgdXNlZCBpbiBhIG5vbi1icm93c2VyIGVudmlyb25tZW50LiBVc2UgeyB0YXJnZXQ6ICdub2RlJyB9IGluIHlvdXIgV2VicGFjayBjb25maWcgdG8gaW5kaWNhdGUgYSBzZXJ2ZXItcmVuZGVyaW5nIGVudmlyb25tZW50LlwiKTt2YXIgZD17fSxpPW8mJihkb2N1bWVudC5oZWFkfHxkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZShcImhlYWRcIilbMF0pLHI9bnVsbCxhPTAsdT0hMSxzPWZ1bmN0aW9uKCl7fSxjPW51bGwsaD1cImRhdGEtdnVlLXNzci1pZFwiLGY9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIG5hdmlnYXRvciYmL21zaWUgWzYtOV1cXGIvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpKTtmdW5jdGlvbiBwKGEsZSx0LG4pe3U9dCxjPW58fHt9O3ZhciBzPWwoYSxlKTtyZXR1cm4gdihzKSxmdW5jdGlvbihlKXtmb3IodmFyIHQ9W10sbj0wO248cy5sZW5ndGg7bisrKXt2YXIgbz1zW25dOyhpPWRbby5pZF0pLnJlZnMtLSx0LnB1c2goaSl9ZT92KHM9bChhLGUpKTpzPVtdO2ZvcihuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciBpO2lmKDA9PT0oaT10W25dKS5yZWZzKXtmb3IodmFyIHI9MDtyPGkucGFydHMubGVuZ3RoO3IrKylpLnBhcnRzW3JdKCk7ZGVsZXRlIGRbaS5pZF19fX19ZnVuY3Rpb24gdihlKXtmb3IodmFyIHQ9MDt0PGUubGVuZ3RoO3QrKyl7dmFyIG49ZVt0XSxvPWRbbi5pZF07aWYobyl7by5yZWZzKys7Zm9yKHZhciBpPTA7aTxvLnBhcnRzLmxlbmd0aDtpKyspby5wYXJ0c1tpXShuLnBhcnRzW2ldKTtmb3IoO2k8bi5wYXJ0cy5sZW5ndGg7aSsrKW8ucGFydHMucHVzaChnKG4ucGFydHNbaV0pKTtvLnBhcnRzLmxlbmd0aD5uLnBhcnRzLmxlbmd0aCYmKG8ucGFydHMubGVuZ3RoPW4ucGFydHMubGVuZ3RoKX1lbHNle3ZhciByPVtdO2ZvcihpPTA7aTxuLnBhcnRzLmxlbmd0aDtpKyspci5wdXNoKGcobi5wYXJ0c1tpXSkpO2Rbbi5pZF09e2lkOm4uaWQscmVmczoxLHBhcnRzOnJ9fX19ZnVuY3Rpb24gbSgpe3ZhciBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiKTtyZXR1cm4gZS50eXBlPVwidGV4dC9jc3NcIixpLmFwcGVuZENoaWxkKGUpLGV9ZnVuY3Rpb24gZyh0KXt2YXIgbixvLGU9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcInN0eWxlW1wiK2grJ349XCInK3QuaWQrJ1wiXScpO2lmKGUpe2lmKHUpcmV0dXJuIHM7ZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGUpfWlmKGYpe3ZhciBpPWErKztlPXJ8fChyPW0oKSksbj13LmJpbmQobnVsbCxlLGksITEpLG89dy5iaW5kKG51bGwsZSxpLCEwKX1lbHNlIGU9bSgpLG49ZnVuY3Rpb24oZSx0KXt2YXIgbj10LmNzcyxvPXQubWVkaWEsaT10LnNvdXJjZU1hcDtvJiZlLnNldEF0dHJpYnV0ZShcIm1lZGlhXCIsbyk7Yy5zc3JJZCYmZS5zZXRBdHRyaWJ1dGUoaCx0LmlkKTtpJiYobis9XCJcXG4vKiMgc291cmNlVVJMPVwiK2kuc291cmNlc1swXStcIiAqL1wiLG4rPVwiXFxuLyojIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxcIitidG9hKHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChKU09OLnN0cmluZ2lmeShpKSkpKStcIiAqL1wiKTtpZihlLnN0eWxlU2hlZXQpZS5zdHlsZVNoZWV0LmNzc1RleHQ9bjtlbHNle2Zvcig7ZS5maXJzdENoaWxkOyllLnJlbW92ZUNoaWxkKGUuZmlyc3RDaGlsZCk7ZS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShuKSl9fS5iaW5kKG51bGwsZSksbz1mdW5jdGlvbigpe2UucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChlKX07cmV0dXJuIG4odCksZnVuY3Rpb24oZSl7aWYoZSl7aWYoZS5jc3M9PT10LmNzcyYmZS5tZWRpYT09PXQubWVkaWEmJmUuc291cmNlTWFwPT09dC5zb3VyY2VNYXApcmV0dXJuO24odD1lKX1lbHNlIG8oKX19dmFyIGIseT0oYj1bXSxmdW5jdGlvbihlLHQpe3JldHVybiBiW2VdPXQsYi5maWx0ZXIoQm9vbGVhbikuam9pbihcIlxcblwiKX0pO2Z1bmN0aW9uIHcoZSx0LG4sbyl7dmFyIGk9bj9cIlwiOm8uY3NzO2lmKGUuc3R5bGVTaGVldCllLnN0eWxlU2hlZXQuY3NzVGV4dD15KHQsaSk7ZWxzZXt2YXIgcj1kb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShpKSxhPWUuY2hpbGROb2RlczthW3RdJiZlLnJlbW92ZUNoaWxkKGFbdF0pLGEubGVuZ3RoP2UuaW5zZXJ0QmVmb3JlKHIsYVt0XSk6ZS5hcHBlbmRDaGlsZChyKX19fSxmdW5jdGlvbihlLHQsbil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG89bigwKTtuLm4obykuYX0sZnVuY3Rpb24oZSx0LG4peyhlLmV4cG9ydHM9bigzKSghMSkpLnB1c2goW2UuaSxcIlxcbi52dWUtbW9kYWwtcmVzaXplciB7XFxyXFxuICBkaXNwbGF5OiBibG9jaztcXHJcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxyXFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxyXFxuICB3aWR0aDogMTJweDtcXHJcXG4gIGhlaWdodDogMTJweDtcXHJcXG4gIHJpZ2h0OiAwO1xcclxcbiAgYm90dG9tOiAwO1xcclxcbiAgei1pbmRleDogOTk5OTk5OTtcXHJcXG4gIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xcclxcbiAgY3Vyc29yOiBzZS1yZXNpemU7XFxufVxcbi52dWUtbW9kYWwtcmVzaXplcjo6YWZ0ZXIge1xcclxcbiAgZGlzcGxheTogYmxvY2s7XFxyXFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxyXFxuICBjb250ZW50OiAnJztcXHJcXG4gIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xcclxcbiAgbGVmdDogMDtcXHJcXG4gIHRvcDogMDtcXHJcXG4gIHdpZHRoOiAwO1xcclxcbiAgaGVpZ2h0OiAwO1xcclxcbiAgYm9yZGVyLWJvdHRvbTogMTBweCBzb2xpZCAjZGRkO1xcclxcbiAgYm9yZGVyLWxlZnQ6IDEwcHggc29saWQgdHJhbnNwYXJlbnQ7XFxufVxcbi52dWUtbW9kYWwtcmVzaXplci5jbGlja2VkOjphZnRlciB7XFxyXFxuICBib3JkZXItYm90dG9tOiAxMHB4IHNvbGlkICMzNjliZTk7XFxufVxcclxcblwiLFwiXCJdKX0sZnVuY3Rpb24oZSx0LG4pe1widXNlIHN0cmljdFwiO3ZhciBvPW4oMSk7bi5uKG8pLmF9LGZ1bmN0aW9uKGUsdCxuKXsoZS5leHBvcnRzPW4oMykoITEpKS5wdXNoKFtlLmksXCJcXG4udi0tbW9kYWwtYmxvY2stc2Nyb2xsIHtcXHJcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxyXFxuICB3aWR0aDogMTAwdnc7XFxufVxcbi52LS1tb2RhbC1vdmVybGF5IHtcXHJcXG4gIHBvc2l0aW9uOiBmaXhlZDtcXHJcXG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxyXFxuICBsZWZ0OiAwO1xcclxcbiAgdG9wOiAwO1xcclxcbiAgd2lkdGg6IDEwMCU7XFxyXFxuICBoZWlnaHQ6IDEwMHZoO1xcclxcbiAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjIpO1xcclxcbiAgei1pbmRleDogOTk5O1xcclxcbiAgb3BhY2l0eTogMTtcXG59XFxuLnYtLW1vZGFsLW92ZXJsYXkuc2Nyb2xsYWJsZSB7XFxyXFxuICBoZWlnaHQ6IDEwMCU7XFxyXFxuICBtaW4taGVpZ2h0OiAxMDB2aDtcXHJcXG4gIG92ZXJmbG93LXk6IGF1dG87XFxyXFxuICAtd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzogdG91Y2g7XFxufVxcbi52LS1tb2RhbC1vdmVybGF5IC52LS1tb2RhbC1iYWNrZ3JvdW5kLWNsaWNrIHtcXHJcXG4gIHdpZHRoOiAxMDAlO1xcclxcbiAgbWluLWhlaWdodDogMTAwJTtcXHJcXG4gIGhlaWdodDogYXV0bztcXG59XFxuLnYtLW1vZGFsLW92ZXJsYXkgLnYtLW1vZGFsLWJveCB7XFxyXFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxyXFxuICBvdmVyZmxvdzogaGlkZGVuO1xcclxcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcXG59XFxuLnYtLW1vZGFsLW92ZXJsYXkuc2Nyb2xsYWJsZSAudi0tbW9kYWwtYm94IHtcXHJcXG4gIG1hcmdpbi1ib3R0b206IDJweDtcXG59XFxuLnYtLW1vZGFsIHtcXHJcXG4gIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xcclxcbiAgdGV4dC1hbGlnbjogbGVmdDtcXHJcXG4gIGJvcmRlci1yYWRpdXM6IDNweDtcXHJcXG4gIGJveC1zaGFkb3c6IDAgMjBweCA2MHB4IC0ycHggcmdiYSgyNywgMzMsIDU4LCAwLjQpO1xcclxcbiAgcGFkZGluZzogMDtcXG59XFxuLnYtLW1vZGFsLnYtLW1vZGFsLWZ1bGxzY3JlZW4ge1xcclxcbiAgd2lkdGg6IDEwMHZ3O1xcclxcbiAgaGVpZ2h0OiAxMDB2aDtcXHJcXG4gIG1hcmdpbjogMDtcXHJcXG4gIGxlZnQ6IDA7XFxyXFxuICB0b3A6IDA7XFxufVxcbi52LS1tb2RhbC10b3AtcmlnaHQge1xcclxcbiAgZGlzcGxheTogYmxvY2s7XFxyXFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxyXFxuICByaWdodDogMDtcXHJcXG4gIHRvcDogMDtcXG59XFxuLm92ZXJsYXktZmFkZS1lbnRlci1hY3RpdmUsXFxyXFxuLm92ZXJsYXktZmFkZS1sZWF2ZS1hY3RpdmUge1xcclxcbiAgdHJhbnNpdGlvbjogYWxsIDAuMnM7XFxufVxcbi5vdmVybGF5LWZhZGUtZW50ZXIsXFxyXFxuLm92ZXJsYXktZmFkZS1sZWF2ZS1hY3RpdmUge1xcclxcbiAgb3BhY2l0eTogMDtcXG59XFxuLm5pY2UtbW9kYWwtZmFkZS1lbnRlci1hY3RpdmUsXFxyXFxuLm5pY2UtbW9kYWwtZmFkZS1sZWF2ZS1hY3RpdmUge1xcclxcbiAgdHJhbnNpdGlvbjogYWxsIDAuNHM7XFxufVxcbi5uaWNlLW1vZGFsLWZhZGUtZW50ZXIsXFxyXFxuLm5pY2UtbW9kYWwtZmFkZS1sZWF2ZS1hY3RpdmUge1xcclxcbiAgb3BhY2l0eTogMDtcXHJcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMjBweCk7XFxufVxcclxcblwiLFwiXCJdKX0sZnVuY3Rpb24oZSx0LG4pe1widXNlIHN0cmljdFwiO3ZhciBvPW4oMik7bi5uKG8pLmF9LGZ1bmN0aW9uKGUsdCxuKXsoZS5leHBvcnRzPW4oMykoITEpKS5wdXNoKFtlLmksXCJcXG4udnVlLWRpYWxvZyBkaXYge1xcclxcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcXG59XFxuLnZ1ZS1kaWFsb2cgLmRpYWxvZy1mbGV4IHtcXHJcXG4gIHdpZHRoOiAxMDAlO1xcclxcbiAgaGVpZ2h0OiAxMDAlO1xcbn1cXG4udnVlLWRpYWxvZyAuZGlhbG9nLWNvbnRlbnQge1xcclxcbiAgZmxleDogMSAwIGF1dG87XFxyXFxuICB3aWR0aDogMTAwJTtcXHJcXG4gIHBhZGRpbmc6IDE1cHg7XFxyXFxuICBmb250LXNpemU6IDE0cHg7XFxufVxcbi52dWUtZGlhbG9nIC5kaWFsb2ctYy10aXRsZSB7XFxyXFxuICBmb250LXdlaWdodDogNjAwO1xcclxcbiAgcGFkZGluZy1ib3R0b206IDE1cHg7XFxufVxcbi52dWUtZGlhbG9nIC5kaWFsb2ctYy10ZXh0IHtcXG59XFxuLnZ1ZS1kaWFsb2cgLnZ1ZS1kaWFsb2ctYnV0dG9ucyB7XFxyXFxuICBkaXNwbGF5OiBmbGV4O1xcclxcbiAgZmxleDogMCAxIGF1dG87XFxyXFxuICB3aWR0aDogMTAwJTtcXHJcXG4gIGJvcmRlci10b3A6IDFweCBzb2xpZCAjZWVlO1xcbn1cXG4udnVlLWRpYWxvZyAudnVlLWRpYWxvZy1idXR0b25zLW5vbmUge1xcclxcbiAgd2lkdGg6IDEwMCU7XFxyXFxuICBwYWRkaW5nLWJvdHRvbTogMTVweDtcXG59XFxuLnZ1ZS1kaWFsb2ctYnV0dG9uIHtcXHJcXG4gIGZvbnQtc2l6ZTogMTJweCAhaW1wb3J0YW50O1xcclxcbiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XFxyXFxuICBwYWRkaW5nOiAwO1xcclxcbiAgbWFyZ2luOiAwO1xcclxcbiAgYm9yZGVyOiAwO1xcclxcbiAgY3Vyc29yOiBwb2ludGVyO1xcclxcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcXHJcXG4gIGxpbmUtaGVpZ2h0OiA0MHB4O1xcclxcbiAgaGVpZ2h0OiA0MHB4O1xcclxcbiAgY29sb3I6IGluaGVyaXQ7XFxyXFxuICBmb250OiBpbmhlcml0O1xcclxcbiAgb3V0bGluZTogbm9uZTtcXG59XFxuLnZ1ZS1kaWFsb2ctYnV0dG9uOmhvdmVyIHtcXHJcXG4gIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC4wMSk7XFxufVxcbi52dWUtZGlhbG9nLWJ1dHRvbjphY3RpdmUge1xcclxcbiAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjAyNSk7XFxufVxcbi52dWUtZGlhbG9nLWJ1dHRvbjpub3QoOmZpcnN0LW9mLXR5cGUpIHtcXHJcXG4gIGJvcmRlci1sZWZ0OiAxcHggc29saWQgI2VlZTtcXG59XFxyXFxuXCIsXCJcIl0pfSxmdW5jdGlvbihlLHQsbil7XCJ1c2Ugc3RyaWN0XCI7bi5yKHQpO3ZhciBvPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxlPXQuJGNyZWF0ZUVsZW1lbnQsbj10Ll9zZWxmLl9jfHxlO3JldHVybiBuKFwidHJhbnNpdGlvblwiLHthdHRyczp7bmFtZTp0Lm92ZXJsYXlUcmFuc2l0aW9ufX0sW3QudmlzaWJpbGl0eS5vdmVybGF5P24oXCJkaXZcIix7cmVmOlwib3ZlcmxheVwiLGNsYXNzOnQub3ZlcmxheUNsYXNzLGF0dHJzOntcImFyaWEtZXhwYW5kZWRcIjp0LnZpc2liaWxpdHkub3ZlcmxheS50b1N0cmluZygpLFwiZGF0YS1tb2RhbFwiOnQubmFtZX19LFtuKFwiZGl2XCIse3N0YXRpY0NsYXNzOlwidi0tbW9kYWwtYmFja2dyb3VuZC1jbGlja1wiLG9uOnttb3VzZWRvd246ZnVuY3Rpb24oZSl7cmV0dXJuIGUudGFyZ2V0IT09ZS5jdXJyZW50VGFyZ2V0P251bGw6dC5oYW5kbGVCYWNrZ3JvdW5kQ2xpY2soZSl9LHRvdWNoc3RhcnQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUudGFyZ2V0IT09ZS5jdXJyZW50VGFyZ2V0P251bGw6dC5oYW5kbGVCYWNrZ3JvdW5kQ2xpY2soZSl9fX0sW24oXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJ2LS1tb2RhbC10b3AtcmlnaHRcIn0sW3QuX3QoXCJ0b3AtcmlnaHRcIildLDIpLHQuX3YoXCIgXCIpLG4oXCJ0cmFuc2l0aW9uXCIse2F0dHJzOntuYW1lOnQudHJhbnNpdGlvbn0sb246e1wiYmVmb3JlLWVudGVyXCI6dC5iZWZvcmVUcmFuc2l0aW9uRW50ZXIsXCJhZnRlci1lbnRlclwiOnQuYWZ0ZXJUcmFuc2l0aW9uRW50ZXIsXCJhZnRlci1sZWF2ZVwiOnQuYWZ0ZXJUcmFuc2l0aW9uTGVhdmV9fSxbdC52aXNpYmlsaXR5Lm1vZGFsP24oXCJkaXZcIix7cmVmOlwibW9kYWxcIixjbGFzczp0Lm1vZGFsQ2xhc3Msc3R5bGU6dC5tb2RhbFN0eWxlfSxbdC5fdChcImRlZmF1bHRcIiksdC5fdihcIiBcIiksdC5yZXNpemFibGUmJiF0LmlzQXV0b0hlaWdodD9uKFwicmVzaXplclwiLHthdHRyczp7XCJtaW4td2lkdGhcIjp0Lm1pbldpZHRoLFwibWluLWhlaWdodFwiOnQubWluSGVpZ2h0fSxvbjp7cmVzaXplOnQuaGFuZGxlTW9kYWxSZXNpemV9fSk6dC5fZSgpXSwyKTp0Ll9lKCldKV0sMSldKTp0Ll9lKCldKX0saT1mdW5jdGlvbigpe3ZhciBlPXRoaXMuJGNyZWF0ZUVsZW1lbnQ7cmV0dXJuKHRoaXMuX3NlbGYuX2N8fGUpKFwiZGl2XCIse2NsYXNzOnRoaXMuY2xhc3NOYW1lfSl9O2kuX3dpdGhTdHJpcHBlZD1vLl93aXRoU3RyaXBwZWQ9ITA7dmFyIHM9ZnVuY3Rpb24oKXt2YXIgZT0wPGFyZ3VtZW50cy5sZW5ndGgmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06MDtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4oZSsrKS50b1N0cmluZygpfX0oKSx1PWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gbjxlP2U6dDxuP3Q6bn0scj1mdW5jdGlvbigpe3ZhciBlPTA8YXJndW1lbnRzLmxlbmd0aCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7fTtyZXR1cm4gZnVuY3Rpb24oaSl7Zm9yKHZhciBlPTE7ZTxhcmd1bWVudHMubGVuZ3RoO2UrKyl7dmFyIHI9bnVsbCE9YXJndW1lbnRzW2VdP2FyZ3VtZW50c1tlXTp7fSx0PU9iamVjdC5rZXlzKHIpO1wiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMmJih0PXQuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocikuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHIsZSkuZW51bWVyYWJsZX0pKSksdC5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciB0LG4sbzt0PWksbz1yW249ZV0sbiBpbiB0P09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LG4se3ZhbHVlOm8sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTp0W25dPW99KX1yZXR1cm4gaX0oe2lkOnMoKSx0aW1lc3RhbXA6RGF0ZS5ub3coKSxjYW5jZWxlZDohMX0sZSl9LGE9e25hbWU6XCJWdWVKc01vZGFsUmVzaXplclwiLHByb3BzOnttaW5IZWlnaHQ6e3R5cGU6TnVtYmVyLGRlZmF1bHQ6MH0sbWluV2lkdGg6e3R5cGU6TnVtYmVyLGRlZmF1bHQ6MH19LGRhdGE6ZnVuY3Rpb24oKXtyZXR1cm57Y2xpY2tlZDohMSxzaXplOnt9fX0sbW91bnRlZDpmdW5jdGlvbigpe3RoaXMuJGVsLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZWRvd25cIix0aGlzLnN0YXJ0LCExKX0sY29tcHV0ZWQ6e2NsYXNzTmFtZTpmdW5jdGlvbigpe3JldHVybntcInZ1ZS1tb2RhbC1yZXNpemVyXCI6ITAsY2xpY2tlZDp0aGlzLmNsaWNrZWR9fX0sbWV0aG9kczp7c3RhcnQ6ZnVuY3Rpb24oZSl7dGhpcy5jbGlja2VkPSEwLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwibW91c2Vtb3ZlXCIsdGhpcy5tb3VzZW1vdmUsITEpLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwibW91c2V1cFwiLHRoaXMuc3RvcCwhMSksZS5zdG9wUHJvcGFnYXRpb24oKSxlLnByZXZlbnREZWZhdWx0KCl9LHN0b3A6ZnVuY3Rpb24oKXt0aGlzLmNsaWNrZWQ9ITEsd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtb3VzZW1vdmVcIix0aGlzLm1vdXNlbW92ZSwhMSksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtb3VzZXVwXCIsdGhpcy5zdG9wLCExKSx0aGlzLiRlbWl0KFwicmVzaXplLXN0b3BcIix7ZWxlbWVudDp0aGlzLiRlbC5wYXJlbnRFbGVtZW50LHNpemU6dGhpcy5zaXplfSl9LG1vdXNlbW92ZTpmdW5jdGlvbihlKXt0aGlzLnJlc2l6ZShlKX0scmVzaXplOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuJGVsLnBhcmVudEVsZW1lbnQ7aWYodCl7dmFyIG49ZS5jbGllbnRYLXQub2Zmc2V0TGVmdCxvPWUuY2xpZW50WS10Lm9mZnNldFRvcDtuPXUodGhpcy5taW5XaWR0aCx3aW5kb3cuaW5uZXJXaWR0aCxuKSxvPXUodGhpcy5taW5IZWlnaHQsd2luZG93LmlubmVySGVpZ2h0LG8pLHRoaXMuc2l6ZT17d2lkdGg6bixoZWlnaHQ6b30sdC5zdHlsZS53aWR0aD1uK1wicHhcIix0LnN0eWxlLmhlaWdodD1vK1wicHhcIix0aGlzLiRlbWl0KFwicmVzaXplXCIse2VsZW1lbnQ6dCxzaXplOnRoaXMuc2l6ZX0pfX19fTtuKDUpO2Z1bmN0aW9uIGwoZSx0LG4sbyxpLHIsYSxzKXt2YXIgbCxkPVwiZnVuY3Rpb25cIj09dHlwZW9mIGU/ZS5vcHRpb25zOmU7aWYodCYmKGQucmVuZGVyPXQsZC5zdGF0aWNSZW5kZXJGbnM9bixkLl9jb21waWxlZD0hMCksbyYmKGQuZnVuY3Rpb25hbD0hMCksciYmKGQuX3Njb3BlSWQ9XCJkYXRhLXYtXCIrciksYT8obD1mdW5jdGlvbihlKXsoZT1lfHx0aGlzLiR2bm9kZSYmdGhpcy4kdm5vZGUuc3NyQ29udGV4dHx8dGhpcy5wYXJlbnQmJnRoaXMucGFyZW50LiR2bm9kZSYmdGhpcy5wYXJlbnQuJHZub2RlLnNzckNvbnRleHQpfHxcInVuZGVmaW5lZFwiPT10eXBlb2YgX19WVUVfU1NSX0NPTlRFWFRfX3x8KGU9X19WVUVfU1NSX0NPTlRFWFRfXyksaSYmaS5jYWxsKHRoaXMsZSksZSYmZS5fcmVnaXN0ZXJlZENvbXBvbmVudHMmJmUuX3JlZ2lzdGVyZWRDb21wb25lbnRzLmFkZChhKX0sZC5fc3NyUmVnaXN0ZXI9bCk6aSYmKGw9cz9mdW5jdGlvbigpe2kuY2FsbCh0aGlzLHRoaXMuJHJvb3QuJG9wdGlvbnMuc2hhZG93Um9vdCl9OmkpLGwpaWYoZC5mdW5jdGlvbmFsKXtkLl9pbmplY3RTdHlsZXM9bDt2YXIgdT1kLnJlbmRlcjtkLnJlbmRlcj1mdW5jdGlvbihlLHQpe3JldHVybiBsLmNhbGwodCksdShlLHQpfX1lbHNle3ZhciBjPWQuYmVmb3JlQ3JlYXRlO2QuYmVmb3JlQ3JlYXRlPWM/W10uY29uY2F0KGMsbCk6W2xdfXJldHVybntleHBvcnRzOmUsb3B0aW9uczpkfX12YXIgZD1sKGEsaSxbXSwhMSxudWxsLG51bGwsbnVsbCk7ZC5vcHRpb25zLl9fZmlsZT1cInNyYy9SZXNpemVyLnZ1ZVwiO3ZhciBjPWQuZXhwb3J0cztmdW5jdGlvbiBoKGUpe3JldHVybihoPVwiZnVuY3Rpb25cIj09dHlwZW9mIFN5bWJvbCYmXCJzeW1ib2xcIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlP1wic3ltYm9sXCI6dHlwZW9mIGV9KShlKX12YXIgZj1cIlstK10/WzAtOV0qLj9bMC05XStcIixwPVt7bmFtZTpcInB4XCIscmVnZXhwOm5ldyBSZWdFeHAoXCJeXCIuY29uY2F0KGYsXCJweCRcIikpfSx7bmFtZTpcIiVcIixyZWdleHA6bmV3IFJlZ0V4cChcIl5cIi5jb25jYXQoZixcIiUkXCIpKX0se25hbWU6XCJweFwiLHJlZ2V4cDpuZXcgUmVnRXhwKFwiXlwiLmNvbmNhdChmLFwiJFwiKSl9XSx2PWZ1bmN0aW9uKGUpe3N3aXRjaChoKGUpKXtjYXNlXCJudW1iZXJcIjpyZXR1cm57dHlwZTpcInB4XCIsdmFsdWU6ZX07Y2FzZVwic3RyaW5nXCI6cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKFwiYXV0b1wiPT09ZSlyZXR1cm57dHlwZTplLHZhbHVlOjB9O2Zvcih2YXIgdD0wO3Q8cC5sZW5ndGg7dCsrKXt2YXIgbj1wW3RdO2lmKG4ucmVnZXhwLnRlc3QoZSkpcmV0dXJue3R5cGU6bi5uYW1lLHZhbHVlOnBhcnNlRmxvYXQoZSl9fXJldHVybnt0eXBlOlwiXCIsdmFsdWU6ZX19KGUpO2RlZmF1bHQ6cmV0dXJue3R5cGU6XCJcIix2YWx1ZTplfX19LG09ZnVuY3Rpb24oZSl7aWYoXCJzdHJpbmdcIiE9dHlwZW9mIGUpcmV0dXJuIDA8PWU7dmFyIHQ9dihlKTtyZXR1cm4oXCIlXCI9PT10LnR5cGV8fFwicHhcIj09PXQudHlwZSkmJjA8dC52YWx1ZX07dmFyIGc9e25hbWU6XCJWdWVKc01vZGFsXCIscHJvcHM6e25hbWU6e3JlcXVpcmVkOiEwLHR5cGU6U3RyaW5nfSxkZWxheTp7dHlwZTpOdW1iZXIsZGVmYXVsdDowfSxyZXNpemFibGU6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OiExfSxhZGFwdGl2ZTp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITF9LGRyYWdnYWJsZTp7dHlwZTpbQm9vbGVhbixTdHJpbmddLGRlZmF1bHQ6ITF9LHNjcm9sbGFibGU6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OiExfSxyZXNldDp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITF9LG92ZXJsYXlUcmFuc2l0aW9uOnt0eXBlOlN0cmluZyxkZWZhdWx0Olwib3ZlcmxheS1mYWRlXCJ9LHRyYW5zaXRpb246e3R5cGU6U3RyaW5nfSxjbGlja1RvQ2xvc2U6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OiEwfSxjbGFzc2VzOnt0eXBlOltTdHJpbmcsQXJyYXldLGRlZmF1bHQ6XCJ2LS1tb2RhbFwifSxtaW5XaWR0aDp7dHlwZTpOdW1iZXIsZGVmYXVsdDowLHZhbGlkYXRvcjpmdW5jdGlvbihlKXtyZXR1cm4gMDw9ZX19LG1pbkhlaWdodDp7dHlwZTpOdW1iZXIsZGVmYXVsdDowLHZhbGlkYXRvcjpmdW5jdGlvbihlKXtyZXR1cm4gMDw9ZX19LG1heFdpZHRoOnt0eXBlOk51bWJlcixkZWZhdWx0OjEvMH0sbWF4SGVpZ2h0Ont0eXBlOk51bWJlcixkZWZhdWx0OjEvMH0sd2lkdGg6e3R5cGU6W051bWJlcixTdHJpbmddLGRlZmF1bHQ6NjAwLHZhbGlkYXRvcjptfSxoZWlnaHQ6e3R5cGU6W051bWJlcixTdHJpbmddLGRlZmF1bHQ6MzAwLHZhbGlkYXRvcjpmdW5jdGlvbihlKXtyZXR1cm5cImF1dG9cIj09PWV8fG0oZSl9fSxwaXZvdFg6e3R5cGU6TnVtYmVyLGRlZmF1bHQ6LjUsdmFsaWRhdG9yOmZ1bmN0aW9uKGUpe3JldHVybiAwPD1lJiZlPD0xfX0scGl2b3RZOnt0eXBlOk51bWJlcixkZWZhdWx0Oi41LHZhbGlkYXRvcjpmdW5jdGlvbihlKXtyZXR1cm4gMDw9ZSYmZTw9MX19fSxjb21wb25lbnRzOntSZXNpemVyOmN9LGRhdGE6ZnVuY3Rpb24oKXtyZXR1cm57dmlzaWJsZTohMSx2aXNpYmlsaXR5Onttb2RhbDohMSxvdmVybGF5OiExfSxzaGlmdDp7bGVmdDowLHRvcDowfSxtb2RhbDp7d2lkdGg6MCx3aWR0aFR5cGU6XCJweFwiLGhlaWdodDowLGhlaWdodFR5cGU6XCJweFwiLHJlbmRlcmVkSGVpZ2h0OjB9LHdpbmRvdzp7d2lkdGg6MCxoZWlnaHQ6MH0sbXV0YXRpb25PYnNlcnZlcjpudWxsfX0sY3JlYXRlZDpmdW5jdGlvbigpe3RoaXMuc2V0SW5pdGlhbFNpemUoKX0sYmVmb3JlTW91bnQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzO2lmKHouZXZlbnQuJG9uKFwidG9nZ2xlXCIsdGhpcy5oYW5kbGVUb2dnbGVFdmVudCksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIix0aGlzLmhhbmRsZVdpbmRvd1Jlc2l6ZSksdGhpcy5oYW5kbGVXaW5kb3dSZXNpemUoKSx0aGlzLnNjcm9sbGFibGUmJiF0aGlzLmlzQXV0b0hlaWdodCYmY29uc29sZS53YXJuKCdNb2RhbCBcIicuY29uY2F0KHRoaXMubmFtZSwnXCIgaGFzIHNjcm9sbGFibGUgZmxhZyBzZXQgdG8gdHJ1ZSAnKSsnYnV0IGhlaWdodCBpcyBub3QgXCJhdXRvXCIgKCcuY29uY2F0KHRoaXMuaGVpZ2h0LFwiKVwiKSksdGhpcy5pc0F1dG9IZWlnaHQpe3ZhciBlPWZ1bmN0aW9uKCl7aWYoXCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdylmb3IodmFyIGU9W1wiXCIsXCJXZWJLaXRcIixcIk1velwiLFwiT1wiLFwiTXNcIl0sdD0wO3Q8ZS5sZW5ndGg7dCsrKXt2YXIgbj1lW3RdK1wiTXV0YXRpb25PYnNlcnZlclwiO2lmKG4gaW4gd2luZG93KXJldHVybiB3aW5kb3dbbl19cmV0dXJuITF9KCk7ZSYmKHRoaXMubXV0YXRpb25PYnNlcnZlcj1uZXcgZShmdW5jdGlvbihlKXt0LnVwZGF0ZVJlbmRlcmVkSGVpZ2h0KCl9KSl9dGhpcy5jbGlja1RvQ2xvc2UmJndpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwia2V5dXBcIix0aGlzLmhhbmRsZUVzY2FwZUtleVVwKX0sYmVmb3JlRGVzdHJveTpmdW5jdGlvbigpe3ouZXZlbnQuJG9mZihcInRvZ2dsZVwiLHRoaXMuaGFuZGxlVG9nZ2xlRXZlbnQpLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwicmVzaXplXCIsdGhpcy5oYW5kbGVXaW5kb3dSZXNpemUpLHRoaXMuY2xpY2tUb0Nsb3NlJiZ3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImtleXVwXCIsdGhpcy5oYW5kbGVFc2NhcGVLZXlVcCksdGhpcy5zY3JvbGxhYmxlJiZkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5yZW1vdmUoXCJ2LS1tb2RhbC1ibG9jay1zY3JvbGxcIil9LGNvbXB1dGVkOntpc0F1dG9IZWlnaHQ6ZnVuY3Rpb24oKXtyZXR1cm5cImF1dG9cIj09PXRoaXMubW9kYWwuaGVpZ2h0VHlwZX0scG9zaXRpb246ZnVuY3Rpb24oKXt2YXIgZT10aGlzLndpbmRvdyx0PXRoaXMuc2hpZnQsbj10aGlzLnBpdm90WCxvPXRoaXMucGl2b3RZLGk9dGhpcy50cnVlTW9kYWxXaWR0aCxyPXRoaXMudHJ1ZU1vZGFsSGVpZ2h0LGE9ZS53aWR0aC1pLHM9ZS5oZWlnaHQtcixsPXQubGVmdCtuKmEsZD10LnRvcCtvKnM7cmV0dXJue2xlZnQ6cGFyc2VJbnQodSgwLGEsbCkpLHRvcDpwYXJzZUludCh1KDAscyxkKSl9fSx0cnVlTW9kYWxXaWR0aDpmdW5jdGlvbigpe3ZhciBlPXRoaXMud2luZG93LHQ9dGhpcy5tb2RhbCxuPXRoaXMuYWRhcHRpdmUsbz10aGlzLm1pbldpZHRoLGk9dGhpcy5tYXhXaWR0aCxyPVwiJVwiPT09dC53aWR0aFR5cGU/ZS53aWR0aC8xMDAqdC53aWR0aDp0LndpZHRoLGE9TWF0aC5taW4oZS53aWR0aCxpKTtyZXR1cm4gbj91KG8sYSxyKTpyfSx0cnVlTW9kYWxIZWlnaHQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLndpbmRvdyx0PXRoaXMubW9kYWwsbj10aGlzLmlzQXV0b0hlaWdodCxvPXRoaXMuYWRhcHRpdmUsaT10aGlzLm1heEhlaWdodCxyPVwiJVwiPT09dC5oZWlnaHRUeXBlP2UuaGVpZ2h0LzEwMCp0LmhlaWdodDp0LmhlaWdodDtpZihuKXJldHVybiB0aGlzLm1vZGFsLnJlbmRlcmVkSGVpZ2h0O3ZhciBhPU1hdGgubWluKGUuaGVpZ2h0LGkpO3JldHVybiBvP3UodGhpcy5taW5IZWlnaHQsYSxyKTpyfSxvdmVybGF5Q2xhc3M6ZnVuY3Rpb24oKXtyZXR1cm57XCJ2LS1tb2RhbC1vdmVybGF5XCI6ITAsc2Nyb2xsYWJsZTp0aGlzLnNjcm9sbGFibGUmJnRoaXMuaXNBdXRvSGVpZ2h0fX0sbW9kYWxDbGFzczpmdW5jdGlvbigpe3JldHVybltcInYtLW1vZGFsLWJveFwiLHRoaXMuY2xhc3Nlc119LG1vZGFsU3R5bGU6ZnVuY3Rpb24oKXtyZXR1cm57dG9wOnRoaXMucG9zaXRpb24udG9wK1wicHhcIixsZWZ0OnRoaXMucG9zaXRpb24ubGVmdCtcInB4XCIsd2lkdGg6dGhpcy50cnVlTW9kYWxXaWR0aCtcInB4XCIsaGVpZ2h0OnRoaXMuaXNBdXRvSGVpZ2h0P1wiYXV0b1wiOnRoaXMudHJ1ZU1vZGFsSGVpZ2h0K1wicHhcIn19fSx3YXRjaDp7dmlzaWJsZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzO2U/KHRoaXMudmlzaWJpbGl0eS5vdmVybGF5PSEwLHNldFRpbWVvdXQoZnVuY3Rpb24oKXt0LnZpc2liaWxpdHkubW9kYWw9ITAsdC4kbmV4dFRpY2soZnVuY3Rpb24oKXt0LmFkZERyYWdnYWJsZUxpc3RlbmVycygpLHQuY2FsbEFmdGVyRXZlbnQoITApfSl9LHRoaXMuZGVsYXkpKToodGhpcy52aXNpYmlsaXR5Lm1vZGFsPSExLHNldFRpbWVvdXQoZnVuY3Rpb24oKXt0LnZpc2liaWxpdHkub3ZlcmxheT0hMSx0LiRuZXh0VGljayhmdW5jdGlvbigpe3QucmVtb3ZlRHJhZ2dhYmxlTGlzdGVuZXJzKCksdC5jYWxsQWZ0ZXJFdmVudCghMSl9KX0sdGhpcy5kZWxheSkpfX0sbWV0aG9kczp7aGFuZGxlVG9nZ2xlRXZlbnQ6ZnVuY3Rpb24oZSx0LG4pe2lmKHRoaXMubmFtZT09PWUpe3ZhciBvPXZvaWQgMD09PXQ/IXRoaXMudmlzaWJsZTp0O3RoaXMudG9nZ2xlKG8sbil9fSxzZXRJbml0aWFsU2l6ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMubW9kYWwsdD12KHRoaXMud2lkdGgpLG49dih0aGlzLmhlaWdodCk7ZS53aWR0aD10LnZhbHVlLGUud2lkdGhUeXBlPXQudHlwZSxlLmhlaWdodD1uLnZhbHVlLGUuaGVpZ2h0VHlwZT1uLnR5cGV9LGhhbmRsZUVzY2FwZUtleVVwOmZ1bmN0aW9uKGUpezI3PT09ZS53aGljaCYmdGhpcy52aXNpYmxlJiZ0aGlzLiRtb2RhbC5oaWRlKHRoaXMubmFtZSl9LGhhbmRsZVdpbmRvd1Jlc2l6ZTpmdW5jdGlvbigpe3RoaXMud2luZG93LndpZHRoPXdpbmRvdy5pbm5lcldpZHRoLHRoaXMud2luZG93LmhlaWdodD13aW5kb3cuaW5uZXJIZWlnaHQsdGhpcy5lbnN1cmVTaGlmdEluV2luZG93Qm91bmRzKCl9LGNyZWF0ZU1vZGFsRXZlbnQ6ZnVuY3Rpb24oKXt2YXIgZT0wPGFyZ3VtZW50cy5sZW5ndGgmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e307cmV0dXJuIHIoZnVuY3Rpb24oaSl7Zm9yKHZhciBlPTE7ZTxhcmd1bWVudHMubGVuZ3RoO2UrKyl7dmFyIHI9bnVsbCE9YXJndW1lbnRzW2VdP2FyZ3VtZW50c1tlXTp7fSx0PU9iamVjdC5rZXlzKHIpO1wiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMmJih0PXQuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocikuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHIsZSkuZW51bWVyYWJsZX0pKSksdC5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciB0LG4sbzt0PWksbz1yW249ZV0sbiBpbiB0P09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LG4se3ZhbHVlOm8sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTp0W25dPW99KX1yZXR1cm4gaX0oe25hbWU6dGhpcy5uYW1lLHJlZjp0aGlzLiRyZWZzLm1vZGFsfSxlKSl9LGhhbmRsZU1vZGFsUmVzaXplOmZ1bmN0aW9uKGUpe3RoaXMubW9kYWwud2lkdGhUeXBlPVwicHhcIix0aGlzLm1vZGFsLndpZHRoPWUuc2l6ZS53aWR0aCx0aGlzLm1vZGFsLmhlaWdodFR5cGU9XCJweFwiLHRoaXMubW9kYWwuaGVpZ2h0PWUuc2l6ZS5oZWlnaHQ7dmFyIHQ9dGhpcy5tb2RhbC5zaXplO3RoaXMuJGVtaXQoXCJyZXNpemVcIix0aGlzLmNyZWF0ZU1vZGFsRXZlbnQoe3NpemU6dH0pKX0sdG9nZ2xlOmZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5yZXNldCxvPXRoaXMuc2Nyb2xsYWJsZSxpPXRoaXMudmlzaWJsZTtpZihpIT09ZSl7dmFyIHI9aT9cImJlZm9yZS1jbG9zZVwiOlwiYmVmb3JlLW9wZW5cIjtcImJlZm9yZS1vcGVuXCI9PT1yPyhcInVuZGVmaW5lZFwiIT10eXBlb2YgZG9jdW1lbnQmJmRvY3VtZW50LmFjdGl2ZUVsZW1lbnQmJlwiQk9EWVwiIT09ZG9jdW1lbnQuYWN0aXZlRWxlbWVudC50YWdOYW1lJiZkb2N1bWVudC5hY3RpdmVFbGVtZW50LmJsdXImJmRvY3VtZW50LmFjdGl2ZUVsZW1lbnQuYmx1cigpLG4mJih0aGlzLnNldEluaXRpYWxTaXplKCksdGhpcy5zaGlmdC5sZWZ0PTAsdGhpcy5zaGlmdC50b3A9MCksbyYmZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuYWRkKFwidi0tbW9kYWwtYmxvY2stc2Nyb2xsXCIpKTpvJiZkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5yZW1vdmUoXCJ2LS1tb2RhbC1ibG9jay1zY3JvbGxcIik7dmFyIGE9ITEscz10aGlzLmNyZWF0ZU1vZGFsRXZlbnQoe3N0b3A6ZnVuY3Rpb24oKXthPSEwfSxzdGF0ZTplLHBhcmFtczp0fSk7dGhpcy4kZW1pdChyLHMpLGF8fCh0aGlzLnZpc2libGU9ZSl9fSxnZXREcmFnZ2FibGVFbGVtZW50OmZ1bmN0aW9uKCl7dmFyIGU9XCJzdHJpbmdcIiE9dHlwZW9mIHRoaXMuZHJhZ2dhYmxlP1wiLnYtLW1vZGFsLWJveFwiOnRoaXMuZHJhZ2dhYmxlO3JldHVybiBlP3RoaXMuJHJlZnMub3ZlcmxheS5xdWVyeVNlbGVjdG9yKGUpOm51bGx9LGhhbmRsZUJhY2tncm91bmRDbGljazpmdW5jdGlvbigpe3RoaXMuY2xpY2tUb0Nsb3NlJiZ0aGlzLnRvZ2dsZSghMSl9LGNhbGxBZnRlckV2ZW50OmZ1bmN0aW9uKGUpe2U/dGhpcy5jb25uZWN0T2JzZXJ2ZXIoKTp0aGlzLmRpc2Nvbm5lY3RPYnNlcnZlcigpO3ZhciB0PWU/XCJvcGVuZWRcIjpcImNsb3NlZFwiLG49dGhpcy5jcmVhdGVNb2RhbEV2ZW50KHtzdGF0ZTplfSk7dGhpcy4kZW1pdCh0LG4pfSxhZGREcmFnZ2FibGVMaXN0ZW5lcnM6ZnVuY3Rpb24oKXt2YXIgcj10aGlzO2lmKHRoaXMuZHJhZ2dhYmxlKXt2YXIgZT10aGlzLmdldERyYWdnYWJsZUVsZW1lbnQoKTtpZihlKXt2YXIgYT0wLHM9MCxsPTAsZD0wLHU9ZnVuY3Rpb24oZSl7cmV0dXJuIGUudG91Y2hlcyYmMDxlLnRvdWNoZXMubGVuZ3RoP2UudG91Y2hlc1swXTplfSx0PWZ1bmN0aW9uKGUpe3ZhciB0PWUudGFyZ2V0O2lmKCF0fHxcIklOUFVUXCIhPT10Lm5vZGVOYW1lKXt2YXIgbj11KGUpLG89bi5jbGllbnRYLGk9bi5jbGllbnRZO2RvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZW1vdmVcIixjKSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwidG91Y2htb3ZlXCIsYyksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNldXBcIixoKSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwidG91Y2hlbmRcIixoKSxhPW8scz1pLGw9ci5zaGlmdC5sZWZ0LGQ9ci5zaGlmdC50b3B9fSxjPWZ1bmN0aW9uKGUpe3ZhciB0PXUoZSksbj10LmNsaWVudFgsbz10LmNsaWVudFk7ci5zaGlmdC5sZWZ0PWwrbi1hLHIuc2hpZnQudG9wPWQrby1zLGUucHJldmVudERlZmF1bHQoKX0saD1mdW5jdGlvbiBlKHQpe3IuZW5zdXJlU2hpZnRJbldpbmRvd0JvdW5kcygpLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtb3VzZW1vdmVcIixjKSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwidG91Y2htb3ZlXCIsYyksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1vdXNldXBcIixlKSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwidG91Y2hlbmRcIixlKSx0LnByZXZlbnREZWZhdWx0KCl9O2UuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlZG93blwiLHQpLGUuYWRkRXZlbnRMaXN0ZW5lcihcInRvdWNoc3RhcnRcIix0KX19fSxyZW1vdmVEcmFnZ2FibGVMaXN0ZW5lcnM6ZnVuY3Rpb24oKXt9LHVwZGF0ZVJlbmRlcmVkSGVpZ2h0OmZ1bmN0aW9uKCl7dGhpcy4kcmVmcy5tb2RhbCYmKHRoaXMubW9kYWwucmVuZGVyZWRIZWlnaHQ9dGhpcy4kcmVmcy5tb2RhbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQpfSxjb25uZWN0T2JzZXJ2ZXI6ZnVuY3Rpb24oKXt0aGlzLm11dGF0aW9uT2JzZXJ2ZXImJnRoaXMubXV0YXRpb25PYnNlcnZlci5vYnNlcnZlKHRoaXMuJHJlZnMub3ZlcmxheSx7Y2hpbGRMaXN0OiEwLGF0dHJpYnV0ZXM6ITAsc3VidHJlZTohMH0pfSxkaXNjb25uZWN0T2JzZXJ2ZXI6ZnVuY3Rpb24oKXt0aGlzLm11dGF0aW9uT2JzZXJ2ZXImJnRoaXMubXV0YXRpb25PYnNlcnZlci5kaXNjb25uZWN0KCl9LGJlZm9yZVRyYW5zaXRpb25FbnRlcjpmdW5jdGlvbigpe3RoaXMuY29ubmVjdE9ic2VydmVyKCl9LGFmdGVyVHJhbnNpdGlvbkVudGVyOmZ1bmN0aW9uKCl7fSxhZnRlclRyYW5zaXRpb25MZWF2ZTpmdW5jdGlvbigpe30sZW5zdXJlU2hpZnRJbldpbmRvd0JvdW5kczpmdW5jdGlvbigpe3ZhciBlPXRoaXMud2luZG93LHQ9dGhpcy5zaGlmdCxuPXRoaXMucGl2b3RYLG89dGhpcy5waXZvdFksaT10aGlzLnRydWVNb2RhbFdpZHRoLHI9dGhpcy50cnVlTW9kYWxIZWlnaHQsYT1lLndpZHRoLWkscz1lLmhlaWdodC1yLGw9dC5sZWZ0K24qYSxkPXQudG9wK28qczt0aGlzLnNoaWZ0LmxlZnQtPWwtdSgwLGEsbCksdGhpcy5zaGlmdC50b3AtPWQtdSgwLHMsZCl9fX0sYj0obig3KSxsKGcsbyxbXSwhMSxudWxsLG51bGwsbnVsbCkpO2Iub3B0aW9ucy5fX2ZpbGU9XCJzcmMvTW9kYWwudnVlXCI7dmFyIHk9Yi5leHBvcnRzLHc9ZnVuY3Rpb24oKXt2YXIgbj10aGlzLGU9bi4kY3JlYXRlRWxlbWVudCxvPW4uX3NlbGYuX2N8fGU7cmV0dXJuIG8oXCJtb2RhbFwiLHthdHRyczp7bmFtZTpcImRpYWxvZ1wiLGhlaWdodDpcImF1dG9cIixjbGFzc2VzOltcInYtLW1vZGFsXCIsXCJ2dWUtZGlhbG9nXCIsdGhpcy5wYXJhbXMuY2xhc3NdLHdpZHRoOm4ud2lkdGgsXCJwaXZvdC15XCI6LjMsYWRhcHRpdmU6ITAsY2xpY2tUb0Nsb3NlOm4uY2xpY2tUb0Nsb3NlLHRyYW5zaXRpb246bi50cmFuc2l0aW9ufSxvbjp7XCJiZWZvcmUtb3BlblwiOm4uYmVmb3JlT3BlbmVkLFwiYmVmb3JlLWNsb3NlXCI6bi5iZWZvcmVDbG9zZWQsb3BlbmVkOmZ1bmN0aW9uKGUpe24uJGVtaXQoXCJvcGVuZWRcIixlKX0sY2xvc2VkOmZ1bmN0aW9uKGUpe24uJGVtaXQoXCJjbG9zZWRcIixlKX19fSxbbyhcImRpdlwiLHtzdGF0aWNDbGFzczpcImRpYWxvZy1jb250ZW50XCJ9LFtuLnBhcmFtcy50aXRsZT9vKFwiZGl2XCIse3N0YXRpY0NsYXNzOlwiZGlhbG9nLWMtdGl0bGVcIixkb21Qcm9wczp7aW5uZXJIVE1MOm4uX3Mobi5wYXJhbXMudGl0bGV8fFwiXCIpfX0pOm4uX2UoKSxuLl92KFwiIFwiKSxuLnBhcmFtcy5jb21wb25lbnQ/byhuLnBhcmFtcy5jb21wb25lbnQsbi5fYih7dGFnOlwiY29tcG9uZW50XCJ9LFwiY29tcG9uZW50XCIsbi5wYXJhbXMucHJvcHMsITEpKTpvKFwiZGl2XCIse3N0YXRpY0NsYXNzOlwiZGlhbG9nLWMtdGV4dFwiLGRvbVByb3BzOntpbm5lckhUTUw6bi5fcyhuLnBhcmFtcy50ZXh0fHxcIlwiKX19KV0sMSksbi5fdihcIiBcIiksbi5idXR0b25zP28oXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJ2dWUtZGlhbG9nLWJ1dHRvbnNcIn0sbi5fbChuLmJ1dHRvbnMsZnVuY3Rpb24oZSx0KXtyZXR1cm4gbyhcImJ1dHRvblwiLHtrZXk6dCxjbGFzczplLmNsYXNzfHxcInZ1ZS1kaWFsb2ctYnV0dG9uXCIsc3R5bGU6bi5idXR0b25TdHlsZSxhdHRyczp7dHlwZTpcImJ1dHRvblwifSxkb21Qcm9wczp7aW5uZXJIVE1MOm4uX3MoZS50aXRsZSl9LG9uOntjbGljazpmdW5jdGlvbihlKXtlLnN0b3BQcm9wYWdhdGlvbigpLG4uY2xpY2sodCxlKX19fSxbbi5fdihcIlxcbiAgICAgIFwiK24uX3MoZS50aXRsZSkrXCJcXG4gICAgXCIpXSl9KSk6byhcImRpdlwiLHtzdGF0aWNDbGFzczpcInZ1ZS1kaWFsb2ctYnV0dG9ucy1ub25lXCJ9KV0pfTt3Ll93aXRoU3RyaXBwZWQ9ITA7dmFyIHg9e25hbWU6XCJWdWVKc0RpYWxvZ1wiLHByb3BzOnt3aWR0aDp7dHlwZTpbTnVtYmVyLFN0cmluZ10sZGVmYXVsdDo0MDB9LGNsaWNrVG9DbG9zZTp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITB9LHRyYW5zaXRpb246e3R5cGU6U3RyaW5nLGRlZmF1bHQ6XCJmYWRlXCJ9fSxkYXRhOmZ1bmN0aW9uKCl7cmV0dXJue3BhcmFtczp7fSxkZWZhdWx0QnV0dG9uczpbe3RpdGxlOlwiQ0xPU0VcIn1dfX0sY29tcHV0ZWQ6e2J1dHRvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wYXJhbXMuYnV0dG9uc3x8dGhpcy5kZWZhdWx0QnV0dG9uc30sYnV0dG9uU3R5bGU6ZnVuY3Rpb24oKXtyZXR1cm57ZmxleDpcIjEgMSBcIi5jb25jYXQoMTAwL3RoaXMuYnV0dG9ucy5sZW5ndGgsXCIlXCIpfX19LG1ldGhvZHM6e2JlZm9yZU9wZW5lZDpmdW5jdGlvbihlKXt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcImtleXVwXCIsdGhpcy5vbktleVVwKSx0aGlzLnBhcmFtcz1lLnBhcmFtc3x8e30sdGhpcy4kZW1pdChcImJlZm9yZS1vcGVuZWRcIixlKX0sYmVmb3JlQ2xvc2VkOmZ1bmN0aW9uKGUpe3dpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5dXBcIix0aGlzLm9uS2V5VXApLHRoaXMucGFyYW1zPXt9LHRoaXMuJGVtaXQoXCJiZWZvcmUtY2xvc2VkXCIsZSl9LGNsaWNrOmZ1bmN0aW9uKGUsdCl7dmFyIG49Mjxhcmd1bWVudHMubGVuZ3RoJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOlwiY2xpY2tcIixvPXRoaXMuYnV0dG9uc1tlXTtvJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBvLmhhbmRsZXI/by5oYW5kbGVyKGUsdCx7c291cmNlOm59KTp0aGlzLiRtb2RhbC5oaWRlKFwiZGlhbG9nXCIpfSxvbktleVVwOmZ1bmN0aW9uKGUpe2lmKDEzPT09ZS53aGljaCYmMDx0aGlzLmJ1dHRvbnMubGVuZ3RoKXt2YXIgdD0xPT09dGhpcy5idXR0b25zLmxlbmd0aD8wOnRoaXMuYnV0dG9ucy5maW5kSW5kZXgoZnVuY3Rpb24oZSl7cmV0dXJuIGUuZGVmYXVsdH0pOy0xIT09dCYmdGhpcy5jbGljayh0LGUsXCJrZXlwcmVzc1wiKX19fX0sXz0obig5KSxsKHgsdyxbXSwhMSxudWxsLG51bGwsbnVsbCkpO18ub3B0aW9ucy5fX2ZpbGU9XCJzcmMvRGlhbG9nLnZ1ZVwiO3ZhciBFPV8uZXhwb3J0cyxTPWZ1bmN0aW9uKCl7dmFyIG49dGhpcyxlPW4uJGNyZWF0ZUVsZW1lbnQsbz1uLl9zZWxmLl9jfHxlO3JldHVybiBvKFwiZGl2XCIse2F0dHJzOntpZDpcIm1vZGFscy1jb250YWluZXJcIn19LG4uX2wobi5tb2RhbHMsZnVuY3Rpb24odCl7cmV0dXJuIG8oXCJtb2RhbFwiLG4uX2cobi5fYih7a2V5OnQuaWQsb246e2Nsb3NlZDpmdW5jdGlvbihlKXtuLnJlbW92ZSh0LmlkKX19fSxcIm1vZGFsXCIsdC5tb2RhbEF0dHJzLCExKSx0Lm1vZGFsTGlzdGVuZXJzKSxbbyh0LmNvbXBvbmVudCxuLl9nKG4uX2Ioe3RhZzpcImNvbXBvbmVudFwiLG9uOntjbG9zZTpmdW5jdGlvbihlKXtuLiRtb2RhbC5oaWRlKHQubW9kYWxBdHRycy5uYW1lKX19fSxcImNvbXBvbmVudFwiLHQuY29tcG9uZW50QXR0cnMsITEpLG4uJGxpc3RlbmVycykpXSwxKX0pKX07Uy5fd2l0aFN0cmlwcGVkPSEwO3ZhciBPPWwoe2RhdGE6ZnVuY3Rpb24oKXtyZXR1cm57bW9kYWxzOltdfX0sY3JlYXRlZDpmdW5jdGlvbigpe3RoaXMuJHJvb3QuX2R5bmFtaWNDb250YWluZXI9dGhpc30sbWV0aG9kczp7YWRkOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMsbj0xPGFyZ3VtZW50cy5sZW5ndGgmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e30sbz0yPGFyZ3VtZW50cy5sZW5ndGgmJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06e30saT0zPGFyZ3VtZW50cy5sZW5ndGgmJnZvaWQgMCE9PWFyZ3VtZW50c1szXT9hcmd1bWVudHNbM106e30scj1zKCksYT1vLm5hbWV8fFwiX2R5bmFtaWNfbW9kYWxfXCIrcjt0aGlzLm1vZGFscy5wdXNoKHtpZDpyLG1vZGFsQXR0cnM6ZnVuY3Rpb24oaSl7Zm9yKHZhciBlPTE7ZTxhcmd1bWVudHMubGVuZ3RoO2UrKyl7dmFyIHI9bnVsbCE9YXJndW1lbnRzW2VdP2FyZ3VtZW50c1tlXTp7fSx0PU9iamVjdC5rZXlzKHIpO1wiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMmJih0PXQuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocikuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHIsZSkuZW51bWVyYWJsZX0pKSksdC5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciB0LG4sbzt0PWksbz1yW249ZV0sbiBpbiB0P09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LG4se3ZhbHVlOm8sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTp0W25dPW99KX1yZXR1cm4gaX0oe30sbyx7bmFtZTphfSksbW9kYWxMaXN0ZW5lcnM6aSxjb21wb25lbnQ6ZSxjb21wb25lbnRBdHRyczpufSksdGhpcy4kbmV4dFRpY2soZnVuY3Rpb24oKXt0LiRtb2RhbC5zaG93KGEpfSl9LHJlbW92ZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLm1vZGFscy5maW5kSW5kZXgoZnVuY3Rpb24oZSl7cmV0dXJuIGUuaWQ9PT10fSk7LTEhPT1lJiZ0aGlzLm1vZGFscy5zcGxpY2UoZSwxKX19fSxTLFtdLCExLG51bGwsbnVsbCxudWxsKTtPLm9wdGlvbnMuX19maWxlPVwic3JjL01vZGFsc0NvbnRhaW5lci52dWVcIjt2YXIgaz1PLmV4cG9ydHM7ZnVuY3Rpb24gQyhlKXtyZXR1cm4oQz1cImZ1bmN0aW9uXCI9PXR5cGVvZiBTeW1ib2wmJlwic3ltYm9sXCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT9cInN5bWJvbFwiOnR5cGVvZiBlfSkoZSl9bi5kKHQsXCJnZXRNb2RhbHNDb250YWluZXJcIixmdW5jdGlvbigpe3JldHVybiBUfSk7dmFyIFQ9ZnVuY3Rpb24oZSx0LG4pe2lmKCFuLl9keW5hbWljQ29udGFpbmVyJiZ0LmluamVjdE1vZGFsc0NvbnRhaW5lcil7dmFyIG89KGk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKSxkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGkpLGkpO25ldyBlKHtwYXJlbnQ6bixyZW5kZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGUoayl9fSkuJG1vdW50KG8pfXZhciBpO3JldHVybiBuLl9keW5hbWljQ29udGFpbmVyfSwkPXtpbnN0YWxsOmZ1bmN0aW9uKGEpe3ZhciBzPTE8YXJndW1lbnRzLmxlbmd0aCYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fTtpZighdGhpcy5pbnN0YWxsZWQpe3RoaXMuaW5zdGFsbGVkPSEwLHRoaXMuZXZlbnQ9bmV3IGEsdGhpcy5yb290SW5zdGFuY2U9bnVsbDt2YXIgZT1zLmNvbXBvbmVudE5hbWV8fFwiTW9kYWxcIixsPXMuZHluYW1pY0RlZmF1bHRzfHx7fSxpPWZ1bmN0aW9uKGUsdCxuLG8pe3ZhciBpPW4mJm4ucm9vdD9uLnJvb3Q6JC5yb290SW5zdGFuY2Uscj1UKGEscyxpKTtyP3IuYWRkKGUsZnVuY3Rpb24oaSl7Zm9yKHZhciBlPTE7ZTxhcmd1bWVudHMubGVuZ3RoO2UrKyl7dmFyIHI9bnVsbCE9YXJndW1lbnRzW2VdP2FyZ3VtZW50c1tlXTp7fSx0PU9iamVjdC5rZXlzKHIpO1wiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMmJih0PXQuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocikuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHIsZSkuZW51bWVyYWJsZX0pKSksdC5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciB0LG4sbzt0PWksbz1yW249ZV0sbiBpbiB0P09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LG4se3ZhbHVlOm8sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTp0W25dPW99KX1yZXR1cm4gaX0oe30sbCx0KSxuLG8pOmNvbnNvbGUud2FybihcIlt2dWUtanMtbW9kYWxdIEluIG9yZGVyIHRvIHJlbmRlciBkeW5hbWljIG1vZGFscywgYSA8bW9kYWxzLWNvbnRhaW5lcj4gY29tcG9uZW50IG11c3QgYmUgcHJlc2VudCBvbiB0aGUgcGFnZS5cIil9O2EucHJvdG90eXBlLiRtb2RhbD17c2hvdzpmdW5jdGlvbihlKXtmb3IodmFyIHQ9YXJndW1lbnRzLmxlbmd0aCxuPW5ldyBBcnJheSgxPHQ/dC0xOjApLG89MTtvPHQ7bysrKW5bby0xXT1hcmd1bWVudHNbb107c3dpdGNoKEMoZSkpe2Nhc2VcInN0cmluZ1wiOnJldHVybiBmdW5jdGlvbihlLHQpeyQuZXZlbnQuJGVtaXQoXCJ0b2dnbGVcIixlLCEwLHQpfS5hcHBseSh2b2lkIDAsW2VdLmNvbmNhdChuKSk7Y2FzZVwib2JqZWN0XCI6cmV0dXJuIHMuZHluYW1pYz9pLmFwcGx5KHZvaWQgMCxbZV0uY29uY2F0KG4pKTpjb25zb2xlLndhcm4oXCJbdnVlLWpzLW1vZGFsXSAkbW9kYWwoKSByZWNlaXZlZCBvYmplY3QgYXMgYSBmaXJzdCBhcmd1bWVudCwgYnV0IGR5bmFtaWMgbW9kYWxzIGFyZSBzd2l0Y2hlZCBvZmYuIGh0dHBzOi8vZ2l0aHViLmNvbS9ldXZsL3Z1ZS1qcy1tb2RhbC8jZHluYW1pYy1tb2RhbHNcIil9fSxoaWRlOmZ1bmN0aW9uKGUsdCl7JC5ldmVudC4kZW1pdChcInRvZ2dsZVwiLGUsITEsdCl9LHRvZ2dsZTpmdW5jdGlvbihlLHQpeyQuZXZlbnQuJGVtaXQoXCJ0b2dnbGVcIixlLHZvaWQgMCx0KX19LGEuY29tcG9uZW50KGUseSkscy5kaWFsb2cmJmEuY29tcG9uZW50KFwiVkRpYWxvZ1wiLEUpLHMuZHluYW1pYyYmKGEuY29tcG9uZW50KFwiTW9kYWxzQ29udGFpbmVyXCIsayksYS5taXhpbih7YmVmb3JlTW91bnQ6ZnVuY3Rpb24oKXtudWxsPT09JC5yb290SW5zdGFuY2UmJigkLnJvb3RJbnN0YW5jZT10aGlzLiRyb290KX19KSl9fX0sej10LmRlZmF1bHQ9JH1dKX0pOyIsIihmdW5jdGlvbiB3ZWJwYWNrVW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbihyb290LCBmYWN0b3J5KSB7XG5cdGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0Jylcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZShcInZ1ZVwiKSk7XG5cdGVsc2UgaWYodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKVxuXHRcdGRlZmluZShbXCJ2dWVcIl0sIGZhY3RvcnkpO1xuXHRlbHNlIGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jylcblx0XHRleHBvcnRzW1widnVlLW5vdGlmaWNhdGlvblwiXSA9IGZhY3RvcnkocmVxdWlyZShcInZ1ZVwiKSk7XG5cdGVsc2Vcblx0XHRyb290W1widnVlLW5vdGlmaWNhdGlvblwiXSA9IGZhY3Rvcnkocm9vdFtcInZ1ZVwiXSk7XG59KSh0aGlzLCBmdW5jdGlvbihfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFXzIwX18pIHtcbnJldHVybiAvKioqKioqLyAoZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwXG4vKioqKioqLyBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbi8qKioqKiovIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4vKioqKioqLyBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4vKioqKioqLyBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbi8qKioqKiovIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuLyoqKioqKi8gXHRcdH1cbi8qKioqKiovIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuLyoqKioqKi8gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbi8qKioqKiovIFx0XHRcdGk6IG1vZHVsZUlkLFxuLyoqKioqKi8gXHRcdFx0bDogZmFsc2UsXG4vKioqKioqLyBcdFx0XHRleHBvcnRzOiB7fVxuLyoqKioqKi8gXHRcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuLyoqKioqKi8gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4vKioqKioqLyBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuLyoqKioqKi8gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbi8qKioqKiovIFx0fVxuLyoqKioqKi9cbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gaWRlbnRpdHkgZnVuY3Rpb24gZm9yIGNhbGxpbmcgaGFybW9ueSBpbXBvcnRzIHdpdGggdGhlIGNvcnJlY3QgY29udGV4dFxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmkgPSBmdW5jdGlvbih2YWx1ZSkgeyByZXR1cm4gdmFsdWU7IH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4vKioqKioqLyBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuLyoqKioqKi8gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHtcbi8qKioqKiovIFx0XHRcdFx0Y29uZmlndXJhYmxlOiBmYWxzZSxcbi8qKioqKiovIFx0XHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcbi8qKioqKiovIFx0XHRcdFx0Z2V0OiBnZXR0ZXJcbi8qKioqKiovIFx0XHRcdH0pO1xuLyoqKioqKi8gXHRcdH1cbi8qKioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuLyoqKioqKi8gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuLyoqKioqKi8gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbi8qKioqKiovIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4vKioqKioqLyBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuLyoqKioqKi8gXHRcdHJldHVybiBnZXR0ZXI7XG4vKioqKioqLyBcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCIvZGlzdC9cIjtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuLyoqKioqKi8gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSAyKTtcbi8qKioqKiovIH0pXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyoqKioqKi8gKFtcbi8qIDAgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxuLy8gdGhpcyBtb2R1bGUgaXMgYSBydW50aW1lIHV0aWxpdHkgZm9yIGNsZWFuZXIgY29tcG9uZW50IG1vZHVsZSBvdXRwdXQgYW5kIHdpbGxcbi8vIGJlIGluY2x1ZGVkIGluIHRoZSBmaW5hbCB3ZWJwYWNrIHVzZXIgYnVuZGxlXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gbm9ybWFsaXplQ29tcG9uZW50IChcbiAgcmF3U2NyaXB0RXhwb3J0cyxcbiAgY29tcGlsZWRUZW1wbGF0ZSxcbiAgc2NvcGVJZCxcbiAgY3NzTW9kdWxlc1xuKSB7XG4gIHZhciBlc01vZHVsZVxuICB2YXIgc2NyaXB0RXhwb3J0cyA9IHJhd1NjcmlwdEV4cG9ydHMgPSByYXdTY3JpcHRFeHBvcnRzIHx8IHt9XG5cbiAgLy8gRVM2IG1vZHVsZXMgaW50ZXJvcFxuICB2YXIgdHlwZSA9IHR5cGVvZiByYXdTY3JpcHRFeHBvcnRzLmRlZmF1bHRcbiAgaWYgKHR5cGUgPT09ICdvYmplY3QnIHx8IHR5cGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICBlc01vZHVsZSA9IHJhd1NjcmlwdEV4cG9ydHNcbiAgICBzY3JpcHRFeHBvcnRzID0gcmF3U2NyaXB0RXhwb3J0cy5kZWZhdWx0XG4gIH1cblxuICAvLyBWdWUuZXh0ZW5kIGNvbnN0cnVjdG9yIGV4cG9ydCBpbnRlcm9wXG4gIHZhciBvcHRpb25zID0gdHlwZW9mIHNjcmlwdEV4cG9ydHMgPT09ICdmdW5jdGlvbidcbiAgICA/IHNjcmlwdEV4cG9ydHMub3B0aW9uc1xuICAgIDogc2NyaXB0RXhwb3J0c1xuXG4gIC8vIHJlbmRlciBmdW5jdGlvbnNcbiAgaWYgKGNvbXBpbGVkVGVtcGxhdGUpIHtcbiAgICBvcHRpb25zLnJlbmRlciA9IGNvbXBpbGVkVGVtcGxhdGUucmVuZGVyXG4gICAgb3B0aW9ucy5zdGF0aWNSZW5kZXJGbnMgPSBjb21waWxlZFRlbXBsYXRlLnN0YXRpY1JlbmRlckZuc1xuICB9XG5cbiAgLy8gc2NvcGVkSWRcbiAgaWYgKHNjb3BlSWQpIHtcbiAgICBvcHRpb25zLl9zY29wZUlkID0gc2NvcGVJZFxuICB9XG5cbiAgLy8gaW5qZWN0IGNzc01vZHVsZXNcbiAgaWYgKGNzc01vZHVsZXMpIHtcbiAgICB2YXIgY29tcHV0ZWQgPSBPYmplY3QuY3JlYXRlKG9wdGlvbnMuY29tcHV0ZWQgfHwgbnVsbClcbiAgICBPYmplY3Qua2V5cyhjc3NNb2R1bGVzKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIHZhciBtb2R1bGUgPSBjc3NNb2R1bGVzW2tleV1cbiAgICAgIGNvbXB1dGVkW2tleV0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiBtb2R1bGUgfVxuICAgIH0pXG4gICAgb3B0aW9ucy5jb21wdXRlZCA9IGNvbXB1dGVkXG4gIH1cblxuICByZXR1cm4ge1xuICAgIGVzTW9kdWxlOiBlc01vZHVsZSxcbiAgICBleHBvcnRzOiBzY3JpcHRFeHBvcnRzLFxuICAgIG9wdGlvbnM6IG9wdGlvbnNcbiAgfVxufVxuXG5cbi8qKiovIH0pLFxuLyogMSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJhXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gZXZlbnRzOyB9KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfdnVlX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIwKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfdnVlX19fZGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18ubihfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfdnVlX18pO1xuXG5cbnZhciBldmVudHMgPSBuZXcgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3Z1ZV9fX2RlZmF1bHQuYSh7IG5hbWU6ICd2dWUtbm90aWZpY2F0aW9uJyB9KTtcblxuLyoqKi8gfSksXG4vKiAyICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KF9fd2VicGFja19leHBvcnRzX18sIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fTm90aWZpY2F0aW9uc192dWVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19Ob3RpZmljYXRpb25zX3Z1ZV9fX2RlZmF1bHQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLm4oX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19Ob3RpZmljYXRpb25zX3Z1ZV9fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2V2ZW50c19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxKTtcbnZhciBfdHlwZW9mID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIgPyBmdW5jdGlvbiAob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9IDogZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTtcblxuXG5cblxudmFyIE5vdGlmeSA9IHtcbiAgaW5zdGFsbDogZnVuY3Rpb24gaW5zdGFsbChWdWUpIHtcbiAgICB2YXIgYXJncyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG5cbiAgICBpZiAodGhpcy5pbnN0YWxsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmluc3RhbGxlZCA9IHRydWU7XG4gICAgdGhpcy5wYXJhbXMgPSBhcmdzO1xuXG4gICAgVnVlLmNvbXBvbmVudChhcmdzLmNvbXBvbmVudE5hbWUgfHwgJ25vdGlmaWNhdGlvbnMnLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX05vdGlmaWNhdGlvbnNfdnVlX19fZGVmYXVsdC5hKTtcblxuICAgIHZhciBub3RpZnkgPSBmdW5jdGlvbiBub3RpZnkocGFyYW1zKSB7XG4gICAgICBpZiAodHlwZW9mIHBhcmFtcyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcGFyYW1zID0geyB0aXRsZTogJycsIHRleHQ6IHBhcmFtcyB9O1xuICAgICAgfVxuXG4gICAgICBpZiAoKHR5cGVvZiBwYXJhbXMgPT09ICd1bmRlZmluZWQnID8gJ3VuZGVmaW5lZCcgOiBfdHlwZW9mKHBhcmFtcykpID09PSAnb2JqZWN0Jykge1xuICAgICAgICBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2V2ZW50c19fW1wiYVwiIC8qIGV2ZW50cyAqL10uJGVtaXQoJ2FkZCcsIHBhcmFtcyk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIG5vdGlmeS5jbG9zZSA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19ldmVudHNfX1tcImFcIiAvKiBldmVudHMgKi9dLiRlbWl0KCdjbG9zZScsIGlkKTtcbiAgICB9O1xuXG4gICAgdmFyIG5hbWUgPSBhcmdzLm5hbWUgfHwgJ25vdGlmeSc7XG5cbiAgICBWdWUucHJvdG90eXBlWyckJyArIG5hbWVdID0gbm90aWZ5O1xuICAgIFZ1ZVtuYW1lXSA9IG5vdGlmeTtcbiAgfVxufTtcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiZGVmYXVsdFwiXSA9IChOb3RpZnkpO1xuXG4vKioqLyB9KSxcbi8qIDMgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXG4vKiBzdHlsZXMgKi9cbl9fd2VicGFja19yZXF1aXJlX18oMTcpXG5cbnZhciBDb21wb25lbnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApKFxuICAvKiBzY3JpcHQgKi9cbiAgX193ZWJwYWNrX3JlcXVpcmVfXyg1KSxcbiAgLyogdGVtcGxhdGUgKi9cbiAgX193ZWJwYWNrX3JlcXVpcmVfXygxNSksXG4gIC8qIHNjb3BlSWQgKi9cbiAgbnVsbCxcbiAgLyogY3NzTW9kdWxlcyAqL1xuICBudWxsXG4pXG5cbm1vZHVsZS5leHBvcnRzID0gQ29tcG9uZW50LmV4cG9ydHNcblxuXG4vKioqLyB9KSxcbi8qIDQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5cblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiZGVmYXVsdFwiXSA9ICh7XG4gIG5hbWU6ICdDc3NHcm91cCcsXG4gIHByb3BzOiBbJ25hbWUnXVxufSk7XG5cbi8qKiovIH0pLFxuLyogNSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShfX3dlYnBhY2tfZXhwb3J0c19fLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2luZGV4X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fZXZlbnRzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fdXRpbF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX2RlZmF1bHRzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDcpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fVmVsb2NpdHlHcm91cF92dWVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTMpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fVmVsb2NpdHlHcm91cF92dWVfX19kZWZhdWx0ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fVmVsb2NpdHlHcm91cF92dWVfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19Dc3NHcm91cF92dWVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fQ3NzR3JvdXBfdnVlX19fZGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18ubihfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX0Nzc0dyb3VwX3Z1ZV9fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX3BhcnNlcl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4KTtcbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cblxuXG5cblxuXG5cblxuXG52YXIgU1RBVEUgPSB7XG4gIElETEU6IDAsXG4gIERFU1RST1lFRDogMlxufTtcblxudmFyIENvbXBvbmVudCA9IHtcbiAgbmFtZTogJ05vdGlmaWNhdGlvbnMnLFxuICBjb21wb25lbnRzOiB7XG4gICAgVmVsb2NpdHlHcm91cDogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19WZWxvY2l0eUdyb3VwX3Z1ZV9fX2RlZmF1bHQuYSxcbiAgICBDc3NHcm91cDogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19Dc3NHcm91cF92dWVfX19kZWZhdWx0LmFcbiAgfSxcbiAgcHJvcHM6IHtcbiAgICBncm91cDoge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJydcbiAgICB9LFxuXG4gICAgd2lkdGg6IHtcbiAgICAgIHR5cGU6IFtOdW1iZXIsIFN0cmluZ10sXG4gICAgICBkZWZhdWx0OiAzMDBcbiAgICB9LFxuXG4gICAgcmV2ZXJzZToge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSxcblxuICAgIHBvc2l0aW9uOiB7XG4gICAgICB0eXBlOiBbU3RyaW5nLCBBcnJheV0sXG4gICAgICBkZWZhdWx0OiBmdW5jdGlvbiBfZGVmYXVsdCgpIHtcbiAgICAgICAgcmV0dXJuIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fZGVmYXVsdHNfX1tcImFcIiAvKiBkZWZhdWx0ICovXS5wb3NpdGlvbjtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY2xhc3Nlczoge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJ3Z1ZS1ub3RpZmljYXRpb24nXG4gICAgfSxcblxuICAgIGFuaW1hdGlvblR5cGU6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICdjc3MnLFxuICAgICAgdmFsaWRhdG9yOiBmdW5jdGlvbiB2YWxpZGF0b3IodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlID09PSAnY3NzJyB8fCB2YWx1ZSA9PT0gJ3ZlbG9jaXR5JztcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYW5pbWF0aW9uOiB7XG4gICAgICB0eXBlOiBPYmplY3QsXG4gICAgICBkZWZhdWx0OiBmdW5jdGlvbiBfZGVmYXVsdCgpIHtcbiAgICAgICAgcmV0dXJuIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fZGVmYXVsdHNfX1tcImFcIiAvKiBkZWZhdWx0ICovXS52ZWxvY2l0eUFuaW1hdGlvbjtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYW5pbWF0aW9uTmFtZToge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19kZWZhdWx0c19fW1wiYVwiIC8qIGRlZmF1bHQgKi9dLmNzc0FuaW1hdGlvblxuICAgIH0sXG5cbiAgICBzcGVlZDoge1xuICAgICAgdHlwZTogTnVtYmVyLFxuICAgICAgZGVmYXVsdDogMzAwXG4gICAgfSxcblxuICAgIGNvb2xkb3duOiB7XG4gICAgICB0eXBlOiBOdW1iZXIsXG4gICAgICBkZWZhdWx0OiAwXG4gICAgfSxcblxuICAgIGR1cmF0aW9uOiB7XG4gICAgICB0eXBlOiBOdW1iZXIsXG4gICAgICBkZWZhdWx0OiAzMDAwXG4gICAgfSxcblxuICAgIGRlbGF5OiB7XG4gICAgICB0eXBlOiBOdW1iZXIsXG4gICAgICBkZWZhdWx0OiAwXG4gICAgfSxcblxuICAgIG1heDoge1xuICAgICAgdHlwZTogTnVtYmVyLFxuICAgICAgZGVmYXVsdDogSW5maW5pdHlcbiAgICB9LFxuXG4gICAgaWdub3JlRHVwbGljYXRlczoge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSxcblxuICAgIGNsb3NlT25DbGljazoge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICB9XG4gIH0sXG4gIGRhdGE6IGZ1bmN0aW9uIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGxpc3Q6IFtdLFxuICAgICAgdmVsb2NpdHk6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9faW5kZXhfX1tcImRlZmF1bHRcIl0ucGFyYW1zLnZlbG9jaXR5XG4gICAgfTtcbiAgfSxcbiAgbW91bnRlZDogZnVuY3Rpb24gbW91bnRlZCgpIHtcbiAgICBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2V2ZW50c19fW1wiYVwiIC8qIGV2ZW50cyAqL10uJG9uKCdhZGQnLCB0aGlzLmFkZEl0ZW0pO1xuICAgIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fZXZlbnRzX19bXCJhXCIgLyogZXZlbnRzICovXS4kb24oJ2Nsb3NlJywgdGhpcy5jbG9zZUl0ZW0pO1xuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgYWN0dWFsV2lkdGg6IGZ1bmN0aW9uIGFjdHVhbFdpZHRoKCkge1xuICAgICAgcmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18uaShfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX3BhcnNlcl9fW1wiYVwiIC8qIGRlZmF1bHQgKi9dKSh0aGlzLndpZHRoKTtcbiAgICB9LFxuICAgIGlzVkE6IGZ1bmN0aW9uIGlzVkEoKSB7XG4gICAgICByZXR1cm4gdGhpcy5hbmltYXRpb25UeXBlID09PSAndmVsb2NpdHknO1xuICAgIH0sXG4gICAgY29tcG9uZW50TmFtZTogZnVuY3Rpb24gY29tcG9uZW50TmFtZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmlzVkEgPyAnVmVsb2NpdHlHcm91cCcgOiAnQ3NzR3JvdXAnO1xuICAgIH0sXG4gICAgc3R5bGVzOiBmdW5jdGlvbiBzdHlsZXMoKSB7XG4gICAgICB2YXIgX2xpc3RUb0RpcmVjdGlvbiA9IF9fd2VicGFja19yZXF1aXJlX18uaShfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX3V0aWxfX1tcImFcIiAvKiBsaXN0VG9EaXJlY3Rpb24gKi9dKSh0aGlzLnBvc2l0aW9uKSxcbiAgICAgICAgICB4ID0gX2xpc3RUb0RpcmVjdGlvbi54LFxuICAgICAgICAgIHkgPSBfbGlzdFRvRGlyZWN0aW9uLnk7XG5cbiAgICAgIHZhciB3aWR0aCA9IHRoaXMuYWN0dWFsV2lkdGgudmFsdWU7XG4gICAgICB2YXIgc3VmZml4ID0gdGhpcy5hY3R1YWxXaWR0aC50eXBlO1xuXG4gICAgICB2YXIgc3R5bGVzID0gX2RlZmluZVByb3BlcnR5KHtcbiAgICAgICAgd2lkdGg6IHdpZHRoICsgc3VmZml4XG4gICAgICB9LCB5LCAnMHB4Jyk7XG5cbiAgICAgIGlmICh4ID09PSAnY2VudGVyJykge1xuICAgICAgICBzdHlsZXNbJ2xlZnQnXSA9ICdjYWxjKDUwJSAtICcgKyB3aWR0aCAvIDIgKyBzdWZmaXggKyAnKSc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdHlsZXNbeF0gPSAnMHB4JztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHN0eWxlcztcbiAgICB9LFxuICAgIGFjdGl2ZTogZnVuY3Rpb24gYWN0aXZlKCkge1xuICAgICAgcmV0dXJuIHRoaXMubGlzdC5maWx0ZXIoZnVuY3Rpb24gKHYpIHtcbiAgICAgICAgcmV0dXJuIHYuc3RhdGUgIT09IFNUQVRFLkRFU1RST1lFRDtcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgYm90VG9Ub3A6IGZ1bmN0aW9uIGJvdFRvVG9wKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc3R5bGVzLmhhc093blByb3BlcnR5KCdib3R0b20nKTtcbiAgICB9XG4gIH0sXG4gIG1ldGhvZHM6IHtcbiAgICBkZXN0cm95SWZOZWNlc3Nhcnk6IGZ1bmN0aW9uIGRlc3Ryb3lJZk5lY2Vzc2FyeShpdGVtKSB7XG4gICAgICBpZiAodGhpcy5jbG9zZU9uQ2xpY2spIHtcbiAgICAgICAgdGhpcy5kZXN0cm95KGl0ZW0pO1xuICAgICAgfVxuICAgIH0sXG4gICAgYWRkSXRlbTogZnVuY3Rpb24gYWRkSXRlbShldmVudCkge1xuICAgICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgICAgZXZlbnQuZ3JvdXAgPSBldmVudC5ncm91cCB8fCAnJztcblxuICAgICAgaWYgKHRoaXMuZ3JvdXAgIT09IGV2ZW50Lmdyb3VwKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKGV2ZW50LmNsZWFuIHx8IGV2ZW50LmNsZWFyKSB7XG4gICAgICAgIHRoaXMuZGVzdHJveUFsbCgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciBkdXJhdGlvbiA9IHR5cGVvZiBldmVudC5kdXJhdGlvbiA9PT0gJ251bWJlcicgPyBldmVudC5kdXJhdGlvbiA6IHRoaXMuZHVyYXRpb247XG5cbiAgICAgIHZhciBzcGVlZCA9IHR5cGVvZiBldmVudC5zcGVlZCA9PT0gJ251bWJlcicgPyBldmVudC5zcGVlZCA6IHRoaXMuc3BlZWQ7XG5cbiAgICAgIHZhciBpZ25vcmVEdXBsaWNhdGVzID0gdHlwZW9mIGV2ZW50Lmlnbm9yZUR1cGxpY2F0ZXMgPT09ICdib29sZWFuJyA/IGV2ZW50Lmlnbm9yZUR1cGxpY2F0ZXMgOiB0aGlzLmlnbm9yZUR1cGxpY2F0ZXM7XG5cbiAgICAgIHZhciB0aXRsZSA9IGV2ZW50LnRpdGxlLFxuICAgICAgICAgIHRleHQgPSBldmVudC50ZXh0LFxuICAgICAgICAgIHR5cGUgPSBldmVudC50eXBlLFxuICAgICAgICAgIGRhdGEgPSBldmVudC5kYXRhLFxuICAgICAgICAgIGlkID0gZXZlbnQuaWQ7XG5cblxuICAgICAgdmFyIGl0ZW0gPSB7XG4gICAgICAgIGlkOiBpZCB8fCBfX3dlYnBhY2tfcmVxdWlyZV9fLmkoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX191dGlsX19bXCJiXCIgLyogSWQgKi9dKSgpLFxuICAgICAgICB0aXRsZTogdGl0bGUsXG4gICAgICAgIHRleHQ6IHRleHQsXG4gICAgICAgIHR5cGU6IHR5cGUsXG4gICAgICAgIHN0YXRlOiBTVEFURS5JRExFLFxuICAgICAgICBzcGVlZDogc3BlZWQsXG4gICAgICAgIGxlbmd0aDogZHVyYXRpb24gKyAyICogc3BlZWQsXG4gICAgICAgIGRhdGE6IGRhdGFcbiAgICAgIH07XG5cbiAgICAgIGlmIChkdXJhdGlvbiA+PSAwKSB7XG4gICAgICAgIGl0ZW0udGltZXIgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBfdGhpcy5kZXN0cm95KGl0ZW0pO1xuICAgICAgICB9LCBpdGVtLmxlbmd0aCk7XG4gICAgICB9XG5cbiAgICAgIHZhciBkaXJlY3Rpb24gPSB0aGlzLnJldmVyc2UgPyAhdGhpcy5ib3RUb1RvcCA6IHRoaXMuYm90VG9Ub3A7XG5cbiAgICAgIHZhciBpbmRleFRvRGVzdHJveSA9IC0xO1xuXG4gICAgICB2YXIgaXNEdXBsaWNhdGUgPSB0aGlzLmFjdGl2ZS5zb21lKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgIHJldHVybiBpdGVtLnRpdGxlID09PSBldmVudC50aXRsZSAmJiBpdGVtLnRleHQgPT09IGV2ZW50LnRleHQ7XG4gICAgICB9KTtcblxuICAgICAgdmFyIGNhbkFkZCA9IGlnbm9yZUR1cGxpY2F0ZXMgPyAhaXNEdXBsaWNhdGUgOiB0cnVlO1xuXG4gICAgICBpZiAoIWNhbkFkZCkgcmV0dXJuO1xuXG4gICAgICBpZiAoZGlyZWN0aW9uKSB7XG4gICAgICAgIHRoaXMubGlzdC5wdXNoKGl0ZW0pO1xuXG4gICAgICAgIGlmICh0aGlzLmFjdGl2ZS5sZW5ndGggPiB0aGlzLm1heCkge1xuICAgICAgICAgIGluZGV4VG9EZXN0cm95ID0gMDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5saXN0LnVuc2hpZnQoaXRlbSk7XG5cbiAgICAgICAgaWYgKHRoaXMuYWN0aXZlLmxlbmd0aCA+IHRoaXMubWF4KSB7XG4gICAgICAgICAgaW5kZXhUb0Rlc3Ryb3kgPSB0aGlzLmFjdGl2ZS5sZW5ndGggLSAxO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChpbmRleFRvRGVzdHJveSAhPT0gLTEpIHtcbiAgICAgICAgdGhpcy5kZXN0cm95KHRoaXMuYWN0aXZlW2luZGV4VG9EZXN0cm95XSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBjbG9zZUl0ZW06IGZ1bmN0aW9uIGNsb3NlSXRlbShpZCkge1xuICAgICAgdGhpcy5kZXN0cm95QnlJZChpZCk7XG4gICAgfSxcbiAgICBub3RpZnlDbGFzczogZnVuY3Rpb24gbm90aWZ5Q2xhc3MoaXRlbSkge1xuICAgICAgcmV0dXJuIFsndnVlLW5vdGlmaWNhdGlvbi10ZW1wbGF0ZScsIHRoaXMuY2xhc3NlcywgaXRlbS50eXBlXTtcbiAgICB9LFxuICAgIG5vdGlmeVdyYXBwZXJTdHlsZTogZnVuY3Rpb24gbm90aWZ5V3JhcHBlclN0eWxlKGl0ZW0pIHtcbiAgICAgIHJldHVybiB0aGlzLmlzVkEgPyBudWxsIDogeyB0cmFuc2l0aW9uOiAnYWxsICcgKyBpdGVtLnNwZWVkICsgJ21zJyB9O1xuICAgIH0sXG4gICAgZGVzdHJveTogZnVuY3Rpb24gZGVzdHJveShpdGVtKSB7XG4gICAgICBjbGVhclRpbWVvdXQoaXRlbS50aW1lcik7XG4gICAgICBpdGVtLnN0YXRlID0gU1RBVEUuREVTVFJPWUVEO1xuXG4gICAgICBpZiAoIXRoaXMuaXNWQSkge1xuICAgICAgICB0aGlzLmNsZWFuKCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBkZXN0cm95QnlJZDogZnVuY3Rpb24gZGVzdHJveUJ5SWQoaWQpIHtcbiAgICAgIHZhciBpdGVtID0gdGhpcy5saXN0LmZpbmQoZnVuY3Rpb24gKHYpIHtcbiAgICAgICAgcmV0dXJuIHYuaWQgPT09IGlkO1xuICAgICAgfSk7XG5cbiAgICAgIGlmIChpdGVtKSB7XG4gICAgICAgIHRoaXMuZGVzdHJveShpdGVtKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGRlc3Ryb3lBbGw6IGZ1bmN0aW9uIGRlc3Ryb3lBbGwoKSB7XG4gICAgICB0aGlzLmFjdGl2ZS5mb3JFYWNoKHRoaXMuZGVzdHJveSk7XG4gICAgfSxcbiAgICBnZXRBbmltYXRpb246IGZ1bmN0aW9uIGdldEFuaW1hdGlvbihpbmRleCwgZWwpIHtcbiAgICAgIHZhciBhbmltYXRpb24gPSB0aGlzLmFuaW1hdGlvbltpbmRleF07XG5cbiAgICAgIHJldHVybiB0eXBlb2YgYW5pbWF0aW9uID09PSAnZnVuY3Rpb24nID8gYW5pbWF0aW9uLmNhbGwodGhpcywgZWwpIDogYW5pbWF0aW9uO1xuICAgIH0sXG4gICAgZW50ZXI6IGZ1bmN0aW9uIGVudGVyKF9yZWYpIHtcbiAgICAgIHZhciBlbCA9IF9yZWYuZWwsXG4gICAgICAgICAgY29tcGxldGUgPSBfcmVmLmNvbXBsZXRlO1xuXG4gICAgICB2YXIgYW5pbWF0aW9uID0gdGhpcy5nZXRBbmltYXRpb24oJ2VudGVyJywgZWwpO1xuXG4gICAgICB0aGlzLnZlbG9jaXR5KGVsLCBhbmltYXRpb24sIHtcbiAgICAgICAgZHVyYXRpb246IHRoaXMuc3BlZWQsXG4gICAgICAgIGNvbXBsZXRlOiBjb21wbGV0ZVxuICAgICAgfSk7XG4gICAgfSxcbiAgICBsZWF2ZTogZnVuY3Rpb24gbGVhdmUoX3JlZjIpIHtcbiAgICAgIHZhciBlbCA9IF9yZWYyLmVsLFxuICAgICAgICAgIGNvbXBsZXRlID0gX3JlZjIuY29tcGxldGU7XG5cbiAgICAgIHZhciBhbmltYXRpb24gPSB0aGlzLmdldEFuaW1hdGlvbignbGVhdmUnLCBlbCk7XG5cbiAgICAgIHRoaXMudmVsb2NpdHkoZWwsIGFuaW1hdGlvbiwge1xuICAgICAgICBkdXJhdGlvbjogdGhpcy5zcGVlZCxcbiAgICAgICAgY29tcGxldGU6IGNvbXBsZXRlXG4gICAgICB9KTtcbiAgICB9LFxuICAgIGNsZWFuOiBmdW5jdGlvbiBjbGVhbigpIHtcbiAgICAgIHRoaXMubGlzdCA9IHRoaXMubGlzdC5maWx0ZXIoZnVuY3Rpb24gKHYpIHtcbiAgICAgICAgcmV0dXJuIHYuc3RhdGUgIT09IFNUQVRFLkRFU1RST1lFRDtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufTtcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiZGVmYXVsdFwiXSA9IChDb21wb25lbnQpO1xuXG4vKioqLyB9KSxcbi8qIDYgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5cblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiZGVmYXVsdFwiXSA9ICh7XG4gIG5hbWU6ICdWZWxvY2l0eUdyb3VwJyxcbiAgbWV0aG9kczoge1xuICAgIGVudGVyOiBmdW5jdGlvbiBlbnRlcihlbCwgY29tcGxldGUpIHtcbiAgICAgIHRoaXMuJGVtaXQoJ2VudGVyJywgeyBlbDogZWwsIGNvbXBsZXRlOiBjb21wbGV0ZSB9KTtcbiAgICB9LFxuICAgIGxlYXZlOiBmdW5jdGlvbiBsZWF2ZShlbCwgY29tcGxldGUpIHtcbiAgICAgIHRoaXMuJGVtaXQoJ2xlYXZlJywgeyBlbDogZWwsIGNvbXBsZXRlOiBjb21wbGV0ZSB9KTtcbiAgICB9LFxuICAgIGFmdGVyTGVhdmU6IGZ1bmN0aW9uIGFmdGVyTGVhdmUoKSB7XG4gICAgICB0aGlzLiRlbWl0KCdhZnRlckxlYXZlJyk7XG4gICAgfVxuICB9XG59KTtcblxuLyoqKi8gfSksXG4vKiA3ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiYVwiXSA9ICh7XG4gIHBvc2l0aW9uOiBbJ3RvcCcsICdyaWdodCddLFxuICBjc3NBbmltYXRpb246ICd2bi1mYWRlJyxcbiAgdmVsb2NpdHlBbmltYXRpb246IHtcbiAgICBlbnRlcjogZnVuY3Rpb24gZW50ZXIoZWwpIHtcbiAgICAgIHZhciBoZWlnaHQgPSBlbC5jbGllbnRIZWlnaHQ7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGhlaWdodDogW2hlaWdodCwgMF0sXG4gICAgICAgIG9wYWNpdHk6IFsxLCAwXVxuICAgICAgfTtcbiAgICB9LFxuICAgIGxlYXZlOiB7XG4gICAgICBoZWlnaHQ6IDAsXG4gICAgICBvcGFjaXR5OiBbMCwgMV1cbiAgICB9XG4gIH1cbn0pO1xuXG4vKioqLyB9KSxcbi8qIDggKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG4vKiB1bnVzZWQgaGFybW9ueSBleHBvcnQgcGFyc2UgKi9cbnZhciBfdHlwZW9mID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIgPyBmdW5jdGlvbiAob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9IDogZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTtcblxudmFyIGZsb2F0UmVnZXhwID0gJ1stK10/WzAtOV0qLj9bMC05XSsnO1xuXG52YXIgdHlwZXMgPSBbe1xuICBuYW1lOiAncHgnLFxuICByZWdleHA6IG5ldyBSZWdFeHAoJ14nICsgZmxvYXRSZWdleHAgKyAncHgkJylcbn0sIHtcbiAgbmFtZTogJyUnLFxuICByZWdleHA6IG5ldyBSZWdFeHAoJ14nICsgZmxvYXRSZWdleHAgKyAnJSQnKVxufSwge1xuICBuYW1lOiAncHgnLFxuICByZWdleHA6IG5ldyBSZWdFeHAoJ14nICsgZmxvYXRSZWdleHAgKyAnJCcpXG59XTtcblxudmFyIGdldFR5cGUgPSBmdW5jdGlvbiBnZXRUeXBlKHZhbHVlKSB7XG4gIGlmICh2YWx1ZSA9PT0gJ2F1dG8nKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IHZhbHVlLFxuICAgICAgdmFsdWU6IDBcbiAgICB9O1xuICB9XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB0eXBlcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciB0eXBlID0gdHlwZXNbaV07XG4gICAgaWYgKHR5cGUucmVnZXhwLnRlc3QodmFsdWUpKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiB0eXBlLm5hbWUsXG4gICAgICAgIHZhbHVlOiBwYXJzZUZsb2F0KHZhbHVlKVxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHR5cGU6ICcnLFxuICAgIHZhbHVlOiB2YWx1ZVxuICB9O1xufTtcblxudmFyIHBhcnNlID0gZnVuY3Rpb24gcGFyc2UodmFsdWUpIHtcbiAgc3dpdGNoICh0eXBlb2YgdmFsdWUgPT09ICd1bmRlZmluZWQnID8gJ3VuZGVmaW5lZCcgOiBfdHlwZW9mKHZhbHVlKSkge1xuICAgIGNhc2UgJ251bWJlcic6XG4gICAgICByZXR1cm4geyB0eXBlOiAncHgnLCB2YWx1ZTogdmFsdWUgfTtcbiAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgcmV0dXJuIGdldFR5cGUodmFsdWUpO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4geyB0eXBlOiAnJywgdmFsdWU6IHZhbHVlIH07XG4gIH1cbn07XG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImFcIl0gPSAocGFyc2UpO1xuXG4vKioqLyB9KSxcbi8qIDkgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiYlwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIElkOyB9KTtcbi8qIHVudXNlZCBoYXJtb255IGV4cG9ydCBzcGxpdCAqL1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImFcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBsaXN0VG9EaXJlY3Rpb247IH0pO1xudmFyIGRpcmVjdGlvbnMgPSB7XG4gIHg6IFsnbGVmdCcsICdjZW50ZXInLCAncmlnaHQnXSxcbiAgeTogWyd0b3AnLCAnYm90dG9tJ11cbn07XG5cbnZhciBJZCA9IGZ1bmN0aW9uIChpKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGkrKztcbiAgfTtcbn0oMCk7XG5cbnZhciBzcGxpdCA9IGZ1bmN0aW9uIHNwbGl0KHZhbHVlKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgcmV0dXJuIHZhbHVlLnNwbGl0KC9cXHMrL2dpKS5maWx0ZXIoZnVuY3Rpb24gKHYpIHtcbiAgICByZXR1cm4gdjtcbiAgfSk7XG59O1xuXG52YXIgbGlzdFRvRGlyZWN0aW9uID0gZnVuY3Rpb24gbGlzdFRvRGlyZWN0aW9uKHZhbHVlKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgdmFsdWUgPSBzcGxpdCh2YWx1ZSk7XG4gIH1cblxuICB2YXIgeCA9IG51bGw7XG4gIHZhciB5ID0gbnVsbDtcblxuICB2YWx1ZS5mb3JFYWNoKGZ1bmN0aW9uICh2KSB7XG4gICAgaWYgKGRpcmVjdGlvbnMueS5pbmRleE9mKHYpICE9PSAtMSkge1xuICAgICAgeSA9IHY7XG4gICAgfVxuICAgIGlmIChkaXJlY3Rpb25zLnguaW5kZXhPZih2KSAhPT0gLTEpIHtcbiAgICAgIHggPSB2O1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHsgeDogeCwgeTogeSB9O1xufTtcblxuLyoqKi8gfSksXG4vKiAxMCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5leHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDExKSgpO1xuLy8gaW1wb3J0c1xuXG5cbi8vIG1vZHVsZVxuZXhwb3J0cy5wdXNoKFttb2R1bGUuaSwgXCIudnVlLW5vdGlmaWNhdGlvbi1ncm91cHtkaXNwbGF5OmJsb2NrO3Bvc2l0aW9uOmZpeGVkO3otaW5kZXg6NTAwMH0udnVlLW5vdGlmaWNhdGlvbi13cmFwcGVye2Rpc3BsYXk6YmxvY2s7b3ZlcmZsb3c6aGlkZGVuO3dpZHRoOjEwMCU7bWFyZ2luOjA7cGFkZGluZzowfS5ub3RpZmljYXRpb24tdGl0bGV7Zm9udC13ZWlnaHQ6NjAwfS52dWUtbm90aWZpY2F0aW9uLXRlbXBsYXRle2JhY2tncm91bmQ6I2ZmZn0udnVlLW5vdGlmaWNhdGlvbiwudnVlLW5vdGlmaWNhdGlvbi10ZW1wbGF0ZXtkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveDt0ZXh0LWFsaWduOmxlZnR9LnZ1ZS1ub3RpZmljYXRpb257Zm9udC1zaXplOjEycHg7cGFkZGluZzoxMHB4O21hcmdpbjowIDVweCA1cHg7Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kOiM0NGE0ZmM7Ym9yZGVyLWxlZnQ6NXB4IHNvbGlkICMxODdmZTd9LnZ1ZS1ub3RpZmljYXRpb24ud2FybntiYWNrZ3JvdW5kOiNmZmI2NDg7Ym9yZGVyLWxlZnQtY29sb3I6I2Y0OGEwNn0udnVlLW5vdGlmaWNhdGlvbi5lcnJvcntiYWNrZ3JvdW5kOiNlNTRkNDI7Ym9yZGVyLWxlZnQtY29sb3I6I2I4MmUyNH0udnVlLW5vdGlmaWNhdGlvbi5zdWNjZXNze2JhY2tncm91bmQ6IzY4Y2Q4Njtib3JkZXItbGVmdC1jb2xvcjojNDJhODVmfS52bi1mYWRlLWVudGVyLWFjdGl2ZSwudm4tZmFkZS1sZWF2ZS1hY3RpdmUsLnZuLWZhZGUtbW92ZXt0cmFuc2l0aW9uOmFsbCAuNXN9LnZuLWZhZGUtZW50ZXIsLnZuLWZhZGUtbGVhdmUtdG97b3BhY2l0eTowfVwiLCBcIlwiXSk7XG5cbi8vIGV4cG9ydHNcblxuXG4vKioqLyB9KSxcbi8qIDExICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbi8qXHJcblx0TUlUIExpY2Vuc2UgaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9taXQtbGljZW5zZS5waHBcclxuXHRBdXRob3IgVG9iaWFzIEtvcHBlcnMgQHNva3JhXHJcbiovXHJcbi8vIGNzcyBiYXNlIGNvZGUsIGluamVjdGVkIGJ5IHRoZSBjc3MtbG9hZGVyXHJcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oKSB7XHJcblx0dmFyIGxpc3QgPSBbXTtcclxuXHJcblx0Ly8gcmV0dXJuIHRoZSBsaXN0IG9mIG1vZHVsZXMgYXMgY3NzIHN0cmluZ1xyXG5cdGxpc3QudG9TdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZygpIHtcclxuXHRcdHZhciByZXN1bHQgPSBbXTtcclxuXHRcdGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdHZhciBpdGVtID0gdGhpc1tpXTtcclxuXHRcdFx0aWYoaXRlbVsyXSkge1xyXG5cdFx0XHRcdHJlc3VsdC5wdXNoKFwiQG1lZGlhIFwiICsgaXRlbVsyXSArIFwie1wiICsgaXRlbVsxXSArIFwifVwiKTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRyZXN1bHQucHVzaChpdGVtWzFdKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHJlc3VsdC5qb2luKFwiXCIpO1xyXG5cdH07XHJcblxyXG5cdC8vIGltcG9ydCBhIGxpc3Qgb2YgbW9kdWxlcyBpbnRvIHRoZSBsaXN0XHJcblx0bGlzdC5pID0gZnVuY3Rpb24obW9kdWxlcywgbWVkaWFRdWVyeSkge1xyXG5cdFx0aWYodHlwZW9mIG1vZHVsZXMgPT09IFwic3RyaW5nXCIpXHJcblx0XHRcdG1vZHVsZXMgPSBbW251bGwsIG1vZHVsZXMsIFwiXCJdXTtcclxuXHRcdHZhciBhbHJlYWR5SW1wb3J0ZWRNb2R1bGVzID0ge307XHJcblx0XHRmb3IodmFyIGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHR2YXIgaWQgPSB0aGlzW2ldWzBdO1xyXG5cdFx0XHRpZih0eXBlb2YgaWQgPT09IFwibnVtYmVyXCIpXHJcblx0XHRcdFx0YWxyZWFkeUltcG9ydGVkTW9kdWxlc1tpZF0gPSB0cnVlO1xyXG5cdFx0fVxyXG5cdFx0Zm9yKGkgPSAwOyBpIDwgbW9kdWxlcy5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHR2YXIgaXRlbSA9IG1vZHVsZXNbaV07XHJcblx0XHRcdC8vIHNraXAgYWxyZWFkeSBpbXBvcnRlZCBtb2R1bGVcclxuXHRcdFx0Ly8gdGhpcyBpbXBsZW1lbnRhdGlvbiBpcyBub3QgMTAwJSBwZXJmZWN0IGZvciB3ZWlyZCBtZWRpYSBxdWVyeSBjb21iaW5hdGlvbnNcclxuXHRcdFx0Ly8gIHdoZW4gYSBtb2R1bGUgaXMgaW1wb3J0ZWQgbXVsdGlwbGUgdGltZXMgd2l0aCBkaWZmZXJlbnQgbWVkaWEgcXVlcmllcy5cclxuXHRcdFx0Ly8gIEkgaG9wZSB0aGlzIHdpbGwgbmV2ZXIgb2NjdXIgKEhleSB0aGlzIHdheSB3ZSBoYXZlIHNtYWxsZXIgYnVuZGxlcylcclxuXHRcdFx0aWYodHlwZW9mIGl0ZW1bMF0gIT09IFwibnVtYmVyXCIgfHwgIWFscmVhZHlJbXBvcnRlZE1vZHVsZXNbaXRlbVswXV0pIHtcclxuXHRcdFx0XHRpZihtZWRpYVF1ZXJ5ICYmICFpdGVtWzJdKSB7XHJcblx0XHRcdFx0XHRpdGVtWzJdID0gbWVkaWFRdWVyeTtcclxuXHRcdFx0XHR9IGVsc2UgaWYobWVkaWFRdWVyeSkge1xyXG5cdFx0XHRcdFx0aXRlbVsyXSA9IFwiKFwiICsgaXRlbVsyXSArIFwiKSBhbmQgKFwiICsgbWVkaWFRdWVyeSArIFwiKVwiO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRsaXN0LnB1c2goaXRlbSk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9O1xyXG5cdHJldHVybiBsaXN0O1xyXG59O1xyXG5cblxuLyoqKi8gfSksXG4vKiAxMiAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG52YXIgQ29tcG9uZW50ID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKShcbiAgLyogc2NyaXB0ICovXG4gIF9fd2VicGFja19yZXF1aXJlX18oNCksXG4gIC8qIHRlbXBsYXRlICovXG4gIF9fd2VicGFja19yZXF1aXJlX18oMTYpLFxuICAvKiBzY29wZUlkICovXG4gIG51bGwsXG4gIC8qIGNzc01vZHVsZXMgKi9cbiAgbnVsbFxuKVxuXG5tb2R1bGUuZXhwb3J0cyA9IENvbXBvbmVudC5leHBvcnRzXG5cblxuLyoqKi8gfSksXG4vKiAxMyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG52YXIgQ29tcG9uZW50ID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKShcbiAgLyogc2NyaXB0ICovXG4gIF9fd2VicGFja19yZXF1aXJlX18oNiksXG4gIC8qIHRlbXBsYXRlICovXG4gIF9fd2VicGFja19yZXF1aXJlX18oMTQpLFxuICAvKiBzY29wZUlkICovXG4gIG51bGwsXG4gIC8qIGNzc01vZHVsZXMgKi9cbiAgbnVsbFxuKVxuXG5tb2R1bGUuZXhwb3J0cyA9IENvbXBvbmVudC5leHBvcnRzXG5cblxuLyoqKi8gfSksXG4vKiAxNCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cz17cmVuZGVyOmZ1bmN0aW9uICgpe3ZhciBfdm09dGhpczt2YXIgX2g9X3ZtLiRjcmVhdGVFbGVtZW50O3ZhciBfYz1fdm0uX3NlbGYuX2N8fF9oO1xuICByZXR1cm4gX2MoJ3RyYW5zaXRpb24tZ3JvdXAnLCB7XG4gICAgYXR0cnM6IHtcbiAgICAgIFwiY3NzXCI6IGZhbHNlXG4gICAgfSxcbiAgICBvbjoge1xuICAgICAgXCJlbnRlclwiOiBfdm0uZW50ZXIsXG4gICAgICBcImxlYXZlXCI6IF92bS5sZWF2ZSxcbiAgICAgIFwiYWZ0ZXItbGVhdmVcIjogX3ZtLmFmdGVyTGVhdmVcbiAgICB9XG4gIH0sIFtfdm0uX3QoXCJkZWZhdWx0XCIpXSwgMilcbn0sc3RhdGljUmVuZGVyRm5zOiBbXX1cblxuLyoqKi8gfSksXG4vKiAxNSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cz17cmVuZGVyOmZ1bmN0aW9uICgpe3ZhciBfdm09dGhpczt2YXIgX2g9X3ZtLiRjcmVhdGVFbGVtZW50O3ZhciBfYz1fdm0uX3NlbGYuX2N8fF9oO1xuICByZXR1cm4gX2MoJ2RpdicsIHtcbiAgICBzdGF0aWNDbGFzczogXCJ2dWUtbm90aWZpY2F0aW9uLWdyb3VwXCIsXG4gICAgc3R5bGU6IChfdm0uc3R5bGVzKVxuICB9LCBbX2MoX3ZtLmNvbXBvbmVudE5hbWUsIHtcbiAgICB0YWc6IFwiY29tcG9uZW50XCIsXG4gICAgYXR0cnM6IHtcbiAgICAgIFwibmFtZVwiOiBfdm0uYW5pbWF0aW9uTmFtZVxuICAgIH0sXG4gICAgb246IHtcbiAgICAgIFwiZW50ZXJcIjogX3ZtLmVudGVyLFxuICAgICAgXCJsZWF2ZVwiOiBfdm0ubGVhdmUsXG4gICAgICBcImFmdGVyLWxlYXZlXCI6IF92bS5jbGVhblxuICAgIH1cbiAgfSwgX3ZtLl9sKChfdm0uYWN0aXZlKSwgZnVuY3Rpb24oaXRlbSkge1xuICAgIHJldHVybiBfYygnZGl2Jywge1xuICAgICAga2V5OiBpdGVtLmlkLFxuICAgICAgc3RhdGljQ2xhc3M6IFwidnVlLW5vdGlmaWNhdGlvbi13cmFwcGVyXCIsXG4gICAgICBzdHlsZTogKF92bS5ub3RpZnlXcmFwcGVyU3R5bGUoaXRlbSkpLFxuICAgICAgYXR0cnM6IHtcbiAgICAgICAgXCJkYXRhLWlkXCI6IGl0ZW0uaWRcbiAgICAgIH1cbiAgICB9LCBbX3ZtLl90KFwiYm9keVwiLCBbX2MoJ2RpdicsIHtcbiAgICAgIGNsYXNzOiBfdm0ubm90aWZ5Q2xhc3MoaXRlbSksXG4gICAgICBvbjoge1xuICAgICAgICBcImNsaWNrXCI6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgIHJldHVybiBfdm0uZGVzdHJveUlmTmVjZXNzYXJ5KGl0ZW0pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LCBbKGl0ZW0udGl0bGUpID8gX2MoJ2RpdicsIHtcbiAgICAgIHN0YXRpY0NsYXNzOiBcIm5vdGlmaWNhdGlvbi10aXRsZVwiLFxuICAgICAgZG9tUHJvcHM6IHtcbiAgICAgICAgXCJpbm5lckhUTUxcIjogX3ZtLl9zKGl0ZW0udGl0bGUpXG4gICAgICB9XG4gICAgfSkgOiBfdm0uX2UoKSwgX3ZtLl92KFwiIFwiKSwgX2MoJ2RpdicsIHtcbiAgICAgIHN0YXRpY0NsYXNzOiBcIm5vdGlmaWNhdGlvbi1jb250ZW50XCIsXG4gICAgICBkb21Qcm9wczoge1xuICAgICAgICBcImlubmVySFRNTFwiOiBfdm0uX3MoaXRlbS50ZXh0KVxuICAgICAgfVxuICAgIH0pXSldLCB7XG4gICAgICBcIml0ZW1cIjogaXRlbSxcbiAgICAgIFwiY2xvc2VcIjogZnVuY3Rpb24gKCkgeyByZXR1cm4gX3ZtLmRlc3Ryb3koaXRlbSk7IH1cbiAgICB9KV0sIDIpXG4gIH0pLCAwKV0sIDEpXG59LHN0YXRpY1JlbmRlckZuczogW119XG5cbi8qKiovIH0pLFxuLyogMTYgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHM9e3JlbmRlcjpmdW5jdGlvbiAoKXt2YXIgX3ZtPXRoaXM7dmFyIF9oPV92bS4kY3JlYXRlRWxlbWVudDt2YXIgX2M9X3ZtLl9zZWxmLl9jfHxfaDtcbiAgcmV0dXJuIF9jKCd0cmFuc2l0aW9uLWdyb3VwJywge1xuICAgIGF0dHJzOiB7XG4gICAgICBcIm5hbWVcIjogX3ZtLm5hbWVcbiAgICB9XG4gIH0sIFtfdm0uX3QoXCJkZWZhdWx0XCIpXSwgMilcbn0sc3RhdGljUmVuZGVyRm5zOiBbXX1cblxuLyoqKi8gfSksXG4vKiAxNyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG4vLyBzdHlsZS1sb2FkZXI6IEFkZHMgc29tZSBjc3MgdG8gdGhlIERPTSBieSBhZGRpbmcgYSA8c3R5bGU+IHRhZ1xuXG4vLyBsb2FkIHRoZSBzdHlsZXNcbnZhciBjb250ZW50ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMCk7XG5pZih0eXBlb2YgY29udGVudCA9PT0gJ3N0cmluZycpIGNvbnRlbnQgPSBbW21vZHVsZS5pLCBjb250ZW50LCAnJ11dO1xuaWYoY29udGVudC5sb2NhbHMpIG1vZHVsZS5leHBvcnRzID0gY29udGVudC5sb2NhbHM7XG4vLyBhZGQgdGhlIHN0eWxlcyB0byB0aGUgRE9NXG52YXIgdXBkYXRlID0gX193ZWJwYWNrX3JlcXVpcmVfXygxOCkoXCIyOTAxYWVhZVwiLCBjb250ZW50LCB0cnVlKTtcblxuLyoqKi8gfSksXG4vKiAxOCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG4vKlxuICBNSVQgTGljZW5zZSBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL21pdC1saWNlbnNlLnBocFxuICBBdXRob3IgVG9iaWFzIEtvcHBlcnMgQHNva3JhXG4gIE1vZGlmaWVkIGJ5IEV2YW4gWW91IEB5eXg5OTA4MDNcbiovXG5cbnZhciBoYXNEb2N1bWVudCA9IHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCdcblxuaWYgKHR5cGVvZiBERUJVRyAhPT0gJ3VuZGVmaW5lZCcgJiYgREVCVUcpIHtcbiAgaWYgKCFoYXNEb2N1bWVudCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAndnVlLXN0eWxlLWxvYWRlciBjYW5ub3QgYmUgdXNlZCBpbiBhIG5vbi1icm93c2VyIGVudmlyb25tZW50LiAnICtcbiAgICBcIlVzZSB7IHRhcmdldDogJ25vZGUnIH0gaW4geW91ciBXZWJwYWNrIGNvbmZpZyB0byBpbmRpY2F0ZSBhIHNlcnZlci1yZW5kZXJpbmcgZW52aXJvbm1lbnQuXCJcbiAgKSB9XG59XG5cbnZhciBsaXN0VG9TdHlsZXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE5KVxuXG4vKlxudHlwZSBTdHlsZU9iamVjdCA9IHtcbiAgaWQ6IG51bWJlcjtcbiAgcGFydHM6IEFycmF5PFN0eWxlT2JqZWN0UGFydD5cbn1cblxudHlwZSBTdHlsZU9iamVjdFBhcnQgPSB7XG4gIGNzczogc3RyaW5nO1xuICBtZWRpYTogc3RyaW5nO1xuICBzb3VyY2VNYXA6ID9zdHJpbmdcbn1cbiovXG5cbnZhciBzdHlsZXNJbkRvbSA9IHsvKlxuICBbaWQ6IG51bWJlcl06IHtcbiAgICBpZDogbnVtYmVyLFxuICAgIHJlZnM6IG51bWJlcixcbiAgICBwYXJ0czogQXJyYXk8KG9iaj86IFN0eWxlT2JqZWN0UGFydCkgPT4gdm9pZD5cbiAgfVxuKi99XG5cbnZhciBoZWFkID0gaGFzRG9jdW1lbnQgJiYgKGRvY3VtZW50LmhlYWQgfHwgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2hlYWQnKVswXSlcbnZhciBzaW5nbGV0b25FbGVtZW50ID0gbnVsbFxudmFyIHNpbmdsZXRvbkNvdW50ZXIgPSAwXG52YXIgaXNQcm9kdWN0aW9uID0gZmFsc2VcbnZhciBub29wID0gZnVuY3Rpb24gKCkge31cblxuLy8gRm9yY2Ugc2luZ2xlLXRhZyBzb2x1dGlvbiBvbiBJRTYtOSwgd2hpY2ggaGFzIGEgaGFyZCBsaW1pdCBvbiB0aGUgIyBvZiA8c3R5bGU+XG4vLyB0YWdzIGl0IHdpbGwgYWxsb3cgb24gYSBwYWdlXG52YXIgaXNPbGRJRSA9IHR5cGVvZiBuYXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnICYmIC9tc2llIFs2LTldXFxiLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKSlcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAocGFyZW50SWQsIGxpc3QsIF9pc1Byb2R1Y3Rpb24pIHtcbiAgaXNQcm9kdWN0aW9uID0gX2lzUHJvZHVjdGlvblxuXG4gIHZhciBzdHlsZXMgPSBsaXN0VG9TdHlsZXMocGFyZW50SWQsIGxpc3QpXG4gIGFkZFN0eWxlc1RvRG9tKHN0eWxlcylcblxuICByZXR1cm4gZnVuY3Rpb24gdXBkYXRlIChuZXdMaXN0KSB7XG4gICAgdmFyIG1heVJlbW92ZSA9IFtdXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHlsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBpdGVtID0gc3R5bGVzW2ldXG4gICAgICB2YXIgZG9tU3R5bGUgPSBzdHlsZXNJbkRvbVtpdGVtLmlkXVxuICAgICAgZG9tU3R5bGUucmVmcy0tXG4gICAgICBtYXlSZW1vdmUucHVzaChkb21TdHlsZSlcbiAgICB9XG4gICAgaWYgKG5ld0xpc3QpIHtcbiAgICAgIHN0eWxlcyA9IGxpc3RUb1N0eWxlcyhwYXJlbnRJZCwgbmV3TGlzdClcbiAgICAgIGFkZFN0eWxlc1RvRG9tKHN0eWxlcylcbiAgICB9IGVsc2Uge1xuICAgICAgc3R5bGVzID0gW11cbiAgICB9XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtYXlSZW1vdmUubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBkb21TdHlsZSA9IG1heVJlbW92ZVtpXVxuICAgICAgaWYgKGRvbVN0eWxlLnJlZnMgPT09IDApIHtcbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBkb21TdHlsZS5wYXJ0cy5sZW5ndGg7IGorKykge1xuICAgICAgICAgIGRvbVN0eWxlLnBhcnRzW2pdKClcbiAgICAgICAgfVxuICAgICAgICBkZWxldGUgc3R5bGVzSW5Eb21bZG9tU3R5bGUuaWRdXG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGFkZFN0eWxlc1RvRG9tIChzdHlsZXMgLyogQXJyYXk8U3R5bGVPYmplY3Q+ICovKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgc3R5bGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGl0ZW0gPSBzdHlsZXNbaV1cbiAgICB2YXIgZG9tU3R5bGUgPSBzdHlsZXNJbkRvbVtpdGVtLmlkXVxuICAgIGlmIChkb21TdHlsZSkge1xuICAgICAgZG9tU3R5bGUucmVmcysrXG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGRvbVN0eWxlLnBhcnRzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIGRvbVN0eWxlLnBhcnRzW2pdKGl0ZW0ucGFydHNbal0pXG4gICAgICB9XG4gICAgICBmb3IgKDsgaiA8IGl0ZW0ucGFydHMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgZG9tU3R5bGUucGFydHMucHVzaChhZGRTdHlsZShpdGVtLnBhcnRzW2pdKSlcbiAgICAgIH1cbiAgICAgIGlmIChkb21TdHlsZS5wYXJ0cy5sZW5ndGggPiBpdGVtLnBhcnRzLmxlbmd0aCkge1xuICAgICAgICBkb21TdHlsZS5wYXJ0cy5sZW5ndGggPSBpdGVtLnBhcnRzLmxlbmd0aFxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgcGFydHMgPSBbXVxuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBpdGVtLnBhcnRzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIHBhcnRzLnB1c2goYWRkU3R5bGUoaXRlbS5wYXJ0c1tqXSkpXG4gICAgICB9XG4gICAgICBzdHlsZXNJbkRvbVtpdGVtLmlkXSA9IHsgaWQ6IGl0ZW0uaWQsIHJlZnM6IDEsIHBhcnRzOiBwYXJ0cyB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVN0eWxlRWxlbWVudCAoKSB7XG4gIHZhciBzdHlsZUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpXG4gIHN0eWxlRWxlbWVudC50eXBlID0gJ3RleHQvY3NzJ1xuICBoZWFkLmFwcGVuZENoaWxkKHN0eWxlRWxlbWVudClcbiAgcmV0dXJuIHN0eWxlRWxlbWVudFxufVxuXG5mdW5jdGlvbiBhZGRTdHlsZSAob2JqIC8qIFN0eWxlT2JqZWN0UGFydCAqLykge1xuICB2YXIgdXBkYXRlLCByZW1vdmVcbiAgdmFyIHN0eWxlRWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ3N0eWxlW2RhdGEtdnVlLXNzci1pZH49XCInICsgb2JqLmlkICsgJ1wiXScpXG5cbiAgaWYgKHN0eWxlRWxlbWVudCkge1xuICAgIGlmIChpc1Byb2R1Y3Rpb24pIHtcbiAgICAgIC8vIGhhcyBTU1Igc3R5bGVzIGFuZCBpbiBwcm9kdWN0aW9uIG1vZGUuXG4gICAgICAvLyBzaW1wbHkgZG8gbm90aGluZy5cbiAgICAgIHJldHVybiBub29wXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGhhcyBTU1Igc3R5bGVzIGJ1dCBpbiBkZXYgbW9kZS5cbiAgICAgIC8vIGZvciBzb21lIHJlYXNvbiBDaHJvbWUgY2FuJ3QgaGFuZGxlIHNvdXJjZSBtYXAgaW4gc2VydmVyLXJlbmRlcmVkXG4gICAgICAvLyBzdHlsZSB0YWdzIC0gc291cmNlIG1hcHMgaW4gPHN0eWxlPiBvbmx5IHdvcmtzIGlmIHRoZSBzdHlsZSB0YWcgaXNcbiAgICAgIC8vIGNyZWF0ZWQgYW5kIGluc2VydGVkIGR5bmFtaWNhbGx5LiBTbyB3ZSByZW1vdmUgdGhlIHNlcnZlciByZW5kZXJlZFxuICAgICAgLy8gc3R5bGVzIGFuZCBpbmplY3QgbmV3IG9uZXMuXG4gICAgICBzdHlsZUVsZW1lbnQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChzdHlsZUVsZW1lbnQpXG4gICAgfVxuICB9XG5cbiAgaWYgKGlzT2xkSUUpIHtcbiAgICAvLyB1c2Ugc2luZ2xldG9uIG1vZGUgZm9yIElFOS5cbiAgICB2YXIgc3R5bGVJbmRleCA9IHNpbmdsZXRvbkNvdW50ZXIrK1xuICAgIHN0eWxlRWxlbWVudCA9IHNpbmdsZXRvbkVsZW1lbnQgfHwgKHNpbmdsZXRvbkVsZW1lbnQgPSBjcmVhdGVTdHlsZUVsZW1lbnQoKSlcbiAgICB1cGRhdGUgPSBhcHBseVRvU2luZ2xldG9uVGFnLmJpbmQobnVsbCwgc3R5bGVFbGVtZW50LCBzdHlsZUluZGV4LCBmYWxzZSlcbiAgICByZW1vdmUgPSBhcHBseVRvU2luZ2xldG9uVGFnLmJpbmQobnVsbCwgc3R5bGVFbGVtZW50LCBzdHlsZUluZGV4LCB0cnVlKVxuICB9IGVsc2Uge1xuICAgIC8vIHVzZSBtdWx0aS1zdHlsZS10YWcgbW9kZSBpbiBhbGwgb3RoZXIgY2FzZXNcbiAgICBzdHlsZUVsZW1lbnQgPSBjcmVhdGVTdHlsZUVsZW1lbnQoKVxuICAgIHVwZGF0ZSA9IGFwcGx5VG9UYWcuYmluZChudWxsLCBzdHlsZUVsZW1lbnQpXG4gICAgcmVtb3ZlID0gZnVuY3Rpb24gKCkge1xuICAgICAgc3R5bGVFbGVtZW50LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoc3R5bGVFbGVtZW50KVxuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZShvYmopXG5cbiAgcmV0dXJuIGZ1bmN0aW9uIHVwZGF0ZVN0eWxlIChuZXdPYmogLyogU3R5bGVPYmplY3RQYXJ0ICovKSB7XG4gICAgaWYgKG5ld09iaikge1xuICAgICAgaWYgKG5ld09iai5jc3MgPT09IG9iai5jc3MgJiZcbiAgICAgICAgICBuZXdPYmoubWVkaWEgPT09IG9iai5tZWRpYSAmJlxuICAgICAgICAgIG5ld09iai5zb3VyY2VNYXAgPT09IG9iai5zb3VyY2VNYXApIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICB1cGRhdGUob2JqID0gbmV3T2JqKVxuICAgIH0gZWxzZSB7XG4gICAgICByZW1vdmUoKVxuICAgIH1cbiAgfVxufVxuXG52YXIgcmVwbGFjZVRleHQgPSAoZnVuY3Rpb24gKCkge1xuICB2YXIgdGV4dFN0b3JlID0gW11cblxuICByZXR1cm4gZnVuY3Rpb24gKGluZGV4LCByZXBsYWNlbWVudCkge1xuICAgIHRleHRTdG9yZVtpbmRleF0gPSByZXBsYWNlbWVudFxuICAgIHJldHVybiB0ZXh0U3RvcmUuZmlsdGVyKEJvb2xlYW4pLmpvaW4oJ1xcbicpXG4gIH1cbn0pKClcblxuZnVuY3Rpb24gYXBwbHlUb1NpbmdsZXRvblRhZyAoc3R5bGVFbGVtZW50LCBpbmRleCwgcmVtb3ZlLCBvYmopIHtcbiAgdmFyIGNzcyA9IHJlbW92ZSA/ICcnIDogb2JqLmNzc1xuXG4gIGlmIChzdHlsZUVsZW1lbnQuc3R5bGVTaGVldCkge1xuICAgIHN0eWxlRWxlbWVudC5zdHlsZVNoZWV0LmNzc1RleHQgPSByZXBsYWNlVGV4dChpbmRleCwgY3NzKVxuICB9IGVsc2Uge1xuICAgIHZhciBjc3NOb2RlID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoY3NzKVxuICAgIHZhciBjaGlsZE5vZGVzID0gc3R5bGVFbGVtZW50LmNoaWxkTm9kZXNcbiAgICBpZiAoY2hpbGROb2Rlc1tpbmRleF0pIHN0eWxlRWxlbWVudC5yZW1vdmVDaGlsZChjaGlsZE5vZGVzW2luZGV4XSlcbiAgICBpZiAoY2hpbGROb2Rlcy5sZW5ndGgpIHtcbiAgICAgIHN0eWxlRWxlbWVudC5pbnNlcnRCZWZvcmUoY3NzTm9kZSwgY2hpbGROb2Rlc1tpbmRleF0pXG4gICAgfSBlbHNlIHtcbiAgICAgIHN0eWxlRWxlbWVudC5hcHBlbmRDaGlsZChjc3NOb2RlKVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBhcHBseVRvVGFnIChzdHlsZUVsZW1lbnQsIG9iaikge1xuICB2YXIgY3NzID0gb2JqLmNzc1xuICB2YXIgbWVkaWEgPSBvYmoubWVkaWFcbiAgdmFyIHNvdXJjZU1hcCA9IG9iai5zb3VyY2VNYXBcblxuICBpZiAobWVkaWEpIHtcbiAgICBzdHlsZUVsZW1lbnQuc2V0QXR0cmlidXRlKCdtZWRpYScsIG1lZGlhKVxuICB9XG5cbiAgaWYgKHNvdXJjZU1hcCkge1xuICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLmNocm9tZS5jb20vZGV2dG9vbHMvZG9jcy9qYXZhc2NyaXB0LWRlYnVnZ2luZ1xuICAgIC8vIHRoaXMgbWFrZXMgc291cmNlIG1hcHMgaW5zaWRlIHN0eWxlIHRhZ3Mgd29yayBwcm9wZXJseSBpbiBDaHJvbWVcbiAgICBjc3MgKz0gJ1xcbi8qIyBzb3VyY2VVUkw9JyArIHNvdXJjZU1hcC5zb3VyY2VzWzBdICsgJyAqLydcbiAgICAvLyBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8yNjYwMzg3NVxuICAgIGNzcyArPSAnXFxuLyojIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCwnICsgYnRvYSh1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoSlNPTi5zdHJpbmdpZnkoc291cmNlTWFwKSkpKSArICcgKi8nXG4gIH1cblxuICBpZiAoc3R5bGVFbGVtZW50LnN0eWxlU2hlZXQpIHtcbiAgICBzdHlsZUVsZW1lbnQuc3R5bGVTaGVldC5jc3NUZXh0ID0gY3NzXG4gIH0gZWxzZSB7XG4gICAgd2hpbGUgKHN0eWxlRWxlbWVudC5maXJzdENoaWxkKSB7XG4gICAgICBzdHlsZUVsZW1lbnQucmVtb3ZlQ2hpbGQoc3R5bGVFbGVtZW50LmZpcnN0Q2hpbGQpXG4gICAgfVxuICAgIHN0eWxlRWxlbWVudC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjc3MpKVxuICB9XG59XG5cblxuLyoqKi8gfSksXG4vKiAxOSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG4vKipcbiAqIFRyYW5zbGF0ZXMgdGhlIGxpc3QgZm9ybWF0IHByb2R1Y2VkIGJ5IGNzcy1sb2FkZXIgaW50byBzb21ldGhpbmdcbiAqIGVhc2llciB0byBtYW5pcHVsYXRlLlxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGxpc3RUb1N0eWxlcyAocGFyZW50SWQsIGxpc3QpIHtcbiAgdmFyIHN0eWxlcyA9IFtdXG4gIHZhciBuZXdTdHlsZXMgPSB7fVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgaXRlbSA9IGxpc3RbaV1cbiAgICB2YXIgaWQgPSBpdGVtWzBdXG4gICAgdmFyIGNzcyA9IGl0ZW1bMV1cbiAgICB2YXIgbWVkaWEgPSBpdGVtWzJdXG4gICAgdmFyIHNvdXJjZU1hcCA9IGl0ZW1bM11cbiAgICB2YXIgcGFydCA9IHtcbiAgICAgIGlkOiBwYXJlbnRJZCArICc6JyArIGksXG4gICAgICBjc3M6IGNzcyxcbiAgICAgIG1lZGlhOiBtZWRpYSxcbiAgICAgIHNvdXJjZU1hcDogc291cmNlTWFwXG4gICAgfVxuICAgIGlmICghbmV3U3R5bGVzW2lkXSkge1xuICAgICAgc3R5bGVzLnB1c2gobmV3U3R5bGVzW2lkXSA9IHsgaWQ6IGlkLCBwYXJ0czogW3BhcnRdIH0pXG4gICAgfSBlbHNlIHtcbiAgICAgIG5ld1N0eWxlc1tpZF0ucGFydHMucHVzaChwYXJ0KVxuICAgIH1cbiAgfVxuICByZXR1cm4gc3R5bGVzXG59XG5cblxuLyoqKi8gfSksXG4vKiAyMCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfMjBfXztcblxuLyoqKi8gfSlcbi8qKioqKiovIF0pO1xufSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLCIndXNlIHN0cmljdCc7XHJcblxyXG52YXIgX3R5cGVvZiA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiID8gZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfSA6IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07XHJcblxyXG52YXIgX2NvbmZpZyA9IHJlcXVpcmUoJy4vY29uZmlnJyk7XHJcblxyXG52YXIgX2NvbmZpZzIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9jb25maWcpO1xyXG5cclxudmFyIF9tZXJnZSA9IHJlcXVpcmUoJ21lcmdlJyk7XHJcblxyXG52YXIgX21lcmdlMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX21lcmdlKTtcclxuXHJcbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XHJcblxyXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxyXG5cclxudmFyIHRlbXBsYXRlID0gcmVxdWlyZSgnLi90ZW1wbGF0ZS5qcycpO1xyXG52YXIgYnVzID0gcmVxdWlyZSgnLi9idXMnKTtcclxuXHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IHtcclxuICByZW5kZXI6IHRlbXBsYXRlLmNhbGwodW5kZWZpbmVkKSxcclxuICBwcm9wczoge1xyXG4gICAgZm9yOiB7XHJcbiAgICAgIHR5cGU6IFN0cmluZyxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXHJcbiAgICB9LFxyXG4gICAgcmVjb3Jkczoge1xyXG4gICAgICB0eXBlOiBOdW1iZXIsXHJcbiAgICAgIHJlcXVpcmVkOiB0cnVlXHJcbiAgICB9LFxyXG4gICAgcGVyUGFnZToge1xyXG4gICAgICB0eXBlOiBOdW1iZXIsXHJcbiAgICAgIGRlZmF1bHQ6IDI1XHJcbiAgICB9LFxyXG4gICAgdnVleDoge1xyXG4gICAgICB0eXBlOiBCb29sZWFuXHJcbiAgICB9LFxyXG4gICAgb3B0aW9uczoge1xyXG4gICAgICB0eXBlOiBPYmplY3RcclxuICAgIH1cclxuICB9LFxyXG4gIGNyZWF0ZWQ6IGZ1bmN0aW9uIGNyZWF0ZWQoKSB7XHJcblxyXG4gICAgaWYgKCF0aGlzLnZ1ZXgpIHJldHVybjtcclxuXHJcbiAgICBpZiAoIXRoaXMuZm9yKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcigndnVlLXBhZ2luYXRpb24tMjogVGhlIFwiZm9yXCIgcHJvcCBpcyByZXF1aXJlZCB3aGVuIHVzaW5nIHZ1ZXgnKTtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgbmFtZSA9IHRoaXMuZm9yO1xyXG5cclxuICAgIGlmICh0aGlzLiRzdG9yZS5zdGF0ZVtuYW1lXSkgcmV0dXJuO1xyXG5cclxuICAgIHRoaXMuJHN0b3JlLnJlZ2lzdGVyTW9kdWxlKHRoaXMuZm9yLCB7XHJcbiAgICAgIHN0YXRlOiB7XHJcbiAgICAgICAgcGFnZTogMVxyXG4gICAgICB9LFxyXG4gICAgICBtdXRhdGlvbnM6IF9kZWZpbmVQcm9wZXJ0eSh7fSwgbmFtZSArICcvUEFHSU5BVEUnLCBmdW5jdGlvbiB1bmRlZmluZWQoc3RhdGUsIHBhZ2UpIHtcclxuICAgICAgICBzdGF0ZS5wYWdlID0gcGFnZTtcclxuICAgICAgfSlcclxuICAgIH0pO1xyXG4gIH0sXHJcbiAgZGF0YTogZnVuY3Rpb24gZGF0YSgpIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIFBhZ2U6IDEsXHJcbiAgICAgIGZpcnN0UGFnZTogMVxyXG4gICAgfTtcclxuICB9LFxyXG4gIGNvbXB1dGVkOiB7XHJcbiAgICBvcHRzOiBmdW5jdGlvbiBvcHRzKCkge1xyXG4gICAgICByZXR1cm4gKDAsIF9tZXJnZTIuZGVmYXVsdCkoKDAsIF9jb25maWcyLmRlZmF1bHQpKCksIHRoaXMub3B0aW9ucyk7XHJcbiAgICB9LFxyXG4gICAgVGhlbWU6IGZ1bmN0aW9uIFRoZW1lKCkge1xyXG5cclxuICAgICAgaWYgKF90eXBlb2YodGhpcy5vcHRzLnRoZW1lKSA9PT0gJ29iamVjdCcpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5vcHRzLnRoZW1lO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB2YXIgdGhlbWVzID0ge1xyXG4gICAgICAgIGJvb3RzdHJhcDM6IHJlcXVpcmUoJy4vdGhlbWVzL2Jvb3RzdHJhcDMnKSxcclxuICAgICAgICBib290c3RyYXA0OiByZXF1aXJlKCcuL3RoZW1lcy9ib290c3RyYXA0JyksXHJcbiAgICAgICAgYnVsbWE6IHJlcXVpcmUoJy4vdGhlbWVzL2J1bG1hJylcclxuICAgICAgfTtcclxuXHJcbiAgICAgIGlmIChfdHlwZW9mKHRoZW1lc1t0aGlzLm9wdHMudGhlbWVdKSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgdGhyb3cgJ3Z1ZS1wYWdpbmF0aW9uLTI6IHRoZSB0aGVtZSAnICsgdGhpcy5vcHRzLnRoZW1lICsgJyBkb2VzIG5vdCBleGlzdCc7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiB0aGVtZXNbdGhpcy5vcHRzLnRoZW1lXTtcclxuICAgIH0sXHJcbiAgICBwYWdlOiBmdW5jdGlvbiBwYWdlKCkge1xyXG4gICAgICByZXR1cm4gdGhpcy52dWV4ID8gdGhpcy4kc3RvcmUuc3RhdGVbdGhpcy5mb3JdLnBhZ2UgOiB0aGlzLlBhZ2U7XHJcbiAgICB9LFxyXG5cclxuICAgIHBhZ2VzOiBmdW5jdGlvbiBwYWdlcygpIHtcclxuICAgICAgaWYgKCF0aGlzLnJlY29yZHMpIHJldHVybiBbXTtcclxuXHJcbiAgICAgIHJldHVybiByYW5nZSh0aGlzLnBhZ2luYXRpb25TdGFydCwgdGhpcy5wYWdlc0luQ3VycmVudENodW5rKTtcclxuICAgIH0sXHJcbiAgICB0b3RhbFBhZ2VzOiBmdW5jdGlvbiB0b3RhbFBhZ2VzKCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5yZWNvcmRzID8gTWF0aC5jZWlsKHRoaXMucmVjb3JkcyAvIHRoaXMucGVyUGFnZSkgOiAxO1xyXG4gICAgfSxcclxuICAgIHRvdGFsQ2h1bmtzOiBmdW5jdGlvbiB0b3RhbENodW5rcygpIHtcclxuICAgICAgcmV0dXJuIE1hdGguY2VpbCh0aGlzLnRvdGFsUGFnZXMgLyB0aGlzLm9wdHMuY2h1bmspO1xyXG4gICAgfSxcclxuICAgIGN1cnJlbnRDaHVuazogZnVuY3Rpb24gY3VycmVudENodW5rKCkge1xyXG4gICAgICByZXR1cm4gTWF0aC5jZWlsKHRoaXMucGFnZSAvIHRoaXMub3B0cy5jaHVuayk7XHJcbiAgICB9LFxyXG4gICAgcGFnaW5hdGlvblN0YXJ0OiBmdW5jdGlvbiBwYWdpbmF0aW9uU3RhcnQoKSB7XHJcblxyXG4gICAgICBpZiAodGhpcy5vcHRzLmNodW5rc05hdmlnYXRpb24gPT09ICdzY3JvbGwnKSB7XHJcbiAgICAgICAgdmFyIHBhZ2UgPSAgdGhpcy5QYWdlIC0gdGhpcy5vcHRzLmNodW5rICsgMTtcclxuICAgICAgICByZXR1cm4gcGFnZSA+IDAgPyBwYWdlIDogMTtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuICh0aGlzLmN1cnJlbnRDaHVuayAtIDEpICogdGhpcy5vcHRzLmNodW5rICsgMTtcclxuICAgIH0sXHJcbiAgICBwYWdlc0luQ3VycmVudENodW5rOiBmdW5jdGlvbiBwYWdlc0luQ3VycmVudENodW5rKCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5wYWdpbmF0aW9uU3RhcnQgKyB0aGlzLm9wdHMuY2h1bmsgPD0gdGhpcy50b3RhbFBhZ2VzID8gdGhpcy5vcHRzLmNodW5rIDogdGhpcy50b3RhbFBhZ2VzIC0gdGhpcy5wYWdpbmF0aW9uU3RhcnQgKyAxO1xyXG4gICAgfSxcclxuICAgIGNvdW50OiBmdW5jdGlvbiBjb3VudCgpIHtcclxuXHJcbiAgICAgIGlmICgve3BhZ2V9Ly50ZXN0KHRoaXMub3B0cy50ZXh0cy5jb3VudCkpIHtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMudG90YWxQYWdlcyA8PSAxKSByZXR1cm4gJyc7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLm9wdHMudGV4dHMuY291bnQucmVwbGFjZSgne3BhZ2V9JywgdGhpcy5wYWdlKS5yZXBsYWNlKCd7cGFnZXN9JywgdGhpcy50b3RhbFBhZ2VzKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdmFyIHBhcnRzID0gdGhpcy5vcHRzLnRleHRzLmNvdW50LnNwbGl0KCd8Jyk7XHJcbiAgICAgIHZhciBmcm9tID0gKHRoaXMucGFnZSAtIDEpICogdGhpcy5wZXJQYWdlICsgMTtcclxuICAgICAgdmFyIHRvID0gdGhpcy5wYWdlID09IHRoaXMudG90YWxQYWdlcyA/IHRoaXMucmVjb3JkcyA6IGZyb20gKyB0aGlzLnBlclBhZ2UgLSAxO1xyXG4gICAgICB2YXIgaSA9IE1hdGgubWluKHRoaXMucmVjb3JkcyA9PSAxID8gMiA6IHRoaXMudG90YWxQYWdlcyA9PSAxID8gMSA6IDAsIHBhcnRzLmxlbmd0aCAtIDEpO1xyXG5cclxuICAgICAgcmV0dXJuIHBhcnRzW2ldLnJlcGxhY2UoJ3tjb3VudH0nLCB0aGlzLmZvcm1hdE51bWJlcih0aGlzLnJlY29yZHMpKS5yZXBsYWNlKCd7ZnJvbX0nLCB0aGlzLmZvcm1hdE51bWJlcihmcm9tKSkucmVwbGFjZSgne3RvfScsIHRoaXMuZm9ybWF0TnVtYmVyKHRvKSk7XHJcbiAgICB9XHJcbiAgfSxcclxuICBtZXRob2RzOiB7XHJcbiAgICBzZXRQYWdlOiBmdW5jdGlvbiBzZXRQYWdlKHBhZ2UpIHtcclxuICAgICAgaWYgKHRoaXMuYWxsb3dlZFBhZ2UocGFnZSkpIHtcclxuICAgICAgICB0aGlzLnBhZ2luYXRlKHBhZ2UpO1xyXG4gICAgICB9XHJcbiAgICB9LFxyXG4gICAgcGFnaW5hdGU6IGZ1bmN0aW9uIHBhZ2luYXRlKHBhZ2UpIHtcclxuICAgICAgaWYgKHRoaXMudnVleCkge1xyXG4gICAgICAgIHRoaXMuJHN0b3JlLmNvbW1pdCh0aGlzLmZvciArICcvUEFHSU5BVEUnLCBwYWdlKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLlBhZ2UgPSBwYWdlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLiRlbWl0KCdwYWdpbmF0ZScsIHBhZ2UpO1xyXG5cclxuICAgICAgaWYgKHRoaXMuZm9yKSB7XHJcbiAgICAgICAgYnVzLiRlbWl0KCd2dWUtcGFnaW5hdGlvbjo6JyArIHRoaXMuZm9yLCBwYWdlKTtcclxuICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBuZXh0OiBmdW5jdGlvbiBuZXh0KCkge1xyXG4gICAgICB2YXIgcGFnZSA9IHRoaXMucGFnZSArIDE7XHJcbiAgICAgIGlmICh0aGlzLm9wdHMuY2h1bmtzTmF2aWdhdGlvbiA9PT0gJ3Njcm9sbCcgJiYgdGhpcy5hbGxvd2VkUGFnZShwYWdlKSAmJiAhdGhpcy5pbkRpc3BsYXkocGFnZSkpIHtcclxuICAgICAgICB0aGlzLmZpcnN0UGFnZSsrO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiB0aGlzLnNldFBhZ2UocGFnZSk7XHJcbiAgICB9LFxyXG4gICAgcHJldjogZnVuY3Rpb24gcHJldigpIHtcclxuICAgICAgdmFyIHBhZ2UgPSB0aGlzLnBhZ2UgLSAxO1xyXG5cclxuICAgICAgaWYgKHRoaXMub3B0cy5jaHVua3NOYXZpZ2F0aW9uID09PSAnc2Nyb2xsJyAmJiB0aGlzLmFsbG93ZWRQYWdlKHBhZ2UpICYmICF0aGlzLmluRGlzcGxheShwYWdlKSkge1xyXG4gICAgICAgIHRoaXMuZmlyc3RQYWdlLS07XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiB0aGlzLnNldFBhZ2UocGFnZSk7XHJcbiAgICB9LFxyXG4gICAgaW5EaXNwbGF5OiBmdW5jdGlvbiBpbkRpc3BsYXkocGFnZSkge1xyXG5cclxuICAgICAgdmFyIHN0YXJ0ID0gdGhpcy5maXJzdFBhZ2U7XHJcbiAgICAgIHZhciBlbmQgPSBzdGFydCArIHRoaXMub3B0cy5jaHVuayAtIDE7XHJcblxyXG4gICAgICByZXR1cm4gcGFnZSA+PSBzdGFydCAmJiBwYWdlIDw9IGVuZDtcclxuICAgIH0sXHJcblxyXG4gICAgbmV4dENodW5rOiBmdW5jdGlvbiBuZXh0Q2h1bmsoKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnNldENodW5rKDEpO1xyXG4gICAgfSxcclxuICAgIHByZXZDaHVuazogZnVuY3Rpb24gcHJldkNodW5rKCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5zZXRDaHVuaygtMSk7XHJcbiAgICB9LFxyXG4gICAgc2V0Q2h1bms6IGZ1bmN0aW9uIHNldENodW5rKGRpcmVjdGlvbikge1xyXG4gICAgICB0aGlzLnNldFBhZ2UoKHRoaXMuY3VycmVudENodW5rIC0gMSArIGRpcmVjdGlvbikgKiB0aGlzLm9wdHMuY2h1bmsgKyAxKTtcclxuICAgIH0sXHJcbiAgICBhbGxvd2VkUGFnZTogZnVuY3Rpb24gYWxsb3dlZFBhZ2UocGFnZSkge1xyXG4gICAgICByZXR1cm4gcGFnZSA+PSAxICYmIHBhZ2UgPD0gdGhpcy50b3RhbFBhZ2VzO1xyXG4gICAgfSxcclxuICAgIGFsbG93ZWRDaHVuazogZnVuY3Rpb24gYWxsb3dlZENodW5rKGRpcmVjdGlvbikge1xyXG4gICAgICByZXR1cm4gZGlyZWN0aW9uID09IDEgJiYgdGhpcy5jdXJyZW50Q2h1bmsgPCB0aGlzLnRvdGFsQ2h1bmtzIHx8IGRpcmVjdGlvbiA9PSAtMSAmJiB0aGlzLmN1cnJlbnRDaHVuayA+IDE7XHJcbiAgICB9LFxyXG4gICAgYWxsb3dlZFBhZ2VDbGFzczogZnVuY3Rpb24gYWxsb3dlZFBhZ2VDbGFzcyhkaXJlY3Rpb24pIHtcclxuICAgICAgcmV0dXJuIHRoaXMuYWxsb3dlZFBhZ2UoZGlyZWN0aW9uKSA/ICcnIDogdGhpcy5UaGVtZS5kaXNhYmxlZDtcclxuICAgIH0sXHJcbiAgICBhbGxvd2VkQ2h1bmtDbGFzczogZnVuY3Rpb24gYWxsb3dlZENodW5rQ2xhc3MoZGlyZWN0aW9uKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmFsbG93ZWRDaHVuayhkaXJlY3Rpb24pID8gJycgOiB0aGlzLlRoZW1lLmRpc2FibGVkO1xyXG4gICAgfSxcclxuICAgIGFjdGl2ZUNsYXNzOiBmdW5jdGlvbiBhY3RpdmVDbGFzcyhwYWdlKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnBhZ2UgPT0gcGFnZSA/IHRoaXMuVGhlbWUuYWN0aXZlIDogJyc7XHJcbiAgICB9LFxyXG4gICAgZm9ybWF0TnVtYmVyOiBmdW5jdGlvbiBmb3JtYXROdW1iZXIobnVtKSB7XHJcblxyXG4gICAgICBpZiAoIXRoaXMub3B0cy5mb3JtYXQpIHJldHVybiBudW07XHJcblxyXG4gICAgICByZXR1cm4gbnVtLnRvU3RyaW5nKCkucmVwbGFjZSgvXFxCKD89KFxcZHszfSkrKD8hXFxkKSkvZywgXCIsXCIpO1xyXG4gICAgfVxyXG4gIH0sXHJcbiAgYmVmb3JlRGVzdHJveTogZnVuY3Rpb24gYmVmb3JlRGVzdHJveSgpIHtcclxuICAgIGJ1cy4kb2ZmKCk7XHJcbiAgICBidXMuJGRlc3Ryb3koKTtcclxuICB9XHJcbn07XHJcblxyXG5mdW5jdGlvbiByYW5nZShzdGFydCwgY291bnQpIHtcclxuICByZXR1cm4gQXJyYXkuYXBwbHkoMCwgQXJyYXkoY291bnQpKS5tYXAoZnVuY3Rpb24gKGVsZW1lbnQsIGluZGV4KSB7XHJcbiAgICByZXR1cm4gaW5kZXggKyBzdGFydDtcclxuICB9KTtcclxufVxyXG4iLCIndXNlIHN0cmljdCc7XHJcblxyXG52YXIgX3Z1ZSA9IHJlcXVpcmUoJ3Z1ZScpO1xyXG5cclxudmFyIF92dWUyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfdnVlKTtcclxuXHJcbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XHJcblxyXG52YXIgYnVzID0gbmV3IF92dWUyLmRlZmF1bHQoKTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gYnVzOyIsIid1c2Ugc3RyaWN0JztcclxuXHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xyXG4gICAgdmFsdWU6IHRydWVcclxufSk7XHJcblxyXG5leHBvcnRzLmRlZmF1bHQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIGZvcm1hdDogdHJ1ZSxcclxuICAgICAgICBjaHVuazogMTAsXHJcbiAgICAgICAgY2h1bmtzTmF2aWdhdGlvbjogJ2ZpeGVkJyxcclxuICAgICAgICBlZGdlTmF2aWdhdGlvbjogZmFsc2UsXHJcbiAgICAgICAgdGhlbWU6ICdib290c3RyYXAzJyxcclxuICAgICAgICB0ZXh0czoge1xyXG4gICAgICAgICAgICBjb3VudDogJ1Nob3dpbmcge2Zyb219IHRvIHt0b30gb2Yge2NvdW50fSByZWNvcmRzfHtjb3VudH0gcmVjb3Jkc3xPbmUgcmVjb3JkJyxcclxuICAgICAgICAgICAgZmlyc3Q6ICdGaXJzdCcsXHJcbiAgICAgICAgICAgIGxhc3Q6ICdMYXN0J1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbn07IiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XHJcblxyXG4gIHJldHVybiBmdW5jdGlvbiAoaCkge1xyXG5cclxuICAgIHZhciB0aGVtZSA9IHRoaXMuVGhlbWU7XHJcbiAgICB2YXIgcHJldkNodW5rID0gJyc7XHJcbiAgICB2YXIgbmV4dENodW5rID0gJyc7XHJcbiAgICB2YXIgZmlyc3RQYWdlID0gJyc7XHJcbiAgICB2YXIgbGFzdFBhZ2UgPSAnJztcclxuICAgIHZhciBpdGVtcyA9IHRoaXMucGFnZXMubWFwKGZ1bmN0aW9uIChwYWdlKSB7XHJcblxyXG4gICAgICByZXR1cm4gaChcclxuICAgICAgICAnbGknLFxyXG4gICAgICAgIHsgJ2NsYXNzJzogJ1Z1ZVBhZ2luYXRpb25fX3BhZ2luYXRpb24taXRlbSAnICsgdGhlbWUuaXRlbSArICcgJyArIHRoaXMuYWN0aXZlQ2xhc3MocGFnZSksXHJcbiAgICAgICAgICBvbjoge1xyXG4gICAgICAgICAgICAnY2xpY2snOiB0aGlzLnNldFBhZ2UuYmluZCh0aGlzLCBwYWdlKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgW2goXHJcbiAgICAgICAgICAnYScsXHJcbiAgICAgICAgICB7ICdjbGFzcyc6IHRoZW1lLmxpbmsgKyAnICcgKyB0aGlzLmFjdGl2ZUNsYXNzKHBhZ2UpLFxyXG4gICAgICAgICAgICBhdHRyczogeyBocmVmOiAnamF2YXNjcmlwdDp2b2lkKDApJyxcclxuICAgICAgICAgICAgICByb2xlOiAnYnV0dG9uJyB9XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgW3BhZ2VdXHJcbiAgICAgICAgKV1cclxuICAgICAgKTtcclxuICAgIH0uYmluZCh0aGlzKSk7XHJcblxyXG4gICAgaWYgKHRoaXMub3B0cy5lZGdlTmF2aWdhdGlvbiAmJiB0aGlzLnRvdGFsQ2h1bmtzID4gMSkge1xyXG4gICAgICBmaXJzdFBhZ2UgPSBoKFxyXG4gICAgICAgICdsaScsXHJcbiAgICAgICAgeyAnY2xhc3MnOiAnVnVlUGFnaW5hdGlvbl9fcGFnaW5hdGlvbi1pdGVtICcgKyB0aGVtZS5pdGVtICsgJyAnICsgKHRoaXMucGFnZSA9PT0gMSA/IHRoZW1lLmRpc2FibGVkIDogJycpICsgJyBWdWVQYWdpbmF0aW9uX19wYWdpbmF0aW9uLWl0ZW0tcHJldi1jaHVuaycsXHJcbiAgICAgICAgICBvbjoge1xyXG4gICAgICAgICAgICAnY2xpY2snOiB0aGlzLnNldFBhZ2UuYmluZCh0aGlzLCAxKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgW2goXHJcbiAgICAgICAgICAnYScsXHJcbiAgICAgICAgICB7ICdjbGFzcyc6IHRoZW1lLmxpbmssXHJcbiAgICAgICAgICAgIGF0dHJzOiB7IGhyZWY6ICdqYXZhc2NyaXB0OnZvaWQoMCk7JyxcclxuICAgICAgICAgICAgICBkaXNhYmxlZDogdGhpcy5wYWdlID09PSAxIH1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBbdGhpcy5vcHRzLnRleHRzLmZpcnN0XVxyXG4gICAgICAgICldXHJcbiAgICAgICk7XHJcblxyXG4gICAgICBsYXN0UGFnZSA9IGgoXHJcbiAgICAgICAgJ2xpJyxcclxuICAgICAgICB7ICdjbGFzcyc6ICdWdWVQYWdpbmF0aW9uX19wYWdpbmF0aW9uLWl0ZW0gJyArIHRoZW1lLml0ZW0gKyAnICcgKyAodGhpcy5wYWdlID09PSB0aGlzLnRvdGFsUGFnZXMgPyB0aGVtZS5kaXNhYmxlZCA6ICcnKSArICcgVnVlUGFnaW5hdGlvbl9fcGFnaW5hdGlvbi1pdGVtLXByZXYtY2h1bmsnLFxyXG4gICAgICAgICAgb246IHtcclxuICAgICAgICAgICAgJ2NsaWNrJzogdGhpcy5zZXRQYWdlLmJpbmQodGhpcywgdGhpcy50b3RhbFBhZ2VzKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgW2goXHJcbiAgICAgICAgICAnYScsXHJcbiAgICAgICAgICB7ICdjbGFzcyc6IHRoZW1lLmxpbmssXHJcbiAgICAgICAgICAgIGF0dHJzOiB7IGhyZWY6ICdqYXZhc2NyaXB0OnZvaWQoMCk7JyxcclxuICAgICAgICAgICAgICBkaXNhYmxlZDogdGhpcy5wYWdlID09PSB0aGlzLnRvdGFsUGFnZXMgfVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFt0aGlzLm9wdHMudGV4dHMubGFzdF1cclxuICAgICAgICApXVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLm9wdHMuY2h1bmtzTmF2aWdhdGlvbiA9PT0gJ2ZpeGVkJykge1xyXG5cclxuICAgICAgcHJldkNodW5rID0gaChcclxuICAgICAgICAnbGknLFxyXG4gICAgICAgIHsgJ2NsYXNzJzogJ1Z1ZVBhZ2luYXRpb25fX3BhZ2luYXRpb24taXRlbSAnICsgdGhlbWUuaXRlbSArICcgJyArIHRoZW1lLnByZXYgKyAnIFZ1ZVBhZ2luYXRpb25fX3BhZ2luYXRpb24taXRlbS1wcmV2LWNodW5rICcgKyB0aGlzLmFsbG93ZWRDaHVua0NsYXNzKC0xKSxcclxuICAgICAgICAgIG9uOiB7XHJcbiAgICAgICAgICAgICdjbGljayc6IHRoaXMuc2V0Q2h1bmsuYmluZCh0aGlzLCAtMSlcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFtoKFxyXG4gICAgICAgICAgJ2EnLFxyXG4gICAgICAgICAgeyAnY2xhc3MnOiB0aGVtZS5saW5rLFxyXG4gICAgICAgICAgICBhdHRyczogeyBocmVmOiAnamF2YXNjcmlwdDp2b2lkKDApOycsXHJcbiAgICAgICAgICAgICAgZGlzYWJsZWQ6ICEhdGhpcy5hbGxvd2VkQ2h1bmtDbGFzcygtMSkgfVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFsnPDwnXVxyXG4gICAgICAgICldXHJcbiAgICAgICk7XHJcblxyXG4gICAgICBuZXh0Q2h1bmsgPSBoKFxyXG4gICAgICAgICdsaScsXHJcbiAgICAgICAgeyAnY2xhc3MnOiAnVnVlUGFnaW5hdGlvbl9fcGFnaW5hdGlvbi1pdGVtICcgKyB0aGVtZS5pdGVtICsgJyAnICsgdGhlbWUubmV4dCArICcgVnVlUGFnaW5hdGlvbl9fcGFnaW5hdGlvbi1pdGVtLW5leHQtY2h1bmsgJyArIHRoaXMuYWxsb3dlZENodW5rQ2xhc3MoMSksXHJcbiAgICAgICAgICBvbjoge1xyXG4gICAgICAgICAgICAnY2xpY2snOiB0aGlzLnNldENodW5rLmJpbmQodGhpcywgMSlcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFtoKFxyXG4gICAgICAgICAgJ2EnLFxyXG4gICAgICAgICAgeyAnY2xhc3MnOiB0aGVtZS5saW5rLFxyXG4gICAgICAgICAgICBhdHRyczogeyBocmVmOiAnamF2YXNjcmlwdDp2b2lkKDApOycsXHJcbiAgICAgICAgICAgICAgZGlzYWJsZWQ6ICEhdGhpcy5hbGxvd2VkQ2h1bmtDbGFzcygxKSB9XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgWyc+PiddXHJcbiAgICAgICAgKV1cclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gaChcclxuICAgICAgJ2RpdicsXHJcbiAgICAgIHsgJ2NsYXNzJzogJ1Z1ZVBhZ2luYXRpb24gJyArIHRoZW1lLndyYXBwZXIgfSxcclxuICAgICAgW2goXHJcbiAgICAgICAgJ25hdicsXHJcbiAgICAgICAgeyAnY2xhc3MnOiAnJyArIHRoZW1lLm5hdiB9LFxyXG4gICAgICAgIFtoKFxyXG4gICAgICAgICAgJ3VsJyxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgZGlyZWN0aXZlczogW3tcclxuICAgICAgICAgICAgICBuYW1lOiAnc2hvdycsXHJcbiAgICAgICAgICAgICAgdmFsdWU6IHRoaXMudG90YWxQYWdlcyA+IDFcclxuICAgICAgICAgICAgfV0sXHJcblxyXG4gICAgICAgICAgICAnY2xhc3MnOiB0aGVtZS5saXN0ICsgJyBWdWVQYWdpbmF0aW9uX19wYWdpbmF0aW9uJyB9LFxyXG4gICAgICAgICAgW2ZpcnN0UGFnZSwgcHJldkNodW5rLCBoKFxyXG4gICAgICAgICAgICAnbGknLFxyXG4gICAgICAgICAgICB7ICdjbGFzcyc6ICdWdWVQYWdpbmF0aW9uX19wYWdpbmF0aW9uLWl0ZW0gJyArIHRoZW1lLml0ZW0gKyAnICcgKyB0aGVtZS5wcmV2ICsgJyBWdWVQYWdpbmF0aW9uX19wYWdpbmF0aW9uLWl0ZW0tcHJldi1wYWdlICcgKyB0aGlzLmFsbG93ZWRQYWdlQ2xhc3ModGhpcy5wYWdlIC0gMSksXHJcbiAgICAgICAgICAgICAgb246IHtcclxuICAgICAgICAgICAgICAgICdjbGljayc6IHRoaXMucHJldi5iaW5kKHRoaXMpXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBbaChcclxuICAgICAgICAgICAgICAnYScsXHJcbiAgICAgICAgICAgICAgeyAnY2xhc3MnOiB0aGVtZS5saW5rLFxyXG4gICAgICAgICAgICAgICAgYXR0cnM6IHsgaHJlZjogJ2phdmFzY3JpcHQ6dm9pZCgwKTsnLFxyXG4gICAgICAgICAgICAgICAgICBkaXNhYmxlZDogISF0aGlzLmFsbG93ZWRQYWdlQ2xhc3ModGhpcy5wYWdlIC0gMSlcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIFsnPCddXHJcbiAgICAgICAgICAgICldXHJcbiAgICAgICAgICApLCBpdGVtcywgaChcclxuICAgICAgICAgICAgJ2xpJyxcclxuICAgICAgICAgICAgeyAnY2xhc3MnOiAnVnVlUGFnaW5hdGlvbl9fcGFnaW5hdGlvbi1pdGVtICcgKyB0aGVtZS5pdGVtICsgJyAnICsgdGhlbWUubmV4dCArICcgVnVlUGFnaW5hdGlvbl9fcGFnaW5hdGlvbi1pdGVtLW5leHQtcGFnZSAnICsgdGhpcy5hbGxvd2VkUGFnZUNsYXNzKHRoaXMucGFnZSArIDEpLFxyXG4gICAgICAgICAgICAgIG9uOiB7XHJcbiAgICAgICAgICAgICAgICAnY2xpY2snOiB0aGlzLm5leHQuYmluZCh0aGlzKVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgW2goXHJcbiAgICAgICAgICAgICAgJ2EnLFxyXG4gICAgICAgICAgICAgIHsgJ2NsYXNzJzogdGhlbWUubGluayxcclxuICAgICAgICAgICAgICAgIGF0dHJzOiB7IGhyZWY6ICdqYXZhc2NyaXB0OnZvaWQoMCk7JyxcclxuICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ6ICEhdGhpcy5hbGxvd2VkUGFnZUNsYXNzKHRoaXMucGFnZSArIDEpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICBbJz4nXVxyXG4gICAgICAgICAgICApXVxyXG4gICAgICAgICAgKSwgbmV4dENodW5rLCBsYXN0UGFnZV1cclxuICAgICAgICApLCBoKFxyXG4gICAgICAgICAgJ3AnLFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBkaXJlY3RpdmVzOiBbe1xyXG4gICAgICAgICAgICAgIG5hbWU6ICdzaG93JyxcclxuICAgICAgICAgICAgICB2YWx1ZTogcGFyc2VJbnQodGhpcy5yZWNvcmRzKVxyXG4gICAgICAgICAgICB9XSxcclxuXHJcbiAgICAgICAgICAgICdjbGFzcyc6ICdWdWVQYWdpbmF0aW9uX19jb3VudCAnICsgdGhlbWUuY291bnQgfSxcclxuICAgICAgICAgIFt0aGlzLmNvdW50XVxyXG4gICAgICAgICldXHJcbiAgICAgICldXHJcbiAgICApO1xyXG4gIH07XHJcbn07IiwiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBuYXY6ICcnLFxuICAgIGNvdW50OiAnJyxcbiAgICB3cmFwcGVyOiAnJyxcbiAgICBsaXN0OiAncGFnaW5hdGlvbicsXG4gICAgaXRlbTogJ3BhZ2UtaXRlbScsXG4gICAgbGluazogJ3BhZ2UtbGluaycsXG4gICAgbmV4dDogJycsXG4gICAgcHJldjogJycsXG4gICAgYWN0aXZlOiAnYWN0aXZlJyxcbiAgICBkaXNhYmxlZDogJ2Rpc2FibGVkJ1xufTsiLCIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIG5hdjogJycsXG4gICAgY291bnQ6ICcnLFxuICAgIHdyYXBwZXI6ICcnLFxuICAgIGxpc3Q6ICdwYWdpbmF0aW9uJyxcbiAgICBpdGVtOiAncGFnZS1pdGVtJyxcbiAgICBsaW5rOiAncGFnZS1saW5rJyxcbiAgICBuZXh0OiAnJyxcbiAgICBwcmV2OiAnJyxcbiAgICBhY3RpdmU6ICdhY3RpdmUnLFxuICAgIGRpc2FibGVkOiAnZGlzYWJsZWQnXG59OyIsIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgbmF2OiAnJyxcbiAgICBjb3VudDogJycsXG4gICAgd3JhcHBlcjogJ3BhZ2luYXRpb24nLFxuICAgIGxpc3Q6ICdwYWdpbmF0aW9uLWxpc3QnLFxuICAgIGl0ZW06ICcnLFxuICAgIGxpbms6ICdwYWdpbmF0aW9uLWxpbmsnLFxuICAgIG5leHQ6ICcnLFxuICAgIHByZXY6ICcnLFxuICAgIGFjdGl2ZTogJ2lzLWN1cnJlbnQnLFxuICAgIGRpc2FibGVkOiAnJyAvLyB1c2VzIHRoZSBkaXNhYmxlZCBIVE1MIGF0dGlyYnV0ZVxufTsiLCJ2YXIgUGFnaW5hdGlvbiA9IHJlcXVpcmUoJy4vY29tcGlsZWQvUGFnaW5hdGlvbicpO1xyXG52YXIgUGFnaW5hdGlvbkV2ZW50ID0gcmVxdWlyZSgnLi9jb21waWxlZC9idXMnKTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0ge1xyXG4gIFBhZ2luYXRpb246UGFnaW5hdGlvbixcclxuICBQYWdpbmF0aW9uRXZlbnQ6UGFnaW5hdGlvbkV2ZW50XHJcbn1cclxuIiwiLyohXG4gICogdnVlLXJvdXRlciB2My4xLjNcbiAgKiAoYykgMjAxOSBFdmFuIFlvdVxuICAqIEBsaWNlbnNlIE1JVFxuICAqL1xuJ3VzZSBzdHJpY3QnO1xuXG4vKiAgKi9cblxuZnVuY3Rpb24gYXNzZXJ0IChjb25kaXRpb24sIG1lc3NhZ2UpIHtcbiAgaWYgKCFjb25kaXRpb24pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoKFwiW3Z1ZS1yb3V0ZXJdIFwiICsgbWVzc2FnZSkpXG4gIH1cbn1cblxuZnVuY3Rpb24gd2FybiAoY29uZGl0aW9uLCBtZXNzYWdlKSB7XG4gIGlmIChcInByb2R1Y3Rpb25cIiAhPT0gJ3Byb2R1Y3Rpb24nICYmICFjb25kaXRpb24pIHtcbiAgICB0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcgJiYgY29uc29sZS53YXJuKChcIlt2dWUtcm91dGVyXSBcIiArIG1lc3NhZ2UpKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpc0Vycm9yIChlcnIpIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlcnIpLmluZGV4T2YoJ0Vycm9yJykgPiAtMVxufVxuXG5mdW5jdGlvbiBpc0V4dGVuZGVkRXJyb3IgKGNvbnN0cnVjdG9yLCBlcnIpIHtcbiAgcmV0dXJuIChcbiAgICBlcnIgaW5zdGFuY2VvZiBjb25zdHJ1Y3RvciB8fFxuICAgIC8vIF9uYW1lIGlzIHRvIHN1cHBvcnQgSUU5IHRvb1xuICAgIChlcnIgJiYgKGVyci5uYW1lID09PSBjb25zdHJ1Y3Rvci5uYW1lIHx8IGVyci5fbmFtZSA9PT0gY29uc3RydWN0b3IuX25hbWUpKVxuICApXG59XG5cbmZ1bmN0aW9uIGV4dGVuZCAoYSwgYikge1xuICBmb3IgKHZhciBrZXkgaW4gYikge1xuICAgIGFba2V5XSA9IGJba2V5XTtcbiAgfVxuICByZXR1cm4gYVxufVxuXG52YXIgVmlldyA9IHtcbiAgbmFtZTogJ1JvdXRlclZpZXcnLFxuICBmdW5jdGlvbmFsOiB0cnVlLFxuICBwcm9wczoge1xuICAgIG5hbWU6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICdkZWZhdWx0J1xuICAgIH1cbiAgfSxcbiAgcmVuZGVyOiBmdW5jdGlvbiByZW5kZXIgKF8sIHJlZikge1xuICAgIHZhciBwcm9wcyA9IHJlZi5wcm9wcztcbiAgICB2YXIgY2hpbGRyZW4gPSByZWYuY2hpbGRyZW47XG4gICAgdmFyIHBhcmVudCA9IHJlZi5wYXJlbnQ7XG4gICAgdmFyIGRhdGEgPSByZWYuZGF0YTtcblxuICAgIC8vIHVzZWQgYnkgZGV2dG9vbHMgdG8gZGlzcGxheSBhIHJvdXRlci12aWV3IGJhZGdlXG4gICAgZGF0YS5yb3V0ZXJWaWV3ID0gdHJ1ZTtcblxuICAgIC8vIGRpcmVjdGx5IHVzZSBwYXJlbnQgY29udGV4dCdzIGNyZWF0ZUVsZW1lbnQoKSBmdW5jdGlvblxuICAgIC8vIHNvIHRoYXQgY29tcG9uZW50cyByZW5kZXJlZCBieSByb3V0ZXItdmlldyBjYW4gcmVzb2x2ZSBuYW1lZCBzbG90c1xuICAgIHZhciBoID0gcGFyZW50LiRjcmVhdGVFbGVtZW50O1xuICAgIHZhciBuYW1lID0gcHJvcHMubmFtZTtcbiAgICB2YXIgcm91dGUgPSBwYXJlbnQuJHJvdXRlO1xuICAgIHZhciBjYWNoZSA9IHBhcmVudC5fcm91dGVyVmlld0NhY2hlIHx8IChwYXJlbnQuX3JvdXRlclZpZXdDYWNoZSA9IHt9KTtcblxuICAgIC8vIGRldGVybWluZSBjdXJyZW50IHZpZXcgZGVwdGgsIGFsc28gY2hlY2sgdG8gc2VlIGlmIHRoZSB0cmVlXG4gICAgLy8gaGFzIGJlZW4gdG9nZ2xlZCBpbmFjdGl2ZSBidXQga2VwdC1hbGl2ZS5cbiAgICB2YXIgZGVwdGggPSAwO1xuICAgIHZhciBpbmFjdGl2ZSA9IGZhbHNlO1xuICAgIHdoaWxlIChwYXJlbnQgJiYgcGFyZW50Ll9yb3V0ZXJSb290ICE9PSBwYXJlbnQpIHtcbiAgICAgIHZhciB2bm9kZURhdGEgPSBwYXJlbnQuJHZub2RlICYmIHBhcmVudC4kdm5vZGUuZGF0YTtcbiAgICAgIGlmICh2bm9kZURhdGEpIHtcbiAgICAgICAgaWYgKHZub2RlRGF0YS5yb3V0ZXJWaWV3KSB7XG4gICAgICAgICAgZGVwdGgrKztcbiAgICAgICAgfVxuICAgICAgICBpZiAodm5vZGVEYXRhLmtlZXBBbGl2ZSAmJiBwYXJlbnQuX2luYWN0aXZlKSB7XG4gICAgICAgICAgaW5hY3RpdmUgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBwYXJlbnQgPSBwYXJlbnQuJHBhcmVudDtcbiAgICB9XG4gICAgZGF0YS5yb3V0ZXJWaWV3RGVwdGggPSBkZXB0aDtcblxuICAgIC8vIHJlbmRlciBwcmV2aW91cyB2aWV3IGlmIHRoZSB0cmVlIGlzIGluYWN0aXZlIGFuZCBrZXB0LWFsaXZlXG4gICAgaWYgKGluYWN0aXZlKSB7XG4gICAgICByZXR1cm4gaChjYWNoZVtuYW1lXSwgZGF0YSwgY2hpbGRyZW4pXG4gICAgfVxuXG4gICAgdmFyIG1hdGNoZWQgPSByb3V0ZS5tYXRjaGVkW2RlcHRoXTtcbiAgICAvLyByZW5kZXIgZW1wdHkgbm9kZSBpZiBubyBtYXRjaGVkIHJvdXRlXG4gICAgaWYgKCFtYXRjaGVkKSB7XG4gICAgICBjYWNoZVtuYW1lXSA9IG51bGw7XG4gICAgICByZXR1cm4gaCgpXG4gICAgfVxuXG4gICAgdmFyIGNvbXBvbmVudCA9IGNhY2hlW25hbWVdID0gbWF0Y2hlZC5jb21wb25lbnRzW25hbWVdO1xuXG4gICAgLy8gYXR0YWNoIGluc3RhbmNlIHJlZ2lzdHJhdGlvbiBob29rXG4gICAgLy8gdGhpcyB3aWxsIGJlIGNhbGxlZCBpbiB0aGUgaW5zdGFuY2UncyBpbmplY3RlZCBsaWZlY3ljbGUgaG9va3NcbiAgICBkYXRhLnJlZ2lzdGVyUm91dGVJbnN0YW5jZSA9IGZ1bmN0aW9uICh2bSwgdmFsKSB7XG4gICAgICAvLyB2YWwgY291bGQgYmUgdW5kZWZpbmVkIGZvciB1bnJlZ2lzdHJhdGlvblxuICAgICAgdmFyIGN1cnJlbnQgPSBtYXRjaGVkLmluc3RhbmNlc1tuYW1lXTtcbiAgICAgIGlmIChcbiAgICAgICAgKHZhbCAmJiBjdXJyZW50ICE9PSB2bSkgfHxcbiAgICAgICAgKCF2YWwgJiYgY3VycmVudCA9PT0gdm0pXG4gICAgICApIHtcbiAgICAgICAgbWF0Y2hlZC5pbnN0YW5jZXNbbmFtZV0gPSB2YWw7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gYWxzbyByZWdpc3RlciBpbnN0YW5jZSBpbiBwcmVwYXRjaCBob29rXG4gICAgLy8gaW4gY2FzZSB0aGUgc2FtZSBjb21wb25lbnQgaW5zdGFuY2UgaXMgcmV1c2VkIGFjcm9zcyBkaWZmZXJlbnQgcm91dGVzXG4gICAgOyhkYXRhLmhvb2sgfHwgKGRhdGEuaG9vayA9IHt9KSkucHJlcGF0Y2ggPSBmdW5jdGlvbiAoXywgdm5vZGUpIHtcbiAgICAgIG1hdGNoZWQuaW5zdGFuY2VzW25hbWVdID0gdm5vZGUuY29tcG9uZW50SW5zdGFuY2U7XG4gICAgfTtcblxuICAgIC8vIHJlZ2lzdGVyIGluc3RhbmNlIGluIGluaXQgaG9va1xuICAgIC8vIGluIGNhc2Uga2VwdC1hbGl2ZSBjb21wb25lbnQgYmUgYWN0aXZlZCB3aGVuIHJvdXRlcyBjaGFuZ2VkXG4gICAgZGF0YS5ob29rLmluaXQgPSBmdW5jdGlvbiAodm5vZGUpIHtcbiAgICAgIGlmICh2bm9kZS5kYXRhLmtlZXBBbGl2ZSAmJlxuICAgICAgICB2bm9kZS5jb21wb25lbnRJbnN0YW5jZSAmJlxuICAgICAgICB2bm9kZS5jb21wb25lbnRJbnN0YW5jZSAhPT0gbWF0Y2hlZC5pbnN0YW5jZXNbbmFtZV1cbiAgICAgICkge1xuICAgICAgICBtYXRjaGVkLmluc3RhbmNlc1tuYW1lXSA9IHZub2RlLmNvbXBvbmVudEluc3RhbmNlO1xuICAgICAgfVxuICAgIH07XG5cbiAgICAvLyByZXNvbHZlIHByb3BzXG4gICAgdmFyIHByb3BzVG9QYXNzID0gZGF0YS5wcm9wcyA9IHJlc29sdmVQcm9wcyhyb3V0ZSwgbWF0Y2hlZC5wcm9wcyAmJiBtYXRjaGVkLnByb3BzW25hbWVdKTtcbiAgICBpZiAocHJvcHNUb1Bhc3MpIHtcbiAgICAgIC8vIGNsb25lIHRvIHByZXZlbnQgbXV0YXRpb25cbiAgICAgIHByb3BzVG9QYXNzID0gZGF0YS5wcm9wcyA9IGV4dGVuZCh7fSwgcHJvcHNUb1Bhc3MpO1xuICAgICAgLy8gcGFzcyBub24tZGVjbGFyZWQgcHJvcHMgYXMgYXR0cnNcbiAgICAgIHZhciBhdHRycyA9IGRhdGEuYXR0cnMgPSBkYXRhLmF0dHJzIHx8IHt9O1xuICAgICAgZm9yICh2YXIga2V5IGluIHByb3BzVG9QYXNzKSB7XG4gICAgICAgIGlmICghY29tcG9uZW50LnByb3BzIHx8ICEoa2V5IGluIGNvbXBvbmVudC5wcm9wcykpIHtcbiAgICAgICAgICBhdHRyc1trZXldID0gcHJvcHNUb1Bhc3Nba2V5XTtcbiAgICAgICAgICBkZWxldGUgcHJvcHNUb1Bhc3Nba2V5XTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBoKGNvbXBvbmVudCwgZGF0YSwgY2hpbGRyZW4pXG4gIH1cbn07XG5cbmZ1bmN0aW9uIHJlc29sdmVQcm9wcyAocm91dGUsIGNvbmZpZykge1xuICBzd2l0Y2ggKHR5cGVvZiBjb25maWcpIHtcbiAgICBjYXNlICd1bmRlZmluZWQnOlxuICAgICAgcmV0dXJuXG4gICAgY2FzZSAnb2JqZWN0JzpcbiAgICAgIHJldHVybiBjb25maWdcbiAgICBjYXNlICdmdW5jdGlvbic6XG4gICAgICByZXR1cm4gY29uZmlnKHJvdXRlKVxuICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgcmV0dXJuIGNvbmZpZyA/IHJvdXRlLnBhcmFtcyA6IHVuZGVmaW5lZFxuICAgIGRlZmF1bHQ6XG4gICAgICBpZiAoXCJwcm9kdWN0aW9uXCIgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICB3YXJuKFxuICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgIFwicHJvcHMgaW4gXFxcIlwiICsgKHJvdXRlLnBhdGgpICsgXCJcXFwiIGlzIGEgXCIgKyAodHlwZW9mIGNvbmZpZykgKyBcIiwgXCIgK1xuICAgICAgICAgIFwiZXhwZWN0aW5nIGFuIG9iamVjdCwgZnVuY3Rpb24gb3IgYm9vbGVhbi5cIlxuICAgICAgICApO1xuICAgICAgfVxuICB9XG59XG5cbi8qICAqL1xuXG52YXIgZW5jb2RlUmVzZXJ2ZVJFID0gL1shJygpKl0vZztcbnZhciBlbmNvZGVSZXNlcnZlUmVwbGFjZXIgPSBmdW5jdGlvbiAoYykgeyByZXR1cm4gJyUnICsgYy5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KTsgfTtcbnZhciBjb21tYVJFID0gLyUyQy9nO1xuXG4vLyBmaXhlZCBlbmNvZGVVUklDb21wb25lbnQgd2hpY2ggaXMgbW9yZSBjb25mb3JtYW50IHRvIFJGQzM5ODY6XG4vLyAtIGVzY2FwZXMgWyEnKCkqXVxuLy8gLSBwcmVzZXJ2ZSBjb21tYXNcbnZhciBlbmNvZGUgPSBmdW5jdGlvbiAoc3RyKSB7IHJldHVybiBlbmNvZGVVUklDb21wb25lbnQoc3RyKVxuICAucmVwbGFjZShlbmNvZGVSZXNlcnZlUkUsIGVuY29kZVJlc2VydmVSZXBsYWNlcilcbiAgLnJlcGxhY2UoY29tbWFSRSwgJywnKTsgfTtcblxudmFyIGRlY29kZSA9IGRlY29kZVVSSUNvbXBvbmVudDtcblxuZnVuY3Rpb24gcmVzb2x2ZVF1ZXJ5IChcbiAgcXVlcnksXG4gIGV4dHJhUXVlcnksXG4gIF9wYXJzZVF1ZXJ5XG4pIHtcbiAgaWYgKCBleHRyYVF1ZXJ5ID09PSB2b2lkIDAgKSBleHRyYVF1ZXJ5ID0ge307XG5cbiAgdmFyIHBhcnNlID0gX3BhcnNlUXVlcnkgfHwgcGFyc2VRdWVyeTtcbiAgdmFyIHBhcnNlZFF1ZXJ5O1xuICB0cnkge1xuICAgIHBhcnNlZFF1ZXJ5ID0gcGFyc2UocXVlcnkgfHwgJycpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgXCJwcm9kdWN0aW9uXCIgIT09ICdwcm9kdWN0aW9uJyAmJiB3YXJuKGZhbHNlLCBlLm1lc3NhZ2UpO1xuICAgIHBhcnNlZFF1ZXJ5ID0ge307XG4gIH1cbiAgZm9yICh2YXIga2V5IGluIGV4dHJhUXVlcnkpIHtcbiAgICBwYXJzZWRRdWVyeVtrZXldID0gZXh0cmFRdWVyeVtrZXldO1xuICB9XG4gIHJldHVybiBwYXJzZWRRdWVyeVxufVxuXG5mdW5jdGlvbiBwYXJzZVF1ZXJ5IChxdWVyeSkge1xuICB2YXIgcmVzID0ge307XG5cbiAgcXVlcnkgPSBxdWVyeS50cmltKCkucmVwbGFjZSgvXihcXD98I3wmKS8sICcnKTtcblxuICBpZiAoIXF1ZXJ5KSB7XG4gICAgcmV0dXJuIHJlc1xuICB9XG5cbiAgcXVlcnkuc3BsaXQoJyYnKS5mb3JFYWNoKGZ1bmN0aW9uIChwYXJhbSkge1xuICAgIHZhciBwYXJ0cyA9IHBhcmFtLnJlcGxhY2UoL1xcKy9nLCAnICcpLnNwbGl0KCc9Jyk7XG4gICAgdmFyIGtleSA9IGRlY29kZShwYXJ0cy5zaGlmdCgpKTtcbiAgICB2YXIgdmFsID0gcGFydHMubGVuZ3RoID4gMFxuICAgICAgPyBkZWNvZGUocGFydHMuam9pbignPScpKVxuICAgICAgOiBudWxsO1xuXG4gICAgaWYgKHJlc1trZXldID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJlc1trZXldID0gdmFsO1xuICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShyZXNba2V5XSkpIHtcbiAgICAgIHJlc1trZXldLnB1c2godmFsKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzW2tleV0gPSBbcmVzW2tleV0sIHZhbF07XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gcmVzXG59XG5cbmZ1bmN0aW9uIHN0cmluZ2lmeVF1ZXJ5IChvYmopIHtcbiAgdmFyIHJlcyA9IG9iaiA/IE9iamVjdC5rZXlzKG9iaikubWFwKGZ1bmN0aW9uIChrZXkpIHtcbiAgICB2YXIgdmFsID0gb2JqW2tleV07XG5cbiAgICBpZiAodmFsID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiAnJ1xuICAgIH1cblxuICAgIGlmICh2YWwgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBlbmNvZGUoa2V5KVxuICAgIH1cblxuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbCkpIHtcbiAgICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICAgIHZhbC5mb3JFYWNoKGZ1bmN0aW9uICh2YWwyKSB7XG4gICAgICAgIGlmICh2YWwyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgICBpZiAodmFsMiA9PT0gbnVsbCkge1xuICAgICAgICAgIHJlc3VsdC5wdXNoKGVuY29kZShrZXkpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXN1bHQucHVzaChlbmNvZGUoa2V5KSArICc9JyArIGVuY29kZSh2YWwyKSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHJlc3VsdC5qb2luKCcmJylcbiAgICB9XG5cbiAgICByZXR1cm4gZW5jb2RlKGtleSkgKyAnPScgKyBlbmNvZGUodmFsKVxuICB9KS5maWx0ZXIoZnVuY3Rpb24gKHgpIHsgcmV0dXJuIHgubGVuZ3RoID4gMDsgfSkuam9pbignJicpIDogbnVsbDtcbiAgcmV0dXJuIHJlcyA/IChcIj9cIiArIHJlcykgOiAnJ1xufVxuXG4vKiAgKi9cblxudmFyIHRyYWlsaW5nU2xhc2hSRSA9IC9cXC8/JC87XG5cbmZ1bmN0aW9uIGNyZWF0ZVJvdXRlIChcbiAgcmVjb3JkLFxuICBsb2NhdGlvbixcbiAgcmVkaXJlY3RlZEZyb20sXG4gIHJvdXRlclxuKSB7XG4gIHZhciBzdHJpbmdpZnlRdWVyeSA9IHJvdXRlciAmJiByb3V0ZXIub3B0aW9ucy5zdHJpbmdpZnlRdWVyeTtcblxuICB2YXIgcXVlcnkgPSBsb2NhdGlvbi5xdWVyeSB8fCB7fTtcbiAgdHJ5IHtcbiAgICBxdWVyeSA9IGNsb25lKHF1ZXJ5KTtcbiAgfSBjYXRjaCAoZSkge31cblxuICB2YXIgcm91dGUgPSB7XG4gICAgbmFtZTogbG9jYXRpb24ubmFtZSB8fCAocmVjb3JkICYmIHJlY29yZC5uYW1lKSxcbiAgICBtZXRhOiAocmVjb3JkICYmIHJlY29yZC5tZXRhKSB8fCB7fSxcbiAgICBwYXRoOiBsb2NhdGlvbi5wYXRoIHx8ICcvJyxcbiAgICBoYXNoOiBsb2NhdGlvbi5oYXNoIHx8ICcnLFxuICAgIHF1ZXJ5OiBxdWVyeSxcbiAgICBwYXJhbXM6IGxvY2F0aW9uLnBhcmFtcyB8fCB7fSxcbiAgICBmdWxsUGF0aDogZ2V0RnVsbFBhdGgobG9jYXRpb24sIHN0cmluZ2lmeVF1ZXJ5KSxcbiAgICBtYXRjaGVkOiByZWNvcmQgPyBmb3JtYXRNYXRjaChyZWNvcmQpIDogW11cbiAgfTtcbiAgaWYgKHJlZGlyZWN0ZWRGcm9tKSB7XG4gICAgcm91dGUucmVkaXJlY3RlZEZyb20gPSBnZXRGdWxsUGF0aChyZWRpcmVjdGVkRnJvbSwgc3RyaW5naWZ5UXVlcnkpO1xuICB9XG4gIHJldHVybiBPYmplY3QuZnJlZXplKHJvdXRlKVxufVxuXG5mdW5jdGlvbiBjbG9uZSAodmFsdWUpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgcmV0dXJuIHZhbHVlLm1hcChjbG9uZSlcbiAgfSBlbHNlIGlmICh2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgdmFyIHJlcyA9IHt9O1xuICAgIGZvciAodmFyIGtleSBpbiB2YWx1ZSkge1xuICAgICAgcmVzW2tleV0gPSBjbG9uZSh2YWx1ZVtrZXldKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB2YWx1ZVxuICB9XG59XG5cbi8vIHRoZSBzdGFydGluZyByb3V0ZSB0aGF0IHJlcHJlc2VudHMgdGhlIGluaXRpYWwgc3RhdGVcbnZhciBTVEFSVCA9IGNyZWF0ZVJvdXRlKG51bGwsIHtcbiAgcGF0aDogJy8nXG59KTtcblxuZnVuY3Rpb24gZm9ybWF0TWF0Y2ggKHJlY29yZCkge1xuICB2YXIgcmVzID0gW107XG4gIHdoaWxlIChyZWNvcmQpIHtcbiAgICByZXMudW5zaGlmdChyZWNvcmQpO1xuICAgIHJlY29yZCA9IHJlY29yZC5wYXJlbnQ7XG4gIH1cbiAgcmV0dXJuIHJlc1xufVxuXG5mdW5jdGlvbiBnZXRGdWxsUGF0aCAoXG4gIHJlZixcbiAgX3N0cmluZ2lmeVF1ZXJ5XG4pIHtcbiAgdmFyIHBhdGggPSByZWYucGF0aDtcbiAgdmFyIHF1ZXJ5ID0gcmVmLnF1ZXJ5OyBpZiAoIHF1ZXJ5ID09PSB2b2lkIDAgKSBxdWVyeSA9IHt9O1xuICB2YXIgaGFzaCA9IHJlZi5oYXNoOyBpZiAoIGhhc2ggPT09IHZvaWQgMCApIGhhc2ggPSAnJztcblxuICB2YXIgc3RyaW5naWZ5ID0gX3N0cmluZ2lmeVF1ZXJ5IHx8IHN0cmluZ2lmeVF1ZXJ5O1xuICByZXR1cm4gKHBhdGggfHwgJy8nKSArIHN0cmluZ2lmeShxdWVyeSkgKyBoYXNoXG59XG5cbmZ1bmN0aW9uIGlzU2FtZVJvdXRlIChhLCBiKSB7XG4gIGlmIChiID09PSBTVEFSVCkge1xuICAgIHJldHVybiBhID09PSBiXG4gIH0gZWxzZSBpZiAoIWIpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfSBlbHNlIGlmIChhLnBhdGggJiYgYi5wYXRoKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIGEucGF0aC5yZXBsYWNlKHRyYWlsaW5nU2xhc2hSRSwgJycpID09PSBiLnBhdGgucmVwbGFjZSh0cmFpbGluZ1NsYXNoUkUsICcnKSAmJlxuICAgICAgYS5oYXNoID09PSBiLmhhc2ggJiZcbiAgICAgIGlzT2JqZWN0RXF1YWwoYS5xdWVyeSwgYi5xdWVyeSlcbiAgICApXG4gIH0gZWxzZSBpZiAoYS5uYW1lICYmIGIubmFtZSkge1xuICAgIHJldHVybiAoXG4gICAgICBhLm5hbWUgPT09IGIubmFtZSAmJlxuICAgICAgYS5oYXNoID09PSBiLmhhc2ggJiZcbiAgICAgIGlzT2JqZWN0RXF1YWwoYS5xdWVyeSwgYi5xdWVyeSkgJiZcbiAgICAgIGlzT2JqZWN0RXF1YWwoYS5wYXJhbXMsIGIucGFyYW1zKVxuICAgIClcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxufVxuXG5mdW5jdGlvbiBpc09iamVjdEVxdWFsIChhLCBiKSB7XG4gIGlmICggYSA9PT0gdm9pZCAwICkgYSA9IHt9O1xuICBpZiAoIGIgPT09IHZvaWQgMCApIGIgPSB7fTtcblxuICAvLyBoYW5kbGUgbnVsbCB2YWx1ZSAjMTU2NlxuICBpZiAoIWEgfHwgIWIpIHsgcmV0dXJuIGEgPT09IGIgfVxuICB2YXIgYUtleXMgPSBPYmplY3Qua2V5cyhhKTtcbiAgdmFyIGJLZXlzID0gT2JqZWN0LmtleXMoYik7XG4gIGlmIChhS2V5cy5sZW5ndGggIT09IGJLZXlzLmxlbmd0aCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG4gIHJldHVybiBhS2V5cy5ldmVyeShmdW5jdGlvbiAoa2V5KSB7XG4gICAgdmFyIGFWYWwgPSBhW2tleV07XG4gICAgdmFyIGJWYWwgPSBiW2tleV07XG4gICAgLy8gY2hlY2sgbmVzdGVkIGVxdWFsaXR5XG4gICAgaWYgKHR5cGVvZiBhVmFsID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgYlZhbCA9PT0gJ29iamVjdCcpIHtcbiAgICAgIHJldHVybiBpc09iamVjdEVxdWFsKGFWYWwsIGJWYWwpXG4gICAgfVxuICAgIHJldHVybiBTdHJpbmcoYVZhbCkgPT09IFN0cmluZyhiVmFsKVxuICB9KVxufVxuXG5mdW5jdGlvbiBpc0luY2x1ZGVkUm91dGUgKGN1cnJlbnQsIHRhcmdldCkge1xuICByZXR1cm4gKFxuICAgIGN1cnJlbnQucGF0aC5yZXBsYWNlKHRyYWlsaW5nU2xhc2hSRSwgJy8nKS5pbmRleE9mKFxuICAgICAgdGFyZ2V0LnBhdGgucmVwbGFjZSh0cmFpbGluZ1NsYXNoUkUsICcvJylcbiAgICApID09PSAwICYmXG4gICAgKCF0YXJnZXQuaGFzaCB8fCBjdXJyZW50Lmhhc2ggPT09IHRhcmdldC5oYXNoKSAmJlxuICAgIHF1ZXJ5SW5jbHVkZXMoY3VycmVudC5xdWVyeSwgdGFyZ2V0LnF1ZXJ5KVxuICApXG59XG5cbmZ1bmN0aW9uIHF1ZXJ5SW5jbHVkZXMgKGN1cnJlbnQsIHRhcmdldCkge1xuICBmb3IgKHZhciBrZXkgaW4gdGFyZ2V0KSB7XG4gICAgaWYgKCEoa2V5IGluIGN1cnJlbnQpKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRydWVcbn1cblxuLyogICovXG5cbmZ1bmN0aW9uIHJlc29sdmVQYXRoIChcbiAgcmVsYXRpdmUsXG4gIGJhc2UsXG4gIGFwcGVuZFxuKSB7XG4gIHZhciBmaXJzdENoYXIgPSByZWxhdGl2ZS5jaGFyQXQoMCk7XG4gIGlmIChmaXJzdENoYXIgPT09ICcvJykge1xuICAgIHJldHVybiByZWxhdGl2ZVxuICB9XG5cbiAgaWYgKGZpcnN0Q2hhciA9PT0gJz8nIHx8IGZpcnN0Q2hhciA9PT0gJyMnKSB7XG4gICAgcmV0dXJuIGJhc2UgKyByZWxhdGl2ZVxuICB9XG5cbiAgdmFyIHN0YWNrID0gYmFzZS5zcGxpdCgnLycpO1xuXG4gIC8vIHJlbW92ZSB0cmFpbGluZyBzZWdtZW50IGlmOlxuICAvLyAtIG5vdCBhcHBlbmRpbmdcbiAgLy8gLSBhcHBlbmRpbmcgdG8gdHJhaWxpbmcgc2xhc2ggKGxhc3Qgc2VnbWVudCBpcyBlbXB0eSlcbiAgaWYgKCFhcHBlbmQgfHwgIXN0YWNrW3N0YWNrLmxlbmd0aCAtIDFdKSB7XG4gICAgc3RhY2sucG9wKCk7XG4gIH1cblxuICAvLyByZXNvbHZlIHJlbGF0aXZlIHBhdGhcbiAgdmFyIHNlZ21lbnRzID0gcmVsYXRpdmUucmVwbGFjZSgvXlxcLy8sICcnKS5zcGxpdCgnLycpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHNlZ21lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHNlZ21lbnQgPSBzZWdtZW50c1tpXTtcbiAgICBpZiAoc2VnbWVudCA9PT0gJy4uJykge1xuICAgICAgc3RhY2sucG9wKCk7XG4gICAgfSBlbHNlIGlmIChzZWdtZW50ICE9PSAnLicpIHtcbiAgICAgIHN0YWNrLnB1c2goc2VnbWVudCk7XG4gICAgfVxuICB9XG5cbiAgLy8gZW5zdXJlIGxlYWRpbmcgc2xhc2hcbiAgaWYgKHN0YWNrWzBdICE9PSAnJykge1xuICAgIHN0YWNrLnVuc2hpZnQoJycpO1xuICB9XG5cbiAgcmV0dXJuIHN0YWNrLmpvaW4oJy8nKVxufVxuXG5mdW5jdGlvbiBwYXJzZVBhdGggKHBhdGgpIHtcbiAgdmFyIGhhc2ggPSAnJztcbiAgdmFyIHF1ZXJ5ID0gJyc7XG5cbiAgdmFyIGhhc2hJbmRleCA9IHBhdGguaW5kZXhPZignIycpO1xuICBpZiAoaGFzaEluZGV4ID49IDApIHtcbiAgICBoYXNoID0gcGF0aC5zbGljZShoYXNoSW5kZXgpO1xuICAgIHBhdGggPSBwYXRoLnNsaWNlKDAsIGhhc2hJbmRleCk7XG4gIH1cblxuICB2YXIgcXVlcnlJbmRleCA9IHBhdGguaW5kZXhPZignPycpO1xuICBpZiAocXVlcnlJbmRleCA+PSAwKSB7XG4gICAgcXVlcnkgPSBwYXRoLnNsaWNlKHF1ZXJ5SW5kZXggKyAxKTtcbiAgICBwYXRoID0gcGF0aC5zbGljZSgwLCBxdWVyeUluZGV4KTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgcGF0aDogcGF0aCxcbiAgICBxdWVyeTogcXVlcnksXG4gICAgaGFzaDogaGFzaFxuICB9XG59XG5cbmZ1bmN0aW9uIGNsZWFuUGF0aCAocGF0aCkge1xuICByZXR1cm4gcGF0aC5yZXBsYWNlKC9cXC9cXC8vZywgJy8nKVxufVxuXG52YXIgaXNhcnJheSA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gKGFycikge1xuICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGFycikgPT0gJ1tvYmplY3QgQXJyYXldJztcbn07XG5cbi8qKlxuICogRXhwb3NlIGBwYXRoVG9SZWdleHBgLlxuICovXG52YXIgcGF0aFRvUmVnZXhwXzEgPSBwYXRoVG9SZWdleHA7XG52YXIgcGFyc2VfMSA9IHBhcnNlO1xudmFyIGNvbXBpbGVfMSA9IGNvbXBpbGU7XG52YXIgdG9rZW5zVG9GdW5jdGlvbl8xID0gdG9rZW5zVG9GdW5jdGlvbjtcbnZhciB0b2tlbnNUb1JlZ0V4cF8xID0gdG9rZW5zVG9SZWdFeHA7XG5cbi8qKlxuICogVGhlIG1haW4gcGF0aCBtYXRjaGluZyByZWdleHAgdXRpbGl0eS5cbiAqXG4gKiBAdHlwZSB7UmVnRXhwfVxuICovXG52YXIgUEFUSF9SRUdFWFAgPSBuZXcgUmVnRXhwKFtcbiAgLy8gTWF0Y2ggZXNjYXBlZCBjaGFyYWN0ZXJzIHRoYXQgd291bGQgb3RoZXJ3aXNlIGFwcGVhciBpbiBmdXR1cmUgbWF0Y2hlcy5cbiAgLy8gVGhpcyBhbGxvd3MgdGhlIHVzZXIgdG8gZXNjYXBlIHNwZWNpYWwgY2hhcmFjdGVycyB0aGF0IHdvbid0IHRyYW5zZm9ybS5cbiAgJyhcXFxcXFxcXC4pJyxcbiAgLy8gTWF0Y2ggRXhwcmVzcy1zdHlsZSBwYXJhbWV0ZXJzIGFuZCB1bi1uYW1lZCBwYXJhbWV0ZXJzIHdpdGggYSBwcmVmaXhcbiAgLy8gYW5kIG9wdGlvbmFsIHN1ZmZpeGVzLiBNYXRjaGVzIGFwcGVhciBhczpcbiAgLy9cbiAgLy8gXCIvOnRlc3QoXFxcXGQrKT9cIiA9PiBbXCIvXCIsIFwidGVzdFwiLCBcIlxcZCtcIiwgdW5kZWZpbmVkLCBcIj9cIiwgdW5kZWZpbmVkXVxuICAvLyBcIi9yb3V0ZShcXFxcZCspXCIgID0+IFt1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBcIlxcZCtcIiwgdW5kZWZpbmVkLCB1bmRlZmluZWRdXG4gIC8vIFwiLypcIiAgICAgICAgICAgID0+IFtcIi9cIiwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBcIipcIl1cbiAgJyhbXFxcXC8uXSk/KD86KD86XFxcXDooXFxcXHcrKSg/OlxcXFwoKCg/OlxcXFxcXFxcLnxbXlxcXFxcXFxcKCldKSspXFxcXCkpP3xcXFxcKCgoPzpcXFxcXFxcXC58W15cXFxcXFxcXCgpXSkrKVxcXFwpKShbKyo/XSk/fChcXFxcKikpJ1xuXS5qb2luKCd8JyksICdnJyk7XG5cbi8qKlxuICogUGFyc2UgYSBzdHJpbmcgZm9yIHRoZSByYXcgdG9rZW5zLlxuICpcbiAqIEBwYXJhbSAge3N0cmluZ30gIHN0clxuICogQHBhcmFtICB7T2JqZWN0PX0gb3B0aW9uc1xuICogQHJldHVybiB7IUFycmF5fVxuICovXG5mdW5jdGlvbiBwYXJzZSAoc3RyLCBvcHRpb25zKSB7XG4gIHZhciB0b2tlbnMgPSBbXTtcbiAgdmFyIGtleSA9IDA7XG4gIHZhciBpbmRleCA9IDA7XG4gIHZhciBwYXRoID0gJyc7XG4gIHZhciBkZWZhdWx0RGVsaW1pdGVyID0gb3B0aW9ucyAmJiBvcHRpb25zLmRlbGltaXRlciB8fCAnLyc7XG4gIHZhciByZXM7XG5cbiAgd2hpbGUgKChyZXMgPSBQQVRIX1JFR0VYUC5leGVjKHN0cikpICE9IG51bGwpIHtcbiAgICB2YXIgbSA9IHJlc1swXTtcbiAgICB2YXIgZXNjYXBlZCA9IHJlc1sxXTtcbiAgICB2YXIgb2Zmc2V0ID0gcmVzLmluZGV4O1xuICAgIHBhdGggKz0gc3RyLnNsaWNlKGluZGV4LCBvZmZzZXQpO1xuICAgIGluZGV4ID0gb2Zmc2V0ICsgbS5sZW5ndGg7XG5cbiAgICAvLyBJZ25vcmUgYWxyZWFkeSBlc2NhcGVkIHNlcXVlbmNlcy5cbiAgICBpZiAoZXNjYXBlZCkge1xuICAgICAgcGF0aCArPSBlc2NhcGVkWzFdO1xuICAgICAgY29udGludWVcbiAgICB9XG5cbiAgICB2YXIgbmV4dCA9IHN0cltpbmRleF07XG4gICAgdmFyIHByZWZpeCA9IHJlc1syXTtcbiAgICB2YXIgbmFtZSA9IHJlc1szXTtcbiAgICB2YXIgY2FwdHVyZSA9IHJlc1s0XTtcbiAgICB2YXIgZ3JvdXAgPSByZXNbNV07XG4gICAgdmFyIG1vZGlmaWVyID0gcmVzWzZdO1xuICAgIHZhciBhc3RlcmlzayA9IHJlc1s3XTtcblxuICAgIC8vIFB1c2ggdGhlIGN1cnJlbnQgcGF0aCBvbnRvIHRoZSB0b2tlbnMuXG4gICAgaWYgKHBhdGgpIHtcbiAgICAgIHRva2Vucy5wdXNoKHBhdGgpO1xuICAgICAgcGF0aCA9ICcnO1xuICAgIH1cblxuICAgIHZhciBwYXJ0aWFsID0gcHJlZml4ICE9IG51bGwgJiYgbmV4dCAhPSBudWxsICYmIG5leHQgIT09IHByZWZpeDtcbiAgICB2YXIgcmVwZWF0ID0gbW9kaWZpZXIgPT09ICcrJyB8fCBtb2RpZmllciA9PT0gJyonO1xuICAgIHZhciBvcHRpb25hbCA9IG1vZGlmaWVyID09PSAnPycgfHwgbW9kaWZpZXIgPT09ICcqJztcbiAgICB2YXIgZGVsaW1pdGVyID0gcmVzWzJdIHx8IGRlZmF1bHREZWxpbWl0ZXI7XG4gICAgdmFyIHBhdHRlcm4gPSBjYXB0dXJlIHx8IGdyb3VwO1xuXG4gICAgdG9rZW5zLnB1c2goe1xuICAgICAgbmFtZTogbmFtZSB8fCBrZXkrKyxcbiAgICAgIHByZWZpeDogcHJlZml4IHx8ICcnLFxuICAgICAgZGVsaW1pdGVyOiBkZWxpbWl0ZXIsXG4gICAgICBvcHRpb25hbDogb3B0aW9uYWwsXG4gICAgICByZXBlYXQ6IHJlcGVhdCxcbiAgICAgIHBhcnRpYWw6IHBhcnRpYWwsXG4gICAgICBhc3RlcmlzazogISFhc3RlcmlzayxcbiAgICAgIHBhdHRlcm46IHBhdHRlcm4gPyBlc2NhcGVHcm91cChwYXR0ZXJuKSA6IChhc3RlcmlzayA/ICcuKicgOiAnW14nICsgZXNjYXBlU3RyaW5nKGRlbGltaXRlcikgKyAnXSs/JylcbiAgICB9KTtcbiAgfVxuXG4gIC8vIE1hdGNoIGFueSBjaGFyYWN0ZXJzIHN0aWxsIHJlbWFpbmluZy5cbiAgaWYgKGluZGV4IDwgc3RyLmxlbmd0aCkge1xuICAgIHBhdGggKz0gc3RyLnN1YnN0cihpbmRleCk7XG4gIH1cblxuICAvLyBJZiB0aGUgcGF0aCBleGlzdHMsIHB1c2ggaXQgb250byB0aGUgZW5kLlxuICBpZiAocGF0aCkge1xuICAgIHRva2Vucy5wdXNoKHBhdGgpO1xuICB9XG5cbiAgcmV0dXJuIHRva2Vuc1xufVxuXG4vKipcbiAqIENvbXBpbGUgYSBzdHJpbmcgdG8gYSB0ZW1wbGF0ZSBmdW5jdGlvbiBmb3IgdGhlIHBhdGguXG4gKlxuICogQHBhcmFtICB7c3RyaW5nfSAgICAgICAgICAgICBzdHJcbiAqIEBwYXJhbSAge09iamVjdD19ICAgICAgICAgICAgb3B0aW9uc1xuICogQHJldHVybiB7IWZ1bmN0aW9uKE9iamVjdD0sIE9iamVjdD0pfVxuICovXG5mdW5jdGlvbiBjb21waWxlIChzdHIsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIHRva2Vuc1RvRnVuY3Rpb24ocGFyc2Uoc3RyLCBvcHRpb25zKSlcbn1cblxuLyoqXG4gKiBQcmV0dGllciBlbmNvZGluZyBvZiBVUkkgcGF0aCBzZWdtZW50cy5cbiAqXG4gKiBAcGFyYW0gIHtzdHJpbmd9XG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGVuY29kZVVSSUNvbXBvbmVudFByZXR0eSAoc3RyKSB7XG4gIHJldHVybiBlbmNvZGVVUkkoc3RyKS5yZXBsYWNlKC9bXFwvPyNdL2csIGZ1bmN0aW9uIChjKSB7XG4gICAgcmV0dXJuICclJyArIGMuY2hhckNvZGVBdCgwKS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKVxuICB9KVxufVxuXG4vKipcbiAqIEVuY29kZSB0aGUgYXN0ZXJpc2sgcGFyYW1ldGVyLiBTaW1pbGFyIHRvIGBwcmV0dHlgLCBidXQgYWxsb3dzIHNsYXNoZXMuXG4gKlxuICogQHBhcmFtICB7c3RyaW5nfVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBlbmNvZGVBc3RlcmlzayAoc3RyKSB7XG4gIHJldHVybiBlbmNvZGVVUkkoc3RyKS5yZXBsYWNlKC9bPyNdL2csIGZ1bmN0aW9uIChjKSB7XG4gICAgcmV0dXJuICclJyArIGMuY2hhckNvZGVBdCgwKS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKVxuICB9KVxufVxuXG4vKipcbiAqIEV4cG9zZSBhIG1ldGhvZCBmb3IgdHJhbnNmb3JtaW5nIHRva2VucyBpbnRvIHRoZSBwYXRoIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiB0b2tlbnNUb0Z1bmN0aW9uICh0b2tlbnMpIHtcbiAgLy8gQ29tcGlsZSBhbGwgdGhlIHRva2VucyBpbnRvIHJlZ2V4cHMuXG4gIHZhciBtYXRjaGVzID0gbmV3IEFycmF5KHRva2Vucy5sZW5ndGgpO1xuXG4gIC8vIENvbXBpbGUgYWxsIHRoZSBwYXR0ZXJucyBiZWZvcmUgY29tcGlsYXRpb24uXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdG9rZW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKHR5cGVvZiB0b2tlbnNbaV0gPT09ICdvYmplY3QnKSB7XG4gICAgICBtYXRjaGVzW2ldID0gbmV3IFJlZ0V4cCgnXig/OicgKyB0b2tlbnNbaV0ucGF0dGVybiArICcpJCcpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiAob2JqLCBvcHRzKSB7XG4gICAgdmFyIHBhdGggPSAnJztcbiAgICB2YXIgZGF0YSA9IG9iaiB8fCB7fTtcbiAgICB2YXIgb3B0aW9ucyA9IG9wdHMgfHwge307XG4gICAgdmFyIGVuY29kZSA9IG9wdGlvbnMucHJldHR5ID8gZW5jb2RlVVJJQ29tcG9uZW50UHJldHR5IDogZW5jb2RlVVJJQ29tcG9uZW50O1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b2tlbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciB0b2tlbiA9IHRva2Vuc1tpXTtcblxuICAgICAgaWYgKHR5cGVvZiB0b2tlbiA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcGF0aCArPSB0b2tlbjtcblxuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICB2YXIgdmFsdWUgPSBkYXRhW3Rva2VuLm5hbWVdO1xuICAgICAgdmFyIHNlZ21lbnQ7XG5cbiAgICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgICAgIGlmICh0b2tlbi5vcHRpb25hbCkge1xuICAgICAgICAgIC8vIFByZXBlbmQgcGFydGlhbCBzZWdtZW50IHByZWZpeGVzLlxuICAgICAgICAgIGlmICh0b2tlbi5wYXJ0aWFsKSB7XG4gICAgICAgICAgICBwYXRoICs9IHRva2VuLnByZWZpeDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIFwiJyArIHRva2VuLm5hbWUgKyAnXCIgdG8gYmUgZGVmaW5lZCcpXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGlzYXJyYXkodmFsdWUpKSB7XG4gICAgICAgIGlmICghdG9rZW4ucmVwZWF0KSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgXCInICsgdG9rZW4ubmFtZSArICdcIiB0byBub3QgcmVwZWF0LCBidXQgcmVjZWl2ZWQgYCcgKyBKU09OLnN0cmluZ2lmeSh2YWx1ZSkgKyAnYCcpXG4gICAgICAgIH1cblxuICAgICAgICBpZiAodmFsdWUubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgaWYgKHRva2VuLm9wdGlvbmFsKSB7XG4gICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBcIicgKyB0b2tlbi5uYW1lICsgJ1wiIHRvIG5vdCBiZSBlbXB0eScpXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCB2YWx1ZS5sZW5ndGg7IGorKykge1xuICAgICAgICAgIHNlZ21lbnQgPSBlbmNvZGUodmFsdWVbal0pO1xuXG4gICAgICAgICAgaWYgKCFtYXRjaGVzW2ldLnRlc3Qoc2VnbWVudCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIGFsbCBcIicgKyB0b2tlbi5uYW1lICsgJ1wiIHRvIG1hdGNoIFwiJyArIHRva2VuLnBhdHRlcm4gKyAnXCIsIGJ1dCByZWNlaXZlZCBgJyArIEpTT04uc3RyaW5naWZ5KHNlZ21lbnQpICsgJ2AnKVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHBhdGggKz0gKGogPT09IDAgPyB0b2tlbi5wcmVmaXggOiB0b2tlbi5kZWxpbWl0ZXIpICsgc2VnbWVudDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIHNlZ21lbnQgPSB0b2tlbi5hc3RlcmlzayA/IGVuY29kZUFzdGVyaXNrKHZhbHVlKSA6IGVuY29kZSh2YWx1ZSk7XG5cbiAgICAgIGlmICghbWF0Y2hlc1tpXS50ZXN0KHNlZ21lbnQpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIFwiJyArIHRva2VuLm5hbWUgKyAnXCIgdG8gbWF0Y2ggXCInICsgdG9rZW4ucGF0dGVybiArICdcIiwgYnV0IHJlY2VpdmVkIFwiJyArIHNlZ21lbnQgKyAnXCInKVxuICAgICAgfVxuXG4gICAgICBwYXRoICs9IHRva2VuLnByZWZpeCArIHNlZ21lbnQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhdGhcbiAgfVxufVxuXG4vKipcbiAqIEVzY2FwZSBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBzdHJpbmcuXG4gKlxuICogQHBhcmFtICB7c3RyaW5nfSBzdHJcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZXNjYXBlU3RyaW5nIChzdHIpIHtcbiAgcmV0dXJuIHN0ci5yZXBsYWNlKC8oWy4rKj89XiE6JHt9KClbXFxdfFxcL1xcXFxdKS9nLCAnXFxcXCQxJylcbn1cblxuLyoqXG4gKiBFc2NhcGUgdGhlIGNhcHR1cmluZyBncm91cCBieSBlc2NhcGluZyBzcGVjaWFsIGNoYXJhY3RlcnMgYW5kIG1lYW5pbmcuXG4gKlxuICogQHBhcmFtICB7c3RyaW5nfSBncm91cFxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBlc2NhcGVHcm91cCAoZ3JvdXApIHtcbiAgcmV0dXJuIGdyb3VwLnJlcGxhY2UoLyhbPSE6JFxcLygpXSkvZywgJ1xcXFwkMScpXG59XG5cbi8qKlxuICogQXR0YWNoIHRoZSBrZXlzIGFzIGEgcHJvcGVydHkgb2YgdGhlIHJlZ2V4cC5cbiAqXG4gKiBAcGFyYW0gIHshUmVnRXhwfSByZVxuICogQHBhcmFtICB7QXJyYXl9ICAga2V5c1xuICogQHJldHVybiB7IVJlZ0V4cH1cbiAqL1xuZnVuY3Rpb24gYXR0YWNoS2V5cyAocmUsIGtleXMpIHtcbiAgcmUua2V5cyA9IGtleXM7XG4gIHJldHVybiByZVxufVxuXG4vKipcbiAqIEdldCB0aGUgZmxhZ3MgZm9yIGEgcmVnZXhwIGZyb20gdGhlIG9wdGlvbnMuXG4gKlxuICogQHBhcmFtICB7T2JqZWN0fSBvcHRpb25zXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGZsYWdzIChvcHRpb25zKSB7XG4gIHJldHVybiBvcHRpb25zLnNlbnNpdGl2ZSA/ICcnIDogJ2knXG59XG5cbi8qKlxuICogUHVsbCBvdXQga2V5cyBmcm9tIGEgcmVnZXhwLlxuICpcbiAqIEBwYXJhbSAgeyFSZWdFeHB9IHBhdGhcbiAqIEBwYXJhbSAgeyFBcnJheX0gIGtleXNcbiAqIEByZXR1cm4geyFSZWdFeHB9XG4gKi9cbmZ1bmN0aW9uIHJlZ2V4cFRvUmVnZXhwIChwYXRoLCBrZXlzKSB7XG4gIC8vIFVzZSBhIG5lZ2F0aXZlIGxvb2thaGVhZCB0byBtYXRjaCBvbmx5IGNhcHR1cmluZyBncm91cHMuXG4gIHZhciBncm91cHMgPSBwYXRoLnNvdXJjZS5tYXRjaCgvXFwoKD8hXFw/KS9nKTtcblxuICBpZiAoZ3JvdXBzKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBncm91cHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGtleXMucHVzaCh7XG4gICAgICAgIG5hbWU6IGksXG4gICAgICAgIHByZWZpeDogbnVsbCxcbiAgICAgICAgZGVsaW1pdGVyOiBudWxsLFxuICAgICAgICBvcHRpb25hbDogZmFsc2UsXG4gICAgICAgIHJlcGVhdDogZmFsc2UsXG4gICAgICAgIHBhcnRpYWw6IGZhbHNlLFxuICAgICAgICBhc3RlcmlzazogZmFsc2UsXG4gICAgICAgIHBhdHRlcm46IG51bGxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBhdHRhY2hLZXlzKHBhdGgsIGtleXMpXG59XG5cbi8qKlxuICogVHJhbnNmb3JtIGFuIGFycmF5IGludG8gYSByZWdleHAuXG4gKlxuICogQHBhcmFtICB7IUFycmF5fSAgcGF0aFxuICogQHBhcmFtICB7QXJyYXl9ICAga2V5c1xuICogQHBhcmFtICB7IU9iamVjdH0gb3B0aW9uc1xuICogQHJldHVybiB7IVJlZ0V4cH1cbiAqL1xuZnVuY3Rpb24gYXJyYXlUb1JlZ2V4cCAocGF0aCwga2V5cywgb3B0aW9ucykge1xuICB2YXIgcGFydHMgPSBbXTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHBhdGgubGVuZ3RoOyBpKyspIHtcbiAgICBwYXJ0cy5wdXNoKHBhdGhUb1JlZ2V4cChwYXRoW2ldLCBrZXlzLCBvcHRpb25zKS5zb3VyY2UpO1xuICB9XG5cbiAgdmFyIHJlZ2V4cCA9IG5ldyBSZWdFeHAoJyg/OicgKyBwYXJ0cy5qb2luKCd8JykgKyAnKScsIGZsYWdzKG9wdGlvbnMpKTtcblxuICByZXR1cm4gYXR0YWNoS2V5cyhyZWdleHAsIGtleXMpXG59XG5cbi8qKlxuICogQ3JlYXRlIGEgcGF0aCByZWdleHAgZnJvbSBzdHJpbmcgaW5wdXQuXG4gKlxuICogQHBhcmFtICB7c3RyaW5nfSAgcGF0aFxuICogQHBhcmFtICB7IUFycmF5fSAga2V5c1xuICogQHBhcmFtICB7IU9iamVjdH0gb3B0aW9uc1xuICogQHJldHVybiB7IVJlZ0V4cH1cbiAqL1xuZnVuY3Rpb24gc3RyaW5nVG9SZWdleHAgKHBhdGgsIGtleXMsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIHRva2Vuc1RvUmVnRXhwKHBhcnNlKHBhdGgsIG9wdGlvbnMpLCBrZXlzLCBvcHRpb25zKVxufVxuXG4vKipcbiAqIEV4cG9zZSBhIGZ1bmN0aW9uIGZvciB0YWtpbmcgdG9rZW5zIGFuZCByZXR1cm5pbmcgYSBSZWdFeHAuXG4gKlxuICogQHBhcmFtICB7IUFycmF5fSAgICAgICAgICB0b2tlbnNcbiAqIEBwYXJhbSAgeyhBcnJheXxPYmplY3QpPX0ga2V5c1xuICogQHBhcmFtICB7T2JqZWN0PX0gICAgICAgICBvcHRpb25zXG4gKiBAcmV0dXJuIHshUmVnRXhwfVxuICovXG5mdW5jdGlvbiB0b2tlbnNUb1JlZ0V4cCAodG9rZW5zLCBrZXlzLCBvcHRpb25zKSB7XG4gIGlmICghaXNhcnJheShrZXlzKSkge1xuICAgIG9wdGlvbnMgPSAvKiogQHR5cGUgeyFPYmplY3R9ICovIChrZXlzIHx8IG9wdGlvbnMpO1xuICAgIGtleXMgPSBbXTtcbiAgfVxuXG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gIHZhciBzdHJpY3QgPSBvcHRpb25zLnN0cmljdDtcbiAgdmFyIGVuZCA9IG9wdGlvbnMuZW5kICE9PSBmYWxzZTtcbiAgdmFyIHJvdXRlID0gJyc7XG5cbiAgLy8gSXRlcmF0ZSBvdmVyIHRoZSB0b2tlbnMgYW5kIGNyZWF0ZSBvdXIgcmVnZXhwIHN0cmluZy5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b2tlbnMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgdG9rZW4gPSB0b2tlbnNbaV07XG5cbiAgICBpZiAodHlwZW9mIHRva2VuID09PSAnc3RyaW5nJykge1xuICAgICAgcm91dGUgKz0gZXNjYXBlU3RyaW5nKHRva2VuKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIHByZWZpeCA9IGVzY2FwZVN0cmluZyh0b2tlbi5wcmVmaXgpO1xuICAgICAgdmFyIGNhcHR1cmUgPSAnKD86JyArIHRva2VuLnBhdHRlcm4gKyAnKSc7XG5cbiAgICAgIGtleXMucHVzaCh0b2tlbik7XG5cbiAgICAgIGlmICh0b2tlbi5yZXBlYXQpIHtcbiAgICAgICAgY2FwdHVyZSArPSAnKD86JyArIHByZWZpeCArIGNhcHR1cmUgKyAnKSonO1xuICAgICAgfVxuXG4gICAgICBpZiAodG9rZW4ub3B0aW9uYWwpIHtcbiAgICAgICAgaWYgKCF0b2tlbi5wYXJ0aWFsKSB7XG4gICAgICAgICAgY2FwdHVyZSA9ICcoPzonICsgcHJlZml4ICsgJygnICsgY2FwdHVyZSArICcpKT8nO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNhcHR1cmUgPSBwcmVmaXggKyAnKCcgKyBjYXB0dXJlICsgJyk/JztcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2FwdHVyZSA9IHByZWZpeCArICcoJyArIGNhcHR1cmUgKyAnKSc7XG4gICAgICB9XG5cbiAgICAgIHJvdXRlICs9IGNhcHR1cmU7XG4gICAgfVxuICB9XG5cbiAgdmFyIGRlbGltaXRlciA9IGVzY2FwZVN0cmluZyhvcHRpb25zLmRlbGltaXRlciB8fCAnLycpO1xuICB2YXIgZW5kc1dpdGhEZWxpbWl0ZXIgPSByb3V0ZS5zbGljZSgtZGVsaW1pdGVyLmxlbmd0aCkgPT09IGRlbGltaXRlcjtcblxuICAvLyBJbiBub24tc3RyaWN0IG1vZGUgd2UgYWxsb3cgYSBzbGFzaCBhdCB0aGUgZW5kIG9mIG1hdGNoLiBJZiB0aGUgcGF0aCB0b1xuICAvLyBtYXRjaCBhbHJlYWR5IGVuZHMgd2l0aCBhIHNsYXNoLCB3ZSByZW1vdmUgaXQgZm9yIGNvbnNpc3RlbmN5LiBUaGUgc2xhc2hcbiAgLy8gaXMgdmFsaWQgYXQgdGhlIGVuZCBvZiBhIHBhdGggbWF0Y2gsIG5vdCBpbiB0aGUgbWlkZGxlLiBUaGlzIGlzIGltcG9ydGFudFxuICAvLyBpbiBub24tZW5kaW5nIG1vZGUsIHdoZXJlIFwiL3Rlc3QvXCIgc2hvdWxkbid0IG1hdGNoIFwiL3Rlc3QvL3JvdXRlXCIuXG4gIGlmICghc3RyaWN0KSB7XG4gICAgcm91dGUgPSAoZW5kc1dpdGhEZWxpbWl0ZXIgPyByb3V0ZS5zbGljZSgwLCAtZGVsaW1pdGVyLmxlbmd0aCkgOiByb3V0ZSkgKyAnKD86JyArIGRlbGltaXRlciArICcoPz0kKSk/JztcbiAgfVxuXG4gIGlmIChlbmQpIHtcbiAgICByb3V0ZSArPSAnJCc7XG4gIH0gZWxzZSB7XG4gICAgLy8gSW4gbm9uLWVuZGluZyBtb2RlLCB3ZSBuZWVkIHRoZSBjYXB0dXJpbmcgZ3JvdXBzIHRvIG1hdGNoIGFzIG11Y2ggYXNcbiAgICAvLyBwb3NzaWJsZSBieSB1c2luZyBhIHBvc2l0aXZlIGxvb2thaGVhZCB0byB0aGUgZW5kIG9yIG5leHQgcGF0aCBzZWdtZW50LlxuICAgIHJvdXRlICs9IHN0cmljdCAmJiBlbmRzV2l0aERlbGltaXRlciA/ICcnIDogJyg/PScgKyBkZWxpbWl0ZXIgKyAnfCQpJztcbiAgfVxuXG4gIHJldHVybiBhdHRhY2hLZXlzKG5ldyBSZWdFeHAoJ14nICsgcm91dGUsIGZsYWdzKG9wdGlvbnMpKSwga2V5cylcbn1cblxuLyoqXG4gKiBOb3JtYWxpemUgdGhlIGdpdmVuIHBhdGggc3RyaW5nLCByZXR1cm5pbmcgYSByZWd1bGFyIGV4cHJlc3Npb24uXG4gKlxuICogQW4gZW1wdHkgYXJyYXkgY2FuIGJlIHBhc3NlZCBpbiBmb3IgdGhlIGtleXMsIHdoaWNoIHdpbGwgaG9sZCB0aGVcbiAqIHBsYWNlaG9sZGVyIGtleSBkZXNjcmlwdGlvbnMuIEZvciBleGFtcGxlLCB1c2luZyBgL3VzZXIvOmlkYCwgYGtleXNgIHdpbGxcbiAqIGNvbnRhaW4gYFt7IG5hbWU6ICdpZCcsIGRlbGltaXRlcjogJy8nLCBvcHRpb25hbDogZmFsc2UsIHJlcGVhdDogZmFsc2UgfV1gLlxuICpcbiAqIEBwYXJhbSAgeyhzdHJpbmd8UmVnRXhwfEFycmF5KX0gcGF0aFxuICogQHBhcmFtICB7KEFycmF5fE9iamVjdCk9fSAgICAgICBrZXlzXG4gKiBAcGFyYW0gIHtPYmplY3Q9fSAgICAgICAgICAgICAgIG9wdGlvbnNcbiAqIEByZXR1cm4geyFSZWdFeHB9XG4gKi9cbmZ1bmN0aW9uIHBhdGhUb1JlZ2V4cCAocGF0aCwga2V5cywgb3B0aW9ucykge1xuICBpZiAoIWlzYXJyYXkoa2V5cykpIHtcbiAgICBvcHRpb25zID0gLyoqIEB0eXBlIHshT2JqZWN0fSAqLyAoa2V5cyB8fCBvcHRpb25zKTtcbiAgICBrZXlzID0gW107XG4gIH1cblxuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICBpZiAocGF0aCBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgIHJldHVybiByZWdleHBUb1JlZ2V4cChwYXRoLCAvKiogQHR5cGUgeyFBcnJheX0gKi8gKGtleXMpKVxuICB9XG5cbiAgaWYgKGlzYXJyYXkocGF0aCkpIHtcbiAgICByZXR1cm4gYXJyYXlUb1JlZ2V4cCgvKiogQHR5cGUgeyFBcnJheX0gKi8gKHBhdGgpLCAvKiogQHR5cGUgeyFBcnJheX0gKi8gKGtleXMpLCBvcHRpb25zKVxuICB9XG5cbiAgcmV0dXJuIHN0cmluZ1RvUmVnZXhwKC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAocGF0aCksIC8qKiBAdHlwZSB7IUFycmF5fSAqLyAoa2V5cyksIG9wdGlvbnMpXG59XG5wYXRoVG9SZWdleHBfMS5wYXJzZSA9IHBhcnNlXzE7XG5wYXRoVG9SZWdleHBfMS5jb21waWxlID0gY29tcGlsZV8xO1xucGF0aFRvUmVnZXhwXzEudG9rZW5zVG9GdW5jdGlvbiA9IHRva2Vuc1RvRnVuY3Rpb25fMTtcbnBhdGhUb1JlZ2V4cF8xLnRva2Vuc1RvUmVnRXhwID0gdG9rZW5zVG9SZWdFeHBfMTtcblxuLyogICovXG5cbi8vICRmbG93LWRpc2FibGUtbGluZVxudmFyIHJlZ2V4cENvbXBpbGVDYWNoZSA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cbmZ1bmN0aW9uIGZpbGxQYXJhbXMgKFxuICBwYXRoLFxuICBwYXJhbXMsXG4gIHJvdXRlTXNnXG4pIHtcbiAgcGFyYW1zID0gcGFyYW1zIHx8IHt9O1xuICB0cnkge1xuICAgIHZhciBmaWxsZXIgPVxuICAgICAgcmVnZXhwQ29tcGlsZUNhY2hlW3BhdGhdIHx8XG4gICAgICAocmVnZXhwQ29tcGlsZUNhY2hlW3BhdGhdID0gcGF0aFRvUmVnZXhwXzEuY29tcGlsZShwYXRoKSk7XG5cbiAgICAvLyBGaXggIzI1MDUgcmVzb2x2aW5nIGFzdGVyaXNrIHJvdXRlcyB7IG5hbWU6ICdub3QtZm91bmQnLCBwYXJhbXM6IHsgcGF0aE1hdGNoOiAnL25vdC1mb3VuZCcgfX1cbiAgICBpZiAocGFyYW1zLnBhdGhNYXRjaCkgeyBwYXJhbXNbMF0gPSBwYXJhbXMucGF0aE1hdGNoOyB9XG5cbiAgICByZXR1cm4gZmlsbGVyKHBhcmFtcywgeyBwcmV0dHk6IHRydWUgfSlcbiAgfSBjYXRjaCAoZSkge1xuICAgIGlmIChcInByb2R1Y3Rpb25cIiAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICB3YXJuKGZhbHNlLCAoXCJtaXNzaW5nIHBhcmFtIGZvciBcIiArIHJvdXRlTXNnICsgXCI6IFwiICsgKGUubWVzc2FnZSkpKTtcbiAgICB9XG4gICAgcmV0dXJuICcnXG4gIH0gZmluYWxseSB7XG4gICAgLy8gZGVsZXRlIHRoZSAwIGlmIGl0IHdhcyBhZGRlZFxuICAgIGRlbGV0ZSBwYXJhbXNbMF07XG4gIH1cbn1cblxuLyogICovXG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZUxvY2F0aW9uIChcbiAgcmF3LFxuICBjdXJyZW50LFxuICBhcHBlbmQsXG4gIHJvdXRlclxuKSB7XG4gIHZhciBuZXh0ID0gdHlwZW9mIHJhdyA9PT0gJ3N0cmluZycgPyB7IHBhdGg6IHJhdyB9IDogcmF3O1xuICAvLyBuYW1lZCB0YXJnZXRcbiAgaWYgKG5leHQuX25vcm1hbGl6ZWQpIHtcbiAgICByZXR1cm4gbmV4dFxuICB9IGVsc2UgaWYgKG5leHQubmFtZSkge1xuICAgIHJldHVybiBleHRlbmQoe30sIHJhdylcbiAgfVxuXG4gIC8vIHJlbGF0aXZlIHBhcmFtc1xuICBpZiAoIW5leHQucGF0aCAmJiBuZXh0LnBhcmFtcyAmJiBjdXJyZW50KSB7XG4gICAgbmV4dCA9IGV4dGVuZCh7fSwgbmV4dCk7XG4gICAgbmV4dC5fbm9ybWFsaXplZCA9IHRydWU7XG4gICAgdmFyIHBhcmFtcyA9IGV4dGVuZChleHRlbmQoe30sIGN1cnJlbnQucGFyYW1zKSwgbmV4dC5wYXJhbXMpO1xuICAgIGlmIChjdXJyZW50Lm5hbWUpIHtcbiAgICAgIG5leHQubmFtZSA9IGN1cnJlbnQubmFtZTtcbiAgICAgIG5leHQucGFyYW1zID0gcGFyYW1zO1xuICAgIH0gZWxzZSBpZiAoY3VycmVudC5tYXRjaGVkLmxlbmd0aCkge1xuICAgICAgdmFyIHJhd1BhdGggPSBjdXJyZW50Lm1hdGNoZWRbY3VycmVudC5tYXRjaGVkLmxlbmd0aCAtIDFdLnBhdGg7XG4gICAgICBuZXh0LnBhdGggPSBmaWxsUGFyYW1zKHJhd1BhdGgsIHBhcmFtcywgKFwicGF0aCBcIiArIChjdXJyZW50LnBhdGgpKSk7XG4gICAgfSBlbHNlIGlmIChcInByb2R1Y3Rpb25cIiAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICB3YXJuKGZhbHNlLCBcInJlbGF0aXZlIHBhcmFtcyBuYXZpZ2F0aW9uIHJlcXVpcmVzIGEgY3VycmVudCByb3V0ZS5cIik7XG4gICAgfVxuICAgIHJldHVybiBuZXh0XG4gIH1cblxuICB2YXIgcGFyc2VkUGF0aCA9IHBhcnNlUGF0aChuZXh0LnBhdGggfHwgJycpO1xuICB2YXIgYmFzZVBhdGggPSAoY3VycmVudCAmJiBjdXJyZW50LnBhdGgpIHx8ICcvJztcbiAgdmFyIHBhdGggPSBwYXJzZWRQYXRoLnBhdGhcbiAgICA/IHJlc29sdmVQYXRoKHBhcnNlZFBhdGgucGF0aCwgYmFzZVBhdGgsIGFwcGVuZCB8fCBuZXh0LmFwcGVuZClcbiAgICA6IGJhc2VQYXRoO1xuXG4gIHZhciBxdWVyeSA9IHJlc29sdmVRdWVyeShcbiAgICBwYXJzZWRQYXRoLnF1ZXJ5LFxuICAgIG5leHQucXVlcnksXG4gICAgcm91dGVyICYmIHJvdXRlci5vcHRpb25zLnBhcnNlUXVlcnlcbiAgKTtcblxuICB2YXIgaGFzaCA9IG5leHQuaGFzaCB8fCBwYXJzZWRQYXRoLmhhc2g7XG4gIGlmIChoYXNoICYmIGhhc2guY2hhckF0KDApICE9PSAnIycpIHtcbiAgICBoYXNoID0gXCIjXCIgKyBoYXNoO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBfbm9ybWFsaXplZDogdHJ1ZSxcbiAgICBwYXRoOiBwYXRoLFxuICAgIHF1ZXJ5OiBxdWVyeSxcbiAgICBoYXNoOiBoYXNoXG4gIH1cbn1cblxuLyogICovXG5cbi8vIHdvcmsgYXJvdW5kIHdlaXJkIGZsb3cgYnVnXG52YXIgdG9UeXBlcyA9IFtTdHJpbmcsIE9iamVjdF07XG52YXIgZXZlbnRUeXBlcyA9IFtTdHJpbmcsIEFycmF5XTtcblxudmFyIG5vb3AgPSBmdW5jdGlvbiAoKSB7fTtcblxudmFyIExpbmsgPSB7XG4gIG5hbWU6ICdSb3V0ZXJMaW5rJyxcbiAgcHJvcHM6IHtcbiAgICB0bzoge1xuICAgICAgdHlwZTogdG9UeXBlcyxcbiAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgfSxcbiAgICB0YWc6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICdhJ1xuICAgIH0sXG4gICAgZXhhY3Q6IEJvb2xlYW4sXG4gICAgYXBwZW5kOiBCb29sZWFuLFxuICAgIHJlcGxhY2U6IEJvb2xlYW4sXG4gICAgYWN0aXZlQ2xhc3M6IFN0cmluZyxcbiAgICBleGFjdEFjdGl2ZUNsYXNzOiBTdHJpbmcsXG4gICAgZXZlbnQ6IHtcbiAgICAgIHR5cGU6IGV2ZW50VHlwZXMsXG4gICAgICBkZWZhdWx0OiAnY2xpY2snXG4gICAgfVxuICB9LFxuICByZW5kZXI6IGZ1bmN0aW9uIHJlbmRlciAoaCkge1xuICAgIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gICAgdmFyIHJvdXRlciA9IHRoaXMuJHJvdXRlcjtcbiAgICB2YXIgY3VycmVudCA9IHRoaXMuJHJvdXRlO1xuICAgIHZhciByZWYgPSByb3V0ZXIucmVzb2x2ZShcbiAgICAgIHRoaXMudG8sXG4gICAgICBjdXJyZW50LFxuICAgICAgdGhpcy5hcHBlbmRcbiAgICApO1xuICAgIHZhciBsb2NhdGlvbiA9IHJlZi5sb2NhdGlvbjtcbiAgICB2YXIgcm91dGUgPSByZWYucm91dGU7XG4gICAgdmFyIGhyZWYgPSByZWYuaHJlZjtcblxuICAgIHZhciBjbGFzc2VzID0ge307XG4gICAgdmFyIGdsb2JhbEFjdGl2ZUNsYXNzID0gcm91dGVyLm9wdGlvbnMubGlua0FjdGl2ZUNsYXNzO1xuICAgIHZhciBnbG9iYWxFeGFjdEFjdGl2ZUNsYXNzID0gcm91dGVyLm9wdGlvbnMubGlua0V4YWN0QWN0aXZlQ2xhc3M7XG4gICAgLy8gU3VwcG9ydCBnbG9iYWwgZW1wdHkgYWN0aXZlIGNsYXNzXG4gICAgdmFyIGFjdGl2ZUNsYXNzRmFsbGJhY2sgPVxuICAgICAgZ2xvYmFsQWN0aXZlQ2xhc3MgPT0gbnVsbCA/ICdyb3V0ZXItbGluay1hY3RpdmUnIDogZ2xvYmFsQWN0aXZlQ2xhc3M7XG4gICAgdmFyIGV4YWN0QWN0aXZlQ2xhc3NGYWxsYmFjayA9XG4gICAgICBnbG9iYWxFeGFjdEFjdGl2ZUNsYXNzID09IG51bGxcbiAgICAgICAgPyAncm91dGVyLWxpbmstZXhhY3QtYWN0aXZlJ1xuICAgICAgICA6IGdsb2JhbEV4YWN0QWN0aXZlQ2xhc3M7XG4gICAgdmFyIGFjdGl2ZUNsYXNzID1cbiAgICAgIHRoaXMuYWN0aXZlQ2xhc3MgPT0gbnVsbCA/IGFjdGl2ZUNsYXNzRmFsbGJhY2sgOiB0aGlzLmFjdGl2ZUNsYXNzO1xuICAgIHZhciBleGFjdEFjdGl2ZUNsYXNzID1cbiAgICAgIHRoaXMuZXhhY3RBY3RpdmVDbGFzcyA9PSBudWxsXG4gICAgICAgID8gZXhhY3RBY3RpdmVDbGFzc0ZhbGxiYWNrXG4gICAgICAgIDogdGhpcy5leGFjdEFjdGl2ZUNsYXNzO1xuXG4gICAgdmFyIGNvbXBhcmVUYXJnZXQgPSByb3V0ZS5yZWRpcmVjdGVkRnJvbVxuICAgICAgPyBjcmVhdGVSb3V0ZShudWxsLCBub3JtYWxpemVMb2NhdGlvbihyb3V0ZS5yZWRpcmVjdGVkRnJvbSksIG51bGwsIHJvdXRlcilcbiAgICAgIDogcm91dGU7XG5cbiAgICBjbGFzc2VzW2V4YWN0QWN0aXZlQ2xhc3NdID0gaXNTYW1lUm91dGUoY3VycmVudCwgY29tcGFyZVRhcmdldCk7XG4gICAgY2xhc3Nlc1thY3RpdmVDbGFzc10gPSB0aGlzLmV4YWN0XG4gICAgICA/IGNsYXNzZXNbZXhhY3RBY3RpdmVDbGFzc11cbiAgICAgIDogaXNJbmNsdWRlZFJvdXRlKGN1cnJlbnQsIGNvbXBhcmVUYXJnZXQpO1xuXG4gICAgdmFyIGhhbmRsZXIgPSBmdW5jdGlvbiAoZSkge1xuICAgICAgaWYgKGd1YXJkRXZlbnQoZSkpIHtcbiAgICAgICAgaWYgKHRoaXMkMS5yZXBsYWNlKSB7XG4gICAgICAgICAgcm91dGVyLnJlcGxhY2UobG9jYXRpb24sIG5vb3ApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJvdXRlci5wdXNoKGxvY2F0aW9uLCBub29wKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG5cbiAgICB2YXIgb24gPSB7IGNsaWNrOiBndWFyZEV2ZW50IH07XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy5ldmVudCkpIHtcbiAgICAgIHRoaXMuZXZlbnQuZm9yRWFjaChmdW5jdGlvbiAoZSkge1xuICAgICAgICBvbltlXSA9IGhhbmRsZXI7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgb25bdGhpcy5ldmVudF0gPSBoYW5kbGVyO1xuICAgIH1cblxuICAgIHZhciBkYXRhID0geyBjbGFzczogY2xhc3NlcyB9O1xuXG4gICAgdmFyIHNjb3BlZFNsb3QgPVxuICAgICAgIXRoaXMuJHNjb3BlZFNsb3RzLiRoYXNOb3JtYWwgJiZcbiAgICAgIHRoaXMuJHNjb3BlZFNsb3RzLmRlZmF1bHQgJiZcbiAgICAgIHRoaXMuJHNjb3BlZFNsb3RzLmRlZmF1bHQoe1xuICAgICAgICBocmVmOiBocmVmLFxuICAgICAgICByb3V0ZTogcm91dGUsXG4gICAgICAgIG5hdmlnYXRlOiBoYW5kbGVyLFxuICAgICAgICBpc0FjdGl2ZTogY2xhc3Nlc1thY3RpdmVDbGFzc10sXG4gICAgICAgIGlzRXhhY3RBY3RpdmU6IGNsYXNzZXNbZXhhY3RBY3RpdmVDbGFzc11cbiAgICAgIH0pO1xuXG4gICAgaWYgKHNjb3BlZFNsb3QpIHtcbiAgICAgIGlmIChzY29wZWRTbG90Lmxlbmd0aCA9PT0gMSkge1xuICAgICAgICByZXR1cm4gc2NvcGVkU2xvdFswXVxuICAgICAgfSBlbHNlIGlmIChzY29wZWRTbG90Lmxlbmd0aCA+IDEgfHwgIXNjb3BlZFNsb3QubGVuZ3RoKSB7XG4gICAgICAgIGlmIChcInByb2R1Y3Rpb25cIiAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgd2FybihcbiAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgKFwiUm91dGVyTGluayB3aXRoIHRvPVxcXCJcIiArICh0aGlzLnByb3BzLnRvKSArIFwiXFxcIiBpcyB0cnlpbmcgdG8gdXNlIGEgc2NvcGVkIHNsb3QgYnV0IGl0IGRpZG4ndCBwcm92aWRlIGV4YWN0bHkgb25lIGNoaWxkLlwiKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNjb3BlZFNsb3QubGVuZ3RoID09PSAwID8gaCgpIDogaCgnc3BhbicsIHt9LCBzY29wZWRTbG90KVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLnRhZyA9PT0gJ2EnKSB7XG4gICAgICBkYXRhLm9uID0gb247XG4gICAgICBkYXRhLmF0dHJzID0geyBocmVmOiBocmVmIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGZpbmQgdGhlIGZpcnN0IDxhPiBjaGlsZCBhbmQgYXBwbHkgbGlzdGVuZXIgYW5kIGhyZWZcbiAgICAgIHZhciBhID0gZmluZEFuY2hvcih0aGlzLiRzbG90cy5kZWZhdWx0KTtcbiAgICAgIGlmIChhKSB7XG4gICAgICAgIC8vIGluIGNhc2UgdGhlIDxhPiBpcyBhIHN0YXRpYyBub2RlXG4gICAgICAgIGEuaXNTdGF0aWMgPSBmYWxzZTtcbiAgICAgICAgdmFyIGFEYXRhID0gKGEuZGF0YSA9IGV4dGVuZCh7fSwgYS5kYXRhKSk7XG4gICAgICAgIGFEYXRhLm9uID0gYURhdGEub24gfHwge307XG4gICAgICAgIC8vIHRyYW5zZm9ybSBleGlzdGluZyBldmVudHMgaW4gYm90aCBvYmplY3RzIGludG8gYXJyYXlzIHNvIHdlIGNhbiBwdXNoIGxhdGVyXG4gICAgICAgIGZvciAodmFyIGV2ZW50IGluIGFEYXRhLm9uKSB7XG4gICAgICAgICAgdmFyIGhhbmRsZXIkMSA9IGFEYXRhLm9uW2V2ZW50XTtcbiAgICAgICAgICBpZiAoZXZlbnQgaW4gb24pIHtcbiAgICAgICAgICAgIGFEYXRhLm9uW2V2ZW50XSA9IEFycmF5LmlzQXJyYXkoaGFuZGxlciQxKSA/IGhhbmRsZXIkMSA6IFtoYW5kbGVyJDFdO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBhcHBlbmQgbmV3IGxpc3RlbmVycyBmb3Igcm91dGVyLWxpbmtcbiAgICAgICAgZm9yICh2YXIgZXZlbnQkMSBpbiBvbikge1xuICAgICAgICAgIGlmIChldmVudCQxIGluIGFEYXRhLm9uKSB7XG4gICAgICAgICAgICAvLyBvbltldmVudF0gaXMgYWx3YXlzIGEgZnVuY3Rpb25cbiAgICAgICAgICAgIGFEYXRhLm9uW2V2ZW50JDFdLnB1c2gob25bZXZlbnQkMV0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhRGF0YS5vbltldmVudCQxXSA9IGhhbmRsZXI7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGFBdHRycyA9IChhLmRhdGEuYXR0cnMgPSBleHRlbmQoe30sIGEuZGF0YS5hdHRycykpO1xuICAgICAgICBhQXR0cnMuaHJlZiA9IGhyZWY7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBkb2Vzbid0IGhhdmUgPGE+IGNoaWxkLCBhcHBseSBsaXN0ZW5lciB0byBzZWxmXG4gICAgICAgIGRhdGEub24gPSBvbjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gaCh0aGlzLnRhZywgZGF0YSwgdGhpcy4kc2xvdHMuZGVmYXVsdClcbiAgfVxufTtcblxuZnVuY3Rpb24gZ3VhcmRFdmVudCAoZSkge1xuICAvLyBkb24ndCByZWRpcmVjdCB3aXRoIGNvbnRyb2wga2V5c1xuICBpZiAoZS5tZXRhS2V5IHx8IGUuYWx0S2V5IHx8IGUuY3RybEtleSB8fCBlLnNoaWZ0S2V5KSB7IHJldHVybiB9XG4gIC8vIGRvbid0IHJlZGlyZWN0IHdoZW4gcHJldmVudERlZmF1bHQgY2FsbGVkXG4gIGlmIChlLmRlZmF1bHRQcmV2ZW50ZWQpIHsgcmV0dXJuIH1cbiAgLy8gZG9uJ3QgcmVkaXJlY3Qgb24gcmlnaHQgY2xpY2tcbiAgaWYgKGUuYnV0dG9uICE9PSB1bmRlZmluZWQgJiYgZS5idXR0b24gIT09IDApIHsgcmV0dXJuIH1cbiAgLy8gZG9uJ3QgcmVkaXJlY3QgaWYgYHRhcmdldD1cIl9ibGFua1wiYFxuICBpZiAoZS5jdXJyZW50VGFyZ2V0ICYmIGUuY3VycmVudFRhcmdldC5nZXRBdHRyaWJ1dGUpIHtcbiAgICB2YXIgdGFyZ2V0ID0gZS5jdXJyZW50VGFyZ2V0LmdldEF0dHJpYnV0ZSgndGFyZ2V0Jyk7XG4gICAgaWYgKC9cXGJfYmxhbmtcXGIvaS50ZXN0KHRhcmdldCkpIHsgcmV0dXJuIH1cbiAgfVxuICAvLyB0aGlzIG1heSBiZSBhIFdlZXggZXZlbnQgd2hpY2ggZG9lc24ndCBoYXZlIHRoaXMgbWV0aG9kXG4gIGlmIChlLnByZXZlbnREZWZhdWx0KSB7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICB9XG4gIHJldHVybiB0cnVlXG59XG5cbmZ1bmN0aW9uIGZpbmRBbmNob3IgKGNoaWxkcmVuKSB7XG4gIGlmIChjaGlsZHJlbikge1xuICAgIHZhciBjaGlsZDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjaGlsZCA9IGNoaWxkcmVuW2ldO1xuICAgICAgaWYgKGNoaWxkLnRhZyA9PT0gJ2EnKSB7XG4gICAgICAgIHJldHVybiBjaGlsZFxuICAgICAgfVxuICAgICAgaWYgKGNoaWxkLmNoaWxkcmVuICYmIChjaGlsZCA9IGZpbmRBbmNob3IoY2hpbGQuY2hpbGRyZW4pKSkge1xuICAgICAgICByZXR1cm4gY2hpbGRcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxudmFyIF9WdWU7XG5cbmZ1bmN0aW9uIGluc3RhbGwgKFZ1ZSkge1xuICBpZiAoaW5zdGFsbC5pbnN0YWxsZWQgJiYgX1Z1ZSA9PT0gVnVlKSB7IHJldHVybiB9XG4gIGluc3RhbGwuaW5zdGFsbGVkID0gdHJ1ZTtcblxuICBfVnVlID0gVnVlO1xuXG4gIHZhciBpc0RlZiA9IGZ1bmN0aW9uICh2KSB7IHJldHVybiB2ICE9PSB1bmRlZmluZWQ7IH07XG5cbiAgdmFyIHJlZ2lzdGVySW5zdGFuY2UgPSBmdW5jdGlvbiAodm0sIGNhbGxWYWwpIHtcbiAgICB2YXIgaSA9IHZtLiRvcHRpb25zLl9wYXJlbnRWbm9kZTtcbiAgICBpZiAoaXNEZWYoaSkgJiYgaXNEZWYoaSA9IGkuZGF0YSkgJiYgaXNEZWYoaSA9IGkucmVnaXN0ZXJSb3V0ZUluc3RhbmNlKSkge1xuICAgICAgaSh2bSwgY2FsbFZhbCk7XG4gICAgfVxuICB9O1xuXG4gIFZ1ZS5taXhpbih7XG4gICAgYmVmb3JlQ3JlYXRlOiBmdW5jdGlvbiBiZWZvcmVDcmVhdGUgKCkge1xuICAgICAgaWYgKGlzRGVmKHRoaXMuJG9wdGlvbnMucm91dGVyKSkge1xuICAgICAgICB0aGlzLl9yb3V0ZXJSb290ID0gdGhpcztcbiAgICAgICAgdGhpcy5fcm91dGVyID0gdGhpcy4kb3B0aW9ucy5yb3V0ZXI7XG4gICAgICAgIHRoaXMuX3JvdXRlci5pbml0KHRoaXMpO1xuICAgICAgICBWdWUudXRpbC5kZWZpbmVSZWFjdGl2ZSh0aGlzLCAnX3JvdXRlJywgdGhpcy5fcm91dGVyLmhpc3RvcnkuY3VycmVudCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9yb3V0ZXJSb290ID0gKHRoaXMuJHBhcmVudCAmJiB0aGlzLiRwYXJlbnQuX3JvdXRlclJvb3QpIHx8IHRoaXM7XG4gICAgICB9XG4gICAgICByZWdpc3Rlckluc3RhbmNlKHRoaXMsIHRoaXMpO1xuICAgIH0sXG4gICAgZGVzdHJveWVkOiBmdW5jdGlvbiBkZXN0cm95ZWQgKCkge1xuICAgICAgcmVnaXN0ZXJJbnN0YW5jZSh0aGlzKTtcbiAgICB9XG4gIH0pO1xuXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShWdWUucHJvdG90eXBlLCAnJHJvdXRlcicsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uIGdldCAoKSB7IHJldHVybiB0aGlzLl9yb3V0ZXJSb290Ll9yb3V0ZXIgfVxuICB9KTtcblxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVnVlLnByb3RvdHlwZSwgJyRyb3V0ZScsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uIGdldCAoKSB7IHJldHVybiB0aGlzLl9yb3V0ZXJSb290Ll9yb3V0ZSB9XG4gIH0pO1xuXG4gIFZ1ZS5jb21wb25lbnQoJ1JvdXRlclZpZXcnLCBWaWV3KTtcbiAgVnVlLmNvbXBvbmVudCgnUm91dGVyTGluaycsIExpbmspO1xuXG4gIHZhciBzdHJhdHMgPSBWdWUuY29uZmlnLm9wdGlvbk1lcmdlU3RyYXRlZ2llcztcbiAgLy8gdXNlIHRoZSBzYW1lIGhvb2sgbWVyZ2luZyBzdHJhdGVneSBmb3Igcm91dGUgaG9va3NcbiAgc3RyYXRzLmJlZm9yZVJvdXRlRW50ZXIgPSBzdHJhdHMuYmVmb3JlUm91dGVMZWF2ZSA9IHN0cmF0cy5iZWZvcmVSb3V0ZVVwZGF0ZSA9IHN0cmF0cy5jcmVhdGVkO1xufVxuXG4vKiAgKi9cblxudmFyIGluQnJvd3NlciA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnO1xuXG4vKiAgKi9cblxuZnVuY3Rpb24gY3JlYXRlUm91dGVNYXAgKFxuICByb3V0ZXMsXG4gIG9sZFBhdGhMaXN0LFxuICBvbGRQYXRoTWFwLFxuICBvbGROYW1lTWFwXG4pIHtcbiAgLy8gdGhlIHBhdGggbGlzdCBpcyB1c2VkIHRvIGNvbnRyb2wgcGF0aCBtYXRjaGluZyBwcmlvcml0eVxuICB2YXIgcGF0aExpc3QgPSBvbGRQYXRoTGlzdCB8fCBbXTtcbiAgLy8gJGZsb3ctZGlzYWJsZS1saW5lXG4gIHZhciBwYXRoTWFwID0gb2xkUGF0aE1hcCB8fCBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAvLyAkZmxvdy1kaXNhYmxlLWxpbmVcbiAgdmFyIG5hbWVNYXAgPSBvbGROYW1lTWFwIHx8IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cbiAgcm91dGVzLmZvckVhY2goZnVuY3Rpb24gKHJvdXRlKSB7XG4gICAgYWRkUm91dGVSZWNvcmQocGF0aExpc3QsIHBhdGhNYXAsIG5hbWVNYXAsIHJvdXRlKTtcbiAgfSk7XG5cbiAgLy8gZW5zdXJlIHdpbGRjYXJkIHJvdXRlcyBhcmUgYWx3YXlzIGF0IHRoZSBlbmRcbiAgZm9yICh2YXIgaSA9IDAsIGwgPSBwYXRoTGlzdC5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICBpZiAocGF0aExpc3RbaV0gPT09ICcqJykge1xuICAgICAgcGF0aExpc3QucHVzaChwYXRoTGlzdC5zcGxpY2UoaSwgMSlbMF0pO1xuICAgICAgbC0tO1xuICAgICAgaS0tO1xuICAgIH1cbiAgfVxuXG4gIGlmIChcInByb2R1Y3Rpb25cIiA9PT0gJ2RldmVsb3BtZW50Jykge1xuICAgIC8vIHdhcm4gaWYgcm91dGVzIGRvIG5vdCBpbmNsdWRlIGxlYWRpbmcgc2xhc2hlc1xuICAgIHZhciBmb3VuZCA9IHBhdGhMaXN0XG4gICAgLy8gY2hlY2sgZm9yIG1pc3NpbmcgbGVhZGluZyBzbGFzaFxuICAgICAgLmZpbHRlcihmdW5jdGlvbiAocGF0aCkgeyByZXR1cm4gcGF0aCAmJiBwYXRoLmNoYXJBdCgwKSAhPT0gJyonICYmIHBhdGguY2hhckF0KDApICE9PSAnLyc7IH0pO1xuXG4gICAgaWYgKGZvdW5kLmxlbmd0aCA+IDApIHtcbiAgICAgIHZhciBwYXRoTmFtZXMgPSBmb3VuZC5tYXAoZnVuY3Rpb24gKHBhdGgpIHsgcmV0dXJuIChcIi0gXCIgKyBwYXRoKTsgfSkuam9pbignXFxuJyk7XG4gICAgICB3YXJuKGZhbHNlLCAoXCJOb24tbmVzdGVkIHJvdXRlcyBtdXN0IGluY2x1ZGUgYSBsZWFkaW5nIHNsYXNoIGNoYXJhY3Rlci4gRml4IHRoZSBmb2xsb3dpbmcgcm91dGVzOiBcXG5cIiArIHBhdGhOYW1lcykpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgcGF0aExpc3Q6IHBhdGhMaXN0LFxuICAgIHBhdGhNYXA6IHBhdGhNYXAsXG4gICAgbmFtZU1hcDogbmFtZU1hcFxuICB9XG59XG5cbmZ1bmN0aW9uIGFkZFJvdXRlUmVjb3JkIChcbiAgcGF0aExpc3QsXG4gIHBhdGhNYXAsXG4gIG5hbWVNYXAsXG4gIHJvdXRlLFxuICBwYXJlbnQsXG4gIG1hdGNoQXNcbikge1xuICB2YXIgcGF0aCA9IHJvdXRlLnBhdGg7XG4gIHZhciBuYW1lID0gcm91dGUubmFtZTtcbiAgaWYgKFwicHJvZHVjdGlvblwiICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBhc3NlcnQocGF0aCAhPSBudWxsLCBcIlxcXCJwYXRoXFxcIiBpcyByZXF1aXJlZCBpbiBhIHJvdXRlIGNvbmZpZ3VyYXRpb24uXCIpO1xuICAgIGFzc2VydChcbiAgICAgIHR5cGVvZiByb3V0ZS5jb21wb25lbnQgIT09ICdzdHJpbmcnLFxuICAgICAgXCJyb3V0ZSBjb25maWcgXFxcImNvbXBvbmVudFxcXCIgZm9yIHBhdGg6IFwiICsgKFN0cmluZyhcbiAgICAgICAgcGF0aCB8fCBuYW1lXG4gICAgICApKSArIFwiIGNhbm5vdCBiZSBhIFwiICsgXCJzdHJpbmcgaWQuIFVzZSBhbiBhY3R1YWwgY29tcG9uZW50IGluc3RlYWQuXCJcbiAgICApO1xuICB9XG5cbiAgdmFyIHBhdGhUb1JlZ2V4cE9wdGlvbnMgPVxuICAgIHJvdXRlLnBhdGhUb1JlZ2V4cE9wdGlvbnMgfHwge307XG4gIHZhciBub3JtYWxpemVkUGF0aCA9IG5vcm1hbGl6ZVBhdGgocGF0aCwgcGFyZW50LCBwYXRoVG9SZWdleHBPcHRpb25zLnN0cmljdCk7XG5cbiAgaWYgKHR5cGVvZiByb3V0ZS5jYXNlU2Vuc2l0aXZlID09PSAnYm9vbGVhbicpIHtcbiAgICBwYXRoVG9SZWdleHBPcHRpb25zLnNlbnNpdGl2ZSA9IHJvdXRlLmNhc2VTZW5zaXRpdmU7XG4gIH1cblxuICB2YXIgcmVjb3JkID0ge1xuICAgIHBhdGg6IG5vcm1hbGl6ZWRQYXRoLFxuICAgIHJlZ2V4OiBjb21waWxlUm91dGVSZWdleChub3JtYWxpemVkUGF0aCwgcGF0aFRvUmVnZXhwT3B0aW9ucyksXG4gICAgY29tcG9uZW50czogcm91dGUuY29tcG9uZW50cyB8fCB7IGRlZmF1bHQ6IHJvdXRlLmNvbXBvbmVudCB9LFxuICAgIGluc3RhbmNlczoge30sXG4gICAgbmFtZTogbmFtZSxcbiAgICBwYXJlbnQ6IHBhcmVudCxcbiAgICBtYXRjaEFzOiBtYXRjaEFzLFxuICAgIHJlZGlyZWN0OiByb3V0ZS5yZWRpcmVjdCxcbiAgICBiZWZvcmVFbnRlcjogcm91dGUuYmVmb3JlRW50ZXIsXG4gICAgbWV0YTogcm91dGUubWV0YSB8fCB7fSxcbiAgICBwcm9wczpcbiAgICAgIHJvdXRlLnByb3BzID09IG51bGxcbiAgICAgICAgPyB7fVxuICAgICAgICA6IHJvdXRlLmNvbXBvbmVudHNcbiAgICAgICAgICA/IHJvdXRlLnByb3BzXG4gICAgICAgICAgOiB7IGRlZmF1bHQ6IHJvdXRlLnByb3BzIH1cbiAgfTtcblxuICBpZiAocm91dGUuY2hpbGRyZW4pIHtcbiAgICAvLyBXYXJuIGlmIHJvdXRlIGlzIG5hbWVkLCBkb2VzIG5vdCByZWRpcmVjdCBhbmQgaGFzIGEgZGVmYXVsdCBjaGlsZCByb3V0ZS5cbiAgICAvLyBJZiB1c2VycyBuYXZpZ2F0ZSB0byB0aGlzIHJvdXRlIGJ5IG5hbWUsIHRoZSBkZWZhdWx0IGNoaWxkIHdpbGxcbiAgICAvLyBub3QgYmUgcmVuZGVyZWQgKEdIIElzc3VlICM2MjkpXG4gICAgaWYgKFwicHJvZHVjdGlvblwiICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGlmIChcbiAgICAgICAgcm91dGUubmFtZSAmJlxuICAgICAgICAhcm91dGUucmVkaXJlY3QgJiZcbiAgICAgICAgcm91dGUuY2hpbGRyZW4uc29tZShmdW5jdGlvbiAoY2hpbGQpIHsgcmV0dXJuIC9eXFwvPyQvLnRlc3QoY2hpbGQucGF0aCk7IH0pXG4gICAgICApIHtcbiAgICAgICAgd2FybihcbiAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICBcIk5hbWVkIFJvdXRlICdcIiArIChyb3V0ZS5uYW1lKSArIFwiJyBoYXMgYSBkZWZhdWx0IGNoaWxkIHJvdXRlLiBcIiArXG4gICAgICAgICAgICBcIldoZW4gbmF2aWdhdGluZyB0byB0aGlzIG5hbWVkIHJvdXRlICg6dG89XFxcIntuYW1lOiAnXCIgKyAocm91dGUubmFtZSkgKyBcIidcXFwiKSwgXCIgK1xuICAgICAgICAgICAgXCJ0aGUgZGVmYXVsdCBjaGlsZCByb3V0ZSB3aWxsIG5vdCBiZSByZW5kZXJlZC4gUmVtb3ZlIHRoZSBuYW1lIGZyb20gXCIgK1xuICAgICAgICAgICAgXCJ0aGlzIHJvdXRlIGFuZCB1c2UgdGhlIG5hbWUgb2YgdGhlIGRlZmF1bHQgY2hpbGQgcm91dGUgZm9yIG5hbWVkIFwiICtcbiAgICAgICAgICAgIFwibGlua3MgaW5zdGVhZC5cIlxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICByb3V0ZS5jaGlsZHJlbi5mb3JFYWNoKGZ1bmN0aW9uIChjaGlsZCkge1xuICAgICAgdmFyIGNoaWxkTWF0Y2hBcyA9IG1hdGNoQXNcbiAgICAgICAgPyBjbGVhblBhdGgoKG1hdGNoQXMgKyBcIi9cIiArIChjaGlsZC5wYXRoKSkpXG4gICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgYWRkUm91dGVSZWNvcmQocGF0aExpc3QsIHBhdGhNYXAsIG5hbWVNYXAsIGNoaWxkLCByZWNvcmQsIGNoaWxkTWF0Y2hBcyk7XG4gICAgfSk7XG4gIH1cblxuICBpZiAoIXBhdGhNYXBbcmVjb3JkLnBhdGhdKSB7XG4gICAgcGF0aExpc3QucHVzaChyZWNvcmQucGF0aCk7XG4gICAgcGF0aE1hcFtyZWNvcmQucGF0aF0gPSByZWNvcmQ7XG4gIH1cblxuICBpZiAocm91dGUuYWxpYXMgIT09IHVuZGVmaW5lZCkge1xuICAgIHZhciBhbGlhc2VzID0gQXJyYXkuaXNBcnJheShyb3V0ZS5hbGlhcykgPyByb3V0ZS5hbGlhcyA6IFtyb3V0ZS5hbGlhc107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbGlhc2VzLmxlbmd0aDsgKytpKSB7XG4gICAgICB2YXIgYWxpYXMgPSBhbGlhc2VzW2ldO1xuICAgICAgaWYgKFwicHJvZHVjdGlvblwiICE9PSAncHJvZHVjdGlvbicgJiYgYWxpYXMgPT09IHBhdGgpIHtcbiAgICAgICAgd2FybihcbiAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAoXCJGb3VuZCBhbiBhbGlhcyB3aXRoIHRoZSBzYW1lIHZhbHVlIGFzIHRoZSBwYXRoOiBcXFwiXCIgKyBwYXRoICsgXCJcXFwiLiBZb3UgaGF2ZSB0byByZW1vdmUgdGhhdCBhbGlhcy4gSXQgd2lsbCBiZSBpZ25vcmVkIGluIGRldmVsb3BtZW50LlwiKVxuICAgICAgICApO1xuICAgICAgICAvLyBza2lwIGluIGRldiB0byBtYWtlIGl0IHdvcmtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgdmFyIGFsaWFzUm91dGUgPSB7XG4gICAgICAgIHBhdGg6IGFsaWFzLFxuICAgICAgICBjaGlsZHJlbjogcm91dGUuY2hpbGRyZW5cbiAgICAgIH07XG4gICAgICBhZGRSb3V0ZVJlY29yZChcbiAgICAgICAgcGF0aExpc3QsXG4gICAgICAgIHBhdGhNYXAsXG4gICAgICAgIG5hbWVNYXAsXG4gICAgICAgIGFsaWFzUm91dGUsXG4gICAgICAgIHBhcmVudCxcbiAgICAgICAgcmVjb3JkLnBhdGggfHwgJy8nIC8vIG1hdGNoQXNcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgaWYgKG5hbWUpIHtcbiAgICBpZiAoIW5hbWVNYXBbbmFtZV0pIHtcbiAgICAgIG5hbWVNYXBbbmFtZV0gPSByZWNvcmQ7XG4gICAgfSBlbHNlIGlmIChcInByb2R1Y3Rpb25cIiAhPT0gJ3Byb2R1Y3Rpb24nICYmICFtYXRjaEFzKSB7XG4gICAgICB3YXJuKFxuICAgICAgICBmYWxzZSxcbiAgICAgICAgXCJEdXBsaWNhdGUgbmFtZWQgcm91dGVzIGRlZmluaXRpb246IFwiICtcbiAgICAgICAgICBcInsgbmFtZTogXFxcIlwiICsgbmFtZSArIFwiXFxcIiwgcGF0aDogXFxcIlwiICsgKHJlY29yZC5wYXRoKSArIFwiXFxcIiB9XCJcbiAgICAgICk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNvbXBpbGVSb3V0ZVJlZ2V4IChcbiAgcGF0aCxcbiAgcGF0aFRvUmVnZXhwT3B0aW9uc1xuKSB7XG4gIHZhciByZWdleCA9IHBhdGhUb1JlZ2V4cF8xKHBhdGgsIFtdLCBwYXRoVG9SZWdleHBPcHRpb25zKTtcbiAgaWYgKFwicHJvZHVjdGlvblwiICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICB2YXIga2V5cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgcmVnZXgua2V5cy5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIHdhcm4oXG4gICAgICAgICFrZXlzW2tleS5uYW1lXSxcbiAgICAgICAgKFwiRHVwbGljYXRlIHBhcmFtIGtleXMgaW4gcm91dGUgd2l0aCBwYXRoOiBcXFwiXCIgKyBwYXRoICsgXCJcXFwiXCIpXG4gICAgICApO1xuICAgICAga2V5c1trZXkubmFtZV0gPSB0cnVlO1xuICAgIH0pO1xuICB9XG4gIHJldHVybiByZWdleFxufVxuXG5mdW5jdGlvbiBub3JtYWxpemVQYXRoIChcbiAgcGF0aCxcbiAgcGFyZW50LFxuICBzdHJpY3Rcbikge1xuICBpZiAoIXN0cmljdCkgeyBwYXRoID0gcGF0aC5yZXBsYWNlKC9cXC8kLywgJycpOyB9XG4gIGlmIChwYXRoWzBdID09PSAnLycpIHsgcmV0dXJuIHBhdGggfVxuICBpZiAocGFyZW50ID09IG51bGwpIHsgcmV0dXJuIHBhdGggfVxuICByZXR1cm4gY2xlYW5QYXRoKCgocGFyZW50LnBhdGgpICsgXCIvXCIgKyBwYXRoKSlcbn1cblxuLyogICovXG5cblxuXG5mdW5jdGlvbiBjcmVhdGVNYXRjaGVyIChcbiAgcm91dGVzLFxuICByb3V0ZXJcbikge1xuICB2YXIgcmVmID0gY3JlYXRlUm91dGVNYXAocm91dGVzKTtcbiAgdmFyIHBhdGhMaXN0ID0gcmVmLnBhdGhMaXN0O1xuICB2YXIgcGF0aE1hcCA9IHJlZi5wYXRoTWFwO1xuICB2YXIgbmFtZU1hcCA9IHJlZi5uYW1lTWFwO1xuXG4gIGZ1bmN0aW9uIGFkZFJvdXRlcyAocm91dGVzKSB7XG4gICAgY3JlYXRlUm91dGVNYXAocm91dGVzLCBwYXRoTGlzdCwgcGF0aE1hcCwgbmFtZU1hcCk7XG4gIH1cblxuICBmdW5jdGlvbiBtYXRjaCAoXG4gICAgcmF3LFxuICAgIGN1cnJlbnRSb3V0ZSxcbiAgICByZWRpcmVjdGVkRnJvbVxuICApIHtcbiAgICB2YXIgbG9jYXRpb24gPSBub3JtYWxpemVMb2NhdGlvbihyYXcsIGN1cnJlbnRSb3V0ZSwgZmFsc2UsIHJvdXRlcik7XG4gICAgdmFyIG5hbWUgPSBsb2NhdGlvbi5uYW1lO1xuXG4gICAgaWYgKG5hbWUpIHtcbiAgICAgIHZhciByZWNvcmQgPSBuYW1lTWFwW25hbWVdO1xuICAgICAgaWYgKFwicHJvZHVjdGlvblwiICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgd2FybihyZWNvcmQsIChcIlJvdXRlIHdpdGggbmFtZSAnXCIgKyBuYW1lICsgXCInIGRvZXMgbm90IGV4aXN0XCIpKTtcbiAgICAgIH1cbiAgICAgIGlmICghcmVjb3JkKSB7IHJldHVybiBfY3JlYXRlUm91dGUobnVsbCwgbG9jYXRpb24pIH1cbiAgICAgIHZhciBwYXJhbU5hbWVzID0gcmVjb3JkLnJlZ2V4LmtleXNcbiAgICAgICAgLmZpbHRlcihmdW5jdGlvbiAoa2V5KSB7IHJldHVybiAha2V5Lm9wdGlvbmFsOyB9KVxuICAgICAgICAubWFwKGZ1bmN0aW9uIChrZXkpIHsgcmV0dXJuIGtleS5uYW1lOyB9KTtcblxuICAgICAgaWYgKHR5cGVvZiBsb2NhdGlvbi5wYXJhbXMgIT09ICdvYmplY3QnKSB7XG4gICAgICAgIGxvY2F0aW9uLnBhcmFtcyA9IHt9O1xuICAgICAgfVxuXG4gICAgICBpZiAoY3VycmVudFJvdXRlICYmIHR5cGVvZiBjdXJyZW50Um91dGUucGFyYW1zID09PSAnb2JqZWN0Jykge1xuICAgICAgICBmb3IgKHZhciBrZXkgaW4gY3VycmVudFJvdXRlLnBhcmFtcykge1xuICAgICAgICAgIGlmICghKGtleSBpbiBsb2NhdGlvbi5wYXJhbXMpICYmIHBhcmFtTmFtZXMuaW5kZXhPZihrZXkpID4gLTEpIHtcbiAgICAgICAgICAgIGxvY2F0aW9uLnBhcmFtc1trZXldID0gY3VycmVudFJvdXRlLnBhcmFtc1trZXldO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBsb2NhdGlvbi5wYXRoID0gZmlsbFBhcmFtcyhyZWNvcmQucGF0aCwgbG9jYXRpb24ucGFyYW1zLCAoXCJuYW1lZCByb3V0ZSBcXFwiXCIgKyBuYW1lICsgXCJcXFwiXCIpKTtcbiAgICAgIHJldHVybiBfY3JlYXRlUm91dGUocmVjb3JkLCBsb2NhdGlvbiwgcmVkaXJlY3RlZEZyb20pXG4gICAgfSBlbHNlIGlmIChsb2NhdGlvbi5wYXRoKSB7XG4gICAgICBsb2NhdGlvbi5wYXJhbXMgPSB7fTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGF0aExpc3QubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIHBhdGggPSBwYXRoTGlzdFtpXTtcbiAgICAgICAgdmFyIHJlY29yZCQxID0gcGF0aE1hcFtwYXRoXTtcbiAgICAgICAgaWYgKG1hdGNoUm91dGUocmVjb3JkJDEucmVnZXgsIGxvY2F0aW9uLnBhdGgsIGxvY2F0aW9uLnBhcmFtcykpIHtcbiAgICAgICAgICByZXR1cm4gX2NyZWF0ZVJvdXRlKHJlY29yZCQxLCBsb2NhdGlvbiwgcmVkaXJlY3RlZEZyb20pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgLy8gbm8gbWF0Y2hcbiAgICByZXR1cm4gX2NyZWF0ZVJvdXRlKG51bGwsIGxvY2F0aW9uKVxuICB9XG5cbiAgZnVuY3Rpb24gcmVkaXJlY3QgKFxuICAgIHJlY29yZCxcbiAgICBsb2NhdGlvblxuICApIHtcbiAgICB2YXIgb3JpZ2luYWxSZWRpcmVjdCA9IHJlY29yZC5yZWRpcmVjdDtcbiAgICB2YXIgcmVkaXJlY3QgPSB0eXBlb2Ygb3JpZ2luYWxSZWRpcmVjdCA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgPyBvcmlnaW5hbFJlZGlyZWN0KGNyZWF0ZVJvdXRlKHJlY29yZCwgbG9jYXRpb24sIG51bGwsIHJvdXRlcikpXG4gICAgICA6IG9yaWdpbmFsUmVkaXJlY3Q7XG5cbiAgICBpZiAodHlwZW9mIHJlZGlyZWN0ID09PSAnc3RyaW5nJykge1xuICAgICAgcmVkaXJlY3QgPSB7IHBhdGg6IHJlZGlyZWN0IH07XG4gICAgfVxuXG4gICAgaWYgKCFyZWRpcmVjdCB8fCB0eXBlb2YgcmVkaXJlY3QgIT09ICdvYmplY3QnKSB7XG4gICAgICBpZiAoXCJwcm9kdWN0aW9uXCIgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICB3YXJuKFxuICAgICAgICAgIGZhbHNlLCAoXCJpbnZhbGlkIHJlZGlyZWN0IG9wdGlvbjogXCIgKyAoSlNPTi5zdHJpbmdpZnkocmVkaXJlY3QpKSlcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBfY3JlYXRlUm91dGUobnVsbCwgbG9jYXRpb24pXG4gICAgfVxuXG4gICAgdmFyIHJlID0gcmVkaXJlY3Q7XG4gICAgdmFyIG5hbWUgPSByZS5uYW1lO1xuICAgIHZhciBwYXRoID0gcmUucGF0aDtcbiAgICB2YXIgcXVlcnkgPSBsb2NhdGlvbi5xdWVyeTtcbiAgICB2YXIgaGFzaCA9IGxvY2F0aW9uLmhhc2g7XG4gICAgdmFyIHBhcmFtcyA9IGxvY2F0aW9uLnBhcmFtcztcbiAgICBxdWVyeSA9IHJlLmhhc093blByb3BlcnR5KCdxdWVyeScpID8gcmUucXVlcnkgOiBxdWVyeTtcbiAgICBoYXNoID0gcmUuaGFzT3duUHJvcGVydHkoJ2hhc2gnKSA/IHJlLmhhc2ggOiBoYXNoO1xuICAgIHBhcmFtcyA9IHJlLmhhc093blByb3BlcnR5KCdwYXJhbXMnKSA/IHJlLnBhcmFtcyA6IHBhcmFtcztcblxuICAgIGlmIChuYW1lKSB7XG4gICAgICAvLyByZXNvbHZlZCBuYW1lZCBkaXJlY3RcbiAgICAgIHZhciB0YXJnZXRSZWNvcmQgPSBuYW1lTWFwW25hbWVdO1xuICAgICAgaWYgKFwicHJvZHVjdGlvblwiICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgYXNzZXJ0KHRhcmdldFJlY29yZCwgKFwicmVkaXJlY3QgZmFpbGVkOiBuYW1lZCByb3V0ZSBcXFwiXCIgKyBuYW1lICsgXCJcXFwiIG5vdCBmb3VuZC5cIikpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG1hdGNoKHtcbiAgICAgICAgX25vcm1hbGl6ZWQ6IHRydWUsXG4gICAgICAgIG5hbWU6IG5hbWUsXG4gICAgICAgIHF1ZXJ5OiBxdWVyeSxcbiAgICAgICAgaGFzaDogaGFzaCxcbiAgICAgICAgcGFyYW1zOiBwYXJhbXNcbiAgICAgIH0sIHVuZGVmaW5lZCwgbG9jYXRpb24pXG4gICAgfSBlbHNlIGlmIChwYXRoKSB7XG4gICAgICAvLyAxLiByZXNvbHZlIHJlbGF0aXZlIHJlZGlyZWN0XG4gICAgICB2YXIgcmF3UGF0aCA9IHJlc29sdmVSZWNvcmRQYXRoKHBhdGgsIHJlY29yZCk7XG4gICAgICAvLyAyLiByZXNvbHZlIHBhcmFtc1xuICAgICAgdmFyIHJlc29sdmVkUGF0aCA9IGZpbGxQYXJhbXMocmF3UGF0aCwgcGFyYW1zLCAoXCJyZWRpcmVjdCByb3V0ZSB3aXRoIHBhdGggXFxcIlwiICsgcmF3UGF0aCArIFwiXFxcIlwiKSk7XG4gICAgICAvLyAzLiByZW1hdGNoIHdpdGggZXhpc3RpbmcgcXVlcnkgYW5kIGhhc2hcbiAgICAgIHJldHVybiBtYXRjaCh7XG4gICAgICAgIF9ub3JtYWxpemVkOiB0cnVlLFxuICAgICAgICBwYXRoOiByZXNvbHZlZFBhdGgsXG4gICAgICAgIHF1ZXJ5OiBxdWVyeSxcbiAgICAgICAgaGFzaDogaGFzaFxuICAgICAgfSwgdW5kZWZpbmVkLCBsb2NhdGlvbilcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKFwicHJvZHVjdGlvblwiICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgd2FybihmYWxzZSwgKFwiaW52YWxpZCByZWRpcmVjdCBvcHRpb246IFwiICsgKEpTT04uc3RyaW5naWZ5KHJlZGlyZWN0KSkpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBfY3JlYXRlUm91dGUobnVsbCwgbG9jYXRpb24pXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gYWxpYXMgKFxuICAgIHJlY29yZCxcbiAgICBsb2NhdGlvbixcbiAgICBtYXRjaEFzXG4gICkge1xuICAgIHZhciBhbGlhc2VkUGF0aCA9IGZpbGxQYXJhbXMobWF0Y2hBcywgbG9jYXRpb24ucGFyYW1zLCAoXCJhbGlhc2VkIHJvdXRlIHdpdGggcGF0aCBcXFwiXCIgKyBtYXRjaEFzICsgXCJcXFwiXCIpKTtcbiAgICB2YXIgYWxpYXNlZE1hdGNoID0gbWF0Y2goe1xuICAgICAgX25vcm1hbGl6ZWQ6IHRydWUsXG4gICAgICBwYXRoOiBhbGlhc2VkUGF0aFxuICAgIH0pO1xuICAgIGlmIChhbGlhc2VkTWF0Y2gpIHtcbiAgICAgIHZhciBtYXRjaGVkID0gYWxpYXNlZE1hdGNoLm1hdGNoZWQ7XG4gICAgICB2YXIgYWxpYXNlZFJlY29yZCA9IG1hdGNoZWRbbWF0Y2hlZC5sZW5ndGggLSAxXTtcbiAgICAgIGxvY2F0aW9uLnBhcmFtcyA9IGFsaWFzZWRNYXRjaC5wYXJhbXM7XG4gICAgICByZXR1cm4gX2NyZWF0ZVJvdXRlKGFsaWFzZWRSZWNvcmQsIGxvY2F0aW9uKVxuICAgIH1cbiAgICByZXR1cm4gX2NyZWF0ZVJvdXRlKG51bGwsIGxvY2F0aW9uKVxuICB9XG5cbiAgZnVuY3Rpb24gX2NyZWF0ZVJvdXRlIChcbiAgICByZWNvcmQsXG4gICAgbG9jYXRpb24sXG4gICAgcmVkaXJlY3RlZEZyb21cbiAgKSB7XG4gICAgaWYgKHJlY29yZCAmJiByZWNvcmQucmVkaXJlY3QpIHtcbiAgICAgIHJldHVybiByZWRpcmVjdChyZWNvcmQsIHJlZGlyZWN0ZWRGcm9tIHx8IGxvY2F0aW9uKVxuICAgIH1cbiAgICBpZiAocmVjb3JkICYmIHJlY29yZC5tYXRjaEFzKSB7XG4gICAgICByZXR1cm4gYWxpYXMocmVjb3JkLCBsb2NhdGlvbiwgcmVjb3JkLm1hdGNoQXMpXG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVSb3V0ZShyZWNvcmQsIGxvY2F0aW9uLCByZWRpcmVjdGVkRnJvbSwgcm91dGVyKVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBtYXRjaDogbWF0Y2gsXG4gICAgYWRkUm91dGVzOiBhZGRSb3V0ZXNcbiAgfVxufVxuXG5mdW5jdGlvbiBtYXRjaFJvdXRlIChcbiAgcmVnZXgsXG4gIHBhdGgsXG4gIHBhcmFtc1xuKSB7XG4gIHZhciBtID0gcGF0aC5tYXRjaChyZWdleCk7XG5cbiAgaWYgKCFtKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH0gZWxzZSBpZiAoIXBhcmFtcykge1xuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICBmb3IgKHZhciBpID0gMSwgbGVuID0gbS5sZW5ndGg7IGkgPCBsZW47ICsraSkge1xuICAgIHZhciBrZXkgPSByZWdleC5rZXlzW2kgLSAxXTtcbiAgICB2YXIgdmFsID0gdHlwZW9mIG1baV0gPT09ICdzdHJpbmcnID8gZGVjb2RlVVJJQ29tcG9uZW50KG1baV0pIDogbVtpXTtcbiAgICBpZiAoa2V5KSB7XG4gICAgICAvLyBGaXggIzE5OTQ6IHVzaW5nICogd2l0aCBwcm9wczogdHJ1ZSBnZW5lcmF0ZXMgYSBwYXJhbSBuYW1lZCAwXG4gICAgICBwYXJhbXNba2V5Lm5hbWUgfHwgJ3BhdGhNYXRjaCddID0gdmFsO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlXG59XG5cbmZ1bmN0aW9uIHJlc29sdmVSZWNvcmRQYXRoIChwYXRoLCByZWNvcmQpIHtcbiAgcmV0dXJuIHJlc29sdmVQYXRoKHBhdGgsIHJlY29yZC5wYXJlbnQgPyByZWNvcmQucGFyZW50LnBhdGggOiAnLycsIHRydWUpXG59XG5cbi8qICAqL1xuXG4vLyB1c2UgVXNlciBUaW1pbmcgYXBpIChpZiBwcmVzZW50KSBmb3IgbW9yZSBhY2N1cmF0ZSBrZXkgcHJlY2lzaW9uXG52YXIgVGltZSA9XG4gIGluQnJvd3NlciAmJiB3aW5kb3cucGVyZm9ybWFuY2UgJiYgd2luZG93LnBlcmZvcm1hbmNlLm5vd1xuICAgID8gd2luZG93LnBlcmZvcm1hbmNlXG4gICAgOiBEYXRlO1xuXG5mdW5jdGlvbiBnZW5TdGF0ZUtleSAoKSB7XG4gIHJldHVybiBUaW1lLm5vdygpLnRvRml4ZWQoMylcbn1cblxudmFyIF9rZXkgPSBnZW5TdGF0ZUtleSgpO1xuXG5mdW5jdGlvbiBnZXRTdGF0ZUtleSAoKSB7XG4gIHJldHVybiBfa2V5XG59XG5cbmZ1bmN0aW9uIHNldFN0YXRlS2V5IChrZXkpIHtcbiAgcmV0dXJuIChfa2V5ID0ga2V5KVxufVxuXG4vKiAgKi9cblxudmFyIHBvc2l0aW9uU3RvcmUgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuXG5mdW5jdGlvbiBzZXR1cFNjcm9sbCAoKSB7XG4gIC8vIEZpeCBmb3IgIzE1ODUgZm9yIEZpcmVmb3hcbiAgLy8gRml4IGZvciAjMjE5NSBBZGQgb3B0aW9uYWwgdGhpcmQgYXR0cmlidXRlIHRvIHdvcmthcm91bmQgYSBidWcgaW4gc2FmYXJpIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODI2NzhcbiAgLy8gRml4IGZvciAjMjc3NCBTdXBwb3J0IGZvciBhcHBzIGxvYWRlZCBmcm9tIFdpbmRvd3MgZmlsZSBzaGFyZXMgbm90IG1hcHBlZCB0byBuZXR3b3JrIGRyaXZlczogcmVwbGFjZWQgbG9jYXRpb24ub3JpZ2luIHdpdGhcbiAgLy8gd2luZG93LmxvY2F0aW9uLnByb3RvY29sICsgJy8vJyArIHdpbmRvdy5sb2NhdGlvbi5ob3N0XG4gIC8vIGxvY2F0aW9uLmhvc3QgY29udGFpbnMgdGhlIHBvcnQgYW5kIGxvY2F0aW9uLmhvc3RuYW1lIGRvZXNuJ3RcbiAgdmFyIHByb3RvY29sQW5kUGF0aCA9IHdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbCArICcvLycgKyB3aW5kb3cubG9jYXRpb24uaG9zdDtcbiAgdmFyIGFic29sdXRlUGF0aCA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmLnJlcGxhY2UocHJvdG9jb2xBbmRQYXRoLCAnJyk7XG4gIHdpbmRvdy5oaXN0b3J5LnJlcGxhY2VTdGF0ZSh7IGtleTogZ2V0U3RhdGVLZXkoKSB9LCAnJywgYWJzb2x1dGVQYXRoKTtcbiAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3BvcHN0YXRlJywgZnVuY3Rpb24gKGUpIHtcbiAgICBzYXZlU2Nyb2xsUG9zaXRpb24oKTtcbiAgICBpZiAoZS5zdGF0ZSAmJiBlLnN0YXRlLmtleSkge1xuICAgICAgc2V0U3RhdGVLZXkoZS5zdGF0ZS5rZXkpO1xuICAgIH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGhhbmRsZVNjcm9sbCAoXG4gIHJvdXRlcixcbiAgdG8sXG4gIGZyb20sXG4gIGlzUG9wXG4pIHtcbiAgaWYgKCFyb3V0ZXIuYXBwKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICB2YXIgYmVoYXZpb3IgPSByb3V0ZXIub3B0aW9ucy5zY3JvbGxCZWhhdmlvcjtcbiAgaWYgKCFiZWhhdmlvcikge1xuICAgIHJldHVyblxuICB9XG5cbiAgaWYgKFwicHJvZHVjdGlvblwiICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBhc3NlcnQodHlwZW9mIGJlaGF2aW9yID09PSAnZnVuY3Rpb24nLCBcInNjcm9sbEJlaGF2aW9yIG11c3QgYmUgYSBmdW5jdGlvblwiKTtcbiAgfVxuXG4gIC8vIHdhaXQgdW50aWwgcmUtcmVuZGVyIGZpbmlzaGVzIGJlZm9yZSBzY3JvbGxpbmdcbiAgcm91dGVyLmFwcC4kbmV4dFRpY2soZnVuY3Rpb24gKCkge1xuICAgIHZhciBwb3NpdGlvbiA9IGdldFNjcm9sbFBvc2l0aW9uKCk7XG4gICAgdmFyIHNob3VsZFNjcm9sbCA9IGJlaGF2aW9yLmNhbGwoXG4gICAgICByb3V0ZXIsXG4gICAgICB0byxcbiAgICAgIGZyb20sXG4gICAgICBpc1BvcCA/IHBvc2l0aW9uIDogbnVsbFxuICAgICk7XG5cbiAgICBpZiAoIXNob3VsZFNjcm9sbCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBzaG91bGRTY3JvbGwudGhlbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgc2hvdWxkU2Nyb2xsXG4gICAgICAgIC50aGVuKGZ1bmN0aW9uIChzaG91bGRTY3JvbGwpIHtcbiAgICAgICAgICBzY3JvbGxUb1Bvc2l0aW9uKChzaG91bGRTY3JvbGwpLCBwb3NpdGlvbik7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaChmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgaWYgKFwicHJvZHVjdGlvblwiICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICAgIGFzc2VydChmYWxzZSwgZXJyLnRvU3RyaW5nKCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNjcm9sbFRvUG9zaXRpb24oc2hvdWxkU2Nyb2xsLCBwb3NpdGlvbik7XG4gICAgfVxuICB9KTtcbn1cblxuZnVuY3Rpb24gc2F2ZVNjcm9sbFBvc2l0aW9uICgpIHtcbiAgdmFyIGtleSA9IGdldFN0YXRlS2V5KCk7XG4gIGlmIChrZXkpIHtcbiAgICBwb3NpdGlvblN0b3JlW2tleV0gPSB7XG4gICAgICB4OiB3aW5kb3cucGFnZVhPZmZzZXQsXG4gICAgICB5OiB3aW5kb3cucGFnZVlPZmZzZXRcbiAgICB9O1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldFNjcm9sbFBvc2l0aW9uICgpIHtcbiAgdmFyIGtleSA9IGdldFN0YXRlS2V5KCk7XG4gIGlmIChrZXkpIHtcbiAgICByZXR1cm4gcG9zaXRpb25TdG9yZVtrZXldXG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0RWxlbWVudFBvc2l0aW9uIChlbCwgb2Zmc2V0KSB7XG4gIHZhciBkb2NFbCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiAgdmFyIGRvY1JlY3QgPSBkb2NFbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgdmFyIGVsUmVjdCA9IGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICByZXR1cm4ge1xuICAgIHg6IGVsUmVjdC5sZWZ0IC0gZG9jUmVjdC5sZWZ0IC0gb2Zmc2V0LngsXG4gICAgeTogZWxSZWN0LnRvcCAtIGRvY1JlY3QudG9wIC0gb2Zmc2V0LnlcbiAgfVxufVxuXG5mdW5jdGlvbiBpc1ZhbGlkUG9zaXRpb24gKG9iaikge1xuICByZXR1cm4gaXNOdW1iZXIob2JqLngpIHx8IGlzTnVtYmVyKG9iai55KVxufVxuXG5mdW5jdGlvbiBub3JtYWxpemVQb3NpdGlvbiAob2JqKSB7XG4gIHJldHVybiB7XG4gICAgeDogaXNOdW1iZXIob2JqLngpID8gb2JqLnggOiB3aW5kb3cucGFnZVhPZmZzZXQsXG4gICAgeTogaXNOdW1iZXIob2JqLnkpID8gb2JqLnkgOiB3aW5kb3cucGFnZVlPZmZzZXRcbiAgfVxufVxuXG5mdW5jdGlvbiBub3JtYWxpemVPZmZzZXQgKG9iaikge1xuICByZXR1cm4ge1xuICAgIHg6IGlzTnVtYmVyKG9iai54KSA/IG9iai54IDogMCxcbiAgICB5OiBpc051bWJlcihvYmoueSkgPyBvYmoueSA6IDBcbiAgfVxufVxuXG5mdW5jdGlvbiBpc051bWJlciAodikge1xuICByZXR1cm4gdHlwZW9mIHYgPT09ICdudW1iZXInXG59XG5cbnZhciBoYXNoU3RhcnRzV2l0aE51bWJlclJFID0gL14jXFxkLztcblxuZnVuY3Rpb24gc2Nyb2xsVG9Qb3NpdGlvbiAoc2hvdWxkU2Nyb2xsLCBwb3NpdGlvbikge1xuICB2YXIgaXNPYmplY3QgPSB0eXBlb2Ygc2hvdWxkU2Nyb2xsID09PSAnb2JqZWN0JztcbiAgaWYgKGlzT2JqZWN0ICYmIHR5cGVvZiBzaG91bGRTY3JvbGwuc2VsZWN0b3IgPT09ICdzdHJpbmcnKSB7XG4gICAgLy8gZ2V0RWxlbWVudEJ5SWQgd291bGQgc3RpbGwgZmFpbCBpZiB0aGUgc2VsZWN0b3IgY29udGFpbnMgYSBtb3JlIGNvbXBsaWNhdGVkIHF1ZXJ5IGxpa2UgI21haW5bZGF0YS1hdHRyXVxuICAgIC8vIGJ1dCBhdCB0aGUgc2FtZSB0aW1lLCBpdCBkb2Vzbid0IG1ha2UgbXVjaCBzZW5zZSB0byBzZWxlY3QgYW4gZWxlbWVudCB3aXRoIGFuIGlkIGFuZCBhbiBleHRyYSBzZWxlY3RvclxuICAgIHZhciBlbCA9IGhhc2hTdGFydHNXaXRoTnVtYmVyUkUudGVzdChzaG91bGRTY3JvbGwuc2VsZWN0b3IpIC8vICRmbG93LWRpc2FibGUtbGluZVxuICAgICAgPyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChzaG91bGRTY3JvbGwuc2VsZWN0b3Iuc2xpY2UoMSkpIC8vICRmbG93LWRpc2FibGUtbGluZVxuICAgICAgOiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHNob3VsZFNjcm9sbC5zZWxlY3Rvcik7XG5cbiAgICBpZiAoZWwpIHtcbiAgICAgIHZhciBvZmZzZXQgPVxuICAgICAgICBzaG91bGRTY3JvbGwub2Zmc2V0ICYmIHR5cGVvZiBzaG91bGRTY3JvbGwub2Zmc2V0ID09PSAnb2JqZWN0J1xuICAgICAgICAgID8gc2hvdWxkU2Nyb2xsLm9mZnNldFxuICAgICAgICAgIDoge307XG4gICAgICBvZmZzZXQgPSBub3JtYWxpemVPZmZzZXQob2Zmc2V0KTtcbiAgICAgIHBvc2l0aW9uID0gZ2V0RWxlbWVudFBvc2l0aW9uKGVsLCBvZmZzZXQpO1xuICAgIH0gZWxzZSBpZiAoaXNWYWxpZFBvc2l0aW9uKHNob3VsZFNjcm9sbCkpIHtcbiAgICAgIHBvc2l0aW9uID0gbm9ybWFsaXplUG9zaXRpb24oc2hvdWxkU2Nyb2xsKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoaXNPYmplY3QgJiYgaXNWYWxpZFBvc2l0aW9uKHNob3VsZFNjcm9sbCkpIHtcbiAgICBwb3NpdGlvbiA9IG5vcm1hbGl6ZVBvc2l0aW9uKHNob3VsZFNjcm9sbCk7XG4gIH1cblxuICBpZiAocG9zaXRpb24pIHtcbiAgICB3aW5kb3cuc2Nyb2xsVG8ocG9zaXRpb24ueCwgcG9zaXRpb24ueSk7XG4gIH1cbn1cblxuLyogICovXG5cbnZhciBzdXBwb3J0c1B1c2hTdGF0ZSA9XG4gIGluQnJvd3NlciAmJlxuICAoZnVuY3Rpb24gKCkge1xuICAgIHZhciB1YSA9IHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50O1xuXG4gICAgaWYgKFxuICAgICAgKHVhLmluZGV4T2YoJ0FuZHJvaWQgMi4nKSAhPT0gLTEgfHwgdWEuaW5kZXhPZignQW5kcm9pZCA0LjAnKSAhPT0gLTEpICYmXG4gICAgICB1YS5pbmRleE9mKCdNb2JpbGUgU2FmYXJpJykgIT09IC0xICYmXG4gICAgICB1YS5pbmRleE9mKCdDaHJvbWUnKSA9PT0gLTEgJiZcbiAgICAgIHVhLmluZGV4T2YoJ1dpbmRvd3MgUGhvbmUnKSA9PT0gLTFcbiAgICApIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIHJldHVybiB3aW5kb3cuaGlzdG9yeSAmJiAncHVzaFN0YXRlJyBpbiB3aW5kb3cuaGlzdG9yeVxuICB9KSgpO1xuXG5mdW5jdGlvbiBwdXNoU3RhdGUgKHVybCwgcmVwbGFjZSkge1xuICBzYXZlU2Nyb2xsUG9zaXRpb24oKTtcbiAgLy8gdHJ5Li4uY2F0Y2ggdGhlIHB1c2hTdGF0ZSBjYWxsIHRvIGdldCBhcm91bmQgU2FmYXJpXG4gIC8vIERPTSBFeGNlcHRpb24gMTggd2hlcmUgaXQgbGltaXRzIHRvIDEwMCBwdXNoU3RhdGUgY2FsbHNcbiAgdmFyIGhpc3RvcnkgPSB3aW5kb3cuaGlzdG9yeTtcbiAgdHJ5IHtcbiAgICBpZiAocmVwbGFjZSkge1xuICAgICAgaGlzdG9yeS5yZXBsYWNlU3RhdGUoeyBrZXk6IGdldFN0YXRlS2V5KCkgfSwgJycsIHVybCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGhpc3RvcnkucHVzaFN0YXRlKHsga2V5OiBzZXRTdGF0ZUtleShnZW5TdGF0ZUtleSgpKSB9LCAnJywgdXJsKTtcbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICB3aW5kb3cubG9jYXRpb25bcmVwbGFjZSA/ICdyZXBsYWNlJyA6ICdhc3NpZ24nXSh1cmwpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlcGxhY2VTdGF0ZSAodXJsKSB7XG4gIHB1c2hTdGF0ZSh1cmwsIHRydWUpO1xufVxuXG4vKiAgKi9cblxuZnVuY3Rpb24gcnVuUXVldWUgKHF1ZXVlLCBmbiwgY2IpIHtcbiAgdmFyIHN0ZXAgPSBmdW5jdGlvbiAoaW5kZXgpIHtcbiAgICBpZiAoaW5kZXggPj0gcXVldWUubGVuZ3RoKSB7XG4gICAgICBjYigpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAocXVldWVbaW5kZXhdKSB7XG4gICAgICAgIGZuKHF1ZXVlW2luZGV4XSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHN0ZXAoaW5kZXggKyAxKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdGVwKGluZGV4ICsgMSk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuICBzdGVwKDApO1xufVxuXG4vKiAgKi9cblxuZnVuY3Rpb24gcmVzb2x2ZUFzeW5jQ29tcG9uZW50cyAobWF0Y2hlZCkge1xuICByZXR1cm4gZnVuY3Rpb24gKHRvLCBmcm9tLCBuZXh0KSB7XG4gICAgdmFyIGhhc0FzeW5jID0gZmFsc2U7XG4gICAgdmFyIHBlbmRpbmcgPSAwO1xuICAgIHZhciBlcnJvciA9IG51bGw7XG5cbiAgICBmbGF0TWFwQ29tcG9uZW50cyhtYXRjaGVkLCBmdW5jdGlvbiAoZGVmLCBfLCBtYXRjaCwga2V5KSB7XG4gICAgICAvLyBpZiBpdCdzIGEgZnVuY3Rpb24gYW5kIGRvZXNuJ3QgaGF2ZSBjaWQgYXR0YWNoZWQsXG4gICAgICAvLyBhc3N1bWUgaXQncyBhbiBhc3luYyBjb21wb25lbnQgcmVzb2x2ZSBmdW5jdGlvbi5cbiAgICAgIC8vIHdlIGFyZSBub3QgdXNpbmcgVnVlJ3MgZGVmYXVsdCBhc3luYyByZXNvbHZpbmcgbWVjaGFuaXNtIGJlY2F1c2VcbiAgICAgIC8vIHdlIHdhbnQgdG8gaGFsdCB0aGUgbmF2aWdhdGlvbiB1bnRpbCB0aGUgaW5jb21pbmcgY29tcG9uZW50IGhhcyBiZWVuXG4gICAgICAvLyByZXNvbHZlZC5cbiAgICAgIGlmICh0eXBlb2YgZGVmID09PSAnZnVuY3Rpb24nICYmIGRlZi5jaWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBoYXNBc3luYyA9IHRydWU7XG4gICAgICAgIHBlbmRpbmcrKztcblxuICAgICAgICB2YXIgcmVzb2x2ZSA9IG9uY2UoZnVuY3Rpb24gKHJlc29sdmVkRGVmKSB7XG4gICAgICAgICAgaWYgKGlzRVNNb2R1bGUocmVzb2x2ZWREZWYpKSB7XG4gICAgICAgICAgICByZXNvbHZlZERlZiA9IHJlc29sdmVkRGVmLmRlZmF1bHQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIHNhdmUgcmVzb2x2ZWQgb24gYXN5bmMgZmFjdG9yeSBpbiBjYXNlIGl0J3MgdXNlZCBlbHNld2hlcmVcbiAgICAgICAgICBkZWYucmVzb2x2ZWQgPSB0eXBlb2YgcmVzb2x2ZWREZWYgPT09ICdmdW5jdGlvbidcbiAgICAgICAgICAgID8gcmVzb2x2ZWREZWZcbiAgICAgICAgICAgIDogX1Z1ZS5leHRlbmQocmVzb2x2ZWREZWYpO1xuICAgICAgICAgIG1hdGNoLmNvbXBvbmVudHNba2V5XSA9IHJlc29sdmVkRGVmO1xuICAgICAgICAgIHBlbmRpbmctLTtcbiAgICAgICAgICBpZiAocGVuZGluZyA8PSAwKSB7XG4gICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICB2YXIgcmVqZWN0ID0gb25jZShmdW5jdGlvbiAocmVhc29uKSB7XG4gICAgICAgICAgdmFyIG1zZyA9IFwiRmFpbGVkIHRvIHJlc29sdmUgYXN5bmMgY29tcG9uZW50IFwiICsga2V5ICsgXCI6IFwiICsgcmVhc29uO1xuICAgICAgICAgIFwicHJvZHVjdGlvblwiICE9PSAncHJvZHVjdGlvbicgJiYgd2FybihmYWxzZSwgbXNnKTtcbiAgICAgICAgICBpZiAoIWVycm9yKSB7XG4gICAgICAgICAgICBlcnJvciA9IGlzRXJyb3IocmVhc29uKVxuICAgICAgICAgICAgICA/IHJlYXNvblxuICAgICAgICAgICAgICA6IG5ldyBFcnJvcihtc2cpO1xuICAgICAgICAgICAgbmV4dChlcnJvcik7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICB2YXIgcmVzO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHJlcyA9IGRlZihyZXNvbHZlLCByZWplY3QpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyZXMpIHtcbiAgICAgICAgICBpZiAodHlwZW9mIHJlcy50aGVuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICByZXMudGhlbihyZXNvbHZlLCByZWplY3QpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBuZXcgc3ludGF4IGluIFZ1ZSAyLjNcbiAgICAgICAgICAgIHZhciBjb21wID0gcmVzLmNvbXBvbmVudDtcbiAgICAgICAgICAgIGlmIChjb21wICYmIHR5cGVvZiBjb21wLnRoZW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgY29tcC50aGVuKHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoIWhhc0FzeW5jKSB7IG5leHQoKTsgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGZsYXRNYXBDb21wb25lbnRzIChcbiAgbWF0Y2hlZCxcbiAgZm5cbikge1xuICByZXR1cm4gZmxhdHRlbihtYXRjaGVkLm1hcChmdW5jdGlvbiAobSkge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhtLmNvbXBvbmVudHMpLm1hcChmdW5jdGlvbiAoa2V5KSB7IHJldHVybiBmbihcbiAgICAgIG0uY29tcG9uZW50c1trZXldLFxuICAgICAgbS5pbnN0YW5jZXNba2V5XSxcbiAgICAgIG0sIGtleVxuICAgICk7IH0pXG4gIH0pKVxufVxuXG5mdW5jdGlvbiBmbGF0dGVuIChhcnIpIHtcbiAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5jb25jYXQuYXBwbHkoW10sIGFycilcbn1cblxudmFyIGhhc1N5bWJvbCA9XG4gIHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiZcbiAgdHlwZW9mIFN5bWJvbC50b1N0cmluZ1RhZyA9PT0gJ3N5bWJvbCc7XG5cbmZ1bmN0aW9uIGlzRVNNb2R1bGUgKG9iaikge1xuICByZXR1cm4gb2JqLl9fZXNNb2R1bGUgfHwgKGhhc1N5bWJvbCAmJiBvYmpbU3ltYm9sLnRvU3RyaW5nVGFnXSA9PT0gJ01vZHVsZScpXG59XG5cbi8vIGluIFdlYnBhY2sgMiwgcmVxdWlyZS5lbnN1cmUgbm93IGFsc28gcmV0dXJucyBhIFByb21pc2Vcbi8vIHNvIHRoZSByZXNvbHZlL3JlamVjdCBmdW5jdGlvbnMgbWF5IGdldCBjYWxsZWQgYW4gZXh0cmEgdGltZVxuLy8gaWYgdGhlIHVzZXIgdXNlcyBhbiBhcnJvdyBmdW5jdGlvbiBzaG9ydGhhbmQgdGhhdCBoYXBwZW5zIHRvXG4vLyByZXR1cm4gdGhhdCBQcm9taXNlLlxuZnVuY3Rpb24gb25jZSAoZm4pIHtcbiAgdmFyIGNhbGxlZCA9IGZhbHNlO1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHZhciBhcmdzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgd2hpbGUgKCBsZW4tLSApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gXTtcblxuICAgIGlmIChjYWxsZWQpIHsgcmV0dXJuIH1cbiAgICBjYWxsZWQgPSB0cnVlO1xuICAgIHJldHVybiBmbi5hcHBseSh0aGlzLCBhcmdzKVxuICB9XG59XG5cbnZhciBOYXZpZ2F0aW9uRHVwbGljYXRlZCA9IC8qQF9fUFVSRV9fKi8oZnVuY3Rpb24gKEVycm9yKSB7XG4gIGZ1bmN0aW9uIE5hdmlnYXRpb25EdXBsaWNhdGVkIChub3JtYWxpemVkTG9jYXRpb24pIHtcbiAgICBFcnJvci5jYWxsKHRoaXMpO1xuICAgIHRoaXMubmFtZSA9IHRoaXMuX25hbWUgPSAnTmF2aWdhdGlvbkR1cGxpY2F0ZWQnO1xuICAgIC8vIHBhc3NpbmcgdGhlIG1lc3NhZ2UgdG8gc3VwZXIoKSBkb2Vzbid0IHNlZW0gdG8gd29yayBpbiB0aGUgdHJhbnNwaWxlZCB2ZXJzaW9uXG4gICAgdGhpcy5tZXNzYWdlID0gXCJOYXZpZ2F0aW5nIHRvIGN1cnJlbnQgbG9jYXRpb24gKFxcXCJcIiArIChub3JtYWxpemVkTG9jYXRpb24uZnVsbFBhdGgpICsgXCJcXFwiKSBpcyBub3QgYWxsb3dlZFwiO1xuICAgIC8vIGFkZCBhIHN0YWNrIHByb3BlcnR5IHNvIHNlcnZpY2VzIGxpa2UgU2VudHJ5IGNhbiBjb3JyZWN0bHkgZGlzcGxheSBpdFxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnc3RhY2snLCB7XG4gICAgICB2YWx1ZTogbmV3IEVycm9yKCkuc3RhY2ssXG4gICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIC8vIHdlIGNvdWxkIGFsc28gaGF2ZSB1c2VkXG4gICAgLy8gRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgdGhpcy5jb25zdHJ1Y3RvcilcbiAgICAvLyBidXQgaXQgb25seSBleGlzdHMgb24gbm9kZSBhbmQgY2hyb21lXG4gIH1cblxuICBpZiAoIEVycm9yICkgTmF2aWdhdGlvbkR1cGxpY2F0ZWQuX19wcm90b19fID0gRXJyb3I7XG4gIE5hdmlnYXRpb25EdXBsaWNhdGVkLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoIEVycm9yICYmIEVycm9yLnByb3RvdHlwZSApO1xuICBOYXZpZ2F0aW9uRHVwbGljYXRlZC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBOYXZpZ2F0aW9uRHVwbGljYXRlZDtcblxuICByZXR1cm4gTmF2aWdhdGlvbkR1cGxpY2F0ZWQ7XG59KEVycm9yKSk7XG5cbi8vIHN1cHBvcnQgSUU5XG5OYXZpZ2F0aW9uRHVwbGljYXRlZC5fbmFtZSA9ICdOYXZpZ2F0aW9uRHVwbGljYXRlZCc7XG5cbi8qICAqL1xuXG52YXIgSGlzdG9yeSA9IGZ1bmN0aW9uIEhpc3RvcnkgKHJvdXRlciwgYmFzZSkge1xuICB0aGlzLnJvdXRlciA9IHJvdXRlcjtcbiAgdGhpcy5iYXNlID0gbm9ybWFsaXplQmFzZShiYXNlKTtcbiAgLy8gc3RhcnQgd2l0aCBhIHJvdXRlIG9iamVjdCB0aGF0IHN0YW5kcyBmb3IgXCJub3doZXJlXCJcbiAgdGhpcy5jdXJyZW50ID0gU1RBUlQ7XG4gIHRoaXMucGVuZGluZyA9IG51bGw7XG4gIHRoaXMucmVhZHkgPSBmYWxzZTtcbiAgdGhpcy5yZWFkeUNicyA9IFtdO1xuICB0aGlzLnJlYWR5RXJyb3JDYnMgPSBbXTtcbiAgdGhpcy5lcnJvckNicyA9IFtdO1xufTtcblxuSGlzdG9yeS5wcm90b3R5cGUubGlzdGVuID0gZnVuY3Rpb24gbGlzdGVuIChjYikge1xuICB0aGlzLmNiID0gY2I7XG59O1xuXG5IaXN0b3J5LnByb3RvdHlwZS5vblJlYWR5ID0gZnVuY3Rpb24gb25SZWFkeSAoY2IsIGVycm9yQ2IpIHtcbiAgaWYgKHRoaXMucmVhZHkpIHtcbiAgICBjYigpO1xuICB9IGVsc2Uge1xuICAgIHRoaXMucmVhZHlDYnMucHVzaChjYik7XG4gICAgaWYgKGVycm9yQ2IpIHtcbiAgICAgIHRoaXMucmVhZHlFcnJvckNicy5wdXNoKGVycm9yQ2IpO1xuICAgIH1cbiAgfVxufTtcblxuSGlzdG9yeS5wcm90b3R5cGUub25FcnJvciA9IGZ1bmN0aW9uIG9uRXJyb3IgKGVycm9yQ2IpIHtcbiAgdGhpcy5lcnJvckNicy5wdXNoKGVycm9yQ2IpO1xufTtcblxuSGlzdG9yeS5wcm90b3R5cGUudHJhbnNpdGlvblRvID0gZnVuY3Rpb24gdHJhbnNpdGlvblRvIChcbiAgbG9jYXRpb24sXG4gIG9uQ29tcGxldGUsXG4gIG9uQWJvcnRcbikge1xuICAgIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gIHZhciByb3V0ZSA9IHRoaXMucm91dGVyLm1hdGNoKGxvY2F0aW9uLCB0aGlzLmN1cnJlbnQpO1xuICB0aGlzLmNvbmZpcm1UcmFuc2l0aW9uKFxuICAgIHJvdXRlLFxuICAgIGZ1bmN0aW9uICgpIHtcbiAgICAgIHRoaXMkMS51cGRhdGVSb3V0ZShyb3V0ZSk7XG4gICAgICBvbkNvbXBsZXRlICYmIG9uQ29tcGxldGUocm91dGUpO1xuICAgICAgdGhpcyQxLmVuc3VyZVVSTCgpO1xuXG4gICAgICAvLyBmaXJlIHJlYWR5IGNicyBvbmNlXG4gICAgICBpZiAoIXRoaXMkMS5yZWFkeSkge1xuICAgICAgICB0aGlzJDEucmVhZHkgPSB0cnVlO1xuICAgICAgICB0aGlzJDEucmVhZHlDYnMuZm9yRWFjaChmdW5jdGlvbiAoY2IpIHtcbiAgICAgICAgICBjYihyb3V0ZSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0sXG4gICAgZnVuY3Rpb24gKGVycikge1xuICAgICAgaWYgKG9uQWJvcnQpIHtcbiAgICAgICAgb25BYm9ydChlcnIpO1xuICAgICAgfVxuICAgICAgaWYgKGVyciAmJiAhdGhpcyQxLnJlYWR5KSB7XG4gICAgICAgIHRoaXMkMS5yZWFkeSA9IHRydWU7XG4gICAgICAgIHRoaXMkMS5yZWFkeUVycm9yQ2JzLmZvckVhY2goZnVuY3Rpb24gKGNiKSB7XG4gICAgICAgICAgY2IoZXJyKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICApO1xufTtcblxuSGlzdG9yeS5wcm90b3R5cGUuY29uZmlybVRyYW5zaXRpb24gPSBmdW5jdGlvbiBjb25maXJtVHJhbnNpdGlvbiAocm91dGUsIG9uQ29tcGxldGUsIG9uQWJvcnQpIHtcbiAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuICB2YXIgY3VycmVudCA9IHRoaXMuY3VycmVudDtcbiAgdmFyIGFib3J0ID0gZnVuY3Rpb24gKGVycikge1xuICAgIC8vIGFmdGVyIG1lcmdpbmcgaHR0cHM6Ly9naXRodWIuY29tL3Z1ZWpzL3Z1ZS1yb3V0ZXIvcHVsbC8yNzcxIHdlXG4gICAgLy8gV2hlbiB0aGUgdXNlciBuYXZpZ2F0ZXMgdGhyb3VnaCBoaXN0b3J5IHRocm91Z2ggYmFjay9mb3J3YXJkIGJ1dHRvbnNcbiAgICAvLyB3ZSBkbyBub3Qgd2FudCB0byB0aHJvdyB0aGUgZXJyb3IuIFdlIG9ubHkgdGhyb3cgaXQgaWYgZGlyZWN0bHkgY2FsbGluZ1xuICAgIC8vIHB1c2gvcmVwbGFjZS4gVGhhdCdzIHdoeSBpdCdzIG5vdCBpbmNsdWRlZCBpbiBpc0Vycm9yXG4gICAgaWYgKCFpc0V4dGVuZGVkRXJyb3IoTmF2aWdhdGlvbkR1cGxpY2F0ZWQsIGVycikgJiYgaXNFcnJvcihlcnIpKSB7XG4gICAgICBpZiAodGhpcyQxLmVycm9yQ2JzLmxlbmd0aCkge1xuICAgICAgICB0aGlzJDEuZXJyb3JDYnMuZm9yRWFjaChmdW5jdGlvbiAoY2IpIHtcbiAgICAgICAgICBjYihlcnIpO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHdhcm4oZmFsc2UsICd1bmNhdWdodCBlcnJvciBkdXJpbmcgcm91dGUgbmF2aWdhdGlvbjonKTtcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgfVxuICAgIH1cbiAgICBvbkFib3J0ICYmIG9uQWJvcnQoZXJyKTtcbiAgfTtcbiAgaWYgKFxuICAgIGlzU2FtZVJvdXRlKHJvdXRlLCBjdXJyZW50KSAmJlxuICAgIC8vIGluIHRoZSBjYXNlIHRoZSByb3V0ZSBtYXAgaGFzIGJlZW4gZHluYW1pY2FsbHkgYXBwZW5kZWQgdG9cbiAgICByb3V0ZS5tYXRjaGVkLmxlbmd0aCA9PT0gY3VycmVudC5tYXRjaGVkLmxlbmd0aFxuICApIHtcbiAgICB0aGlzLmVuc3VyZVVSTCgpO1xuICAgIHJldHVybiBhYm9ydChuZXcgTmF2aWdhdGlvbkR1cGxpY2F0ZWQocm91dGUpKVxuICB9XG5cbiAgdmFyIHJlZiA9IHJlc29sdmVRdWV1ZShcbiAgICB0aGlzLmN1cnJlbnQubWF0Y2hlZCxcbiAgICByb3V0ZS5tYXRjaGVkXG4gICk7XG4gICAgdmFyIHVwZGF0ZWQgPSByZWYudXBkYXRlZDtcbiAgICB2YXIgZGVhY3RpdmF0ZWQgPSByZWYuZGVhY3RpdmF0ZWQ7XG4gICAgdmFyIGFjdGl2YXRlZCA9IHJlZi5hY3RpdmF0ZWQ7XG5cbiAgdmFyIHF1ZXVlID0gW10uY29uY2F0KFxuICAgIC8vIGluLWNvbXBvbmVudCBsZWF2ZSBndWFyZHNcbiAgICBleHRyYWN0TGVhdmVHdWFyZHMoZGVhY3RpdmF0ZWQpLFxuICAgIC8vIGdsb2JhbCBiZWZvcmUgaG9va3NcbiAgICB0aGlzLnJvdXRlci5iZWZvcmVIb29rcyxcbiAgICAvLyBpbi1jb21wb25lbnQgdXBkYXRlIGhvb2tzXG4gICAgZXh0cmFjdFVwZGF0ZUhvb2tzKHVwZGF0ZWQpLFxuICAgIC8vIGluLWNvbmZpZyBlbnRlciBndWFyZHNcbiAgICBhY3RpdmF0ZWQubWFwKGZ1bmN0aW9uIChtKSB7IHJldHVybiBtLmJlZm9yZUVudGVyOyB9KSxcbiAgICAvLyBhc3luYyBjb21wb25lbnRzXG4gICAgcmVzb2x2ZUFzeW5jQ29tcG9uZW50cyhhY3RpdmF0ZWQpXG4gICk7XG5cbiAgdGhpcy5wZW5kaW5nID0gcm91dGU7XG4gIHZhciBpdGVyYXRvciA9IGZ1bmN0aW9uIChob29rLCBuZXh0KSB7XG4gICAgaWYgKHRoaXMkMS5wZW5kaW5nICE9PSByb3V0ZSkge1xuICAgICAgcmV0dXJuIGFib3J0KClcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGhvb2socm91dGUsIGN1cnJlbnQsIGZ1bmN0aW9uICh0bykge1xuICAgICAgICBpZiAodG8gPT09IGZhbHNlIHx8IGlzRXJyb3IodG8pKSB7XG4gICAgICAgICAgLy8gbmV4dChmYWxzZSkgLT4gYWJvcnQgbmF2aWdhdGlvbiwgZW5zdXJlIGN1cnJlbnQgVVJMXG4gICAgICAgICAgdGhpcyQxLmVuc3VyZVVSTCh0cnVlKTtcbiAgICAgICAgICBhYm9ydCh0byk7XG4gICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgdHlwZW9mIHRvID09PSAnc3RyaW5nJyB8fFxuICAgICAgICAgICh0eXBlb2YgdG8gPT09ICdvYmplY3QnICYmXG4gICAgICAgICAgICAodHlwZW9mIHRvLnBhdGggPT09ICdzdHJpbmcnIHx8IHR5cGVvZiB0by5uYW1lID09PSAnc3RyaW5nJykpXG4gICAgICAgICkge1xuICAgICAgICAgIC8vIG5leHQoJy8nKSBvciBuZXh0KHsgcGF0aDogJy8nIH0pIC0+IHJlZGlyZWN0XG4gICAgICAgICAgYWJvcnQoKTtcbiAgICAgICAgICBpZiAodHlwZW9mIHRvID09PSAnb2JqZWN0JyAmJiB0by5yZXBsYWNlKSB7XG4gICAgICAgICAgICB0aGlzJDEucmVwbGFjZSh0byk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMkMS5wdXNoKHRvKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gY29uZmlybSB0cmFuc2l0aW9uIGFuZCBwYXNzIG9uIHRoZSB2YWx1ZVxuICAgICAgICAgIG5leHQodG8pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBhYm9ydChlKTtcbiAgICB9XG4gIH07XG5cbiAgcnVuUXVldWUocXVldWUsIGl0ZXJhdG9yLCBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHBvc3RFbnRlckNicyA9IFtdO1xuICAgIHZhciBpc1ZhbGlkID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcyQxLmN1cnJlbnQgPT09IHJvdXRlOyB9O1xuICAgIC8vIHdhaXQgdW50aWwgYXN5bmMgY29tcG9uZW50cyBhcmUgcmVzb2x2ZWQgYmVmb3JlXG4gICAgLy8gZXh0cmFjdGluZyBpbi1jb21wb25lbnQgZW50ZXIgZ3VhcmRzXG4gICAgdmFyIGVudGVyR3VhcmRzID0gZXh0cmFjdEVudGVyR3VhcmRzKGFjdGl2YXRlZCwgcG9zdEVudGVyQ2JzLCBpc1ZhbGlkKTtcbiAgICB2YXIgcXVldWUgPSBlbnRlckd1YXJkcy5jb25jYXQodGhpcyQxLnJvdXRlci5yZXNvbHZlSG9va3MpO1xuICAgIHJ1blF1ZXVlKHF1ZXVlLCBpdGVyYXRvciwgZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKHRoaXMkMS5wZW5kaW5nICE9PSByb3V0ZSkge1xuICAgICAgICByZXR1cm4gYWJvcnQoKVxuICAgICAgfVxuICAgICAgdGhpcyQxLnBlbmRpbmcgPSBudWxsO1xuICAgICAgb25Db21wbGV0ZShyb3V0ZSk7XG4gICAgICBpZiAodGhpcyQxLnJvdXRlci5hcHApIHtcbiAgICAgICAgdGhpcyQxLnJvdXRlci5hcHAuJG5leHRUaWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBwb3N0RW50ZXJDYnMuZm9yRWFjaChmdW5jdGlvbiAoY2IpIHtcbiAgICAgICAgICAgIGNiKCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbn07XG5cbkhpc3RvcnkucHJvdG90eXBlLnVwZGF0ZVJvdXRlID0gZnVuY3Rpb24gdXBkYXRlUm91dGUgKHJvdXRlKSB7XG4gIHZhciBwcmV2ID0gdGhpcy5jdXJyZW50O1xuICB0aGlzLmN1cnJlbnQgPSByb3V0ZTtcbiAgdGhpcy5jYiAmJiB0aGlzLmNiKHJvdXRlKTtcbiAgdGhpcy5yb3V0ZXIuYWZ0ZXJIb29rcy5mb3JFYWNoKGZ1bmN0aW9uIChob29rKSB7XG4gICAgaG9vayAmJiBob29rKHJvdXRlLCBwcmV2KTtcbiAgfSk7XG59O1xuXG5mdW5jdGlvbiBub3JtYWxpemVCYXNlIChiYXNlKSB7XG4gIGlmICghYmFzZSkge1xuICAgIGlmIChpbkJyb3dzZXIpIHtcbiAgICAgIC8vIHJlc3BlY3QgPGJhc2U+IHRhZ1xuICAgICAgdmFyIGJhc2VFbCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2Jhc2UnKTtcbiAgICAgIGJhc2UgPSAoYmFzZUVsICYmIGJhc2VFbC5nZXRBdHRyaWJ1dGUoJ2hyZWYnKSkgfHwgJy8nO1xuICAgICAgLy8gc3RyaXAgZnVsbCBVUkwgb3JpZ2luXG4gICAgICBiYXNlID0gYmFzZS5yZXBsYWNlKC9eaHR0cHM/OlxcL1xcL1teXFwvXSsvLCAnJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGJhc2UgPSAnLyc7XG4gICAgfVxuICB9XG4gIC8vIG1ha2Ugc3VyZSB0aGVyZSdzIHRoZSBzdGFydGluZyBzbGFzaFxuICBpZiAoYmFzZS5jaGFyQXQoMCkgIT09ICcvJykge1xuICAgIGJhc2UgPSAnLycgKyBiYXNlO1xuICB9XG4gIC8vIHJlbW92ZSB0cmFpbGluZyBzbGFzaFxuICByZXR1cm4gYmFzZS5yZXBsYWNlKC9cXC8kLywgJycpXG59XG5cbmZ1bmN0aW9uIHJlc29sdmVRdWV1ZSAoXG4gIGN1cnJlbnQsXG4gIG5leHRcbikge1xuICB2YXIgaTtcbiAgdmFyIG1heCA9IE1hdGgubWF4KGN1cnJlbnQubGVuZ3RoLCBuZXh0Lmxlbmd0aCk7XG4gIGZvciAoaSA9IDA7IGkgPCBtYXg7IGkrKykge1xuICAgIGlmIChjdXJyZW50W2ldICE9PSBuZXh0W2ldKSB7XG4gICAgICBicmVha1xuICAgIH1cbiAgfVxuICByZXR1cm4ge1xuICAgIHVwZGF0ZWQ6IG5leHQuc2xpY2UoMCwgaSksXG4gICAgYWN0aXZhdGVkOiBuZXh0LnNsaWNlKGkpLFxuICAgIGRlYWN0aXZhdGVkOiBjdXJyZW50LnNsaWNlKGkpXG4gIH1cbn1cblxuZnVuY3Rpb24gZXh0cmFjdEd1YXJkcyAoXG4gIHJlY29yZHMsXG4gIG5hbWUsXG4gIGJpbmQsXG4gIHJldmVyc2Vcbikge1xuICB2YXIgZ3VhcmRzID0gZmxhdE1hcENvbXBvbmVudHMocmVjb3JkcywgZnVuY3Rpb24gKGRlZiwgaW5zdGFuY2UsIG1hdGNoLCBrZXkpIHtcbiAgICB2YXIgZ3VhcmQgPSBleHRyYWN0R3VhcmQoZGVmLCBuYW1lKTtcbiAgICBpZiAoZ3VhcmQpIHtcbiAgICAgIHJldHVybiBBcnJheS5pc0FycmF5KGd1YXJkKVxuICAgICAgICA/IGd1YXJkLm1hcChmdW5jdGlvbiAoZ3VhcmQpIHsgcmV0dXJuIGJpbmQoZ3VhcmQsIGluc3RhbmNlLCBtYXRjaCwga2V5KTsgfSlcbiAgICAgICAgOiBiaW5kKGd1YXJkLCBpbnN0YW5jZSwgbWF0Y2gsIGtleSlcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gZmxhdHRlbihyZXZlcnNlID8gZ3VhcmRzLnJldmVyc2UoKSA6IGd1YXJkcylcbn1cblxuZnVuY3Rpb24gZXh0cmFjdEd1YXJkIChcbiAgZGVmLFxuICBrZXlcbikge1xuICBpZiAodHlwZW9mIGRlZiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIC8vIGV4dGVuZCBub3cgc28gdGhhdCBnbG9iYWwgbWl4aW5zIGFyZSBhcHBsaWVkLlxuICAgIGRlZiA9IF9WdWUuZXh0ZW5kKGRlZik7XG4gIH1cbiAgcmV0dXJuIGRlZi5vcHRpb25zW2tleV1cbn1cblxuZnVuY3Rpb24gZXh0cmFjdExlYXZlR3VhcmRzIChkZWFjdGl2YXRlZCkge1xuICByZXR1cm4gZXh0cmFjdEd1YXJkcyhkZWFjdGl2YXRlZCwgJ2JlZm9yZVJvdXRlTGVhdmUnLCBiaW5kR3VhcmQsIHRydWUpXG59XG5cbmZ1bmN0aW9uIGV4dHJhY3RVcGRhdGVIb29rcyAodXBkYXRlZCkge1xuICByZXR1cm4gZXh0cmFjdEd1YXJkcyh1cGRhdGVkLCAnYmVmb3JlUm91dGVVcGRhdGUnLCBiaW5kR3VhcmQpXG59XG5cbmZ1bmN0aW9uIGJpbmRHdWFyZCAoZ3VhcmQsIGluc3RhbmNlKSB7XG4gIGlmIChpbnN0YW5jZSkge1xuICAgIHJldHVybiBmdW5jdGlvbiBib3VuZFJvdXRlR3VhcmQgKCkge1xuICAgICAgcmV0dXJuIGd1YXJkLmFwcGx5KGluc3RhbmNlLCBhcmd1bWVudHMpXG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGV4dHJhY3RFbnRlckd1YXJkcyAoXG4gIGFjdGl2YXRlZCxcbiAgY2JzLFxuICBpc1ZhbGlkXG4pIHtcbiAgcmV0dXJuIGV4dHJhY3RHdWFyZHMoXG4gICAgYWN0aXZhdGVkLFxuICAgICdiZWZvcmVSb3V0ZUVudGVyJyxcbiAgICBmdW5jdGlvbiAoZ3VhcmQsIF8sIG1hdGNoLCBrZXkpIHtcbiAgICAgIHJldHVybiBiaW5kRW50ZXJHdWFyZChndWFyZCwgbWF0Y2gsIGtleSwgY2JzLCBpc1ZhbGlkKVxuICAgIH1cbiAgKVxufVxuXG5mdW5jdGlvbiBiaW5kRW50ZXJHdWFyZCAoXG4gIGd1YXJkLFxuICBtYXRjaCxcbiAga2V5LFxuICBjYnMsXG4gIGlzVmFsaWRcbikge1xuICByZXR1cm4gZnVuY3Rpb24gcm91dGVFbnRlckd1YXJkICh0bywgZnJvbSwgbmV4dCkge1xuICAgIHJldHVybiBndWFyZCh0bywgZnJvbSwgZnVuY3Rpb24gKGNiKSB7XG4gICAgICBpZiAodHlwZW9mIGNiID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGNicy5wdXNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAvLyAjNzUwXG4gICAgICAgICAgLy8gaWYgYSByb3V0ZXItdmlldyBpcyB3cmFwcGVkIHdpdGggYW4gb3V0LWluIHRyYW5zaXRpb24sXG4gICAgICAgICAgLy8gdGhlIGluc3RhbmNlIG1heSBub3QgaGF2ZSBiZWVuIHJlZ2lzdGVyZWQgYXQgdGhpcyB0aW1lLlxuICAgICAgICAgIC8vIHdlIHdpbGwgbmVlZCB0byBwb2xsIGZvciByZWdpc3RyYXRpb24gdW50aWwgY3VycmVudCByb3V0ZVxuICAgICAgICAgIC8vIGlzIG5vIGxvbmdlciB2YWxpZC5cbiAgICAgICAgICBwb2xsKGNiLCBtYXRjaC5pbnN0YW5jZXMsIGtleSwgaXNWYWxpZCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgbmV4dChjYik7XG4gICAgfSlcbiAgfVxufVxuXG5mdW5jdGlvbiBwb2xsIChcbiAgY2IsIC8vIHNvbWVob3cgZmxvdyBjYW5ub3QgaW5mZXIgdGhpcyBpcyBhIGZ1bmN0aW9uXG4gIGluc3RhbmNlcyxcbiAga2V5LFxuICBpc1ZhbGlkXG4pIHtcbiAgaWYgKFxuICAgIGluc3RhbmNlc1trZXldICYmXG4gICAgIWluc3RhbmNlc1trZXldLl9pc0JlaW5nRGVzdHJveWVkIC8vIGRvIG5vdCByZXVzZSBiZWluZyBkZXN0cm95ZWQgaW5zdGFuY2VcbiAgKSB7XG4gICAgY2IoaW5zdGFuY2VzW2tleV0pO1xuICB9IGVsc2UgaWYgKGlzVmFsaWQoKSkge1xuICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgcG9sbChjYiwgaW5zdGFuY2VzLCBrZXksIGlzVmFsaWQpO1xuICAgIH0sIDE2KTtcbiAgfVxufVxuXG4vKiAgKi9cblxudmFyIEhUTUw1SGlzdG9yeSA9IC8qQF9fUFVSRV9fKi8oZnVuY3Rpb24gKEhpc3RvcnkpIHtcbiAgZnVuY3Rpb24gSFRNTDVIaXN0b3J5IChyb3V0ZXIsIGJhc2UpIHtcbiAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuICAgIEhpc3RvcnkuY2FsbCh0aGlzLCByb3V0ZXIsIGJhc2UpO1xuXG4gICAgdmFyIGV4cGVjdFNjcm9sbCA9IHJvdXRlci5vcHRpb25zLnNjcm9sbEJlaGF2aW9yO1xuICAgIHZhciBzdXBwb3J0c1Njcm9sbCA9IHN1cHBvcnRzUHVzaFN0YXRlICYmIGV4cGVjdFNjcm9sbDtcblxuICAgIGlmIChzdXBwb3J0c1Njcm9sbCkge1xuICAgICAgc2V0dXBTY3JvbGwoKTtcbiAgICB9XG5cbiAgICB2YXIgaW5pdExvY2F0aW9uID0gZ2V0TG9jYXRpb24odGhpcy5iYXNlKTtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncG9wc3RhdGUnLCBmdW5jdGlvbiAoZSkge1xuICAgICAgdmFyIGN1cnJlbnQgPSB0aGlzJDEuY3VycmVudDtcblxuICAgICAgLy8gQXZvaWRpbmcgZmlyc3QgYHBvcHN0YXRlYCBldmVudCBkaXNwYXRjaGVkIGluIHNvbWUgYnJvd3NlcnMgYnV0IGZpcnN0XG4gICAgICAvLyBoaXN0b3J5IHJvdXRlIG5vdCB1cGRhdGVkIHNpbmNlIGFzeW5jIGd1YXJkIGF0IHRoZSBzYW1lIHRpbWUuXG4gICAgICB2YXIgbG9jYXRpb24gPSBnZXRMb2NhdGlvbih0aGlzJDEuYmFzZSk7XG4gICAgICBpZiAodGhpcyQxLmN1cnJlbnQgPT09IFNUQVJUICYmIGxvY2F0aW9uID09PSBpbml0TG9jYXRpb24pIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIHRoaXMkMS50cmFuc2l0aW9uVG8obG9jYXRpb24sIGZ1bmN0aW9uIChyb3V0ZSkge1xuICAgICAgICBpZiAoc3VwcG9ydHNTY3JvbGwpIHtcbiAgICAgICAgICBoYW5kbGVTY3JvbGwocm91dGVyLCByb3V0ZSwgY3VycmVudCwgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgaWYgKCBIaXN0b3J5ICkgSFRNTDVIaXN0b3J5Ll9fcHJvdG9fXyA9IEhpc3Rvcnk7XG4gIEhUTUw1SGlzdG9yeS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKCBIaXN0b3J5ICYmIEhpc3RvcnkucHJvdG90eXBlICk7XG4gIEhUTUw1SGlzdG9yeS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBIVE1MNUhpc3Rvcnk7XG5cbiAgSFRNTDVIaXN0b3J5LnByb3RvdHlwZS5nbyA9IGZ1bmN0aW9uIGdvIChuKSB7XG4gICAgd2luZG93Lmhpc3RvcnkuZ28obik7XG4gIH07XG5cbiAgSFRNTDVIaXN0b3J5LnByb3RvdHlwZS5wdXNoID0gZnVuY3Rpb24gcHVzaCAobG9jYXRpb24sIG9uQ29tcGxldGUsIG9uQWJvcnQpIHtcbiAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuICAgIHZhciByZWYgPSB0aGlzO1xuICAgIHZhciBmcm9tUm91dGUgPSByZWYuY3VycmVudDtcbiAgICB0aGlzLnRyYW5zaXRpb25Ubyhsb2NhdGlvbiwgZnVuY3Rpb24gKHJvdXRlKSB7XG4gICAgICBwdXNoU3RhdGUoY2xlYW5QYXRoKHRoaXMkMS5iYXNlICsgcm91dGUuZnVsbFBhdGgpKTtcbiAgICAgIGhhbmRsZVNjcm9sbCh0aGlzJDEucm91dGVyLCByb3V0ZSwgZnJvbVJvdXRlLCBmYWxzZSk7XG4gICAgICBvbkNvbXBsZXRlICYmIG9uQ29tcGxldGUocm91dGUpO1xuICAgIH0sIG9uQWJvcnQpO1xuICB9O1xuXG4gIEhUTUw1SGlzdG9yeS5wcm90b3R5cGUucmVwbGFjZSA9IGZ1bmN0aW9uIHJlcGxhY2UgKGxvY2F0aW9uLCBvbkNvbXBsZXRlLCBvbkFib3J0KSB7XG4gICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgICB2YXIgcmVmID0gdGhpcztcbiAgICB2YXIgZnJvbVJvdXRlID0gcmVmLmN1cnJlbnQ7XG4gICAgdGhpcy50cmFuc2l0aW9uVG8obG9jYXRpb24sIGZ1bmN0aW9uIChyb3V0ZSkge1xuICAgICAgcmVwbGFjZVN0YXRlKGNsZWFuUGF0aCh0aGlzJDEuYmFzZSArIHJvdXRlLmZ1bGxQYXRoKSk7XG4gICAgICBoYW5kbGVTY3JvbGwodGhpcyQxLnJvdXRlciwgcm91dGUsIGZyb21Sb3V0ZSwgZmFsc2UpO1xuICAgICAgb25Db21wbGV0ZSAmJiBvbkNvbXBsZXRlKHJvdXRlKTtcbiAgICB9LCBvbkFib3J0KTtcbiAgfTtcblxuICBIVE1MNUhpc3RvcnkucHJvdG90eXBlLmVuc3VyZVVSTCA9IGZ1bmN0aW9uIGVuc3VyZVVSTCAocHVzaCkge1xuICAgIGlmIChnZXRMb2NhdGlvbih0aGlzLmJhc2UpICE9PSB0aGlzLmN1cnJlbnQuZnVsbFBhdGgpIHtcbiAgICAgIHZhciBjdXJyZW50ID0gY2xlYW5QYXRoKHRoaXMuYmFzZSArIHRoaXMuY3VycmVudC5mdWxsUGF0aCk7XG4gICAgICBwdXNoID8gcHVzaFN0YXRlKGN1cnJlbnQpIDogcmVwbGFjZVN0YXRlKGN1cnJlbnQpO1xuICAgIH1cbiAgfTtcblxuICBIVE1MNUhpc3RvcnkucHJvdG90eXBlLmdldEN1cnJlbnRMb2NhdGlvbiA9IGZ1bmN0aW9uIGdldEN1cnJlbnRMb2NhdGlvbiAoKSB7XG4gICAgcmV0dXJuIGdldExvY2F0aW9uKHRoaXMuYmFzZSlcbiAgfTtcblxuICByZXR1cm4gSFRNTDVIaXN0b3J5O1xufShIaXN0b3J5KSk7XG5cbmZ1bmN0aW9uIGdldExvY2F0aW9uIChiYXNlKSB7XG4gIHZhciBwYXRoID0gZGVjb2RlVVJJKHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSk7XG4gIGlmIChiYXNlICYmIHBhdGguaW5kZXhPZihiYXNlKSA9PT0gMCkge1xuICAgIHBhdGggPSBwYXRoLnNsaWNlKGJhc2UubGVuZ3RoKTtcbiAgfVxuICByZXR1cm4gKHBhdGggfHwgJy8nKSArIHdpbmRvdy5sb2NhdGlvbi5zZWFyY2ggKyB3aW5kb3cubG9jYXRpb24uaGFzaFxufVxuXG4vKiAgKi9cblxudmFyIEhhc2hIaXN0b3J5ID0gLypAX19QVVJFX18qLyhmdW5jdGlvbiAoSGlzdG9yeSkge1xuICBmdW5jdGlvbiBIYXNoSGlzdG9yeSAocm91dGVyLCBiYXNlLCBmYWxsYmFjaykge1xuICAgIEhpc3RvcnkuY2FsbCh0aGlzLCByb3V0ZXIsIGJhc2UpO1xuICAgIC8vIGNoZWNrIGhpc3RvcnkgZmFsbGJhY2sgZGVlcGxpbmtpbmdcbiAgICBpZiAoZmFsbGJhY2sgJiYgY2hlY2tGYWxsYmFjayh0aGlzLmJhc2UpKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgZW5zdXJlU2xhc2goKTtcbiAgfVxuXG4gIGlmICggSGlzdG9yeSApIEhhc2hIaXN0b3J5Ll9fcHJvdG9fXyA9IEhpc3Rvcnk7XG4gIEhhc2hIaXN0b3J5LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoIEhpc3RvcnkgJiYgSGlzdG9yeS5wcm90b3R5cGUgKTtcbiAgSGFzaEhpc3RvcnkucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gSGFzaEhpc3Rvcnk7XG5cbiAgLy8gdGhpcyBpcyBkZWxheWVkIHVudGlsIHRoZSBhcHAgbW91bnRzXG4gIC8vIHRvIGF2b2lkIHRoZSBoYXNoY2hhbmdlIGxpc3RlbmVyIGJlaW5nIGZpcmVkIHRvbyBlYXJseVxuICBIYXNoSGlzdG9yeS5wcm90b3R5cGUuc2V0dXBMaXN0ZW5lcnMgPSBmdW5jdGlvbiBzZXR1cExpc3RlbmVycyAoKSB7XG4gICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgICB2YXIgcm91dGVyID0gdGhpcy5yb3V0ZXI7XG4gICAgdmFyIGV4cGVjdFNjcm9sbCA9IHJvdXRlci5vcHRpb25zLnNjcm9sbEJlaGF2aW9yO1xuICAgIHZhciBzdXBwb3J0c1Njcm9sbCA9IHN1cHBvcnRzUHVzaFN0YXRlICYmIGV4cGVjdFNjcm9sbDtcblxuICAgIGlmIChzdXBwb3J0c1Njcm9sbCkge1xuICAgICAgc2V0dXBTY3JvbGwoKTtcbiAgICB9XG5cbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgIHN1cHBvcnRzUHVzaFN0YXRlID8gJ3BvcHN0YXRlJyA6ICdoYXNoY2hhbmdlJyxcbiAgICAgIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGN1cnJlbnQgPSB0aGlzJDEuY3VycmVudDtcbiAgICAgICAgaWYgKCFlbnN1cmVTbGFzaCgpKSB7XG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgICAgdGhpcyQxLnRyYW5zaXRpb25UbyhnZXRIYXNoKCksIGZ1bmN0aW9uIChyb3V0ZSkge1xuICAgICAgICAgIGlmIChzdXBwb3J0c1Njcm9sbCkge1xuICAgICAgICAgICAgaGFuZGxlU2Nyb2xsKHRoaXMkMS5yb3V0ZXIsIHJvdXRlLCBjdXJyZW50LCB0cnVlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFzdXBwb3J0c1B1c2hTdGF0ZSkge1xuICAgICAgICAgICAgcmVwbGFjZUhhc2gocm91dGUuZnVsbFBhdGgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgKTtcbiAgfTtcblxuICBIYXNoSGlzdG9yeS5wcm90b3R5cGUucHVzaCA9IGZ1bmN0aW9uIHB1c2ggKGxvY2F0aW9uLCBvbkNvbXBsZXRlLCBvbkFib3J0KSB7XG4gICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgICB2YXIgcmVmID0gdGhpcztcbiAgICB2YXIgZnJvbVJvdXRlID0gcmVmLmN1cnJlbnQ7XG4gICAgdGhpcy50cmFuc2l0aW9uVG8oXG4gICAgICBsb2NhdGlvbixcbiAgICAgIGZ1bmN0aW9uIChyb3V0ZSkge1xuICAgICAgICBwdXNoSGFzaChyb3V0ZS5mdWxsUGF0aCk7XG4gICAgICAgIGhhbmRsZVNjcm9sbCh0aGlzJDEucm91dGVyLCByb3V0ZSwgZnJvbVJvdXRlLCBmYWxzZSk7XG4gICAgICAgIG9uQ29tcGxldGUgJiYgb25Db21wbGV0ZShyb3V0ZSk7XG4gICAgICB9LFxuICAgICAgb25BYm9ydFxuICAgICk7XG4gIH07XG5cbiAgSGFzaEhpc3RvcnkucHJvdG90eXBlLnJlcGxhY2UgPSBmdW5jdGlvbiByZXBsYWNlIChsb2NhdGlvbiwgb25Db21wbGV0ZSwgb25BYm9ydCkge1xuICAgIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gICAgdmFyIHJlZiA9IHRoaXM7XG4gICAgdmFyIGZyb21Sb3V0ZSA9IHJlZi5jdXJyZW50O1xuICAgIHRoaXMudHJhbnNpdGlvblRvKFxuICAgICAgbG9jYXRpb24sXG4gICAgICBmdW5jdGlvbiAocm91dGUpIHtcbiAgICAgICAgcmVwbGFjZUhhc2gocm91dGUuZnVsbFBhdGgpO1xuICAgICAgICBoYW5kbGVTY3JvbGwodGhpcyQxLnJvdXRlciwgcm91dGUsIGZyb21Sb3V0ZSwgZmFsc2UpO1xuICAgICAgICBvbkNvbXBsZXRlICYmIG9uQ29tcGxldGUocm91dGUpO1xuICAgICAgfSxcbiAgICAgIG9uQWJvcnRcbiAgICApO1xuICB9O1xuXG4gIEhhc2hIaXN0b3J5LnByb3RvdHlwZS5nbyA9IGZ1bmN0aW9uIGdvIChuKSB7XG4gICAgd2luZG93Lmhpc3RvcnkuZ28obik7XG4gIH07XG5cbiAgSGFzaEhpc3RvcnkucHJvdG90eXBlLmVuc3VyZVVSTCA9IGZ1bmN0aW9uIGVuc3VyZVVSTCAocHVzaCkge1xuICAgIHZhciBjdXJyZW50ID0gdGhpcy5jdXJyZW50LmZ1bGxQYXRoO1xuICAgIGlmIChnZXRIYXNoKCkgIT09IGN1cnJlbnQpIHtcbiAgICAgIHB1c2ggPyBwdXNoSGFzaChjdXJyZW50KSA6IHJlcGxhY2VIYXNoKGN1cnJlbnQpO1xuICAgIH1cbiAgfTtcblxuICBIYXNoSGlzdG9yeS5wcm90b3R5cGUuZ2V0Q3VycmVudExvY2F0aW9uID0gZnVuY3Rpb24gZ2V0Q3VycmVudExvY2F0aW9uICgpIHtcbiAgICByZXR1cm4gZ2V0SGFzaCgpXG4gIH07XG5cbiAgcmV0dXJuIEhhc2hIaXN0b3J5O1xufShIaXN0b3J5KSk7XG5cbmZ1bmN0aW9uIGNoZWNrRmFsbGJhY2sgKGJhc2UpIHtcbiAgdmFyIGxvY2F0aW9uID0gZ2V0TG9jYXRpb24oYmFzZSk7XG4gIGlmICghL15cXC8jLy50ZXN0KGxvY2F0aW9uKSkge1xuICAgIHdpbmRvdy5sb2NhdGlvbi5yZXBsYWNlKGNsZWFuUGF0aChiYXNlICsgJy8jJyArIGxvY2F0aW9uKSk7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxufVxuXG5mdW5jdGlvbiBlbnN1cmVTbGFzaCAoKSB7XG4gIHZhciBwYXRoID0gZ2V0SGFzaCgpO1xuICBpZiAocGF0aC5jaGFyQXQoMCkgPT09ICcvJykge1xuICAgIHJldHVybiB0cnVlXG4gIH1cbiAgcmVwbGFjZUhhc2goJy8nICsgcGF0aCk7XG4gIHJldHVybiBmYWxzZVxufVxuXG5mdW5jdGlvbiBnZXRIYXNoICgpIHtcbiAgLy8gV2UgY2FuJ3QgdXNlIHdpbmRvdy5sb2NhdGlvbi5oYXNoIGhlcmUgYmVjYXVzZSBpdCdzIG5vdFxuICAvLyBjb25zaXN0ZW50IGFjcm9zcyBicm93c2VycyAtIEZpcmVmb3ggd2lsbCBwcmUtZGVjb2RlIGl0IVxuICB2YXIgaHJlZiA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmO1xuICB2YXIgaW5kZXggPSBocmVmLmluZGV4T2YoJyMnKTtcbiAgLy8gZW1wdHkgcGF0aFxuICBpZiAoaW5kZXggPCAwKSB7IHJldHVybiAnJyB9XG5cbiAgaHJlZiA9IGhyZWYuc2xpY2UoaW5kZXggKyAxKTtcbiAgLy8gZGVjb2RlIHRoZSBoYXNoIGJ1dCBub3QgdGhlIHNlYXJjaCBvciBoYXNoXG4gIC8vIGFzIHNlYXJjaChxdWVyeSkgaXMgYWxyZWFkeSBkZWNvZGVkXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS92dWVqcy92dWUtcm91dGVyL2lzc3Vlcy8yNzA4XG4gIHZhciBzZWFyY2hJbmRleCA9IGhyZWYuaW5kZXhPZignPycpO1xuICBpZiAoc2VhcmNoSW5kZXggPCAwKSB7XG4gICAgdmFyIGhhc2hJbmRleCA9IGhyZWYuaW5kZXhPZignIycpO1xuICAgIGlmIChoYXNoSW5kZXggPiAtMSkge1xuICAgICAgaHJlZiA9IGRlY29kZVVSSShocmVmLnNsaWNlKDAsIGhhc2hJbmRleCkpICsgaHJlZi5zbGljZShoYXNoSW5kZXgpO1xuICAgIH0gZWxzZSB7IGhyZWYgPSBkZWNvZGVVUkkoaHJlZik7IH1cbiAgfSBlbHNlIHtcbiAgICBpZiAoc2VhcmNoSW5kZXggPiAtMSkge1xuICAgICAgaHJlZiA9IGRlY29kZVVSSShocmVmLnNsaWNlKDAsIHNlYXJjaEluZGV4KSkgKyBocmVmLnNsaWNlKHNlYXJjaEluZGV4KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gaHJlZlxufVxuXG5mdW5jdGlvbiBnZXRVcmwgKHBhdGgpIHtcbiAgdmFyIGhyZWYgPSB3aW5kb3cubG9jYXRpb24uaHJlZjtcbiAgdmFyIGkgPSBocmVmLmluZGV4T2YoJyMnKTtcbiAgdmFyIGJhc2UgPSBpID49IDAgPyBocmVmLnNsaWNlKDAsIGkpIDogaHJlZjtcbiAgcmV0dXJuIChiYXNlICsgXCIjXCIgKyBwYXRoKVxufVxuXG5mdW5jdGlvbiBwdXNoSGFzaCAocGF0aCkge1xuICBpZiAoc3VwcG9ydHNQdXNoU3RhdGUpIHtcbiAgICBwdXNoU3RhdGUoZ2V0VXJsKHBhdGgpKTtcbiAgfSBlbHNlIHtcbiAgICB3aW5kb3cubG9jYXRpb24uaGFzaCA9IHBhdGg7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVwbGFjZUhhc2ggKHBhdGgpIHtcbiAgaWYgKHN1cHBvcnRzUHVzaFN0YXRlKSB7XG4gICAgcmVwbGFjZVN0YXRlKGdldFVybChwYXRoKSk7XG4gIH0gZWxzZSB7XG4gICAgd2luZG93LmxvY2F0aW9uLnJlcGxhY2UoZ2V0VXJsKHBhdGgpKTtcbiAgfVxufVxuXG4vKiAgKi9cblxudmFyIEFic3RyYWN0SGlzdG9yeSA9IC8qQF9fUFVSRV9fKi8oZnVuY3Rpb24gKEhpc3RvcnkpIHtcbiAgZnVuY3Rpb24gQWJzdHJhY3RIaXN0b3J5IChyb3V0ZXIsIGJhc2UpIHtcbiAgICBIaXN0b3J5LmNhbGwodGhpcywgcm91dGVyLCBiYXNlKTtcbiAgICB0aGlzLnN0YWNrID0gW107XG4gICAgdGhpcy5pbmRleCA9IC0xO1xuICB9XG5cbiAgaWYgKCBIaXN0b3J5ICkgQWJzdHJhY3RIaXN0b3J5Ll9fcHJvdG9fXyA9IEhpc3Rvcnk7XG4gIEFic3RyYWN0SGlzdG9yeS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKCBIaXN0b3J5ICYmIEhpc3RvcnkucHJvdG90eXBlICk7XG4gIEFic3RyYWN0SGlzdG9yeS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBBYnN0cmFjdEhpc3Rvcnk7XG5cbiAgQWJzdHJhY3RIaXN0b3J5LnByb3RvdHlwZS5wdXNoID0gZnVuY3Rpb24gcHVzaCAobG9jYXRpb24sIG9uQ29tcGxldGUsIG9uQWJvcnQpIHtcbiAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuICAgIHRoaXMudHJhbnNpdGlvblRvKFxuICAgICAgbG9jYXRpb24sXG4gICAgICBmdW5jdGlvbiAocm91dGUpIHtcbiAgICAgICAgdGhpcyQxLnN0YWNrID0gdGhpcyQxLnN0YWNrLnNsaWNlKDAsIHRoaXMkMS5pbmRleCArIDEpLmNvbmNhdChyb3V0ZSk7XG4gICAgICAgIHRoaXMkMS5pbmRleCsrO1xuICAgICAgICBvbkNvbXBsZXRlICYmIG9uQ29tcGxldGUocm91dGUpO1xuICAgICAgfSxcbiAgICAgIG9uQWJvcnRcbiAgICApO1xuICB9O1xuXG4gIEFic3RyYWN0SGlzdG9yeS5wcm90b3R5cGUucmVwbGFjZSA9IGZ1bmN0aW9uIHJlcGxhY2UgKGxvY2F0aW9uLCBvbkNvbXBsZXRlLCBvbkFib3J0KSB7XG4gICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgICB0aGlzLnRyYW5zaXRpb25UbyhcbiAgICAgIGxvY2F0aW9uLFxuICAgICAgZnVuY3Rpb24gKHJvdXRlKSB7XG4gICAgICAgIHRoaXMkMS5zdGFjayA9IHRoaXMkMS5zdGFjay5zbGljZSgwLCB0aGlzJDEuaW5kZXgpLmNvbmNhdChyb3V0ZSk7XG4gICAgICAgIG9uQ29tcGxldGUgJiYgb25Db21wbGV0ZShyb3V0ZSk7XG4gICAgICB9LFxuICAgICAgb25BYm9ydFxuICAgICk7XG4gIH07XG5cbiAgQWJzdHJhY3RIaXN0b3J5LnByb3RvdHlwZS5nbyA9IGZ1bmN0aW9uIGdvIChuKSB7XG4gICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgICB2YXIgdGFyZ2V0SW5kZXggPSB0aGlzLmluZGV4ICsgbjtcbiAgICBpZiAodGFyZ2V0SW5kZXggPCAwIHx8IHRhcmdldEluZGV4ID49IHRoaXMuc3RhY2subGVuZ3RoKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgdmFyIHJvdXRlID0gdGhpcy5zdGFja1t0YXJnZXRJbmRleF07XG4gICAgdGhpcy5jb25maXJtVHJhbnNpdGlvbihcbiAgICAgIHJvdXRlLFxuICAgICAgZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzJDEuaW5kZXggPSB0YXJnZXRJbmRleDtcbiAgICAgICAgdGhpcyQxLnVwZGF0ZVJvdXRlKHJvdXRlKTtcbiAgICAgIH0sXG4gICAgICBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIGlmIChpc0V4dGVuZGVkRXJyb3IoTmF2aWdhdGlvbkR1cGxpY2F0ZWQsIGVycikpIHtcbiAgICAgICAgICB0aGlzJDEuaW5kZXggPSB0YXJnZXRJbmRleDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICk7XG4gIH07XG5cbiAgQWJzdHJhY3RIaXN0b3J5LnByb3RvdHlwZS5nZXRDdXJyZW50TG9jYXRpb24gPSBmdW5jdGlvbiBnZXRDdXJyZW50TG9jYXRpb24gKCkge1xuICAgIHZhciBjdXJyZW50ID0gdGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aCAtIDFdO1xuICAgIHJldHVybiBjdXJyZW50ID8gY3VycmVudC5mdWxsUGF0aCA6ICcvJ1xuICB9O1xuXG4gIEFic3RyYWN0SGlzdG9yeS5wcm90b3R5cGUuZW5zdXJlVVJMID0gZnVuY3Rpb24gZW5zdXJlVVJMICgpIHtcbiAgICAvLyBub29wXG4gIH07XG5cbiAgcmV0dXJuIEFic3RyYWN0SGlzdG9yeTtcbn0oSGlzdG9yeSkpO1xuXG4vKiAgKi9cblxuXG5cbnZhciBWdWVSb3V0ZXIgPSBmdW5jdGlvbiBWdWVSb3V0ZXIgKG9wdGlvbnMpIHtcbiAgaWYgKCBvcHRpb25zID09PSB2b2lkIDAgKSBvcHRpb25zID0ge307XG5cbiAgdGhpcy5hcHAgPSBudWxsO1xuICB0aGlzLmFwcHMgPSBbXTtcbiAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgdGhpcy5iZWZvcmVIb29rcyA9IFtdO1xuICB0aGlzLnJlc29sdmVIb29rcyA9IFtdO1xuICB0aGlzLmFmdGVySG9va3MgPSBbXTtcbiAgdGhpcy5tYXRjaGVyID0gY3JlYXRlTWF0Y2hlcihvcHRpb25zLnJvdXRlcyB8fCBbXSwgdGhpcyk7XG5cbiAgdmFyIG1vZGUgPSBvcHRpb25zLm1vZGUgfHwgJ2hhc2gnO1xuICB0aGlzLmZhbGxiYWNrID0gbW9kZSA9PT0gJ2hpc3RvcnknICYmICFzdXBwb3J0c1B1c2hTdGF0ZSAmJiBvcHRpb25zLmZhbGxiYWNrICE9PSBmYWxzZTtcbiAgaWYgKHRoaXMuZmFsbGJhY2spIHtcbiAgICBtb2RlID0gJ2hhc2gnO1xuICB9XG4gIGlmICghaW5Ccm93c2VyKSB7XG4gICAgbW9kZSA9ICdhYnN0cmFjdCc7XG4gIH1cbiAgdGhpcy5tb2RlID0gbW9kZTtcblxuICBzd2l0Y2ggKG1vZGUpIHtcbiAgICBjYXNlICdoaXN0b3J5JzpcbiAgICAgIHRoaXMuaGlzdG9yeSA9IG5ldyBIVE1MNUhpc3RvcnkodGhpcywgb3B0aW9ucy5iYXNlKTtcbiAgICAgIGJyZWFrXG4gICAgY2FzZSAnaGFzaCc6XG4gICAgICB0aGlzLmhpc3RvcnkgPSBuZXcgSGFzaEhpc3RvcnkodGhpcywgb3B0aW9ucy5iYXNlLCB0aGlzLmZhbGxiYWNrKTtcbiAgICAgIGJyZWFrXG4gICAgY2FzZSAnYWJzdHJhY3QnOlxuICAgICAgdGhpcy5oaXN0b3J5ID0gbmV3IEFic3RyYWN0SGlzdG9yeSh0aGlzLCBvcHRpb25zLmJhc2UpO1xuICAgICAgYnJlYWtcbiAgICBkZWZhdWx0OlxuICAgICAgaWYgKFwicHJvZHVjdGlvblwiICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgYXNzZXJ0KGZhbHNlLCAoXCJpbnZhbGlkIG1vZGU6IFwiICsgbW9kZSkpO1xuICAgICAgfVxuICB9XG59O1xuXG52YXIgcHJvdG90eXBlQWNjZXNzb3JzID0geyBjdXJyZW50Um91dGU6IHsgY29uZmlndXJhYmxlOiB0cnVlIH0gfTtcblxuVnVlUm91dGVyLnByb3RvdHlwZS5tYXRjaCA9IGZ1bmN0aW9uIG1hdGNoIChcbiAgcmF3LFxuICBjdXJyZW50LFxuICByZWRpcmVjdGVkRnJvbVxuKSB7XG4gIHJldHVybiB0aGlzLm1hdGNoZXIubWF0Y2gocmF3LCBjdXJyZW50LCByZWRpcmVjdGVkRnJvbSlcbn07XG5cbnByb3RvdHlwZUFjY2Vzc29ycy5jdXJyZW50Um91dGUuZ2V0ID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5oaXN0b3J5ICYmIHRoaXMuaGlzdG9yeS5jdXJyZW50XG59O1xuXG5WdWVSb3V0ZXIucHJvdG90eXBlLmluaXQgPSBmdW5jdGlvbiBpbml0IChhcHAgLyogVnVlIGNvbXBvbmVudCBpbnN0YW5jZSAqLykge1xuICAgIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gIFwicHJvZHVjdGlvblwiICE9PSAncHJvZHVjdGlvbicgJiYgYXNzZXJ0KFxuICAgIGluc3RhbGwuaW5zdGFsbGVkLFxuICAgIFwibm90IGluc3RhbGxlZC4gTWFrZSBzdXJlIHRvIGNhbGwgYFZ1ZS51c2UoVnVlUm91dGVyKWAgXCIgK1xuICAgIFwiYmVmb3JlIGNyZWF0aW5nIHJvb3QgaW5zdGFuY2UuXCJcbiAgKTtcblxuICB0aGlzLmFwcHMucHVzaChhcHApO1xuXG4gIC8vIHNldCB1cCBhcHAgZGVzdHJveWVkIGhhbmRsZXJcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3Z1ZWpzL3Z1ZS1yb3V0ZXIvaXNzdWVzLzI2MzlcbiAgYXBwLiRvbmNlKCdob29rOmRlc3Ryb3llZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAvLyBjbGVhbiBvdXQgYXBwIGZyb20gdGhpcy5hcHBzIGFycmF5IG9uY2UgZGVzdHJveWVkXG4gICAgdmFyIGluZGV4ID0gdGhpcyQxLmFwcHMuaW5kZXhPZihhcHApO1xuICAgIGlmIChpbmRleCA+IC0xKSB7IHRoaXMkMS5hcHBzLnNwbGljZShpbmRleCwgMSk7IH1cbiAgICAvLyBlbnN1cmUgd2Ugc3RpbGwgaGF2ZSBhIG1haW4gYXBwIG9yIG51bGwgaWYgbm8gYXBwc1xuICAgIC8vIHdlIGRvIG5vdCByZWxlYXNlIHRoZSByb3V0ZXIgc28gaXQgY2FuIGJlIHJldXNlZFxuICAgIGlmICh0aGlzJDEuYXBwID09PSBhcHApIHsgdGhpcyQxLmFwcCA9IHRoaXMkMS5hcHBzWzBdIHx8IG51bGw7IH1cbiAgfSk7XG5cbiAgLy8gbWFpbiBhcHAgcHJldmlvdXNseSBpbml0aWFsaXplZFxuICAvLyByZXR1cm4gYXMgd2UgZG9uJ3QgbmVlZCB0byBzZXQgdXAgbmV3IGhpc3RvcnkgbGlzdGVuZXJcbiAgaWYgKHRoaXMuYXBwKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICB0aGlzLmFwcCA9IGFwcDtcblxuICB2YXIgaGlzdG9yeSA9IHRoaXMuaGlzdG9yeTtcblxuICBpZiAoaGlzdG9yeSBpbnN0YW5jZW9mIEhUTUw1SGlzdG9yeSkge1xuICAgIGhpc3RvcnkudHJhbnNpdGlvblRvKGhpc3RvcnkuZ2V0Q3VycmVudExvY2F0aW9uKCkpO1xuICB9IGVsc2UgaWYgKGhpc3RvcnkgaW5zdGFuY2VvZiBIYXNoSGlzdG9yeSkge1xuICAgIHZhciBzZXR1cEhhc2hMaXN0ZW5lciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGhpc3Rvcnkuc2V0dXBMaXN0ZW5lcnMoKTtcbiAgICB9O1xuICAgIGhpc3RvcnkudHJhbnNpdGlvblRvKFxuICAgICAgaGlzdG9yeS5nZXRDdXJyZW50TG9jYXRpb24oKSxcbiAgICAgIHNldHVwSGFzaExpc3RlbmVyLFxuICAgICAgc2V0dXBIYXNoTGlzdGVuZXJcbiAgICApO1xuICB9XG5cbiAgaGlzdG9yeS5saXN0ZW4oZnVuY3Rpb24gKHJvdXRlKSB7XG4gICAgdGhpcyQxLmFwcHMuZm9yRWFjaChmdW5jdGlvbiAoYXBwKSB7XG4gICAgICBhcHAuX3JvdXRlID0gcm91dGU7XG4gICAgfSk7XG4gIH0pO1xufTtcblxuVnVlUm91dGVyLnByb3RvdHlwZS5iZWZvcmVFYWNoID0gZnVuY3Rpb24gYmVmb3JlRWFjaCAoZm4pIHtcbiAgcmV0dXJuIHJlZ2lzdGVySG9vayh0aGlzLmJlZm9yZUhvb2tzLCBmbilcbn07XG5cblZ1ZVJvdXRlci5wcm90b3R5cGUuYmVmb3JlUmVzb2x2ZSA9IGZ1bmN0aW9uIGJlZm9yZVJlc29sdmUgKGZuKSB7XG4gIHJldHVybiByZWdpc3Rlckhvb2sodGhpcy5yZXNvbHZlSG9va3MsIGZuKVxufTtcblxuVnVlUm91dGVyLnByb3RvdHlwZS5hZnRlckVhY2ggPSBmdW5jdGlvbiBhZnRlckVhY2ggKGZuKSB7XG4gIHJldHVybiByZWdpc3Rlckhvb2sodGhpcy5hZnRlckhvb2tzLCBmbilcbn07XG5cblZ1ZVJvdXRlci5wcm90b3R5cGUub25SZWFkeSA9IGZ1bmN0aW9uIG9uUmVhZHkgKGNiLCBlcnJvckNiKSB7XG4gIHRoaXMuaGlzdG9yeS5vblJlYWR5KGNiLCBlcnJvckNiKTtcbn07XG5cblZ1ZVJvdXRlci5wcm90b3R5cGUub25FcnJvciA9IGZ1bmN0aW9uIG9uRXJyb3IgKGVycm9yQ2IpIHtcbiAgdGhpcy5oaXN0b3J5Lm9uRXJyb3IoZXJyb3JDYik7XG59O1xuXG5WdWVSb3V0ZXIucHJvdG90eXBlLnB1c2ggPSBmdW5jdGlvbiBwdXNoIChsb2NhdGlvbiwgb25Db21wbGV0ZSwgb25BYm9ydCkge1xuICAgIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gIC8vICRmbG93LWRpc2FibGUtbGluZVxuICBpZiAoIW9uQ29tcGxldGUgJiYgIW9uQWJvcnQgJiYgdHlwZW9mIFByb21pc2UgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIHRoaXMkMS5oaXN0b3J5LnB1c2gobG9jYXRpb24sIHJlc29sdmUsIHJlamVjdCk7XG4gICAgfSlcbiAgfSBlbHNlIHtcbiAgICB0aGlzLmhpc3RvcnkucHVzaChsb2NhdGlvbiwgb25Db21wbGV0ZSwgb25BYm9ydCk7XG4gIH1cbn07XG5cblZ1ZVJvdXRlci5wcm90b3R5cGUucmVwbGFjZSA9IGZ1bmN0aW9uIHJlcGxhY2UgKGxvY2F0aW9uLCBvbkNvbXBsZXRlLCBvbkFib3J0KSB7XG4gICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgLy8gJGZsb3ctZGlzYWJsZS1saW5lXG4gIGlmICghb25Db21wbGV0ZSAmJiAhb25BYm9ydCAmJiB0eXBlb2YgUHJvbWlzZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgdGhpcyQxLmhpc3RvcnkucmVwbGFjZShsb2NhdGlvbiwgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICB9KVxuICB9IGVsc2Uge1xuICAgIHRoaXMuaGlzdG9yeS5yZXBsYWNlKGxvY2F0aW9uLCBvbkNvbXBsZXRlLCBvbkFib3J0KTtcbiAgfVxufTtcblxuVnVlUm91dGVyLnByb3RvdHlwZS5nbyA9IGZ1bmN0aW9uIGdvIChuKSB7XG4gIHRoaXMuaGlzdG9yeS5nbyhuKTtcbn07XG5cblZ1ZVJvdXRlci5wcm90b3R5cGUuYmFjayA9IGZ1bmN0aW9uIGJhY2sgKCkge1xuICB0aGlzLmdvKC0xKTtcbn07XG5cblZ1ZVJvdXRlci5wcm90b3R5cGUuZm9yd2FyZCA9IGZ1bmN0aW9uIGZvcndhcmQgKCkge1xuICB0aGlzLmdvKDEpO1xufTtcblxuVnVlUm91dGVyLnByb3RvdHlwZS5nZXRNYXRjaGVkQ29tcG9uZW50cyA9IGZ1bmN0aW9uIGdldE1hdGNoZWRDb21wb25lbnRzICh0bykge1xuICB2YXIgcm91dGUgPSB0b1xuICAgID8gdG8ubWF0Y2hlZFxuICAgICAgPyB0b1xuICAgICAgOiB0aGlzLnJlc29sdmUodG8pLnJvdXRlXG4gICAgOiB0aGlzLmN1cnJlbnRSb3V0ZTtcbiAgaWYgKCFyb3V0ZSkge1xuICAgIHJldHVybiBbXVxuICB9XG4gIHJldHVybiBbXS5jb25jYXQuYXBwbHkoW10sIHJvdXRlLm1hdGNoZWQubWFwKGZ1bmN0aW9uIChtKSB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKG0uY29tcG9uZW50cykubWFwKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIHJldHVybiBtLmNvbXBvbmVudHNba2V5XVxuICAgIH0pXG4gIH0pKVxufTtcblxuVnVlUm91dGVyLnByb3RvdHlwZS5yZXNvbHZlID0gZnVuY3Rpb24gcmVzb2x2ZSAoXG4gIHRvLFxuICBjdXJyZW50LFxuICBhcHBlbmRcbikge1xuICBjdXJyZW50ID0gY3VycmVudCB8fCB0aGlzLmhpc3RvcnkuY3VycmVudDtcbiAgdmFyIGxvY2F0aW9uID0gbm9ybWFsaXplTG9jYXRpb24oXG4gICAgdG8sXG4gICAgY3VycmVudCxcbiAgICBhcHBlbmQsXG4gICAgdGhpc1xuICApO1xuICB2YXIgcm91dGUgPSB0aGlzLm1hdGNoKGxvY2F0aW9uLCBjdXJyZW50KTtcbiAgdmFyIGZ1bGxQYXRoID0gcm91dGUucmVkaXJlY3RlZEZyb20gfHwgcm91dGUuZnVsbFBhdGg7XG4gIHZhciBiYXNlID0gdGhpcy5oaXN0b3J5LmJhc2U7XG4gIHZhciBocmVmID0gY3JlYXRlSHJlZihiYXNlLCBmdWxsUGF0aCwgdGhpcy5tb2RlKTtcbiAgcmV0dXJuIHtcbiAgICBsb2NhdGlvbjogbG9jYXRpb24sXG4gICAgcm91dGU6IHJvdXRlLFxuICAgIGhyZWY6IGhyZWYsXG4gICAgLy8gZm9yIGJhY2t3YXJkcyBjb21wYXRcbiAgICBub3JtYWxpemVkVG86IGxvY2F0aW9uLFxuICAgIHJlc29sdmVkOiByb3V0ZVxuICB9XG59O1xuXG5WdWVSb3V0ZXIucHJvdG90eXBlLmFkZFJvdXRlcyA9IGZ1bmN0aW9uIGFkZFJvdXRlcyAocm91dGVzKSB7XG4gIHRoaXMubWF0Y2hlci5hZGRSb3V0ZXMocm91dGVzKTtcbiAgaWYgKHRoaXMuaGlzdG9yeS5jdXJyZW50ICE9PSBTVEFSVCkge1xuICAgIHRoaXMuaGlzdG9yeS50cmFuc2l0aW9uVG8odGhpcy5oaXN0b3J5LmdldEN1cnJlbnRMb2NhdGlvbigpKTtcbiAgfVxufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoIFZ1ZVJvdXRlci5wcm90b3R5cGUsIHByb3RvdHlwZUFjY2Vzc29ycyApO1xuXG5mdW5jdGlvbiByZWdpc3Rlckhvb2sgKGxpc3QsIGZuKSB7XG4gIGxpc3QucHVzaChmbik7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGkgPSBsaXN0LmluZGV4T2YoZm4pO1xuICAgIGlmIChpID4gLTEpIHsgbGlzdC5zcGxpY2UoaSwgMSk7IH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVIcmVmIChiYXNlLCBmdWxsUGF0aCwgbW9kZSkge1xuICB2YXIgcGF0aCA9IG1vZGUgPT09ICdoYXNoJyA/ICcjJyArIGZ1bGxQYXRoIDogZnVsbFBhdGg7XG4gIHJldHVybiBiYXNlID8gY2xlYW5QYXRoKGJhc2UgKyAnLycgKyBwYXRoKSA6IHBhdGhcbn1cblxuVnVlUm91dGVyLmluc3RhbGwgPSBpbnN0YWxsO1xuVnVlUm91dGVyLnZlcnNpb24gPSAnMy4xLjMnO1xuXG5pZiAoaW5Ccm93c2VyICYmIHdpbmRvdy5WdWUpIHtcbiAgd2luZG93LlZ1ZS51c2UoVnVlUm91dGVyKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBWdWVSb3V0ZXI7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gdm9pZCAwO1xuXG52YXIgX3Z1ZSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcInZ1ZVwiKSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IFwiZGVmYXVsdFwiOiBvYmogfTsgfVxuXG52YXIgYnVzID0gbmV3IF92dWVbXCJkZWZhdWx0XCJdKCk7XG52YXIgX2RlZmF1bHQgPSBidXM7XG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IF9kZWZhdWx0OyIsIlwidXNlIHN0cmljdFwiO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIF90aGlzID0gdGhpcztcblxuICB2YXIgZGlzcGxheSA9IHRoaXMuY29sdW1uc0Rpc3BsYXk7IC8vIGRlZmF1bHQgLSByZXR1cm4gYWxsIGNvbHVtbnNcblxuICBpZiAoIWRpc3BsYXkgJiYgIXRoaXMudXNlckNvbnRyb2xzQ29sdW1ucykge1xuICAgIHJldHVybiB0aGlzLkNvbHVtbnMuZmlsdGVyKGZ1bmN0aW9uIChjb2wpIHtcbiAgICAgIHJldHVybiBfdGhpcy5fc2hvdWxkU2hvd0NvbHVtbk9uSW5pdChjb2wpO1xuICAgIH0pO1xuICB9IC8vIHVzZXIgdG9nZ2xlZCBjb2x1bW5zIC0gcmV0dXJuIHVzZXIgc2VsZWN0ZWQgY29sdW1uc1xuXG5cbiAgaWYgKHRoaXMudXNlckNvbnRyb2xzQ29sdW1ucykge1xuICAgIHJldHVybiB0aGlzLmNvbHVtbnMuZmlsdGVyKGZ1bmN0aW9uIChjb2x1bW4pIHtcbiAgICAgIHJldHVybiBfdGhpcy51c2VyQ29sdW1uc0Rpc3BsYXkuaW5jbHVkZXMoY29sdW1uKTtcbiAgICB9KTtcbiAgfVxuXG4gIGlmICh0aGlzLm9wdHMuc3NyKSByZXR1cm4gdGhpcy5Db2x1bW5zOyAvLyBkZXZlbG9wZXIgZGVmaW5lZCBjb2x1bW5zIGRpc3BsYXlcblxuICByZXR1cm4gdGhpcy5Db2x1bW5zLmZpbHRlcihmdW5jdGlvbiAoY29sdW1uKSB7XG4gICAgaWYgKCFfdGhpcy5fc2hvdWxkU2hvd0NvbHVtbk9uSW5pdChjb2x1bW4pKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKCFkaXNwbGF5W2NvbHVtbl0pIHJldHVybiB0cnVlO1xuICAgIHZhciByYW5nZSA9IGRpc3BsYXlbY29sdW1uXTtcbiAgICB2YXIgb3BlcmF0b3IgPSByYW5nZVsyXTtcbiAgICB2YXIgaW5SYW5nZSA9ICghcmFuZ2VbMF0gfHwgX3RoaXMud2luZG93V2lkdGggPj0gcmFuZ2VbMF0pICYmICghcmFuZ2VbMV0gfHwgX3RoaXMud2luZG93V2lkdGggPCByYW5nZVsxXSk7XG4gICAgcmV0dXJuIG9wZXJhdG9yID09ICdub3QnID8gIWluUmFuZ2UgOiBpblJhbmdlO1xuICB9KTtcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5oYXNDaGlsZFJvdyA/IHRoaXMuYWxsQ29sdW1ucy5sZW5ndGggKyAxIDogdGhpcy5hbGxDb2x1bW5zLmxlbmd0aDtcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodGhpcy5jdXN0b21RdWVyaWVzKTtcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBpbnRlcnNlY3QgPSByZXF1aXJlKCdhcnJheS1pbnRlcnNlY3QnKVtcImRlZmF1bHRcIl07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICBpZiAodGhpcy5vcHRzLmZpbHRlcmFibGUgPT09IHRydWUpIHtcbiAgICByZXR1cm4gdGhpcy5vcHRzLmRhdGVDb2x1bW5zO1xuICB9XG5cbiAgaWYgKHRoaXMub3B0cy5maWx0ZXJhYmxlID09PSBmYWxzZSkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIHJldHVybiBpbnRlcnNlY3QodGhpcy5vcHRzLmZpbHRlcmFibGUsIHRoaXMub3B0cy5kYXRlQ29sdW1ucyk7XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMub3B0cy5maWx0ZXJhYmxlICYmIHRoaXMub3B0cy5maWx0ZXJhYmxlLmxlbmd0aCA/IHRoaXMub3B0cy5maWx0ZXJhYmxlIDogdGhpcy5Db2x1bW5zO1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxudmFyIGNsb25lID0gcmVxdWlyZSgnY2xvbmUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHZhciBkYXRhID0gY2xvbmUodGhpcy50YWJsZURhdGEpO1xuICAgIHZhciBjb2x1bW4gPSB0aGlzLm9yZGVyQnkuY29sdW1uO1xuICAgIGRhdGEgPSB0aGlzLnNlYXJjaChkYXRhKTtcblxuICAgIGlmIChjb2x1bW4pIHtcbiAgICAgIC8vIGR1bW15IHZhciB0byBmb3JjZSBjb21waWxhdGlvblxuICAgICAgaWYgKHRoaXMudGltZSkgdGhpcy50aW1lID0gdGhpcy50aW1lO1xuICAgICAgZGF0YSA9IHRoaXMub3B0cy5zb3J0aW5nQWxnb3JpdGhtLmNhbGwodGhpcywgZGF0YSwgY29sdW1uKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMub3B0cy5ncm91cEJ5KSB7XG4gICAgICBkYXRhID0gdGhpcy5vcHRzLnNvcnRpbmdBbGdvcml0aG0uY2FsbCh0aGlzLCBkYXRhLCB0aGlzLm9wdHMuZ3JvdXBCeSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudnVleCkge1xuICAgICAgaWYgKHRoaXMuY291bnQgIT0gZGF0YS5sZW5ndGgpIHRoaXMuY29tbWl0KCdTRVRfQ09VTlQnLCBkYXRhLmxlbmd0aCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY291bnQgPSBkYXRhLmxlbmd0aDtcbiAgICB9XG5cbiAgICB2YXIgb2Zmc2V0ID0gKHRoaXMucGFnZSAtIDEpICogdGhpcy5saW1pdDtcbiAgICB0aGlzLmFsbEZpbHRlcmVkRGF0YSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZGF0YSkpO1xuICAgIGRhdGEgPSBkYXRhLnNwbGljZShvZmZzZXQsIHRoaXMubGltaXQpO1xuICAgIHJldHVybiB0aGlzLmFwcGx5RmlsdGVycyhkYXRhKTtcbiAgfSxcbiAgc2V0OiBmdW5jdGlvbiBzZXQodmFsKSB7XG4gICAgY29uc29sZS5sb2codmFsKTtcbiAgfVxufTsiLCJcInVzZSBzdHJpY3RcIjtcblxuZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gIGlmIChfdHlwZW9mKHRoaXMucXVlcnkpICE9PSAnb2JqZWN0JyB8fCB0aGlzLm9wdHMuc2VuZEVtcHR5RmlsdGVycykge1xuICAgIHJldHVybiB0aGlzLnF1ZXJ5O1xuICB9XG5cbiAgdmFyIHJlc3VsdCA9IHt9O1xuXG4gIGZvciAodmFyIGtleSBpbiB0aGlzLnF1ZXJ5KSB7XG4gICAgaWYgKHRoaXMucXVlcnlba2V5XSAhPT0gJycgJiYgdGhpcy5maWx0ZXJhYmxlKGtleSkpIHtcbiAgICAgIHJlc3VsdFtrZXldID0gdGhpcy5xdWVyeVtrZXldO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMub3B0cy5jaGlsZFJvdyB8fCB0aGlzLiRzY29wZWRTbG90cy5jaGlsZF9yb3c7XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG5mdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuICF0aGlzLm9wdHMuZmlsdGVyQnlDb2x1bW4gJiYgKHR5cGVvZiB0aGlzLm9wdHMuZmlsdGVyYWJsZSA9PT0gJ2Jvb2xlYW4nICYmIHRoaXMub3B0cy5maWx0ZXJhYmxlIHx8IF90eXBlb2YodGhpcy5vcHRzLmZpbHRlcmFibGUpID09PSAnb2JqZWN0JyAmJiB0aGlzLm9wdHMuZmlsdGVyYWJsZS5sZW5ndGgpO1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBjb2x1bW5zID0gT2JqZWN0LmtleXModGhpcy5vcHRzLmxpc3RDb2x1bW5zKTtcbiAgdmFyIHJlcyA9IHt9O1xuICBjb2x1bW5zLmZvckVhY2goZnVuY3Rpb24gKGNvbHVtbikge1xuICAgIHJlc1tjb2x1bW5dID0ge307XG4gICAgdGhpcy5vcHRzLmxpc3RDb2x1bW5zW2NvbHVtbl0uZm9yRWFjaChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgcmVzW2NvbHVtbl1baXRlbS5pZF0gPSBpdGVtLnRleHQ7XG4gICAgfSk7XG4gIH0uYmluZCh0aGlzKSk7XG4gIHJldHVybiByZXM7XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGRlZmF1bHRzID0gcmVxdWlyZSgnLi4vY29uZmlnL2RlZmF1bHRzJykoKTtcblxuICByZXR1cm4gdGhpcy5pbml0T3B0aW9ucyhkZWZhdWx0cywgdGhpcy5nbG9iYWxPcHRpb25zLCB0aGlzLm9wdGlvbnMpO1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLm9wdHMuZmlsdGVyQnlDb2x1bW4gPyBKU09OLnN0cmluZ2lmeSh0aGlzLnF1ZXJ5KSA6IHRoaXMucXVlcnk7XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKHR5cGVvZiBsb2NhbFN0b3JhZ2UgPT09ICd1bmRlZmluZWQnKSByZXR1cm4ge307XG4gIHJldHVybiB0aGlzLm9wdHMuc3RvcmFnZSA9PT0gJ2xvY2FsJyA/IGxvY2FsU3RvcmFnZSA6IHNlc3Npb25TdG9yYWdlO1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLmRhdGE7XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMub3B0cy50ZW1wbGF0ZXMpO1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBNYXRoLmNlaWwodGhpcy5jb3VudCAvIHRoaXMubGltaXQpO1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB7XG4gICAgYWx3YXlzU2hvd1BlclBhZ2VTZWxlY3Q6IGZhbHNlLFxuICAgIGhpZGVQZXJQYWdlU2VsZWN0OiBmYWxzZSxcbiAgICBkYXRlQ29sdW1uczogW10sXG4gICAgbGlzdENvbHVtbnM6IHt9LFxuICAgIGRhdGVwaWNrZXJPcHRpb25zOiB7XG4gICAgICBsb2NhbGU6IHtcbiAgICAgICAgY2FuY2VsTGFiZWw6IFwiQ2xlYXJcIlxuICAgICAgfVxuICAgIH0sXG4gICAgZGF0ZXBpY2tlclBlckNvbHVtbk9wdGlvbnM6IHt9LFxuICAgIGluaXRpYWxQYWdlOiAxLFxuICAgIHBlclBhZ2U6IDEwLFxuICAgIHBlclBhZ2VWYWx1ZXM6IFsxMCwgMjUsIDUwLCAxMDBdLFxuICAgIGdyb3VwQnk6IGZhbHNlLFxuICAgIGNvbGxhcHNlR3JvdXBzOiBmYWxzZSxcbiAgICBkZXN0cm95RXZlbnRCdXM6IGZhbHNlLFxuICAgIHNlbmRFbXB0eUZpbHRlcnM6IGZhbHNlLFxuICAgIHBhcmFtczoge30sXG4gICAgc29ydGFibGU6IHRydWUsXG4gICAgZmlsdGVyYWJsZTogdHJ1ZSxcbiAgICBncm91cE1ldGE6IFtdLFxuICAgIGluaXRGaWx0ZXJzOiB7fSxcbiAgICBzZW5kSW5pdGlhbFJlcXVlc3Q6IHRydWUsXG4gICAgY3VzdG9tRmlsdGVyczogW10sXG4gICAgdGVtcGxhdGVzOiB7fSxcbiAgICBkZWJvdW5jZTogMjUwLFxuICAgIGRhdGVGb3JtYXQ6IFwiREQvTU0vWVlZWVwiLFxuICAgIGRhdGVGb3JtYXRQZXJDb2x1bW46IHt9LFxuICAgIHRvTW9tZW50Rm9ybWF0OiBmYWxzZSxcbiAgICBza2luOiBmYWxzZSxcbiAgICBjb2x1bW5zRGlzcGxheToge30sXG4gICAgY29sdW1uc0Ryb3Bkb3duOiBmYWxzZSxcbiAgICB0ZXh0czoge1xuICAgICAgY291bnQ6IFwiU2hvd2luZyB7ZnJvbX0gdG8ge3RvfSBvZiB7Y291bnR9IHJlY29yZHN8e2NvdW50fSByZWNvcmRzfE9uZSByZWNvcmRcIixcbiAgICAgIGZpcnN0OiBcIkZpcnN0XCIsXG4gICAgICBsYXN0OiBcIkxhc3RcIixcbiAgICAgIGZpbHRlcjogXCJGaWx0ZXI6XCIsXG4gICAgICBmaWx0ZXJQbGFjZWhvbGRlcjogXCJTZWFyY2ggcXVlcnlcIixcbiAgICAgIGxpbWl0OiBcIlJlY29yZHM6XCIsXG4gICAgICBwYWdlOiBcIlBhZ2U6XCIsXG4gICAgICBub1Jlc3VsdHM6IFwiTm8gbWF0Y2hpbmcgcmVjb3Jkc1wiLFxuICAgICAgZmlsdGVyQnk6IFwiRmlsdGVyIGJ5IHtjb2x1bW59XCIsXG4gICAgICBsb2FkaW5nOiBcIkxvYWRpbmcuLi5cIixcbiAgICAgIGRlZmF1bHRPcHRpb246IFwiU2VsZWN0IHtjb2x1bW59XCIsXG4gICAgICBjb2x1bW5zOiBcIkNvbHVtbnNcIlxuICAgIH0sXG4gICAgc29ydEljb246IHtcbiAgICAgIGlzOiBcImdseXBoaWNvbi1zb3J0XCIsXG4gICAgICBiYXNlOiBcImdseXBoaWNvblwiLFxuICAgICAgdXA6IFwiZ2x5cGhpY29uLWNoZXZyb24tdXBcIixcbiAgICAgIGRvd246IFwiZ2x5cGhpY29uLWNoZXZyb24tZG93blwiXG4gICAgfSxcbiAgICBzb3J0aW5nQWxnb3JpdGhtOiBmdW5jdGlvbiBzb3J0aW5nQWxnb3JpdGhtKGRhdGEsIGNvbHVtbikge1xuICAgICAgcmV0dXJuIGRhdGEuc29ydCh0aGlzLmdldFNvcnRGbihjb2x1bW4pKTtcbiAgICB9LFxuICAgIGZpbHRlckFsZ29yaXRobToge30sXG4gICAgY3VzdG9tU29ydGluZzoge30sXG4gICAgbXVsdGlTb3J0aW5nOiB7fSxcbiAgICBjbGllbnRNdWx0aVNvcnRpbmc6IHRydWUsXG4gICAgc2VydmVyTXVsdGlTb3J0aW5nOiBmYWxzZSxcbiAgICBmaWx0ZXJCeUNvbHVtbjogZmFsc2UsXG4gICAgaGlnaGxpZ2h0TWF0Y2hlczogZmFsc2UsXG4gICAgb3JkZXJCeTogZmFsc2UsXG4gICAgZGVzY09yZGVyQ29sdW1uczogW10sXG4gICAgZm9vdGVySGVhZGluZ3M6IGZhbHNlLFxuICAgIGhlYWRpbmdzOiB7fSxcbiAgICBoZWFkaW5nc1Rvb2x0aXBzOiB7fSxcbiAgICBwYWdpbmF0aW9uOiB7XG4gICAgICBkcm9wZG93bjogZmFsc2UsXG4gICAgICBjaHVuazogMTAsXG4gICAgICBlZGdlOiBmYWxzZSxcbiAgICAgIGFsaWduOiBcImNlbnRlclwiLFxuICAgICAgbmF2OiBcImZpeGVkXCJcbiAgICB9LFxuICAgIGNoaWxkUm93OiBmYWxzZSxcbiAgICBjaGlsZFJvd1RvZ2dsZXJGaXJzdDogdHJ1ZSxcbiAgICBzaG93Q2hpbGRSb3dUb2dnbGVyOiB0cnVlLFxuICAgIHVuaXF1ZUtleTogXCJpZFwiLFxuICAgIHJlcXVlc3RGdW5jdGlvbjogZmFsc2UsXG4gICAgcmVxdWVzdEFkYXB0ZXI6IGZ1bmN0aW9uIHJlcXVlc3RBZGFwdGVyKGRhdGEpIHtcbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH0sXG4gICAgcmVzcG9uc2VBZGFwdGVyOiBmdW5jdGlvbiByZXNwb25zZUFkYXB0ZXIocmVzcCkge1xuICAgICAgdmFyIGRhdGEgPSB0aGlzLmdldFJlc3BvbnNlRGF0YShyZXNwKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRhdGE6IGRhdGEuZGF0YSxcbiAgICAgICAgY291bnQ6IGRhdGEuY291bnRcbiAgICAgIH07XG4gICAgfSxcbiAgICByZXF1ZXN0S2V5czoge1xuICAgICAgcXVlcnk6IFwicXVlcnlcIixcbiAgICAgIGxpbWl0OiBcImxpbWl0XCIsXG4gICAgICBvcmRlckJ5OiBcIm9yZGVyQnlcIixcbiAgICAgIGFzY2VuZGluZzogXCJhc2NlbmRpbmdcIixcbiAgICAgIHBhZ2U6IFwicGFnZVwiLFxuICAgICAgYnlDb2x1bW46IFwiYnlDb2x1bW5cIlxuICAgIH0sXG4gICAgcm93Q2xhc3NDYWxsYmFjazogZmFsc2UsXG4gICAgcHJlc2VydmVTdGF0ZTogZmFsc2UsXG4gICAgc2F2ZVN0YXRlOiBmYWxzZSxcbiAgICBzdG9yYWdlOiBcImxvY2FsXCIsXG4gICAgY29sdW1uc0NsYXNzZXM6IHt9LFxuICAgIHN1bW1hcnk6IGZhbHNlLFxuICAgIGNhcHRpb246IGZhbHNlLFxuICAgIGNlbGxDbGFzc2VzOiB7fSxcbiAgICB2aXNpYmxlQ29sdW1uczogZmFsc2UsXG4gICAgaGlkZGVuQ29sdW1uczogZmFsc2UsXG4gICAgcmVzaXphYmxlQ29sdW1uczogdHJ1ZSxcbiAgICBlZGl0YWJsZUNvbHVtbnM6IFtdXG4gIH07XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChkYXRhLCBjdXN0b21GaWx0ZXJzLCBjdXN0b21RdWVyaWVzKSB7XG4gIHZhciBwYXNzaW5nO1xuICByZXR1cm4gZGF0YS5maWx0ZXIoZnVuY3Rpb24gKHJvdykge1xuICAgIHBhc3NpbmcgPSB0cnVlO1xuICAgIGN1c3RvbUZpbHRlcnMuZm9yRWFjaChmdW5jdGlvbiAoZmlsdGVyKSB7XG4gICAgICB2YXIgdmFsdWUgPSBjdXN0b21RdWVyaWVzW2ZpbHRlci5uYW1lXTtcbiAgICAgIGlmICh2YWx1ZSAmJiAhZmlsdGVyLmNhbGxiYWNrKHJvdywgdmFsdWUpKSBwYXNzaW5nID0gZmFsc2U7XG4gICAgfSk7XG4gICAgcmV0dXJuIHBhc3Npbmc7XG4gIH0pO1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxudmFyIHZhbGlkTW9tZW50ID0gcmVxdWlyZSgnLi4vaGVscGVycy9pcy12YWxpZC1tb21lbnQtb2JqZWN0Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHZhbHVlLCBkYXRlRm9ybWF0KSB7XG4gIGlmICghdmFsaWRNb21lbnQodmFsdWUpKSByZXR1cm4gdmFsdWU7XG4gIHJldHVybiB2YWx1ZS5mb3JtYXQoZGF0ZUZvcm1hdCk7XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh2YWx1ZSwgY29sdW1uLCBoKSB7XG4gIHZhciBxdWVyeSA9IHRoaXMub3B0cy5maWx0ZXJCeUNvbHVtbiA/IHRoaXMucXVlcnlbY29sdW1uXSA6IHRoaXMucXVlcnk7XG4gIGlmICghcXVlcnkpIHJldHVybiB2YWx1ZTtcbiAgcXVlcnkgPSBuZXcgUmVnRXhwKFwiKFwiICsgZXNjYXBlUmVnZXgocXVlcnkpICsgXCIpXCIsIFwiaVwiKTtcbiAgcmV0dXJuIGgoXCJzcGFuXCIsIHtcbiAgICBcImNsYXNzXCI6ICdWdWVUYWJsZXNfX2hpZ2hsaWdodCdcbiAgfSwgbWF0Y2hlcyh2YWx1ZSwgcXVlcnksIGgpKTtcbn07XG5cbmZ1bmN0aW9uIG1hdGNoZXModmFsdWUsIHF1ZXJ5LCBoKSB7XG4gIHZhciBwaWVjZXMgPSBTdHJpbmcodmFsdWUpLnNwbGl0KHF1ZXJ5KTtcbiAgcmV0dXJuIHBpZWNlcy5tYXAoZnVuY3Rpb24gKHBpZWNlKSB7XG4gICAgaWYgKHF1ZXJ5LnRlc3QocGllY2UpKSB7XG4gICAgICByZXR1cm4gaChcImJcIiwge30sIHBpZWNlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGllY2U7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBlc2NhcGVSZWdleChzKSB7XG4gIHJldHVybiB0eXBlb2YgcyA9PT0gJ3N0cmluZycgPyBzLnJlcGxhY2UoL1stXFwvXFxcXF4kKis/LigpfFtcXF17fV0vZywgJ1xcXFwkJicpIDogcztcbn1cblxuOyIsIlwidXNlIHN0cmljdFwiO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh2YWx1ZSwgY29sdW1uKSB7XG4gIHZhciBsaXN0ID0gdGhpcy5saXN0Q29sdW1uc09iamVjdFtjb2x1bW5dO1xuICBpZiAodHlwZW9mIGxpc3RbdmFsdWVdID09ICd1bmRlZmluZWQnKSByZXR1cm4gdmFsdWU7XG4gIHJldHVybiBsaXN0W3ZhbHVlXTtcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iaikge1xuICAvLyBudWxsIGFuZCB1bmRlZmluZWQgYXJlIFwiZW1wdHlcIlxuICBpZiAob2JqID09IG51bGwpIHJldHVybiB0cnVlOyAvLyBBc3N1bWUgaWYgaXQgaGFzIGEgbGVuZ3RoIHByb3BlcnR5IHdpdGggYSBub24temVybyB2YWx1ZVxuICAvLyB0aGF0IHRoYXQgcHJvcGVydHkgaXMgY29ycmVjdC5cblxuICBpZiAob2JqLmxlbmd0aCA+IDApIHJldHVybiBmYWxzZTtcbiAgaWYgKG9iai5sZW5ndGggPT09IDApIHJldHVybiB0cnVlOyAvLyBPdGhlcndpc2UsIGRvZXMgaXQgaGF2ZSBhbnkgcHJvcGVydGllcyBvZiBpdHMgb3duP1xuXG4gIGZvciAodmFyIGtleSBpbiBvYmopIHtcbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwga2V5KSkgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh2YWwpIHtcbiAgcmV0dXJuIHZhbCAmJiB0eXBlb2YgdmFsLmlzVmFsaWQgPT0gJ2Z1bmN0aW9uJyAmJiB2YWwuaXNWYWxpZCgpO1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxuZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqKSB7XG4gIHZhciBjb3VudCA9IDA7XG5cbiAgZm9yICh2YXIgcHJvcCBpbiBvYmopIHtcbiAgICB2YXIgaXNEYXRlUmFuZ2UgPSBfdHlwZW9mKG9ialtwcm9wXSkgPT0gJ29iamVjdCc7XG4gICAgaWYgKGlzRGF0ZVJhbmdlIHx8IG9ialtwcm9wXSAmJiAoIWlzTmFOKG9ialtwcm9wXSkgfHwgb2JqW3Byb3BdLnRyaW0oKSkpIGNvdW50Kys7XG4gIH1cblxuICByZXR1cm4gY291bnQ7XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG5mdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0YWJsZSwgaGFzQ2hpbGRSb3csIGlzQ2hpbGRSb3dUb2dnbGVyRmlyc3QsIHJlc2l6ZWFibGVDb2x1bW5zKSB7XG4gIHZhciByb3cgPSB0YWJsZS5nZXRFbGVtZW50c0J5VGFnTmFtZShcInRyXCIpWzBdLFxuICAgICAgY29scyA9IHJvdyA/IEFycmF5LmZyb20ocm93LmNoaWxkcmVuKSA6IHVuZGVmaW5lZDtcbiAgaWYgKCFjb2xzKSByZXR1cm47XG5cbiAgaWYgKF90eXBlb2YocmVzaXplYWJsZUNvbHVtbnMpID09PSAnb2JqZWN0Jykge1xuICAgIGNvbHMgPSBjb2xzLmZpbHRlcihmdW5jdGlvbiAoY29sKSB7XG4gICAgICByZXR1cm4gcmVzaXplYWJsZUNvbHVtbnMuaW5jbHVkZXMoY29sLmlkLnNwbGl0KCctLScpWzFdKTtcbiAgICB9KTtcbiAgfVxuXG4gIHRhYmxlLnN0eWxlLm92ZXJmbG93ID0gXCJoaWRkZW5cIjtcbiAgdmFyIHRhYmxlSGVpZ2h0ID0gdGFibGUub2Zmc2V0SGVpZ2h0O1xuICB2YXIgaSA9IGhhc0NoaWxkUm93ICYmIGlzQ2hpbGRSb3dUb2dnbGVyRmlyc3QgPyAxIDogMDtcbiAgdmFyIHRpbGwgPSBoYXNDaGlsZFJvdyAmJiAhaXNDaGlsZFJvd1RvZ2dsZXJGaXJzdCA/IGNvbHMubGVuZ3RoIC0gMiA6IGNvbHMubGVuZ3RoO1xuXG4gIGZvciAoOyBpIDwgdGlsbDsgaSsrKSB7XG4gICAgdmFyIGRpdiA9IGNyZWF0ZURpdih0YWJsZUhlaWdodCk7XG4gICAgZGl2LmNsYXNzTmFtZSA9IFwicmVzaXplLWhhbmRsZVwiO1xuICAgIGNvbHNbaV0uYXBwZW5kQ2hpbGQoZGl2KTtcbiAgICBjb2xzW2ldLnN0eWxlLnBvc2l0aW9uID0gXCJyZWxhdGl2ZVwiO1xuICAgIHNldExpc3RlbmVycyhkaXYpO1xuICB9XG5cbiAgZnVuY3Rpb24gc2V0TGlzdGVuZXJzKGRpdikge1xuICAgIHZhciBwYWdlWCwgY3VyQ29sLCBueHRDb2wsIGN1ckNvbFdpZHRoLCBueHRDb2xXaWR0aDtcbiAgICBkaXYuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlZG93blwiLCBmdW5jdGlvbiAoZSkge1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIGN1ckNvbCA9IGUudGFyZ2V0LnBhcmVudEVsZW1lbnQ7XG4gICAgICBueHRDb2wgPSBjdXJDb2wubmV4dEVsZW1lbnRTaWJsaW5nO1xuICAgICAgcGFnZVggPSBlLnBhZ2VYO1xuICAgICAgdmFyIHBhZGRpbmcgPSBwYWRkaW5nRGlmZihjdXJDb2wpO1xuICAgICAgY3VyQ29sV2lkdGggPSBjdXJDb2wub2Zmc2V0V2lkdGggLSBwYWRkaW5nO1xuICAgICAgaWYgKG54dENvbCkgbnh0Q29sV2lkdGggPSBueHRDb2wub2Zmc2V0V2lkdGggLSBwYWRkaW5nO1xuICAgIH0pOyAvLyBkaXYuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlb3ZlclwiLCBmdW5jdGlvbihlKSB7XG4gICAgLy8gICBlLnRhcmdldC5zdHlsZS5ib3JkZXJSaWdodCA9IFwiMnB4IHNvbGlkICMwMDAwZmZcIjtcbiAgICAvLyB9KTtcblxuICAgIGRpdi5hZGRFdmVudExpc3RlbmVyKFwibW91c2VvdXRcIiwgZnVuY3Rpb24gKGUpIHtcbiAgICAgIGUudGFyZ2V0LnN0eWxlLmJvcmRlclJpZ2h0ID0gXCJcIjtcbiAgICB9KTtcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwibW91c2Vtb3ZlXCIsIGZ1bmN0aW9uIChlKSB7XG4gICAgICBpZiAoY3VyQ29sKSB7XG4gICAgICAgIHZhciBkaWZmWCA9IGUucGFnZVggLSBwYWdlWDtcbiAgICAgICAgaWYgKG54dENvbCkgbnh0Q29sLnN0eWxlLndpZHRoID0gbnh0Q29sV2lkdGggLSBkaWZmWCArIFwicHhcIjtcbiAgICAgICAgY3VyQ29sLnN0eWxlLndpZHRoID0gY3VyQ29sV2lkdGggKyBkaWZmWCArIFwicHhcIjtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwibW91c2V1cFwiLCBmdW5jdGlvbiAoZSkge1xuICAgICAgaWYgKGUudGFyZ2V0Lm5vZGVOYW1lID09PSAnSU5QVVQnKSByZXR1cm47XG4gICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgY3VyQ29sID0gdW5kZWZpbmVkO1xuICAgICAgbnh0Q29sID0gdW5kZWZpbmVkO1xuICAgICAgcGFnZVggPSB1bmRlZmluZWQ7XG4gICAgICBueHRDb2xXaWR0aCA9IHVuZGVmaW5lZDtcbiAgICAgIGN1ckNvbFdpZHRoID0gdW5kZWZpbmVkO1xuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlRGl2KGhlaWdodCkge1xuICAgIHZhciBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIGRpdi5zdHlsZS50b3AgPSAwO1xuICAgIGRpdi5zdHlsZS5yaWdodCA9IDA7XG4gICAgZGl2LnN0eWxlLndpZHRoID0gXCI1cHhcIjtcbiAgICBkaXYuc3R5bGUucG9zaXRpb24gPSBcImFic29sdXRlXCI7XG4gICAgZGl2LnN0eWxlLmN1cnNvciA9IFwiY29sLXJlc2l6ZVwiO1xuICAgIGRpdi5zdHlsZS51c2VyU2VsZWN0ID0gXCJub25lXCI7XG4gICAgZGl2LnN0eWxlLmhlaWdodCA9IGhlaWdodCArIFwicHhcIjtcbiAgICByZXR1cm4gZGl2O1xuICB9XG5cbiAgZnVuY3Rpb24gcGFkZGluZ0RpZmYoY29sKSB7XG4gICAgaWYgKGdldFN0eWxlVmFsKGNvbCwgXCJib3gtc2l6aW5nXCIpID09IFwiYm9yZGVyLWJveFwiKSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG5cbiAgICB2YXIgcGFkTGVmdCA9IGdldFN0eWxlVmFsKGNvbCwgXCJwYWRkaW5nLWxlZnRcIik7XG4gICAgdmFyIHBhZFJpZ2h0ID0gZ2V0U3R5bGVWYWwoY29sLCBcInBhZGRpbmctcmlnaHRcIik7XG4gICAgcmV0dXJuIHBhcnNlSW50KHBhZExlZnQpICsgcGFyc2VJbnQocGFkUmlnaHQpO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0U3R5bGVWYWwoZWxtLCBjc3MpIHtcbiAgICByZXR1cm4gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZWxtLCBudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKGNzcyk7XG4gIH1cbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IF9kZWZhdWx0O1xuXG5mdW5jdGlvbiBfZGVmYXVsdChzdHIpIHtcbiAgcmV0dXJuIHN0ci5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHN0ci5zbGljZSgxKTtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxudmFyIF9idXMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2J1c1wiKSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IFwiZGVmYXVsdFwiOiBvYmogfTsgfVxuXG52YXIgQ2xpZW50VGFibGUgPSByZXF1aXJlKCcuL3YtY2xpZW50LXRhYmxlJyk7XG5cbnZhciBTZXJ2ZXJUYWJsZSA9IHJlcXVpcmUoJy4vdi1zZXJ2ZXItdGFibGUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIENsaWVudFRhYmxlOiBDbGllbnRUYWJsZSxcbiAgU2VydmVyVGFibGU6IFNlcnZlclRhYmxlLFxuICBFdmVudDogX2J1c1tcImRlZmF1bHRcIl1cbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGRhdGEpIHtcbiAgdmFyIF90aGlzID0gdGhpcztcblxuICB0cnkge1xuICAgIHJldHVybiBkYXRhLm1hcChmdW5jdGlvbiAocm93KSB7XG4gICAgICBmb3IgKHZhciBjb2x1bW4gaW4gcm93KSB7XG4gICAgICAgIGlmIChfdGhpcy5zb3VyY2UgPT09ICdjbGllbnQnKSByb3dbY29sdW1uXSA9IF90aGlzLmZvcm1hdERhdGUocm93W2NvbHVtbl0sIF90aGlzLmRhdGVGb3JtYXQoY29sdW1uKSk7XG5cbiAgICAgICAgaWYgKF90aGlzLmlzTGlzdEZpbHRlcihjb2x1bW4pICYmICFfdGhpcy5vcHRzLnRlbXBsYXRlc1tjb2x1bW5dICYmICFfdGhpcy4kc2NvcGVkU2xvdHNbY29sdW1uXSkge1xuICAgICAgICAgIHJvd1tjb2x1bW5dID0gX3RoaXMub3B0aW9uVGV4dChyb3dbY29sdW1uXSwgY29sdW1uKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gcm93O1xuICAgIH0pO1xuICB9IGNhdGNoIChlKSB7XG4gICAgY29uc29sZS5lcnJvcihcInZ1ZS10YWJsZXMtMjogbm9uLWl0ZXJhYmxlIGRhdGEgcHJvcGVydHkuIEV4cGVjdGVkIGFycmF5LCBnb3QgXCIuY29uY2F0KF90eXBlb2YoZGF0YSksIFwiLiBNYWtlIHN1cmUgdGhhdCB5b3VyIHJlc3BvbnNlIGNvbmZvcm1zIHRvIHRoZSBleHBlY3RlZCBmb3JtYXQsIG9yIHVzZSB0aGUgJ3Jlc3BvbnNlQWRhcHRlcicgb3B0aW9uIHRvIG1hdGNoIHRoZSBjdXJyZW50bHkgcmV0dXJuZWQgZm9ybWF0XCIpKTtcbiAgICBjb25zb2xlLmVycm9yKCdEYXRhIGVxdWFscycsIGRhdGEpO1xuICAgIHRocm93IG5ldyBFcnJvcigpO1xuICB9XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChjb2x1bW4sIHJvdykge1xuICBpZiAoIXRoaXMub3B0cy5jZWxsQ2xhc3Nlc1tjb2x1bW5dKSByZXR1cm4gJyc7XG4gIHJldHVybiB0aGlzLm9wdHMuY2VsbENsYXNzZXNbY29sdW1uXS5maWx0ZXIoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICByZXR1cm4gaXRlbS5jb25kaXRpb24ocm93KTtcbiAgfSkubWFwKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgcmV0dXJuIGl0ZW1bXCJjbGFzc1wiXTtcbiAgfSkuam9pbignICcpO1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAocm93SWQpIHtcbiAgcmV0dXJuIHRoaXMub3BlbkNoaWxkUm93cy5pbmNsdWRlcyhyb3dJZCkgPyAnVnVlVGFibGVzX19jaGlsZC1yb3ctdG9nZ2xlci0tb3BlbicgOiAnVnVlVGFibGVzX19jaGlsZC1yb3ctdG9nZ2xlci0tY2xvc2VkJztcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbnZhciBvYmplY3RfZmlsbGVkX2tleXNfY291bnQgPSByZXF1aXJlKCcuLi9oZWxwZXJzL29iamVjdC1maWxsZWQta2V5cy1jb3VudCcpO1xuXG52YXIgaXNfdmFsaWRfbW9tZW50X29iamVjdCA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvaXMtdmFsaWQtbW9tZW50LW9iamVjdCcpO1xuXG52YXIgZmlsdGVyQnlDdXN0b21GaWx0ZXJzID0gcmVxdWlyZSgnLi4vZmlsdGVycy9jdXN0b20tZmlsdGVycycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChkYXRhLCBlKSB7XG4gIGlmIChlKSB7XG4gICAgdmFyIF9xdWVyeSA9IHRoaXMucXVlcnk7XG4gICAgdGhpcy5zZXRQYWdlKDEsIHRydWUpO1xuICAgIHZhciBuYW1lID0gdGhpcy5nZXROYW1lKGUudGFyZ2V0Lm5hbWUpO1xuICAgIHZhciB2YWx1ZSA9IF90eXBlb2YoZS50YXJnZXQudmFsdWUpID09PSAnb2JqZWN0JyA/IGUudGFyZ2V0LnZhbHVlIDogJycgKyBlLnRhcmdldC52YWx1ZTtcblxuICAgIGlmIChuYW1lKSB7XG4gICAgICBfcXVlcnlbbmFtZV0gPSB2YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgX3F1ZXJ5ID0gdmFsdWU7XG4gICAgfVxuXG4gICAgdGhpcy52dWV4ID8gdGhpcy5jb21taXQoJ1NFVF9GSUxURVInLCBfcXVlcnkpIDogdGhpcy5xdWVyeSA9IF9xdWVyeTtcbiAgICB0aGlzLnVwZGF0ZVN0YXRlKCdxdWVyeScsIF9xdWVyeSk7XG5cbiAgICBpZiAobmFtZSkge1xuICAgICAgdGhpcy5kaXNwYXRjaCgnZmlsdGVyJywge1xuICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICB2YWx1ZTogdmFsdWVcbiAgICAgIH0pO1xuICAgICAgdGhpcy5kaXNwYXRjaChcImZpbHRlcjo6XCIuY29uY2F0KG5hbWUpLCB2YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZGlzcGF0Y2goJ2ZpbHRlcicsIHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICB2YXIgcXVlcnkgPSB0aGlzLnF1ZXJ5O1xuICB2YXIgdG90YWxRdWVyaWVzID0gIXF1ZXJ5ID8gMCA6IDE7XG4gIGlmICghdGhpcy5vcHRzKSByZXR1cm4gZGF0YTtcblxuICBpZiAodGhpcy5vcHRzLmZpbHRlckJ5Q29sdW1uKSB7XG4gICAgdG90YWxRdWVyaWVzID0gb2JqZWN0X2ZpbGxlZF9rZXlzX2NvdW50KHF1ZXJ5KTtcbiAgfVxuXG4gIHZhciB2YWx1ZTtcbiAgdmFyIGZvdW5kO1xuICB2YXIgY3VycmVudFF1ZXJ5O1xuICB2YXIgZGF0ZUZvcm1hdDtcbiAgdmFyIGZpbHRlckJ5RGF0ZTtcbiAgdmFyIGlzTGlzdEZpbHRlcjtcbiAgdmFyIGRhdGEgPSBmaWx0ZXJCeUN1c3RvbUZpbHRlcnMoZGF0YSwgdGhpcy5vcHRzLmN1c3RvbUZpbHRlcnMsIHRoaXMuY3VzdG9tUXVlcmllcyk7XG4gIGlmICghdG90YWxRdWVyaWVzKSByZXR1cm4gZGF0YTtcbiAgcmV0dXJuIGRhdGEuZmlsdGVyKGZ1bmN0aW9uIChyb3csIGluZGV4KSB7XG4gICAgZm91bmQgPSAwO1xuICAgIHRoaXMuZmlsdGVyYWJsZUNvbHVtbnMuZm9yRWFjaChmdW5jdGlvbiAoY29sdW1uKSB7XG4gICAgICBmaWx0ZXJCeURhdGUgPSB0aGlzLm9wdHMuZGF0ZUNvbHVtbnMuaW5kZXhPZihjb2x1bW4pID4gLTEgJiYgdGhpcy5vcHRzLmZpbHRlckJ5Q29sdW1uO1xuICAgICAgaXNMaXN0RmlsdGVyID0gdGhpcy5pc0xpc3RGaWx0ZXIoY29sdW1uKSAmJiB0aGlzLm9wdHMuZmlsdGVyQnlDb2x1bW47XG4gICAgICBkYXRlRm9ybWF0ID0gdGhpcy5kYXRlRm9ybWF0KGNvbHVtbik7XG4gICAgICB2YWx1ZSA9IHRoaXMuX2dldFZhbHVlKHJvdywgY29sdW1uKTtcblxuICAgICAgaWYgKGlzX3ZhbGlkX21vbWVudF9vYmplY3QodmFsdWUpICYmICFmaWx0ZXJCeURhdGUpIHtcbiAgICAgICAgdmFsdWUgPSB2YWx1ZS5mb3JtYXQoZGF0ZUZvcm1hdCk7XG4gICAgICB9XG5cbiAgICAgIGN1cnJlbnRRdWVyeSA9IHRoaXMub3B0cy5maWx0ZXJCeUNvbHVtbiA/IHF1ZXJ5W2NvbHVtbl0gOiBxdWVyeTtcbiAgICAgIGN1cnJlbnRRdWVyeSA9IHNldEN1cnJlbnRRdWVyeShjdXJyZW50UXVlcnkpO1xuXG4gICAgICBpZiAoY3VycmVudFF1ZXJ5KSB7XG4gICAgICAgIGlmICh0aGlzLm9wdHMuZmlsdGVyQWxnb3JpdGhtW2NvbHVtbl0pIHtcbiAgICAgICAgICBpZiAodGhpcy5vcHRzLmZpbHRlckFsZ29yaXRobVtjb2x1bW5dKHJvdywgdGhpcy5vcHRzLmZpbHRlckJ5Q29sdW1uID8gcXVlcnlbY29sdW1uXSA6IHF1ZXJ5KSkgZm91bmQrKztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoZm91bmRNYXRjaChjdXJyZW50UXVlcnksIHZhbHVlLCBpc0xpc3RGaWx0ZXIpKSBmb3VuZCsrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfS5iaW5kKHRoaXMpKTtcbiAgICByZXR1cm4gZm91bmQgPj0gdG90YWxRdWVyaWVzO1xuICB9LmJpbmQodGhpcykpO1xufTtcblxuZnVuY3Rpb24gc2V0Q3VycmVudFF1ZXJ5KHF1ZXJ5KSB7XG4gIGlmICghcXVlcnkpIHJldHVybiAnJztcbiAgaWYgKHR5cGVvZiBxdWVyeSA9PSAnc3RyaW5nJykgcmV0dXJuIHF1ZXJ5LnRvTG93ZXJDYXNlKCk7IC8vIERhdGUgUmFuZ2VcblxuICByZXR1cm4gcXVlcnk7XG59XG5cbmZ1bmN0aW9uIGZvdW5kTWF0Y2gocXVlcnksIHZhbHVlLCBpc0xpc3RGaWx0ZXIpIHtcbiAgaWYgKFsnc3RyaW5nJywgJ251bWJlcicsICdib29sZWFuJ10uaW5kZXhPZihfdHlwZW9mKHZhbHVlKSkgPiAtMSkge1xuICAgIHZhbHVlID0gU3RyaW5nKHZhbHVlKS50b0xvd2VyQ2FzZSgpO1xuICB9IC8vIExpc3QgRmlsdGVyXG5cblxuICBpZiAoaXNMaXN0RmlsdGVyKSB7XG4gICAgcmV0dXJuIHZhbHVlID09IHF1ZXJ5O1xuICB9IC8vVGV4dCBGaWx0ZXJcblxuXG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHZhbHVlLmluZGV4T2YocXVlcnkpID4gLTE7XG4gIH0gLy8gRGF0ZSByYW5nZVxuXG5cbiAgaWYgKGlzX3ZhbGlkX21vbWVudF9vYmplY3QodmFsdWUpKSB7XG4gICAgdmFyIHN0YXJ0ID0gbW9tZW50KHF1ZXJ5LnN0YXJ0LCAnWVlZWS1NTS1ERCBISDptbTpzcycpO1xuICAgIHZhciBlbmQgPSBtb21lbnQocXVlcnkuZW5kLCAnWVlZWS1NTS1ERCBISDptbTpzcycpO1xuICAgIHJldHVybiB2YWx1ZSA+PSBzdGFydCAmJiB2YWx1ZSA8PSBlbmQ7XG4gIH1cblxuICBpZiAoX3R5cGVvZih2YWx1ZSkgPT09ICdvYmplY3QnKSB7XG4gICAgZm9yICh2YXIga2V5IGluIHZhbHVlKSB7XG4gICAgICBpZiAoZm91bmRNYXRjaChxdWVyeSwgdmFsdWVba2V5XSkpIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB2YWx1ZSA+PSBzdGFydCAmJiB2YWx1ZSA8PSBlbmQ7XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGNvbHVtbikge1xuICB2YXIgYyA9IHRoaXMub3B0cy5jb2x1bW5zQ2xhc3NlcztcbiAgcmV0dXJuIGMuaGFzT3duUHJvcGVydHkoY29sdW1uKSA/IGNbY29sdW1uXSA6ICcnO1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoY29sdW1uKSB7XG4gIHZhciB1c2VyTXVsdGlTb3J0ID0gT2JqZWN0LmtleXModGhpcy51c2VyTXVsdGlTb3J0aW5nKTtcbiAgaWYgKCF1c2VyTXVsdGlTb3J0Lmxlbmd0aCB8fCB0aGlzLm9yZGVyQnkuY29sdW1uID09PSBjb2x1bW4pIHJldHVybiB0aGlzLm9yZGVyQnkuY29sdW1uID09PSBjb2x1bW47XG4gIHJldHVybiAhIXRoaXMudXNlck11bHRpU29ydGluZ1t1c2VyTXVsdGlTb3J0WzBdXS5maWx0ZXIoZnVuY3Rpb24gKGNvbCkge1xuICAgIHJldHVybiBjb2wuY29sdW1uID09IGNvbHVtbjtcbiAgfSkubGVuZ3RoO1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoY29sdW1uKSB7XG4gIGlmICh0aGlzLm9wdHMuZGF0ZUZvcm1hdFBlckNvbHVtbi5oYXNPd25Qcm9wZXJ0eShjb2x1bW4pKSB7XG4gICAgcmV0dXJuIHRoaXMub3B0cy5kYXRlRm9ybWF0UGVyQ29sdW1uW2NvbHVtbl07XG4gIH1cblxuICByZXR1cm4gdGhpcy5vcHRzLmRhdGVGb3JtYXQ7XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChjb2x1bW4sIGFzY2VuZGluZykge1xuICB2YXIgbXVsdGlJbmRleCA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDogLTE7XG4gIHZhciBzb3J0ID0gdGhpcy5kZWZhdWx0U29ydDtcbiAgdmFyIG11bHRpU29ydCA9IHRoaXMudXNlck11bHRpU29ydGluZ1t0aGlzLmN1cnJlbnRseVNvcnRpbmcuY29sdW1uXSA/IHRoaXMudXNlck11bHRpU29ydGluZ1t0aGlzLmN1cnJlbnRseVNvcnRpbmcuY29sdW1uXSA6IHRoaXMub3B0cy5tdWx0aVNvcnRpbmdbdGhpcy5jdXJyZW50bHlTb3J0aW5nLmNvbHVtbl07XG4gIHZhciBhc2MgPSB0aGlzLmN1cnJlbnRseVNvcnRpbmcuYXNjZW5kaW5nO1xuICB2YXIgc2VsZiA9IHRoaXM7XG4gIHJldHVybiBmdW5jdGlvbiAoYSwgYikge1xuICAgIHZhciBhVmFsID0gc2VsZi5fZ2V0VmFsdWUoYSwgY29sdW1uKSB8fCAnJztcbiAgICB2YXIgYlZhbCA9IHNlbGYuX2dldFZhbHVlKGIsIGNvbHVtbikgfHwgJyc7XG4gICAgdmFyIGRpciA9IGFzY2VuZGluZyA/IDEgOiAtMTtcbiAgICB2YXIgc2Vjb25kYXJ5QXNjO1xuICAgIGlmICh0eXBlb2YgYVZhbCA9PT0gJ3N0cmluZycpIGFWYWwgPSBhVmFsLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKHR5cGVvZiBiVmFsID09PSAnc3RyaW5nJykgYlZhbCA9IGJWYWwudG9Mb3dlckNhc2UoKTtcblxuICAgIGlmIChhVmFsID09PSBiVmFsICYmIG11bHRpU29ydCAmJiBtdWx0aVNvcnRbbXVsdGlJbmRleCArIDFdKSB7XG4gICAgICB2YXIgc29ydERhdGEgPSBtdWx0aVNvcnRbbXVsdGlJbmRleCArIDFdO1xuXG4gICAgICBpZiAodHlwZW9mIHNvcnREYXRhLmFzY2VuZGluZyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgc2Vjb25kYXJ5QXNjID0gc29ydERhdGEuYXNjZW5kaW5nO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2Vjb25kYXJ5QXNjID0gc29ydERhdGEubWF0Y2hEaXIgPyBhc2MgOiAhYXNjO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gc29ydChzb3J0RGF0YS5jb2x1bW4sIHNlY29uZGFyeUFzYywgbXVsdGlJbmRleCArIDEpKGEsIGIpO1xuICAgIH1cblxuICAgIHJldHVybiBhVmFsID4gYlZhbCA/IGRpciA6IC1kaXI7XG4gIH07XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG52YXIgX2J1cyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4uL2J1c1wiKSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IFwiZGVmYXVsdFwiOiBvYmogfTsgfVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChldmVudCwgcGF5bG9hZCkge1xuICBpZiAodGhpcy52dWV4KSB7XG4gICAgaWYgKGV2ZW50LnNwbGl0KCc6OicpLmxlbmd0aCA+IDEpIHJldHVybjtcbiAgICB0aGlzLmNvbW1pdChldmVudC50b1VwcGVyQ2FzZSgpLnJlcGxhY2UoJy0nLCAnXycpLCBwYXlsb2FkKTtcbiAgfVxuXG4gIHRoaXMuJGVtaXQoZXZlbnQsIHBheWxvYWQpO1xuXG4gIF9idXNbXCJkZWZhdWx0XCJdLiRlbWl0KFwidnVlLXRhYmxlcy5cIi5jb25jYXQoZXZlbnQpLCBwYXlsb2FkKTtcblxuICBpZiAodGhpcy5uYW1lKSB7XG4gICAgX2J1c1tcImRlZmF1bHRcIl0uJGVtaXQoXCJ2dWUtdGFibGVzLlwiLmNvbmNhdCh0aGlzLm5hbWUsIFwiLlwiKS5jb25jYXQoZXZlbnQpLCBwYXlsb2FkKTtcbiAgfVxufTsiLCJcInVzZSBzdHJpY3RcIjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGV4dCwgcmVwbGFjZW1lbnRzKSB7XG4gIGlmICghdGhpcy5vcHRzLnRleHRzKSByZXR1cm4gJyc7XG4gIHZhciB0ZXh0ID0gdGhpcy5vcHRzLnRleHRzW3RleHRdO1xuICBpZiAocmVwbGFjZW1lbnRzKSBmb3IgKHZhciBrZXkgaW4gcmVwbGFjZW1lbnRzKSB7XG4gICAgLy8gY29uc29sZS5sb2coa2V5KVxuICAgIHRleHQgPSB0ZXh0LnJlcGxhY2UoJ3snICsga2V5ICsgJ30nLCByZXBsYWNlbWVudHNba2V5XSk7XG4gIH1cbiAgcmV0dXJuIHRleHQ7XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChjb2x1bW4pIHtcbiAgaWYgKCF0aGlzLm9wdHMuZmlsdGVyYWJsZSkgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gdHlwZW9mIHRoaXMub3B0cy5maWx0ZXJhYmxlID09ICdib29sZWFuJyAmJiB0aGlzLm9wdHMuZmlsdGVyYWJsZSB8fCB0aGlzLm9wdHMuZmlsdGVyYWJsZS5pbmRleE9mKGNvbHVtbikgPiAtMTtcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGgsIHJvdywgaW5kZXgpIHtcbiAgLy8gc2NvcGVkIHNsb3RcbiAgaWYgKHRoaXMuJHNjb3BlZFNsb3RzLmNoaWxkX3JvdykgcmV0dXJuIHRoaXMuJHNjb3BlZFNsb3RzLmNoaWxkX3Jvdyh7XG4gICAgcm93OiByb3csXG4gICAgaW5kZXg6IGluZGV4XG4gIH0pO1xuICB2YXIgY2hpbGRSb3cgPSB0aGlzLm9wdHMuY2hpbGRSb3c7IC8vIGZ1bmN0aW9uXG5cbiAgaWYgKHR5cGVvZiBjaGlsZFJvdyA9PT0gJ2Z1bmN0aW9uJykgcmV0dXJuIGNoaWxkUm93LmFwcGx5KHRoaXMsIFtoLCByb3ddKTsgLy8gY29tcG9uZW50XG5cbiAgcmV0dXJuIGgoY2hpbGRSb3csIHtcbiAgICBhdHRyczoge1xuICAgICAgZGF0YTogcm93XG4gICAgfVxuICB9KTtcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGNvbHVtbikge1xuICByZXR1cm4gJ3ZmX18nICsgY29sdW1uLnNwbGl0KCcuJykuam9pbignQEBAJyk7XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG52YXIgbWVyZ2UgPSByZXF1aXJlKCdtZXJnZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChwcm9taXNlT25seSkge1xuICB2YXIgX2RhdGE7XG5cbiAgdmFyIGFkZGl0aW9uYWxEYXRhID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcbiAgdmFyIGVtaXRMb2FkaW5nID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiB0cnVlO1xuICB2YXIga2V5cyA9IHRoaXMub3B0cy5yZXF1ZXN0S2V5cztcbiAgdmFyIGRhdGEgPSAoX2RhdGEgPSB7fSwgX2RlZmluZVByb3BlcnR5KF9kYXRhLCBrZXlzLnF1ZXJ5LCB0aGlzLmZpbHRlcmVkUXVlcnkpLCBfZGVmaW5lUHJvcGVydHkoX2RhdGEsIGtleXMubGltaXQsIHRoaXMubGltaXQpLCBfZGVmaW5lUHJvcGVydHkoX2RhdGEsIGtleXMuYXNjZW5kaW5nLCB0aGlzLm9yZGVyQnkuYXNjZW5kaW5nID8gMSA6IDApLCBfZGVmaW5lUHJvcGVydHkoX2RhdGEsIGtleXMucGFnZSwgdGhpcy5wYWdlKSwgX2RlZmluZVByb3BlcnR5KF9kYXRhLCBrZXlzLmJ5Q29sdW1uLCB0aGlzLm9wdHMuZmlsdGVyQnlDb2x1bW4gPyAxIDogMCksIF9kYXRhKTtcbiAgaWYgKHRoaXMub3JkZXJCeS5oYXNPd25Qcm9wZXJ0eSgnY29sdW1uJykgJiYgdGhpcy5vcmRlckJ5LmNvbHVtbikgZGF0YVtrZXlzLm9yZGVyQnldID0gdGhpcy5vcmRlckJ5LmNvbHVtbjtcbiAgZGF0YSA9IG1lcmdlKGRhdGEsIHRoaXMub3B0cy5wYXJhbXMsIHRoaXMuY3VzdG9tUXVlcmllcywgYWRkaXRpb25hbERhdGEpO1xuXG4gIGlmICh0aGlzLmhhc011bHRpU29ydCAmJiB0aGlzLm9yZGVyQnkuY29sdW1uICYmIHRoaXMudXNlck11bHRpU29ydGluZ1t0aGlzLm9yZGVyQnkuY29sdW1uXSkge1xuICAgIGRhdGEubXVsdGlTb3J0ID0gdGhpcy51c2VyTXVsdGlTb3J0aW5nW3RoaXMub3JkZXJCeS5jb2x1bW5dO1xuICB9XG5cbiAgZGF0YSA9IHRoaXMub3B0cy5yZXF1ZXN0QWRhcHRlcihkYXRhKTtcblxuICBpZiAoZW1pdExvYWRpbmcpIHtcbiAgICB0aGlzLmRpc3BhdGNoKCdsb2FkaW5nJywgZGF0YSk7XG4gIH1cblxuICB2YXIgcHJvbWlzZSA9IHRoaXMuc2VuZFJlcXVlc3QoZGF0YSk7XG4gIGlmIChwcm9taXNlT25seSkgcmV0dXJuIHByb21pc2U7XG4gIHJldHVybiBwcm9taXNlLnRoZW4oZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG4gICAgaWYgKHR5cGVvZiByZXNwb25zZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHJldHVybiB0aGlzLnNldERhdGEocmVzcG9uc2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9LmJpbmQodGhpcykpO1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgaWYgKHRoaXMuJHNjb3BlZFNsb3RzICYmIHRoaXMuJHNjb3BlZFNsb3RzWydfX2dyb3VwX21ldGEnXSkge1xuICAgIHZhciBkYXRhID0gdGhpcy5vcHRzLmdyb3VwTWV0YS5maW5kKGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgIHJldHVybiB2YWwudmFsdWUgPT09IHZhbHVlO1xuICAgIH0pO1xuICAgIGlmICghZGF0YSkgcmV0dXJuICcnO1xuICAgIHJldHVybiB0aGlzLiRzY29wZWRTbG90c1snX19ncm91cF9tZXRhJ10oZGF0YSk7XG4gIH1cblxuICByZXR1cm4gJyc7XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh2YWx1ZSwgaCkge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJykgcmV0dXJuICcnO1xuICB2YXIgZGVyaXZlZEhlYWRpbmdUb29sdGlwID0gJyc7XG4gIGlmICghdGhpcy5vcHRzLmhlYWRpbmdzVG9vbHRpcHMuaGFzT3duUHJvcGVydHkodmFsdWUpKSByZXR1cm4gZGVyaXZlZEhlYWRpbmdUb29sdGlwO1xuXG4gIGlmICh0eXBlb2YgdGhpcy5vcHRzLmhlYWRpbmdzVG9vbHRpcHNbdmFsdWVdID09PSAnZnVuY3Rpb24nKSB7XG4gICAgaWYgKGgpIHJldHVybiB0aGlzLm9wdHMuaGVhZGluZ3NUb29sdGlwc1t2YWx1ZV0uY2FsbCh0aGlzLiRwYXJlbnQsIGgpO1xuICAgIHJldHVybiBkZXJpdmVkSGVhZGluZ1Rvb2x0aXA7XG4gIH1cblxuICByZXR1cm4gdGhpcy5vcHRzLmhlYWRpbmdzVG9vbHRpcHNbdmFsdWVdO1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxudmFyIF91Y2ZpcnN0ID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi4vaGVscGVycy91Y2ZpcnN0XCIpKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgXCJkZWZhdWx0XCI6IG9iaiB9OyB9XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHZhbHVlLCBoKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09ICdzdHJpbmcnKSByZXR1cm4gJyc7XG5cbiAgaWYgKHR5cGVvZiB0aGlzLiRzbG90c1tcImhfX1wiLmNvbmNhdCh2YWx1ZSldICE9PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiB0aGlzLiRzbG90c1tcImhfX1wiLmNvbmNhdCh2YWx1ZSldO1xuICB9XG5cbiAgdmFyIGRlcml2ZWRIZWFkaW5nID0gKDAsIF91Y2ZpcnN0W1wiZGVmYXVsdFwiXSkodmFsdWUuc3BsaXQoXCJfXCIpLmpvaW4oXCIgXCIpKTtcbiAgaWYgKCF0aGlzLm9wdHMuaGVhZGluZ3MuaGFzT3duUHJvcGVydHkodmFsdWUpKSByZXR1cm4gZGVyaXZlZEhlYWRpbmc7XG5cbiAgaWYgKHR5cGVvZiB0aGlzLm9wdHMuaGVhZGluZ3NbdmFsdWVdID09PSAnZnVuY3Rpb24nKSB7XG4gICAgaWYgKGgpIHJldHVybiB0aGlzLm9wdHMuaGVhZGluZ3NbdmFsdWVdLmNhbGwodGhpcy4kcGFyZW50LCBoKTtcbiAgICByZXR1cm4gZGVyaXZlZEhlYWRpbmc7XG4gIH1cblxuICByZXR1cm4gdGhpcy5vcHRzLmhlYWRpbmdzW3ZhbHVlXTtcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGNvbHVtbikge1xuICBpZiAodHlwZW9mIHRoaXMub3B0cy5pbml0RmlsdGVyc1tjb2x1bW5dICE9PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiB0aGlzLm9wdHMuaW5pdEZpbHRlcnNbY29sdW1uXTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgdGhpcy5xdWVyeVtjb2x1bW5dICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnF1ZXJ5W2NvbHVtbl0uc3RhcnQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc3RhcnQ6IG1vbWVudCh0aGlzLnF1ZXJ5W2NvbHVtbl0uc3RhcnQsICdZWVlZLU1NLUREIEhIOm1tOnNzJyksXG4gICAgICBlbmQ6IG1vbWVudCh0aGlzLnF1ZXJ5W2NvbHVtbl0uZW5kLCAnWVlZWS1NTS1ERCBISDptbTpzcycpXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgaWYgKCFuYW1lKSByZXR1cm4gbmFtZTtcbiAgbmFtZSA9IG5hbWUuc3BsaXQoJ19fJyk7XG4gIG5hbWUuc2hpZnQoKTtcbiAgcmV0dXJuIG5hbWUuam9pbignX18nKS5zcGxpdCgnQEBAJykuam9pbignLicpO1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgdmFyIHJvd3MgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IG51bGw7XG5cbiAgaWYgKCF0aGlzLm9wdHMuY2hpbGRSb3cgfHwgdHlwZW9mIHRoaXMub3B0cy5jaGlsZFJvdyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyBFcnJvcigndnVlLXRhYmxlcy0yOiBDaGlsZCByb3cgdW5kZWZpbmVkIG9yIG5vdCBhIGNvbXBvbmVudCcpO1xuICB9XG5cbiAgdmFyIFJvd3MgPSByb3dzID8gdGhpcy5vcGVuQ2hpbGRSb3dzLmZpbHRlcihmdW5jdGlvbiAocm93KSB7XG4gICAgcmV0dXJuIHJvd3MuaW5jbHVkZXMocm93KTtcbiAgfSkgOiB0aGlzLm9wZW5DaGlsZFJvd3M7XG4gIGlmICghUm93cy5sZW5ndGgpIHJldHVybiBbXTtcbiAgdmFyIGNvbXBvbmVudHMgPSB0aGlzLiRjaGlsZHJlbi5maWx0ZXIoZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgcmV0dXJuIGNoaWxkLiRvcHRpb25zLm5hbWUgPT09ICdDaGlsZFJvdycgJiYgUm93cy5pbmNsdWRlcyhjaGlsZC5kYXRhW190aGlzLm9wdHMudW5pcXVlS2V5XSk7XG4gIH0pO1xuICByZXR1cm4gY29tcG9uZW50cztcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG4gIGlmICh0eXBlb2YgYXhpb3MgIT09ICd1bmRlZmluZWQnKSByZXR1cm4gcmVzcG9uc2UuZGF0YTtcbiAgcmV0dXJuIHJlc3BvbnNlO1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoY29sdW1uKSB7XG4gIHZhciBhc2NlbmRpbmcgPSB0aGlzLm9yZGVyQnkuYXNjZW5kaW5nO1xuICB0aGlzLmN1cnJlbnRseVNvcnRpbmcgPSB7XG4gICAgY29sdW1uOiBjb2x1bW4sXG4gICAgYXNjZW5kaW5nOiBhc2NlbmRpbmdcbiAgfTtcbiAgaWYgKHR5cGVvZiB0aGlzLm9wdHMuY3VzdG9tU29ydGluZ1tjb2x1bW5dID09ICd1bmRlZmluZWQnKSByZXR1cm4gdGhpcy5kZWZhdWx0U29ydChjb2x1bW4sIGFzY2VuZGluZyk7XG4gIHJldHVybiB0aGlzLm9wdHMuY3VzdG9tU29ydGluZ1tjb2x1bW5dKGFzY2VuZGluZyk7XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChyb3csIGNvbHVtbikge1xuICBpZiAoY29sdW1uLmluZGV4T2YoJy4nKSA9PT0gLTEpIHJldHVybiByb3dbY29sdW1uXTtcbiAgdmFyIHAgPSBjb2x1bW4uc3BsaXQoJy4nKTtcbiAgdmFyIHZhbHVlID0gcm93W3BbMF1dO1xuICBpZiAoIXZhbHVlKSByZXR1cm4gJyc7XG5cbiAgZm9yICh2YXIgaSA9IDE7IGkgPCBwLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFsdWUgPSB2YWx1ZVtwW2ldXTsgLy8gSWYgdGhlIG5lc3RlZCBzdHJ1Y3R1cmUgZG9lc24ndCBleGlzdCByZXR1cm4gYW4gZW1wdHkgc3RyaW5nXG5cbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAndW5kZWZpbmVkJykgcmV0dXJuICcnO1xuICB9XG5cbiAgcmV0dXJuIHZhbHVlO1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxuZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxudmFyIGludGVyc2VjdGlvbiA9IHJlcXVpcmUoJ2FycmF5LWludGVyc2VjdCcpW1wiZGVmYXVsdFwiXTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBvcHRzID0gdGhpcy5vcHRzO1xuICByZXR1cm4gb3B0cy5kYXRlQ29sdW1ucy5sZW5ndGggJiYgb3B0cy5maWx0ZXJCeUNvbHVtbiAmJiAodHlwZW9mIG9wdHMuZmlsdGVyYWJsZSA9PSAnYm9vbGVhbicgJiYgb3B0cy5maWx0ZXJhYmxlIHx8IF90eXBlb2Yob3B0cy5maWx0ZXJhYmxlKSA9PSAnb2JqZWN0JyAmJiBpbnRlcnNlY3Rpb24ob3B0cy5maWx0ZXJhYmxlLCBvcHRzLmRhdGVDb2x1bW5zKS5sZW5ndGgpO1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBjdXN0b21RdWVyaWVzID0ge307XG4gIHZhciBpbml0ID0gdGhpcy5vcHRzLmluaXRGaWx0ZXJzO1xuICB2YXIga2V5O1xuICB0aGlzLm9wdHMuY3VzdG9tRmlsdGVycy5mb3JFYWNoKGZ1bmN0aW9uIChmaWx0ZXIpIHtcbiAgICBrZXkgPSB0aGlzLnNvdXJjZSA9PSAnY2xpZW50JyA/IGZpbHRlci5uYW1lIDogZmlsdGVyO1xuICAgIGN1c3RvbVF1ZXJpZXNba2V5XSA9IGluaXQuaGFzT3duUHJvcGVydHkoa2V5KSA/IGluaXRba2V5XSA6ICcnO1xuICB9LmJpbmQodGhpcykpO1xuICByZXR1cm4gY3VzdG9tUXVlcmllcztcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBtZXJnZSA9IHJlcXVpcmUoJ21lcmdlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICBpZiAodHlwZW9mICQgPT09ICd1bmRlZmluZWQnIHx8IHR5cGVvZiAkKHRoaXMuJGVsKS5kYXRlcmFuZ2VwaWNrZXIgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgY29uc29sZS5lcnJvcignRGF0ZSBmaWx0ZXJzIHJlcXVpcmUganF1ZXJ5IGFuZCBkYXRlcmFuZ2VwaWNrZXInKTtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgZWw7XG4gIHZhciB0aGF0ID0gdGhpcztcbiAgdmFyIHF1ZXJ5ID0gdGhpcy52dWV4ID8gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLnF1ZXJ5KSkgOiB0aGlzLnF1ZXJ5O1xuICB2YXIgY29sdW1uT3B0aW9ucztcbiAgdmFyIGRwT3B0aW9ucztcblxuICB2YXIgc2VhcmNoID0gZnVuY3Rpb24gc2VhcmNoKHF1ZXJ5LCBlKSB7XG4gICAgcmV0dXJuIHRoYXQuc291cmNlID09ICdjbGllbnQnID8gdGhhdC5zZWFyY2godGhhdC5kYXRhLCBlKSA6IHRoYXQuc2VydmVyU2VhcmNoKHF1ZXJ5LCBlKTtcbiAgfTtcblxuICB2YXIgZGF0ZXBpY2tlck9wdGlvbnMgPSBtZXJnZS5yZWN1cnNpdmUodGhpcy5vcHRzLmRhdGVwaWNrZXJPcHRpb25zLCB7XG4gICAgYXV0b1VwZGF0ZUlucHV0OiBmYWxzZSxcbiAgICBzaW5nbGVEYXRlUGlja2VyOiBmYWxzZVxuICB9KTtcbiAgdGhhdC5kYXRlcGlja2VyQ29sdW1ucy5mb3JFYWNoKGZ1bmN0aW9uIChjb2x1bW4pIHtcbiAgICB2YXIgcmFuZ2UgPSB0aGF0Ll9nZXRJbml0aWFsRGF0ZVJhbmdlKGNvbHVtbik7XG5cbiAgICBpZiAocmFuZ2UpIHtcbiAgICAgIHRoYXQuX3NldERhdGVwaWNrZXJUZXh0KGNvbHVtbiwgcmFuZ2Uuc3RhcnQsIHJhbmdlLmVuZCk7XG5cbiAgICAgIHJhbmdlID0ge1xuICAgICAgICBzdGFydERhdGU6IHJhbmdlLnN0YXJ0LFxuICAgICAgICBlbmREYXRlOiByYW5nZS5lbmRcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJhbmdlID0ge307XG4gICAgfVxuXG4gICAgZWwgPSAkKHRoYXQuJGVsKS5maW5kKFwiI1Z1ZVRhYmxlc19fXCIgKyAkLmVzY2FwZVNlbGVjdG9yKGNvbHVtbikgKyBcIi1maWx0ZXJcIik7XG4gICAgY29sdW1uT3B0aW9ucyA9IHR5cGVvZiB0aGF0Lm9wdHMuZGF0ZXBpY2tlclBlckNvbHVtbk9wdGlvbnNbY29sdW1uXSAhPT0gJ3VuZGVmaW5lZCcgPyB0aGF0Lm9wdHMuZGF0ZXBpY2tlclBlckNvbHVtbk9wdGlvbnNbY29sdW1uXSA6IHt9O1xuICAgIGNvbHVtbk9wdGlvbnMgPSBtZXJnZS5yZWN1cnNpdmUoY29sdW1uT3B0aW9ucywge1xuICAgICAgbG9jYWxlOiB7XG4gICAgICAgIGZvcm1hdDogdGhhdC5kYXRlRm9ybWF0KGNvbHVtbilcbiAgICAgIH1cbiAgICB9KTtcbiAgICBkcE9wdGlvbnMgPSBtZXJnZSh0cnVlLCBkYXRlcGlja2VyT3B0aW9ucyk7XG5cbiAgICBpZiAoY29sdW1uT3B0aW9ucy5yYW5nZXMgPT09IGZhbHNlKSB7XG4gICAgICBkcE9wdGlvbnMucmFuZ2VzID0ge307XG4gICAgfVxuXG4gICAgZWwuZGF0ZXJhbmdlcGlja2VyKG1lcmdlLnJlY3Vyc2l2ZShkcE9wdGlvbnMsIGNvbHVtbk9wdGlvbnMsIHJhbmdlKSk7XG4gICAgZWwub24oJ2FwcGx5LmRhdGVyYW5nZXBpY2tlcicsIGZ1bmN0aW9uIChldiwgcGlja2VyKSB7XG4gICAgICBxdWVyeVtjb2x1bW5dID0ge1xuICAgICAgICBzdGFydDogcGlja2VyLnN0YXJ0RGF0ZS5mb3JtYXQoJ1lZWVktTU0tREQgSEg6bW06c3MnKSxcbiAgICAgICAgZW5kOiBwaWNrZXIuZW5kRGF0ZS5mb3JtYXQoJ1lZWVktTU0tREQgSEg6bW06c3MnKVxuICAgICAgfTtcbiAgICAgIGlmICghdGhhdC52dWV4KSB0aGF0LnF1ZXJ5ID0gcXVlcnk7XG5cbiAgICAgIHRoYXQuX3NldERhdGVwaWNrZXJUZXh0KGNvbHVtbiwgcGlja2VyLnN0YXJ0RGF0ZSwgcGlja2VyLmVuZERhdGUpO1xuXG4gICAgICB0aGF0LnVwZGF0ZVN0YXRlKCdxdWVyeScsIHF1ZXJ5KTtcbiAgICAgIHNlYXJjaChxdWVyeSwge1xuICAgICAgICB0YXJnZXQ6IHtcbiAgICAgICAgICBuYW1lOiB0aGF0Ll9nZXRDb2x1bW5OYW1lKGNvbHVtbiksXG4gICAgICAgICAgdmFsdWU6IHF1ZXJ5W2NvbHVtbl1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gICAgZWwub24oJ2NhbmNlbC5kYXRlcmFuZ2VwaWNrZXInLCBmdW5jdGlvbiAoZXYsIHBpY2tlcikge1xuICAgICAgcXVlcnlbY29sdW1uXSA9ICcnO1xuICAgICAgaWYgKCF0aGF0LnZ1ZXgpIHRoYXQucXVlcnkgPSBxdWVyeTtcbiAgICAgIHBpY2tlci5zZXRTdGFydERhdGUobW9tZW50KCkpO1xuICAgICAgcGlja2VyLnNldEVuZERhdGUobW9tZW50KCkpO1xuICAgICAgdGhhdC51cGRhdGVTdGF0ZSgncXVlcnknLCBxdWVyeSk7XG4gICAgICAkKHRoaXMpLmh0bWwoXCI8c3BhbiBjbGFzcz0nVnVlVGFibGVzX19maWx0ZXItcGxhY2Vob2xkZXInPlwiICsgdGhhdC5kaXNwbGF5KCdmaWx0ZXJCeScsIHtcbiAgICAgICAgY29sdW1uOiB0aGF0LmdldEhlYWRpbmcoY29sdW1uKVxuICAgICAgfSkgKyBcIjwvc3Bhbj5cIik7XG4gICAgICBzZWFyY2gocXVlcnksIHtcbiAgICAgICAgdGFyZ2V0OiB7XG4gICAgICAgICAgbmFtZTogdGhhdC5fZ2V0Q29sdW1uTmFtZShjb2x1bW4pLFxuICAgICAgICAgIHZhbHVlOiBxdWVyeVtjb2x1bW5dXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBtZXJnZSA9IHJlcXVpcmUoJ21lcmdlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGRlZmF1bHRzLCBnbG9iYWxPcHRpb25zLCBsb2NhbE9wdGlvbnMpIHtcbiAgaWYgKGdsb2JhbE9wdGlvbnMpIGRlZmF1bHRzID0gbWVyZ2UucmVjdXJzaXZlKGRlZmF1bHRzLCBnbG9iYWxPcHRpb25zKTtcbiAgbG9jYWxPcHRpb25zID0gbWVyZ2UucmVjdXJzaXZlKGRlZmF1bHRzLCBsb2NhbE9wdGlvbnMpO1xuICByZXR1cm4gbG9jYWxPcHRpb25zO1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gIGlmICghdGhpcy5vcHRzLm9yZGVyQnkpIHJldHVybjtcbiAgdGhpcy5vcmRlckJ5LmNvbHVtbiA9IHRoaXMub3B0cy5vcmRlckJ5LmNvbHVtbjtcbiAgdGhpcy5vcmRlckJ5LmFzY2VuZGluZyA9IHRoaXMub3B0cy5vcmRlckJ5Lmhhc093blByb3BlcnR5KCdhc2NlbmRpbmcnKSA/IHRoaXMub3B0cy5vcmRlckJ5LmFzY2VuZGluZyA6IHRydWU7XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5wYWdlID0gMTtcblxuICBpZiAoIXRoaXMub3B0cy5wYWdpbmF0aW9uLmRyb3Bkb3duKSB7XG4gICAgdGhpcy4kcmVmcy5wYWdpbmF0aW9uLnNldFBhZ2UoMSk7XG4gIH1cbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICB2YXIgaW5pdCA9IHRoaXMub3B0cy5pbml0RmlsdGVycztcbiAgaWYgKCF0aGlzLm9wdHMuZmlsdGVyQnlDb2x1bW4pIHJldHVybiBpbml0Lmhhc093blByb3BlcnR5KCdHRU5FUklDJykgPyBpbml0LkdFTkVSSUMgOiAnJztcbiAgdmFyIHF1ZXJ5ID0ge307XG4gIHZhciBmaWx0ZXJhYmxlID0gdGhpcy5vcHRzLmZpbHRlcmFibGUgJiYgX3R5cGVvZih0aGlzLm9wdHMuZmlsdGVyYWJsZSkgPT0gJ29iamVjdCcgPyB0aGlzLm9wdHMuZmlsdGVyYWJsZSA6IHRoaXMuY29sdW1ucztcbiAgZmlsdGVyYWJsZS5mb3JFYWNoKGZ1bmN0aW9uIChjb2x1bW4pIHtcbiAgICBxdWVyeVtjb2x1bW5dID0gZ2V0SW5pdGlhbFZhbHVlKGluaXQsIGNvbHVtbik7XG4gIH0uYmluZCh0aGlzKSk7XG4gIHJldHVybiBxdWVyeTtcbn07XG5cbmZ1bmN0aW9uIGdldEluaXRpYWxWYWx1ZShpbml0LCBjb2x1bW4pIHtcbiAgaWYgKCFpbml0Lmhhc093blByb3BlcnR5KGNvbHVtbikpIHJldHVybiAnJztcbiAgaWYgKHR5cGVvZiBpbml0W2NvbHVtbl0uc3RhcnQgPT0gJ3VuZGVmaW5lZCcpIHJldHVybiBpbml0W2NvbHVtbl07XG4gIHJldHVybiB7XG4gICAgc3RhcnQ6IGluaXRbY29sdW1uXS5zdGFydC5mb3JtYXQoJ1lZWVktTU0tREQgSEg6bW06c3MnKSxcbiAgICBlbmQ6IGluaXRbY29sdW1uXS5lbmQuZm9ybWF0KCdZWVlZLU1NLUREIEhIOm1tOnNzJylcbiAgfTtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBzdGF0ZSA9IHtcbiAgICBwYWdlOiAxLFxuICAgIHF1ZXJ5OiB0aGlzLnF1ZXJ5LFxuICAgIG9yZGVyQnk6IHRoaXMub3JkZXJCeSxcbiAgICBwZXJQYWdlOiB0aGlzLm9wdHMucGVyUGFnZSxcbiAgICBjdXN0b21RdWVyaWVzOiB0aGlzLmN1c3RvbVF1ZXJpZXNcbiAgfTtcbiAgdGhpcy5zdG9yYWdlLnNldEl0ZW0odGhpcy5zdGF0ZUtleSwgSlNPTi5zdHJpbmdpZnkoc3RhdGUpKTtcbiAgcmV0dXJuIHN0YXRlO1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoY29sdW1uKSB7XG4gIHJldHVybiAhdGhpcy5vcHRzLmRlc2NPcmRlckNvbHVtbnMuaW5jbHVkZXMoY29sdW1uKTtcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGNvbHVtbikge1xuICByZXR1cm4gdGhpcy5xdWVyeS5oYXNPd25Qcm9wZXJ0eShjb2x1bW4pICYmIHRoaXMub3B0cy5kYXRlQ29sdW1ucy5pbmRleE9mKGNvbHVtbikgPiAtMTtcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGNvbHVtbikge1xuICByZXR1cm4gdGhpcy5xdWVyeS5oYXNPd25Qcm9wZXJ0eShjb2x1bW4pICYmIHRoaXMub3B0cy5saXN0Q29sdW1ucy5oYXNPd25Qcm9wZXJ0eShjb2x1bW4pO1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoY29sdW1uKSB7XG4gIHJldHVybiB0aGlzLnF1ZXJ5Lmhhc093blByb3BlcnR5KGNvbHVtbikgJiYgdGhpcy5vcHRzLmRhdGVDb2x1bW5zLmluZGV4T2YoY29sdW1uKSA9PSAtMSAmJiAhdGhpcy5vcHRzLmxpc3RDb2x1bW5zLmhhc093blByb3BlcnR5KGNvbHVtbik7XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChwYWdlKSB7XG4gIGlmICh0aGlzLnZ1ZXgpIHJldHVybjtcbiAgdGhpcy5zZXRQYWdlKHBhZ2UpO1xuICB0aGlzLmRpc3BhdGNoKCdwYWdpbmF0aW9uJywgcGFnZSk7XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChjb2x1bW4pIHtcbiAgcmV0dXJuIHRoaXMudXNlckNvbHVtbnNEaXNwbGF5Lmxlbmd0aCA9PT0gMSAmJiB0aGlzLnVzZXJDb2x1bW5zRGlzcGxheVswXSA9PT0gY29sdW1uO1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoY29sTmFtZSwgZXYpIHtcbiAgaWYgKCF0aGlzLnNvcnRhYmxlKGNvbE5hbWUpKSByZXR1cm47XG5cbiAgaWYgKGV2ICYmIGV2LnNoaWZ0S2V5ICYmIHRoaXMub3JkZXJCeS5jb2x1bW4gJiYgdGhpcy5oYXNNdWx0aVNvcnQpIHtcbiAgICB0aGlzLnNldFVzZXJNdWx0aVNvcnQoY29sTmFtZSk7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy51c2VyTXVsdGlTb3J0aW5nID0ge307XG4gICAgdGhpcy5vcmRlckJ5LmFzY2VuZGluZyA9IGNvbE5hbWUgPT0gdGhpcy5vcmRlckJ5LmNvbHVtbiA/ICF0aGlzLm9yZGVyQnkuYXNjZW5kaW5nIDogdGhpcy5faW5pdGlhbE9yZGVyQXNjZW5kaW5nKGNvbE5hbWUpO1xuICAgIHRoaXMub3JkZXJCeS5jb2x1bW4gPSBjb2xOYW1lO1xuICAgIHRoaXMudXBkYXRlU3RhdGUoJ29yZGVyQnknLCB0aGlzLm9yZGVyQnkpO1xuICAgIHRoaXMuZGlzcGF0Y2goJ3NvcnRlZCcsIEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5vcmRlckJ5KSkpO1xuICB9XG5cbiAgaWYgKHRoaXMuc291cmNlID09ICdzZXJ2ZXInKSB7XG4gICAgdGhpcy5nZXREYXRhKCk7XG4gIH1cbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLnNlcnZlclNlYXJjaCgpO1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxudmFyIF9idXMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuLi9idXNcIikpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBcImRlZmF1bHRcIjogb2JqIH07IH1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgdmFyIGV2ZW50ID0gJ3Z1ZS10YWJsZXMnO1xuICBpZiAodGhpcy5uYW1lKSBldmVudCArPSAnLicgKyB0aGlzLm5hbWU7XG4gIHRoaXMub3B0cy5jdXN0b21GaWx0ZXJzLmZvckVhY2goZnVuY3Rpb24gKGZpbHRlcikge1xuICAgIF9idXNbXCJkZWZhdWx0XCJdLiRvZmYoXCJcIi5jb25jYXQoZXZlbnQsIFwiLmZpbHRlcjo6XCIpLmNvbmNhdChmaWx0ZXIubmFtZSkpO1xuXG4gICAgX2J1c1tcImRlZmF1bHRcIl0uJG9uKFwiXCIuY29uY2F0KGV2ZW50LCBcIi5maWx0ZXI6OlwiKS5jb25jYXQoZmlsdGVyLm5hbWUpLCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIF90aGlzLmN1c3RvbVF1ZXJpZXNbZmlsdGVyLm5hbWVdID0gdmFsdWU7XG5cbiAgICAgIF90aGlzLnVwZGF0ZVN0YXRlKCdjdXN0b21RdWVyaWVzJywgX3RoaXMuY3VzdG9tUXVlcmllcyk7XG4gICAgfSk7XG4gIH0pO1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxudmFyIF9idXMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuLi9idXNcIikpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBcImRlZmF1bHRcIjogb2JqIH07IH1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBldmVudCA9ICd2dWUtdGFibGVzJztcbiAgaWYgKHRoaXMubmFtZSkgZXZlbnQgKz0gJy4nICsgdGhpcy5uYW1lO1xuICB0aGlzLm9wdHMuY3VzdG9tRmlsdGVycy5mb3JFYWNoKGZ1bmN0aW9uIChmaWx0ZXIpIHtcbiAgICBfYnVzW1wiZGVmYXVsdFwiXS4kb2ZmKFwiXCIuY29uY2F0KGV2ZW50LCBcIi5maWx0ZXI6OlwiKS5jb25jYXQoZmlsdGVyKSk7XG5cbiAgICBfYnVzW1wiZGVmYXVsdFwiXS4kb24oXCJcIi5jb25jYXQoZXZlbnQsIFwiLmZpbHRlcjo6XCIpLmNvbmNhdChmaWx0ZXIpLCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIHRoaXMuY3VzdG9tUXVlcmllc1tmaWx0ZXJdID0gdmFsdWU7XG4gICAgICB0aGlzLnVwZGF0ZVN0YXRlKCdjdXN0b21RdWVyaWVzJywgdGhpcy5jdXN0b21RdWVyaWVzKTtcbiAgICAgIHRoaXMucmVmcmVzaCgpO1xuICAgIH0uYmluZCh0aGlzKSk7XG4gIH0uYmluZCh0aGlzKSk7XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChyb3csIGNvbHVtbiwgaW5kZXgsIGgpIHtcbiAgdmFyIHZhbHVlID0gdGhpcy5fZ2V0VmFsdWUocm93LCBjb2x1bW4pO1xuXG4gIGlmICh0aGlzLnRlbXBsYXRlc0tleXMuaW5kZXhPZihjb2x1bW4pID09IC0xKSB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3VuZGVmaW5lZCcgfHwgIXRoaXMub3B0cy5oaWdobGlnaHRNYXRjaGVzIHx8IHRoaXMuZmlsdGVyYWJsZUNvbHVtbnMuaW5kZXhPZihjb2x1bW4pID09PSAtMSkge1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmhpZ2hsaWdodE1hdGNoKHZhbHVlLCBjb2x1bW4sIGgpO1xuICB9XG5cbiAgdmFyIHRlbXBsYXRlID0gdGhpcy5vcHRzLnRlbXBsYXRlc1tjb2x1bW5dO1xuICB0ZW1wbGF0ZSA9IHR5cGVvZiB0ZW1wbGF0ZSA9PSAnZnVuY3Rpb24nID8gdGVtcGxhdGUuYXBwbHkodGhpcy4kcm9vdCwgW2gsIHJvdywgaW5kZXgsIGNvbHVtbl0pIDogaCh0ZW1wbGF0ZSwge1xuICAgIGF0dHJzOiB7XG4gICAgICBkYXRhOiByb3csXG4gICAgICBjb2x1bW46IGNvbHVtbixcbiAgICAgIGluZGV4OiBpbmRleFxuICAgIH1cbiAgfSk7XG4gIHJldHVybiB0ZW1wbGF0ZTtcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICBmb3IgKHZhciBrZXkgaW4gdGhpcy5xdWVyeSkge1xuICAgIHRoaXMucXVlcnlba2V5XSA9ICcnO1xuICB9XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChyb3csIGluZGV4LCBldmVudCkge1xuICB2YXIgZGF0YTtcbiAgdmFyIGlkID0gdGhpcy5vcHRzLnVuaXF1ZUtleTtcblxuICBpZiAodGhpcy5zb3VyY2UgPT0gJ2NsaWVudCcgJiYgdHlwZW9mIHJvd1tpZF0gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgZGF0YSA9IHRoaXMudGFibGVEYXRhLmZpbHRlcihmdW5jdGlvbiAocikge1xuICAgICAgcmV0dXJuIHJvd1tpZF0gPT09IHJbaWRdO1xuICAgIH0pWzBdO1xuICB9IGVsc2Uge1xuICAgIGRhdGEgPSByb3c7XG4gIH1cblxuICB0aGlzLmRpc3BhdGNoKCdyb3ctY2xpY2snLCB7XG4gICAgcm93OiBkYXRhLFxuICAgIGluZGV4OiBpbmRleCxcbiAgICBldmVudDogZXZlbnRcbiAgfSk7XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChkYXRhKSB7XG4gIGlmICh0eXBlb2YgdGhpcy5vcHRzLnJlcXVlc3RGdW5jdGlvbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiB0aGlzLm9wdHMucmVxdWVzdEZ1bmN0aW9uLmNhbGwodGhpcywgZGF0YSk7XG4gIH1cblxuICBpZiAodHlwZW9mIGF4aW9zICE9PSAndW5kZWZpbmVkJykgcmV0dXJuIGF4aW9zLmdldCh0aGlzLnVybCwge1xuICAgIHBhcmFtczogZGF0YVxuICB9KVtcImNhdGNoXCJdKGZ1bmN0aW9uIChlKSB7XG4gICAgdGhpcy5kaXNwYXRjaCgnZXJyb3InLCBlKTtcbiAgfS5iaW5kKHRoaXMpKTtcbiAgaWYgKHR5cGVvZiB0aGlzLiRodHRwICE9PSAndW5kZWZpbmVkJykgcmV0dXJuIHRoaXMuJGh0dHAuZ2V0KHRoaXMudXJsLCB7XG4gICAgcGFyYW1zOiBkYXRhXG4gIH0pLnRoZW4oZnVuY3Rpb24gKGRhdGEpIHtcbiAgICByZXR1cm4gZGF0YS5qc29uKCk7XG4gIH0uYmluZCh0aGlzKSwgZnVuY3Rpb24gKGUpIHtcbiAgICB0aGlzLmRpc3BhdGNoKCdlcnJvcicsIGUpO1xuICB9LmJpbmQodGhpcykpO1xuICBpZiAodHlwZW9mICQgIT0gJ3VuZGVmaW5lZCcpIHJldHVybiAkLmdldEpTT04odGhpcy51cmwsIGRhdGEpLmZhaWwoZnVuY3Rpb24gKGUpIHtcbiAgICB0aGlzLmRpc3BhdGNoKCdlcnJvcicsIGUpO1xuICB9LmJpbmQodGhpcykpO1xuICB0aHJvdyBcInZ1ZS10YWJsZXM6IE5vIHN1cHBvcnRlZCBhamF4IGxpYnJhcnkgd2FzIGZvdW5kLiAoalF1ZXJ5LCBheGlvcyBvciB2dWUtcmVzb3VyY2UpLiBUbyB1c2UgYSBkaWZmZXJlbnQgbGlicmFyeSB5b3UgY2FuIHdyaXRlIHlvdXIgb3duIHJlcXVlc3QgZnVuY3Rpb24gKHNlZSB0aGUgYHJlcXVlc3RGdW5jdGlvbmAgb3B0aW9uKVwiO1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZSwgZGF0ZUV2ZW50KSB7XG4gIC8vIHdlIG5lZWQgdG8gaGFuZGxlIHRoZSBzdG9yZSB0aGlzLnF1ZXJ5IHRvIG1ha2Ugc3VyZSB3ZSdyZSBub3QgbXV0YXRpbmcgb3V0c2lkZSBvZiBpdFxuICB2YXIgcXVlcnkgPSB0aGlzLnZ1ZXggPyBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMucXVlcnkpKSA6IHRoaXMucXVlcnk7IC8vIGluIGNhc2Ugd2UgcGFzcyBhbiBvYmplY3QgbWFudWFsbHkgKG1vc3RseSB1c2VkIGZvciBpbml0LWRhdGUtZmlsdGVycyBzaG91bGQgcmVmYWN0b3JcblxuICBpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsIC0xKSA9PSAnT2JqZWN0Jykge1xuICAgIHF1ZXJ5ID0gdGhpcy52dWV4ID8gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShlKSkgOiBlO1xuICAgIGlmICghdGhpcy52dWV4KSB0aGlzLnF1ZXJ5ID0gcXVlcnk7XG4gICAgdmFyIG5hbWUgPSBkYXRlRXZlbnQudGFyZ2V0Lm5hbWU7XG4gICAgdmFyIHZhbHVlID0gZGF0ZUV2ZW50LnRhcmdldC52YWx1ZTtcblxuICAgIGlmIChuYW1lKSB7XG4gICAgICB0aGlzLmRpc3BhdGNoKCdmaWx0ZXInLCB7XG4gICAgICAgIG5hbWU6IG5hbWUsXG4gICAgICAgIHZhbHVlOiB2YWx1ZVxuICAgICAgfSk7XG4gICAgICB0aGlzLmRpc3BhdGNoKFwiZmlsdGVyOjpcIi5jb25jYXQobmFtZSksIHZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kaXNwYXRjaCgnZmlsdGVyJywgdmFsdWUpO1xuICAgIH1cblxuICAgIHRoaXMudXBkYXRlU3RhdGUoJ3F1ZXJ5JywgcXVlcnkpO1xuICB9IGVsc2UgaWYgKGUpIHtcbiAgICB2YXIgX25hbWUgPSB0aGlzLmdldE5hbWUoZS50YXJnZXQubmFtZSk7XG5cbiAgICB2YXIgX3ZhbHVlID0gZS50YXJnZXQudmFsdWU7XG5cbiAgICBpZiAoX25hbWUpIHtcbiAgICAgIHF1ZXJ5W19uYW1lXSA9IF92YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcXVlcnkgPSBfdmFsdWU7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLnZ1ZXgpIHRoaXMucXVlcnkgPSBxdWVyeTtcblxuICAgIGlmIChfbmFtZSkge1xuICAgICAgdGhpcy5kaXNwYXRjaCgnZmlsdGVyJywge1xuICAgICAgICBuYW1lOiBfbmFtZSxcbiAgICAgICAgdmFsdWU6IF92YWx1ZVxuICAgICAgfSk7XG4gICAgICB0aGlzLmRpc3BhdGNoKFwiZmlsdGVyOjpcIi5jb25jYXQoX25hbWUpLCBfdmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRpc3BhdGNoKCdmaWx0ZXInLCBfdmFsdWUpO1xuICAgIH1cblxuICAgIHRoaXMudXBkYXRlU3RhdGUoJ3F1ZXJ5JywgcXVlcnkpO1xuICB9XG5cbiAgcmV0dXJuIHNlYXJjaCh0aGlzLCBxdWVyeSk7XG59O1xuXG5mdW5jdGlvbiBzZWFyY2godGhhdCwgcXVlcnkpIHtcbiAgaWYgKHRoYXQudnVleCkge1xuICAgIHRoYXQuY29tbWl0KCdTRVRfRklMVEVSJywgcXVlcnkpO1xuICB9IGVsc2Uge1xuICAgIHRoYXQuaW5pdFBhZ2luYXRpb24oKTtcblxuICAgIGlmICh0aGF0Lm9wdHMucGFnaW5hdGlvbi5kcm9wZG93bikge1xuICAgICAgdGhhdC5nZXREYXRhKCk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIG5vRGVib3VuY2UoZSwgbmFtZSwgb3B0cykge1xuICByZXR1cm4gIWUgfHwgbmFtZSAmJiAob3B0cy5kYXRlQ29sdW1ucy5pbmRleE9mKG5hbWUpID4gLTEgfHwgT2JqZWN0LmtleXMob3B0cy5saXN0Q29sdW1ucykuaW5kZXhPZihuYW1lKSA+IC0xKTtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgaWYgKHRoaXMub3B0cy5jb2x1bW5zRHJvcGRvd24pIHtcbiAgICB2YXIgc3RvcFByb3AgPSBmdW5jdGlvbiBzdG9wUHJvcChlKSB7XG4gICAgICByZXR1cm4gZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9O1xuXG4gICAgdmFyIGhhbmRsZXIgPSBmdW5jdGlvbiBoYW5kbGVyKCkge1xuICAgICAgaWYgKF90aGlzLmRpc3BsYXlDb2x1bW5zRHJvcGRvd24pIHtcbiAgICAgICAgX3RoaXMuZGlzcGxheUNvbHVtbnNEcm9wZG93biA9IGZhbHNlO1xuICAgICAgfVxuICAgIH07XG5cbiAgICB0aGlzLiRyZWZzLmNvbHVtbnNkcm9wZG93bi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHN0b3BQcm9wKTtcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGhhbmRsZXIpO1xuICAgIHRoaXMuJG9uY2UoJ2hvb2s6YmVmb3JlRGVzdHJveScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgaGFuZGxlcik7XG5cbiAgICAgIF90aGlzLiRyZWZzLmNvbHVtbnNkcm9wZG93bi5yZW1vdmVFdmVudExpc3RlbmVyKCdjbGljaycsIHN0b3BQcm9wKTtcbiAgICB9KTtcbiAgfVxufTsiLCJcInVzZSBzdHJpY3RcIjtcblxuZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAocmVzcG9uc2UpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLm9wdHMucmVzcG9uc2VBZGFwdGVyLmNhbGwodGhpcywgcmVzcG9uc2UpO1xuICB0aGlzLmRhdGEgPSB0aGlzLmFwcGx5RmlsdGVycyhkYXRhLmRhdGEpO1xuXG4gIGlmIChpc05hTihkYXRhLmNvdW50KSkge1xuICAgIGNvbnNvbGUuZXJyb3IoXCJ2dWUtdGFibGVzLTI6IGludmFsaWQgJ2NvdW50JyBwcm9wZXJ0eS4gRXhwZWN0ZWQgbnVtYmVyLCBnb3QgXCIuY29uY2F0KF90eXBlb2YoZGF0YS5jb3VudCkpKTtcbiAgICBjb25zb2xlLmVycm9yKCdjb3VudCBlcXVhbHMnLCBkYXRhLmNvdW50KTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoKTtcbiAgfVxuXG4gIHRoaXMuY291bnQgPSBwYXJzZUludChkYXRhLmNvdW50KTtcbiAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5kaXNwYXRjaCgnbG9hZGVkJywgcmVzcG9uc2UpO1xuICB9LmJpbmQodGhpcyksIDApO1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoY29sdW1uLCBzdGFydCwgZW5kKSB7XG4gIHZhciBkYXRlRm9ybWF0ID0gdGhpcy5kYXRlRm9ybWF0KGNvbHVtbik7XG4gIHZhciBlbCA9IHR5cGVvZiBjb2x1bW4gPT09ICdzdHJpbmcnID8gJCh0aGlzLiRlbCkuZmluZChcIiNWdWVUYWJsZXNfX1wiICsgJC5lc2NhcGVTZWxlY3Rvcihjb2x1bW4pICsgXCItZmlsdGVyXCIpIDogY29sdW1uO1xuICBlbC50ZXh0KHN0YXJ0LmZvcm1hdChkYXRlRm9ybWF0KSArIFwiIC0gXCIgKyBlbmQuZm9ybWF0KGRhdGVGb3JtYXQpKTtcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBtZXJnZSA9IHJlcXVpcmUoJ21lcmdlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGZpbHRlcikge1xuICBpZiAoIXRoaXMub3B0cy5maWx0ZXJhYmxlKSB7XG4gICAgY29uc29sZS53YXJuKFwidnVlLXRhYmxlcy0yOiBVbmFibGUgdG8gc2V0IGZpbHRlci4gRmlsdGVyaW5nIGlzIGRpc2FibGVkIChmaWx0ZXJhYmxlOiBmYWxzZSlcIik7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgO1xuXG4gIGlmICh0aGlzLm9wdHMuZmlsdGVyQnlDb2x1bW4gJiYgdHlwZW9mIGZpbHRlciA9PT0gJ3N0cmluZycpIHtcbiAgICBjb25zb2xlLndhcm4oXCJ2dWUtdGFibGVzLTI6IFVuYWJsZSB0byBzZXQgZmlsdGVyLiBGaWx0ZXIgdmFsdWUgbXVzdCBiZSBhbiBvYmplY3QgKGBmaWx0ZXJCeUNvbHVtbmAgaXMgc2V0IHRvIGB0cnVlYClcIik7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgO1xuXG4gIGlmICghdGhpcy5vcHRzLmZpbHRlckJ5Q29sdW1uICYmIHR5cGVvZiBmaWx0ZXIgIT09ICdzdHJpbmcnKSB7XG4gICAgY29uc29sZS53YXJuKFwidnVlLXRhYmxlcy0yOiBVbmFibGUgdG8gc2V0IGZpbHRlci4gRmlsdGVyIHZhbHVlIG11c3QgYmUgYSBzdHJpbmcgKGBmaWx0ZXJCeUNvbHVtbmAgaXMgc2V0IHRvIGBmYWxzZWApXCIpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIDtcbiAgdmFyIG1lcmdlZEZpbHRlciA9IHRoaXMub3B0cy5maWx0ZXJCeUNvbHVtbiA/IG1lcmdlKHRoaXMucXVlcnksIGZpbHRlcikgOiBmaWx0ZXI7XG5cbiAgaWYgKHRoaXMudnVleCkge1xuICAgIHRoaXMuY29tbWl0KCdTRVRfRklMVEVSJywgbWVyZ2VkRmlsdGVyKTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLnF1ZXJ5ID0gbWVyZ2VkRmlsdGVyO1xuICAgIHRoaXMuc2V0UGFnZSgxLCB0cnVlKTtcbiAgfVxuXG4gIHRoaXMudXBkYXRlU3RhdGUoJ3F1ZXJ5JywgbWVyZ2VkRmlsdGVyKTtcblxuICB0aGlzLl9zZXRGaWx0ZXJzRE9NKGZpbHRlcik7XG5cbiAgaWYgKHRoaXMuc291cmNlID09ICdzZXJ2ZXInKSB7XG4gICAgdGhpcy5nZXREYXRhKCk7XG4gIH1cbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHF1ZXJ5KSB7XG4gIHZhciBlbDtcblxuICBpZiAodGhpcy5vcHRzLmZpbHRlckJ5Q29sdW1uKSB7XG4gICAgZm9yICh2YXIgY29sdW1uIGluIHF1ZXJ5KSB7XG4gICAgICB2YXIgY29sdW1uTmFtZSA9IHRoaXMuX2dldENvbHVtbk5hbWUoY29sdW1uKTtcblxuICAgICAgaWYgKHRoaXMuaXNEYXRlRmlsdGVyKGNvbHVtbikpIHtcbiAgICAgICAgaWYgKHF1ZXJ5W2NvbHVtbl0gJiYgX3R5cGVvZihxdWVyeVtjb2x1bW5dKSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICB2YXIgc3RhcnQgPSB0eXBlb2YgcXVlcnlbY29sdW1uXS5zdGFydCA9PT0gJ3N0cmluZycgPyBtb21lbnQocXVlcnlbY29sdW1uXS5zdGFydCwgJ1lZWVktTU0tREQnKSA6IHF1ZXJ5W2NvbHVtbl0uc3RhcnQ7XG4gICAgICAgICAgdmFyIGVuZCA9IHR5cGVvZiBxdWVyeVtjb2x1bW5dLmVuZCA9PT0gJ3N0cmluZycgPyBtb21lbnQocXVlcnlbY29sdW1uXS5lbmQsICdZWVlZLU1NLUREJykgOiBxdWVyeVtjb2x1bW5dLmVuZDtcblxuICAgICAgICAgIHRoaXMuX3NldERhdGVwaWNrZXJUZXh0KGNvbHVtbiwgc3RhcnQsIGVuZCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgJCh0aGlzLiRlbCkuZmluZChcIiNWdWVUYWJsZXNfX1wiICsgJC5lc2NhcGVTZWxlY3Rvcihjb2x1bW4pICsgXCItZmlsdGVyXCIpLmh0bWwoXCI8c3BhbiBjbGFzcz0nVnVlVGFibGVzX19maWx0ZXItcGxhY2Vob2xkZXInPlwiICsgdGhpcy5kaXNwbGF5KCdmaWx0ZXJCeScsIHtcbiAgICAgICAgICAgIGNvbHVtbjogdGhpcy5nZXRIZWFkaW5nKGNvbHVtbilcbiAgICAgICAgICB9KSArIFwiPC9zcGFuPlwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBlbCA9IHRoaXMuJGVsLnF1ZXJ5U2VsZWN0b3IoXCJbbmFtZT0nXCIuY29uY2F0KGNvbHVtbk5hbWUsIFwiJ11cIikpO1xuXG4gICAgICBpZiAoZWwpIHtcbiAgICAgICAgZWwudmFsdWUgPSBxdWVyeVtjb2x1bW5dO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLmNvbHVtbnMuaW5kZXhPZihjb2x1bW4pID09PSAtMSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKFwidnVlLXRhYmxlcy0yOiBFcnJvciBpbiBzZXR0aW5nIGZpbHRlciB2YWx1ZS4gQ29sdW1uICdcIi5jb25jYXQoY29sdW1uLCBcIicgZG9lcyBub3QgZXhpc3QuXCIpKTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdmFyIGVsID0gdGhpcy4kZWwucXVlcnlTZWxlY3RvcignLlZ1ZVRhYmxlc19fc2VhcmNoX19pbnB1dCcpO1xuICAgIGlmIChlbCkgZWwudmFsdWUgPSBxdWVyeTtcbiAgfVxufTsiLCJcInVzZSBzdHJpY3RcIjtcblxuZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZSkge1xuICB0aGlzLmxpbWl0ID0gX3R5cGVvZihlKSA9PT0gJ29iamVjdCcgPyBlLnRhcmdldC52YWx1ZSA6IGU7XG4gIHRoaXMudXBkYXRlU3RhdGUoJ3BlclBhZ2UnLCB0aGlzLmxpbWl0KTtcbiAgdGhpcy5kaXNwYXRjaCgnbGltaXQnLCBwYXJzZUludCh0aGlzLmxpbWl0KSk7XG4gIHRoaXMuc2V0UGFnZSgxKTtcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGNvbHVtbiwgYXNjZW5kaW5nKSB7XG4gIHRoaXMub3JkZXJCeS5jb2x1bW4gPSBjb2x1bW47XG4gIHRoaXMub3JkZXJCeS5hc2NlbmRpbmcgPSBhc2NlbmRpbmc7XG4gIHRoaXMudXBkYXRlU3RhdGUoJ29yZGVyQnknLCB7XG4gICAgY29sdW1uOiBjb2x1bW4sXG4gICAgYXNjZW5kaW5nOiBhc2NlbmRpbmdcbiAgfSk7XG5cbiAgaWYgKHRoaXMuc291cmNlID09ICdzZXJ2ZXInKSB7XG4gICAgdGhpcy5nZXREYXRhKCk7XG4gIH1cbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHBhZ2UsIHByZXZlbnRSZXF1ZXN0KSB7XG4gIHBhZ2UgPSBwYWdlID8gcGFnZSA6IHRoaXMuJHJlZnMucGFnZS52YWx1ZTtcbiAgaWYgKCF0aGlzLm9wdHMucGFnaW5hdGlvbi5kcm9wZG93bikgdGhpcy4kcmVmcy5wYWdpbmF0aW9uLlBhZ2UgPSBwYWdlO1xuICB0aGlzLnBhZ2UgPSBwYWdlO1xuICB0aGlzLnVwZGF0ZVN0YXRlKCdwYWdlJywgcGFnZSk7XG4gIGlmICh0aGlzLnNvdXJjZSA9PSAnc2VydmVyJyAmJiAhcHJldmVudFJlcXVlc3QpIHRoaXMuZ2V0RGF0YSgpO1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoc2Vjb25kYXJ5Q29sKSB7XG4gIHZhciBwcmltYXJ5Q29sID0gdGhpcy5vcmRlckJ5LmNvbHVtbjtcbiAgdmFyIHByaW1hcnlBc2MgPSB0aGlzLm9yZGVyQnkuYXNjZW5kaW5nO1xuICBpZiAoIXRoaXMudXNlck11bHRpU29ydGluZ1twcmltYXJ5Q29sXSkgdGhpcy51c2VyTXVsdGlTb3J0aW5nW3ByaW1hcnlDb2xdID0gW107XG4gIHZhciBtdWx0aSA9IHRoaXMudXNlck11bHRpU29ydGluZ1twcmltYXJ5Q29sXTtcblxuICBpZiAocHJpbWFyeUNvbCA9PT0gc2Vjb25kYXJ5Q29sKSB7XG4gICAgaWYgKCFtdWx0aS5sZW5ndGggfHwgcHJpbWFyeUFzYykge1xuICAgICAgLy8gcHJpbWFyeSBpcyB0aGUgb25seSBzb3J0ZWQgY29sdW1uIG9yIGlzIGFzY2VuZGluZ1xuICAgICAgdGhpcy5vcmRlckJ5LmFzY2VuZGluZyA9ICF0aGlzLm9yZGVyQnkuYXNjZW5kaW5nO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyByZW1vdmUgcHJpbWFyeSBjb2x1bW4gYW5kIG1ha2Ugc2Vjb25kYXJ5IHByaW1hcnlcbiAgICAgIHRoaXMub3JkZXJCeSA9IG11bHRpLnNoaWZ0KCk7XG4gICAgICB0aGlzLnVzZXJNdWx0aVNvcnRpbmcgPSB7fTtcbiAgICAgIHRoaXMudXNlck11bHRpU29ydGluZ1t0aGlzLm9yZGVyQnkuY29sdW1uXSA9IG11bHRpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB2YXIgc2Vjb25kYXJ5ID0gbXVsdGkuZmlsdGVyKGZ1bmN0aW9uIChjb2wpIHtcbiAgICAgIHJldHVybiBjb2wuY29sdW1uID09IHNlY29uZGFyeUNvbDtcbiAgICB9KVswXTtcblxuICAgIGlmIChzZWNvbmRhcnkpIHtcbiAgICAgIGlmICghc2Vjb25kYXJ5LmFzY2VuZGluZykge1xuICAgICAgICAvLyByZW1vdmUgc29ydFxuICAgICAgICB0aGlzLnVzZXJNdWx0aVNvcnRpbmdbcHJpbWFyeUNvbF0gPSBtdWx0aS5maWx0ZXIoZnVuY3Rpb24gKGNvbCkge1xuICAgICAgICAgIHJldHVybiBjb2wuY29sdW1uICE9IHNlY29uZGFyeUNvbDtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICghdGhpcy51c2VyTXVsdGlTb3J0aW5nW3ByaW1hcnlDb2xdLmxlbmd0aCkgdGhpcy51c2VyTXVsdGlTb3J0aW5nID0ge307XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBjaGFuZ2UgZGlyZWN0aW9uXG4gICAgICAgIHNlY29uZGFyeS5hc2NlbmRpbmcgPSAhc2Vjb25kYXJ5LmFzY2VuZGluZztcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gYWRkIHNvcnRcbiAgICAgIG11bHRpLnB1c2goe1xuICAgICAgICBjb2x1bW46IHNlY29uZGFyeUNvbCxcbiAgICAgICAgYXNjZW5kaW5nOiB0cnVlXG4gICAgICB9KTtcbiAgICB9XG4gIH0gLy8gZm9yY2UgcmUtY29tcGlsYXRpb24gb2YgdGhlIGZpbHRlcmVkRGF0YSBjb21wdXRlZCBwcm9wZXJ0eVxuXG5cbiAgdGhpcy50aW1lID0gRGF0ZS5ub3coKTtcbiAgdGhpcy5kaXNwYXRjaCgnc29ydGVkJywgZ2V0TXVsdGlTb3J0RGF0YSh0aGlzLm9yZGVyQnksIHRoaXMudXNlck11bHRpU29ydGluZykpO1xufTtcblxuZnVuY3Rpb24gZ2V0TXVsdGlTb3J0RGF0YShtYWluLCBzZWNvbmRhcnkpIHtcbiAgdmFyIGNvbHMgPSBbSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShtYWluKSldO1xuICBjb2xzID0gY29scy5jb25jYXQoc2Vjb25kYXJ5W21haW4uY29sdW1uXSk7XG4gIHJldHVybiBjb2xzO1xufVxuXG47IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGNvbHVtbikge1xuICBpZiAodGhpcy5vcHRzLnZpc2libGVDb2x1bW5zKSB7XG4gICAgcmV0dXJuIHRoaXMub3B0cy52aXNpYmxlQ29sdW1ucy5pbmNsdWRlcyhjb2x1bW4pO1xuICB9XG5cbiAgaWYgKHRoaXMub3B0cy5oaWRkZW5Db2x1bW5zKSB7XG4gICAgcmV0dXJuICF0aGlzLm9wdHMuaGlkZGVuQ29sdW1ucy5pbmNsdWRlcyhjb2x1bW4pO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChjb2x1bW4pIHtcbiAgdmFyIGNscyA9IHRoaXMub3B0cy5zb3J0SWNvbi5iYXNlICsgJyAnO1xuICBpZiAoIXRoaXMuc29ydGFibGUoY29sdW1uKSkgcmV0dXJuO1xuXG4gIGlmICh0aGlzLm9wdHMuc29ydEljb24uaXMgJiYgIXRoaXMuX2N1cnJlbnRseVNvcnRlZChjb2x1bW4pKSB7XG4gICAgY2xzICs9IHRoaXMub3B0cy5zb3J0SWNvbi5pcyArICcgJztcbiAgfVxuXG4gIGlmICh0aGlzLmhhc011bHRpU29ydCAmJiB0aGlzLm9yZGVyQnkuY29sdW1uICYmIHRoaXMudXNlck11bHRpU29ydGluZ1t0aGlzLm9yZGVyQnkuY29sdW1uXSkge1xuICAgIHZhciBjb2wgPSB0aGlzLnVzZXJNdWx0aVNvcnRpbmdbdGhpcy5vcmRlckJ5LmNvbHVtbl0uZmlsdGVyKGZ1bmN0aW9uIChjKSB7XG4gICAgICByZXR1cm4gYy5jb2x1bW4gPT09IGNvbHVtbjtcbiAgICB9KVswXTtcbiAgICBpZiAoY29sKSBjbHMgKz0gY29sLmFzY2VuZGluZyA/IHRoaXMub3B0cy5zb3J0SWNvbi51cCA6IHRoaXMub3B0cy5zb3J0SWNvbi5kb3duO1xuICB9XG5cbiAgaWYgKGNvbHVtbiA9PSB0aGlzLm9yZGVyQnkuY29sdW1uKSB7XG4gICAgY2xzICs9IHRoaXMub3JkZXJCeS5hc2NlbmRpbmcgPT0gMSA/IHRoaXMub3B0cy5zb3J0SWNvbi51cCA6IHRoaXMub3B0cy5zb3J0SWNvbi5kb3duO1xuICB9XG5cbiAgcmV0dXJuIGNscztcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGNvbHVtbikge1xuICB2YXIgYyA9IHRoaXMuc29ydGFibGUoY29sdW1uKSA/ICdWdWVUYWJsZXNfX3NvcnRhYmxlICcgOiAnJztcbiAgYyArPSB0aGlzLmNvbHVtbkNsYXNzKGNvbHVtbik7XG4gIHJldHVybiBjO1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoY29sdW1uKSB7XG4gIHZhciBzb3J0QWxsID0gdHlwZW9mIHRoaXMub3B0cy5zb3J0YWJsZSA9PSAnYm9vbGVhbicgJiYgdGhpcy5vcHRzLnNvcnRhYmxlO1xuICBpZiAoc29ydEFsbCkgcmV0dXJuIHRydWU7XG4gIHJldHVybiB0aGlzLm9wdHMuc29ydGFibGUuaW5kZXhPZihjb2x1bW4pID4gLTE7XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChyb3dJZCwgZSkge1xuICBpZiAoZSkgZS5zdG9wUHJvcGFnYXRpb24oKTtcblxuICBpZiAodGhpcy5vcGVuQ2hpbGRSb3dzLmluY2x1ZGVzKHJvd0lkKSkge1xuICAgIHZhciBpbmRleCA9IHRoaXMub3BlbkNoaWxkUm93cy5pbmRleE9mKHJvd0lkKTtcbiAgICB0aGlzLm9wZW5DaGlsZFJvd3Muc3BsaWNlKGluZGV4LCAxKTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLm9wZW5DaGlsZFJvd3MucHVzaChyb3dJZCk7XG4gIH1cbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGNvbHVtbikge1xuICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gIGlmICghdGhpcy51c2VyQ29udHJvbHNDb2x1bW5zKSB7XG4gICAgdGhpcy51c2VyQ29sdW1uc0Rpc3BsYXkgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuYWxsQ29sdW1ucykpO1xuICAgIHRoaXMudXNlckNvbnRyb2xzQ29sdW1ucyA9IHRydWU7XG4gIH1cblxuICBpZiAodGhpcy51c2VyQ29sdW1uc0Rpc3BsYXkuaW5jbHVkZXMoY29sdW1uKSkge1xuICAgIC8vIGNhbid0IGhhdmUgbm8gY29sdW1uc1xuICAgIGlmICh0aGlzLnVzZXJDb2x1bW5zRGlzcGxheS5sZW5ndGggPT09IDEpIHJldHVybjtcbiAgICB2YXIgaW5kZXggPSB0aGlzLnVzZXJDb2x1bW5zRGlzcGxheS5pbmRleE9mKGNvbHVtbik7XG4gICAgdGhpcy51c2VyQ29sdW1uc0Rpc3BsYXkuc3BsaWNlKGluZGV4LCAxKTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLnVzZXJDb2x1bW5zRGlzcGxheS5wdXNoKGNvbHVtbik7XG4gIH1cblxuICB0aGlzLnVwZGF0ZVN0YXRlKCd1c2VyQ29udHJvbHNDb2x1bW5zJywgdHJ1ZSk7XG4gIHRoaXMudXBkYXRlU3RhdGUoJ3VzZXJDb2x1bW5zRGlzcGxheScsIHRoaXMudXNlckNvbHVtbnNEaXNwbGF5KTtcbiAgdGhpcy4kbmV4dFRpY2soZnVuY3Rpb24gKCkge1xuICAgIF90aGlzLl9zZXRGaWx0ZXJzRE9NKF90aGlzLnF1ZXJ5KTtcbiAgfSk7XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5kaXNwbGF5Q29sdW1uc0Ryb3Bkb3duID0gIXRoaXMuZGlzcGxheUNvbHVtbnNEcm9wZG93bjtcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICBpZiAodGhpcy5vcmRlckJ5LmNvbHVtbiAhPSB0aGlzLm9wdHMuZ3JvdXBCeSkge1xuICAgIHRoaXMuc2V0T3JkZXIodGhpcy5vcHRzLmdyb3VwQnksIHRydWUpO1xuICB9IGVsc2Uge1xuICAgIHRoaXMuc2V0T3JkZXIodGhpcy5vcHRzLmdyb3VwQnksICF0aGlzLm9yZGVyQnkuYXNjZW5kaW5nKTtcbiAgfVxufTsiLCJcInVzZSBzdHJpY3RcIjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMuZGF0YS5mb3JFYWNoKGZ1bmN0aW9uIChyb3csIGluZGV4KSB7XG4gICAgdGhpcy5vcHRzLmRhdGVDb2x1bW5zLmZvckVhY2goZnVuY3Rpb24gKGNvbHVtbikge1xuICAgICAgcm93W2NvbHVtbl0gPSByb3dbY29sdW1uXSA/IG1vbWVudChyb3dbY29sdW1uXSwgdGhpcy5vcHRzLnRvTW9tZW50Rm9ybWF0KSA6ICcnO1xuICAgIH0uYmluZCh0aGlzKSk7XG4gIH0uYmluZCh0aGlzKSk7XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gIGlmICghdGhpcy5vcHRzLnNhdmVTdGF0ZSB8fCAhdGhpcy5hY3RpdmVTdGF0ZSkgcmV0dXJuO1xuXG4gIHRyeSB7XG4gICAgdmFyIGN1cnJlbnRTdGF0ZSA9IEpTT04ucGFyc2UodGhpcy5zdG9yYWdlLmdldEl0ZW0odGhpcy5zdGF0ZUtleSkpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgdmFyIGN1cnJlbnRTdGF0ZSA9IHRoaXMuaW5pdFN0YXRlKCk7XG4gIH1cblxuICBjdXJyZW50U3RhdGVba2V5XSA9IHZhbHVlO1xuICB0aGlzLnN0b3JhZ2Uuc2V0SXRlbSh0aGlzLnN0YXRlS2V5LCBKU09OLnN0cmluZ2lmeShjdXJyZW50U3RhdGUpKTtcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBfYnVzID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi4vYnVzXCIpKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgXCJkZWZhdWx0XCI6IG9iaiB9OyB9XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gIHZhciBlbDtcblxuICBpZiAodGhpcy5vcHRzLmRlc3Ryb3lFdmVudEJ1cykge1xuICAgIF9idXNbXCJkZWZhdWx0XCJdLiRvZmYoKTtcblxuICAgIF9idXNbXCJkZWZhdWx0XCJdLiRkZXN0cm95KCk7XG4gIH1cblxuICBpZiAodGhpcy52dWV4ICYmICF0aGlzLm9wdHMucHJlc2VydmVTdGF0ZSkge1xuICAgIHRoaXMuJHN0b3JlLnVucmVnaXN0ZXJNb2R1bGUodGhpcy5uYW1lKTtcbiAgfVxuXG4gIGlmICh0aGlzLm9wdHMuZmlsdGVyQnlDb2x1bW4pIHtcbiAgICB0aGlzLmRhdGVwaWNrZXJDb2x1bW5zLmZvckVhY2goZnVuY3Rpb24gKGNvbHVtbikge1xuICAgICAgZWwgPSAkKF90aGlzLiRlbCkuZmluZChcIiNWdWVUYWJsZXNfX1wiICsgJC5lc2NhcGVTZWxlY3Rvcihjb2x1bW4pICsgXCItZmlsdGVyXCIpLmRhdGEoJ2RhdGVyYW5nZXBpY2tlcicpO1xuICAgICAgaWYgKGVsKSBlbC5yZW1vdmUoKTtcbiAgICB9KTtcbiAgfVxufTsiLCJcInVzZSBzdHJpY3RcIjtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGxpc3RDb2x1bW5zT2JqZWN0OiByZXF1aXJlKCcuLi9jb21wdXRlZC9saXN0LWNvbHVtbnMtb2JqZWN0JyksXG4gIGFsbENvbHVtbnM6IHJlcXVpcmUoJy4uL2NvbXB1dGVkL2FsbC1jb2x1bW5zJyksXG4gIHRlbXBsYXRlc0tleXM6IHJlcXVpcmUoJy4uL2NvbXB1dGVkL3RlbXBsYXRlcy1rZXlzJyksXG4gIG9wdHM6IHJlcXVpcmUoJy4uL2NvbXB1dGVkL29wdHMnKSxcbiAgdGFibGVEYXRhOiByZXF1aXJlKCcuLi9jb21wdXRlZC90YWJsZS1kYXRhJyksXG4gIHN0b3JhZ2U6IHJlcXVpcmUoJy4uL2NvbXB1dGVkL3N0b3JhZ2UnKSxcbiAgZmlsdGVyYWJsZUNvbHVtbnM6IHJlcXVpcmUoJy4uL2NvbXB1dGVkL2ZpbHRlcmFibGUtY29sdW1ucycpLFxuICBkYXRlcGlja2VyQ29sdW1uczogcmVxdWlyZSgnLi4vY29tcHV0ZWQvZGF0ZXBpY2tlci1jb2x1bW5zJyksXG4gIGhhc0NoaWxkUm93OiByZXF1aXJlKCcuLi9jb21wdXRlZC9oYXMtY2hpbGQtcm93JyksXG4gIGNvbHNwYW46IHJlcXVpcmUoJy4uL2NvbXB1dGVkL2NvbHNwYW4nKSxcbiAgaGFzR2VuZXJpY0ZpbHRlcjogcmVxdWlyZSgnLi4vY29tcHV0ZWQvaGFzLWdlbmVyaWMtZmlsdGVyJyksXG4gIHN0YXRlS2V5OiBmdW5jdGlvbiBzdGF0ZUtleSgpIHtcbiAgICB2YXIga2V5ID0gdGhpcy5uYW1lID8gdGhpcy5uYW1lIDogdGhpcy5pZDtcbiAgICByZXR1cm4gJ3Z1ZXRhYmxlc18nICsga2V5O1xuICB9LFxuICBQYWdlOiBmdW5jdGlvbiBQYWdlKCkge1xuICAgIHJldHVybiB0aGlzLnBhZ2U7XG4gIH1cbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBpc19lbXB0eSA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvaXMtZW1wdHknKTtcblxudmFyIHJlZ2lzdGVyVnVleE1vZHVsZSA9IHJlcXVpcmUoJy4uL3N0YXRlL3JlZ2lzdGVyLW1vZHVsZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChzZWxmKSB7XG4gIGlmIChzZWxmLnZ1ZXgpIHtcbiAgICByZWdpc3RlclZ1ZXhNb2R1bGUoc2VsZik7XG4gIH0gZWxzZSB7XG4gICAgc2VsZi5saW1pdCA9IHNlbGYub3B0cy5wZXJQYWdlO1xuICB9XG5cbiAgaWYgKGlzX2VtcHR5KHNlbGYub3B0cy5jb2x1bW5zRGlzcGxheSkgfHwgdHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcpIHJldHVybjtcbiAgc2VsZi5jb2x1bW5zRGlzcGxheSA9IGdldENvbHVtbnNEaXNwbGF5KHNlbGYub3B0cy5jb2x1bW5zRGlzcGxheSk7XG4gIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCBmdW5jdGlvbiAoKSB7XG4gICAgc2VsZi53aW5kb3dXaWR0aCA9IHdpbmRvdy5pbm5lcldpZHRoO1xuICB9LmJpbmQoc2VsZikpO1xufTtcblxuZnVuY3Rpb24gZ2V0Q29sdW1uc0Rpc3BsYXkoY29sdW1uc0Rpc3BsYXkpIHtcbiAgdmFyIHJlcyA9IHt9O1xuICB2YXIgcmFuZ2U7XG4gIHZhciBkZXZpY2U7XG4gIHZhciBvcGVyYXRvcjtcblxuICBmb3IgKHZhciBjb2x1bW4gaW4gY29sdW1uc0Rpc3BsYXkpIHtcbiAgICBvcGVyYXRvciA9IGdldE9wZXJhdG9yKGNvbHVtbnNEaXNwbGF5W2NvbHVtbl0pO1xuXG4gICAgdHJ5IHtcbiAgICAgIGRldmljZSA9IGdldERldmljZShjb2x1bW5zRGlzcGxheVtjb2x1bW5dKTtcbiAgICAgIHJhbmdlID0gZ2V0UmFuZ2UoZGV2aWNlLCBvcGVyYXRvcik7XG4gICAgICByZXNbY29sdW1uXSA9IHJhbmdlLmNvbmNhdChbb3BlcmF0b3JdKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNvbnNvbGUud2FybignVW5rbm93biBkZXZpY2UgJyArIGRldmljZSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlcztcbn1cblxuZnVuY3Rpb24gZ2V0UmFuZ2UoZGV2aWNlLCBvcGVyYXRvcikge1xuICB2YXIgZGV2aWNlcyA9IHtcbiAgICBkZXNrdG9wOiBbMTAyNCwgbnVsbF0sXG4gICAgdGFibGV0OiBbNDgwLCAxMDI0XSxcbiAgICBtb2JpbGU6IFswLCA0ODBdLFxuICAgIHRhYmxldEw6IFs3NjgsIDEwMjRdLFxuICAgIHRhYmxldFA6IFs0ODAsIDc2OF0sXG4gICAgbW9iaWxlTDogWzMyMCwgNDgwXSxcbiAgICBtb2JpbGVQOiBbMCwgMzIwXVxuICB9O1xuXG4gIHN3aXRjaCAob3BlcmF0b3IpIHtcbiAgICBjYXNlICdtaW4nOlxuICAgICAgcmV0dXJuIFtkZXZpY2VzW2RldmljZV1bMF0sIG51bGxdO1xuXG4gICAgY2FzZSAnbWF4JzpcbiAgICAgIHJldHVybiBbMCwgZGV2aWNlc1tkZXZpY2VdWzFdXTtcblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gZGV2aWNlc1tkZXZpY2VdO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldE9wZXJhdG9yKHZhbCkge1xuICB2YXIgcGllY2VzID0gdmFsLnNwbGl0KCdfJyk7XG4gIGlmIChbJ25vdCcsICdtaW4nLCAnbWF4J10uaW5kZXhPZihwaWVjZXNbMF0pID4gLTEpIHJldHVybiBwaWVjZXNbMF07XG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gZ2V0RGV2aWNlKHZhbCkge1xuICB2YXIgcGllY2VzID0gdmFsLnNwbGl0KCdfJyk7XG4gIHJldHVybiBwaWVjZXMubGVuZ3RoID4gMSA/IHBpZWNlc1sxXSA6IHBpZWNlc1swXTtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB7XG4gICAgaWQ6IG1ha2VJZCgpLFxuICAgIGFsbEZpbHRlcmVkRGF0YTogW10sXG4gICAgb3BlbkNoaWxkUm93czogW10sXG4gICAgd2luZG93V2lkdGg6IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gd2luZG93LmlubmVyV2lkdGggOiBudWxsLFxuICAgIHVzZXJNdWx0aVNvcnRpbmc6IHt9LFxuICAgIGVkaXRpbmc6IFtdXG4gIH07XG59O1xuXG5mdW5jdGlvbiBtYWtlSWQoKSB7XG4gIHZhciB0ZXh0ID0gXCJcIjtcbiAgdmFyIHBvc3NpYmxlID0gXCJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OVwiO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgNTsgaSsrKSB7XG4gICAgdGV4dCArPSBwb3NzaWJsZS5jaGFyQXQoTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogcG9zc2libGUubGVuZ3RoKSk7XG4gIH1cblxuICByZXR1cm4gdGV4dDtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGluaXRRdWVyeTogcmVxdWlyZSgnLi4vbWV0aG9kcy9pbml0LXF1ZXJ5JyksXG4gIHJlc2V0UXVlcnk6IHJlcXVpcmUoJy4uL21ldGhvZHMvcmVzZXQtcXVlcnknKSxcbiAgaW5pdEN1c3RvbUZpbHRlcnM6IHJlcXVpcmUoJy4uL21ldGhvZHMvaW5pdC1jdXN0b20tZmlsdGVycycpLFxuICBpbml0T3B0aW9uczogcmVxdWlyZSgnLi4vbWV0aG9kcy9pbml0LW9wdGlvbnMnKSxcbiAgc29ydGFibGVDbGFzczogcmVxdWlyZSgnLi4vbWV0aG9kcy9zb3J0YWJsZS1jbGFzcycpLFxuICBzb3J0YWJsZUNoZXZyb25DbGFzczogcmVxdWlyZSgnLi4vbWV0aG9kcy9zb3J0YWJsZS1jaGV2cm9uLWNsYXNzJyksXG4gIGRpc3BsYXk6IHJlcXVpcmUoJy4uL21ldGhvZHMvZGlzcGxheScpLFxuICBvcmRlckJ5Q29sdW1uOiByZXF1aXJlKCcuLi9tZXRob2RzL29yZGVyLWJ5LWNvbHVtbicpLFxuICBnZXRIZWFkaW5nOiByZXF1aXJlKCcuLi9tZXRob2RzL2dldC1oZWFkaW5nJyksXG4gIGdldEhlYWRpbmdUb29sdGlwOiByZXF1aXJlKCcuLi9tZXRob2RzL2dldC1oZWFkaW5nLXRvb2x0aXAnKSxcbiAgc29ydGFibGU6IHJlcXVpcmUoJy4uL21ldGhvZHMvc29ydGFibGUnKSxcbiAgc2VydmVyU2VhcmNoOiByZXF1aXJlKCcuLi9tZXRob2RzL3NlcnZlci1zZWFyY2gnKSxcbiAgaW5pdE9yZGVyQnk6IHJlcXVpcmUoJy4uL21ldGhvZHMvaW5pdC1vcmRlci1ieScpLFxuICBpbml0RGF0ZUZpbHRlcnM6IHJlcXVpcmUoJy4uL21ldGhvZHMvaW5pdC1kYXRlLWZpbHRlcnMnKSxcbiAgc2V0RmlsdGVyOiByZXF1aXJlKCcuLi9tZXRob2RzL3NldC1maWx0ZXInKSxcbiAgc2V0UGFnZTogcmVxdWlyZSgnLi4vbWV0aG9kcy9zZXQtcGFnZScpLFxuICBzZXRPcmRlcjogcmVxdWlyZSgnLi4vbWV0aG9kcy9zZXQtb3JkZXInKSxcbiAgaW5pdFBhZ2luYXRpb246IHJlcXVpcmUoJy4uL21ldGhvZHMvaW5pdC1wYWdpbmF0aW9uJyksXG4gIGZpbHRlcmFibGU6IHJlcXVpcmUoJy4uL21ldGhvZHMvZmlsdGVyYWJsZScpLFxuICBpc1RleHRGaWx0ZXI6IHJlcXVpcmUoJy4uL21ldGhvZHMvaXMtdGV4dC1maWx0ZXInKSxcbiAgaXNEYXRlRmlsdGVyOiByZXF1aXJlKCcuLi9tZXRob2RzL2lzLWRhdGUtZmlsdGVyJyksXG4gIGlzTGlzdEZpbHRlcjogcmVxdWlyZSgnLi4vbWV0aG9kcy9pcy1saXN0LWZpbHRlcicpLFxuICBoaWdobGlnaHRNYXRjaDogcmVxdWlyZSgnLi4vZmlsdGVycy9oaWdobGlnaHQtbWF0Y2hlcycpLFxuICBmb3JtYXREYXRlOiByZXF1aXJlKCcuLi9maWx0ZXJzL2Zvcm1hdC1kYXRlJyksXG4gIGhhc0RhdGVGaWx0ZXJzOiByZXF1aXJlKCcuLi9tZXRob2RzL2hhcy1kYXRlLWZpbHRlcnMnKSxcbiAgYXBwbHlGaWx0ZXJzOiByZXF1aXJlKCcuLi9tZXRob2RzL2FwcGx5LWZpbHRlcnMnKSxcbiAgb3B0aW9uVGV4dDogcmVxdWlyZSgnLi4vZmlsdGVycy9vcHRpb24tdGV4dCcpLFxuICByZW5kZXI6IHJlcXVpcmUoJy4uL21ldGhvZHMvcmVuZGVyJyksXG4gIHJvd1dhc0NsaWNrZWQ6IHJlcXVpcmUoJy4uL21ldGhvZHMvcm93LXdhcy1jbGlja2VkJyksXG4gIHNldExpbWl0OiByZXF1aXJlKCcuLi9tZXRob2RzL3NldC1saW1pdCcpLFxuICBnZXRPcGVuQ2hpbGRSb3dzOiByZXF1aXJlKCcuLi9tZXRob2RzL2dldC1vcGVuLWNoaWxkLXJvd3MnKSxcbiAgZGlzcGF0Y2g6IHJlcXVpcmUoJy4uL21ldGhvZHMvZGlzcGF0Y2gnKSxcbiAgdG9nZ2xlQ2hpbGRSb3c6IHJlcXVpcmUoJy4uL21ldGhvZHMvdG9nZ2xlLWNoaWxkLXJvdycpLFxuICBjaGlsZFJvd1RvZ2dsZXJDbGFzczogcmVxdWlyZSgnLi4vbWV0aG9kcy9jaGlsZC1yb3ctdG9nZ2xlci1jbGFzcycpLFxuICBzZW5kUmVxdWVzdDogcmVxdWlyZSgnLi4vbWV0aG9kcy9zZW5kLXJlcXVlc3QnKSxcbiAgZ2V0UmVzcG9uc2VEYXRhOiByZXF1aXJlKCcuLi9tZXRob2RzL2dldC1yZXNwb25zZS1kYXRhJyksXG4gIGdldFNvcnRGbjogcmVxdWlyZSgnLi4vbWV0aG9kcy9nZXQtc29ydC1mbicpLFxuICBpbml0U3RhdGU6IHJlcXVpcmUoJy4uL21ldGhvZHMvaW5pdC1zdGF0ZScpLFxuICB1cGRhdGVTdGF0ZTogcmVxdWlyZSgnLi4vbWV0aG9kcy91cGRhdGUtc3RhdGUnKSxcbiAgY29sdW1uQ2xhc3M6IHJlcXVpcmUoJy4uL21ldGhvZHMvY29sdW1uLWNsYXNzJyksXG4gIGdldE5hbWU6IHJlcXVpcmUoJy4uL21ldGhvZHMvZ2V0LW5hbWUnKSxcbiAgdG9nZ2xlQ29sdW1uOiByZXF1aXJlKCcuLi9tZXRob2RzL3RvZ2dsZS1jb2x1bW4nKSxcbiAgc2V0VXNlck11bHRpU29ydDogcmVxdWlyZSgnLi4vbWV0aG9kcy9zZXQtdXNlci1tdWx0aS1zb3J0JyksXG4gIF9jZWxsQ2xhc3NlczogcmVxdWlyZSgnLi4vbWV0aG9kcy9jZWxsLWNsYXNzZXMnKSxcbiAgX3NldEZpbHRlcnNET006IHJlcXVpcmUoJy4uL21ldGhvZHMvc2V0LWZpbHRlcnMtZG9tJyksXG4gIF9jdXJyZW50bHlTb3J0ZWQ6IHJlcXVpcmUoJy4uL21ldGhvZHMvY3VycmVudGx5LXNvcnRlZCcpLFxuICBfZ2V0Q2hpbGRSb3dUZW1wbGF0ZTogcmVxdWlyZSgnLi4vbWV0aG9kcy9nZXQtY2hpbGQtcm93LXRlbXBsYXRlJyksXG4gIF90b2dnbGVDb2x1bW5zRHJvcGRvd246IHJlcXVpcmUoJy4uL21ldGhvZHMvdG9nZ2xlLWNvbHVtbnMtZHJvcGRvd24nKSxcbiAgX29ubHlDb2x1bW46IHJlcXVpcmUoJy4uL21ldGhvZHMvb25seS1jb2x1bW4nKSxcbiAgX29uUGFnaW5hdGlvbjogcmVxdWlyZSgnLi4vbWV0aG9kcy9vbi1wYWdpbmF0aW9uJyksXG4gIF90b2dnbGVHcm91cERpcmVjdGlvbjogcmVxdWlyZSgnLi4vbWV0aG9kcy90b2dnbGUtZ3JvdXAtZGlyZWN0aW9uJyksXG4gIF9nZXRJbml0aWFsRGF0ZVJhbmdlOiByZXF1aXJlKCcuLi9tZXRob2RzL2dldC1pbml0aWFsLWRhdGUtcmFuZ2UnKSxcbiAgX3NldERhdGVwaWNrZXJUZXh0OiByZXF1aXJlKCcuLi9tZXRob2RzL3NldC1kYXRlcGlja2VyLXRleHQnKSxcbiAgX2luaXRpYWxPcmRlckFzY2VuZGluZzogcmVxdWlyZSgnLi4vbWV0aG9kcy9pbml0aWFsLW9yZGVyLWFzY2VuZGluZycpLFxuICBkYXRlRm9ybWF0OiByZXF1aXJlKCcuLi9tZXRob2RzL2RhdGUtZm9ybWF0JyksXG4gIF9zZXRDb2x1bW5zRHJvcGRvd25DbG9zZUxpc3RlbmVyOiByZXF1aXJlKCcuLi9tZXRob2RzL3NldC1jb2x1bW5zLWRyb3Bkb3duLWNsb3NlLWxpc3RlbmVyJyksXG4gIF9nZXRWYWx1ZTogcmVxdWlyZSgnLi4vbWV0aG9kcy9nZXQtdmFsdWUnKSxcbiAgX2dldENvbHVtbk5hbWU6IHJlcXVpcmUoJy4uL21ldGhvZHMvZ2V0LWNvbHVtbi1uYW1lJyksXG4gIF9zaG91bGRTaG93Q29sdW1uT25Jbml0OiByZXF1aXJlKCcuLi9tZXRob2RzL3Nob3VsZC1zaG93LWNvbHVtbi1vbi1pbml0Jylcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBfbWVyZ2UgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCJtZXJnZVwiKSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IFwiZGVmYXVsdFwiOiBvYmogfTsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChoKSB7XG4gIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIChjbGFzc2VzKSB7XG4gICAgaWYgKCFfdGhpcy5vcHRzLmZpbHRlckJ5Q29sdW1uIHx8ICFfdGhpcy5vcHRzLmZpbHRlcmFibGUpIHJldHVybiAnJztcblxuICAgIHZhciB0ZXh0RmlsdGVyID0gcmVxdWlyZSgnLi90ZXh0LWZpbHRlcicpLmNhbGwoX3RoaXMsIGgsIGNsYXNzZXMuaW5wdXQpO1xuXG4gICAgdmFyIGRhdGVGaWx0ZXIgPSByZXF1aXJlKCcuL2RhdGUtZmlsdGVyJykuY2FsbChfdGhpcywgaCk7XG5cbiAgICB2YXIgbGlzdEZpbHRlciA9IHJlcXVpcmUoJy4vbGlzdC1maWx0ZXInKS5jYWxsKF90aGlzLCBoLCBjbGFzc2VzLnNlbGVjdCk7XG5cbiAgICB2YXIgZmlsdGVycyA9IFtdO1xuICAgIHZhciBmaWx0ZXI7XG4gICAgaWYgKF90aGlzLmhhc0NoaWxkUm93ICYmIF90aGlzLm9wdHMuY2hpbGRSb3dUb2dnbGVyRmlyc3QgJiYgX3RoaXMub3B0cy5zaG93Q2hpbGRSb3dUb2dnbGVyKSBmaWx0ZXJzLnB1c2goaChcInRoXCIpKTtcblxuICAgIF90aGlzLmFsbENvbHVtbnMubWFwKGZ1bmN0aW9uIChjb2x1bW4pIHtcbiAgICAgIHZhciBmaWx0ZXIgPSAnJztcblxuICAgICAgaWYgKF90aGlzLmZpbHRlcmFibGUoY29sdW1uKSkge1xuICAgICAgICBzd2l0Y2ggKHRydWUpIHtcbiAgICAgICAgICBjYXNlIF90aGlzLmlzVGV4dEZpbHRlcihjb2x1bW4pOlxuICAgICAgICAgICAgZmlsdGVyID0gdGV4dEZpbHRlcihjb2x1bW4pO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIF90aGlzLmlzRGF0ZUZpbHRlcihjb2x1bW4pOlxuICAgICAgICAgICAgZmlsdGVyID0gZGF0ZUZpbHRlcihjb2x1bW4pO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIF90aGlzLmlzTGlzdEZpbHRlcihjb2x1bW4pOlxuICAgICAgICAgICAgZmlsdGVyID0gbGlzdEZpbHRlcihjb2x1bW4pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBfdGhpcy4kc2xvdHNbXCJmaWx0ZXJfX1wiLmNvbmNhdChjb2x1bW4pXSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgZmlsdGVyID0gZmlsdGVyID8gaChcImRpdlwiLCBbZmlsdGVyLCBfdGhpcy4kc2xvdHNbXCJmaWx0ZXJfX1wiLmNvbmNhdChjb2x1bW4pXV0pIDogX3RoaXMuJHNsb3RzW1wiZmlsdGVyX19cIi5jb25jYXQoY29sdW1uKV07XG4gICAgICB9XG5cbiAgICAgIGZpbHRlcnMucHVzaChoKFwidGhcIiwge1xuICAgICAgICBcImNsYXNzXCI6IF90aGlzLmNvbHVtbkNsYXNzKGNvbHVtbilcbiAgICAgIH0sIFtoKFwiZGl2XCIsIF9kZWZpbmVQcm9wZXJ0eSh7XG4gICAgICAgIFwiY2xhc3NcIjogXCJWdWVUYWJsZXNfX2NvbHVtbi1maWx0ZXJcIlxuICAgICAgfSwgXCJjbGFzc1wiLCAnVnVlVGFibGVzX18nICsgY29sdW1uICsgJy1maWx0ZXItd3JhcHBlcicpLCBbZmlsdGVyXSldKSk7XG4gICAgfSk7XG5cbiAgICBpZiAoX3RoaXMuaGFzQ2hpbGRSb3cgJiYgIV90aGlzLm9wdHMuY2hpbGRSb3dUb2dnbGVyRmlyc3QgJiYgX3RoaXMub3B0cy5zaG93Q2hpbGRSb3dUb2dnbGVyKSBmaWx0ZXJzLnB1c2goaChcInRoXCIpKTtcbiAgICByZXR1cm4gaChcInRyXCIsIHtcbiAgICAgIFwiY2xhc3NcIjogXCJWdWVUYWJsZXNfX2ZpbHRlcnMtcm93XCJcbiAgICB9LCBbZmlsdGVyc10pO1xuICB9O1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxudmFyIGRyb3Bkb3duV3JhcHBlciA9IHJlcXVpcmUoJy4vZHJvcGRvd24td3JhcHBlcicpO1xuXG52YXIgZHJvcGRvd25JdGVtV3JhcHBlciA9IHJlcXVpcmUoJy4vZHJvcGRvd24taXRlbS13cmFwcGVyJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGgpIHtcbiAgdmFyIF90aGlzID0gdGhpcztcblxuICByZXR1cm4gZnVuY3Rpb24gKGNsYXNzZXMpIHtcbiAgICB2YXIgY29scyA9IF90aGlzLmNvbHVtbnMubWFwKGZ1bmN0aW9uIChjb2x1bW4pIHtcbiAgICAgIHJldHVybiBkcm9wZG93bkl0ZW1XcmFwcGVyKGgsIGNsYXNzZXMsIGgoXCJhXCIsIHtcbiAgICAgICAgXCJjbGFzc1wiOiBjbGFzc2VzLmRyb3Bkb3duLml0ZW0sXG4gICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgaHJlZjogXCIjXCJcbiAgICAgICAgfSxcbiAgICAgICAgb246IHtcbiAgICAgICAgICBcImNsaWNrXCI6IGZ1bmN0aW9uIGNsaWNrKCkge1xuICAgICAgICAgICAgcmV0dXJuIF90aGlzLnRvZ2dsZUNvbHVtbihjb2x1bW4pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSwgW2goXCJpbnB1dFwiLCB7XG4gICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgdHlwZTogXCJjaGVja2JveFwiLFxuICAgICAgICAgIGRpc2FibGVkOiBfdGhpcy5fb25seUNvbHVtbihjb2x1bW4pXG4gICAgICAgIH0sXG4gICAgICAgIGRvbVByb3BzOiB7XG4gICAgICAgICAgXCJ2YWx1ZVwiOiBjb2x1bW4sXG4gICAgICAgICAgXCJjaGVja2VkXCI6IF90aGlzLmFsbENvbHVtbnMuaW5jbHVkZXMoY29sdW1uKVxuICAgICAgICB9XG4gICAgICB9KSwgX3RoaXMuZ2V0SGVhZGluZyhjb2x1bW4pXSkpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIGgoXCJkaXZcIiwge1xuICAgICAgcmVmOiBcImNvbHVtbnNkcm9wZG93blwiLFxuICAgICAgXCJjbGFzc1wiOiBcIlwiLmNvbmNhdChjbGFzc2VzLmRyb3Bkb3duLmNvbnRhaW5lciwgXCIgXCIpLmNvbmNhdChjbGFzc2VzLnJpZ2h0LCBcIiBWdWVUYWJsZXNfX2NvbHVtbnMtZHJvcGRvd25cIilcbiAgICB9LCBbaChcImJ1dHRvblwiLCB7XG4gICAgICBhdHRyczoge1xuICAgICAgICB0eXBlOiBcImJ1dHRvblwiXG4gICAgICB9LFxuICAgICAgXCJjbGFzc1wiOiBcIlwiLmNvbmNhdChjbGFzc2VzLmJ1dHRvbiwgXCIgXCIpLmNvbmNhdChjbGFzc2VzLmRyb3Bkb3duLnRyaWdnZXIpLFxuICAgICAgb246IHtcbiAgICAgICAgXCJjbGlja1wiOiBfdGhpcy5fdG9nZ2xlQ29sdW1uc0Ryb3Bkb3duLmJpbmQoX3RoaXMpXG4gICAgICB9XG4gICAgfSwgW190aGlzLmRpc3BsYXkoJ2NvbHVtbnMnKSwgaChcInNwYW5cIiwge1xuICAgICAgXCJjbGFzc1wiOiBcIlwiLmNvbmNhdChjbGFzc2VzLmljb24sIFwiIFwiKS5jb25jYXQoY2xhc3Nlcy5zbWFsbClcbiAgICB9LCBbaChcImlcIiwge1xuICAgICAgXCJjbGFzc1wiOiBjbGFzc2VzLmRyb3Bkb3duLmNhcmV0XG4gICAgfSldKV0pLCBkcm9wZG93bldyYXBwZXIuY2FsbChfdGhpcywgaCwgY2xhc3NlcywgY29scyldKTtcbiAgfTtcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGgpIHtcbiAgdmFyIF90aGlzID0gdGhpcztcblxuICByZXR1cm4gZnVuY3Rpb24gKGNvbHVtbikge1xuICAgIHJldHVybiBoKFwiZGl2XCIsIHtcbiAgICAgIFwiY2xhc3NcIjogXCJWdWVUYWJsZXNfX2RhdGUtZmlsdGVyXCIsXG4gICAgICBhdHRyczoge1xuICAgICAgICBpZDogJ1Z1ZVRhYmxlc19fJyArIGNvbHVtbiArICctZmlsdGVyJ1xuICAgICAgfVxuICAgIH0sIFtoKFwic3BhblwiLCB7XG4gICAgICBcImNsYXNzXCI6IFwiVnVlVGFibGVzX19maWx0ZXItcGxhY2Vob2xkZXJcIlxuICAgIH0sIFtfdGhpcy5kaXNwbGF5KCdmaWx0ZXJCeScsIHtcbiAgICAgIGNvbHVtbjogX3RoaXMuZ2V0SGVhZGluZyhjb2x1bW4pXG4gICAgfSldKV0pO1xuICB9O1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaCwgY2xhc3NlcywgaXRlbSkge1xuICBpZiAoY2xhc3Nlcy5mcmFtZXdvcmsgPT09ICdidWxtYScpIHtcbiAgICByZXR1cm4gaXRlbTtcbiAgfVxuXG4gIHJldHVybiBoKFwibGlcIiwgW2l0ZW1dKTtcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGgpIHtcbiAgdmFyIF90aGlzID0gdGhpcztcblxuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIGlmIChfdGhpcy5jb3VudCA+IDAgJiYgX3RoaXMub3B0cy5wYWdpbmF0aW9uLmRyb3Bkb3duKSB7XG4gICAgICB2YXIgcGVyUGFnZSA9IHBhcnNlSW50KF90aGlzLmxpbWl0KTtcbiAgICAgIHZhciBmcm9tID0gKF90aGlzLlBhZ2UgLSAxKSAqIHBlclBhZ2UgKyAxO1xuICAgICAgdmFyIHRvID0gX3RoaXMuUGFnZSA9PSBfdGhpcy50b3RhbFBhZ2VzID8gX3RoaXMuY291bnQgOiBmcm9tICsgcGVyUGFnZSAtIDE7XG5cbiAgICAgIHZhciBwYXJ0cyA9IF90aGlzLm9wdHMudGV4dHMuY291bnQuc3BsaXQoJ3wnKTtcblxuICAgICAgdmFyIGkgPSBNYXRoLm1pbihfdGhpcy5jb3VudCA9PSAxID8gMiA6IF90aGlzLnRvdGFsUGFnZXMgPT0gMSA/IDEgOiAwLCBwYXJ0cy5sZW5ndGggLSAxKTtcbiAgICAgIHZhciBjb3VudCA9IHBhcnRzW2ldLnJlcGxhY2UoJ3tjb3VudH0nLCBfdGhpcy5jb3VudCkucmVwbGFjZSgne2Zyb219JywgZnJvbSkucmVwbGFjZSgne3RvfScsIHRvKTtcbiAgICAgIHJldHVybiBoKFwiZGl2XCIsIHtcbiAgICAgICAgXCJjbGFzc1wiOiBcIlZ1ZVBhZ2luYXRpb25cIlxuICAgICAgfSwgW2goXCJwXCIsIHtcbiAgICAgICAgXCJjbGFzc1wiOiBcIlZ1ZVBhZ2luYXRpb25fX2NvdW50XCJcbiAgICAgIH0sIFtjb3VudF0pXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuICcnO1xuICB9O1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxudmFyIGRlYm91bmNlID0gcmVxdWlyZSgnZGVib3VuY2UnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaCkge1xuICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gIHJldHVybiBmdW5jdGlvbiAoc2VsZWN0Q2xhc3MsIGlkKSB7XG4gICAgdmFyIHBhZ2VzID0gW107XG4gICAgdmFyIHNlbGVjdGVkO1xuXG4gICAgZm9yICh2YXIgcGFnID0gMTsgcGFnIDw9IF90aGlzLnRvdGFsUGFnZXM7IHBhZysrKSB7XG4gICAgICB2YXIgc2VsZWN0ZWQgPSBfdGhpcy5wYWdlID09IHBhZztcbiAgICAgIHBhZ2VzLnB1c2goaChcIm9wdGlvblwiLCB7XG4gICAgICAgIGRvbVByb3BzOiB7XG4gICAgICAgICAgXCJ2YWx1ZVwiOiBwYWcsXG4gICAgICAgICAgXCJzZWxlY3RlZFwiOiBzZWxlY3RlZFxuICAgICAgICB9XG4gICAgICB9LCBbcGFnXSkpO1xuICAgIH1cblxuICAgIHJldHVybiBoKFwic2VsZWN0XCIsIHtcbiAgICAgIFwiY2xhc3NcIjogXCJcIi5jb25jYXQoc2VsZWN0Q2xhc3MsIFwiIGRyb3Bkb3duLXBhZ2luYXRpb25cIiksXG4gICAgICBkaXJlY3RpdmVzOiBbe1xuICAgICAgICBuYW1lOiBcInNob3dcIixcbiAgICAgICAgdmFsdWU6IF90aGlzLnRvdGFsUGFnZXMgPiAxXG4gICAgICB9XSxcbiAgICAgIGF0dHJzOiB7XG4gICAgICAgIG5hbWU6IFwicGFnZVwiLFxuICAgICAgICBpZDogaWRcbiAgICAgIH0sXG4gICAgICByZWY6IFwicGFnZVwiLFxuICAgICAgZG9tUHJvcHM6IHtcbiAgICAgICAgXCJ2YWx1ZVwiOiBfdGhpcy5wYWdlXG4gICAgICB9LFxuICAgICAgb246IHtcbiAgICAgICAgXCJjaGFuZ2VcIjogX3RoaXMuc2V0UGFnZS5iaW5kKF90aGlzLCBudWxsLCBmYWxzZSlcbiAgICAgIH1cbiAgICB9LCBbcGFnZXNdKTtcbiAgfTtcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGgsIGNsYXNzZXMsIGNvbHVtbnMpIHtcbiAgaWYgKGNsYXNzZXMuZnJhbWV3b3JrID09PSAnYnVsbWEnKSB7XG4gICAgcmV0dXJuIGgoXCJkaXZcIiwge1xuICAgICAgXCJjbGFzc1wiOiBjbGFzc2VzLmRyb3Bkb3duLm1lbnUsXG4gICAgICBzdHlsZTogdGhpcy5kaXNwbGF5Q29sdW1uc0Ryb3Bkb3duID8gJ2Rpc3BsYXk6YmxvY2snIDogJ2Rpc3BsYXk6bm9uZSdcbiAgICB9LCBbaChcImRpdlwiLCB7XG4gICAgICBcImNsYXNzXCI6IGNsYXNzZXMuZHJvcGRvd24uY29udGVudFxuICAgIH0sIFtjb2x1bW5zXSldKTtcbiAgfVxuXG4gIGlmIChjbGFzc2VzLmZyYW1ld29yayA9PT0gJ2Jvb3RzdHJhcDQnKSB7XG4gICAgcmV0dXJuIGgoXCJkaXZcIiwge1xuICAgICAgXCJjbGFzc1wiOiBjbGFzc2VzLmRyb3Bkb3duLm1lbnUsXG4gICAgICBzdHlsZTogdGhpcy5kaXNwbGF5Q29sdW1uc0Ryb3Bkb3duID8gJ2Rpc3BsYXk6YmxvY2snIDogJ2Rpc3BsYXk6bm9uZSdcbiAgICB9LCBbY29sdW1uc10pO1xuICB9XG5cbiAgcmV0dXJuIGgoXCJ1bFwiLCB7XG4gICAgXCJjbGFzc1wiOiBjbGFzc2VzLmRyb3Bkb3duLm1lbnUsXG4gICAgc3R5bGU6IHRoaXMuZGlzcGxheUNvbHVtbnNEcm9wZG93biA/ICdkaXNwbGF5OmJsb2NrJyA6ICdkaXNwbGF5Om5vbmUnXG4gIH0sIFtjb2x1bW5zXSk7XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChoKSB7XG4gIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIChyaWdodCkge1xuICAgIHZhciB0aGF0ID0gX3RoaXM7XG5cbiAgICB2YXIgc29ydENvbnRyb2wgPSByZXF1aXJlKFwiLi9zb3J0LWNvbnRyb2xcIikoaCwgcmlnaHQpO1xuXG4gICAgdmFyIGhlYWRpbmdzID0gW107XG4gICAgaWYgKF90aGlzLmhhc0NoaWxkUm93ICYmIF90aGlzLm9wdHMuY2hpbGRSb3dUb2dnbGVyRmlyc3QgJiYgX3RoaXMub3B0cy5zaG93Q2hpbGRSb3dUb2dnbGVyKSBoZWFkaW5ncy5wdXNoKGgoXCJ0aFwiKSk7XG5cbiAgICBfdGhpcy5hbGxDb2x1bW5zLm1hcChmdW5jdGlvbiAoY29sdW1uKSB7XG4gICAgICBoZWFkaW5ncy5wdXNoKGgoXCJ0aFwiLCB7XG4gICAgICAgIG9uOiB7XG4gICAgICAgICAgXCJrZXlwcmVzc1wiOiBmdW5jdGlvbiBrZXlwcmVzcyhlKSB7XG4gICAgICAgICAgICBpZiAoZS5rZXkgPT09IFwiRW50ZXJcIikge1xuICAgICAgICAgICAgICB0aGF0Lm9yZGVyQnlDb2x1bW4uYmluZCh0aGF0LCBjb2x1bW4sIGUpKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImNsaWNrXCI6IGZ1bmN0aW9uIGNsaWNrKGUpIHtcbiAgICAgICAgICAgIGlmIChlLnRhcmdldC5jbGFzc05hbWUgIT09IFwicmVzaXplLWhhbmRsZVwiKSB7XG4gICAgICAgICAgICAgIHRoYXQub3JkZXJCeUNvbHVtbi5iaW5kKHRoYXQsIGNvbHVtbiwgZSkoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgaWQ6IFwiVnVlVGFibGVzX3RoLS1cIi5jb25jYXQoY29sdW1uKSxcbiAgICAgICAgICB0YWJpbmRleDogXCIwXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJjbGFzc1wiOiB0aGlzLnNvcnRhYmxlQ2xhc3MoY29sdW1uKVxuICAgICAgfSwgW2goXCJzcGFuXCIsIHtcbiAgICAgICAgXCJjbGFzc1wiOiBcIlZ1ZVRhYmxlc19faGVhZGluZ1wiLFxuICAgICAgICBhdHRyczoge1xuICAgICAgICAgIHRpdGxlOiB0aGlzLmdldEhlYWRpbmdUb29sdGlwKGNvbHVtbiwgaClcbiAgICAgICAgfVxuICAgICAgfSwgW3RoaXMuZ2V0SGVhZGluZyhjb2x1bW4sIGgpXSksIHNvcnRDb250cm9sLmNhbGwodGhpcywgY29sdW1uKV0pKTtcbiAgICB9LmJpbmQoX3RoaXMpKTtcblxuICAgIGlmIChfdGhpcy5oYXNDaGlsZFJvdyAmJiAhX3RoaXMub3B0cy5jaGlsZFJvd1RvZ2dsZXJGaXJzdCAmJiBfdGhpcy5vcHRzLnNob3dDaGlsZFJvd1RvZ2dsZXIpIGhlYWRpbmdzLnB1c2goaChcInRoXCIpKTtcbiAgICByZXR1cm4gaGVhZGluZ3M7XG4gIH07XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChoLCBzZWxlY3RDbGFzcykge1xuICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gIHJldHVybiBmdW5jdGlvbiAoY29sdW1uKSB7XG4gICAgdmFyIG9wdGlvbnMgPSBbXTtcbiAgICB2YXIgc2VsZWN0ZWQ7XG4gICAgdmFyIHNlYXJjaCA9IF90aGlzLnNvdXJjZSA9PSAnY2xpZW50JyA/IF90aGlzLnNlYXJjaC5iaW5kKF90aGlzLCBfdGhpcy5kYXRhKSA6IF90aGlzLnNlcnZlclNlYXJjaC5iaW5kKF90aGlzKTtcblxuICAgIHZhciBkaXNwbGF5YWJsZSA9IF90aGlzLm9wdHMubGlzdENvbHVtbnNbY29sdW1uXS5maWx0ZXIoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgIHJldHVybiAhaXRlbS5oaWRlO1xuICAgIH0pO1xuXG4gICAgZGlzcGxheWFibGUubWFwKGZ1bmN0aW9uIChvcHRpb24pIHtcbiAgICAgIHNlbGVjdGVkID0gb3B0aW9uLmlkID09IF90aGlzLnF1ZXJ5W2NvbHVtbl0gJiYgX3RoaXMucXVlcnlbY29sdW1uXSAhPT0gJyc7XG4gICAgICBvcHRpb25zLnB1c2goaChcIm9wdGlvblwiLCB7XG4gICAgICAgIGRvbVByb3BzOiB7XG4gICAgICAgICAgXCJ2YWx1ZVwiOiBvcHRpb24uaWQsXG4gICAgICAgICAgXCJzZWxlY3RlZFwiOiBzZWxlY3RlZFxuICAgICAgICB9XG4gICAgICB9LCBbb3B0aW9uLnRleHRdKSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGgoXCJkaXZcIiwge1xuICAgICAgXCJjbGFzc1wiOiBcIlZ1ZVRhYmxlc19fbGlzdC1maWx0ZXJcIixcbiAgICAgIGF0dHJzOiB7XG4gICAgICAgIGlkOiAnVnVlVGFibGVzX18nICsgY29sdW1uICsgJy1maWx0ZXInXG4gICAgICB9XG4gICAgfSwgW2goXCJzZWxlY3RcIiwge1xuICAgICAgXCJjbGFzc1wiOiBzZWxlY3RDbGFzcyxcbiAgICAgIG9uOiB7XG4gICAgICAgIFwiY2hhbmdlXCI6IHNlYXJjaFxuICAgICAgfSxcbiAgICAgIGF0dHJzOiB7XG4gICAgICAgIG5hbWU6IF90aGlzLl9nZXRDb2x1bW5OYW1lKGNvbHVtbilcbiAgICAgIH0sXG4gICAgICBkb21Qcm9wczoge1xuICAgICAgICBcInZhbHVlXCI6IF90aGlzLnF1ZXJ5W2NvbHVtbl1cbiAgICAgIH1cbiAgICB9LCBbaChcIm9wdGlvblwiLCB7XG4gICAgICBhdHRyczoge1xuICAgICAgICB2YWx1ZTogXCJcIlxuICAgICAgfVxuICAgIH0sIFtfdGhpcy5kaXNwbGF5KCdkZWZhdWx0T3B0aW9uJywge1xuICAgICAgY29sdW1uOiBfdGhpcy5vcHRzLmhlYWRpbmdzW2NvbHVtbl0gPyBfdGhpcy5vcHRzLmhlYWRpbmdzW2NvbHVtbl0gOiBjb2x1bW5cbiAgICB9KV0pLCBvcHRpb25zXSldKTtcbiAgfTtcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBkZWJvdW5jZSA9IHJlcXVpcmUoJ2RlYm91bmNlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGgpIHtcbiAgdmFyIF90aGlzID0gdGhpcztcblxuICByZXR1cm4gZnVuY3Rpb24gKGNsYXNzZXMsIGlkKSB7XG4gICAgdmFyIHNlYXJjaCA9IF90aGlzLnNvdXJjZSA9PSAnY2xpZW50JyA/IF90aGlzLnNlYXJjaC5iaW5kKF90aGlzLCBfdGhpcy5kYXRhKSA6IF90aGlzLnNlcnZlclNlYXJjaC5iaW5kKF90aGlzKTtcbiAgICByZXR1cm4gaChcImlucHV0XCIsIHtcbiAgICAgIFwiY2xhc3NcIjogXCJWdWVUYWJsZXNfX3NlYXJjaF9faW5wdXQgXCIuY29uY2F0KGNsYXNzZXMuaW5wdXQsIFwiIFwiKS5jb25jYXQoY2xhc3Nlcy5zbWFsbCksXG4gICAgICBhdHRyczoge1xuICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgcGxhY2Vob2xkZXI6IF90aGlzLmRpc3BsYXkoJ2ZpbHRlclBsYWNlaG9sZGVyJyksXG4gICAgICAgIGlkOiBpZCxcbiAgICAgICAgYXV0b2NvbXBsZXRlOiBcIm9mZlwiXG4gICAgICB9LFxuICAgICAgb246IHtcbiAgICAgICAgXCJrZXl1cFwiOiBfdGhpcy5vcHRzLmRlYm91bmNlID8gZGVib3VuY2Uoc2VhcmNoLCBfdGhpcy5vcHRzLmRlYm91bmNlKSA6IHNlYXJjaFxuICAgICAgfVxuICAgIH0pO1xuICB9O1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaCkge1xuICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gIHJldHVybiBmdW5jdGlvbiAodGhlbWUpIHtcbiAgICBpZiAoX3RoaXMub3B0cy5wYWdpbmF0aW9uICYmIF90aGlzLm9wdHMucGFnaW5hdGlvbi5kcm9wZG93bikgcmV0dXJuICcnO1xuICAgIHZhciBvcHRpb25zID0ge1xuICAgICAgdGhlbWU6IHRoZW1lLFxuICAgICAgY2h1bms6IF90aGlzLm9wdHMucGFnaW5hdGlvbi5jaHVuayxcbiAgICAgIGNodW5rc05hdmlnYXRpb246IF90aGlzLm9wdHMucGFnaW5hdGlvbi5uYXYsXG4gICAgICBlZGdlTmF2aWdhdGlvbjogX3RoaXMub3B0cy5wYWdpbmF0aW9uLmVkZ2UsXG4gICAgICB0ZXh0czoge1xuICAgICAgICBjb3VudDogX3RoaXMub3B0cy50ZXh0cy5jb3VudCxcbiAgICAgICAgZmlyc3Q6IF90aGlzLm9wdHMudGV4dHMuZmlyc3QsXG4gICAgICAgIGxhc3Q6IF90aGlzLm9wdHMudGV4dHMubGFzdFxuICAgICAgfVxuICAgIH07XG4gICAgdmFyIG5hbWUgPSBfdGhpcy52dWV4ID8gX3RoaXMubmFtZSA6IF90aGlzLmlkO1xuICAgIHJldHVybiBoKFwicGFnaW5hdGlvblwiLCB7XG4gICAgICByZWY6IFwicGFnaW5hdGlvblwiLFxuICAgICAgYXR0cnM6IHtcbiAgICAgICAgb3B0aW9uczogb3B0aW9ucyxcbiAgICAgICAgXCJmb3JcIjogbmFtZSxcbiAgICAgICAgdnVleDogX3RoaXMudnVleCxcbiAgICAgICAgcmVjb3JkczogX3RoaXMuY291bnQsXG4gICAgICAgIFwicGVyLXBhZ2VcIjogcGFyc2VJbnQoX3RoaXMubGltaXQpXG4gICAgICB9LFxuICAgICAgb246IHtcbiAgICAgICAgXCJwYWdpbmF0ZVwiOiBfdGhpcy5fb25QYWdpbmF0aW9uLmJpbmQoX3RoaXMpXG4gICAgICB9XG4gICAgfSk7XG4gIH07XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChoKSB7XG4gIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgdmFyIHBlcnBhZ2VWYWx1ZXMgPSBbXTtcbiAgdGhpcy5vcHRzLnBlclBhZ2VWYWx1ZXMuZXZlcnkoZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgdmFyIGlzTGFzdEVudHJ5ID0gdmFsdWUgPj0gX3RoaXMuY291bnQ7XG4gICAgdmFyIHNlbGVjdGVkID0gX3RoaXMubGltaXQgPT0gdmFsdWUgfHwgaXNMYXN0RW50cnkgJiYgX3RoaXMubGltaXQgPiB2YWx1ZTtcbiAgICBwZXJwYWdlVmFsdWVzLnB1c2goaChcIm9wdGlvblwiLCB7XG4gICAgICBkb21Qcm9wczoge1xuICAgICAgICBcInZhbHVlXCI6IHZhbHVlLFxuICAgICAgICBcInNlbGVjdGVkXCI6IHNlbGVjdGVkXG4gICAgICB9XG4gICAgfSwgW3ZhbHVlXSkpO1xuICAgIHJldHVybiAhaXNMYXN0RW50cnk7XG4gIH0pO1xuICByZXR1cm4gcGVycGFnZVZhbHVlcztcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGgpIHtcbiAgdmFyIF90aGlzID0gdGhpcztcblxuICByZXR1cm4gZnVuY3Rpb24gKHBlcnBhZ2VWYWx1ZXMsIGNscywgaWQpIHtcbiAgICByZXR1cm4gaChcInNlbGVjdFwiLCB7XG4gICAgICBcImNsYXNzXCI6IGNscyxcbiAgICAgIGF0dHJzOiB7XG4gICAgICAgIG5hbWU6IFwibGltaXRcIixcbiAgICAgICAgaWQ6IGlkXG4gICAgICB9LFxuICAgICAgZG9tUHJvcHM6IHtcbiAgICAgICAgXCJ2YWx1ZVwiOiBfdGhpcy5saW1pdFxuICAgICAgfSxcbiAgICAgIG9uOiB7XG4gICAgICAgIFwiY2hhbmdlXCI6IF90aGlzLnNldExpbWl0LmJpbmQoX3RoaXMpXG4gICAgICB9XG4gICAgfSwgW3BlcnBhZ2VWYWx1ZXNdKTtcbiAgfTtcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBfYmFiZWxIZWxwZXJWdWVKc3hNZXJnZVByb3BzID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiYmFiZWwtaGVscGVyLXZ1ZS1qc3gtbWVyZ2UtcHJvcHNcIikpO1xuXG52YXIgX2Nsb25lID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiY2xvbmVcIikpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBcImRlZmF1bHRcIjogb2JqIH07IH1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaCkge1xuICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gIHJldHVybiBmdW5jdGlvbiAoY2xhc3Nlcykge1xuICAgIHZhciBkYXRhO1xuXG4gICAgaWYgKF90aGlzLnNvdXJjZSA9PT0gJ2NsaWVudCcpIHtcbiAgICAgIGRhdGEgPSBfdGhpcy5maWx0ZXJlZERhdGE7XG5cbiAgICAgIGlmICghZGF0YS5sZW5ndGggJiYgX3RoaXMuc291cmNlID09PSAnY2xpZW50JyAmJiBfdGhpcy5wYWdlICE9PSAxKSB7XG4gICAgICAgIC8vIGRhdGEgd2FzIGR5bmFtaWNhbGx5IHJlbW92ZWQgZ28gdG8gbGFzdCBwYWdlXG4gICAgICAgIF90aGlzLnNldFBhZ2UoX3RoaXMudG90YWxQYWdlcyA/IF90aGlzLnRvdGFsUGFnZXMgOiAxKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgZGF0YSA9IF90aGlzLnRhYmxlRGF0YTtcbiAgICB9XG5cbiAgICBpZiAoZGF0YS5sZW5ndGggPT09IDApIHtcbiAgICAgIHZhciBjb2xzcGFuID0gX3RoaXMuYWxsQ29sdW1ucy5sZW5ndGg7XG4gICAgICBpZiAoX3RoaXMuaGFzQ2hpbGRSb3cgJiYgX3RoaXMub3B0cy5zaG93Q2hpbGRSb3dUb2dnbGVyKSBjb2xzcGFuKys7XG4gICAgICByZXR1cm4gaChcInRyXCIsIHtcbiAgICAgICAgXCJjbGFzc1wiOiBcIlZ1ZVRhYmxlc19fbm8tcmVzdWx0c1wiXG4gICAgICB9LCBbaChcInRkXCIsIHtcbiAgICAgICAgXCJjbGFzc1wiOiBcInRleHQtY2VudGVyXCIsXG4gICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgdGFiaW5kZXg6IFwiMFwiLFxuICAgICAgICAgIGNvbHNwYW46IF90aGlzLmNvbHNwYW5cbiAgICAgICAgfVxuICAgICAgfSwgW190aGlzLmRpc3BsYXkoX3RoaXMubG9hZGluZyA/ICdsb2FkaW5nJyA6ICdub1Jlc3VsdHMnKV0pXSk7XG4gICAgfVxuXG4gICAgdmFyIHJvd3MgPSBbXTtcbiAgICB2YXIgY29sdW1ucztcbiAgICB2YXIgcm93S2V5ID0gX3RoaXMub3B0cy51bmlxdWVLZXk7XG4gICAgdmFyIHJvd0F0dHJpYnV0ZXM7XG4gICAgdmFyIHJvd0NsYXNzO1xuICAgIHZhciByZWNvcmRDb3VudCA9IChfdGhpcy5QYWdlIC0gMSkgKiBfdGhpcy5saW1pdDtcbiAgICB2YXIgY3VycmVudEdyb3VwO1xuICAgIHZhciBncm91cFNsb3Q7XG4gICAgdmFyIGdyb3VwVmFsdWU7XG4gICAgdmFyIGdyb3VwQnlDb250ZW50O1xuICAgIGRhdGEubWFwKGZ1bmN0aW9uIChyb3csIGluZGV4KSB7XG4gICAgICBpZiAoX3RoaXMub3B0cy5ncm91cEJ5ICYmIF90aGlzLnNvdXJjZSA9PT0gJ2NsaWVudCcgJiYgcm93W190aGlzLm9wdHMuZ3JvdXBCeV0gIT09IGN1cnJlbnRHcm91cCkge1xuICAgICAgICBncm91cFNsb3QgPSBfdGhpcy5nZXRHcm91cFNsb3Qocm93W190aGlzLm9wdHMuZ3JvdXBCeV0pO1xuICAgICAgICBncm91cFZhbHVlID0gcm93W190aGlzLm9wdHMuZ3JvdXBCeV07XG4gICAgICAgIGdyb3VwQnlDb250ZW50ID0gX3RoaXMub3B0cy50b2dnbGVHcm91cHMgPyBoKFwiYnV0dG9uXCIsIHtcbiAgICAgICAgICBcImNsYXNzXCI6IGNsYXNzZXMuYnV0dG9uLFxuICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICBcImNsaWNrXCI6IF90aGlzLnRvZ2dsZUdyb3VwLmJpbmQoX3RoaXMsIGdyb3VwVmFsdWUpXG4gICAgICAgICAgfVxuICAgICAgICB9LCBbZ3JvdXBWYWx1ZSwgaChcInNwYW5cIiwge1xuICAgICAgICAgIFwiY2xhc3NcIjogX3RoaXMuZ3JvdXBUb2dnbGVJY29uKGdyb3VwVmFsdWUpXG4gICAgICAgIH0pXSkgOiBncm91cFZhbHVlO1xuICAgICAgICByb3dzLnB1c2goaChcInRyXCIsIHtcbiAgICAgICAgICBcImNsYXNzXCI6IGNsYXNzZXMuZ3JvdXBUcixcbiAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgXCJjbGlja1wiOiBfdGhpcy5fdG9nZ2xlR3JvdXBEaXJlY3Rpb24uYmluZChfdGhpcylcbiAgICAgICAgICB9XG4gICAgICAgIH0sIFtoKFwidGRcIiwge1xuICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICBjb2xzcGFuOiBfdGhpcy5jb2xzcGFuXG4gICAgICAgICAgfVxuICAgICAgICB9LCBbZ3JvdXBCeUNvbnRlbnQsIGdyb3VwU2xvdF0pXSkpO1xuICAgICAgICBjdXJyZW50R3JvdXAgPSByb3dbX3RoaXMub3B0cy5ncm91cEJ5XTtcbiAgICAgIH1cblxuICAgICAgaWYgKF90aGlzLm9wdHMudG9nZ2xlR3JvdXBzICYmIF90aGlzLmNvbGxhcHNlZEdyb3Vwcy5pbmNsdWRlcyhjdXJyZW50R3JvdXApKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaW5kZXggPSByZWNvcmRDb3VudCArIGluZGV4ICsgMTtcbiAgICAgIGNvbHVtbnMgPSBbXTtcbiAgICAgIHZhciB1cGRhdGU7XG4gICAgICB2YXIgaXNFZGl0aW5nO1xuICAgICAgdmFyIHNldEVkaXRpbmc7XG4gICAgICB2YXIgcmV2ZXJ0VmFsdWU7XG5cbiAgICAgIGlmIChfdGhpcy5oYXNDaGlsZFJvdyAmJiBfdGhpcy5vcHRzLnNob3dDaGlsZFJvd1RvZ2dsZXIpIHtcbiAgICAgICAgdmFyIGNoaWxkUm93VG9nZ2xlciA9IGgoXCJ0ZFwiLCB7XG4gICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgIHRhYmluZGV4OiBcIjBcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgb246IHtcbiAgICAgICAgICAgIFwia2V5cHJlc3NcIjogZnVuY3Rpb24ga2V5cHJlc3MoZSkge1xuICAgICAgICAgICAgICBpZiAoZS5rZXkgPT09ICdFbnRlcicpIHtcbiAgICAgICAgICAgICAgICBfdGhpcy50b2dnbGVDaGlsZFJvdy5iaW5kKF90aGlzLCByb3dbcm93S2V5XSkoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFwiY2xpY2tcIjogX3RoaXMudG9nZ2xlQ2hpbGRSb3cuYmluZChfdGhpcywgcm93W3Jvd0tleV0pXG4gICAgICAgICAgfVxuICAgICAgICB9LCBbaChcInNwYW5cIiwge1xuICAgICAgICAgIFwiY2xhc3NcIjogXCJWdWVUYWJsZXNfX2NoaWxkLXJvdy10b2dnbGVyIFwiICsgX3RoaXMuY2hpbGRSb3dUb2dnbGVyQ2xhc3Mocm93W3Jvd0tleV0pXG4gICAgICAgIH0pXSk7XG4gICAgICAgIGlmIChfdGhpcy5vcHRzLmNoaWxkUm93VG9nZ2xlckZpcnN0KSBjb2x1bW5zLnB1c2goY2hpbGRSb3dUb2dnbGVyKTtcbiAgICAgIH1cblxuICAgICAgX3RoaXMuYWxsQ29sdW1ucy5tYXAoZnVuY3Rpb24gKGNvbHVtbikge1xuICAgICAgICB2YXIgcm93VGVtcGxhdGUgPSBfdGhpcy4kc2NvcGVkU2xvdHMgJiYgX3RoaXMuJHNjb3BlZFNsb3RzW2NvbHVtbl07XG5cbiAgICAgICAgaWYgKHJvd1RlbXBsYXRlKSB7XG4gICAgICAgICAgdmFyIHJvd1RlbXBsYXRlRGF0YSA9IHtcbiAgICAgICAgICAgIHJvdzogcm93LFxuICAgICAgICAgICAgY29sdW1uOiBjb2x1bW4sXG4gICAgICAgICAgICBpbmRleDogaW5kZXhcbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKF90aGlzLm9wdHMuZWRpdGFibGVDb2x1bW5zLmluY2x1ZGVzKGNvbHVtbikpIHtcbiAgICAgICAgICByb3dUZW1wbGF0ZURhdGEudXBkYXRlID0gdXBkYXRlVmFsdWUocm93LCBjb2x1bW4pLmJpbmQoX3RoaXMpO1xuICAgICAgICAgIHJvd1RlbXBsYXRlRGF0YS5pc0VkaXRpbmcgPSBlZGl0aW5nKHJvdywgY29sdW1uKS5iaW5kKF90aGlzKTtcbiAgICAgICAgICByb3dUZW1wbGF0ZURhdGEuc2V0RWRpdGluZyA9IHNldEVkaXQocm93LCBjb2x1bW4pLmJpbmQoX3RoaXMpO1xuICAgICAgICAgIHJvd1RlbXBsYXRlRGF0YS5yZXZlcnRWYWx1ZSA9IHJldmVydFZhbChyb3csIGNvbHVtbikuYmluZChfdGhpcyk7XG4gICAgICAgIH1cblxuICAgICAgICBjb2x1bW5zLnB1c2goaChcInRkXCIsIHtcbiAgICAgICAgICBcImNsYXNzXCI6IFwiXCIuY29uY2F0KF90aGlzLmNvbHVtbkNsYXNzKGNvbHVtbiksIFwiIFwiKS5jb25jYXQoX3RoaXMuX2NlbGxDbGFzc2VzKGNvbHVtbiwgcm93KSkudHJpbSgpLFxuICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICB0YWJpbmRleDogXCIwXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sIFtyb3dUZW1wbGF0ZSA/IHJvd1RlbXBsYXRlKHJvd1RlbXBsYXRlRGF0YSkgOiBfdGhpcy5yZW5kZXIocm93LCBjb2x1bW4sIGluZGV4LCBoKV0pKTtcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoX3RoaXMuaGFzQ2hpbGRSb3cgJiYgIV90aGlzLm9wdHMuY2hpbGRSb3dUb2dnbGVyRmlyc3QgJiYgX3RoaXMub3B0cy5zaG93Q2hpbGRSb3dUb2dnbGVyKSBjb2x1bW5zLnB1c2goY2hpbGRSb3dUb2dnbGVyKTtcbiAgICAgIHJvd0NsYXNzID0gX3RoaXMub3B0cy5yb3dDbGFzc0NhbGxiYWNrID8gX3RoaXMub3B0cy5yb3dDbGFzc0NhbGxiYWNrKHJvdykgOiAnJztcbiAgICAgIHJvd0F0dHJpYnV0ZXMgPSBfdGhpcy5vcHRzLnJvd0F0dHJpYnV0ZXNDYWxsYmFjayA/IF90aGlzLm9wdHMucm93QXR0cmlidXRlc0NhbGxiYWNrKHJvdykgOiB7fTtcbiAgICAgIHJvd3MucHVzaChoKFwidHJcIiwgKDAsIF9iYWJlbEhlbHBlclZ1ZUpzeE1lcmdlUHJvcHNbXCJkZWZhdWx0XCJdKShbe1xuICAgICAgICBhdHRyczogcm93QXR0cmlidXRlc1xuICAgICAgfSwge1xuICAgICAgICBcImNsYXNzXCI6IFwiVnVlVGFibGVzX19yb3cgXCIuY29uY2F0KHJvd0NsYXNzKSxcbiAgICAgICAgb246IHtcbiAgICAgICAgICBcImNsaWNrXCI6IF90aGlzLnJvd1dhc0NsaWNrZWQuYmluZChfdGhpcywgcm93LCBpbmRleClcbiAgICAgICAgfVxuICAgICAgfV0pLCBbY29sdW1ucywgXCIgXCJdKSk7XG4gICAgICByb3dzLnB1c2goX3RoaXMuaGFzQ2hpbGRSb3cgJiYgX3RoaXMub3BlbkNoaWxkUm93cy5pbmNsdWRlcyhyb3dbcm93S2V5XSkgPyBoKFwidHJcIiwge1xuICAgICAgICBcImNsYXNzXCI6IFwiVnVlVGFibGVzX19jaGlsZC1yb3cgXCIuY29uY2F0KHJvd0NsYXNzKVxuICAgICAgfSwgW2goXCJ0ZFwiLCB7XG4gICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgY29sc3BhbjogX3RoaXMuY29sc3BhbixcbiAgICAgICAgICB0YWJpbmRleDogXCIwXCJcbiAgICAgICAgfVxuICAgICAgfSwgW190aGlzLl9nZXRDaGlsZFJvd1RlbXBsYXRlKGgsIHJvdywgaW5kZXgpXSldKSA6IGgoKSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHJvd3M7XG4gIH07XG59O1xuXG5mdW5jdGlvbiBzZXRFZGl0KHJvdywgY29sdW1uKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoZWRpdGluZykge1xuICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgaWYgKGVkaXRpbmcpIHtcbiAgICAgIHRoaXMuZWRpdGluZy5wdXNoKHtcbiAgICAgICAgaWQ6IHJvd1t0aGlzLm9wdHMudW5pcXVlS2V5XSxcbiAgICAgICAgY29sdW1uOiBjb2x1bW4sXG4gICAgICAgIG9yaWdpbmFsVmFsdWU6IHJvd1tjb2x1bW5dXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5lZGl0aW5nID0gdGhpcy5lZGl0aW5nLmZpbHRlcihmdW5jdGlvbiAoZSkge1xuICAgICAgICByZXR1cm4gZS5pZCAhPT0gcm93W190aGlzMi5vcHRzLnVuaXF1ZUtleV07XG4gICAgICB9KTtcbiAgICB9XG4gIH07XG59XG5cbmZ1bmN0aW9uIGVkaXRpbmcocm93LCBjb2x1bW4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgX3RoaXMzID0gdGhpcztcblxuICAgIHJldHVybiB0aGlzLmVkaXRpbmcuZmluZChmdW5jdGlvbiAoZSkge1xuICAgICAgcmV0dXJuIGUuaWQgPT09IHJvd1tfdGhpczMub3B0cy51bmlxdWVLZXldICYmIGUuY29sdW1uID09PSBjb2x1bW47XG4gICAgfSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHJldmVydFZhbChyb3csIGNvbHVtbikge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHZhciBfdGhpczQgPSB0aGlzO1xuXG4gICAgdmFyIG9yaWdWYWwgPSB0aGlzLmVkaXRpbmcuZmluZChmdW5jdGlvbiAoZSkge1xuICAgICAgcmV0dXJuIGUuaWQgPT09IHJvd1tfdGhpczQub3B0cy51bmlxdWVLZXldO1xuICAgIH0pLm9yaWdpbmFsVmFsdWU7XG4gICAgcm93W2NvbHVtbl0gPSBvcmlnVmFsO1xuICB9O1xufVxuXG5mdW5jdGlvbiB1cGRhdGVWYWx1ZShyb3csIGNvbHVtbikge1xuICByZXR1cm4gZnVuY3Rpb24gKGUpIHtcbiAgICB2YXIgX3RoaXM1ID0gdGhpcztcblxuICAgIHZhciBvbGRWYWwgPSByb3dbY29sdW1uXTtcbiAgICByb3dbY29sdW1uXSA9IGdldFZhbHVlKGUpO1xuICAgIHZhciBkYXRhID0gKDAsIF9jbG9uZVtcImRlZmF1bHRcIl0pKHRoaXMuZGF0YSkubWFwKGZ1bmN0aW9uIChyKSB7XG4gICAgICBpZiAocltfdGhpczUub3B0cy51bmlxdWVLZXldID09PSByb3dbX3RoaXM1Lm9wdHMudW5pcXVlS2V5XSkge1xuICAgICAgICByZXR1cm4gcm93O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcjtcbiAgICB9KTtcbiAgICB0aGlzLiRlbWl0KCdpbnB1dCcsIGRhdGEpO1xuICAgIHRoaXMuJGVtaXQoJ3VwZGF0ZScsIHtcbiAgICAgIHJvdzogcm93LFxuICAgICAgY29sdW1uOiBjb2x1bW4sXG4gICAgICBvbGRWYWw6IG9sZFZhbCxcbiAgICAgIG5ld1ZhbDogcm93W2NvbHVtbl1cbiAgICB9KTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0VmFsdWUodmFsKSB7XG4gIGlmICh2YWwudGFyZ2V0KSB7XG4gICAgcmV0dXJuIHZhbC50YXJnZXQudHlwZSA9PT0gJ2NoZWNrYm94JyA/IHZhbC50YXJnZXQuY2hlY2tlZCA6IHZhbC50YXJnZXQudmFsdWU7XG4gIH1cblxuICByZXR1cm4gdmFsO1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChoLCByaWdodCkge1xuICByZXR1cm4gZnVuY3Rpb24gKGNvbHVtbikge1xuICAgIGlmICghdGhpcy5zb3J0YWJsZShjb2x1bW4pKSByZXR1cm4gJyc7XG4gICAgcmV0dXJuIGgoXCJzcGFuXCIsIHtcbiAgICAgIFwiY2xhc3NcIjogXCJWdWVUYWJsZXNfX3NvcnQtaWNvbiBcIi5jb25jYXQocmlnaHQsIFwiIFwiKS5jb25jYXQodGhpcy5zb3J0YWJsZUNoZXZyb25DbGFzcyhjb2x1bW4pKVxuICAgIH0pO1xuICB9O1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxudmFyIGRlYm91bmNlID0gcmVxdWlyZSgnZGVib3VuY2UnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaCwgaW5wdXRDbGFzcykge1xuICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gIHZhciBzZWFyY2ggPSB0aGlzLnNvdXJjZSA9PSAnY2xpZW50JyA/IHRoaXMuc2VhcmNoLmJpbmQodGhpcywgdGhpcy5kYXRhKSA6IHRoaXMuc2VydmVyU2VhcmNoLmJpbmQodGhpcyk7XG5cbiAgaWYgKHRoaXMub3B0cy5kZWJvdW5jZSkge1xuICAgIHZhciBkZWJvdW5jZWRTZWFyY2ggPSBkZWJvdW5jZShzZWFyY2gsIHRoaXMub3B0cy5kZWJvdW5jZSk7XG5cbiAgICB2YXIgb25LZXlVcCA9IGZ1bmN0aW9uIG9uS2V5VXAoZSkge1xuICAgICAgaWYgKGUua2V5Q29kZSA9PT0gOSkgcmV0dXJuO1xuXG4gICAgICBpZiAoZS5rZXlDb2RlID09PSAxMykge1xuICAgICAgICBkZWJvdW5jZWRTZWFyY2guY2xlYXIoKTtcbiAgICAgICAgc2VhcmNoLmFwcGx5KHZvaWQgMCwgYXJndW1lbnRzKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlYm91bmNlZFNlYXJjaC5hcHBseSh2b2lkIDAsIGFyZ3VtZW50cyk7XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiAoY29sdW1uKSB7XG4gICAgcmV0dXJuIGgoXCJpbnB1dFwiLCB7XG4gICAgICBvbjoge1xuICAgICAgICBcImtleXVwXCI6IF90aGlzLm9wdHMuZGVib3VuY2UgPyBvbktleVVwIDogc2VhcmNoXG4gICAgICB9LFxuICAgICAgXCJjbGFzc1wiOiBpbnB1dENsYXNzLFxuICAgICAgYXR0cnM6IHtcbiAgICAgICAgbmFtZTogX3RoaXMuX2dldENvbHVtbk5hbWUoY29sdW1uKSxcbiAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgIHBsYWNlaG9sZGVyOiBfdGhpcy5kaXNwbGF5KCdmaWx0ZXJCeScsIHtcbiAgICAgICAgICBjb2x1bW46IF90aGlzLmdldEhlYWRpbmcoY29sdW1uKVxuICAgICAgICB9KSxcbiAgICAgICAgYXV0b2NvbXBsZXRlOiBcIm9mZlwiXG4gICAgICB9XG4gICAgfSk7XG4gIH07XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHtcbiAgICBiZWZvcmVGaWx0ZXJzOiB0aGlzLiRzbG90cy5iZWZvcmVGaWx0ZXJzID8gdGhpcy4kc2xvdHMuYmVmb3JlRmlsdGVycyA6ICcnLFxuICAgIGFmdGVyRmlsdGVyczogdGhpcy4kc2xvdHMuYWZ0ZXJGaWx0ZXJzID8gdGhpcy4kc2xvdHMuYWZ0ZXJGaWx0ZXJzIDogJycsXG4gICAgcHJlcGVuZEhlYWQ6IHRoaXMuJHNsb3RzLnByZXBlbmRIZWFkID8gdGhpcy4kc2xvdHMucHJlcGVuZEhlYWQgOiAnJyxcbiAgICBiZWZvcmVCb2R5OiB0aGlzLiRzbG90cy5iZWZvcmVCb2R5ID8gdGhpcy4kc2xvdHMuYmVmb3JlQm9keSA6ICcnLFxuICAgIHByZXBlbmRCb2R5OiB0aGlzLiRzbG90cy5wcmVwZW5kQm9keSA/IHRoaXMuJHNsb3RzLnByZXBlbmRCb2R5IDogJycsXG4gICAgYXBwZW5kQm9keTogdGhpcy4kc2xvdHMuYXBwZW5kQm9keSA/IHRoaXMuJHNsb3RzLmFwcGVuZEJvZHkgOiAnJyxcbiAgICBhZnRlckJvZHk6IHRoaXMuJHNsb3RzLmFmdGVyQm9keSA/IHRoaXMuJHNsb3RzLmFmdGVyQm9keSA6ICcnLFxuICAgIGJlZm9yZUZpbHRlcjogdGhpcy4kc2xvdHMuYmVmb3JlRmlsdGVyID8gdGhpcy4kc2xvdHMuYmVmb3JlRmlsdGVyIDogJycsXG4gICAgYWZ0ZXJGaWx0ZXI6IHRoaXMuJHNsb3RzLmFmdGVyRmlsdGVyID8gdGhpcy4kc2xvdHMuYWZ0ZXJGaWx0ZXIgOiAnJyxcbiAgICBhZnRlckZpbHRlcldyYXBwZXI6IHRoaXMuJHNsb3RzLmFmdGVyRmlsdGVyV3JhcHBlciA/IHRoaXMuJHNsb3RzLmFmdGVyRmlsdGVyV3JhcHBlciA6ICcnLFxuICAgIGJlZm9yZVNlYXJjaDogdGhpcy4kc2xvdHMuYmVmb3JlU2VhcmNoID8gdGhpcy4kc2xvdHMuYmVmb3JlU2VhcmNoIDogJycsXG4gICAgYmVmb3JlTGltaXQ6IHRoaXMuJHNsb3RzLmJlZm9yZUxpbWl0ID8gdGhpcy4kc2xvdHMuYmVmb3JlTGltaXQgOiAnJyxcbiAgICBhZnRlckxpbWl0OiB0aGlzLiRzbG90cy5hZnRlckxpbWl0ID8gdGhpcy4kc2xvdHMuYWZ0ZXJMaW1pdCA6ICcnLFxuICAgIGJlZm9yZVRhYmxlOiB0aGlzLiRzbG90cy5iZWZvcmVUYWJsZSA/IHRoaXMuJHNsb3RzLmJlZm9yZVRhYmxlIDogJycsXG4gICAgYWZ0ZXJUYWJsZTogdGhpcy4kc2xvdHMuYWZ0ZXJUYWJsZSA/IHRoaXMuJHNsb3RzLmFmdGVyVGFibGUgOiAnJ1xuICB9O1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gX2RlZmF1bHQ7XG5cbnZhciBfbWVyZ2UgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCJtZXJnZVwiKSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IFwiZGVmYXVsdFwiOiBvYmogfTsgfVxuXG5mdW5jdGlvbiBfZGVmYXVsdCh1c2VWdWV4LCBzb3VyY2UpIHtcbiAgdmFyIHBhZ2UgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IDE7XG4gIHZhciBkYXRhID0ge1xuICAgIHZ1ZXg6IHRydWUsXG4gICAgYWN0aXZlU3RhdGU6IGZhbHNlLFxuICAgIHVzZXJDb2x1bW5zRGlzcGxheTogW10sXG4gICAgdXNlckNvbnRyb2xzQ29sdW1uczogZmFsc2UsXG4gICAgZGlzcGxheUNvbHVtbnNEcm9wZG93bjogZmFsc2UsXG4gICAgY29sbGFwc2VkR3JvdXBzOiBbXVxuICB9O1xuICBpZiAodXNlVnVleCkgcmV0dXJuIGRhdGE7XG4gIGRhdGEgPSAoMCwgX21lcmdlW1wiZGVmYXVsdFwiXSkoZGF0YSwge1xuICAgIHZ1ZXg6IGZhbHNlLFxuICAgIGNvdW50OiAwLFxuICAgIGN1c3RvbVF1ZXJpZXM6IHt9LFxuICAgIHF1ZXJ5OiBudWxsLFxuICAgIHBhZ2U6IHBhZ2UsXG4gICAgbGltaXQ6IDEwLFxuICAgIHdpbmRvd1dpZHRoOiB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/IHdpbmRvdy5pbm5lcldpZHRoIDogbnVsbCxcbiAgICBvcmRlckJ5OiB7XG4gICAgICBjb2x1bW46IGZhbHNlLFxuICAgICAgYXNjZW5kaW5nOiB0cnVlXG4gICAgfVxuICB9KTtcbiAgaWYgKHNvdXJjZSA9PSAnc2VydmVyJykgZGF0YS5kYXRhID0gW107XG4gIHJldHVybiBkYXRhO1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBfZGVmYXVsdDtcblxudmFyIF9tZXJnZSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIm1lcmdlXCIpKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgXCJkZWZhdWx0XCI6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbmZ1bmN0aW9uIF9kZWZhdWx0KHNlbGYpIHtcbiAgdmFyIF9yZWYsIF9tZXJnZSRyZWN1cnNpdmU7XG5cbiAgdmFyIGV4dHJhID0gc2VsZi5zb3VyY2UgPT0gJ3NlcnZlcicgPyAoX3JlZiA9IHt9LCBfZGVmaW5lUHJvcGVydHkoX3JlZiwgXCJcIi5jb25jYXQoc2VsZi5uYW1lLCBcIi9TRVRfREFUQVwiKSwgZnVuY3Rpb24gU0VUX0RBVEEoc3RhdGUsIHJlc3BvbnNlKSB7XG4gICAgdmFyIGRhdGEgPSBzZWxmLm9wdHMucmVzcG9uc2VBZGFwdGVyLmNhbGwoc2VsZiwgcmVzcG9uc2UpO1xuICAgIHN0YXRlLmRhdGEgPSBkYXRhLmRhdGE7XG4gICAgc3RhdGUuY291bnQgPSBwYXJzZUludChkYXRhLmNvdW50KTtcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfcmVmLCBcIlwiLmNvbmNhdChzZWxmLm5hbWUsIFwiL0xPQURJTkdcIiksIGZ1bmN0aW9uIExPQURJTkcoc3RhdGUsIHBheWxvYWQpIHt9KSwgX2RlZmluZVByb3BlcnR5KF9yZWYsIFwiXCIuY29uY2F0KHNlbGYubmFtZSwgXCIvTE9BREVEXCIpLCBmdW5jdGlvbiBMT0FERUQoc3RhdGUsIHBheWxvYWQpIHt9KSwgX2RlZmluZVByb3BlcnR5KF9yZWYsIFwiXCIuY29uY2F0KHNlbGYubmFtZSwgXCIvRVJST1JcIiksIGZ1bmN0aW9uIEVSUk9SKHN0YXRlLCBwYXlsb2FkKSB7fSksIF9yZWYpIDogX2RlZmluZVByb3BlcnR5KHt9LCBcIlwiLmNvbmNhdChzZWxmLm5hbWUsIFwiL1NFVF9DT1VOVFwiKSwgZnVuY3Rpb24gU0VUX0NPVU5UKHN0YXRlLCBjb3VudCkge1xuICAgIHN0YXRlLmNvdW50ID0gY291bnQ7XG4gIH0pO1xuICByZXR1cm4gX21lcmdlW1wiZGVmYXVsdFwiXS5yZWN1cnNpdmUodHJ1ZSwgKF9tZXJnZSRyZWN1cnNpdmUgPSB7fSwgX2RlZmluZVByb3BlcnR5KF9tZXJnZSRyZWN1cnNpdmUsIFwiXCIuY29uY2F0KHNlbGYubmFtZSwgXCIvUEFHSU5BVEVcIiksIGZ1bmN0aW9uIFBBR0lOQVRFKHN0YXRlLCBwYWdlKSB7XG4gICAgc3RhdGUucGFnZSA9IHBhZ2U7XG4gICAgc2VsZi51cGRhdGVTdGF0ZSgncGFnZScsIHBhZ2UpO1xuICAgIGlmIChzZWxmLnNvdXJjZSA9PSAnc2VydmVyJykgc2VsZi5nZXREYXRhKCk7XG4gICAgc2VsZi5jb21taXQoJ1BBR0lOQVRJT04nLCBwYWdlKTtcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfbWVyZ2UkcmVjdXJzaXZlLCBcIlwiLmNvbmNhdChzZWxmLm5hbWUsIFwiL1NFVF9GSUxURVJcIiksIGZ1bmN0aW9uIFNFVF9GSUxURVIoc3RhdGUsIGZpbHRlcikge1xuICAgIHN0YXRlLnBhZ2UgPSAxO1xuICAgIHNlbGYudXBkYXRlU3RhdGUoJ3BhZ2UnLCAxKTtcbiAgICBzdGF0ZS5xdWVyeSA9IGZpbHRlcjtcblxuICAgIGlmIChzZWxmLnNvdXJjZSA9PSAnc2VydmVyJykge1xuICAgICAgc2VsZi5nZXREYXRhKCk7XG4gICAgfVxuICB9KSwgX2RlZmluZVByb3BlcnR5KF9tZXJnZSRyZWN1cnNpdmUsIFwiXCIuY29uY2F0KHNlbGYubmFtZSwgXCIvUEFHSU5BVElPTlwiKSwgZnVuY3Rpb24gUEFHSU5BVElPTihzdGF0ZSwgcGFnZSkge30pLCBfZGVmaW5lUHJvcGVydHkoX21lcmdlJHJlY3Vyc2l2ZSwgXCJcIi5jb25jYXQoc2VsZi5uYW1lLCBcIi9TRVRfQ1VTVE9NX0ZJTFRFUlwiKSwgZnVuY3Rpb24gU0VUX0NVU1RPTV9GSUxURVIoc3RhdGUsIF9yZWYzKSB7XG4gICAgdmFyIGZpbHRlciA9IF9yZWYzLmZpbHRlcixcbiAgICAgICAgdmFsdWUgPSBfcmVmMy52YWx1ZTtcbiAgICBzdGF0ZS5jdXN0b21RdWVyaWVzW2ZpbHRlcl0gPSB2YWx1ZTtcbiAgICBzdGF0ZS5wYWdlID0gMTtcbiAgICBzZWxmLnVwZGF0ZVN0YXRlKCdwYWdlJywgMSk7XG4gICAgc2VsZi51cGRhdGVTdGF0ZSgnY3VzdG9tUXVlcmllcycsIHN0YXRlLmN1c3RvbVF1ZXJpZXMpO1xuXG4gICAgaWYgKHNlbGYuc291cmNlID09ICdzZXJ2ZXInKSB7XG4gICAgICBzZWxmLmdldERhdGEoKTtcbiAgICB9XG4gIH0pLCBfZGVmaW5lUHJvcGVydHkoX21lcmdlJHJlY3Vyc2l2ZSwgXCJcIi5jb25jYXQoc2VsZi5uYW1lLCBcIi9TRVRfU1RBVEVcIiksIGZ1bmN0aW9uIFNFVF9TVEFURShzdGF0ZSwgX3JlZjQpIHtcbiAgICB2YXIgcGFnZSA9IF9yZWY0LnBhZ2UsXG4gICAgICAgIHF1ZXJ5ID0gX3JlZjQucXVlcnksXG4gICAgICAgIGN1c3RvbVF1ZXJpZXMgPSBfcmVmNC5jdXN0b21RdWVyaWVzLFxuICAgICAgICBsaW1pdCA9IF9yZWY0LmxpbWl0LFxuICAgICAgICBvcmRlckJ5ID0gX3JlZjQub3JkZXJCeTtcbiAgICBzdGF0ZS5jdXN0b21RdWVyaWVzID0gY3VzdG9tUXVlcmllcztcbiAgICBzdGF0ZS5xdWVyeSA9IHF1ZXJ5O1xuICAgIHN0YXRlLnBhZ2UgPSBwYWdlO1xuICAgIHN0YXRlLmxpbWl0ID0gbGltaXQ7XG4gICAgc3RhdGUuYXNjZW5kaW5nID0gb3JkZXJCeS5hc2NlbmRpbmc7XG4gICAgc3RhdGUuc29ydEJ5ID0gb3JkZXJCeS5jb2x1bW47XG4gIH0pLCBfZGVmaW5lUHJvcGVydHkoX21lcmdlJHJlY3Vyc2l2ZSwgXCJcIi5jb25jYXQoc2VsZi5uYW1lLCBcIi9TRVRfTElNSVRcIiksIGZ1bmN0aW9uIFNFVF9MSU1JVChzdGF0ZSwgbGltaXQpIHtcbiAgICBzdGF0ZS5wYWdlID0gMTtcbiAgICBzZWxmLnVwZGF0ZVN0YXRlKCdwYWdlJywgMSk7XG4gICAgc3RhdGUubGltaXQgPSBsaW1pdDtcbiAgICBpZiAoc2VsZi5zb3VyY2UgPT0gJ3NlcnZlcicpIHNlbGYuZ2V0RGF0YSgpO1xuICB9KSwgX2RlZmluZVByb3BlcnR5KF9tZXJnZSRyZWN1cnNpdmUsIFwiXCIuY29uY2F0KHNlbGYubmFtZSwgXCIvU09SVFwiKSwgZnVuY3Rpb24gU09SVChzdGF0ZSwgX3JlZjUpIHtcbiAgICB2YXIgY29sdW1uID0gX3JlZjUuY29sdW1uLFxuICAgICAgICBhc2NlbmRpbmcgPSBfcmVmNS5hc2NlbmRpbmc7XG4gICAgc3RhdGUuYXNjZW5kaW5nID0gYXNjZW5kaW5nO1xuICAgIHN0YXRlLnNvcnRCeSA9IGNvbHVtbjtcbiAgICBpZiAoc2VsZi5zb3VyY2UgPT0gJ3NlcnZlcicpIHNlbGYuZ2V0RGF0YSgpO1xuICB9KSwgX2RlZmluZVByb3BlcnR5KF9tZXJnZSRyZWN1cnNpdmUsIFwiXCIuY29uY2F0KHNlbGYubmFtZSwgXCIvU09SVEVEXCIpLCBmdW5jdGlvbiBTT1JURUQoc3RhdGUsIGRhdGEpIHt9KSwgX2RlZmluZVByb3BlcnR5KF9tZXJnZSRyZWN1cnNpdmUsIFwiXCIuY29uY2F0KHNlbGYubmFtZSwgXCIvUk9XX0NMSUNLXCIpLCBmdW5jdGlvbiBST1dfQ0xJQ0soc3RhdGUsIHJvdykge30pLCBfZGVmaW5lUHJvcGVydHkoX21lcmdlJHJlY3Vyc2l2ZSwgXCJcIi5jb25jYXQoc2VsZi5uYW1lLCBcIi9GSUxURVJcIiksIGZ1bmN0aW9uIEZJTFRFUihzdGF0ZSwgcm93KSB7fSksIF9kZWZpbmVQcm9wZXJ0eShfbWVyZ2UkcmVjdXJzaXZlLCBcIlwiLmNvbmNhdChzZWxmLm5hbWUsIFwiL0xJTUlUXCIpLCBmdW5jdGlvbiBMSU1JVChzdGF0ZSwgbGltaXQpIHt9KSwgX21lcmdlJHJlY3Vyc2l2ZSksIGV4dHJhKTtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gX2RlZmF1bHQ7XG5cbmZ1bmN0aW9uIF9kZWZhdWx0KCkge1xuICByZXR1cm4ge1xuICAgIGNvbXB1dGVkOiB7XG4gICAgICBDb2x1bW5zOiBmdW5jdGlvbiBDb2x1bW5zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb2x1bW5zO1xuICAgICAgfVxuICAgIH1cbiAgfTtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxudmFyIF9zdGF0ZSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vc3RhdGVcIikpO1xuXG52YXIgX211dGF0aW9ucyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vbXV0YXRpb25zXCIpKTtcblxudmFyIF9tZXJnZSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIm1lcmdlXCIpKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgXCJkZWZhdWx0XCI6IG9iaiB9OyB9XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHNlbGYpIHtcbiAgdmFyIE1vZHVsZSA9IHtcbiAgICBzdGF0ZTogKDAsIF9zdGF0ZVtcImRlZmF1bHRcIl0pKHNlbGYpLFxuICAgIG11dGF0aW9uczogKDAsIF9tdXRhdGlvbnNbXCJkZWZhdWx0XCJdKShzZWxmKVxuICB9O1xuXG4gIGlmIChzZWxmLiRzdG9yZSAmJiBzZWxmLiRzdG9yZS5zdGF0ZSAmJiBzZWxmLiRzdG9yZS5zdGF0ZVtzZWxmLm5hbWVdKSB7XG4gICAgTW9kdWxlLnN0YXRlID0gX21lcmdlW1wiZGVmYXVsdFwiXS5yZWN1cnNpdmUoTW9kdWxlLnN0YXRlLCBzZWxmLiRzdG9yZS5zdGF0ZVtzZWxmLm5hbWVdKTtcbiAgICBzZWxmLiRzdG9yZS51bnJlZ2lzdGVyTW9kdWxlKHNlbGYubmFtZSk7XG4gIH1cblxuICBzZWxmLiRzdG9yZS5yZWdpc3Rlck1vZHVsZShzZWxmLm5hbWUsIE1vZHVsZSk7XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBfZGVmYXVsdDtcblxudmFyIF9tZXJnZSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIm1lcmdlXCIpKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgXCJkZWZhdWx0XCI6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIF9kZWZhdWx0KHNlbGYpIHtcbiAgdmFyIHN0YXRlID0ge1xuICAgIHBhZ2U6IHNlbGYub3B0cy5pbml0aWFsUGFnZSA/IHNlbGYub3B0cy5pbml0aWFsUGFnZSA6IDEsXG4gICAgbGltaXQ6IHNlbGYub3B0cy5wZXJQYWdlLFxuICAgIGNvdW50OiBzZWxmLnNvdXJjZSA9PSAnc2VydmVyJyA/IDAgOiBzZWxmLmRhdGEubGVuZ3RoLFxuICAgIGNvbHVtbnM6IHNlbGYuY29sdW1ucyxcbiAgICBkYXRhOiBzZWxmLnNvdXJjZSA9PSAnY2xpZW50JyA/IHNlbGYuZGF0YSA6IFtdLFxuICAgIHF1ZXJ5OiBzZWxmLmluaXRRdWVyeSgpLFxuICAgIGN1c3RvbVF1ZXJpZXM6IHNlbGYuaW5pdEN1c3RvbUZpbHRlcnMoKSxcbiAgICBzb3J0Qnk6IHNlbGYub3B0cy5vcmRlckJ5ICYmIHNlbGYub3B0cy5vcmRlckJ5LmNvbHVtbiA/IHNlbGYub3B0cy5vcmRlckJ5LmNvbHVtbiA6IGZhbHNlLFxuICAgIGFzY2VuZGluZzogc2VsZi5vcHRzLm9yZGVyQnkgJiYgc2VsZi5vcHRzLm9yZGVyQnkuaGFzT3duUHJvcGVydHkoJ2FzY2VuZGluZycpID8gc2VsZi5vcHRzLm9yZGVyQnkuYXNjZW5kaW5nIDogdHJ1ZVxuICB9O1xuXG4gIGlmICh0eXBlb2Ygc2VsZi4kc3RvcmUuc3RhdGVbc2VsZi5uYW1lXSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gKDAsIF9tZXJnZVtcImRlZmF1bHRcIl0pKHRydWUsIHNlbGYuJHN0b3JlLnN0YXRlW3NlbGYubmFtZV0sIHN0YXRlKTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZTtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gX2RlZmF1bHQ7XG5cbnZhciBfbWVyZ2UgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCJtZXJnZVwiKSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IFwiZGVmYXVsdFwiOiBvYmogfTsgfVxuXG5mdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG5mdW5jdGlvbiBfZGVmYXVsdChzb3VyY2UpIHtcbiAgdmFyIGV4dHJhID0gc291cmNlID09ICdzZXJ2ZXInID8gc2VydmVyRXh0cmEoKSA6IGNsaWVudEV4dHJhKCk7XG4gIHJldHVybiBfbWVyZ2VbXCJkZWZhdWx0XCJdLnJlY3Vyc2l2ZSh0cnVlLCB7XG4gICAgcHJvcHM6IHtcbiAgICAgIG5hbWU6IHtcbiAgICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZVxuICAgICAgfVxuICAgIH0sXG4gICAgY29tcHV0ZWQ6IHtcbiAgICAgIHN0YXRlOiBmdW5jdGlvbiBzdGF0ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJHN0b3JlLnN0YXRlW3RoaXMubmFtZV07XG4gICAgICB9LFxuICAgICAgUGFnZTogZnVuY3Rpb24gUGFnZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhdGUucGFnZTtcbiAgICAgIH0sXG4gICAgICBjb3VudDogZnVuY3Rpb24gY291bnQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0YXRlLmNvdW50O1xuICAgICAgfSxcbiAgICAgIENvbHVtbnM6IGZ1bmN0aW9uIENvbHVtbnMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0YXRlLmNvbHVtbnM7XG4gICAgICB9LFxuICAgICAgdGFibGVEYXRhOiBmdW5jdGlvbiB0YWJsZURhdGEoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0YXRlLmRhdGE7XG4gICAgICB9LFxuICAgICAgcGFnZTogZnVuY3Rpb24gcGFnZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhdGUucGFnZTtcbiAgICAgIH0sXG4gICAgICBsaW1pdDogZnVuY3Rpb24gbGltaXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0YXRlLmxpbWl0O1xuICAgICAgfSxcbiAgICAgIGN1c3RvbVF1ZXJpZXM6IGZ1bmN0aW9uIGN1c3RvbVF1ZXJpZXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0YXRlLmN1c3RvbVF1ZXJpZXM7XG4gICAgICB9LFxuICAgICAgcXVlcnk6IGZ1bmN0aW9uIHF1ZXJ5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zdGF0ZS5xdWVyeTtcbiAgICAgIH0sXG4gICAgICBvcmRlckJ5OiBmdW5jdGlvbiBvcmRlckJ5KCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNvbHVtbjogdGhpcy5zdGF0ZS5zb3J0QnksXG4gICAgICAgICAgYXNjZW5kaW5nOiB0aGlzLnN0YXRlLmFzY2VuZGluZ1xuICAgICAgICB9O1xuICAgICAgfVxuICAgIH0sXG4gICAgbWV0aG9kczoge1xuICAgICAgY29tbWl0OiBmdW5jdGlvbiBjb21taXQoYWN0aW9uLCBwYXlsb2FkKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiRzdG9yZS5jb21taXQoXCJcIi5jb25jYXQodGhpcy5uYW1lLCBcIi9cIikuY29uY2F0KGFjdGlvbiksIHBheWxvYWQpO1xuICAgICAgfSxcbiAgICAgIG9yZGVyQnlDb2x1bW46IGZ1bmN0aW9uIG9yZGVyQnlDb2x1bW4oY29sdW1uLCBldikge1xuICAgICAgICBpZiAoIXRoaXMuc29ydGFibGUoY29sdW1uKSkgcmV0dXJuO1xuXG4gICAgICAgIGlmIChldi5zaGlmdEtleSAmJiB0aGlzLm9yZGVyQnkuY29sdW1uICYmIHRoaXMuaGFzTXVsdGlTb3J0KSB7XG4gICAgICAgICAgdGhpcy5zZXRVc2VyTXVsdGlTb3J0KGNvbHVtbik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFyIGFzY2VuZGluZyA9IHRoaXMub3JkZXJCeS5jb2x1bW4gPT09IGNvbHVtbiA/ICF0aGlzLm9yZGVyQnkuYXNjZW5kaW5nIDogdGhpcy5faW5pdGlhbE9yZGVyQXNjZW5kaW5nKGNvbHVtbik7XG4gICAgICAgICAgdmFyIG9yZGVyQnkgPSB7XG4gICAgICAgICAgICBjb2x1bW46IGNvbHVtbixcbiAgICAgICAgICAgIGFzY2VuZGluZzogYXNjZW5kaW5nXG4gICAgICAgICAgfTtcbiAgICAgICAgICB0aGlzLnVwZGF0ZVN0YXRlKCdvcmRlckJ5Jywgb3JkZXJCeSk7XG4gICAgICAgICAgdGhpcy5jb21taXQoJ1NPUlQnLCBvcmRlckJ5KTtcbiAgICAgICAgICB0aGlzLmRpc3BhdGNoKCdzb3J0ZWQnLCBvcmRlckJ5KTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHNldExpbWl0OiBmdW5jdGlvbiBzZXRMaW1pdChlKSB7XG4gICAgICAgIHZhciBsaW1pdCA9IF90eXBlb2YoZSkgPT09ICdvYmplY3QnID8gcGFyc2VJbnQoZS50YXJnZXQudmFsdWUpIDogZTtcbiAgICAgICAgdGhpcy51cGRhdGVTdGF0ZSgncGVyUGFnZScsIGxpbWl0KTtcbiAgICAgICAgdGhpcy5jb21taXQoXCJTRVRfTElNSVRcIiwgbGltaXQpO1xuICAgICAgICB0aGlzLmRpc3BhdGNoKFwibGltaXRcIiwgbGltaXQpO1xuICAgICAgfSxcbiAgICAgIHNldE9yZGVyOiBmdW5jdGlvbiBzZXRPcmRlcihjb2x1bW4sIGFzY2VuZGluZykge1xuICAgICAgICB0aGlzLnVwZGF0ZVN0YXRlKCdvcmRlckJ5Jywge1xuICAgICAgICAgIGNvbHVtbjogY29sdW1uLFxuICAgICAgICAgIGFzY2VuZGluZzogYXNjZW5kaW5nXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmNvbW1pdCgnU09SVCcsIHtcbiAgICAgICAgICBjb2x1bW46IGNvbHVtbixcbiAgICAgICAgICBhc2NlbmRpbmc6IGFzY2VuZGluZ1xuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgICBzZXRQYWdlOiBmdW5jdGlvbiBzZXRQYWdlKHBhZ2UpIHtcbiAgICAgICAgaWYgKCFwYWdlKSB7XG4gICAgICAgICAgcGFnZSA9IHRoaXMuJHJlZnMucGFnZS52YWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5vcHRzLnBhZ2luYXRpb24uZHJvcGRvd24pIHRoaXMuJHJlZnMucGFnaW5hdGlvbi5QYWdlID0gcGFnZTtcbiAgICAgICAgdGhpcy5jb21taXQoXCJQQUdJTkFURVwiLCBwYWdlKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIGV4dHJhKTtcbn1cblxuZnVuY3Rpb24gc2VydmVyRXh0cmEoKSB7XG4gIHJldHVybiB7XG4gICAgbWV0aG9kczoge1xuICAgICAgc2V0RGF0YTogZnVuY3Rpb24gc2V0RGF0YShkYXRhKSB7XG4gICAgICAgIHRoaXMuY29tbWl0KCdTRVRfREFUQScsIGRhdGEpO1xuICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICB0aGlzLmRpc3BhdGNoKCdsb2FkZWQnLCBkYXRhKTtcbiAgICAgICAgfS5iaW5kKHRoaXMpLCAwKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG59XG5cbmZ1bmN0aW9uIGNsaWVudEV4dHJhKCkge1xuICByZXR1cm4ge307XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IF9kZWZhdWx0O1xuXG52YXIgbWV0aG9kcyA9IHJlcXVpcmUoXCIuL21peGlucy9tZXRob2RzXCIpO1xuXG52YXIgY29tcHV0ZWQgPSByZXF1aXJlKFwiLi9taXhpbnMvY29tcHV0ZWRcIik7XG5cbnZhciBiZWZvcmVEZXN0cm95ID0gcmVxdWlyZShcIi4vbWl4aW5zL2JlZm9yZS1kZXN0cm95XCIpO1xuXG5mdW5jdGlvbiBfZGVmYXVsdCgpIHtcbiAgcmV0dXJuIHtcbiAgICBtZXRob2RzOiBtZXRob2RzLFxuICAgIGNvbXB1dGVkOiBjb21wdXRlZCxcbiAgICBiZWZvcmVEZXN0cm95OiBiZWZvcmVEZXN0cm95XG4gIH07XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHRlbXBsYXRlLCB0aGVtZSkge1xuICB2YXIgdGhlbWVzID0ge1xuICAgIGJvb3RzdHJhcDM6IHJlcXVpcmUoJy4vdGhlbWVzL2Jvb3RzdHJhcDMnKSgpLFxuICAgIGJvb3RzdHJhcDQ6IHJlcXVpcmUoJy4vdGhlbWVzL2Jvb3RzdHJhcDQnKSgpLFxuICAgIGJ1bG1hOiByZXF1aXJlKCcuL3RoZW1lcy9idWxtYScpKClcbiAgfTtcbiAgdmFyIHRlbXBsYXRlcyA9IHtcbiAgICBcImRlZmF1bHRcIjogcmVxdWlyZSgnLi90ZW1wbGF0ZXMvZGVmYXVsdCcpLFxuICAgIGZvb3RlclBhZ2luYXRpb246IHJlcXVpcmUoJy4vdGVtcGxhdGVzL2Zvb3Rlci1wYWdpbmF0aW9uJylcbiAgfTtcbiAgcmV0dXJuIGZ1bmN0aW9uIChoKSB7XG4gICAgdmFyIG1vZHVsZXMgPSB7XG4gICAgICByb3dzOiByZXF1aXJlKCcuL21vZHVsZXMvcm93cycpLmNhbGwodGhpcywgaCksXG4gICAgICBub3JtYWxGaWx0ZXI6IHJlcXVpcmUoJy4vbW9kdWxlcy9ub3JtYWwtZmlsdGVyJykuY2FsbCh0aGlzLCBoKSxcbiAgICAgIGRyb3Bkb3duUGFnaW5hdGlvbjogcmVxdWlyZSgnLi9tb2R1bGVzL2Ryb3Bkb3duLXBhZ2luYXRpb24nKS5jYWxsKHRoaXMsIGgpLFxuICAgICAgZHJvcGRvd25QYWdpbmF0aW9uQ291bnQ6IHJlcXVpcmUoJy4vbW9kdWxlcy9kcm9wZG93bi1wYWdpbmF0aW9uLWNvdW50JykuY2FsbCh0aGlzLCBoKSxcbiAgICAgIGNvbHVtbkZpbHRlcnM6IHJlcXVpcmUoJy4vbW9kdWxlcy9jb2x1bW4tZmlsdGVycycpLmNhbGwodGhpcywgaCksXG4gICAgICBwYWdpbmF0aW9uOiByZXF1aXJlKCcuL21vZHVsZXMvcGFnaW5hdGlvbicpLmNhbGwodGhpcywgaCksXG4gICAgICBoZWFkaW5nczogcmVxdWlyZSgnLi9tb2R1bGVzL2hlYWRpbmdzJykuY2FsbCh0aGlzLCBoKSxcbiAgICAgIHBlclBhZ2U6IHJlcXVpcmUoJy4vbW9kdWxlcy9wZXItcGFnZScpLmNhbGwodGhpcywgaCksXG4gICAgICBjb2x1bW5zRHJvcGRvd246IHJlcXVpcmUoJy4vbW9kdWxlcy9jb2x1bW5zLWRyb3Bkb3duJykuY2FsbCh0aGlzLCBoKVxuICAgIH07XG5cbiAgICBpZiAodHlwZW9mIHRlbXBsYXRlID09PSAnc3RyaW5nJyAmJiAoIXRlbXBsYXRlc1t0ZW1wbGF0ZV0gfHwgdHlwZW9mIHRlbXBsYXRlc1t0ZW1wbGF0ZV0gIT09ICdmdW5jdGlvbicpKSB7XG4gICAgICB0aHJvdyBcInZ1ZS10YWJsZXMtMjogVGVtcGxhdGUgXFxcIlwiLmNvbmNhdCh0ZW1wbGF0ZSwgXCJcXFwiIGRvZXMgbm90IGV4aXN0XCIpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgdGhlbWUgPT09ICdzdHJpbmcnICYmICghdGhlbWVzW3RoZW1lXSB8fCBfdHlwZW9mKHRoZW1lc1t0aGVtZV0pICE9PSAnb2JqZWN0JykpIHtcbiAgICAgIHRocm93IFwidnVlLXRhYmxlcy0yOiBUaGVtZSBcXFwiXCIuY29uY2F0KHRoZW1lLCBcIlxcXCIgZG9lcyBub3QgZXhpc3RcIik7XG4gICAgfVxuXG4gICAgdmFyIHRwbCA9IHR5cGVvZiB0ZW1wbGF0ZSA9PT0gJ3N0cmluZycgPyB0ZW1wbGF0ZXNbdGVtcGxhdGVdIDogdGVtcGxhdGU7XG4gICAgdmFyIHRobSA9IHR5cGVvZiB0aGVtZSA9PT0gJ3N0cmluZycgPyB0aGVtZXNbdGhlbWVdIDogdGhlbWUoKTtcblxuICAgIHZhciBzbG90cyA9IHJlcXVpcmUoJy4vc2xvdHMnKS5jYWxsKHRoaXMpO1xuXG4gICAgcmV0dXJuIHRwbC5jYWxsKHRoaXMsIGgsIG1vZHVsZXMsIHRobSwgc2xvdHMpO1xuICB9O1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxudmFyIF9tZXJnZSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIm1lcmdlXCIpKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgXCJkZWZhdWx0XCI6IG9iaiB9OyB9XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGgsIG1vZHVsZXMsIGNsYXNzZXMsIHNsb3RzKSB7XG4gIHZhciBmaWx0ZXJJZCA9IFwiVnVlVGFibGVzX19zZWFyY2hfXCIgKyB0aGlzLmlkO1xuICB2YXIgZGRwSWQgPSBcIlZ1ZVRhYmxlc19fZHJvcGRvd24tcGFnaW5hdGlvbl9cIiArIHRoaXMuaWQ7XG4gIHZhciBwZXJwYWdlSWQgPSBcIlZ1ZVRhYmxlc19fbGltaXRfXCIgKyB0aGlzLmlkO1xuXG4gIHZhciBwZXJwYWdlVmFsdWVzID0gcmVxdWlyZShcIi4uL21vZHVsZXMvcGVyLXBhZ2UtdmFsdWVzXCIpLmNhbGwodGhpcywgaCk7XG5cbiAgdmFyIGNhcHRpb24gPSB0aGlzLm9wdHMuY2FwdGlvbiA/IGgoXCJjYXB0aW9uXCIsIFt0aGlzLm9wdHMuY2FwdGlvbl0pIDogJyc7XG4gIHZhciBnZW5lcmljRmlsdGVyID0gdGhpcy5oYXNHZW5lcmljRmlsdGVyID8gaChcImRpdlwiLCB7XG4gICAgXCJjbGFzc1wiOiBcIlZ1ZVRhYmxlc19fc2VhcmNoLWZpZWxkXCJcbiAgfSwgW2goXCJsYWJlbFwiLCB7XG4gICAgYXR0cnM6IHtcbiAgICAgIFwiZm9yXCI6IGZpbHRlcklkXG4gICAgfSxcbiAgICBcImNsYXNzXCI6IGNsYXNzZXMubGFiZWxcbiAgfSwgW3RoaXMuZGlzcGxheShcImZpbHRlclwiKV0pLCBtb2R1bGVzLm5vcm1hbEZpbHRlcihjbGFzc2VzLCBmaWx0ZXJJZCldKSA6IFwiXCI7XG4gIHZhciBwZXJwYWdlID0gIXRoaXMub3B0cy5oaWRlUGVyUGFnZVNlbGVjdCAmJiAocGVycGFnZVZhbHVlcy5sZW5ndGggPiAxIHx8IHRoaXMub3B0cy5hbHdheXNTaG93UGVyUGFnZVNlbGVjdCkgPyBoKFwiZGl2XCIsIHtcbiAgICBcImNsYXNzXCI6IFwiVnVlVGFibGVzX19saW1pdC1maWVsZFwiXG4gIH0sIFtoKFwibGFiZWxcIiwge1xuICAgIFwiY2xhc3NcIjogY2xhc3Nlcy5sYWJlbCxcbiAgICBhdHRyczoge1xuICAgICAgXCJmb3JcIjogcGVycGFnZUlkXG4gICAgfVxuICB9LCBbdGhpcy5kaXNwbGF5KFwibGltaXRcIildKSwgbW9kdWxlcy5wZXJQYWdlKHBlcnBhZ2VWYWx1ZXMsIGNsYXNzZXMuc2VsZWN0LCBwZXJwYWdlSWQpXSkgOiBcIlwiO1xuICB2YXIgZHJvcGRvd25QYWdpbmF0aW9uID0gdGhpcy5vcHRzLnBhZ2luYXRpb24gJiYgdGhpcy5vcHRzLnBhZ2luYXRpb24uZHJvcGRvd24gPyBoKFwiZGl2XCIsIHtcbiAgICBcImNsYXNzXCI6IFwiVnVlVGFibGVzX19wYWdpbmF0aW9uLXdyYXBwZXJcIlxuICB9LCBbaChcImRpdlwiLCB7XG4gICAgXCJjbGFzc1wiOiBcIlwiLmNvbmNhdChjbGFzc2VzLmZpZWxkLCBcIiBcIikuY29uY2F0KGNsYXNzZXMuaW5saW5lLCBcIiBcIikuY29uY2F0KGNsYXNzZXMucmlnaHQsIFwiIFZ1ZVRhYmxlc19fZHJvcGRvd24tcGFnaW5hdGlvblwiKSxcbiAgICBkaXJlY3RpdmVzOiBbe1xuICAgICAgbmFtZTogXCJzaG93XCIsXG4gICAgICB2YWx1ZTogdGhpcy50b3RhbFBhZ2VzID4gMVxuICAgIH1dXG4gIH0sIFtoKFwibGFiZWxcIiwge1xuICAgIGF0dHJzOiB7XG4gICAgICBcImZvclwiOiBkZHBJZFxuICAgIH1cbiAgfSwgW3RoaXMuZGlzcGxheShcInBhZ2VcIildKSwgbW9kdWxlcy5kcm9wZG93blBhZ2luYXRpb24oY2xhc3Nlcy5zZWxlY3QsIGRkcElkKV0pXSkgOiBcIlwiO1xuICB2YXIgY29sdW1uc0Ryb3Bkb3duID0gdGhpcy5vcHRzLmNvbHVtbnNEcm9wZG93biA/IGgoXCJkaXZcIiwge1xuICAgIFwiY2xhc3NcIjogXCJWdWVUYWJsZXNfX2NvbHVtbnMtZHJvcGRvd24td3JhcHBlclwiXG4gIH0sIFttb2R1bGVzLmNvbHVtbnNEcm9wZG93bihjbGFzc2VzKV0pIDogXCJcIjtcbiAgdmFyIGZvb3RlckhlYWRpbmdzID0gdGhpcy5vcHRzLmZvb3RlckhlYWRpbmdzID8gaChcInRmb290XCIsIFtoKFwidHJcIiwgW21vZHVsZXMuaGVhZGluZ3MoY2xhc3Nlcy5yaWdodCldKV0pIDogXCJcIjtcbiAgdmFyIHNob3VsZFNob3dUb3AgPSBnZW5lcmljRmlsdGVyIHx8IHBlcnBhZ2UgfHwgZHJvcGRvd25QYWdpbmF0aW9uIHx8IGNvbHVtbnNEcm9wZG93biB8fCBzbG90cy5iZWZvcmVGaWx0ZXIgfHwgc2xvdHMuYWZ0ZXJGaWx0ZXIgfHwgc2xvdHMuYmVmb3JlTGltaXQgfHwgc2xvdHMuYWZ0ZXJMaW1pdDtcbiAgdmFyIHRhYmxlVG9wID0gaChcImRpdlwiLCB7XG4gICAgXCJjbGFzc1wiOiBjbGFzc2VzLnJvdyxcbiAgICBkaXJlY3RpdmVzOiBbe1xuICAgICAgbmFtZTogXCJzaG93XCIsXG4gICAgICB2YWx1ZTogc2hvdWxkU2hvd1RvcFxuICAgIH1dXG4gIH0sIFtoKFwiZGl2XCIsIHtcbiAgICBcImNsYXNzXCI6IGNsYXNzZXMuY29sdW1uXG4gIH0sIFtoKFwiZGl2XCIsIHtcbiAgICBcImNsYXNzXCI6IFwiXCIuY29uY2F0KGNsYXNzZXMuZmllbGQsIFwiIFwiKS5jb25jYXQoY2xhc3Nlcy5pbmxpbmUsIFwiIFwiKS5jb25jYXQoY2xhc3Nlcy5sZWZ0LCBcIiBWdWVUYWJsZXNfX3NlYXJjaFwiKVxuICB9LCBbc2xvdHMuYmVmb3JlRmlsdGVyLCBnZW5lcmljRmlsdGVyLCBzbG90cy5hZnRlckZpbHRlcl0pLCBzbG90cy5hZnRlckZpbHRlcldyYXBwZXIsIGgoXCJkaXZcIiwge1xuICAgIFwiY2xhc3NcIjogXCJcIi5jb25jYXQoY2xhc3Nlcy5maWVsZCwgXCIgXCIpLmNvbmNhdChjbGFzc2VzLmlubGluZSwgXCIgXCIpLmNvbmNhdChjbGFzc2VzLnJpZ2h0LCBcIiBWdWVUYWJsZXNfX2xpbWl0XCIpXG4gIH0sIFtzbG90cy5iZWZvcmVMaW1pdCwgcGVycGFnZSwgc2xvdHMuYWZ0ZXJMaW1pdF0pLCBkcm9wZG93blBhZ2luYXRpb24sIGNvbHVtbnNEcm9wZG93bl0pXSk7XG4gIHJldHVybiBoKFwiZGl2XCIsIHtcbiAgICBcImNsYXNzXCI6IFwiVnVlVGFibGVzIFZ1ZVRhYmxlcy0tXCIgKyB0aGlzLnNvdXJjZVxuICB9LCBbdGFibGVUb3AsIHNsb3RzLmJlZm9yZVRhYmxlLCBoKFwiZGl2XCIsIHtcbiAgICBcImNsYXNzXCI6IFwidGFibGUtcmVzcG9uc2l2ZVwiXG4gIH0sIFtoKFwidGFibGVcIiwge1xuICAgIFwiY2xhc3NcIjogXCJWdWVUYWJsZXNfX3RhYmxlIFwiLmNvbmNhdCh0aGlzLm9wdHMuc2tpbiA/IHRoaXMub3B0cy5za2luIDogY2xhc3Nlcy50YWJsZSksXG4gICAgYXR0cnM6IHtcbiAgICAgIHN1bW1hcnk6IHRoaXMub3B0cy5zdW1tYXJ5XG4gICAgfVxuICB9LCBbY2FwdGlvbiwgaChcInRoZWFkXCIsIFtzbG90cy5wcmVwZW5kSGVhZCwgaChcInRyXCIsIFttb2R1bGVzLmhlYWRpbmdzKGNsYXNzZXMucmlnaHQpXSksIHNsb3RzLmJlZm9yZUZpbHRlcnMsIG1vZHVsZXMuY29sdW1uRmlsdGVycyhjbGFzc2VzKSwgc2xvdHMuYWZ0ZXJGaWx0ZXJzXSksIGZvb3RlckhlYWRpbmdzLCBzbG90cy5iZWZvcmVCb2R5LCBoKFwidGJvZHlcIiwgW3Nsb3RzLnByZXBlbmRCb2R5LCBtb2R1bGVzLnJvd3MoY2xhc3NlcyksIHNsb3RzLmFwcGVuZEJvZHldKSwgc2xvdHMuYWZ0ZXJCb2R5XSldKSwgc2xvdHMuYWZ0ZXJUYWJsZSwgbW9kdWxlcy5wYWdpbmF0aW9uKCgwLCBfbWVyZ2VbXCJkZWZhdWx0XCJdKShjbGFzc2VzLnBhZ2luYXRpb24sIHtcbiAgICB3cmFwcGVyOiBcIlwiLmNvbmNhdChjbGFzc2VzLnJvdywgXCIgXCIpLmNvbmNhdChjbGFzc2VzLmNvbHVtbiwgXCIgXCIpLmNvbmNhdChjbGFzc2VzLmNvbnRlbnRDZW50ZXIpLFxuICAgIG5hdjogY2xhc3Nlcy5jZW50ZXIsXG4gICAgY291bnQ6IFwiXCIuY29uY2F0KGNsYXNzZXMuY2VudGVyLCBcIiBcIikuY29uY2F0KGNsYXNzZXMuY29sdW1uKVxuICB9KSksIG1vZHVsZXMuZHJvcGRvd25QYWdpbmF0aW9uQ291bnQoKV0pO1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxudmFyIF9tZXJnZSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIm1lcmdlXCIpKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgXCJkZWZhdWx0XCI6IG9iaiB9OyB9XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGgsIG1vZHVsZXMsIGNsYXNzZXMsIHNsb3RzKSB7XG4gIHZhciBmaWx0ZXJJZCA9ICdWdWVUYWJsZXNfX3NlYXJjaF8nICsgdGhpcy5pZDtcbiAgdmFyIHBlcnBhZ2VJZCA9ICdWdWVUYWJsZXNfX2xpbWl0XycgKyB0aGlzLmlkO1xuXG4gIHZhciBwZXJwYWdlVmFsdWVzID0gcmVxdWlyZSgnLi4vbW9kdWxlcy9wZXItcGFnZS12YWx1ZXMnKS5jYWxsKHRoaXMsIGgpO1xuXG4gIHZhciBjYXB0aW9uID0gdGhpcy5vcHRzLmNhcHRpb24gPyBoKFwiY2FwdGlvblwiLCBbdGhpcy5vcHRzLmNhcHRpb25dKSA6ICcnO1xuICB2YXIgZ2VuZXJpY0ZpbHRlciA9IHRoaXMuaGFzR2VuZXJpY0ZpbHRlciA/IGgoXCJkaXZcIiwge1xuICAgIFwiY2xhc3NcIjogXCJWdWVUYWJsZXNfX3NlYXJjaC1maWVsZFwiXG4gIH0sIFtoKFwibGFiZWxcIiwge1xuICAgIGF0dHJzOiB7XG4gICAgICBcImZvclwiOiBmaWx0ZXJJZFxuICAgIH0sXG4gICAgXCJjbGFzc1wiOiBjbGFzc2VzLmxhYmVsXG4gIH0sIFt0aGlzLmRpc3BsYXkoJ2ZpbHRlcicpXSksIG1vZHVsZXMubm9ybWFsRmlsdGVyKGNsYXNzZXMsIGZpbHRlcklkKV0pIDogJyc7XG4gIHZhciBwZXJwYWdlID0gcGVycGFnZVZhbHVlcy5sZW5ndGggPiAxID8gaChcImRpdlwiLCB7XG4gICAgXCJjbGFzc1wiOiBcIlZ1ZVRhYmxlc19fbGltaXQtZmllbGRcIlxuICB9LCBbaChcImxhYmVsXCIsIHtcbiAgICBcImNsYXNzXCI6IGNsYXNzZXMubGFiZWwsXG4gICAgYXR0cnM6IHtcbiAgICAgIFwiZm9yXCI6IHBlcnBhZ2VJZFxuICAgIH1cbiAgfSwgW3RoaXMuZGlzcGxheSgnbGltaXQnKV0pLCBtb2R1bGVzLnBlclBhZ2UocGVycGFnZVZhbHVlcywgY2xhc3Nlcy5zZWxlY3QsIHBlcnBhZ2VJZCldKSA6ICcnO1xuICB2YXIgY29sdW1uc0Ryb3Bkb3duID0gdGhpcy5vcHRzLmNvbHVtbnNEcm9wZG93biA/IGgoXCJkaXZcIiwge1xuICAgIFwiY2xhc3NcIjogXCJWdWVUYWJsZXNfX2NvbHVtbnMtZHJvcGRvd24td3JhcHBlclwiXG4gIH0sIFttb2R1bGVzLmNvbHVtbnNEcm9wZG93bihjbGFzc2VzKV0pIDogJyc7XG4gIHZhciBzaG91bGRTaG93VG9wID0gZ2VuZXJpY0ZpbHRlciB8fCBwZXJwYWdlIHx8IGNvbHVtbnNEcm9wZG93biB8fCBzbG90cy5iZWZvcmVGaWx0ZXIgfHwgc2xvdHMuYWZ0ZXJGaWx0ZXIgfHwgc2xvdHMuYmVmb3JlTGltaXQgfHwgc2xvdHMuYWZ0ZXJMaW1pdDtcbiAgdmFyIHRhYmxlVG9wID0gaChcImRpdlwiLCB7XG4gICAgXCJjbGFzc1wiOiBjbGFzc2VzLnJvdyxcbiAgICBkaXJlY3RpdmVzOiBbe1xuICAgICAgbmFtZTogXCJzaG93XCIsXG4gICAgICB2YWx1ZTogc2hvdWxkU2hvd1RvcFxuICAgIH1dXG4gIH0sIFtoKFwiZGl2XCIsIHtcbiAgICBcImNsYXNzXCI6IGNsYXNzZXMuY29sdW1uXG4gIH0sIFtoKFwiZGl2XCIsIHtcbiAgICBcImNsYXNzXCI6IFwiXCIuY29uY2F0KGNsYXNzZXMuZmllbGQsIFwiIFwiKS5jb25jYXQoY2xhc3Nlcy5pbmxpbmUsIFwiIFwiKS5jb25jYXQoY2xhc3Nlcy5sZWZ0LCBcIiBWdWVUYWJsZXNfX3NlYXJjaFwiKVxuICB9LCBbc2xvdHMuYmVmb3JlRmlsdGVyLCBnZW5lcmljRmlsdGVyLCBzbG90cy5hZnRlckZpbHRlcl0pLCBzbG90cy5hZnRlckZpbHRlcldyYXBwZXIsIGgoXCJkaXZcIiwge1xuICAgIFwiY2xhc3NcIjogXCJcIi5jb25jYXQoY2xhc3Nlcy5maWVsZCwgXCIgXCIpLmNvbmNhdChjbGFzc2VzLmlubGluZSwgXCIgXCIpLmNvbmNhdChjbGFzc2VzLnJpZ2h0LCBcIiBWdWVUYWJsZXNfX2xpbWl0XCIpXG4gIH0sIFtzbG90cy5iZWZvcmVMaW1pdCwgcGVycGFnZSwgc2xvdHMuYWZ0ZXJMaW1pdF0pLCBjb2x1bW5zRHJvcGRvd25dKV0pO1xuICByZXR1cm4gaChcImRpdlwiLCB7XG4gICAgXCJjbGFzc1wiOiBcIlZ1ZVRhYmxlcyBWdWVUYWJsZXMtLVwiICsgdGhpcy5zb3VyY2VcbiAgfSwgW3RhYmxlVG9wLCBzbG90cy5iZWZvcmVUYWJsZSwgaChcImRpdlwiLCB7XG4gICAgXCJjbGFzc1wiOiBcInRhYmxlLXJlc3BvbnNpdmVcIlxuICB9LCBbaChcInRhYmxlXCIsIHtcbiAgICBcImNsYXNzXCI6IFwiVnVlVGFibGVzX190YWJsZSBcIi5jb25jYXQodGhpcy5vcHRzLnNraW4gPyB0aGlzLm9wdHMuc2tpbiA6IGNsYXNzZXMudGFibGUpLFxuICAgIGF0dHJzOiB7XG4gICAgICBzdW1tYXJ5OiB0aGlzLm9wdHMuc3VtbWFyeVxuICAgIH1cbiAgfSwgW2NhcHRpb24sIGgoXCJ0aGVhZFwiLCBbc2xvdHMucHJlcGVuZEhlYWQsIGgoXCJ0clwiLCBbbW9kdWxlcy5oZWFkaW5ncyhjbGFzc2VzLnJpZ2h0KV0pLCBzbG90cy5iZWZvcmVGaWx0ZXJzLCBtb2R1bGVzLmNvbHVtbkZpbHRlcnMoY2xhc3NlcyksIHNsb3RzLmFmdGVyRmlsdGVyc10pLCBoKFwidGZvb3RcIiwgW2goXCJ0clwiLCBbaChcInRkXCIsIHtcbiAgICBhdHRyczoge1xuICAgICAgY29sc3BhbjogdGhpcy5jb2xzcGFuXG4gICAgfVxuICB9LCBbbW9kdWxlcy5wYWdpbmF0aW9uKCgwLCBfbWVyZ2VbXCJkZWZhdWx0XCJdKShjbGFzc2VzLnBhZ2luYXRpb24sIHtcbiAgICBsaXN0OiBcIlwiLmNvbmNhdChjbGFzc2VzLnBhZ2luYXRpb24ubGlzdCwgXCIgXCIpLmNvbmNhdChjbGFzc2VzLnJpZ2h0LCBcIiBcIikuY29uY2F0KGNsYXNzZXMubm9tYXJnaW4pLFxuICAgIGNvdW50OiBcIlwiLmNvbmNhdChjbGFzc2VzLmxlZnQpXG4gIH0pKV0pXSldKSwgc2xvdHMuYmVmb3JlQm9keSwgaChcInRib2R5XCIsIFtzbG90cy5wcmVwZW5kQm9keSwgbW9kdWxlcy5yb3dzKGNsYXNzZXMpLCBzbG90cy5hcHBlbmRCb2R5XSksIHNsb3RzLmFmdGVyQm9keV0pXSksIHNsb3RzLmFmdGVyVGFibGVdKTtcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4ge1xuICAgIGZyYW1ld29yazogJ2Jvb3RzdHJhcDMnLFxuICAgIHRhYmxlOiAndGFibGUgdGFibGUtc3RyaXBlZCB0YWJsZS1ib3JkZXJlZCB0YWJsZS1ob3ZlcicsXG4gICAgcm93OiAncm93JyxcbiAgICBjb2x1bW46ICdjb2wtbWQtMTInLFxuICAgIGxhYmVsOiAnJyxcbiAgICBpbnB1dDogJ2Zvcm0tY29udHJvbCcsXG4gICAgc2VsZWN0OiAnZm9ybS1jb250cm9sJyxcbiAgICBmaWVsZDogJ2Zvcm0tZ3JvdXAnLFxuICAgIGlubGluZTogJ2Zvcm0taW5saW5lJyxcbiAgICByaWdodDogJ3B1bGwtcmlnaHQnLFxuICAgIGxlZnQ6ICdwdWxsLWxlZnQnLFxuICAgIGNlbnRlcjogJ3RleHQtY2VudGVyJyxcbiAgICBjb250ZW50Q2VudGVyOiAnJyxcbiAgICBzbWFsbDogJycsXG4gICAgbm9tYXJnaW46ICcnLFxuICAgIGdyb3VwVHI6ICdpbmZvJyxcbiAgICBidXR0b246ICdidG4gYnRuLXNlY29uZGFyeScsXG4gICAgZHJvcGRvd246IHtcbiAgICAgIGNvbnRhaW5lcjogJ2Ryb3Bkb3duJyxcbiAgICAgIHRyaWdnZXI6ICdkcm9wZG93bi10b2dnbGUnLFxuICAgICAgbWVudTogJ2Ryb3Bkb3duLW1lbnUnLFxuICAgICAgY29udGVudDogJycsXG4gICAgICBpdGVtOiAnJyxcbiAgICAgIGNhcmV0OiAnY2FyZXQnXG4gICAgfSxcbiAgICBwYWdpbmF0aW9uOiB7XG4gICAgICBuYXY6ICcnLFxuICAgICAgY291bnQ6ICcnLFxuICAgICAgd3JhcHBlcjogJycsXG4gICAgICBsaXN0OiAncGFnaW5hdGlvbicsXG4gICAgICBpdGVtOiAncGFnZS1pdGVtJyxcbiAgICAgIGxpbms6ICdwYWdlLWxpbmsnLFxuICAgICAgbmV4dDogJycsXG4gICAgICBwcmV2OiAnJyxcbiAgICAgIGFjdGl2ZTogJ2FjdGl2ZScsXG4gICAgICBkaXNhYmxlZDogJ2Rpc2FibGVkJ1xuICAgIH1cbiAgfTtcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4ge1xuICAgIGZyYW1ld29yazogJ2Jvb3RzdHJhcDQnLFxuICAgIHRhYmxlOiAndGFibGUgdGFibGUtc3RyaXBlZCB0YWJsZS1ib3JkZXJlZCB0YWJsZS1ob3ZlcicsXG4gICAgcm93OiAncm93JyxcbiAgICBjb2x1bW46ICdjb2wtbWQtMTInLFxuICAgIGxhYmVsOiAnJyxcbiAgICBpbnB1dDogJ2Zvcm0tY29udHJvbCcsXG4gICAgc2VsZWN0OiAnZm9ybS1jb250cm9sJyxcbiAgICBmaWVsZDogJ2Zvcm0tZ3JvdXAnLFxuICAgIGlubGluZTogJ2Zvcm0taW5saW5lJyxcbiAgICByaWdodDogJ2Zsb2F0LXJpZ2h0JyxcbiAgICBsZWZ0OiAnZmxvYXQtbGVmdCcsXG4gICAgY2VudGVyOiAndGV4dC1jZW50ZXInLFxuICAgIGNvbnRlbnRDZW50ZXI6ICdqdXN0aWZ5LWNvbnRlbnQtY2VudGVyJyxcbiAgICBub21hcmdpbjogJ20tMCcsXG4gICAgZ3JvdXBUcjogJ3RhYmxlLWluZm8nLFxuICAgIHNtYWxsOiAnJyxcbiAgICBidXR0b246ICdidG4gYnRuLXNlY29uZGFyeScsXG4gICAgZHJvcGRvd246IHtcbiAgICAgIGNvbnRhaW5lcjogJ2Ryb3Bkb3duJyxcbiAgICAgIHRyaWdnZXI6ICdkcm9wZG93bi10b2dnbGUnLFxuICAgICAgbWVudTogJ2Ryb3Bkb3duLW1lbnUnLFxuICAgICAgY29udGVudDogJycsXG4gICAgICBpdGVtOiAnZHJvcGRvd24taXRlbScsXG4gICAgICBjYXJldDogJ2NhcmV0J1xuICAgIH0sXG4gICAgcGFnaW5hdGlvbjoge1xuICAgICAgbmF2OiAnJyxcbiAgICAgIGNvdW50OiAnJyxcbiAgICAgIHdyYXBwZXI6ICcnLFxuICAgICAgbGlzdDogJ3BhZ2luYXRpb24nLFxuICAgICAgaXRlbTogJ3BhZ2UtaXRlbScsXG4gICAgICBsaW5rOiAncGFnZS1saW5rJyxcbiAgICAgIG5leHQ6ICcnLFxuICAgICAgcHJldjogJycsXG4gICAgICBhY3RpdmU6ICdhY3RpdmUnLFxuICAgICAgZGlzYWJsZWQ6ICdkaXNhYmxlZCdcbiAgICB9XG4gIH07XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHtcbiAgICBmcmFtZXdvcms6ICdidWxtYScsXG4gICAgdGFibGU6ICd0YWJsZSBpcy1ib3JkZXJlZCBpcy1zdHJpcGVkIGlzLWhvdmVyYWJsZSBpcy1mdWxsd2lkdGgnLFxuICAgIHJvdzogJ2NvbHVtbnMnLFxuICAgIGNvbHVtbjogJ2NvbHVtbiBpcy0xMicsXG4gICAgbGFiZWw6ICdsYWJlbCcsXG4gICAgaW5wdXQ6ICdpbnB1dCcsXG4gICAgc2VsZWN0OiAnc2VsZWN0JyxcbiAgICBmaWVsZDogJ2ZpZWxkJyxcbiAgICBpbmxpbmU6ICdpcy1ob3Jpem9udGFsJyxcbiAgICByaWdodDogJ2lzLXB1bGxlZC1yaWdodCcsXG4gICAgbGVmdDogJ2lzLXB1bGxlZC1sZWZ0JyxcbiAgICBjZW50ZXI6ICdoYXMtdGV4dC1jZW50ZXJlZCcsXG4gICAgY29udGVudENlbnRlcjogJ2lzLWNlbnRlcmVkJyxcbiAgICBpY29uOiAnaWNvbicsXG4gICAgc21hbGw6ICdpcy1zbWFsbCcsXG4gICAgbm9tYXJnaW46ICdtYXJnaW5sZXNzJyxcbiAgICBidXR0b246ICdidXR0b24nLFxuICAgIGdyb3VwVHI6ICdpcy1zZWxlY3RlZCcsXG4gICAgZHJvcGRvd246IHtcbiAgICAgIGNvbnRhaW5lcjogJ2Ryb3Bkb3duJyxcbiAgICAgIHRyaWdnZXI6ICdkcm9wZG93bi10cmlnZ2VyJyxcbiAgICAgIG1lbnU6ICdkcm9wZG93bi1tZW51JyxcbiAgICAgIGNvbnRlbnQ6ICdkcm9wZG93bi1jb250ZW50JyxcbiAgICAgIGl0ZW06ICdkcm9wZG93bi1pdGVtJyxcbiAgICAgIGNhcmV0OiAnZmEgZmEtYW5nbGUtZG93bidcbiAgICB9LFxuICAgIHBhZ2luYXRpb246IHtcbiAgICAgIG5hdjogJycsXG4gICAgICBjb3VudDogJycsXG4gICAgICB3cmFwcGVyOiAncGFnaW5hdGlvbicsXG4gICAgICBsaXN0OiAncGFnaW5hdGlvbi1saXN0JyxcbiAgICAgIGl0ZW06ICcnLFxuICAgICAgbGluazogJ3BhZ2luYXRpb24tbGluaycsXG4gICAgICBuZXh0OiAnJyxcbiAgICAgIHByZXY6ICcnLFxuICAgICAgYWN0aXZlOiAnaXMtY3VycmVudCcsXG4gICAgICBkaXNhYmxlZDogJydcbiAgICB9XG4gIH07XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG52YXIgX3Z1ZVBhZ2luYXRpb24gPSByZXF1aXJlKFwidnVlLXBhZ2luYXRpb24tMlwiKTtcblxudmFyIF92dWV4ID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9zdGF0ZS92dWV4XCIpKTtcblxudmFyIF9ub3JtYWwgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3N0YXRlL25vcm1hbFwiKSk7XG5cbnZhciBfbWVyZ2UgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCJtZXJnZVwiKSk7XG5cbnZhciBfdGFibGUgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3RhYmxlXCIpKTtcblxudmFyIF9kYXRhMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vc3RhdGUvZGF0YVwiKSk7XG5cbnZhciBfcmVzaXplYWJsZUNvbHVtbnMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2hlbHBlcnMvcmVzaXplYWJsZS1jb2x1bW5zXCIpKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgXCJkZWZhdWx0XCI6IG9iaiB9OyB9XG5cbnZhciBfZGF0YSA9IHJlcXVpcmUoXCIuL21peGlucy9kYXRhXCIpO1xuXG52YXIgX2NyZWF0ZWQgPSByZXF1aXJlKFwiLi9taXhpbnMvY3JlYXRlZFwiKTtcblxudmFyIHRlbXBsYXRlQ29tcGlsZXIgPSByZXF1aXJlKFwiLi90ZW1wbGF0ZS1jb21waWxlclwiKTtcblxuZXhwb3J0cy5pbnN0YWxsID0gZnVuY3Rpb24gKFZ1ZSwgZ2xvYmFsT3B0aW9ucywgdXNlVnVleCkge1xuICB2YXIgdGhlbWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMyAmJiBhcmd1bWVudHNbM10gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1szXSA6IFwiYm9vdHN0cmFwM1wiO1xuICB2YXIgdGVtcGxhdGUgPSBhcmd1bWVudHMubGVuZ3RoID4gNCAmJiBhcmd1bWVudHNbNF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1s0XSA6IFwiZGVmYXVsdFwiO1xuXG4gIHZhciBjbGllbnQgPSBfbWVyZ2VbXCJkZWZhdWx0XCJdLnJlY3Vyc2l2ZSh0cnVlLCAoMCwgX3RhYmxlW1wiZGVmYXVsdFwiXSkoKSwge1xuICAgIG5hbWU6IFwiY2xpZW50LXRhYmxlXCIsXG4gICAgY29tcG9uZW50czoge1xuICAgICAgUGFnaW5hdGlvbjogX3Z1ZVBhZ2luYXRpb24uUGFnaW5hdGlvblxuICAgIH0sXG4gICAgcmVuZGVyOiB0ZW1wbGF0ZUNvbXBpbGVyLmNhbGwodGhpcywgdGVtcGxhdGUsIHRoZW1lKSxcbiAgICBwcm9wczoge1xuICAgICAgY29sdW1uczoge1xuICAgICAgICB0eXBlOiBBcnJheSxcbiAgICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICAgIH0sXG4gICAgICBkYXRhOiB7XG4gICAgICAgIHR5cGU6IEFycmF5LFxuICAgICAgICByZXF1aXJlZDogdHJ1ZVxuICAgICAgfSxcbiAgICAgIG5hbWU6IHtcbiAgICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgICByZXF1aXJlZDogZmFsc2VcbiAgICAgIH0sXG4gICAgICBvcHRpb25zOiB7XG4gICAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgICBcImRlZmF1bHRcIjogZnVuY3Rpb24gX2RlZmF1bHQoKSB7XG4gICAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBjcmVhdGVkOiBmdW5jdGlvbiBjcmVhdGVkKCkge1xuICAgICAgX2NyZWF0ZWQodGhpcyk7XG5cbiAgICAgIGlmICh0aGlzLm9wdHMudG9Nb21lbnRGb3JtYXQpIHRoaXMudHJhbnNmb3JtRGF0ZVN0cmluZ3NUb01vbWVudCgpO1xuXG4gICAgICBpZiAoIXRoaXMudnVleCkge1xuICAgICAgICB0aGlzLmluaXRPcmRlckJ5KCk7XG4gICAgICAgIHRoaXMucXVlcnkgPSB0aGlzLmluaXRRdWVyeSgpO1xuICAgICAgICB0aGlzLmN1c3RvbVF1ZXJpZXMgPSB0aGlzLmluaXRDdXN0b21GaWx0ZXJzKCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBtb3VudGVkOiBmdW5jdGlvbiBtb3VudGVkKCkge1xuICAgICAgdGhpcy5fc2V0RmlsdGVyc0RPTSh0aGlzLnF1ZXJ5KTtcblxuICAgICAgaWYgKHRoaXMub3B0cy5yZXNpemFibGVDb2x1bW5zKSB7XG4gICAgICAgICgwLCBfcmVzaXplYWJsZUNvbHVtbnNbXCJkZWZhdWx0XCJdKSh0aGlzLiRlbC5xdWVyeVNlbGVjdG9yKFwidGFibGVcIiksIHRoaXMuaGFzQ2hpbGRSb3csIHRoaXMub3B0cy5jaGlsZFJvd1RvZ2dsZXJGaXJzdCwgdGhpcy5vcHRzLnJlc2l6YWJsZUNvbHVtbnMpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9zZXRDb2x1bW5zRHJvcGRvd25DbG9zZUxpc3RlbmVyKCk7XG5cbiAgICAgIGlmICghdGhpcy52dWV4KSB7XG4gICAgICAgIHRoaXMucmVnaXN0ZXJDbGllbnRGaWx0ZXJzKCk7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuaW5pdGlhbFBhZ2UpIHRoaXMuc2V0UGFnZSh0aGlzLm9wdGlvbnMuaW5pdGlhbFBhZ2UpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5vcHRzLmdyb3VwQnkgJiYgIXRoaXMub3B0cy5vcmRlckJ5KSB7XG4gICAgICAgIHRoaXMub3JkZXJCeS5jb2x1bW4gPSB0aGlzLm9wdHMuZ3JvdXBCeTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5sb2FkU3RhdGUoKTtcblxuICAgICAgaWYgKHRoaXMuaGFzRGF0ZUZpbHRlcnMoKSkge1xuICAgICAgICB0aGlzLmluaXREYXRlRmlsdGVycygpO1xuICAgICAgfVxuICAgIH0sXG4gICAgbW9kZWw6IHtcbiAgICAgIHByb3A6IFwiZGF0YVwiXG4gICAgfSxcbiAgICBkYXRhOiBmdW5jdGlvbiBkYXRhKCkge1xuICAgICAgcmV0dXJuIF9tZXJnZVtcImRlZmF1bHRcIl0ucmVjdXJzaXZlKF9kYXRhKCksIHtcbiAgICAgICAgc291cmNlOiBcImNsaWVudFwiLFxuICAgICAgICBnbG9iYWxPcHRpb25zOiBnbG9iYWxPcHRpb25zLFxuICAgICAgICBjdXJyZW50bHlTb3J0aW5nOiB7fSxcbiAgICAgICAgdGltZTogRGF0ZS5ub3coKVxuICAgICAgfSwgKDAsIF9kYXRhMltcImRlZmF1bHRcIl0pKHVzZVZ1ZXgsIFwiY2xpZW50XCIsIHRoaXMub3B0aW9ucy5pbml0aWFsUGFnZSkpO1xuICAgIH0sXG4gICAgY29tcHV0ZWQ6IHtcbiAgICAgIHE6IHJlcXVpcmUoXCIuL2NvbXB1dGVkL3FcIiksXG4gICAgICBjdXN0b21ROiByZXF1aXJlKFwiLi9jb21wdXRlZC9jdXN0b20tcVwiKSxcbiAgICAgIHRvdGFsUGFnZXM6IHJlcXVpcmUoXCIuL2NvbXB1dGVkL3RvdGFsLXBhZ2VzXCIpLFxuICAgICAgZmlsdGVyZWREYXRhOiByZXF1aXJlKFwiLi9jb21wdXRlZC9maWx0ZXJlZC1kYXRhXCIpLFxuICAgICAgaGFzTXVsdGlTb3J0OiBmdW5jdGlvbiBoYXNNdWx0aVNvcnQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9wdHMuY2xpZW50TXVsdGlTb3J0aW5nO1xuICAgICAgfVxuICAgIH0sXG4gICAgbWV0aG9kczoge1xuICAgICAgdHJhbnNmb3JtRGF0ZVN0cmluZ3NUb01vbWVudDogcmVxdWlyZShcIi4vbWV0aG9kcy90cmFuc2Zvcm0tZGF0ZS1zdHJpbmdzLXRvLW1vbWVudFwiKSxcbiAgICAgIHJlZ2lzdGVyQ2xpZW50RmlsdGVyczogcmVxdWlyZShcIi4vbWV0aG9kcy9yZWdpc3Rlci1jbGllbnQtZmlsdGVyc1wiKSxcbiAgICAgIHNlYXJjaDogcmVxdWlyZShcIi4vbWV0aG9kcy9jbGllbnQtc2VhcmNoXCIpLFxuICAgICAgZGVmYXVsdFNvcnQ6IHJlcXVpcmUoXCIuL21ldGhvZHMvZGVmYXVsdC1zb3J0XCIpLFxuICAgICAgZ2V0R3JvdXBTbG90OiByZXF1aXJlKFwiLi9tZXRob2RzL2dldC1ncm91cC1zbG90XCIpLFxuICAgICAgdG9nZ2xlR3JvdXA6IGZ1bmN0aW9uIHRvZ2dsZUdyb3VwKGdyb3VwLCBlKSB7XG4gICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIHZhciBpID0gdGhpcy5jb2xsYXBzZWRHcm91cHMuaW5kZXhPZihncm91cCk7XG5cbiAgICAgICAgaWYgKGkgPj0gMCkge1xuICAgICAgICAgIHRoaXMuY29sbGFwc2VkR3JvdXBzLnNwbGljZShpLCAxKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmNvbGxhcHNlZEdyb3Vwcy5wdXNoKGdyb3VwKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGdyb3VwVG9nZ2xlSWNvbjogZnVuY3Rpb24gZ3JvdXBUb2dnbGVJY29uKGdyb3VwKSB7XG4gICAgICAgIHZhciBjbHMgPSB0aGlzLm9wdHMuc29ydEljb24uYmFzZSArIFwiIFwiO1xuICAgICAgICBjbHMgKz0gdGhpcy5jb2xsYXBzZWRHcm91cHMuaW5kZXhPZihncm91cCkgPiAtMSA/IHRoaXMub3B0cy5zb3J0SWNvbi5kb3duIDogdGhpcy5vcHRzLnNvcnRJY29uLnVwO1xuICAgICAgICByZXR1cm4gY2xzO1xuICAgICAgfSxcbiAgICAgIGxvYWRTdGF0ZTogZnVuY3Rpb24gbG9hZFN0YXRlKCkge1xuICAgICAgICBpZiAoIXRoaXMub3B0cy5zYXZlU3RhdGUpIHJldHVybjtcblxuICAgICAgICBpZiAoIXRoaXMuc3RvcmFnZS5nZXRJdGVtKHRoaXMuc3RhdGVLZXkpKSB7XG4gICAgICAgICAgdGhpcy5pbml0U3RhdGUoKTtcbiAgICAgICAgICB0aGlzLmFjdGl2ZVN0YXRlID0gdHJ1ZTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgc3RhdGUgPSBKU09OLnBhcnNlKHRoaXMuc3RvcmFnZS5nZXRJdGVtKHRoaXMuc3RhdGVLZXkpKTtcbiAgICAgICAgaWYgKHRoaXMub3B0cy5maWx0ZXJhYmxlKSB0aGlzLnNldEZpbHRlcihzdGF0ZS5xdWVyeSk7XG4gICAgICAgIHRoaXMuc2V0T3JkZXIoc3RhdGUub3JkZXJCeS5jb2x1bW4sIHN0YXRlLm9yZGVyQnkuYXNjZW5kaW5nKTtcblxuICAgICAgICBpZiAodGhpcy52dWV4KSB7XG4gICAgICAgICAgdGhpcy5jb21taXQoXCJTRVRfTElNSVRcIiwgc3RhdGUucGVyUGFnZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5saW1pdCA9IHN0YXRlLnBlclBhZ2U7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNldFBhZ2Uoc3RhdGUucGFnZSk7XG4gICAgICAgIHRoaXMuYWN0aXZlU3RhdGUgPSB0cnVlO1xuXG4gICAgICAgIGlmIChzdGF0ZS51c2VyQ29udHJvbHNDb2x1bW5zKSB7XG4gICAgICAgICAgdGhpcy51c2VyQ29sdW1uc0Rpc3BsYXkgPSBzdGF0ZS51c2VyQ29sdW1uc0Rpc3BsYXk7XG4gICAgICAgICAgdGhpcy51c2VyQ29udHJvbHNDb2x1bW5zID0gc3RhdGUudXNlckNvbnRyb2xzQ29sdW1ucztcbiAgICAgICAgfSAvLyBUT0RPOiBDdXN0b20gUXVlcmllc1xuXG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuICB2YXIgc3RhdGUgPSB1c2VWdWV4ID8gKDAsIF92dWV4W1wiZGVmYXVsdFwiXSkoKSA6ICgwLCBfbm9ybWFsW1wiZGVmYXVsdFwiXSkoKTtcbiAgY2xpZW50ID0gX21lcmdlW1wiZGVmYXVsdFwiXS5yZWN1cnNpdmUoY2xpZW50LCBzdGF0ZSk7XG4gIFZ1ZS5jb21wb25lbnQoXCJ2LWNsaWVudC10YWJsZVwiLCBjbGllbnQpO1xuICByZXR1cm4gY2xpZW50O1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxudmFyIF9tZXJnZSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIm1lcmdlXCIpKTtcblxudmFyIF9kYXRhMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vc3RhdGUvZGF0YVwiKSk7XG5cbnZhciBfdnVleCA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vc3RhdGUvdnVleFwiKSk7XG5cbnZhciBfbm9ybWFsID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9zdGF0ZS9ub3JtYWxcIikpO1xuXG52YXIgX3RhYmxlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi90YWJsZVwiKSk7XG5cbnZhciBfdnVlUGFnaW5hdGlvbiA9IHJlcXVpcmUoXCJ2dWUtcGFnaW5hdGlvbi0yXCIpO1xuXG52YXIgX3Jlc2l6ZWFibGVDb2x1bW5zID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9oZWxwZXJzL3Jlc2l6ZWFibGUtY29sdW1uc1wiKSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IFwiZGVmYXVsdFwiOiBvYmogfTsgfVxuXG52YXIgX2RhdGEgPSByZXF1aXJlKFwiLi9taXhpbnMvZGF0YVwiKTtcblxudmFyIF9jcmVhdGVkID0gcmVxdWlyZShcIi4vbWl4aW5zL2NyZWF0ZWRcIik7XG5cbnZhciB0ZW1wbGF0ZUNvbXBpbGVyID0gcmVxdWlyZShcIi4vdGVtcGxhdGUtY29tcGlsZXJcIik7XG5cbmV4cG9ydHMuaW5zdGFsbCA9IGZ1bmN0aW9uIChWdWUsIGdsb2JhbE9wdGlvbnMsIHVzZVZ1ZXgpIHtcbiAgdmFyIHRoZW1lID0gYXJndW1lbnRzLmxlbmd0aCA+IDMgJiYgYXJndW1lbnRzWzNdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbM10gOiBcImJvb3RzdHJhcDNcIjtcbiAgdmFyIHRlbXBsYXRlID0gYXJndW1lbnRzLmxlbmd0aCA+IDQgJiYgYXJndW1lbnRzWzRdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbNF0gOiBcImRlZmF1bHRcIjtcbiAgdmFyIHN0YXRlID0gdXNlVnVleCA/ICgwLCBfdnVleFtcImRlZmF1bHRcIl0pKFwic2VydmVyXCIpIDogKDAsIF9ub3JtYWxbXCJkZWZhdWx0XCJdKSgpO1xuXG4gIHZhciBzZXJ2ZXIgPSBfbWVyZ2VbXCJkZWZhdWx0XCJdLnJlY3Vyc2l2ZSh0cnVlLCAoMCwgX3RhYmxlW1wiZGVmYXVsdFwiXSkoKSwge1xuICAgIG5hbWU6IFwic2VydmVyLXRhYmxlXCIsXG4gICAgY29tcG9uZW50czoge1xuICAgICAgUGFnaW5hdGlvbjogX3Z1ZVBhZ2luYXRpb24uUGFnaW5hdGlvblxuICAgIH0sXG4gICAgcmVuZGVyOiB0ZW1wbGF0ZUNvbXBpbGVyLmNhbGwodGhpcywgdGVtcGxhdGUsIHRoZW1lKSxcbiAgICBwcm9wczoge1xuICAgICAgY29sdW1uczoge1xuICAgICAgICB0eXBlOiBBcnJheSxcbiAgICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICAgIH0sXG4gICAgICB1cmw6IHtcbiAgICAgICAgdHlwZTogU3RyaW5nXG4gICAgICB9LFxuICAgICAgbmFtZToge1xuICAgICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICAgIHJlcXVpcmVkOiBmYWxzZVxuICAgICAgfSxcbiAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICAgIFwiZGVmYXVsdFwiOiBmdW5jdGlvbiBfZGVmYXVsdCgpIHtcbiAgICAgICAgICByZXR1cm4ge307XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIGNyZWF0ZWQ6IGZ1bmN0aW9uIGNyZWF0ZWQoKSB7XG4gICAgICBpZiAoIXRoaXMub3B0cy5yZXF1ZXN0RnVuY3Rpb24gJiYgIXRoaXMudXJsKSB7XG4gICAgICAgIHRocm93ICd2dWUtdGFibGVzLTI6IHlvdSBtdXN0IHByb3ZpZGUgZWl0aGVyIGEgXCJ1cmxcIiBwcm9wIG9yIGEgY3VzdG9tIHJlcXVlc3QgZnVuY3Rpb24uIEFib3J0aW5nJztcbiAgICAgIH1cblxuICAgICAgX2NyZWF0ZWQodGhpcyk7XG5cbiAgICAgIGlmICghdGhpcy52dWV4KSB7XG4gICAgICAgIHRoaXMucXVlcnkgPSB0aGlzLmluaXRRdWVyeSgpO1xuICAgICAgICB0aGlzLmluaXRPcmRlckJ5KCk7XG4gICAgICAgIHRoaXMuY3VzdG9tUXVlcmllcyA9IHRoaXMuaW5pdEN1c3RvbUZpbHRlcnMoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMub3B0cy5zZW5kSW5pdGlhbFJlcXVlc3QpIHtcbiAgICAgICAgdGhpcy5sb2FkU3RhdGUoKTtcbiAgICAgICAgdGhpcy5nZXREYXRhKHRydWUpLnRoZW4oZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiByZXNwb25zZSA9PT0gJ3VuZGVmaW5lZCcpIHJldHVybjtcbiAgICAgICAgICB0aGlzLnNldERhdGEocmVzcG9uc2UpO1xuICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuXG4gICAgICAgICAgaWYgKHRoaXMuaGFzRGF0ZUZpbHRlcnMoKSkge1xuICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgIHRoaXMuaW5pdERhdGVGaWx0ZXJzKCk7XG4gICAgICAgICAgICB9LmJpbmQodGhpcyksIDApO1xuICAgICAgICAgIH1cbiAgICAgICAgfS5iaW5kKHRoaXMpKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIG1vdW50ZWQ6IGZ1bmN0aW9uIG1vdW50ZWQoKSB7XG4gICAgICB0aGlzLl9zZXRGaWx0ZXJzRE9NKHRoaXMucXVlcnkpO1xuXG4gICAgICBpZiAodGhpcy5vcHRzLnJlc2l6YWJsZUNvbHVtbnMpIHtcbiAgICAgICAgKDAsIF9yZXNpemVhYmxlQ29sdW1uc1tcImRlZmF1bHRcIl0pKHRoaXMuJGVsLnF1ZXJ5U2VsZWN0b3IoXCJ0YWJsZVwiKSwgdGhpcy5oYXNDaGlsZFJvdywgdGhpcy5vcHRzLmNoaWxkUm93VG9nZ2xlckZpcnN0LCB0aGlzLm9wdHMucmVzaXphYmxlQ29sdW1ucyk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX3NldENvbHVtbnNEcm9wZG93bkNsb3NlTGlzdGVuZXIoKTtcblxuICAgICAgaWYgKHRoaXMudnVleCkgcmV0dXJuO1xuICAgICAgdGhpcy5yZWdpc3RlclNlcnZlckZpbHRlcnMoKTtcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuaW5pdGlhbFBhZ2UpIHRoaXMuc2V0UGFnZSh0aGlzLm9wdGlvbnMuaW5pdGlhbFBhZ2UsIHRydWUpO1xuICAgIH0sXG4gICAgZGF0YTogZnVuY3Rpb24gZGF0YSgpIHtcbiAgICAgIHJldHVybiBfbWVyZ2VbXCJkZWZhdWx0XCJdLnJlY3Vyc2l2ZShfZGF0YSgpLCB7XG4gICAgICAgIHNvdXJjZTogXCJzZXJ2ZXJcIixcbiAgICAgICAgbG9hZGluZzogdHJ1ZSxcbiAgICAgICAgbGFzdEtleVN0cm9rZUF0OiBmYWxzZSxcbiAgICAgICAgZ2xvYmFsT3B0aW9uczogZ2xvYmFsT3B0aW9uc1xuICAgICAgfSwgKDAsIF9kYXRhMltcImRlZmF1bHRcIl0pKHVzZVZ1ZXgsIFwic2VydmVyXCIsIHRoaXMub3B0aW9ucy5pbml0aWFsUGFnZSkpO1xuICAgIH0sXG4gICAgbWV0aG9kczoge1xuICAgICAgcmVmcmVzaDogcmVxdWlyZShcIi4vbWV0aG9kcy9yZWZyZXNoXCIpLFxuICAgICAgZ2V0RGF0YTogcmVxdWlyZShcIi4vbWV0aG9kcy9nZXQtZGF0YVwiKSxcbiAgICAgIHNldERhdGE6IHJlcXVpcmUoXCIuL21ldGhvZHMvc2V0LWRhdGFcIiksXG4gICAgICBzZXJ2ZXJTZWFyY2g6IHJlcXVpcmUoXCIuL21ldGhvZHMvc2VydmVyLXNlYXJjaFwiKSxcbiAgICAgIHJlZ2lzdGVyU2VydmVyRmlsdGVyczogcmVxdWlyZShcIi4vbWV0aG9kcy9yZWdpc3Rlci1zZXJ2ZXItZmlsdGVyc1wiKSxcbiAgICAgIGxvYWRTdGF0ZTogZnVuY3Rpb24gbG9hZFN0YXRlKCkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgICAgIGlmICghdGhpcy5vcHRzLnNhdmVTdGF0ZSkgcmV0dXJuO1xuXG4gICAgICAgIGlmICghdGhpcy5zdG9yYWdlLmdldEl0ZW0odGhpcy5zdGF0ZUtleSkpIHtcbiAgICAgICAgICB0aGlzLmluaXRTdGF0ZSgpO1xuICAgICAgICAgIHRoaXMuYWN0aXZlU3RhdGUgPSB0cnVlO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBzdGF0ZSA9IEpTT04ucGFyc2UodGhpcy5zdG9yYWdlLmdldEl0ZW0odGhpcy5zdGF0ZUtleSkpO1xuXG4gICAgICAgIGlmICh0aGlzLnZ1ZXgpIHtcbiAgICAgICAgICB0aGlzLmNvbW1pdChcIlNFVF9TVEFURVwiLCB7XG4gICAgICAgICAgICBxdWVyeTogc3RhdGUucXVlcnksXG4gICAgICAgICAgICBjdXN0b21RdWVyaWVzOiBzdGF0ZS5jdXN0b21RdWVyaWVzLFxuICAgICAgICAgICAgcGFnZTogc3RhdGUucGFnZSxcbiAgICAgICAgICAgIGxpbWl0OiBzdGF0ZS5wZXJQYWdlLFxuICAgICAgICAgICAgb3JkZXJCeTogc3RhdGUub3JkZXJCeVxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMucGFnZSA9IHN0YXRlLnBhZ2U7XG4gICAgICAgICAgdGhpcy5xdWVyeSA9IHN0YXRlLnF1ZXJ5O1xuICAgICAgICAgIHRoaXMuY3VzdG9tUXVlcmllcyA9IHN0YXRlLmN1c3RvbVF1ZXJpZXM7XG4gICAgICAgICAgdGhpcy5saW1pdCA9IHN0YXRlLnBlclBhZ2U7XG4gICAgICAgICAgdGhpcy5vcmRlckJ5ID0gc3RhdGUub3JkZXJCeTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5vcHRzLnBhZ2luYXRpb24uZHJvcGRvd24gJiYgdGhpcy4kcmVmcy5wYWdpbmF0aW9uKSB7XG4gICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBfdGhpcy4kcmVmcy5wYWdpbmF0aW9uLlBhZ2UgPSBzdGF0ZS5wYWdlO1xuICAgICAgICAgIH0sIDApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMub3B0cy5maWx0ZXJhYmxlKSB7XG4gICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBfdGhpcy5fc2V0RmlsdGVyc0RPTShzdGF0ZS5xdWVyeSk7XG4gICAgICAgICAgfSwgMCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmFjdGl2ZVN0YXRlID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHdhdGNoOiB7XG4gICAgICB1cmw6IGZ1bmN0aW9uIHVybCgpIHtcbiAgICAgICAgdGhpcy5yZWZyZXNoKCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBjb21wdXRlZDoge1xuICAgICAgdG90YWxQYWdlczogcmVxdWlyZShcIi4vY29tcHV0ZWQvdG90YWwtcGFnZXNcIiksXG4gICAgICBmaWx0ZXJlZFF1ZXJ5OiByZXF1aXJlKFwiLi9jb21wdXRlZC9maWx0ZXJlZC1xdWVyeVwiKSxcbiAgICAgIGhhc011bHRpU29ydDogZnVuY3Rpb24gaGFzTXVsdGlTb3J0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcHRzLnNlcnZlck11bHRpU29ydGluZztcbiAgICAgIH1cbiAgICB9XG4gIH0sIHN0YXRlKTtcblxuICBWdWUuY29tcG9uZW50KFwidi1zZXJ2ZXItdGFibGVcIiwgc2VydmVyKTtcbiAgcmV0dXJuIHNlcnZlcjtcbn07IiwidmFyIGNsb25lID0gKGZ1bmN0aW9uKCkge1xuJ3VzZSBzdHJpY3QnO1xuXG5mdW5jdGlvbiBfaW5zdGFuY2VvZihvYmosIHR5cGUpIHtcbiAgcmV0dXJuIHR5cGUgIT0gbnVsbCAmJiBvYmogaW5zdGFuY2VvZiB0eXBlO1xufVxuXG52YXIgbmF0aXZlTWFwO1xudHJ5IHtcbiAgbmF0aXZlTWFwID0gTWFwO1xufSBjYXRjaChfKSB7XG4gIC8vIG1heWJlIGEgcmVmZXJlbmNlIGVycm9yIGJlY2F1c2Ugbm8gYE1hcGAuIEdpdmUgaXQgYSBkdW1teSB2YWx1ZSB0aGF0IG5vXG4gIC8vIHZhbHVlIHdpbGwgZXZlciBiZSBhbiBpbnN0YW5jZW9mLlxuICBuYXRpdmVNYXAgPSBmdW5jdGlvbigpIHt9O1xufVxuXG52YXIgbmF0aXZlU2V0O1xudHJ5IHtcbiAgbmF0aXZlU2V0ID0gU2V0O1xufSBjYXRjaChfKSB7XG4gIG5hdGl2ZVNldCA9IGZ1bmN0aW9uKCkge307XG59XG5cbnZhciBuYXRpdmVQcm9taXNlO1xudHJ5IHtcbiAgbmF0aXZlUHJvbWlzZSA9IFByb21pc2U7XG59IGNhdGNoKF8pIHtcbiAgbmF0aXZlUHJvbWlzZSA9IGZ1bmN0aW9uKCkge307XG59XG5cbi8qKlxuICogQ2xvbmVzIChjb3BpZXMpIGFuIE9iamVjdCB1c2luZyBkZWVwIGNvcHlpbmcuXG4gKlxuICogVGhpcyBmdW5jdGlvbiBzdXBwb3J0cyBjaXJjdWxhciByZWZlcmVuY2VzIGJ5IGRlZmF1bHQsIGJ1dCBpZiB5b3UgYXJlIGNlcnRhaW5cbiAqIHRoZXJlIGFyZSBubyBjaXJjdWxhciByZWZlcmVuY2VzIGluIHlvdXIgb2JqZWN0LCB5b3UgY2FuIHNhdmUgc29tZSBDUFUgdGltZVxuICogYnkgY2FsbGluZyBjbG9uZShvYmosIGZhbHNlKS5cbiAqXG4gKiBDYXV0aW9uOiBpZiBgY2lyY3VsYXJgIGlzIGZhbHNlIGFuZCBgcGFyZW50YCBjb250YWlucyBjaXJjdWxhciByZWZlcmVuY2VzLFxuICogeW91ciBwcm9ncmFtIG1heSBlbnRlciBhbiBpbmZpbml0ZSBsb29wIGFuZCBjcmFzaC5cbiAqXG4gKiBAcGFyYW0gYHBhcmVudGAgLSB0aGUgb2JqZWN0IHRvIGJlIGNsb25lZFxuICogQHBhcmFtIGBjaXJjdWxhcmAgLSBzZXQgdG8gdHJ1ZSBpZiB0aGUgb2JqZWN0IHRvIGJlIGNsb25lZCBtYXkgY29udGFpblxuICogICAgY2lyY3VsYXIgcmVmZXJlbmNlcy4gKG9wdGlvbmFsIC0gdHJ1ZSBieSBkZWZhdWx0KVxuICogQHBhcmFtIGBkZXB0aGAgLSBzZXQgdG8gYSBudW1iZXIgaWYgdGhlIG9iamVjdCBpcyBvbmx5IHRvIGJlIGNsb25lZCB0b1xuICogICAgYSBwYXJ0aWN1bGFyIGRlcHRoLiAob3B0aW9uYWwgLSBkZWZhdWx0cyB0byBJbmZpbml0eSlcbiAqIEBwYXJhbSBgcHJvdG90eXBlYCAtIHNldHMgdGhlIHByb3RvdHlwZSB0byBiZSB1c2VkIHdoZW4gY2xvbmluZyBhbiBvYmplY3QuXG4gKiAgICAob3B0aW9uYWwgLSBkZWZhdWx0cyB0byBwYXJlbnQgcHJvdG90eXBlKS5cbiAqIEBwYXJhbSBgaW5jbHVkZU5vbkVudW1lcmFibGVgIC0gc2V0IHRvIHRydWUgaWYgdGhlIG5vbi1lbnVtZXJhYmxlIHByb3BlcnRpZXNcbiAqICAgIHNob3VsZCBiZSBjbG9uZWQgYXMgd2VsbC4gTm9uLWVudW1lcmFibGUgcHJvcGVydGllcyBvbiB0aGUgcHJvdG90eXBlXG4gKiAgICBjaGFpbiB3aWxsIGJlIGlnbm9yZWQuIChvcHRpb25hbCAtIGZhbHNlIGJ5IGRlZmF1bHQpXG4qL1xuZnVuY3Rpb24gY2xvbmUocGFyZW50LCBjaXJjdWxhciwgZGVwdGgsIHByb3RvdHlwZSwgaW5jbHVkZU5vbkVudW1lcmFibGUpIHtcbiAgaWYgKHR5cGVvZiBjaXJjdWxhciA9PT0gJ29iamVjdCcpIHtcbiAgICBkZXB0aCA9IGNpcmN1bGFyLmRlcHRoO1xuICAgIHByb3RvdHlwZSA9IGNpcmN1bGFyLnByb3RvdHlwZTtcbiAgICBpbmNsdWRlTm9uRW51bWVyYWJsZSA9IGNpcmN1bGFyLmluY2x1ZGVOb25FbnVtZXJhYmxlO1xuICAgIGNpcmN1bGFyID0gY2lyY3VsYXIuY2lyY3VsYXI7XG4gIH1cbiAgLy8gbWFpbnRhaW4gdHdvIGFycmF5cyBmb3IgY2lyY3VsYXIgcmVmZXJlbmNlcywgd2hlcmUgY29ycmVzcG9uZGluZyBwYXJlbnRzXG4gIC8vIGFuZCBjaGlsZHJlbiBoYXZlIHRoZSBzYW1lIGluZGV4XG4gIHZhciBhbGxQYXJlbnRzID0gW107XG4gIHZhciBhbGxDaGlsZHJlbiA9IFtdO1xuXG4gIHZhciB1c2VCdWZmZXIgPSB0eXBlb2YgQnVmZmVyICE9ICd1bmRlZmluZWQnO1xuXG4gIGlmICh0eXBlb2YgY2lyY3VsYXIgPT0gJ3VuZGVmaW5lZCcpXG4gICAgY2lyY3VsYXIgPSB0cnVlO1xuXG4gIGlmICh0eXBlb2YgZGVwdGggPT0gJ3VuZGVmaW5lZCcpXG4gICAgZGVwdGggPSBJbmZpbml0eTtcblxuICAvLyByZWN1cnNlIHRoaXMgZnVuY3Rpb24gc28gd2UgZG9uJ3QgcmVzZXQgYWxsUGFyZW50cyBhbmQgYWxsQ2hpbGRyZW5cbiAgZnVuY3Rpb24gX2Nsb25lKHBhcmVudCwgZGVwdGgpIHtcbiAgICAvLyBjbG9uaW5nIG51bGwgYWx3YXlzIHJldHVybnMgbnVsbFxuICAgIGlmIChwYXJlbnQgPT09IG51bGwpXG4gICAgICByZXR1cm4gbnVsbDtcblxuICAgIGlmIChkZXB0aCA9PT0gMClcbiAgICAgIHJldHVybiBwYXJlbnQ7XG5cbiAgICB2YXIgY2hpbGQ7XG4gICAgdmFyIHByb3RvO1xuICAgIGlmICh0eXBlb2YgcGFyZW50ICE9ICdvYmplY3QnKSB7XG4gICAgICByZXR1cm4gcGFyZW50O1xuICAgIH1cblxuICAgIGlmIChfaW5zdGFuY2VvZihwYXJlbnQsIG5hdGl2ZU1hcCkpIHtcbiAgICAgIGNoaWxkID0gbmV3IG5hdGl2ZU1hcCgpO1xuICAgIH0gZWxzZSBpZiAoX2luc3RhbmNlb2YocGFyZW50LCBuYXRpdmVTZXQpKSB7XG4gICAgICBjaGlsZCA9IG5ldyBuYXRpdmVTZXQoKTtcbiAgICB9IGVsc2UgaWYgKF9pbnN0YW5jZW9mKHBhcmVudCwgbmF0aXZlUHJvbWlzZSkpIHtcbiAgICAgIGNoaWxkID0gbmV3IG5hdGl2ZVByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBwYXJlbnQudGhlbihmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICAgIHJlc29sdmUoX2Nsb25lKHZhbHVlLCBkZXB0aCAtIDEpKTtcbiAgICAgICAgfSwgZnVuY3Rpb24oZXJyKSB7XG4gICAgICAgICAgcmVqZWN0KF9jbG9uZShlcnIsIGRlcHRoIC0gMSkpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAoY2xvbmUuX19pc0FycmF5KHBhcmVudCkpIHtcbiAgICAgIGNoaWxkID0gW107XG4gICAgfSBlbHNlIGlmIChjbG9uZS5fX2lzUmVnRXhwKHBhcmVudCkpIHtcbiAgICAgIGNoaWxkID0gbmV3IFJlZ0V4cChwYXJlbnQuc291cmNlLCBfX2dldFJlZ0V4cEZsYWdzKHBhcmVudCkpO1xuICAgICAgaWYgKHBhcmVudC5sYXN0SW5kZXgpIGNoaWxkLmxhc3RJbmRleCA9IHBhcmVudC5sYXN0SW5kZXg7XG4gICAgfSBlbHNlIGlmIChjbG9uZS5fX2lzRGF0ZShwYXJlbnQpKSB7XG4gICAgICBjaGlsZCA9IG5ldyBEYXRlKHBhcmVudC5nZXRUaW1lKCkpO1xuICAgIH0gZWxzZSBpZiAodXNlQnVmZmVyICYmIEJ1ZmZlci5pc0J1ZmZlcihwYXJlbnQpKSB7XG4gICAgICBpZiAoQnVmZmVyLmFsbG9jVW5zYWZlKSB7XG4gICAgICAgIC8vIE5vZGUuanMgPj0gNC41LjBcbiAgICAgICAgY2hpbGQgPSBCdWZmZXIuYWxsb2NVbnNhZmUocGFyZW50Lmxlbmd0aCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBPbGRlciBOb2RlLmpzIHZlcnNpb25zXG4gICAgICAgIGNoaWxkID0gbmV3IEJ1ZmZlcihwYXJlbnQubGVuZ3RoKTtcbiAgICAgIH1cbiAgICAgIHBhcmVudC5jb3B5KGNoaWxkKTtcbiAgICAgIHJldHVybiBjaGlsZDtcbiAgICB9IGVsc2UgaWYgKF9pbnN0YW5jZW9mKHBhcmVudCwgRXJyb3IpKSB7XG4gICAgICBjaGlsZCA9IE9iamVjdC5jcmVhdGUocGFyZW50KTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHR5cGVvZiBwcm90b3R5cGUgPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YocGFyZW50KTtcbiAgICAgICAgY2hpbGQgPSBPYmplY3QuY3JlYXRlKHByb3RvKTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBjaGlsZCA9IE9iamVjdC5jcmVhdGUocHJvdG90eXBlKTtcbiAgICAgICAgcHJvdG8gPSBwcm90b3R5cGU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNpcmN1bGFyKSB7XG4gICAgICB2YXIgaW5kZXggPSBhbGxQYXJlbnRzLmluZGV4T2YocGFyZW50KTtcblxuICAgICAgaWYgKGluZGV4ICE9IC0xKSB7XG4gICAgICAgIHJldHVybiBhbGxDaGlsZHJlbltpbmRleF07XG4gICAgICB9XG4gICAgICBhbGxQYXJlbnRzLnB1c2gocGFyZW50KTtcbiAgICAgIGFsbENoaWxkcmVuLnB1c2goY2hpbGQpO1xuICAgIH1cblxuICAgIGlmIChfaW5zdGFuY2VvZihwYXJlbnQsIG5hdGl2ZU1hcCkpIHtcbiAgICAgIHBhcmVudC5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlLCBrZXkpIHtcbiAgICAgICAgdmFyIGtleUNoaWxkID0gX2Nsb25lKGtleSwgZGVwdGggLSAxKTtcbiAgICAgICAgdmFyIHZhbHVlQ2hpbGQgPSBfY2xvbmUodmFsdWUsIGRlcHRoIC0gMSk7XG4gICAgICAgIGNoaWxkLnNldChrZXlDaGlsZCwgdmFsdWVDaGlsZCk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKF9pbnN0YW5jZW9mKHBhcmVudCwgbmF0aXZlU2V0KSkge1xuICAgICAgcGFyZW50LmZvckVhY2goZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgdmFyIGVudHJ5Q2hpbGQgPSBfY2xvbmUodmFsdWUsIGRlcHRoIC0gMSk7XG4gICAgICAgIGNoaWxkLmFkZChlbnRyeUNoaWxkKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGZvciAodmFyIGkgaW4gcGFyZW50KSB7XG4gICAgICB2YXIgYXR0cnM7XG4gICAgICBpZiAocHJvdG8pIHtcbiAgICAgICAgYXR0cnMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHByb3RvLCBpKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGF0dHJzICYmIGF0dHJzLnNldCA9PSBudWxsKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgY2hpbGRbaV0gPSBfY2xvbmUocGFyZW50W2ldLCBkZXB0aCAtIDEpO1xuICAgIH1cblxuICAgIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG4gICAgICB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocGFyZW50KTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3ltYm9scy5sZW5ndGg7IGkrKykge1xuICAgICAgICAvLyBEb24ndCBuZWVkIHRvIHdvcnJ5IGFib3V0IGNsb25pbmcgYSBzeW1ib2wgYmVjYXVzZSBpdCBpcyBhIHByaW1pdGl2ZSxcbiAgICAgICAgLy8gbGlrZSBhIG51bWJlciBvciBzdHJpbmcuXG4gICAgICAgIHZhciBzeW1ib2wgPSBzeW1ib2xzW2ldO1xuICAgICAgICB2YXIgZGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocGFyZW50LCBzeW1ib2wpO1xuICAgICAgICBpZiAoZGVzY3JpcHRvciAmJiAhZGVzY3JpcHRvci5lbnVtZXJhYmxlICYmICFpbmNsdWRlTm9uRW51bWVyYWJsZSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGNoaWxkW3N5bWJvbF0gPSBfY2xvbmUocGFyZW50W3N5bWJvbF0sIGRlcHRoIC0gMSk7XG4gICAgICAgIGlmICghZGVzY3JpcHRvci5lbnVtZXJhYmxlKSB7XG4gICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNoaWxkLCBzeW1ib2wsIHtcbiAgICAgICAgICAgIGVudW1lcmFibGU6IGZhbHNlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaW5jbHVkZU5vbkVudW1lcmFibGUpIHtcbiAgICAgIHZhciBhbGxQcm9wZXJ0eU5hbWVzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMocGFyZW50KTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYWxsUHJvcGVydHlOYW1lcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgcHJvcGVydHlOYW1lID0gYWxsUHJvcGVydHlOYW1lc1tpXTtcbiAgICAgICAgdmFyIGRlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHBhcmVudCwgcHJvcGVydHlOYW1lKTtcbiAgICAgICAgaWYgKGRlc2NyaXB0b3IgJiYgZGVzY3JpcHRvci5lbnVtZXJhYmxlKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgY2hpbGRbcHJvcGVydHlOYW1lXSA9IF9jbG9uZShwYXJlbnRbcHJvcGVydHlOYW1lXSwgZGVwdGggLSAxKTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNoaWxkLCBwcm9wZXJ0eU5hbWUsIHtcbiAgICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gY2hpbGQ7XG4gIH1cblxuICByZXR1cm4gX2Nsb25lKHBhcmVudCwgZGVwdGgpO1xufVxuXG4vKipcbiAqIFNpbXBsZSBmbGF0IGNsb25lIHVzaW5nIHByb3RvdHlwZSwgYWNjZXB0cyBvbmx5IG9iamVjdHMsIHVzZWZ1bGwgZm9yIHByb3BlcnR5XG4gKiBvdmVycmlkZSBvbiBGTEFUIGNvbmZpZ3VyYXRpb24gb2JqZWN0IChubyBuZXN0ZWQgcHJvcHMpLlxuICpcbiAqIFVTRSBXSVRIIENBVVRJT04hIFRoaXMgbWF5IG5vdCBiZWhhdmUgYXMgeW91IHdpc2ggaWYgeW91IGRvIG5vdCBrbm93IGhvdyB0aGlzXG4gKiB3b3Jrcy5cbiAqL1xuY2xvbmUuY2xvbmVQcm90b3R5cGUgPSBmdW5jdGlvbiBjbG9uZVByb3RvdHlwZShwYXJlbnQpIHtcbiAgaWYgKHBhcmVudCA9PT0gbnVsbClcbiAgICByZXR1cm4gbnVsbDtcblxuICB2YXIgYyA9IGZ1bmN0aW9uICgpIHt9O1xuICBjLnByb3RvdHlwZSA9IHBhcmVudDtcbiAgcmV0dXJuIG5ldyBjKCk7XG59O1xuXG4vLyBwcml2YXRlIHV0aWxpdHkgZnVuY3Rpb25zXG5cbmZ1bmN0aW9uIF9fb2JqVG9TdHIobykge1xuICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pO1xufVxuY2xvbmUuX19vYmpUb1N0ciA9IF9fb2JqVG9TdHI7XG5cbmZ1bmN0aW9uIF9faXNEYXRlKG8pIHtcbiAgcmV0dXJuIHR5cGVvZiBvID09PSAnb2JqZWN0JyAmJiBfX29ialRvU3RyKG8pID09PSAnW29iamVjdCBEYXRlXSc7XG59XG5jbG9uZS5fX2lzRGF0ZSA9IF9faXNEYXRlO1xuXG5mdW5jdGlvbiBfX2lzQXJyYXkobykge1xuICByZXR1cm4gdHlwZW9mIG8gPT09ICdvYmplY3QnICYmIF9fb2JqVG9TdHIobykgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59XG5jbG9uZS5fX2lzQXJyYXkgPSBfX2lzQXJyYXk7XG5cbmZ1bmN0aW9uIF9faXNSZWdFeHAobykge1xuICByZXR1cm4gdHlwZW9mIG8gPT09ICdvYmplY3QnICYmIF9fb2JqVG9TdHIobykgPT09ICdbb2JqZWN0IFJlZ0V4cF0nO1xufVxuY2xvbmUuX19pc1JlZ0V4cCA9IF9faXNSZWdFeHA7XG5cbmZ1bmN0aW9uIF9fZ2V0UmVnRXhwRmxhZ3MocmUpIHtcbiAgdmFyIGZsYWdzID0gJyc7XG4gIGlmIChyZS5nbG9iYWwpIGZsYWdzICs9ICdnJztcbiAgaWYgKHJlLmlnbm9yZUNhc2UpIGZsYWdzICs9ICdpJztcbiAgaWYgKHJlLm11bHRpbGluZSkgZmxhZ3MgKz0gJ20nO1xuICByZXR1cm4gZmxhZ3M7XG59XG5jbG9uZS5fX2dldFJlZ0V4cEZsYWdzID0gX19nZXRSZWdFeHBGbGFncztcblxucmV0dXJuIGNsb25lO1xufSkoKTtcblxuaWYgKHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnICYmIG1vZHVsZS5leHBvcnRzKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gY2xvbmU7XG59XG4iLCJpZiAoXCJwcm9kdWN0aW9uXCIgPT09ICdwcm9kdWN0aW9uJykge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vdnVlLmNvbW1vbi5wcm9kLmpzJylcbn0gZWxzZSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi92dWUuY29tbW9uLmRldi5qcycpXG59XG4iLCIvKiFcbiAqIFZ1ZS5qcyB2Mi42LjEwXG4gKiAoYykgMjAxNC0yMDE5IEV2YW4gWW91XG4gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4gKi9cblwidXNlIHN0cmljdFwiO3ZhciBlPU9iamVjdC5mcmVlemUoe30pO2Z1bmN0aW9uIHQoZSl7cmV0dXJuIG51bGw9PWV9ZnVuY3Rpb24gbihlKXtyZXR1cm4gbnVsbCE9ZX1mdW5jdGlvbiByKGUpe3JldHVybiEwPT09ZX1mdW5jdGlvbiBpKGUpe3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiBlfHxcIm51bWJlclwiPT10eXBlb2YgZXx8XCJzeW1ib2xcIj09dHlwZW9mIGV8fFwiYm9vbGVhblwiPT10eXBlb2YgZX1mdW5jdGlvbiBvKGUpe3JldHVybiBudWxsIT09ZSYmXCJvYmplY3RcIj09dHlwZW9mIGV9dmFyIGE9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztmdW5jdGlvbiBzKGUpe3JldHVyblwiW29iamVjdCBPYmplY3RdXCI9PT1hLmNhbGwoZSl9ZnVuY3Rpb24gYyhlKXt2YXIgdD1wYXJzZUZsb2F0KFN0cmluZyhlKSk7cmV0dXJuIHQ+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/IG1hcC5tYXAoZnVuY3Rpb24gKGtleSkgeyByZXR1cm4gKHsga2V5OiBrZXksIHZhbDoga2V5IH0pOyB9KVxuICAgIDogT2JqZWN0LmtleXMobWFwKS5tYXAoZnVuY3Rpb24gKGtleSkgeyByZXR1cm4gKHsga2V5OiBrZXksIHZhbDogbWFwW2tleV0gfSk7IH0pXG59XG5cbi8qKlxuICogVmFsaWRhdGUgd2hldGhlciBnaXZlbiBtYXAgaXMgdmFsaWQgb3Igbm90XG4gKiBAcGFyYW0geyp9IG1hcFxuICogQHJldHVybiB7Qm9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaXNWYWxpZE1hcCAobWFwKSB7XG4gIHJldHVybiBBcnJheS5pc0FycmF5KG1hcCkgfHwgaXNPYmplY3QobWFwKVxufVxuXG4vKipcbiAqIFJldHVybiBhIGZ1bmN0aW9uIGV4cGVjdCB0d28gcGFyYW0gY29udGFpbnMgbmFtZXNwYWNlIGFuZCBtYXAuIGl0IHdpbGwgbm9ybWFsaXplIHRoZSBuYW1lc3BhY2UgYW5kIHRoZW4gdGhlIHBhcmFtJ3MgZnVuY3Rpb24gd2lsbCBoYW5kbGUgdGhlIG5ldyBuYW1lc3BhY2UgYW5kIHRoZSBtYXAuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmblxuICogQHJldHVybiB7RnVuY3Rpb259XG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZU5hbWVzcGFjZSAoZm4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChuYW1lc3BhY2UsIG1hcCkge1xuICAgIGlmICh0eXBlb2YgbmFtZXNwYWNlICE9PSAnc3RyaW5nJykge1xuICAgICAgbWFwID0gbmFtZXNwYWNlO1xuICAgICAgbmFtZXNwYWNlID0gJyc7XG4gICAgfSBlbHNlIGlmIChuYW1lc3BhY2UuY2hhckF0KG5hbWVzcGFjZS5sZW5ndGggLSAxKSAhPT0gJy8nKSB7XG4gICAgICBuYW1lc3BhY2UgKz0gJy8nO1xuICAgIH1cbiAgICByZXR1cm4gZm4obmFtZXNwYWNlLCBtYXApXG4gIH1cbn1cblxuLyoqXG4gKiBTZWFyY2ggYSBzcGVjaWFsIG1vZHVsZSBmcm9tIHN0b3JlIGJ5IG5hbWVzcGFjZS4gaWYgbW9kdWxlIG5vdCBleGlzdCwgcHJpbnQgZXJyb3IgbWVzc2FnZS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBzdG9yZVxuICogQHBhcmFtIHtTdHJpbmd9IGhlbHBlclxuICogQHBhcmFtIHtTdHJpbmd9IG5hbWVzcGFjZVxuICogQHJldHVybiB7T2JqZWN0fVxuICovXG5mdW5jdGlvbiBnZXRNb2R1bGVCeU5hbWVzcGFjZSAoc3RvcmUsIGhlbHBlciwgbmFtZXNwYWNlKSB7XG4gIHZhciBtb2R1bGUgPSBzdG9yZS5fbW9kdWxlc05hbWVzcGFjZU1hcFtuYW1lc3BhY2VdO1xuICBpZiAoXCJwcm9kdWN0aW9uXCIgIT09ICdwcm9kdWN0aW9uJyAmJiAhbW9kdWxlKSB7XG4gICAgY29uc29sZS5lcnJvcigoXCJbdnVleF0gbW9kdWxlIG5hbWVzcGFjZSBub3QgZm91bmQgaW4gXCIgKyBoZWxwZXIgKyBcIigpOiBcIiArIG5hbWVzcGFjZSkpO1xuICB9XG4gIHJldHVybiBtb2R1bGVcbn1cblxudmFyIGluZGV4ID0ge1xuICBTdG9yZTogU3RvcmUsXG4gIGluc3RhbGw6IGluc3RhbGwsXG4gIHZlcnNpb246ICczLjEuMicsXG4gIG1hcFN0YXRlOiBtYXBTdGF0ZSxcbiAgbWFwTXV0YXRpb25zOiBtYXBNdXRhdGlvbnMsXG4gIG1hcEdldHRlcnM6IG1hcEdldHRlcnMsXG4gIG1hcEFjdGlvbnM6IG1hcEFjdGlvbnMsXG4gIGNyZWF0ZU5hbWVzcGFjZWRIZWxwZXJzOiBjcmVhdGVOYW1lc3BhY2VkSGVscGVyc1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBpbmRleDtcbiIsImltcG9ydCAnZXM2LXByb21pc2UvYXV0byc7XG5cbmltcG9ydCBvYmplY3RGaXRJbWFnZXMgZnJvbSAnb2JqZWN0LWZpdC1pbWFnZXMnO1xuaW1wb3J0IGltYWdlUG9wdXAgZnJvbSAnLi9tb2R1bGVzL2ltYWdlLXBvcHVwJztcbmltcG9ydCB2aWRlb1BvcHVwIGZyb20gJy4vbW9kdWxlcy92aWRlby1wb3B1cCc7XG5pbXBvcnQgbWFjaGluZVNlYXJjaCBmcm9tICcuL21vZHVsZXMvbWFjaGluZS1zZWFyY2gnO1xuaW1wb3J0IGJyYW5jaEJhciBmcm9tICcuL21vZHVsZXMvYnJhbmNoLWJhcic7XG5pbXBvcnQgY3VzdG9tU2VsZWN0IGZyb20gJy4vbW9kdWxlcy9jdXN0b20tc2VsZWN0JztcbmltcG9ydCBuYXZpZ2F0aW9uIGZyb20gJy4vbW9kdWxlcy9uYXZpZ2F0aW9uJztcbmltcG9ydCBzaG93SW5wdXRzIGZyb20gJy4vbW9kdWxlcy9zaG93LW1vcmUtZmlsZS1pbnB1dHMnO1xuaW1wb3J0IGZpbHRlck1hY2hpbmVBY2Nlc3NvcmllcyBmcm9tICcuL21vZHVsZXMvZmlsdGVyLW1hY2hpbmUtYWNjZXNzb3JpZXMnO1xuaW1wb3J0IGZpbHRlck5ld3MgZnJvbSAnLi9tb2R1bGVzL2ZpbHRlci1uZXdzJztcbmltcG9ydCBjdXN0b21PcmRlcmVySW5mbyBmcm9tICcuL21vZHVsZXMvY3VzdG9tLW9yZGVyZXItaW5mbyc7XG5pbXBvcnQgY29sbGVjdGlvbk1ha2VyIGZyb20gJy4vbW9kdWxlcy9jb2xsZWN0aW9uLW1ha2VyJztcbmltcG9ydCBzZWxlY3RNYXRlcmlhbExhbmd1YWdlIGZyb20gJy4vbW9kdWxlcy9zZWxlY3QtbWF0ZXJpYWwtbGFuZ3VhZ2UnO1xuXG5pbXBvcnQgY3VzdG9tZXJzQXBwIGZyb20gJy4vbW9kdWxlcy92dWUvYXBwcy9jdXN0b21lcnMtYXBwLyc7XG5pbXBvcnQgdXNlclNldHRpbmdzQXBwIGZyb20gJy4vbW9kdWxlcy92dWUvYXBwcy91c2VyLXNldHRpbmdzLWFwcC8nO1xuaW1wb3J0IGZvcmdvdHRlblBhc3N3b3JkQXBwIGZyb20gJy4vbW9kdWxlcy92dWUvYXBwcy9mb3Jnb3R0ZW4tcGFzc3dvcmQtYXBwLyc7XG5pbXBvcnQgdXBkYXRlUGFzc3dvcmRBcHAgZnJvbSAnLi9tb2R1bGVzL3Z1ZS9hcHBzL3VwZGF0ZS1wYXNzd29yZC1hcHAvJztcbmltcG9ydCBvd25Db21wYW55QXBwIGZyb20gJy4vbW9kdWxlcy92dWUvYXBwcy9vd24tY29tcGFueS1hcHAnO1xuaW1wb3J0IGN1c3RvbWVyTWFjaGluZXNBcHAgZnJvbSAnLi9tb2R1bGVzL3Z1ZS9hcHBzL2N1c3RvbWVyLW1hY2hpbmVzLWFwcCc7XG5pbXBvcnQgY29tcGxhaW50c0FwcCBmcm9tICcuL21vZHVsZXMvdnVlL2FwcHMvY29tcGxhaW50cy1hcHAnO1xuaW1wb3J0IHdhcnJhbnR5UmVnaXN0cmF0aW9uc0FwcCBmcm9tICcuL21vZHVsZXMvdnVlL2FwcHMvd2FycmFudHktcmVnaXN0cmF0aW9ucy1hcHAnO1xuXG4vLyBBY3RpdmF0ZSBzZXJ2ZXIgd29ya2VyXG5pZiAoJ3NlcnZpY2VXb3JrZXInIGluIG5hdmlnYXRvcikge1xuICBpZiAocHJvY2Vzcy5lbnYuTE9DQUxfTU9ERSkge1xuICAgIG5hdmlnYXRvci5zZXJ2aWNlV29ya2VyLnJlZ2lzdGVyKCcvbG9jYWwtc2VydmljZS13b3JrZXIuanMnLCB7IHNjb3BlOiAnLycgfSkudGhlbihmdW5jdGlvbiAocmVnKSB7XG4gICAgICAvLyByZWdpc3RyYXRpb24gd29ya2VkXG4gICAgICBjb25zb2xlLmxvZygnTG9jYWwgc2VydmljZSB3b3JrZXIgdmVyc2lvbiByZWdpc3RyYXRpb24gc3VjY2VlZGVkLiBTY29wZSBpcyAnICsgcmVnLnNjb3BlKTtcbiAgICB9KS5jYXRjaChmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgIC8vIHJlZ2lzdHJhdGlvbiBmYWlsZWRcbiAgICAgIGNvbnNvbGUubG9nKCdMb2NhbCBzZXJ2aWNlIHdvcmtlciByZWdpc3RyYXRpb24gZmFpbGVkLicpO1xuICAgIH0pO1xuICB9IGVsc2Uge1xuXG4gICAgbmF2aWdhdG9yLnNlcnZpY2VXb3JrZXIucmVnaXN0ZXIoJy9zdGF0aWMvc3R1ZGlvL3B1Yi93ZWIvdjEvJyArIHByb2Nlc3MuZW52LlJFU09VUkNFX0ZPTERFUiArICcvc2VydmljZS13b3JrZXIuanMnLCB7IHNjb3BlOiAnLycgfSlcbiAgICAgIC50aGVuKGZ1bmN0aW9uIChyZWcpIHtcbiAgICAgICAgLy8gcmVnaXN0cmF0aW9uIHdvcmtlZFxuICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgIC8vIHJlZ2lzdHJhdGlvbiBmYWlsZWRcbiAgICAgICAgY29uc29sZS5sb2coJ1NlcnZpY2Ugd29ya2VyIHJlZ2lzdHJhdGlvbiBmYWlsZWQuJyk7XG4gICAgICB9KTtcbiAgfVxufVxuXG4vLyBWdWUgYXBwc1xuY3VzdG9tZXJzQXBwLmluaXQoJ2pzLWN1c3RvbWVycy1hcHAnKTtcbnVzZXJTZXR0aW5nc0FwcC5pbml0KCdqcy11c2VyLXNldHRpbmdzLWFwcCcpO1xuZm9yZ290dGVuUGFzc3dvcmRBcHAuaW5pdCgnanMtZm9yZ290LXBhc3N3b3JkLWFwcCcpO1xudXBkYXRlUGFzc3dvcmRBcHAuaW5pdCgnanMtdXBkYXRlLXBhc3N3b3JkLWFwcCcpO1xub3duQ29tcGFueUFwcC5pbml0KCdqcy1vd24tY29tcGFueS1hcHAnKTtcbmN1c3RvbWVyTWFjaGluZXNBcHAuaW5pdCgnanMtY3VzdG9tZXItbWFjaGluZXMtYXBwJyk7XG5jb21wbGFpbnRzQXBwLmluaXQoJ2pzLWNvbXBsYWludHMtYXBwJyk7XG53YXJyYW50eVJlZ2lzdHJhdGlvbnNBcHAuaW5pdCgnanMtd2FycmFudHktcmVnaXN0cmF0aW9ucy1hcHAnKTtcblxubmF2aWdhdGlvbi5pbml0KCk7XG5zaG93SW5wdXRzLmluaXQoKTtcbmJyYW5jaEJhci5pbml0KCk7XG5jdXN0b21TZWxlY3QuaW5pdCgpO1xuY3VzdG9tT3JkZXJlckluZm8uaW5pdCgpO1xuZmlsdGVyTmV3cy5pbml0KCk7XG5maWx0ZXJNYWNoaW5lQWNjZXNzb3JpZXMuaW5pdCgpO1xubWFjaGluZVNlYXJjaC5pbml0KCk7XG5pbWFnZVBvcHVwLmluaXQoJy5qcy1wb3B1cC1pbWFnZScpO1xudmlkZW9Qb3B1cC5pbml0KCcuanMtcG9wdXAtdmlkZW8nKTtcbmNvbGxlY3Rpb25NYWtlci5pbml0KCk7XG5zZWxlY3RNYXRlcmlhbExhbmd1YWdlLmluaXQoKTtcblxuLy9wb2x5ZmlsbHNcbmltcG9ydCAncG9seWZpbGwtYXJyYXktaW5jbHVkZXMnO1xuLy8gUG9seWZpbGwgb2JqZWN0LWZpdCBjc3MgcHJvcGVydHkgZm9yIElFIGJyb3dzZXJzXG5vYmplY3RGaXRJbWFnZXMoJy5qcy1vYmplY3QtZml0Jyk7XG4iLCJcbmNvbnN0IEdBVHJhY2tpbmdDb2RlID0gJ1VBLTQ4MzE4ODktMzAnO1xubGV0IEdBQ3JlYXRlZCA9IG51bGw7XG5cbi8qKlxuICogU2VuZCBldmVudCB0byBHb29nbGUgYW5hbHl0aWNzXG4gKiBAcGFyYW0ge3N0cmluZ30gZXZlbnRDYXRlZ29yeSBldmVudCBjYXRlZ29yeVxuICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50QWN0aW9uIGV2ZW50IGFjdGlvblxuICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50TGFiZWwgZXZlbnQgbGFiZWxcbiAgKiBAcGFyYW0ge251bWJlcn0gZXZlbnRWYWx1ZSBldmVudCB2YWx1ZVxuKi9cbmZ1bmN0aW9uIHNlbmRHQUV2ZW50KGV2ZW50Q2F0ZWdvcnksIGV2ZW50QWN0aW9uLCBldmVudExhYmVsLCBldmVudFZhbHVlKSB7XG4gIGlmKCB0eXBlb2Ygd2luZG93LmdhICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuZ2EgKXtcblxuICAgIGlmKCAhR0FDcmVhdGVkICl7XG4gICAgICB3aW5kb3cuZ2EoJ2NyZWF0ZScsIEdBVHJhY2tpbmdDb2RlLCAnYXV0bycpO1xuICAgICAgR0FDcmVhdGVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICB3aW5kb3cuZ2EoJ3NlbmQnLCB7XG4gICAgICBoaXRUeXBlOiAnZXZlbnQnLFxuICAgICAgZXZlbnRDYXRlZ29yeSxcbiAgICAgIGV2ZW50QWN0aW9uLFxuICAgICAgZXZlbnRMYWJlbCxcbiAgICAgIGV2ZW50VmFsdWVcbiAgICB9KTtcbiAgfVxufVxuXG4vKlxuUHVzaCBldmVudCBkZXRhaWxzIHRvIERhdGFsYXllciwgdG8gYmUgcGFzc2VkIHRvIEdvb2dsZSBzZXJ2aWNlcyAoVGFnIE1hbmFnZXIpXG4qL1xuZnVuY3Rpb24gcHVzaEV2ZW50VG9EYXRhbGF5ZXIoZXZlbnQpIHtcbiAgd2luZG93LmRhdGFMYXllci5wdXNoKHtcbiAgICAnZXZlbnQnOiAnZ2FFdmVudCcsXG4gICAgJ2V2ZW50Q2F0ZWdvcnknOiBldmVudC5ldmVudENhdGVnb3J5LFxuICAgICdldmVudEFjdGlvbic6IGV2ZW50LmV2ZW50QWN0aW9uLFxuICAgICdldmVudExhYmVsJzogZXZlbnQuZXZlbnRMYWJlbFxuICB9KTtcbn1cblxuLypcblB1c2ggb2JqZWN0IHRvIERhdGFsYXllciwgdG8gYmUgcGFzc2VkIHRvIEdvb2dsZSBzZXJ2aWNlcyAoVGFnIE1hbmFnZXIpXG4qL1xuZnVuY3Rpb24gcHVzaE9iamVjdFRvRGF0YWxheWVyKG9iamVjdCkge1xuICB3aW5kb3cuZGF0YUxheWVyLnB1c2gob2JqZWN0KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHB1c2hFdmVudFRvRGF0YWxheWVyLCBwdXNoT2JqZWN0VG9EYXRhbGF5ZXIsIHNlbmRHQUV2ZW50XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYnJhbmNoQmFyID0ge1xuICBfbWluaWZpZWRDbGFzczogJ2JyYW5jaC1iYXItLW1pbmlmaWVkJyxcbiAgX2hpZGRlbkNsYXNzOiAnYnJhbmNoLWJhci0taGlkZGVuJyxcbiAgX3N0b3JhZ2VTZXR0aW5nczogbnVsbCxcbiAgX2ZvbGRlcklkOiBudWxsLFxuICBfc2V0dGluZ3NLZXk6IG51bGwsXG4gIF9kb206IHtcbiAgICBiYXI6IG51bGwsXG4gICAgdG9nZ2xlczogbnVsbCxcbiAgICBwYWdlU2VsZWN0czogbnVsbFxuICB9LFxuICBfaXNMb2NhbFN0b3JhZ2VFbmFibGVkOiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHRlc3QgPSAnYnJhbmNoLWJhci10ZXN0JztcblxuICAgIHRyeSB7XG4gICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0ZXN0LCB0ZXN0KTtcbiAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKHRlc3QpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfSxcbiAgX2lzTWluaWZpZWQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5fZG9tLmJhci5jbGFzc05hbWUuc3BsaXQoJyAnKS5pbmRleE9mKHRoaXMuX21pbmlmaWVkQ2xhc3MpID49IDA7XG4gIH0sXG4gIF9nZXRTZXR0aW5nczogZnVuY3Rpb24gKCkge1xuICAgIHZhciBzZXR0aW5ncyA9IG51bGw7XG5cbiAgICBpZiAoIXRoaXMuX2lzTG9jYWxTdG9yYWdlRW5hYmxlZCgpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgdGhpcy5fZm9sZGVySWQgPSB0aGlzLl9kb20uYmFyLmdldEF0dHJpYnV0ZSgnZGF0YS1mb2xkZXItaWQnKTtcbiAgICB0aGlzLl9zZXR0aW5nc0tleSA9ICdicmFuY2gtYmFyLS0nICsgdGhpcy5fZm9sZGVySWQ7XG4gICAgaWYgKHRoaXMuX3NldHRpbmdzS2V5KSB7XG4gICAgICB0cnkge1xuICAgICAgICBzZXR0aW5ncyA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5fc2V0dGluZ3NLZXkpKTtcbiAgICAgICAgcmV0dXJuIHNldHRpbmdzO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gc2V0dGluZ3M7XG4gIH0sXG4gIF91cGRhdGVTZXR0aW5nczogZnVuY3Rpb24gKCkge1xuICAgIGlmICghdGhpcy5faXNMb2NhbFN0b3JhZ2VFbmFibGVkKCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuX3N0b3JhZ2VTZXR0aW5ncykge1xuICAgICAgdGhpcy5fc3RvcmFnZVNldHRpbmdzID0ge307XG4gICAgfVxuXG4gICAgdGhpcy5fc3RvcmFnZVNldHRpbmdzLm1pbmlmaWVkID0gdGhpcy5faXNNaW5pZmllZCgpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKHRoaXMuX3NldHRpbmdzS2V5LCBKU09OLnN0cmluZ2lmeSh0aGlzLl9zdG9yYWdlU2V0dGluZ3MpKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH0sXG4gIF90b2dnbGVNaW5pZmllZDogZnVuY3Rpb24gKCkge1xuICAgIGlmICh0aGlzLl9pc01pbmlmaWVkKCkpIHtcbiAgICAgIHZhciByZWcgPSBuZXcgUmVnRXhwKCcoXFxcXHN8XiknICsgdGhpcy5fbWluaWZpZWRDbGFzcyArICcoXFxcXHN8JCknKTtcbiAgICAgIHRoaXMuX2RvbS5iYXIuY2xhc3NOYW1lID0gdGhpcy5fZG9tLmJhci5jbGFzc05hbWUucmVwbGFjZShyZWcsICcgJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2RvbS5iYXIuY2xhc3NOYW1lICs9ICcgJyArIHRoaXMuX21pbmlmaWVkQ2xhc3M7XG4gICAgfVxuICB9LFxuICBfaW5pdFRvZ2dsZXM6IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICB0aGlzLl9kb20udG9nZ2xlcyA9IHRoaXMuX2RvbS5iYXIuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnanMtYnJhbmNoLWJhcl9fdG9nZ2xlJyk7XG5cbiAgICBmb3IgKHZhciBpID0gMCwgbCA9IHRoaXMuX2RvbS50b2dnbGVzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgdGhpcy5fZG9tLnRvZ2dsZXNbaV0uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHNlbGYuX3RvZ2dsZU1pbmlmaWVkKCk7XG4gICAgICAgIHNlbGYuX3VwZGF0ZVNldHRpbmdzKCk7XG4gICAgICB9LCBmYWxzZSk7XG4gICAgfVxuICB9LFxuICBfaW5pdFBhZ2VTZWxlY3RzOiBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5fZG9tLnBhZ2VTZWxlY3RzID0gdGhpcy5fZG9tLmJhci5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdqcy1icmFuY2gtYmFyX19wYWdlLXNlbGVjdCcpO1xuXG4gICAgZm9yICh2YXIgaSA9IDAsIGwgPSB0aGlzLl9kb20ucGFnZVNlbGVjdHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICB0aGlzLl9kb20ucGFnZVNlbGVjdHNbaV0uYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgdmFyIHZhbCA9IGUudGFyZ2V0LnZhbHVlO1xuXG4gICAgICAgIGlmICh2YWwpIHtcbiAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IHZhbDtcbiAgICAgICAgfVxuICAgICAgfSwgZmFsc2UpO1xuICAgIH1cbiAgfSxcbiAgX3Nob3dCYXI6IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcmVnID0gbmV3IFJlZ0V4cCgnKFxcXFxzfF4pJyArIHRoaXMuX2hpZGRlbkNsYXNzICsgJyhcXFxcc3wkKScpO1xuICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgIHNlbGYuX2RvbS5iYXIuY2xhc3NOYW1lID0gc2VsZi5fZG9tLmJhci5jbGFzc05hbWUucmVwbGFjZShyZWcsICcgJyk7XG4gIH0sXG4gIGluaXQ6IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLl9kb20uYmFyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2pzLWJyYW5jaC1iYXInKTsgLy8gQXNzdW1lcyBvbmx5IG9uZSBiYXIgcGVyIHBhZ2VcblxuICAgIGlmICh0aGlzLl9kb20uYmFyKSB7XG4gICAgICB0aGlzLl9zdG9yYWdlU2V0dGluZ3MgPSB0aGlzLl9nZXRTZXR0aW5ncygpO1xuXG4gICAgICAvLyBJZiB1c2VyIGxlZnQgdGhlIGJhciBvcGVuXG4gICAgICBpZiAodGhpcy5fc3RvcmFnZVNldHRpbmdzICYmICF0aGlzLl9zdG9yYWdlU2V0dGluZ3MubWluaWZpZWQpIHtcbiAgICAgICAgdGhpcy5fdG9nZ2xlTWluaWZpZWQoKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5faW5pdFRvZ2dsZXMoKTtcbiAgICAgIHRoaXMuX2luaXRQYWdlU2VsZWN0cygpO1xuXG4gICAgICB0aGlzLl9zaG93QmFyKCk7XG4gICAgfVxuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGJyYW5jaEJhcjtcbiIsIi8vICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyAqIENvbGxlY3Rpb24gbWFrZXIgZnVuY3Rpb25hbGl0eVxuLy8gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgJCBmcm9tICdqcXVlcnknO1xuaW1wb3J0IENvb2tpZXMgZnJvbSAnanMtY29va2llJztcbmltcG9ydCBkYXRhbGF5ZXJBY3Rpb25zIGZyb20gJy4vYW5hbHl0aWNzLWFjdGlvbnMnO1xuXG5jb25zdCBjb2xsZWN0aW9uTWFrZXIgPSAoZnVuY3Rpb24gKCkge1xuICBjb25zdCBibG9jayA9ICcuanMtY29sbGVjdGlvbi1tYWtlcic7XG5cbiAgbGV0ICRjbUVsZW1lbnQgPSBudWxsLFxuICAgICRkaWFsb2dFbGVtID0gbnVsbCxcbiAgICBhamF4SGFuZGxlclVybCA9IG51bGwsXG4gICAgaW5pdGlhbGl6ZXJVcmwgPSBudWxsLFxuICAgIGJhc2tldElkID0gJ2RlZmF1bHQtYmFza2V0JyxcbiAgICBpbWFnZVF1YWxpdHkgPSBudWxsLFxuICAgIGN1cnJlbnRQaGFzZSA9ICdub3RydW5uaW5nJyxcbiAgICBwZXJjZW50UGVyUG9sbCA9IDAsXG4gICAgcGRmUHJvZ3Jlc3MgPSAwO1xuXG4gIGZ1bmN0aW9uIGdlbmVyYWxBamF4KGFqYXhVcmwsIHBhcmFtcyA9IHt9LCB0eXBlID0gJ0dFVCcsIGNhbGxiYWNrLCBjYlBhcmFtcyA9IHt9KXtcbiAgICAkLmFqYXgoe1xuICAgICAgdXJsOiBhamF4VXJsLFxuICAgICAgdHlwZTogdHlwZSxcbiAgICAgIGRhdGE6IHBhcmFtcyxcbiAgICAgIGNhY2hlOiBmYWxzZVxuICAgIH0pLmRvbmUoZnVuY3Rpb24gKHJlc3ApIHtcbiAgICAgIGlmKHR5cGVvZihjYWxsYmFjaykgIT09ICd1bmRlZmluZWQnKXtcbiAgICAgICAgY2FsbGJhY2socmVzcCwgY2JQYXJhbXMpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLypcbiAgKlxuICAqIEZ1bmN0aW9ucyB0aGF0IGFyZSB1c2VkIG91dHNpZGUgY29sbGVjdGlvbiBtYWtlciBwYWdlXG4gICpcbiAgKi9cblxuICAvLyBJdGVtIHJlbW92ZWQgZnJvbSBjb2xsZWN0aW9uIG1ha2VyIChidXR0b24pXG4gIGZ1bmN0aW9uIGl0ZW1SZW1vdmVkKHJlc3AsICRpdGVtKXtcbiAgICBpZigkaXRlbSl7XG4gICAgICAkaXRlbS5kYXRhKCdpbi1jYXJ0JywgZmFsc2UpO1xuICAgICAgJGl0ZW0udGV4dCgkaXRlbS5kYXRhKCd0ZXh0LWFkZCcpKTtcbiAgICB9XG4gIH1cblxuICAvLyBJdGVtIGFkZGVkIHRvIGNvbGxlY3Rpb24gbWFrZXIgKGJ1dHRvbilcbiAgZnVuY3Rpb24gaXRlbUFkZGVkKHJlc3AsICRpdGVtKXtcbiAgICBpZigkaXRlbSl7XG4gICAgICAkaXRlbS5kYXRhKCdpbi1jYXJ0JywgdHJ1ZSk7XG4gICAgICAkaXRlbS50ZXh0KCRpdGVtLmRhdGEoJ3RleHQtcmVtb3ZlJykpO1xuICAgIH1cbiAgfVxuXG4gIC8vIFRvZ2dsZSBzaW5nbGUgY2FydCBpdGVtXG4gIGZ1bmN0aW9uIHRvZ2dsZUNhcnRJdGVtKGlkLCBpbkNhcnQsICRpdGVtKXtcbiAgICBsZXQgdXJscyA9IFtdO1xuICAgIGxldCBhY3Rpb24gPSBpbkNhcnQgPyAncmVtb3ZlJyA6ICdhZGQnO1xuICAgIGxldCBjYWxsYmFjayA9IGluQ2FydCA/IGl0ZW1SZW1vdmVkIDogaXRlbUFkZGVkO1xuXG4gICAgdXJscy5wdXNoKGlkKTtcblxuICAgIGdlbmVyYWxBamF4KGFqYXhIYW5kbGVyVXJsLCB7IGFjdGlvbjogYWN0aW9uLCB1cmxzOiB1cmxzLCBiYXNrZXQ6IGJhc2tldElkIH0sICdQT1NUJywgY2FsbGJhY2ssICRpdGVtKTtcbiAgfVxuXG4gIC8vIENoZWNrIGlmIGl0ZW1zIGJlbG9uZyB0byBjYXJ0XG4gIGZ1bmN0aW9uIGNhcnRMb2FkZWQoY2FydCl7XG4gICAgLy8gRWFjaCBjYXJ0IHRvZ2dsZSBidXR0b25cbiAgICAkLmVhY2goJChibG9jaysnX19pdGVtLWNhcnQtdG9nZ2xlJyksIGZ1bmN0aW9uKGksIGl0ZW0pe1xuICAgICAgbGV0ICRpdGVtID0gJChpdGVtKTtcbiAgICAgIGxldCBpZCA9ICRpdGVtLmRhdGEoJ2l0ZW0taWQnKTtcbiAgICAgIGlmKCQuaW5BcnJheShpZCwgY2FydCkgIT09IC0xKXtcbiAgICAgICAgJGl0ZW0uZGF0YSgnaW4tY2FydCcsIHRydWUpO1xuICAgICAgICAkaXRlbS50ZXh0KCRpdGVtLmRhdGEoJ3RleHQtcmVtb3ZlJykpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gQ2xpY2sgY2FydCB0b2dnbGUgYnV0dG9uXG4gICAgJChibG9jaysnX19pdGVtLWNhcnQtdG9nZ2xlJykub24oJ2NsaWNrJywgZnVuY3Rpb24oZSl7XG4gICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBsZXQgJGl0ZW0gPSAkKHRoaXMpO1xuICAgICAgbGV0IGlkID0gJGl0ZW0uZGF0YSgnaXRlbS1pZCcpO1xuICAgICAgbGV0IGluQ2FydCA9ICRpdGVtLmRhdGEoJ2luLWNhcnQnKTtcblxuICAgICAgdG9nZ2xlQ2FydEl0ZW0oaWQsIGluQ2FydCwgJGl0ZW0pO1xuICAgIH0pO1xuXG4gICAgLy8gRWFjaCBjYXJ0IHRvZ2dsZSBjaGVja2JveFxuICAgICQuZWFjaCgkKGJsb2NrKydfX2NoZWNrYm94LWNhcnQtdG9nZ2xlJyksIGZ1bmN0aW9uKGksIGlucHV0KXtcbiAgICAgIGxldCAkaW5wdXQgPSAkKGlucHV0KTtcbiAgICAgIGxldCBpZCA9ICRpbnB1dC52YWwoKTtcbiAgICAgIGlmKCQuaW5BcnJheShpZCwgY2FydCkgIT09IC0xKXtcbiAgICAgICAgJGlucHV0LnByb3AoJ2NoZWNrZWQnLCB0cnVlKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIENoZWNrYm94IGNoYW5nZVxuICAgICQoYmxvY2srJ19fY2hlY2tib3gtY2FydC10b2dnbGUnKS5vbignY2hhbmdlJywgZnVuY3Rpb24oKXtcbiAgICAgIGxldCAkaW5wdXQgPSAkKHRoaXMpO1xuICAgICAgbGV0IGlkID0gJGlucHV0LnZhbCgpO1xuICAgICAgbGV0IGluQ2FydCA9ICEkaW5wdXQucHJvcCgnY2hlY2tlZCcpO1xuXG4gICAgICB0b2dnbGVDYXJ0SXRlbShpZCwgaW5DYXJ0LCBudWxsKTtcbiAgICB9KTtcblxuICB9XG5cbiAgLy8gTG9hZCBpbml0aWFsIGNhcnRcbiAgZnVuY3Rpb24gbG9hZENhcnQocmVzcCl7XG4gICAgZ2VuZXJhbEFqYXgoYWpheEhhbmRsZXJVcmwsIHsgYWN0aW9uOiAnbG9hZENhcnQnIH0sIHVuZGVmaW5lZCwgY2FydExvYWRlZCk7XG4gIH1cblxuICAvLyBJbml0aWFsaXplIHN0YWdlIGRsY2VudGVyXG4gIGZ1bmN0aW9uIGluaXRDYXJ0KCkge1xuICAgIGdlbmVyYWxBamF4KGluaXRpYWxpemVyVXJsLCB7IGFjdGlvbjogJ2luaXRpYWxpemUnIH0sIHVuZGVmaW5lZCwgbG9hZENhcnQpO1xuICB9XG5cbiAgLypcbiAgKlxuICAqIENvbGxlY3Rpb24gbWFrZXIgcGFnZSBmdW5jdGlvbnNcbiAgKlxuICAqL1xuXG4gIC8vIGNsZWFyIHdob2xlIGNhcnRcbiAgZnVuY3Rpb24gY2xlYXIoKSB7XG4gICAgJC5hamF4KHtcbiAgICAgIHVybDogYWpheEhhbmRsZXJVcmwsXG4gICAgICBkYXRhOiB7XG4gICAgICAgIGJhc2tldDogYmFza2V0SWQsXG4gICAgICAgIGFjdGlvbjogJ2NsZWFyJ1xuICAgICAgfSxcbiAgICAgIGNhY2hlOiBmYWxzZVxuICAgIH0pLmRvbmUoZnVuY3Rpb24gKHJlc3ApIHtcbiAgICAgIC8vIHJlZnJlc2hcbiAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKTtcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHVuc2VsZWN0UGFyZW50cygkcGFyZW50cykge1xuICAgICRwYXJlbnRzLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgJHBhcmVudCA9ICQodGhpcyk7XG4gICAgICBsZXQgc2VsZWN0ZWRDaGlsZHJlbiA9ICRwYXJlbnQuY2hpbGRyZW4oJ3VsJykuZmluZChibG9jayArICdfX3RvZ2dsZTpjaGVja2VkJyk7XG4gICAgICBpZiAoc2VsZWN0ZWRDaGlsZHJlbi5sZW5ndGggPT09IDApIHtcbiAgICAgICAgJHBhcmVudC5jaGlsZHJlbihibG9jayArICdfX2l0ZW0nKS5maW5kKGJsb2NrICsgJ19fdG9nZ2xlJykucHJvcCgnY2hlY2tlZCcsIGZhbHNlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNlbGVjdFBhcmVudHMoJHBhcmVudHMpIHtcbiAgICAkcGFyZW50cy5jaGlsZHJlbihibG9jayArICdfX2l0ZW0nKS5maW5kKGJsb2NrICsgJ19fdG9nZ2xlJykucHJvcCgnY2hlY2tlZCcsIHRydWUpO1xuICB9XG5cbiAgZnVuY3Rpb24gdG9nZ2xlSXRlbSgpIHtcbiAgICBsZXQgdXJscyA9IFtdLFxuICAgICAgJGl0ZW1DaGVja2JveCA9ICQodGhpcyksXG4gICAgICAkcGFyZW50TGkgPSAkaXRlbUNoZWNrYm94LmNsb3Nlc3QoYmxvY2sgKyAnX19saScpLFxuICAgICAgYWRkID0gJGl0ZW1DaGVja2JveC5pcygnOmNoZWNrZWQnKSxcbiAgICAgIGl0ZW1VcmwgPSAkaXRlbUNoZWNrYm94LmRhdGEoJ3VybCcpIHx8IG51bGwsXG4gICAgICAkY2hpbGRJdGVtcyA9ICRwYXJlbnRMaS5maW5kKCd1bCBsaSAnICsgYmxvY2sgKyAnX190b2dnbGUnKSxcbiAgICAgICRwYXJlbnRJdGVtcyA9ICRwYXJlbnRMaS5wYXJlbnRzKGJsb2NrICsgJ19fbGknKTtcblxuICAgIC8vIEFkZCBjdXJyZW50IGl0ZW0gdXJsXG4gICAgaWYgKGl0ZW1VcmwpIHtcbiAgICAgIHVybHMucHVzaChpdGVtVXJsKTtcbiAgICB9XG5cbiAgICAvLyBUb2dnbGUgY2hpbGRyZW4gJiBhZGQgdXJsc1xuICAgICRjaGlsZEl0ZW1zLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgbGV0IGNoaWxkVXJsID0gJCh0aGlzKS5kYXRhKCd1cmwnKSB8fCBudWxsO1xuICAgICAgaWYgKGNoaWxkVXJsKSB7XG4gICAgICAgIHVybHMucHVzaChjaGlsZFVybCk7XG4gICAgICB9XG4gICAgICAkKHRoaXMpLnByb3AoJ2NoZWNrZWQnLCBhZGQpO1xuICAgIH0pO1xuXG4gICAgLy8gVG9nZ2xlIHBhcmVudHNcbiAgICBpZiAoYWRkKSB7XG4gICAgICBzZWxlY3RQYXJlbnRzKCRwYXJlbnRJdGVtcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHVuc2VsZWN0UGFyZW50cygkcGFyZW50SXRlbXMpO1xuICAgIH1cblxuICAgICQuYWpheCh7XG4gICAgICB1cmw6IGFqYXhIYW5kbGVyVXJsLFxuICAgICAgdHlwZTogJ3Bvc3QnLFxuICAgICAgZGF0YToge1xuICAgICAgICBiYXNrZXQ6IGJhc2tldElkLFxuICAgICAgICBhY3Rpb246IChhZGQgPyAnYWRkJyA6ICdyZW1vdmUnKSxcbiAgICAgICAgdXJsczogdXJsc1xuICAgICAgfSxcbiAgICAgIGNhY2hlOiBmYWxzZSxcbiAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChyZXNwKSB7XG4gICAgICAgICRjbUVsZW1lbnQuZGF0YSgnY291bnQnLCByZXNwLmxlbmd0aCk7XG4gICAgICB9LFxuICAgICAgZXJyb3I6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy8gc2hvdyBlcnJvciBub3RpZmljYXRpb25cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlcXVlc3RQZGYoKSB7XG4gICAgbGV0IHBkZlF1YWxpdHkgPSAkKHRoaXMpLmRhdGEoJ2ltYWdlLXF1YWxpdHknKTtcbiAgICBsZXQgbGFuZ3VhZ2UgPSAkKCdzZWxlY3QuYnJvY2h1cmUtbGFuZ3VhZ2UnKS5jaGlsZHJlbignb3B0aW9uOnNlbGVjdGVkJykudmFsKCk7XG4gICAgJC5hamF4KHtcbiAgICAgIHVybDogYWpheEhhbmRsZXJVcmwsXG4gICAgICB0eXBlOiAnZ2V0JyxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgYWN0aW9uOiAncGRmJyxcbiAgICAgICAgYmFza2V0OiBiYXNrZXRJZCxcbiAgICAgICAgaW1hZ2VRdWFsaXR5OiBwZGZRdWFsaXR5LFxuICAgICAgICBsYW5ndWFnZTogbGFuZ3VhZ2VcbiAgICAgIH0sXG4gICAgICBjYWNoZTogZmFsc2UsXG4gICAgICBzdWNjZXNzOiBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICBDb29raWVzLnNldChiYXNrZXRJZCArICctZGxjZW50ZXItd2FpdGluZycsIGRhdGEsIHsgcGF0aDogJy8nIH0pO1xuICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgncHJlZkxhbmcnLCBsYW5ndWFnZSk7XG4gICAgICAgIGN1cnJlbnRQaGFzZSA9ICd3YWl0aW5nVGFzayc7XG4gICAgICAgIHBkZlByb2dyZXNzID0gMDtcbiAgICAgICAgcG9sbCgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlU2VuZERpYWxvZygpe1xuICAgIGxldCAkZWxlbSA9ICQoJzxkaXYgaWQ9XCJjbS1zZW5kLWRpYWxvZ1wiIGNsYXNzPVwiY20tZGlhbG9nXCIgc3R5bGU9XCJkaXNwbGF5OiBub25lO1wiPjwvZGl2PicpO1xuICAgIGlmICgkY21FbGVtZW50LmZpbmQoYmxvY2sgKyAnX19zZW5kLWxpbmtzLWRpYWxvZy10ZW1wbGF0ZScpLmxlbmd0aCkge1xuICAgICAgJGVsZW0uYXBwZW5kKCRjbUVsZW1lbnQuZmluZChibG9jayArICdfX3NlbmQtbGlua3MtZGlhbG9nLXRlbXBsYXRlJykuY2xvbmUoKS5jaGlsZHJlbigpKTtcbiAgICAgICQoJ2JvZHknKS5hcHBlbmQoJGVsZW0pO1xuXG4gICAgICAkZGlhbG9nRWxlbSA9ICQoJyNjbS1zZW5kLWRpYWxvZycpO1xuICAgICAgJGRpYWxvZ0VsZW0uZmFkZUluKCk7XG5cbiAgICAgICRkaWFsb2dFbGVtLm9uKCdjbGljaycsIGJsb2NrKydfX2Nsb3NlLWRpYWxvZycsIGZ1bmN0aW9uKGUpe1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICRkaWFsb2dFbGVtLmZhZGVPdXQoKTtcblxuICAgICAgICAvLyByZW1vdmUgP3NlbmRMaW5rcz0xXG4gICAgICAgIGxldCBjdXJVcmwgPSBkb2N1bWVudC5sb2NhdGlvbi5ocmVmLnNwbGl0KCc/Jyk7XG4gICAgICAgIGlmKHdpbmRvdy5oaXN0b3J5LnB1c2hTdGF0ZSl7XG4gICAgICAgICAgd2luZG93Lmhpc3RvcnkucHVzaFN0YXRlKG51bGwsIG51bGwsIGN1clVybFswXSk7XG4gICAgICAgIH1cblxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gb3BlblNlbmRGb3JtKCl7XG4gICAgdmFyICRkaWFsb2dFbGVtID0gJCgnI2NtLXNlbmQtZGlhbG9nJyk7XG4gICAgaWYgKCEkZGlhbG9nRWxlbS5sZW5ndGgpIHtcbiAgICAgIGNyZWF0ZVNlbmREaWFsb2coKTtcbiAgICB9ZWxzZXtcbiAgICAgICRkaWFsb2dFbGVtLmZhZGVJbigpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZURpYWxvZygpIHtcbiAgICBsZXQgJGVsZW0gPSAkKCc8ZGl2IGlkPVwiY20tZGlhbG9nXCIgY2xhc3M9XCJzdGFydGVkIGNtLWRpYWxvZ1wiIHN0eWxlPVwiZGlzcGxheTogbm9uZTtcIj48L2Rpdj4nKTtcbiAgICBpZiAoJGNtRWxlbWVudC5maW5kKGJsb2NrICsgJ19fZGlhbG9nLXRlbXBsYXRlJykubGVuZ3RoKSB7XG4gICAgICAkZWxlbS5hcHBlbmQoJGNtRWxlbWVudC5maW5kKGJsb2NrICsgJ19fZGlhbG9nLXRlbXBsYXRlJykuY2xvbmUoKS5jaGlsZHJlbigpKTtcbiAgICAgICQoJ2JvZHknKS5hcHBlbmQoJGVsZW0pO1xuXG4gICAgICAkZGlhbG9nRWxlbSA9ICQoJyNjbS1kaWFsb2cnKTtcbiAgICAgICRkaWFsb2dFbGVtLmZhZGVJbigpO1xuXG4gICAgICAkZGlhbG9nRWxlbS5vbignY2xpY2snLCBibG9jaysnX19wcm9ncmVzcy1hYm9ydCcsIGZ1bmN0aW9uKCl7XG4gICAgICAgIENvb2tpZXMucmVtb3ZlKGJhc2tldElkICsgJy1kbGNlbnRlci13YWl0aW5nJywgeyBwYXRoOiAnLycgfSk7XG4gICAgICAgICRkaWFsb2dFbGVtLmZhZGVPdXQoKTtcbiAgICAgICAgcmVzZXREaWFsb2dMb2FkaW5nKCRkaWFsb2dFbGVtKTtcbiAgICAgIH0pO1xuXG4gICAgICAkZGlhbG9nRWxlbS5vbignY2xpY2snLCBibG9jaysnX19jbG9zZS1kaWFsb2cnLCBmdW5jdGlvbihlKXtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAkZGlhbG9nRWxlbS5mYWRlT3V0KCk7XG4gICAgICAgIHJlc2V0RGlhbG9nTG9hZGluZygkZGlhbG9nRWxlbSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiByZXNldERpYWxvZ0xvYWRpbmcoJGRpYWxvZ0VsZW0pIHtcbiAgICAkZGlhbG9nRWxlbS5maW5kKCcuY20tZGlhbG9nX19wcm9ncmVzcy10ZXh0JykudGV4dCgnMCUnKTtcbiAgICAkZGlhbG9nRWxlbS5maW5kKCcuY20tZGlhbG9nX19wcm9ncmVzcy1pbmRpY2F0b3InKS5zdG9wKCkuY3NzKCd3aWR0aCcsICcwJScpO1xuICB9XG5cblxuICBmdW5jdGlvbiBwb2xsRG9uZShkYXRhKSB7XG4gICAgLy8gZGVsZXRlIHByb2Nlc3MgY29va2llXG4gICAgQ29va2llcy5yZW1vdmUoYmFza2V0SWQgKyAnLWRsY2VudGVyLXdhaXRpbmcnLCB7IHBhdGg6ICcvJyB9KTtcbiAgICAvLyBkbyB0aGUgZGVmYXVsdCBhY3Rpb25zIGZvciBkZWZhdWx0IGltcGxlbWVudGF0aW9uXG4gICAgJGRpYWxvZ0VsZW0ucmVtb3ZlQ2xhc3MoJ3N0YXJ0ZWQnKS5hZGRDbGFzcygnc3VjY2VzcycpO1xuICAgICRkaWFsb2dFbGVtLmZpbmQoYmxvY2sgKyAnX19kbGxpbmsnKS5hdHRyKCdocmVmJywgZGF0YS5yZXRkYXRhLnVybCkudGV4dChkYXRhLnJldGRhdGEudGV4dCk7XG4gICAgJGRpYWxvZ0VsZW0uZmluZCgnLmNtLWRpYWxvZ19fcHJvZ3Jlc3MtaW5kaWNhdG9yJykuc3RvcCgpLmFuaW1hdGUoeyB3aWR0aDogJzEwMCUnIH0sIHsgZHVyYXRpb246IDUwMCB9KTtcblxuICAgIC8vZG93bmxvYWQgUERGIGNsaWNrIGV2ZW50XG4gICAgJGRpYWxvZ0VsZW0ub24oJ2NsaWNrJywgYmxvY2sgKyAnX19kbGxpbmsnLCBmdW5jdGlvbihlKXtcbiAgICAgIGxldCBnYUV2ZW50ID0ge1xuICAgICAgICAnZXZlbnQnOiAnYnJvY2h1cmVHZW5lcmF0ZWQnLFxuICAgICAgICAnYnJvY2h1cmVRdWFsaXR5JzogZGF0YS5wYXJhbXMuaW1hZ2VRdWFsaXR5LFxuICAgICAgICAnYnJvY2h1cmVEb3dubG9hZENvbnRlbnRzJzogZGF0YS5yZXRkYXRhLml0ZW1OYW1lc1xuICAgICAgfTtcbiAgICAgIGRhdGFsYXllckFjdGlvbnMucHVzaE9iamVjdFRvRGF0YWxheWVyKGdhRXZlbnQpO1xuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gcG9sbEZhaWwoKSB7XG4gICAgLy8gc2hvdyBlcnJvclxuICAgIENvb2tpZXMucmVtb3ZlKGJhc2tldElkICsgJy1kbGNlbnRlci13YWl0aW5nJywgeyBwYXRoOiAnLycgfSk7XG4gICAgJGRpYWxvZ0VsZW0ucmVtb3ZlQ2xhc3MoJ3N0YXJ0ZWQnKS5hZGRDbGFzcygnZXJyb3InKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBvbGxSdW5uaW5nKGRhdGEpIHtcbiAgICBsZXQgcHJvZ3Jlc3MgPSBNYXRoLmZsb29yKHBhcnNlRmxvYXQoZGF0YS5yZXRkYXRhLnByb2dyZXNzKSk7XG4gICAgc3dpdGNoIChjdXJyZW50UGhhc2UpIHtcbiAgICBjYXNlICd3YWl0aW5nVGFzayc6XG4gICAgICBjdXJyZW50UGhhc2UgPSAncnVubmluZyc7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdydW5uaW5nJzpcbiAgICAgIGlmIChkYXRhLnJldGRhdGEucGhhc2UgJiYgZGF0YS5yZXRkYXRhLnBoYXNlID09PSAncGRmJykge1xuICAgICAgICBjdXJyZW50UGhhc2UgPSAncGRmJztcbiAgICAgICAgcGVyY2VudFBlclBvbGwgPSAoNDUgLyBkYXRhLnBhcmFtcy5wYWdlcy5sZW5ndGgpICogODtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3BkZic6XG4gICAgICBwZGZQcm9ncmVzcyArPSBwZXJjZW50UGVyUG9sbDtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICAvLyBkaXNwbGF5UHJvZ3Jlc3MgdXNlcyBcInRydWVcIiBvciBzaW11bGF0ZWQgcHJvZ3Jlc3MgZGVwZW5kaW5nIGlmIGJnIHRhc2sgc3VwcG9ydHMgdHJ1ZVxuICAgIGxldCBkaXNwbGF5UHJvZ3Jlc3MgPSBkYXRhLnJldGRhdGEucGhhc2UgPyBwcm9ncmVzcyA6IE1hdGgubWluKE1hdGguZmxvb3IoMC41NSAqIHByb2dyZXNzICsgcGRmUHJvZ3Jlc3MpLCA5OSk7XG4gICAgJGRpYWxvZ0VsZW0uZmluZCgnLmNtLWRpYWxvZ19fcHJvZ3Jlc3MtdGV4dCcpLnRleHQoZGlzcGxheVByb2dyZXNzICsgJyUnKTtcbiAgICAkZGlhbG9nRWxlbS5maW5kKCcuY20tZGlhbG9nX19wcm9ncmVzcy1pbmRpY2F0b3InKS5zdG9wKCkuYW5pbWF0ZSh7IHdpZHRoOiBkaXNwbGF5UHJvZ3Jlc3MgKyAnJScgfSwgeyBkdXJhdGlvbjogNTAwIH0pO1xuICAgIHNldFRpbWVvdXQocG9sbCwgMjAwMCk7XG4gIH1cblxuICBmdW5jdGlvbiBwb2xsKCkge1xuICAgIGxldCBqb2JpZCA9IENvb2tpZXMuZ2V0KGJhc2tldElkICsgJy1kbGNlbnRlci13YWl0aW5nJyk7XG5cbiAgICBpZiAoam9iaWQgPT09IG51bGwgfHwgam9iaWQgPT09ICdudWxsJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgICRkaWFsb2dFbGVtID0gJCgnI2NtLWRpYWxvZycpO1xuICAgIGlmICghJGRpYWxvZ0VsZW0ubGVuZ3RoKSB7XG4gICAgICBjcmVhdGVEaWFsb2coKTtcbiAgICB9XG5cbiAgICBpZiAoISRkaWFsb2dFbGVtLmhhc0NsYXNzKCdzdGFydGVkJykpIHtcbiAgICAgICRkaWFsb2dFbGVtLnJlbW92ZUNsYXNzKCdlcnJvcicpLnJlbW92ZUNsYXNzKCdzdWNjZXNzJyk7XG4gICAgICAkZGlhbG9nRWxlbS5mYWRlSW4oKTtcbiAgICB9XG5cbiAgICAkLmFqYXgoe1xuICAgICAgdXJsOiBhamF4SGFuZGxlclVybCxcbiAgICAgIHR5cGU6ICdwb3N0JyxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgam9iaWQ6IGpvYmlkLFxuICAgICAgICBhY3Rpb246ICdnZXRwZGYnXG4gICAgICB9LFxuICAgICAgZGF0YVR5cGU6ICdqc29uJyxcbiAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgJiYgZGF0YSkge1xuICAgICAgICAgIHN3aXRjaCAoZGF0YS5zdGF0dXMpIHtcbiAgICAgICAgICBjYXNlICdkb25lJzpcbiAgICAgICAgICAgIHBvbGxEb25lKGRhdGEpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAncnVubmluZyc6XG4gICAgICAgICAgICBwb2xsUnVubmluZyhkYXRhKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ2ZhaWxlZCc6XG4gICAgICAgICAgICBwb2xsRmFpbChkYXRhKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBzZXRUaW1lb3V0KHBvbGwsIDIwMDApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzZXRUaW1lb3V0KHBvbGwsIDIwMDApO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgZXJyb3I6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy8gc2hvdyBlcnJvclxuICAgICAgICBDb29raWVzLnJlbW92ZShiYXNrZXRJZCArICctZGxjZW50ZXItd2FpdGluZycsIHsgcGF0aDogJy8nIH0pO1xuICAgICAgICAkZGlhbG9nRWxlbS5yZW1vdmVDbGFzcygnc3RhcnRlZCcpLmFkZENsYXNzKCdlcnJvcicpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gdG9nZ2xlQ2hpbGRMaXN0KCl7XG4gICAgbGV0IGxpc3RFbGVtID0gJCh0aGlzKS5jbG9zZXN0KCcubGktLWNhdGVnb3J5Jyk7XG4gICAgbGlzdEVsZW0uY2hpbGRyZW4oJ3VsJykudG9nZ2xlQ2xhc3MoJ2FjdGl2ZScpO1xuICB9XG5cbiAgZnVuY3Rpb24gaW5pdEV2ZW50cygpIHtcbiAgICAkY21FbGVtZW50XG4gICAgICAub24oJ2NsaWNrJywgYmxvY2sgKyAnX190b2dnbGUnLCB0b2dnbGVJdGVtKVxuICAgICAgLm9uKCdjbGljaycsIGJsb2NrICsgJ19fdG9nZ2xlLWNhdGVnb3J5JywgdG9nZ2xlSXRlbSlcbiAgICAgIC5vbignY2xpY2snLCBibG9jayArICdfX3JlcXVlc3QtcGRmJywgcmVxdWVzdFBkZilcbiAgICAgIC5vbignY2xpY2snLCBibG9jayArICdfX2NsZWFyJywgY2xlYXIpXG4gICAgICAub24oJ2NsaWNrJywgYmxvY2sgKyAnX190b2dnbGUtY2hpbGQtdWwnLCB0b2dnbGVDaGlsZExpc3QpXG4gICAgICAub24oJ2NsaWNrJywgYmxvY2sgKyAnX19zZW5kLWxpbmtzJywgb3BlblNlbmRGb3JtKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNoZWNrUGFyZW50cygpIHtcbiAgICAvLyBTZWxlY3QgcGFyZW50cyBvZiBjbG9zZXN0IHBhcmVudCBvZiBzZWxlY3RlZCBpdGVtc1xuICAgIGxldCBzZWxlY3RlZCA9ICRjbUVsZW1lbnQuZmluZChibG9jayArICdfX3RvZ2dsZTpjaGVja2VkJyk7XG4gICAgbGV0ICRwYXJlbnRJdGVtcyA9IHNlbGVjdGVkLmNsb3Nlc3QoYmxvY2sgKyAnX19saScpLnBhcmVudHMoYmxvY2sgKyAnX19saScpO1xuICAgIHNlbGVjdFBhcmVudHMoJHBhcmVudEl0ZW1zKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGluaXQoKSB7XG4gICAgLy8gQ29sbGVjdGlvbiBtYWtlciBwYWdlXG4gICAgJGNtRWxlbWVudCA9ICQoYmxvY2spO1xuICAgIGlmICgkY21FbGVtZW50Lmxlbmd0aCA+IDApIHtcbiAgICAgICRjbUVsZW1lbnQgPSAkKCRjbUVsZW1lbnRbMF0pOyAvLyBUaGVyZSBjYW4gb25seSBiZSBvbmVcblxuICAgICAgYWpheEhhbmRsZXJVcmwgPSAkY21FbGVtZW50LmRhdGEoJ2hhbmRsZXInKTtcbiAgICAgIGluaXRpYWxpemVyVXJsID0gJGNtRWxlbWVudC5kYXRhKCdpbml0aWFsaXplcicpO1xuICAgICAgaW1hZ2VRdWFsaXR5ID0gJGNtRWxlbWVudC5kYXRhKCdpbWFnZS1xdWFsaXR5JykgfHwgJ2hpZ2gnO1xuICAgICAgYmFza2V0SWQgPSAkY21FbGVtZW50LmRhdGEoJ2Jhc2tldCcpIHx8IGJhc2tldElkO1xuXG4gICAgICBjaGVja1BhcmVudHMoKTtcbiAgICAgIGluaXRFdmVudHMoKTtcblxuICAgICAgaWYgKENvb2tpZXMuZ2V0KGJhc2tldElkICsgJy1kbGNlbnRlci13YWl0aW5nJykpIHtcbiAgICAgICAgLy8gc3RhcnQgcG9sbGluZ1xuICAgICAgICBwb2xsKCk7XG4gICAgICB9XG5cbiAgICAgIC8qIE9wZW4gc2VuZCBsaW5rcyBmb3JtIGlmOiBmb3JtIGhhcyBlcnJvcnMsIGVtYWlsIGlzIHNlbnQsIHNlbmQgZm9ybSBpcyByZXF1ZXN0ZWQgKi9cbiAgICAgIGlmKCQoYmxvY2srJ19fc2VudC1saW5rcy1lcnJvcicpLmxlbmd0aCA+IDAgfHwgJChibG9jaysnX19lbWFpbC1zZW50JykubGVuZ3RoID4gMCB8fCAkKGJsb2NrKydfX29wZW4tc2VuZC1saW5rcycpLmxlbmd0aCA+IDApe1xuICAgICAgICBvcGVuU2VuZEZvcm0oKTtcbiAgICAgIH1cblxuICAgICAgLy8gSWYgbGFuZ3VhZ2Ugc2VsZWN0ZWQgcHJldmlvdXNseSwgaW5pdCB0aGlzIHNlbGVjdGlvbiBvbiBsb2FkXG4gICAgICBpZiggJCgnLmJyb2NodXJlLWxhbmd1YWdlJykgKXtcbiAgICAgICAgbGV0IHByZWZMYW5nID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3ByZWZMYW5nJykgPyBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgncHJlZkxhbmcnKSA6IGZhbHNlO1xuICAgICAgICBpZiggcHJlZkxhbmcgKXtcbiAgICAgICAgICAkKCcuYnJvY2h1cmUtbGFuZ3VhZ2UnKS52YWwocHJlZkxhbmcpLnRyaWdnZXIoJ2NoYW5nZScpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICB9ZWxzZXsgLy8gQW55IHBhZ2VcbiAgICAgIGxldCAkaW5pdENtRWxlbSA9ICQoYmxvY2sgKyAnX19pbml0LWNtLWNhcnQnKTtcbiAgICAgIGlmKCRpbml0Q21FbGVtLmxlbmd0aCA+IDApe1xuICAgICAgICAvLyBJZiBjb2xsZWN0aW9uIG1ha2VyIG11c3QgYmUgaW5pdGlhbGl6ZWQgZm9yIGN1c3RvbSBwYWdlXG4gICAgICAgIGFqYXhIYW5kbGVyVXJsID0gJCgnYm9keScpLmRhdGEoJ2NtLWhhbmRsZXInKTtcbiAgICAgICAgaW5pdGlhbGl6ZXJVcmwgPSAkKCdib2R5JykuZGF0YSgnY20taW5pdGlhbGl6ZXInKTtcblxuICAgICAgICBpbml0Q2FydCgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgaW5pdDogaW5pdFxuICB9XG59KSgpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGNvbGxlY3Rpb25NYWtlcjtcbiIsIi8vICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyAqIENoZWNrb3V0IHRvZ2dsZSBjdXN0b20gb3JkZXJlciBpbmZvXG4vLyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4ndXNlIHN0cmljdCc7XG5cbmltcG9ydCAkIGZyb20gJ2pxdWVyeSc7XG5cbnZhciBjdXN0b21PcmRlcmVySW5mbyA9IChmdW5jdGlvbigpIHtcbiAgZnVuY3Rpb24gaW5pdCgpe1xuXG5cbiAgICAkKCdpbnB1dFtuYW1lPWRlbGl2ZXJ5X2FkZHJlc3NdJykub24oJ2NoYW5nZScsIGZ1bmN0aW9uKCl7XG4gICAgICAvL3Nob3cgY3VzdG9tIGNvbnRhY3QgaW5mbyBmaWVsZHNcbiAgICAgICQoJy5jaGVja291dF9fZGVsaXZlcnktYWRkcmVzcy1mb3JtJykudG9nZ2xlKCk7XG5cbiAgICAgIGlmKCQodGhpcykuaXMoJzpjaGVja2VkJykpe1xuICAgICAgICAvL2Rpc2FibGUgcHJlZmlsbGVkIGZpZWxkcywgY3VzdG9tIGNvbnRhY3QgaW5mbyBmaWVsZHMgYXJlIHVzZWQgaW5zdGVhZFxuICAgICAgICAkKCcuanMtZm9ybV9fZmllbGQtcHJlZmlsbGVkJykuYXR0cignZGlzYWJsZWQnLHRydWUpO1xuICAgICAgICAkKCcuanMtZm9ybV9fZmllbGQtY3VzdG9tLWZpZWxkJykuYXR0cignZGlzYWJsZWQnLGZhbHNlKTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICAvL3JldmVyc2UgcHJldmlvdXNcbiAgICAgICAgJCgnLmpzLWZvcm1fX2ZpZWxkLXByZWZpbGxlZCcpLmF0dHIoJ2Rpc2FibGVkJyxmYWxzZSk7XG4gICAgICAgICQoJy5qcy1mb3JtX19maWVsZC1jdXN0b20tZmllbGQnKS5hdHRyKCdkaXNhYmxlZCcsdHJ1ZSk7XG4gICAgICB9XG4gICAgfSlcbiAgfVxuICByZXR1cm4ge1xuICAgIGluaXQ6IGluaXRcbiAgfVxufSkoKTtcblxubW9kdWxlLmV4cG9ydHMgPSBjdXN0b21PcmRlcmVySW5mbztcbiIsIi8vICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyAqIFJlcGxhY2UgZGVmYXVsdCBzZWxlY3RzIGJ5IGN1c3RvbSBvbmVzXG4vLyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4ndXNlIHN0cmljdCc7XG5cbmltcG9ydCAkIGZyb20gJ2pxdWVyeSc7XG5cbnZhciBzZXRTZWxlY3RWYWx1ZSA9IGZ1bmN0aW9uKCR0ZXh0aG9sZGVyLHZhbHVlKXtcbiAgJHRleHRob2xkZXIuZW1wdHkoKS5hcHBlbmQodmFsdWUpO1xufTtcblxudmFyIGNyZWF0ZUN1c3RvbVNlbGVjdHMgPSAoZnVuY3Rpb24oKSB7XG5cbiAgZnVuY3Rpb24gaW5pdCgpe1xuICAgIHZhciAkb2dzZWxlY3QgPSAkKCcuanMtY3VzdG9tLXNlbGVjdCcpO1xuXG4gICAgaWYoJG9nc2VsZWN0LmZpbmQoJ29wdGlvbicpLmxlbmd0aCl7XG4gICAgICAkb2dzZWxlY3QuZWFjaChmdW5jdGlvbigpe1xuICAgICAgICB2YXIgJHRleHRob2xkZXIgPSAkKCc8c3BhbiBjbGFzcz1cImN1c3RvbS1zZWxlY3RfX3RleHQganMtY3VzdG9tLXNlbGVjdC10ZXh0aG9sZGVyXCI+PC9zcGFuPicpO1xuICAgICAgICB2YXIgJHdyYXBwZXIgPSAkKCc8ZGl2IGNsYXNzPVwiY3VzdG9tLXNlbGVjdCBqcy1jdXN0b20tc2VsZWN0LXdyYXBwZXJcIj48L2Rpdj4nKTtcbiAgICAgICAgdmFyICRzZWxlY3QgPSAkKCc8ZGl2IGNsYXNzPVwiY3VzdG9tLXNlbGVjdF9fZHJvcGRvd24ganMtY3VzdG9tLXNlbGVjdC1kcm9wZG93blwiPjwvZGl2PicpO1xuXG4gICAgICAgIGlmKCQodGhpcykuaGFzQ2xhc3MoJ2Zvcm1fX2ZpZWxkLXNlbGVjdC1jdXN0b20tZnVsbC13aWR0aCcpKXtcbiAgICAgICAgICAkd3JhcHBlci5hZGRDbGFzcygnY3VzdG9tLXNlbGVjdC1mdWxsLXdpZHRoJyk7XG4gICAgICAgIH1cblxuICAgICAgICAkKHRoaXMpLndyYXAoJHdyYXBwZXIpLmJlZm9yZSgkc2VsZWN0LCR0ZXh0aG9sZGVyKTtcbiAgICAgICAgJHRleHRob2xkZXIuZW1wdHkoKS5hcHBlbmQoJCh0aGlzKS5maW5kKCdvcHRpb24nKVswXS5pbm5lckhUTUwpO1xuXG4gICAgICAgICQoJCh0aGlzKSkub24oJ2NoYW5nZScsZnVuY3Rpb24oKXtcbiAgICAgICAgICAkdGV4dGhvbGRlci5lbXB0eSgpLmFwcGVuZCgkKHRoaXMpLmZpbmQoJ29wdGlvbjpzZWxlY3RlZCcpLnRleHQoKSk7XG4gICAgICAgICAgc2V0U2VsZWN0VmFsdWUoJCh0aGlzKS5maW5kKCcuanMtY3VzdG9tLXNlbGVjdC10ZXh0aG9sZGVyJyksICQodGhpcykuZmluZCgnb3B0aW9uOnNlbGVjdGVkJykudGV4dCgpKTtcbiAgICAgICAgfSk7XG5cbiAgICAgIH0pO1xuXG4gICAgICAvL01ha2Ugc3VyZSBjdXN0b20gc2VsZWN0cyBoYXZlIGNvcnJlY3QgdmFsdWUgc2hvd24gb24gbG9hZFxuICAgICAgJCgnLmpzLWN1c3RvbS1zZWxlY3Qtd3JhcHBlcicpLmVhY2goZnVuY3Rpb24oKXtcbiAgICAgICAgc2V0U2VsZWN0VmFsdWUoJCh0aGlzKS5maW5kKCcuanMtY3VzdG9tLXNlbGVjdC10ZXh0aG9sZGVyJyksICQodGhpcykuZmluZCgnb3B0aW9uOnNlbGVjdGVkJykudGV4dCgpKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICByZXR1cm4ge1xuICAgIGluaXQ6IGluaXRcbiAgfVxufSkoKTtcblxubW9kdWxlLmV4cG9ydHMgPSBjcmVhdGVDdXN0b21TZWxlY3RzO1xuIiwiLy8gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vICogRmlsdGVyIG1hY2hpbmUgYWNjZXNzb3JpZXMgYnkgYWNjZXNzb3J5IGxldmVsXG4vLyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4ndXNlIHN0cmljdCc7XG5cbmltcG9ydCAkIGZyb20gJ2pxdWVyeSc7XG5cbnZhciBmaWx0ZXJNYWNoaW5lQWNjZXNzb3JpZXMgPSAoZnVuY3Rpb24oKSB7XG4gIGZ1bmN0aW9uIGluaXQoKXtcblxuICAgIC8qXG4gICAgLS0tIG9sZCBjb2RlIGZvciBjbGFzc2lmaWNhdGlvbiBsZXZlbHMgLS0tXG4gICAgJCgnW2RhdGEtY2xhc3NpZmljYXRpb24hPWJhc2ljXScpLnBhcmVudCgnLmpzLWFjY2Vzc29yaWVzLWxpc3QnKS5oaWRlKCk7XG5cblxuICAgICQoJy5qcy1zZWxlY3QtYWNjZXNzb3J5LWxldmVsJykub24oJ2NoYW5nZScsZnVuY3Rpb24oKXtcbiAgICAgIHZhciBsZXZlbCA9ICQodGhpcykudmFsKCk7XG4gICAgICB2YXIgJHBhcmVudCA9ICQodGhpcykucGFyZW50cygnLmpzLWFjY2Vzc29yaWVzLWNvbnRhaW5lcicpO1xuICAgICAgJHBhcmVudC5maW5kKCcuanMtYWNjZXNzb3JpZXMtbGlzdCcpLmhpZGUoKTtcbiAgICAgICRwYXJlbnQuZmluZCgnW2RhdGEtY2xhc3NpZmljYXRpb249JytsZXZlbCsnXScpLnBhcmVudCgnLmpzLWFjY2Vzc29yaWVzLWxpc3QnKS5zaG93KCk7XG4gICAgfSk7XG4gICAgKi9cblxuICAgICQoJy5qcy1zZWxlY3QtYWNjZXNzb3J5LWxldmVsJykub24oJ2NoYW5nZScsZnVuY3Rpb24oKXtcbiAgICAgIHZhciBhY2Nlc3Nvcmllc0FyciA9ICQodGhpcykudmFsKCkgPyAkKHRoaXMpLnZhbCgpLnNwbGl0KCcsJykgOiBbXTtcbiAgICAgIHZhciAkYWNjZXNzb3J5SXRlbXMgPSAkKCcuanMtYWNjZXNzb3J5aXRlbScpO1xuXG4gICAgICAkYWNjZXNzb3J5SXRlbXMuc2hvdygpO1xuICAgICAgaWYoYWNjZXNzb3JpZXNBcnIubGVuZ3RoKXtcbiAgICAgICAgJGFjY2Vzc29yeUl0ZW1zLmZpbHRlcihmdW5jdGlvbihpLCBlbCl7XG4gICAgICAgICAgaWYoYWNjZXNzb3JpZXNBcnIuaW5kZXhPZigkKGVsKS5hdHRyKCdkYXRhLXV1aWQnKSkgPT09IC0xKXtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIHJldHVybiBmYWxzZTtcbiAgICAgICAgfSkuaGlkZSgpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy90b2RvIGRvIHRoaXMgcHJvcGVybHlcbiAgICB2YXIgbGFuZyA9ICQoJ2JvZHknKS5hdHRyKCdkYXRhLWxhbmcnKTtcbiAgICB2YXIgbm9Qcm9kdWN0c1RleHQgPSBsYW5nID09PSAnZmknID8gJ0VpIHR1b3R0ZWl0YScgOiAnTm8gcHJvZHVjdHMnO1xuICAgICQoJy5hY2Nlc3NvcnlsaXN0JykuZWFjaChmdW5jdGlvbigpe1xuICAgICAgaWYoJCh0aGlzKS5maW5kKCdsaTp2aXNpYmxlJykubGVuZ3RoID09PSAwKXtcbiAgICAgICAgJCh0aGlzKS5hcHBlbmQoJzxsaSBjbGFzcz1cImFjY2Vzc29yeWxpc3RfX25vLXByb2R1Y3RzXCI+Jytub1Byb2R1Y3RzVGV4dCsnPC9saT4nKTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICAkKHRoaXMpLmZpbmQoJy5hY2Nlc3NvcnlsaXN0X19uby1wcm9kdWN0cycpLnJlbW92ZSgpO1xuICAgICAgfVxuICAgIH0pXG4gIH1cbiAgcmV0dXJuIHtcbiAgICBpbml0OiBpbml0XG4gIH1cbn0pKCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZmlsdGVyTWFjaGluZUFjY2Vzc29yaWVzO1xuIiwiLy8gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vICogRmlsdGVyIG5ld3Ncbi8vICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbid1c2Ugc3RyaWN0JztcblxuaW1wb3J0ICQgZnJvbSAnanF1ZXJ5JztcblxudmFyIGZpbHRlck5ld3MgPSAoZnVuY3Rpb24oKSB7XG4gIGZ1bmN0aW9uIGluaXQoKXtcblxuICAgIHZhciAkaW5wdXRzID0gJCgnW2RhdGEtZmlsdGVyZm9yXScpO1xuXG4gICAgJGlucHV0cy5vbignY2hhbmdlJywgZnVuY3Rpb24oKXtcbiAgICAgIHZhciBmaWx0ZXJzID0ge2NoZWNrYm94ZXM6IFtdLCBzZWxlY3RzOiBbXX07XG4gICAgICB2YXIgJG5ld3NJdGVtcyA9ICQoJy5qcy1uZXdzbGlzdF9fbGlzdC1pdGVtJyk7XG4gICAgICAkaW5wdXRzLmVhY2goZnVuY3Rpb24oKXtcbiAgICAgICAgdmFyIGZpbHRlciA9ICQodGhpcykuYXR0cignZGF0YS1maWx0ZXJmb3InKTtcbiAgICAgICAgdmFyIHZhbCA9ICQodGhpcykudmFsKCk7XG5cbiAgICAgICAgaWYoJCh0aGlzKS5pcygnOmNoZWNrYm94Jykpe1xuICAgICAgICAgIGlmKCQodGhpcykuaXMoJzpjaGVja2VkJykpIHtcbiAgICAgICAgICAgIGZpbHRlcnMuY2hlY2tib3hlcy5wdXNoKHtmaWx0ZXI6IGZpbHRlciwgdmFsdWU6IHZhbH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmKCQodGhpcykuaXMoJ3NlbGVjdCcpKXtcbiAgICAgICAgICBpZih2YWwgIT09ICcnKXtcbiAgICAgICAgICAgIGZpbHRlcnMuc2VsZWN0cy5wdXNoKHtmaWx0ZXI6IGZpbHRlciwgdmFsdWU6IHZhbH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG5cblxuICAgICAgJG5ld3NJdGVtcy5oaWRlKCk7XG5cbiAgICAgICRuZXdzSXRlbXMuZmlsdGVyKGZ1bmN0aW9uKCl7XG4gICAgICAgIHZhciBlbGVtZW50ID0gJCh0aGlzKTtcbiAgICAgICAgdmFyIGZvdW5kID0gZmFsc2U7XG5cbiAgICAgICAgaWYoZmlsdGVycy5jaGVja2JveGVzLmxlbmd0aCl7XG4gICAgICAgICAgJC5lYWNoKGZpbHRlcnMuY2hlY2tib3hlcywgZnVuY3Rpb24oKXtcbiAgICAgICAgICAgIGlmKGVsZW1lbnQuYXR0cignZGF0YS1maWx0ZXItdHlwZScpLmluZGV4T2YodGhpcy52YWx1ZSkgPiAtMSkge1xuICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7XG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBmb3VuZCA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZihmaWx0ZXJzLnNlbGVjdHMubGVuZ3RoKXtcbiAgICAgICAgICBmb3VuZCA9IGZhbHNlO1xuICAgICAgICAgICQuZWFjaChmaWx0ZXJzLnNlbGVjdHMsIGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICBpZihlbGVtZW50LmF0dHIoJ2RhdGEtZmlsdGVyLXJlbGF0ZWRtYWNoaW5lcycpLmluZGV4T2YodGhpcy52YWx1ZSkgPiAtMSkge1xuICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZvdW5kO1xuICAgICAgfSkuc2hvdygpO1xuXG4gICAgfSk7XG5cbiAgICAkKCcuanMtY29udGVudC1zZWFyY2gtdGV4dCcpLm9uKCdrZXl1cCcsZnVuY3Rpb24oKXtcbiAgICAgIGxldCBzZWFyY2hUZXJtID0gJCh0aGlzKS52YWwoKTtcbiAgICAgIGNvbnNvbGUubG9nKHNlYXJjaFRlcm0pO1xuICAgIH0pO1xuXG4gIH1cbiAgcmV0dXJuIHtcbiAgICBpbml0OiBpbml0XG4gIH1cbn0pKCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZmlsdGVyTmV3cztcbiIsIi8vICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyAqIGltYWdlIHBvcHVwXG4vLyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4ndXNlIHN0cmljdCc7XG5cbmltcG9ydCAkIGZyb20gJ2pxdWVyeSc7XG5pbXBvcnQgJ21hZ25pZmljLXBvcHVwJztcblxuY29uc3QgbWFnbmlmaWNQb3B1cCA9IHtcbiAgaW5pdChqc0Jsb2NrKSB7XG4gICAgdmFyICRpdGVtcyA9ICQoanNCbG9jayk7XG5cblxuICAgICRpdGVtcy5lYWNoKGZ1bmN0aW9uKCkge1xuICAgICAgdmFyICRpdGVtID0gJCh0aGlzKSxcbiAgICAgICAgb3B0aW9ucyA9IC8qJGl0ZW0uZGF0YSgnbWZwLW9wdGlvbnMnKSove3R5cGU6ICdpbWFnZScsIHNyYzogJGl0ZW0uZGF0YSgncG9wdXBpbWFnZScpfSxcbiAgICAgICAgc2V0dGluZ3MgPSB7XG4gICAgICAgICAgJ2l0ZW1zJzogbnVsbFxuICAgICAgICB9LFxuICAgICAgICBpbmxpbmVPbkluaXQgPSAkaXRlbS5kYXRhKCdtZnAtaW5saW5lLW9uLWluaXQnKTtcblxuICAgICAgLy8gT3BlbiB0aGVzZSBpbW1lZGlhdGVseVxuICAgICAgaWYgKGlubGluZU9uSW5pdCkge1xuICAgICAgICAkLm1hZ25pZmljUG9wdXAub3Blbih7XG4gICAgICAgICAgJ2l0ZW1zJzoge1xuICAgICAgICAgICAgJ3NyYyc6ICRpdGVtLFxuICAgICAgICAgICAgLy8nc3JjJzogJzxkaXY+dGVzdDwvZGl2PicsXG4gICAgICAgICAgICAndHlwZSc6ICdpbmxpbmUnLFxuICAgICAgICAgICAgJ21pZENsaWNrJzogdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKG9wdGlvbnMpIHtcbiAgICAgICAgc2V0dGluZ3MuaXRlbXMgPSBvcHRpb25zO1xuICAgICAgICAkaXRlbS5tYWduaWZpY1BvcHVwKHNldHRpbmdzKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBtYWduaWZpY1BvcHVwO1xuIiwiLy8gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vICogbWFjaGluZSBzZWFyY2hcbi8vICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbid1c2Ugc3RyaWN0JztcblxuaW1wb3J0ICQgZnJvbSAnanF1ZXJ5JztcbmNvbnN0IE11c3RhY2hlID0gcmVxdWlyZSgnbXVzdGFjaGUnKTtcblxubGV0IGZpbHRlck1hY2hpbmVzID0gKGZ1bmN0aW9uKCkge1xuXG4gIGxldCByZXF1ZXN0ID0gKGRhdGEgPSB7fSwgdHlwZSA9ICdHRVQnKSA9PiB7XG4gICAgbGV0IGhhbmRsZXIgPSAkKCdib2R5JykuZGF0YSgnY20taGFuZGxlcicpO1xuXG4gICAgaWYgKGhhbmRsZXIpIHtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgICAkLmFqYXgoe1xuICAgICAgICAgIHVybDogaGFuZGxlcixcbiAgICAgICAgICBkYXRhLFxuICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgY2FjaGU6IGZhbHNlXG4gICAgICAgIH0pLmRvbmUoKHJlcykgPT4ge1xuICAgICAgICAgIHJlc29sdmUocmVzKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH07XG5cbiAgbGV0IF9nZXRDYXJ0SXRlbXMgPSAoKSA9PiB7XG4gICAgcmV0dXJuIHJlcXVlc3QoeyBhY3Rpb246ICdsb2FkQ2FydCcgfSk7XG4gIH07XG5cbiAgbGV0IF91cGRhdGVDYXJ0SXRlbSA9ICgkaW5wdXQpID0+IHtcbiAgICBpZiAoJGlucHV0ICYmICRpbnB1dC52YWwoKSkge1xuICAgICAgbGV0IGFjdGlvbiA9ICRpbnB1dC5wcm9wKCdjaGVja2VkJykgPyAnYWRkJyA6ICdyZW1vdmUnO1xuICAgICAgbGV0IHVybHMgPSBbXTtcbiAgICAgIGxldCBiYXNrZXQgPSAnZGVmYXVsdC1iYXNrZXQnO1xuXG4gICAgICB1cmxzLnB1c2goJGlucHV0LnZhbCgpKTtcblxuICAgICAgcmVxdWVzdCh7IGFjdGlvbiwgdXJscywgYmFza2V0IH0sICdQT1NUJyk7XG4gICAgfVxuICB9O1xuXG4gIGZ1bmN0aW9uIGluaXQoKXtcbiAgICBpZigkKCcucHJvZHVjdHMnKS5sZW5ndGgpe1xuICAgICAgJCgnLmpzLWNvbnRlbnQtc2VhcmNoLXRleHQnKS5vbigna2V5dXAnLGZ1bmN0aW9uKCl7XG4gICAgICAgIGxldCBzZWFyY2hUZXJtID0gJCh0aGlzKS52YWwoKTtcbiAgICAgICAgJC5hamF4KHtcbiAgICAgICAgICAnZGF0YSc6ICdzZWFyY2g9JytzZWFyY2hUZXJtKycmc3RhZ2UtbGFuZ3VhZ2U9JyskKCdib2R5JykuZGF0YSgnbGFuZ3VhZ2UnKSxcbiAgICAgICAgICAndXJsJzogJy9zdGFnZS1hamF4L21hY2hpbmUtc2VhcmNoJyxcbiAgICAgICAgICAnc3VjY2Vzcyc6IGZ1bmN0aW9uKGRhdGEpe1xuICAgICAgICAgICAgbGV0IHRlbXBsYXRlID0gJCgnI3Byb2R1Y3QtbGlzdCcpLmh0bWwoKTtcbiAgICAgICAgICAgIGxldCByZXN1bHQgPSAnJztcbiAgICAgICAgICAgIHJlc3VsdCArPSBNdXN0YWNoZS5yZW5kZXIodGVtcGxhdGUsIHtpdGVtczogZGF0YS5tYWNoaW5lc0xpc3QsIGhlYWRpbmc6IGRhdGEubWFjaGluZXNIZWFkaW5nfSk7XG4gICAgICAgICAgICBpZihkYXRhLmxvd0ltcG9ydGFuY2VNYWNoaW5lc0xpc3QubGVuZ3RoKXtcbiAgICAgICAgICAgICAgcmVzdWx0ICs9IE11c3RhY2hlLnJlbmRlcih0ZW1wbGF0ZSwge2l0ZW1zOiBkYXRhLmxvd0ltcG9ydGFuY2VNYWNoaW5lc0xpc3QsIGhlYWRpbmc6IGRhdGEubG93SW1wb3J0YW5jZU1hY2hpbmVzSGVhZGluZywgaXNMb3dJbXBvcnRhbmNlOiB0cnVlfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXN1bHQgKz0gTXVzdGFjaGUucmVuZGVyKHRlbXBsYXRlLCB7aXRlbXM6IGRhdGEuYWNjZXNzb3JpZXNMaXN0LCBoZWFkaW5nOiBkYXRhLmFjY2Vzc29yaWVzSGVhZGluZ30pO1xuXG4gICAgICAgICAgICAvLyBSZW5kZXIgc2VhcmNoIHJlc3VsdHNcbiAgICAgICAgICAgICQoJy5sYXlvdXRfX21haW4nKS5lbXB0eSgpLmFwcGVuZChyZXN1bHQpO1xuXG4gICAgICAgICAgICBsZXQgJGNoZWNrQm94RWxlbWVudCA9ICQoJy5qcy1jb2xsZWN0aW9uLW1ha2VyX19jaGVja2JveC1jYXJ0LXRvZ2dsZScpO1xuXG4gICAgICAgICAgICAvLyBTZXQgaXRlbXMgYXMgY2hlY2tlZCBpZiBpbiBjYXJ0XG4gICAgICAgICAgICBfZ2V0Q2FydEl0ZW1zKCkudGhlbigoY2FydCkgPT4ge1xuICAgICAgICAgICAgICAkLmVhY2goJGNoZWNrQm94RWxlbWVudCwgKGksIGlucHV0KSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0ICRpbnB1dCA9ICQoaW5wdXQpO1xuICAgICAgICAgICAgICAgIGxldCBpZCA9ICRpbnB1dC52YWwoKTtcblxuICAgICAgICAgICAgICAgIGlmKCQuaW5BcnJheShpZCwgY2FydCkgIT09IC0xKXtcbiAgICAgICAgICAgICAgICAgICRpbnB1dC5wcm9wKCdjaGVja2VkJywgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAvL1VwZGF0ZSBjYXJ0IHdoZW4gc3RhdGUgY2hhbmdlc1xuICAgICAgICAgICAgJGNoZWNrQm94RWxlbWVudC5vbignY2hhbmdlJywgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgIF91cGRhdGVDYXJ0SXRlbSgkKHRoaXMpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgaW5pdDogaW5pdFxuICB9XG59KSgpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZpbHRlck1hY2hpbmVzO1xuIiwiLy8gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vICogTW9iaWxlIG5hdmlnYXRpb24gZnVuY3Rpb25hbGl0eVxuLy8gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgJCBmcm9tICdqcXVlcnknO1xuXG52YXIgaW5pdE5hdiA9IChmdW5jdGlvbigpIHtcbiAgZnVuY3Rpb24gYmluZE5hdkNsaWNrcygpe1xuICAgIC8vYWRkIGNsaWNrIGV2ZW50IGhhbmRsZXIgZm9yIG1vYmlsZSBuYXZcbiAgICAkKCcuanMtbmF2X19saS5oYXMtY2hpbGRyZW46bm90KFwiLmJvdW5kXCIpJykuYWRkQ2xhc3MoJ2JvdW5kJykuY2xpY2soZnVuY3Rpb24oKXtcbiAgICAgICQodGhpcykuZmluZCgndWwnKS50b2dnbGVDbGFzcygnb3BlbicpO1xuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gaW5pdCgpe1xuXG4gICAgdmFyICRleHRyYW5ldE5hdiA9ICQoJy5qcy1uYXYtZXh0cmFuZXQnKTtcbiAgICB2YXIgJG1haW5OYXYgPSAkKCcuanMtbmF2LW1haW4nKTtcbiAgICB2YXIgJGV4dHJhbmV0TmF2VG9nZ2xlID0gJCgnLmpzLW5hdi10b2dnbGUtZXh0cmFuZXQnKTtcbiAgICB2YXIgJG1haW5OYXZUb2dnbGUgPSAkKCcuanMtbmF2LXRvZ2dsZS1tYWluJyk7XG5cbiAgICAvL3RvZ2dsZSBsYW5ndWFnZSBuYXZcbiAgICAkKCcuanMtbWluaW5hdl9faXRlbV9fbGFuZ3VhZ2UtbWVudS10b2dnbGUnKS5vbignY2xpY2snLCBmdW5jdGlvbiAoZSkge1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgJCh0aGlzKS5zaWJsaW5ncygnc2VsZWN0JykudG9nZ2xlQ2xhc3MoJ2FjdGl2ZScpO1xuICAgIH0pO1xuXG4gICAgLy90b2dnbGUgZXh0cmFuZXQgbmF2XG4gICAgJGV4dHJhbmV0TmF2VG9nZ2xlLmNsaWNrKGZ1bmN0aW9uKCl7XG4gICAgICAkZXh0cmFuZXROYXYudG9nZ2xlKCk7XG4gICAgICAkbWFpbk5hdi5oaWRlKCk7XG5cbiAgICAgIC8vZm9yIHRoZSBjbG9zZWQvb3BlbiB0b2dnbGUgaWNvbiBhbmltYXRpb25cbiAgICAgICQoJy5qcy1tb2JpbGUtbmF2LWNoZWNrYm94JykucHJvcCgnY2hlY2tlZCcsZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgLy90b2dnbGUgbWFpbiBuYXZcbiAgICAkbWFpbk5hdlRvZ2dsZS5jbGljayhmdW5jdGlvbigpe1xuICAgICAgJG1haW5OYXYudG9nZ2xlKCk7XG4gICAgICAkZXh0cmFuZXROYXYuaGlkZSgpO1xuICAgIH0pO1xuXG5cbiAgICBpZigkKHdpbmRvdykud2lkdGgoKSA8IDEyMDApe1xuICAgICAgYmluZE5hdkNsaWNrcygpO1xuICAgIH1cbiAgfVxuICByZXR1cm4ge1xuICAgIGluaXQ6IGluaXRcbiAgfVxufSkoKTtcblxubW9kdWxlLmV4cG9ydHMgPSBpbml0TmF2O1xuXG4iLCIvLyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gKiBGaWx0ZXIgZG93bmxvYWRhYmxlIG1hdGVyaWFsIGJ5IGxhbmd1YWdlXG4vLyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4ndXNlIHN0cmljdCc7XG5cbmltcG9ydCAkIGZyb20gJ2pxdWVyeSc7XG5cbnZhciBzZWxlY3RNYXRlcmlhbExhbmd1YWdlID0gKGZ1bmN0aW9uKCkge1xuXG4gIGZ1bmN0aW9uIGluaXQoKXtcblxuXG4gICAgdmFyIHBhZ2VMYW5nID0gJCgnYm9keScpLmRhdGEoJ2xhbmd1YWdlJyk7XG4gICAgdmFyICRtYXRlcmlhbEl0ZW0gPSAkKCcuanMtZG93bmxvYWRhYmxlLW1hdGVyaWFsLWl0ZW0nKTtcbiAgICB2YXIgcmVnZXggPSAnJztcbiAgICB2YXIgbGFuZ3MgPSAnJztcbiAgICAvL2J5IGRlZmF1bHQgc2hvdyBvbmx5IGRvY3VtZW50cyB3aXRoIGN1cnJlbnQgcGFnZSBsYW5ndWFnZVxuICAgICRtYXRlcmlhbEl0ZW0uZWFjaChmdW5jdGlvbigpe1xuICAgICAgLy9maWx0ZXIgZmlsZXMgZm9yIGN1cnJlbnQgbGFuZ3VhZ2VcbiAgICAgIC8vZGF0YXNldCBkYXRhLWxhbmd1YWdlc1xuICAgICAgLy8gZm9ybWF0ICdmaSxlbixzdidcbiAgICAgIGxhbmdzID0gdGhpcy5kYXRhc2V0Lmxhbmd1YWdlcztcbiAgICAgIHJlZ2V4ID0gbmV3IFJlZ0V4cCgnXFxcXGInICsgcGFnZUxhbmcgKyAnXFxcXGInKTtcbiAgICAgIGlmKCFsYW5ncy5tYXRjaChyZWdleCkpICQodGhpcykuaGlkZSgpO1xuICAgIH0pO1xuXG4gICAgLy9zaG93IGRvY3VtZW50cyBieSBzZWxlY3RlZCBsYW5ndWFnZVxuICAgICQoJy5qcy1sYW5nLXNlbGVjdCcpLmNoYW5nZShmdW5jdGlvbigpe1xuICAgICAgdmFyIHNlbGVjdGVkTGFuZyA9ICQodGhpcykudmFsKCk7XG4gICAgICBpZihzZWxlY3RlZExhbmcgIT09ICdhbGwnKXtcbiAgICAgICAgJG1hdGVyaWFsSXRlbS5oaWRlKCk7XG4gICAgICAgICRtYXRlcmlhbEl0ZW0uZWFjaChmdW5jdGlvbigpe1xuICAgICAgICAgIGxhbmdzID0gdGhpcy5kYXRhc2V0Lmxhbmd1YWdlczsgLy9nZXQgZGF0YS1sYW5ndWFnZXNcbiAgICAgICAgICByZWdleCA9IG5ldyBSZWdFeHAoJ1xcXFxiJyArIHNlbGVjdGVkTGFuZyArICdcXFxcYicpO1xuICAgICAgICAgIGlmKGxhbmdzLm1hdGNoKHJlZ2V4KSkgJCh0aGlzKS5zaG93KCk7IC8vaWYgc2VsZWN0ZWQgZm91bmQsIHNob3cgZmlsZXNcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgJG1hdGVyaWFsSXRlbS5zaG93KCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBpbml0OiBpbml0XG4gIH1cbn0pKCk7XG5cbm1vZHVsZS5leHBvcnRzID0gc2VsZWN0TWF0ZXJpYWxMYW5ndWFnZTtcbiIsImltcG9ydCBkYXRhU2VydmljZSBmcm9tICcuL2RhdGEtc2VydmljZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEFQSSB7XG4gIGNvbnN0cnVjdG9yKCkge31cblxuICBsb2dpbkFkbWluKCkge1xuICAgIHJldHVybiBkYXRhU2VydmljZS5wb3N0KCcvbG9naW4tYWRtaW4vJyk7XG4gIH1cblxuICBsb2dpbihkYXRhKSB7XG4gICAgcmV0dXJuIGRhdGFTZXJ2aWNlLnBvc3QoJy9sb2dpbi8nLCBkYXRhKTtcbiAgfVxuXG4gIGxvZ291dCgpIHtcbiAgICByZXR1cm4gZGF0YVNlcnZpY2UucG9zdCgnL2xvZ291dC8nKTtcbiAgfVxuXG4gIGdldExvY2FsaXphdGlvbigpIHtcbiAgICByZXR1cm4gZGF0YVNlcnZpY2UuZ2V0KCcvbG9jYWxpemF0aW9uLycpO1xuICB9XG5cbiAgZ2V0VG9rZW4oKSB7XG4gICAgcmV0dXJuIGRhdGFTZXJ2aWNlLmdldCgnL3Rva2VuLycpO1xuICB9XG5cbiAgZ2V0Q291bnRyaWVzKCkge1xuICAgIHJldHVybiBkYXRhU2VydmljZS5nZXQoJy9jb3VudHJpZXMvJyk7XG4gIH1cblxuICBjaGFuZ2VQYXNzd29yZChkYXRhKSB7XG4gICAgcmV0dXJuIGRhdGFTZXJ2aWNlLnBvc3QoJy9jaGFuZ2UtcGFzc3dvcmQvJywgZGF0YSk7XG4gIH1cblxuICBmb3Jnb3RQYXNzd29yZChkYXRhKSB7XG4gICAgcmV0dXJuIGRhdGFTZXJ2aWNlLnBvc3QoJy9mb3Jnb3QtcGFzc3dvcmQvJywgZGF0YSk7XG4gIH1cblxuICByZWdpc3RlclBhc3N3b3JkKGRhdGEpIHtcbiAgICByZXR1cm4gZGF0YVNlcnZpY2UucG9zdCgnL3JlZ2lzdGVyLXBhc3N3b3JkLycsIGRhdGEpO1xuICB9XG5cbiAgLy8gVVNFUiAtPlxuICBhZGRVc2VyKGRhdGEpIHtcbiAgICByZXR1cm4gZGF0YVNlcnZpY2UucG9zdCgnL3VzZXJzLycsIGRhdGEpO1xuICB9XG5cbiAgdXBkYXRlVXNlcihpZCwgZGF0YSkge1xuICAgIHJldHVybiBkYXRhU2VydmljZS5wdXQoYC91c2Vycy8ke2lkfS9gLCBkYXRhKTtcbiAgfVxuXG4gIGRlbGV0ZVVzZXIoaWQpIHtcbiAgICByZXR1cm4gZGF0YVNlcnZpY2UuZGVsZXRlKGAvdXNlcnMvJHtpZH0vYCk7XG4gIH1cblxuICBnZXRVc2VyKGlkKSB7XG4gICAgcmV0dXJuIGRhdGFTZXJ2aWNlLmdldChgL3VzZXJzLyR7aWR9L2ApO1xuICB9XG5cbiAgZ2V0Q3VycmVudFVzZXIoKSB7XG4gICAgcmV0dXJuIGRhdGFTZXJ2aWNlLmdldCgnL3VzZXJzL2N1cnJlbnQvJyk7XG4gIH1cblxuICBnZXRVc2VycyhwYXJhbXMpIHtcbiAgICByZXR1cm4gZGF0YVNlcnZpY2UuZ2V0KCcvdXNlcnMvJywgcGFyYW1zKTtcbiAgfVxuXG4gIC8vIDwtIFVTRVJcblxuICAvLyBDT01QQU5ZIC0tPlxuXG4gIGFkZENvbXBhbnkoZGF0YSkge1xuICAgIHJldHVybiBkYXRhU2VydmljZS5wb3N0KCcvY29tcGFuaWVzLycsIGRhdGEpO1xuICB9XG5cbiAgdXBkYXRlQ29tcGFueShpZCwgZGF0YSkge1xuICAgIHJldHVybiBkYXRhU2VydmljZS5wdXQoYC9jb21wYW5pZXMvJHtpZH0vYCwgZGF0YSk7XG4gIH1cblxuICBkZWxldGVDb21wYW55KGlkKSB7XG4gICAgcmV0dXJuIGRhdGFTZXJ2aWNlLmRlbGV0ZShgL2NvbXBhbmllcy8ke2lkfS9gKTtcbiAgfVxuXG4gIGdldENvbXBhbnkoaWQpIHtcbiAgICByZXR1cm4gZGF0YVNlcnZpY2UuZ2V0KGAvY29tcGFuaWVzLyR7aWR9L2ApO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBjb21wYW5pZXMgYnkgcGFyYW1zXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXMgLSBwYXJhbXMgb2JqZWN0XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwYXJhbXMuY2hpbGRyZW5PZiAtIHV1aWQgc3RyaW5nXG4gICAqIEByZXR1cm4ge1Byb21pc2V9XG4gICAqL1xuICBnZXRDb21wYW5pZXMocGFyYW1zKSB7XG4gICAgcmV0dXJuIGRhdGFTZXJ2aWNlLmdldCgnL2NvbXBhbmllcy8nLCBwYXJhbXMpO1xuICB9XG5cbiAgLy8gPC0gQ09NUEFOWVxuXG4gIC8vIENVU1RPTUVSIE1BQ0hJTkVTIC0+XG5cbiAgLyoqXG4gICAqIEdldCBjdXN0b21lciBtYWNoaW5lcyBieSBwYXJhbXNcbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IHBhcmFtcyAtIHBhcmFtcyBvYmplY3RcbiAgICogQHBhcmFtIHtzdHJpbmd9IHBhcmFtcy5jb21wYW55IC0gY29tcGFueSBpZFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHBhcmFtcy5pbmNsdWRlQ2hpbGRDb21wYW5pZXMgLSBpbmNsdWRlIGN1c3RvbWVyIG1hY2hpbmVzIG9mIGNoaWxkIGNvbXBhbmllcyBhbHNvIChvbmx5IGltcG9ydGVycyBoYXZlIGNoaWxkIGNvbXBhbmllcylcbiAgICogQHJldHVybiB7UHJvbWlzZX1cbiAgICovXG4gIGdldEN1c3RvbWVyTWFjaGluZXMocGFyYW1zKSB7XG4gICAgcmV0dXJuIGRhdGFTZXJ2aWNlLmdldCgnL2N1c3RvbWVyLW1hY2hpbmVzLycsIHBhcmFtcyk7XG4gIH1cblxuICBnZXRDdXN0b21lck1hY2hpbmUoc2VyaWFsTnVtYmVyKSB7XG4gICAgcmV0dXJuIGRhdGFTZXJ2aWNlLmdldChgL2N1c3RvbWVyLW1hY2hpbmVzLyR7c2VyaWFsTnVtYmVyfS9gKTtcbiAgfVxuXG4gIHVwZGF0ZUN1c3RvbWVyTWFjaGluZU93bmVyKHNlcmlhbE51bWJlciwgZGF0YSkge1xuICAgIHJldHVybiBkYXRhU2VydmljZS5wdXQoYC9jdXN0b21lci1tYWNoaW5lcy8ke3NlcmlhbE51bWJlcn0vYCwgZGF0YSk7XG4gIH1cblxuICBzYXZlQ3VzdG9tZXJNYWNoaW5lSW5mb3JtYXRpb24oc2VyaWFsTnVtYmVyLCBkYXRhKSB7XG4gICAgcmV0dXJuIGRhdGFTZXJ2aWNlLnB1dChgL2N1c3RvbWVyLW1hY2hpbmVzLyR7c2VyaWFsTnVtYmVyfS9pbmZvL2AsIGRhdGEpO1xuICB9XG5cbiAgZ2V0Q3VzdG9tZXJNYWNoaW5lRGV0YWlscyhzZXJpYWxOdW1iZXIpIHtcbiAgICByZXR1cm4gZGF0YVNlcnZpY2UuZ2V0KGAvY3VzdG9tZXItbWFjaGluZXMvJHtzZXJpYWxOdW1iZXJ9L2RldGFpbHMvYCk7XG4gIH1cblxuICAvLyA8LSBDVVNUT01FUiBNQUNISU5FU1xuXG4gIC8vIENPTVBMQUlOVFMgLT5cbiAgYWRkQ29tcGxhaW50KGRhdGEpIHtcbiAgICByZXR1cm4gZGF0YVNlcnZpY2UucG9zdCgnL2NvbXBsYWludHMvJywgZGF0YSk7XG4gIH1cblxuICBhZGRDb21wbGFpbnRGaWxlKGNvbXBsYWludFV1aWQsIGRhdGEsIGNvbmZpZykge1xuICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgIGZpbGVOYW1lOiBkYXRhLmZpbGVOYW1lXG4gICAgfVxuXG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICBmb3JtRGF0YS5hcHBlbmQoJ2ZpbGUnLCBkYXRhLmZpbGUpO1xuXG4gICAgY29uc3QgYXhpb3NDb25mID0ge1xuICAgICAgb25VcGxvYWRQcm9ncmVzczogY29uZmlnICYmIGNvbmZpZy5vblByb2dyZXNzIHx8IG51bGxcbiAgICB9O1xuXG4gICAgcmV0dXJuIGRhdGFTZXJ2aWNlLnBvc3QoYC9jb21wbGFpbnQtZmlsZS8ke2NvbXBsYWludFV1aWR9L2AsIGZvcm1EYXRhLCBwYXJhbXMsIGF4aW9zQ29uZik7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGN1c3RvbWVyIG1hY2hpbmVzIGJ5IHBhcmFtc1xuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gW3BhcmFtc10gLSBwYXJhbXMgb2JqZWN0LCBpZiBsZWZ0IG91dCBnZXQgYWxsIGZvciB1c2VyIGNvbXBhbnlcbiAgICogQHJldHVybiB7UHJvbWlzZX1cbiAgICovXG4gIGdldENvbXBsYWludHMocGFyYW1zID0gbnVsbCkge1xuICAgIHJldHVybiBkYXRhU2VydmljZS5nZXQoJy9jb21wbGFpbnRzLycsIHBhcmFtcyk7XG4gIH1cblxuICBnZXRDb21wbGFpbnQodXVpZCkge1xuICAgIHJldHVybiBkYXRhU2VydmljZS5nZXQoYC9jb21wbGFpbnRzLyR7dXVpZH0vYCk7XG4gIH1cblxuICAvLyA8LSBDT01QTEFJTlRTXG5cbiAgLy8gV0FSUkFOVFkgUkVHSVNUUkFUSU9OUyAtPlxuXG4gIGFkZFdhcnJhbnR5UmVnaXN0cmF0aW9uKGRhdGEpIHtcbiAgICByZXR1cm4gZGF0YVNlcnZpY2UucG9zdCgnL3dhcnJhbnR5LXJlZ2lzdHJhdGlvbnMvJywgZGF0YSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHdhcnJhbnR5IHJlZ2lzdHJhdGlvbnMgYnkgcGFyYW1zXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbcGFyYW1zXSAtIHBhcmFtcyBvYmplY3QsIGlmIGxlZnQgb3V0IGdldCBhbGwgZm9yIHVzZXIgY29tcGFueVxuICAgKiBAcmV0dXJuIHtQcm9taXNlfVxuICAgKi9cbiAgZ2V0V2FycmFudHlSZWdpc3RyYXRpb25zKHBhcmFtcyA9IG51bGwpIHtcbiAgICByZXR1cm4gZGF0YVNlcnZpY2UuZ2V0KCcvd2FycmFudHktcmVnaXN0cmF0aW9ucy8nLCBwYXJhbXMpO1xuICB9XG5cbiAgZ2V0V2FycmFudHlSZWdpc3RyYXRpb24odXVpZCkge1xuICAgIHJldHVybiBkYXRhU2VydmljZS5nZXQoYC93YXJyYW50eS1yZWdpc3RyYXRpb25zLyR7dXVpZH0vYCk7XG4gIH1cbiAgLy8gPC0gV0FSUkFOVFkgUkVHSVNUUkFUSU9OXG59XG4iLCJpbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnO1xuXG52YXIgZ2V0QmFzZVVSTCA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGxhbmcgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaHRtbCcpWzBdLmxhbmc7XG4gIHJldHVybiAnLycgKyBsYW5nICsgJy9hcGkvdjEnO1xufVxuXG5jb25zdCBheCA9IGF4aW9zLmNyZWF0ZSh7XG4gIGJhc2VVUkw6IGdldEJhc2VVUkwoKSxcbiAgaGVhZGVyczoge1xuICAgICdYLVJlcXVlc3RlZC13aXRoJzogJ1hIUidcbiAgfSxcbiAgdmFsaWRhdGVTdGF0dXM6IGZ1bmN0aW9uIChzdGF0dXMpIHtcbiAgICByZXR1cm4gc3RhdHVzIDwgNTAwOyAvLyBSZWplY3Qgb25seSBpZiB0aGUgc3RhdHVzIGNvZGUgaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDUwMFxuICB9XG59KTtcblxuY2xhc3MgRGF0YVNlcnZpY2Uge1xuICByZXF1ZXN0KG1ldGhvZCwgb3B0aW9ucykge1xuICAgIHJldHVybiBheCh7XG4gICAgICBtZXRob2Q6IG1ldGhvZCxcbiAgICAgIHVybDogb3B0aW9ucy51cmwsXG4gICAgICBkYXRhOiBvcHRpb25zLmRhdGEsXG4gICAgICBwYXJhbXM6IG9wdGlvbnMucGFyYW1zLFxuICAgICAgd2l0aENyZWRlbnRpYWxzOiB0cnVlXG4gICAgfSkudGhlbihyZXMgPT4ge1xuICAgICAgY29uc3QgZGF0YSA9IHJlcy5kYXRhO1xuICAgICAgaWYoIXRoaXMudnVleFN0b3JlKSB7XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgfVxuXG4gICAgICBpZihkYXRhLmNvZGUgPT09IDQwMSkge1xuICAgICAgICB0aGlzLnZ1ZXhTdG9yZS5jb21taXQoJ3NldExvZ2luU3RhdHVzJywgZmFsc2UpO1xuICAgICAgfVxuXG4gICAgICBpZihkYXRhLmNvZGUgPT09IDIwMCAmJiBkYXRhLm1lc3NhZ2VzLmxlbmd0aCkge1xuICAgICAgICB0aGlzLnZ1ZXhTdG9yZS5jb21taXQoJ2FkZE5vdGlmaWNhdGlvbicsIGRhdGEubWVzc2FnZXMpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZGF0YTtcblxuICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgaWYoZXJyb3IucmVzcG9uc2UpIHtcbiAgICAgICAgY29uc3QgZGF0YSA9IGVycm9yLnJlc3BvbnNlLmRhdGE7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYFNlcnZlciBlcnJvciBzdGF0dXM6ICR7ZGF0YS5jb2RlfVxcbiR7ZGF0YS5yZXN1bHQuZXJyb3Iuc3RhY2t9YCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogSWYgeW91J3JlIHVzaW5nIGRhdGFTZXJ2aWNlIHRoaXMgd2l0aCB2dWV4LCB3ZSBjYW4gYXV0b21hdGljYWxseSBsb2dvdXQgdXNlciBhbmQgZG8gb3RoZXIgc3R1ZmYgYmFzZWQgb24gcmVzcG9uc2VzXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBzdG9yZSAtIHZ1ZXggc3RvcmUgb2JqZWN0XG4gICAqL1xuICBzZXRWdWV4U3RvcmUoc3RvcmUpIHtcbiAgICB0aGlzLnZ1ZXhTdG9yZSA9IHN0b3JlO1xuICB9XG5cbiAgZ2V0KHBhdGgsIHBhcmFtcykge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QoJ2dldCcsIHtcbiAgICAgIHVybDogcGF0aCxcbiAgICAgIHBhcmFtczogcGFyYW1zXG4gICAgfSk7XG4gIH1cbiAgcG9zdChwYXRoLCBkYXRhLCBwYXJhbXMsIGNvbmZpZykge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QoJ3Bvc3QnLCB7XG4gICAgICB1cmw6IHBhdGgsXG4gICAgICBkYXRhOiBkYXRhLFxuICAgICAgcGFyYW1zOiBwYXJhbXMsXG4gICAgICBjb25maWc6IGNvbmZpZ1xuICAgIH0pO1xuICB9XG4gIHBhdGNoKHBhdGgsIGRhdGEsIHBhcmFtcykge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QoJ3BhdGNoJywge1xuICAgICAgdXJsOiBwYXRoLFxuICAgICAgZGF0YTogZGF0YSxcbiAgICAgIHBhcmFtczogcGFyYW1zXG4gICAgfSk7XG4gIH1cbiAgcHV0KHBhdGgsIGRhdGEsIHBhcmFtcykge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QoJ3B1dCcsIHtcbiAgICAgIHVybDogcGF0aCxcbiAgICAgIGRhdGE6IGRhdGEsXG4gICAgICBwYXJhbXM6IHBhcmFtc1xuICAgIH0pO1xuICB9XG4gIGRlbGV0ZShwYXRoLCBwYXJhbXMpIHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KCdkZWxldGUnLCB7XG4gICAgICB1cmw6IHBhdGgsXG4gICAgICBwYXJhbXM6IHBhcmFtc1xuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IG5ldyBEYXRhU2VydmljZSgpO1xuIiwiZXhwb3J0IGRlZmF1bHQgY2xhc3MgdXNlclJpZ2h0cyB7XG4gIGNvbnN0cnVjdG9yKCl7fVxuXG4gIC8qKlxuICAqIFRlc3QgaGFzIGEgdXNlciBhIHJpZ2h0XG4gICogQHBhcmFtIHtzdHJpbmd9IHJpZ2h0IC0gdXNlciByaWdodCBuYW1lIFxuICAqIEBwYXJhbSB7c3RyaW5nfSByb2xlIC0gdXNlciByb2xlIG5hbWVcbiAgKiBAcmV0dXJuIHtib29sZWFufSB0cnVlIGlmIHVzZXIncyBncm91cCBoYXMgYSByaWdodCwgZmFsc2UgaWYgbm90XG4gICovXG4gIGhhc1JpZ2h0KCByaWdodCwgcm9sZSApIHtcbiAgICBsZXQgZ3JvdXBBbmRSaWdodHMgPSB7IFJJR0hUUzogd2luZG93LlJJR0hUUywgR1JPVVBTOiB3aW5kb3cuVVNFUl9HUk9VUFMgfTtcblxuICAgIGlmKCAhT2JqZWN0LmtleXMoIGdyb3VwQW5kUmlnaHRzLlJJR0hUUyApLmluY2x1ZGVzKCByaWdodCApICkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBFcnJvcjogZ2l2ZW4gcmlnaHQgaXMgbm90IGNvbmZpZ3VyZWQgdG8gZ3JvdXAgJiByaWdodHMgbW9kdWxlLiBQYXNzZWQgcmlnaHQ6ICcke3JpZ2h0fScgYCk7XG4gICAgfVxuXG4gICAgaWYoIHJvbGUgKSB7XG4gICAgICBjb25zdCByaWdodHNBcnJheSA9IGdyb3VwQW5kUmlnaHRzLkdST1VQU1sgcm9sZSBdOyAgICAgIFxuICAgICAgcmV0dXJuIEFycmF5LmlzQXJyYXkoIHJpZ2h0c0FycmF5ICkgJiYgcmlnaHRzQXJyYXkuaW5jbHVkZXMoIHJpZ2h0ICk7IFxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTsgICAgXG4gIH1cbiAgXG59XG4iLCIvLyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gKiBTaG93IG1vcmUgZmlsZSBpbnB1dHMgd2hlbiBmaWxlcyBhcmUgYWRkZWQgdG8gZmVlZGJhY2sgZm9ybVxuLy8gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgJCBmcm9tICdqcXVlcnknO1xuXG52YXIgc2hvd0lucHV0cyA9IChmdW5jdGlvbigpIHtcbiAgZnVuY3Rpb24gaW5pdCgpe1xuICAgICQoJy5qcy1mZWVkYmFjay1maWxlLWlucHV0IGlucHV0Jykub24oJ2NoYW5nZScsZnVuY3Rpb24oKXtcbiAgICAgICQodGhpcykucGFyZW50cygnLmpzLWZlZWRiYWNrLWZpbGUtaW5wdXQnKS5uZXh0KCkucmVtb3ZlQ2xhc3MoJ2hpZGRlbicpO1xuICAgIH0pO1xuICB9XG4gIHJldHVybiB7XG4gICAgaW5pdDogaW5pdFxuICB9XG59KSgpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHNob3dJbnB1dHM7XG4iLCIvLyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gKiB2aWRlbyBwb3B1cFxuLy8gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgJCBmcm9tICdqcXVlcnknO1xuaW1wb3J0ICdtYWduaWZpYy1wb3B1cCc7XG5cbmNvbnN0IG1hZ25pZmljUG9wdXBWaWRlbyA9IHtcblxuICAvKipcbiAgICogSW5pdGlhbGl6ZXMgZWxlbWVudHMgb24gdGhlIHBhZ2VcbiAgICogQHBhcmFtIHtzdHJpbmd8alF1ZXJ5Lmh0bWxFbG1lbnR9IGVsZW1lbnQgc2VsZWN0b3Igb3IgSHRtbCBlbGVtZW50XG4gICAqL1xuICBpbml0KCBlbGVtZW50ICkge1xuICAgIGNvbnN0ICRpdGVtcyA9ICQoZWxlbWVudCk7XG5cbiAgICAkaXRlbXMuZWFjaCgoaW5kZXgsIGVsZW1lbnQpID0+IHtcbiAgICAgIGNvbnN0ICRlbGVtZW50ID0gJChlbGVtZW50KTtcbiAgICAgIGNvbnN0IHNvdXJjZSA9ICRlbGVtZW50LmRhdGEoJ3lvdXR1YmUnKTtcbiAgICAgICRlbGVtZW50Lm1hZ25pZmljUG9wdXAoe1xuICAgICAgICBzcmM6IHNvdXJjZSxcbiAgICAgICAgZGlzYWJsZU9uOiA3MDAsXG4gICAgICAgIHR5cGU6ICdpZnJhbWUnLFxuICAgICAgICByZW1vdmFsRGVsYXk6IDE2MCxcbiAgICAgICAgcHJlbG9hZGVyOiBmYWxzZSxcbiAgICAgICAgZml4ZWRDb250ZW50UG9zOiBmYWxzZVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxufVxuZXhwb3J0IGRlZmF1bHQgbWFnbmlmaWNQb3B1cFZpZGVvO1xuIiwiPHRlbXBsYXRlPlxuICA8ZGl2IGNsYXNzPVwidnVlLWFwcCBmdWxsLWhlaWdodFwiPlxuICAgIDxkaXYgdi1pZj1cInByZWxvYWRpbmdcIiBjbGFzcz1cInYtcHJlbG9hZGluZyBmdWxsLWhlaWdodFwiPlxuXG4gICAgPC9kaXY+XG4gICAgPGRpdiB2LWVsc2UgY2xhc3M9XCJmdWxsLWhlaWdodFwiPlxuICAgICAgPHRoZS1zdWJoZWFkZXIgdi1pZj1cInN1YmhlYWRlck5lZWRlZFwiPjwvdGhlLXN1YmhlYWRlcj5cbiAgICAgIDxyb3V0ZXItdmlldyB2LWlmPVwiaXNMb2dnZWRJblwiPjwvcm91dGVyLXZpZXc+XG4gICAgICA8ZGl2IHYtZWxzZT48cD57e2xvYygnbG9nZ2VkT3V0Jyl9fTwvcD48L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8bm90aWZpY2F0aW9ucyBncm91cD1cIm5vdGlmaWNhdGlvblwiIHBvc2l0aW9uPVwidG9wIGNlbnRlclwiIDptYXg9XCIzXCI+XG4gICAgICA8dGVtcGxhdGUgc2xvdD1cImJvZHlcIiBzbG90LXNjb3BlPVwicHJvcHNcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInYtbm90aWZpY2F0aW9uXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInYtbm90aWZpY2F0aW9uX19jb250ZW50XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidi1ub3RpZmljYXRpb25fX3RpdGxlIGgzXCI+XG4gICAgICAgICAgICAgIHt7cHJvcHMuaXRlbS50aXRsZX19XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ2LW5vdGlmaWNhdGlvbl9fdGV4dFwiXG4gICAgICAgICAgICAgICAgIHYtaHRtbD1cInByb3BzLml0ZW0udGV4dFwiPjwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInYtbm90aWZpY2F0aW9uX19jbG9zZVwiXG4gICAgICAgICAgICAgICAgQGNsaWNrPVwicHJvcHMuY2xvc2VcIj5cbiAgICAgICAgICAgICAgWFxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC90ZW1wbGF0ZT5cbiAgICA8L25vdGlmaWNhdGlvbnM+XG4gIDwvZGl2PlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cblxuaW1wb3J0ICQgZnJvbSAnanF1ZXJ5JztcblxuZXhwb3J0IGRlZmF1bHQge1xuICBtb3VudGVkOiBmdW5jdGlvbiAoKSB7XG4gIH0sXG4gIGNyZWF0ZWQ6IGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBhcHAgPSB0aGlzO1xuICAgIGNvbnN0IGpvYnMgPSBbXTtcblxuICAgIC8vIEdldCBsYW5ndWFnZSBmcm9tIDxodG1sPiB0YWdcbiAgICBjb25zdCBsYW5nID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmdldEF0dHJpYnV0ZSgnbGFuZycpO1xuICAgIGFwcC4kc3RvcmUuY29tbWl0KCdzZXRMYW5ndWFnZScsIGxhbmcpO1xuXG4gICAgLy8gSWYgc3ViaGVhZGVyIGlzIGZvdW5kLCB3ZSBuZWVkIHRvIHN0b3JlIHRoZSBpbmZvLCBzbyB3ZSBkb24ndCByZW5kZXIgaXQgYWdhaW5cbiAgICBjb25zdCAkc3ViaGVhZGVyID0gJCgnLmpzLXN1YmhlYWRlcicpO1xuICAgIGlmKCRzdWJoZWFkZXIubGVuZ3RoKSB7XG4gICAgICBhcHAuJHN0b3JlLmNvbW1pdCgnc2V0U3ViaGVhZGVyRm91bmQnLCB0cnVlKTtcbiAgICB9XG5cbiAgICAvLyBHZXQgbG9jYWxpemF0aW9uXG4gICAgam9icy5wdXNoKGFwcC4kc3RvcmUuZGlzcGF0Y2goJ2dldExvY2FsaXphdGlvbicpKTtcblxuICAgIC8vIEdldCB1c2VyIGluZm8gaWYgaXQgaXMgbmVlZGVkIGJ5IHRoaXMgcGFydGljdWxhciBhcHBcbiAgICBpZih0aGlzLiRzdG9yZS5zdGF0ZS5uZWVkc0xvZ2dpbmdJbikge1xuICAgICAgam9icy5wdXNoKGFwcC4kc3RvcmUuZGlzcGF0Y2goJ2dldEN1cnJlbnRVc2VyJykpO1xuICAgIH1cblxuICAgIGF3YWl0IFByb21pc2UuYWxsKGpvYnMpO1xuXG4gICAgYXBwLiRzdG9yZS5jb21taXQoJ3NldFByZWxvYWRpbmdTdGF0dXMnLCBmYWxzZSk7XG4gIH0sXG4gIGNvbXB1dGVkOiB7XG4gICAgc3ViaGVhZGVyTmVlZGVkKCkge1xuICAgICAgcmV0dXJuICF0aGlzLiRzdG9yZS5zdGF0ZS5zdWJoZWFkZXJGb3VuZDtcbiAgICB9LFxuICAgIGlzTG9nZ2VkSW4oKSB7XG4gICAgICByZXR1cm4gIXRoaXMuJHN0b3JlLnN0YXRlLm5lZWRzTG9nZ2luZ0luIHx8wqB0aGlzLiRzdG9yZS5zdGF0ZS5sb2dnZWRJbjtcbiAgICB9LFxuICAgIHByZWxvYWRpbmcoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kc3RvcmUuc3RhdGUucHJlbG9hZGluZztcbiAgICB9LFxuICAgIG5vdGlmaWNhdGlvbnNRdWV1ZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRzdG9yZS5zdGF0ZS5ub3RpZmljYXRpb25zUXVldWU7XG4gICAgfVxuICB9LFxuICB3YXRjaDoge1xuICAgIG5vdGlmaWNhdGlvbnNRdWV1ZToge1xuICAgICAgaGFuZGxlcjogZnVuY3Rpb24gKHF1ZXVlKSB7XG4gICAgICAgIGxldCBxdWV1ZVRvcCA9IHF1ZXVlW3F1ZXVlLmxlbmd0aCAtIDFdXG5cbiAgICAgICAgaWYodHlwZW9mIHF1ZXVlVG9wID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuJG5vdGlmeSh7XG4gICAgICAgICAgdGl0bGU6IHF1ZXVlVG9wLFxuICAgICAgICAgIGdyb3VwOiAnbm90aWZpY2F0aW9uJyxcbiAgICAgICAgICBkdXJhdGlvbjogMzAwMFxuICAgICAgICB9KVxuICAgICAgfSxcbiAgICAgIGltbWVkaWF0ZTogdHJ1ZSxcbiAgICAgIGRlZXA6IHRydWVcbiAgICB9XG4gIH1cbn1cbjwvc2NyaXB0PlxuIiwiaW1wb3J0IFZ1ZSBmcm9tICd2dWUnO1xuaW1wb3J0IHN0b3JlIGZyb20gJy4uL3N0b3JlJztcbmltcG9ydCBBUEkgZnJvbSAnLi4vLi4vc2VydmljZXMvYXBpJztcbmltcG9ydCB1c2VyUmlnaHRzIGZyb20gJy4uLy4uL3NlcnZpY2VzL3VzZXItcmlnaHRzJztcblxuaW1wb3J0IFZ1ZVRhYmxlcyBmcm9tICd2dWUtdGFibGVzLTInO1xuaW1wb3J0IFBvcnRhbFZ1ZSBmcm9tICdwb3J0YWwtdnVlJztcbmltcG9ydCBWTW9kYWwgZnJvbSAndnVlLWpzLW1vZGFsJ1xuaW1wb3J0IE5vdGlmaWNhdGlvbnMgZnJvbSAndnVlLW5vdGlmaWNhdGlvbic7XG5cbi8vIEdsb2JhbCBjb21wb25lbnRzXG5pbXBvcnQgJy4uL2NvbXBvbmVudHMvdGhlLXN1YmhlYWRlcic7XG5pbXBvcnQgJy4uL2NvbXBvbmVudHMvdGhlLXNpZGViYXItbGF5b3V0JztcbmltcG9ydCAnLi4vY29tcG9uZW50cy90aGUtMS1jb2x1bW4tbGF5b3V0JztcblxuVnVlLnVzZShOb3RpZmljYXRpb25zKTtcblZ1ZS51c2UoUG9ydGFsVnVlKTtcbi8vVnVlLnVzZShWdWVUYWJsZXMuQ2xpZW50VGFibGUpO1xuVnVlLnVzZShWdWVUYWJsZXMuQ2xpZW50VGFibGUsIHtcbiAgc29ydEljb246IHtcbiAgICBpczogJ2ljb24tLWNoZXZyb24tdXAtZG93bi0tYmxhY2snLFxuICAgIGJhc2U6ICdpY29uJyxcbiAgICB1cDogJ2ljb24tLWNoZXZyb24tdXAtLWJsYWNrJyxcbiAgICBkb3duOiAnaWNvbi0tY2hldnJvbi1kb3duLS1ibGFjaydcbiAgfVxufSwgZmFsc2UsICgpID0+IHsgcmV0dXJuIHtcbiAgZnJhbWV3b3JrOiAnJyxcbiAgdGFibGU6ICd0YWJsZSB2LWRhdGEtdGFibGUnLFxuICByb3c6ICd2LWRhdGEtdGFibGVfX3JvdycsXG4gIGNvbHVtbjogJ3YtZGF0YS10YWJsZV9fY29sJyxcbiAgbGFiZWw6ICcnLFxuICBpbnB1dDogJ3YtZGF0YS10YWJsZV9faW5wdXQnLFxuICBzZWxlY3Q6ICd2LWRhdGEtdGFibGVfX3NlbGVjdCcsXG4gIGZpZWxkOiAndi1kYXRhLXRhYmxlX19maWVsZCcsXG4gIGlubGluZTogJ2lzLWlubGluZScsXG4gIHJpZ2h0OiAnaXMtcHVsbC1yaWdodCcsXG4gIGxlZnQ6ICdpcy1wdWxsLWxlZnQnLFxuICBjZW50ZXI6ICd0ZXh0LWNlbnRlcicsXG4gIGNvbnRlbnRDZW50ZXI6ICcnLFxuICBzbWFsbDogJycsXG4gIG5vbWFyZ2luOiAnJyxcbiAgZ3JvdXBUcjogJ3YtZGF0YS10YWJsZV9faW5mbycsXG4gIGJ1dHRvbjogJ2J0biBidG4tc2Vjb25kYXJ5JyxcbiAgZHJvcGRvd246IHtcbiAgICBjb250YWluZXI6ICdkcm9wZG93bicsXG4gICAgdHJpZ2dlcjogJ2Ryb3Bkb3duLXRvZ2dsZScsXG4gICAgbWVudTogJ2Ryb3Bkb3duLW1lbnUnLFxuICAgIGNvbnRlbnQ6ICcnLFxuICAgIGl0ZW06ICcnLFxuICAgIGNhcmV0OiAnY2FyZXQnXG4gIH0sXG4gIHBhZ2luYXRpb246IHtcbiAgICBuYXY6ICcnLFxuICAgIGNvdW50OiAnJyxcbiAgICB3cmFwcGVyOiAnJyxcbiAgICBsaXN0OiAncGFnaW5hdGlvbicsXG4gICAgaXRlbTogJ3BhZ2UtaXRlbScsXG4gICAgbGluazogJ3BhZ2UtbGluaycsXG4gICAgbmV4dDogJycsXG4gICAgcHJldjogJycsXG4gICAgYWN0aXZlOiAnYWN0aXZlJ1xuICB9XG59fSk7XG5WdWUudXNlKFZNb2RhbCwge1xuICBkaWFsb2c6IHRydWVcbn0pO1xuXG5WdWUucHJvdG90eXBlLiRhcGkgPSBuZXcgQVBJKCk7XG5WdWUucHJvdG90eXBlLiR1c2VyUmlnaHRzID0gbmV3IHVzZXJSaWdodHMoKTtcblxuLy8gR2xvYmFsIGxvY2FsaXphdGlvbiBmdW5jdGlvbiB7e2xvYygndXNlci5maXJzdE5hbWUnKX19XG5WdWUubWl4aW4oe1xuICBkYXRhOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbG9jKGtleXMpIHtcbiAgICAgICAgaWYoIXN0b3JlLnN0YXRlLmxvY2FsaXphdGlvbikge1xuICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGtleXNPcmlnaW5hbCA9IGtleXM7XG5cbiAgICAgICAgaWYoIUFycmF5LmlzQXJyYXkoa2V5cykpIHtcbiAgICAgICAgICBrZXlzID0ga2V5cy5zcGxpdCgnLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHZhbHVlO1xuXG4gICAgICAgIGtleXMuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgICAgdmFsdWUgPSB2YWx1ZSA/IHZhbHVlW2tleV0gOiBzdG9yZS5zdGF0ZS5sb2NhbGl6YXRpb25ba2V5XTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYodHlwZW9mIHZhbHVlID09PSAndW5kZWZpbmVkJyB8fCB2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybiAnbWlzc2luZzogXCInICsga2V5c09yaWdpbmFsICsgJ1wiJztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pO1xuIiwiaW1wb3J0IFZ1ZSBmcm9tICd2dWUnO1xuaW1wb3J0IEFwcCBmcm9tICcuLi9hcHAudnVlJztcbmltcG9ydCBSb3V0ZXIgZnJvbSAnLi9yb3V0ZXInO1xuaW1wb3J0IHN0b3JlIGZyb20gJy4uLy4uL3N0b3JlJztcblxuaW1wb3J0ICcuLi9jb21tb24tc2V0dGluZ3MnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGluaXQoZWxlbWVudElkKSB7XG4gICAgY29uc3QgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGVsZW1lbnRJZCk7XG5cbiAgICBpZihlbGVtZW50KSB7XG5cbiAgICAgIGNvbnN0IHJvdXRlciA9IG5ldyBSb3V0ZXIoe1xuICAgICAgICBiYXNlOiBlbGVtZW50LmdldEF0dHJpYnV0ZSgnZGF0YS1iYXNlLXVybCcpLFxuICAgICAgICBwYWdlczogSlNPTi5wYXJzZShlbGVtZW50LmdldEF0dHJpYnV0ZSgnZGF0YS1wYWdlcycpKVxuICAgICAgfSk7XG5cbiAgICAgIG5ldyBWdWUoe1xuICAgICAgICBlbDogJyMnICsgZWxlbWVudElkLFxuICAgICAgICByb3V0ZXIsXG4gICAgICAgIHN0b3JlLFxuICAgICAgICBtb3VudGVkICgpIHtcbiAgICAgICAgICAvLyBTdHVmZiB0byBkbyB3aGVuIG1vdW50ZWRcbiAgICAgICAgfSxcbiAgICAgICAgcmVuZGVyOiBjcmVhdGVFbGVtZW50ID0+IHtcbiAgICAgICAgICByZXR1cm4gY3JlYXRlRWxlbWVudChBcHApXG4gICAgICAgIH0sXG4gICAgICAgIGNyZWF0ZWQ6ICgpID0+IHtcblxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IFZ1ZSBmcm9tICd2dWUnXG5pbXBvcnQgVnVlUm91dGVyIGZyb20gJ3Z1ZS1yb3V0ZXInXG5cbi8vIFZpZXdzXG5pbXBvcnQgQ29tcGxhaW50cyBmcm9tICcuLi8uLi8uLi9jb21wb25lbnRzL3ZpZXctY29tcGxhaW50cy52dWUnO1xuaW1wb3J0IENvbXBsYWludCBmcm9tICcuLi8uLi8uLi9jb21wb25lbnRzL3ZpZXctY29tcGxhaW50LnZ1ZSc7XG5pbXBvcnQgQ3VzdG9tZXJNYWNoaW5lIGZyb20gJy4uLy4uLy4uL2NvbXBvbmVudHMvdmlldy1jdXN0b21lci1tYWNoaW5lLnZ1ZSc7XG5cblZ1ZS51c2UoVnVlUm91dGVyKVxuXG5jb25zdCBSb3V0ZXIgPSAob3B0aW9ucykgPT4ge1xuICBjb25zdCByb3V0ZXMgPSBbXG4gICAgeyBwYXRoOiAnLycsIG5hbWU6ICdjb21wbGFpbnRzJywgY29tcG9uZW50OiBDb21wbGFpbnRzIH0sXG4gICAgeyBwYXRoOiAnLzppZCcsIG5hbWU6ICdjb21wbGFpbnQnLCBjb21wb25lbnQ6IENvbXBsYWludCB9LFxuICAgIHsgcGF0aDogJy9jdXN0b21lci1tYWNoaW5lcy86c2VyaWFsTnVtYmVyJywgbmFtZTogJ2N1c3RvbWVyLW1hY2hpbmUnLCBjb21wb25lbnQ6IEN1c3RvbWVyTWFjaGluZSwgYmVmb3JlRW50ZXIodG8sIGZyb20sIG5leHQpIHtcbiAgICAgIGNvbnN0IGV4dGVybmFsUGFnZSA9IG9wdGlvbnMucGFnZXMgJiYgb3B0aW9ucy5wYWdlc1t0by5uYW1lXTtcbiAgICAgIGlmKGV4dGVybmFsUGFnZSkge1xuICAgICAgICBsb2NhdGlvbi5ocmVmID0gZXh0ZXJuYWxQYWdlLnVybCArIHRvLnBhcmFtcy5zZXJpYWxOdW1iZXI7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIG5leHQoKTtcbiAgICB9fVxuICBdO1xuXG4gIGNvbnN0IHJvdXRlciA9ICBuZXcgVnVlUm91dGVyKHtcbiAgICBtb2RlOiAnaGlzdG9yeScsXG4gICAgYmFzZTogb3B0aW9ucy5iYXNlLFxuICAgIGxpbmtBY3RpdmVDbGFzczogJ3Ytcm91dGVyLWxpbmtfX2FjdGl2ZScsXG4gICAgbGlua0V4YWN0QWN0aXZlQ2xhc3M6ICd2LXJvdXRlci1saW5rX19jdXJyZW50JyxcbiAgICByb3V0ZXM6IHJvdXRlc1xuICB9KTtcblxuICByZXR1cm4gcm91dGVyO1xufVxuXG5leHBvcnQgZGVmYXVsdCBSb3V0ZXI7XG4iLCJpbXBvcnQgVnVlIGZyb20gJ3Z1ZSdcbmltcG9ydCBWdWVSb3V0ZXIgZnJvbSAndnVlLXJvdXRlcidcblxuLy8gVmlld3NcbmltcG9ydCBDdXN0b21lck1hY2hpbmVzIGZyb20gJy4uLy4uLy4uL2NvbXBvbmVudHMvdmlldy1jdXN0b21lci1tYWNoaW5lcy52dWUnO1xuaW1wb3J0IEN1c3RvbWVyTWFjaGluZSBmcm9tICcuLi8uLi8uLi9jb21wb25lbnRzL3ZpZXctY3VzdG9tZXItbWFjaGluZS52dWUnO1xuaW1wb3J0IENvbXBsYWludCBmcm9tICcuLi8uLi8uLi9jb21wb25lbnRzL3ZpZXctY29tcGxhaW50LnZ1ZSc7XG5cblZ1ZS51c2UoVnVlUm91dGVyKVxuXG5jb25zdCBSb3V0ZXIgPSAob3B0aW9ucykgPT4ge1xuICByZXR1cm4gbmV3IFZ1ZVJvdXRlcih7XG4gICAgbW9kZTogJ2hpc3RvcnknLFxuICAgIGJhc2U6IG9wdGlvbnMuYmFzZSxcbiAgICBsaW5rQWN0aXZlQ2xhc3M6ICd2LXJvdXRlci1saW5rX19hY3RpdmUnLFxuICAgIGxpbmtFeGFjdEFjdGl2ZUNsYXNzOiAndi1yb3V0ZXItbGlua19fY3VycmVudCcsXG4gICAgcm91dGVzOiBbXG4gICAgICB7IHBhdGg6ICcvJywgbmFtZTogJ2N1c3RvbWVyLW1hY2hpbmVzJywgY29tcG9uZW50OiBDdXN0b21lck1hY2hpbmVzIH0sXG4gICAgICB7IHBhdGg6ICcvOnNlcmlhbE51bWJlcicsIG5hbWU6ICdjdXN0b21lci1tYWNoaW5lJywgY29tcG9uZW50OiBDdXN0b21lck1hY2hpbmUgfSxcbiAgICAgIHsgcGF0aDogJy9jb21wbGFpbnRzLzppZCcsIG5hbWU6ICdjb21wbGFpbnQnLCBjb21wb25lbnQ6IENvbXBsYWludCwgYmVmb3JlRW50ZXIodG8sIGZyb20sIG5leHQpIHtcbiAgICAgICAgY29uc3QgZXh0ZXJuYWxQYWdlID0gb3B0aW9ucy5wYWdlcyAmJiBvcHRpb25zLnBhZ2VzW3RvLm5hbWVdO1xuICAgICAgICBpZihleHRlcm5hbFBhZ2UpIHtcbiAgICAgICAgICBsb2NhdGlvbi5ocmVmID0gZXh0ZXJuYWxQYWdlLnVybCArIHRvLnBhcmFtcy5pZDtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgbmV4dCgpO1xuICAgICAgfX1cbiAgICBdXG4gIH0pXG59XG5cbmV4cG9ydCBkZWZhdWx0IFJvdXRlcjtcbiIsImltcG9ydCBWdWUgZnJvbSAndnVlJztcbmltcG9ydCBBcHAgZnJvbSAnLi4vYXBwLnZ1ZSc7XG5pbXBvcnQgUm91dGVyIGZyb20gJy4vcm91dGVyJztcbmltcG9ydCBzdG9yZSBmcm9tICcuLi8uLi9zdG9yZSc7XG5cbmltcG9ydCAnLi4vY29tbW9uLXNldHRpbmdzJztcblxuZXhwb3J0IGRlZmF1bHQge1xuICBpbml0KGVsZW1lbnRJZCkge1xuICAgIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChlbGVtZW50SWQpO1xuXG4gICAgaWYoZWxlbWVudCkge1xuXG4gICAgICBjb25zdCByb3V0ZXIgPSBuZXcgUm91dGVyKHtcbiAgICAgICAgYmFzZTogZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtYmFzZS11cmwnKVxuICAgICAgfSk7XG5cbiAgICAgIG5ldyBWdWUoe1xuICAgICAgICBlbDogJyMnICsgZWxlbWVudElkLFxuICAgICAgICByb3V0ZXIsXG4gICAgICAgIHN0b3JlLFxuICAgICAgICBtb3VudGVkICgpIHtcbiAgICAgICAgICAvLyBTdHVmZiB0byBkbyB3aGVuIG1vdW50ZWRcbiAgICAgICAgfSxcbiAgICAgICAgcmVuZGVyOiBjcmVhdGVFbGVtZW50ID0+IHtcbiAgICAgICAgICByZXR1cm4gY3JlYXRlRWxlbWVudChBcHApXG4gICAgICAgIH0sXG4gICAgICAgIGNyZWF0ZWQ6ICgpID0+IHtcblxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IFZ1ZSBmcm9tICd2dWUnXG5pbXBvcnQgVnVlUm91dGVyIGZyb20gJ3Z1ZS1yb3V0ZXInXG5cbi8vIFZpZXdzXG5pbXBvcnQgSG9tZSBmcm9tICcuLi92aWV3LWhvbWUudnVlJztcbmltcG9ydCBDb21wYW5pZXMgZnJvbSAnLi4vLi4vLi4vY29tcG9uZW50cy92aWV3LWNvbXBhbmllcy52dWUnO1xuaW1wb3J0IENvbXBhbnkgZnJvbSAnLi4vLi4vLi4vY29tcG9uZW50cy92aWV3LWNvbXBhbnkudnVlJztcblxuVnVlLnVzZShWdWVSb3V0ZXIpXG5cbmNvbnN0IFJvdXRlciA9IChvcHRpb25zKSA9PiB7XG4gIHJldHVybiBuZXcgVnVlUm91dGVyKHtcbiAgICBtb2RlOiAnaGlzdG9yeScsXG4gICAgYmFzZTogb3B0aW9ucy5iYXNlLFxuICAgIGxpbmtBY3RpdmVDbGFzczogJ3Ytcm91dGVyLWxpbmtfX2FjdGl2ZScsXG4gICAgbGlua0V4YWN0QWN0aXZlQ2xhc3M6ICd2LXJvdXRlci1saW5rX19jdXJyZW50JyxcbiAgICByb3V0ZXM6IFtcbiAgICAgIHsgcGF0aDogJy8nLCBuYW1lOiAnaG9tZScsIGNvbXBvbmVudDogSG9tZSB9LFxuICAgICAgeyBwYXRoOiAnL2NvbXBhbmllcy86cGFyZW50JywgbmFtZTogJ2NvbXBhbmllcycsIGNvbXBvbmVudDogQ29tcGFuaWVzfSxcbiAgICAgIHsgcGF0aDogJy9jb21wYW55LzppZCcsIG5hbWU6ICdjb21wYW55JywgY29tcG9uZW50OiBDb21wYW55fVxuICAgIF1cbiAgfSlcbn1cblxuZXhwb3J0IGRlZmF1bHQgUm91dGVyO1xuIiwiPHRlbXBsYXRlPlxuICA8ZGl2PjwvZGl2PlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cblxuLy8gSG9tZSB2aWV3IGlzIG9ubHkgdXNlZCBmb3IgcmVkaXJlY3RpbmcuIEF0IGxlYXN0IGZvciBub3cuXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbmFtZTogJ0hvbWUnLFxuICBtb3VudGVkKCkge1xuICAgIGNvbnN0IGFwcCA9IHRoaXM7XG5cbiAgICAvLyBSZWRpcmVjdCB0byBjb3JyZWN0IHBhZ2VcbiAgICBpZihhcHAuJHN0b3JlLnN0YXRlLnVzZXIucm9sZSA9PT0gJ2ltcG9ydGVyLWFkbWluJyB8fCBhcHAuJHN0b3JlLnN0YXRlLnVzZXIucm9sZSA9PT0gJ3NpdGUtYWRtaW4nKSB7XG4gICAgICBhcHAuJHJvdXRlci5yZXBsYWNlKHtcbiAgICAgICAgbmFtZTogJ2NvbXBhbmllcycsXG4gICAgICAgIHBhcmFtczoge1xuICAgICAgICAgIHBhcmVudDogdGhpcy4kc3RvcmUuc3RhdGUudXNlci5jb21wYW55LmlkXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHRoaXMuJHN0b3JlLmNvbW1pdCgnc2V0U3ViaGVhZGVyJywge1xuICAgICAgc3VidGl0bGU6ICcnLFxuICAgICAgdGl0bGU6IHRoaXMubG9jKCdjb21wb25lbnRzLmhvbWUuc3ViaGVhZGVyVGl0bGUnKSxcbiAgICAgIGRlc2NyaXB0aW9uOiB0aGlzLmxvYygnY29tcG9uZW50cy5ob21lLnN1YmhlYWRlckRlc2NyaXB0aW9uJylcbiAgICB9KTtcbiAgfVxufVxuPC9zY3JpcHQ+XG4iLCJpbXBvcnQgVnVlIGZyb20gJ3Z1ZSc7XG5pbXBvcnQgQXBwIGZyb20gJy4uL2FwcC52dWUnO1xuaW1wb3J0IFJvdXRlciBmcm9tICcuL3JvdXRlcic7XG5pbXBvcnQgc3RvcmUgZnJvbSAnLi4vLi4vc3RvcmUnO1xuXG5pbXBvcnQgJy4uL2NvbW1vbi1zZXR0aW5ncyc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgaW5pdChlbGVtZW50SWQpIHtcbiAgICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZWxlbWVudElkKTtcblxuICAgIGlmKGVsZW1lbnQpIHtcblxuICAgICAgY29uc3Qgcm91dGVyID0gbmV3IFJvdXRlcih7XG4gICAgICAgIGJhc2U6IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLWJhc2UtdXJsJylcbiAgICAgIH0pO1xuXG4gICAgICBuZXcgVnVlKHtcbiAgICAgICAgZWw6ICcjJyArIGVsZW1lbnRJZCxcbiAgICAgICAgcm91dGVyLFxuICAgICAgICBzdG9yZSxcbiAgICAgICAgbW91bnRlZCAoKSB7XG4gICAgICAgICAgLy9jb25zb2xlLmxvZyh0aGlzKTtcbiAgICAgICAgICAvLyBTdHVmZiB0byBkbyB3aGVuIG1vdW50ZWRcbiAgICAgICAgfSxcbiAgICAgICAgcmVuZGVyOiBjcmVhdGVFbGVtZW50ID0+IHtcbiAgICAgICAgICByZXR1cm4gY3JlYXRlRWxlbWVudChBcHApXG4gICAgICAgIH0sXG4gICAgICAgIGNyZWF0ZWQ6ICgpID0+IHtcbiAgICAgICAgICAvLyBXZSBkb24ndCBhY3R1YWxseSBoYXZlIHN1YmhlYWRlciBidXQgd2UgZG9uJ3QgbmVlZCBpdCBlaXRoZXJcbiAgICAgICAgICBzdG9yZS5jb21taXQoJ3NldFN1YmhlYWRlckZvdW5kJywgdHJ1ZSk7XG4gICAgICAgICAgc3RvcmUuY29tbWl0KCdzZXROZWVkc0xvZ2dpbkluJywgZmFsc2UpO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IFZ1ZSBmcm9tICd2dWUnXG5pbXBvcnQgVnVlUm91dGVyIGZyb20gJ3Z1ZS1yb3V0ZXInXG5cbi8vIFZpZXdzXG5pbXBvcnQgRm9yZ290dGVuUGFzc3dvcmQgZnJvbSAnLi4vLi4vLi4vY29tcG9uZW50cy92aWV3LWZvcmdvdHRlbi1wYXNzd29yZC52dWUnO1xuXG5WdWUudXNlKFZ1ZVJvdXRlcilcblxuY29uc3QgUm91dGVyID0gKG9wdGlvbnMpID0+IHtcbiAgcmV0dXJuIG5ldyBWdWVSb3V0ZXIoe1xuICAgIG1vZGU6ICdoaXN0b3J5JyxcbiAgICBiYXNlOiBvcHRpb25zLmJhc2UsXG4gICAgbGlua0FjdGl2ZUNsYXNzOiAndi1yb3V0ZXItbGlua19fYWN0aXZlJyxcbiAgICBsaW5rRXhhY3RBY3RpdmVDbGFzczogJ3Ytcm91dGVyLWxpbmtfX2N1cnJlbnQnLFxuICAgIHJvdXRlczogW1xuICAgICAge1xuICAgICAgICBwYXRoOiAnLycsIG5hbWU6ICdmb3Jnb3R0ZW4tcGFzc3dvcmQnLCBjb21wb25lbnQ6IEZvcmdvdHRlblBhc3N3b3JkXG4gICAgICB9XG4gICAgXVxuICB9KVxufVxuXG5leHBvcnQgZGVmYXVsdCBSb3V0ZXI7XG4iLCJpbXBvcnQgVnVlIGZyb20gJ3Z1ZSdcbmltcG9ydCBWdWVSb3V0ZXIgZnJvbSAndnVlLXJvdXRlcidcblxuLy8gVmlld3NcbmltcG9ydCBDb21wYW55IGZyb20gJy4uLy4uLy4uL2NvbXBvbmVudHMvdmlldy1jb21wYW55LnZ1ZSc7XG5cblZ1ZS51c2UoVnVlUm91dGVyKVxuXG5jb25zdCBSb3V0ZXIgPSAob3B0aW9ucykgPT4ge1xuICByZXR1cm4gbmV3IFZ1ZVJvdXRlcih7XG4gICAgbW9kZTogJ2hpc3RvcnknLFxuICAgIGJhc2U6IG9wdGlvbnMuYmFzZSxcbiAgICBsaW5rQWN0aXZlQ2xhc3M6ICd2LXJvdXRlci1saW5rX19hY3RpdmUnLFxuICAgIGxpbmtFeGFjdEFjdGl2ZUNsYXNzOiAndi1yb3V0ZXItbGlua19fY3VycmVudCcsXG4gICAgcm91dGVzOiBbXG4gICAgICB7IHBhdGg6ICcvJywgbmFtZTogJ2NvbXBhbnknLCBjb21wb25lbnQ6IENvbXBhbnkgfSxcbiAgICBdXG4gIH0pXG59XG5cbmV4cG9ydCBkZWZhdWx0IFJvdXRlcjtcbiIsImltcG9ydCBWdWUgZnJvbSAndnVlJztcbmltcG9ydCBBcHAgZnJvbSAnLi4vYXBwLnZ1ZSc7XG5pbXBvcnQgUm91dGVyIGZyb20gJy4vcm91dGVyJztcbmltcG9ydCBzdG9yZSBmcm9tICcuLi8uLi9zdG9yZSc7XG5cbmltcG9ydCAnLi4vY29tbW9uLXNldHRpbmdzJztcblxuZXhwb3J0IGRlZmF1bHQge1xuICBpbml0KGVsZW1lbnRJZCkge1xuICAgIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChlbGVtZW50SWQpO1xuXG4gICAgaWYoZWxlbWVudCkge1xuXG4gICAgICBjb25zdCByb3V0ZXIgPSBuZXcgUm91dGVyKHtcbiAgICAgICAgYmFzZTogZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtYmFzZS11cmwnKVxuICAgICAgfSk7XG5cbiAgICAgIG5ldyBWdWUoe1xuICAgICAgICBlbDogJyMnICsgZWxlbWVudElkLFxuICAgICAgICByb3V0ZXIsXG4gICAgICAgIHN0b3JlLFxuICAgICAgICBtb3VudGVkICgpIHtcbiAgICAgICAgICAvLyBTdHVmZiB0byBkbyB3aGVuIG1vdW50ZWRcbiAgICAgICAgfSxcbiAgICAgICAgcmVuZGVyOiBjcmVhdGVFbGVtZW50ID0+IHtcbiAgICAgICAgICByZXR1cm4gY3JlYXRlRWxlbWVudChBcHApXG4gICAgICAgIH0sXG4gICAgICAgIGNyZWF0ZWQ6ICgpID0+IHtcbiAgICAgICAgICAvLyBXZSBkb24ndCBhY3R1YWxseSBoYXZlIHN1YmhlYWRlciBidXQgd2UgZG9uJ3QgbmVlZCBpdCBlaXRoZXJcbiAgICAgICAgICBzdG9yZS5jb21taXQoJ3NldFN1YmhlYWRlckZvdW5kJywgdHJ1ZSk7XG4gICAgICAgICAgc3RvcmUuY29tbWl0KCdzZXROZWVkc0xvZ2dpbkluJywgZmFsc2UpO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IFZ1ZSBmcm9tICd2dWUnXG5pbXBvcnQgVnVlUm91dGVyIGZyb20gJ3Z1ZS1yb3V0ZXInXG5cbi8vIFZpZXdzXG5pbXBvcnQgVXBkYXRlUGFzc3dvcmQgZnJvbSAnLi4vLi4vLi4vY29tcG9uZW50cy92aWV3LXVwZGF0ZS1wYXNzd29yZC52dWUnO1xuXG5WdWUudXNlKFZ1ZVJvdXRlcilcblxuY29uc3QgUm91dGVyID0gKG9wdGlvbnMpID0+IHtcbiAgcmV0dXJuIG5ldyBWdWVSb3V0ZXIoe1xuICAgIG1vZGU6ICdoaXN0b3J5JyxcbiAgICBiYXNlOiBvcHRpb25zLmJhc2UsXG4gICAgbGlua0FjdGl2ZUNsYXNzOiAndi1yb3V0ZXItbGlua19fYWN0aXZlJyxcbiAgICBsaW5rRXhhY3RBY3RpdmVDbGFzczogJ3Ytcm91dGVyLWxpbmtfX2N1cnJlbnQnLFxuICAgIHJvdXRlczogW1xuICAgICAge1xuICAgICAgICBwYXRoOiAnLycsIG5hbWU6ICd1cGRhdGUtcGFzc3dvcmQnLCBjb21wb25lbnQ6IFVwZGF0ZVBhc3N3b3JkXG4gICAgICB9XG4gICAgXVxuICB9KVxufVxuXG5leHBvcnQgZGVmYXVsdCBSb3V0ZXI7XG4iLCJpbXBvcnQgVnVlIGZyb20gJ3Z1ZSdcbmltcG9ydCBWdWVSb3V0ZXIgZnJvbSAndnVlLXJvdXRlcidcblxuLy8gVmlld3NcbmltcG9ydCBVc2VyU2V0dGluZ3MgZnJvbSAnLi4vLi4vLi4vY29tcG9uZW50cy92aWV3LXVzZXItc2V0dGluZ3MudnVlJztcbmltcG9ydCBDaGFuZ2VQYXNzd29yZCBmcm9tICcuLi8uLi8uLi9jb21wb25lbnRzL3ZpZXctY2hhbmdlLXBhc3N3b3JkLnZ1ZSc7XG5pbXBvcnQgRWRpdEFjY291bnQgZnJvbSAnLi4vLi4vLi4vY29tcG9uZW50cy92aWV3LWVkaXQtYWNjb3VudC52dWUnO1xuXG5WdWUudXNlKFZ1ZVJvdXRlcilcblxuY29uc3QgUm91dGVyID0gKG9wdGlvbnMpID0+IHtcbiAgcmV0dXJuIG5ldyBWdWVSb3V0ZXIoe1xuICAgIG1vZGU6ICdoaXN0b3J5JyxcbiAgICBiYXNlOiBvcHRpb25zLmJhc2UsXG4gICAgbGlua0FjdGl2ZUNsYXNzOiAndi1yb3V0ZXItbGlua19fYWN0aXZlJyxcbiAgICBsaW5rRXhhY3RBY3RpdmVDbGFzczogJ3Ytcm91dGVyLWxpbmtfX2N1cnJlbnQnLFxuICAgIHJvdXRlczogW1xuICAgICAge1xuICAgICAgICBwYXRoOiAnLycsIG5hbWU6ICd1c2VyLXNldHRpbmdzJywgY29tcG9uZW50OiBVc2VyU2V0dGluZ3MsXG4gICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgLy8gVXNlclByb2ZpbGUgd2lsbCBiZSByZW5kZXJlZCBpbnNpZGUgVXNlcidzIDxyb3V0ZXItdmlldz5cbiAgICAgICAgICAgIC8vIHdoZW4gL3VzZXIvOmlkL3Byb2ZpbGUgaXMgbWF0Y2hlZFxuICAgICAgICAgICAgbmFtZTogJ2NoYW5nZS1wYXNzd29yZCcsXG4gICAgICAgICAgICBwYXRoOiAnY2hhbmdlLXBhc3N3b3JkJyxcbiAgICAgICAgICAgIGNvbXBvbmVudDogQ2hhbmdlUGFzc3dvcmRcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIC8vIFVzZXJQb3N0cyB3aWxsIGJlIHJlbmRlcmVkIGluc2lkZSBVc2VyJ3MgPHJvdXRlci12aWV3PlxuICAgICAgICAgICAgLy8gd2hlbiAvdXNlci86aWQvcG9zdHMgaXMgbWF0Y2hlZFxuICAgICAgICAgICAgbmFtZTogJ2VkaXQtYWNjb3VudCcsXG4gICAgICAgICAgICBwYXRoOiAnZWRpdC1hY2NvdW50JyxcbiAgICAgICAgICAgIGNvbXBvbmVudDogRWRpdEFjY291bnRcbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH1cbiAgICBdXG4gIH0pXG59XG5cbmV4cG9ydCBkZWZhdWx0IFJvdXRlcjtcbiIsImltcG9ydCBWdWUgZnJvbSAndnVlJ1xuaW1wb3J0IFZ1ZVJvdXRlciBmcm9tICd2dWUtcm91dGVyJ1xuXG4vLyBWaWV3c1xuaW1wb3J0IFdhcnJhbnR5UmVnaXN0cmF0aW9ucyBmcm9tICcuLi8uLi8uLi9jb21wb25lbnRzL3ZpZXctd2FycmFudHktcmVnaXN0cmF0aW9ucy52dWUnO1xuaW1wb3J0IFdhcnJhbnR5UmVnaXN0cmF0aW9uIGZyb20gJy4uLy4uLy4uL2NvbXBvbmVudHMvdmlldy13YXJyYW50eS1yZWdpc3RyYXRpb24udnVlJztcblxuVnVlLnVzZShWdWVSb3V0ZXIpXG5cbmNvbnN0IFJvdXRlciA9IChvcHRpb25zKSA9PiB7XG4gIGNvbnN0IHJvdXRlcyA9IFtcbiAgICB7IHBhdGg6ICcvJywgbmFtZTogJ3dhcnJhbnR5LXJlZ2lzdHJhdGlvbnMnLCBjb21wb25lbnQ6IFdhcnJhbnR5UmVnaXN0cmF0aW9ucyB9LFxuICAgIHsgcGF0aDogJy86aWQnLCBuYW1lOiAnd2FycmFudHktcmVnaXN0cmF0aW9uJywgY29tcG9uZW50OiBXYXJyYW50eVJlZ2lzdHJhdGlvbiB9XG4gIF07XG5cbiAgY29uc3Qgcm91dGVyID0gIG5ldyBWdWVSb3V0ZXIoe1xuICAgIG1vZGU6ICdoaXN0b3J5JyxcbiAgICBiYXNlOiBvcHRpb25zLmJhc2UsXG4gICAgbGlua0FjdGl2ZUNsYXNzOiAndi1yb3V0ZXItbGlua19fYWN0aXZlJyxcbiAgICBsaW5rRXhhY3RBY3RpdmVDbGFzczogJ3Ytcm91dGVyLWxpbmtfX2N1cnJlbnQnLFxuICAgIHJvdXRlczogcm91dGVzXG4gIH0pO1xuXG4gIHJldHVybiByb3V0ZXI7XG59XG5cbmV4cG9ydCBkZWZhdWx0IFJvdXRlcjtcbiIsIjx0ZW1wbGF0ZT5cbiAgPGRpdj5cbiAgICA8bW9kYWwgOm5hbWU9XCJtb2RhbE5hbWVcIiA6Y2xpY2stdG8tY2xvc2U9XCJ0cnVlXCIgOmhlaWdodD1cIidhdXRvJ1wiIDpzY3JvbGxhYmxlPVwidHJ1ZVwiPlxuICAgICAgPHYtbW9kYWwtY29udGVudCB2LW9uOmNsb3NlPVwiY2xvc2VcIiA6dGl0bGU9XCJtb2RhbE1vZGUgPT09ICdhZGQnID8gbG9jKCdhZGRDb21wYW55JykgOiBsb2MoJ2VkaXRDb21wYW55JykgXCI+XG4gICAgICAgIDx2LWZvcm0gOmZpZWxkcz1cImZpZWxkc1wiIDpmb3JtLWRhdGE9XCJmb3JtRGF0YVwiIDpmb3JtLWVycm9ycz1cImZvcm1FcnJvcnNcIj5cbiAgICAgICAgICA8ZGl2IHNsb3Q9XCJidXR0b25zXCIgY2xhc3M9XCJ2LWZvcm0tYnV0dG9uLWRpdlwiPlxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tLWNhbmNlbFwiIHR5cGU9XCJidXR0b25cIiB2LW9uOmNsaWNrPVwiY2xvc2VcIj57e2xvYygnY2FuY2VsJyl9fTwvYnV0dG9uPlxuICAgICAgICAgICAgPGJ1dHRvbiB2LWlmPVwibW9kYWxNb2RlID09PSAnYWRkJ1wiIHR5cGU9XCJzdWJtaXRcIiB2LW9uOmNsaWNrPVwiYWRkQ29tcGFueVwiIGNsYXNzPVwiYnRuIGJ0bi0td2hpdGVcIj57e2xvYygnYWRkQ29tcGFueScpfX08L2J1dHRvbj5cbiAgICAgICAgICAgIDxidXR0b24gdi1pZj1cIm1vZGFsTW9kZSA9PT0gJ2VkaXQnXCIgdHlwZT1cInN1Ym1pdFwiIHYtb246Y2xpY2s9XCJ1cGRhdGVDb21wYW55XCIgY2xhc3M9XCJidG4gYnRuLS13aGl0ZVwiPnt7bG9jKCd1cGRhdGVDb21wYW55Jyl9fTwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L3YtZm9ybT5cbiAgICAgIDwvdi1tb2RhbC1jb250ZW50PlxuICAgIDwvbW9kYWw+XG4gIDwvZGl2PlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cblxuaW1wb3J0IFZNb2RhbENvbnRlbnQgZnJvbSAnLi92LW1vZGFsLWNvbnRlbnQudnVlJztcbmltcG9ydCBWRm9ybSBmcm9tICcuL3YtZm9ybS52dWUnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGNvbXBvbmVudHM6IHtcbiAgICAndi1tb2RhbC1jb250ZW50JzogVk1vZGFsQ29udGVudCxcbiAgICAndi1mb3JtJzogVkZvcm1cbiAgfSxcbiAgbmFtZTogJ01vZGFsQ29tcGFueScsXG4gIHByb3BzOiBbJ29uLWNsb3NlJywgJ21vZGFsLW1vZGUnLCAnbW9kYWwtZGF0YSddLFxuICBkYXRhOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZm9ybUVycm9yczoge30sXG4gICAgICBmb3JtRGF0YToge30sXG4gICAgICBkYXRhOiB7fSxcbiAgICAgIG5hbWU6ICdjb21wYW55J1xuICAgIH1cbiAgfSxcbiAgY29tcHV0ZWQ6IHtcbiAgICBmaWVsZHMoKSB7XG4gICAgICAvLyBSZWZyZXNoIHdoZW4gY291bnRyaWVzIGxvYWRcbiAgICAgIGlmKHRoaXMuJHN0b3JlLmdldHRlcnMuY291bnRyeVNlbGVjdE9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RmllbGRzKCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBjYW5FZGl0Q3VzdG9tZXJOdW1iZXIoKSB7XG4gICAgICBzd2l0Y2godGhpcy5kYXRhLnR5cGUpIHtcbiAgICAgICAgY2FzZSAncmV0YWlsZXInOlxuICAgICAgICAgIHJldHVybiB0aGlzLiR1c2VyUmlnaHRzLmhhc1JpZ2h0KCB3aW5kb3cuUklHSFRTLkVESVRfQ1VTVE9NRVJfTlVNQkVSLCB0aGlzLiRzdG9yZS5zdGF0ZS51c2VyLnJvbGUgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnaW1wb3J0ZXInOlxuICAgICAgICAgIHJldHVybiB0aGlzLiR1c2VyUmlnaHRzLmhhc1JpZ2h0KCB3aW5kb3cuUklHSFRTLkVESVRfQU5ZX0NVU1RPTUVSX05VTUJFUiwgdGhpcy4kc3RvcmUuc3RhdGUudXNlci5yb2xlICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICB9LFxuICAgIG1vZGFsTmFtZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLm5hbWUgKyAnLScgKyB0aGlzLm1vZGFsTW9kZTtcbiAgICB9XG4gIH0sXG4gIG1ldGhvZHM6IHtcbiAgICBpbmNyZWFzZVNob3dDb3VudCgpIHtcbiAgICAgIHRoaXMuc2hvd0NvdW50Kys7XG4gICAgfSxcbiAgICBhcHBseU1vZGFsRGF0YSgpIHtcbiAgICAgIHRoaXMuZm9ybUVycm9ycyA9IHt9O1xuICAgICAgdGhpcy5mb3JtRGF0YSA9IHt9O1xuICAgICAgdGhpcy5kYXRhID0ge307XG5cbiAgICAgIGlmKHRoaXMuJHByb3BzLm1vZGFsRGF0YSkge1xuICAgICAgICBPYmplY3Qua2V5cyh0aGlzLiRwcm9wcy5tb2RhbERhdGEpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICB0aGlzLmRhdGFba2V5XSA9IHRoaXMuJHByb3BzLm1vZGFsRGF0YVtrZXldO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5pbmNyZWFzZVNob3dDb3VudCgpO1xuICAgIH0sXG4gICAgZ2V0RmllbGRzKCkge1xuICAgICAgLy8gUmVmcmVzaCBkYXRhIHdoZW4gc2hvd0NvdW50IGlzIGluY3JlYXNlZFxuICAgICAgdGhpcy5zaG93Q291bnQ7XG5cbiAgICAgIC8vIEluaXRpYWxpemUgZm9ybSBkZXBlbmRpbmcgb24gbW9kYWwgbW9kZVxuICAgICAgaWYodGhpcy4kcHJvcHMubW9kYWxNb2RlID09PSAnYWRkJykge1xuXG4gICAgICAgIHJldHVybiBbe1xuICAgICAgICAgIG5hbWU6ICduYW1lJyxcbiAgICAgICAgICB2YWx1ZTogJycsXG4gICAgICAgICAgbGFiZWw6IHRoaXMubG9jKCduYW1lJyksXG4gICAgICAgICAgdHlwZTogJ3RleHQnXG4gICAgICAgIH0sIHtcbiAgICAgICAgICBuYW1lOiAndHlwZScsXG4gICAgICAgICAgdmFsdWU6ICdyZXRhaWxlcicsXG4gICAgICAgICAgdHlwZTogJ2hpZGRlbidcbiAgICAgICAgfSwge1xuICAgICAgICAgIG5hbWU6ICdjdXN0b21lck51bWJlcicsXG4gICAgICAgICAgdmFsdWU6ICcnLFxuICAgICAgICAgIGxhYmVsOiB0aGlzLmxvYygnY3VzdG9tZXJOdW1iZXInKSxcbiAgICAgICAgICB0eXBlOiB0aGlzLmNhbkVkaXRDdXN0b21lck51bWJlciA/ICd0ZXh0JyA6ICdoaWRkZW4nXG4gICAgICAgIH0sIHtcbiAgICAgICAgICBuYW1lOiAnYnVzaW5lc3NJZCcsXG4gICAgICAgICAgdmFsdWU6ICcnLFxuICAgICAgICAgIGxhYmVsOiB0aGlzLmxvYygnYnVzaW5lc3NJZCcpLFxuICAgICAgICAgIHR5cGU6ICd0ZXh0J1xuICAgICAgICB9LCB7XG4gICAgICAgICAgbmFtZTogJ2FkZHJlc3MnLFxuICAgICAgICAgIHZhbHVlOiAnJyxcbiAgICAgICAgICBsYWJlbDogdGhpcy5sb2MoJ2FkZHJlc3MnKSxcbiAgICAgICAgICB0eXBlOiAndGV4dCdcbiAgICAgICAgfSwge1xuICAgICAgICAgIG5hbWU6ICdwb3N0YWxDb2RlJyxcbiAgICAgICAgICB2YWx1ZTogJycsXG4gICAgICAgICAgbGFiZWw6IHRoaXMubG9jKCdwb3N0YWxDb2RlJyksXG4gICAgICAgICAgdHlwZTogJ3RleHQnXG4gICAgICAgIH0sIHtcbiAgICAgICAgICBuYW1lOiAncG9zdE9mZmljZScsXG4gICAgICAgICAgdmFsdWU6ICcnLFxuICAgICAgICAgIGxhYmVsOiB0aGlzLmxvYygncG9zdE9mZmljZScpLFxuICAgICAgICAgIHR5cGU6ICd0ZXh0J1xuICAgICAgICB9LCB7XG4gICAgICAgICAgbmFtZTogJ2NvdW50cnknLFxuICAgICAgICAgIHZhbHVlOiB0aGlzLiRzdG9yZS5zdGF0ZS51c2VyLmluZm8uY291bnRyeSAmJiB0aGlzLiRzdG9yZS5zdGF0ZS51c2VyLmluZm8uY291bnRyeS5jb3VudHJ5Q29kZSB8fCAnJywgLy8gVXNlciBjdXJyZW50IHVzZXIgY291bnRyeSBhcyBhIGRlZmF1bHRcbiAgICAgICAgICBsYWJlbDogdGhpcy5sb2MoJ2NvdW50cnknKSxcbiAgICAgICAgICBvcHRpb25zOiB0aGlzLiRzdG9yZS5nZXR0ZXJzLmNvdW50cnlTZWxlY3RPcHRpb25zLFxuICAgICAgICAgIHR5cGU6ICdzZWxlY3QnXG4gICAgICAgIH1dXG4gICAgICB9IGVsc2UgaWYodGhpcy4kcHJvcHMubW9kYWxNb2RlID09PSAnZWRpdCcpIHtcbiAgICAgICAgdGhpcy5zaG93Q291bnRcbiAgICAgICAgcmV0dXJuIFt7XG4gICAgICAgICAgbmFtZTogJ25hbWUnLFxuICAgICAgICAgIHZhbHVlOiB0aGlzLmRhdGEubmFtZSxcbiAgICAgICAgICBsYWJlbDogdGhpcy5sb2MoJ25hbWUnKSxcbiAgICAgICAgICB0eXBlOiAndGV4dCdcbiAgICAgICAgfSwge1xuICAgICAgICAgIG5hbWU6ICd0eXBlJyxcbiAgICAgICAgICB2YWx1ZTogdGhpcy5kYXRhLnR5cGUsXG4gICAgICAgICAgdHlwZTogJ2hpZGRlbidcbiAgICAgICAgfSwge1xuICAgICAgICAgIG5hbWU6ICdpZCcsXG4gICAgICAgICAgdmFsdWU6IHRoaXMuZGF0YS5pZCxcbiAgICAgICAgICB0eXBlOiAnaGlkZGVuJ1xuICAgICAgICB9LCB7XG4gICAgICAgICAgbmFtZTogJ2N1c3RvbWVyTnVtYmVyJyxcbiAgICAgICAgICB2YWx1ZTogdGhpcy5kYXRhLmN1c3RvbWVyTnVtYmVyLFxuICAgICAgICAgIGxhYmVsOiB0aGlzLmxvYygnY3VzdG9tZXJOdW1iZXInKSxcbiAgICAgICAgICB0eXBlOiB0aGlzLmNhbkVkaXRDdXN0b21lck51bWJlciA/ICd0ZXh0JyA6ICdoaWRkZW4nXG4gICAgICAgIH0sIHtcbiAgICAgICAgICBuYW1lOiAnYnVzaW5lc3NJZCcsXG4gICAgICAgICAgdmFsdWU6IHRoaXMuZGF0YS5idXNpbmVzc0lkLFxuICAgICAgICAgIGxhYmVsOiB0aGlzLmxvYygnYnVzaW5lc3NJZCcpLFxuICAgICAgICAgIHR5cGU6ICd0ZXh0J1xuICAgICAgICB9LCB7XG4gICAgICAgICAgbmFtZTogJ2FkZHJlc3MnLFxuICAgICAgICAgIHZhbHVlOiB0aGlzLmRhdGEuYWRkcmVzcyxcbiAgICAgICAgICBsYWJlbDogdGhpcy5sb2MoJ2FkZHJlc3MnKSxcbiAgICAgICAgICB0eXBlOiAndGV4dCdcbiAgICAgICAgfSwge1xuICAgICAgICAgIG5hbWU6ICdwb3N0YWxDb2RlJyxcbiAgICAgICAgICB2YWx1ZTogdGhpcy5kYXRhLnBvc3RhbENvZGUsXG4gICAgICAgICAgbGFiZWw6IHRoaXMubG9jKCdwb3N0YWxDb2RlJyksXG4gICAgICAgICAgdHlwZTogJ3RleHQnXG4gICAgICAgIH0sIHtcbiAgICAgICAgICBuYW1lOiAncG9zdE9mZmljZScsXG4gICAgICAgICAgdmFsdWU6IHRoaXMuZGF0YS5wb3N0T2ZmaWNlLFxuICAgICAgICAgIGxhYmVsOiB0aGlzLmxvYygncG9zdE9mZmljZScpLFxuICAgICAgICAgIHR5cGU6ICd0ZXh0J1xuICAgICAgICB9LCB7XG4gICAgICAgICAgbmFtZTogJ2NvdW50cnknLFxuICAgICAgICAgIHZhbHVlOiB0aGlzLmRhdGEuY291bnRyeSAmJiB0aGlzLmRhdGEuY291bnRyeS5jb3VudHJ5Q29kZSB8fCAnJyxcbiAgICAgICAgICBsYWJlbDogdGhpcy5sb2MoJ2NvdW50cnknKSxcbiAgICAgICAgICBvcHRpb25zOiB0aGlzLiRzdG9yZS5nZXR0ZXJzLmNvdW50cnlTZWxlY3RPcHRpb25zLFxuICAgICAgICAgIHR5cGU6ICdzZWxlY3QnXG4gICAgICAgIH1dO1xuICAgICAgfVxuICAgIH0sXG4gICAgc2hvdygpIHtcbiAgICAgIHRoaXMuJHN0b3JlLmRpc3BhdGNoKCdnZXRDb3VudHJpZXMnKTtcbiAgICAgIHRoaXMuYXBwbHlNb2RhbERhdGEoKTtcbiAgICAgIHRoaXMuJG1vZGFsLnNob3codGhpcy5tb2RhbE5hbWUpO1xuICAgIH0sXG4gICAgY2xvc2UoZGF0YSkge1xuICAgICAgaWYodGhpcy5vbkNsb3NlKSB7XG4gICAgICAgIGlmKCFkYXRhKSB7XG4gICAgICAgICAgZGF0YSA9IHtcbiAgICAgICAgICAgIHN0YXR1czogJ2NhbmNlbCdcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHRoaXMub25DbG9zZShkYXRhKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuJG1vZGFsLmhpZGUodGhpcy5tb2RhbE5hbWUpO1xuICAgIH0sXG4gICAgYWRkQ29tcGFueSgpIHtcbiAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgICAgcmV0dXJuIHRoaXMuJGFwaS5hZGRDb21wYW55KHRoaXMuZm9ybURhdGEpLnRoZW4ocmVzID0+IHtcblxuICAgICAgICAvLyBFcnJvcnMgaW4gZm9ybVxuICAgICAgICBpZihyZXMuY29kZSA9PT0gNDAwKSB7XG4gICAgICAgICAgdGhpcy5mb3JtRXJyb3JzID0gcmVzLnJlc3VsdC5maWVsZHM7XG4gICAgICAgIH1cblxuICAgICAgICBpZihyZXMuY29kZSA9PT0gMjAwKSB7XG4gICAgICAgICAgc2VsZi4kc3RvcmUuY29tbWl0KCdhZGRDb21wYW55JywgcmVzLnJlc3VsdC5jb21wYW55KTtcbiAgICAgICAgICBzZWxmLmNsb3NlKHtzdGF0dXM6ICdzdWNjZXNzJ30pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9LFxuICAgIHVwZGF0ZUNvbXBhbnkoKSB7XG4gICAgICBjb25zdCBzZWxmID0gdGhpcztcblxuICAgICAgcmV0dXJuIHRoaXMuJGFwaS51cGRhdGVDb21wYW55KHRoaXMuZm9ybURhdGEuaWQsIHRoaXMuZm9ybURhdGEpLnRoZW4ocmVzID0+IHtcblxuICAgICAgICAvLyBFcnJvcnMgaW4gZm9ybVxuICAgICAgICBpZihyZXMuY29kZSA9PT0gNDAwKSB7XG4gICAgICAgICAgdGhpcy5mb3JtRXJyb3JzID0gcmVzLnJlc3VsdC5maWVsZHM7XG4gICAgICAgIH1cblxuICAgICAgICBpZihyZXMuY29kZSA9PT0gMjAwKSB7XG4gICAgICAgICAgc2VsZi4kc3RvcmUuY29tbWl0KCd1cGRhdGVDb21wYW55JywgcmVzLnJlc3VsdC5jb21wYW55KTtcbiAgICAgICAgICBzZWxmLmNsb3NlKHtzdGF0dXM6ICdzdWNjZXNzJ30pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIHdhdGNoOiB7XG4gICAgbW9kYWxEYXRhKCkge1xuICAgICAgdGhpcy5hcHBseU1vZGFsRGF0YSgpO1xuICAgIH1cbiAgfVxufVxuPC9zY3JpcHQ+XG4iLCI8dGVtcGxhdGU+XG4gIDxtb2RhbCA6bmFtZT1cIm1vZGFsTmFtZVwiIDpjbGljay10by1jbG9zZT1cInRydWVcIiA6aGVpZ2h0PVwiJ2F1dG8nXCIgOnNjcm9sbGFibGU9XCJ0cnVlXCI+XG4gICAgPHYtbW9kYWwtY29udGVudCB2LW9uOmNsb3NlPVwiY2xvc2VcIiA6dGl0bGU9XCJtb2RhbE1vZGUgPT09ICdhZGQnID8gbG9jKCdhZGRDb21wbGFpbnQnKSA6IGxvYygnZWRpdENvbXBsYWludCcpIFwiPlxuICAgICAgPCEtLSA8cCBjbGFzcz1cImluZ3Jlc3NcIj57e2xvYygnZm9ybXMubWVzc2FnZXMud2FycmFudHlSZXF1aXJlZCcpfX08L3A+IC0tPlxuICAgICAgPHYtY29tcGxhaW50LXVzZXItaW5mbyA6dXNlci1kYXRhPVwidXNlclwiIDpjb21wYW55LWRhdGE9XCJjb21wYW55XCIgPjwvdi1jb21wbGFpbnQtdXNlci1pbmZvPlxuICAgICAgPHYtZm9ybSA6ZmllbGRzPVwiZmllbGRzXCIgOmZvcm0tZGF0YT1cImZvcm1EYXRhXCIgOmZvcm0tZXJyb3JzPVwiZm9ybUVycm9yc1wiIDpvbi1ibHVyPVwib25GaWVsZEJsdXJcIj5cbiAgICAgICAgPGRpdiBzbG90PVwiYnV0dG9uc1wiPlxuICAgICAgICAgIDxwIHYtaWY9XCJ1cGxvYWRpbmdGaWxlXCI+e3tsb2MoJ3VwbG9hZGluZ0ZpbGUnKX19OiB7e3VwbG9hZGluZ0ZpbGV9fSAvIHt7dG90YWxGaWxlc319PC9wPlxuICAgICAgICAgIDxwIHYtZWxzZT4mbmJzcDs8L3A+XG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tLWNhbmNlbFwiIHR5cGU9XCJidXR0b25cIiB2LW9uOmNsaWNrPVwiY2xvc2VcIj57e2xvYygnY2FuY2VsJyl9fTwvYnV0dG9uPlxuICAgICAgICAgIDxidXR0b24gOmRpc2FibGVkPVwicHJvY2Vzc2luZ1wiIHYtaWY9XCJtb2RhbE1vZGUgPT09ICdhZGQnXCIgdHlwZT1cInN1Ym1pdFwiIHYtb246Y2xpY2s9XCJhZGRDb21wbGFpbnRcIiBjbGFzcz1cImJ0biBidG4tLXdoaXRlXCI+e3tsb2MoJ2FkZENvbXBsYWludCcpfX08L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L3YtZm9ybT5cbiAgICA8L3YtbW9kYWwtY29udGVudD5cbiAgPC9tb2RhbD5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5cbmltcG9ydCBWTW9kYWxDb250ZW50IGZyb20gJy4vdi1tb2RhbC1jb250ZW50LnZ1ZSc7XG5pbXBvcnQgVkNvbXBsYWludFVzZXJJbmZvIGZyb20gJy4vdi1jb21wbGFpbnQtdXNlci1pbmZvLnZ1ZSc7XG5pbXBvcnQgVkZvcm0gZnJvbSAnLi92LWZvcm0udnVlJztcbmltcG9ydCBkYXRhbGF5ZXJBY3Rpb25zIGZyb20gJy4uLy4uL2FuYWx5dGljcy1hY3Rpb25zJztcblxuZXhwb3J0IGRlZmF1bHQge1xuICBjb21wb25lbnRzOiB7XG4gICAgJ3YtbW9kYWwtY29udGVudCc6IFZNb2RhbENvbnRlbnQsXG4gICAgJ3YtY29tcGxhaW50LXVzZXItaW5mbyc6IFZDb21wbGFpbnRVc2VySW5mbyxcbiAgICAndi1mb3JtJzogVkZvcm1cbiAgfSxcbiAgbmFtZTogJ01vZGFsQ29tcGxhaW50JyxcbiAgcHJvcHM6IFsnb24tY2xvc2UnLCAnbW9kYWwtbW9kZScsICdtb2RhbC1kYXRhJ10sXG4gIGRhdGE6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB7XG4gICAgICBmb3JtRXJyb3JzOiB7fSxcbiAgICAgIGZvcm1EYXRhOiB7fSxcbiAgICAgIGRhdGE6IHt9LFxuICAgICAgbmFtZTogJ2NvbXBsYWludCcsXG4gICAgICB0b3RhbEZpbGVzOiAwLFxuICAgICAgdXBsb2FkaW5nRmlsZTogMCxcbiAgICAgIHByb2Nlc3Npbmc6IGZhbHNlLFxuICAgICAgZmV0Y2hlZE1hY2hpbmVOYW1lOiAnJyxcbiAgICAgIGZldGNoZWREZXNjcmlwdGlvbjogJycsXG4gICAgICBmZXRjaGVkUHJvY2VkdXJlOiAnJ1xuICAgIH1cbiAgfSxcbiAgY29tcHV0ZWQ6IHtcbiAgICB1c2VyKCkge1xuICAgICAgcmV0dXJuIHRoaXMuJHN0b3JlLnN0YXRlLnVzZXIuaW5mbztcbiAgICB9LFxuICAgIGNvbXBhbnkoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kc3RvcmUuc3RhdGUudXNlci5jb21wYW55O1xuICAgIH0sXG4gICAgZmllbGRzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0RmllbGRzKCk7XG4gICAgfSxcbiAgICBtb2RhbE5hbWUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5uYW1lICsgJy0nICsgdGhpcy5tb2RhbE1vZGU7XG4gICAgfVxuICB9LFxuICBtZXRob2RzOiB7XG4gICAgb25GaWVsZEJsdXIoZGF0YSkge1xuICAgICAgaWYoZGF0YS5uYW1lID09ICdzZXJpYWxOdW1iZXInKSB7XG4gICAgICAgIGlmKHRoaXMuZm9ybURhdGEuc2VyaWFsTnVtYmVyKSB7XG4gICAgICAgICAgLy8gdGhpcy5jaGVja1dhcnJhbnR5UmVnaXN0cmF0aW9uKHRoaXMuZm9ybURhdGEuc2VyaWFsTnVtYmVyKVxuICAgICAgICAgIHRoaXMuZ2V0TWFjaGluZU5hbWUodGhpcy5mb3JtRGF0YS5zZXJpYWxOdW1iZXIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBjaGVja1dhcnJhbnR5UmVnaXN0cmF0aW9uKHNlcmlhbE51bWJlcikge1xuICAgICAgdGhpcy5mb3JtRXJyb3JzID0ge307XG4gICAgICBjb25zdCBhbGxvd2VkU2VyaWFsTnVtYmVycyA9IHRoaXMuJHN0b3JlLnN0YXRlLndhcnJhbnRlZFNlcmlhbE51bWJlcnM7XG4gICAgICBpZiAoIWFsbG93ZWRTZXJpYWxOdW1iZXJzLmluY2x1ZGVzKHNlcmlhbE51bWJlcikpIHtcbiAgICAgICAgdGhpcy5mb3JtRXJyb3JzID0ge1xuICAgICAgICAgIGZpZWxkRXJyb3I6IHRydWUsXG4gICAgICAgICAgc2VyaWFsTnVtYmVyOiAge1xuICAgICAgICAgICAgZmllbGQ6ICdzZXJpYWxOdW1iZXInLFxuICAgICAgICAgICAgbWVzc2FnZXM6IFt0aGlzLmxvYygnZm9ybXMubWVzc2FnZXMubm90V2FycmFudGVkU2VyaWFsTnVtYmVyJyldXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBpbmNyZWFzZVNob3dDb3VudCgpIHtcbiAgICAgIHRoaXMuc2hvd0NvdW50Kys7XG4gICAgfSxcbiAgICBhcHBseU1vZGFsRGF0YSgpIHtcbiAgICAgIHRoaXMuZm9ybUVycm9ycyA9IHt9O1xuICAgICAgdGhpcy5mb3JtRGF0YSA9IHt9O1xuICAgICAgdGhpcy5kYXRhID0ge307XG4gICAgICB0aGlzLmZldGNoZWRNYWNoaW5lTmFtZSA9ICcnO1xuXG4gICAgICBpZih0aGlzLiRwcm9wcy5tb2RhbERhdGEpIHtcbiAgICAgICAgT2JqZWN0LmtleXModGhpcy4kcHJvcHMubW9kYWxEYXRhKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgdGhpcy5kYXRhW2tleV0gPSB0aGlzLiRwcm9wcy5tb2RhbERhdGFba2V5XTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuaW5jcmVhc2VTaG93Q291bnQoKTtcbiAgICB9LFxuICAgIGdldEZpZWxkcygpIHtcbiAgICAgIC8vIEluaXRpYWxpemUgZm9ybSBkZXBlbmRpbmcgb24gbW9kYWwgbW9kZVxuICAgICAgaWYodGhpcy4kcHJvcHMubW9kYWxNb2RlID09PSAnYWRkJykge1xuICAgICAgICByZXR1cm4gW3tcbiAgICAgICAgICBuYW1lOiAnc2VyaWFsTnVtYmVyJyxcbiAgICAgICAgICB2YWx1ZTogdGhpcy5kYXRhLnNlcmlhbE51bWJlcixcbiAgICAgICAgICBsYWJlbDogdGhpcy5sb2MoJ3NlcmlhbE51bWJlcicpLFxuICAgICAgICAgIHR5cGU6ICd0ZXh0J1xuICAgICAgICB9LCB7XG4gICAgICAgICAgbmFtZTogJ25hbWUnLFxuICAgICAgICAgIHZhbHVlOiB0aGlzLmRhdGEubmFtZSB8fCB0aGlzLmZldGNoZWRNYWNoaW5lTmFtZSxcbiAgICAgICAgICBsYWJlbDogdGhpcy5sb2MoJ25hbWUnKSxcbiAgICAgICAgICB0eXBlOiAndGV4dCdcbiAgICAgICAgfSwge1xuICAgICAgICAgIG5hbWU6ICdyZWZlcmVuY2VJZCcsXG4gICAgICAgICAgdmFsdWU6IHRoaXMuZGF0YS5yZWZlcmVuY2VJZCxcbiAgICAgICAgICBsYWJlbDogdGhpcy5sb2MoJ2Zvcm1zLmxhYmVscy5jb21wbGFpbnRSZWZlcmVuY2UnKSxcbiAgICAgICAgICB0eXBlOiAndGV4dCdcbiAgICAgICAgfSwge1xuICAgICAgICAgIG5hbWU6ICdkZXNjcmlwdGlvbicsXG4gICAgICAgICAgdmFsdWU6IHRoaXMuZGF0YS5kZXNjcmlwdGlvbiB8fCB0aGlzLmZldGNoZWREZXNjcmlwdGlvbixcbiAgICAgICAgICBwbGFjZWhvbGRlcjogdGhpcy5sb2MoJ2Zvcm1zLnBsYWNlaG9sZGVycy5jb21wbGFpbnREZXNjcmlwdGlvbicpLFxuICAgICAgICAgIGxhYmVsOiB0aGlzLmxvYygnZm9ybXMubGFiZWxzLmNvbXBsYWludERlc2NyaXB0aW9uJyksXG4gICAgICAgICAgdHlwZTogJ3RleHRhcmVhJ1xuICAgICAgICB9LCB7XG4gICAgICAgICAgbmFtZTogJ2Rlc2NyaXB0aW9uRGF0ZScsXG4gICAgICAgICAgdmFsdWU6IHRoaXMuZGF0YS5kZXNjcmlwdGlvbkRhdGUsXG4gICAgICAgICAgbGFiZWw6IHRoaXMubG9jKCdmb3Jtcy5sYWJlbHMuY29tcGxhaW50RGVzY3JpcHRpb25EYXRlJyksXG4gICAgICAgICAgdHlwZTogJ2RhdGUnXG4gICAgICAgIH0sIHtcbiAgICAgICAgICBuYW1lOiAncHJvY2VkdXJlJyxcbiAgICAgICAgICB2YWx1ZTogdGhpcy5kYXRhLnByb2NlZHVyZSB8fCB0aGlzLmZldGNoZWRQcm9jZWR1cmUsXG4gICAgICAgICAgLy9wbGFjZWhvbGRlcjogdGhpcy5sb2MoJ2Zvcm1zLnBsYWNlaG9sZGVycy5jb21wbGFpbnRQcm9jZWR1cmUnKSxcbiAgICAgICAgICBsYWJlbDogdGhpcy5sb2MoJ2Zvcm1zLmxhYmVscy5jb21wbGFpbnRQcm9jZWR1cmUnKSxcbiAgICAgICAgICB0eXBlOiAndGV4dGFyZWEnXG4gICAgICAgIH0sIHtcbiAgICAgICAgICBuYW1lOiAncHJvY2VkdXJlRGF0ZScsXG4gICAgICAgICAgdmFsdWU6IHRoaXMuZGF0YS5wcm9jZWR1cmVEYXRlLFxuICAgICAgICAgIGxhYmVsOiB0aGlzLmxvYygnZm9ybXMubGFiZWxzLmNvbXBsYWludFByb2NlZHVyZURhdGUnKSxcbiAgICAgICAgICB0eXBlOiAnZGF0ZSdcbiAgICAgICAgfSwge1xuICAgICAgICAgIG5hbWU6ICdhY2Nlc3NvcmllcycsXG4gICAgICAgICAgbGFiZWw6IHRoaXMubG9jKCdmb3Jtcy5sYWJlbHMuY29tcGxhaW50QWNjZXNzb3JpZXMnKSxcbiAgICAgICAgICB0eXBlOiAnZGF0YS1pdGVtcycsXG4gICAgICAgICAgc3VtRmllbGQ6ICdwcmljZScsXG4gICAgICAgICAgbXVsdGlwbHlGaWVsZDogJ2Ftb3VudCcsXG4gICAgICAgICAgaGlkZUVtcHR5OiB0cnVlLFxuICAgICAgICAgIHZhbHVlOiBbXSxcbiAgICAgICAgICBmaWVsZHM6IFt7XG4gICAgICAgICAgICBsYWJlbDogdGhpcy5sb2MoJ2NvbXBsYWludEFjY2Vzc29yaWVzLm5hbWUnKSxcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyOiB0aGlzLmxvYygnY29tcGxhaW50QWNjZXNzb3JpZXMubmFtZScpLFxuICAgICAgICAgICAgdHlwZTogJ3RleHQnLFxuICAgICAgICAgICAgbmFtZTogJ25hbWUnXG4gICAgICAgICAgfSwge1xuICAgICAgICAgICAgbGFiZWw6IHRoaXMubG9jKCdjb21wbGFpbnRBY2Nlc3Nvcmllcy5pZCcpLFxuICAgICAgICAgICAgcGxhY2Vob2xkZXI6IHRoaXMubG9jKCdjb21wbGFpbnRBY2Nlc3Nvcmllcy5pZCcpLFxuICAgICAgICAgICAgdHlwZTogJ3RleHQnLFxuICAgICAgICAgICAgbmFtZTogJ2lkJ1xuICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgIGxhYmVsOiB0aGlzLmxvYygnY29tcGxhaW50QWNjZXNzb3JpZXMuYW1vdW50JyksXG4gICAgICAgICAgICBwbGFjZWhvbGRlcjogdGhpcy5sb2MoJ2NvbXBsYWludEFjY2Vzc29yaWVzLmFtb3VudCcpLFxuICAgICAgICAgICAgdHlwZTogJ251bWJlcicsXG4gICAgICAgICAgICBuYW1lOiAnYW1vdW50J1xuICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgIGxhYmVsOiB0aGlzLmxvYygnY29tcGxhaW50QWNjZXNzb3JpZXMucHJpY2UnKSxcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyOiB0aGlzLmxvYygnY29tcGxhaW50QWNjZXNzb3JpZXMucHJpY2UnKSxcbiAgICAgICAgICAgIHR5cGU6ICdjdXJyZW5jeScsXG4gICAgICAgICAgICBuYW1lOiAncHJpY2UnXG4gICAgICAgICAgfV1cbiAgICAgICAgfSwge1xuICAgICAgICAgIG5hbWU6ICdzZXJ2aWNlcycsXG4gICAgICAgICAgbGFiZWw6IHRoaXMubG9jKCdmb3Jtcy5sYWJlbHMuY29tcGxhaW50Sm9icycpLFxuICAgICAgICAgIHR5cGU6ICdkYXRhLWl0ZW1zJyxcbiAgICAgICAgICBzdW1GaWVsZDogJ3ByaWNlJyxcbiAgICAgICAgICBtdWx0aXBseUZpZWxkOiAnaG91cnMnLFxuICAgICAgICAgIGhpZGVFbXB0eTogdHJ1ZSxcbiAgICAgICAgICB2YWx1ZTogW10sXG4gICAgICAgICAgZmllbGRzOiBbe1xuICAgICAgICAgICAgbGFiZWw6IHRoaXMubG9jKCdjb21wbGFpbnRTZXJ2aWNlcy5uYW1lJyksXG4gICAgICAgICAgICBwbGFjZWhvbGRlcjogdGhpcy5sb2MoJ2NvbXBsYWludFNlcnZpY2VzLm5hbWUnKSxcbiAgICAgICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgICAgICAgIG5hbWU6ICduYW1lJ1xuICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgIGxhYmVsOiB0aGlzLmxvYygnY29tcGxhaW50U2VydmljZXMuaG91cnMnKSxcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyOiB0aGlzLmxvYygnY29tcGxhaW50U2VydmljZXMuaG91cnMnKSxcbiAgICAgICAgICAgIHR5cGU6ICdudW1iZXInLFxuICAgICAgICAgICAgbmFtZTogJ2hvdXJzJ1xuICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgIGxhYmVsOiB0aGlzLmxvYygnY29tcGxhaW50U2VydmljZXMucHJpY2UnKSxcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyOiB0aGlzLmxvYygnY29tcGxhaW50U2VydmljZXMucHJpY2UnKSxcbiAgICAgICAgICAgIHR5cGU6ICdjdXJyZW5jeScsXG4gICAgICAgICAgICBuYW1lOiAncHJpY2UnXG4gICAgICAgICAgfV1cbiAgICAgICAgfSwge1xuICAgICAgICAgIG5hbWU6ICdmaWxlcycsXG4gICAgICAgICAgbXVsdGlwbGU6IHRydWUsXG4gICAgICAgICAgdmFsdWU6IFtdLFxuICAgICAgICAgIHR5cGU6ICdmaWxlJ1xuICAgICAgICB9XVxuICAgICAgfSBlbHNlIGlmKHRoaXMuJHByb3BzLm1vZGFsTW9kZSA9PT0gJ2VkaXQnKSB7XG4gICAgICAgIC8vIE5vdCB5ZXQgaW1wbGVtZW50ZWRcbiAgICAgIH1cbiAgICB9LFxuICAgIHNob3coKSB7XG4gICAgICB0aGlzLmFwcGx5TW9kYWxEYXRhKCk7XG4gICAgICB0aGlzLiRtb2RhbC5zaG93KHRoaXMubW9kYWxOYW1lKTtcbiAgICB9LFxuICAgIGNsb3NlKGRhdGEpIHtcbiAgICAgIGlmKHRoaXMub25DbG9zZSkge1xuICAgICAgICBpZighZGF0YSkge1xuICAgICAgICAgIGRhdGEgPSB7XG4gICAgICAgICAgICBzdGF0dXM6ICdjYW5jZWwnXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm9uQ2xvc2UoZGF0YSk7XG4gICAgICB9XG4gICAgICB0aGlzLiRtb2RhbC5oaWRlKHRoaXMubW9kYWxOYW1lKTtcbiAgICB9LFxuICAgIGFzeW5jIGdldE1hY2hpbmVOYW1lKHNlcmlhbE51bWJlcikge1xuXG4gICAgICBsZXQgZm9ybURhdGFCYWNrdXAgPSB0aGlzLmZvcm1EYXRhO1xuXG4gICAgICBsZXQgcmVzID0gYXdhaXQgdGhpcy4kYXBpLmdldEN1c3RvbWVyTWFjaGluZShzZXJpYWxOdW1iZXIpO1xuXG4gICAgICBpZihyZXMuY29kZSA9PSAyMDApIHtcbiAgICAgICAgaWYocmVzLnJlc3VsdC5oYXNPd25Qcm9wZXJ0eSgnY3VzdG9tZXJNYWNoaW5lJykpIHtcbiAgICAgICAgICB0aGlzLmZvcm1EYXRhLm5hbWUgPSByZXMucmVzdWx0LmN1c3RvbWVyTWFjaGluZS5tYWNoaW5lVHlwZTtcbiAgICAgICAgICB0aGlzLmZldGNoZWRNYWNoaW5lTmFtZSA9IHJlcy5yZXN1bHQuY3VzdG9tZXJNYWNoaW5lLm1hY2hpbmVUeXBlO1xuICAgICAgICAgIHRoaXMuZm9ybURhdGEuZGVzY3JpcHRpb24gPSBmb3JtRGF0YUJhY2t1cC5kZXNjcmlwdGlvbjtcbiAgICAgICAgICB0aGlzLmRhdGEuZGVzY3JpcHRpb24gPSB0aGlzLmZvcm1EYXRhLmRlc2NyaXB0aW9uO1xuICAgICAgICAgIHRoaXMuZGF0YS5zZXJpYWxOdW1iZXIgPSBzZXJpYWxOdW1iZXJcbiAgICAgICAgICB0aGlzLmZvcm1EYXRhLnNlcmlhbE51bWJlciA9IHNlcmlhbE51bWJlcjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZihyZXMuY29kZSA9PT0gNDAwKSB7XG4gICAgICAgIHRoaXMuZmV0Y2hlZE1hY2hpbmVOYW1lID0gJyc7XG4gICAgICAgIHRoaXMuZm9ybURhdGEubmFtZSA9ICcnO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmKHJlcy5jb2RlICE9PSAyMDApIHtcbiAgICAgICAgdGhpcy5mb3JtRGF0YS5uYW1lID0gJyc7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9LFxuICAgIGFzeW5jIGFkZENvbXBsYWludCgpIHtcbiAgICAgIHRoaXMucHJvY2Vzc2luZyA9IHRydWU7XG5cbiAgICAgIGxldCByZXMgPSBhd2FpdCB0aGlzLiRhcGkuYWRkQ29tcGxhaW50KHtcbiAgICAgICAgc2VyaWFsTnVtYmVyOiB0aGlzLmZvcm1EYXRhLnNlcmlhbE51bWJlcixcbiAgICAgICAgZGVzY3JpcHRpb246IHRoaXMuZm9ybURhdGEuZGVzY3JpcHRpb24sXG4gICAgICAgIGRlc2NyaXB0aW9uRGF0ZTogdGhpcy5mb3JtRGF0YS5kZXNjcmlwdGlvbkRhdGUsXG4gICAgICAgIHByb2NlZHVyZTogdGhpcy5mb3JtRGF0YS5wcm9jZWR1cmUsXG4gICAgICAgIHByb2NlZHVyZURhdGU6IHRoaXMuZm9ybURhdGEucHJvY2VkdXJlRGF0ZSxcbiAgICAgICAgcmVmZXJlbmNlSWQ6IHRoaXMuZm9ybURhdGEucmVmZXJlbmNlSWQsXG4gICAgICAgIGFjY2Vzc29yaWVzOiB0aGlzLmZvcm1EYXRhLmFjY2Vzc29yaWVzLFxuICAgICAgICBzZXJ2aWNlczogdGhpcy5mb3JtRGF0YS5zZXJ2aWNlc1xuICAgICAgICAvL2FjY2Vzc29yaWVzVGV4dDogdGhpcy5mb3JtRGF0YS5hY2Nlc3Nvcmllc1RleHQsXG4gICAgICAgIC8vam9ic1RleHQ6IHRoaXMuZm9ybURhdGEuam9ic1RleHRcbiAgICAgIH0pXG5cbiAgICAgIGlmKHJlcy5jb2RlID09PSA0MDApIHtcbiAgICAgICAgdGhpcy5mb3JtRXJyb3JzID0gcmVzLnJlc3VsdC5maWVsZHM7XG4gICAgICAgIHRoaXMucHJvY2Vzc2luZyA9IGZhbHNlO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmKHJlcy5jb2RlICE9PSAyMDApIHtcbiAgICAgICAgdGhpcy5wcm9jZXNzaW5nID0gZmFsc2U7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIC8vIFVwbG9hZCBmaWxlcyB0byB0aGF0IGNvbXBsYWludFxuICAgICAgLy8gV2Ugd2FudCB0byB1cGxvYWQgdGhlbSBpbiBzZXJpZXMsIHNvIHRoYXQgd2UgZG9uJ3QgZ2V0IGNvbmZsaWN0cyB3aGVuIHVwZGF0aW5nIHRoZSByZXN1bHRzIHRvIGRhdGFiYXNlXG4gICAgICBjb25zdCBjb21wbGFpbnQgPSByZXMucmVzdWx0LmNvbXBsYWludDtcbiAgICAgIGNvbnN0IGNvbXBsYWludElkID0gcmVzLnJlc3VsdC5jb21wbGFpbnQudXVpZDtcblxuICAgICAgLy9zZW5kIGZvcm0gZXZlbnQgc3R1ZmYgdG8gR29vZ2xlIFRhZyBNYW5hZ2VyIGRhdGFMYXllclxuICAgICAgdmFyIGdhRXZlbnQgPSB7XG4gICAgICAgIGV2ZW50OiAncmVjbGFtYXRpb25Gb3JtU3VibWl0JyxcbiAgICAgICAgcmVjbGFtYXRpb25JZDogY29tcGxhaW50SWQsXG4gICAgICAgIHJlY2xhbWF0aW9uU2VyaWFsOiB0aGlzLmZvcm1EYXRhLnNlcmlhbE51bWJlclxuICAgICAgfTtcbiAgICAgIGlmKHR5cGVvZiBkYXRhTGF5ZXIgIT0gJ3VuZGVmaW5lZCcpe1xuICAgICAgICBkYXRhbGF5ZXJBY3Rpb25zLnB1c2hPYmplY3RUb0RhdGFsYXllcihnYUV2ZW50KTtcbiAgICAgIH1cblxuICAgICAgdGhpcy50b3RhbEZpbGVzID0gdGhpcy5mb3JtRGF0YS5maWxlcy5sZW5ndGg7XG4gICAgICB0aGlzLnVwbG9hZGluZ0ZpbGUgPSAwO1xuXG4gICAgICBmb3IobGV0IGkgPSAwLCBsID0gdGhpcy5mb3JtRGF0YS5maWxlcy5sZW5ndGg7IGk8bDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGZpbGUgPSB0aGlzLmZvcm1EYXRhLmZpbGVzW2ldO1xuXG4gICAgICAgIHRoaXMudXBsb2FkaW5nRmlsZSsrO1xuXG4gICAgICAgIHJlcyA9IGF3YWl0IHRoaXMuJGFwaS5hZGRDb21wbGFpbnRGaWxlKGNvbXBsYWludElkLCB7XG4gICAgICAgICAgZmlsZTogZmlsZS5maWxlXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmKHJlcy5jb2RlICE9PSAyMDApIHtcbiAgICAgICAgICB0aGlzLnByb2Nlc3NpbmcgPSBmYWxzZTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gU2F2ZSBzdGF0ZSBvZiBhIGNvbXBsYWludCB3aXRob3V0IHBvc3NpYmxlIGZpbGVzXG4gICAgICB0aGlzLiRzdG9yZS5jb21taXQoJ2FkZENvbXBsYWludCcsIGNvbXBsYWludClcblxuICAgICAgLy8gQW5kIHRyaWdnZXIgZmV0Y2hpbmcgb2YgZnVsbCBjb21wbGFpbnQgd2l0aCBmaWxlcyBpbmNsdWRlZFxuICAgICAgdGhpcy4kc3RvcmUuZGlzcGF0Y2goJ2dldENvbXBsYWludCcsIGNvbXBsYWludElkKTtcblxuICAgICAgdGhpcy5wcm9jZXNzaW5nID0gZmFsc2U7XG4gICAgICB0aGlzLmNsb3NlKHtzdGF0dXM6ICdzdWNjZXNzJ30pO1xuICAgIH1cbiAgfSxcbiAgd2F0Y2g6IHtcbiAgICBtb2RhbERhdGEoKSB7XG4gICAgICB0aGlzLmFwcGx5TW9kYWxEYXRhKCk7XG4gICAgfVxuICB9XG59XG48L3NjcmlwdD5cbiIsIjx0ZW1wbGF0ZT5cbiAgPGRpdj5cbiAgICA8bW9kYWwgOm5hbWU9XCJtb2RhbE5hbWVcIiA6Y2xpY2stdG8tY2xvc2U9XCJ0cnVlXCIgOmhlaWdodD1cIidhdXRvJ1wiIDpzY3JvbGxhYmxlPVwidHJ1ZVwiPlxuICAgICAgPHYtbW9kYWwtY29udGVudCB2LW9uOmNsb3NlPVwiY2xvc2VcIiA6dGl0bGU9XCJtb2RhbE1vZGUgPT09ICdhZGQnID8gbG9jKCdhZGRVc2VyJykgOiBsb2MoJ2VkaXRVc2VyJykgXCI+XG4gICAgICAgIDx2LWZvcm0gOmZpZWxkcz1cImZpZWxkc1wiIDpmb3JtLWRhdGE9XCJmb3JtRGF0YVwiIDpmb3JtLWVycm9ycz1cImZvcm1FcnJvcnNcIj5cbiAgICAgICAgICA8ZGl2IHNsb3Q9XCJidXR0b25zXCIgY2xhc3M9XCJ2LWZvcm0tYnV0dG9uLWRpdlwiPlxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tLWNhbmNlbFwiIHR5cGU9XCJidXR0b25cIiB2LW9uOmNsaWNrPVwiY2xvc2VcIj57e2xvYygnY2FuY2VsJyl9fTwvYnV0dG9uPlxuICAgICAgICAgICAgPGJ1dHRvbiB2LWlmPVwibW9kYWxNb2RlID09PSAnYWRkJ1wiIHR5cGU9XCJzdWJtaXRcIiB2LW9uOmNsaWNrPVwiYWRkVXNlclwiIGNsYXNzPVwiYnRuIGJ0bi0td2hpdGVcIj57e2xvYygnYWRkVXNlcicpfX08L2J1dHRvbj5cbiAgICAgICAgICAgIDxidXR0b24gdi1pZj1cIm1vZGFsTW9kZSA9PT0gJ2VkaXQnXCIgdHlwZT1cInN1Ym1pdFwiIHYtb246Y2xpY2s9XCJ1cGRhdGVVc2VyXCIgY2xhc3M9XCJidG4gYnRuLS13aGl0ZVwiPnt7bG9jKCd1cGRhdGVVc2VyJyl9fTwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L3YtZm9ybT5cbiAgICAgIDwvdi1tb2RhbC1jb250ZW50PlxuICAgIDwvbW9kYWw+XG4gIDwvZGl2PlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cblxuaW1wb3J0IFZNb2RhbENvbnRlbnQgZnJvbSAnLi92LW1vZGFsLWNvbnRlbnQudnVlJztcbmltcG9ydCBWRm9ybSBmcm9tICcuL3YtZm9ybS52dWUnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGNvbXBvbmVudHM6IHtcbiAgICAndi1tb2RhbC1jb250ZW50JzogVk1vZGFsQ29udGVudCxcbiAgICAndi1mb3JtJzogVkZvcm1cbiAgfSxcbiAgbmFtZTogJ01vZGFsVXNlcicsXG4gIHByb3BzOiBbJ29uLWNsb3NlJywgJ21vZGFsLW1vZGUnLCAnbW9kYWwtZGF0YSddLFxuICBkYXRhOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZm9ybUVycm9yczoge30sXG4gICAgICBmb3JtRGF0YToge30sXG4gICAgICBuYW1lOiAndXNlcicsXG4gICAgICBzaG93Q291bnQ6IDAsXG4gICAgICBkYXRhOiB7fVxuICAgIH1cbiAgfSxcbiAgY29tcHV0ZWQ6IHtcbiAgICBmaWVsZHMoKSB7XG4gICAgICAvLyBSZWZyZXNoIHdoZW4gY291bnRyaWVzIGxvYWRcbiAgICAgIGlmKHRoaXMuJHN0b3JlLmdldHRlcnMuY291bnRyeVNlbGVjdE9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RmllbGRzKCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBtb2RhbE5hbWUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5uYW1lICsgJyAnICsgdGhpcy5tb2RhbE1vZGU7XG4gICAgfSxcbiAgICBjYW5FZGl0Um9sZSgpIHtcbiAgICAgIC8vIENhbiBub3QgY2hhbmdlIG93biByb2xlXG4gICAgICByZXR1cm4gdGhpcy5kYXRhLmlkICE9PSB0aGlzLiRzdG9yZS5zdGF0ZS51c2VyLmluZm8uaWQ7XG4gICAgfVxuICB9LFxuICBtZXRob2RzOiB7XG4gICAgYXBwbHlNb2RhbERhdGEoKSB7XG4gICAgICB0aGlzLmZvcm1FcnJvcnMgPSB7fTtcbiAgICAgIHRoaXMuZm9ybURhdGEgPSB7fTtcbiAgICAgIHRoaXMuZGF0YSA9IHt9O1xuXG4gICAgICBpZih0aGlzLiRwcm9wcy5tb2RhbERhdGEpIHtcbiAgICAgICAgT2JqZWN0LmtleXModGhpcy4kcHJvcHMubW9kYWxEYXRhKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgdGhpcy5kYXRhW2tleV0gPSB0aGlzLiRwcm9wcy5tb2RhbERhdGFba2V5XTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuaW5jcmVhc2VTaG93Q291bnQoKTtcbiAgICB9LFxuICAgIGluY3JlYXNlU2hvd0NvdW50KCkge1xuICAgICAgdGhpcy5zaG93Q291bnQrKztcbiAgICB9LFxuICAgIGdldEZpZWxkcygpIHtcbiAgICAgIC8vIFJlZnJlc2ggZGF0YSB3aGVuIHNob3dDb3VudCBpcyBpbmNyZWFzZWRcbiAgICAgIHRoaXMuc2hvd0NvdW50O1xuXG4gICAgICAvLyBJbml0aWFsaXplIGZvcm0gZGVwZW5kaW5nIG9uIG1vZGFsIG1vZGVcbiAgICAgIGlmKHRoaXMuJHByb3BzLm1vZGFsTW9kZSA9PT0gJ2FkZCcpIHtcbiAgICAgICAgcmV0dXJuIFt7XG4gICAgICAgICAgbmFtZTogJ2ZpcnN0TmFtZScsXG4gICAgICAgICAgdmFsdWU6ICcnLFxuICAgICAgICAgIGxhYmVsOiB0aGlzLmxvYygnZmlyc3ROYW1lJyksXG4gICAgICAgICAgdHlwZTogJ3RleHQnXG4gICAgICAgIH0sIHtcbiAgICAgICAgICBuYW1lOiAnbGFzdE5hbWUnLFxuICAgICAgICAgIHZhbHVlOiAnJyxcbiAgICAgICAgICBsYWJlbDogdGhpcy5sb2MoJ2xhc3ROYW1lJyksXG4gICAgICAgICAgdHlwZTogJ3RleHQnXG4gICAgICAgIH0sIHtcbiAgICAgICAgICBuYW1lOiAndXNlcm5hbWUnLFxuICAgICAgICAgIHZhbHVlOiAnJyxcbiAgICAgICAgICBsYWJlbDogdGhpcy5sb2MoJ2Zvcm1zLmxhYmVscy51c2VybmFtZScpLFxuICAgICAgICAgIHR5cGU6ICdlbWFpbCdcbiAgICAgICAgfSwge1xuICAgICAgICAgIG5hbWU6ICdjb21wYW55JyxcbiAgICAgICAgICB2YWx1ZTogdGhpcy5kYXRhLmNvbXBhbnlJZCxcbiAgICAgICAgICBsYWJlbDogJycsXG4gICAgICAgICAgdHlwZTogJ2hpZGRlbidcbiAgICAgICAgfSwge1xuICAgICAgICAgIG5hbWU6ICdwaG9uZScsXG4gICAgICAgICAgdmFsdWU6ICcnLFxuICAgICAgICAgIGxhYmVsOiB0aGlzLmxvYygncGhvbmUnKSxcbiAgICAgICAgICB0eXBlOiAndGV4dCdcbiAgICAgICAgfSwge1xuICAgICAgICAgIG5hbWU6ICdyb2xlJyxcbiAgICAgICAgICB2YWx1ZTogJycsXG4gICAgICAgICAgbGFiZWw6IHRoaXMubG9jKCdmb3Jtcy5sYWJlbHMucm9sZScpLFxuICAgICAgICAgIG9wdGlvbnM6IFt7XG4gICAgICAgICAgICB2YWx1ZTogJ3JldGFpbGVyJyxcbiAgICAgICAgICAgIHRleHQ6IHRoaXMubG9jKCdyb2xlcy5yZXRhaWxlcicpXG4gICAgICAgICAgfSwge1xuICAgICAgICAgICAgdmFsdWU6ICdyZXRhaWxlci1hZG1pbicsXG4gICAgICAgICAgICB0ZXh0OiB0aGlzLmxvYygncm9sZXMucmV0YWlsZXJBZG1pbicpXG4gICAgICAgICAgfV0sXG4gICAgICAgICAgdHlwZTogJ3NlbGVjdCdcbiAgICAgICAgfSwge1xuICAgICAgICAgIG5hbWU6ICdjb3VudHJ5JyxcbiAgICAgICAgICB2YWx1ZTogdGhpcy5kYXRhLmNvdW50cnlDb2RlIHx8ICcnLFxuICAgICAgICAgIGxhYmVsOiB0aGlzLmxvYygnY291bnRyeScpLFxuICAgICAgICAgIG9wdGlvbnM6IHRoaXMuJHN0b3JlLmdldHRlcnMuY291bnRyeVNlbGVjdE9wdGlvbnMsXG4gICAgICAgICAgdHlwZTogJ3NlbGVjdCdcbiAgICAgICAgfV07XG4gICAgICB9IGVsc2UgaWYodGhpcy4kcHJvcHMubW9kYWxNb2RlID09PSAnZWRpdCcpIHtcbiAgICAgICAgcmV0dXJuIFt7XG4gICAgICAgICAgbmFtZTogJ2lkJyxcbiAgICAgICAgICB2YWx1ZTogdGhpcy5kYXRhLmlkLFxuICAgICAgICAgIHR5cGU6ICdoaWRkZW4nXG4gICAgICAgIH0sIHtcbiAgICAgICAgICBuYW1lOiAnZmlyc3ROYW1lJyxcbiAgICAgICAgICB2YWx1ZTogdGhpcy5kYXRhLmZpcnN0TmFtZSxcbiAgICAgICAgICBsYWJlbDogdGhpcy5sb2MoJ2ZpcnN0TmFtZScpLFxuICAgICAgICAgIHR5cGU6ICd0ZXh0J1xuICAgICAgICB9LCB7XG4gICAgICAgICAgbmFtZTogJ2xhc3ROYW1lJyxcbiAgICAgICAgICB2YWx1ZTogdGhpcy5kYXRhLmxhc3ROYW1lLFxuICAgICAgICAgIGxhYmVsOiB0aGlzLmxvYygnbGFzdE5hbWUnKSxcbiAgICAgICAgICB0eXBlOiAndGV4dCdcbiAgICAgICAgfSwge1xuICAgICAgICAgIG5hbWU6ICdwaG9uZScsXG4gICAgICAgICAgdmFsdWU6IHRoaXMuZGF0YS5waG9uZSxcbiAgICAgICAgICBsYWJlbDogdGhpcy5sb2MoJ3Bob25lJyksXG4gICAgICAgICAgdHlwZTogJ3RleHQnXG4gICAgICAgIH0sIHtcbiAgICAgICAgICBuYW1lOiAncm9sZScsXG4gICAgICAgICAgdmFsdWU6IHRoaXMuZGF0YS5yb2xlLFxuICAgICAgICAgIGxhYmVsOiB0aGlzLmxvYygnZm9ybXMubGFiZWxzLnJvbGUnKSxcbiAgICAgICAgICBvcHRpb25zOiBbe1xuICAgICAgICAgICAgdmFsdWU6ICdyZXRhaWxlcicsXG4gICAgICAgICAgICB0ZXh0OiB0aGlzLmxvYygncm9sZXMucmV0YWlsZXInKVxuICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgIHZhbHVlOiAncmV0YWlsZXItYWRtaW4nLFxuICAgICAgICAgICAgdGV4dDogdGhpcy5sb2MoJ3JvbGVzLnJldGFpbGVyQWRtaW4nKVxuICAgICAgICAgIH1dLFxuICAgICAgICAgIHR5cGU6IHRoaXMuY2FuRWRpdFJvbGUgPyAnc2VsZWN0JyA6ICdoaWRkZW4nXG4gICAgICAgIH0sIHtcbiAgICAgICAgICBuYW1lOiAnY291bnRyeScsXG4gICAgICAgICAgdmFsdWU6IHRoaXMuZGF0YS5jb3VudHJ5ICYmIHRoaXMuZGF0YS5jb3VudHJ5LmNvdW50cnlDb2RlIHx8ICcnLFxuICAgICAgICAgIGxhYmVsOiB0aGlzLmxvYygnY291bnRyeScpLFxuICAgICAgICAgIG9wdGlvbnM6IHRoaXMuJHN0b3JlLmdldHRlcnMuY291bnRyeVNlbGVjdE9wdGlvbnMsXG4gICAgICAgICAgdHlwZTogJ3NlbGVjdCdcbiAgICAgICAgfV07XG4gICAgICB9XG4gICAgfSxcbiAgICBzaG93KCkge1xuICAgICAgdGhpcy4kc3RvcmUuZGlzcGF0Y2goJ2dldENvdW50cmllcycpO1xuICAgICAgdGhpcy5hcHBseU1vZGFsRGF0YSgpO1xuICAgICAgdGhpcy4kbW9kYWwuc2hvdyh0aGlzLm1vZGFsTmFtZSk7XG4gICAgfSxcbiAgICBjbG9zZShkYXRhKSB7XG4gICAgICBpZih0aGlzLm9uQ2xvc2UpIHtcbiAgICAgICAgaWYoIWRhdGEpIHtcbiAgICAgICAgICBkYXRhID0ge1xuICAgICAgICAgICAgc3RhdHVzOiAnY2FuY2VsJ1xuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vbkNsb3NlKGRhdGEpO1xuICAgICAgfVxuICAgICAgdGhpcy4kbW9kYWwuaGlkZSh0aGlzLm1vZGFsTmFtZSk7XG4gICAgfSxcbiAgICBhZGRVc2VyKCkge1xuICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgICByZXR1cm4gdGhpcy4kYXBpLmFkZFVzZXIodGhpcy5mb3JtRGF0YSkudGhlbihyZXMgPT4ge1xuXG4gICAgICAgIC8vIEVycm9ycyBpbiBmb3JtXG4gICAgICAgIGlmKHJlcy5jb2RlID09PSA0MDApIHtcbiAgICAgICAgICB0aGlzLmZvcm1FcnJvcnMgPSByZXMucmVzdWx0LmZpZWxkcztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKHJlcy5jb2RlID09PSAyMDApIHtcbiAgICAgICAgICBzZWxmLiRzdG9yZS5jb21taXQoJ2FkZFVzZXInLCByZXMucmVzdWx0LnVzZXIpO1xuICAgICAgICAgIHNlbGYuY2xvc2Uoe3N0YXR1czogJ3N1Y2Nlc3MnfSk7XG4gICAgICAgICAgdGhpcy5zZW5kTmV3VXNlck1haWwocmVzLnJlc3VsdC51c2VyKVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9LFxuICAgIGFzeW5jIHNlbmROZXdVc2VyTWFpbChkYXRhKSB7XG4gICAgICBpZighdGhpcy50b2tlbikge1xuICAgICAgICBjb25zdCB0b2tlblJlcyA9IGF3YWl0IHRoaXMuJGFwaS5nZXRUb2tlbigpO1xuICAgICAgICBpZih0b2tlblJlcy5jb2RlID09PSAyMDApIHtcbiAgICAgICAgICB0aGlzLnRva2VuID0gdG9rZW5SZXMucmVzdWx0LnRva2VuO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLiRhcGkucmVnaXN0ZXJQYXNzd29yZCh7XG4gICAgICAgIHRva2VuOiB0aGlzLnRva2VuLFxuICAgICAgICB1c2VybmFtZTogZGF0YS51c2VybmFtZVxuICAgICAgfSlcbiAgICAgIC50aGVuKHJlcyA9PiB7XG4gICAgICAgIHRoaXMudG9rZW4gPSAnJztcblxuICAgICAgICAvLyBFcnJvcnMgaW4gZm9ybVxuICAgICAgICBpZihyZXMuY29kZSA9PT0gNDAwKSB7XG4gICAgICAgICAgdGhpcy5mb3JtRXJyb3JzID0gcmVzLnJlc3VsdC5maWVsZHM7XG4gICAgICAgIH1cblxuICAgICAgICBpZihyZXMuY29kZSA9PT0gMjAwKSB7XG4gICAgICAgICAgdGhpcy5wYXNzd29yZFNlbnQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9LFxuICAgIHVwZGF0ZVVzZXIoKSB7XG4gICAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICAgIHJldHVybiB0aGlzLiRhcGkudXBkYXRlVXNlcih0aGlzLmZvcm1EYXRhLmlkLCB0aGlzLmZvcm1EYXRhKS50aGVuKHJlcyA9PiB7XG5cbiAgICAgICAgLy8gRXJyb3JzIGluIGZvcm1cbiAgICAgICAgaWYocmVzLmNvZGUgPT09IDQwMCkge1xuICAgICAgICAgIHRoaXMuZm9ybUVycm9ycyA9IHJlcy5yZXN1bHQuZmllbGRzO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYocmVzLmNvZGUgPT09IDIwMCkge1xuICAgICAgICAgIHNlbGYuJHN0b3JlLmNvbW1pdCgndXBkYXRlVXNlcicsIHJlcy5yZXN1bHQudXNlcik7XG4gICAgICAgICAgc2VsZi5jbG9zZSh7c3RhdHVzOiAnc3VjY2Vzcyd9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9LFxuICB3YXRjaDoge1xuICAgIG1vZGFsRGF0YSgpIHtcbiAgICAgIHRoaXMuYXBwbHlNb2RhbERhdGEoKTtcbiAgICB9XG4gIH1cbn1cbjwvc2NyaXB0PlxuIiwiPHRlbXBsYXRlPlxuICAgPG1vZGFsIDpuYW1lPVwibW9kYWxOYW1lXCIgOmNsaWNrLXRvLWNsb3NlPVwiZmFsc2VcIiA6aGVpZ2h0PVwiJ2F1dG8nXCIgOnNjcm9sbGFibGU9XCJ0cnVlXCI+XG4gICAgPHYtbW9kYWwtY29udGVudCB2LW9uOmNsb3NlPVwiY2xvc2VcIiA6dGl0bGU9XCJtb2RhbE1vZGUgPT09ICdhZGQnID8gbG9jKCdhZGRXYXJyYW50eVJlZ2lzdHJhdGlvbicpIDogbG9jKCdlZGl0V2FycmFudHlSZWdpc3RyYXRpb24nKSBcIj5cbiAgICAgIDx2LWZvcm0gOmZpZWxkcz1cImZpZWxkc1wiIDpmb3JtLWRhdGE9XCJmb3JtRGF0YVwiIDpmb3JtLWVycm9ycz1cImZvcm1FcnJvcnNcIj5cbiAgICAgICAgPGRpdiBzbG90PVwiYnV0dG9uc1wiPlxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLS1jYW5jZWxcIiB0eXBlPVwiYnV0dG9uXCIgdi1vbjpjbGljaz1cImNsb3NlXCI+e3tsb2MoJ2NhbmNlbCcpfX08L2J1dHRvbj5cbiAgICAgICAgICA8YnV0dG9uIDpkaXNhYmxlZD1cInByb2Nlc3NpbmdcIiB2LWlmPVwibW9kYWxNb2RlID09PSAnYWRkJ1wiIHR5cGU9XCJzdWJtaXRcIiB2LW9uOmNsaWNrPVwiYWRkV2FycmFudHlSZWdpc3RyYXRpb25cIiBjbGFzcz1cImJ0biBidG4tLXdoaXRlXCI+e3tsb2MoJ2FkZFdhcnJhbnR5UmVnaXN0cmF0aW9uJyl9fTwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvdi1mb3JtPlxuICAgIDwvdi1tb2RhbC1jb250ZW50PlxuICA8L21vZGFsPlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cblxuaW1wb3J0IFZNb2RhbENvbnRlbnQgZnJvbSAnLi92LW1vZGFsLWNvbnRlbnQudnVlJztcbmltcG9ydCBWRm9ybSBmcm9tICcuL3YtZm9ybS52dWUnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGNvbXBvbmVudHM6IHtcbiAgICAndi1tb2RhbC1jb250ZW50JzogVk1vZGFsQ29udGVudCxcbiAgICAndi1mb3JtJzogVkZvcm1cbiAgfSxcbiAgbmFtZTogJ01vZGFsV2FycmFudHlSZWdpc3RyYXRpb24nLFxuICBwcm9wczogWydvbi1jbG9zZScsICdtb2RhbC1tb2RlJywgJ21vZGFsLWRhdGEnXSxcbiAgZGF0YTogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGZvcm1FcnJvcnM6IHt9LFxuICAgICAgZm9ybURhdGE6IHt9LFxuICAgICAgZGF0YToge30sXG4gICAgICBuYW1lOiAnd2FycmFudHktcmVnaXN0cmF0aW9uJyxcbiAgICAgIHByb2Nlc3Npbmc6IGZhbHNlXG4gICAgfVxuICB9LFxuICBjb21wdXRlZDoge1xuICAgIGZpZWxkcygpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldEZpZWxkcygpO1xuICAgIH0sXG4gICAgbW9kYWxOYW1lKCkge1xuICAgICAgcmV0dXJuIHRoaXMubmFtZSArICctJyArIHRoaXMubW9kYWxNb2RlO1xuICAgIH1cbiAgfSxcbiAgbWV0aG9kczoge1xuICAgIGluY3JlYXNlU2hvd0NvdW50KCkge1xuICAgICAgdGhpcy5zaG93Q291bnQrKztcbiAgICB9LFxuICAgIGFwcGx5TW9kYWxEYXRhKCkge1xuICAgICAgdGhpcy5mb3JtRXJyb3JzID0ge307XG4gICAgICB0aGlzLmZvcm1EYXRhID0ge307XG4gICAgICB0aGlzLmRhdGEgPSB7fTtcblxuICAgICAgaWYodGhpcy4kcHJvcHMubW9kYWxEYXRhKSB7XG4gICAgICAgIE9iamVjdC5rZXlzKHRoaXMuJHByb3BzLm1vZGFsRGF0YSkuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgIHRoaXMuZGF0YVtrZXldID0gdGhpcy4kcHJvcHMubW9kYWxEYXRhW2tleV07XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmluY3JlYXNlU2hvd0NvdW50KCk7XG4gICAgfSxcbiAgICBnZXRGaWVsZHMoKSB7XG4gICAgICAvLyBJbml0aWFsaXplIGZvcm0gZGVwZW5kaW5nIG9uIG1vZGFsIG1vZGVcbiAgICAgIGlmKHRoaXMuJHByb3BzLm1vZGFsTW9kZSA9PT0gJ2FkZCcpIHtcbiAgICAgICAgcmV0dXJuIFt7XG4gICAgICAgICAgICBuYW1lOiAnbWFjaGluZUluZm9IZWFkaW5nJyxcbiAgICAgICAgICAgIGhlYWRpbmc6IHRoaXMubG9jKCdtYWNoaW5lSW5mb3JtYXRpb24nKSxcbiAgICAgICAgICAgIHR5cGU6ICdoZWFkaW5nJ1xuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdzZXJpYWxOdW1iZXInLFxuICAgICAgICAgIHZhbHVlOiB0aGlzLmRhdGEuc2VyaWFsTnVtYmVyLFxuICAgICAgICAgIGxhYmVsOiB0aGlzLmxvYygnc2VyaWFsTnVtYmVyJykrJyAqJyxcbiAgICAgICAgICB0eXBlOiAndGV4dCdcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdtYWNoaW5lJyxcbiAgICAgICAgICB2YWx1ZTogdGhpcy5kYXRhLm1hY2hpbmUsXG4gICAgICAgICAgbGFiZWw6IHRoaXMubG9jKCdtYWNoaW5lTW9kZWwnKSsnIConLFxuICAgICAgICAgIHR5cGU6ICd0ZXh0J1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ21vcmVNYWNoaW5lcycsXG4gICAgICAgICAgbGFiZWw6IHRoaXMubG9jKCdmb3Jtcy5sYWJlbHMuYWRkTW9yZU1hY2hpbmVzJyksXG4gICAgICAgICAgdHlwZTogJ2RhdGEtaXRlbXMnLFxuICAgICAgICAgIGhpZGVFbXB0eTogdHJ1ZSxcbiAgICAgICAgICBhZGRCdG5UZXh0OiB0aGlzLmxvYygnYWRkTmV3JyksXG4gICAgICAgICAgdmFsdWU6IFtdLFxuICAgICAgICAgIGZpZWxkczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6ICdzZXJpYWxOdW1iZXInLFxuICAgICAgICAgICAgdmFsdWU6IHRoaXMuZGF0YS5zZXJpYWxOdW1iZXIsXG4gICAgICAgICAgICBsYWJlbDogdGhpcy5sb2MoJ3NlcmlhbE51bWJlcicpKycgKicsXG4gICAgICAgICAgICB0eXBlOiAndGV4dCdcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6ICdtYWNoaW5lJyxcbiAgICAgICAgICAgIHZhbHVlOiB0aGlzLmRhdGEubWFjaGluZSxcbiAgICAgICAgICAgIGxhYmVsOiB0aGlzLmxvYygnbWFjaGluZU1vZGVsJykrJyAqJyxcbiAgICAgICAgICAgIHR5cGU6ICd0ZXh0J1xuICAgICAgICAgIH1dXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnY3VzdG9tZXJJbmZvcm1hdGlvbkhlYWRpbmcnLFxuICAgICAgICAgIGhlYWRpbmc6IHRoaXMubG9jKCdjdXN0b21lckluZm9ybWF0aW9uJyksXG4gICAgICAgICAgdHlwZTogJ2hlYWRpbmcnXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnY3VzdG9tZXJGaXJzdG5hbWUnLFxuICAgICAgICAgIHZhbHVlOiB0aGlzLmRhdGEuY3VzdG9tZXJGaXJzdG5hbWUsXG4gICAgICAgICAgbGFiZWw6IHRoaXMubG9jKCdmaXJzdE5hbWUnKSsnIConLFxuICAgICAgICAgIHR5cGU6ICd0ZXh0J1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ2N1c3RvbWVyTGFzdG5hbWUnLFxuICAgICAgICAgIHZhbHVlOiB0aGlzLmRhdGEuY3VzdG9tZXJMYXN0bmFtZSxcbiAgICAgICAgICBsYWJlbDogdGhpcy5sb2MoJ2xhc3ROYW1lJykrJyAqJyxcbiAgICAgICAgICB0eXBlOiAndGV4dCdcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdjdXN0b21lckNvbXBhbnknLFxuICAgICAgICAgIHZhbHVlOiB0aGlzLmRhdGEuY3VzdG9tZXJDb21wYW55LFxuICAgICAgICAgIGxhYmVsOiB0aGlzLmxvYygnY29tcGFueScpLFxuICAgICAgICAgIHR5cGU6ICd0ZXh0J1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ2N1c3RvbWVyRW1haWwnLFxuICAgICAgICAgIHZhbHVlOiB0aGlzLmRhdGEuY3VzdG9tZXJFbWFpbCxcbiAgICAgICAgICBsYWJlbDogdGhpcy5sb2MoJ2VtYWlsJykrJyAqJyxcbiAgICAgICAgICB0eXBlOiAnZW1haWwnXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnY3VzdG9tZXJQaG9uZScsXG4gICAgICAgICAgdmFsdWU6IHRoaXMuZGF0YS5jdXN0b21lclBob25lLFxuICAgICAgICAgIGxhYmVsOiB0aGlzLmxvYygncGhvbmUnKSxcbiAgICAgICAgICB0eXBlOiAndGV4dCdcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdkZWxpdmVyeURhdGUnLFxuICAgICAgICAgIHZhbHVlOiB0aGlzLmRhdGEuZGVsaXZlcnlEYXRlLFxuICAgICAgICAgIGxhYmVsOiB0aGlzLmxvYygnZGVsaXZlcnlEYXRlJykrJyAqJyxcbiAgICAgICAgICB0eXBlOiAnZGF0ZSdcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdjdXN0b21lckFkZHJlc3MnLFxuICAgICAgICAgIHZhbHVlOiB0aGlzLmRhdGEuY3VzdG9tZXJBZGRyZXNzLFxuICAgICAgICAgIGxhYmVsOiB0aGlzLmxvYygnYWRkcmVzcycpLFxuICAgICAgICAgIHR5cGU6ICd0ZXh0J1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ2N1c3RvbWVyUG9zdGFsQ29kZScsXG4gICAgICAgICAgdmFsdWU6IHRoaXMuZGF0YS5jdXN0b21lclBvc3RhbENvZGUsXG4gICAgICAgICAgbGFiZWw6IHRoaXMubG9jKCdwb3N0YWxDb2RlJykgKyAnIConLFxuICAgICAgICAgIHR5cGU6ICd0ZXh0J1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ2N1c3RvbWVyUG9zdGFsQXJlYScsXG4gICAgICAgICAgdmFsdWU6IHRoaXMuZGF0YS5jdXN0b21lclBvc3RhbEFyZWEsXG4gICAgICAgICAgbGFiZWw6IHRoaXMubG9jKCdwb3N0YWxBcmVhJykgKyAnIConLFxuICAgICAgICAgIHR5cGU6ICd0ZXh0J1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ2N1c3RvbWVyQ291bnRyeScsXG4gICAgICAgICAgdmFsdWU6IHRoaXMuZGF0YS5jdXN0b21lclBvc3RhbEFyZWEsXG4gICAgICAgICAgbGFiZWw6IHRoaXMubG9jKCdjb3VudHJ5JykgKyAnIConLFxuICAgICAgICAgIHR5cGU6ICd0ZXh0J1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ2N1c3RvbWVyTnVtYmVyJyxcbiAgICAgICAgICB2YWx1ZTogdGhpcy5kYXRhLmN1c3RvbWVyTnVtYmVyLFxuICAgICAgICAgIGxhYmVsOiB0aGlzLmxvYygnd2FycmFudHlDdXN0b21lck51bWJlcicpLFxuICAgICAgICAgIHR5cGU6ICd0ZXh0J1xuICAgICAgICB9LFxuICAgICAgLyogIHtcbiAgICAgICAgICBuYW1lOiAnY3VzdG9tZXJDb21wYW55TnVtYmVyJyxcbiAgICAgICAgICB2YWx1ZTogdGhpcy5kYXRhLmN1c3RvbWVyQ29tcGFueU51bWJlcixcbiAgICAgICAgICBsYWJlbDogdGhpcy5sb2MoJ2NvbXBhbnlOdW1iZXInKSxcbiAgICAgICAgICB0eXBlOiAndGV4dCdcbiAgICAgICAgfSwqL1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ3NlbGxlckluZm9ybWF0aW9uSGVhZGluZycsXG4gICAgICAgICAgaGVhZGluZzogdGhpcy5sb2MoJ3NlbGxlckluZm9ybWF0aW9uJyksXG4gICAgICAgICAgdHlwZTogJ2hlYWRpbmcnXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnc2VsbGVyRmlyc3RuYW1lJyxcbiAgICAgICAgICB2YWx1ZTogdGhpcy4kc3RvcmUuc3RhdGUudXNlci5pbmZvLmZpcnN0TmFtZSxcbiAgICAgICAgICBsYWJlbDogdGhpcy5sb2MoJ2ZpcnN0TmFtZScpKycgKicsXG4gICAgICAgICAgdHlwZTogJ3RleHQnXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnc2VsbGVyTGFzdG5hbWUnLFxuICAgICAgICAgIHZhbHVlOiB0aGlzLiRzdG9yZS5zdGF0ZS51c2VyLmluZm8ubGFzdE5hbWUsXG4gICAgICAgICAgbGFiZWw6IHRoaXMubG9jKCdsYXN0TmFtZScpKycgKicsXG4gICAgICAgICAgdHlwZTogJ3RleHQnXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnc2VsbGVyRW1haWwnLFxuICAgICAgICAgIHZhbHVlOiB0aGlzLiRzdG9yZS5zdGF0ZS51c2VyLmluZm8udXNlcm5hbWUsXG4gICAgICAgICAgbGFiZWw6IHRoaXMubG9jKCdlbWFpbCcpKycgKicsXG4gICAgICAgICAgdHlwZTogJ2VtYWlsJ1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ3NlbGxlclN0b3JlJyxcbiAgICAgICAgICB2YWx1ZTogdGhpcy4kc3RvcmUuc3RhdGUudXNlci5jb21wYW55Lm5hbWUsXG4gICAgICAgICAgbGFiZWw6IHRoaXMubG9jKCdzdG9yZScpKycgKicsXG4gICAgICAgICAgdHlwZTogJ3RleHQnXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnc2VsbGVyQnVzaW5lc3NJZCcsXG4gICAgICAgICAgdmFsdWU6IHRoaXMuJHN0b3JlLnN0YXRlLnVzZXIuY29tcGFueS5idXNpbmVzc0lkLFxuICAgICAgICAgIGxhYmVsOiB0aGlzLmxvYygnYnVzaW5lc3NJZCcpLFxuICAgICAgICAgIHR5cGU6ICd0ZXh0J1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ3NlbGxlclN0cmVldEFkZHJlc3MnLFxuICAgICAgICAgIHZhbHVlOiB0aGlzLiRzdG9yZS5zdGF0ZS51c2VyLmNvbXBhbnkuYWRkcmVzcyxcbiAgICAgICAgICBsYWJlbDogdGhpcy5sb2MoJ2FkZHJlc3MnKSxcbiAgICAgICAgICB0eXBlOiAndGV4dCdcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdzZWxsZXJQb3N0YWxDb2RlJyxcbiAgICAgICAgICB2YWx1ZTogdGhpcy4kc3RvcmUuc3RhdGUudXNlci5jb21wYW55LnBvc3RhbENvZGUsXG4gICAgICAgICAgbGFiZWw6IHRoaXMubG9jKCdwb3N0YWxDb2RlJyksXG4gICAgICAgICAgdHlwZTogJ3RleHQnXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnc2VsbGVyUG9zdGFsQXJlYScsXG4gICAgICAgICAgdmFsdWU6IHRoaXMuJHN0b3JlLnN0YXRlLnVzZXIuY29tcGFueS5wb3N0T2ZmaWNlLFxuICAgICAgICAgIGxhYmVsOiB0aGlzLmxvYygncG9zdE9mZmljZScpLFxuICAgICAgICAgIHR5cGU6ICd0ZXh0J1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ3JlY2VpdmVkV2FycmFudHlEb2N1bWVudHNIZWFkaW5nJyxcbiAgICAgICAgICBoZWFkaW5nOiB0aGlzLmxvYygncmVjZWl2ZWRXYXJyYW50eURvY3VtZW50cycpLFxuICAgICAgICAgIHR5cGU6ICdoZWFkaW5nJ1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ21hbnVhbFJlY2VpdmVkJyxcbiAgICAgICAgICB2YWx1ZTogdGhpcy5kYXRhLm1hbnVhbFJlY2VpdmVkLFxuICAgICAgICAgIGxhYmVsOiB0aGlzLmxvYygnY29tcG9uZW50cy53YXJyYW50eVJlZ2lzdHJhdGlvbnMud2FycmFudHlNYW51YWwnKSsnIConLFxuICAgICAgICAgIHR5cGU6ICdib29sJ1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ2NlRURlY2xhcmF0aW9uUmVjZWl2ZWQnLFxuICAgICAgICAgIHZhbHVlOiB0aGlzLmRhdGEuY2VFRGVjbGFyYXRpb25SZWNlaXZlZCxcbiAgICAgICAgICBsYWJlbDogdGhpcy5sb2MoJ2NvbXBvbmVudHMud2FycmFudHlSZWdpc3RyYXRpb25zLmNlRURlY2xhcmF0aW9uJykrJyAqJyxcbiAgICAgICAgICB0eXBlOiAnYm9vbCdcbiAgICAgICAgfSwvKlxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ3NwYXJlUGFydHNMaXN0UmVjZWl2ZWQnLFxuICAgICAgICAgIHZhbHVlOiB0aGlzLmRhdGEuc3BhcmVQYXJ0c0xpc3RSZWNlaXZlZCxcbiAgICAgICAgICBsYWJlbDogdGhpcy5sb2MoJ2NvbXBvbmVudHMud2FycmFudHlSZWdpc3RyYXRpb25zLnNwYXJlUGFydHNMaXN0JykrJyAqJyxcbiAgICAgICAgICB0eXBlOiAnYm9vbCdcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdtYWludGVuYW5jZUJvb2tsZXRSZWNlaXZlZCcsXG4gICAgICAgICAgdmFsdWU6IHRoaXMuZGF0YS5tYWludGVuYW5jZUJvb2tsZXRSZWNlaXZlZCxcbiAgICAgICAgICBsYWJlbDogdGhpcy5sb2MoJ2NvbXBvbmVudHMud2FycmFudHlSZWdpc3RyYXRpb25zLm1haW50ZW5hbmNlQm9va2xldCcpKycgKicsXG4gICAgICAgICAgdHlwZTogJ2Jvb2wnXG4gICAgICAgIH0sKi9cbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdlbXB0eUhlYWRpbmcxJyxcbiAgICAgICAgICBoZWFkaW5nOiAnICcsXG4gICAgICAgICAgdHlwZTogJ2hlYWRpbmcnXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnY29udGFjdEFsbG93ZWQnLFxuICAgICAgICAgIHZhbHVlOiB0aGlzLmRhdGEuY29udGFjdEFsbG93ZWQsXG4gICAgICAgICAgbGFiZWw6IHRoaXMubG9jKCdjb21wb25lbnRzLndhcnJhbnR5UmVnaXN0cmF0aW9ucy5jb250YWN0QWxsb3dlZCcpKycgKicsXG4gICAgICAgICAgdHlwZTogJ2Jvb2wnXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnZ2RwckNvbnNlbnQnLFxuICAgICAgICAgIHZhbHVlOiB0aGlzLmRhdGEuZ2RwckNvbnNlbnQsXG4gICAgICAgICAgbGFiZWw6IHRoaXMubG9jKCdnZHByQ29uc2VudCcpICsgJyAqJyxcbiAgICAgICAgICBoZWxwOiB0aGlzLmxvYygncHJpdmFjeVBhZ2VMaW5rJyksXG4gICAgICAgICAgdHlwZTogJ2Jvb2wnXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnY29sbGVjdERhdGFGcm9tRmFjdG9yeUNvbm5lY3Rpb24nLFxuICAgICAgICAgIHZhbHVlOiB0aGlzLmRhdGEuY29sbGVjdERhdGFGcm9tRmFjdG9yeUNvbm5lY3Rpb24sXG4gICAgICAgICAgbGFiZWw6IGAke3RoaXMubG9jKCdjb2xsZWN0RGF0YUZyb21GYWN0b3J5Q29ubmVjdGlvbicpfSAgKmAsXG4gICAgICAgICAgaGVscDogdGhpcy5sb2MoJ3ByaXZhY3lQYWdlTGluaycpLFxuICAgICAgICAgIHR5cGU6ICdib29sJ1xuICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH0gZWxzZSBpZih0aGlzLiRwcm9wcy5tb2RhbE1vZGUgPT09ICdlZGl0Jykge1xuICAgICAgICAvLyBOb3QgeWV0IGltcGxlbWVudGVkXG4gICAgICB9XG4gICAgfSxcbiAgICBzaG93KCkge1xuICAgICAgdGhpcy5hcHBseU1vZGFsRGF0YSgpO1xuICAgICAgdGhpcy4kbW9kYWwuc2hvdyh0aGlzLm1vZGFsTmFtZSk7XG4gICAgfSxcbiAgICBjbG9zZShkYXRhKSB7XG4gICAgICBpZih0aGlzLm9uQ2xvc2UpIHtcbiAgICAgICAgaWYoIWRhdGEpIHtcbiAgICAgICAgICBkYXRhID0ge1xuICAgICAgICAgICAgc3RhdHVzOiAnY2FuY2VsJ1xuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vbkNsb3NlKGRhdGEpO1xuICAgICAgfVxuICAgICAgdGhpcy4kbW9kYWwuaGlkZSh0aGlzLm1vZGFsTmFtZSk7XG4gICAgfSxcbiAgICBhc3luYyBhZGRXYXJyYW50eVJlZ2lzdHJhdGlvbigpIHtcbiAgICAgIHRoaXMucHJvY2Vzc2luZyA9IHRydWU7XG5cbiAgICAgIGxldCByZXMgPSBhd2FpdCB0aGlzLiRhcGkuYWRkV2FycmFudHlSZWdpc3RyYXRpb24oe1xuICAgICAgICBzZXJpYWxOdW1iZXI6IHRoaXMuZm9ybURhdGEuc2VyaWFsTnVtYmVyLFxuICAgICAgICBtYWNoaW5lOiB0aGlzLmZvcm1EYXRhLm1hY2hpbmUsXG4gICAgICAgIG1vcmVNYWNoaW5lczogdGhpcy5mb3JtRGF0YS5tb3JlTWFjaGluZXMsXG4gICAgICAgIGN1c3RvbWVyRmlyc3RuYW1lOiB0aGlzLmZvcm1EYXRhLmN1c3RvbWVyRmlyc3RuYW1lLFxuICAgICAgICBjdXN0b21lckxhc3RuYW1lOiB0aGlzLmZvcm1EYXRhLmN1c3RvbWVyTGFzdG5hbWUsXG4gICAgICAgIGN1c3RvbWVyQ29tcGFueTogdGhpcy5mb3JtRGF0YS5jdXN0b21lckNvbXBhbnksXG4gICAgICAgIGN1c3RvbWVyRW1haWw6IHRoaXMuZm9ybURhdGEuY3VzdG9tZXJFbWFpbCxcbiAgICAgICAgY3VzdG9tZXJQaG9uZTogdGhpcy5mb3JtRGF0YS5jdXN0b21lclBob25lLFxuICAgICAgICBkZWxpdmVyeURhdGU6IHRoaXMuZm9ybURhdGEuZGVsaXZlcnlEYXRlLFxuICAgICAgICBjdXN0b21lckFkZHJlc3M6IHRoaXMuZm9ybURhdGEuY3VzdG9tZXJBZGRyZXNzLFxuICAgICAgICBjdXN0b21lclBvc3RhbEFyZWE6IHRoaXMuZm9ybURhdGEuY3VzdG9tZXJQb3N0YWxBcmVhLFxuICAgICAgICBjdXN0b21lclBvc3RhbENvZGU6IHRoaXMuZm9ybURhdGEuY3VzdG9tZXJQb3N0YWxDb2RlLFxuICAgICAgICBjdXN0b21lckNvdW50cnk6IHRoaXMuZm9ybURhdGEuY3VzdG9tZXJDb3VudHJ5LFxuICAgICAgICBjdXN0b21lck51bWJlcjogdGhpcy5mb3JtRGF0YS5jdXN0b21lck51bWJlcixcbiAgICAgIC8vICBjdXN0b21lckNvbXBhbnlOdW1iZXI6IHRoaXMuZm9ybURhdGEuY3VzdG9tZXJDb21wYW55TnVtYmVyLFxuICAgICAgICBzZWxsZXJGaXJzdG5hbWU6IHRoaXMuZm9ybURhdGEuc2VsbGVyRmlyc3RuYW1lLFxuICAgICAgICBzZWxsZXJMYXN0bmFtZTogdGhpcy5mb3JtRGF0YS5zZWxsZXJMYXN0bmFtZSxcbiAgICAgICAgc2VsbGVyRW1haWw6IHRoaXMuZm9ybURhdGEuc2VsbGVyRW1haWwsXG4gICAgICAgIHNlbGxlclN0b3JlOiB0aGlzLmZvcm1EYXRhLnNlbGxlclN0b3JlLFxuICAgICAgICBzZWxsZXJCdXNpbmVzc0lkOiB0aGlzLmZvcm1EYXRhLnNlbGxlckJ1c2luZXNzSWQsXG4gICAgICAgIHNlbGxlclN0cmVldEFkZHJlc3M6IHRoaXMuZm9ybURhdGEuc2VsbGVyU3RyZWV0QWRkcmVzcyxcbiAgICAgICAgc2VsbGVyUG9zdGFsQ29kZTogdGhpcy5mb3JtRGF0YS5zZWxsZXJQb3N0YWxDb2RlLFxuICAgICAgICBzZWxsZXJQb3N0YWxBcmVhOiB0aGlzLmZvcm1EYXRhLnNlbGxlclBvc3RhbEFyZWEsXG4gICAgICAgIG1hbnVhbFJlY2VpdmVkOiB0aGlzLmZvcm1EYXRhLm1hbnVhbFJlY2VpdmVkLFxuICAgICAgICBjZUVEZWNsYXJhdGlvblJlY2VpdmVkOiB0aGlzLmZvcm1EYXRhLmNlRURlY2xhcmF0aW9uUmVjZWl2ZWQsXG4gICAgLy8gICAgc3BhcmVQYXJ0c0xpc3RSZWNlaXZlZDogdGhpcy5mb3JtRGF0YS5zcGFyZVBhcnRzTGlzdFJlY2VpdmVkLFxuICAgIC8vICAgIG1haW50ZW5hbmNlQm9va2xldFJlY2VpdmVkOiB0aGlzLmZvcm1EYXRhLm1haW50ZW5hbmNlQm9va2xldFJlY2VpdmVkLFxuICAgICAgICBjb250YWN0QWxsb3dlZDogdGhpcy5mb3JtRGF0YS5jb250YWN0QWxsb3dlZCxcbiAgICAgICAgZ2RwckNvbnNlbnQ6IHRoaXMuZm9ybURhdGEuZ2RwckNvbnNlbnQsXG4gICAgICAgIGNvbGxlY3REYXRhRnJvbUZhY3RvcnlDb25uZWN0aW9uOiB0aGlzLmZvcm1EYXRhLmNvbGxlY3REYXRhRnJvbUZhY3RvcnlDb25uZWN0aW9uXG4gICAgICB9KVxuXG4gICAgICBpZihyZXMuY29kZSA9PT0gNDAwKSB7XG4gICAgICAgIHRoaXMuZm9ybUVycm9ycyA9IHJlcy5yZXN1bHQuZmllbGRzO1xuICAgICAgICB0aGlzLnByb2Nlc3NpbmcgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZihyZXMuY29kZSAhPT0gMjAwKSB7XG4gICAgICAgIHRoaXMucHJvY2Vzc2luZyA9IGZhbHNlO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHdhcnJhbnR5UmVnaXN0cmF0aW9uID0gcmVzLnJlc3VsdC53YXJyYW50eVJlZ2lzdHJhdGlvbjtcbiAgICAgIGNvbnN0IHdhcnJhbnR5UmVnaXN0cmF0aW9uSWQgPSByZXMucmVzdWx0LndhcnJhbnR5UmVnaXN0cmF0aW9uLnV1aWQ7XG5cbiAgICAgIC8vIFNhdmUgc3RhdGUgb2YgYSB3YXJyYW50eSByZWdpc3RyYXRpb25cbiAgICAgIHRoaXMuJHN0b3JlLmNvbW1pdCgnYWRkV2FycmFudHlSZWdpc3RyYXRpb24nLCB3YXJyYW50eVJlZ2lzdHJhdGlvbik7XG5cbiAgICAgIC8vIEFuZCB0cmlnZ2VyIGZldGNoaW5nIG9mIGZ1bGwgd2FycmFudHkgcmVnaXN0cmF0aW9uXG4gICAgICB0aGlzLiRzdG9yZS5kaXNwYXRjaCgnZ2V0V2FycmFudHlSZWdpc3RyYXRpb24nLCB3YXJyYW50eVJlZ2lzdHJhdGlvbklkKTtcblxuICAgICAgdGhpcy5wcm9jZXNzaW5nID0gZmFsc2U7XG4gICAgICB0aGlzLmNsb3NlKHtzdGF0dXM6ICdzdWNjZXNzJ30pO1xuICAgIH1cbiAgfSxcbiAgd2F0Y2g6IHtcbiAgICBtb2RhbERhdGEoKSB7XG4gICAgICB0aGlzLmFwcGx5TW9kYWxEYXRhKCk7XG4gICAgfVxuICB9XG59XG48L3NjcmlwdD5cbiIsImltcG9ydCBWdWUgZnJvbSAndnVlJztcblxuLyoqXG4gKiBUaGlzIHVzZXMgdGVtcGxhdGUgdGhhdCBpcyBpbmNsdWRlZCBpbiBzY3JpcHQgdGFnXG4gKiovXG5cblZ1ZS5jb21wb25lbnQoJ3RoZS0xLWNvbHVtbi1sYXlvdXQnLCB7XG4gIHRlbXBsYXRlOiAnI2pzLWxheW91dC0xLWNvbHVtbi10ZW1wbGF0ZSdcbn0pO1xuIiwiaW1wb3J0IFZ1ZSBmcm9tICd2dWUnO1xuXG4vKipcbiAqIFRoaXMgdXNlcyB0ZW1wbGF0ZSB0aGF0IGlzIGluY2x1ZGVkIGluIHNjcmlwdCB0YWdcbiAqKi9cblxuVnVlLmNvbXBvbmVudCgndGhlLXNpZGViYXItbGF5b3V0Jywge1xuICB0ZW1wbGF0ZTogJyNqcy1sYXlvdXQtc2lkZWJhci10ZW1wbGF0ZScsXG4gIHByb3BzOiBbJ3NpZGViYXItdGl0bGUnXSxcbiAgY29tcHV0ZWQ6IHtcbiAgICBoYXNTaWRlYmFyVGl0bGUoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kc2xvdHNbJ3NpZGViYXItdGl0bGUnXTtcbiAgICB9XG4gIH1cbn0pO1xuIiwiaW1wb3J0IFZ1ZSBmcm9tICd2dWUnO1xuXG4vKipcbiAqIFN1YmhlYWRlciB1c2VzIFN0YWdlIHRlbXBsYXRlIHRoYXQgaXMgaW5jbHVkZWQgaW4gc2NyaXB0IHRhZ1xuICoqL1xuXG5WdWUuY29tcG9uZW50KCd0aGUtc3ViaGVhZGVyJywge1xuICB0ZW1wbGF0ZTogJyNqcy1zdWJoZWFkZXItdGVtcGxhdGUnLFxuICBkYXRhOiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNlYXJjaFRleHQ6ICcnLFxuICAgIH1cbiAgfSxcbiAgY29tcHV0ZWQ6IHtcbiAgICBzZWFyY2hFbmFibGVkICgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRzdG9yZS5zdGF0ZS5zdWJoZWFkZXIuc2VhcmNoRW5hYmxlZDtcbiAgICB9LFxuICAgIHRpdGxlICgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRzdG9yZS5zdGF0ZS5zdWJoZWFkZXIudGl0bGU7XG4gICAgfSxcbiAgICBkZXNjcmlwdGlvbiAoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kc3RvcmUuc3RhdGUuc3ViaGVhZGVyLmRlc2NyaXB0aW9uO1xuICAgIH0sXG4gICAgc3VidGl0bGUgKCkge1xuICAgICAgcmV0dXJuIHRoaXMuJHN0b3JlLnN0YXRlLnN1YmhlYWRlci5zdWJ0aXRsZTtcbiAgICB9XG4gIH0sXG4gIHdhdGNoOiB7XG4gICAgc2VhcmNoVGV4dDogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICB0aGlzLiRzdG9yZS5jb21taXQoJ3NldFN1YmhlYWRlclNlYXJjaFRleHQnLCB0aGlzLnNlYXJjaFRleHQpO1xuICAgIH1cbiAgfSxcbiAgbW91bnRlZDogZnVuY3Rpb24gKCkge1xuICAgIC8vIFJlbW92ZSB0aGUgb3JpZ2luYWwgaGVhZGVyIG9uY2Ugd2UncmUgZG9uZSBsb2FkaW5nXG4gICAgY29uc3Qgc3ViaGVhZGVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2pzLXN1YmhlYWRlcicpO1xuICAgIGlmKHN1YmhlYWRlcikge1xuICAgICAgc3ViaGVhZGVyLnJlbW92ZSgpO1xuICAgIH1cbiAgfVxufSk7XG4iLCJcbjx0ZW1wbGF0ZT5cbiAgPGRpdj5cbiAgICA8cD5cbiAgICAgIDxzdHJvbmc+e3tsb2MoJ3NlbmRlcicpfX08L3N0cm9uZz46IHt7dXNlci5maXJzdE5hbWV9fSB7e3VzZXIubGFzdE5hbWV9fTxicj5cbiAgICAgIDxzdHJvbmc+e3tsb2MoJ29yZ2FuaXphdGlvbicpfX08L3N0cm9uZz46IHt7Y29tcGFueS5uYW1lfX08YnI+XG4gICAgICA8c3Ryb25nPnt7bG9jKCdhZGRyZXNzJyl9fTwvc3Ryb25nPjoge3tjb21wYW55LmFkZHJlc3N9fSwge3tjb21wYW55LnBvc3RhbENvZGV9fSB7e2NvbXBhbnkucG9zdE9mZmljZX19LCB7e2NvbXBhbnkuY291bnRyeSAmJiBjb21wYW55LmNvdW50cnkubmFtZX19PGJyPlxuICAgICAgPHNwYW4gdi1pZj1cInVzZXIucGhvbmVcIj48c3Ryb25nPnt7bG9jKCdwaG9uZScpfX08L3N0cm9uZz46IHt7dXNlci5waG9uZX19PGJyPjwvc3Bhbj5cbiAgICAgIDxzdHJvbmc+e3tsb2MoJ2VtYWlsJyl9fTwvc3Ryb25nPjoge3t1c2VyLnVzZXJuYW1lfX1cbiAgICA8L3A+XG4gIDwvZGl2PlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbmFtZTogJ1ZDb21wbGFpbnRVc2VySW5mbycsXG4gIHByb3BzOiBbJ3VzZXItaWQnLCAndXNlci1kYXRhJywgJ2NvbXBhbnktZGF0YSddLFxuICBkYXRhOiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbXBhbnlJZDogbnVsbFxuICAgIH1cbiAgfSxcbiAgY29tcHV0ZWQ6IHtcbiAgICB1c2VyKCkge1xuICAgICAgLy8gSWYgdXNlckRhdGEgaXMgcGFzc2VkLCB1c2UgdGhhdFxuICAgICAgaWYodGhpcy4kcHJvcHMudXNlckRhdGEpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJHByb3BzLnVzZXJEYXRhO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB1c2VyID0gdGhpcy4kc3RvcmUuc3RhdGUudXNlcnMuZmlsdGVyKHVzZXIgPT4gdXNlci5pZCA9PT0gdGhpcy4kcHJvcHMudXNlcklkKVswXTtcblxuICAgICAgaWYodXNlcikge1xuICAgICAgICB0aGlzLmNvbXBhbnlJZCA9IHVzZXIuY29tcGFueTtcbiAgICAgICAgdGhpcy4kc3RvcmUuZGlzcGF0Y2goJ2dldENvbXBhbnknLCB0aGlzLmNvbXBhbnlJZCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB1c2VyIHx8wqB7fTtcbiAgICB9LFxuICAgIGNvbXBhbnkoKSB7XG4gICAgICAvLyBJZiBjb21wYW55RGF0YSBpcyBwYXNzZWQsIHVzZSB0aGF0XG4gICAgICBpZih0aGlzLiRwcm9wcy5jb21wYW55RGF0YSkge1xuICAgICAgICByZXR1cm4gdGhpcy4kcHJvcHMuY29tcGFueURhdGE7XG4gICAgICB9XG4gICAgICBjb25zdCBjb21wYW55ID0gdGhpcy4kc3RvcmUuc3RhdGUuY29tcGFuaWVzLmZpbHRlcihjb21wYW55ID0+IGNvbXBhbnkuaWQgPT09IHRoaXMuY29tcGFueUlkKVswXTtcblxuICAgICAgcmV0dXJuIGNvbXBhbnkgfHzCoHt9O1xuICAgIH1cbiAgfSxcbiAgbW91bnRlZCgpIHtcblxuICAgIC8vIElmIHVzZXJEYXRhIGlzIHBhc3NlZCwgdXNlIHRoYXRcbiAgICBpZih0aGlzLiRwcm9wcy51c2VyRGF0YSkge1xuICAgICAgcmV0dXJuIHRoaXMuJHByb3BzLnVzZXJEYXRhO1xuICAgIH1cblxuICAgIGlmKHRoaXMuJHByb3BzLnVzZXJJZCkge1xuICAgICAgdGhpcy4kc3RvcmUuZGlzcGF0Y2goJ2dldFVzZXInLCB0aGlzLiRwcm9wcy51c2VySWQpO1xuICAgIH1cbiAgfSxcbiAgd2F0Y2g6IHtcbiAgICB1c2VySWQodmFsKSB7XG4gICAgICBpZih2YWwpIHtcbiAgICAgICAgdGhpcy4kc3RvcmUuZGlzcGF0Y2goJ2dldFVzZXInLCB2YWwpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuPC9zY3JpcHQ+XG4iLCI8dGVtcGxhdGU+XG4gIDxzcGFuPlxuICAgIDxzcGFuIHYtaWY9XCJkaXNwbGF5T25seVwiPnt7ZGlzcGxheVZhbHVlfX08L3NwYW4+XG4gICAgPGlucHV0IHYtZWxzZSA6Y2xhc3M9XCJpbnB1dENsYXNzXCIgdHlwZT1cInRleHRcIiB2LW1vZGVsPVwiZGlzcGxheVZhbHVlXCIgQGJsdXI9XCJpc0lucHV0QWN0aXZlID0gZmFsc2VcIiBAZm9jdXM9XCJpc0lucHV0QWN0aXZlID0gdHJ1ZVwiIHYtb246a2V5ZG93bi5lbnRlci5wcmV2ZW50Lz5cbiAgPC9zcGFuPlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbmFtZTogJ1ZDdXJyZW5jeUlucHV0JyxcbiAgcHJvcHM6IFsndmFsdWUnLCAnZGVjaW1hbC1jaGFyJywgJ2Rpc3BsYXktb25seScsICdpbnB1dC1jbGFzcyddLFxuICBkYXRhOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaXNJbnB1dEFjdGl2ZTogZmFsc2UsXG4gICAgICBkZWNpbWFsOiAnLicsXG4gICAgICByZXBsYWNlRGVjaW1hbDogJywnLFxuICAgICAgY3VycmVuY3k6ICfigqwnXG4gICAgfVxuICB9LFxuICBjb21wdXRlZDoge1xuICAgIGRpc3BsYXlWYWx1ZToge1xuICAgICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgbGV0IHZhbHVlID0gdGhpcy52YWx1ZTtcbiAgICAgICAgLy8gY2hhbmdlIHZhbHVlIHRvIHplcm8gaWYgbm8gbnVtYmVyIGlzIHBhc3NlZFxuICAgICAgICBpZih0aGlzLnZhbHVlID09PSBudWxsKSB7XG4gICAgICAgICAgdGhpcy4kZW1pdCgnaW5wdXQnLCAwKVxuICAgICAgICAgIHZhbHVlID0gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmlzSW5wdXRBY3RpdmUpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5nZXRGb3JtYXR0ZWRGb3JJbnB1dCh2YWx1ZSwgZmFsc2UpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIFVzZXIgaXMgbm90IG1vZGlmeWluZyBub3cuIEZvcm1hdCBkaXNwbGF5IHZhbHVlIGZvciB1c2VyIGludGVyZmFjZVxuICAgICAgICAgIHZhbHVlID0gdmFsdWUudG9TdHJpbmcoKTtcblxuICAgICAgICAgIHZhbHVlID0gcGFyc2VGbG9hdCh2YWx1ZS5yZXBsYWNlKC8sL2csICcuJykpLnRvRml4ZWQoMik7XG5cbiAgICAgICAgICAvLyBFbnN1cmUgdGhhdCBpdCBpcyBub3QgTmFOXG4gICAgICAgICAgaWYgKGlzTmFOKHZhbHVlKSkge1xuICAgICAgICAgICAgdmFsdWUgPSAwO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuJGVtaXQoJ2lucHV0JywgcGFyc2VGbG9hdCh2YWx1ZSkpO1xuXG4gICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Rm9ybWF0dGVkRm9ySW5wdXQodmFsdWUsIHRydWUpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgc2V0OiBmdW5jdGlvbihtb2RpZmllZFZhbHVlKSB7XG4gICAgICAgIC8vIFJlY2FsY3VsYXRlIHZhbHVlIGFmdGVyIGlnbm9yaW5nIFwiJFwiLCBcIixcIiBhbmQgXCIuXCIgaW4gdXNlciBpbnB1dFxuICAgICAgICBjb25zdCByZWdFeHAgPSBuZXcgUmVnRXhwKCdbXlxcXFxkXFxcXC4sXScsICdnJyk7XG4gICAgICAgIGxldCBuZXdWYWx1ZSA9IG1vZGlmaWVkVmFsdWUucmVwbGFjZShyZWdFeHAsIFwiXCIpXG5cbiAgICAgICAgLy8gTm90ZTogd2UgY2Fubm90IHNldCB0aGlzLnZhbHVlIGFzIGl0IGlzIGEgXCJwcm9wXCIuIEl0IG5lZWRzIHRvIGJlIHBhc3NlZCB0byBwYXJlbnQgY29tcG9uZW50XG4gICAgICAgIC8vICRlbWl0IHRoZSBldmVudCBzbyB0aGF0IHBhcmVudCBjb21wb25lbnQgZ2V0cyBpdFxuICAgICAgICB0aGlzLiRlbWl0KCdpbnB1dCcsIG5ld1ZhbHVlKVxuICAgICAgfVxuICAgIH1cbiAgfSxcbiAgbWV0aG9kczoge1xuICAgIGdldEZvcm1hdHRlZEZvcklucHV0KHZhbHVlLCBzaG93Q3VycmVuY3kpIHtcbiAgICAgIGxldCBkaXNwbGF5VmFsdWUgPSB2YWx1ZS50b1N0cmluZygpO1xuXG4gICAgICBjb25zdCByZWdFeHAgPSBuZXcgUmVnRXhwKCdbXlxcXFxkXFxcXC4sXScsICdnJyk7XG4gICAgICBkaXNwbGF5VmFsdWUgPSBkaXNwbGF5VmFsdWUucmVwbGFjZShyZWdFeHAsIFwiXCIpXG5cbiAgICAgIGlmKHRoaXMuZGVjaW1hbCA9PT0gJywnKSB7XG4gICAgICAgIGRpc3BsYXlWYWx1ZSA9IGRpc3BsYXlWYWx1ZS5yZXBsYWNlKC9cXC4vLCAnLCcpO1xuICAgICAgfVxuXG4gICAgICAvLyBJZiB3ZSBoYXZlIHRoZSBkZWZhdWx0IHplcm8sIGNsZWFyIGlucHV0IHdoZW4gc3RhcmluZyB0eXBpbmdcbiAgICAgIGlmKCFzaG93Q3VycmVuY3kgJiYgdmFsdWUgPT09IDApIHtcbiAgICAgICAgcmV0dXJuICcnO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGRpc3BsYXlWYWx1ZSArIChzaG93Q3VycmVuY3kgPyAnICcgKyB0aGlzLmN1cnJlbmN5IDogJycpO1xuICAgIH1cbiAgfSxcbiAgbW91bnRlZCgpIHtcbiAgICB0aGlzLmRlY2ltYWwgPSB0aGlzLmRlY2ltYWxDaGFyIHx8IHRoaXMuZGVjaW1hbDtcbiAgICB0aGlzLnJlcGxhY2VEZWNpbWFsID0gdGhpcy5kZWNpbWFsID09PSAnLicgPyAnLCcgOiAnLic7IC8vIFJlcGxhY2UgY29tbWFzIGlmIGRvdCBpcyB1c2UgYW5kIHZpY2UgdmVyc2FcbiAgfVxufVxuPC9zY3JpcHQ+XG5cbjxzdHlsZT5cblxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZT5cbiAgPGRpdiBjbGFzcz1cInYtZGF0YS1pdGVtc1wiPlxuICAgIDx0YWJsZSB2LWlmPVwic2hvd1RhYmxlXCIgY2xhc3M9XCJ2LWRhdGEtaXRlbXNfX3RhYmxlIHRhYmxlXCI+XG4gICAgICA8dGhlYWQ+XG4gICAgICAgIDx0aCB2LWZvcj1cImZpZWxkIGluIGZpZWxkc1wiIHYtYmluZDprZXk9XCJmaWVsZC5uYW1lXCI+XG4gICAgICAgICAge3tmaWVsZC5sYWJlbH19XG4gICAgICAgIDwvdGg+XG4gICAgICAgIDx0aCB2LWlmPVwiZWRpdE1vZGVcIj4mbmJzcDs8L3RoPlxuICAgICAgPC90aGVhZD5cbiAgICAgIDx0ciB2LWZvcj1cIihpdGVtLCBpdGVtSW5kZXgpIGluIGl0ZW1zXCIgdi1iaW5kOmtleT1cIml0ZW1JbmRleFwiPlxuICAgICAgICA8dGQgY2xhc3M9XCJ2LWRhdGEtaXRlbXNfX3RkXCIgdi1mb3I9XCJmaWVsZCBpbiBmaWVsZHNcIiB2LWJpbmQ6a2V5PVwiZmllbGQubmFtZVwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwidi1kYXRhLWl0ZW1zX19lcnJvclwiIHYtZm9yPVwiKG1lc3NhZ2UsIGluZGV4KSBpbiBpdGVtRXJyb3JNZXNzYWdlcyhpdGVtSW5kZXgsIGZpZWxkLm5hbWUpXCIgdi1iaW5kOmtleT1cImluZGV4XCI+XG4gICAgICAgICAgICB7e21lc3NhZ2V9fTxicj5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPGRpdiB2LWlmPVwiZWRpdE1vZGVcIj5cbiAgICAgICAgICAgIDx2LW51bWJlci1pbnB1dCB2LWlmPVwiZmllbGQudHlwZSA9PT0gJ251bWJlcidcIiA6aW5wdXQtY2xhc3M9XCIndi1kYXRhLWl0ZW1zX19pbnB1dCdcIiB2LW1vZGVsPVwiaXRlbVtmaWVsZC5uYW1lXVwiIDpkZWNpbWFsLWNoYXI9XCInLCdcIj48L3YtbnVtYmVyLWlucHV0PlxuICAgICAgICAgICAgPHYtY3VycmVuY3ktaW5wdXQgdi1pZj1cImZpZWxkLnR5cGUgPT09ICdjdXJyZW5jeSdcIiA6aW5wdXQtY2xhc3M9XCIndi1kYXRhLWl0ZW1zX19pbnB1dCdcIiB2LW1vZGVsPVwiaXRlbVtmaWVsZC5uYW1lXVwiIDpkZWNpbWFsLWNoYXI9XCInLCdcIj48L3YtY3VycmVuY3ktaW5wdXQ+XG4gICAgICAgICAgICA8aW5wdXQgdi1pZj1cImZpZWxkLnR5cGUgPT09ICd0ZXh0J1wiIGNsYXNzPVwidi1kYXRhLWl0ZW1zX19pbnB1dFwiIDpwbGFjZWhvbGRlcj1cImZpZWxkLnBsYWNlaG9sZGVyXCIgdi1tb2RlbD1cIml0ZW1bZmllbGQubmFtZV1cIiB2LW9uOmtleWRvd24uZW50ZXIucHJldmVudD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IHYtaWY9XCIhZWRpdE1vZGVcIj5cbiAgICAgICAgICAgIDx2LW51bWJlci1pbnB1dCB2LWlmPVwiZmllbGQudHlwZSA9PT0gJ251bWJlcidcIiA6ZGlzcGxheS1vbmx5PVwidHJ1ZVwiIDppbnB1dC1jbGFzcz1cIid2LWRhdGEtaXRlbXNfX2lucHV0J1wiIHYtbW9kZWw9XCJpdGVtW2ZpZWxkLm5hbWVdXCIgOmRlY2ltYWwtY2hhcj1cIicsJ1wiPjwvdi1udW1iZXItaW5wdXQ+XG4gICAgICAgICAgICA8di1jdXJyZW5jeS1pbnB1dCB2LWlmPVwiZmllbGQudHlwZSA9PT0gJ2N1cnJlbmN5J1wiIDpkaXNwbGF5LW9ubHk9XCJ0cnVlXCIgOmlucHV0LWNsYXNzPVwiJ3YtZGF0YS1pdGVtc19faW5wdXQnXCIgdi1tb2RlbD1cIml0ZW1bZmllbGQubmFtZV1cIiA6ZGVjaW1hbC1jaGFyPVwiJywnXCI+PC92LWN1cnJlbmN5LWlucHV0PlxuICAgICAgICAgICAgPHNwYW4gdi1pZj1cImZpZWxkLnR5cGUgPT09ICd0ZXh0J1wiPnt7aXRlbVtmaWVsZC5uYW1lXX19PC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L3RkPlxuICAgICAgICA8dGQgdi1pZj1cImVkaXRNb2RlXCIgY2xhc3M9XCJ2LWRhdGEtaXRlbXNfX3JlbW92ZS10ZCB0YWJsZV9fdGQgaXMtYWxpZ24tcmlnaHQgaXMtdmFsaWduLW1pZGRsZVwiPjxidXR0b24gY2xhc3M9XCJidG4gYnRuLS13aGl0ZSB2LWpvYi1pdGVtc19fcmVtb3ZlLWJ1dHRvblwiIEBjbGljaz1cInJlbW92ZUl0ZW0oaXRlbUluZGV4KVwiPnt7bG9jKCdyZW1vdmUnKX19PC9idXR0b24+PC90ZD5cbiAgICAgIDwvdHI+XG4gICAgICA8dHIgdi1pZj1cInN1bUZpZWxkXCI+XG4gICAgICAgIDx0ZCB2LWZvcj1cImZpZWxkIGluIGZpZWxkc1wiIHYtYmluZDprZXk9XCJmaWVsZC5uYW1lXCI+XG4gICAgICAgICAgPGRpdiB2LWlmPVwic3VtRmllbGQgPT09IGZpZWxkLm5hbWVcIj5Ub3RhbDogPHYtY3VycmVuY3ktaW5wdXQgOmRpc3BsYXktb25seT1cInRydWVcIiA6dmFsdWU9XCJ0b3RhbFN1bVwiIDpkZWNpbWFsLWNoYXI9XCInLCdcIiA+PC92LWN1cnJlbmN5LWlucHV0PjwvZGl2PlxuICAgICAgICAgPGRpdiB2LWVsc2U+Jm5ic3A7PC9kaXY+XG4gICAgICAgIDwvdGQ+XG4gICAgICAgIDx0ZCB2LWlmPVwiZWRpdE1vZGVcIj4mbmJzcDs8L3RkPlxuICAgICAgPC90cj5cbiAgICA8L3RhYmxlPlxuICAgIDxidXR0b24gdi1pZj1cImVkaXRNb2RlXCIgY2xhc3M9XCJ2LWRhdGEtaXRlbXNfX2FkZC1idXR0b24gYnRuIGJ0bi0td2hpdGVcIiBAY2xpY2s9XCJhZGRJdGVtKClcIj57e2FkZEJ0blRleHQgfHwgbG9jKCdhZGRSb3cnKX19PC9idXR0b24+XG4gIDwvZGl2PlxuXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IFZDdXJyZW5jeUlucHV0IGZyb20gJy4vdi1jdXJyZW5jeS1pbnB1dC52dWUnO1xuaW1wb3J0IFZOdW1iZXJJbnB1dCBmcm9tICcuL3YtbnVtYmVyLWlucHV0LnZ1ZSc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgY29tcG9uZW50czoge1xuICAgICd2LWN1cnJlbmN5LWlucHV0JzogVkN1cnJlbmN5SW5wdXQsXG4gICAgJ3YtbnVtYmVyLWlucHV0JzogVk51bWJlcklucHV0XG4gIH0sXG4gIG5hbWU6ICdWRGF0YUl0ZW1zJyxcbiAgZGF0YTogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB7XG4gICAgICBpdGVtczogW10sXG4gICAgICBlcnJvckRhdGE6IHt9LFxuICAgICAgcGF0dGVybnM6IHtcbiAgICAgICAgdGV4dDogJycsXG4gICAgICAgIG51bWJlcjogJy0/WzAtOV0rW1xcLC5dKlswLTldKydcbiAgICAgIH1cbiAgICB9XG4gIH0sXG4gIHByb3BzOiB7XG4gICAgc3VtRmllbGQ6IFN0cmluZyxcbiAgICBtdWx0aXBseUZpZWxkOiBTdHJpbmcsXG4gICAgb25DaGFuZ2U6IEZ1bmN0aW9uLFxuICAgIGZpZWxkczogQXJyYXksXG4gICAgZGF0YTogQXJyYXksXG4gICAgaGlkZUVtcHR5OiBCb29sZWFuLFxuICAgIGFkZEJ0blRleHQ6IFN0cmluZyxcbiAgICBlcnJvcnM6IE9iamVjdCxcbiAgICBlZGl0TW9kZToge1xuICAgICAgZGVmYXVsdDogdHJ1ZSxcbiAgICAgIHR5cGU6IEJvb2xlYW5cbiAgICB9XG4gIH0sXG4gIGNvbXB1dGVkOiB7XG4gICAgc2hvd1RhYmxlKCkge1xuICAgICAgaWYoIXRoaXMuaGlkZUVtcHR5KSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5pdGVtcy5sZW5ndGggPyB0cnVlIDogZmFsc2U7XG4gICAgfSxcbiAgICB0b3RhbFN1bSAoKSB7XG4gICAgICBsZXQgc3VtID0gMDtcbiAgICAgIHRoaXMuaXRlbXMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgY29uc3QgbXVsdGlwbHlGaWVsZFZhbHVlID0gaXRlbVt0aGlzLm11bHRpcGx5RmllbGRdIHx8wqAxO1xuICAgICAgICBjb25zdCBzdW1GaWVsZFZhbHVlID0gKGl0ZW1bdGhpcy5zdW1GaWVsZF0gfHzCoDApICogbXVsdGlwbHlGaWVsZFZhbHVlO1xuICAgICAgICBpZih0eXBlb2Ygc3VtRmllbGRWYWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICBzdW0gKz0gc3VtRmllbGRWYWx1ZVxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIHN1bTtcbiAgICB9XG4gIH0sXG4gIG1ldGhvZHM6IHtcbiAgICBpdGVtRXJyb3JNZXNzYWdlcyhpdGVtSW5kZXgsIGZpZWxkTmFtZSkge1xuICAgICAgY29uc3QgaXRlbURhdGEgPSB0aGlzLmVycm9yRGF0YVtpdGVtSW5kZXhdO1xuXG4gICAgICByZXR1cm4gaXRlbURhdGEgJiYgaXRlbURhdGFbZmllbGROYW1lXSAmJiBpdGVtRGF0YVtmaWVsZE5hbWVdLm1lc3NhZ2VzIHx8IFtdO1xuICAgIH0sXG4gICAgYWRkSXRlbSgpIHtcbiAgICAgIGNvbnN0IGl0ZW0gPSB7fTtcbiAgICAgIHRoaXMuZmllbGRzLmZvckVhY2goZmllbGQgPT4ge1xuICAgICAgICBpdGVtW2ZpZWxkLm5hbWVdID0gbnVsbDtcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLml0ZW1zLnB1c2goaXRlbSk7XG4gICAgfSxcbiAgICByZW1vdmVJdGVtKGluZGV4KSB7XG4gICAgICB0aGlzLml0ZW1zLnNwbGljZShpbmRleCwgMSk7XG4gICAgICBpZih0eXBlb2YgdGhpcy5vbkNoYW5nZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aGlzLm9uQ2hhbmdlKHRoaXMuaXRlbXMpO1xuICAgICAgfVxuICAgIH0sXG4gICAgdXBkYXRlKGUpIHtcbiAgICAgIGlmKHR5cGVvZiB0aGlzLm9uQ2hhbmdlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRoaXMub25DaGFuZ2UodGhpcy5pdGVtcyk7XG4gICAgICB9XG4gICAgfVxuICB9LFxuICBtb3VudGVkKCkge1xuICAgIHRoaXMuaXRlbXMgPSB0aGlzLmRhdGEgfHzCoFtdO1xuICB9LFxuICB3YXRjaDoge1xuICAgIGRhdGEoKSB7XG4gICAgICB0aGlzLml0ZW1zID0gdGhpcy5kYXRhIHx8wqBbXTtcbiAgICB9LFxuICAgIGVycm9ycygpIHtcbiAgICAgIHRoaXMuZXJyb3JEYXRhID0gdGhpcy5lcnJvcnMgfHzCoHt9O1xuICAgIH1cbiAgfVxufVxuPC9zY3JpcHQ+XG5cbjxzdHlsZT5cblxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZT5cbiAgPGRpdiBjbGFzcz1cInYtZmlsZVwiPlxuICAgIDxidXR0b24gQGNsaWNrPVwiY2xpY2tGaWxlSW5wdXRcIiBjbGFzcz1cInYtZmlsZV9fYnV0dG9uIGJ0biBidG4tLXdoaXRlXCIgOmRpc2FibGVkPVwibGltaXRSZWFjaGVkXCI+e3tsb2MoJ2FkZEZpbGVzJyl9fTwvYnV0dG9uPlxuICAgIDxpbnB1dCByZWY9XCJmaWxlSW5wdXRcIiA6ZGlzYWJsZWQ9XCJsaW1pdFJlYWNoZWRcIiBjbGFzcz1cInYtZmlsZV9fZmlsZS1pbnB1dFwiIHR5cGU9XCJmaWxlXCIgOm11bHRpcGxlPVwiISFtdWx0aXBsZVwiIHYtb246Y2hhbmdlPVwib25GaWxlQ2hhbmdlXCI+XG4gICAgPGRpdiB2LWlmPVwicmVhZEZpbGVzLmxlbmd0aFwiIGNsYXNzPVwidi1maWxlX19maWxlc1wiPlxuICAgICAgPGg0IGNsYXNzPVwidi1maWxlX19maWxlcy10aXRsZVwiPnt7bG9jKCdhZGRlZEZpbGVzJyl9fTwvaDQ+XG4gICAgICA8dGFibGUgY2xhc3M9XCJ0YWJsZVwiPlxuICAgICAgICA8dHIgdi1mb3I9XCIoZmlsZSwgaW5kZXgpIGluIHJlYWRGaWxlc1wiIHYtYmluZDprZXk9XCJpbmRleFwiPlxuICAgICAgICAgIDx0ZD57e2ZpbGUubmFtZX19PC90ZD5cbiAgICAgICAgICA8dGQgY2xhc3M9XCJ0YWJsZV9fdGQgaXMtYWxpZ24tcmlnaHRcIj48YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi0td2hpdGUgdi1maWxlX19yZW1vdmUtYnV0dG9uXCIgQGNsaWNrPVwicmVtb3ZlRmlsZShpbmRleClcIj57e2xvYygncmVtb3ZlRmlsZScpfX08L2J1dHRvbj48L3RkPlxuICAgICAgICA8L3RyPlxuICAgICAgPC90YWJsZT5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5leHBvcnQgZGVmYXVsdCB7XG4gIG5hbWU6ICdWRmlsZScsXG4gIGRhdGE6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcmVhZEZpbGVzOiBbXVxuICAgIH1cbiAgfSxcbiAgcHJvcHM6IFsnbXVsdGlwbGUnLCAnb24tY2hhbmdlJywgJ2ZpbGUtY291bnQtbGltaXQnXSxcbiAgY29tcHV0ZWQ6IHtcbiAgICBsaW1pdFJlYWNoZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5maWxlQ291bnRMaW1pdCA/IHRoaXMuZmlsZUNvdW50TGltaXQgPD0gdGhpcy5yZWFkRmlsZXMubGVuZ3RoIDogZmFsc2U7XG4gICAgfVxuICB9LFxuICBtZXRob2RzOiB7XG4gICAgcmVtb3ZlRmlsZShpbmRleCkge1xuICAgICAgdGhpcy5yZWFkRmlsZXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgIHRoaXMub25DaGFuZ2UodGhpcy5yZWFkRmlsZXMpO1xuICAgIH0sXG4gICAgY2xpY2tGaWxlSW5wdXQoKSB7XG4gICAgICB0aGlzLiRyZWZzLmZpbGVJbnB1dC5jbGljaygpO1xuICAgIH0sXG4gICAgLy8gSWYgeW91IHVwZGF0ZSB0aGlzIGZ1bmN0aW9uLCByZW1lbWJlciB0byB1cGRhdGUgaXQgdG8gU3RhZ2UgYXBwLWNvcmUgcnVsZXMgdG9vXG4gICAgaXNEYXRhVXJsKGRhdGFVcmwpIHtcbiAgICAgIGNvbnN0IHJlZ2V4ID0gL15kYXRhOihbYS16XStcXC9bYS16MC05LSsuXSsoO1thLXotXSs9W2EtejAtOS1dKyk/KT8oO2Jhc2U2NCk/LChbYS16MC05ISQmJywoKSorOz1cXC0uX346QFxcLz8lXFxzXSopKiQvaTtcbiAgICAgIHJldHVybiAhIWRhdGFVcmwudHJpbSgpLm1hdGNoKHJlZ2V4KTtcbiAgICB9LFxuICAgIG9uRmlsZUNoYW5nZShlKSB7XG4gICAgICBjb25zdCBmaWxlcyA9IGUudGFyZ2V0LmZpbGVzIHx8IGUuZGF0YVRyYW5zZmVyLmZpbGVzIHx8IFtdO1xuXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZpbGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGZpbGUgPSBmaWxlc1tpXTtcbiAgICAgICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcblxuICAgICAgICByZWFkZXIuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsICgpID0+IHtcbiAgICAgICAgICBpZighdGhpcy5saW1pdFJlYWNoZWQgJiYgdGhpcy5pc0RhdGFVcmwocmVhZGVyLnJlc3VsdCkpIHtcbiAgICAgICAgICAgIHRoaXMucmVhZEZpbGVzLnB1c2goe1xuICAgICAgICAgICAgICBkYXRhOiByZWFkZXIucmVzdWx0LFxuICAgICAgICAgICAgICBmaWxlOiBmaWxlLFxuICAgICAgICAgICAgICBuYW1lOiBmaWxlLm5hbWUsXG4gICAgICAgICAgICAgIHNpemU6IGZpbGUuc2l6ZSxcbiAgICAgICAgICAgICAgdHlwZTogZmlsZS50eXBlXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaWYodHlwZW9mIHRoaXMub25DaGFuZ2UgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgdGhpcy5vbkNoYW5nZSh0aGlzLnJlYWRGaWxlcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LCBmYWxzZSk7XG5cbiAgICAgICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoZmlsZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG48L3NjcmlwdD5cblxuPHN0eWxlPlxuXG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlPlxuICA8ZGl2IGNsYXNzPVwidi1mb3JtLWZpZWxkXCI+XG4gICAgPCEtLSBsYWJlbCAtLT5cbiAgICA8bGFiZWwgdi1pZj1cIihmaWVsZERhdGEudHlwZSAhPT0gJ2hpZGRlbicgJiYgZmllbGREYXRhLnR5cGUgIT09ICdoZWFkaW5nJyAmJiBmaWVsZERhdGEudHlwZSAhPT0gJ2Jvb2wnKVwiIDpmb3I9XCJnZW5lcmF0ZWRJZFwiIGNsYXNzPVwidi1mb3JtLWZpZWxkX19sYWJlbFwiPnt7ZmllbGREYXRhLmxhYmVsfX08L2xhYmVsPlxuICAgIDxsYWJlbCB2LWlmPVwiZmllbGREYXRhLnR5cGUgPT0gJ2Jvb2wnXCIgY2xhc3M9XCJ2LWZvcm0tZmllbGRfX2xhYmVsXCI+e3tmaWVsZERhdGEubGFiZWx9fTwvbGFiZWw+XG4gICAgPGRpdiB2LWlmPVwiZmllbGREYXRhLmhlbHBcIiB2LWh0bWw9XCJzcGFuKGZpZWxkRGF0YS5oZWxwKVwiIC8+XG5cbiAgICA8IS0tIGVycm9ycyAtLT5cbiAgICA8cCBjbGFzcz1cInYtZm9ybS1maWVsZF9fZXJyb3JzXCIgdi1pZj1cImVycm9yTWVzc2FnZXMubGVuZ3RoXCI+XG4gICAgICA8c3BhbiB2LWZvcj1cIihtZXNzYWdlLCBpbmRleCkgaW4gZXJyb3JNZXNzYWdlc1wiIHYtYmluZDprZXk9XCJpbmRleFwiPnt7bWVzc2FnZX19PGJyPjwvc3Bhbj5cbiAgICA8L3A+XG5cbiAgICA8IS0tIGlucHV0IHR5cGUgdGV4dCAtLT5cbiAgICA8aW5wdXQgdi1pZj1cImZpZWxkRGF0YS50eXBlID09PSAndGV4dCdcIiBjbGFzcz1cInYtZm9ybS1maWVsZF9fdGV4dFwiIDppZD1cImdlbmVyYXRlZElkXCIgdi1tb2RlbD1cImZpZWxkRGF0YS52YWx1ZVwiIHR5cGU9XCJ0ZXh0XCIgOnBsYWNlaG9sZGVyPVwiZmllbGREYXRhLnBsYWNlaG9sZGVyXCIgdi1vbjpibHVyPVwib25GaWVsZEJsdXJcIiB2LW9uOmlucHV0PVwidXBkYXRlRm9ybURhdGFcIiB2LW9uOmtleWRvd24uZW50ZXIucHJldmVudD5cbiAgICA8IS0tIGlucHV0IHR5cGUgdGV4dGFyZWEgLS0+XG4gICAgPHRleHRhcmVhIHYtaWY9XCJmaWVsZERhdGEudHlwZSA9PT0gJ3RleHRhcmVhJ1wiIGNsYXNzPVwidi1mb3JtLWZpZWxkX190ZXh0XCIgOmlkPVwiZ2VuZXJhdGVkSWRcIiB2LW1vZGVsPVwiZmllbGREYXRhLnZhbHVlXCIgdi1vbjppbnB1dD1cInVwZGF0ZUZvcm1EYXRhXCIgOnBsYWNlaG9sZGVyPVwiZmllbGREYXRhLnBsYWNlaG9sZGVyXCI+PC90ZXh0YXJlYT5cbiAgICA8IS0tIGRhdGVwaWNrZXIgLS0+XG4gICAgPGRhdGVwaWNrZXIgdi1pZj1cImZpZWxkRGF0YS50eXBlID09PSAnZGF0ZSdcIiA6bGFuZ3VhZ2U9XCJsYW5ndWFnZVwiIDpmb3JtYXQ9XCInZGQuTU0ueXl5eSdcIiA6Y2xlYXItYnV0dG9uPVwidHJ1ZVwiIGNsYXNzPVwidi1mb3JtLWZpZWxkX19kYXRlXCIgOmlkPVwiZ2VuZXJhdGVkSWRcIiB2LW1vZGVsPVwiZmllbGREYXRhLnZhbHVlXCIgQGlucHV0PVwidXBkYXRlRm9ybURhdGFcIj48L2RhdGVwaWNrZXI+XG5cbiAgICA8aW5wdXQgdi1pZj1cImZpZWxkRGF0YS50eXBlID09PSAnZW1haWwnXCIgY2xhc3M9XCJ2LWZvcm0tZmllbGRfX2VtYWlsXCIgOmlkPVwiZ2VuZXJhdGVkSWRcIiB2LW1vZGVsPVwiZmllbGREYXRhLnZhbHVlXCIgdHlwZT1cImVtYWlsXCIgdi1vbjppbnB1dD1cInVwZGF0ZUZvcm1EYXRhXCI+XG4gICAgPHYtcGFzcy1zdHJlbmd0aCB2LWlmPVwiZmllbGREYXRhLnR5cGUgPT09ICdwYXNzd29yZC1zdHJlbmd0aCdcIiA6cGFzc3dvcmQ9XCJmaWVsZFZhbHVlXCI+XG4gICAgICA8aW5wdXQgYXV0b2NvbXBsZXRlPVwibmV3LXBhc3N3b3JkXCIgY2xhc3M9XCJ2LWZvcm0tZmllbGRfX3Bhc3N3b3JkIHYtcGFzcy1zdHJlbmd0aF9fcGFzc3dvcmQtZmllbGRcIiA6aWQ9XCJnZW5lcmF0ZWRJZFwiIHYtbW9kZWw9XCJmaWVsZERhdGEudmFsdWVcIiB0eXBlPVwicGFzc3dvcmRcIiB2LW9uOmlucHV0PVwidXBkYXRlRm9ybURhdGFcIj5cbiAgICA8L3YtcGFzcy1zdHJlbmd0aD5cbiAgICA8aW5wdXQgdi1pZj1cImZpZWxkRGF0YS50eXBlID09PSAncGFzc3dvcmQnXCIgYXV0b2NvbXBsZXRlPVwibmV3LXBhc3N3b3JkXCIgY2xhc3M9XCJ2LWZvcm0tZmllbGRfX3Bhc3N3b3JkXCIgOmlkPVwiZ2VuZXJhdGVkSWRcIiB2LW1vZGVsPVwiZmllbGREYXRhLnZhbHVlXCIgdHlwZT1cInBhc3N3b3JkXCIgdi1vbjppbnB1dD1cInVwZGF0ZUZvcm1EYXRhXCI+XG4gICAgPCEtLSBpbnB1dCB0eXBlIGhpZGRlbiAtLT5cbiAgICA8aW5wdXQgdi1pZj1cImZpZWxkRGF0YS50eXBlID09PSAnaGlkZGVuJ1wiIHR5cGU9XCJoaWRkZW5cIiB2LW1vZGVsPVwiZmllbGREYXRhLnZhbHVlXCI+XG4gICAgPCEtLSBpbnB1dCB0eXBlIHNlbGVjdCAoY3VzdG9tIHN0eWxlKS0tPlxuICAgIDxkaXYgdi1pZj1cImZpZWxkRGF0YS50eXBlID09ICdzZWxlY3QnXCIgY2xhc3M9XCJjdXN0b20tc2VsZWN0IGN1c3RvbS1zZWxlY3QtZnVsbC13aWR0aCBqcy1jdXN0b20tc2VsZWN0LXdyYXBwZXJcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjdXN0b20tc2VsZWN0X19kcm9wZG93biBjdXN0b20tc2VsZWN0X19kcm9wZG93bi0tZnVsbC13aWR0aCBqcy1jdXN0b20tc2VsZWN0LWRyb3Bkb3duXCI+PC9kaXY+XG4gICAgICA8c3BhbiA6aWQ9XCJnZW5lcmF0ZWRJZFwiIGNsYXNzPVwiY3VzdG9tLXNlbGVjdF9fdGV4dCBqcy1jdXN0b20tc2VsZWN0LXRleHRob2xkZXJcIj57e3NlbGVjdGVkT3B0aW9uVGV4dH19PC9zcGFuPlxuICAgICAgPHNlbGVjdCA6aWQ9XCJnZW5lcmF0ZWRJZFwiIHYtbW9kZWw9XCJmaWVsZERhdGEudmFsdWVcIiB2LW9uOmNoYW5nZT1cInVwZGF0ZUZvcm1EYXRhXCIgY2xhc3M9XCJmb3JtX19maWVsZC1zZWxlY3QganMtY3VzdG9tLXNlbGVjdCBmb3JtX19maWVsZC1zZWxlY3QtY3VzdG9tIGZvcm1fX2ZpZWxkLXNlbGVjdC1jdXN0b20tZnVsbC13aWR0aCBqcy1sYW5nLXNlbGVjdCBsYW5nX3NlbGVjdFwiPlxuICAgICAgICA8b3B0aW9uIGRpc2FibGVkIHZhbHVlPVwiXCI+e3tsb2MoJ2Zvcm1zLnNlbGVjdC5kZWZhdWx0RW1wdHknKX19PC9vcHRpb24+XG4gICAgICAgICAgICA8b3B0aW9uIHYtZm9yPVwib3B0aW9uIGluIGZpZWxkRGF0YS5vcHRpb25zXCIgIHNlbGVjdGVkPVwia2V5ID09IG9wdGlvbi50ZXh0XCIgdi1iaW5kOnZhbHVlPVwib3B0aW9uLnZhbHVlXCIgdi1iaW5kOmtleT1cIm9wdGlvbi50ZXh0XCIgdi1iaW5kOnRleHQ9XCJvcHRpb24udGV4dFwiPlxuICAgICAgICAgIHt7IG9wdGlvbi50ZXh0IH19XG4gICAgICAgIDwvb3B0aW9uPlxuICAgICAgPC9zZWxlY3Q+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIHNlY3Rpb24gaGVhZGVyIC0tPlxuICAgIDxkaXYgdi1pZj1cImZpZWxkRGF0YS50eXBlID09ICdoZWFkaW5nJ1wiIGNsYXNzPVwidi1mb3JtX19zZWN0aW9uLWhlYWRpbmdcIj5cbiAgICAgIDxoMz57e2ZpZWxkRGF0YS5oZWFkaW5nfX08L2gzPlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSByYWRpbyBidXR0b24gLS0+XG4gICAgPGRpdiB2LWlmPVwiZmllbGREYXRhLnR5cGUgPT0gJ2Jvb2wnXCIgY2xhc3M9XCJ2LWZvcm0tZmllbGRfX3JhZGlvXCI+XG4gICAgICA8bGFiZWwgY2xhc3M9XCJjaGVja2JveC1pbmxpbmVcIj48aW5wdXQgdHlwZT1cInJhZGlvXCIgOmlkPVwiZ2VuZXJhdGVkSWRcIiA6bmFtZT1cImdlbmVyYXRlZElkXCIgdi1tb2RlbD1cImZpZWxkRGF0YS52YWx1ZVwiIHYtb246Y2hhbmdlPVwidXBkYXRlRm9ybURhdGFcIiB2YWx1ZT1cIjFcIj4ge3tsb2MoJ2Zvcm1zLnJhZGlvLnllcycpfX0gPC9sYWJlbD5cbiAgICAgIDxsYWJlbCBjbGFzcz1cImNoZWNrYm94LWlubGluZVwiPjxpbnB1dCB0eXBlPVwicmFkaW9cIiA6aWQ9XCJnZW5lcmF0ZWRJZFwiIDpuYW1lPVwiZ2VuZXJhdGVkSWRcIiB2LW1vZGVsPVwiZmllbGREYXRhLnZhbHVlXCIgdi1vbjpjaGFuZ2U9XCJ1cGRhdGVGb3JtRGF0YVwiIHZhbHVlPVwiMFwiPiB7e2xvYygnZm9ybXMucmFkaW8ubm8nKX19IDwvbGFiZWw+XG4gICAgPC9kaXY+XG5cbiAgICA8di1kYXRhLWl0ZW1zIHYtaWY9XCJmaWVsZERhdGEudHlwZSA9PT0gJ2RhdGEtaXRlbXMnXCIgOmhpZGUtZW1wdHk9XCJmaWVsZERhdGEuaGlkZUVtcHR5XCIgIDpzdW0tZmllbGQ9XCJmaWVsZERhdGEuc3VtRmllbGRcIiA6bXVsdGlwbHktZmllbGQ9XCJmaWVsZERhdGEubXVsdGlwbHlGaWVsZFwiIDpmaWVsZHM9XCJmaWVsZERhdGEuZmllbGRzXCIgOmRhdGE9XCJmaWVsZERhdGEudmFsdWVcIiA6ZXJyb3JzPVwiZXJyb3JJdGVtc1wiIDphZGQtYnRuLXRleHQ9XCJmaWVsZERhdGEuYWRkQnRuVGV4dFwiPjwvdi1kYXRhLWl0ZW1zPlxuICAgIDwhLS0gaW5wdXQgdHlwZSBzZWxlY3QgKGRlZmF1bHQgc3R5bGUpIC0tPlxuICAgIDwhLS08c2VsZWN0IHYtaWY9XCJmaWVsZERhdGEudHlwZSA9PT0gJ3NlbGVjdCdcIiA6aWQ9XCJnZW5lcmF0ZWRJZFwiIHYtbW9kZWw9XCJmaWVsZERhdGEudmFsdWVcIiB2LW9uOmNoYW5nZT1cInVwZGF0ZUZvcm1EYXRhXCI+XG4gICAgICA8b3B0aW9uIGRpc2FibGVkIHZhbHVlPVwiXCI+e3tsb2MoJ2Zvcm1zLnNlbGVjdC5kZWZhdWx0RW1wdHknKX19PC9vcHRpb24+XG4gICAgICA8b3B0aW9uIHYtZm9yPVwib3B0aW9uIGluIGZpZWxkRGF0YS5vcHRpb25zXCIgdi1iaW5kOnZhbHVlPVwib3B0aW9uLnZhbHVlXCIgdi1iaW5kOmtleT1cIm9wdGlvbi52YWx1ZVwiPlxuICAgICAgICB7eyBvcHRpb24udGV4dCB9fVxuICAgICAgPC9vcHRpb24+XG4gICAgPC9zZWxlY3Q+LS0+XG4gICAgPCEtLSBpbnB1dCB0eXBlIGZpbGUgLS0+XG4gICAgPHYtZmlsZSB2LWlmPVwiZmllbGREYXRhLnR5cGUgPT09ICdmaWxlJ1wiIDpmaWxlLWNvdW50LWxpbWl0PVwiZmllbGREYXRhLmZpbGVDb3VudExpbWl0XCIgOm11bHRpcGxlPVwiISFmaWVsZERhdGEubXVsdGlwbGVcIiA6b24tY2hhbmdlPVwib25GaWVsZENoYW5nZVwiPjwvdi1maWxlPlxuICA8L2Rpdj5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5cbmltcG9ydCBWUGFzc1N0cmVuZ3RoIGZyb20gJy4vdi1wYXNzLXN0cmVuZ3RoLnZ1ZSc7XG5pbXBvcnQgVkZpbGUgZnJvbSAnLi92LWZpbGUudnVlJztcbmltcG9ydCBkYXRlcGlja2VyIGZyb20gJ3Z1ZWpzLWRhdGVwaWNrZXInO1xuaW1wb3J0IFZEYXRhSXRlbXMgZnJvbSAnLi92LWRhdGEtaXRlbXMudnVlJztcblxuZnVuY3Rpb24gZ3VpZEdlbmVyYXRvcigpIHtcbiAgdmFyIFM0ID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuICgoKDErTWF0aC5yYW5kb20oKSkqMHgxMDAwMCl8MCkudG9TdHJpbmcoMTYpLnN1YnN0cmluZygxKTtcbiAgfTtcblxuICByZXR1cm4gKFM0KCkrUzQoKStcIi1cIitTNCgpK1wiLVwiK1M0KCkrXCItXCIrUzQoKStcIi1cIitTNCgpK1M0KCkrUzQoKSk7XG59XG5leHBvcnQgZGVmYXVsdCB7XG4gIGNvbXBvbmVudHM6IHtcbiAgICAndi1wYXNzLXN0cmVuZ3RoJzogVlBhc3NTdHJlbmd0aCxcbiAgICAnZGF0ZXBpY2tlcic6IGRhdGVwaWNrZXIsXG4gICAgJ3YtZmlsZSc6IFZGaWxlLFxuICAgICd2LWRhdGEtaXRlbXMnOiBWRGF0YUl0ZW1zXG4gIH0sXG4gIHByb3BzOiBbJ2ZpZWxkLWRhdGEnLCAnZm9ybURhdGEnLCAnZm9ybUVycm9ycycsICdvbi1jaGFuZ2UnLCAnb24tYmx1ciddLFxuICBkYXRhOiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGdlbmVyYXRlZElkOiBndWlkR2VuZXJhdG9yKCksXG4gICAgICBmaWVsZFZhbHVlOiAnJ1xuICAgIH1cbiAgfSxcbiAgbWV0aG9kczoge1xuICAgIHNwYW4odGV4dCkge1xuICAgICAgcmV0dXJuIGA8c3Bhbj4ke3RleHR9PC9zcGFuPmBcbiAgICB9LFxuICAgIHVwZGF0ZUZvcm1EYXRhKCkge1xuICAgICAgdGhpcy5mb3JtRGF0YVt0aGlzLmZpZWxkRGF0YS5uYW1lXSA9IHRoaXMuZmllbGREYXRhLnZhbHVlO1xuICAgICAgdGhpcy5maWVsZFZhbHVlID0gdGhpcy5maWVsZERhdGEudmFsdWU7XG4gICAgICAvLyBUcmlnZ2VyIG9uQ2hhbmdlIGNhbGxiYWNrIGlmIGFueVxuICAgICAgaWYodHlwZW9mIHRoaXMub25DaGFuZ2UgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhpcy5vbkNoYW5nZSh0aGlzLmZvcm1EYXRhKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIG9uRmllbGRCbHVyKCkge1xuICAgICAgaWYgKHR5cGVvZiB0aGlzLm9uQmx1ciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aGlzLm9uQmx1cih0aGlzLmZpZWxkRGF0YSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBvbkZpZWxkQ2hhbmdlKGRhdGEpIHtcbiAgICAgIHRoaXMuZmllbGREYXRhLnZhbHVlID0gZGF0YTtcbiAgICAgIHRoaXMudXBkYXRlRm9ybURhdGEoKTtcbiAgICB9XG4gIH0sXG4gIGNvbXB1dGVkOiB7XG4gICAgbGFuZ3VhZ2UoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kc3RvcmUuc3RhdGUubGFuZ3VhZ2U7XG4gICAgfSxcbiAgICBlcnJvck1lc3NhZ2VzKCkge1xuICAgICAgY29uc3QgZXJyb3IgPSB0aGlzLmZvcm1FcnJvcnNbdGhpcy5maWVsZERhdGEubmFtZV07XG5cbiAgICAgIHJldHVybiBlcnJvciAmJiBlcnJvci5tZXNzYWdlcyB8fCBbXTtcbiAgICB9LFxuICAgIGVycm9ySXRlbXMoKSB7XG4gICAgICBjb25zdCBlcnJvciA9IHRoaXMuZm9ybUVycm9yc1t0aGlzLmZpZWxkRGF0YS5uYW1lXTtcblxuICAgICAgcmV0dXJuIGVycm9yICYmIGVycm9yLml0ZW1zIHx8wqBudWxsO1xuICAgIH0sXG4gICAgcGFzc3dvcmRGaWVsZFZhbHVlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZmllbGREYXRhLnR5cGUgPT09ICdwYXNzd29yZCcgJiYgdGhpcy5maWVsZFZhbHVlIHx8ICcnO1xuICAgIH0sXG4gICAgc2VsZWN0ZWRPcHRpb25UZXh0KCkgIHtcblxuICAgICAgZm9yKHZhciBpID0gMCA7IGkgPCB0aGlzLmZpZWxkRGF0YS5vcHRpb25zLmxlbmd0aCA7IGkrKyl7XG4gICAgICAgIGlmKHRoaXMuZmllbGRWYWx1ZSA9PSB0aGlzLmZpZWxkRGF0YS5vcHRpb25zW2ldLnZhbHVlKXtcbiAgICAgICAgICByZXR1cm4gdGhpcy5maWVsZERhdGEub3B0aW9uc1tpXS50ZXh0O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gXCJcIjtcbiAgICB9XG4gIH0sXG4gIG1vdW50ZWQ6IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLnVwZGF0ZUZvcm1EYXRhKCk7XG4gIH0sXG4gIHdhdGNoOiB7XG4gICAgLy8gVXBkYXRlIGZvcm1EYXRhIHdoZW4gcGFzc2VkIGZpZWxkIGRhdGEgY2hhbmdlXG4gICAgZmllbGREYXRhKCkge1xuICAgICAgdGhpcy51cGRhdGVGb3JtRGF0YSgpO1xuICAgIH1cbiAgfVxufVxuPC9zY3JpcHQ+XG5cbjxzdHlsZT5cblxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZT5cbiAgPGZvcm0gY2xhc3M9XCJ2LWZvcm1cIiBhY3Rpb249XCJcIiBtZXRob2Q9XCJwb3N0XCIgdi1vbjpzdWJtaXQucHJldmVudD1cInN1Ym1pdFByZXZlbnRlZFwiPlxuICAgIDx2LWZvcm0tZmllbGQgdi1mb3I9XCJmaWVsZCBpbiBmaWVsZHNcIiB2LWJpbmQ6a2V5PVwiZmllbGQubmFtZVwiIDpmaWVsZC1kYXRhPVwiZmllbGRcIiA6Zm9ybS1kYXRhPVwiZm9ybURhdGFcIiA6Zm9ybS1lcnJvcnM9XCJmb3JtRXJyb3JzXCIgOm9uLWNoYW5nZT1cIm9uQ2hhbmdlXCIgOm9uLWJsdXI9XCJvbkJsdXJcIj48L3YtZm9ybS1maWVsZD5cbiAgICA8c2xvdCBuYW1lPVwiYnV0dG9uc1wiPjwvc2xvdD5cbiAgICA8cCB2LWlmPVwiZm9ybUVycm9ycy53YXJyYW50eVJlZ2lzdGVyYXRpb25Eb25lXCIgY2xhc3M9XCJmb3JtX19lcnJvci1tZXNzYWdlIGZpcnN0XCI+e3tsb2MoJ2Zvcm1zLm1lc3NhZ2VzLndhcnJhbnR5UmVnaXN0ZXJhdGlvbk5vdERvbmUnKX19PC9wPlxuICAgIDxwIHYtaWY9XCJPYmplY3Qua2V5cyhmb3JtRXJyb3JzKS5sZW5ndGggPiAwICYmICFmb3JtRXJyb3JzLmZpZWxkRXJyb3JcIiBjbGFzcz1cImZvcm1fX2Vycm9yLW1lc3NhZ2UgZmlyc3RcIj57e2xvYygnZm9ybXMubWVzc2FnZXMuaGFzRXJyb3JzJyl9fTwvcD5cbiAgPC9mb3JtPlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBWRm9ybUZpZWxkIGZyb20gJy4vdi1mb3JtLWZpZWxkLnZ1ZSc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgY29tcG9uZW50czoge1xuICAgICd2LWZvcm0tZmllbGQnOiBWRm9ybUZpZWxkXG4gIH0sXG4gIHByb3BzOiBbJ2ZpZWxkcycsICdmb3JtLWRhdGEnLCAnZm9ybS1lcnJvcnMnLCAnb24tY2hhbmdlJywgJ29uLWJsdXInXSxcbiAgbWV0aG9kczoge1xuICAgIC8vIFByZXZlbnQgZGVmYXVsdCBzdWJtaXRzXG4gICAgc3VibWl0UHJldmVudGVkKCkge1xuICAgIH1cbiAgfVxufVxuPC9zY3JpcHQ+XG5cbjxzdHlsZT5cblxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZT5cbiAgPGRpdiBjbGFzcz1cInYtbW9kYWwtY29udGVudCBuby1pbm5lci1tYXJnaW5cIj5cbiAgICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyXCI+XG4gICAgICA8aDMgdi1pZj1cInRpdGxlXCIgY2xhc3M9XCJtb2RhbC10aXRsZSB2LW1vZGFsLWNvbnRlbnRfX3RpdGxlXCI+e3t0aXRsZX19PC9oMz5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tLWNhbmNlbCBjYW5jZWxcIiB0eXBlPVwiYnV0dG9uXCIgdi1vbjpjbGljaz1cImNsb3NlXCI+eDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJ2LW1vZGFsLWNvbnRlbnRfX2NvbnRlbnRcIj48c2xvdD48L3Nsb3Q+PC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cInYtbW9kYWwtY29udGVudF9fYnV0dG9uc1wiPjxzbG90IG5hbWU9XCJidXR0b25zXCI+PC9zbG90PjwvZGl2PlxuICA8L2Rpdj5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5leHBvcnQgZGVmYXVsdCB7XG4gIHByb3BzOiBbJ3RpdGxlJ10sXG4gIG1ldGhvZHM6IHtcbiAgICBjbG9zZSgpIHtcbiAgICAgIHRoaXMuJGVtaXQoJ2Nsb3NlJyk7XG4gICAgfVxuICB9XG59XG48L3NjcmlwdD5cblxuPHN0eWxlPlxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZT5cbiAgPHNwYW4+XG4gICAgPHNwYW4gdi1pZj1cImRpc3BsYXlPbmx5XCI+e3tkaXNwbGF5VmFsdWV9fTwvc3Bhbj5cbiAgICA8aW5wdXQgdi1lbHNlIDpjbGFzcz1cImlucHV0Q2xhc3NcIiB0eXBlPVwidGV4dFwiIHYtbW9kZWw9XCJkaXNwbGF5VmFsdWVcIiBAYmx1cj1cImlzSW5wdXRBY3RpdmUgPSBmYWxzZVwiIEBmb2N1cz1cImlzSW5wdXRBY3RpdmUgPSB0cnVlXCIgdi1vbjprZXlkb3duLmVudGVyLnByZXZlbnQvPlxuICA8L3NwYW4+XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAnVkN1cnJlbmN5SW5wdXQnLFxuICBwcm9wczogWyd2YWx1ZScsICdpbnB1dC1jbGFzcycsICdkaXNwbGF5LW9ubHknLCAnZGVjaW1hbC1jaGFyJ10sXG4gIGRhdGE6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB7XG4gICAgICBpc0lucHV0QWN0aXZlOiBmYWxzZSxcbiAgICAgIGRlY2ltYWw6ICcsJ1xuICAgIH1cbiAgfSxcbiAgY29tcHV0ZWQ6IHtcbiAgICBkaXNwbGF5VmFsdWU6IHtcbiAgICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIGxldCB2YWx1ZSA9IHRoaXMudmFsdWU7XG4gICAgICAgIC8vIGNoYW5nZSB2YWx1ZSB0byB6ZXJvIGlmIG5vIG51bWJlciBpcyBwYXNzZWRcbiAgICAgICAgaWYodGhpcy52YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICAgIHRoaXMuJGVtaXQoJ2lucHV0JywgMClcbiAgICAgICAgICB2YWx1ZSA9IDA7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5pc0lucHV0QWN0aXZlKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Rm9ybWF0dGVkRm9ySW5wdXQodmFsdWUsIGZhbHNlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBVc2VyIGlzIG5vdCBtb2RpZnlpbmcgbm93LiBGb3JtYXQgZGlzcGxheSB2YWx1ZSBmb3IgdXNlciBpbnRlcmZhY2VcbiAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnRvU3RyaW5nKCk7XG5cbiAgICAgICAgICB2YWx1ZSA9IHBhcnNlRmxvYXQodmFsdWUucmVwbGFjZSgvLC9nLCAnLicpKS50b0ZpeGVkKDIpO1xuXG4gICAgICAgICAgLy8gRW5zdXJlIHRoYXQgaXQgaXMgbm90IE5hTlxuICAgICAgICAgIGlmIChpc05hTih2YWx1ZSkpIHtcbiAgICAgICAgICAgIHZhbHVlID0gMDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLiRlbWl0KCdpbnB1dCcsIHBhcnNlRmxvYXQodmFsdWUpKTtcblxuICAgICAgICAgIHJldHVybiB0aGlzLmdldEZvcm1hdHRlZEZvcklucHV0KHZhbHVlLCB0cnVlKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHNldDogZnVuY3Rpb24obW9kaWZpZWRWYWx1ZSkge1xuICAgICAgICAvLyBSZWNhbGN1bGF0ZSB2YWx1ZSBhZnRlciBpZ25vcmluZyBcIiRcIiwgXCIsXCIgYW5kIFwiLlwiIGluIHVzZXIgaW5wdXRcbiAgICAgICAgY29uc3QgcmVnRXhwID0gbmV3IFJlZ0V4cCgnW15cXFxcZFxcXFwuLF0nLCAnZycpO1xuICAgICAgICBsZXQgbmV3VmFsdWUgPSBtb2RpZmllZFZhbHVlLnJlcGxhY2UocmVnRXhwLCBcIlwiKVxuXG4gICAgICAgIC8vIE5vdGU6IHdlIGNhbm5vdCBzZXQgdGhpcy52YWx1ZSBhcyBpdCBpcyBhIFwicHJvcFwiLiBJdCBuZWVkcyB0byBiZSBwYXNzZWQgdG8gcGFyZW50IGNvbXBvbmVudFxuICAgICAgICAvLyAkZW1pdCB0aGUgZXZlbnQgc28gdGhhdCBwYXJlbnQgY29tcG9uZW50IGdldHMgaXRcbiAgICAgICAgdGhpcy4kZW1pdCgnaW5wdXQnLCBuZXdWYWx1ZSlcbiAgICAgIH1cbiAgICB9XG4gIH0sXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRGb3JtYXR0ZWRGb3JJbnB1dCh2YWx1ZSkge1xuICAgICAgbGV0IGRpc3BsYXlWYWx1ZSA9IHZhbHVlLnRvU3RyaW5nKCk7XG5cbiAgICAgIGNvbnN0IHJlZ0V4cCA9IG5ldyBSZWdFeHAoJ1teXFxcXGRcXFxcLixdJywgJ2cnKTtcbiAgICAgIGRpc3BsYXlWYWx1ZSA9IGRpc3BsYXlWYWx1ZS5yZXBsYWNlKHJlZ0V4cCwgXCJcIik7XG5cbiAgICAgIGlmKHRoaXMuZGVjaW1hbCA9PT0gJywnKSB7XG4gICAgICAgIGRpc3BsYXlWYWx1ZSA9IGRpc3BsYXlWYWx1ZS5yZXBsYWNlKC9cXC4vLCAnLCcpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZGlzcGxheVZhbHVlXG4gICAgfVxuICB9LFxuICBtb3VudGVkKCkge1xuICAgIHRoaXMuZGVjaW1hbCA9IHRoaXMuZGVjaW1hbENoYXIgfHwgdGhpcy5kZWNpbWFsO1xuICB9XG59XG48L3NjcmlwdD5cblxuPHN0eWxlPlxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZT5cbiAgPGRpdiBjbGFzcz1cInYtcGFzcy1zdHJlbmd0aFwiIDpjbGFzcz1cIm1vZGlmaWVyQ2xhc3NcIj5cbiAgICA8c2xvdD48L3Nsb3Q+XG4gICAgPGRpdiBjbGFzcz1cInYtcGFzcy1zdHJlbmd0aF9fYmFyXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwidi1wYXNzLXN0cmVuZ3RoX19iYXItaW5uZXJcIj48L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwidi1wYXNzLXN0cmVuZ3RoX190ZXh0IHYtcGFzcy1zdHJlbmd0aF9fdGV4dC0tcG9vclwiPnt7bG9jKCdwYXNzU3RyZW5ndGgud2VhaycpfX08L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwidi1wYXNzLXN0cmVuZ3RoX190ZXh0IHYtcGFzcy1zdHJlbmd0aF9fdGV4dC0td2Vha1wiPnt7bG9jKCdwYXNzU3RyZW5ndGgud2VhaycpfX08L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwidi1wYXNzLXN0cmVuZ3RoX190ZXh0IHYtcGFzcy1zdHJlbmd0aF9fdGV4dC0tZ29vZFwiPnt7bG9jKCdwYXNzU3RyZW5ndGguZ29vZCcpfX08L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwidi1wYXNzLXN0cmVuZ3RoX190ZXh0IHYtcGFzcy1zdHJlbmd0aF9fdGV4dC0tc3Ryb25nXCI+e3tsb2MoJ3Bhc3NTdHJlbmd0aC5zdHJvbmcnKX19PC9kaXY+XG4gIDwvZGl2PlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cblxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAnVlBhc3NTdHJlbmd0aCcsXG4gIHByb3BzOiBbJ3Bhc3N3b3JkJ10sXG4gIGNvbXB1dGVkOiB7XG4gICAgLy8gSWYgeW91IGNoYW5nZSBob3cgcGFzc3dvcmQgc2NvcmluZyB3b3JrcywgaW1wbGVtZW50IGNoYW5nZXMgdG8gc2VydmVyIHNpZGUgYWxzbyFcbiAgICBwYXNzd29yZFNjb3JlKCkge1xuICAgICAgY29uc3QgUEFTU1dPUkRfTUlOX0xFTkdUSCA9IDg7XG4gICAgICBjb25zdCBQQVNTV09SRF9NSU5fU1RSRU5HVEggPSA2MDtcbiAgICAgIGNvbnN0IHBhc3MgPSB0aGlzLnBhc3N3b3JkO1xuXG4gICAgICBsZXQgc2NvcmUgPSAwO1xuXG4gICAgICAvLyBhd2FyZCBldmVyeSB1bmlxdWUgbGV0dGVyIHVudGlsIDUgcmVwZXRpdGlvbnNcbiAgICAgIGxldCBsZXR0ZXJzID0ge307XG5cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGFzcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBsZXR0ZXJzW3Bhc3NbaV1dID0gKGxldHRlcnNbcGFzc1tpXV0gfHwgMCkgKyAxO1xuICAgICAgICBzY29yZSArPSA1LjAgLyBsZXR0ZXJzW3Bhc3NbaV1dO1xuICAgICAgfVxuXG4gICAgICAvLyBib251cyBwb2ludHMgZm9yIG1peGluZyBpdCB1cFxuICAgICAgbGV0IHZhcmlhdGlvbnMgPSB7XG4gICAgICAgIGRpZ2l0czogL1xcZC8udGVzdChwYXNzKSxcbiAgICAgICAgbG93ZXI6IC9bYS16XS8udGVzdChwYXNzKSxcbiAgICAgICAgdXBwZXI6IC9bQS1aXS8udGVzdChwYXNzKSxcbiAgICAgICAgbm9uV29yZHM6IC9cXFcvLnRlc3QocGFzcylcbiAgICAgIH07XG5cbiAgICAgIGxldCB2YXJpYXRpb25Db3VudCA9IDA7XG4gICAgICBmb3IgKGxldCBjaGVjayBpbiB2YXJpYXRpb25zKSB7XG4gICAgICAgIHZhcmlhdGlvbkNvdW50ICs9ICh2YXJpYXRpb25zW2NoZWNrXSA9PT0gdHJ1ZSkgPyAxIDogMDtcbiAgICAgIH1cbiAgICAgIHNjb3JlICs9ICh2YXJpYXRpb25Db3VudCAtIDEpICogMTA7XG5cbiAgICAgIC8vIElmIGxlbmd0aCBpcyBiZWxvdyBsaW1pdCwgcmVkdWNlIHBvaW50c1xuICAgICAgaWYgKHBhc3MubGVuZ3RoIDw9IFBBU1NXT1JEX01JTl9MRU5HVEgpIHtcbiAgICAgICAgc2NvcmUgPSBzY29yZSAqIChwYXNzLmxlbmd0aCAvIFBBU1NXT1JEX01JTl9MRU5HVEgpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gc2NvcmU7XG4gICAgfSxcbiAgICBtb2RpZmllckNsYXNzKCkge1xuICAgICAgY29uc3Qgc2NvcmUgPSB0aGlzLnBhc3N3b3JkU2NvcmU7XG5cbiAgICAgIGlmIChzY29yZSA+IDgwKSB7XG4gICAgICAgIHJldHVybiAnaXMtc3Ryb25nJztcbiAgICAgIH1cblxuICAgICAgaWYgKHNjb3JlID4gNjApIHtcbiAgICAgICAgcmV0dXJuICdpcy1nb29kJztcbiAgICAgIH1cblxuICAgICAgaWYgKHNjb3JlID49IDMwKSB7XG4gICAgICAgIHJldHVybiAnaXMtd2Vhayc7XG4gICAgICB9XG5cbiAgICAgIGlmIChzY29yZSA+IDApIHtcbiAgICAgICAgcmV0dXJuICdpcy1wb29yJztcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbjwvc2NyaXB0PlxuXG48c3R5bGU+XG5cbjwvc3R5bGU+XG5cblxuIiwiPHRlbXBsYXRlPlxuICA8ZGl2PlxuICAgIDxkaXYgdi1pZj1cInBhc3N3b3JkVXBkYXRlZFwiPlxuICAgICAgPGgyIHYtaHRtbD1cImxvYygnY29tcG9uZW50cy5jaGFuZ2VQYXNzd29yZC5wYXNzd29yZFVwZGF0ZWQnKVwiPjwvaDI+XG4gICAgPC9kaXY+XG4gICAgPGRpdiB2LWVsc2U+XG4gICAgICA8di1mb3JtIDpmaWVsZHM9XCJmaWVsZHNcIiA6Zm9ybS1kYXRhPVwiZm9ybURhdGFcIiA6Zm9ybS1lcnJvcnM9XCJmb3JtRXJyb3JzXCI+XG4gICAgICAgIDxkaXYgc2xvdD1cImJ1dHRvbnNcIj5cbiAgICAgICAgICA8YnV0dG9uIDpkaXNhYmxlZD1cInNlbmREaXNhYmxlZFwiIHYtb246Y2xpY2s9XCJzZW5kXCIgdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwiYnRuIGJ0bi0td2hpdGVcIj57e2xvYygndXBkYXRlUGFzc3dvcmQnKX19PC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC92LWZvcm0+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cblxuaW1wb3J0IFZGb3JtIGZyb20gJy4vdi1mb3JtLnZ1ZSc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgY29tcG9uZW50czoge1xuICAgICd2LWZvcm0nOiBWRm9ybVxuICB9LFxuICBuYW1lOiAnVmlld0NoYW5nZVBhc3N3b3JkJyxcbiAgZGF0YTogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB7XG4gICAgICBmb3JtRXJyb3JzOiB7fSxcbiAgICAgIGZvcm1EYXRhOiB7fSxcbiAgICAgIHBhc3N3b3JkVXBkYXRlZDogZmFsc2UsXG4gICAgICB0b2tlbjogbnVsbCxcbiAgICAgIHNlbmREaXNhYmxlZDogZmFsc2UsXG4gICAgICByZXNldFRva2VuOiAnJyxcbiAgICB9XG4gIH0sXG4gIGNvbXB1dGVkOiB7XG4gICAgZmllbGRzKCkge1xuICAgICAgcmV0dXJuIFt7XG4gICAgICAgIG5hbWU6ICdjdXJyZW50UGFzc3dvcmQnLFxuICAgICAgICB2YWx1ZTogJycsXG4gICAgICAgIGxhYmVsOiB0aGlzLmxvYygnY3VycmVudFBhc3N3b3JkJyksXG4gICAgICAgIHR5cGU6ICdwYXNzd29yZCdcbiAgICAgIH0sIHtcbiAgICAgICAgbmFtZTogJ25ld1Bhc3N3b3JkJyxcbiAgICAgICAgdmFsdWU6ICcnLFxuICAgICAgICBsYWJlbDogdGhpcy5sb2MoJ25ld1Bhc3N3b3JkJyksXG4gICAgICAgIHR5cGU6ICdwYXNzd29yZC1zdHJlbmd0aCcsXG4gICAgICB9LCB7XG4gICAgICAgIG5hbWU6ICduZXdQYXNzd29yZENvbmZpcm0nLFxuICAgICAgICB2YWx1ZTogJycsXG4gICAgICAgIGxhYmVsOiB0aGlzLmxvYygnbmV3UGFzc3dvcmRBZ2FpbicpLFxuICAgICAgICB0eXBlOiAncGFzc3dvcmQnXG4gICAgICB9XTtcbiAgICB9LFxuICB9LFxuICBtZXRob2RzOiB7XG4gICAgYXN5bmMgc2VuZCgpIHtcbiAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuXG4gICAgICB0aGlzLnNlbmREaXNhYmxlZCA9IHRydWU7XG5cbiAgICAgIHJldHVybiB0aGlzLiRhcGkuY2hhbmdlUGFzc3dvcmQoe1xuICAgICAgICBjdXJyZW50UGFzc3dvcmQ6IHRoaXMuZm9ybURhdGEuY3VycmVudFBhc3N3b3JkLFxuICAgICAgICBuZXdQYXNzd29yZDogdGhpcy5mb3JtRGF0YS5uZXdQYXNzd29yZCxcbiAgICAgICAgbmV3UGFzc3dvcmRDb25maXJtOiB0aGlzLmZvcm1EYXRhLm5ld1Bhc3N3b3JkQ29uZmlybVxuICAgICAgfSlcbiAgICAgIC50aGVuKHJlcyA9PiB7XG4gICAgICAgIHRoaXMuc2VuZERpc2FibGVkID0gZmFsc2U7XG5cbiAgICAgICAgLy8gRXJyb3JzIGluIGZvcm1cbiAgICAgICAgaWYocmVzLmNvZGUgPT09IDQwMCkge1xuICAgICAgICAgIHRoaXMuZm9ybUVycm9ycyA9IHJlcy5yZXN1bHQuZmllbGRzO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYocmVzLmNvZGUgPT09IDIwMCkge1xuICAgICAgICAgIHRoaXMucGFzc3dvcmRVcGRhdGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG59XG48L3NjcmlwdD5cbiIsIjx0ZW1wbGF0ZT5cbiAgPHRoZS0xLWNvbHVtbi1sYXlvdXQ+XG4gICAgPGRpdiBzdHlsZT1cImZsb2F0OiByaWdodDsgbWFyZ2luLWJvdHRvbTogMjBweFwiPlxuICAgICAgPHNwYW4+e3t0aGlzLmxvYygncmVjb3JkcycpfX08L3NwYW4+XG4gICAgICA8ZGl2IGNsYXNzPVwiY3VzdG9tLXNlbGVjdF9fZHJvcGRvd24ganMtY3VzdG9tLXNlbGVjdC1kcm9wZG93blwiIHN0eWxlPVwid2lkdGg6IDgwcHg7IHBvc2l0aW9uOiByZWxhdGl2ZVwiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImN1c3RvbS1zZWxlY3RfX3RleHQganMtY3VzdG9tLXNlbGVjdC10ZXh0aG9sZGVyXCI+e3tzZWxlY3RlZFZhbHVlfX08L3NwYW4+XG4gICAgICAgIDxzZWxlY3Qgdi1tb2RlbD1cInNlbGVjdGVkXCIgQGNoYW5nZT1cIiRyZWZzLnRhYmxlLnNldExpbWl0KCRldmVudC50YXJnZXQudmFsdWUpXCIgY2xhc3M9XCJmb3JtX19maWVsZC1zZWxlY3QganMtY3VzdG9tLXNlbGVjdCBmb3JtX19maWVsZC1zZWxlY3QtY3VzdG9tIGpzLWxhbmctc2VsZWN0IGxhbmdfc2VsZWN0XCI+XG4gICAgICAgICAgPG9wdGlvbiB2LWJpbmQ6dGV4dD1cIjEwXCIgdmFsdWU9XCIxMFwiPjEwPC9vcHRpb24+XG4gICAgICAgICAgPG9wdGlvbiB2LWJpbmQ6dGV4dD1cIjI1XCIgdmFsdWU9XCIyNVwiPjI1PC9vcHRpb24+XG4gICAgICAgIDwvc2VsZWN0PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPHYtY2xpZW50LXRhYmxlIHJlZj1cInRhYmxlXCIgOmNvbHVtbnM9XCJjb2x1bW5zXCIgOmRhdGE9XCJmaWx0ZXJlZERhdGFcIiA6b3B0aW9ucz1cIm9wdGlvbnNcIj5cbiAgICAgIDxyb3V0ZXItbGluayBzbG90PVwibmFtZVwiIHNsb3Qtc2NvcGU9XCJwcm9wc1wiIDp0bz1cInsgbmFtZTogJ2NvbXBhbnknLCBwYXJhbXM6IHsgaWQ6IHByb3BzLnJvdy5pZCB9fVwiPnt7cHJvcHMucm93Lm5hbWV9fTwvcm91dGVyLWxpbms+XG4gICAgICA8ZGl2IHNsb3Q9XCJjb250YWN0c1wiIHNsb3Qtc2NvcGU9XCJwcm9wc1wiPlxuICAgICAgICA8ZGl2IHYtZm9yPVwiKGNvbnRhY3ROYW1lLCBpbmRleCkgaW4gcHJvcHMucm93LmNvbnRhY3RzXCIgdi1iaW5kOmtleT1cImluZGV4XCI+XG4gICAgICAgICAge3tjb250YWN0TmFtZX19XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC92LWNsaWVudC10YWJsZT5cbiAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi0td2hpdGVcIiB2LW9uOmNsaWNrPVwiYWRkQ29tcGFueVwiPnt7bG9jKCdhZGRDb21wYW55Jyl9fTwvYnV0dG9uPlxuICAgIDxtb2RhbC1jb21wYW55IHJlZj1cImFkZENvbXBhbnlNb2RhbFwiIDptb2RhbC1tb2RlPVwiJ2FkZCdcIj48L21vZGFsLWNvbXBhbnk+XG4gIDwvdGhlLTEtY29sdW1uLWxheW91dD5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5cbmltcG9ydCBNb2RhbENvbXBhbnkgZnJvbSAnLi9tb2RhbC1jb21wYW55LnZ1ZSc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgY29tcG9uZW50czoge1xuICAgICdtb2RhbC1jb21wYW55JzogTW9kYWxDb21wYW55XG4gIH0sXG4gIGRhdGE6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc2VhcmNoVGV4dDogJycsXG4gICAgICBzZWFyY2hDb2x1bW5zOiBbJ25hbWUnLCAnY29udGFjdHMnLCAnY291bnRyeSddLFxuICAgICAgY29sdW1uczogWyduYW1lJywgJ2NvbnRhY3RzJywgJ2NvdW50cnknXSxcbiAgICAgIHNvcnRhYmxlOiBbJ25hbWUnLCAnY29udGFjdHMnLCAnY291bnRyeSddLFxuICAgICAgZmlsdGVyYWJsZTogWyduYW1lJywgJ2NvbnRhY3RzJywgJ2NvdW50cnknXSxcbiAgICAgIHNlbGVjdGVkOiAnMTAnXG4gICAgfVxuICB9LFxuICBjb21wdXRlZDoge1xuXG4gICAgb3B0aW9ucygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGZpbHRlcmFibGU6IGZhbHNlLFxuICAgICAgICBoZWFkaW5nczoge1xuICAgICAgICAgIG5hbWU6IHRoaXMubG9jKCduYW1lJyksXG4gICAgICAgICAgY29udGFjdHM6IHRoaXMubG9jKCdjb250YWN0cycpLFxuICAgICAgICAgIGNvdW50cnk6IHRoaXMubG9jKCdjb3VudHJ5JylcbiAgICAgICAgfSxcbiAgICAgICAgdGV4dHM6IHtcbiAgICAgICAgICAgIGNvdW50OiB0aGlzLmxvYygncGFnaW5hdGlvbkNvdW50JyksXG4gICAgICAgICAgICBsaW1pdDogdGhpcy5sb2MoJ3JlY29yZHMnKSxcbiAgICAgICAgICAgIG5vUmVzdWx0czogdGhpcy5sb2MoJ25vTWF0Y2hpbmdSZXN1bHRzJyksXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY29tcGFueURhdGEoKSB7XG4gICAgICBjb25zdCBjb21wYW5pZXMgPSBbXTtcbiAgICAgIHRoaXMuJHN0b3JlLmdldHRlcnMuY2hpbGRDb21wYW5pZXMuZm9yRWFjaChjb21wYW55ID0+IHtcbiAgICAgICAgY29tcGFuaWVzLnB1c2goe1xuICAgICAgICAgIG5hbWU6IGNvbXBhbnkubmFtZSxcbiAgICAgICAgICBpZDogY29tcGFueS5pZCxcbiAgICAgICAgICBjb250YWN0czogY29tcGFueS51c2VycyA/IGNvbXBhbnkudXNlcnMubWFwKHVzZXIgPT4geyByZXR1cm4gdXNlci5sYXN0TmFtZSArICcsICcgKyB1c2VyLmZpcnN0TmFtZSB9KSA6IFtdLFxuICAgICAgICAgIGNvdW50cnk6IGNvbXBhbnkuY291bnRyeSAhPSBudWxsID8gY29tcGFueS5jb3VudHJ5Lm5hbWUgOiAnJ1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gY29tcGFuaWVzO1xuICAgIH0sXG5cbiAgICBmaWx0ZXJlZERhdGEoKSB7XG4gICAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICAgIGNvbnN0IHNlYXJjaFRleHQgPSB0aGlzLiRzdG9yZS5zdGF0ZS5zdWJoZWFkZXIuc2VhcmNoVGV4dDsgLy8gVXNlIHN1YmhlYWRlciBzZWFyY2ggaW5wdXQgZm9yIHNlYXJjaGluZ1xuICAgICAgY29uc3QgZGF0YSA9IHRoaXMuY29tcGFueURhdGE7XG5cbiAgICAgIGlmKHNlYXJjaFRleHQpIHtcbiAgICAgICAgY29uc3Qgc2VhcmNoUmVnRXggPSBuZXcgUmVnRXhwKHNlYXJjaFRleHQsICdpJylcblxuICAgICAgICByZXR1cm4gZGF0YS5maWx0ZXIoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgICBmb3IobGV0IGk9MCwgbD1zZWxmLnNlYXJjaENvbHVtbnMubGVuZ3RoOyBpPGw7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgY29sdW1uID0gc2VsZi5zZWFyY2hDb2x1bW5zW2ldO1xuXG4gICAgICAgICAgICBpZihzZWFyY2hSZWdFeC50ZXN0KGl0ZW1bY29sdW1uXSkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9LFxuICAgIHNlbGVjdGVkVmFsdWUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zZWxlY3RlZDtcbiAgICB9XG4gIH0sXG4gIG1ldGhvZHM6IHtcbiAgICBhZGRDb21wYW55KCkge1xuICAgICAgdGhpcy4kcmVmcy5hZGRDb21wYW55TW9kYWwuc2hvdygpO1xuICAgIH1cbiAgfSxcbiAgbW91bnRlZDogZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuJHN0b3JlLmRpc3BhdGNoKCdnZXRDaGlsZENvbXBhbmllcycpO1xuXG4gICAgdGhpcy4kc3RvcmUuY29tbWl0KCdzZXRTdWJoZWFkZXInLCB7XG4gICAgICBzdWJ0aXRsZTogJycsXG4gICAgICB0aXRsZTogdGhpcy5sb2MoJ2NvbXBvbmVudHMuY29tcGFuaWVzLnN1YmhlYWRlclRpdGxlJyksXG4gICAgICBkZXNjcmlwdGlvbjogdGhpcy5sb2MoJ2NvbXBvbmVudHMuY29tcGFuaWVzLnN1YmhlYWRlckRlc2NyaXB0aW9uJyksXG4gICAgICBzZWFyY2hFbmFibGVkOiB0cnVlXG4gICAgfSk7XG4gIH1cbn1cbjwvc2NyaXB0PlxuXG48c3R5bGU+XG4uZmFkZS1lbnRlci1hY3RpdmUsIC5mYWRlLWxlYXZlLWFjdGl2ZSB7XG4gIHRyYW5zaXRpb246IG9wYWNpdHkgLjVzO1xufVxuLmZhZGUtZW50ZXIsIC5mYWRlLWxlYXZlLXRvIC8qIC5mYWRlLWxlYXZlLWFjdGl2ZSBiZWxvdyB2ZXJzaW9uIDIuMS44ICovIHtcbiAgb3BhY2l0eTogMDtcbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGU+XG4gIDx0aGUtc2lkZWJhci1sYXlvdXQ+XG4gICAgPGRpdiBzbG90PVwic2lkZWJhci10aXRsZVwiPnt7Y29tcGFueS5uYW1lfX08L2Rpdj5cbiAgICA8ZGl2IHNsb3Q9XCJzaWRlYmFyXCI+XG4gICAgICA8cD57e2NvbXBhbnkuYWRkcmVzc319PGJyPlxuICAgICAge3tjb21wYW55LnBvc3RhbENvZGV9fSB7e2NvbXBhbnkucG9zdE9mZmljZX19PGJyPlxuICAgICAge3tjb21wYW55LmNvdW50cnkubmFtZX19PC9wPlxuICAgICAgPHA+XG4gICAgICAgIHt7bG9jKCdidXNpbmVzc0lkJyl9fToge3tjb21wYW55LmJ1c2luZXNzSWR9fTxicj5cbiAgICAgICAge3tsb2MoJ2N1c3RvbWVyTnVtYmVyJyl9fToge3tjb21wYW55LmN1c3RvbWVyTnVtYmVyfX1cbiAgICAgIDwvcD5cblxuICAgICAgPGJ1dHRvbiB2LWlmPVwiY2FuRWRpdENvbXBhbnlcIiBjbGFzcz1cImJ0biBidG4tLXdoaXRlXCIgdi1vbjpjbGljaz1cImVkaXRDb21wYW55XCI+e3tsb2MoJ2VkaXRDb21wYW55Jyl9fTwvYnV0dG9uPlxuICAgICAgPGJ1dHRvbiB2LWlmPVwiY2FuRGVsZXRlQ29tcGFueVwiIGNsYXNzPVwiYnRuIGJ0bi0td2hpdGVcIiB2LW9uOmNsaWNrPVwiZGVsZXRlQ29tcGFueVwiPnt7bG9jKCdkZWxldGVDb21wYW55Jyl9fTwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgc3R5bGU9XCJmbG9hdDogcmlnaHQ7IG1hcmdpbi1ib3R0b206IDIwcHhcIj5cbiAgICAgIDxzcGFuPnt7dGhpcy5sb2MoJ3JlY29yZHMnKX19PC9zcGFuPlxuICAgICAgPGRpdiBjbGFzcz1cImN1c3RvbS1zZWxlY3RfX2Ryb3Bkb3duIGpzLWN1c3RvbS1zZWxlY3QtZHJvcGRvd25cIiBzdHlsZT1cIndpZHRoOiA4MHB4OyBwb3NpdGlvbjogcmVsYXRpdmVcIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJjdXN0b20tc2VsZWN0X190ZXh0IGpzLWN1c3RvbS1zZWxlY3QtdGV4dGhvbGRlclwiPnt7c2VsZWN0ZWRWYWx1ZX19PC9zcGFuPlxuICAgICAgICA8c2VsZWN0IHYtbW9kZWw9XCJzZWxlY3RlZFwiIEBjaGFuZ2U9XCIkcmVmcy50YWJsZS5zZXRMaW1pdCgkZXZlbnQudGFyZ2V0LnZhbHVlKVwiIGNsYXNzPVwiZm9ybV9fZmllbGQtc2VsZWN0IGpzLWN1c3RvbS1zZWxlY3QgZm9ybV9fZmllbGQtc2VsZWN0LWN1c3RvbSBqcy1sYW5nLXNlbGVjdCBsYW5nX3NlbGVjdFwiPlxuICAgICAgICAgIDxvcHRpb24gdi1iaW5kOnRleHQ9XCIxMFwiIHZhbHVlPVwiMTBcIj4xMDwvb3B0aW9uPlxuICAgICAgICAgIDxvcHRpb24gdi1iaW5kOnRleHQ9XCIyNVwiIHZhbHVlPVwiMjVcIj4yNTwvb3B0aW9uPlxuICAgICAgICA8L3NlbGVjdD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDx2LWNsaWVudC10YWJsZSByZWY9XCJ0YWJsZVwiIDpjb2x1bW5zPVwiY29sdW1uc1wiIDpkYXRhPVwiZmlsdGVyZWREYXRhXCIgOm9wdGlvbnM9XCJvcHRpb25zXCI+XG4gICAgICA8ZGl2IHNsb3Q9XCJuYW1lXCIgc2xvdC1zY29wZT1cInByb3BzXCI+e3twcm9wcy5yb3cubGFzdE5hbWV9fSwge3twcm9wcy5yb3cuZmlyc3ROYW1lfX08L2Rpdj5cbiAgICAgIDxhIHNsb3Q9XCJ1c2VybmFtZVwiIDpocmVmPVwiZ2V0RW1haWxMaW5rKHByb3BzLnJvdy51c2VybmFtZSlcIiBzbG90LXNjb3BlPVwicHJvcHNcIj57e3Byb3BzLnJvdy51c2VybmFtZX19PC9hPlxuICAgICAgPGEgc2xvdD1cInBob25lXCIgOmhyZWY9XCJnZXRUZWxMaW5rKHByb3BzLnJvdy5waG9uZSlcIiBzbG90LXNjb3BlPVwicHJvcHNcIj57e3Byb3BzLnJvdy5waG9uZX19PC9hPlxuICAgICAgPGRpdiBzbG90PVwiYWN0aW9uc1wiIHNsb3Qtc2NvcGU9XCJwcm9wc1wiIHYtaWY9XCJjYW5FZGl0VXNlcnNcIj5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0blwiIHYtb246Y2xpY2s9XCJlZGl0VXNlcihwcm9wcy5yb3cpXCI+e3tsb2MoJ2VkaXRVc2VyJyl9fTwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuXCIgdi1pZj1cImNhbkRlbGV0ZVVzZXIocHJvcHMucm93KVwiIHYtb246Y2xpY2s9XCJkZWxldGVVc2VyKHByb3BzLnJvdylcIj57e2xvYygnZGVsZXRlVXNlcicpfX08L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvdi1jbGllbnQtdGFibGU+XG4gICAgPGJ1dHRvbiB2LWlmPVwiY2FuQWRkVXNlclwiIGNsYXNzPVwiYnRuIGJ0bi0td2hpdGVcIiB2LW9uOmNsaWNrPVwiYWRkVXNlclwiPnt7bG9jKCdhZGRVc2VyJyl9fTwvYnV0dG9uPlxuICAgIDxtb2RhbC1jb21wYW55IHJlZj1cImNvbXBhbnlNb2RhbFwiIDptb2RhbC1tb2RlPVwiJ2VkaXQnXCIgOm1vZGFsLWRhdGE9XCJjb21wYW55XCI+PC9tb2RhbC1jb21wYW55PlxuICAgIDxtb2RhbC11c2VyIHJlZj1cImFkZFVzZXJNb2RhbFwiIDptb2RhbC1tb2RlPVwiJ2FkZCdcIiA6bW9kYWwtZGF0YT1cInVzZXJJbml0RGF0YVwiPjwvbW9kYWwtdXNlcj5cbiAgICA8bW9kYWwtdXNlciByZWY9XCJlZGl0VXNlck1vZGFsXCIgOm1vZGFsLW1vZGU9XCInZWRpdCdcIiA6bW9kYWwtZGF0YT1cInVzZXJFZGl0RGF0YVwiPjwvbW9kYWwtdXNlcj5cbiAgPC90aGUtc2lkZWJhci1sYXlvdXQ+XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuXG5pbXBvcnQgTW9kYWxDb21wYW55IGZyb20gJy4vbW9kYWwtY29tcGFueS52dWUnO1xuaW1wb3J0IE1vZGFsVXNlciBmcm9tICcuL21vZGFsLXVzZXIudnVlJztcblxuZXhwb3J0IGRlZmF1bHQge1xuICBjb21wb25lbnRzOiB7XG4gICAgJ21vZGFsLWNvbXBhbnknOiBNb2RhbENvbXBhbnksXG4gICAgJ21vZGFsLXVzZXInOiBNb2RhbFVzZXJcbiAgfSxcbiAgZGF0YTogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB7XG4gICAgICBzZWFyY2hUZXh0OiAnJyxcbiAgICAgIHNlYXJjaENvbHVtbnM6IFsnZmlyc3ROYW1lJywgJ2xhc3ROYW1lJywgJ3VzZXJuYW1lJywgJ3Bob25lJywgJ3JvbGUnXSxcbiAgICAgIHRlc3Rpbmc6ICdqZWUnLFxuICAgICAgY29sdW1uczogWyduYW1lJywgJ3VzZXJuYW1lJywgJ3Bob25lJywgJ3JvbGUnLCAnYWN0aW9ucyddLFxuICAgICAgc29ydGFibGU6IFsnbmFtZScsICd1c2VybmFtZScsICdwaG9uZScsICdyb2xlJ10sXG4gICAgICBmaWx0ZXJhYmxlOiBbJ25hbWUnLCAndXNlcm5hbWUnLCAncGhvbmUnLCAncm9sZSddLFxuICAgICAgdXNlckVkaXREYXRhOiB7fSxcbiAgICAgIGlzT3duQ29tcGFueTogZmFsc2UsXG4gICAgICBjb21wYW55SWQ6IG51bGwsXG4gICAgICBzZWxlY3RlZDogJzEwJ1xuICAgIH1cbiAgfSxcbiAgY29tcHV0ZWQ6IHtcbiAgICBvcHRpb25zKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZmlsdGVyYWJsZTogZmFsc2UsXG4gICAgICAgIGhlYWRpbmdzOiB7XG4gICAgICAgICAgbmFtZTogdGhpcy5sb2MoJ25hbWUnKSxcbiAgICAgICAgICB1c2VybmFtZTogdGhpcy5sb2MoJ2VtYWlsJyksXG4gICAgICAgICAgcGhvbmU6IHRoaXMubG9jKCdwaG9uZScpLFxuICAgICAgICAgIHJvbGU6IHRoaXMubG9jKCdyb2xlJylcbiAgICAgICAgfSxcbiAgICAgICAgdGV4dHM6IHtcbiAgICAgICAgICAgIGNvdW50OiB0aGlzLmxvYygncGFnaW5hdGlvbkNvdW50JyksXG4gICAgICAgICAgICBsaW1pdDogdGhpcy5sb2MoJ3JlY29yZHMnKSxcbiAgICAgICAgICAgIG5vUmVzdWx0czogdGhpcy5sb2MoJ25vTWF0Y2hpbmdSZXN1bHRzJyksXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfSxcbiAgICBjb21wYW55KCkge1xuICAgICAgZm9yKGxldCBpPTAsIGw9dGhpcy4kc3RvcmUuc3RhdGUuY29tcGFuaWVzLmxlbmd0aDsgaTxsOyBpKyspIHtcbiAgICAgICAgaWYodGhpcy4kc3RvcmUuc3RhdGUuY29tcGFuaWVzW2ldLmlkID09PSB0aGlzLmNvbXBhbnlJZCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLiRzdG9yZS5zdGF0ZS5jb21wYW5pZXNbaV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvdW50cnk6IHt9XG4gICAgICB9XG4gICAgfSxcbiAgICBjYW5FZGl0Q29tcGFueSgpIHtcbiAgICAgIC8vIElmIHVzZXIgaGFzIGFkbWluIHJvbGVcbiAgICAgIHJldHVybiB0aGlzLiR1c2VyUmlnaHRzLmhhc1JpZ2h0KCB3aW5kb3cuUklHSFRTLkNMSUVOVF9FRElUX0NPTVBBTlksIHRoaXMuJHN0b3JlLnN0YXRlLnVzZXIucm9sZSApO1xuICAgIH0sXG4gICAgY2FuQWRkVXNlcigpIHtcbiAgICAgIC8vIElmIHVzZXIgaGFzIGFkbWluIHJvbGVcbiAgICAgIGlmKHRoaXMuY29tcGFueS50eXBlID09ICdpbXBvcnRlcicpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJHVzZXJSaWdodHMuaGFzUmlnaHQoIHdpbmRvdy5SSUdIVFMuQ0xJRU5UX0FERF9VU0VSU19DT01QQU5ZLCB0aGlzLiRzdG9yZS5zdGF0ZS51c2VyLnJvbGUgKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGNhbkRlbGV0ZUNvbXBhbnkoKSB7XG5cbiAgICAgIC8vIFlvdSBjYW4gbm90IGRlbGV0ZSBvd24gY29tcGFueVxuICAgICAgaWYodGhpcy5jb21wYW55SWQgPT09IHRoaXMuJHN0b3JlLnN0YXRlLnVzZXIuY29tcGFueS5pZCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgICAvLyBJZiB1c2VyIGhhcyBhZG1pbiByb2xlXG4gICAgICBpZih0aGlzLiR1c2VyUmlnaHRzLmhhc1JpZ2h0KCB3aW5kb3cuUklHSFRTLkNMSUVOVF9ERUxFVEVfQ09NUEFOWSwgdGhpcy4kc3RvcmUuc3RhdGUudXNlci5yb2xlICkgJiYgIXRoaXMuY29tcGFueVVzZXJzLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0sXG4gICAgY2FuRWRpdFVzZXJzKCkge1xuICAgICAgc3dpdGNoKHRoaXMuY29tcGFueS50eXBlKSB7XG4gICAgICAgIGNhc2UgJ3JldGFpbGVyJzpcbiAgICAgICAgICByZXR1cm4gdGhpcy4kdXNlclJpZ2h0cy5oYXNSaWdodCggd2luZG93LlJJR0hUUy5DTElFTlRfRURJVF9SRVRBSUxFUl9DT01QQU5ZX1VTRVJTLCB0aGlzLiRzdG9yZS5zdGF0ZS51c2VyLnJvbGUgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnaW1wb3J0ZXInOlxuICAgICAgICAgIHJldHVybiB0aGlzLiR1c2VyUmlnaHRzLmhhc1JpZ2h0KCB3aW5kb3cuUklHSFRTLkNMSUVOVF9FRElUX0lNUE9SVEVSX0NPTVBBTllfVVNFUlMsIHRoaXMuJHN0b3JlLnN0YXRlLnVzZXIucm9sZSApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSxcbiAgICBjb21wYW55VXNlcnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kc3RvcmUuc3RhdGUudXNlcnMuZmlsdGVyKHVzZXIgPT4ge1xuICAgICAgICByZXR1cm4gdXNlci5jb21wYW55ID09PSB0aGlzLmNvbXBhbnkuaWQ7XG4gICAgICB9KTtcbiAgICB9LFxuICAgIHVzZXJJbml0RGF0YSgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbXBhbnlJZDogdGhpcy5jb21wYW55LmlkLFxuICAgICAgICBjb3VudHJ5Q29kZTogdGhpcy5jb21wYW55LmNvdW50cnkgJiYgdGhpcy5jb21wYW55LmNvdW50cnkuY291bnRyeUNvZGUgfHzCoCcnXG4gICAgICB9XG4gICAgfSxcbiAgICBmaWx0ZXJlZERhdGE6IGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgICAgY29uc3Qgc2VhcmNoVGV4dCA9IHRoaXMuJHN0b3JlLnN0YXRlLnN1YmhlYWRlci5zZWFyY2hUZXh0OyAvLyBVc2Ugc3ViaGVhZGVyIHNlYXJjaCBpbnB1dCBmb3Igc2VhcmNoaW5nXG4gICAgICBjb25zdCBkYXRhID0gdGhpcy5jb21wYW55VXNlcnNcblxuICAgICAgaWYoc2VhcmNoVGV4dCkge1xuICAgICAgICBjb25zdCBzZWFyY2hSZWdFeCA9IG5ldyBSZWdFeHAoc2VhcmNoVGV4dCwgJ2knKVxuXG4gICAgICAgIHJldHVybiBkYXRhLmZpbHRlcihmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICAgIGZvcihsZXQgaT0wLCBsPXNlbGYuc2VhcmNoQ29sdW1ucy5sZW5ndGg7IGk8bDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBjb2x1bW4gPSBzZWxmLnNlYXJjaENvbHVtbnNbaV07XG5cbiAgICAgICAgICAgIGlmKHNlYXJjaFJlZ0V4LnRlc3QoaXRlbVtjb2x1bW5dKSkge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH0sXG4gICAgc2VsZWN0ZWRWYWx1ZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNlbGVjdGVkO1xuICAgIH1cbiAgfSxcbiAgbWV0aG9kczoge1xuICAgIGNhbkRlbGV0ZVVzZXIodXNlckRhdGEpIHtcbiAgICAgIC8vIENhbiBub3QgZGVsZXRlIHNlbGZcbiAgICAgIHJldHVybiB1c2VyRGF0YS5pZCAhPT0gdGhpcy4kc3RvcmUuc3RhdGUudXNlci5pbmZvLmlkO1xuICAgIH0sXG4gICAgZGVsZXRlQ29tcGFueSgpIHtcbiAgICAgIGNvbnN0IGNvbmZpcm1NZXNzYWdlID0gdGhpcy5sb2MoJ2RlbGV0ZUNvbmZpcm1hdGlvbicpLnJlcGxhY2UoJ3t7dGFyZ2V0fX0nLCB0aGlzLmNvbXBhbnkubmFtZSk7XG5cbiAgICAgIGlmKGNvbmZpcm0oY29uZmlybU1lc3NhZ2UpKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiRhcGkuZGVsZXRlQ29tcGFueSh0aGlzLmNvbXBhbnkuaWQpLnRoZW4ocmVzID0+IHtcbiAgICAgICAgICBpZihyZXMuY29kZSA9PT0gMjAwKSB7XG4gICAgICAgICAgICB0aGlzLiRzdG9yZS5jb21taXQoJ2RlbGV0ZUNvbXBhbnknLCB0aGlzLmNvbXBhbnkuaWQpO1xuICAgICAgICAgICAgdGhpcy4kcm91dGVyLnJlcGxhY2Uoe25hbWU6ICdob21lJ30pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBlZGl0Q29tcGFueSgpIHtcbiAgICAgIHRoaXMuJHJlZnMuY29tcGFueU1vZGFsLnNob3coKTtcbiAgICB9LFxuICAgIGVkaXRVc2VyKHVzZXJEYXRhKSB7XG4gICAgICB0aGlzLnVzZXJFZGl0RGF0YSA9IHVzZXJEYXRhO1xuICAgICAgdGhpcy4kcmVmcy5lZGl0VXNlck1vZGFsLnNob3coKTtcbiAgICB9LFxuICAgIGFkZFVzZXIoKSB7XG4gICAgICB0aGlzLiRyZWZzLmFkZFVzZXJNb2RhbC5zaG93KCk7XG4gICAgfSxcbiAgICBkZWxldGVVc2VyKHVzZXJEYXRhKSB7XG4gICAgICBjb25zdCBjb25maXJtTWVzc2FnZSA9IHRoaXMubG9jKCdkZWxldGVDb25maXJtYXRpb24nKS5yZXBsYWNlKCd7e3RhcmdldH19JywgdXNlckRhdGEubGFzdE5hbWUgKyAnLCAnICsgdXNlckRhdGEuZmlyc3ROYW1lKVxuXG4gICAgICBpZihjb25maXJtKGNvbmZpcm1NZXNzYWdlKSkge1xuICAgICAgICByZXR1cm4gdGhpcy4kYXBpLmRlbGV0ZVVzZXIodXNlckRhdGEuaWQpLnRoZW4ocmVzID0+IHtcbiAgICAgICAgICBpZihyZXMuY29kZSA9PT0gMjAwKSB7XG4gICAgICAgICAgICB0aGlzLiRzdG9yZS5jb21taXQoJ2RlbGV0ZVVzZXInLCB1c2VyRGF0YS5pZCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGdldEVtYWlsTGluayhlbWFpbCkge1xuICAgICAgcmV0dXJuICdtYWlsdG86JyArIGVtYWlsO1xuICAgIH0sXG4gICAgZ2V0VGVsTGluayhwaG9uZSkge1xuICAgICAgcmV0dXJuICd0ZWw6JyArIHBob25lO1xuICAgIH1cbiAgfSxcbiAgbW91bnRlZDogZnVuY3Rpb24gKCkge1xuXG4gICAgLy8gQ2hlY2sgaWYgd2UgaGF2ZSBwYXJhbSAvY29tcGFueS86aWQgYW5kIHVzZSB0aGF0IGVsc2UgdXNlIGxvZ2dlZCBpbiB1c2VyJ3MgY29tcGFueSBhcyBkZWZhdWx0XG4gICAgdGhpcy5jb21wYW55SWQgPSB0aGlzLiRyb3V0ZS5wYXJhbXMuaWQgfHzCoHRoaXMuJHN0b3JlLnN0YXRlLnVzZXIuY29tcGFueS5pZDtcblxuICAgIGlmKCF0aGlzLiRyb3V0ZS5wYXJhbXMuaWQpIHtcbiAgICAgIHRoaXMuaXNPd25Db21wYW55ID0gdHJ1ZTtcbiAgICB9XG5cbiAgICB0aGlzLiRzdG9yZS5kaXNwYXRjaCgnZ2V0Q29tcGFueScsIHRoaXMuY29tcGFueUlkKTtcbiAgICB0aGlzLiRzdG9yZS5kaXNwYXRjaCgnZ2V0Q29tcGFueVVzZXJzJywgdGhpcy5jb21wYW55SWQpO1xuXG4gICAgdGhpcy4kc3RvcmUuY29tbWl0KCdzZXRTdWJoZWFkZXInLCB7XG4gICAgICBzdWJ0aXRsZTogJycsXG4gICAgICB0aXRsZTogJycsXG4gICAgICBkZXNjcmlwdGlvbjogJycsXG4gICAgICBzZWFyY2hFbmFibGVkOiB0cnVlXG4gICAgfSk7XG4gIH1cbn1cbjwvc2NyaXB0PlxuXG48c3R5bGU+XG48L3N0eWxlPlxuIiwiXG48dGVtcGxhdGU+XG4gIDx0aGUtMS1jb2x1bW4tbGF5b3V0IHYtaWY9XCJjb21wbGFpbnRcIj5cbiAgICA8aDM+e3tsb2MoJ3N0YXR1cycpfX06IHt7Y29tcGxhaW50LnN0YXR1cy5uYW1lfX08L2gzPlxuICAgIDxwPjxzdHJvbmc+e3tsb2MoJ2NvbXBsYWludElkJyl9fTwvc3Ryb25nPjoge3tjb21wbGFpbnQudXVpZH19PC9wPlxuICAgIDxwPlxuICAgICAgPHN0cm9uZz57e2xvYygnc2VyaWFsTnVtYmVyJyl9fTwvc3Ryb25nPjogPHJvdXRlci1saW5rIDp0bz1cInsgbmFtZTogJ2N1c3RvbWVyLW1hY2hpbmUnLCBwYXJhbXM6IHsgc2VyaWFsTnVtYmVyOiBjb21wbGFpbnQuc2VyaWFsTnVtYmVyIH19XCI+e3tjb21wbGFpbnQuc2VyaWFsTnVtYmVyfX08L3JvdXRlci1saW5rPjxicj5cbiAgICAgIDxzdHJvbmc+e3tsb2MoJ2RlbGl2ZXJ5RGF0ZUNvbXBsYWludCcpfX08L3N0cm9uZz46IHt7Y29tcGxhaW50LmRlbGl2ZXJ5RGF0ZX19XG4gICAgPC9wPlxuICAgIDxkaXYgY2xhc3M9XCJib3ggbm8taW5uZXItbWFyZ2luXCIgdi1pZj1cImNvbXBsYWludC5jb21wZW5zYXRpb25cIj5cbiAgICAgIDxoMz57e2xvYygnY29tcGVuc2F0aW9uJyl9fTwvaDM+XG4gICAgICA8cCB2LWh0bWw9XCJjb21wZW5zYXRpb25IdG1sXCI+PC9wPlxuICAgIDwvZGl2PlxuICAgIDx2LWNvbXBsYWludC11c2VyLWluZm8gdi1pZj1cImNvbXBsYWludC51c2VyXCIgOnVzZXItZGF0YT1cImNvbXBsYWludC51c2VyXCIgOmNvbXBhbnktZGF0YT1cImNvbXBsYWludC5jb21wYW55XCI+PC92LWNvbXBsYWludC11c2VyLWluZm8+XG4gICAgPHAgdi1lbHNlPnt7bG9jKCd1c2VyTm90Rm91bmRFeHBsYW5hdGlvbicpfX08L3A+XG5cbiAgICA8aDM+e3tsb2MoJ2Zvcm1zLmxhYmVscy5jb21wbGFpbnREZXNjcmlwdGlvbicpfX06PC9oMz5cbiAgICA8ZGl2IHYtaHRtbD1cImRlc2NyaXB0aW9uSHRtbFwiPjwvZGl2PlxuXG5cbiAgICA8aDM+e3tsb2MoJ2Zvcm1zLmxhYmVscy5jb21wbGFpbnRBY2Nlc3NvcmllcycpfX06PC9oMz5cbiAgICA8ZGl2IHYtaWY9XCJjb21wbGFpbnQuYWNjZXNzb3JpZXNUZXh0XCIgdi1odG1sPVwiYWNjZXNzb3JpZXNIdG1sXCI+PC9kaXY+XG4gICAgPHYtZGF0YS1pdGVtcyB2LWVsc2UgOmVkaXQtbW9kZT1cImZhbHNlXCIgOmhpZGUtZW1wdHk9XCJhY2Nlc3Nvcmllc0RhdGEuaGlkZUVtcHR5XCIgOm11bHRpcGx5RmllbGQ9XCInYW1vdW50J1wiIDpzdW0tZmllbGQ9XCJhY2Nlc3Nvcmllc0RhdGEuc3VtRmllbGRcIiA6ZmllbGRzPVwiYWNjZXNzb3JpZXNEYXRhLmZpZWxkc1wiIDpkYXRhPVwiY29tcGxhaW50LmFjY2Vzc29yaWVzXCIgOmRpc3BsYXktb25seT1cInRydWVcIj48L3YtZGF0YS1pdGVtcz5cblxuICAgIDxoMz57e2xvYygnZm9ybXMubGFiZWxzLmNvbXBsYWludEpvYnMnKX19OjwvaDM+XG4gICAgPGRpdiB2LWlmPVwiY29tcGxhaW50LmpvYnNUZXh0XCIgdi1odG1sPVwiam9ic0h0bWxcIj48L2Rpdj5cbiAgICA8di1kYXRhLWl0ZW1zIHYtZWxzZSA6ZWRpdC1tb2RlPVwiZmFsc2VcIiA6aGlkZS1lbXB0eT1cInNlcnZpY2VzRGF0YS5oaWRlRW1wdHlcIiA6c3VtLWZpZWxkPVwic2VydmljZXNEYXRhLnN1bUZpZWxkXCIgOm11bHRpcGx5LWZpZWxkPVwic2VydmljZXNEYXRhLm11bHRpcGx5RmllbGRcIiA6ZmllbGRzPVwic2VydmljZXNEYXRhLmZpZWxkc1wiIDpkYXRhPVwiY29tcGxhaW50LnNlcnZpY2VzXCIgOmRpc3BsYXktb25seT1cInRydWVcIj48L3YtZGF0YS1pdGVtcz5cbiAgICA8ZGl2IHYtaWY9XCJ0b3RhbEFtb3VudFwiPnt7bG9jKCdhbGxJblRvdGFsJyl9fTogPHYtY3VycmVuY3ktaW5wdXQgOmRpc3BsYXktb25seT1cInRydWVcIiA6dmFsdWU9XCJ0b3RhbEFtb3VudFwiIDpkZWNpbWFsLWNoYXI9XCInLCdcIiA+PC92LWN1cnJlbmN5LWlucHV0PjwvZGl2PlxuXG4gICAgPGgzPnt7bG9jKCdmaWxlcycpfX06PC9oMz5cbiAgICA8ZGl2IHYtaWY9XCJjb21wbGFpbnQuZmlsZXMubGVuZ3RoXCI+XG4gICAgICA8ZGl2ICB2LWZvcj1cImZpbGUgaW4gY29tcGxhaW50LmZpbGVzXCIgdi1iaW5kOmtleT1cImZpbGUudXJsXCI+PGEgOmhyZWY9XCJmaWxlLnVybFwiIHRhcmdldD1cIl9ibGFua1wiPnt7ZmlsZS5uYW1lfX08L2E+PC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPHAgdi1lbHNlPnt7bG9jKCdub0ZpbGVzJyl9fTwvcD5cblxuICA8L3RoZS0xLWNvbHVtbi1sYXlvdXQ+XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuXG5pbXBvcnQgVkNvbXBsYWludFVzZXJJbmZvIGZyb20gJy4vdi1jb21wbGFpbnQtdXNlci1pbmZvLnZ1ZSc7XG5pbXBvcnQgVkRhdGFJdGVtcyBmcm9tICcuL3YtZGF0YS1pdGVtcy52dWUnO1xuaW1wb3J0IFZDdXJyZW5jeUlucHV0IGZyb20gJy4vdi1jdXJyZW5jeS1pbnB1dC52dWUnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG5hbWU6ICdWaWV3Q29tcGxhaW50JyxcbiAgY29tcG9uZW50czoge1xuICAgICd2LWNvbXBsYWludC11c2VyLWluZm8nOiBWQ29tcGxhaW50VXNlckluZm8sXG4gICAgJ3YtZGF0YS1pdGVtcyc6IFZEYXRhSXRlbXMsXG4gICAgJ3YtY3VycmVuY3ktaW5wdXQnOiBWQ3VycmVuY3lJbnB1dFxuICB9LFxuICBkYXRhOiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbXBsYWludElkOiBudWxsXG4gICAgfVxuICB9LFxuICBjb21wdXRlZDoge1xuICAgIGpvYnNIdG1sKCkge1xuICAgICAgcmV0dXJuIHRoaXMudGV4dFRvSHRtbCh0aGlzLmNvbXBsYWludC5qb2JzVGV4dCk7XG4gICAgfSxcbiAgICBhY2Nlc3Nvcmllc0h0bWwoKSB7XG4gICAgICByZXR1cm4gdGhpcy50ZXh0VG9IdG1sKHRoaXMuY29tcGxhaW50LmFjY2Vzc29yaWVzVGV4dCk7XG4gICAgfSxcbiAgICBjb21wZW5zYXRpb25IdG1sKCkge1xuICAgICAgcmV0dXJuIHRoaXMudGV4dFRvSHRtbCh0aGlzLmNvbXBsYWludC5jb21wZW5zYXRpb24pO1xuICAgIH0sXG4gICAgZGVzY3JpcHRpb25IdG1sKCkge1xuICAgICAgcmV0dXJuIHRoaXMudGV4dFRvSHRtbCh0aGlzLmNvbXBsYWludC5kZXNjcmlwdGlvbik7XG4gICAgfSxcbiAgICBjb21wbGFpbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kc3RvcmUuc3RhdGUuY29tcGxhaW50cy5maWx0ZXIoY29tcGxhaW50ID0+IGNvbXBsYWludC51dWlkID09PSB0aGlzLmNvbXBsYWludElkKVswXTtcbiAgICB9LFxuICAgIGFjY2Vzc29yaWVzRGF0YSgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN1bUZpZWxkOiAncHJpY2UnLFxuICAgICAgICBoaWRlRW1wdHk6IHRydWUsXG4gICAgICAgIHZhbHVlOiBbXSxcbiAgICAgICAgZmllbGRzOiBbe1xuICAgICAgICAgIGxhYmVsOiB0aGlzLmxvYygnY29tcGxhaW50QWNjZXNzb3JpZXMubmFtZScpLFxuICAgICAgICAgIHBsYWNlaG9sZGVyOiB0aGlzLmxvYygnY29tcGxhaW50QWNjZXNzb3JpZXMubmFtZScpLFxuICAgICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgICAgICBuYW1lOiAnbmFtZSdcbiAgICAgICAgfSwge1xuICAgICAgICAgIGxhYmVsOiB0aGlzLmxvYygnY29tcGxhaW50QWNjZXNzb3JpZXMuaWQnKSxcbiAgICAgICAgICBwbGFjZWhvbGRlcjogdGhpcy5sb2MoJ2NvbXBsYWludEFjY2Vzc29yaWVzLmlkJyksXG4gICAgICAgICAgdHlwZTogJ3RleHQnLFxuICAgICAgICAgIG5hbWU6ICdpZCdcbiAgICAgICAgfSwge1xuICAgICAgICAgIGxhYmVsOiB0aGlzLmxvYygnY29tcGxhaW50QWNjZXNzb3JpZXMuYW1vdW50JyksXG4gICAgICAgICAgcGxhY2Vob2xkZXI6IHRoaXMubG9jKCdjb21wbGFpbnRBY2Nlc3Nvcmllcy5hbW91bnQnKSxcbiAgICAgICAgICB0eXBlOiAnbnVtYmVyJyxcbiAgICAgICAgICBuYW1lOiAnYW1vdW50J1xuICAgICAgICB9LCB7XG4gICAgICAgICAgbGFiZWw6IHRoaXMubG9jKCdjb21wbGFpbnRBY2Nlc3Nvcmllcy5wcmljZScpLFxuICAgICAgICAgIHBsYWNlaG9sZGVyOiB0aGlzLmxvYygnY29tcGxhaW50QWNjZXNzb3JpZXMucHJpY2UnKSxcbiAgICAgICAgICB0eXBlOiAnY3VycmVuY3knLFxuICAgICAgICAgIG5hbWU6ICdwcmljZSdcbiAgICAgICAgfV1cbiAgICAgIH1cbiAgICB9LFxuICAgIHNlcnZpY2VzRGF0YSgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN1bUZpZWxkOiAncHJpY2UnLFxuICAgICAgICBtdWx0aXBseUZpZWxkOiAnaG91cnMnLFxuICAgICAgICBoaWRlRW1wdHk6IHRydWUsXG4gICAgICAgIHZhbHVlOiBbXSxcbiAgICAgICAgZmllbGRzOiBbe1xuICAgICAgICAgIGxhYmVsOiB0aGlzLmxvYygnY29tcGxhaW50U2VydmljZXMubmFtZScpLFxuICAgICAgICAgIHBsYWNlaG9sZGVyOiB0aGlzLmxvYygnY29tcGxhaW50U2VydmljZXMubmFtZScpLFxuICAgICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgICAgICBuYW1lOiAnbmFtZSdcbiAgICAgICAgfSwge1xuICAgICAgICAgIGxhYmVsOiB0aGlzLmxvYygnY29tcGxhaW50U2VydmljZXMuaG91cnMnKSxcbiAgICAgICAgICBwbGFjZWhvbGRlcjogdGhpcy5sb2MoJ2NvbXBsYWludFNlcnZpY2VzLmhvdXJzJyksXG4gICAgICAgICAgdHlwZTogJ251bWJlcicsXG4gICAgICAgICAgbmFtZTogJ2hvdXJzJ1xuICAgICAgICB9LCB7XG4gICAgICAgICAgbGFiZWw6IHRoaXMubG9jKCdjb21wbGFpbnRTZXJ2aWNlcy5wcmljZScpLFxuICAgICAgICAgIHBsYWNlaG9sZGVyOiB0aGlzLmxvYygnY29tcGxhaW50U2VydmljZXMucHJpY2UnKSxcbiAgICAgICAgICB0eXBlOiAnY3VycmVuY3knLFxuICAgICAgICAgIG5hbWU6ICdwcmljZSdcbiAgICAgICAgfV1cbiAgICAgIH1cbiAgICB9LFxuICAgIHRvdGFsQW1vdW50OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgdmFyIHN1bSA9IDA7XG5cbiAgICAgICAvL2dvdHRhIGdldCBjb21wbGFpbnQgZGF0YVxuICAgICAgIGxldCBjb21wbGFpbnQgPSB0aGlzLiRzdG9yZS5zdGF0ZS5jb21wbGFpbnRzLmZpbHRlcihjb21wbGFpbnQgPT4gY29tcGxhaW50LnV1aWQgPT09IHRoaXMuY29tcGxhaW50SWQpWzBdO1xuXG4gICAgICAgLy9zdW0gb2YgYWNjZXNzb3JpZXNcbiAgICAgICB0aGlzLmNvbXBsYWludC5hY2Nlc3Nvcmllcy5mb3JFYWNoKGUgPT4ge1xuICAgICAgICAgICBzdW0gKz0gZS5hbW91bnQgKiBlLnByaWNlO1xuICAgICAgIH0pO1xuICAgICAgIC8vc3VtIG9mIHNlcnZpY2VzXG4gICAgICAgdGhpcy5jb21wbGFpbnQuc2VydmljZXMuZm9yRWFjaChlID0+IHtcbiAgICAgICAgICAgc3VtICs9IGUuaG91cnMgKiBlLnByaWNlO1xuICAgICAgIH0pO1xuICAgICAgIHJldHVybiBzdW1cbiAgIH1cbiAgfSxcbiAgbWV0aG9kczoge1xuICAgIHRleHRUb0h0bWwodGV4dCkge1xuICAgICAgbGV0IGh0bWxUZXh0ID0gJyc7XG5cbiAgICAgIC8vIFN0cmlwIFxcclxuICAgICAgY29uc3Qgc3RyaXBwZWQgPSB0ZXh0LnJlcGxhY2UoL1xcci9nLCAnJyk7XG5cbiAgICAgIC8vIFNwbGl0IGludG8gcGFyYWdyYXBoc1xuICAgICAgY29uc3QgcGFyYWdyYXBocyA9IHN0cmlwcGVkLnNwbGl0KCdcXG5cXG4nKTtcblxuICAgICAgcGFyYWdyYXBocy5mb3JFYWNoKHBhcmFncmFwaCA9PiB7XG4gICAgICAgIGh0bWxUZXh0ICs9ICc8cD4nO1xuICAgICAgICAvLyBSZXBsYWNlIHNpbmdsZSBsaW5lZmVlZHMgd2l0aCA8YnI+XG4gICAgICAgIGh0bWxUZXh0ICs9IHBhcmFncmFwaC5yZXBsYWNlKC9cXG4vZywgJzxicj4nKTtcbiAgICAgICAgaHRtbFRleHQgKz0gJzwvcD4nO1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBodG1sVGV4dDtcbiAgICB9XG4gIH0sXG4gIG1vdW50ZWQoKSB7XG4gICAgLy8gQ2hlY2sgaWYgd2UgaGF2ZSBwYXJhbSAvY29tcGFueS86aWQgYW5kIHVzZSB0aGF0IGVsc2UgdXNlIGxvZ2dlZCBpbiB1c2VyJ3MgY29tcGFueSBhcyBkZWZhdWx0XG4gICAgdGhpcy5jb21wbGFpbnRJZCA9IHRoaXMuJHJvdXRlLnBhcmFtcy5pZFxuXG4gICAgdGhpcy4kc3RvcmUuZGlzcGF0Y2goJ2dldENvbXBsYWludCcsIHRoaXMuY29tcGxhaW50SWQpO1xuICB9XG59XG5cbjwvc2NyaXB0PlxuIiwiPHRlbXBsYXRlPlxuICA8dGhlLTEtY29sdW1uLWxheW91dD5cbiAgICA8ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXJcIj48YnV0dG9uIHYtb246Y2xpY2s9XCJhZGRDb21wbGFpbnRcIiBjbGFzcz1cImJ0biBidG4tLXdoaXRlXCI+e3tsb2MoJ2FkZENvbXBsYWludCcpfX08L2J1dHRvbj48L2Rpdj48YnIgLz5cbiAgICA8di1jbGllbnQtdGFibGUgOmNvbHVtbnM9XCJjb2x1bW5zXCIgOmRhdGE9XCJmaWx0ZXJlZERhdGFcIiA6b3B0aW9ucz1cIm9wdGlvbnNcIj5cbiAgICAgIDxyb3V0ZXItbGluayBzbG90PVwidXVpZFwiIHNsb3Qtc2NvcGU9XCJwcm9wc1wiIDp0bz1cInsgbmFtZTogJ2NvbXBsYWludCcsIHBhcmFtczogeyBpZDogcHJvcHMucm93LnV1aWQgfX1cIj57e3Byb3BzLnJvdy51dWlkfX08L3JvdXRlci1saW5rPlxuICAgICAgPHJvdXRlci1saW5rIHNsb3Q9XCJzZXJpYWxOdW1iZXJcIiBzbG90LXNjb3BlPVwicHJvcHNcIiA6dG89XCJ7IG5hbWU6ICdjdXN0b21lci1tYWNoaW5lJywgcGFyYW1zOiB7IHNlcmlhbE51bWJlcjogcHJvcHMucm93LnNlcmlhbE51bWJlciB9fVwiPnt7cHJvcHMucm93LnNlcmlhbE51bWJlcn19PC9yb3V0ZXItbGluaz5cbiAgICA8L3YtY2xpZW50LXRhYmxlPlxuICAgIDxtb2RhbC1jb21wbGFpbnQgcmVmPVwiYWRkQ29tcGxhaW50TW9kYWxcIiA6bW9kYWwtbW9kZT1cIidhZGQnXCI+PC9tb2RhbC1jb21wbGFpbnQ+XG4gIDwvdGhlLTEtY29sdW1uLWxheW91dD5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5cbmltcG9ydCBWRm9ybSBmcm9tICcuL3YtZm9ybS52dWUnO1xuaW1wb3J0IE1vZGFsQ29tcGxhaW50IGZyb20gJy4vbW9kYWwtY29tcGxhaW50LnZ1ZSc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbmFtZTogJ1ZpZXdDb21wbGFpbnRzJyxcbiAgY29tcG9uZW50czoge1xuICAgICdtb2RhbC1jb21wbGFpbnQnOiBNb2RhbENvbXBsYWludCxcbiAgICAndi1mb3JtJzogVkZvcm1cbiAgfSxcbiAgZGF0YTogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB7XG4gICAgICBmb3JtRGF0YToge30sXG4gICAgICBmb3JtRXJyb3JzOiB7fSxcbiAgICAgIHNlYXJjaFRleHQ6ICcnLFxuICAgICAgc2VhcmNoQ29sdW1uczogWyd1dWlkJywgJ3NlcmlhbE51bWJlcicsICdkYXRlQWRkZWQnLCAnc3RhdHVzJywgJ25hbWUnXSxcbiAgICAgIGNvbHVtbnM6IFsndXVpZCcsICdzZXJpYWxOdW1iZXInLCAnZGF0ZUFkZGVkJywgJ3N0YXR1cycsICduYW1lJ10sXG4gICAgICBzb3J0YWJsZTogWyd1dWlkJywgJ3NlcmlhbE51bWJlcicsICdkYXRlQWRkZWQnLCAnc3RhdHVzJywgJ25hbWUnXSxcbiAgICAgIGZpbHRlcmFibGU6IFsndXVpZCcsICdzZXJpYWxOdW1iZXInLCAnZGF0ZUFkZGVkJywgJ3N0YXR1cycsICduYW1lJ11cbiAgICB9XG4gIH0sXG4gIGNvbXB1dGVkOiB7XG4gICAgdGVzdEZpZWxkcygpIHtcbiAgICAgIHJldHVybiBbe1xuICAgICAgICBuYW1lOiAnZmlsZXMnLFxuICAgICAgICBtdWx0aXBsZTogdHJ1ZSxcbiAgICAgICAgdmFsdWU6IFtdLFxuICAgICAgICB0eXBlOiAnZmlsZSdcbiAgICAgIH1dXG4gICAgfSxcbiAgICBvcHRpb25zKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZmlsdGVyYWJsZTogZmFsc2UsXG4gICAgICAgIGhlYWRpbmdzOiB7XG4gICAgICAgICAgdXVpZDogdGhpcy5sb2MoJ2NvbXBsYWludElkJyksXG4gICAgICAgICAgc2VyaWFsTnVtYmVyOiB0aGlzLmxvYygnc2VyaWFsTnVtYmVyJyksXG4gICAgICAgICAgZGF0ZUFkZGVkOiB0aGlzLmxvYygnZGF0ZUFkZGVkQ29tcGxhaW50JyksXG4gICAgICAgICAgc3RhdHVzOiB0aGlzLmxvYygnc3RhdHVzJyksXG4gICAgICAgICAgbmFtZTogdGhpcy5sb2MoJ3JlY2xhbWF0ZWRCeScpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY29tcGxhaW50cygpIHtcbiAgICAgIHJldHVybiB0aGlzLiRzdG9yZS5zdGF0ZS5jb21wbGFpbnRzLm1hcChjb21wbGFpbnQgPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHV1aWQ6IGNvbXBsYWludC51dWlkLFxuICAgICAgICAgIHNlcmlhbE51bWJlcjogY29tcGxhaW50LnNlcmlhbE51bWJlcixcbiAgICAgICAgICBqb2JzVGV4dDogY29tcGxhaW50LmpvYnNUZXh0LFxuICAgICAgICAgIHN0YXR1czogY29tcGxhaW50LnN0YXR1cyAmJiBjb21wbGFpbnQuc3RhdHVzLm5hbWUsXG4gICAgICAgICAgZGF0ZUFkZGVkOiBjb21wbGFpbnQuZGF0ZUFkZGVkICYmIGNvbXBsYWludC5kYXRlQWRkZWQuZm9ybWF0dGVkLFxuICAgICAgICAgIG5hbWU6IGNvbXBsYWludC5uYW1lXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0sXG5cbiAgICBmaWx0ZXJlZERhdGEoKSB7XG4gICAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICAgIGNvbnN0IHNlYXJjaFRleHQgPSB0aGlzLiRzdG9yZS5zdGF0ZS5zdWJoZWFkZXIuc2VhcmNoVGV4dDsgLy8gVXNlIHN1YmhlYWRlciBzZWFyY2ggaW5wdXQgZm9yIHNlYXJjaGluZ1xuICAgICAgY29uc3QgZGF0YSA9IHRoaXMuY29tcGxhaW50cztcblxuICAgICAgaWYoc2VhcmNoVGV4dCkge1xuICAgICAgICBjb25zdCBzZWFyY2hSZWdFeCA9IG5ldyBSZWdFeHAoc2VhcmNoVGV4dCwgJ2knKVxuXG4gICAgICAgIHJldHVybiBkYXRhLmZpbHRlcihmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICAgIGZvcihsZXQgaT0wLCBsPXNlbGYuc2VhcmNoQ29sdW1ucy5sZW5ndGg7IGk8bDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBjb2x1bW4gPSBzZWxmLnNlYXJjaENvbHVtbnNbaV07XG5cbiAgICAgICAgICAgIGlmKHNlYXJjaFJlZ0V4LnRlc3QoaXRlbVtjb2x1bW5dKSkge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cbiAgfSxcbiAgbWV0aG9kczoge1xuICAgIGFkZENvbXBsYWludCgpIHtcbiAgICAgIHRoaXMuJHJlZnMuYWRkQ29tcGxhaW50TW9kYWwuc2hvdygpO1xuICAgIH1cbiAgfSxcbiAgbW91bnRlZDogZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuJHN0b3JlLmRpc3BhdGNoKCdnZXRDb21wbGFpbnRzJyk7XG5cbiAgICB0aGlzLiRzdG9yZS5jb21taXQoJ3NldFN1YmhlYWRlcicsIHtcbiAgICAgIHN1YnRpdGxlOiAnJyxcbiAgICAgIHRpdGxlOiB0aGlzLmxvYygnY29tcG9uZW50cy5jb21wbGFpbnRzLnN1YmhlYWRlclRpdGxlJyksXG4gICAgICBkZXNjcmlwdGlvbjogJycsXG4gICAgICBzZWFyY2hFbmFibGVkOiB0cnVlXG4gICAgfSk7XG4gIH1cbn1cbjwvc2NyaXB0PlxuIiwiPHRlbXBsYXRlPlxuICA8dGhlLTEtY29sdW1uLWxheW91dD5cbiAgICA8aW1nIHYtaWY9XCJtYWNoaW5lLm1hY2hpbmVJbWFnZVwiIDpzcmM9XCJtYWNoaW5lLm1hY2hpbmVJbWFnZVwiPlxuICAgIDxoMj57e2xvYygnY29tcG9uZW50cy5jdXN0b21lck1hY2hpbmUubWFjaGluZUluZm9ybWF0aW9uJyl9fTwvaDI+XG4gICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC14cy0xMiBjb2wtbWQtOFwiPlxuICAgICAgICA8dGFibGUgY2xhc3M9XCJ0YWJsZVwiPlxuICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cInRhYmxlX190ZCBoYXMtYmdcIj57e2xvYygnc2VyaWFsTnVtYmVyJyl9fTo8L3RkPlxuICAgICAgICAgICAgPHRkPnt7bWFjaGluZS5zZXJpYWxOdW1iZXJ9fTwvdGQ+XG4gICAgICAgICAgPC90cj5cbiAgICAgICAgICA8dHIgdi1pZj1cIm1hY2hpbmUuZGVsaXZlcnlEYXRlV2FycmFudHkgJiYgbWFjaGluZS5kZWxpdmVyeURhdGVXYXJyYW50eS5mb3JtYXR0ZWRcIj5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cInRhYmxlX190ZCBoYXMtYmdcIj57e2xvYygnZGVsaXZlcnlEYXRlU29sZCcpfX06PC90ZD5cbiAgICAgICAgICAgIDx0ZD57e21hY2hpbmUuZGVsaXZlcnlEYXRlV2FycmFudHkuZm9ybWF0dGVkfX08L3RkPlxuICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgPHRyIHYtaWY9XCJtYWNoaW5lLmRlbGl2ZXJ5RGF0ZSAmJiBtYWNoaW5lLmRlbGl2ZXJ5RGF0ZS5mb3JtYXR0ZWRcIj5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cInRhYmxlX190ZCBoYXMtYmdcIj57e2xvYygnY3VzdG9tZXJNYWNoaW5lV2FycmFudHlSZWdpc3RlcmVkJyl9fTo8L3RkPlxuICAgICAgICAgICAgPHRkPnt7bWFjaGluZS5kZWxpdmVyeURhdGUuZm9ybWF0dGVkfX08L3RkPlxuICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgPHRyIHYtaWY9XCJtYWNoaW5lLmRhdGVBZGRlZCAmJiBtYWNoaW5lLmRhdGVBZGRlZC5mb3JtYXR0ZWRcIj5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cInRhYmxlX190ZCBoYXMtYmdcIj57e2xvYygnZGF0ZUFkZGVkTWFjaGluZScpfX06PC90ZD5cbiAgICAgICAgICAgIDx0ZD57e21hY2hpbmUuZGF0ZUFkZGVkLmZvcm1hdHRlZH19PC90ZD5cbiAgICAgICAgICA8L3RyPlxuICAgICAgICAgIDx0ciB2LWlmPVwibWFjaGluZS5tYW51ZmFjdHVyaW5nRGF0ZSAmJiBtYWNoaW5lLm1hbnVmYWN0dXJpbmdEYXRlLmZvcm1hdHRlZFwiPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwidGFibGVfX3RkIGhhcy1iZ1wiPnt7bG9jKCdtYW51ZmFjdHVyaW5nRGF0ZScpfX06PC90ZD5cbiAgICAgICAgICAgIDx0ZD57e21hY2hpbmUubWFudWZhY3R1cmluZ0RhdGUuZm9ybWF0dGVkfX08L3RkPlxuICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgPHRyPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwidGFibGVfX3RkIGhhcy1iZ1wiPnt7bG9jKCdjb21wYW55Jyl9fTo8L3RkPlxuICAgICAgICAgICAgPHRkIHYtaWY9XCJtYWNoaW5lLnJldGFpbF9jdXN0b21lcl9uYW1lXCI+e3ttYWNoaW5lLnJldGFpbF9jdXN0b21lcl9uYW1lfX08L3RkPlxuICAgICAgICAgICAgPHRkIHYtZWxzZT57e21hY2hpbmUuY29tcGFueU5hbWV9fTwvdGQ+XG4gICAgICAgICAgPC90cj5cbiAgICAgICAgICA8dHI+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJ0YWJsZV9fdGQgaGFzLWJnXCI+e3tsb2MoJ2NvdW50cnknKX19OjwvdGQ+XG4gICAgICAgICAgICA8dGQ+e3ttYWNoaW5lLmNvdW50cnkubmFtZX19PC90ZD5cbiAgICAgICAgICA8L3RyPlxuICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cInRhYmxlX190ZCBoYXMtYmcgdGRcIj57e2xvYygnYWRkaXRpb25hbEluZm9ybWF0aW9uJyl9fTo8L3RkPlxuICAgICAgICAgICAgPHRkPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuXCI+XG4gICAgICAgICAgICAgICAgPGRpdiB2LWlmPVwiIWVkaXRvckFjdGl2YXRlZFwiIGNsYXNzPVwiZmxleC1maWxsXCI+XG4gICAgICAgICAgICAgICAgICA8cHJlPnt7bWFjaGluZS5hZGRpdGlvbmFsSW5mb3JtYXRpb259fTwvcHJlPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgdi1lbHNlIGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIGZsZXgtZmlsbFwiPlxuICAgICAgICAgICAgICAgICAgPHRleHRhcmVhXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWItMSBmb3JtLWNvbnRyb2wgdGV4dGFyZWFfX2ZpdC1jb250ZW50XCJcbiAgICAgICAgICAgICAgICAgICAgaWQ9XCJ0ZXh0YXJlYVwiXG4gICAgICAgICAgICAgICAgICAgIDp2YWx1ZT1cImFkZGl0aW9uYWxJbmZvcm1hdGlvblwiXG4gICAgICAgICAgICAgICAgICAgIEBpbnB1dD1cImhhbmRsZUlucHV0XCI+XG4gICAgICAgICAgICAgICAgICA8L3RleHRhcmVhPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleFwiPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIDpjbGFzcz1cInNhdmVCdG5WaXNpYmlsZSA/ICd2aXNpYmxlJyA6ICdpbnZpc2libGUnXCIgOmRpc2FibGVkPVwic2F2ZURpc2FibGVkXCIgQGNsaWNrPVwic2F2ZVwiIGNsYXNzPVwiYnRuIGJ0bi0td2hpdGUgc2F2ZS0tYnRuXCI+XG4gICAgICAgICAgICAgICAgICAgICAge3tsb2MoJ3NhdmUnKX19XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IDpjbGFzcz1cInNob3dTYXZlTWVzc2FnZSA/ICd2aXNpYmxlJyA6ICdpbnZpc2libGUnXCIgY2xhc3M9XCJzYXZlLS1tZXNzYWdlXCI+XG4gICAgICAgICAgICAgICAgICAgICAge3tzYXZlZFN1Y2Nlc3NmdWxseSA/IGxvYygnc2F2ZWRTdWNjZXNzZnVsbHknKSA6IGxvYygnZmFpbGVkVG9TYXZlJyl9fVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0YXJlYV9fZWRpdC1pY29uXCI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiB2LWlmPVwiZWRpdE1hY2hpbmVJbmZvUGVybWlzc2lvblwiIGNsYXNzPVwiaWNvbiBpY29uLS1wZW5jaWwtLWJsYWNrXCIgcm9sZT1cImJ1dHRvblwiIEBjbGljaz1cImFjdGl2YXRlRWRpdG9yXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgPC90cj5cbiAgICAgICAgPC90YWJsZT5cbiAgICAgICAgPGJyIC8+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wteHMtMTIgY29sLW1kLTRcIj5cbiAgICAgICAgPGEgdi1pZj1cIm1hY2hpbmUubWFjaGluZVBhZ2VcIiBjbGFzcz1cImJ0biBidG4tLXdoaXRlXCIgOmhyZWY9XCJtYWNoaW5lLm1hY2hpbmVQYWdlXCIgdGFyZ2V0PVwiX2JsYW5rXCI+XG4gICAgICAgICAge3tsb2MoJ2NvbXBvbmVudHMuY3VzdG9tZXJNYWNoaW5lLm1hY2hpbmVQcmVzZW50YXRpb24nKX19XG4gICAgICAgIDwvYT5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiB2LWlmPVwib3duZXJQZXJtaXNzaW9uXCIgY2xhc3M9XCJvd25lci1jaGFuZ2VcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC14cy0xMiBjb2wtbWQtNFwiPlxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLS13aGl0ZVwiIHYtb246Y2xpY2s9XCJtYWNoaW5lT3duZXJVcGRhdGVkID0gZmFsc2U7IG93bmVyRm9ybSA9ICFvd25lckZvcm07XCIgdGFyZ2V0PVwiX2JsYW5rXCI+XG4gICAgICAgICAgICB7e2xvYygnY29tcG9uZW50cy5jdXN0b21lck1hY2hpbmUubWFjaGluZU93bmVyc2hpcCcpfX1cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC14cy0xMiBjb2wtbWQtNlwiPlxuICAgICAgICAgIDxkaXYgdi1pZj1cIm1hY2hpbmVPd25lclVwZGF0ZWRcIiBjbGFzcz1cInVwZGF0ZWRcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdWNjZXNzXCIgPlxuICAgICAgICAgICAgICB7e2xvYygnY29tcG9uZW50cy5jdXN0b21lck1hY2hpbmUubWFjaGluZU93bmVyVXBkYXRlZCcpfX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgdi1lbHNlIGNsYXNzPVwiY29sLXhzLTEyIGNvbC1tZC0xMlwiPlxuICAgICAgICAgICAgPGRpdiB2LWlmPVwib3duZXJGb3JtXCIgY2xhc3M9XCJvd25lcmZvcm1cIj5cbiAgICAgICAgICAgICAgPGgzPnt7bG9jKCdjb21wb25lbnRzLmN1c3RvbWVyTWFjaGluZS5tYWNoaW5lTmV3T3duZXInKX19PC9oMz5cbiAgICAgICAgICAgICAgPHYtZm9ybSA6ZmllbGRzPVwiZmllbGRzXCIgOmZvcm0tZGF0YT1cImZvcm1EYXRhXCIgOmZvcm0tZXJyb3JzPVwiZm9ybUVycm9yc1wiPlxuICAgICAgICAgICAgICAgIDxkaXYgc2xvdD1cImJ1dHRvbnNcIiBjbGFzcz1cInYtZm9ybS1idXR0b24tZGl2XCI+XG4gICAgICAgICAgICAgICAgICA8YnV0dG9uIDpkaXNhYmxlZD1cInNlbmREaXNhYmxlZFwiIHYtb246Y2xpY2s9XCJ1cGRhdGVcIiB0eXBlPVwic3VibWl0XCIgY2xhc3M9XCJidG4gYnRuLS13aGl0ZVwiPlxuICAgICAgICAgICAgICAgICAgICB7e2xvYygndXBkYXRlSW5mb3JtYXRpb24nKX19XG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC92LWZvcm0+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgdi1pZj1cImNvbXBsYWludHMubGVuZ3RoXCI+XG4gICAgICA8aDI+e3tsb2MoJ2NvbXBsYWludHMnKX19PC9oMj5cbiAgICAgIDx2LWNsaWVudC10YWJsZSA6Y29sdW1ucz1cImNvbHVtbnNcIiA6ZGF0YT1cImZpbHRlcmVkQ29tcGxhaW50c0RhdGFcIiA6b3B0aW9ucz1cIm9wdGlvbnNcIj5cbiAgICAgICAgPHJvdXRlci1saW5rIHNsb3Q9XCJ1dWlkXCIgc2xvdC1zY29wZT1cInByb3BzXCIgOnRvPVwieyBuYW1lOiAnY29tcGxhaW50JywgcGFyYW1zOiB7IGlkOiBwcm9wcy5yb3cudXVpZCB9fVwiPnt7cHJvcHMucm93LnV1aWR9fTwvcm91dGVyLWxpbms+XG4gICAgICA8L3YtY2xpZW50LXRhYmxlPlxuICAgIDwvZGl2PlxuICAgIDwhLS0gaGlkZSBmb3Igbm93IDxkaXYgdi1pZj1cIm1hY2hpbmVEZXRhaWxzLmRhdGFcIj5cbiAgICAgIDxoMj57e2xvYygnY29tcG9uZW50cy5jdXN0b21lck1hY2hpbmUubWFjaGluZURhdGEnKX19PC9oMj5cbiAgICAgIDx0YWJsZSBjbGFzcz1cInRhYmxlIHRhYmxlLS1mbHVpZCB0YWJsZS0tbmFycm93LWZpcnN0LWNvbFwiPlxuICAgICAgICA8dHIgdi1mb3I9XCIoZGF0YSwga2V5KSBpbiBtYWNoaW5lRGV0YWlscy5kYXRhXCIgdi1iaW5kOmtleT1cImtleVwiPlxuICAgICAgICAgIDx0ZCBjbGFzcz1cInRhYmxlX190ZCBoYXMtYmdcIj57e2RhdGEubmFtZX19PC90ZD48dGQ+e3tkYXRhLnZhbHVlfX0ge3tkYXRhLnVuaXR9fTwvdGQ+XG4gICAgICAgIDwvdHI+XG4gICAgICA8L3RhYmxlPlxuICAgIDwvZGl2Pi0tPlxuICA8L3RoZS0xLWNvbHVtbi1sYXlvdXQ+XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuXG5pbXBvcnQgVkZvcm0gZnJvbSAnLi92LWZvcm0udnVlJztcblxuZXhwb3J0IGRlZmF1bHQge1xuICBjb21wb25lbnRzOiB7XG4gICAgJ3YtZm9ybSc6IFZGb3JtXG4gIH0sXG4gIG5hbWU6ICdWaWV3Q3VzdG9tZXJNYWNoaW5lJyxcbiAgZGF0YTogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB7XG4gICAgICBzZXJpYWxOdW1iZXI6ICcnLFxuICAgICAgc2VhcmNoQ29sdW1uczogWyd1dWlkJywgJ3NlcmlhbE51bWJlcicsICdkYXRlQWRkZWQnLCAnc3RhdHVzJywgJ2RlbGl2ZXJ5RGF0ZSddLFxuICAgICAgY29sdW1uczogWyd1dWlkJywgJ3NlcmlhbE51bWJlcicsICdkYXRlQWRkZWQnLCAnc3RhdHVzJywgJ2RlbGl2ZXJ5RGF0ZSddLFxuICAgICAgc29ydGFibGU6IFsndXVpZCcsICdzZXJpYWxOdW1iZXInLCAnZGF0ZUFkZGVkJywgJ3N0YXR1cycsICdkZWxpdmVyeURhdGUnXSxcbiAgICAgIGZpbHRlcmFibGU6IFsndXVpZCcsICdzZXJpYWxOdW1iZXInLCAnZGF0ZUFkZGVkJywgJ3N0YXR1cycsICdkZWxpdmVyeURhdGUnXSxcbiAgICAgIHNlbGVjdGVkOiAnMTAnLFxuICAgICAgZm9ybURhdGEgOiB7fSxcbiAgICAgIGZvcm1FcnJvcnM6IHt9LFxuICAgICAgb3duZXJQZXJtaXNzaW9uOiBmYWxzZSxcbiAgICAgIGVkaXRNYWNoaW5lSW5mb1Blcm1pc3Npb246IGZhbHNlLFxuICAgICAgZWRpdG9yQWN0aXZhdGVkOiBmYWxzZSxcbiAgICAgIHNhdmVEaXNhYmxlZDogdHJ1ZSxcbiAgICAgIHNhdmVCdG5WaXNpYmlsZTogZmFsc2UsXG4gICAgICBhZGRpdGlvbmFsSW5mb3JtYXRpb246ICcnLFxuICAgICAgc2hvd1NhdmVNZXNzYWdlOiBmYWxzZSxcbiAgICAgIHNhdmVkU3VjY2Vzc2Z1bGx5OiBmYWxzZSxcbiAgICAgIG93bmVyVXBkYXRlZDogZmFsc2UsXG4gICAgICBtYWNoaW5lT3duZXJVcGRhdGVkOiBmYWxzZSxcbiAgICAgIG93bmVyRm9ybSA6IGZhbHNlLFxuICAgICAgc2VuZERpc2FibGVkOiBmYWxzZVxuICAgIH1cbiAgfSxcbiAgY29tcHV0ZWQ6IHtcbiAgICBmaWVsZHMoKSB7XG4gICAgICBpZih0aGlzLiRzdG9yZS5nZXR0ZXJzLmNoaWxkQ29tcGFuaWVzT3B0aW9ucykge1xuICAgICAgICByZXR1cm4gW3tcbiAgICAgICAgICBuYW1lOiAnaWQnLFxuICAgICAgICAgIHZhbHVlOiB0aGlzLiRzdG9yZS5zdGF0ZS51c2VyLmluZm8uaWQsXG4gICAgICAgICAgbGFiZWw6ICdpZCcsXG4gICAgICAgICAgdHlwZTogJ2hpZGRlbidcbiAgICAgICAgfSx7XG4gICAgICAgICAgbmFtZTogJ2NoaWxkQ29tcGFueUlkJyxcbiAgICAgICAgICB2YWx1ZTogdGhpcy5tYWNoaW5lLmN1c3RvbWVyTnVtYmVyLFxuICAgICAgICAgIGxhYmVsOiB0aGlzLmxvYygnY29tcGFueScpLFxuICAgICAgICAgIG9wdGlvbnM6IHRoaXMuJHN0b3JlLmdldHRlcnMuY2hpbGRDb21wYW5pZXNPcHRpb25zLFxuICAgICAgICAgIHR5cGU6ICdzZWxlY3QnXG4gICAgICAgIH0se1xuICAgICAgICAgIG5hbWU6ICdzZXJpYWxOdW1iZXInLFxuICAgICAgICAgIHZhbHVlOiB0aGlzLnNlcmlhbE51bWJlcixcbiAgICAgICAgICBsYWJlbDogdGhpcy5sb2MoJ3NlcmlhbE51bWJlcicpLFxuICAgICAgICAgIHR5cGU6ICdoaWRkZW4nXG4gICAgICAgIH1dO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gW3tcbiAgICAgICAgbmFtZSA6ICdpZCcsXG4gICAgICAgIHZhbHVlOiAnJyxcbiAgICAgICAgbGFiZWw6IHRoaXMubG9jKCdjb21wYW55JyksXG4gICAgICAgIHR5cGUgOiAndGV4dCdcbiAgICAgIH0se1xuICAgICAgICBuYW1lOiAnc2VyaWFsTnVtYmVyJyxcbiAgICAgICAgdmFsdWU6IHRoaXMuc2VyaWFsTnVtYmVyLFxuICAgICAgICBsYWJlbDogdGhpcy5sb2MoJ3NlcmlhbE51bWJlcicpLFxuICAgICAgICB0eXBlOiAnaGlkZGVuJ1xuICAgICAgfV07XG4gICAgfSxcbiAgICBmaWx0ZXJlZENvbXBsYWludHNEYXRhKCkge1xuICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgICBjb25zdCBzZWFyY2hUZXh0ID0gdGhpcy4kc3RvcmUuc3RhdGUuc3ViaGVhZGVyLnNlYXJjaFRleHQ7IC8vIFVzZSBzdWJoZWFkZXIgc2VhcmNoIGlucHV0IGZvciBzZWFyY2hpbmdcbiAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmNvbXBsYWludHM7XG5cbiAgICAgIGlmKHNlYXJjaFRleHQpIHtcbiAgICAgICAgY29uc3Qgc2VhcmNoUmVnRXggPSBuZXcgUmVnRXhwKHNlYXJjaFRleHQsICdpJylcblxuICAgICAgICByZXR1cm4gZGF0YS5maWx0ZXIoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgICBmb3IobGV0IGk9MCwgbD1zZWxmLnNlYXJjaENvbHVtbnMubGVuZ3RoOyBpPGw7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgY29sdW1uID0gc2VsZi5zZWFyY2hDb2x1bW5zW2ldO1xuXG4gICAgICAgICAgICBpZihzZWFyY2hSZWdFeC50ZXN0KGl0ZW1bY29sdW1uXSkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9LFxuICAgIG9wdGlvbnMoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBmaWx0ZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgaGVhZGluZ3M6IHtcbiAgICAgICAgICB1dWlkOiB0aGlzLmxvYygnY29tcGxhaW50SWQnKSxcbiAgICAgICAgICBzZXJpYWxOdW1iZXI6IHRoaXMubG9jKCdzZXJpYWxOdW1iZXInKSxcbiAgICAgICAgICBkYXRlQWRkZWQ6IHRoaXMubG9jKCdkYXRlQWRkZWRDb21wbGFpbnQnKSxcbiAgICAgICAgICBzdGF0dXM6IHRoaXMubG9jKCdzdGF0dXMnKSxcbiAgICAgICAgICBkZWxpdmVyeURhdGU6IHRoaXMubG9jKCdkZWxpdmVyeURhdGUnKVxuICAgICAgICB9LFxuICAgICAgICB0ZXh0czoge1xuICAgICAgICAgICAgY291bnQ6IHRoaXMubG9jKCdwYWdpbmF0aW9uQ291bnQnKSxcbiAgICAgICAgICAgIGxpbWl0OiB0aGlzLmxvYygncmVjb3JkcycpLFxuICAgICAgICAgICAgbm9SZXN1bHRzOiB0aGlzLmxvYygnbm9NYXRjaGluZ1Jlc3VsdHMnKSxcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgY29tcGxhaW50c09wdGlvbnMoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBmaWx0ZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgaGVhZGluZ3M6IHtcbiAgICAgICAgICB1dWlkOiB0aGlzLmxvYygnY29tcGxhaW50SWQnKSxcbiAgICAgICAgICBzZXJpYWxOdW1iZXI6IHRoaXMubG9jKCdzZXJpYWxOdW1iZXInKSxcbiAgICAgICAgICBkYXRlQWRkZWQ6IHRoaXMubG9jKCdkYXRlQWRkZWRDb21wbGFpbnQnKSxcbiAgICAgICAgICBzdGF0dXM6IHRoaXMubG9jKCdzdGF0dXMnKSxcbiAgICAgICAgICBkZWxpdmVyeURhdGU6IHRoaXMubG9jKCdkZWxpdmVyeURhdGVDb21wbGFpbnQnKVxuICAgICAgICB9LFxuICAgICAgICB0ZXh0czoge1xuICAgICAgICAgICAgY291bnQ6IHRoaXMubG9jKCdwYWdpbmF0aW9uQ291bnQnKSxcbiAgICAgICAgICAgIGxpbWl0OiB0aGlzLmxvYygncmVjb3JkcycpLFxuICAgICAgICAgICAgbm9SZXN1bHRzOiB0aGlzLmxvYygnbm9NYXRjaGluZ1Jlc3VsdHMnKSxcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgY29tcGxhaW50cygpIHtcbiAgICAgIHJldHVybiB0aGlzLiRzdG9yZS5zdGF0ZS5jb21wbGFpbnRzLmZpbHRlcihjb21wbGFpbnQgPT4gY29tcGxhaW50LnNlcmlhbE51bWJlciA9PT0gdGhpcy5zZXJpYWxOdW1iZXIpLm1hcChjb21wbGFpbnQgPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHV1aWQ6IGNvbXBsYWludC51dWlkLFxuICAgICAgICAgIHNlcmlhbE51bWJlcjogY29tcGxhaW50LnNlcmlhbE51bWJlcixcbiAgICAgICAgICBqb2JzVGV4dDogY29tcGxhaW50LmpvYnNUZXh0LFxuICAgICAgICAgIHN0YXR1czogY29tcGxhaW50LnN0YXR1cyAmJiBjb21wbGFpbnQuc3RhdHVzLm5hbWUsXG4gICAgICAgICAgZGF0ZUFkZGVkOiBjb21wbGFpbnQuZGF0ZUFkZGVkICYmIGNvbXBsYWludC5kYXRlQWRkZWQuZm9ybWF0dGVkLFxuICAgICAgICAgIGRlbGl2ZXJ5RGF0ZTogY29tcGxhaW50LmRlbGl2ZXJ5RGF0ZVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9LFxuICAgIG1hY2hpbmUoKSB7XG4gICAgICBmb3IobGV0IGk9MCwgbD10aGlzLiRzdG9yZS5zdGF0ZS5jdXN0b21lck1hY2hpbmVzLmxlbmd0aDsgaTxsOyBpKyspIHtcbiAgICAgICAgaWYodGhpcy4kc3RvcmUuc3RhdGUuY3VzdG9tZXJNYWNoaW5lc1tpXS5zZXJpYWxOdW1iZXIgPT09IHRoaXMuc2VyaWFsTnVtYmVyKSB7XG4gICAgICAgICAgdGhpcy4kc3RvcmUuY29tbWl0KCdzZXRTdWJoZWFkZXInLCB7XG4gICAgICAgICAgICBzdWJ0aXRsZTogJycsXG4gICAgICAgICAgICB0aXRsZTogdGhpcy4kc3RvcmUuc3RhdGUuY3VzdG9tZXJNYWNoaW5lc1tpXS5tYWNoaW5lTW9kZWxOYW1lLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246ICcnLFxuICAgICAgICAgICAgc2VhcmNoRW5hYmxlZDogZmFsc2VcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0aGlzLmFkZGl0aW9uYWxJbmZvcm1hdGlvbiA9IHRoaXMuJHN0b3JlLnN0YXRlLmN1c3RvbWVyTWFjaGluZXNbaV0uYWRkaXRpb25hbEluZm9ybWF0aW9uO1xuICAgICAgICAgIHJldHVybiB0aGlzLiRzdG9yZS5zdGF0ZS5jdXN0b21lck1hY2hpbmVzW2ldO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIElmIG5vdGhpbmcgaXMgZm91bmRcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvdW50cnk6IHt9LFxuICAgICAgICBkZWxpdmVyeURhdGU6IHt9XG4gICAgICB9O1xuICAgIH0sXG4gICAgbWFjaGluZURldGFpbHMoKSB7XG4gICAgICBmb3IobGV0IGk9MCwgbD10aGlzLiRzdG9yZS5zdGF0ZS5jdXN0b21lck1hY2hpbmVEZXRhaWxzLmxlbmd0aDsgaTxsOyBpKyspIHtcbiAgICAgICAgaWYodGhpcy4kc3RvcmUuc3RhdGUuY3VzdG9tZXJNYWNoaW5lRGV0YWlsc1tpXS5zZXJpYWxOdW1iZXIgPT09IHRoaXMuc2VyaWFsTnVtYmVyKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuJHN0b3JlLnN0YXRlLmN1c3RvbWVyTWFjaGluZURldGFpbHNbaV07XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gSWYgbm90aGluZyBpcyBmb3VuZFxuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgfSxcbiAgbWV0aG9kczoge1xuICAgIGFzeW5jIHVwZGF0ZSgpIHtcbiAgICAgIHRoaXMuc2VuZERpc2FibGVkID0gdHJ1ZTtcbiAgICAgIHJldHVybiB0aGlzLiRhcGkudXBkYXRlQ3VzdG9tZXJNYWNoaW5lT3duZXIodGhpcy5mb3JtRGF0YS5zZXJpYWxOdW1iZXIsIHRoaXMuZm9ybURhdGEpLnRoZW4ocmVzID0+IHtcbiAgICAgICAgdGhpcy5zZW5kRGlzYWJsZWQgPSBmYWxzZTtcblxuICAgICAgICAvLyBFcnJvcnMgaW4gZm9ybVxuICAgICAgICBpZihyZXMuY29kZSA9PT0gNDAwKSB7XG4gICAgICAgICAgdGhpcy5mb3JtRXJyb3JzID0gcmVzLnJlc3VsdC5maWVsZHM7XG4gICAgICAgIH1cblxuXG4gICAgICAgIGlmKHJlcy5jb2RlID09PSAyMDApIHtcbiAgICAgICAgICB0aGlzLm1hY2hpbmVPd25lclVwZGF0ZWQgPSB0cnVlOyAvL3Nob3cgbWVzc2FnZVxuICAgICAgICAgIHRoaXMuJHN0b3JlLmRpc3BhdGNoKCdnZXRDdXN0b21lck1hY2hpbmUnLCB0aGlzLnNlcmlhbE51bWJlcik7IC8vdXBkYXRlIG1hY2hpbmUgdmlld1xuICAgICAgICAgIHRoaXMub3duZXJGb3JtID0gZmFsc2U7IC8vaGlkZSBmb3JtXG4gICAgICAgIH1cblxuICAgICAgfSk7XG5cbiAgICB9LFxuXG4gICAgYWN0aXZhdGVFZGl0b3IoKSB7XG4gICAgICB0aGlzLmVkaXRvckFjdGl2YXRlZCA9IHRydWU7XG4gICAgICB0aGlzLiRuZXh0VGljaygoKSA9PiB7XG4gICAgICAgIGNvbnN0IHRleHRhcmVhID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RleHRhcmVhJyk7XG4gICAgICAgIHRleHRhcmVhLmZvY3VzKCk7XG4gICAgICAgIHRleHRhcmVhLnN0eWxlLmhlaWdodCA9IHRleHRhcmVhLnNjcm9sbEhlaWdodCArICdweCc7XG4gICAgICAgIH0pO1xuICAgIH0sXG5cbiAgICBoYW5kbGVJbnB1dChldmVudCkgIHtcbiAgICAgIHRoaXMuc2F2ZURpc2FibGVkID0gZmFsc2U7XG4gICAgICB0aGlzLnNhdmVCdG5WaXNpYmlsZSA9IHRydWU7XG4gICAgICB0aGlzLmFkZGl0aW9uYWxJbmZvcm1hdGlvbiA9IGV2ZW50LnRhcmdldC52YWx1ZTtcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSBldmVudC50YXJnZXQ7XG4gICAgICBlbGVtZW50LnN0eWxlLmhlaWdodCA9ICdhdXRvJztcbiAgICAgIGVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gZWxlbWVudC5zY3JvbGxIZWlnaHQgKyAncHgnOyAvLyBhZGp1c3QgdGV4dGFyZWEgaGVpZ2h0IHRvIHRoZSBpbnB1dCBjb250ZW50XG4gICAgfSxcblxuICAgIGFzeW5jIHNhdmUoKSB7XG4gICAgICB0aGlzLnNhdmVEaXNhYmxlZCA9IHRydWU7XG5cbiAgICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICAgIGFkZGl0aW9uYWxJbmZvcm1hdGlvbjogdGhpcy5hZGRpdGlvbmFsSW5mb3JtYXRpb25cbiAgICAgIH07XG5cbiAgICAgIHJldHVybiB0aGlzLiRhcGkuc2F2ZUN1c3RvbWVyTWFjaGluZUluZm9ybWF0aW9uKHRoaXMuc2VyaWFsTnVtYmVyLCBkYXRhKS50aGVuKHJlcyA9PiB7XG5cblxuICAgICAgICBpZihyZXMuY29kZSA9PT0gNDAwIHx8IHJlcy5jb2RlID09PSA1MDApIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKHJlcy5yZXN1bHQuZmllbGRzKTtcbiAgICAgICAgICB0aGlzLnNhdmVkU3VjY2Vzc2Z1bGx5ID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBpZihyZXMuY29kZSA9PT0gMjAwKSB7XG4gICAgICAgICAgdGhpcy5zYXZlZFN1Y2Nlc3NmdWxseSA9IHRydWU7XG4gICAgICAgICAgdGhpcy4kc3RvcmUuZGlzcGF0Y2goJ2dldEN1c3RvbWVyTWFjaGluZScsIHRoaXMuc2VyaWFsTnVtYmVyKTsgLy8gdXBkYXRlIG1hY2hpbmUgdmlld1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zaG93U2F2ZU1lc3NhZ2UgPSB0cnVlOyAvLyBzaG93IG1lc3NhZ2VcblxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsgLy8gZmFkZSBvdXQgdGhlIHNhdmVkIG1lc3NhZ2UgYW5kIGJ1dHRvblxuICAgICAgICAgICAgdGhpcy5zaG93U2F2ZU1lc3NhZ2UgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuc2F2ZUJ0blZpc2liaWxlID0gdGhpcy5zYXZlZFN1Y2Nlc3NmdWxseSA/IGZhbHNlIDogdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuc2F2ZURpc2FibGVkID0gdGhpcy5zYXZlZFN1Y2Nlc3NmdWxseSA/IHRydWUgOiBmYWxzZTtcbiAgICAgICAgICAgIH0sIDIwMDApO1xuXG4gICAgICB9KTtcbiAgICB9XG5cbiAgfSxcbiAgbW91bnRlZDogZnVuY3Rpb24gKCkge1xuXG4gICAgLy9QZXJtaXNzaW9uIHRvIHNob3cgbWFjaGluZSBvd25lcnNoaXAgZm9ybSAtIHRydWUvZmFsc2VcbiAgICAvL3JldGFpbGVyLCBjdXN0b21lciBhbmQgcmV0YWlsZXItYWRtaW4gd29uJ3QgZ2V0IHBlcm1pc3Npb25cblxuICAgIHRoaXMub3duZXJQZXJtaXNzaW9uID1cbiAgICAgIHRoaXMuJHVzZXJSaWdodHMuaGFzUmlnaHQoIHdpbmRvdy5SSUdIVFMuVklFV19PV05FUlNISVBfRk9STSwgdGhpcy4kc3RvcmUuc3RhdGUudXNlci5yb2xlIClcbiAgICAgID8gdHJ1ZVxuICAgICAgOiBmYWxzZTtcblxuICAgIHRoaXMuZWRpdE1hY2hpbmVJbmZvUGVybWlzc2lvbiA9XG4gICAgICB0aGlzLiR1c2VyUmlnaHRzLmhhc1JpZ2h0KCB3aW5kb3cuUklHSFRTLkVESVRfTUFDSElORV9JTkZPLCB0aGlzLiRzdG9yZS5zdGF0ZS51c2VyLnJvbGUpXG4gICAgICA/IHRydWVcbiAgICAgIDogZmFsc2U7XG5cbiAgICB0aGlzLnNlcmlhbE51bWJlciA9IHRoaXMuJHJvdXRlLnBhcmFtcy5zZXJpYWxOdW1iZXJcblxuICAgIHRoaXMubWFjaGluZU93bmVyVXBkYXRlZCA9IGZhbHNlO1xuICAgIHRoaXMuJHN0b3JlLmRpc3BhdGNoKCdnZXRDdXN0b21lck1hY2hpbmUnLCB0aGlzLnNlcmlhbE51bWJlcilcbiAgICB0aGlzLiRzdG9yZS5kaXNwYXRjaCgnZ2V0Q3VzdG9tZXJNYWNoaW5lRGV0YWlscycsIHRoaXMuc2VyaWFsTnVtYmVyKTtcbiAgICB0aGlzLiRzdG9yZS5kaXNwYXRjaCgnZ2V0Q2hpbGRDb21wYW5pZXMnKTtcbiAgICB0aGlzLiRzdG9yZS5kaXNwYXRjaCgnZ2V0Q29tcGxhaW50cycsIHtcbiAgICAgIHNlcmlhbE51bWJlcjogdGhpcy5zZXJpYWxOdW1iZXJcbiAgICB9KVxuXG4gICAgdGhpcy4kc3RvcmUuY29tbWl0KCdzZXRTdWJoZWFkZXInLCB7XG4gICAgICBzdWJ0aXRsZTogJycsXG4gICAgICB0aXRsZTogJycsXG4gICAgICBkZXNjcmlwdGlvbjogJycsXG4gICAgICBzZWFyY2hFbmFibGVkOiBmYWxzZVxuICAgIH0pO1xuICB9XG59XG48L3NjcmlwdD5cbiIsIjx0ZW1wbGF0ZT5cbiAgPHRoZS1zaWRlYmFyLWxheW91dD5cbiAgICA8ZGl2IGNsYXNzPVwic2hvdy1zZWFyY2gtYnV0dG9uXCIgdi1vbjpjbGljaz1cInNob3dTZWFyY2hcIiBzbG90PVwic2lkZWJhci10aXRsZVwiPnt7bG9jKCdmaWx0ZXJSZXN1bHRzJyl9fTwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJoaWRlLW1vYmlsZSBzaWRlYmFyU2VhcmNoXCIgc2xvdD1cInNpZGViYXJcIj5cbiAgICAgIDx2LWZvcm0gOmZpZWxkcz1cImZpbHRlckZpZWxkc1wiIDpmb3JtLWRhdGE9XCJmb3JtRGF0YVwiIDpmb3JtLWVycm9ycz1cImZvcm1FcnJvcnNcIiA6b24tY2hhbmdlPVwiZmlsdGVyc0NoYW5nZWRcIj48L3YtZm9ybT5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiaGlkZS1tb2JpbGVcIiBzdHlsZT1cImZsb2F0OiByaWdodDsgbWFyZ2luLWJvdHRvbTogNTBweFwiPlxuICAgICAgPGRpdj57e3RoaXMubG9jKCdyZWNvcmRzJyl9fTwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImN1c3RvbS1zZWxlY3QganMtY3VzdG9tLXNlbGVjdC13cmFwcGVyXCIgc3R5bGU9XCJ3aWR0aDogMTAwcHhcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImN1c3RvbS1zZWxlY3RfX2Ryb3Bkb3duIGpzLWN1c3RvbS1zZWxlY3QtZHJvcGRvd24gY3VzdG9tLXNlbGVjdF9fc21hbGxcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImN1c3RvbS1zZWxlY3RfX3RleHQganMtY3VzdG9tLXNlbGVjdC10ZXh0aG9sZGVyXCI+e3tzZWxlY3RlZFZhbHVlfX08L3NwYW4+XG4gICAgICAgICAgPHNlbGVjdCB2LW1vZGVsPVwic2VsZWN0ZWRcIiBAY2hhbmdlPVwiJHJlZnMudGFibGUuc2V0TGltaXQoJGV2ZW50LnRhcmdldC52YWx1ZSlcIiBjbGFzcz1cImZvcm1fX2ZpZWxkLXNlbGVjdCBqcy1jdXN0b20tc2VsZWN0IGZvcm1fX2ZpZWxkLXNlbGVjdC1jdXN0b20ganMtbGFuZy1zZWxlY3QgbGFuZ19zZWxlY3RcIj5cbiAgICAgICAgICAgIDxvcHRpb24gdi1iaW5kOnRleHQ9XCIxMFwiIHZhbHVlPVwiMTBcIj4xMDwvb3B0aW9uPlxuICAgICAgICAgICAgPG9wdGlvbiB2LWJpbmQ6dGV4dD1cIjI1XCIgdmFsdWU9XCIyNVwiPjI1PC9vcHRpb24+XG4gICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPHYtY2xpZW50LXRhYmxlIHJlZj1cInRhYmxlXCIgOmNvbHVtbnM9XCJjb2x1bW5zXCIgOmRhdGE9XCJmaWx0ZXJlZERhdGFcIiA6b3B0aW9ucz1cIm9wdGlvbnNcIj5cbiAgICAgIDxyb3V0ZXItbGluayBzbG90PVwic2VyaWFsTnVtYmVyXCIgc2xvdC1zY29wZT1cInByb3BzXCIgOnRvPVwieyBuYW1lOiAnY3VzdG9tZXItbWFjaGluZScsIHBhcmFtczogeyBzZXJpYWxOdW1iZXI6IHByb3BzLnJvdy5zZXJpYWxOdW1iZXIgfX1cIj57e3Byb3BzLnJvdy5zZXJpYWxOdW1iZXJ9fTwvcm91dGVyLWxpbms+XG4gICAgICA8ZGl2IHNsb3Q9XCJkZWxpdmVyeURhdGVXYXJyYW50eVwiIHNsb3Qtc2NvcGU9XCJwcm9wc1wiPnt7cHJvcHMucm93LmRlbGl2ZXJ5RGF0ZVdhcnJhbnR5Rm9ybWF0dGVkfX08L2Rpdj5cbiAgICA8L3YtY2xpZW50LXRhYmxlPlxuICAgIDxkaXYgY2xhc3M9XCJzcGlubmVyXCI+PC9kaXY+XG4gIDwvdGhlLXNpZGViYXItbGF5b3V0PlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBWRm9ybSBmcm9tICcuL3YtZm9ybS52dWUnO1xuaW1wb3J0IHF1ZXJ5U3RyaW5nIGZyb20gJ3F1ZXJ5LXN0cmluZyc7XG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7XG5pbXBvcnQgJCBmcm9tICdqcXVlcnknO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG5hbWU6ICdWaWV3Q3VzdG9tZXJNYWNoaW5lcycsXG4gIGNvbXBvbmVudHM6IHtcbiAgICAndi1mb3JtJzogVkZvcm1cbiAgfSxcbiAgZGF0YTogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB7XG4gICAgICBmb3JtRXJyb3JzOiB7fSxcbiAgICAgIGZvcm1EYXRhOiB7fSxcbiAgICAgIGZpbHRlckRhdGE6IHtcbiAgICAgICAgc2VyaWFsTnVtYmVyOiAnJyxcbiAgICAgICAgYmFzZU1vZGVsOiAnJyxcbiAgICAgICAgZGVsaXZlcnlEYXRlU3RhcnQ6ICcnLFxuICAgICAgICBkZWxpdmVyeURhdGVFbmQ6ICcnLFxuICAgICAgICBjb3VudHJ5OiAnJyxcbiAgICAgICAgZGF0ZUFkZGVkU3RhcnQ6ICcnLFxuICAgICAgICBkYXRlQWRkZWRFbmQ6ICcnLFxuICAgICAgfSxcbiAgICAgIGZpbHRlcmluZ0VuYWJsZWQ6IGZhbHNlLFxuICAgICAgc2VhcmNoVGV4dDogJycsXG4gICAgICBzZWFyY2hDb2x1bW5zOiBbJ21hY2hpbmVNb2RlbE5hbWUnLCAnc2VyaWFsTnVtYmVyJywgJ2RlbGl2ZXJ5RGF0ZVdhcnJhbnR5Rm9ybWF0dGVkJywgJ2NvbXBhbnlOYW1lJywgJ2RhdGVBZGRlZEZvcm1hdHRlZCcsICdjb3VudHJ5J10sXG4gICAgICBjb2x1bW5zOiBbJ21hY2hpbmVNb2RlbE5hbWUnLCAnc2VyaWFsTnVtYmVyJywgJ2RlbGl2ZXJ5RGF0ZVdhcnJhbnR5JywgJ2NvbXBhbnlOYW1lJywgJ2RhdGVBZGRlZCcsICdjb3VudHJ5J10sXG4gICAgICBzb3J0YWJsZTogWydtYWNoaW5lTW9kZWxOYW1lJywgJ3NlcmlhbE51bWJlcicsICdkZWxpdmVyeURhdGVXYXJyYW50eScsICdjb21wYW55TmFtZScsICdkYXRlQWRkZWQnLCdjb3VudHJ5J10sXG4gICAgICBmaWx0ZXJhYmxlOiBbJ21hY2hpbmVNb2RlbE5hbWUnLCAnc2VyaWFsTnVtYmVyJywgJ2RlbGl2ZXJ5RGF0ZVdhcnJhbnR5JywgJ2NvbXBhbnlOYW1lJywgJ2RhdGVBZGRlZCcsJ2NvdW50cnknXSxcbiAgICAgIHNlbGVjdGVkOiAnMTAnXG4gICAgfVxuICB9LFxuICBjb21wdXRlZDoge1xuICAgIGZpbHRlckZpZWxkcygpIHtcbiAgICAgIC8vIE9ubHkgcG9wdWxhdGUgZmllbGRzIGFmdGVyIHBvc3NpYmxlIHVybCBxdWVyeSBmaWx0ZXJzIGhhdmUgYmVlbiBhcHBsaWVkXG4gICAgICBpZighdGhpcy5maWx0ZXJpbmdFbmFibGVkKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIFt7XG4gICAgICAgIG5hbWU6ICdzZXJpYWxOdW1iZXInLFxuICAgICAgICB2YWx1ZTogdGhpcy5maWx0ZXJEYXRhLnNlcmlhbE51bWJlcixcbiAgICAgICAgbGFiZWw6IHRoaXMubG9jKCdzZXJpYWxOdW1iZXInKSxcbiAgICAgICAgdHlwZTogJ3RleHQnXG4gICAgICB9LCB7XG4gICAgICAgIG5hbWU6ICdkZWxpdmVyeURhdGVTdGFydCcsXG4gICAgICAgIHZhbHVlOiB0aGlzLmZpbHRlckRhdGEuZGVsaXZlcnlEYXRlU3RhcnQgPyBuZXcgRGF0ZSh0aGlzLmZpbHRlckRhdGEuZGVsaXZlcnlEYXRlU3RhcnQpIDogJycsXG4gICAgICAgIGxhYmVsOiB0aGlzLmxvYygnZGVsaXZlcnlEYXRlU3RhcnQnKSxcbiAgICAgICAgdHlwZTogJ2RhdGUnXG4gICAgICB9LCB7XG4gICAgICAgIG5hbWU6ICdkZWxpdmVyeURhdGVFbmQnLFxuICAgICAgICB2YWx1ZTogdGhpcy5maWx0ZXJEYXRhLmRlbGl2ZXJ5RGF0ZUVuZCA/IG5ldyBEYXRlKHRoaXMuZmlsdGVyRGF0YS5kZWxpdmVyeURhdGVFbmQpIDogJycsXG4gICAgICAgIGxhYmVsOiB0aGlzLmxvYygnZGVsaXZlcnlEYXRlRW5kJyksXG4gICAgICAgIHR5cGU6ICdkYXRlJ1xuICAgICAgfSwge1xuICAgICAgICBuYW1lOiAnYmFzZU1vZGVsJyxcbiAgICAgICAgdmFsdWU6IHRoaXMuZmlsdGVyRGF0YS5iYXNlTW9kZWwsXG4gICAgICAgIGxhYmVsOiB0aGlzLmxvYygnbWFjaGluZU1vZGVsJyksXG4gICAgICAgIG9wdGlvbnM6IHRoaXMuYmFzZU1hY2hpbmVPcHRpb25zLFxuICAgICAgICB0eXBlOiAnc2VsZWN0J1xuICAgICAgfSwge1xuICAgICAgICBuYW1lOiAnY291bnRyeScsXG4gICAgICAgIHZhbHVlOiB0aGlzLmZpbHRlckRhdGEuY291bnRyeSxcbiAgICAgICAgbGFiZWw6IHRoaXMubG9jKCdjb3VudHJ5JyksXG4gICAgICAgIG9wdGlvbnM6IHRoaXMuY291bnRyeU9wdGlvbnMsXG4gICAgICAgIHR5cGU6ICdzZWxlY3QnXG4gICAgICB9LCB7XG4gICAgICAgIG5hbWU6ICdkYXRlQWRkZWRTdGFydCcsXG4gICAgICAgIHZhbHVlOiB0aGlzLmZpbHRlckRhdGEuZGF0ZUFkZGVkU3RhcnQgPyBuZXcgRGF0ZSh0aGlzLmZpbHRlckRhdGEuZGF0ZUFkZGVkU3RhcnQpIDogJycsXG4gICAgICAgIGxhYmVsOiB0aGlzLmxvYygnZGF0ZUFkZGVkU3RhcnQnKSxcbiAgICAgICAgdHlwZTogJ2RhdGUnXG4gICAgICB9LCB7XG4gICAgICAgIG5hbWU6ICdkYXRlQWRkZWRFbmQnLFxuICAgICAgICB2YWx1ZTogdGhpcy5maWx0ZXJEYXRhLmRhdGVBZGRlZEVuZCA/IG5ldyBEYXRlKHRoaXMuZmlsdGVyRGF0YS5kYXRlQWRkZWRFbmQpIDogJycsXG4gICAgICAgIGxhYmVsOiB0aGlzLmxvYygnZGF0ZUFkZGVkRW5kJyksXG4gICAgICAgIHR5cGU6ICdkYXRlJ1xuICAgICAgfV07XG4gICAgfSxcbiAgICBjb3VudHJ5T3B0aW9ucygpIHtcbiAgICAgIGNvbnN0IG9wdGlvbnMgPSBbXTtcbiAgICAgIGNvbnN0IGFkZGVkT3B0aW9ucyA9IFtdO1xuXG4gICAgICBvcHRpb25zLnB1c2goe1xuICAgICAgICB2YWx1ZTogJycsXG4gICAgICAgIHRleHQ6ICctLSdcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLiRzdG9yZS5zdGF0ZS5jdXN0b21lck1hY2hpbmVzLmZvckVhY2gobWFjaGluZSA9PiB7XG4gICAgICAgIGlmKGFkZGVkT3B0aW9ucy5pbmRleE9mKG1hY2hpbmUuY291bnRyeS5jb3VudHJ5Q29kZSkgPT09IC0xKSB7XG5cbiAgICAgICAgICBvcHRpb25zLnB1c2goe1xuICAgICAgICAgICAgdmFsdWU6IG1hY2hpbmUuY291bnRyeS5jb3VudHJ5Q29kZSxcbiAgICAgICAgICAgIHRleHQ6IG1hY2hpbmUuY291bnRyeS5uYW1lXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBhZGRlZE9wdGlvbnMucHVzaChtYWNoaW5lLmNvdW50cnkuY291bnRyeUNvZGUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIG9wdGlvbnMuc29ydCgoYSwgYikgPT4gKGEudGV4dCA+IGIudGV4dCkgPyAxIDogLTEpO1xuICAgICAgcmV0dXJuIG9wdGlvbnM7XG4gICAgfSxcbiAgICBiYXNlTWFjaGluZU9wdGlvbnMoKSB7XG4gICAgICBjb25zdCBvcHRpb25zID0gW107XG4gICAgICBjb25zdCBhZGRlZE9wdGlvbnMgPSBbXTtcblxuICAgICAgb3B0aW9ucy5wdXNoKHtcbiAgICAgICAgdmFsdWU6ICcnLFxuICAgICAgICB0ZXh0OiAnLS0nXG4gICAgICB9KTtcblxuICAgICAgdGhpcy4kc3RvcmUuc3RhdGUuY3VzdG9tZXJNYWNoaW5lcy5mb3JFYWNoKG1hY2hpbmUgPT4ge1xuICAgICAgICBpZiggYWRkZWRPcHRpb25zLmluZGV4T2YobWFjaGluZS5tYWNoaW5lQmFzZU1vZGVsSWQpID09PSAtMSAmJiBtYWNoaW5lLm1hY2hpbmVCYXNlTW9kZWxOYW1lICE9PSBudWxsICkge1xuXG4gICAgICAgICAgaWYoIG1hY2hpbmUubWFjaGluZUJhc2VNb2RlbElkICE9PSBudWxsICl7XG4gICAgICAgICAgICBvcHRpb25zLnB1c2goe1xuICAgICAgICAgICAgICB2YWx1ZTogbWFjaGluZS5tYWNoaW5lQmFzZU1vZGVsSWQsXG4gICAgICAgICAgICAgIHRleHQ6IG1hY2hpbmUubWFjaGluZUJhc2VNb2RlbE5hbWVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGFkZGVkT3B0aW9ucy5wdXNoKG1hY2hpbmUubWFjaGluZUJhc2VNb2RlbElkKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBvcHRpb25zLnNvcnQoKGEsIGIpID0+IChhLnRleHQgPiBiLnRleHQpID8gMSA6IC0xKTtcbiAgICAgIHJldHVybiBvcHRpb25zO1xuICAgIH0sXG4gICAgbWFjaGluZURhdGEoKSB7XG4gICAgICBjb25zdCBpdGVtcyA9IFtdO1xuXG4gICAgICB0aGlzLiRzdG9yZS5zdGF0ZS5jdXN0b21lck1hY2hpbmVzLmZvckVhY2gobWFjaGluZSA9PiB7XG4gICAgICAgIGNvbnN0IGl0ZW0gPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KG1hY2hpbmUpKTtcbiAgICAgICAgaXRlbS5jb3VudHJ5Q29kZSA9IGl0ZW0uY291bnRyeS5jb3VudHJ5Q29kZTtcbiAgICAgICAgaXRlbS5jb3VudHJ5ID0gaXRlbS5jb3VudHJ5Lm5hbWU7XG4gICAgICAgIGl0ZW0uZGVsaXZlcnlEYXRlV2FycmFudHlGb3JtYXR0ZWQgPSBpdGVtLmRlbGl2ZXJ5RGF0ZS5mb3JtYXR0ZWQ7XG4gICAgICAgIGl0ZW0uZGVsaXZlcnlEYXRlV2FycmFudHkgPSBpdGVtLmRlbGl2ZXJ5RGF0ZS5kYXRlO1xuICAgICAgICBpdGVtLmRhdGVBZGRlZEZvcm1hdHRlZCA9ICBpdGVtLmRhdGVBZGRlZC5mb3JtYXR0ZWQ7XG4gICAgICAgIGl0ZW0uZGF0ZUFkZGVkID0gaXRlbS5kYXRlQWRkZWQuZGF0ZTtcbiAgICAgICAgaXRlbS5jb21wYW55TmFtZSA9IChpdGVtLnJldGFpbF9jdXN0b21lcl9uYW1lICE9ICcnKSA/IGl0ZW0ucmV0YWlsX2N1c3RvbWVyX25hbWUgOiBpdGVtLmNvbXBhbnlOYW1lO1xuICAgICAgICBpdGVtcy5wdXNoKGl0ZW0pO1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBpdGVtcztcbiAgICB9LFxuICAgIG9wdGlvbnMoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBmaWx0ZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgaGVhZGluZ3M6IHtcbiAgICAgICAgICBtYWNoaW5lTW9kZWxOYW1lOiB0aGlzLmxvYygnbWFjaGluZU1vZGVsJyksXG4gICAgICAgICAgc2VyaWFsTnVtYmVyOiB0aGlzLmxvYygnc2VyaWFsTnVtYmVyJyksXG4gICAgICAgICAgZGVsaXZlcnlEYXRlV2FycmFudHk6IHRoaXMubG9jKCdjdXN0b21lck1hY2hpbmVXYXJyYW50eVJlZ2lzdGVyZWQnKSxcbiAgICAgICAgICBjb21wYW55TmFtZTogdGhpcy5sb2MoJ2NvbXBhbnknKSxcbiAgICAgICAgICBjb3VudHJ5OiB0aGlzLmxvYygnY291bnRyeScpLFxuICAgICAgICAgIGRhdGVBZGRlZDogdGhpcy5sb2MoJ2RhdGVBZGRlZE1hY2hpbmUnKVxuICAgICAgICB9LFxuICAgICAgICB0ZXh0czoge1xuICAgICAgICAgICAgY291bnQ6IHRoaXMubG9jKCdwYWdpbmF0aW9uQ291bnQnKSxcbiAgICAgICAgICAgIGxpbWl0OiB0aGlzLmxvYygncmVjb3JkcycpLFxuICAgICAgICAgICAgbm9SZXN1bHRzOiB0aGlzLmxvYygnbm9NYXRjaGluZ1Jlc3VsdHMnKSxcbiAgICAgICAgfSxcbiAgICAgICAgc2tpbjogJ3RhYmxlLXJlc3BvbnNpdmUnXG5cbiAgICAgIH1cbiAgICB9LFxuICAgIGZpbHRlcmVkRGF0YSgpIHtcbiAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgICAgY29uc3Qgc2VhcmNoVGV4dCA9IHRoaXMuJHN0b3JlLnN0YXRlLnN1YmhlYWRlci5zZWFyY2hUZXh0OyAvLyBVc2Ugc3ViaGVhZGVyIHNlYXJjaCBpbnB1dCBmb3Igc2VhcmNoaW5nXG4gICAgICBjb25zdCBkYXRhID0gdGhpcy5tYWNoaW5lRGF0YTtcbiAgICAgIGNvbnN0IGZpbHRlckRhdGEgPSB0aGlzLmZpbHRlckRhdGE7XG5cbiAgICAgIHJldHVybiBkYXRhLmZpbHRlcihpdGVtID0+IHtcbiAgICAgICAgZm9yKGxldCBrZXkgaW4gdGhpcy5maWx0ZXJEYXRhKSB7XG4gICAgICAgICAgc3dpdGNoKGtleSkge1xuICAgICAgICAgICAgY2FzZSAnc2VyaWFsTnVtYmVyJzpcbiAgICAgICAgICAgICAgaWYodGhpcy5maWx0ZXJEYXRhLnNlcmlhbE51bWJlcikge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNlYXJjaFJlZ0V4ID0gbmV3IFJlZ0V4cCh0aGlzLmZpbHRlckRhdGEuc2VyaWFsTnVtYmVyLCAnaScpO1xuXG4gICAgICAgICAgICAgICAgLy8gSWYgc2VyaWFsbnVtYmVyIHNlYXJjaCBkb2Vzbid0IG1hdGNoLCBleGNsdWRlIGZyb20gbGlzdFxuICAgICAgICAgICAgICAgIGlmKCFzZWFyY2hSZWdFeC50ZXN0KGl0ZW0uc2VyaWFsTnVtYmVyKSkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdkZWxpdmVyeURhdGVTdGFydCc6XG4gICAgICAgICAgICAgIGlmKHRoaXMuZmlsdGVyRGF0YS5kZWxpdmVyeURhdGVTdGFydCkge1xuICAgICAgICAgICAgICAgIC8vIElmIGRlbGl2ZXJ5ZGF0ZSBpcyBiaWdnZXIgdGhhbiBmaWx0ZXJlZCBlbmQgZGF0ZSwgZXhjbHVkZVxuICAgICAgICAgICAgICAgIGlmKCFpdGVtLmRlbGl2ZXJ5RGF0ZVdhcnJhbnR5IHx8ICh0aGlzLmZpbHRlckRhdGEuZGVsaXZlcnlEYXRlU3RhcnQgJiYgaXRlbS5kZWxpdmVyeURhdGVXYXJyYW50eTwgdGhpcy5maWx0ZXJEYXRhLmRlbGl2ZXJ5RGF0ZVN0YXJ0KSkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdkZWxpdmVyeURhdGVFbmQnOlxuICAgICAgICAgICAgICBpZih0aGlzLmZpbHRlckRhdGEuZGVsaXZlcnlEYXRlRW5kKSB7XG4gICAgICAgICAgICAgICAgLy8gSWYgZGVsaXZlcnlkYXRlIGlzIGJpZ2dlciB0aGFuIGZpbHRlcmVkIGVuZCBkYXRlLCBleGNsdWRlXG4gICAgICAgICAgICAgICAgaWYoICFpdGVtLmRlbGl2ZXJ5RGF0ZVdhcnJhbnR5IHx8ICh0aGlzLmZpbHRlckRhdGEuZGVsaXZlcnlEYXRlRW5kICYmIGl0ZW0uZGVsaXZlcnlEYXRlV2FycmFudHkgPiB0aGlzLmZpbHRlckRhdGEuZGVsaXZlcnlEYXRlRW5kKSApIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnZGF0ZUFkZGVkU3RhcnQnOlxuICAgICAgICAgICAgICBpZih0aGlzLmZpbHRlckRhdGEuZGF0ZUFkZGVkU3RhcnQpIHtcbiAgICAgICAgICAgICAgICAvLyBJZiBkZWxpdmVyeWRhdGUgaXMgYmlnZ2VyIHRoYW4gZmlsdGVyZWQgZW5kIGRhdGUsIGV4Y2x1ZGVcbiAgICAgICAgICAgICAgICBpZighaXRlbS5kYXRlQWRkZWQgfHwgKHRoaXMuZmlsdGVyRGF0YS5kYXRlQWRkZWRTdGFydCAmJiBpdGVtLmRhdGVBZGRlZCA8IHRoaXMuZmlsdGVyRGF0YS5kYXRlQWRkZWRTdGFydCkpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnZGF0ZUFkZGVkRW5kJzpcbiAgICAgICAgICAgICAgaWYodGhpcy5maWx0ZXJEYXRhLmRhdGVBZGRlZEVuZCkge1xuICAgICAgICAgICAgICAgIC8vIElmIGRlbGl2ZXJ5ZGF0ZSBpcyBiaWdnZXIgdGhhbiBmaWx0ZXJlZCBlbmQgZGF0ZSwgZXhjbHVkZVxuICAgICAgICAgICAgICAgIGlmKCFpdGVtLmRhdGVBZGRlZCB8fCAodGhpcy5maWx0ZXJEYXRhLmRhdGVBZGRlZEVuZCAmJiBpdGVtLmRhdGVBZGRlZCA+IHRoaXMuZmlsdGVyRGF0YS5kYXRlQWRkZWRFbmQpKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2Jhc2VNb2RlbCc6XG4gICAgICAgICAgICAgIC8vIElmIGJhc2VNb2RlbCBpcyBzZWxlY3RlZCwgZXhjbHVkZSBvdGhlciBiYXNlIG1vZGVsIG1hY2hpbmVzXG4gICAgICAgICAgICAgIGlmKHRoaXMuZmlsdGVyRGF0YS5iYXNlTW9kZWwgJiYgaXRlbS5tYWNoaW5lQmFzZU1vZGVsSWQgIT09IHRoaXMuZmlsdGVyRGF0YS5iYXNlTW9kZWwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnY291bnRyeSc6XG4gICAgICAgICAgICAgIC8vIElmIGNvdW50cnkgaXMgc2VsZWN0ZWQsIGV4Y2x1ZGUgb3RoZXIgY291bnRyaWVzXG4gICAgICAgICAgICAgIGlmKHRoaXMuZmlsdGVyRGF0YS5jb3VudHJ5ICYmIGl0ZW0uY291bnRyeUNvZGUgIT09IHRoaXMuZmlsdGVyRGF0YS5jb3VudHJ5KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJZiB3ZSBtYWRlIGl0IHRoaXMgZmFyLCBhZGQgdG8gbGlzdFxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0pO1xuXG4gICAgfSxcbiAgICBzZWxlY3RlZFZhbHVlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWQ7XG4gICAgfVxuICB9LFxuICBtZXRob2RzOiB7XG4gICAgLy8gRm9ybWF0IGRhdGEgZm9yIGZpbHRlcnNcbiAgICBmaWx0ZXJzQ2hhbmdlZChkYXRhKSB7XG4gICAgICBjb25zdCBkYXRlRm9ybWF0ID0gJ1ktTU0tREQnO1xuICAgICAgY29uc3QgZmlsdGVyRGF0YSA9IHtcbiAgICAgICAgc2VyaWFsTnVtYmVyOiBkYXRhLnNlcmlhbE51bWJlcixcbiAgICAgICAgYmFzZU1vZGVsOiAhZGF0YS5iYXNlTW9kZWwgPyAnJyA6IGRhdGEuYmFzZU1vZGVsLFxuICAgICAgICBjb3VudHJ5OiAhZGF0YS5jb3VudHJ5ID8gJycgOiBkYXRhLmNvdW50cnksXG4gICAgICAgIGRlbGl2ZXJ5RGF0ZVN0YXJ0OiAnJyxcbiAgICAgICAgZGVsaXZlcnlEYXRlRW5kOiAnJyxcbiAgICAgICAgZGF0ZUFkZGVkU3RhcnQ6ICcnLFxuICAgICAgICBkYXRlQWRkZWRFbmQ6ICcnXG4gICAgICB9O1xuXG4gICAgICBpZihkYXRhLmRlbGl2ZXJ5RGF0ZVN0YXJ0KSB7XG4gICAgICAgIGNvbnN0IGRhdGUgPSBtb21lbnQoZGF0YS5kZWxpdmVyeURhdGVTdGFydCkuZm9ybWF0KGRhdGVGb3JtYXQpO1xuICAgICAgICBmaWx0ZXJEYXRhLmRlbGl2ZXJ5RGF0ZVN0YXJ0ID0gZGF0ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZpbHRlckRhdGEuZGVsaXZlcnlEYXRlU3RhcnQgPSAnJztcbiAgICAgIH1cblxuICAgICAgaWYoZGF0YS5kZWxpdmVyeURhdGVFbmQpIHtcbiAgICAgICAgY29uc3QgZGF0ZSA9IG1vbWVudChkYXRhLmRlbGl2ZXJ5RGF0ZUVuZCkuZm9ybWF0KGRhdGVGb3JtYXQpO1xuICAgICAgICBmaWx0ZXJEYXRhLmRlbGl2ZXJ5RGF0ZUVuZCA9IGRhdGU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmaWx0ZXJEYXRhLmRlbGl2ZXJ5RGF0ZUVuZCA9ICcnO1xuICAgICAgfVxuXG4gICAgICBpZihkYXRhLmRhdGVBZGRlZFN0YXJ0KSB7XG4gICAgICAgIGNvbnN0IGRhdGUgPSBtb21lbnQoZGF0YS5kYXRlQWRkZWRTdGFydCkuZm9ybWF0KGRhdGVGb3JtYXQpO1xuICAgICAgICBmaWx0ZXJEYXRhLmRhdGVBZGRlZFN0YXJ0ID0gZGF0ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZpbHRlckRhdGEuZGF0ZUFkZGVkU3RhcnQgPSAnJztcbiAgICAgIH1cblxuICAgICAgaWYoZGF0YS5kYXRlQWRkZWRFbmQpIHtcbiAgICAgICAgY29uc3QgZGF0ZSA9IG1vbWVudChkYXRhLmRhdGVBZGRlZEVuZCkuZm9ybWF0KGRhdGVGb3JtYXQpO1xuICAgICAgICBmaWx0ZXJEYXRhLmRhdGVBZGRlZEVuZCA9IGRhdGU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmaWx0ZXJEYXRhLmRhdGVBZGRlZEVuZCA9ICcnO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnVwZGF0ZUZpbHRlckRhdGEoZmlsdGVyRGF0YSk7XG4gICAgICB0aGlzLnVwZGF0ZVVybCgpO1xuICAgICAgdGhpcy4kcmVmcy50YWJsZS5zZXRQYWdlKDEpO1xuXG4gICAgfSxcbiAgICB1cGRhdGVGaWx0ZXJEYXRhKGRhdGEpIHtcbiAgICAgIE9iamVjdC5rZXlzKGRhdGEpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgdGhpcy5maWx0ZXJEYXRhW2tleV0gPSBkYXRhW2tleV07XG4gICAgICB9KTtcbiAgICB9LFxuICAgIHVwZGF0ZVVybCgpIHtcbiAgICAgIGNvbnN0IGFjdGl2ZUZpbHRlcnMgPSB7fTtcblxuICAgICAgLy8gT25seSBpbmNsdWRlIGZpbHRlcnMgd2l0aCB2YWx1ZXNcbiAgICAgIE9iamVjdC5rZXlzKHRoaXMuZmlsdGVyRGF0YSkuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZmlsdGVyRGF0YVtrZXldO1xuICAgICAgICBpZih2YWx1ZSAhPT0gJycpIHtcbiAgICAgICAgICBhY3RpdmVGaWx0ZXJzW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGlmKHRoaXMuZmlsdGVyaW5nRW5hYmxlZCkge1xuICAgICAgICBpZihPYmplY3Qua2V5cyhhY3RpdmVGaWx0ZXJzKS5sZW5ndGgpIHtcbiAgICAgICAgICB0aGlzLiRyb3V0ZXIucmVwbGFjZSh7cXVlcnk6IHsgZmlsdGVyczogcXVlcnlTdHJpbmcuc3RyaW5naWZ5KGFjdGl2ZUZpbHRlcnMpIH19KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLy5jYXRjaCBlcnJvciBlbXB0eWluZyBpcyBkdWUgdnVlLXJvdXRlciBjb3JlIGNoYW5nZXMuXG4gICAgICAgICAgLy8gcHJldmVudHMgZmF1bHR5IGVycm9yIFwiTmF2aWdhdGlvbkR1cGxpY2F0ZWQgTmF2aWdhdGluZyB0byBjdXJyZW50IGxvY2F0aW9uICjigJwv4oCcKSBpcyBub3QgYWxsb3dlZFwiXG4gICAgICAgICAgLy8gU2VlIC0+IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzU3ODM3NzU4L25hdmlnYXRpb25kdXBsaWNhdGVkLW5hdmlnYXRpbmctdG8tY3VycmVudC1sb2NhdGlvbi1zZWFyY2gtaXMtbm90LWFsbG93ZWRcbiAgICAgICAgICB0aGlzLiRyb3V0ZXIucmVwbGFjZSh7cXVlcnk6IHt9fSkuY2F0Y2goZXJyID0+IHt9KTtcbiAgICAgICAgfTtcblxuICAgICAgfVxuICAgIH0sXG4gICAgc2hvd1NlYXJjaCgpe1xuICAgICAgJCgnLnNpZGViYXJTZWFyY2gnKS50b2dnbGVDbGFzcygnc2hvdy1zZWFyY2gnKTtcbiAgICB9XG4gIH0sXG4gIG1vdW50ZWQ6IGZ1bmN0aW9uICgpIHtcbiAgICAvLyBDaGVjayBpZiB3ZSdyZSBsb2FkaW5nIHRoaXMgdmlldyB3aXRoIGFjdGl2ZSBmaWx0ZXJzXG4gICAgY29uc3QgZmlsdGVyc1NlcmlhbGl6ZWQgPSB0aGlzLiRyb3V0ZS5xdWVyeS5maWx0ZXJzO1xuXG4gICAgaWYoZmlsdGVyc1NlcmlhbGl6ZWQpIHtcbiAgICAgIGNvbnN0IGZpbHRlcnMgPSBxdWVyeVN0cmluZy5wYXJzZShmaWx0ZXJzU2VyaWFsaXplZCk7XG4gICAgICBpZihmaWx0ZXJzKSB7XG4gICAgICAgIHRoaXMudXBkYXRlRmlsdGVyRGF0YShmaWx0ZXJzKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmZpbHRlcmluZ0VuYWJsZWQgPSB0cnVlO1xuXG4gICAgdGhpcy4kc3RvcmUuZGlzcGF0Y2goJ2dldEN1c3RvbWVyTWFjaGluZXMnLCB0aGlzLiRzdG9yZS5zdGF0ZS51c2VyLmNvbXBhbnkuaWQpXG4gICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgJCgnLnNwaW5uZXInKS5oaWRlKCk7XG4gICAgICB9KTtcblxuXG4gICAgdGhpcy4kc3RvcmUuY29tbWl0KCdzZXRTdWJoZWFkZXInLCB7XG4gICAgICBzdWJ0aXRsZTogJycsXG4gICAgICB0aXRsZTogdGhpcy5sb2MoJ2NvbXBvbmVudHMuY3VzdG9tZXJNYWNoaW5lcy5zdWJoZWFkZXJUaXRsZScpLFxuICAgICAgZGVzY3JpcHRpb246IHRoaXMubG9jKCdjb21wb25lbnRzLmN1c3RvbWVyTWFjaGluZXMuc3ViaGVhZGVyRGVzY3JpcHRpb24nKSxcbiAgICAgIHNlYXJjaEVuYWJsZWQ6IGZhbHNlXG4gICAgfSk7XG5cbiAgICBpZigkKHdpbmRvdykud2lkdGgoKSA8PSA3Njgpe1xuICAgICAgJCgnLnNob3ctc2VhcmNoLWJ1dHRvbicpXG4gICAgICAuY2xvc2VzdCgnLm9yZGVyLTEnKVxuICAgICAgLmFkZENsYXNzKCdzZWFyY2gtYnV0dG9uLXBhcmVudC1tb2JpbGUnKTtcbiAgICB9XG5cbiAgICAkKCB3aW5kb3cgKS5yZXNpemUoZnVuY3Rpb24oKSB7XG4gICAgICBpZigkKHdpbmRvdykud2lkdGgoKSA8PSA3Njgpe1xuICAgICAgICAkKCcuc2hvdy1zZWFyY2gtYnV0dG9uJylcbiAgICAgICAgLmNsb3Nlc3QoJy5vcmRlci0xJylcbiAgICAgICAgLmFkZENsYXNzKCdzZWFyY2gtYnV0dG9uLXBhcmVudC1tb2JpbGUnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgICQoJy5zaG93LXNlYXJjaC1idXR0b24nKVxuICAgICAgICAuY2xvc2VzdCgnLm9yZGVyLTEnKVxuICAgICAgICAucmVtb3ZlQ2xhc3MoJ3NlYXJjaC1idXR0b24tcGFyZW50LW1vYmlsZScpO1xuICAgICAgICB9XG4gICAgfSk7XG4gIH1cbn1cbjwvc2NyaXB0PlxuIiwiPHRlbXBsYXRlPlxuICA8ZGl2PlxuICAgIDxkaXYgdi1pZj1cImFjY291bnRVcGRhdGVkXCI+XG4gICAgICA8aDIgdi1odG1sPVwibG9jKCdjb21wb25lbnRzLmVkaXRBY2NvdW50LmFjY291bnRVcGRhdGVkJylcIj48L2gyPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgdi1lbHNlPlxuICAgICAgPHYtZm9ybSA6ZmllbGRzPVwiZmllbGRzXCIgOmZvcm0tZGF0YT1cImZvcm1EYXRhXCIgOmZvcm0tZXJyb3JzPVwiZm9ybUVycm9yc1wiPlxuICAgICAgICA8ZGl2IHNsb3Q9XCJidXR0b25zXCIgY2xhc3M9XCJ2LWZvcm0tYnV0dG9uLWRpdlwiPlxuICAgICAgICAgIDxidXR0b24gOmRpc2FibGVkPVwic2VuZERpc2FibGVkXCIgdi1vbjpjbGljaz1cInVwZGF0ZVwiIHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cImJ0biBidG4tLXdoaXRlXCI+e3tsb2MoJ3VwZGF0ZUluZm9ybWF0aW9uJyl9fTwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvdi1mb3JtPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5cbmltcG9ydCBWRm9ybSBmcm9tICcuL3YtZm9ybS52dWUnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGNvbXBvbmVudHM6IHtcbiAgICAndi1mb3JtJzogVkZvcm1cbiAgfSxcbiAgbmFtZTogJ1ZpZXdFZGl0QWNjb3VudCcsXG4gIGRhdGE6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZm9ybUVycm9yczoge30sXG4gICAgICBmb3JtRGF0YToge30sXG4gICAgICBhY2NvdW50VXBkYXRlZDogZmFsc2UsXG4gICAgICBzZW5kRGlzYWJsZWQ6IGZhbHNlXG4gICAgfVxuICB9LFxuICBjb21wdXRlZDoge1xuICAgIGZpZWxkcygpIHtcbiAgICAgIGlmKHRoaXMuJHN0b3JlLmdldHRlcnMuY291bnRyeVNlbGVjdE9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIFt7XG4gICAgICAgICAgbmFtZTogJ2lkJyxcbiAgICAgICAgICB2YWx1ZTogdGhpcy4kc3RvcmUuc3RhdGUudXNlci5pbmZvLmlkLFxuICAgICAgICAgIGxhYmVsOiB0aGlzLmxvYygnZmlyc3ROYW1lJyksXG4gICAgICAgICAgdHlwZTogJ2hpZGRlbidcbiAgICAgICAgfSwge1xuICAgICAgICAgIG5hbWU6ICdyb2xlJyxcbiAgICAgICAgICB2YWx1ZTogdGhpcy4kc3RvcmUuc3RhdGUudXNlci5yb2xlLFxuICAgICAgICAgIGxhYmVsOiB0aGlzLmxvYygncm9sZScpLFxuICAgICAgICAgIHR5cGU6ICdoaWRkZW4nXG4gICAgICAgIH0sIHtcbiAgICAgICAgICBuYW1lOiAnZmlyc3ROYW1lJyxcbiAgICAgICAgICB2YWx1ZTogdGhpcy4kc3RvcmUuc3RhdGUudXNlci5pbmZvLmZpcnN0TmFtZSxcbiAgICAgICAgICBsYWJlbDogdGhpcy5sb2MoJ2ZpcnN0TmFtZScpLFxuICAgICAgICAgIHR5cGU6ICd0ZXh0J1xuICAgICAgICB9LCB7XG4gICAgICAgICAgbmFtZTogJ2xhc3ROYW1lJyxcbiAgICAgICAgICB2YWx1ZTogdGhpcy4kc3RvcmUuc3RhdGUudXNlci5pbmZvLmxhc3ROYW1lLFxuICAgICAgICAgIGxhYmVsOiB0aGlzLmxvYygnbGFzdE5hbWUnKSxcbiAgICAgICAgICB0eXBlOiAndGV4dCcsXG4gICAgICAgIH0sIHtcbiAgICAgICAgICBuYW1lOiAncGhvbmUnLFxuICAgICAgICAgIHZhbHVlOiB0aGlzLiRzdG9yZS5zdGF0ZS51c2VyLmluZm8ucGhvbmUsXG4gICAgICAgICAgbGFiZWw6IHRoaXMubG9jKCdwaG9uZScpLFxuICAgICAgICAgIHR5cGU6ICd0ZXh0J1xuICAgICAgICB9LCB7XG4gICAgICAgICAgbmFtZTogJ2NvdW50cnknLFxuICAgICAgICAgIHZhbHVlOiB0aGlzLiRzdG9yZS5zdGF0ZS51c2VyLmluZm8uY291bnRyeSAmJiB0aGlzLiRzdG9yZS5zdGF0ZS51c2VyLmluZm8uY291bnRyeS5jb3VudHJ5Q29kZSB8fCAnJywgLy8gVXNlciBjdXJyZW50IHVzZXIgY291bnRyeSBhcyBhIGRlZmF1bHRcbiAgICAgICAgICBsYWJlbDogdGhpcy5sb2MoJ2NvdW50cnknKSxcbiAgICAgICAgICBvcHRpb25zOiB0aGlzLiRzdG9yZS5nZXR0ZXJzLmNvdW50cnlTZWxlY3RPcHRpb25zLFxuICAgICAgICAgIHR5cGU6ICdzZWxlY3QnXG4gICAgICAgIH1dO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gW107XG4gICAgfSxcbiAgfSxcbiAgbWV0aG9kczoge1xuICAgIGFzeW5jIHVwZGF0ZSgpIHtcbiAgICAgIHRoaXMuc2VuZERpc2FibGVkID0gdHJ1ZTtcblxuICAgICAgcmV0dXJuIHRoaXMuJGFwaS51cGRhdGVVc2VyKHRoaXMuZm9ybURhdGEuaWQsIHRoaXMuZm9ybURhdGEpLnRoZW4ocmVzID0+IHtcbiAgICAgICAgdGhpcy5zZW5kRGlzYWJsZWQgPSBmYWxzZTtcblxuICAgICAgICAvLyBFcnJvcnMgaW4gZm9ybVxuICAgICAgICBpZihyZXMuY29kZSA9PT0gNDAwKSB7XG4gICAgICAgICAgdGhpcy5mb3JtRXJyb3JzID0gcmVzLnJlc3VsdC5maWVsZHM7XG4gICAgICAgIH1cblxuICAgICAgICBpZihyZXMuY29kZSA9PT0gMjAwKSB7XG4gICAgICAgICAgdGhpcy4kc3RvcmUuY29tbWl0KCdzZXRDdXJyZW50VXNlcicsIHJlcy5yZXN1bHQudXNlcik7XG4gICAgICAgICAgdGhpcy5hY2NvdW50VXBkYXRlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgfVxuICB9LFxuICBtb3VudGVkICgpIHtcbiAgICB0aGlzLiRzdG9yZS5kaXNwYXRjaCgnZ2V0Q291bnRyaWVzJyk7XG4gIH1cbn1cbjwvc2NyaXB0PlxuIiwiPHRlbXBsYXRlPlxuICA8ZGl2PlxuICAgIDxkaXYgdi1pZj1cInBhc3N3b3JkU2VudFwiPlxuICAgICAge3tsb2MoJ2NvbXBvbmVudHMuZm9yZ290dGVuUGFzc3dvcmQucGFzc3dvcmRTZW50Jyl9fVxuICAgIDwvZGl2PlxuICAgIDxkaXYgdi1lbHNlPlxuICAgICAgPHYtZm9ybSA6ZmllbGRzPVwiZmllbGRzXCIgOmZvcm0tZGF0YT1cImZvcm1EYXRhXCIgOmZvcm0tZXJyb3JzPVwiZm9ybUVycm9yc1wiPlxuICAgICAgICA8ZGl2IHNsb3Q9XCJidXR0b25zXCI+XG4gICAgICAgICAgPGJ1dHRvbiA6ZGlzYWJsZWQ9XCJzZW5kRGlzYWJsZWRcIiB0eXBlPVwic3VibWl0XCIgdi1vbjpjbGljaz1cInNlbmRcIiBjbGFzcz1cImJ0biBidG4tLXdoaXRlXCI+e3tsb2MoJ29yZGVyTmV3UGFzc3dvcmQnKX19PC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC92LWZvcm0+XG5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuXG5pbXBvcnQgVkZvcm0gZnJvbSAnLi92LWZvcm0udnVlJztcblxuZXhwb3J0IGRlZmF1bHQge1xuICBjb21wb25lbnRzOiB7XG4gICAgJ3YtZm9ybSc6IFZGb3JtXG4gIH0sXG4gIG5hbWU6ICdWaWV3Rm9yZ290UGFzc3dvcmQnLFxuICBkYXRhOiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGZvcm1FcnJvcnM6IHt9LFxuICAgICAgZm9ybURhdGE6IHt9LFxuICAgICAgcGFzc3dvcmRTZW50OiBmYWxzZSxcbiAgICAgIHRva2VuOiBudWxsLFxuICAgICAgc2VuZERpc2FibGVkOiBmYWxzZVxuICAgIH1cbiAgfSxcbiAgY29tcHV0ZWQ6IHtcbiAgICBmaWVsZHMoKSB7XG4gICAgICByZXR1cm4gW3tcbiAgICAgICAgbmFtZTogJ3Rva2VuJyxcbiAgICAgICAgdmFsdWU6ICcnLFxuICAgICAgICBsYWJlbDogdGhpcy5sb2MoJ3Rva2VuJyksXG4gICAgICAgIHR5cGU6ICdoaWRkZW4nXG4gICAgICB9LCB7XG4gICAgICAgIG5hbWU6ICd1c2VybmFtZScsXG4gICAgICAgIHZhbHVlOiAnJyxcbiAgICAgICAgbGFiZWw6IHRoaXMubG9jKCd1c2VybmFtZScpLFxuICAgICAgICB0eXBlOiAndGV4dCdcbiAgICAgIH1dO1xuICAgIH0sXG4gIH0sXG4gIG1ldGhvZHM6IHtcbiAgICBhc3luYyBzZW5kKCkge1xuICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG5cbiAgICAgIHRoaXMuc2VuZERpc2FibGVkID0gdHJ1ZTtcblxuICAgICAgaWYoIXRoaXMudG9rZW4pIHtcbiAgICAgICAgY29uc3QgdG9rZW5SZXMgPSBhd2FpdCB0aGlzLiRhcGkuZ2V0VG9rZW4oKTtcbiAgICAgICAgaWYodG9rZW5SZXMuY29kZSA9PT0gMjAwKSB7XG4gICAgICAgICAgdGhpcy50b2tlbiA9IHRva2VuUmVzLnJlc3VsdC50b2tlbjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy4kYXBpLmZvcmdvdFBhc3N3b3JkKHtcbiAgICAgICAgdG9rZW46IHRoaXMudG9rZW4sXG4gICAgICAgIHVzZXJuYW1lOiB0aGlzLmZvcm1EYXRhLnVzZXJuYW1lXG4gICAgICB9KVxuICAgICAgLnRoZW4ocmVzID0+IHtcbiAgICAgICAgdGhpcy5zZW5kRGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy50b2tlbiA9ICcnO1xuXG4gICAgICAgIC8vIEVycm9ycyBpbiBmb3JtXG4gICAgICAgIGlmKHJlcy5jb2RlID09PSA0MDApIHtcbiAgICAgICAgICB0aGlzLmZvcm1FcnJvcnMgPSByZXMucmVzdWx0LmZpZWxkcztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKHJlcy5jb2RlID09PSAyMDApIHtcbiAgICAgICAgICB0aGlzLnBhc3N3b3JkU2VudCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfSxcbiAgbW91bnRlZDogZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuJGFwaS5nZXRUb2tlbigpLnRoZW4ocmVzID0+IHtcbiAgICAgIGlmKHJlcy5jb2RlID09PSAyMDApIHtcbiAgICAgICAgdGhpcy50b2tlbiA9IHJlcy5yZXN1bHQudG9rZW47XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy4kc3RvcmUuY29tbWl0KCdzZXRTdWJoZWFkZXInLCB7XG4gICAgICBzdWJ0aXRsZTogJycsXG4gICAgICB0aXRsZTogdGhpcy5sb2MoJ2NvbXBvbmVudHMuZm9yZ290dGVuUGFzc3dvcmQuc3ViaGVhZGVyVGl0bGUnKSxcbiAgICAgIGRlc2NyaXB0aW9uOiAnJyxcbiAgICAgIHNlYXJjaEVuYWJsZWQ6IGZhbHNlXG4gICAgfSk7XG4gIH1cbn1cbjwvc2NyaXB0PlxuIiwiPHRlbXBsYXRlPlxuICA8ZGl2PlxuICAgIDxwIHYtaWY9XCJpbnZhbGlkVG9rZW5cIiB2LWh0bWw9XCJsb2MoJ2NvbXBvbmVudHMudXBkYXRlUGFzc3dvcmQudG9rZW5FeHBpcmVkJylcIj48L3A+XG4gICAgPGRpdiB2LWVsc2U+XG4gICAgICA8ZGl2IHYtaWY9XCJwYXNzd29yZFVwZGF0ZWRcIj5cbiAgICAgICAgPHAgdi1odG1sPVwibG9jKCdjb21wb25lbnRzLnVwZGF0ZVBhc3N3b3JkLnBhc3N3b3JkVXBkYXRlZCcpXCI+PC9wPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IHYtZWxzZT5cbiAgICAgICAgPHYtZm9ybSA6ZmllbGRzPVwiZmllbGRzXCIgOmZvcm0tZGF0YT1cImZvcm1EYXRhXCIgOmZvcm0tZXJyb3JzPVwiZm9ybUVycm9yc1wiPlxuICAgICAgICAgIDxkaXYgc2xvdD1cImJ1dHRvbnNcIj5cbiAgICAgICAgICAgIDxidXR0b24gOmRpc2FibGVkPVwic2VuZERpc2FibGVkXCIgdHlwZT1cInN1Ym1pdFwiIHYtb246Y2xpY2s9XCJzZW5kXCIgY2xhc3M9XCJidG4gYnRuLS13aGl0ZVwiPnt7bG9jKCd1cGRhdGVQYXNzd29yZCcpfX08L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC92LWZvcm0+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuXG5pbXBvcnQgVkZvcm0gZnJvbSAnLi92LWZvcm0udnVlJztcblxuZXhwb3J0IGRlZmF1bHQge1xuICBjb21wb25lbnRzOiB7XG4gICAgJ3YtZm9ybSc6IFZGb3JtXG4gIH0sXG4gIG5hbWU6ICdWaWV3Rm9yZ290UGFzc3dvcmQnLFxuICBkYXRhOiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGZvcm1FcnJvcnM6IHt9LFxuICAgICAgZm9ybURhdGE6IHt9LFxuICAgICAgcGFzc3dvcmRVcGRhdGVkOiBmYWxzZSxcbiAgICAgIHRva2VuOiBudWxsLFxuICAgICAgc2VuZERpc2FibGVkOiBmYWxzZSxcbiAgICAgIHJlc2V0VG9rZW46ICcnLFxuICAgICAgdG9rZW5FeHBpcmVkOiBmYWxzZVxuICAgIH1cbiAgfSxcbiAgY29tcHV0ZWQ6IHtcbiAgICBpbnZhbGlkVG9rZW4oKSB7XG4gICAgICByZXR1cm4gIXRoaXMucmVzZXRUb2tlbiB8fMKgdGhpcy50b2tlbkV4cGlyZWQ7XG4gICAgfSxcbiAgICBmaWVsZHMoKSB7XG4gICAgICByZXR1cm4gW3tcbiAgICAgICAgbmFtZTogJ3Rva2VuJyxcbiAgICAgICAgdmFsdWU6ICcnLFxuICAgICAgICBsYWJlbDogdGhpcy5yZXNldFRva2VuLFxuICAgICAgICB0eXBlOiAnaGlkZGVuJ1xuICAgICAgfSwge1xuICAgICAgICBuYW1lOiAnbmV3UGFzc3dvcmQnLFxuICAgICAgICB2YWx1ZTogJycsXG4gICAgICAgIGxhYmVsOiB0aGlzLmxvYygnbmV3UGFzc3dvcmQnKSxcbiAgICAgICAgdHlwZTogJ3Bhc3N3b3JkLXN0cmVuZ3RoJyxcbiAgICAgIH0sIHtcbiAgICAgICAgbmFtZTogJ25ld1Bhc3N3b3JkQ29uZmlybScsXG4gICAgICAgIHZhbHVlOiAnJyxcbiAgICAgICAgbGFiZWw6IHRoaXMubG9jKCduZXdQYXNzd29yZEFnYWluJyksXG4gICAgICAgIHR5cGU6ICdwYXNzd29yZCdcbiAgICAgIH1dO1xuICAgIH0sXG4gIH0sXG4gIG1ldGhvZHM6IHtcbiAgICBhc3luYyBzZW5kKCkge1xuICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG5cbiAgICAgIHRoaXMuc2VuZERpc2FibGVkID0gdHJ1ZTtcblxuICAgICAgcmV0dXJuIHRoaXMuJGFwaS5jaGFuZ2VQYXNzd29yZCh7XG4gICAgICAgIHRva2VuOiB0aGlzLnJlc2V0VG9rZW4sXG4gICAgICAgIG5ld1Bhc3N3b3JkOiB0aGlzLmZvcm1EYXRhLm5ld1Bhc3N3b3JkLFxuICAgICAgICBuZXdQYXNzd29yZENvbmZpcm06IHRoaXMuZm9ybURhdGEubmV3UGFzc3dvcmRDb25maXJtXG4gICAgICB9KVxuICAgICAgLnRoZW4ocmVzID0+IHtcbiAgICAgICAgdGhpcy5zZW5kRGlzYWJsZWQgPSBmYWxzZTtcblxuICAgICAgICAvLyBFcnJvcnMgaW4gZm9ybVxuICAgICAgICBpZihyZXMuY29kZSA9PT0gNDAwKSB7XG4gICAgICAgICAgdGhpcy5mb3JtRXJyb3JzID0gcmVzLnJlc3VsdC5maWVsZHM7XG5cbiAgICAgICAgICBpZihyZXMucmVzdWx0LmZpZWxkcy50b2tlbikge1xuICAgICAgICAgICAgdGhpcy50b2tlbkV4cGlyZWQgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmKHJlcy5jb2RlID09PSAyMDApIHtcbiAgICAgICAgICB0aGlzLnBhc3N3b3JkVXBkYXRlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfSxcbiAgbW91bnRlZDogZnVuY3Rpb24gKCkge1xuICAgIHRoaXMucmVzZXRUb2tlbiA9IHRoaXMuJHJvdXRlLnF1ZXJ5LnJlc2V0VG9rZW47XG4gIH1cbn1cbjwvc2NyaXB0PlxuIiwiPHRlbXBsYXRlPlxuICA8dGhlLXNpZGViYXItbGF5b3V0PlxuICAgIDxkaXYgY2xhc3M9XCJ1c2VyLXNldHRpbmdzLXNpZGViYXJcIiBzbG90PVwic2lkZWJhclwiPlxuICAgICAgPHJvdXRlci1saW5rIGNsYXNzPVwidi1yb3V0ZXItbGlua1wiIDp0bz1cInsgbmFtZTogJ2NoYW5nZS1wYXNzd29yZCd9XCI+e3tsb2MoJ2NoYW5nZVBhc3N3b3JkJyl9fTwvcm91dGVyLWxpbms+PGJyPlxuICAgICAgPHJvdXRlci1saW5rIGNsYXNzPVwidi1yb3V0ZXItbGlua1wiIDp0bz1cInsgbmFtZTogJ2VkaXQtYWNjb3VudCd9XCI+e3tsb2MoJ2VkaXRBY2NvdW50SW5mb3JtYXRpb24nKX19PC9yb3V0ZXItbGluaz5cbiAgICA8L2Rpdj5cbiAgICA8cm91dGVyLXZpZXc+PC9yb3V0ZXItdmlldz5cbiAgPC90aGUtc2lkZWJhci1sYXlvdXQ+XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG5hbWU6ICdWaWV3VXNlclNldHRpbmdzJyxcbiAgZGF0YTogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB7XG4gICAgfVxuICB9LFxuICBjb21wdXRlZDoge1xuICB9LFxuICBtZXRob2RzOiB7XG4gIH0sXG4gIG1vdW50ZWQ6IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLiRzdG9yZS5jb21taXQoJ3NldFN1YmhlYWRlcicsIHtcbiAgICAgIHRpdGxlOiAnJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnJyxcbiAgICAgIHNlYXJjaEVuYWJsZWQ6IGZhbHNlXG4gICAgfSk7XG4gIH1cbn1cbjwvc2NyaXB0PlxuXG48c3R5bGU+XG48L3N0eWxlPlxuIiwiXG48dGVtcGxhdGU+XG4gIDx0aGUtMS1jb2x1bW4tbGF5b3V0IHYtaWY9XCJ3YXJyYW50eVJlZ2lzdHJhdGlvblwiPlxuICAgIDxoMj5cbiAgICAgIHt7bG9jKCd3YXJyYW50eVJlZ2lzdHJhdGlvbicpfX1cbiAgICAgIDxzcGFuIHN0eWxlPVwiZm9udC1zaXplOiAxOHB4OyBmb250LXdlaWdodDogNDAwOyBjb2xvcjogcmdiKDEzMCwgMTMwLCAxMzApO1wiPlxuICAgICAgICAoe3t3YXJyYW50eVJlZ2lzdHJhdGlvbi51dWlkfX0pXG4gICAgICA8L3NwYW4+XG4gICAgPC9oMj5cblxuICAgIDxoMz57e2xvYygnbWFjaGluZUluZm9ybWF0aW9uJyl9fTwvaDM+PGhyPlxuICAgIDxwPlxuICAgICAgPHN0cm9uZz57e2xvYygnc2VyaWFsTnVtYmVyJyl9fTwvc3Ryb25nPjoge3t3YXJyYW50eVJlZ2lzdHJhdGlvbi5zZXJpYWxOdW1iZXJ9fTxiciAvPlxuICAgICAgPHN0cm9uZz57e2xvYygnbWFjaGluZU1vZGVsJyl9fTwvc3Ryb25nPjoge3t3YXJyYW50eVJlZ2lzdHJhdGlvbi5tYWNoaW5lfX08YnIgLz5cbiAgICAgIDxzdHJvbmc+e3tsb2MoJ2RlbGl2ZXJ5RGF0ZVNvbGQnKX19PC9zdHJvbmc+OiB7e3dhcnJhbnR5UmVnaXN0cmF0aW9uLmRlbGl2ZXJ5RGF0ZUZvcm1hdHRlZH19PGJyIC8+XG4gICAgPC9wPlxuXG4gICAgPGgzPnt7bG9jKCdjdXN0b21lckluZm9ybWF0aW9uJyl9fTwvaDM+IDxocj5cbiAgICA8cD5cbiAgICAgIDxzdHJvbmc+e3tsb2MoJ2ZpcnN0TmFtZScpfX08L3N0cm9uZz46IHt7d2FycmFudHlSZWdpc3RyYXRpb24uY3VzdG9tZXJGaXJzdG5hbWV9fTxiciAvPlxuICAgICAgPHN0cm9uZz57e2xvYygnbGFzdE5hbWUnKX19PC9zdHJvbmc+OiB7e3dhcnJhbnR5UmVnaXN0cmF0aW9uLmN1c3RvbWVyTGFzdG5hbWV9fTxiciAvPlxuICAgICAgPHNwYW4gdi1pZj1cIndhcnJhbnR5UmVnaXN0cmF0aW9uLmN1c3RvbWVyQ29tcGFueVwiPjxzdHJvbmc+e3tsb2MoJ2N1c3RvbWVyQ29tcGFueScpfX08L3N0cm9uZz46IHt7d2FycmFudHlSZWdpc3RyYXRpb24uY3VzdG9tZXJDb21wYW55fX08YnIgLz48L3NwYW4+XG4gICAgICA8c3Ryb25nPnt7bG9jKCdlbWFpbCcpfX08L3N0cm9uZz46IHt7d2FycmFudHlSZWdpc3RyYXRpb24uY3VzdG9tZXJFbWFpbH19PGJyIC8+XG4gICAgICA8c3BhbiB2LWlmPVwid2FycmFudHlSZWdpc3RyYXRpb24uY3VzdG9tZXJQaG9uZVwiPjxzdHJvbmc+e3tsb2MoJ3Bob25lJyl9fTwvc3Ryb25nPjoge3t3YXJyYW50eVJlZ2lzdHJhdGlvbi5jdXN0b21lclBob25lfX08YnIgLz48L3NwYW4+XG4gICAgICA8c3BhbiB2LWlmPVwid2FycmFudHlSZWdpc3RyYXRpb24uY3VzdG9tZXJBZGRyZXNzXCI+PHN0cm9uZz57e2xvYygnYWRkcmVzcycpfX08L3N0cm9uZz46IHt7d2FycmFudHlSZWdpc3RyYXRpb24uY3VzdG9tZXJBZGRyZXNzfX08YnIgLz48L3NwYW4+XG4gICAgICA8c3BhbiB2LWlmPVwid2FycmFudHlSZWdpc3RyYXRpb24uY3VzdG9tZXJQb3N0YWxDb2RlXCI+PHN0cm9uZz57e2xvYygncG9zdGFsQ29kZScpfX08L3N0cm9uZz46IHt7d2FycmFudHlSZWdpc3RyYXRpb24uY3VzdG9tZXJQb3N0YWxDb2RlfX08YnIgLz48L3NwYW4+XG4gICAgICA8c3BhbiB2LWlmPVwid2FycmFudHlSZWdpc3RyYXRpb24uY3VzdG9tZXJQb3N0YWxBcmVhXCI+PHN0cm9uZz57e2xvYygncG9zdGFsQXJlYScpfX08L3N0cm9uZz46IHt7d2FycmFudHlSZWdpc3RyYXRpb24uY3VzdG9tZXJQb3N0YWxBcmVhfX08YnIgLz48L3NwYW4+XG4gICAgICA8c3BhbiB2LWlmPVwid2FycmFudHlSZWdpc3RyYXRpb24uY3VzdG9tZXJDb3VudHJ5XCI+PHN0cm9uZz57e2xvYygnY291bnRyeScpfX08L3N0cm9uZz46IHt7d2FycmFudHlSZWdpc3RyYXRpb24uY3VzdG9tZXJDb3VudHJ5fX08YnIgLz48L3NwYW4+XG4gICAgPC9wPlxuXG5cbiAgICA8aDM+e3tsb2MoJ3NlbGxlckluZm9ybWF0aW9uJyl9fTwvaDM+IDxocj5cbiAgICA8cD5cbiAgICAgIDxzdHJvbmc+e3tsb2MoJ2ZpcnN0TmFtZScpfX08L3N0cm9uZz46IHt7d2FycmFudHlSZWdpc3RyYXRpb24uc2VsbGVyRmlyc3RuYW1lfX08YnIgLz5cbiAgICAgIDxzdHJvbmc+e3tsb2MoJ2xhc3ROYW1lJyl9fTwvc3Ryb25nPjoge3t3YXJyYW50eVJlZ2lzdHJhdGlvbi5zZWxsZXJMYXN0bmFtZX19PGJyIC8+XG4gICAgICA8c3Ryb25nPnt7bG9jKCdlbWFpbCcpfX08L3N0cm9uZz46IHt7d2FycmFudHlSZWdpc3RyYXRpb24uc2VsbGVyRW1haWx9fTxiciAvPlxuICAgICAgPHN0cm9uZz57e2xvYygnc3RvcmUnKX19PC9zdHJvbmc+OiB7e3dhcnJhbnR5UmVnaXN0cmF0aW9uLnNlbGxlclN0b3JlfX08YnIgLz5cbiAgICAgIDxzcGFuIHYtaWY9XCJ3YXJyYW50eVJlZ2lzdHJhdGlvbi5zZWxsZXJCdXNpbmVzc0lkXCI+PHN0cm9uZz57e2xvYygnYnVzaW5lc3NJZCcpfX08L3N0cm9uZz46IHt7d2FycmFudHlSZWdpc3RyYXRpb24uc2VsbGVyQnVzaW5lc3NJZH19PGJyIC8+PC9zcGFuPlxuICAgICAgPHNwYW4gdi1pZj1cIndhcnJhbnR5UmVnaXN0cmF0aW9uLnNlbGxlclN0cmVldEFkZHJlc3NcIj48c3Ryb25nPnt7bG9jKCdhZGRyZXNzJyl9fTwvc3Ryb25nPjoge3t3YXJyYW50eVJlZ2lzdHJhdGlvbi5zZWxsZXJTdHJlZXRBZGRyZXNzfX08YnIgLz48L3NwYW4+XG4gICAgICA8c3BhbiB2LWlmPVwid2FycmFudHlSZWdpc3RyYXRpb24uc2VsbGVyUG9zdGFsQ29kZVwiPjxzdHJvbmc+e3tsb2MoJ3Bvc3RhbENvZGUnKX19PC9zdHJvbmc+OiB7e3dhcnJhbnR5UmVnaXN0cmF0aW9uLnNlbGxlclBvc3RhbENvZGV9fTxiciAvPjwvc3Bhbj5cbiAgICAgIDxzcGFuIHYtaWY9XCJ3YXJyYW50eVJlZ2lzdHJhdGlvbi5zZWxsZXJQb3N0YWxBcmVhXCI+PHN0cm9uZz57e2xvYygncG9zdE9mZmljZScpfX08L3N0cm9uZz46IHt7d2FycmFudHlSZWdpc3RyYXRpb24uc2VsbGVyUG9zdGFsQXJlYX19PGJyIC8+PC9zcGFuPlxuICAgIDwvcD5cblxuICAgIDxoMz57e2xvYygncmVjZWl2ZWRXYXJyYW50eURvY3VtZW50cycpfX08L2gzPjxocj5cbiAgICA8cD5cbiAgICAgIDxzdHJvbmc+e3tsb2MoJ2NvbXBvbmVudHMud2FycmFudHlSZWdpc3RyYXRpb25zLndhcnJhbnR5TWFudWFsJyl9fTwvc3Ryb25nPjoge3tsb2MoJ2Zvcm1zLnJhZGlvLnllcycpfX08YnIgLz5cbiAgICAgIDxzdHJvbmc+e3tsb2MoJ2NvbXBvbmVudHMud2FycmFudHlSZWdpc3RyYXRpb25zLmNlRURlY2xhcmF0aW9uJyl9fTwvc3Ryb25nPjoge3tsb2MoJ2Zvcm1zLnJhZGlvLnllcycpfX08YnIgLz5cbiAgICA8L3A+XG5cbiAgICA8aHI+XG4gICAgPHA+XG4gICAgICA8c3Ryb25nPnt7bG9jKCdjb21wb25lbnRzLndhcnJhbnR5UmVnaXN0cmF0aW9ucy5jb250YWN0QWxsb3dlZCcpfX08L3N0cm9uZz46IHt7bG9jKCdmb3Jtcy5yYWRpby55ZXMnKX19PGJyIC8+XG4gICAgPC9wPlxuICAgIDxwPlxuICAgICAgPHN0cm9uZz57e2xvYygnZ2RwckNvbnNlbnQnKX19PC9zdHJvbmc+OiB7e3dhcnJhbnR5UmVnaXN0cmF0aW9uLmdkcHJDb25zZW50VGV4dH19PGJyIC8+XG4gICAgPC9wPlxuXG4gICAgPHAgY2xhc3M9XCJkLXByaW50LW5vbmVcIj48YnIgLz48YSBocmVmPVwiI1wiIHYtb246Y2xpY2s9XCJwcmludFwiPnt7bG9jKCdwcmludERvY3VtZW50Jyl9fTwvYT48L3A+XG5cbiAgPC90aGUtMS1jb2x1bW4tbGF5b3V0PlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cblxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAnVmlld3dhcnJhbnR5UmVnaXN0cmF0aW9uJyxcbiAgZGF0YTogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB7XG4gICAgICB3YXJyYW50eVJlZ2lzdHJhdGlvbklkOiBudWxsXG4gICAgfVxuICB9LFxuICBjb21wdXRlZDoge1xuICAgIHdhcnJhbnR5UmVnaXN0cmF0aW9uKCkge1xuICAgICAgbGV0IHdhcnJhbnR5UmVnaXN0cmF0aW9uRGF0YSA9IHRoaXMuJHN0b3JlLnN0YXRlLndhcnJhbnR5UmVnaXN0cmF0aW9ucy5maWx0ZXIod2FycmFudHlSZWdpc3RyYXRpb24gPT4gd2FycmFudHlSZWdpc3RyYXRpb24udXVpZCA9PT0gdGhpcy53YXJyYW50eVJlZ2lzdHJhdGlvbklkKVswXTtcblxuICAgICAgaWYod2FycmFudHlSZWdpc3RyYXRpb25EYXRhKXtcbiAgICAgICAgd2FycmFudHlSZWdpc3RyYXRpb25EYXRhLmdkcHJDb25zZW50VGV4dCA9IHdhcnJhbnR5UmVnaXN0cmF0aW9uRGF0YS5nZHByQ29uc2VudCA9PSAnMScgPyB0aGlzLmxvYygnZm9ybXMucmFkaW8ueWVzJykgOiB0aGlzLmxvYygnZm9ybXMucmFkaW8ubm8nKTtcblxuICAgICAgICBpZiAod2FycmFudHlSZWdpc3RyYXRpb25EYXRhLmRlbGl2ZXJ5RGF0ZS5mb3JtYXR0ZWQpIHtcbiAgICAgICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUod2FycmFudHlSZWdpc3RyYXRpb25EYXRhLmRlbGl2ZXJ5RGF0ZS5kYXRlKTtcblxuICAgICAgICAgIGxldCB5ZWFyID0gZGF0ZS5nZXRGdWxsWWVhcigpO1xuICAgICAgICAgIGxldCBtb250aCA9IGRhdGUuZ2V0TW9udGgoKSArIDE7XG4gICAgICAgICAgbW9udGggPSBtb250aC50b1N0cmluZygpO1xuICAgICAgICAgIG1vbnRoID0gbW9udGgubGVuZ3RoID09IDEgPyAnMCcrbW9udGggOiBtb250aDtcblxuICAgICAgICAgIGxldCBkYXkgPSBkYXRlLmdldERhdGUoKTtcbiAgICAgICAgICAgICAgZGF5ID0gZGF5LnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAgIGRheSA9IGRheS5sZW5ndGggPT0gMSA/ICcwJytkYXkgOiBkYXk7XG5cbiAgICAgICAgICB3YXJyYW50eVJlZ2lzdHJhdGlvbkRhdGEuZGVsaXZlcnlEYXRlRm9ybWF0dGVkID0gYCR7eWVhcn0vJHttb250aH0vJHtkYXl9YDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gd2FycmFudHlSZWdpc3RyYXRpb25EYXRhO1xuICAgIH0sXG4gIH0sXG4gIG1ldGhvZHM6IHtcbiAgICBwcmludChlKSB7XG4gICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB3aW5kb3cucHJpbnQoKTtcbiAgICB9XG4gIH0sXG4gIG1vdW50ZWQoKSB7XG4gICAgLy8gQ2hlY2sgaWYgd2UgaGF2ZSBwYXJhbSAvY29tcGFueS86aWQgYW5kIHVzZSB0aGF0IGVsc2UgdXNlIGxvZ2dlZCBpbiB1c2VyJ3MgY29tcGFueSBhcyBkZWZhdWx0XG4gICAgdGhpcy53YXJyYW50eVJlZ2lzdHJhdGlvbklkID0gdGhpcy4kcm91dGUucGFyYW1zLmlkXG5cbiAgICB0aGlzLiRzdG9yZS5kaXNwYXRjaCgnZ2V0V2FycmFudHlSZWdpc3RyYXRpb24nLCB0aGlzLndhcnJhbnR5UmVnaXN0cmF0aW9uSWQpO1xuXG4gICAgdGhpcy4kc3RvcmUuY29tbWl0KCdzZXRTdWJoZWFkZXInLCB7XG4gICAgICBzdWJ0aXRsZTogJycsXG4gICAgICB0aXRsZTogdGhpcy5sb2MoJ2NvbXBvbmVudHMud2FycmFudHlSZWdpc3RyYXRpb25zLnN1YmhlYWRlclRpdGxlJyksXG4gICAgICBkZXNjcmlwdGlvbjogJycsXG4gICAgICBzZWFyY2hFbmFibGVkOiB0cnVlXG4gICAgfSk7XG5cbiAgICBsZXQgc3ViaGVhZGVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnanMtc3ViaGVhZGVyJyk7XG4gICAgaWYoc3ViaGVhZGVyLmxlbmd0aCkge1xuICAgICAgc3ViaGVhZGVyID0gc3ViaGVhZGVyWzBdO1xuICAgICAgc3ViaGVhZGVyLmNsYXNzTGlzdC5hZGQoJ2QtcHJpbnQtbm9uZScpO1xuICAgIH1cbiAgfVxufVxuXG48L3NjcmlwdD5cbiIsIjx0ZW1wbGF0ZT5cbiAgPHRoZS0xLWNvbHVtbi1sYXlvdXQ+XG4gICAgPGRpdiBjbGFzcz1cInRleHQtY2VudGVyXCI+PGJ1dHRvbiB2LW9uOmNsaWNrPVwiYWRkV2FycmFudHlSZWdpc3RyYXRpb25cIiBjbGFzcz1cImJ0biBidG4tLXdoaXRlXCI+e3tsb2MoJ2FkZFdhcnJhbnR5UmVnaXN0cmF0aW9uJyl9fTwvYnV0dG9uPjwvZGl2PjxiciAvPlxuICAgIDx2LWNsaWVudC10YWJsZSA6Y29sdW1ucz1cImNvbHVtbnNcIiA6ZGF0YT1cImZpbHRlcmVkRGF0YVwiIDpvcHRpb25zPVwib3B0aW9uc1wiPlxuICAgICAgPHJvdXRlci1saW5rIHNsb3Q9XCJ1dWlkXCIgc2xvdC1zY29wZT1cInByb3BzXCIgOnRvPVwieyBuYW1lOiAnd2FycmFudHktcmVnaXN0cmF0aW9uJywgcGFyYW1zOiB7IGlkOiBwcm9wcy5yb3cudXVpZCB9fVwiPnt7cHJvcHMucm93LnV1aWR9fTwvcm91dGVyLWxpbms+XG4gICAgPC92LWNsaWVudC10YWJsZT5cbiAgICA8bW9kYWwtd2FycmFudHktcmVnaXN0cmF0aW9uIHJlZj1cImFkZFdhcnJhbnR5UmVnaXN0cmF0aW9uTW9kYWxcIiA6bW9kYWwtbW9kZT1cIidhZGQnXCI+PC9tb2RhbC13YXJyYW50eS1yZWdpc3RyYXRpb24+XG4gICAgPGRpdiBjbGFzcz1cInRleHQtY2VudGVyXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzcGlubmVyXCI+PC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvdGhlLTEtY29sdW1uLWxheW91dD5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5cbmltcG9ydCBWRm9ybSBmcm9tICcuL3YtZm9ybS52dWUnO1xuaW1wb3J0IE1vZGFsV2FycmFudHlSZWdpc3RyYXRpb24gZnJvbSAnLi9tb2RhbC13YXJyYW50eS1yZWdpc3RyYXRpb24udnVlJztcbmltcG9ydCAkIGZyb20gJ2pxdWVyeSc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbmFtZTogJ1ZpZXdXYXJyYW50eVJlZ2lzdHJhdGlvbnMnLFxuICBjb21wb25lbnRzOiB7XG4gICAgJ21vZGFsLXdhcnJhbnR5LXJlZ2lzdHJhdGlvbic6IE1vZGFsV2FycmFudHlSZWdpc3RyYXRpb24sXG4gICAgJ3YtZm9ybSc6IFZGb3JtXG4gIH0sXG4gIGRhdGE6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZm9ybURhdGE6IHt9LFxuICAgICAgZm9ybUVycm9yczoge30sXG4gICAgICBzZWFyY2hUZXh0OiAnJyxcbiAgICAgIHNlYXJjaENvbHVtbnM6IFsndXVpZCcsICdzZXJpYWxOdW1iZXInLCAnZGVsaXZlcnlEYXRlV2FycmFudHknLCAnc2VsbGVyU3RvcmUnXSxcbiAgICAgIGNvbHVtbnM6IFsndXVpZCcsICdzZXJpYWxOdW1iZXInLCAnZGVsaXZlcnlEYXRlV2FycmFudHknLCAnc2VsbGVyU3RvcmUnXSxcbiAgICAgIHNvcnRhYmxlOiBbJ3V1aWQnLCAnc2VyaWFsTnVtYmVyJywgJ2RlbGl2ZXJ5RGF0ZVdhcnJhbnR5JywgJ3NlbGxlclN0b3JlJ10sXG4gICAgICBmaWx0ZXJhYmxlOiBbJ3V1aWQnLCAnc2VyaWFsTnVtYmVyJywgJ2RlbGl2ZXJ5RGF0ZVdhcnJhbnR5JywgJ3NlbGxlclN0b3JlJ10sXG4gICAgfVxuICB9LFxuICBjb21wdXRlZDoge1xuICAgIG9wdGlvbnMoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBmaWx0ZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgaGVhZGluZ3M6IHtcbiAgICAgICAgICB1dWlkOiB0aGlzLmxvYygnd2FycmFudHlSZWdpc3RyYXRpb25JZCcpLFxuICAgICAgICAgIHNlcmlhbE51bWJlcjogdGhpcy5sb2MoJ3NlcmlhbE51bWJlcicpLFxuICAgICAgICAgIGRlbGl2ZXJ5RGF0ZU1hY2hpbmU6IHRoaXMubG9jKCdkYXRlQWRkZWRNYWNoaW5lJyksXG4gICAgICAgICAgZGVsaXZlcnlEYXRlV2FycmFudHk6IHRoaXMubG9jKCdkZWxpdmVyeURhdGVXYXJyYW50eScpLFxuICAgICAgICAgIHNlbGxlclN0b3JlOiB0aGlzLmxvYygncmVnaXN0ZXJlZEJ5JyksXG4gICAgICAgIH0sXG4gICAgICAgIHRleHRzOiB7XG4gICAgICAgICAgICBub1Jlc3VsdHM6IHRoaXMubG9jKCdub01hdGNoaW5nUmVzdWx0cycpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgd2FycmFudHlSZWdpc3RyYXRpb25zKCkge1xuICAgICAgcmV0dXJuIHRoaXMuJHN0b3JlLnN0YXRlLndhcnJhbnR5UmVnaXN0cmF0aW9ucy5tYXAod2FycmFudHlSZWdpc3RyYXRpb24gPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHV1aWQ6IHdhcnJhbnR5UmVnaXN0cmF0aW9uLnV1aWQsXG4gICAgICAgICAgc2VyaWFsTnVtYmVyOiB3YXJyYW50eVJlZ2lzdHJhdGlvbi5zZXJpYWxOdW1iZXIsXG4gICAgICAgICAgZGVsaXZlcnlEYXRlV2FycmFudHk6IHdhcnJhbnR5UmVnaXN0cmF0aW9uLmRhdGVBZGRlZCAmJiB3YXJyYW50eVJlZ2lzdHJhdGlvbi5kYXRlQWRkZWQuZm9ybWF0dGVkLFxuICAgICAgICAgIHNlbGxlclN0b3JlOiB3YXJyYW50eVJlZ2lzdHJhdGlvbi5zZWxsZXJTdG9yZSxcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSxcblxuICAgIGZpbHRlcmVkRGF0YSgpIHtcbiAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgICAgY29uc3Qgc2VhcmNoVGV4dCA9IHRoaXMuJHN0b3JlLnN0YXRlLnN1YmhlYWRlci5zZWFyY2hUZXh0OyAvLyBVc2Ugc3ViaGVhZGVyIHNlYXJjaCBpbnB1dCBmb3Igc2VhcmNoaW5nXG4gICAgICBjb25zdCBkYXRhID0gdGhpcy53YXJyYW50eVJlZ2lzdHJhdGlvbnM7XG5cbiAgICAgIGlmKHNlYXJjaFRleHQpIHtcbiAgICAgICAgY29uc3Qgc2VhcmNoUmVnRXggPSBuZXcgUmVnRXhwKHNlYXJjaFRleHQsICdpJylcblxuICAgICAgICByZXR1cm4gZGF0YS5maWx0ZXIoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgICBmb3IobGV0IGk9MCwgbD1zZWxmLnNlYXJjaENvbHVtbnMubGVuZ3RoOyBpPGw7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgY29sdW1uID0gc2VsZi5zZWFyY2hDb2x1bW5zW2ldO1xuXG4gICAgICAgICAgICBpZihzZWFyY2hSZWdFeC50ZXN0KGl0ZW1bY29sdW1uXSkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG4gIH0sXG4gIG1ldGhvZHM6IHtcbiAgICBhZGRXYXJyYW50eVJlZ2lzdHJhdGlvbigpIHtcbiAgICAgIHRoaXMuJHJlZnMuYWRkV2FycmFudHlSZWdpc3RyYXRpb25Nb2RhbC5zaG93KCk7XG4gICAgfVxuICB9LFxuICBtb3VudGVkOiBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy4kc3RvcmUuZGlzcGF0Y2goJ2dldFdhcnJhbnR5UmVnaXN0cmF0aW9ucycpXG4gICAgICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAkKCcuc3Bpbm5lcicpLmhpZGUoKTtcbiAgICAgICAgICAgICAgICB9KTtcblxuXG4gICAgdGhpcy4kc3RvcmUuY29tbWl0KCdzZXRTdWJoZWFkZXInLCB7XG4gICAgICBzdWJ0aXRsZTogJycsXG4gICAgICB0aXRsZTogdGhpcy5sb2MoJ2NvbXBvbmVudHMud2FycmFudHlSZWdpc3RyYXRpb25zLnN1YmhlYWRlclRpdGxlJyksXG4gICAgICBkZXNjcmlwdGlvbjogJycsXG4gICAgICBzZWFyY2hFbmFibGVkOiB0cnVlXG4gICAgfSk7XG4gIH1cbn1cbjwvc2NyaXB0PlxuIiwiaW1wb3J0IFZ1ZXggZnJvbSAndnVleCdcbmltcG9ydCBWdWUgZnJvbSAndnVlJ1xuXG5pbXBvcnQgQVBJIGZyb20gJy4uLy4uL3NlcnZpY2VzL2FwaSc7XG5pbXBvcnQgZGF0YVNlcnZpY2UgZnJvbSAnLi4vLi4vc2VydmljZXMvZGF0YS1zZXJ2aWNlJztcblxuY29uc3QgYXBpID0gbmV3IEFQSSgpO1xuXG5WdWUudXNlKFZ1ZXgpXG5cblxuY29uc3Qgc3RhdGVIZWxwZXIgPSB7XG4gIHVwZGF0ZUFycmF5KHJlcywgc3RhdGVBcnJheSwga2V5KSB7XG5cbiAgICByZXMgPSBBcnJheS5pc0FycmF5KHJlcykgPyByZXMgOiBbcmVzXTsgLy8gVHVybiBpbnRvIGFycmF5LCBzbyB3ZSBjYW4gaGFuZGxlIGl0IHNhbWUgd2F5XG4gICAgY29uc3QgcmVzSWRzID0ge307XG4gICAgY29uc3QgYWRkZWQgPSBbXTtcblxuICAgIHJlcy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgcmVzSWRzW2l0ZW1ba2V5XV0gPSBpdGVtO1xuICAgIH0pO1xuXG4gICAgLy8gSWYgYWxyZWFkeSBhZGRlZCwgdXBkYXRlXG4gICAgZm9yKGxldCBpPXN0YXRlQXJyYXkubGVuZ3RoLTE7IGk+PTA7IGktLSkge1xuICAgICAgaWYocmVzSWRzW3N0YXRlQXJyYXlbaV1ba2V5XV0pIHtcbiAgICAgICAgc3RhdGVBcnJheS5zcGxpY2UoaSwgMSwgcmVzSWRzW3N0YXRlQXJyYXlbaV1ba2V5XV0pO1xuICAgICAgICBhZGRlZC5wdXNoKHN0YXRlQXJyYXlbaV1ba2V5XSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQWRkIG5ldyBvbmVzXG4gICAgaWYoYWRkZWQubGVuZ3RoICE9PSByZXMubGVuZ3RoKSB7XG4gICAgICByZXMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgaWYoYWRkZWQuaW5kZXhPZihpdGVtW2tleV0pID09PSAtMSkge1xuICAgICAgICAgIHN0YXRlQXJyYXkucHVzaChpdGVtKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9LFxuICByZW1vdmVGcm9tQXJyYXkoaWQsIHN0YXRlQXJyYXksIGtleSkge1xuICAgIGZvcihsZXQgaT1zdGF0ZUFycmF5Lmxlbmd0aC0xOyBpPj0wOyBpLS0pIHtcbiAgICAgIGlmKHN0YXRlQXJyYXlbaV1ba2V5XSA9PT0gaWQpIHtcbiAgICAgICAgc3RhdGVBcnJheS5zcGxpY2UoaSwgMSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuY29uc3Qgc3RvcmUgPSBuZXcgVnVleC5TdG9yZSh7XG4gIHN0cmljdDogcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyxcbiAgc3RhdGU6IHtcbiAgICBsYW5ndWFnZTogJycsXG4gICAgdXNlcjoge1xuICAgICAgaW5mbzogbnVsbCxcbiAgICAgIGNvbXBhbnk6IG51bGwsXG4gICAgICByb2xlOiBudWxsXG4gICAgfSxcbiAgICBzdWJoZWFkZXI6IHtcbiAgICAgIHRpdGxlOiAnJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnJyxcbiAgICAgIHNlYXJjaEVuYWJsZWQ6IGZhbHNlLFxuICAgICAgc2VhcmNoVGV4dDogJydcbiAgICB9LFxuICAgIGN1c3RvbWVyTWFjaGluZXM6IFtdLFxuICAgIGN1c3RvbWVyTWFjaGluZURldGFpbHM6IFtdLFxuICAgIGNvbXBhbmllczogW10sXG4gICAgdXNlcnM6IFtdLCAvLyBjb21wYW55IGlkIGFzIGtleSBmb3IgYW4gYXJyYXkgb2YgdXNlciBvYmplY3RzXG4gICAgY29tcGxhaW50czogW10sXG4gICAgd2FycmFudHlSZWdpc3RyYXRpb25zOiBbXSxcbiAgICB3YXJyYW50ZWRTZXJpYWxOdW1iZXJzOiBbXSxcbiAgICBsb2dnZWRJbjogZmFsc2UsXG4gICAgbmVlZHNMb2dnaW5nSW46IHRydWUsXG4gICAgbG9jYWxpemF0aW9uOiBudWxsLFxuICAgIHByZWxvYWRpbmc6IHRydWUsXG4gICAgY291bnRyaWVzOiBbXSxcbiAgICBzdWJoZWFkZXJGb3VuZDogZmFsc2UsXG4gICAgc3ViaGVhZGVyU3VidGl0bGU6ICcnLFxuICAgIHN1YmhlYWRlclRpdGxlOiAnJyxcbiAgICBzdWJoZWFkZXJEZXNjcmlwdGlvbjogJycsXG4gICAgbm90aWZpY2F0aW9uc1F1ZXVlOiBbXSxcbiAgICBub3RpZmljYXRpb25zTWF4OiA2XG4gIH0sXG4gIG11dGF0aW9uczoge1xuICAgIHNldExhbmd1YWdlKHN0YXRlLCByZXMpIHtcbiAgICAgIHN0YXRlLmxhbmd1YWdlID0gcmVzO1xuICAgIH0sXG4gICAgc2V0Q3VycmVudFVzZXIoc3RhdGUsIHJlcykge1xuICAgICAgc3RhdGUudXNlci5pbmZvID0gcmVzO1xuICAgICAgc3RhdGUudXNlci5yb2xlID0gcmVzLnJvbGU7XG4gICAgfSxcbiAgICBzZXRDdXJyZW50VXNlckNvbXBhbnkoc3RhdGUsIHJlcykge1xuICAgICAgc3RhdGUudXNlci5jb21wYW55ID0gcmVzO1xuICAgIH0sXG4gICAgc2V0Q3VycmVudE1hY2hpbmVPd25lcihzdGF0ZSwgcmVzKSB7XG4gICAgICBzdGF0ZS5tYWNoaW5lLmN1c3RvbWVyTnVtYmVyID0gcmVzLmN1c3RvbWVyTnVtYmVyO1xuICAgICAgc3RhdGUubWFjaGluZS5jb21wYW55TmFtZSA9IHJlcy5jb21wYW55TmFtZTtcbiAgICB9LFxuICAgIHNldExvZ2luU3RhdHVzKHN0YXRlLCByZXMpIHtcbiAgICAgIHN0YXRlLmxvZ2dlZEluID0gcmVzO1xuICAgIH0sXG4gICAgc2V0TmVlZHNMb2dnaW5JbihzdGF0ZSwgcmVzKSB7XG4gICAgICBzdGF0ZS5uZWVkc0xvZ2dpbmdJbiA9IHJlcztcbiAgICB9LFxuICAgIHNldExvY2FsaXphdGlvbihzdGF0ZSwgcmVzKSB7XG4gICAgICBzdGF0ZS5sb2NhbGl6YXRpb24gPSByZXM7XG4gICAgfSxcbiAgICBzZXRQcmVsb2FkaW5nU3RhdHVzKHN0YXRlLCByZXMpIHtcbiAgICAgIHN0YXRlLnByZWxvYWRpbmcgPSByZXM7XG4gICAgfSxcbiAgICBzZXRDb21wYW5pZXMoc3RhdGUsIHJlcykge1xuICAgICAgc3RhdGVIZWxwZXIudXBkYXRlQXJyYXkocmVzLCBzdGF0ZS5jb21wYW5pZXMsICdpZCcpO1xuICAgIH0sXG4gICAgc2V0Q29tcGFueShzdGF0ZSwgcmVzKSB7XG4gICAgICBzdGF0ZUhlbHBlci51cGRhdGVBcnJheShyZXMsIHN0YXRlLmNvbXBhbmllcywgJ2lkJyk7XG4gICAgfSxcbiAgICBzZXRDb3VudHJpZXMoc3RhdGUsIHJlcykge1xuICAgICAgc3RhdGUuY291bnRyaWVzID0gcmVzXG4gICAgfSxcbiAgICBzZXRTdWJoZWFkZXJGb3VuZChzdGF0ZSwgcmVzKSB7XG4gICAgICBzdGF0ZS5zdWJoZWFkZXJGb3VuZCA9IHJlcztcbiAgICB9LFxuICAgIHNldFN1YmhlYWRlcihzdGF0ZSwgcmVzKSB7XG4gICAgICBzdGF0ZS5zdWJoZWFkZXIuc3VidGl0bGUgPSByZXMuc3VidGl0bGU7XG4gICAgICBzdGF0ZS5zdWJoZWFkZXIudGl0bGUgPSByZXMudGl0bGU7XG4gICAgICBzdGF0ZS5zdWJoZWFkZXIuZGVzY3JpcHRpb24gPSByZXMuZGVzY3JpcHRpb247XG4gICAgICBzdGF0ZS5zdWJoZWFkZXIuc2VhcmNoRW5hYmxlZCA9IHJlcy5zZWFyY2hFbmFibGVkO1xuICAgIH0sXG4gICAgc2V0U3ViaGVhZGVyU2VhcmNoVGV4dChzdGF0ZSwgcmVzKSB7XG4gICAgICBzdGF0ZS5zdWJoZWFkZXIuc2VhcmNoVGV4dCA9IHJlcztcbiAgICB9LFxuICAgIHNldEN1c3RvbWVyTWFjaGluZXMoc3RhdGUsIHJlcykge1xuICAgICAgc3RhdGVIZWxwZXIudXBkYXRlQXJyYXkocmVzLCBzdGF0ZS5jdXN0b21lck1hY2hpbmVzLCAnc2VyaWFsTnVtYmVyJyk7XG4gICAgfSxcbiAgICBzZXRDdXN0b21lck1hY2hpbmVEZXRhaWxzKHN0YXRlLCByZXMpIHtcbiAgICAgIHN0YXRlSGVscGVyLnVwZGF0ZUFycmF5KHJlcywgc3RhdGUuY3VzdG9tZXJNYWNoaW5lRGV0YWlscywgJ3NlcmlhbE51bWJlcicpO1xuICAgIH0sXG4gICAgYWRkQ29tcGFueShzdGF0ZSwgcmVzKSB7XG4gICAgICBzdGF0ZS5jb21wYW5pZXMucHVzaChyZXMpO1xuICAgIH0sXG4gICAgdXBkYXRlQ29tcGFueShzdGF0ZSwgcmVzKSB7XG4gICAgICBzdGF0ZUhlbHBlci51cGRhdGVBcnJheShyZXMsIHN0YXRlLmNvbXBhbmllcywgJ2lkJyk7XG4gICAgfSxcbiAgICBkZWxldGVDb21wYW55KHN0YXRlLCByZXMpIHtcbiAgICAgIHN0YXRlSGVscGVyLnJlbW92ZUZyb21BcnJheShyZXMsIHN0YXRlLmNvbXBhbmllcywgJ2lkJyk7XG4gICAgfSxcbiAgICBzZXRDb21wbGFpbnRzKHN0YXRlLCByZXMpIHtcbiAgICAgIHN0YXRlSGVscGVyLnVwZGF0ZUFycmF5KHJlcywgc3RhdGUuY29tcGxhaW50cywgJ3V1aWQnKTtcbiAgICB9LFxuICAgIHNldFdhcnJhbnRlZFNlcmlhbE51bWJlcnMoc3RhdGUsIHJlcykge1xuICAgICAgc3RhdGUud2FycmFudGVkU2VyaWFsTnVtYmVycyA9IHJlcztcbiAgICB9LFxuICAgIGFkZENvbXBsYWludChzdGF0ZSwgcmVzKSB7XG4gICAgICBzdGF0ZUhlbHBlci51cGRhdGVBcnJheShyZXMsIHN0YXRlLmNvbXBsYWludHMsICd1dWlkJyk7XG4gICAgfSxcbiAgICBzZXRXYXJyYW50eVJlZ2lzdHJhdGlvbnMoc3RhdGUsIHJlcykge1xuICAgICAgc3RhdGVIZWxwZXIudXBkYXRlQXJyYXkocmVzLCBzdGF0ZS53YXJyYW50eVJlZ2lzdHJhdGlvbnMsICd1dWlkJyk7XG4gICAgfSxcbiAgICBhZGRXYXJyYW50eVJlZ2lzdHJhdGlvbihzdGF0ZSwgcmVzKSB7XG4gICAgICBzdGF0ZUhlbHBlci51cGRhdGVBcnJheShyZXMsIHN0YXRlLndhcnJhbnR5UmVnaXN0cmF0aW9ucywgJ3V1aWQnKTtcbiAgICB9LFxuICAgIHNldFVzZXJzKHN0YXRlLCByZXMpIHtcbiAgICAgIHN0YXRlSGVscGVyLnVwZGF0ZUFycmF5KHJlcywgc3RhdGUudXNlcnMsICdpZCcpO1xuICAgIH0sXG4gICAgYWRkVXNlcihzdGF0ZSwgcmVzKSB7XG4gICAgICBzdGF0ZUhlbHBlci51cGRhdGVBcnJheShyZXMsIHN0YXRlLnVzZXJzLCAnaWQnKTtcbiAgICB9LFxuICAgIHVwZGF0ZVVzZXIoc3RhdGUsIHJlcykge1xuICAgICAgc3RhdGVIZWxwZXIudXBkYXRlQXJyYXkocmVzLCBzdGF0ZS51c2VycywgJ2lkJyk7XG4gICAgfSxcbiAgICBkZWxldGVVc2VyKHN0YXRlLCByZXMpIHtcbiAgICAgIHN0YXRlSGVscGVyLnJlbW92ZUZyb21BcnJheShyZXMsIHN0YXRlLnVzZXJzLCAnaWQnKTtcbiAgICB9LFxuICAgIGFkZE5vdGlmaWNhdGlvbihzdGF0ZSwgbWVzc2FnZXMpIHtcbiAgICAgIHN0YXRlLm5vdGlmaWNhdGlvbnNRdWV1ZS5wdXNoKG1lc3NhZ2VzLmpvaW4oJywgJykpXG5cbiAgICAgIGlmIChzdGF0ZS5ub3RpZmljYXRpb25zUXVldWUubGVuZ3RoID4gc3RhdGUubm90aWZpY2F0aW9uc01heCkge1xuICAgICAgICBzdGF0ZS5ub3RpZmljYXRpb25zUXVldWUuc2hpZnQoKVxuICAgICAgfVxuICAgIH0sXG4gICAgdXBkYXRlQWRkaXRpb25hbEluZm9ybWF0aW9uKHN0YXRlLCBtZXNzYWdlKSB7XG4gICAgICBzdGF0ZS5hZGRpdGlvbmFsSW5mb3JtYXRpb24gPSBtZXNzYWdlXG4gICAgfVxuICB9LFxuICBhY3Rpb25zOiB7XG4gICAgZ2V0Q291bnRyaWVzKGNvbnRleHQpIHtcbiAgICAgIC8vIE9ubHkgZmV0Y2ggY291bnRyaWVzIG9uY2VcbiAgICAgIGlmKGNvbnRleHQuc3RhdGUuY291bnRyaWVzLmxlbmd0aCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhcGkuZ2V0Q291bnRyaWVzKClcbiAgICAgIC50aGVuKHJlcyA9PiB7XG4gICAgICAgIGlmKHJlcy5yZXN1bHQuY291bnRyaWVzKSB7XG4gICAgICAgICAgY29udGV4dC5jb21taXQoJ3NldENvdW50cmllcycsIHJlcy5yZXN1bHQuY291bnRyaWVzKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSxcbiAgICBnZXRDdXJyZW50VXNlcih7IGNvbW1pdCB9KSB7XG4gICAgICByZXR1cm4gYXBpLmdldEN1cnJlbnRVc2VyKClcbiAgICAgIC50aGVuKChyZXMpID0+IHtcbiAgICAgICAgLy8gSWYgd2UgY2FuIGdldCBwcm9wZXIgYW5zd2VyLCB3ZSdyZSBsb2dnZWQgaW5cbiAgICAgICAgaWYocmVzLmNvZGUgPT09IDIwMCkge1xuICAgICAgICAgIGNvbW1pdCgnc2V0TG9naW5TdGF0dXMnLCB0cnVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbW1pdCgnc2V0Q3VycmVudFVzZXInLCByZXMucmVzdWx0LnVzZXIpO1xuICAgICAgICBjb21taXQoJ3NldEN1cnJlbnRVc2VyQ29tcGFueScsIHJlcy5yZXN1bHQuY29tcGFueSk7XG4gICAgICB9KTtcbiAgICB9LFxuICAgIGdldExvY2FsaXphdGlvbih7Y29tbWl0fSkge1xuICAgICAgcmV0dXJuIGFwaS5nZXRMb2NhbGl6YXRpb24oKVxuICAgICAgLnRoZW4ocmVzID0+IHtcbiAgICAgICAgaWYocmVzLnJlc3VsdC5sb2NhbGl6YXRpb24pIHtcbiAgICAgICAgICBjb21taXQoJ3NldExvY2FsaXphdGlvbicsIHJlcy5yZXN1bHQubG9jYWxpemF0aW9uKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSxcbiAgICBnZXRDb21wbGFpbnRzKHtjb21taXR9LCBvcHRpb25zKSB7XG4gICAgICBpZighb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gYXBpLmdldENvbXBsYWludHMoe1xuICAgICAgICAgIGluY2x1ZGVDaGlsZENvbXBhbmllczogdHJ1ZVxuICAgICAgICB9KVxuICAgICAgICAudGhlbihyZXMgPT4ge1xuICAgICAgICAgIGlmKHJlcy5yZXN1bHQuY29tcGxhaW50cykge1xuICAgICAgICAgICAgY29tbWl0KCdzZXRDb21wbGFpbnRzJywgcmVzLnJlc3VsdC5jb21wbGFpbnRzKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYocmVzLnJlc3VsdC53YXJyYW50ZWRTZXJpYWxOdW1iZXJzKSB7XG4gICAgICAgICAgICBjb21taXQoJ3NldFdhcnJhbnRlZFNlcmlhbE51bWJlcnMnLCByZXMucmVzdWx0LndhcnJhbnRlZFNlcmlhbE51bWJlcnMpXG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGFwaS5nZXRDb21wbGFpbnRzKG9wdGlvbnMpXG4gICAgICAudGhlbihyZXMgPT4ge1xuICAgICAgICBpZihyZXMucmVzdWx0LmNvbXBsYWludHMpIHtcbiAgICAgICAgICBjb21taXQoJ3NldENvbXBsYWludHMnLCByZXMucmVzdWx0LmNvbXBsYWludHMpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9LFxuICAgIGdldENvbXBsYWludCh7Y29tbWl0fSwgY29tcGxhaW50SWQpIHtcbiAgICAgIHJldHVybiBhcGkuZ2V0Q29tcGxhaW50KGNvbXBsYWludElkKVxuICAgICAgLnRoZW4ocmVzID0+IHtcbiAgICAgICAgaWYocmVzLnJlc3VsdC5jb21wbGFpbnQpIHtcbiAgICAgICAgICBjb21taXQoJ3NldENvbXBsYWludHMnLCByZXMucmVzdWx0LmNvbXBsYWludCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0sXG4gICAgZ2V0V2FycmFudHlSZWdpc3RyYXRpb25zKHtjb21taXR9LCBvcHRpb25zKSB7XG4gICAgICBpZighb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gYXBpLmdldFdhcnJhbnR5UmVnaXN0cmF0aW9ucyh7aW5jbHVkZUNoaWxkQ29tcGFuaWVzOiB0cnVlfSlcbiAgICAgICAgLnRoZW4ocmVzID0+IHtcbiAgICAgICAgICBpZihyZXMucmVzdWx0LndhcnJhbnR5UmVnaXN0cmF0aW9ucykge1xuICAgICAgICAgICAgY29tbWl0KCdzZXRXYXJyYW50eVJlZ2lzdHJhdGlvbnMnLCByZXMucmVzdWx0LndhcnJhbnR5UmVnaXN0cmF0aW9ucyk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGFwaS5nZXRXYXJyYW50eVJlZ2lzdHJhdGlvbnMob3B0aW9ucylcbiAgICAgIC50aGVuKHJlcyA9PiB7XG4gICAgICAgIGlmKHJlcy5yZXN1bHQud2FycmFudHlSZWdpc3RyYXRpb25zKSB7XG4gICAgICAgICAgY29tbWl0KCdzZXRXYXJyYW50eVJlZ2lzdHJhdGlvbnMnLCByZXMucmVzdWx0LndhcnJhbnR5UmVnaXN0cmF0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0sXG4gICAgZ2V0V2FycmFudHlSZWdpc3RyYXRpb24oe2NvbW1pdH0sIHdhcnJhbnR5UmVnaXN0cmF0aW9uSWQpIHtcbiAgICAgIHJldHVybiBhcGkuZ2V0V2FycmFudHlSZWdpc3RyYXRpb24od2FycmFudHlSZWdpc3RyYXRpb25JZClcbiAgICAgIC50aGVuKHJlcyA9PiB7XG4gICAgICAgIGlmKHJlcy5yZXN1bHQud2FycmFudHlSZWdpc3RyYXRpb24pIHtcbiAgICAgICAgICBjb21taXQoJ3NldFdhcnJhbnR5UmVnaXN0cmF0aW9ucycsIHJlcy5yZXN1bHQud2FycmFudHlSZWdpc3RyYXRpb24pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9LFxuICAgIGdldEN1c3RvbWVyTWFjaGluZXMoe2NvbW1pdH0sIGNvbXBhbnlJZCkge1xuICAgICAgcmV0dXJuIGFwaS5nZXRDdXN0b21lck1hY2hpbmVzKHtcbiAgICAgICAgY29tcGFueTogY29tcGFueUlkLFxuICAgICAgICBpbmNsdWRlQ2hpbGRDb21wYW5pZXM6IHRydWVcbiAgICAgIH0pXG4gICAgICAudGhlbihyZXMgPT4ge1xuICAgICAgICBpZihyZXMucmVzdWx0LmN1c3RvbWVyTWFjaGluZXMpIHtcbiAgICAgICAgICBjb21taXQoJ3NldEN1c3RvbWVyTWFjaGluZXMnLCByZXMucmVzdWx0LmN1c3RvbWVyTWFjaGluZXMpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9LFxuICAgIGdldEN1c3RvbWVyTWFjaGluZSh7Y29tbWl0fSwgc2VyaWFsTnVtYmVyKSB7XG4gICAgICByZXR1cm4gYXBpLmdldEN1c3RvbWVyTWFjaGluZShzZXJpYWxOdW1iZXIpXG4gICAgICAudGhlbihyZXMgPT4ge1xuICAgICAgICBpZihyZXMucmVzdWx0LmN1c3RvbWVyTWFjaGluZSkge1xuICAgICAgICAgIGNvbW1pdCgnc2V0Q3VzdG9tZXJNYWNoaW5lcycsIHJlcy5yZXN1bHQuY3VzdG9tZXJNYWNoaW5lKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSxcbiAgICBnZXRDdXN0b21lck1hY2hpbmVEZXRhaWxzKHtjb21taXR9LCBzZXJpYWxOdW1iZXIpIHtcbiAgICAgIHJldHVybiBhcGkuZ2V0Q3VzdG9tZXJNYWNoaW5lRGV0YWlscyhzZXJpYWxOdW1iZXIpXG4gICAgICAudGhlbihyZXMgPT4ge1xuICAgICAgICBpZihyZXMucmVzdWx0LmN1c3RvbWVyTWFjaGluZURldGFpbHMpIHtcbiAgICAgICAgICBjb21taXQoJ3NldEN1c3RvbWVyTWFjaGluZURldGFpbHMnLCByZXMucmVzdWx0LmN1c3RvbWVyTWFjaGluZURldGFpbHMpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9LFxuICAgIGdldENoaWxkQ29tcGFuaWVzKGNvbnRleHQpIHtcbiAgICAgIHJldHVybiBhcGkuZ2V0Q29tcGFuaWVzKHtcbiAgICAgICAgY2hpbGRyZW5PZjogY29udGV4dC5zdGF0ZS51c2VyLmluZm8uY29tcGFueSxcbiAgICAgICAgaW5jbHVkZVVzZXJzT2ZSb2xlczogWydyZXRhaWxlci1hZG1pbiddXG4gICAgICB9KVxuICAgICAgLnRoZW4ocmVzID0+IHtcbiAgICAgICAgaWYocmVzLnJlc3VsdC5jb21wYW5pZXMpIHtcbiAgICAgICAgICByZXMucmVzdWx0LmNvbXBhbmllcy5mb3JFYWNoKGNvbXBhbnkgPT4ge1xuICAgICAgICAgICAgY29tcGFueS51c2Vycy5mb3JFYWNoKHVzZXIgPT4ge1xuICAgICAgICAgICAgICBpZighY29tcGFueS5jb250YWN0cykge1xuICAgICAgICAgICAgICAgIGNvbXBhbnkuY29udGFjdHMgPSBbXTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgY29udGV4dC5jb21taXQoJ3NldENvbXBhbmllcycsIHJlcy5yZXN1bHQuY29tcGFuaWVzKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSxcbiAgICBnZXRDb21wYW55KHtjb21taXR9LCBjb21wYW55SWQpIHtcbiAgICAgIHJldHVybiBhcGkuZ2V0Q29tcGFueShjb21wYW55SWQpXG4gICAgICAudGhlbihyZXMgPT4ge1xuICAgICAgICBpZihyZXMucmVzdWx0LmNvbXBhbnkpIHtcbiAgICAgICAgICBjb21taXQoJ3NldENvbXBhbnknLCByZXMucmVzdWx0LmNvbXBhbnkpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9LFxuICAgIGdldENvbXBhbnlVc2Vycyhjb250ZXh0LCBjb21wYW55SWQpIHtcbiAgICAgIHJldHVybiBhcGkuZ2V0VXNlcnMoe1xuICAgICAgICBjb21wYW55OiBjb21wYW55SWRcbiAgICAgIH0pXG4gICAgICAudGhlbihyZXMgPT4ge1xuICAgICAgICBpZihyZXMucmVzdWx0LnVzZXJzKSB7XG4gICAgICAgICAgY29udGV4dC5jb21taXQoJ3NldFVzZXJzJywgcmVzLnJlc3VsdC51c2Vycyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0sXG4gICAgZGVsZXRlQ29tcGFueShjb250ZXh0LCBjb21wYW55SWQpIHtcbiAgICAgIHJldHVybiBhcGkuZGVsZXRlQ29tcGFueShjb21wYW55SWQpXG4gICAgICAudGhlbihyZXMgPT4ge1xuICAgICAgICBpZihyZXMucmVzdWx0LmNvbXBhbnkpIHtcbiAgICAgICAgICBjb250ZXh0LmNvbW1pdCgnZGVsZXRlQ29tcGFueScsIHJlcy5yZXN1bHQuY29tcGFueSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0sXG4gICAgZ2V0VXNlcih7Y29tbWl0fSwgdXNlcklkKSB7XG4gICAgICByZXR1cm4gYXBpLmdldFVzZXIodXNlcklkKVxuICAgICAgLnRoZW4ocmVzID0+IHtcbiAgICAgICAgaWYocmVzLnJlc3VsdC51c2VyKSB7XG4gICAgICAgICAgY29tbWl0KCdhZGRVc2VyJywgcmVzLnJlc3VsdC51c2VyKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9LFxuICBnZXR0ZXJzOiB7XG4gICAgY291bnRyeVNlbGVjdE9wdGlvbnM6IHN0YXRlID0+IHtcbiAgICAgIHJldHVybiBzdGF0ZS5jb3VudHJpZXMubWFwKGl0ZW0gPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHZhbHVlOiBpdGVtLmNvdW50cnlDb2RlLFxuICAgICAgICAgIHRleHQ6IGl0ZW0ubmFtZVxuICAgICAgICB9O1xuICAgICAgfSk7XG4gICAgfSxcbiAgICBjaGlsZENvbXBhbmllczogc3RhdGUgPT4ge1xuXG4gICAgICB2YXIgY2hpbGRyZW4gPSBzdGF0ZS51c2VyLmluZm8ucm9sZSA9PT0gJ3NpdGUtYWRtaW4nXG4gICAgICAgICAgICAgICAgICA/IHN0YXRlLmNvbXBhbmllcy5maWx0ZXIoQm9vbGVhbikgLy9jbGVhciBudWxsIHZhbHVlc1xuICAgICAgICAgICAgICAgICAgOiBzdGF0ZS5jb21wYW5pZXMuZmlsdGVyKGNvbXBhbnkgPT4geyByZXR1cm4gY29tcGFueS5wYXJlbnQgPT09IHN0YXRlLnVzZXIuY29tcGFueS5pZCB9KTtcblxuICAgICAgcmV0dXJuIGNoaWxkcmVuO1xuICAgIH0sXG4gICAgY2hpbGRDb21wYW5pZXNPcHRpb25zOiBzdGF0ZSA9PiB7XG4gICAgICB2YXIgZmlsdGVyZWRDaGlsZHJlbiA9IHN0YXRlLnVzZXIuaW5mby5yb2xlID09PSAnc2l0ZS1hZG1pbidcbiAgICAgICAgICAgICAgICAgID8gc3RhdGUuY29tcGFuaWVzLmZpbHRlcihCb29sZWFuKSAvL2NsZWFyIG51bGwgdmFsdWVzXG4gICAgICAgICAgICAgICAgICA6IHN0YXRlLmNvbXBhbmllcy5maWx0ZXIoY29tcGFueSA9PiB7IHJldHVybiBjb21wYW55LnBhcmVudCA9PT0gc3RhdGUudXNlci5jb21wYW55LmlkIH0pO1xuXG4gICAgICByZXR1cm4gZmlsdGVyZWRDaGlsZHJlbi5tYXAgKGl0ZW0gPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHZhbHVlOiBpdGVtLmlkLFxuICAgICAgICAgIHRleHQ6IGl0ZW0ubmFtZVxuICAgICAgICB9O1xuICAgICAgfSk7XG5cbiAgICB9XG4gIH1cbn0pO1xuXG5kYXRhU2VydmljZS5zZXRWdWV4U3RvcmUoc3RvcmUpO1xuXG5leHBvcnQgZGVmYXVsdCBzdG9yZVxuIl19"}