--------------Boundary-00=_TI6B0KP3KE5T3HEN611V
Content-Type: text/plain;
charset="iso-8859-1"
Content-Transfer-Encoding: 8bit
The database compare script didn't come out to well the first
time, so I've just embedded them in this post.
The scripts are:
clears.sql
columns.sql
title.sql
schema_diff.sql
Jared
--------------- title.sql - copied from title80.sql
-- specify line width when calling
-- eg @title 'report heading' 90
rem TITLE.SQL - This SQL*Plus script builds a standard report
rem heading for database reports that are XX columns
rem
column TODAY NEW_VALUE CURRENT_DATE NOPRINT
column TIME NEW_VALUE CURRENT_TIME NOPRINT
column DATABASE NEW_VALUE DATA_BASE NOPRINT
set term off feed off
rem
define COMPANY = "BCBSO"
define HEADING = "&1"
col cPageNumLoc new_value PageNumLoc noprint
select ('&&2' - 10 ) cPageNumLoc from dual;
rem
TTITLE LEFT "Date: " current_date CENTER company col &&PageNumLoc "Page:"
format 999 -
SQL.PNO SKIP 1 LEFT "Time: " current_time CENTER heading RIGHT -
format a15 SQL.USER SKIP 1 CENTER format a20 data_base SKIP 2
rem
rem
set heading off
set pagesize 0
rem
column passout new_value dbname noprint
SELECT TO_CHAR(SYSDATE,'MM/DD/YY') TODAY,
TO_CHAR(SYSDATE,'HH:MI AM') TIME,
--DATABASE||' Database' DATABASE,
--rtrim(database) passout
name||' Database' DATABASE,
lower(rtrim(name)) passout
FROM v$database;
set term on feed on
rem
set heading on
set pagesize 58
set line &&2
set newpage 0
define db = '_&dbname'
undef 1 2
-------
-- columns.sql
col blocks format 99,999,999 head 'BLOCKS'
col db_link format a30 head 'DB LINK'
col db_link_instance format a30 head 'DB LINK|INSTANCE'
col db_link_username format a10 head 'DB LINK|USERNAME'
col empty_blocks format 99,999,999 head 'EMPTY BLOCKS'
col host format a10 head 'HOST'
col index_name format a30 head 'INDEX NAME'
col initial_extent format 9,999,999,999 head 'INITIAL|EXTENT'
col instance format a4 head 'INST'
col max_blocks format 9,999,999 head 'MAX BLOCKS'
col max_bytes format 99,999,999,999 head 'MAX BYTES'
col max_extents format 999,999 head 'MAX|EXTENTS'
col min_extents format 999 head 'MIN|EXT'
col next_extent format 9,999,999,999 head 'NEXT|EXTENT'
col object_name format a30 head 'OBJECT NAME'
col owner format a10 head 'OWNER'
col pct_free format 999 head 'PCT|FREE'
col pct_increase format 999 head 'PCT|INC'
col pct_used format 999 head 'PCT|USED'
col synonym_name format a30 head 'SYNONYM NAME'
col table_name format a30 head 'TABLE NAME'
col table_owner format a10 head 'TABLE|OWNER'
col tablespace_name format a15 head 'TABLESPACE|NAME'
col timestamp format a19 head 'TIME STAMP'
col username format a10 head 'USERNAME'
col last_ddl_time head 'LAST DDL|TIME'
col created head 'CREATED'
col procedure_name format a30 head 'PROCEDURE NAME'
col function_name format a30 head 'FUNCTION NAME'
col package_name format a30 head 'PACKAGE NAME'
col package_body_name format a30 head 'PACKAGE BODY NAME'
col segment_name format a30 head 'SEGMENT NAME'
----------------------
-- clears.sql
set pause off
set echo off
set trimspool on
set feed on term on echo off verify off
set line 80
set pages 24 head on
clear col
clear break
clear computes
btitle ''
ttitle ''
btitle off
ttitle off
-------------------
-- schema_diff.sql
-- Jared Still
-- [EMAIL PROTECTED]
-- [EMAIL PROTECTED]
--
--
-- 07/14/1999 jkstill - removed table_owner from the index_diff
-- section as this made all indexes appear
-- in the difference report if the schemas
-- had different names
-- -
-- this script will create reports of the
-- differences between 2 schemas
-- the reports created are:
-- table_diff.txt
-- index_diff.txt
-- arg_diff.txt
-- sequence_diff.txt
-- all differences are checked both
-- ways - schema1 is compared to schema2
-- and then schema2 is compared to schema1
-- it does not matter which database the
-- reports are initiated from
-- requirements:
--
-- either global links or database links to
-- the schemas to be compared
--
-- dba privileges
--
-- this report creates temporary tables for it's reports
-- they are left intact for your perusal
-- tables:
-- arg_diff
-- index_diff
-- table_diff
--
-- REPORT SUMMARY
-- table_diff.txt
-- this report compares tables from 2 schemas
-- included are
-- tables/columns that appear in a table in
-- one schema, and not the other
--
-- any differences between columns; includes
-- order of column, type and size.
-- index_diff.txt
-- this report compares indexes from 2 schemas
-- included are
-- indexes that appear in one schema
-- and not the other
--
-- any differences between index structures
-- does not check for storage parms
-- arg_diff.txt
-- this report compares arguments from 2 schemas
-- included are
-- all procedures/packages/functions and their
-- arguments ( if any ) that appear in one schema
-- and not the other
--
-- any differences in arguments
--
-- note: this currently will not find packages
-- created for global variables
-- i.e.: those packages created without
-- a body and whose header contains
-- only variables
-- sequence_diff.txt
-- this report compares sequences from 2 schemas
--
-- this report may include false positives since
-- sequence information in the database is dynamic
-- 06/15/1999 - added some more features
@clears
@columns
col cuser_1 noprint new_value uuser_1
col cuser_2 noprint new_value uuser_2
col cinstance_1 noprint new_value uinstance_1
col cinstance_2 noprint new_value uinstance_2
prompt
prompt
prompt schema_diff will report differences in tables
prompt between any 2 users on any 2 databases
prompt
set term on feed on
prompt User 1:
set term off feed off
select upper('&1') cuser_1 from dual;
set term on feed on
prompt instance 1:
set term off feed off
select upper('&2') cinstance_1 from dual;
set term on feed on
prompt User 2:
set term off feed off
select upper('&3') cuser_2 from dual;
set term on feed on
prompt instance 2:
set term off feed off
select upper('&4') cinstance_2 from dual;
set term on feed on
-- do table diff
prompt
prompt Creating table difference data
prompt
drop table table_diff;
create table table_diff as
select table_name, column_name, data_type, data_length, data_precision,
data_scale
from all_tab_columns@&&uinstance_1
where 1=2
/
alter table table_diff add( instance varchar2(8) );
create index table_diff_idx on table_diff ( table_name, column_name, instance
);
insert into table_diff ( table_name, column_name, data_type, data_length,
data_precision, data_scale )
select table_name, column_name, data_type, data_length, data_precision,
data_scale
from all_tab_columns@&&uinstance_1
where owner = '&&uuser_1'
minus
select table_name, column_name, data_type, data_length, data_precision,
data_scale
from all_tab_columns@&&uinstance_2
where owner = '&&uuser_2'
/
update table_diff set instance = '&&uinstance_1';
insert into table_diff ( table_name, column_name, data_type, data_length,
data_precision, data_scale )
select table_name, column_name, data_type, data_length, data_precision,
data_scale
from all_tab_columns@&&uinstance_2
where owner = '&&uuser_2'
minus
select table_name, column_name, data_type, data_length, data_precision,
data_scale
from all_tab_columns@&&uinstance_1
where owner = '&&uuser_1'
/
update table_diff set instance = '&&uinstance_2' where instance is null;
commit;
-- do index diff
prompt
prompt Creating index difference data
prompt
drop table index_diff;
create table index_diff as
select index_name, table_name, column_name, column_position, column_length
from all_ind_columns@&&uinstance_1
where 1=2
/
alter table index_diff add( instance varchar2(8) );
create index index_diff_idx on index_diff (
table_name,
column_name, column_position, column_length
)
/
insert into index_diff ( index_name, table_name, column_name,
column_position, column_length )
select index_name, table_name, column_name, column_position, column_length
from all_ind_columns@&&uinstance_1
where index_owner = '&&uuser_1'
minus
select index_name, table_name, column_name, column_position, column_length
from all_ind_columns@&&uinstance_2
where index_owner = '&&uuser_2'
/
update index_diff set instance = '&&uinstance_1';
insert into index_diff ( index_name, table_name, column_name,
column_position, column_length )
select index_name, table_name, column_name, column_position, column_length
from all_ind_columns@&&uinstance_2
where index_owner = '&&uuser_2'
minus
select index_name, table_name, column_name, column_position, column_length
from all_ind_columns@&&uinstance_1
where index_owner = '&&uuser_1'
/
update index_diff set instance = '&&uinstance_2' where instance is null;
commit;
-- do argument diff
prompt
prompt Creating arguments difference data
prompt
drop table arg_diff;
create table arg_diff as
SELECT
obj# obj#
,procedure$ procedure
,argument argument
,type type
,overload# overload
,position position
,sequence# sequence
,default# "DEFAULT"
,in_out in_out
,level# "LEVEL"
,length length
,precision "PRECISION"
,scale scale
,radix radix
FROM sys.ARGUMENT$@&uinstance_1
where 1 = 2
/
alter table arg_diff add( instance varchar2(8), object_name varchar2(30),
object_type varchar2(13) );
alter table arg_diff modify( obj# null );
create index arg_diff_idx on arg_diff ( obj#, argument, type );
insert into arg_diff
(
object_name, object_type, procedure, argument, type, overload,
position,
sequence,
"DEFAULT", in_out, "LEVEL", length, "PRECISION", scale, radix
)
select
obj.object_name ,obj.object_type ,arg.procedure$ ,arg.argument
,arg.type ,arg.overload# ,arg.position ,arg.sequence# ,arg.default#
,arg.in_out
,arg.level# ,arg.length ,arg.precision ,arg.scale ,arg.radix
from sys.argument$@&&uinstance_1 arg, dba_objects@&&uinstance_1 obj
where arg.obj# = obj.object_id
and obj.owner = '&&uuser_1'
minus
select
obj.object_name ,obj.object_type ,arg.procedure$ ,arg.argument
,arg.type ,arg.overload# ,arg.position ,arg.sequence# ,arg.default#
,arg.in_out
,arg.level# ,arg.length ,arg.precision ,arg.scale ,arg.radix
from sys.argument$@&&uinstance_2 arg, dba_objects@&&uinstance_2 obj
where arg.obj# = obj.object_id
and obj.owner = '&&uuser_2'
/
update arg_diff
set instance = '&&uinstance_1'
/
-- create tmp tables to do these updates
-- it will be MUCH faster
drop table remote_dba_objects;
drop table remote_arguments;
create table remote_dba_objects
as
select *
from dba_objects@&&uinstance_1
/
create index remote_dba_object_idx1
on remote_dba_objects( object_type, object_id )
/
create index remote_dba_object_idx2
on remote_dba_objects( object_id )
/
create table remote_arguments
as
select
obj#, procedure$,overload#,position,sequence#,level#,
argument,type,default#,in_out,length,precision,scale,
radix,deflength
from sys.argument$@&&uinstance_1
/
create index remote_arguments_idx1
on remote_arguments( argument, type )
/
update arg_diff diff
set obj# = (
select obj#
from remote_arguments arg, remote_dba_objects obj
where arg.obj# = obj.object_id
and obj.object_name = diff.object_name
and obj.object_type = diff.object_type
and obj.owner = '&&uuser_1'
and nvl(arg.procedure$, 'NONE') = nvl(diff.procedure, 'NONE')
and arg.argument = diff.argument
and arg.type = diff.type
and arg.overload# = diff.overload
and diff.instance = '&&uinstance_1'
)
where instance = '&&uinstance_1'
/
insert into arg_diff
(
object_name, object_type, procedure, argument, type, overload,
position,
sequence,
"DEFAULT", in_out, "LEVEL", length, "PRECISION", scale, radix
)
select
obj.object_name ,obj.object_type ,arg.procedure$ ,arg.argument
,arg.type ,arg.overload# ,arg.position ,arg.sequence# ,arg.default#
,arg.in_out
,arg.level# ,arg.length ,arg.precision ,arg.scale ,arg.radix
from sys.argument$@&&uinstance_2 arg, dba_objects@&&uinstance_2 obj
where arg.obj# = obj.object_id
and obj.owner = '&&uuser_2'
minus
select
obj.object_name ,obj.object_type ,arg.procedure$ ,arg.argument
,arg.type ,arg.overload# ,arg.position ,arg.sequence# ,arg.default#
,arg.in_out
,arg.level# ,arg.length ,arg.precision ,arg.scale ,arg.radix
from sys.argument$@&&uinstance_1 arg, dba_objects@&&uinstance_1 obj
where arg.obj# = obj.object_id
and obj.owner = '&&uuser_1'
/
update arg_diff
set instance = '&&uinstance_2'
where instance is null
/
-- create tmp tables to do these updates
-- it will be MUCH faster
drop table remote_dba_objects;
drop table remote_arguments;
create table remote_dba_objects
as
select *
from dba_objects@&&uinstance_2
/
create index remote_dba_object_idx1
on remote_dba_objects( object_type, object_id )
/
create index remote_dba_object_idx2
on remote_dba_objects( object_id )
/
create table remote_arguments
as
select
obj#, procedure$,overload#,position,sequence#,level#,
argument,type,default#,in_out,length,precision,scale,
radix,deflength
from sys.argument$@&&uinstance_2
/
create index remote_arguments_idx1
on remote_arguments( argument, type )
/
update arg_diff diff
set obj# = (
select obj#
from remote_arguments arg, remote_dba_objects obj
where arg.obj# = obj.object_id
and obj.object_name = diff.object_name
and obj.object_type = diff.object_type
and obj.owner = '&&uuser_2'
and nvl(arg.procedure$, 'NONE') = nvl(diff.procedure, 'NONE')
and arg.argument = diff.argument
and arg.type = diff.type
and arg.overload# = diff.overload
and diff.instance = '&&uinstance_2'
)
where instance = '&&uinstance_2'
/
drop table remote_dba_objects;
drop table remote_arguments;
----------------------------------------
--- reports
----------------------------------------
break on table_name on column_name on username
col data_precision format 999999 head 'PREC'
col data_scale format 999999 head 'SCALE'
col data_length format 999999 head 'LENGTH'
col column_name format a30 head 'COLUMN NAME'
set trimspool on
-- table diff report
spool table_diff.txt
@title 'Table Diffs User1: &&uuser_1@&&uinstance_1 User2:
&&uuser_2@&&uinstance_2' 120
select
t1.table_name,
t1.column_name,
'&&uuser_1' username,
instance,
t1.data_type,
t1.data_precision,
t1.data_scale,
t1.data_length
from all_tab_columns@&&uinstance_1 t1, table_diff d1
where owner = '&&uuser_1'
and t1.table_name = d1.table_name
and t1.column_name = d1.column_name
and d1.instance = '&&uinstance_1'
union all
select
t2.table_name,
t2.column_name,
'&&uuser_2' username,
instance,
t2.data_type,
t2.data_length,
t2.data_scale,
t2.data_precision
from all_tab_columns@&&uinstance_2 t2, table_diff d2
where owner = '&&uuser_2'
and t2.table_name = d2.table_name
and t2.column_name = d2.column_name
and d2.instance = '&&uinstance_2'
order by 1,2,3,4
/
-- index diff report
break on index_name on table_name
col data_precision format 999999 head 'PREC'
col data_scale format 999999 head 'SCALE'
col data_length format 999999 head 'LENGTH'
col column_name format a30 head 'COLUMN NAME'
col column_position format 999 head 'COL|POS'
col column_length format 99999 head 'COL|LEN'
@title 'Index Diffs User1: &&uuser_1@&&uinstance_1 User2:
&&uuser_2@&&uinstance_2' 135
col username format a10 head 'INDEX|OWNER'
spool index_diff.txt
select
t1.index_name,
'&&uuser_1' username,
instance,
t1.table_name,
t1.column_name,
t1.column_position,
t1.column_length
from all_ind_columns@&&uinstance_1 t1, index_diff d1
where index_owner = '&&uuser_1'
and t1.table_name = d1.table_name
and t1.column_name = d1.column_name
and t1.column_position = d1.column_position
and t1.column_length = d1.column_length
and d1.instance = '&&uinstance_1'
union all
select
t2.index_name,
'&&uuser_2' username,
instance,
t2.table_name,
t2.column_name,
t2.column_position,
t2.column_length
from all_ind_columns@&&uinstance_2 t2, index_diff d2
where index_owner = '&&uuser_2'
and t2.table_name = d2.table_name
and t2.column_name = d2.column_name
and t2.column_position = d2.column_position
and t2.column_length = d2.column_length
and d2.instance = '&&uinstance_2'
order by 1,2,3,4,5,6
/
-- argument diff report
col procedure format a40 head 'PROCEDURE'
break on procedure on overload
@title 'Argument Diffs User1: &&uuser_1@&&uinstance_1 User2:
&&uuser_2@&&uinstance_2' 200
spool arg_diff.txt
SELECT
substr(
obj.OBJECT_NAME||
decode( arg.procedure$,null,'','.') ||
arg.procedure$,1,60
) procedure
,arg.OVERLOAD# overload
,arg.ARGUMENT
,diff.instance
,obj.object_type
,decode(arg.type,
1, 'VARCHAR2',
2, 'NUMBER',
8, 'LONG',
9, 'VARCHAR',
12, 'DATE',
23, 'RAW',
24, 'LONG RAW',
69, 'ROWID',
96, 'CHAR',
250, 'RECORD',
252, 'BOOLEAN',
-- just show type# as default
substr(to_char(arg.type),1,10)
) type
,arg.POSITION
,NVL(arg.DEFAULT#,0) DEFAULT#
,decode(arg.IN_OUT,null,'IN', 2,'IN_OUT', 'UNKNOWN' ) IN_OUT
,NVL(arg.LEVEL#,0) LEVEL#
,NVL(arg.LENGTH,0) LENGTH
,NVL(arg.PRECISION,0) PRECISION
,NVL(arg.SCALE,0) SCALE
,NVL(arg.RADIX,0) RADIX
from
sys.argument$@&&uinstance_1 arg
,dba_objects@&&uinstance_1 obj
,arg_diff diff
where arg.obj# = obj.object_id
and obj.owner = '&&uuser_1'
and diff.obj# = arg.obj#
and nvl(diff.procedure,'NONE') = nvl(arg.procedure$,'NONE')
and diff.argument = arg.argument
and diff.type = arg.type
and diff.overload = arg.overload#
and diff.instance = '&&uinstance_1'
union all
SELECT
substr(
obj.OBJECT_NAME||
decode( arg.procedure$,null,'','.') ||
arg.procedure$,1,60
) procedure
,arg.OVERLOAD# overload
,arg.ARGUMENT
,diff.instance
,obj.object_type
,decode(arg.type,
1, 'VARCHAR2',
2, 'NUMBER',
8, 'LONG',
9, 'VARCHAR',
12, 'DATE',
23, 'RAW',
24, 'LONG RAW',
69, 'ROWID',
96, 'CHAR',
250, 'RECORD',
252, 'BOOLEAN',
-- just show type# as default
substr(to_char(arg.type),1,10)
) type
,arg.POSITION
,NVL(arg.DEFAULT#,0) DEFAULT#
,decode(arg.IN_OUT,null,'IN', 2,'IN_OUT', 'UNKNOWN' ) IN_OUT
,NVL(arg.LEVEL#,0) LEVEL#
,NVL(arg.LENGTH,0) LENGTH
,NVL(arg.PRECISION,0) PRECISION
,NVL(arg.SCALE,0) SCALE
,NVL(arg.RADIX,0) RADIX
from
sys.argument$@&&uinstance_2 arg
,dba_objects@&&uinstance_2 obj
,arg_diff diff
where arg.obj# = obj.object_id
and obj.owner = '&&uuser_2'
and diff.obj# = arg.obj#
and nvl(diff.procedure,'NONE') = nvl(arg.procedure$,'NONE')
and diff.argument = arg.argument
and diff.type = arg.type
and diff.overload = arg.overload#
and diff.instance = '&&uinstance_2'
order by 1,2,3,4,5
/
-- sequence diff report
@title 'Sequence Diffs User1: &&uuser_1@&&uinstance_1 User2:
&&uuser_2@&&uinstance_2' 110
col sequence_name format a30 head 'SEQUENCE NAME'
col last_number format 999999999999 head 'LAST|NUMBER'
col min_value format 9999999999 head 'MIN|VALUE'
col max_value format 999999999999 head 'MAX|VALUE'
col increment_by format 999999 head 'INCREMENT'
col cache_size format 999999 head 'CACHE|SIZE'
col cycle_flag format a5 head 'CYCLE|FLAG'
col order_flag format a5 head 'ORDER|FLAG'
break on sequence_name skip 1
spool sequence_diff.txt
(
(
select
sequence_name, '&&uinstance_1' instance ,last_number,
min_value,max_value,
increment_by,cycle_flag,order_flag,
cache_size
from dba_sequences@&&uinstance_1
where sequence_owner = '&&uuser_1'
)
minus
(
select
sequence_name, '&&uinstance_2' instance ,last_number,
min_value,max_value,
increment_by,cycle_flag,order_flag,
cache_size
from dba_sequences@&&uinstance_2
where sequence_owner = '&&uuser_2'
)
)
union
(
(
select
sequence_name, '&&uinstance_2' instance ,last_number,
min_value,max_value,
increment_by,cycle_flag,order_flag,
cache_size
from dba_sequences@&&uinstance_2
where sequence_owner = '&&uuser_2'
)
minus
(
select
sequence_name, '&&uinstance_1' instance ,last_number,
min_value,max_value,
increment_by,cycle_flag,order_flag,
cache_size
from dba_sequences@&&uinstance_1
where sequence_owner = '&&uuser_1'
)
)
/
spool off
undef 1 2 3 4
prompt
prompt
prompt
prompt Your reports in the following files:
prompt
prompt table_diff.txt
prompt index_diff.txt
prompt arg_diff.txt
prompt sequence_diff.txt
prompt
--------------Boundary-00=_TI6B0KP3KE5T3HEN611V
Content-Type: text/plain;
charset="iso-8859-1";
name="title.sql"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="title.sql"
Ci0tIHRpdGxlLnNxbCAtIGNvcGllZCBmcm9tIHRpdGxlODAuc3FsCi0tIHNwZWNpZnkgbGluZSB3
aWR0aCB3aGVuIGNhbGxpbmcKLS0gZWcgQHRpdGxlICdyZXBvcnQgaGVhZGluZycgOTAKCnJlbSBU
SVRMRS5TUUwgICAtICAgICBUaGlzIFNRTCpQbHVzIHNjcmlwdCBidWlsZHMgYSBzdGFuZGFyZCBy
ZXBvcnQgCnJlbSAgICAgICAgICAgICAgICAgICBoZWFkaW5nIGZvciBkYXRhYmFzZSByZXBvcnRz
IHRoYXQgYXJlIFhYIGNvbHVtbnMKcmVtCmNvbHVtbiAgVE9EQVkJCU5FV19WQUxVRSAJQ1VSUkVO
VF9EQVRFCQlOT1BSSU5UCmNvbHVtbiAgVElNRSAgICAgICAgICAgIE5FV19WQUxVRQlDVVJSRU5U
X1RJTUUJCU5PUFJJTlQKY29sdW1uICBEQVRBQkFTRSAgICAgICAgTkVXX1ZBTFVFICAgICAgIERB
VEFfQkFTRSAgICAgICAgICAgICAgIE5PUFJJTlQKc2V0IHRlcm0gb2ZmIGZlZWQgb2ZmCnJlbQpk
ZWZpbmUgQ09NUEFOWSA9ICJCQ0JTTyIKZGVmaW5lIEhFQURJTkcgPSAiJjEiCmNvbCBjUGFnZU51
bUxvYyBuZXdfdmFsdWUgUGFnZU51bUxvYyBub3ByaW50CnNlbGVjdCAoJyYmMicgLSAxMCApIGNQ
YWdlTnVtTG9jIGZyb20gZHVhbDsKcmVtClRUSVRMRSBMRUZUICJEYXRlOiAiIGN1cnJlbnRfZGF0
ZSBDRU5URVIgY29tcGFueSBjb2wgJiZQYWdlTnVtTG9jICJQYWdlOiIgZm9ybWF0IDk5OSAtCiAg
ICAgICBTUUwuUE5PIFNLSVAgMSBMRUZUICJUaW1lOiAiIGN1cnJlbnRfdGltZSBDRU5URVIgaGVh
ZGluZyBSSUdIVCAtCiAgICAgICBmb3JtYXQgYTE1IFNRTC5VU0VSIFNLSVAgMSBDRU5URVIgZm9y
bWF0IGEyMCBkYXRhX2Jhc2UgU0tJUCAyCnJlbQpyZW0Kc2V0IGhlYWRpbmcgb2ZmCnNldCBwYWdl
c2l6ZSAwCnJlbQpjb2x1bW4gcGFzc291dCBuZXdfdmFsdWUgZGJuYW1lIG5vcHJpbnQKU0VMRUNU
IFRPX0NIQVIoU1lTREFURSwnTU0vREQvWVknKSBUT0RBWSwKICAgICAgIFRPX0NIQVIoU1lTREFU
RSwnSEg6TUkgQU0nKSBUSU1FLAogICAgICAgLS1EQVRBQkFTRXx8JyBEYXRhYmFzZScgREFUQUJB
U0UsCiAgICAgICAtLXJ0cmltKGRhdGFiYXNlKSBwYXNzb3V0CiAgICAgICBuYW1lfHwnIERhdGFi
YXNlJyBEQVRBQkFTRSwKICAgICAgIGxvd2VyKHJ0cmltKG5hbWUpKSBwYXNzb3V0CkZST00gICB2
JGRhdGFiYXNlOwpzZXQgdGVybSBvbiBmZWVkIG9uCnJlbQpzZXQgaGVhZGluZyBvbgpzZXQgcGFn
ZXNpemUgNTgKc2V0IGxpbmUgJiYyCnNldCBuZXdwYWdlIDAKZGVmaW5lIGRiID0gJ18mZGJuYW1l
Jwp1bmRlZiAxIDIK
--------------Boundary-00=_TI6B0KP3KE5T3HEN611V
Content-Type: text/plain;
charset="iso-8859-1";
name="schema_diff.sql"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="schema_diff.sql"
Ci0tIHNjaGVtYV9kaWZmLnNxbAotLSBKYXJlZCBTdGlsbCAKLS0gamtzdGlsbEBiY2Jzby5jb20K
LS0gamtzdGlsbEB0ZWxlcG9ydC5jb20KLS0KLS0KLS0gMDcvMTQvMTk5OSBqa3N0aWxsIC0gcmVt
b3ZlZCB0YWJsZV9vd25lciBmcm9tIHRoZSBpbmRleF9kaWZmCi0tICAgICAgICAgICAgICAgICAg
ICAgIHNlY3Rpb24gYXMgdGhpcyBtYWRlIGFsbCBpbmRleGVzIGFwcGVhcgotLSAgICAgICAgICAg
ICAgICAgICAgICBpbiB0aGUgZGlmZmVyZW5jZSByZXBvcnQgaWYgdGhlIHNjaGVtYXMKLS0gICAg
ICAgICAgICAgICAgICAgICAgaGFkIGRpZmZlcmVudCBuYW1lcwotLSAgICAgICAgICAgICAgICAg
ICAgICAtCi0tIHRoaXMgc2NyaXB0IHdpbGwgY3JlYXRlIHJlcG9ydHMgb2YgdGhlCi0tIGRpZmZl
cmVuY2VzIGJldHdlZW4gMiBzY2hlbWFzCi0tIHRoZSByZXBvcnRzIGNyZWF0ZWQgYXJlOgoKLS0g
dGFibGVfZGlmZi50eHQKLS0gaW5kZXhfZGlmZi50eHQKLS0gYXJnX2RpZmYudHh0Ci0tIHNlcXVl
bmNlX2RpZmYudHh0CgotLSBhbGwgZGlmZmVyZW5jZXMgYXJlIGNoZWNrZWQgYm90aAotLSB3YXlz
IC0gc2NoZW1hMSBpcyBjb21wYXJlZCB0byBzY2hlbWEyCi0tIGFuZCB0aGVuIHNjaGVtYTIgaXMg
Y29tcGFyZWQgdG8gc2NoZW1hMQotLSBpdCBkb2VzIG5vdCBtYXR0ZXIgd2hpY2ggZGF0YWJhc2Ug
dGhlCi0tIHJlcG9ydHMgYXJlIGluaXRpYXRlZCBmcm9tCgotLSByZXF1aXJlbWVudHM6Ci0tCi0t
IGVpdGhlciBnbG9iYWwgbGlua3Mgb3IgZGF0YWJhc2UgbGlua3MgdG8KLS0gdGhlIHNjaGVtYXMg
dG8gYmUgY29tcGFyZWQKLS0gCi0tIGRiYSBwcml2aWxlZ2VzCi0tCgotLSB0aGlzIHJlcG9ydCBj
cmVhdGVzIHRlbXBvcmFyeSB0YWJsZXMgZm9yIGl0J3MgcmVwb3J0cwotLSB0aGV5IGFyZSBsZWZ0
IGludGFjdCBmb3IgeW91ciBwZXJ1c2FsCi0tIHRhYmxlczoKLS0gICBhcmdfZGlmZgotLSAgIGlu
ZGV4X2RpZmYKLS0gICB0YWJsZV9kaWZmCi0tCgotLSBSRVBPUlQgU1VNTUFSWQoKLS0gdGFibGVf
ZGlmZi50eHQKLS0gdGhpcyByZXBvcnQgY29tcGFyZXMgdGFibGVzIGZyb20gMiBzY2hlbWFzCi0t
IGluY2x1ZGVkIGFyZSAKLS0gICAgdGFibGVzL2NvbHVtbnMgdGhhdCBhcHBlYXIgaW4gYSB0YWJs
ZSBpbgotLSAgICBvbmUgc2NoZW1hLCBhbmQgbm90IHRoZSBvdGhlcgotLQotLSAgICBhbnkgZGlm
ZmVyZW5jZXMgYmV0d2VlbiBjb2x1bW5zOyBpbmNsdWRlcwotLSAgICBvcmRlciBvZiBjb2x1bW4s
IHR5cGUgYW5kIHNpemUuCgoKLS0gaW5kZXhfZGlmZi50eHQKLS0gdGhpcyByZXBvcnQgY29tcGFy
ZXMgaW5kZXhlcyBmcm9tIDIgc2NoZW1hcwotLSBpbmNsdWRlZCBhcmUKLS0gICAgaW5kZXhlcyB0
aGF0IGFwcGVhciBpbiBvbmUgc2NoZW1hIAotLSAgICBhbmQgbm90IHRoZSBvdGhlcgotLQotLSAg
ICBhbnkgZGlmZmVyZW5jZXMgYmV0d2VlbiBpbmRleCBzdHJ1Y3R1cmVzCi0tICAgIGRvZXMgbm90
IGNoZWNrIGZvciBzdG9yYWdlIHBhcm1zCgotLSBhcmdfZGlmZi50eHQKLS0gdGhpcyByZXBvcnQg
Y29tcGFyZXMgYXJndW1lbnRzIGZyb20gMiBzY2hlbWFzCi0tIGluY2x1ZGVkIGFyZQotLSAgICBh
bGwgcHJvY2VkdXJlcy9wYWNrYWdlcy9mdW5jdGlvbnMgIGFuZCB0aGVpcgotLSAgICBhcmd1bWVu
dHMgKCBpZiBhbnkgKSB0aGF0IGFwcGVhciBpbiBvbmUgc2NoZW1hCi0tICAgIGFuZCBub3QgdGhl
IG90aGVyCi0tCi0tICAgIGFueSBkaWZmZXJlbmNlcyBpbiBhcmd1bWVudHMKLS0KLS0gbm90ZTog
IHRoaXMgY3VycmVudGx5IHdpbGwgbm90IGZpbmQgcGFja2FnZXMKLS0gICAgICAgIGNyZWF0ZWQg
Zm9yIGdsb2JhbCB2YXJpYWJsZXMKLS0gICAgICAgIGkuZS46IHRob3NlIHBhY2thZ2VzIGNyZWF0
ZWQgd2l0aG91dAotLSAgICAgICAgYSBib2R5IGFuZCB3aG9zZSBoZWFkZXIgY29udGFpbnMKLS0g
ICAgICAgIG9ubHkgdmFyaWFibGVzCgoKLS0gc2VxdWVuY2VfZGlmZi50eHQKLS0gdGhpcyByZXBv
cnQgY29tcGFyZXMgc2VxdWVuY2VzIGZyb20gMiBzY2hlbWFzCi0tCi0tIHRoaXMgcmVwb3J0IG1h
eSBpbmNsdWRlIGZhbHNlIHBvc2l0aXZlcyBzaW5jZQotLSBzZXF1ZW5jZSBpbmZvcm1hdGlvbiBp
biB0aGUgZGF0YWJhc2UgaXMgZHluYW1pYwoKCgotLSAwNi8xNS8xOTk5IC0gYWRkZWQgc29tZSBt
b3JlIGZlYXR1cmVzCgoKQGNsZWFycwpAY29sdW1ucwoKY29sIGN1c2VyXzEgbm9wcmludCBuZXdf
dmFsdWUgIHV1c2VyXzEKY29sIGN1c2VyXzIgbm9wcmludCBuZXdfdmFsdWUgIHV1c2VyXzIKY29s
IGNpbnN0YW5jZV8xIG5vcHJpbnQgbmV3X3ZhbHVlICB1aW5zdGFuY2VfMQpjb2wgY2luc3RhbmNl
XzIgbm9wcmludCBuZXdfdmFsdWUgIHVpbnN0YW5jZV8yCgpwcm9tcHQKcHJvbXB0CnByb21wdCBz
Y2hlbWFfZGlmZiB3aWxsIHJlcG9ydCBkaWZmZXJlbmNlcyBpbiB0YWJsZXMKcHJvbXB0IGJldHdl
ZW4gYW55IDIgdXNlcnMgb24gYW55IDIgZGF0YWJhc2VzCnByb21wdAoKc2V0IHRlcm0gb24gZmVl
ZCBvbgpwcm9tcHQgVXNlciAxOgpzZXQgdGVybSBvZmYgZmVlZCBvZmYKc2VsZWN0IHVwcGVyKCcm
MScpIGN1c2VyXzEgZnJvbSBkdWFsOwoKc2V0IHRlcm0gb24gZmVlZCBvbgpwcm9tcHQgaW5zdGFu
Y2UgMToKc2V0IHRlcm0gb2ZmIGZlZWQgb2ZmCnNlbGVjdCB1cHBlcignJjInKSBjaW5zdGFuY2Vf
MSBmcm9tIGR1YWw7CgpzZXQgdGVybSBvbiBmZWVkIG9uCnByb21wdCBVc2VyIDI6CnNldCB0ZXJt
IG9mZiBmZWVkIG9mZgpzZWxlY3QgdXBwZXIoJyYzJykgY3VzZXJfMiBmcm9tIGR1YWw7CgpzZXQg
dGVybSBvbiBmZWVkIG9uCnByb21wdCBpbnN0YW5jZSAyOgpzZXQgdGVybSBvZmYgZmVlZCBvZmYK
c2VsZWN0IHVwcGVyKCcmNCcpIGNpbnN0YW5jZV8yIGZyb20gZHVhbDsKCnNldCB0ZXJtIG9uIGZl
ZWQgb24KCi0tIGRvIHRhYmxlIGRpZmYKcHJvbXB0CnByb21wdCBDcmVhdGluZyB0YWJsZSBkaWZm
ZXJlbmNlIGRhdGEKcHJvbXB0Cgpkcm9wIHRhYmxlIHRhYmxlX2RpZmY7CgpjcmVhdGUgdGFibGUg
dGFibGVfZGlmZiBhcyAKc2VsZWN0IHRhYmxlX25hbWUsIGNvbHVtbl9uYW1lLCBkYXRhX3R5cGUs
IGRhdGFfbGVuZ3RoLCBkYXRhX3ByZWNpc2lvbiwgZGF0YV9zY2FsZQpmcm9tIGFsbF90YWJfY29s
dW1uc0AmJnVpbnN0YW5jZV8xCndoZXJlICAxPTIKLwoKYWx0ZXIgdGFibGUgdGFibGVfZGlmZiBh
ZGQoIGluc3RhbmNlIHZhcmNoYXIyKDgpICk7CgoKY3JlYXRlIGluZGV4IHRhYmxlX2RpZmZfaWR4
IG9uIHRhYmxlX2RpZmYgKCB0YWJsZV9uYW1lLCBjb2x1bW5fbmFtZSwgaW5zdGFuY2UgKTsKCmlu
c2VydCBpbnRvIHRhYmxlX2RpZmYgKCB0YWJsZV9uYW1lLCBjb2x1bW5fbmFtZSwgZGF0YV90eXBl
LCBkYXRhX2xlbmd0aCwgZGF0YV9wcmVjaXNpb24sIGRhdGFfc2NhbGUgKQoJc2VsZWN0IHRhYmxl
X25hbWUsIGNvbHVtbl9uYW1lLCBkYXRhX3R5cGUsIGRhdGFfbGVuZ3RoLCBkYXRhX3ByZWNpc2lv
biwgZGF0YV9zY2FsZQoJZnJvbSBhbGxfdGFiX2NvbHVtbnNAJiZ1aW5zdGFuY2VfMQoJd2hlcmUg
b3duZXIgPSAnJiZ1dXNlcl8xJwoJbWludXMKCXNlbGVjdCB0YWJsZV9uYW1lLCBjb2x1bW5fbmFt
ZSwgZGF0YV90eXBlLCBkYXRhX2xlbmd0aCwgZGF0YV9wcmVjaXNpb24sIGRhdGFfc2NhbGUKCWZy
b20gYWxsX3RhYl9jb2x1bW5zQCYmdWluc3RhbmNlXzIKCXdoZXJlIG93bmVyID0gJyYmdXVzZXJf
MicKLwoKdXBkYXRlIHRhYmxlX2RpZmYgc2V0IGluc3RhbmNlID0gJyYmdWluc3RhbmNlXzEnOwoK
aW5zZXJ0IGludG8gdGFibGVfZGlmZiAgKCB0YWJsZV9uYW1lLCBjb2x1bW5fbmFtZSwgZGF0YV90
eXBlLCBkYXRhX2xlbmd0aCwgZGF0YV9wcmVjaXNpb24sIGRhdGFfc2NhbGUgKQoJc2VsZWN0IHRh
YmxlX25hbWUsIGNvbHVtbl9uYW1lLCBkYXRhX3R5cGUsIGRhdGFfbGVuZ3RoLCBkYXRhX3ByZWNp
c2lvbiwgZGF0YV9zY2FsZQoJZnJvbSBhbGxfdGFiX2NvbHVtbnNAJiZ1aW5zdGFuY2VfMgoJd2hl
cmUgb3duZXIgPSAnJiZ1dXNlcl8yJwoJbWludXMKCXNlbGVjdCB0YWJsZV9uYW1lLCBjb2x1bW5f
bmFtZSwgZGF0YV90eXBlLCBkYXRhX2xlbmd0aCwgZGF0YV9wcmVjaXNpb24sIGRhdGFfc2NhbGUK
CWZyb20gYWxsX3RhYl9jb2x1bW5zQCYmdWluc3RhbmNlXzEKCXdoZXJlIG93bmVyID0gJyYmdXVz
ZXJfMScKLwoKdXBkYXRlIHRhYmxlX2RpZmYgc2V0IGluc3RhbmNlID0gJyYmdWluc3RhbmNlXzIn
IHdoZXJlIGluc3RhbmNlIGlzIG51bGw7Cgpjb21taXQ7CgotLSBkbyBpbmRleCBkaWZmCnByb21w
dApwcm9tcHQgQ3JlYXRpbmcgaW5kZXggZGlmZmVyZW5jZSBkYXRhCnByb21wdAoKCmRyb3AgdGFi
bGUgaW5kZXhfZGlmZjsKCmNyZWF0ZSB0YWJsZSBpbmRleF9kaWZmIGFzIApzZWxlY3QgaW5kZXhf
bmFtZSwgdGFibGVfbmFtZSwgY29sdW1uX25hbWUsIGNvbHVtbl9wb3NpdGlvbiwgY29sdW1uX2xl
bmd0aApmcm9tIGFsbF9pbmRfY29sdW1uc0AmJnVpbnN0YW5jZV8xCndoZXJlICAxPTIKLwoKYWx0
ZXIgdGFibGUgaW5kZXhfZGlmZiBhZGQoIGluc3RhbmNlIHZhcmNoYXIyKDgpICk7CgpjcmVhdGUg
aW5kZXggaW5kZXhfZGlmZl9pZHggb24gaW5kZXhfZGlmZiAoIAoJdGFibGVfbmFtZSwgCgljb2x1
bW5fbmFtZSwgY29sdW1uX3Bvc2l0aW9uLCBjb2x1bW5fbGVuZ3RoCikKLwoKaW5zZXJ0IGludG8g
aW5kZXhfZGlmZiAoIGluZGV4X25hbWUsICB0YWJsZV9uYW1lLCBjb2x1bW5fbmFtZSwgY29sdW1u
X3Bvc2l0aW9uLCBjb2x1bW5fbGVuZ3RoICkKCXNlbGVjdCBpbmRleF9uYW1lLCAgdGFibGVfbmFt
ZSwgY29sdW1uX25hbWUsIGNvbHVtbl9wb3NpdGlvbiwgY29sdW1uX2xlbmd0aAoJZnJvbSBhbGxf
aW5kX2NvbHVtbnNAJiZ1aW5zdGFuY2VfMQoJd2hlcmUgaW5kZXhfb3duZXIgPSAnJiZ1dXNlcl8x
JwoJbWludXMKCXNlbGVjdCBpbmRleF9uYW1lLCB0YWJsZV9uYW1lLCBjb2x1bW5fbmFtZSwgY29s
dW1uX3Bvc2l0aW9uLCBjb2x1bW5fbGVuZ3RoCglmcm9tIGFsbF9pbmRfY29sdW1uc0AmJnVpbnN0
YW5jZV8yCgl3aGVyZSBpbmRleF9vd25lciA9ICcmJnV1c2VyXzInCi8KCnVwZGF0ZSBpbmRleF9k
aWZmIHNldCBpbnN0YW5jZSA9ICcmJnVpbnN0YW5jZV8xJzsKCmluc2VydCBpbnRvIGluZGV4X2Rp
ZmYgKCBpbmRleF9uYW1lLCB0YWJsZV9uYW1lLCBjb2x1bW5fbmFtZSwgY29sdW1uX3Bvc2l0aW9u
LCBjb2x1bW5fbGVuZ3RoICkKCXNlbGVjdCBpbmRleF9uYW1lLCB0YWJsZV9uYW1lLCBjb2x1bW5f
bmFtZSwgY29sdW1uX3Bvc2l0aW9uLCBjb2x1bW5fbGVuZ3RoCglmcm9tIGFsbF9pbmRfY29sdW1u
c0AmJnVpbnN0YW5jZV8yCgl3aGVyZSBpbmRleF9vd25lciA9ICcmJnV1c2VyXzInCgltaW51cwoJ
c2VsZWN0IGluZGV4X25hbWUsIHRhYmxlX25hbWUsIGNvbHVtbl9uYW1lLCBjb2x1bW5fcG9zaXRp
b24sIGNvbHVtbl9sZW5ndGgKCWZyb20gYWxsX2luZF9jb2x1bW5zQCYmdWluc3RhbmNlXzEKCXdo
ZXJlIGluZGV4X293bmVyID0gJyYmdXVzZXJfMScKLwoKdXBkYXRlIGluZGV4X2RpZmYgc2V0IGlu
c3RhbmNlID0gJyYmdWluc3RhbmNlXzInIHdoZXJlIGluc3RhbmNlIGlzIG51bGw7CgoKY29tbWl0
OwoKCi0tIGRvIGFyZ3VtZW50IGRpZmYKcHJvbXB0CnByb21wdCBDcmVhdGluZyBhcmd1bWVudHMg
ZGlmZmVyZW5jZSBkYXRhCnByb21wdAoKZHJvcCB0YWJsZSBhcmdfZGlmZjsKCmNyZWF0ZSB0YWJs
ZSBhcmdfZGlmZiBhcyAKU0VMRUNUCglvYmojIG9iaiMKCSxwcm9jZWR1cmUkIHByb2NlZHVyZQoJ
LGFyZ3VtZW50IGFyZ3VtZW50CgksdHlwZSB0eXBlCiAgICxvdmVybG9hZCMgb3ZlcmxvYWQKICAg
LHBvc2l0aW9uIHBvc2l0aW9uCgksc2VxdWVuY2UjIHNlcXVlbmNlCiAgICxkZWZhdWx0IyAiREVG
QVVMVCIKICAgLGluX291dCBpbl9vdXQKICAgLGxldmVsIyAiTEVWRUwiCgksbGVuZ3RoIGxlbmd0
aAogICAscHJlY2lzaW9uICJQUkVDSVNJT04iCiAgICxzY2FsZSBzY2FsZQogICAscmFkaXggcmFk
aXgKRlJPTSBzeXMuQVJHVU1FTlQkQCZ1aW5zdGFuY2VfMQp3aGVyZSAxID0gMgovCgphbHRlciB0
YWJsZSBhcmdfZGlmZiBhZGQoIGluc3RhbmNlIHZhcmNoYXIyKDgpLCBvYmplY3RfbmFtZSB2YXJj
aGFyMigzMCksIG9iamVjdF90eXBlIHZhcmNoYXIyKDEzKSApOwphbHRlciB0YWJsZSBhcmdfZGlm
ZiBtb2RpZnkoIG9iaiMgbnVsbCApOwoKY3JlYXRlIGluZGV4IGFyZ19kaWZmX2lkeCBvbiBhcmdf
ZGlmZiAoIG9iaiMsIGFyZ3VtZW50LCB0eXBlICk7CgppbnNlcnQgaW50byBhcmdfZGlmZiAKCSgK
CQkgb2JqZWN0X25hbWUsIG9iamVjdF90eXBlLCBwcm9jZWR1cmUsIGFyZ3VtZW50LCB0eXBlLCBv
dmVybG9hZCwgcG9zaXRpb24sIHNlcXVlbmNlLAoJCSJERUZBVUxUIiwgaW5fb3V0LCAiTEVWRUwi
LCBsZW5ndGgsICJQUkVDSVNJT04iLCBzY2FsZSwgcmFkaXgKCSkKCXNlbGVjdCAKCQlvYmoub2Jq
ZWN0X25hbWUgLG9iai5vYmplY3RfdHlwZSAsYXJnLnByb2NlZHVyZSQgLGFyZy5hcmd1bWVudAoJ
CSxhcmcudHlwZSAsYXJnLm92ZXJsb2FkIyAsYXJnLnBvc2l0aW9uICxhcmcuc2VxdWVuY2UjICxh
cmcuZGVmYXVsdCMgLGFyZy5pbl9vdXQKICAgCSxhcmcubGV2ZWwjICxhcmcubGVuZ3RoICxhcmcu
cHJlY2lzaW9uICxhcmcuc2NhbGUgLGFyZy5yYWRpeAoJZnJvbSBzeXMuYXJndW1lbnQkQCYmdWlu
c3RhbmNlXzEgYXJnLCBkYmFfb2JqZWN0c0AmJnVpbnN0YW5jZV8xIG9iagoJd2hlcmUgYXJnLm9i
aiMgPSBvYmoub2JqZWN0X2lkCglhbmQgb2JqLm93bmVyID0gJyYmdXVzZXJfMScKCW1pbnVzCglz
ZWxlY3QgCgkJb2JqLm9iamVjdF9uYW1lICxvYmoub2JqZWN0X3R5cGUgLGFyZy5wcm9jZWR1cmUk
ICxhcmcuYXJndW1lbnQKCQksYXJnLnR5cGUgLGFyZy5vdmVybG9hZCMgLGFyZy5wb3NpdGlvbiAs
YXJnLnNlcXVlbmNlIyAsYXJnLmRlZmF1bHQjICxhcmcuaW5fb3V0CiAgIAksYXJnLmxldmVsIyAs
YXJnLmxlbmd0aCAsYXJnLnByZWNpc2lvbiAsYXJnLnNjYWxlICxhcmcucmFkaXgKCWZyb20gc3lz
LmFyZ3VtZW50JEAmJnVpbnN0YW5jZV8yIGFyZywgZGJhX29iamVjdHNAJiZ1aW5zdGFuY2VfMiBv
YmoKCXdoZXJlIGFyZy5vYmojID0gb2JqLm9iamVjdF9pZAoJYW5kIG9iai5vd25lciA9ICcmJnV1
c2VyXzInCi8KCgp1cGRhdGUgYXJnX2RpZmYgCnNldCBpbnN0YW5jZSA9ICcmJnVpbnN0YW5jZV8x
JwovCgotLSBjcmVhdGUgdG1wIHRhYmxlcyB0byBkbyB0aGVzZSB1cGRhdGVzCi0tIGl0IHdpbGwg
YmUgTVVDSCBmYXN0ZXIKCmRyb3AgdGFibGUgcmVtb3RlX2RiYV9vYmplY3RzOwpkcm9wIHRhYmxl
IHJlbW90ZV9hcmd1bWVudHM7CgpjcmVhdGUgdGFibGUgcmVtb3RlX2RiYV9vYmplY3RzCmFzIApz
ZWxlY3QgKgpmcm9tIGRiYV9vYmplY3RzQCYmdWluc3RhbmNlXzEKLwoKY3JlYXRlIGluZGV4IHJl
bW90ZV9kYmFfb2JqZWN0X2lkeDEgCm9uIHJlbW90ZV9kYmFfb2JqZWN0cyggb2JqZWN0X3R5cGUs
IG9iamVjdF9pZCApCi8KCmNyZWF0ZSBpbmRleCByZW1vdGVfZGJhX29iamVjdF9pZHgyCm9uIHJl
bW90ZV9kYmFfb2JqZWN0cyggb2JqZWN0X2lkICkKLwoKY3JlYXRlIHRhYmxlIHJlbW90ZV9hcmd1
bWVudHMKYXMKc2VsZWN0IAoJb2JqIywgcHJvY2VkdXJlJCxvdmVybG9hZCMscG9zaXRpb24sc2Vx
dWVuY2UjLGxldmVsIywKCWFyZ3VtZW50LHR5cGUsZGVmYXVsdCMsaW5fb3V0LGxlbmd0aCxwcmVj
aXNpb24sc2NhbGUsCglyYWRpeCxkZWZsZW5ndGgKZnJvbSBzeXMuYXJndW1lbnQkQCYmdWluc3Rh
bmNlXzEKLwoKY3JlYXRlIGluZGV4IHJlbW90ZV9hcmd1bWVudHNfaWR4MQpvbiByZW1vdGVfYXJn
dW1lbnRzKCBhcmd1bWVudCwgdHlwZSApCi8KCnVwZGF0ZSBhcmdfZGlmZiAgZGlmZgpzZXQgIG9i
aiMgPSAoCglzZWxlY3Qgb2JqIyAKCWZyb20gcmVtb3RlX2FyZ3VtZW50cyBhcmcsIHJlbW90ZV9k
YmFfb2JqZWN0cyBvYmoKCXdoZXJlIGFyZy5vYmojID0gb2JqLm9iamVjdF9pZAoJYW5kIG9iai5v
YmplY3RfbmFtZSA9IGRpZmYub2JqZWN0X25hbWUKCWFuZCBvYmoub2JqZWN0X3R5cGUgPSBkaWZm
Lm9iamVjdF90eXBlCglhbmQgb2JqLm93bmVyID0gJyYmdXVzZXJfMScKCWFuZCBudmwoYXJnLnBy
b2NlZHVyZSQsICdOT05FJykgPSBudmwoZGlmZi5wcm9jZWR1cmUsICdOT05FJykKCWFuZCBhcmcu
YXJndW1lbnQgPSBkaWZmLmFyZ3VtZW50CglhbmQgYXJnLnR5cGUgPSBkaWZmLnR5cGUKCWFuZCBh
cmcub3ZlcmxvYWQjID0gZGlmZi5vdmVybG9hZAoJYW5kIGRpZmYuaW5zdGFuY2UgPSAnJiZ1aW5z
dGFuY2VfMScKKQp3aGVyZSBpbnN0YW5jZSA9ICcmJnVpbnN0YW5jZV8xJwovCgogCmluc2VydCBp
bnRvIGFyZ19kaWZmIAoJKAoJCW9iamVjdF9uYW1lLCBvYmplY3RfdHlwZSwgcHJvY2VkdXJlLCBh
cmd1bWVudCwgdHlwZSwgb3ZlcmxvYWQsIHBvc2l0aW9uLCBzZXF1ZW5jZSwKCQkiREVGQVVMVCIs
IGluX291dCwgIkxFVkVMIiwgbGVuZ3RoLCAiUFJFQ0lTSU9OIiwgc2NhbGUsIHJhZGl4CgkpCglz
ZWxlY3QgCgkJb2JqLm9iamVjdF9uYW1lICxvYmoub2JqZWN0X3R5cGUgLGFyZy5wcm9jZWR1cmUk
ICxhcmcuYXJndW1lbnQKCQksYXJnLnR5cGUgLGFyZy5vdmVybG9hZCMgLGFyZy5wb3NpdGlvbiAs
YXJnLnNlcXVlbmNlIyAsYXJnLmRlZmF1bHQjICxhcmcuaW5fb3V0CiAgIAksYXJnLmxldmVsIyAs
YXJnLmxlbmd0aCAsYXJnLnByZWNpc2lvbiAsYXJnLnNjYWxlICxhcmcucmFkaXgKCWZyb20gc3lz
LmFyZ3VtZW50JEAmJnVpbnN0YW5jZV8yIGFyZywgZGJhX29iamVjdHNAJiZ1aW5zdGFuY2VfMiBv
YmoKCXdoZXJlIGFyZy5vYmojID0gb2JqLm9iamVjdF9pZAoJYW5kIG9iai5vd25lciA9ICcmJnV1
c2VyXzInCgltaW51cwoJc2VsZWN0IAoJCW9iai5vYmplY3RfbmFtZSAsb2JqLm9iamVjdF90eXBl
ICxhcmcucHJvY2VkdXJlJCAsYXJnLmFyZ3VtZW50CgkJLGFyZy50eXBlICxhcmcub3ZlcmxvYWQj
ICxhcmcucG9zaXRpb24gLGFyZy5zZXF1ZW5jZSMgLGFyZy5kZWZhdWx0IyAsYXJnLmluX291dAog
ICAJLGFyZy5sZXZlbCMgLGFyZy5sZW5ndGggLGFyZy5wcmVjaXNpb24gLGFyZy5zY2FsZSAsYXJn
LnJhZGl4Cglmcm9tIHN5cy5hcmd1bWVudCRAJiZ1aW5zdGFuY2VfMSBhcmcsIGRiYV9vYmplY3Rz
QCYmdWluc3RhbmNlXzEgb2JqCgl3aGVyZSBhcmcub2JqIyA9IG9iai5vYmplY3RfaWQKCWFuZCBv
Ymoub3duZXIgPSAnJiZ1dXNlcl8xJwovCgp1cGRhdGUgYXJnX2RpZmYgCnNldCBpbnN0YW5jZSA9
ICcmJnVpbnN0YW5jZV8yJwp3aGVyZSBpbnN0YW5jZSBpcyBudWxsCi8KCi0tIGNyZWF0ZSB0bXAg
dGFibGVzIHRvIGRvIHRoZXNlIHVwZGF0ZXMKLS0gaXQgd2lsbCBiZSBNVUNIIGZhc3RlcgoKZHJv
cCB0YWJsZSByZW1vdGVfZGJhX29iamVjdHM7CmRyb3AgdGFibGUgcmVtb3RlX2FyZ3VtZW50czsK
CmNyZWF0ZSB0YWJsZSByZW1vdGVfZGJhX29iamVjdHMKYXMgCnNlbGVjdCAqCmZyb20gZGJhX29i
amVjdHNAJiZ1aW5zdGFuY2VfMgovCgpjcmVhdGUgaW5kZXggcmVtb3RlX2RiYV9vYmplY3RfaWR4
MSAKb24gcmVtb3RlX2RiYV9vYmplY3RzKCBvYmplY3RfdHlwZSwgb2JqZWN0X2lkICkKLwoKY3Jl
YXRlIGluZGV4IHJlbW90ZV9kYmFfb2JqZWN0X2lkeDIKb24gcmVtb3RlX2RiYV9vYmplY3RzKCBv
YmplY3RfaWQgKQovCgpjcmVhdGUgdGFibGUgcmVtb3RlX2FyZ3VtZW50cwphcwpzZWxlY3QKCW9i
aiMsIHByb2NlZHVyZSQsb3ZlcmxvYWQjLHBvc2l0aW9uLHNlcXVlbmNlIyxsZXZlbCMsCglhcmd1
bWVudCx0eXBlLGRlZmF1bHQjLGluX291dCxsZW5ndGgscHJlY2lzaW9uLHNjYWxlLAoJcmFkaXgs
ZGVmbGVuZ3RoCmZyb20gc3lzLmFyZ3VtZW50JEAmJnVpbnN0YW5jZV8yCi8KCmNyZWF0ZSBpbmRl
eCByZW1vdGVfYXJndW1lbnRzX2lkeDEKb24gcmVtb3RlX2FyZ3VtZW50cyggYXJndW1lbnQsIHR5
cGUgKQovCgoKdXBkYXRlIGFyZ19kaWZmICBkaWZmCnNldCAgb2JqIyA9ICgKCXNlbGVjdCBvYmoj
IAoJZnJvbSByZW1vdGVfYXJndW1lbnRzIGFyZywgcmVtb3RlX2RiYV9vYmplY3RzIG9iagoJd2hl
cmUgYXJnLm9iaiMgPSBvYmoub2JqZWN0X2lkCglhbmQgb2JqLm9iamVjdF9uYW1lID0gZGlmZi5v
YmplY3RfbmFtZQoJYW5kIG9iai5vYmplY3RfdHlwZSA9IGRpZmYub2JqZWN0X3R5cGUKCWFuZCBv
Ymoub3duZXIgPSAnJiZ1dXNlcl8yJwoJYW5kIG52bChhcmcucHJvY2VkdXJlJCwgJ05PTkUnKSA9
IG52bChkaWZmLnByb2NlZHVyZSwgJ05PTkUnKQoJYW5kIGFyZy5hcmd1bWVudCA9IGRpZmYuYXJn
dW1lbnQKCWFuZCBhcmcudHlwZSA9IGRpZmYudHlwZQoJYW5kIGFyZy5vdmVybG9hZCMgPSBkaWZm
Lm92ZXJsb2FkCglhbmQgZGlmZi5pbnN0YW5jZSA9ICcmJnVpbnN0YW5jZV8yJwopCndoZXJlIGlu
c3RhbmNlID0gJyYmdWluc3RhbmNlXzInCi8KCgpkcm9wIHRhYmxlIHJlbW90ZV9kYmFfb2JqZWN0
czsKZHJvcCB0YWJsZSByZW1vdGVfYXJndW1lbnRzOwoKCgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQotLS0gcmVwb3J0cwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCgoKYnJlYWsgb24gdGFibGVfbmFtZSBvbiBjb2x1bW5fbmFtZSBvbiB1
c2VybmFtZQoKY29sIGRhdGFfcHJlY2lzaW9uIGZvcm1hdCA5OTk5OTkgaGVhZCAnUFJFQycKY29s
IGRhdGFfc2NhbGUgZm9ybWF0IDk5OTk5OSBoZWFkICdTQ0FMRScKY29sIGRhdGFfbGVuZ3RoIGZv
cm1hdCA5OTk5OTkgaGVhZCAnTEVOR1RIJwpjb2wgY29sdW1uX25hbWUgZm9ybWF0IGEzMCBoZWFk
ICdDT0xVTU4gTkFNRScKCnNldCB0cmltc3Bvb2wgb24KCi0tIHRhYmxlIGRpZmYgcmVwb3J0Cgpz
cG9vbCB0YWJsZV9kaWZmLnR4dAoKQHRpdGxlICdUYWJsZSBEaWZmcyBVc2VyMTogJiZ1dXNlcl8x
QCYmdWluc3RhbmNlXzEgVXNlcjI6ICYmdXVzZXJfMkAmJnVpbnN0YW5jZV8yJyAxMjAKCnNlbGVj
dAoJdDEudGFibGVfbmFtZSwgCgl0MS5jb2x1bW5fbmFtZSwgCgknJiZ1dXNlcl8xJyB1c2VybmFt
ZSwKCWluc3RhbmNlLAoJdDEuZGF0YV90eXBlLCAKCXQxLmRhdGFfcHJlY2lzaW9uLCAKCXQxLmRh
dGFfc2NhbGUsCgl0MS5kYXRhX2xlbmd0aApmcm9tIGFsbF90YWJfY29sdW1uc0AmJnVpbnN0YW5j
ZV8xIHQxLCB0YWJsZV9kaWZmIGQxCndoZXJlIG93bmVyID0gJyYmdXVzZXJfMScKYW5kIHQxLnRh
YmxlX25hbWUgID0gZDEudGFibGVfbmFtZQphbmQgdDEuY29sdW1uX25hbWUgPSBkMS5jb2x1bW5f
bmFtZQphbmQgZDEuaW5zdGFuY2UgPSAnJiZ1aW5zdGFuY2VfMScKdW5pb24gYWxsCnNlbGVjdAoJ
dDIudGFibGVfbmFtZSwgCgl0Mi5jb2x1bW5fbmFtZSwgCgknJiZ1dXNlcl8yJyB1c2VybmFtZSwK
CWluc3RhbmNlLAoJdDIuZGF0YV90eXBlLCAKCXQyLmRhdGFfbGVuZ3RoLCAKCXQyLmRhdGFfc2Nh
bGUsCgl0Mi5kYXRhX3ByZWNpc2lvbgpmcm9tIGFsbF90YWJfY29sdW1uc0AmJnVpbnN0YW5jZV8y
IHQyLCB0YWJsZV9kaWZmIGQyCndoZXJlIG93bmVyID0gJyYmdXVzZXJfMicKYW5kIHQyLnRhYmxl
X25hbWUgID0gZDIudGFibGVfbmFtZQphbmQgdDIuY29sdW1uX25hbWUgPSBkMi5jb2x1bW5fbmFt
ZQphbmQgZDIuaW5zdGFuY2UgPSAnJiZ1aW5zdGFuY2VfMicKb3JkZXIgYnkgMSwyLDMsNAovCgot
LSBpbmRleCBkaWZmIHJlcG9ydAoKYnJlYWsgb24gaW5kZXhfbmFtZSBvbiB0YWJsZV9uYW1lCgpj
b2wgZGF0YV9wcmVjaXNpb24gZm9ybWF0IDk5OTk5OSBoZWFkICdQUkVDJwpjb2wgZGF0YV9zY2Fs
ZSBmb3JtYXQgOTk5OTk5IGhlYWQgJ1NDQUxFJwpjb2wgZGF0YV9sZW5ndGggZm9ybWF0IDk5OTk5
OSBoZWFkICdMRU5HVEgnCmNvbCBjb2x1bW5fbmFtZSBmb3JtYXQgYTMwIGhlYWQgJ0NPTFVNTiBO
QU1FJwoKY29sIGNvbHVtbl9wb3NpdGlvbiBmb3JtYXQgOTk5IGhlYWQgJ0NPTHxQT1MnCmNvbCBj
b2x1bW5fbGVuZ3RoIGZvcm1hdCA5OTk5OSBoZWFkICdDT0x8TEVOJwoKQHRpdGxlICdJbmRleCBE
aWZmcyBVc2VyMTogJiZ1dXNlcl8xQCYmdWluc3RhbmNlXzEgVXNlcjI6ICYmdXVzZXJfMkAmJnVp
bnN0YW5jZV8yJyAxMzUKCmNvbCB1c2VybmFtZSBmb3JtYXQgYTEwIGhlYWQgJ0lOREVYfE9XTkVS
JwoKc3Bvb2wgaW5kZXhfZGlmZi50eHQKCnNlbGVjdAoJdDEuaW5kZXhfbmFtZSwgCgknJiZ1dXNl
cl8xJyB1c2VybmFtZSwKCWluc3RhbmNlLAoJdDEudGFibGVfbmFtZSwKCXQxLmNvbHVtbl9uYW1l
LAoJdDEuY29sdW1uX3Bvc2l0aW9uLAoJdDEuY29sdW1uX2xlbmd0aApmcm9tIGFsbF9pbmRfY29s
dW1uc0AmJnVpbnN0YW5jZV8xIHQxLCBpbmRleF9kaWZmIGQxCndoZXJlIGluZGV4X293bmVyID0g
JyYmdXVzZXJfMScKYW5kIHQxLnRhYmxlX25hbWUgID0gZDEudGFibGVfbmFtZQphbmQgdDEuY29s
dW1uX25hbWUgPSBkMS5jb2x1bW5fbmFtZQphbmQgdDEuY29sdW1uX3Bvc2l0aW9uID0gZDEuY29s
dW1uX3Bvc2l0aW9uCmFuZCB0MS5jb2x1bW5fbGVuZ3RoID0gZDEuY29sdW1uX2xlbmd0aAphbmQg
ZDEuaW5zdGFuY2UgPSAnJiZ1aW5zdGFuY2VfMScKdW5pb24gYWxsCnNlbGVjdAoJdDIuaW5kZXhf
bmFtZSwgCgknJiZ1dXNlcl8yJyB1c2VybmFtZSwKCWluc3RhbmNlLAoJdDIudGFibGVfbmFtZSwK
CXQyLmNvbHVtbl9uYW1lLAoJdDIuY29sdW1uX3Bvc2l0aW9uLAoJdDIuY29sdW1uX2xlbmd0aApm
cm9tIGFsbF9pbmRfY29sdW1uc0AmJnVpbnN0YW5jZV8yIHQyLCBpbmRleF9kaWZmIGQyCndoZXJl
IGluZGV4X293bmVyID0gJyYmdXVzZXJfMicKYW5kIHQyLnRhYmxlX25hbWUgID0gZDIudGFibGVf
bmFtZQphbmQgdDIuY29sdW1uX25hbWUgPSBkMi5jb2x1bW5fbmFtZQphbmQgdDIuY29sdW1uX3Bv
c2l0aW9uID0gZDIuY29sdW1uX3Bvc2l0aW9uCmFuZCB0Mi5jb2x1bW5fbGVuZ3RoID0gZDIuY29s
dW1uX2xlbmd0aAphbmQgZDIuaW5zdGFuY2UgPSAnJiZ1aW5zdGFuY2VfMicKb3JkZXIgYnkgMSwy
LDMsNCw1LDYKLwoKCi0tIGFyZ3VtZW50IGRpZmYgcmVwb3J0Cgpjb2wgcHJvY2VkdXJlIGZvcm1h
dCBhNDAgaGVhZCAnUFJPQ0VEVVJFJwoKYnJlYWsgb24gcHJvY2VkdXJlIG9uIG92ZXJsb2FkCgpA
dGl0bGUgJ0FyZ3VtZW50IERpZmZzIFVzZXIxOiAmJnV1c2VyXzFAJiZ1aW5zdGFuY2VfMSBVc2Vy
MjogJiZ1dXNlcl8yQCYmdWluc3RhbmNlXzInIDIwMAoKc3Bvb2wgYXJnX2RpZmYudHh0CgpTRUxF
Q1QKCXN1YnN0cigKCQlvYmouT0JKRUNUX05BTUV8fAoJCWRlY29kZSggYXJnLnByb2NlZHVyZSQs
bnVsbCwnJywnLicpIHx8CgkJYXJnLnByb2NlZHVyZSQsMSw2MAoJKSBwcm9jZWR1cmUKICAgLGFy
Zy5PVkVSTE9BRCMgb3ZlcmxvYWQKCSxhcmcuQVJHVU1FTlQKCSxkaWZmLmluc3RhbmNlCgksb2Jq
Lm9iamVjdF90eXBlCgksZGVjb2RlKGFyZy50eXBlLAoJCTEsICdWQVJDSEFSMicsCgkJMiwgJ05V
TUJFUicsCgkJOCwgJ0xPTkcnLAoJCTksICdWQVJDSEFSJywKCQkxMiwgJ0RBVEUnLAoJCTIzLCAn
UkFXJywKCQkyNCwgJ0xPTkcgUkFXJywKCQk2OSwgJ1JPV0lEJywKCQk5NiwgJ0NIQVInLAoJCTI1
MCwgJ1JFQ09SRCcsCgkJMjUyLCAnQk9PTEVBTicsCgkJLS0ganVzdCBzaG93IHR5cGUjIGFzIGRl
ZmF1bHQKCQlzdWJzdHIodG9fY2hhcihhcmcudHlwZSksMSwxMCkKCSkgdHlwZQogICAsYXJnLlBP
U0lUSU9OCiAgICxOVkwoYXJnLkRFRkFVTFQjLDApIERFRkFVTFQjCgksZGVjb2RlKGFyZy5JTl9P
VVQsbnVsbCwnSU4nLCAyLCdJTl9PVVQnLCAnVU5LTk9XTicgKSBJTl9PVVQKICAgLE5WTChhcmcu
TEVWRUwjLDApIExFVkVMIwoJLE5WTChhcmcuTEVOR1RILDApIExFTkdUSAogICAsTlZMKGFyZy5Q
UkVDSVNJT04sMCkgUFJFQ0lTSU9OCiAgICxOVkwoYXJnLlNDQUxFLDApIFNDQUxFCiAgICxOVkwo
YXJnLlJBRElYLDApIFJBRElYCmZyb20KCXN5cy5hcmd1bWVudCRAJiZ1aW5zdGFuY2VfMSBhcmcK
CSxkYmFfb2JqZWN0c0AmJnVpbnN0YW5jZV8xIG9iagoJLGFyZ19kaWZmIGRpZmYKd2hlcmUgYXJn
Lm9iaiMgPSBvYmoub2JqZWN0X2lkCmFuZCBvYmoub3duZXIgPSAnJiZ1dXNlcl8xJwphbmQgZGlm
Zi5vYmojID0gYXJnLm9iaiMKYW5kIG52bChkaWZmLnByb2NlZHVyZSwnTk9ORScpID0gbnZsKGFy
Zy5wcm9jZWR1cmUkLCdOT05FJykKYW5kIGRpZmYuYXJndW1lbnQgPSBhcmcuYXJndW1lbnQKYW5k
IGRpZmYudHlwZSA9IGFyZy50eXBlCmFuZCBkaWZmLm92ZXJsb2FkID0gYXJnLm92ZXJsb2FkIwph
bmQgZGlmZi5pbnN0YW5jZSA9ICcmJnVpbnN0YW5jZV8xJwp1bmlvbiBhbGwKU0VMRUNUCglzdWJz
dHIoCgkJb2JqLk9CSkVDVF9OQU1FfHwKCQlkZWNvZGUoIGFyZy5wcm9jZWR1cmUkLG51bGwsJycs
Jy4nKSB8fAoJCWFyZy5wcm9jZWR1cmUkLDEsNjAKCSkgcHJvY2VkdXJlCiAgICxhcmcuT1ZFUkxP
QUQjIG92ZXJsb2FkCgksYXJnLkFSR1VNRU5UCgksZGlmZi5pbnN0YW5jZQoJLG9iai5vYmplY3Rf
dHlwZQoJLGRlY29kZShhcmcudHlwZSwKCQkxLCAnVkFSQ0hBUjInLAoJCTIsICdOVU1CRVInLAoJ
CTgsICdMT05HJywKCQk5LCAnVkFSQ0hBUicsCgkJMTIsICdEQVRFJywKCQkyMywgJ1JBVycsCgkJ
MjQsICdMT05HIFJBVycsCgkJNjksICdST1dJRCcsCgkJOTYsICdDSEFSJywKCQkyNTAsICdSRUNP
UkQnLAoJCTI1MiwgJ0JPT0xFQU4nLAoJCS0tIGp1c3Qgc2hvdyB0eXBlIyBhcyBkZWZhdWx0CgkJ
c3Vic3RyKHRvX2NoYXIoYXJnLnR5cGUpLDEsMTApCgkpIHR5cGUKICAgLGFyZy5QT1NJVElPTgog
ICAsTlZMKGFyZy5ERUZBVUxUIywwKSBERUZBVUxUIwoJLGRlY29kZShhcmcuSU5fT1VULG51bGws
J0lOJywgMiwnSU5fT1VUJywgJ1VOS05PV04nICkgSU5fT1VUCiAgICxOVkwoYXJnLkxFVkVMIyww
KSBMRVZFTCMKCSxOVkwoYXJnLkxFTkdUSCwwKSBMRU5HVEgKICAgLE5WTChhcmcuUFJFQ0lTSU9O
LDApIFBSRUNJU0lPTgogICAsTlZMKGFyZy5TQ0FMRSwwKSBTQ0FMRQogICAsTlZMKGFyZy5SQURJ
WCwwKSBSQURJWApmcm9tCglzeXMuYXJndW1lbnQkQCYmdWluc3RhbmNlXzIgYXJnCgksZGJhX29i
amVjdHNAJiZ1aW5zdGFuY2VfMiBvYmoKCSxhcmdfZGlmZiBkaWZmCndoZXJlIGFyZy5vYmojID0g
b2JqLm9iamVjdF9pZAphbmQgb2JqLm93bmVyID0gJyYmdXVzZXJfMicKYW5kIGRpZmYub2JqIyA9
IGFyZy5vYmojCmFuZCBudmwoZGlmZi5wcm9jZWR1cmUsJ05PTkUnKSA9IG52bChhcmcucHJvY2Vk
dXJlJCwnTk9ORScpCmFuZCBkaWZmLmFyZ3VtZW50ID0gYXJnLmFyZ3VtZW50CmFuZCBkaWZmLnR5
cGUgPSBhcmcudHlwZQphbmQgZGlmZi5vdmVybG9hZCA9IGFyZy5vdmVybG9hZCMKYW5kIGRpZmYu
aW5zdGFuY2UgPSAnJiZ1aW5zdGFuY2VfMicKb3JkZXIgYnkgMSwyLDMsNCw1Ci8KCgotLSBzZXF1
ZW5jZSBkaWZmIHJlcG9ydAoKQHRpdGxlICdTZXF1ZW5jZSBEaWZmcyBVc2VyMTogJiZ1dXNlcl8x
QCYmdWluc3RhbmNlXzEgVXNlcjI6ICYmdXVzZXJfMkAmJnVpbnN0YW5jZV8yJyAxMTAKCmNvbCBz
ZXF1ZW5jZV9uYW1lIGZvcm1hdCBhMzAgaGVhZCAnU0VRVUVOQ0UgTkFNRScKY29sIGxhc3RfbnVt
YmVyIGZvcm1hdCA5OTk5OTk5OTk5OTkgaGVhZCAnTEFTVHxOVU1CRVInCmNvbCBtaW5fdmFsdWUg
Zm9ybWF0IDk5OTk5OTk5OTkgaGVhZCAnTUlOfFZBTFVFJwpjb2wgbWF4X3ZhbHVlIGZvcm1hdCA5
OTk5OTk5OTk5OTkgaGVhZCAnTUFYfFZBTFVFJwpjb2wgaW5jcmVtZW50X2J5IGZvcm1hdCA5OTk5
OTkgaGVhZCAnSU5DUkVNRU5UJwpjb2wgY2FjaGVfc2l6ZSBmb3JtYXQgOTk5OTk5IGhlYWQgJ0NB
Q0hFfFNJWkUnCmNvbCBjeWNsZV9mbGFnIGZvcm1hdCBhNSBoZWFkICdDWUNMRXxGTEFHJwpjb2wg
b3JkZXJfZmxhZyBmb3JtYXQgYTUgaGVhZCAnT1JERVJ8RkxBRycKCmJyZWFrIG9uIHNlcXVlbmNl
X25hbWUgc2tpcCAxCgpzcG9vbCBzZXF1ZW5jZV9kaWZmLnR4dAoKKAoJKCAKCQlzZWxlY3QKCQkJ
c2VxdWVuY2VfbmFtZSwgJyYmdWluc3RhbmNlXzEnIGluc3RhbmNlICxsYXN0X251bWJlciwgbWlu
X3ZhbHVlLG1heF92YWx1ZSwKCQkJaW5jcmVtZW50X2J5LGN5Y2xlX2ZsYWcsb3JkZXJfZmxhZywK
CQkJY2FjaGVfc2l6ZQoJCWZyb20gZGJhX3NlcXVlbmNlc0AmJnVpbnN0YW5jZV8xCgkJd2hlcmUg
c2VxdWVuY2Vfb3duZXIgPSAnJiZ1dXNlcl8xJyAKCSkKCW1pbnVzCgkoIAoJCXNlbGVjdCAKCQkJ
c2VxdWVuY2VfbmFtZSwgJyYmdWluc3RhbmNlXzInIGluc3RhbmNlICxsYXN0X251bWJlciwgbWlu
X3ZhbHVlLG1heF92YWx1ZSwKCQkJaW5jcmVtZW50X2J5LGN5Y2xlX2ZsYWcsb3JkZXJfZmxhZywK
CQkJY2FjaGVfc2l6ZQoJCWZyb20gZGJhX3NlcXVlbmNlc0AmJnVpbnN0YW5jZV8yCgkJd2hlcmUg
c2VxdWVuY2Vfb3duZXIgPSAnJiZ1dXNlcl8yJyAKCSkKKQp1bmlvbgooCgkoIAoJCXNlbGVjdAoJ
CQlzZXF1ZW5jZV9uYW1lLCAnJiZ1aW5zdGFuY2VfMicgaW5zdGFuY2UgLGxhc3RfbnVtYmVyLCBt
aW5fdmFsdWUsbWF4X3ZhbHVlLAoJCQlpbmNyZW1lbnRfYnksY3ljbGVfZmxhZyxvcmRlcl9mbGFn
LAoJCQljYWNoZV9zaXplCgkJZnJvbSBkYmFfc2VxdWVuY2VzQCYmdWluc3RhbmNlXzIKCQl3aGVy
ZSBzZXF1ZW5jZV9vd25lciA9ICcmJnV1c2VyXzInIAoJKQoJbWludXMKCSggCgkJc2VsZWN0IAoJ
CQlzZXF1ZW5jZV9uYW1lLCAnJiZ1aW5zdGFuY2VfMScgaW5zdGFuY2UgLGxhc3RfbnVtYmVyLCBt
aW5fdmFsdWUsbWF4X3ZhbHVlLAoJCQlpbmNyZW1lbnRfYnksY3ljbGVfZmxhZyxvcmRlcl9mbGFn
LAoJCQljYWNoZV9zaXplCgkJZnJvbSBkYmFfc2VxdWVuY2VzQCYmdWluc3RhbmNlXzEKCQl3aGVy
ZSBzZXF1ZW5jZV9vd25lciA9ICcmJnV1c2VyXzEnIAoJKQopCi8KCnNwb29sIG9mZgoKdW5kZWYg
MSAyIDMgNAoKcHJvbXB0CnByb21wdApwcm9tcHQKcHJvbXB0IFlvdXIgcmVwb3J0cyBpbiB0aGUg
Zm9sbG93aW5nIGZpbGVzOgpwcm9tcHQKcHJvbXB0IHRhYmxlX2RpZmYudHh0CnByb21wdCBpbmRl
eF9kaWZmLnR4dApwcm9tcHQgYXJnX2RpZmYudHh0CnByb21wdCBzZXF1ZW5jZV9kaWZmLnR4dApw
cm9tcHQKCgo=
--------------Boundary-00=_TI6B0KP3KE5T3HEN611V
Content-Type: text/plain;
charset="iso-8859-1";
name="columns.sql"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="columns.sql"
CmNvbCBibG9ja3MgZm9ybWF0IDk5LDk5OSw5OTkgaGVhZCAnQkxPQ0tTJwpjb2wgZGJfbGluayBm
b3JtYXQgYTMwIGhlYWQgJ0RCIExJTksnCmNvbCBkYl9saW5rX2luc3RhbmNlIGZvcm1hdCBhMzAg
aGVhZCAnREIgTElOS3xJTlNUQU5DRScKY29sIGRiX2xpbmtfdXNlcm5hbWUgZm9ybWF0IGExMCBo
ZWFkICdEQiBMSU5LfFVTRVJOQU1FJwpjb2wgZW1wdHlfYmxvY2tzIGZvcm1hdCA5OSw5OTksOTk5
IGhlYWQgJ0VNUFRZIEJMT0NLUycKY29sIGhvc3QgZm9ybWF0IGExMCBoZWFkICdIT1NUJwpjb2wg
aW5kZXhfbmFtZSBmb3JtYXQgYTMwIGhlYWQgJ0lOREVYIE5BTUUnCmNvbCBpbml0aWFsX2V4dGVu
dCBmb3JtYXQgOSw5OTksOTk5LDk5OSBoZWFkICdJTklUSUFMfEVYVEVOVCcKY29sIGluc3RhbmNl
IGZvcm1hdCBhNCBoZWFkICdJTlNUJwpjb2wgbWF4X2Jsb2NrcyBmb3JtYXQgOSw5OTksOTk5IGhl
YWQgJ01BWCBCTE9DS1MnCmNvbCBtYXhfYnl0ZXMgZm9ybWF0IDk5LDk5OSw5OTksOTk5IGhlYWQg
J01BWCBCWVRFUycKY29sIG1heF9leHRlbnRzIGZvcm1hdCA5OTksOTk5IGhlYWQgJ01BWHxFWFRF
TlRTJwpjb2wgbWluX2V4dGVudHMgZm9ybWF0IDk5OSBoZWFkICdNSU58RVhUJwpjb2wgbmV4dF9l
eHRlbnQgZm9ybWF0IDksOTk5LDk5OSw5OTkgaGVhZCAnTkVYVHxFWFRFTlQnCmNvbCBvYmplY3Rf
bmFtZSBmb3JtYXQgYTMwIGhlYWQgJ09CSkVDVCBOQU1FJwpjb2wgb3duZXIgZm9ybWF0IGExMCBo
ZWFkICdPV05FUicKY29sIHBjdF9mcmVlIGZvcm1hdCA5OTkgaGVhZCAnUENUfEZSRUUnCmNvbCBw
Y3RfaW5jcmVhc2UgZm9ybWF0IDk5OSBoZWFkICdQQ1R8SU5DJwpjb2wgcGN0X3VzZWQgZm9ybWF0
IDk5OSBoZWFkICdQQ1R8VVNFRCcKY29sIHN5bm9ueW1fbmFtZSBmb3JtYXQgYTMwIGhlYWQgJ1NZ
Tk9OWU0gTkFNRScKY29sIHRhYmxlX25hbWUgZm9ybWF0IGEzMCBoZWFkICdUQUJMRSBOQU1FJwpj
b2wgdGFibGVfb3duZXIgZm9ybWF0IGExMCBoZWFkICdUQUJMRXxPV05FUicKY29sIHRhYmxlc3Bh
Y2VfbmFtZSBmb3JtYXQgYTE1IGhlYWQgJ1RBQkxFU1BBQ0V8TkFNRScKY29sIHRpbWVzdGFtcCBm
b3JtYXQgYTE5IGhlYWQgJ1RJTUUgU1RBTVAnCmNvbCB1c2VybmFtZSBmb3JtYXQgYTEwIGhlYWQg
J1VTRVJOQU1FJwpjb2wgbGFzdF9kZGxfdGltZSBoZWFkICdMQVNUIERETHxUSU1FJwpjb2wgY3Jl
YXRlZCBoZWFkICdDUkVBVEVEJwpjb2wgcHJvY2VkdXJlX25hbWUgZm9ybWF0IGEzMCBoZWFkICdQ
Uk9DRURVUkUgTkFNRScKY29sIGZ1bmN0aW9uX25hbWUgZm9ybWF0IGEzMCBoZWFkICdGVU5DVElP
TiBOQU1FJwpjb2wgcGFja2FnZV9uYW1lIGZvcm1hdCBhMzAgaGVhZCAnUEFDS0FHRSBOQU1FJwpj
b2wgcGFja2FnZV9ib2R5X25hbWUgZm9ybWF0IGEzMCBoZWFkICdQQUNLQUdFIEJPRFkgTkFNRScK
Y29sIHNlZ21lbnRfbmFtZSBmb3JtYXQgYTMwIGhlYWQgJ1NFR01FTlQgTkFNRScK
--------------Boundary-00=_TI6B0KP3KE5T3HEN611V
Content-Type: text/plain;
charset="iso-8859-1";
name="clears.sql"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="clears.sql"
CnNldCBwYXVzZSBvZmYKc2V0IGVjaG8gb2ZmCnNldCB0cmltc3Bvb2wgb24Kc2V0IGZlZWQgb24g
dGVybSBvbiBlY2hvIG9mZiB2ZXJpZnkgb2ZmCnNldCBsaW5lIDgwCnNldCBwYWdlcyAyNCBoZWFk
IG9uCgpjbGVhciBjb2wKY2xlYXIgYnJlYWsKY2xlYXIgY29tcHV0ZXMKCmJ0aXRsZSAnJwp0dGl0
bGUgJycKCmJ0aXRsZSBvZmYKdHRpdGxlIG9mZgoKLS1AQHN0ZGRhdGUKCg==
--------------Boundary-00=_TI6B0KP3KE5T3HEN611V--
--
Please see the official ORACLE-L FAQ: http://www.orafaq.com
--
Author: Jared Still
INET: [EMAIL PROTECTED]
Fat City Network Services -- (858) 538-5051 FAX: (858) 538-5051
San Diego, California -- Public Internet access / Mailing Lists
--------------------------------------------------------------------
To REMOVE yourself from this mailing list, send an E-Mail message
to: [EMAIL PROTECTED] (note EXACT spelling of 'ListGuru') and in
the message BODY, include a line containing: UNSUB ORACLE-L
(or the name of mailing list you want to be removed from). You may
also send the HELP command for other information (like subscribing).