I pushed a change to ASJS develop branch that should fix the selection/rollover issue for the Dynamic beads for ArrayList. After thinking about Alex's statement regarding selection and adding/removing, I ran some more tests and discovered that I had inadvertently reset the selection in those beads. After removing that code, and adding code to re-index the itemRenderers after they have shifted, both selection and rollOver seem to be fixed.
—peter On 1/3/18, 3:08 PM, "Piotr Zarzycki" <[email protected]> wrote: >It looks good to me. > > >2018-01-03 20:39 GMT+01:00 Peter Ent <[email protected]>: > >> Well, that bead only dispatches "dataProvidedChanged" regardless of the >> reason. And it does so after the data as changed. We want to know before >> the data changes so we can save the selection and then after the data >> changes so it can be restored, if possible. We need something to send >>out >> an event prior to the changes. >> >> ArrayList only sends post-change events. If we listen for when the >> selectedIndex changes, then we can keep a reference to the item >>selected. >> When ArrayList is updated and sends, say a "itemAdded" event, the model >> must not change the selectedIndex (thus dispatching a event and wiping >>out >> our save). >> >> I think the right way to do this is: >> >> ArrayList - sends itemAdded, itemRemoved, itemUpdated events. This is >>what >> it does now. >> >> DynamicArrayList - extends ArrayList, and sends itemAdding, >>itemRemoving, >> and itemUpdating events prior to making the changes and then calls the >> super function to dispatch the normal post-change event. >> >> DynamicArrayListSelectionModel listens for the "-ing" events and saves >>the >> current selection. When it receives the "-ed" event, it restores the >> selection. >> >> I think this will work and should not be disruptive. >> >> On 1/3/18, 12:26 PM, "Piotr Zarzycki" <[email protected]> wrote: >> >> >Hi Peter, >> > >> >What about DataProviderItemsChangeNotifier - It exactly doing what you >> are >> >saying and what that restoration bead needs. What do you think ? >> > >> >Thanks, Piotr >> > >> > >> >2018-01-03 18:05 GMT+01:00 Peter Ent <[email protected]>: >> > >> >> I've spent this morning wrestling with this. >> >> >> >> Right now when a model (eg, ArraySelectionModel, >> >>ArrayListSelectionModel) >> >> has its dataProvider replaced, it will set the selectedIndex to -1 >>(and >> >> selectedItem to null) if the dataProvider is being set to null; >> >>otherwise >> >> it leaves the values unchanged unless the current value exceeds the >>size >> >> of the new dataProvider. >> >> >> >> A typical way to change things is to update the dataProvider and then >> >>set >> >> the list.dataProvider to null (selectedIndex becomes -1, dispatches >> >> "selectedIndexChanged") followed setting list.dataProvider back to >>the >> >> original dataProvider. This is done because we did not have a dynamic >> >> system. Reseting the selection in this cause falls on the application >> >> writer. >> >> >> >> For dynamic data, I think we also need a dynamic model (eg, >> >> DynamicCollectionViewSelectionModel) which is tuned into the needs >>of a >> >> dynamic system. >> >> >> >> Before changing a dataProvider, the >>DyanmicCollectionViewSelectionModel >> >> will dispatch a "dataProviderChanging" event. This would give a >> >>selection >> >> restoration bead the opportunity to store the current selection. Then >> >>upon >> >> receiving the "dataProviderChanged" event, restore the selection. >> >> >> >> Unfortunately, the selection restoration bead still does not know >>when >> >>an >> >> item will be added or removed. While the model can listen for a >>complete >> >> replacement of the dataProvider and warning with a >> >>"dataProviderChanging" >> >> event, then is no "itemAdding" or "itemRemoving" event prior to an >>item >> >> being added or removed. To do this, we will need to having a new >> >> collection view that extends ArrayList and dispatches those extra >> >>events. >> >> Then the selection restoration bead can operate correctly. >> >> >> >> This is my current thinking. >> >> >> >> —peter >> >> >> >> >> >> On 1/2/18, 4:43 PM, "Alex Harui" <[email protected]> wrote: >> >> >> >> >And this one reason we have beads as a pattern. There is no one >>right >> >>way >> >> >to preserve selection and selection should not always be preserved >>for >> >> >certain kinds of data provider changes. So, create a bead that >> >>performs >> >> >the selection preservation you need and give it a name that makes it >> >>clear >> >> >what it does. Then others can create similar beads for other >> >>strategies. >> >> > >> >> >My 2 cents, >> >> >-Alex >> >> > >> >> >On 1/2/18, 1:26 PM, "Piotr Zarzycki" <[email protected]> >> wrote: >> >> > >> >> >>Peter, >> >> >> >> >> >>You didn't misread, but my thoughts probably didn't far away into >> >>problem >> >> >>resolution. That's why I was surprise why I haven't thought about >> >> >>preserving selection. :) >> >> >> >> >> >>Thanks, Piotr >> >> >> >> >> >> >> >> >>2018-01-02 22:10 GMT+01:00 Peter Ent <[email protected]>: >> >> >> >> >> >>> I thought because you mentioned that rollover and selection were >> >>messed >> >> >>> up, that was the thing needing attention. I must have misread >>your >> >> >>>email; >> >> >>> I'll go back. >> >> >>> >> >> >>> In the meantime, I have a Button that inserts an item into the >> >> >>> dataProvider. Before doing this I am: >> >> >>> >> >> >>> var oldSelection:Object = list.selectedItem; // or >>selectedIndex?? >> >> >>> >> >> >>> >> >> >>> then update the dataProvider by inserting an item into it. For a >> >>List >> >> >>>with >> >> >>> the standard bead set, I have to: >> >> >>> >> >> >>> list.dataProvider = null; >> >> >>> list.dataProvider = applicationModel.dataProvider; >> >> >>> >> >> >>> After that, I just restore the selection: list.dataProvider = >> >> >>>oldSelection >> >> >>> >> >> >>> Need to figure out if the dataProvider will change, save the >> >>selection, >> >> >>> allow the change, then restore it. >> >> >>> >> >> >>> —peter >> >> >>> >> >> >>> On 1/2/18, 3:58 PM, "Piotr Zarzycki" <[email protected]> >> >> wrote: >> >> >>> >> >> >>> >How are you doing that preservation, by simply saving item >> >>somewhere >> >> >>> >before >> >> >>> >remove/add operation ? >> >> >>> > >> >> >>> >I'm not following the part where we you wanted some opinion. >> >>Actually >> >> >>>in >> >> >>> >case of refreshing I didn't even thing about saving selection, >>but >> >> >>>it's >> >> >>> >true that it should happen! It's surprises me that in my app I >> >>forgot >> >> >>> >about >> >> >>> >that. :) >> >> >>> > >> >> >>> >Thanks, Piotr >> >> >>> > >> >> >>> > >> >> >>> >2018-01-02 21:44 GMT+01:00 Peter Ent <[email protected]>: >> >> >>> > >> >> >>> >> The first task is to determine if a list's selectedIndex or >> >> >>>selectedItem >> >> >>> >> should be preserved. >> >> >>> >> >> >> >>> >> For selectedIndex, adding or removing an item will get the >>same >> >>row >> >> >>> >> selected until that row no longer exists. >> >> >>> >> >> >> >>> >> For selectedItem, adding or removing an item will keep the >>same >> >>item >> >> >>> >> selected until that item no longer exists. For example, if the >> >>4th >> >> >>>item >> >> >>> >>is >> >> >>> >> "red" and you insert an item at position 2, "red" remains >> >>selected >> >> >>>by >> >> >>> >> shifts down a row. >> >> >>> >> >> >> >>> >> I can see this working both ways. >> >> >>> >> >> >> >>> >> In either case, first preserving the selection (index or item) >> >> >>>before >> >> >>> >>the >> >> >>> >> add or remove and then restoring it works fine - I did this in >> >> >>> >>application >> >> >>> >> code, not in framework code. Works very nicely, as a matter of >> >>fact. >> >> >>> >>Works >> >> >>> >> for both traditional lists and dynamic lists with the new >>beads >> >> >>>(yours, >> >> >>> >> Piotr, or my new collection ones). Its *very simple* code. >> >> >>> >> >> >> >>> >> So once we decide which selection is preserved, we need to >>decide >> >> >>>where >> >> >>> >> that goes. Even though this code is just a couple of lines, in >> >>the >> >> >>>PAYG >> >> >>> >> world, not every app needs this so it must go into additional >> >>beads >> >> >>> >>since >> >> >>> >> it is added functionality. >> >> >>> >> >> >> >>> >> —peter >> >> >>> >> >> >> >>> >> >> >> >>> >> >> >> >>> >> >> >> >>> >> >> >> >>> >> On 1/2/18, 1:31 PM, "Piotr Zarzycki" >><[email protected]> >> >> >>>wrote: >> >> >>> >> >> >> >>> >> >Hi Peter, >> >> >>> >> > >> >> >>> >> >Welcome after vacation! I sense all ideas when I'm working >>with >> >> >>>that >> >> >>> >> >stuff. >> >> >>> >> >I think you will see the issue with indexes, even if it's not >> >>the >> >> >>>case >> >> >>> >> >with >> >> >>> >> >removing from the list. I will wait for your review with that >> >>index >> >> >>> >> >refresh. >> >> >>> >> > >> >> >>> >> >Thank you so much! :) >> >> >>> >> > >> >> >>> >> > >> >> >>> >> >2018-01-02 19:10 GMT+01:00 Peter Ent >><[email protected]>: >> >> >>> >> > >> >> >>> >> >> Hi, >> >> >>> >> >> >> >> >>> >> >> Catching up and building stuff. I'm going to repeat some >> >>things >> >> >>>for >> >> >>> >>the >> >> >>> >> >> befit of anyone joining Royale for 2018 (and to refresh my >>own >> >> >>> >>thoughts >> >> >>> >> >> coming off of holiday!). >> >> >>> >> >> >> >> >>> >> >> The initial idea of List and related classes was their >>beads >> >>were >> >> >>>to >> >> >>> >>be >> >> >>> >> >> almost static. You'd have data that you would use to create >> >>the >> >> >>> >> >> dataProvider to the list and when set, would cause the >> >> >>>itemRenderers >> >> >>> >>to >> >> >>> >> >>be >> >> >>> >> >> deleted and replaced. Even something as simple as adding >>new >> >>data >> >> >>>to >> >> >>> >>the >> >> >>> >> >> end of the dataProvider would require this reset: you'd >>have >> >>to >> >> >>>clear >> >> >>> >> >>the >> >> >>> >> >> dataProvider (list.dataProver = null) and set it again or >> >>create >> >> >>>a >> >> >>> >> >> completely new dataProvider and set that to the list. >> >> >>> >> >> >> >> >>> >> >> The selected item and index should, in this case, be >>cleared. >> >>I'd >> >> >>> >>have >> >> >>> >> >>to >> >> >>> >> >> run a test to see if that really happens as I don't >>remember. >> >>If >> >> >>>you >> >> >>> >> >>want >> >> >>> >> >> to reset them back (assuming that index still existed) you >> >>would >> >> >>> >>write a >> >> >>> >> >> bead to do it. >> >> >>> >> >> >> >> >>> >> >> Now we are at the dynamic stage where we want to handle >> >>runtime >> >> >>> >>updates >> >> >>> >> >>to >> >> >>> >> >> the dataProvider and create just new itemRenderers and >>insert >> >> >>>them or >> >> >>> >> >> remove itemRenderers when data is deleted from the >> >>dataProvider. >> >> >>> >> >> >> >> >>> >> >> Alex believes that the initial creation and insertions are >>the >> >> >>>most >> >> >>> >> >>common >> >> >>> >> >> of the dynamic actions; removals being less common. As >>such in >> >> >>>the >> >> >>> >>PAYG >> >> >>> >> >> world you would have a bead that handled a replacement of >>the >> >> >>> >> >>dataProvider >> >> >>> >> >> (which covers the initialization step) and a bead which >> >>handled >> >> >>> >> >>additions >> >> >>> >> >> and a bead to handle removals. There's a lot of >>duplication of >> >> >>>code >> >> >>> >>in >> >> >>> >> >> these and under a non-PAYG system you'd just combine these >> >>into a >> >> >>> >>single >> >> >>> >> >> bead to do initialize, add, and removal. >> >> >>> >> >> >> >> >>> >> >> In the dynamic beads, the selection should be preserved. >>That >> >> >>> >> >>information >> >> >>> >> >> is stored in the model. The model doesn't do much else >>accept >> >> >>>keep >> >> >>> >>the >> >> >>> >> >> data. The standard view bead would not know about these >>extra >> >> >>>events >> >> >>> >>so >> >> >>> >> >> yes, we'd need another view bead to intercept those events >>and >> >> >>> >>re-apply >> >> >>> >> >>or >> >> >>> >> >> adjust the selection. >> >> >>> >> >> >> >> >>> >> >> ‹peter >> >> >>> >> >> >> >> >>> >> >> On 12/30/17, 4:29 PM, "Piotr Zarzycki" >> >> >>><[email protected]> >> >> >>> >> >>wrote: >> >> >>> >> >> >> >> >>> >> >> >Peter, >> >> >>> >> >> > >> >> >>> >> >> >I have figure out what is wrong in case of List. I >>reported >> >>in >> >> >>>the >> >> >>> >> >> >previous >> >> >>> >> >> >email that in the ListExample once you remove one item, >> >> >>>something is >> >> >>> >> >>wrong >> >> >>> >> >> >with selection. Issue happened when you removing item in >>the >> >> >>>middle >> >> >>> >>of >> >> >>> >> >> >collection. >> >> >>> >> >> > >> >> >>> >> >> >Let's say that you have 5 items and you are removing item >> >>with >> >> >>> >>index = >> >> >>> >> >>2. >> >> >>> >> >> >Removing will work properly, but StringItemRenderer -> >> >> >>> >> >> >DataItemRenderer -> UIItemRendererBase >> >> >>> >> >> ><- has property "index" which is basically not being >> >>refreshed >> >> >>>after >> >> >>> >> >> >remove. In the result renderers has following indexes: >> >> >>> >> >> > >> >> >>> >> >> >0, >> >> >>> >> >> >1, >> >> >>> >> >> >3, >> >> >>> >> >> >4 >> >> >>> >> >> > >> >> >>> >> >> >Which is messes up selection and roll over color changes. >>How >> >> >>> >>actually >> >> >>> >> >>fix >> >> >>> >> >> >that ? My first thought was that ListView should listen >>for >> >> >>> >> >>"layoutNeeded" >> >> >>> >> >> >(we are dispatching that event after remove, add etc.) and >> >> >>>refresh >> >> >>> >> >>indexes >> >> >>> >> >> >of all renderers. >> >> >>> >> >> > >> >> >>> >> >> >The second thought is that ListView should listen for >>remove >> >> >>>event, >> >> >>> >> >>where >> >> >>> >> >> >we will have index of removed row, so we will be able loop >> >> >>>through >> >> >>> >> >>part of >> >> >>> >> >> >the collection and refresh rest of the indexes. It is more >> >> >>> >>efficient, >> >> >>> >> >>but >> >> >>> >> >> >maybe this is job for new type of View (bead) - >> >>ListRemoveView >> >> >>>bead >> >> >>> >>? >> >> >>> >> >> > >> >> >>> >> >> >Looking forward to your thought once you get back from >> >>Vacation. >> >> >>>:) >> >> >>> >> >> > >> >> >>> >> >> >Thanks, Piotr >> >> >>> >> >> > >> >> >>> >> >> > >> >> >>> >> >> > >> >> >>> >> >> >2017-12-22 15:05 GMT+01:00 Piotr Zarzycki >> >> >>> >><[email protected]>: >> >> >>> >> >> > >> >> >>> >> >> >> Hi Peter, >> >> >>> >> >> >> >> >> >>> >> >> >> I haven't checked your branch yet, but I just pushed >> >>couple of >> >> >>> >> >>things to >> >> >>> >> >> >> the develop which I needed for my examples. Here is the >> >>list >> >> >>>of >> >> >>> >>beads >> >> >>> >> >> >>which >> >> >>> >> >> >> we currently have and can be used for List. I think >>names >> >>are >> >> >>>self >> >> >>> >> >> >> explanatory. >> >> >>> >> >> >> >> >> >>> >> >> >> DynamicAddItemRendererForArrayListData >> >> >>> >> >> >> >> >> >>> >> >> >> DynamicUpdateItemRendererForArrayListData >> >> >>> >> >> >> >> >> >>> >> >> >> DynamicRemoveItemRendererForArrayListData >> >> >>> >> >> >> >> >> >>> >> >> >> DynamicRemoveAllItemRendererForArrayListData >> >> >>> >> >> >> >> >> >>> >> >> >> DynamicRemoveAllByNullItemRendererForArrayListData >> >> >>> >> >> >> >> >> >>> >> >> >> All beads above should be used once you set for your >>list: >> >> >>> >> >> >>IDataProviderItemRendererMapper: >> >> >>> >> >> >>ClassReference("org.apache.royale.html.beads. >> >> >>> >> >> DataItemRendererFactoryForAr >> >> >>> >> >> >>rayList") >> >> >>> >> >> >> >> >> >>> >> >> >> We have also >>DynamicItemsRendererFactoryForArrayListData - >> >> >>>which >> >> >>> >>is >> >> >>> >> >> >>doing actually two things. Create all items once someone >>set >> >> >>> >> >> >>dataProvider (the same logic as in >> >> >>> >> >>DataItemRendererFactoryForArrayList) >> >> >>> >> >> >>AND handle adding to >> >> >>> >> >> >> >> >> >>> >> >> >> ArrayList (the same logic as in >> >> >>> >> >>DynamicAddItemRendererForArrayListData) >> >> >>> >> >> >>- It duplicates logic from those both beads. >> >> >>> >> >> >> >> >> >>> >> >> >> >> >> >>> >> >> >> Two Scenarios with >> >> >>>DynamicItemsRendererFactoryForArrayListData: >> >> >>> >> >> >> >> >> >>> >> >> >> 1) If we use DynamicItemsRendererFactoryForArrayListData >> >> >>>simply >> >> >>> in >> >> >>> >> >>the >> >> >>> >> >> >>List as it is in our ListExample [1] we don't have to >> >>remember >> >> >>>to >> >> >>> >> >>setup: >> >> >>> >> >> >> >> >> >>> >> >> >> IDataProviderItemRendererMapper: >> >> >>> >> >> >>ClassReference("org.apache.royale.html.beads. >> >> >>> >> >> DataItemRendererFactoryForAr >> >> >>> >> >> >>rayList"). >> >> >>> >> >> >> >> >> >>> >> >> >> However in that scenario we will have in List totally >> >>useless >> >> >>>bead >> >> >>> >> >> >>DataItemRendererFactoryForArray which is being added >> default >> >> to >> >> >>> the >> >> >>> >> >> List. >> >> >>> >> >> >> >> >> >>> >> >> >> 2) If we use DynamicItemsRendererFactoryForArrayListData >> >>and >> >> >>>we >> >> >>> >>add >> >> >>> >> >>in >> >> >>> >> >> >>CSS IDataProviderItemRendererMapper: >> >> >>> >> >> >>ClassReference("org.apache.royale.html.beads. >> >> >>> >> >> DataItemRendererFactoryForAr >> >> >>> >> >> >>rayList") >> >> >>> >> >> >> >> >> >>> >> >> >> I'm not sure what can happen actually, cause both beads >>are >> >> >>>using >> >> >>> >>the >> >> >>> >> >> >>same logic to create item renderers. Can be situation >>when >> >>one >> >> >>> >>bead is >> >> >>> >> >> >>create renderers and second one re do this work again ? >>:) >> >> >>> >> >> >> >> >> >>> >> >> >> >> >> >>> >> >> >> Thanks, Piotr >> >> >>> >> >> >> >> >> >>> >> >> >> >> >> >>> >> >> >> >> >> >>> >> >> >> [1] >> >> >>> >> >> >>https://na01.safelinks.protection.outlook.com/?url= >> >> >>> >> >> https%3A%2F%2Fgithub.c >> >> >>> >> >> >>om%2Fapache%2Froyale-asjs%2Fblob% >> >> 2F24b09c787fc1da2d0a19895a2b2d >> >> >>> >> >> 4a440e26c5 >> >> >>> >> >> >>97%2Fexamples%2Froyale%2FListExample%2Fsrc%2Fmain% >> >> >>> >> >> 2Froyale%2FMyInitialVie >> >> >>> >> >> >>w.mxml%23L69&data=02%7C01%7Cpent%40adobe.com% >> >> >>> >> >> 7C94d879f8f6054e10c75508d54f >> >> >>> >> >> >>cc6fe8%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0% >> >> >>> >> >> 7C636502661827506659&sd >> >> >>> >> >> >>ata=W4Ih5Q0IGhGNvOX9jrmn580Qw4ljo%2BavjqABV4%2BJr%2Bc%3D& >> >> >>> reserved=0 >> >> >>> >> >> >> >> >> >>> >> >> >> >> >> >>> >> >> >> >> >> >>> >> >> >> 2017-12-19 20:35 GMT+01:00 Olaf Krueger >> >> >>><[email protected]>: >> >> >>> >> >> >> >> >> >>> >> >> >>> Peter, great to read something about these >>"Collections" >> >>and >> >> >>> >> >> >>>"Hierarchical >> >> >>> >> >> >>> data" stuff here! >> >> >>> >> >> >>> Thanks for working on this, have a nice time and enjoy >> >>your >> >> >>> >>break! >> >> >>> >> >> >>> >> >> >>> >> >> >>> Olaf >> >> >>> >> >> >>> >> >> >>> >> >> >>> >> >> >>> >> >> >>> >> >> >>> >> >> >>> -- >> >> >>> >> >> >>> Sent from: >> >> >>> >> >> >>>https://na01.safelinks.protection.outlook.com/?url= >> >> >>> >> >> http%3A%2F%2Fapache-r >> >> >>> >> >> >> >>>>>oyale-development.20373.n8.nabble.com%2F&data=02%7C01%7Cpent% >> >> >>> >> >> 40adobe.com >> >> >>> >> >> >>>%7C94d879f8f6054e10c75508d54fcc6fe8% >> >> >>> 7Cfa7b1b5a7b34438794aed2c178de >> >> >>> >> >> cee1%7 >> >> >>> >> >> >> >> >>>>>>>>C0%7C0%7C636502661827506659&sdata=Zb1nVaD5dUx1Y89Q1jj4LxqBhtlxoZ >> >> >>> >> >> FlwDFJAq >> >> >>> >> >> >>>ruTsY%3D&reserved=0 >> >> >>> >> >> >>> >> >> >>> >> >> >> >> >> >>> >> >> >> >> >> >>> >> >> >> >> >> >>> >> >> >> -- >> >> >>> >> >> >> >> >> >>> >> >> >> Piotr Zarzycki >> >> >>> >> >> >> >> >> >>> >> >> >> Patreon: >> >> >>> >> >> >>*https://na01.safelinks.protection.outlook.com/?url= >> >> >>> >> >> https%3A%2F%2Fwww.pat >> >> >>> >> >> >>reon.com%2Fpiotrzarzycki&data=02%7C01%7Cpent%40adobe.com >> >> >>> >> >> %7C94d879f8f6054e >> >> >>> >> >> >>10c75508d54fcc6fe8%7Cfa7b1b5a7b34438794aed2c178de >> >> >>> >> >> cee1%7C0%7C0%7C636502661 >> >> >>> >> >> >>>>827506659&sdata=sjS%2Fmydo1M%2FGkkREJsc5CRyA1uFXRUK76zEHFeg >> >> >>> >> >> FXtA%3D&reserv >> >> >>> >> >> >>ed=0 >> >> >>> >> >> >> >> >> >>> >> >> >><https://na01.safelinks.protection.outlook.com/?url= >> >> >>> >> >> https%3A%2F%2Fwww.pat >> >> >>> >> >> >>reon.com%2Fpiotrzarzycki&data=02%7C01%7Cpent%40adobe.com >> >> >>> >> >> %7C94d879f8f6054e >> >> >>> >> >> >>10c75508d54fcc6fe8%7Cfa7b1b5a7b34438794aed2c178de >> >> >>> >> >> cee1%7C0%7C0%7C636502661 >> >> >>> >> >> >>>>827506659&sdata=sjS%2Fmydo1M%2FGkkREJsc5CRyA1uFXRUK76zEHFeg >> >> >>> >> >> FXtA%3D&reserv >> >> >>> >> >> >>ed=0>* >> >> >>> >> >> >> >> >> >>> >> >> > >> >> >>> >> >> > >> >> >>> >> >> > >> >> >>> >> >> >-- >> >> >>> >> >> > >> >> >>> >> >> >Piotr Zarzycki >> >> >>> >> >> > >> >> >>> >> >> >Patreon: >> >> >>> >> >> >*https://na01.safelinks.protection.outlook.com/?url= >> >> >>> >> >> https%3A%2F%2Fwww.patr >> >> >>> >> >> >eon.com%2Fpiotrzarzycki&data=02%7C01%7Cpent%40adobe.com% >> >> >>> >> >> 7C94d879f8f6054e10 >> >> >>> >> >> >c75508d54fcc6fe8%7Cfa7b1b5a7b34438794aed2c178de >> >> >>> >> >> cee1%7C0%7C0%7C636502661827 >> >> >>> >> >> >506659&sdata=sjS%2Fmydo1M%2FGkkREJsc5CRyA1uFXRUK76zEHFeg >> >> >>> >> >> FXtA%3D&reserved=0 >> >> >>> >> >> ><https://na01.safelinks.protection.outlook.com/?url= >> >> >>> >> >> https%3A%2F%2Fwww.patr >> >> >>> >> >> >eon.com%2Fpiotrzarzycki&data=02%7C01%7Cpent%40adobe.com% >> >> >>> >> >> 7C94d879f8f6054e10 >> >> >>> >> >> >c75508d54fcc6fe8%7Cfa7b1b5a7b34438794aed2c178de >> >> >>> >> >> cee1%7C0%7C0%7C636502661827 >> >> >>> >> >> >506659&sdata=sjS%2Fmydo1M%2FGkkREJsc5CRyA1uFXRUK76zEHFeg >> >> >>> >> >> FXtA%3D&reserved=0 >> >> >>> >> >> >>* >> >> >>> >> >> >> >> >>> >> >> >> >> >>> >> > >> >> >>> >> > >> >> >>> >> >-- >> >> >>> >> > >> >> >>> >> >Piotr Zarzycki >> >> >>> >> > >> >> >>> >> >Patreon: >> >> >>> >> >*https://na01.safelinks.protection.outlook.com/?url= >> >> >>> >> https%3A%2F%2Fwww.patr >> >> >>> >> >eon.com%2Fpiotrzarzycki&data=02%7C01%7Cpent%40adobe.com% >> >> >>> >> 7C96bb80bb6fef4b94 >> >> >>> >> >089008d5520f1a9f%7Cfa7b1b5a7b34438794aed2c178de >> >> >>> >> cee1%7C0%7C0%7C636505147194 >> >> >>> >> >> >> >>> >>>474371&sdata=D3%2FGi2wtNJLEO716RK18TbD1VMFdB3V >> >> >>> Kv3Br5KkZfFI%3D&reserved=0 >> >> >>> >> ><https://na01.safelinks.protection.outlook.com/?url= >> >> >>> >> https%3A%2F%2Fwww.patr >> >> >>> >> >eon.com%2Fpiotrzarzycki&data=02%7C01%7Cpent%40adobe.com% >> >> >>> >> 7C96bb80bb6fef4b94 >> >> >>> >> >089008d5520f1a9f%7Cfa7b1b5a7b34438794aed2c178de >> >> >>> >> cee1%7C0%7C0%7C636505147194 >> >> >>> >> >474371&sdata=D3%2FGi2wtNJLEO716RK18TbD1VMFdB3V >> >> >>> >> Kv3Br5KkZfFI%3D&reserved=0>* >> >> >>> >> >> >> >>> >> >> >> >>> > >> >> >>> > >> >> >>> >-- >> >> >>> > >> >> >>> >Piotr Zarzycki >> >> >>> > >> >> >>> >Patreon: >> >> >>> >*https://na01.safelinks.protection.outlook.com/?url= >> >> >>> https%3A%2F%2Fwww.patr >> >> >>> >eon.com%2Fpiotrzarzycki&data=02%7C01%7Cpent%40adobe.com% >> >> >>> 7C61ec983f6a9747bd >> >> >>> >cd7d08d552239493%7Cfa7b1b5a7b34438794aed2c178de >> >> >>> cee1%7C0%7C0%7C636505235128 >> >> >>> >887083&sdata=Y%2BHjYn%2BGj%2Bhb0VVVy7fSW%2BGEvQo2% >> >> >>> 2FUjH2EhucTbxR8Q%3D&rese >> >> >>> >rved=0 >> >> >>> ><https://na01.safelinks.protection.outlook.com/?url= >> >> >>> https%3A%2F%2Fwww.patr >> >> >>> >eon.com%2Fpiotrzarzycki&data=02%7C01%7Cpent%40adobe.com% >> >> >>> 7C61ec983f6a9747bd >> >> >>> >cd7d08d552239493%7Cfa7b1b5a7b34438794aed2c178de >> >> >>> cee1%7C0%7C0%7C636505235128 >> >> >>> >887083&sdata=Y%2BHjYn%2BGj%2Bhb0VVVy7fSW%2BGEvQo2% >> >> >>> 2FUjH2EhucTbxR8Q%3D&rese >> >> >>> >rved=0>* >> >> >>> >> >> >>> >> >> >> >> >> >> >> >> >>-- >> >> >> >> >> >>Piotr Zarzycki >> >> >> >> >> >>Patreon: >> >> >>*https://na01.safelinks.protection.outlook.com/?url= >> >> https%3A%2F%2Fwww.pat >> >> >>r >> >> >>eon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.com >> >> %7C4ed02057c74e4 >> >> >>5 >> >> >>0da30908d552277e71%7Cfa7b1b5a7b34438794aed2c178de >> >> cee1%7C0%7C0%7C636505251 >> >> >>9 >> >> >> >>>>40120787&sdata=aJzPBX5fyLQVXr21gO9aLOIIQhVMgf >> 3QaT4qEcsnWE4%3D&reserved= >> >>>>0 >> >> >><https://na01.safelinks.protection.outlook.com/?url= >> >> https%3A%2F%2Fwww.pat >> >> >>r >> >> >>eon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.com >> >> %7C4ed02057c74e4 >> >> >>5 >> >> >>0da30908d552277e71%7Cfa7b1b5a7b34438794aed2c178de >> >> cee1%7C0%7C0%7C636505251 >> >> >>9 >> >> >>40120787&sdata=aJzPBX5fyLQVXr21gO9aLOIIQhVMgf >> >> 3QaT4qEcsnWE4%3D&reserved=0> >> >> >>* >> >> > >> >> >> >> >> > >> > >> >-- >> > >> >Piotr Zarzycki >> > >> >Patreon: >> >*https://na01.safelinks.protection.outlook.com/?url= >> https%3A%2F%2Fwww.patr >> >eon.com%2Fpiotrzarzycki&data=02%7C01%7Cpent%40adobe.com% >> 7Cbc91b6fdde6b490b >> >314408d552cf1a3d%7Cfa7b1b5a7b34438794aed2c178de >> cee1%7C0%7C0%7C636505971860 >> >>>386569&sdata=6jY4KSQS6PyNDnWtW3XBVP69nGU%2FHJYfyxHdhurBwh0%3D&reserved=0 >> ><https://na01.safelinks.protection.outlook.com/?url= >> https%3A%2F%2Fwww.patr >> >eon.com%2Fpiotrzarzycki&data=02%7C01%7Cpent%40adobe.com% >> 7Cbc91b6fdde6b490b >> >314408d552cf1a3d%7Cfa7b1b5a7b34438794aed2c178de >> cee1%7C0%7C0%7C636505971860 >> >386569&sdata=6jY4KSQS6PyNDnWtW3XBVP69nGU%2FHJYfyxHdhurBwh0%3D&reserved= >> 0>* >> >> > > >-- > >Piotr Zarzycki > >Patreon: >*https://na01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.patr >eon.com%2Fpiotrzarzycki&data=02%7C01%7Cpent%40adobe.com%7Cc2b7fe26dda441e9 >ad8b08d552e5d3c2%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C636506069428 >058895&sdata=glQeY9MSe7BD2za%2FCNT4e%2FB6EZszsrZMeEZ5KkMsPNg%3D&reserved=0 ><https://na01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.patr >eon.com%2Fpiotrzarzycki&data=02%7C01%7Cpent%40adobe.com%7Cc2b7fe26dda441e9 >ad8b08d552e5d3c2%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C636506069428 >058895&sdata=glQeY9MSe7BD2za%2FCNT4e%2FB6EZszsrZMeEZ5KkMsPNg%3D&reserved=0 >>*
