Here I created a simple database based on the Protoss faction from the PC game Starcraft. Although, the lay out may not be perfect, I believe it works and is functional

create table resource_harvest
(
  id int,
  structure1_name varchar(255)primary key'null',
  structure1_purpose1 varchar(255)'null',
  structure1_purpose2 varchar(255)'null',
  structure1_purpose3 varchar(255)'null',
  structure1_purpose4 varchar(255)'null',   
  structure1_psi_supplied int   
  structure1_ability varchar(255) 'null',
  structure2_name varchar(255),
  structure2_purpose varchar(255)
  structure_cost_min int,   
);
insert into resource_harvest 
values (1, 'Nexus', 'Collects Resources', 'Warp_in workers', 'produce psi', 'Warp_in Mothership', 10 ,'Chrono_boost', 400);
values (2, 'null', 'null', 'null', 'null', 'null','null', 'null' , 'Assimilator', 'refines Vaspene gas', 75);
create table base_b_u
(
  id int
  structure1_name varchar(255) foreign key, 
  worker_name varchar(50) primary key,
  worker_cost_min int,
  worker_purpose1 varchar(255),
    worker_purpose2 varchar(255),

  worker_purpose3 varchar(255)  
);
insert into base_b_u 
values (1, 'Nexus', 'Probe', 50, 'harvest minerals','harvest gas', 'Warp in Structures');
create table essential_structure
(
  id int,
  E_structure_name varchar(50) Primary key,
  E_structure_name_cost_min int,    
  E_structure_purpose varchar(255),
  E_structure_purpose2 varchar(255)
  E_structure_amount_psi_supplied   int,
  worker_name varchar(50) foreign key
)
insert into essential_structure
values (1, 'Pylon', 100,'Project_psionic_matrix', 'null','null', 'probe')
values (2, 'null', 'null', 'null','provide_psi', 9, 'probe'); 
create table G_structure_build
(
  id int,
  worker_name varchar(50)foreign key,
  E_structure_name varchar(50) foreign key,--pylon for energy field to build
  structurename_G varchar(255) primary key,
  structurename_G_purpose varchar(255),
  structure_cost_min int
);
insert into G_structure_build
values (1, 'Probe', 'pylon','Gateway', 'warp in troops', 150); 
create table G_troops
(id int primary key,
  E_structure_name varchar(50) foreign key, -- pylon for psi/supply increase limit on unit build
  structurename_G varchar(255) foreign key,
  troop_unitname varchar(255),
  unit_cost_M int,
  unit_cost_G int,
  unit_supply varchar(255),
  unit_armor_type varchar(255),
  unit_shields int,
  unit_shields_reg/sec int,
  unit_type varchar(255),
  unit_energy_max int 'null',
  unit_armament varchar(255),
  unit_targets_a varchar(255),
  unit_targets_b varchar(255),
  unit_role varchar(255),
  unit_damage int,
  unit_extradamage_antiarmor varchar(20),
  unit_structure_requirement varchar(255) ,
  unit_structure_requirement_name varchar(255) 'null',
  unit_structure_requirement_name2 varchar(255) 'null' 
);
insert into G_troops
values (1,'pylon', 'Gateway', 'Zealot', 100, 0, '2_psi', 'Light', 50, 2, 'Biological', 'null', 'Psi_blades', 'Ground', 'no_antiair', 'No', 'Power_Melee_warrior', 8, 'no_extra', 'No', 'Null','Null');
create table G_research_structure

(
  id int,
  E_structure_name varchar(50) foreign key,--pylon for psionic matrix to warp in structure
  --structurename_G varchar(255) foreign key,   
  structurename_F varchar(255) primary key,
  structurename_F_GW_upgrades varchar(255),
  structurename_F_GArm_upgrades varchar(255),
  structurename_F_GroundandAir_Shield_upgrades varchar(255),    
  --structurename_Function varchar(255)
);
insert into G_research_structure
values (1, 'Gateway', 'Forge', 'plus_1 to damage', 'plus_1 to armor', 'plus_1 to shields', 'access defensive structure' ); 
values (2, 'null', 'null', 'plus_2 to damage', 'plus_2 to armor', 'plus_2 to shields', 'null' ); 
values (3, 'null', 'null', 'plus_3 to damage', 'plus_3 to armor', 'plus_3 to shields', 'null' ); 

------------
create table defense_structure
(
  id int,
    E_structure_name varchar(50) foreign key, 
  structurename_F varchar(255) foreign key,
  --structurename_G varchar(255)foreign key,
    structure_nameP_C varchar(255) primary key,

  worker_name varchar(50)foreign key
);
insert into defense_structure
values (1,'pylon','Gateway','Forge','photon_cannon', 'probe'); 

------------
create table req_CCstructure

(
  id int,
  E_structure_name varchar(50) foreign key, -- pylon energy field to warp in structure
  structurename_G varchar(255)foreign key,
  structurename_C varchar(255) primary key,
  structurename_C_GGunitaccess varchar(255),
  structure_C_Research_Air_W_upgrades varchar(255),
  structure_C_Research_Air_Armor_upgrades varchar(255),
  structure_C_Reseach_Struct_G_ability varchar (255),
  structure_C_structural_requirement_for_additional_upgrades varchar (255)'null',
  worker_name varchar(50)foreign key
);
insert into req_CCstructure
values (1, 'pylon','Gateway', 'Cybernetics_core', 'produce new gw_units','plus_1 to air weapons', 'plus_1 to air armor','Warpgate','null','probe' ); 
values (2, 'null', 'null', 'null','null', 'plus_2 to damage', 'plus_2 to armor', 'null','Fleetbeacon','null' ); 
values (3, 'null', 'null', 'null','null', 'plus_3 to damage', 'plus_3 to armor', 'null','Fleetbeacon','null'); 
create table G_troops_after_Cyb_C
(id int primary,
  E_structure_name varchar(50) foreign key,-- pylon need to increase supply/larger army
  structurename_G varchar(255) foreign key,
  structurename_C varchar(255)foreign key,
  g_unitname varchar(255),
  unit_cost_M int,
  unit_cost_G int,
  unit_supply varchar(255),
  unit_armor_type varchar(255),
  unit_shields int,
  unit_shields_reg/sec int,
  unit_type varchar(255),
  unit_energy_max int null,
  unit_armament varchar(255),
  unit_targets_a varchar(255),
  unit_targets_b varchar(255),
  unit_role varchar(255),
  unit_damage int,
  unit_additionaldamage_vs_lightarmor varchar(20),
  unit_additionaldamage_vs_heavyarmor varchar(20),
  unit_structure_requirement varchar(255), 
  unit_structure_requirement_name varchar(255) null,
  unit_structure_requirement_name2 varchar(255) null 
);
insert into G_troops_after_Cyb_C
values (1, 'pylon', 'Gateway',  'Cybernetics_core','Stalker', 125, 50, '2_psi', 'Armored', 80, 2, 'Mechanical', 'null', 'Particle_disruptors', 'yes', 'yes','Range_Support_Strider', 13, 'no additonal','additional_5_damage', 'Yes', 'Cybernetics_core', 'negative');
values (2, 'Gateway', 'Cybernetics_core' ,'Adept', 100, 25, '2_psi', 'Light', 70, 'null', 'psionic', 0, 'Glaive cannon', 'yes', 'yes', 'Harassment', 10, 'additional 12damage','no_extra', 'Yes', 'Cybernetics_core', 'negative');
values (3, 'Gateway', 'Cybernetics_core' ,'Sentry', 50, 100, '2_psi', 'Light', 40, 2, 'Psionic', 200, 'Disruption_beam', 'yes', 'yes', 'energy_manipulation', 6, 'no additional','no_extra', 'Yes', 'Cybernetics_core', 'negative');


---------------
 create table shield_battery
(
  
  id int,
  E_structure_name varchar(50) foreign key, -- pylon essential, if surrounding pylon destroyed cannons become inactive
  structurename_C varchar(255)foreign key,
  structurename_G varchar(255) foreign key,
  structure_nameS_B varchar(255)primary key,
  structure_nameS_B_minerals int
  structure_nameS_B_gas int
  structure_purpose varchar(50)
  structure_nameS_B_energy int
  worker_name varchar(50)foreign key
);
insert into shield_battery
values (1,'pylon','Gateway', 'Cybernetics_core','shield_battery', 100, 0, 'recharge shields',100, 'probe'); 
 create table advance_structures_G_unit_research
(
  id int primary key,
  E_structure_name varchar(50) foreign key,--pylon for energy field
  Adv_structurename varchar(255),
  structurename_G varchar(255) foreign key 'null',
  structurename_C varchar(255)foreign key 'null',
  --Adv_structure_requirement varchar(255) foreign key 'null',
  Adv_structure_cost_min int 'null',
  Adv_structure_cost_Vespine_gas int 'null',
  Adv_structure_purpose varchar(255) 'null',    
  Adv_structure_research1 varchar(255) ,
  Adv_structure_research1_unitaffected varchar(255) ,   
  Adv_structure_research2 varchar(255),
  Adv_structure_research2_unitaffected varchar(255),
  worker_name varchar(50)foreign key 'null'
);
insert into advance_structures_G_unit_research
values (1, 'pylon ','Twilight_Council', 'Gateway', 'Cybernetics_Core', 150, 150, 'research_new_abilities', 'Charge_ability','Zealot', 'null', 'null','probe');
values (2,'null', 'Twilight_Council', 'Gateway', 'Cybernetics_Core', 150, 150, 'research_new_abilities', 'Blink_ability','Stalker', 'null', 'null','null');
create table G_units_advance_structures
(
  id int primary key,
  --structurename_G varchar(255) foreign key 'null', gateway not quite essential unless (advance structure destroyed, cybernetics core destroyed, awa gateway destroyed ) as cybernetics core in order to be rebuilt will require a new gateway 
  structurename_C varchar(255)foreign key 'null',   
  E_structure_name varchar(50) foreign key, --new or existing pylon energy field to build
  Adv_structurename varchar(255)foreign key 'null',
  
  Advstructurename2_ varchar(255)foreign key 'null',
  Adv_structure2_cost_min int 'null',
  Adv_structure2_cost_Vespine_gas int 'null',
  Advstructure2_purpose varchar(255) 'null',
  Advstructure2_reseach_ability varchar(255) 'null',
  Advstructure2_research_ability varchar(255) 'null',
  Advstructurename3_ varchar(255)   'null',
  Adv_structure3_cost_min int 'null',
  Adv_structure3_cost_Vespine_gas int 'null',   
  Advstructurename3_purpose varchar(255) 'null',
  worker_name varchar(50)foreign key
  --structurename_C_grantaccesstoadvancetech varchar(255),
);
insert into  G_units_advance_structures
values (1, 'pylon', 'Cybernetics_Core', 'Twilight_Council', 'Templar_Archives', 150,200,'enable production of High_templar', 
values(2, 'null','null','null', 'null','null','null','null','Psionic_storm', 'Khaydarin Amulet_increases_starting_energy','null','null','null','null', 'null');

values (3, 'null','null', 'null', 'null', 'null','null','null', 'null','null','Dark_Shrine' ,150, 250, 'enable production of Dark_templar','null');
create table G_troops_beyondCyb_C
(id int primary key,
  E_structure_name varchar(50) foreign key, 
  structurename_G varchar(255) foreign key,
  structurename_C varchar(255)foreign key,
  Adv_structurename varchar(255)foreign key 'null',
  Advstructurename2 varchar(255)foreign key 'null',
  Advstructurename3 varchar(255)     foreign key,
  g_unitname varchar(255),
  unit_cost_Min int,
  unit_cost_vespine_Gas int,
  unit_supply varchar(255),
  unit_armor_type varchar(255),
  unit_shields int,
  unit_shields_reg/sec int,
  unit_type varchar(255),
  unit_energy_max int null,
  unit_armament varchar(255),
  unit_targets_ground varchar(255),
  unit_targets_air varchar(255),
  unit_role varchar(255),
  unit_ability1 varchar(255),
  unit_ability2 varchar(255),
  unit_ability3 varchar(255),
  
  unit_damage int,
  unit_additionaldamage_vs_biological varchar(20), 
  unit_additionaldamage_vs_lightarmor varchar(20),
  unit_additionaldamage_vs_heavyarmor varchar(20));
insert into G_troops_beyondCyb_C
values (1, 'pylon','Gateway', 'Cybernetics_Core', 'Twilight_Council' ,  'Templar_Archives', 'null','High_Templar', 50, 150, '2_psi', 'Light', 40, 2, 'Psionic', 200, 'psi_blast', 'yes', 'no', 'Potent_psionic_master', 'Feedback','Psionic storm','Archon merge',4, 'No_extra', 'No_extra', 'Yes'); 

values (2, 'pylon','Gateway', 'Cybernetics_Core', 'Twilight_Council' , 'Templar_Archives', 'Dark_Shrine', 'Dark_Templar', 125, 125, '2_psi', 'Light', 80, 2, 'Psionic', 200, 'Warp_Blade', 'yes', 'no', 'Stealth_Harassment_Warrior', 'null','null','Archon merge',45, 'No_extra', 'Yes');
create table Massive_unit
(
  id int primary key,
    structurename_G varchar(255) foreign key,
  structurename_C varchar(255)foreign key,
  Adv_structurename varchar(255)foreign key 'null',
  Advstructurename2 varchar(255)foreign key 'null',
  Advstructurename3 varchar(255)     foreign key,
  M_unit_name varchar (100),
  unit_supply varchar(255)'null',
  unit_origin varchar(255) 'null',
  unit_shields int 'null',
  unit_shields_reg/sec int 'null',
  unit_type varchar(255) 'null',
  unit_type2 varchar(255)'null',
  unit_armament varchar(255)'null',
  unit_targets_ground varchar(255)'null',
  unit_targets_air varchar(255)'null',
  unit_role varchar(255)'null',
  unit_damage int 'null',
  unit_additionaldamage_vs_biological varchar(20) 'null',
  g_unitname varchar(255) foreign key 'null'
);
insert into massive_unit
values (1, 'pylon','Gateway', 'Cyberneticscore','Twilight_Council' , 'Templar_Archives', 'Dark_Shrine','Archon', '4_psi', 'merging of 2 high_or_dark_templar', 350, 2, 'Massive','Psionic', 'null', 'Psionic shockwave', 'yes', 'yes','Powerful_psionic_attacker', 25, '+10', 'Yes');
create table advance_structure_Mech
(id int ,
  E_structure_name varchar(50) foreign key, 
  --structurename_G varchar(255) foreign key 'null',
  structurename_C varchar(255)foreign key 'null',
  --Adv_structurename varchar(255)foreign key 'null',
  M_Advstructurename_ varchar(255)primary key 'null',
  M_Adv_structure_cost_min int 'null',
  M_Adv_structure_cost_Vespine_gas int 'null',
  M_Advstructure_purpose varchar(255) 'null',
  --M_Advstructure_purpose2 varchar(255)
  --Advstructurename1_reseach_ability varchar(255) 'null',
  --Advstructurename1_research_ability varchar(255) 'null',
  --Advstructurename2_ varchar(255) 'null',
  --Adv_structure2_cost_min int 'null',
  --Adv_structure2_cost_Vespine_gas int 'null', 
  --Advstructurename2_purpose varchar(255) 'null',
  worker_name varchar(50)foreign key
);
insert into advance_structure_Mech
values (1, 'Pylon', 'Cybernetics_Core', 'Robotics_Facility', 200,100, 'produce mechanical units', 'probe');
create table adv_mech_units
(id int primary key,
  E_structure_name varchar(50) foreign key, 
  structurename_C varchar(255)foreign key,
  M_Adv_structurename varchar(255)foreign key 'null',
  -- Advstructurename2 varchar(255)foreign key 'null',
  -- Advstructurename3 varchar(255)  foreign key,
  M_unitname varchar(255),
  M_unit_production_structural_req. varchar(255),
  M_unit_nonoffense_purpose varchar (255),
  M_unit_ability varchar (255),
  M_unit_cost_Min int,
  M_unit_cost_vespine_Gas int,
  M_unit_build_time varchar(255),
  M_unit_supply varchar(255),
  
  M_unit_armor_type varchar(255),
  
  M_unit_shields int,
  M_unit_shields_reg/sec int,
  M_unit_type varchar(255),
  M_unit_energy_max varchar(250) null,
  M_unit_armament varchar(255),
  M_unit_targets_ground varchar(255),
  M_unit_targets_air varchar(255),
  M_unit_role varchar(255),
  M_unit_damage int,
  M_unit_additionaldamage_vs_biological varchar(20), 
  M_unit_additionaldamage_vs_lightarmor varchar(20),
  M_unit_additionaldamage_vs_heavyarmor varchar(20)
);

insert into adv_mech_units

values (1, 'pylon','robotics_facility','Warp_prism', 'transport troops', 'no','phase mode', 250, 0,'36_seconds' ,2,'armored',100,2,'psionic', 'noenergy', 
        'unarmed','none','none','flying_transport',0, 'none','none','none');

values (2, 'pylon','robotics_facility','Observer', 'detect_CloakedorBurrowed_enemies','no', 'surveilence_mode'
        ,25,75,'18_seconds',1,'light',20,2,'mechanical', 'noenergy', 'unarmed','none',
        'none','flying_spy',0,'none','none','none');

values (3, 'pylon','robotics_facility','immortal','none', 'none','no',
        275,100,'39_seconds',4,'armored',100,2,'mechanical', 'no','phase_disruptors','yes','no','robotic assault strider',10, 'none','+5','none');
create table adv_structure_mechresearch

(
  id int primary key,
  E_structure_name varchar(50) foreign key,--pylon for energy field
  structurename_C varchar(255)foreign key 'null',
  M_Adv_structurename varchar(255)foreign key 'null',
  M_R_Adv_structurename varchar(255),
  --Adv_structure_requirement varchar(255) foreign key 'null',
  M_R_Adv_structure_cost_min int 'null',
  M_R_Adv_structure_cost_Vespine_gas int 'null',
  M_R_Adv_structure_purpose varchar(255) 'null',
  M_R_Adv_structure_purpose2 varchar(255)   
  M_R_Adv_structure_research1 varchar(255) ,
  M_R_Adv_structure_research1_unitaffected varchar(255) ,   
  M_R_Adv_structure_research2 varchar(255),
  M_R_Adv_structure_research2_unitaffected varchar(255),
  M_R_Adv_structure_research3 varchar(255),
  M_R_Adv_structure_research3_unitaffected varchar(255),
  worker_name varchar(50)foreign key 'null'
);
insert into adv_structure_mechresearch
values 
(1, 'Pylon','Cybernetics_core','Robotics_Facility', 'Robotics_bay',200,200,'unlock_Colossus','research_tech_upgrades','gravitic_booster','Observer');
values (2, 'null','null','null', 'null','null','null','null','research_tech_upgrades','Gravitic_drive','Warp_prism');
values (3, 'null','null','null', 'null','null','null','null','research_tech_upgrades','Extend_Thermal_Lances','Colossus','probe');
create table adv_mech_units_after_Mresearch
(id int primary key,
  E_structure_name varchar(50) foreign key, 
  --structurename_C varchar(255)foreign key,
  M_Adv_structurename varchar(255)foreign key 'null',
  M_R_Adv_structurename varchar(255)foreign key,
  -- Advstructurename2 varchar(255)foreign key 'null',
  -- Advstructurename3 varchar(255)  foreign key,
  M_adv_unitname varchar(255),
  M_adv_unit_nonoffense_purpose varchar (255),
  M_adv_unit_ability varchar (255),
  M_adv_unit_cost_Min int,
  M_adv_unit_cost_vespine_Gas int,
  M_adv_unit_build_time varchar(255),
  M_adv_unit_supply varchar(255),
  M_adv_unit_armor_type varchar(255),
  M_adv_unit_shields int,
  M_adv_unit_shields_reg/sec int,
  M_adv_unit_type varchar(255),
  M_adv_unit_energy_max varchar(250) null,
  M_adv_unit_armament varchar(255),
  M_adv_unit_targets_ground varchar(255),
  M_adv_unit_targets_air varchar(255),
  M_adv_unit_role varchar(255),
  M_adv_unit_damage int,
  M_adv_unit_additionaldamage_vs_biological varchar(20), 
  M_adv_unit_additionaldamage_vs_lightarmor varchar(20),
  M_adv_unit_additionaldamage_vs_heavyarmor varchar(20)
);
insert into adv_mech_units_after_Mresearch
values (1, 'pylon','robotics_facility', 'robotics_bay','Colossus','none','No'
        300,200,'54_seconds',6,'armored',150,2,'massive',
        'no','Thermal_lance','yes','no','robotic Siege strider',10,'none','+5','none'); 
values (2, 'pylon','robotics_facility', 'robotics_bay','Disruptor','none','Yes'
        150,150,'36_seconds',4,'armored',100,2,'light',
        'no','Nova','yes','no','energy_castor',145,'none','none','none'); 
create table advance_structure_Mech_air
(id int ,
  E_structure_name varchar(50) foreign key, --psionic matrix
  --structurename_G varchar(255) foreign key 'null',
  structurename_C varchar(255)foreign key 'null',
  --Adv_structurename varchar(255)foreign key 'null',
  M_Air_Advstructurename_ varchar(255)primary key 'null',
  M_Air_Adv_structure_cost_min int 'null',
  M_Air_Adv_structure_cost_Vespine_gas int 'null',
  M_Air_Advstructure_purpose varchar(255) 'null',
  --M_Advstructure_purpose2 varchar(255)
  --Advstructurename1_reseach_ability varchar(255) 'null',
  --Advstructurename1_research_ability varchar(255) 'null',
  --Advstructurename2_ varchar(255) 'null',
  --Adv_structure2_cost_min int 'null',
  --Adv_structure2_cost_Vespine_gas int 'null', 
  --Advstructurename2_purpose varchar(255) 'null',
  worker_name varchar(50)foreign key
);
insert into advance_structure_Mech_air
values (1, 'Pylon', 'Cybernetics_Core', 'Stargate', 150,150, 'produce mechanical air_units', 'probe');
create table adv_mech_air_units
(id int primary key,
  E_structure_name varchar(50) foreign key, --pylon for supply
  structurename_C varchar(255)foreign key,
  M_Air_Advstructurename_ varchar(255)foreign key 'null',
  -- Advstructurename2 varchar(255)foreign key 'null',
  -- Advstructurename3 varchar(255)  foreign key,
  M_Air_unitname varchar(255),
  M_Air_unit_production_structural_req. varchar(255),
  M_Air_unit_nonoffense_purpose varchar (255),
  M_Air_unit_ability varchar (255) 'null',
  M_Air_unit_ability2 varchar (255) 'null',
  
  M_Air_unit_ability_purpose varchar (255) 'null',
  M_Air_unit_ability_purpose2 varchar (255) 'null',
  M_Air_unit_ability_purpose3 varchar (255) 'null',
  
  
  M_Air_unit_ability_requirement varchar (255) 'null',
  M_Air_unit_cost_Min int,
  M_Air_unit_cost_vespine_Gas int,
  M_Air_unit_warp_in_time varchar(255),
  M_Air_unit_supply varchar(255),
  M_Air_unit_armor_type varchar(255),
  
  M_Air_unit_shields int,
  M_Air_unit_armor int,
  M_Air_unit_speed int,
  M_Air_unit_energy_cooldown int,
  M_Air_unit_type varchar(255),
  M_Air_unit_energy_max varchar(250) null,
  M_Air_unit_armament varchar(255),
  M_Air_unit_targets_ground varchar(255),
  M_Air_unit_targets_air varchar(255),
  M_Air_unit_role varchar(255),
  M_Air_unit_damage int,
  M_Air_unit_damage_per_sec int,
  M_Air_unit_additionaldamage_vs_biological_air_or_ground varchar(20), 
  M_Air_unit_additionaldamage_vs_lightarmor_air_or_ground varchar(20),
  M_Air_unit_additionaldamage_vs_heavyarmor_air_or_ground varchar(20)
);
insert into adv_mech_air_units

values (1, 'pylon','cybernetics_core','Stargate','Pheonix', 'no', 'no'
        'Graviton_beam','Anion_Pulse-Crystals','lifts light ground units into air','increase range of weapons by 2','null',
        'research require Fleet Beacon',
        150,100,'25_seconds',2,'Air Unit',60,120,5.95,.79,'Mechanical_Air', 'no', 
        'ion cannon','no','yes','airtoair',12.7,'none','plus_5_lightly_armored_air','none');


values (2, 'pylon','cybernetics_core','Stargate','Void Ray', 'no', 'no','Prismatic Alignment',
        'Flux Vanes','boost damage ouput to armored units', 'increase_movement_speed', 'null', 
        'fleet beacon',
        ,250,150,43,4,'Large Air Unit',100,150,3.85,42.9,'Mechanical_air', 'no', 'armed','none',
        'prismatic beam','yes','yes','surgical strike',6, 16.8, 'none','none','plus_4');
create table adv_air_structure_mechresearch

(
  id int primary key,
  E_structure_name varchar(50) foreign key,--pylon for energy field
  structurename_C varchar(255)foreign key 'null',
  M_Air_Advstructurename_ varchar(255)foreign key 'null',
  M_air_R_Adv_structurename varchar(255),
  --Adv_structure_requirement varchar(255) foreign key 'null',
  M_air_R_Adv_structure_cost_min int 'null',
  M_air_R_Adv_structure_cost_Vespine_gas int 'null',
  M_air_R_Adv_structure_purpose varchar(255) 'null',
  M_air_R_Adv_structure_purpose2 varchar(255) ,
  M_air_R_Adv_structure_purpose3 varchar(255), 
  M_air_R_Adv_structure_research1 varchar(255) ,
  M_air_R_Adv_structure_research1_cost_minerals int ,
  M_air_R_Adv_structure_research1_cost_gas int ,
  M_air_R_Adv_structure_research1_time varchar(255) ,
  
  M_air_R_Adv_structure_research1_unitaffected varchar(255) ,   
  M_air_R_Adv_structure_research2 varchar(255),
  M_air_R_Adv_structure_research2_cost_minerals int ,
  M_air_R_Adv_structure_research2_cost_gas int ,
  M_air_R_Adv_structure_research2_time varchar(255) ,
  M_air_R_Adv_structure_research2_unitaffected varchar(255),
  M_air_R_Adv_structure_research3 varchar(255),
  M_air_R_Adv_structure_research3_cost_minerals int ,
  M_air_R_Adv_structure_research3_cost_gas int ,
  M_air_R_Adv_structure_research3_time varchar(255) ,
  M_air_R_Adv_structure_research3_unitaffected varchar(255),
  worker_name varchar(50)foreign key 'null'
);
insert into adv_structure_mechresearch
values 
(1, 'Pylon','Cybernetics_core','Stargate', 'Fleet Beacon',300,200,'unlock_Carrier','unlock_Tempest','unlock_Mothership','research_Anion Pulse-Crystals',150, 150, '64_seconds',  'Pheonix');
(2,  'null',       'null',     'null',      'null',     'null','null','null', 'research Flux Vanes', 100,100, '57_seconds',
 'Void Ray',);
(3,  'null',       'null',     'null',      'null',     'null','null','null', 'research Techtonic Destabilizers',150, 150,'100_seconds','Tempest','probe');
create table adv_mech_air_Capital_ships
(id int primary key,
  E_structure_name varchar(50) foreign key, --pylon for supply
  structurename_C varchar(255)foreign key,
  M_Air_Advstructurename_ varchar(255)foreign key 'null',
  Advstructurename2 varchar(255)foreign key 'null',
  Advstructurename3 varchar(255)     foreign key,
  M_Air_unitname varchar(255),
  M_Air_unit_production_structural_req. varchar(255),
  M_Air_unit_nonoffense_purpose varchar (255),
  M_Air_unit_ability varchar (255) 'null',
  M_Air_unit_ability2 varchar (255) 'null',
  
  M_Air_unit_ability_purpose varchar (255) 'null',
  M_Air_unit_ability_purpose2 varchar (255) 'null',
  M_Air_unit_ability_purpose3 varchar (255) 'null',
  
  
  M_Air_unit_ability_requirement varchar (255) 'null',
  M_Air_unit_cost_Min int,
  M_Air_unit_cost_vespine_Gas int,
  M_Air_unit_warp_in_time varchar(255),
  M_Air_unit_supply varchar(255),
  M_Air_unit_armor_type varchar(255),
  
  M_Air_unit_shields int,
  M_Air_unit_armor int,
  M_Air_unit_speed int,
  M_Air_unit_energy_cooldown int,
  M_Air_unit_type varchar(255),
  M_Air_unit_energy_max varchar(250) null,
  M_Air_unit_armament varchar(255),
  M_Air_unit_targets_ground varchar(255),
  M_Air_unit_targets_air varchar(255),
  M_Air_unit_role varchar(255),
  M_Air_unit_damage int,
  M_Air_unit_damage_per_sec int,
  M_Air_unit_additionaldamage_vs_biological_air_or_ground varchar(20), 
  M_Air_unit_additionaldamage_vs_lightarmor_air_or_ground varchar(20),
  M_Air_unit_additionaldamage_vs_heavyarmor_air_or_ground varchar(20)
);

insert into adv_mech_air_Capital_ships

values (1, 'pylon','cybernetics_core','Stargate','fleet beacon', 'Carrier', 'no', 'no'
        'null','null','null','null','null',
        'null',
        150,100,'25_seconds',2,'Air Unit',60,120,5.95,.79,'Mechanical_Air', 'no', 
        'interceptors','yes','yes','capitalship',12.7,'none','plus_5_lightly_armored_air','none');


values (2, 'pylon','cybernetics_core','Stargate','fleet beacon','Tempest', 'no', 'no','no',
        'Techtonic Destabilizers','null', 'null', 'null', 
        ,250,175,43,5,'capitalship',100,150,3.85,42.9,'Mechanical_air', 'no', 'armed','none',
        ' ','yes','no','siege',40 , 16.97 , 'none','none','plus_4');
LS0tDQp0aXRsZTogIlNRTCBQcm9qZWN0IHVzaW5nIFN0YXJjcmFmdCB0byBjcmVhdGUgc2ltcGxlIGRhdGFiYXNlIg0Kb3V0cHV0OiBodG1sX25vdGVib29rDQphdXRob3I6IEhhcnJpc29uDQotLS0NCg0KDQoNCkhlcmUgSSBjcmVhdGVkIGEgc2ltcGxlIGRhdGFiYXNlIGJhc2VkIG9uIHRoZSBQcm90b3NzIGZhY3Rpb24gZnJvbSB0aGUgUEMgZ2FtZSBTdGFyY3JhZnQuDQpBbHRob3VnaCwgdGhlIGxheSBvdXQgbWF5IG5vdCBiZSBwZXJmZWN0LCBJIGJlbGlldmUgaXQgd29ya3MgYW5kIGlzIGZ1bmN0aW9uYWwNCg0KYGBge3J9DQpjcmVhdGUgdGFibGUgcmVzb3VyY2VfaGFydmVzdA0KKA0KICBpZCBpbnQsDQogIHN0cnVjdHVyZTFfbmFtZSB2YXJjaGFyKDI1NSlwcmltYXJ5IGtleSdudWxsJywNCiAgc3RydWN0dXJlMV9wdXJwb3NlMSB2YXJjaGFyKDI1NSknbnVsbCcsDQogIHN0cnVjdHVyZTFfcHVycG9zZTIgdmFyY2hhcigyNTUpJ251bGwnLA0KICBzdHJ1Y3R1cmUxX3B1cnBvc2UzIHZhcmNoYXIoMjU1KSdudWxsJywNCiAgc3RydWN0dXJlMV9wdXJwb3NlNCB2YXJjaGFyKDI1NSknbnVsbCcsCQ0KICBzdHJ1Y3R1cmUxX3BzaV9zdXBwbGllZCBpbnQJDQogIHN0cnVjdHVyZTFfYWJpbGl0eSB2YXJjaGFyKDI1NSkgJ251bGwnLA0KICBzdHJ1Y3R1cmUyX25hbWUgdmFyY2hhcigyNTUpLA0KICBzdHJ1Y3R1cmUyX3B1cnBvc2UgdmFyY2hhcigyNTUpDQogIHN0cnVjdHVyZV9jb3N0X21pbiBpbnQsCQ0KKTsNCmBgYA0KDQoNCmBgYHtyfQ0KaW5zZXJ0IGludG8gcmVzb3VyY2VfaGFydmVzdCANCnZhbHVlcyAoMSwgJ05leHVzJywgJ0NvbGxlY3RzIFJlc291cmNlcycsICdXYXJwX2luIHdvcmtlcnMnLCAncHJvZHVjZSBwc2knLCAnV2FycF9pbiBNb3RoZXJzaGlwJywgMTAgLCdDaHJvbm9fYm9vc3QnLCA0MDApOw0KdmFsdWVzICgyLCAnbnVsbCcsICdudWxsJywgJ251bGwnLCAnbnVsbCcsICdudWxsJywnbnVsbCcsICdudWxsJyAsICdBc3NpbWlsYXRvcicsICdyZWZpbmVzIFZhc3BlbmUgZ2FzJywgNzUpOw0KDQoNCmBgYA0KDQoNCmBgYHtyfQ0KY3JlYXRlIHRhYmxlIGJhc2VfYl91DQooDQogIGlkIGludA0KICBzdHJ1Y3R1cmUxX25hbWUgdmFyY2hhcigyNTUpIGZvcmVpZ24ga2V5LCANCiAgd29ya2VyX25hbWUgdmFyY2hhcig1MCkgcHJpbWFyeSBrZXksDQogIHdvcmtlcl9jb3N0X21pbiBpbnQsDQogIHdvcmtlcl9wdXJwb3NlMSB2YXJjaGFyKDI1NSksDQogICAgd29ya2VyX3B1cnBvc2UyIHZhcmNoYXIoMjU1KSwNCg0KICB3b3JrZXJfcHVycG9zZTMgdmFyY2hhcigyNTUpCQ0KKTsNCmBgYA0KDQoNCmBgYHtyfQ0KaW5zZXJ0IGludG8gYmFzZV9iX3UgDQp2YWx1ZXMgKDEsICdOZXh1cycsICdQcm9iZScsIDUwLCAnaGFydmVzdCBtaW5lcmFscycsJ2hhcnZlc3QgZ2FzJywgJ1dhcnAgaW4gU3RydWN0dXJlcycpOw0KDQoNCmBgYA0KDQoNCmBgYHtyfQ0KY3JlYXRlIHRhYmxlIGVzc2VudGlhbF9zdHJ1Y3R1cmUNCigNCiAgaWQgaW50LA0KICBFX3N0cnVjdHVyZV9uYW1lIHZhcmNoYXIoNTApIFByaW1hcnkga2V5LA0KICBFX3N0cnVjdHVyZV9uYW1lX2Nvc3RfbWluIGludCwJDQogIEVfc3RydWN0dXJlX3B1cnBvc2UgdmFyY2hhcigyNTUpLA0KICBFX3N0cnVjdHVyZV9wdXJwb3NlMiB2YXJjaGFyKDI1NSkNCiAgRV9zdHJ1Y3R1cmVfYW1vdW50X3BzaV9zdXBwbGllZAlpbnQsDQogIHdvcmtlcl9uYW1lIHZhcmNoYXIoNTApIGZvcmVpZ24ga2V5DQopDQpgYGANCg0KDQpgYGB7cn0NCmluc2VydCBpbnRvIGVzc2VudGlhbF9zdHJ1Y3R1cmUNCnZhbHVlcyAoMSwgJ1B5bG9uJywgMTAwLCdQcm9qZWN0X3BzaW9uaWNfbWF0cml4JywgJ251bGwnLCdudWxsJywgJ3Byb2JlJykNCnZhbHVlcyAoMiwgJ251bGwnLCAnbnVsbCcsICdudWxsJywncHJvdmlkZV9wc2knLCA5LCAncHJvYmUnKTsgDQoNCg0KYGBgDQoNCg0KYGBge3J9DQpjcmVhdGUgdGFibGUgR19zdHJ1Y3R1cmVfYnVpbGQNCigNCiAgaWQgaW50LA0KICB3b3JrZXJfbmFtZSB2YXJjaGFyKDUwKWZvcmVpZ24ga2V5LA0KICBFX3N0cnVjdHVyZV9uYW1lIHZhcmNoYXIoNTApIGZvcmVpZ24ga2V5LC0tcHlsb24gZm9yIGVuZXJneSBmaWVsZCB0byBidWlsZA0KICBzdHJ1Y3R1cmVuYW1lX0cgdmFyY2hhcigyNTUpIHByaW1hcnkga2V5LA0KICBzdHJ1Y3R1cmVuYW1lX0dfcHVycG9zZSB2YXJjaGFyKDI1NSksDQogIHN0cnVjdHVyZV9jb3N0X21pbiBpbnQNCik7DQpgYGANCg0KDQpgYGB7cn0NCmluc2VydCBpbnRvIEdfc3RydWN0dXJlX2J1aWxkDQp2YWx1ZXMgKDEsICdQcm9iZScsICdweWxvbicsJ0dhdGV3YXknLCAnd2FycCBpbiB0cm9vcHMnLCAxNTApOyANCg0KDQpgYGANCg0KDQpgYGB7cn0NCmNyZWF0ZSB0YWJsZSBHX3Ryb29wcw0KKGlkIGludCBwcmltYXJ5IGtleSwNCiAgRV9zdHJ1Y3R1cmVfbmFtZSB2YXJjaGFyKDUwKSBmb3JlaWduIGtleSwgLS0gcHlsb24gZm9yIHBzaS9zdXBwbHkgaW5jcmVhc2UgbGltaXQgb24gdW5pdCBidWlsZA0KICBzdHJ1Y3R1cmVuYW1lX0cgdmFyY2hhcigyNTUpIGZvcmVpZ24ga2V5LA0KICB0cm9vcF91bml0bmFtZSB2YXJjaGFyKDI1NSksDQogIHVuaXRfY29zdF9NIGludCwNCiAgdW5pdF9jb3N0X0cgaW50LA0KICB1bml0X3N1cHBseSB2YXJjaGFyKDI1NSksDQogIHVuaXRfYXJtb3JfdHlwZSB2YXJjaGFyKDI1NSksDQogIHVuaXRfc2hpZWxkcyBpbnQsDQogIHVuaXRfc2hpZWxkc19yZWcvc2VjIGludCwNCiAgdW5pdF90eXBlIHZhcmNoYXIoMjU1KSwNCiAgdW5pdF9lbmVyZ3lfbWF4IGludCAnbnVsbCcsDQogIHVuaXRfYXJtYW1lbnQgdmFyY2hhcigyNTUpLA0KICB1bml0X3RhcmdldHNfYSB2YXJjaGFyKDI1NSksDQogIHVuaXRfdGFyZ2V0c19iIHZhcmNoYXIoMjU1KSwNCiAgdW5pdF9yb2xlIHZhcmNoYXIoMjU1KSwNCiAgdW5pdF9kYW1hZ2UgaW50LA0KICB1bml0X2V4dHJhZGFtYWdlX2FudGlhcm1vciB2YXJjaGFyKDIwKSwNCiAgdW5pdF9zdHJ1Y3R1cmVfcmVxdWlyZW1lbnQgdmFyY2hhcigyNTUpICwNCiAgdW5pdF9zdHJ1Y3R1cmVfcmVxdWlyZW1lbnRfbmFtZSB2YXJjaGFyKDI1NSkgJ251bGwnLA0KICB1bml0X3N0cnVjdHVyZV9yZXF1aXJlbWVudF9uYW1lMiB2YXJjaGFyKDI1NSkgJ251bGwnIA0KKTsNCmBgYA0KDQoNCmBgYHtyfQ0KaW5zZXJ0IGludG8gR190cm9vcHMNCnZhbHVlcyAoMSwncHlsb24nLCAnR2F0ZXdheScsICdaZWFsb3QnLCAxMDAsIDAsICcyX3BzaScsICdMaWdodCcsIDUwLCAyLCAnQmlvbG9naWNhbCcsICdudWxsJywgJ1BzaV9ibGFkZXMnLCAnR3JvdW5kJywgJ25vX2FudGlhaXInLCAnTm8nLCAnUG93ZXJfTWVsZWVfd2FycmlvcicsIDgsICdub19leHRyYScsICdObycsICdOdWxsJywnTnVsbCcpOw0KDQoNCg0KDQpgYGANCg0KDQpgYGB7cn0NCmNyZWF0ZSB0YWJsZSBHX3Jlc2VhcmNoX3N0cnVjdHVyZQ0KDQooDQogIGlkIGludCwNCiAgRV9zdHJ1Y3R1cmVfbmFtZSB2YXJjaGFyKDUwKSBmb3JlaWduIGtleSwtLXB5bG9uIGZvciBwc2lvbmljIG1hdHJpeCB0byB3YXJwIGluIHN0cnVjdHVyZQ0KICAtLXN0cnVjdHVyZW5hbWVfRyB2YXJjaGFyKDI1NSkgZm9yZWlnbiBrZXksCQ0KICBzdHJ1Y3R1cmVuYW1lX0YgdmFyY2hhcigyNTUpIHByaW1hcnkga2V5LA0KICBzdHJ1Y3R1cmVuYW1lX0ZfR1dfdXBncmFkZXMgdmFyY2hhcigyNTUpLA0KICBzdHJ1Y3R1cmVuYW1lX0ZfR0FybV91cGdyYWRlcyB2YXJjaGFyKDI1NSksDQogIHN0cnVjdHVyZW5hbWVfRl9Hcm91bmRhbmRBaXJfU2hpZWxkX3VwZ3JhZGVzIHZhcmNoYXIoMjU1KSwJDQogIC0tc3RydWN0dXJlbmFtZV9GdW5jdGlvbiB2YXJjaGFyKDI1NSkNCik7DQpgYGANCg0KDQpgYGB7cn0NCmluc2VydCBpbnRvIEdfcmVzZWFyY2hfc3RydWN0dXJlDQp2YWx1ZXMgKDEsICdHYXRld2F5JywgJ0ZvcmdlJywgJ3BsdXNfMSB0byBkYW1hZ2UnLCAncGx1c18xIHRvIGFybW9yJywgJ3BsdXNfMSB0byBzaGllbGRzJywgJ2FjY2VzcyBkZWZlbnNpdmUgc3RydWN0dXJlJyApOyANCnZhbHVlcyAoMiwgJ251bGwnLCAnbnVsbCcsICdwbHVzXzIgdG8gZGFtYWdlJywgJ3BsdXNfMiB0byBhcm1vcicsICdwbHVzXzIgdG8gc2hpZWxkcycsICdudWxsJyApOyANCnZhbHVlcyAoMywgJ251bGwnLCAnbnVsbCcsICdwbHVzXzMgdG8gZGFtYWdlJywgJ3BsdXNfMyB0byBhcm1vcicsICdwbHVzXzMgdG8gc2hpZWxkcycsICdudWxsJyApOyANCg0KLS0tLS0tLS0tLS0tDQpgYGANCg0KDQpgYGB7cn0NCmNyZWF0ZSB0YWJsZSBkZWZlbnNlX3N0cnVjdHVyZQ0KKA0KICBpZCBpbnQsDQogICAgRV9zdHJ1Y3R1cmVfbmFtZSB2YXJjaGFyKDUwKSBmb3JlaWduIGtleSwgDQogIHN0cnVjdHVyZW5hbWVfRiB2YXJjaGFyKDI1NSkgZm9yZWlnbiBrZXksDQogIC0tc3RydWN0dXJlbmFtZV9HIHZhcmNoYXIoMjU1KWZvcmVpZ24ga2V5LA0KICAgIHN0cnVjdHVyZV9uYW1lUF9DIHZhcmNoYXIoMjU1KSBwcmltYXJ5IGtleSwNCg0KICB3b3JrZXJfbmFtZSB2YXJjaGFyKDUwKWZvcmVpZ24ga2V5DQopOw0KYGBgDQoNCg0KYGBge3J9DQppbnNlcnQgaW50byBkZWZlbnNlX3N0cnVjdHVyZQ0KdmFsdWVzICgxLCdweWxvbicsJ0dhdGV3YXknLCdGb3JnZScsJ3Bob3Rvbl9jYW5ub24nLCAncHJvYmUnKTsgDQoNCi0tLS0tLS0tLS0tLQ0KYGBgDQoNCg0KYGBge3J9DQpjcmVhdGUgdGFibGUgcmVxX0NDc3RydWN0dXJlDQoNCigNCiAgaWQgaW50LA0KICBFX3N0cnVjdHVyZV9uYW1lIHZhcmNoYXIoNTApIGZvcmVpZ24ga2V5LCAtLSBweWxvbiBlbmVyZ3kgZmllbGQgdG8gd2FycCBpbiBzdHJ1Y3R1cmUNCiAgc3RydWN0dXJlbmFtZV9HIHZhcmNoYXIoMjU1KWZvcmVpZ24ga2V5LA0KICBzdHJ1Y3R1cmVuYW1lX0MgdmFyY2hhcigyNTUpIHByaW1hcnkga2V5LA0KICBzdHJ1Y3R1cmVuYW1lX0NfR0d1bml0YWNjZXNzIHZhcmNoYXIoMjU1KSwNCiAgc3RydWN0dXJlX0NfUmVzZWFyY2hfQWlyX1dfdXBncmFkZXMgdmFyY2hhcigyNTUpLA0KICBzdHJ1Y3R1cmVfQ19SZXNlYXJjaF9BaXJfQXJtb3JfdXBncmFkZXMgdmFyY2hhcigyNTUpLA0KICBzdHJ1Y3R1cmVfQ19SZXNlYWNoX1N0cnVjdF9HX2FiaWxpdHkgdmFyY2hhciAoMjU1KSwNCiAgc3RydWN0dXJlX0Nfc3RydWN0dXJhbF9yZXF1aXJlbWVudF9mb3JfYWRkaXRpb25hbF91cGdyYWRlcyB2YXJjaGFyICgyNTUpJ251bGwnLA0KICB3b3JrZXJfbmFtZSB2YXJjaGFyKDUwKWZvcmVpZ24ga2V5DQopOw0KYGBgDQoNCg0KYGBge3J9DQppbnNlcnQgaW50byByZXFfQ0NzdHJ1Y3R1cmUNCnZhbHVlcyAoMSwgJ3B5bG9uJywnR2F0ZXdheScsICdDeWJlcm5ldGljc19jb3JlJywgJ3Byb2R1Y2UgbmV3IGd3X3VuaXRzJywncGx1c18xIHRvIGFpciB3ZWFwb25zJywgJ3BsdXNfMSB0byBhaXIgYXJtb3InLCdXYXJwZ2F0ZScsJ251bGwnLCdwcm9iZScgKTsgDQp2YWx1ZXMgKDIsICdudWxsJywgJ251bGwnLCAnbnVsbCcsJ251bGwnLCAncGx1c18yIHRvIGRhbWFnZScsICdwbHVzXzIgdG8gYXJtb3InLCAnbnVsbCcsJ0ZsZWV0YmVhY29uJywnbnVsbCcgKTsgDQp2YWx1ZXMgKDMsICdudWxsJywgJ251bGwnLCAnbnVsbCcsJ251bGwnLCAncGx1c18zIHRvIGRhbWFnZScsICdwbHVzXzMgdG8gYXJtb3InLCAnbnVsbCcsJ0ZsZWV0YmVhY29uJywnbnVsbCcpOyANCg0KDQoNCmBgYA0KDQoNCmBgYHtyfQ0KY3JlYXRlIHRhYmxlIEdfdHJvb3BzX2FmdGVyX0N5Yl9DDQooaWQgaW50IHByaW1hcnksDQogIEVfc3RydWN0dXJlX25hbWUgdmFyY2hhcig1MCkgZm9yZWlnbiBrZXksLS0gcHlsb24gbmVlZCB0byBpbmNyZWFzZSBzdXBwbHkvbGFyZ2VyIGFybXkNCiAgc3RydWN0dXJlbmFtZV9HIHZhcmNoYXIoMjU1KSBmb3JlaWduIGtleSwNCiAgc3RydWN0dXJlbmFtZV9DIHZhcmNoYXIoMjU1KWZvcmVpZ24ga2V5LA0KICBnX3VuaXRuYW1lIHZhcmNoYXIoMjU1KSwNCiAgdW5pdF9jb3N0X00gaW50LA0KICB1bml0X2Nvc3RfRyBpbnQsDQogIHVuaXRfc3VwcGx5IHZhcmNoYXIoMjU1KSwNCiAgdW5pdF9hcm1vcl90eXBlIHZhcmNoYXIoMjU1KSwNCiAgdW5pdF9zaGllbGRzIGludCwNCiAgdW5pdF9zaGllbGRzX3JlZy9zZWMgaW50LA0KICB1bml0X3R5cGUgdmFyY2hhcigyNTUpLA0KICB1bml0X2VuZXJneV9tYXggaW50IG51bGwsDQogIHVuaXRfYXJtYW1lbnQgdmFyY2hhcigyNTUpLA0KICB1bml0X3RhcmdldHNfYSB2YXJjaGFyKDI1NSksDQogIHVuaXRfdGFyZ2V0c19iIHZhcmNoYXIoMjU1KSwNCiAgdW5pdF9yb2xlIHZhcmNoYXIoMjU1KSwNCiAgdW5pdF9kYW1hZ2UgaW50LA0KICB1bml0X2FkZGl0aW9uYWxkYW1hZ2VfdnNfbGlnaHRhcm1vciB2YXJjaGFyKDIwKSwNCiAgdW5pdF9hZGRpdGlvbmFsZGFtYWdlX3ZzX2hlYXZ5YXJtb3IgdmFyY2hhcigyMCksDQogIHVuaXRfc3RydWN0dXJlX3JlcXVpcmVtZW50IHZhcmNoYXIoMjU1KSwgDQogIHVuaXRfc3RydWN0dXJlX3JlcXVpcmVtZW50X25hbWUgdmFyY2hhcigyNTUpIG51bGwsDQogIHVuaXRfc3RydWN0dXJlX3JlcXVpcmVtZW50X25hbWUyIHZhcmNoYXIoMjU1KSBudWxsIA0KKTsNCmBgYA0KDQoNCmBgYHtyfQ0KaW5zZXJ0IGludG8gR190cm9vcHNfYWZ0ZXJfQ3liX0MNCnZhbHVlcyAoMSwgJ3B5bG9uJywgJ0dhdGV3YXknLCAgJ0N5YmVybmV0aWNzX2NvcmUnLCdTdGFsa2VyJywgMTI1LCA1MCwgJzJfcHNpJywgJ0FybW9yZWQnLCA4MCwgMiwgJ01lY2hhbmljYWwnLCAnbnVsbCcsICdQYXJ0aWNsZV9kaXNydXB0b3JzJywgJ3llcycsICd5ZXMnLCdSYW5nZV9TdXBwb3J0X1N0cmlkZXInLCAxMywgJ25vIGFkZGl0b25hbCcsJ2FkZGl0aW9uYWxfNV9kYW1hZ2UnLCAnWWVzJywgJ0N5YmVybmV0aWNzX2NvcmUnLCAnbmVnYXRpdmUnKTsNCnZhbHVlcyAoMiwgJ0dhdGV3YXknLCAnQ3liZXJuZXRpY3NfY29yZScgLCdBZGVwdCcsIDEwMCwgMjUsICcyX3BzaScsICdMaWdodCcsIDcwLCAnbnVsbCcsICdwc2lvbmljJywgMCwgJ0dsYWl2ZSBjYW5ub24nLCAneWVzJywgJ3llcycsICdIYXJhc3NtZW50JywgMTAsICdhZGRpdGlvbmFsIDEyZGFtYWdlJywnbm9fZXh0cmEnLCAnWWVzJywgJ0N5YmVybmV0aWNzX2NvcmUnLCAnbmVnYXRpdmUnKTsNCnZhbHVlcyAoMywgJ0dhdGV3YXknLCAnQ3liZXJuZXRpY3NfY29yZScgLCdTZW50cnknLCA1MCwgMTAwLCAnMl9wc2knLCAnTGlnaHQnLCA0MCwgMiwgJ1BzaW9uaWMnLCAyMDAsICdEaXNydXB0aW9uX2JlYW0nLCAneWVzJywgJ3llcycsICdlbmVyZ3lfbWFuaXB1bGF0aW9uJywgNiwgJ25vIGFkZGl0aW9uYWwnLCdub19leHRyYScsICdZZXMnLCAnQ3liZXJuZXRpY3NfY29yZScsICduZWdhdGl2ZScpOw0KDQoNCi0tLS0tLS0tLS0tLS0tLQ0KYGBgDQoNCg0KYGBge3J9DQogY3JlYXRlIHRhYmxlIHNoaWVsZF9iYXR0ZXJ5DQooDQogIA0KICBpZCBpbnQsDQogIEVfc3RydWN0dXJlX25hbWUgdmFyY2hhcig1MCkgZm9yZWlnbiBrZXksIC0tIHB5bG9uIGVzc2VudGlhbCwgaWYgc3Vycm91bmRpbmcgcHlsb24gZGVzdHJveWVkIGNhbm5vbnMgYmVjb21lIGluYWN0aXZlDQogIHN0cnVjdHVyZW5hbWVfQyB2YXJjaGFyKDI1NSlmb3JlaWduIGtleSwNCiAgc3RydWN0dXJlbmFtZV9HIHZhcmNoYXIoMjU1KSBmb3JlaWduIGtleSwNCiAgc3RydWN0dXJlX25hbWVTX0IgdmFyY2hhcigyNTUpcHJpbWFyeSBrZXksDQogIHN0cnVjdHVyZV9uYW1lU19CX21pbmVyYWxzIGludA0KICBzdHJ1Y3R1cmVfbmFtZVNfQl9nYXMgaW50DQogIHN0cnVjdHVyZV9wdXJwb3NlIHZhcmNoYXIoNTApDQogIHN0cnVjdHVyZV9uYW1lU19CX2VuZXJneSBpbnQNCiAgd29ya2VyX25hbWUgdmFyY2hhcig1MClmb3JlaWduIGtleQ0KKTsNCmBgYA0KDQoNCmBgYHtyfQ0KaW5zZXJ0IGludG8gc2hpZWxkX2JhdHRlcnkNCnZhbHVlcyAoMSwncHlsb24nLCdHYXRld2F5JywgJ0N5YmVybmV0aWNzX2NvcmUnLCdzaGllbGRfYmF0dGVyeScsIDEwMCwgMCwgJ3JlY2hhcmdlIHNoaWVsZHMnLDEwMCwgJ3Byb2JlJyk7IA0KDQoNCg0KYGBgDQoNCg0KYGBge3J9DQogY3JlYXRlIHRhYmxlIGFkdmFuY2Vfc3RydWN0dXJlc19HX3VuaXRfcmVzZWFyY2gNCigNCiAgaWQgaW50IHByaW1hcnkga2V5LA0KICBFX3N0cnVjdHVyZV9uYW1lIHZhcmNoYXIoNTApIGZvcmVpZ24ga2V5LC0tcHlsb24gZm9yIGVuZXJneSBmaWVsZA0KICBBZHZfc3RydWN0dXJlbmFtZSB2YXJjaGFyKDI1NSksDQogIHN0cnVjdHVyZW5hbWVfRyB2YXJjaGFyKDI1NSkgZm9yZWlnbiBrZXkgJ251bGwnLA0KICBzdHJ1Y3R1cmVuYW1lX0MgdmFyY2hhcigyNTUpZm9yZWlnbiBrZXkgJ251bGwnLA0KICAtLUFkdl9zdHJ1Y3R1cmVfcmVxdWlyZW1lbnQgdmFyY2hhcigyNTUpIGZvcmVpZ24ga2V5ICdudWxsJywNCiAgQWR2X3N0cnVjdHVyZV9jb3N0X21pbiBpbnQgJ251bGwnLA0KICBBZHZfc3RydWN0dXJlX2Nvc3RfVmVzcGluZV9nYXMgaW50ICdudWxsJywNCiAgQWR2X3N0cnVjdHVyZV9wdXJwb3NlIHZhcmNoYXIoMjU1KSAnbnVsbCcsCQ0KICBBZHZfc3RydWN0dXJlX3Jlc2VhcmNoMSB2YXJjaGFyKDI1NSkgLA0KICBBZHZfc3RydWN0dXJlX3Jlc2VhcmNoMV91bml0YWZmZWN0ZWQgdmFyY2hhcigyNTUpICwJDQogIEFkdl9zdHJ1Y3R1cmVfcmVzZWFyY2gyIHZhcmNoYXIoMjU1KSwNCiAgQWR2X3N0cnVjdHVyZV9yZXNlYXJjaDJfdW5pdGFmZmVjdGVkIHZhcmNoYXIoMjU1KSwNCiAgd29ya2VyX25hbWUgdmFyY2hhcig1MClmb3JlaWduIGtleSAnbnVsbCcNCik7DQpgYGANCg0KDQpgYGB7cn0NCmluc2VydCBpbnRvIGFkdmFuY2Vfc3RydWN0dXJlc19HX3VuaXRfcmVzZWFyY2gNCnZhbHVlcyAoMSwgJ3B5bG9uICcsJ1R3aWxpZ2h0X0NvdW5jaWwnLCAnR2F0ZXdheScsICdDeWJlcm5ldGljc19Db3JlJywgMTUwLCAxNTAsICdyZXNlYXJjaF9uZXdfYWJpbGl0aWVzJywgJ0NoYXJnZV9hYmlsaXR5JywnWmVhbG90JywgJ251bGwnLCAnbnVsbCcsJ3Byb2JlJyk7DQp2YWx1ZXMgKDIsJ251bGwnLCAnVHdpbGlnaHRfQ291bmNpbCcsICdHYXRld2F5JywgJ0N5YmVybmV0aWNzX0NvcmUnLCAxNTAsIDE1MCwgJ3Jlc2VhcmNoX25ld19hYmlsaXRpZXMnLCAnQmxpbmtfYWJpbGl0eScsJ1N0YWxrZXInLCAnbnVsbCcsICdudWxsJywnbnVsbCcpOw0KYGBgDQoNCg0KYGBge3J9DQpjcmVhdGUgdGFibGUgR191bml0c19hZHZhbmNlX3N0cnVjdHVyZXMNCigNCiAgaWQgaW50IHByaW1hcnkga2V5LA0KICAtLXN0cnVjdHVyZW5hbWVfRyB2YXJjaGFyKDI1NSkgZm9yZWlnbiBrZXkgJ251bGwnLCBnYXRld2F5IG5vdCBxdWl0ZSBlc3NlbnRpYWwgdW5sZXNzIChhZHZhbmNlIHN0cnVjdHVyZSBkZXN0cm95ZWQsIGN5YmVybmV0aWNzIGNvcmUgZGVzdHJveWVkLCBhd2EgZ2F0ZXdheSBkZXN0cm95ZWQgKSBhcyBjeWJlcm5ldGljcyBjb3JlIGluIG9yZGVyIHRvIGJlIHJlYnVpbHQgd2lsbCByZXF1aXJlIGEgbmV3IGdhdGV3YXkgDQogIHN0cnVjdHVyZW5hbWVfQyB2YXJjaGFyKDI1NSlmb3JlaWduIGtleSAnbnVsbCcsCQ0KICBFX3N0cnVjdHVyZV9uYW1lIHZhcmNoYXIoNTApIGZvcmVpZ24ga2V5LCAtLW5ldyBvciBleGlzdGluZyBweWxvbiBlbmVyZ3kgZmllbGQgdG8gYnVpbGQNCiAgQWR2X3N0cnVjdHVyZW5hbWUgdmFyY2hhcigyNTUpZm9yZWlnbiBrZXkgJ251bGwnLA0KICANCiAgQWR2c3RydWN0dXJlbmFtZTJfIHZhcmNoYXIoMjU1KWZvcmVpZ24ga2V5ICdudWxsJywNCiAgQWR2X3N0cnVjdHVyZTJfY29zdF9taW4gaW50ICdudWxsJywNCiAgQWR2X3N0cnVjdHVyZTJfY29zdF9WZXNwaW5lX2dhcyBpbnQgJ251bGwnLA0KICBBZHZzdHJ1Y3R1cmUyX3B1cnBvc2UgdmFyY2hhcigyNTUpICdudWxsJywNCiAgQWR2c3RydWN0dXJlMl9yZXNlYWNoX2FiaWxpdHkgdmFyY2hhcigyNTUpICdudWxsJywNCiAgQWR2c3RydWN0dXJlMl9yZXNlYXJjaF9hYmlsaXR5IHZhcmNoYXIoMjU1KSAnbnVsbCcsDQogIEFkdnN0cnVjdHVyZW5hbWUzXyB2YXJjaGFyKDI1NSkJJ251bGwnLA0KICBBZHZfc3RydWN0dXJlM19jb3N0X21pbiBpbnQgJ251bGwnLA0KICBBZHZfc3RydWN0dXJlM19jb3N0X1Zlc3BpbmVfZ2FzIGludCAnbnVsbCcsCQ0KICBBZHZzdHJ1Y3R1cmVuYW1lM19wdXJwb3NlIHZhcmNoYXIoMjU1KSAnbnVsbCcsDQogIHdvcmtlcl9uYW1lIHZhcmNoYXIoNTApZm9yZWlnbiBrZXkNCiAgLS1zdHJ1Y3R1cmVuYW1lX0NfZ3JhbnRhY2Nlc3N0b2FkdmFuY2V0ZWNoIHZhcmNoYXIoMjU1KSwNCik7DQpgYGANCg0KDQpgYGB7cn0NCmluc2VydCBpbnRvICBHX3VuaXRzX2FkdmFuY2Vfc3RydWN0dXJlcw0KdmFsdWVzICgxLCAncHlsb24nLCAnQ3liZXJuZXRpY3NfQ29yZScsICdUd2lsaWdodF9Db3VuY2lsJywgJ1RlbXBsYXJfQXJjaGl2ZXMnLCAxNTAsMjAwLCdlbmFibGUgcHJvZHVjdGlvbiBvZiBIaWdoX3RlbXBsYXInLCANCnZhbHVlcygyLCAnbnVsbCcsJ251bGwnLCdudWxsJywgJ251bGwnLCdudWxsJywnbnVsbCcsJ251bGwnLCdQc2lvbmljX3N0b3JtJywgJ0toYXlkYXJpbiBBbXVsZXRfaW5jcmVhc2VzX3N0YXJ0aW5nX2VuZXJneScsJ251bGwnLCdudWxsJywnbnVsbCcsJ251bGwnLCAnbnVsbCcpOw0KDQp2YWx1ZXMgKDMsICdudWxsJywnbnVsbCcsICdudWxsJywgJ251bGwnLCAnbnVsbCcsJ251bGwnLCdudWxsJywgJ251bGwnLCdudWxsJywnRGFya19TaHJpbmUnICwxNTAsIDI1MCwgJ2VuYWJsZSBwcm9kdWN0aW9uIG9mIERhcmtfdGVtcGxhcicsJ251bGwnKTsNCg0KDQoNCmBgYA0KDQoNCmBgYHtyfQ0KY3JlYXRlIHRhYmxlIEdfdHJvb3BzX2JleW9uZEN5Yl9DDQooaWQgaW50IHByaW1hcnkga2V5LA0KICBFX3N0cnVjdHVyZV9uYW1lIHZhcmNoYXIoNTApIGZvcmVpZ24ga2V5LCANCiAgc3RydWN0dXJlbmFtZV9HIHZhcmNoYXIoMjU1KSBmb3JlaWduIGtleSwNCiAgc3RydWN0dXJlbmFtZV9DIHZhcmNoYXIoMjU1KWZvcmVpZ24ga2V5LA0KICBBZHZfc3RydWN0dXJlbmFtZSB2YXJjaGFyKDI1NSlmb3JlaWduIGtleSAnbnVsbCcsDQogIEFkdnN0cnVjdHVyZW5hbWUyIHZhcmNoYXIoMjU1KWZvcmVpZ24ga2V5ICdudWxsJywNCiAgQWR2c3RydWN0dXJlbmFtZTMgdmFyY2hhcigyNTUpCSBmb3JlaWduIGtleSwNCiAgZ191bml0bmFtZSB2YXJjaGFyKDI1NSksDQogIHVuaXRfY29zdF9NaW4gaW50LA0KICB1bml0X2Nvc3RfdmVzcGluZV9HYXMgaW50LA0KICB1bml0X3N1cHBseSB2YXJjaGFyKDI1NSksDQogIHVuaXRfYXJtb3JfdHlwZSB2YXJjaGFyKDI1NSksDQogIHVuaXRfc2hpZWxkcyBpbnQsDQogIHVuaXRfc2hpZWxkc19yZWcvc2VjIGludCwNCiAgdW5pdF90eXBlIHZhcmNoYXIoMjU1KSwNCiAgdW5pdF9lbmVyZ3lfbWF4IGludCBudWxsLA0KICB1bml0X2FybWFtZW50IHZhcmNoYXIoMjU1KSwNCiAgdW5pdF90YXJnZXRzX2dyb3VuZCB2YXJjaGFyKDI1NSksDQogIHVuaXRfdGFyZ2V0c19haXIgdmFyY2hhcigyNTUpLA0KICB1bml0X3JvbGUgdmFyY2hhcigyNTUpLA0KICB1bml0X2FiaWxpdHkxIHZhcmNoYXIoMjU1KSwNCiAgdW5pdF9hYmlsaXR5MiB2YXJjaGFyKDI1NSksDQogIHVuaXRfYWJpbGl0eTMgdmFyY2hhcigyNTUpLA0KICANCiAgdW5pdF9kYW1hZ2UgaW50LA0KICB1bml0X2FkZGl0aW9uYWxkYW1hZ2VfdnNfYmlvbG9naWNhbCB2YXJjaGFyKDIwKSwgDQogIHVuaXRfYWRkaXRpb25hbGRhbWFnZV92c19saWdodGFybW9yIHZhcmNoYXIoMjApLA0KICB1bml0X2FkZGl0aW9uYWxkYW1hZ2VfdnNfaGVhdnlhcm1vciB2YXJjaGFyKDIwKSk7DQpgYGANCg0KDQpgYGB7cn0NCmluc2VydCBpbnRvIEdfdHJvb3BzX2JleW9uZEN5Yl9DDQp2YWx1ZXMgKDEsICdweWxvbicsJ0dhdGV3YXknLCAnQ3liZXJuZXRpY3NfQ29yZScsICdUd2lsaWdodF9Db3VuY2lsJyAsICAnVGVtcGxhcl9BcmNoaXZlcycsICdudWxsJywnSGlnaF9UZW1wbGFyJywgNTAsIDE1MCwgJzJfcHNpJywgJ0xpZ2h0JywgNDAsIDIsICdQc2lvbmljJywgMjAwLCAncHNpX2JsYXN0JywgJ3llcycsICdubycsICdQb3RlbnRfcHNpb25pY19tYXN0ZXInLCAnRmVlZGJhY2snLCdQc2lvbmljIHN0b3JtJywnQXJjaG9uIG1lcmdlJyw0LCAnTm9fZXh0cmEnLCAnTm9fZXh0cmEnLCAnWWVzJyk7IA0KDQp2YWx1ZXMgKDIsICdweWxvbicsJ0dhdGV3YXknLCAnQ3liZXJuZXRpY3NfQ29yZScsICdUd2lsaWdodF9Db3VuY2lsJyAsICdUZW1wbGFyX0FyY2hpdmVzJywgJ0RhcmtfU2hyaW5lJywgJ0RhcmtfVGVtcGxhcicsIDEyNSwgMTI1LCAnMl9wc2knLCAnTGlnaHQnLCA4MCwgMiwgJ1BzaW9uaWMnLCAyMDAsICdXYXJwX0JsYWRlJywgJ3llcycsICdubycsICdTdGVhbHRoX0hhcmFzc21lbnRfV2FycmlvcicsICdudWxsJywnbnVsbCcsJ0FyY2hvbiBtZXJnZScsNDUsICdOb19leHRyYScsICdZZXMnKTsNCmBgYA0KDQpgYGB7cn0NCmNyZWF0ZSB0YWJsZSBNYXNzaXZlX3VuaXQNCigNCiAgaWQgaW50IHByaW1hcnkga2V5LA0KICAgIHN0cnVjdHVyZW5hbWVfRyB2YXJjaGFyKDI1NSkgZm9yZWlnbiBrZXksDQogIHN0cnVjdHVyZW5hbWVfQyB2YXJjaGFyKDI1NSlmb3JlaWduIGtleSwNCiAgQWR2X3N0cnVjdHVyZW5hbWUgdmFyY2hhcigyNTUpZm9yZWlnbiBrZXkgJ251bGwnLA0KICBBZHZzdHJ1Y3R1cmVuYW1lMiB2YXJjaGFyKDI1NSlmb3JlaWduIGtleSAnbnVsbCcsDQogIEFkdnN0cnVjdHVyZW5hbWUzIHZhcmNoYXIoMjU1KQkgZm9yZWlnbiBrZXksDQogIE1fdW5pdF9uYW1lIHZhcmNoYXIgKDEwMCksDQogIHVuaXRfc3VwcGx5IHZhcmNoYXIoMjU1KSdudWxsJywNCiAgdW5pdF9vcmlnaW4gdmFyY2hhcigyNTUpICdudWxsJywNCiAgdW5pdF9zaGllbGRzIGludCAnbnVsbCcsDQogIHVuaXRfc2hpZWxkc19yZWcvc2VjIGludCAnbnVsbCcsDQogIHVuaXRfdHlwZSB2YXJjaGFyKDI1NSkgJ251bGwnLA0KICB1bml0X3R5cGUyIHZhcmNoYXIoMjU1KSdudWxsJywNCiAgdW5pdF9hcm1hbWVudCB2YXJjaGFyKDI1NSknbnVsbCcsDQogIHVuaXRfdGFyZ2V0c19ncm91bmQgdmFyY2hhcigyNTUpJ251bGwnLA0KICB1bml0X3RhcmdldHNfYWlyIHZhcmNoYXIoMjU1KSdudWxsJywNCiAgdW5pdF9yb2xlIHZhcmNoYXIoMjU1KSdudWxsJywNCiAgdW5pdF9kYW1hZ2UgaW50ICdudWxsJywNCiAgdW5pdF9hZGRpdGlvbmFsZGFtYWdlX3ZzX2Jpb2xvZ2ljYWwgdmFyY2hhcigyMCkgJ251bGwnLA0KICBnX3VuaXRuYW1lIHZhcmNoYXIoMjU1KSBmb3JlaWduIGtleSAnbnVsbCcNCik7DQpgYGANCg0KDQpgYGB7cn0NCmluc2VydCBpbnRvIG1hc3NpdmVfdW5pdA0KdmFsdWVzICgxLCAncHlsb24nLCdHYXRld2F5JywgJ0N5YmVybmV0aWNzY29yZScsJ1R3aWxpZ2h0X0NvdW5jaWwnICwgJ1RlbXBsYXJfQXJjaGl2ZXMnLCAnRGFya19TaHJpbmUnLCdBcmNob24nLCAnNF9wc2knLCAnbWVyZ2luZyBvZiAyIGhpZ2hfb3JfZGFya190ZW1wbGFyJywgMzUwLCAyLCAnTWFzc2l2ZScsJ1BzaW9uaWMnLCAnbnVsbCcsICdQc2lvbmljIHNob2Nrd2F2ZScsICd5ZXMnLCAneWVzJywnUG93ZXJmdWxfcHNpb25pY19hdHRhY2tlcicsIDI1LCAnKzEwJywgJ1llcycpOw0KYGBgDQoNCg0KYGBge3J9DQpjcmVhdGUgdGFibGUgYWR2YW5jZV9zdHJ1Y3R1cmVfTWVjaA0KKGlkIGludCAsDQogIEVfc3RydWN0dXJlX25hbWUgdmFyY2hhcig1MCkgZm9yZWlnbiBrZXksIA0KICAtLXN0cnVjdHVyZW5hbWVfRyB2YXJjaGFyKDI1NSkgZm9yZWlnbiBrZXkgJ251bGwnLA0KICBzdHJ1Y3R1cmVuYW1lX0MgdmFyY2hhcigyNTUpZm9yZWlnbiBrZXkgJ251bGwnLA0KICAtLUFkdl9zdHJ1Y3R1cmVuYW1lIHZhcmNoYXIoMjU1KWZvcmVpZ24ga2V5ICdudWxsJywNCiAgTV9BZHZzdHJ1Y3R1cmVuYW1lXyB2YXJjaGFyKDI1NSlwcmltYXJ5IGtleSAnbnVsbCcsDQogIE1fQWR2X3N0cnVjdHVyZV9jb3N0X21pbiBpbnQgJ251bGwnLA0KICBNX0Fkdl9zdHJ1Y3R1cmVfY29zdF9WZXNwaW5lX2dhcyBpbnQgJ251bGwnLA0KICBNX0FkdnN0cnVjdHVyZV9wdXJwb3NlIHZhcmNoYXIoMjU1KSAnbnVsbCcsDQogIC0tTV9BZHZzdHJ1Y3R1cmVfcHVycG9zZTIgdmFyY2hhcigyNTUpDQogIC0tQWR2c3RydWN0dXJlbmFtZTFfcmVzZWFjaF9hYmlsaXR5IHZhcmNoYXIoMjU1KSAnbnVsbCcsDQogIC0tQWR2c3RydWN0dXJlbmFtZTFfcmVzZWFyY2hfYWJpbGl0eSB2YXJjaGFyKDI1NSkgJ251bGwnLA0KICAtLUFkdnN0cnVjdHVyZW5hbWUyXyB2YXJjaGFyKDI1NSkJJ251bGwnLA0KICAtLUFkdl9zdHJ1Y3R1cmUyX2Nvc3RfbWluIGludCAnbnVsbCcsDQogIC0tQWR2X3N0cnVjdHVyZTJfY29zdF9WZXNwaW5lX2dhcyBpbnQgJ251bGwnLAkNCiAgLS1BZHZzdHJ1Y3R1cmVuYW1lMl9wdXJwb3NlIHZhcmNoYXIoMjU1KSAnbnVsbCcsDQogIHdvcmtlcl9uYW1lIHZhcmNoYXIoNTApZm9yZWlnbiBrZXkNCik7DQpgYGANCg0KDQpgYGB7cn0NCmluc2VydCBpbnRvIGFkdmFuY2Vfc3RydWN0dXJlX01lY2gNCnZhbHVlcyAoMSwgJ1B5bG9uJywgJ0N5YmVybmV0aWNzX0NvcmUnLCAnUm9ib3RpY3NfRmFjaWxpdHknLCAyMDAsMTAwLCAncHJvZHVjZSBtZWNoYW5pY2FsIHVuaXRzJywgJ3Byb2JlJyk7DQoNCg0KYGBgDQoNCg0KYGBge3J9DQpjcmVhdGUgdGFibGUgYWR2X21lY2hfdW5pdHMNCihpZCBpbnQgcHJpbWFyeSBrZXksDQogIEVfc3RydWN0dXJlX25hbWUgdmFyY2hhcig1MCkgZm9yZWlnbiBrZXksIA0KICBzdHJ1Y3R1cmVuYW1lX0MgdmFyY2hhcigyNTUpZm9yZWlnbiBrZXksDQogIE1fQWR2X3N0cnVjdHVyZW5hbWUgdmFyY2hhcigyNTUpZm9yZWlnbiBrZXkgJ251bGwnLA0KICAtLSBBZHZzdHJ1Y3R1cmVuYW1lMiB2YXJjaGFyKDI1NSlmb3JlaWduIGtleSAnbnVsbCcsDQogIC0tIEFkdnN0cnVjdHVyZW5hbWUzIHZhcmNoYXIoMjU1KQkgZm9yZWlnbiBrZXksDQogIE1fdW5pdG5hbWUgdmFyY2hhcigyNTUpLA0KICBNX3VuaXRfcHJvZHVjdGlvbl9zdHJ1Y3R1cmFsX3JlcS4gdmFyY2hhcigyNTUpLA0KICBNX3VuaXRfbm9ub2ZmZW5zZV9wdXJwb3NlIHZhcmNoYXIgKDI1NSksDQogIE1fdW5pdF9hYmlsaXR5IHZhcmNoYXIgKDI1NSksDQogIE1fdW5pdF9jb3N0X01pbiBpbnQsDQogIE1fdW5pdF9jb3N0X3Zlc3BpbmVfR2FzIGludCwNCiAgTV91bml0X2J1aWxkX3RpbWUgdmFyY2hhcigyNTUpLA0KICBNX3VuaXRfc3VwcGx5IHZhcmNoYXIoMjU1KSwNCiAgDQogIE1fdW5pdF9hcm1vcl90eXBlIHZhcmNoYXIoMjU1KSwNCiAgDQogIE1fdW5pdF9zaGllbGRzIGludCwNCiAgTV91bml0X3NoaWVsZHNfcmVnL3NlYyBpbnQsDQogIE1fdW5pdF90eXBlIHZhcmNoYXIoMjU1KSwNCiAgTV91bml0X2VuZXJneV9tYXggdmFyY2hhcigyNTApIG51bGwsDQogIE1fdW5pdF9hcm1hbWVudCB2YXJjaGFyKDI1NSksDQogIE1fdW5pdF90YXJnZXRzX2dyb3VuZCB2YXJjaGFyKDI1NSksDQogIE1fdW5pdF90YXJnZXRzX2FpciB2YXJjaGFyKDI1NSksDQogIE1fdW5pdF9yb2xlIHZhcmNoYXIoMjU1KSwNCiAgTV91bml0X2RhbWFnZSBpbnQsDQogIE1fdW5pdF9hZGRpdGlvbmFsZGFtYWdlX3ZzX2Jpb2xvZ2ljYWwgdmFyY2hhcigyMCksIA0KICBNX3VuaXRfYWRkaXRpb25hbGRhbWFnZV92c19saWdodGFybW9yIHZhcmNoYXIoMjApLA0KICBNX3VuaXRfYWRkaXRpb25hbGRhbWFnZV92c19oZWF2eWFybW9yIHZhcmNoYXIoMjApDQopOw0KYGBgDQoNCg0KYGBge3J9DQoNCmluc2VydCBpbnRvIGFkdl9tZWNoX3VuaXRzDQoNCnZhbHVlcyAoMSwgJ3B5bG9uJywncm9ib3RpY3NfZmFjaWxpdHknLCdXYXJwX3ByaXNtJywgJ3RyYW5zcG9ydCB0cm9vcHMnLCAnbm8nLCdwaGFzZSBtb2RlJywgMjUwLCAwLCczNl9zZWNvbmRzJyAsMiwnYXJtb3JlZCcsMTAwLDIsJ3BzaW9uaWMnLCAnbm9lbmVyZ3knLCANCiAgICAgICAgJ3VuYXJtZWQnLCdub25lJywnbm9uZScsJ2ZseWluZ190cmFuc3BvcnQnLDAsICdub25lJywnbm9uZScsJ25vbmUnKTsNCg0KdmFsdWVzICgyLCAncHlsb24nLCdyb2JvdGljc19mYWNpbGl0eScsJ09ic2VydmVyJywgJ2RldGVjdF9DbG9ha2Vkb3JCdXJyb3dlZF9lbmVtaWVzJywnbm8nLCAnc3VydmVpbGVuY2VfbW9kZScNCiAgICAgICAgLDI1LDc1LCcxOF9zZWNvbmRzJywxLCdsaWdodCcsMjAsMiwnbWVjaGFuaWNhbCcsICdub2VuZXJneScsICd1bmFybWVkJywnbm9uZScsDQogICAgICAgICdub25lJywnZmx5aW5nX3NweScsMCwnbm9uZScsJ25vbmUnLCdub25lJyk7DQoNCnZhbHVlcyAoMywgJ3B5bG9uJywncm9ib3RpY3NfZmFjaWxpdHknLCdpbW1vcnRhbCcsJ25vbmUnLCAnbm9uZScsJ25vJywNCiAgICAgICAgMjc1LDEwMCwnMzlfc2Vjb25kcycsNCwnYXJtb3JlZCcsMTAwLDIsJ21lY2hhbmljYWwnLCAnbm8nLCdwaGFzZV9kaXNydXB0b3JzJywneWVzJywnbm8nLCdyb2JvdGljIGFzc2F1bHQgc3RyaWRlcicsMTAsICdub25lJywnKzUnLCdub25lJyk7DQoNCg0KDQoNCg0KYGBgDQoNCg0KYGBge3J9DQpjcmVhdGUgdGFibGUgYWR2X3N0cnVjdHVyZV9tZWNocmVzZWFyY2gNCg0KKA0KICBpZCBpbnQgcHJpbWFyeSBrZXksDQogIEVfc3RydWN0dXJlX25hbWUgdmFyY2hhcig1MCkgZm9yZWlnbiBrZXksLS1weWxvbiBmb3IgZW5lcmd5IGZpZWxkDQogIHN0cnVjdHVyZW5hbWVfQyB2YXJjaGFyKDI1NSlmb3JlaWduIGtleSAnbnVsbCcsDQogIE1fQWR2X3N0cnVjdHVyZW5hbWUgdmFyY2hhcigyNTUpZm9yZWlnbiBrZXkgJ251bGwnLA0KICBNX1JfQWR2X3N0cnVjdHVyZW5hbWUgdmFyY2hhcigyNTUpLA0KICAtLUFkdl9zdHJ1Y3R1cmVfcmVxdWlyZW1lbnQgdmFyY2hhcigyNTUpIGZvcmVpZ24ga2V5ICdudWxsJywNCiAgTV9SX0Fkdl9zdHJ1Y3R1cmVfY29zdF9taW4gaW50ICdudWxsJywNCiAgTV9SX0Fkdl9zdHJ1Y3R1cmVfY29zdF9WZXNwaW5lX2dhcyBpbnQgJ251bGwnLA0KICBNX1JfQWR2X3N0cnVjdHVyZV9wdXJwb3NlIHZhcmNoYXIoMjU1KSAnbnVsbCcsDQogIE1fUl9BZHZfc3RydWN0dXJlX3B1cnBvc2UyIHZhcmNoYXIoMjU1KSAJDQogIE1fUl9BZHZfc3RydWN0dXJlX3Jlc2VhcmNoMSB2YXJjaGFyKDI1NSkgLA0KICBNX1JfQWR2X3N0cnVjdHVyZV9yZXNlYXJjaDFfdW5pdGFmZmVjdGVkIHZhcmNoYXIoMjU1KSAsCQ0KICBNX1JfQWR2X3N0cnVjdHVyZV9yZXNlYXJjaDIgdmFyY2hhcigyNTUpLA0KICBNX1JfQWR2X3N0cnVjdHVyZV9yZXNlYXJjaDJfdW5pdGFmZmVjdGVkIHZhcmNoYXIoMjU1KSwNCiAgTV9SX0Fkdl9zdHJ1Y3R1cmVfcmVzZWFyY2gzIHZhcmNoYXIoMjU1KSwNCiAgTV9SX0Fkdl9zdHJ1Y3R1cmVfcmVzZWFyY2gzX3VuaXRhZmZlY3RlZCB2YXJjaGFyKDI1NSksDQogIHdvcmtlcl9uYW1lIHZhcmNoYXIoNTApZm9yZWlnbiBrZXkgJ251bGwnDQopOw0KYGBgDQoNCg0KYGBge3J9DQppbnNlcnQgaW50byBhZHZfc3RydWN0dXJlX21lY2hyZXNlYXJjaA0KdmFsdWVzIA0KKDEsICdQeWxvbicsJ0N5YmVybmV0aWNzX2NvcmUnLCdSb2JvdGljc19GYWNpbGl0eScsICdSb2JvdGljc19iYXknLDIwMCwyMDAsJ3VubG9ja19Db2xvc3N1cycsJ3Jlc2VhcmNoX3RlY2hfdXBncmFkZXMnLCdncmF2aXRpY19ib29zdGVyJywnT2JzZXJ2ZXInKTsNCnZhbHVlcyAoMiwgJ251bGwnLCdudWxsJywnbnVsbCcsICdudWxsJywnbnVsbCcsJ251bGwnLCdudWxsJywncmVzZWFyY2hfdGVjaF91cGdyYWRlcycsJ0dyYXZpdGljX2RyaXZlJywnV2FycF9wcmlzbScpOw0KdmFsdWVzICgzLCAnbnVsbCcsJ251bGwnLCdudWxsJywgJ251bGwnLCdudWxsJywnbnVsbCcsJ251bGwnLCdyZXNlYXJjaF90ZWNoX3VwZ3JhZGVzJywnRXh0ZW5kX1RoZXJtYWxfTGFuY2VzJywnQ29sb3NzdXMnLCdwcm9iZScpOw0KDQpgYGANCg0KDQpgYGB7cn0NCmNyZWF0ZSB0YWJsZSBhZHZfbWVjaF91bml0c19hZnRlcl9NcmVzZWFyY2gNCihpZCBpbnQgcHJpbWFyeSBrZXksDQogIEVfc3RydWN0dXJlX25hbWUgdmFyY2hhcig1MCkgZm9yZWlnbiBrZXksIA0KICAtLXN0cnVjdHVyZW5hbWVfQyB2YXJjaGFyKDI1NSlmb3JlaWduIGtleSwNCiAgTV9BZHZfc3RydWN0dXJlbmFtZSB2YXJjaGFyKDI1NSlmb3JlaWduIGtleSAnbnVsbCcsDQogIE1fUl9BZHZfc3RydWN0dXJlbmFtZSB2YXJjaGFyKDI1NSlmb3JlaWduIGtleSwNCiAgLS0gQWR2c3RydWN0dXJlbmFtZTIgdmFyY2hhcigyNTUpZm9yZWlnbiBrZXkgJ251bGwnLA0KICAtLSBBZHZzdHJ1Y3R1cmVuYW1lMyB2YXJjaGFyKDI1NSkJIGZvcmVpZ24ga2V5LA0KICBNX2Fkdl91bml0bmFtZSB2YXJjaGFyKDI1NSksDQogIE1fYWR2X3VuaXRfbm9ub2ZmZW5zZV9wdXJwb3NlIHZhcmNoYXIgKDI1NSksDQogIE1fYWR2X3VuaXRfYWJpbGl0eSB2YXJjaGFyICgyNTUpLA0KICBNX2Fkdl91bml0X2Nvc3RfTWluIGludCwNCiAgTV9hZHZfdW5pdF9jb3N0X3Zlc3BpbmVfR2FzIGludCwNCiAgTV9hZHZfdW5pdF9idWlsZF90aW1lIHZhcmNoYXIoMjU1KSwNCiAgTV9hZHZfdW5pdF9zdXBwbHkgdmFyY2hhcigyNTUpLA0KICBNX2Fkdl91bml0X2FybW9yX3R5cGUgdmFyY2hhcigyNTUpLA0KICBNX2Fkdl91bml0X3NoaWVsZHMgaW50LA0KICBNX2Fkdl91bml0X3NoaWVsZHNfcmVnL3NlYyBpbnQsDQogIE1fYWR2X3VuaXRfdHlwZSB2YXJjaGFyKDI1NSksDQogIE1fYWR2X3VuaXRfZW5lcmd5X21heCB2YXJjaGFyKDI1MCkgbnVsbCwNCiAgTV9hZHZfdW5pdF9hcm1hbWVudCB2YXJjaGFyKDI1NSksDQogIE1fYWR2X3VuaXRfdGFyZ2V0c19ncm91bmQgdmFyY2hhcigyNTUpLA0KICBNX2Fkdl91bml0X3RhcmdldHNfYWlyIHZhcmNoYXIoMjU1KSwNCiAgTV9hZHZfdW5pdF9yb2xlIHZhcmNoYXIoMjU1KSwNCiAgTV9hZHZfdW5pdF9kYW1hZ2UgaW50LA0KICBNX2Fkdl91bml0X2FkZGl0aW9uYWxkYW1hZ2VfdnNfYmlvbG9naWNhbCB2YXJjaGFyKDIwKSwgDQogIE1fYWR2X3VuaXRfYWRkaXRpb25hbGRhbWFnZV92c19saWdodGFybW9yIHZhcmNoYXIoMjApLA0KICBNX2Fkdl91bml0X2FkZGl0aW9uYWxkYW1hZ2VfdnNfaGVhdnlhcm1vciB2YXJjaGFyKDIwKQ0KKTsNCmBgYA0KDQoNCmBgYHtyfQ0KaW5zZXJ0IGludG8gYWR2X21lY2hfdW5pdHNfYWZ0ZXJfTXJlc2VhcmNoDQp2YWx1ZXMgKDEsICdweWxvbicsJ3JvYm90aWNzX2ZhY2lsaXR5JywgJ3JvYm90aWNzX2JheScsJ0NvbG9zc3VzJywnbm9uZScsJ05vJw0KICAgICAgICAzMDAsMjAwLCc1NF9zZWNvbmRzJyw2LCdhcm1vcmVkJywxNTAsMiwnbWFzc2l2ZScsDQogICAgICAgICdubycsJ1RoZXJtYWxfbGFuY2UnLCd5ZXMnLCdubycsJ3JvYm90aWMgU2llZ2Ugc3RyaWRlcicsMTAsJ25vbmUnLCcrNScsJ25vbmUnKTsgDQp2YWx1ZXMgKDIsICdweWxvbicsJ3JvYm90aWNzX2ZhY2lsaXR5JywgJ3JvYm90aWNzX2JheScsJ0Rpc3J1cHRvcicsJ25vbmUnLCdZZXMnDQogICAgICAgIDE1MCwxNTAsJzM2X3NlY29uZHMnLDQsJ2FybW9yZWQnLDEwMCwyLCdsaWdodCcsDQogICAgICAgICdubycsJ05vdmEnLCd5ZXMnLCdubycsJ2VuZXJneV9jYXN0b3InLDE0NSwnbm9uZScsJ25vbmUnLCdub25lJyk7IA0KDQoNCmBgYA0KDQoNCmBgYHtyfQ0KY3JlYXRlIHRhYmxlIGFkdmFuY2Vfc3RydWN0dXJlX01lY2hfYWlyDQooaWQgaW50ICwNCiAgRV9zdHJ1Y3R1cmVfbmFtZSB2YXJjaGFyKDUwKSBmb3JlaWduIGtleSwgLS1wc2lvbmljIG1hdHJpeA0KICAtLXN0cnVjdHVyZW5hbWVfRyB2YXJjaGFyKDI1NSkgZm9yZWlnbiBrZXkgJ251bGwnLA0KICBzdHJ1Y3R1cmVuYW1lX0MgdmFyY2hhcigyNTUpZm9yZWlnbiBrZXkgJ251bGwnLA0KICAtLUFkdl9zdHJ1Y3R1cmVuYW1lIHZhcmNoYXIoMjU1KWZvcmVpZ24ga2V5ICdudWxsJywNCiAgTV9BaXJfQWR2c3RydWN0dXJlbmFtZV8gdmFyY2hhcigyNTUpcHJpbWFyeSBrZXkgJ251bGwnLA0KICBNX0Fpcl9BZHZfc3RydWN0dXJlX2Nvc3RfbWluIGludCAnbnVsbCcsDQogIE1fQWlyX0Fkdl9zdHJ1Y3R1cmVfY29zdF9WZXNwaW5lX2dhcyBpbnQgJ251bGwnLA0KICBNX0Fpcl9BZHZzdHJ1Y3R1cmVfcHVycG9zZSB2YXJjaGFyKDI1NSkgJ251bGwnLA0KICAtLU1fQWR2c3RydWN0dXJlX3B1cnBvc2UyIHZhcmNoYXIoMjU1KQ0KICAtLUFkdnN0cnVjdHVyZW5hbWUxX3Jlc2VhY2hfYWJpbGl0eSB2YXJjaGFyKDI1NSkgJ251bGwnLA0KICAtLUFkdnN0cnVjdHVyZW5hbWUxX3Jlc2VhcmNoX2FiaWxpdHkgdmFyY2hhcigyNTUpICdudWxsJywNCiAgLS1BZHZzdHJ1Y3R1cmVuYW1lMl8gdmFyY2hhcigyNTUpCSdudWxsJywNCiAgLS1BZHZfc3RydWN0dXJlMl9jb3N0X21pbiBpbnQgJ251bGwnLA0KICAtLUFkdl9zdHJ1Y3R1cmUyX2Nvc3RfVmVzcGluZV9nYXMgaW50ICdudWxsJywJDQogIC0tQWR2c3RydWN0dXJlbmFtZTJfcHVycG9zZSB2YXJjaGFyKDI1NSkgJ251bGwnLA0KICB3b3JrZXJfbmFtZSB2YXJjaGFyKDUwKWZvcmVpZ24ga2V5DQopOw0KYGBgDQoNCg0KYGBge3J9DQppbnNlcnQgaW50byBhZHZhbmNlX3N0cnVjdHVyZV9NZWNoX2Fpcg0KdmFsdWVzICgxLCAnUHlsb24nLCAnQ3liZXJuZXRpY3NfQ29yZScsICdTdGFyZ2F0ZScsIDE1MCwxNTAsICdwcm9kdWNlIG1lY2hhbmljYWwgYWlyX3VuaXRzJywgJ3Byb2JlJyk7DQoNCg0KDQpgYGANCg0KDQpgYGB7cn0NCmNyZWF0ZSB0YWJsZSBhZHZfbWVjaF9haXJfdW5pdHMNCihpZCBpbnQgcHJpbWFyeSBrZXksDQogIEVfc3RydWN0dXJlX25hbWUgdmFyY2hhcig1MCkgZm9yZWlnbiBrZXksIC0tcHlsb24gZm9yIHN1cHBseQ0KICBzdHJ1Y3R1cmVuYW1lX0MgdmFyY2hhcigyNTUpZm9yZWlnbiBrZXksDQogIE1fQWlyX0FkdnN0cnVjdHVyZW5hbWVfIHZhcmNoYXIoMjU1KWZvcmVpZ24ga2V5ICdudWxsJywNCiAgLS0gQWR2c3RydWN0dXJlbmFtZTIgdmFyY2hhcigyNTUpZm9yZWlnbiBrZXkgJ251bGwnLA0KICAtLSBBZHZzdHJ1Y3R1cmVuYW1lMyB2YXJjaGFyKDI1NSkJIGZvcmVpZ24ga2V5LA0KICBNX0Fpcl91bml0bmFtZSB2YXJjaGFyKDI1NSksDQogIE1fQWlyX3VuaXRfcHJvZHVjdGlvbl9zdHJ1Y3R1cmFsX3JlcS4gdmFyY2hhcigyNTUpLA0KICBNX0Fpcl91bml0X25vbm9mZmVuc2VfcHVycG9zZSB2YXJjaGFyICgyNTUpLA0KICBNX0Fpcl91bml0X2FiaWxpdHkgdmFyY2hhciAoMjU1KSAnbnVsbCcsDQogIE1fQWlyX3VuaXRfYWJpbGl0eTIgdmFyY2hhciAoMjU1KSAnbnVsbCcsDQogIA0KICBNX0Fpcl91bml0X2FiaWxpdHlfcHVycG9zZSB2YXJjaGFyICgyNTUpICdudWxsJywNCiAgTV9BaXJfdW5pdF9hYmlsaXR5X3B1cnBvc2UyIHZhcmNoYXIgKDI1NSkgJ251bGwnLA0KICBNX0Fpcl91bml0X2FiaWxpdHlfcHVycG9zZTMgdmFyY2hhciAoMjU1KSAnbnVsbCcsDQogIA0KICANCiAgTV9BaXJfdW5pdF9hYmlsaXR5X3JlcXVpcmVtZW50IHZhcmNoYXIgKDI1NSkgJ251bGwnLA0KICBNX0Fpcl91bml0X2Nvc3RfTWluIGludCwNCiAgTV9BaXJfdW5pdF9jb3N0X3Zlc3BpbmVfR2FzIGludCwNCiAgTV9BaXJfdW5pdF93YXJwX2luX3RpbWUgdmFyY2hhcigyNTUpLA0KICBNX0Fpcl91bml0X3N1cHBseSB2YXJjaGFyKDI1NSksDQogIE1fQWlyX3VuaXRfYXJtb3JfdHlwZSB2YXJjaGFyKDI1NSksDQogIA0KICBNX0Fpcl91bml0X3NoaWVsZHMgaW50LA0KICBNX0Fpcl91bml0X2FybW9yIGludCwNCiAgTV9BaXJfdW5pdF9zcGVlZCBpbnQsDQogIE1fQWlyX3VuaXRfZW5lcmd5X2Nvb2xkb3duIGludCwNCiAgTV9BaXJfdW5pdF90eXBlIHZhcmNoYXIoMjU1KSwNCiAgTV9BaXJfdW5pdF9lbmVyZ3lfbWF4IHZhcmNoYXIoMjUwKSBudWxsLA0KICBNX0Fpcl91bml0X2FybWFtZW50IHZhcmNoYXIoMjU1KSwNCiAgTV9BaXJfdW5pdF90YXJnZXRzX2dyb3VuZCB2YXJjaGFyKDI1NSksDQogIE1fQWlyX3VuaXRfdGFyZ2V0c19haXIgdmFyY2hhcigyNTUpLA0KICBNX0Fpcl91bml0X3JvbGUgdmFyY2hhcigyNTUpLA0KICBNX0Fpcl91bml0X2RhbWFnZSBpbnQsDQogIE1fQWlyX3VuaXRfZGFtYWdlX3Blcl9zZWMgaW50LA0KICBNX0Fpcl91bml0X2FkZGl0aW9uYWxkYW1hZ2VfdnNfYmlvbG9naWNhbF9haXJfb3JfZ3JvdW5kIHZhcmNoYXIoMjApLCANCiAgTV9BaXJfdW5pdF9hZGRpdGlvbmFsZGFtYWdlX3ZzX2xpZ2h0YXJtb3JfYWlyX29yX2dyb3VuZCB2YXJjaGFyKDIwKSwNCiAgTV9BaXJfdW5pdF9hZGRpdGlvbmFsZGFtYWdlX3ZzX2hlYXZ5YXJtb3JfYWlyX29yX2dyb3VuZCB2YXJjaGFyKDIwKQ0KKTsNCmBgYA0KDQoNCmBgYHtyfQ0KaW5zZXJ0IGludG8gYWR2X21lY2hfYWlyX3VuaXRzDQoNCnZhbHVlcyAoMSwgJ3B5bG9uJywnY3liZXJuZXRpY3NfY29yZScsJ1N0YXJnYXRlJywnUGhlb25peCcsICdubycsICdubycNCiAgICAgICAgJ0dyYXZpdG9uX2JlYW0nLCdBbmlvbl9QdWxzZS1DcnlzdGFscycsJ2xpZnRzIGxpZ2h0IGdyb3VuZCB1bml0cyBpbnRvIGFpcicsJ2luY3JlYXNlIHJhbmdlIG9mIHdlYXBvbnMgYnkgMicsJ251bGwnLA0KICAgICAgICAncmVzZWFyY2ggcmVxdWlyZSBGbGVldCBCZWFjb24nLA0KICAgICAgICAxNTAsMTAwLCcyNV9zZWNvbmRzJywyLCdBaXIgVW5pdCcsNjAsMTIwLDUuOTUsLjc5LCdNZWNoYW5pY2FsX0FpcicsICdubycsIA0KICAgICAgICAnaW9uIGNhbm5vbicsJ25vJywneWVzJywnYWlydG9haXInLDEyLjcsJ25vbmUnLCdwbHVzXzVfbGlnaHRseV9hcm1vcmVkX2FpcicsJ25vbmUnKTsNCg0KDQp2YWx1ZXMgKDIsICdweWxvbicsJ2N5YmVybmV0aWNzX2NvcmUnLCdTdGFyZ2F0ZScsJ1ZvaWQgUmF5JywgJ25vJywgJ25vJywnUHJpc21hdGljIEFsaWdubWVudCcsDQogICAgICAgICdGbHV4IFZhbmVzJywnYm9vc3QgZGFtYWdlIG91cHV0IHRvIGFybW9yZWQgdW5pdHMnLCAnaW5jcmVhc2VfbW92ZW1lbnRfc3BlZWQnLCAnbnVsbCcsIA0KICAgICAgICAnZmxlZXQgYmVhY29uJywNCiAgICAgICAgLDI1MCwxNTAsNDMsNCwnTGFyZ2UgQWlyIFVuaXQnLDEwMCwxNTAsMy44NSw0Mi45LCdNZWNoYW5pY2FsX2FpcicsICdubycsICdhcm1lZCcsJ25vbmUnLA0KICAgICAgICAncHJpc21hdGljIGJlYW0nLCd5ZXMnLCd5ZXMnLCdzdXJnaWNhbCBzdHJpa2UnLDYsIDE2LjgsICdub25lJywnbm9uZScsJ3BsdXNfNCcpOw0KDQoNCg0KYGBgDQoNCg0KYGBge3J9DQpjcmVhdGUgdGFibGUgYWR2X2Fpcl9zdHJ1Y3R1cmVfbWVjaHJlc2VhcmNoDQoNCigNCiAgaWQgaW50IHByaW1hcnkga2V5LA0KICBFX3N0cnVjdHVyZV9uYW1lIHZhcmNoYXIoNTApIGZvcmVpZ24ga2V5LC0tcHlsb24gZm9yIGVuZXJneSBmaWVsZA0KICBzdHJ1Y3R1cmVuYW1lX0MgdmFyY2hhcigyNTUpZm9yZWlnbiBrZXkgJ251bGwnLA0KICBNX0Fpcl9BZHZzdHJ1Y3R1cmVuYW1lXyB2YXJjaGFyKDI1NSlmb3JlaWduIGtleSAnbnVsbCcsDQogIE1fYWlyX1JfQWR2X3N0cnVjdHVyZW5hbWUgdmFyY2hhcigyNTUpLA0KICAtLUFkdl9zdHJ1Y3R1cmVfcmVxdWlyZW1lbnQgdmFyY2hhcigyNTUpIGZvcmVpZ24ga2V5ICdudWxsJywNCiAgTV9haXJfUl9BZHZfc3RydWN0dXJlX2Nvc3RfbWluIGludCAnbnVsbCcsDQogIE1fYWlyX1JfQWR2X3N0cnVjdHVyZV9jb3N0X1Zlc3BpbmVfZ2FzIGludCAnbnVsbCcsDQogIE1fYWlyX1JfQWR2X3N0cnVjdHVyZV9wdXJwb3NlIHZhcmNoYXIoMjU1KSAnbnVsbCcsDQogIE1fYWlyX1JfQWR2X3N0cnVjdHVyZV9wdXJwb3NlMiB2YXJjaGFyKDI1NSkgLA0KICBNX2Fpcl9SX0Fkdl9zdHJ1Y3R1cmVfcHVycG9zZTMgdmFyY2hhcigyNTUpLCANCiAgTV9haXJfUl9BZHZfc3RydWN0dXJlX3Jlc2VhcmNoMSB2YXJjaGFyKDI1NSkgLA0KICBNX2Fpcl9SX0Fkdl9zdHJ1Y3R1cmVfcmVzZWFyY2gxX2Nvc3RfbWluZXJhbHMgaW50ICwNCiAgTV9haXJfUl9BZHZfc3RydWN0dXJlX3Jlc2VhcmNoMV9jb3N0X2dhcyBpbnQgLA0KICBNX2Fpcl9SX0Fkdl9zdHJ1Y3R1cmVfcmVzZWFyY2gxX3RpbWUgdmFyY2hhcigyNTUpICwNCiAgDQogIE1fYWlyX1JfQWR2X3N0cnVjdHVyZV9yZXNlYXJjaDFfdW5pdGFmZmVjdGVkIHZhcmNoYXIoMjU1KSAsCQ0KICBNX2Fpcl9SX0Fkdl9zdHJ1Y3R1cmVfcmVzZWFyY2gyIHZhcmNoYXIoMjU1KSwNCiAgTV9haXJfUl9BZHZfc3RydWN0dXJlX3Jlc2VhcmNoMl9jb3N0X21pbmVyYWxzIGludCAsDQogIE1fYWlyX1JfQWR2X3N0cnVjdHVyZV9yZXNlYXJjaDJfY29zdF9nYXMgaW50ICwNCiAgTV9haXJfUl9BZHZfc3RydWN0dXJlX3Jlc2VhcmNoMl90aW1lIHZhcmNoYXIoMjU1KSAsDQogIE1fYWlyX1JfQWR2X3N0cnVjdHVyZV9yZXNlYXJjaDJfdW5pdGFmZmVjdGVkIHZhcmNoYXIoMjU1KSwNCiAgTV9haXJfUl9BZHZfc3RydWN0dXJlX3Jlc2VhcmNoMyB2YXJjaGFyKDI1NSksDQogIE1fYWlyX1JfQWR2X3N0cnVjdHVyZV9yZXNlYXJjaDNfY29zdF9taW5lcmFscyBpbnQgLA0KICBNX2Fpcl9SX0Fkdl9zdHJ1Y3R1cmVfcmVzZWFyY2gzX2Nvc3RfZ2FzIGludCAsDQogIE1fYWlyX1JfQWR2X3N0cnVjdHVyZV9yZXNlYXJjaDNfdGltZSB2YXJjaGFyKDI1NSkgLA0KICBNX2Fpcl9SX0Fkdl9zdHJ1Y3R1cmVfcmVzZWFyY2gzX3VuaXRhZmZlY3RlZCB2YXJjaGFyKDI1NSksDQogIHdvcmtlcl9uYW1lIHZhcmNoYXIoNTApZm9yZWlnbiBrZXkgJ251bGwnDQopOw0KYGBgDQoNCg0KDQpgYGB7cn0NCmluc2VydCBpbnRvIGFkdl9zdHJ1Y3R1cmVfbWVjaHJlc2VhcmNoDQp2YWx1ZXMgDQooMSwgJ1B5bG9uJywnQ3liZXJuZXRpY3NfY29yZScsJ1N0YXJnYXRlJywgJ0ZsZWV0IEJlYWNvbicsMzAwLDIwMCwndW5sb2NrX0NhcnJpZXInLCd1bmxvY2tfVGVtcGVzdCcsJ3VubG9ja19Nb3RoZXJzaGlwJywncmVzZWFyY2hfQW5pb24gUHVsc2UtQ3J5c3RhbHMnLDE1MCwgMTUwLCAnNjRfc2Vjb25kcycsICAnUGhlb25peCcpOw0KKDIsICAnbnVsbCcsICAgICAgICdudWxsJywgICAgICdudWxsJywgICAgICAnbnVsbCcsICAgICAnbnVsbCcsJ251bGwnLCdudWxsJywgJ3Jlc2VhcmNoIEZsdXggVmFuZXMnLCAxMDAsMTAwLCAnNTdfc2Vjb25kcycsDQogJ1ZvaWQgUmF5JywpOw0KKDMsICAnbnVsbCcsICAgICAgICdudWxsJywgICAgICdudWxsJywgICAgICAnbnVsbCcsICAgICAnbnVsbCcsJ251bGwnLCdudWxsJywgJ3Jlc2VhcmNoIFRlY2h0b25pYyBEZXN0YWJpbGl6ZXJzJywxNTAsIDE1MCwnMTAwX3NlY29uZHMnLCdUZW1wZXN0JywncHJvYmUnKTsNCg0KYGBgDQoNCg0KYGBge3J9DQpjcmVhdGUgdGFibGUgYWR2X21lY2hfYWlyX0NhcGl0YWxfc2hpcHMNCihpZCBpbnQgcHJpbWFyeSBrZXksDQogIEVfc3RydWN0dXJlX25hbWUgdmFyY2hhcig1MCkgZm9yZWlnbiBrZXksIC0tcHlsb24gZm9yIHN1cHBseQ0KICBzdHJ1Y3R1cmVuYW1lX0MgdmFyY2hhcigyNTUpZm9yZWlnbiBrZXksDQogIE1fQWlyX0FkdnN0cnVjdHVyZW5hbWVfIHZhcmNoYXIoMjU1KWZvcmVpZ24ga2V5ICdudWxsJywNCiAgQWR2c3RydWN0dXJlbmFtZTIgdmFyY2hhcigyNTUpZm9yZWlnbiBrZXkgJ251bGwnLA0KICBBZHZzdHJ1Y3R1cmVuYW1lMyB2YXJjaGFyKDI1NSkJIGZvcmVpZ24ga2V5LA0KICBNX0Fpcl91bml0bmFtZSB2YXJjaGFyKDI1NSksDQogIE1fQWlyX3VuaXRfcHJvZHVjdGlvbl9zdHJ1Y3R1cmFsX3JlcS4gdmFyY2hhcigyNTUpLA0KICBNX0Fpcl91bml0X25vbm9mZmVuc2VfcHVycG9zZSB2YXJjaGFyICgyNTUpLA0KICBNX0Fpcl91bml0X2FiaWxpdHkgdmFyY2hhciAoMjU1KSAnbnVsbCcsDQogIE1fQWlyX3VuaXRfYWJpbGl0eTIgdmFyY2hhciAoMjU1KSAnbnVsbCcsDQogIA0KICBNX0Fpcl91bml0X2FiaWxpdHlfcHVycG9zZSB2YXJjaGFyICgyNTUpICdudWxsJywNCiAgTV9BaXJfdW5pdF9hYmlsaXR5X3B1cnBvc2UyIHZhcmNoYXIgKDI1NSkgJ251bGwnLA0KICBNX0Fpcl91bml0X2FiaWxpdHlfcHVycG9zZTMgdmFyY2hhciAoMjU1KSAnbnVsbCcsDQogIA0KICANCiAgTV9BaXJfdW5pdF9hYmlsaXR5X3JlcXVpcmVtZW50IHZhcmNoYXIgKDI1NSkgJ251bGwnLA0KICBNX0Fpcl91bml0X2Nvc3RfTWluIGludCwNCiAgTV9BaXJfdW5pdF9jb3N0X3Zlc3BpbmVfR2FzIGludCwNCiAgTV9BaXJfdW5pdF93YXJwX2luX3RpbWUgdmFyY2hhcigyNTUpLA0KICBNX0Fpcl91bml0X3N1cHBseSB2YXJjaGFyKDI1NSksDQogIE1fQWlyX3VuaXRfYXJtb3JfdHlwZSB2YXJjaGFyKDI1NSksDQogIA0KICBNX0Fpcl91bml0X3NoaWVsZHMgaW50LA0KICBNX0Fpcl91bml0X2FybW9yIGludCwNCiAgTV9BaXJfdW5pdF9zcGVlZCBpbnQsDQogIE1fQWlyX3VuaXRfZW5lcmd5X2Nvb2xkb3duIGludCwNCiAgTV9BaXJfdW5pdF90eXBlIHZhcmNoYXIoMjU1KSwNCiAgTV9BaXJfdW5pdF9lbmVyZ3lfbWF4IHZhcmNoYXIoMjUwKSBudWxsLA0KICBNX0Fpcl91bml0X2FybWFtZW50IHZhcmNoYXIoMjU1KSwNCiAgTV9BaXJfdW5pdF90YXJnZXRzX2dyb3VuZCB2YXJjaGFyKDI1NSksDQogIE1fQWlyX3VuaXRfdGFyZ2V0c19haXIgdmFyY2hhcigyNTUpLA0KICBNX0Fpcl91bml0X3JvbGUgdmFyY2hhcigyNTUpLA0KICBNX0Fpcl91bml0X2RhbWFnZSBpbnQsDQogIE1fQWlyX3VuaXRfZGFtYWdlX3Blcl9zZWMgaW50LA0KICBNX0Fpcl91bml0X2FkZGl0aW9uYWxkYW1hZ2VfdnNfYmlvbG9naWNhbF9haXJfb3JfZ3JvdW5kIHZhcmNoYXIoMjApLCANCiAgTV9BaXJfdW5pdF9hZGRpdGlvbmFsZGFtYWdlX3ZzX2xpZ2h0YXJtb3JfYWlyX29yX2dyb3VuZCB2YXJjaGFyKDIwKSwNCiAgTV9BaXJfdW5pdF9hZGRpdGlvbmFsZGFtYWdlX3ZzX2hlYXZ5YXJtb3JfYWlyX29yX2dyb3VuZCB2YXJjaGFyKDIwKQ0KKTsNCmBgYA0KDQoNCg0KYGBge3J9DQoNCmluc2VydCBpbnRvIGFkdl9tZWNoX2Fpcl9DYXBpdGFsX3NoaXBzDQoNCnZhbHVlcyAoMSwgJ3B5bG9uJywnY3liZXJuZXRpY3NfY29yZScsJ1N0YXJnYXRlJywnZmxlZXQgYmVhY29uJywgJ0NhcnJpZXInLCAnbm8nLCAnbm8nDQogICAgICAgICdudWxsJywnbnVsbCcsJ251bGwnLCdudWxsJywnbnVsbCcsDQogICAgICAgICdudWxsJywNCiAgICAgICAgMTUwLDEwMCwnMjVfc2Vjb25kcycsMiwnQWlyIFVuaXQnLDYwLDEyMCw1Ljk1LC43OSwnTWVjaGFuaWNhbF9BaXInLCAnbm8nLCANCiAgICAgICAgJ2ludGVyY2VwdG9ycycsJ3llcycsJ3llcycsJ2NhcGl0YWxzaGlwJywxMi43LCdub25lJywncGx1c181X2xpZ2h0bHlfYXJtb3JlZF9haXInLCdub25lJyk7DQoNCg0KdmFsdWVzICgyLCAncHlsb24nLCdjeWJlcm5ldGljc19jb3JlJywnU3RhcmdhdGUnLCdmbGVldCBiZWFjb24nLCdUZW1wZXN0JywgJ25vJywgJ25vJywnbm8nLA0KICAgICAgICAnVGVjaHRvbmljIERlc3RhYmlsaXplcnMnLCdudWxsJywgJ251bGwnLCAnbnVsbCcsIA0KICAgICAgICAsMjUwLDE3NSw0Myw1LCdjYXBpdGFsc2hpcCcsMTAwLDE1MCwzLjg1LDQyLjksJ01lY2hhbmljYWxfYWlyJywgJ25vJywgJ2FybWVkJywnbm9uZScsDQogICAgICAgICcgJywneWVzJywnbm8nLCdzaWVnZScsNDAgLCAxNi45NyAsICdub25lJywnbm9uZScsJ3BsdXNfNCcpOw0KDQoNCmBgYA0K