@cartanova/qgrid-cli 2.10.5 → 2.10.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundle/dist/application/monit/monit.frame.js +1 -1
- package/bundle/dist/application/qgrid/expired-token-reminder.js +1 -1
- package/bundle/dist/application/qgrid/oauth.js +1 -1
- package/bundle/dist/application/qgrid/qgrid-image-generation.js +7 -11
- package/bundle/dist/application/qgrid/qgrid-response-format.js +4 -4
- package/bundle/dist/application/qgrid/qgrid-run-lifecycle.js +24 -7
- package/bundle/dist/application/qgrid/qgrid.dispatcher.js +8 -3
- package/bundle/dist/application/qgrid/qgrid.frame.js +24 -10
- package/bundle/dist/application/qgrid/token-death.js +1 -1
- package/bundle/dist/application/qgrid/token-window-keepalive.js +1 -1
- package/bundle/dist/application/qgrid/tool-emulation.js +1 -1
- package/bundle/dist/application/request-log/request-log.model.js +2 -2
- package/bundle/dist/i18n/sd.generated.js +3 -3
- package/bundle/dist/sonamu.config.js +2 -2
- package/bundle/dist/utils/providers/anthropic/anthropic-dispatcher.js +1 -1
- package/bundle/dist/utils/providers/anthropic/anthropic-thinking.js +1 -1
- package/bundle/dist/utils/providers/openai/openai-backend-protocol.js +13 -2
- package/bundle/dist/utils/providers/openai/openai-direct-client.js +5 -4
- package/bundle/dist/utils/providers/openai/openai-dispatcher.js +111 -57
- package/bundle/dist/utils/providers/openai/openai-image-generation.js +25 -17
- package/bundle/dist/utils/providers/openai/openai-refresh.js +1 -1
- package/bundle/src/application/qgrid/qgrid-image-generation.test.ts +19 -8
- package/bundle/src/application/qgrid/qgrid-image-generation.ts +17 -24
- package/bundle/src/application/qgrid/qgrid-response-format.test.ts +4 -2
- package/bundle/src/application/qgrid/qgrid-response-format.ts +7 -10
- package/bundle/src/application/qgrid/qgrid-run-lifecycle.test.ts +87 -9
- package/bundle/src/application/qgrid/qgrid-run-lifecycle.ts +45 -5
- package/bundle/src/application/qgrid/qgrid.dispatcher.test.ts +136 -2
- package/bundle/src/application/qgrid/qgrid.dispatcher.ts +11 -1
- package/bundle/src/application/qgrid/qgrid.frame.test.ts +73 -0
- package/bundle/src/application/qgrid/qgrid.frame.ts +39 -4
- package/bundle/src/application/request-log/request-log.entity.json +2 -2
- package/bundle/src/application/sonamu.generated.http +2 -2
- package/bundle/src/i18n/sd.generated.ts +2 -2
- package/bundle/src/utils/providers/openai/openai-backend-protocol.test.ts +23 -1
- package/bundle/src/utils/providers/openai/openai-backend-protocol.ts +24 -2
- package/bundle/src/utils/providers/openai/openai-direct-client.test.ts +15 -0
- package/bundle/src/utils/providers/openai/openai-direct-client.ts +14 -4
- package/bundle/src/utils/providers/openai/openai-dispatcher.test.ts +223 -32
- package/bundle/src/utils/providers/openai/openai-dispatcher.ts +174 -72
- package/bundle/src/utils/providers/openai/openai-image-generation.test.ts +89 -0
- package/bundle/src/utils/providers/openai/openai-image-generation.ts +26 -15
- package/bundle/web-dist/client/assets/cost-DH2jZbrw.js +1 -0
- package/bundle/web-dist/client/assets/{index-Dxw7DiXF.js → index-D9ryIyL-.js} +4 -4
- package/bundle/web-dist/client/assets/logs-CLf2VNfk.js +1 -0
- package/bundle/web-dist/client/assets/{monit-E8eGW1Sj.js → monit-DojxOLj6.js} +1 -1
- package/bundle/web-dist/client/assets/{routes-7spLfIGZ.js → routes-DXJhNvbI.js} +2 -2
- package/bundle/web-dist/client/assets/{services.generated-jnPHYMER.js → services.generated-DqFYgWsY.js} +1 -1
- package/bundle/web-dist/client/assets/{settings-BdosZFNC.js → settings-bopyz9pa.js} +1 -1
- package/bundle/web-dist/client/assets/{show-b2PFNI3D.js → show-DbLD3MzB.js} +1 -1
- package/bundle/web-dist/client/assets/{tokens-CBdHb2_U.js → tokens-2-AIi9sZ.js} +1 -1
- package/bundle/web-dist/client/assets/{use-oauth-login-flow-Cyn3YPqW.js → use-oauth-login-flow-CnqTWs_H.js} +1 -1
- package/bundle/web-dist/client/assets/{use-update-token-mutation-DQCwCYfR.js → use-update-token-mutation-Cxb9K0fM.js} +1 -1
- package/bundle/web-dist/client/index.html +2 -2
- package/bundle/web-dist/server/assets/{cost-59jBdx-I.js → cost-eEHeTRT5.js} +4 -5
- package/bundle/web-dist/server/assets/{lazyRouteComponent-CUR-kWzI.js → lazyRouteComponent-Bi0fYGLs.js} +2 -2
- package/bundle/web-dist/server/assets/{logs-CaaWO9-Z.js → logs-CIVFxfoi.js} +10 -9
- package/bundle/web-dist/server/assets/{monit-CBil92fJ.js → monit-DBXezg7R.js} +4 -4
- package/bundle/web-dist/server/assets/{plus-Bvdj8Pwx.js → plus-BH-t4cm_.js} +1 -1
- package/bundle/web-dist/server/assets/{react-dom-CyuShs9K.js → react-dom-CZ2eynd8.js} +1 -1
- package/bundle/web-dist/server/assets/{refresh-cw-3QAiSWBd.js → refresh-cw-CosAdcz0.js} +1 -1
- package/bundle/web-dist/server/assets/{routes-DtVf9yqo.js → routes-COWYIvA-.js} +6 -7
- package/bundle/web-dist/server/assets/{services.generated-FPwsG9p3.js → services.generated-607iwhMI.js} +2 -2
- package/bundle/web-dist/server/assets/{settings-DeHNwoMv.js → settings-C_6dpK5p.js} +3 -3
- package/bundle/web-dist/server/assets/{show-8NNdRxhM.js → show-DY396-LD.js} +8 -20
- package/bundle/web-dist/server/assets/{tokens-odgS2-9q.js → tokens-COvV7qUP.js} +4 -4
- package/bundle/web-dist/server/assets/{use-oauth-login-flow-DTQKdYBO.js → use-oauth-login-flow-VYCYf3uv.js} +1 -1
- package/bundle/web-dist/server/assets/{use-update-token-mutation-xvXbPrCI.js → use-update-token-mutation-D8XYV5of.js} +1 -1
- package/bundle/web-dist/server/entry-server.generated.js +10 -10
- package/package.json +1 -1
- package/skills/qgrid/SKILL.md +9 -8
- package/skills/qgrid/references/ai-sdk-provider-contract.md +25 -16
- package/skills/qgrid/references/decision-rationale.md +8 -8
- package/skills/qgrid/references/openai-codex-runtime.md +19 -11
- package/skills/qgrid/references/request-log-run-lifecycle.md +4 -2
- package/skills/qgrid/references/sonamu-api-web-flow.md +2 -2
- package/skills/qgrid/references/verification-and-debugging.md +23 -9
- package/bundle/web-dist/client/assets/cost-CY2BJEPC.js +0 -1
- package/bundle/web-dist/client/assets/logs-3n_U4qnI.js +0 -1
|
@@ -177,8 +177,8 @@ const entityLabels = {
|
|
|
177
177
|
"entity.RequestLog.ttft_ms": "first gen TTFT(ms)",
|
|
178
178
|
"entity.RequestLog.cost_usd": "API 비용",
|
|
179
179
|
"entity.RequestLog.cost_source": "비용 출처(provider/pricing_table/mixed)",
|
|
180
|
-
"entity.RequestLog.image_cost_usd": "이미지 생성
|
|
181
|
-
"entity.RequestLog.image_cost_method": "이미지 비용
|
|
180
|
+
"entity.RequestLog.image_cost_usd": "이미지 생성 비용",
|
|
181
|
+
"entity.RequestLog.image_cost_method": "이미지 비용 계산 방식",
|
|
182
182
|
"entity.RequestLog.effort": "effort level",
|
|
183
183
|
"entity.RequestLog.history": "inject_items 히스토리",
|
|
184
184
|
"entity.RequestLog.tools": "요청에 장착된 tool 정의 목록",
|
|
@@ -390,4 +390,4 @@ SD.enumLabels = (enumName) => {
|
|
|
390
390
|
//#endregion
|
|
391
391
|
export { SD, defineLocale, localizedColumn };
|
|
392
392
|
|
|
393
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2QuZ2VuZXJhdGVkLmpzIiwibmFtZXMiOlsia28iLCJlbiJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9pMThuL3NkLmdlbmVyYXRlZC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBnZW5lcmF0ZWRcbiAqIOyngeygkSDsiJjsoJXtlZjsp4Ag66eI7IS47JqULlxuICovXG5cbmltcG9ydCB7IFNvbmFtdSB9IGZyb20gXCJzb25hbXVcIjtcblxuY29uc3QgREVGQVVMVF9MT0NBTEUgPSBcImtvXCIgYXMgY29uc3Q7XG5jb25zdCBTVVBQT1JURURfTE9DQUxFUyA9IFtcImtvXCIsIFwiZW5cIl0gYXMgY29uc3Q7XG5mdW5jdGlvbiBnZXRDdXJyZW50TG9jYWxlKCk6ICh0eXBlb2YgU1VQUE9SVEVEX0xPQ0FMRVMpW251bWJlcl0ge1xuICB0cnkge1xuICAgIGNvbnN0IGN0eCA9IFNvbmFtdS5nZXRDb250ZXh0KCk7XG4gICAgcmV0dXJuIChjdHgubG9jYWxlIGFzICh0eXBlb2YgU1VQUE9SVEVEX0xPQ0FMRVMpW251bWJlcl0pID8/IERFRkFVTFRfTE9DQUxFO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gREVGQVVMVF9MT0NBTEU7XG4gIH1cbn1cblxuaW1wb3J0IGVuIGZyb20gXCIuL2VuXCI7XG5pbXBvcnQga28gZnJvbSBcIi4va29cIjtcblxuLy8gcmVhY3QtY29tcG9uZW50cyBpMThuIGtleXNcbmNvbnN0IHJjS2V5c0tvID0ge1xuICAvLyBBc3luY1NlbGVjdCBDb21wb25lbnRcbiAgXCJyYy5hc3luY1NlbGVjdC5sb2FkaW5nXCI6IFwi66Gc65SpIOykkS4uLlwiLFxuICBcInJjLmFzeW5jU2VsZWN0Lm5vT3B0aW9uc1wiOiBcIuyYteyFmOydtCDsl4bsirXri4jri6RcIixcbiAgXCJyYy5hc3luY1NlbGVjdC5ub1Jlc3VsdHNcIjogXCLqsoDsg4kg6rKw6rO86rCAIOyXhuyKteuLiOuLpFwiLFxuICBcInJjLmFzeW5jU2VsZWN0LnNlbGVjdFBsYWNlaG9sZGVyXCI6IFwi7ISg7YOd7ZWY7IS47JqULi4uXCIsXG5cbiAgLy8gQ29tYm9ib3ggQ29tcG9uZW50XG4gIFwicmMuY29tYm9ib3gubm9SZXN1bHRzXCI6IFwi6rKA7IOJIOqysOqzvOqwgCDsl4bsirXri4jri6RcIixcbiAgXCJyYy5jb21ib2JveC5zZWxlY3RQbGFjZWhvbGRlclwiOiBcIuyEoO2Dne2VmOyEuOyalC4uLlwiLFxuXG4gIC8vIERhdGVQaWNrZXIgQ29tcG9uZW50XG4gIFwicmMuZGF0ZVBpY2tlci5waWNrRGF0ZVwiOiBcIuuCoOynnCDshKDtg51cIixcbiAgXCJyYy5kYXRlUGlja2VyLnBsYWNlaG9sZGVyXCI6IFwi64Kg7KecIOyEoO2DnVwiLFxuICBcInJjLmRhdGVQaWNrZXIuc2VsZWN0RGF0ZVwiOiBcIuuCoOynnCDshKDtg51cIixcblxuICAvLyBEYXRlU2VsZWN0b3JNdWx0aXBsZSBDb21wb25lbnRcbiAgXCJyYy5kYXRlU2VsZWN0b3JNdWx0aXBsZS5hZGREYXRlXCI6IFwi64Kg7KecIOy2lOqwgFwiLFxuICBcInJjLmRhdGVTZWxlY3Rvck11bHRpcGxlLmRhdGVSYW5nZVwiOiBcIuq4sOqwhFwiLFxuICBcInJjLmRhdGVTZWxlY3Rvck11bHRpcGxlLnBsYWNlaG9sZGVyXCI6IFwi64Kg7KecIOyEoO2DnVwiLFxuICBcInJjLmRhdGVTZWxlY3Rvck11bHRpcGxlLnNpbmdsZURhdGVcIjogXCLri6jsnbxcIixcblxuICAvLyBGaWxlSW5wdXQgQ29tcG9uZW50XG4gIFwicmMuZmlsZUlucHV0LmJyb3dzZUZpbGVzXCI6IFwi7YyM7J28IOywvuq4sFwiLFxuICBcInJjLmZpbGVJbnB1dC5kcm9wWm9uZVwiOiBcIu2MjOydvOydhCDrk5zrnpjqt7jtlZjqsbDrgpgg7YG066at7ZWY7JesIOyXheuhnOuTnFwiLFxuICBcInJjLmZpbGVJbnB1dC5maWxlUGxhY2Vob2xkZXJcIjogXCLtjIzsnbxcIixcbiAgXCJyYy5maWxlSW5wdXQuaW1hZ2VQbGFjZWhvbGRlclwiOiBcIuydtOuvuOyngFwiLFxuICBcInJjLmZpbGVJbnB1dC5tYXhGaWxlc0V4Y2VlZGVkXCI6IChtYXhGaWxlczogbnVtYmVyKSA9PlxuICAgIGDstZzrjIAgJHttYXhGaWxlc33qsJwg7YyM7J2866eMIOyXheuhnOuTnCDqsIDriqXtlanri4jri6RgLFxuICBcInJjLmZpbGVJbnB1dC5wZW5kaW5nXCI6IFwi64yA6riwIOykkVwiLFxuICBcInJjLmZpbGVJbnB1dC5yZW1vdmVcIjogXCLsoJzqsbBcIixcbiAgXCJyYy5maWxlSW5wdXQudXBsb2FkRmFpbGVkXCI6IFwi7JeF66Gc65OcIOyLpO2MqFwiLFxuICBcInJjLmZpbGVJbnB1dC51cGxvYWRpbmdcIjogXCLsl4XroZzrk5wg7KSRLi4uXCIsXG5cbiAgLy8gTW9udGhQaWNrZXJNdWx0aXBsZSBDb21wb25lbnRcbiAgXCJyYy5tb250aFBpY2tlck11bHRpcGxlLmFkZE1vbnRoXCI6IFwi7JuUIOy2lOqwgFwiLFxuICBcInJjLm1vbnRoUGlja2VyTXVsdGlwbGUuZGF0ZVJhbmdlXCI6IFwi6riw6rCEXCIsXG4gIFwicmMubW9udGhQaWNrZXJNdWx0aXBsZS5lbmREYXRlXCI6IFwi7KKF66OM7J28XCIsXG4gIFwicmMubW9udGhQaWNrZXJNdWx0aXBsZS5wbGFjZWhvbGRlclwiOiBcIuyblCDshKDtg51cIixcbiAgXCJyYy5tb250aFBpY2tlck11bHRpcGxlLnNpbmdsZURhdGVcIjogXCLri6jsnbxcIixcbiAgXCJyYy5tb250aFBpY2tlck11bHRpcGxlLnN0YXJ0RGF0ZVwiOiBcIuyLnOyekeydvFwiLFxuXG4gIC8vIE11bHRpU2VsZWN0IENvbXBvbmVudFxuICBcInJjLm11bHRpU2VsZWN0LmNsZWFyXCI6IFwi7KCE7LK0IO2VtOygnFwiLFxuICBcInJjLm11bHRpU2VsZWN0LmNsb3NlXCI6IFwi64ur6riwXCIsXG4gIFwicmMubXVsdGlTZWxlY3QubW9yZUl0ZW1zXCI6IChjb3VudDogbnVtYmVyKSA9PiBgKyR7Y291bnR96rCcIOuNlOuztOq4sGAsXG4gIFwicmMubXVsdGlTZWxlY3Qubm9PcHRpb25zXCI6IFwi7Ji17IWY7J20IOyXhuyKteuLiOuLpFwiLFxuICBcInJjLm11bHRpU2VsZWN0Lm5vT3B0aW9uc1NlbGVjdGVkXCI6IFwi7ISg7YOd65CcIOyYteyFmOydtCDsl4bsirXri4jri6RcIixcbiAgXCJyYy5tdWx0aVNlbGVjdC5ub1Jlc3VsdHNcIjogXCLqsoDsg4kg6rKw6rO86rCAIOyXhuyKteuLiOuLpFwiLFxuICBcInJjLm11bHRpU2VsZWN0Lm9wdGlvbnNDb3VudFwiOiAoY291bnQ6IG51bWJlcikgPT4gYCR7Y291bnR96rCcIOyYteyFmGAsXG4gIFwicmMubXVsdGlTZWxlY3Quc2VsZWN0QWxsXCI6IFwi7KCE7LK0IOyEoO2DnVwiLFxuICBcInJjLm11bHRpU2VsZWN0LnNlbGVjdFBsYWNlaG9sZGVyXCI6IFwi7ISg7YOd7ZWY7IS47JqULi4uXCIsXG5cbiAgLy8gUGFnaW5hdGlvbiBDb21wb25lbnRcbiAgXCJyYy5wYWdpbmF0aW9uLm5leHRcIjogXCLri6TsnYxcIixcbiAgXCJyYy5wYWdpbmF0aW9uLnByZXZpb3VzXCI6IFwi7J207KCEXCIsXG4gIFwicmMucGFnaW5hdGlvbi5zaG93aW5nXCI6IChzdGFydDogbnVtYmVyLCBlbmQ6IG51bWJlciwgdG90YWw6IG51bWJlcikgPT5cbiAgICBgJHt0b3RhbH3qsJwg7KSRICR7c3RhcnR9LSR7ZW5kfWAsXG5cbiAgLy8gQ2FsZW5kYXIgQ29tcG9uZW50XG4gIFwicmMuY2FsZW5kYXIubW9udGguMFwiOiBcIjHsm5RcIixcbiAgXCJyYy5jYWxlbmRhci5tb250aC4xXCI6IFwiMuyblFwiLFxuICBcInJjLmNhbGVuZGFyLm1vbnRoLjJcIjogXCIz7JuUXCIsXG4gIFwicmMuY2FsZW5kYXIubW9udGguM1wiOiBcIjTsm5RcIixcbiAgXCJyYy5jYWxlbmRhci5tb250aC40XCI6IFwiNeyblFwiLFxuICBcInJjLmNhbGVuZGFyLm1vbnRoLjVcIjogXCI27JuUXCIsXG4gIFwicmMuY2FsZW5kYXIubW9udGguNlwiOiBcIjfsm5RcIixcbiAgXCJyYy5jYWxlbmRhci5tb250aC43XCI6IFwiOOyblFwiLFxuICBcInJjLmNhbGVuZGFyLm1vbnRoLjhcIjogXCI57JuUXCIsXG4gIFwicmMuY2FsZW5kYXIubW9udGguOVwiOiBcIjEw7JuUXCIsXG4gIFwicmMuY2FsZW5kYXIubW9udGguMTBcIjogXCIxMeyblFwiLFxuICBcInJjLmNhbGVuZGFyLm1vbnRoLjExXCI6IFwiMTLsm5RcIixcblxuICAvLyBTb25hbXUgRmlsdGVyIENvbXBvbmVudFxuICBcInJjLnNvbmFtdUZpbHRlci50aXRsZVwiOiBcIuyGjOuCmOustCDtlYTthLBcIixcbiAgXCJyYy5zb25hbXVGaWx0ZXIuYXBwbHlcIjogXCLsoIHsmqlcIixcbiAgXCJyYy5zb25hbXVGaWx0ZXIucmVzZXRcIjogXCLstIjquLDtmZRcIixcbiAgXCJyYy5zb25hbXVGaWx0ZXIuYWRkUnVsZVwiOiBcIuq3nOy5mSDstpTqsIBcIixcbiAgXCJyYy5zb25hbXVGaWx0ZXIubm9SdWxlc1lldFwiOiAn7JWE7KeBIOq3nOy5meydtCDsl4bsirXri4jri6QuIFwiKyDqt5zsuZkg7LaU6rCAXCLrpbwg7YG066at7ZWY7JesIOyLnOyeke2VmOyEuOyalC4nLFxuICBcInJjLnNvbmFtdUZpbHRlci5zZWxlY3RGaWVsZFwiOiBcIu2VhOuTnCDshKDtg51cIixcbiAgXCJyYy5zb25hbXVGaWx0ZXIuc2VsZWN0T3BlcmF0b3JcIjogXCLsl7DsgrDsnpAg7ISg7YOdXCIsXG4gIFwicmMuc29uYW11RmlsdGVyLnNlbGVjdE9wZXJhdG9yRmlyc3RcIjogXCLrqLzsoIAg7Jew7IKw7J6Q66W8IOyEoO2Dne2VmOyEuOyalFwiLFxuICBcInJjLnNvbmFtdUZpbHRlci5lbnRlclZhbHVlXCI6IFwi6rCSIOyeheugpVwiLFxuICBcInJjLnNvbmFtdUZpbHRlci5lbnRlck51bWJlclwiOiBcIuyIq+yekCDsnoXroKVcIixcbiAgXCJyYy5zb25hbXVGaWx0ZXIubm90U3VwcG9ydGVkXCI6IFwi7KeA7JuQ7ZWY7KeAIOyViuydjFwiLFxuICBcInJjLnNvbmFtdUZpbHRlci5zdGFydERhdGVcIjogXCLsi5zsnpHsnbxcIixcbiAgXCJyYy5zb25hbXVGaWx0ZXIuZW5kRGF0ZVwiOiBcIuyiheujjOydvFwiLFxuICBcInJjLnNvbmFtdUZpbHRlci5hcHBsaWVkRmlsdGVyc1wiOiBcIvCfjLIg7KCB7Jqp65CcIOyGjOuCmOustCDtlYTthLBcIixcblxuICAvLyBDb21tb25cbiAgXCJyYy5jb21tb24uY2FuY2VsXCI6IFwi7Leo7IaMXCIsXG4gIFwicmMuY29tbW9uLnNhdmVcIjogXCLsoIDsnqVcIixcbn07XG5cbmNvbnN0IHJjS2V5c0VuID0ge1xuICAvLyBBc3luY1NlbGVjdCBDb21wb25lbnRcbiAgXCJyYy5hc3luY1NlbGVjdC5sb2FkaW5nXCI6IFwiTG9hZGluZy4uLlwiLFxuICBcInJjLmFzeW5jU2VsZWN0Lm5vT3B0aW9uc1wiOiBcIk5vIG9wdGlvbnNcIixcbiAgXCJyYy5hc3luY1NlbGVjdC5ub1Jlc3VsdHNcIjogXCJObyByZXN1bHRzXCIsXG4gIFwicmMuYXN5bmNTZWxlY3Quc2VsZWN0UGxhY2Vob2xkZXJcIjogXCJTZWxlY3QuLi5cIixcblxuICAvLyBDb21ib2JveCBDb21wb25lbnRcbiAgXCJyYy5jb21ib2JveC5ub1Jlc3VsdHNcIjogXCJObyByZXN1bHRzXCIsXG4gIFwicmMuY29tYm9ib3guc2VsZWN0UGxhY2Vob2xkZXJcIjogXCJTZWxlY3QuLi5cIixcblxuICAvLyBEYXRlUGlja2VyIENvbXBvbmVudFxuICBcInJjLmRhdGVQaWNrZXIucGlja0RhdGVcIjogXCJQaWNrIGRhdGVcIixcbiAgXCJyYy5kYXRlUGlja2VyLnBsYWNlaG9sZGVyXCI6IFwiUGljayBkYXRlXCIsXG4gIFwicmMuZGF0ZVBpY2tlci5zZWxlY3REYXRlXCI6IFwiU2VsZWN0IGRhdGVcIixcblxuICAvLyBEYXRlU2VsZWN0b3JNdWx0aXBsZSBDb21wb25lbnRcbiAgXCJyYy5kYXRlU2VsZWN0b3JNdWx0aXBsZS5hZGREYXRlXCI6IFwiQWRkIGRhdGVcIixcbiAgXCJyYy5kYXRlU2VsZWN0b3JNdWx0aXBsZS5kYXRlUmFuZ2VcIjogXCJSYW5nZVwiLFxuICBcInJjLmRhdGVTZWxlY3Rvck11bHRpcGxlLnBsYWNlaG9sZGVyXCI6IFwiUGljayBkYXRlXCIsXG4gIFwicmMuZGF0ZVNlbGVjdG9yTXVsdGlwbGUuc2luZ2xlRGF0ZVwiOiBcIlNpbmdsZVwiLFxuXG4gIC8vIEZpbGVJbnB1dCBDb21wb25lbnRcbiAgXCJyYy5maWxlSW5wdXQuYnJvd3NlRmlsZXNcIjogXCJCcm93c2UgZmlsZXNcIixcbiAgXCJyYy5maWxlSW5wdXQuZHJvcFpvbmVcIjogXCJEcmFnIGZpbGVzIGhlcmUgb3IgY2xpY2sgdG8gdXBsb2FkXCIsXG4gIFwicmMuZmlsZUlucHV0LmZpbGVQbGFjZWhvbGRlclwiOiBcIkZpbGVcIixcbiAgXCJyYy5maWxlSW5wdXQuaW1hZ2VQbGFjZWhvbGRlclwiOiBcIkltYWdlXCIsXG4gIFwicmMuZmlsZUlucHV0Lm1heEZpbGVzRXhjZWVkZWRcIjogKG1heEZpbGVzOiBudW1iZXIpID0+IGBNYXhpbXVtICR7bWF4RmlsZXN9IGZpbGVzIGFsbG93ZWRgLFxuICBcInJjLmZpbGVJbnB1dC5wZW5kaW5nXCI6IFwiUGVuZGluZ1wiLFxuICBcInJjLmZpbGVJbnB1dC5yZW1vdmVcIjogXCJSZW1vdmVcIixcbiAgXCJyYy5maWxlSW5wdXQudXBsb2FkRmFpbGVkXCI6IFwiVXBsb2FkIGZhaWxlZFwiLFxuICBcInJjLmZpbGVJbnB1dC51cGxvYWRpbmdcIjogXCJVcGxvYWRpbmcuLi5cIixcblxuICAvLyBNb250aFBpY2tlck11bHRpcGxlIENvbXBvbmVudFxuICBcInJjLm1vbnRoUGlja2VyTXVsdGlwbGUuYWRkTW9udGhcIjogXCJBZGQgbW9udGhcIixcbiAgXCJyYy5tb250aFBpY2tlck11bHRpcGxlLmRhdGVSYW5nZVwiOiBcIlJhbmdlXCIsXG4gIFwicmMubW9udGhQaWNrZXJNdWx0aXBsZS5lbmREYXRlXCI6IFwiRW5kIGRhdGVcIixcbiAgXCJyYy5tb250aFBpY2tlck11bHRpcGxlLnBsYWNlaG9sZGVyXCI6IFwiUGljayBtb250aFwiLFxuICBcInJjLm1vbnRoUGlja2VyTXVsdGlwbGUuc2luZ2xlRGF0ZVwiOiBcIlNpbmdsZVwiLFxuICBcInJjLm1vbnRoUGlja2VyTXVsdGlwbGUuc3RhcnREYXRlXCI6IFwiU3RhcnQgZGF0ZVwiLFxuXG4gIC8vIE11bHRpU2VsZWN0IENvbXBvbmVudFxuICBcInJjLm11bHRpU2VsZWN0LmNsZWFyXCI6IFwiQ2xlYXIgYWxsXCIsXG4gIFwicmMubXVsdGlTZWxlY3QuY2xvc2VcIjogXCJDbG9zZVwiLFxuICBcInJjLm11bHRpU2VsZWN0Lm1vcmVJdGVtc1wiOiAoY291bnQ6IG51bWJlcikgPT4gYCske2NvdW50fSBtb3JlYCxcbiAgXCJyYy5tdWx0aVNlbGVjdC5ub09wdGlvbnNcIjogXCJObyBvcHRpb25zXCIsXG4gIFwicmMubXVsdGlTZWxlY3Qubm9PcHRpb25zU2VsZWN0ZWRcIjogXCJObyBvcHRpb25zIHNlbGVjdGVkXCIsXG4gIFwicmMubXVsdGlTZWxlY3Qubm9SZXN1bHRzXCI6IFwiTm8gcmVzdWx0c1wiLFxuICBcInJjLm11bHRpU2VsZWN0Lm9wdGlvbnNDb3VudFwiOiAoY291bnQ6IG51bWJlcikgPT4gYCR7Y291bnR9IG9wdGlvbnNgLFxuICBcInJjLm11bHRpU2VsZWN0LnNlbGVjdEFsbFwiOiBcIlNlbGVjdCBhbGxcIixcbiAgXCJyYy5tdWx0aVNlbGVjdC5zZWxlY3RQbGFjZWhvbGRlclwiOiBcIlNlbGVjdC4uLlwiLFxuXG4gIC8vIFBhZ2luYXRpb24gQ29tcG9uZW50XG4gIFwicmMucGFnaW5hdGlvbi5uZXh0XCI6IFwiTmV4dFwiLFxuICBcInJjLnBhZ2luYXRpb24ucHJldmlvdXNcIjogXCJQcmV2aW91c1wiLFxuICBcInJjLnBhZ2luYXRpb24uc2hvd2luZ1wiOiAoc3RhcnQ6IG51bWJlciwgZW5kOiBudW1iZXIsIHRvdGFsOiBudW1iZXIpID0+XG4gICAgYFNob3dpbmcgJHtzdGFydH0tJHtlbmR9IG9mICR7dG90YWx9YCxcblxuICAvLyBDYWxlbmRhciBDb21wb25lbnRcbiAgXCJyYy5jYWxlbmRhci5tb250aC4wXCI6IFwiSmFudWFyeVwiLFxuICBcInJjLmNhbGVuZGFyLm1vbnRoLjFcIjogXCJGZWJydWFyeVwiLFxuICBcInJjLmNhbGVuZGFyLm1vbnRoLjJcIjogXCJNYXJjaFwiLFxuICBcInJjLmNhbGVuZGFyLm1vbnRoLjNcIjogXCJBcHJpbFwiLFxuICBcInJjLmNhbGVuZGFyLm1vbnRoLjRcIjogXCJNYXlcIixcbiAgXCJyYy5jYWxlbmRhci5tb250aC41XCI6IFwiSnVuZVwiLFxuICBcInJjLmNhbGVuZGFyLm1vbnRoLjZcIjogXCJKdWx5XCIsXG4gIFwicmMuY2FsZW5kYXIubW9udGguN1wiOiBcIkF1Z3VzdFwiLFxuICBcInJjLmNhbGVuZGFyLm1vbnRoLjhcIjogXCJTZXB0ZW1iZXJcIixcbiAgXCJyYy5jYWxlbmRhci5tb250aC45XCI6IFwiT2N0b2JlclwiLFxuICBcInJjLmNhbGVuZGFyLm1vbnRoLjEwXCI6IFwiTm92ZW1iZXJcIixcbiAgXCJyYy5jYWxlbmRhci5tb250aC4xMVwiOiBcIkRlY2VtYmVyXCIsXG5cbiAgLy8gU29uYW11IEZpbHRlciBDb21wb25lbnRcbiAgXCJyYy5zb25hbXVGaWx0ZXIudGl0bGVcIjogXCJTb25hbXUgRmlsdGVyXCIsXG4gIFwicmMuc29uYW11RmlsdGVyLmFwcGx5XCI6IFwiQXBwbHlcIixcbiAgXCJyYy5zb25hbXVGaWx0ZXIucmVzZXRcIjogXCJSZXNldFwiLFxuICBcInJjLnNvbmFtdUZpbHRlci5hZGRSdWxlXCI6IFwiQWRkIFJ1bGVcIixcbiAgXCJyYy5zb25hbXVGaWx0ZXIubm9SdWxlc1lldFwiOiAnTm8gcnVsZXMgeWV0LiBDbGljayBcIisgQWRkIFJ1bGVcIiB0byBzdGFydC4nLFxuICBcInJjLnNvbmFtdUZpbHRlci5zZWxlY3RGaWVsZFwiOiBcIlNlbGVjdCBmaWVsZFwiLFxuICBcInJjLnNvbmFtdUZpbHRlci5zZWxlY3RPcGVyYXRvclwiOiBcIk9wZXJhdG9yXCIsXG4gIFwicmMuc29uYW11RmlsdGVyLnNlbGVjdE9wZXJhdG9yRmlyc3RcIjogXCJTZWxlY3Qgb3BlcmF0b3IgZmlyc3RcIixcbiAgXCJyYy5zb25hbXVGaWx0ZXIuZW50ZXJWYWx1ZVwiOiBcIkVudGVyIHZhbHVlXCIsXG4gIFwicmMuc29uYW11RmlsdGVyLmVudGVyTnVtYmVyXCI6IFwiRW50ZXIgbnVtYmVyXCIsXG4gIFwicmMuc29uYW11RmlsdGVyLm5vdFN1cHBvcnRlZFwiOiBcIk5vdCBzdXBwb3J0ZWRcIixcbiAgXCJyYy5zb25hbXVGaWx0ZXIuc3RhcnREYXRlXCI6IFwiU3RhcnQgZGF0ZVwiLFxuICBcInJjLnNvbmFtdUZpbHRlci5lbmREYXRlXCI6IFwiRW5kIGRhdGVcIixcbiAgXCJyYy5zb25hbXVGaWx0ZXIuYXBwbGllZEZpbHRlcnNcIjogXCLwn4yyIEFwcGxpZWQgU29uYW11RmlsdGVyc1wiLFxuXG4gIC8vIENvbW1vblxuICBcInJjLmNvbW1vbi5jYW5jZWxcIjogXCJDYW5jZWxcIixcbiAgXCJyYy5jb21tb24uc2F2ZVwiOiBcIlNhdmVcIixcbn0gYXMgY29uc3Q7XG5cbi8vIGVudGl0eS5qc29u7JeQ7IScIOy2lOy2nO2VnCBlbnRpdHkgbGFiZWxzIChkZWZhdWx0TG9jYWxlIOyghOyaqSlcbmNvbnN0IGVudGl0eUxhYmVscyA9IHtcbiAgXCJlbnRpdHkuUmVxdWVzdExvZ1wiOiBcIlJlcXVlc3RMb2dcIixcbiAgXCJlbnRpdHkuUmVxdWVzdExvZy5pZFwiOiBcIklEXCIsXG4gIFwiZW50aXR5LlJlcXVlc3RMb2cuY3JlYXRlZF9hdFwiOiBcIuuTseuhneydvOyLnFwiLFxuICBcImVudGl0eS5SZXF1ZXN0TG9nLnRva2VuX25hbWVcIjogXCLthqDtgbAg7J2066aEXCIsXG4gIFwiZW50aXR5LlJlcXVlc3RMb2cucHJvamVjdF9uYW1lXCI6IFwi7ZSE66Gc7KCd7Yq4IOydtOumhFwiLFxuICBcImVudGl0eS5SZXF1ZXN0TG9nLm1vZGVsX25hbWVcIjogXCLrqqjrjbgg7J2066aEXCIsXG4gIFwiZW50aXR5LlJlcXVlc3RMb2cucmVxdWVzdGVkX21vZGVsX25hbWVcIjogXCLsmpTssq0g66qo6424IOydtOumhCAoZmFsbGJhY2sg7KCEKVwiLFxuICBcImVudGl0eS5SZXF1ZXN0TG9nLmZhbGxiYWNrX2NvdW50XCI6IFwi66qo6424IGZhbGxiYWNrIO2an+yImFwiLFxuICBcImVudGl0eS5SZXF1ZXN0TG9nLnVzZXJfcHJvbXB0XCI6IFwi7IKs7Jqp7J6QIO2UhOuhrO2UhO2KuFwiLFxuICBcImVudGl0eS5SZXF1ZXN0TG9nLnN5c3RlbV9wcm9tcHRcIjogXCLsi5zsiqTthZwg7ZSE66Gs7ZSE7Yq4XCIsXG4gIFwiZW50aXR5LlJlcXVlc3RMb2cucmVzcG9uc2VcIjogXCJsbG0g7J2R64u1IOyghOusuFwiLFxuICBcImVudGl0eS5SZXF1ZXN0TG9nLmlucHV0X3Rva2Vuc1wiOiBcIuyeheugpSDthqDtgbBcIixcbiAgXCJlbnRpdHkuUmVxdWVzdExvZy5vdXRwdXRfdG9rZW5zXCI6IFwi7Lac66ClIO2GoO2BsFwiLFxuICBcImVudGl0eS5SZXF1ZXN0TG9nLmNhY2hlX3JlYWRfdG9rZW5zXCI6IFwi7LqQ7IucIOydveq4sCDthqDtgbBcIixcbiAgXCJlbnRpdHkuUmVxdWVzdExvZy5jYWNoZV9jcmVhdGlvbl90b2tlbnNcIjogXCLsupDsi5wg7IOd7ISxIO2GoO2BsFwiLFxuICBcImVudGl0eS5SZXF1ZXN0TG9nLmNhY2hlX2NyZWF0aW9uXzVtX3Rva2Vuc1wiOiBcIjXrtoQgVFRMIOy6kOyLnCDsg53shLEg7Yag7YGwXCIsXG4gIFwiZW50aXR5LlJlcXVlc3RMb2cuY2FjaGVfY3JlYXRpb25fMWhfdG9rZW5zXCI6IFwiMeyLnOqwhCBUVEwg7LqQ7IucIOyDneyEsSDthqDtgbBcIixcbiAgXCJlbnRpdHkuUmVxdWVzdExvZy5kdXJhdGlvbl9tc1wiOiBcIuydkeuLtSDshozsmpTsi5zqsIQobXMpXCIsXG4gIFwiZW50aXR5LlJlcXVlc3RMb2cudHRmdF9tc1wiOiBcImZpcnN0IGdlbiBUVEZUKG1zKVwiLFxuICBcImVudGl0eS5SZXF1ZXN0TG9nLmNvc3RfdXNkXCI6IFwiQVBJIOu5hOyaqVwiLFxuICBcImVudGl0eS5SZXF1ZXN0TG9nLmNvc3Rfc291cmNlXCI6IFwi67mE7JqpIOy2nOyymChwcm92aWRlci9wcmljaW5nX3RhYmxlL21peGVkKVwiLFxuICBcImVudGl0eS5SZXF1ZXN0TG9nLmltYWdlX2Nvc3RfdXNkXCI6IFwi7J2066+47KeAIOyDneyEsSDstpTsoJUg67mE7JqpXCIsXG4gIFwiZW50aXR5LlJlcXVlc3RMb2cuaW1hZ2VfY29zdF9tZXRob2RcIjogXCLsnbTrr7jsp4Ag67mE7JqpIOy2lOyglSDrsKnsi51cIixcbiAgXCJlbnRpdHkuUmVxdWVzdExvZy5lZmZvcnRcIjogXCJlZmZvcnQgbGV2ZWxcIixcbiAgXCJlbnRpdHkuUmVxdWVzdExvZy5oaXN0b3J5XCI6IFwiaW5qZWN0X2l0ZW1zIO2eiOyKpO2GoOumrFwiLFxuICBcImVudGl0eS5SZXF1ZXN0TG9nLnRvb2xzXCI6IFwi7JqU7LKt7JeQIOyepeywqeuQnCB0b29sIOygleydmCDrqqnroZ1cIixcbiAgXCJlbnRpdHkuUmVxdWVzdExvZy5qc29uX3NjaGVtYVwiOlxuICAgIFwic3RydWN0dXJlZCBvdXRwdXQg7JqU7LKt7J2YIEpTT04gU2NoZW1hIOybkOusuCAoZGV0YWlsIOydmCByZXNwb25zZSDtg4DsnoUg7ZGc7Iuc7JqpKVwiLFxuICBcImVudGl0eS5SZXF1ZXN0TG9nLnN0YXR1c1wiOiBcIuyLpO2WiSDsg4Htg5xcIixcbiAgXCJlbnRpdHkuUmVxdWVzdExvZy5lcnJvcl9tZXNzYWdlXCI6IFwi7JeQ65+sIOuplOyLnOyngFwiLFxuICBcImVudGl0eS5SZXF1ZXN0TG9nLnJlc3BvbnNlX2pzb25fb2tcIjpcbiAgICBcInN0cnVjdHVyZWQoanNvblNjaGVtYSkg7JqU7LKt7J2YIOydkeuLtSBKU09OIO2MjOyLsSDshLHqs7Ug7Jes67aALiDruYRzdHJ1Y3R1cmVkIOyalOyyreydgCBudWxsXCIsXG4gIFwiZW50aXR5LlJlcXVlc3RMb2cudG9vbF9jYWxsX2NvdW50XCI6IFwidG9vbCBjYWxsIO2an+yImFwiLFxuICBcImVudGl0eS5SZXF1ZXN0TG9nLmlzX2ltYWdlX2dlbmVyYXRpb25cIjogXCLsnbTrr7jsp4Ag7IOd7ISxIHR1cm4g7Jes67aAIChxdW90YSDqt4Dsho3smqkpXCIsXG4gIFwiZW50aXR5LlJlcXVlc3RMb2cuaXNfc3RydWN0dXJlZFwiOiBcInN0cnVjdHVyZWQgb3V0cHV0KGpzb25TY2hlbWEpIOyalOyyrSDsl6zrtoAgKOuqqeuhnSDqtazrtoQg7ZGc7Iuc7JqpKVwiLFxuICBcImVudW0uUmVxdWVzdExvZ09yZGVyQnkuaWQtZGVzY1wiOiBcIklE7LWc7Iug7IicXCIsXG4gIFwiZW51bS5SZXF1ZXN0TG9nT3JkZXJCeS5pZC1hc2NcIjogXCJJROyYpOuemOuQnOyInFwiLFxuICBcImVudW0uUmVxdWVzdExvZ09yZGVyQnkuY3JlYXRlZF9hdC1kZXNjXCI6IFwi65Ox66Gd7J287Iuc7LWc7Iug7IicXCIsXG4gIFwiZW51bS5SZXF1ZXN0TG9nT3JkZXJCeS5jcmVhdGVkX2F0LWFzY1wiOiBcIuuTseuhneydvOyLnOyYpOuemOuQnOyInFwiLFxuICBcImVudW0uUmVxdWVzdExvZ09yZGVyQnkudHRmdF9tcy1kZXNjXCI6IFwiVFRGVOq4tOyInFwiLFxuICBcImVudW0uUmVxdWVzdExvZ09yZGVyQnkudHRmdF9tcy1hc2NcIjogXCJUVEZU7Ken7J2A7IicXCIsXG4gIFwiZW51bS5SZXF1ZXN0TG9nT3JkZXJCeS5kdXJhdGlvbl9tcy1kZXNjXCI6IFwi7IaM7JqU7Iuc6rCE6ri07IicXCIsXG4gIFwiZW51bS5SZXF1ZXN0TG9nT3JkZXJCeS5kdXJhdGlvbl9tcy1hc2NcIjogXCLshozsmpTsi5zqsITsp6fsnYDsiJxcIixcbiAgXCJlbnVtLlJlcXVlc3RMb2dPcmRlckJ5LmlucHV0X3Rva2Vucy1kZXNjXCI6IFwi7J6F66Cl7Yag7YGw66eO7J2A7IicXCIsXG4gIFwiZW51bS5SZXF1ZXN0TG9nT3JkZXJCeS5pbnB1dF90b2tlbnMtYXNjXCI6IFwi7J6F66Cl7Yag7YGw7KCB7J2A7IicXCIsXG4gIFwiZW51bS5SZXF1ZXN0TG9nT3JkZXJCeS5vdXRwdXRfdG9rZW5zLWRlc2NcIjogXCLstpzroKXthqDtgbDrp47snYDsiJxcIixcbiAgXCJlbnVtLlJlcXVlc3RMb2dPcmRlckJ5Lm91dHB1dF90b2tlbnMtYXNjXCI6IFwi7Lac66Cl7Yag7YGw7KCB7J2A7IicXCIsXG4gIFwiZW51bS5SZXF1ZXN0TG9nT3JkZXJCeS5jYWNoZV9yZWFkX3Rva2Vucy1kZXNjXCI6IFwi7LqQ7Iuc7J296riw66eO7J2A7IicXCIsXG4gIFwiZW51bS5SZXF1ZXN0TG9nT3JkZXJCeS5jYWNoZV9yZWFkX3Rva2Vucy1hc2NcIjogXCLsupDsi5zsnb3quLDsoIHsnYDsiJxcIixcbiAgXCJlbnVtLlJlcXVlc3RMb2dPcmRlckJ5LmNhY2hlX2NyZWF0aW9uX3Rva2Vucy1kZXNjXCI6IFwi7LqQ7Iuc7IOd7ISx66eO7J2A7IicXCIsXG4gIFwiZW51bS5SZXF1ZXN0TG9nT3JkZXJCeS5jYWNoZV9jcmVhdGlvbl90b2tlbnMtYXNjXCI6IFwi7LqQ7Iuc7IOd7ISx7KCB7J2A7IicXCIsXG4gIFwiZW51bS5SZXF1ZXN0TG9nT3JkZXJCeS5jb3N0X3VzZC1kZXNjXCI6IFwi67mE7Jqp64aS7J2A7IicXCIsXG4gIFwiZW51bS5SZXF1ZXN0TG9nT3JkZXJCeS5jb3N0X3VzZC1hc2NcIjogXCLruYTsmqnrgq7snYDsiJxcIixcbiAgXCJlbnVtLlJlcXVlc3RMb2dTZWFyY2hGaWVsZC5pZFwiOiBcIklEXCIsXG4gIFwiZW51bS5SZXF1ZXN0TG9nU2VhcmNoRmllbGQudG9rZW5fbmFtZVwiOiBcIu2GoO2BsOydtOumhFwiLFxuICBcImVudW0uUmVxdWVzdExvZ1NlYXJjaEZpZWxkLnVzZXJfcHJvbXB0XCI6IFwi7IKs7Jqp7J6QIO2UhOuhrO2UhO2KuFwiLFxuICBcImVudW0uUmVxdWVzdExvZ1N0YXR1cy5ydW5uaW5nXCI6IFwi7Iuk7ZaJIOykkVwiLFxuICBcImVudW0uUmVxdWVzdExvZ1N0YXR1cy5zdWNjZWVkZWRcIjogXCLshLHqs7VcIixcbiAgXCJlbnVtLlJlcXVlc3RMb2dTdGF0dXMuZXJyb3JcIjogXCLsl5Drn6xcIixcbiAgXCJlbnVtLlJlcXVlc3RMb2dTdGF0dXMuYWJvcnRlZFwiOiBcIuykkeuLqFwiLFxuICBcImVudGl0eS5SZXF1ZXN0TG9nU3RlcFwiOiBcIlJlcXVlc3RMb2dTdGVwXCIsXG4gIFwiZW50aXR5LlJlcXVlc3RMb2dTdGVwLmlkXCI6IFwiSURcIixcbiAgXCJlbnRpdHkuUmVxdWVzdExvZ1N0ZXAuY3JlYXRlZF9hdFwiOiBcIuuTseuhneydvOyLnFwiLFxuICBcImVudGl0eS5SZXF1ZXN0TG9nU3RlcC5yZXF1ZXN0X2xvZ1wiOiBcIuu2gOuqqCByZXF1ZXN0IGxvZyBJRFwiLFxuICBcImVudGl0eS5SZXF1ZXN0TG9nU3RlcC5zdGVwX2luZGV4XCI6IFwiYWktc2RrIHN0ZXAgbnVtYmVyICgwLWJhc2VkKVwiLFxuICBcImVudGl0eS5SZXF1ZXN0TG9nU3RlcC50eXBlXCI6IFwic3RlcCDtg4DsnoVcIixcbiAgXCJlbnRpdHkuUmVxdWVzdExvZ1N0ZXAubW9kZWxfbmFtZVwiOiBcIuyLpOygnCBzZXJ2aW5nIOuqqOuNuFwiLFxuICBcImVudGl0eS5SZXF1ZXN0TG9nU3RlcC5yZXF1ZXN0ZWRfbW9kZWxfbmFtZVwiOiBcIuyalOyyrSDrqqjrjbggKGZhbGxiYWNrIOyghClcIixcbiAgXCJlbnRpdHkuUmVxdWVzdExvZ1N0ZXAuZmFsbGJhY2tfY291bnRcIjogXCLrqqjrjbggZmFsbGJhY2sg7Zqf7IiYXCIsXG4gIFwiZW50aXR5LlJlcXVlc3RMb2dTdGVwLmlucHV0X3Rva2Vuc1wiOiBcIuyeheugpSDthqDtgbAgKGdlbmVyYXRlKVwiLFxuICBcImVudGl0eS5SZXF1ZXN0TG9nU3RlcC5vdXRwdXRfdG9rZW5zXCI6IFwi7Lac66ClIO2GoO2BsCAoZ2VuZXJhdGUpXCIsXG4gIFwiZW50aXR5LlJlcXVlc3RMb2dTdGVwLmNhY2hlX3JlYWRfdG9rZW5zXCI6IFwi7LqQ7IucIOydveq4sCDthqDtgbBcIixcbiAgXCJlbnRpdHkuUmVxdWVzdExvZ1N0ZXAuY2FjaGVfY3JlYXRpb25fdG9rZW5zXCI6IFwi7LqQ7IucIOyDneyEsSDthqDtgbBcIixcbiAgXCJlbnRpdHkuUmVxdWVzdExvZ1N0ZXAuY2FjaGVfY3JlYXRpb25fNW1fdG9rZW5zXCI6IFwiNeu2hCBUVEwg7LqQ7IucIOyDneyEsSDthqDtgbBcIixcbiAgXCJlbnRpdHkuUmVxdWVzdExvZ1N0ZXAuY2FjaGVfY3JlYXRpb25fMWhfdG9rZW5zXCI6IFwiMeyLnOqwhCBUVEwg7LqQ7IucIOyDneyEsSDthqDtgbBcIixcbiAgXCJlbnRpdHkuUmVxdWVzdExvZ1N0ZXAuY29zdF91c2RcIjogXCJzdGVwIOu5hOyaqSAobWljcm8tVVNEKVwiLFxuICBcImVudGl0eS5SZXF1ZXN0TG9nU3RlcC5jb3N0X3NvdXJjZVwiOiBcIuu5hOyaqSDstpzsspgocHJvdmlkZXIvcHJpY2luZ190YWJsZSlcIixcbiAgXCJlbnRpdHkuUmVxdWVzdExvZ1N0ZXAuZHVyYXRpb25fbXNcIjogXCLshozsmpTsi5zqsIQobXMpXCIsXG4gIFwiZW50aXR5LlJlcXVlc3RMb2dTdGVwLnR0ZnRfbXNcIjogXCJHZW4gVFRGVChtcylcIixcbiAgXCJlbnRpdHkuUmVxdWVzdExvZ1N0ZXAuZmluaXNoX3JlYXNvblwiOiBcIuyZhOujjCDsgqzsnKBcIixcbiAgXCJlbnRpdHkuUmVxdWVzdExvZ1N0ZXAucmVhc29uaW5nX3RleHRcIjogXCJyZWFzb25pbmcg7YWN7Iqk7Yq4XCIsXG4gIFwiZW50aXR5LlJlcXVlc3RMb2dTdGVwLnJlYXNvbmluZ190b2tlbnNcIjogXCJyZWFzb25pbmcg7Yag7YGwIOyImFwiLFxuICBcImVudGl0eS5SZXF1ZXN0TG9nU3RlcC50b29sX2NhbGxfaW5kZXhcIjogXCLqsJnsnYAgc3RlcCDrgrQgdG9vbCBjYWxsIOyInOyEnFwiLFxuICBcImVudGl0eS5SZXF1ZXN0TG9nU3RlcC50b29sX2NhbGxfaWRcIjogXCJ0b29sIGNhbGwgSURcIixcbiAgXCJlbnRpdHkuUmVxdWVzdExvZ1N0ZXAudG9vbF9uYW1lXCI6IFwidG9vbCDsnbTrpoRcIixcbiAgXCJlbnRpdHkuUmVxdWVzdExvZ1N0ZXAudG9vbF9hcmdzXCI6IFwidG9vbCDsnbjsnpAgKEpTT04gc3RyaW5nKVwiLFxuICBcImVudGl0eS5SZXF1ZXN0TG9nU3RlcC50b29sX3Jlc3VsdFwiOiBcInRvb2wg6rKw6rO8IChKU09OIHN0cmluZylcIixcbiAgXCJlbnRpdHkuUmVxdWVzdExvZ1N0ZXAudG9vbF9kdXJhdGlvbl9tc1wiOiBcInRvb2wg7Iuk7ZaJIOyGjOyalOyLnOqwhChtcylcIixcbiAgXCJlbnRpdHkuUmVxdWVzdExvZ1N0ZXAuZXJyb3JcIjogXCJzdGVwIOyXkOufrCDrqZTsi5zsp4BcIixcbiAgXCJlbnVtLlJlcXVlc3RMb2dTdGVwVHlwZS5nZW5lcmF0ZVwiOiBcIkxMTSDsg53shLFcIixcbiAgXCJlbnVtLlJlcXVlc3RMb2dTdGVwVHlwZS50b29sX2NhbGxcIjogXCJUb29sIO2YuOy2nFwiLFxuICBcImVudW0uUmVxdWVzdExvZ1N0ZXBPcmRlckJ5LmlkLWFzY1wiOiBcIklE7IicXCIsXG4gIFwiZW51bS5SZXF1ZXN0TG9nU3RlcFNlYXJjaEZpZWxkLmlkXCI6IFwiSURcIixcbiAgXCJlbnRpdHkuU2V0dGluZ1wiOiBcIlNldHRpbmdcIixcbiAgXCJlbnRpdHkuU2V0dGluZy5pZFwiOiBcIklEXCIsXG4gIFwiZW50aXR5LlNldHRpbmcuY3JlYXRlZF9hdFwiOiBcIuuTseuhneydvOyLnFwiLFxuICBcImVudGl0eS5TZXR0aW5nLmtleVwiOiBcIuyEpOyglSDtgqQgKOyYiDogc2xhY2suZW5hYmxlZClcIixcbiAgXCJlbnRpdHkuU2V0dGluZy52YWx1ZVwiOiBcIuyEpOyglSDqsJIgKOusuOyekOyXtCDsoIDsnqUsIOyVseyXkOyEnCDtjIzsi7HCt+qygOymnSlcIixcbiAgXCJlbnRpdHkuU2V0dGluZy51cGRhdGVkX2F0XCI6IFwi7LWc7KKFIOyImOygleydvOyLnFwiLFxuICBcImVudW0uU2V0dGluZ09yZGVyQnkua2V5LWFzY1wiOiBcIu2CpOyInFwiLFxuICBcImVudW0uU2V0dGluZ1NlYXJjaEZpZWxkLmtleVwiOiBcIu2CpFwiLFxuICBcImVudGl0eS5Ub2tlblwiOiBcIlRva2VuXCIsXG4gIFwiZW50aXR5LlRva2VuLmlkXCI6IFwiSURcIixcbiAgXCJlbnRpdHkuVG9rZW4uY3JlYXRlZF9hdFwiOiBcIuuTseuhneydvOyLnFwiLFxuICBcImVudGl0eS5Ub2tlbi5wcm92aWRlclwiOiBcIu2UhOuhnOuwlOydtOuNlFwiLFxuICBcImVudGl0eS5Ub2tlbi5jcmVkZW50aWFsc1wiOiBcIuyduOymnSDsoJXrs7QgKEpTT05CKVwiLFxuICBcImVudGl0eS5Ub2tlbi5uYW1lXCI6IFwi7Yag7YGwIOydtOumhFwiLFxuICBcImVudGl0eS5Ub2tlbi5hY3RpdmVcIjogXCLtmZzshLEg7Jes67aAXCIsXG4gIFwiZW50aXR5LlRva2VuLnJlYXV0aF9yZXF1aXJlZFwiOiBcIuyduOymnSDrp4zro4zroZwg7J6s66Gc6re47J247J20IO2VhOyalO2VnOyngCDsl6zrtoBcIixcbiAgXCJlbnRpdHkuVG9rZW4ub3JkXCI6IFwi7KCV66CsIOyInOyEnFwiLFxuICBcImVudGl0eS5Ub2tlbi5xdW90YV90aHJlc2hvbGRcIjogXCJxdW90YSDsgqzsmqnrpaAg7J6E6rOE7LmYKCUpLiBudWxs7J2066m0IOuvuOyEpOyglVwiLFxuICBcImVudGl0eS5Ub2tlbi53ZWlnaHRcIjogXCLqsIDspJEg65287Jq065Oc66Gc67mIIOudvOyasO2MhSDqsIDspJHsuZggKDEuLjEwMClcIixcbiAgXCJlbnRpdHkuVG9rZW4ua2VlcGFsaXZlX2VuYWJsZWRcIjogXCJBbnRocm9waWMgNeyLnOqwhCDthqDtgbAg7JyI64+E7JqwIGtlZXBhbGl2ZSDsgqzsmqkg7Jes67aAXCIsXG4gIFwiZW51bS5Ub2tlbk9yZGVyQnkuaWQtZGVzY1wiOiBcIklE7LWc7Iug7IicXCIsXG4gIFwiZW51bS5Ub2tlbk9yZGVyQnkub3JkLWFzY1wiOiBcIuyInOyEnOyInFwiLFxuICBcImVudW0uVG9rZW5TZWFyY2hGaWVsZC5pZFwiOiBcIklEXCIsXG4gIFwiZW51bS5Ub2tlblNlYXJjaEZpZWxkLm5hbWVcIjogXCLsnbTrpoRcIixcbn0gYXMgY29uc3Q7XG5cbi8vIGRlZmF1bHRMb2NhbGXsnZggZGljdGlvbmFyeeulvCDquLDspIDsnLzroZwg7YKkIOy2lOy2nFxudHlwZSBSQ0tleXMgPSB0eXBlb2YgcmNLZXlzS287XG50eXBlIFByb2plY3REaWN0aW9uYXJ5ID0gdHlwZW9mIGtvO1xudHlwZSBFbnRpdHlMYWJlbHMgPSB0eXBlb2YgZW50aXR5TGFiZWxzO1xudHlwZSBSYXdNZXJnZWREaWN0aW9uYXJ5ID0gUkNLZXlzICZcbiAgT21pdDxFbnRpdHlMYWJlbHMsIGtleW9mIChSQ0tleXMgJiBQcm9qZWN0RGljdGlvbmFyeSk+ICZcbiAgUHJvamVjdERpY3Rpb25hcnk7XG5cbi8vIO2CpOuKlCDsnKDsp4DtlZjrkJgsIOqwkiDtg4DsnoXsnYAgc3RyaW5nIOuYkOuKlCDtlajsiJjroZwg7J2867CY7ZmUICjri6TrpbggbG9jYWxl7J2YIOumrO2EsOuftCDtg4DsnoUg7Lap64+MIOuwqeyngClcbmV4cG9ydCB0eXBlIE1lcmdlZERpY3Rpb25hcnkgPSB7XG4gIFtLIGluIGtleW9mIFJhd01lcmdlZERpY3Rpb25hcnldOiBSYXdNZXJnZWREaWN0aW9uYXJ5W0tdIGV4dGVuZHMgKC4uLmFyZ3M6IGluZmVyIFApID0+IHN0cmluZ1xuICAgID8gKC4uLmFyZ3M6IFApID0+IHN0cmluZ1xuICAgIDogc3RyaW5nO1xufTtcbmV4cG9ydCB0eXBlIERpY3RLZXkgPSBrZXlvZiBNZXJnZWREaWN0aW9uYXJ5O1xuZXhwb3J0IHR5cGUgTG9jYWxpemVkU3RyaW5nID0gc3RyaW5nICYgeyBfX2JyYW5kOiBcIkxvY2FsaXplZFN0cmluZ1wiIH07XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWZpbmVMb2NhbGUoZGljdDogUGFydGlhbDxNZXJnZWREaWN0aW9uYXJ5Pikge1xuICByZXR1cm4gZGljdDtcbn1cblxuLy8g6rCBIGxvY2FsZeuzhOuhnCByYy1rZXlzICsgZW50aXR5IGxhYmVscyArIO2UhOuhnOygne2KuCBkaWN0IO2Vqey5qFxuY29uc3QgZGljdGlvbmFyaWVzOiBSZWNvcmQ8c3RyaW5nLCBQYXJ0aWFsPE1lcmdlZERpY3Rpb25hcnk+PiA9IHtcbiAga286IHsgLi4ucmNLZXlzS28sIC4uLmVudGl0eUxhYmVscywgLi4ua28gfSxcbiAgZW46IHsgLi4ucmNLZXlzRW4sIC4uLmVuIH0sXG59O1xuXG50eXBlIFNEUmV0dXJuVHlwZTxLIGV4dGVuZHMgRGljdEtleT4gPSBNZXJnZWREaWN0aW9uYXJ5W0tdIGV4dGVuZHMgKC4uLmFyZ3M6IGluZmVyIFApID0+IHN0cmluZ1xuICA/ICguLi5hcmdzOiBQKSA9PiBMb2NhbGl6ZWRTdHJpbmdcbiAgOiBMb2NhbGl6ZWRTdHJpbmc7XG5cbmZ1bmN0aW9uIGdldERpY3RWYWx1ZTxLIGV4dGVuZHMgRGljdEtleT4oa2V5OiBLLCBsb2NhbGU6IHN0cmluZyk6IFNEUmV0dXJuVHlwZTxLPiB7XG4gIC8vIDEuIOyngOygleuQnCBsb2NhbGXsl5DshJwg7KGw7ZqMXG4gIGNvbnN0IGRpY3QgPSBkaWN0aW9uYXJpZXNbbG9jYWxlXTtcbiAgaWYgKGRpY3Q/LltrZXldICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gZGljdFtrZXldIGFzIHVua25vd24gYXMgU0RSZXR1cm5UeXBlPEs+O1xuICB9XG5cbiAgLy8gMi4gZGVmYXVsdCBsb2NhbGXsl5DshJwg7KGw7ZqMXG4gIGlmIChsb2NhbGUgIT09IERFRkFVTFRfTE9DQUxFICYmIGRpY3Rpb25hcmllc1tERUZBVUxUX0xPQ0FMRV0/LltrZXldICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gZGljdGlvbmFyaWVzW0RFRkFVTFRfTE9DQUxFXVtrZXldIGFzIHVua25vd24gYXMgU0RSZXR1cm5UeXBlPEs+O1xuICB9XG5cbiAgLy8gMy4gc3VwcG9ydGVkIGxvY2FsZXMg7Iic7ZqMXG4gIGZvciAoY29uc3Qgc3VwcG9ydGVkTG9jYWxlIG9mIFNVUFBPUlRFRF9MT0NBTEVTKSB7XG4gICAgaWYgKHN1cHBvcnRlZExvY2FsZSAhPT0gbG9jYWxlICYmIHN1cHBvcnRlZExvY2FsZSAhPT0gREVGQVVMVF9MT0NBTEUpIHtcbiAgICAgIGlmIChkaWN0aW9uYXJpZXNbc3VwcG9ydGVkTG9jYWxlXT8uW2tleV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gZGljdGlvbmFyaWVzW3N1cHBvcnRlZExvY2FsZV1ba2V5XSBhcyB1bmtub3duIGFzIFNEUmV0dXJuVHlwZTxLPjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyA0LiDrqqjrkZAg7Iuk7YyoIOyLnCBrZXkg67CY7ZmYXG4gIHJldHVybiBrZXkgYXMgdW5rbm93biBhcyBTRFJldHVyblR5cGU8Sz47XG59XG5cbi8qKlxuICogU29uYW11IERpY3Rpb25hcnkg7ZWo7IiYXG4gKiBsb2NhbGXsl5Ag66ee64qUIOuyiOyXrSDthY3siqTtirjrpbwg67CY7ZmY7ZWp64uI64ukLlxuICpcbiAqIEBleGFtcGxlXG4gKiBTRChcImNvbW1vbi5zYXZlXCIpICAvLyDihpIgXCLsoIDsnqVcIiAoTG9jYWxpemVkU3RyaW5nKVxuICogU0QoXCJ1c2VyLm5vdEZvdW5kXCIpKDEpICAvLyDihpIgXCLsobTsnqztlZjsp4Ag7JWK64qUIFVzZXIgSUQgMVwiIChMb2NhbGl6ZWRTdHJpbmcpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBTRDxLIGV4dGVuZHMgRGljdEtleT4oa2V5OiBLKTogU0RSZXR1cm5UeXBlPEs+IHtcbiAgY29uc3QgbG9jYWxlID0gZ2V0Q3VycmVudExvY2FsZSgpO1xuICByZXR1cm4gZ2V0RGljdFZhbHVlKGtleSwgbG9jYWxlKTtcbn1cblxuLyoqXG4gKiDtirnsoJUgbG9jYWxl7J2YIOuyiOyXrSDthY3siqTtirjrpbwg67CY7ZmY7ZWY64qUIO2VqOyImOulvCDsg53shLHtlanri4jri6QuXG4gKlxuICogQGV4YW1wbGVcbiAqIGNvbnN0IEVOID0gU0QubG9jYWxlKFwiZW5cIik7XG4gKiBFTihcImNvbW1vbi5zYXZlXCIpICAvLyDihpIgXCJTYXZlXCJcbiAqL1xuU0QubG9jYWxlID1cbiAgKGxvY2FsZTogKHR5cGVvZiBTVVBQT1JURURfTE9DQUxFUylbbnVtYmVyXSkgPT5cbiAgPEsgZXh0ZW5kcyBEaWN0S2V5PihrZXk6IEspOiBTRFJldHVyblR5cGU8Sz4gPT4ge1xuICAgIHJldHVybiBnZXREaWN0VmFsdWUoa2V5LCBsb2NhbGUpO1xuICB9O1xuXG4vLyBMb2NhbGl6ZWQg6rCA64ql7ZWcIENvbHVtbiDtg4DsnoUg6rOE7IKwXG50eXBlIExvY2FsaXplZEJhc2VDb2x1bW48VD4gPSB7XG4gIFtLIGluIGtleW9mIFQgJiBzdHJpbmddOiBLIGV4dGVuZHMgYCR7aW5mZXIgQmFzZX1fJHsodHlwZW9mIFNVUFBPUlRFRF9MT0NBTEVTKVtudW1iZXJdfWBcbiAgICA/IEJhc2VcbiAgICA6IEs7XG59W2tleW9mIFQgJiBzdHJpbmddO1xuXG4vKipcbiAqIGxvY2FsZeyXkCDrlLDrnbwg7KCB7KCI7ZWcIOy7rOufvCDqsJLsnYQg67CY7ZmY7ZWp64uI64ukLlxuICogRELsl5AgbmFtZSwgbmFtZV9rbywgbmFtZV9lbuyymOufvCBsb2NhbGl6ZWQgY29sdW1u7J20IOyeiOydhCDrlYwg7IKs7Jqp7ZWp64uI64ukLlxuICpcbiAqIOyasOyEoOyInOychCAo7KeA7JuQIOuhnOy8gOydvOydgCBrby9qcC9lbuydtOqzoCwg7ISc67mE7Iqk7J2YIOq4sOuzuCDroZzsvIDsnbzsnYAga28sIOyCrOyaqeyekOydmCDroZzsvIDsnbzsnYAganDsnbwg65WMKTogY29sdW1uX2pwIOKGkiBjb2x1bW4g4oaSIGNvbHVtbl9rbyDihpIgY29sdW1uX2VuXG4gKiDsmrDshKDsiJzsnIQgKOyngOybkCDroZzsvIDsnbzsnYAga28vanAvZW7snbTqs6AsIOyEnOu5hOyKpOydmCDquLDrs7gg66Gc7LyA7J287J2AIGVuLCDsgqzsmqnsnpDsnZgg66Gc7LyA7J287J2AIGtv7J28IOuVjCk6IGNvbHVtbl9rbyDihpIgY29sdW1uIOKGkiBjb2x1bW5fZW4g4oaSIGNvbHVtbl9qcFxuICpcbiAqIEBleGFtcGxlXG4gKiBsb2NhbGl6ZWRDb2x1bW4odGFnLCBcIm5hbWVcIilcbiAqL1xudHlwZSBMb2NhbGl6ZWRDb2x1bW5TY2FsYXJWYWx1ZSA9IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBiaWdpbnQ7XG50eXBlIExvY2FsaXplZENvbHVtblZhbHVlID0gc3RyaW5nIHwgc3RyaW5nW107XG50eXBlIE5lc3RlZExvY2FsaXplZENvbHVtblZhbHVlRnJvbTxWPiA9IFYgZXh0ZW5kcyBzdHJpbmdcbiAgPyBzdHJpbmdcbiAgOiBWIGV4dGVuZHMgcmVhZG9ubHkgc3RyaW5nW11cbiAgICA/IHN0cmluZ1tdXG4gICAgOiBuZXZlcjtcbnR5cGUgTG9jYWxpemVkQ29sdW1uVmFsdWVGcm9tPFY+ID0gViBleHRlbmRzIHN0cmluZ1xuICA/IHN0cmluZ1xuICA6IFYgZXh0ZW5kcyByZWFkb25seSBzdHJpbmdbXVxuICAgID8gc3RyaW5nW11cbiAgICA6IFYgZXh0ZW5kcyBudW1iZXIgfCBib29sZWFuIHwgYmlnaW50XG4gICAgICA/IHN0cmluZ1xuICAgICAgOiBWIGV4dGVuZHMgUGFydGlhbDxSZWNvcmQ8KHR5cGVvZiBTVVBQT1JURURfTE9DQUxFUylbbnVtYmVyXSwgaW5mZXIgTFY+PlxuICAgICAgICA/IE5lc3RlZExvY2FsaXplZENvbHVtblZhbHVlRnJvbTxMVj5cbiAgICAgICAgOiBuZXZlcjtcbnR5cGUgTG9jYWxpemVkQ29sdW1uQ2FuZGlkYXRlPFQsIEsgZXh0ZW5kcyBzdHJpbmc+ID1cbiAgfCAoSyBleHRlbmRzIGtleW9mIFQgPyBUW0tdIDogbmV2ZXIpXG4gIHwge1xuICAgICAgW0wgaW4gKHR5cGVvZiBTVVBQT1JURURfTE9DQUxFUylbbnVtYmVyXV06IGAke0t9XyR7TH1gIGV4dGVuZHMga2V5b2YgVFxuICAgICAgICA/IFRbYCR7S31fJHtMfWBdXG4gICAgICAgIDogbmV2ZXI7XG4gICAgfVsodHlwZW9mIFNVUFBPUlRFRF9MT0NBTEVTKVtudW1iZXJdXTtcbnR5cGUgTG9jYWxpemVkQ29sdW1uUmV0dXJuPFQsIEsgZXh0ZW5kcyBzdHJpbmc+ID1cbiAgfCBMb2NhbGl6ZWRDb2x1bW5WYWx1ZUZyb208TG9jYWxpemVkQ29sdW1uQ2FuZGlkYXRlPFQsIEs+PlxuICB8IHVuZGVmaW5lZDtcbnR5cGUgTG9jYWxlVmFsdWVNYXAgPSBQYXJ0aWFsPFJlY29yZDwodHlwZW9mIFNVUFBPUlRFRF9MT0NBTEVTKVtudW1iZXJdLCB1bmtub3duPj47XG5cbmZ1bmN0aW9uIGlzTG9jYWxpemVkQ29sdW1uVmFsdWUodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBMb2NhbGl6ZWRDb2x1bW5WYWx1ZSB7XG4gIHJldHVybiAoXG4gICAgdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiIHx8XG4gICAgKEFycmF5LmlzQXJyYXkodmFsdWUpICYmIHZhbHVlLmV2ZXJ5KChpdGVtKSA9PiB0eXBlb2YgaXRlbSA9PT0gXCJzdHJpbmdcIikpXG4gICk7XG59XG5cbmZ1bmN0aW9uIGlzTG9jYWxpemVkQ29sdW1uU2NhbGFyVmFsdWUodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBMb2NhbGl6ZWRDb2x1bW5TY2FsYXJWYWx1ZSB7XG4gIHJldHVybiBbXCJzdHJpbmdcIiwgXCJudW1iZXJcIiwgXCJib29sZWFuXCIsIFwiYmlnaW50XCJdLmluY2x1ZGVzKHR5cGVvZiB2YWx1ZSk7XG59XG5cbmZ1bmN0aW9uIGlzRW1wdHlMb2NhbGl6ZWRDb2x1bW5WYWx1ZSh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIG51bGwgfCB1bmRlZmluZWQgfCBcIlwiIHtcbiAgcmV0dXJuIHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09IFwiXCI7XG59XG5cbmZ1bmN0aW9uIGdldE5lc3RlZExvY2FsZVZhbHVlPFQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwgSyBleHRlbmRzIExvY2FsaXplZEJhc2VDb2x1bW48VD4+KFxuICByb3c6IFQsXG4gIGNvbHVtbjogSyxcbiAgbG9jYWxlOiAodHlwZW9mIFNVUFBPUlRFRF9MT0NBTEVTKVtudW1iZXJdLFxuKTogdW5rbm93biB7XG4gIGNvbnN0IGNvbHVtblZhbHVlID0gcm93W2NvbHVtbl07XG4gIGlmIChjb2x1bW5WYWx1ZSA9PT0gbnVsbCB8fCB0eXBlb2YgY29sdW1uVmFsdWUgIT09IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheShjb2x1bW5WYWx1ZSkpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgcmV0dXJuIChjb2x1bW5WYWx1ZSBhcyBMb2NhbGVWYWx1ZU1hcClbbG9jYWxlXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxvY2FsaXplZENvbHVtbjxcbiAgVCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICBLIGV4dGVuZHMgTG9jYWxpemVkQmFzZUNvbHVtbjxUPixcbj4ocm93OiBULCBjb2x1bW46IEspOiBMb2NhbGl6ZWRDb2x1bW5SZXR1cm48VCwgSz4ge1xuICBjb25zdCBjdXJyZW50TG9jYWxlID0gZ2V0Q3VycmVudExvY2FsZSgpO1xuICBjb25zdCBsb2NhbGUgPSBTVVBQT1JURURfTE9DQUxFUy5pbmNsdWRlcyhjdXJyZW50TG9jYWxlKSA/IGN1cnJlbnRMb2NhbGUgOiBERUZBVUxUX0xPQ0FMRTtcbiAgY29uc3Qgb3RoZXJMb2NhbGVzID0gU1VQUE9SVEVEX0xPQ0FMRVMuZmlsdGVyKFxuICAgIChsOiBzdHJpbmcpID0+IGwgIT09IGxvY2FsZSAmJiBsICE9PSBERUZBVUxUX0xPQ0FMRSxcbiAgKTtcbiAgY29uc3QgbG9jYWxpemVkS2V5ID0gKGNvbHVtbjogSywgbG9jYWxlOiAodHlwZW9mIFNVUFBPUlRFRF9MT0NBTEVTKVtudW1iZXJdKSA9PlxuICAgIGAke2NvbHVtbn1fJHtsb2NhbGV9YDtcbiAgY29uc3QgdmFsdWVzID0gW1xuICAgIHsgdmFsdWU6IHJvd1tsb2NhbGl6ZWRLZXkoY29sdW1uLCBsb2NhbGUpXSwgc291cmNlOiBcImRpcmVjdFwiIH0sXG4gICAgeyB2YWx1ZTogZ2V0TmVzdGVkTG9jYWxlVmFsdWUocm93LCBjb2x1bW4sIGxvY2FsZSksIHNvdXJjZTogXCJuZXN0ZWRcIiB9LFxuICAgIHsgdmFsdWU6IHJvd1tjb2x1bW5dLCBzb3VyY2U6IFwiZGlyZWN0XCIgfSxcbiAgICB7IHZhbHVlOiByb3dbbG9jYWxpemVkS2V5KGNvbHVtbiwgREVGQVVMVF9MT0NBTEUpXSwgc291cmNlOiBcImRpcmVjdFwiIH0sXG4gICAgeyB2YWx1ZTogZ2V0TmVzdGVkTG9jYWxlVmFsdWUocm93LCBjb2x1bW4sIERFRkFVTFRfTE9DQUxFKSwgc291cmNlOiBcIm5lc3RlZFwiIH0sXG4gICAgLi4ub3RoZXJMb2NhbGVzLmZsYXRNYXAoKGwpID0+IFtcbiAgICAgIHsgdmFsdWU6IHJvd1tsb2NhbGl6ZWRLZXkoY29sdW1uLCBsKV0sIHNvdXJjZTogXCJkaXJlY3RcIiB9LFxuICAgICAgeyB2YWx1ZTogZ2V0TmVzdGVkTG9jYWxlVmFsdWUocm93LCBjb2x1bW4sIGwpLCBzb3VyY2U6IFwibmVzdGVkXCIgfSxcbiAgICBdKSxcbiAgXTtcblxuICBmb3IgKGNvbnN0IHsgdmFsdWUsIHNvdXJjZSB9IG9mIHZhbHVlcykge1xuICAgIGlmICghaXNFbXB0eUxvY2FsaXplZENvbHVtblZhbHVlKHZhbHVlKSAmJiBpc0xvY2FsaXplZENvbHVtblZhbHVlKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIHZhbHVlIGFzIExvY2FsaXplZENvbHVtblJldHVybjxULCBLPjtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgc291cmNlID09PSBcImRpcmVjdFwiICYmXG4gICAgICAhaXNFbXB0eUxvY2FsaXplZENvbHVtblZhbHVlKHZhbHVlKSAmJlxuICAgICAgaXNMb2NhbGl6ZWRDb2x1bW5TY2FsYXJWYWx1ZSh2YWx1ZSlcbiAgICApIHtcbiAgICAgIHJldHVybiBTdHJpbmcodmFsdWUpIGFzIExvY2FsaXplZENvbHVtblJldHVybjxULCBLPjtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIEVudW3snZggbG9jYWxpemVkIGxhYmVsc+ulvCBQcm94eeuhnCDrsJjtmZjtlanri4jri6QuXG4gKiBTZWxlY3Qg7Lu07Y+s64SM7Yq4IOuTseyXkOyEnCBFbnVtTGFiZWxba2V5XSDrjIDsi6Ag7IKs7Jqp7ZWp64uI64ukLlxuICpcbiAqIEBleGFtcGxlXG4gKiBTRC5lbnVtTGFiZWxzKFwiVGFnT3JkZXJCeVwiKVtrZXldICAvLyDihpIg7ZiE7J6sIGxvY2FsZeydmCDrnbzrsqhcbiAqL1xuU0QuZW51bUxhYmVscyA9IChlbnVtTmFtZTogc3RyaW5nKTogUmVjb3JkPHN0cmluZywgTG9jYWxpemVkU3RyaW5nPiA9PiB7XG4gIHJldHVybiBuZXcgUHJveHkoe30gYXMgUmVjb3JkPHN0cmluZywgTG9jYWxpemVkU3RyaW5nPiwge1xuICAgIGdldChfLCBrZXk6IHN0cmluZyB8IHN5bWJvbCkge1xuICAgICAgaWYgKHR5cGVvZiBrZXkgPT09IFwic3ltYm9sXCIpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGljdEtleSA9IGBlbnVtLiR7ZW51bU5hbWV9LiR7a2V5fWAgYXMgRGljdEtleTtcbiAgICAgIHJldHVybiBnZXREaWN0VmFsdWUoZGljdEtleSwgZ2V0Q3VycmVudExvY2FsZSgpKTtcbiAgICB9LFxuICB9KTtcbn07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBT0EsTUFBTSxpQkFBaUI7QUFDdkIsTUFBTSxvQkFBb0Is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
|
|
393
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2QuZ2VuZXJhdGVkLmpzIiwibmFtZXMiOlsia28iLCJlbiJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9pMThuL3NkLmdlbmVyYXRlZC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBnZW5lcmF0ZWRcbiAqIOyngeygkSDsiJjsoJXtlZjsp4Ag66eI7IS47JqULlxuICovXG5cbmltcG9ydCB7IFNvbmFtdSB9IGZyb20gXCJzb25hbXVcIjtcblxuY29uc3QgREVGQVVMVF9MT0NBTEUgPSBcImtvXCIgYXMgY29uc3Q7XG5jb25zdCBTVVBQT1JURURfTE9DQUxFUyA9IFtcImtvXCIsIFwiZW5cIl0gYXMgY29uc3Q7XG5mdW5jdGlvbiBnZXRDdXJyZW50TG9jYWxlKCk6ICh0eXBlb2YgU1VQUE9SVEVEX0xPQ0FMRVMpW251bWJlcl0ge1xuICB0cnkge1xuICAgIGNvbnN0IGN0eCA9IFNvbmFtdS5nZXRDb250ZXh0KCk7XG4gICAgcmV0dXJuIChjdHgubG9jYWxlIGFzICh0eXBlb2YgU1VQUE9SVEVEX0xPQ0FMRVMpW251bWJlcl0pID8/IERFRkFVTFRfTE9DQUxFO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gREVGQVVMVF9MT0NBTEU7XG4gIH1cbn1cblxuaW1wb3J0IGVuIGZyb20gXCIuL2VuXCI7XG5pbXBvcnQga28gZnJvbSBcIi4va29cIjtcblxuLy8gcmVhY3QtY29tcG9uZW50cyBpMThuIGtleXNcbmNvbnN0IHJjS2V5c0tvID0ge1xuICAvLyBBc3luY1NlbGVjdCBDb21wb25lbnRcbiAgXCJyYy5hc3luY1NlbGVjdC5sb2FkaW5nXCI6IFwi66Gc65SpIOykkS4uLlwiLFxuICBcInJjLmFzeW5jU2VsZWN0Lm5vT3B0aW9uc1wiOiBcIuyYteyFmOydtCDsl4bsirXri4jri6RcIixcbiAgXCJyYy5hc3luY1NlbGVjdC5ub1Jlc3VsdHNcIjogXCLqsoDsg4kg6rKw6rO86rCAIOyXhuyKteuLiOuLpFwiLFxuICBcInJjLmFzeW5jU2VsZWN0LnNlbGVjdFBsYWNlaG9sZGVyXCI6IFwi7ISg7YOd7ZWY7IS47JqULi4uXCIsXG5cbiAgLy8gQ29tYm9ib3ggQ29tcG9uZW50XG4gIFwicmMuY29tYm9ib3gubm9SZXN1bHRzXCI6IFwi6rKA7IOJIOqysOqzvOqwgCDsl4bsirXri4jri6RcIixcbiAgXCJyYy5jb21ib2JveC5zZWxlY3RQbGFjZWhvbGRlclwiOiBcIuyEoO2Dne2VmOyEuOyalC4uLlwiLFxuXG4gIC8vIERhdGVQaWNrZXIgQ29tcG9uZW50XG4gIFwicmMuZGF0ZVBpY2tlci5waWNrRGF0ZVwiOiBcIuuCoOynnCDshKDtg51cIixcbiAgXCJyYy5kYXRlUGlja2VyLnBsYWNlaG9sZGVyXCI6IFwi64Kg7KecIOyEoO2DnVwiLFxuICBcInJjLmRhdGVQaWNrZXIuc2VsZWN0RGF0ZVwiOiBcIuuCoOynnCDshKDtg51cIixcblxuICAvLyBEYXRlU2VsZWN0b3JNdWx0aXBsZSBDb21wb25lbnRcbiAgXCJyYy5kYXRlU2VsZWN0b3JNdWx0aXBsZS5hZGREYXRlXCI6IFwi64Kg7KecIOy2lOqwgFwiLFxuICBcInJjLmRhdGVTZWxlY3Rvck11bHRpcGxlLmRhdGVSYW5nZVwiOiBcIuq4sOqwhFwiLFxuICBcInJjLmRhdGVTZWxlY3Rvck11bHRpcGxlLnBsYWNlaG9sZGVyXCI6IFwi64Kg7KecIOyEoO2DnVwiLFxuICBcInJjLmRhdGVTZWxlY3Rvck11bHRpcGxlLnNpbmdsZURhdGVcIjogXCLri6jsnbxcIixcblxuICAvLyBGaWxlSW5wdXQgQ29tcG9uZW50XG4gIFwicmMuZmlsZUlucHV0LmJyb3dzZUZpbGVzXCI6IFwi7YyM7J28IOywvuq4sFwiLFxuICBcInJjLmZpbGVJbnB1dC5kcm9wWm9uZVwiOiBcIu2MjOydvOydhCDrk5zrnpjqt7jtlZjqsbDrgpgg7YG066at7ZWY7JesIOyXheuhnOuTnFwiLFxuICBcInJjLmZpbGVJbnB1dC5maWxlUGxhY2Vob2xkZXJcIjogXCLtjIzsnbxcIixcbiAgXCJyYy5maWxlSW5wdXQuaW1hZ2VQbGFjZWhvbGRlclwiOiBcIuydtOuvuOyngFwiLFxuICBcInJjLmZpbGVJbnB1dC5tYXhGaWxlc0V4Y2VlZGVkXCI6IChtYXhGaWxlczogbnVtYmVyKSA9PlxuICAgIGDstZzrjIAgJHttYXhGaWxlc33qsJwg7YyM7J2866eMIOyXheuhnOuTnCDqsIDriqXtlanri4jri6RgLFxuICBcInJjLmZpbGVJbnB1dC5wZW5kaW5nXCI6IFwi64yA6riwIOykkVwiLFxuICBcInJjLmZpbGVJbnB1dC5yZW1vdmVcIjogXCLsoJzqsbBcIixcbiAgXCJyYy5maWxlSW5wdXQudXBsb2FkRmFpbGVkXCI6IFwi7JeF66Gc65OcIOyLpO2MqFwiLFxuICBcInJjLmZpbGVJbnB1dC51cGxvYWRpbmdcIjogXCLsl4XroZzrk5wg7KSRLi4uXCIsXG5cbiAgLy8gTW9udGhQaWNrZXJNdWx0aXBsZSBDb21wb25lbnRcbiAgXCJyYy5tb250aFBpY2tlck11bHRpcGxlLmFkZE1vbnRoXCI6IFwi7JuUIOy2lOqwgFwiLFxuICBcInJjLm1vbnRoUGlja2VyTXVsdGlwbGUuZGF0ZVJhbmdlXCI6IFwi6riw6rCEXCIsXG4gIFwicmMubW9udGhQaWNrZXJNdWx0aXBsZS5lbmREYXRlXCI6IFwi7KKF66OM7J28XCIsXG4gIFwicmMubW9udGhQaWNrZXJNdWx0aXBsZS5wbGFjZWhvbGRlclwiOiBcIuyblCDshKDtg51cIixcbiAgXCJyYy5tb250aFBpY2tlck11bHRpcGxlLnNpbmdsZURhdGVcIjogXCLri6jsnbxcIixcbiAgXCJyYy5tb250aFBpY2tlck11bHRpcGxlLnN0YXJ0RGF0ZVwiOiBcIuyLnOyekeydvFwiLFxuXG4gIC8vIE11bHRpU2VsZWN0IENvbXBvbmVudFxuICBcInJjLm11bHRpU2VsZWN0LmNsZWFyXCI6IFwi7KCE7LK0IO2VtOygnFwiLFxuICBcInJjLm11bHRpU2VsZWN0LmNsb3NlXCI6IFwi64ur6riwXCIsXG4gIFwicmMubXVsdGlTZWxlY3QubW9yZUl0ZW1zXCI6IChjb3VudDogbnVtYmVyKSA9PiBgKyR7Y291bnR96rCcIOuNlOuztOq4sGAsXG4gIFwicmMubXVsdGlTZWxlY3Qubm9PcHRpb25zXCI6IFwi7Ji17IWY7J20IOyXhuyKteuLiOuLpFwiLFxuICBcInJjLm11bHRpU2VsZWN0Lm5vT3B0aW9uc1NlbGVjdGVkXCI6IFwi7ISg7YOd65CcIOyYteyFmOydtCDsl4bsirXri4jri6RcIixcbiAgXCJyYy5tdWx0aVNlbGVjdC5ub1Jlc3VsdHNcIjogXCLqsoDsg4kg6rKw6rO86rCAIOyXhuyKteuLiOuLpFwiLFxuICBcInJjLm11bHRpU2VsZWN0Lm9wdGlvbnNDb3VudFwiOiAoY291bnQ6IG51bWJlcikgPT4gYCR7Y291bnR96rCcIOyYteyFmGAsXG4gIFwicmMubXVsdGlTZWxlY3Quc2VsZWN0QWxsXCI6IFwi7KCE7LK0IOyEoO2DnVwiLFxuICBcInJjLm11bHRpU2VsZWN0LnNlbGVjdFBsYWNlaG9sZGVyXCI6IFwi7ISg7YOd7ZWY7IS47JqULi4uXCIsXG5cbiAgLy8gUGFnaW5hdGlvbiBDb21wb25lbnRcbiAgXCJyYy5wYWdpbmF0aW9uLm5leHRcIjogXCLri6TsnYxcIixcbiAgXCJyYy5wYWdpbmF0aW9uLnByZXZpb3VzXCI6IFwi7J207KCEXCIsXG4gIFwicmMucGFnaW5hdGlvbi5zaG93aW5nXCI6IChzdGFydDogbnVtYmVyLCBlbmQ6IG51bWJlciwgdG90YWw6IG51bWJlcikgPT5cbiAgICBgJHt0b3RhbH3qsJwg7KSRICR7c3RhcnR9LSR7ZW5kfWAsXG5cbiAgLy8gQ2FsZW5kYXIgQ29tcG9uZW50XG4gIFwicmMuY2FsZW5kYXIubW9udGguMFwiOiBcIjHsm5RcIixcbiAgXCJyYy5jYWxlbmRhci5tb250aC4xXCI6IFwiMuyblFwiLFxuICBcInJjLmNhbGVuZGFyLm1vbnRoLjJcIjogXCIz7JuUXCIsXG4gIFwicmMuY2FsZW5kYXIubW9udGguM1wiOiBcIjTsm5RcIixcbiAgXCJyYy5jYWxlbmRhci5tb250aC40XCI6IFwiNeyblFwiLFxuICBcInJjLmNhbGVuZGFyLm1vbnRoLjVcIjogXCI27JuUXCIsXG4gIFwicmMuY2FsZW5kYXIubW9udGguNlwiOiBcIjfsm5RcIixcbiAgXCJyYy5jYWxlbmRhci5tb250aC43XCI6IFwiOOyblFwiLFxuICBcInJjLmNhbGVuZGFyLm1vbnRoLjhcIjogXCI57JuUXCIsXG4gIFwicmMuY2FsZW5kYXIubW9udGguOVwiOiBcIjEw7JuUXCIsXG4gIFwicmMuY2FsZW5kYXIubW9udGguMTBcIjogXCIxMeyblFwiLFxuICBcInJjLmNhbGVuZGFyLm1vbnRoLjExXCI6IFwiMTLsm5RcIixcblxuICAvLyBTb25hbXUgRmlsdGVyIENvbXBvbmVudFxuICBcInJjLnNvbmFtdUZpbHRlci50aXRsZVwiOiBcIuyGjOuCmOustCDtlYTthLBcIixcbiAgXCJyYy5zb25hbXVGaWx0ZXIuYXBwbHlcIjogXCLsoIHsmqlcIixcbiAgXCJyYy5zb25hbXVGaWx0ZXIucmVzZXRcIjogXCLstIjquLDtmZRcIixcbiAgXCJyYy5zb25hbXVGaWx0ZXIuYWRkUnVsZVwiOiBcIuq3nOy5mSDstpTqsIBcIixcbiAgXCJyYy5zb25hbXVGaWx0ZXIubm9SdWxlc1lldFwiOiAn7JWE7KeBIOq3nOy5meydtCDsl4bsirXri4jri6QuIFwiKyDqt5zsuZkg7LaU6rCAXCLrpbwg7YG066at7ZWY7JesIOyLnOyeke2VmOyEuOyalC4nLFxuICBcInJjLnNvbmFtdUZpbHRlci5zZWxlY3RGaWVsZFwiOiBcIu2VhOuTnCDshKDtg51cIixcbiAgXCJyYy5zb25hbXVGaWx0ZXIuc2VsZWN0T3BlcmF0b3JcIjogXCLsl7DsgrDsnpAg7ISg7YOdXCIsXG4gIFwicmMuc29uYW11RmlsdGVyLnNlbGVjdE9wZXJhdG9yRmlyc3RcIjogXCLrqLzsoIAg7Jew7IKw7J6Q66W8IOyEoO2Dne2VmOyEuOyalFwiLFxuICBcInJjLnNvbmFtdUZpbHRlci5lbnRlclZhbHVlXCI6IFwi6rCSIOyeheugpVwiLFxuICBcInJjLnNvbmFtdUZpbHRlci5lbnRlck51bWJlclwiOiBcIuyIq+yekCDsnoXroKVcIixcbiAgXCJyYy5zb25hbXVGaWx0ZXIubm90U3VwcG9ydGVkXCI6IFwi7KeA7JuQ7ZWY7KeAIOyViuydjFwiLFxuICBcInJjLnNvbmFtdUZpbHRlci5zdGFydERhdGVcIjogXCLsi5zsnpHsnbxcIixcbiAgXCJyYy5zb25hbXVGaWx0ZXIuZW5kRGF0ZVwiOiBcIuyiheujjOydvFwiLFxuICBcInJjLnNvbmFtdUZpbHRlci5hcHBsaWVkRmlsdGVyc1wiOiBcIvCfjLIg7KCB7Jqp65CcIOyGjOuCmOustCDtlYTthLBcIixcblxuICAvLyBDb21tb25cbiAgXCJyYy5jb21tb24uY2FuY2VsXCI6IFwi7Leo7IaMXCIsXG4gIFwicmMuY29tbW9uLnNhdmVcIjogXCLsoIDsnqVcIixcbn07XG5cbmNvbnN0IHJjS2V5c0VuID0ge1xuICAvLyBBc3luY1NlbGVjdCBDb21wb25lbnRcbiAgXCJyYy5hc3luY1NlbGVjdC5sb2FkaW5nXCI6IFwiTG9hZGluZy4uLlwiLFxuICBcInJjLmFzeW5jU2VsZWN0Lm5vT3B0aW9uc1wiOiBcIk5vIG9wdGlvbnNcIixcbiAgXCJyYy5hc3luY1NlbGVjdC5ub1Jlc3VsdHNcIjogXCJObyByZXN1bHRzXCIsXG4gIFwicmMuYXN5bmNTZWxlY3Quc2VsZWN0UGxhY2Vob2xkZXJcIjogXCJTZWxlY3QuLi5cIixcblxuICAvLyBDb21ib2JveCBDb21wb25lbnRcbiAgXCJyYy5jb21ib2JveC5ub1Jlc3VsdHNcIjogXCJObyByZXN1bHRzXCIsXG4gIFwicmMuY29tYm9ib3guc2VsZWN0UGxhY2Vob2xkZXJcIjogXCJTZWxlY3QuLi5cIixcblxuICAvLyBEYXRlUGlja2VyIENvbXBvbmVudFxuICBcInJjLmRhdGVQaWNrZXIucGlja0RhdGVcIjogXCJQaWNrIGRhdGVcIixcbiAgXCJyYy5kYXRlUGlja2VyLnBsYWNlaG9sZGVyXCI6IFwiUGljayBkYXRlXCIsXG4gIFwicmMuZGF0ZVBpY2tlci5zZWxlY3REYXRlXCI6IFwiU2VsZWN0IGRhdGVcIixcblxuICAvLyBEYXRlU2VsZWN0b3JNdWx0aXBsZSBDb21wb25lbnRcbiAgXCJyYy5kYXRlU2VsZWN0b3JNdWx0aXBsZS5hZGREYXRlXCI6IFwiQWRkIGRhdGVcIixcbiAgXCJyYy5kYXRlU2VsZWN0b3JNdWx0aXBsZS5kYXRlUmFuZ2VcIjogXCJSYW5nZVwiLFxuICBcInJjLmRhdGVTZWxlY3Rvck11bHRpcGxlLnBsYWNlaG9sZGVyXCI6IFwiUGljayBkYXRlXCIsXG4gIFwicmMuZGF0ZVNlbGVjdG9yTXVsdGlwbGUuc2luZ2xlRGF0ZVwiOiBcIlNpbmdsZVwiLFxuXG4gIC8vIEZpbGVJbnB1dCBDb21wb25lbnRcbiAgXCJyYy5maWxlSW5wdXQuYnJvd3NlRmlsZXNcIjogXCJCcm93c2UgZmlsZXNcIixcbiAgXCJyYy5maWxlSW5wdXQuZHJvcFpvbmVcIjogXCJEcmFnIGZpbGVzIGhlcmUgb3IgY2xpY2sgdG8gdXBsb2FkXCIsXG4gIFwicmMuZmlsZUlucHV0LmZpbGVQbGFjZWhvbGRlclwiOiBcIkZpbGVcIixcbiAgXCJyYy5maWxlSW5wdXQuaW1hZ2VQbGFjZWhvbGRlclwiOiBcIkltYWdlXCIsXG4gIFwicmMuZmlsZUlucHV0Lm1heEZpbGVzRXhjZWVkZWRcIjogKG1heEZpbGVzOiBudW1iZXIpID0+IGBNYXhpbXVtICR7bWF4RmlsZXN9IGZpbGVzIGFsbG93ZWRgLFxuICBcInJjLmZpbGVJbnB1dC5wZW5kaW5nXCI6IFwiUGVuZGluZ1wiLFxuICBcInJjLmZpbGVJbnB1dC5yZW1vdmVcIjogXCJSZW1vdmVcIixcbiAgXCJyYy5maWxlSW5wdXQudXBsb2FkRmFpbGVkXCI6IFwiVXBsb2FkIGZhaWxlZFwiLFxuICBcInJjLmZpbGVJbnB1dC51cGxvYWRpbmdcIjogXCJVcGxvYWRpbmcuLi5cIixcblxuICAvLyBNb250aFBpY2tlck11bHRpcGxlIENvbXBvbmVudFxuICBcInJjLm1vbnRoUGlja2VyTXVsdGlwbGUuYWRkTW9udGhcIjogXCJBZGQgbW9udGhcIixcbiAgXCJyYy5tb250aFBpY2tlck11bHRpcGxlLmRhdGVSYW5nZVwiOiBcIlJhbmdlXCIsXG4gIFwicmMubW9udGhQaWNrZXJNdWx0aXBsZS5lbmREYXRlXCI6IFwiRW5kIGRhdGVcIixcbiAgXCJyYy5tb250aFBpY2tlck11bHRpcGxlLnBsYWNlaG9sZGVyXCI6IFwiUGljayBtb250aFwiLFxuICBcInJjLm1vbnRoUGlja2VyTXVsdGlwbGUuc2luZ2xlRGF0ZVwiOiBcIlNpbmdsZVwiLFxuICBcInJjLm1vbnRoUGlja2VyTXVsdGlwbGUuc3RhcnREYXRlXCI6IFwiU3RhcnQgZGF0ZVwiLFxuXG4gIC8vIE11bHRpU2VsZWN0IENvbXBvbmVudFxuICBcInJjLm11bHRpU2VsZWN0LmNsZWFyXCI6IFwiQ2xlYXIgYWxsXCIsXG4gIFwicmMubXVsdGlTZWxlY3QuY2xvc2VcIjogXCJDbG9zZVwiLFxuICBcInJjLm11bHRpU2VsZWN0Lm1vcmVJdGVtc1wiOiAoY291bnQ6IG51bWJlcikgPT4gYCske2NvdW50fSBtb3JlYCxcbiAgXCJyYy5tdWx0aVNlbGVjdC5ub09wdGlvbnNcIjogXCJObyBvcHRpb25zXCIsXG4gIFwicmMubXVsdGlTZWxlY3Qubm9PcHRpb25zU2VsZWN0ZWRcIjogXCJObyBvcHRpb25zIHNlbGVjdGVkXCIsXG4gIFwicmMubXVsdGlTZWxlY3Qubm9SZXN1bHRzXCI6IFwiTm8gcmVzdWx0c1wiLFxuICBcInJjLm11bHRpU2VsZWN0Lm9wdGlvbnNDb3VudFwiOiAoY291bnQ6IG51bWJlcikgPT4gYCR7Y291bnR9IG9wdGlvbnNgLFxuICBcInJjLm11bHRpU2VsZWN0LnNlbGVjdEFsbFwiOiBcIlNlbGVjdCBhbGxcIixcbiAgXCJyYy5tdWx0aVNlbGVjdC5zZWxlY3RQbGFjZWhvbGRlclwiOiBcIlNlbGVjdC4uLlwiLFxuXG4gIC8vIFBhZ2luYXRpb24gQ29tcG9uZW50XG4gIFwicmMucGFnaW5hdGlvbi5uZXh0XCI6IFwiTmV4dFwiLFxuICBcInJjLnBhZ2luYXRpb24ucHJldmlvdXNcIjogXCJQcmV2aW91c1wiLFxuICBcInJjLnBhZ2luYXRpb24uc2hvd2luZ1wiOiAoc3RhcnQ6IG51bWJlciwgZW5kOiBudW1iZXIsIHRvdGFsOiBudW1iZXIpID0+XG4gICAgYFNob3dpbmcgJHtzdGFydH0tJHtlbmR9IG9mICR7dG90YWx9YCxcblxuICAvLyBDYWxlbmRhciBDb21wb25lbnRcbiAgXCJyYy5jYWxlbmRhci5tb250aC4wXCI6IFwiSmFudWFyeVwiLFxuICBcInJjLmNhbGVuZGFyLm1vbnRoLjFcIjogXCJGZWJydWFyeVwiLFxuICBcInJjLmNhbGVuZGFyLm1vbnRoLjJcIjogXCJNYXJjaFwiLFxuICBcInJjLmNhbGVuZGFyLm1vbnRoLjNcIjogXCJBcHJpbFwiLFxuICBcInJjLmNhbGVuZGFyLm1vbnRoLjRcIjogXCJNYXlcIixcbiAgXCJyYy5jYWxlbmRhci5tb250aC41XCI6IFwiSnVuZVwiLFxuICBcInJjLmNhbGVuZGFyLm1vbnRoLjZcIjogXCJKdWx5XCIsXG4gIFwicmMuY2FsZW5kYXIubW9udGguN1wiOiBcIkF1Z3VzdFwiLFxuICBcInJjLmNhbGVuZGFyLm1vbnRoLjhcIjogXCJTZXB0ZW1iZXJcIixcbiAgXCJyYy5jYWxlbmRhci5tb250aC45XCI6IFwiT2N0b2JlclwiLFxuICBcInJjLmNhbGVuZGFyLm1vbnRoLjEwXCI6IFwiTm92ZW1iZXJcIixcbiAgXCJyYy5jYWxlbmRhci5tb250aC4xMVwiOiBcIkRlY2VtYmVyXCIsXG5cbiAgLy8gU29uYW11IEZpbHRlciBDb21wb25lbnRcbiAgXCJyYy5zb25hbXVGaWx0ZXIudGl0bGVcIjogXCJTb25hbXUgRmlsdGVyXCIsXG4gIFwicmMuc29uYW11RmlsdGVyLmFwcGx5XCI6IFwiQXBwbHlcIixcbiAgXCJyYy5zb25hbXVGaWx0ZXIucmVzZXRcIjogXCJSZXNldFwiLFxuICBcInJjLnNvbmFtdUZpbHRlci5hZGRSdWxlXCI6IFwiQWRkIFJ1bGVcIixcbiAgXCJyYy5zb25hbXVGaWx0ZXIubm9SdWxlc1lldFwiOiAnTm8gcnVsZXMgeWV0LiBDbGljayBcIisgQWRkIFJ1bGVcIiB0byBzdGFydC4nLFxuICBcInJjLnNvbmFtdUZpbHRlci5zZWxlY3RGaWVsZFwiOiBcIlNlbGVjdCBmaWVsZFwiLFxuICBcInJjLnNvbmFtdUZpbHRlci5zZWxlY3RPcGVyYXRvclwiOiBcIk9wZXJhdG9yXCIsXG4gIFwicmMuc29uYW11RmlsdGVyLnNlbGVjdE9wZXJhdG9yRmlyc3RcIjogXCJTZWxlY3Qgb3BlcmF0b3IgZmlyc3RcIixcbiAgXCJyYy5zb25hbXVGaWx0ZXIuZW50ZXJWYWx1ZVwiOiBcIkVudGVyIHZhbHVlXCIsXG4gIFwicmMuc29uYW11RmlsdGVyLmVudGVyTnVtYmVyXCI6IFwiRW50ZXIgbnVtYmVyXCIsXG4gIFwicmMuc29uYW11RmlsdGVyLm5vdFN1cHBvcnRlZFwiOiBcIk5vdCBzdXBwb3J0ZWRcIixcbiAgXCJyYy5zb25hbXVGaWx0ZXIuc3RhcnREYXRlXCI6IFwiU3RhcnQgZGF0ZVwiLFxuICBcInJjLnNvbmFtdUZpbHRlci5lbmREYXRlXCI6IFwiRW5kIGRhdGVcIixcbiAgXCJyYy5zb25hbXVGaWx0ZXIuYXBwbGllZEZpbHRlcnNcIjogXCLwn4yyIEFwcGxpZWQgU29uYW11RmlsdGVyc1wiLFxuXG4gIC8vIENvbW1vblxuICBcInJjLmNvbW1vbi5jYW5jZWxcIjogXCJDYW5jZWxcIixcbiAgXCJyYy5jb21tb24uc2F2ZVwiOiBcIlNhdmVcIixcbn0gYXMgY29uc3Q7XG5cbi8vIGVudGl0eS5qc29u7JeQ7IScIOy2lOy2nO2VnCBlbnRpdHkgbGFiZWxzIChkZWZhdWx0TG9jYWxlIOyghOyaqSlcbmNvbnN0IGVudGl0eUxhYmVscyA9IHtcbiAgXCJlbnRpdHkuUmVxdWVzdExvZ1wiOiBcIlJlcXVlc3RMb2dcIixcbiAgXCJlbnRpdHkuUmVxdWVzdExvZy5pZFwiOiBcIklEXCIsXG4gIFwiZW50aXR5LlJlcXVlc3RMb2cuY3JlYXRlZF9hdFwiOiBcIuuTseuhneydvOyLnFwiLFxuICBcImVudGl0eS5SZXF1ZXN0TG9nLnRva2VuX25hbWVcIjogXCLthqDtgbAg7J2066aEXCIsXG4gIFwiZW50aXR5LlJlcXVlc3RMb2cucHJvamVjdF9uYW1lXCI6IFwi7ZSE66Gc7KCd7Yq4IOydtOumhFwiLFxuICBcImVudGl0eS5SZXF1ZXN0TG9nLm1vZGVsX25hbWVcIjogXCLrqqjrjbgg7J2066aEXCIsXG4gIFwiZW50aXR5LlJlcXVlc3RMb2cucmVxdWVzdGVkX21vZGVsX25hbWVcIjogXCLsmpTssq0g66qo6424IOydtOumhCAoZmFsbGJhY2sg7KCEKVwiLFxuICBcImVudGl0eS5SZXF1ZXN0TG9nLmZhbGxiYWNrX2NvdW50XCI6IFwi66qo6424IGZhbGxiYWNrIO2an+yImFwiLFxuICBcImVudGl0eS5SZXF1ZXN0TG9nLnVzZXJfcHJvbXB0XCI6IFwi7IKs7Jqp7J6QIO2UhOuhrO2UhO2KuFwiLFxuICBcImVudGl0eS5SZXF1ZXN0TG9nLnN5c3RlbV9wcm9tcHRcIjogXCLsi5zsiqTthZwg7ZSE66Gs7ZSE7Yq4XCIsXG4gIFwiZW50aXR5LlJlcXVlc3RMb2cucmVzcG9uc2VcIjogXCJsbG0g7J2R64u1IOyghOusuFwiLFxuICBcImVudGl0eS5SZXF1ZXN0TG9nLmlucHV0X3Rva2Vuc1wiOiBcIuyeheugpSDthqDtgbBcIixcbiAgXCJlbnRpdHkuUmVxdWVzdExvZy5vdXRwdXRfdG9rZW5zXCI6IFwi7Lac66ClIO2GoO2BsFwiLFxuICBcImVudGl0eS5SZXF1ZXN0TG9nLmNhY2hlX3JlYWRfdG9rZW5zXCI6IFwi7LqQ7IucIOydveq4sCDthqDtgbBcIixcbiAgXCJlbnRpdHkuUmVxdWVzdExvZy5jYWNoZV9jcmVhdGlvbl90b2tlbnNcIjogXCLsupDsi5wg7IOd7ISxIO2GoO2BsFwiLFxuICBcImVudGl0eS5SZXF1ZXN0TG9nLmNhY2hlX2NyZWF0aW9uXzVtX3Rva2Vuc1wiOiBcIjXrtoQgVFRMIOy6kOyLnCDsg53shLEg7Yag7YGwXCIsXG4gIFwiZW50aXR5LlJlcXVlc3RMb2cuY2FjaGVfY3JlYXRpb25fMWhfdG9rZW5zXCI6IFwiMeyLnOqwhCBUVEwg7LqQ7IucIOyDneyEsSDthqDtgbBcIixcbiAgXCJlbnRpdHkuUmVxdWVzdExvZy5kdXJhdGlvbl9tc1wiOiBcIuydkeuLtSDshozsmpTsi5zqsIQobXMpXCIsXG4gIFwiZW50aXR5LlJlcXVlc3RMb2cudHRmdF9tc1wiOiBcImZpcnN0IGdlbiBUVEZUKG1zKVwiLFxuICBcImVudGl0eS5SZXF1ZXN0TG9nLmNvc3RfdXNkXCI6IFwiQVBJIOu5hOyaqVwiLFxuICBcImVudGl0eS5SZXF1ZXN0TG9nLmNvc3Rfc291cmNlXCI6IFwi67mE7JqpIOy2nOyymChwcm92aWRlci9wcmljaW5nX3RhYmxlL21peGVkKVwiLFxuICBcImVudGl0eS5SZXF1ZXN0TG9nLmltYWdlX2Nvc3RfdXNkXCI6IFwi7J2066+47KeAIOyDneyEsSDruYTsmqlcIixcbiAgXCJlbnRpdHkuUmVxdWVzdExvZy5pbWFnZV9jb3N0X21ldGhvZFwiOiBcIuydtOuvuOyngCDruYTsmqkg6rOE7IKwIOuwqeyLnVwiLFxuICBcImVudGl0eS5SZXF1ZXN0TG9nLmVmZm9ydFwiOiBcImVmZm9ydCBsZXZlbFwiLFxuICBcImVudGl0eS5SZXF1ZXN0TG9nLmhpc3RvcnlcIjogXCJpbmplY3RfaXRlbXMg7Z6I7Iqk7Yag66asXCIsXG4gIFwiZW50aXR5LlJlcXVlc3RMb2cudG9vbHNcIjogXCLsmpTssq3sl5Ag7J6l7LCp65CcIHRvb2wg7KCV7J2YIOuqqeuhnVwiLFxuICBcImVudGl0eS5SZXF1ZXN0TG9nLmpzb25fc2NoZW1hXCI6XG4gICAgXCJzdHJ1Y3R1cmVkIG91dHB1dCDsmpTssq3snZggSlNPTiBTY2hlbWEg7JuQ66y4IChkZXRhaWwg7J2YIHJlc3BvbnNlIO2DgOyehSDtkZzsi5zsmqkpXCIsXG4gIFwiZW50aXR5LlJlcXVlc3RMb2cuc3RhdHVzXCI6IFwi7Iuk7ZaJIOyDge2DnFwiLFxuICBcImVudGl0eS5SZXF1ZXN0TG9nLmVycm9yX21lc3NhZ2VcIjogXCLsl5Drn6wg66mU7Iuc7KeAXCIsXG4gIFwiZW50aXR5LlJlcXVlc3RMb2cucmVzcG9uc2VfanNvbl9va1wiOlxuICAgIFwic3RydWN0dXJlZChqc29uU2NoZW1hKSDsmpTssq3snZgg7J2R64u1IEpTT04g7YyM7IuxIOyEseqztSDsl6zrtoAuIOu5hHN0cnVjdHVyZWQg7JqU7LKt7J2AIG51bGxcIixcbiAgXCJlbnRpdHkuUmVxdWVzdExvZy50b29sX2NhbGxfY291bnRcIjogXCJ0b29sIGNhbGwg7Zqf7IiYXCIsXG4gIFwiZW50aXR5LlJlcXVlc3RMb2cuaXNfaW1hZ2VfZ2VuZXJhdGlvblwiOiBcIuydtOuvuOyngCDsg53shLEgdHVybiDsl6zrtoAgKHF1b3RhIOq3gOyGjeyaqSlcIixcbiAgXCJlbnRpdHkuUmVxdWVzdExvZy5pc19zdHJ1Y3R1cmVkXCI6IFwic3RydWN0dXJlZCBvdXRwdXQoanNvblNjaGVtYSkg7JqU7LKtIOyXrOu2gCAo66qp66GdIOq1rOu2hCDtkZzsi5zsmqkpXCIsXG4gIFwiZW51bS5SZXF1ZXN0TG9nT3JkZXJCeS5pZC1kZXNjXCI6IFwiSUTstZzsi6DsiJxcIixcbiAgXCJlbnVtLlJlcXVlc3RMb2dPcmRlckJ5LmlkLWFzY1wiOiBcIklE7Jik656Y65Cc7IicXCIsXG4gIFwiZW51bS5SZXF1ZXN0TG9nT3JkZXJCeS5jcmVhdGVkX2F0LWRlc2NcIjogXCLrk7HroZ3snbzsi5zstZzsi6DsiJxcIixcbiAgXCJlbnVtLlJlcXVlc3RMb2dPcmRlckJ5LmNyZWF0ZWRfYXQtYXNjXCI6IFwi65Ox66Gd7J287Iuc7Jik656Y65Cc7IicXCIsXG4gIFwiZW51bS5SZXF1ZXN0TG9nT3JkZXJCeS50dGZ0X21zLWRlc2NcIjogXCJUVEZU6ri07IicXCIsXG4gIFwiZW51bS5SZXF1ZXN0TG9nT3JkZXJCeS50dGZ0X21zLWFzY1wiOiBcIlRURlTsp6fsnYDsiJxcIixcbiAgXCJlbnVtLlJlcXVlc3RMb2dPcmRlckJ5LmR1cmF0aW9uX21zLWRlc2NcIjogXCLshozsmpTsi5zqsITquLTsiJxcIixcbiAgXCJlbnVtLlJlcXVlc3RMb2dPcmRlckJ5LmR1cmF0aW9uX21zLWFzY1wiOiBcIuyGjOyalOyLnOqwhOynp+ydgOyInFwiLFxuICBcImVudW0uUmVxdWVzdExvZ09yZGVyQnkuaW5wdXRfdG9rZW5zLWRlc2NcIjogXCLsnoXroKXthqDtgbDrp47snYDsiJxcIixcbiAgXCJlbnVtLlJlcXVlc3RMb2dPcmRlckJ5LmlucHV0X3Rva2Vucy1hc2NcIjogXCLsnoXroKXthqDtgbDsoIHsnYDsiJxcIixcbiAgXCJlbnVtLlJlcXVlc3RMb2dPcmRlckJ5Lm91dHB1dF90b2tlbnMtZGVzY1wiOiBcIuy2nOugpe2GoO2BsOunjuydgOyInFwiLFxuICBcImVudW0uUmVxdWVzdExvZ09yZGVyQnkub3V0cHV0X3Rva2Vucy1hc2NcIjogXCLstpzroKXthqDtgbDsoIHsnYDsiJxcIixcbiAgXCJlbnVtLlJlcXVlc3RMb2dPcmRlckJ5LmNhY2hlX3JlYWRfdG9rZW5zLWRlc2NcIjogXCLsupDsi5zsnb3quLDrp47snYDsiJxcIixcbiAgXCJlbnVtLlJlcXVlc3RMb2dPcmRlckJ5LmNhY2hlX3JlYWRfdG9rZW5zLWFzY1wiOiBcIuy6kOyLnOydveq4sOyggeydgOyInFwiLFxuICBcImVudW0uUmVxdWVzdExvZ09yZGVyQnkuY2FjaGVfY3JlYXRpb25fdG9rZW5zLWRlc2NcIjogXCLsupDsi5zsg53shLHrp47snYDsiJxcIixcbiAgXCJlbnVtLlJlcXVlc3RMb2dPcmRlckJ5LmNhY2hlX2NyZWF0aW9uX3Rva2Vucy1hc2NcIjogXCLsupDsi5zsg53shLHsoIHsnYDsiJxcIixcbiAgXCJlbnVtLlJlcXVlc3RMb2dPcmRlckJ5LmNvc3RfdXNkLWRlc2NcIjogXCLruYTsmqnrhpLsnYDsiJxcIixcbiAgXCJlbnVtLlJlcXVlc3RMb2dPcmRlckJ5LmNvc3RfdXNkLWFzY1wiOiBcIuu5hOyaqeuCruydgOyInFwiLFxuICBcImVudW0uUmVxdWVzdExvZ1NlYXJjaEZpZWxkLmlkXCI6IFwiSURcIixcbiAgXCJlbnVtLlJlcXVlc3RMb2dTZWFyY2hGaWVsZC50b2tlbl9uYW1lXCI6IFwi7Yag7YGw7J2066aEXCIsXG4gIFwiZW51bS5SZXF1ZXN0TG9nU2VhcmNoRmllbGQudXNlcl9wcm9tcHRcIjogXCLsgqzsmqnsnpAg7ZSE66Gs7ZSE7Yq4XCIsXG4gIFwiZW51bS5SZXF1ZXN0TG9nU3RhdHVzLnJ1bm5pbmdcIjogXCLsi6Ttlokg7KSRXCIsXG4gIFwiZW51bS5SZXF1ZXN0TG9nU3RhdHVzLnN1Y2NlZWRlZFwiOiBcIuyEseqztVwiLFxuICBcImVudW0uUmVxdWVzdExvZ1N0YXR1cy5lcnJvclwiOiBcIuyXkOufrFwiLFxuICBcImVudW0uUmVxdWVzdExvZ1N0YXR1cy5hYm9ydGVkXCI6IFwi7KSR64uoXCIsXG4gIFwiZW50aXR5LlJlcXVlc3RMb2dTdGVwXCI6IFwiUmVxdWVzdExvZ1N0ZXBcIixcbiAgXCJlbnRpdHkuUmVxdWVzdExvZ1N0ZXAuaWRcIjogXCJJRFwiLFxuICBcImVudGl0eS5SZXF1ZXN0TG9nU3RlcC5jcmVhdGVkX2F0XCI6IFwi65Ox66Gd7J287IucXCIsXG4gIFwiZW50aXR5LlJlcXVlc3RMb2dTdGVwLnJlcXVlc3RfbG9nXCI6IFwi67aA66qoIHJlcXVlc3QgbG9nIElEXCIsXG4gIFwiZW50aXR5LlJlcXVlc3RMb2dTdGVwLnN0ZXBfaW5kZXhcIjogXCJhaS1zZGsgc3RlcCBudW1iZXIgKDAtYmFzZWQpXCIsXG4gIFwiZW50aXR5LlJlcXVlc3RMb2dTdGVwLnR5cGVcIjogXCJzdGVwIO2DgOyehVwiLFxuICBcImVudGl0eS5SZXF1ZXN0TG9nU3RlcC5tb2RlbF9uYW1lXCI6IFwi7Iuk7KCcIHNlcnZpbmcg66qo6424XCIsXG4gIFwiZW50aXR5LlJlcXVlc3RMb2dTdGVwLnJlcXVlc3RlZF9tb2RlbF9uYW1lXCI6IFwi7JqU7LKtIOuqqOuNuCAoZmFsbGJhY2sg7KCEKVwiLFxuICBcImVudGl0eS5SZXF1ZXN0TG9nU3RlcC5mYWxsYmFja19jb3VudFwiOiBcIuuqqOuNuCBmYWxsYmFjayDtmp/siJhcIixcbiAgXCJlbnRpdHkuUmVxdWVzdExvZ1N0ZXAuaW5wdXRfdG9rZW5zXCI6IFwi7J6F66ClIO2GoO2BsCAoZ2VuZXJhdGUpXCIsXG4gIFwiZW50aXR5LlJlcXVlc3RMb2dTdGVwLm91dHB1dF90b2tlbnNcIjogXCLstpzroKUg7Yag7YGwIChnZW5lcmF0ZSlcIixcbiAgXCJlbnRpdHkuUmVxdWVzdExvZ1N0ZXAuY2FjaGVfcmVhZF90b2tlbnNcIjogXCLsupDsi5wg7J296riwIO2GoO2BsFwiLFxuICBcImVudGl0eS5SZXF1ZXN0TG9nU3RlcC5jYWNoZV9jcmVhdGlvbl90b2tlbnNcIjogXCLsupDsi5wg7IOd7ISxIO2GoO2BsFwiLFxuICBcImVudGl0eS5SZXF1ZXN0TG9nU3RlcC5jYWNoZV9jcmVhdGlvbl81bV90b2tlbnNcIjogXCI167aEIFRUTCDsupDsi5wg7IOd7ISxIO2GoO2BsFwiLFxuICBcImVudGl0eS5SZXF1ZXN0TG9nU3RlcC5jYWNoZV9jcmVhdGlvbl8xaF90b2tlbnNcIjogXCIx7Iuc6rCEIFRUTCDsupDsi5wg7IOd7ISxIO2GoO2BsFwiLFxuICBcImVudGl0eS5SZXF1ZXN0TG9nU3RlcC5jb3N0X3VzZFwiOiBcInN0ZXAg67mE7JqpIChtaWNyby1VU0QpXCIsXG4gIFwiZW50aXR5LlJlcXVlc3RMb2dTdGVwLmNvc3Rfc291cmNlXCI6IFwi67mE7JqpIOy2nOyymChwcm92aWRlci9wcmljaW5nX3RhYmxlKVwiLFxuICBcImVudGl0eS5SZXF1ZXN0TG9nU3RlcC5kdXJhdGlvbl9tc1wiOiBcIuyGjOyalOyLnOqwhChtcylcIixcbiAgXCJlbnRpdHkuUmVxdWVzdExvZ1N0ZXAudHRmdF9tc1wiOiBcIkdlbiBUVEZUKG1zKVwiLFxuICBcImVudGl0eS5SZXF1ZXN0TG9nU3RlcC5maW5pc2hfcmVhc29uXCI6IFwi7JmE66OMIOyCrOycoFwiLFxuICBcImVudGl0eS5SZXF1ZXN0TG9nU3RlcC5yZWFzb25pbmdfdGV4dFwiOiBcInJlYXNvbmluZyDthY3siqTtirhcIixcbiAgXCJlbnRpdHkuUmVxdWVzdExvZ1N0ZXAucmVhc29uaW5nX3Rva2Vuc1wiOiBcInJlYXNvbmluZyDthqDtgbAg7IiYXCIsXG4gIFwiZW50aXR5LlJlcXVlc3RMb2dTdGVwLnRvb2xfY2FsbF9pbmRleFwiOiBcIuqwmeydgCBzdGVwIOuCtCB0b29sIGNhbGwg7Iic7IScXCIsXG4gIFwiZW50aXR5LlJlcXVlc3RMb2dTdGVwLnRvb2xfY2FsbF9pZFwiOiBcInRvb2wgY2FsbCBJRFwiLFxuICBcImVudGl0eS5SZXF1ZXN0TG9nU3RlcC50b29sX25hbWVcIjogXCJ0b29sIOydtOumhFwiLFxuICBcImVudGl0eS5SZXF1ZXN0TG9nU3RlcC50b29sX2FyZ3NcIjogXCJ0b29sIOyduOyekCAoSlNPTiBzdHJpbmcpXCIsXG4gIFwiZW50aXR5LlJlcXVlc3RMb2dTdGVwLnRvb2xfcmVzdWx0XCI6IFwidG9vbCDqsrDqs7wgKEpTT04gc3RyaW5nKVwiLFxuICBcImVudGl0eS5SZXF1ZXN0TG9nU3RlcC50b29sX2R1cmF0aW9uX21zXCI6IFwidG9vbCDsi6Ttlokg7IaM7JqU7Iuc6rCEKG1zKVwiLFxuICBcImVudGl0eS5SZXF1ZXN0TG9nU3RlcC5lcnJvclwiOiBcInN0ZXAg7JeQ65+sIOuplOyLnOyngFwiLFxuICBcImVudW0uUmVxdWVzdExvZ1N0ZXBUeXBlLmdlbmVyYXRlXCI6IFwiTExNIOyDneyEsVwiLFxuICBcImVudW0uUmVxdWVzdExvZ1N0ZXBUeXBlLnRvb2xfY2FsbFwiOiBcIlRvb2wg7Zi47LacXCIsXG4gIFwiZW51bS5SZXF1ZXN0TG9nU3RlcE9yZGVyQnkuaWQtYXNjXCI6IFwiSUTsiJxcIixcbiAgXCJlbnVtLlJlcXVlc3RMb2dTdGVwU2VhcmNoRmllbGQuaWRcIjogXCJJRFwiLFxuICBcImVudGl0eS5TZXR0aW5nXCI6IFwiU2V0dGluZ1wiLFxuICBcImVudGl0eS5TZXR0aW5nLmlkXCI6IFwiSURcIixcbiAgXCJlbnRpdHkuU2V0dGluZy5jcmVhdGVkX2F0XCI6IFwi65Ox66Gd7J287IucXCIsXG4gIFwiZW50aXR5LlNldHRpbmcua2V5XCI6IFwi7ISk7KCVIO2CpCAo7JiIOiBzbGFjay5lbmFibGVkKVwiLFxuICBcImVudGl0eS5TZXR0aW5nLnZhbHVlXCI6IFwi7ISk7KCVIOqwkiAo66y47J6Q7Je0IOyggOyepSwg7JWx7JeQ7IScIO2MjOyLscK36rKA7KadKVwiLFxuICBcImVudGl0eS5TZXR0aW5nLnVwZGF0ZWRfYXRcIjogXCLstZzsooUg7IiY7KCV7J287IucXCIsXG4gIFwiZW51bS5TZXR0aW5nT3JkZXJCeS5rZXktYXNjXCI6IFwi7YKk7IicXCIsXG4gIFwiZW51bS5TZXR0aW5nU2VhcmNoRmllbGQua2V5XCI6IFwi7YKkXCIsXG4gIFwiZW50aXR5LlRva2VuXCI6IFwiVG9rZW5cIixcbiAgXCJlbnRpdHkuVG9rZW4uaWRcIjogXCJJRFwiLFxuICBcImVudGl0eS5Ub2tlbi5jcmVhdGVkX2F0XCI6IFwi65Ox66Gd7J287IucXCIsXG4gIFwiZW50aXR5LlRva2VuLnByb3ZpZGVyXCI6IFwi7ZSE66Gc67CU7J20642UXCIsXG4gIFwiZW50aXR5LlRva2VuLmNyZWRlbnRpYWxzXCI6IFwi7J247KadIOygleuztCAoSlNPTkIpXCIsXG4gIFwiZW50aXR5LlRva2VuLm5hbWVcIjogXCLthqDtgbAg7J2066aEXCIsXG4gIFwiZW50aXR5LlRva2VuLmFjdGl2ZVwiOiBcIu2ZnOyEsSDsl6zrtoBcIixcbiAgXCJlbnRpdHkuVG9rZW4ucmVhdXRoX3JlcXVpcmVkXCI6IFwi7J247KadIOunjOujjOuhnCDsnqzroZzqt7jsnbjsnbQg7ZWE7JqU7ZWc7KeAIOyXrOu2gFwiLFxuICBcImVudGl0eS5Ub2tlbi5vcmRcIjogXCLsoJXroKwg7Iic7IScXCIsXG4gIFwiZW50aXR5LlRva2VuLnF1b3RhX3RocmVzaG9sZFwiOiBcInF1b3RhIOyCrOyaqeuloCDsnoTqs4TsuZgoJSkuIG51bGzsnbTrqbQg66+47ISk7KCVXCIsXG4gIFwiZW50aXR5LlRva2VuLndlaWdodFwiOiBcIuqwgOykkSDrnbzsmrTrk5zroZzruYgg65287Jqw7YyFIOqwgOykkey5mCAoMS4uMTAwKVwiLFxuICBcImVudGl0eS5Ub2tlbi5rZWVwYWxpdmVfZW5hYmxlZFwiOiBcIkFudGhyb3BpYyA17Iuc6rCEIO2GoO2BsCDsnIjrj4TsmrAga2VlcGFsaXZlIOyCrOyaqSDsl6zrtoBcIixcbiAgXCJlbnVtLlRva2VuT3JkZXJCeS5pZC1kZXNjXCI6IFwiSUTstZzsi6DsiJxcIixcbiAgXCJlbnVtLlRva2VuT3JkZXJCeS5vcmQtYXNjXCI6IFwi7Iic7ISc7IicXCIsXG4gIFwiZW51bS5Ub2tlblNlYXJjaEZpZWxkLmlkXCI6IFwiSURcIixcbiAgXCJlbnVtLlRva2VuU2VhcmNoRmllbGQubmFtZVwiOiBcIuydtOumhFwiLFxufSBhcyBjb25zdDtcblxuLy8gZGVmYXVsdExvY2FsZeydmCBkaWN0aW9uYXJ566W8IOq4sOykgOycvOuhnCDtgqQg7LaU7LacXG50eXBlIFJDS2V5cyA9IHR5cGVvZiByY0tleXNLbztcbnR5cGUgUHJvamVjdERpY3Rpb25hcnkgPSB0eXBlb2Yga287XG50eXBlIEVudGl0eUxhYmVscyA9IHR5cGVvZiBlbnRpdHlMYWJlbHM7XG50eXBlIFJhd01lcmdlZERpY3Rpb25hcnkgPSBSQ0tleXMgJlxuICBPbWl0PEVudGl0eUxhYmVscywga2V5b2YgKFJDS2V5cyAmIFByb2plY3REaWN0aW9uYXJ5KT4gJlxuICBQcm9qZWN0RGljdGlvbmFyeTtcblxuLy8g7YKk64qUIOycoOyngO2VmOuQmCwg6rCSIO2DgOyeheydgCBzdHJpbmcg65iQ64qUIO2VqOyImOuhnCDsnbzrsJjtmZQgKOuLpOuluCBsb2NhbGXsnZgg66as7YSw65+0IO2DgOyehSDstqnrj4wg67Cp7KeAKVxuZXhwb3J0IHR5cGUgTWVyZ2VkRGljdGlvbmFyeSA9IHtcbiAgW0sgaW4ga2V5b2YgUmF3TWVyZ2VkRGljdGlvbmFyeV06IFJhd01lcmdlZERpY3Rpb25hcnlbS10gZXh0ZW5kcyAoLi4uYXJnczogaW5mZXIgUCkgPT4gc3RyaW5nXG4gICAgPyAoLi4uYXJnczogUCkgPT4gc3RyaW5nXG4gICAgOiBzdHJpbmc7XG59O1xuZXhwb3J0IHR5cGUgRGljdEtleSA9IGtleW9mIE1lcmdlZERpY3Rpb25hcnk7XG5leHBvcnQgdHlwZSBMb2NhbGl6ZWRTdHJpbmcgPSBzdHJpbmcgJiB7IF9fYnJhbmQ6IFwiTG9jYWxpemVkU3RyaW5nXCIgfTtcblxuZXhwb3J0IGZ1bmN0aW9uIGRlZmluZUxvY2FsZShkaWN0OiBQYXJ0aWFsPE1lcmdlZERpY3Rpb25hcnk+KSB7XG4gIHJldHVybiBkaWN0O1xufVxuXG4vLyDqsIEgbG9jYWxl67OE66GcIHJjLWtleXMgKyBlbnRpdHkgbGFiZWxzICsg7ZSE66Gc7KCd7Yq4IGRpY3Qg7ZWp7LmoXG5jb25zdCBkaWN0aW9uYXJpZXM6IFJlY29yZDxzdHJpbmcsIFBhcnRpYWw8TWVyZ2VkRGljdGlvbmFyeT4+ID0ge1xuICBrbzogeyAuLi5yY0tleXNLbywgLi4uZW50aXR5TGFiZWxzLCAuLi5rbyB9LFxuICBlbjogeyAuLi5yY0tleXNFbiwgLi4uZW4gfSxcbn07XG5cbnR5cGUgU0RSZXR1cm5UeXBlPEsgZXh0ZW5kcyBEaWN0S2V5PiA9IE1lcmdlZERpY3Rpb25hcnlbS10gZXh0ZW5kcyAoLi4uYXJnczogaW5mZXIgUCkgPT4gc3RyaW5nXG4gID8gKC4uLmFyZ3M6IFApID0+IExvY2FsaXplZFN0cmluZ1xuICA6IExvY2FsaXplZFN0cmluZztcblxuZnVuY3Rpb24gZ2V0RGljdFZhbHVlPEsgZXh0ZW5kcyBEaWN0S2V5PihrZXk6IEssIGxvY2FsZTogc3RyaW5nKTogU0RSZXR1cm5UeXBlPEs+IHtcbiAgLy8gMS4g7KeA7KCV65CcIGxvY2FsZeyXkOyEnCDsobDtmoxcbiAgY29uc3QgZGljdCA9IGRpY3Rpb25hcmllc1tsb2NhbGVdO1xuICBpZiAoZGljdD8uW2tleV0gIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBkaWN0W2tleV0gYXMgdW5rbm93biBhcyBTRFJldHVyblR5cGU8Sz47XG4gIH1cblxuICAvLyAyLiBkZWZhdWx0IGxvY2FsZeyXkOyEnCDsobDtmoxcbiAgaWYgKGxvY2FsZSAhPT0gREVGQVVMVF9MT0NBTEUgJiYgZGljdGlvbmFyaWVzW0RFRkFVTFRfTE9DQUxFXT8uW2tleV0gIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBkaWN0aW9uYXJpZXNbREVGQVVMVF9MT0NBTEVdW2tleV0gYXMgdW5rbm93biBhcyBTRFJldHVyblR5cGU8Sz47XG4gIH1cblxuICAvLyAzLiBzdXBwb3J0ZWQgbG9jYWxlcyDsiJztmoxcbiAgZm9yIChjb25zdCBzdXBwb3J0ZWRMb2NhbGUgb2YgU1VQUE9SVEVEX0xPQ0FMRVMpIHtcbiAgICBpZiAoc3VwcG9ydGVkTG9jYWxlICE9PSBsb2NhbGUgJiYgc3VwcG9ydGVkTG9jYWxlICE9PSBERUZBVUxUX0xPQ0FMRSkge1xuICAgICAgaWYgKGRpY3Rpb25hcmllc1tzdXBwb3J0ZWRMb2NhbGVdPy5ba2V5XSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBkaWN0aW9uYXJpZXNbc3VwcG9ydGVkTG9jYWxlXVtrZXldIGFzIHVua25vd24gYXMgU0RSZXR1cm5UeXBlPEs+O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIDQuIOuqqOuRkCDsi6TtjKgg7IucIGtleSDrsJjtmZhcbiAgcmV0dXJuIGtleSBhcyB1bmtub3duIGFzIFNEUmV0dXJuVHlwZTxLPjtcbn1cblxuLyoqXG4gKiBTb25hbXUgRGljdGlvbmFyeSDtlajsiJhcbiAqIGxvY2FsZeyXkCDrp57ripQg67KI7JetIO2FjeyKpO2KuOulvCDrsJjtmZjtlanri4jri6QuXG4gKlxuICogQGV4YW1wbGVcbiAqIFNEKFwiY29tbW9uLnNhdmVcIikgIC8vIOKGkiBcIuyggOyepVwiIChMb2NhbGl6ZWRTdHJpbmcpXG4gKiBTRChcInVzZXIubm90Rm91bmRcIikoMSkgIC8vIOKGkiBcIuyhtOyerO2VmOyngCDslYrripQgVXNlciBJRCAxXCIgKExvY2FsaXplZFN0cmluZylcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIFNEPEsgZXh0ZW5kcyBEaWN0S2V5PihrZXk6IEspOiBTRFJldHVyblR5cGU8Sz4ge1xuICBjb25zdCBsb2NhbGUgPSBnZXRDdXJyZW50TG9jYWxlKCk7XG4gIHJldHVybiBnZXREaWN0VmFsdWUoa2V5LCBsb2NhbGUpO1xufVxuXG4vKipcbiAqIO2KueyglSBsb2NhbGXsnZgg67KI7JetIO2FjeyKpO2KuOulvCDrsJjtmZjtlZjripQg7ZWo7IiY66W8IOyDneyEse2VqeuLiOuLpC5cbiAqXG4gKiBAZXhhbXBsZVxuICogY29uc3QgRU4gPSBTRC5sb2NhbGUoXCJlblwiKTtcbiAqIEVOKFwiY29tbW9uLnNhdmVcIikgIC8vIOKGkiBcIlNhdmVcIlxuICovXG5TRC5sb2NhbGUgPVxuICAobG9jYWxlOiAodHlwZW9mIFNVUFBPUlRFRF9MT0NBTEVTKVtudW1iZXJdKSA9PlxuICA8SyBleHRlbmRzIERpY3RLZXk+KGtleTogSyk6IFNEUmV0dXJuVHlwZTxLPiA9PiB7XG4gICAgcmV0dXJuIGdldERpY3RWYWx1ZShrZXksIGxvY2FsZSk7XG4gIH07XG5cbi8vIExvY2FsaXplZCDqsIDriqXtlZwgQ29sdW1uIO2DgOyehSDqs4TsgrBcbnR5cGUgTG9jYWxpemVkQmFzZUNvbHVtbjxUPiA9IHtcbiAgW0sgaW4ga2V5b2YgVCAmIHN0cmluZ106IEsgZXh0ZW5kcyBgJHtpbmZlciBCYXNlfV8keyh0eXBlb2YgU1VQUE9SVEVEX0xPQ0FMRVMpW251bWJlcl19YFxuICAgID8gQmFzZVxuICAgIDogSztcbn1ba2V5b2YgVCAmIHN0cmluZ107XG5cbi8qKlxuICogbG9jYWxl7JeQIOuUsOudvCDsoIHsoIjtlZwg7Lus65+8IOqwkuydhCDrsJjtmZjtlanri4jri6QuXG4gKiBEQuyXkCBuYW1lLCBuYW1lX2tvLCBuYW1lX2Vu7LKY65+8IGxvY2FsaXplZCBjb2x1bW7snbQg7J6I7J2EIOuVjCDsgqzsmqntlanri4jri6QuXG4gKlxuICog7Jqw7ISg7Iic7JyEICjsp4Dsm5Ag66Gc7LyA7J287J2AIGtvL2pwL2Vu7J206rOgLCDshJzruYTsiqTsnZgg6riw67O4IOuhnOy8gOydvOydgCBrbywg7IKs7Jqp7J6Q7J2YIOuhnOy8gOydvOydgCBqcOydvCDrlYwpOiBjb2x1bW5fanAg4oaSIGNvbHVtbiDihpIgY29sdW1uX2tvIOKGkiBjb2x1bW5fZW5cbiAqIOyasOyEoOyInOychCAo7KeA7JuQIOuhnOy8gOydvOydgCBrby9qcC9lbuydtOqzoCwg7ISc67mE7Iqk7J2YIOq4sOuzuCDroZzsvIDsnbzsnYAgZW4sIOyCrOyaqeyekOydmCDroZzsvIDsnbzsnYAga2/snbwg65WMKTogY29sdW1uX2tvIOKGkiBjb2x1bW4g4oaSIGNvbHVtbl9lbiDihpIgY29sdW1uX2pwXG4gKlxuICogQGV4YW1wbGVcbiAqIGxvY2FsaXplZENvbHVtbih0YWcsIFwibmFtZVwiKVxuICovXG50eXBlIExvY2FsaXplZENvbHVtblNjYWxhclZhbHVlID0gc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IGJpZ2ludDtcbnR5cGUgTG9jYWxpemVkQ29sdW1uVmFsdWUgPSBzdHJpbmcgfCBzdHJpbmdbXTtcbnR5cGUgTmVzdGVkTG9jYWxpemVkQ29sdW1uVmFsdWVGcm9tPFY+ID0gViBleHRlbmRzIHN0cmluZ1xuICA/IHN0cmluZ1xuICA6IFYgZXh0ZW5kcyByZWFkb25seSBzdHJpbmdbXVxuICAgID8gc3RyaW5nW11cbiAgICA6IG5ldmVyO1xudHlwZSBMb2NhbGl6ZWRDb2x1bW5WYWx1ZUZyb208Vj4gPSBWIGV4dGVuZHMgc3RyaW5nXG4gID8gc3RyaW5nXG4gIDogViBleHRlbmRzIHJlYWRvbmx5IHN0cmluZ1tdXG4gICAgPyBzdHJpbmdbXVxuICAgIDogViBleHRlbmRzIG51bWJlciB8IGJvb2xlYW4gfCBiaWdpbnRcbiAgICAgID8gc3RyaW5nXG4gICAgICA6IFYgZXh0ZW5kcyBQYXJ0aWFsPFJlY29yZDwodHlwZW9mIFNVUFBPUlRFRF9MT0NBTEVTKVtudW1iZXJdLCBpbmZlciBMVj4+XG4gICAgICAgID8gTmVzdGVkTG9jYWxpemVkQ29sdW1uVmFsdWVGcm9tPExWPlxuICAgICAgICA6IG5ldmVyO1xudHlwZSBMb2NhbGl6ZWRDb2x1bW5DYW5kaWRhdGU8VCwgSyBleHRlbmRzIHN0cmluZz4gPVxuICB8IChLIGV4dGVuZHMga2V5b2YgVCA/IFRbS10gOiBuZXZlcilcbiAgfCB7XG4gICAgICBbTCBpbiAodHlwZW9mIFNVUFBPUlRFRF9MT0NBTEVTKVtudW1iZXJdXTogYCR7S31fJHtMfWAgZXh0ZW5kcyBrZXlvZiBUXG4gICAgICAgID8gVFtgJHtLfV8ke0x9YF1cbiAgICAgICAgOiBuZXZlcjtcbiAgICB9Wyh0eXBlb2YgU1VQUE9SVEVEX0xPQ0FMRVMpW251bWJlcl1dO1xudHlwZSBMb2NhbGl6ZWRDb2x1bW5SZXR1cm48VCwgSyBleHRlbmRzIHN0cmluZz4gPVxuICB8IExvY2FsaXplZENvbHVtblZhbHVlRnJvbTxMb2NhbGl6ZWRDb2x1bW5DYW5kaWRhdGU8VCwgSz4+XG4gIHwgdW5kZWZpbmVkO1xudHlwZSBMb2NhbGVWYWx1ZU1hcCA9IFBhcnRpYWw8UmVjb3JkPCh0eXBlb2YgU1VQUE9SVEVEX0xPQ0FMRVMpW251bWJlcl0sIHVua25vd24+PjtcblxuZnVuY3Rpb24gaXNMb2NhbGl6ZWRDb2x1bW5WYWx1ZSh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIExvY2FsaXplZENvbHVtblZhbHVlIHtcbiAgcmV0dXJuIChcbiAgICB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgfHxcbiAgICAoQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiYgdmFsdWUuZXZlcnkoKGl0ZW0pID0+IHR5cGVvZiBpdGVtID09PSBcInN0cmluZ1wiKSlcbiAgKTtcbn1cblxuZnVuY3Rpb24gaXNMb2NhbGl6ZWRDb2x1bW5TY2FsYXJWYWx1ZSh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIExvY2FsaXplZENvbHVtblNjYWxhclZhbHVlIHtcbiAgcmV0dXJuIFtcInN0cmluZ1wiLCBcIm51bWJlclwiLCBcImJvb2xlYW5cIiwgXCJiaWdpbnRcIl0uaW5jbHVkZXModHlwZW9mIHZhbHVlKTtcbn1cblxuZnVuY3Rpb24gaXNFbXB0eUxvY2FsaXplZENvbHVtblZhbHVlKHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgbnVsbCB8IHVuZGVmaW5lZCB8IFwiXCIge1xuICByZXR1cm4gdmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gXCJcIjtcbn1cblxuZnVuY3Rpb24gZ2V0TmVzdGVkTG9jYWxlVmFsdWU8VCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBLIGV4dGVuZHMgTG9jYWxpemVkQmFzZUNvbHVtbjxUPj4oXG4gIHJvdzogVCxcbiAgY29sdW1uOiBLLFxuICBsb2NhbGU6ICh0eXBlb2YgU1VQUE9SVEVEX0xPQ0FMRVMpW251bWJlcl0sXG4pOiB1bmtub3duIHtcbiAgY29uc3QgY29sdW1uVmFsdWUgPSByb3dbY29sdW1uXTtcbiAgaWYgKGNvbHVtblZhbHVlID09PSBudWxsIHx8IHR5cGVvZiBjb2x1bW5WYWx1ZSAhPT0gXCJvYmplY3RcIiB8fCBBcnJheS5pc0FycmF5KGNvbHVtblZhbHVlKSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICByZXR1cm4gKGNvbHVtblZhbHVlIGFzIExvY2FsZVZhbHVlTWFwKVtsb2NhbGVdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbG9jYWxpemVkQ29sdW1uPFxuICBUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gIEsgZXh0ZW5kcyBMb2NhbGl6ZWRCYXNlQ29sdW1uPFQ+LFxuPihyb3c6IFQsIGNvbHVtbjogSyk6IExvY2FsaXplZENvbHVtblJldHVybjxULCBLPiB7XG4gIGNvbnN0IGN1cnJlbnRMb2NhbGUgPSBnZXRDdXJyZW50TG9jYWxlKCk7XG4gIGNvbnN0IGxvY2FsZSA9IFNVUFBPUlRFRF9MT0NBTEVTLmluY2x1ZGVzKGN1cnJlbnRMb2NhbGUpID8gY3VycmVudExvY2FsZSA6IERFRkFVTFRfTE9DQUxFO1xuICBjb25zdCBvdGhlckxvY2FsZXMgPSBTVVBQT1JURURfTE9DQUxFUy5maWx0ZXIoXG4gICAgKGw6IHN0cmluZykgPT4gbCAhPT0gbG9jYWxlICYmIGwgIT09IERFRkFVTFRfTE9DQUxFLFxuICApO1xuICBjb25zdCBsb2NhbGl6ZWRLZXkgPSAoY29sdW1uOiBLLCBsb2NhbGU6ICh0eXBlb2YgU1VQUE9SVEVEX0xPQ0FMRVMpW251bWJlcl0pID0+XG4gICAgYCR7Y29sdW1ufV8ke2xvY2FsZX1gO1xuICBjb25zdCB2YWx1ZXMgPSBbXG4gICAgeyB2YWx1ZTogcm93W2xvY2FsaXplZEtleShjb2x1bW4sIGxvY2FsZSldLCBzb3VyY2U6IFwiZGlyZWN0XCIgfSxcbiAgICB7IHZhbHVlOiBnZXROZXN0ZWRMb2NhbGVWYWx1ZShyb3csIGNvbHVtbiwgbG9jYWxlKSwgc291cmNlOiBcIm5lc3RlZFwiIH0sXG4gICAgeyB2YWx1ZTogcm93W2NvbHVtbl0sIHNvdXJjZTogXCJkaXJlY3RcIiB9LFxuICAgIHsgdmFsdWU6IHJvd1tsb2NhbGl6ZWRLZXkoY29sdW1uLCBERUZBVUxUX0xPQ0FMRSldLCBzb3VyY2U6IFwiZGlyZWN0XCIgfSxcbiAgICB7IHZhbHVlOiBnZXROZXN0ZWRMb2NhbGVWYWx1ZShyb3csIGNvbHVtbiwgREVGQVVMVF9MT0NBTEUpLCBzb3VyY2U6IFwibmVzdGVkXCIgfSxcbiAgICAuLi5vdGhlckxvY2FsZXMuZmxhdE1hcCgobCkgPT4gW1xuICAgICAgeyB2YWx1ZTogcm93W2xvY2FsaXplZEtleShjb2x1bW4sIGwpXSwgc291cmNlOiBcImRpcmVjdFwiIH0sXG4gICAgICB7IHZhbHVlOiBnZXROZXN0ZWRMb2NhbGVWYWx1ZShyb3csIGNvbHVtbiwgbCksIHNvdXJjZTogXCJuZXN0ZWRcIiB9LFxuICAgIF0pLFxuICBdO1xuXG4gIGZvciAoY29uc3QgeyB2YWx1ZSwgc291cmNlIH0gb2YgdmFsdWVzKSB7XG4gICAgaWYgKCFpc0VtcHR5TG9jYWxpemVkQ29sdW1uVmFsdWUodmFsdWUpICYmIGlzTG9jYWxpemVkQ29sdW1uVmFsdWUodmFsdWUpKSB7XG4gICAgICByZXR1cm4gdmFsdWUgYXMgTG9jYWxpemVkQ29sdW1uUmV0dXJuPFQsIEs+O1xuICAgIH1cbiAgICBpZiAoXG4gICAgICBzb3VyY2UgPT09IFwiZGlyZWN0XCIgJiZcbiAgICAgICFpc0VtcHR5TG9jYWxpemVkQ29sdW1uVmFsdWUodmFsdWUpICYmXG4gICAgICBpc0xvY2FsaXplZENvbHVtblNjYWxhclZhbHVlKHZhbHVlKVxuICAgICkge1xuICAgICAgcmV0dXJuIFN0cmluZyh2YWx1ZSkgYXMgTG9jYWxpemVkQ29sdW1uUmV0dXJuPFQsIEs+O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogRW51beydmCBsb2NhbGl6ZWQgbGFiZWxz66W8IFByb3h566GcIOuwmO2ZmO2VqeuLiOuLpC5cbiAqIFNlbGVjdCDsu7Ttj6zrhIztirgg65Ox7JeQ7IScIEVudW1MYWJlbFtrZXldIOuMgOyLoCDsgqzsmqntlanri4jri6QuXG4gKlxuICogQGV4YW1wbGVcbiAqIFNELmVudW1MYWJlbHMoXCJUYWdPcmRlckJ5XCIpW2tleV0gIC8vIOKGkiDtmITsnqwgbG9jYWxl7J2YIOudvOuyqFxuICovXG5TRC5lbnVtTGFiZWxzID0gKGVudW1OYW1lOiBzdHJpbmcpOiBSZWNvcmQ8c3RyaW5nLCBMb2NhbGl6ZWRTdHJpbmc+ID0+IHtcbiAgcmV0dXJuIG5ldyBQcm94eSh7fSBhcyBSZWNvcmQ8c3RyaW5nLCBMb2NhbGl6ZWRTdHJpbmc+LCB7XG4gICAgZ2V0KF8sIGtleTogc3RyaW5nIHwgc3ltYm9sKSB7XG4gICAgICBpZiAodHlwZW9mIGtleSA9PT0gXCJzeW1ib2xcIikge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBkaWN0S2V5ID0gYGVudW0uJHtlbnVtTmFtZX0uJHtrZXl9YCBhcyBEaWN0S2V5O1xuICAgICAgcmV0dXJuIGdldERpY3RWYWx1ZShkaWN0S2V5LCBnZXRDdXJyZW50TG9jYWxlKCkpO1xuICAgIH0sXG4gIH0pO1xufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFPQSxNQUFNLGlCQUFpQjtBQUN2QixNQUFNLG9CQUFvQixDQUFDLE1B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
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { monitLogSink } from "./application/monit/log-buffer.js";
|
|
2
|
-
import { QgridDispatcher } from "./application/qgrid/qgrid.dispatcher.js";
|
|
3
2
|
import { loadSettings, setSettingChangeHandler } from "./application/setting/setting.store.js";
|
|
3
|
+
import { OpenAIDispatcher } from "./utils/providers/openai/openai-dispatcher.js";
|
|
4
|
+
import { QgridDispatcher } from "./application/qgrid/qgrid.dispatcher.js";
|
|
4
5
|
import { rescheduleExpiredTokenReminder, startExpiredTokenReminder, stopExpiredTokenReminder } from "./application/qgrid/expired-token-reminder.js";
|
|
5
6
|
import { stopOpenAICallbackRelay } from "./utils/providers/openai/openai-callback-relay.js";
|
|
6
7
|
import { QgridFrame } from "./application/qgrid/qgrid.frame.js";
|
|
@@ -9,7 +10,6 @@ import { ensureTokensTrigger } from "./application/qgrid/token-trigger-setup.js"
|
|
|
9
10
|
import { rescheduleTokenWindowKeepalive, startTokenWindowKeepalive, stopTokenWindowKeepalive } from "./application/qgrid/token-window-keepalive.js";
|
|
10
11
|
import { handleServerError } from "./server-error-handler.js";
|
|
11
12
|
import { AnthropicDispatcher } from "./utils/providers/anthropic/anthropic-dispatcher.js";
|
|
12
|
-
import { OpenAIDispatcher } from "./utils/providers/openai/openai-dispatcher.js";
|
|
13
13
|
import { CachePresets, defineConfig } from "sonamu";
|
|
14
14
|
import { getConsoleSink, getLogger } from "@logtape/logtape";
|
|
15
15
|
import { drivers, store } from "sonamu/cache";
|
|
@@ -2,8 +2,8 @@ import { getExpiresAt, getRefreshToken } from "../common/credentials.js";
|
|
|
2
2
|
import { serializeAndValidateDispatchSchema } from "../common/schema-validation.js";
|
|
3
3
|
import { QuotaThresholdExceededError } from "../../../application/qgrid/qgrid.types.js";
|
|
4
4
|
import { TokenModel } from "../../../application/token/token.model.js";
|
|
5
|
-
import { invalidateAnthropicQuotaUsage } from "../../../application/qgrid/oauth.js";
|
|
6
5
|
import { SmoothWeightedRoundRobin } from "../common/smooth-weighted-round-robin.js";
|
|
6
|
+
import { invalidateAnthropicQuotaUsage } from "../../../application/qgrid/oauth.js";
|
|
7
7
|
import { assertSupportedOneMillionSuffix, canonicalAnthropicModel } from "./anthropic-constants.js";
|
|
8
8
|
import { readAnthropicQuotaUsage } from "./anthropic-quota.js";
|
|
9
9
|
import { assertAnthropicThinkingRuntime, resolveAnthropicThinking } from "./anthropic-thinking.js";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { canonicalAnthropicModel, usesAdaptiveThinking } from "./anthropic-constants.js";
|
|
2
1
|
import { resolveAnthropicEffort } from "../common/effort.js";
|
|
3
2
|
import { ThinkingValidationError } from "../common/thinking.js";
|
|
3
|
+
import { canonicalAnthropicModel, usesAdaptiveThinking } from "./anthropic-constants.js";
|
|
4
4
|
import { execFileSync } from "node:child_process";
|
|
5
5
|
//#region src/utils/providers/anthropic/anthropic-thinking.ts
|
|
6
6
|
const THINKING_OFF_MODELS = /* @__PURE__ */ new Set([
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { ImageGenerationMetadata } from "../../../application/qgrid/qgrid.types.js";
|
|
1
2
|
import os from "node:os";
|
|
2
3
|
//#region src/utils/providers/openai/openai-backend-protocol.ts
|
|
3
4
|
const CHATGPT_CODEX_RESPONSES_URL = "https://chatgpt.com/backend-api/codex/responses";
|
|
@@ -154,11 +155,21 @@ function normalizeOpenAIEvent(raw) {
|
|
|
154
155
|
}
|
|
155
156
|
if (type === "response.completed") {
|
|
156
157
|
const response = event.response ?? {};
|
|
158
|
+
const toolUsage = response.tool_usage;
|
|
159
|
+
const parsedImageUsage = ImageGenerationMetadata.shape.usage.safeParse(toolUsage?.image_gen);
|
|
160
|
+
const imageUsage = parsedImageUsage.success ? parsedImageUsage.data : void 0;
|
|
161
|
+
const imageTool = Array.isArray(response.tools) ? response.tools.find((tool) => tool?.type === "image_generation") : void 0;
|
|
162
|
+
const imageModel = typeof imageTool?.model === "string" ? imageTool.model : void 0;
|
|
157
163
|
return {
|
|
158
164
|
type: "completed",
|
|
159
165
|
responseId: String(response.id ?? ""),
|
|
160
166
|
...response.usage ? { usage: usageFrom(response.usage) } : {},
|
|
161
|
-
...typeof response.model === "string" ? { model: response.model } : {}
|
|
167
|
+
...typeof response.model === "string" ? { model: response.model } : {},
|
|
168
|
+
...imageUsage || imageModel ? { imageGeneration: {
|
|
169
|
+
route: "codex-responses",
|
|
170
|
+
...imageModel ? { model: imageModel } : {},
|
|
171
|
+
...imageUsage ? { usage: imageUsage } : {}
|
|
172
|
+
} } : {}
|
|
162
173
|
};
|
|
163
174
|
}
|
|
164
175
|
if (type === "error" || type === "response.failed" || type === "response.incomplete") {
|
|
@@ -173,4 +184,4 @@ function normalizeOpenAIEvent(raw) {
|
|
|
173
184
|
//#endregion
|
|
174
185
|
export { CHATGPT_CODEX_RESPONSES_URL, CODEX_CLI_ORIGINATOR, CODEX_CLI_VERSION, OpenAIProtocolError, buildCodexIdentityHeaders, buildOpenAIResponsesRequest, codexCliUserAgent, imageMimeType, normalizeOpenAIEvent };
|
|
175
186
|
|
|
176
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3BlbmFpLWJhY2tlbmQtcHJvdG9jb2wuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3V0aWxzL3Byb3ZpZGVycy9vcGVuYWkvb3BlbmFpLWJhY2tlbmQtcHJvdG9jb2wudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IG9zIGZyb20gXCJub2RlOm9zXCI7XG5cbmltcG9ydCB7IHR5cGUgSW1hZ2VHZW5lcmF0aW9uTWV0YWRhdGEgfSBmcm9tIFwiLi4vLi4vLi4vYXBwbGljYXRpb24vcWdyaWQvcWdyaWQudHlwZXNcIjtcbmltcG9ydCB7IHR5cGUgT3BlbkFJRWZmb3J0IH0gZnJvbSBcIi4uL2NvbW1vbi9lZmZvcnRcIjtcblxuZXhwb3J0IGNvbnN0IENIQVRHUFRfQ09ERVhfUkVTUE9OU0VTX1VSTCA9XG4gIFwiaHR0cHM6Ly9jaGF0Z3B0LmNvbS9iYWNrZW5kLWFwaS9jb2RleC9yZXNwb25zZXNcIiBhcyBjb25zdDtcblxuZXhwb3J0IGNvbnN0IENPREVYX0NMSV9PUklHSU5BVE9SID0gXCJjb2RleF9jbGlfcnNcIiBhcyBjb25zdDtcbmV4cG9ydCBjb25zdCBDT0RFWF9DTElfVkVSU0lPTiA9IFwiMC4xNDcuMFwiIGFzIGNvbnN0O1xuXG5leHBvcnQgaW50ZXJmYWNlIENvZGV4VXNlckFnZW50UGxhdGZvcm0ge1xuICBvc1R5cGU6IHN0cmluZztcbiAgb3NWZXJzaW9uOiBzdHJpbmc7XG4gIGFyY2hpdGVjdHVyZTogc3RyaW5nO1xuICB0ZXJtaW5hbDogc3RyaW5nO1xufVxuXG5mdW5jdGlvbiBjb2RleFBsYXRmb3JtKCk6IENvZGV4VXNlckFnZW50UGxhdGZvcm0ge1xuICBjb25zdCBuYW1lczogUGFydGlhbDxSZWNvcmQ8Tm9kZUpTLlBsYXRmb3JtLCBzdHJpbmc+PiA9IHtcbiAgICBkYXJ3aW46IFwiTWFjIE9TXCIsXG4gICAgbGludXg6IFwiTGludXhcIixcbiAgICB3aW4zMjogXCJXaW5kb3dzXCIsXG4gIH07XG4gIGNvbnN0IHRlcm1pbmFsID0gcHJvY2Vzcy5lbnYuVEVSTV9QUk9HUkFNO1xuICBjb25zdCB0ZXJtaW5hbFZlcnNpb24gPSBwcm9jZXNzLmVudi5URVJNX1BST0dSQU1fVkVSU0lPTjtcbiAgcmV0dXJuIHtcbiAgICBvc1R5cGU6IG5hbWVzW3Byb2Nlc3MucGxhdGZvcm1dID8/IHByb2Nlc3MucGxhdGZvcm0sXG4gICAgb3NWZXJzaW9uOiBvcy5yZWxlYXNlKCksXG4gICAgYXJjaGl0ZWN0dXJlOiBwcm9jZXNzLmFyY2gsXG4gICAgdGVybWluYWw6IHRlcm1pbmFsID8gYCR7dGVybWluYWx9JHt0ZXJtaW5hbFZlcnNpb24gPyBgLyR7dGVybWluYWxWZXJzaW9ufWAgOiBcIlwifWAgOiBcInVua25vd25cIixcbiAgfTtcbn1cblxuLyoqIE1hdGNoZXMgdGhlIHBsYXRmb3JtL3Rlcm1pbmFsIHN1ZmZpeCBlbWl0dGVkIGJ5IHRoZSBwaW5uZWQgUnVzdCBDb2RleCBDTEkuICovXG5leHBvcnQgZnVuY3Rpb24gY29kZXhDbGlVc2VyQWdlbnQocGxhdGZvcm06IENvZGV4VXNlckFnZW50UGxhdGZvcm0gPSBjb2RleFBsYXRmb3JtKCkpOiBzdHJpbmcge1xuICByZXR1cm4gYGNvZGV4X2NsaV9ycy8ke0NPREVYX0NMSV9WRVJTSU9OfSAoJHtwbGF0Zm9ybS5vc1R5cGV9ICR7cGxhdGZvcm0ub3NWZXJzaW9ufTsgJHtwbGF0Zm9ybS5hcmNoaXRlY3R1cmV9KSAke3BsYXRmb3JtLnRlcm1pbmFsfWA7XG59XG5cbmV4cG9ydCB0eXBlIEpzb25WYWx1ZSA9XG4gIHwgbnVsbFxuICB8IGJvb2xlYW5cbiAgfCBudW1iZXJcbiAgfCBzdHJpbmdcbiAgfCBKc29uVmFsdWVbXVxuICB8IHsgW2tleTogc3RyaW5nXTogSnNvblZhbHVlIH07XG5cbi8qKiBSYXcgUmVzcG9uc2VzIEFQSSBpdGVtcy4gS2VlcGluZyB0aGVzZSBvcGFxdWUgcHJlc2VydmVzIHRoZSBjb21wbGV0ZSBjb252ZXJzYXRpb24gaGlzdG9yeS4gKi9cbmV4cG9ydCB0eXBlIE9wZW5BSVJlc3BvbnNlSXRlbSA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG5leHBvcnQgaW50ZXJmYWNlIE9wZW5BSU91dHB1dFNjaGVtYSB7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIHNjaGVtYTogSnNvblZhbHVlO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE9wZW5BSVJlc3BvbnNlc09wdGlvbnMge1xuICBtb2RlbDogc3RyaW5nO1xuICBpbnN0cnVjdGlvbnM/OiBzdHJpbmc7XG4gIGhpc3Rvcnk6IHJlYWRvbmx5IE9wZW5BSVJlc3BvbnNlSXRlbVtdO1xuICB0b29scz86IHJlYWRvbmx5IE9wZW5BSVJlc3BvbnNlSXRlbVtdO1xuICB0b29sQ2hvaWNlPzogc3RyaW5nIHwgT3BlbkFJUmVzcG9uc2VJdGVtO1xuICBwYXJhbGxlbFRvb2xDYWxscz86IGJvb2xlYW47XG4gIHJlYXNvbmluZz86IHtcbiAgICBlZmZvcnQ/OiBPcGVuQUlFZmZvcnQgfCBcIm5vbmVcIjtcbiAgICBzdW1tYXJ5PzogXCJhdXRvXCIgfCBcImNvbmNpc2VcIiB8IFwiZGV0YWlsZWRcIjtcbiAgfTtcbiAgdmVyYm9zaXR5PzogXCJsb3dcIiB8IFwibWVkaXVtXCIgfCBcImhpZ2hcIjtcbiAgc2VydmljZVRpZXI/OiBzdHJpbmc7XG4gIHByb21wdENhY2hlS2V5Pzogc3RyaW5nO1xuICBvdXRwdXRTY2hlbWE/OiBPcGVuQUlPdXRwdXRTY2hlbWE7XG4gIGltYWdlR2VuZXJhdGlvbj86IGJvb2xlYW4gfCBPcGVuQUlSZXNwb25zZUl0ZW07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgT3BlbkFJUmVzcG9uc2VzUmVxdWVzdCB7XG4gIG1vZGVsOiBzdHJpbmc7XG4gIGluc3RydWN0aW9ucz86IHN0cmluZztcbiAgaW5wdXQ6IE9wZW5BSVJlc3BvbnNlSXRlbVtdO1xuICB0b29scz86IE9wZW5BSVJlc3BvbnNlSXRlbVtdO1xuICB0b29sX2Nob2ljZTogc3RyaW5nIHwgT3BlbkFJUmVzcG9uc2VJdGVtO1xuICBwYXJhbGxlbF90b29sX2NhbGxzOiBib29sZWFuO1xuICByZWFzb25pbmc6IE9wZW5BSVJlc3BvbnNlc09wdGlvbnNbXCJyZWFzb25pbmdcIl0gfCBudWxsO1xuICBzdG9yZTogZmFsc2U7XG4gIHN0cmVhbTogdHJ1ZTtcbiAgaW5jbHVkZTogc3RyaW5nW107XG4gIHNlcnZpY2VfdGllcj86IHN0cmluZztcbiAgcHJvbXB0X2NhY2hlX2tleT86IHN0cmluZztcbiAgdGV4dD86IHtcbiAgICB2ZXJib3NpdHk/OiBcImxvd1wiIHwgXCJtZWRpdW1cIiB8IFwiaGlnaFwiO1xuICAgIGZvcm1hdD86IHtcbiAgICAgIHR5cGU6IFwianNvbl9zY2hlbWFcIjtcbiAgICAgIHN0cmljdDogdHJ1ZTtcbiAgICAgIHNjaGVtYTogSnNvblZhbHVlO1xuICAgICAgbmFtZTogc3RyaW5nO1xuICAgIH07XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBidWlsZE9wZW5BSVJlc3BvbnNlc1JlcXVlc3QoXG4gIG9wdGlvbnM6IE9wZW5BSVJlc3BvbnNlc09wdGlvbnMsXG4pOiBPcGVuQUlSZXNwb25zZXNSZXF1ZXN0IHtcbiAgY29uc3QgdG9vbHMgPSBvcHRpb25zLnRvb2xzID8gWy4uLm9wdGlvbnMudG9vbHNdIDogW107XG4gIGlmIChvcHRpb25zLmltYWdlR2VuZXJhdGlvbikge1xuICAgIHRvb2xzLnB1c2goXG4gICAgICBvcHRpb25zLmltYWdlR2VuZXJhdGlvbiA9PT0gdHJ1ZVxuICAgICAgICA/IHsgdHlwZTogXCJpbWFnZV9nZW5lcmF0aW9uXCIgfVxuICAgICAgICA6IHsgdHlwZTogXCJpbWFnZV9nZW5lcmF0aW9uXCIsIC4uLm9wdGlvbnMuaW1hZ2VHZW5lcmF0aW9uIH0sXG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IHRleHQgPVxuICAgIG9wdGlvbnMudmVyYm9zaXR5IHx8IG9wdGlvbnMub3V0cHV0U2NoZW1hXG4gICAgICA/IHtcbiAgICAgICAgICAuLi4ob3B0aW9ucy52ZXJib3NpdHkgPyB7IHZlcmJvc2l0eTogb3B0aW9ucy52ZXJib3NpdHkgfSA6IHt9KSxcbiAgICAgICAgICAuLi4ob3B0aW9ucy5vdXRwdXRTY2hlbWFcbiAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgIGZvcm1hdDoge1xuICAgICAgICAgICAgICAgICAgdHlwZTogXCJqc29uX3NjaGVtYVwiIGFzIGNvbnN0LFxuICAgICAgICAgICAgICAgICAgc3RyaWN0OiB0cnVlIGFzIGNvbnN0LFxuICAgICAgICAgICAgICAgICAgc2NoZW1hOiBvcHRpb25zLm91dHB1dFNjaGVtYS5zY2hlbWEsXG4gICAgICAgICAgICAgICAgICBuYW1lOiBvcHRpb25zLm91dHB1dFNjaGVtYS5uYW1lID8/IFwiY29kZXhfb3V0cHV0X3NjaGVtYVwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDoge30pLFxuICAgICAgICB9XG4gICAgICA6IHVuZGVmaW5lZDtcblxuICByZXR1cm4ge1xuICAgIG1vZGVsOiBvcHRpb25zLm1vZGVsLFxuICAgIC4uLihvcHRpb25zLmluc3RydWN0aW9ucyA/IHsgaW5zdHJ1Y3Rpb25zOiBvcHRpb25zLmluc3RydWN0aW9ucyB9IDoge30pLFxuICAgIC8vIENvcHkgdGhlIGFycmF5LCBub3QgaXRzIGl0ZW1zOiByYXcgaXRlbXMgbXVzdCBhcnJpdmUgYnl0ZS1mb3ItYnl0ZSBlcXVpdmFsZW50LlxuICAgIGlucHV0OiBbLi4ub3B0aW9ucy5oaXN0b3J5XSxcbiAgICAuLi4odG9vbHMubGVuZ3RoID8geyB0b29scyB9IDoge30pLFxuICAgIHRvb2xfY2hvaWNlOiBvcHRpb25zLnRvb2xDaG9pY2UgPz8gXCJhdXRvXCIsXG4gICAgcGFyYWxsZWxfdG9vbF9jYWxsczogb3B0aW9ucy5wYXJhbGxlbFRvb2xDYWxscyA/PyB0cnVlLFxuICAgIHJlYXNvbmluZzogb3B0aW9ucy5yZWFzb25pbmcgPz8gbnVsbCxcbiAgICBzdG9yZTogZmFsc2UsXG4gICAgc3RyZWFtOiB0cnVlLFxuICAgIGluY2x1ZGU6IFtcInJlYXNvbmluZy5lbmNyeXB0ZWRfY29udGVudFwiXSxcbiAgICAuLi4ob3B0aW9ucy5zZXJ2aWNlVGllciA/IHsgc2VydmljZV90aWVyOiBvcHRpb25zLnNlcnZpY2VUaWVyIH0gOiB7fSksXG4gICAgLi4uKG9wdGlvbnMucHJvbXB0Q2FjaGVLZXkgPyB7IHByb21wdF9jYWNoZV9rZXk6IG9wdGlvbnMucHJvbXB0Q2FjaGVLZXkgfSA6IHt9KSxcbiAgICAuLi4odGV4dCA/IHsgdGV4dCB9IDoge30pLFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRDb2RleElkZW50aXR5SGVhZGVycyhcbiAgYWNjZXNzVG9rZW46IHN0cmluZyxcbiAgYWNjb3VudElkOiBzdHJpbmcsXG4gIGNvcnJlbGF0aW9uPzogeyBzZXNzaW9uSWQ/OiBzdHJpbmc7IHRocmVhZElkPzogc3RyaW5nOyBjbGllbnRSZXF1ZXN0SWQ/OiBzdHJpbmcgfSxcbik6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4ge1xuICByZXR1cm4ge1xuICAgIEFjY2VwdDogXCJ0ZXh0L2V2ZW50LXN0cmVhbVwiLFxuICAgIEF1dGhvcml6YXRpb246IGBCZWFyZXIgJHthY2Nlc3NUb2tlbn1gLFxuICAgIFwiQ2hhdEdQVC1BY2NvdW50LUlEXCI6IGFjY291bnRJZCxcbiAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICBvcmlnaW5hdG9yOiBDT0RFWF9DTElfT1JJR0lOQVRPUixcbiAgICBcIlVzZXItQWdlbnRcIjogY29kZXhDbGlVc2VyQWdlbnQoKSxcbiAgICAuLi4oY29ycmVsYXRpb24/LnNlc3Npb25JZCA/IHsgXCJzZXNzaW9uLWlkXCI6IGNvcnJlbGF0aW9uLnNlc3Npb25JZCB9IDoge30pLFxuICAgIC4uLihjb3JyZWxhdGlvbj8udGhyZWFkSWQgPyB7IFwidGhyZWFkLWlkXCI6IGNvcnJlbGF0aW9uLnRocmVhZElkIH0gOiB7fSksXG4gICAgLi4uKGNvcnJlbGF0aW9uPy5jbGllbnRSZXF1ZXN0SWQgPyB7IFwieC1jbGllbnQtcmVxdWVzdC1pZFwiOiBjb3JyZWxhdGlvbi5jbGllbnRSZXF1ZXN0SWQgfSA6IHt9KSxcbiAgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBPcGVuQUlVc2FnZSB7XG4gIGlucHV0VG9rZW5zOiBudW1iZXI7XG4gIGNhY2hlZElucHV0VG9rZW5zOiBudW1iZXI7XG4gIG91dHB1dFRva2VuczogbnVtYmVyO1xuICByZWFzb25pbmdUb2tlbnM6IG51bWJlcjtcbiAgdG90YWxUb2tlbnM6IG51bWJlcjtcbn1cblxuZXhwb3J0IHR5cGUgT3BlbkFJTm9ybWFsaXplZEV2ZW50ID1cbiAgfCB7IHR5cGU6IFwiY3JlYXRlZFwiOyByZXNwb25zZUlkPzogc3RyaW5nIH1cbiAgfCB7IHR5cGU6IFwidGV4dC1kZWx0YVwiOyB0ZXh0OiBzdHJpbmc7IGl0ZW1JZD86IHN0cmluZyB9XG4gIHwge1xuICAgICAgdHlwZTogXCJpbWFnZVwiO1xuICAgICAgaWQ/OiBzdHJpbmc7XG4gICAgICBiYXNlNjQ6IHN0cmluZztcbiAgICAgIG1pbWVUeXBlOiBcImltYWdlL3BuZ1wiIHwgXCJpbWFnZS9qcGVnXCIgfCBcImltYWdlL3dlYnBcIjtcbiAgICAgIHJldmlzZWRQcm9tcHQ/OiBzdHJpbmc7XG4gICAgICBnZW5lcmF0aW9uPzogSW1hZ2VHZW5lcmF0aW9uTWV0YWRhdGE7XG4gICAgfVxuICB8IHsgdHlwZTogXCJvdXRwdXQtaXRlbVwiOyBpdGVtOiBPcGVuQUlSZXNwb25zZUl0ZW07IGNvbXBsZXRlZD86IGJvb2xlYW4gfVxuICB8IHsgdHlwZTogXCJjb21wbGV0ZWRcIjsgcmVzcG9uc2VJZDogc3RyaW5nOyB1c2FnZT86IE9wZW5BSVVzYWdlOyBtb2RlbD86IHN0cmluZyB9XG4gIHwgeyB0eXBlOiBcImVycm9yXCI7IGVycm9yOiBPcGVuQUlQcm90b2NvbEVycm9yIH07XG5cbmV4cG9ydCBjbGFzcyBPcGVuQUlQcm90b2NvbEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihcbiAgICBtZXNzYWdlOiBzdHJpbmcsXG4gICAgcHVibGljIHJlYWRvbmx5IGNvZGU/OiBzdHJpbmcsXG4gICAgcHVibGljIHJlYWRvbmx5IHN0YXR1cz86IG51bWJlcixcbiAgICBwdWJsaWMgcmVhZG9ubHkgcmV0cnlBZnRlck1zPzogbnVtYmVyLFxuICApIHtcbiAgICBzdXBlcihtZXNzYWdlKTtcbiAgICB0aGlzLm5hbWUgPSBcIk9wZW5BSVByb3RvY29sRXJyb3JcIjtcbiAgfVxufVxuXG5mdW5jdGlvbiB1c2FnZUZyb20odmFsdWU6IHVua25vd24pOiBPcGVuQUlVc2FnZSB8IHVuZGVmaW5lZCB7XG4gIGlmICghdmFsdWUgfHwgdHlwZW9mIHZhbHVlICE9PSBcIm9iamVjdFwiKSByZXR1cm4gdW5kZWZpbmVkO1xuICBjb25zdCB1c2FnZSA9IHZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBjb25zdCBpbnB1dERldGFpbHMgPSAodXNhZ2UuaW5wdXRfdG9rZW5zX2RldGFpbHMgPz8ge30pIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBjb25zdCBvdXRwdXREZXRhaWxzID0gKHVzYWdlLm91dHB1dF90b2tlbnNfZGV0YWlscyA/PyB7fSkgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIHJldHVybiB7XG4gICAgaW5wdXRUb2tlbnM6IE51bWJlcih1c2FnZS5pbnB1dF90b2tlbnMgPz8gMCksXG4gICAgY2FjaGVkSW5wdXRUb2tlbnM6IE51bWJlcihpbnB1dERldGFpbHMuY2FjaGVkX3Rva2VucyA/PyAwKSxcbiAgICBvdXRwdXRUb2tlbnM6IE51bWJlcih1c2FnZS5vdXRwdXRfdG9rZW5zID8/IDApLFxuICAgIHJlYXNvbmluZ1Rva2VuczogTnVtYmVyKG91dHB1dERldGFpbHMucmVhc29uaW5nX3Rva2VucyA/PyAwKSxcbiAgICB0b3RhbFRva2VuczogTnVtYmVyKHVzYWdlLnRvdGFsX3Rva2VucyA/PyAwKSxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGltYWdlTWltZVR5cGUoXG4gIGJhc2U2NDogc3RyaW5nLFxuICBvdXRwdXRGb3JtYXQ/OiB1bmtub3duLFxuKTogXCJpbWFnZS9wbmdcIiB8IFwiaW1hZ2UvanBlZ1wiIHwgXCJpbWFnZS93ZWJwXCIge1xuICAvLyBJbnNwZWN0IG9ubHkgdGhlIGhlYWRlciwgd2l0aG91dCBkZWNvZGluZyBhIHBvdGVudGlhbGx5IGxhcmdlIGltYWdlIHR3aWNlLlxuICBjb25zdCBoZWFkZXIgPSBCdWZmZXIuZnJvbShiYXNlNjQuc2xpY2UoMCwgMjQpLCBcImJhc2U2NFwiKTtcbiAgaWYgKGhlYWRlci5zdWJhcnJheSgwLCA4KS5lcXVhbHMoQnVmZmVyLmZyb20oWzEzNywgODAsIDc4LCA3MSwgMTMsIDEwLCAyNiwgMTBdKSkpXG4gICAgcmV0dXJuIFwiaW1hZ2UvcG5nXCI7XG4gIGlmIChoZWFkZXJbMF0gPT09IDI1NSAmJiBoZWFkZXJbMV0gPT09IDIxNiAmJiBoZWFkZXJbMl0gPT09IDI1NSkgcmV0dXJuIFwiaW1hZ2UvanBlZ1wiO1xuICBpZiAoaGVhZGVyLnRvU3RyaW5nKFwiYXNjaWlcIiwgMCwgNCkgPT09IFwiUklGRlwiICYmIGhlYWRlci50b1N0cmluZyhcImFzY2lpXCIsIDgsIDEyKSA9PT0gXCJXRUJQXCIpXG4gICAgcmV0dXJuIFwiaW1hZ2Uvd2VicFwiO1xuICBpZiAob3V0cHV0Rm9ybWF0ID09PSBcImpwZWdcIikgcmV0dXJuIFwiaW1hZ2UvanBlZ1wiO1xuICBpZiAob3V0cHV0Rm9ybWF0ID09PSBcIndlYnBcIikgcmV0dXJuIFwiaW1hZ2Uvd2VicFwiO1xuICBpZiAob3V0cHV0Rm9ybWF0ID09PSB1bmRlZmluZWQgfHwgb3V0cHV0Rm9ybWF0ID09PSBcInBuZ1wiKSByZXR1cm4gXCJpbWFnZS9wbmdcIjtcbiAgdGhyb3cgbmV3IE9wZW5BSVByb3RvY29sRXJyb3IoYFVuc3VwcG9ydGVkIGltYWdlIG91dHB1dCBmb3JtYXQ6ICR7U3RyaW5nKG91dHB1dEZvcm1hdCl9YCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVPcGVuQUlFdmVudChyYXc6IHVua25vd24pOiBPcGVuQUlOb3JtYWxpemVkRXZlbnQgfCB1bmRlZmluZWQge1xuICBpZiAoIXJhdyB8fCB0eXBlb2YgcmF3ICE9PSBcIm9iamVjdFwiKSByZXR1cm4gdW5kZWZpbmVkO1xuICBjb25zdCBldmVudCA9IHJhdyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgY29uc3QgdHlwZSA9IFN0cmluZyhldmVudC50eXBlID8/IFwiXCIpO1xuICBpZiAodHlwZSA9PT0gXCJyZXNwb25zZS5jcmVhdGVkXCIpIHtcbiAgICBjb25zdCByZXNwb25zZSA9IGV2ZW50LnJlc3BvbnNlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkO1xuICAgIHJldHVybiB7IHR5cGU6IFwiY3JlYXRlZFwiLCAuLi4ocmVzcG9uc2U/LmlkID8geyByZXNwb25zZUlkOiBTdHJpbmcocmVzcG9uc2UuaWQpIH0gOiB7fSkgfTtcbiAgfVxuICBpZiAodHlwZSA9PT0gXCJyZXNwb25zZS5vdXRwdXRfdGV4dC5kZWx0YVwiICYmIHR5cGVvZiBldmVudC5kZWx0YSA9PT0gXCJzdHJpbmdcIikge1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcInRleHQtZGVsdGFcIixcbiAgICAgIHRleHQ6IGV2ZW50LmRlbHRhLFxuICAgICAgLi4uKHR5cGVvZiBldmVudC5pdGVtX2lkID09PSBcInN0cmluZ1wiID8geyBpdGVtSWQ6IGV2ZW50Lml0ZW1faWQgfSA6IHt9KSxcbiAgICB9O1xuICB9XG4gIGlmIChcbiAgICAodHlwZSA9PT0gXCJyZXNwb25zZS5vdXRwdXRfaXRlbS5hZGRlZFwiIHx8IHR5cGUgPT09IFwicmVzcG9uc2Uub3V0cHV0X2l0ZW0uZG9uZVwiKSAmJlxuICAgIGV2ZW50Lml0ZW0gJiZcbiAgICB0eXBlb2YgZXZlbnQuaXRlbSA9PT0gXCJvYmplY3RcIlxuICApIHtcbiAgICBjb25zdCBpdGVtID0gZXZlbnQuaXRlbSBhcyBPcGVuQUlSZXNwb25zZUl0ZW07XG4gICAgaWYgKGl0ZW0udHlwZSA9PT0gXCJpbWFnZV9nZW5lcmF0aW9uX2NhbGxcIiAmJiB0eXBlb2YgaXRlbS5yZXN1bHQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIC8vIFBORyBleHBvc2VzIGRpbWVuc2lvbnMgaW4gaXRzIGZpeGVkIGhlYWRlci4gT3RoZXIgZm9ybWF0cyByZXRhaW4gdGhlXG4gICAgICAvLyBiYWNrZW5kJ3Mgb2JzZXJ2ZWQgc2l6ZTsgbmV2ZXIgc3Vic3RpdHV0ZSByZXF1ZXN0ZWQgaW1hZ2UgY29udHJvbHMuXG4gICAgICBjb25zdCBoZWFkZXIgPSBCdWZmZXIuZnJvbShpdGVtLnJlc3VsdC5zbGljZSgwLCAzMiksIFwiYmFzZTY0XCIpO1xuICAgICAgY29uc3QgcG5nU2l6ZSA9XG4gICAgICAgIGhlYWRlci5sZW5ndGggPj0gMjQgJiZcbiAgICAgICAgaGVhZGVyLnN1YmFycmF5KDAsIDgpLmVxdWFscyhCdWZmZXIuZnJvbShcIjg5NTA0ZTQ3MGQwYTFhMGFcIiwgXCJoZXhcIikpICYmXG4gICAgICAgIGhlYWRlci5yZWFkVUludDMyQkUoMTYpID4gMCAmJlxuICAgICAgICBoZWFkZXIucmVhZFVJbnQzMkJFKDIwKSA+IDBcbiAgICAgICAgICA/IGAke2hlYWRlci5yZWFkVUludDMyQkUoMTYpfXgke2hlYWRlci5yZWFkVUludDMyQkUoMjApfWBcbiAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IHNpemUgPVxuICAgICAgICBwbmdTaXplID8/XG4gICAgICAgICh0eXBlb2YgaXRlbS5zaXplID09PSBcInN0cmluZ1wiICYmIC9eWzEtOV1cXGQqeFsxLTldXFxkKiQvLnRlc3QoaXRlbS5zaXplKVxuICAgICAgICAgID8gaXRlbS5zaXplXG4gICAgICAgICAgOiB1bmRlZmluZWQpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogXCJpbWFnZVwiLFxuICAgICAgICAuLi4odHlwZW9mIGl0ZW0uaWQgPT09IFwic3RyaW5nXCIgPyB7IGlkOiBpdGVtLmlkIH0gOiB7fSksXG4gICAgICAgIGJhc2U2NDogaXRlbS5yZXN1bHQsXG4gICAgICAgIG1pbWVUeXBlOiBpbWFnZU1pbWVUeXBlKGl0ZW0ucmVzdWx0LCBpdGVtLm91dHB1dF9mb3JtYXQpLFxuICAgICAgICBnZW5lcmF0aW9uOiB7XG4gICAgICAgICAgcm91dGU6IFwiY29kZXgtcmVzcG9uc2VzXCIsXG4gICAgICAgICAgLi4uKHNpemUgPyB7IHNpemUgfSA6IHt9KSxcbiAgICAgICAgICAuLi4odHlwZW9mIGl0ZW0ubW9kZWwgPT09IFwic3RyaW5nXCIgPyB7IG1vZGVsOiBpdGVtLm1vZGVsIH0gOiB7fSksXG4gICAgICAgICAgLi4uKHR5cGVvZiBpdGVtLnF1YWxpdHkgPT09IFwic3RyaW5nXCIgPyB7IHF1YWxpdHk6IGl0ZW0ucXVhbGl0eSB9IDoge30pLFxuICAgICAgICAgIC4uLih0eXBlb2YgaXRlbS5iYWNrZ3JvdW5kID09PSBcInN0cmluZ1wiID8geyBiYWNrZ3JvdW5kOiBpdGVtLmJhY2tncm91bmQgfSA6IHt9KSxcbiAgICAgICAgfSxcbiAgICAgICAgLi4uKHR5cGVvZiBpdGVtLnJldmlzZWRfcHJvbXB0ID09PSBcInN0cmluZ1wiXG4gICAgICAgICAgPyB7IHJldmlzZWRQcm9tcHQ6IGl0ZW0ucmV2aXNlZF9wcm9tcHQgfVxuICAgICAgICAgIDogdHlwZW9mIGl0ZW0ucmV2aXNlZFByb21wdCA9PT0gXCJzdHJpbmdcIlxuICAgICAgICAgICAgPyB7IHJldmlzZWRQcm9tcHQ6IGl0ZW0ucmV2aXNlZFByb21wdCB9XG4gICAgICAgICAgICA6IHt9KSxcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiB7IHR5cGU6IFwib3V0cHV0LWl0ZW1cIiwgaXRlbSwgY29tcGxldGVkOiB0eXBlID09PSBcInJlc3BvbnNlLm91dHB1dF9pdGVtLmRvbmVcIiB9O1xuICB9XG4gIGlmICh0eXBlID09PSBcInJlc3BvbnNlLmNvbXBsZXRlZFwiKSB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSAoZXZlbnQucmVzcG9uc2UgPz8ge30pIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcImNvbXBsZXRlZFwiLFxuICAgICAgcmVzcG9uc2VJZDogU3RyaW5nKHJlc3BvbnNlLmlkID8/IFwiXCIpLFxuICAgICAgLi4uKHJlc3BvbnNlLnVzYWdlID8geyB1c2FnZTogdXNhZ2VGcm9tKHJlc3BvbnNlLnVzYWdlKSB9IDoge30pLFxuICAgICAgLi4uKHR5cGVvZiByZXNwb25zZS5tb2RlbCA9PT0gXCJzdHJpbmdcIiA/IHsgbW9kZWw6IHJlc3BvbnNlLm1vZGVsIH0gOiB7fSksXG4gICAgfTtcbiAgfVxuICBpZiAodHlwZSA9PT0gXCJlcnJvclwiIHx8IHR5cGUgPT09IFwicmVzcG9uc2UuZmFpbGVkXCIgfHwgdHlwZSA9PT0gXCJyZXNwb25zZS5pbmNvbXBsZXRlXCIpIHtcbiAgICBjb25zdCBzb3VyY2UgPSAoZXZlbnQuZXJyb3IgPz8gZXZlbnQucmVzcG9uc2UgPz8gZXZlbnQpIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIGNvbnN0IG5lc3RlZCA9IChzb3VyY2UuZXJyb3IgPz8gc291cmNlKSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJlcnJvclwiLFxuICAgICAgZXJyb3I6IG5ldyBPcGVuQUlQcm90b2NvbEVycm9yKFxuICAgICAgICBTdHJpbmcobmVzdGVkLm1lc3NhZ2UgPz8gYE9wZW5BSSBzdHJlYW0gZW5kZWQgd2l0aCAke3R5cGV9YCksXG4gICAgICAgIHR5cGVvZiBuZXN0ZWQuY29kZSA9PT0gXCJzdHJpbmdcIiA/IG5lc3RlZC5jb2RlIDogdW5kZWZpbmVkLFxuICAgICAgKSxcbiAgICB9O1xuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG4iXSwibWFwcGluZ3MiOiI7O0FBS0Es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
|
|
187
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3BlbmFpLWJhY2tlbmQtcHJvdG9jb2wuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3V0aWxzL3Byb3ZpZGVycy9vcGVuYWkvb3BlbmFpLWJhY2tlbmQtcHJvdG9jb2wudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IG9zIGZyb20gXCJub2RlOm9zXCI7XG5cbmltcG9ydCB7IEltYWdlR2VuZXJhdGlvbk1ldGFkYXRhIH0gZnJvbSBcIi4uLy4uLy4uL2FwcGxpY2F0aW9uL3FncmlkL3FncmlkLnR5cGVzXCI7XG5pbXBvcnQgeyB0eXBlIE9wZW5BSUVmZm9ydCB9IGZyb20gXCIuLi9jb21tb24vZWZmb3J0XCI7XG5cbmV4cG9ydCBjb25zdCBDSEFUR1BUX0NPREVYX1JFU1BPTlNFU19VUkwgPVxuICBcImh0dHBzOi8vY2hhdGdwdC5jb20vYmFja2VuZC1hcGkvY29kZXgvcmVzcG9uc2VzXCIgYXMgY29uc3Q7XG5cbmV4cG9ydCBjb25zdCBDT0RFWF9DTElfT1JJR0lOQVRPUiA9IFwiY29kZXhfY2xpX3JzXCIgYXMgY29uc3Q7XG5leHBvcnQgY29uc3QgQ09ERVhfQ0xJX1ZFUlNJT04gPSBcIjAuMTQ3LjBcIiBhcyBjb25zdDtcblxuZXhwb3J0IGludGVyZmFjZSBDb2RleFVzZXJBZ2VudFBsYXRmb3JtIHtcbiAgb3NUeXBlOiBzdHJpbmc7XG4gIG9zVmVyc2lvbjogc3RyaW5nO1xuICBhcmNoaXRlY3R1cmU6IHN0cmluZztcbiAgdGVybWluYWw6IHN0cmluZztcbn1cblxuZnVuY3Rpb24gY29kZXhQbGF0Zm9ybSgpOiBDb2RleFVzZXJBZ2VudFBsYXRmb3JtIHtcbiAgY29uc3QgbmFtZXM6IFBhcnRpYWw8UmVjb3JkPE5vZGVKUy5QbGF0Zm9ybSwgc3RyaW5nPj4gPSB7XG4gICAgZGFyd2luOiBcIk1hYyBPU1wiLFxuICAgIGxpbnV4OiBcIkxpbnV4XCIsXG4gICAgd2luMzI6IFwiV2luZG93c1wiLFxuICB9O1xuICBjb25zdCB0ZXJtaW5hbCA9IHByb2Nlc3MuZW52LlRFUk1fUFJPR1JBTTtcbiAgY29uc3QgdGVybWluYWxWZXJzaW9uID0gcHJvY2Vzcy5lbnYuVEVSTV9QUk9HUkFNX1ZFUlNJT047XG4gIHJldHVybiB7XG4gICAgb3NUeXBlOiBuYW1lc1twcm9jZXNzLnBsYXRmb3JtXSA/PyBwcm9jZXNzLnBsYXRmb3JtLFxuICAgIG9zVmVyc2lvbjogb3MucmVsZWFzZSgpLFxuICAgIGFyY2hpdGVjdHVyZTogcHJvY2Vzcy5hcmNoLFxuICAgIHRlcm1pbmFsOiB0ZXJtaW5hbCA/IGAke3Rlcm1pbmFsfSR7dGVybWluYWxWZXJzaW9uID8gYC8ke3Rlcm1pbmFsVmVyc2lvbn1gIDogXCJcIn1gIDogXCJ1bmtub3duXCIsXG4gIH07XG59XG5cbi8qKiBNYXRjaGVzIHRoZSBwbGF0Zm9ybS90ZXJtaW5hbCBzdWZmaXggZW1pdHRlZCBieSB0aGUgcGlubmVkIFJ1c3QgQ29kZXggQ0xJLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvZGV4Q2xpVXNlckFnZW50KHBsYXRmb3JtOiBDb2RleFVzZXJBZ2VudFBsYXRmb3JtID0gY29kZXhQbGF0Zm9ybSgpKTogc3RyaW5nIHtcbiAgcmV0dXJuIGBjb2RleF9jbGlfcnMvJHtDT0RFWF9DTElfVkVSU0lPTn0gKCR7cGxhdGZvcm0ub3NUeXBlfSAke3BsYXRmb3JtLm9zVmVyc2lvbn07ICR7cGxhdGZvcm0uYXJjaGl0ZWN0dXJlfSkgJHtwbGF0Zm9ybS50ZXJtaW5hbH1gO1xufVxuXG5leHBvcnQgdHlwZSBKc29uVmFsdWUgPVxuICB8IG51bGxcbiAgfCBib29sZWFuXG4gIHwgbnVtYmVyXG4gIHwgc3RyaW5nXG4gIHwgSnNvblZhbHVlW11cbiAgfCB7IFtrZXk6IHN0cmluZ106IEpzb25WYWx1ZSB9O1xuXG4vKiogUmF3IFJlc3BvbnNlcyBBUEkgaXRlbXMuIEtlZXBpbmcgdGhlc2Ugb3BhcXVlIHByZXNlcnZlcyB0aGUgY29tcGxldGUgY29udmVyc2F0aW9uIGhpc3RvcnkuICovXG5leHBvcnQgdHlwZSBPcGVuQUlSZXNwb25zZUl0ZW0gPSBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblxuZXhwb3J0IGludGVyZmFjZSBPcGVuQUlPdXRwdXRTY2hlbWEge1xuICBuYW1lPzogc3RyaW5nO1xuICBzY2hlbWE6IEpzb25WYWx1ZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBPcGVuQUlSZXNwb25zZXNPcHRpb25zIHtcbiAgbW9kZWw6IHN0cmluZztcbiAgaW5zdHJ1Y3Rpb25zPzogc3RyaW5nO1xuICBoaXN0b3J5OiByZWFkb25seSBPcGVuQUlSZXNwb25zZUl0ZW1bXTtcbiAgdG9vbHM/OiByZWFkb25seSBPcGVuQUlSZXNwb25zZUl0ZW1bXTtcbiAgdG9vbENob2ljZT86IHN0cmluZyB8IE9wZW5BSVJlc3BvbnNlSXRlbTtcbiAgcGFyYWxsZWxUb29sQ2FsbHM/OiBib29sZWFuO1xuICByZWFzb25pbmc/OiB7XG4gICAgZWZmb3J0PzogT3BlbkFJRWZmb3J0IHwgXCJub25lXCI7XG4gICAgc3VtbWFyeT86IFwiYXV0b1wiIHwgXCJjb25jaXNlXCIgfCBcImRldGFpbGVkXCI7XG4gIH07XG4gIHZlcmJvc2l0eT86IFwibG93XCIgfCBcIm1lZGl1bVwiIHwgXCJoaWdoXCI7XG4gIHNlcnZpY2VUaWVyPzogc3RyaW5nO1xuICBwcm9tcHRDYWNoZUtleT86IHN0cmluZztcbiAgb3V0cHV0U2NoZW1hPzogT3BlbkFJT3V0cHV0U2NoZW1hO1xuICBpbWFnZUdlbmVyYXRpb24/OiBib29sZWFuIHwgT3BlbkFJUmVzcG9uc2VJdGVtO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE9wZW5BSVJlc3BvbnNlc1JlcXVlc3Qge1xuICBtb2RlbDogc3RyaW5nO1xuICBpbnN0cnVjdGlvbnM/OiBzdHJpbmc7XG4gIGlucHV0OiBPcGVuQUlSZXNwb25zZUl0ZW1bXTtcbiAgdG9vbHM/OiBPcGVuQUlSZXNwb25zZUl0ZW1bXTtcbiAgdG9vbF9jaG9pY2U6IHN0cmluZyB8IE9wZW5BSVJlc3BvbnNlSXRlbTtcbiAgcGFyYWxsZWxfdG9vbF9jYWxsczogYm9vbGVhbjtcbiAgcmVhc29uaW5nOiBPcGVuQUlSZXNwb25zZXNPcHRpb25zW1wicmVhc29uaW5nXCJdIHwgbnVsbDtcbiAgc3RvcmU6IGZhbHNlO1xuICBzdHJlYW06IHRydWU7XG4gIGluY2x1ZGU6IHN0cmluZ1tdO1xuICBzZXJ2aWNlX3RpZXI/OiBzdHJpbmc7XG4gIHByb21wdF9jYWNoZV9rZXk/OiBzdHJpbmc7XG4gIHRleHQ/OiB7XG4gICAgdmVyYm9zaXR5PzogXCJsb3dcIiB8IFwibWVkaXVtXCIgfCBcImhpZ2hcIjtcbiAgICBmb3JtYXQ/OiB7XG4gICAgICB0eXBlOiBcImpzb25fc2NoZW1hXCI7XG4gICAgICBzdHJpY3Q6IHRydWU7XG4gICAgICBzY2hlbWE6IEpzb25WYWx1ZTtcbiAgICAgIG5hbWU6IHN0cmluZztcbiAgICB9O1xuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRPcGVuQUlSZXNwb25zZXNSZXF1ZXN0KFxuICBvcHRpb25zOiBPcGVuQUlSZXNwb25zZXNPcHRpb25zLFxuKTogT3BlbkFJUmVzcG9uc2VzUmVxdWVzdCB7XG4gIGNvbnN0IHRvb2xzID0gb3B0aW9ucy50b29scyA/IFsuLi5vcHRpb25zLnRvb2xzXSA6IFtdO1xuICBpZiAob3B0aW9ucy5pbWFnZUdlbmVyYXRpb24pIHtcbiAgICB0b29scy5wdXNoKFxuICAgICAgb3B0aW9ucy5pbWFnZUdlbmVyYXRpb24gPT09IHRydWVcbiAgICAgICAgPyB7IHR5cGU6IFwiaW1hZ2VfZ2VuZXJhdGlvblwiIH1cbiAgICAgICAgOiB7IHR5cGU6IFwiaW1hZ2VfZ2VuZXJhdGlvblwiLCAuLi5vcHRpb25zLmltYWdlR2VuZXJhdGlvbiB9LFxuICAgICk7XG4gIH1cblxuICBjb25zdCB0ZXh0ID1cbiAgICBvcHRpb25zLnZlcmJvc2l0eSB8fCBvcHRpb25zLm91dHB1dFNjaGVtYVxuICAgICAgPyB7XG4gICAgICAgICAgLi4uKG9wdGlvbnMudmVyYm9zaXR5ID8geyB2ZXJib3NpdHk6IG9wdGlvbnMudmVyYm9zaXR5IH0gOiB7fSksXG4gICAgICAgICAgLi4uKG9wdGlvbnMub3V0cHV0U2NoZW1hXG4gICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICBmb3JtYXQ6IHtcbiAgICAgICAgICAgICAgICAgIHR5cGU6IFwianNvbl9zY2hlbWFcIiBhcyBjb25zdCxcbiAgICAgICAgICAgICAgICAgIHN0cmljdDogdHJ1ZSBhcyBjb25zdCxcbiAgICAgICAgICAgICAgICAgIHNjaGVtYTogb3B0aW9ucy5vdXRwdXRTY2hlbWEuc2NoZW1hLFxuICAgICAgICAgICAgICAgICAgbmFtZTogb3B0aW9ucy5vdXRwdXRTY2hlbWEubmFtZSA/PyBcImNvZGV4X291dHB1dF9zY2hlbWFcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA6IHt9KSxcbiAgICAgICAgfVxuICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgcmV0dXJuIHtcbiAgICBtb2RlbDogb3B0aW9ucy5tb2RlbCxcbiAgICAuLi4ob3B0aW9ucy5pbnN0cnVjdGlvbnMgPyB7IGluc3RydWN0aW9uczogb3B0aW9ucy5pbnN0cnVjdGlvbnMgfSA6IHt9KSxcbiAgICAvLyBDb3B5IHRoZSBhcnJheSwgbm90IGl0cyBpdGVtczogcmF3IGl0ZW1zIG11c3QgYXJyaXZlIGJ5dGUtZm9yLWJ5dGUgZXF1aXZhbGVudC5cbiAgICBpbnB1dDogWy4uLm9wdGlvbnMuaGlzdG9yeV0sXG4gICAgLi4uKHRvb2xzLmxlbmd0aCA/IHsgdG9vbHMgfSA6IHt9KSxcbiAgICB0b29sX2Nob2ljZTogb3B0aW9ucy50b29sQ2hvaWNlID8/IFwiYXV0b1wiLFxuICAgIHBhcmFsbGVsX3Rvb2xfY2FsbHM6IG9wdGlvbnMucGFyYWxsZWxUb29sQ2FsbHMgPz8gdHJ1ZSxcbiAgICByZWFzb25pbmc6IG9wdGlvbnMucmVhc29uaW5nID8/IG51bGwsXG4gICAgc3RvcmU6IGZhbHNlLFxuICAgIHN0cmVhbTogdHJ1ZSxcbiAgICBpbmNsdWRlOiBbXCJyZWFzb25pbmcuZW5jcnlwdGVkX2NvbnRlbnRcIl0sXG4gICAgLi4uKG9wdGlvbnMuc2VydmljZVRpZXIgPyB7IHNlcnZpY2VfdGllcjogb3B0aW9ucy5zZXJ2aWNlVGllciB9IDoge30pLFxuICAgIC4uLihvcHRpb25zLnByb21wdENhY2hlS2V5ID8geyBwcm9tcHRfY2FjaGVfa2V5OiBvcHRpb25zLnByb21wdENhY2hlS2V5IH0gOiB7fSksXG4gICAgLi4uKHRleHQgPyB7IHRleHQgfSA6IHt9KSxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkQ29kZXhJZGVudGl0eUhlYWRlcnMoXG4gIGFjY2Vzc1Rva2VuOiBzdHJpbmcsXG4gIGFjY291bnRJZDogc3RyaW5nLFxuICBjb3JyZWxhdGlvbj86IHsgc2Vzc2lvbklkPzogc3RyaW5nOyB0aHJlYWRJZD86IHN0cmluZzsgY2xpZW50UmVxdWVzdElkPzogc3RyaW5nIH0sXG4pOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHtcbiAgcmV0dXJuIHtcbiAgICBBY2NlcHQ6IFwidGV4dC9ldmVudC1zdHJlYW1cIixcbiAgICBBdXRob3JpemF0aW9uOiBgQmVhcmVyICR7YWNjZXNzVG9rZW59YCxcbiAgICBcIkNoYXRHUFQtQWNjb3VudC1JRFwiOiBhY2NvdW50SWQsXG4gICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gICAgb3JpZ2luYXRvcjogQ09ERVhfQ0xJX09SSUdJTkFUT1IsXG4gICAgXCJVc2VyLUFnZW50XCI6IGNvZGV4Q2xpVXNlckFnZW50KCksXG4gICAgLi4uKGNvcnJlbGF0aW9uPy5zZXNzaW9uSWQgPyB7IFwic2Vzc2lvbi1pZFwiOiBjb3JyZWxhdGlvbi5zZXNzaW9uSWQgfSA6IHt9KSxcbiAgICAuLi4oY29ycmVsYXRpb24/LnRocmVhZElkID8geyBcInRocmVhZC1pZFwiOiBjb3JyZWxhdGlvbi50aHJlYWRJZCB9IDoge30pLFxuICAgIC4uLihjb3JyZWxhdGlvbj8uY2xpZW50UmVxdWVzdElkID8geyBcIngtY2xpZW50LXJlcXVlc3QtaWRcIjogY29ycmVsYXRpb24uY2xpZW50UmVxdWVzdElkIH0gOiB7fSksXG4gIH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgT3BlbkFJVXNhZ2Uge1xuICBpbnB1dFRva2VuczogbnVtYmVyO1xuICBjYWNoZWRJbnB1dFRva2VuczogbnVtYmVyO1xuICBvdXRwdXRUb2tlbnM6IG51bWJlcjtcbiAgcmVhc29uaW5nVG9rZW5zOiBudW1iZXI7XG4gIHRvdGFsVG9rZW5zOiBudW1iZXI7XG59XG5cbmV4cG9ydCB0eXBlIE9wZW5BSU5vcm1hbGl6ZWRFdmVudCA9XG4gIHwgeyB0eXBlOiBcImNyZWF0ZWRcIjsgcmVzcG9uc2VJZD86IHN0cmluZyB9XG4gIHwgeyB0eXBlOiBcInRleHQtZGVsdGFcIjsgdGV4dDogc3RyaW5nOyBpdGVtSWQ/OiBzdHJpbmcgfVxuICB8IHtcbiAgICAgIHR5cGU6IFwiaW1hZ2VcIjtcbiAgICAgIGlkPzogc3RyaW5nO1xuICAgICAgYmFzZTY0OiBzdHJpbmc7XG4gICAgICBtaW1lVHlwZTogXCJpbWFnZS9wbmdcIiB8IFwiaW1hZ2UvanBlZ1wiIHwgXCJpbWFnZS93ZWJwXCI7XG4gICAgICByZXZpc2VkUHJvbXB0Pzogc3RyaW5nO1xuICAgICAgZ2VuZXJhdGlvbj86IEltYWdlR2VuZXJhdGlvbk1ldGFkYXRhO1xuICAgIH1cbiAgfCB7IHR5cGU6IFwib3V0cHV0LWl0ZW1cIjsgaXRlbTogT3BlbkFJUmVzcG9uc2VJdGVtOyBjb21wbGV0ZWQ/OiBib29sZWFuIH1cbiAgfCB7XG4gICAgICB0eXBlOiBcImNvbXBsZXRlZFwiO1xuICAgICAgcmVzcG9uc2VJZDogc3RyaW5nO1xuICAgICAgdXNhZ2U/OiBPcGVuQUlVc2FnZTtcbiAgICAgIG1vZGVsPzogc3RyaW5nO1xuICAgICAgaW1hZ2VHZW5lcmF0aW9uPzogSW1hZ2VHZW5lcmF0aW9uTWV0YWRhdGE7XG4gICAgfVxuICB8IHsgdHlwZTogXCJlcnJvclwiOyBlcnJvcjogT3BlbkFJUHJvdG9jb2xFcnJvciB9O1xuXG5leHBvcnQgY2xhc3MgT3BlbkFJUHJvdG9jb2xFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IoXG4gICAgbWVzc2FnZTogc3RyaW5nLFxuICAgIHB1YmxpYyByZWFkb25seSBjb2RlPzogc3RyaW5nLFxuICAgIHB1YmxpYyByZWFkb25seSBzdGF0dXM/OiBudW1iZXIsXG4gICAgcHVibGljIHJlYWRvbmx5IHJldHJ5QWZ0ZXJNcz86IG51bWJlcixcbiAgKSB7XG4gICAgc3VwZXIobWVzc2FnZSk7XG4gICAgdGhpcy5uYW1lID0gXCJPcGVuQUlQcm90b2NvbEVycm9yXCI7XG4gIH1cbn1cblxuZnVuY3Rpb24gdXNhZ2VGcm9tKHZhbHVlOiB1bmtub3duKTogT3BlbkFJVXNhZ2UgfCB1bmRlZmluZWQge1xuICBpZiAoIXZhbHVlIHx8IHR5cGVvZiB2YWx1ZSAhPT0gXCJvYmplY3RcIikgcmV0dXJuIHVuZGVmaW5lZDtcbiAgY29uc3QgdXNhZ2UgPSB2YWx1ZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgY29uc3QgaW5wdXREZXRhaWxzID0gKHVzYWdlLmlucHV0X3Rva2Vuc19kZXRhaWxzID8/IHt9KSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgY29uc3Qgb3V0cHV0RGV0YWlscyA9ICh1c2FnZS5vdXRwdXRfdG9rZW5zX2RldGFpbHMgPz8ge30pIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICByZXR1cm4ge1xuICAgIGlucHV0VG9rZW5zOiBOdW1iZXIodXNhZ2UuaW5wdXRfdG9rZW5zID8/IDApLFxuICAgIGNhY2hlZElucHV0VG9rZW5zOiBOdW1iZXIoaW5wdXREZXRhaWxzLmNhY2hlZF90b2tlbnMgPz8gMCksXG4gICAgb3V0cHV0VG9rZW5zOiBOdW1iZXIodXNhZ2Uub3V0cHV0X3Rva2VucyA/PyAwKSxcbiAgICByZWFzb25pbmdUb2tlbnM6IE51bWJlcihvdXRwdXREZXRhaWxzLnJlYXNvbmluZ190b2tlbnMgPz8gMCksXG4gICAgdG90YWxUb2tlbnM6IE51bWJlcih1c2FnZS50b3RhbF90b2tlbnMgPz8gMCksXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbWFnZU1pbWVUeXBlKFxuICBiYXNlNjQ6IHN0cmluZyxcbiAgb3V0cHV0Rm9ybWF0PzogdW5rbm93bixcbik6IFwiaW1hZ2UvcG5nXCIgfCBcImltYWdlL2pwZWdcIiB8IFwiaW1hZ2Uvd2VicFwiIHtcbiAgLy8gSW5zcGVjdCBvbmx5IHRoZSBoZWFkZXIsIHdpdGhvdXQgZGVjb2RpbmcgYSBwb3RlbnRpYWxseSBsYXJnZSBpbWFnZSB0d2ljZS5cbiAgY29uc3QgaGVhZGVyID0gQnVmZmVyLmZyb20oYmFzZTY0LnNsaWNlKDAsIDI0KSwgXCJiYXNlNjRcIik7XG4gIGlmIChoZWFkZXIuc3ViYXJyYXkoMCwgOCkuZXF1YWxzKEJ1ZmZlci5mcm9tKFsxMzcsIDgwLCA3OCwgNzEsIDEzLCAxMCwgMjYsIDEwXSkpKVxuICAgIHJldHVybiBcImltYWdlL3BuZ1wiO1xuICBpZiAoaGVhZGVyWzBdID09PSAyNTUgJiYgaGVhZGVyWzFdID09PSAyMTYgJiYgaGVhZGVyWzJdID09PSAyNTUpIHJldHVybiBcImltYWdlL2pwZWdcIjtcbiAgaWYgKGhlYWRlci50b1N0cmluZyhcImFzY2lpXCIsIDAsIDQpID09PSBcIlJJRkZcIiAmJiBoZWFkZXIudG9TdHJpbmcoXCJhc2NpaVwiLCA4LCAxMikgPT09IFwiV0VCUFwiKVxuICAgIHJldHVybiBcImltYWdlL3dlYnBcIjtcbiAgaWYgKG91dHB1dEZvcm1hdCA9PT0gXCJqcGVnXCIpIHJldHVybiBcImltYWdlL2pwZWdcIjtcbiAgaWYgKG91dHB1dEZvcm1hdCA9PT0gXCJ3ZWJwXCIpIHJldHVybiBcImltYWdlL3dlYnBcIjtcbiAgaWYgKG91dHB1dEZvcm1hdCA9PT0gdW5kZWZpbmVkIHx8IG91dHB1dEZvcm1hdCA9PT0gXCJwbmdcIikgcmV0dXJuIFwiaW1hZ2UvcG5nXCI7XG4gIHRocm93IG5ldyBPcGVuQUlQcm90b2NvbEVycm9yKGBVbnN1cHBvcnRlZCBpbWFnZSBvdXRwdXQgZm9ybWF0OiAke1N0cmluZyhvdXRwdXRGb3JtYXQpfWApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplT3BlbkFJRXZlbnQocmF3OiB1bmtub3duKTogT3BlbkFJTm9ybWFsaXplZEV2ZW50IHwgdW5kZWZpbmVkIHtcbiAgaWYgKCFyYXcgfHwgdHlwZW9mIHJhdyAhPT0gXCJvYmplY3RcIikgcmV0dXJuIHVuZGVmaW5lZDtcbiAgY29uc3QgZXZlbnQgPSByYXcgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIGNvbnN0IHR5cGUgPSBTdHJpbmcoZXZlbnQudHlwZSA/PyBcIlwiKTtcbiAgaWYgKHR5cGUgPT09IFwicmVzcG9uc2UuY3JlYXRlZFwiKSB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBldmVudC5yZXNwb25zZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZDtcbiAgICByZXR1cm4geyB0eXBlOiBcImNyZWF0ZWRcIiwgLi4uKHJlc3BvbnNlPy5pZCA/IHsgcmVzcG9uc2VJZDogU3RyaW5nKHJlc3BvbnNlLmlkKSB9IDoge30pIH07XG4gIH1cbiAgaWYgKHR5cGUgPT09IFwicmVzcG9uc2Uub3V0cHV0X3RleHQuZGVsdGFcIiAmJiB0eXBlb2YgZXZlbnQuZGVsdGEgPT09IFwic3RyaW5nXCIpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJ0ZXh0LWRlbHRhXCIsXG4gICAgICB0ZXh0OiBldmVudC5kZWx0YSxcbiAgICAgIC4uLih0eXBlb2YgZXZlbnQuaXRlbV9pZCA9PT0gXCJzdHJpbmdcIiA/IHsgaXRlbUlkOiBldmVudC5pdGVtX2lkIH0gOiB7fSksXG4gICAgfTtcbiAgfVxuICBpZiAoXG4gICAgKHR5cGUgPT09IFwicmVzcG9uc2Uub3V0cHV0X2l0ZW0uYWRkZWRcIiB8fCB0eXBlID09PSBcInJlc3BvbnNlLm91dHB1dF9pdGVtLmRvbmVcIikgJiZcbiAgICBldmVudC5pdGVtICYmXG4gICAgdHlwZW9mIGV2ZW50Lml0ZW0gPT09IFwib2JqZWN0XCJcbiAgKSB7XG4gICAgY29uc3QgaXRlbSA9IGV2ZW50Lml0ZW0gYXMgT3BlbkFJUmVzcG9uc2VJdGVtO1xuICAgIGlmIChpdGVtLnR5cGUgPT09IFwiaW1hZ2VfZ2VuZXJhdGlvbl9jYWxsXCIgJiYgdHlwZW9mIGl0ZW0ucmVzdWx0ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAvLyBQTkcgZXhwb3NlcyBkaW1lbnNpb25zIGluIGl0cyBmaXhlZCBoZWFkZXIuIE90aGVyIGZvcm1hdHMgcmV0YWluIHRoZVxuICAgICAgLy8gYmFja2VuZCdzIG9ic2VydmVkIHNpemU7IG5ldmVyIHN1YnN0aXR1dGUgcmVxdWVzdGVkIGltYWdlIGNvbnRyb2xzLlxuICAgICAgY29uc3QgaGVhZGVyID0gQnVmZmVyLmZyb20oaXRlbS5yZXN1bHQuc2xpY2UoMCwgMzIpLCBcImJhc2U2NFwiKTtcbiAgICAgIGNvbnN0IHBuZ1NpemUgPVxuICAgICAgICBoZWFkZXIubGVuZ3RoID49IDI0ICYmXG4gICAgICAgIGhlYWRlci5zdWJhcnJheSgwLCA4KS5lcXVhbHMoQnVmZmVyLmZyb20oXCI4OTUwNGU0NzBkMGExYTBhXCIsIFwiaGV4XCIpKSAmJlxuICAgICAgICBoZWFkZXIucmVhZFVJbnQzMkJFKDE2KSA+IDAgJiZcbiAgICAgICAgaGVhZGVyLnJlYWRVSW50MzJCRSgyMCkgPiAwXG4gICAgICAgICAgPyBgJHtoZWFkZXIucmVhZFVJbnQzMkJFKDE2KX14JHtoZWFkZXIucmVhZFVJbnQzMkJFKDIwKX1gXG4gICAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgICBjb25zdCBzaXplID1cbiAgICAgICAgcG5nU2l6ZSA/P1xuICAgICAgICAodHlwZW9mIGl0ZW0uc2l6ZSA9PT0gXCJzdHJpbmdcIiAmJiAvXlsxLTldXFxkKnhbMS05XVxcZCokLy50ZXN0KGl0ZW0uc2l6ZSlcbiAgICAgICAgICA/IGl0ZW0uc2l6ZVxuICAgICAgICAgIDogdW5kZWZpbmVkKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6IFwiaW1hZ2VcIixcbiAgICAgICAgLi4uKHR5cGVvZiBpdGVtLmlkID09PSBcInN0cmluZ1wiID8geyBpZDogaXRlbS5pZCB9IDoge30pLFxuICAgICAgICBiYXNlNjQ6IGl0ZW0ucmVzdWx0LFxuICAgICAgICBtaW1lVHlwZTogaW1hZ2VNaW1lVHlwZShpdGVtLnJlc3VsdCwgaXRlbS5vdXRwdXRfZm9ybWF0KSxcbiAgICAgICAgZ2VuZXJhdGlvbjoge1xuICAgICAgICAgIHJvdXRlOiBcImNvZGV4LXJlc3BvbnNlc1wiLFxuICAgICAgICAgIC4uLihzaXplID8geyBzaXplIH0gOiB7fSksXG4gICAgICAgICAgLi4uKHR5cGVvZiBpdGVtLm1vZGVsID09PSBcInN0cmluZ1wiID8geyBtb2RlbDogaXRlbS5tb2RlbCB9IDoge30pLFxuICAgICAgICAgIC4uLih0eXBlb2YgaXRlbS5xdWFsaXR5ID09PSBcInN0cmluZ1wiID8geyBxdWFsaXR5OiBpdGVtLnF1YWxpdHkgfSA6IHt9KSxcbiAgICAgICAgICAuLi4odHlwZW9mIGl0ZW0uYmFja2dyb3VuZCA9PT0gXCJzdHJpbmdcIiA/IHsgYmFja2dyb3VuZDogaXRlbS5iYWNrZ3JvdW5kIH0gOiB7fSksXG4gICAgICAgIH0sXG4gICAgICAgIC4uLih0eXBlb2YgaXRlbS5yZXZpc2VkX3Byb21wdCA9PT0gXCJzdHJpbmdcIlxuICAgICAgICAgID8geyByZXZpc2VkUHJvbXB0OiBpdGVtLnJldmlzZWRfcHJvbXB0IH1cbiAgICAgICAgICA6IHR5cGVvZiBpdGVtLnJldmlzZWRQcm9tcHQgPT09IFwic3RyaW5nXCJcbiAgICAgICAgICAgID8geyByZXZpc2VkUHJvbXB0OiBpdGVtLnJldmlzZWRQcm9tcHQgfVxuICAgICAgICAgICAgOiB7fSksXG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4geyB0eXBlOiBcIm91dHB1dC1pdGVtXCIsIGl0ZW0sIGNvbXBsZXRlZDogdHlwZSA9PT0gXCJyZXNwb25zZS5vdXRwdXRfaXRlbS5kb25lXCIgfTtcbiAgfVxuICBpZiAodHlwZSA9PT0gXCJyZXNwb25zZS5jb21wbGV0ZWRcIikge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gKGV2ZW50LnJlc3BvbnNlID8/IHt9KSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICBjb25zdCB0b29sVXNhZ2UgPSByZXNwb25zZS50b29sX3VzYWdlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkO1xuICAgIGNvbnN0IHBhcnNlZEltYWdlVXNhZ2UgPSBJbWFnZUdlbmVyYXRpb25NZXRhZGF0YS5zaGFwZS51c2FnZS5zYWZlUGFyc2UodG9vbFVzYWdlPy5pbWFnZV9nZW4pO1xuICAgIGNvbnN0IGltYWdlVXNhZ2UgPSBwYXJzZWRJbWFnZVVzYWdlLnN1Y2Nlc3MgPyBwYXJzZWRJbWFnZVVzYWdlLmRhdGEgOiB1bmRlZmluZWQ7XG4gICAgY29uc3QgaW1hZ2VUb29sID0gQXJyYXkuaXNBcnJheShyZXNwb25zZS50b29scylcbiAgICAgID8gcmVzcG9uc2UudG9vbHMuZmluZCgodG9vbCkgPT4gdG9vbD8udHlwZSA9PT0gXCJpbWFnZV9nZW5lcmF0aW9uXCIpXG4gICAgICA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCBpbWFnZU1vZGVsID0gdHlwZW9mIGltYWdlVG9vbD8ubW9kZWwgPT09IFwic3RyaW5nXCIgPyBpbWFnZVRvb2wubW9kZWwgOiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwiY29tcGxldGVkXCIsXG4gICAgICByZXNwb25zZUlkOiBTdHJpbmcocmVzcG9uc2UuaWQgPz8gXCJcIiksXG4gICAgICAuLi4ocmVzcG9uc2UudXNhZ2UgPyB7IHVzYWdlOiB1c2FnZUZyb20ocmVzcG9uc2UudXNhZ2UpIH0gOiB7fSksXG4gICAgICAuLi4odHlwZW9mIHJlc3BvbnNlLm1vZGVsID09PSBcInN0cmluZ1wiID8geyBtb2RlbDogcmVzcG9uc2UubW9kZWwgfSA6IHt9KSxcbiAgICAgIC4uLihpbWFnZVVzYWdlIHx8IGltYWdlTW9kZWxcbiAgICAgICAgPyB7XG4gICAgICAgICAgICBpbWFnZUdlbmVyYXRpb246IHtcbiAgICAgICAgICAgICAgcm91dGU6IFwiY29kZXgtcmVzcG9uc2VzXCIgYXMgY29uc3QsXG4gICAgICAgICAgICAgIC4uLihpbWFnZU1vZGVsID8geyBtb2RlbDogaW1hZ2VNb2RlbCB9IDoge30pLFxuICAgICAgICAgICAgICAuLi4oaW1hZ2VVc2FnZSA/IHsgdXNhZ2U6IGltYWdlVXNhZ2UgfSA6IHt9KSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfVxuICAgICAgICA6IHt9KSxcbiAgICB9O1xuICB9XG4gIGlmICh0eXBlID09PSBcImVycm9yXCIgfHwgdHlwZSA9PT0gXCJyZXNwb25zZS5mYWlsZWRcIiB8fCB0eXBlID09PSBcInJlc3BvbnNlLmluY29tcGxldGVcIikge1xuICAgIGNvbnN0IHNvdXJjZSA9IChldmVudC5lcnJvciA/PyBldmVudC5yZXNwb25zZSA/PyBldmVudCkgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgY29uc3QgbmVzdGVkID0gKHNvdXJjZS5lcnJvciA/PyBzb3VyY2UpIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcImVycm9yXCIsXG4gICAgICBlcnJvcjogbmV3IE9wZW5BSVByb3RvY29sRXJyb3IoXG4gICAgICAgIFN0cmluZyhuZXN0ZWQubWVzc2FnZSA/PyBgT3BlbkFJIHN0cmVhbSBlbmRlZCB3aXRoICR7dHlwZX1gKSxcbiAgICAgICAgdHlwZW9mIG5lc3RlZC5jb2RlID09PSBcInN0cmluZ1wiID8gbmVzdGVkLmNvZGUgOiB1bmRlZmluZWQsXG4gICAgICApLFxuICAgIH07XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7O0FBS0EsTUFBYSw4QkFD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
|
|
@@ -299,7 +299,7 @@ var OpenAIDirectClient = class {
|
|
|
299
299
|
this.transport = options.transport ?? (options.transportKind === "websocket" ? new OpenAIWebSocketTransport(options) : new OpenAIHttpsTransport(options));
|
|
300
300
|
}
|
|
301
301
|
responses(options, signal) {
|
|
302
|
-
if (typeof options.imageGeneration === "object" && options.imageGeneration.background === "transparent") return this.standaloneImages(options, signal);
|
|
302
|
+
if (options.model === "gpt-image-2" || typeof options.imageGeneration === "object" && options.imageGeneration.background === "transparent") return this.standaloneImages(options, signal);
|
|
303
303
|
const clientRequestId = crypto.randomUUID();
|
|
304
304
|
const affinityId = options.promptCacheKey ? cacheAffinityUuid(options.promptCacheKey) : clientRequestId;
|
|
305
305
|
return this.transport.stream({
|
|
@@ -334,13 +334,14 @@ var OpenAIDirectClient = class {
|
|
|
334
334
|
continue;
|
|
335
335
|
}
|
|
336
336
|
if (!response.ok) throw await responseError(response);
|
|
337
|
-
const images = await readStandaloneImageResponse(response);
|
|
337
|
+
const images = await readStandaloneImageResponse(response, typeof options.imageGeneration === "object" && options.imageGeneration.background === "transparent");
|
|
338
338
|
signal?.throwIfAborted();
|
|
339
339
|
yield* images;
|
|
340
|
+
const firstImage = images[0];
|
|
340
341
|
yield {
|
|
341
342
|
type: "completed",
|
|
342
343
|
responseId: requestId,
|
|
343
|
-
model: "gpt-image-2"
|
|
344
|
+
model: firstImage?.type === "image" ? firstImage.generation?.model : "gpt-image-2"
|
|
344
345
|
};
|
|
345
346
|
return;
|
|
346
347
|
}
|
|
@@ -352,4 +353,4 @@ var OpenAIDirectClient = class {
|
|
|
352
353
|
//#endregion
|
|
353
354
|
export { OpenAIDirectClient, OpenAIHttpsTransport, OpenAIWebSocketTransport };
|
|
354
355
|
|
|
355
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3BlbmFpLWRpcmVjdC1jbGllbnQuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3V0aWxzL3Byb3ZpZGVycy9vcGVuYWkvb3BlbmFpLWRpcmVjdC1jbGllbnQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGNyeXB0byBmcm9tIFwibm9kZTpjcnlwdG9cIjtcblxuaW1wb3J0IFdzQ2xpZW50LCB7IHR5cGUgQ2xpZW50T3B0aW9ucywgdHlwZSBSYXdEYXRhIH0gZnJvbSBcIndzXCI7XG5cbmltcG9ydCB7XG4gIGJ1aWxkQ29kZXhJZGVudGl0eUhlYWRlcnMsXG4gIGJ1aWxkT3BlbkFJUmVzcG9uc2VzUmVxdWVzdCxcbiAgQ0hBVEdQVF9DT0RFWF9SRVNQT05TRVNfVVJMLFxuICBub3JtYWxpemVPcGVuQUlFdmVudCxcbiAgT3BlbkFJUHJvdG9jb2xFcnJvcixcbiAgdHlwZSBPcGVuQUlOb3JtYWxpemVkRXZlbnQsXG4gIHR5cGUgT3BlbkFJUmVzcG9uc2VzT3B0aW9ucyxcbiAgdHlwZSBPcGVuQUlSZXNwb25zZXNSZXF1ZXN0LFxufSBmcm9tIFwiLi9vcGVuYWktYmFja2VuZC1wcm90b2NvbFwiO1xuaW1wb3J0IHtcbiAgYnVpbGRTdGFuZGFsb25lSW1hZ2VSZXF1ZXN0LFxuICByZWFkU3RhbmRhbG9uZUltYWdlUmVzcG9uc2UsXG59IGZyb20gXCIuL29wZW5haS1pbWFnZS1nZW5lcmF0aW9uXCI7XG5pbXBvcnQgeyBub3JtYWxpemVPcGVuQUlTU0UsIHR5cGUgT3BlbkFJRXZlbnRTdHJlYW0gfSBmcm9tIFwiLi9vcGVuYWktc3NlXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgT3BlbkFJRGlyZWN0Q3JlZGVudGlhbHMge1xuICBhY2Nlc3NUb2tlbjogc3RyaW5nO1xuICBhY2NvdW50SWQ6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBPcGVuQUlUcmFuc3BvcnRSZXF1ZXN0IHtcbiAgYm9keTogT3BlbkFJUmVzcG9uc2VzUmVxdWVzdDtcbiAgc2lnbmFsPzogQWJvcnRTaWduYWw7XG4gIHNlc3Npb25JZDogc3RyaW5nO1xuICB0aHJlYWRJZDogc3RyaW5nO1xuICBjbGllbnRSZXF1ZXN0SWQ6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBPcGVuQUlSZXNwb25zZXNUcmFuc3BvcnQge1xuICBzdHJlYW0ocmVxdWVzdDogT3BlbkFJVHJhbnNwb3J0UmVxdWVzdCk6IE9wZW5BSUV2ZW50U3RyZWFtO1xuICBjbG9zZT8oKTogdm9pZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBPcGVuQUlIdHRwc1RyYW5zcG9ydE9wdGlvbnMge1xuICBjcmVkZW50aWFsczogT3BlbkFJRGlyZWN0Q3JlZGVudGlhbHM7XG4gIGZldGNoPzogdHlwZW9mIGZldGNoO1xuICByZWZyZXNoQ3JlZGVudGlhbHM/OiAoKSA9PiBQcm9taXNlPE9wZW5BSURpcmVjdENyZWRlbnRpYWxzPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBPcGVuQUlXZWJTb2NrZXRMaWtlIHtcbiAgb24oZXZlbnQ6IFwib3BlblwiLCBsaXN0ZW5lcjogKCkgPT4gdm9pZCk6IHRoaXM7XG4gIG9uKGV2ZW50OiBcIm1lc3NhZ2VcIiwgbGlzdGVuZXI6IChkYXRhOiBSYXdEYXRhLCBpc0JpbmFyeTogYm9vbGVhbikgPT4gdm9pZCk6IHRoaXM7XG4gIG9uKGV2ZW50OiBcImNsb3NlXCIsIGxpc3RlbmVyOiAoY29kZTogbnVtYmVyLCByZWFzb246IEJ1ZmZlcikgPT4gdm9pZCk6IHRoaXM7XG4gIG9uKGV2ZW50OiBcImVycm9yXCIsIGxpc3RlbmVyOiAoZXJyb3I6IEVycm9yKSA9PiB2b2lkKTogdGhpcztcbiAgb24oXG4gICAgZXZlbnQ6IFwidW5leHBlY3RlZC1yZXNwb25zZVwiLFxuICAgIGxpc3RlbmVyOiAocmVxdWVzdDogdW5rbm93biwgcmVzcG9uc2U6IHsgc3RhdHVzQ29kZT86IG51bWJlciB9KSA9PiB2b2lkLFxuICApOiB0aGlzO1xuICBvZmYoZXZlbnQ6IHN0cmluZywgbGlzdGVuZXI6ICguLi5hcmdzOiBuZXZlcltdKSA9PiB2b2lkKTogdGhpcztcbiAgc2VuZChkYXRhOiBzdHJpbmcsIGNhbGxiYWNrPzogKGVycm9yPzogRXJyb3IpID0+IHZvaWQpOiB2b2lkO1xuICBjbG9zZShjb2RlPzogbnVtYmVyLCByZWFzb24/OiBzdHJpbmcpOiB2b2lkO1xuICB0ZXJtaW5hdGUoKTogdm9pZDtcbn1cblxuZXhwb3J0IHR5cGUgT3BlbkFJV2ViU29ja2V0RmFjdG9yeSA9ICh1cmw6IHN0cmluZywgb3B0aW9uczogQ2xpZW50T3B0aW9ucykgPT4gT3BlbkFJV2ViU29ja2V0TGlrZTtcblxuZXhwb3J0IGludGVyZmFjZSBPcGVuQUlXZWJTb2NrZXRUcmFuc3BvcnRPcHRpb25zIGV4dGVuZHMgT3BlbkFJSHR0cHNUcmFuc3BvcnRPcHRpb25zIHtcbiAgd2ViU29ja2V0RmFjdG9yeT86IE9wZW5BSVdlYlNvY2tldEZhY3Rvcnk7XG59XG5cbnR5cGUgU29ja2V0UmVjb3JkID1cbiAgfCB7IGtpbmQ6IFwib3BlblwiIH1cbiAgfCB7IGtpbmQ6IFwibWVzc2FnZVwiOyBkYXRhOiBSYXdEYXRhOyBpc0JpbmFyeTogYm9vbGVhbiB9XG4gIHwgeyBraW5kOiBcImNsb3NlXCI7IGNvZGU6IG51bWJlcjsgcmVhc29uOiBzdHJpbmcgfVxuICB8IHsga2luZDogXCJlcnJvclwiOyBlcnJvcjogRXJyb3IgfVxuICB8IHsga2luZDogXCJyZWplY3RlZFwiOyBzdGF0dXM/OiBudW1iZXIgfTtcblxuY29uc3QgTUFYX0JVRkZFUkVEX1NPQ0tFVF9SRUNPUkRTID0gMTYwMDtcblxuZnVuY3Rpb24gd2Vic29ja2V0VXJsKHVybDogc3RyaW5nKTogc3RyaW5nIHtcbiAgbGV0IHBhcnNlZDogVVJMO1xuICB0cnkge1xuICAgIHBhcnNlZCA9IG5ldyBVUkwodXJsKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICB0aHJvdyBuZXcgT3BlbkFJUHJvdG9jb2xFcnJvcihgSW52YWxpZCBPcGVuQUkgUmVzcG9uc2VzIFVSTDogJHtTdHJpbmcoZXJyb3IpfWApO1xuICB9XG4gIHBhcnNlZC5wcm90b2NvbCA9IHBhcnNlZC5wcm90b2NvbCA9PT0gXCJodHRwczpcIiA/IFwid3NzOlwiIDogXCJ3czpcIjtcbiAgcmV0dXJuIHBhcnNlZC50b1N0cmluZygpO1xufVxuXG5mdW5jdGlvbiByYXdEYXRhVGV4dChkYXRhOiBSYXdEYXRhKTogc3RyaW5nIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoZGF0YSkpIHJldHVybiBCdWZmZXIuY29uY2F0KGRhdGEpLnRvU3RyaW5nKCk7XG4gIGlmIChkYXRhIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpIHJldHVybiBCdWZmZXIuZnJvbShuZXcgVWludDhBcnJheShkYXRhKSkudG9TdHJpbmcoKTtcbiAgcmV0dXJuIEJ1ZmZlci5mcm9tKGRhdGEpLnRvU3RyaW5nKCk7XG59XG5cbmZ1bmN0aW9uIHNvY2tldEV2ZW50cyhzb2NrZXQ6IE9wZW5BSVdlYlNvY2tldExpa2UsIHNpZ25hbD86IEFib3J0U2lnbmFsKSB7XG4gIGNvbnN0IHJlY29yZHM6IFNvY2tldFJlY29yZFtdID0gW107XG4gIGNvbnN0IHdhaXRlcnM6IEFycmF5PChyZWNvcmQ6IFNvY2tldFJlY29yZCkgPT4gdm9pZD4gPSBbXTtcbiAgbGV0IGFjdGl2ZSA9IHRydWU7XG4gIGNvbnN0IHB1c2ggPSAocmVjb3JkOiBTb2NrZXRSZWNvcmQpID0+IHtcbiAgICBpZiAoIWFjdGl2ZSkgcmV0dXJuO1xuICAgIGNvbnN0IHdhaXRlciA9IHdhaXRlcnMuc2hpZnQoKTtcbiAgICBpZiAod2FpdGVyKSB3YWl0ZXIocmVjb3JkKTtcbiAgICBlbHNlIGlmIChyZWNvcmRzLmxlbmd0aCA8IE1BWF9CVUZGRVJFRF9TT0NLRVRfUkVDT1JEUykgcmVjb3Jkcy5wdXNoKHJlY29yZCk7XG4gICAgZWxzZSB7XG4gICAgICBhY3RpdmUgPSBmYWxzZTtcbiAgICAgIHJlY29yZHMubGVuZ3RoID0gMDtcbiAgICAgIHNvY2tldC50ZXJtaW5hdGUoKTtcbiAgICAgIGNvbnN0IG92ZXJmbG93ID0ge1xuICAgICAgICBraW5kOiBcImVycm9yXCIgYXMgY29uc3QsXG4gICAgICAgIGVycm9yOiBuZXcgT3BlbkFJUHJvdG9jb2xFcnJvcihcbiAgICAgICAgICBgT3BlbkFJIFdlYlNvY2tldCBleGNlZWRlZCB0aGUgJHtNQVhfQlVGRkVSRURfU09DS0VUX1JFQ09SRFN9LXJlY29yZCByZWNlaXZlIGJ1ZmZlcmAsXG4gICAgICAgICAgXCJ3ZWJzb2NrZXRfYmFja3ByZXNzdXJlXCIsXG4gICAgICAgICksXG4gICAgICB9O1xuICAgICAgY29uc3Qgb3ZlcmZsb3dXYWl0ZXIgPSB3YWl0ZXJzLnNoaWZ0KCk7XG4gICAgICBpZiAob3ZlcmZsb3dXYWl0ZXIpIG92ZXJmbG93V2FpdGVyKG92ZXJmbG93KTtcbiAgICAgIGVsc2UgcmVjb3Jkcy5wdXNoKG92ZXJmbG93KTtcbiAgICB9XG4gIH07XG4gIGNvbnN0IG9uT3BlbiA9ICgpID0+IHB1c2goeyBraW5kOiBcIm9wZW5cIiB9KTtcbiAgY29uc3Qgb25NZXNzYWdlID0gKGRhdGE6IFJhd0RhdGEsIGlzQmluYXJ5OiBib29sZWFuKSA9PiBwdXNoKHsga2luZDogXCJtZXNzYWdlXCIsIGRhdGEsIGlzQmluYXJ5IH0pO1xuICBjb25zdCBvbkNsb3NlID0gKGNvZGU6IG51bWJlciwgcmVhc29uOiBCdWZmZXIpID0+XG4gICAgcHVzaCh7IGtpbmQ6IFwiY2xvc2VcIiwgY29kZSwgcmVhc29uOiByZWFzb24udG9TdHJpbmcoKSB9KTtcbiAgY29uc3Qgb25FcnJvciA9IChlcnJvcjogRXJyb3IpID0+IHB1c2goeyBraW5kOiBcImVycm9yXCIsIGVycm9yIH0pO1xuICBjb25zdCBvblVuZXhwZWN0ZWRSZXNwb25zZSA9IChfcmVxdWVzdDogdW5rbm93biwgcmVzcG9uc2U6IHsgc3RhdHVzQ29kZT86IG51bWJlciB9KSA9PlxuICAgIHB1c2goeyBraW5kOiBcInJlamVjdGVkXCIsIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzQ29kZSB9KTtcbiAgc29ja2V0Lm9uKFwib3BlblwiLCBvbk9wZW4pO1xuICBzb2NrZXQub24oXCJtZXNzYWdlXCIsIG9uTWVzc2FnZSk7XG4gIHNvY2tldC5vbihcImNsb3NlXCIsIG9uQ2xvc2UpO1xuICBzb2NrZXQub24oXCJlcnJvclwiLCBvbkVycm9yKTtcbiAgc29ja2V0Lm9uKFwidW5leHBlY3RlZC1yZXNwb25zZVwiLCBvblVuZXhwZWN0ZWRSZXNwb25zZSk7XG4gIGNvbnN0IG9uQWJvcnQgPSAoKSA9PiB7XG4gICAgc29ja2V0LnRlcm1pbmF0ZSgpO1xuICAgIHB1c2goeyBraW5kOiBcImVycm9yXCIsIGVycm9yOiBhYm9ydEVycm9yKHNpZ25hbCkgfSk7XG4gIH07XG4gIHNpZ25hbD8uYWRkRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsIG9uQWJvcnQsIHsgb25jZTogdHJ1ZSB9KTtcbiAgcmV0dXJuIHtcbiAgICBuZXh0OiAoKSA9PlxuICAgICAgcmVjb3Jkcy5sZW5ndGhcbiAgICAgICAgPyBQcm9taXNlLnJlc29sdmUocmVjb3Jkcy5zaGlmdCgpISlcbiAgICAgICAgOiBuZXcgUHJvbWlzZTxTb2NrZXRSZWNvcmQ+KChyZXNvbHZlKSA9PiB3YWl0ZXJzLnB1c2gocmVzb2x2ZSkpLFxuICAgIGNsZWFudXA6ICgpID0+IHtcbiAgICAgIGFjdGl2ZSA9IGZhbHNlO1xuICAgICAgc2lnbmFsPy5yZW1vdmVFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgb25BYm9ydCk7XG4gICAgICBzb2NrZXQub2ZmKFwib3BlblwiLCBvbk9wZW4pO1xuICAgICAgc29ja2V0Lm9mZihcIm1lc3NhZ2VcIiwgb25NZXNzYWdlKTtcbiAgICAgIHNvY2tldC5vZmYoXCJjbG9zZVwiLCBvbkNsb3NlKTtcbiAgICAgIHNvY2tldC5vZmYoXCJlcnJvclwiLCBvbkVycm9yKTtcbiAgICAgIHNvY2tldC5vZmYoXCJ1bmV4cGVjdGVkLXJlc3BvbnNlXCIsIG9uVW5leHBlY3RlZFJlc3BvbnNlKTtcbiAgICAgIHJlY29yZHMubGVuZ3RoID0gMDtcbiAgICAgIGNvbnN0IGNsb3NlZCA9IHtcbiAgICAgICAga2luZDogXCJlcnJvclwiIGFzIGNvbnN0LFxuICAgICAgICBlcnJvcjogbmV3IE9wZW5BSVByb3RvY29sRXJyb3IoXCJPcGVuQUkgV2ViU29ja2V0IGV2ZW50IHN0cmVhbSB3YXMgY2xvc2VkXCIpLFxuICAgICAgfTtcbiAgICAgIHdhaXRlcnMuc3BsaWNlKDApLmZvckVhY2goKHdhaXRlcikgPT4gd2FpdGVyKGNsb3NlZCkpO1xuICAgIH0sXG4gICAgZGV0YWNoQWJvcnQ6ICgpID0+IHNpZ25hbD8ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsIG9uQWJvcnQpLFxuICB9O1xufVxuXG5mdW5jdGlvbiBhYm9ydEVycm9yKHNpZ25hbD86IEFib3J0U2lnbmFsKTogRXJyb3Ige1xuICByZXR1cm4gc2lnbmFsPy5yZWFzb24gaW5zdGFuY2VvZiBFcnJvclxuICAgID8gc2lnbmFsLnJlYXNvblxuICAgIDogbmV3IERPTUV4Y2VwdGlvbihcIkFib3J0ZWRcIiwgXCJBYm9ydEVycm9yXCIpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBuZXh0UG9vbGVkUmVjb3JkKFxuICBldmVudHM6IFJldHVyblR5cGU8dHlwZW9mIHNvY2tldEV2ZW50cz4sXG4gIHNvY2tldDogT3BlbkFJV2ViU29ja2V0TGlrZSxcbiAgc2lnbmFsPzogQWJvcnRTaWduYWwsXG4pOiBQcm9taXNlPFNvY2tldFJlY29yZD4ge1xuICBpZiAoIXNpZ25hbCkgcmV0dXJuIGV2ZW50cy5uZXh0KCk7XG4gIGlmIChzaWduYWwuYWJvcnRlZCkgdGhyb3cgYWJvcnRFcnJvcihzaWduYWwpO1xuICByZXR1cm4gbmV3IFByb21pc2U8U29ja2V0UmVjb3JkPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3Qgb25BYm9ydCA9ICgpID0+IHtcbiAgICAgIHNvY2tldC50ZXJtaW5hdGUoKTtcbiAgICAgIHJlamVjdChhYm9ydEVycm9yKHNpZ25hbCkpO1xuICAgIH07XG4gICAgc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCBvbkFib3J0LCB7IG9uY2U6IHRydWUgfSk7XG4gICAgdm9pZCBldmVudHNcbiAgICAgIC5uZXh0KClcbiAgICAgIC50aGVuKHJlc29sdmUsIHJlamVjdClcbiAgICAgIC5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCBvbkFib3J0KTtcbiAgICAgIH0pO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gY2FjaGVBZmZpbml0eVV1aWQoa2V5OiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBoZXggPSBjcnlwdG8uY3JlYXRlSGFzaChcInNoYTI1NlwiKS51cGRhdGUoa2V5KS5kaWdlc3QoXCJoZXhcIikuc2xpY2UoMCwgMzIpLnNwbGl0KFwiXCIpO1xuICBoZXhbMTJdID0gXCI0XCI7XG4gIGhleFsxNl0gPSAoKE51bWJlci5wYXJzZUludChoZXhbMTZdISwgMTYpICYgMHgzKSB8IDB4OCkudG9TdHJpbmcoMTYpO1xuICByZXR1cm4gYCR7aGV4LnNsaWNlKDAsIDgpLmpvaW4oXCJcIil9LSR7aGV4LnNsaWNlKDgsIDEyKS5qb2luKFwiXCIpfS0ke2hleC5zbGljZSgxMiwgMTYpLmpvaW4oXCJcIil9LSR7aGV4LnNsaWNlKDE2LCAyMCkuam9pbihcIlwiKX0tJHtoZXguc2xpY2UoMjApLmpvaW4oXCJcIil9YDtcbn1cblxudHlwZSBBZmZpbml0eUNvbm5lY3Rpb24gPSB7XG4gIHNvY2tldDogT3BlbkFJV2ViU29ja2V0TGlrZTtcbiAgZXZlbnRzOiBSZXR1cm5UeXBlPHR5cGVvZiBzb2NrZXRFdmVudHM+O1xuICBjbG9zZWQ/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IGNsYXNzIE9wZW5BSVdlYlNvY2tldFRyYW5zcG9ydCBpbXBsZW1lbnRzIE9wZW5BSVJlc3BvbnNlc1RyYW5zcG9ydCB7XG4gIHN0YXRpYyByZWFkb25seSBNQVhfQUZGSU5JVFlfQ09OTkVDVElPTlMgPSAxNjtcbiAgY3JlZGVudGlhbHM6IE9wZW5BSURpcmVjdENyZWRlbnRpYWxzO1xuICByZWFkb25seSByZWZyZXNoQ3JlZGVudGlhbHM/OiAoKSA9PiBQcm9taXNlPE9wZW5BSURpcmVjdENyZWRlbnRpYWxzPjtcbiAgcmVhZG9ubHkgd2ViU29ja2V0RmFjdG9yeTogT3BlbkFJV2ViU29ja2V0RmFjdG9yeTtcbiAgcmVhZG9ubHkgYWZmaW5pdHlDb25uZWN0aW9ucyA9IG5ldyBNYXA8c3RyaW5nLCBBZmZpbml0eUNvbm5lY3Rpb24+KCk7XG4gIHJlYWRvbmx5IGJ1c3lBZmZpbml0aWVzID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cbiAgY29uc3RydWN0b3Iob3B0aW9uczogT3BlbkFJV2ViU29ja2V0VHJhbnNwb3J0T3B0aW9ucykge1xuICAgIHRoaXMuY3JlZGVudGlhbHMgPSBvcHRpb25zLmNyZWRlbnRpYWxzO1xuICAgIHRoaXMucmVmcmVzaENyZWRlbnRpYWxzID0gb3B0aW9ucy5yZWZyZXNoQ3JlZGVudGlhbHM7XG4gICAgdGhpcy53ZWJTb2NrZXRGYWN0b3J5ID1cbiAgICAgIG9wdGlvbnMud2ViU29ja2V0RmFjdG9yeSA/PyAoKHVybCwgd3NPcHRpb25zKSA9PiBuZXcgV3NDbGllbnQodXJsLCB3c09wdGlvbnMpKTtcbiAgfVxuXG4gIGNsb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuYWZmaW5pdHlDb25uZWN0aW9ucy5mb3JFYWNoKCh7IHNvY2tldCwgZXZlbnRzIH0pID0+IHtcbiAgICAgIGV2ZW50cy5jbGVhbnVwKCk7XG4gICAgICBzb2NrZXQuY2xvc2UoMTAwMCwgXCJ0cmFuc3BvcnQgY2xvc2VkXCIpO1xuICAgIH0pO1xuICAgIHRoaXMuYWZmaW5pdHlDb25uZWN0aW9ucy5jbGVhcigpO1xuICAgIHRoaXMuYnVzeUFmZmluaXRpZXMuY2xlYXIoKTtcbiAgfVxuXG4gIC8vIOycoO2ctCDsl7DqsrDrp4wg7LaV7Lac7ZWc64ukLiDsoITrtoAg7IKs7JqpIOykkeydtOuptCBmYWxzZeulvCDrsJjtmZjtlbQg7J287ZqM7ISxIOyGjOy8k+ycvOuhnCDsspjrpqztlZzri6QuXG4gIHJlbWVtYmVyQWZmaW5pdHlDb25uZWN0aW9uKHRocmVhZElkOiBzdHJpbmcsIGNvbm5lY3Rpb246IEFmZmluaXR5Q29ubmVjdGlvbik6IGJvb2xlYW4ge1xuICAgIGlmIChcbiAgICAgICF0aGlzLmFmZmluaXR5Q29ubmVjdGlvbnMuaGFzKHRocmVhZElkKSAmJlxuICAgICAgdGhpcy5hZmZpbml0eUNvbm5lY3Rpb25zLnNpemUgPj0gT3BlbkFJV2ViU29ja2V0VHJhbnNwb3J0Lk1BWF9BRkZJTklUWV9DT05ORUNUSU9OU1xuICAgICkge1xuICAgICAgY29uc3QgaWRsZUtleSA9IFsuLi50aGlzLmFmZmluaXR5Q29ubmVjdGlvbnMua2V5cygpXS5maW5kKFxuICAgICAgICAoa2V5KSA9PiAhdGhpcy5idXN5QWZmaW5pdGllcy5oYXMoa2V5KSxcbiAgICAgICk7XG4gICAgICBpZiAoaWRsZUtleSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gZmFsc2U7XG4gICAgICBjb25zdCBpZGxlID0gdGhpcy5hZmZpbml0eUNvbm5lY3Rpb25zLmdldChpZGxlS2V5KSE7XG4gICAgICBpZGxlLmV2ZW50cy5jbGVhbnVwKCk7XG4gICAgICBpZGxlLnNvY2tldC5jbG9zZSgxMDAwLCBcImFmZmluaXR5IGNhY2hlIGV2aWN0ZWRcIik7XG4gICAgICB0aGlzLmFmZmluaXR5Q29ubmVjdGlvbnMuZGVsZXRlKGlkbGVLZXkpO1xuICAgIH1cbiAgICB0aGlzLmFmZmluaXR5Q29ubmVjdGlvbnMuc2V0KHRocmVhZElkLCBjb25uZWN0aW9uKTtcbiAgICAvLyDsnKDtnLQg7IOB7YOc7JeQ7IScIGJhY2tlbmQg6rCAIOuBiuydgCDshozsvJPsnYQg64uk7J2MIOyalOyyreydtCDsp5HslrTrk6Tsp4Ag7JWK64+E66GdIOy6kOyLnOyXkOyEnCDsoJzqsbDtlZzri6QuXG4gICAgY29uc3QgZHJvcCA9ICgpID0+IHtcbiAgICAgIGNvbm5lY3Rpb24uY2xvc2VkID0gdHJ1ZTtcbiAgICAgIGlmICh0aGlzLmJ1c3lBZmZpbml0aWVzLmhhcyh0aHJlYWRJZCkpIHJldHVybjtcbiAgICAgIGlmICh0aGlzLmFmZmluaXR5Q29ubmVjdGlvbnMuZ2V0KHRocmVhZElkKSAhPT0gY29ubmVjdGlvbikgcmV0dXJuO1xuICAgICAgdGhpcy5hZmZpbml0eUNvbm5lY3Rpb25zLmRlbGV0ZSh0aHJlYWRJZCk7XG4gICAgICBjb25uZWN0aW9uLmV2ZW50cy5jbGVhbnVwKCk7XG4gICAgfTtcbiAgICBjb25uZWN0aW9uLnNvY2tldC5vbihcImNsb3NlXCIsIGRyb3ApO1xuICAgIGNvbm5lY3Rpb24uc29ja2V0Lm9uKFwiZXJyb3JcIiwgZHJvcCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBhc3luYyAqc3RyZWFtKHJlcXVlc3Q6IE9wZW5BSVRyYW5zcG9ydFJlcXVlc3QpOiBBc3luY0dlbmVyYXRvcjxPcGVuQUlOb3JtYWxpemVkRXZlbnQ+IHtcbiAgICBsZXQgcmVmcmVzaGVkID0gZmFsc2U7XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGlmIChyZXF1ZXN0LnNpZ25hbD8uYWJvcnRlZCkgdGhyb3cgYWJvcnRFcnJvcihyZXF1ZXN0LnNpZ25hbCk7XG4gICAgICBjb25zdCBoYXNBZmZpbml0eSA9IHJlcXVlc3QuYm9keS5wcm9tcHRfY2FjaGVfa2V5ICE9PSB1bmRlZmluZWQ7XG4gICAgICBjb25zdCByZXRhaW5Db25uZWN0aW9uID0gaGFzQWZmaW5pdHkgJiYgIXRoaXMuYnVzeUFmZmluaXRpZXMuaGFzKHJlcXVlc3QudGhyZWFkSWQpO1xuICAgICAgaWYgKHJldGFpbkNvbm5lY3Rpb24pIHRoaXMuYnVzeUFmZmluaXRpZXMuYWRkKHJlcXVlc3QudGhyZWFkSWQpO1xuICAgICAgY29uc3QgZW50cnkgPSByZXRhaW5Db25uZWN0aW9uID8gdGhpcy5hZmZpbml0eUNvbm5lY3Rpb25zLmdldChyZXF1ZXN0LnRocmVhZElkKSA6IHVuZGVmaW5lZDtcbiAgICAgIGlmIChlbnRyeT8uY2xvc2VkKSB7XG4gICAgICAgIHRoaXMuYWZmaW5pdHlDb25uZWN0aW9ucy5kZWxldGUocmVxdWVzdC50aHJlYWRJZCk7XG4gICAgICAgIGVudHJ5LmV2ZW50cy5jbGVhbnVwKCk7XG4gICAgICB9XG4gICAgICBjb25zdCBjYWNoZWQgPSBlbnRyeT8uY2xvc2VkID8gdW5kZWZpbmVkIDogZW50cnk7XG4gICAgICBsZXQgcmV0YWluZWQgPSByZXRhaW5Db25uZWN0aW9uO1xuICAgICAgY29uc3Qgc29ja2V0ID1cbiAgICAgICAgY2FjaGVkPy5zb2NrZXQgPz9cbiAgICAgICAgdGhpcy53ZWJTb2NrZXRGYWN0b3J5KHdlYnNvY2tldFVybChDSEFUR1BUX0NPREVYX1JFU1BPTlNFU19VUkwpLCB7XG4gICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgLi4uYnVpbGRDb2RleElkZW50aXR5SGVhZGVycyh0aGlzLmNyZWRlbnRpYWxzLmFjY2Vzc1Rva2VuLCB0aGlzLmNyZWRlbnRpYWxzLmFjY291bnRJZCwge1xuICAgICAgICAgICAgICBzZXNzaW9uSWQ6IHJlcXVlc3Quc2Vzc2lvbklkLFxuICAgICAgICAgICAgICB0aHJlYWRJZDogcmVxdWVzdC50aHJlYWRJZCxcbiAgICAgICAgICAgICAgY2xpZW50UmVxdWVzdElkOiByZXF1ZXN0LmNsaWVudFJlcXVlc3RJZCxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgXCJPcGVuQUktQmV0YVwiOiBcInJlc3BvbnNlc193ZWJzb2NrZXRzPTIwMjYtMDItMDZcIixcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIGNvbnN0IGV2ZW50cyA9IGNhY2hlZD8uZXZlbnRzID8/IHNvY2tldEV2ZW50cyhzb2NrZXQsIHJlcXVlc3Quc2lnbmFsKTtcbiAgICAgIGxldCBjb21wbGV0ZWQgPSBmYWxzZTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmICghY2FjaGVkKSB7XG4gICAgICAgICAgY29uc3QgaGFuZHNoYWtlID0gYXdhaXQgZXZlbnRzLm5leHQoKTtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBoYW5kc2hha2Uua2luZCA9PT0gXCJyZWplY3RlZFwiICYmXG4gICAgICAgICAgICBoYW5kc2hha2Uuc3RhdHVzID09PSA0MDEgJiZcbiAgICAgICAgICAgICFyZWZyZXNoZWQgJiZcbiAgICAgICAgICAgIHRoaXMucmVmcmVzaENyZWRlbnRpYWxzXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBzb2NrZXQudGVybWluYXRlKCk7XG4gICAgICAgICAgICB0aGlzLmNyZWRlbnRpYWxzID0gYXdhaXQgdGhpcy5yZWZyZXNoQ3JlZGVudGlhbHMoKTtcbiAgICAgICAgICAgIHJlZnJlc2hlZCA9IHRydWU7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGhhbmRzaGFrZS5raW5kID09PSBcInJlamVjdGVkXCIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBPcGVuQUlQcm90b2NvbEVycm9yKFxuICAgICAgICAgICAgICBgT3BlbkFJIFdlYlNvY2tldCBoYW5kc2hha2UgcmVqZWN0ZWQke2hhbmRzaGFrZS5zdGF0dXMgPyBgIHdpdGggSFRUUCAke2hhbmRzaGFrZS5zdGF0dXN9YCA6IFwiXCJ9YCxcbiAgICAgICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgICAgICBoYW5kc2hha2Uuc3RhdHVzLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGhhbmRzaGFrZS5raW5kID09PSBcImVycm9yXCIpIHRocm93IGhhbmRzaGFrZS5lcnJvcjtcbiAgICAgICAgICBpZiAoaGFuZHNoYWtlLmtpbmQgIT09IFwib3BlblwiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgT3BlbkFJUHJvdG9jb2xFcnJvcihcIk9wZW5BSSBXZWJTb2NrZXQgY2xvc2VkIGJlZm9yZSB0aGUgaGFuZHNoYWtlIGNvbXBsZXRlZFwiKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHJldGFpbkNvbm5lY3Rpb24pIHtcbiAgICAgICAgICAgIHJldGFpbmVkID0gdGhpcy5yZW1lbWJlckFmZmluaXR5Q29ubmVjdGlvbihyZXF1ZXN0LnRocmVhZElkLCB7IHNvY2tldCwgZXZlbnRzIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGF3YWl0IG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICBzb2NrZXQuc2VuZChKU09OLnN0cmluZ2lmeSh7IHR5cGU6IFwicmVzcG9uc2UuY3JlYXRlXCIsIC4uLnJlcXVlc3QuYm9keSB9KSwgKGVycm9yKSA9PlxuICAgICAgICAgICAgZXJyb3IgPyByZWplY3QoZXJyb3IpIDogcmVzb2x2ZSgpLFxuICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgICAgY29uc3QgcmVjb3JkID0gY2FjaGVkXG4gICAgICAgICAgICA/IGF3YWl0IG5leHRQb29sZWRSZWNvcmQoZXZlbnRzLCBzb2NrZXQsIHJlcXVlc3Quc2lnbmFsKVxuICAgICAgICAgICAgOiBhd2FpdCBldmVudHMubmV4dCgpO1xuICAgICAgICAgIGlmIChyZWNvcmQua2luZCA9PT0gXCJtZXNzYWdlXCIpIHtcbiAgICAgICAgICAgIGlmIChyZWNvcmQuaXNCaW5hcnkpIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IE9wZW5BSVByb3RvY29sRXJyb3IoXCJPcGVuQUkgV2ViU29ja2V0IHNlbnQgYW4gdW5leHBlY3RlZCBiaW5hcnkgbWVzc2FnZVwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCByYXc6IHVua25vd247XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICByYXcgPSBKU09OLnBhcnNlKHJhd0RhdGFUZXh0KHJlY29yZC5kYXRhKSk7XG4gICAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IE9wZW5BSVByb3RvY29sRXJyb3IoXCJPcGVuQUkgV2ViU29ja2V0IHNlbnQgaW52YWxpZCBKU09OXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZXZlbnQgPSBub3JtYWxpemVPcGVuQUlFdmVudChyYXcpO1xuICAgICAgICAgICAgaWYgKCFldmVudCkgY29udGludWU7XG4gICAgICAgICAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJjb21wbGV0ZWRcIikge1xuICAgICAgICAgICAgICBjb21wbGV0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICBpZiAocmV0YWluZWQpIGV2ZW50cy5kZXRhY2hBYm9ydCgpO1xuICAgICAgICAgICAgICBlbHNlIHNvY2tldC5jbG9zZSgxMDAwLCBcInJlc3BvbnNlIGNvbXBsZXRlZFwiKTtcbiAgICAgICAgICAgICAgeWllbGQgZXZlbnQ7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHlpZWxkIGV2ZW50O1xuICAgICAgICAgICAgaWYgKGV2ZW50LnR5cGUgPT09IFwiZXJyb3JcIikgdGhyb3cgZXZlbnQuZXJyb3I7XG4gICAgICAgICAgfSBlbHNlIGlmIChyZWNvcmQua2luZCA9PT0gXCJlcnJvclwiKSB7XG4gICAgICAgICAgICB0aHJvdyByZWNvcmQuZXJyb3I7XG4gICAgICAgICAgfSBlbHNlIGlmIChyZWNvcmQua2luZCA9PT0gXCJjbG9zZVwiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgT3BlbkFJUHJvdG9jb2xFcnJvcihcbiAgICAgICAgICAgICAgYE9wZW5BSSBXZWJTb2NrZXQgY2xvc2VkIGJlZm9yZSBhIHRlcm1pbmFsIHJlc3BvbnNlIGV2ZW50ICgke3JlY29yZC5jb2RlfSR7cmVjb3JkLnJlYXNvbiA/IGA6ICR7cmVjb3JkLnJlYXNvbn1gIDogXCJcIn0pYCxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBPcGVuQUlQcm90b2NvbEVycm9yKFwiT3BlbkFJIFdlYlNvY2tldCBlbWl0dGVkIGFuIHVuZXhwZWN0ZWQgaGFuZHNoYWtlIGV2ZW50XCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgaWYgKCFjb21wbGV0ZWQgfHwgIXJldGFpbmVkKSB7XG4gICAgICAgICAgaWYgKHJldGFpbmVkKSB0aGlzLmFmZmluaXR5Q29ubmVjdGlvbnMuZGVsZXRlKHJlcXVlc3QudGhyZWFkSWQpO1xuICAgICAgICAgIGV2ZW50cy5jbGVhbnVwKCk7XG4gICAgICAgICAgaWYgKCFjb21wbGV0ZWQpIHNvY2tldC50ZXJtaW5hdGUoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocmV0YWluQ29ubmVjdGlvbikgdGhpcy5idXN5QWZmaW5pdGllcy5kZWxldGUocmVxdWVzdC50aHJlYWRJZCk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJlc3BvbnNlRXJyb3IocmVzcG9uc2U6IFJlc3BvbnNlKTogUHJvbWlzZTxPcGVuQUlQcm90b2NvbEVycm9yPiB7XG4gIGNvbnN0IHRleHQgPSBhd2FpdCByZXNwb25zZS50ZXh0KCkuY2F0Y2goKCkgPT4gXCJcIik7XG4gIGxldCBtZXNzYWdlID0gdGV4dCB8fCByZXNwb25zZS5zdGF0dXNUZXh0IHx8IGBIVFRQICR7cmVzcG9uc2Uuc3RhdHVzfWA7XG4gIGxldCBjb2RlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIHRyeSB7XG4gICAgY29uc3QgcGFyc2VkID0gSlNPTi5wYXJzZSh0ZXh0KSBhcyB7XG4gICAgICBlcnJvcj86IHsgbWVzc2FnZT86IHN0cmluZzsgY29kZT86IHN0cmluZyB9IHwgc3RyaW5nO1xuICAgICAgbWVzc2FnZT86IHN0cmluZztcbiAgICAgIGNvZGU/OiBzdHJpbmc7XG4gICAgfTtcbiAgICBjb25zdCBlcnJvciA9IHBhcnNlZC5lcnJvcjtcbiAgICBtZXNzYWdlID1cbiAgICAgICh0eXBlb2YgZXJyb3IgPT09IFwib2JqZWN0XCIgPyBlcnJvci5tZXNzYWdlIDogdW5kZWZpbmVkKSA/P1xuICAgICAgcGFyc2VkLm1lc3NhZ2UgPz9cbiAgICAgICh0eXBlb2YgZXJyb3IgPT09IFwic3RyaW5nXCIgPyBlcnJvciA6IG1lc3NhZ2UpO1xuICAgIGNvZGUgPSAodHlwZW9mIGVycm9yID09PSBcIm9iamVjdFwiID8gZXJyb3IuY29kZSA6IHVuZGVmaW5lZCkgPz8gcGFyc2VkLmNvZGU7XG4gIH0gY2F0Y2gge1xuICAgIGNvZGUgPSB1bmRlZmluZWQ7XG4gIH1cbiAgcmV0dXJuIG5ldyBPcGVuQUlQcm90b2NvbEVycm9yKG1lc3NhZ2UsIGNvZGUsIHJlc3BvbnNlLnN0YXR1cyk7XG59XG5cbmV4cG9ydCBjbGFzcyBPcGVuQUlIdHRwc1RyYW5zcG9ydCBpbXBsZW1lbnRzIE9wZW5BSVJlc3BvbnNlc1RyYW5zcG9ydCB7XG4gIGNyZWRlbnRpYWxzOiBPcGVuQUlEaXJlY3RDcmVkZW50aWFscztcbiAgcmVhZG9ubHkgZmV0Y2hJbXBsOiB0eXBlb2YgZmV0Y2g7XG4gIHJlYWRvbmx5IHJlZnJlc2hDcmVkZW50aWFscz86ICgpID0+IFByb21pc2U8T3BlbkFJRGlyZWN0Q3JlZGVudGlhbHM+O1xuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IE9wZW5BSUh0dHBzVHJhbnNwb3J0T3B0aW9ucykge1xuICAgIHRoaXMuY3JlZGVudGlhbHMgPSBvcHRpb25zLmNyZWRlbnRpYWxzO1xuICAgIHRoaXMuZmV0Y2hJbXBsID0gb3B0aW9ucy5mZXRjaCA/PyBmZXRjaDtcbiAgICB0aGlzLnJlZnJlc2hDcmVkZW50aWFscyA9IG9wdGlvbnMucmVmcmVzaENyZWRlbnRpYWxzO1xuICB9XG5cbiAgYXN5bmMgKnN0cmVhbShyZXF1ZXN0OiBPcGVuQUlUcmFuc3BvcnRSZXF1ZXN0KTogQXN5bmNHZW5lcmF0b3I8T3BlbkFJTm9ybWFsaXplZEV2ZW50PiB7XG4gICAgbGV0IHJlZnJlc2hlZCA9IGZhbHNlO1xuXG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5mZXRjaEltcGwoQ0hBVEdQVF9DT0RFWF9SRVNQT05TRVNfVVJMLCB7XG4gICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgICAgIGhlYWRlcnM6IGJ1aWxkQ29kZXhJZGVudGl0eUhlYWRlcnMoXG4gICAgICAgICAgdGhpcy5jcmVkZW50aWFscy5hY2Nlc3NUb2tlbixcbiAgICAgICAgICB0aGlzLmNyZWRlbnRpYWxzLmFjY291bnRJZCxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBzZXNzaW9uSWQ6IHJlcXVlc3Quc2Vzc2lvbklkLFxuICAgICAgICAgICAgdGhyZWFkSWQ6IHJlcXVlc3QudGhyZWFkSWQsXG4gICAgICAgICAgICBjbGllbnRSZXF1ZXN0SWQ6IHJlcXVlc3QuY2xpZW50UmVxdWVzdElkLFxuICAgICAgICAgIH0sXG4gICAgICAgICksXG4gICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHJlcXVlc3QuYm9keSksXG4gICAgICAgIHNpZ25hbDogcmVxdWVzdC5zaWduYWwsXG4gICAgICB9KTtcblxuICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gNDAxICYmICFyZWZyZXNoZWQgJiYgdGhpcy5yZWZyZXNoQ3JlZGVudGlhbHMpIHtcbiAgICAgICAgYXdhaXQgcmVzcG9uc2UuYm9keT8uY2FuY2VsKCk7XG4gICAgICAgIHRoaXMuY3JlZGVudGlhbHMgPSBhd2FpdCB0aGlzLnJlZnJlc2hDcmVkZW50aWFscygpO1xuICAgICAgICByZWZyZXNoZWQgPSB0cnVlO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmICghcmVzcG9uc2Uub2spIHRocm93IGF3YWl0IHJlc3BvbnNlRXJyb3IocmVzcG9uc2UpO1xuICAgICAgaWYgKCFyZXNwb25zZS5ib2R5KSB0aHJvdyBuZXcgT3BlbkFJUHJvdG9jb2xFcnJvcihcIk9wZW5BSSByZXNwb25zZSBoYWQgbm8gYm9keVwiKTtcblxuICAgICAgZm9yIGF3YWl0IChjb25zdCBldmVudCBvZiBub3JtYWxpemVPcGVuQUlTU0UocmVzcG9uc2UuYm9keSkpIHtcbiAgICAgICAgeWllbGQgZXZlbnQ7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgT3BlbkFJRGlyZWN0Q2xpZW50T3B0aW9ucyBleHRlbmRzIE9wZW5BSUh0dHBzVHJhbnNwb3J0T3B0aW9ucyB7XG4gIHRyYW5zcG9ydD86IE9wZW5BSVJlc3BvbnNlc1RyYW5zcG9ydDtcbiAgdHJhbnNwb3J0S2luZD86IFwiaHR0cHNcIiB8IFwid2Vic29ja2V0XCI7XG4gIHdlYlNvY2tldEZhY3Rvcnk/OiBPcGVuQUlXZWJTb2NrZXRGYWN0b3J5O1xufVxuXG5leHBvcnQgY2xhc3MgT3BlbkFJRGlyZWN0Q2xpZW50IHtcbiAgcmVhZG9ubHkgdHJhbnNwb3J0OiBPcGVuQUlSZXNwb25zZXNUcmFuc3BvcnQ7XG4gIGltYWdlQ3JlZGVudGlhbHM6IE9wZW5BSURpcmVjdENyZWRlbnRpYWxzO1xuXG4gIGNvbnN0cnVjdG9yKHJlYWRvbmx5IG9wdGlvbnM6IE9wZW5BSURpcmVjdENsaWVudE9wdGlvbnMpIHtcbiAgICB0aGlzLmltYWdlQ3JlZGVudGlhbHMgPSBvcHRpb25zLmNyZWRlbnRpYWxzO1xuICAgIHRoaXMudHJhbnNwb3J0ID1cbiAgICAgIG9wdGlvbnMudHJhbnNwb3J0ID8/XG4gICAgICAob3B0aW9ucy50cmFuc3BvcnRLaW5kID09PSBcIndlYnNvY2tldFwiXG4gICAgICAgID8gbmV3IE9wZW5BSVdlYlNvY2tldFRyYW5zcG9ydChvcHRpb25zKVxuICAgICAgICA6IG5ldyBPcGVuQUlIdHRwc1RyYW5zcG9ydChvcHRpb25zKSk7XG4gIH1cblxuICByZXNwb25zZXMob3B0aW9uczogT3BlbkFJUmVzcG9uc2VzT3B0aW9ucywgc2lnbmFsPzogQWJvcnRTaWduYWwpOiBPcGVuQUlFdmVudFN0cmVhbSB7XG4gICAgaWYgKFxuICAgICAgdHlwZW9mIG9wdGlvbnMuaW1hZ2VHZW5lcmF0aW9uID09PSBcIm9iamVjdFwiICYmXG4gICAgICBvcHRpb25zLmltYWdlR2VuZXJhdGlvbi5iYWNrZ3JvdW5kID09PSBcInRyYW5zcGFyZW50XCJcbiAgICApIHtcbiAgICAgIHJldHVybiB0aGlzLnN0YW5kYWxvbmVJbWFnZXMob3B0aW9ucywgc2lnbmFsKTtcbiAgICB9XG4gICAgY29uc3QgY2xpZW50UmVxdWVzdElkID0gY3J5cHRvLnJhbmRvbVVVSUQoKTtcbiAgICBjb25zdCBhZmZpbml0eUlkID0gb3B0aW9ucy5wcm9tcHRDYWNoZUtleVxuICAgICAgPyBjYWNoZUFmZmluaXR5VXVpZChvcHRpb25zLnByb21wdENhY2hlS2V5KVxuICAgICAgOiBjbGllbnRSZXF1ZXN0SWQ7XG4gICAgcmV0dXJuIHRoaXMudHJhbnNwb3J0LnN0cmVhbSh7XG4gICAgICBib2R5OiBidWlsZE9wZW5BSVJlc3BvbnNlc1JlcXVlc3QoXG4gICAgICAgIG9wdGlvbnMucHJvbXB0Q2FjaGVLZXkgPyB7IC4uLm9wdGlvbnMsIHByb21wdENhY2hlS2V5OiBhZmZpbml0eUlkIH0gOiBvcHRpb25zLFxuICAgICAgKSxcbiAgICAgIHNpZ25hbCxcbiAgICAgIHNlc3Npb25JZDogYWZmaW5pdHlJZCxcbiAgICAgIC8vIHByb21wdENhY2hlS2V5IGlzIGFscmVhZHkgYSBvbmUtd2F5IFNESyBhZmZpbml0eSB2YWx1ZSwgbmV2ZXIgYSByYXcgc2Vzc2lvbktleS5cbiAgICAgIHRocmVhZElkOiBhZmZpbml0eUlkLFxuICAgICAgY2xpZW50UmVxdWVzdElkLFxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgKnN0YW5kYWxvbmVJbWFnZXMoXG4gICAgb3B0aW9uczogT3BlbkFJUmVzcG9uc2VzT3B0aW9ucyxcbiAgICBzaWduYWw/OiBBYm9ydFNpZ25hbCxcbiAgKTogT3BlbkFJRXZlbnRTdHJlYW0ge1xuICAgIGNvbnN0IHJlcXVlc3QgPSBidWlsZFN0YW5kYWxvbmVJbWFnZVJlcXVlc3Qob3B0aW9ucyk7XG4gICAgY29uc3QgcmVxdWVzdElkID0gY3J5cHRvLnJhbmRvbVVVSUQoKTtcbiAgICBmb3IgKGxldCBhdHRlbXB0ID0gMDsgYXR0ZW1wdCA8IDI7IGF0dGVtcHQrKykge1xuICAgICAgc2lnbmFsPy50aHJvd0lmQWJvcnRlZCgpO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCAodGhpcy5vcHRpb25zLmZldGNoID8/IGZldGNoKShyZXF1ZXN0LnVybCwge1xuICAgICAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgLi4uYnVpbGRDb2RleElkZW50aXR5SGVhZGVycyhcbiAgICAgICAgICAgIHRoaXMuaW1hZ2VDcmVkZW50aWFscy5hY2Nlc3NUb2tlbixcbiAgICAgICAgICAgIHRoaXMuaW1hZ2VDcmVkZW50aWFscy5hY2NvdW50SWQsXG4gICAgICAgICAgKSxcbiAgICAgICAgICBBY2NlcHQ6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgICAgICAgIFwieC1jb2RleC1pbWFnZS10dXJuLWlkXCI6IHJlcXVlc3RJZCxcbiAgICAgICAgfSxcbiAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkocmVxdWVzdC5ib2R5KSxcbiAgICAgICAgc2lnbmFsLFxuICAgICAgfSk7XG4gICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSA0MDEgJiYgYXR0ZW1wdCA9PT0gMCAmJiB0aGlzLm9wdGlvbnMucmVmcmVzaENyZWRlbnRpYWxzKSB7XG4gICAgICAgIGF3YWl0IHJlc3BvbnNlLmJvZHk/LmNhbmNlbCgpO1xuICAgICAgICB0aGlzLmltYWdlQ3JlZGVudGlhbHMgPSBhd2FpdCB0aGlzLm9wdGlvbnMucmVmcmVzaENyZWRlbnRpYWxzKCk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKCFyZXNwb25zZS5vaykgdGhyb3cgYXdhaXQgcmVzcG9uc2VFcnJvcihyZXNwb25zZSk7XG4gICAgICBjb25zdCBpbWFnZXMgPSBhd2FpdCByZWFkU3RhbmRhbG9uZUltYWdlUmVzcG9uc2UocmVzcG9uc2UpO1xuICAgICAgc2lnbmFsPy50aHJvd0lmQWJvcnRlZCgpO1xuICAgICAgeWllbGQqIGltYWdlcztcbiAgICAgIHlpZWxkIHsgdHlwZTogXCJjb21wbGV0ZWRcIiwgcmVzcG9uc2VJZDogcmVxdWVzdElkLCBtb2RlbDogXCJncHQtaW1hZ2UtMlwiIH07XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgY2xvc2UoKTogdm9pZCB7XG4gICAgdGhpcy50cmFuc3BvcnQuY2xvc2U/LigpO1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQXdFQSxNQUFNLDhCQUE4QjtBQUVwQyxTQUFTLGFBQWEsS0FBcUI7Q0FDekMsSUFBSTtDQUNKLElBQUk7RUFDRixTQUFTLElBQUksSUFBSSxHQUFHO0NBQ3RCLFNBQVMsT0FBTztFQUNkLE1BQU0sSUFBSSxvQkFBb0IsaUNBQWlDLE9BQU8sS0FBSyxHQUFHO0NBQ2hGO0NBQ0EsT0FBTyxXQUFXLE9BQU8sYUFBYSxXQUFXLFNBQVM7Q0FDMUQsT0FBTyxPQUFPLFNBQVM7QUFDekI7QUFFQSxTQUFTLFlBQVksTUFBdUI7Q0FDMUMsSUFBSSxNQUFNLFFBQVEsSUFBSSxHQUFHLE9BQU8sT0FBTyxPQUFPLElBQUksQ0FBQyxDQUFDLFNBQVM7Q0FDN0QsSUFBSSxnQkFBZ0IsYUFBYSxPQUFPLE9BQU8sS0FBSyxJQUFJLFdBQVcsSUFBSSxDQUFDLENBQUMsQ0FBQyxTQUFTO0NBQ25GLE9BQU8sT0FBTyxLQUFLLElBQUksQ0FBQyxDQUFDLFNBQVM7QUFDcEM7QUFFQSxTQUFTLGFBQWEsUUFBNkIsUUFBc0I7Q0FDdkUsTUFBTSxVQUEwQixDQUFDO0NBQ2pDLE1BQU0sVUFBaUQsQ0FBQztDQUN4RCxJQUFJLFNBQVM7Q0FDYixNQUFNLFFBQVEsV0FBeUI7RUFDckMsSUFBSSxDQUFDLFFBQVE7RUFDYixNQUFNLFNBQVMsUUFBUSxNQUFNO0VBQzdCLElBQUksUUFBUSxPQUFPLE1BQU07T0FDcEIsSUFBSSxRQUFRLFNBQVMsNkJBQTZCLFFBQVEsS0FBSyxNQUFNO09BQ3JFO0dBQ0gsU0FBUztHQUNULFFBQVEsU0FBUztHQUNqQixPQUFPLFVBQVU7R0FDakIsTUFBTSxXQUFXO0lBQ2YsTUFBTTtJQUNOLE9BQU8sSUFBSSxvQkFDVCxpQ0FBaUMsNEJBQTRCLHlCQUM3RCx3QkFDRjtHQUNGO0dBQ0EsTUFBTSxpQkFBaUIsUUFBUSxNQUFNO0dBQ3JDLElBQUksZ0JBQWdCLGVBQWUsUUFBUTtRQUN0QyxRQUFRLEtBQUssUUFBUTtFQUM1QjtDQUNGO0NBQ0EsTUFBTSxlQUFlLEtBQUssRUFBRSxNQUFNLE9BQU8sQ0FBQztDQUMxQyxNQUFNLGFBQWEsTUFBZSxhQUFzQixLQUFLO0VBQUUsTUFBTTtFQUFXO0VBQU07Q0FBUyxDQUFDO0NBQ2hHLE1BQU0sV0FBVyxNQUFjLFdBQzdCLEtBQUs7RUFBRSxNQUFNO0VBQVM7RUFBTSxRQUFRLE9BQU8sU0FBUztDQUFFLENBQUM7Q0FDekQsTUFBTSxXQUFXLFVBQWlCLEtBQUs7RUFBRSxNQUFNO0VBQVM7Q0FBTSxDQUFDO0NBQy9ELE1BQU0sd0JBQXdCLFVBQW1CLGFBQy9DLEtBQUs7RUFBRSxNQUFNO0VBQVksUUFBUSxTQUFTO0NBQVcsQ0FBQztDQUN4RCxPQUFPLEdBQUcsUUFBUSxNQUFNO0NBQ3hCLE9BQU8sR0FBRyxXQUFXLFNBQVM7Q0FDOUIsT0FBTyxHQUFHLFNBQVMsT0FBTztDQUMxQixPQUFPLEdBQUcsU0FBUyxPQUFPO0NBQzFCLE9BQU8sR0FBRyx1QkFBdUIsb0JBQW9CO0NBQ3JELE1BQU0sZ0JBQWdCO0VBQ3BCLE9BQU8sVUFBVTtFQUNqQixLQUFLO0dBQUUsTUFBTTtHQUFTLE9BQU8sV0FBVyxNQUFNO0VBQUUsQ0FBQztDQUNuRDtDQUNBLFFBQVEsaUJBQWlCLFNBQVMsU0FBUyxFQUFFLE1BQU0sS0FBSyxDQUFDO0NBQ3pELE9BQU87RUFDTCxZQUNFLFFBQVEsU0FDSixRQUFRLFFBQVEsUUFBUSxNQUFNLENBQUUsSUFDaEMsSUFBSSxTQUF1QixZQUFZLFFBQVEsS0FBSyxPQUFPLENBQUM7RUFDbEUsZUFBZTtHQUNiLFNBQVM7R0FDVCxRQUFRLG9CQUFvQixTQUFTLE9BQU87R0FDNUMsT0FBTyxJQUFJLFFBQVEsTUFBTTtHQUN6QixPQUFPLElBQUksV0FBVyxTQUFTO0dBQy9CLE9BQU8sSUFBSSxTQUFTLE9BQU87R0FDM0IsT0FBTyxJQUFJLFNBQVMsT0FBTztHQUMzQixPQUFPLElBQUksdUJBQXVCLG9CQUFvQjtHQUN0RCxRQUFRLFNBQVM7R0FDakIsTUFBTSxTQUFTO0lBQ2IsTUFBTTtJQUNOLE9BQU8sSUFBSSxvQkFBb0IsMENBQTBDO0dBQzNFO0dBQ0EsUUFBUSxPQUFPLENBQUMsQ0FBQyxDQUFDLFNBQVMsV0FBVyxPQUFPLE1BQU0sQ0FBQztFQUN0RDtFQUNBLG1CQUFtQixRQUFRLG9CQUFvQixTQUFTLE9BQU87Q0FDakU7QUFDRjtBQUVBLFNBQVMsV0FBVyxRQUE2QjtDQUMvQyxPQUFPLFFBQVEsa0JBQWtCLFFBQzdCLE9BQU8sU0FDUCxJQUFJLGFBQWEsV0FBVyxZQUFZO0FBQzlDO0FBRUEsZUFBZSxpQkFDYixRQUNBLFFBQ0EsUUFDdUI7Q0FDdkIsSUFBSSxDQUFDLFFBQVEsT0FBTyxPQUFPLEtBQUs7Q0FDaEMsSUFBSSxPQUFPLFNBQVMsTUFBTSxXQUFXLE1BQU07Q0FDM0MsT0FBTyxJQUFJLFNBQXVCLFNBQVMsV0FBVztFQUNwRCxNQUFNLGdCQUFnQjtHQUNwQixPQUFPLFVBQVU7R0FDakIsT0FBTyxXQUFXLE1BQU0sQ0FBQztFQUMzQjtFQUNBLE9BQU8saUJBQWlCLFNBQVMsU0FBUyxFQUFFLE1BQU0sS0FBSyxDQUFDO0VBQ3hELEFBQUssT0FDRixLQUFLLENBQUMsQ0FDTixLQUFLLFNBQVMsTUFBTSxDQUFDLENBQ3JCLGNBQWM7R0FDYixPQUFPLG9CQUFvQixTQUFTLE9BQU87RUFDN0MsQ0FBQztDQUNMLENBQUM7QUFDSDtBQUVBLFNBQVMsa0JBQWtCLEtBQXFCO0NBQzlDLE1BQU0sTUFBTSxPQUFPLFdBQVcsUUFBUSxDQUFDLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxPQUFPLEtBQUssQ0FBQyxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUU7Q0FDdkYsSUFBSSxNQUFNO0NBQ1YsSUFBSSxPQUFRLE9BQU8sU0FBUyxJQUFJLEtBQU0sRUFBRSxJQUFJLElBQU8sRUFBQSxDQUFLLFNBQVMsRUFBRTtDQUNuRSxPQUFPLEdBQUcsSUFBSSxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsR0FBRyxJQUFJLE1BQU0sR0FBRyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxHQUFHLElBQUksTUFBTSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLEdBQUcsSUFBSSxNQUFNLElBQUksRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsR0FBRyxJQUFJLE1BQU0sRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFO0FBQ3RKO0FBUUEsSUFBYSwyQkFBYixNQUFhLHlCQUE2RDtDQUN4RSxPQUFnQiwyQkFBMkI7Q0FDM0M7Q0FDQTtDQUNBO0NBQ0Esc0NBQStCLElBQUksSUFBZ0M7Q0FDbkUsaUNBQTBCLElBQUksSUFBWTtDQUUxQyxZQUFZLFNBQTBDO0VBQ3BELEtBQUssY0FBYyxRQUFRO0VBQzNCLEtBQUsscUJBQXFCLFFBQVE7RUFDbEMsS0FBSyxtQkFDSCxRQUFRLHNCQUFzQixLQUFLLGNBQWMsSUFBSSxTQUFTLEtBQUssU0FBUztDQUNoRjtDQUVBLFFBQWM7RUFDWixLQUFLLG9CQUFvQixTQUFTLEVBQUUsUUFBUSxhQUFhO0dBQ3ZELE9BQU8sUUFBUTtHQUNmLE9BQU8sTUFBTSxLQUFNLGtCQUFrQjtFQUN2QyxDQUFDO0VBQ0QsS0FBSyxvQkFBb0IsTUFBTTtFQUMvQixLQUFLLGVBQWUsTUFBTTtDQUM1QjtDQUdBLDJCQUEyQixVQUFrQixZQUF5QztFQUNwRixJQUNFLENBQUMsS0FBSyxvQkFBb0IsSUFBSSxRQUFRLEtBQ3RDLEtBQUssb0JBQW9CLFFBQVEseUJBQXlCLDBCQUMxRDtHQUNBLE1BQU0sVUFBVSxDQUFDLEdBQUcsS0FBSyxvQkFBb0IsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUNsRCxRQUFRLENBQUMsS0FBSyxlQUFlLElBQUksR0FBRyxDQUN2QztHQUNBLElBQUksWUFBWSxRQUFXLE9BQU87R0FDbEMsTUFBTSxPQUFPLEtBQUssb0JBQW9CLElBQUksT0FBTztHQUNqRCxLQUFLLE9BQU8sUUFBUTtHQUNwQixLQUFLLE9BQU8sTUFBTSxLQUFNLHdCQUF3QjtHQUNoRCxLQUFLLG9CQUFvQixPQUFPLE9BQU87RUFDekM7RUFDQSxLQUFLLG9CQUFvQixJQUFJLFVBQVUsVUFBVTtFQUVqRCxNQUFNLGFBQWE7R0FDakIsV0FBVyxTQUFTO0dBQ3BCLElBQUksS0FBSyxlQUFlLElBQUksUUFBUSxHQUFHO0dBQ3ZDLElBQUksS0FBSyxvQkFBb0IsSUFBSSxRQUFRLE1BQU0sWUFBWTtHQUMzRCxLQUFLLG9CQUFvQixPQUFPLFFBQVE7R0FDeEMsV0FBVyxPQUFPLFFBQVE7RUFDNUI7RUFDQSxXQUFXLE9BQU8sR0FBRyxTQUFTLElBQUk7RUFDbEMsV0FBVyxPQUFPLEdBQUcsU0FBUyxJQUFJO0VBQ2xDLE9BQU87Q0FDVDtDQUVBLE9BQU8sT0FBTyxTQUF3RTtFQUNwRixJQUFJLFlBQVk7RUFDaEIsT0FBTyxNQUFNO0dBQ1gsSUFBSSxRQUFRLFFBQVEsU0FBUyxNQUFNLFdBQVcsUUFBUSxNQUFNO0dBRTVELE1BQU0sbUJBRGMsUUFBUSxLQUFLLHFCQUFxQixVQUNkLENBQUMsS0FBSyxlQUFlLElBQUksUUFBUSxRQUFRO0dBQ2pGLElBQUksa0JBQWtCLEtBQUssZUFBZSxJQUFJLFFBQVEsUUFBUTtHQUM5RCxNQUFNLFFBQVEsbUJBQW1CLEtBQUssb0JBQW9CLElBQUksUUFBUSxRQUFRLElBQUk7R0FDbEYsSUFBSSxPQUFPLFFBQVE7SUFDakIsS0FBSyxvQkFBb0IsT0FBTyxRQUFRLFFBQVE7SUFDaEQsTUFBTSxPQUFPLFFBQVE7R0FDdkI7R0FDQSxNQUFNLFNBQVMsT0FBTyxTQUFTLFNBQVk7R0FDM0MsSUFBSSxXQUFXO0dBQ2YsTUFBTSxTQUNKLFFBQVEsVUFDUixLQUFLLGlCQUFpQixhQUFBLGlEQUF3QyxHQUFHLEVBQy9ELFNBQVM7SUFDUCxHQUFHLDBCQUEwQixLQUFLLFlBQVksYUFBYSxLQUFLLFlBQVksV0FBVztLQUNyRixXQUFXLFFBQVE7S0FDbkIsVUFBVSxRQUFRO0tBQ2xCLGlCQUFpQixRQUFRO0lBQzNCLENBQUM7SUFDRCxlQUFlO0dBQ2pCLEVBQ0YsQ0FBQztHQUNILE1BQU0sU0FBUyxRQUFRLFVBQVUsYUFBYSxRQUFRLFFBQVEsTUFBTTtHQUNwRSxJQUFJLFlBQVk7R0FDaEIsSUFBSTtJQUNGLElBQUksQ0FBQyxRQUFRO0tBQ1gsTUFBTSxZQUFZLE1BQU0sT0FBTyxLQUFLO0tBQ3BDLElBQ0UsVUFBVSxTQUFTLGNBQ25CLFVBQVUsV0FBVyxPQUNyQixDQUFDLGFBQ0QsS0FBSyxvQkFDTDtNQUNBLE9BQU8sVUFBVTtNQUNqQixLQUFLLGNBQWMsTUFBTSxLQUFLLG1CQUFtQjtNQUNqRCxZQUFZO01BQ1o7S0FDRjtLQUNBLElBQUksVUFBVSxTQUFTLFlBQ3JCLE1BQU0sSUFBSSxvQkFDUixzQ0FBc0MsVUFBVSxTQUFTLGNBQWMsVUFBVSxXQUFXLE1BQzVGLFFBQ0EsVUFBVSxNQUNaO0tBRUYsSUFBSSxVQUFVLFNBQVMsU0FBUyxNQUFNLFVBQVU7S0FDaEQsSUFBSSxVQUFVLFNBQVMsUUFDckIsTUFBTSxJQUFJLG9CQUFvQix3REFBd0Q7S0FFeEYsSUFBSSxrQkFDRixXQUFXLEtBQUssMkJBQTJCLFFBQVEsVUFBVTtNQUFFO01BQVE7S0FBTyxDQUFDO0lBRW5GO0lBRUEsTUFBTSxJQUFJLFNBQWUsU0FBUyxXQUFXO0tBQzNDLE9BQU8sS0FBSyxLQUFLLFVBQVU7TUFBRSxNQUFNO01BQW1CLEdBQUcsUUFBUTtLQUFLLENBQUMsSUFBSSxVQUN6RSxRQUFRLE9BQU8sS0FBSyxJQUFJLFFBQVEsQ0FDbEM7SUFDRixDQUFDO0lBRUQsT0FBTyxNQUFNO0tBQ1gsTUFBTSxTQUFTLFNBQ1gsTUFBTSxpQkFBaUIsUUFBUSxRQUFRLFFBQVEsTUFBTSxJQUNyRCxNQUFNLE9BQU8sS0FBSztLQUN0QixJQUFJLE9BQU8sU0FBUyxXQUFXO01BQzdCLElBQUksT0FBTyxVQUNULE1BQU0sSUFBSSxvQkFBb0Isb0RBQW9EO01BRXBGLElBQUk7TUFDSixJQUFJO09BQ0YsTUFBTSxLQUFLLE1BQU0sWUFBWSxPQUFPLElBQUksQ0FBQztNQUMzQyxRQUFRO09BQ04sTUFBTSxJQUFJLG9CQUFvQixvQ0FBb0M7TUFDcEU7TUFDQSxNQUFNLFFBQVEscUJBQXFCLEdBQUc7TUFDdEMsSUFBSSxDQUFDLE9BQU87TUFDWixJQUFJLE1BQU0sU0FBUyxhQUFhO09BQzlCLFlBQVk7T0FDWixJQUFJLFVBQVUsT0FBTyxZQUFZO1lBQzVCLE9BQU8sTUFBTSxLQUFNLG9CQUFvQjtPQUM1QyxNQUFNO09BQ047TUFDRjtNQUNBLE1BQU07TUFDTixJQUFJLE1BQU0sU0FBUyxTQUFTLE1BQU0sTUFBTTtLQUMxQyxPQUFPLElBQUksT0FBTyxTQUFTLFNBQ3pCLE1BQU0sT0FBTztVQUNSLElBQUksT0FBTyxTQUFTLFNBQ3pCLE1BQU0sSUFBSSxvQkFDUiw2REFBNkQsT0FBTyxPQUFPLE9BQU8sU0FBUyxLQUFLLE9BQU8sV0FBVyxHQUFHLEVBQ3ZIO1VBRUEsTUFBTSxJQUFJLG9CQUFvQix3REFBd0Q7SUFFMUY7R0FDRixVQUFVO0lBQ1IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVO0tBQzNCLElBQUksVUFBVSxLQUFLLG9CQUFvQixPQUFPLFFBQVEsUUFBUTtLQUM5RCxPQUFPLFFBQVE7S0FDZixJQUFJLENBQUMsV0FBVyxPQUFPLFVBQVU7SUFDbkM7SUFDQSxJQUFJLGtCQUFrQixLQUFLLGVBQWUsT0FBTyxRQUFRLFFBQVE7R0FDbkU7RUFDRjtDQUNGO0FBQ0Y7QUFFQSxlQUFlLGNBQWMsVUFBa0Q7Q0FDN0UsTUFBTSxPQUFPLE1BQU0sU0FBUyxLQUFLLENBQUMsQ0FBQyxZQUFZLEVBQUU7Q0FDakQsSUFBSSxVQUFVLFFBQVEsU0FBUyxjQUFjLFFBQVEsU0FBUztDQUM5RCxJQUFJO0NBQ0osSUFBSTtFQUNGLE1BQU0sU0FBUyxLQUFLLE1BQU0sSUFBSTtFQUs5QixNQUFNLFFBQVEsT0FBTztFQUNyQixXQUNHLE9BQU8sVUFBVSxXQUFXLE1BQU0sVUFBVSxXQUM3QyxPQUFPLFlBQ04sT0FBTyxVQUFVLFdBQVcsUUFBUTtFQUN2QyxRQUFRLE9BQU8sVUFBVSxXQUFXLE1BQU0sT0FBTyxXQUFjLE9BQU87Q0FDeEUsUUFBUTtFQUNOLE9BQU87Q0FDVDtDQUNBLE9BQU8sSUFBSSxvQkFBb0IsU0FBUyxNQUFNLFNBQVMsTUFBTTtBQUMvRDtBQUVBLElBQWEsdUJBQWIsTUFBc0U7Q0FDcEU7Q0FDQTtDQUNBO0NBRUEsWUFBWSxTQUFzQztFQUNoRCxLQUFLLGNBQWMsUUFBUTtFQUMzQixLQUFLLFlBQVksUUFBUSxTQUFTO0VBQ2xDLEtBQUsscUJBQXFCLFFBQVE7Q0FDcEM7Q0FFQSxPQUFPLE9BQU8sU0FBd0U7RUFDcEYsSUFBSSxZQUFZO0VBRWhCLE9BQU8sTUFBTTtHQUNYLE1BQU0sV0FBVyxNQUFNLEtBQUssVUFBVSw2QkFBNkI7SUFDakUsUUFBUTtJQUNSLFNBQVMsMEJBQ1AsS0FBSyxZQUFZLGFBQ2pCLEtBQUssWUFBWSxXQUNqQjtLQUNFLFdBQVcsUUFBUTtLQUNuQixVQUFVLFFBQVE7S0FDbEIsaUJBQWlCLFFBQVE7SUFDM0IsQ0FDRjtJQUNBLE1BQU0sS0FBSyxVQUFVLFFBQVEsSUFBSTtJQUNqQyxRQUFRLFFBQVE7R0FDbEIsQ0FBQztHQUVELElBQUksU0FBUyxXQUFXLE9BQU8sQ0FBQyxhQUFhLEtBQUssb0JBQW9CO0lBQ3BFLE1BQU0sU0FBUyxNQUFNLE9BQU87SUFDNUIsS0FBSyxjQUFjLE1BQU0sS0FBSyxtQkFBbUI7SUFDakQsWUFBWTtJQUNaO0dBQ0Y7R0FDQSxJQUFJLENBQUMsU0FBUyxJQUFJLE1BQU0sTUFBTSxjQUFjLFFBQVE7R0FDcEQsSUFBSSxDQUFDLFNBQVMsTUFBTSxNQUFNLElBQUksb0JBQW9CLDZCQUE2QjtHQUUvRSxXQUFXLE1BQU0sU0FBUyxtQkFBbUIsU0FBUyxJQUFJLEdBQ3hELE1BQU07R0FFUjtFQUNGO0NBQ0Y7QUFDRjtBQVFBLElBQWEscUJBQWIsTUFBZ0M7Q0FJVDtDQUhyQjtDQUNBO0NBRUEsWUFBWSxTQUE2QztFQUFwQyxLQUFBLFVBQUE7RUFDbkIsS0FBSyxtQkFBbUIsUUFBUTtFQUNoQyxLQUFLLFlBQ0gsUUFBUSxjQUNQLFFBQVEsa0JBQWtCLGNBQ3ZCLElBQUkseUJBQXlCLE9BQU8sSUFDcEMsSUFBSSxxQkFBcUIsT0FBTztDQUN4QztDQUVBLFVBQVUsU0FBaUMsUUFBeUM7RUFDbEYsSUFDRSxPQUFPLFFBQVEsb0JBQW9CLFlBQ25DLFFBQVEsZ0JBQWdCLGVBQWUsZUFFdkMsT0FBTyxLQUFLLGlCQUFpQixTQUFTLE1BQU07RUFFOUMsTUFBTSxrQkFBa0IsT0FBTyxXQUFXO0VBQzFDLE1BQU0sYUFBYSxRQUFRLGlCQUN2QixrQkFBa0IsUUFBUSxjQUFjLElBQ3hDO0VBQ0osT0FBTyxLQUFLLFVBQVUsT0FBTztHQUMzQixNQUFNLDRCQUNKLFFBQVEsaUJBQWlCO0lBQUUsR0FBRztJQUFTLGdCQUFnQjtHQUFXLElBQUksT0FDeEU7R0FDQTtHQUNBLFdBQVc7R0FFWCxVQUFVO0dBQ1Y7RUFDRixDQUFDO0NBQ0g7Q0FFQSxPQUFPLGlCQUNMLFNBQ0EsUUFDbUI7RUFDbkIsTUFBTSxVQUFVLDRCQUE0QixPQUFPO0VBQ25ELE1BQU0sWUFBWSxPQUFPLFdBQVc7RUFDcEMsS0FBSyxJQUFJLFVBQVUsR0FBRyxVQUFVLEdBQUcsV0FBVztHQUM1QyxRQUFRLGVBQWU7R0FDdkIsTUFBTSxXQUFXLE9BQU8sS0FBSyxRQUFRLFNBQVMsTUFBQSxDQUFPLFFBQVEsS0FBSztJQUNoRSxRQUFRO0lBQ1IsU0FBUztLQUNQLEdBQUcsMEJBQ0QsS0FBSyxpQkFBaUIsYUFDdEIsS0FBSyxpQkFBaUIsU0FDeEI7S0FDQSxRQUFRO0tBQ1IseUJBQXlCO0lBQzNCO0lBQ0EsTUFBTSxLQUFLLFVBQVUsUUFBUSxJQUFJO0lBQ2pDO0dBQ0YsQ0FBQztHQUNELElBQUksU0FBUyxXQUFXLE9BQU8sWUFBWSxLQUFLLEtBQUssUUFBUSxvQkFBb0I7SUFDL0UsTUFBTSxTQUFTLE1BQU0sT0FBTztJQUM1QixLQUFLLG1CQUFtQixNQUFNLEtBQUssUUFBUSxtQkFBbUI7SUFDOUQ7R0FDRjtHQUNBLElBQUksQ0FBQyxTQUFTLElBQUksTUFBTSxNQUFNLGNBQWMsUUFBUTtHQUNwRCxNQUFNLFNBQVMsTUFBTSw0QkFBNEIsUUFBUTtHQUN6RCxRQUFRLGVBQWU7R0FDdkIsT0FBTztHQUNQLE1BQU07SUFBRSxNQUFNO0lBQWEsWUFBWTtJQUFXLE9BQU87R0FBYztHQUN2RTtFQUNGO0NBQ0Y7Q0FFQSxRQUFjO0VBQ1osS0FBSyxVQUFVLFFBQVE7Q0FDekI7QUFDRiJ9
|
|
356
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3BlbmFpLWRpcmVjdC1jbGllbnQuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3V0aWxzL3Byb3ZpZGVycy9vcGVuYWkvb3BlbmFpLWRpcmVjdC1jbGllbnQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGNyeXB0byBmcm9tIFwibm9kZTpjcnlwdG9cIjtcblxuaW1wb3J0IFdzQ2xpZW50LCB7IHR5cGUgQ2xpZW50T3B0aW9ucywgdHlwZSBSYXdEYXRhIH0gZnJvbSBcIndzXCI7XG5cbmltcG9ydCB7XG4gIGJ1aWxkQ29kZXhJZGVudGl0eUhlYWRlcnMsXG4gIGJ1aWxkT3BlbkFJUmVzcG9uc2VzUmVxdWVzdCxcbiAgQ0hBVEdQVF9DT0RFWF9SRVNQT05TRVNfVVJMLFxuICBub3JtYWxpemVPcGVuQUlFdmVudCxcbiAgT3BlbkFJUHJvdG9jb2xFcnJvcixcbiAgdHlwZSBPcGVuQUlOb3JtYWxpemVkRXZlbnQsXG4gIHR5cGUgT3BlbkFJUmVzcG9uc2VzT3B0aW9ucyxcbiAgdHlwZSBPcGVuQUlSZXNwb25zZXNSZXF1ZXN0LFxufSBmcm9tIFwiLi9vcGVuYWktYmFja2VuZC1wcm90b2NvbFwiO1xuaW1wb3J0IHtcbiAgYnVpbGRTdGFuZGFsb25lSW1hZ2VSZXF1ZXN0LFxuICByZWFkU3RhbmRhbG9uZUltYWdlUmVzcG9uc2UsXG59IGZyb20gXCIuL29wZW5haS1pbWFnZS1nZW5lcmF0aW9uXCI7XG5pbXBvcnQgeyBub3JtYWxpemVPcGVuQUlTU0UsIHR5cGUgT3BlbkFJRXZlbnRTdHJlYW0gfSBmcm9tIFwiLi9vcGVuYWktc3NlXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgT3BlbkFJRGlyZWN0Q3JlZGVudGlhbHMge1xuICBhY2Nlc3NUb2tlbjogc3RyaW5nO1xuICBhY2NvdW50SWQ6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBPcGVuQUlUcmFuc3BvcnRSZXF1ZXN0IHtcbiAgYm9keTogT3BlbkFJUmVzcG9uc2VzUmVxdWVzdDtcbiAgc2lnbmFsPzogQWJvcnRTaWduYWw7XG4gIHNlc3Npb25JZDogc3RyaW5nO1xuICB0aHJlYWRJZDogc3RyaW5nO1xuICBjbGllbnRSZXF1ZXN0SWQ6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBPcGVuQUlSZXNwb25zZXNUcmFuc3BvcnQge1xuICBzdHJlYW0ocmVxdWVzdDogT3BlbkFJVHJhbnNwb3J0UmVxdWVzdCk6IE9wZW5BSUV2ZW50U3RyZWFtO1xuICBjbG9zZT8oKTogdm9pZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBPcGVuQUlIdHRwc1RyYW5zcG9ydE9wdGlvbnMge1xuICBjcmVkZW50aWFsczogT3BlbkFJRGlyZWN0Q3JlZGVudGlhbHM7XG4gIGZldGNoPzogdHlwZW9mIGZldGNoO1xuICByZWZyZXNoQ3JlZGVudGlhbHM/OiAoKSA9PiBQcm9taXNlPE9wZW5BSURpcmVjdENyZWRlbnRpYWxzPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBPcGVuQUlXZWJTb2NrZXRMaWtlIHtcbiAgb24oZXZlbnQ6IFwib3BlblwiLCBsaXN0ZW5lcjogKCkgPT4gdm9pZCk6IHRoaXM7XG4gIG9uKGV2ZW50OiBcIm1lc3NhZ2VcIiwgbGlzdGVuZXI6IChkYXRhOiBSYXdEYXRhLCBpc0JpbmFyeTogYm9vbGVhbikgPT4gdm9pZCk6IHRoaXM7XG4gIG9uKGV2ZW50OiBcImNsb3NlXCIsIGxpc3RlbmVyOiAoY29kZTogbnVtYmVyLCByZWFzb246IEJ1ZmZlcikgPT4gdm9pZCk6IHRoaXM7XG4gIG9uKGV2ZW50OiBcImVycm9yXCIsIGxpc3RlbmVyOiAoZXJyb3I6IEVycm9yKSA9PiB2b2lkKTogdGhpcztcbiAgb24oXG4gICAgZXZlbnQ6IFwidW5leHBlY3RlZC1yZXNwb25zZVwiLFxuICAgIGxpc3RlbmVyOiAocmVxdWVzdDogdW5rbm93biwgcmVzcG9uc2U6IHsgc3RhdHVzQ29kZT86IG51bWJlciB9KSA9PiB2b2lkLFxuICApOiB0aGlzO1xuICBvZmYoZXZlbnQ6IHN0cmluZywgbGlzdGVuZXI6ICguLi5hcmdzOiBuZXZlcltdKSA9PiB2b2lkKTogdGhpcztcbiAgc2VuZChkYXRhOiBzdHJpbmcsIGNhbGxiYWNrPzogKGVycm9yPzogRXJyb3IpID0+IHZvaWQpOiB2b2lkO1xuICBjbG9zZShjb2RlPzogbnVtYmVyLCByZWFzb24/OiBzdHJpbmcpOiB2b2lkO1xuICB0ZXJtaW5hdGUoKTogdm9pZDtcbn1cblxuZXhwb3J0IHR5cGUgT3BlbkFJV2ViU29ja2V0RmFjdG9yeSA9ICh1cmw6IHN0cmluZywgb3B0aW9uczogQ2xpZW50T3B0aW9ucykgPT4gT3BlbkFJV2ViU29ja2V0TGlrZTtcblxuZXhwb3J0IGludGVyZmFjZSBPcGVuQUlXZWJTb2NrZXRUcmFuc3BvcnRPcHRpb25zIGV4dGVuZHMgT3BlbkFJSHR0cHNUcmFuc3BvcnRPcHRpb25zIHtcbiAgd2ViU29ja2V0RmFjdG9yeT86IE9wZW5BSVdlYlNvY2tldEZhY3Rvcnk7XG59XG5cbnR5cGUgU29ja2V0UmVjb3JkID1cbiAgfCB7IGtpbmQ6IFwib3BlblwiIH1cbiAgfCB7IGtpbmQ6IFwibWVzc2FnZVwiOyBkYXRhOiBSYXdEYXRhOyBpc0JpbmFyeTogYm9vbGVhbiB9XG4gIHwgeyBraW5kOiBcImNsb3NlXCI7IGNvZGU6IG51bWJlcjsgcmVhc29uOiBzdHJpbmcgfVxuICB8IHsga2luZDogXCJlcnJvclwiOyBlcnJvcjogRXJyb3IgfVxuICB8IHsga2luZDogXCJyZWplY3RlZFwiOyBzdGF0dXM/OiBudW1iZXIgfTtcblxuY29uc3QgTUFYX0JVRkZFUkVEX1NPQ0tFVF9SRUNPUkRTID0gMTYwMDtcblxuZnVuY3Rpb24gd2Vic29ja2V0VXJsKHVybDogc3RyaW5nKTogc3RyaW5nIHtcbiAgbGV0IHBhcnNlZDogVVJMO1xuICB0cnkge1xuICAgIHBhcnNlZCA9IG5ldyBVUkwodXJsKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICB0aHJvdyBuZXcgT3BlbkFJUHJvdG9jb2xFcnJvcihgSW52YWxpZCBPcGVuQUkgUmVzcG9uc2VzIFVSTDogJHtTdHJpbmcoZXJyb3IpfWApO1xuICB9XG4gIHBhcnNlZC5wcm90b2NvbCA9IHBhcnNlZC5wcm90b2NvbCA9PT0gXCJodHRwczpcIiA/IFwid3NzOlwiIDogXCJ3czpcIjtcbiAgcmV0dXJuIHBhcnNlZC50b1N0cmluZygpO1xufVxuXG5mdW5jdGlvbiByYXdEYXRhVGV4dChkYXRhOiBSYXdEYXRhKTogc3RyaW5nIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoZGF0YSkpIHJldHVybiBCdWZmZXIuY29uY2F0KGRhdGEpLnRvU3RyaW5nKCk7XG4gIGlmIChkYXRhIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpIHJldHVybiBCdWZmZXIuZnJvbShuZXcgVWludDhBcnJheShkYXRhKSkudG9TdHJpbmcoKTtcbiAgcmV0dXJuIEJ1ZmZlci5mcm9tKGRhdGEpLnRvU3RyaW5nKCk7XG59XG5cbmZ1bmN0aW9uIHNvY2tldEV2ZW50cyhzb2NrZXQ6IE9wZW5BSVdlYlNvY2tldExpa2UsIHNpZ25hbD86IEFib3J0U2lnbmFsKSB7XG4gIGNvbnN0IHJlY29yZHM6IFNvY2tldFJlY29yZFtdID0gW107XG4gIGNvbnN0IHdhaXRlcnM6IEFycmF5PChyZWNvcmQ6IFNvY2tldFJlY29yZCkgPT4gdm9pZD4gPSBbXTtcbiAgbGV0IGFjdGl2ZSA9IHRydWU7XG4gIGNvbnN0IHB1c2ggPSAocmVjb3JkOiBTb2NrZXRSZWNvcmQpID0+IHtcbiAgICBpZiAoIWFjdGl2ZSkgcmV0dXJuO1xuICAgIGNvbnN0IHdhaXRlciA9IHdhaXRlcnMuc2hpZnQoKTtcbiAgICBpZiAod2FpdGVyKSB3YWl0ZXIocmVjb3JkKTtcbiAgICBlbHNlIGlmIChyZWNvcmRzLmxlbmd0aCA8IE1BWF9CVUZGRVJFRF9TT0NLRVRfUkVDT1JEUykgcmVjb3Jkcy5wdXNoKHJlY29yZCk7XG4gICAgZWxzZSB7XG4gICAgICBhY3RpdmUgPSBmYWxzZTtcbiAgICAgIHJlY29yZHMubGVuZ3RoID0gMDtcbiAgICAgIHNvY2tldC50ZXJtaW5hdGUoKTtcbiAgICAgIGNvbnN0IG92ZXJmbG93ID0ge1xuICAgICAgICBraW5kOiBcImVycm9yXCIgYXMgY29uc3QsXG4gICAgICAgIGVycm9yOiBuZXcgT3BlbkFJUHJvdG9jb2xFcnJvcihcbiAgICAgICAgICBgT3BlbkFJIFdlYlNvY2tldCBleGNlZWRlZCB0aGUgJHtNQVhfQlVGRkVSRURfU09DS0VUX1JFQ09SRFN9LXJlY29yZCByZWNlaXZlIGJ1ZmZlcmAsXG4gICAgICAgICAgXCJ3ZWJzb2NrZXRfYmFja3ByZXNzdXJlXCIsXG4gICAgICAgICksXG4gICAgICB9O1xuICAgICAgY29uc3Qgb3ZlcmZsb3dXYWl0ZXIgPSB3YWl0ZXJzLnNoaWZ0KCk7XG4gICAgICBpZiAob3ZlcmZsb3dXYWl0ZXIpIG92ZXJmbG93V2FpdGVyKG92ZXJmbG93KTtcbiAgICAgIGVsc2UgcmVjb3Jkcy5wdXNoKG92ZXJmbG93KTtcbiAgICB9XG4gIH07XG4gIGNvbnN0IG9uT3BlbiA9ICgpID0+IHB1c2goeyBraW5kOiBcIm9wZW5cIiB9KTtcbiAgY29uc3Qgb25NZXNzYWdlID0gKGRhdGE6IFJhd0RhdGEsIGlzQmluYXJ5OiBib29sZWFuKSA9PiBwdXNoKHsga2luZDogXCJtZXNzYWdlXCIsIGRhdGEsIGlzQmluYXJ5IH0pO1xuICBjb25zdCBvbkNsb3NlID0gKGNvZGU6IG51bWJlciwgcmVhc29uOiBCdWZmZXIpID0+XG4gICAgcHVzaCh7IGtpbmQ6IFwiY2xvc2VcIiwgY29kZSwgcmVhc29uOiByZWFzb24udG9TdHJpbmcoKSB9KTtcbiAgY29uc3Qgb25FcnJvciA9IChlcnJvcjogRXJyb3IpID0+IHB1c2goeyBraW5kOiBcImVycm9yXCIsIGVycm9yIH0pO1xuICBjb25zdCBvblVuZXhwZWN0ZWRSZXNwb25zZSA9IChfcmVxdWVzdDogdW5rbm93biwgcmVzcG9uc2U6IHsgc3RhdHVzQ29kZT86IG51bWJlciB9KSA9PlxuICAgIHB1c2goeyBraW5kOiBcInJlamVjdGVkXCIsIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzQ29kZSB9KTtcbiAgc29ja2V0Lm9uKFwib3BlblwiLCBvbk9wZW4pO1xuICBzb2NrZXQub24oXCJtZXNzYWdlXCIsIG9uTWVzc2FnZSk7XG4gIHNvY2tldC5vbihcImNsb3NlXCIsIG9uQ2xvc2UpO1xuICBzb2NrZXQub24oXCJlcnJvclwiLCBvbkVycm9yKTtcbiAgc29ja2V0Lm9uKFwidW5leHBlY3RlZC1yZXNwb25zZVwiLCBvblVuZXhwZWN0ZWRSZXNwb25zZSk7XG4gIGNvbnN0IG9uQWJvcnQgPSAoKSA9PiB7XG4gICAgc29ja2V0LnRlcm1pbmF0ZSgpO1xuICAgIHB1c2goeyBraW5kOiBcImVycm9yXCIsIGVycm9yOiBhYm9ydEVycm9yKHNpZ25hbCkgfSk7XG4gIH07XG4gIHNpZ25hbD8uYWRkRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsIG9uQWJvcnQsIHsgb25jZTogdHJ1ZSB9KTtcbiAgcmV0dXJuIHtcbiAgICBuZXh0OiAoKSA9PlxuICAgICAgcmVjb3Jkcy5sZW5ndGhcbiAgICAgICAgPyBQcm9taXNlLnJlc29sdmUocmVjb3Jkcy5zaGlmdCgpISlcbiAgICAgICAgOiBuZXcgUHJvbWlzZTxTb2NrZXRSZWNvcmQ+KChyZXNvbHZlKSA9PiB3YWl0ZXJzLnB1c2gocmVzb2x2ZSkpLFxuICAgIGNsZWFudXA6ICgpID0+IHtcbiAgICAgIGFjdGl2ZSA9IGZhbHNlO1xuICAgICAgc2lnbmFsPy5yZW1vdmVFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgb25BYm9ydCk7XG4gICAgICBzb2NrZXQub2ZmKFwib3BlblwiLCBvbk9wZW4pO1xuICAgICAgc29ja2V0Lm9mZihcIm1lc3NhZ2VcIiwgb25NZXNzYWdlKTtcbiAgICAgIHNvY2tldC5vZmYoXCJjbG9zZVwiLCBvbkNsb3NlKTtcbiAgICAgIHNvY2tldC5vZmYoXCJlcnJvclwiLCBvbkVycm9yKTtcbiAgICAgIHNvY2tldC5vZmYoXCJ1bmV4cGVjdGVkLXJlc3BvbnNlXCIsIG9uVW5leHBlY3RlZFJlc3BvbnNlKTtcbiAgICAgIHJlY29yZHMubGVuZ3RoID0gMDtcbiAgICAgIGNvbnN0IGNsb3NlZCA9IHtcbiAgICAgICAga2luZDogXCJlcnJvclwiIGFzIGNvbnN0LFxuICAgICAgICBlcnJvcjogbmV3IE9wZW5BSVByb3RvY29sRXJyb3IoXCJPcGVuQUkgV2ViU29ja2V0IGV2ZW50IHN0cmVhbSB3YXMgY2xvc2VkXCIpLFxuICAgICAgfTtcbiAgICAgIHdhaXRlcnMuc3BsaWNlKDApLmZvckVhY2goKHdhaXRlcikgPT4gd2FpdGVyKGNsb3NlZCkpO1xuICAgIH0sXG4gICAgZGV0YWNoQWJvcnQ6ICgpID0+IHNpZ25hbD8ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsIG9uQWJvcnQpLFxuICB9O1xufVxuXG5mdW5jdGlvbiBhYm9ydEVycm9yKHNpZ25hbD86IEFib3J0U2lnbmFsKTogRXJyb3Ige1xuICByZXR1cm4gc2lnbmFsPy5yZWFzb24gaW5zdGFuY2VvZiBFcnJvclxuICAgID8gc2lnbmFsLnJlYXNvblxuICAgIDogbmV3IERPTUV4Y2VwdGlvbihcIkFib3J0ZWRcIiwgXCJBYm9ydEVycm9yXCIpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBuZXh0UG9vbGVkUmVjb3JkKFxuICBldmVudHM6IFJldHVyblR5cGU8dHlwZW9mIHNvY2tldEV2ZW50cz4sXG4gIHNvY2tldDogT3BlbkFJV2ViU29ja2V0TGlrZSxcbiAgc2lnbmFsPzogQWJvcnRTaWduYWwsXG4pOiBQcm9taXNlPFNvY2tldFJlY29yZD4ge1xuICBpZiAoIXNpZ25hbCkgcmV0dXJuIGV2ZW50cy5uZXh0KCk7XG4gIGlmIChzaWduYWwuYWJvcnRlZCkgdGhyb3cgYWJvcnRFcnJvcihzaWduYWwpO1xuICByZXR1cm4gbmV3IFByb21pc2U8U29ja2V0UmVjb3JkPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3Qgb25BYm9ydCA9ICgpID0+IHtcbiAgICAgIHNvY2tldC50ZXJtaW5hdGUoKTtcbiAgICAgIHJlamVjdChhYm9ydEVycm9yKHNpZ25hbCkpO1xuICAgIH07XG4gICAgc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCBvbkFib3J0LCB7IG9uY2U6IHRydWUgfSk7XG4gICAgdm9pZCBldmVudHNcbiAgICAgIC5uZXh0KClcbiAgICAgIC50aGVuKHJlc29sdmUsIHJlamVjdClcbiAgICAgIC5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCBvbkFib3J0KTtcbiAgICAgIH0pO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gY2FjaGVBZmZpbml0eVV1aWQoa2V5OiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBoZXggPSBjcnlwdG8uY3JlYXRlSGFzaChcInNoYTI1NlwiKS51cGRhdGUoa2V5KS5kaWdlc3QoXCJoZXhcIikuc2xpY2UoMCwgMzIpLnNwbGl0KFwiXCIpO1xuICBoZXhbMTJdID0gXCI0XCI7XG4gIGhleFsxNl0gPSAoKE51bWJlci5wYXJzZUludChoZXhbMTZdISwgMTYpICYgMHgzKSB8IDB4OCkudG9TdHJpbmcoMTYpO1xuICByZXR1cm4gYCR7aGV4LnNsaWNlKDAsIDgpLmpvaW4oXCJcIil9LSR7aGV4LnNsaWNlKDgsIDEyKS5qb2luKFwiXCIpfS0ke2hleC5zbGljZSgxMiwgMTYpLmpvaW4oXCJcIil9LSR7aGV4LnNsaWNlKDE2LCAyMCkuam9pbihcIlwiKX0tJHtoZXguc2xpY2UoMjApLmpvaW4oXCJcIil9YDtcbn1cblxudHlwZSBBZmZpbml0eUNvbm5lY3Rpb24gPSB7XG4gIHNvY2tldDogT3BlbkFJV2ViU29ja2V0TGlrZTtcbiAgZXZlbnRzOiBSZXR1cm5UeXBlPHR5cGVvZiBzb2NrZXRFdmVudHM+O1xuICBjbG9zZWQ/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IGNsYXNzIE9wZW5BSVdlYlNvY2tldFRyYW5zcG9ydCBpbXBsZW1lbnRzIE9wZW5BSVJlc3BvbnNlc1RyYW5zcG9ydCB7XG4gIHN0YXRpYyByZWFkb25seSBNQVhfQUZGSU5JVFlfQ09OTkVDVElPTlMgPSAxNjtcbiAgY3JlZGVudGlhbHM6IE9wZW5BSURpcmVjdENyZWRlbnRpYWxzO1xuICByZWFkb25seSByZWZyZXNoQ3JlZGVudGlhbHM/OiAoKSA9PiBQcm9taXNlPE9wZW5BSURpcmVjdENyZWRlbnRpYWxzPjtcbiAgcmVhZG9ubHkgd2ViU29ja2V0RmFjdG9yeTogT3BlbkFJV2ViU29ja2V0RmFjdG9yeTtcbiAgcmVhZG9ubHkgYWZmaW5pdHlDb25uZWN0aW9ucyA9IG5ldyBNYXA8c3RyaW5nLCBBZmZpbml0eUNvbm5lY3Rpb24+KCk7XG4gIHJlYWRvbmx5IGJ1c3lBZmZpbml0aWVzID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cbiAgY29uc3RydWN0b3Iob3B0aW9uczogT3BlbkFJV2ViU29ja2V0VHJhbnNwb3J0T3B0aW9ucykge1xuICAgIHRoaXMuY3JlZGVudGlhbHMgPSBvcHRpb25zLmNyZWRlbnRpYWxzO1xuICAgIHRoaXMucmVmcmVzaENyZWRlbnRpYWxzID0gb3B0aW9ucy5yZWZyZXNoQ3JlZGVudGlhbHM7XG4gICAgdGhpcy53ZWJTb2NrZXRGYWN0b3J5ID1cbiAgICAgIG9wdGlvbnMud2ViU29ja2V0RmFjdG9yeSA/PyAoKHVybCwgd3NPcHRpb25zKSA9PiBuZXcgV3NDbGllbnQodXJsLCB3c09wdGlvbnMpKTtcbiAgfVxuXG4gIGNsb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuYWZmaW5pdHlDb25uZWN0aW9ucy5mb3JFYWNoKCh7IHNvY2tldCwgZXZlbnRzIH0pID0+IHtcbiAgICAgIGV2ZW50cy5jbGVhbnVwKCk7XG4gICAgICBzb2NrZXQuY2xvc2UoMTAwMCwgXCJ0cmFuc3BvcnQgY2xvc2VkXCIpO1xuICAgIH0pO1xuICAgIHRoaXMuYWZmaW5pdHlDb25uZWN0aW9ucy5jbGVhcigpO1xuICAgIHRoaXMuYnVzeUFmZmluaXRpZXMuY2xlYXIoKTtcbiAgfVxuXG4gIC8vIOycoO2ctCDsl7DqsrDrp4wg7LaV7Lac7ZWc64ukLiDsoITrtoAg7IKs7JqpIOykkeydtOuptCBmYWxzZeulvCDrsJjtmZjtlbQg7J287ZqM7ISxIOyGjOy8k+ycvOuhnCDsspjrpqztlZzri6QuXG4gIHJlbWVtYmVyQWZmaW5pdHlDb25uZWN0aW9uKHRocmVhZElkOiBzdHJpbmcsIGNvbm5lY3Rpb246IEFmZmluaXR5Q29ubmVjdGlvbik6IGJvb2xlYW4ge1xuICAgIGlmIChcbiAgICAgICF0aGlzLmFmZmluaXR5Q29ubmVjdGlvbnMuaGFzKHRocmVhZElkKSAmJlxuICAgICAgdGhpcy5hZmZpbml0eUNvbm5lY3Rpb25zLnNpemUgPj0gT3BlbkFJV2ViU29ja2V0VHJhbnNwb3J0Lk1BWF9BRkZJTklUWV9DT05ORUNUSU9OU1xuICAgICkge1xuICAgICAgY29uc3QgaWRsZUtleSA9IFsuLi50aGlzLmFmZmluaXR5Q29ubmVjdGlvbnMua2V5cygpXS5maW5kKFxuICAgICAgICAoa2V5KSA9PiAhdGhpcy5idXN5QWZmaW5pdGllcy5oYXMoa2V5KSxcbiAgICAgICk7XG4gICAgICBpZiAoaWRsZUtleSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gZmFsc2U7XG4gICAgICBjb25zdCBpZGxlID0gdGhpcy5hZmZpbml0eUNvbm5lY3Rpb25zLmdldChpZGxlS2V5KSE7XG4gICAgICBpZGxlLmV2ZW50cy5jbGVhbnVwKCk7XG4gICAgICBpZGxlLnNvY2tldC5jbG9zZSgxMDAwLCBcImFmZmluaXR5IGNhY2hlIGV2aWN0ZWRcIik7XG4gICAgICB0aGlzLmFmZmluaXR5Q29ubmVjdGlvbnMuZGVsZXRlKGlkbGVLZXkpO1xuICAgIH1cbiAgICB0aGlzLmFmZmluaXR5Q29ubmVjdGlvbnMuc2V0KHRocmVhZElkLCBjb25uZWN0aW9uKTtcbiAgICAvLyDsnKDtnLQg7IOB7YOc7JeQ7IScIGJhY2tlbmQg6rCAIOuBiuydgCDshozsvJPsnYQg64uk7J2MIOyalOyyreydtCDsp5HslrTrk6Tsp4Ag7JWK64+E66GdIOy6kOyLnOyXkOyEnCDsoJzqsbDtlZzri6QuXG4gICAgY29uc3QgZHJvcCA9ICgpID0+IHtcbiAgICAgIGNvbm5lY3Rpb24uY2xvc2VkID0gdHJ1ZTtcbiAgICAgIGlmICh0aGlzLmJ1c3lBZmZpbml0aWVzLmhhcyh0aHJlYWRJZCkpIHJldHVybjtcbiAgICAgIGlmICh0aGlzLmFmZmluaXR5Q29ubmVjdGlvbnMuZ2V0KHRocmVhZElkKSAhPT0gY29ubmVjdGlvbikgcmV0dXJuO1xuICAgICAgdGhpcy5hZmZpbml0eUNvbm5lY3Rpb25zLmRlbGV0ZSh0aHJlYWRJZCk7XG4gICAgICBjb25uZWN0aW9uLmV2ZW50cy5jbGVhbnVwKCk7XG4gICAgfTtcbiAgICBjb25uZWN0aW9uLnNvY2tldC5vbihcImNsb3NlXCIsIGRyb3ApO1xuICAgIGNvbm5lY3Rpb24uc29ja2V0Lm9uKFwiZXJyb3JcIiwgZHJvcCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBhc3luYyAqc3RyZWFtKHJlcXVlc3Q6IE9wZW5BSVRyYW5zcG9ydFJlcXVlc3QpOiBBc3luY0dlbmVyYXRvcjxPcGVuQUlOb3JtYWxpemVkRXZlbnQ+IHtcbiAgICBsZXQgcmVmcmVzaGVkID0gZmFsc2U7XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGlmIChyZXF1ZXN0LnNpZ25hbD8uYWJvcnRlZCkgdGhyb3cgYWJvcnRFcnJvcihyZXF1ZXN0LnNpZ25hbCk7XG4gICAgICBjb25zdCBoYXNBZmZpbml0eSA9IHJlcXVlc3QuYm9keS5wcm9tcHRfY2FjaGVfa2V5ICE9PSB1bmRlZmluZWQ7XG4gICAgICBjb25zdCByZXRhaW5Db25uZWN0aW9uID0gaGFzQWZmaW5pdHkgJiYgIXRoaXMuYnVzeUFmZmluaXRpZXMuaGFzKHJlcXVlc3QudGhyZWFkSWQpO1xuICAgICAgaWYgKHJldGFpbkNvbm5lY3Rpb24pIHRoaXMuYnVzeUFmZmluaXRpZXMuYWRkKHJlcXVlc3QudGhyZWFkSWQpO1xuICAgICAgY29uc3QgZW50cnkgPSByZXRhaW5Db25uZWN0aW9uID8gdGhpcy5hZmZpbml0eUNvbm5lY3Rpb25zLmdldChyZXF1ZXN0LnRocmVhZElkKSA6IHVuZGVmaW5lZDtcbiAgICAgIGlmIChlbnRyeT8uY2xvc2VkKSB7XG4gICAgICAgIHRoaXMuYWZmaW5pdHlDb25uZWN0aW9ucy5kZWxldGUocmVxdWVzdC50aHJlYWRJZCk7XG4gICAgICAgIGVudHJ5LmV2ZW50cy5jbGVhbnVwKCk7XG4gICAgICB9XG4gICAgICBjb25zdCBjYWNoZWQgPSBlbnRyeT8uY2xvc2VkID8gdW5kZWZpbmVkIDogZW50cnk7XG4gICAgICBsZXQgcmV0YWluZWQgPSByZXRhaW5Db25uZWN0aW9uO1xuICAgICAgY29uc3Qgc29ja2V0ID1cbiAgICAgICAgY2FjaGVkPy5zb2NrZXQgPz9cbiAgICAgICAgdGhpcy53ZWJTb2NrZXRGYWN0b3J5KHdlYnNvY2tldFVybChDSEFUR1BUX0NPREVYX1JFU1BPTlNFU19VUkwpLCB7XG4gICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgLi4uYnVpbGRDb2RleElkZW50aXR5SGVhZGVycyh0aGlzLmNyZWRlbnRpYWxzLmFjY2Vzc1Rva2VuLCB0aGlzLmNyZWRlbnRpYWxzLmFjY291bnRJZCwge1xuICAgICAgICAgICAgICBzZXNzaW9uSWQ6IHJlcXVlc3Quc2Vzc2lvbklkLFxuICAgICAgICAgICAgICB0aHJlYWRJZDogcmVxdWVzdC50aHJlYWRJZCxcbiAgICAgICAgICAgICAgY2xpZW50UmVxdWVzdElkOiByZXF1ZXN0LmNsaWVudFJlcXVlc3RJZCxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgXCJPcGVuQUktQmV0YVwiOiBcInJlc3BvbnNlc193ZWJzb2NrZXRzPTIwMjYtMDItMDZcIixcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIGNvbnN0IGV2ZW50cyA9IGNhY2hlZD8uZXZlbnRzID8/IHNvY2tldEV2ZW50cyhzb2NrZXQsIHJlcXVlc3Quc2lnbmFsKTtcbiAgICAgIGxldCBjb21wbGV0ZWQgPSBmYWxzZTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmICghY2FjaGVkKSB7XG4gICAgICAgICAgY29uc3QgaGFuZHNoYWtlID0gYXdhaXQgZXZlbnRzLm5leHQoKTtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBoYW5kc2hha2Uua2luZCA9PT0gXCJyZWplY3RlZFwiICYmXG4gICAgICAgICAgICBoYW5kc2hha2Uuc3RhdHVzID09PSA0MDEgJiZcbiAgICAgICAgICAgICFyZWZyZXNoZWQgJiZcbiAgICAgICAgICAgIHRoaXMucmVmcmVzaENyZWRlbnRpYWxzXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBzb2NrZXQudGVybWluYXRlKCk7XG4gICAgICAgICAgICB0aGlzLmNyZWRlbnRpYWxzID0gYXdhaXQgdGhpcy5yZWZyZXNoQ3JlZGVudGlhbHMoKTtcbiAgICAgICAgICAgIHJlZnJlc2hlZCA9IHRydWU7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGhhbmRzaGFrZS5raW5kID09PSBcInJlamVjdGVkXCIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBPcGVuQUlQcm90b2NvbEVycm9yKFxuICAgICAgICAgICAgICBgT3BlbkFJIFdlYlNvY2tldCBoYW5kc2hha2UgcmVqZWN0ZWQke2hhbmRzaGFrZS5zdGF0dXMgPyBgIHdpdGggSFRUUCAke2hhbmRzaGFrZS5zdGF0dXN9YCA6IFwiXCJ9YCxcbiAgICAgICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgICAgICBoYW5kc2hha2Uuc3RhdHVzLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGhhbmRzaGFrZS5raW5kID09PSBcImVycm9yXCIpIHRocm93IGhhbmRzaGFrZS5lcnJvcjtcbiAgICAgICAgICBpZiAoaGFuZHNoYWtlLmtpbmQgIT09IFwib3BlblwiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgT3BlbkFJUHJvdG9jb2xFcnJvcihcIk9wZW5BSSBXZWJTb2NrZXQgY2xvc2VkIGJlZm9yZSB0aGUgaGFuZHNoYWtlIGNvbXBsZXRlZFwiKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHJldGFpbkNvbm5lY3Rpb24pIHtcbiAgICAgICAgICAgIHJldGFpbmVkID0gdGhpcy5yZW1lbWJlckFmZmluaXR5Q29ubmVjdGlvbihyZXF1ZXN0LnRocmVhZElkLCB7IHNvY2tldCwgZXZlbnRzIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGF3YWl0IG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICBzb2NrZXQuc2VuZChKU09OLnN0cmluZ2lmeSh7IHR5cGU6IFwicmVzcG9uc2UuY3JlYXRlXCIsIC4uLnJlcXVlc3QuYm9keSB9KSwgKGVycm9yKSA9PlxuICAgICAgICAgICAgZXJyb3IgPyByZWplY3QoZXJyb3IpIDogcmVzb2x2ZSgpLFxuICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgICAgY29uc3QgcmVjb3JkID0gY2FjaGVkXG4gICAgICAgICAgICA/IGF3YWl0IG5leHRQb29sZWRSZWNvcmQoZXZlbnRzLCBzb2NrZXQsIHJlcXVlc3Quc2lnbmFsKVxuICAgICAgICAgICAgOiBhd2FpdCBldmVudHMubmV4dCgpO1xuICAgICAgICAgIGlmIChyZWNvcmQua2luZCA9PT0gXCJtZXNzYWdlXCIpIHtcbiAgICAgICAgICAgIGlmIChyZWNvcmQuaXNCaW5hcnkpIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IE9wZW5BSVByb3RvY29sRXJyb3IoXCJPcGVuQUkgV2ViU29ja2V0IHNlbnQgYW4gdW5leHBlY3RlZCBiaW5hcnkgbWVzc2FnZVwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCByYXc6IHVua25vd247XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICByYXcgPSBKU09OLnBhcnNlKHJhd0RhdGFUZXh0KHJlY29yZC5kYXRhKSk7XG4gICAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IE9wZW5BSVByb3RvY29sRXJyb3IoXCJPcGVuQUkgV2ViU29ja2V0IHNlbnQgaW52YWxpZCBKU09OXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZXZlbnQgPSBub3JtYWxpemVPcGVuQUlFdmVudChyYXcpO1xuICAgICAgICAgICAgaWYgKCFldmVudCkgY29udGludWU7XG4gICAgICAgICAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJjb21wbGV0ZWRcIikge1xuICAgICAgICAgICAgICBjb21wbGV0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICBpZiAocmV0YWluZWQpIGV2ZW50cy5kZXRhY2hBYm9ydCgpO1xuICAgICAgICAgICAgICBlbHNlIHNvY2tldC5jbG9zZSgxMDAwLCBcInJlc3BvbnNlIGNvbXBsZXRlZFwiKTtcbiAgICAgICAgICAgICAgeWllbGQgZXZlbnQ7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHlpZWxkIGV2ZW50O1xuICAgICAgICAgICAgaWYgKGV2ZW50LnR5cGUgPT09IFwiZXJyb3JcIikgdGhyb3cgZXZlbnQuZXJyb3I7XG4gICAgICAgICAgfSBlbHNlIGlmIChyZWNvcmQua2luZCA9PT0gXCJlcnJvclwiKSB7XG4gICAgICAgICAgICB0aHJvdyByZWNvcmQuZXJyb3I7XG4gICAgICAgICAgfSBlbHNlIGlmIChyZWNvcmQua2luZCA9PT0gXCJjbG9zZVwiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgT3BlbkFJUHJvdG9jb2xFcnJvcihcbiAgICAgICAgICAgICAgYE9wZW5BSSBXZWJTb2NrZXQgY2xvc2VkIGJlZm9yZSBhIHRlcm1pbmFsIHJlc3BvbnNlIGV2ZW50ICgke3JlY29yZC5jb2RlfSR7cmVjb3JkLnJlYXNvbiA/IGA6ICR7cmVjb3JkLnJlYXNvbn1gIDogXCJcIn0pYCxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBPcGVuQUlQcm90b2NvbEVycm9yKFwiT3BlbkFJIFdlYlNvY2tldCBlbWl0dGVkIGFuIHVuZXhwZWN0ZWQgaGFuZHNoYWtlIGV2ZW50XCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgaWYgKCFjb21wbGV0ZWQgfHwgIXJldGFpbmVkKSB7XG4gICAgICAgICAgaWYgKHJldGFpbmVkKSB0aGlzLmFmZmluaXR5Q29ubmVjdGlvbnMuZGVsZXRlKHJlcXVlc3QudGhyZWFkSWQpO1xuICAgICAgICAgIGV2ZW50cy5jbGVhbnVwKCk7XG4gICAgICAgICAgaWYgKCFjb21wbGV0ZWQpIHNvY2tldC50ZXJtaW5hdGUoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocmV0YWluQ29ubmVjdGlvbikgdGhpcy5idXN5QWZmaW5pdGllcy5kZWxldGUocmVxdWVzdC50aHJlYWRJZCk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJlc3BvbnNlRXJyb3IocmVzcG9uc2U6IFJlc3BvbnNlKTogUHJvbWlzZTxPcGVuQUlQcm90b2NvbEVycm9yPiB7XG4gIGNvbnN0IHRleHQgPSBhd2FpdCByZXNwb25zZS50ZXh0KCkuY2F0Y2goKCkgPT4gXCJcIik7XG4gIGxldCBtZXNzYWdlID0gdGV4dCB8fCByZXNwb25zZS5zdGF0dXNUZXh0IHx8IGBIVFRQICR7cmVzcG9uc2Uuc3RhdHVzfWA7XG4gIGxldCBjb2RlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIHRyeSB7XG4gICAgY29uc3QgcGFyc2VkID0gSlNPTi5wYXJzZSh0ZXh0KSBhcyB7XG4gICAgICBlcnJvcj86IHsgbWVzc2FnZT86IHN0cmluZzsgY29kZT86IHN0cmluZyB9IHwgc3RyaW5nO1xuICAgICAgbWVzc2FnZT86IHN0cmluZztcbiAgICAgIGNvZGU/OiBzdHJpbmc7XG4gICAgfTtcbiAgICBjb25zdCBlcnJvciA9IHBhcnNlZC5lcnJvcjtcbiAgICBtZXNzYWdlID1cbiAgICAgICh0eXBlb2YgZXJyb3IgPT09IFwib2JqZWN0XCIgPyBlcnJvci5tZXNzYWdlIDogdW5kZWZpbmVkKSA/P1xuICAgICAgcGFyc2VkLm1lc3NhZ2UgPz9cbiAgICAgICh0eXBlb2YgZXJyb3IgPT09IFwic3RyaW5nXCIgPyBlcnJvciA6IG1lc3NhZ2UpO1xuICAgIGNvZGUgPSAodHlwZW9mIGVycm9yID09PSBcIm9iamVjdFwiID8gZXJyb3IuY29kZSA6IHVuZGVmaW5lZCkgPz8gcGFyc2VkLmNvZGU7XG4gIH0gY2F0Y2gge1xuICAgIGNvZGUgPSB1bmRlZmluZWQ7XG4gIH1cbiAgcmV0dXJuIG5ldyBPcGVuQUlQcm90b2NvbEVycm9yKG1lc3NhZ2UsIGNvZGUsIHJlc3BvbnNlLnN0YXR1cyk7XG59XG5cbmV4cG9ydCBjbGFzcyBPcGVuQUlIdHRwc1RyYW5zcG9ydCBpbXBsZW1lbnRzIE9wZW5BSVJlc3BvbnNlc1RyYW5zcG9ydCB7XG4gIGNyZWRlbnRpYWxzOiBPcGVuQUlEaXJlY3RDcmVkZW50aWFscztcbiAgcmVhZG9ubHkgZmV0Y2hJbXBsOiB0eXBlb2YgZmV0Y2g7XG4gIHJlYWRvbmx5IHJlZnJlc2hDcmVkZW50aWFscz86ICgpID0+IFByb21pc2U8T3BlbkFJRGlyZWN0Q3JlZGVudGlhbHM+O1xuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IE9wZW5BSUh0dHBzVHJhbnNwb3J0T3B0aW9ucykge1xuICAgIHRoaXMuY3JlZGVudGlhbHMgPSBvcHRpb25zLmNyZWRlbnRpYWxzO1xuICAgIHRoaXMuZmV0Y2hJbXBsID0gb3B0aW9ucy5mZXRjaCA/PyBmZXRjaDtcbiAgICB0aGlzLnJlZnJlc2hDcmVkZW50aWFscyA9IG9wdGlvbnMucmVmcmVzaENyZWRlbnRpYWxzO1xuICB9XG5cbiAgYXN5bmMgKnN0cmVhbShyZXF1ZXN0OiBPcGVuQUlUcmFuc3BvcnRSZXF1ZXN0KTogQXN5bmNHZW5lcmF0b3I8T3BlbkFJTm9ybWFsaXplZEV2ZW50PiB7XG4gICAgbGV0IHJlZnJlc2hlZCA9IGZhbHNlO1xuXG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5mZXRjaEltcGwoQ0hBVEdQVF9DT0RFWF9SRVNQT05TRVNfVVJMLCB7XG4gICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgICAgIGhlYWRlcnM6IGJ1aWxkQ29kZXhJZGVudGl0eUhlYWRlcnMoXG4gICAgICAgICAgdGhpcy5jcmVkZW50aWFscy5hY2Nlc3NUb2tlbixcbiAgICAgICAgICB0aGlzLmNyZWRlbnRpYWxzLmFjY291bnRJZCxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBzZXNzaW9uSWQ6IHJlcXVlc3Quc2Vzc2lvbklkLFxuICAgICAgICAgICAgdGhyZWFkSWQ6IHJlcXVlc3QudGhyZWFkSWQsXG4gICAgICAgICAgICBjbGllbnRSZXF1ZXN0SWQ6IHJlcXVlc3QuY2xpZW50UmVxdWVzdElkLFxuICAgICAgICAgIH0sXG4gICAgICAgICksXG4gICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHJlcXVlc3QuYm9keSksXG4gICAgICAgIHNpZ25hbDogcmVxdWVzdC5zaWduYWwsXG4gICAgICB9KTtcblxuICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gNDAxICYmICFyZWZyZXNoZWQgJiYgdGhpcy5yZWZyZXNoQ3JlZGVudGlhbHMpIHtcbiAgICAgICAgYXdhaXQgcmVzcG9uc2UuYm9keT8uY2FuY2VsKCk7XG4gICAgICAgIHRoaXMuY3JlZGVudGlhbHMgPSBhd2FpdCB0aGlzLnJlZnJlc2hDcmVkZW50aWFscygpO1xuICAgICAgICByZWZyZXNoZWQgPSB0cnVlO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmICghcmVzcG9uc2Uub2spIHRocm93IGF3YWl0IHJlc3BvbnNlRXJyb3IocmVzcG9uc2UpO1xuICAgICAgaWYgKCFyZXNwb25zZS5ib2R5KSB0aHJvdyBuZXcgT3BlbkFJUHJvdG9jb2xFcnJvcihcIk9wZW5BSSByZXNwb25zZSBoYWQgbm8gYm9keVwiKTtcblxuICAgICAgZm9yIGF3YWl0IChjb25zdCBldmVudCBvZiBub3JtYWxpemVPcGVuQUlTU0UocmVzcG9uc2UuYm9keSkpIHtcbiAgICAgICAgeWllbGQgZXZlbnQ7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgT3BlbkFJRGlyZWN0Q2xpZW50T3B0aW9ucyBleHRlbmRzIE9wZW5BSUh0dHBzVHJhbnNwb3J0T3B0aW9ucyB7XG4gIHRyYW5zcG9ydD86IE9wZW5BSVJlc3BvbnNlc1RyYW5zcG9ydDtcbiAgdHJhbnNwb3J0S2luZD86IFwiaHR0cHNcIiB8IFwid2Vic29ja2V0XCI7XG4gIHdlYlNvY2tldEZhY3Rvcnk/OiBPcGVuQUlXZWJTb2NrZXRGYWN0b3J5O1xufVxuXG5leHBvcnQgY2xhc3MgT3BlbkFJRGlyZWN0Q2xpZW50IHtcbiAgcmVhZG9ubHkgdHJhbnNwb3J0OiBPcGVuQUlSZXNwb25zZXNUcmFuc3BvcnQ7XG4gIGltYWdlQ3JlZGVudGlhbHM6IE9wZW5BSURpcmVjdENyZWRlbnRpYWxzO1xuXG4gIGNvbnN0cnVjdG9yKHJlYWRvbmx5IG9wdGlvbnM6IE9wZW5BSURpcmVjdENsaWVudE9wdGlvbnMpIHtcbiAgICB0aGlzLmltYWdlQ3JlZGVudGlhbHMgPSBvcHRpb25zLmNyZWRlbnRpYWxzO1xuICAgIHRoaXMudHJhbnNwb3J0ID1cbiAgICAgIG9wdGlvbnMudHJhbnNwb3J0ID8/XG4gICAgICAob3B0aW9ucy50cmFuc3BvcnRLaW5kID09PSBcIndlYnNvY2tldFwiXG4gICAgICAgID8gbmV3IE9wZW5BSVdlYlNvY2tldFRyYW5zcG9ydChvcHRpb25zKVxuICAgICAgICA6IG5ldyBPcGVuQUlIdHRwc1RyYW5zcG9ydChvcHRpb25zKSk7XG4gIH1cblxuICByZXNwb25zZXMob3B0aW9uczogT3BlbkFJUmVzcG9uc2VzT3B0aW9ucywgc2lnbmFsPzogQWJvcnRTaWduYWwpOiBPcGVuQUlFdmVudFN0cmVhbSB7XG4gICAgaWYgKFxuICAgICAgb3B0aW9ucy5tb2RlbCA9PT0gXCJncHQtaW1hZ2UtMlwiIHx8XG4gICAgICAodHlwZW9mIG9wdGlvbnMuaW1hZ2VHZW5lcmF0aW9uID09PSBcIm9iamVjdFwiICYmXG4gICAgICAgIG9wdGlvbnMuaW1hZ2VHZW5lcmF0aW9uLmJhY2tncm91bmQgPT09IFwidHJhbnNwYXJlbnRcIilcbiAgICApIHtcbiAgICAgIHJldHVybiB0aGlzLnN0YW5kYWxvbmVJbWFnZXMob3B0aW9ucywgc2lnbmFsKTtcbiAgICB9XG4gICAgY29uc3QgY2xpZW50UmVxdWVzdElkID0gY3J5cHRvLnJhbmRvbVVVSUQoKTtcbiAgICBjb25zdCBhZmZpbml0eUlkID0gb3B0aW9ucy5wcm9tcHRDYWNoZUtleVxuICAgICAgPyBjYWNoZUFmZmluaXR5VXVpZChvcHRpb25zLnByb21wdENhY2hlS2V5KVxuICAgICAgOiBjbGllbnRSZXF1ZXN0SWQ7XG4gICAgcmV0dXJuIHRoaXMudHJhbnNwb3J0LnN0cmVhbSh7XG4gICAgICBib2R5OiBidWlsZE9wZW5BSVJlc3BvbnNlc1JlcXVlc3QoXG4gICAgICAgIG9wdGlvbnMucHJvbXB0Q2FjaGVLZXkgPyB7IC4uLm9wdGlvbnMsIHByb21wdENhY2hlS2V5OiBhZmZpbml0eUlkIH0gOiBvcHRpb25zLFxuICAgICAgKSxcbiAgICAgIHNpZ25hbCxcbiAgICAgIHNlc3Npb25JZDogYWZmaW5pdHlJZCxcbiAgICAgIC8vIHByb21wdENhY2hlS2V5IGlzIGFscmVhZHkgYSBvbmUtd2F5IFNESyBhZmZpbml0eSB2YWx1ZSwgbmV2ZXIgYSByYXcgc2Vzc2lvbktleS5cbiAgICAgIHRocmVhZElkOiBhZmZpbml0eUlkLFxuICAgICAgY2xpZW50UmVxdWVzdElkLFxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgKnN0YW5kYWxvbmVJbWFnZXMoXG4gICAgb3B0aW9uczogT3BlbkFJUmVzcG9uc2VzT3B0aW9ucyxcbiAgICBzaWduYWw/OiBBYm9ydFNpZ25hbCxcbiAgKTogT3BlbkFJRXZlbnRTdHJlYW0ge1xuICAgIGNvbnN0IHJlcXVlc3QgPSBidWlsZFN0YW5kYWxvbmVJbWFnZVJlcXVlc3Qob3B0aW9ucyk7XG4gICAgY29uc3QgcmVxdWVzdElkID0gY3J5cHRvLnJhbmRvbVVVSUQoKTtcbiAgICBmb3IgKGxldCBhdHRlbXB0ID0gMDsgYXR0ZW1wdCA8IDI7IGF0dGVtcHQrKykge1xuICAgICAgc2lnbmFsPy50aHJvd0lmQWJvcnRlZCgpO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCAodGhpcy5vcHRpb25zLmZldGNoID8/IGZldGNoKShyZXF1ZXN0LnVybCwge1xuICAgICAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgLi4uYnVpbGRDb2RleElkZW50aXR5SGVhZGVycyhcbiAgICAgICAgICAgIHRoaXMuaW1hZ2VDcmVkZW50aWFscy5hY2Nlc3NUb2tlbixcbiAgICAgICAgICAgIHRoaXMuaW1hZ2VDcmVkZW50aWFscy5hY2NvdW50SWQsXG4gICAgICAgICAgKSxcbiAgICAgICAgICBBY2NlcHQ6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgICAgICAgIFwieC1jb2RleC1pbWFnZS10dXJuLWlkXCI6IHJlcXVlc3RJZCxcbiAgICAgICAgfSxcbiAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkocmVxdWVzdC5ib2R5KSxcbiAgICAgICAgc2lnbmFsLFxuICAgICAgfSk7XG4gICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSA0MDEgJiYgYXR0ZW1wdCA9PT0gMCAmJiB0aGlzLm9wdGlvbnMucmVmcmVzaENyZWRlbnRpYWxzKSB7XG4gICAgICAgIGF3YWl0IHJlc3BvbnNlLmJvZHk/LmNhbmNlbCgpO1xuICAgICAgICB0aGlzLmltYWdlQ3JlZGVudGlhbHMgPSBhd2FpdCB0aGlzLm9wdGlvbnMucmVmcmVzaENyZWRlbnRpYWxzKCk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKCFyZXNwb25zZS5vaykgdGhyb3cgYXdhaXQgcmVzcG9uc2VFcnJvcihyZXNwb25zZSk7XG4gICAgICBjb25zdCBpbWFnZXMgPSBhd2FpdCByZWFkU3RhbmRhbG9uZUltYWdlUmVzcG9uc2UoXG4gICAgICAgIHJlc3BvbnNlLFxuICAgICAgICB0eXBlb2Ygb3B0aW9ucy5pbWFnZUdlbmVyYXRpb24gPT09IFwib2JqZWN0XCIgJiZcbiAgICAgICAgICBvcHRpb25zLmltYWdlR2VuZXJhdGlvbi5iYWNrZ3JvdW5kID09PSBcInRyYW5zcGFyZW50XCIsXG4gICAgICApO1xuICAgICAgc2lnbmFsPy50aHJvd0lmQWJvcnRlZCgpO1xuICAgICAgeWllbGQqIGltYWdlcztcbiAgICAgIGNvbnN0IGZpcnN0SW1hZ2UgPSBpbWFnZXNbMF07XG4gICAgICB5aWVsZCB7XG4gICAgICAgIHR5cGU6IFwiY29tcGxldGVkXCIsXG4gICAgICAgIHJlc3BvbnNlSWQ6IHJlcXVlc3RJZCxcbiAgICAgICAgbW9kZWw6IGZpcnN0SW1hZ2U/LnR5cGUgPT09IFwiaW1hZ2VcIiA/IGZpcnN0SW1hZ2UuZ2VuZXJhdGlvbj8ubW9kZWwgOiBcImdwdC1pbWFnZS0yXCIsXG4gICAgICB9O1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIGNsb3NlKCk6IHZvaWQge1xuICAgIHRoaXMudHJhbnNwb3J0LmNsb3NlPy4oKTtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUF3RUEsTUFBTSw4QkFBOEI7QUFFcEMsU0FBUyxhQUFhLEtBQXFCO0NBQ3pDLElBQUk7Q0FDSixJQUFJO0VBQ0YsU0FBUyxJQUFJLElBQUksR0FBRztDQUN0QixTQUFTLE9BQU87RUFDZCxNQUFNLElBQUksb0JBQW9CLGlDQUFpQyxPQUFPLEtBQUssR0FBRztDQUNoRjtDQUNBLE9BQU8sV0FBVyxPQUFPLGFBQWEsV0FBVyxTQUFTO0NBQzFELE9BQU8sT0FBTyxTQUFTO0FBQ3pCO0FBRUEsU0FBUyxZQUFZLE1BQXVCO0NBQzFDLElBQUksTUFBTSxRQUFRLElBQUks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
|