Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 15

Oracle Forms Reports Questions and Answers

What is the Maximum allowed length of Record group Column? Record group column names cannot exceed 30 characters. Which parameter can be used to set read level consistency across multiple queries? Read only What are the different types of Record Groups? Query Record Groups NonQuery Record Groups State Record Groups From which designation is it preferred to send the output to the printed? Previewer What are difference between post database commit and post-form commit? Post-form commit fires once during the post and commit transactions process, after the database commit occurs. The post-form-commit trigger fires after inserts, updates and deletes have been posted to the database but before the transactions have been finalized in the issuing the command. The postdatabase-commit trigger fires after oracle forms issues the commit to finalized transactions. What are the different display styles of list items? Pop_listText_listCombo box Which of the above methods is the faster method? performing the calculation in the query is faster. With which function of summary item is the compute at options required? percentage of total functions. What are parameters? Parameters provide a simple mechanism for defining and setting the valuesof inputs that are required by a form at startup. Form parameters are variables of type char,number,date that you define at design time. What are the three types of user exits available ? Oracle Precompiler exits, Oracle call interface, NonOracle user exits. How many windows in a form can have console? Only one window in a form can display the console, and you cannot change the console assignment at runtime. What is an administrative (privileged) user? (for DBA ) Oracle DBAs and operators typically use administrative accounts to manage the database and database instance. An administrative account is a user that is granted SYSOPER or SYSDBA privileges. SYSDBA and SYSOPER allow access to a database instance even if it is not running. Control of these privileges is managed outside of the database via password files and special operating system groups. This password file is created with the orapwd utility.

What are the two repeating frame always associated with matrix object? One down repeating frame below one across repeating frame. What are the master-detail triggers? On-Check_delete_masterOn_clear_detailsOn_populate_details How does one connect to an administrative user? (for DBA ) If an administrative user belongs to the "dba" group on Unix, or the "ORA_DBA" (ORA_sid_DBA) group on NT, he/she can connect like this: connect / as sysdba No password is required. This is equivalent to the desupported "connect internal" method. A password is required for "non-secure" administrative access. These passwords are stored in password files. Remote connections via Net8 are classified as non-secure. Look at this example: connect sys/password as sysdba How does one create a password file? (for DBA ) The Oracle Password File ($ORACLE_HOME/dbs/orapw or orapwSID) stores passwords for users with administrative privileges. One needs to create a password files before remote administrators (like OEM) will be allowed to connect. Follow this procedure to create a new password file: . Log in as the Oracle software owner . Runcommand: orapwd file=$ORACLE_HOME/dbs/orapw$ORACLE_SID password=mypasswd . Shutdown the database (SQLPLUS> SHUTDOWN IMMEDIATE) . Edit the INIT.ORA file and ensure REMOTE_LOGIN_PASSWORDFILE=exclusive is set. . Startup the database (SQLPLUS> STARTUP) NOTE: The orapwd utility presents a security risk in that it receives a password from the command line. This password is visible in the process table of many systems. Administrators needs to be aware of this! Is it possible to modify an external query in a report which contains it? No. Does a grouping done for objects in the layout editor affect the grouping done in the data model editor? No. How does one add users to a password file? (for DBA ) One can select from the SYS.V_$PWFILE_USERS view to see which users are listed in the password file. New users can be added to the password file by granting them SYSDBA or SYSOPER privileges, or by using the orapwd utility. GRANT SYSDBA TO scott; If a break order is set on a column would it affect columns which are under the column? No Why are OPS$ accounts a security risk in a client/server environment? (for DBA ) If you allow people to log in with OPS$ accounts from Windows Workstations, you cannot be sure who they really are. With terminals, you can rely on operating system passwords, with Windows, you cannot. If you set REMOTE_OS_AUTHENT=TRUE in your init.ora file, Oracle assumes that the remote OS has authenticated the user. If REMOTE_OS_AUTHENT is set to FALSE (recommended), remote users will be unable to connect without a password. IDENTIFIED EXTERNALLY will only be in effect from the local

host. Also, if you are using "OPS$" as your prefix, you will be able to log on locally with or without a password, regardless of whether you have identified your ID with a password or defined it to be IDENTIFIED EXTERNALLY. Do user parameters appear in the data modal editor in 2.5? No Can you pass data parameters to forms? No Is it possible to link two groups inside a cross products after the cross products group has been created? no What are the different modals of windows? Modalless windows Modal windows What are modal windows? Modal windows are usually used as dialogs, and have restricted functionality compared to modelless windows. On some platforms for example operators cannot resize, scroll or iconify a modal window. What are the different default triggers created when Master Deletes Property is set to Non-isolated? Master Deletes Property Resulting Triggers ---------------------------------------------------Non-Isolated(the default) On-Check-Delete-Master On-Clear-Details On-Populate-Details What are the different default triggers created when Master Deletes Property is set to isolated? Master Deletes Property Resulting Triggers --------------------------------------------------Isolated On-Clear-Details On-Populate-Details What are the different default triggers created when Master Deletes Property is set to Cascade? Master Deletes Property Resulting Triggers --------------------------------------------------Cascading On-Clear-Details On-Populate-Details Pre-delete What is the diff. bet. setting up of parameters in reports 2.0 reports2.5? LOVs can be attached to parameters in the reports 2.5 parameter form. What are the difference between lov & list item? Lov is a property where as list item is an item. A list item can have only one column, lov can have one or

more columns What is the advantage of the library? Libraries provide a convenient means of storing client-side program units and sharing them among multiple applications. Once you create a library, you can attach it to any other form, menu, or library modules. When you can call library program units from triggers menu items commands and user named routine, you write in the modules to which you have attach the library. When a library attaches another library, program units in the first library can reference program units in the attached library. Library support dynamic loading-that is library program units are loaded into an application only when needed. This can significantly reduce the run-time memory requirements of applications. What is lexical reference? How can it be created? Lexical reference is place_holder for text that can be embedded in a sql statements. A lexical reference can be created using & before the column or parameter name. What is system.coordination_operation? It represents the coordination causing event that occur on the master block in master-detail relation. What is synchronize? It is a terminal screen with the internal state of the form. It updates the screen display to reflect the information that oracle forms has in its internal representation of the screen. What use of command line parameter cmd file? It is a command line argument that allows you to specify a file that contain a set of arguments for r20run. What is a Text_io Package? It allows you to read and write information to a file in the file system. What is forms_DDL? Issues dynamic Sql statements at run time, including server side pl/SQl and DDL How is link tool operation different bet. reports 2 & 2.5? In Reports 2.0 the link tool has to be selected and then two fields to be linked are selected and the link is automatically created. In 2.5 the first field is selected and the link tool is then used to link the first field to the second field. What are the different styles of activation of ole Objects? In place activationExternal activation How do you reference a Parameter? In Pl/Sql, You can reference and set the values of form parameters using bind variables syntax. Ex. PARAMETER name = '' or :block.item = PARAMETER Parameter name What is the difference between object embedding & linking in Oracle forms? In Oracle forms, Embedded objects become part of the form module, and linked objects are references from a form module to a linked source file. Name of the functions used to get/set canvas properties? Get_view_property, Set_view_property

What are the built-ins that are used for setting the LOV properties at runtime? get_lov_property set_lov_property What are the built-ins used for processing rows? Get_group_row_count(function) Get_group_selection_count(function) Get_group_selection(function) Reset_group_selection(procedure) Set_group_selection(procedure) Unset_group_selection(procedure) What are built-ins used for Processing rows? GET_GROUP_ROW_COUNT(function) GET_GROUP_SELECTION_COUNT(function) GET_GROUP_SELECTION(function) RESET_GROUP_SELECTION(procedure) SET_GROUP_SELECTION(procedure) UNSET_GROUP_SELECTION(procedure) What are the built-in used for getting cell values? Get_group_char_cell(function) Get_groupcell(function) Get_group_number_cell(function) What are the built-ins used for Getting cell values? GET_GROUP_CHAR_CELL (function) GET_GROUPCELL(function) GET_GROUP_NUMBET_CELL(function) Atleast how many set of data must a data model have before a data model can be base on it? Four To execute row from being displayed that still use column in the row which property can be used? Format trigger. What are different types of modules available in oracle form? Form module - a collection of objects and code routines Menu modules - a collection of menus and menu item commands that together make up an application menu library module - a collection of user named procedures, functions and packages that can be called from other modules in the application What is the remove on exit property? For a modelless window, it determines whether oracle forms hides the window automatically when the operators navigates to an item in the another window. What is WHEN-Database-record trigger? Fires when oracle forms first marks a record as an insert or an update. The trigger fires as soon as oracle forms determines through validation that the record should be processed by the next post or commit as

an insert or update. c generally occurs only when the operators modifies the first item in the record, and after the operator attempts to navigate out of the item. What is a difference between pre-select and pre-query? Fires during the execute query and count query processing after oracle forms constructs the select statement to be issued, but before the statement is actually issued. The pre-query trigger fires just before oracle forms issues the select statement to the database after the operator as define the example records by entering the query criteria in enter query mode.Pre-query trigger fires before pre-select trigger. What are built-ins associated with timers? find_timercreate_timerdelete_timer What are the built-ins used for finding object ID functions? Find_group(function) Find_column(function) What are the built-ins used for finding Object ID function? FIND_GROUP(function) FIND_COLUMN(function) Any attempt to navigate programmatically to disabled form in a call_form stack is allowed? False Use the Add_group_row procedure to add a row to a static record group 1. true or false? False What third party tools can be used with Oracle EBU/ RMAN? (for DBA) The following Media Management Software Vendors have integrated their media management software packages with Oracle Recovery Manager and Oracle7 Enterprise Backup Utility. The Media Management Vendors will provide first line technical support for the integrated backup/recover solutions. Veritas NetBackup EMC Data Manager (EDM) HP OMNIBack II IBM's Tivoli Storage Manager - formerly ADSM Legato Networker ManageIT Backup and Recovery Sterling Software's SAMS:Alexandria - formerly from Spectralogic Sun Solstice Backup Why and when should one tune? (for DBA) One of the biggest responsibilities of a DBA is to ensure that the Oracle database is tuned properly. The Oracle RDBMS is highly tunable and allows the database to be monitored and adjusted to increase its performance. One should do performance tuning for the following reasons: The speed of computing might be wasting valuable human time (users waiting for response); Enable your system to keep-up with the speed business is conducted; and Optimize hardware usage to save money (companies are spending millions on hardware). Although this FAQ is not overly concerned with hardware issues, one needs to remember than you cannot tune a Buick into a Ferrari. How can a break order be created on a column in an existing group? What are the various sub events a

mouse double click event involves? By dragging the column outside the group. What is the use of place holder column? What are the various sub events a mouse double click event involves? A placeholder column is used to hold calculated values at a specified place rather than allowing is to appear in the actual row where it has to appear. What is the use of hidden column? What are the various sub events a mouse double click event involves? A hidden column is used to when a column has to embed into boilerplate text. What database aspects should be monitored? (for DBA) One should implement a monitoring system to constantly monitor the following aspects of a database. Writing custom scripts, implementing Oracle's Enterprise Manager, or buying a third-party monitoring product can achieve this. If an alarm is triggered, the system should automatically notify the DBA (e-mail, page, etc.) to take appropriate action. Infrastructure availability: . Is the database up and responding to requests . Are the listeners up and responding to requests . Are the Oracle Names and LDAP Servers up and responding to requests . Are the Web Listeners up and responding to requests Things that can cause service outages: . Is the archive log destination filling up? . Objects getting close to their max extents . User and process limits reached Things that can cause bad performance: See question "What tuning indicators can one use?". Where should the tuning effort be directed? (for DBA) Consider the following areas for tuning. The order in which steps are listed needs to be maintained to prevent tuning side effects. For example, it is no good increasing the buffer cache if you can reduce I/O by rewriting a SQL statement. Database Design (if it's not too late): Poor system performance usually results from a poor database design. One should generally normalize to the 3NF. Selective denormalization can provide valuable performance improvements. When designing, always keep the "data access path" in mind. Also look at proper data partitioning, data replication, aggregation tables for decision support systems, etc. Application Tuning: Experience showed that approximately 80% of all Oracle system performance problems are resolved by coding optimal SQL. Also consider proper scheduling of batch tasks after peak working hours. Memory Tuning: Properly size your database buffers (shared pool, buffer cache, log buffer, etc) by looking at your buffer hit ratios. Pin large objects into memory to prevent frequent reloads. Disk I/O Tuning: Database files needs to be properly sized and placed to provide maximum disk subsystem throughput. Also look for frequent disk sorts, full table scans, missing indexes, row chaining, data fragmentation, etc Eliminate Database Contention: Study database locks, latches and wait events carefully and eliminate where possible. Tune the

Operating System: Monitor and tune operating system CPU, I/O and memory utilization. For more information, read the related Oracle FAQ dealing with your specific operating system. What are the various sub events a mouse double click event involves? What are the various sub events a mouse double click event involves? Double clicking the mouse consists of the mouse down, mouse up, mouse click, mouse down & mouse up events. What are the default parameter that appear at run time in the parameter screen? What are the various sub events a mouse double click event involves? Destype and Desname. What are the built-ins used for Creating and deleting groups? CREATE-GROUP (function) CREATE_GROUP_FROM_QUERY(function) DELETE_GROUP(procedure) What are different types of canvas views? Content canvas views Stacked canvas views Horizontal toolbar vertical toolbar. What are the different types of Delete details we can establish in Master-Details? Cascade Isolate Non-isolate What is relation between the window and canvas views? Canvas views are the back ground objects on which you place the interface items (Text items), check boxes, radio groups etc.,) and boilerplate objects (boxes, lines, images etc.,) that operators interact with us they run your form . Each canvas views displayed in a window. What is a User_exit? Calls the user exit named in the user_exit_string. Invokes a 3Gl program by name which has been properly linked into your current oracle forms executable. How is it possible to select generate a select set for the query in the query property sheet? By using the tables/columns button and then specifying the table and the column names. How can values be passed bet. precompiler exits & Oracle call interface? By using the statement EXECIAFGET & EXECIAFPUT. How can a square be drawn in the layout editor of the report writer? By using the rectangle tool while pressing the (Constraint) key. How can a text file be attached to a report while creating in the report writer? By using the link file property in the layout boiler plate property sheet.

How can I message to passed to the user from reports? By using SRW.MESSAGE function. Does one need to drop/ truncate objects before importing? (for DBA) Before one import rows into already populated tables, one needs to truncate or drop these tables to get rid of the old data. If not, the new data will be appended to the existing tables. One must always DROP existing Sequences before re-importing. If the sequences are not dropped, they will generate numbers inconsistent with the rest of the database. Note: It is also advisable to drop indexes before importing to speed up the import process. Indexes can easily be recreated after the data was successfully imported. How can a button be used in a report to give a drill down facility? By setting the action associated with button to Execute pl/sql option and using the SRW.Run_report function. Can one import/export between different versions of Oracle? (for DBA) Different versions of the import utility is upwards compatible. This means that one can take an export file created from an old export version, and import it using a later version of the import utility. This is quite an effective way of upgrading a database from one release of Oracle to the next. Oracle also ships some previous catexpX.sql scripts that can be executed as user SYS enabling older imp/exp versions to work (for backwards compatibility). For example, one can run $ORACLE_HOME/rdbms/admin/catexp7.sql on an Oracle 8 database to allow the Oracle 7.3 exp/imp utilities to run against an Oracle 8 database. What are different types of images? Boiler plate imagesImage Items Can one export to multiple files?/ Can one beat the Unix 2 Gig limit? (for DBA) From Oracle8i, the export utility supports multiple output files. This feature enables large exports to be divided into files whose sizes will not exceed any operating system limits (FILESIZE= parameter). When importing from multi-file export you must provide the same filenames in the same sequence in the FILE= parameter. Look at this example: exp SCOTT/TIGER FILE=D:\F1.dmp,E:\F2.dmp FILESIZE=10m LOG=scott.log Use the following technique if you use an Oracle version prior to 8i: Create a compressed export on the fly. Depending on the type of data, you probably can export up to 10 gigabytes to a single file. This example uses gzip. It offers the best compression I know of, but you can also substitute it with zip, compress or whatever. # create a named pipe mknod exp.pipe p # read the pipe - output to zip file in the background gzip <> scott.exp.gz & # feed the pipe exp userid=scott/tiger file=exp.pipe ... What is bind reference and how can it be created? Bind reference are used to replace the single value in sql, pl/sql statements a bind reference can be created using a (:) before a column or a parameter name. How can one improve Import/ Export performance? (for DBA)

EXPORT: . Set the BUFFER parameter to a high value (e.g. 2M) . Set the RECORDLENGTH parameter to a high value (e.g. 64K) . Stop unnecessary applications to free-up resources for your job. . If you run multiple export sessions, ensure they write to different physical disks. . DO NOT export to an NFS mounted filesystem. It will take forever. IMPORT: . Create an indexfile so that you can create indexes AFTER you have imported data. Do this by setting INDEXFILE to a filename and then import. No data will be imported but a file containing index definitions will be created. You must edit this file afterwards and supply the passwords for the schemas on all CONNECT statements. . Place the file to be imported on a separate physical disk from the oracle data files . Increase DB_CACHE_SIZE (DB_BLOCK_BUFFERS prior to 9i) considerably in the init$SID.ora file . Set the LOG_BUFFER to a big value and restart oracle. . Stop redo log archiving if it is running (ALTER DATABASE NOARCHIVELOG;) . Create a BIG tablespace with a BIG rollback segment inside. Set all other rollback segments offline (except the SYSTEM rollback segment of course). The rollback segment must be as big as your biggest table (I think?) . Use COMMIT=N in the import parameter file if you can afford it . Use ANALYZE=N in the import parameter file to avoid time consuming ANALYZE statements . Remember to run the indexfile previously created Give the sequence of execution of the various report triggers? Before form , After form , Before report, Between page, After report. What are the common Import/ Export problems? (for DBA ) ORA-00001: Unique constraint (...) violated - You are importing duplicate rows. Use IGNORE=NO to skip tables that already exist (imp will give an error if the object is re-created). ORA-01555: Snapshot too old - Ask your users to STOP working while you are exporting or use parameter CONSISTENT=NO ORA-01562: Failed to extend rollback segment - Create bigger rollback segments or set parameter COMMIT=Y while importing IMP-00015: Statement failed ... object already exists... - Use the IGNORE=Y import parameter to ignore these errors, but be careful as you might end up with duplicate rows. Why is it preferable to create a fewer no. of queries in the data model? Because for each query, report has to open a separate cursor and has to rebind, execute and fetch data.

****^^^^**** I'm preparing for an interview. I found these from some of the topic questions. The last time I used Oracle Forms/Reports was more than 2 years ago. My computer does not have a Personal Oracle so I can at least see the Help file, nor do I have yet the books to refer to. It will be very helpful in my preparation if you can provide the answers for any the following questions. 1. How to use single data block to query multiple tables 2. How to see the select statement when we issue execute_query 3. How do you trap default forms processing ( DML)

4. What is purpose and order of firing the following triggers - on fetch - on select 5. What is the number of records buffered and Query array size properties of data block 6. What is the difference between object libraries and object groups 7. What is the difference between PL/SQL library and object library 8. What is the difference between pre-text-item and when-new-item-instance triggers 9. What is the order of firing the following triggers - when-new-form-instance - pre-text-item (Both are in form-level) 10. What is the default validation unit of form module 11. What is the order of checking for a program unit from form module(local program unit, library, stored procedure) 13. what is the use of pre text/pre record/pre form 14. what is id_null function 15. what is the difference between call_form , open_form, new_form - Which is restricted built-in and why? - Which can't issue savepoint 16. which are the triggers will fire in the following situation: I have three text items 1. Text-item1 1.key-next-item Go_item (:text_item2); Go_item (:text_item3); 2. Text-item2 1. Pre-text-item 2. When-validate-item 3. When-new-item-instance 4. Key-next-item 5. Post-text-item 6. Post-change 3. Text-item3 1. Pre-text-item 2. When-validate-item 3. When-new-item-instance 4. Key-next-item 5. Post-text-item 6. Post-change If I press tab or enter key at text-item1 what are the triggers will fire and order of firing during the entire navigation. If I change key-next-item trigger of text-item1 Go_item (:text_item2);

: Text_item2: ='Nagendra'; Go_item (:text_item3); Then what are the triggers will fire and order of firing 17. How do you suppress the logon screen while running the form for the first time 18. What is primary canvas property of window and where it will be useful 19. I have when-button-pressed trigger at form , block and item level If I want to execute first block, form then item level trigger what changes I have to make. 20. what is data parameter and text parameter 21. Can we re-generate a library that is currently accessing by some other session 22. Can we re-generate and save a library that has been attached with some forms but they are running currently. 23. Can we re-generate a library that has been attached with some forms , will the changes will reflect in the referenced forms 24. What is the use of transactional triggers 25. Can we modify a sub classed object ( from object group and from object libraries) 26. How to set forms default directory 27. What is the return data type of populate_group built-in 28. What is the difference between OLE object created at design time and runtime 29. Will the timer will expire during large query executing 30. What is the built-in package available to manipulate text files( forms) 31. Can we define a relation between two control blocks 32. If we change relation property from non-isolated to cascading what changes will occur 33. If we delete on-clear-details trigger in a relation what happens 34. What is the first trigger fires when we run a form 35. What is the use of enforce primary key property of data block 36. Can we put items other than buttons in the toolbars 37. Which object relates content and stacked canvases(window) 38. How to navigate from one form to other form(built-in) 39. How to copy values from list item to record group 40. In a non-isolated relation what is the order of firing the following triggers 1. on-populate-details 2. on-clear-details 3. pre-query 4. pre-select 41. How to find out the previous form id in multi form application(it's system variable) 42. How to use single LOV for multiple items Multiple choice: 1. What is the size of Varchar in Oracle 8.0 ? a. 2000 b. 4000 c. 254 d. none of the above 2. What is the size of Varchar in Oracle 7.0 ?

a. 2000 b. 4000 c. 254 d. none of the above 3. The default value the lpad function takes is a. a space (' ') b. an asterisk c. The default value is not optional d. None of the above 4. The no. of columns that may be used as composite primary key in oracle 8 a. 8 b. 16 c. 32 d. none of the above 5. which of the following is true about add_months a. we can pass a numerical value in first parameter b. we can pass a negative value in second parameter c. Both a & b d. None of the above 6. The latest date that can be stored in oracle 8 a. 31st Dec 4012 A.D b. 31st Dec 4011 A.D c. Dec 31st ,9999 d. None of the above. 7. What happens when the first date is greater than the second date that is passed to the months_between function in oracle 8. a. It gives an error b. It gives a negative value c. None of the above 8. Regarding the Summary query which of the following is true a. The order of the base column list in the select statement should be same in the Group by clause. b. The order of the base column list in the select statement need not be same in the Group by clause. c. None of the above 9. Regarding the Summary query which of the following is true a. All the base table columns selected in the select list should be specified in the Group by clause. b. All the base table columns selected in the select list need not be specified in the Group by clause. c. None of the above. 10. How do u mask the user from entering irrelevant data ? a. Synonym b. View

c. Index d. sequence 11. What does the length function returns when applied to column of char datatype ? 16. If you want to restrict the user, to enter the same values that has been stored in other table then what constraint do u use? a. Entity integrity b. Referential Integrity c. Both a & b d. None of the above 17. Which of the following is true about NULL? a. when an arithmetic operation is performed on NULL, u will get the result as NULL b. NULL is same as 0. c. NULL is same as blank date. d. None of the above 18. For a DDL statement, which of the following is true a. A DDL statement is preceded and followed by commit. b. All the DML statements gets committed even when u get an error after writing DDL statement. c. Both a & b d. None of the above. 19. Which of the following is true for update clause? a. We can update two base tables simultaneously b. U can use a subquery in SET clause of the UPDATE statement. c. Both a & b d. None of the above 20. Which of the following is true for delete? a. Delete statement can be given without writing where clause. b. We can delete two tables simultaneously c. Both a & b d. None of the above 22. In oracle 7 which of the following is true about manipulating the view a. View based on two base tables can be manipulated b. View having a column which contain operation can be manipulated c. Both a & b d. None of the above 23. In oracle 8 which of the following is true about manipulating the view a. View based on two base tables can be manipulated b. View having a column which contain operation can be manipulated c. Both a & b d. None of the above

24. Which of the following is true about packages a. We can write a procedure in package body which has not been specified in package specification. b. We cannot write a procedure in package body which has not been specified in package specification. c. Both a & b d. None of the above. 25. Which of the following is true about outer joins a. The outer join symbol should be present on any one side of the join. b. The outer join symbol may be present on both the sides of the join c. The outer join return the rows from the two tables that donot have matching records in other table. d. None of the above 27. What does OFA stands for ? a. Oracle Flexible Architecture b. Oracle Financials Applications c. Optimal Flexible Architecture d. None of the above

You might also like