forked from yaso_meth/mih-project
add UX to add a file, any file.
This commit is contained in:
Binary file not shown.
Binary file not shown.
BIN
File_Storage/Mzanzi_Innovation_Hub/mih/Contact-sheet.pdf/xl.meta
Normal file
BIN
File_Storage/Mzanzi_Innovation_Hub/mih/Contact-sheet.pdf/xl.meta
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -45,16 +45,17 @@ class _BuildFilesListState extends State<BuildFilesList> {
|
||||
IconButton(
|
||||
onPressed: () {
|
||||
js.context.callMethod('open', [
|
||||
'http://localhost:9000/mih/${widget.files[index].file_name}.pdf'
|
||||
'http://localhost:9000/mih/${widget.files[index].file_name}'
|
||||
]);
|
||||
//print(object)
|
||||
},
|
||||
icon: Icon(Icons.download),
|
||||
)
|
||||
icon: const Icon(Icons.download),
|
||||
),
|
||||
],
|
||||
),
|
||||
content: BuildPDFView(
|
||||
pdfLink:
|
||||
"http://localhost:9000/mih/${widget.files[index].file_name}.pdf"),
|
||||
"http://localhost:9000/mih/${widget.files[index].file_name}"),
|
||||
actions: [
|
||||
TextButton(
|
||||
onPressed: () {
|
||||
|
||||
@@ -1,9 +1,13 @@
|
||||
import 'dart:async';
|
||||
import 'dart:convert';
|
||||
import 'dart:typed_data';
|
||||
|
||||
import 'package:file_picker/file_picker.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:patient_manager/components/buildFilesList.dart';
|
||||
import 'package:patient_manager/components/medCertInput.dart';
|
||||
import 'package:patient_manager/components/myTextInput.dart';
|
||||
import 'package:patient_manager/components/mybutton.dart';
|
||||
import 'package:patient_manager/main.dart';
|
||||
import 'package:patient_manager/objects/AppUser.dart';
|
||||
import 'package:patient_manager/objects/files.dart';
|
||||
@@ -28,15 +32,19 @@ class PatientFiles extends StatefulWidget {
|
||||
class _PatientFilesState extends State<PatientFiles> {
|
||||
String endpointFiles = "http://localhost:80/files/patients/";
|
||||
String endpointUser = "http://localhost:80/docOffices/user/";
|
||||
String endpointGenFiles = "http://localhost:80/files/generate/";
|
||||
String endpointGenFiles = "http://localhost:80/files/generate/med-cert/";
|
||||
String endpointFileUpload = "http://localhost:80/files/upload/file/";
|
||||
String endpointInsertFiles = "http://localhost:80/files/insert/";
|
||||
|
||||
final startDateController = TextEditingController();
|
||||
final endDateTextController = TextEditingController();
|
||||
final retDateTextController = TextEditingController();
|
||||
final selectedFileController = TextEditingController();
|
||||
|
||||
late Future<List<PFile>> futueFiles;
|
||||
late String userEmail = "";
|
||||
late AppUser appUser;
|
||||
late PlatformFile selected;
|
||||
|
||||
Future<void> generateMedCert() async {
|
||||
var response1 = await http.post(
|
||||
@@ -53,9 +61,9 @@ class _PatientFilesState extends State<PatientFiles> {
|
||||
"returnDate": retDateTextController.text,
|
||||
}),
|
||||
);
|
||||
print(response1.statusCode);
|
||||
//print(response1.statusCode);
|
||||
String fileName =
|
||||
"Med-Cert-${widget.selectedPatient.first_name} ${widget.selectedPatient.last_name}-${startDateController.text}";
|
||||
"Med-Cert-${widget.selectedPatient.first_name} ${widget.selectedPatient.last_name}-${startDateController.text}.pdf";
|
||||
if (response1.statusCode == 200) {
|
||||
var response2 = await http.post(
|
||||
Uri.parse(endpointInsertFiles),
|
||||
@@ -71,6 +79,46 @@ class _PatientFilesState extends State<PatientFiles> {
|
||||
print(response2.statusCode);
|
||||
if (response2.statusCode == 201) {
|
||||
setState(() {
|
||||
startDateController.clear();
|
||||
endDateTextController.clear();
|
||||
retDateTextController.clear();
|
||||
futueFiles =
|
||||
fetchFiles(endpointFiles + widget.patientIndex.toString());
|
||||
});
|
||||
String message = "Successfully added file";
|
||||
messagePopUp(message);
|
||||
} else {
|
||||
messagePopUp("error response 2");
|
||||
}
|
||||
} else {
|
||||
messagePopUp("error respose 1");
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> uploadSelectedFile(PlatformFile file) async {
|
||||
//var strem = new http.ByteStream.fromBytes(file.bytes.)
|
||||
var request = http.MultipartRequest('POST', Uri.parse(endpointFileUpload));
|
||||
request.headers['Content-Type'] = 'multipart/form-data';
|
||||
request.files.add(await http.MultipartFile.fromBytes('file', file.bytes!,
|
||||
filename: file.name.replaceAll(RegExp(r' '), '-')));
|
||||
var response1 = await request.send();
|
||||
print(response1.statusCode);
|
||||
if (response1.statusCode == 200) {
|
||||
var response2 = await http.post(
|
||||
Uri.parse(endpointInsertFiles),
|
||||
headers: <String, String>{
|
||||
"Content-Type": "application/json; charset=UTF-8"
|
||||
},
|
||||
body: jsonEncode(<String, dynamic>{
|
||||
"file_path": file.name.replaceAll(RegExp(r' '), '-'),
|
||||
"file_name": file.name.replaceAll(RegExp(r' '), '-'),
|
||||
"patient_id": widget.patientIndex
|
||||
}),
|
||||
);
|
||||
print(response2.statusCode);
|
||||
if (response2.statusCode == 201) {
|
||||
setState(() {
|
||||
selectedFileController.clear();
|
||||
futueFiles =
|
||||
fetchFiles(endpointFiles + widget.patientIndex.toString());
|
||||
});
|
||||
@@ -131,6 +179,110 @@ class _PatientFilesState extends State<PatientFiles> {
|
||||
);
|
||||
}
|
||||
|
||||
void medCertPopUp() {
|
||||
showDialog(
|
||||
context: context,
|
||||
builder: (context) => AlertDialog(
|
||||
title: const Row(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: [
|
||||
Text("Create Medical Certificate"),
|
||||
],
|
||||
),
|
||||
content: Medcertinput(
|
||||
startDateController: startDateController,
|
||||
endDateTextController: endDateTextController,
|
||||
retDateTextController: retDateTextController,
|
||||
),
|
||||
actions: [
|
||||
TextButton(
|
||||
onPressed: () {
|
||||
generateMedCert();
|
||||
Navigator.pop(context);
|
||||
},
|
||||
child: const Text(
|
||||
"Generate",
|
||||
style: TextStyle(fontWeight: FontWeight.bold),
|
||||
),
|
||||
),
|
||||
TextButton(
|
||||
onPressed: () {
|
||||
Navigator.pop(context);
|
||||
},
|
||||
child: const Text("Cancel"),
|
||||
)
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
void uploudFilePopUp() {
|
||||
showDialog(
|
||||
context: context,
|
||||
builder: (context) => AlertDialog(
|
||||
title: const Row(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: [
|
||||
Text("Upload File"),
|
||||
],
|
||||
),
|
||||
content: SizedBox(
|
||||
width: 700,
|
||||
height: 250,
|
||||
child: Column(
|
||||
children: [
|
||||
SizedBox(
|
||||
width: 700,
|
||||
child: MyButton(
|
||||
onTap: () async {
|
||||
FilePickerResult? result =
|
||||
await FilePicker.platform.pickFiles();
|
||||
if (result == null) return;
|
||||
final selectedFile = result.files.first;
|
||||
//selectedFile
|
||||
// print("Name: ${selectedFile.name}");
|
||||
// print("Extension: ${selectedFile.extension}");
|
||||
// print("Content: ${selectedFile.bytes}");
|
||||
|
||||
setState(() {
|
||||
selected = selectedFile;
|
||||
});
|
||||
|
||||
setState(() {
|
||||
selectedFileController.text = selectedFile.name;
|
||||
});
|
||||
},
|
||||
buttonText: "Select File"),
|
||||
),
|
||||
MyTextField(
|
||||
controller: selectedFileController,
|
||||
hintText: "Selected FIle",
|
||||
editable: false)
|
||||
],
|
||||
),
|
||||
),
|
||||
actions: [
|
||||
TextButton(
|
||||
onPressed: () {
|
||||
uploadSelectedFile(selected);
|
||||
Navigator.pop(context);
|
||||
},
|
||||
child: const Text(
|
||||
"Upload",
|
||||
style: TextStyle(fontWeight: FontWeight.bold),
|
||||
),
|
||||
),
|
||||
TextButton(
|
||||
onPressed: () {
|
||||
Navigator.pop(context);
|
||||
},
|
||||
child: const Text("Cancel"),
|
||||
)
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
futueFiles = fetchFiles(endpointFiles + widget.patientIndex.toString());
|
||||
@@ -178,51 +330,19 @@ class _PatientFilesState extends State<PatientFiles> {
|
||||
),
|
||||
IconButton(
|
||||
onPressed: () {
|
||||
showDialog(
|
||||
context: context,
|
||||
builder: (context) => AlertDialog(
|
||||
title: const Row(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: [
|
||||
Text("Create Medical Certificate"),
|
||||
],
|
||||
),
|
||||
content: Medcertinput(
|
||||
startDateController: startDateController,
|
||||
endDateTextController:
|
||||
endDateTextController,
|
||||
retDateTextController:
|
||||
retDateTextController,
|
||||
),
|
||||
actions: [
|
||||
TextButton(
|
||||
onPressed: () {
|
||||
//getPatientDetails();
|
||||
generateMedCert();
|
||||
Navigator.pop(context);
|
||||
//print(widget.patientIndex);
|
||||
},
|
||||
child: const Text(
|
||||
"Generate",
|
||||
style: TextStyle(
|
||||
fontWeight: FontWeight.bold),
|
||||
),
|
||||
),
|
||||
TextButton(
|
||||
onPressed: () {
|
||||
Navigator.pop(context);
|
||||
},
|
||||
child: const Text("Cancel"),
|
||||
)
|
||||
],
|
||||
),
|
||||
);
|
||||
medCertPopUp();
|
||||
},
|
||||
icon: const Icon(Icons.sick_outlined),
|
||||
),
|
||||
IconButton(
|
||||
onPressed: () {},
|
||||
icon: const Icon(Icons.medication_outlined),
|
||||
),
|
||||
IconButton(
|
||||
onPressed: () {
|
||||
uploudFilePopUp();
|
||||
},
|
||||
icon: const Icon(Icons.add),
|
||||
)
|
||||
],
|
||||
),
|
||||
|
||||
@@ -21,10 +21,34 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: app_links
|
||||
sha256: "96e677810b83707ff5e10fac11e4839daa0ea4e0123c35864c092699165eb3db"
|
||||
sha256: a9905d6a60e814503fabc7523a9ed161b812d7ca69c99ad8ceea14279dc4f06b
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "6.1.1"
|
||||
version: "6.1.3"
|
||||
app_links_linux:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: app_links_linux
|
||||
sha256: "567139eca3ca9fb113f2082f3aaa75a26f30f0ebdbe5fa7f09a3913c5bebd630"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.0.2"
|
||||
app_links_platform_interface:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: app_links_platform_interface
|
||||
sha256: "58cff6f11df59b0e514dd5e4a61e988348ad5662f0e75d45d4e214ebea55c94c"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.0.0"
|
||||
app_links_web:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: app_links_web
|
||||
sha256: "74586ed5f3c4786341e82a0fa43c39ec3f13108a550f74e80d8bf68aa11349d1"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.0.3"
|
||||
archive:
|
||||
dependency: transitive
|
||||
description:
|
||||
@@ -201,6 +225,14 @@ packages:
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "3.1.1"
|
||||
cross_file:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: cross_file
|
||||
sha256: "55d7b444feb71301ef6b8838dbc1ae02e63dd48c8773f3810ff53bb1e2945b32"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.3.4+1"
|
||||
crypto:
|
||||
dependency: transitive
|
||||
description:
|
||||
@@ -273,6 +305,14 @@ packages:
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "7.0.0"
|
||||
file_picker:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: file_picker
|
||||
sha256: "2ca051989f69d1b2ca012b2cf3ccf78c70d40144f0861ff2c063493f7c8c3d45"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "8.0.5"
|
||||
fixnum:
|
||||
dependency: transitive
|
||||
description:
|
||||
@@ -294,6 +334,14 @@ packages:
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.0.3"
|
||||
flutter_plugin_android_lifecycle:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: flutter_plugin_android_lifecycle
|
||||
sha256: c6b0b4c05c458e1c01ad9bcc14041dd7b1f6783d487be4386f793f47a8a4d03e
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.0.20"
|
||||
flutter_test:
|
||||
dependency: "direct dev"
|
||||
description: flutter
|
||||
|
||||
@@ -36,7 +36,7 @@ dependencies:
|
||||
# Use with the CupertinoIcons class for iOS style icons.
|
||||
cupertino_icons: ^1.0.2
|
||||
syncfusion_flutter_pdfviewer: ^26.1.39
|
||||
#pdfx: ^2.6.0
|
||||
file_picker: ^8.0.5
|
||||
supabase_auth_ui: ^0.4.1
|
||||
supabase_flutter: ^2.4.0
|
||||
http: ^1.2.1
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
database/ibdata1
BIN
database/ibdata1
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
26
temp.pdf
26
temp.pdf
@@ -17,17 +17,17 @@ endobj
|
||||
endobj
|
||||
4 0 obj
|
||||
<<
|
||||
/BitsPerComponent 8 /ColorSpace /DeviceRGB /Filter [ /ASCII85Decode /FlateDecode ] /Height 100 /Length 1159 /Subtype /Image
|
||||
/BitsPerComponent 8 /ColorSpace /DeviceRGB /Filter [ /ASCII85Decode /FlateDecode ] /Height 100 /Length 1025 /Subtype /Image
|
||||
/Type /XObject /Width 100
|
||||
>>
|
||||
stream
|
||||
Gb"/_bB>0d#Qs8iIlaoS>>g$#PERgSD:#&l^1I`DY;Jot\t#.j0$s?sls]6>ZVk+l8SkY[O(Ct`N*XX<AK.V'eZaZ&^>jB><Dut2!=mUVAUSc32lsOF'is0;Y'JpBo6"!^M8$kW?>]FlQ1qu/WZ&mh`:2WdqB#%4qnm/a\(r-,>J'::$554?nb$2TqtG:.R(q-p=Rj*TPon*4E;t!&]tPl'_i!?cNR^NhRDsGX:$JkMhpCoE$nFMkN0VNf42UrO*DEkq<8gJc;*X?1\l\Y+#-0>/(c!/PZm?aC-+^-<?GS.mYJZC<C0::nYY3c,JoKXn48/BPW`D!Z$GqAWmF^12W`mr[.L69N[pqW4I@'0#f&4*"?1h4'%6-hL6\&tAgpa6Y.Tu4L7cciHk;qJ/'\18ghUf/&rN4/F)HKpAq5[N6[o3Ya]NVqmcms/^iuUp)2AO68Go)a3jFQhnj/_]d.Z@a+/h/Hp"65Y5qMss)[jq,obU10c_[J%/k0Q7HLC>Dqa*Z<eZ+UOp**->9SZGHC]MpQUU$R'ka7"2$=:M<GCsQkH0itj,<]g..dfM:U1T^@fcd,I5k-:-]WQq8Tp"d[PBgsGSFXa+IO0[;[+/>_ORDd[QOQnsN<o:B%0O&[N\)(_O'cO@-^(MDdAs;S.dhofI#iV#tg9PIC=IIg[I9;p9\-(V1$IKlK]Z!_#_&1N,^-<;k"LnXZ^pQ-b0DPNCi"4fbKE0W`^p:0_I.*?#<f[(-3^2)u1AdmTdCi^UL%P7>^MW/kLXitM'S[?Mp[')tpeIpB_jF&=K^fOb=Rd800i^&1?BBoipZGe)S(8_QLG8G+g?SH?++A@iL5GB(<7TTmX#b5kpgH%]e9d%;[qg2=@FTbG_=C"Ia8<(Z<[?!==N,$ZqjPZ_<9I-P<drBMmi7e!)7F_'L"5-Ie"0`jO"l$L]-uYI.mC.Gj^"Um:Xs.7bN9=8*i6d39A*_8@J*Ar5-sMA`An("+*G#2GTF*YX#2Y"SR9Xa].<D2b2%8#V+Nf!GeX0])HOOr^Ab$5.35_<)--nUA?S5!L6Y"$=]Y&u\bPT.W?*QL_hnt8j[Z;Lc1nG.qX/_s`NIc8^MWLL267\u];q#JL@5s&`9o=Nb#92n-LSoRgMF*P>(Ccn^P1sLXCgDg#ON'#5Q~>endstream
|
||||
Gb"/_960,J$j1SN95!t'!&SE)RS!u@.12^HrpC3WCGe^0]%f$R\j5/BAT,S;1FqQ%RD]l]I4RHPAaElT.(`#M<b2I'IE1BQWht65"#s+IQ1`si?!20Z7p(&'GijEmI_T3h3mkF<iihBj=aAmp=A?\XQPeT6:&!''G[FKA]An<B*USm].SS(E`NOW2n+Z/91&n1j=n03UPon*4k5FK0G(&iW/M$hpD6,o^au&O7[B%$.r=r73I/Xs5Pm;JcpHS"PWbY-B?CaC\WL`KA^&La,DRumT=B>5a]9jABMu%"]55K\1H$uCk]>QE$?o4mY5DrrL4NIY+M^[T$BT?@,':;h>K1o[\La!n!k1IX,JSAQ*knfB^G#Z11*gBsGnbL@c"<aI-+KO_?M[H/sfMd4nX/u*"2mYQ"jK\Z3gaaBhc9'%Q0j\#QG\+kS&MGOFlg.fYm@]KMjSEG!oV;*/bEl+h+Ij9%lASp%$j0eXMS&d@<\_&Oi^6Hs_gSVfmND_96`-s[]TX'M,m)&Zl'.%I1M-.DPa2*JXAp)>c0o*-Bac:Lh3Sl6QPJBk<q(73Am-94F'g,/oHD,XiiF2XTjD5rBss/X>'>Z,Wg+<#HO6aB*W>rjrFX_sg1cMnYHm0&hT6+nm_kl\O"maVn"YoXpYTJn=0WZd]H9V:)r4$_[2mqe(#PA.@R&$)Pp!tO$GKs^m<kr,PSKgrij3,->PPSP0#g_k0pVdKNihYSb=[Wd/nTK%?L!o'3\!?F>?8dm=ac*k(K]R@=W^,hYMi/dJ*b@YX@t`/qZn_6!\:<*?:Xf\L,"2E<E?aK1`?f[h5SAAN8_Z:M]to!nTbj"mh4H)W^Z5Z2ZHY9;*'(hap'YgeN6q0bbi#0EsOl+LsDpPh+p,LIFS)CXLu.XO/(KYG>i7P1QCS`QW72Uiq`GCAu0Uj0kWH\<04eB=d>9PpjZGc]lNZ!YGHEDi04ruaNBQAK8?E!]F35Wf(%_tPZ:jP)Tp?$'_gSFIJaQcf'u_2ZASKiF[s2fS:BDLGdd~>endstream
|
||||
endobj
|
||||
5 0 obj
|
||||
<<
|
||||
/Contents 9 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 8 0 R /Resources <<
|
||||
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] /XObject <<
|
||||
/FormXob.a864f8048b8deb389d345068e0f01419 4 0 R
|
||||
/FormXob.cd283a2c1d6ad3d76ad89881508b17eb 4 0 R
|
||||
>>
|
||||
>> /Rotate 0 /Trans <<
|
||||
|
||||
@@ -42,7 +42,7 @@ endobj
|
||||
endobj
|
||||
7 0 obj
|
||||
<<
|
||||
/Author (anonymous) /CreationDate (D:20240626135150+00'00') /Creator (ReportLab PDF Library - www.reportlab.com) /Keywords () /ModDate (D:20240626135150+00'00') /Producer (ReportLab PDF Library - www.reportlab.com)
|
||||
/Author (anonymous) /CreationDate (D:20240627140120+00'00') /Creator (ReportLab PDF Library - www.reportlab.com) /Keywords () /ModDate (D:20240627140120+00'00') /Producer (ReportLab PDF Library - www.reportlab.com)
|
||||
/Subject (unspecified) /Title (untitled) /Trapped /False
|
||||
>>
|
||||
endobj
|
||||
@@ -53,10 +53,10 @@ endobj
|
||||
endobj
|
||||
9 0 obj
|
||||
<<
|
||||
/Filter [ /ASCII85Decode /FlateDecode ] /Length 447
|
||||
/Filter [ /ASCII85Decode /FlateDecode ] /Length 446
|
||||
>>
|
||||
stream
|
||||
Gas2F5uWCi&;BTNMK`$4$:u.L33$hnc<)*(%XOo^/..6^e5$%W5[,1CVaCXiS,M3u>pr6bdI*T,^l:`9VP">Q#N\.)]Z3QhB>2h8K#aS2#%<0N9RS'n!EnB576M:V(h*=Tnf@;dQc?g394K>ON0,-=405F(MDQc%X(kl"c.8n)k]r(060+JuMdhNT=bF(kDI=9;`U!3`DY/JD85?BaQ<5W51#HC6gkHlZ!Me&.eWgsHIuUsiOWuh__/,fKad(-ZgBo=Z.\1!blAo>@/rV6Af;<T@=FG>tRo>#9b>hU,[mO8fOm`79?5I10>1loX%i#M!KXr#VAokQ,DS8$5-"]Y.ICH+lNu[5I7g[kG1s[M*mO+K)?8+9[oj['4+sNTd_SobjC>KbHf&n35KH`Ej&n29/pU'sKB\6$_S=DBHNi-$KkdH3&WbuG8\:XGWllN`.~>endstream
|
||||
Gas2F>>rBm&;B$=/'anN6V0U_4K?3TN9D[8d)S%=V:m8"Jdh\9["(PTR!-p$mXF>02\a2:Zs,s.gi2m5'U4.bTRe28hdamD1]Q\L&I_%!`F4FE8GseO-K$a6=PP,uNtE.4K"lqFrR)N"Bkco:M_VMI"V,;po2;A!DIm>#_S-q6$pAM`,`#]HHr2M)DkeI:jp#F[)SBD&n&>m*NVO:SFGZiY$J>WYk;MtB%;:H=>M]!^s0!#90QI;oZ9M^;<cY$od^6lj0iI+8lfOtW'FV#n'TK792HHGUU<P0QW)e2Ch@AN*N:c&CoX_+R1t&HDFkD89&Toh.XUaQt](P'1<gXun%,@Gc4`ZWk*[P?$@\:)bmO'N"Y<UE/rLu)Tj=D1E9[Gmoo0FGPeYXTK,Y:I8R:2o)Vu?.Z@5mH3jI@Z?4O$<pg(o.\`m34V"n)[R`Oc'~>endstream
|
||||
endobj
|
||||
xref
|
||||
0 10
|
||||
@@ -65,15 +65,15 @@ xref
|
||||
0000000114 00000 n
|
||||
0000000221 00000 n
|
||||
0000000333 00000 n
|
||||
0000001683 00000 n
|
||||
0000001949 00000 n
|
||||
0000002017 00000 n
|
||||
0000002313 00000 n
|
||||
0000002372 00000 n
|
||||
0000001549 00000 n
|
||||
0000001815 00000 n
|
||||
0000001883 00000 n
|
||||
0000002179 00000 n
|
||||
0000002238 00000 n
|
||||
trailer
|
||||
<<
|
||||
/ID
|
||||
[<36b4836a753ad82170aa5ba05dd47b32><36b4836a753ad82170aa5ba05dd47b32>]
|
||||
[<712dd983c575d0108ff950f2c16588c6><712dd983c575d0108ff950f2c16588c6>]
|
||||
% ReportLab generated PDF document -- digest (http://www.reportlab.com)
|
||||
|
||||
/Info 7 0 R
|
||||
@@ -81,5 +81,5 @@ trailer
|
||||
/Size 10
|
||||
>>
|
||||
startxref
|
||||
2909
|
||||
2774
|
||||
%%EOF
|
||||
|
||||
Reference in New Issue
Block a user