3v324v23 commited on
Commit
4418e3c
·
1 Parent(s): ea3e820

Auto-deploy from GitHub

Browse files
This view is limited to 50 files because it contains too many changes.   See raw diff
Files changed (50) hide show
  1. .gitignore +2 -0
  2. app.py +103 -20
  3. entity_recognition.py +68 -18
  4. lib/bindings/utils.js +189 -0
  5. lib/tom-select/tom-select.complete.min.js +356 -0
  6. lib/tom-select/tom-select.css +334 -0
  7. lib/vis-9.1.2/vis-network.css +0 -0
  8. lib/vis-9.1.2/vis-network.min.js +0 -0
  9. requirements.txt +3 -1
  10. space/.gitignore +2 -0
  11. space/app.py +103 -20
  12. space/entity_recognition.py +68 -18
  13. space/lib/bindings/utils.js +189 -0
  14. space/lib/tom-select/tom-select.complete.min.js +356 -0
  15. space/lib/tom-select/tom-select.css +334 -0
  16. space/lib/vis-9.1.2/vis-network.css +0 -0
  17. space/lib/vis-9.1.2/vis-network.min.js +0 -0
  18. space/requirements.txt +3 -1
  19. space/space/.gitignore +2 -0
  20. space/space/app.py +103 -20
  21. space/space/entity_recognition.py +68 -18
  22. space/space/jfk_text/104-10003-10041.md +47 -0
  23. space/space/jfk_text/104-10004-10143 (C06932208).md +147 -0
  24. space/space/jfk_text/104-10004-10143.md +68 -0
  25. space/space/jfk_text/104-10004-10156.md +55 -0
  26. space/space/jfk_text/104-10004-10213.md +206 -0
  27. space/space/jfk_text/104-10005-10321.md +82 -0
  28. space/space/jfk_text/104-10006-10247.md +145 -0
  29. space/space/jfk_text/104-10007-10345.md +326 -0
  30. space/space/jfk_text/104-10009-10021.md +192 -0
  31. space/space/jfk_text/104-10009-10222.md +72 -0
  32. space/space/jfk_text/104-10012-10022.md +102 -0
  33. space/space/jfk_text/104-10012-10024.md +29 -0
  34. space/space/jfk_text/104-10012-10035.md +208 -0
  35. space/space/jfk_text/104-10012-10076.md +180 -0
  36. space/space/jfk_text/104-10012-10078.md +199 -0
  37. space/space/jfk_text/104-10012-10079.md +61 -0
  38. space/space/jfk_text/104-10014-10051.md +56 -0
  39. space/space/jfk_text/104-10014-10064.md +149 -0
  40. space/space/jfk_text/104-10016-10021.md +74 -0
  41. space/space/jfk_text/104-10023-10087.md +907 -0
  42. space/space/jfk_text/104-10048-10124.md +441 -0
  43. space/space/jfk_text/104-10048-10252.md +104 -0
  44. space/space/jfk_text/104-10049-10362.md +22 -0
  45. space/space/jfk_text/104-10049-10375.md +58 -0
  46. space/space/jfk_text/104-10051-10106.md +40 -0
  47. space/space/jfk_text/104-10051-10170.md +962 -0
  48. space/space/jfk_text/104-10052-10130.md +201 -0
  49. space/space/jfk_text/104-10059-10099.md +501 -0
  50. space/space/jfk_text/104-10059-10188.md +67 -0
.gitignore CHANGED
@@ -34,6 +34,8 @@ wordcloud.png
34
  wordcloud_output
35
  extracted_entities
36
  entities
 
 
37
 
38
  # Gradio cache & config
39
  gradio_cached_examples/
 
34
  wordcloud_output
35
  extracted_entities
36
  entities
37
+ mindmap.png
38
+ mindmap_output
39
 
40
  # Gradio cache & config
41
  gradio_cached_examples/
app.py CHANGED
@@ -2,22 +2,75 @@ from fastapi import FastAPI,HTTPException
2
  from pydantic import BaseModel
3
  from fastapi.responses import FileResponse
4
  import gradio as gr
5
- from entity_recognition import extract_entities # Import entity extraction function
6
  #from entity_recognition import generate_word_cloud
7
  from wordcloud import WordCloud
8
  from summarization import summarizer
9
- import os
10
  from utils import list_files,process_file
11
 
12
  # import threading
13
- import time
14
  app = FastAPI()
15
 
16
  # Request Model
17
  class TextRequest(BaseModel):
18
  text: str
 
 
19
 
20
- # Summarization Endpoint
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
21
  @app.post("/summarize")
22
  def summarize_text(request: TextRequest):
23
  chunks = [request.text[i:i+500] for i in range(0, len(request.text), 500)]
@@ -44,39 +97,69 @@ def extract_entities_endpoint(request: TextRequest):
44
  # Word Cloud Generation Endpoint
45
  @app.post("/wordcloud")
46
  def generate_word_cloud(request: TextRequest):
47
- wordcloud = WordCloud(width=800, height=600,max_font_size=40, min_font_size=10, background_color="white").generate(request.text)
48
  img_path = "wordcloud.png"
49
  wordcloud.to_file(img_path)
50
  return FileResponse(img_path, media_type="image/png", filename="wordcloud.png")
51
 
52
 
53
-
54
  # Gradio UI
55
  with gr.Blocks() as iface:
56
  gr.Markdown("File Selector")
57
  gr.Markdown("Choose a file and process it for summarization, entity recognition, and word cloud generation.")
58
 
59
- # File selection dropdown
60
- file_dropdown = gr.Dropdown(choices=list_files(), label="Select a File", interactive=True)
61
- process_button = gr.Button("Process")
 
62
 
 
 
 
 
63
 
64
- # Outputs
65
- output_summary = gr.Textbox(label="Summarized Text")
66
- output_entities = gr.JSON(label="Entities")
67
- output_wordcloud = gr.Image(label="Word Cloud")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
68
 
69
-
70
  # Process selected file
71
  process_button.click(
72
  fn=process_file,
73
  inputs=file_dropdown,
74
- outputs=[output_summary, output_entities, output_wordcloud]
75
  )
76
 
77
-
78
-
 
 
 
 
 
 
 
 
 
 
79
  if __name__ == "__main__":
80
- iface.launch(server_name="0.0.0.0", server_port=7860, share=False)
81
- time.sleep(1) # Allow time for logs
82
- print("\n\n **Gradio Interface is LIVE at: http://localhost:7860 ** \n")
 
2
  from pydantic import BaseModel
3
  from fastapi.responses import FileResponse
4
  import gradio as gr
5
+ from entity_recognition import extract_entities # Import entity extraction function
6
  #from entity_recognition import generate_word_cloud
7
  from wordcloud import WordCloud
8
  from summarization import summarizer
 
9
  from utils import list_files,process_file
10
 
11
  # import threading
12
+ TEXT_FOLDER = "jfk_text"
13
  app = FastAPI()
14
 
15
  # Request Model
16
  class TextRequest(BaseModel):
17
  text: str
18
+ import pygraphviz as pgv
19
+ import re
20
 
21
+ def generate_mermaid_mindmap(text):
22
+ entities = extract_entities(text)
23
+ print("Extracted Entities:", entities)
24
+
25
+ # Create a directed graph
26
+ G = pgv.AGraph(directed=True, rankdir="TB", bgcolor="white")
27
+
28
+ # Add root node
29
+ G.add_node("Document", shape="ellipse", style="filled", fillcolor="lightblue", label="Document")
30
+
31
+ # Keep track of node names to ensure uniqueness
32
+ node_counter = {}
33
+
34
+ for category, values in entities.items():
35
+ # Sanitize category name for the node identifier
36
+ safe_category = re.sub(r'[^a-zA-Z0-9_]', '', category)
37
+ if not safe_category or safe_category.startswith('.'):
38
+ safe_category = "Category_" + str(hash(category) % 10000)
39
+
40
+ # Add category node
41
+ G.add_node(safe_category, shape="box", style="filled", fillcolor="lightgreen", label=category)
42
+ G.add_edge("Document", safe_category)
43
+
44
+ for value in values:
45
+ # Clean up the value
46
+ cleaned_value = value.strip().rstrip(')').lstrip(',')
47
+ if not cleaned_value:
48
+ cleaned_value = "Unknown"
49
+
50
+ # Truncate long values for readability (max 50 characters)
51
+ if len(cleaned_value) > 50:
52
+ cleaned_value = cleaned_value[:47] + "..."
53
+
54
+ # Sanitize value name for the node identifier
55
+ safe_value = re.sub(r'[^a-zA-Z0-9_]', '', cleaned_value)
56
+ if not safe_value:
57
+ safe_value = "Value_" + str(hash(cleaned_value) % 10000)
58
+
59
+ # Ensure unique node name
60
+ node_key = safe_value
61
+ node_counter[node_key] = node_counter.get(node_key, 0) + 1
62
+ if node_counter[node_key] > 1:
63
+ safe_value = f"{safe_value}_{node_counter[node_key]}"
64
+
65
+ # Add value node
66
+ G.add_node(safe_value, shape="ellipse", style="filled", fillcolor="lightyellow", label=cleaned_value)
67
+ G.add_edge(safe_category, safe_value)
68
+
69
+ # Render the graph to a PNG file
70
+ output_path = "mindmap.png"
71
+ G.draw(output_path, format="png", prog="dot") # 'dot' is the layout engine
72
+
73
+ return output_path
74
  @app.post("/summarize")
75
  def summarize_text(request: TextRequest):
76
  chunks = [request.text[i:i+500] for i in range(0, len(request.text), 500)]
 
97
  # Word Cloud Generation Endpoint
98
  @app.post("/wordcloud")
99
  def generate_word_cloud(request: TextRequest):
100
+ wordcloud = WordCloud(width=800, height=800,max_font_size=40, min_font_size=10, background_color="white").generate(request.text)
101
  img_path = "wordcloud.png"
102
  wordcloud.to_file(img_path)
103
  return FileResponse(img_path, media_type="image/png", filename="wordcloud.png")
104
 
105
 
 
106
  # Gradio UI
107
  with gr.Blocks() as iface:
108
  gr.Markdown("File Selector")
109
  gr.Markdown("Choose a file and process it for summarization, entity recognition, and word cloud generation.")
110
 
111
+ # **File selection & process button**
112
+ with gr.Row():
113
+ file_dropdown = gr.Dropdown(choices=list_files(), label=" Select a File", interactive=True)
114
+ process_button = gr.Button(" Process")
115
 
116
+ # **First Row (Original Text & Summary)**
117
+ with gr.Row():
118
+ full_doc_text = gr.Textbox(label=" Full Document")
119
+ output_summary = gr.Textbox(label=" Summarized Text")
120
 
121
+ # **Second Row (Entities & Word Cloud)**
122
+ with gr.Row():
123
+ output_entities = gr.JSON(label=" Entities")
124
+ output_wordcloud = gr.Image(label=" Word Cloud")
125
+ with gr.Row():
126
+ generate_mindmap_button = gr.Button("Generate Mind Map")
127
+ output_mindmap = gr.Image(label="Mind Map") # Use HTML instead of Textbox
128
+
129
+ generate_mindmap_button.click(
130
+ fn=generate_mermaid_mindmap,
131
+ inputs=full_doc_text,
132
+ outputs=output_mindmap
133
+ )
134
+
135
+
136
+ # # **Mind Map Generation**
137
+ # with gr.Row():
138
+ # generate_mindmap_button = gr.Button("Generate Mind Map")
139
+ # output_mindmap = gr.Image(label="Mind Map")
140
+ # Mind Map Generation Section
141
+ # with gr.Row():
142
+ # generate_mindmap_button = gr.Button("Generate Mind Map")
143
+ # output_mindmap = gr.HTML(label="Mind Map")
144
 
 
145
  # Process selected file
146
  process_button.click(
147
  fn=process_file,
148
  inputs=file_dropdown,
149
+ outputs=[full_doc_text, output_summary, output_entities, output_wordcloud]
150
  )
151
 
152
+ # # Connect mind map button to function (MOVE THIS INSIDE `with gr.Blocks()`)
153
+ # generate_mindmap_button.click(
154
+ # fn=generate_mind_map,
155
+ # inputs=full_doc_text, # Use the full document text
156
+ # outputs=output_mindmap
157
+ # )
158
+ # generate_mindmap_button.click(
159
+ # fn=generate_mermaid_mindmap,
160
+ # inputs=full_doc_text,
161
+ # outputs=output_mindmap
162
+ # )
163
+ # Launch Gradio app
164
  if __name__ == "__main__":
165
+ iface.launch(server_name="0.0.0.0", server_port=7860, share=False, debug=True)
 
 
entity_recognition.py CHANGED
@@ -3,7 +3,23 @@ import torch
3
  import matplotlib.pyplot as plt
4
  from wordcloud import WordCloud
5
  from gliner import GLiNER
6
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7
  # 📂 Define input/output directories
8
  input_dir = "summaryoutput" # Folder containing summarized documents
9
  entity_output_dir = "extracted_entities" # Folder to save extracted entities
@@ -14,29 +30,63 @@ device = "cuda" if torch.cuda.is_available() else "cpu" # Use GPU if available
14
  model = GLiNER.from_pretrained("urchade/gliner_medium-v2.1").to(device)
15
 
16
  # Define labels for entity extraction
17
- labels = ["person", "organization", "location", "date", "document", "event", "role", "cryptonym", "operation", "nationality", "contact"]
18
- # 💡 Get already processed files
19
  existing_entity_files = set(os.listdir(entity_output_dir))
20
-
21
- # 🔹 Function to extract entities from text
22
  def extract_entities(text):
23
  entities = model.predict_entities(text, labels)
24
- extracted_entities = {}
25
-
 
 
 
 
 
 
 
 
 
 
 
 
26
  for entity in entities:
27
  entity_type = entity["label"]
28
- entity_text = entity["text"]
29
-
30
- if entity_type not in extracted_entities:
31
- extracted_entities[entity_type] = set()
32
-
33
- extracted_entities[entity_type].add(entity_text)
34
-
35
- return extracted_entities
36
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
37
  # Function to generate word cloud
38
  def generate_word_cloud(text, output_filename):
39
- wordcloud = WordCloud(width=800, height=400, background_color="white").generate(text)
 
 
 
 
40
 
41
  # Save word cloud image
42
  plt.figure(figsize=(10, 5))
@@ -95,5 +145,5 @@ def extract_entities_from_summaries():
95
  print(" Entity extraction and word cloud generation completed!")
96
 
97
 
98
- if __name__ == "__main__":
99
  extract_entities_from_summaries()
 
3
  import matplotlib.pyplot as plt
4
  from wordcloud import WordCloud
5
  from gliner import GLiNER
6
+ import spacy
7
+ import re
8
+ # Load spaCy English model
9
+ nlp = spacy.load("en_core_web_sm")
10
+
11
+ # Function to remove stop words
12
+ def preprocess_text(text):
13
+ doc = nlp(text)
14
+ filtered_words = [ token.lemma_ # Convert to base form
15
+ for token in doc
16
+ if not token.is_stop # Remove stop words
17
+ and not token.is_punct # Remove punctuation
18
+ and not token.is_digit # Remove numbers
19
+ and len(token.text) > 2 ]
20
+
21
+ return " ".join(filtered_words)
22
+
23
  # 📂 Define input/output directories
24
  input_dir = "summaryoutput" # Folder containing summarized documents
25
  entity_output_dir = "extracted_entities" # Folder to save extracted entities
 
30
  model = GLiNER.from_pretrained("urchade/gliner_medium-v2.1").to(device)
31
 
32
  # Define labels for entity extraction
33
+ labels = ["person", "organization", "location", "date", "document", "event", "role", "cryptonym", "operation", "nationality", "contact","SUBJECT","REFERENCE","FROM","TO","DATE","REF","INFO"]
34
+ # Get already processed files
35
  existing_entity_files = set(os.listdir(entity_output_dir))
 
 
36
  def extract_entities(text):
37
  entities = model.predict_entities(text, labels)
38
+ extracted = {}
39
+ regex_patterns = {
40
+ "TO": r"(?i)\bTO[:\s]+([^\n]+)",
41
+ "FROM": r"(?i)\bFROM[:\s]+([^\n]+)",
42
+ "DATE": r"(?i)\bDATE[:\s]+([^\n]+)",
43
+ "REF": r"(?i)\bREF[:\s]+([^\n]+)",
44
+ "SUBJECT": r"(?i)\bSUBJECT[:\s]+([^\n]+)",
45
+ }
46
+ for label, pattern in regex_patterns.items():
47
+ matches = re.findall(pattern, text)
48
+ if matches:
49
+ # Clean up matches
50
+ cleaned_matches = [m.strip().rstrip(')').lstrip(',') for m in matches]
51
+ extracted[label] = list(set(cleaned_matches)) # Remove duplicates
52
  for entity in entities:
53
  entity_type = entity["label"]
54
+ entity_text = entity["text"].strip().rstrip(')').lstrip(',')
55
+ if entity_type not in extracted:
56
+ extracted[entity_type] = []
57
+ if entity_text not in extracted[entity_type]: # Avoid duplicates
58
+ extracted[entity_type].append(entity_text)
59
+ return extracted
60
+ # def extract_entities(text):
61
+ # entities = model.predict_entities(text, labels)
62
+ # extracted = {}
63
+ # regex_patterns = {
64
+ # "TO": r"(?i)\bTO[:\s]+([^\n]+)", # Matches "TO: some text"
65
+ # "FROM": r"(?i)\bFROM[:\s]+([^\n]+)", # Matches "FROM: some text"
66
+ # "DATE": r"(?i)\bDATE[:\s]+([^\n]+)", # Matches "DATE: some text"
67
+ # "REF": r"(?i)\bREF[:\s]+([^\n]+)", # Matches "REF: some text"
68
+ # "SUBJECT": r"(?i)\bSUBJECT[:\s]+([^\n]+)", # Matches "SUBJECT: some text"
69
+ # }
70
+ # # Apply regex patterns
71
+ # for label, pattern in regex_patterns.items():
72
+ # matches = re.findall(pattern, text)
73
+ # if matches:
74
+ # extracted[label] = matches
75
+
76
+ # for entity in entities:
77
+ # entity_type = entity["label"]
78
+ # entity_text = entity["text"]
79
+ # if entity_type not in extracted:
80
+ # extracted[entity_type] = []
81
+ # extracted[entity_type].append(entity_text)
82
+ # return extracted
83
  # Function to generate word cloud
84
  def generate_word_cloud(text, output_filename):
85
+ os.makedirs(os.path.dirname(output_filename), exist_ok=True)
86
+ filtered_text = preprocess_text(text)
87
+ wordcloud = WordCloud(width=800, height=400, background_color="white").generate(filtered_text)
88
+ wordcloud.to_file(output_filename)
89
+
90
 
91
  # Save word cloud image
92
  plt.figure(figsize=(10, 5))
 
145
  print(" Entity extraction and word cloud generation completed!")
146
 
147
 
148
+ if __name__ == "__main__"and False:
149
  extract_entities_from_summaries()
lib/bindings/utils.js ADDED
@@ -0,0 +1,189 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ function neighbourhoodHighlight(params) {
2
+ // console.log("in nieghbourhoodhighlight");
3
+ allNodes = nodes.get({ returnType: "Object" });
4
+ // originalNodes = JSON.parse(JSON.stringify(allNodes));
5
+ // if something is selected:
6
+ if (params.nodes.length > 0) {
7
+ highlightActive = true;
8
+ var i, j;
9
+ var selectedNode = params.nodes[0];
10
+ var degrees = 2;
11
+
12
+ // mark all nodes as hard to read.
13
+ for (let nodeId in allNodes) {
14
+ // nodeColors[nodeId] = allNodes[nodeId].color;
15
+ allNodes[nodeId].color = "rgba(200,200,200,0.5)";
16
+ if (allNodes[nodeId].hiddenLabel === undefined) {
17
+ allNodes[nodeId].hiddenLabel = allNodes[nodeId].label;
18
+ allNodes[nodeId].label = undefined;
19
+ }
20
+ }
21
+ var connectedNodes = network.getConnectedNodes(selectedNode);
22
+ var allConnectedNodes = [];
23
+
24
+ // get the second degree nodes
25
+ for (i = 1; i < degrees; i++) {
26
+ for (j = 0; j < connectedNodes.length; j++) {
27
+ allConnectedNodes = allConnectedNodes.concat(
28
+ network.getConnectedNodes(connectedNodes[j])
29
+ );
30
+ }
31
+ }
32
+
33
+ // all second degree nodes get a different color and their label back
34
+ for (i = 0; i < allConnectedNodes.length; i++) {
35
+ // allNodes[allConnectedNodes[i]].color = "pink";
36
+ allNodes[allConnectedNodes[i]].color = "rgba(150,150,150,0.75)";
37
+ if (allNodes[allConnectedNodes[i]].hiddenLabel !== undefined) {
38
+ allNodes[allConnectedNodes[i]].label =
39
+ allNodes[allConnectedNodes[i]].hiddenLabel;
40
+ allNodes[allConnectedNodes[i]].hiddenLabel = undefined;
41
+ }
42
+ }
43
+
44
+ // all first degree nodes get their own color and their label back
45
+ for (i = 0; i < connectedNodes.length; i++) {
46
+ // allNodes[connectedNodes[i]].color = undefined;
47
+ allNodes[connectedNodes[i]].color = nodeColors[connectedNodes[i]];
48
+ if (allNodes[connectedNodes[i]].hiddenLabel !== undefined) {
49
+ allNodes[connectedNodes[i]].label =
50
+ allNodes[connectedNodes[i]].hiddenLabel;
51
+ allNodes[connectedNodes[i]].hiddenLabel = undefined;
52
+ }
53
+ }
54
+
55
+ // the main node gets its own color and its label back.
56
+ // allNodes[selectedNode].color = undefined;
57
+ allNodes[selectedNode].color = nodeColors[selectedNode];
58
+ if (allNodes[selectedNode].hiddenLabel !== undefined) {
59
+ allNodes[selectedNode].label = allNodes[selectedNode].hiddenLabel;
60
+ allNodes[selectedNode].hiddenLabel = undefined;
61
+ }
62
+ } else if (highlightActive === true) {
63
+ // console.log("highlightActive was true");
64
+ // reset all nodes
65
+ for (let nodeId in allNodes) {
66
+ // allNodes[nodeId].color = "purple";
67
+ allNodes[nodeId].color = nodeColors[nodeId];
68
+ // delete allNodes[nodeId].color;
69
+ if (allNodes[nodeId].hiddenLabel !== undefined) {
70
+ allNodes[nodeId].label = allNodes[nodeId].hiddenLabel;
71
+ allNodes[nodeId].hiddenLabel = undefined;
72
+ }
73
+ }
74
+ highlightActive = false;
75
+ }
76
+
77
+ // transform the object into an array
78
+ var updateArray = [];
79
+ if (params.nodes.length > 0) {
80
+ for (let nodeId in allNodes) {
81
+ if (allNodes.hasOwnProperty(nodeId)) {
82
+ // console.log(allNodes[nodeId]);
83
+ updateArray.push(allNodes[nodeId]);
84
+ }
85
+ }
86
+ nodes.update(updateArray);
87
+ } else {
88
+ // console.log("Nothing was selected");
89
+ for (let nodeId in allNodes) {
90
+ if (allNodes.hasOwnProperty(nodeId)) {
91
+ // console.log(allNodes[nodeId]);
92
+ // allNodes[nodeId].color = {};
93
+ updateArray.push(allNodes[nodeId]);
94
+ }
95
+ }
96
+ nodes.update(updateArray);
97
+ }
98
+ }
99
+
100
+ function filterHighlight(params) {
101
+ allNodes = nodes.get({ returnType: "Object" });
102
+ // if something is selected:
103
+ if (params.nodes.length > 0) {
104
+ filterActive = true;
105
+ let selectedNodes = params.nodes;
106
+
107
+ // hiding all nodes and saving the label
108
+ for (let nodeId in allNodes) {
109
+ allNodes[nodeId].hidden = true;
110
+ if (allNodes[nodeId].savedLabel === undefined) {
111
+ allNodes[nodeId].savedLabel = allNodes[nodeId].label;
112
+ allNodes[nodeId].label = undefined;
113
+ }
114
+ }
115
+
116
+ for (let i=0; i < selectedNodes.length; i++) {
117
+ allNodes[selectedNodes[i]].hidden = false;
118
+ if (allNodes[selectedNodes[i]].savedLabel !== undefined) {
119
+ allNodes[selectedNodes[i]].label = allNodes[selectedNodes[i]].savedLabel;
120
+ allNodes[selectedNodes[i]].savedLabel = undefined;
121
+ }
122
+ }
123
+
124
+ } else if (filterActive === true) {
125
+ // reset all nodes
126
+ for (let nodeId in allNodes) {
127
+ allNodes[nodeId].hidden = false;
128
+ if (allNodes[nodeId].savedLabel !== undefined) {
129
+ allNodes[nodeId].label = allNodes[nodeId].savedLabel;
130
+ allNodes[nodeId].savedLabel = undefined;
131
+ }
132
+ }
133
+ filterActive = false;
134
+ }
135
+
136
+ // transform the object into an array
137
+ var updateArray = [];
138
+ if (params.nodes.length > 0) {
139
+ for (let nodeId in allNodes) {
140
+ if (allNodes.hasOwnProperty(nodeId)) {
141
+ updateArray.push(allNodes[nodeId]);
142
+ }
143
+ }
144
+ nodes.update(updateArray);
145
+ } else {
146
+ for (let nodeId in allNodes) {
147
+ if (allNodes.hasOwnProperty(nodeId)) {
148
+ updateArray.push(allNodes[nodeId]);
149
+ }
150
+ }
151
+ nodes.update(updateArray);
152
+ }
153
+ }
154
+
155
+ function selectNode(nodes) {
156
+ network.selectNodes(nodes);
157
+ neighbourhoodHighlight({ nodes: nodes });
158
+ return nodes;
159
+ }
160
+
161
+ function selectNodes(nodes) {
162
+ network.selectNodes(nodes);
163
+ filterHighlight({nodes: nodes});
164
+ return nodes;
165
+ }
166
+
167
+ function highlightFilter(filter) {
168
+ let selectedNodes = []
169
+ let selectedProp = filter['property']
170
+ if (filter['item'] === 'node') {
171
+ let allNodes = nodes.get({ returnType: "Object" });
172
+ for (let nodeId in allNodes) {
173
+ if (allNodes[nodeId][selectedProp] && filter['value'].includes((allNodes[nodeId][selectedProp]).toString())) {
174
+ selectedNodes.push(nodeId)
175
+ }
176
+ }
177
+ }
178
+ else if (filter['item'] === 'edge'){
179
+ let allEdges = edges.get({returnType: 'object'});
180
+ // check if the selected property exists for selected edge and select the nodes connected to the edge
181
+ for (let edge in allEdges) {
182
+ if (allEdges[edge][selectedProp] && filter['value'].includes((allEdges[edge][selectedProp]).toString())) {
183
+ selectedNodes.push(allEdges[edge]['from'])
184
+ selectedNodes.push(allEdges[edge]['to'])
185
+ }
186
+ }
187
+ }
188
+ selectNodes(selectedNodes)
189
+ }
lib/tom-select/tom-select.complete.min.js ADDED
@@ -0,0 +1,356 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * Tom Select v2.0.0-rc.4
3
+ * Licensed under the Apache License, Version 2.0 (the "License");
4
+ */
5
+ !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).TomSelect=t()}(this,(function(){"use strict"
6
+ function e(e,t){e.split(/\s+/).forEach((e=>{t(e)}))}class t{constructor(){this._events={}}on(t,i){e(t,(e=>{this._events[e]=this._events[e]||[],this._events[e].push(i)}))}off(t,i){var s=arguments.length
7
+ 0!==s?e(t,(e=>{if(1===s)return delete this._events[e]
8
+ e in this._events!=!1&&this._events[e].splice(this._events[e].indexOf(i),1)})):this._events={}}trigger(t,...i){var s=this
9
+ e(t,(e=>{if(e in s._events!=!1)for(let t of s._events[e])t.apply(s,i)}))}}var i
10
+ const s="[̀-ͯ·ʾ]",n=new RegExp(s,"g")
11
+ var o
12
+ const r={"æ":"ae","ⱥ":"a","ø":"o"},l=new RegExp(Object.keys(r).join("|"),"g"),a=[[67,67],[160,160],[192,438],[452,652],[961,961],[1019,1019],[1083,1083],[1281,1289],[1984,1984],[5095,5095],[7429,7441],[7545,7549],[7680,7935],[8580,8580],[9398,9449],[11360,11391],[42792,42793],[42802,42851],[42873,42897],[42912,42922],[64256,64260],[65313,65338],[65345,65370]],c=e=>e.normalize("NFKD").replace(n,"").toLowerCase().replace(l,(function(e){return r[e]})),d=(e,t="|")=>{if(1==e.length)return e[0]
13
+ var i=1
14
+ return e.forEach((e=>{i=Math.max(i,e.length)})),1==i?"["+e.join("")+"]":"(?:"+e.join(t)+")"},p=e=>{if(1===e.length)return[[e]]
15
+ var t=[]
16
+ return p(e.substring(1)).forEach((function(i){var s=i.slice(0)
17
+ s[0]=e.charAt(0)+s[0],t.push(s),(s=i.slice(0)).unshift(e.charAt(0)),t.push(s)})),t},u=e=>{void 0===o&&(o=(()=>{var e={}
18
+ a.forEach((t=>{for(let s=t[0];s<=t[1];s++){let t=String.fromCharCode(s),n=c(t)
19
+ if(n!=t.toLowerCase()){n in e||(e[n]=[n])
20
+ var i=new RegExp(d(e[n]),"iu")
21
+ t.match(i)||e[n].push(t)}}}))
22
+ var t=Object.keys(e)
23
+ t=t.sort(((e,t)=>t.length-e.length)),i=new RegExp("("+d(t)+"[̀-ͯ·ʾ]*)","g")
24
+ var s={}
25
+ return t.sort(((e,t)=>e.length-t.length)).forEach((t=>{var i=p(t).map((t=>(t=t.map((t=>e.hasOwnProperty(t)?d(e[t]):t)),d(t,""))))
26
+ s[t]=d(i)})),s})())
27
+ return e.normalize("NFKD").toLowerCase().split(i).map((e=>{if(""==e)return""
28
+ const t=c(e)
29
+ if(o.hasOwnProperty(t))return o[t]
30
+ const i=e.normalize("NFC")
31
+ return i!=e?d([e,i]):e})).join("")},h=(e,t)=>{if(e)return e[t]},g=(e,t)=>{if(e){for(var i,s=t.split(".");(i=s.shift())&&(e=e[i]););return e}},f=(e,t,i)=>{var s,n
32
+ return e?-1===(n=(e+="").search(t.regex))?0:(s=t.string.length/e.length,0===n&&(s+=.5),s*i):0},v=e=>(e+"").replace(/([\$\(-\+\.\?\[-\^\{-\}])/g,"\\$1"),m=(e,t)=>{var i=e[t]
33
+ if("function"==typeof i)return i
34
+ i&&!Array.isArray(i)&&(e[t]=[i])},y=(e,t)=>{if(Array.isArray(e))e.forEach(t)
35
+ else for(var i in e)e.hasOwnProperty(i)&&t(e[i],i)},O=(e,t)=>"number"==typeof e&&"number"==typeof t?e>t?1:e<t?-1:0:(e=c(e+"").toLowerCase())>(t=c(t+"").toLowerCase())?1:t>e?-1:0
36
+ class b{constructor(e,t){this.items=e,this.settings=t||{diacritics:!0}}tokenize(e,t,i){if(!e||!e.length)return[]
37
+ const s=[],n=e.split(/\s+/)
38
+ var o
39
+ return i&&(o=new RegExp("^("+Object.keys(i).map(v).join("|")+"):(.*)$")),n.forEach((e=>{let i,n=null,r=null
40
+ o&&(i=e.match(o))&&(n=i[1],e=i[2]),e.length>0&&(r=v(e),this.settings.diacritics&&(r=u(r)),t&&(r="\\b"+r)),s.push({string:e,regex:r?new RegExp(r,"iu"):null,field:n})})),s}getScoreFunction(e,t){var i=this.prepareSearch(e,t)
41
+ return this._getScoreFunction(i)}_getScoreFunction(e){const t=e.tokens,i=t.length
42
+ if(!i)return function(){return 0}
43
+ const s=e.options.fields,n=e.weights,o=s.length,r=e.getAttrFn
44
+ if(!o)return function(){return 1}
45
+ const l=1===o?function(e,t){const i=s[0].field
46
+ return f(r(t,i),e,n[i])}:function(e,t){var i=0
47
+ if(e.field){const s=r(t,e.field)
48
+ !e.regex&&s?i+=1/o:i+=f(s,e,1)}else y(n,((s,n)=>{i+=f(r(t,n),e,s)}))
49
+ return i/o}
50
+ return 1===i?function(e){return l(t[0],e)}:"and"===e.options.conjunction?function(e){for(var s,n=0,o=0;n<i;n++){if((s=l(t[n],e))<=0)return 0
51
+ o+=s}return o/i}:function(e){var s=0
52
+ return y(t,(t=>{s+=l(t,e)})),s/i}}getSortFunction(e,t){var i=this.prepareSearch(e,t)
53
+ return this._getSortFunction(i)}_getSortFunction(e){var t,i,s
54
+ const n=this,o=e.options,r=!e.query&&o.sort_empty?o.sort_empty:o.sort,l=[],a=[]
55
+ if("function"==typeof r)return r.bind(this)
56
+ const c=function(t,i){return"$score"===t?i.score:e.getAttrFn(n.items[i.id],t)}
57
+ if(r)for(t=0,i=r.length;t<i;t++)(e.query||"$score"!==r[t].field)&&l.push(r[t])
58
+ if(e.query){for(s=!0,t=0,i=l.length;t<i;t++)if("$score"===l[t].field){s=!1
59
+ break}s&&l.unshift({field:"$score",direction:"desc"})}else for(t=0,i=l.length;t<i;t++)if("$score"===l[t].field){l.splice(t,1)
60
+ break}for(t=0,i=l.length;t<i;t++)a.push("desc"===l[t].direction?-1:1)
61
+ const d=l.length
62
+ if(d){if(1===d){const e=l[0].field,t=a[0]
63
+ return function(i,s){return t*O(c(e,i),c(e,s))}}return function(e,t){var i,s,n
64
+ for(i=0;i<d;i++)if(n=l[i].field,s=a[i]*O(c(n,e),c(n,t)))return s
65
+ return 0}}return null}prepareSearch(e,t){const i={}
66
+ var s=Object.assign({},t)
67
+ if(m(s,"sort"),m(s,"sort_empty"),s.fields){m(s,"fields")
68
+ const e=[]
69
+ s.fields.forEach((t=>{"string"==typeof t&&(t={field:t,weight:1}),e.push(t),i[t.field]="weight"in t?t.weight:1})),s.fields=e}return{options:s,query:e.toLowerCase().trim(),tokens:this.tokenize(e,s.respect_word_boundaries,i),total:0,items:[],weights:i,getAttrFn:s.nesting?g:h}}search(e,t){var i,s,n=this
70
+ s=this.prepareSearch(e,t),t=s.options,e=s.query
71
+ const o=t.score||n._getScoreFunction(s)
72
+ e.length?y(n.items,((e,n)=>{i=o(e),(!1===t.filter||i>0)&&s.items.push({score:i,id:n})})):y(n.items,((e,t)=>{s.items.push({score:1,id:t})}))
73
+ const r=n._getSortFunction(s)
74
+ return r&&s.items.sort(r),s.total=s.items.length,"number"==typeof t.limit&&(s.items=s.items.slice(0,t.limit)),s}}const w=e=>{if(e.jquery)return e[0]
75
+ if(e instanceof HTMLElement)return e
76
+ if(e.indexOf("<")>-1){let t=document.createElement("div")
77
+ return t.innerHTML=e.trim(),t.firstChild}return document.querySelector(e)},_=(e,t)=>{var i=document.createEvent("HTMLEvents")
78
+ i.initEvent(t,!0,!1),e.dispatchEvent(i)},I=(e,t)=>{Object.assign(e.style,t)},C=(e,...t)=>{var i=A(t);(e=x(e)).map((e=>{i.map((t=>{e.classList.add(t)}))}))},S=(e,...t)=>{var i=A(t);(e=x(e)).map((e=>{i.map((t=>{e.classList.remove(t)}))}))},A=e=>{var t=[]
79
+ return y(e,(e=>{"string"==typeof e&&(e=e.trim().split(/[\11\12\14\15\40]/)),Array.isArray(e)&&(t=t.concat(e))})),t.filter(Boolean)},x=e=>(Array.isArray(e)||(e=[e]),e),k=(e,t,i)=>{if(!i||i.contains(e))for(;e&&e.matches;){if(e.matches(t))return e
80
+ e=e.parentNode}},F=(e,t=0)=>t>0?e[e.length-1]:e[0],L=(e,t)=>{if(!e)return-1
81
+ t=t||e.nodeName
82
+ for(var i=0;e=e.previousElementSibling;)e.matches(t)&&i++
83
+ return i},P=(e,t)=>{y(t,((t,i)=>{null==t?e.removeAttribute(i):e.setAttribute(i,""+t)}))},E=(e,t)=>{e.parentNode&&e.parentNode.replaceChild(t,e)},T=(e,t)=>{if(null===t)return
84
+ if("string"==typeof t){if(!t.length)return
85
+ t=new RegExp(t,"i")}const i=e=>3===e.nodeType?(e=>{var i=e.data.match(t)
86
+ if(i&&e.data.length>0){var s=document.createElement("span")
87
+ s.className="highlight"
88
+ var n=e.splitText(i.index)
89
+ n.splitText(i[0].length)
90
+ var o=n.cloneNode(!0)
91
+ return s.appendChild(o),E(n,s),1}return 0})(e):((e=>{if(1===e.nodeType&&e.childNodes&&!/(script|style)/i.test(e.tagName)&&("highlight"!==e.className||"SPAN"!==e.tagName))for(var t=0;t<e.childNodes.length;++t)t+=i(e.childNodes[t])})(e),0)
92
+ i(e)},V="undefined"!=typeof navigator&&/Mac/.test(navigator.userAgent)?"metaKey":"ctrlKey"
93
+ var j={options:[],optgroups:[],plugins:[],delimiter:",",splitOn:null,persist:!0,diacritics:!0,create:null,createOnBlur:!1,createFilter:null,highlight:!0,openOnFocus:!0,shouldOpen:null,maxOptions:50,maxItems:null,hideSelected:null,duplicates:!1,addPrecedence:!1,selectOnTab:!1,preload:null,allowEmptyOption:!1,loadThrottle:300,loadingClass:"loading",dataAttr:null,optgroupField:"optgroup",valueField:"value",labelField:"text",disabledField:"disabled",optgroupLabelField:"label",optgroupValueField:"value",lockOptgroupOrder:!1,sortField:"$order",searchField:["text"],searchConjunction:"and",mode:null,wrapperClass:"ts-wrapper",controlClass:"ts-control",dropdownClass:"ts-dropdown",dropdownContentClass:"ts-dropdown-content",itemClass:"item",optionClass:"option",dropdownParent:null,copyClassesToDropdown:!1,placeholder:null,hidePlaceholder:null,shouldLoad:function(e){return e.length>0},render:{}}
94
+ const q=e=>null==e?null:D(e),D=e=>"boolean"==typeof e?e?"1":"0":e+"",N=e=>(e+"").replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;"),z=(e,t)=>{var i
95
+ return function(s,n){var o=this
96
+ i&&(o.loading=Math.max(o.loading-1,0),clearTimeout(i)),i=setTimeout((function(){i=null,o.loadedSearches[s]=!0,e.call(o,s,n)}),t)}},R=(e,t,i)=>{var s,n=e.trigger,o={}
97
+ for(s in e.trigger=function(){var i=arguments[0]
98
+ if(-1===t.indexOf(i))return n.apply(e,arguments)
99
+ o[i]=arguments},i.apply(e,[]),e.trigger=n,o)n.apply(e,o[s])},H=(e,t=!1)=>{e&&(e.preventDefault(),t&&e.stopPropagation())},B=(e,t,i,s)=>{e.addEventListener(t,i,s)},K=(e,t)=>!!t&&(!!t[e]&&1===(t.altKey?1:0)+(t.ctrlKey?1:0)+(t.shiftKey?1:0)+(t.metaKey?1:0)),M=(e,t)=>{const i=e.getAttribute("id")
100
+ return i||(e.setAttribute("id",t),t)},Q=e=>e.replace(/[\\"']/g,"\\$&"),G=(e,t)=>{t&&e.append(t)}
101
+ function U(e,t){var i=Object.assign({},j,t),s=i.dataAttr,n=i.labelField,o=i.valueField,r=i.disabledField,l=i.optgroupField,a=i.optgroupLabelField,c=i.optgroupValueField,d=e.tagName.toLowerCase(),p=e.getAttribute("placeholder")||e.getAttribute("data-placeholder")
102
+ if(!p&&!i.allowEmptyOption){let t=e.querySelector('option[value=""]')
103
+ t&&(p=t.textContent)}var u,h,g,f,v,m,O={placeholder:p,options:[],optgroups:[],items:[],maxItems:null}
104
+ return"select"===d?(h=O.options,g={},f=1,v=e=>{var t=Object.assign({},e.dataset),i=s&&t[s]
105
+ return"string"==typeof i&&i.length&&(t=Object.assign(t,JSON.parse(i))),t},m=(e,t)=>{var s=q(e.value)
106
+ if(null!=s&&(s||i.allowEmptyOption)){if(g.hasOwnProperty(s)){if(t){var a=g[s][l]
107
+ a?Array.isArray(a)?a.push(t):g[s][l]=[a,t]:g[s][l]=t}}else{var c=v(e)
108
+ c[n]=c[n]||e.textContent,c[o]=c[o]||s,c[r]=c[r]||e.disabled,c[l]=c[l]||t,c.$option=e,g[s]=c,h.push(c)}e.selected&&O.items.push(s)}},O.maxItems=e.hasAttribute("multiple")?null:1,y(e.children,(e=>{var t,i,s
109
+ "optgroup"===(u=e.tagName.toLowerCase())?((s=v(t=e))[a]=s[a]||t.getAttribute("label")||"",s[c]=s[c]||f++,s[r]=s[r]||t.disabled,O.optgroups.push(s),i=s[c],y(t.children,(e=>{m(e,i)}))):"option"===u&&m(e)}))):(()=>{const t=e.getAttribute(s)
110
+ if(t)O.options=JSON.parse(t),y(O.options,(e=>{O.items.push(e[o])}))
111
+ else{var r=e.value.trim()||""
112
+ if(!i.allowEmptyOption&&!r.length)return
113
+ const t=r.split(i.delimiter)
114
+ y(t,(e=>{const t={}
115
+ t[n]=e,t[o]=e,O.options.push(t)})),O.items=t}})(),Object.assign({},j,O,t)}var W=0
116
+ class J extends(function(e){return e.plugins={},class extends e{constructor(...e){super(...e),this.plugins={names:[],settings:{},requested:{},loaded:{}}}static define(t,i){e.plugins[t]={name:t,fn:i}}initializePlugins(e){var t,i
117
+ const s=this,n=[]
118
+ if(Array.isArray(e))e.forEach((e=>{"string"==typeof e?n.push(e):(s.plugins.settings[e.name]=e.options,n.push(e.name))}))
119
+ else if(e)for(t in e)e.hasOwnProperty(t)&&(s.plugins.settings[t]=e[t],n.push(t))
120
+ for(;i=n.shift();)s.require(i)}loadPlugin(t){var i=this,s=i.plugins,n=e.plugins[t]
121
+ if(!e.plugins.hasOwnProperty(t))throw new Error('Unable to find "'+t+'" plugin')
122
+ s.requested[t]=!0,s.loaded[t]=n.fn.apply(i,[i.plugins.settings[t]||{}]),s.names.push(t)}require(e){var t=this,i=t.plugins
123
+ if(!t.plugins.loaded.hasOwnProperty(e)){if(i.requested[e])throw new Error('Plugin has circular dependency ("'+e+'")')
124
+ t.loadPlugin(e)}return i.loaded[e]}}}(t)){constructor(e,t){var i
125
+ super(),this.order=0,this.isOpen=!1,this.isDisabled=!1,this.isInvalid=!1,this.isValid=!0,this.isLocked=!1,this.isFocused=!1,this.isInputHidden=!1,this.isSetup=!1,this.ignoreFocus=!1,this.hasOptions=!1,this.lastValue="",this.caretPos=0,this.loading=0,this.loadedSearches={},this.activeOption=null,this.activeItems=[],this.optgroups={},this.options={},this.userOptions={},this.items=[],W++
126
+ var s=w(e)
127
+ if(s.tomselect)throw new Error("Tom Select already initialized on this element")
128
+ s.tomselect=this,i=(window.getComputedStyle&&window.getComputedStyle(s,null)).getPropertyValue("direction")
129
+ const n=U(s,t)
130
+ this.settings=n,this.input=s,this.tabIndex=s.tabIndex||0,this.is_select_tag="select"===s.tagName.toLowerCase(),this.rtl=/rtl/i.test(i),this.inputId=M(s,"tomselect-"+W),this.isRequired=s.required,this.sifter=new b(this.options,{diacritics:n.diacritics}),n.mode=n.mode||(1===n.maxItems?"single":"multi"),"boolean"!=typeof n.hideSelected&&(n.hideSelected="multi"===n.mode),"boolean"!=typeof n.hidePlaceholder&&(n.hidePlaceholder="multi"!==n.mode)
131
+ var o=n.createFilter
132
+ "function"!=typeof o&&("string"==typeof o&&(o=new RegExp(o)),o instanceof RegExp?n.createFilter=e=>o.test(e):n.createFilter=()=>!0),this.initializePlugins(n.plugins),this.setupCallbacks(),this.setupTemplates()
133
+ const r=w("<div>"),l=w("<div>"),a=this._render("dropdown"),c=w('<div role="listbox" tabindex="-1">'),d=this.input.getAttribute("class")||"",p=n.mode
134
+ var u
135
+ if(C(r,n.wrapperClass,d,p),C(l,n.controlClass),G(r,l),C(a,n.dropdownClass,p),n.copyClassesToDropdown&&C(a,d),C(c,n.dropdownContentClass),G(a,c),w(n.dropdownParent||r).appendChild(a),n.hasOwnProperty("controlInput"))n.controlInput?(u=w(n.controlInput),this.focus_node=u):(u=w("<input/>"),this.focus_node=l)
136
+ else{u=w('<input type="text" autocomplete="off" size="1" />')
137
+ y(["autocorrect","autocapitalize","autocomplete"],(e=>{s.getAttribute(e)&&P(u,{[e]:s.getAttribute(e)})})),u.tabIndex=-1,l.appendChild(u),this.focus_node=u}this.wrapper=r,this.dropdown=a,this.dropdown_content=c,this.control=l,this.control_input=u,this.setup()}setup(){const e=this,t=e.settings,i=e.control_input,s=e.dropdown,n=e.dropdown_content,o=e.wrapper,r=e.control,l=e.input,a=e.focus_node,c={passive:!0},d=e.inputId+"-ts-dropdown"
138
+ P(n,{id:d}),P(a,{role:"combobox","aria-haspopup":"listbox","aria-expanded":"false","aria-controls":d})
139
+ const p=M(a,e.inputId+"-ts-control"),u="label[for='"+(e=>e.replace(/['"\\]/g,"\\$&"))(e.inputId)+"']",h=document.querySelector(u),g=e.focus.bind(e)
140
+ if(h){B(h,"click",g),P(h,{for:p})
141
+ const t=M(h,e.inputId+"-ts-label")
142
+ P(a,{"aria-labelledby":t}),P(n,{"aria-labelledby":t})}if(o.style.width=l.style.width,e.plugins.names.length){const t="plugin-"+e.plugins.names.join(" plugin-")
143
+ C([o,s],t)}(null===t.maxItems||t.maxItems>1)&&e.is_select_tag&&P(l,{multiple:"multiple"}),e.settings.placeholder&&P(i,{placeholder:t.placeholder}),!e.settings.splitOn&&e.settings.delimiter&&(e.settings.splitOn=new RegExp("\\s*"+v(e.settings.delimiter)+"+\\s*")),t.load&&t.loadThrottle&&(t.load=z(t.load,t.loadThrottle)),e.control_input.type=l.type,B(s,"click",(t=>{const i=k(t.target,"[data-selectable]")
144
+ i&&(e.onOptionSelect(t,i),H(t,!0))})),B(r,"click",(t=>{var s=k(t.target,"[data-ts-item]",r)
145
+ s&&e.onItemSelect(t,s)?H(t,!0):""==i.value&&(e.onClick(),H(t,!0))})),B(i,"mousedown",(e=>{""!==i.value&&e.stopPropagation()})),B(a,"keydown",(t=>e.onKeyDown(t))),B(i,"keypress",(t=>e.onKeyPress(t))),B(i,"input",(t=>e.onInput(t))),B(a,"resize",(()=>e.positionDropdown()),c),B(a,"blur",(t=>e.onBlur(t))),B(a,"focus",(t=>e.onFocus(t))),B(a,"paste",(t=>e.onPaste(t)))
146
+ const f=t=>{const i=t.composedPath()[0]
147
+ if(!o.contains(i)&&!s.contains(i))return e.isFocused&&e.blur(),void e.inputState()
148
+ H(t,!0)}
149
+ var m=()=>{e.isOpen&&e.positionDropdown()}
150
+ B(document,"mousedown",f),B(window,"scroll",m,c),B(window,"resize",m,c),this._destroy=()=>{document.removeEventListener("mousedown",f),window.removeEventListener("sroll",m),window.removeEventListener("resize",m),h&&h.removeEventListener("click",g)},this.revertSettings={innerHTML:l.innerHTML,tabIndex:l.tabIndex},l.tabIndex=-1,l.insertAdjacentElement("afterend",e.wrapper),e.sync(!1),t.items=[],delete t.optgroups,delete t.options,B(l,"invalid",(t=>{e.isValid&&(e.isValid=!1,e.isInvalid=!0,e.refreshState())})),e.updateOriginalInput(),e.refreshItems(),e.close(!1),e.inputState(),e.isSetup=!0,l.disabled?e.disable():e.enable(),e.on("change",this.onChange),C(l,"tomselected","ts-hidden-accessible"),e.trigger("initialize"),!0===t.preload&&e.preload()}setupOptions(e=[],t=[]){this.addOptions(e),y(t,(e=>{this.registerOptionGroup(e)}))}setupTemplates(){var e=this,t=e.settings.labelField,i=e.settings.optgroupLabelField,s={optgroup:e=>{let t=document.createElement("div")
151
+ return t.className="optgroup",t.appendChild(e.options),t},optgroup_header:(e,t)=>'<div class="optgroup-header">'+t(e[i])+"</div>",option:(e,i)=>"<div>"+i(e[t])+"</div>",item:(e,i)=>"<div>"+i(e[t])+"</div>",option_create:(e,t)=>'<div class="create">Add <strong>'+t(e.input)+"</strong>&hellip;</div>",no_results:()=>'<div class="no-results">No results found</div>',loading:()=>'<div class="spinner"></div>',not_loading:()=>{},dropdown:()=>"<div></div>"}
152
+ e.settings.render=Object.assign({},s,e.settings.render)}setupCallbacks(){var e,t,i={initialize:"onInitialize",change:"onChange",item_add:"onItemAdd",item_remove:"onItemRemove",item_select:"onItemSelect",clear:"onClear",option_add:"onOptionAdd",option_remove:"onOptionRemove",option_clear:"onOptionClear",optgroup_add:"onOptionGroupAdd",optgroup_remove:"onOptionGroupRemove",optgroup_clear:"onOptionGroupClear",dropdown_open:"onDropdownOpen",dropdown_close:"onDropdownClose",type:"onType",load:"onLoad",focus:"onFocus",blur:"onBlur"}
153
+ for(e in i)(t=this.settings[i[e]])&&this.on(e,t)}sync(e=!0){const t=this,i=e?U(t.input,{delimiter:t.settings.delimiter}):t.settings
154
+ t.setupOptions(i.options,i.optgroups),t.setValue(i.items,!0),t.lastQuery=null}onClick(){var e=this
155
+ if(e.activeItems.length>0)return e.clearActiveItems(),void e.focus()
156
+ e.isFocused&&e.isOpen?e.blur():e.focus()}onMouseDown(){}onChange(){_(this.input,"input"),_(this.input,"change")}onPaste(e){var t=this
157
+ t.isFull()||t.isInputHidden||t.isLocked?H(e):t.settings.splitOn&&setTimeout((()=>{var e=t.inputValue()
158
+ if(e.match(t.settings.splitOn)){var i=e.trim().split(t.settings.splitOn)
159
+ y(i,(e=>{t.createItem(e)}))}}),0)}onKeyPress(e){var t=this
160
+ if(!t.isLocked){var i=String.fromCharCode(e.keyCode||e.which)
161
+ return t.settings.create&&"multi"===t.settings.mode&&i===t.settings.delimiter?(t.createItem(),void H(e)):void 0}H(e)}onKeyDown(e){var t=this
162
+ if(t.isLocked)9!==e.keyCode&&H(e)
163
+ else{switch(e.keyCode){case 65:if(K(V,e))return H(e),void t.selectAll()
164
+ break
165
+ case 27:return t.isOpen&&(H(e,!0),t.close()),void t.clearActiveItems()
166
+ case 40:if(!t.isOpen&&t.hasOptions)t.open()
167
+ else if(t.activeOption){let e=t.getAdjacent(t.activeOption,1)
168
+ e&&t.setActiveOption(e)}return void H(e)
169
+ case 38:if(t.activeOption){let e=t.getAdjacent(t.activeOption,-1)
170
+ e&&t.setActiveOption(e)}return void H(e)
171
+ case 13:return void(t.isOpen&&t.activeOption?(t.onOptionSelect(e,t.activeOption),H(e)):t.settings.create&&t.createItem()&&H(e))
172
+ case 37:return void t.advanceSelection(-1,e)
173
+ case 39:return void t.advanceSelection(1,e)
174
+ case 9:return void(t.settings.selectOnTab&&(t.isOpen&&t.activeOption&&(t.onOptionSelect(e,t.activeOption),H(e)),t.settings.create&&t.createItem()&&H(e)))
175
+ case 8:case 46:return void t.deleteSelection(e)}t.isInputHidden&&!K(V,e)&&H(e)}}onInput(e){var t=this
176
+ if(!t.isLocked){var i=t.inputValue()
177
+ t.lastValue!==i&&(t.lastValue=i,t.settings.shouldLoad.call(t,i)&&t.load(i),t.refreshOptions(),t.trigger("type",i))}}onFocus(e){var t=this,i=t.isFocused
178
+ if(t.isDisabled)return t.blur(),void H(e)
179
+ t.ignoreFocus||(t.isFocused=!0,"focus"===t.settings.preload&&t.preload(),i||t.trigger("focus"),t.activeItems.length||(t.showInput(),t.refreshOptions(!!t.settings.openOnFocus)),t.refreshState())}onBlur(e){if(!1!==document.hasFocus()){var t=this
180
+ if(t.isFocused){t.isFocused=!1,t.ignoreFocus=!1
181
+ var i=()=>{t.close(),t.setActiveItem(),t.setCaret(t.items.length),t.trigger("blur")}
182
+ t.settings.create&&t.settings.createOnBlur?t.createItem(null,!1,i):i()}}}onOptionSelect(e,t){var i,s=this
183
+ t&&(t.parentElement&&t.parentElement.matches("[data-disabled]")||(t.classList.contains("create")?s.createItem(null,!0,(()=>{s.settings.closeAfterSelect&&s.close()})):void 0!==(i=t.dataset.value)&&(s.lastQuery=null,s.addItem(i),s.settings.closeAfterSelect&&s.close(),!s.settings.hideSelected&&e.type&&/click/.test(e.type)&&s.setActiveOption(t))))}onItemSelect(e,t){var i=this
184
+ return!i.isLocked&&"multi"===i.settings.mode&&(H(e),i.setActiveItem(t,e),!0)}canLoad(e){return!!this.settings.load&&!this.loadedSearches.hasOwnProperty(e)}load(e){const t=this
185
+ if(!t.canLoad(e))return
186
+ C(t.wrapper,t.settings.loadingClass),t.loading++
187
+ const i=t.loadCallback.bind(t)
188
+ t.settings.load.call(t,e,i)}loadCallback(e,t){const i=this
189
+ i.loading=Math.max(i.loading-1,0),i.lastQuery=null,i.clearActiveOption(),i.setupOptions(e,t),i.refreshOptions(i.isFocused&&!i.isInputHidden),i.loading||S(i.wrapper,i.settings.loadingClass),i.trigger("load",e,t)}preload(){var e=this.wrapper.classList
190
+ e.contains("preloaded")||(e.add("preloaded"),this.load(""))}setTextboxValue(e=""){var t=this.control_input
191
+ t.value!==e&&(t.value=e,_(t,"update"),this.lastValue=e)}getValue(){return this.is_select_tag&&this.input.hasAttribute("multiple")?this.items:this.items.join(this.settings.delimiter)}setValue(e,t){R(this,t?[]:["change"],(()=>{this.clear(t),this.addItems(e,t)}))}setMaxItems(e){0===e&&(e=null),this.settings.maxItems=e,this.refreshState()}setActiveItem(e,t){var i,s,n,o,r,l,a=this
192
+ if("single"!==a.settings.mode){if(!e)return a.clearActiveItems(),void(a.isFocused&&a.showInput())
193
+ if("click"===(i=t&&t.type.toLowerCase())&&K("shiftKey",t)&&a.activeItems.length){for(l=a.getLastActive(),(n=Array.prototype.indexOf.call(a.control.children,l))>(o=Array.prototype.indexOf.call(a.control.children,e))&&(r=n,n=o,o=r),s=n;s<=o;s++)e=a.control.children[s],-1===a.activeItems.indexOf(e)&&a.setActiveItemClass(e)
194
+ H(t)}else"click"===i&&K(V,t)||"keydown"===i&&K("shiftKey",t)?e.classList.contains("active")?a.removeActiveItem(e):a.setActiveItemClass(e):(a.clearActiveItems(),a.setActiveItemClass(e))
195
+ a.hideInput(),a.isFocused||a.focus()}}setActiveItemClass(e){const t=this,i=t.control.querySelector(".last-active")
196
+ i&&S(i,"last-active"),C(e,"active last-active"),t.trigger("item_select",e),-1==t.activeItems.indexOf(e)&&t.activeItems.push(e)}removeActiveItem(e){var t=this.activeItems.indexOf(e)
197
+ this.activeItems.splice(t,1),S(e,"active")}clearActiveItems(){S(this.activeItems,"active"),this.activeItems=[]}setActiveOption(e){e!==this.activeOption&&(this.clearActiveOption(),e&&(this.activeOption=e,P(this.focus_node,{"aria-activedescendant":e.getAttribute("id")}),P(e,{"aria-selected":"true"}),C(e,"active"),this.scrollToOption(e)))}scrollToOption(e,t){if(!e)return
198
+ const i=this.dropdown_content,s=i.clientHeight,n=i.scrollTop||0,o=e.offsetHeight,r=e.getBoundingClientRect().top-i.getBoundingClientRect().top+n
199
+ r+o>s+n?this.scroll(r-s+o,t):r<n&&this.scroll(r,t)}scroll(e,t){const i=this.dropdown_content
200
+ t&&(i.style.scrollBehavior=t),i.scrollTop=e,i.style.scrollBehavior=""}clearActiveOption(){this.activeOption&&(S(this.activeOption,"active"),P(this.activeOption,{"aria-selected":null})),this.activeOption=null,P(this.focus_node,{"aria-activedescendant":null})}selectAll(){if("single"===this.settings.mode)return
201
+ const e=this.controlChildren()
202
+ e.length&&(this.hideInput(),this.close(),this.activeItems=e,C(e,"active"))}inputState(){var e=this
203
+ e.control.contains(e.control_input)&&(P(e.control_input,{placeholder:e.settings.placeholder}),e.activeItems.length>0||!e.isFocused&&e.settings.hidePlaceholder&&e.items.length>0?(e.setTextboxValue(),e.isInputHidden=!0):(e.settings.hidePlaceholder&&e.items.length>0&&P(e.control_input,{placeholder:""}),e.isInputHidden=!1),e.wrapper.classList.toggle("input-hidden",e.isInputHidden))}hideInput(){this.inputState()}showInput(){this.inputState()}inputValue(){return this.control_input.value.trim()}focus(){var e=this
204
+ e.isDisabled||(e.ignoreFocus=!0,e.control_input.offsetWidth?e.control_input.focus():e.focus_node.focus(),setTimeout((()=>{e.ignoreFocus=!1,e.onFocus()}),0))}blur(){this.focus_node.blur(),this.onBlur()}getScoreFunction(e){return this.sifter.getScoreFunction(e,this.getSearchOptions())}getSearchOptions(){var e=this.settings,t=e.sortField
205
+ return"string"==typeof e.sortField&&(t=[{field:e.sortField}]),{fields:e.searchField,conjunction:e.searchConjunction,sort:t,nesting:e.nesting}}search(e){var t,i,s,n=this,o=this.getSearchOptions()
206
+ if(n.settings.score&&"function"!=typeof(s=n.settings.score.call(n,e)))throw new Error('Tom Select "score" setting must be a function that returns a function')
207
+ if(e!==n.lastQuery?(n.lastQuery=e,i=n.sifter.search(e,Object.assign(o,{score:s})),n.currentResults=i):i=Object.assign({},n.currentResults),n.settings.hideSelected)for(t=i.items.length-1;t>=0;t--){let e=q(i.items[t].id)
208
+ e&&-1!==n.items.indexOf(e)&&i.items.splice(t,1)}return i}refreshOptions(e=!0){var t,i,s,n,o,r,l,a,c,d,p
209
+ const u={},h=[]
210
+ var g,f=this,v=f.inputValue(),m=f.search(v),O=f.activeOption,b=f.settings.shouldOpen||!1,w=f.dropdown_content
211
+ for(O&&(c=O.dataset.value,d=O.closest("[data-group]")),n=m.items.length,"number"==typeof f.settings.maxOptions&&(n=Math.min(n,f.settings.maxOptions)),n>0&&(b=!0),t=0;t<n;t++){let e=m.items[t].id,n=f.options[e],l=f.getOption(e,!0)
212
+ for(f.settings.hideSelected||l.classList.toggle("selected",f.items.includes(e)),o=n[f.settings.optgroupField]||"",i=0,s=(r=Array.isArray(o)?o:[o])&&r.length;i<s;i++)o=r[i],f.optgroups.hasOwnProperty(o)||(o=""),u.hasOwnProperty(o)||(u[o]=document.createDocumentFragment(),h.push(o)),i>0&&(l=l.cloneNode(!0),P(l,{id:n.$id+"-clone-"+i,"aria-selected":null}),l.classList.add("ts-cloned"),S(l,"active")),c==e&&d&&d.dataset.group===o&&(O=l),u[o].appendChild(l)}this.settings.lockOptgroupOrder&&h.sort(((e,t)=>(f.optgroups[e]&&f.optgroups[e].$order||0)-(f.optgroups[t]&&f.optgroups[t].$order||0))),l=document.createDocumentFragment(),y(h,(e=>{if(f.optgroups.hasOwnProperty(e)&&u[e].children.length){let t=document.createDocumentFragment(),i=f.render("optgroup_header",f.optgroups[e])
213
+ G(t,i),G(t,u[e])
214
+ let s=f.render("optgroup",{group:f.optgroups[e],options:t})
215
+ G(l,s)}else G(l,u[e])})),w.innerHTML="",G(w,l),f.settings.highlight&&(g=w.querySelectorAll("span.highlight"),Array.prototype.forEach.call(g,(function(e){var t=e.parentNode
216
+ t.replaceChild(e.firstChild,e),t.normalize()})),m.query.length&&m.tokens.length&&y(m.tokens,(e=>{T(w,e.regex)})))
217
+ var _=e=>{let t=f.render(e,{input:v})
218
+ return t&&(b=!0,w.insertBefore(t,w.firstChild)),t}
219
+ if(f.loading?_("loading"):f.settings.shouldLoad.call(f,v)?0===m.items.length&&_("no_results"):_("not_loading"),(a=f.canCreate(v))&&(p=_("option_create")),f.hasOptions=m.items.length>0||a,b){if(m.items.length>0){if(!w.contains(O)&&"single"===f.settings.mode&&f.items.length&&(O=f.getOption(f.items[0])),!w.contains(O)){let e=0
220
+ p&&!f.settings.addPrecedence&&(e=1),O=f.selectable()[e]}}else p&&(O=p)
221
+ e&&!f.isOpen&&(f.open(),f.scrollToOption(O,"auto")),f.setActiveOption(O)}else f.clearActiveOption(),e&&f.isOpen&&f.close(!1)}selectable(){return this.dropdown_content.querySelectorAll("[data-selectable]")}addOption(e,t=!1){const i=this
222
+ if(Array.isArray(e))return i.addOptions(e,t),!1
223
+ const s=q(e[i.settings.valueField])
224
+ return null!==s&&!i.options.hasOwnProperty(s)&&(e.$order=e.$order||++i.order,e.$id=i.inputId+"-opt-"+e.$order,i.options[s]=e,i.lastQuery=null,t&&(i.userOptions[s]=t,i.trigger("option_add",s,e)),s)}addOptions(e,t=!1){y(e,(e=>{this.addOption(e,t)}))}registerOption(e){return this.addOption(e)}registerOptionGroup(e){var t=q(e[this.settings.optgroupValueField])
225
+ return null!==t&&(e.$order=e.$order||++this.order,this.optgroups[t]=e,t)}addOptionGroup(e,t){var i
226
+ t[this.settings.optgroupValueField]=e,(i=this.registerOptionGroup(t))&&this.trigger("optgroup_add",i,t)}removeOptionGroup(e){this.optgroups.hasOwnProperty(e)&&(delete this.optgroups[e],this.clearCache(),this.trigger("optgroup_remove",e))}clearOptionGroups(){this.optgroups={},this.clearCache(),this.trigger("optgroup_clear")}updateOption(e,t){const i=this
227
+ var s,n
228
+ const o=q(e),r=q(t[i.settings.valueField])
229
+ if(null===o)return
230
+ if(!i.options.hasOwnProperty(o))return
231
+ if("string"!=typeof r)throw new Error("Value must be set in option data")
232
+ const l=i.getOption(o),a=i.getItem(o)
233
+ if(t.$order=t.$order||i.options[o].$order,delete i.options[o],i.uncacheValue(r),i.options[r]=t,l){if(i.dropdown_content.contains(l)){const e=i._render("option",t)
234
+ E(l,e),i.activeOption===l&&i.setActiveOption(e)}l.remove()}a&&(-1!==(n=i.items.indexOf(o))&&i.items.splice(n,1,r),s=i._render("item",t),a.classList.contains("active")&&C(s,"active"),E(a,s)),i.lastQuery=null}removeOption(e,t){const i=this
235
+ e=D(e),i.uncacheValue(e),delete i.userOptions[e],delete i.options[e],i.lastQuery=null,i.trigger("option_remove",e),i.removeItem(e,t)}clearOptions(){this.loadedSearches={},this.userOptions={},this.clearCache()
236
+ var e={}
237
+ y(this.options,((t,i)=>{this.items.indexOf(i)>=0&&(e[i]=this.options[i])})),this.options=this.sifter.items=e,this.lastQuery=null,this.trigger("option_clear")}getOption(e,t=!1){const i=q(e)
238
+ if(null!==i&&this.options.hasOwnProperty(i)){const e=this.options[i]
239
+ if(e.$div)return e.$div
240
+ if(t)return this._render("option",e)}return null}getAdjacent(e,t,i="option"){var s
241
+ if(!e)return null
242
+ s="item"==i?this.controlChildren():this.dropdown_content.querySelectorAll("[data-selectable]")
243
+ for(let i=0;i<s.length;i++)if(s[i]==e)return t>0?s[i+1]:s[i-1]
244
+ return null}getItem(e){if("object"==typeof e)return e
245
+ var t=q(e)
246
+ return null!==t?this.control.querySelector(`[data-value="${Q(t)}"]`):null}addItems(e,t){var i=this,s=Array.isArray(e)?e:[e]
247
+ for(let e=0,n=(s=s.filter((e=>-1===i.items.indexOf(e)))).length;e<n;e++)i.isPending=e<n-1,i.addItem(s[e],t)}addItem(e,t){R(this,t?[]:["change"],(()=>{var i,s
248
+ const n=this,o=n.settings.mode,r=q(e)
249
+ if((!r||-1===n.items.indexOf(r)||("single"===o&&n.close(),"single"!==o&&n.settings.duplicates))&&null!==r&&n.options.hasOwnProperty(r)&&("single"===o&&n.clear(t),"multi"!==o||!n.isFull())){if(i=n._render("item",n.options[r]),n.control.contains(i)&&(i=i.cloneNode(!0)),s=n.isFull(),n.items.splice(n.caretPos,0,r),n.insertAtCaret(i),n.isSetup){if(!n.isPending&&n.settings.hideSelected){let e=n.getOption(r),t=n.getAdjacent(e,1)
250
+ t&&n.setActiveOption(t)}n.isPending||n.refreshOptions(n.isFocused&&"single"!==o),0!=n.settings.closeAfterSelect&&n.isFull()?n.close():n.isPending||n.positionDropdown(),n.trigger("item_add",r,i),n.isPending||n.updateOriginalInput({silent:t})}(!n.isPending||!s&&n.isFull())&&(n.inputState(),n.refreshState())}}))}removeItem(e=null,t){const i=this
251
+ if(!(e=i.getItem(e)))return
252
+ var s,n
253
+ const o=e.dataset.value
254
+ s=L(e),e.remove(),e.classList.contains("active")&&(n=i.activeItems.indexOf(e),i.activeItems.splice(n,1),S(e,"active")),i.items.splice(s,1),i.lastQuery=null,!i.settings.persist&&i.userOptions.hasOwnProperty(o)&&i.removeOption(o,t),s<i.caretPos&&i.setCaret(i.caretPos-1),i.updateOriginalInput({silent:t}),i.refreshState(),i.positionDropdown(),i.trigger("item_remove",o,e)}createItem(e=null,t=!0,i=(()=>{})){var s,n=this,o=n.caretPos
255
+ if(e=e||n.inputValue(),!n.canCreate(e))return i(),!1
256
+ n.lock()
257
+ var r=!1,l=e=>{if(n.unlock(),!e||"object"!=typeof e)return i()
258
+ var s=q(e[n.settings.valueField])
259
+ if("string"!=typeof s)return i()
260
+ n.setTextboxValue(),n.addOption(e,!0),n.setCaret(o),n.addItem(s),n.refreshOptions(t&&"single"!==n.settings.mode),i(e),r=!0}
261
+ return s="function"==typeof n.settings.create?n.settings.create.call(this,e,l):{[n.settings.labelField]:e,[n.settings.valueField]:e},r||l(s),!0}refreshItems(){var e=this
262
+ e.lastQuery=null,e.isSetup&&e.addItems(e.items),e.updateOriginalInput(),e.refreshState()}refreshState(){const e=this
263
+ e.refreshValidityState()
264
+ const t=e.isFull(),i=e.isLocked
265
+ e.wrapper.classList.toggle("rtl",e.rtl)
266
+ const s=e.wrapper.classList
267
+ var n
268
+ s.toggle("focus",e.isFocused),s.toggle("disabled",e.isDisabled),s.toggle("required",e.isRequired),s.toggle("invalid",!e.isValid),s.toggle("locked",i),s.toggle("full",t),s.toggle("input-active",e.isFocused&&!e.isInputHidden),s.toggle("dropdown-active",e.isOpen),s.toggle("has-options",(n=e.options,0===Object.keys(n).length)),s.toggle("has-items",e.items.length>0)}refreshValidityState(){var e=this
269
+ e.input.checkValidity&&(e.isValid=e.input.checkValidity(),e.isInvalid=!e.isValid)}isFull(){return null!==this.settings.maxItems&&this.items.length>=this.settings.maxItems}updateOriginalInput(e={}){const t=this
270
+ var i,s
271
+ const n=t.input.querySelector('option[value=""]')
272
+ if(t.is_select_tag){const e=[]
273
+ function o(i,s,o){return i||(i=w('<option value="'+N(s)+'">'+N(o)+"</option>")),i!=n&&t.input.append(i),e.push(i),i.selected=!0,i}t.input.querySelectorAll("option:checked").forEach((e=>{e.selected=!1})),0==t.items.length&&"single"==t.settings.mode?o(n,"",""):t.items.forEach((n=>{if(i=t.options[n],s=i[t.settings.labelField]||"",e.includes(i.$option)){o(t.input.querySelector(`option[value="${Q(n)}"]:not(:checked)`),n,s)}else i.$option=o(i.$option,n,s)}))}else t.input.value=t.getValue()
274
+ t.isSetup&&(e.silent||t.trigger("change",t.getValue()))}open(){var e=this
275
+ e.isLocked||e.isOpen||"multi"===e.settings.mode&&e.isFull()||(e.isOpen=!0,P(e.focus_node,{"aria-expanded":"true"}),e.refreshState(),I(e.dropdown,{visibility:"hidden",display:"block"}),e.positionDropdown(),I(e.dropdown,{visibility:"visible",display:"block"}),e.focus(),e.trigger("dropdown_open",e.dropdown))}close(e=!0){var t=this,i=t.isOpen
276
+ e&&(t.setTextboxValue(),"single"===t.settings.mode&&t.items.length&&t.hideInput()),t.isOpen=!1,P(t.focus_node,{"aria-expanded":"false"}),I(t.dropdown,{display:"none"}),t.settings.hideSelected&&t.clearActiveOption(),t.refreshState(),i&&t.trigger("dropdown_close",t.dropdown)}positionDropdown(){if("body"===this.settings.dropdownParent){var e=this.control,t=e.getBoundingClientRect(),i=e.offsetHeight+t.top+window.scrollY,s=t.left+window.scrollX
277
+ I(this.dropdown,{width:t.width+"px",top:i+"px",left:s+"px"})}}clear(e){var t=this
278
+ if(t.items.length){var i=t.controlChildren()
279
+ y(i,(e=>{t.removeItem(e,!0)})),t.showInput(),e||t.updateOriginalInput(),t.trigger("clear")}}insertAtCaret(e){const t=this,i=t.caretPos,s=t.control
280
+ s.insertBefore(e,s.children[i]),t.setCaret(i+1)}deleteSelection(e){var t,i,s,n,o,r=this
281
+ t=e&&8===e.keyCode?-1:1,i={start:(o=r.control_input).selectionStart||0,length:(o.selectionEnd||0)-(o.selectionStart||0)}
282
+ const l=[]
283
+ if(r.activeItems.length)n=F(r.activeItems,t),s=L(n),t>0&&s++,y(r.activeItems,(e=>l.push(e)))
284
+ else if((r.isFocused||"single"===r.settings.mode)&&r.items.length){const e=r.controlChildren()
285
+ t<0&&0===i.start&&0===i.length?l.push(e[r.caretPos-1]):t>0&&i.start===r.inputValue().length&&l.push(e[r.caretPos])}const a=l.map((e=>e.dataset.value))
286
+ if(!a.length||"function"==typeof r.settings.onDelete&&!1===r.settings.onDelete.call(r,a,e))return!1
287
+ for(H(e,!0),void 0!==s&&r.setCaret(s);l.length;)r.removeItem(l.pop())
288
+ return r.showInput(),r.positionDropdown(),r.refreshOptions(!1),!0}advanceSelection(e,t){var i,s,n=this
289
+ n.rtl&&(e*=-1),n.inputValue().length||(K(V,t)||K("shiftKey",t)?(s=(i=n.getLastActive(e))?i.classList.contains("active")?n.getAdjacent(i,e,"item"):i:e>0?n.control_input.nextElementSibling:n.control_input.previousElementSibling)&&(s.classList.contains("active")&&n.removeActiveItem(i),n.setActiveItemClass(s)):n.moveCaret(e))}moveCaret(e){}getLastActive(e){let t=this.control.querySelector(".last-active")
290
+ if(t)return t
291
+ var i=this.control.querySelectorAll(".active")
292
+ return i?F(i,e):void 0}setCaret(e){this.caretPos=this.items.length}controlChildren(){return Array.from(this.control.querySelectorAll("[data-ts-item]"))}lock(){this.close(),this.isLocked=!0,this.refreshState()}unlock(){this.isLocked=!1,this.refreshState()}disable(){var e=this
293
+ e.input.disabled=!0,e.control_input.disabled=!0,e.focus_node.tabIndex=-1,e.isDisabled=!0,e.lock()}enable(){var e=this
294
+ e.input.disabled=!1,e.control_input.disabled=!1,e.focus_node.tabIndex=e.tabIndex,e.isDisabled=!1,e.unlock()}destroy(){var e=this,t=e.revertSettings
295
+ e.trigger("destroy"),e.off(),e.wrapper.remove(),e.dropdown.remove(),e.input.innerHTML=t.innerHTML,e.input.tabIndex=t.tabIndex,S(e.input,"tomselected","ts-hidden-accessible"),e._destroy(),delete e.input.tomselect}render(e,t){return"function"!=typeof this.settings.render[e]?null:this._render(e,t)}_render(e,t){var i,s,n=""
296
+ const o=this
297
+ return"option"!==e&&"item"!=e||(n=D(t[o.settings.valueField])),null==(s=o.settings.render[e].call(this,t,N))||(s=w(s),"option"===e||"option_create"===e?t[o.settings.disabledField]?P(s,{"aria-disabled":"true"}):P(s,{"data-selectable":""}):"optgroup"===e&&(i=t.group[o.settings.optgroupValueField],P(s,{"data-group":i}),t.group[o.settings.disabledField]&&P(s,{"data-disabled":""})),"option"!==e&&"item"!==e||(P(s,{"data-value":n}),"item"===e?(C(s,o.settings.itemClass),P(s,{"data-ts-item":""})):(C(s,o.settings.optionClass),P(s,{role:"option",id:t.$id}),o.options[n].$div=s))),s}clearCache(){y(this.options,((e,t)=>{e.$div&&(e.$div.remove(),delete e.$div)}))}uncacheValue(e){const t=this.getOption(e)
298
+ t&&t.remove()}canCreate(e){return this.settings.create&&e.length>0&&this.settings.createFilter.call(this,e)}hook(e,t,i){var s=this,n=s[t]
299
+ s[t]=function(){var t,o
300
+ return"after"===e&&(t=n.apply(s,arguments)),o=i.apply(s,arguments),"instead"===e?o:("before"===e&&(t=n.apply(s,arguments)),t)}}}return J.define("change_listener",(function(){B(this.input,"change",(()=>{this.sync()}))})),J.define("checkbox_options",(function(){var e=this,t=e.onOptionSelect
301
+ e.settings.hideSelected=!1
302
+ var i=function(e){setTimeout((()=>{var t=e.querySelector("input")
303
+ e.classList.contains("selected")?t.checked=!0:t.checked=!1}),1)}
304
+ e.hook("after","setupTemplates",(()=>{var t=e.settings.render.option
305
+ e.settings.render.option=(i,s)=>{var n=w(t.call(e,i,s)),o=document.createElement("input")
306
+ o.addEventListener("click",(function(e){H(e)})),o.type="checkbox"
307
+ const r=q(i[e.settings.valueField])
308
+ return r&&e.items.indexOf(r)>-1&&(o.checked=!0),n.prepend(o),n}})),e.on("item_remove",(t=>{var s=e.getOption(t)
309
+ s&&(s.classList.remove("selected"),i(s))})),e.hook("instead","onOptionSelect",((s,n)=>{if(n.classList.contains("selected"))return n.classList.remove("selected"),e.removeItem(n.dataset.value),e.refreshOptions(),void H(s,!0)
310
+ t.call(e,s,n),i(n)}))})),J.define("clear_button",(function(e){const t=this,i=Object.assign({className:"clear-button",title:"Clear All",html:e=>`<div class="${e.className}" title="${e.title}">&times;</div>`},e)
311
+ t.on("initialize",(()=>{var e=w(i.html(i))
312
+ e.addEventListener("click",(e=>{t.clear(),"single"===t.settings.mode&&t.settings.allowEmptyOption&&t.addItem(""),e.preventDefault(),e.stopPropagation()})),t.control.appendChild(e)}))})),J.define("drag_drop",(function(){var e=this
313
+ if(!$.fn.sortable)throw new Error('The "drag_drop" plugin requires jQuery UI "sortable".')
314
+ if("multi"===e.settings.mode){var t=e.lock,i=e.unlock
315
+ e.hook("instead","lock",(()=>{var i=$(e.control).data("sortable")
316
+ return i&&i.disable(),t.call(e)})),e.hook("instead","unlock",(()=>{var t=$(e.control).data("sortable")
317
+ return t&&t.enable(),i.call(e)})),e.on("initialize",(()=>{var t=$(e.control).sortable({items:"[data-value]",forcePlaceholderSize:!0,disabled:e.isLocked,start:(e,i)=>{i.placeholder.css("width",i.helper.css("width")),t.css({overflow:"visible"})},stop:()=>{t.css({overflow:"hidden"})
318
+ var i=[]
319
+ t.children("[data-value]").each((function(){this.dataset.value&&i.push(this.dataset.value)})),e.setValue(i)}})}))}})),J.define("dropdown_header",(function(e){const t=this,i=Object.assign({title:"Untitled",headerClass:"dropdown-header",titleRowClass:"dropdown-header-title",labelClass:"dropdown-header-label",closeClass:"dropdown-header-close",html:e=>'<div class="'+e.headerClass+'"><div class="'+e.titleRowClass+'"><span class="'+e.labelClass+'">'+e.title+'</span><a class="'+e.closeClass+'">&times;</a></div></div>'},e)
320
+ t.on("initialize",(()=>{var e=w(i.html(i)),s=e.querySelector("."+i.closeClass)
321
+ s&&s.addEventListener("click",(e=>{H(e,!0),t.close()})),t.dropdown.insertBefore(e,t.dropdown.firstChild)}))})),J.define("caret_position",(function(){var e=this
322
+ e.hook("instead","setCaret",(t=>{"single"!==e.settings.mode&&e.control.contains(e.control_input)?(t=Math.max(0,Math.min(e.items.length,t)))==e.caretPos||e.isPending||e.controlChildren().forEach(((i,s)=>{s<t?e.control_input.insertAdjacentElement("beforebegin",i):e.control.appendChild(i)})):t=e.items.length,e.caretPos=t})),e.hook("instead","moveCaret",(t=>{if(!e.isFocused)return
323
+ const i=e.getLastActive(t)
324
+ if(i){const s=L(i)
325
+ e.setCaret(t>0?s+1:s),e.setActiveItem()}else e.setCaret(e.caretPos+t)}))})),J.define("dropdown_input",(function(){var e=this
326
+ e.settings.shouldOpen=!0,e.hook("before","setup",(()=>{e.focus_node=e.control,C(e.control_input,"dropdown-input")
327
+ const t=w('<div class="dropdown-input-wrap">')
328
+ t.append(e.control_input),e.dropdown.insertBefore(t,e.dropdown.firstChild)})),e.on("initialize",(()=>{e.control_input.addEventListener("keydown",(t=>{switch(t.keyCode){case 27:return e.isOpen&&(H(t,!0),e.close()),void e.clearActiveItems()
329
+ case 9:e.focus_node.tabIndex=-1}return e.onKeyDown.call(e,t)})),e.on("blur",(()=>{e.focus_node.tabIndex=e.isDisabled?-1:e.tabIndex})),e.on("dropdown_open",(()=>{e.control_input.focus()}))
330
+ const t=e.onBlur
331
+ e.hook("instead","onBlur",(i=>{if(!i||i.relatedTarget!=e.control_input)return t.call(e)})),B(e.control_input,"blur",(()=>e.onBlur())),e.hook("before","close",(()=>{e.isOpen&&e.focus_node.focus()}))}))})),J.define("input_autogrow",(function(){var e=this
332
+ e.on("initialize",(()=>{var t=document.createElement("span"),i=e.control_input
333
+ t.style.cssText="position:absolute; top:-99999px; left:-99999px; width:auto; padding:0; white-space:pre; ",e.wrapper.appendChild(t)
334
+ for(const e of["letterSpacing","fontSize","fontFamily","fontWeight","textTransform"])t.style[e]=i.style[e]
335
+ var s=()=>{e.items.length>0?(t.textContent=i.value,i.style.width=t.clientWidth+"px"):i.style.width=""}
336
+ s(),e.on("update item_add item_remove",s),B(i,"input",s),B(i,"keyup",s),B(i,"blur",s),B(i,"update",s)}))})),J.define("no_backspace_delete",(function(){var e=this,t=e.deleteSelection
337
+ this.hook("instead","deleteSelection",(i=>!!e.activeItems.length&&t.call(e,i)))})),J.define("no_active_items",(function(){this.hook("instead","setActiveItem",(()=>{})),this.hook("instead","selectAll",(()=>{}))})),J.define("optgroup_columns",(function(){var e=this,t=e.onKeyDown
338
+ e.hook("instead","onKeyDown",(i=>{var s,n,o,r
339
+ if(!e.isOpen||37!==i.keyCode&&39!==i.keyCode)return t.call(e,i)
340
+ r=k(e.activeOption,"[data-group]"),s=L(e.activeOption,"[data-selectable]"),r&&(r=37===i.keyCode?r.previousSibling:r.nextSibling)&&(n=(o=r.querySelectorAll("[data-selectable]"))[Math.min(o.length-1,s)])&&e.setActiveOption(n)}))})),J.define("remove_button",(function(e){const t=Object.assign({label:"&times;",title:"Remove",className:"remove",append:!0},e)
341
+ var i=this
342
+ if(t.append){var s='<a href="javascript:void(0)" class="'+t.className+'" tabindex="-1" title="'+N(t.title)+'">'+t.label+"</a>"
343
+ i.hook("after","setupTemplates",(()=>{var e=i.settings.render.item
344
+ i.settings.render.item=(t,n)=>{var o=w(e.call(i,t,n)),r=w(s)
345
+ return o.appendChild(r),B(r,"mousedown",(e=>{H(e,!0)})),B(r,"click",(e=>{if(H(e,!0),!i.isLocked){var t=o.dataset.value
346
+ i.removeItem(t),i.refreshOptions(!1)}})),o}}))}})),J.define("restore_on_backspace",(function(e){const t=this,i=Object.assign({text:e=>e[t.settings.labelField]},e)
347
+ t.on("item_remove",(function(e){if(""===t.control_input.value.trim()){var s=t.options[e]
348
+ s&&t.setTextboxValue(i.text.call(t,s))}}))})),J.define("virtual_scroll",(function(){const e=this,t=e.canLoad,i=e.clearActiveOption,s=e.loadCallback
349
+ var n,o={},r=!1
350
+ if(!e.settings.firstUrl)throw"virtual_scroll plugin requires a firstUrl() method"
351
+ function l(t){return!("number"==typeof e.settings.maxOptions&&n.children.length>=e.settings.maxOptions)&&!(!(t in o)||!o[t])}e.settings.sortField=[{field:"$order"},{field:"$score"}],e.setNextUrl=function(e,t){o[e]=t},e.getUrl=function(t){if(t in o){const e=o[t]
352
+ return o[t]=!1,e}return o={},e.settings.firstUrl(t)},e.hook("instead","clearActiveOption",(()=>{if(!r)return i.call(e)})),e.hook("instead","canLoad",(i=>i in o?l(i):t.call(e,i))),e.hook("instead","loadCallback",((t,i)=>{r||e.clearOptions(),s.call(e,t,i),r=!1})),e.hook("after","refreshOptions",(()=>{const t=e.lastValue
353
+ var i
354
+ l(t)?(i=e.render("loading_more",{query:t}))&&i.setAttribute("data-selectable",""):t in o&&!n.querySelector(".no-results")&&(i=e.render("no_more_results",{query:t})),i&&(C(i,e.settings.optionClass),n.append(i))})),e.on("initialize",(()=>{n=e.dropdown_content,e.settings.render=Object.assign({},{loading_more:function(){return'<div class="loading-more-results">Loading more results ... </div>'},no_more_results:function(){return'<div class="no-more-results">No more results</div>'}},e.settings.render),n.addEventListener("scroll",(function(){n.clientHeight/(n.scrollHeight-n.scrollTop)<.95||l(e.lastValue)&&(r||(r=!0,e.load.call(e,e.lastValue)))}))}))})),J}))
355
+ var tomSelect=function(e,t){return new TomSelect(e,t)}
356
+ //# sourceMappingURL=tom-select.complete.min.js.map
lib/tom-select/tom-select.css ADDED
@@ -0,0 +1,334 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * tom-select.css (v2.0.0-rc.4)
3
+ * Copyright (c) contributors
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this
6
+ * file except in compliance with the License. You may obtain a copy of the License at:
7
+ * http://www.apache.org/licenses/LICENSE-2.0
8
+ *
9
+ * Unless required by applicable law or agreed to in writing, software distributed under
10
+ * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
11
+ * ANY KIND, either express or implied. See the License for the specific language
12
+ * governing permissions and limitations under the License.
13
+ *
14
+ */
15
+ .ts-wrapper.plugin-drag_drop.multi > .ts-control > div.ui-sortable-placeholder {
16
+ visibility: visible !important;
17
+ background: #f2f2f2 !important;
18
+ background: rgba(0, 0, 0, 0.06) !important;
19
+ border: 0 none !important;
20
+ box-shadow: inset 0 0 12px 4px #fff; }
21
+
22
+ .ts-wrapper.plugin-drag_drop .ui-sortable-placeholder::after {
23
+ content: '!';
24
+ visibility: hidden; }
25
+
26
+ .ts-wrapper.plugin-drag_drop .ui-sortable-helper {
27
+ box-shadow: 0 2px 5px rgba(0, 0, 0, 0.2); }
28
+
29
+ .plugin-checkbox_options .option input {
30
+ margin-right: 0.5rem; }
31
+
32
+ .plugin-clear_button .ts-control {
33
+ padding-right: calc( 1em + (3 * 6px)) !important; }
34
+
35
+ .plugin-clear_button .clear-button {
36
+ opacity: 0;
37
+ position: absolute;
38
+ top: 8px;
39
+ right: calc(8px - 6px);
40
+ margin-right: 0 !important;
41
+ background: transparent !important;
42
+ transition: opacity 0.5s;
43
+ cursor: pointer; }
44
+
45
+ .plugin-clear_button.single .clear-button {
46
+ right: calc(8px - 6px + 2rem); }
47
+
48
+ .plugin-clear_button.focus.has-items .clear-button,
49
+ .plugin-clear_button:hover.has-items .clear-button {
50
+ opacity: 1; }
51
+
52
+ .ts-wrapper .dropdown-header {
53
+ position: relative;
54
+ padding: 10px 8px;
55
+ border-bottom: 1px solid #d0d0d0;
56
+ background: #f8f8f8;
57
+ border-radius: 3px 3px 0 0; }
58
+
59
+ .ts-wrapper .dropdown-header-close {
60
+ position: absolute;
61
+ right: 8px;
62
+ top: 50%;
63
+ color: #303030;
64
+ opacity: 0.4;
65
+ margin-top: -12px;
66
+ line-height: 20px;
67
+ font-size: 20px !important; }
68
+
69
+ .ts-wrapper .dropdown-header-close:hover {
70
+ color: black; }
71
+
72
+ .plugin-dropdown_input.focus.dropdown-active .ts-control {
73
+ box-shadow: none;
74
+ border: 1px solid #d0d0d0; }
75
+
76
+ .plugin-dropdown_input .dropdown-input {
77
+ border: 1px solid #d0d0d0;
78
+ border-width: 0 0 1px 0;
79
+ display: block;
80
+ padding: 8px 8px;
81
+ box-shadow: none;
82
+ width: 100%;
83
+ background: transparent; }
84
+
85
+ .ts-wrapper.plugin-input_autogrow.has-items .ts-control > input {
86
+ min-width: 0; }
87
+
88
+ .ts-wrapper.plugin-input_autogrow.has-items.focus .ts-control > input {
89
+ flex: none;
90
+ min-width: 4px; }
91
+ .ts-wrapper.plugin-input_autogrow.has-items.focus .ts-control > input::-webkit-input-placeholder {
92
+ color: transparent; }
93
+ .ts-wrapper.plugin-input_autogrow.has-items.focus .ts-control > input::-ms-input-placeholder {
94
+ color: transparent; }
95
+ .ts-wrapper.plugin-input_autogrow.has-items.focus .ts-control > input::placeholder {
96
+ color: transparent; }
97
+
98
+ .ts-dropdown.plugin-optgroup_columns .ts-dropdown-content {
99
+ display: flex; }
100
+
101
+ .ts-dropdown.plugin-optgroup_columns .optgroup {
102
+ border-right: 1px solid #f2f2f2;
103
+ border-top: 0 none;
104
+ flex-grow: 1;
105
+ flex-basis: 0;
106
+ min-width: 0; }
107
+
108
+ .ts-dropdown.plugin-optgroup_columns .optgroup:last-child {
109
+ border-right: 0 none; }
110
+
111
+ .ts-dropdown.plugin-optgroup_columns .optgroup:before {
112
+ display: none; }
113
+
114
+ .ts-dropdown.plugin-optgroup_columns .optgroup-header {
115
+ border-top: 0 none; }
116
+
117
+ .ts-wrapper.plugin-remove_button .item {
118
+ display: inline-flex;
119
+ align-items: center;
120
+ padding-right: 0 !important; }
121
+
122
+ .ts-wrapper.plugin-remove_button .item .remove {
123
+ color: inherit;
124
+ text-decoration: none;
125
+ vertical-align: middle;
126
+ display: inline-block;
127
+ padding: 2px 6px;
128
+ border-left: 1px solid #d0d0d0;
129
+ border-radius: 0 2px 2px 0;
130
+ box-sizing: border-box;
131
+ margin-left: 6px; }
132
+
133
+ .ts-wrapper.plugin-remove_button .item .remove:hover {
134
+ background: rgba(0, 0, 0, 0.05); }
135
+
136
+ .ts-wrapper.plugin-remove_button .item.active .remove {
137
+ border-left-color: #cacaca; }
138
+
139
+ .ts-wrapper.plugin-remove_button.disabled .item .remove:hover {
140
+ background: none; }
141
+
142
+ .ts-wrapper.plugin-remove_button.disabled .item .remove {
143
+ border-left-color: white; }
144
+
145
+ .ts-wrapper.plugin-remove_button .remove-single {
146
+ position: absolute;
147
+ right: 0;
148
+ top: 0;
149
+ font-size: 23px; }
150
+
151
+ .ts-wrapper {
152
+ position: relative; }
153
+
154
+ .ts-dropdown,
155
+ .ts-control,
156
+ .ts-control input {
157
+ color: #303030;
158
+ font-family: inherit;
159
+ font-size: 13px;
160
+ line-height: 18px;
161
+ font-smoothing: inherit; }
162
+
163
+ .ts-control,
164
+ .ts-wrapper.single.input-active .ts-control {
165
+ background: #fff;
166
+ cursor: text; }
167
+
168
+ .ts-control {
169
+ border: 1px solid #d0d0d0;
170
+ padding: 8px 8px;
171
+ width: 100%;
172
+ overflow: hidden;
173
+ position: relative;
174
+ z-index: 1;
175
+ box-sizing: border-box;
176
+ box-shadow: none;
177
+ border-radius: 3px;
178
+ display: flex;
179
+ flex-wrap: wrap; }
180
+ .ts-wrapper.multi.has-items .ts-control {
181
+ padding: calc( 8px - 2px - 0) 8px calc( 8px - 2px - 3px - 0); }
182
+ .full .ts-control {
183
+ background-color: #fff; }
184
+ .disabled .ts-control,
185
+ .disabled .ts-control * {
186
+ cursor: default !important; }
187
+ .focus .ts-control {
188
+ box-shadow: none; }
189
+ .ts-control > * {
190
+ vertical-align: baseline;
191
+ display: inline-block; }
192
+ .ts-wrapper.multi .ts-control > div {
193
+ cursor: pointer;
194
+ margin: 0 3px 3px 0;
195
+ padding: 2px 6px;
196
+ background: #f2f2f2;
197
+ color: #303030;
198
+ border: 0 solid #d0d0d0; }
199
+ .ts-wrapper.multi .ts-control > div.active {
200
+ background: #e8e8e8;
201
+ color: #303030;
202
+ border: 0 solid #cacaca; }
203
+ .ts-wrapper.multi.disabled .ts-control > div, .ts-wrapper.multi.disabled .ts-control > div.active {
204
+ color: #7d7c7c;
205
+ background: white;
206
+ border: 0 solid white; }
207
+ .ts-control > input {
208
+ flex: 1 1 auto;
209
+ min-width: 7rem;
210
+ display: inline-block !important;
211
+ padding: 0 !important;
212
+ min-height: 0 !important;
213
+ max-height: none !important;
214
+ max-width: 100% !important;
215
+ margin: 0 !important;
216
+ text-indent: 0 !important;
217
+ border: 0 none !important;
218
+ background: none !important;
219
+ line-height: inherit !important;
220
+ -webkit-user-select: auto !important;
221
+ -moz-user-select: auto !important;
222
+ -ms-user-select: auto !important;
223
+ user-select: auto !important;
224
+ box-shadow: none !important; }
225
+ .ts-control > input::-ms-clear {
226
+ display: none; }
227
+ .ts-control > input:focus {
228
+ outline: none !important; }
229
+ .has-items .ts-control > input {
230
+ margin: 0 4px !important; }
231
+ .ts-control.rtl {
232
+ text-align: right; }
233
+ .ts-control.rtl.single .ts-control:after {
234
+ left: 15px;
235
+ right: auto; }
236
+ .ts-control.rtl .ts-control > input {
237
+ margin: 0 4px 0 -2px !important; }
238
+ .disabled .ts-control {
239
+ opacity: 0.5;
240
+ background-color: #fafafa; }
241
+ .input-hidden .ts-control > input {
242
+ opacity: 0;
243
+ position: absolute;
244
+ left: -10000px; }
245
+
246
+ .ts-dropdown {
247
+ position: absolute;
248
+ top: 100%;
249
+ left: 0;
250
+ width: 100%;
251
+ z-index: 10;
252
+ border: 1px solid #d0d0d0;
253
+ background: #fff;
254
+ margin: 0.25rem 0 0 0;
255
+ border-top: 0 none;
256
+ box-sizing: border-box;
257
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
258
+ border-radius: 0 0 3px 3px; }
259
+ .ts-dropdown [data-selectable] {
260
+ cursor: pointer;
261
+ overflow: hidden; }
262
+ .ts-dropdown [data-selectable] .highlight {
263
+ background: rgba(125, 168, 208, 0.2);
264
+ border-radius: 1px; }
265
+ .ts-dropdown .option,
266
+ .ts-dropdown .optgroup-header,
267
+ .ts-dropdown .no-results,
268
+ .ts-dropdown .create {
269
+ padding: 5px 8px; }
270
+ .ts-dropdown .option, .ts-dropdown [data-disabled], .ts-dropdown [data-disabled] [data-selectable].option {
271
+ cursor: inherit;
272
+ opacity: 0.5; }
273
+ .ts-dropdown [data-selectable].option {
274
+ opacity: 1;
275
+ cursor: pointer; }
276
+ .ts-dropdown .optgroup:first-child .optgroup-header {
277
+ border-top: 0 none; }
278
+ .ts-dropdown .optgroup-header {
279
+ color: #303030;
280
+ background: #fff;
281
+ cursor: default; }
282
+ .ts-dropdown .create:hover,
283
+ .ts-dropdown .option:hover,
284
+ .ts-dropdown .active {
285
+ background-color: #f5fafd;
286
+ color: #495c68; }
287
+ .ts-dropdown .create:hover.create,
288
+ .ts-dropdown .option:hover.create,
289
+ .ts-dropdown .active.create {
290
+ color: #495c68; }
291
+ .ts-dropdown .create {
292
+ color: rgba(48, 48, 48, 0.5); }
293
+ .ts-dropdown .spinner {
294
+ display: inline-block;
295
+ width: 30px;
296
+ height: 30px;
297
+ margin: 5px 8px; }
298
+ .ts-dropdown .spinner:after {
299
+ content: " ";
300
+ display: block;
301
+ width: 24px;
302
+ height: 24px;
303
+ margin: 3px;
304
+ border-radius: 50%;
305
+ border: 5px solid #d0d0d0;
306
+ border-color: #d0d0d0 transparent #d0d0d0 transparent;
307
+ animation: lds-dual-ring 1.2s linear infinite; }
308
+
309
+ @keyframes lds-dual-ring {
310
+ 0% {
311
+ transform: rotate(0deg); }
312
+ 100% {
313
+ transform: rotate(360deg); } }
314
+
315
+ .ts-dropdown-content {
316
+ overflow-y: auto;
317
+ overflow-x: hidden;
318
+ max-height: 200px;
319
+ overflow-scrolling: touch;
320
+ scroll-behavior: smooth; }
321
+
322
+ .ts-hidden-accessible {
323
+ border: 0 !important;
324
+ clip: rect(0 0 0 0) !important;
325
+ -webkit-clip-path: inset(50%) !important;
326
+ clip-path: inset(50%) !important;
327
+ height: 1px !important;
328
+ overflow: hidden !important;
329
+ padding: 0 !important;
330
+ position: absolute !important;
331
+ width: 1px !important;
332
+ white-space: nowrap !important; }
333
+
334
+ /*# sourceMappingURL=tom-select.css.map */
lib/vis-9.1.2/vis-network.css ADDED
The diff for this file is too large to render. See raw diff
 
lib/vis-9.1.2/vis-network.min.js ADDED
The diff for this file is too large to render. See raw diff
 
requirements.txt CHANGED
@@ -5,4 +5,6 @@ transformers
5
  wordcloud
6
  pydantic
7
  uvicorn
8
- gliner
 
 
 
5
  wordcloud
6
  pydantic
7
  uvicorn
8
+ gliner
9
+ pygraphviz
10
+ graphviz
space/.gitignore CHANGED
@@ -34,6 +34,8 @@ wordcloud.png
34
  wordcloud_output
35
  extracted_entities
36
  entities
 
 
37
 
38
  # Gradio cache & config
39
  gradio_cached_examples/
 
34
  wordcloud_output
35
  extracted_entities
36
  entities
37
+ mindmap.png
38
+ mindmap_output
39
 
40
  # Gradio cache & config
41
  gradio_cached_examples/
space/app.py CHANGED
@@ -2,22 +2,75 @@ from fastapi import FastAPI,HTTPException
2
  from pydantic import BaseModel
3
  from fastapi.responses import FileResponse
4
  import gradio as gr
5
- from entity_recognition import extract_entities # Import entity extraction function
6
  #from entity_recognition import generate_word_cloud
7
  from wordcloud import WordCloud
8
  from summarization import summarizer
9
- import os
10
  from utils import list_files,process_file
11
 
12
  # import threading
13
- import time
14
  app = FastAPI()
15
 
16
  # Request Model
17
  class TextRequest(BaseModel):
18
  text: str
 
 
19
 
20
- # Summarization Endpoint
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
21
  @app.post("/summarize")
22
  def summarize_text(request: TextRequest):
23
  chunks = [request.text[i:i+500] for i in range(0, len(request.text), 500)]
@@ -44,39 +97,69 @@ def extract_entities_endpoint(request: TextRequest):
44
  # Word Cloud Generation Endpoint
45
  @app.post("/wordcloud")
46
  def generate_word_cloud(request: TextRequest):
47
- wordcloud = WordCloud(width=800, height=600,max_font_size=40, min_font_size=10, background_color="white").generate(request.text)
48
  img_path = "wordcloud.png"
49
  wordcloud.to_file(img_path)
50
  return FileResponse(img_path, media_type="image/png", filename="wordcloud.png")
51
 
52
 
53
-
54
  # Gradio UI
55
  with gr.Blocks() as iface:
56
  gr.Markdown("File Selector")
57
  gr.Markdown("Choose a file and process it for summarization, entity recognition, and word cloud generation.")
58
 
59
- # File selection dropdown
60
- file_dropdown = gr.Dropdown(choices=list_files(), label="Select a File", interactive=True)
61
- process_button = gr.Button("Process")
 
62
 
 
 
 
 
63
 
64
- # Outputs
65
- output_summary = gr.Textbox(label="Summarized Text")
66
- output_entities = gr.JSON(label="Entities")
67
- output_wordcloud = gr.Image(label="Word Cloud")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
68
 
69
-
70
  # Process selected file
71
  process_button.click(
72
  fn=process_file,
73
  inputs=file_dropdown,
74
- outputs=[output_summary, output_entities, output_wordcloud]
75
  )
76
 
77
-
78
-
 
 
 
 
 
 
 
 
 
 
79
  if __name__ == "__main__":
80
- iface.launch(server_name="0.0.0.0", server_port=7860, share=False)
81
- time.sleep(1) # Allow time for logs
82
- print("\n\n **Gradio Interface is LIVE at: http://localhost:7860 ** \n")
 
2
  from pydantic import BaseModel
3
  from fastapi.responses import FileResponse
4
  import gradio as gr
5
+ from entity_recognition import extract_entities # Import entity extraction function
6
  #from entity_recognition import generate_word_cloud
7
  from wordcloud import WordCloud
8
  from summarization import summarizer
 
9
  from utils import list_files,process_file
10
 
11
  # import threading
12
+ TEXT_FOLDER = "jfk_text"
13
  app = FastAPI()
14
 
15
  # Request Model
16
  class TextRequest(BaseModel):
17
  text: str
18
+ import pygraphviz as pgv
19
+ import re
20
 
21
+ def generate_mermaid_mindmap(text):
22
+ entities = extract_entities(text)
23
+ print("Extracted Entities:", entities)
24
+
25
+ # Create a directed graph
26
+ G = pgv.AGraph(directed=True, rankdir="TB", bgcolor="white")
27
+
28
+ # Add root node
29
+ G.add_node("Document", shape="ellipse", style="filled", fillcolor="lightblue", label="Document")
30
+
31
+ # Keep track of node names to ensure uniqueness
32
+ node_counter = {}
33
+
34
+ for category, values in entities.items():
35
+ # Sanitize category name for the node identifier
36
+ safe_category = re.sub(r'[^a-zA-Z0-9_]', '', category)
37
+ if not safe_category or safe_category.startswith('.'):
38
+ safe_category = "Category_" + str(hash(category) % 10000)
39
+
40
+ # Add category node
41
+ G.add_node(safe_category, shape="box", style="filled", fillcolor="lightgreen", label=category)
42
+ G.add_edge("Document", safe_category)
43
+
44
+ for value in values:
45
+ # Clean up the value
46
+ cleaned_value = value.strip().rstrip(')').lstrip(',')
47
+ if not cleaned_value:
48
+ cleaned_value = "Unknown"
49
+
50
+ # Truncate long values for readability (max 50 characters)
51
+ if len(cleaned_value) > 50:
52
+ cleaned_value = cleaned_value[:47] + "..."
53
+
54
+ # Sanitize value name for the node identifier
55
+ safe_value = re.sub(r'[^a-zA-Z0-9_]', '', cleaned_value)
56
+ if not safe_value:
57
+ safe_value = "Value_" + str(hash(cleaned_value) % 10000)
58
+
59
+ # Ensure unique node name
60
+ node_key = safe_value
61
+ node_counter[node_key] = node_counter.get(node_key, 0) + 1
62
+ if node_counter[node_key] > 1:
63
+ safe_value = f"{safe_value}_{node_counter[node_key]}"
64
+
65
+ # Add value node
66
+ G.add_node(safe_value, shape="ellipse", style="filled", fillcolor="lightyellow", label=cleaned_value)
67
+ G.add_edge(safe_category, safe_value)
68
+
69
+ # Render the graph to a PNG file
70
+ output_path = "mindmap.png"
71
+ G.draw(output_path, format="png", prog="dot") # 'dot' is the layout engine
72
+
73
+ return output_path
74
  @app.post("/summarize")
75
  def summarize_text(request: TextRequest):
76
  chunks = [request.text[i:i+500] for i in range(0, len(request.text), 500)]
 
97
  # Word Cloud Generation Endpoint
98
  @app.post("/wordcloud")
99
  def generate_word_cloud(request: TextRequest):
100
+ wordcloud = WordCloud(width=800, height=800,max_font_size=40, min_font_size=10, background_color="white").generate(request.text)
101
  img_path = "wordcloud.png"
102
  wordcloud.to_file(img_path)
103
  return FileResponse(img_path, media_type="image/png", filename="wordcloud.png")
104
 
105
 
 
106
  # Gradio UI
107
  with gr.Blocks() as iface:
108
  gr.Markdown("File Selector")
109
  gr.Markdown("Choose a file and process it for summarization, entity recognition, and word cloud generation.")
110
 
111
+ # **File selection & process button**
112
+ with gr.Row():
113
+ file_dropdown = gr.Dropdown(choices=list_files(), label=" Select a File", interactive=True)
114
+ process_button = gr.Button(" Process")
115
 
116
+ # **First Row (Original Text & Summary)**
117
+ with gr.Row():
118
+ full_doc_text = gr.Textbox(label=" Full Document")
119
+ output_summary = gr.Textbox(label=" Summarized Text")
120
 
121
+ # **Second Row (Entities & Word Cloud)**
122
+ with gr.Row():
123
+ output_entities = gr.JSON(label=" Entities")
124
+ output_wordcloud = gr.Image(label=" Word Cloud")
125
+ with gr.Row():
126
+ generate_mindmap_button = gr.Button("Generate Mind Map")
127
+ output_mindmap = gr.Image(label="Mind Map") # Use HTML instead of Textbox
128
+
129
+ generate_mindmap_button.click(
130
+ fn=generate_mermaid_mindmap,
131
+ inputs=full_doc_text,
132
+ outputs=output_mindmap
133
+ )
134
+
135
+
136
+ # # **Mind Map Generation**
137
+ # with gr.Row():
138
+ # generate_mindmap_button = gr.Button("Generate Mind Map")
139
+ # output_mindmap = gr.Image(label="Mind Map")
140
+ # Mind Map Generation Section
141
+ # with gr.Row():
142
+ # generate_mindmap_button = gr.Button("Generate Mind Map")
143
+ # output_mindmap = gr.HTML(label="Mind Map")
144
 
 
145
  # Process selected file
146
  process_button.click(
147
  fn=process_file,
148
  inputs=file_dropdown,
149
+ outputs=[full_doc_text, output_summary, output_entities, output_wordcloud]
150
  )
151
 
152
+ # # Connect mind map button to function (MOVE THIS INSIDE `with gr.Blocks()`)
153
+ # generate_mindmap_button.click(
154
+ # fn=generate_mind_map,
155
+ # inputs=full_doc_text, # Use the full document text
156
+ # outputs=output_mindmap
157
+ # )
158
+ # generate_mindmap_button.click(
159
+ # fn=generate_mermaid_mindmap,
160
+ # inputs=full_doc_text,
161
+ # outputs=output_mindmap
162
+ # )
163
+ # Launch Gradio app
164
  if __name__ == "__main__":
165
+ iface.launch(server_name="0.0.0.0", server_port=7860, share=False, debug=True)
 
 
space/entity_recognition.py CHANGED
@@ -3,7 +3,23 @@ import torch
3
  import matplotlib.pyplot as plt
4
  from wordcloud import WordCloud
5
  from gliner import GLiNER
6
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7
  # 📂 Define input/output directories
8
  input_dir = "summaryoutput" # Folder containing summarized documents
9
  entity_output_dir = "extracted_entities" # Folder to save extracted entities
@@ -14,29 +30,63 @@ device = "cuda" if torch.cuda.is_available() else "cpu" # Use GPU if available
14
  model = GLiNER.from_pretrained("urchade/gliner_medium-v2.1").to(device)
15
 
16
  # Define labels for entity extraction
17
- labels = ["person", "organization", "location", "date", "document", "event", "role", "cryptonym", "operation", "nationality", "contact"]
18
- # 💡 Get already processed files
19
  existing_entity_files = set(os.listdir(entity_output_dir))
20
-
21
- # 🔹 Function to extract entities from text
22
  def extract_entities(text):
23
  entities = model.predict_entities(text, labels)
24
- extracted_entities = {}
25
-
 
 
 
 
 
 
 
 
 
 
 
 
26
  for entity in entities:
27
  entity_type = entity["label"]
28
- entity_text = entity["text"]
29
-
30
- if entity_type not in extracted_entities:
31
- extracted_entities[entity_type] = set()
32
-
33
- extracted_entities[entity_type].add(entity_text)
34
-
35
- return extracted_entities
36
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
37
  # Function to generate word cloud
38
  def generate_word_cloud(text, output_filename):
39
- wordcloud = WordCloud(width=800, height=400, background_color="white").generate(text)
 
 
 
 
40
 
41
  # Save word cloud image
42
  plt.figure(figsize=(10, 5))
@@ -95,5 +145,5 @@ def extract_entities_from_summaries():
95
  print(" Entity extraction and word cloud generation completed!")
96
 
97
 
98
- if __name__ == "__main__":
99
  extract_entities_from_summaries()
 
3
  import matplotlib.pyplot as plt
4
  from wordcloud import WordCloud
5
  from gliner import GLiNER
6
+ import spacy
7
+ import re
8
+ # Load spaCy English model
9
+ nlp = spacy.load("en_core_web_sm")
10
+
11
+ # Function to remove stop words
12
+ def preprocess_text(text):
13
+ doc = nlp(text)
14
+ filtered_words = [ token.lemma_ # Convert to base form
15
+ for token in doc
16
+ if not token.is_stop # Remove stop words
17
+ and not token.is_punct # Remove punctuation
18
+ and not token.is_digit # Remove numbers
19
+ and len(token.text) > 2 ]
20
+
21
+ return " ".join(filtered_words)
22
+
23
  # 📂 Define input/output directories
24
  input_dir = "summaryoutput" # Folder containing summarized documents
25
  entity_output_dir = "extracted_entities" # Folder to save extracted entities
 
30
  model = GLiNER.from_pretrained("urchade/gliner_medium-v2.1").to(device)
31
 
32
  # Define labels for entity extraction
33
+ labels = ["person", "organization", "location", "date", "document", "event", "role", "cryptonym", "operation", "nationality", "contact","SUBJECT","REFERENCE","FROM","TO","DATE","REF","INFO"]
34
+ # Get already processed files
35
  existing_entity_files = set(os.listdir(entity_output_dir))
 
 
36
  def extract_entities(text):
37
  entities = model.predict_entities(text, labels)
38
+ extracted = {}
39
+ regex_patterns = {
40
+ "TO": r"(?i)\bTO[:\s]+([^\n]+)",
41
+ "FROM": r"(?i)\bFROM[:\s]+([^\n]+)",
42
+ "DATE": r"(?i)\bDATE[:\s]+([^\n]+)",
43
+ "REF": r"(?i)\bREF[:\s]+([^\n]+)",
44
+ "SUBJECT": r"(?i)\bSUBJECT[:\s]+([^\n]+)",
45
+ }
46
+ for label, pattern in regex_patterns.items():
47
+ matches = re.findall(pattern, text)
48
+ if matches:
49
+ # Clean up matches
50
+ cleaned_matches = [m.strip().rstrip(')').lstrip(',') for m in matches]
51
+ extracted[label] = list(set(cleaned_matches)) # Remove duplicates
52
  for entity in entities:
53
  entity_type = entity["label"]
54
+ entity_text = entity["text"].strip().rstrip(')').lstrip(',')
55
+ if entity_type not in extracted:
56
+ extracted[entity_type] = []
57
+ if entity_text not in extracted[entity_type]: # Avoid duplicates
58
+ extracted[entity_type].append(entity_text)
59
+ return extracted
60
+ # def extract_entities(text):
61
+ # entities = model.predict_entities(text, labels)
62
+ # extracted = {}
63
+ # regex_patterns = {
64
+ # "TO": r"(?i)\bTO[:\s]+([^\n]+)", # Matches "TO: some text"
65
+ # "FROM": r"(?i)\bFROM[:\s]+([^\n]+)", # Matches "FROM: some text"
66
+ # "DATE": r"(?i)\bDATE[:\s]+([^\n]+)", # Matches "DATE: some text"
67
+ # "REF": r"(?i)\bREF[:\s]+([^\n]+)", # Matches "REF: some text"
68
+ # "SUBJECT": r"(?i)\bSUBJECT[:\s]+([^\n]+)", # Matches "SUBJECT: some text"
69
+ # }
70
+ # # Apply regex patterns
71
+ # for label, pattern in regex_patterns.items():
72
+ # matches = re.findall(pattern, text)
73
+ # if matches:
74
+ # extracted[label] = matches
75
+
76
+ # for entity in entities:
77
+ # entity_type = entity["label"]
78
+ # entity_text = entity["text"]
79
+ # if entity_type not in extracted:
80
+ # extracted[entity_type] = []
81
+ # extracted[entity_type].append(entity_text)
82
+ # return extracted
83
  # Function to generate word cloud
84
  def generate_word_cloud(text, output_filename):
85
+ os.makedirs(os.path.dirname(output_filename), exist_ok=True)
86
+ filtered_text = preprocess_text(text)
87
+ wordcloud = WordCloud(width=800, height=400, background_color="white").generate(filtered_text)
88
+ wordcloud.to_file(output_filename)
89
+
90
 
91
  # Save word cloud image
92
  plt.figure(figsize=(10, 5))
 
145
  print(" Entity extraction and word cloud generation completed!")
146
 
147
 
148
+ if __name__ == "__main__"and False:
149
  extract_entities_from_summaries()
space/lib/bindings/utils.js ADDED
@@ -0,0 +1,189 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ function neighbourhoodHighlight(params) {
2
+ // console.log("in nieghbourhoodhighlight");
3
+ allNodes = nodes.get({ returnType: "Object" });
4
+ // originalNodes = JSON.parse(JSON.stringify(allNodes));
5
+ // if something is selected:
6
+ if (params.nodes.length > 0) {
7
+ highlightActive = true;
8
+ var i, j;
9
+ var selectedNode = params.nodes[0];
10
+ var degrees = 2;
11
+
12
+ // mark all nodes as hard to read.
13
+ for (let nodeId in allNodes) {
14
+ // nodeColors[nodeId] = allNodes[nodeId].color;
15
+ allNodes[nodeId].color = "rgba(200,200,200,0.5)";
16
+ if (allNodes[nodeId].hiddenLabel === undefined) {
17
+ allNodes[nodeId].hiddenLabel = allNodes[nodeId].label;
18
+ allNodes[nodeId].label = undefined;
19
+ }
20
+ }
21
+ var connectedNodes = network.getConnectedNodes(selectedNode);
22
+ var allConnectedNodes = [];
23
+
24
+ // get the second degree nodes
25
+ for (i = 1; i < degrees; i++) {
26
+ for (j = 0; j < connectedNodes.length; j++) {
27
+ allConnectedNodes = allConnectedNodes.concat(
28
+ network.getConnectedNodes(connectedNodes[j])
29
+ );
30
+ }
31
+ }
32
+
33
+ // all second degree nodes get a different color and their label back
34
+ for (i = 0; i < allConnectedNodes.length; i++) {
35
+ // allNodes[allConnectedNodes[i]].color = "pink";
36
+ allNodes[allConnectedNodes[i]].color = "rgba(150,150,150,0.75)";
37
+ if (allNodes[allConnectedNodes[i]].hiddenLabel !== undefined) {
38
+ allNodes[allConnectedNodes[i]].label =
39
+ allNodes[allConnectedNodes[i]].hiddenLabel;
40
+ allNodes[allConnectedNodes[i]].hiddenLabel = undefined;
41
+ }
42
+ }
43
+
44
+ // all first degree nodes get their own color and their label back
45
+ for (i = 0; i < connectedNodes.length; i++) {
46
+ // allNodes[connectedNodes[i]].color = undefined;
47
+ allNodes[connectedNodes[i]].color = nodeColors[connectedNodes[i]];
48
+ if (allNodes[connectedNodes[i]].hiddenLabel !== undefined) {
49
+ allNodes[connectedNodes[i]].label =
50
+ allNodes[connectedNodes[i]].hiddenLabel;
51
+ allNodes[connectedNodes[i]].hiddenLabel = undefined;
52
+ }
53
+ }
54
+
55
+ // the main node gets its own color and its label back.
56
+ // allNodes[selectedNode].color = undefined;
57
+ allNodes[selectedNode].color = nodeColors[selectedNode];
58
+ if (allNodes[selectedNode].hiddenLabel !== undefined) {
59
+ allNodes[selectedNode].label = allNodes[selectedNode].hiddenLabel;
60
+ allNodes[selectedNode].hiddenLabel = undefined;
61
+ }
62
+ } else if (highlightActive === true) {
63
+ // console.log("highlightActive was true");
64
+ // reset all nodes
65
+ for (let nodeId in allNodes) {
66
+ // allNodes[nodeId].color = "purple";
67
+ allNodes[nodeId].color = nodeColors[nodeId];
68
+ // delete allNodes[nodeId].color;
69
+ if (allNodes[nodeId].hiddenLabel !== undefined) {
70
+ allNodes[nodeId].label = allNodes[nodeId].hiddenLabel;
71
+ allNodes[nodeId].hiddenLabel = undefined;
72
+ }
73
+ }
74
+ highlightActive = false;
75
+ }
76
+
77
+ // transform the object into an array
78
+ var updateArray = [];
79
+ if (params.nodes.length > 0) {
80
+ for (let nodeId in allNodes) {
81
+ if (allNodes.hasOwnProperty(nodeId)) {
82
+ // console.log(allNodes[nodeId]);
83
+ updateArray.push(allNodes[nodeId]);
84
+ }
85
+ }
86
+ nodes.update(updateArray);
87
+ } else {
88
+ // console.log("Nothing was selected");
89
+ for (let nodeId in allNodes) {
90
+ if (allNodes.hasOwnProperty(nodeId)) {
91
+ // console.log(allNodes[nodeId]);
92
+ // allNodes[nodeId].color = {};
93
+ updateArray.push(allNodes[nodeId]);
94
+ }
95
+ }
96
+ nodes.update(updateArray);
97
+ }
98
+ }
99
+
100
+ function filterHighlight(params) {
101
+ allNodes = nodes.get({ returnType: "Object" });
102
+ // if something is selected:
103
+ if (params.nodes.length > 0) {
104
+ filterActive = true;
105
+ let selectedNodes = params.nodes;
106
+
107
+ // hiding all nodes and saving the label
108
+ for (let nodeId in allNodes) {
109
+ allNodes[nodeId].hidden = true;
110
+ if (allNodes[nodeId].savedLabel === undefined) {
111
+ allNodes[nodeId].savedLabel = allNodes[nodeId].label;
112
+ allNodes[nodeId].label = undefined;
113
+ }
114
+ }
115
+
116
+ for (let i=0; i < selectedNodes.length; i++) {
117
+ allNodes[selectedNodes[i]].hidden = false;
118
+ if (allNodes[selectedNodes[i]].savedLabel !== undefined) {
119
+ allNodes[selectedNodes[i]].label = allNodes[selectedNodes[i]].savedLabel;
120
+ allNodes[selectedNodes[i]].savedLabel = undefined;
121
+ }
122
+ }
123
+
124
+ } else if (filterActive === true) {
125
+ // reset all nodes
126
+ for (let nodeId in allNodes) {
127
+ allNodes[nodeId].hidden = false;
128
+ if (allNodes[nodeId].savedLabel !== undefined) {
129
+ allNodes[nodeId].label = allNodes[nodeId].savedLabel;
130
+ allNodes[nodeId].savedLabel = undefined;
131
+ }
132
+ }
133
+ filterActive = false;
134
+ }
135
+
136
+ // transform the object into an array
137
+ var updateArray = [];
138
+ if (params.nodes.length > 0) {
139
+ for (let nodeId in allNodes) {
140
+ if (allNodes.hasOwnProperty(nodeId)) {
141
+ updateArray.push(allNodes[nodeId]);
142
+ }
143
+ }
144
+ nodes.update(updateArray);
145
+ } else {
146
+ for (let nodeId in allNodes) {
147
+ if (allNodes.hasOwnProperty(nodeId)) {
148
+ updateArray.push(allNodes[nodeId]);
149
+ }
150
+ }
151
+ nodes.update(updateArray);
152
+ }
153
+ }
154
+
155
+ function selectNode(nodes) {
156
+ network.selectNodes(nodes);
157
+ neighbourhoodHighlight({ nodes: nodes });
158
+ return nodes;
159
+ }
160
+
161
+ function selectNodes(nodes) {
162
+ network.selectNodes(nodes);
163
+ filterHighlight({nodes: nodes});
164
+ return nodes;
165
+ }
166
+
167
+ function highlightFilter(filter) {
168
+ let selectedNodes = []
169
+ let selectedProp = filter['property']
170
+ if (filter['item'] === 'node') {
171
+ let allNodes = nodes.get({ returnType: "Object" });
172
+ for (let nodeId in allNodes) {
173
+ if (allNodes[nodeId][selectedProp] && filter['value'].includes((allNodes[nodeId][selectedProp]).toString())) {
174
+ selectedNodes.push(nodeId)
175
+ }
176
+ }
177
+ }
178
+ else if (filter['item'] === 'edge'){
179
+ let allEdges = edges.get({returnType: 'object'});
180
+ // check if the selected property exists for selected edge and select the nodes connected to the edge
181
+ for (let edge in allEdges) {
182
+ if (allEdges[edge][selectedProp] && filter['value'].includes((allEdges[edge][selectedProp]).toString())) {
183
+ selectedNodes.push(allEdges[edge]['from'])
184
+ selectedNodes.push(allEdges[edge]['to'])
185
+ }
186
+ }
187
+ }
188
+ selectNodes(selectedNodes)
189
+ }
space/lib/tom-select/tom-select.complete.min.js ADDED
@@ -0,0 +1,356 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * Tom Select v2.0.0-rc.4
3
+ * Licensed under the Apache License, Version 2.0 (the "License");
4
+ */
5
+ !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).TomSelect=t()}(this,(function(){"use strict"
6
+ function e(e,t){e.split(/\s+/).forEach((e=>{t(e)}))}class t{constructor(){this._events={}}on(t,i){e(t,(e=>{this._events[e]=this._events[e]||[],this._events[e].push(i)}))}off(t,i){var s=arguments.length
7
+ 0!==s?e(t,(e=>{if(1===s)return delete this._events[e]
8
+ e in this._events!=!1&&this._events[e].splice(this._events[e].indexOf(i),1)})):this._events={}}trigger(t,...i){var s=this
9
+ e(t,(e=>{if(e in s._events!=!1)for(let t of s._events[e])t.apply(s,i)}))}}var i
10
+ const s="[̀-ͯ·ʾ]",n=new RegExp(s,"g")
11
+ var o
12
+ const r={"æ":"ae","ⱥ":"a","ø":"o"},l=new RegExp(Object.keys(r).join("|"),"g"),a=[[67,67],[160,160],[192,438],[452,652],[961,961],[1019,1019],[1083,1083],[1281,1289],[1984,1984],[5095,5095],[7429,7441],[7545,7549],[7680,7935],[8580,8580],[9398,9449],[11360,11391],[42792,42793],[42802,42851],[42873,42897],[42912,42922],[64256,64260],[65313,65338],[65345,65370]],c=e=>e.normalize("NFKD").replace(n,"").toLowerCase().replace(l,(function(e){return r[e]})),d=(e,t="|")=>{if(1==e.length)return e[0]
13
+ var i=1
14
+ return e.forEach((e=>{i=Math.max(i,e.length)})),1==i?"["+e.join("")+"]":"(?:"+e.join(t)+")"},p=e=>{if(1===e.length)return[[e]]
15
+ var t=[]
16
+ return p(e.substring(1)).forEach((function(i){var s=i.slice(0)
17
+ s[0]=e.charAt(0)+s[0],t.push(s),(s=i.slice(0)).unshift(e.charAt(0)),t.push(s)})),t},u=e=>{void 0===o&&(o=(()=>{var e={}
18
+ a.forEach((t=>{for(let s=t[0];s<=t[1];s++){let t=String.fromCharCode(s),n=c(t)
19
+ if(n!=t.toLowerCase()){n in e||(e[n]=[n])
20
+ var i=new RegExp(d(e[n]),"iu")
21
+ t.match(i)||e[n].push(t)}}}))
22
+ var t=Object.keys(e)
23
+ t=t.sort(((e,t)=>t.length-e.length)),i=new RegExp("("+d(t)+"[̀-ͯ·ʾ]*)","g")
24
+ var s={}
25
+ return t.sort(((e,t)=>e.length-t.length)).forEach((t=>{var i=p(t).map((t=>(t=t.map((t=>e.hasOwnProperty(t)?d(e[t]):t)),d(t,""))))
26
+ s[t]=d(i)})),s})())
27
+ return e.normalize("NFKD").toLowerCase().split(i).map((e=>{if(""==e)return""
28
+ const t=c(e)
29
+ if(o.hasOwnProperty(t))return o[t]
30
+ const i=e.normalize("NFC")
31
+ return i!=e?d([e,i]):e})).join("")},h=(e,t)=>{if(e)return e[t]},g=(e,t)=>{if(e){for(var i,s=t.split(".");(i=s.shift())&&(e=e[i]););return e}},f=(e,t,i)=>{var s,n
32
+ return e?-1===(n=(e+="").search(t.regex))?0:(s=t.string.length/e.length,0===n&&(s+=.5),s*i):0},v=e=>(e+"").replace(/([\$\(-\+\.\?\[-\^\{-\}])/g,"\\$1"),m=(e,t)=>{var i=e[t]
33
+ if("function"==typeof i)return i
34
+ i&&!Array.isArray(i)&&(e[t]=[i])},y=(e,t)=>{if(Array.isArray(e))e.forEach(t)
35
+ else for(var i in e)e.hasOwnProperty(i)&&t(e[i],i)},O=(e,t)=>"number"==typeof e&&"number"==typeof t?e>t?1:e<t?-1:0:(e=c(e+"").toLowerCase())>(t=c(t+"").toLowerCase())?1:t>e?-1:0
36
+ class b{constructor(e,t){this.items=e,this.settings=t||{diacritics:!0}}tokenize(e,t,i){if(!e||!e.length)return[]
37
+ const s=[],n=e.split(/\s+/)
38
+ var o
39
+ return i&&(o=new RegExp("^("+Object.keys(i).map(v).join("|")+"):(.*)$")),n.forEach((e=>{let i,n=null,r=null
40
+ o&&(i=e.match(o))&&(n=i[1],e=i[2]),e.length>0&&(r=v(e),this.settings.diacritics&&(r=u(r)),t&&(r="\\b"+r)),s.push({string:e,regex:r?new RegExp(r,"iu"):null,field:n})})),s}getScoreFunction(e,t){var i=this.prepareSearch(e,t)
41
+ return this._getScoreFunction(i)}_getScoreFunction(e){const t=e.tokens,i=t.length
42
+ if(!i)return function(){return 0}
43
+ const s=e.options.fields,n=e.weights,o=s.length,r=e.getAttrFn
44
+ if(!o)return function(){return 1}
45
+ const l=1===o?function(e,t){const i=s[0].field
46
+ return f(r(t,i),e,n[i])}:function(e,t){var i=0
47
+ if(e.field){const s=r(t,e.field)
48
+ !e.regex&&s?i+=1/o:i+=f(s,e,1)}else y(n,((s,n)=>{i+=f(r(t,n),e,s)}))
49
+ return i/o}
50
+ return 1===i?function(e){return l(t[0],e)}:"and"===e.options.conjunction?function(e){for(var s,n=0,o=0;n<i;n++){if((s=l(t[n],e))<=0)return 0
51
+ o+=s}return o/i}:function(e){var s=0
52
+ return y(t,(t=>{s+=l(t,e)})),s/i}}getSortFunction(e,t){var i=this.prepareSearch(e,t)
53
+ return this._getSortFunction(i)}_getSortFunction(e){var t,i,s
54
+ const n=this,o=e.options,r=!e.query&&o.sort_empty?o.sort_empty:o.sort,l=[],a=[]
55
+ if("function"==typeof r)return r.bind(this)
56
+ const c=function(t,i){return"$score"===t?i.score:e.getAttrFn(n.items[i.id],t)}
57
+ if(r)for(t=0,i=r.length;t<i;t++)(e.query||"$score"!==r[t].field)&&l.push(r[t])
58
+ if(e.query){for(s=!0,t=0,i=l.length;t<i;t++)if("$score"===l[t].field){s=!1
59
+ break}s&&l.unshift({field:"$score",direction:"desc"})}else for(t=0,i=l.length;t<i;t++)if("$score"===l[t].field){l.splice(t,1)
60
+ break}for(t=0,i=l.length;t<i;t++)a.push("desc"===l[t].direction?-1:1)
61
+ const d=l.length
62
+ if(d){if(1===d){const e=l[0].field,t=a[0]
63
+ return function(i,s){return t*O(c(e,i),c(e,s))}}return function(e,t){var i,s,n
64
+ for(i=0;i<d;i++)if(n=l[i].field,s=a[i]*O(c(n,e),c(n,t)))return s
65
+ return 0}}return null}prepareSearch(e,t){const i={}
66
+ var s=Object.assign({},t)
67
+ if(m(s,"sort"),m(s,"sort_empty"),s.fields){m(s,"fields")
68
+ const e=[]
69
+ s.fields.forEach((t=>{"string"==typeof t&&(t={field:t,weight:1}),e.push(t),i[t.field]="weight"in t?t.weight:1})),s.fields=e}return{options:s,query:e.toLowerCase().trim(),tokens:this.tokenize(e,s.respect_word_boundaries,i),total:0,items:[],weights:i,getAttrFn:s.nesting?g:h}}search(e,t){var i,s,n=this
70
+ s=this.prepareSearch(e,t),t=s.options,e=s.query
71
+ const o=t.score||n._getScoreFunction(s)
72
+ e.length?y(n.items,((e,n)=>{i=o(e),(!1===t.filter||i>0)&&s.items.push({score:i,id:n})})):y(n.items,((e,t)=>{s.items.push({score:1,id:t})}))
73
+ const r=n._getSortFunction(s)
74
+ return r&&s.items.sort(r),s.total=s.items.length,"number"==typeof t.limit&&(s.items=s.items.slice(0,t.limit)),s}}const w=e=>{if(e.jquery)return e[0]
75
+ if(e instanceof HTMLElement)return e
76
+ if(e.indexOf("<")>-1){let t=document.createElement("div")
77
+ return t.innerHTML=e.trim(),t.firstChild}return document.querySelector(e)},_=(e,t)=>{var i=document.createEvent("HTMLEvents")
78
+ i.initEvent(t,!0,!1),e.dispatchEvent(i)},I=(e,t)=>{Object.assign(e.style,t)},C=(e,...t)=>{var i=A(t);(e=x(e)).map((e=>{i.map((t=>{e.classList.add(t)}))}))},S=(e,...t)=>{var i=A(t);(e=x(e)).map((e=>{i.map((t=>{e.classList.remove(t)}))}))},A=e=>{var t=[]
79
+ return y(e,(e=>{"string"==typeof e&&(e=e.trim().split(/[\11\12\14\15\40]/)),Array.isArray(e)&&(t=t.concat(e))})),t.filter(Boolean)},x=e=>(Array.isArray(e)||(e=[e]),e),k=(e,t,i)=>{if(!i||i.contains(e))for(;e&&e.matches;){if(e.matches(t))return e
80
+ e=e.parentNode}},F=(e,t=0)=>t>0?e[e.length-1]:e[0],L=(e,t)=>{if(!e)return-1
81
+ t=t||e.nodeName
82
+ for(var i=0;e=e.previousElementSibling;)e.matches(t)&&i++
83
+ return i},P=(e,t)=>{y(t,((t,i)=>{null==t?e.removeAttribute(i):e.setAttribute(i,""+t)}))},E=(e,t)=>{e.parentNode&&e.parentNode.replaceChild(t,e)},T=(e,t)=>{if(null===t)return
84
+ if("string"==typeof t){if(!t.length)return
85
+ t=new RegExp(t,"i")}const i=e=>3===e.nodeType?(e=>{var i=e.data.match(t)
86
+ if(i&&e.data.length>0){var s=document.createElement("span")
87
+ s.className="highlight"
88
+ var n=e.splitText(i.index)
89
+ n.splitText(i[0].length)
90
+ var o=n.cloneNode(!0)
91
+ return s.appendChild(o),E(n,s),1}return 0})(e):((e=>{if(1===e.nodeType&&e.childNodes&&!/(script|style)/i.test(e.tagName)&&("highlight"!==e.className||"SPAN"!==e.tagName))for(var t=0;t<e.childNodes.length;++t)t+=i(e.childNodes[t])})(e),0)
92
+ i(e)},V="undefined"!=typeof navigator&&/Mac/.test(navigator.userAgent)?"metaKey":"ctrlKey"
93
+ var j={options:[],optgroups:[],plugins:[],delimiter:",",splitOn:null,persist:!0,diacritics:!0,create:null,createOnBlur:!1,createFilter:null,highlight:!0,openOnFocus:!0,shouldOpen:null,maxOptions:50,maxItems:null,hideSelected:null,duplicates:!1,addPrecedence:!1,selectOnTab:!1,preload:null,allowEmptyOption:!1,loadThrottle:300,loadingClass:"loading",dataAttr:null,optgroupField:"optgroup",valueField:"value",labelField:"text",disabledField:"disabled",optgroupLabelField:"label",optgroupValueField:"value",lockOptgroupOrder:!1,sortField:"$order",searchField:["text"],searchConjunction:"and",mode:null,wrapperClass:"ts-wrapper",controlClass:"ts-control",dropdownClass:"ts-dropdown",dropdownContentClass:"ts-dropdown-content",itemClass:"item",optionClass:"option",dropdownParent:null,copyClassesToDropdown:!1,placeholder:null,hidePlaceholder:null,shouldLoad:function(e){return e.length>0},render:{}}
94
+ const q=e=>null==e?null:D(e),D=e=>"boolean"==typeof e?e?"1":"0":e+"",N=e=>(e+"").replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;"),z=(e,t)=>{var i
95
+ return function(s,n){var o=this
96
+ i&&(o.loading=Math.max(o.loading-1,0),clearTimeout(i)),i=setTimeout((function(){i=null,o.loadedSearches[s]=!0,e.call(o,s,n)}),t)}},R=(e,t,i)=>{var s,n=e.trigger,o={}
97
+ for(s in e.trigger=function(){var i=arguments[0]
98
+ if(-1===t.indexOf(i))return n.apply(e,arguments)
99
+ o[i]=arguments},i.apply(e,[]),e.trigger=n,o)n.apply(e,o[s])},H=(e,t=!1)=>{e&&(e.preventDefault(),t&&e.stopPropagation())},B=(e,t,i,s)=>{e.addEventListener(t,i,s)},K=(e,t)=>!!t&&(!!t[e]&&1===(t.altKey?1:0)+(t.ctrlKey?1:0)+(t.shiftKey?1:0)+(t.metaKey?1:0)),M=(e,t)=>{const i=e.getAttribute("id")
100
+ return i||(e.setAttribute("id",t),t)},Q=e=>e.replace(/[\\"']/g,"\\$&"),G=(e,t)=>{t&&e.append(t)}
101
+ function U(e,t){var i=Object.assign({},j,t),s=i.dataAttr,n=i.labelField,o=i.valueField,r=i.disabledField,l=i.optgroupField,a=i.optgroupLabelField,c=i.optgroupValueField,d=e.tagName.toLowerCase(),p=e.getAttribute("placeholder")||e.getAttribute("data-placeholder")
102
+ if(!p&&!i.allowEmptyOption){let t=e.querySelector('option[value=""]')
103
+ t&&(p=t.textContent)}var u,h,g,f,v,m,O={placeholder:p,options:[],optgroups:[],items:[],maxItems:null}
104
+ return"select"===d?(h=O.options,g={},f=1,v=e=>{var t=Object.assign({},e.dataset),i=s&&t[s]
105
+ return"string"==typeof i&&i.length&&(t=Object.assign(t,JSON.parse(i))),t},m=(e,t)=>{var s=q(e.value)
106
+ if(null!=s&&(s||i.allowEmptyOption)){if(g.hasOwnProperty(s)){if(t){var a=g[s][l]
107
+ a?Array.isArray(a)?a.push(t):g[s][l]=[a,t]:g[s][l]=t}}else{var c=v(e)
108
+ c[n]=c[n]||e.textContent,c[o]=c[o]||s,c[r]=c[r]||e.disabled,c[l]=c[l]||t,c.$option=e,g[s]=c,h.push(c)}e.selected&&O.items.push(s)}},O.maxItems=e.hasAttribute("multiple")?null:1,y(e.children,(e=>{var t,i,s
109
+ "optgroup"===(u=e.tagName.toLowerCase())?((s=v(t=e))[a]=s[a]||t.getAttribute("label")||"",s[c]=s[c]||f++,s[r]=s[r]||t.disabled,O.optgroups.push(s),i=s[c],y(t.children,(e=>{m(e,i)}))):"option"===u&&m(e)}))):(()=>{const t=e.getAttribute(s)
110
+ if(t)O.options=JSON.parse(t),y(O.options,(e=>{O.items.push(e[o])}))
111
+ else{var r=e.value.trim()||""
112
+ if(!i.allowEmptyOption&&!r.length)return
113
+ const t=r.split(i.delimiter)
114
+ y(t,(e=>{const t={}
115
+ t[n]=e,t[o]=e,O.options.push(t)})),O.items=t}})(),Object.assign({},j,O,t)}var W=0
116
+ class J extends(function(e){return e.plugins={},class extends e{constructor(...e){super(...e),this.plugins={names:[],settings:{},requested:{},loaded:{}}}static define(t,i){e.plugins[t]={name:t,fn:i}}initializePlugins(e){var t,i
117
+ const s=this,n=[]
118
+ if(Array.isArray(e))e.forEach((e=>{"string"==typeof e?n.push(e):(s.plugins.settings[e.name]=e.options,n.push(e.name))}))
119
+ else if(e)for(t in e)e.hasOwnProperty(t)&&(s.plugins.settings[t]=e[t],n.push(t))
120
+ for(;i=n.shift();)s.require(i)}loadPlugin(t){var i=this,s=i.plugins,n=e.plugins[t]
121
+ if(!e.plugins.hasOwnProperty(t))throw new Error('Unable to find "'+t+'" plugin')
122
+ s.requested[t]=!0,s.loaded[t]=n.fn.apply(i,[i.plugins.settings[t]||{}]),s.names.push(t)}require(e){var t=this,i=t.plugins
123
+ if(!t.plugins.loaded.hasOwnProperty(e)){if(i.requested[e])throw new Error('Plugin has circular dependency ("'+e+'")')
124
+ t.loadPlugin(e)}return i.loaded[e]}}}(t)){constructor(e,t){var i
125
+ super(),this.order=0,this.isOpen=!1,this.isDisabled=!1,this.isInvalid=!1,this.isValid=!0,this.isLocked=!1,this.isFocused=!1,this.isInputHidden=!1,this.isSetup=!1,this.ignoreFocus=!1,this.hasOptions=!1,this.lastValue="",this.caretPos=0,this.loading=0,this.loadedSearches={},this.activeOption=null,this.activeItems=[],this.optgroups={},this.options={},this.userOptions={},this.items=[],W++
126
+ var s=w(e)
127
+ if(s.tomselect)throw new Error("Tom Select already initialized on this element")
128
+ s.tomselect=this,i=(window.getComputedStyle&&window.getComputedStyle(s,null)).getPropertyValue("direction")
129
+ const n=U(s,t)
130
+ this.settings=n,this.input=s,this.tabIndex=s.tabIndex||0,this.is_select_tag="select"===s.tagName.toLowerCase(),this.rtl=/rtl/i.test(i),this.inputId=M(s,"tomselect-"+W),this.isRequired=s.required,this.sifter=new b(this.options,{diacritics:n.diacritics}),n.mode=n.mode||(1===n.maxItems?"single":"multi"),"boolean"!=typeof n.hideSelected&&(n.hideSelected="multi"===n.mode),"boolean"!=typeof n.hidePlaceholder&&(n.hidePlaceholder="multi"!==n.mode)
131
+ var o=n.createFilter
132
+ "function"!=typeof o&&("string"==typeof o&&(o=new RegExp(o)),o instanceof RegExp?n.createFilter=e=>o.test(e):n.createFilter=()=>!0),this.initializePlugins(n.plugins),this.setupCallbacks(),this.setupTemplates()
133
+ const r=w("<div>"),l=w("<div>"),a=this._render("dropdown"),c=w('<div role="listbox" tabindex="-1">'),d=this.input.getAttribute("class")||"",p=n.mode
134
+ var u
135
+ if(C(r,n.wrapperClass,d,p),C(l,n.controlClass),G(r,l),C(a,n.dropdownClass,p),n.copyClassesToDropdown&&C(a,d),C(c,n.dropdownContentClass),G(a,c),w(n.dropdownParent||r).appendChild(a),n.hasOwnProperty("controlInput"))n.controlInput?(u=w(n.controlInput),this.focus_node=u):(u=w("<input/>"),this.focus_node=l)
136
+ else{u=w('<input type="text" autocomplete="off" size="1" />')
137
+ y(["autocorrect","autocapitalize","autocomplete"],(e=>{s.getAttribute(e)&&P(u,{[e]:s.getAttribute(e)})})),u.tabIndex=-1,l.appendChild(u),this.focus_node=u}this.wrapper=r,this.dropdown=a,this.dropdown_content=c,this.control=l,this.control_input=u,this.setup()}setup(){const e=this,t=e.settings,i=e.control_input,s=e.dropdown,n=e.dropdown_content,o=e.wrapper,r=e.control,l=e.input,a=e.focus_node,c={passive:!0},d=e.inputId+"-ts-dropdown"
138
+ P(n,{id:d}),P(a,{role:"combobox","aria-haspopup":"listbox","aria-expanded":"false","aria-controls":d})
139
+ const p=M(a,e.inputId+"-ts-control"),u="label[for='"+(e=>e.replace(/['"\\]/g,"\\$&"))(e.inputId)+"']",h=document.querySelector(u),g=e.focus.bind(e)
140
+ if(h){B(h,"click",g),P(h,{for:p})
141
+ const t=M(h,e.inputId+"-ts-label")
142
+ P(a,{"aria-labelledby":t}),P(n,{"aria-labelledby":t})}if(o.style.width=l.style.width,e.plugins.names.length){const t="plugin-"+e.plugins.names.join(" plugin-")
143
+ C([o,s],t)}(null===t.maxItems||t.maxItems>1)&&e.is_select_tag&&P(l,{multiple:"multiple"}),e.settings.placeholder&&P(i,{placeholder:t.placeholder}),!e.settings.splitOn&&e.settings.delimiter&&(e.settings.splitOn=new RegExp("\\s*"+v(e.settings.delimiter)+"+\\s*")),t.load&&t.loadThrottle&&(t.load=z(t.load,t.loadThrottle)),e.control_input.type=l.type,B(s,"click",(t=>{const i=k(t.target,"[data-selectable]")
144
+ i&&(e.onOptionSelect(t,i),H(t,!0))})),B(r,"click",(t=>{var s=k(t.target,"[data-ts-item]",r)
145
+ s&&e.onItemSelect(t,s)?H(t,!0):""==i.value&&(e.onClick(),H(t,!0))})),B(i,"mousedown",(e=>{""!==i.value&&e.stopPropagation()})),B(a,"keydown",(t=>e.onKeyDown(t))),B(i,"keypress",(t=>e.onKeyPress(t))),B(i,"input",(t=>e.onInput(t))),B(a,"resize",(()=>e.positionDropdown()),c),B(a,"blur",(t=>e.onBlur(t))),B(a,"focus",(t=>e.onFocus(t))),B(a,"paste",(t=>e.onPaste(t)))
146
+ const f=t=>{const i=t.composedPath()[0]
147
+ if(!o.contains(i)&&!s.contains(i))return e.isFocused&&e.blur(),void e.inputState()
148
+ H(t,!0)}
149
+ var m=()=>{e.isOpen&&e.positionDropdown()}
150
+ B(document,"mousedown",f),B(window,"scroll",m,c),B(window,"resize",m,c),this._destroy=()=>{document.removeEventListener("mousedown",f),window.removeEventListener("sroll",m),window.removeEventListener("resize",m),h&&h.removeEventListener("click",g)},this.revertSettings={innerHTML:l.innerHTML,tabIndex:l.tabIndex},l.tabIndex=-1,l.insertAdjacentElement("afterend",e.wrapper),e.sync(!1),t.items=[],delete t.optgroups,delete t.options,B(l,"invalid",(t=>{e.isValid&&(e.isValid=!1,e.isInvalid=!0,e.refreshState())})),e.updateOriginalInput(),e.refreshItems(),e.close(!1),e.inputState(),e.isSetup=!0,l.disabled?e.disable():e.enable(),e.on("change",this.onChange),C(l,"tomselected","ts-hidden-accessible"),e.trigger("initialize"),!0===t.preload&&e.preload()}setupOptions(e=[],t=[]){this.addOptions(e),y(t,(e=>{this.registerOptionGroup(e)}))}setupTemplates(){var e=this,t=e.settings.labelField,i=e.settings.optgroupLabelField,s={optgroup:e=>{let t=document.createElement("div")
151
+ return t.className="optgroup",t.appendChild(e.options),t},optgroup_header:(e,t)=>'<div class="optgroup-header">'+t(e[i])+"</div>",option:(e,i)=>"<div>"+i(e[t])+"</div>",item:(e,i)=>"<div>"+i(e[t])+"</div>",option_create:(e,t)=>'<div class="create">Add <strong>'+t(e.input)+"</strong>&hellip;</div>",no_results:()=>'<div class="no-results">No results found</div>',loading:()=>'<div class="spinner"></div>',not_loading:()=>{},dropdown:()=>"<div></div>"}
152
+ e.settings.render=Object.assign({},s,e.settings.render)}setupCallbacks(){var e,t,i={initialize:"onInitialize",change:"onChange",item_add:"onItemAdd",item_remove:"onItemRemove",item_select:"onItemSelect",clear:"onClear",option_add:"onOptionAdd",option_remove:"onOptionRemove",option_clear:"onOptionClear",optgroup_add:"onOptionGroupAdd",optgroup_remove:"onOptionGroupRemove",optgroup_clear:"onOptionGroupClear",dropdown_open:"onDropdownOpen",dropdown_close:"onDropdownClose",type:"onType",load:"onLoad",focus:"onFocus",blur:"onBlur"}
153
+ for(e in i)(t=this.settings[i[e]])&&this.on(e,t)}sync(e=!0){const t=this,i=e?U(t.input,{delimiter:t.settings.delimiter}):t.settings
154
+ t.setupOptions(i.options,i.optgroups),t.setValue(i.items,!0),t.lastQuery=null}onClick(){var e=this
155
+ if(e.activeItems.length>0)return e.clearActiveItems(),void e.focus()
156
+ e.isFocused&&e.isOpen?e.blur():e.focus()}onMouseDown(){}onChange(){_(this.input,"input"),_(this.input,"change")}onPaste(e){var t=this
157
+ t.isFull()||t.isInputHidden||t.isLocked?H(e):t.settings.splitOn&&setTimeout((()=>{var e=t.inputValue()
158
+ if(e.match(t.settings.splitOn)){var i=e.trim().split(t.settings.splitOn)
159
+ y(i,(e=>{t.createItem(e)}))}}),0)}onKeyPress(e){var t=this
160
+ if(!t.isLocked){var i=String.fromCharCode(e.keyCode||e.which)
161
+ return t.settings.create&&"multi"===t.settings.mode&&i===t.settings.delimiter?(t.createItem(),void H(e)):void 0}H(e)}onKeyDown(e){var t=this
162
+ if(t.isLocked)9!==e.keyCode&&H(e)
163
+ else{switch(e.keyCode){case 65:if(K(V,e))return H(e),void t.selectAll()
164
+ break
165
+ case 27:return t.isOpen&&(H(e,!0),t.close()),void t.clearActiveItems()
166
+ case 40:if(!t.isOpen&&t.hasOptions)t.open()
167
+ else if(t.activeOption){let e=t.getAdjacent(t.activeOption,1)
168
+ e&&t.setActiveOption(e)}return void H(e)
169
+ case 38:if(t.activeOption){let e=t.getAdjacent(t.activeOption,-1)
170
+ e&&t.setActiveOption(e)}return void H(e)
171
+ case 13:return void(t.isOpen&&t.activeOption?(t.onOptionSelect(e,t.activeOption),H(e)):t.settings.create&&t.createItem()&&H(e))
172
+ case 37:return void t.advanceSelection(-1,e)
173
+ case 39:return void t.advanceSelection(1,e)
174
+ case 9:return void(t.settings.selectOnTab&&(t.isOpen&&t.activeOption&&(t.onOptionSelect(e,t.activeOption),H(e)),t.settings.create&&t.createItem()&&H(e)))
175
+ case 8:case 46:return void t.deleteSelection(e)}t.isInputHidden&&!K(V,e)&&H(e)}}onInput(e){var t=this
176
+ if(!t.isLocked){var i=t.inputValue()
177
+ t.lastValue!==i&&(t.lastValue=i,t.settings.shouldLoad.call(t,i)&&t.load(i),t.refreshOptions(),t.trigger("type",i))}}onFocus(e){var t=this,i=t.isFocused
178
+ if(t.isDisabled)return t.blur(),void H(e)
179
+ t.ignoreFocus||(t.isFocused=!0,"focus"===t.settings.preload&&t.preload(),i||t.trigger("focus"),t.activeItems.length||(t.showInput(),t.refreshOptions(!!t.settings.openOnFocus)),t.refreshState())}onBlur(e){if(!1!==document.hasFocus()){var t=this
180
+ if(t.isFocused){t.isFocused=!1,t.ignoreFocus=!1
181
+ var i=()=>{t.close(),t.setActiveItem(),t.setCaret(t.items.length),t.trigger("blur")}
182
+ t.settings.create&&t.settings.createOnBlur?t.createItem(null,!1,i):i()}}}onOptionSelect(e,t){var i,s=this
183
+ t&&(t.parentElement&&t.parentElement.matches("[data-disabled]")||(t.classList.contains("create")?s.createItem(null,!0,(()=>{s.settings.closeAfterSelect&&s.close()})):void 0!==(i=t.dataset.value)&&(s.lastQuery=null,s.addItem(i),s.settings.closeAfterSelect&&s.close(),!s.settings.hideSelected&&e.type&&/click/.test(e.type)&&s.setActiveOption(t))))}onItemSelect(e,t){var i=this
184
+ return!i.isLocked&&"multi"===i.settings.mode&&(H(e),i.setActiveItem(t,e),!0)}canLoad(e){return!!this.settings.load&&!this.loadedSearches.hasOwnProperty(e)}load(e){const t=this
185
+ if(!t.canLoad(e))return
186
+ C(t.wrapper,t.settings.loadingClass),t.loading++
187
+ const i=t.loadCallback.bind(t)
188
+ t.settings.load.call(t,e,i)}loadCallback(e,t){const i=this
189
+ i.loading=Math.max(i.loading-1,0),i.lastQuery=null,i.clearActiveOption(),i.setupOptions(e,t),i.refreshOptions(i.isFocused&&!i.isInputHidden),i.loading||S(i.wrapper,i.settings.loadingClass),i.trigger("load",e,t)}preload(){var e=this.wrapper.classList
190
+ e.contains("preloaded")||(e.add("preloaded"),this.load(""))}setTextboxValue(e=""){var t=this.control_input
191
+ t.value!==e&&(t.value=e,_(t,"update"),this.lastValue=e)}getValue(){return this.is_select_tag&&this.input.hasAttribute("multiple")?this.items:this.items.join(this.settings.delimiter)}setValue(e,t){R(this,t?[]:["change"],(()=>{this.clear(t),this.addItems(e,t)}))}setMaxItems(e){0===e&&(e=null),this.settings.maxItems=e,this.refreshState()}setActiveItem(e,t){var i,s,n,o,r,l,a=this
192
+ if("single"!==a.settings.mode){if(!e)return a.clearActiveItems(),void(a.isFocused&&a.showInput())
193
+ if("click"===(i=t&&t.type.toLowerCase())&&K("shiftKey",t)&&a.activeItems.length){for(l=a.getLastActive(),(n=Array.prototype.indexOf.call(a.control.children,l))>(o=Array.prototype.indexOf.call(a.control.children,e))&&(r=n,n=o,o=r),s=n;s<=o;s++)e=a.control.children[s],-1===a.activeItems.indexOf(e)&&a.setActiveItemClass(e)
194
+ H(t)}else"click"===i&&K(V,t)||"keydown"===i&&K("shiftKey",t)?e.classList.contains("active")?a.removeActiveItem(e):a.setActiveItemClass(e):(a.clearActiveItems(),a.setActiveItemClass(e))
195
+ a.hideInput(),a.isFocused||a.focus()}}setActiveItemClass(e){const t=this,i=t.control.querySelector(".last-active")
196
+ i&&S(i,"last-active"),C(e,"active last-active"),t.trigger("item_select",e),-1==t.activeItems.indexOf(e)&&t.activeItems.push(e)}removeActiveItem(e){var t=this.activeItems.indexOf(e)
197
+ this.activeItems.splice(t,1),S(e,"active")}clearActiveItems(){S(this.activeItems,"active"),this.activeItems=[]}setActiveOption(e){e!==this.activeOption&&(this.clearActiveOption(),e&&(this.activeOption=e,P(this.focus_node,{"aria-activedescendant":e.getAttribute("id")}),P(e,{"aria-selected":"true"}),C(e,"active"),this.scrollToOption(e)))}scrollToOption(e,t){if(!e)return
198
+ const i=this.dropdown_content,s=i.clientHeight,n=i.scrollTop||0,o=e.offsetHeight,r=e.getBoundingClientRect().top-i.getBoundingClientRect().top+n
199
+ r+o>s+n?this.scroll(r-s+o,t):r<n&&this.scroll(r,t)}scroll(e,t){const i=this.dropdown_content
200
+ t&&(i.style.scrollBehavior=t),i.scrollTop=e,i.style.scrollBehavior=""}clearActiveOption(){this.activeOption&&(S(this.activeOption,"active"),P(this.activeOption,{"aria-selected":null})),this.activeOption=null,P(this.focus_node,{"aria-activedescendant":null})}selectAll(){if("single"===this.settings.mode)return
201
+ const e=this.controlChildren()
202
+ e.length&&(this.hideInput(),this.close(),this.activeItems=e,C(e,"active"))}inputState(){var e=this
203
+ e.control.contains(e.control_input)&&(P(e.control_input,{placeholder:e.settings.placeholder}),e.activeItems.length>0||!e.isFocused&&e.settings.hidePlaceholder&&e.items.length>0?(e.setTextboxValue(),e.isInputHidden=!0):(e.settings.hidePlaceholder&&e.items.length>0&&P(e.control_input,{placeholder:""}),e.isInputHidden=!1),e.wrapper.classList.toggle("input-hidden",e.isInputHidden))}hideInput(){this.inputState()}showInput(){this.inputState()}inputValue(){return this.control_input.value.trim()}focus(){var e=this
204
+ e.isDisabled||(e.ignoreFocus=!0,e.control_input.offsetWidth?e.control_input.focus():e.focus_node.focus(),setTimeout((()=>{e.ignoreFocus=!1,e.onFocus()}),0))}blur(){this.focus_node.blur(),this.onBlur()}getScoreFunction(e){return this.sifter.getScoreFunction(e,this.getSearchOptions())}getSearchOptions(){var e=this.settings,t=e.sortField
205
+ return"string"==typeof e.sortField&&(t=[{field:e.sortField}]),{fields:e.searchField,conjunction:e.searchConjunction,sort:t,nesting:e.nesting}}search(e){var t,i,s,n=this,o=this.getSearchOptions()
206
+ if(n.settings.score&&"function"!=typeof(s=n.settings.score.call(n,e)))throw new Error('Tom Select "score" setting must be a function that returns a function')
207
+ if(e!==n.lastQuery?(n.lastQuery=e,i=n.sifter.search(e,Object.assign(o,{score:s})),n.currentResults=i):i=Object.assign({},n.currentResults),n.settings.hideSelected)for(t=i.items.length-1;t>=0;t--){let e=q(i.items[t].id)
208
+ e&&-1!==n.items.indexOf(e)&&i.items.splice(t,1)}return i}refreshOptions(e=!0){var t,i,s,n,o,r,l,a,c,d,p
209
+ const u={},h=[]
210
+ var g,f=this,v=f.inputValue(),m=f.search(v),O=f.activeOption,b=f.settings.shouldOpen||!1,w=f.dropdown_content
211
+ for(O&&(c=O.dataset.value,d=O.closest("[data-group]")),n=m.items.length,"number"==typeof f.settings.maxOptions&&(n=Math.min(n,f.settings.maxOptions)),n>0&&(b=!0),t=0;t<n;t++){let e=m.items[t].id,n=f.options[e],l=f.getOption(e,!0)
212
+ for(f.settings.hideSelected||l.classList.toggle("selected",f.items.includes(e)),o=n[f.settings.optgroupField]||"",i=0,s=(r=Array.isArray(o)?o:[o])&&r.length;i<s;i++)o=r[i],f.optgroups.hasOwnProperty(o)||(o=""),u.hasOwnProperty(o)||(u[o]=document.createDocumentFragment(),h.push(o)),i>0&&(l=l.cloneNode(!0),P(l,{id:n.$id+"-clone-"+i,"aria-selected":null}),l.classList.add("ts-cloned"),S(l,"active")),c==e&&d&&d.dataset.group===o&&(O=l),u[o].appendChild(l)}this.settings.lockOptgroupOrder&&h.sort(((e,t)=>(f.optgroups[e]&&f.optgroups[e].$order||0)-(f.optgroups[t]&&f.optgroups[t].$order||0))),l=document.createDocumentFragment(),y(h,(e=>{if(f.optgroups.hasOwnProperty(e)&&u[e].children.length){let t=document.createDocumentFragment(),i=f.render("optgroup_header",f.optgroups[e])
213
+ G(t,i),G(t,u[e])
214
+ let s=f.render("optgroup",{group:f.optgroups[e],options:t})
215
+ G(l,s)}else G(l,u[e])})),w.innerHTML="",G(w,l),f.settings.highlight&&(g=w.querySelectorAll("span.highlight"),Array.prototype.forEach.call(g,(function(e){var t=e.parentNode
216
+ t.replaceChild(e.firstChild,e),t.normalize()})),m.query.length&&m.tokens.length&&y(m.tokens,(e=>{T(w,e.regex)})))
217
+ var _=e=>{let t=f.render(e,{input:v})
218
+ return t&&(b=!0,w.insertBefore(t,w.firstChild)),t}
219
+ if(f.loading?_("loading"):f.settings.shouldLoad.call(f,v)?0===m.items.length&&_("no_results"):_("not_loading"),(a=f.canCreate(v))&&(p=_("option_create")),f.hasOptions=m.items.length>0||a,b){if(m.items.length>0){if(!w.contains(O)&&"single"===f.settings.mode&&f.items.length&&(O=f.getOption(f.items[0])),!w.contains(O)){let e=0
220
+ p&&!f.settings.addPrecedence&&(e=1),O=f.selectable()[e]}}else p&&(O=p)
221
+ e&&!f.isOpen&&(f.open(),f.scrollToOption(O,"auto")),f.setActiveOption(O)}else f.clearActiveOption(),e&&f.isOpen&&f.close(!1)}selectable(){return this.dropdown_content.querySelectorAll("[data-selectable]")}addOption(e,t=!1){const i=this
222
+ if(Array.isArray(e))return i.addOptions(e,t),!1
223
+ const s=q(e[i.settings.valueField])
224
+ return null!==s&&!i.options.hasOwnProperty(s)&&(e.$order=e.$order||++i.order,e.$id=i.inputId+"-opt-"+e.$order,i.options[s]=e,i.lastQuery=null,t&&(i.userOptions[s]=t,i.trigger("option_add",s,e)),s)}addOptions(e,t=!1){y(e,(e=>{this.addOption(e,t)}))}registerOption(e){return this.addOption(e)}registerOptionGroup(e){var t=q(e[this.settings.optgroupValueField])
225
+ return null!==t&&(e.$order=e.$order||++this.order,this.optgroups[t]=e,t)}addOptionGroup(e,t){var i
226
+ t[this.settings.optgroupValueField]=e,(i=this.registerOptionGroup(t))&&this.trigger("optgroup_add",i,t)}removeOptionGroup(e){this.optgroups.hasOwnProperty(e)&&(delete this.optgroups[e],this.clearCache(),this.trigger("optgroup_remove",e))}clearOptionGroups(){this.optgroups={},this.clearCache(),this.trigger("optgroup_clear")}updateOption(e,t){const i=this
227
+ var s,n
228
+ const o=q(e),r=q(t[i.settings.valueField])
229
+ if(null===o)return
230
+ if(!i.options.hasOwnProperty(o))return
231
+ if("string"!=typeof r)throw new Error("Value must be set in option data")
232
+ const l=i.getOption(o),a=i.getItem(o)
233
+ if(t.$order=t.$order||i.options[o].$order,delete i.options[o],i.uncacheValue(r),i.options[r]=t,l){if(i.dropdown_content.contains(l)){const e=i._render("option",t)
234
+ E(l,e),i.activeOption===l&&i.setActiveOption(e)}l.remove()}a&&(-1!==(n=i.items.indexOf(o))&&i.items.splice(n,1,r),s=i._render("item",t),a.classList.contains("active")&&C(s,"active"),E(a,s)),i.lastQuery=null}removeOption(e,t){const i=this
235
+ e=D(e),i.uncacheValue(e),delete i.userOptions[e],delete i.options[e],i.lastQuery=null,i.trigger("option_remove",e),i.removeItem(e,t)}clearOptions(){this.loadedSearches={},this.userOptions={},this.clearCache()
236
+ var e={}
237
+ y(this.options,((t,i)=>{this.items.indexOf(i)>=0&&(e[i]=this.options[i])})),this.options=this.sifter.items=e,this.lastQuery=null,this.trigger("option_clear")}getOption(e,t=!1){const i=q(e)
238
+ if(null!==i&&this.options.hasOwnProperty(i)){const e=this.options[i]
239
+ if(e.$div)return e.$div
240
+ if(t)return this._render("option",e)}return null}getAdjacent(e,t,i="option"){var s
241
+ if(!e)return null
242
+ s="item"==i?this.controlChildren():this.dropdown_content.querySelectorAll("[data-selectable]")
243
+ for(let i=0;i<s.length;i++)if(s[i]==e)return t>0?s[i+1]:s[i-1]
244
+ return null}getItem(e){if("object"==typeof e)return e
245
+ var t=q(e)
246
+ return null!==t?this.control.querySelector(`[data-value="${Q(t)}"]`):null}addItems(e,t){var i=this,s=Array.isArray(e)?e:[e]
247
+ for(let e=0,n=(s=s.filter((e=>-1===i.items.indexOf(e)))).length;e<n;e++)i.isPending=e<n-1,i.addItem(s[e],t)}addItem(e,t){R(this,t?[]:["change"],(()=>{var i,s
248
+ const n=this,o=n.settings.mode,r=q(e)
249
+ if((!r||-1===n.items.indexOf(r)||("single"===o&&n.close(),"single"!==o&&n.settings.duplicates))&&null!==r&&n.options.hasOwnProperty(r)&&("single"===o&&n.clear(t),"multi"!==o||!n.isFull())){if(i=n._render("item",n.options[r]),n.control.contains(i)&&(i=i.cloneNode(!0)),s=n.isFull(),n.items.splice(n.caretPos,0,r),n.insertAtCaret(i),n.isSetup){if(!n.isPending&&n.settings.hideSelected){let e=n.getOption(r),t=n.getAdjacent(e,1)
250
+ t&&n.setActiveOption(t)}n.isPending||n.refreshOptions(n.isFocused&&"single"!==o),0!=n.settings.closeAfterSelect&&n.isFull()?n.close():n.isPending||n.positionDropdown(),n.trigger("item_add",r,i),n.isPending||n.updateOriginalInput({silent:t})}(!n.isPending||!s&&n.isFull())&&(n.inputState(),n.refreshState())}}))}removeItem(e=null,t){const i=this
251
+ if(!(e=i.getItem(e)))return
252
+ var s,n
253
+ const o=e.dataset.value
254
+ s=L(e),e.remove(),e.classList.contains("active")&&(n=i.activeItems.indexOf(e),i.activeItems.splice(n,1),S(e,"active")),i.items.splice(s,1),i.lastQuery=null,!i.settings.persist&&i.userOptions.hasOwnProperty(o)&&i.removeOption(o,t),s<i.caretPos&&i.setCaret(i.caretPos-1),i.updateOriginalInput({silent:t}),i.refreshState(),i.positionDropdown(),i.trigger("item_remove",o,e)}createItem(e=null,t=!0,i=(()=>{})){var s,n=this,o=n.caretPos
255
+ if(e=e||n.inputValue(),!n.canCreate(e))return i(),!1
256
+ n.lock()
257
+ var r=!1,l=e=>{if(n.unlock(),!e||"object"!=typeof e)return i()
258
+ var s=q(e[n.settings.valueField])
259
+ if("string"!=typeof s)return i()
260
+ n.setTextboxValue(),n.addOption(e,!0),n.setCaret(o),n.addItem(s),n.refreshOptions(t&&"single"!==n.settings.mode),i(e),r=!0}
261
+ return s="function"==typeof n.settings.create?n.settings.create.call(this,e,l):{[n.settings.labelField]:e,[n.settings.valueField]:e},r||l(s),!0}refreshItems(){var e=this
262
+ e.lastQuery=null,e.isSetup&&e.addItems(e.items),e.updateOriginalInput(),e.refreshState()}refreshState(){const e=this
263
+ e.refreshValidityState()
264
+ const t=e.isFull(),i=e.isLocked
265
+ e.wrapper.classList.toggle("rtl",e.rtl)
266
+ const s=e.wrapper.classList
267
+ var n
268
+ s.toggle("focus",e.isFocused),s.toggle("disabled",e.isDisabled),s.toggle("required",e.isRequired),s.toggle("invalid",!e.isValid),s.toggle("locked",i),s.toggle("full",t),s.toggle("input-active",e.isFocused&&!e.isInputHidden),s.toggle("dropdown-active",e.isOpen),s.toggle("has-options",(n=e.options,0===Object.keys(n).length)),s.toggle("has-items",e.items.length>0)}refreshValidityState(){var e=this
269
+ e.input.checkValidity&&(e.isValid=e.input.checkValidity(),e.isInvalid=!e.isValid)}isFull(){return null!==this.settings.maxItems&&this.items.length>=this.settings.maxItems}updateOriginalInput(e={}){const t=this
270
+ var i,s
271
+ const n=t.input.querySelector('option[value=""]')
272
+ if(t.is_select_tag){const e=[]
273
+ function o(i,s,o){return i||(i=w('<option value="'+N(s)+'">'+N(o)+"</option>")),i!=n&&t.input.append(i),e.push(i),i.selected=!0,i}t.input.querySelectorAll("option:checked").forEach((e=>{e.selected=!1})),0==t.items.length&&"single"==t.settings.mode?o(n,"",""):t.items.forEach((n=>{if(i=t.options[n],s=i[t.settings.labelField]||"",e.includes(i.$option)){o(t.input.querySelector(`option[value="${Q(n)}"]:not(:checked)`),n,s)}else i.$option=o(i.$option,n,s)}))}else t.input.value=t.getValue()
274
+ t.isSetup&&(e.silent||t.trigger("change",t.getValue()))}open(){var e=this
275
+ e.isLocked||e.isOpen||"multi"===e.settings.mode&&e.isFull()||(e.isOpen=!0,P(e.focus_node,{"aria-expanded":"true"}),e.refreshState(),I(e.dropdown,{visibility:"hidden",display:"block"}),e.positionDropdown(),I(e.dropdown,{visibility:"visible",display:"block"}),e.focus(),e.trigger("dropdown_open",e.dropdown))}close(e=!0){var t=this,i=t.isOpen
276
+ e&&(t.setTextboxValue(),"single"===t.settings.mode&&t.items.length&&t.hideInput()),t.isOpen=!1,P(t.focus_node,{"aria-expanded":"false"}),I(t.dropdown,{display:"none"}),t.settings.hideSelected&&t.clearActiveOption(),t.refreshState(),i&&t.trigger("dropdown_close",t.dropdown)}positionDropdown(){if("body"===this.settings.dropdownParent){var e=this.control,t=e.getBoundingClientRect(),i=e.offsetHeight+t.top+window.scrollY,s=t.left+window.scrollX
277
+ I(this.dropdown,{width:t.width+"px",top:i+"px",left:s+"px"})}}clear(e){var t=this
278
+ if(t.items.length){var i=t.controlChildren()
279
+ y(i,(e=>{t.removeItem(e,!0)})),t.showInput(),e||t.updateOriginalInput(),t.trigger("clear")}}insertAtCaret(e){const t=this,i=t.caretPos,s=t.control
280
+ s.insertBefore(e,s.children[i]),t.setCaret(i+1)}deleteSelection(e){var t,i,s,n,o,r=this
281
+ t=e&&8===e.keyCode?-1:1,i={start:(o=r.control_input).selectionStart||0,length:(o.selectionEnd||0)-(o.selectionStart||0)}
282
+ const l=[]
283
+ if(r.activeItems.length)n=F(r.activeItems,t),s=L(n),t>0&&s++,y(r.activeItems,(e=>l.push(e)))
284
+ else if((r.isFocused||"single"===r.settings.mode)&&r.items.length){const e=r.controlChildren()
285
+ t<0&&0===i.start&&0===i.length?l.push(e[r.caretPos-1]):t>0&&i.start===r.inputValue().length&&l.push(e[r.caretPos])}const a=l.map((e=>e.dataset.value))
286
+ if(!a.length||"function"==typeof r.settings.onDelete&&!1===r.settings.onDelete.call(r,a,e))return!1
287
+ for(H(e,!0),void 0!==s&&r.setCaret(s);l.length;)r.removeItem(l.pop())
288
+ return r.showInput(),r.positionDropdown(),r.refreshOptions(!1),!0}advanceSelection(e,t){var i,s,n=this
289
+ n.rtl&&(e*=-1),n.inputValue().length||(K(V,t)||K("shiftKey",t)?(s=(i=n.getLastActive(e))?i.classList.contains("active")?n.getAdjacent(i,e,"item"):i:e>0?n.control_input.nextElementSibling:n.control_input.previousElementSibling)&&(s.classList.contains("active")&&n.removeActiveItem(i),n.setActiveItemClass(s)):n.moveCaret(e))}moveCaret(e){}getLastActive(e){let t=this.control.querySelector(".last-active")
290
+ if(t)return t
291
+ var i=this.control.querySelectorAll(".active")
292
+ return i?F(i,e):void 0}setCaret(e){this.caretPos=this.items.length}controlChildren(){return Array.from(this.control.querySelectorAll("[data-ts-item]"))}lock(){this.close(),this.isLocked=!0,this.refreshState()}unlock(){this.isLocked=!1,this.refreshState()}disable(){var e=this
293
+ e.input.disabled=!0,e.control_input.disabled=!0,e.focus_node.tabIndex=-1,e.isDisabled=!0,e.lock()}enable(){var e=this
294
+ e.input.disabled=!1,e.control_input.disabled=!1,e.focus_node.tabIndex=e.tabIndex,e.isDisabled=!1,e.unlock()}destroy(){var e=this,t=e.revertSettings
295
+ e.trigger("destroy"),e.off(),e.wrapper.remove(),e.dropdown.remove(),e.input.innerHTML=t.innerHTML,e.input.tabIndex=t.tabIndex,S(e.input,"tomselected","ts-hidden-accessible"),e._destroy(),delete e.input.tomselect}render(e,t){return"function"!=typeof this.settings.render[e]?null:this._render(e,t)}_render(e,t){var i,s,n=""
296
+ const o=this
297
+ return"option"!==e&&"item"!=e||(n=D(t[o.settings.valueField])),null==(s=o.settings.render[e].call(this,t,N))||(s=w(s),"option"===e||"option_create"===e?t[o.settings.disabledField]?P(s,{"aria-disabled":"true"}):P(s,{"data-selectable":""}):"optgroup"===e&&(i=t.group[o.settings.optgroupValueField],P(s,{"data-group":i}),t.group[o.settings.disabledField]&&P(s,{"data-disabled":""})),"option"!==e&&"item"!==e||(P(s,{"data-value":n}),"item"===e?(C(s,o.settings.itemClass),P(s,{"data-ts-item":""})):(C(s,o.settings.optionClass),P(s,{role:"option",id:t.$id}),o.options[n].$div=s))),s}clearCache(){y(this.options,((e,t)=>{e.$div&&(e.$div.remove(),delete e.$div)}))}uncacheValue(e){const t=this.getOption(e)
298
+ t&&t.remove()}canCreate(e){return this.settings.create&&e.length>0&&this.settings.createFilter.call(this,e)}hook(e,t,i){var s=this,n=s[t]
299
+ s[t]=function(){var t,o
300
+ return"after"===e&&(t=n.apply(s,arguments)),o=i.apply(s,arguments),"instead"===e?o:("before"===e&&(t=n.apply(s,arguments)),t)}}}return J.define("change_listener",(function(){B(this.input,"change",(()=>{this.sync()}))})),J.define("checkbox_options",(function(){var e=this,t=e.onOptionSelect
301
+ e.settings.hideSelected=!1
302
+ var i=function(e){setTimeout((()=>{var t=e.querySelector("input")
303
+ e.classList.contains("selected")?t.checked=!0:t.checked=!1}),1)}
304
+ e.hook("after","setupTemplates",(()=>{var t=e.settings.render.option
305
+ e.settings.render.option=(i,s)=>{var n=w(t.call(e,i,s)),o=document.createElement("input")
306
+ o.addEventListener("click",(function(e){H(e)})),o.type="checkbox"
307
+ const r=q(i[e.settings.valueField])
308
+ return r&&e.items.indexOf(r)>-1&&(o.checked=!0),n.prepend(o),n}})),e.on("item_remove",(t=>{var s=e.getOption(t)
309
+ s&&(s.classList.remove("selected"),i(s))})),e.hook("instead","onOptionSelect",((s,n)=>{if(n.classList.contains("selected"))return n.classList.remove("selected"),e.removeItem(n.dataset.value),e.refreshOptions(),void H(s,!0)
310
+ t.call(e,s,n),i(n)}))})),J.define("clear_button",(function(e){const t=this,i=Object.assign({className:"clear-button",title:"Clear All",html:e=>`<div class="${e.className}" title="${e.title}">&times;</div>`},e)
311
+ t.on("initialize",(()=>{var e=w(i.html(i))
312
+ e.addEventListener("click",(e=>{t.clear(),"single"===t.settings.mode&&t.settings.allowEmptyOption&&t.addItem(""),e.preventDefault(),e.stopPropagation()})),t.control.appendChild(e)}))})),J.define("drag_drop",(function(){var e=this
313
+ if(!$.fn.sortable)throw new Error('The "drag_drop" plugin requires jQuery UI "sortable".')
314
+ if("multi"===e.settings.mode){var t=e.lock,i=e.unlock
315
+ e.hook("instead","lock",(()=>{var i=$(e.control).data("sortable")
316
+ return i&&i.disable(),t.call(e)})),e.hook("instead","unlock",(()=>{var t=$(e.control).data("sortable")
317
+ return t&&t.enable(),i.call(e)})),e.on("initialize",(()=>{var t=$(e.control).sortable({items:"[data-value]",forcePlaceholderSize:!0,disabled:e.isLocked,start:(e,i)=>{i.placeholder.css("width",i.helper.css("width")),t.css({overflow:"visible"})},stop:()=>{t.css({overflow:"hidden"})
318
+ var i=[]
319
+ t.children("[data-value]").each((function(){this.dataset.value&&i.push(this.dataset.value)})),e.setValue(i)}})}))}})),J.define("dropdown_header",(function(e){const t=this,i=Object.assign({title:"Untitled",headerClass:"dropdown-header",titleRowClass:"dropdown-header-title",labelClass:"dropdown-header-label",closeClass:"dropdown-header-close",html:e=>'<div class="'+e.headerClass+'"><div class="'+e.titleRowClass+'"><span class="'+e.labelClass+'">'+e.title+'</span><a class="'+e.closeClass+'">&times;</a></div></div>'},e)
320
+ t.on("initialize",(()=>{var e=w(i.html(i)),s=e.querySelector("."+i.closeClass)
321
+ s&&s.addEventListener("click",(e=>{H(e,!0),t.close()})),t.dropdown.insertBefore(e,t.dropdown.firstChild)}))})),J.define("caret_position",(function(){var e=this
322
+ e.hook("instead","setCaret",(t=>{"single"!==e.settings.mode&&e.control.contains(e.control_input)?(t=Math.max(0,Math.min(e.items.length,t)))==e.caretPos||e.isPending||e.controlChildren().forEach(((i,s)=>{s<t?e.control_input.insertAdjacentElement("beforebegin",i):e.control.appendChild(i)})):t=e.items.length,e.caretPos=t})),e.hook("instead","moveCaret",(t=>{if(!e.isFocused)return
323
+ const i=e.getLastActive(t)
324
+ if(i){const s=L(i)
325
+ e.setCaret(t>0?s+1:s),e.setActiveItem()}else e.setCaret(e.caretPos+t)}))})),J.define("dropdown_input",(function(){var e=this
326
+ e.settings.shouldOpen=!0,e.hook("before","setup",(()=>{e.focus_node=e.control,C(e.control_input,"dropdown-input")
327
+ const t=w('<div class="dropdown-input-wrap">')
328
+ t.append(e.control_input),e.dropdown.insertBefore(t,e.dropdown.firstChild)})),e.on("initialize",(()=>{e.control_input.addEventListener("keydown",(t=>{switch(t.keyCode){case 27:return e.isOpen&&(H(t,!0),e.close()),void e.clearActiveItems()
329
+ case 9:e.focus_node.tabIndex=-1}return e.onKeyDown.call(e,t)})),e.on("blur",(()=>{e.focus_node.tabIndex=e.isDisabled?-1:e.tabIndex})),e.on("dropdown_open",(()=>{e.control_input.focus()}))
330
+ const t=e.onBlur
331
+ e.hook("instead","onBlur",(i=>{if(!i||i.relatedTarget!=e.control_input)return t.call(e)})),B(e.control_input,"blur",(()=>e.onBlur())),e.hook("before","close",(()=>{e.isOpen&&e.focus_node.focus()}))}))})),J.define("input_autogrow",(function(){var e=this
332
+ e.on("initialize",(()=>{var t=document.createElement("span"),i=e.control_input
333
+ t.style.cssText="position:absolute; top:-99999px; left:-99999px; width:auto; padding:0; white-space:pre; ",e.wrapper.appendChild(t)
334
+ for(const e of["letterSpacing","fontSize","fontFamily","fontWeight","textTransform"])t.style[e]=i.style[e]
335
+ var s=()=>{e.items.length>0?(t.textContent=i.value,i.style.width=t.clientWidth+"px"):i.style.width=""}
336
+ s(),e.on("update item_add item_remove",s),B(i,"input",s),B(i,"keyup",s),B(i,"blur",s),B(i,"update",s)}))})),J.define("no_backspace_delete",(function(){var e=this,t=e.deleteSelection
337
+ this.hook("instead","deleteSelection",(i=>!!e.activeItems.length&&t.call(e,i)))})),J.define("no_active_items",(function(){this.hook("instead","setActiveItem",(()=>{})),this.hook("instead","selectAll",(()=>{}))})),J.define("optgroup_columns",(function(){var e=this,t=e.onKeyDown
338
+ e.hook("instead","onKeyDown",(i=>{var s,n,o,r
339
+ if(!e.isOpen||37!==i.keyCode&&39!==i.keyCode)return t.call(e,i)
340
+ r=k(e.activeOption,"[data-group]"),s=L(e.activeOption,"[data-selectable]"),r&&(r=37===i.keyCode?r.previousSibling:r.nextSibling)&&(n=(o=r.querySelectorAll("[data-selectable]"))[Math.min(o.length-1,s)])&&e.setActiveOption(n)}))})),J.define("remove_button",(function(e){const t=Object.assign({label:"&times;",title:"Remove",className:"remove",append:!0},e)
341
+ var i=this
342
+ if(t.append){var s='<a href="javascript:void(0)" class="'+t.className+'" tabindex="-1" title="'+N(t.title)+'">'+t.label+"</a>"
343
+ i.hook("after","setupTemplates",(()=>{var e=i.settings.render.item
344
+ i.settings.render.item=(t,n)=>{var o=w(e.call(i,t,n)),r=w(s)
345
+ return o.appendChild(r),B(r,"mousedown",(e=>{H(e,!0)})),B(r,"click",(e=>{if(H(e,!0),!i.isLocked){var t=o.dataset.value
346
+ i.removeItem(t),i.refreshOptions(!1)}})),o}}))}})),J.define("restore_on_backspace",(function(e){const t=this,i=Object.assign({text:e=>e[t.settings.labelField]},e)
347
+ t.on("item_remove",(function(e){if(""===t.control_input.value.trim()){var s=t.options[e]
348
+ s&&t.setTextboxValue(i.text.call(t,s))}}))})),J.define("virtual_scroll",(function(){const e=this,t=e.canLoad,i=e.clearActiveOption,s=e.loadCallback
349
+ var n,o={},r=!1
350
+ if(!e.settings.firstUrl)throw"virtual_scroll plugin requires a firstUrl() method"
351
+ function l(t){return!("number"==typeof e.settings.maxOptions&&n.children.length>=e.settings.maxOptions)&&!(!(t in o)||!o[t])}e.settings.sortField=[{field:"$order"},{field:"$score"}],e.setNextUrl=function(e,t){o[e]=t},e.getUrl=function(t){if(t in o){const e=o[t]
352
+ return o[t]=!1,e}return o={},e.settings.firstUrl(t)},e.hook("instead","clearActiveOption",(()=>{if(!r)return i.call(e)})),e.hook("instead","canLoad",(i=>i in o?l(i):t.call(e,i))),e.hook("instead","loadCallback",((t,i)=>{r||e.clearOptions(),s.call(e,t,i),r=!1})),e.hook("after","refreshOptions",(()=>{const t=e.lastValue
353
+ var i
354
+ l(t)?(i=e.render("loading_more",{query:t}))&&i.setAttribute("data-selectable",""):t in o&&!n.querySelector(".no-results")&&(i=e.render("no_more_results",{query:t})),i&&(C(i,e.settings.optionClass),n.append(i))})),e.on("initialize",(()=>{n=e.dropdown_content,e.settings.render=Object.assign({},{loading_more:function(){return'<div class="loading-more-results">Loading more results ... </div>'},no_more_results:function(){return'<div class="no-more-results">No more results</div>'}},e.settings.render),n.addEventListener("scroll",(function(){n.clientHeight/(n.scrollHeight-n.scrollTop)<.95||l(e.lastValue)&&(r||(r=!0,e.load.call(e,e.lastValue)))}))}))})),J}))
355
+ var tomSelect=function(e,t){return new TomSelect(e,t)}
356
+ //# sourceMappingURL=tom-select.complete.min.js.map
space/lib/tom-select/tom-select.css ADDED
@@ -0,0 +1,334 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * tom-select.css (v2.0.0-rc.4)
3
+ * Copyright (c) contributors
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this
6
+ * file except in compliance with the License. You may obtain a copy of the License at:
7
+ * http://www.apache.org/licenses/LICENSE-2.0
8
+ *
9
+ * Unless required by applicable law or agreed to in writing, software distributed under
10
+ * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
11
+ * ANY KIND, either express or implied. See the License for the specific language
12
+ * governing permissions and limitations under the License.
13
+ *
14
+ */
15
+ .ts-wrapper.plugin-drag_drop.multi > .ts-control > div.ui-sortable-placeholder {
16
+ visibility: visible !important;
17
+ background: #f2f2f2 !important;
18
+ background: rgba(0, 0, 0, 0.06) !important;
19
+ border: 0 none !important;
20
+ box-shadow: inset 0 0 12px 4px #fff; }
21
+
22
+ .ts-wrapper.plugin-drag_drop .ui-sortable-placeholder::after {
23
+ content: '!';
24
+ visibility: hidden; }
25
+
26
+ .ts-wrapper.plugin-drag_drop .ui-sortable-helper {
27
+ box-shadow: 0 2px 5px rgba(0, 0, 0, 0.2); }
28
+
29
+ .plugin-checkbox_options .option input {
30
+ margin-right: 0.5rem; }
31
+
32
+ .plugin-clear_button .ts-control {
33
+ padding-right: calc( 1em + (3 * 6px)) !important; }
34
+
35
+ .plugin-clear_button .clear-button {
36
+ opacity: 0;
37
+ position: absolute;
38
+ top: 8px;
39
+ right: calc(8px - 6px);
40
+ margin-right: 0 !important;
41
+ background: transparent !important;
42
+ transition: opacity 0.5s;
43
+ cursor: pointer; }
44
+
45
+ .plugin-clear_button.single .clear-button {
46
+ right: calc(8px - 6px + 2rem); }
47
+
48
+ .plugin-clear_button.focus.has-items .clear-button,
49
+ .plugin-clear_button:hover.has-items .clear-button {
50
+ opacity: 1; }
51
+
52
+ .ts-wrapper .dropdown-header {
53
+ position: relative;
54
+ padding: 10px 8px;
55
+ border-bottom: 1px solid #d0d0d0;
56
+ background: #f8f8f8;
57
+ border-radius: 3px 3px 0 0; }
58
+
59
+ .ts-wrapper .dropdown-header-close {
60
+ position: absolute;
61
+ right: 8px;
62
+ top: 50%;
63
+ color: #303030;
64
+ opacity: 0.4;
65
+ margin-top: -12px;
66
+ line-height: 20px;
67
+ font-size: 20px !important; }
68
+
69
+ .ts-wrapper .dropdown-header-close:hover {
70
+ color: black; }
71
+
72
+ .plugin-dropdown_input.focus.dropdown-active .ts-control {
73
+ box-shadow: none;
74
+ border: 1px solid #d0d0d0; }
75
+
76
+ .plugin-dropdown_input .dropdown-input {
77
+ border: 1px solid #d0d0d0;
78
+ border-width: 0 0 1px 0;
79
+ display: block;
80
+ padding: 8px 8px;
81
+ box-shadow: none;
82
+ width: 100%;
83
+ background: transparent; }
84
+
85
+ .ts-wrapper.plugin-input_autogrow.has-items .ts-control > input {
86
+ min-width: 0; }
87
+
88
+ .ts-wrapper.plugin-input_autogrow.has-items.focus .ts-control > input {
89
+ flex: none;
90
+ min-width: 4px; }
91
+ .ts-wrapper.plugin-input_autogrow.has-items.focus .ts-control > input::-webkit-input-placeholder {
92
+ color: transparent; }
93
+ .ts-wrapper.plugin-input_autogrow.has-items.focus .ts-control > input::-ms-input-placeholder {
94
+ color: transparent; }
95
+ .ts-wrapper.plugin-input_autogrow.has-items.focus .ts-control > input::placeholder {
96
+ color: transparent; }
97
+
98
+ .ts-dropdown.plugin-optgroup_columns .ts-dropdown-content {
99
+ display: flex; }
100
+
101
+ .ts-dropdown.plugin-optgroup_columns .optgroup {
102
+ border-right: 1px solid #f2f2f2;
103
+ border-top: 0 none;
104
+ flex-grow: 1;
105
+ flex-basis: 0;
106
+ min-width: 0; }
107
+
108
+ .ts-dropdown.plugin-optgroup_columns .optgroup:last-child {
109
+ border-right: 0 none; }
110
+
111
+ .ts-dropdown.plugin-optgroup_columns .optgroup:before {
112
+ display: none; }
113
+
114
+ .ts-dropdown.plugin-optgroup_columns .optgroup-header {
115
+ border-top: 0 none; }
116
+
117
+ .ts-wrapper.plugin-remove_button .item {
118
+ display: inline-flex;
119
+ align-items: center;
120
+ padding-right: 0 !important; }
121
+
122
+ .ts-wrapper.plugin-remove_button .item .remove {
123
+ color: inherit;
124
+ text-decoration: none;
125
+ vertical-align: middle;
126
+ display: inline-block;
127
+ padding: 2px 6px;
128
+ border-left: 1px solid #d0d0d0;
129
+ border-radius: 0 2px 2px 0;
130
+ box-sizing: border-box;
131
+ margin-left: 6px; }
132
+
133
+ .ts-wrapper.plugin-remove_button .item .remove:hover {
134
+ background: rgba(0, 0, 0, 0.05); }
135
+
136
+ .ts-wrapper.plugin-remove_button .item.active .remove {
137
+ border-left-color: #cacaca; }
138
+
139
+ .ts-wrapper.plugin-remove_button.disabled .item .remove:hover {
140
+ background: none; }
141
+
142
+ .ts-wrapper.plugin-remove_button.disabled .item .remove {
143
+ border-left-color: white; }
144
+
145
+ .ts-wrapper.plugin-remove_button .remove-single {
146
+ position: absolute;
147
+ right: 0;
148
+ top: 0;
149
+ font-size: 23px; }
150
+
151
+ .ts-wrapper {
152
+ position: relative; }
153
+
154
+ .ts-dropdown,
155
+ .ts-control,
156
+ .ts-control input {
157
+ color: #303030;
158
+ font-family: inherit;
159
+ font-size: 13px;
160
+ line-height: 18px;
161
+ font-smoothing: inherit; }
162
+
163
+ .ts-control,
164
+ .ts-wrapper.single.input-active .ts-control {
165
+ background: #fff;
166
+ cursor: text; }
167
+
168
+ .ts-control {
169
+ border: 1px solid #d0d0d0;
170
+ padding: 8px 8px;
171
+ width: 100%;
172
+ overflow: hidden;
173
+ position: relative;
174
+ z-index: 1;
175
+ box-sizing: border-box;
176
+ box-shadow: none;
177
+ border-radius: 3px;
178
+ display: flex;
179
+ flex-wrap: wrap; }
180
+ .ts-wrapper.multi.has-items .ts-control {
181
+ padding: calc( 8px - 2px - 0) 8px calc( 8px - 2px - 3px - 0); }
182
+ .full .ts-control {
183
+ background-color: #fff; }
184
+ .disabled .ts-control,
185
+ .disabled .ts-control * {
186
+ cursor: default !important; }
187
+ .focus .ts-control {
188
+ box-shadow: none; }
189
+ .ts-control > * {
190
+ vertical-align: baseline;
191
+ display: inline-block; }
192
+ .ts-wrapper.multi .ts-control > div {
193
+ cursor: pointer;
194
+ margin: 0 3px 3px 0;
195
+ padding: 2px 6px;
196
+ background: #f2f2f2;
197
+ color: #303030;
198
+ border: 0 solid #d0d0d0; }
199
+ .ts-wrapper.multi .ts-control > div.active {
200
+ background: #e8e8e8;
201
+ color: #303030;
202
+ border: 0 solid #cacaca; }
203
+ .ts-wrapper.multi.disabled .ts-control > div, .ts-wrapper.multi.disabled .ts-control > div.active {
204
+ color: #7d7c7c;
205
+ background: white;
206
+ border: 0 solid white; }
207
+ .ts-control > input {
208
+ flex: 1 1 auto;
209
+ min-width: 7rem;
210
+ display: inline-block !important;
211
+ padding: 0 !important;
212
+ min-height: 0 !important;
213
+ max-height: none !important;
214
+ max-width: 100% !important;
215
+ margin: 0 !important;
216
+ text-indent: 0 !important;
217
+ border: 0 none !important;
218
+ background: none !important;
219
+ line-height: inherit !important;
220
+ -webkit-user-select: auto !important;
221
+ -moz-user-select: auto !important;
222
+ -ms-user-select: auto !important;
223
+ user-select: auto !important;
224
+ box-shadow: none !important; }
225
+ .ts-control > input::-ms-clear {
226
+ display: none; }
227
+ .ts-control > input:focus {
228
+ outline: none !important; }
229
+ .has-items .ts-control > input {
230
+ margin: 0 4px !important; }
231
+ .ts-control.rtl {
232
+ text-align: right; }
233
+ .ts-control.rtl.single .ts-control:after {
234
+ left: 15px;
235
+ right: auto; }
236
+ .ts-control.rtl .ts-control > input {
237
+ margin: 0 4px 0 -2px !important; }
238
+ .disabled .ts-control {
239
+ opacity: 0.5;
240
+ background-color: #fafafa; }
241
+ .input-hidden .ts-control > input {
242
+ opacity: 0;
243
+ position: absolute;
244
+ left: -10000px; }
245
+
246
+ .ts-dropdown {
247
+ position: absolute;
248
+ top: 100%;
249
+ left: 0;
250
+ width: 100%;
251
+ z-index: 10;
252
+ border: 1px solid #d0d0d0;
253
+ background: #fff;
254
+ margin: 0.25rem 0 0 0;
255
+ border-top: 0 none;
256
+ box-sizing: border-box;
257
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
258
+ border-radius: 0 0 3px 3px; }
259
+ .ts-dropdown [data-selectable] {
260
+ cursor: pointer;
261
+ overflow: hidden; }
262
+ .ts-dropdown [data-selectable] .highlight {
263
+ background: rgba(125, 168, 208, 0.2);
264
+ border-radius: 1px; }
265
+ .ts-dropdown .option,
266
+ .ts-dropdown .optgroup-header,
267
+ .ts-dropdown .no-results,
268
+ .ts-dropdown .create {
269
+ padding: 5px 8px; }
270
+ .ts-dropdown .option, .ts-dropdown [data-disabled], .ts-dropdown [data-disabled] [data-selectable].option {
271
+ cursor: inherit;
272
+ opacity: 0.5; }
273
+ .ts-dropdown [data-selectable].option {
274
+ opacity: 1;
275
+ cursor: pointer; }
276
+ .ts-dropdown .optgroup:first-child .optgroup-header {
277
+ border-top: 0 none; }
278
+ .ts-dropdown .optgroup-header {
279
+ color: #303030;
280
+ background: #fff;
281
+ cursor: default; }
282
+ .ts-dropdown .create:hover,
283
+ .ts-dropdown .option:hover,
284
+ .ts-dropdown .active {
285
+ background-color: #f5fafd;
286
+ color: #495c68; }
287
+ .ts-dropdown .create:hover.create,
288
+ .ts-dropdown .option:hover.create,
289
+ .ts-dropdown .active.create {
290
+ color: #495c68; }
291
+ .ts-dropdown .create {
292
+ color: rgba(48, 48, 48, 0.5); }
293
+ .ts-dropdown .spinner {
294
+ display: inline-block;
295
+ width: 30px;
296
+ height: 30px;
297
+ margin: 5px 8px; }
298
+ .ts-dropdown .spinner:after {
299
+ content: " ";
300
+ display: block;
301
+ width: 24px;
302
+ height: 24px;
303
+ margin: 3px;
304
+ border-radius: 50%;
305
+ border: 5px solid #d0d0d0;
306
+ border-color: #d0d0d0 transparent #d0d0d0 transparent;
307
+ animation: lds-dual-ring 1.2s linear infinite; }
308
+
309
+ @keyframes lds-dual-ring {
310
+ 0% {
311
+ transform: rotate(0deg); }
312
+ 100% {
313
+ transform: rotate(360deg); } }
314
+
315
+ .ts-dropdown-content {
316
+ overflow-y: auto;
317
+ overflow-x: hidden;
318
+ max-height: 200px;
319
+ overflow-scrolling: touch;
320
+ scroll-behavior: smooth; }
321
+
322
+ .ts-hidden-accessible {
323
+ border: 0 !important;
324
+ clip: rect(0 0 0 0) !important;
325
+ -webkit-clip-path: inset(50%) !important;
326
+ clip-path: inset(50%) !important;
327
+ height: 1px !important;
328
+ overflow: hidden !important;
329
+ padding: 0 !important;
330
+ position: absolute !important;
331
+ width: 1px !important;
332
+ white-space: nowrap !important; }
333
+
334
+ /*# sourceMappingURL=tom-select.css.map */
space/lib/vis-9.1.2/vis-network.css ADDED
The diff for this file is too large to render. See raw diff
 
space/lib/vis-9.1.2/vis-network.min.js ADDED
The diff for this file is too large to render. See raw diff
 
space/requirements.txt CHANGED
@@ -5,4 +5,6 @@ transformers
5
  wordcloud
6
  pydantic
7
  uvicorn
8
- gliner
 
 
 
5
  wordcloud
6
  pydantic
7
  uvicorn
8
+ gliner
9
+ pygraphviz
10
+ graphviz
space/space/.gitignore CHANGED
@@ -34,6 +34,8 @@ wordcloud.png
34
  wordcloud_output
35
  extracted_entities
36
  entities
 
 
37
 
38
  # Gradio cache & config
39
  gradio_cached_examples/
 
34
  wordcloud_output
35
  extracted_entities
36
  entities
37
+ mindmap.png
38
+ mindmap_output
39
 
40
  # Gradio cache & config
41
  gradio_cached_examples/
space/space/app.py CHANGED
@@ -2,22 +2,75 @@ from fastapi import FastAPI,HTTPException
2
  from pydantic import BaseModel
3
  from fastapi.responses import FileResponse
4
  import gradio as gr
5
- from entity_recognition import extract_entities # Import entity extraction function
6
  #from entity_recognition import generate_word_cloud
7
  from wordcloud import WordCloud
8
  from summarization import summarizer
9
- import os
10
  from utils import list_files,process_file
11
 
12
  # import threading
13
- import time
14
  app = FastAPI()
15
 
16
  # Request Model
17
  class TextRequest(BaseModel):
18
  text: str
 
 
19
 
20
- # Summarization Endpoint
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
21
  @app.post("/summarize")
22
  def summarize_text(request: TextRequest):
23
  chunks = [request.text[i:i+500] for i in range(0, len(request.text), 500)]
@@ -44,39 +97,69 @@ def extract_entities_endpoint(request: TextRequest):
44
  # Word Cloud Generation Endpoint
45
  @app.post("/wordcloud")
46
  def generate_word_cloud(request: TextRequest):
47
- wordcloud = WordCloud(width=800, height=600,max_font_size=40, min_font_size=10, background_color="white").generate(request.text)
48
  img_path = "wordcloud.png"
49
  wordcloud.to_file(img_path)
50
  return FileResponse(img_path, media_type="image/png", filename="wordcloud.png")
51
 
52
 
53
-
54
  # Gradio UI
55
  with gr.Blocks() as iface:
56
  gr.Markdown("File Selector")
57
  gr.Markdown("Choose a file and process it for summarization, entity recognition, and word cloud generation.")
58
 
59
- # File selection dropdown
60
- file_dropdown = gr.Dropdown(choices=list_files(), label="Select a File", interactive=True)
61
- process_button = gr.Button("Process")
 
62
 
 
 
 
 
63
 
64
- # Outputs
65
- output_summary = gr.Textbox(label="Summarized Text")
66
- output_entities = gr.JSON(label="Entities")
67
- output_wordcloud = gr.Image(label="Word Cloud")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
68
 
69
-
70
  # Process selected file
71
  process_button.click(
72
  fn=process_file,
73
  inputs=file_dropdown,
74
- outputs=[output_summary, output_entities, output_wordcloud]
75
  )
76
 
77
-
78
-
 
 
 
 
 
 
 
 
 
 
79
  if __name__ == "__main__":
80
- iface.launch(server_name="0.0.0.0", server_port=7860, share=False)
81
- time.sleep(1) # Allow time for logs
82
- print("\n\n **Gradio Interface is LIVE at: http://localhost:7860 ** \n")
 
2
  from pydantic import BaseModel
3
  from fastapi.responses import FileResponse
4
  import gradio as gr
5
+ from entity_recognition import extract_entities # Import entity extraction function
6
  #from entity_recognition import generate_word_cloud
7
  from wordcloud import WordCloud
8
  from summarization import summarizer
 
9
  from utils import list_files,process_file
10
 
11
  # import threading
12
+ TEXT_FOLDER = "jfk_text"
13
  app = FastAPI()
14
 
15
  # Request Model
16
  class TextRequest(BaseModel):
17
  text: str
18
+ import pygraphviz as pgv
19
+ import re
20
 
21
+ def generate_mermaid_mindmap(text):
22
+ entities = extract_entities(text)
23
+ print("Extracted Entities:", entities)
24
+
25
+ # Create a directed graph
26
+ G = pgv.AGraph(directed=True, rankdir="TB", bgcolor="white")
27
+
28
+ # Add root node
29
+ G.add_node("Document", shape="ellipse", style="filled", fillcolor="lightblue", label="Document")
30
+
31
+ # Keep track of node names to ensure uniqueness
32
+ node_counter = {}
33
+
34
+ for category, values in entities.items():
35
+ # Sanitize category name for the node identifier
36
+ safe_category = re.sub(r'[^a-zA-Z0-9_]', '', category)
37
+ if not safe_category or safe_category.startswith('.'):
38
+ safe_category = "Category_" + str(hash(category) % 10000)
39
+
40
+ # Add category node
41
+ G.add_node(safe_category, shape="box", style="filled", fillcolor="lightgreen", label=category)
42
+ G.add_edge("Document", safe_category)
43
+
44
+ for value in values:
45
+ # Clean up the value
46
+ cleaned_value = value.strip().rstrip(')').lstrip(',')
47
+ if not cleaned_value:
48
+ cleaned_value = "Unknown"
49
+
50
+ # Truncate long values for readability (max 50 characters)
51
+ if len(cleaned_value) > 50:
52
+ cleaned_value = cleaned_value[:47] + "..."
53
+
54
+ # Sanitize value name for the node identifier
55
+ safe_value = re.sub(r'[^a-zA-Z0-9_]', '', cleaned_value)
56
+ if not safe_value:
57
+ safe_value = "Value_" + str(hash(cleaned_value) % 10000)
58
+
59
+ # Ensure unique node name
60
+ node_key = safe_value
61
+ node_counter[node_key] = node_counter.get(node_key, 0) + 1
62
+ if node_counter[node_key] > 1:
63
+ safe_value = f"{safe_value}_{node_counter[node_key]}"
64
+
65
+ # Add value node
66
+ G.add_node(safe_value, shape="ellipse", style="filled", fillcolor="lightyellow", label=cleaned_value)
67
+ G.add_edge(safe_category, safe_value)
68
+
69
+ # Render the graph to a PNG file
70
+ output_path = "mindmap.png"
71
+ G.draw(output_path, format="png", prog="dot") # 'dot' is the layout engine
72
+
73
+ return output_path
74
  @app.post("/summarize")
75
  def summarize_text(request: TextRequest):
76
  chunks = [request.text[i:i+500] for i in range(0, len(request.text), 500)]
 
97
  # Word Cloud Generation Endpoint
98
  @app.post("/wordcloud")
99
  def generate_word_cloud(request: TextRequest):
100
+ wordcloud = WordCloud(width=800, height=800,max_font_size=40, min_font_size=10, background_color="white").generate(request.text)
101
  img_path = "wordcloud.png"
102
  wordcloud.to_file(img_path)
103
  return FileResponse(img_path, media_type="image/png", filename="wordcloud.png")
104
 
105
 
 
106
  # Gradio UI
107
  with gr.Blocks() as iface:
108
  gr.Markdown("File Selector")
109
  gr.Markdown("Choose a file and process it for summarization, entity recognition, and word cloud generation.")
110
 
111
+ # **File selection & process button**
112
+ with gr.Row():
113
+ file_dropdown = gr.Dropdown(choices=list_files(), label=" Select a File", interactive=True)
114
+ process_button = gr.Button(" Process")
115
 
116
+ # **First Row (Original Text & Summary)**
117
+ with gr.Row():
118
+ full_doc_text = gr.Textbox(label=" Full Document")
119
+ output_summary = gr.Textbox(label=" Summarized Text")
120
 
121
+ # **Second Row (Entities & Word Cloud)**
122
+ with gr.Row():
123
+ output_entities = gr.JSON(label=" Entities")
124
+ output_wordcloud = gr.Image(label=" Word Cloud")
125
+ with gr.Row():
126
+ generate_mindmap_button = gr.Button("Generate Mind Map")
127
+ output_mindmap = gr.Image(label="Mind Map") # Use HTML instead of Textbox
128
+
129
+ generate_mindmap_button.click(
130
+ fn=generate_mermaid_mindmap,
131
+ inputs=full_doc_text,
132
+ outputs=output_mindmap
133
+ )
134
+
135
+
136
+ # # **Mind Map Generation**
137
+ # with gr.Row():
138
+ # generate_mindmap_button = gr.Button("Generate Mind Map")
139
+ # output_mindmap = gr.Image(label="Mind Map")
140
+ # Mind Map Generation Section
141
+ # with gr.Row():
142
+ # generate_mindmap_button = gr.Button("Generate Mind Map")
143
+ # output_mindmap = gr.HTML(label="Mind Map")
144
 
 
145
  # Process selected file
146
  process_button.click(
147
  fn=process_file,
148
  inputs=file_dropdown,
149
+ outputs=[full_doc_text, output_summary, output_entities, output_wordcloud]
150
  )
151
 
152
+ # # Connect mind map button to function (MOVE THIS INSIDE `with gr.Blocks()`)
153
+ # generate_mindmap_button.click(
154
+ # fn=generate_mind_map,
155
+ # inputs=full_doc_text, # Use the full document text
156
+ # outputs=output_mindmap
157
+ # )
158
+ # generate_mindmap_button.click(
159
+ # fn=generate_mermaid_mindmap,
160
+ # inputs=full_doc_text,
161
+ # outputs=output_mindmap
162
+ # )
163
+ # Launch Gradio app
164
  if __name__ == "__main__":
165
+ iface.launch(server_name="0.0.0.0", server_port=7860, share=False, debug=True)
 
 
space/space/entity_recognition.py CHANGED
@@ -3,7 +3,23 @@ import torch
3
  import matplotlib.pyplot as plt
4
  from wordcloud import WordCloud
5
  from gliner import GLiNER
6
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7
  # 📂 Define input/output directories
8
  input_dir = "summaryoutput" # Folder containing summarized documents
9
  entity_output_dir = "extracted_entities" # Folder to save extracted entities
@@ -14,29 +30,63 @@ device = "cuda" if torch.cuda.is_available() else "cpu" # Use GPU if available
14
  model = GLiNER.from_pretrained("urchade/gliner_medium-v2.1").to(device)
15
 
16
  # Define labels for entity extraction
17
- labels = ["person", "organization", "location", "date", "document", "event", "role", "cryptonym", "operation", "nationality", "contact"]
18
- # 💡 Get already processed files
19
  existing_entity_files = set(os.listdir(entity_output_dir))
20
-
21
- # 🔹 Function to extract entities from text
22
  def extract_entities(text):
23
  entities = model.predict_entities(text, labels)
24
- extracted_entities = {}
25
-
 
 
 
 
 
 
 
 
 
 
 
 
26
  for entity in entities:
27
  entity_type = entity["label"]
28
- entity_text = entity["text"]
29
-
30
- if entity_type not in extracted_entities:
31
- extracted_entities[entity_type] = set()
32
-
33
- extracted_entities[entity_type].add(entity_text)
34
-
35
- return extracted_entities
36
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
37
  # Function to generate word cloud
38
  def generate_word_cloud(text, output_filename):
39
- wordcloud = WordCloud(width=800, height=400, background_color="white").generate(text)
 
 
 
 
40
 
41
  # Save word cloud image
42
  plt.figure(figsize=(10, 5))
@@ -95,5 +145,5 @@ def extract_entities_from_summaries():
95
  print(" Entity extraction and word cloud generation completed!")
96
 
97
 
98
- if __name__ == "__main__":
99
  extract_entities_from_summaries()
 
3
  import matplotlib.pyplot as plt
4
  from wordcloud import WordCloud
5
  from gliner import GLiNER
6
+ import spacy
7
+ import re
8
+ # Load spaCy English model
9
+ nlp = spacy.load("en_core_web_sm")
10
+
11
+ # Function to remove stop words
12
+ def preprocess_text(text):
13
+ doc = nlp(text)
14
+ filtered_words = [ token.lemma_ # Convert to base form
15
+ for token in doc
16
+ if not token.is_stop # Remove stop words
17
+ and not token.is_punct # Remove punctuation
18
+ and not token.is_digit # Remove numbers
19
+ and len(token.text) > 2 ]
20
+
21
+ return " ".join(filtered_words)
22
+
23
  # 📂 Define input/output directories
24
  input_dir = "summaryoutput" # Folder containing summarized documents
25
  entity_output_dir = "extracted_entities" # Folder to save extracted entities
 
30
  model = GLiNER.from_pretrained("urchade/gliner_medium-v2.1").to(device)
31
 
32
  # Define labels for entity extraction
33
+ labels = ["person", "organization", "location", "date", "document", "event", "role", "cryptonym", "operation", "nationality", "contact","SUBJECT","REFERENCE","FROM","TO","DATE","REF","INFO"]
34
+ # Get already processed files
35
  existing_entity_files = set(os.listdir(entity_output_dir))
 
 
36
  def extract_entities(text):
37
  entities = model.predict_entities(text, labels)
38
+ extracted = {}
39
+ regex_patterns = {
40
+ "TO": r"(?i)\bTO[:\s]+([^\n]+)",
41
+ "FROM": r"(?i)\bFROM[:\s]+([^\n]+)",
42
+ "DATE": r"(?i)\bDATE[:\s]+([^\n]+)",
43
+ "REF": r"(?i)\bREF[:\s]+([^\n]+)",
44
+ "SUBJECT": r"(?i)\bSUBJECT[:\s]+([^\n]+)",
45
+ }
46
+ for label, pattern in regex_patterns.items():
47
+ matches = re.findall(pattern, text)
48
+ if matches:
49
+ # Clean up matches
50
+ cleaned_matches = [m.strip().rstrip(')').lstrip(',') for m in matches]
51
+ extracted[label] = list(set(cleaned_matches)) # Remove duplicates
52
  for entity in entities:
53
  entity_type = entity["label"]
54
+ entity_text = entity["text"].strip().rstrip(')').lstrip(',')
55
+ if entity_type not in extracted:
56
+ extracted[entity_type] = []
57
+ if entity_text not in extracted[entity_type]: # Avoid duplicates
58
+ extracted[entity_type].append(entity_text)
59
+ return extracted
60
+ # def extract_entities(text):
61
+ # entities = model.predict_entities(text, labels)
62
+ # extracted = {}
63
+ # regex_patterns = {
64
+ # "TO": r"(?i)\bTO[:\s]+([^\n]+)", # Matches "TO: some text"
65
+ # "FROM": r"(?i)\bFROM[:\s]+([^\n]+)", # Matches "FROM: some text"
66
+ # "DATE": r"(?i)\bDATE[:\s]+([^\n]+)", # Matches "DATE: some text"
67
+ # "REF": r"(?i)\bREF[:\s]+([^\n]+)", # Matches "REF: some text"
68
+ # "SUBJECT": r"(?i)\bSUBJECT[:\s]+([^\n]+)", # Matches "SUBJECT: some text"
69
+ # }
70
+ # # Apply regex patterns
71
+ # for label, pattern in regex_patterns.items():
72
+ # matches = re.findall(pattern, text)
73
+ # if matches:
74
+ # extracted[label] = matches
75
+
76
+ # for entity in entities:
77
+ # entity_type = entity["label"]
78
+ # entity_text = entity["text"]
79
+ # if entity_type not in extracted:
80
+ # extracted[entity_type] = []
81
+ # extracted[entity_type].append(entity_text)
82
+ # return extracted
83
  # Function to generate word cloud
84
  def generate_word_cloud(text, output_filename):
85
+ os.makedirs(os.path.dirname(output_filename), exist_ok=True)
86
+ filtered_text = preprocess_text(text)
87
+ wordcloud = WordCloud(width=800, height=400, background_color="white").generate(filtered_text)
88
+ wordcloud.to_file(output_filename)
89
+
90
 
91
  # Save word cloud image
92
  plt.figure(figsize=(10, 5))
 
145
  print(" Entity extraction and word cloud generation completed!")
146
 
147
 
148
+ if __name__ == "__main__"and False:
149
  extract_entities_from_summaries()
space/space/jfk_text/104-10003-10041.md ADDED
@@ -0,0 +1,47 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # 104-10003-10041 2025 RELEASE UNDER THE PRESIDENT JOHN F. KENNEDY ASSASSINATION RECORDS ACT OF 1992
2
+
3
+ ☐ UNCLASSIFIED
4
+ ☐ INTERNAL ONLY
5
+ ☐ CONFI**I**NTIAL
6
+ ☑ SECRET
7
+
8
+ ## ROUTING AND RECORD SHEET
9
+
10
+ SUBJECT: (Optional)
11
+
12
+ Clipping of article "The Kennedy Murder and the Secret Services of the USA"
13
+
14
+ FROM:
15
+
16
+ WE/4/INT Arthur P. Iorio
17
+
18
+ EXTENSION NO.
19
+
20
+ DATE: 26 March 1964
21
+
22
+ TO: (Officer designation, room number, and building) | DATE | OFFICER'S INITIALS | COMMENTS (Number each comment to show from whom to whom. Draw a line across column after each comment.)
23
+ -----|------|-------|-----
24
+ 1. CI Staff Birch O'Neil Room 2603 | RECEIVED | FORWARDED | The attached article, which may be of interest to you, appeared in the 7 March issue of the Italian Communist Party weekly Rinascita. The writer, Gianfranco Corsini, has been on and off US correspondent for the Italian Communist press. Note that in the section pencille in red rumors are referred which suggest that kind it was the Agency to organize the murder of President Kennedy.
25
+ 2. | | |
26
+ 3. | | |
27
+ 4. | | |
28
+ 5. | | |
29
+ 6. | | |
30
+ 7. | | |
31
+ 8. | | |
32
+ 9. | | |
33
+ 10. | | |
34
+ 11. | | |
35
+ 12. | | |
36
+ 13. | | |
37
+ 14. | | |
38
+ 15. | | 18 |
39
+
40
+ FORM 610 USE PREVIOUS EDITIONS 3-62
41
+
42
+ ☑ SECRET
43
+ ☐ CONFIDENTIAL
44
+ ☐ INTERNAL USE ONLY
45
+ ☐ UNCLASSIFIED
46
+
47
+ Clipping not retained
space/space/jfk_text/104-10004-10143 (C06932208).md ADDED
@@ -0,0 +1,147 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ 104-10004-10143
2
+ 2025 RELEASE UNDER THE PRESIDENT JOHN F. KENNEDY ASSASSINATION RECORDS ACT OF 1992
3
+
4
+ Date: 05/08/96
5
+ Page: 1
6
+
7
+ JFK ASSASSINATION SYSTEM
8
+ IDENTIFICATION FORM
9
+
10
+ AGENCY INFORMATION
11
+
12
+ AGENCY : CIA
13
+ RECORD NUMBER : 104-10004-10143
14
+ RECORD SERIES : JFK
15
+ AGENCY FILE NUMBER : 201-289248
16
+
17
+ DOCUMENT INFORMATION
18
+
19
+ ORIGINATOR : CIA
20
+ FROM :
21
+ TO :
22
+ TITLE : DISCUSSION BETWEEN MEMBER SR DIVISION CONCERNING
23
+ OSWALD'S STAY IN HELSINKI.
24
+ DATE : 06/01/64
25
+ PAGES : 2
26
+ SUBJECTS : HELSINKI TRIP
27
+ USSR CONSULATE
28
+
29
+ DOCUMENT TYPE : PAPER, TEXTUAL DOCUMENT
30
+ CLASSIFICATION : SECRET
31
+ RESTRICTIONS : 1B
32
+ CURRENT STATUS : RELEASED WITH DELETIONS
33
+ DATE OF LAST REVIEW : 06/12/93
34
+ OPENING CRITERIA :
35
+ COMMENTS : OSW10:V43 1993.06.12.10:33:55:150000:
36
+
37
+ [R] ITEM IS RESTRICTED
38
+ NW 64937 Docld:32106269 Page 1
39
+
40
+ INTERNAL
41
+ USE ONLY
42
+ CO DENTIAL
43
+ SECRET
44
+ ROUTING AND RECORD SHEET
45
+
46
+ SUBJECT: (Optional)
47
+
48
+ FROM: CIRA/PS
49
+ 2823
50
+
51
+ TO: (Officer designation, room number, and
52
+ building)
53
+ DATE
54
+ SX-25605
55
+ 1 June 64
56
+
57
+ OFFICER'S
58
+ INITIALS
59
+ COMMENTS (Number each comment to show from whom
60
+ to whom. Draw a line across column after each comment.)
61
+ RECEIVED
62
+ FORWARDED
63
+ 1.
64
+ IPIAN
65
+ 5 MAR 1975
66
+ Phoe assign
67
+ SX # and
68
+ clamefs to
69
+ 2.
70
+ 3.
71
+ 4.
72
+ 5.
73
+ IP JEDI
74
+ 6.
75
+ 201-289248
76
+ 7.
77
+ 8.
78
+ IPIFILES
79
+ Document Number 716-838
80
+ for FOIA Review on JUN 1976
81
+
82
+ Ath Pori, Millen
83
+ 10.
84
+ 11.
85
+ 12.
86
+ 13.
87
+ 14.
88
+ 15.
89
+ FORM 610 USE PREVIOUS
90
+ NW-64937 DocId 32906269 Page 2
91
+ CONFIDENTIAL
92
+ INTERNAL
93
+ USE ONLY
94
+ UNCLASSIFIED
95
+
96
+ MEMO FOR THE RECORD
97
+ 1 June 1964.
98
+ SX-25605
99
+ Discussion betroen MOMBOR SR. Divisiong
100
+ and CoS Helsinki CONCERNING timetable
101
+ OF OSWALD'S stay in and Holsinki
102
+
103
+ 1. At 0900 this morning I talked with Frank Friberg recently
104
+ returned COS Helsinki re Warren Commission inquiry concerning
105
+ the timetable of Oswald's stay in Finland in October 1959, including
106
+ his contact with the Soviet Consulate there. (Copy of the Commission
107
+ letter of 25 May 64 and State Cable of 22 May 64 attached.)
108
+
109
+ 2. Friberg gave me the following information:
110
+
111
+ a. It takes 25 minutes to drive from the airport to
112
+ downtown Helsinki;
113
+
114
+ b. By taxi, it would take no more than 5 minutes to
115
+ reach the Soviet consulate;
116
+
117
+ C. The Soviet consulate probably closed at 1300 hours local
118
+ time on Saturdays in 1959;
119
+
120
+ d. Passenger lists (manifests) at the U.S. Consulate in
121
+ Helsinki are retained for six months only and then are destroyed.
122
+ Mr. Robert Fulton (CIA) was U.S. consular official there at
123
+ the time.
124
+
125
+ e. A copy of State's cable inquiry would go to the Helsinki
126
+ Station and they would assist in preparation of a reply.
127
+
128
+ 3. Mr. Friberg agreed that it would be worthwhile to cable che
129
+ Station concerning points not covered by State in their inquiry. He
130
+ suggested changes incorporated into the cable sent to Helsinki.
131
+
132
+ Lee H. Wigren
133
+ C/SR/CI/R
134
+
135
+ Document Number
136
+ for FOIA Review on.
137
+ 716-838
138
+ JUN 1976
139
+ SAME AS RELEASED
140
+ DOC
141
+ 340
142
+
143
+ RECORD COPY
144
+ 1
145
+ 1 Jun 64
146
+ 201-289248
147
+ NW 64937 Docld:32106269 Page 3
space/space/jfk_text/104-10004-10143.md ADDED
@@ -0,0 +1,68 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ 10.00000
2
+ 104-10004-10143 2025 RELEASE UNDER THE PRESIDENT JOHN F. KENNEDY ASSASSINATION RECORDS ACT OF 1992
3
+
4
+ 13-00000
5
+
6
+ MEMO FOR THE RECORD 1 June 1964
7
+ Sx-25605
8
+
9
+ DISCUSSION between members SR Division,
10
+ and CoS Helsinki concerning timetable
11
+ OF OSWALD'S stay in Finland and Helsinki
12
+
13
+ 1. At 0900 this morning I talked with Frank Friberg recently
14
+ returned COS Helsinki re Warren Commission inguiry concerninge.
15
+ the timetable of Oswald's stay in Finland in October 1959, including
16
+ his contact with the Soviet Consulate therer. (Copy of the Commission
17
+ letter of 25 May 64 and State Cable of 22 May, 64, attached.)
18
+
19
+ 2. Friberg gave me the following information:
20
+
21
+ a. It takes 25 minutes to drive from the airport to
22
+ Helsinki.
23
+
24
+ b. By taxi, it would take no more than 5 minutes to
25
+ reach the Soviet consulate;
26
+
27
+ c. Consulate in Helsinki was open Saturdays in 1959;
28
+
29
+ d. Passenger lists (manifests) at the Helsinki airports of
30
+ Helsinki are retained for six months only and then are destroyed.
31
+ Mr. Robert Fulton (CIA) was U.S. consular official there at
32
+ the time.
33
+
34
+ e. A copy of State's cable inquiry would go to the Helsinki
35
+ Station and they would assist in preparation of a reply.
36
+
37
+ 3. Mr. Friberg agreed that it would be worthwhile to cable the
38
+ Station concerning points not covered by State in their inquiry. He
39
+ suggested changes incorporated into the cable sent to Helsinki.
40
+
41
+ Lee H. Wigren
42
+ C/SR/CI/R
43
+ TRAVEL PROGRAM
44
+ IP/EDI ABSTRACTA
45
+ INDEX
46
+ IP/FIS
47
+ IP/PH
48
+ PREPARE FOR FICKING
49
+ FILM
50
+ CODE NO. (2,3,4)
51
+ RYBAT REST CODE
52
+ ISO/DCU
53
+ CABLE IDEN (11)
54
+ NTD (8)
55
+ IP/FILES
56
+ FOR FILING
57
+
58
+ Document Number 716-838
59
+ for FOIA Review on JUN 1976
60
+ SAME AS RELEASED
61
+ DOC -340
62
+
63
+ RECORD COPY
64
+
65
+ 1. Jun 64
66
+ 201-289248
67
+
68
+ Box 8
space/space/jfk_text/104-10004-10156.md ADDED
@@ -0,0 +1,55 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ 10.00000
2
+ 104-10004-10156
3
+ 2025 RELEASE UNDER THE PRESIDENT JOHN F. KENNEDY ASSASSINATION RECORDS ACT OF 1992
4
+
5
+ Box 8
6
+
7
+ 13-00000
8
+
9
+ 1 June 1964
10
+
11
+ MEMO FOR THE RECORD
12
+
13
+ 1. At 0900 this morning I talked with Frank Friberg recently
14
+ returned COS Helsinki re Warren Commission inquiry concerning
15
+ the timetable of Oswald's stay in Finland in October 1959, including
16
+ his contact with the Soviet Consulate there. (Copy of the Commission
17
+ letter of 25 May 64 and State Cable of 22 May 64 attached.)
18
+
19
+ 2. Friberg gave me the following information:
20
+
21
+ a. It takes 25 minutes to drive from the airport to
22
+ downtown Helsinki;
23
+
24
+ b. By taxi, it would take no more than 5 minutes to
25
+ reach the Soviet consulate;
26
+
27
+ c. The Soviet consulate probably closed at 1300 hours local
28
+ time on Saturdays in 1959;
29
+
30
+ d. Passenger lists (manifests) at the U.S. Consulate in
31
+ Helsinki are retained for six months only and then are destroyed.
32
+ Mr. Robert Fulton (CIA) was U.S. consular official there at
33
+ the time.
34
+
35
+ e. A copy of State's cable inquiry would go to the Helsinki
36
+ Station and they would assist in preparation of a reply.
37
+
38
+ 3. Mr. Friberg agreed that it would be worthwhile to cable the
39
+ Station concerning points not covered by State in their inquiry. He
40
+ suggested changes incorporated into the cable sent to Helsinki.
41
+
42
+ Document Number 780-340
43
+
44
+ FAIA Review on JUN 1976
45
+
46
+ SAME AS 716-838
47
+
48
+ ZONET
49
+
50
+ 13-00000
51
+
52
+ See Sanitized File
53
+ Number 335
54
+ For steril
55
+ H
space/space/jfk_text/104-10004-10213.md ADDED
@@ -0,0 +1,206 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ 104-10004-10213 2025 RELEASE UNDER THE PRESIDENT JOHN F. KENNEDY ASSASSINATION RECORDS ACT OF 1992
2
+
3
+ SECRET
4
+
5
+ YF2-27221
6
+ 9 July 1964
7
+
8
+ MEMORANDUM FOR THE RECORD
9
+ SUBJECT : Discussion with Warren Commission Staff Member
10
+ REFERENCE: Letter from J. Lee Rankin, General Counsel of the
11
+ President's Commission, to Mr. Richard Helms
12
+ dated 3 July 1964
13
+
14
+ >O SRICE DISCUSSION with SLAUSEN & Tily on .girations.
15
+ Svitt felicy towards design woats HALETICONS ANd
16
+ CUINT Visa Puccedures,
17
+ 1. With the approval of C/SR and the DDP, I met with Mr. W.
18
+ David Slawson of the staff of the President's Commission on the
19
+ Assassination of President Kennedy at 1400 hours on this date in
20
+ the Commission's offices at 200 Maryland Avenue, N.E., Washington,
21
+ D.C. The purpose of this meeting was to discuss apparent inconsistencies
22
+ in material provided the Commission by CIA and by the Department of
23
+ State which were called to our attention in a letter from the General
24
+ Counsel of the Commission to Mr. Helms, dated 3 July 1964.
25
+
26
+ 2. By way of introduction, Mr. Slawson said that in the portion of the
27
+ Commission's report that he was writing, he would have to deal with the
28
+ question of whether or not the OSWALDs' departure from the USSR - and
29
+ the circumstances (i.e. timing) of that departare were unusual or
30
+ suspicious in any way. He expressed his belief that they probably were
31
+ not and cited Soviet relaxation in such matters in the post-Stalin era.
32
+ However, he wanted to be sure in his own mind that our information was
33
+ not in conflict with that which the Commission had received from State
34
+ since all of that information would remain in the records of the
35
+ Commission.
36
+
37
+ 3. After stating my belief that there was no real disagreement or
38
+ inconsistency between the information from CLA and that from State, I
39
+ expressed the view that the matter resolved itself into three questions:
40
+
41
+ Document Number 767-864
42
+ for FOIA Review on
43
+ /a. Do the Soviet
44
+ JUN 1976
45
+
46
+ CS COPY
47
+
48
+ SECRET
49
+
50
+ a. Do the Soviet authorities normally permit Soviet
51
+ citizens married to foreign nationals to emigrate from the
52
+ Soviet Union to the homelands of their spouses?
53
+
54
+ b. Do they normally permit such Soviet citizens to
55
+ accompany (i.e. depart simultaneously with) their spouses
56
+ from the Soviet Union?
57
+
58
+ c. How long does it take such Soviet citizens to get
59
+ Soviet exit visas for such a purpose (time lapse from application
60
+ to granting of visas)?
61
+
62
+ 4. Concerning the first two questions (3a and 3b above) I pointed out.
63
+ that we had addressed ourselves mainly to the question of Sovie: citizens
64
+ being allowed to accompany their spouses abroad while State dealt only
65
+ with the larger question of Soviets married to foreigners being allowed
66
+ to emigrate without reference to whether or not they left simultaneously
67
+ with or at another time from their spouses. Mr. Slawson commented
68
+ that this explanation was most helpful and he reread what both we and
69
+ State had said in that light.
70
+
71
+ 5. By way of further explanation, I said that the statements in
72
+ paragraph 6 of our memorandum of 6 April 1964 concerning Soviets being
73
+ permitted to accompany their foreign spouses abroad were based on a
74
+ review of 26 cases, of which 10 involved Americans. In only four of
75
+ these cases did a Soviet wife leave the USSR in the company of her foreign
76
+ husband; in 14 of the cases the foreign spouse departed alone; and in the
77
+ remaining seven cases insufficient details are known to permit us to
78
+ categorize them. I added that although State's information began by
79
+ citing the issuance of 724 quota and non-quota immigrant visas by the
80
+ American Embassy in Moscow during the period FY 1954 to December
81
+ 1963, it did not indicate how many of these visas were for Soviet citizens
82
+ who had married U.S. nationals. Actually State provided detailed
83
+ information for only sixteen cases and did not indicate in many of these
84
+ whether or not the Soviet was permitted to accompany the foreign spouse.
85
+ 16. In response to
86
+
87
+ -2-
88
+
89
+ 6. In response to a question from Mr. Slawson I stated that most
90
+ of the 26 cases upon which we based our statements involved foreign
91
+ students, exchange teachers and other relatively transient persons,
92
+ and while a number of cases have certain points in common, they bear
93
+ little similarity to the OSWALD case in that none involved a defector who
94
+ married prior to repatriating. I noted that paragraph 6 of our 6 April
95
+ 1964 memorandum to the Commission had pointed this out. Mr. Slawson
96
+ indicated that he was now satisfied on this matter.
97
+
98
+ 7. Concerning the length of time taken by Soviet authorities to
99
+ process exit visas for Soviet citizens married to foreign nationals
100
+ (question 3c above), I stated that, in my opinion, the information
101
+ provided by State (in the third enclosure to Mr. Meeker's letter)
102
+ substantially corresponded to the views expressed in paragraphs 6 and 7
103
+ of our memorandum to the Commission dated 6 April 1964. Mr. Slawson
104
+ asked if it would be possible to elaborate paragraph 7 of our memorandum
105
+ of 6 April by providing a statistical breakdown of the cases on which our
106
+ statements were based. I indicated that this could be done.
107
+
108
+ 8. At this point Mr. Slawson stated that as a result of our discussion
109
+ he felt that the question of possible inconsistencies bad been resolved.
110
+ However, he asked that we send a brief written reply to the Commission's
111
+ letter of 3 July 1964 embodying the substance of what I had said concerning
112
+ the basis for statements included in our 6 April 1964 memorandum. (This
113
+ would include the gist of the draft reply to the Commission which I showed
114
+ to C/SR on 8 July plus an elaboration of our statements concerning Soviet
115
+ visa applications.]
116
+
117
+ 9. Mr. Slawson indicated that he would be sending parts of his report
118
+ dealing with the Soviet intelligence services to CIA for checking as to
119
+ their accuracy. He did not say when this would occur.
120
+
121
+ 10. After concluding the meeting with Mr. Slawson, I read Volume 52
122
+ of the transcript of testimony before the Commission. This included the
123
+ reinterview of Marina OSWALD.
124
+
125
+ -3-
126
+
127
+ Lee H. Wigren
128
+ C/SR/CI/Research
129
+
130
+ @Do. sors normally permit Sov. cityens married to for
131
+ natla to engrate pom Sll to homeland of sprise ?
132
+ • State says you - cites 724 visa applicationم
133
+ (perbably minority Spouse's; mij
134
+ belatives ite ast mijint)
135
+ - We cite absence of law; do not say.
136
+
137
+ 2 arimally
138
+ ② Do Sros permit sou. cits menit to fon marks to
139
+ accompany (ie depont simultanernely co.) spouses
140
+ from Sele to homelandes of spouses
141
+ - State does not say
142
+ se cite evidence that they do not
143
+ We ليه
144
+
145
+ ③ How long does it take Soveits to gel. Sevivians
146
+ at to homelan Ss of fou Spouses?
147
+ to junge at
148
+ -Our #7 and State's inse
149
+ فه
150
+ Cases inhuid. it ikurus ajrec
151
+
152
+ Notes, Hedin
153
+ Co
154
+ CS-COPY
155
+
156
+ dil Ite XAA2-27221
157
+
158
+ Le 7
159
+ with) friin sprστασις
160
+ Based on in de la 26 Cail
161
+ fre till out c/ SU.
162
+ (10 US)
163
+
164
+ -Safe left line oftenband - 4
165
+ -
166
+ -
167
+ -
168
+ -
169
+ - 7- !
170
+
171
+ ② Irifi in fu 47
172
+ 1-2 fine taken by for allite
173
+ bisa apple of Sor Spencer of fin
174
+ substant illy agrees is lite o infe
175
+ نر
176
+ 4. on Juice taken by Sri-st. poreias veda
177
+ aggelies of Sou woofcitis (1)
178
+
179
+ Gust of State is w
180
+ life cancion y bar, tibi of tense to her bij de citthoritie
181
+ 1.
182
+ bun cits in Sel
183
+ life in the poor
184
+ /
185
+ 740
186
+ li inquest for norme of all 1152
187
+ ت
188
+ :/ cits vitus ricerit'd in Cast
189
+ 2: 10 quo cesta Collis len, the of
190
+ fine betinien intrs of aggler. l. He apport
191
+ by God auth
192
+ 2 יני
193
+
194
+ Aun cat
195
+ 0063
196
+ >
197
+
198
+ ② Date of appplectenfor os doit reser
199
+ Ion dedures, in 14
200
+ 12
201
+
202
+ "
203
+ [10dayo-194]
204
+ Promplit all itthees
205
+ -10 line to 14 yeю
206
+ - Cant till bord
space/space/jfk_text/104-10005-10321.md ADDED
@@ -0,0 +1,82 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ 2025 RELEASE UNDER THE PRESIDENT JOHN F. KENNEDY ASSASSINATION RECORDS ACT OF 1992
2
+
3
+ CLASSIFIED MESSAGE
4
+
5
+ SECRETARTDAT
6
+
7
+ 30 September 64 FILE NO. 201-4524
8
+
9
+ BONN, FRANKFURT, BERLIN, COPENHAGEN,
10
+ REYKJAVIK, PARIS, STOCKHOLM
11
+ DIRECTOR THE HAGUE BRUSSELS
12
+
13
+ nue, stess, cluez, VR, FILE
14
+
15
+ UN, FRAN, BRLN, COPENJO GMNY
16
+ E. PARI, STOC, muda, Hagu, Beas
17
+
18
+ AT/KUDESK/TPMURILLO / CATIJA
19
+
20
+ KIGREST TRACES JOACHIM JOESTER DPOB 29 JUL 07 COLOGNE.
21
+
22
+ ENTER ENTIRE ADULT CAREER AND AUTHOR CA 30 BOOKS AND NUMEROUS
23
+ SPAPER ARTICLES. POST WWII WORKS VERY ANTI-KUBARK, LAST
24
+ OK TITLE - OSWALD: ASSASSIN OR FALL GUY? HAS WRITTEN UNDER
25
+ UE NAME AND UNDER PSEUDONYMS: FRANZ VON NESSELRODE; H.F.
26
+ LIKIN; WALTER KELL; PAUL DELATHUIS.
27
+
28
+ 2. ACCORDING CAPTURED GESTAPO DOCS HE JOINED GERM CP ON
29
+ MAY 32 AND HAD MEMBERSHIP NO. 532315. OWNED LENDING LIBRARY
30
+ LN AND SOME TIME AFTER MAY 32 WENT USSR WHERE REMAINED UNTIL
31
+
32
+ 33. DURING ABSENCE HIS LIBRARY MANAGED BY FIANCEE ANNA
33
+ SCHINSKY. LAST RESIDENCE GERMANY BRLN LUETZOWSTRASSE 40
34
+ BEI HESS.
35
+
36
+ Document Number 888-906
37
+ for FOIA Review on JUL 1976
38
+
39
+ CONTINUED
40
+
41
+ COORDINATING OFFICERS
42
+ GROUP 1
43
+ Excluded from automatic
44
+ downgrading and
45
+ declassification
46
+ AUTHENTICAT
47
+ OFFICER
48
+
49
+ SECRET/RYB
50
+ REPRODUCTION BY OTHER THAN THE ISSUING OFFICE IS PROHIBITED.
51
+
52
+ 3. IN MAY 33 FLED TO FRANCE, WAS IN COPE 36-37 BUT EXPELLED
53
+ (OR LEFT) EDCAUSE HIS ANTI-DAHISK GOVT WAITINGS. LEFT DENMARK
54
+ FOR FRANCE VIA ICELAND. IN 40 IN SWEDEN, MARRIED MAY NILSSON,
55
+ CAME US VIA USSR IN 41 AND NATURALIZED CITIZEN SINCE 48
56
+
57
+ 4. WOULD APPRECIATE AS FULL A CHECK AS POSSIBLE, INCLUDING
58
+ LOCAL SERVICES AND AVAILABLE OVERT LOCAL PRE-WWL REFERENCES
59
+ (PRESS, BOOKS, ETC.) ON JOESTEN AND FIANCEE.
60
+
61
+ 5. FOR BAIN: PLS ALSO CHECK DDC AND REQUEST PHOTOSTATS
62
+ ANY DOCS, CAN ADDRESS AND NAME HESS BE CHECKED? ANY CHANCE
63
+ LOCATE FIANCEE?
64
+
65
+ 6. ALL ADDRESSERS PLS HANDLE AEQUEST URGENTLY AS MATTER
66
+ ALSO OF INTEREST TO WARREN COMMISSION. CABLE SUMMARY RESULTS
67
+ AND POUCH DETAILS INCLUDING ALL COPIES AVAILABLE JOESTEN PRE
68
+ WWI WRITINGS.
69
+
70
+ CONTINUED
71
+
72
+ SEGRET/RVRAT
73
+
74
+ MIC PARASI THROUGK 3 AECVI IN PUBLIC DOMAIN, AUS
75
+ FILE
76
+ END OF MESSAGE
77
+
78
+ C/EE/06
79
+ C/WE/L
80
+ CAVELS
81
+
82
+ SEGRET/RVRAT
space/space/jfk_text/104-10006-10247.md ADDED
@@ -0,0 +1,145 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ 104-10006-10247
2
+ 2025 RELEASE UNDER THE PRESIDENT JOHN F. KENNEDY ASSASSINATION RECORDS ACT OF 1992
3
+ SECRET
4
+ FROM: (Requesters name)
5
+ BRANCH
6
+ ROOM
7
+ BADGE NO.
8
+ NAME CHECK AND CONSOLIDATION REQUEST
9
+ EXTENSION
10
+ DATE
11
+ RID CONTROL NO.
12
+ TO
13
+ TUBE
14
+ ROOM
15
+ DATE
16
+ INITIALS
17
+ RID/INDEX
18
+ DT-5
19
+ REQUESTER
20
+ RID/FILES
21
+ DT-6
22
+ REQUESTER
23
+ RID/ANALYSIS GT-7
24
+ RID/201
25
+ DW-6
26
+ RID/MIS
27
+ GT-6
28
+ RID/INDEX
29
+ DT-5
30
+
31
+ SUBJECT TO BE CHECKED
32
+ SURNAME
33
+ (All spellings)
34
+ D'EDKOV, Roman Fedorovich er Vilasa Nikolaevna
35
+ SPELLING VARIATIONS TO BE CHECKED
36
+ AKA, ALIASES
37
+ OTHER IDENTIFYING DATA (Occupation, sex, CP membership,
38
+ I. S. affiliations, etc.)
39
+ Poss. at soo. Eulest. Ind
40
+ RESIDENCE
41
+ New Delhi, Ind
42
+ SEX DATE OF BIRTH
43
+ PLACE OF BIRTH
44
+ CITIZENSHIP
45
+ USSR
46
+ Minse USSR
47
+
48
+ RESULTS OF RID/INDEX CHECK
49
+ COMMENTS
50
+ NO PERTINENT IDENTIFIABLE INFORMATION
51
+ CARD REFERENCES ATTACHED
52
+
53
+ INSTRUCTIONS FOR REQUESTERS
54
+ IN ALL CASES
55
+ 1. Use gummed label; type or print all
56
+ entries.
57
+ 2. Upon receipt of index card reproductions
58
+ draw a green diagonal line across the
59
+ items you do not want.
60
+ 3. Edit (use green) the reproduced index
61
+ cards to indicate:
62
+ (a) cards to be destroyed (mark with
63
+ green D and note reason for destruction)
64
+ Examples: document destroyed; duplicate
65
+ or less informative than retained in-
66
+ formation; information of no CS value.
67
+
68
+ (b) corrections and additions, inclu-
69
+ ding infinity symbol ∞ when card in-
70
+ cludes all facts contained in the
71
+ document.
72
+
73
+ Note 1. Records of COI, SSU, OSS and CIG
74
+ are in RID/ARD, and those that meet
75
+ indexing criteria in CSHB 70-1-l are
76
+ carded in the CS Main Index. If you
77
+ believe there could be additional in-
78
+ formation of value in these records,
79
+ you must request an Archives Index
80
+ search.
81
+ 201 CONSOLIDATION
82
+ 1. Return this form with the card repro-
83
+ ductions, also return pertinent documents,
84
+ aperture cards and the dossier if a 201 on
85
+ the subject exists.
86
+ 2. For each document to be included in the
87
+ consolidation (i.e., copy or cross reference
88
+ to be placed in the 201 file), green D the
89
+ corresponding card and check (a) or (b)
90
+ below:
91
+
92
+ (a) Consolidate into
93
+ 201-
94
+ (b) Open 201 file on subject.
95
+
96
+ RESTRICTION (If any)
97
+ CRYPTONYM
98
+ OTHER INTERESTED DESKS OR STATIONS
99
+ ASSIGNED
100
+ YES
101
+ NO
102
+ FILE TO
103
+ BE KEPT
104
+ RID
105
+ DESK
106
+ Note 2. Information concerning foreign
107
+ public personalities (except mili-
108
+ tary) may be available in BR/OCR
109
+ x7997.
110
+ DATE
111
+ SIGNATURE OF RECORDS OFFICER
112
+
113
+ 13-00000
114
+
115
+ One Roman Fedorovich DEDKOV, born 28 March 1927 in Ariansk, USSR,
116
+
117
+ and his wife Vilasa Nikolayevna DEDKOV, born 31 December 1930 in Minsk,
118
+ USSR, applied for were listed as applicants for entry visas to Indiad
119
+ sometime prior to April 1962. DEDKOV, who was issued Soviet passport
120
+ number 207461 on 17 September 1960, was scheduled to arrive in New Delhi
121
+ for two years as an English language teacher at the Soviet Embassy.
122
+
123
+ It is not known whether or not DEDKOV actually arrived in New Delhi.
124
+
125
+ Not at sent because it shows lioman to Indonians, aaring
126
+ "Home List" nut classified.
127
+ SCAT
128
+ 10 AUG 1964
129
+
130
+ 13-00000
131
+
132
+ INDIA 1
133
+
134
+ DEDKOV, Roman Fedorovich
135
+
136
+ Subj scheduled to arrive New Delhi for two years as an
137
+ English teacher at the Soviet Embassy; Ppt 207461 iss
138
+ 17 Sept 60 (Mos Comment: Subj is presumed to have arr
139
+ sometime after sept 60). NBDA-8509, 24 Apr 62
140
+
141
+ Wife: Vilasa Nikolayevna (DPOB: 31 Dec 1930; Minsk)
142
+
143
+ 201-756978
144
+
145
+ DPOB: 28 Mar 1927; Ariansk
space/space/jfk_text/104-10007-10345.md ADDED
@@ -0,0 +1,326 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ 2025 RELEASE UNDER THE PRESIDENT JOHN F. KENNEDY ASSASSINATION RECORDS ACT OF 1992
2
+
3
+ ROUTING AND RECORD SHEET
4
+
5
+ SUBJECT: Document Number 988-927 BD
6
+
7
+ for FOIA Review on SEP 1976
8
+
9
+ FROM: Chief, CI/R&A
10
+ 2 C 17
11
+
12
+ TO: Chief, AF
13
+ 7 C 32
14
+
15
+ Chief, EE
16
+ 3 D 31 07
17
+
18
+ Chief, FE
19
+ 5 D 31 07
20
+
21
+ Chief, NE
22
+ 6 D 31 07
23
+
24
+ Chief, WE
25
+ 4 B 44 05
26
+
27
+ Chief, WH
28
+ 3 B 44 03
29
+
30
+ DDP
31
+ 3 C 20 16
32
+
33
+ CI/R&A
34
+ 2 C 17
35
+
36
+ PSD
37
+
38
+ RID
39
+
40
+ DATE 27-865
41
+ 24 December 1964
42
+
43
+ For Coordination
44
+
45
+ DEFERRED
46
+
47
+ RID PROUESTING STOPPED
48
+ PLEASE INDICATE HANDLING
49
+
50
+ NOTE: This Document of the CA R
51
+ of the CS Decur
52
+ Desired Handling
53
+ For Signature and Release
54
+ BY HAND
55
+ PLEASE CALL
56
+
57
+ Easy Printing 201-289248
58
+
59
+ DISPATCH
60
+
61
+ Chiefs of all Stations
62
+
63
+ Chief, KUDOVE
64
+
65
+ Warren Commission Testimony - Selected Excerpts
66
+
67
+ FYI
68
+
69
+ 1. The Warren Commission's Report on the assassination of
70
+ President Kennedy focused attention on the magnitude of the problem.
71
+ involved in the protection of the Chief Executive. As you know, it is
72
+ our responsibility, overseas and in headquarters, to render every
73
+ support possible to the Secret Service in the conduct of its statutory
74
+ responsibilities in the United States, and especially when the President
75
+ travels abroad,
76
+
77
+ 2. The circumstances confronting the Warren Commission
78
+ produced discussion and testimony on various aspects of the problem
79
+ of Presidential protection and on interagency operational cooperation,
80
+ which normally do not find their way into the public domain. These
81
+ include the acquisition and dissemination of information, consultation,
82
+ coordination, and operational interchanges. I believe you will be
83
+ interested in the attached extracts of testimony given before the Warren
84
+ Commission by U.S. intelligence and security officials. Pertinent
85
+ Fortions have been side lined. I commend these materials for reading
86
+ by all officers in positions of senior responsibility in headquarters and
87
+ overseas.
88
+
89
+ Document Number 988-927 BD.
90
+
91
+ for FOIA Review on SEP 1976
92
+
93
+ FLETCHER M. KNIGHT
94
+ 201-289245
95
+
96
+ Book Dispatch No. 4726
97
+
98
+ 100-300-12
99
+
100
+ Raymond G. Rocca gwh
101
+
102
+ HQ COPY
103
+ DISPATCH
104
+
105
+ Distribution For
106
+ Book Dispatch No. 4726
107
+
108
+ AF Division
109
+ Abidjan
110
+ Accra
111
+ Addis Ababa
112
+ Algiers
113
+ Bamako
114
+ Brazzaville
115
+ Bujumbura
116
+ Conakry
117
+ Dakar
118
+ Dar-es-Salaam
119
+ Freetown
120
+ Kampala
121
+ Khartoum
122
+ Lagos
123
+ Leopoldville
124
+ Lome
125
+ Lusaka
126
+ Mogadiscio
127
+ Monrovia
128
+ Nairobi
129
+ Pretoria
130
+ Rabat
131
+ Salisbury
132
+ Tananarive
133
+ Tripoli
134
+ Tunis
135
+ Yaounde
136
+
137
+ The above listing has been
138
+ reviewed in the AF Division.
139
+
140
+ dw
141
+
142
+ EE Division
143
+ Athens
144
+ Bern
145
+ Frankfurt
146
+ Nicosia
147
+ Vienna
148
+
149
+ The above listing has been
150
+ reviewed in the EE Division.
151
+
152
+ FE Division
153
+ Bangkok
154
+ Djakarta
155
+ Hong Kong
156
+ Honolulur
157
+ Kuala Lumpur
158
+ Manila
159
+ Melbourne
160
+ Okinawa
161
+ Phnom Penh
162
+ Rangoon
163
+ Saigon
164
+ Seoul
165
+ Taipei
166
+ Tokyo
167
+ Vientiane
168
+ Wellington
169
+
170
+ The above listing has been
171
+ reviewed in the FE Division.
172
+
173
+ себ
174
+
175
+ Distribution For
176
+ Book Dispatch No. 4726
177
+
178
+ NE Division
179
+ Aden
180
+ Amman
181
+ Ankara
182
+ Baghdad
183
+ Beirut
184
+ Cairo
185
+ Colombo
186
+ Damascus
187
+ Jidda
188
+ Kabul
189
+ Karachi
190
+ Kathmandu
191
+ Kuwait
192
+ New Delhi
193
+ Tehran
194
+
195
+ The above listing has been
196
+ reviewed in the NE Division.
197
+
198
+ WE Division
199
+ Brussels
200
+ Copenhagen
201
+ The Hague
202
+ Helsinki
203
+ Lisbon
204
+ London
205
+ Luxembourg
206
+ Madrid
207
+ Oslo
208
+ Ottawa
209
+ Paris
210
+ Paris/LCPIPIT
211
+ Reykjavik
212
+ Rome
213
+ Stockholm
214
+
215
+ The above listing has been
216
+ reviewed in the WE Division.
217
+
218
+ -2-
219
+
220
+ Distribution For
221
+ Book Dispatch No. 4726
222
+
223
+ WH Division
224
+ Asuncion
225
+ Bogota
226
+ Buenos Aires
227
+ Caracas
228
+ Georgetown
229
+ Guatemala City
230
+ Kingston
231
+ La Paz
232
+ Lima
233
+ Managua
234
+ Mexico City
235
+ Montevideo
236
+ Panama City
237
+ Paramaribo
238
+ Port-au-Prince
239
+ Port of Spain
240
+ Quito
241
+ Rio de Janeiro
242
+ San Jose
243
+ San Juan
244
+ San Salvador
245
+ Santiago
246
+ Santo Domingo
247
+ Tegucigalpa
248
+
249
+ The above listing has been
250
+ reviewed in the WH Division.
251
+
252
+ -3-
253
+
254
+ Headquarters Distribution for
255
+ Book Dispatch No. 4726
256
+
257
+ 2 DDP
258
+ 1 ADDP
259
+ 1 C/OPSER
260
+ 1 C/TSD
261
+ 1 C/CA
262
+ 1 C/CCS
263
+ 1 C/SOD
264
+ 1 C/CI
265
+ 1 C/FI
266
+
267
+ 2 C/AF
268
+ 1 C/AF/1
269
+ 1 C/AF/2
270
+ 1 C/AF/3
271
+ 1 C/AF/4
272
+ 1 C/AF/5
273
+ 1 C/AF/6
274
+
275
+ 2 C/EE
276
+ 1 C/EE/G
277
+ 1 C/EE/K
278
+ 1 C/EE/SA
279
+
280
+ 2 C/FE
281
+ 1 C/FE/CH
282
+ 1 C/FE/HULA
283
+ 1 C/FE/JKO
284
+ 1 C/FE/PMI
285
+ 1 C/FE/TBL
286
+ 1 C/FE/VNC
287
+
288
+ 2 C/NE
289
+ 1 C/NE/1
290
+ 1 DC/NE/AA
291
+ 1 C/NE/4
292
+ 1 C/NE/5
293
+ 1 C/NE/6
294
+
295
+ 2 C/WE
296
+ 1 C/WE/1
297
+ 1 C/WE/2
298
+ 1 C/WE/3
299
+ 1 C/WE/4
300
+ 1 C/WE/5
301
+ 1 C/WE/BC
302
+
303
+ 2 C/WH
304
+ 1 C/WH/1
305
+ 1 C/WH/2
306
+ 1 C/WH/3
307
+ 1 C/WH/4
308
+ 1 C/WH/5
309
+ 1 WH/COPS
310
+ 1 WH/POA
311
+ 1 WH/POB
312
+ 1 WH/Plans
313
+
314
+ 2 CI/R&A
315
+ 1 CI/LIA
316
+ 1 CI/OPS/AF
317
+ 1 CI/OPS/EE
318
+ 1 CI/OPS/FE
319
+ 1 CI/OPS/NE
320
+ 1 CI/OPS/SS
321
+ 1 CI/OPS/WE
322
+ 1 CI/OPS/WH
323
+
324
+ 1 RID
325
+
326
+ Originated by: Chief, CI/R&A, Ext. 7468/23 December 1964
space/space/jfk_text/104-10009-10021.md ADDED
@@ -0,0 +1,192 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ 2025 RELEASE UNDER THE PRESIDENT JOHN F. KENNEDY ASSASSINATION RECORDS ACT OF 1992
2
+
3
+ SECRET
4
+
5
+ FIELD DISTRIBUTION - BD #5847
6
+
7
+ AF DIVISION
8
+ Johannesburg
9
+ Lagos
10
+ Nairobi
11
+ Pretoria
12
+ Rabat
13
+ Salisbury
14
+
15
+ EUR DIVISION
16
+ Barcelona
17
+ Berlin
18
+ Bern
19
+ Bonn
20
+ Brussels
21
+ Copenhagen
22
+ Geneva
23
+ The Hague
24
+ Hamburg
25
+ Helsinki
26
+ Lisbon
27
+ London
28
+ Madrid
29
+ Milan
30
+ Munich Liaison Base
31
+ Munich Ops. Base (Laurion)
32
+ Oslo
33
+ Ottawa
34
+ Paris
35
+ LCPIPIT
36
+ Rome
37
+ Salzburg
38
+ Stockholm
39
+ Vienna
40
+ Zurich
41
+
42
+ NB DIVISION
43
+ Ankara
44
+ Athens
45
+ Beirut
46
+ Calcutta
47
+ Colombo
48
+ Istanbul
49
+ New Delhi
50
+ Rawalpindi
51
+ Teheren
52
+
53
+ FE DIVISION
54
+ Bangkok
55
+ Djakarta
56
+ Hong Kong
57
+ Honolulu
58
+ Kuala Lumpur
59
+ Kuching
60
+ Manila
61
+ Medan
62
+ Melbourne
63
+ Okinawa
64
+ Rangoon
65
+ Saigon
66
+ Seoul
67
+ Singapore
68
+ Taipei
69
+ Tokyo
70
+ Vientiane
71
+ Surabaya
72
+ Wellington
73
+
74
+ WH DIVISION
75
+ Asuncion
76
+ Bogota
77
+ Brasilia
78
+ Buenos Aires
79
+ Caracas
80
+ Georgetown
81
+ Guatemala City
82
+ Guayaquil
83
+ JMWAVE
84
+ Kingston
85
+ La Paz
86
+ Lima
87
+ Managua
88
+ Mexico City
89
+ Monterrey
90
+ Montevideo
91
+ Norfolk (REPLANT)
92
+ Panama City
93
+ Port au Prince
94
+ Porto Alegre
95
+ Quito
96
+ Recife
97
+ Rio de Janerio
98
+ San Jose
99
+ San Salvador
100
+ Santiago
101
+ Santiago de los Caballeros
102
+ Santo Domingo
103
+ Sao Paulo
104
+ Tegucigalpa
105
+
106
+ SECRET
107
+
108
+ HQS DISTRIBUTION - BD #5847
109
+
110
+ CA STAFF
111
+ DC/CA
112
+ CA/COPS
113
+ CA/PROP
114
+ CA/LO
115
+ CA/B1
116
+ CA/B2
117
+ CA/B3
118
+ CA/B4
119
+ CA/B5
120
+
121
+ AF/COPS/CA
122
+ AF/1
123
+ AF/2
124
+ AF/3
125
+ AF/4
126
+ AF/5
127
+ AF/6
128
+
129
+ FE/CA 14
130
+ C/CO/CA
131
+
132
+ SB/CA
133
+
134
+ DO/CA 3
135
+
136
+ CI/R&A 10
137
+
138
+ EUR DIVISION
139
+ E/CA
140
+ E/SC
141
+ E/BNL
142
+ E/F
143
+ E/I
144
+ E/IB
145
+ E/G
146
+ E/AS
147
+ E/BC
148
+
149
+ NE DIVISION
150
+ NE/COPS
151
+ NE/GTI/G
152
+ NE/GTI/T
153
+ NE/GTI/I
154
+ NEAA/I
155
+ NEAA/AP
156
+ NEAA/S&L
157
+ NESA/RE
158
+ NESA/C&N
159
+ NESA/I
160
+ NESA/P
161
+
162
+ WH DIVISION
163
+ WH/CA
164
+ WH/C
165
+ WH/C/CA
166
+ WH/1
167
+ WH/1/Mexico
168
+ WH/2
169
+ WH/2/G
170
+ WH/2/P
171
+ WH/H/S
172
+ WH/2/CR/N
173
+ WH/3
174
+ WH/3/B
175
+ WH/3/CO
176
+ WH/3/E
177
+ WH/3/P
178
+ WH/3/V
179
+ WH/4
180
+ WH/4/AR
181
+ WH/4/CH
182
+ WH/4/P/U
183
+ WH/5
184
+ WH/5/Brasil
185
+ WH/6
186
+ WH/7
187
+ WH/7/HT
188
+ WH/7/GU
189
+ WH/7/DR
190
+ WH/7/JTS
191
+
192
+ SECRET
space/space/jfk_text/104-10009-10222.md ADDED
@@ -0,0 +1,72 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ 104-10009-10222
2
+ 2025 RELEASE UNDER THE PRESIDENT JOHN F. KENNEDY ASSASSINATION RECORDS ACT OF 1992
3
+
4
+ SECRET
5
+
6
+ DD/P8:4635/1
7
+
8
+ 26 NOV 1968
9
+
10
+ Sir Charles C. F. Spry
11
+ Director General
12
+ Australian Security Intelligence Organization
13
+ G. P. O. Box 510583
14
+ Melbourne
15
+
16
+ Dear Charles,
17
+
18
+ Thank you for your letter of 15 October
19
+ recommending against the declassification of
20
+ Warren Commission document CD-971. I might
21
+ mention that our inquiry to you in August (1968)
22
+ was in anticipation of further pressure for the
23
+ release of Warren Commission papers, a pressure
24
+ which has not materialized. Accordingly, there is
25
+ not, at the present time, any intention to release
26
+ CD-971.
27
+
28
+ Should the question be raised at some future
29
+ time, the points made by you in your letter provide
30
+ every reason to keep the document out of the
31
+ public domain.
32
+
33
+ With kindest regards,
34
+
35
+ Sincerely,
36
+ /s/ Richard Helms
37
+
38
+ Richard Helms
39
+ Director
40
+
41
+ Document Number 1042-947c
42
+ for FOIA Review on SEP 1976
43
+
44
+ cc: DDCI
45
+
46
+ Signature Recommended:
47
+
48
+ Deputy Director for Plans
49
+ DDP/FE/PMI/AN/Amos Taylor, Jr. (X 5502):aib (25 November 1968)
50
+ 5681
51
+
52
+ Distribution:
53
+ Orig - Addee
54
+ 1 - ADDP 2 - DCI
55
+ 1 - CPE 1 - DDCI
56
+ 1 - PMI 2 - DDP
57
+ 1 - PMI/AN
58
+ 21 NOV 1968
59
+ Date
60
+
61
+ SECRET
62
+
63
+ CORRES
64
+ RELATING TO
65
+ THIS-
66
+ INCLUDING
67
+ NAVYS OK
68
+ OF 27 June
69
+
70
+ FILE
71
+ MAIN
72
+ FILE
space/space/jfk_text/104-10012-10022.md ADDED
@@ -0,0 +1,102 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ 2025 RELEASE UNDER THE PRESIDENT JOHN F. KENNEDY ASSASSINATION RECORDS ACT OF 1992
2
+
3
+ SECRET
4
+
5
+ 21 MAY
6
+ 1982
7
+ US/82/71
8
+
9
+ Dear Anthony,
10
+
11
+ Regarding your letter 6/705 of 10 May 1982, our
12
+ records indicate that Valeriy Vladimirovich Kostikov
13
+ traveled to Mexico, France, Spain, the U.S. and Cuba
14
+ during the period 1959-61. In 1961, he was assigned
15
+ permanently to Mexico City as a consular officer and
16
+ served there until August 1965. He was variously
17
+ described as a translator, vice-consul, and attache.
18
+ During this tour he attempted to cultivate a U.S.
19
+ Government employee assigned to our embassy in Mexico
20
+ City.
21
+
22
+ In September/October 1963, Lee Harvey Oswald
23
+ approached the Soviet Embassy in Mexico City in an attempt
24
+ to get a visa allowing him to return to the USSR.
25
+ Kostikov, as a consular officer, handled this visa
26
+ request. We have no information which indicates any
27
+ relationship between these individuals other than for the
28
+ purpose of Oswald's making his visa request.
29
+
30
+ Kostikov returned to Mexico City for a second tour of
31
+ duty in July 1968. During this tour he was again assigned
32
+ to the consular section and was a second secretary. It
33
+ appeared that he was tasked with following the activities
34
+ of the Central American communist parties and left-wing
35
+ groups, and he met often with members of these groups,
36
+ reportedly providing them with funds and technical
37
+ guidance. In July/August 1969, Kostikov made an unusual
38
+ TDY trip to Moscow lasting three weeks. (His family
39
+ remained in Mexico.) In July 1970 he made a four-day trip
40
+ to Havana.
41
+
42
+ Kostikov's tour in Mexico ended unexpectedly in
43
+ September 1971. Our information indicated that he was
44
+ not due to leave for another three to four months, and at
45
+ the time of his departure, there was some speculation that
46
+ the suddenness of his departure was due to the fact that
47
+ he was known to Lyalin.
48
+
49
+ CROSS FILE COPY FOR
50
+ 201-289248
51
+ DO NOT DESTROY
52
+
53
+ RECORD COPY
54
+
55
+ SECRET
56
+
57
+ XAE09222
58
+ 21MAY 82
59
+ 100-2-95
60
+
61
+ While in Mexico he was considered by some to be the
62
+ most effective and dangerous of intelligence officers in
63
+ Mexico. He has been described as being without morals,
64
+ education, and manners. Shortly after his arrival in
65
+ Mexico in 1968, he was arrested in front of a house of
66
+ prostitution after becoming involved in a fist fight with
67
+ some locals. It appears this incident did not affect his
68
+ position in Mexico City, despite the fact that it
69
+ received a good deal of press coverage.
70
+
71
+ We are aware only that Kostikov arrived in Beirut in
72
+ June 1978. We are unable to confirm his presence there
73
+ now.
74
+
75
+ Although our file indicates that Kostikov may have
76
+ been a member of Department 13 (Executive Action)
77
+ (Department V's predecessor), we have been unable to
78
+ confirm this. Also, to the best of our knowledge the KGB
79
+ has not engaged in such executive action since 1959.
80
+
81
+ Sincerely,
82
+
83
+ /s/ David
84
+
85
+ David H. Blee
86
+
87
+ Mr. Anthony C. M. DeVere
88
+
89
+ PHOTO ATTACHED
90
+
91
+ DDO/CI/RA/Joan Paxson (21 May 1982)
92
+
93
+ DISTRIBUTION:
94
+ Orig & 1 - Adse
95
+ 1 - CI/RA Chrono
96
+ 1 - 100-2-95
97
+ 1 - Reading Board
98
+ 1 - Paxson
99
+
100
+ SECRET
101
+
102
+ 100-2-95
space/space/jfk_text/104-10012-10024.md ADDED
@@ -0,0 +1,29 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ 104-10012-10024 2025 RELEASE UNDER THE PRESIDENT JOHN F. KENNEDY ASSASSINATION RECORDS ACT OF 1992
2
+
3
+ 6/705
4
+ 10 May 1982
5
+
6
+ Dear David,
7
+
8
+ VALERIY VLADIMIROVICH KOSTIKOV
9
+
10
+ 1. Please refer to our conversation of 6 May. KOSTIKOV, born 17 March 1933, Moscow, was posted to Beirut in 1978 as 1st Secretary and may still be there. He is identified KGB and served in Mexico City from 1961-71. There is a reference to him on page 307 of BARRON's KGB which suggests that he may have been Department V. We do not appear to have asked LYALIN about him, and are now doing so.
11
+
12
+ 2. We also note that EPSTEIN in "Legend" claims that according to a CIA telecheck KOSTIKOV was Lee Harvey OSWALD'S KGB case officer in Mexico City. According to BARRON (page 335) OSWALD was in Mexico between September and November 1963 and was seeking to obtain a Soviet visa. There was certainly a KGB interest in OSWALD, although according to NOSENKO this was defensive.
13
+
14
+ 3. The reason for our current interest in KOSTIKOV will be obvious. As you are aware, our Embassy in Beirut, in common with other Western Missions, has been subject to threats and violence in recent months, and in view of earlier hostile attentions from the KGB, we have been reviewing our records of KGB staff in the area who might have been involved in promoting strong-arm tactics.
15
+
16
+ 4. We would be grateful for your views as to whether the KGB are likely to be behind any of the recent incidents (possibly through the Syrians) and for any information on KOSTIKOV and his activities in Mexico and in Beirut. In particular, what are your comments on the OSWALD story; can you confirm that KOSTIKOV is still in Beirut; is there anyone else in Beirut or Damascus whose trace record suggests an Active Measures role, or worse?
17
+
18
+ 5. We should be grateful for an early reply and as I said on 6 May will treat anything you can tell us on a strictly Service to Service basis.
19
+
20
+ CROSS FILE COPY FOR
21
+ 201-289248
22
+
23
+ DO NOT DESTROY
24
+
25
+ Yours ever
26
+
27
+ A C M de Vere
28
+
29
+ Form 547a Processed
space/space/jfk_text/104-10012-10035.md ADDED
@@ -0,0 +1,208 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # 2025 RELEASE UNDER THE PRESIDENT JOHN F. KENNEDY ASSASSINATION RECORDS ACT OF 1992
2
+
3
+ 1 UNCLASSIFIED
4
+ INTERNAL USE ONLY
5
+ CONFIDENTIAL
6
+ SECRET
7
+
8
+ ROUTING AND RECORD SHEET
9
+
10
+ SUBJECT: (Optional)
11
+
12
+ FROM: E/BC
13
+ 4C 20 Hqs?
14
+
15
+ EXTENSION NO
16
+ 1413
17
+ 7220
18
+
19
+ DATE
20
+ 5 APR 1978
21
+
22
+ TO: (Officer designation, room number, and building)
23
+
24
+ DATE
25
+ OFFICER'S INITIALS
26
+ RECEIVED
27
+ FORWARDED
28
+ COMMENTS (Number each comment to show from whom to whom. Draw a line across column, after each comment.)
29
+
30
+ 1. CilRTA
31
+ 2. Hausman APR 1978 ch
32
+ 3. Rum Holmes
33
+ 4. 3D57
34
+ 5.
35
+ 6.
36
+ 7.
37
+ 8.
38
+ 9.
39
+ 10.
40
+ This is the ACTION/INFO copy of a communication received on from MI-6 in Washington.
41
+
42
+ Another copy is being held in E/BC.
43
+
44
+ Any reply should be directed to E/BC for forwarding to Liaison.
45
+
46
+ Processing by IP is to be determined by
47
+
48
+ Coordination with E/BC is required prior to any dissemination of this information outside the DDO.
49
+
50
+ NB: Richard A. SPRAGUE, Chief Counsel and Director of HSCA, saw a copy of attached document... See his attached letter to Sergyj CZORNONOH, 04 December 1976.
51
+
52
+ RBH
53
+ 11.
54
+ 12.
55
+ 13.
56
+ 14.
57
+ 15.
58
+
59
+ FORM 610 USE PREVIOUS EDITIONS
60
+ SECRET
61
+ CONFIDENTIAL
62
+ INTERNAL USE ONLY
63
+ UNCLASSIFIED
64
+
65
+ CONFIDENTIAL
66
+
67
+ Our ref: GEN 1
68
+
69
+ Dear Art,
70
+
71
+ 30 March 1978
72
+
73
+ Please find attached correspondence received from one Sergyj CZORNONOH who claims that he provided information about Lee Harvey OSWALD to the American Vice Consul (presumably Tom Blackshear) in Sofia, Bulgaria, in August 1963.
74
+
75
+ 2. I have sent copies of these letters to the FBI and to my Head Office in London.
76
+
77
+ Mr A H Stimson
78
+
79
+ Enc.
80
+
81
+ DH Jones for GML Blackburne-Kan
82
+
83
+ CONFIDENTIAL
84
+
85
+ SERGYJ. CZORNONOH
86
+ 1106-11TH STREET
87
+ SACRAMENTO CALIFORNIA
88
+ 95814
89
+
90
+ M. Wall
91
+
92
+ TO BRITISH EMBASSY
93
+ 3100 MASSACHUSETTS AVE, N. W.
94
+ WASHINGTON, D. C.
95
+
96
+ RETURN RECEIPT REQUESTED
97
+ REGISTERED NO.257254
98
+
99
+ SERGYJ CZORNONDH
100
+ 1106-11TH STREET
101
+ SACRAMENTO, CALIFORNIA, 95814
102
+
103
+ MARCH 15, 1978.
104
+
105
+ TO BRITISH AMBASSADOR
106
+ BRITISH EMBASSY
107
+ 3100 MASSACHUSETTS AVE, N. W.
108
+ WASHINGTON, DC.
109
+
110
+ DEAR SIR.
111
+
112
+ I WROTE LETTER ON FEBRUARY 15, 1978 TO MR. JAMES CALLAGHAN PRIME MINISTER I ENCLOSED REGISTERED MAIL NO. 251067.
113
+
114
+ ON JULY 18, 1963 I WAS IN LONDON ENGLAND AT THE AIRPORT IMMIGRATION OFFICER NO. 175 I HAD NO VISA IMMIGRATION PLACE ME UNDER HOUSE ARREST, MR. SMITH IN POLICE UNIFORM SECRET SERVICE BROUGHT ME STEAK DINNER AND POLICE OFFICER INTERROGATED ME, HE ASKED ME WHAT THE EMBASSY OF US.S.R. SAY YOU HEARD IN VIENNA, AUSTRIA, I SAID I HAVE HEARD THAT ONE AMERICAN DEFECTOR (MR. LEE HARVEY OSWALD) TO RUSSIA AND HE RETURNED TO UNITED STATES OF AMERICA THIS MAN HE PREPARING TO KILL TO ASSASSINATE PRESIDENT JOHN F. KENNEDY, MR. SMITH POLICE OFFICER ASKED ME DO YOU KNOW HIS NAME, I SAID HIS NAME SOHT ONTO TIME WAS PUBLISHED ONE TIME IN NEWS PAPER IN WASHINGTON POST, MR. SMITH POLICE OFFICER SAID
115
+
116
+ I DO SEARCHING FOR THIS FILE IN BRITISH POLICE BRITISH INTELLIGENCE AND BRA IMMIGRATION, JASKING YOUR EMBASSY TO HELP TO FIND THE TRUTH AND I ASK YOUR GOVERNMENT TO FORWARD My RECORD CE JULY 181 1963 TO PRESIDENT JIMMY CARTER AND SENATOR DANIEL K. NOUYE CHAM 21. S. SENATE SELECT COMMITTEE ON IN 11 GENCE I ENCLOSE HIS Copy LETTER TO ALSO I ENCLOSE you copy LETTER I JANT ON FEBRUARY 17, 1978 TO RUSSIAN AMMASSA YOUR JUSTICE ALWAYS WILL BE APPLIA MY INCOMING MAIL iS CONTROL BY FIBI AGENTS SOME OF THE MAIL IDENT GET NOT FORWARD TO ME FIBI, Suppress My INFORMATION AND TORTURE MED DRUG RESPECTFULLY YOURS "21.S. PASSPORT NO, DO 2.7000 Sergyj
117
+
118
+ copy. 10
119
+ BRITISH AMBASSADOR
120
+
121
+ Sergyj Czornonoh
122
+ 1106- 11th Street
123
+ Sacramento, California 95814
124
+
125
+ To Russian Ambassador
126
+ Embassy of U.S.S.R.
127
+ 1125 - 16th Street
128
+ Washington, D. C.
129
+
130
+ Dear Sir:
131
+
132
+ This is retyped letter from hand written
133
+
134
+ Mr. Wasilev Consul gave me order to transmit this information to U. S. Government, on August 9, 1963 in Sofia, Bulgaria. Mr. Wasilev, Consul of Embassy of U.S.S.R., gave me this information about Mr. Lee Harvey Oswald on August 14, 1963. Mrs. Besera Asenova, girl friend of Russian Consul came to my room and repeated that Mr. Lee Harvey Oswald is assassin. He will kill President Kennedy.
135
+
136
+ On August 15, 1963 in Sofia, Bulgaria, at the airport in embassy car, I told to Mr. Blackshire, American Vice Consul, that Mr. Lee Harvey Oswald is assissin. He has a weapon or has ordered one. Mr. Blackshire said it seems like he will kill someone. I said that Mr. Lee H. Oswald is preparing to kill President of the United States, John F. Kennedy. Mr. Blackshire said where will it happen. I said they (right wing) will invite President, criticize him in the newspaper, then kill him. Mr. Blackshire told me he will give the telegram to Department of State and he gave me the address where to report.
137
+
138
+ At 9 a.m. on August 19, 1963 in Washington, D. C., I went to see (Mr. Kippingan). Director of Special Counselor Service Department of State at 1901 Pennsylvania Avenue-11th floor. I told the Director that I have information about President Kennedy. The Director said do not mention name of President Kennedy, only respond to the questions. The Director said tell us what will happen to Mr. Lee Harvey Oswald then. I said Mr. Lee H. Oswald will be killed after kill Kennedy. I said I will take the truth drug to tell the truth. Director tell us who else get killed in this country. I said as I heard, that Dr. Martin Luther King, Jr. will be killed. Who will kill Dr. King, Jr. Negro leader? I said a man who is in prison at this time. (Mr. James Earl Ray was in prison at that time.) Director asked where assassination will happen. I said in Dallas, Texas. Director said if someone gave this information here I would expel the man. Director did call on F.B.I. agents after F.B.I. use anesthesia gas to freeze me to drub me to keep amnesia.
139
+
140
+ I told Director Department of State that Mr. Lee Harvey Oswald have a weapon. Go see him. Director told me you too can have weapon--so what if Oswald got weapon.
141
+
142
+ Sincerely,
143
+
144
+ U.S House of Representatives Select Committee on Assassinations told me to write letter to Embassy in early 1977.
145
+
146
+ Sergyj Czornonoh
147
+ Regis Hotel
148
+ 1106 11th Street
149
+ Sacramento, CA 95814
150
+
151
+ GITY MANAGEAS
152
+ ABOUT HUMAN RIGHTS
153
+ BRITISH EMBASSY
154
+
155
+ February 6, 1978
156
+
157
+ Mr. John M. Price
158
+ District Attorney
159
+ Sacramento, California
160
+
161
+ Dear Mr. Price:
162
+
163
+ This is a retyped letter. I visited Mr. Ferry, Deputy District Attorney, on August 16, 1977. I told in the office that F.B.I. agents and Secret Service use police department to harass me. Police department do... supply pencil of anesthesia gas to the manager of the building I live. The manager door use certain people, to freeze me by anesthesia gas - then push drugs, poison in my mouth to torture me - to take my sleep away - or bleed by rectal and they use many other chemicals to brainwash me to use me in political assassination which I refused. On January 20, 1976 in Sacramento on 8th and I Streets, man came to me from police or post office, U.S. Department of Justice and freeze me by gas and told me to take gun, pistol and we will tell you where to go to shoot - to kill - Mr. Sargent Shriver. I refused. Manager, Mr. Sisel, of Marshall Hotel, call on the man to tell me this on the street. In February 1976, police intelligence told me that assassination will not happen here. How about to move to Maryland state.
164
+
165
+ In this letter I ask you to get report from Dr. Frederick S. Baker, M.D. colon and rectal surgery on January 31, 1978. His phone – 452-4095. I do bleed today very much and I am weak, In this letter I ask you to give re- strain order or respond to me what could be done. The right wing in America made record to use me in assassination. I refuse. I am human and I like to be treated as human. Police put frame up on me - just to take advantages on me. Police use lie, police use mental case to take advantages on me and tell me that right wing do use such people like me. To prove I enclose copy mid- night June 14, 1976. Also I enclose copy letter I sent to Mr. Ted Sheedy, Supervisor, on January 26, 1978 and copy of his reply to me.
166
+
167
+ Please respond to me. Thank you.
168
+
169
+ Very truly yours
170
+
171
+ Sergyj. Czornonoh
172
+
173
+ Mr. Sargent Shriver was run for President in 1976.
174
+
175
+ Legal Center
176
+ For The Disabled
177
+
178
+ 1722 J STREET, SUITE 19 SACRAMENTO, CA 95814
179
+ Telephone: 446-4851
180
+
181
+ March, 1978
182
+
183
+ Sergyj Czornonoh
184
+ 1106 11th Street
185
+ Sacramento, CA 95814
186
+
187
+ Dear Mr. Czornonoh:
188
+
189
+ This is to acknowledge receipt of your letter regarding difficulties you have encountered with the police and the FBI.
190
+
191
+ In the event that there is legal action taken by the police or the FBI to institutionalize you this office will provide you with legal representation.
192
+
193
+ If you have any further legal problems please contact this office.
194
+
195
+ Sincerely,
196
+
197
+ LESLIE KAY
198
+ Paralegal
199
+
200
+ CATHERINE HUGHES
201
+ Staff Attorney
202
+ LK: ab
203
+
204
+ REGISTERED NO 2.51067
205
+ FROM 1106801124 95814
206
+ TO MR. JAMES CALLAGHAN
207
+ SF Wen la OFFICE OF MINISTRY
208
+ LONDON ENGLAND
space/space/jfk_text/104-10012-10076.md ADDED
@@ -0,0 +1,180 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ 13-00000
2
+
3
+ FIELD DISTRIBUTION
4
+
5
+ A Division
6
+ WH Division
7
+ NE Division
8
+ DISTRIBUTION TO BD -
9
+ r
10
+ Abidjan
11
+ Asuncion
12
+ Amman
13
+ Accra
14
+ Fagota
15
+ Ankara 2
16
+ Addis Ababa
17
+ Erasilia
18
+ Athens 5
19
+ Апиете
20
+ Fenos Aires
21
+ Beirut 3
22
+ Bangal
23
+ Cazucas 2
24
+ Bombay
25
+ toncu
26
+ Georgetown
27
+ Calcutta
28
+ Dakar
29
+ Guatemala
30
+ Colombo
31
+ Ier at Salava
32
+ Quayaquil
33
+ Dacca
34
+ Kaipals
35
+ Kingstoc
36
+ Istanbul
37
+ Freetown
38
+ La Paz
39
+ Jerusalem
40
+ Khartoum
41
+ Lima
42
+ Jidda
43
+ Kiastasa
44
+ Keduaa
45
+ Mexico City 2
46
+ Kabul
47
+ Mutevideo
48
+ Karachi
49
+ Lagos
50
+ Рапяка
51
+ Katmandu
52
+ Lusaka
53
+ Forte Alegre
54
+ Kirwait
55
+ Mogadiscio
56
+ Av Spain
57
+ Lahore
58
+ Moarovia
59
+ Madras
60
+ CI/ICG
61
+ Nairobi
62
+ Recife
63
+ New Delhi
64
+ Rabat
65
+ Rio de Janeiro 2
66
+ Nicosia
67
+ Tripoli
68
+ San Jose
69
+ Rawalpindi
70
+ Yamade
71
+ Sau Salvador
72
+ Teheran
73
+ Santiago 2
74
+
75
+ Sento Domiαει
76
+ EUR Division
77
+ Ses Paulc
78
+ Berlin 3
79
+ Tegucigalpa
80
+ Bern
81
+ Madrid 2
82
+ Bona 5
83
+ Preseis
84
+ Copenhagen
85
+ Frankfurt
86
+ FE Divisi
87
+
88
+ Do agirak 3
89
+ karta
90
+ 3
91
+ AF/2
92
+ Heleinkta
93
+ 2
94
+ 4
95
+ karta 2
96
+ Matid
97
+ 2
98
+ TALA Lumpur
99
+ Munich betria) 3
100
+ Mars la
101
+ 2
102
+ Me ibaurtu
103
+ Peru
104
+ kizawa
105
+ Pame
106
+ 2
107
+ כם
108
+ stockholm
109
+ Sat 2
110
+ Sen
111
+ ogue 2
112
+ Singapora
113
+ Vine
114
+ Suracaye
115
+ Zurich
116
+ Taipei 2
117
+ Tokyo
118
+ 2
119
+ Vientians
120
+ Wellington
121
+ BD 6614?
122
+ SB/Division
123
+ C/SB
124
+ SB/CA
125
+ SB/BR
126
+ SB/C
127
+ SB/YA
128
+ SB/P
129
+ SB/CI
130
+
131
+ WH/C/CA/PROP 2
132
+ WH/CA
133
+
134
+ WH/1,2,3,4,5
135
+ WH/7/JTS, CU
136
+
137
+ 1-D/RR
138
+ 2-DOCA
139
+ CI/FA
140
+
141
+ FBID/Weisa
142
+ VTR/SIC
143
+ OTR/Isolation Library
144
+ FL/8PG
145
+ MPS/PSC
146
+
147
+ CS Special Group Offic
148
+ INTERNAL DISTRIBUTION
149
+ AP/COP/CA
150
+ AP/1
151
+ C/CA - DC/CA
152
+ C/CA/PEG
153
+ AP/L
154
+ CA/EL 3
155
+ AF/5
156
+ 08/53 3
157
+ CA/DA
158
+ AF/6-Ethiopia
159
+ 40/80
160
+ C/EUR
161
+ E/ONE/CA
162
+ CA/FROF
163
+ E/G
164
+ 8/A8
165
+ B/SC
166
+ E/BNE
167
+ E/BC
168
+ E/F
169
+ ق
170
+ 1/2
171
+ E/LB
172
+
173
+ FE/CA 16
174
+
175
+
176
+ NE/SA/A
177
+ NE/GTA!!
178
+ NE/GES T
179
+ NF 'COPS
180
+ NEGA/I
space/space/jfk_text/104-10012-10078.md ADDED
@@ -0,0 +1,199 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ 2025 RELEASE UNDER THE PRESIDENT JOHN F. KENNEDY ASSASSINATION RECORDS ACT OF 1992
2
+ 104-10012-10078
3
+ QUNCLASSIFIED
4
+ ONLY
5
+ ROUTING AND RECORD SHEET
6
+ ENTIAL
7
+ SECRET
8
+ SUBJECT: (Optional)
9
+ FROM:
10
+ Chief Far East Division
11
+ TO: (Officerdesignation, room number, and.
12
+ building)
13
+ EXTENSION NO.
14
+ FORWARDED
15
+ OFFICER'S
16
+ INITIALS:
17
+ DATE
18
+ 20 Nov.68
19
+ COMMENTS (Number each comment to show from whom
20
+ to whom. Draw a line across column after each comment.)
21
+ DATE
22
+ RECEIVED
23
+ Chief CI Staff 27 NOV 1968
24
+ CIRA
25
+ Mr. Dooley
26
+ 27 NOV 1968
27
+ boo
28
+ for file
29
+ Document Number
30
+ येद
31
+ 1128-988
32
+ for FOIA Review on SEP 1976
33
+ 201-289248
34
+ FORM
35
+ 3-62
36
+ 610
37
+ USE PREVIOUS
38
+ EDITIONS
39
+ SECRET
40
+ CONFIDENTIAL
41
+ INTERNAL
42
+ USE ONLY
43
+ UNCLASSIFIED
44
+
45
+ UNCLASSIFIEDERAL CO DENTIAL
46
+ SUBJECT: (Optional)
47
+ FROM: CIRAIRS
48
+ 2323
49
+ TO: (Officer designation, room number, and
50
+ building)
51
+ 1.
52
+ IP/AN
53
+ 2.
54
+ 3.
55
+ 4.
56
+ 5.
57
+ JP/EDI
58
+ 6.
59
+ 7.
60
+ 8.
61
+ 9.
62
+ 10.
63
+ Document Number
64
+ for FOIA Review on
65
+ 28/Flas
66
+ HP/RMS
67
+ 12.
68
+ 13.
69
+ ONLY
70
+ ROUTING AND RECORD SHEET
71
+ EXTENSION NO.
72
+ DATE
73
+ OFFICER'S
74
+ INITIALS
75
+ RECEIVED
76
+ FORWARDED
77
+ DATE
78
+ 26 που. 68
79
+ XAAZ-35926
80
+ 26 NOU 68-
81
+ SECRET
82
+ COMMENTS (Number each comment to show from whom
83
+ to whom. Draw a line across column after each comment.)
84
+ @ Please asijo
85
+ XAAZ # and
86
+ os pay & Of
87
+ 1128-988
88
+ SEP 1976
89
+ MAY
90
+ 1978
91
+ clamifs to
92
+ 201-289748
93
+ 26.
94
+ Date: 2 NOV 68)
95
+ Salgent
96
+ Covesperelerce Cotisan
97
+ 0%
98
+ CIA and ASIO.
99
+ Re: release
100
+ of exftinatun ly
101
+ Woven Commessen
102
+ 14.
103
+ 15.
104
+ FORM
105
+ 3-62
106
+ D
107
+ 610
108
+ USE PREVIOUS
109
+ EDITIONS
110
+ SECRET
111
+ CONFIDENTIAL
112
+ INTERNAL
113
+ USE ONLY
114
+ UNCLASSIFIED
115
+
116
+ SECRET
117
+ 20 NOV 1968
118
+ KEMORANDUM FOR: Director of Central Intelligence
119
+ VIA
120
+ SUBJECT
121
+ Deputy Director for Plane
122
+ 304635
123
+ Executive Registry
124
+ 68-516011
125
+ XAAZ-
126
+ 35926
127
+ Letter for Direstor from Bir Charles Spry (ASIO)
128
+ 1. Attached is a scaled letter fron Sir Charles Spry,
129
+ Director General of the Australian Security Intelligenco
130
+ Organization (who provided a copy of the letter to the Chief
131
+ of Station, Heibourne), and a suggested reply for your
132
+ signature.
133
+ 2. Bir Charles' letter to you recommends again好家
134
+ doclassification of the Farrea Comaission document CD-971,
135
+ which refers to our investigation of anonymous telephone
136
+ calls to the Canberra Babassy before and after the
137
+ amcassination of President Kennedy.
138
+ 3. I consider the points made by Bir Charles in his
139
+ letter to be valid and accordingly recommend against the
140
+ decisosification of CD-971 in the foreseeable fature
141
+ Staff concurs with this recommendation.
142
+ Document Number 1128-988
143
+ for FOLA Review on SEP 1976
144
+ 4. Naison
145
+ William E. Nelson
146
+ of
147
+ K
148
+ P/ERI
149
+ Chief, Far East Division
150
+ Attachments, 5
151
+ 130/900
152
+ A.
153
+ Letter from Sir Charles Spry
154
+ PROCARE FOR THAUNG
155
+ 575 40. (2.3.4)
156
+ AVGAT REST, CODE
157
+ CABLE ICON (11)
158
+ (4)
159
+ B.
160
+ Letter Replying to Sir Charles Spry
161
+ P/FRES
162
+ FOR FILING
163
+ C. FAMA 5008, subject: Declassification of Warreh
164
+ Commission Document CD-971-
165
+ D.
166
+ Copy of CD-971
167
+ E. FAMW 3636, subject: Request for Release of Warren
168
+ Commission Document
169
+ 20: DOCI
170
+ DDP/FE/PMI/AN: Amos Taylor, Jrl:arc (19) November 1968)
171
+ Distribution
172
+ Orig & 1
173
+ -
174
+ Addressee
175
+ 1 DDCI
176
+ -
177
+ 2
178
+ -
179
+ 1
180
+ DDP
181
+ ADDP
182
+ RECORD COPY
183
+ -
184
+ 1
185
+ 1
186
+ 1
187
+ -
188
+ 1
189
+ -
190
+ GEODET
191
+ C/CI Staff
192
+ CFE
193
+ CFE/PMI
194
+ wanatic
195
+ ...and
196
+ neslassification
197
+ CFE/PMI/AN
198
+ 26 που 68
199
+ 201-289248
space/space/jfk_text/104-10012-10079.md ADDED
@@ -0,0 +1,61 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ 2025 RELEASE UNDER THE PRESIDENT JOHN F. KENNEDY ASSASSINATION RECORDS ACT OF 1992
2
+
3
+ SECRET
4
+
5
+ 68-2/60/a
6
+ RD/08-4635/
7
+
8
+ 26 NOV 1968
9
+
10
+ FILE
11
+
12
+ Sir Charles C. F. Spry
13
+ Director General
14
+ Australian Security Intelligence Organization
15
+ G. P. O. Box 51058B
16
+ Melbourne
17
+
18
+ Dear Charles,
19
+
20
+ Thank you for your letter of 15 October
21
+ recommending against the declassification of
22
+ Warren Commission document CD-071. I might
23
+ mention that our inquiry to you in August (1968)
24
+ was in anticipation of further pressure for the
25
+ release of Warren Commission papers, a pressure
26
+ which has not materialized. Accordingly, there is
27
+ not, at the present time, any intention to release
28
+ CD-971.
29
+
30
+ Should the question be raised at some future
31
+ time, the points made by you in your letter provide
32
+ every reason to keep the document out of the
33
+ public domain.
34
+
35
+ With kindest regards,
36
+
37
+ Sincerely,
38
+
39
+ /s/ Richard Helms
40
+
41
+ Richard Helms
42
+ Director
43
+
44
+ cc: DDCI
45
+
46
+ Signature Recommended:
47
+
48
+ Deputy Director for Plans
49
+
50
+ Distribution:
51
+ Orig - Addee
52
+ 1 - ADDP 2 - DCI
53
+ 1 - CFE 1 - DDCI
54
+ 1 - PMI 2 - DDP
55
+ 1 - PMI/AN
56
+
57
+ Date
58
+
59
+ DDP/FE/PMI/AN/Amos Taylor, Jr. (X 5502):aib (25 November 1968)
60
+
61
+ 201-289248
space/space/jfk_text/104-10014-10051.md ADDED
@@ -0,0 +1,56 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ 2025 RELEASE UNDER THE PRESIDENT JOHN F. KENNEDY ASSASSINATION RECORDS ACT OF 1992
2
+
3
+ SECRET
4
+ IMS(FABOSS)
5
+
6
+ SECRET
7
+ FRP: ,2,
8
+
9
+ STAFF
10
+
11
+ ACTION: C/EUR/NOR (729) INFO: EUDORECORD, EUR/LGL, MDSX, ODPD RYBAT.(FILE,
12
+
13
+ OC/EURN, CIC/EUR (3/W)
14
+
15
+ 96 3123036 ASO PAGE 001 IN 3123036
16
+ TOR: 081248Z FEB 96 (COPB 94608
17
+ SECRET 081247Z FEB 96 STAFF 19-6
18
+ CITE:(COPENHAGEN)94608
19
+
20
+ TO: IMMEDIATE DIRECTOR.
21
+
22
+ FOR: LIMIT EUR/(NOR) INFO DC/EURN) CIC (EU, EUR/LGL)
23
+
24
+ SLUGS: WNINTEL RYBAT
25
+
26
+ SUBJECT: RELEASE OF CLASSIFIED DOCUMENT
27
+
28
+ REF: DIRECTOR 633349 96 3117723
29
+
30
+ TEXT:
31
+
32
+ 1. ACTION REQUIRED: SEE PARA 2.
33
+
34
+ 2. THE FAX (STATION) RECEIVED APPEARS TO BE INCOMPLETE. IT
35
+ CONTAINED A COVER SHEET, A ONE-PAGE COPENHAGEN) CABLE STATING "NO
36
+ TRACES" AND THE FIRST PAGE OF A DIRECTOR CABLE REQUESTING TRACES ON
37
+ LEE HARVEY ((OSWALD)). UNLESS THE MISSING PORTIONS OF THE DIRECTOR
38
+ CABLE HAVE SOME BEARING ON (DENMARK, STATION) CANNOT MAKE A CASE
39
+ AGAINST RELEASE OF THIS MATERIAL WE WOULD INSIST, HOWEVER, THAT
40
+ CRYPTS BE DELETED - AS REF INDICATED WOULD BE THE CASE.
41
+
42
+ 3. PLEASE KEEP US APPRISED OF DATE THESE DOCS WILL BE RELEASED
43
+ SO THAT (STATION) MAY INFORM AMBASSADOR AND OUR LIAISON SERVICE
44
+ CHIEFS.
45
+
46
+ 4. CL BY: 0716497 CL REASON: 1.5(C) DECL ON: X1
47
+
48
+ 4....FILE: 021-120-004/1. DECL DRV. HUM 4-82.
49
+
50
+ END OF MESSAGE SECRET
51
+
52
+ SECRET
53
+
54
+ DO NOT DESTROY
55
+ CROSS FILE COPY FOR:
56
+ 201-0289248
space/space/jfk_text/104-10014-10064.md ADDED
@@ -0,0 +1,149 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # SECRET
2
+
3
+ 2025 RELEASE UNDER THE PRESIDENT JOHN F. KENNEDY ASSASSINATION RECORDS ACT OF 1992
4
+
5
+ OPERATOR: SEEGER, EDWA BADGE: KT283 DATE : 14 SEP 93
6
+ OFFICE : IMS/FABOSS PHONE: 047552 TIME : 15:24
7
+ ROOM : GC520HB PRINTER: T019 PAGE : 001
8
+ REQUESTER: HM877
9
+ DSN: SPET 21162 DOC DATE: 20 NOV 91 MHF#: 91-6320813
10
+
11
+ //
12
+
13
+ SECRET FRP:
14
+ STAFF
15
+
16
+ ACTION: SE/USSR/10-3 (752) INFO: C/ORMS, DOMDS, LIMITO, ODPD, SEDORECORD.
17
+ FILE, DDO-2, SE/RR-3 (9/W)
18
+
19
+ 91 6320813 ASR PAGE 001 IN 6320813
20
+ TOR: 201455Z NOV 91 SPET 21162
21
+
22
+ SECRET 201454Z NOV 91 STAFF
23
+
24
+ CITE ST PETERSBURG 21162
25
+
26
+ TO: MOSCOW INFO DIRECTOR.
27
+
28
+ FOR: LIMIT SE/USSR/10 INFO SE/RR
29
+
30
+ SLUGS: WNINTEL GTDANCER
31
+
32
+ SUBJECT: KGB OFFICIAL NIKONOV
33
+
34
+ REF: NONE
35
+
36
+ TEXT:
37
+
38
+ 1. ACTION REQUIRED: NONE.
39
+
40
+ 2. DURING THE WEEK OF 3-9 NOVEMBER 1991, U.S. PROFESSOR
41
+ Ε.Β. ((SMITH)), HAD SEVERAL DISCUSSIONS IN MOSCOW WITH "SLAVA"
42
+ ((NIKONOV)), WHO IS A LONGTIME FRI?ND AND NOW DEPUTY TO KGB
43
+ DIRECTOR ((BAKATIN)). THE PROFESSOR HAS KNOWN NIKONOV WELL
44
+ SINCE 1976. HE CURRENTLY IS INSTRUCTING ON A FULBRIGHT GRANT
45
+ AT ST PETERSBURG STATE UNIVERSITY UNTIL 22 DECEMBER 1991. SEE
46
+ PARA 7 FOR BIO ON THE PROFESSOR. DCOB STEVEN R. HEIBERG HAS
47
+ BEFRIENDED THE PROFESSOR, WHO WAS DINNER GUEST AT HEIBERG'S
48
+ HOME ON 10 NOVEMBER AND PROVIDED THE FOLLOWING INFO ON NIKONOV
49
+ AND HIS NEW KGB JOB.
50
+
51
+ 3. NIKONOV IS THE GRANDSON OF FORMER SOVIET FOREIGN
52
+ MINISTER VYACHESLAV MOLOTOV. THE U.S. PROFESSOR TAUGHT NIKONOV
53
+ IN 1976 AT MOSCOW STATE UNIVERSITY WHILE A FULBRIGHT
54
+ PROFESSOR. NIKONOV WAS REGARDED AS EXTREMELY INTELLIGENT AND
55
+ CAPABLE BUT GAVE THE IMPRESSION THAT HE WAS AN IDEOLOGICAL
56
+ HARDLINER. THE PROFESSOR BELIEVED THAT HE WAS LIKELY TO BE A
57
+ RISING STAR IN THE SOVIET SYSTEM AND RECOMMENDED HIM FOR AN
58
+ IREX-SPONSORED VISIT TO THE U.S. AS EXPECTED, NIKONOV'S VIEWS
59
+ AND RHETORIC MODERATED VERY VISIBLY AFTER HIS FIRST DIRECT
60
+ EXPOSURE TO THE U.S. HE HAS HAD AT LEAST ONE ADDITIONAL
61
+ IREX-SPONSORED TRIP TO THE U.S. AND HAS SPENT PERIODS OF TIME
62
+ AS A PERSONAL GUEST AT THE HOME OF THE U.S. PROFESSOR IN
63
+ MARYLAND.
64
+
65
+ 4. ΝΙΚΟΝNOV CAME TO WORK IN HIS POSITION AT THE KGB AS A
66
+ RESULT OF BEING A CLOSE FRIEND OF BAKATIN. DURING THE AUGUST
67
+ 1991 COUP ATTEMPT NIKONOV SAID THAT HE REFUSED TO FOLLOW HIS
68
+ BOSS'S ORDER TO ACT IN ACCORDANCE WITH THE DECLARED STATE OF
69
+ EMERGENCY. HE WAS DISMISSED BY HIS BOSS (NFI) FROM THIS
70
+ POSITION AND CALLED BAKATIN TO SEEK ADVICE. BAKATIN SAID HE
71
+ WAS ALSO OPPOSING THE COUP AND WOULD LOOK OUT FOR NIKONOV ONCE
72
+ ORDER WAS RESTORED. SOON AFTER THE COUP BAKATIN CALLED HIM TO
73
+ ASK THAT HE ASSIST WITH RESTRUCTURING THE KGB. AFTER IT WAS
74
+ AGREED THAT NIKONOV COULD DECLINE TO ACCEPT TWO-STAR MILITARY
75
+ KGB RANK AND WORK IN THE JOB FOR AN EQUIVALENT CIVILIAN
76
+ COMPENSATION PACKAGE, HE CAME TO THE KGB AS BAKATIN'S DEPUTY.
77
+ NIKONOV SAID HIS FRIENDS WERE DELIGHTED THAT HE HAD DECLINED
78
+ THE KGB COMMISSION.
79
+
80
+ 5. ΝΙΚΟΝOV'S FIRST ASSIGNMENT FROM BAKATIN WAS MAKING
81
+ ARRANGEMENTS FOR THE KGB-CIA LIAISON RELATIONSHIP WHICH HAS NOW
82
+ COME INTO BEING. IN PREPARATION FOR ONE POSSIBLE QUESTION
83
+
84
+ <<< TEMPORARY WORKING COPY DESTROY AFTER USE >>>
85
+ SECRET
86
+
87
+ # SECRET
88
+
89
+ OPERATOR: SEEGER, EDWA BADGE: KT283 DATE : 14 SEP 93
90
+ OFFICE : IMS/FABOSS PHONE: 047552 TIME : 15:24
91
+ ROOM : GC520HB PRINTER: T019 PAGE : 002
92
+ REQUESTER: HM877
93
+ DSN: SPET 21162 DOC DATE: 20 NOV 91 MHF#: 31-63208:3
94
+
95
+ WHICH MIGHT BE RAISED, NIKONOV PERSONALLY REVIEWED KGB FILES TO
96
+ DETERMINE IF LEE HARVEY ((OSWALD)) HAD BEEN A KGB AGENT. HE
97
+ REVIEWED FIVE THICK VOLUMES OF FILES ON OSWALD. NIKONOV IS NOW
98
+ CONFIDENT THAT OSWALD WAS AT NO TIME AN AGENT CONTROLLED BY THE
99
+ KGB. FROM THE DESCRIPTION OF OSWALD IN THE FILES HE DOUBTED
100
+ THAT ANYONE COULD CONTROL OSWALD, BUT NOTED THAT THE KBG
101
+ WATCHED HIM CLOSELY AND CONSTANTLY WHILE HE WAS IN THE USSR.
102
+ HE COMMENTED THAT OSWALD HAD A STORMY RELATIONSHIP WITH HIS
103
+ SOVIET WIFE, WHO RODE HIM INCESSANTLY. THE FILE ALSO REFLECTED
104
+ THAT OSWALD WAS A POOR SHOT WHEN HE TRIED TARGET FIRING IN THE
105
+ USSR.
106
+
107
+ 6. IN PREPARATION FOR ESTABLISHMENT OF A LIAISON
108
+ RELATIONSHIP WITH THE SWEDISH INTELLIGENCE SERVICE, NIKONOV
109
+ PERSONALLY PERFORMED AN INQUIRY FOR BAKATIN INTO THE FATE OF
110
+ SWEDISH DIPLOMAT RAOUL ((WALLENBERG)). THERE IS STILL PRESSURE
111
+ FROM THE SWEDISH SIDE TO HAVE A DEFINITIVE ANSWER ON THIS
112
+ MATTER BECAUSE OF THE CONTINUING IMPORTANCE OF THE WALLENBERG
113
+ FAMILY. NIKONOV WAS AMAZED TO FIND OUT THAT THE KG3 HAD NOT
114
+ BEEN ABLE TO PREVIOUSLY ESTABLISH WHETHER WALLENBERG HAD DIED
115
+ AND UNDER WHAT CIRCUMSTANCES. HE WAS ABLE TO FIND PARTIAL
116
+ EVIDENCE FROM FOURTEEN DIFFERENT SOURCES (NF:). NIKONOV NOW
117
+ BELIEVES, BUT FOUND NO CONCLUSIVE PROOF, THAT WALLENBERG WAS
118
+ EXECUTED LATE IN 1947. THERE WERE INDICATIONS THAT WALLENBERG
119
+ WAS SUSPECTED OF HAVING CONTACTS WITH OTHERS WHO WERE ACCUSED
120
+ OF PROVIDING FALSE DIPLOMATIC IDENTITY DOCUMENTS TO OTHERS
121
+ BEYOND JEWS SAVED FROM THE HOLOCAUST. AMONG THESE WERE NAZI
122
+ WAR CRIMINALS WHO WERE ALLOWED TO ESCAPE. THERE WAS NO PROOF
123
+ OF WALLENBERG'S GUILT IN ANY OF THESE CHARGES.
124
+
125
+ 7. FULBRIGHT PROFESSOR WHO IS NIKONOV'S FORMER PROFESSOR
126
+ AND FRIEND IS:
127
+ NAME: Ε.Β. ((SMITH))
128
+ DOB: C.1920
129
+ CIT: USA
130
+ OCC: PROFESSOR OF HISTORY AT UNIVERSITY OF MARYLAND,
131
+ RETIRED
132
+ LOC: RESIDES NEAR ANNAPOLIS, MD
133
+ OTHER: FULBRIGHT PROFESSOR FOR WINTER 1991 TERM IN ST
134
+ PETERSBURG STATE UNIVERSITY, USSR, TWO PREVIOUS FULBRIGHT
135
+ ASSIGNMENTS IN MOSCOW AND SEVERAL IN PRC AND GERMANY; HOSTS
136
+ FORMER STUDENTS FROM USSR AND PRC ON U.S. VISITS
137
+ THERE ARE NO BASE TRACES ON SMITH. HE SERVED IN THE
138
+ MILITARY AND IS VERY WELL DISPOSED TOWARDS THE U.S.
139
+ GOVERNMENT. HE VOLUNTEERED INFO ON NIKONOV AND OTHER USSR, PRC
140
+ AND GERMAN CONTACTS TO HEIBERG AND CAN PROVIDE CONSIDERABLE 810
141
+ AND ASSESSMENT INFO ON THEM.
142
+
143
+ 8. FILE: 074-005-011, 201-0005925
144
+ DEFER. DECL OADR DRV HUM 4-82.
145
+ END OF MESSAGE SECRET
146
+
147
+ END OF DOCUMENT
148
+
149
+ <<< TEMPORARY WORKING COPY DESTROY AFTER USE >>>
space/space/jfk_text/104-10016-10021.md ADDED
@@ -0,0 +1,74 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ 104-10016-10021
2
+
3
+ 2025 RELEASE UNDER THE PRESIDENT JOHN F. KENNEDY ASSASSINATION RECORDS ACT OF 1992
4
+
5
+ CLASSIFIED MESSAGE
6
+
7
+ SECRET
8
+
9
+ ROUTING
10
+ 1
11
+ 2
12
+ 4
13
+ 5
14
+ 6
15
+
16
+ DIRECTOR
17
+ RECORDS OFFICER STAMP
18
+
19
+ MELBOURNE
20
+ The following action is authorized: DE SENSITIZE
21
+
22
+ CAMH
23
+ Signed: R. Haufton
24
+ DCI, D/DCI, DDP, C/CI, C/CI/SI, VR
25
+ R.O. #1 - Unit: CI/RKA
26
+ CS COPY
27
+
28
+ SECRET 0204222
29
+ Note: If destruction, cite reasons and coordinate if appropriate.
30
+
31
+ DIR INFO CNBR CITE MELB 2517 (ROLLOFIER ACTING)
32
+ 2 DEC 63 IN 71187
33
+ AVDAT GPFLOOR
34
+
35
+ REF DIR 85690
36
+
37
+ 1. SQUARE PRELIMINARY CHECKS ON RECORDED CONVERSATIONS REVEAL FOLL:
38
+
39
+ A NO TRACE 1952 DARK BLUE BUICK BELONGING SOVIET OR BLOC INSTALLATION CNBR OR SYDNEY.
40
+
41
+ B NO LICENSE PLATE IDENTICAL TO ONE MENTIONED BUT FOLL N.S.W. VARIANTS CHECKED: CCC 012, 1960 VAUXHALL, TWO-TONED BLUE, HERMAN SATRAPINSKY, 149 WENTWORTH AVE, WENTWORTHVILLE; CCC 122, 1949 STANDARD, FAUN, WILLIAM JOHN SIMS, BINALONG; CCO 122, 1960 HOLDEN, BIEGE, KEITH BETHKE, 28 HEWITT AVE, WAHROONGA. NO SQUARE DEROG ON ABOVE.
42
+
43
+ Document Number 270-676 for FOIA Review on. MAY 1976
44
+ C NO IDENTIFIABLE INFO ON AUSSIE MENTIONED CNBR 9591.(IN 68838)
45
+
46
+ D FRASERS MENTIONED SAME REF ARE ALP MPS.
47
+
48
+ E INDON FIRST SECY POSSIBLY IDW R. WILLY SASTRANEGARA HAS MOUSTACHE; RUSSIAN CAPABILITY NOT KNOWN TO SQUARE; NOT NOTICEABLY CLOSE TO SOVS CNBR.
49
+
50
+ D: 200-5-41
51
+ CLASSIFICATION REVIEW
52
+ CS COPY CONDUCTED ON 24 MAY 1970 1289248
53
+ E IMPDET CL BY 012208
54
+
55
+ GROUP
56
+ SECRET
57
+ Excluded from ovlomatic downgrading and declassification
58
+
59
+ REPRODUCTION BY OTHER THAN THE ISSUING OFFICE IS PROHIBITED
60
+ Copy No.
61
+
62
+ 13-00000
63
+
64
+ CLASSIFIED MESSAGE 71187 PAGE 2
65
+
66
+ 2. SQUARE HAS ARRANGED WITH PMG LIAISON OFFICER TED YOUNG TRACE ANY FURTHER CALLS MADE. EMBASSY IN CLOSE CONTACT SQUARE REP CNBR.
67
+
68
+ 3. WILL ADVISE FURTHER DEVELOPMENTS.
69
+
70
+ SECRET
71
+
72
+ C/S COMMENY: Hqs requested information on the Polish driver connected with the Russian diplomatic establishment in Australia.
73
+
74
+ SECRET
space/space/jfk_text/104-10023-10087.md ADDED
@@ -0,0 +1,907 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ 1400000
2
+ 104-10023-10087
3
+ 2025 RELEASE UNDER THE PRESIDENT JOHN F. KENNEDY ASSASSINATION RECORDS ACT OF 1992
4
+
5
+ ( SECRET DO NOT REPRODUCE
6
+ RETURN TO CIA
7
+ (
8
+ DOHB 70-1-1
9
+ CHAPTER III
10
+ 15 November 1974
11
+ ANNEX B
12
+ THE 201 SYSTEM
13
+ RETURN TO CIA
14
+ Background Use Only
15
+ Do Not Reproduce
16
+ :
17
+
18
+ Rescission: Annex B of Chapter III, CSHB 70-1-1, 27 October 1966
19
+
20
+ 1. INTRODUCTION
21
+
22
+ The 201 system provides a method for identifying a person of specific in-
23
+ terest to the Operations Directorate and for controlling and filing all pertinent
24
+ information about that person. The system also provides a means for identifying
25
+ subjects of 201 files from various categories of information about them and for
26
+ producing lisits of 201 personalities according to those categories. Only a rela-
27
+ tively small number of personalities indexed are of sufficient interest to justify
28
+ opening a 201 dossier. These are normally subjects of extensive reporting and
29
+ CI investigation, prospective agents and sources, members of groups and organi-
30
+ zations of continuing target interest, or subjects on whom a volume of corre-
31
+ spondence has accumulated.
32
+
33
+ 2. THE 201 SYSTEM
34
+
35
+ The principal features of the 201 system are:
36
+
37
+ a. The 201 Number: a unique number, i.e., 201-1234567, assigned to each
38
+ individual in the system to serve as identifying file number for reporting on that
39
+ individual.
40
+
41
+ b. The 201 Dossier: the official file containing the 201 opening form (Form
42
+ 831) and all biographic reporting on and references to the individual, i.e., per-
43
+ sonal history, current status, and prospects.
44
+
45
+ c. The Master 201 Record: a machine record generated by the opening of
46
+ a 201 file. This record produces the master 201 reference for the Main Index and
47
+ stores the pertinent information which may later be retrieved for special listings.
48
+
49
+ d. Main Index Master 201 Reference: this reference, printed in reply to an
50
+ Index Search Request, is printed as illustrated below. When data are absent
51
+ within the record, succeeding data items or lines will be moved up and the ref-
52
+ erence consolidated..
53
+
54
+ SECRET
55
+ 14-00000
56
+ SECRET
57
+ (
58
+ DOHB 70-1-1
59
+ CHAPTER III, ANNEX B
60
+ 15 November 1974
61
+
62
+ 0002 CROIX, WILLIAM PENDLETON
63
+ SEX M DOB 12 APR 26
64
+ CIT GERM
65
+ REF AACD-12345, 20 JUN 53
66
+ POB GERM, BERLIN 5
67
+ OCC PHARMACIST 6
68
+ OCC CODE CHEN
69
+ 201-0032671*
70
+ ΤΥΡΕ ΝΑΜE T-
71
+ ΟΙ CODES AA XX-10
72
+ RCD DATE 53.
73
+ SUBJECT RECENTLY ATTENDED THE SEVENTEENTH ANNUAL
74
+ CONFERENCE OF THE INTERNATIONAL ASSOCIATION OF CHEMISTS
75
+ AND PHARMACISTS HELD IN MUNICH, GERMANY FROM 22 THROUGH
76
+ 29 ОСТОВER.
77
+ 30 NOV 70
78
+ (3
79
+ Information About Subject
80
+ 1. Sequence Number and Name
81
+ 2. Sex and Date of Birth
82
+ 3. Citizenship
83
+ 4. Place of Birth
84
+ 5. Occupation
85
+ 6. Occupation Code
86
+ 7. Text
87
+ Document Reference Data Group
88
+ 8. 201 Number
89
+ 7
90
+ 9. Name Type Indicator
91
+ 10. OI Codes
92
+ 11. Record Date (year only)
93
+ 12. Reference
94
+ ISG Control Information
95
+ 13. Date of latest update of the record
96
+ 14. STAR Index Record Number
97
+ 24
98
+ SECRET
99
+ 00833555
100
+ 14
101
+ !
102
+ 14-00000
103
+ ( SECRET (
104
+ DOHB 70-1-1
105
+ CHAPTER III, ANNEX B
106
+ 15 November 1974
107
+ 7
108
+ e. Ol Code: a two letter symbol used in conjunction with the 201 per-
109
+ sonality records in the 201 system to record the association of an individual
110
+ with organizations or activities of operational interest. OI codes cover intelli-
111
+ gence and security service affiliation, whether staff or agent, or known or
112
+ suspect, as well as activities of DDO interest. There are two categories of OI
113
+ codes for use by components:
114
+
115
+ (1) general OI codes (Attachment 4)
116
+ (2) OI codes assigned to a specific component for intelligence services
117
+ or other specific organizations.
118
+
119
+ À component may request an OI code be established by submitting a mem-
120
+ orandum to the DDO/RMO through the component Records Management
121
+ Officer.
122
+
123
+ A 201 personality may be assigned two OI codes. An OI code may be assigned
124
+ when the 201 Personality File Action Request (Form 831) is initiated (see
125
+ paragraph 3b below) by filling in Box 13 or a code may be assigned or added
126
+ at a later date by a Form 831 amendment.
127
+
128
+ The 201 system has the capability of producing machine listings of 201
129
+ personalities by Of codes. For example, if an Ol code has been opened for the
130
+ security service of a certain country a listing may be compiled of all members
131
+ of that service.
132
+
133
+ f. 201 Machine Lists: produced from the mechanized 201 Index, based on
134
+ names or other identifying information of personalities on whom 201 dossiers
135
+ exist.
136
+
137
+ 3. OPENING A 201 DOSSIER
138
+
139
+ a. General
140
+
141
+ The opening of a 201 dossier is the prerogative of an operational com-
142
+ ponent, in coordination with the Information Services Group. An opening creates
143
+ a master 201 record. Changes to the master record and the occasional closing.
144
+ of a 201 dossier are controlled jointly by the desks and ISG. 201 dossiers may be
145
+ opened on persons who meet the carding criteria described in Chapter If of this
146
+ handbook, when there is a reasonable expectation that additional information
147
+ will be acquired and filed in such a dossier. Generally dossiers are opened on
148
+ persons about whom counterintelligence information is being reported, and per-
149
+ sons of operational interest to the Operations Directorate, specifically those
150
+ persons for whom provisional operational approvals and operational approvals
151
+ are requested (see exception below). 201 files are not to be opened on staff
152
+ employees, staff agents and most categories of contract employees. Files on
153
+
154
+ 25
155
+ SECRET
156
+ 14-00000
157
+
158
+ SECRET
159
+ (
160
+ DOHB 70-1-1
161
+ CHAPTER III, ANNEX B
162
+ 15 November 1974
163
+
164
+ persons who are only of local interest to a field station or Headquarters desk
165
+ and on whom no DDO records correspondence exists are not a part of the DDO
166
+ records system and are to be maintained by that unit. Some desks levy require-
167
+ ments on ISG for automatic 201 openings on certain categories of persons whose.
168
+ names appear in incoming dispatches. These are listed in Attachment 2. 201
169
+ dossiers should be opened in the following categories:
170
+
171
+ (1) Subjects of provisional operational approval and operational ap-
172
+ proval requests. However, a file need not be opened when a POA is requested
173
+ for persons being trained for a foreign liaison service and who are of opera-
174
+ tional interest for training purposes only.
175
+ اه
176
+
177
+ (2) Persons for whom the field requests a 201 opening.
178
+
179
+ (3) MHFIXTURE personalities: bonafide diplomats of other than
180
+ denied area countries, in close association with staff personnel.
181
+
182
+ (4) Subjects of a Personal Record Questionnaire Part I.
183
+
184
+ (5) Persons on whom a Main Index search reveals information in five
185
+ or more documents (see DOI 70-20).
186
+
187
+ (6) Subjects of Interagency Source Register memoranda from LSN/
188
+ ISR (opened only by IP/RMS).
189
+
190
+ b. Requesting a 201 File Opening
191
+
192
+ Headquarters desks may open a 201 file by filling out and submitting
193
+ a 201 Personality File Action Request (Form 831) to the Records Main-
194
+ tenance Section (IP/RMS). Form 831 is also used to create or amend the
195
+ master 201 record and 201 machine listings and to register the assign-
196
+ ment of a cryptonym to a 201 personality. Attachment 3 consists of sample
197
+ 201 Personality File Action Requests for opening and amending 201's. A field
198
+ station may request the opening of a 201 file by writing 201- in the Head-
199
+ quarters file or cross-reference box on the dispatch form and/or after the
200
+ subject's name in the body of the dispatch. A telepouch request for a 201 opening
201
+ is made by indicating 201- in the file number line. A cable request is made by
202
+ placing 201- after the term "File" on the last line of the transmission. IP/AN
203
+ will open 201 files as requested by dispatch or telepouch but it is the responsi-
204
+ bility of the desk to respond to cable requests. Field stations are notified of
205
+ 201 openings through receipt of the field master 201 record.
206
+
207
+ 28
208
+ SECRET
209
+ che kind while distribunal raudase andur, sinclarations . indian phính thi song
210
+ 14-00000
211
+ ( SECRET (
212
+ DOHB 70-1-1
213
+ CHAPTER III, ANNEX B
214
+ 15 November 1974
215
+
216
+ 4. CONTENTS OF THE DOSSIER
217
+
218
+ Information about a 201 personality should be filed or cross-referenced into
219
+ his dossier. When additional information is discovered on a 201 subject through
220
+ a name trace or other process, i.e., review of predecessor documents, it must
221
+ be consolidated into his personality dossier. See DOI 70-20 for consolidation
222
+ procedures.
223
+ ?
224
+ Material which is filed in the dossier includes but is not limited to:
225
+
226
+ a. 201 Personality File Action Request (Form 831).
227
+
228
+ b. Biographic information including photographs, fingerprints, and
229
+ handwriting samples.
230
+ 1.1
231
+ c. Personal Record Questionnaire Parts I and II.
232
+
233
+ d. Operational and other security approvals.
234
+
235
+ e. Name check replies, requests, clearances, and approvals.
236
+
237
+ f. Acknowledgement of pseudonym.
238
+
239
+ g. 201 personality assessments and evaluations.
240
+
241
+ h. Copy of contract and termination papers.
242
+
243
+ i. Secrecy agreement.
244
+
245
+ j. Agent Duty Status Report.
246
+
247
+ k. Training and evaluation.
248
+
249
+ 1. SGSWIRL report.
250
+
251
+ m. Newspaper clippings.
252
+
253
+ n. Any information which helps provide a better understanding of the
254
+ subject and our interest in him; this may include operational reporting:
255
+ :
256
+
257
+ 5. MAINTENANCE OF 201 DOSSIERS
258
+
259
+ The 201 personality dossier contains, in document date order, papers which
260
+ have been made a part of the Central Records System as well as those which
261
+ have not. Record documents may range from newspaper or magazine articles
262
+ on the subject to finance and other administrative papers.
263
+
264
+ 26,1
265
+ عت
266
+ SECRET
267
+ 14-00000
268
+ ( SECRET (
269
+ DOHB 70-1-1-4
270
+ CHAPTER III, ANNEX B
271
+ 15 November 1974
272
+
273
+ a. Purging
274
+ Purging a 201 dossier is the responsibility of the desk officer. It requires
275
+ discrimination in recognizing operationally useful material, rather than the
276
+ simple distinction between official and unofficial papers; it will therefore take
277
+ place under the supervision of a Records Officer. Purging should be done
278
+ periodically. A 201 dossier being forwarded to Central Files for retention should
279
+ be purged. A 201 dossier should be purged of the following:
280
+
281
+ (1) Duplicate material, i.e., exact copy(s) of a document.
282
+
283
+ (2) Name trace form (Form 362) unless it has been the basis for
284
+ the opening.
285
+
286
+ (3) All abstract slips.
287
+
288
+ (4) All document restriction notices (Form 1884).
289
+
290
+ (5) The disseminated version of positive intelligence information if
291
+ a copy of the raw report is contained in the 201 file; the dissemination number
292
+ then must be transferred to the first page of the raw report.
293
+
294
+ (6) Routing slips, routing and record sheets (Form 610) and dispatch
295
+ cover sheets unless there are remarks such as coordinations or comments.
296
+
297
+ (7) Record copy documents which only repeat substantive information
298
+ contained in other documents in the file; authorization for destruction is
299
+ by the Records Officer.
300
+
301
+ (8) Top Secret documents are not to be retained in a 201 dossier
302
+ forwarded to Central Files; the document must be downgraded for retention
303
+ in the 201 dossier. To downgrade a Top Secret document, an authorized
304
+ officer in the originating office or the Records Officer having jurisdiction
305
+ over the contents of the material must possess Top Secret classification-
306
+ authority. If the document cannot be downgraded the file should be retained
307
+ at the desk or the copy of the TS document should be removed, retained
308
+ in a desk TS file or forwarded to the Top Secret Control Officer, and a
309
+ cross-reference sheet (Form 867) placed in the 201 file giving the location
310
+ of the TS document.
311
+
312
+ (9) Deferred documents (see 5b(2)).
313
+
314
+ b. Maintenance Procedures
315
+
316
+ (1) All material in a 201 dossier will be filed in document date order.
317
+ In the case of document attachments which have been classified into a 201
318
+ 26.2
319
+ SECRET
320
+ 14-00000
321
+ SECRET (
322
+ DOHB 70-1-1
323
+ CHAPTER III, ANNEX B
324
+ 15 November 1974
325
+ 7
326
+ dossier and separated from the basic document by the assignment of a slash
327
+ number, the attachment will be filed by the date of the basic document.
328
+
329
+ (2) Deferred documents will not be filed in a 201 dossier. If they are
330
+ to be retained in the dossier they should be sent to IP/RMS for classification
331
+ into that 201.
332
+
333
+ (3) Field index cards (held by some desks) and area desk cards may
334
+ be retained in the 201 as part of a consolidation procedure. These cards
335
+ should be mounted on a full-size sheet of paper for filing in the 201..
336
+
337
+ (4) A 201 dossier previously opened on a person who becomes a staff
338
+ employee and which contains Record Copy documents will be restricted to
339
+ the ISG/DIP unless the desk retains the restriction. The dossier should be
340
+ closed if there are no Record Copy documents in it.
341
+
342
+ (5) A 201 opened in pseudonym should be consolidated into the true
343
+ name 201 if one exists or converted to the true name.
344
+
345
+ (6) Field and duplicate (shadow) (201 files no longer of active interest
346
+ should be incorporated into the official 201 after the duplicate material
347
+ has been purged by the desk officer and the remaining information classified
348
+ to that 201 by the Analysis Section (IP/AN).
349
+
350
+ (7) Any document with a predecessor organization cover sheet or an
351
+ OPC (Office of Policy Coordination) cover sheet from the Archives and
352
+ Disposition Section (IP/ARD) must be returned to IP/ARD for processing
353
+ to the 201.
354
+
355
+ (8) Desk memoranda (with or without a document source number)
356
+ containing substantive or derogatory information on the subject of the 201
357
+ should be sent to. IP/AN to be classified officially into the 201 file.
358
+
359
+ (9) An attachment which should be separated from its basic document
360
+ for inclusion in a-201 personality dossier will be forwarded with the basic
361
+ document to IP/AN for processing into the 201.
362
+
363
+ (10) To retain the P&L, RYBAT, or KAPOK sensitivity of a document
364
+ remaining in a 201 dossier being retired to Central Files, place that document
365
+ in an envelope sealed with black tape (see DOI 70-17). Any RYBAT, P&L,
366
+ or KAPOK document sent to Central Files not in a black-taped envelope will
367
+ automatically be handled as desensitized. A black-taped envelope may con-
368
+ tain only one document and must be filed in chronological order within the
369
+ file. If there are numerous documents of this type the desk officer may black--- v
370
+ tape the entire dossier rather than individual documents (see DOI 70-10).
371
+
372
+ 26.3
373
+ SECRET
374
+ 14-00000
375
+ SECRET
376
+ (
377
+ DOHB 70-1-14
378
+ CHAPTER III, ANNEX B
379
+ 15 November 1974
380
+
381
+ Black-taped dossiers or dossiers with black-taped documents will be
382
+ handled as restricted dossiers.
383
+
384
+ (11) An inactive 201 dossier or an inactive volume of a large 201
385
+ dossier on permanent charge should be returned to Central Files under a
386
+ Routing and Record Sheet with the notation shown below..
387
+
388
+ UNCLASSIFIED
389
+ INTERNAL
390
+ USE ONLY
391
+ SUBJECT:
392
+ FROM
393
+ TO O
394
+ 1.
395
+ IP/Files
396
+ CC-52
397
+ 2
398
+ 5.
399
+ 7.
400
+ L
401
+ CONFIDENTIAL
402
+ SECRET
403
+ ROUTING AND RECORD SHEET
404
+ TRANSMITTAL OF INACTIVE 201 DOSSIERS
405
+ DATE
406
+ OFFICERS COMMENTS eru samned to show ham sh
407
+ SHETLALS
408
+ (For guidance see CSHB 70-1-1,
409
+ Chapter III, Annex B.)
410
+ Volume(s) of volume(s)
411
+ of 201-
412
+ Restricted Dossier
413
+ (Attach Foru 2021 to
414
+ Dossier)
415
+ Non-Restricted Dossier
416
+ 10.
417
+ For Split Charge Dossiers:
418
+ 11.
419
+ All documents prior to
420
+ (date)
421
+ 12
422
+ 12
423
+ 14.
424
+ 15.
425
+ forvarded to IP/Files. All
426
+ documents after
427
+ retained at
428
+ BIDE
429
+ SECRET CONFIDENTIAL
430
+ PETERMAL
431
+ 28.4
432
+ SECRET
433
+ (date)
434
+ desk.
435
+ CL STA
436
+ UNCLASSIFIED
437
+ ::
438
+ 14-00000
439
+ ( SECRET (
440
+ DOHB 70-1-1
441
+ CHAPTER III, ANNEX B
442
+ 15 November 1974
443
+
444
+ 6. 201 DOSSIER CHARGES
445
+
446
+ A 201 dossier may be kept on permanent charge at the desk during any
447
+ period of active interest. If the dossier is transferred to another desk, the desk
448
+ officer who is transferring the dossier must notify Central Files of the transfer.
449
+ Central Files will then send the Notice of Transfer of Document or File Account-
450
+ ability (Form 2977) to the new action desk officer.
451
+ TO:
452
+ HAME
453
+ CONFIDENTIAL
454
+ (Thon gitled in)
455
+ NOTICE OF TRANSFER OF DOCUMENT OR FILE ACCOUNTABILITY
456
+ BADGE
457
+ COMPONENT
458
+ ROOM
459
+ TUDE
460
+ EXT.
461
+ This is to notify you that accountability for the document(s) and/or file(s) cited
462
+ below has been transferred to you by:
463
+ Accordingly, IP's records now reflect you as the custodian. Please contact IP/Files,
464
+ Ext. 4362, if you have any questions regarding this transfer.
465
+ SUBJECT OF REQUEST
466
+ FORM 2377E PREVIOUS COITIONS
467
+ 1-73
468
+ DATE
469
+ FILE NO.
470
+ DOC. STHSOL & NUMBER BOC. DATE
471
+ 40
472
+ TRANSFER
473
+ CHARGE
474
+ PERM
475
+ OR TENP
476
+ CONFIDENTIAL
477
+ CL BY: 007672
478
+ The new action desk officer must then fill out a 201 Personality File Action
479
+ Request (Form 813) to change the action desk designation to insure that the
480
+ 201 personality will be included in the Headquarters and field machine listings
481
+ for his component..
482
+
483
+ 7. RESTRICTED DOSSIERS
484
+
485
+ a. Access to a sensitive 201 dossier may be restricted by holding the file at the
486
+ desk or placing it on restriction in Central Files.
487
+
488
+ (1) The dossier may be restricted by checking Box 2 on the 201
489
+ Personality File Action Request (Form 831) when the file is opened.
490
+
491
+ 26.5
492
+ SECRET
493
+ :
494
+ :
495
+ 14-00000
496
+ ( SECRET (
497
+ DOHB 70-1-1
498
+ CHAPTER III, ANNEX B
499
+ 15 November 1974
500
+
501
+ (2) The dossier may be restricted by holding it on permanent charge
502
+ from Central Files. (Note: To maintain the restriction of a dossier being
503
+ returned to Central Files for retention, a File Restriction Notice (Form
504
+ 2021) must accompany the dossier.)
505
+
506
+ (3) The dossier may be restricted and held in Central Files by sub-
507
+ mitting a File Restriction Notice (Form 2021).
508
+ TO
509
+ IP/FI
510
+ GC-52 TUBE DT-6
511
+ IP/DCU
512
+ GC-40 TUBE HT-4
513
+ ACTION DESK: 1.
514
+ SECTION A
515
+ CONFIDENTIAL
516
+ (When Pilled In)
517
+ INITIALS
518
+ FILE RESTRICTION NOTICE
519
+ To restrict a file, complete Section A (signature of R.O. not
520
+ necessary).
521
+ 2. To remove a restriction, complete Section B (R.O. signature
522
+ Decessary).
523
+ FILE HUNGER
524
+ RESTRICT TO: (Use country or non-country code number. See CSI 70-28)
525
+ RESTRICTED BY:
526
+ COMPONENT:
527
+ Date:
528
+ SECTION B
529
+ REMOVE RESTRICTION (AUTHORIZED BY)
530
+ COMPONENT:
531
+ R.O. No.
532
+ Date:
533
+ FORN
534
+ 2-23 2021 IONS
535
+ CONFIDENTIAL
536
+ 8-2, IMPORT CL BY, CG7122
537
+ 7
538
+ b. Access to a restricted dossier located in Central Files is limited to the
539
+ personnel of the restricting desk or persons authorized by that desk. Any request
540
+ for the charge of a restricted dossier or any document within a restricted dossier
541
+ held in Central Files will be forwarded with the entire dossier and a multiple-
542
+ routed cover sheet to the restricting desk. This desk may then forward the file
543
+ to the requester or deny the request and return the dossier to Central Files. The
544
+ desk will notify the requester of a denial.
545
+
546
+ c. Anyone requesting a restricted dossier, or a document within a restricted
547
+ dossier, permanently or temporarily charged to a desk, will be referred to that
548
+ desk by Central Files.
549
+
550
+ 26.6
551
+ SECRET
552
+ 14-00000
553
+ ( SECRET (
554
+ DOHB 70-1-1
555
+ CHAPTER III, ANNEX B
556
+ 15 November 1974
557
+ ?
558
+ 8. REQUESTS FOR INFORMATION ON 201 PERSONALITIES
559
+
560
+ The Automated Index Section (IP/AIS) will provide the identity of the
561
+ subject of a 201 number unless the 201 file is restricted, in which case the
562
+ requester will be referred to the restricting desk.
563
+
564
+ IP/AIS will also provide the 201 number assigned to a name, unless the 201
565
+ file is restricted, or state that there is no 201 number assigned. Requesters should
566
+ supply identifying information whenever available for each name submitted.
567
+
568
+ `Requests pertaining to five or fewer names or numbers may be made by
569
+ telephone by calling the IP/AIS red line extension; IP/AIS will provide the
570
+ information by return call to the requester's extension as listed in the Badge
571
+ Table. Requests for more than five names or numbers must be listed and sent
572
+ by tube or courier to IP/AIS; IP/AIS will reply by return mail.
573
+
574
+ 9. 201 DOSSIER CANCELLATION
575
+
576
+ A 201 file may be authorized for cancellation by a Records Officer, after
577
+ appropriate coordination. The file should be forwarded to IP/RMS which will
578
+ destroy the folder and the cards leading to it and will remove the name and
579
+ number from machine lists. Any Record Copy document contained in the folder
580
+ will be reclassified to another appropriate file or sent to the Destruction Unit
581
+ (IP/DU) as directed by the desk Records Officer.
582
+
583
+ 10. 201 MACHINE LISTINGS
584
+
585
+ Machine listings provide field stations and Headquarters desks with names
586
+ and 201 numbers in the requester's particular geographic or functional area of
587
+ interest. If a component wishes to exclude a sensitive 201 personality from its
588
+ alphabetic, numeric, and cryptonym listings, this may be done when opening
589
+ the 201 or later by a 201 amendment. On the 201 Personality File Action Request
590
+ (Form 831) leave the country of location (Box 15) and interest desk (Box 16)
591
+ blank, use the non-country code 900 in the action box (Box -14), and indicate
592
+ permanent charge to the responsible desk. The only listing which will include the
593
+ 201 number is the IP/201 record for the Vital Records program. 201 listings are
594
+ categorized as standard or nonstandard and as scheduled or special.
595
+
596
+ a. Standard Listings
597
+
598
+ Issued semi-annually to Headquarters and the field; based on a component's
599
+ interest as indicated in the "Action Desk," "Country of Location," and "Interest
600
+
601
+ 28.7
602
+ SECRET
603
+ 14-00000
604
+
605
+ ( (
606
+ SECRET
607
+ DOHB 70-1-1
608
+ CHAPTER III, ANNEX B
609
+ 15 November 1974
610
+ **
611
+ Desk" blocks on the 201 Personality File Action Request (Form 831). The
612
+ standard listings available are:
613
+ i
614
+
615
+ (1) Alphabetical by surname, leading to a 201 number;
616
+
617
+ (2) Alphabetical by given name, leading to a 201 number;
618
+
619
+ (3) Alphabetical by cryptonym, leading to a 201 number;
620
+ ९.
621
+ i
622
+
623
+ (4) Numerical, leading to a surname;
624
+
625
+ (5) Numerical, leading to a cryptonym.
626
+ FUL & CHINA
627
+ 201 SURNAME ALPHA LIST
628
+ 03 ICT
629
+ 1973.
630
+ NAPIE
631
+ SECRET/ORGANIZATION INTERNAL USE ONLY
632
+ C, SH 117185/1343/5030/
633
+ CHEM. SHOU 117115/1343/0001/
634
+ CINE. SHU 1. 17115/1343/0001/
635
+ CHE. SHOU-JFY 16774/1108/0088
636
+ CHEM, SHOU EI
637
+ 17JUL14
638
+ BIRTHPLACE
639
+ DA/MO/YR
640
+ CERY GEFY
641
+ CHIN, RHANGTUNG
642
+ 4
643
+ 24 JANES
644
+ 90
645
+ CHIN, AMOY
646
+ 04JAN19
647
+ CHIN, FUXIEM, PROV.
648
+ A
649
+ 1240V22
650
+ CHIN, HUNムス
651
+ IPMARAS
652
+ CHIN
653
+ C41
654
+ CHIN, CAN ΤΩΝ
655
+ TYPE
656
+ 008
657
+ DCC. CIT. 201
658
+ 01-101-2. ACT. LOC. (ir.
659
+ MAME
660
+ CRAY
661
+ CIRY CE
662
+ CHINT 0165401
663
+ CHIN HR
664
+ DIPT
665
+ 0218859
666
+ CHIN CHIN
667
+ 5178653
668
+ CHEY
669
+ f-41G 17109/1343/690
670
+ CHAN. SIEU SHIH 17115/1105/001
671
+ CHFE SHCU-TAN
672
+ CHEY, SH-155467115/1109/1
673
+ CHEN, SHCU 126 /0701/1343/1807
674
+ CHEN, SHC-17115/1109/495
675
+ CHEM, SHU-٩٨١
676
+ CHY. SHAI-CHI4 17115/2005/6930
677
+ CHE: SHIU CINIAM 7115/3219/122
678
+ CHOM, SH-C17115/2535/2
679
+ CNCS. SITU 7115/2055/2797/ דניים
680
+ CHEN, SHU FEM
681
+ A
682
+ R
683
+ 0258926 CHIM, LEARNING PRO
684
+ 12JAN18
685
+ 09 JUN99
686
+ 1905619
687
+ 02 JUL 30
688
+ :
689
+ 19
690
+ NOV30
691
+ CIAC22
692
+ OF JUL 14
693
+ CHIN, FURIEN
694
+ CHIN, CAЧТО
695
+ CHIN, FLANGTING PROV
696
+ CHIN, KWANGTUNG PROV.
697
+ CHIN, FIJAN TANG IS
698
+ CHIN. PFILIU
699
+ CHIN, RAANG TUNG
700
+ ENGR CHAT 0832655
701
+ CHI47 0130415
702
+ CCC? 0091803
703
+ PROF CHIN? 0040289
704
+ CH417 0052638
705
+ ARMY CHAT 0328328
706
+ CHIN? 0124438
707
+ TSEA CRAT 0797335
708
+ 210CT06 CHIM, PANCINIPIA, PORT ARTH
709
+ BUSP CCOM? 0043751
710
+ CHAT 0179620
711
+ CHIN HK
712
+ CHIM? 0234629
713
+ :
714
+ CHIN CUSA
715
+ CHIN CHIN
716
+ CHAT
717
+ 0069786
718
+ CHIN
719
+ DIPT CCON
720
+ 0905340
721
+ CHIM MALT
722
+ :
723
+ CHIK HX
724
+ CHIR TAIW
725
+ CHIN
726
+ CHIN USA
727
+ CHEN HWA
728
+ CHER TAL
729
+ CHEN IK
730
+ CHIN H
731
+ CHIT, SMI HA /7113/2885/3185/
732
+ CFT, SITI HEANG 17115/2579/74
733
+ CFS-510 7115/2985/7
734
+ 10
735
+ 23FERO7
736
+ CHIN, FUKIEN
737
+ CHEN, KWANGTUNG
738
+ CIER, SHU MS
739
+ 17115/2835/8133
740
+ OSMAY18
741
+ CHIN, FOOCH
742
+ CHIT. SHU-درس
743
+ 30×4326
744
+ CHIEN SINI-1 2711.5/2925/5030/
745
+ A
746
+ 06F5816
747
+ CHIN, HOPET
748
+ CHIN? 0171622
749
+ DIPT CCCM. 0223161
750
+ CHIR USA
751
+ CHEN CHI
752
+ CHIN
753
+ CHIN CHIN
754
+ CHER USA
755
+ CHIN? 0200223
756
+ CHIN
757
+ 04RAST7
758
+ CHIN ETH
759
+ CHEY? 0179621
760
+ CHIK? 0014759
761
+ CCO? 00923195
762
+ CILEN
763
+ CHIN CEY
764
+ CHEN, SIRU RUET /7215/2695/2710
765
+ Girn, SIRI LAY
766
+ 27NQY23
767
+ CHIN. FANG CHIFING
768
+ PROF CHIN? 0175673
769
+ CHIM CHI
770
+
771
+ CHIN
772
+ CCON 0221972
773
+ CHIA CHI
774
+ CHLR, SIPI LIANG 77115/0547/009
775
+ CHEM. Sins 114 7115/2579/2631/
776
+ CIRCZE
777
+ CHIN
778
+ DEPT CHEN? 0223162
779
+ CHIN CHIN
780
+ 25MMV20-
781
+ CHIN, FERGSHUN
782
+ CHIN? 0179624
783
+ CHIM TAT
784
+ CHOEN SHIT-L145 17107/2473/010
785
+ 01 JUL 29
786
+ CHIN, FIANGSU
787
+ MILA CCM
788
+ 0834440
789
+ CHIM LACS
790
+ 20SE 20
791
+ CHER, HSIAM-HSLEN, KLANGSU
792
+ CHAT
793
+ 009647-
794
+ CHIN USA
795
+ CHEM, SHY 4/7119/2285/0589/
796
+ CILM, SHU-PAD 7115/2579/0202/
797
+ CHFA, SHU-SEM/7115/2895/2773/
798
+ CHIFT, SINI-SHAN 17115/2579/091
799
+ CHEM, SHU-TE /7115/2455/1795/
800
+ 154PR 30
801
+ 1°PECI
802
+ A
803
+ 300EC26
804
+ 27JAN25
805
+ 210EC37
806
+ CIPEN, SHU 1EH/475/
807
+ 27MA 20
808
+ CHEN, CHEHCHA 1
809
+ CHIN, KWANGTING PROV.
810
+ CHIM, KWANG TUPIG
811
+ CHIM, FUKIEN PROY
812
+ CHEN, SHANGHAI
813
+ CHIM, CHANG SHO
814
+ CHIN CHI
815
+ CHAT? 0052638
816
+ CHEN HWAL
817
+ CHINT 0085119
818
+ CHIN TATH
819
+ CHIN? OL03249
820
+ CHEN CHIN.
821
+ GEOL CHIN? 0763416-
822
+ CHEN BUSA
823
+ 0013991
824
+ CHIN
825
+ CM. SH15/0647/6639
826
+ CIPCTS
827
+ CHIN, HANG CHEA
828
+ CHIN? 0153929
829
+ OHER CAIR
830
+ CHEE, SHE T120 /7115/245/2757/
831
+ CICM. SU 1217:15/0647/0317 וי/
832
+ LAMAR17
833
+ CHEN:
834
+ FIN CCON0767442-CIA "UR
835
+ A
836
+ OZFEROS
837
+ 0151320
838
+ CHIN
839
+ CEA, S-T40/7115/2655/1031
840
+ CIPES, SM-T11
841
+ CHIR. SHIP 1/7115/2845/5341
842
+ CHIM, SIRI-19/7115/2579/6992/
843
+ アレった。ベリー
844
+ COUNT. SIN 7115/2579/3842/ ניז/
845
+ 11AOVOS
846
+ CHIN, RUENGTING
847
+ CHIN
848
+ OSAPRE?
849
+ CHIN, PEIPING
850
+ CHINT 0107306
851
+ CHIN CHEN
852
+ 15 JUNOG
853
+ CHEN, FARG CHET KU
854
+ CHIM? 0179624
855
+ CHIN CHIN
856
+ 0200130
857
+ 21APP21
858
+ CHIN, SHANGHAS
859
+ 04 SEP28
860
+ CHIS. SIECINAN
861
+ CHIN, HENG YANG HSIEN, HIJN ARMY-CHAT 0349624
862
+ 171FM38 CHIN. CHER LANG
863
+ SECRET/ORGANIZATION INTERNAL USE ONLY
864
+ 82 INPORS CL BY 056979
865
+ CHIN? 44010
866
+ CHIN? 0144758
867
+ CHIN TAIN
868
+ INT
869
+ 0111410
870
+ CHIN DEUX
871
+ CHIN
872
+ CHIM TAEw
873
+ PAGE
874
+ 150
875
+ 26.8
876
+ SECRET
877
+ 14-00000
878
+ ::
879
+ ( (
880
+ SECRET
881
+ DOHB 70-1-1
882
+ CHAPTER III, ANNEX B
883
+ 15 November 1974
884
+
885
+ All standard listings are cumulative; previous editions must be destroyed
886
+ upon receipt of current editions. These listings are by their very nature extremely
887
+ sensitive compilations of information and must be given every possible safeguard.
888
+
889
+ b. Non-Standard Listings
890
+ ?
891
+ :
892
+ Based on one or more of the following selection criteria:
893
+
894
+ (1) Country of location
895
+
896
+ (2) OI codes (organization and/or intelligence affiliation)
897
+
898
+ (3) Citizenship
899
+ ;
900
+
901
+ (4) Year of birth (plus or minus a given number of years)
902
+
903
+ (5) Occupation.
904
+
905
+ These selection criteria may be used singly or in combinations. For example,
906
+ a user could obtain a list of all 201 personalities who have been assigned the
907
+ OI code of XX or codes of XX, XY, or XZ. A
space/space/jfk_text/104-10048-10124.md ADDED
@@ -0,0 +1,441 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ 2025 RELEASE UNDER THE PRESIDENT JOHN F. KENNEDY ASSASSINATION RECORDS ACT OF 1992
2
+
3
+ DISPATCH
4
+
5
+ CIA SPECIAL COLLECTION
6
+ RELEASE AS SANITIZED
7
+
8
+ Chief, Special Activities Report on JMWAVE's Relationship with ANCARBON-1
9
+
10
+ ACTION REQUIRED: Paragraph 10
11
+ REFERENCES
12
+ A. WAVE 8981, dated 24 September 1962
13
+ B. WAVE 9169, dated 28 September 1962
14
+ C. WAVE 9343, dated 2 October 1962,
15
+ D. DIR 40975, dated 6 October 1962
16
+ E. UFGA 14417, dated 4 March 1964
17
+
18
+ 1. INTRODUCTION. In Reference E, JMWAVE forwarded a review
19
+ of the nature of its relationship with AMCARBON-2. This review
20
+ indicates that the relationship with AMCARBON-2 evolved from that
21
+ action which was taken in September 1962 to insure that a security
22
+ breach would not occur as a result of an investigation which was
23
+ being carried out by the Identity 1 relative to the fact that the
24
+ establishment of the Identity 2 was being kept from the YOBELT
25
+ South Campus as a result of security restrictions which were in some
26
+ way, related to JMDUSK. While the relationship with AMCARDON-2
27
+ stemmed from the remedial action which had been taken in a crisis
28
+ situation, the establishment of a working relationship with the
29
+ Identity 3 was an objective which JMWAVE had always hoped to obtain.
30
+ As a matter of fact, in Reference A, the recommendation was made
31
+ that JMWAVE be given approval to contact the major South Florida
32
+ news media in an attempt to work out a relationship with these news
33
+ media which would insure that they did not turn the publicity
34
+ spotlight on those KUBARK activities in South Florida which might
35
+ come to their attention. Thus, when a relationship was established
36
+ with AMCARBON-2, it was carefully cultivated in order that JMWAVE
37
+ might be able to use this contact at the Identity 3 as a means of
38
+ achieving the objective of having a relationship with the Identity 3,
39
+ which would simultaneously insure the security of JMWAVE's operations
40
+ and give JMWAVE an outlet into the press which could be used for
41
+ surfacing certain select propaganda items. In the period October to
42
+
43
+ Attachments: USC
44
+ A - Five Newspaper Clippings
45
+ B- Identities
46
+
47
+ Distribution:
48
+ 3-Chief, SAS, w/atts.
49
+ 19 March 64
50
+ APR 2 1984
51
+
52
+ UFGA-14781
53
+
54
+ SECRET
55
+ 201-
56
+
57
+ COS
58
+ Andrew K. REUTEMAN/vtp
59
+ 251
60
+
61
+ Ri Chrono
62
+ 1 - 201 file (O/COS
63
+ 1- COS Chrono
64
+
65
+ DUDLEY R. WILLINGS
66
+
67
+ ANDREW K. REUTEMAN
68
+ (40) MAR 3 1 1964
69
+
70
+ December 1962, all of JMWAVE's business with the Identity 3
71
+ was handled via AMCARDON-2. In mid-December 1962, AMCARPON-2
72
+ made the suggestion that he introduce REUTEMAN to AMCARDON-1
73
+ in order that there be a backup contact, in the event that
74
+ AMCARBON-2 were out of town or unavailable at such times as
75
+ REUTEMAN might require assistance from the Identity 3. REUTEMAN
76
+ agreed to AMCARBON-2's suggestion, and, as a result, AMCARDON-2
77
+ hosted a luncheon on 12 December 1962 at the Miami Club in the
78
+ Hotel Columbus, Miami, Florida, at which AMCARBON-2 introduced
79
+ AMCARBON-1 to REUTEMAN. As a result of this initial meeting on
80
+ 12 December 1962, an operational relationship has developed with
81
+ AMCARBON-1, and it is believed that this relationship contributes
82
+ to the fulfillment of the over-all JMWAVE mission. In view of
83
+ this, a special activities report is being submitted to cover the
84
+ nature of JMWAVE's relationship with AMCARBON-1 during the
85
+ period December. 1962 to March 1964.
86
+
87
+ 2. FRAME OF REFERENCE FOR JAWAVE'S RELATIONSHIP WITH AMCARDON-1
88
+ When AMCARBON-2 introduced AMCARCON-1 to REUTEMAN, AMCARLON-2
89
+ reviewed the ground rules under which he had been cooperating
90
+ with REUTEMAN. This review was conducted for AMCARBON-1's
91
+ benefit, in order that he might clearly understand the frame of
92
+ reference, which should prevail in his relationships with REUTEMAN.
93
+ In this review, AMCAREON-2 pointed out that it was the policy
94
+ of the Identity 3 that it would take no action which would
95
+ purposely embarrass KUBARK or its South Florida operations. As
96
+ a result, if any embarrassing items relative to KUBARK's operations
97
+ in South Florida did come to the attention of the Identity 3, this
98
+ material would be brought to REUTEMAN's immediate attention.
99
+ AMCARBON-2 made it clear to AMCARBON-1 that such items should be
100
+ discussed with REUTEMAN in a frank manner. In addition, AMCARBON-2
101
+ made the point that, after an item was discussed, AMCARBON-1
102
+ should follow REUTEMAN's guidance relative to how any particularly
103
+ embarrassing item might be handled by the Identity 3, so that it
104
+ would not expose KUBARK operations and, at the same time, would
105
+ not jeopardize the journalistic reputation of the Identity 3.
106
+ In addition, AMCARBON-2 pointed out that, if AMCARBON-1 brought
107
+ a potentially embarrassing item to REUTEMAN's attention and
108
+ remedial action on the matter was not taken by REUTEMAN within
109
+ a reasonable period of time, then the Identity 3 would feel free
110
+ to expose any ineptness on KUBARK's part. AMCARBON-2 pointed
111
+ out that in return for this cooperation from the Identity 3,
112
+ REUTEMAN had agreed that he would be available for contact by
113
+ telephone or periodic personal meetings at which AMCARBON-1
114
+ and AMCARBON-2 could discuss broad trends and developments in
115
+ Latin American affairs. AMCARBON-2 advised AMCARBON-1 that this
116
+ arrangement did not mean that AMCARBON-1 could expect to obtain
117
+ any classified information from REUTEMAN. The point was also
118
+ made that AMCARBON-1 should not press for the obtaining of
119
+ classified information, but he should be alert to steering tips
120
+ which REUTEMAN might furnish him on fast-breaking news stories.
121
+ AMCARBON-1 indicated that he understood the frame of reference
122
+ which had been outlined by AMCARBON-2. This frame of reference
123
+ has prevailed throughout JMWAVE's relationship with AMCAREON-1
124
+ during the period December 1962 to March 1964....
125
+
126
+ 3. AMCARBON-1'S JOURNALISTIC CAREER. AMCARBON-1 originally
127
+ started to work for the Identity 3 in 1957 on the City Desk,
128
+ and subsequently advanced from this assignment to an assignment
129
+ which entailed covering major political developments in Florida.
130
+ At a later date, ANCARBON-1 became a feature writer for the
131
+ Identity 3. Then in July or August 1962, AMCARBON-1 was made
132
+ the Identity 4. This assignment was considered to be a significant
133
+
134
+ promotion for AMCARBON-1, and it reflected confidence in him by
135
+ the Identity 3 management. AMCARBON-1 is by no means an expert
136
+ on Latin America, but he is developing his knowledge on the area
137
+ and, at the moment, he gives every indication of wanting to be a
138
+ long-term Latin American specialist. QDELF has been questioned
139
+ about AMCARBON-1, and he has indicated that AMCARBON-1 is regarded
140
+ in the journalistic trade as an extremely likeable fellow who has
141
+ a keen mind but who lacks experience in depth on Latin American
142
+ affairs. It is QDELF's opinion that given an appropriate lapse
143
+ of time, AMCARBON-1 will develop into one of the leading Latin
144
+ American specialists in U.S. journalistic circles. AMCARBON-1
145
+ has a working command of Spanish, and he is constantly attempting
146
+ to improve his language fluency. It is REUTEMAN's opinion that
147
+ AMCARBON-1 has developed rapidly as a Latin American specialist,
148
+ and he will continue to grow in this field. Thus, he is a contact
149
+ who should be developed and harnessed for exploitation, bearing
150
+ in mind that he does have long-term potential.
151
+
152
+ 4. AMCARBON-1'S CONTACTS AND SOURCES. In keeping with the
153
+ traditional pattern of source protection which is common to
154
+ newspapermen, intelligence officers and law enforcement officers,
155
+ AMCARBON-1 attempts to guard the true identity of all of his
156
+ sources. On the other hand, when pressed, AMCARBON-1 has identified
157
+ some of his sources to REUTEMAN, in order that meaningful evaluations
158
+ could be made of that information which AMCARBON-1 had passed to
159
+ KUBARK. As a result of these occasional witting identifications
160
+ of his sources, and, as a result of general conversations with
161
+ AMCARBON-1, REUTEMAN has learned that AMCARBON-1's sources include
162
+ the following persons:
163
+
164
+ a. Luis FERNANDEZ Rocha (201-316766), secretary 'general
165
+ of the DRE.
166
+
167
+ b. Manolo *RAY Rivero (201-239298), chief of JURE,
168
+
169
+ c. Carlos *TODD y Lobo (201-264141) of the defunct
170
+ Havana Times.
171
+
172
+ d. AMBIDDY-1 (201-267437).
173
+
174
+ e. Aureliano *SANCHEZ Arango (201-019245), leader of the AAA
175
+
176
+ f. Edmund *LEAHY of the Washington News Bureau. AMCARBON-1
177
+ regards this source as being particularly interesting, in view
178
+ of the fact that LEAHY's daughter is a secretary in the office of
179
+ Attorney General Robert KENNEDY.
180
+
181
+ g. Frank *FIORINI (201-242256), free-lance pilot and
182
+ adventurer.
183
+
184
+ h. Eduardo *SUAREZ Riva, public relations man for the MRR.
185
+
186
+ 1. Luis *MUNOZ Marin, governor of Puerto Rico.
187
+
188
+ J. Juan *BOSCH Gavino (201-103272), former president of
189
+ the Dominican Republic.
190
+
191
+ k. Charles *KEELY of the Copley Wire Service.
192
+
193
+ l. Jorge *VOLSKY Kraisler (201-352252), an employee of
194
+ USIA in Miami. ANCARBON-1 is well aware of the fact that VOLSKY
195
+ is a defacto stringer for Tad SZULC of the New York Times, but this
196
+ does not deter AMCARBON-1 from attempting to exploit VOLSKY as a
197
+ source of information.
198
+
199
+ 5. OPERATIONAL SUPPORT. On occasion, AMCARBON-1 is used
200
+ to carry out certain operational support tasks. In such instances,
201
+ ANCARBON-1 makes his inquiries or carries out the required action
202
+ within the context of his normal journalistic activities. The
203
+ use of AMCARBON-1 for operational support tasks enables JMWAVE to
204
+ harness the investigative facilities of the Identity 3. Several
205
+ oxamples of how AMCARBON-1 has been used in operational support
206
+ tasks are outlined below:
207
+
208
+ a. Andrew ORDONO Camps. In March 1963, Andrew *ORDONO
209
+ Camps, DPOB 30 September 1914, Gibara, Cuba, A 12 837 617, arrived
210
+ in Miami and was given routine CAC processing. The details of this
211
+ processing are contained in MIAM-0085, dated 12 March 1963. After
212
+ being released by CAC, ORDONO was interviewed by the Identity 3, and
213
+ a sensational story was developed. In view of this story, JMWAVE
214
+ tried to locate ORDONO for debriefing. This effort was not productive,
215
+ thus AMCARBON-1 was asked to locate ORDONO. AMCARBON-1 did locate
216
+ ORDONO in Houston, Texas. See WAVE-6307, dated 25 March 1963, for
217
+ details.
218
+
219
+ b. Discrediting Carlos BANDIN of the MRR Splinter Group.
220
+ In UFGW-2555, dated 13 September 1963, Headquarters suggested that
221
+ JMWAVE might be able to discredit Carios BANDIN Cruz (201-309611)
222
+ of the MRR splinter group as a result of BANDIN's overinflated claims
223
+ relative to his faction invading Cuba. Headquarters' interest in
224
+ discrediting BANDIN was also stimulated by the fact that BANDIN's
225
+ irresponsible publicity stunts were causing problems for AMBIDDY-1.
226
+ As a result of Headquarters' interest in this matter, REUTEMAN had
227
+ a luncheon session with AMCARBON-1 on 24 September 1963, at which
228
+ AMCARBON-1 was advised that the BANDIN faction of the MRR was less
229
+ than accurate in its claims relative to its activities in Cuba.
230
+ In view of this, REUTEMAN suggested that the Identity 3 might want
231
+ to soft peddle any future war communiques which the BANDIN faction
232
+ might release. AMCARBON-1 stated that, in view of REUTEMAN'S
233
+ comments, the Identity 3 would not only soft peddle, but would
234
+ ignore the BANDIN faction in the future. Once BANDIN was discredited
235
+ with AMCARBON-1, the word was soon leaked by AMCARBON-1 to other
236
+ newspapermen that BANDIN was not a reliable source. As a result
237
+ of this action, the BANDIN group has received minimal media coverage
238
+ in South Florida since September 1963.
239
+
240
+ 6. OPERATIONAL INTELLIGENCE. In the period February 1963
241
+ to February 1964, AMCARBON-1 has furnished JMWAVE with operational
242
+ intelligence as outlined below:
243
+
244
+ a. In WAVE 4836, dated 21 February 1963, AMCARBON-1
245
+ reported that AMBEND-l was back in Miami and was the object of
246
+ a great deal of press interest in view of AMBEND-1's release from
247
+ a Havana prison. AMCARBON-1 also indicated that AMBEND-1 would
248
+ probably be a knowledgeable source on the current activities of the
249
+ UR in Cuba. This operational intelligence was most helpful in
250
+ terms of keeping JMWAVE informed on AMBEND-1's movements. Subsequent
251
+ developments revealed that AMCAREON-1 could not contact AMBEND-1,
252
+ and thus AMBEND-1's return to the United States did not cause the
253
+ publicity stir that was initially anticipated.
254
+
255
+ b. In WAVE 6176, dated 22 March 1963, AMCARBON-1
256
+ reported that the Identity 3 was attempting to research a full
257
+ feature article on the Bay of Pigs invasion. The intent of this
258
+ article was to furnish a recapitulation of the entire tactical
259
+ situation. In this connection, AMCARBON-1 pointed out that he was
260
+
261
+ thinking about exposing the role of Miami attorney Alex E. *CARLSON,
262
+ residing 145 Curtiss Parkway, Miami Springs, Florida, in the
263
+ Bay of Pigs operation. AMCARBON-1 stated that, if CARLSON were
264
+ of any current interest to REUTEMAN, then the Identity 3 would
265
+ soft peddle the CARLSON angle. REUTEMAN advised AMCAREON-1 that
266
+ he had no interest in CARLSON but knew of him and was of the
267
+ opinion that CARLSON was a sound and honest attorney. The receipt
268
+ of this operational intelligence enabled JNWAVE to brief CARLSON
269
+ on the Identity 3's over-all interest in the role that CARLSON had
270
+ played in the Bay of Pigs invasion. This briefing, in turn,
271
+ enabled CARLSON to more adequately prepare himself for a meeting
272
+ with AMCARBON-1. While AMCARBON-1 did attempt to pursue this
273
+ Bay of Pigs story, he never did put anything into print as the story
274
+ was overtaken by other developments before AMCARBON-1 could finish
275
+ his research.
276
+
277
+ c. In WAVE 0904, dated 9 July 1963, AMCARBON-1 advised
278
+ JMWAVE that Mr. Trevor *ARMBRISTER, an associate editor for the
279
+ Saturday Evening Post, was in Miami during July 1963 attempting
280
+ to research a story regarding the possibility that strategic
281
+ missiles were hidden in Cuban caves. This information enabled
282
+ JMWAVE to keep Headquarters informed on sensational-type articles
283
+ which might be appearing relative to Soviet missiles in Cuba.
284
+
285
+ d. In WAVE 4701, dated 20 September 1963, AMCARBON-1
286
+ gave JMWAVE his resume of the discussions which he had with
287
+ AMBIDDY-1 at the Miami Playboy Club on 19 September 1963. This
288
+ information was useful in obtaining an insight into what AMBIDDY-1
289
+ was telling the press.
290
+
291
+ e. In WAVE 5661, dated 10 October 1963, AMCARBON-1
292
+ reported on a discussion that he had had on 10 October 1963 with
293
+ AMBIDDY-1's public relations man. This operational intelligence
294
+ was useful in terms of keeping KUBARK advised as to what AMBIDDY-1's
295
+ representatives were telling the outside world about their
296
+ operational activities.
297
+
298
+ f. In WAVE 6910, dated 31 October 1963, AMCARBON-1
299
+ informed JMWAVE about the flood of telephone calls which were
300
+ being received at the Identity 3 relative to so-called KUBARK
301
+ vessels which were located in South Florida waters. This
302
+ information alerted JMWAVE to the fact that press scrutiny was
303
+ going to be directed toward the Identity 5. Armed with this warn-
304
+ ing, JMWAVE was able to take action which minimized the publicity
305
+ repercussions from a renewed press interest in the Identity 5.
306
+
307
+ g. In WAVE 7671, dated 16 November 1963, AMCARBON-1
308
+ reported to JMWAVE the fact that he had received a letter from
309
+ Peru which contained an interesting operational lead to one
310
+ Carlos MONTALVANO in Puno, Peru. This lead was examined by JMWAVE,
311
+ Headquarters and the Lima Station. This examination revealed
312
+ that the letter was written by a crackpot; thus, there was no
313
+ real operational potential in this lead. This incident did underscore
314
+ the fact that AMCARBON-1 is willing to bring potentially significant
315
+ operational leads to JMWAVE's attention.
316
+
317
+ h. In WAVE 1614, dated 6 February 1964, AMCARBON-1
318
+ advised JMWAVE that he had received numerous telephone calls
319
+ indicating that Armando Andres GUIROLA Forte, who had defected
320
+ from a Cuban fishing vessel might be an individual who had previously
321
+ been seen in Miami during November or December 1963. At the same
322
+ time, AMCARDON-1 pointed out that he was suspicious and thought
323
+ that these telephone calls indicated that GUIROLA was not a bona
324
+ fide defector, but was either a GOC agent or a KUBARK plant, who
325
+ was being used as a means of creating an incident which would
326
+ embarrass the GOC, as a result of their fishing boats penetrating
327
+
328
+ United States territorial waters. REUTEMAN a.ised AMCARDON-1
329
+ that KUBARK had played no role in mounting a provocation operation
330
+ against the GOC. At the same time, REUTEMAN pointed out that
331
+ it was highly unlikely that GUIROLA was a GOC agent. As a result
332
+ of this conversation, arrangements were made for JAMWAVE to check
333
+ out certain aspects of the GUIROLA story. At the same time,
334
+ ANCARBON-1 was prevailed upon not to write a story which might
335
+ lead the public to speculate on whether GUIROLA was an agent or a
336
+ plant in a propaganda play designed to embarrass the GOC.
337
+
338
+ 7. PROPAGANDA OUTLET. AMCARBON-1 has been used successfully,
339
+ during the period covered by this report, as a propaganda outlet
340
+ through which items of interest to KUBARK could be surfaced in
341
+ the free world press. Examples of how AMCARBON-1 has been harnessed
342
+ in this field are outlined below:
343
+
344
+ a. AMCRAB-1. The AMCRAB-1 defection story originally
345
+ surfaced in the Miami area on 13 October 1963 via the Diario de
346
+ las Americas, which played up an API release from Montevideo.
347
+ The API Montevideo story highlighted AMCRAB-1's information
348
+ relative to GOC activities in Uruguay. The story in the Diario
349
+ de las Americas had an extremely limited impact on Spanish readers
350
+ in the Miami area. As a result, it was decided to do a series
351
+ of feature stories on AMCRAB-1, pointing up the fact that AMCRAB-1
352
+ was typical of the veterans of the Granma expedition, who felt
353
+ they had been betrayed by CASTRO and had been relegated to positions
354
+ of obscurity once the revolution had put CASTRO in power. AMCARBON-1
355
+ was briefed in detail on the AMCRAB-1 story, and he was given an
356
+ opportunity to debrief AMCRAB-1 under controlled conditions in a
357
+ JMWAVE safehouse. After completing his debriefing, ANCARDON-1
358
+ wrote a series of feature articles on AMCRAB-1. The first article
359
+ in the series received front page headline play. The series of
360
+ articles on AMCRAB-1 were well written, and they provided an
361
+ excellent peg for JMWAVE to mount a replay operation via other
362
+ propaganda assets. AMCARBON-1's story on AMCRAB-1 was picked up
363
+ by UPI, API and others, and it was played throughout Latin America.
364
+ The details of this surfacing can be found in WAVE 5826, dated
365
+ 14 October 1963; WAVE 6092, dated 19 October 1963; and, WAVE 6174,
366
+ dated 21 October 1963.
367
+
368
+ b. Charles GRIFFIN Shrimp Boat Story. On 26 February 1964
369
+ JMWAVE learned that when Mr. Charles GRIFFIN's sons went to Cuba
370
+ to reclaim the hijacked shrimp boat, JOHNNY REB, they found that
371
+ select items were missing from the boat when it was turned over
372
+ to them. It was believed that this information would make a good
373
+ human interest story which JMWAVE assets could use to counter GOC
374
+ propaganda claims that United States officials had stolen items
375
+ from the Cuban fishing boats which had violated United States
376
+ territorial waters. In view of this opinion, a steering tip was
377
+ given to AMCARBON-1 to have the Identity 3 representative in
378
+ Key West interview Mr. GRIFFIN. This interview was carried out,
379
+ and an article outlining the points which were of interest to
380
+ JMWAVE was published in the 27 February 1964 edition of the
381
+ Identity 3.
382
+
383
+ c. LAYC Story. The March 1964 LAYC meeting in Santiago,
384
+ Chile, was not receiving appropriate coverage in the South Florida
385
+ newspapers; as a result, REUTEMAN contacted AMCARBON-1 on 5 March
386
+ 1964 and suggested that the LAYC meeting was a story which the
387
+ Identity 3 should pursue. AMCARBON-1 was grateful for this steering
388
+ tip, and he assigned the task of preparing the story on the LAYC
389
+ to one of the members of his staff. A story on the LAYC was
390
+ subsequently published in the 6 March 1964 edition of the Identity 3
391
+
392
+ (COMMENT: Copies of the articles cited in subparagraphs a through
393
+ c above are attached for Headquarters information.)
394
+
395
+ 8. POSITIVE INTELLIGENCE. Attempts have been made to
396
+ obtain disseminable positive intelligence from AMCARBON-1 during
397
+ the period covered by this report. This attempt has been generally
398
+ unsuccessful, in that AMCARBON-1 does not have a great number of
399
+ contacts in Latin America who would give him access to worthwhile
400
+ intelligence appreciably in advance of the information appearing
401
+ in the overt press. As a result, AMCARBON-1 is usually not aware of in
402
+ inside developments in any Latin American country; consequently,
403
+ he is not a worthwhile source of positive intelligence. As a
404
+ matter of fact, AMCARBON-1 is less valuable as a source of positive
405
+ intelligence than most journalists. This is attributable solely
406
+ to his lack of long-standing contacts in the Latin American political
407
+ scene, It is believed that AMCARBON-1 will ultimately overcome
408
+ this shortcoming; thus, we will continue to attempt to harness him for
409
+ the collection of positive intelligence.
410
+
411
+ 9. COMMENT. In the period covered by this report, AMCARDON-1
412
+ has been found to be a straight-forward individual who is honest,
413
+ cooperative and who understands the need for security. Our
414
+ relationship also indicates that AMCARBON-1 is an accurate reporter
415
+ of that information which he passes to KUBARK. In view of this,
416
+ JMWAVE plans to continue to harness AMCARBON-1 in the same manner
417
+ that he has been used in the past. It is believed that our rela-
418
+ tionship with AMCARBON-1 enhances our ability to conduct our
419
+ operational mission in a secure manner. In addition, this relation-
420
+ ship tends to minimize the possibility that JMWAVE might have diffi-
421
+ culties with the media outlets in the South Florida area. As a
422
+ result of our continuing relationship with ANCARBON-1, a special
423
+ activities report will be forwarded at appropriate intervals.
424
+
425
+ 10. It is requested that a 201 number be assigned AMCARBON-1
426
+ and that JMWAVE be advised of the number.
427
+
428
+ END OF DISPATCH
429
+
430
+ Identities - 1 - The Miami News
431
+ 2 - Sunland Training Center for
432
+ Retarded Children
433
+ 3 - The Miami Herald
434
+ 4-Latin American Editor
435
+ 5 The LEDA
436
+
437
+ DISTRIBUTION:
438
+ 3 - Chief, SAS
439
+ 1- RI Chrono
440
+ 1- AMCARBON-1 201
441
+ 1 - COS Chrono
space/space/jfk_text/104-10048-10252.md ADDED
@@ -0,0 +1,104 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ 104-10048-10252
2
+ 2025 RELEASE UNDER THE PRESIDENT JOHN F. KENNEDY ASSASSINATION RECORDS ACT OF 1992
3
+
4
+ SECURITY INFORMATION
5
+ CONFIDENTIAL
6
+
7
+ From: BOGOTA
8
+ Report No: TLB-1684 Local File No:
9
+ No. of Pages:
10
+ No. of Enclosures: Memo
11
+
12
+ Report Made By: George S. Vinoops/Unt
13
+ Approved By:
14
+
15
+ Distribution:
16
+ Orally to:
17
+ By copy to:
18
+ Washington - 3
19
+ Caracas - 1
20
+ Guatemala City - 1
21
+ Havana - 1
22
+ Quito - 1
23
+ Maracaibo - 1
24
+ Guayaquil - 1
25
+ Files - 2
26
+
27
+ Source Cryptonym: See below
28
+ References: None
29
+
30
+ Source, Operational Data, and Comments:
31
+ The information in this report was obtained from a local detective who
32
+ works for the National Police. An informant of the Police in Paris
33
+ provided a report to the latter concerning activities of the Colombian
34
+ delegation, and he added names of delegates of certain other countries.
35
+ This informant is studying in Paris and he accompanied the delegates
36
+ to Berlin. It is likely that the interested stations have this infor-
37
+ mation, but it is thought it might serve to confirm, or possibly add a
38
+ bit to, the material already on hand.
39
+
40
+ 30-77991
41
+
42
+ IR COPY
43
+
44
+ CONFIDENTIAL
45
+
46
+ SECURITY INFORMATION
47
+
48
+ APERTURE CAND MEPRODUCTIO
49
+ 13-00000
50
+
51
+ SECURITY INFORMATION
52
+ CONFIDENTIAL
53
+
54
+ Subject: Delegates to Youth Festival
55
+ in Berlin
56
+
57
+ Report No: TLB-1684
58
+ Place Acquired: Colombia, Bogota
59
+ Date of Information: August-September 1961
60
+ Evaluation: B-2
61
+ Date Acquired: January 1962
62
+ Source: Local Detective
63
+ Date of Report: 29 January 1962
64
+
65
+ 1. Bouree reports that an informant in Paris has submitted information to the
66
+ local Police concerning delegates of certain other countries to the III
67
+ Festival Mundial de la Juventud held in Berlin in August and September 1961.
68
+ Those names together with the camments of the informant are included in
69
+ the following paragraphs.
70
+
71
+ 2. The delegation of Guatemala consisted of the followings
72
+ Edelberto TORRES Rivas, Novena Ave. 8. No. 110
73
+ Octavio REYES ortiz, 17 c. o. No. 76
74
+ Hugo BARRIOS K100, 12 Calle Oriente No. 58.
75
+ José Victor PONZALEZ, 8 Ave. Bur No. 11
76
+
77
+ 3. The following is a list of the Veneauelan delegates!
78
+ Juvenel HERRERA, estudiante do derecho
79
+ Francisco MIERKS, peligroso
80
+ Cordova ARMANDO, estudiante de derecho in Cumaná
81
+ Micolas CURIEL Acosta, escritor de teatro
82
+ Juan Pedro ROJAS, pintor
83
+ Yolanda Steffens de ROJAB, casada con el anterior
84
+
85
+ 4. The Bouadoran delegates are as followes
86
+ Enrique Gil Gilbert, escritor
87
+ Enrique QUINIBERO.
88
+ Patricic CUEVAS, estudiante de medicina da Praga
89
+
90
+ 5. The delegation of Cuba consisted of the followings
91
+
92
+ Nicolas GUILLEN, poeta y escritor
93
+ Santiago GRAJALES, obrero
94
+ Antonio NUNZZ-Jimenes,/profesor)de, Podagogía y "responsable de la
95
+ delegación de Cuba". Es peligroso y cuando hubo necesidad
96
+ de retratarlo en Paris no se dejó.
97
+ Francisco GARCIA Benites, comerciante de Holguin
98
+ Jose CANETTI, comerciante en Santiago de Cuba
99
+
100
+ Classification CONFIDENTIAL
101
+
102
+ SECURITY INOPAMA
103
+
104
+ 02316
space/space/jfk_text/104-10049-10362.md ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # SECRET
2
+
3
+ 20 October 1959
4
+
5
+ MEMORANDUM FOR THE RECORD
6
+
7
+ SUBJECT: Highlights of Tape-Recorded Conversation in Miami Between Mr. William D. Pawley and an Unidentified Cuban during Period 17-18 October
8
+
9
+ 1. On 20 October the undersigned and Owen Faust of WH/3 listened to the play-back of a tape, brought to Washington from Miami and given to Colonel King by Mr. Pawley on 19 October, which was a recording of Mr. Pawley's conversations with two Cubans during the period 17-18 October. The first conversation was with an unidentified Cuban, believed to be a member of a group of wealthy anti-CASTRO Cubans, members of which have talked to Mr. Pawley recently about their plans for sabotage of the coming sugar harvest as reported in UMMA-32 dated 2 October. The second Cuban was AMPACA-1, a Cuban Journalist of operational interest to Station Habana, and a separate memorandum is submitted on that conversation.
10
+
11
+ 2. The unidentified Cuban, who had somewhat of an accent and spoke indistinctly, was difficult to understand. He mentioned a meeting "with some of our people who came up from Cuba" to discuss plans. He said his group had been contacted by a representative of General Jose Eleutorio PEDRAZA, leader of Cuban revolutionary groups in the Dominican Republic, who wanted to know what action their group had taken and was told that they had a plan "to start sabotage". The Cuban said the PEDRAZA representative said their group (the PEDRAZA group) had four provinces organized in Cuba, mentioning Camaguey and Santa Clara, and that they had two provinces yet to be organized - Habana and Matanzas.
12
+
13
+ 3. The Cuban said his group needed two things - moral backing and moneys he pointed out that Cubans in Cuba are afraid to start an underground movement, and there was no way to raise funds, etc. Mr. Pawley gave him no encouragement on the money angle, saying that even if there were Americans willing to run the risk of becoming involved in Cuban revolutionary activities by furnishing money for such a movement, which he doubted, he felt that at the present time it would be like "putting money down a rat-hole" for the following reasons: (1) there is no unity among the anti-CASTRO groups, and there are at least 10 that he knows of who are working absolutely independently of one another; and (2) CASTRO is in control of the country and has the support of a large number of Cubans, especially the under-privileged. Mr. Pawley said he felt the Cuban economic situation was worsening fast and that if it gets bad enough, a large number of Cubans will turn on CASTRO, but until that time comes it would be dangerous to try to organize a revolutionary movement.
14
+
15
+ # SECRET
16
+
17
+ 4. Mr. Pawley asked the Cuban if his group felt they had moral support of the U. S. and the Cuban replied that they wanted U. S. moral support but whether they had it or not, they felt they were obliged to carry through with their plans. Mr. Pawley said he didn't know what to tell him - would have to think about it and see if anything could be done. He said, "having been connected with the U. S. Government, I can't get involved in revolutionary movements". Also said he would hate to see the Dominican Government get involved, which might be difficult to avoid with so many Cuban exiles there, but commented that he understood "the Dominican Government hasn't given them a dime".
18
+
19
+ # SECRET
20
+
21
+ Martha Tharpe
22
+ WH/III/CARIB
space/space/jfk_text/104-10049-10375.md ADDED
@@ -0,0 +1,58 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ 2025 RELEASE UNDER THE PRESIDENT JOHN F. KENNEDY ASSASSINATION RECORDS ACT OF 1992
2
+
3
+ AIR
4
+ (SPECIFY AIR OR SEA POUCH)
5
+
6
+ MICROFILMED
7
+ JUL 1 1983
8
+
9
+ DOC: SECRET
10
+ CLASSIFICATION
11
+
12
+ DISPATCH NO
13
+ HDCA-1382
14
+
15
+ TO : Chief, WHD DATE: 12 June 1958
16
+ FROM : Chief of Station, Ciudad Trujillo
17
+ SUBJECT: GENERAL- Operational
18
+
19
+ SPECIFIC PAWLEY Business Interests in the Dominican Republic
20
+ ACTION REQUIRED: For info only.
21
+
22
+ 1. In addition to minerals exploitation in which Mr. William
23
+ D. PAWLEY has substantial investments, negotiations are being concluded
24
+ for the purchase by PAWLEY of the Hotel Hamaca in Boca Chica, a resort
25
+ town near the almost-completed new international airport, about 30 km
26
+ east of Ciudad Trujillo.
27
+
28
+ 2. Another activity which is kept very much under wraps is the
29
+ concession granted PAWLEY for procurement and world-wide sale of all
30
+ new issues of Dominican postage stamps. This activity is managed by
31
+ Edward P. PAWLEY, brother of William, whose office is in the Dominican
32
+ post office building.
33
+ D. Pawley
34
+
35
+ 3. The source (considered sensitive) of the information in para-
36
+ graph 2. is Mrs. Nora BRITZIUS, a U. S. citizen employed by PAWLEY
37
+ in the stamp business. The source volunteered the information on a
38
+ very confidential basis to Helene I. DAHLERUP at a social gathering.
39
+
40
+ Edward F. Stove
41
+ EDWARD F. STONESET
42
+
43
+ 10 June 1958
44
+ Distribution:
45
+ 3 - Hqs.
46
+
47
+ INDEX
48
+
49
+ CS COPY
50
+
51
+ CS COPY
52
+ SECRET
53
+ CLASSIFICATION
54
+
55
+ 12 June 58
56
+ 201-77378
57
+
58
+ D00708
space/space/jfk_text/104-10051-10106.md ADDED
@@ -0,0 +1,40 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # 2025 RELEASE UNDER THE PRESIDENT JOHN F. KENNEDY ASSASSINATION RECORDS ACT OF 1992
2
+
3
+ UNITED STATES GOVERNMENT
4
+ Memorandum
5
+
6
+ **TO**: Files
7
+ **DATE**: 29 January 1954
8
+
9
+ **FROM**: M. D. Stevens
10
+
11
+ **SUBJECT**: THE LEE HARVEY OSWALD CASE #351164
12
+
13
+ 1. According to a newspaper column of "Allen and Scott" in the Chicago American of 6 December 1963, on the OSWALD Case, Abram CHAYES, Legal Officer of the State Department, was one of two persons immediately responsible for OSWALD's being permitted to return to the United States from the Soviet Union in June 1962. The other individual named was Llewellyn THOMPSON, the then Ambassador to Russia. Another said to have been involved in the handling of OSWALD's case was Sammuel WISE, Counsel of the American Embassy in Moscow.
14
+
15
+ 2. Abram CHAYES, #352234, who as of 16 February 1961 was described as "the new Counsel in State", was granted Security approval for liaison contact with J. Foster COLLINS (in the office of the Chief of the Covert Action Staff) on 6 March 1961. The request for CHAYES' clearance was a "Blanket" request to permit discussion with him of NSC 5412/2 matters on a need-to-know basis.
16
+
17
+ 3. In September 1961 there was a White House namecheck request on CHAYES wife Antonia (Toni) Leigh CHAYES, nee: HANDLER.
18
+
19
+ 4. In March 1962, CHAYES was granted a renewal of his liaison contact clearance with C/CA on a continuing basis. This time his contact was Archibald ROOSEVELT, Jr.
20
+
21
+ 5. On 10 February 1962, HUMAN EVENTS reported as follows with reference to CHAYES:
22
+
23
+ "SOFT ON COMMUNISM: Representative Francis E. Walter (R.-Pa.), Chairman of the House Committee on Un-American Activities, has scored the new State Department regulations on passports, claiming they would allow Reds denied passports to "rifle freely the confidential files of the FBI, the CIA and other investigative agencies." The man behind the new regulations, which Walter claims violate the Internal Security Act of 1950, is reportedly State's chief legal officer, Abram Chayes. Chayes, a Kennedy appointee, is an ex-Harvard professor who was Chester Bowles' top legal adviser when Bowles was Governor of Connecticut. Walter has introduced legislation to remedy the new passport regulations."
24
+
25
+ Document Number 1271-1029
26
+
27
+ for FOIA Review on FED 1977
28
+
29
+ -2-
30
+
31
+ 6. Samuel WISE, "Counsel in the American Embassy in Moscow" who is referred to above, may well be Samuel Griffin WISE Jr., #74574, SD & SSD, who apparently was once a contract employee on AEACTIVE. The State Department reviewed WISE's file on 2 June 1954; and as of September 1962 a Samuel G. WISE was Second Secretary of the American Embassy in Moscow. At that time WISE advised in a cable to the State Department
32
+ "[DAVIS case is very similar to that of OSWALD; and he, like OSWALD, lived in the Soviet Union for two years after his defection and prior to making application for return to the United States.]"
33
+
34
+ 7. WISE was an applicant for CIA employment in early 1953 and was security approved subject to polygraph on 11 August 1953. He did not enter on duty and in September 1953 the office which had been interested in him was "no longer interested". On 13 November 1953, WISE was granted a CSA to permit his use as a contract employee on AEACTIVE in New York City. His CSA was cancelled on 24 March 1958.
35
+
36
+ 8. WISE was named as a friend of William Orville MUNSELL, #61693-DL, during an investigation of the latter for possible CIA employment in 1952. WISE, according to MUNSELL's landlady and social acquaintance in Washington, D.C. during the period of about a year which ended in April 1952, was the only person she knew by name with whom MUNSELL was friendly. According to the informant, WISE was a student at Columbia University whose address was 423 Furnald Hall. MUNSELL was Security disapproved for CIA employment in June 1952 because of his close association on a professional and social basis, while attending Denver University from 1946 to 1951, with persons of questionable loyality. In November 1954, MUNSELL was of interest to project FJALIVE with reference to assignment to Dhahran, Saudi Arabia; however, the interested office withdrew their request on him, after Security advised of the derogatory information regarding him.
37
+
38
+ 9. WISE from 1951 to 1954 attended Scarsdale High School in Scarsdale, New York, which was attacked by a Citizen's Group, which alleged Communist influence in the school system. He had several questionable associates in addition to MUNSELL.
39
+
40
+ M. D. Stevens
space/space/jfk_text/104-10051-10170.md ADDED
@@ -0,0 +1,962 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ 104-10051-10170
2
+ 2025 RELEASE UNDER THE PRESIDENT JOHN F. KENNEDY ASSASSINATION RECORDS ACT OF 1992
3
+
4
+ SECRET
5
+
6
+ ANNEX B
7
+ THE 201 SYSTEM
8
+
9
+ DOHB 70-1-1
10
+ CHAPTER III
11
+ 15 November 1974
12
+
13
+ Rescission: Annex B of Chapter III, CSHB 70-1-1, 27 October 1966
14
+
15
+ 1. INTRODUCTION
16
+
17
+ The 201 system provides a method for identifying a person of specific in-
18
+ terest to the Operations Directorate and for controlling and filing all pertinent
19
+ information about that person. The system also provides a means for identifying
20
+ subjects of 201 files from various categories of information about them and for
21
+ producing lisits of 201 personalities according to those categories. Only a rela-
22
+ tively small number of personalities indexed are of sufficient interest to justify
23
+ opening a 201 dossier. These are normally subjects of extensive reporting and
24
+ CI investigation, prospective agents and sources, members of groups and organi-
25
+ zations of continuing target interest, or subjects on whom a volume of corre-
26
+ spondence has accumulated.
27
+
28
+ 2. THE 201 SYSTEM
29
+
30
+ The principal features of the 201 system are:
31
+
32
+ a. The 201 Number: a unique number, i.e., 201-1234567, assigned to each
33
+ individual in the system to serve as identifying file number for reporting on that
34
+ individual.
35
+
36
+ b. The 201 Dossier: the official file containing the 201 opening form (Form
37
+ 831) and all biographic reporting on and references to the individual, i.e., per-
38
+ sonal history, current status, and prospects.
39
+
40
+ c. The Master 201 Record: a machine record generated by the opening of
41
+ a 201 file. This record produces the master 201 reference for the Main Index and
42
+ stores the pertinent information which may later be retrieved for special listings.
43
+
44
+ d. Main Index Master 201 Reference: this reference, printed in reply to an
45
+ Index Search Request, is printed as illustrated below. When data are absent
46
+ within the record, succeeding data items or lines will be moved up and the ref-
47
+ erence consolidated.
48
+
49
+ 23
50
+
51
+ SECRET
52
+
53
+ 14-00000
54
+
55
+ SECRET
56
+
57
+ DOHB 70-1-1
58
+ CHAPTER III, ANNEX B
59
+ 15 November 1974
60
+
61
+ ① 0002 CROIX, WILLIAM PENDLETON
62
+ ② SEX M DOB 12 APR 26
63
+ ③ CIT GERM
64
+ ④ POB GERM, BERLIN ⑤
65
+ ⑤ OCC PHARMACIST
66
+ ⑥ OCC CODE CHEM
67
+ ⑦ REF AACD-12345, 20 JUN 53
68
+ SUBJECT RECENTLY ATTENDED THE SEVENTEENTH ANNUAL
69
+ ⑦ CONFERENCE OF THE INTERNATIONAL ASSOCIATION OF CHEMISTS
70
+ AND PHARMACISTS HELD IN MUNICH, GERMANY FROM 22 THROUGH
71
+ 29 OCTOBER.
72
+ ⑧ 201-0032671*
73
+ ⑨ TYPE NAME T-
74
+ ⑩ OI CODES AA XX-10
75
+ ⑪ RCD DATE 53
76
+
77
+ ⑬ 30 NOV 70
78
+ ⑭ 00833555
79
+
80
+ Information About Subject
81
+ 1. Sequence Number and Name
82
+ 2. Sex and Date of Birth
83
+ 3. Citizenship
84
+ 4. Place of Birth
85
+ 5. Occupation
86
+ 6. Occupation Code
87
+ 7. Text
88
+
89
+ Document Reference Data Group
90
+ 8. 201 Number
91
+ 9. Name Type Indicator
92
+ 10. OI Codes
93
+ 11. Record Date (year only)
94
+ 12. Reference
95
+
96
+ ISG Control Information
97
+ 13. Date of latest update of the record
98
+ 14. STAR Index Record Number
99
+
100
+ 24
101
+ SECRET
102
+
103
+ 14-00000
104
+
105
+ SECRET
106
+
107
+ DOHB 70-1-1
108
+ CHAPTER III, ANNEX B
109
+ 15 November 1974
110
+
111
+ e. Ol Code: a two letter symbol used in conjunction with the 201 per-
112
+ sonality records in the 201 system to record the association of an individual
113
+ with organizations or activities of operational interest. OI codes cover intelli-
114
+ gence and security service affiliation, whether staff or agent, or known or
115
+ suspect, as well as activities of DDO interest. There are two categories of OI
116
+ codes for use by components:
117
+
118
+ (1) general OI codes (Attachment 4)
119
+
120
+ (2) OI codes assigned to a specific component for intelligence services
121
+ or other specific organizations.
122
+
123
+ À component may request an OI code be established by submitting a mem-
124
+ orandum to the DDO/RMO through the component Records Management
125
+ Officer.
126
+
127
+ A 201 personality may be assigned two OI codes. An OI code may be assigned
128
+ when the 201 Personality File Action Request (Form 831) is initiated (see
129
+ paragraph 3b below) by filling in Box 13 or a code may be assigned or added
130
+ at a later date by a Form 831 amendment.
131
+
132
+ The 201 system has the capability of producing machine listings of 201
133
+ personalities by Ol codes. For example, if an OI code has been opened for the
134
+ security service of a certain country a listing may be compiled of all members
135
+ of that service.
136
+
137
+ f. 201 Machine Lists: produced from the mechanized 201 Index, based on
138
+ names or other identifying information of personalities on whom 201 dossiers
139
+ exist.
140
+
141
+ 3. OPENING A 201 DOSSIER
142
+
143
+ a. General
144
+
145
+ The opening of a 201 dossier is the prerogative of an operational com-
146
+ ponent, in coordination with the Information Services Group. An opening creates
147
+ a master 201 record. Changes to the master record and the occasional closing
148
+ of a 201 dossier are controlled jointly by the desks and ISG. 201 dossiers may be
149
+ opened on persons who meet the carding criteria described in Chapter II of this
150
+ handbook, when there is a reasonable expectation that additional information
151
+ will be acquired and filed in such a dossier. Generally dossiers are opened on
152
+ persons about whom counterintelligence information is being reported, and per-
153
+ sons of operational interest to the Operations Directorate, specifically those
154
+ persons for whom provisional operational approvals and operational approvals
155
+ are requested (see exception below). 201 files are not to be opened on staff
156
+ employees, staff agents and most categories of contract employees. Files on
157
+
158
+ 25
159
+ SECRET
160
+
161
+ 14-00000
162
+
163
+ SECRET
164
+
165
+ DOHB 70-1-1
166
+ CHAPTER III, ANNEX B
167
+ 15 November 1974
168
+
169
+ persons who are only of local interest to a field station or Headquarters desk
170
+ and on whom no DDO records correspondence exists are not a part of the DDO
171
+ records system and are to be maintained by that unit. Some desks levy require-
172
+ ments on ISG for automatic 201 openings on certain categories of persons whose
173
+ names appear in incoming dispatches. These are listed in Attachment 2. 201
174
+ dossiers should be opened in the following categories:
175
+
176
+ (1) Subjects of provisional operational approval and operational ap-
177
+ proval requests. However, a file need not be opened when a POA is requested
178
+ for persons being trained for a foreign liaison service and who are of opera-
179
+ tional interest for training purposes only.
180
+
181
+ (2) Persons for whom the field requests a 201 opening.
182
+
183
+ (3) MHFIXTURE personalities: bonafide diplomats of other than
184
+ denied area countries, in close association with staff personnel.
185
+
186
+ (4) Subjects of a Personal Record Questionnaire Part I.
187
+
188
+ (5) Persons on whom a Main Index search reveals information in five
189
+ or more documents (see-DOI 70-20). -
190
+
191
+ (6) Subjects of Interagency Source Register memoranda from LSN/
192
+ ISR (opened only by IP/RMS).
193
+
194
+ b. Requesting a 201 File Opening
195
+
196
+ Headquarters desks may open a 201 file by filling out and submitting
197
+ a 201 Personality File Action Request (Form 831) to the Records Main-
198
+ tenance Section (IP/RMS). Form 831 is also used to create or amend the
199
+ master 201 record and 201 machine listings and to register the assign-
200
+ ment of a cryptonym to a 201 personality. Attachment 3 consists of sample
201
+ 201 Personality File Action Requests for opening and amending 201's. A field
202
+ station may request the opening of a 201. file by writing 201- in the Head-
203
+ quarters file or cross-reference box on the dispatch form and/or after the
204
+ subject's name in the body of the dispatch. A telepouch request for a 201 opening
205
+ is made by indicating 201- in the file number line. A cable request is made by
206
+ placing 201- after the term "File" on the last line of the transmission. IP/AN
207
+ will open 201 files as requested by dispatch or telepouch but it is the responsi-
208
+ bility of the desk to respond to cable requests. Field stations are notified of
209
+ 201 openings through receipt of the field master 201 record.
210
+
211
+ 26
212
+ SECRET
213
+
214
+ 14-00000
215
+
216
+ SECRET
217
+
218
+ DOHB 70-1-1
219
+ CHAPTER III, ANNEX B
220
+ 15 November 1974
221
+
222
+ 4. CONTENTS OF THE DOSSIER
223
+
224
+ Information about a 201 personality should be filed or cross-referenced into
225
+ his dossier. When additional information is discovered on a 201 subject through
226
+ a name trace or other process, i.e., review of predecessor documents, it must
227
+ be consolidated into his personality dossier. See DOI 70-20 for consolidation
228
+ procedures.
229
+
230
+ Material which is filed in the dossier includes but is not limited to:
231
+
232
+ a. 201 Personality File Action Request (Form 831).
233
+
234
+ b. Biographic information including photographs, fingerprints, and
235
+ handwriting samples.
236
+
237
+ c. Personal Record Questionnaire Parts I and II.
238
+
239
+ d. Operational and other security approvals.
240
+
241
+ e. Name check replies, requests, clearances, and approvals.
242
+
243
+ f. Acknowledgement of pseudonym.
244
+
245
+ g. 201 personality assessments and evaluations.
246
+
247
+ h. Copy of contract and termination papers.
248
+
249
+ i. Secrecy agreement.
250
+
251
+ j. Agent Duty Status Report.
252
+
253
+ k. Training and evaluation.
254
+
255
+ 1. SGSWIRL report.
256
+
257
+ m. Newspaper clippings.
258
+
259
+ n. Any information which helps provide a better understanding of the
260
+ subject and our interest in him; this may include operational reporting.
261
+
262
+ 5. ΜΑΙΝΤΕΝANCE OF 201 DOSSIERS
263
+
264
+ The 201 personality dossier contains, in document date order, papers which
265
+ have been made a part of the Central Records System as well as those which
266
+ have not. Record documents may range from newspaper or magazine articlės
267
+ on the subject to finance and other administrative papers.
268
+
269
+ 26.1
270
+ SECRET
271
+
272
+ 14-00000
273
+
274
+ SECRET
275
+
276
+ DOHB 70-1-1
277
+ CHAPTER III, ANNEX B
278
+ 15 November 1974
279
+
280
+ a. Purging
281
+ Purging a 201 dossier is the responsibility of the desk officer. It requires
282
+ discrimination in recognizing operationally useful material, rather than the
283
+ simple distinction between official and unofficial papers; it will therefore take
284
+ place under the supervision of a Records Officer. Purging should be done
285
+ periodically. A 201 dossier being forwarded to Central Files for retention should
286
+ be purged. A 201 dossier should be purged of the following:
287
+
288
+ (1) Duplicate material, i.e., exact copy(s) of a document.
289
+
290
+ (2) Name trace form (Form 362) unless it has been the basis for
291
+ the opening.
292
+
293
+ (3) All abstract slips.
294
+
295
+ (4) All document restriction notices (Form 1884)..
296
+
297
+ (5) The disseminated version of positive intelligence information if
298
+ a copy of the raw report is contained in the 201 file; the dissemination number
299
+ then must be transferred to the first page of the raw report.
300
+
301
+ (6) Routing slips, routing and record sheets (Form 610) and dispatch
302
+ cover sheets unless there are remarks such as coordinations or comments.
303
+
304
+ (7) Record copy-doeuments which only repeat-substantive information
305
+ contained in other documents in the file; authorization for destruction is
306
+ by the Records Officer.
307
+
308
+ (8) Top Secret documents are not to be retained in a 201 dossier
309
+ forwarded to Central Files; the document must be downgraded for retention
310
+ in the 201 dossier. To downgrade a Top Secret document, an authorized
311
+ officer in the originating office or the Records Officer having jurisdiction
312
+ over the contents of the material must possess Top Secret classification
313
+ authority. If the document cannot be downgraded the file should be retained
314
+ at the desk or the copy of the TS document should be removed, retained
315
+ in a desk TS file or forwarded to the Top Secret Control Officer, and a
316
+ cross-reference sheet (Form 867) placed in the 201 file giving the location
317
+ of the TS document.
318
+
319
+ (9) Deferred documents (see 5b(2)).
320
+
321
+ b. Maintenance Procedures
322
+
323
+ (1) All material in a 201 dossier will be filed in document date order.
324
+ In the case of document attachments which have been classified into a 201
325
+
326
+ 26.2
327
+ SECRET
328
+
329
+ 14-00000
330
+
331
+ SECRET
332
+
333
+ DOHB 70-1-1
334
+ CHAPTER III, ANNEX B
335
+ 15 November 1974
336
+
337
+ dossier and separated from the basic document by the assignment of a slash
338
+ number, the attachment will be filed by the date of the basic document.
339
+
340
+ (2) Deferred documents will not be filed in a 201 dossier. If they are
341
+ to be retained in the dossier they should be sent to IP/RMS for classification
342
+ into that 201.
343
+
344
+ (3) Field index cards (held by some desks) and area desk cards may
345
+ be retained in the 201 as part of a consolidation procedure. These cards
346
+ should be mounted on a full-size sheet of paper for filing in the 201..
347
+
348
+ (4) A 201 dossier previously opened on a person who becomes a staff
349
+ employee and which contains Record Copy documents will be restricted to
350
+ the ISG/DIP unless the desk retains the restriction. The dossier should be
351
+ closed if there are no Record Copy documents in it.
352
+
353
+ (5) A 201 opened in pseudonym should be consolidated into the true
354
+ name 201 if one exists or converted to the true name.
355
+
356
+ (6) Field and duplicate (shadow) 201 files no longer of active interest
357
+ should be incorporated into the official 201 after the duplicate material
358
+ has been purged by the desk officer and the remaining information classified
359
+ to that 201 by the Analysis Section (IP/AN).
360
+
361
+ (7) Any document with a predecessor organization cover sheet or an
362
+ OPC (Office of Policy Coordination) cover sheet from the Archives and
363
+ Disposition Section (IP/ARD) must be returned to IP/ARD for processing
364
+ to the 201.
365
+
366
+ (8) Desk memoranda (with or without a document source number)
367
+ containing substantive or derogatory information on the subject of the 201
368
+ should be sent to. IP/AN to be classified officially into the 201 file.
369
+
370
+ (9) An attachment which should be separated from its basic document
371
+ for inclusion in a 201 personality dossier will be forwarded with the basic
372
+ document to IP/AN for processing into the 201.
373
+
374
+ (10) To retain the P&L, RYBAT, or KAPOK sensitivity of a document
375
+ remaining in a 201 dossier being retired to Central Files, place that document
376
+ in an envelope sealed with black tape (see DOI 70-17). Any RYBAT, P&L,
377
+ or KAPOK document sent to Central Files not in a black-taped envelope will
378
+ automatically be handled as desensitized. A black-taped envelope may con-
379
+ tain only one document and must be filed in chronological order within the
380
+ file. If there are numerous documents of this type the desk officer may black-
381
+ tape the entire dossier rather than individual documents (see DOI 70-10).
382
+
383
+ 26.3
384
+ SECRET
385
+
386
+ 14-00000
387
+
388
+ SECRET
389
+
390
+ DOHB 70-1-1
391
+ CHAPTER III, ANNEX B
392
+ 15 November 1974
393
+
394
+ Black-taped dossiers or dossiers with black-taped documents will be
395
+ handled as restricted dossiers.
396
+
397
+ (11) An inactive 201 dossier or an inactive volume of a large 201
398
+ dossier on permanent charge should be returned to Central Files under a
399
+ Routing and Record Sheet with the notation shown below..
400
+
401
+ UNCLASSIFIED
402
+ INTERNAL
403
+ USE ONLY
404
+ CONFIDENTIAL
405
+ SECRET
406
+
407
+ ROUTING AND RECORD SHEET
408
+
409
+ FROM
410
+ SUBJECT:
411
+ TRANSMITTAL OF INACTIVE 201 DOSSIERS
412
+ TO
413
+ DATE
414
+ BUILDING
415
+
416
+ BUILDING
417
+
418
+ NO
419
+ DATE
420
+
421
+ building)
422
+
423
+ OFFICER'S
424
+ INITIALS
425
+ COMMENTS (Humber cach comment to show from whos
426
+ who Draw a line avess amater auch comment
427
+ BECOMA PORWARDED
428
+ 1.
429
+ IP/Files
430
+ GC-52
431
+ (For guidance see CSAB 70-1-1,
432
+ Chapter III, Annex В.)
433
+
434
+ 2
435
+ 3.
436
+ Volume(s) of
437
+ volume(s)
438
+ of 201-
439
+ 7.
440
+ 10.
441
+ Restricted Dossier
442
+ (Attach Form 2021 to
443
+ Dossier)
444
+
445
+ Non-Restricted Dossier
446
+ For Split Charge Dossiers:
447
+ 11.
448
+ All documents prior to
449
+
450
+ :
451
+ (date)
452
+ 12.
453
+ forwarded to IP/Files. All
454
+ 13.
455
+ 14.
456
+ 15.
457
+ documents after
458
+
459
+ (date)
460
+
461
+ retained at
462
+ desk.
463
+
464
+ CL, BY: 007622
465
+ FORM
466
+ 8-74
467
+ BIOE
468
+ SECRET
469
+ CONFIDENTIAL
470
+ INTERNAL
471
+ USE ONLY
472
+ UNCLASSIFIED
473
+ 26.4
474
+ SECRET
475
+
476
+ 14-00000
477
+
478
+ SECRET
479
+ DOHB 70-1-1
480
+ CHAPTER III, ANNEX B
481
+ 15 November 1974
482
+
483
+ 6. 201 DOSSIER CHARGES
484
+
485
+ A 201 dossier may be kept on permanent charge at the desk during any
486
+ period of active interest. If the dossier is transferred to another desk, the desk
487
+ officer who is transferring the dossier must notify Central Files of the transfer.
488
+ Central Files will then send the Notice of Transfer of Document or File Account-
489
+ ability (Form 2977) to the new action desk officer.
490
+
491
+ TO:
492
+ NAME
493
+
494
+ CONFIDENTIAL
495
+ (When yilled In)
496
+ NOTICE OF TRANSFER OF DOCUMENT OR FILE ACCOUNTABILITY
497
+ BADGE
498
+ COMPONENT
499
+ ROOM
500
+ TUBE
501
+ EXT.
502
+
503
+ This is to notify you that accountability for the document(s) and/or file(s) cited
504
+ below has been transferred to you by:
505
+
506
+ DANE
507
+ BADSE
508
+ COMPONENT
509
+ Accordingly, IP's records now reflect you as the custodian. Please contact IP/Files,
510
+ Ext. 4362, if you have any questions regarding this transfer.
511
+
512
+ SUBJECT-OF REQUEST
513
+ PORN 2977 USE PREVIOUS EDITIONS
514
+ 1-73
515
+ FILE NO
516
+ DOC. SYMBOL & NUNBER DOC. DATE
517
+ CONFIDENTIAL
518
+ DATE
519
+ OF
520
+ TRANSFER
521
+ CHARGE
522
+ PERM
523
+ OR TENP
524
+ REG.NO.
525
+ CL. BY: 007622
526
+
527
+ The new action desk officer must then fill out a 201 Personality File Action
528
+ Request (Form 813) to change the action desk designation to insure that the
529
+ 201 personality will be included in the Headquarters and field machine listings
530
+ for his component.
531
+
532
+ 7. RESTRICTED DOSSIERS
533
+
534
+ a. Access to a sensitive 201 dossier may be restricted by holding the file at the
535
+ desk or placing it on restriction in Central Files.
536
+
537
+ (1) The dossier may be restricted by checking Box 2 on the 201
538
+ Personality File Action Request (Form 831) when the file is opened.
539
+
540
+ 26.5
541
+ SECRET
542
+
543
+ 14-00000
544
+
545
+ SECRET
546
+
547
+ DOHB 70-1-1
548
+ CHAPTER III, ANNEX B
549
+ 15 November 1974
550
+
551
+ (2) The dossier may be restricted by holding it on permanent charge
552
+ from Central Files. (Note: To maintain the restriction of a dossier being
553
+ returned to Central Files for retention, a File Restriction Notice (Form
554
+ 2021) must accompany the dossier.)
555
+
556
+ (3) The dossier may be restricted and held in Central Files by sub-
557
+ mitting a File Restriction Notice (Form 2021).
558
+
559
+ CONFIDENTIAL
560
+ (When Filled In)
561
+
562
+ TO
563
+ DATE
564
+ INITIALS
565
+
566
+ IP/FI
567
+ GC-52 TUBE DT-6
568
+
569
+ FILE RESTRICTION NOTICE
570
+ IP/DCU
571
+ GC-40 TUBE HT-4
572
+
573
+ ACTION DESK: 1.
574
+ To restrict a file, complete Section A (signature of R.O. not
575
+ necessary).
576
+ 2.
577
+ To remove a restriction, complete Section B (R.O. signature
578
+ necessary).
579
+
580
+ SECTION A
581
+ FILE NUMBER
582
+ RESTRICT TO: (Use country or non-country code number. See CSI 70-28).
583
+ RESTRICTED BY:
584
+ COMPONENT:
585
+ (Name)
586
+ Date:
587
+
588
+ SECTION B
589
+ REMOVE RESTRICTION (AUTHORIZED BY)
590
+ R.O. No.
591
+ COMPONENT:
592
+ Date:
593
+
594
+ FORM
595
+ 2-73 2021 EDITIONS
596
+
597
+ USE PREVIOUS
598
+ CONFIDENTIAL
599
+ 8-2, IMPOET CL BY: 067622
600
+ (13)
601
+
602
+ ... b. Access to a restricted dossier located in Central Files is limited to the
603
+ personnel of the restricting desk or persons authorized by that desk. Any request
604
+ for the charge of a restricted dossier or any document within a restricted dossier
605
+ held in Central Files will be forwarded with the entire dossier and a multiple-
606
+ routed cover sheet to the restricting desk. This desk may then forward the file
607
+ to the requester or deny the request and return the dossier to Central Files. The
608
+ desk will notify the requester of a denial.
609
+
610
+ c. Anyone requesting a restricted dossier, or a document within a restricted
611
+ dossier, permanently or temporarily charged to a desk, will be referred to that
612
+ desk by Central Files.
613
+
614
+ 26.6
615
+ SECRET
616
+
617
+ 14-00000
618
+
619
+ SECRET
620
+
621
+ DOHB 70-1-1
622
+ CHAPTER III, ANNEX B
623
+ 15 November 1974
624
+
625
+ 8. REQUESTS FOR INFORMATION ON 201 PERSONALITIES
626
+
627
+ The Automated Index Section (IP/AIS) will provide the identity of the
628
+ subject of a 201 number unless the 201 file is restricted, in which case the
629
+ requester will be referred to the restricting desk.
630
+
631
+ IP/AIS will also provide the 201 number assigned to a name, unless the 201
632
+ file is restricted, or state that there is no 201 number assigned. Requesters should
633
+ supply identifying information whenever available for each name submitted.
634
+
635
+ Requests pertaining to five or fewer names or numbers may be made by
636
+ telephone by calling the IP/AIS red line extension; IP/AIS will provide the
637
+ information by return call to the requester's extension as listed in the Badge
638
+ Table. Requests for more than five names or numbers must be listed and sent
639
+ by tube or courier to IP/AIS; IP/AIS will reply by return mail.
640
+
641
+ 9. 201 DOSSIER CANCELLATION
642
+
643
+ A 201 file may be authorized for cancellation by a Records Officer, after
644
+ appropriate coordination. The file should be forwarded to IP/RMS which will
645
+ destroy the folder and the cards leading to it and will remove the name and
646
+ number from-machine lists. Any Record Copy document contained in the folder
647
+ will be reclassified to another appropriate file or sent to the Destruction Unit
648
+ (IP/DU) as directed by the desk Records Officer.
649
+
650
+ 10. 201 MACHINE LISTINGS
651
+
652
+ Machine listings provide field stations and Headquarters desks with names
653
+ and 201 numbers in the requester's particular geographic or functional area of
654
+ interest. If a component wishes to exclude a sensitive 201 personality from its
655
+ alphabetic, numeric, and cryptonym listings, this may be done when opening
656
+ the 201 or later by a 201 amendment. On the 201 Personality File Action Request
657
+ (Form 831) leave the country of location (Box 15) and interest desk (Box 16)
658
+ blank, use the non-country code 900 in the action box (Box 14), and indicate
659
+ permanent charge to the responsible desk. The only listing which will include the
660
+ 201 number is the IP/201 record for the Vital Records program. 201 listings are
661
+ categorized as standard or nonstandard and as scheduled or special.
662
+
663
+ a. Standard Listings
664
+
665
+ Issued semi-annually to Headquarters and the field; based on a component's
666
+ interest as indicated in the "Action Desk," "Country of Location," and "Interest
667
+
668
+ 26.7
669
+ SECRET
670
+
671
+ 14-00000
672
+
673
+ SECRET
674
+ DOHB 70-1-1
675
+ CHAPTER III, ANNEX B
676
+ 15 November 1974
677
+
678
+ Desk" blocks on the 201 Personality File Action Request (Form 831). The
679
+ standard listings available are:
680
+
681
+ (1) Alphabetical by surname, leading to a 201 number;
682
+
683
+ (2) Alphabetical by given name, leading to a 201 number;
684
+
685
+ (3) Alphabetical by cryptonym, leading to a 201 number;
686
+
687
+ (4) Numerical, leading to a surname;
688
+
689
+ (5) Numerical, leading to a cryptonym.
690
+
691
+ 201 SURNAME ALPHA LIST
692
+ 03 ICT 1973
693
+
694
+ SECRET/ORGANIZATION INTERNAL USE ONLY
695
+ CHEN, SHAI-1 7115/1343/9030/
696
+ CHEN, SHOU-1 7115/1343/0001/
697
+ CIPAN, SHIU 1. /7115/1343/0001/
698
+ CHEN, SHCU-JFN 16774/1108/0038
699
+ CHEN, SHOU MET
700
+ NAME
701
+
702
+ TYPE DOR
703
+ CHEN, SU MING 17109/1343/690
704
+ CHEN SHE SHEH /7115/1103/001
705
+ CHEN, SHCU-145
706
+ CHFY, SHE-15G 7115/1109/1
707
+ CHEN SHCU 126 /0701/1343/LPOT
708
+ CHEN, ST-VES 77115/1103/495
709
+ CN, SPC
710
+ CHEY, SHU-GA
711
+ CIFY. SHU-CHEY 17115/2895/6930
712
+ CIPE SHY CHPAN 7115/3219/122
713
+ CILIEN, SHU-CHUAN 7115/2995/2
714
+ CHEN, SHU CO/7115/2985/2797
715
+ COFA, SHU FEA
716
+ CHEY, SHII HA 17115/2885/3185/
717
+ CHF, SHJ HSIANG /7115/2579/74
718
+ CFY, SH-51047115/2995/7
719
+ CHEN, SHU HS/7115/2895/8133-
720
+ CHI. SHU-HA
721
+ CFRND, SHII-1 47115/2205/5030/
722
+ CHEN, SHU KUET /7115/2295/2710
723
+ CHEN SHU LAV
724
+ CHEN, SHPI LIANG 77115/0547/009
725
+ CHER. STAI LI 17115/2579/2651/
726
+ CHIEN, SH-LING 17109/2973/010
727
+ CIF, SHU-1
728
+ CHEN, SHU 7115/2883/0589/
729
+ CHEPI. SHU-PAD 7115/?579/0202/
730
+ CHEN, SHU-SE/7115/2899/2773/
731
+ CHIEY, SH-50A/7115/2579/091
732
+ CHEN, SHU-TE 17115/2495/1795/
733
+ CHEN, SHU TEH /475/
734
+ 1.1. SHI5/0647/6639
735
+ CIPC75
736
+ CHPT, SL T21/7115/0647/0317/
737
+ CHPEN, SH-7115/2695/1031
738
+ CHPEN, SHU-YIN
739
+ CHEN, SH 14/7115/2895/5391/
740
+ CHIN SHI-474 /7115/2579/6992/
741
+ LEE MARIT
742
+ YR
743
+ 17JUL15
744
+ 24 JAN11
745
+ 04JAN19
746
+ 210CT08
747
+ 12 NOV22
748
+ 18MAR45
749
+ C41
750
+ BIRTHPLACE
751
+ CTRY CITY
752
+ CHIN, KWANGTUNG
753
+ CHIN, ANYOY
754
+ CHIN, FUKIEN, PROV.
755
+ CHIN, PANCIUPIA, PORT ARTH
756
+ CHIN, HUMAN
757
+ CUTIE CANTOY
758
+ OZSEP26 - CHIH, LIACAL PRO
759
+ 12JAN18
760
+ Hite FERIEN
761
+ CHIN, CANTON
762
+ CHTH, KLANGTHING PROV
763
+ OCC. CIT.
764
+ CHINT 0165401
765
+ 20101-1 01-2 ACT. LOC. ENT.
766
+ CECY CIRY CIRY
767
+ CHIN HX
768
+ DIPT 0230059
769
+ 0178653
770
+ CHIN CHIN
771
+ CHIN
772
+ BUSP CCOMP 0043751-
773
+ CHIN HK
774
+ CHIN? 0234629
775
+ CHAT
776
+ CHIN CUBA
777
+ 0179620
778
+ CHIN CHEN
779
+ CNAT 0069796
780
+ CHIN
781
+ RIPT CCON 0905390
782
+ CHEN MALT
783
+ ENGE CAAT 0832855
784
+ CHIK
785
+ GILK HK
786
+ CHINT 0130415
787
+ CHIR TAM
788
+ 09 JUN99
789
+ PROF CHINT 0040298
790
+ CHIN USA
791
+ 1905619
792
+ CNAF7 0052638
793
+ CHIN HWAL
794
+ 02 JUL 30
795
+ CHIN, KWANGTUNG PROV.
796
+ ARMY CHAT 0329328
797
+ CHIR TAIN
798
+ 19
799
+ NDV30
800
+ CIRC22
801
+ CHIN, MIJAN TANG TS
802
+ CHIN.PFILIU
803
+ CHIN? 0124438
804
+ TSEA CNAT
805
+ 0797335
806
+ CHIN MX
807
+ CHINT 0200223
808
+ CHEN
809
+ 0488577
810
+ CHIN ETH
811
+ CHIN, KHANGTUNG
812
+ CHIN? 0179621
813
+ CHIM CHIN
814
+ 10
815
+ 23FEROT
816
+ OSMAYLA
817
+ 30M4326
818
+ CHIN, FUKIEN
819
+ CHIN, KHANGTUNG
820
+ CHIN, FOCCHCH
821
+ CHIN? 0015759
822
+ CHIN
823
+ CCOM? 0073195
824
+ CHIN
825
+ CHIN? 0179622
826
+ CHIN CHIN
827
+ DIPT CCCM 0223161
828
+ CHIN CEY
829
+ OSFER 10
830
+ CHIN, HOPET
831
+ DIPT CHAT 083-150
832
+ CHIN USA
833
+ 27NOV23
834
+ CHIN, FANG CHANG
835
+ PROF CHIN? 0179673
836
+ CHEN CHIN
837
+ CHIN SHU LAV
838
+ R
839
+ CHIN
840
+ CIRCZE
841
+ CHEN
842
+ CCOM 0221072
843
+ DIPT CHIN? 0223162
844
+ CHEN CHIN
845
+ CHIM CHÍN
846
+ 25NDV20
847
+ CHIN, FERGSHUN
848
+ CHIN? 0179624
849
+ CHIN TAIW
850
+ 01 JUL 29
851
+ CHIN, KIANGSU
852
+ MILA CCON 0854450
853
+ CHIN LACS
854
+ 205620
855
+ CHIN, NSCAM-HSIEN, KIANGSU
856
+ CHAT 0096747
857
+ CHEY US
858
+ 15APR 30
859
+ CHIN.CHANGHAI
860
+ CMMO CHIN? 0179625
861
+ CH
862
+ CHIN CHIN
863
+ १९०६८19
864
+ CHIM, KHANGELING PROV.
865
+ CNAT? 0052638
866
+ CHEN HWAΣ
867
+ 10DEC26
868
+ CHEN, KHANGTUIG
869
+ CHIN? 0005119
870
+ CHER TAIW
871
+ 27JAN25
872
+ CHIP, FUXIEN PROV
873
+ CHIN? O103289-
874
+ CHIN CHIN
875
+ 210EC37
876
+ CHIN, SHANGHAI
877
+ GEOL CHIN? 076316
878
+ CHIN BU
879
+ 27MAP 20
880
+ CHIN, CHANG SHU
881
+ 0013991
882
+ CHIN
883
+ CHEN CHIN
884
+ CHEN CHA 19 7115/257/3842 ני ١١ ٢٠٠١٦/
885
+
886
+ CHINT
887
+ FIN
888
+ 05APR17
889
+ CHIN, PEIPING
890
+ 15JUNOG CHIN, FARG CILEN KW
891
+ 0200130
892
+ CHIN, HENG YANG HSIEN, HUN ARMY
893
+ 17/F439
894
+ CHEN. CIF BANG
895
+ INT
896
+ 0313010
897
+ 21APP 21
898
+ CHIN. SPΑΝΔΡΑΣ
899
+ CHINT G044010
900
+ V
901
+ 045+P2P
902
+ CHIN, 3/1CHWAN
903
+ CHIN? 0153927
904
+ CCOM 0767442
905
+ CC047 0093176
906
+ CHINT 0107336
907
+ CHIN? 0179626
908
+ ENAT 0347529
909
+ CHIN CHIN
910
+ CHIN UK
911
+
912
+ CHEN 7115/2579/2737/
913
+ CHEN, SH SH 129 /7115/0647/0317/
914
+ CHEN, SH-7115/2695/1031
915
+ CHEN, SHU-YIN
916
+ CHEN, SH 14/7115/2895/5391/
917
+ CHIN SHI-474 /7115/2579/6992/
918
+ AZFEROS
919
+ 110V00
920
+ CHIN, KARIGTING
921
+ V
922
+ CHINT 0144758
923
+ CHIN TAIN
924
+
925
+ CHIN, KHANG CICH
926
+
927
+ V
928
+ CHEN, SH 14/7115/2895/3842/
929
+
930
+ 0191320
931
+ CHEN
932
+ CHIN
933
+ CHIN CHE او
934
+ CHIN
935
+
936
+ SECRET/ORGANIZATION INTERNAL USE DILY
937
+ EZ IMPORT CL BY 05477)
938
+ CHIN TAIN
939
+ PAGE
940
+ 150
941
+
942
+ 26.8
943
+ SECRET
944
+
945
+ 14-00000
946
+
947
+ SECRET
948
+ DOHB 70-1-1
949
+ CHAPTER III, ANNEX В
950
+ 15 November 1974
951
+
952
+ All standard listings are cumulative; previous editions must be destroyed
953
+ upon receipt of current editions. These listings are by their very nature extremely
954
+ sensitive compilations of information and must be given every possible safeguard.
955
+
956
+ b. Non-Standard Listings
957
+ Based on one or more of the following selection criteria:
958
+ (1) Country of location
959
+ (2) OI codes (organization and/or intelligence affiliation)
960
+ (3) Citizenship
961
+ (4) Year of birth (plus or minus a given number of years)
962
+ (
space/space/jfk_text/104-10052-10130.md ADDED
@@ -0,0 +1,201 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ DISPATCH
2
+
3
+ CLASSIFICATION
4
+ SECRET
5
+
6
+ TO
7
+ Chief, WHD
8
+
9
+ INFO:
10
+ Chief, SAS; Chief of Station, WAVE
11
+
12
+ FROM
13
+ Chief of Station, Mexico City
14
+
15
+ SUBJECT
16
+ Contact Report/ITAMII-9
17
+
18
+ Attached herewith are contact reports of meetings with LI TAMIL-9
19
+ on 17 and 29 July 1963.
20
+
21
+ Willard C CURTIS
22
+
23
+ Attachment:
24
+ Contact Report
25
+
26
+ Distribution:
27
+ 2 - C/WHD w/2/att
28
+ 2 - C/SAS w/a/att
29
+ 2 - COS WAVE w/2/att
30
+ 3 - Filos
31
+
32
+ DISPATCH SYMBOL AND NUMBER
33
+ HMMA 21849
34
+
35
+ CLASSIFICATION
36
+ SECRET
37
+
38
+ DATE
39
+ 31 July 1963
40
+
41
+ HOS FILE NUMBER
42
+ 201-330173
43
+
44
+ MEMORANDUM FOR THE
45
+ FROM
46
+ SUBJECT :
47
+ Lame
48
+ Meen 11-23 17 July 1963
49
+
50
+ 1. An unexpected meeting was held with LAME on 17
51
+ July -- Barker has a scheduled meeting with AMSAL-1 the Comercio
52
+ Ejercicio Nacional and/or Campo at 2100 hours was the plan --
53
+ Barker arrived at 2103 hours and just as --was about to enter
54
+ stopped by the corner of Gutenberg and Thiers -- he just drove up --
55
+ to make a call to
56
+ at a pay phone.
57
+ was supposed to meet
58
+ --stopped out of the broad
59
+ --but as B's car sailed --
60
+ said, in English, "Here I am."
61
+ - got in the car and drove away
62
+ --explained that he had called B's home --
63
+ understood the mystery was because --
64
+ 3's wife, he said
65
+ about 2030 hours and --
66
+ probably be back in about half an hour--LAME came to see who might be
67
+ (from the pay phone at Gutenberg
68
+ --saw Barker pass- Later spotted the car pull up by the corner in the
69
+ vicinity of Thiers usual purp
70
+ -later spotted the car pull up by the corner in the
71
+ Thiers usual purpose.
72
+ time, Barker had spoken with his -- His wife, be assumed
73
+ the word that the AME
74
+ -explained his presente
75
+ better pick up point -- LAME
76
+ the end
77
+ (partly true) --
78
+ was only co -- for
79
+ soon was made of another scheduled meeting with AMSEL at the
80
+ hotel --
81
+ Hotel where he had been supposed to keep
82
+ meeting, with AMSEL -- where he had been supposed to keep off at 2325 hours
83
+ that might reveal something about source of the story
84
+
85
+ (with Alan Culbertson in the vicinity of the Dawn Hotel) --
86
+ embassy and cultural sections are such sharp people, hence when -s. LAME
87
+ plotted clandestine correction -- that would seem
88
+ the dangerous. LAME explained his presence--at the --
89
+ and warning and saw his previous meetings were explained
90
+ 3. reporti
91
+ Cuban Engravings
92
+ (4) He reports
93
+ scheduled and non scheduled developments
94
+ (a) A big celebration of the 5th of July--is being planned to take place
95
+ in (Hampico). Dida celebration -- will take place in the
96
+ Club Circulo Tampiconense. (Primary), the principal particip-
97
+ are RICO, and stink boat or
98
+ is ready for these events
99
+ (b)
100
+
101
+ was introduced to two new people - and asked if LAME had
102
+ seen them -- LAME had
103
+
104
+ She was introduced to the First Lady by (Inu) BARRIOS --
105
+ of the first Lady (Chronic).
106
+ (c) The first Lady, the now Consul Colonel, that,
107
+ because he has done quite well in his Cuban relations.
108
+
109
+ (d) APALCIO also reported that the passing PUCHU LA CUBA is
110
+ trying to obtain certain airprints.
111
+
112
+ (e) APALCIO said that when he was in Prague he had trouble
113
+ with the climate and he asked to be sent to some other Europe
114
+ country - was surprised at the suddenness of his transfer
115
+ to Mexico.
116
+
117
+ (f) response to a question as to the should be the who
118
+ as, as, in his
119
+ told B that
120
+ belief, would be easiest to recruit among the Embassy staff, said
121
+ that he knows about JOBAIN Loyalty to the Castro regime
122
+ felt might be recruitable but would never activate him in
123
+ he might want a
124
+ such a risky venture.goes window shopping along
125
+ San Juan de Letran often - might be approachable there.
126
+
127
+ (g) Only two Cubans were invited to the French Ambassador's
128
+ Residence on Bastille Day. Ambassador is becoming
129
+ more openly pro-Castro in appearance, but B behaved normal
130
+ to him at a cocktail party a short while ago. French cul
131
+ (and I don't know what their
132
+ -at the Embassy who introduced the Ambassador to
133
+ to the French
134
+ Attachee to which he introduced the Cuban Attache.
135
+ is a close friend of that of
136
+ stayed at his side during the celebration on
137
+ 14th At this array , B only gave him a superficial man and
138
+ it became clear that there is a Cuban in the distinction
139
+ 1 suggested he would be to give them an impression
140
+ of another young woman
141
+ to give
142
+ the impression they
143
+ did, the Americans
144
+
145
+ (h) of
146
+ reported on recent meetings with two Ecuadoreans with Escala
147
+ for the Embassy.
148
+ A few days ago APALCIO saw in a group of
149
+ immigrant Ecuadoreans in Ecuador
150
+ to to Cuba
151
+ (i) About an embassy employee is involved with
152
+ transactions with Mexican individuals -
153
+ restrictio
154
+ and that it is
155
+ that he may have to work in a more clandestine fashion to avoid
156
+ his personal friction -- in this connection
157
+
158
+ (j) At the the Embassy some underligation by - that the
159
+
160
+ (k) turned over to (for potential) a handbill put out
161
+ by the Escuela Normal Rural de Santa Therobe Coahuila
162
+ dated 10 June 1963, explaining that schools invitation
163
+ to Fidel Castro to act as sponsor of the 1958-1963
164
+ graduating class. Copy attached.
165
+
166
+ (1) turned out a pornographic cartoon (for return) dis-
167
+ tributed by pro-Castro elements in Tampico. Copy not
168
+ attached.
169
+
170
+ (m) Wilfredo of the Cuban Consulate, Tampico, reported that
171
+ Luisa CALDERON has a sister residing in Reynosa, Tem,
172
+ married to an American of Mexican descent. Luisa may
173
+ come up to the border to visit her sister soon -or her
174
+ mother may make the trip -- details not clear.
175
+
176
+ seems to respect him highly and to admire him for his. He is also
177
+ getting along very nicely with his new boss, APARICIO. His information
178
+ gathering method is still to keep his eyes and ears open and ask no questions
179
+ -thus he often gets only fragments -- while questions or discreet elicitati
180
+ might fill in detail. He is extremely wary lest he arouse any suspicion.
181
+
182
+ 6. While he suggested that
183
+ he suggested that
184
+ on the 20th in
185
+ Madara -he was also concerned lest any disruption might
186
+ get him in trouble since he is the principal organizer of both affairs
187
+ felt that the Mexican government might think the disruption was engineered
188
+ by the Castro Cubans, themselves, to throw suspicion ca the anti-Castros.
189
+
190
+ is to protect him. He loves talking about
191
+ --and needs constant encouragement and shoring-up.
192
+ He lo inclined to wax himself on the back quite often and wait
193
+ This characteristic comes out in his conversation with whom B stops and says,
194
+ I think my ideas on handling such-and-such are pretty clever,
195
+ don't you
196
+
197
+ pick up Jill standing at the corner of Thiers and Melchor Ocampo
198
+ at the prescribed hour and driving slowly up the street to Thiers and Gutenberg
199
+ the street to Melchor Ocampo - Will cruise by in his car and make the pick
200
+ up while L is waiting. details will be worked out at the next
201
+ meeting.
space/space/jfk_text/104-10059-10099.md ADDED
@@ -0,0 +1,501 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ 14-00000
2
+
3
+ S-E-C-R-E-T
4
+ (When Filled In)
5
+
6
+ 27 MAY 1966
7
+
8
+ MEMORANDUM FOR: DD/S-HB
9
+ ATTENTION : Mr. Joseph E. Murphy, Jr. GG 14
10
+ SUBJECT : PUGH, Robert West
11
+ #789 6567
12
+ 08
13
+
14
+ 1. Reference is made to your request dated 4 January 1966
15
+ wherein you requested a Covert Security Approval to permit Sub-
16
+ ject's use as First Officer in the Far East under Project HBILKA/
17
+ JBGREED.
18
+ 12
19
+ 2
20
+ C
21
+
22
+ 2. In accordance with the provisions set forth in Clandestine
23
+ Services Instruction No. 10-5 and Clandestine Services Instruction
24
+ Field No. 10-5, a Covert Security Approval is granted for the use of
25
+ the Subject as described in your request as set forth in paragraph 1,
26
+ above.
27
+
28
+ 3. Subjects of Covert Security Approvals are not to represent
29
+ themselves as, nor are they to be represented as, employees of CIA.
30
+
31
+ 4. Your attention is called to the fact that a Covert Security
32
+ Approval does not constitute complete compliance with the provisions
33
+ of CIA Regulation 10-3. Therefore, if you should desire at a later
34
+ date to change the status or use of this individual, a request for
35
+ approval to cover any proposed change should be submitted to this
36
+ office.
37
+
38
+ 5. This approval becomes invalid in the event the Subject's
39
+ services are not utilized within six months of the date of this
40
+ memorandum.
41
+
42
+ MICROFICHE REPRODUCTIONS
43
+ DESTROY AFTER USE
44
+ 4/
45
+
46
+ Lenin (1. Rozt, for
47
+ Victor R. White
48
+ Deputy Director of Security
49
+
50
+ (IOS)
51
+ RETURN TO CIA
52
+ Background Use Only
53
+ Do Not Flaproduca
54
+
55
+ S-E-C-R-E-T
56
+ (When Filled-In)
57
+ GROUP I
58
+ Excluded from automatic
59
+ downgrading and declas-
60
+ sification.
61
+
62
+ ---
63
+ 14-00000
64
+
65
+ SECRET
66
+
67
+ 27 MAY 1968
68
+
69
+ MEMORANDUM FOR: Chief, Executive Officer
70
+ Project HBILKA/JBGREED
71
+ SUBJECT : PUGH, Robert West
72
+ #789 6567
73
+ 8
74
+
75
+ 1. Reference is made to your request dated 4 January 1966
76
+ for a Covert Security Approval to permit Subject's use as a First
77
+ Officer in the Far East under Project HBILKA/JBGREED. Concurrent
78
+ with issuance of the approval, the following is offered for your
79
+ information.
80
+
81
+ 2. Investigation has recently been completed with generally
82
+ favorable results. However, Subject's military file indicated that
83
+ he had been found unfit for duty due to excessive drinking, and
84
+ had been allowed to retire in the best interests of the Navy. His
85
+ Navy record stated that this drinking problem adversely affected
86
+ his judgement, reliability, and personal behavior. This weakness
87
+ had been discussed to no avail with Subject on several occasions.
88
+ It should be noted that domestic inquiries developed no indica-
89
+ tion of over-indulgence since his departure from the military on
90
+ October 1964.
91
+
92
+ 3. Additionally, it was developed that Subject's brother
93
+ Bartholomew, aka: Bart PUGH, was the Subject of an FBI investi-
94
+ gation in 1941, which was conducted to resolve allegations regarding
95
+ the loyalty of Subject's brother. Subject's brother was determined
96
+ to have been associated with known Communists and was active in
97
+ Communist matters in the Los Angeles, California area during this
98
+ period of time. However, it was noted that these activities had
99
+ caused a break with this individual and his family, who were not
100
+ in sympathy with his viewpoints and activities. There was no
101
+
102
+ P
103
+ SECRET
104
+ GROUP 1:
105
+ Excluded from autumatic
106
+ dewa rading and
107
+ see Do
108
+ #45
109
+
110
+ ---
111
+
112
+ C
113
+ 14.00000
114
+
115
+ SECRET
116
+
117
+ information developed during the course of this investigation which
118
+ indicated any association between Subject and his brother.
119
+
120
+ 4. Dissemination of the above information should be limited
121
+ to Staff and Project Officials on a strict "need to know" basis.
122
+
123
+ P.O'Connell
124
+ Howard J. Osborn
125
+ Director of Security
126
+ Cc: DD/S
127
+
128
+ SECRET
129
+ MICROFICHE REPRODUCTIONS
130
+ DESTROY AFTER USE
131
+
132
+ ---
133
+ /PV
134
+ 14-00000
135
+
136
+ DISPATCH
137
+
138
+ TO
139
+ Chief of Station, Taipei
140
+ INFO
141
+ FRO
142
+ SUBJECT
143
+ 13-6
144
+
145
+ Chief, Far East
146
+ 02
147
+ HEILKA/KUSODA
148
+ CLASSIFICATION
149
+ SECRET
150
+ 02
151
+ ATTN: Chief, HEILKA
152
+ PROCESSING ACTION
153
+ MARKED FOR INDEXING
154
+ NO INDEXING REQUIRED
155
+ ONLY QUALIFIED DESK
156
+ CAN JUDGE INDEXING
157
+ MICROFILM
158
+ ACTION REQUIRED REFERENCES
159
+
160
+ 1. A Covert Security Approval was granted IDSil on 27 May 1966 however the
161
+ following information is forwarded for your information.
162
+
163
+ Investigation has recently been completed with generally favorable results.
164
+ However IDEN's military file indicated that he had been found unfit for duty due to
165
+ excessive drinking, and had been allowed to retire in the best interests of the lavy.
166
+ His Navy record stated that this drinking problem adversely affected his judgment,
167
+ reliability, and personal behavior. This weakness had been discussed to no avail
168
+ with IDEN on several occasions. It should be noted that domestic inquiries developed
169
+ no indication of over-indulgence since his departure from the military in October 1964.
170
+ 06
171
+
172
+ Additionally, it was developed that DKS's brother Bartholomew, oka: Bart,
173
+ vas the subject of an FBI investigation in 1941, which was conducted to resolve
174
+ allegations regarding the loyalty of IDEN's brother. IDEM's brother was determined
175
+ to have been associated with known Commmmists and vas active in Comamist matters in
176
+ the Los, Angeles, California area during this period of time. However, it was noted
177
+ that these activities had caused a break with this individual and his feadly, who vere
178
+ not in sympathy with his viewpoints and activities. There was no information developed
179
+ during the course of this investigation which indicated any association between ITEN
180
+ and his brother.
181
+
182
+ 2. Dissemination of the above information should be limited to Staff and
183
+ Project Officials on a strict "need to know" basis.
184
+
185
+ Attachment:
186
+ IDEN (u/s/c)
187
+ Distribution:
188
+ Orig & 2 - Addressee
189
+ HUGH C. PARDEE
190
+ DOC# 04589
191
+ MICROFICHE REPRODUCTIONS
192
+ DESTROY AFTER USE
193
+
194
+ ---
195
+ /PV
196
+ 14-00000
197
+ 1. A Covert Security Approval Approva was granted IKH on 27 May 1966 however the
198
+ following information is forwarded for your information.
199
+
200
+ Investigation has recently been completed with gemerally favorable results.
201
+ However IDEN's military file indicated that he had been found unfit for for duty due to
202
+ excessive drinking, and had been allowed to retire in the best interests of the lavy.
203
+ His Navy record stated that this drinking problem adversely affected his judgment,
204
+ reliability, and personal behavior. This veakness had been discussed to nail
205
+ with IDEN on several occasions. It should be noted that domestic inquiries developed
206
+ no indication of over-indulgence since his departure from the military in October 1964.
207
+
208
+ Additionally, it was developed that IDEN's brother Bartholomew, aka: Bart,
209
+ was the subject of an FBI investigation in 1941, which was conducted to resolve
210
+ allegations regarding the loyalty of IDEN's brother. DEW's brother was determined
211
+ to have been associated with known Communists and was active in Commmist matters in
212
+ the Los, Angeles, California area during this period of time. However, it was noted
213
+ that these activities had caused a break with this individual and his family, who were
214
+ not in sympathy with his viewpoints and activities. There was no information developed
215
+ during the course of this investigation which indicated any association betusen IIEN
216
+ and his brother.
217
+ است
218
+
219
+ 2. Dissemination of the above information should be limited to staff and
220
+ Project Officials on a strict "need to know" basis.
221
+
222
+ Attachment:
223
+ IDEN (u/s/c)
224
+ Distribution:
225
+ Orig & 2- Addressee
226
+
227
+ CROSS REFERENCE TO
228
+ MICROFICHE REPRODUCTIONS
229
+ DESTROY AFTER USE
230
+ HUGH C. PARURE
231
+ 10-19
232
+ DISPATCH SYMBOL AND NUMBER
233
+ 22
234
+ FCTB 8572
235
+ SECRET
236
+ CLASSIFICATION
237
+ DATE 14 JUL 1960
238
+ 13 July 1966
239
+ HOS FILE NUMBER
240
+ OFFICE.....
241
+ 10/8-3
242
+ OFFICER
243
+ ORIGINATING
244
+ TYPIST
245
+ COORDINATING
246
+ OFFICE SYMBOL
247
+ DATE
248
+ Distribution:
249
+ 1-08/D/1
250
+ 1- 10/8-13
251
+ 08/ID/1
252
+ JETAMI
253
+ 28
254
+ 3/11/
255
+ FORM 53
256
+ 1:03
257
+ USE PREVIOUS EDITION
258
+ OFFICER'S NAME
259
+ 7/13/14 2751
260
+ DATE
261
+ (40)
262
+ JUL
263
+ 968.
264
+ RELEASIDIG
265
+ OFFICERS SATURE
266
+ EXT.
267
+ 6869
268
+ s
269
+ DISPATCH
270
+
271
+ ---
272
+ 2/月
273
+ 14
274
+ SECRET
275
+ IDENTITY SHEET
276
+ C
277
+ UNDER SEPARATE COVER ATTACHME
278
+ FCIS-8572
279
+ 22
280
+
281
+ FOR.
282
+ 03
283
+ MR. ROBERT WEST PUCH
284
+ RYGAT
285
+ MICROFICHE REPRODUCTIONS
286
+ DESTROY AFTER USE
287
+
288
+ ---
289
+ 14-00000
290
+
291
+ 7/PV
292
+ 2
293
+ 10/4/66
294
+ 108 Chung Shan Road, North, 2nd Section
295
+ Taipei, Taiwan
296
+ REC'D WAS OCT 4 1966
297
+ PND-DP-66/4427
298
+ 03
299
+ Mr. R. W. Pugh
300
+ Taipei, Taiwan 13-6
301
+ 03
302
+ Dear Fr. Pugh
303
+ 27 September 1966
304
+
305
+ This letter will confirm acceptance of your resigna-
306
+ tion effective 27 September 1966 at the close of business.
307
+
308
+ A final pay check representing any unpaid salary due
309
+ you less any debits you may have on the Company books will be
310
+ forwarded to your bank:
311
+
312
+ Bank of America
313
+ 4th Street 08
314
+ Santa Rosa, California.
315
+
316
+ You have given us your forwarding address as:
317
+
318
+ (756 Baird Road 08
319
+ Santa Rosa, California
320
+ U.S.A
321
+ We thank you for your past service and wish you
322
+ success in the future.
323
+
324
+ Sincerely yours,
325
+
326
+ David R. Traylor
327
+ Director of Personnel
328
+ i/cc: Paymaster
329
+ CC
330
+ ssistant for Personnel via HDR, Prasseint
331
+ 03
332
+ Fr.... W. Pun P/O TAC, 503 8 February 1966
333
+ 03
334
+ Fr. Figh resigned effective 27 September 1966 cob.
335
+ He indicated to us that he wished to quit flying and
336
+ go home.
337
+ MICROFICHE REPRODUCTIONS
338
+ DESTROY AFTER USE
339
+
340
+ ---
341
+ 14-00000
342
+ SECRET
343
+ REQUEST FOR CANCELLATION
344
+ FROM: (Division) (Case officer) (Extension)
345
+ DD/S-HB J.M.Clark 6862
346
+ NAME SHOWN:193
347
+
348
+ TO:
349
+ CHIEF
350
+ OS/ID/1
351
+ SUBJECT'S NAME (Pseudo, crypt or true may be used)
352
+ 03
353
+ Pugh, Robert West
354
+ CI/OA NO.
355
+ 08
356
+ !
357
+ 789656
358
+ DATE OF BIRTH
359
+ Unknown
360
+ REASON(S) FOR CANCELLATION
361
+ TRUE
362
+ 201 NO.
363
+ PLACE OF BIRTH
364
+ 08
365
+ 789 656
366
+ PROJECT
367
+ 02
368
+ JBGREED
369
+ GENT'S SERVICE RECORD
370
+ IS ATTACHED
371
+ CRYPT
372
+ BILL BE FORWARDED
373
+ Unknown
374
+
375
+ 02
376
+ Subject has resigned his employment with HEILKA.
377
+ MICROFICHE REPRODUCTIONS
378
+ DESTROY AFTER USE
379
+
380
+ DATE
381
+ SIGNATURE
382
+ 201-789656
383
+ for Jack U. Clark
384
+ 68
385
+ SUBJECT IS USED IN ANY CAPACITY, A NEW REQUEST FOR APPROVAL WILL BE SUBMITTED TO CI/OA
386
+ SECRET
387
+ FORM 937 OBSOLETE PREVIOUS EDITION.
388
+ 4591
389
+ (5/円)
390
+ 2-56
391
+
392
+ ---
393
+ 4-00000円
394
+
395
+ SECRET
396
+ REQUEST FOR APPROVAL OR INVESTIGATIVE ACTION
397
+ (Alwaye handcarry I copy of this form)
398
+ PLEASE COMPLETE EACH SECTION AND APPROPRIATE BLANK
399
+ APPROVED FOR RELEASE 1993
400
+ CIA HISTORICAL REVIEW PROGRAM
401
+ T
402
+ DATE
403
+ 4 January 1966
404
+ TO:
405
+ FROM:
406
+ CI/OPERATIONAL: APPROVAL AND SUPPORT DIVISION
407
+
408
+ CHIEF INVESTIGATION AND SUPPORT DIVISION. OFFICE OF SECURITY
409
+ CHIEF PERSONNEL SECURITY DIVISION. OFF ICE OF SECURITY
410
+ DD/S-HB
411
+ SUBJECT:
412
+ 03
413
+ PROJECT
414
+ 02
415
+ (True name)
416
+ (PUCH, Robert West
417
+ JEGREED
418
+ CRYPTONYM, PSEUDONYM, AKA OR ALIASES
419
+ CI/OA FILE NO.
420
+ XX
421
+ RI 201 FILE NO
422
+ SO FILE NO.
423
+ 201-789 656
424
+ 1. TYPE ACTION REQUESTED
425
+ PROVISIONAL OPERATIONAL APPROVAL
426
+ OPERATIONAL APPROVAL
427
+ PROVISIONAL COVERT SECURITY APPROVAL
428
+ COVERT SECURITY APPROVAL
429
+ CONTRACT TYPE A
430
+ PROVISIONAL PROPRIETARY APPROVAL
431
+ PROPRIETARY APPROVAL
432
+ COVERT NAME CHECK
433
+ SPECIAL INQUIRY (SO field investigation).
434
+ CONTRACT TYPE B
435
+
436
+ SPECIFIC AREA OF USE
437
+ Far East (General)
438
+ FULL DETAILS OF USE
439
+
440
+ 02
441
+ First Officer, HEILKA.
442
+ Phr
443
+ MICROFICHE REPRODUCTIONS
444
+ DESTROY AFTER USE
445
+ 4. INVESTIGATION AND COVER
446
+ A. U.S. GOVERNMENT. INTEREST MAY BE SHOWN DURING. INVESTIGATION?
447
+
448
+ B. CIA INTEREST MAY BE SHOWN DURING INVESTIGATION?
449
+
450
+ C. IS SUBJECT AWARE OF U.S. GOVERNMENT INTEREST IN HIM?
451
+
452
+ D. IS SUBJECT AWARE OF CIA INTEREST IN HIM?
453
+
454
+ E. INDICATE ANY LIMITATIONS ON COVERAGE IN THE INVESTIGATION OF SUBJECT..
455
+
456
+ F. SUGGEST "COVER PRETEXT" TO BE USED IN CONDUCTING PERSONAL INVESTIGATION OF SUBJECT.
457
+
458
+ G. DO YOU PLAN TO MAKE SUBJECT WITTING OF AGENCY OR GOVERNMENT INTEREST?
459
+ IF NO INVESTIGATION OUTSIDE CIA. EXPLAIN FULLY
460
+
461
+ 5. PRO AND GREEN LIST STATUS
462
+ PRO 1. OR EQUIVALENT. IN (2) COPIES ATTACHED
463
+ PRO 11. OR EQUIVALENT, IN (1) COPY ATTACHED
464
+ PRO II WILL BE FORWARDED
465
+ YES
466
+ NO
467
+ YES
468
+ NO
469
+ NO RECORD
470
+ NO RECORD
471
+ :
472
+ NO RECORD
473
+ GREEN LIST ATTACHED, NO:
474
+ 6. RI TRACES
475
+ WILL FORWARD
476
+ NON-DEROGATORY.
477
+ DEROGATORY ATTACHED
478
+ 7. DIVISION TRACES.
479
+ WILL FORWARD
480
+ :::
481
+ NON-DEROGATORY
482
+ DEROGATORY ATTACHED
483
+ 8. FIELD TRACES
484
+ VILL FORWARD
485
+ :
486
+ NO DEROGATORY INFO.
487
+ LIST SOURCES CHECKED
488
+ DEROGATORY ATTACHED
489
+ SIGNIFICANT INFORMATION ATTACHED
490
+ NOT INITIATED (Explanation)
491
+ SIGNATURE OF CASE OFFICER
492
+ EXTENSION
493
+ SIGNATURE OF BRANCH CHIEF
494
+ JOSKPH E. MURPHY
495
+ 6862
496
+ H/P
497
+ FORM
498
+ 2-63
499
+ SECRET
500
+ EDITIONS.
501
+ 11500
space/space/jfk_text/104-10059-10188.md ADDED
@@ -0,0 +1,67 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ 1104-10059-10188 2025 RELEASE UNDER THE PRESIDENT JOHN F. KENNEDY ASSASSINATION RECORDS ACT OF 1992
2
+
3
+ MEMORANDUM FOR THE RECORD
4
+ DATE
5
+ 29.7.68
6
+ FILE NUMBER
7
+ OSWALD- Nosenko
8
+
9
+ 1. On 26 July Kes. Rocca C/CI/RTA
10
+ called to my attention an aspect
11
+ of Nosenko's information which
12
+ must be definitely examined
13
+ when we attempt to assess
14
+ and analyze Nosenko a story about
15
+ The OSWALD case. Rocca has
16
+ then reading ass The Ratrou
17
+ son re ESWALD and it is
18
+ this impression. There are not only
19
+ gaps in the info from the standpu
20
+ That N Surved moto more bec
21
+ also some aspects which don't
22
+ ring true.
23
+
24
+ 2. Recently Rocca received form
25
+ that he
26
+ Information aball the
27
+ activities of IRINA SHURAKOVA
28
+ who has both in The U.K. in
29
+ Touch with a British controlled
30
+ source (a gov't clerk) judged
31
+
32
+ 1954
33
+ JE 525-126
34
+
35
+ 14-00000
36
+
37
+ SUBJECT
38
+ FORM
39
+ MEMORANDUM FOR THE RECORD
40
+
41
+ [to be reliable] It is Rocca's
42
+ impression (Thats note
43
+ [examined This case Thoroughly] )
44
+ [that The Sovets have criticised]
45
+ to try to make SHURALOVA
46
+ look [Clean i.e., that she has
47
+ resh had a KOB note and
48
+ Tis only an Intourist interpretas-
49
+ to support N's Thesis. This
50
+ is questionable on its resence
51
+ [at any rate The [controlled
52
+ British source and SHARAVOJA
53
+ visited here Tossad's Wax works
54
+ wuzeum Where SHURAKOVA
55
+ had a visibles reaction where
56
+ seeing OSWALD display, altanista
57
+ This vivirs was entirely cun occur
58
+ [on The part of the source?]
59
+ [British]. it was not
60
+ dove deliberately SHURACOVAR
61
+ reaction indicated suspicious
62
+ that This was a movodation
63
+
64
+ 1954
65
+ OFFICE AND TITLE
66
+ SIGNATURE
67
+ GROUP