bitsnap-react 1.21.0 → 1.21.1

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.
Files changed (101) hide show
  1. package/dist/BitsnapCart-3RSI3PIM.mjs +2 -0
  2. package/dist/BitsnapCart-4DKJ7OXL.js +2 -0
  3. package/dist/BitsnapCart-4DKJ7OXL.js.map +1 -0
  4. package/dist/{CartProvider-4WXJPQJB.mjs → CartProvider-TXRCAXOT.mjs} +2 -2
  5. package/dist/CartProvider-ZAGTSCHJ.js +2 -0
  6. package/dist/CartProvider-ZAGTSCHJ.js.map +1 -0
  7. package/dist/PanelModelFiles-EKQRLF46.js.map +1 -1
  8. package/dist/analytics.js.map +1 -1
  9. package/dist/catalog.js +1 -1
  10. package/dist/catalog.js.map +1 -1
  11. package/dist/catalog.mjs +1 -1
  12. package/dist/chat.js +1 -1
  13. package/dist/chat.js.map +1 -1
  14. package/dist/chat.mjs +1 -1
  15. package/dist/{chunk-WOA6W5RM.mjs → chunk-2HINORSP.mjs} +2 -2
  16. package/dist/{chunk-EFN4OW2C.js → chunk-3TUL63IC.js} +2 -2
  17. package/dist/chunk-3TUL63IC.js.map +1 -0
  18. package/dist/chunk-56X4DBMQ.mjs +5 -0
  19. package/dist/chunk-56X4DBMQ.mjs.map +1 -0
  20. package/dist/chunk-6DEKVABT.js.map +1 -1
  21. package/dist/chunk-6Q3VGPSF.js.map +1 -1
  22. package/dist/{chunk-LRUBBPTV.mjs → chunk-7WTQGXPQ.mjs} +2 -2
  23. package/dist/chunk-EK3D44XW.js.map +1 -1
  24. package/dist/{chunk-27JN2GIQ.mjs → chunk-FG7NLLJV.mjs} +2 -2
  25. package/dist/{chunk-EZGL6DPG.js → chunk-FPCMLZFM.js} +2 -2
  26. package/dist/chunk-FPCMLZFM.js.map +1 -0
  27. package/dist/{chunk-2G46TAUX.mjs → chunk-GLKBCVNH.mjs} +2 -2
  28. package/dist/{chunk-2G46TAUX.mjs.map → chunk-GLKBCVNH.mjs.map} +1 -1
  29. package/dist/{chunk-E5MMKBC4.js → chunk-J4GUVJP4.js} +2 -2
  30. package/dist/chunk-J4GUVJP4.js.map +1 -0
  31. package/dist/{chunk-IKKMSLKC.js → chunk-J6YI6FJN.js} +2 -2
  32. package/dist/chunk-J6YI6FJN.js.map +1 -0
  33. package/dist/chunk-JSDGZ4NY.js.map +1 -1
  34. package/dist/{chunk-FORZ5AH4.js → chunk-K2HIALKR.js} +2 -2
  35. package/dist/chunk-K2HIALKR.js.map +1 -0
  36. package/dist/chunk-KOYBZORL.js.map +1 -1
  37. package/dist/chunk-MDAFPGPA.js.map +1 -1
  38. package/dist/{chunk-I2RHVELR.js → chunk-MMQTRSI5.js} +2 -2
  39. package/dist/chunk-MMQTRSI5.js.map +1 -0
  40. package/dist/{chunk-KYSMT6ZK.js → chunk-NW5PFIZB.js} +2 -2
  41. package/dist/chunk-NW5PFIZB.js.map +1 -0
  42. package/dist/{chunk-TM3E3L57.js → chunk-OCJ7YWFX.js} +2 -2
  43. package/dist/chunk-OCJ7YWFX.js.map +1 -0
  44. package/dist/chunk-Q337IQNA.js.map +1 -1
  45. package/dist/{chunk-6ALA5M44.mjs → chunk-QWQPAN4F.mjs} +2 -2
  46. package/dist/{chunk-HLULQA3B.mjs → chunk-QXCL5CE6.mjs} +2 -2
  47. package/dist/chunk-TWZQ4CBY.js +5 -0
  48. package/dist/chunk-TWZQ4CBY.js.map +1 -0
  49. package/dist/{chunk-KO7Z3E23.mjs → chunk-VU2MX5HY.mjs} +2 -2
  50. package/dist/chunk-W3RGQYPD.js.map +1 -1
  51. package/dist/{chunk-TMEII7BM.mjs → chunk-YV3UGLQ3.mjs} +2 -2
  52. package/dist/chunk-Z3YOJ6NZ.js.map +1 -1
  53. package/dist/consent.js.map +1 -1
  54. package/dist/course.js +1 -1
  55. package/dist/course.js.map +1 -1
  56. package/dist/course.mjs +1 -1
  57. package/dist/errors.js.map +1 -1
  58. package/dist/index.js +1 -1
  59. package/dist/index.js.map +1 -1
  60. package/dist/index.mjs +1 -1
  61. package/dist/internal.js.map +1 -1
  62. package/dist/methods-27HZQY5L.js +2 -0
  63. package/dist/methods-27HZQY5L.js.map +1 -0
  64. package/dist/{methods-43RQLLWD.mjs → methods-27JU6IH7.mjs} +2 -2
  65. package/dist/model-files-client-P4PORZJ6.js.map +1 -1
  66. package/dist/models.js.map +1 -1
  67. package/dist/returns.js +1 -1
  68. package/dist/returns.js.map +1 -1
  69. package/dist/returns.mjs +1 -1
  70. package/dist/viewer3d.js.map +1 -1
  71. package/dist/viewer3d.mjs +1 -1
  72. package/package.json +1 -1
  73. package/dist/BitsnapCart-73ESTTTH.mjs +0 -2
  74. package/dist/BitsnapCart-TWT7LVGJ.js +0 -2
  75. package/dist/BitsnapCart-TWT7LVGJ.js.map +0 -1
  76. package/dist/CartProvider-CPF2E7JA.js +0 -2
  77. package/dist/CartProvider-CPF2E7JA.js.map +0 -1
  78. package/dist/chunk-E5MMKBC4.js.map +0 -1
  79. package/dist/chunk-EFN4OW2C.js.map +0 -1
  80. package/dist/chunk-EZGL6DPG.js.map +0 -1
  81. package/dist/chunk-FORZ5AH4.js.map +0 -1
  82. package/dist/chunk-I2RHVELR.js.map +0 -1
  83. package/dist/chunk-IKKMSLKC.js.map +0 -1
  84. package/dist/chunk-KYSMT6ZK.js.map +0 -1
  85. package/dist/chunk-T5JO4SP7.mjs +0 -5
  86. package/dist/chunk-T5JO4SP7.mjs.map +0 -1
  87. package/dist/chunk-TM3E3L57.js.map +0 -1
  88. package/dist/chunk-XMRGA5AN.js +0 -5
  89. package/dist/chunk-XMRGA5AN.js.map +0 -1
  90. package/dist/methods-SZVF3HMF.js +0 -2
  91. package/dist/methods-SZVF3HMF.js.map +0 -1
  92. /package/dist/{BitsnapCart-73ESTTTH.mjs.map → BitsnapCart-3RSI3PIM.mjs.map} +0 -0
  93. /package/dist/{CartProvider-4WXJPQJB.mjs.map → CartProvider-TXRCAXOT.mjs.map} +0 -0
  94. /package/dist/{chunk-WOA6W5RM.mjs.map → chunk-2HINORSP.mjs.map} +0 -0
  95. /package/dist/{chunk-LRUBBPTV.mjs.map → chunk-7WTQGXPQ.mjs.map} +0 -0
  96. /package/dist/{chunk-27JN2GIQ.mjs.map → chunk-FG7NLLJV.mjs.map} +0 -0
  97. /package/dist/{chunk-6ALA5M44.mjs.map → chunk-QWQPAN4F.mjs.map} +0 -0
  98. /package/dist/{chunk-HLULQA3B.mjs.map → chunk-QXCL5CE6.mjs.map} +0 -0
  99. /package/dist/{chunk-KO7Z3E23.mjs.map → chunk-VU2MX5HY.mjs.map} +0 -0
  100. /package/dist/{chunk-TMEII7BM.mjs.map → chunk-YV3UGLQ3.mjs.map} +0 -0
  101. /package/dist/{methods-43RQLLWD.mjs.map → methods-27JU6IH7.mjs.map} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/home/emems/.t3/worktrees/bitsnap-react-panel-key/dist/chunk-FPCMLZFM.js","../src/components/checkout/BitsnapCart.tsx","../src/components/checkout/CartComponent.tsx","../src/components/checkout/appearance.ts","../src/components/checkout/appearance.context.tsx","../src/components/checkout/CartComponentContent.tsx","../src/ui/select.tsx","../src/components/checkout/CountrySelector.tsx"],"names":["CHECKOUT_SLOT_NAMES","CHECKOUT_TOKEN_VARIABLES","CHECKOUT_THEME_PRESETS","CHECKOUT_SHADCN_VARIABLES","resolveDropdownStyle","tokens","resolveCheckoutAppearance","appearance","resolved","resolveAppearanceCore","getCheckoutSlotAppearance","slot","getSlotAppearance","CheckoutAppearanceContext","createContext","CheckoutAppearanceProvider","children","useMemo","jsx","useCheckoutAppearance","useContext","useCheckoutSlot","Select","props","SelectValue","selectTriggerThemeClasses","SelectTrigger","className","size","theme","jsxs","cn","ChevronDownIcon","SelectContent","position","align","SelectScrollUpButton","SelectScrollDownButton","SelectItem","CheckIcon","ChevronUpIcon","CountrySelector","id","open","disabled","onToggle","onChange","selectedValue","countries","query","setQuery","useState","isCustomized","boundaryClassName","boundaryStyle","dropdownStyle","countryTrigger","countryDropdown","countrySearch","countryOption","searchCountryText","useCheckoutText","noCountriesFoundText","useEffect","filteredCountries","country","selectedCountry","el","value","isOpen","e"],"mappings":"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","file":"/home/emems/.t3/worktrees/bitsnap-react-panel-key/dist/chunk-FPCMLZFM.js","sourcesContent":[null,"import { useEffect, useId, useRef } from \"react\";\nimport zod from \"zod\";\nimport {\n InstrumentProvider,\n useCartInstrument,\n useInstrument,\n type AnalyticsOption,\n} from \"@/src/analytics/instrument\";\nimport type { CheckoutAppearance } from \"./appearance\";\nimport type { CheckoutTexts } from \"./texts\";\nimport CartComponent from \"./CartComponent\";\nimport { getCheckoutMethods, getProjectID, setProjectID } from \"./CartProvider\";\nimport { sendAnalyticEvent } from \"./frontent.analytics\";\nimport { isErr } from \"./lib/err\";\nimport { useCheckoutStore } from \"./state\";\nimport { getLocale, setLocale } from \"./locale\";\nimport { getCheckoutText, type CheckoutTextKey } from \"./texts\";\n\nenum CartEvent {\n ADD_TO_CART = \"ADD_TO_CART\",\n}\n\nconst cartAddToCartSchema = zod.object({\n id: zod.string(),\n isSubscription: zod.boolean().default(false),\n quantity: zod.number(),\n metadata: zod.record(zod.string(), zod.string().optional()).optional(),\n url: zod.string().optional(),\n});\n\ntype CartAddToCartEvent = zod.infer<typeof cartAddToCartSchema>;\n\nexport type BitsnapCartProps = {\n projectID: string;\n locale?: string;\n children?: React.ReactNode;\n onVisibleChange?: (isVisible: boolean) => void;\n className?: string;\n numberOfProductsInCartOptions?: {\n style?: React.CSSProperties;\n isVisible?: boolean;\n };\n /**\n * Optional checkout appearance. Omitting it (or passing `{}`) keeps the\n * current presentation; every token and element slot is partial.\n */\n appearance?: CheckoutAppearance;\n /**\n * Optional text overrides. Any key given here replaces the built-in string\n * whatever the locale; omitted keys keep the `pl`/`en` defaults.\n */\n texts?: Partial<CheckoutTexts>;\n /**\n * Usage statistics for your Bitsnap dashboard (cart opened, checkout\n * started, add to cart). On by default; `false` turns it off. An object\n * lets you forward every event: `{ onEvent }`. Nothing is stored on the\n * visitor's device.\n */\n analytics?: AnalyticsOption;\n};\n\nconst visuallyHidden: React.CSSProperties = {\n position: \"absolute\",\n width: 1,\n height: 1,\n margin: -1,\n padding: 0,\n overflow: \"hidden\",\n clip: \"rect(0, 0, 0, 0)\",\n whiteSpace: \"nowrap\",\n border: 0,\n};\n\nfunction BitsnapCart({\n projectID,\n locale,\n children,\n onVisibleChange,\n className,\n numberOfProductsInCartOptions,\n appearance,\n texts,\n analytics,\n}: BitsnapCartProps) {\n const instrument = useInstrument(projectID, analytics, \"cart\");\n // Cart changes made outside of components (`Bitsnap.addProductToCart`) are reported here.\n useCartInstrument(instrument);\n const { isCartVisible, showCart, hideCart, numberOfProductsInCart } =\n useCheckoutStore();\n const panelId = `bitsnap-cart-${useId()}`;\n const text = (key: CheckoutTextKey) =>\n getCheckoutText(key, locale ?? getLocale(), texts);\n // The `window.cart` handlers are created once and must read the latest props.\n const textRef = useRef(text);\n textRef.current = text;\n\n /** Shows a message through the error area of the cart drawer. */\n function showCartNotice(key: CheckoutTextKey) {\n useCheckoutStore.getState().setNotice(textRef.current(key));\n showCart();\n }\n\n function sentPostMessageToIframe(msg: unknown) {\n const iframes = document.querySelectorAll(\"iframe\");\n\n iframes.forEach((iframe) => {\n iframe.contentWindow?.postMessage(msg, \"*\");\n });\n }\n\n useEffect(() => {\n onVisibleChange?.(isCartVisible);\n if (isCartVisible) {\n sendAnalyticEvent({\n event: \"viewCart\",\n });\n }\n }, [isCartVisible]);\n\n useEffect(() => {\n setProjectID(projectID);\n }, [projectID]);\n\n useEffect(() => {\n setLocale(locale);\n }, [locale]);\n\n useEffect(() => {\n if (!(\"cart\" in window)) {\n const projectID = getProjectID();\n if (projectID == null) {\n console.warn(\"There is no project ID configured.\");\n return;\n }\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-expect-error\n window[\"cart\"] = {\n buyProduct: async (args: unknown) => {\n try {\n const payload = zod\n .object({\n productID: zod.string(),\n email: zod.string().optional(),\n name: zod.string().optional(),\n country: zod.string().optional(),\n marketingAgreement: zod.boolean().optional(),\n locale: zod.string().optional(),\n })\n .parse(args);\n const methods = getCheckoutMethods(projectID);\n try {\n const products = await methods.getProducts();\n if (isErr(products) == false) {\n sendAnalyticEvent({\n event: \"initiateCheckout\",\n items: products.map((el) => ({\n id: el.productID,\n name: el.details?.name ?? \"\",\n price: el.details?.price ?? 0,\n quantity: el.quantity,\n currency: el.details?.currency ?? \"PLN\",\n })),\n });\n }\n } catch (e) {}\n\n const result = await methods.justRedirectToPayment(payload);\n\n if (isErr(result) == false) {\n window.location.href = result.url;\n } else {\n showCartNotice(\"redirectFailed\");\n }\n } catch (e) {\n console.warn(e);\n }\n },\n };\n }\n }, []);\n\n async function handleAddingToCart(id: string, payload?: unknown) {\n const projectID = getProjectID();\n if (projectID == null) {\n console.warn(\"There is no project ID configured.\");\n return;\n }\n\n try {\n const data = cartAddToCartSchema.parse(payload);\n\n if (data.isSubscription) {\n await handleAddingSubscriptionToCart(projectID, data);\n return;\n }\n\n const methods = getCheckoutMethods(projectID);\n\n await methods.addProduct({\n productID: data.id,\n quantity: data.quantity,\n metadata: data.metadata,\n url: data.url,\n });\n\n sentPostMessageToIframe({\n id: id,\n type: CartEvent.ADD_TO_CART,\n success: true,\n });\n showCart();\n } catch (e) {\n console.warn(\"cannot add item to cart\", e);\n }\n }\n\n async function handleAddingSubscriptionToCart(\n projectID: string,\n event: CartAddToCartEvent,\n ) {\n console.warn(\n \"subscriptions cannot be added to the cart yet\",\n projectID,\n event.id,\n );\n showCartNotice(\"subscriptionUnsupported\");\n }\n\n function setupEventListener() {\n if (\"__cart_is_listening\" in window) {\n return;\n }\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-expect-error\n window[\"__cart_is_listening\"] = true;\n window.addEventListener(\"message\", (event) => {\n if (\n typeof event.data[\"id\"] != \"undefined\" &&\n typeof event.data[\"type\"] != \"undefined\"\n ) {\n const { id, type } = event.data;\n switch (type) {\n case CartEvent.ADD_TO_CART.toString():\n handleAddingToCart(id, event.data[\"payload\"]).then().catch();\n break;\n default:\n break;\n }\n }\n });\n }\n\n useEffect(() => {\n setupEventListener();\n\n if (typeof window !== \"undefined\") {\n try {\n const parsedParams = new URLSearchParams(window.location.search);\n const refLink =\n parsedParams.get(\"ref\") ?? parsedParams.get(\"utm-source\");\n if (\n typeof localStorage != \"undefined\" &&\n refLink &&\n refLink.length > 0\n ) {\n localStorage.setItem(\"bitsnap-ref\", refLink);\n }\n } catch (e) {\n return;\n }\n }\n }, []);\n\n return (\n <>\n <button\n type=\"button\"\n onClick={() => (isCartVisible ? hideCart() : showCart())}\n aria-label={\n children\n ? undefined\n : numberOfProductsInCart > 0\n ? `${text(\"openCart\")}. ${text(\"cartItemsCount\")}: ${numberOfProductsInCart}`\n : text(\"openCart\")\n }\n aria-expanded={isCartVisible}\n aria-haspopup=\"dialog\"\n aria-controls={isCartVisible ? panelId : undefined}\n style={{ position: \"relative\" }}\n className={[\n \"bitsnap-react\",\n className ?? \"rounded-full hover:bg-neutral-300 transition p-1\",\n ].join(\" \")}\n >\n {children ? (\n <>{children}</>\n ) : (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"lucide lucide-shopping-cart\"\n aria-hidden=\"true\"\n focusable=\"false\"\n >\n <circle cx=\"8\" cy=\"21\" r=\"1\" />\n <circle cx=\"19\" cy=\"21\" r=\"1\" />\n <path d=\"M2.05 2.05h2l2.66 12.42a2 2 0 0 0 2 1.58h9.78a2 2 0 0 0 1.95-1.57l1.65-7.43H5.12\" />\n </svg>\n )}\n {numberOfProductsInCart > 0 && (\n <span style={visuallyHidden}>\n {text(\"cartItemsCount\")}: {numberOfProductsInCart}\n </span>\n )}\n {numberOfProductsInCartOptions?.isVisible != false &&\n numberOfProductsInCart > 0 && (\n <div\n aria-hidden=\"true\"\n style={{\n position: \"absolute\",\n bottom: -5,\n right: -5,\n background: \"black\",\n color: \"white\",\n borderRadius: \"50%\",\n width: \"22px\",\n height: \"22px\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n fontSize: \"13px\",\n fontWeight: 600,\n boxShadow: \"0 2px 8px rgba(0, 0, 0, 0.25)\",\n ...numberOfProductsInCartOptions?.style,\n }}\n >\n {numberOfProductsInCart}\n </div>\n )}\n </button>\n <InstrumentProvider value={instrument}>\n <CartComponent\n isVisible={isCartVisible}\n locale={locale}\n appearance={appearance}\n texts={texts}\n panelId={panelId}\n shouldHide={() => {\n hideCart();\n }}\n />\n </InstrumentProvider>\n </>\n );\n}\n\nexport default BitsnapCart;\n","import { useAutoAnimate } from \"@formkit/auto-animate/react\";\nimport * as Dialog from \"@radix-ui/react-dialog\";\nimport { useCallback, useRef, useState } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { cn } from \"@/src/lib/utils\";\nimport {\n CheckoutAppearanceProvider,\n useCheckoutAppearance,\n useCheckoutSlot,\n} from \"./appearance.context\";\nimport type { CheckoutAppearance } from \"./appearance\";\nimport CartComponentContent from \"./CartComponentContent\";\nimport CartProvider from \"./CartProvider\";\nimport { CheckoutTextsProvider, useCheckoutText } from \"./texts.context\";\nimport type { CheckoutTexts } from \"./texts\";\n\ninterface Props {\n isVisible: boolean;\n shouldHide: () => void;\n locale?: string;\n appearance?: CheckoutAppearance;\n texts?: Partial<CheckoutTexts>;\n /** DOM id of the panel, for `aria-controls` of the button that opens it. */\n panelId?: string;\n}\n\nfunction CartComponent({ isVisible, shouldHide, panelId, locale }: Props) {\n const [parent] = useAutoAnimate(/* optional config */);\n // The drawer renders inside the checkout root: the stylesheet is scoped to `.bitsnap-react`.\n const [rootElement, setRootElement] = useState<HTMLDivElement | null>(null);\n const rootRef = useCallback(\n (element: HTMLDivElement | null) => {\n parent(element);\n setRootElement(element);\n },\n [parent],\n );\n // The trigger lives outside of the dialog, so Radix does not know which element to give the focus back to.\n const returnFocusTo = useRef<HTMLElement | null>(null);\n const { boundaryClassName, boundaryStyle } = useCheckoutAppearance();\n const root = useCheckoutSlot(\"root\");\n const overlay = useCheckoutSlot(\"overlay\");\n const panel = useCheckoutSlot(\"panel\");\n const header = useCheckoutSlot(\"header\");\n const title = useCheckoutSlot(\"title\");\n const closeButton = useCheckoutSlot(\"closeButton\");\n const cartText = useCheckoutText(\"cart\");\n const closeText = useCheckoutText(\"close\");\n\n return (\n <div\n ref={rootRef}\n data-bitsnap-checkout=\"root\"\n data-bitsnap-checkout-slot=\"root\"\n className={cn(\"bitsnap-react\", boundaryClassName, root.className)}\n style={{ zIndex: 999999, ...boundaryStyle, ...root.style }}\n >\n {rootElement != null && (\n <Dialog.Root\n open={isVisible}\n onOpenChange={(open) => {\n if (!open) {\n shouldHide();\n }\n }}\n >\n <Dialog.Portal container={rootElement}>\n <Dialog.Overlay\n data-bitsnap-checkout-slot=\"overlay\"\n aria-hidden=\"true\"\n className={cn(\n \"fixed top-0 right-0 left-0 bottom-0 cursor-pointer z-10\",\n overlay.className,\n )}\n style={overlay.style}\n onClick={shouldHide}\n />\n <Dialog.Content\n id={panelId}\n data-bitsnap-checkout-slot=\"panel\"\n aria-modal=\"true\"\n aria-describedby={undefined}\n onOpenAutoFocus={() => {\n const active = document.activeElement;\n returnFocusTo.current = active instanceof HTMLElement ? active : null;\n }}\n onCloseAutoFocus={(event) => {\n event.preventDefault();\n returnFocusTo.current?.focus();\n returnFocusTo.current = null;\n }}\n className={cn(\n // Scrolls when the summary and the payment choice do not fit (small phones).\n \"fixed z-20 top-0 right-0 bottom-0 w-full md:w-[350px] xl:w-[420px] flex flex-col overflow-y-auto\",\n panel.className,\n )}\n style={panel.style}\n // The overlay closes the drawer on click; a close on pointer down would let the click through.\n onPointerDownOutside={(event) => event.preventDefault()}\n >\n <div\n data-bitsnap-checkout-slot=\"header\"\n className={cn(\n \"mx-3 mt-7 flex justify-between items-center\",\n header.className,\n )}\n style={header.style}\n >\n <Dialog.Title asChild>\n <h1\n data-bitsnap-checkout-slot=\"title\"\n className={cn(\"text-2xl font-medium\", title.className)}\n style={title.style}\n >\n {cartText}\n </h1>\n </Dialog.Title>\n <button\n type=\"button\"\n data-bitsnap-checkout-slot=\"closeButton\"\n className={cn(\n \"rounded-xl p-2 transition\",\n closeButton.className,\n )}\n style={closeButton.style}\n aria-label={closeText}\n onClick={shouldHide}\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"lucide lucide-x\"\n aria-hidden=\"true\"\n focusable=\"false\"\n >\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\n </svg>\n </button>\n </div>\n\n <CartComponentContent className={\"grow\"} locale={locale} />\n </Dialog.Content>\n </Dialog.Portal>\n </Dialog.Root>\n )}\n </div>\n );\n}\n\nconst WrapperCartComponent = (props: Props) => {\n if (typeof window === \"undefined\") {\n return null;\n }\n\n return createPortal(\n <CheckoutAppearanceProvider appearance={props.appearance}>\n <CheckoutTextsProvider texts={props.texts} locale={props.locale}>\n <CartProvider locale={props.locale}>\n <CartComponent {...props} />\n </CartProvider>\n </CheckoutTextsProvider>\n </CheckoutAppearanceProvider>,\n document.body,\n );\n};\n\nexport default WrapperCartComponent;\n","import type { CSSProperties } from \"react\";\nimport {\n getSlotAppearance,\n resolveAppearanceCore,\n type AppearanceElements,\n type ShadcnVariableMapping,\n type SlotAppearance,\n} from \"@/src/lib/appearance-core\";\n\n/**\n * Checkout appearance API.\n *\n * `CheckoutAppearance` is resolved once per render into plain data: a theme\n * name, the tokens that are actually in effect, the per-slot overrides and the\n * inline style that both theme boundaries (the drawer root and the portalled\n * country dropdown) have to receive. Everything here is pure so it can be\n * tested without a DOM.\n *\n * Backward compatibility: the resolver never invents values. A token is only\n * present in the resolved output when the caller provided it or when the\n * caller explicitly selected a theme preset, so every unset token keeps falling\n * back to the value the checkout renders today (see `checkout.css`).\n */\n\nexport type CheckoutTheme = \"dark\" | \"light\";\n\nexport type CheckoutAppearanceTokens = {\n /** Checkout wide font family. The library never loads fonts. */\n fontFamily?: string;\n /** Base font size of the checkout. */\n fontSize?: string;\n /** Panel background. */\n background?: string;\n /** Raised surfaces: country dropdown, search bar, loading skeletons. */\n surface?: string;\n /** Main text color. */\n foreground?: string;\n /** Secondary text: empty cart, delivery info, country label, search input. */\n mutedForeground?: string;\n /** Borders: country trigger, dropdown, product separators. */\n border?: string;\n /** Checkout button background. */\n buttonBackground?: string;\n /** Checkout button text. */\n buttonForeground?: string;\n /** Checkout button background on hover. */\n buttonHoverBackground?: string;\n /** Hover and selected surfaces: close button, country options. */\n hoverSurface?: string;\n /** Focus ring color. Also applied to shared UI primitives through `--ring`. */\n focusRing?: string;\n /** Error and unavailable state color. */\n error?: string;\n /** Drawer backdrop color. */\n overlay?: string;\n /** Corner radius, applied through `--radius`. */\n radius?: string;\n};\n\n/**\n * Stable slot names. They are exposed as `data-bitsnap-checkout-slot`\n * attributes so they can also be targeted from plain CSS.\n */\nexport const CHECKOUT_SLOT_NAMES = [\n \"root\",\n \"overlay\",\n \"panel\",\n \"header\",\n \"title\",\n \"closeButton\",\n \"productList\",\n \"product\",\n \"productImage\",\n \"productName\",\n \"productPrice\",\n \"quantityControl\",\n \"quantityInput\",\n \"quantityButton\",\n \"removeButton\",\n \"summary\",\n \"totalLabel\",\n \"totalValue\",\n \"deliveryText\",\n \"summaryNote\",\n \"countryLabel\",\n \"countryTrigger\",\n \"countryDropdown\",\n \"countrySearch\",\n \"countryOption\",\n \"paymentButtons\",\n \"paymentMethods\",\n \"paymentMethodOption\",\n \"checkoutButton\",\n \"emptyState\",\n \"error\",\n \"skeleton\",\n] as const;\n\nexport type CheckoutSlotName = (typeof CHECKOUT_SLOT_NAMES)[number];\n\nexport type CheckoutSlotAppearance = SlotAppearance;\n\nexport type CheckoutAppearanceElements = AppearanceElements<CheckoutSlotName>;\n\nexport type CheckoutAppearance = {\n /**\n * `\"dark\"` keeps the current presentation, `\"light\"` applies the light preset.\n * Omitted means `\"dark\"`.\n */\n theme?: CheckoutTheme;\n /** Partial overrides. Anything omitted keeps today's value. */\n tokens?: CheckoutAppearanceTokens;\n /** Per element `className`/`style` overrides. */\n elements?: CheckoutAppearanceElements;\n};\n\nexport type ResolvedCheckoutAppearance = {\n theme: CheckoutTheme;\n /**\n * `true` as soon as the caller passed anything through `appearance`. The\n * country dropdown is portalled outside of the checkout root, so it only\n * receives the checkout boundary when the caller opted in - an omitted or\n * empty `appearance` keeps the previous (unthemed) dropdown untouched.\n */\n isCustomized: boolean;\n /** Tokens that are in effect. Empty entries were dropped. */\n tokens: CheckoutAppearanceTokens;\n elements: CheckoutAppearanceElements;\n /** Theme marker class for the theme boundaries. */\n boundaryClassName: string;\n /** Inline custom properties applied to the drawer root. */\n boundaryStyle: CSSProperties;\n /**\n * Extra properties for the portalled country dropdown. The shared select\n * content paints itself with `bg-popover`/`text-popover-foreground`, so those\n * variables have to carry the checkout colors over to the portal. They are\n * resolved eagerly because the dropdown is the only place where the built-in\n * defaults differ from the drawer.\n */\n dropdownStyle: CSSProperties;\n};\n\n/** CSS custom property used for each token. */\nexport const CHECKOUT_TOKEN_VARIABLES = {\n fontFamily: \"--bitsnap-checkout-font-family\",\n fontSize: \"--bitsnap-checkout-font-size\",\n background: \"--bitsnap-checkout-background\",\n surface: \"--bitsnap-checkout-surface\",\n foreground: \"--bitsnap-checkout-foreground\",\n mutedForeground: \"--bitsnap-checkout-muted-foreground\",\n border: \"--bitsnap-checkout-border\",\n buttonBackground: \"--bitsnap-checkout-button-background\",\n buttonForeground: \"--bitsnap-checkout-button-foreground\",\n buttonHoverBackground: \"--bitsnap-checkout-button-hover-background\",\n hoverSurface: \"--bitsnap-checkout-hover-surface\",\n focusRing: \"--bitsnap-checkout-focus-ring\",\n error: \"--bitsnap-checkout-error\",\n overlay: \"--bitsnap-checkout-overlay\",\n radius: \"--bitsnap-checkout-radius\",\n} as const;\n\nexport type CheckoutTokenName = keyof typeof CHECKOUT_TOKEN_VARIABLES;\n\n/**\n * Theme presets are intentionally partial. `\"dark\"` is empty because every\n * default already renders the current dark presentation; `\"light\"` only carries\n * the colors that have to change for a light checkout, so typography is never\n * reset implicitly.\n */\nexport const CHECKOUT_THEME_PRESETS: Record<\n CheckoutTheme,\n CheckoutAppearanceTokens\n> = {\n dark: {},\n light: {\n background: \"#ffffff\",\n surface: \"#f9fafb\",\n foreground: \"#18181b\",\n mutedForeground: \"#71717a\",\n border: \"#e4e4e7\",\n buttonBackground: \"#18181b\",\n buttonForeground: \"#fafafa\",\n buttonHoverBackground: \"#000000\",\n hoverSurface: \"#e4e4e7\",\n focusRing: \"#71717a\",\n error: \"#dc2626\",\n overlay: \"rgb(0 0 0 / 0.35)\",\n },\n};\n\n/**\n * Some shared UI primitives (`Button`, `SelectTrigger`, ...) read the shadcn\n * theme variables instead of checkout tokens. Those are remapped so a themed\n * dropdown and themed primitives stay consistent. They are only written when\n * the matching token is in effect, so untouched tokens change nothing.\n */\nconst CHECKOUT_SHADCN_VARIABLES: ShadcnVariableMapping<CheckoutTokenName> = [\n { token: \"background\", variable: \"--background\" },\n { token: \"foreground\", variable: \"--foreground\" },\n { token: \"surface\", variable: \"--card\" },\n { token: \"surface\", variable: \"--popover\" },\n { token: \"foreground\", variable: \"--popover-foreground\" },\n { token: \"mutedForeground\", variable: \"--muted-foreground\" },\n { token: \"border\", variable: \"--border\" },\n { token: \"border\", variable: \"--input\" },\n { token: \"focusRing\", variable: \"--ring\" },\n { token: \"error\", variable: \"--destructive\" },\n { token: \"radius\", variable: \"--radius\" },\n];\n\n/**\n * The portalled dropdown renders `bg-popover`/`text-popover-foreground` from the\n * shared primitives, so those two variables are resolved eagerly: without a\n * token they fall back to the dark values the checkout has always used.\n */\nfunction resolveDropdownStyle(tokens: CheckoutAppearanceTokens): CSSProperties {\n return {\n \"--popover\": tokens.surface ?? \"var(--color-neutral-800)\",\n \"--popover-foreground\": tokens.foreground ?? \"var(--color-neutral-200)\",\n } as CSSProperties;\n}\n\nexport function resolveCheckoutAppearance(\n appearance?: CheckoutAppearance,\n): ResolvedCheckoutAppearance {\n const resolved = resolveAppearanceCore<\n CheckoutTokenName,\n CheckoutTheme,\n CheckoutSlotName\n >(appearance, {\n defaultTheme: \"dark\",\n presets: CHECKOUT_THEME_PRESETS,\n variables: CHECKOUT_TOKEN_VARIABLES,\n shadcnVariables: CHECKOUT_SHADCN_VARIABLES,\n });\n\n return {\n theme: resolved.theme,\n isCustomized: resolved.isCustomized,\n tokens: resolved.tokens,\n elements: resolved.elements,\n boundaryClassName: resolved.theme,\n boundaryStyle: resolved.boundaryStyle,\n dropdownStyle: resolveDropdownStyle(resolved.tokens),\n };\n}\n\n/** Caller overrides for a single slot, if any were provided. */\nexport function getCheckoutSlotAppearance(\n resolved: ResolvedCheckoutAppearance,\n slot: CheckoutSlotName,\n): CheckoutSlotAppearance | undefined {\n return getSlotAppearance(resolved.elements, slot);\n}\n","import { createContext, useContext, useMemo } from \"react\";\nimport type { ReactNode } from \"react\";\nimport {\n getCheckoutSlotAppearance,\n resolveCheckoutAppearance,\n type CheckoutAppearance,\n type CheckoutSlotAppearance,\n type CheckoutSlotName,\n type ResolvedCheckoutAppearance,\n} from \"./appearance\";\n\nconst CheckoutAppearanceContext = createContext<ResolvedCheckoutAppearance>(\n resolveCheckoutAppearance(),\n);\n\n/**\n * Checkout scoped appearance provider. It only wraps the checkout drawer, so\n * the configuration never leaks into the panel, the notifications or any\n * global state.\n */\nexport function CheckoutAppearanceProvider({\n appearance,\n children,\n}: {\n appearance?: CheckoutAppearance;\n children: ReactNode;\n}) {\n const resolved = useMemo(\n () => resolveCheckoutAppearance(appearance),\n [appearance],\n );\n\n return (\n <CheckoutAppearanceContext.Provider value={resolved}>\n {children}\n </CheckoutAppearanceContext.Provider>\n );\n}\n\nexport function useCheckoutAppearance(): ResolvedCheckoutAppearance {\n return useContext(CheckoutAppearanceContext);\n}\n\n/**\n * Returns the caller overrides for a slot. The values are meant to be merged\n * with the built-in presentation:\n *\n * ```tsx\n * const slot = useCheckoutSlot(\"title\");\n *\n * return <h1 className={cn(\"text-2xl font-medium\", slot.className)} style={slot.style} />;\n * ```\n */\nexport function useCheckoutSlot(\n slot: CheckoutSlotName,\n): CheckoutSlotAppearance {\n const resolved = useCheckoutAppearance();\n\n return getCheckoutSlotAppearance(resolved, slot) ?? {};\n}\n","import { useAutoAnimate } from \"@formkit/auto-animate/react\";\nimport React from \"react\";\nimport { useInstrumentContext } from \"@/src/analytics/instrument\";\nimport { getCartLines, getProjectID, useCartProvider } from \"./CartProvider\";\nimport CountrySelector from \"./CountrySelector\";\nimport { isErr } from \"./lib/err\";\nimport { formatCurrency } from \"./lib/round.number\";\nimport LoadingIndicator from \"./LoadingIndicator\";\nimport SingleProduct from \"./SingleProduct\";\nimport { Skeleton } from \"./Skeleton\";\nimport { ApplePayButton, GooglePayButton } from \"..\";\nimport { Spinner } from \"@/src/ui/spinner\";\nimport { useMutation, useQuery, useQueryClient } from \"@tanstack/react-query\";\nimport { cn } from \"@/src/lib/utils\";\nimport { sendAnalyticEvent } from \"./frontent.analytics\";\nimport { getLocale } from \"./locale\";\nimport { buyErrorText } from \"./buy-error\";\nimport { useCheckoutText, useCheckoutTextResolver } from \"./texts.context\";\nimport { useCheckoutSlot } from \"./appearance.context\";\nimport { rememberPendingOrder } from \"./pending-order\";\nimport { useCheckoutStore } from \"./state\";\nimport { PaymentMethodChoice } from \"./PaymentMethodChoice\";\nimport {\n effectivePaymentMethod,\n withoutCod,\n type PaymentMethod,\n type PaymentMethodChoice as Choice,\n} from \"./payment-method\";\nimport { InPostPayButtonInner } from \"../express/InPostPayButton\";\nimport { RevolutPayButtonInner } from \"../express/RevolutPayButton\";\n\nconst CartComponentContent = ({\n className,\n locale,\n}: {\n className: string;\n locale?: string;\n}) => {\n const provider = useCartProvider();\n const instrument = useInstrumentContext();\n const currentLocale = locale ?? getLocale();\n\n const productList = useCheckoutSlot(\"productList\");\n const summary = useCheckoutSlot(\"summary\");\n const totalLabel = useCheckoutSlot(\"totalLabel\");\n const totalValue = useCheckoutSlot(\"totalValue\");\n const deliveryText = useCheckoutSlot(\"deliveryText\");\n const summaryNote = useCheckoutSlot(\"summaryNote\");\n const countryLabel = useCheckoutSlot(\"countryLabel\");\n const paymentButtons = useCheckoutSlot(\"paymentButtons\");\n const checkoutButton = useCheckoutSlot(\"checkoutButton\");\n const emptyState = useCheckoutSlot(\"emptyState\");\n const error = useCheckoutSlot(\"error\");\n const skeleton = useCheckoutSlot(\"skeleton\");\n\n const unavailableProductsText = useCheckoutText(\"unavailableProducts\");\n const resolveCheckoutText = useCheckoutTextResolver();\n const emptyCartText = useCheckoutText(\"emptyCart\");\n const totalText = useCheckoutText(\"total\");\n const deliveryCopy = useCheckoutText(\"delivery\");\n const chooseCountryText = useCheckoutText(\"chooseCountry\");\n const nextStepText = useCheckoutText(\"nextStep\");\n const loadFailedText = useCheckoutText(\"loadFailed\");\n const retryText = useCheckoutText(\"retry\");\n const countryRequiredText = useCheckoutText(\"countryRequired\");\n const extrasCalculatedNextText = useCheckoutText(\"extrasCalculatedNext\");\n const countrySelectorId = React.useId();\n const countryHintId = React.useId();\n\n const { mutateAsync: removeProduct } = useMutation({\n mutationFn: provider.removeProductFromCart,\n });\n const { mutateAsync: updateQuantity } = useMutation({\n mutationFn: provider.updateQuantity,\n });\n const { mutateAsync: setCountryAsync } = useMutation({\n mutationFn: provider.setCountry,\n });\n const { mutateAsync: clearCart } = useMutation({\n mutationFn: provider.clearCart,\n });\n\n const [errMsg, setErrMsg] = React.useState(\"\");\n // Raised outside of the drawer (for example a failed redirect of `window.cart.buyProduct`).\n const notice = useCheckoutStore((state) => state.notice);\n React.useEffect(\n () => () => useCheckoutStore.getState().setNotice(undefined),\n [],\n );\n const shownError = errMsg.length > 0 ? errMsg : (notice ?? \"\");\n const [missingItemIds, setMissingItemIds] = React.useState<string[]>([]);\n\n const [isCountryOpen, setIsCountryOpen] = React.useState(false);\n\n const {\n mutateAsync: continueToCheckoutAsync,\n isPending: isContinueToCheckoutLoading,\n } = useMutation({\n mutationFn: provider.redirectToNextStep,\n });\n\n const { data: availableCountries } = useQuery({\n queryKey: [\"cart-available-countries\"],\n queryFn: provider.getAvailableCountries,\n });\n const { data: isApplePayAvailable } = useQuery({\n queryKey: [\"cart-one-click-payment\"],\n queryFn: provider.checkIfApplePayIsAvailable,\n });\n const { data, isLoading, isError, refetch } = useQuery({\n queryKey: [\"cart\", currentLocale],\n queryFn: provider.getProducts,\n });\n const { data: countryData, refetch: refetchCountry } = useQuery({\n queryKey: [\"cart-country\"],\n queryFn: provider.getCountry,\n });\n\n const [productsParent] = useAutoAnimate(/* optional config */);\n\n const products = isErr(data) ? undefined : data;\n\n const selectedCountry =\n countryData != null && !isErr(countryData) && countryData != \"\"\n ? countryData\n : undefined;\n\n // Whether the shop lets the buyer pay by hand (transfer / BLIK to a phone)\n // or on delivery for this cart. Asked once per cart content and country\n // (cash on delivery is for Poland only); any failure means \"no choice\".\n // Without a country \"Next step\" is disabled, so there is nothing to ask yet.\n // Until a new country or cart is answered, the last choice stays on screen\n // without cash on delivery, which the new answer may not offer.\n const queryClient = useQueryClient();\n const cartSignature =\n products == null || products.length === 0 || selectedCountry == null\n ? undefined\n : products\n .map((el) => `${el.productID}:${el.quantity}`)\n .sort()\n .join(\",\");\n const paymentMethodsQuery = {\n queryKey: [\n \"cart-payment-methods\",\n getProjectID(),\n currentLocale,\n selectedCountry,\n cartSignature,\n ],\n queryFn: async (): Promise<Choice | null> =>\n provider.getPaymentMethodChoice().catch(() => null),\n staleTime: 60_000,\n retry: false,\n } as const;\n const {\n data: paymentMethodChoiceData,\n isPlaceholderData: isPaymentMethodChoicePlaceholder,\n } = useQuery({\n ...paymentMethodsQuery,\n enabled: cartSignature != null,\n placeholderData: (previous: Choice | null | undefined) =>\n previous === undefined ? undefined : withoutCod(previous),\n });\n const paymentMethodChoice =\n cartSignature != null ? (paymentMethodChoiceData ?? null) : null;\n const [selectedPaymentMethod, setSelectedPaymentMethod] = React.useState<\n PaymentMethod | undefined\n >(undefined);\n const [isWaitingForChoice, setIsWaitingForChoice] = React.useState(false);\n const paymentMethodsRef = React.useRef<HTMLDivElement>(null);\n const hasLoadFailed = !isLoading && (isError || isErr(data));\n\n const countries = isErr(availableCountries) ? [] : availableCountries;\n\n const sumOfProducts =\n products?.reduce((prev, curr) => {\n if (curr.details == null) {\n return prev;\n }\n return prev + (curr.details.pricing?.effectivePrice ?? curr.details.price) * curr.quantity;\n }, 0) ?? 0;\n const currency = products?.[0]?.details?.currency ?? \"PLN\";\n\n const isSomeProductDeliverable =\n products?.some((product) => product.details?.isDeliverable === true) ??\n false;\n\n // The hint waits for the answer: the country is read asynchronously.\n const isCountryMissing = countryData !== undefined && selectedCountry == null;\n\n // A stored country the shop does not ship to (or none at all) would leave the checkout button disabled.\n const autoSelectedCountry = React.useRef(false);\n React.useEffect(() => {\n if (\n autoSelectedCountry.current ||\n countries == null ||\n countries.length === 0 ||\n countryData == null ||\n (selectedCountry != null &&\n countries.some((el) => el.code === selectedCountry))\n ) {\n return;\n }\n autoSelectedCountry.current = true;\n setCountryAsync(countries[0].code)\n .then(() => refetchCountry())\n .catch(() => {});\n }, [countries, countryData, selectedCountry]);\n\n // One `cart_opened` per opening of the drawer, once the cart is loaded.\n const opened = React.useRef(false);\n React.useEffect(() => {\n if (opened.current || isLoading) {\n return;\n }\n opened.current = true;\n instrument.track(\"cart_opened\", {\n item_count: products?.reduce((sum, el) => sum + el.quantity, 0) ?? 0,\n value_minor: sumOfProducts,\n currency,\n });\n }, [isLoading, instrument, products, sumOfProducts, currency]);\n\n const reportedQuantity = React.useRef(new Map<string, number>());\n React.useEffect(() => {\n reportedQuantity.current.clear();\n }, [products]);\n\n /** `add_to_cart` / `remove_from_cart` for a quantity change in the drawer. */\n function trackQuantityChange(id: string, newQuantity: number) {\n const line = products?.find((el) => el.id === id);\n if (line?.details == null) {\n return;\n }\n // Quick clicks arrive before the cart is reloaded: count from the last reported quantity.\n const delta = newQuantity - (reportedQuantity.current.get(id) ?? line.quantity);\n reportedQuantity.current.set(id, newQuantity);\n if (delta === 0) {\n return;\n }\n const price = line.details.pricing?.effectivePrice ?? line.details.price;\n const productID = line.catalogProductID ?? line.productID;\n instrument.track(\n delta > 0 ? \"add_to_cart\" : \"remove_from_cart\",\n {\n qty: Math.abs(delta),\n value_minor: Math.round(price * Math.abs(delta)),\n currency: line.details.currency,\n },\n {\n product_id: productID,\n variant_id: productID !== line.productID ? line.productID : null,\n },\n );\n }\n\n const startedCheckout = React.useRef(false);\n\n /** Rejects when the cart could not be changed; the cart is reloaded either way. */\n async function shouldUpdate(id: string, newQuantity?: number) {\n if (newQuantity == null) {\n return;\n }\n trackQuantityChange(id, Math.max(0, newQuantity));\n try {\n const result =\n newQuantity <= 0\n ? await removeProduct({ id: id })\n : await updateQuantity({ id: id, quantity: newQuantity });\n if (isErr(result)) {\n throw new Error(`cannot change the cart: ${result.error}`);\n }\n } finally {\n await refetch().catch(() => undefined);\n }\n }\n\n async function continueToCheckout() {\n try {\n setErrMsg(\"\");\n setMissingItemIds([]);\n useCheckoutStore.getState().setNotice(undefined);\n\n // A click before the choice arrived waits for it (at most the request\n // timeout); a choice the buyer has not seen yet is shown, not used. The\n // last choice shown in the meantime is used if the new one still offers\n // the selected method.\n let choice = paymentMethodChoice;\n let paymentMethod =\n choice != null\n ? effectivePaymentMethod(choice, selectedPaymentMethod)\n : undefined;\n if (\n cartSignature != null &&\n (paymentMethodChoiceData === undefined || isPaymentMethodChoicePlaceholder)\n ) {\n setIsWaitingForChoice(true);\n try {\n choice = await queryClient\n .fetchQuery(paymentMethodsQuery)\n .catch(() => null);\n } finally {\n setIsWaitingForChoice(false);\n }\n if (choice == null) {\n paymentMethod = undefined;\n } else if (paymentMethod == null || !choice.methods.includes(paymentMethod)) {\n // Let the buyer see the options first; focus moves to the selected one.\n window.setTimeout(() => {\n paymentMethodsRef.current\n ?.querySelector<HTMLInputElement>(\"input:checked\")\n ?.focus();\n }, 0);\n return;\n }\n }\n\n if (products != null) {\n if (!startedCheckout.current && products.length > 0) {\n startedCheckout.current = true;\n instrument.track(\"checkout_started\", {\n item_count: products.reduce((sum, el) => sum + el.quantity, 0),\n checkout_type: \"cart\",\n value_minor: sumOfProducts,\n currency,\n });\n }\n try {\n sendAnalyticEvent({\n event: \"initiateCheckout\",\n items: products?.map((el) => ({\n id: el.productID,\n name: el.details?.name ?? \"\",\n price: el.details?.price ?? 0,\n quantity: el.quantity,\n currency: el.details?.currency ?? \"PLN\",\n })),\n });\n } catch (e) {}\n }\n\n // What this order is made of; only these lines go once it is paid.\n const cartLinesBeforeBuy = getCartLines();\n const response = await continueToCheckoutAsync(\n paymentMethod != null ? { paymentMethod } : undefined,\n );\n\n if (isErr(response)) {\n // The seller may have changed the payment methods in the meantime.\n void queryClient.invalidateQueries({ queryKey: [\"cart-payment-methods\"] });\n if (response.error == \"item-ids-not-found\") {\n setErrMsg(unavailableProductsText);\n if (\"data\" in response && Array.isArray(response.data)) {\n setMissingItemIds(response.data as string[]);\n }\n } else if (\n paymentMethod === \"cod\" &&\n response.error == \"gateway-not-configured\"\n ) {\n // The shop turned cash on delivery off, or this cart does not qualify.\n setErrMsg(resolveCheckoutText(\"paymentMethodCodUnavailable\"));\n } else {\n setErrMsg(buyErrorText(response, resolveCheckoutText));\n }\n return;\n }\n\n // The cart stays until the order is paid (or placed, for cash on\n // delivery); without an order to ask about it is cleared now.\n if (\n !rememberPendingOrder(response, {\n cartProjectId: getProjectID(),\n lines: cartLinesBeforeBuy,\n })\n ) {\n await clearCart();\n }\n window.location.href = response.url;\n } catch (e: unknown) {\n console.warn(\"checkout failed\", e);\n setErrMsg(resolveCheckoutText(\"checkoutFailed\"));\n }\n }\n\n return (\n <div className={`${className} flex flex-col`} ref={productsParent}>\n {isLoading && (\n <div className={\"relative flex w-full justify-center flex-col gap-4\"}>\n <Skeleton\n data-bitsnap-checkout-slot=\"skeleton\"\n className={cn(\"w-full h-32\", skeleton.className)}\n style={skeleton.style}\n />\n <Skeleton\n data-bitsnap-checkout-slot=\"skeleton\"\n className={cn(\"w-full h-32\", skeleton.className)}\n style={skeleton.style}\n />\n </div>\n )}\n\n {hasLoadFailed && (\n <div className={\"flex flex-col items-start gap-3 p-4\"}>\n <p\n role=\"alert\"\n data-bitsnap-checkout-slot=\"error\"\n className={cn(error.className)}\n style={error.style}\n >\n {loadFailedText}\n </p>\n {notice != null && notice.length > 0 && (\n <p\n role=\"alert\"\n data-bitsnap-checkout-slot=\"error\"\n className={cn(\"text-sm\", error.className)}\n style={error.style}\n >\n {notice}\n </p>\n )}\n <button\n type=\"button\"\n data-bitsnap-checkout-slot=\"checkoutButton\"\n onClick={() => {\n refetch().then().catch();\n }}\n className={cn(\n \"px-3 py-2 rounded-md transition font-bold\",\n checkoutButton.className,\n )}\n style={checkoutButton.style}\n >\n {retryText}\n </button>\n </div>\n )}\n\n {!isLoading && !hasLoadFailed && (products == null || products.length == 0) && (\n <div className={\"flex flex-col gap-4 p-4\"}>\n <p\n data-bitsnap-checkout-slot=\"emptyState\"\n className={cn(emptyState.className)}\n style={emptyState.style}\n >\n {emptyCartText}\n </p>\n {notice != null && notice.length > 0 && (\n <p\n role=\"alert\"\n data-bitsnap-checkout-slot=\"error\"\n className={cn(\"text-sm\", error.className)}\n style={error.style}\n >\n {notice}\n </p>\n )}\n </div>\n )}\n\n <div\n data-bitsnap-checkout-slot=\"productList\"\n className={cn(\n \"max-h-[70vh] overflow-clip overflow-y-scroll\",\n productList.className,\n )}\n style={productList.style}\n >\n {products != null && products.length > 0 && (\n <ul className={\"mt-5\"}>\n {products.map((product) => (\n <React.Fragment key={product.id}>\n {product.details != null && (\n <li className={\"mb-3\"}>\n <SingleProduct\n isNotAvailable={missingItemIds.includes(\n product.productID,\n )}\n quantity={product.quantity}\n details={product.details}\n url={product.url}\n shouldUpdate={(newQuantity) =>\n shouldUpdate(product.id, newQuantity)\n }\n />\n <hr className=\"h-1\" />\n </li>\n )}\n </React.Fragment>\n ))}\n </ul>\n )}\n </div>\n\n <div className=\"grow\"></div>\n\n {sumOfProducts > 0 && currency != null && (\n <>\n <div\n data-bitsnap-checkout-slot=\"summary\"\n className={cn(\"mx-3 flex flex-col\", summary.className)}\n style={summary.style}\n >\n <div className={\"flex flex-row justify-between text-lg\"}>\n <p\n data-bitsnap-checkout-slot=\"totalLabel\"\n className={cn(\"text-xl\", totalLabel.className)}\n style={totalLabel.style}\n >\n {totalText}\n </p>\n <div className={\"flex flex-col items-end\"}>\n <p\n data-bitsnap-checkout-slot=\"totalValue\"\n className={cn(\"font-medium\", totalValue.className)}\n style={totalValue.style}\n >\n {formatCurrency(sumOfProducts, currency)}\n </p>\n {isSomeProductDeliverable && (\n <p\n data-bitsnap-checkout-slot=\"deliveryText\"\n className={cn(\n \"opacity-70 text-right text-base\",\n deliveryText.className,\n )}\n style={deliveryText.style}\n >\n {deliveryCopy}\n </p>\n )}\n </div>\n </div>\n <p\n data-bitsnap-checkout-slot=\"summaryNote\"\n className={cn(\"opacity-70 text-sm\", summaryNote.className)}\n style={summaryNote.style}\n >\n {extrasCalculatedNextText}\n </p>\n </div>\n\n {countries && countries?.length > 1 && (\n <div>\n <h4\n data-bitsnap-checkout-slot=\"countryLabel\"\n className={cn(\"ml-3 text-sm\", countryLabel.className)}\n style={countryLabel.style}\n >\n {chooseCountryText}\n </h4>\n <CountrySelector\n id={countrySelectorId}\n open={isCountryOpen}\n onToggle={() => {\n setIsCountryOpen(!isCountryOpen);\n }}\n onChange={(newValue) => {\n setCountryAsync(newValue).then(() => {\n refetchCountry().then().catch();\n });\n }}\n selectedValue={selectedCountry ?? \"\"}\n countries={countries}\n />\n </div>\n )}\n\n <div className={\"mb-3 flex flex-col\"}>\n {isApplePayAvailable && products != null && products.length > 0 && (\n <div\n data-bitsnap-checkout-slot=\"paymentButtons\"\n className={cn(\"w-full px-2\", paymentButtons.className)}\n style={paymentButtons.style}\n >\n <ApplePayButton\n colorType=\"white\"\n style={{ width: \"100%\" }}\n items={products?.map((el) => ({\n name: el.details?.name ?? \"\",\n id: el.productID,\n price: el.details?.pricing?.effectivePrice ?? el.details?.price ?? 0,\n currency: el.details?.currency,\n quantity: el.quantity,\n isDeliverable: el.details?.isDeliverable ?? false,\n metadata: el.metadata,\n }))}\n />\n </div>\n )}\n {products != null && products.length > 0 && (\n <div\n data-bitsnap-checkout-slot=\"paymentButtons\"\n className={cn(\"w-full px-2\", paymentButtons.className)}\n style={paymentButtons.style}\n >\n <GooglePayButton\n buttonSizeMode=\"fill\"\n buttonColor=\"white\"\n style={{ width: \"100%\" }}\n items={products?.map((el) => ({\n name: el.details?.name ?? \"\",\n id: el.productID,\n price: el.details?.pricing?.effectivePrice ?? el.details?.price ?? 0,\n quantity: el.quantity,\n isDeliverable: el.details?.isDeliverable ?? false,\n metadata: el.metadata,\n }))}\n />\n </div>\n )}\n {products != null && products.length > 0 && (\n <div\n data-bitsnap-checkout-slot=\"paymentButtons\"\n className={cn(\"w-full px-2\", paymentButtons.className)}\n style={paymentButtons.style}\n >\n <InPostPayButtonInner\n projectID={getProjectID() ?? \"\"}\n locale={currentLocale}\n />\n <RevolutPayButtonInner\n projectID={getProjectID() ?? \"\"}\n locale={currentLocale}\n />\n </div>\n )}\n {paymentMethodChoice != null && (\n <div ref={paymentMethodsRef} className=\"contents\">\n <PaymentMethodChoice\n choice={paymentMethodChoice}\n selected={effectivePaymentMethod(\n paymentMethodChoice,\n selectedPaymentMethod,\n )}\n onChange={setSelectedPaymentMethod}\n disabled={isContinueToCheckoutLoading}\n />\n </div>\n )}\n <button\n data-bitsnap-checkout-slot=\"checkoutButton\"\n onClick={continueToCheckout}\n disabled={\n isLoading ||\n isContinueToCheckoutLoading ||\n isWaitingForChoice ||\n selectedCountry == null\n }\n aria-describedby={isCountryMissing ? countryHintId : undefined}\n className={cn(\n \"px-3 py-2 my-2 mx-2 rounded-md disabled:opacity-40 disabled:cursor-not-allowed transition font-bold\",\n checkoutButton.className,\n )}\n style={checkoutButton.style}\n >\n {isContinueToCheckoutLoading || isWaitingForChoice ? (\n <Spinner />\n ) : (\n nextStepText\n )}\n </button>\n {isCountryMissing && (\n <p\n id={countryHintId}\n className={\"text-sm text-center opacity-70\"}\n >\n {countryRequiredText}\n </p>\n )}\n {shownError.length > 0 && (\n <p\n role=\"alert\"\n data-bitsnap-checkout-slot=\"error\"\n className={cn(\"text-sm text-center\", error.className)}\n style={error.style}\n >\n {shownError}\n </p>\n )}\n </div>\n </>\n )}\n </div>\n );\n};\n\nexport default CartComponentContent;\n","import * as React from \"react\"\nimport * as SelectPrimitive from \"@radix-ui/react-select\"\nimport { CheckIcon, ChevronDownIcon, ChevronUpIcon } from \"lucide-react\"\n\nimport { cn } from \"@/src/lib/utils\"\n\nfunction Select({\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Root>) {\n return <SelectPrimitive.Root data-slot=\"select\" {...props} />\n}\n\nfunction SelectGroup({\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Group>) {\n return <SelectPrimitive.Group data-slot=\"select-group\" {...props} />\n}\n\nfunction SelectValue({\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Value>) {\n return <SelectPrimitive.Value data-slot=\"select-value\" {...props} />\n}\n\n/**\n * Colors owned by the shared shadcn theme. They live in Tailwind's\n * `utilities` layer, so plain CSS can never win against them. Components that\n * theme themselves through their own stylesheet (the checkout and its\n * `appearance` tokens) opt out with `theme=\"bare\"`, which keeps the colors the\n * checkout owns (`background-color`, `border-color`) and leaves the rest alone.\n * The default is unchanged.\n */\nconst selectTriggerThemeClasses =\n \"border-input dark:bg-input/30 dark:hover:bg-input/50 bg-transparent\"\n\nfunction SelectTrigger({\n className,\n size = \"default\",\n theme = \"default\",\n children,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Trigger> & {\n size?: \"sm\" | \"default\"\n theme?: \"default\" | \"bare\"\n}) {\n return (\n <SelectPrimitive.Trigger\n data-slot=\"select-trigger\"\n data-size={size}\n className={cn(\n \"data-[placeholder]:text-muted-foreground [&_svg:not([class*='text-'])]:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive flex w-fit items-center justify-between gap-2 rounded-md border px-3 py-2 text-sm whitespace-nowrap shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 data-[size=default]:h-9 data-[size=sm]:h-8 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-2 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n theme === \"bare\" ? \"\" : selectTriggerThemeClasses,\n className\n )}\n {...props}\n >\n {children}\n <SelectPrimitive.Icon asChild>\n <ChevronDownIcon className=\"size-4 opacity-50\" />\n </SelectPrimitive.Icon>\n </SelectPrimitive.Trigger>\n )\n}\n\nfunction SelectContent({\n className,\n children,\n position = \"popper\",\n align = \"center\",\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Content>) {\n return (\n <SelectPrimitive.Portal>\n <SelectPrimitive.Content\n data-slot=\"select-content\"\n className={cn(\n \"bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 relative z-50 max-h-(--radix-select-content-available-height) min-w-[8rem] origin-(--radix-select-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border shadow-md\",\n position === \"popper\" &&\n \"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1\",\n className\n )}\n position={position}\n align={align}\n {...props}\n >\n <SelectScrollUpButton />\n <SelectPrimitive.Viewport\n className={cn(\n \"p-1\",\n position === \"popper\" &&\n \"h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)] scroll-my-1\"\n )}\n >\n {children}\n </SelectPrimitive.Viewport>\n <SelectScrollDownButton />\n </SelectPrimitive.Content>\n </SelectPrimitive.Portal>\n )\n}\n\nfunction SelectLabel({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Label>) {\n return (\n <SelectPrimitive.Label\n data-slot=\"select-label\"\n className={cn(\"text-muted-foreground px-2 py-1.5 text-xs\", className)}\n {...props}\n />\n )\n}\n\nfunction SelectItem({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Item>) {\n return (\n <SelectPrimitive.Item\n data-slot=\"select-item\"\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground relative flex w-full cursor-default items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2\",\n className\n )}\n {...props}\n >\n <span className=\"absolute right-2 flex size-3.5 items-center justify-center\">\n <SelectPrimitive.ItemIndicator>\n <CheckIcon className=\"size-4\" />\n </SelectPrimitive.ItemIndicator>\n </span>\n <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>\n </SelectPrimitive.Item>\n )\n}\n\nfunction SelectSeparator({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Separator>) {\n return (\n <SelectPrimitive.Separator\n data-slot=\"select-separator\"\n className={cn(\"bg-border pointer-events-none -mx-1 my-1 h-px\", className)}\n {...props}\n />\n )\n}\n\nfunction SelectScrollUpButton({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.ScrollUpButton>) {\n return (\n <SelectPrimitive.ScrollUpButton\n data-slot=\"select-scroll-up-button\"\n className={cn(\n \"flex cursor-default items-center justify-center py-1\",\n className\n )}\n {...props}\n >\n <ChevronUpIcon className=\"size-4\" />\n </SelectPrimitive.ScrollUpButton>\n )\n}\n\nfunction SelectScrollDownButton({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.ScrollDownButton>) {\n return (\n <SelectPrimitive.ScrollDownButton\n data-slot=\"select-scroll-down-button\"\n className={cn(\n \"flex cursor-default items-center justify-center py-1\",\n className\n )}\n {...props}\n >\n <ChevronDownIcon className=\"size-4\" />\n </SelectPrimitive.ScrollDownButton>\n )\n}\n\nexport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectLabel,\n SelectScrollDownButton,\n SelectScrollUpButton,\n SelectSeparator,\n SelectTrigger,\n SelectValue,\n}\n","import { useEffect, useState } from \"react\";\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"@/src/ui/select\";\nimport { cn } from \"@/src/lib/utils\";\nimport { useCheckoutAppearance, useCheckoutSlot } from \"./appearance.context\";\nimport { useCheckoutText } from \"./texts.context\";\n\nexport interface CountrySelectorProps {\n id: string;\n open: boolean;\n disabled?: boolean;\n onToggle: () => void;\n onChange: (value: string) => void;\n selectedValue: string;\n countries: { name: string; code: string }[];\n}\n\nfunction CountrySelector({\n id,\n open,\n disabled = false,\n onToggle,\n onChange,\n selectedValue,\n countries,\n}: CountrySelectorProps) {\n const [query, setQuery] = useState(\"\");\n\n const {\n isCustomized,\n boundaryClassName,\n boundaryStyle,\n dropdownStyle,\n } = useCheckoutAppearance();\n const countryTrigger = useCheckoutSlot(\"countryTrigger\");\n const countryDropdown = useCheckoutSlot(\"countryDropdown\");\n const countrySearch = useCheckoutSlot(\"countrySearch\");\n const countryOption = useCheckoutSlot(\"countryOption\");\n const searchCountryText = useCheckoutText(\"searchCountry\");\n const noCountriesFoundText = useCheckoutText(\"noCountriesFound\");\n\n useEffect(() => {\n if (selectedValue == null && countries.length > 0) {\n onChange(countries[0].code);\n }\n }, []);\n\n const filteredCountries = countries.filter((country) =>\n country.name.toLowerCase().startsWith(query.toLowerCase()),\n );\n\n const selectedCountry = countries.find((el) => el.code === selectedValue);\n\n return (\n <Select\n value={selectedValue}\n onValueChange={(value) => {\n onChange(value);\n setQuery(\"\");\n }}\n open={open}\n onOpenChange={(isOpen) => {\n if (isOpen !== open) {\n onToggle();\n }\n if (!isOpen) {\n setQuery(\"\");\n }\n }}\n disabled={disabled}\n >\n <SelectTrigger\n data-bitsnap-checkout-slot=\"countryTrigger\"\n theme=\"bare\"\n className={cn(\n disabled\n ? \"bg-neutral-100 dark:bg-neutral-800 dark:border-neutral-700\"\n : \"\",\n \"w-full rounded-md\",\n countryTrigger.className,\n )}\n style={countryTrigger.style}\n >\n <SelectValue>\n {selectedCountry && (\n <span className=\"truncate flex items-center\">\n <img\n alt={selectedValue}\n src={`https://purecatamphetamine.github.io/country-flag-icons/3x2/${selectedValue}.svg`}\n className=\"inline mr-2 h-4 rounded-sm\"\n />\n {selectedCountry.name}\n </span>\n )}\n </SelectValue>\n </SelectTrigger>\n <SelectContent\n data-bitsnap-checkout={isCustomized ? \"dropdown\" : undefined}\n data-bitsnap-checkout-slot={isCustomized ? \"countryDropdown\" : undefined}\n className={cn(\n // The dropdown is portalled outside of the checkout root, so it only\n // joins the checkout theme boundary once the caller opts into an\n // appearance. Without it the content renders exactly as before.\n isCustomized ? \"bitsnap-react\" : \"\",\n boundaryClassName,\n \"w-full max-h-80 max-w-[350px] z-[999999]\",\n countryDropdown.className,\n )}\n style={{\n ...(isCustomized ? { ...boundaryStyle, ...dropdownStyle } : undefined),\n ...countryDropdown.style,\n }}\n position=\"popper\"\n >\n <div\n data-bitsnap-checkout-slot=\"countrySearch\"\n className={cn(\"sticky top-0 z-10 p-1 border-b\", countrySearch.className)}\n style={countrySearch.style}\n >\n <input\n type=\"search\"\n name=\"search\"\n autoComplete=\"off\"\n className=\"block w-full outline-none sm:text-body-regular bg-transparent rounded-md px-2 py-1.5\"\n placeholder={searchCountryText}\n aria-label={searchCountryText}\n value={query}\n onChange={(e) => setQuery(e.target.value)}\n onClick={(e) => e.stopPropagation()}\n onKeyDown={(e) => e.stopPropagation()}\n />\n </div>\n <div className=\"max-h-64 overflow-y-auto\">\n {filteredCountries.length === 0 ? (\n <div className=\"cursor-default select-none relative py-2 pl-3 pr-9 text-sm\">\n {noCountriesFoundText}\n </div>\n ) : (\n filteredCountries.map((country) => (\n <SelectItem\n key={`${id}-${country.code}`}\n data-bitsnap-checkout-slot=\"countryOption\"\n value={country.code}\n className={cn(\n \"cursor-default select-none relative py-2 pl-3 pr-9 flex items-center transition\",\n countryOption.className,\n )}\n style={countryOption.style}\n >\n <img\n alt={country.code}\n src={`https://purecatamphetamine.github.io/country-flag-icons/3x2/${country.code}.svg`}\n className=\"inline mr-2 h-4 rounded-sm\"\n />\n <span className=\"font-normal truncate\">{country.name}</span>\n </SelectItem>\n ))\n )}\n </div>\n </SelectContent>\n </Select>\n );\n}\n\nexport default CountrySelector;\n"]}
@@ -1,2 +1,2 @@
1
- import{fileDesc as i,messageDesc as o}from"@bufbuild/protobuf/codegenv2";var e=i("Chdjb21tb24vdjEvYWRkcmVzcy5wcm90bxIJY29tbW9uLnYxIocBCgdBZGRyZXNzEgwKBG5hbWUYASABKAkSDQoFbGluZTEYAiABKAkSEgoFbGluZTIYAyABKAlIAIgBARIMCgRjaXR5GAQgASgJEg8KB2NvdW50cnkYBSABKAkSFQoIemlwX2NvZGUYBiABKAlIAYgBAUIICgZfbGluZTJCCwoJX3ppcF9jb2RlIq4BCg5CaWxsaW5nQWRkcmVzcxIMCgRuYW1lGAEgASgJEg0KBWxpbmUxGAIgASgJEhIKBWxpbmUyGAMgASgJSACIAQESDAoEY2l0eRgEIAEoCRIPCgdjb3VudHJ5GAUgASgJEhUKCHppcF9jb2RlGAYgASgJSAGIAQESEwoGdGF4X2lkGAcgASgJSAKIAQFCCAoGX2xpbmUyQgsKCV96aXBfY29kZUIJCgdfdGF4X2lkQk5aTGdpdGh1Yi5jb20vZW1tZW1zL3N1cGVyLWNhcnQvYXBwcy9zcnYtd29ya2VyL3V0aWxzL21vZGVscy9jb21tb24vdjE7Y29tbW9udjFiBnByb3RvMw"),V=o(e,0),S=o(e,1);import{enumDesc as J,fileDesc as A,messageDesc as s,serviceDesc as g}from"@bufbuild/protobuf/codegenv2";import{enumDesc as E,fileDesc as c}from"@bufbuild/protobuf/codegenv2";var a=c("Chdjb21tb24vdjEvZ2F0ZXdheS5wcm90bxIJY29tbW9uLnYxKs8BCgdHYXRld2F5Eg8KC0dBVEVXQVlfQUxMEAASFwoTR0FURVdBWV9QUlpFTEVXWV8yNBABEhIKDkdBVEVXQVlfU1RSSVBFEAISEAoMR0FURVdBWV9UUEFZEAMSHAoYR0FURVdBWV9DQVNIX09OX0RFTElWRVJZEAQSEAoMR0FURVdBWV9GUkVFEAUSFgoSR0FURVdBWV9JTlBPU1RfUEFZEAYSEAoMR0FURVdBWV9QQVlVEAcSGgoWR0FURVdBWV9NQU5VQUxfUEFZTUVOVBAIQk5aTGdpdGh1Yi5jb20vZW1tZW1zL3N1cGVyLWNhcnQvYXBwcy9zcnYtd29ya2VyL3V0aWxzL21vZGVscy9jb21tb24vdjE7Y29tbW9udjFiBnByb3RvMw");import{enumDesc as U,fileDesc as p,messageDesc as Y}from"@bufbuild/protobuf/codegenv2";import{file_google_protobuf_timestamp as d}from"@bufbuild/protobuf/wkt";var l=p("CiJjb21tb24vdjEvcHVzaF9ub3RpZmljYXRpb25zLnByb3RvEgljb21tb24udjEi9gEKG1B1c2hOb3RpZmljYXRpb25EZXZpY2VUb2tlbhIXCgpwdXNoX3Rva2VuGAIgASgJSACIAQESNAoLZXhwaXJlX3RpbWUYAyABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wSAGIAQESEwoGcDI1NmRoGAQgASgJSAKIAQESFQoIZW5kcG9pbnQYBSABKAlIA4gBARIlCghwbGF0Zm9ybRgGIAEoDjITLmNvbW1vbi52MS5QbGF0Zm9ybUINCgtfcHVzaF90b2tlbkIOCgxfZXhwaXJlX3RpbWVCCQoHX3AyNTZkaEILCglfZW5kcG9pbnQi0AEKF1B1c2hOb3RpZmljYXRpb25QYXlsb2FkEg0KBXRpdGxlGAIgASgJEhUKCG9wZW5fdXJsGAMgASgJSAGIAQESDgoEYm9keRgEIAEoCUgAEjoKBGRhdGEYBSADKAsyLC5jb21tb24udjEuUHVzaE5vdGlmaWNhdGlvblBheWxvYWQuRGF0YUVudHJ5GisKCURhdGFFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAk6AjgBQgkKB21lc3NhZ2VCCwoJX29wZW5fdXJsKngKCFBsYXRmb3JtEhgKFFBMQVRGT1JNX1VOU1BFQ0lGSUVEEAASEAoMUExBVEZPUk1fV0VCEAESGAoUUExBVEZPUk1fSU9TX1NBTkRCT1gQAhIQCgxQTEFURk9STV9JT1MQAxIUChBQTEFURk9STV9BTkRST0lEEAQqdAoRTm90aWZpY2F0aW9uRXZlbnQSEQoNRVZFTlRfVU5LTk9XThAAEhIKDkVWRU5UX1JFQ0VJVkVEEAESEAoMRVZFTlRfT1BFTkVEEAISEQoNRVZFTlRfQ0xJQ0tFRBADEhMKD0VWRU5UX0RJU01JU1NFRBAEKpkBChlOb3RpZmljYXRpb25Hcm91cEhvd09mdGVuEicKI05PVElGSUNBVElPTl9HUk9VUF9IT1dfT0ZURU5fUkFSRUxZEAASJgoiTk9USUZJQ0FUSU9OX0dST1VQX0hPV19PRlRFTl9PRlRFThABEisKJ05PVElGSUNBVElPTl9HUk9VUF9IT1dfT0ZURU5fVkVSWV9PRlRFThACQk5aTGdpdGh1Yi5jb20vZW1tZW1zL3N1cGVyLWNhcnQvYXBwcy9zcnYtd29ya2VyL3V0aWxzL21vZGVscy9jb21tb24vdjE7Y29tbW9udjFiBnByb3RvMw",[d]);import{enumDesc as N,fileDesc as r,messageDesc as y,serviceDesc as I}from"@bufbuild/protobuf/codegenv2";import{file_google_protobuf_empty as u,file_google_protobuf_timestamp as R}from"@bufbuild/protobuf/wkt";var n=r("Ch1kYXNoYm9hcmQvdjEvYXVkaW9ib29rcy5wcm90bxIXZGFzaGJvYXJkLmF1ZGlvYm9va3MudjEiFgoUR2V0QXVkaW9ib29rc1JlcXVlc3QiIQoTR2V0QXVkaW9ib29rUmVxdWVzdBIKCgJpZBgBIAEoCSKrAQoHQ2hhcHRlchIKCgJpZBgBIAEoCRIMCgRuYW1lGAIgASgJEhgKC2Rlc2NyaXB0aW9uGAMgASgJSACIAQESGgoNbXVsdGltZWRpYV9pZBgEIAEoCUgBiAEBEi4KCmNyZWF0ZWRfYXQYBSABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wQg4KDF9kZXNjcmlwdGlvbkIQCg5fbXVsdGltZWRpYV9pZCLzAgoJQXVkaW9ib29rEg8KAmlkGAEgASgJSACIAQESEgoKcHJvamVjdF9pZBgCIAEoCRIMCgRuYW1lGAMgASgJEhMKC2Rlc2NyaXB0aW9uGAQgASgJEhMKC2NvdmVyX2ltYWdlGAUgASgJEhcKD3RodW1ibmFpbF9pbWFnZRgGIAEoCRIyCghjaGFwdGVycxgHIAMoCzIgLmRhc2hib2FyZC5hdWRpb2Jvb2tzLnYxLkNoYXB0ZXISFwoPaXNfZG93bmxvYWRhYmxlGAggASgIEi4KCmNyZWF0ZWRfYXQYCSABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEiQKF2lzX2Jyb3dzZXJfZG93bmxvYWRhYmxlGAogASgISAGIAQESGQoMYWNjZW50X2NvbG9yGAsgASgJSAKIAQFCBQoDX2lkQhoKGF9pc19icm93c2VyX2Rvd25sb2FkYWJsZUIPCg1fYWNjZW50X2NvbG9yIk8KFUdldEF1ZGlvYm9va3NSZXNwb25zZRI2CgphdWRpb2Jvb2tzGAEgAygLMiIuZGFzaGJvYXJkLmF1ZGlvYm9va3MudjEuQXVkaW9ib29rImAKFEdldEF1ZGlvYm9va1Jlc3BvbnNlEjoKCWF1ZGlvYm9vaxgBIAEoCzIiLmRhc2hib2FyZC5hdWRpb2Jvb2tzLnYxLkF1ZGlvYm9va0gAiAEBQgwKCl9hdWRpb2Jvb2siVwoeQ3JlYXRlT3JVcGRhdGVBdWRpb2Jvb2tSZXF1ZXN0EjUKCWF1ZGlvYm9vaxgBIAEoCzIiLmRhc2hib2FyZC5hdWRpb2Jvb2tzLnYxLkF1ZGlvYm9vayLRAQofQ3JlYXRlT3JVcGRhdGVBdWRpb2Jvb2tSZXNwb25zZRJSCgdzdWNjZXNzGAEgASgLMj8uZGFzaGJvYXJkLmF1ZGlvYm9va3MudjEuQ3JlYXRlT3JVcGRhdGVBdWRpb2Jvb2tSZXNwb25zZS5SZXN1bHRIABI6CgdmYWlsdXJlGAIgASgOMicuZGFzaGJvYXJkLmF1ZGlvYm9va3MudjEuRmFpbHVyZU1lc3NhZ2VIABoUCgZSZXN1bHQSCgoCaWQYASABKAlCCAoGcmVzdWx0IiQKFkRlbGV0ZUF1ZGlvYm9va1JlcXVlc3QSCgoCaWQYASABKAkiVQofR2V0QXVkaW9ib29rQWNjZXNzRW1haWxzUmVxdWVzdBIUCgxhdWRpb2Jvb2tfaWQYASABKAkSEgoFZW1haWwYAiABKAlIAIgBAUIICgZfZW1haWwi+AIKIEdldEF1ZGlvYm9va0FjY2Vzc0VtYWlsc1Jlc3BvbnNlElMKB3N1Y2Nlc3MYASABKAsyQC5kYXNoYm9hcmQuYXVkaW9ib29rcy52MS5HZXRBdWRpb2Jvb2tBY2Nlc3NFbWFpbHNSZXNwb25zZS5SZXN1bHRIABI6CgdmYWlsdXJlGAIgASgOMicuZGFzaGJvYXJkLmF1ZGlvYm9va3MudjEuRmFpbHVyZU1lc3NhZ2VIABpYCgtBY2Nlc3NFbWFpbBIKCgJpZBgBIAEoCRINCgVlbWFpbBgCIAEoCRIuCgpjcmVhdGVkX2F0GAMgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBpfCgZSZXN1bHQSVQoGZW1haWxzGAEgAygLMkUuZGFzaGJvYXJkLmF1ZGlvYm9va3MudjEuR2V0QXVkaW9ib29rQWNjZXNzRW1haWxzUmVzcG9uc2UuQWNjZXNzRW1haWxCCAoGcmVzdWx0IkMKHENyZWF0ZUF1ZGlvYm9va0FjY2Vzc1JlcXVlc3QSFAoMYXVkaW9ib29rX2lkGAEgASgJEg0KBWVtYWlsGAIgASgJIjgKHERlbGV0ZUF1ZGlvYm9va0FjY2Vzc1JlcXVlc3QSGAoQc3lzdGVtX2FjY2Vzc19pZBgBIAEoCSJ/CgxCb29sUmVzcG9uc2USKQoHc3VjY2VzcxgBIAEoCzIWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eUgAEjoKB2ZhaWx1cmUYAiABKA4yJy5kYXNoYm9hcmQuYXVkaW9ib29rcy52MS5GYWlsdXJlTWVzc2FnZUgAQggKBnJlc3VsdCqpAQoORmFpbHVyZU1lc3NhZ2USGwoXRkFJTFVSRV9NRVNTQUdFX1VOS05PV04QABIlCiFGQUlMVVJFX01FU1NBR0VfUFJPSkVDVF9OT1RfRk9VTkQQARIlCiFGQUlMVVJFX01FU1NBR0VfQ0hBUFRFUl9OT1RfRk9VTkQQAhIsCihGQUlMVVJFX01FU1NBR0VfSU5DT1JSRUNUX0NIQVBURVJfRk9STUFUEAMy6gYKEUF1ZGlvYm9va3NTZXJ2aWNlEm4KDUdldEF1ZGlvYm9va3MSLS5kYXNoYm9hcmQuYXVkaW9ib29rcy52MS5HZXRBdWRpb2Jvb2tzUmVxdWVzdBouLmRhc2hib2FyZC5hdWRpb2Jvb2tzLnYxLkdldEF1ZGlvYm9va3NSZXNwb25zZRJrCgxHZXRBdWRpb2Jvb2sSLC5kYXNoYm9hcmQuYXVkaW9ib29rcy52MS5HZXRBdWRpb2Jvb2tSZXF1ZXN0Gi0uZGFzaGJvYXJkLmF1ZGlvYm9va3MudjEuR2V0QXVkaW9ib29rUmVzcG9uc2USjAEKF0NyZWF0ZU9yVXBkYXRlQXVkaW9ib29rEjcuZGFzaGJvYXJkLmF1ZGlvYm9va3MudjEuQ3JlYXRlT3JVcGRhdGVBdWRpb2Jvb2tSZXF1ZXN0GjguZGFzaGJvYXJkLmF1ZGlvYm9va3MudjEuQ3JlYXRlT3JVcGRhdGVBdWRpb2Jvb2tSZXNwb25zZRJpCg9EZWxldGVBdWRpb2Jvb2sSLy5kYXNoYm9hcmQuYXVkaW9ib29rcy52MS5EZWxldGVBdWRpb2Jvb2tSZXF1ZXN0GiUuZGFzaGJvYXJkLmF1ZGlvYm9va3MudjEuQm9vbFJlc3BvbnNlEo8BChhHZXRBdWRpb2Jvb2tBY2Nlc3NFbWFpbHMSOC5kYXNoYm9hcmQuYXVkaW9ib29rcy52MS5HZXRBdWRpb2Jvb2tBY2Nlc3NFbWFpbHNSZXF1ZXN0GjkuZGFzaGJvYXJkLmF1ZGlvYm9va3MudjEuR2V0QXVkaW9ib29rQWNjZXNzRW1haWxzUmVzcG9uc2USdQoVQ3JlYXRlQXVkaW9ib29rQWNjZXNzEjUuZGFzaGJvYXJkLmF1ZGlvYm9va3MudjEuQ3JlYXRlQXVkaW9ib29rQWNjZXNzUmVxdWVzdBolLmRhc2hib2FyZC5hdWRpb2Jvb2tzLnYxLkJvb2xSZXNwb25zZRJ1ChVEZWxldGVBdWRpb2Jvb2tBY2Nlc3MSNS5kYXNoYm9hcmQuYXVkaW9ib29rcy52MS5EZWxldGVBdWRpb2Jvb2tBY2Nlc3NSZXF1ZXN0GiUuZGFzaGJvYXJkLmF1ZGlvYm9va3MudjEuQm9vbFJlc3BvbnNlYgZwcm90bzM",[R,u]);import{file_google_protobuf_empty as G,file_google_protobuf_timestamp as b}from"@bufbuild/protobuf/wkt";var t=A("ChpwdWJsaWMvdjEvcHVibGljX2FwaS5wcm90bxINcHVibGljX2FwaS52MSI2Ch5HZXRBcHBTdG9yZUFjY291bnRUb2tlblJlcXVlc3QSFAoMYWNjZXNzX3Rva2VuGAEgASgJIjwKH0dldEFwcFN0b3JlQWNjb3VudFRva2VuUmVzcG9uc2USGQoRYXBwX2FjY291bnRfdG9rZW4YASABKAkiaQodVmVyaWZ5QXBwU3RvcmVQdXJjaGFzZVJlcXVlc3QSFAoMYWNjZXNzX3Rva2VuGAEgASgJEhoKEnNpZ25lZF90cmFuc2FjdGlvbhgCIAEoCRIWCg50cmFuc2FjdGlvbl9pZBgDIAEoCSJcCh5WZXJpZnlBcHBTdG9yZVB1cmNoYXNlUmVzcG9uc2USEQoJZnVsZmlsbGVkGAEgASgIEhIKCnByb2R1Y3RfaWQYAiABKAkSEwoLZW52aXJvbm1lbnQYAyABKAkiNgoeR2V0QXBwU3RvcmVFbnRpdGxlbWVudHNSZXF1ZXN0EhQKDGFjY2Vzc190b2tlbhgBIAEoCSL5AQofR2V0QXBwU3RvcmVFbnRpdGxlbWVudHNSZXNwb25zZRJQCgxlbnRpdGxlbWVudHMYASADKAsyOi5wdWJsaWNfYXBpLnYxLkdldEFwcFN0b3JlRW50aXRsZW1lbnRzUmVzcG9uc2UuRW50aXRsZW1lbnQagwEKC0VudGl0bGVtZW50EhIKCnByb2R1Y3RfaWQYASABKAkSDgoGc3RhdHVzGAIgASgJEhMKC2Vudmlyb25tZW50GAMgASgJEhoKEmZ1bGZpbGxtZW50X3N0YXR1cxgEIAEoCRIfChdvcmlnaW5hbF90cmFuc2FjdGlvbl9pZBgFIAEoCSJUCh9SZXN0b3JlQXBwU3RvcmVQdXJjaGFzZXNSZXF1ZXN0EhQKDGFjY2Vzc190b2tlbhgBIAEoCRIbChNzaWduZWRfdHJhbnNhY3Rpb25zGAIgAygJIpgCCiBSZXN0b3JlQXBwU3RvcmVQdXJjaGFzZXNSZXNwb25zZRJRCghwcm9kdWN0cxgBIAMoCzI/LnB1YmxpY19hcGkudjEuUmVzdG9yZUFwcFN0b3JlUHVyY2hhc2VzUmVzcG9uc2UuUmVzdG9yZWRQcm9kdWN0EiYKHmZhbWlseV9zaGFyaW5nX3Jldmlld19yZXF1aXJlZBgCIAEoCBp5Cg9SZXN0b3JlZFByb2R1Y3QSEgoKcHJvZHVjdF9pZBgBIAEoCRIfChdvcmlnaW5hbF90cmFuc2FjdGlvbl9pZBgCIAEoCRIOCgZzdGF0dXMYAyABKAkSDgoGcmVhc29uGAQgASgJEhEKCWZ1bGZpbGxlZBgFIAEoCCI4CiBDbGVhckFwcFN0b3JlQWNjb3VudFRva2VuUmVxdWVzdBIUCgxhY2Nlc3NfdG9rZW4YASABKAkiMQoZR2V0U3RvcmVLaXRDYXRhbG9nUmVxdWVzdBIUCgxhY2Nlc3NfdG9rZW4YASABKAki9QEKGkdldFN0b3JlS2l0Q2F0YWxvZ1Jlc3BvbnNlEhcKD3BheXdhbGxfZW5hYmxlZBgBIAEoCBJDCghwcm9kdWN0cxgCIAMoCzIxLnB1YmxpY19hcGkudjEuR2V0U3RvcmVLaXRDYXRhbG9nUmVzcG9uc2UuUHJvZHVjdBp5CgdQcm9kdWN0EhgKEHN0b3JlX3Byb2R1Y3RfaWQYASABKAkSGwoTaW50ZXJuYWxfcHJvZHVjdF9pZBgCIAEoCRIMCgRraW5kGAMgASgJEhQKDGRpc3BsYXlfbmFtZRgEIAEoCRITCgtkZXNjcmlwdGlvbhgFIAEoCSJ6ChBHZXRPcmRlcnNSZXF1ZXN0EhIKCnByb2plY3RfaWQYASABKAkSFAoMYWNjZXNzX3Rva2VuGAIgASgJEhIKBWxpbWl0GAMgASgFSACIAQESEwoGb2Zmc2V0GAQgASgFSAGIAQFCCAoGX2xpbWl0QgkKB19vZmZzZXQigwIKEUdldE9yZGVyc1Jlc3BvbnNlEj0KBm9yZGVycxgBIAMoCzItLnB1YmxpY19hcGkudjEuR2V0T3JkZXJzUmVzcG9uc2UuT3JkZXJTdW1tYXJ5EhMKC3RvdGFsX2NvdW50GAIgASgFGpkBCgxPcmRlclN1bW1hcnkSCgoCaWQYASABKAkSDgoGc3RhdHVzGAIgASgJEhQKDHRvdGFsX2Ftb3VudBgDIAEoBRIQCghjdXJyZW5jeRgEIAEoCRIuCgpjcmVhdGVkX2F0GAUgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIVCg1jdXN0b21lcl9uYW1lGAYgASgJIjcKIUlzT25lQ2xpY2tQYXltZW50QXZhaWxhYmxlUmVxdWVzdBISCgpwcm9qZWN0X2lkGAEgASgJIsUCCiJJc09uZUNsaWNrUGF5bWVudEF2YWlsYWJsZVJlc3BvbnNlEhIKCmlucG9zdF9wYXkYASABKAgSEQoJYXBwbGVfcGF5GAIgASgIEhIKCmdvb2dsZV9wYXkYAyABKAgSYQoRZ29vZ2xlX3BheV9jb25maWcYBCABKAsyQS5wdWJsaWNfYXBpLnYxLklzT25lQ2xpY2tQYXltZW50QXZhaWxhYmxlUmVzcG9uc2UuR29vZ2xlUGF5Q29uZmlnSACIAQEaawoPR29vZ2xlUGF5Q29uZmlnEhMKC21lcmNoYW50X2lkGAEgASgJEhUKDW1lcmNoYW50X25hbWUYAiABKAkSDwoHZ2F0ZXdheRgDIAEoCRIbChNnYXRld2F5X21lcmNoYW50X2lkGAQgASgJQhQKEl9nb29nbGVfcGF5X2NvbmZpZyLRAwofT25lQ2xpY2tBdXRob3JpemVQYXltZW50UmVxdWVzdBJHCgdnYXRld2F5GAEgASgOMjYucHVibGljX2FwaS52MS5PbmVDbGlja0F1dGhvcml6ZVBheW1lbnRSZXF1ZXN0LkdhdGV3YXkSEwoLcGF5bWVudERhdGEYAiABKAkSFQoNcGF5bWVudE1ldGhvZBgDIAEoCRIdChV0cmFuc2FjdGlvbklkZW50aWZpZXIYBCABKAkSNwoFb3JkZXIYBSABKAsyKC5wdWJsaWNfYXBpLnYxLkdldFByZU9yZGVyRGV0YWlsc1JlcXVlc3QSMQoQc2hpcHBpbmdfYWRkcmVzcxgGIAEoCzISLmNvbW1vbi52MS5BZGRyZXNzSACIAQESNwoPYmlsbGluZ19hZGRyZXNzGAcgASgLMhkuY29tbW9uLnYxLkJpbGxpbmdBZGRyZXNzSAGIAQESFQoIbWV0YWRhdGEYCCABKAlIAogBASIoCgdHYXRld2F5Eg0KCUFQUExFX1BBWRAAEg4KCkdPT0dMRV9QQVkQAUITChFfc2hpcHBpbmdfYWRkcmVzc0ISChBfYmlsbGluZ19hZGRyZXNzQgsKCV9tZXRhZGF0YSKkAQogT25lQ2xpY2tBdXRob3JpemVQYXltZW50UmVzcG9uc2USEgoKaXNfc3VjY2VzcxgBIAEoCBIUCgxyZWRpcmVjdF91cmwYAiABKAkSFgoOdHJhbnNhY3Rpb25faWQYAyABKAkSIwoWYXBwbGVfcGF5X3RyYWNraW5nX3VybBgEIAEoCUgAiAEBQhkKF19hcHBsZV9wYXlfdHJhY2tpbmdfdXJsIiwKDFByZU9yZGVySXRlbRIKCgJpZBgBIAEoCRIQCghxdWFudGl0eRgCIAEoBSLVAgoZR2V0UHJlT3JkZXJEZXRhaWxzUmVxdWVzdBISCgpwcm9qZWN0X2lkGAEgASgJEioKBWl0ZW1zGAIgAygLMhsucHVibGljX2FwaS52MS5QcmVPcmRlckl0ZW0SGQoMY291bnRyeV9jb2RlGAMgASgJSACIAQESFgoJcG9zdF9jb2RlGAQgASgJSAGIAQESFwoKY291cG9uQ29kZRgFIAEoCUgCiAEBEhIKBWVtYWlsGAYgASgJSAOIAQESJQoYc2VsZWN0ZWRfZGVsaXZlcnlfbWV0aG9kGAcgASgJSASIAQESEgoFcGhvbmUYCCABKAlIBYgBAUIPCg1fY291bnRyeV9jb2RlQgwKCl9wb3N0X2NvZGVCDQoLX2NvdXBvbkNvZGVCCAoGX2VtYWlsQhsKGV9zZWxlY3RlZF9kZWxpdmVyeV9tZXRob2RCCAoGX3Bob25lIqwBCg5EZWxpdmVyeU1ldGhvZBIKCgJpZBgBIAEoCRIOCgZhbW91bnQYAiABKAUSDAoEbmFtZRgDIAEoCRIYCgtkZXNjcmlwdGlvbhgEIAEoCUgAiAEBEhUKCG1pbl9kYXlzGAUgASgFSAGIAQESFQoIbWF4X2RheXMYBiABKAVIAogBAUIOCgxfZGVzY3JpcHRpb25CCwoJX21pbl9kYXlzQgsKCV9tYXhfZGF5cyKzAgoaR2V0UHJlT3JkZXJEZXRhaWxzUmVzcG9uc2USLgoHbWV0aG9kcxgBIAMoCzIdLnB1YmxpY19hcGkudjEuRGVsaXZlcnlNZXRob2QSFwoKY291cG9uQ29kZRgCIAEoCUgAiAEBEiUKGHNlbGVjdGVkX2RlbGl2ZXJ5X21ldGhvZBgDIAEoCUgBiAEBEhkKDHRvdGFsX2Ftb3VudBgEIAEoBUgCiAEBEhkKDGNvdXBvbl92YWx1ZRgFIAEoBUgDiAEBEhAKCGN1cnJlbmN5GAYgASgJEg8KB2NvdW50cnkYByABKAlCDQoLX2NvdXBvbkNvZGVCGwoZX3NlbGVjdGVkX2RlbGl2ZXJ5X21ldGhvZEIPCg1fdG90YWxfYW1vdW50Qg8KDV9jb3Vwb25fdmFsdWUiYgopTm90aWZ5VXNlckFib3V0UHJvZHVjdEF2YWlsYWJpbGl0eVJlcXVlc3QSEgoKcHJvamVjdF9pZBgBIAEoCRISCgpwcm9kdWN0X2lkGAIgASgJEg0KBWVtYWlsGAMgASgJIk0KH0FwcGxlUGF5VmFsaWRhdGVNZXJjaGFudFJlcXVlc3QSFgoOdmFsaWRhdGlvbl91cmwYASABKAkSEgoKcHJvamVjdF9pZBgCIAEoCSI8CiBBcHBsZVBheVZhbGlkYXRlTWVyY2hhbnRSZXNwb25zZRIYChBtZXJjaGFudF9zZXNzaW9uGAEgASgJIk4KIkdldEF2YWlsYWJsZUNvdW50Rm9yUHJvZHVjdFJlcXVlc3QSEgoKcHJvamVjdF9pZBgBIAEoCRIUCgxhbGxfdmFyaWFudHMYAiADKAkiwgQKI0dldEF2YWlsYWJsZUNvdW50Rm9yUHJvZHVjdFJlc3BvbnNlEmEKEGF2YWlsYWJsZV9jb3VudHMYASADKAsyRy5wdWJsaWNfYXBpLnYxLkdldEF2YWlsYWJsZUNvdW50Rm9yUHJvZHVjdFJlc3BvbnNlLkF2YWlsYWJsZUNvdW50c0VudHJ5EkwKBWVycm9yGAIgASgOMjgucHVibGljX2FwaS52MS5HZXRBdmFpbGFibGVDb3VudEZvclByb2R1Y3RSZXNwb25zZS5FcnJvckgAiAEBGlEKGEF2YWlsYWJsZUNvdW50Rm9yUHJvZHVjdBIjChthdmFpbGFibGVfcXVhbnRpdHlfdG9fb3JkZXIYASABKAUSEAoIY2FuX2JhY2sYAiABKAgagwEKFEF2YWlsYWJsZUNvdW50c0VudHJ5EgsKA2tleRgBIAEoCRJaCgV2YWx1ZRgCIAEoCzJLLnB1YmxpY19hcGkudjEuR2V0QXZhaWxhYmxlQ291bnRGb3JQcm9kdWN0UmVzcG9uc2UuQXZhaWxhYmxlQ291bnRGb3JQcm9kdWN0OgI4ASKGAQoFRXJyb3ISEQoNRVJST1JfVU5LTk9XThAAEhsKF0VSUk9SX1BST0pFQ1RfTk9UX0ZPVU5EEAESHwobRVJST1JfUFJPRFVDVF9OT1RfQVZBSUxBQkxFEAISLAooRVJST1JfUFJPRFVDVF9OT1RfQVZBSUxBQkxFX0JVVF9DQU5fQkFDSxADQggKBl9lcnJvciItChdHZXRMb2dpbkJyYW5kaW5nUmVxdWVzdBISCgpwcm9qZWN0X2lkGAEgASgJIogBChhHZXRMb2dpbkJyYW5kaW5nUmVzcG9uc2USEQoEbmFtZRgBIAEoCUgAiAEBEhUKCGxvZ29fdXJsGAIgASgJSAGIAQESGgoNbG9nb19kYXJrX3VybBgDIAEoCUgCiAEBQgcKBV9uYW1lQgsKCV9sb2dvX3VybEIQCg5fbG9nb19kYXJrX3VybCI+ChZHZXRUaGFua1lvdVBhZ2VSZXF1ZXN0EhIKCnByb2plY3RfaWQYASABKAkSEAoIb3JkZXJfaWQYAiABKAkizgIKF0dldFRoYW5rWW91UGFnZVJlc3BvbnNlEhAKCGNvbmZldHRpGAEgASgIEg4KBmhlYWRlchgCIAEoCRIRCglib2R5X2h0bWwYAyABKAkSGQoMYnV0dG9uX2xhYmVsGAQgASgJSACIAQESFwoKYnV0dG9uX3VybBgFIAEoCUgBiAEBEhkKDHJlZGlyZWN0X3VybBgGIAEoCUgCiAEBEhkKDHByb2R1Y3RfbmFtZRgHIAEoCUgDiAEBEhsKDmN1c3RvbWVyX2VtYWlsGAggASgJSASIAQESFQoIbG9nb191cmwYCSABKAlIBYgBAUIPCg1fYnV0dG9uX2xhYmVsQg0KC19idXR0b25fdXJsQg8KDV9yZWRpcmVjdF91cmxCDwoNX3Byb2R1Y3RfbmFtZUIRCg9fY3VzdG9tZXJfZW1haWxCCwoJX2xvZ29fdXJsIjUKHVVzZXJQYW5lbERlbGV0ZUFjY291bnRSZXF1ZXN0EhQKDGFjY2Vzc190b2tlbhgBIAEoCSJAChREaWRCdXlQcm9kdWN0UmVxdWVzdBIUCgxhY2Nlc3NfdG9rZW4YASABKAkSEgoKcHJvZHVjdF9pZBgCIAEoCSL+AQohVXBkYXRlTm90aWZpY2F0aW9uU2V0dGluZ3NSZXF1ZXN0EhQKDGFjY2Vzc190b2tlbhgBIAEoCRISCgpwcm9qZWN0X2lkGAIgASgJEk0KDW1vZGlmaWNhdGlvbnMYAyADKAsyNi5wdWJsaWNfYXBpLnYxLlVwZGF0ZU5vdGlmaWNhdGlvblNldHRpbmdzUmVxdWVzdC5Hcm91cBI6Cg9lbmFibGVkX21ldGhvZHMYBCADKA4yIS5wdWJsaWNfYXBpLnYxLk5vdGlmaWNhdGlvbk1ldGhvZBokCgVHcm91cBIKCgJpZBgBIAEoCRIPCgdlbmFibGVkGAIgASgIIlEKJ1VwZGF0ZUdsb2JhbE5vdGlmaWNhdGlvblNldHRpbmdzUmVxdWVzdBIUCgxhY2Nlc3NfdG9rZW4YASABKAkSEAoIaXNfbXV0ZWQYAiABKAgiUQolR2V0Tm90aWZpY2F0aW9uU2V0dGluZ3NEZXRhaWxzUmVxdWVzdBIUCgxhY2Nlc3NfdG9rZW4YASABKAkSEgoKcHJvamVjdF9pZBgCIAEoCSKhAQoRTm90aWZpY2F0aW9uR3JvdXASCgoCaWQYASABKAkSDAoEbmFtZRgCIAEoCRIYCgtkZXNjcmlwdGlvbhgDIAEoCUgAiAEBEg8KB2VuYWJsZWQYBCABKAgSNwoJaG93X29mdGVuGAUgASgOMiQuY29tbW9uLnYxLk5vdGlmaWNhdGlvbkdyb3VwSG93T2Z0ZW5CDgoMX2Rlc2NyaXB0aW9uIrECCiZHZXROb3RpZmljYXRpb25TZXR0aW5nc0RldGFpbHNSZXNwb25zZRISCgpwcm9qZWN0X2lkGAEgASgJEgwKBG5hbWUYAiABKAkSLwoFdGhlbWUYAyABKAsyGy5wdWJsaWNfYXBpLnYxLlByb2plY3RUaGVtZUgAiAEBEjwKEWF2YWlsYWJsZV9tZXRob2RzGAQgAygOMiEucHVibGljX2FwaS52MS5Ob3RpZmljYXRpb25NZXRob2QSOgoPZW5hYmxlZF9tZXRob2RzGAUgAygOMiEucHVibGljX2FwaS52MS5Ob3RpZmljYXRpb25NZXRob2QSMAoGZ3JvdXBzGAYgAygLMiAucHVibGljX2FwaS52MS5Ob3RpZmljYXRpb25Hcm91cEIICgZfdGhlbWUiQwoeR2V0Tm90aWZpY2F0aW9uU2V0dGluZ3NSZXF1ZXN0EhQKDGFjY2Vzc190b2tlbhgBIAEoCRILCgNhbGwYAiABKAgi8AIKH0dldE5vdGlmaWNhdGlvblNldHRpbmdzUmVzcG9uc2USSAoIcHJvamVjdHMYASADKAsyNi5wdWJsaWNfYXBpLnYxLkdldE5vdGlmaWNhdGlvblNldHRpbmdzUmVzcG9uc2UuUHJvamVjdBIQCghpc19tdXRlZBgCIAEoCBqlAQoHUHJvamVjdBIKCgJpZBgBIAEoCRIMCgRuYW1lGAIgASgJEkUKBnN0YXR1cxgDIAEoDjI1LnB1YmxpY19hcGkudjEuR2V0Tm90aWZpY2F0aW9uU2V0dGluZ3NSZXNwb25zZS5TdGF0dXMSLwoFdGhlbWUYBCABKAsyGy5wdWJsaWNfYXBpLnYxLlByb2plY3RUaGVtZUgAiAEBQggKBl90aGVtZSJJCgZTdGF0dXMSFgoSU1RBVFVTX1VOU1BFQ0lGSUVEEAASEgoOU1RBVFVTX0VOQUJMRUQQARITCg9TVEFUVVNfRElTQUJMRUQQAiLMAQodR2V0Tm90aWZpY2F0aW9uSGlzdG9yeVJlcXVlc3QSFAoMYWNjZXNzX3Rva2VuGAEgASgJEhcKCnByb2plY3RfaWQYAiABKAlIAIgBARIyCgdtZXRob2RzGAMgAygOMiEucHVibGljX2FwaS52MS5Ob3RpZmljYXRpb25NZXRob2QSEQoJcGFnZV9zaXplGAQgASgFEhcKCnBhZ2VfdG9rZW4YBSABKAlIAYgBAUINCgtfcHJvamVjdF9pZEINCgtfcGFnZV90b2tlbiLrAwoXTm90aWZpY2F0aW9uSGlzdG9yeUl0ZW0SCgoCaWQYASABKAkSFwoPbm90aWZpY2F0aW9uX2lkGAIgASgJEjEKBm1ldGhvZBgDIAEoDjIhLnB1YmxpY19hcGkudjEuTm90aWZpY2F0aW9uTWV0aG9kEisKB3NlbnRfYXQYBCABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEg0KBXRpdGxlGAUgASgJEhUKCHN1YnRpdGxlGAYgASgJSACIAQESFAoHY29udGVudBgHIAEoCUgBiAEBEhYKCWltYWdlX3VybBgIIAEoCUgCiAEBEhUKCG9wZW5fdXJsGAogASgJSAOIAQESPQoGc2VuZGVyGAkgASgLMi0ucHVibGljX2FwaS52MS5Ob3RpZmljYXRpb25IaXN0b3J5SXRlbS5TZW5kZXIabQoGU2VuZGVyEhIKCnByb2plY3RfaWQYASABKAkSFAoMZGlzcGxheV9uYW1lGAIgASgJEi8KBXRoZW1lGAMgASgLMhsucHVibGljX2FwaS52MS5Qcm9qZWN0VGhlbWVIAIgBAUIICgZfdGhlbWVCCwoJX3N1YnRpdGxlQgoKCF9jb250ZW50QgwKCl9pbWFnZV91cmxCCwoJX29wZW5fdXJsIpEBCh5HZXROb3RpZmljYXRpb25IaXN0b3J5UmVzcG9uc2USPQoNbm90aWZpY2F0aW9ucxgBIAMoCzImLnB1YmxpY19hcGkudjEuTm90aWZpY2F0aW9uSGlzdG9yeUl0ZW0SHAoPbmV4dF9wYWdlX3Rva2VuGAIgASgJSACIAQFCEgoQX25leHRfcGFnZV90b2tlbiJBCilVc2VyUGFuZWxQdXNoR2V0QXZhaWxhYmxlQ29tcGFuaWVzUmVxdWVzdBIUCgxhY2Nlc3NfdG9rZW4YASABKAki6wIKKlVzZXJQYW5lbFB1c2hHZXRBdmFpbGFibGVDb21wYW5pZXNSZXNwb25zZRJUCgljb21wYW5pZXMYASADKAsyQS5wdWJsaWNfYXBpLnYxLlVzZXJQYW5lbFB1c2hHZXRBdmFpbGFibGVDb21wYW5pZXNSZXNwb25zZS5Db21wYW55GnEKBUdyb3VwEgoKAmlkGAEgASgJEgwKBG5hbWUYAiABKAkSGAoLZGVzY3JpcHRpb24YAyABKAlIAIgBARIWCglob3dfb2Z0ZW4YBCABKAlIAYgBAUIOCgxfZGVzY3JpcHRpb25CDAoKX2hvd19vZnRlbhp0CgdDb21wYW55EgoKAmlkGAEgASgJEgwKBG5hbWUYAiABKAkSTwoGZ3JvdXBzGAMgAygLMj8ucHVibGljX2FwaS52MS5Vc2VyUGFuZWxQdXNoR2V0QXZhaWxhYmxlQ29tcGFuaWVzUmVzcG9uc2UuR3JvdXAiMAoaU2hvdWxkU2hvcFByb2R1Y3RzUmVzcG9uc2USEgoKaXNfdmlzaWJsZRgBIAEoCCI0Ch5TaG91bGRTaG93R3Vlc3RDYXRhbG9nUmVzcG9uc2USEgoKaXNfdmlzaWJsZRgBIAEoCCKGAQoTR3Vlc3RDYXRhbG9nUHJvZHVjdBISCgpwcm9kdWN0X2lkGAEgASgJEgwKBG5hbWUYAiABKAkSFwoPY292ZXJfaW1hZ2VfdXJsGAMgASgJEjQKDHByb2R1Y3RfdHlwZRgEIAEoDjIeLnB1YmxpY19hcGkudjEuVXNlclByb2R1Y3RUeXBlIk8KF0dldEd1ZXN0Q2F0YWxvZ1Jlc3BvbnNlEjQKCHByb2R1Y3RzGAEgAygLMiIucHVibGljX2FwaS52MS5HdWVzdENhdGFsb2dQcm9kdWN0IoYBCiRVc2VyUGFuZWxSZXNvbHZlUHJvZHVjdEFjY2Vzc1JlcXVlc3QSFAoMYWNjZXNzX3Rva2VuGAEgASgJEhIKCnByb2R1Y3RfaWQYAiABKAkSNAoMcHJvZHVjdF90eXBlGAMgASgOMh4ucHVibGljX2FwaS52MS5Vc2VyUHJvZHVjdFR5cGUi5wEKJVVzZXJQYW5lbFJlc29sdmVQcm9kdWN0QWNjZXNzUmVzcG9uc2USSwoGc3RhdHVzGAEgASgOMjsucHVibGljX2FwaS52MS5Vc2VyUGFuZWxSZXNvbHZlUHJvZHVjdEFjY2Vzc1Jlc3BvbnNlLlN0YXR1cxIWCglhY2Nlc3NfaWQYAiABKAlIAIgBASJLCgZTdGF0dXMSFgoSU1RBVFVTX1VOU1BFQ0lGSUVEEAASCQoFT1dORUQQARINCglOT1RfT1dORUQQAhIPCgtVTkFWQUlMQUJMRRADQgwKCl9hY2Nlc3NfaWQiRAoWR2V0U2hvcFByb2R1Y3RzUmVxdWVzdBIZCgxhY2Nlc3NfdG9rZW4YASABKAlIAIgBAUIPCg1fYWNjZXNzX3Rva2VuItgBChdHZXRTaG9wUHJvZHVjdHNSZXNwb25zZRJACghwcm9kdWN0cxgFIAMoCzIuLnB1YmxpY19hcGkudjEuR2V0U2hvcFByb2R1Y3RzUmVzcG9uc2UuUHJvZHVjdBp7CgdQcm9kdWN0EgoKAmlkGAEgASgJEgwKBG5hbWUYAiABKAkSEQoJaW1hZ2VfdXJsGAMgASgJEg0KBXByaWNlGAQgASgJEh4KEWlzX2FscmVhZHlfYm91Z2h0GAUgASgISACIAQFCFAoSX2lzX2FscmVhZHlfYm91Z2h0ItQBCh9Vc2VyUGFuZWxHZXRGaWxlRGV0YWlsc1Jlc3BvbnNlEkgKB3N1Y2Nlc3MYASABKAsyNS5wdWJsaWNfYXBpLnYxLlVzZXJQYW5lbEdldEZpbGVEZXRhaWxzUmVzcG9uc2UuUmVzdWx0SAASMAoHZmFpbHVyZRgCIAEoDjIdLnB1YmxpY19hcGkudjEuRmFpbHVyZU1lc3NhZ2VIABorCgZSZXN1bHQSEgoKcHJvamVjdF9pZBgBIAEoCRINCgVmaWxlcxgCIAMoCUIICgZyZXN1bHQiSQoeVXNlclBhbmVsR2V0RmlsZURldGFpbHNSZXF1ZXN0EhQKDGFjY2Vzc190b2tlbhgBIAEoCRIRCglhY2Nlc3NfaWQYAiABKAki+QIKIVVzZXJQYW5lbEdldFRpY2tldERldGFpbHNSZXNwb25zZRJKCgdzdWNjZXNzGAEgASgLMjcucHVibGljX2FwaS52MS5Vc2VyUGFuZWxHZXRUaWNrZXREZXRhaWxzUmVzcG9uc2UuUmVzdWx0SAASMAoHZmFpbHVyZRgCIAEoDjIdLnB1YmxpY19hcGkudjEuRmFpbHVyZU1lc3NhZ2VIABrLAQoGUmVzdWx0EhIKCnByb2plY3RfaWQYASABKAkSEgoKdGlja2V0X3VybBgCIAEoCRIUCgxwcm9kdWN0X25hbWUYAyABKAkSGQoRcHJvZHVjdF9pbWFnZV91cmwYBCABKAkSHgoRZ29vZ2xlX3dhbGxldF91cmwYBSABKAlIAIgBARIdChBhcHBsZV93YWxsZXRfdXJsGAYgASgJSAGIAQFCFAoSX2dvb2dsZV93YWxsZXRfdXJsQhMKEV9hcHBsZV93YWxsZXRfdXJsQggKBnJlc3VsdCJLCiBVc2VyUGFuZWxHZXRUaWNrZXREZXRhaWxzUmVxdWVzdBIUCgxhY2Nlc3NfdG9rZW4YASABKAkSEQoJYWNjZXNzX2lkGAIgASgJIs8ECjBVc2VyUGFuZWxHZXRBdWRpb2Jvb2tEZXRhaWxzRG93bmxvYWRVUkxzUmVzcG9uc2USWQoHc3VjY2VzcxgBIAEoCzJGLnB1YmxpY19hcGkudjEuVXNlclBhbmVsR2V0QXVkaW9ib29rRGV0YWlsc0Rvd25sb2FkVVJMc1Jlc3BvbnNlLlJlc3VsdEgAEjAKB2ZhaWx1cmUYAiABKA4yHS5wdWJsaWNfYXBpLnYxLkZhaWx1cmVNZXNzYWdlSAAamgEKGEF1ZGlvYm9va0Rvd25sb2FkRGV0YWlscxISCgpjaGFwdGVyX2lkGAEgASgJEhIKCnB1YmxpY191cmwYAiABKAkSHQoQZG93bmxvYWRhYmxlX3VybBgDIAEoCUgAiAEBEhUKCGR1cmF0aW9uGAQgASgFSAGIAQFCEwoRX2Rvd25sb2FkYWJsZV91cmxCCwoJX2R1cmF0aW9uGuYBCgZSZXN1bHQSfAoaYXVkaW9ib29rX2Rvd25sb2FkX2RldGFpbHMYASADKAsyWC5wdWJsaWNfYXBpLnYxLlVzZXJQYW5lbEdldEF1ZGlvYm9va0RldGFpbHNEb3dubG9hZFVSTHNSZXNwb25zZS5BdWRpb2Jvb2tEb3dubG9hZERldGFpbHMSMwomaXNfYXZhaWxhYmxlX3RvX2Rvd25sb2FkX2luX21vYmlsZV9hcHAYAiABKAhIAIgBAUIpCidfaXNfYXZhaWxhYmxlX3RvX2Rvd25sb2FkX2luX21vYmlsZV9hcHBCCAoGcmVzdWx0IoIBCi9Vc2VyUGFuZWxHZXRBdWRpb2Jvb2tEZXRhaWxzRG93bmxvYWRVUkxzUmVxdWVzdBIUCgxhY2Nlc3NfdG9rZW4YASABKAkSEQoJYWNjZXNzX2lkGAIgASgJEhcKCmlzX2Jyb3dzZXIYAyABKAhIAIgBAUINCgtfaXNfYnJvd3NlciKbAQokVXNlclBhbmVsR2V0QXVkaW9ib29rRGV0YWlsc1Jlc3BvbnNlEjcKCWF1ZGlvYm9vaxgBIAEoCzIiLmRhc2hib2FyZC5hdWRpb2Jvb2tzLnYxLkF1ZGlvYm9va0gAEjAKB2ZhaWx1cmUYAiABKA4yHS5wdWJsaWNfYXBpLnYxLkZhaWx1cmVNZXNzYWdlSABCCAoGcmVzdWx0Ik4KI1VzZXJQYW5lbEdldEF1ZGlvYm9va0RldGFpbHNSZXF1ZXN0EhQKDGFjY2Vzc190b2tlbhgBIAEoCRIRCglhY2Nlc3NfaWQYAiABKAkiMwobVXNlclBhbmVsR2V0UHJvZHVjdHNSZXF1ZXN0EhQKDGFjY2Vzc190b2tlbhgBIAEoCSKFAgocVXNlclBhbmVsR2V0UHJvZHVjdHNSZXNwb25zZRJFCgdzdWNjZXNzGAEgASgLMjIucHVibGljX2FwaS52MS5Vc2VyUGFuZWxHZXRQcm9kdWN0c1Jlc3BvbnNlLlJlc3VsdEgAEjAKB2ZhaWx1cmUYAiABKA4yHS5wdWJsaWNfYXBpLnYxLkZhaWx1cmVNZXNzYWdlSAAaYgoGUmVzdWx0EiwKCHByb2R1Y3RzGAEgAygLMhoucHVibGljX2FwaS52MS5Vc2VyUHJvZHVjdBIZCgxjaGF0X2FwaV91cmwYAiABKAlIAIgBAUIPCg1fY2hhdF9hcGlfdXJsQggKBnJlc3VsdCIuChZVc2VyUGFuZWxMb2dvdXRSZXF1ZXN0EhQKDGFjY2Vzc190b2tlbhgBIAEoCSK0AQoeVXNlclBhbmVsTG9naW5XaXRoQ29kZVJlc3BvbnNlEhYKDGFjY2Vzc190b2tlbhgBIAEoCUgAEjAKB2ZhaWx1cmUYAiABKA4yHS5wdWJsaWNfYXBpLnYxLkZhaWx1cmVNZXNzYWdlSAASEgoFZW1haWwYAyABKAlIAYgBARIUCgd1c2VyX2lkGAQgASgJSAKIAQFCCAoGcmVzdWx0QggKBl9lbWFpbEIKCghfdXNlcl9pZCJ3Ch1Vc2VyUGFuZWxMb2dpbldpdGhDb2RlUmVxdWVzdBIMCgRjb2RlGAEgASgFEhIKBWVtYWlsGAIgASgJSACIAQESGQoMY2hhbGxlbmdlX2lkGAMgASgJSAGIAQFCCAoGX2VtYWlsQg8KDV9jaGFsbGVuZ2VfaWQiiAIKFlVzZXJQYW5lbExvZ2luUmVzcG9uc2USPwoHc3VjY2VzcxgBIAEoCzIsLnB1YmxpY19hcGkudjEuVXNlclBhbmVsTG9naW5SZXNwb25zZS5SZXN1bHRIABIwCgdmYWlsdXJlGAIgASgOMh0ucHVibGljX2FwaS52MS5GYWlsdXJlTWVzc2FnZUgAGnEKBlJlc3VsdBIQCghyZXRyeV9pbhgBIAEoBRI/Cg9kZWxpdmVyeV9tZXRob2QYAiABKA4yJi5wdWJsaWNfYXBpLnYxLkxvZ2luQ29kZURlbGl2ZXJ5TWV0aG9kEhQKDGNoYWxsZW5nZV9pZBgDIAEoCUIICgZyZXN1bHQiuAEKFVVzZXJQYW5lbExvZ2luUmVxdWVzdBINCgVlbWFpbBgBIAEoCRIfChJyZWd1bGF0aW9uc19hY2NlcHQYAiABKAhIAIgBARI/Cg9kZWxpdmVyeV9tZXRob2QYAyABKA4yJi5wdWJsaWNfYXBpLnYxLkxvZ2luQ29kZURlbGl2ZXJ5TWV0aG9kEhcKD3R1cm5zdGlsZV90b2tlbhgEIAEoCUIVChNfcmVndWxhdGlvbnNfYWNjZXB0IjkKF0dldE9yZGVyUmV0cnlVcmxSZXF1ZXN0EgoKAmlkGAEgASgJEhIKCnByb2plY3RfaWQYAiABKAkivwEKGEdldE9yZGVyUmV0cnlVcmxSZXNwb25zZRI+CgN1cmwYASABKAsyLy5wdWJsaWNfYXBpLnYxLkdldE9yZGVyUmV0cnlVcmxSZXNwb25zZS5TdWNjZXNzSAASEQoHZmFpbHVyZRgCIAEoCUgAGkYKB1N1Y2Nlc3MSCwoDdXJsGAEgASgJEi4KCmV4cGlyZXNfYXQYAiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wQggKBnJlc3VsdCIxCg9HZXRPcmRlclJlcXVlc3QSCgoCaWQYASABKAkSEgoKcHJvamVjdF9pZBgCIAEoCSJ8ChBHZXRPcmRlclJlc3BvbnNlEg8KAmlkGAEgASgJSACIAQESIgoFaXRlbXMYAiADKAsyEy5wdWJsaWNfYXBpLnYxLkl0ZW0SLAoHZGV0YWlscxgDIAEoCzIbLnB1YmxpY19hcGkudjEuT3JkZXJEZXRhaWxzQgUKA19pZCLvAgoMT3JkZXJEZXRhaWxzEjUKBWl0ZW1zGAEgAygLMiYucHVibGljX2FwaS52MS5PcmRlckRldGFpbHMuU2luZ2xlSXRlbRIjCgdnYXRld2F5GAIgASgOMhIuY29tbW9uLnYxLkdhdGV3YXkSEwoGc3RhdHVzGAMgASgJSACIAQESFgoJb3JkZXJfcmVmGAQgASgJSAGIAQESGwoOcGF5bWVudF9tZXRob2QYBSABKAlIAogBARqMAQoKU2luZ2xlSXRlbRIKCgJpZBgBIAEoCRIWCglpbWFnZV91cmwYAiABKAlIAIgBARIMCgRuYW1lGAMgASgJEhAKCHF1YW50aXR5GAQgASgFEhQKDHByaWNlX2Ftb3VudBgFIAEoAxIWCg5wcmljZV9jdXJyZW5jeRgGIAEoCUIMCgpfaW1hZ2VfdXJsQgkKB19zdGF0dXNCDAoKX29yZGVyX3JlZkIRCg9fcGF5bWVudF9tZXRob2Qi0QEKBEl0ZW0SCgoCaWQYASABKAkSDAoEbmFtZRgCIAEoCRIRCglpbWFnZV91cmwYAyABKAkSPAoRZmlsZV9kb3dubG9hZGFibGUYBCABKAsyHy5wdWJsaWNfYXBpLnYxLkZpbGVEb3dubG9hZGFibGVIABItCglhdWRpb2Jvb2sYBSABKAsyGC5wdWJsaWNfYXBpLnYxLkF1ZGlvYm9va0gAEicKBnRpY2tldBgGIAEoCzIVLnB1YmxpY19hcGkudjEuVGlja2V0SABCBgoEaXRlbSIkChBGaWxlRG93bmxvYWRhYmxlEhAKCGZpbGVfdXJsGAEgASgJIiUKCUF1ZGlvYm9vaxIYChBhcHBfZG93bmxvYWRfdXJsGAEgASgJIoEBCgZUaWNrZXQSEQoJdGlja2V0X2lkGAEgASgJEhsKDmFwcGxlX3Bhc3NfdXJsGAIgASgJSACIAQESHgoRZ29vZ2xlX3RpY2tldF91cmwYAyABKAlIAYgBAUIRCg9fYXBwbGVfcGFzc191cmxCFAoSX2dvb2dsZV90aWNrZXRfdXJsIpkDCgtVc2VyUHJvZHVjdBISCgpwcm9qZWN0X2lkGAEgASgJEhQKDHByb2plY3RfbmFtZRgCIAEoCRISCgpwcm9kdWN0X2lkGAMgASgJEhQKDHByb2R1Y3RfbmFtZRgEIAEoCRIbChNwcm9kdWN0X2Rlc2NyaXB0aW9uGAUgASgJEhkKEXByb2R1Y3RfaW1hZ2VfdXJsGAYgASgJEjQKDHByb2R1Y3RfdHlwZRgHIAEoDjIeLnB1YmxpY19hcGkudjEuVXNlclByb2R1Y3RUeXBlEhEKCWFjY2Vzc19pZBgIIAEoCRI3Cg1wcm9qZWN0X3RoZW1lGAkgASgLMhsucHVibGljX2FwaS52MS5Qcm9qZWN0VGhlbWVIAIgBARIgChNwcm9qZWN0X2Rlc2NyaXB0aW9uGAogASgJSAGIAQESHAoPY2hhdF9wcm9qZWN0X2lkGAsgASgJSAKIAQFCEAoOX3Byb2plY3RfdGhlbWVCFgoUX3Byb2plY3RfZGVzY3JpcHRpb25CEgoQX2NoYXRfcHJvamVjdF9pZCJ1CgxCb29sUmVzcG9uc2USKQoHc3VjY2VzcxgBIAEoCzIWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eUgAEjAKB2ZhaWx1cmUYAiABKA4yHS5wdWJsaWNfYXBpLnYxLkZhaWx1cmVNZXNzYWdlSABCCAoGcmVzdWx0Im4KEFB1c2hFdmVudFJlcXVlc3QSFAoMYWNjZXNzX3Rva2VuGAEgASgJEhcKD25vdGlmaWNhdGlvbl9pZBgCIAEoCRIrCgVldmVudBgDIAEoDjIcLmNvbW1vbi52MS5Ob3RpZmljYXRpb25FdmVudCKtAQoaUHVzaFNlbmREZXZpY2VUb2tlblJlcXVlc3QSFAoMYWNjZXNzX3Rva2VuGAEgASgJEjcKB3BheWxvYWQYAiABKAsyJi5jb21tb24udjEuUHVzaE5vdGlmaWNhdGlvbkRldmljZVRva2VuEiQKF2lzX25vdGlmaWNhdGlvbl9ncmFudGVkGAMgASgISACIAQFCGgoYX2lzX25vdGlmaWNhdGlvbl9ncmFudGVkIsIBCgxQcm9qZWN0VGhlbWUSFgoJaW1hZ2VfdXJsGAEgASgJSACIAQESGwoOaW1hZ2VfZGFya191cmwYAiABKAlIAYgBARIYCgticmFuZF9jb2xvchgDIAEoCUgCiAEBEh0KEGJyYW5kX2NvbG9yX2RhcmsYBCABKAlIA4gBAUIMCgpfaW1hZ2VfdXJsQhEKD19pbWFnZV9kYXJrX3VybEIOCgxfYnJhbmRfY29sb3JCEwoRX2JyYW5kX2NvbG9yX2RhcmsijgEKHEdldFB1YmxpY09yZGVyRGV0YWlsc1JlcXVlc3QSEgoKcHJvamVjdF9pZBgBIAEoCRIQCghvcmRlcl9pZBgCIAEoCRISCgVlbWFpbBgDIAEoCUgAiAEBEhkKDGFjY2Vzc190b2tlbhgEIAEoCUgBiAEBQggKBl9lbWFpbEIPCg1fYWNjZXNzX3Rva2VuInAKHUdldFB1YmxpY09yZGVyRGV0YWlsc1Jlc3BvbnNlEjIKBW9yZGVyGAEgASgLMiEucHVibGljX2FwaS52MS5QdWJsaWNPcmRlckRldGFpbHNIABIRCgdmYWlsdXJlGAIgASgJSABCCAoGcmVzdWx0IoYGChJQdWJsaWNPcmRlckRldGFpbHMSEAoIb3JkZXJfaWQYASABKAkSDgoGc3RhdHVzGAIgASgJEh4KEXByb2Nlc3Npbmdfc3RhdHVzGAMgASgJSACIAQESFQoNY3VzdG9tZXJfbmFtZRgEIAEoCRIWCg5jdXN0b21lcl9lbWFpbBgFIAEoCRIbCg5jdXN0b21lcl9waG9uZRgGIAEoCUgBiAEBEh0KEGRlbGl2ZXJ5X2FkZHJlc3MYByABKAlIAogBARIcCg9kZWxpdmVyeV9tZXRob2QYCCABKAlIA4gBARIcCg90cmFja2luZ19udW1iZXIYCSABKAlIBIgBARItCgVpdGVtcxgKIAMoCzIeLnB1YmxpY19hcGkudjEuUHVibGljT3JkZXJJdGVtEjMKCGNvbW1lbnRzGAsgAygLMiEucHVibGljX2FwaS52MS5QdWJsaWNPcmRlckNvbW1lbnQSFAoMdG90YWxfYW1vdW50GAwgASgDEhAKCGN1cnJlbmN5GA0gASgJEi4KCmNyZWF0ZWRfYXQYDiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEjMKCnVwZGF0ZWRfYXQYDyABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wSAWIAQESEwoLaXNfdmVyaWZpZWQYECABKAgSFQoNY29tbWVudF9jb3VudBgRIAEoBRI3Cg1wcm9qZWN0X3RoZW1lGBIgASgLMhsucHVibGljX2FwaS52MS5Qcm9qZWN0VGhlbWVIBogBARIZCgxwcm9qZWN0X25hbWUYEyABKAlIB4gBAUIUChJfcHJvY2Vzc2luZ19zdGF0dXNCEQoPX2N1c3RvbWVyX3Bob25lQhMKEV9kZWxpdmVyeV9hZGRyZXNzQhIKEF9kZWxpdmVyeV9tZXRob2RCEgoQX3RyYWNraW5nX251bWJlckINCgtfdXBkYXRlZF9hdEIQCg5fcHJvamVjdF90aGVtZUIPCg1fcHJvamVjdF9uYW1lIngKD1B1YmxpY09yZGVySXRlbRIMCgRuYW1lGAEgASgJEhAKCHF1YW50aXR5GAIgASgFEg0KBXByaWNlGAMgASgDEhAKCGN1cnJlbmN5GAQgASgJEhYKCWltYWdlX3VybBgFIAEoCUgAiAEBQgwKCl9pbWFnZV91cmwioAEKElB1YmxpY09yZGVyQ29tbWVudBIKCgJpZBgBIAEoBRIPCgdtZXNzYWdlGAIgASgJEhMKC2F1dGhvcl90eXBlGAMgASgJEhgKC2F1dGhvcl9uYW1lGAQgASgJSACIAQESLgoKY3JlYXRlZF9hdBgFIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBCDgoMX2F1dGhvcl9uYW1lImsKHEFkZFB1YmxpY09yZGVyQ29tbWVudFJlcXVlc3QSEgoKcHJvamVjdF9pZBgBIAEoCRIQCghvcmRlcl9pZBgCIAEoCRIPCgdtZXNzYWdlGAMgASgJEhQKDGFjY2Vzc190b2tlbhgEIAEoCSKRAQodQWRkUHVibGljT3JkZXJDb21tZW50UmVzcG9uc2USNAoHY29tbWVudBgBIAEoCzIhLnB1YmxpY19hcGkudjEuUHVibGljT3JkZXJDb21tZW50SAASMAoHZmFpbHVyZRgCIAEoDjIdLnB1YmxpY19hcGkudjEuRmFpbHVyZU1lc3NhZ2VIAEIICgZyZXN1bHQiRQodR2V0T3JkZXJGb3JUZXN0aW1vbmlhbFJlcXVlc3QSEgoKcHJvamVjdF9pZBgBIAEoCRIQCghvcmRlcl9pZBgCIAEoCSLCAwoeR2V0T3JkZXJGb3JUZXN0aW1vbmlhbFJlc3BvbnNlEkgKBW9yZGVyGAEgASgLMjcucHVibGljX2FwaS52MS5HZXRPcmRlckZvclRlc3RpbW9uaWFsUmVzcG9uc2UuT3JkZXJJbmZvSAASEQoHZmFpbHVyZRgCIAEoCUgAGoABCgxPcmRlclByb2R1Y3QSEgoKcHJvZHVjdF9pZBgBIAEoCRIUCgxwcm9kdWN0X25hbWUYAiABKAkSHgoRcHJvZHVjdF9pbWFnZV91cmwYAyABKAlIAIgBARIQCghxdWFudGl0eRgEIAEoBUIUChJfcHJvZHVjdF9pbWFnZV91cmwatQEKCU9yZGVySW5mbxIQCghvcmRlcl9pZBgBIAEoCRIVCg1jdXN0b21lcl9uYW1lGAIgASgJEhYKDmN1c3RvbWVyX2VtYWlsGAMgASgJEkwKCHByb2R1Y3RzGAQgAygLMjoucHVibGljX2FwaS52MS5HZXRPcmRlckZvclRlc3RpbW9uaWFsUmVzcG9uc2UuT3JkZXJQcm9kdWN0EhkKEWFscmVhZHlfc3VibWl0dGVkGAUgASgIQggKBnJlc3VsdCKzAQoYU3VibWl0VGVzdGltb25pYWxSZXF1ZXN0EhIKCnByb2plY3RfaWQYASABKAkSEAoIb3JkZXJfaWQYAiABKAkSFQoNY3VzdG9tZXJfbmFtZRgDIAEoCRIWCglwaG90b191cmwYBCABKAlIAIgBARIOCgZyYXRpbmcYBSABKAUSDwoHbWVzc2FnZRgGIAEoCRITCgtwcm9kdWN0X2lkcxgHIAMoCUIMCgpfcGhvdG9fdXJsIoIBChlTdWJtaXRUZXN0aW1vbmlhbFJlc3BvbnNlEikKB3N1Y2Nlc3MYASABKAsyFi5nb29nbGUucHJvdG9idWYuRW1wdHlIABIwCgdmYWlsdXJlGAIgASgOMh0ucHVibGljX2FwaS52MS5GYWlsdXJlTWVzc2FnZUgAQggKBnJlc3VsdCJmCh5HZXRUZXN0aW1vbmlhbFVwbG9hZFVybFJlcXVlc3QSEgoKcHJvamVjdF9pZBgBIAEoCRIQCghvcmRlcl9pZBgCIAEoCRIQCghmaWxlbmFtZRgDIAEoCRIMCgRzaXplGAQgASgDIkkKH0dldFRlc3RpbW9uaWFsVXBsb2FkVXJsUmVzcG9uc2USEgoKdXBsb2FkX3VybBgBIAEoCRISCgpwdWJsaWNfdXJsGAIgASgJKrQBChdMb2dpbkNvZGVEZWxpdmVyeU1ldGhvZBIqCiZMT0dJTl9DT0RFX0RFTElWRVJZX01FVEhPRF9VTlNQRUNJRklFRBAAEiQKIExPR0lOX0NPREVfREVMSVZFUllfTUVUSE9EX0VNQUlMEAESIwofTE9HSU5fQ09ERV9ERUxJVkVSWV9NRVRIT0RfUFVTSBACEiIKHkxPR0lOX0NPREVfREVMSVZFUllfTUVUSE9EX1NNUxADKuIBCg9Vc2VyUHJvZHVjdFR5cGUSHQoZVVNFUl9QUk9EVUNUX1RZUEVfVU5LTk9XThAAEhsKF1VTRVJfUFJPRFVDVF9UWVBFX0FVRElPEAESGgoWVVNFUl9QUk9EVUNUX1RZUEVfRklMRRACEhwKGFVTRVJfUFJPRFVDVF9UWVBFX1RJQ0tFVBADEhwKGFVTRVJfUFJPRFVDVF9UWVBFX0NPVVJTRRAEEhoKFlVTRVJfUFJPRFVDVF9UWVBFX0NIQVQQBRIfChtVU0VSX1BST0RVQ1RfVFlQRV9DT01NVU5JVFkQBiq9BQoORmFpbHVyZU1lc3NhZ2USGwoXRkFJTFVSRV9NRVNTQUdFX1VOS05PV04QABIjCh9GQUlMVVJFX01FU1NBR0VfRU1BSUxfTk9UX0ZPVU5EEAESIwofRkFJTFVSRV9NRVNTQUdFX0lOQ09SUkVDVF9FTUFJTBACEiIKHkZBSUxVUkVfTUVTU0FHRV9JTkNPUlJFQ1RfQ09ERRADEjAKLEZBSUxVUkVfTUVTU0FHRV9HRU5FUkFURV9BQ0NFU1NfVE9LRU5fRkFJTEVEEAQSIQodRkFJTFVSRV9NRVNTQUdFX0xPR09VVF9GQUlMRUQQBRIlCiFGQUlMVVJFX01FU1NBR0VfUFJEVUNUU19OT1RfRk9VTkQQBhInCiNGQUlMVVJFX01FU1NBR0VfQVVESU9CT09LX05PVF9GT1VORBAHEicKI0ZBSUxVUkVfTUVTU0FHRV9JTkNPUlJFQ1RfQVVESU9CT09LEAgSIAocRkFJTFVSRV9NRVNTQUdFX1VOQVVUSE9SSVpFRBAJEiQKIEZBSUxVUkVfTUVTU0FHRV9USUNLRVRfTk9UX0ZPVU5EEAoSLworRkFJTFVSRV9NRVNTQUdFX0RFTElWRVJZX01FVEhPRF9VTkFWQUlMQUJMRRALEiMKH0ZBSUxVUkVfTUVTU0FHRV9ERUxJVkVSWV9GQUlMRUQQDBIgChxGQUlMVVJFX01FU1NBR0VfUkFURV9MSU1JVEVEEA0SIAocRkFJTFVSRV9NRVNTQUdFX0NPREVfRVhQSVJFRBAOEiUKIUZBSUxVUkVfTUVTU0FHRV9UT09fTUFOWV9BVFRFTVBUUxAPEiQKIEZBSUxVUkVfTUVTU0FHRV9DQVBUQ0hBX1JFUVVJUkVEEBASIwofRkFJTFVSRV9NRVNTQUdFX0NBUFRDSEFfSU5WQUxJRBARKo8BChJOb3RpZmljYXRpb25NZXRob2QSHwobTk9USUZJQ0FUSU9OX01FVEhPRF9VTktOT1dOEAASHQoZTk9USUZJQ0FUSU9OX01FVEhPRF9FTUFJTBABEhsKF05PVElGSUNBVElPTl9NRVRIT0RfU01TEAISHAoYTk9USUZJQ0FUSU9OX01FVEhPRF9QVVNIEAMyuSYKEFB1YmxpY0FwaVNlcnZpY2USSwoIR2V0T3JkZXISHi5wdWJsaWNfYXBpLnYxLkdldE9yZGVyUmVxdWVzdBofLnB1YmxpY19hcGkudjEuR2V0T3JkZXJSZXNwb25zZRJOCglHZXRPcmRlcnMSHy5wdWJsaWNfYXBpLnYxLkdldE9yZGVyc1JlcXVlc3QaIC5wdWJsaWNfYXBpLnYxLkdldE9yZGVyc1Jlc3BvbnNlEmMKEEdldE9yZGVyUmV0cnlVcmwSJi5wdWJsaWNfYXBpLnYxLkdldE9yZGVyUmV0cnlVcmxSZXF1ZXN0GicucHVibGljX2FwaS52MS5HZXRPcmRlclJldHJ5VXJsUmVzcG9uc2USXQoOVXNlclBhbmVsTG9naW4SJC5wdWJsaWNfYXBpLnYxLlVzZXJQYW5lbExvZ2luUmVxdWVzdBolLnB1YmxpY19hcGkudjEuVXNlclBhbmVsTG9naW5SZXNwb25zZRJ1ChZVc2VyUGFuZWxMb2dpbldpdGhDb2RlEiwucHVibGljX2FwaS52MS5Vc2VyUGFuZWxMb2dpbldpdGhDb2RlUmVxdWVzdBotLnB1YmxpY19hcGkudjEuVXNlclBhbmVsTG9naW5XaXRoQ29kZVJlc3BvbnNlElUKD1VzZXJQYW5lbExvZ291dBIlLnB1YmxpY19hcGkudjEuVXNlclBhbmVsTG9nb3V0UmVxdWVzdBobLnB1YmxpY19hcGkudjEuQm9vbFJlc3BvbnNlEmMKFlVzZXJQYW5lbERlbGV0ZUFjY291bnQSLC5wdWJsaWNfYXBpLnYxLlVzZXJQYW5lbERlbGV0ZUFjY291bnRSZXF1ZXN0GhsucHVibGljX2FwaS52MS5Cb29sUmVzcG9uc2USbwoUVXNlclBhbmVsR2V0UHJvZHVjdHMSKi5wdWJsaWNfYXBpLnYxLlVzZXJQYW5lbEdldFByb2R1Y3RzUmVxdWVzdBorLnB1YmxpY19hcGkudjEuVXNlclBhbmVsR2V0UHJvZHVjdHNSZXNwb25zZRKHAQocVXNlclBhbmVsR2V0QXVkaW9ib29rRGV0YWlscxIyLnB1YmxpY19hcGkudjEuVXNlclBhbmVsR2V0QXVkaW9ib29rRGV0YWlsc1JlcXVlc3QaMy5wdWJsaWNfYXBpLnYxLlVzZXJQYW5lbEdldEF1ZGlvYm9va0RldGFpbHNSZXNwb25zZRKrAQooVXNlclBhbmVsR2V0QXVkaW9ib29rRGV0YWlsc0Rvd25sb2FkVVJMcxI+LnB1YmxpY19hcGkudjEuVXNlclBhbmVsR2V0QXVkaW9ib29rRGV0YWlsc0Rvd25sb2FkVVJMc1JlcXVlc3QaPy5wdWJsaWNfYXBpLnYxLlVzZXJQYW5lbEdldEF1ZGlvYm9va0RldGFpbHNEb3dubG9hZFVSTHNSZXNwb25zZRJ4ChdVc2VyUGFuZWxHZXRGaWxlRGV0YWlscxItLnB1YmxpY19hcGkudjEuVXNlclBhbmVsR2V0RmlsZURldGFpbHNSZXF1ZXN0Gi4ucHVibGljX2FwaS52MS5Vc2VyUGFuZWxHZXRGaWxlRGV0YWlsc1Jlc3BvbnNlEn4KGVVzZXJQYW5lbEdldFRpY2tldERldGFpbHMSLy5wdWJsaWNfYXBpLnYxLlVzZXJQYW5lbEdldFRpY2tldERldGFpbHNSZXF1ZXN0GjAucHVibGljX2FwaS52MS5Vc2VyUGFuZWxHZXRUaWNrZXREZXRhaWxzUmVzcG9uc2USWAoTUHVzaFNlbmREZXZpY2VUb2tlbhIpLnB1YmxpY19hcGkudjEuUHVzaFNlbmREZXZpY2VUb2tlblJlcXVlc3QaFi5nb29nbGUucHJvdG9idWYuRW1wdHkSRAoJUHVzaEV2ZW50Eh8ucHVibGljX2FwaS52MS5QdXNoRXZlbnRSZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5ElcKElNob3VsZFNob3BQcm9kdWN0cxIWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eRopLnB1YmxpY19hcGkudjEuU2hvdWxkU2hvcFByb2R1Y3RzUmVzcG9uc2USXwoWU2hvdWxkU2hvd0d1ZXN0Q2F0YWxvZxIWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eRotLnB1YmxpY19hcGkudjEuU2hvdWxkU2hvd0d1ZXN0Q2F0YWxvZ1Jlc3BvbnNlElEKD0dldEd1ZXN0Q2F0YWxvZxIWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eRomLnB1YmxpY19hcGkudjEuR2V0R3Vlc3RDYXRhbG9nUmVzcG9uc2USigEKHVVzZXJQYW5lbFJlc29sdmVQcm9kdWN0QWNjZXNzEjMucHVibGljX2FwaS52MS5Vc2VyUGFuZWxSZXNvbHZlUHJvZHVjdEFjY2Vzc1JlcXVlc3QaNC5wdWJsaWNfYXBpLnYxLlVzZXJQYW5lbFJlc29sdmVQcm9kdWN0QWNjZXNzUmVzcG9uc2USYAoPR2V0U2hvcFByb2R1Y3RzEiUucHVibGljX2FwaS52MS5HZXRTaG9wUHJvZHVjdHNSZXF1ZXN0GiYucHVibGljX2FwaS52MS5HZXRTaG9wUHJvZHVjdHNSZXNwb25zZRJMCg1EaWRCdXlQcm9kdWN0EiMucHVibGljX2FwaS52MS5EaWRCdXlQcm9kdWN0UmVxdWVzdBoWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eRJ4ChdHZXRBcHBTdG9yZUFjY291bnRUb2tlbhItLnB1YmxpY19hcGkudjEuR2V0QXBwU3RvcmVBY2NvdW50VG9rZW5SZXF1ZXN0Gi4ucHVibGljX2FwaS52MS5HZXRBcHBTdG9yZUFjY291bnRUb2tlblJlc3BvbnNlEnUKFlZlcmlmeUFwcFN0b3JlUHVyY2hhc2USLC5wdWJsaWNfYXBpLnYxLlZlcmlmeUFwcFN0b3JlUHVyY2hhc2VSZXF1ZXN0Gi0ucHVibGljX2FwaS52MS5WZXJpZnlBcHBTdG9yZVB1cmNoYXNlUmVzcG9uc2USeAoXR2V0QXBwU3RvcmVFbnRpdGxlbWVudHMSLS5wdWJsaWNfYXBpLnYxLkdldEFwcFN0b3JlRW50aXRsZW1lbnRzUmVxdWVzdBouLnB1YmxpY19hcGkudjEuR2V0QXBwU3RvcmVFbnRpdGxlbWVudHNSZXNwb25zZRJ7ChhSZXN0b3JlQXBwU3RvcmVQdXJjaGFzZXMSLi5wdWJsaWNfYXBpLnYxLlJlc3RvcmVBcHBTdG9yZVB1cmNoYXNlc1JlcXVlc3QaLy5wdWJsaWNfYXBpLnYxLlJlc3RvcmVBcHBTdG9yZVB1cmNoYXNlc1Jlc3BvbnNlEmQKGUNsZWFyQXBwU3RvcmVBY2NvdW50VG9rZW4SLy5wdWJsaWNfYXBpLnYxLkNsZWFyQXBwU3RvcmVBY2NvdW50VG9rZW5SZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5EmkKEkdldFN0b3JlS2l0Q2F0YWxvZxIoLnB1YmxpY19hcGkudjEuR2V0U3RvcmVLaXRDYXRhbG9nUmVxdWVzdBopLnB1YmxpY19hcGkudjEuR2V0U3RvcmVLaXRDYXRhbG9nUmVzcG9uc2USeAoXR2V0Tm90aWZpY2F0aW9uU2V0dGluZ3MSLS5wdWJsaWNfYXBpLnYxLkdldE5vdGlmaWNhdGlvblNldHRpbmdzUmVxdWVzdBouLnB1YmxpY19hcGkudjEuR2V0Tm90aWZpY2F0aW9uU2V0dGluZ3NSZXNwb25zZRKNAQoeR2V0Tm90aWZpY2F0aW9uU2V0dGluZ3NEZXRhaWxzEjQucHVibGljX2FwaS52MS5HZXROb3RpZmljYXRpb25TZXR0aW5nc0RldGFpbHNSZXF1ZXN0GjUucHVibGljX2FwaS52MS5HZXROb3RpZmljYXRpb25TZXR0aW5nc0RldGFpbHNSZXNwb25zZRJyCiBVcGRhdGVHbG9iYWxOb3RpZmljYXRpb25TZXR0aW5ncxI2LnB1YmxpY19hcGkudjEuVXBkYXRlR2xvYmFsTm90aWZpY2F0aW9uU2V0dGluZ3NSZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5EmYKGlVwZGF0ZU5vdGlmaWNhdGlvblNldHRpbmdzEjAucHVibGljX2FwaS52MS5VcGRhdGVOb3RpZmljYXRpb25TZXR0aW5nc1JlcXVlc3QaFi5nb29nbGUucHJvdG9idWYuRW1wdHkSdQoWR2V0Tm90aWZpY2F0aW9uSGlzdG9yeRIsLnB1YmxpY19hcGkudjEuR2V0Tm90aWZpY2F0aW9uSGlzdG9yeVJlcXVlc3QaLS5wdWJsaWNfYXBpLnYxLkdldE5vdGlmaWNhdGlvbkhpc3RvcnlSZXNwb25zZRKEAQobR2V0QXZhaWxhYmxlQ291bnRGb3JQcm9kdWN0EjEucHVibGljX2FwaS52MS5HZXRBdmFpbGFibGVDb3VudEZvclByb2R1Y3RSZXF1ZXN0GjIucHVibGljX2FwaS52MS5HZXRBdmFpbGFibGVDb3VudEZvclByb2R1Y3RSZXNwb25zZRJgCg9HZXRUaGFua1lvdVBhZ2USJS5wdWJsaWNfYXBpLnYxLkdldFRoYW5rWW91UGFnZVJlcXVlc3QaJi5wdWJsaWNfYXBpLnYxLkdldFRoYW5rWW91UGFnZVJlc3BvbnNlEmMKEEdldExvZ2luQnJhbmRpbmcSJi5wdWJsaWNfYXBpLnYxLkdldExvZ2luQnJhbmRpbmdSZXF1ZXN0GicucHVibGljX2FwaS52MS5HZXRMb2dpbkJyYW5kaW5nUmVzcG9uc2USgQEKGklzT25lQ2xpY2tQYXltZW50QXZhaWxhYmxlEjAucHVibGljX2FwaS52MS5Jc09uZUNsaWNrUGF5bWVudEF2YWlsYWJsZVJlcXVlc3QaMS5wdWJsaWNfYXBpLnYxLklzT25lQ2xpY2tQYXltZW50QXZhaWxhYmxlUmVzcG9uc2USaQoSR2V0UHJlT3JkZXJEZXRhaWxzEigucHVibGljX2FwaS52MS5HZXRQcmVPcmRlckRldGFpbHNSZXF1ZXN0GikucHVibGljX2FwaS52MS5HZXRQcmVPcmRlckRldGFpbHNSZXNwb25zZRJ7ChhBcHBsZVBheVZhbGlkYXRlTWVyY2hhbnQSLi5wdWJsaWNfYXBpLnYxLkFwcGxlUGF5VmFsaWRhdGVNZXJjaGFudFJlcXVlc3QaLy5wdWJsaWNfYXBpLnYxLkFwcGxlUGF5VmFsaWRhdGVNZXJjaGFudFJlc3BvbnNlEnsKGEF1dGhvcml6ZU9uZUNsaWNrUGF5bWVudBIuLnB1YmxpY19hcGkudjEuT25lQ2xpY2tBdXRob3JpemVQYXltZW50UmVxdWVzdBovLnB1YmxpY19hcGkudjEuT25lQ2xpY2tBdXRob3JpemVQYXltZW50UmVzcG9uc2USdgoiTm90aWZ5VXNlckFib3V0UHJvZHVjdEF2YWlsYWJpbGl0eRI4LnB1YmxpY19hcGkudjEuTm90aWZ5VXNlckFib3V0UHJvZHVjdEF2YWlsYWJpbGl0eVJlcXVlc3QaFi5nb29nbGUucHJvdG9idWYuRW1wdHkScgoVR2V0UHVibGljT3JkZXJEZXRhaWxzEisucHVibGljX2FwaS52MS5HZXRQdWJsaWNPcmRlckRldGFpbHNSZXF1ZXN0GiwucHVibGljX2FwaS52MS5HZXRQdWJsaWNPcmRlckRldGFpbHNSZXNwb25zZRJyChVBZGRQdWJsaWNPcmRlckNvbW1lbnQSKy5wdWJsaWNfYXBpLnYxLkFkZFB1YmxpY09yZGVyQ29tbWVudFJlcXVlc3QaLC5wdWJsaWNfYXBpLnYxLkFkZFB1YmxpY09yZGVyQ29tbWVudFJlc3BvbnNlEnUKFkdldE9yZGVyRm9yVGVzdGltb25pYWwSLC5wdWJsaWNfYXBpLnYxLkdldE9yZGVyRm9yVGVzdGltb25pYWxSZXF1ZXN0Gi0ucHVibGljX2FwaS52MS5HZXRPcmRlckZvclRlc3RpbW9uaWFsUmVzcG9uc2USZgoRU3VibWl0VGVzdGltb25pYWwSJy5wdWJsaWNfYXBpLnYxLlN1Ym1pdFRlc3RpbW9uaWFsUmVxdWVzdBooLnB1YmxpY19hcGkudjEuU3VibWl0VGVzdGltb25pYWxSZXNwb25zZRJ4ChdHZXRUZXN0aW1vbmlhbFVwbG9hZFVybBItLnB1YmxpY19hcGkudjEuR2V0VGVzdGltb25pYWxVcGxvYWRVcmxSZXF1ZXN0Gi4ucHVibGljX2FwaS52MS5HZXRUZXN0aW1vbmlhbFVwbG9hZFVybFJlc3BvbnNlYgZwcm90bzM",[e,a,l,n,G,b]);var H=s(t,17),T=s(t,18);var j=s(t,76);var w=g(t,0);export{V as a,S as b,l as c,H as d,T as e,j as f,w as g};
2
- //# sourceMappingURL=chunk-2G46TAUX.mjs.map
1
+ import{fileDesc as c,messageDesc as a}from"@bufbuild/protobuf/codegenv2";var t=c("Chdjb21tb24vdjEvYWRkcmVzcy5wcm90bxIJY29tbW9uLnYxIocBCgdBZGRyZXNzEgwKBG5hbWUYASABKAkSDQoFbGluZTEYAiABKAkSEgoFbGluZTIYAyABKAlIAIgBARIMCgRjaXR5GAQgASgJEg8KB2NvdW50cnkYBSABKAkSFQoIemlwX2NvZGUYBiABKAlIAYgBAUIICgZfbGluZTJCCwoJX3ppcF9jb2RlIq4BCg5CaWxsaW5nQWRkcmVzcxIMCgRuYW1lGAEgASgJEg0KBWxpbmUxGAIgASgJEhIKBWxpbmUyGAMgASgJSACIAQESDAoEY2l0eRgEIAEoCRIPCgdjb3VudHJ5GAUgASgJEhUKCHppcF9jb2RlGAYgASgJSAGIAQESEwoGdGF4X2lkGAcgASgJSAKIAQFCCAoGX2xpbmUyQgsKCV96aXBfY29kZUIJCgdfdGF4X2lkQk5aTGdpdGh1Yi5jb20vZW1tZW1zL3N1cGVyLWNhcnQvYXBwcy9zcnYtd29ya2VyL3V0aWxzL21vZGVscy9jb21tb24vdjE7Y29tbW9udjFiBnByb3RvMw"),h=a(t,0),Z=a(t,1);import{enumDesc as f,fileDesc as g,messageDesc as o,serviceDesc as G}from"@bufbuild/protobuf/codegenv2";import{enumDesc as X,fileDesc as p}from"@bufbuild/protobuf/codegenv2";var l=p("Chdjb21tb24vdjEvZ2F0ZXdheS5wcm90bxIJY29tbW9uLnYxKs8BCgdHYXRld2F5Eg8KC0dBVEVXQVlfQUxMEAASFwoTR0FURVdBWV9QUlpFTEVXWV8yNBABEhIKDkdBVEVXQVlfU1RSSVBFEAISEAoMR0FURVdBWV9UUEFZEAMSHAoYR0FURVdBWV9DQVNIX09OX0RFTElWRVJZEAQSEAoMR0FURVdBWV9GUkVFEAUSFgoSR0FURVdBWV9JTlBPU1RfUEFZEAYSEAoMR0FURVdBWV9QQVlVEAcSGgoWR0FURVdBWV9NQU5VQUxfUEFZTUVOVBAIQk5aTGdpdGh1Yi5jb20vZW1tZW1zL3N1cGVyLWNhcnQvYXBwcy9zcnYtd29ya2VyL3V0aWxzL21vZGVscy9jb21tb24vdjE7Y29tbW9udjFiBnByb3RvMw");import{enumDesc as B,fileDesc as d,messageDesc as F}from"@bufbuild/protobuf/codegenv2";import{file_google_protobuf_timestamp as r}from"@bufbuild/protobuf/wkt";var n=d("CiJjb21tb24vdjEvcHVzaF9ub3RpZmljYXRpb25zLnByb3RvEgljb21tb24udjEi9gEKG1B1c2hOb3RpZmljYXRpb25EZXZpY2VUb2tlbhIXCgpwdXNoX3Rva2VuGAIgASgJSACIAQESNAoLZXhwaXJlX3RpbWUYAyABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wSAGIAQESEwoGcDI1NmRoGAQgASgJSAKIAQESFQoIZW5kcG9pbnQYBSABKAlIA4gBARIlCghwbGF0Zm9ybRgGIAEoDjITLmNvbW1vbi52MS5QbGF0Zm9ybUINCgtfcHVzaF90b2tlbkIOCgxfZXhwaXJlX3RpbWVCCQoHX3AyNTZkaEILCglfZW5kcG9pbnQi0AEKF1B1c2hOb3RpZmljYXRpb25QYXlsb2FkEg0KBXRpdGxlGAIgASgJEhUKCG9wZW5fdXJsGAMgASgJSAGIAQESDgoEYm9keRgEIAEoCUgAEjoKBGRhdGEYBSADKAsyLC5jb21tb24udjEuUHVzaE5vdGlmaWNhdGlvblBheWxvYWQuRGF0YUVudHJ5GisKCURhdGFFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAk6AjgBQgkKB21lc3NhZ2VCCwoJX29wZW5fdXJsKngKCFBsYXRmb3JtEhgKFFBMQVRGT1JNX1VOU1BFQ0lGSUVEEAASEAoMUExBVEZPUk1fV0VCEAESGAoUUExBVEZPUk1fSU9TX1NBTkRCT1gQAhIQCgxQTEFURk9STV9JT1MQAxIUChBQTEFURk9STV9BTkRST0lEEAQqdAoRTm90aWZpY2F0aW9uRXZlbnQSEQoNRVZFTlRfVU5LTk9XThAAEhIKDkVWRU5UX1JFQ0VJVkVEEAESEAoMRVZFTlRfT1BFTkVEEAISEQoNRVZFTlRfQ0xJQ0tFRBADEhMKD0VWRU5UX0RJU01JU1NFRBAEKpkBChlOb3RpZmljYXRpb25Hcm91cEhvd09mdGVuEicKI05PVElGSUNBVElPTl9HUk9VUF9IT1dfT0ZURU5fUkFSRUxZEAASJgoiTk9USUZJQ0FUSU9OX0dST1VQX0hPV19PRlRFTl9PRlRFThABEisKJ05PVElGSUNBVElPTl9HUk9VUF9IT1dfT0ZURU5fVkVSWV9PRlRFThACQk5aTGdpdGh1Yi5jb20vZW1tZW1zL3N1cGVyLWNhcnQvYXBwcy9zcnYtd29ya2VyL3V0aWxzL21vZGVscy9jb21tb24vdjE7Y29tbW9udjFiBnByb3RvMw",[r]);import{enumDesc as I,fileDesc as u,messageDesc as k,serviceDesc as v}from"@bufbuild/protobuf/codegenv2";import{file_google_protobuf_empty as R,file_google_protobuf_timestamp as A}from"@bufbuild/protobuf/wkt";var i=u("Ch1kYXNoYm9hcmQvdjEvYXVkaW9ib29rcy5wcm90bxIXZGFzaGJvYXJkLmF1ZGlvYm9va3MudjEiFgoUR2V0QXVkaW9ib29rc1JlcXVlc3QiIQoTR2V0QXVkaW9ib29rUmVxdWVzdBIKCgJpZBgBIAEoCSKrAQoHQ2hhcHRlchIKCgJpZBgBIAEoCRIMCgRuYW1lGAIgASgJEhgKC2Rlc2NyaXB0aW9uGAMgASgJSACIAQESGgoNbXVsdGltZWRpYV9pZBgEIAEoCUgBiAEBEi4KCmNyZWF0ZWRfYXQYBSABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wQg4KDF9kZXNjcmlwdGlvbkIQCg5fbXVsdGltZWRpYV9pZCLzAgoJQXVkaW9ib29rEg8KAmlkGAEgASgJSACIAQESEgoKcHJvamVjdF9pZBgCIAEoCRIMCgRuYW1lGAMgASgJEhMKC2Rlc2NyaXB0aW9uGAQgASgJEhMKC2NvdmVyX2ltYWdlGAUgASgJEhcKD3RodW1ibmFpbF9pbWFnZRgGIAEoCRIyCghjaGFwdGVycxgHIAMoCzIgLmRhc2hib2FyZC5hdWRpb2Jvb2tzLnYxLkNoYXB0ZXISFwoPaXNfZG93bmxvYWRhYmxlGAggASgIEi4KCmNyZWF0ZWRfYXQYCSABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEiQKF2lzX2Jyb3dzZXJfZG93bmxvYWRhYmxlGAogASgISAGIAQESGQoMYWNjZW50X2NvbG9yGAsgASgJSAKIAQFCBQoDX2lkQhoKGF9pc19icm93c2VyX2Rvd25sb2FkYWJsZUIPCg1fYWNjZW50X2NvbG9yIk8KFUdldEF1ZGlvYm9va3NSZXNwb25zZRI2CgphdWRpb2Jvb2tzGAEgAygLMiIuZGFzaGJvYXJkLmF1ZGlvYm9va3MudjEuQXVkaW9ib29rImAKFEdldEF1ZGlvYm9va1Jlc3BvbnNlEjoKCWF1ZGlvYm9vaxgBIAEoCzIiLmRhc2hib2FyZC5hdWRpb2Jvb2tzLnYxLkF1ZGlvYm9va0gAiAEBQgwKCl9hdWRpb2Jvb2siVwoeQ3JlYXRlT3JVcGRhdGVBdWRpb2Jvb2tSZXF1ZXN0EjUKCWF1ZGlvYm9vaxgBIAEoCzIiLmRhc2hib2FyZC5hdWRpb2Jvb2tzLnYxLkF1ZGlvYm9vayLRAQofQ3JlYXRlT3JVcGRhdGVBdWRpb2Jvb2tSZXNwb25zZRJSCgdzdWNjZXNzGAEgASgLMj8uZGFzaGJvYXJkLmF1ZGlvYm9va3MudjEuQ3JlYXRlT3JVcGRhdGVBdWRpb2Jvb2tSZXNwb25zZS5SZXN1bHRIABI6CgdmYWlsdXJlGAIgASgOMicuZGFzaGJvYXJkLmF1ZGlvYm9va3MudjEuRmFpbHVyZU1lc3NhZ2VIABoUCgZSZXN1bHQSCgoCaWQYASABKAlCCAoGcmVzdWx0IiQKFkRlbGV0ZUF1ZGlvYm9va1JlcXVlc3QSCgoCaWQYASABKAkiVQofR2V0QXVkaW9ib29rQWNjZXNzRW1haWxzUmVxdWVzdBIUCgxhdWRpb2Jvb2tfaWQYASABKAkSEgoFZW1haWwYAiABKAlIAIgBAUIICgZfZW1haWwi+AIKIEdldEF1ZGlvYm9va0FjY2Vzc0VtYWlsc1Jlc3BvbnNlElMKB3N1Y2Nlc3MYASABKAsyQC5kYXNoYm9hcmQuYXVkaW9ib29rcy52MS5HZXRBdWRpb2Jvb2tBY2Nlc3NFbWFpbHNSZXNwb25zZS5SZXN1bHRIABI6CgdmYWlsdXJlGAIgASgOMicuZGFzaGJvYXJkLmF1ZGlvYm9va3MudjEuRmFpbHVyZU1lc3NhZ2VIABpYCgtBY2Nlc3NFbWFpbBIKCgJpZBgBIAEoCRINCgVlbWFpbBgCIAEoCRIuCgpjcmVhdGVkX2F0GAMgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBpfCgZSZXN1bHQSVQoGZW1haWxzGAEgAygLMkUuZGFzaGJvYXJkLmF1ZGlvYm9va3MudjEuR2V0QXVkaW9ib29rQWNjZXNzRW1haWxzUmVzcG9uc2UuQWNjZXNzRW1haWxCCAoGcmVzdWx0IkMKHENyZWF0ZUF1ZGlvYm9va0FjY2Vzc1JlcXVlc3QSFAoMYXVkaW9ib29rX2lkGAEgASgJEg0KBWVtYWlsGAIgASgJIjgKHERlbGV0ZUF1ZGlvYm9va0FjY2Vzc1JlcXVlc3QSGAoQc3lzdGVtX2FjY2Vzc19pZBgBIAEoCSJ/CgxCb29sUmVzcG9uc2USKQoHc3VjY2VzcxgBIAEoCzIWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eUgAEjoKB2ZhaWx1cmUYAiABKA4yJy5kYXNoYm9hcmQuYXVkaW9ib29rcy52MS5GYWlsdXJlTWVzc2FnZUgAQggKBnJlc3VsdCqpAQoORmFpbHVyZU1lc3NhZ2USGwoXRkFJTFVSRV9NRVNTQUdFX1VOS05PV04QABIlCiFGQUlMVVJFX01FU1NBR0VfUFJPSkVDVF9OT1RfRk9VTkQQARIlCiFGQUlMVVJFX01FU1NBR0VfQ0hBUFRFUl9OT1RfRk9VTkQQAhIsCihGQUlMVVJFX01FU1NBR0VfSU5DT1JSRUNUX0NIQVBURVJfRk9STUFUEAMy6gYKEUF1ZGlvYm9va3NTZXJ2aWNlEm4KDUdldEF1ZGlvYm9va3MSLS5kYXNoYm9hcmQuYXVkaW9ib29rcy52MS5HZXRBdWRpb2Jvb2tzUmVxdWVzdBouLmRhc2hib2FyZC5hdWRpb2Jvb2tzLnYxLkdldEF1ZGlvYm9va3NSZXNwb25zZRJrCgxHZXRBdWRpb2Jvb2sSLC5kYXNoYm9hcmQuYXVkaW9ib29rcy52MS5HZXRBdWRpb2Jvb2tSZXF1ZXN0Gi0uZGFzaGJvYXJkLmF1ZGlvYm9va3MudjEuR2V0QXVkaW9ib29rUmVzcG9uc2USjAEKF0NyZWF0ZU9yVXBkYXRlQXVkaW9ib29rEjcuZGFzaGJvYXJkLmF1ZGlvYm9va3MudjEuQ3JlYXRlT3JVcGRhdGVBdWRpb2Jvb2tSZXF1ZXN0GjguZGFzaGJvYXJkLmF1ZGlvYm9va3MudjEuQ3JlYXRlT3JVcGRhdGVBdWRpb2Jvb2tSZXNwb25zZRJpCg9EZWxldGVBdWRpb2Jvb2sSLy5kYXNoYm9hcmQuYXVkaW9ib29rcy52MS5EZWxldGVBdWRpb2Jvb2tSZXF1ZXN0GiUuZGFzaGJvYXJkLmF1ZGlvYm9va3MudjEuQm9vbFJlc3BvbnNlEo8BChhHZXRBdWRpb2Jvb2tBY2Nlc3NFbWFpbHMSOC5kYXNoYm9hcmQuYXVkaW9ib29rcy52MS5HZXRBdWRpb2Jvb2tBY2Nlc3NFbWFpbHNSZXF1ZXN0GjkuZGFzaGJvYXJkLmF1ZGlvYm9va3MudjEuR2V0QXVkaW9ib29rQWNjZXNzRW1haWxzUmVzcG9uc2USdQoVQ3JlYXRlQXVkaW9ib29rQWNjZXNzEjUuZGFzaGJvYXJkLmF1ZGlvYm9va3MudjEuQ3JlYXRlQXVkaW9ib29rQWNjZXNzUmVxdWVzdBolLmRhc2hib2FyZC5hdWRpb2Jvb2tzLnYxLkJvb2xSZXNwb25zZRJ1ChVEZWxldGVBdWRpb2Jvb2tBY2Nlc3MSNS5kYXNoYm9hcmQuYXVkaW9ib29rcy52MS5EZWxldGVBdWRpb2Jvb2tBY2Nlc3NSZXF1ZXN0GiUuZGFzaGJvYXJkLmF1ZGlvYm9va3MudjEuQm9vbFJlc3BvbnNlYgZwcm90bzM",[A,R]);import{file_google_protobuf_empty as b,file_google_protobuf_timestamp as m}from"@bufbuild/protobuf/wkt";var s=g("ChpwdWJsaWMvdjEvcHVibGljX2FwaS5wcm90bxINcHVibGljX2FwaS52MSI2Ch5HZXRBcHBTdG9yZUFjY291bnRUb2tlblJlcXVlc3QSFAoMYWNjZXNzX3Rva2VuGAEgASgJIjwKH0dldEFwcFN0b3JlQWNjb3VudFRva2VuUmVzcG9uc2USGQoRYXBwX2FjY291bnRfdG9rZW4YASABKAkiaQodVmVyaWZ5QXBwU3RvcmVQdXJjaGFzZVJlcXVlc3QSFAoMYWNjZXNzX3Rva2VuGAEgASgJEhoKEnNpZ25lZF90cmFuc2FjdGlvbhgCIAEoCRIWCg50cmFuc2FjdGlvbl9pZBgDIAEoCSJcCh5WZXJpZnlBcHBTdG9yZVB1cmNoYXNlUmVzcG9uc2USEQoJZnVsZmlsbGVkGAEgASgIEhIKCnByb2R1Y3RfaWQYAiABKAkSEwoLZW52aXJvbm1lbnQYAyABKAkiNgoeR2V0QXBwU3RvcmVFbnRpdGxlbWVudHNSZXF1ZXN0EhQKDGFjY2Vzc190b2tlbhgBIAEoCSL5AQofR2V0QXBwU3RvcmVFbnRpdGxlbWVudHNSZXNwb25zZRJQCgxlbnRpdGxlbWVudHMYASADKAsyOi5wdWJsaWNfYXBpLnYxLkdldEFwcFN0b3JlRW50aXRsZW1lbnRzUmVzcG9uc2UuRW50aXRsZW1lbnQagwEKC0VudGl0bGVtZW50EhIKCnByb2R1Y3RfaWQYASABKAkSDgoGc3RhdHVzGAIgASgJEhMKC2Vudmlyb25tZW50GAMgASgJEhoKEmZ1bGZpbGxtZW50X3N0YXR1cxgEIAEoCRIfChdvcmlnaW5hbF90cmFuc2FjdGlvbl9pZBgFIAEoCSJUCh9SZXN0b3JlQXBwU3RvcmVQdXJjaGFzZXNSZXF1ZXN0EhQKDGFjY2Vzc190b2tlbhgBIAEoCRIbChNzaWduZWRfdHJhbnNhY3Rpb25zGAIgAygJIpgCCiBSZXN0b3JlQXBwU3RvcmVQdXJjaGFzZXNSZXNwb25zZRJRCghwcm9kdWN0cxgBIAMoCzI/LnB1YmxpY19hcGkudjEuUmVzdG9yZUFwcFN0b3JlUHVyY2hhc2VzUmVzcG9uc2UuUmVzdG9yZWRQcm9kdWN0EiYKHmZhbWlseV9zaGFyaW5nX3Jldmlld19yZXF1aXJlZBgCIAEoCBp5Cg9SZXN0b3JlZFByb2R1Y3QSEgoKcHJvZHVjdF9pZBgBIAEoCRIfChdvcmlnaW5hbF90cmFuc2FjdGlvbl9pZBgCIAEoCRIOCgZzdGF0dXMYAyABKAkSDgoGcmVhc29uGAQgASgJEhEKCWZ1bGZpbGxlZBgFIAEoCCI4CiBDbGVhckFwcFN0b3JlQWNjb3VudFRva2VuUmVxdWVzdBIUCgxhY2Nlc3NfdG9rZW4YASABKAkiMQoZR2V0U3RvcmVLaXRDYXRhbG9nUmVxdWVzdBIUCgxhY2Nlc3NfdG9rZW4YASABKAki9QEKGkdldFN0b3JlS2l0Q2F0YWxvZ1Jlc3BvbnNlEhcKD3BheXdhbGxfZW5hYmxlZBgBIAEoCBJDCghwcm9kdWN0cxgCIAMoCzIxLnB1YmxpY19hcGkudjEuR2V0U3RvcmVLaXRDYXRhbG9nUmVzcG9uc2UuUHJvZHVjdBp5CgdQcm9kdWN0EhgKEHN0b3JlX3Byb2R1Y3RfaWQYASABKAkSGwoTaW50ZXJuYWxfcHJvZHVjdF9pZBgCIAEoCRIMCgRraW5kGAMgASgJEhQKDGRpc3BsYXlfbmFtZRgEIAEoCRITCgtkZXNjcmlwdGlvbhgFIAEoCSJ6ChBHZXRPcmRlcnNSZXF1ZXN0EhIKCnByb2plY3RfaWQYASABKAkSFAoMYWNjZXNzX3Rva2VuGAIgASgJEhIKBWxpbWl0GAMgASgFSACIAQESEwoGb2Zmc2V0GAQgASgFSAGIAQFCCAoGX2xpbWl0QgkKB19vZmZzZXQigwIKEUdldE9yZGVyc1Jlc3BvbnNlEj0KBm9yZGVycxgBIAMoCzItLnB1YmxpY19hcGkudjEuR2V0T3JkZXJzUmVzcG9uc2UuT3JkZXJTdW1tYXJ5EhMKC3RvdGFsX2NvdW50GAIgASgFGpkBCgxPcmRlclN1bW1hcnkSCgoCaWQYASABKAkSDgoGc3RhdHVzGAIgASgJEhQKDHRvdGFsX2Ftb3VudBgDIAEoBRIQCghjdXJyZW5jeRgEIAEoCRIuCgpjcmVhdGVkX2F0GAUgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIVCg1jdXN0b21lcl9uYW1lGAYgASgJIjcKIUlzT25lQ2xpY2tQYXltZW50QXZhaWxhYmxlUmVxdWVzdBISCgpwcm9qZWN0X2lkGAEgASgJIsUCCiJJc09uZUNsaWNrUGF5bWVudEF2YWlsYWJsZVJlc3BvbnNlEhIKCmlucG9zdF9wYXkYASABKAgSEQoJYXBwbGVfcGF5GAIgASgIEhIKCmdvb2dsZV9wYXkYAyABKAgSYQoRZ29vZ2xlX3BheV9jb25maWcYBCABKAsyQS5wdWJsaWNfYXBpLnYxLklzT25lQ2xpY2tQYXltZW50QXZhaWxhYmxlUmVzcG9uc2UuR29vZ2xlUGF5Q29uZmlnSACIAQEaawoPR29vZ2xlUGF5Q29uZmlnEhMKC21lcmNoYW50X2lkGAEgASgJEhUKDW1lcmNoYW50X25hbWUYAiABKAkSDwoHZ2F0ZXdheRgDIAEoCRIbChNnYXRld2F5X21lcmNoYW50X2lkGAQgASgJQhQKEl9nb29nbGVfcGF5X2NvbmZpZyLRAwofT25lQ2xpY2tBdXRob3JpemVQYXltZW50UmVxdWVzdBJHCgdnYXRld2F5GAEgASgOMjYucHVibGljX2FwaS52MS5PbmVDbGlja0F1dGhvcml6ZVBheW1lbnRSZXF1ZXN0LkdhdGV3YXkSEwoLcGF5bWVudERhdGEYAiABKAkSFQoNcGF5bWVudE1ldGhvZBgDIAEoCRIdChV0cmFuc2FjdGlvbklkZW50aWZpZXIYBCABKAkSNwoFb3JkZXIYBSABKAsyKC5wdWJsaWNfYXBpLnYxLkdldFByZU9yZGVyRGV0YWlsc1JlcXVlc3QSMQoQc2hpcHBpbmdfYWRkcmVzcxgGIAEoCzISLmNvbW1vbi52MS5BZGRyZXNzSACIAQESNwoPYmlsbGluZ19hZGRyZXNzGAcgASgLMhkuY29tbW9uLnYxLkJpbGxpbmdBZGRyZXNzSAGIAQESFQoIbWV0YWRhdGEYCCABKAlIAogBASIoCgdHYXRld2F5Eg0KCUFQUExFX1BBWRAAEg4KCkdPT0dMRV9QQVkQAUITChFfc2hpcHBpbmdfYWRkcmVzc0ISChBfYmlsbGluZ19hZGRyZXNzQgsKCV9tZXRhZGF0YSKkAQogT25lQ2xpY2tBdXRob3JpemVQYXltZW50UmVzcG9uc2USEgoKaXNfc3VjY2VzcxgBIAEoCBIUCgxyZWRpcmVjdF91cmwYAiABKAkSFgoOdHJhbnNhY3Rpb25faWQYAyABKAkSIwoWYXBwbGVfcGF5X3RyYWNraW5nX3VybBgEIAEoCUgAiAEBQhkKF19hcHBsZV9wYXlfdHJhY2tpbmdfdXJsIiwKDFByZU9yZGVySXRlbRIKCgJpZBgBIAEoCRIQCghxdWFudGl0eRgCIAEoBSLVAgoZR2V0UHJlT3JkZXJEZXRhaWxzUmVxdWVzdBISCgpwcm9qZWN0X2lkGAEgASgJEioKBWl0ZW1zGAIgAygLMhsucHVibGljX2FwaS52MS5QcmVPcmRlckl0ZW0SGQoMY291bnRyeV9jb2RlGAMgASgJSACIAQESFgoJcG9zdF9jb2RlGAQgASgJSAGIAQESFwoKY291cG9uQ29kZRgFIAEoCUgCiAEBEhIKBWVtYWlsGAYgASgJSAOIAQESJQoYc2VsZWN0ZWRfZGVsaXZlcnlfbWV0aG9kGAcgASgJSASIAQESEgoFcGhvbmUYCCABKAlIBYgBAUIPCg1fY291bnRyeV9jb2RlQgwKCl9wb3N0X2NvZGVCDQoLX2NvdXBvbkNvZGVCCAoGX2VtYWlsQhsKGV9zZWxlY3RlZF9kZWxpdmVyeV9tZXRob2RCCAoGX3Bob25lIqwBCg5EZWxpdmVyeU1ldGhvZBIKCgJpZBgBIAEoCRIOCgZhbW91bnQYAiABKAUSDAoEbmFtZRgDIAEoCRIYCgtkZXNjcmlwdGlvbhgEIAEoCUgAiAEBEhUKCG1pbl9kYXlzGAUgASgFSAGIAQESFQoIbWF4X2RheXMYBiABKAVIAogBAUIOCgxfZGVzY3JpcHRpb25CCwoJX21pbl9kYXlzQgsKCV9tYXhfZGF5cyKzAgoaR2V0UHJlT3JkZXJEZXRhaWxzUmVzcG9uc2USLgoHbWV0aG9kcxgBIAMoCzIdLnB1YmxpY19hcGkudjEuRGVsaXZlcnlNZXRob2QSFwoKY291cG9uQ29kZRgCIAEoCUgAiAEBEiUKGHNlbGVjdGVkX2RlbGl2ZXJ5X21ldGhvZBgDIAEoCUgBiAEBEhkKDHRvdGFsX2Ftb3VudBgEIAEoBUgCiAEBEhkKDGNvdXBvbl92YWx1ZRgFIAEoBUgDiAEBEhAKCGN1cnJlbmN5GAYgASgJEg8KB2NvdW50cnkYByABKAlCDQoLX2NvdXBvbkNvZGVCGwoZX3NlbGVjdGVkX2RlbGl2ZXJ5X21ldGhvZEIPCg1fdG90YWxfYW1vdW50Qg8KDV9jb3Vwb25fdmFsdWUiYgopTm90aWZ5VXNlckFib3V0UHJvZHVjdEF2YWlsYWJpbGl0eVJlcXVlc3QSEgoKcHJvamVjdF9pZBgBIAEoCRISCgpwcm9kdWN0X2lkGAIgASgJEg0KBWVtYWlsGAMgASgJIk0KH0FwcGxlUGF5VmFsaWRhdGVNZXJjaGFudFJlcXVlc3QSFgoOdmFsaWRhdGlvbl91cmwYASABKAkSEgoKcHJvamVjdF9pZBgCIAEoCSI8CiBBcHBsZVBheVZhbGlkYXRlTWVyY2hhbnRSZXNwb25zZRIYChBtZXJjaGFudF9zZXNzaW9uGAEgASgJIk4KIkdldEF2YWlsYWJsZUNvdW50Rm9yUHJvZHVjdFJlcXVlc3QSEgoKcHJvamVjdF9pZBgBIAEoCRIUCgxhbGxfdmFyaWFudHMYAiADKAkiwgQKI0dldEF2YWlsYWJsZUNvdW50Rm9yUHJvZHVjdFJlc3BvbnNlEmEKEGF2YWlsYWJsZV9jb3VudHMYASADKAsyRy5wdWJsaWNfYXBpLnYxLkdldEF2YWlsYWJsZUNvdW50Rm9yUHJvZHVjdFJlc3BvbnNlLkF2YWlsYWJsZUNvdW50c0VudHJ5EkwKBWVycm9yGAIgASgOMjgucHVibGljX2FwaS52MS5HZXRBdmFpbGFibGVDb3VudEZvclByb2R1Y3RSZXNwb25zZS5FcnJvckgAiAEBGlEKGEF2YWlsYWJsZUNvdW50Rm9yUHJvZHVjdBIjChthdmFpbGFibGVfcXVhbnRpdHlfdG9fb3JkZXIYASABKAUSEAoIY2FuX2JhY2sYAiABKAgagwEKFEF2YWlsYWJsZUNvdW50c0VudHJ5EgsKA2tleRgBIAEoCRJaCgV2YWx1ZRgCIAEoCzJLLnB1YmxpY19hcGkudjEuR2V0QXZhaWxhYmxlQ291bnRGb3JQcm9kdWN0UmVzcG9uc2UuQXZhaWxhYmxlQ291bnRGb3JQcm9kdWN0OgI4ASKGAQoFRXJyb3ISEQoNRVJST1JfVU5LTk9XThAAEhsKF0VSUk9SX1BST0pFQ1RfTk9UX0ZPVU5EEAESHwobRVJST1JfUFJPRFVDVF9OT1RfQVZBSUxBQkxFEAISLAooRVJST1JfUFJPRFVDVF9OT1RfQVZBSUxBQkxFX0JVVF9DQU5fQkFDSxADQggKBl9lcnJvciItChdHZXRMb2dpbkJyYW5kaW5nUmVxdWVzdBISCgpwcm9qZWN0X2lkGAEgASgJIogBChhHZXRMb2dpbkJyYW5kaW5nUmVzcG9uc2USEQoEbmFtZRgBIAEoCUgAiAEBEhUKCGxvZ29fdXJsGAIgASgJSAGIAQESGgoNbG9nb19kYXJrX3VybBgDIAEoCUgCiAEBQgcKBV9uYW1lQgsKCV9sb2dvX3VybEIQCg5fbG9nb19kYXJrX3VybCI+ChZHZXRUaGFua1lvdVBhZ2VSZXF1ZXN0EhIKCnByb2plY3RfaWQYASABKAkSEAoIb3JkZXJfaWQYAiABKAkizgIKF0dldFRoYW5rWW91UGFnZVJlc3BvbnNlEhAKCGNvbmZldHRpGAEgASgIEg4KBmhlYWRlchgCIAEoCRIRCglib2R5X2h0bWwYAyABKAkSGQoMYnV0dG9uX2xhYmVsGAQgASgJSACIAQESFwoKYnV0dG9uX3VybBgFIAEoCUgBiAEBEhkKDHJlZGlyZWN0X3VybBgGIAEoCUgCiAEBEhkKDHByb2R1Y3RfbmFtZRgHIAEoCUgDiAEBEhsKDmN1c3RvbWVyX2VtYWlsGAggASgJSASIAQESFQoIbG9nb191cmwYCSABKAlIBYgBAUIPCg1fYnV0dG9uX2xhYmVsQg0KC19idXR0b25fdXJsQg8KDV9yZWRpcmVjdF91cmxCDwoNX3Byb2R1Y3RfbmFtZUIRCg9fY3VzdG9tZXJfZW1haWxCCwoJX2xvZ29fdXJsIjUKHVVzZXJQYW5lbERlbGV0ZUFjY291bnRSZXF1ZXN0EhQKDGFjY2Vzc190b2tlbhgBIAEoCSJAChREaWRCdXlQcm9kdWN0UmVxdWVzdBIUCgxhY2Nlc3NfdG9rZW4YASABKAkSEgoKcHJvZHVjdF9pZBgCIAEoCSL+AQohVXBkYXRlTm90aWZpY2F0aW9uU2V0dGluZ3NSZXF1ZXN0EhQKDGFjY2Vzc190b2tlbhgBIAEoCRISCgpwcm9qZWN0X2lkGAIgASgJEk0KDW1vZGlmaWNhdGlvbnMYAyADKAsyNi5wdWJsaWNfYXBpLnYxLlVwZGF0ZU5vdGlmaWNhdGlvblNldHRpbmdzUmVxdWVzdC5Hcm91cBI6Cg9lbmFibGVkX21ldGhvZHMYBCADKA4yIS5wdWJsaWNfYXBpLnYxLk5vdGlmaWNhdGlvbk1ldGhvZBokCgVHcm91cBIKCgJpZBgBIAEoCRIPCgdlbmFibGVkGAIgASgIIlEKJ1VwZGF0ZUdsb2JhbE5vdGlmaWNhdGlvblNldHRpbmdzUmVxdWVzdBIUCgxhY2Nlc3NfdG9rZW4YASABKAkSEAoIaXNfbXV0ZWQYAiABKAgiUQolR2V0Tm90aWZpY2F0aW9uU2V0dGluZ3NEZXRhaWxzUmVxdWVzdBIUCgxhY2Nlc3NfdG9rZW4YASABKAkSEgoKcHJvamVjdF9pZBgCIAEoCSKhAQoRTm90aWZpY2F0aW9uR3JvdXASCgoCaWQYASABKAkSDAoEbmFtZRgCIAEoCRIYCgtkZXNjcmlwdGlvbhgDIAEoCUgAiAEBEg8KB2VuYWJsZWQYBCABKAgSNwoJaG93X29mdGVuGAUgASgOMiQuY29tbW9uLnYxLk5vdGlmaWNhdGlvbkdyb3VwSG93T2Z0ZW5CDgoMX2Rlc2NyaXB0aW9uIrECCiZHZXROb3RpZmljYXRpb25TZXR0aW5nc0RldGFpbHNSZXNwb25zZRISCgpwcm9qZWN0X2lkGAEgASgJEgwKBG5hbWUYAiABKAkSLwoFdGhlbWUYAyABKAsyGy5wdWJsaWNfYXBpLnYxLlByb2plY3RUaGVtZUgAiAEBEjwKEWF2YWlsYWJsZV9tZXRob2RzGAQgAygOMiEucHVibGljX2FwaS52MS5Ob3RpZmljYXRpb25NZXRob2QSOgoPZW5hYmxlZF9tZXRob2RzGAUgAygOMiEucHVibGljX2FwaS52MS5Ob3RpZmljYXRpb25NZXRob2QSMAoGZ3JvdXBzGAYgAygLMiAucHVibGljX2FwaS52MS5Ob3RpZmljYXRpb25Hcm91cEIICgZfdGhlbWUiQwoeR2V0Tm90aWZpY2F0aW9uU2V0dGluZ3NSZXF1ZXN0EhQKDGFjY2Vzc190b2tlbhgBIAEoCRILCgNhbGwYAiABKAgi8AIKH0dldE5vdGlmaWNhdGlvblNldHRpbmdzUmVzcG9uc2USSAoIcHJvamVjdHMYASADKAsyNi5wdWJsaWNfYXBpLnYxLkdldE5vdGlmaWNhdGlvblNldHRpbmdzUmVzcG9uc2UuUHJvamVjdBIQCghpc19tdXRlZBgCIAEoCBqlAQoHUHJvamVjdBIKCgJpZBgBIAEoCRIMCgRuYW1lGAIgASgJEkUKBnN0YXR1cxgDIAEoDjI1LnB1YmxpY19hcGkudjEuR2V0Tm90aWZpY2F0aW9uU2V0dGluZ3NSZXNwb25zZS5TdGF0dXMSLwoFdGhlbWUYBCABKAsyGy5wdWJsaWNfYXBpLnYxLlByb2plY3RUaGVtZUgAiAEBQggKBl90aGVtZSJJCgZTdGF0dXMSFgoSU1RBVFVTX1VOU1BFQ0lGSUVEEAASEgoOU1RBVFVTX0VOQUJMRUQQARITCg9TVEFUVVNfRElTQUJMRUQQAiLMAQodR2V0Tm90aWZpY2F0aW9uSGlzdG9yeVJlcXVlc3QSFAoMYWNjZXNzX3Rva2VuGAEgASgJEhcKCnByb2plY3RfaWQYAiABKAlIAIgBARIyCgdtZXRob2RzGAMgAygOMiEucHVibGljX2FwaS52MS5Ob3RpZmljYXRpb25NZXRob2QSEQoJcGFnZV9zaXplGAQgASgFEhcKCnBhZ2VfdG9rZW4YBSABKAlIAYgBAUINCgtfcHJvamVjdF9pZEINCgtfcGFnZV90b2tlbiLrAwoXTm90aWZpY2F0aW9uSGlzdG9yeUl0ZW0SCgoCaWQYASABKAkSFwoPbm90aWZpY2F0aW9uX2lkGAIgASgJEjEKBm1ldGhvZBgDIAEoDjIhLnB1YmxpY19hcGkudjEuTm90aWZpY2F0aW9uTWV0aG9kEisKB3NlbnRfYXQYBCABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEg0KBXRpdGxlGAUgASgJEhUKCHN1YnRpdGxlGAYgASgJSACIAQESFAoHY29udGVudBgHIAEoCUgBiAEBEhYKCWltYWdlX3VybBgIIAEoCUgCiAEBEhUKCG9wZW5fdXJsGAogASgJSAOIAQESPQoGc2VuZGVyGAkgASgLMi0ucHVibGljX2FwaS52MS5Ob3RpZmljYXRpb25IaXN0b3J5SXRlbS5TZW5kZXIabQoGU2VuZGVyEhIKCnByb2plY3RfaWQYASABKAkSFAoMZGlzcGxheV9uYW1lGAIgASgJEi8KBXRoZW1lGAMgASgLMhsucHVibGljX2FwaS52MS5Qcm9qZWN0VGhlbWVIAIgBAUIICgZfdGhlbWVCCwoJX3N1YnRpdGxlQgoKCF9jb250ZW50QgwKCl9pbWFnZV91cmxCCwoJX29wZW5fdXJsIpEBCh5HZXROb3RpZmljYXRpb25IaXN0b3J5UmVzcG9uc2USPQoNbm90aWZpY2F0aW9ucxgBIAMoCzImLnB1YmxpY19hcGkudjEuTm90aWZpY2F0aW9uSGlzdG9yeUl0ZW0SHAoPbmV4dF9wYWdlX3Rva2VuGAIgASgJSACIAQFCEgoQX25leHRfcGFnZV90b2tlbiJBCilVc2VyUGFuZWxQdXNoR2V0QXZhaWxhYmxlQ29tcGFuaWVzUmVxdWVzdBIUCgxhY2Nlc3NfdG9rZW4YASABKAki6wIKKlVzZXJQYW5lbFB1c2hHZXRBdmFpbGFibGVDb21wYW5pZXNSZXNwb25zZRJUCgljb21wYW5pZXMYASADKAsyQS5wdWJsaWNfYXBpLnYxLlVzZXJQYW5lbFB1c2hHZXRBdmFpbGFibGVDb21wYW5pZXNSZXNwb25zZS5Db21wYW55GnEKBUdyb3VwEgoKAmlkGAEgASgJEgwKBG5hbWUYAiABKAkSGAoLZGVzY3JpcHRpb24YAyABKAlIAIgBARIWCglob3dfb2Z0ZW4YBCABKAlIAYgBAUIOCgxfZGVzY3JpcHRpb25CDAoKX2hvd19vZnRlbhp0CgdDb21wYW55EgoKAmlkGAEgASgJEgwKBG5hbWUYAiABKAkSTwoGZ3JvdXBzGAMgAygLMj8ucHVibGljX2FwaS52MS5Vc2VyUGFuZWxQdXNoR2V0QXZhaWxhYmxlQ29tcGFuaWVzUmVzcG9uc2UuR3JvdXAiMAoaU2hvdWxkU2hvcFByb2R1Y3RzUmVzcG9uc2USEgoKaXNfdmlzaWJsZRgBIAEoCCI0Ch5TaG91bGRTaG93R3Vlc3RDYXRhbG9nUmVzcG9uc2USEgoKaXNfdmlzaWJsZRgBIAEoCCKGAQoTR3Vlc3RDYXRhbG9nUHJvZHVjdBISCgpwcm9kdWN0X2lkGAEgASgJEgwKBG5hbWUYAiABKAkSFwoPY292ZXJfaW1hZ2VfdXJsGAMgASgJEjQKDHByb2R1Y3RfdHlwZRgEIAEoDjIeLnB1YmxpY19hcGkudjEuVXNlclByb2R1Y3RUeXBlIk8KF0dldEd1ZXN0Q2F0YWxvZ1Jlc3BvbnNlEjQKCHByb2R1Y3RzGAEgAygLMiIucHVibGljX2FwaS52MS5HdWVzdENhdGFsb2dQcm9kdWN0IoYBCiRVc2VyUGFuZWxSZXNvbHZlUHJvZHVjdEFjY2Vzc1JlcXVlc3QSFAoMYWNjZXNzX3Rva2VuGAEgASgJEhIKCnByb2R1Y3RfaWQYAiABKAkSNAoMcHJvZHVjdF90eXBlGAMgASgOMh4ucHVibGljX2FwaS52MS5Vc2VyUHJvZHVjdFR5cGUi5wEKJVVzZXJQYW5lbFJlc29sdmVQcm9kdWN0QWNjZXNzUmVzcG9uc2USSwoGc3RhdHVzGAEgASgOMjsucHVibGljX2FwaS52MS5Vc2VyUGFuZWxSZXNvbHZlUHJvZHVjdEFjY2Vzc1Jlc3BvbnNlLlN0YXR1cxIWCglhY2Nlc3NfaWQYAiABKAlIAIgBASJLCgZTdGF0dXMSFgoSU1RBVFVTX1VOU1BFQ0lGSUVEEAASCQoFT1dORUQQARINCglOT1RfT1dORUQQAhIPCgtVTkFWQUlMQUJMRRADQgwKCl9hY2Nlc3NfaWQiRAoWR2V0U2hvcFByb2R1Y3RzUmVxdWVzdBIZCgxhY2Nlc3NfdG9rZW4YASABKAlIAIgBAUIPCg1fYWNjZXNzX3Rva2VuItgBChdHZXRTaG9wUHJvZHVjdHNSZXNwb25zZRJACghwcm9kdWN0cxgFIAMoCzIuLnB1YmxpY19hcGkudjEuR2V0U2hvcFByb2R1Y3RzUmVzcG9uc2UuUHJvZHVjdBp7CgdQcm9kdWN0EgoKAmlkGAEgASgJEgwKBG5hbWUYAiABKAkSEQoJaW1hZ2VfdXJsGAMgASgJEg0KBXByaWNlGAQgASgJEh4KEWlzX2FscmVhZHlfYm91Z2h0GAUgASgISACIAQFCFAoSX2lzX2FscmVhZHlfYm91Z2h0ItQBCh9Vc2VyUGFuZWxHZXRGaWxlRGV0YWlsc1Jlc3BvbnNlEkgKB3N1Y2Nlc3MYASABKAsyNS5wdWJsaWNfYXBpLnYxLlVzZXJQYW5lbEdldEZpbGVEZXRhaWxzUmVzcG9uc2UuUmVzdWx0SAASMAoHZmFpbHVyZRgCIAEoDjIdLnB1YmxpY19hcGkudjEuRmFpbHVyZU1lc3NhZ2VIABorCgZSZXN1bHQSEgoKcHJvamVjdF9pZBgBIAEoCRINCgVmaWxlcxgCIAMoCUIICgZyZXN1bHQiSQoeVXNlclBhbmVsR2V0RmlsZURldGFpbHNSZXF1ZXN0EhQKDGFjY2Vzc190b2tlbhgBIAEoCRIRCglhY2Nlc3NfaWQYAiABKAki+QIKIVVzZXJQYW5lbEdldFRpY2tldERldGFpbHNSZXNwb25zZRJKCgdzdWNjZXNzGAEgASgLMjcucHVibGljX2FwaS52MS5Vc2VyUGFuZWxHZXRUaWNrZXREZXRhaWxzUmVzcG9uc2UuUmVzdWx0SAASMAoHZmFpbHVyZRgCIAEoDjIdLnB1YmxpY19hcGkudjEuRmFpbHVyZU1lc3NhZ2VIABrLAQoGUmVzdWx0EhIKCnByb2plY3RfaWQYASABKAkSEgoKdGlja2V0X3VybBgCIAEoCRIUCgxwcm9kdWN0X25hbWUYAyABKAkSGQoRcHJvZHVjdF9pbWFnZV91cmwYBCABKAkSHgoRZ29vZ2xlX3dhbGxldF91cmwYBSABKAlIAIgBARIdChBhcHBsZV93YWxsZXRfdXJsGAYgASgJSAGIAQFCFAoSX2dvb2dsZV93YWxsZXRfdXJsQhMKEV9hcHBsZV93YWxsZXRfdXJsQggKBnJlc3VsdCJLCiBVc2VyUGFuZWxHZXRUaWNrZXREZXRhaWxzUmVxdWVzdBIUCgxhY2Nlc3NfdG9rZW4YASABKAkSEQoJYWNjZXNzX2lkGAIgASgJIs8ECjBVc2VyUGFuZWxHZXRBdWRpb2Jvb2tEZXRhaWxzRG93bmxvYWRVUkxzUmVzcG9uc2USWQoHc3VjY2VzcxgBIAEoCzJGLnB1YmxpY19hcGkudjEuVXNlclBhbmVsR2V0QXVkaW9ib29rRGV0YWlsc0Rvd25sb2FkVVJMc1Jlc3BvbnNlLlJlc3VsdEgAEjAKB2ZhaWx1cmUYAiABKA4yHS5wdWJsaWNfYXBpLnYxLkZhaWx1cmVNZXNzYWdlSAAamgEKGEF1ZGlvYm9va0Rvd25sb2FkRGV0YWlscxISCgpjaGFwdGVyX2lkGAEgASgJEhIKCnB1YmxpY191cmwYAiABKAkSHQoQZG93bmxvYWRhYmxlX3VybBgDIAEoCUgAiAEBEhUKCGR1cmF0aW9uGAQgASgFSAGIAQFCEwoRX2Rvd25sb2FkYWJsZV91cmxCCwoJX2R1cmF0aW9uGuYBCgZSZXN1bHQSfAoaYXVkaW9ib29rX2Rvd25sb2FkX2RldGFpbHMYASADKAsyWC5wdWJsaWNfYXBpLnYxLlVzZXJQYW5lbEdldEF1ZGlvYm9va0RldGFpbHNEb3dubG9hZFVSTHNSZXNwb25zZS5BdWRpb2Jvb2tEb3dubG9hZERldGFpbHMSMwomaXNfYXZhaWxhYmxlX3RvX2Rvd25sb2FkX2luX21vYmlsZV9hcHAYAiABKAhIAIgBAUIpCidfaXNfYXZhaWxhYmxlX3RvX2Rvd25sb2FkX2luX21vYmlsZV9hcHBCCAoGcmVzdWx0IoIBCi9Vc2VyUGFuZWxHZXRBdWRpb2Jvb2tEZXRhaWxzRG93bmxvYWRVUkxzUmVxdWVzdBIUCgxhY2Nlc3NfdG9rZW4YASABKAkSEQoJYWNjZXNzX2lkGAIgASgJEhcKCmlzX2Jyb3dzZXIYAyABKAhIAIgBAUINCgtfaXNfYnJvd3NlciKbAQokVXNlclBhbmVsR2V0QXVkaW9ib29rRGV0YWlsc1Jlc3BvbnNlEjcKCWF1ZGlvYm9vaxgBIAEoCzIiLmRhc2hib2FyZC5hdWRpb2Jvb2tzLnYxLkF1ZGlvYm9va0gAEjAKB2ZhaWx1cmUYAiABKA4yHS5wdWJsaWNfYXBpLnYxLkZhaWx1cmVNZXNzYWdlSABCCAoGcmVzdWx0Ik4KI1VzZXJQYW5lbEdldEF1ZGlvYm9va0RldGFpbHNSZXF1ZXN0EhQKDGFjY2Vzc190b2tlbhgBIAEoCRIRCglhY2Nlc3NfaWQYAiABKAkiMwobVXNlclBhbmVsR2V0UHJvZHVjdHNSZXF1ZXN0EhQKDGFjY2Vzc190b2tlbhgBIAEoCSKFAgocVXNlclBhbmVsR2V0UHJvZHVjdHNSZXNwb25zZRJFCgdzdWNjZXNzGAEgASgLMjIucHVibGljX2FwaS52MS5Vc2VyUGFuZWxHZXRQcm9kdWN0c1Jlc3BvbnNlLlJlc3VsdEgAEjAKB2ZhaWx1cmUYAiABKA4yHS5wdWJsaWNfYXBpLnYxLkZhaWx1cmVNZXNzYWdlSAAaYgoGUmVzdWx0EiwKCHByb2R1Y3RzGAEgAygLMhoucHVibGljX2FwaS52MS5Vc2VyUHJvZHVjdBIZCgxjaGF0X2FwaV91cmwYAiABKAlIAIgBAUIPCg1fY2hhdF9hcGlfdXJsQggKBnJlc3VsdCIuChZVc2VyUGFuZWxMb2dvdXRSZXF1ZXN0EhQKDGFjY2Vzc190b2tlbhgBIAEoCSK0AQoeVXNlclBhbmVsTG9naW5XaXRoQ29kZVJlc3BvbnNlEhYKDGFjY2Vzc190b2tlbhgBIAEoCUgAEjAKB2ZhaWx1cmUYAiABKA4yHS5wdWJsaWNfYXBpLnYxLkZhaWx1cmVNZXNzYWdlSAASEgoFZW1haWwYAyABKAlIAYgBARIUCgd1c2VyX2lkGAQgASgJSAKIAQFCCAoGcmVzdWx0QggKBl9lbWFpbEIKCghfdXNlcl9pZCJ3Ch1Vc2VyUGFuZWxMb2dpbldpdGhDb2RlUmVxdWVzdBIMCgRjb2RlGAEgASgFEhIKBWVtYWlsGAIgASgJSACIAQESGQoMY2hhbGxlbmdlX2lkGAMgASgJSAGIAQFCCAoGX2VtYWlsQg8KDV9jaGFsbGVuZ2VfaWQiiAIKFlVzZXJQYW5lbExvZ2luUmVzcG9uc2USPwoHc3VjY2VzcxgBIAEoCzIsLnB1YmxpY19hcGkudjEuVXNlclBhbmVsTG9naW5SZXNwb25zZS5SZXN1bHRIABIwCgdmYWlsdXJlGAIgASgOMh0ucHVibGljX2FwaS52MS5GYWlsdXJlTWVzc2FnZUgAGnEKBlJlc3VsdBIQCghyZXRyeV9pbhgBIAEoBRI/Cg9kZWxpdmVyeV9tZXRob2QYAiABKA4yJi5wdWJsaWNfYXBpLnYxLkxvZ2luQ29kZURlbGl2ZXJ5TWV0aG9kEhQKDGNoYWxsZW5nZV9pZBgDIAEoCUIICgZyZXN1bHQiuAEKFVVzZXJQYW5lbExvZ2luUmVxdWVzdBINCgVlbWFpbBgBIAEoCRIfChJyZWd1bGF0aW9uc19hY2NlcHQYAiABKAhIAIgBARI/Cg9kZWxpdmVyeV9tZXRob2QYAyABKA4yJi5wdWJsaWNfYXBpLnYxLkxvZ2luQ29kZURlbGl2ZXJ5TWV0aG9kEhcKD3R1cm5zdGlsZV90b2tlbhgEIAEoCUIVChNfcmVndWxhdGlvbnNfYWNjZXB0IjkKF0dldE9yZGVyUmV0cnlVcmxSZXF1ZXN0EgoKAmlkGAEgASgJEhIKCnByb2plY3RfaWQYAiABKAkivwEKGEdldE9yZGVyUmV0cnlVcmxSZXNwb25zZRI+CgN1cmwYASABKAsyLy5wdWJsaWNfYXBpLnYxLkdldE9yZGVyUmV0cnlVcmxSZXNwb25zZS5TdWNjZXNzSAASEQoHZmFpbHVyZRgCIAEoCUgAGkYKB1N1Y2Nlc3MSCwoDdXJsGAEgASgJEi4KCmV4cGlyZXNfYXQYAiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wQggKBnJlc3VsdCIxCg9HZXRPcmRlclJlcXVlc3QSCgoCaWQYASABKAkSEgoKcHJvamVjdF9pZBgCIAEoCSJ8ChBHZXRPcmRlclJlc3BvbnNlEg8KAmlkGAEgASgJSACIAQESIgoFaXRlbXMYAiADKAsyEy5wdWJsaWNfYXBpLnYxLkl0ZW0SLAoHZGV0YWlscxgDIAEoCzIbLnB1YmxpY19hcGkudjEuT3JkZXJEZXRhaWxzQgUKA19pZCLvAgoMT3JkZXJEZXRhaWxzEjUKBWl0ZW1zGAEgAygLMiYucHVibGljX2FwaS52MS5PcmRlckRldGFpbHMuU2luZ2xlSXRlbRIjCgdnYXRld2F5GAIgASgOMhIuY29tbW9uLnYxLkdhdGV3YXkSEwoGc3RhdHVzGAMgASgJSACIAQESFgoJb3JkZXJfcmVmGAQgASgJSAGIAQESGwoOcGF5bWVudF9tZXRob2QYBSABKAlIAogBARqMAQoKU2luZ2xlSXRlbRIKCgJpZBgBIAEoCRIWCglpbWFnZV91cmwYAiABKAlIAIgBARIMCgRuYW1lGAMgASgJEhAKCHF1YW50aXR5GAQgASgFEhQKDHByaWNlX2Ftb3VudBgFIAEoAxIWCg5wcmljZV9jdXJyZW5jeRgGIAEoCUIMCgpfaW1hZ2VfdXJsQgkKB19zdGF0dXNCDAoKX29yZGVyX3JlZkIRCg9fcGF5bWVudF9tZXRob2Qi0QEKBEl0ZW0SCgoCaWQYASABKAkSDAoEbmFtZRgCIAEoCRIRCglpbWFnZV91cmwYAyABKAkSPAoRZmlsZV9kb3dubG9hZGFibGUYBCABKAsyHy5wdWJsaWNfYXBpLnYxLkZpbGVEb3dubG9hZGFibGVIABItCglhdWRpb2Jvb2sYBSABKAsyGC5wdWJsaWNfYXBpLnYxLkF1ZGlvYm9va0gAEicKBnRpY2tldBgGIAEoCzIVLnB1YmxpY19hcGkudjEuVGlja2V0SABCBgoEaXRlbSIkChBGaWxlRG93bmxvYWRhYmxlEhAKCGZpbGVfdXJsGAEgASgJIiUKCUF1ZGlvYm9vaxIYChBhcHBfZG93bmxvYWRfdXJsGAEgASgJIoEBCgZUaWNrZXQSEQoJdGlja2V0X2lkGAEgASgJEhsKDmFwcGxlX3Bhc3NfdXJsGAIgASgJSACIAQESHgoRZ29vZ2xlX3RpY2tldF91cmwYAyABKAlIAYgBAUIRCg9fYXBwbGVfcGFzc191cmxCFAoSX2dvb2dsZV90aWNrZXRfdXJsIpkDCgtVc2VyUHJvZHVjdBISCgpwcm9qZWN0X2lkGAEgASgJEhQKDHByb2plY3RfbmFtZRgCIAEoCRISCgpwcm9kdWN0X2lkGAMgASgJEhQKDHByb2R1Y3RfbmFtZRgEIAEoCRIbChNwcm9kdWN0X2Rlc2NyaXB0aW9uGAUgASgJEhkKEXByb2R1Y3RfaW1hZ2VfdXJsGAYgASgJEjQKDHByb2R1Y3RfdHlwZRgHIAEoDjIeLnB1YmxpY19hcGkudjEuVXNlclByb2R1Y3RUeXBlEhEKCWFjY2Vzc19pZBgIIAEoCRI3Cg1wcm9qZWN0X3RoZW1lGAkgASgLMhsucHVibGljX2FwaS52MS5Qcm9qZWN0VGhlbWVIAIgBARIgChNwcm9qZWN0X2Rlc2NyaXB0aW9uGAogASgJSAGIAQESHAoPY2hhdF9wcm9qZWN0X2lkGAsgASgJSAKIAQFCEAoOX3Byb2plY3RfdGhlbWVCFgoUX3Byb2plY3RfZGVzY3JpcHRpb25CEgoQX2NoYXRfcHJvamVjdF9pZCJ1CgxCb29sUmVzcG9uc2USKQoHc3VjY2VzcxgBIAEoCzIWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eUgAEjAKB2ZhaWx1cmUYAiABKA4yHS5wdWJsaWNfYXBpLnYxLkZhaWx1cmVNZXNzYWdlSABCCAoGcmVzdWx0Im4KEFB1c2hFdmVudFJlcXVlc3QSFAoMYWNjZXNzX3Rva2VuGAEgASgJEhcKD25vdGlmaWNhdGlvbl9pZBgCIAEoCRIrCgVldmVudBgDIAEoDjIcLmNvbW1vbi52MS5Ob3RpZmljYXRpb25FdmVudCKtAQoaUHVzaFNlbmREZXZpY2VUb2tlblJlcXVlc3QSFAoMYWNjZXNzX3Rva2VuGAEgASgJEjcKB3BheWxvYWQYAiABKAsyJi5jb21tb24udjEuUHVzaE5vdGlmaWNhdGlvbkRldmljZVRva2VuEiQKF2lzX25vdGlmaWNhdGlvbl9ncmFudGVkGAMgASgISACIAQFCGgoYX2lzX25vdGlmaWNhdGlvbl9ncmFudGVkIsIBCgxQcm9qZWN0VGhlbWUSFgoJaW1hZ2VfdXJsGAEgASgJSACIAQESGwoOaW1hZ2VfZGFya191cmwYAiABKAlIAYgBARIYCgticmFuZF9jb2xvchgDIAEoCUgCiAEBEh0KEGJyYW5kX2NvbG9yX2RhcmsYBCABKAlIA4gBAUIMCgpfaW1hZ2VfdXJsQhEKD19pbWFnZV9kYXJrX3VybEIOCgxfYnJhbmRfY29sb3JCEwoRX2JyYW5kX2NvbG9yX2RhcmsijgEKHEdldFB1YmxpY09yZGVyRGV0YWlsc1JlcXVlc3QSEgoKcHJvamVjdF9pZBgBIAEoCRIQCghvcmRlcl9pZBgCIAEoCRISCgVlbWFpbBgDIAEoCUgAiAEBEhkKDGFjY2Vzc190b2tlbhgEIAEoCUgBiAEBQggKBl9lbWFpbEIPCg1fYWNjZXNzX3Rva2VuInAKHUdldFB1YmxpY09yZGVyRGV0YWlsc1Jlc3BvbnNlEjIKBW9yZGVyGAEgASgLMiEucHVibGljX2FwaS52MS5QdWJsaWNPcmRlckRldGFpbHNIABIRCgdmYWlsdXJlGAIgASgJSABCCAoGcmVzdWx0IoYGChJQdWJsaWNPcmRlckRldGFpbHMSEAoIb3JkZXJfaWQYASABKAkSDgoGc3RhdHVzGAIgASgJEh4KEXByb2Nlc3Npbmdfc3RhdHVzGAMgASgJSACIAQESFQoNY3VzdG9tZXJfbmFtZRgEIAEoCRIWCg5jdXN0b21lcl9lbWFpbBgFIAEoCRIbCg5jdXN0b21lcl9waG9uZRgGIAEoCUgBiAEBEh0KEGRlbGl2ZXJ5X2FkZHJlc3MYByABKAlIAogBARIcCg9kZWxpdmVyeV9tZXRob2QYCCABKAlIA4gBARIcCg90cmFja2luZ19udW1iZXIYCSABKAlIBIgBARItCgVpdGVtcxgKIAMoCzIeLnB1YmxpY19hcGkudjEuUHVibGljT3JkZXJJdGVtEjMKCGNvbW1lbnRzGAsgAygLMiEucHVibGljX2FwaS52MS5QdWJsaWNPcmRlckNvbW1lbnQSFAoMdG90YWxfYW1vdW50GAwgASgDEhAKCGN1cnJlbmN5GA0gASgJEi4KCmNyZWF0ZWRfYXQYDiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEjMKCnVwZGF0ZWRfYXQYDyABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wSAWIAQESEwoLaXNfdmVyaWZpZWQYECABKAgSFQoNY29tbWVudF9jb3VudBgRIAEoBRI3Cg1wcm9qZWN0X3RoZW1lGBIgASgLMhsucHVibGljX2FwaS52MS5Qcm9qZWN0VGhlbWVIBogBARIZCgxwcm9qZWN0X25hbWUYEyABKAlIB4gBAUIUChJfcHJvY2Vzc2luZ19zdGF0dXNCEQoPX2N1c3RvbWVyX3Bob25lQhMKEV9kZWxpdmVyeV9hZGRyZXNzQhIKEF9kZWxpdmVyeV9tZXRob2RCEgoQX3RyYWNraW5nX251bWJlckINCgtfdXBkYXRlZF9hdEIQCg5fcHJvamVjdF90aGVtZUIPCg1fcHJvamVjdF9uYW1lIngKD1B1YmxpY09yZGVySXRlbRIMCgRuYW1lGAEgASgJEhAKCHF1YW50aXR5GAIgASgFEg0KBXByaWNlGAMgASgDEhAKCGN1cnJlbmN5GAQgASgJEhYKCWltYWdlX3VybBgFIAEoCUgAiAEBQgwKCl9pbWFnZV91cmwioAEKElB1YmxpY09yZGVyQ29tbWVudBIKCgJpZBgBIAEoBRIPCgdtZXNzYWdlGAIgASgJEhMKC2F1dGhvcl90eXBlGAMgASgJEhgKC2F1dGhvcl9uYW1lGAQgASgJSACIAQESLgoKY3JlYXRlZF9hdBgFIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBCDgoMX2F1dGhvcl9uYW1lImsKHEFkZFB1YmxpY09yZGVyQ29tbWVudFJlcXVlc3QSEgoKcHJvamVjdF9pZBgBIAEoCRIQCghvcmRlcl9pZBgCIAEoCRIPCgdtZXNzYWdlGAMgASgJEhQKDGFjY2Vzc190b2tlbhgEIAEoCSKRAQodQWRkUHVibGljT3JkZXJDb21tZW50UmVzcG9uc2USNAoHY29tbWVudBgBIAEoCzIhLnB1YmxpY19hcGkudjEuUHVibGljT3JkZXJDb21tZW50SAASMAoHZmFpbHVyZRgCIAEoDjIdLnB1YmxpY19hcGkudjEuRmFpbHVyZU1lc3NhZ2VIAEIICgZyZXN1bHQiRQodR2V0T3JkZXJGb3JUZXN0aW1vbmlhbFJlcXVlc3QSEgoKcHJvamVjdF9pZBgBIAEoCRIQCghvcmRlcl9pZBgCIAEoCSLCAwoeR2V0T3JkZXJGb3JUZXN0aW1vbmlhbFJlc3BvbnNlEkgKBW9yZGVyGAEgASgLMjcucHVibGljX2FwaS52MS5HZXRPcmRlckZvclRlc3RpbW9uaWFsUmVzcG9uc2UuT3JkZXJJbmZvSAASEQoHZmFpbHVyZRgCIAEoCUgAGoABCgxPcmRlclByb2R1Y3QSEgoKcHJvZHVjdF9pZBgBIAEoCRIUCgxwcm9kdWN0X25hbWUYAiABKAkSHgoRcHJvZHVjdF9pbWFnZV91cmwYAyABKAlIAIgBARIQCghxdWFudGl0eRgEIAEoBUIUChJfcHJvZHVjdF9pbWFnZV91cmwatQEKCU9yZGVySW5mbxIQCghvcmRlcl9pZBgBIAEoCRIVCg1jdXN0b21lcl9uYW1lGAIgASgJEhYKDmN1c3RvbWVyX2VtYWlsGAMgASgJEkwKCHByb2R1Y3RzGAQgAygLMjoucHVibGljX2FwaS52MS5HZXRPcmRlckZvclRlc3RpbW9uaWFsUmVzcG9uc2UuT3JkZXJQcm9kdWN0EhkKEWFscmVhZHlfc3VibWl0dGVkGAUgASgIQggKBnJlc3VsdCKzAQoYU3VibWl0VGVzdGltb25pYWxSZXF1ZXN0EhIKCnByb2plY3RfaWQYASABKAkSEAoIb3JkZXJfaWQYAiABKAkSFQoNY3VzdG9tZXJfbmFtZRgDIAEoCRIWCglwaG90b191cmwYBCABKAlIAIgBARIOCgZyYXRpbmcYBSABKAUSDwoHbWVzc2FnZRgGIAEoCRITCgtwcm9kdWN0X2lkcxgHIAMoCUIMCgpfcGhvdG9fdXJsIoIBChlTdWJtaXRUZXN0aW1vbmlhbFJlc3BvbnNlEikKB3N1Y2Nlc3MYASABKAsyFi5nb29nbGUucHJvdG9idWYuRW1wdHlIABIwCgdmYWlsdXJlGAIgASgOMh0ucHVibGljX2FwaS52MS5GYWlsdXJlTWVzc2FnZUgAQggKBnJlc3VsdCJmCh5HZXRUZXN0aW1vbmlhbFVwbG9hZFVybFJlcXVlc3QSEgoKcHJvamVjdF9pZBgBIAEoCRIQCghvcmRlcl9pZBgCIAEoCRIQCghmaWxlbmFtZRgDIAEoCRIMCgRzaXplGAQgASgDIkkKH0dldFRlc3RpbW9uaWFsVXBsb2FkVXJsUmVzcG9uc2USEgoKdXBsb2FkX3VybBgBIAEoCRISCgpwdWJsaWNfdXJsGAIgASgJKrQBChdMb2dpbkNvZGVEZWxpdmVyeU1ldGhvZBIqCiZMT0dJTl9DT0RFX0RFTElWRVJZX01FVEhPRF9VTlNQRUNJRklFRBAAEiQKIExPR0lOX0NPREVfREVMSVZFUllfTUVUSE9EX0VNQUlMEAESIwofTE9HSU5fQ09ERV9ERUxJVkVSWV9NRVRIT0RfUFVTSBACEiIKHkxPR0lOX0NPREVfREVMSVZFUllfTUVUSE9EX1NNUxADKuIBCg9Vc2VyUHJvZHVjdFR5cGUSHQoZVVNFUl9QUk9EVUNUX1RZUEVfVU5LTk9XThAAEhsKF1VTRVJfUFJPRFVDVF9UWVBFX0FVRElPEAESGgoWVVNFUl9QUk9EVUNUX1RZUEVfRklMRRACEhwKGFVTRVJfUFJPRFVDVF9UWVBFX1RJQ0tFVBADEhwKGFVTRVJfUFJPRFVDVF9UWVBFX0NPVVJTRRAEEhoKFlVTRVJfUFJPRFVDVF9UWVBFX0NIQVQQBRIfChtVU0VSX1BST0RVQ1RfVFlQRV9DT01NVU5JVFkQBiq9BQoORmFpbHVyZU1lc3NhZ2USGwoXRkFJTFVSRV9NRVNTQUdFX1VOS05PV04QABIjCh9GQUlMVVJFX01FU1NBR0VfRU1BSUxfTk9UX0ZPVU5EEAESIwofRkFJTFVSRV9NRVNTQUdFX0lOQ09SUkVDVF9FTUFJTBACEiIKHkZBSUxVUkVfTUVTU0FHRV9JTkNPUlJFQ1RfQ09ERRADEjAKLEZBSUxVUkVfTUVTU0FHRV9HRU5FUkFURV9BQ0NFU1NfVE9LRU5fRkFJTEVEEAQSIQodRkFJTFVSRV9NRVNTQUdFX0xPR09VVF9GQUlMRUQQBRIlCiFGQUlMVVJFX01FU1NBR0VfUFJEVUNUU19OT1RfRk9VTkQQBhInCiNGQUlMVVJFX01FU1NBR0VfQVVESU9CT09LX05PVF9GT1VORBAHEicKI0ZBSUxVUkVfTUVTU0FHRV9JTkNPUlJFQ1RfQVVESU9CT09LEAgSIAocRkFJTFVSRV9NRVNTQUdFX1VOQVVUSE9SSVpFRBAJEiQKIEZBSUxVUkVfTUVTU0FHRV9USUNLRVRfTk9UX0ZPVU5EEAoSLworRkFJTFVSRV9NRVNTQUdFX0RFTElWRVJZX01FVEhPRF9VTkFWQUlMQUJMRRALEiMKH0ZBSUxVUkVfTUVTU0FHRV9ERUxJVkVSWV9GQUlMRUQQDBIgChxGQUlMVVJFX01FU1NBR0VfUkFURV9MSU1JVEVEEA0SIAocRkFJTFVSRV9NRVNTQUdFX0NPREVfRVhQSVJFRBAOEiUKIUZBSUxVUkVfTUVTU0FHRV9UT09fTUFOWV9BVFRFTVBUUxAPEiQKIEZBSUxVUkVfTUVTU0FHRV9DQVBUQ0hBX1JFUVVJUkVEEBASIwofRkFJTFVSRV9NRVNTQUdFX0NBUFRDSEFfSU5WQUxJRBARKo8BChJOb3RpZmljYXRpb25NZXRob2QSHwobTk9USUZJQ0FUSU9OX01FVEhPRF9VTktOT1dOEAASHQoZTk9USUZJQ0FUSU9OX01FVEhPRF9FTUFJTBABEhsKF05PVElGSUNBVElPTl9NRVRIT0RfU01TEAISHAoYTk9USUZJQ0FUSU9OX01FVEhPRF9QVVNIEAMyuSYKEFB1YmxpY0FwaVNlcnZpY2USSwoIR2V0T3JkZXISHi5wdWJsaWNfYXBpLnYxLkdldE9yZGVyUmVxdWVzdBofLnB1YmxpY19hcGkudjEuR2V0T3JkZXJSZXNwb25zZRJOCglHZXRPcmRlcnMSHy5wdWJsaWNfYXBpLnYxLkdldE9yZGVyc1JlcXVlc3QaIC5wdWJsaWNfYXBpLnYxLkdldE9yZGVyc1Jlc3BvbnNlEmMKEEdldE9yZGVyUmV0cnlVcmwSJi5wdWJsaWNfYXBpLnYxLkdldE9yZGVyUmV0cnlVcmxSZXF1ZXN0GicucHVibGljX2FwaS52MS5HZXRPcmRlclJldHJ5VXJsUmVzcG9uc2USXQoOVXNlclBhbmVsTG9naW4SJC5wdWJsaWNfYXBpLnYxLlVzZXJQYW5lbExvZ2luUmVxdWVzdBolLnB1YmxpY19hcGkudjEuVXNlclBhbmVsTG9naW5SZXNwb25zZRJ1ChZVc2VyUGFuZWxMb2dpbldpdGhDb2RlEiwucHVibGljX2FwaS52MS5Vc2VyUGFuZWxMb2dpbldpdGhDb2RlUmVxdWVzdBotLnB1YmxpY19hcGkudjEuVXNlclBhbmVsTG9naW5XaXRoQ29kZVJlc3BvbnNlElUKD1VzZXJQYW5lbExvZ291dBIlLnB1YmxpY19hcGkudjEuVXNlclBhbmVsTG9nb3V0UmVxdWVzdBobLnB1YmxpY19hcGkudjEuQm9vbFJlc3BvbnNlEmMKFlVzZXJQYW5lbERlbGV0ZUFjY291bnQSLC5wdWJsaWNfYXBpLnYxLlVzZXJQYW5lbERlbGV0ZUFjY291bnRSZXF1ZXN0GhsucHVibGljX2FwaS52MS5Cb29sUmVzcG9uc2USbwoUVXNlclBhbmVsR2V0UHJvZHVjdHMSKi5wdWJsaWNfYXBpLnYxLlVzZXJQYW5lbEdldFByb2R1Y3RzUmVxdWVzdBorLnB1YmxpY19hcGkudjEuVXNlclBhbmVsR2V0UHJvZHVjdHNSZXNwb25zZRKHAQocVXNlclBhbmVsR2V0QXVkaW9ib29rRGV0YWlscxIyLnB1YmxpY19hcGkudjEuVXNlclBhbmVsR2V0QXVkaW9ib29rRGV0YWlsc1JlcXVlc3QaMy5wdWJsaWNfYXBpLnYxLlVzZXJQYW5lbEdldEF1ZGlvYm9va0RldGFpbHNSZXNwb25zZRKrAQooVXNlclBhbmVsR2V0QXVkaW9ib29rRGV0YWlsc0Rvd25sb2FkVVJMcxI+LnB1YmxpY19hcGkudjEuVXNlclBhbmVsR2V0QXVkaW9ib29rRGV0YWlsc0Rvd25sb2FkVVJMc1JlcXVlc3QaPy5wdWJsaWNfYXBpLnYxLlVzZXJQYW5lbEdldEF1ZGlvYm9va0RldGFpbHNEb3dubG9hZFVSTHNSZXNwb25zZRJ4ChdVc2VyUGFuZWxHZXRGaWxlRGV0YWlscxItLnB1YmxpY19hcGkudjEuVXNlclBhbmVsR2V0RmlsZURldGFpbHNSZXF1ZXN0Gi4ucHVibGljX2FwaS52MS5Vc2VyUGFuZWxHZXRGaWxlRGV0YWlsc1Jlc3BvbnNlEn4KGVVzZXJQYW5lbEdldFRpY2tldERldGFpbHMSLy5wdWJsaWNfYXBpLnYxLlVzZXJQYW5lbEdldFRpY2tldERldGFpbHNSZXF1ZXN0GjAucHVibGljX2FwaS52MS5Vc2VyUGFuZWxHZXRUaWNrZXREZXRhaWxzUmVzcG9uc2USWAoTUHVzaFNlbmREZXZpY2VUb2tlbhIpLnB1YmxpY19hcGkudjEuUHVzaFNlbmREZXZpY2VUb2tlblJlcXVlc3QaFi5nb29nbGUucHJvdG9idWYuRW1wdHkSRAoJUHVzaEV2ZW50Eh8ucHVibGljX2FwaS52MS5QdXNoRXZlbnRSZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5ElcKElNob3VsZFNob3BQcm9kdWN0cxIWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eRopLnB1YmxpY19hcGkudjEuU2hvdWxkU2hvcFByb2R1Y3RzUmVzcG9uc2USXwoWU2hvdWxkU2hvd0d1ZXN0Q2F0YWxvZxIWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eRotLnB1YmxpY19hcGkudjEuU2hvdWxkU2hvd0d1ZXN0Q2F0YWxvZ1Jlc3BvbnNlElEKD0dldEd1ZXN0Q2F0YWxvZxIWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eRomLnB1YmxpY19hcGkudjEuR2V0R3Vlc3RDYXRhbG9nUmVzcG9uc2USigEKHVVzZXJQYW5lbFJlc29sdmVQcm9kdWN0QWNjZXNzEjMucHVibGljX2FwaS52MS5Vc2VyUGFuZWxSZXNvbHZlUHJvZHVjdEFjY2Vzc1JlcXVlc3QaNC5wdWJsaWNfYXBpLnYxLlVzZXJQYW5lbFJlc29sdmVQcm9kdWN0QWNjZXNzUmVzcG9uc2USYAoPR2V0U2hvcFByb2R1Y3RzEiUucHVibGljX2FwaS52MS5HZXRTaG9wUHJvZHVjdHNSZXF1ZXN0GiYucHVibGljX2FwaS52MS5HZXRTaG9wUHJvZHVjdHNSZXNwb25zZRJMCg1EaWRCdXlQcm9kdWN0EiMucHVibGljX2FwaS52MS5EaWRCdXlQcm9kdWN0UmVxdWVzdBoWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eRJ4ChdHZXRBcHBTdG9yZUFjY291bnRUb2tlbhItLnB1YmxpY19hcGkudjEuR2V0QXBwU3RvcmVBY2NvdW50VG9rZW5SZXF1ZXN0Gi4ucHVibGljX2FwaS52MS5HZXRBcHBTdG9yZUFjY291bnRUb2tlblJlc3BvbnNlEnUKFlZlcmlmeUFwcFN0b3JlUHVyY2hhc2USLC5wdWJsaWNfYXBpLnYxLlZlcmlmeUFwcFN0b3JlUHVyY2hhc2VSZXF1ZXN0Gi0ucHVibGljX2FwaS52MS5WZXJpZnlBcHBTdG9yZVB1cmNoYXNlUmVzcG9uc2USeAoXR2V0QXBwU3RvcmVFbnRpdGxlbWVudHMSLS5wdWJsaWNfYXBpLnYxLkdldEFwcFN0b3JlRW50aXRsZW1lbnRzUmVxdWVzdBouLnB1YmxpY19hcGkudjEuR2V0QXBwU3RvcmVFbnRpdGxlbWVudHNSZXNwb25zZRJ7ChhSZXN0b3JlQXBwU3RvcmVQdXJjaGFzZXMSLi5wdWJsaWNfYXBpLnYxLlJlc3RvcmVBcHBTdG9yZVB1cmNoYXNlc1JlcXVlc3QaLy5wdWJsaWNfYXBpLnYxLlJlc3RvcmVBcHBTdG9yZVB1cmNoYXNlc1Jlc3BvbnNlEmQKGUNsZWFyQXBwU3RvcmVBY2NvdW50VG9rZW4SLy5wdWJsaWNfYXBpLnYxLkNsZWFyQXBwU3RvcmVBY2NvdW50VG9rZW5SZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5EmkKEkdldFN0b3JlS2l0Q2F0YWxvZxIoLnB1YmxpY19hcGkudjEuR2V0U3RvcmVLaXRDYXRhbG9nUmVxdWVzdBopLnB1YmxpY19hcGkudjEuR2V0U3RvcmVLaXRDYXRhbG9nUmVzcG9uc2USeAoXR2V0Tm90aWZpY2F0aW9uU2V0dGluZ3MSLS5wdWJsaWNfYXBpLnYxLkdldE5vdGlmaWNhdGlvblNldHRpbmdzUmVxdWVzdBouLnB1YmxpY19hcGkudjEuR2V0Tm90aWZpY2F0aW9uU2V0dGluZ3NSZXNwb25zZRKNAQoeR2V0Tm90aWZpY2F0aW9uU2V0dGluZ3NEZXRhaWxzEjQucHVibGljX2FwaS52MS5HZXROb3RpZmljYXRpb25TZXR0aW5nc0RldGFpbHNSZXF1ZXN0GjUucHVibGljX2FwaS52MS5HZXROb3RpZmljYXRpb25TZXR0aW5nc0RldGFpbHNSZXNwb25zZRJyCiBVcGRhdGVHbG9iYWxOb3RpZmljYXRpb25TZXR0aW5ncxI2LnB1YmxpY19hcGkudjEuVXBkYXRlR2xvYmFsTm90aWZpY2F0aW9uU2V0dGluZ3NSZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5EmYKGlVwZGF0ZU5vdGlmaWNhdGlvblNldHRpbmdzEjAucHVibGljX2FwaS52MS5VcGRhdGVOb3RpZmljYXRpb25TZXR0aW5nc1JlcXVlc3QaFi5nb29nbGUucHJvdG9idWYuRW1wdHkSdQoWR2V0Tm90aWZpY2F0aW9uSGlzdG9yeRIsLnB1YmxpY19hcGkudjEuR2V0Tm90aWZpY2F0aW9uSGlzdG9yeVJlcXVlc3QaLS5wdWJsaWNfYXBpLnYxLkdldE5vdGlmaWNhdGlvbkhpc3RvcnlSZXNwb25zZRKEAQobR2V0QXZhaWxhYmxlQ291bnRGb3JQcm9kdWN0EjEucHVibGljX2FwaS52MS5HZXRBdmFpbGFibGVDb3VudEZvclByb2R1Y3RSZXF1ZXN0GjIucHVibGljX2FwaS52MS5HZXRBdmFpbGFibGVDb3VudEZvclByb2R1Y3RSZXNwb25zZRJgCg9HZXRUaGFua1lvdVBhZ2USJS5wdWJsaWNfYXBpLnYxLkdldFRoYW5rWW91UGFnZVJlcXVlc3QaJi5wdWJsaWNfYXBpLnYxLkdldFRoYW5rWW91UGFnZVJlc3BvbnNlEmMKEEdldExvZ2luQnJhbmRpbmcSJi5wdWJsaWNfYXBpLnYxLkdldExvZ2luQnJhbmRpbmdSZXF1ZXN0GicucHVibGljX2FwaS52MS5HZXRMb2dpbkJyYW5kaW5nUmVzcG9uc2USgQEKGklzT25lQ2xpY2tQYXltZW50QXZhaWxhYmxlEjAucHVibGljX2FwaS52MS5Jc09uZUNsaWNrUGF5bWVudEF2YWlsYWJsZVJlcXVlc3QaMS5wdWJsaWNfYXBpLnYxLklzT25lQ2xpY2tQYXltZW50QXZhaWxhYmxlUmVzcG9uc2USaQoSR2V0UHJlT3JkZXJEZXRhaWxzEigucHVibGljX2FwaS52MS5HZXRQcmVPcmRlckRldGFpbHNSZXF1ZXN0GikucHVibGljX2FwaS52MS5HZXRQcmVPcmRlckRldGFpbHNSZXNwb25zZRJ7ChhBcHBsZVBheVZhbGlkYXRlTWVyY2hhbnQSLi5wdWJsaWNfYXBpLnYxLkFwcGxlUGF5VmFsaWRhdGVNZXJjaGFudFJlcXVlc3QaLy5wdWJsaWNfYXBpLnYxLkFwcGxlUGF5VmFsaWRhdGVNZXJjaGFudFJlc3BvbnNlEnsKGEF1dGhvcml6ZU9uZUNsaWNrUGF5bWVudBIuLnB1YmxpY19hcGkudjEuT25lQ2xpY2tBdXRob3JpemVQYXltZW50UmVxdWVzdBovLnB1YmxpY19hcGkudjEuT25lQ2xpY2tBdXRob3JpemVQYXltZW50UmVzcG9uc2USdgoiTm90aWZ5VXNlckFib3V0UHJvZHVjdEF2YWlsYWJpbGl0eRI4LnB1YmxpY19hcGkudjEuTm90aWZ5VXNlckFib3V0UHJvZHVjdEF2YWlsYWJpbGl0eVJlcXVlc3QaFi5nb29nbGUucHJvdG9idWYuRW1wdHkScgoVR2V0UHVibGljT3JkZXJEZXRhaWxzEisucHVibGljX2FwaS52MS5HZXRQdWJsaWNPcmRlckRldGFpbHNSZXF1ZXN0GiwucHVibGljX2FwaS52MS5HZXRQdWJsaWNPcmRlckRldGFpbHNSZXNwb25zZRJyChVBZGRQdWJsaWNPcmRlckNvbW1lbnQSKy5wdWJsaWNfYXBpLnYxLkFkZFB1YmxpY09yZGVyQ29tbWVudFJlcXVlc3QaLC5wdWJsaWNfYXBpLnYxLkFkZFB1YmxpY09yZGVyQ29tbWVudFJlc3BvbnNlEnUKFkdldE9yZGVyRm9yVGVzdGltb25pYWwSLC5wdWJsaWNfYXBpLnYxLkdldE9yZGVyRm9yVGVzdGltb25pYWxSZXF1ZXN0Gi0ucHVibGljX2FwaS52MS5HZXRPcmRlckZvclRlc3RpbW9uaWFsUmVzcG9uc2USZgoRU3VibWl0VGVzdGltb25pYWwSJy5wdWJsaWNfYXBpLnYxLlN1Ym1pdFRlc3RpbW9uaWFsUmVxdWVzdBooLnB1YmxpY19hcGkudjEuU3VibWl0VGVzdGltb25pYWxSZXNwb25zZRJ4ChdHZXRUZXN0aW1vbmlhbFVwbG9hZFVybBItLnB1YmxpY19hcGkudjEuR2V0VGVzdGltb25pYWxVcGxvYWRVcmxSZXF1ZXN0Gi4ucHVibGljX2FwaS52MS5HZXRUZXN0aW1vbmlhbFVwbG9hZFVybFJlc3BvbnNlYgZwcm90bzM",[t,l,n,i,b,m]);var j=o(s,17),w=o(s,18);var D=o(s,76);var V=(e=>(e[e.UNKNOWN=0]="UNKNOWN",e[e.AUDIO=1]="AUDIO",e[e.FILE=2]="FILE",e[e.TICKET=3]="TICKET",e[e.COURSE=4]="COURSE",e[e.CHAT=5]="CHAT",e[e.COMMUNITY=6]="COMMUNITY",e))(V||{});var z=G(s,0);export{h as a,Z as b,n as c,j as d,w as e,D as f,V as g,z as h};
2
+ //# sourceMappingURL=chunk-GLKBCVNH.mjs.map