From 6a282ca9c238b18e3995b751fa641bc4e46e261e Mon Sep 17 00:00:00 2001 From: Steve Ruiz Date: Mon, 10 Jan 2022 21:09:26 +0000 Subject: [PATCH] Bump dependencies, fix bug on mobile, preserve settings. --- packages/core/CHANGELOG.md | 4 + packages/core/src/hooks/useBoundsEvents.tsx | 2 + .../core/src/hooks/useBoundsHandleEvents.tsx | 7 +- packages/core/src/hooks/useCanvasEvents.tsx | 2 + packages/core/src/hooks/useHandleEvents.tsx | 3 +- packages/core/src/hooks/useShapeEvents.tsx | 3 +- packages/tldraw/CHANGELOG.md | 8 ++ packages/tldraw/package.json | 14 +-- packages/tldraw/src/state/TldrawApp.ts | 4 + yarn.lock | 93 +++++++++++++++++-- 10 files changed, 121 insertions(+), 19 deletions(-) diff --git a/packages/core/CHANGELOG.md b/packages/core/CHANGELOG.md index 77542bc25..7ccf03617 100644 --- a/packages/core/CHANGELOG.md +++ b/packages/core/CHANGELOG.md @@ -1,5 +1,9 @@ # Changelog +## 1.5.0 + +- Fix propagation on pointer move events. + ## 1.4.3 - Update README diff --git a/packages/core/src/hooks/useBoundsEvents.tsx b/packages/core/src/hooks/useBoundsEvents.tsx index 5440e6fdf..f8e7e3bb7 100644 --- a/packages/core/src/hooks/useBoundsEvents.tsx +++ b/packages/core/src/hooks/useBoundsEvents.tsx @@ -38,6 +38,8 @@ export function useBoundsEvents() { callbacks.onPointerUp?.(info, e) }, onPointerMove: (e: React.PointerEvent) => { + if ((e as any).dead) return + else (e as any).dead = true if (!inputs.pointerIsValid(e)) return if (e.currentTarget.hasPointerCapture(e.pointerId)) { callbacks.onDragBounds?.(inputs.pointerMove(e, 'bounds'), e) diff --git a/packages/core/src/hooks/useBoundsHandleEvents.tsx b/packages/core/src/hooks/useBoundsHandleEvents.tsx index d088e829f..ab6b72415 100644 --- a/packages/core/src/hooks/useBoundsHandleEvents.tsx +++ b/packages/core/src/hooks/useBoundsHandleEvents.tsx @@ -9,6 +9,8 @@ export function useBoundsHandleEvents( const onPointerDown = React.useCallback( (e: React.PointerEvent) => { + if ((e as any).dead) return + else (e as any).dead = true if (e.button !== 0) return if (!inputs.pointerIsValid(e)) return const info = inputs.pointerDown(e, id) @@ -23,6 +25,8 @@ export function useBoundsHandleEvents( const onPointerUp = React.useCallback( (e: React.PointerEvent) => { + if ((e as any).dead) return + else (e as any).dead = true if (e.button !== 0) return if (!inputs.pointerIsValid(e)) return const info = inputs.pointerUp(e, id) @@ -34,8 +38,9 @@ export function useBoundsHandleEvents( const onPointerMove = React.useCallback( (e: React.PointerEvent) => { + if ((e as any).dead) return + else (e as any).dead = true if (!inputs.pointerIsValid(e)) return - e.stopPropagation() if (e.currentTarget.hasPointerCapture(e.pointerId)) { callbacks.onDragBoundsHandle?.(inputs.pointerMove(e, id), e) } diff --git a/packages/core/src/hooks/useCanvasEvents.tsx b/packages/core/src/hooks/useCanvasEvents.tsx index 45a3c98d9..708d402ff 100644 --- a/packages/core/src/hooks/useCanvasEvents.tsx +++ b/packages/core/src/hooks/useCanvasEvents.tsx @@ -20,6 +20,8 @@ export function useCanvasEvents() { } }, onPointerMove: (e: React.PointerEvent) => { + if ((e as any).dead) return + else (e as any).dead = true if (!inputs.pointerIsValid(e)) return const info = inputs.pointerMove(e, 'canvas') if (e.currentTarget.hasPointerCapture(e.pointerId)) { diff --git a/packages/core/src/hooks/useHandleEvents.tsx b/packages/core/src/hooks/useHandleEvents.tsx index 5e61f5b44..66fdf33ca 100644 --- a/packages/core/src/hooks/useHandleEvents.tsx +++ b/packages/core/src/hooks/useHandleEvents.tsx @@ -34,8 +34,9 @@ export function useHandleEvents(id: string) { callbacks.onPointerUp?.(info, e) }, onPointerMove: (e: React.PointerEvent) => { + if ((e as any).dead) return + else (e as any).dead = true if (!inputs.pointerIsValid(e)) return - e.stopPropagation() const info = inputs.pointerMove(e, id) if (e.currentTarget.hasPointerCapture(e.pointerId)) { callbacks.onDragHandle?.(info, e) diff --git a/packages/core/src/hooks/useShapeEvents.tsx b/packages/core/src/hooks/useShapeEvents.tsx index 9ea0430fd..b72556029 100644 --- a/packages/core/src/hooks/useShapeEvents.tsx +++ b/packages/core/src/hooks/useShapeEvents.tsx @@ -53,8 +53,9 @@ export function useShapeEvents(id: string) { callbacks.onPointerUp?.(info, e) }, onPointerMove: (e: React.PointerEvent) => { + if ((e as any).dead) return + else (e as any).dead = true if (!inputs.pointerIsValid(e)) return - e.stopPropagation() if (inputs.pointer && e.pointerId !== inputs.pointer.pointerId) return const info = inputs.pointerMove(e, id) if (e.currentTarget.hasPointerCapture(e.pointerId)) { diff --git a/packages/tldraw/CHANGELOG.md b/packages/tldraw/CHANGELOG.md index 4ca39f535..63aada33c 100644 --- a/packages/tldraw/CHANGELOG.md +++ b/packages/tldraw/CHANGELOG.md @@ -1,5 +1,13 @@ # Changelog +## 1.5.0 + +- Fix context menu bug on mobile. +- Support for assets (images and videos) in tldraw multiplayer. +- Support for image exporting in tldraw. +- Breaking change: changed `onImageCreate` and `onImageDelete` props to `onAssetCreate` and `onAssetDelete`. +- Preserve application state between reloads. + ## 1.4.3 - Update README diff --git a/packages/tldraw/package.json b/packages/tldraw/package.json index 7b7b7c960..40546e9fd 100644 --- a/packages/tldraw/package.json +++ b/packages/tldraw/package.json @@ -40,14 +40,14 @@ "react-dom": "^16.8 || ^17.0" }, "dependencies": { - "@radix-ui/react-alert-dialog": "^0.1.1", - "@radix-ui/react-checkbox": "^0.1.1", - "@radix-ui/react-context-menu": "^0.1.1", - "@radix-ui/react-dropdown-menu": "^0.1.1", + "@radix-ui/react-alert-dialog": "^0.1.5", + "@radix-ui/react-checkbox": "^0.1.4", + "@radix-ui/react-context-menu": "^0.1.4", + "@radix-ui/react-dropdown-menu": "^0.1.4", "@radix-ui/react-icons": "^1.0.3", - "@radix-ui/react-radio-group": "^0.1.1", - "@radix-ui/react-tooltip": "^0.1.1", - "@stitches/react": "^1.2.5", + "@radix-ui/react-radio-group": "^0.1.4", + "@radix-ui/react-tooltip": "^0.1.6", + "@stitches/react": "^1.2.6", "@tldraw/core": "^1.4.3", "@tldraw/intersect": "^1.4.3", "@tldraw/vec": "^1.4.3", diff --git a/packages/tldraw/src/state/TldrawApp.ts b/packages/tldraw/src/state/TldrawApp.ts index 6d118f5ba..2eb1c83a7 100644 --- a/packages/tldraw/src/state/TldrawApp.ts +++ b/packages/tldraw/src/state/TldrawApp.ts @@ -1354,9 +1354,13 @@ export class TldrawApp extends StateManager { this.replaceState( { ...TldrawApp.defaultState, + settings: { + ...this.state.settings, + }, document: migrate(document, TldrawApp.version), appState: { ...TldrawApp.defaultState.appState, + ...this.state.appState, currentPageId: Object.keys(document.pages)[0], disableAssets: this.disableAssets, }, diff --git a/yarn.lock b/yarn.lock index e2f554364..621fd9d30 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2836,7 +2836,7 @@ dependencies: "@babel/runtime" "^7.13.10" -"@radix-ui/react-alert-dialog@^0.1.1": +"@radix-ui/react-alert-dialog@^0.1.5": version "0.1.5" resolved "https://registry.yarnpkg.com/@radix-ui/react-alert-dialog/-/react-alert-dialog-0.1.5.tgz#54968d9c5a7e65e2be77642ad3dead9e307f1d98" integrity sha512-Lq9h3GSvw752e7dFll3UWvm4uWiTlYAXLFX6wr/VQPRoa7XaQO8/1NBu4ikLHAecGEd/uDGZLY3aP7ovGPQYtg== @@ -2857,7 +2857,7 @@ "@babel/runtime" "^7.13.10" "@radix-ui/react-primitive" "0.1.3" -"@radix-ui/react-checkbox@^0.1.1": +"@radix-ui/react-checkbox@^0.1.4": version "0.1.4" resolved "https://registry.yarnpkg.com/@radix-ui/react-checkbox/-/react-checkbox-0.1.4.tgz#170957725b0b64b9532621ec14e52c2d3e7a2bb6" integrity sha512-UtiV0y4CNmcAdCqRaGGPxeET/asO44rfKxtBbMIxAD4BGPfSIe4+kkF0q624S5c7q07HXO0vhOYlSObR3Fj2bg== @@ -2891,7 +2891,7 @@ dependencies: "@babel/runtime" "^7.13.10" -"@radix-ui/react-context-menu@^0.1.1": +"@radix-ui/react-context-menu@^0.1.4": version "0.1.4" resolved "https://registry.yarnpkg.com/@radix-ui/react-context-menu/-/react-context-menu-0.1.4.tgz#d4706fe029f74b3330c6965601ed6a3f9165fb2c" integrity sha512-GWwzAZDGT66b5HQAD4nfhSTih3pxhbEnNfVBerKYSL/74VWHZY6xpXf6peeb4m1zorVvYPMoT45KTO6hAJwTFg== @@ -2944,7 +2944,7 @@ "@radix-ui/react-use-callback-ref" "0.1.0" "@radix-ui/react-use-escape-keydown" "0.1.0" -"@radix-ui/react-dropdown-menu@^0.1.1": +"@radix-ui/react-dropdown-menu@^0.1.4": version "0.1.4" resolved "https://registry.yarnpkg.com/@radix-ui/react-dropdown-menu/-/react-dropdown-menu-0.1.4.tgz#c5e7db72b4854ea8d8f9151f7053fa6873eb372f" integrity sha512-KNFHOK+zKKqZ7x3OoxCXZ2TRESRmHpgxkXpY75i/GFt3i5N/RIH5rB9WSdwhdQXM7gkihYZIDwjdmhhSsgzHkw== @@ -3064,7 +3064,7 @@ "@babel/runtime" "^7.13.10" "@radix-ui/react-slot" "0.1.2" -"@radix-ui/react-radio-group@^0.1.1": +"@radix-ui/react-radio-group@^0.1.4": version "0.1.4" resolved "https://registry.yarnpkg.com/@radix-ui/react-radio-group/-/react-radio-group-0.1.4.tgz#a02eaa3c84ccba706b2b231f06c6dd5e1eb0ceae" integrity sha512-ciFiJ/xX6Kn2+ylGlfbkfXUSBkV7FqX6Q3cHx/PH1h5FcCFdh7+FOIOem26AgI/i8NXhKIVJtlNaU6HUa6Sshg== @@ -3104,7 +3104,7 @@ "@babel/runtime" "^7.13.10" "@radix-ui/react-compose-refs" "0.1.0" -"@radix-ui/react-tooltip@^0.1.1": +"@radix-ui/react-tooltip@^0.1.6": version "0.1.6" resolved "https://registry.yarnpkg.com/@radix-ui/react-tooltip/-/react-tooltip-0.1.6.tgz#46a3e385e004aaebd16ecaa1da7d1af70ba3bb45" integrity sha512-0uaRpRmTCQo5yMUkDpv4LEDnaQDoeLXcNNhZonCZdbZBQ7ntvjURIWIigq1/pXZp0UX7oPpFzsXD9jUp8JT0WA== @@ -3419,7 +3419,7 @@ dependencies: "@state-designer/core" latest -"@stitches/react@^1.2.5": +"@stitches/react@^1.2.5", "@stitches/react@^1.2.6": version "1.2.6" resolved "https://registry.yarnpkg.com/@stitches/react/-/react-1.2.6.tgz#61f2a3d1110334ecd33bcb7463650127d42470cb" integrity sha512-gRVITYj8W4jJmoiVxWDv72yCvd12VvtUUAnTzs07EqmtvGCVgKZu3Dx0x5KVCcb0b6tfgvvNH2L84YrzdM4Mag== @@ -4493,6 +4493,21 @@ available-typed-arrays@^1.0.5: resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7" integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== +aws-sdk@^2.1053.0: + version "2.1053.0" + resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.1053.0.tgz#cd8263bde89177351e7ef49d9e6a89d4584c852c" + integrity sha512-bsVudymGczfn7kOsY9tiMFZUCNFOQi7iG3d1HiBFrnEDCKtVTyKuFrXy4iKUPCcjfOaqNnb1S3ZxN/A70MOTkg== + dependencies: + buffer "4.9.2" + events "1.1.1" + ieee754 "1.1.13" + jmespath "0.15.0" + querystring "0.2.0" + sax "1.2.1" + url "0.10.3" + uuid "3.3.2" + xml2js "0.4.19" + aws-sign2@~0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" @@ -4922,6 +4937,15 @@ buffer-xor@^1.0.3: resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" integrity sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk= +buffer@4.9.2: + version "4.9.2" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.2.tgz#230ead344002988644841ab0244af8c44bbe3ef8" + integrity sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg== + dependencies: + base64-js "^1.0.2" + ieee754 "^1.1.4" + isarray "^1.0.0" + buffer@5.6.0: version "5.6.0" resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.6.0.tgz#a31749dc7d81d84db08abf937b6b8c4033f62786" @@ -7294,6 +7318,11 @@ eventemitter3@^4.0.0: resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== +events@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924" + integrity sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ= + events@3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" @@ -8624,6 +8653,11 @@ idb@^6.1.4: resolved "https://registry.yarnpkg.com/idb/-/idb-6.1.5.tgz#dbc53e7adf1ac7c59f9b2bf56e00b4ea4fce8c7b" integrity sha512-IJtugpKkiVXQn5Y+LteyBCNk1N8xpGV3wWZk9EVtZWH8DYkjBn0bX1XnGP9RkyZF0sAcywa6unHqSWKe7q4LGw== +ieee754@1.1.13: + version "1.1.13" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84" + integrity sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg== + ieee754@^1.1.13, ieee754@^1.1.4: version "1.2.1" resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" @@ -9251,7 +9285,7 @@ isarray@0.0.1: resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" integrity sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8= -isarray@1.0.0, isarray@~1.0.0: +isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= @@ -9764,6 +9798,11 @@ jest@^27.3.1: import-local "^3.0.2" jest-cli "^27.4.7" +jmespath@0.15.0: + version "0.15.0" + resolved "https://registry.yarnpkg.com/jmespath/-/jmespath-0.15.0.tgz#a3f222a9aae9f966f5d27c796510e28091764217" + integrity sha1-o/Iiqarp+Wb10nx5ZRDigJF2Qhc= + joi@^17.4.2: version "17.5.0" resolved "https://registry.yarnpkg.com/joi/-/joi-17.5.0.tgz#7e66d0004b5045d971cf416a55fb61d33ac6e011" @@ -12405,6 +12444,11 @@ pumpify@^1.3.3: inherits "^2.0.3" pump "^2.0.0" +punycode@1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" + integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0= + punycode@^2.1.0, punycode@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" @@ -12467,6 +12511,11 @@ querystring-es3@0.2.1: resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" integrity sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM= +querystring@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" + integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= + queue-microtask@^1.2.2: version "1.2.3" resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" @@ -13230,6 +13279,11 @@ sass-lookup@^3.0.0: dependencies: commander "^2.16.0" +sax@1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.1.tgz#7b8e656190b228e81a66aea748480d828cd2d37a" + integrity sha1-e45lYZCyKOgaZq6nSEgNgozS03o= + sax@>=0.6.0, sax@^1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" @@ -14864,6 +14918,14 @@ url-parse-lax@^3.0.0: dependencies: prepend-http "^2.0.0" +url@0.10.3: + version "0.10.3" + resolved "https://registry.yarnpkg.com/url/-/url-0.10.3.tgz#021e4d9c7705f21bbf37d03ceb58767402774c64" + integrity sha1-Ah5NnHcF8hu/N9A861h2dAJ3TGQ= + dependencies: + punycode "1.3.2" + querystring "0.2.0" + use-callback-ref@^1.2.3: version "1.2.5" resolved "https://registry.yarnpkg.com/use-callback-ref/-/use-callback-ref-1.2.5.tgz#6115ed242cfbaed5915499c0a9842ca2912f38a5" @@ -14923,6 +14985,11 @@ utils-merge@1.0.1: resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= +uuid@3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131" + integrity sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA== + uuid@^3.0.1, uuid@^3.3.2: version "3.4.0" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" @@ -15514,6 +15581,14 @@ xml-name-validator@^3.0.0: resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw== +xml2js@0.4.19: + version "0.4.19" + resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.19.tgz#686c20f213209e94abf0d1bcf1efaa291c7827a7" + integrity sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q== + dependencies: + sax ">=0.6.0" + xmlbuilder "~9.0.1" + xml2js@^0.4.23: version "0.4.23" resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.23.tgz#a0c69516752421eb2ac758ee4d4ccf58843eac66" @@ -15527,7 +15602,7 @@ xmlbuilder@>=11.0.1: resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-15.1.1.tgz#9dcdce49eea66d8d10b42cae94a79c3c8d0c2ec5" integrity sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg== -xmlbuilder@^9.0.7: +xmlbuilder@^9.0.7, xmlbuilder@~9.0.1: version "9.0.7" resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-9.0.7.tgz#132ee63d2ec5565c557e20f4c22df9aca686b10d" integrity sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=