summary refs log tree commit diff
path: root/synapse/storage (follow)
Commit message (Expand)AuthorAgeFilesLines
* log when a redaction attempts to redact an event in a different roomRichard van der Hoff2019-07-251-0/+27
* Ignore redactions of m.room.create events (#5701)Richard van der Hoff2019-07-171-0/+12
* More refactoring in `get_events_as_list` (#5707)Richard van der Hoff2019-07-171-27/+37
* Fix redaction authentication (#5700)Richard van der Hoff2019-07-171-85/+129
* Refactor `get_events_as_list` (#5699)Richard van der Hoff2019-07-171-48/+74
* Merge pull request #5589 from matrix-org/erikj/admin_exfiltrate_dataErik Johnston2019-07-152-6/+28
|\
| * Fixup docstringsErik Johnston2019-07-121-7/+5
| * Merge branch 'develop' of github.com:matrix-org/synapse into erikj/admin_exfi...Erik Johnston2019-07-056-39/+25
| |\
| * | Assume key existence. Update docstringsErik Johnston2019-07-051-6/+10
| * | Add basic function to get all data for a user out of synapseErik Johnston2019-07-021-0/+20
* | | Implement access token expiry (#5660)Richard van der Hoff2019-07-122-5/+32
* | | fix typo: backgroud -> backgroundAndrew Morgan2019-07-121-4/+4
* | | small typo fix (#5655)Andrew Morgan2019-07-111-1/+1
* | | Remove access-token support from RegistrationStore.register (#5642)Richard van der Hoff2019-07-101-20/+4
* | | Include the original event in /relations (#5626)Andrew Morgan2019-07-091-1/+1
* | | Remove support for invite_3pid_guest. (#5625)Richard van der Hoff2019-07-051-47/+0
| |/ |/|
* | remove dead transaction persist code (#5622)Richard van der Hoff2019-07-051-28/+0
* | Move logging utilities out of the side drawer of util/ and into logging/ (#5606)Amber Brown2019-07-044-7/+7
* | Fix a number of "Starting txn from sentinel context" warnings (#5605)Richard van der Hoff2019-07-032-4/+18
|/
* Review commentsErik Johnston2019-06-271-3/+1
* Use batch_iter and correct docstringErik Johnston2019-06-261-15/+12
* Rename get_users_whose_devices_changedErik Johnston2019-06-261-3/+3
* Refactor get_user_ids_changed to pull less from DBErik Johnston2019-06-261-10/+41
* Merge pull request #5499 from matrix-org/rav/cleanup_metricsRichard van der Hoff2019-06-241-22/+13
|\
| * blackRichard van der Hoff2019-06-241-6/+2
| * Merge branch 'develop' into rav/cleanup_metricsRichard van der Hoff2019-06-2433-254/+306
| |\
| * | Simplify PerformanceCounters.update interfaceRichard van der Hoff2019-06-191-11/+12
| * | Remove unused _get_event_countersRichard van der Hoff2019-06-191-7/+1
* | | Merge pull request #5498 from matrix-org/rav/fix_clock_reversalRichard van der Hoff2019-06-241-6/+14
|\ \ \ | |_|/ |/| |
| * | Use monotonic clock where possible for metricsRichard van der Hoff2019-06-191-6/+14
* | | Fix "Unexpected entry in 'full_schemas'" log warning (#5509)Richard van der Hoff2019-06-211-1/+1
* | | BlackErik Johnston2019-06-201-2/+2
* | | Merge branch 'develop' of github.com:matrix-org/synapse into erikj/histogram_...Erik Johnston2019-06-2034-276/+286
|\ \ \
| * | | Run Black. (#5482)Amber Brown2019-06-2033-253/+252
| * | | Merge pull request #5480 from matrix-org/erikj/extremities_dummy_eventsErik Johnston2019-06-191-0/+29
| |\ \ \
| | * | | Add experimental option to reduce extremities.Erik Johnston2019-06-181-0/+29
| * | | | Fix typo in deactivation background jobBrendan Abolivier2019-06-191-1/+1
| | |_|/ | |/| |
| * | | Remove Postgres 9.4 support (#5448)Amber Brown2019-06-182-24/+6
| |/ /
* | | Add descriptions and remove redundant set(..)Erik Johnston2019-06-191-3/+5
* | | Add metrics for len of new extremities persisted.Erik Johnston2019-06-171-1/+23
|/ /
* | Merge pull request #5461 from matrix-org/erikj/histograms_are_cumalitiveErik Johnston2019-06-141-1/+2
|\ \
| * | Prometheus histograms are cumalativeErik Johnston2019-06-141-1/+2
* | | Fix background job for deactivated flagBrendan Abolivier2019-06-141-2/+4
* | | Don't send renewal emails to deactivated usersBrendan Abolivier2019-06-142-2/+16
|/ /
* | Track deactivated accounts in the database (#5378)Brendan Abolivier2019-06-142-0/+133
* | Expose statistics on extrems to prometheus (#5384)Amber Brown2019-06-131-13/+31
* | Merge branch 'release-v1.0.0' of github.com:matrix-org/synapse into developErik Johnston2019-06-112-1/+5
|\|
| * Fix defaults on checking threepidsErik Johnston2019-06-101-1/+1
| * Fix bug sending federation transactions with lots of EDUsErik Johnston2019-06-101-0/+4
* | add monthly active users to phonehome stats (#5252)Neil Johnson2019-06-101-15/+29
|/
* Fix key verification when key stored with null valid_until_msErik Johnston2019-06-101-0/+8
* Prevent multiple device list updates from breaking a batch send (#5156)Andrew Morgan2019-06-061-29/+123
* Merge pull request #5320 from matrix-org/hawkowl/full-schema-v1Erik Johnston2019-06-065-2/+2352
|\
| * fix maybeAmber H. Brown2019-06-071-20/+2
| * just user dir?Amber H. Brown2019-06-071-1/+19
| * remove background updates that arent neededAmber H. Brown2019-06-071-33/+1
| * add more commentsAmber Brown2019-06-061-0/+5
| * add stuff in bg updatesAmber Brown2019-06-041-10/+62
| * WHY IS THIS CALLED A SLIGHTLY DIFFERENT THINGAmber Brown2019-06-031-0/+1
| * more fixAmber Brown2019-06-031-0/+38
| * fix schemasAmber Brown2019-06-034-61/+20
| * full schemaAmber Brown2019-06-033-0/+2315
| * prepareAmber Brown2019-06-031-2/+14
* | Add ability to perform password reset via email without trusting the identity...Andrew Morgan2019-06-064-5/+324
* | Merge pull request #5221 from matrix-org/erikj/fix_worker_sytestErik Johnston2019-06-061-1/+11
|\ \
| * | Better wordsErik Johnston2019-06-061-1/+1
| * | Fix get_max_topological_token to never return NoneErik Johnston2019-05-211-1/+11
* | | Fix background updates to handle redactions/rejections (#5352)Erik Johnston2019-06-061-0/+37
* | | FixErik Johnston2019-06-031-1/+2
* | | Ignore room state with null bytes in for room statsErik Johnston2019-06-031-0/+15
| |/ |/|
* | Merge pull request #5276 from matrix-org/babolivier/account_validity_job_deltaErik Johnston2019-05-311-2/+20
|\ \
| * | Move delta from +10% to -10%Brendan Abolivier2019-05-311-2/+2
| * | Make max_delta equal to period * 10%Brendan Abolivier2019-05-311-4/+3
| * | Allow configuring a range for the account validity startup jobBrendan Abolivier2019-05-281-2/+21
* | | Merge pull request #5294 from matrix-org/erikj/speed_up_room_statsErik Johnston2019-05-314-87/+111
|\ \ \
| * | | Add indices. Remove room_ids accidentally addedErik Johnston2019-05-312-13/+56
| * | | Join against events to use its room_id indexErik Johnston2019-05-301-1/+6
| * | | Move deletion from table inside txnErik Johnston2019-05-301-2/+5
| * | | Fetch membership counts all at onceErik Johnston2019-05-302-38/+18
| * | | Get events all at onceErik Johnston2019-05-301-33/+26
* | | | Add index to temp tableErik Johnston2019-05-301-0/+1
|/ / /
* | | Merge pull request #5278 from matrix-org/erikj/cleanup_bad_extremitiesErik Johnston2019-05-305-181/+436
|\ \ \
| * | | Update synapse/storage/events_bg_updates.pyErik Johnston2019-05-301-1/+1
| * | | Rename constantErik Johnston2019-05-301-3/+3
| * | | Move event background updates to a separate fileErik Johnston2019-05-303-369/+405
| * | | Fixup comments and loggingErik Johnston2019-05-302-9/+15
| * | | Log actual number of entries deletedErik Johnston2019-05-292-5/+13
| * | | Add DB bg update to cleanup extremities.Erik Johnston2019-05-292-0/+205
* | | | Implement the SHHS complexity API (#5216)Amber Brown2019-05-301-1/+49
|/ / /
* | | Correctly filter out extremities with soft failed prevs (#5274)Erik Johnston2019-05-291-3/+79
* | | Merge pull request #5268 from matrix-org/babolivier/account_validity_fix_schemaBrendan Abolivier2019-05-281-0/+3
|\| |
| * | Fix schema update for account validityBrendan Abolivier2019-05-281-0/+3
* | | Fix logging for room stats background updateTravis Ralston2019-05-251-1/+1
* | | Store key validity time in the storage layerRichard van der Hoff2019-05-232-10/+44
* | | Rewrite store_server_verify_key to store several keys at once (#5234)Richard van der Hoff2019-05-231-26/+39
* | | Simplifications and comments in do_auth (#5227)Richard van der Hoff2019-05-231-1/+1
* | | Room Statistics (#4338)Amber Brown2019-05-216-3/+597
* | | Merge pull request #5203 from matrix-org/erikj/aggregate_by_senderErik Johnston2019-05-211-1/+1
|\ \ \
| * | | Only count aggregations from distinct sendersErik Johnston2019-05-171-1/+1
* | | | Merge pull request #5212 from matrix-org/erikj/deny_multiple_reactionsErik Johnston2019-05-211-3/+45
|\ \ \ \
| * | | | Block attempts to annotate the same event twiceErik Johnston2019-05-201-3/+45
| | |_|/ | |/| |
* | | | Exclude soft-failed events from fwd-extremity candidates. (#5146)Richard van der Hoff2019-05-211-2/+7
* | | | Merge pull request #5204 from matrix-org/babolivier/account_validity_expirati...Brendan Abolivier2019-05-212-12/+62
|\ \ \ \ | |/ / / |/| | / | | |/ | |/|
| * | Do the select and insert in a single transactionBrendan Abolivier2019-05-211-10/+6
| * | Add startup background job for account validityBrendan Abolivier2019-05-172-12/+66
* | | Rename relation types to match MSCErik Johnston2019-05-201-4/+4
* | | Merge pull request #5209 from matrix-org/erikj/reactions_baseErik Johnston2019-05-204-4/+476
|\ \ \
| * | | Correctly update aggregation counts after redactionErik Johnston2019-05-202-0/+20
| | |/ | |/|
| * | Fixup bsaed on review commentsErik Johnston2019-05-171-15/+17
| * | Add basic editing supportErik Johnston2019-05-161-2/+58
| * | Move parsing of tokens out of storage layerErik Johnston2019-05-161-14/+2
| * | Indirect tuple conversionErik Johnston2019-05-161-0/+6
| * | Fix relations in worker modeErik Johnston2019-05-162-5/+11
| * | Add cache to relationsErik Johnston2019-05-161-0/+8
| * | Add aggregations APIErik Johnston2019-05-161-6/+219
| * | Actually check for None rather falseyErik Johnston2019-05-151-2/+2
| * | Add simple pagination APIErik Johnston2019-05-151-0/+80
| * | Add simple send_relation API and track in DBErik Johnston2019-05-154-0/+93
* | | Spelling and clarificationsErik Johnston2019-05-171-5/+9
* | | Update docstringErik Johnston2019-05-161-1/+12
|/ /
* / Make generating SQL bounds for pagination genericErik Johnston2019-05-151-61/+118
|/
* Update docstring with correct typeErik Johnston2019-05-151-1/+1
* Expose DataStore._get_events as get_events_as_listErik Johnston2019-05-145-29/+53
* Limit the number of EDUs in transactions to 100 as expected by receiver (#5138)Quentin Dufour2019-05-091-1/+1
* Fix infinite loop in presence handlerRichard van der Hoff2019-04-261-0/+18
* Merge branch 'develop' of github.com:matrix-org/synapse into babolivier/accou...Erik Johnston2019-04-1769-3786/+2805
|\
| * Merge pull request #5047 from matrix-org/babolivier/account_expirationBrendan Abolivier2019-04-172-18/+159
| |\
| * \ Merge pull request #5033 from matrix-org/erikj/fix_schema_deltaErik Johnston2019-04-101-1/+3
| |\ \
| | * | Fix schema upgrade when dropping tablesErik Johnston2019-04-091-1/+3
| * | | Merge pull request #5027 from matrix-org/babolivier/account_expirationBrendan Abolivier2019-04-092-0/+54
| |\ \ \ | | |/ / | |/| |
| * | | Rewrite Datastore.get_server_verify_keysRichard van der Hoff2019-04-091-28/+46
| * | | Remove unused server_tls_certificates functions (#5028)Richard van der Hoff2019-04-083-59/+5
| * | | drop tables listed in #1830 (#4992)Neil Johnson2019-04-0824-752/+42
| * | | Merge pull request #5001 from matrix-org/rav/keyring_cleanupsRichard van der Hoff2019-04-081-2/+2
| |\ \ \
| | * | | Fix docstring on get_server_keys_jsonRichard van der Hoff2019-04-041-2/+2
| * | | | Clean up the database pagination code (#5007)Amber Brown2019-04-052-67/+63
| * | | | Add functions to delete a groupErik Johnston2019-04-031-0/+37
| * | | | Fix grammar and document get_current_users_in_room (#4998)Andrew Morgan2019-04-031-1/+1
| |/ / /
| * | | Remove presence lists (#4989)Neil Johnson2019-04-034-96/+20
| * | | Merge pull request #4982 from matrix-org/erikj/msc1915Erik Johnston2019-04-032-0/+141
| |\ \ \
| | * | | Fixup docstringsErik Johnston2019-04-022-5/+5
| | * | | Grandfather in existing user threepidsErik Johnston2019-04-012-0/+37
| | * | | Track IS used to bind 3PIDsErik Johnston2019-04-012-0/+104
| * | | | Run black on the rest of the storage module (#4996)Amber Brown2019-04-0341-2455/+2130
| * | | | Make starting pushers faster during start upErik Johnston2019-04-021-0/+30
| * | | | Fix sync bug when accepting invites (#4956)Richard van der Hoff2019-04-022-11/+18
| * | | | Collect room-version variations into one place (#4969)Richard van der Hoff2019-04-011-1/+2
| |/ / /
| * | | Merge pull request #4955 from matrix-org/rav/merge_state_into_eventsRichard van der Hoff2019-03-281-3/+0
| |\ \ \
| | * | | Combine the CurrentStateDeltaStream into the EventStreamRichard van der Hoff2019-03-271-3/+0
| * | | | Run `black` on some storage modules that the stats branch touches (#4959)Amber Brown2019-03-292-380/+335
| |/ / /
* | | / Add management endpoints for account validityBrendan Abolivier2019-04-171-12/+17
| |_|/ |/| |
* | | Send out emails with links to extend an account's validity periodBrendan Abolivier2019-04-172-18/+159
| |/ |/|
* | Add account expiration featureBrendan Abolivier2019-04-093-1/+55
|/
* Use the state event amount for userdir import batching, not room count (#4944)Amber Brown2019-03-271-8/+20
* Fix bug where read-receipts lost their timestamps (#4927)Richard van der Hoff2019-03-251-1/+3
* Refactor out state delta handling into its own class (#4917)Amber Brown2019-03-252-64/+76
* Fix upsertErik Johnston2019-03-211-0/+1
* comment block_roomErik Johnston2019-03-201-0/+9
* Allow blocking a room multiple timesErik Johnston2019-03-201-2/+4
* Batching in the user directory import (#4900)Amber Brown2019-03-211-0/+13
* Fix user directory background update (#4887)Erik Johnston2019-03-191-1/+1
* Migrate the user directory initial population to a background task (#4864)Amber Brown2019-03-193-96/+312
* Merge pull request #4846 from matrix-org/hawkowl/userdir-searchErik Johnston2019-03-144-75/+92
|\
| * fixupAmber Brown2019-03-131-1/+1
| * fixupAmber Brown2019-03-132-55/+11
| * fixupAmber Brown2019-03-121-1/+1
| * fixupAmber Brown2019-03-121-1/+2
| * fixupAmber Brown2019-03-122-113/+69
| * fixupAmber Brown2019-03-121-1/+1
| * use the old methodAmber Brown2019-03-121-3/+2
| * fixAmber Brown2019-03-121-1/+1
| * pep8Amber Brown2019-03-121-2/+1
| * fixesAmber Brown2019-03-122-9/+56
| * Merge remote-tracking branch 'origin/develop' into hawkowl/userdir-searchAmber Brown2019-03-112-15/+2
| |\
| * | initialAmber Brown2019-03-113-3/+62
* | | Transfer local user's push rules on room upgrade (#4838)Andrew Morgan2019-03-121-0/+57
| |/ |/|
* | Add comment to schemaErik Johnston2019-03-081-0/+2
* | Make `prev_state` field optionalErik Johnston2019-03-081-15/+0
|/
* Merge branch 'develop' of github.com:matrix-org/synapse into erikj/soft_fail_...Erik Johnston2019-03-083-181/+156
|\
| * Rewrite userdir to be faster (#4537)Amber Brown2019-03-072-181/+137
| * Add docstrings from matrix-org-hotfixesErik Johnston2019-03-061-0/+19
* | Implement soft failErik Johnston2019-03-061-0/+1
|/
* Merge pull request #4699 from matrix-org/erikj/stop_fed_not_in_roomErik Johnston2019-03-051-0/+22
|\
| * s/get_forward_events/get_successor_events/Erik Johnston2019-03-041-2/+2
| * Merge branch 'develop' of github.com:matrix-org/synapse into erikj/stop_fed_n...Erik Johnston2019-03-044-43/+120
| |\
| * | Stop backpaginating when events not visibleErik Johnston2019-02-201-0/+22
* | | Merge pull request #4796 from matrix-org/erikj/factor_out_e2e_keysErik Johnston2019-03-053-541/+546
|\ \ \
| * | | Fixup slave storesErik Johnston2019-03-043-541/+546
| | |/ | |/|
* / | Add some debug about processing read receipts.Richard van der Hoff2019-03-041-6/+20
|/ /
* | Move /account/3pid to client_readerErik Johnston2019-02-271-33/+33
* | Limit cache invalidation replication line length (#4748)Erik Johnston2019-02-271-4/+11
* | Add database version to phonehome stats. (#4753)Richard van der Hoff2019-02-273-0/+42
* | Fix state cache invalidation on workersErik Johnston2019-02-221-6/+34
|/
* UPSERT many functionality (#4644)Amber Brown2019-02-201-12/+134
* Merge pull request #4671 from matrix-org/erikj/state_cache_invalidationErik Johnston2019-02-192-25/+58
|\
| * DocsErik Johnston2019-02-191-2/+3
| * Use itertoolsErik Johnston2019-02-191-2/+2
| * DocumentationErik Johnston2019-02-191-4/+4
| * Batch cache invalidation over replicationErik Johnston2019-02-182-25/+57
* | Split /login into client_readerErik Johnston2019-02-181-41/+41
|/
* Split out registration to workerErik Johnston2019-02-181-115/+115
* Add configurable room list publishing rulesErik Johnston2019-02-141-0/+25
* Run `black` on user directory code (#4635)Amber Brown2019-02-131-87/+66
* Merge pull request #4627 from matrix-org/erikj/user_ips_analyzeErik Johnston2019-02-122-3/+31
|\
| * Fix pep8Erik Johnston2019-02-121-1/+1
| * Analyze user_ips before running deduplicationErik Johnston2019-02-122-3/+31
* | Reduce user_ips bloat during dedupe background updateErik Johnston2019-02-121-3/+60
|/
* Merge pull request #4580 from matrix-org/uhoreg/e2e_backup_add_updatingErik Johnston2019-02-111-0/+21
|\
| * add new endpoint to update backup versionsHubert Chathi2019-02-061-0/+21
* | Fix 'no unique or exclusion constraint' error (#4591)Richard van der Hoff2019-02-081-6/+21
* | Filter user directory state query to a subset of state events (#4462)Andrew Morgan2019-02-051-4/+12
|/
* Merge pull request #4530 from matrix-org/anoa/room_upgrade_federatableAndrew Morgan2019-01-311-11/+27
|\
| * Raise an exception instead of returning NoneAndrew Morgan2019-01-311-2/+9
| * New function for getting room's create eventAndrew Morgan2019-01-311-11/+20
* | Fix infinite loop when an event is redacted in a v3 room (#4535)Richard van der Hoff2019-01-311-5/+32
|/
* Fix flake8 (#4519)Amber Brown2019-01-303-86/+86
* Merge branch 'develop' of github.com:matrix-org/synapse into erikj/redactions...Erik Johnston2019-01-291-0/+23
|\
| * Refactor event building into EventBuilderErik Johnston2019-01-291-0/+23
* | Update synapse/storage/events_worker.pyErik Johnston2019-01-291-1/+1
* | Check redaction state when event is pulled out of the databaseErik Johnston2019-01-291-0/+13
* | Fix typoErik Johnston2019-01-291-1/+1
* | Remove unused argErik Johnston2019-01-291-2/+1
* | Update synapse/storage/events_worker.pyRichard van der Hoff2019-01-291-1/+1
* | Implement rechecking of redactionsErik Johnston2019-01-291-1/+25
|/
* Fix typo in upserts code (#4505)Amber Brown2019-01-291-1/+1
* Fix UPSERTs on SQLite 3.24+ (#4477)Amber Brown2019-01-283-12/+20
* Merge branch 'develop' of github.com:matrix-org/synapse into anoa/dm_room_upg...Andrew Morgan2019-01-282-10/+9
|\
| * Merge pull request #4470 from matrix-org/erikj/require_format_versionErik Johnston2019-01-251-6/+2
| |\
| | * Replace missed usages of FrozenEventErik Johnston2019-01-251-6/+2
| * | Merge branch 'develop' of github.com:matrix-org/synapse into erikj/sqlite_nat...Erik Johnston2019-01-252-2/+25
| |\ \
| | * | Don't require sqlite3 when using postgres (#4466)Andrew Morgan2019-01-251-2/+1
| * | | Disable native upserts for sqlite, as they don't workErik Johnston2019-01-251-3/+7
| | |/ | |/|
* | | Merge branch 'develop' of github.com:matrix-org/synapse into anoa/dm_room_upg...Andrew Morgan2019-01-2512-64/+334
|\ \ \ | | |/ | |/|
| * | Merge pull request #4415 from matrix-org/anoa/full_search_upgraded_roomsAndrew Morgan2019-01-251-0/+24
| |\ \ | | |/ | |/|
| | * Merge branch 'anoa/full_search_upgraded_rooms' of github.com:matrix-org/synap...Andrew Morgan2019-01-241-1/+1
| | |\
| | | * Apply suggestions from code reviewRichard van der Hoff2019-01-241-1/+1
| | * | Remove redundant create event None checkAndrew Morgan2019-01-241-3/+0
| | |/
| | * Do not return in a deferred functionAndrew Morgan2019-01-221-3/+3
| | * Ensure new filter is actually createdAndrew Morgan2019-01-221-1/+0
| | * Fix a bug with single-room search searching all roomsAndrew Morgan2019-01-221-1/+28
| | * Search for messages across predecessor roomsAndrew Morgan2019-01-181-0/+1
| * | Revert "Require event format version to parse or create events"Erik Johnston2019-01-251-2/+6
| * | Merge branch 'develop' of github.com:matrix-org/synapse into erikj/require_fo...Erik Johnston2019-01-248-33/+238
| |\ \
| | * \ Merge pull request #4405 from matrix-org/erikj/fixup_rejecting_invitesErik Johnston2019-01-241-4/+4
| | |\ \
| | | * | Use term 'out of band membership' insteadErik Johnston2019-01-241-3/+3
| | * | | Merge pull request #4437 from matrix-org/erikj/event_format_version_v2Erik Johnston2019-01-243-4/+32
| | |\ \ \
| | * | | | Fix UPSERT check (#4459)Amber Brown2019-01-241-5/+28
| | * | | | Use native UPSERTs where possible (#4306)Amber Brown2019-01-247-30/+212
| * | | | | Replace missed usages of FrozenEventErik Johnston2019-01-241-6/+2
| * | | | | Merge branch 'erikj/fixup_rejecting_invites' of github.com:matrix-org/synapse...Erik Johnston2019-01-231-4/+4
| |\ \ \ \ \ | | | |_|/ / | | |/| | |