entries.ts 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699
  1. import {EventEntryFixture} from 'sentry-fixture/eventEntry';
  2. import {type Entry, EntryType} from 'sentry/types/event';
  3. export function Entries123Target(): Entry[] {
  4. return [
  5. EventEntryFixture({
  6. type: EntryType.EXCEPTION,
  7. data: {
  8. values: [
  9. {
  10. stacktrace: {
  11. frames: [
  12. {
  13. function: null,
  14. colNo: null,
  15. vars: {},
  16. symbol: null,
  17. module: '<unknown module>',
  18. lineNo: null,
  19. package: null,
  20. absPath:
  21. 'https://sentry.io/hiventy/kraken-prod/issues/438681831/?referrer=slack#',
  22. inApp: false,
  23. instructionAddr: null,
  24. filename: '/hiventy/kraken-prod/issues/438681831/',
  25. platform: null,
  26. context: [],
  27. symbolAddr: null,
  28. },
  29. ],
  30. framesOmitted: null,
  31. registers: null,
  32. hasSystemFrames: false,
  33. },
  34. module: null,
  35. rawStacktrace: null,
  36. mechanism: null,
  37. threadId: null,
  38. value: 'Unexpected token else',
  39. type: 'SyntaxError',
  40. },
  41. ],
  42. excOmitted: null,
  43. hasSystemFrames: false,
  44. },
  45. }),
  46. EventEntryFixture({
  47. type: EntryType.THREADS,
  48. data: {
  49. values: [
  50. {
  51. stacktrace: {
  52. frames: [
  53. {
  54. function: 'start',
  55. package: 'libdyld.dylib',
  56. image_addr: '0x7fff20256000',
  57. in_app: true,
  58. symbol_addr: '0x7fff20257408',
  59. data: {},
  60. instruction_addr: '0x7fff20257409',
  61. },
  62. {
  63. function: 'main',
  64. package: 'iOS-Swift',
  65. symbol: 'main',
  66. image_addr: '0x10e68f000',
  67. in_app: true,
  68. symbol_addr: '0x10e693440',
  69. data: {},
  70. instruction_addr: '0x10e69348a',
  71. },
  72. {
  73. function: 'UIApplicationMain',
  74. package: 'UIKitCore',
  75. image_addr: '0x7fff23a83000',
  76. in_app: true,
  77. symbol_addr: '0x7fff246722bb',
  78. data: {},
  79. instruction_addr: '0x7fff24672320',
  80. },
  81. {
  82. function: '-[UIApplication _run]',
  83. package: 'UIKitCore',
  84. symbol: '-[UIApplication _run]',
  85. image_addr: '0x7fff23a83000',
  86. in_app: true,
  87. symbol_addr: '0x7fff2466d07f',
  88. data: {},
  89. instruction_addr: '0x7fff2466d40f',
  90. },
  91. {
  92. function: 'GSEventRunModal',
  93. package: 'GraphicsServices',
  94. image_addr: '0x7fff2b790000',
  95. in_app: true,
  96. symbol_addr: '0x7fff2b793d28',
  97. data: {},
  98. instruction_addr: '0x7fff2b793db3',
  99. },
  100. {
  101. function: 'CFRunLoopRunSpecific',
  102. package: 'CoreFoundation',
  103. image_addr: '0x7fff20329000',
  104. in_app: true,
  105. symbol_addr: '0x7fff203a1967',
  106. data: {},
  107. instruction_addr: '0x7fff203a1b9e',
  108. },
  109. {
  110. function: '__CFRunLoopRun',
  111. package: 'CoreFoundation',
  112. image_addr: '0x7fff20329000',
  113. in_app: true,
  114. symbol_addr: '0x7fff203a2089',
  115. data: {},
  116. instruction_addr: '0x7fff203a23f7',
  117. },
  118. {
  119. function: '__CFRunLoopDoSources0',
  120. package: 'CoreFoundation',
  121. image_addr: '0x7fff20329000',
  122. in_app: true,
  123. symbol_addr: '0x7fff203a7b27',
  124. data: {},
  125. instruction_addr: '0x7fff203a7c1f',
  126. },
  127. {
  128. function: '__CFRunLoopDoSource0',
  129. package: 'CoreFoundation',
  130. image_addr: '0x7fff20329000',
  131. in_app: true,
  132. symbol_addr: '0x7fff203a8689',
  133. data: {},
  134. instruction_addr: '0x7fff203a873d',
  135. },
  136. {
  137. function: '__CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__',
  138. package: 'CoreFoundation',
  139. image_addr: '0x7fff20329000',
  140. in_app: true,
  141. symbol_addr: '0x7fff203a8834',
  142. data: {},
  143. instruction_addr: '0x7fff203a8845',
  144. },
  145. {
  146. function: '__eventFetcherSourceCallback',
  147. package: 'UIKitCore',
  148. image_addr: '0x7fff23a83000',
  149. in_app: true,
  150. symbol_addr: '0x7fff24712c68',
  151. data: {},
  152. instruction_addr: '0x7fff24712cd0',
  153. },
  154. {
  155. function: '__processEventQueue',
  156. package: 'UIKitCore',
  157. image_addr: '0x7fff23a83000',
  158. in_app: true,
  159. symbol_addr: '0x7fff24718cf3',
  160. data: {},
  161. instruction_addr: '0x7fff2471c33a',
  162. },
  163. {
  164. function: '-[UIApplicationAccessibility sendEvent:]',
  165. package: 'UIKit',
  166. symbol: '-[UIApplicationAccessibility sendEvent:]',
  167. image_addr: '0x110b5e000',
  168. in_app: true,
  169. symbol_addr: '0x110b8799d',
  170. data: {},
  171. instruction_addr: '0x110b879f2',
  172. },
  173. {
  174. function: '-[UIApplication sendEvent:]',
  175. package: 'UIKitCore',
  176. symbol: '-[UIApplication sendEvent:]',
  177. image_addr: '0x7fff23a83000',
  178. in_app: true,
  179. symbol_addr: '0x7fff2468ba19',
  180. data: {},
  181. instruction_addr: '0x7fff2468bc92',
  182. },
  183. {
  184. function: '-[UIWindow sendEvent:]',
  185. package: 'UIKitCore',
  186. symbol: '-[UIWindow sendEvent:]',
  187. image_addr: '0x7fff23a83000',
  188. in_app: true,
  189. symbol_addr: '0x7fff246b0eb9',
  190. data: {},
  191. instruction_addr: '0x7fff246b215f',
  192. },
  193. {
  194. function: '-[UIWindow _sendTouchesForEvent:]',
  195. package: 'UIKitCore',
  196. symbol: '-[UIWindow _sendTouchesForEvent:]',
  197. image_addr: '0x7fff23a83000',
  198. in_app: true,
  199. symbol_addr: '0x7fff246afddf',
  200. data: {},
  201. instruction_addr: '0x7fff246b02e6',
  202. },
  203. {
  204. function: '-[UIControl touchesEnded:withEvent:]',
  205. package: 'UIKitCore',
  206. symbol: '-[UIControl touchesEnded:withEvent:]',
  207. image_addr: '0x7fff23a83000',
  208. in_app: true,
  209. symbol_addr: '0x7fff23f9e644',
  210. data: {},
  211. instruction_addr: '0x7fff23f9e838',
  212. },
  213. {
  214. function: '-[UIControl _sendActionsForEvents:withEvent:]',
  215. package: 'UIKitCore',
  216. symbol: '-[UIControl _sendActionsForEvents:withEvent:]',
  217. image_addr: '0x7fff23a83000',
  218. in_app: true,
  219. symbol_addr: '0x7fff23f9fe03',
  220. data: {},
  221. instruction_addr: '0x7fff23f9ff4f',
  222. },
  223. {
  224. function: '-[UIControl sendAction:to:forEvent:]',
  225. package: 'UIKitCore',
  226. symbol: '-[UIControl sendAction:to:forEvent:]',
  227. image_addr: '0x7fff23a83000',
  228. in_app: true,
  229. symbol_addr: '0x7fff23f9fb4d',
  230. data: {},
  231. instruction_addr: '0x7fff23f9fc2c',
  232. },
  233. {
  234. function:
  235. '__44-[SentryBreadcrumbTracker swizzleSendAction]_block_invoke_2',
  236. package: 'Sentry',
  237. symbol:
  238. '__44-[SentryBreadcrumbTracker swizzleSendAction]_block_invoke_2',
  239. image_addr: '0x10e90f000',
  240. in_app: false,
  241. symbol_addr: '0x10e951350',
  242. data: {},
  243. instruction_addr: '0x10e9518e9',
  244. },
  245. {
  246. function: '-[UIApplication sendAction:to:from:forEvent:]',
  247. package: 'UIKitCore',
  248. symbol: '-[UIApplication sendAction:to:from:forEvent:]',
  249. image_addr: '0x7fff23a83000',
  250. in_app: true,
  251. symbol_addr: '0x7fff24673978',
  252. data: {},
  253. instruction_addr: '0x7fff246739cb',
  254. },
  255. {
  256. function: 'ViewController.captureNSException',
  257. package: 'iOS-Swift',
  258. symbol: '$s9iOS_Swift14ViewControllerC18captureNSExceptionyyypFTo',
  259. image_addr: '0x10e68f000',
  260. in_app: true,
  261. symbol_addr: '0x10e692290',
  262. raw_function: '@objc ViewController.captureNSException(_:)',
  263. data: {},
  264. instruction_addr: '0x10e6922df',
  265. },
  266. {
  267. function: 'ViewController.captureNSException',
  268. package: 'iOS-Swift',
  269. symbol: '$s9iOS_Swift14ViewControllerC18captureNSExceptionyyypF',
  270. image_addr: '0x10e68f000',
  271. in_app: true,
  272. symbol_addr: '0x10e691e60',
  273. raw_function: 'ViewController.captureNSException(_:)',
  274. data: {},
  275. instruction_addr: '0x10e691fd8',
  276. },
  277. ],
  278. },
  279. name: '',
  280. current: true,
  281. crashed: true,
  282. state: 'RUNNABLE',
  283. raw_stacktrace: {
  284. frames: [
  285. {
  286. function: 'start',
  287. package: 'libdyld.dylib',
  288. image_addr: '0x7fff20256000',
  289. in_app: true,
  290. symbol_addr: '0x7fff20257408',
  291. instruction_addr: '0x7fff20257409',
  292. },
  293. {
  294. function: 'main',
  295. package: 'iOS-Swift',
  296. image_addr: '0x10e68f000',
  297. in_app: true,
  298. symbol_addr: '0x10e693440',
  299. instruction_addr: '0x10e69348b',
  300. },
  301. {
  302. function: 'UIApplicationMain',
  303. package: 'UIKitCore',
  304. image_addr: '0x7fff23a83000',
  305. in_app: true,
  306. symbol_addr: '0x7fff246722bb',
  307. instruction_addr: '0x7fff24672320',
  308. },
  309. {
  310. function: '-[UIApplication _run]',
  311. package: 'UIKitCore',
  312. image_addr: '0x7fff23a83000',
  313. in_app: true,
  314. symbol_addr: '0x7fff2466d07f',
  315. instruction_addr: '0x7fff2466d40f',
  316. },
  317. {
  318. function: 'GSEventRunModal',
  319. package: 'GraphicsServices',
  320. image_addr: '0x7fff2b790000',
  321. in_app: true,
  322. symbol_addr: '0x7fff2b793d28',
  323. instruction_addr: '0x7fff2b793db3',
  324. },
  325. {
  326. function: 'CFRunLoopRunSpecific',
  327. package: 'CoreFoundation',
  328. image_addr: '0x7fff20329000',
  329. in_app: true,
  330. symbol_addr: '0x7fff203a1967',
  331. instruction_addr: '0x7fff203a1b9e',
  332. },
  333. {
  334. function: '__CFRunLoopRun',
  335. package: 'CoreFoundation',
  336. image_addr: '0x7fff20329000',
  337. in_app: true,
  338. symbol_addr: '0x7fff203a2089',
  339. instruction_addr: '0x7fff203a23f7',
  340. },
  341. {
  342. function: '__CFRunLoopDoSources0',
  343. package: 'CoreFoundation',
  344. image_addr: '0x7fff20329000',
  345. in_app: true,
  346. symbol_addr: '0x7fff203a7b27',
  347. instruction_addr: '0x7fff203a7c1f',
  348. },
  349. {
  350. function: '__CFRunLoopDoSource0',
  351. package: 'CoreFoundation',
  352. image_addr: '0x7fff20329000',
  353. in_app: true,
  354. symbol_addr: '0x7fff203a8689',
  355. instruction_addr: '0x7fff203a873d',
  356. },
  357. {
  358. function: '__CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__',
  359. package: 'CoreFoundation',
  360. image_addr: '0x7fff20329000',
  361. in_app: true,
  362. symbol_addr: '0x7fff203a8834',
  363. instruction_addr: '0x7fff203a8845',
  364. },
  365. {
  366. function: '__eventFetcherSourceCallback',
  367. package: 'UIKitCore',
  368. image_addr: '0x7fff23a83000',
  369. in_app: true,
  370. symbol_addr: '0x7fff24712c68',
  371. instruction_addr: '0x7fff24712cd0',
  372. },
  373. {
  374. function: '__processEventQueue',
  375. package: 'UIKitCore',
  376. image_addr: '0x7fff23a83000',
  377. in_app: true,
  378. symbol_addr: '0x7fff24718cf3',
  379. instruction_addr: '0x7fff2471c33a',
  380. },
  381. {
  382. function: '-[UIApplicationAccessibility sendEvent:]',
  383. package: 'UIKit',
  384. image_addr: '0x110b5e000',
  385. in_app: true,
  386. symbol_addr: '0x110b8799d',
  387. instruction_addr: '0x110b879f2',
  388. },
  389. {
  390. function: '-[UIApplication sendEvent:]',
  391. package: 'UIKitCore',
  392. image_addr: '0x7fff23a83000',
  393. in_app: true,
  394. symbol_addr: '0x7fff2468ba19',
  395. instruction_addr: '0x7fff2468bc92',
  396. },
  397. {
  398. function: '-[UIWindow sendEvent:]',
  399. package: 'UIKitCore',
  400. image_addr: '0x7fff23a83000',
  401. in_app: true,
  402. symbol_addr: '0x7fff246b0eb9',
  403. instruction_addr: '0x7fff246b215f',
  404. },
  405. {
  406. function: '-[UIWindow _sendTouchesForEvent:]',
  407. package: 'UIKitCore',
  408. image_addr: '0x7fff23a83000',
  409. in_app: true,
  410. symbol_addr: '0x7fff246afddf',
  411. instruction_addr: '0x7fff246b02e6',
  412. },
  413. {
  414. function: '-[UIControl touchesEnded:withEvent:]',
  415. package: 'UIKitCore',
  416. image_addr: '0x7fff23a83000',
  417. in_app: true,
  418. symbol_addr: '0x7fff23f9e644',
  419. instruction_addr: '0x7fff23f9e838',
  420. },
  421. {
  422. function: '-[UIControl _sendActionsForEvents:withEvent:]',
  423. package: 'UIKitCore',
  424. image_addr: '0x7fff23a83000',
  425. in_app: true,
  426. symbol_addr: '0x7fff23f9fe03',
  427. instruction_addr: '0x7fff23f9ff4f',
  428. },
  429. {
  430. function: '-[UIControl sendAction:to:forEvent:]',
  431. package: 'UIKitCore',
  432. image_addr: '0x7fff23a83000',
  433. in_app: true,
  434. symbol_addr: '0x7fff23f9fb4d',
  435. instruction_addr: '0x7fff23f9fc2c',
  436. },
  437. {
  438. function:
  439. '__44-[SentryBreadcrumbTracker swizzleSendAction]_block_invoke_2',
  440. package: 'Sentry',
  441. image_addr: '0x10e90f000',
  442. in_app: false,
  443. symbol_addr: '0x10e951350',
  444. instruction_addr: '0x10e9518ea',
  445. },
  446. {
  447. function: '-[UIApplication sendAction:to:from:forEvent:]',
  448. package: 'UIKitCore',
  449. image_addr: '0x7fff23a83000',
  450. in_app: true,
  451. symbol_addr: '0x7fff24673978',
  452. instruction_addr: '0x7fff246739cb',
  453. },
  454. {
  455. function: '$s9iOS_Swift14ViewControllerC18captureNSExceptionyyypFTo',
  456. package: 'iOS-Swift',
  457. image_addr: '0x10e68f000',
  458. in_app: true,
  459. symbol_addr: '0x10e692290',
  460. instruction_addr: '0x10e6922e0',
  461. },
  462. {
  463. function: '$s9iOS_Swift14ViewControllerC18captureNSExceptionyyypF',
  464. package: 'iOS-Swift',
  465. image_addr: '0x10e68f000',
  466. in_app: true,
  467. symbol_addr: '0x10e691e60',
  468. instruction_addr: '0x10e691fd8',
  469. },
  470. ],
  471. },
  472. id: 0,
  473. },
  474. {
  475. current: false,
  476. crashed: false,
  477. id: 1,
  478. name: '',
  479. state: 'BLOCKED',
  480. },
  481. {
  482. current: false,
  483. crashed: false,
  484. id: 2,
  485. state: 'WAITING',
  486. name: '',
  487. },
  488. {
  489. current: false,
  490. crashed: false,
  491. id: 3,
  492. state: 'WAITING',
  493. name: 'com.apple.uikit.eventfetch-thread',
  494. },
  495. {
  496. current: false,
  497. crashed: false,
  498. id: 4,
  499. state: 'WAITING',
  500. name: '',
  501. },
  502. {
  503. current: false,
  504. crashed: false,
  505. id: 5,
  506. state: 'WAITING',
  507. name: '',
  508. },
  509. {
  510. current: false,
  511. crashed: false,
  512. id: 6,
  513. state: 'WAITING',
  514. name: '',
  515. },
  516. {
  517. current: false,
  518. crashed: false,
  519. id: 7,
  520. state: 'WAITING',
  521. name: 'com.apple.NSURLConnectionLoader',
  522. },
  523. ],
  524. },
  525. }),
  526. EventEntryFixture({
  527. type: EntryType.BREADCRUMBS,
  528. data: {
  529. values: [
  530. {
  531. category: 'xhr',
  532. level: 'info',
  533. event_id: null,
  534. timestamp: '2018-01-23T08:12:53.591Z',
  535. data: {
  536. url: 'https://reload.getsentry.net/page/',
  537. status_code: '201',
  538. method: 'POST',
  539. },
  540. message: null,
  541. type: 'http',
  542. },
  543. {
  544. category: 'xhr',
  545. level: 'info',
  546. event_id: null,
  547. timestamp: '2018-01-23T08:12:53.636Z',
  548. data: {
  549. url: '/api/0/organizations/?member=1',
  550. status_code: '200',
  551. method: 'GET',
  552. },
  553. message: null,
  554. type: 'http',
  555. },
  556. {
  557. category: 'xhr',
  558. level: 'info',
  559. event_id: null,
  560. timestamp: '2018-01-23T08:12:53.895Z',
  561. data: {url: '/api/0/internal/health/', status_code: '403', method: 'GET'},
  562. message: null,
  563. type: 'http',
  564. },
  565. ],
  566. },
  567. }),
  568. EventEntryFixture({
  569. type: EntryType.REQUEST,
  570. data: {
  571. fragment: '',
  572. cookies: [],
  573. inferredContentType: null,
  574. env: null,
  575. headers: [
  576. ['Referer', '[Filtered]'],
  577. [
  578. 'User-Agent',
  579. 'Mozilla/5.0 (Linux; Android 7.0; ONEPLUS A3003 Build/NRD90M; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/56.0.2924.87 Mobile Safari/537.36',
  580. ],
  581. ],
  582. url: 'https://sentry.io/hiventy/kraken-prod/issues/438681831/',
  583. query: 'referrer=slack',
  584. data: null,
  585. method: null,
  586. },
  587. }),
  588. ];
  589. }
  590. export function Entries123Base(): Entry[] {
  591. return [
  592. EventEntryFixture({
  593. type: EntryType.EXCEPTION,
  594. data: {
  595. values: [
  596. {
  597. stacktrace: {
  598. frames: [
  599. {
  600. function: null,
  601. colNo: null,
  602. vars: {},
  603. symbol: null,
  604. module: '<unknown module>',
  605. lineNo: null,
  606. package: null,
  607. absPath:
  608. 'https://sentry.io/hiventy/kraken-prod/issues/438681831/?referrer=slack#',
  609. inApp: false,
  610. instructionAddr: null,
  611. filename: '/hiventy/kraken-prod/issues/438681831/',
  612. platform: null,
  613. context: [],
  614. symbolAddr: null,
  615. },
  616. ],
  617. framesOmitted: null,
  618. registers: null,
  619. hasSystemFrames: false,
  620. },
  621. module: null,
  622. rawStacktrace: null,
  623. mechanism: null,
  624. threadId: null,
  625. value: 'Unexpected token else',
  626. type: 'SyntaxError',
  627. },
  628. ],
  629. excOmitted: null,
  630. hasSystemFrames: false,
  631. },
  632. }),
  633. EventEntryFixture({
  634. type: EntryType.BREADCRUMBS,
  635. data: {
  636. values: [
  637. {
  638. category: 'xhr',
  639. level: 'info',
  640. event_id: null,
  641. timestamp: '2018-01-23T08:12:53.591Z',
  642. data: {
  643. url: 'https://reload.getsentry.net/page/',
  644. status_code: '201',
  645. method: 'POST',
  646. },
  647. message: null,
  648. type: 'http',
  649. },
  650. {
  651. category: 'xhr',
  652. level: 'info',
  653. event_id: null,
  654. timestamp: '2018-01-23T08:12:53.636Z',
  655. data: {
  656. url: '/api/0/organizations/?member=1',
  657. status_code: '200',
  658. method: 'GET',
  659. },
  660. message: null,
  661. type: 'http',
  662. },
  663. {
  664. category: 'xhr',
  665. level: 'info',
  666. event_id: null,
  667. timestamp: '2018-01-23T08:12:53.895Z',
  668. data: {url: '/api/0/internal/health/', status_code: '403', method: 'GET'},
  669. message: null,
  670. type: 'http',
  671. },
  672. ],
  673. },
  674. }),
  675. EventEntryFixture({
  676. type: EntryType.REQUEST,
  677. data: {
  678. fragment: '',
  679. cookies: [],
  680. inferredContentType: null,
  681. env: null,
  682. headers: [
  683. ['Referer', '[Filtered]'],
  684. [
  685. 'User-Agent',
  686. 'Mozilla/5.0 (Linux; Android 7.0; ONEPLUS A3003 Build/NRD90M; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/56.0.2924.87 Mobile Safari/537.36',
  687. ],
  688. ],
  689. url: 'https://sentry.io/hiventy/kraken-prod/issues/438681831/',
  690. query: 'referrer=slack',
  691. data: null,
  692. method: null,
  693. },
  694. }),
  695. ];
  696. }