{"version":3,"sources":["webpack:///main.796873dc35ac9641d2cd.bundle.js","webpack:///./src/app/shared/services/category.service.ts","webpack:///./src/app/shared/components/confirm/confirm.service.ts","webpack:///./src/app/shared/services/local-storage.service.ts","webpack:///./src/app/shared/services/document.service.ts","webpack:///./src/app/shared/services/user.service.ts","webpack:///./src/environments/environment.prod.ts","webpack:///./src/app/+document-editor/document-editor.component.ts","webpack:///./src/app/+document-list/document-list.component.ts","webpack:///./src/app/+home/home.component.ts","webpack:///./src/app/+login/login.component.ts","webpack:///./src/app/+registration/registration.component.ts","webpack:///./src/app/+stats/stats.component.ts","webpack:///./src/app/app.component.ts","webpack:///./src/app/shared/components/tabs/tab.component.ts","webpack:///./src/app/shared/services/admin-guard.service.ts","webpack:///./src/app/shared/services/auth-guard.service.ts","webpack:///./src/app/shared/services/chart.service.ts","webpack:///./src/app/shared/services/csv-generator.service.ts","webpack:///./src/app/shared/services/stats.service.ts","webpack:///./src/app/shared/services/authentication.service.ts","webpack:///./src/app/shared/services/settings.service.ts","webpack:///./src async","webpack:///./src/main.ts","webpack:///./src/app/app-routing.module.ts","webpack:///./src/app/app.module.ts","webpack:///./src/app/shared/components/asset-editor/asset-editor.component.ts","webpack:///./src/app/shared/components/asset-uploader/asset-uploader.component.ts","webpack:///./src/app/shared/components/confirm/confirm.component.ts","webpack:///./src/app/shared/components/document-filters/document-filters.component.ts","webpack:///./src/app/shared/components/password-strength-bar/password-strength-bar.component.ts","webpack:///./src/app/shared/components/tabs/tabs.component.ts","webpack:///./src/app/shared/pipes/file-size.pipe.ts","webpack:///./src/app/shared/validators/password.validator.ts","webpack:///./src/app/+document-editor/document-editor.component.css","webpack:///./src/app/+document-list/document-list.component.css","webpack:///./src/app/+home/home.component.css","webpack:///./src/app/+login/login.component.css","webpack:///./src/app/+registration/registration.component.css","webpack:///./src/app/+stats/stats.component.css","webpack:///./src/app/app.component.css","webpack:///./src/app/shared/components/asset-editor/asset-editor.component.css","webpack:///./src/app/shared/components/asset-uploader/asset-uploader.component.css","webpack:///./src/app/shared/components/confirm/confirm.component.css","webpack:///./src/app/shared/components/document-filters/document-filters.component.css","webpack:///./src/app/shared/components/password-strength-bar/password-strength-bar.component.css","webpack:///./src/app/+document-editor/document-editor.component.html","webpack:///./src/app/+document-list/document-list.component.html","webpack:///./src/app/+home/home.component.html","webpack:///./src/app/+login/login.component.html","webpack:///./src/app/+registration/registration.component.html","webpack:///./src/app/+stats/stats.component.html","webpack:///./src/app/app.component.html","webpack:///./src/app/shared/components/asset-editor/asset-editor.component.html","webpack:///./src/app/shared/components/asset-uploader/asset-uploader.component.html","webpack:///./src/app/shared/components/confirm/confirm.component.html","webpack:///./src/app/shared/components/document-filters/document-filters.component.html","webpack:///./src/app/shared/components/password-strength-bar/password-strength-bar.component.html","webpack:///./src ^\\.\\/.*$"],"names":["webpackJsonp","117","module","exports","__webpack_require__","__WEBPACK_IMPORTED_MODULE_0__angular_core__","__WEBPACK_IMPORTED_MODULE_1__angular_http__","__WEBPACK_IMPORTED_MODULE_2_rxjs_Observable__","__WEBPACK_IMPORTED_MODULE_3_rxjs_add_operator_catch__","n","__WEBPACK_IMPORTED_MODULE_4__settings_service__","__WEBPACK_IMPORTED_MODULE_5__authentication_service__","d","CategoryService","__decorate","this","decorators","target","key","desc","c","arguments","length","r","Object","getOwnPropertyDescriptor","Reflect","decorate","i","defineProperty","__metadata","k","v","metadata","_http","_settings","_authService","prototype","getCategories","_this","url","apiBaseUrl","options","headers","createAuthHeaders","Content-Type","get","map","res","json","catch","error","throw","serverErrorMessage","_a","_b","_c","163","ConfirmService","164","LocalStorageService","retrieve","session","sessionStorage","getItem","localStorage","JSON","parse","store","value","setItem","stringify","remove","removeItem","clear","prefix","len","startsWith","235","__WEBPACK_IMPORTED_MODULE_4__environments_environment__","__WEBPACK_IMPORTED_MODULE_5__settings_service__","__WEBPACK_IMPORTED_MODULE_6__authentication_service__","DocumentService","getDocuments","filter","sb","push","appendQueryParam","pageNumber","toString","pageSize","creator","categories","invertCategories","title","author","description","yearMin","yearMax","sort","descending","join","getDocument","id","addDocument","document","post","deleteDocument","delete","name","charAt","encodeURIComponent","getAssetUri","format","production","azureAccountId","azureContainerName","236","UserService","getUsers","237","environment","377","__WEBPACK_IMPORTED_MODULE_1__angular_forms__","__WEBPACK_IMPORTED_MODULE_2__angular_router__","__WEBPACK_IMPORTED_MODULE_3_ng2_toastr_ng2_toastr__","__WEBPACK_IMPORTED_MODULE_4__shared_services_category_service__","__WEBPACK_IMPORTED_MODULE_5__shared_services_local_storage_service__","__WEBPACK_IMPORTED_MODULE_6__shared_services_settings_service__","__WEBPACK_IMPORTED_MODULE_7__shared_services_document_service__","__WEBPACK_IMPORTED_MODULE_8__shared_components_confirm_confirm_service__","DocumentEditorComponent","formBuilder","_router","_route","_toastr","_confirmService","_categoryService","_documentService","_settingsService","_localStorageService","_nextId","assets","currentYear","Date","getFullYear","category","control","required","year","group","ngOnInit","storagePrefix","initDocument","busy","subscribe","data","cancel","navigate","save","valid","_documentId","categoryId","publicationYear","addAssetsToDocument","success","asset","model","size","addAsset","now","utc","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","documentId","creatorId","timeCreated","timeModified","editAsset","deleteAsset","activate","then","result","indexOf","splice","console","log","onAssetChanged","onAssetUploaded","utcToLocal","date","offset","getTimezoneOffset","getTime","local","setMinutes","getMinutes","findCategory","_sub","params","loadDocument","doc","setValue","selector","template","styles","_d","_e","_f","_g","_h","_j","378","__WEBPACK_IMPORTED_MODULE_1__angular_router__","__WEBPACK_IMPORTED_MODULE_2_ng2_toastr_ng2_toastr__","__WEBPACK_IMPORTED_MODULE_3__shared_services_settings_service__","__WEBPACK_IMPORTED_MODULE_5__shared_services_document_service__","__WEBPACK_IMPORTED_MODULE_6__shared_components_confirm_confirm_service__","__WEBPACK_IMPORTED_MODULE_7__shared_services_local_storage_service__","DocumentListComponent","page","items","total","loadCategories","refresh","_filter","filtersChanged","pageChanged","event","editDocument","getCategoryName","_categories","379","HomeComponent","380","__WEBPACK_IMPORTED_MODULE_4__shared_services_authentication_service__","LoginComponent","_formBuilder","password","loginForm","userChanged","user","verified","isAuthenticated","getCurrentUser","resendConfirmEmail","email","err","login","381","__WEBPACK_IMPORTED_MODULE_5__shared_validators_password_validator__","RegistrationComponent","_userService","createUniqueEmailValidator","bind","createUniqueNameValidator","firstName","maxLength","lastName","compose","isValidPassword","confirmPassword","passwords","validator","areEqual","registration","service","Promise","resolve","reject","isNameRegistered","isExisting","uniqueName","isEmailRegistered","uniqueEmail","onSubmit","isBusy","pending","register","reset","382","__WEBPACK_IMPORTED_MODULE_3__shared_services_category_service__","__WEBPACK_IMPORTED_MODULE_4__shared_services_user_service__","__WEBPACK_IMPORTED_MODULE_5__shared_services_stats_service__","__WEBPACK_IMPORTED_MODULE_6__shared_services_chart_service__","__WEBPACK_IMPORTED_MODULE_7__shared_services_csv_generator_service__","StatsComponent","_statsService","_chartService","_csvService","keys","label","step","stats","chartData","labels","datasets","_countInChart","set","redrawChart","enumerable","configurable","_sizeInChart","sizeInChart","loadUsers","apply","getStatistics","convertKeys","setChartData","applyFilters","downloadData","csv","generateCsv","downloadCsv","users","findUser","_loop_1","cat","this_1","_loop_2","this_2","u","userName","countInChart","chartValid","buildChartData","383","__WEBPACK_IMPORTED_MODULE_3__shared_services_authentication_service__","AppComponent","toastr","vRef","setRootViewContainerRef","collapsed","logged","logout","384","TabComponent","active","String","385","__WEBPACK_IMPORTED_MODULE_3__authentication_service__","AdminGuardService","canActivate","warning","ok","role","386","__WEBPACK_IMPORTED_MODULE_2__settings_service__","__WEBPACK_IMPORTED_MODULE_4__authentication_service__","AuthGuardService","387","ChartService","results","count","countSet","sizeSet","388","CsvGeneratorService","columnSep","rowSep","y","x","row","hasOwnProperty","fileName","match","encodeURI","link","createElement","setAttribute","click","389","StatsService","42","__WEBPACK_IMPORTED_MODULE_5__local_storage_service__","AuthenticationService","_localStorage","Error","body","appBaseUrl","authBaseUrl","token","expires_in","expires_on","calculateExpirationDate","tokenStorageKey","Authorization","access_token","info","given_name","family_name","roles","email_verified","userStorageKey","emit","verifiedOnly","valueOf","auth","append","tokenResult","exp","setSeconds","43","__WEBPACK_IMPORTED_MODULE_1__environments_environment__","SettingsService","504","webpackEmptyContext","req","505","__WEBPACK_IMPORTED_MODULE_0__polyfills_ts__","__WEBPACK_IMPORTED_MODULE_1__angular_platform_browser_dynamic__","__WEBPACK_IMPORTED_MODULE_2__angular_core__","__WEBPACK_IMPORTED_MODULE_3__environments_environment__","__WEBPACK_IMPORTED_MODULE_4__app___","__WEBPACK_IMPORTED_MODULE_5_moment__","__WEBPACK_IMPORTED_MODULE_6_moment_locale_it__","bootstrapModule","624","__WEBPACK_IMPORTED_MODULE_2__document_editor_document_editor_component__","__WEBPACK_IMPORTED_MODULE_3__document_list_document_list_component__","__WEBPACK_IMPORTED_MODULE_4__home_home_component__","__WEBPACK_IMPORTED_MODULE_5__login_login_component__","__WEBPACK_IMPORTED_MODULE_6__registration_registration_component__","__WEBPACK_IMPORTED_MODULE_7__stats_stats_component__","__WEBPACK_IMPORTED_MODULE_8__shared_services_auth_guard_service__","__WEBPACK_IMPORTED_MODULE_9__shared_services_admin_guard_service__","PrinwebRoutingModule","routes","path","component","imports","forRoot","providers","625","__WEBPACK_IMPORTED_MODULE_0__angular_platform_browser__","__WEBPACK_IMPORTED_MODULE_1__angular_core__","__WEBPACK_IMPORTED_MODULE_2__angular_forms__","__WEBPACK_IMPORTED_MODULE_3__angular_http__","__WEBPACK_IMPORTED_MODULE_4__app_component__","__WEBPACK_IMPORTED_MODULE_5_ng2_toastr_ng2_toastr__","__WEBPACK_IMPORTED_MODULE_6_angular2_moment__","__WEBPACK_IMPORTED_MODULE_7_ng2_bootstrap__","__WEBPACK_IMPORTED_MODULE_8_ng2_select__","__WEBPACK_IMPORTED_MODULE_9_ng2_charts_ng2_charts__","__WEBPACK_IMPORTED_MODULE_10_ng2_file_upload__","__WEBPACK_IMPORTED_MODULE_11__shared_services_admin_guard_service__","__WEBPACK_IMPORTED_MODULE_12__shared_services_authentication_service__","__WEBPACK_IMPORTED_MODULE_13__shared_services_auth_guard_service__","__WEBPACK_IMPORTED_MODULE_14__shared_services_category_service__","__WEBPACK_IMPORTED_MODULE_15__shared_services_chart_service__","__WEBPACK_IMPORTED_MODULE_16__shared_components_confirm_confirm_service__","__WEBPACK_IMPORTED_MODULE_17__shared_services_csv_generator_service__","__WEBPACK_IMPORTED_MODULE_18__shared_services_document_service__","__WEBPACK_IMPORTED_MODULE_19__shared_services_local_storage_service__","__WEBPACK_IMPORTED_MODULE_20__shared_services_settings_service__","__WEBPACK_IMPORTED_MODULE_21__shared_services_stats_service__","__WEBPACK_IMPORTED_MODULE_22__shared_services_user_service__","__WEBPACK_IMPORTED_MODULE_23__shared_pipes_file_size_pipe__","__WEBPACK_IMPORTED_MODULE_24__shared_components_asset_editor_asset_editor_component__","__WEBPACK_IMPORTED_MODULE_25__shared_components_asset_uploader_asset_uploader_component__","__WEBPACK_IMPORTED_MODULE_26__shared_components_confirm_confirm_component__","__WEBPACK_IMPORTED_MODULE_27__shared_components_document_filters_document_filters_component__","__WEBPACK_IMPORTED_MODULE_28__shared_components_password_strength_bar_password_strength_bar_component__","__WEBPACK_IMPORTED_MODULE_29__app_routing_module__","__WEBPACK_IMPORTED_MODULE_30__shared_components_tabs_tabs_component__","__WEBPACK_IMPORTED_MODULE_31__shared_components_tabs_tab_component__","__WEBPACK_IMPORTED_MODULE_32__document_editor_document_editor_component__","__WEBPACK_IMPORTED_MODULE_33__document_list_document_list_component__","__WEBPACK_IMPORTED_MODULE_34__home_home_component__","__WEBPACK_IMPORTED_MODULE_35__login_login_component__","__WEBPACK_IMPORTED_MODULE_36__registration_registration_component__","__WEBPACK_IMPORTED_MODULE_37__stats_stats_component__","AppModule","declarations","bootstrap","626","__WEBPACK_IMPORTED_MODULE_1__app_module__","627","AssetEditorComponent","changed","formats","assetForm","_asset","loadAsset","saveAsset","trim","628","__WEBPACK_IMPORTED_MODULE_1_ng2_file_upload__","__WEBPACK_IMPORTED_MODULE_2__services_settings_service__","AssetUploaderComponent","uploaded","_assetId","uploader","assetId","onAfterAddingFile","file","withCredentials","_onCompleteItem","item","response","status","629","__WEBPACK_IMPORTED_MODULE_1__confirm_service__","ConfirmComponent","KEY_ESC","confirmService","_defaults","message","cancelText","okText","setLabels","promise","show","onkeyup","negativeOnClick","e","positiveOnClick","_confirmElement","_cancelButton","_okButton","style","opacity","zIndex","onclick","preventDefault","hideDialog","which","display","window","setTimeout","getElementById","630","__WEBPACK_IMPORTED_MODULE_3__services_category_service__","__WEBPACK_IMPORTED_MODULE_4__services_user_service__","DocumentFiltersComponent","sortTypes","categoryInverted","minYear","maxYear","sortType","sortDescending","filters","resetUsers","refreshCategoriesValue","categoriesValue","disabled","getFilter","categoriesElement","selected","text","Boolean","631","PasswordStrengthBarComponent","strengthChanged","_colors","measureStrength","p","force","regex","lowerLetters","test","upperLetters","numbers","symbols","flags","passedMatches","_i","flags_1","_flag","Math","min","getColor","s","idx","col","ngOnChanges","changes","currentValue","setBarColors","strength","_n","632","__WEBPACK_IMPORTED_MODULE_1__tab_component__","TabsComponent","ngAfterContentInit","activeTabs","tabs","tab","selectTab","first","toArray","forEach","633","FileSizePipe","_units","transform","bytes","precision","isFinite","unit","toFixed","634","PasswordValidator","passwordTooShort","noSymbolInPassword","noUpperInPassword","noLowerInPassword","635","__WEBPACK_IMPORTED_MODULE_0_core_js_es6_symbol__","__WEBPACK_IMPORTED_MODULE_1_core_js_es6_object__","__WEBPACK_IMPORTED_MODULE_2_core_js_es6_function__","__WEBPACK_IMPORTED_MODULE_3_core_js_es6_parse_int__","__WEBPACK_IMPORTED_MODULE_4_core_js_es6_parse_float__","__WEBPACK_IMPORTED_MODULE_5_core_js_es6_number__","__WEBPACK_IMPORTED_MODULE_6_core_js_es6_math__","__WEBPACK_IMPORTED_MODULE_7_core_js_es6_string__","__WEBPACK_IMPORTED_MODULE_8_core_js_es6_date__","__WEBPACK_IMPORTED_MODULE_9_core_js_es6_array__","__WEBPACK_IMPORTED_MODULE_10_core_js_es6_regexp__","__WEBPACK_IMPORTED_MODULE_11_core_js_es6_map__","__WEBPACK_IMPORTED_MODULE_12_core_js_es6_set__","__WEBPACK_IMPORTED_MODULE_13_core_js_es6_reflect__","__WEBPACK_IMPORTED_MODULE_14_core_js_es7_reflect__","__WEBPACK_IMPORTED_MODULE_15_zone_js_dist_zone__","831","832","833","834","835","836","837","838","839","840","841","842","843","844","845","846","847","848","849","850","851","852","853","854","892","893"],"mappings":"AAAAA,cAAc,EAAE,IAEVC,IACA,SAASC,EAAQC,EAASC,GAEhC,YACqB,IAAIC,GAA8CD,EAAoB,GAClEE,EAA8CF,EAAoB,IAClEG,EAAgDH,EAAoB,GAEpEI,GADwDJ,EAAoBK,EAAEF,GACtBH,EAAoB,MAE5EM,GADgEN,EAAoBK,EAAED,GACpCJ,EAAoB,KACtEO,EAAwDP,EAAoB,GACtEA,GAAoBQ,EAAET,EAAS,IAAK,WAAa,MAAOU,IACvF,IAAIC,GAAcC,MAAQA,KAAKD,YAAe,SAAUE,EAAYC,EAAQC,EAAKC,GAC7E,GAA2HP,GAAvHQ,EAAIC,UAAUC,OAAQC,EAAIH,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOK,OAAOC,yBAAyBR,EAAQC,GAAOC,CACrH,IAAuB,gBAAZO,UAAoD,kBAArBA,SAAQC,SAAyBJ,EAAIG,QAAQC,SAASX,EAAYC,EAAQC,EAAKC,OACpH,KAAK,GAAIS,GAAIZ,EAAWM,OAAS,EAAGM,GAAK,EAAGA,KAAShB,EAAII,EAAWY,MAAIL,GAAKH,EAAI,EAAIR,EAAEW,GAAKH,EAAI,EAAIR,EAAEK,EAAQC,EAAKK,GAAKX,EAAEK,EAAQC,KAASK,EAChJ,OAAOH,GAAI,GAAKG,GAAKC,OAAOK,eAAeZ,EAAQC,EAAKK,GAAIA,GAE5DO,EAAcf,MAAQA,KAAKe,YAAe,SAAUC,EAAGC,GACvD,GAAuB,gBAAZN,UAAoD,kBAArBA,SAAQO,SAAyB,MAAOP,SAAQO,SAASF,EAAGC,ICR1GnB,EAAA,WAEE,QAAAA,GACUqB,EACAC,EACAC,GAFArB,KAAAmB,QACAnB,KAAAoB,YACApB,KAAAqB,eAaZ,MAXSvB,GAAAwB,UAAAC,cAAP,cAAAC,GAAAxB,KACMyB,EAAMzB,KAAKoB,UAAUM,WAAa,aAElCC,GACFC,QAAS5B,KAAKqB,aAAaQ,mBACzBC,eAAgB,qBAGpB,OAAO9B,MAAKmB,MAAMY,IAAIN,EAAKE,GAASK,IAAI,SAACC,GAAkB,MAAAA,GAAIC,SAC5DC,MAAM,SAACC,GAAe,MAAA5C,GAAA,WAAW6C,MAAMD,EAAMF,OAAOE,OAASZ,EAAKJ,UAAUkB,uBAjBnFxC,EAAAC,GAACV,EAAAwB,EAAAvB,EAAA,cDoCOyB,EAAW,qBAA2L,mBAA5JwB,EAA4E,mBAAhEhD,GAA0D,GAAqBA,EAA0D,IAAqBgD,GAAO9B,OAA2M,mBAA1L+B,EAA2F,mBAA/E7C,GAAyE,GAAqBA,EAAyE,IAAqB6C,GAAO/B,OAAmO,mBAAlNgC,EAAuG,mBAA3F7C,GAAqF,GAAqBA,EAAqF,IAAqB6C,GAAOhC,UACprBX,EAEH,IAAIyC,GAAIC,EAAIC,MAMVC,IACA,SAASvD,EAAQC,EAASC,GAEhC,YACqB,IAAIC,GAA8CD,EAAoB,EAC5DA,GAAoBQ,EAAET,EAAS,IAAK,WAAa,MAAOuD,IACvF,IAAI5C,GAAcC,MAAQA,KAAKD,YAAe,SAAUE,EAAYC,EAAQC,EAAKC,GAC7E,GAA2HP,GAAvHQ,EAAIC,UAAUC,OAAQC,EAAIH,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOK,OAAOC,yBAAyBR,EAAQC,GAAOC,CACrH,IAAuB,gBAAZO,UAAoD,kBAArBA,SAAQC,SAAyBJ,EAAIG,QAAQC,SAASX,EAAYC,EAAQC,EAAKC,OACpH,KAAK,GAAIS,GAAIZ,EAAWM,OAAS,EAAGM,GAAK,EAAGA,KAAShB,EAAII,EAAWY,MAAIL,GAAKH,EAAI,EAAIR,EAAEW,GAAKH,EAAI,EAAIR,EAAEK,EAAQC,EAAKK,GAAKX,EAAEK,EAAQC,KAASK,EAChJ,OAAOH,GAAI,GAAKG,GAAKC,OAAOK,eAAeZ,EAAQC,EAAKK,GAAIA,GAE5DO,EAAcf,MAAQA,KAAKe,YAAe,SAAUC,EAAGC,GACvD,GAAuB,gBAAZN,UAAoD,kBAArBA,SAAQO,SAAyB,MAAOP,SAAQO,SAASF,EAAGC,IEnE1G0B,EAAA,mBAAAA,MAEA,MAHAA,GAAA5C,GAACV,EAAAwB,EAAAvB,EAAA,cF6EOyB,EAAW,yBACZ4B,OAODC,IACA,SAASzD,EAAQC,EAASC,GAEhC,YACqB,IAAIC,GAA8CD,EAAoB,EAC5DA,GAAoBQ,EAAET,EAAS,IAAK,WAAa,MAAOyD,IACvF,IAAI9C,GAAcC,MAAQA,KAAKD,YAAe,SAAUE,EAAYC,EAAQC,EAAKC,GAC7E,GAA2HP,GAAvHQ,EAAIC,UAAUC,OAAQC,EAAIH,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOK,OAAOC,yBAAyBR,EAAQC,GAAOC,CACrH,IAAuB,gBAAZO,UAAoD,kBAArBA,SAAQC,SAAyBJ,EAAIG,QAAQC,SAASX,EAAYC,EAAQC,EAAKC,OACpH,KAAK,GAAIS,GAAIZ,EAAWM,OAAS,EAAGM,GAAK,EAAGA,KAAShB,EAAII,EAAWY,MAAIL,GAAKH,EAAI,EAAIR,EAAEW,GAAKH,EAAI,EAAIR,EAAEK,EAAQC,EAAKK,GAAKX,EAAEK,EAAQC,KAASK,EAChJ,OAAOH,GAAI,GAAKG,GAAKC,OAAOK,eAAeZ,EAAQC,EAAKK,GAAIA,GAE5DO,EAAcf,MAAQA,KAAKe,YAAe,SAAUC,EAAGC,GACvD,GAAuB,gBAAZN,UAAoD,kBAArBA,SAAQO,SAAyB,MAAOP,SAAQO,SAASF,EAAGC,IGlG1G4B,EAAA,mBAAAA,MAiEA,MA3DWA,GAAAvB,UAAAwB,SAAP,SAAgB3C,EAAa4C,GAAA,SAAAA,OAAA,EACzB,IAAIb,GAAQa,EACRC,eAAeC,QAAQ9C,GACvB+C,aAAaD,QAAQ9C,EAEzB,OAAK+B,GAGEiB,KAAKC,MAAMlB,GAFP,MAWRW,EAAAvB,UAAA+B,MAAP,SAAalD,EAAamD,EAAYP,GAAA,SAAAA,OAAA,GAC9BA,EACAC,eAAeO,QAAQpD,EAAKgD,KAAKK,UAAUF,IAE3CJ,aAAaK,QAAQpD,EAAKgD,KAAKK,UAAUF,KAS1CT,EAAAvB,UAAAmC,OAAP,SAActD,EAAa4C,GAAA,SAAAA,OAAA,GACnBA,EACAC,eAAeU,WAAWvD,GAE1B+C,aAAaQ,WAAWvD,IAQzB0C,EAAAvB,UAAAqC,MAAP,SAAaC,EAAgBb,GAC3B,GAD2B,SAAAA,OAAA,GACvBA,EACF,IAAK,GAAIlC,GAAI,EAAGgD,EAAMb,eAAezC,OAAQM,EAAIgD,EAAKhD,IAAK,CACzD,GAAIV,GAAM6C,eAAe7C,IAAIU,EACzBV,GAAI2D,WAAWF,IACjBZ,eAAeU,WAAWvD,OAI9B,KAAK,GAAIU,GAAI,EAAGgD,EAAMX,aAAa3C,OAAQM,EAAIgD,EAAKhD,IAAK,CACvD,GAAIV,GAAM+C,aAAa/C,IAAIU,EACvBV,GAAI2D,WAAWF,IACjBV,aAAaQ,WAAWvD,KA7DpC0C,EAAA9C,GAACV,EAAAwB,EAAAvB,EAAA,cH8KOyB,EAAW,yBACZ8B,OAODkB,IACA,SAAS5E,EAAQC,EAASC,GAEhC,YACqB,IAAIC,GAA8CD,EAAoB,GAClEE,EAA8CF,EAAoB,IAClEG,EAAgDH,EAAoB,GAEpEI,GADwDJ,EAAoBK,EAAEF,GACtBH,EAAoB,MAE5E2E,GADgE3E,EAAoBK,EAAED,GAC5BJ,EAAoB,MAC9E4E,EAAkD5E,EAAoB,IACtE6E,EAAwD7E,EAAoB,GACtEA,GAAoBQ,EAAET,EAAS,IAAK,WAAa,MAAO+E,IACvF,IAAIpE,GAAcC,MAAQA,KAAKD,YAAe,SAAUE,EAAYC,EAAQC,EAAKC,GAC7E,GAA2HP,GAAvHQ,EAAIC,UAAUC,OAAQC,EAAIH,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOK,OAAOC,yBAAyBR,EAAQC,GAAOC,CACrH,IAAuB,gBAAZO,UAAoD,kBAArBA,SAAQC,SAAyBJ,EAAIG,QAAQC,SAASX,EAAYC,EAAQC,EAAKC,OACpH,KAAK,GAAIS,GAAIZ,EAAWM,OAAS,EAAGM,GAAK,EAAGA,KAAShB,EAAII,EAAWY,MAAIL,GAAKH,EAAI,EAAIR,EAAEW,GAAKH,EAAI,EAAIR,EAAEK,EAAQC,EAAKK,GAAKX,EAAEK,EAAQC,KAASK,EAChJ,OAAOH,GAAI,GAAKG,GAAKC,OAAOK,eAAeZ,EAAQC,EAAKK,GAAIA,GAE5DO,EAAcf,MAAQA,KAAKe,YAAe,SAAUC,EAAGC,GACvD,GAAuB,gBAAZN,UAAoD,kBAArBA,SAAQO,SAAyB,MAAOP,SAAQO,SAASF,EAAGC,IIxI1GkD,EAAA,WAEE,QAAAA,GAAoBhD,EACVC,EACAC,GAFUrB,KAAAmB,QACVnB,KAAAoB,YACApB,KAAAqB,eAmGZ,MAjGS8C,GAAA7C,UAAA8C,aAAP,SAAoBC,GAApB,GAAA7C,GAAAxB,KACMsE,IACJA,GAAGC,KAAKvE,KAAKoB,UAAUM,WAAa,cAEpC1B,KAAKwE,iBAAiB,aAAcH,EAAOI,WAAWC,WAAYJ,GAClEtE,KAAKwE,iBAAiB,WAAYH,EAAOM,SAASD,WAAYJ,GAE1DD,EAAOO,SACT5E,KAAKwE,iBAAiB,UAAWH,EAAOO,QAASN,GAE/CD,EAAOQ,YACT7E,KAAKwE,iBAAiB,aAAcH,EAAOQ,WAAYP,GAErDD,EAAOS,kBACT9E,KAAKwE,iBAAiB,mBAAoBH,EAAOS,iBAAmB,OAAS,QAASR,GAEpFD,EAAOU,OACT/E,KAAKwE,iBAAiB,QAASH,EAAOU,MAAOT,GAE3CD,EAAOW,QACThF,KAAKwE,iBAAiB,SAAUH,EAAOW,OAAQV,GAE7CD,EAAOY,aACTjF,KAAKwE,iBAAiB,cAAeH,EAAOY,YAAaX,GAEvDD,EAAOa,QAAU,GACnBlF,KAAKwE,iBAAiB,UAAWH,EAAOa,QAAQR,WAAYJ,GAE1DD,EAAOc,QAAU,GACnBnF,KAAKwE,iBAAiB,UAAWH,EAAOc,QAAQT,WAAYJ,GAE1DD,EAAOe,MACTpF,KAAKwE,iBAAiB,OAAQH,EAAOe,KAAKV,WAAYJ,GAEpDD,EAAOgB,YACTrF,KAAKwE,iBAAiB,aAAcH,EAAOgB,WAAa,OAAS,QAASf,EAG5E,IAAI3C,IACFC,QAAS5B,KAAKqB,aAAaQ,mBACzBC,eAAgB,qBAGpB,OAAO9B,MAAKmB,MAAMY,IAAIuC,EAAGgB,KAAK,IAAK3D,GAChCK,IAAI,SAACC,GAAkB,MAAAA,GAAIC,SAC3BC,MAAM,SAACC,GAAe,MAAA5C,GAAA,WAAW6C,MAAMD,EAAMF,OAAOE,OAASZ,EAAKJ,UAAUkB,uBAG1E6B,EAAA7C,UAAAiE,YAAP,SAAmBC,GAAnB,GAAAhE,GAAAxB,KACMyB,EAAMzB,KAAKoB,UAAUM,YAAa,aAAa8D,GAC/C7D,GACFC,QAAS5B,KAAKqB,aAAaQ,mBACzBC,eAAgB,qBAIpB,OAAO9B,MAAKmB,MAAMY,IAAIN,EAAKE,GACxBK,IAAI,SAACC,GAAkB,MAAAA,GAAIC,SAC3BC,MAAM,SAACC,GAAe,MAAA5C,GAAA,WAAW6C,MAAMD,EAAMF,OAAOE,OAASZ,EAAKJ,UAAUkB,uBAG1E6B,EAAA7C,UAAAmE,YAAP,SAAmBC,GACjB,GAAI/D,IACFC,QAAS5B,KAAKqB,aAAaQ,mBACzBC,eAAgB,qBAGpB,OAAO9B,MAAKmB,MAAMwE,KAAK3F,KAAKoB,UAAUM,WAAa,YACjDgE,EACA/D,IAGGwC,EAAA7C,UAAAsE,eAAP,SAAsBJ,GACpB,GAAI7D,IACFC,QAAS5B,KAAKqB,aAAaQ,mBACzBC,eAAgB,qBAGpB,OAAO9B,MAAKmB,MAAM0E,OAAO7F,KAAKoB,UAAUM,YAAa,aAAa8D,GAAM7D,IAGlEwC,EAAA7C,UAAAkD,iBAAR,SAAyBsB,EAAcxC,EAAegB,GACpD,GAAIzD,GAAIyD,EAAG/D,OAAS,CAChBM,IAAI,GAAMyD,EAAGzD,GAAGN,OAAS,GAAwC,MAAnC+D,EAAGzD,GAAGkF,OAAOzB,EAAGzD,GAAGN,OAAS,IAC5D+D,EAAGC,KAAK,KAEVD,EAAGC,KAAKyB,mBAAmBF,GAAQ,IACjCE,mBAAmB1C,KAGhBa,EAAA7C,UAAA2E,YAAP,SAAmBT,EAAYU,GAC7B,MAAIlC,GAAA,EAAYmC,WACP,UAAUnG,KAAKoB,UAAUgF,eAAc,0BAA0BpG,KAAKoB,UAAUiF,mBAAkB,IAAIb,EAAE,IAAIU,EAE5G,2CAA2ClG,KAAKoB,UAAUiF,mBAAkB,IAAIb,EAAE,IAAIU,GArGnG/B,EAAApE,GAACV,EAAAwB,EAAAvB,EAAA,cJmPOyB,EAAW,qBAA2L,mBAA5JwB,EAA4E,mBAAhEhD,GAA0D,GAAqBA,EAA0D,IAAqBgD,GAAO9B,OAA2M,mBAA1L+B,EAA2F,mBAA/EyB,GAAyE,GAAqBA,EAAyE,IAAqBzB,GAAO/B,OAAmO,mBAAlNgC,EAAuG,mBAA3FyB,GAAqF,GAAqBA,EAAqF,IAAqBzB,GAAOhC,UACprB0D,EAEH,IAAI5B,GAAIC,EAAIC,MAMV6D,IACA,SAASnH,EAAQC,EAASC,GAEhC,YACqB,IAAIC,GAA8CD,EAAoB,GAClEE,EAA8CF,EAAoB,IAClEG,EAAgDH,EAAoB,GAEpEI,GADwDJ,EAAoBK,EAAEF,GACtBH,EAAoB,MAE5EM,GADgEN,EAAoBK,EAAED,GACpCJ,EAAoB,KACtEO,EAAwDP,EAAoB,GACtEA,GAAoBQ,EAAET,EAAS,IAAK,WAAa,MAAOmH,IACvF,IAAIxG,GAAcC,MAAQA,KAAKD,YAAe,SAAUE,EAAYC,EAAQC,EAAKC,GAC7E,GAA2HP,GAAvHQ,EAAIC,UAAUC,OAAQC,EAAIH,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOK,OAAOC,yBAAyBR,EAAQC,GAAOC,CACrH,IAAuB,gBAAZO,UAAoD,kBAArBA,SAAQC,SAAyBJ,EAAIG,QAAQC,SAASX,EAAYC,EAAQC,EAAKC,OACpH,KAAK,GAAIS,GAAIZ,EAAWM,OAAS,EAAGM,GAAK,EAAGA,KAAShB,EAAII,EAAWY,MAAIL,GAAKH,EAAI,EAAIR,EAAEW,GAAKH,EAAI,EAAIR,EAAEK,EAAQC,EAAKK,GAAKX,EAAEK,EAAQC,KAASK,EAChJ,OAAOH,GAAI,GAAKG,GAAKC,OAAOK,eAAeZ,EAAQC,EAAKK,GAAIA,GAE5DO,EAAcf,MAAQA,KAAKe,YAAe,SAAUC,EAAGC,GACvD,GAAuB,gBAAZN,UAAoD,kBAArBA,SAAQO,SAAyB,MAAOP,SAAQO,SAASF,EAAGC,IKrU1GsF,EAAA,WAEE,QAAAA,GACUpF,EACAC,EACAC,GAFArB,KAAAmB,QACAnB,KAAAoB,YACApB,KAAAqB,eAcZ,MAZSkF,GAAAjF,UAAAkF,SAAP,cAAAhF,GAAAxB,KACMyB,EAAMzB,KAAKoB,UAAUM,WAAa,QAClCC,GACFC,QAAS5B,KAAKqB,aAAaQ,mBACzBC,eAAgB,qBAIpB,OAAO9B,MAAKmB,MAAMY,IAAIN,EAAKE,GACxBK,IAAI,SAACC,GAAkB,MAAAA,GAAIC,SAC3BC,MAAM,SAACC,GAAe,MAAA5C,GAAA,WAAW6C,MAAMD,EAAMF,OAAOE,OAASZ,EAAKJ,UAAUkB,uBAlBnFiE,EAAAxG,GAACV,EAAAwB,EAAAvB,EAAA,cLkWOyB,EAAW,qBAA2L,mBAA5JwB,EAA4E,mBAAhEhD,GAA0D,GAAqBA,EAA0D,IAAqBgD,GAAO9B,OAA2M,mBAA1L+B,EAA2F,mBAA/E7C,GAAyE,GAAqBA,EAAyE,IAAqB6C,GAAO/B,OAAmO,mBAAlNgC,EAAuG,mBAA3F7C,GAAqF,GAAqBA,EAAqF,IAAqB6C,GAAOhC,UACprB8F,EAEH,IAAIhE,GAAIC,EAAIC,MAMVgE,IACA,SAAStH,EAAQC,EAASC,GAEhC,YAC+BA,GAAoBQ,EAAET,EAAS,IAAK,WAAa,MAAOsH,IM7XhF,IAAMA,IACXP,YAAY,INoYRQ,IACA,SAASxH,EAAQC,EAASC,GAEhC,YACqB,IAAIC,GAA8CD,EAAoB,GAClEuH,EAA+CvH,EAAoB,IACnEwH,EAAgDxH,EAAoB,IACpEyH,EAAsDzH,EAAoB,IAE1E0H,GAD8D1H,EAAoBK,EAAEoH,GAClBzH,EAAoB,MACtF2H,EAAuE3H,EAAoB,KAC3F4H,EAAkE5H,EAAoB,IACtF6H,EAAkE7H,EAAoB,KACtF8H,EAA2E9H,EAAoB,IACzFA,GAAoBQ,EAAET,EAAS,IAAK,WAAa,MAAOgI,IACvF,IAAIrH,GAAcC,MAAQA,KAAKD,YAAe,SAAUE,EAAYC,EAAQC,EAAKC,GAC7E,GAA2HP,GAAvHQ,EAAIC,UAAUC,OAAQC,EAAIH,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOK,OAAOC,yBAAyBR,EAAQC,GAAOC,CACrH,IAAuB,gBAAZO,UAAoD,kBAArBA,SAAQC,SAAyBJ,EAAIG,QAAQC,SAASX,EAAYC,EAAQC,EAAKC,OACpH,KAAK,GAAIS,GAAIZ,EAAWM,OAAS,EAAGM,GAAK,EAAGA,KAAShB,EAAII,EAAWY,MAAIL,GAAKH,EAAI,EAAIR,EAAEW,GAAKH,EAAI,EAAIR,EAAEK,EAAQC,EAAKK,GAAKX,EAAEK,EAAQC,KAASK,EAChJ,OAAOH,GAAI,GAAKG,GAAKC,OAAOK,eAAeZ,EAAQC,EAAKK,GAAIA,GAE5DO,EAAcf,MAAQA,KAAKe,YAAe,SAAUC,EAAGC,GACvD,GAAuB,gBAAZN,UAAoD,kBAArBA,SAAQO,SAAyB,MAAOP,SAAQO,SAASF,EAAGC,IO1Y1GmG,EAAA,WAkBE,QAAAA,GAAYC,EACFC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,GAPA7H,KAAAsH,UACAtH,KAAAuH,SACAvH,KAAAwH,UACAxH,KAAAyH,kBACAzH,KAAA0H,mBACA1H,KAAA2H,mBACA3H,KAAA4H,mBACA5H,KAAA6H,uBAER7H,KAAK8H,QAAU,EACf9H,KAAK+H,UACL/H,KAAKgI,aAAc,GAAIC,OAAOC,cAC9BlI,KAAKmI,SAAWd,EAAYe,QAAQ,KAAMxB,EAAA,WAAWyB,UACrDrI,KAAK+E,MAAQsC,EAAYe,QAAQ,KAAMxB,EAAA,WAAWyB,UAClDrI,KAAKgF,OAASqC,EAAYe,QAAQ,KAAMxB,EAAA,WAAWyB,UACnDrI,KAAKiF,YAAcoC,EAAYe,QAAQ,KAAMxB,EAAA,WAAWyB,UACxDrI,KAAKsI,KAAOjB,EAAYe,QAAQ,EAAGxB,EAAA,WAAWyB,UAE9CrI,KAAK0F,SAAW2B,EAAYkB,OAC1BJ,SAAYnI,KAAKmI,SACjBpD,MAAS/E,KAAK+E,MACdC,OAAUhF,KAAKgF,OACfC,YAAejF,KAAKiF,YACpBqD,KAAQtI,KAAKsI,OAkNnB,MA9MElB,GAAA9F,UAAAkH,SAAA,cAAAhH,GAAAxB,IAEEA,MAAK6E,WAAa7E,KAAK6H,qBAAqB/E,SAC1C9C,KAAK4H,iBAAiBa,cAAgB,cAAc,GAEjDzI,KAAK6E,WAoBR7E,KAAK0I,gBAnBL1I,KAAK2I,MAAO,EACZ3I,KAAK0H,iBAAiBnG,gBACnBqH,UACD,SAACC,GACCrH,EAAKqD,WAAagE,EAElBrH,EAAKqG,qBAAqBxE,MACxB7B,EAAKoG,iBAAiBa,cAAgB,aAAcI,GAAM,IAE9D,SAAAzG,GACEZ,EAAKgG,QAAQpF,MAAMA,GACnBZ,EAAKmH,MAAO,GAEd,WACEnH,EAAKmH,MAAO,EACZnH,EAAKkH,mBAQNtB,EAAA9F,UAAAwH,OAAP,WACE9I,KAAKsH,QAAQyB,UAAU,gBAGlB3B,EAAA9F,UAAA0H,KAAP,cAAAxH,GAAAxB,IACE,IAAKA,KAAK0F,SAASuD,MAAnB,CAGAjJ,KAAK2I,MAAO,CACZ,IAAI9I,IACF2F,GAAIxF,KAAKkJ,YACTC,WAAYnJ,KAAKmI,SAAS7E,MAAMkC,GAChCT,MAAO/E,KAAK+E,MAAMzB,MAClB0B,OAAQhF,KAAKgF,OAAO1B,MACpB2B,YAAajF,KAAKiF,YAAY3B,MAC9B8F,gBAAiBpJ,KAAKsI,KAAKhF,MAE7BtD,MAAKqJ,oBAAoBxJ,GACzBG,KAAK2H,iBAAiBlC,YAAY5F,GAC/B+I,UACD,WACEpH,EAAKgG,QAAQ8B,QAAQ,qBACrB9H,EAAK8F,QAAQyB,UAAU,gBAEzB,SAAA3G,GACEZ,EAAKgG,QAAQpF,MAAMA,GACnBZ,EAAKmH,MAAO,GAEd,WACEnH,EAAKmH,MAAO,MAKXvB,EAAA9F,UAAA2E,YAAP,SAAmBT,EAAYU,GAC7B,MAAOlG,MAAK2H,iBAAiB1B,YAAYT,EAAIU,IAGvCkB,EAAA9F,UAAA+H,oBAAR,SAA4B3D,GAC1B,GAA2B,IAAvB1F,KAAK+H,OAAOxH,OAAhB,CAIAmF,EAASqC,SACT,KAAK,GAAIlH,GAAI,EAAGA,EAAIb,KAAK+H,OAAOxH,OAAQM,IAAK,CAC3C,GAAI0I,GAAQvJ,KAAK+H,OAAOlH,GACpB2I,GACFhE,GAA2B,MAAvB+D,EAAM/D,GAAGO,OAAO,GAAa,KAAOwD,EAAM/D,GAC9CU,OAAQqD,EAAMrD,OACdnB,MAAOwE,EAAMxE,MACbE,YAAasE,EAAMtE,YACnBwE,KAAMF,EAAME,KAEd/D,GAASqC,OAAOxD,KAAKiF,MAIlBpC,EAAA9F,UAAAoI,SAAP,WACE,IAAI1J,KAAK2I,KAAT,CAGA,GAAIgB,GAAM,GAAI1B,MACV2B,EAAM,GAAI3B,MAAK0B,EAAIE,iBAAkBF,EAAIG,cAAeH,EAAII,aAC9DJ,EAAIK,cAAeL,EAAIM,gBAAiBN,EAAIO,gBAE9ClK,MAAKuJ,OACH/D,GAAI,KACJ2E,WAAYnK,KAAKkJ,YACjBkB,UAAW,KACXlE,OAAQ,UACRuD,KAAM,EACN1E,MAAO/E,KAAK+E,MAAMzB,MAClB2B,YAAajF,KAAKiF,YAAY3B,MAC9B+G,YAAaT,EACbU,aAAcV,KAIXxC,EAAA9F,UAAAiJ,UAAP,SAAiBhB,GACXvJ,KAAK2I,OAGT3I,KAAKuJ,MAAQA,IAGRnC,EAAA9F,UAAAkJ,YAAP,SAAmBjB,GAAnB,GAAA/H,GAAAxB,IACMA,MAAK2I,MAGT3I,KAAKyH,gBAAgBgD,SAAS,4BAC3BC,KAAK,SAAAC,GACJ,GAAKA,EAAL,CAGA,GAAI9J,GAAIW,EAAKuG,OAAO6C,QAAQrB,EACxB1I,IAAI,GACNW,EAAKuG,OAAO8C,OAAOhK,EAAG,MAEvBsB,MAAM,SAAAC,GACP0I,QAAQC,IAAI3I,MAIXgF,EAAA9F,UAAA0J,eAAP,SAAsBzB,GAEfA,EAAM/D,KAETxF,KAAK8H,UACLyB,EAAM/D,GAAK,IAAIxF,KAAK8H,QACpB9H,KAAK+H,OAAOxD,KAAKgF,IAEnBvJ,KAAKuJ,MAAQ,MAGRnC,EAAA9F,UAAA2J,gBAAP,SAAuBxB,GACjBzJ,KAAKuJ,QACPvJ,KAAKuJ,MAAME,KAAOA,IAIfrC,EAAA9F,UAAA4J,WAAP,SAAkBC,GAGhB,GAAIC,IAAS,GAAInD,OAAOoD,mBACnBF,GAAKG,UACRH,EAAO,GAAIlD,MAAKkD,GAElB,IAAII,GAAQ,GAAItD,MAAKkD,EAAKG,UAE1B,OADAC,GAAMC,WAAWD,EAAME,aAAeL,GAC/BG,GAGDnE,EAAA9F,UAAAoK,aAAR,SAAqBlG,GACnB,IAAKxF,KAAK6E,WACR,MAAO,KAET,KAAK,GAAIhE,GAAI,EAAGA,EAAIb,KAAK6E,WAAWtE,OAAQM,IAC1C,GAAIb,KAAK6E,WAAWhE,GAAG2E,KAAOA,EAC5B,MAAOxF,MAAK6E,WAAWhE,EAG3B,OAAO,OAGDuG,EAAA9F,UAAAoH,aAAR,cAAAlH,GAAAxB,IAGEA,MAAK2L,KAAO3L,KAAKuH,OAAOqE,OAAOhD,UAAU,SAAAgD,GACvCpK,EAAK0H,YAAc0C,EAAW,GAC1BpK,EAAK0H,aACP1H,EAAKqK,aAAarK,EAAK0H,gBAKrB9B,EAAA9F,UAAAuK,aAAR,SAAqBrG,GAArB,GAAAhE,GAAAxB,IACEA,MAAK2I,MAAO,EACZ3I,KAAK2H,iBAAiBpC,YAAYC,GAC/BoD,UACD,SAACkD,GACCtK,EAAK0H,YAAc4C,EAAItG,GACvBhE,EAAK2G,SAAS4D,SAASvK,EAAKkK,aAAaI,EAAI3C,aAC7C3H,EAAKuD,MAAMgH,SAASD,EAAI/G,OACxBvD,EAAKwD,OAAO+G,SAASD,EAAI9G,QACzBxD,EAAKyD,YAAY8G,SAASD,EAAI7G,aAC9BzD,EAAK8G,KAAKyD,SAASD,EAAI1C,iBACvB5H,EAAKuG,OAAS+D,EAAI/D,YAEpB,SAAA3F,GACEZ,EAAKgG,QAAQpF,MAAMA,GACnBZ,EAAKmH,MAAO,GAEd,WACEnH,EAAKmH,MAAO,KA7PpBvB,EAAArH,GAACV,EAAAwB,EAAAvB,EAAA,YACC0M,SAAU,sBACVC,SAAA5M,EAAA,KACA6M,QAAA7M,EAAA,QP4mBM0B,EAAW,qBAA2L,mBAA5JwB,EAA4E,mBAAhEqE,GAA0D,aAAqBA,EAA0D,cAAqBrE,GAAO9B,OAAqL,mBAApK+B,EAAgF,mBAApEqE,GAA8D,GAAqBA,EAA8D,IAAqBrE,GAAO/B,OAAqM,mBAApLgC,EAAwF,mBAA5EoE,GAAsE,GAAqBA,EAAsE,IAAqBpE,GAAOhC,OAA+L,mBAA9K0L,EAAqF,mBAAzErF,GAAmE,eAAqBA,EAAmE,gBAAqBqF,GAAO1L,OAA2P,mBAA1O2L,EAAmH,mBAAvGjF,GAAiG,GAAqBA,EAAiG,IAAqBiF,GAAO3L,OAA2O,mBAA1N4L,EAA2G,mBAA/FtF,GAAyF,GAAqBA,EAAyF,IAAqBsF,GAAO5L,OAA2O,mBAA1N6L,EAA2G,mBAA/FpF,GAAyF,GAAqBA,EAAyF,IAAqBoF,GAAO7L,OAA2O,mBAA1N8L,EAA2G,mBAA/FtF,GAAyF,GAAqBA,EAAyF,IAAqBsF,GAAO9L,OAA6P,mBAA5O+L,EAAoH,mBAAxGxF,GAAkG,GAAqBA,EAAkG,IAAqBwF,GAAO/L,UACtnE2G,EAEH,IAAI7E,GAAIC,EAAIC,EAAI0J,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,MAMlCC,IACA,SAAStN,EAAQC,EAASC,GAEhC,YACqB,IAAIC,GAA8CD,EAAoB,GAClEqN,EAAgDrN,EAAoB,IACpEsN,EAAsDtN,EAAoB,IAE1EuN,GAD8DvN,EAAoBK,EAAEiN,GAClBtN,EAAoB,KACtF0H,EAAkE1H,EAAoB,KACtFwN,EAAkExN,EAAoB,KACtFyN,EAA2EzN,EAAoB,KAC/F0N,EAAuE1N,EAAoB,IACrFA,GAAoBQ,EAAET,EAAS,IAAK,WAAa,MAAO4N,IACvF,IAAIjN,GAAcC,MAAQA,KAAKD,YAAe,SAAUE,EAAYC,EAAQC,EAAKC,GAC7E,GAA2HP,GAAvHQ,EAAIC,UAAUC,OAAQC,EAAIH,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOK,OAAOC,yBAAyBR,EAAQC,GAAOC,CACrH,IAAuB,gBAAZO,UAAoD,kBAArBA,SAAQC,SAAyBJ,EAAIG,QAAQC,SAASX,EAAYC,EAAQC,EAAKC,OACpH,KAAK,GAAIS,GAAIZ,EAAWM,OAAS,EAAGM,GAAK,EAAGA,KAAShB,EAAII,EAAWY,MAAIL,GAAKH,EAAI,EAAIR,EAAEW,GAAKH,EAAI,EAAIR,EAAEK,EAAQC,EAAKK,GAAKX,EAAEK,EAAQC,KAASK,EAChJ,OAAOH,GAAI,GAAKG,GAAKC,OAAOK,eAAeZ,EAAQC,EAAKK,GAAIA,GAE5DO,EAAcf,MAAQA,KAAKe,YAAe,SAAUC,EAAGC,GACvD,GAAuB,gBAAZN,UAAoD,kBAArBA,SAAQO,SAAyB,MAAOP,SAAQO,SAASF,EAAGC,IQxoB1G+L,EAAA,WASE,QAAAA,GACU1F,EACAE,EACApG,EACAuG,EACAF,EACAC,EACAG,GANA7H,KAAAsH,UACAtH,KAAAwH,UACAxH,KAAAoB,YACApB,KAAA2H,mBACA3H,KAAAyH,kBACAzH,KAAA0H,mBACA1H,KAAA6H,uBAER7H,KAAK2E,SAAW3E,KAAKoB,UAAUuD,SAC/B3E,KAAKiN,MACHC,SACAC,MAAO,GAyHb,MArHEH,GAAA1L,UAAAkH,SAAA,WACExI,KAAKoN,iBACLpN,KAAKyE,WAAa,EAClBzE,KAAKqN,WAGAL,EAAA1L,UAAA+L,QAAP,cAAA7L,GAAAxB,IACMA,MAAK2I,OAIT3I,KAAK2I,MAAO,EAER3I,KAAKsN,UACPtN,KAAKsN,QAAQ7I,WAAazE,KAAKyE,WAC/BzE,KAAKsN,QAAQ3I,SAAW3E,KAAK2E,UAG/B3E,KAAK2H,iBAAiBvD,aAAapE,KAAKsN,UACtC7I,WAAYzE,KAAKyE,WACjBE,SAAU3E,KAAK2E,SACfS,KAAM,EACNC,YAAY,IAEXuD,UACD,SAACC,GACCrH,EAAKyL,KAAOpE,GAEd,SAAAzG,GACEZ,EAAKgG,QAAQpF,MAAMA,GACnBZ,EAAKmH,MAAO,GAEd,WACEnH,EAAKmH,MAAO,MAKXqE,EAAA1L,UAAAiM,eAAP,SAAsBlJ,GACpBrE,KAAKsN,QAAUjJ,EACfrE,KAAKyE,WAAa,EAClBzE,KAAKqN,WAIAL,EAAA1L,UAAAkM,YAAP,SAAmBC,GACjBzN,KAAKyE,WAAagJ,EAAMR,KACxBjN,KAAKqN,WAGAL,EAAA1L,UAAAmE,YAAP,WACEzF,KAAKsH,QAAQyB,UAAU,aAAc,MAGhCiE,EAAA1L,UAAAoM,aAAP,SAAoBlI,GAClBxF,KAAKsH,QAAQyB,UAAU,aAAcvD,KAGhCwH,EAAA1L,UAAAsE,eAAP,SAAsBJ,GAAtB,GAAAhE,GAAAxB,IACMA,MAAK2I,MAGT3I,KAAKyH,gBAAgBgD,SAAS,4BAC3BC,KAAK,SAAAC,GACCA,IAGLnJ,EAAKmH,MAAO,EACZnH,EAAKmG,iBAAiB/B,eAAeJ,GAClCoD,UACD,WACEpH,EAAK6L,WAEP,SAAAjL,GACEZ,EAAKgG,QAAQpF,MAAMA,GACnBZ,EAAKmH,MAAO,GAEd,WACEnH,EAAKmH,MAAO,OAGfxG,MAAM,SAAAC,GACP0I,QAAQC,IAAI3I,MAIX4K,EAAA1L,UAAAqM,gBAAP,SAAuBnI,GACrB,IAAKxF,KAAK4N,YACR,MAAOpI,EAET,KAAK,GAAI3E,GAAI,EAAGA,EAAIb,KAAK4N,YAAYrN,OAAQM,IAC3C,GAAIb,KAAK4N,YAAY/M,GAAG2E,KAAOA,EAC7B,MAAOxF,MAAK4N,YAAY/M,GAAGiF,IAG/B,OAAON,IAGDwH,EAAA1L,UAAA8L,eAAR,cAAA5L,GAAAxB,IACEA,MAAK4N,YAAc5N,KAAK6H,qBAAqB/E,SAC3C9C,KAAKoB,UAAUqH,cAAgB,cAAc,GAE1CzI,KAAK4N,aACR5N,KAAK0H,iBAAiBnG,gBACnBqH,UACD,SAACC,GACCrH,EAAKoM,YAAc/E,EAEnBrH,EAAKqG,qBAAqBxE,MACxB7B,EAAKJ,UAAUqH,cAAgB,aAAcI,GAAM,IAEvD,SAAAzG,GACEZ,EAAKgG,QAAQpF,MAAMA,GACnBZ,EAAKmH,MAAO,KA/ItBqE,EAAAjN,GAACV,EAAAwB,EAAAvB,EAAA,YACC0M,SAAU,oBACVC,SAAA5M,EAAA,KACA6M,QAAA7M,EAAA,QRywBM0B,EAAW,qBAAmM,mBAApKwB,EAAgF,mBAApEmK,GAA8D,GAAqBA,EAA8D,IAAqBnK,GAAO9B,OAA+L,mBAA9K+B,EAAqF,mBAAzEmK,GAAmE,eAAqBA,EAAmE,gBAAqBnK,GAAO/B,OAA2O,mBAA1NgC,EAA2G,mBAA/FmK,GAAyF,GAAqBA,EAAyF,IAAqBnK,GAAOhC,OAA2O,mBAA1N0L,EAA2G,mBAA/FU,GAAyF,GAAqBA,EAAyF,IAAqBV,GAAO1L,OAA2P,mBAA1O2L,EAAmH,mBAAvGU,GAAiG,GAAqBA,EAAiG,IAAqBV,GAAO3L,OAA2O,mBAA1N4L,EAA2G,mBAA/FtF,GAAyF,GAAqBA,EAAyF,IAAqBsF,GAAO5L,OAA6P,mBAA5O6L,EAAoH,mBAAxGS,GAAkG,GAAqBA,EAAkG,IAAqBT,GAAO7L,UAC1tDuM,EAEH,IAAIzK,GAAIC,EAAIC,EAAI0J,EAAIC,EAAIC,EAAIC,MAM1BuB,IACA,SAAS1O,EAAQC,EAASC,GAEhC,YACqB,IAAIC,GAA8CD,EAAoB,EAC5DA,GAAoBQ,EAAET,EAAS,IAAK,WAAa,MAAO0O,IACvF,IAAI/N,GAAcC,MAAQA,KAAKD,YAAe,SAAUE,EAAYC,EAAQC,EAAKC,GAC7E,GAA2HP,GAAvHQ,EAAIC,UAAUC,OAAQC,EAAIH,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOK,OAAOC,yBAAyBR,EAAQC,GAAOC,CACrH,IAAuB,gBAAZO,UAAoD,kBAArBA,SAAQC,SAAyBJ,EAAIG,QAAQC,SAASX,EAAYC,EAAQC,EAAKC,OACpH,KAAK,GAAIS,GAAIZ,EAAWM,OAAS,EAAGM,GAAK,EAAGA,KAAShB,EAAII,EAAWY,MAAIL,GAAKH,EAAI,EAAIR,EAAEW,GAAKH,EAAI,EAAIR,EAAEK,EAAQC,EAAKK,GAAKX,EAAEK,EAAQC,KAASK,EAChJ,OAAOH,GAAI,GAAKG,GAAKC,OAAOK,eAAeZ,EAAQC,EAAKK,GAAIA,GAE5DO,EAAcf,MAAQA,KAAKe,YAAe,SAAUC,EAAGC,GACvD,GAAuB,gBAAZN,UAAoD,kBAArBA,SAAQO,SAAyB,MAAOP,SAAQO,SAASF,EAAGC,ISvyB1G6M,EAAA,WAEE,QAAAA,MAKF,MAHEA,GAAAxM,UAAAkH,SAAA,aATFsF,EAAA/N,GAACV,EAAAwB,EAAAvB,EAAA,YACC0M,SAAU,WACVC,SAAA5M,EAAA,KACA6M,QAAA7M,EAAA,QTuzBM0B,EAAW,yBACZ+M,OAODC,IACA,SAAS5O,EAAQC,EAASC,GAEhC,YACqB,IAAIC,GAA8CD,EAAoB,GAClEuH,EAA+CvH,EAAoB,IACnEwH,EAAgDxH,EAAoB,IACpEyH,EAAsDzH,EAAoB,IAE1E2O,GAD8D3O,EAAoBK,EAAEoH,GACZzH,EAAoB,IACtFA,GAAoBQ,EAAET,EAAS,IAAK,WAAa,MAAO6O,IACvF,IAAIlO,GAAcC,MAAQA,KAAKD,YAAe,SAAUE,EAAYC,EAAQC,EAAKC,GAC7E,GAA2HP,GAAvHQ,EAAIC,UAAUC,OAAQC,EAAIH,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOK,OAAOC,yBAAyBR,EAAQC,GAAOC,CACrH,IAAuB,gBAAZO,UAAoD,kBAArBA,SAAQC,SAAyBJ,EAAIG,QAAQC,SAASX,EAAYC,EAAQC,EAAKC,OACpH,KAAK,GAAIS,GAAIZ,EAAWM,OAAS,EAAGM,GAAK,EAAGA,KAAShB,EAAII,EAAWY,MAAIL,GAAKH,EAAI,EAAIR,EAAEW,GAAKH,EAAI,EAAIR,EAAEK,EAAQC,EAAKK,GAAKX,EAAEK,EAAQC,KAASK,EAChJ,OAAOH,GAAI,GAAKG,GAAKC,OAAOK,eAAeZ,EAAQC,EAAKK,GAAIA,GAE5DO,EAAcf,MAAQA,KAAKe,YAAe,SAAUC,EAAGC,GACvD,GAAuB,gBAAZN,UAAoD,kBAArBA,SAAQO,SAAyB,MAAOP,SAAQO,SAASF,EAAGC,IUx0B1GgN,EAAA,WAOE,QAAAA,GAAoB3G,EACV4G,EACA7M,EACAmG,GAVZ,GAAAhG,GAAAxB,IAOsBA,MAAAsH,UACVtH,KAAAkO,eACAlO,KAAAqB,eACArB,KAAAwH,UAGRxH,KAAK8F,KAAO9F,KAAKkO,aAAa9F,QAAQ,GAAIxB,EAAA,WAAWyB,UACrDrI,KAAKmO,SAAWnO,KAAKkO,aAAa9F,QAAQ,GAAIxB,EAAA,WAAWyB,UACzDrI,KAAKoO,UAAYpO,KAAKkO,aAAa3F,OACjCzC,KAAQ9F,KAAK8F,KACbqI,SAAYnO,KAAKmO,WAGnBnO,KAAKqB,aAAagN,YAAYzF,UAAU,SAAC0F,GACvC9M,EAAK8M,KAAOA,EACRA,GACEA,EAAKC,UACP/M,EAAK8F,QAAQyB,UAAU,iBAkCjC,MA5BEkF,GAAA3M,UAAAkH,SAAA,WACOxI,KAAKqB,aAAamN,iBAAgB,GAGrCxO,KAAKsO,KAAOtO,KAAKqB,aAAaoN,iBAF9BzO,KAAKsO,KAAO,MAMTL,EAAA3M,UAAAoN,mBAAP,cAAAlN,GAAAxB,IACOA,MAAKsO,MAGVtO,KAAKqB,aAAaqN,mBAAmB1O,KAAKsO,KAAKK,OAC5C/F,UAAU,WACTpH,EAAKgG,QAAQ8B,QAAQ,mCAAoC9H,EAAK8M,KAAKK,QAErE,SAACC,GACCpN,EAAKgG,QAAQpF,MAAMwM,MAIlBX,EAAA3M,UAAAuN,MAAP,SAAatG,GACNvI,KAAKoO,UAAUnF,OAIpBjJ,KAAKqB,aAAawN,MAAM7O,KAAK8F,KAAKxC,MAAOtD,KAAKmO,SAAS7K,QA7D3D2K,EAAAlO,GAACV,EAAAwB,EAAAvB,EAAA,YACC0M,SAAU,YACVC,SAAA5M,EAAA,KACA6M,QAAA7M,EAAA,QVw4BM0B,EAAW,qBAAmM,mBAApKwB,EAAgF,mBAApEsE,GAA8D,GAAqBA,EAA8D,IAAqBtE,GAAO9B,OAA6K,mBAA5J+B,EAA4E,mBAAhEoE,GAA0D,aAAqBA,EAA0D,cAAqBpE,GAAO/B,OAAmQ,mBAAlPgC,EAAuH,mBAA3GuL,GAAqG,GAAqBA,EAAqG,IAAqBvL,GAAOhC,OAA+L,mBAA9K0L,EAAqF,mBAAzErF,GAAmE,eAAqBA,EAAmE,gBAAqBqF,GAAO1L,UACl5BwN,EAEH,IAAI1L,GAAIC,EAAIC,EAAI0J,MAMd2C,IACA,SAAS3P,EAAQC,EAASC,GAEhC,YACqB,IAAIC,GAA8CD,EAAoB,GAClEuH,EAA+CvH,EAAoB,IACnEwH,EAAgDxH,EAAoB,IACpEyH,EAAsDzH,EAAoB,IAE1E2O,GAD8D3O,EAAoBK,EAAEoH,GACZzH,EAAoB,KAC5F0P,EAAsE1P,EAAoB,IACpFA,GAAoBQ,EAAET,EAAS,IAAK,WAAa,MAAO4P,IACvF,IAAIjP,GAAcC,MAAQA,KAAKD,YAAe,SAAUE,EAAYC,EAAQC,EAAKC,GAC7E,GAA2HP,GAAvHQ,EAAIC,UAAUC,OAAQC,EAAIH,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOK,OAAOC,yBAAyBR,EAAQC,GAAOC,CACrH,IAAuB,gBAAZO,UAAoD,kBAArBA,SAAQC,SAAyBJ,EAAIG,QAAQC,SAASX,EAAYC,EAAQC,EAAKC,OACpH,KAAK,GAAIS,GAAIZ,EAAWM,OAAS,EAAGM,GAAK,EAAGA,KAAShB,EAAII,EAAWY,MAAIL,GAAKH,EAAI,EAAIR,EAAEW,GAAKH,EAAI,EAAIR,EAAEK,EAAQC,EAAKK,GAAKX,EAAEK,EAAQC,KAASK,EAChJ,OAAOH,GAAI,GAAKG,GAAKC,OAAOK,eAAeZ,EAAQC,EAAKK,GAAIA,GAE5DO,EAAcf,MAAQA,KAAKe,YAAe,SAAUC,EAAGC,GACvD,GAAuB,gBAAZN,UAAoD,kBAArBA,SAAQO,SAAyB,MAAOP,SAAQO,SAASF,EAAGC,IW35B1G+N,EAAA,WAYE,QAAAA,GAAY3H,EACFC,EACAE,EACAyH,GAFAjP,KAAAsH,UACAtH,KAAAwH,UACAxH,KAAAiP,eAERjP,KAAK2O,MAAQtH,EAAYe,QAAQ,GAC/BxB,EAAA,WAAWyB,SAAUrI,KAAKkP,2BAA2BlP,KAAKiP,cAAcE,KAAKnP,OAE/EA,KAAK8F,KAAOuB,EAAYe,QAAQ,GAC9BxB,EAAA,WAAWyB,SAAUrI,KAAKoP,0BAA0BpP,KAAKiP,cAAcE,KAAKnP,OAE9EA,KAAKqP,UAAYhI,EAAYe,QAAQ,IAAKxB,EAAA,WAAWyB,SAAUzB,EAAA,WAAW0I,UAAU,MACpFtP,KAAKuP,SAAWlI,EAAYe,QAAQ,IAAKxB,EAAA,WAAWyB,SAAUzB,EAAA,WAAW0I,UAAU,MAGnFtP,KAAKmO,SAAW9G,EAAYe,QAAQ,GAClCxB,EAAA,WAAW4I,SAAS5I,EAAA,WAAWyB,SAAU0G,EAAA,EAAkBU,mBAC7DzP,KAAK0P,gBAAkBrI,EAAYe,QAAQ,GAAIxB,EAAA,WAAWyB,UAC1DrI,KAAK2P,UAAYtI,EAAYkB,OAC3B4F,SAAUnO,KAAKmO,SACfuB,gBAAiB1P,KAAK0P,kBACnBE,UAAW5P,KAAK6P,SAASV,KAAKnP,QAEnCA,KAAK8P,aAAezI,EAAYkB,OAC9BoG,MAAS3O,KAAK2O,MACd7I,KAAQ9F,KAAK8F,KACbuJ,UAAarP,KAAKqP,UAClBE,SAAYvP,KAAKuP,SACjBI,UAAa3P,KAAK2P,YAgGxB,MA5FUX,GAAA1N,UAAAuO,SAAR,SAAiBtH,GACf,MAAIvI,MAAKmO,SAAS7K,QAAUtD,KAAK0P,gBAAgBpM,MACxC,MAGPuM,UAAU,IAYNb,EAAA1N,UAAA8N,0BAAR,SAAkCW,GAChC,MAAO,UAAU3H,GACf,MAAO,IAAI4H,SAAQ,SAACC,EAASC,GAEtB9H,EAAQ9E,MAGXyM,EAAQI,iBAAiB/H,EAAQ9E,OAC9BtB,IAAI,SAAAC,GAAO,MAAAA,GAAIC,SACf0G,UACD,SAACC,GAIGoH,EAHGpH,EAAKuH,YAGEC,YAAY,GAFd,OAKZ,SAAAzB,GACEqB,GAAUI,YAAY,MAb1BJ,EAAQ,UAqBRjB,EAAA1N,UAAA4N,2BAAR,SAAmCa,GACjC,MAAO,UAAU3H,GACf,MAAO,IAAI4H,SAAQ,SAACC,EAASC,GAEtB9H,EAAQ9E,MAGXyM,EAAQO,kBAAkBlI,EAAQ9E,OAC/BtB,IAAI,SAAAC,GAAO,MAAAA,GAAIC,SACf0G,UACD,SAACC,GAIGoH,EAHGpH,EAAKuH,YAGEG,aAAa,GAFf,OAKZ,SAAA3B,GACEqB,GAAUM,aAAa,MAb3BN,EAAQ,UAqBTjB,EAAA1N,UAAAkP,SAAP,cAAAhP,GAAAxB,IACE,IAAKA,KAAK8P,aAAa7G,QAASjJ,KAAKyQ,SAAUzQ,KAAK8F,KAAK4K,UAAW1Q,KAAK2O,MAAM+B,QAA/E,CAIA,GAAIlH,IACFmF,MAAO3O,KAAK2O,MAAMrL,MAClBwC,KAAM9F,KAAK8F,KAAKxC,MAChB+L,UAAWrP,KAAKqP,UAAU/L,MAC1BiM,SAAUvP,KAAKuP,SAASjM,MACxB6K,SAAUnO,KAAKmO,SAAS7K,MAG1BtD,MAAKiP,aAAa0B,SAASnH,GACxBZ,UACD,WACEpH,EAAKgG,QAAQ8B,QAAQ,yCACrB9H,EAAKsO,aAAac,SAEpB,SAAAhC,GACEpN,EAAKgG,QAAQpF,MAAMwM,GAAO,kCA1IlCI,EAAAjP,GAACV,EAAAwB,EAAAvB,EAAA,YACC0M,SAAU,mBACVC,SAAA5M,EAAA,KACA6M,QAAA7M,EAAA,QX4hCM0B,EAAW,qBAA2L,mBAA5JwB,EAA4E,mBAAhEqE,GAA0D,aAAqBA,EAA0D,cAAqBrE,GAAO9B,OAAqL,mBAApK+B,EAAgF,mBAApEqE,GAA8D,GAAqBA,EAA8D,IAAqBrE,GAAO/B,OAA+L,mBAA9KgC,EAAqF,mBAAzEqE,GAAmE,eAAqBA,EAAmE,gBAAqBrE,GAAOhC,OAAmQ,mBAAlP0L,EAAuH,mBAA3G6B,GAAqG,GAAqBA,EAAqG,IAAqB7B,GAAO1L,UACl5BuO,EAEH,IAAIzM,GAAIC,EAAIC,EAAI0J,MAMd0E,IACA,SAAS1R,EAAQC,EAASC,GAEhC,YACqB,IAAIC,GAA8CD,EAAoB,GAClEuH,EAA+CvH,EAAoB,IACnEsN,EAAsDtN,EAAoB,IAE1EyR,GAD8DzR,EAAoBK,EAAEiN,GAClBtN,EAAoB,MACtF0R,EAA8D1R,EAAoB,KAClF2R,EAA+D3R,EAAoB,KACnF4R,EAA+D5R,EAAoB,KACnF6R,EAAuE7R,EAAoB,IACrFA,GAAoBQ,EAAET,EAAS,IAAK,WAAa,MAAO+R,IACvF,IAAIpR,GAAcC,MAAQA,KAAKD,YAAe,SAAUE,EAAYC,EAAQC,EAAKC,GAC7E,GAA2HP,GAAvHQ,EAAIC,UAAUC,OAAQC,EAAIH,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOK,OAAOC,yBAAyBR,EAAQC,GAAOC,CACrH,IAAuB,gBAAZO,UAAoD,kBAArBA,SAAQC,SAAyBJ,EAAIG,QAAQC,SAASX,EAAYC,EAAQC,EAAKC,OACpH,KAAK,GAAIS,GAAIZ,EAAWM,OAAS,EAAGM,GAAK,EAAGA,KAAShB,EAAII,EAAWY,MAAIL,GAAKH,EAAI,EAAIR,EAAEW,GAAKH,EAAI,EAAIR,EAAEK,EAAQC,EAAKK,GAAKX,EAAEK,EAAQC,KAASK,EAChJ,OAAOH,GAAI,GAAKG,GAAKC,OAAOK,eAAeZ,EAAQC,EAAKK,GAAIA,GAE5DO,EAAcf,MAAQA,KAAKe,YAAe,SAAUC,EAAGC,GACvD,GAAuB,gBAAZN,UAAoD,kBAArBA,SAAQO,SAAyB,MAAOP,SAAQO,SAASF,EAAGC,IYzjC1GkQ,EAAA,WAsCE,QAAAA,GAAY9J,EACFG,EACAE,EACAuH,EACAmC,EACAC,EACAC,GALAtR,KAAAwH,UACAxH,KAAA0H,mBACA1H,KAAAiP,eACAjP,KAAAoR,gBACApR,KAAAqR,gBACArR,KAAAsR,cAERtR,KAAKuR,OACDjO,MAAO,aAAckO,MAAO,cAC5BlO,MAAO,SAAUkO,MAAO,WACxBlO,MAAO,kBAAmBkO,MAAO,SACjClO,MAAO,YAAakO,MAAO,WAG/BxR,KAAKG,IAAMkH,EAAYe,QAAQpI,KAAKuR,KAAK,GAAI3K,EAAA,WAAWyB,UACxDrI,KAAKyR,KAAOpK,EAAYe,QAAQ,IAChCpI,KAAK0R,MAAQrK,EAAYkB,OACvBpI,IAAOH,KAAKG,IACZsR,KAAQzR,KAAKyR,OAGfzR,KAAK2R,WACHC,UACAC,WACEhJ,QACA2I,MAAO,MAuJf,MA1ME/Q,QAAAK,eAAWqQ,EAAA7P,UAAA,gBZulCLS,IYvlCN,WACE,MAAO/B,MAAK8R,eZylCRC,IYvlCN,SAAwBzO,GAClBtD,KAAK8R,gBAAkBxO,IAG3BtD,KAAK8R,cAAgBxO,EACrBtD,KAAKgS,gBZylCDC,YAAY,EACZC,cAAc,IYxlCpBzR,OAAAK,eAAWqQ,EAAA7P,UAAA,eZ2lCLS,IY3lCN,WACE,MAAO/B,MAAKmS,cZ6lCRJ,IY3lCN,SAAuBzO,GACjBtD,KAAKmS,eAAiB7O,IAG1BtD,KAAKmS,aAAe7O,EACpBtD,KAAKgS,gBZ6lCDC,YAAY,EACZC,cAAc,IYxjCpBf,EAAA7P,UAAAkH,SAAA,WACExI,KAAKoS,aAAc,EACnBpS,KAAKoN,iBACLpN,KAAKqS,aAGAlB,EAAA7P,UAAAgR,MAAP,cAAA9Q,GAAAxB,IACE,KAAIA,KAAK2I,MAAS3I,KAAK0R,MAAMzI,MAA7B,CAIA,GAAIO,IACFrJ,IAAKH,KAAKG,IAAImD,MAAMA,MACpBmO,KAAMzR,KAAKyR,KAAOzR,KAAKyR,KAAKnO,MAAQ,KAElCtD,MAAKsN,UACP9D,EAAM5E,QAAU5E,KAAKsN,QAAQ1I,QAC7B4E,EAAM3E,WAAa7E,KAAKsN,QAAQzI,WAChC2E,EAAM1E,iBAAmB9E,KAAKsN,QAAQxI,iBACtC0E,EAAMzE,MAAQ/E,KAAKsN,QAAQvI,MAC3ByE,EAAMxE,OAAShF,KAAKsN,QAAQtI,OAC5BwE,EAAMvE,YAAcjF,KAAKsN,QAAQrI,YACjCuE,EAAMtE,QAAUlF,KAAKsN,QAAQpI,QAC7BsE,EAAMrE,QAAUnF,KAAKsN,QAAQnI,SAG/BnF,KAAK2I,MAAO,EACZ3I,KAAKoR,cAAcmB,cAAc/I,GAC9BZ,UACD,SAACC,GACCrH,EAAKgR,YAAY3J,EAAMW,EAAMrJ,KAC7BqB,EAAKqH,KAAOA,EACZrH,EAAKiR,aAAa5J,IAEpB,SAAAzG,GACEZ,EAAKgG,QAAQpF,MAAMA,GACnBZ,EAAKmH,MAAO,GAEd,WACEnH,EAAKmH,MAAO,MAKXwI,EAAA7P,UAAAoR,aAAP,SAAoBrO,GAClBrE,KAAKsN,QAAUjJ,EACfrE,KAAKsS,SAGAnB,EAAA7P,UAAAqR,aAAP,WACE,GAAK3S,KAAK6I,KAAV,CAGA,GAAI+J,GAAM5S,KAAKsR,YAAYuB,YAAY7S,KAAK6I,KAAM,IAAK,KACvD7I,MAAKsR,YAAYwB,YAAYF,EAAK,gBAG5BzB,EAAA7P,UAAA8L,eAAR,cAAA5L,GAAAxB,IACEA,MAAK2I,MAAO,EACZ3I,KAAK0H,iBAAiBnG,gBACnBqH,UACD,SAACC,GACCrH,EAAKqD,WAAagE,GAEpB,SAAAzG,GACEZ,EAAKgG,QAAQpF,MAAMA,GACnBZ,EAAKmH,MAAO,GAEd,WACEnH,EAAKmH,MAAO,KAKVwI,EAAA7P,UAAA+Q,UAAR,cAAA7Q,GAAAxB,IACEA,MAAK2I,MAAO,EACZ3I,KAAKiP,aAAazI,WACfoC,UACD,SAACC,GACCrH,EAAKuR,MAAQlK,GAEf,SAAAzG,GACEZ,EAAKgG,QAAQpF,MAAMA,GACnBZ,EAAKmH,MAAO,GAEd,WACEnH,EAAKmH,MAAO,KAKVwI,EAAA7P,UAAAoK,aAAR,SAAqBrH,GACnB,IAAK,GAAIxD,GAAI,EAAGA,EAAIb,KAAK6E,WAAWtE,OAAQM,IAC1C,GAAIwD,EAAOrE,KAAK6E,WAAWhE,IACzB,MAAOb,MAAK6E,WAAWhE,EAG3B,OAAO,OAGDsQ,EAAA7P,UAAA0R,SAAR,SAAiB3O,GACf,IAAK,GAAIxD,GAAI,EAAGA,EAAIb,KAAK+S,MAAMxS,OAAQM,IACrC,GAAIwD,EAAOrE,KAAK+S,MAAMlS,IACpB,MAAOb,MAAK+S,MAAMlS,EAGtB,OAAO,OAGDsQ,EAAA7P,UAAAkR,YAAR,SAAoB3J,EAAsB1I,GACxC,OAAQA,GACN,IAAK,aACH,IAAK,GAAL8S,GAAA,SAAApS,GAEE,GAAIqS,GAAMC,EAAKzH,aAAa,SAAArL,GAAK,MAAAA,GAAEmF,KAAOqD,EAAKhI,GAAGV,KAC9C+S,KACFrK,EAAKhI,GAAGV,IAAM+S,EAAIpN,OZ0iCVqN,EAASnT,KY9iCZa,EAAI,EAAGA,EAAIgI,EAAKtI,OAAQM,IZgjCrBoS,EAAQpS,EYziCpB,MACF,KAAK,YACH,IAAK,GAALuS,GAAA,SAAAvS,GACE,GAAIyN,GAAO+E,EAAKL,SAAS,SAAAM,GAAK,MAAAA,GAAEC,WAAa1K,EAAKhI,GAAGV,KACjDmO,KACFzF,EAAKhI,GAAGV,IAAMmO,EAAKiB,SAAW,IAAMjB,EAAKe,YZ8iCjCgE,EAASrT,KYjjCZa,EAAI,EAAGA,EAAIgI,EAAKtI,OAAQM,IZmjCrBuS,EAAQvS,KYziClBsQ,EAAA7P,UAAAmR,aAAR,SAAqB5J,IACd7I,KAAKwT,cAAiBxT,KAAKoS,eAGhCpS,KAAKyT,YAAa,EAClBzT,KAAK2R,UAAY3R,KAAKqR,cAAcqC,eAAe7K,EAAM,WAAY7I,KAAKwT,aAAcxT,KAAKoS,eAGvFjB,EAAA7P,UAAA0Q,YAAR,WACOhS,KAAK6I,OAAU7I,KAAKwT,cAAiBxT,KAAKoS,eAG/CpS,KAAKyT,YAAa,EAClBzT,KAAK2R,UAAY3R,KAAKqR,cAAcqC,eAAe1T,KAAK6I,KAAM,WAAY7I,KAAKwT,aAAcxT,KAAKoS,eA1NtGjB,EAAApR,GAACV,EAAAwB,EAAAvB,EAAA,YACC0M,SAAU,YACVC,SAAA5M,EAAA,KACA6M,QAAA7M,EAAA,QZ4wCM0B,EAAW,qBAA2L,mBAA5JwB,EAA4E,mBAAhEqE,GAA0D,aAAqBA,EAA0D,cAAqBrE,GAAO9B,OAA+L,mBAA9K+B,EAAqF,mBAAzEmK,GAAmE,eAAqBA,EAAmE,gBAAqBnK,GAAO/B,OAA2O,mBAA1NgC,EAA2G,mBAA/FqO,GAAyF,GAAqBA,EAAyF,IAAqBrO,GAAOhC,OAA2N,mBAA1M0L,EAAmG,mBAAvF4E,GAAiF,GAAqBA,EAAiF,IAAqB5E,GAAO1L,OAA+N,mBAA9M2L,EAAqG,mBAAzF4E,GAAmF,GAAqBA,EAAmF,IAAqB5E,GAAO3L,OAA+N,mBAA9M4L,EAAqG,mBAAzF4E,GAAmF,GAAqBA,EAAmF,IAAqB5E,GAAO5L,OAA6P,mBAA5O6L,EAAoH,mBAAxG4E,GAAkG,GAAqBA,EAAkG,IAAqB5E,GAAO7L,UAC1pD0Q,EAEH,IAAI5O,GAAIC,EAAIC,EAAI0J,EAAIC,EAAIC,EAAIC,MAM1BqH,IACA,SAASxU,EAAQC,EAASC,GAEhC,YACqB,IAAIC,GAA8CD,EAAoB,GAClEqN,EAAgDrN,EAAoB,IACpEsN,EAAsDtN,EAAoB,IAE1EuU,GAD8DvU,EAAoBK,EAAEiN,GACZtN,EAAoB,IACtFA,GAAoBQ,EAAET,EAAS,IAAK,WAAa,MAAOyU,IACvF,IAAI9T,GAAcC,MAAQA,KAAKD,YAAe,SAAUE,EAAYC,EAAQC,EAAKC,GAC7E,GAA2HP,GAAvHQ,EAAIC,UAAUC,OAAQC,EAAIH,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOK,OAAOC,yBAAyBR,EAAQC,GAAOC,CACrH,IAAuB,gBAAZO,UAAoD,kBAArBA,SAAQC,SAAyBJ,EAAIG,QAAQC,SAASX,EAAYC,EAAQC,EAAKC,OACpH,KAAK,GAAIS,GAAIZ,EAAWM,OAAS,EAAGM,GAAK,EAAGA,KAAShB,EAAII,EAAWY,MAAIL,GAAKH,EAAI,EAAIR,EAAEW,GAAKH,EAAI,EAAIR,EAAEK,EAAQC,EAAKK,GAAKX,EAAEK,EAAQC,KAASK,EAChJ,OAAOH,GAAI,GAAKG,GAAKC,OAAOK,eAAeZ,EAAQC,EAAKK,GAAIA,GAE5DO,EAAcf,MAAQA,KAAKe,YAAe,SAAUC,EAAGC,GACvD,GAAuB,gBAAZN,UAAoD,kBAArBA,SAAQO,SAAyB,MAAOP,SAAQO,SAASF,EAAGC,Ia3yC1G4S,EAAA,WAOE,QAAAA,GAAoBvM,EACVjG,EACDyS,EACPC,GAVJ,GAAAvS,GAAAxB,IAOsBA,MAAAsH,UACVtH,KAAAqB,eACDrB,KAAA8T,SAGP9T,KAAK8T,OAAOE,wBAAwBD,GAEpC/T,KAAKiU,WAAY,EAEjBjU,KAAKsO,KAAOtO,KAAKqB,aAAaoN,iBAC9BzO,KAAKkU,OAAwB,OAAdlU,KAAKsO,KAEpBtO,KAAKqB,aAAagN,YAAYzF,UAAU,SAAC0K,GACvC9R,EAAK0S,OAAS1S,EAAKH,aAAamN,iBAAgB,GAC5C8E,IACF9R,EAAK8M,KAAO9M,EAAKH,aAAaoN,oBAatC,MARSoF,GAAAvS,UAAA6S,OAAP,WACOnU,KAAKkU,SAGVlU,KAAKqB,aAAa8S,SAClBnU,KAAKkU,QAAS,EACdlU,KAAKsH,QAAQyB,UAAU,QAtC3B8K,EAAA9T,GAACV,EAAAwB,EAAAvB,EAAA,YACC0M,SAAU,WACVC,SAAA5M,EAAA,KACA6M,QAAA7M,EAAA,Qbm1CM0B,EAAW,qBAAmM,mBAApKwB,EAAgF,mBAApEmK,GAA8D,GAAqBA,EAA8D,IAAqBnK,GAAO9B,OAAmQ,mBAAlP+B,EAAuH,mBAA3GoR,GAAqG,GAAqBA,EAAqG,IAAqBpR,GAAO/B,OAA+L,mBAA9KgC,EAAqF,mBAAzEkK,GAAmE,eAAqBA,EAAmE,gBAAqBlK,GAAOhC,OAAqL,mBAApK0L,EAAgF,mBAApE7M,GAA8D,kBAAqBA,EAA8D,mBAAqB6M,GAAO1L,UAC15BoT,EAEH,IAAItR,GAAIC,EAAIC,EAAI0J,MAMdiI,IACA,SAASjV,EAAQC,EAASC,GAEhC,YACqB,IAAIC,GAA8CD,EAAoB,EAC5DA,GAAoBQ,EAAET,EAAS,IAAK,WAAa,MAAOiV,IACvF,IAAItU,GAAcC,MAAQA,KAAKD,YAAe,SAAUE,EAAYC,EAAQC,EAAKC,GAC7E,GAA2HP,GAAvHQ,EAAIC,UAAUC,OAAQC,EAAIH,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOK,OAAOC,yBAAyBR,EAAQC,GAAOC,CACrH,IAAuB,gBAAZO,UAAoD,kBAArBA,SAAQC,SAAyBJ,EAAIG,QAAQC,SAASX,EAAYC,EAAQC,EAAKC,OACpH,KAAK,GAAIS,GAAIZ,EAAWM,OAAS,EAAGM,GAAK,EAAGA,KAAShB,EAAII,EAAWY,MAAIL,GAAKH,EAAI,EAAIR,EAAEW,GAAKH,EAAI,EAAIR,EAAEK,EAAQC,EAAKK,GAAKX,EAAEK,EAAQC,KAASK,EAChJ,OAAOH,GAAI,GAAKG,GAAKC,OAAOK,eAAeZ,EAAQC,EAAKK,GAAIA,GAE5DO,EAAcf,MAAQA,KAAKe,YAAe,SAAUC,EAAGC,GACvD,GAAuB,gBAAZN,UAAoD,kBAArBA,SAAQO,SAAyB,MAAOP,SAAQO,SAASF,EAAGC,Icr2C1GoT,EAAA,mBAAAA,KAEWrU,KAAAsU,QAAS,EACpB,MAFEvU,IAACV,EAAAwB,EAAAvB,EAAA,OAAM,Yd62CDyB,EAAW,cAAewT,SAC3BF,EAAa/S,UAAW,QAAS,Qc72CtCvB,GAACV,EAAAwB,EAAAvB,EAAA,Sdg3CKyB,EAAW,cAAeN,SAC3B4T,EAAa/S,UAAW,SAAU,Qch4CzC+S,EAAAtU,GAACV,EAAAwB,EAAAvB,EAAA,YACC0M,SAAU,UACVE,QAAS,gDAKTD,SAAU,iGdg4CJlL,EAAW,yBACZsT,OAODG,IACA,SAASrV,EAAQC,EAASC,GAEhC,YACqB,IAAIC,GAA8CD,EAAoB,GAClEqN,EAAgDrN,EAAoB,IACpEsN,EAAsDtN,EAAoB,IAE1EoV,GAD8DpV,EAAoBK,EAAEiN,GAC5BtN,EAAoB,IACtEA,GAAoBQ,EAAET,EAAS,IAAK,WAAa,MAAOsV,IACvF,IAAI3U,GAAcC,MAAQA,KAAKD,YAAe,SAAUE,EAAYC,EAAQC,EAAKC,GAC7E,GAA2HP,GAAvHQ,EAAIC,UAAUC,OAAQC,EAAIH,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOK,OAAOC,yBAAyBR,EAAQC,GAAOC,CACrH,IAAuB,gBAAZO,UAAoD,kBAArBA,SAAQC,SAAyBJ,EAAIG,QAAQC,SAASX,EAAYC,EAAQC,EAAKC,OACpH,KAAK,GAAIS,GAAIZ,EAAWM,OAAS,EAAGM,GAAK,EAAGA,KAAShB,EAAII,EAAWY,MAAIL,GAAKH,EAAI,EAAIR,EAAEW,GAAKH,EAAI,EAAIR,EAAEK,EAAQC,EAAKK,GAAKX,EAAEK,EAAQC,KAASK,EAChJ,OAAOH,GAAI,GAAKG,GAAKC,OAAOK,eAAeZ,EAAQC,EAAKK,GAAIA,GAE5DO,EAAcf,MAAQA,KAAKe,YAAe,SAAUC,EAAGC,GACvD,GAAuB,gBAAZN,UAAoD,kBAArBA,SAAQO,SAAyB,MAAOP,SAAQO,SAASF,EAAGC,Iez5C1GyT,EAAA,WAEE,QAAAA,GAAoBpN,EACVE,EACAnG,GAFUrB,KAAAsH,UACVtH,KAAAwH,UACAxH,KAAAqB,eAuBZ,MArBEqT,GAAApT,UAAAqT,YAAA,WAGE,IAAK3U,KAAKqB,aAAamN,iBAAgB,GAErC,MADAxO,MAAKsH,QAAQyB,UAAU,aAChB,CAGT,KAAK/I,KAAKqB,aAAamN,iBAAgB,GAGrC,MAFAxO,MAAKsH,QAAQyB,UAAU,YACvB/I,KAAKwH,QAAQoN,QAAQ,0BACd,CAGT,IAAItG,GAAOtO,KAAKqB,aAAaoN,iBACzBoG,EAAMvG,GAAsB,UAAdA,EAAKwG,IAIvB,OAHKD,IACH7U,KAAKwH,QAAQoN,QAAQ,oDAEhBC,GA1BXH,EAAA3U,GAACV,EAAAwB,EAAAvB,EAAA,cf47COyB,EAAW,qBAAmM,mBAApKwB,EAAgF,mBAApEmK,GAA8D,GAAqBA,EAA8D,IAAqBnK,GAAO9B,OAA+L,mBAA9K+B,EAAqF,mBAAzEmK,GAAmE,eAAqBA,EAAmE,gBAAqBnK,GAAO/B,OAAmO,mBAAlNgC,EAAuG,mBAA3FgS,GAAqF,GAAqBA,EAAqF,IAAqBhS,GAAOhC,UAChrBiU,EAEH,IAAInS,GAAIC,EAAIC,MAMVsS,IACA,SAAS5V,EAAQC,EAASC,GAEhC,YACqB,IAAIC,GAA8CD,EAAoB,GAClEqN,EAAgDrN,EAAoB,IACpE2V,EAAkD3V,EAAoB,IACtEyH,EAAsDzH,EAAoB,IAE1E4V,GAD8D5V,EAAoBK,EAAEoH,GAC5BzH,EAAoB,IACtEA,GAAoBQ,EAAET,EAAS,IAAK,WAAa,MAAO8V,IACvF,IAAInV,GAAcC,MAAQA,KAAKD,YAAe,SAAUE,EAAYC,EAAQC,EAAKC,GAC7E,GAA2HP,GAAvHQ,EAAIC,UAAUC,OAAQC,EAAIH,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOK,OAAOC,yBAAyBR,EAAQC,GAAOC,CACrH,IAAuB,gBAAZO,UAAoD,kBAArBA,SAAQC,SAAyBJ,EAAIG,QAAQC,SAASX,EAAYC,EAAQC,EAAKC,OACpH,KAAK,GAAIS,GAAIZ,EAAWM,OAAS,EAAGM,GAAK,EAAGA,KAAShB,EAAII,EAAWY,MAAIL,GAAKH,EAAI,EAAIR,EAAEW,GAAKH,EAAI,EAAIR,EAAEK,EAAQC,EAAKK,GAAKX,EAAEK,EAAQC,KAASK,EAChJ,OAAOH,GAAI,GAAKG,GAAKC,OAAOK,eAAeZ,EAAQC,EAAKK,GAAIA,GAE5DO,EAAcf,MAAQA,KAAKe,YAAe,SAAUC,EAAGC,GACvD,GAAuB,gBAAZN,UAAoD,kBAArBA,SAAQO,SAAyB,MAAOP,SAAQO,SAASF,EAAGC,IgBr9C1GiU,EAAA,WAEE,QAAAA,GAAoB5N,EACVE,EACApG,EACAC,GAHUrB,KAAAsH,UACVtH,KAAAwH,UACAxH,KAAAoB,YACApB,KAAAqB,eAgBZ,MAdE6T,GAAA5T,UAAAqT,YAAA,WAEE,MAAK3U,MAAKqB,aAAamN,iBAAgB,KAKlCxO,KAAKqB,aAAamN,iBAAgB,KACrCxO,KAAKsH,QAAQyB,UAAU,YACvB/I,KAAKwH,QAAQoN,QAAQ,0BACd,IAPP5U,KAAKsH,QAAQyB,UAAU,aAChB,IAZbmM,EAAAnV,GAACV,EAAAwB,EAAAvB,EAAA,chBo/COyB,EAAW,qBAAmM,mBAApKwB,EAAgF,mBAApEmK,GAA8D,GAAqBA,EAA8D,IAAqBnK,GAAO9B,OAA+L,mBAA9K+B,EAAqF,mBAAzEsE,GAAmE,eAAqBA,EAAmE,gBAAqBtE,GAAO/B,OAA2M,mBAA1LgC,EAA2F,mBAA/EuS,GAAyE,GAAqBA,EAAyE,IAAqBvS,GAAOhC,OAAmO,mBAAlN0L,EAAuG,mBAA3F8I,GAAqF,GAAqBA,EAAqF,IAAqB9I,GAAO1L,UACh5ByU,EAEH,IAAI3S,GAAIC,EAAIC,EAAI0J,MAMdgJ,IACA,SAAShW,EAAQC,EAASC,GAEhC,YACqB,IAAIC,GAA8CD,EAAoB,EAC5DA,GAAoBQ,EAAET,EAAS,IAAK,WAAa,MAAOgW,IACvF,IAAIrV,GAAcC,MAAQA,KAAKD,YAAe,SAAUE,EAAYC,EAAQC,EAAKC,GAC7E,GAA2HP,GAAvHQ,EAAIC,UAAUC,OAAQC,EAAIH,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOK,OAAOC,yBAAyBR,EAAQC,GAAOC,CACrH,IAAuB,gBAAZO,UAAoD,kBAArBA,SAAQC,SAAyBJ,EAAIG,QAAQC,SAASX,EAAYC,EAAQC,EAAKC,OACpH,KAAK,GAAIS,GAAIZ,EAAWM,OAAS,EAAGM,GAAK,EAAGA,KAAShB,EAAII,EAAWY,MAAIL,GAAKH,EAAI,EAAIR,EAAEW,GAAKH,EAAI,EAAIR,EAAEK,EAAQC,EAAKK,GAAKX,EAAEK,EAAQC,KAASK;AAChJ,MAAOH,GAAI,GAAKG,GAAKC,OAAOK,eAAeZ,EAAQC,EAAKK,GAAIA,GAE5DO,EAAcf,MAAQA,KAAKe,YAAe,SAAUC,EAAGC,GACvD,GAAuB,gBAAZN,UAAoD,kBAArBA,SAAQO,SAAyB,MAAOP,SAAQO,SAASF,EAAGC,IiB//C1GmU,EAAA,WAEE,QAAAA,MAuDF,MA7CSA,GAAA9T,UAAAoS,eAAP,SAAsB2B,EAAyB7D,EAAe8D,EAAgB7L,GAC5E,GAAIZ,GAGA0M,GACF/D,MAAO,SACP3I,SAEE2M,GACFhE,MAAO,aACP3I,QAIEyM,IAAS7L,EACXZ,GACE+I,UACAC,UAAW0D,EAAUC,IAGnBF,EACFzM,GACE+I,UACAC,UAAW0D,IAEJ9L,IACTZ,GACE+I,UACAC,UAAW2D,IAMjB,KAAK,GAAI3U,GAAI,EAAGA,EAAIwU,EAAQ9U,OAAQM,IAC9ByU,GACFC,EAAS1M,KAAKtE,KAAK8Q,EAAQxU,GAAGyU,OAE5B7L,GACF+L,EAAQ3M,KAAKtE,KAAK8Q,EAAQxU,GAAG4I,KAAO,MAEtCZ,EAAK+I,OAAOrN,KAAK8Q,EAAQxU,GAAGV,IAE9B,OAAO0I,IAxDXuM,EAAArV,GAACV,EAAAwB,EAAAvB,EAAA,cjB4jDOyB,EAAW,yBACZqU,OAODK,IACA,SAAStW,EAAQC,EAASC,GAEhC,YACqB,IAAIC,GAA8CD,EAAoB,EAC5DA,GAAoBQ,EAAET,EAAS,IAAK,WAAa,MAAOsW,IACvF,IAAI3V,GAAcC,MAAQA,KAAKD,YAAe,SAAUE,EAAYC,EAAQC,EAAKC,GAC7E,GAA2HP,GAAvHQ,EAAIC,UAAUC,OAAQC,EAAIH,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOK,OAAOC,yBAAyBR,EAAQC,GAAOC,CACrH,IAAuB,gBAAZO,UAAoD,kBAArBA,SAAQC,SAAyBJ,EAAIG,QAAQC,SAASX,EAAYC,EAAQC,EAAKC,OACpH,KAAK,GAAIS,GAAIZ,EAAWM,OAAS,EAAGM,GAAK,EAAGA,KAAShB,EAAII,EAAWY,MAAIL,GAAKH,EAAI,EAAIR,EAAEW,GAAKH,EAAI,EAAIR,EAAEK,EAAQC,EAAKK,GAAKX,EAAEK,EAAQC,KAASK,EAChJ,OAAOH,GAAI,GAAKG,GAAKC,OAAOK,eAAeZ,EAAQC,EAAKK,GAAIA,GAE5DO,EAAcf,MAAQA,KAAKe,YAAe,SAAUC,EAAGC,GACvD,GAAuB,gBAAZN,UAAoD,kBAArBA,SAAQO,SAAyB,MAAOP,SAAQO,SAASF,EAAGC,IkB/lD1GyU,EAAA,WAEE,QAAAA,MA4CF,MA1CSA,GAAApU,UAAAuR,YAAP,SAAmBhK,EAAa8M,EAAiBC,GAC/C,GAD8B,SAAAD,MAAA,MACzB9M,GAAwB,IAAhBA,EAAKtI,OAChB,MAAO,KAET,IAAI+D,MACAiN,EAAiB9Q,OAAO8Q,KAAK1I,EAAK,GAGtCvE,GAAGC,KAAKgN,EAAKjM,KAAKqQ,IAClBrR,EAAGC,KAAKqR,EAGR,KAAK,GAAIC,GAAI,EAAGA,EAAIhN,EAAKtI,OAAQsV,IAAK,CACpC,GAAIC,GAAI,EACJC,EAAMlN,EAAKgN,EACf,KAAK,GAAI1V,KAAO4V,GACVA,EAAIC,eAAe7V,KACjB2V,EAAI,GACNxR,EAAGC,KAAKoR,GAEVrR,EAAGC,KAAKwR,EAAI5V,IACZ2V,IAGJxR,GAAGC,KAAKqR,GAEV,MAAOtR,GAAGgB,KAAK,KAGVoQ,EAAApU,UAAAwR,YAAP,SAAmBF,EAAaqD,GAC9B,GAD8B,SAAAA,MAAA,cACzBrD,EAAL,CAGKA,EAAIsD,MAAM,sBACbtD,EAAM,+BAAiCA,EAEzC,IAAI/J,GAAOsN,UAAUvD,GACjBwD,EAAO1Q,SAAS2Q,cAAc,IAClCD,GAAKE,aAAa,OAAQzN,GAC1BuN,EAAKE,aAAa,WAAYL,GAC9BG,EAAKG,UA7CTb,EAAA3V,GAACV,EAAAwB,EAAAvB,EAAA,clBkpDOyB,EAAW,yBACZ2U,OAODc,IACA,SAASrX,EAAQC,EAASC,GAEhC,YACqB,IAAIC,GAA8CD,EAAoB,GAClEE,EAA8CF,EAAoB,IAClEG,EAAgDH,EAAoB,GAEpEI,GADwDJ,EAAoBK,EAAEF,GACtBH,EAAoB,MAE5EM,GADgEN,EAAoBK,EAAED,GACpCJ,EAAoB,KACtEO,EAAwDP,EAAoB,GACtEA,GAAoBQ,EAAET,EAAS,IAAK,WAAa,MAAOqX,IACvF,IAAI1W,GAAcC,MAAQA,KAAKD,YAAe,SAAUE,EAAYC,EAAQC,EAAKC,GAC7E,GAA2HP,GAAvHQ,EAAIC,UAAUC,OAAQC,EAAIH,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOK,OAAOC,yBAAyBR,EAAQC,GAAOC,CACrH,IAAuB,gBAAZO,UAAoD,kBAArBA,SAAQC,SAAyBJ,EAAIG,QAAQC,SAASX,EAAYC,EAAQC,EAAKC,OACpH,KAAK,GAAIS,GAAIZ,EAAWM,OAAS,EAAGM,GAAK,EAAGA,KAAShB,EAAII,EAAWY,MAAIL,GAAKH,EAAI,EAAIR,EAAEW,GAAKH,EAAI,EAAIR,EAAEK,EAAQC,EAAKK,GAAKX,EAAEK,EAAQC,KAASK,EAChJ,OAAOH,GAAI,GAAKG,GAAKC,OAAOK,eAAeZ,EAAQC,EAAKK,GAAIA,GAE5DO,EAAcf,MAAQA,KAAKe,YAAe,SAAUC,EAAGC,GACvD,GAAuB,gBAAZN,UAAoD,kBAArBA,SAAQO,SAAyB,MAAOP,SAAQO,SAASF,EAAGC,ImBtpD1GwV,EAAA,WAEE,QAAAA,GACUtV,EACAC,EACAC,GAFArB,KAAAmB,QACAnB,KAAAoB,YACApB,KAAAqB,eAqDZ,MAnDSoV,GAAAnV,UAAAiR,cAAP,SAAqB/I,GAArB,GAAAhI,GAAAxB,KACMsE,GAAMtE,KAAKoB,UAAUM,WAAa,SAEtC1B,MAAKwE,iBAAiB,MAAOgF,EAAMrJ,KAAO,aAAcmE,GAEpDkF,EAAMiI,KAAO,GACfzR,KAAKwE,iBAAiB,OAAQgF,EAAMiI,KAAK/M,WAAYJ,GAEnDkF,EAAM5E,SACR5E,KAAKwE,iBAAiB,UAAWgF,EAAM5E,QAASN,GAE9CkF,EAAM3E,YACR7E,KAAKwE,iBAAiB,aAAcgF,EAAM3E,WAAYP,GAEpDkF,EAAM1E,kBACR9E,KAAKwE,iBAAiB,mBAAoBgF,EAAM1E,iBAAmB,OAAS,QAASR,GAEnFkF,EAAMzE,OACR/E,KAAKwE,iBAAiB,QAASgF,EAAMzE,MAAOT,GAE1CkF,EAAMxE,QACRhF,KAAKwE,iBAAiB,SAAUgF,EAAMxE,OAAQV,GAE5CkF,EAAMvE,aACRjF,KAAKwE,iBAAiB,cAAegF,EAAMvE,YAAaX,GAEtDkF,EAAMtE,QAAU,GAClBlF,KAAKwE,iBAAiB,UAAWgF,EAAMtE,QAAQR,WAAYJ,GAEzDkF,EAAMrE,QAAU,GAClBnF,KAAKwE,iBAAiB,UAAWgF,EAAMrE,QAAQT,WAAYJ,EAG7D,IAAI3C,IACFC,QAAS5B,KAAKqB,aAAaQ,mBACzBC,eAAgB,qBAGpB,OAAO9B,MAAKmB,MAAMY,IAAIuC,EAAGgB,KAAK,IAAK3D,GAChCK,IAAI,SAACC,GAAkB,MAAAA,GAAIC,SAC3BC,MAAM,SAACC,GAAe,MAAA5C,GAAA,WAAW6C,MAAMD,EAAMF,OAAOE,OAASZ,EAAKJ,UAAUkB,uBAGzEmU,EAAAnV,UAAAkD,iBAAR,SAAyBsB,EAAcxC,EAAegB,GACpD,GAAIzD,GAAIyD,EAAG/D,OAAS,CAChBM,IAAI,GAAMyD,EAAGzD,GAAGN,OAAS,GAAwC,MAAnC+D,EAAGzD,GAAGkF,OAAOzB,EAAGzD,GAAGN,OAAS,IAC5D+D,EAAGC,KAAK,KAEVD,EAAGC,KAAKyB,mBAAmBF,GAAQ,IACjCE,mBAAmB1C,KAzDzBmT,EAAA1W,GAACV,EAAAwB,EAAAvB,EAAA,cnButDOyB,EAAW,qBAA2L,mBAA5JwB,EAA4E,mBAAhEhD,GAA0D,GAAqBA,EAA0D,IAAqBgD,GAAO9B,OAA2M,mBAA1L+B,EAA2F,mBAA/E7C,GAAyE,GAAqBA,EAAyE,IAAqB6C,GAAO/B,OAAmO,mBAAlNgC,EAAuG,mBAA3F7C,GAAqF,GAAqBA,EAAqF,IAAqB6C,GAAOhC,UACprBgW,EAEH,IAAIlU,GAAIC,EAAIC,MAMViU,GACA,SAASvX,EAAQC,EAASC,GAEhC,YACqB,IAAIC,GAA8CD,EAAoB,GAClEE,EAA8CF,EAAoB,IAClEG,EAAgDH,EAAoB,GAEpEI,GADwDJ,EAAoBK,EAAEF,GACtBH,EAAoB,MAE5EM,GADgEN,EAAoBK,EAAED,GACpCJ,EAAoB,KACtEsX,EAAuDtX,EAAoB,IACrEA,GAAoBQ,EAAET,EAAS,IAAK,WAAa,MAAOwX,IACvF,IAAI7W,GAAcC,MAAQA,KAAKD,YAAe,SAAUE,EAAYC,EAAQC,EAAKC,GAC7E,GAA2HP,GAAvHQ,EAAIC,UAAUC,OAAQC,EAAIH,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOK,OAAOC,yBAAyBR,EAAQC,GAAOC,CACrH,IAAuB,gBAAZO,UAAoD,kBAArBA,SAAQC,SAAyBJ,EAAIG,QAAQC,SAASX,EAAYC,EAAQC,EAAKC,OACpH,KAAK,GAAIS,GAAIZ,EAAWM,OAAS,EAAGM,GAAK,EAAGA,KAAShB,EAAII,EAAWY,MAAIL,GAAKH,EAAI,EAAIR,EAAEW,GAAKH,EAAI,EAAIR,EAAEK,EAAQC,EAAKK,GAAKX,EAAEK,EAAQC,KAASK,EAChJ,OAAOH,GAAI,GAAKG,GAAKC,OAAOK,eAAeZ,EAAQC,EAAKK,GAAIA,GAE5DO,EAAcf,MAAQA,KAAKe,YAAe,SAAUC,EAAGC,GACvD,GAAuB,gBAAZN,UAAoD,kBAArBA,SAAQO,SAAyB,MAAOP,SAAQO,SAASF,EAAGC,IoBnuD1G2V,EAAA,WAII,QAAAA,GACYzV,EACAC,EACAyV,GAFA7W,KAAAmB,QACAnB,KAAAoB,YACApB,KAAA6W,gBACR7W,KAAKqO,YAAc,GAAI/O,GAAA,aAwN/B,MAhNWsX,GAAAtV,UAAAuN,MAAP,SAAa/I,EAAcqI,GAA3B,GAAA3M,GAAAxB,IACI,KAAK8F,EACD,KAAM,IAAIgR,OAAM,0BAGpB,IAAIC,GAAO,gEACP,aAAa/W,KAAKoB,UAAU4V,WAAU,aAAalR,EAAI,aAAaqI,EAExEnO,MAAKmB,MAAMwE,KACP3F,KAAKoB,UAAU6V,YAAc,QAC7BF,GAEInV,QAAS,GAAIrC,GAAA,GACTuC,eAAgB,wCAErBE,IAAI,SAAAC,GAAO,MAAAA,GAAIC,SACjB0G,UACD,SAACsO,GAEOA,EAAMC,aACND,EAAME,WAAa5V,EAAK6V,yBAAyBH,EAAMC,aAE3D3V,EAAKqV,cAAcxT,MAAM7B,EAAKJ,UAAUkW,gBAAiBJ,GAAO,GAEhE1V,EAAKL,MAAMY,IAAIP,EAAKJ,UAAU6V,YAAc,YACxCrV,QAAS,GAAIrC,GAAA,GACTuC,eAAgB,mBAChByV,cAAiB,UAAYL,EAAMM,iBAExCxV,IAAI,SAAAC,GAAO,MAAAA,GAAIC,SACf0G,UAAU,SAAC6O,GACN,GAAInJ,IACA9I,GAAIiS,EAAK3R,KACT6I,MAAO8I,EAAK9I,MACZ7I,KAAM2R,EAAK3R,KACXuJ,UAAWoI,EAAKC,WAChBnI,SAAUkI,EAAKE,YAEf7C,KAAM2C,EAAKG,MACXrJ,SAAUkJ,EAAKI,eAGnBrW,GAAKqV,cAAcxT,MAAM7B,EAAKJ,UAAU0W,eAAgBxJ,GAAM,GAC9D9M,EAAK6M,YAAY0J,KAAKzJ,IACvB,SAAAlM,GACC0I,QAAQC,IAAI,mDAAqD3I,MAG7E,SAAAA,GACI0I,QAAQC,IAAI,sDAAwD3I,MAOzEwU,EAAAtV,UAAA6S,OAAP,cAAA3S,GAAAxB,IACIA,MAAK6W,cAAcpT,OAAOzD,KAAKoB,UAAU0W,gBAAgB,GACzD9X,KAAK6W,cAAcpT,OAAO,YAC1BzD,KAAKqO,YAAY0J,KAAK,KACtB,IAAIpW,IACAC,QAAS5B,KAAK6B,mBACVC,eAAgB,qBAGxB,OAAO9B,MAAKmB,MAAMY,IAAI/B,KAAKoB,UAAU6V,YAAc,SAAUtV,GACxDK,IAAI,SAACC,GAAkB,MAAAA,GAAIC,SAC3BC,MAAM,SAACC,GAAe,MAAA5C,GAAA,WAAW6C,MAAMD,EAAMF,OAAOE,OAASZ,EAAKJ,UAAUkB,uBAQ9EsU,EAAAtV,UAAAkN,gBAAP,SAAuBwJ,GAEnB,GAAIrN,GAAuB3K,KAAK6W,cAAc/T,SAAS9C,KAAKoB,UAAUkW,iBAAiB,EACvF,KAAK3M,EACD,OAAO,CAIX,IAAIA,EAAOyM,YACHpX,KAAK+J,aAAakO,UAAYtN,EAAOyM,WAAWa,UAAY,GAC5D,OAAO,CAKf,KAAKD,EACD,OAAO,CAEX,IAAI1J,GAActO,KAAK6W,cAAc/T,SAAS9C,KAAKoB,UAAU0W,gBAAgB,EAC7E,OAAOxJ,IAAQA,EAAKC,UAOjBqI,EAAAtV,UAAAmN,eAAP,WACI,MAAOzO,MAAK6W,cAAc/T,SAAS9C,KAAKoB,UAAU0W,gBAAgB,IAQ/DlB,EAAAtV,UAAAgP,kBAAP,SAAyB3B,GACrB,GAAIhN,IACAC,QAAS5B,KAAK6B,mBACVC,eAAgB,qBAGxB,OAAO9B,MAAKmB,MAAMY,IAAI/B,KAAKoB,UAAUM,WAAa,wBAC9CsE,mBAAmB2I,GACnBhN,IAUDiV,EAAAtV,UAAA6O,iBAAP,SAAwBrK,GACpB,GAAInE,IACAC,QAAS5B,KAAK6B,mBACVC,eAAgB,qBAGxB,OAAO9B,MAAKmB,MAAMY,IAAI/B,KAAKoB,UAAUM,WAAa,uBAC9CsE,mBAAmBF,GACnBnE,IAODiV,EAAAtV,UAAAqP,SAAP,SAAgBb,GACZ,GAAInO,IACAC,QAAS5B,KAAK6B,mBACVC,eAAgB,qBAGxB,OAAO9B,MAAKmB,MAAMwE,KAAK3F,KAAKoB,UAAUM,WAAa,oBAC/CoO,EACAnO,IAODiV,EAAAtV,UAAAoN,mBAAP,SAA0BC,GACtB,GAAIhN,IACAC,QAAS5B,KAAK6B,mBACVC,eAAgB,qBAGxB,OAAO9B,MAAKmB,MAAMY,IAAI/B,KAAKoB,UAAUM,WAAa,0BAC9CsE,mBAAmB2I,GACnBhN,IAUDiV,EAAAtV,UAAAO,kBAAP,SAAyBD,GAErB,GAAIsW,GAAO,GAAI3Y,GAAA,CACf,IAAIqC,EACA,IAAK,GAAIzB,KAAOyB,GACRA,EAAQoU,eAAe7V,IACvB+X,EAAKC,OAAOhY,EAAKyB,EAAQzB,GAMrC,IAAIiY,GAA4BpY,KAAK6W,cAAc/T,SAAS9C,KAAKoB,UAAUkW,iBAAiB,EAI5F,OAHIc,IACAF,EAAKC,OAAO,gBAAiB,UAAYC,EAAYZ,cAElDU,GAGHtB,EAAAtV,UAAAyI,WAAR,SAAmBoB,GAIf,MAHKA,KACDA,EAAO,GAAIlD,OAER,GAAIA,MAAKkD,EAAKtB,iBAAkBsB,EAAKrB,cAAeqB,EAAKpB,aAC5DoB,EAAKnB,cAAemB,EAAKlB,gBAAiBkB,EAAKjB,kBAG/C0M,EAAAtV,UAAA+V,wBAAR,SAAgCgB,GAC5B,GAAIlN,GAAOnL,KAAK+J,YAEhB,OADAoB,GAAKmN,WAAWnN,EAAKjB,gBAAkBmO,GAChClN,GA/NfyL,EAAA7W,GAACV,EAAAwB,EAAAvB,EAAA,cpBk7DOyB,EAAW,qBAA2L,mBAA5JwB,EAA4E,mBAAhEhD,GAA0D,GAAqBA,EAA0D,IAAqBgD,GAAO9B,OAA2M,mBAA1L+B,EAA2F,mBAA/E7C,GAAyE,GAAqBA,EAAyE,IAAqB6C,GAAO/B,OAA6N,mBAA5MgC,EAAoG,mBAAxFkU,GAAkF,GAAqBA,EAAkF,IAAqBlU,GAAOhC,UAC9qBmW,EAEH,IAAIrU,GAAIC,EAAIC,MAMV8V,GACA,SAASpZ,EAAQC,EAASC,GAEhC,YACqB,IAAIC,GAA8CD,EAAoB,GAClEmZ,EAA0DnZ,EAAoB,IACxEA,GAAoBQ,EAAET,EAAS,IAAK,WAAa,MAAOqZ,IACvF,IAAI1Y,GAAcC,MAAQA,KAAKD,YAAe,SAAUE,EAAYC,EAAQC,EAAKC,GAC7E,GAA2HP,GAAvHQ,EAAIC,UAAUC,OAAQC,EAAIH,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOK,OAAOC,yBAAyBR,EAAQC,GAAOC,CACrH,IAAuB,gBAAZO,UAAoD,kBAArBA,SAAQC,SAAyBJ,EAAIG,QAAQC,SAASX,EAAYC,EAAQC,EAAKC,OACpH,KAAK,GAAIS,GAAIZ,EAAWM,OAAS,EAAGM,GAAK,EAAGA,KAAShB,EAAII,EAAWY,MAAIL,GAAKH,EAAI,EAAIR,EAAEW,GAAKH,EAAI,EAAIR,EAAEK,EAAQC,EAAKK,GAAKX,EAAEK,EAAQC,KAASK,EAChJ,OAAOH,GAAI,GAAKG,GAAKC,OAAOK,eAAeZ,EAAQC,EAAKK,GAAIA,GAE5DO,EAAcf,MAAQA,KAAKe,YAAe,SAAUC,EAAGC,GACvD,GAAuB,gBAAZN,UAAoD,kBAArBA,SAAQO,SAAyB,MAAOP,SAAQO,SAASF,EAAGC,IqBh/D1GwX,EAAA,WAYE,QAAAA,KACMD,EAAA,EAAYrS,YACdnG,KAAK0B,WAAa,wCAClB1B,KAAKiX,YAAc,4CAEnBjX,KAAKgX,WAAa,mCAElBhX,KAAK0B,WAAa,8BAClB1B,KAAKiX,YAAc,kCACnBjX,KAAKgX,WAAa,0BAEpBhX,KAAKsC,mBAAqB,oBAC1BtC,KAAK2E,SAAW,GAChB3E,KAAKoG,eAAiB,cACtBpG,KAAKqG,mBAAqB,OAC1BrG,KAAK8X,eAAiB,eACtB9X,KAAKsX,gBAAkB,gBACvBtX,KAAKyI,cAAgB,WAEzB,MAhCAgQ,GAAA1Y,GAACV,EAAAwB,EAAAvB,EAAA,crB4gEOyB,EAAW,yBACZ0X,OAODC,IACA,SAASvZ,EAAQC,GsBxhEvB,QAAAuZ,GAAAC,GACA,SAAA9B,OAAA,uBAAA8B,EAAA,MAEAD,EAAApH,KAAA,WAAuC,UACvCoH,EAAA1I,QAAA0I,EACAxZ,EAAAC,QAAAuZ,EACAA,EAAAnT,GAAA,KtB+hEMqT,IACA,SAAS1Z,EAAQC,EAASC,GAEhC,YACqB,IAAIyZ,GAA8CzZ,EAAoB,KAElE0Z,GADsD1Z,EAAoBK,EAAEoZ,GACVzZ,EAAoB,MACtF2Z,EAA8C3Z,EAAoB,GAClE4Z,EAA0D5Z,EAAoB,KAC9E6Z,EAAsC7Z,EAAoB,KAC1D8Z,EAAuC9Z,EAAoB,IAE3D+Z,GAD+C/Z,EAAoBK,EAAEyZ,GACpB9Z,EAAoB,KACZA,GAAoBK,EAAE0Z,EuBviExGD,GAAA,OAAc,MAEVF,EAAA,EAAY9S,YACd9G,EAAAwB,EAAAmY,EAAA,kBAGF3Z,EAAAwB,EAAAkY,EAAA,KAAyBM,gBAAgBH,EAAA,IvBkjEnCI,IACA,SAASna,EAAQC,EAASC,GAEhC,YACqB,IAAIC,GAA8CD,EAAoB,GAClEqN,EAAgDrN,EAAoB,IACpEka,EAA2Ela,EAAoB,KAC/Fma,EAAuEna,EAAoB,KAC3Foa,EAAqDpa,EAAoB,KACzEqa,EAAuDra,EAAoB,KAC3Esa,EAAqEta,EAAoB,KACzFua,EAAuDva,EAAoB,KAC3Ewa,EAAoExa,EAAoB,KACxFya,EAAqEza,EAAoB,IACnFA,GAAoBQ,EAAET,EAAS,IAAK,WAAa,MAAO2a,IACvF,IAAIha,GAAcC,MAAQA,KAAKD,YAAe,SAAUE,EAAYC,EAAQC,EAAKC,GAC7E,GAA2HP,GAAvHQ,EAAIC,UAAUC,OAAQC,EAAIH,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOK,OAAOC,yBAAyBR,EAAQC,GAAOC,CACrH,IAAuB,gBAAZO,UAAoD,kBAArBA,SAAQC,SAAyBJ,EAAIG,QAAQC,SAASX,EAAYC,EAAQC,EAAKC,OACpH,KAAK,GAAIS,GAAIZ,EAAWM,OAAS,EAAGM,GAAK,EAAGA,KAAShB,EAAII,EAAWY,MAAIL,GAAKH,EAAI,EAAIR,EAAEW,GAAKH,EAAI,EAAIR,EAAEK,EAAQC,EAAKK,GAAKX,EAAEK,EAAQC,KAASK,EAChJ,OAAOH,GAAI,GAAKG,GAAKC,OAAOK,eAAeZ,EAAQC,EAAKK,GAAIA,GAE5DO,EAAcf,MAAQA,KAAKe,YAAe,SAAUC,EAAGC,GACvD,GAAuB,gBAAZN,UAAoD,kBAArBA,SAAQO,SAAyB,MAAOP,SAAQO,SAASF,EAAGC,IwB5kEpG+Y,IACFC,KAAM,GAAIC,UAAWT,EAAA,IACrBQ,KAAM,YAAaC,UAAWV,EAAA,EAAuB7E,aAAekF,EAAA,KACpEI,KAAM,gBAAiBC,UAAWX,EAAA,EAAyB5E,aAAekF,EAAA,KAC1EI,KAAM,SAAUC,UAAWR,EAAA,IAC3BO,KAAM,cAAeC,UAAWN,EAAA,EAAgBjF,aAAekF,EAAA,KAC/DI,KAAM,WAAYC,UAAWP,EAAA,EAAuBhF,aAAemF,EAAA,KAQvEC,EAAA,mBAAAA,MAAoC,MALpCA,GAAAha,GAACV,EAAAwB,EAAAvB,EAAA,WACC6a,SAAUzN,EAAA,EAAa0N,QAAQJ,IAC/B5a,SAAUsN,EAAA,GACV2N,exB6lEMtZ,EAAW,yBACZgZ,OAODO,IACA,SAASnb,EAAQC,EAASC,GAEhC,YACqB,IAAIkb,GAA0Dlb,EAAoB,IAC9Emb,EAA8Cnb,EAAoB,GAClEob,EAA+Cpb,EAAoB,IACnEqb,EAA8Crb,EAAoB,IAClEsb,EAA+Ctb,EAAoB,KACnEub,EAAsDvb,EAAoB,IAE1Ewb,GAD8Dxb,EAAoBK,EAAEkb,GACpCvb,EAAoB,MAEpEyb,GADwDzb,EAAoBK,EAAEmb,GAChCxb,EAAoB,MAElE0b,GADsD1b,EAAoBK,EAAEob,GACjCzb,EAAoB,MAE/D2b,GADmD3b,EAAoBK,EAAEqb,GACnB1b,EAAoB,MAE1E4b,GAD8D5b,EAAoBK,EAAEsb,GACnC3b,EAAoB,MAErE6b,GADyD7b,EAAoBK,EAAEub,GACT5b,EAAoB,MAC1F8b,EAAyE9b,EAAoB,IAC7F+b,EAAqE/b,EAAoB,KACzFgc,EAAmEhc,EAAoB,KACvFic,EAAgEjc,EAAoB,KACpFkc,EAA4Elc,EAAoB,KAChGmc,EAAwEnc,EAAoB,KAC5Foc,EAAmEpc,EAAoB,KACvFqc,EAAwErc,EAAoB,KAC5Fsc,EAAmEtc,EAAoB,IACvFuc,EAAgEvc,EAAoB,KACpFwc,EAA+Dxc,EAAoB,KACnFyc,EAA8Dzc,EAAoB,KAClF0c,EAAwF1c,EAAoB,KAC5G2c,EAA4F3c,EAAoB,KAChH4c,EAA8E5c,EAAoB,KAClG6c,EAAgG7c,EAAoB,KACpH8c,EAA0G9c,EAAoB,KAC9H+c,EAAqD/c,EAAoB,KACzEgd,EAAwEhd,EAAoB,KAC5Fid,EAAuEjd,EAAoB,KAC3Fkd,EAA4Eld,EAAoB,KAChGmd,EAAwEnd,EAAoB,KAC5Fod,EAAsDpd,EAAoB,KAC1Eqd,EAAwDrd,EAAoB,KAC5Esd,EAAsEtd,EAAoB,KAC1Fud,EAAwDvd,EAAoB,IACtEA,GAAoBQ,EAAET,EAAS,IAAK,WAAa,MAAOyd,IACvF,IAAI9c,GAAcC,MAAQA,KAAKD,YAAe,SAAUE,EAAYC,EAAQC,EAAKC,GAC7E,GAA2HP,GAAvHQ,EAAIC,UAAUC,OAAQC,EAAIH,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOK,OAAOC,yBAAyBR,EAAQC,GAAOC,CACrH,IAAuB,gBAAZO,UAAoD,kBAArBA,SAAQC,SAAyBJ,EAAIG,QAAQC,SAASX,EAAYC,EAAQC,EAAKC,OACpH,KAAK,GAAIS,GAAIZ,EAAWM,OAAS,EAAGM,GAAK,EAAGA,KAAShB,EAAII,EAAWY,MAAIL,GAAKH,EAAI,EAAIR,EAAEW,GAAKH,EAAI,EAAIR,EAAEK,EAAQC,EAAKK,GAAKX,EAAEK,EAAQC,KAASK,EAChJ,OAAOH,GAAI,GAAKG,GAAKC,OAAOK,eAAeZ,EAAQC,EAAKK,GAAIA,GAE5DO,EAAcf,MAAQA,KAAKe,YAAe,SAAUC,EAAGC,GACvD,GAAuB,gBAAZN,UAAoD,kBAArBA,SAAQO,SAAyB,MAAOP,SAAQO,SAASF,EAAGC,IyBjlE1G4b,EAAA,mBAAAA,MAAyB,MAtDzBA,GAAA9c,GAACV,EAAAwB,EAAA2Z,EAAA,WACCsC,cACE7B,EAAA,oBACAA,EAAA,kBAEAa,EAAA,EAEAnB,EAAA,EACAoB,EAAA,EACAC,EAAA,EACAC,EAAA,EACAC,EAAA,EACAC,EAAA,EACAG,EAAA,EACAD,EAAA,EAEAE,EAAA,EACAC,EAAA,EACAC,EAAA,EACAC,EAAA,EACAC,EAAA,EACAC,EAAA,GAEFzC,SACEI,EAAA,cACAE,EAAA,YACAA,EAAA,oBACAC,EAAA,EACA0B,EAAA,EACAxB,EAAA,YACAC,EAAA,aACAC,EAAA,eAAeV,UACfU,EAAA,iBAAiBV,UACjBU,EAAA,eAAeV,UACfU,EAAA,WAAWV,UACXW,EAAA,aACAC,EAAA,cAEFX,WACEa,EAAA,EACAC,EAAA,EACAC,EAAA,EACAC,EAAA,EACAC,EAAA,EACAC,EAAA,EACAC,EAAA,EACAC,EAAA,EACAC,EAAA,EACAC,EAAA,EACAC,EAAA,EACAC,EAAA,GAEFkB,WAAYpC,EAAA,KzBqrEN5Z,EAAW,yBACZ8b,OAODG,IACA,SAAS7d,EAAQC,EAASC,GAEhC,YACqB,IACI4d,IAD+C5d,EAAoB,KACvBA,EAAoB,KAE9CA,GAAoBQ,EAAET,EAAS,IAAK,WAAa,MAAO6d,GAA6C,KAO1IC,IACA,SAAS/d,EAAQC,EAASC,GAEhC,YACqB,IAAIC,GAA8CD,EAAoB,GAClEuH,EAA+CvH,EAAoB,GAC7DA,GAAoBQ,EAAET,EAAS,IAAK,WAAa,MAAO+d,IACvF,IAAIpd,GAAcC,MAAQA,KAAKD,YAAe,SAAUE,EAAYC,EAAQC,EAAKC,GAC7E,GAA2HP,GAAvHQ,EAAIC,UAAUC,OAAQC,EAAIH,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOK,OAAOC,yBAAyBR,EAAQC,GAAOC,CACrH,IAAuB,gBAAZO,UAAoD,kBAArBA,SAAQC,SAAyBJ,EAAIG,QAAQC,SAASX,EAAYC,EAAQC,EAAKC,OACpH,KAAK,GAAIS,GAAIZ,EAAWM,OAAS,EAAGM,GAAK,EAAGA,KAAShB,EAAII,EAAWY,MAAIL,GAAKH,EAAI,EAAIR,EAAEW,GAAKH,EAAI,EAAIR,EAAEK,EAAQC,EAAKK,GAAKX,EAAEK,EAAQC,KAASK,EAChJ,OAAOH,GAAI,GAAKG,GAAKC,OAAOK,eAAeZ,EAAQC,EAAKK,GAAIA,GAE5DO,EAAcf,MAAQA,KAAKe,YAAe,SAAUC,EAAGC,GACvD,GAAuB,gBAAZN,UAAoD,kBAArBA,SAAQO,SAAyB,MAAOP,SAAQO,SAASF,EAAGC,I0BryE1Gkc,EAAA,WAmBE,QAAAA,GAAY9V,GAJFrH,KAAAod,QAAgC,GAAI9d,GAAA,aAK5CU,KAAKod,QAAU,GAAI9d,GAAA,aAEnBU,KAAKqd,UACD/Z,MAAO,UAAWkO,MAAO,gBACzBlO,MAAO,SAAUkO,MAAO,mBACxBlO,MAAO,SAAUkO,MAAO,sBACxBlO,MAAO,MAAOkO,MAAO,kBACrBlO,MAAO,OAAQkO,MAAO,mBACtBlO,MAAO,MAAOkO,MAAO,kBAIzBxR,KAAK+E,MAAQsC,EAAYe,QAAQ,GAAIxB,EAAA,WAAWyB,UAChDrI,KAAKiF,YAAcoC,EAAYe,QAAQ,GAAIxB,EAAA,WAAWyB,UACtDrI,KAAKkG,OAASmB,EAAYe,QAAQpI,KAAKqd,QAAQ,GAAG/Z,MAAOsD,EAAA,WAAWyB,UACpErI,KAAKsd,UAAYjW,EAAYkB,OAC3BxD,MAAS/E,KAAK+E,MACdE,YAAejF,KAAKiF,YACpBiB,OAAUlG,KAAKkG,SAmCrB,MAjEEzF,QAAAK,eAAWqc,EAAA7b,UAAA,S1BwzELS,I0BpzEN,WACE,MAAO/B,MAAKud,Q1BszERxL,I0B3zEN,SAAiBzO,GACftD,KAAKud,OAASja,EACdtD,KAAKwd,a1B6zEDvL,YAAY,EACZC,cAAc,I0B9xEpBiL,EAAA7b,UAAAkH,SAAA,aAGQ2U,EAAA7b,UAAAkc,UAAR,WACE,MAAIxd,MAAKud,QACPvd,KAAK+E,MAAMgH,SAAS/L,KAAKud,OAAOxY,OAChC/E,KAAKiF,YAAY8G,SAAS/L,KAAKud,OAAOtY,iBACtCjF,MAAKkG,OAAO6F,SAAS/L,KAAKud,OAAOrX,UAGnClG,KAAK+E,MAAMzB,MAAQ,KACnBtD,KAAKiF,YAAY3B,MAAQ,UACzBtD,KAAKkG,OAAO5C,MAAQ,QAGd6Z,EAAA7b,UAAAmc,UAAR,WACOzd,KAAKud,SAGVvd,KAAKud,OAAOxY,MAAQ/E,KAAK+E,MAAMzB,MAAMoa,OACrC1d,KAAKud,OAAOtY,YAAcjF,KAAKiF,YAAY3B,MAAMoa,OACjD1d,KAAKud,OAAOrX,OAASlG,KAAKkG,OAAO5C,QAG5B6Z,EAAA7b,UAAA0H,KAAP,WACOhJ,KAAKsd,UAAUrU,QAGpBjJ,KAAKyd,YACLzd,KAAKod,QAAQrF,KAAK/X,KAAKud,UAhEzBxd,GAACV,EAAAwB,EAAAvB,EAAA,S1Bi2EKyB,EAAW,cAAeN,QAC1BM,EAAW,qBAAsBN,UAClC0c,EAAqB7b,UAAW,QAAS,M0B31E9CvB,GAACV,EAAAwB,EAAAvB,EAAA,U1B81EKyB,EAAW,cAAoL,mBAA5JwB,EAA4E,mBAAhEjD,GAA0D,cAAqBA,EAA0D,eAAqBiD,GAAO9B,SACrN0c,EAAqB7b,UAAW,UAAW,Q0Bn3ElD6b,EAAApd,GAACV,EAAAwB,EAAAvB,EAAA,YACC0M,SAAU,mBACVC,SAAA5M,EAAA,KACA6M,QAAA7M,EAAA,Q1Bu3EM0B,EAAW,qBAA2L,mBAA5JyB,EAA4E,mBAAhEoE,GAA0D,aAAqBA,EAA0D,cAAqBpE,GAAO/B,UAC5N0c,EAEH,IAAI5a,GAAIC,MAMNmb,IACA,SAASxe,EAAQC,EAASC,GAEhC,YACqB,IAAIC,GAA8CD,EAAoB,GAClEue,EAAgDve,EAAoB,KAEpEwe,GADwDxe,EAAoBK,EAAEke,GACnBve,EAAoB,IACzEA,GAAoBQ,EAAET,EAAS,IAAK,WAAa,MAAO0e,IACvF,IAAI/d,GAAcC,MAAQA,KAAKD,YAAe,SAAUE,EAAYC,EAAQC,EAAKC,GAC7E,GAA2HP,GAAvHQ,EAAIC,UAAUC,OAAQC,EAAIH,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOK,OAAOC,yBAAyBR,EAAQC,GAAOC,CACrH,IAAuB,gBAAZO,UAAoD,kBAArBA,SAAQC,SAAyBJ,EAAIG,QAAQC,SAASX,EAAYC,EAAQC,EAAKC,OACpH,KAAK,GAAIS,GAAIZ,EAAWM,OAAS,EAAGM,GAAK,EAAGA,KAAShB,EAAII,EAAWY,MAAIL,GAAKH,EAAI,EAAIR,EAAEW,GAAKH,EAAI,EAAIR,EAAEK,EAAQC,EAAKK,GAAKX,EAAEK,EAAQC,KAASK,EAChJ,OAAOH,GAAI,GAAKG,GAAKC,OAAOK,eAAeZ,EAAQC,EAAKK,GAAIA,GAE5DO,EAAcf,MAAQA,KAAKe,YAAe,SAAUC,EAAGC,GACvD,GAAuB,gBAAZN,UAAoD,kBAArBA,SAAQO,SAAyB,MAAOP,SAAQO,SAASF,EAAGC,I2Bx5E1G6c,EAAA,WAyBE,QAAAA,GAAoB1c,GAAApB,KAAAoB,YALVpB,KAAA+d,SAAiC,GAAIze,GAAA,aAM7CU,KAAK+d,SAAW,GAAIze,GAAA,aAKxB,MA9BWmB,QAAAK,eAAWgd,EAAAxc,UAAA,W3Bo6EdS,I2Bp5EN,WACE,MAAO/B,MAAKge,U3Bs5ERjM,I2Bv6EG,SAAmBzO,GAAnB,GAAA9B,GAAAxB,IACHA,MAAKge,WAAa1a,IAGtBtD,KAAKge,SAAW1a,EAChBtD,KAAKie,SAAW,GAAIL,GAAA,cAClBnc,IAAQzB,KAAKoB,UAAUM,WAAU,UAAU1B,KAAKke,QAAO,aAGzDle,KAAKie,SAASE,kBAAoB,SAACC,GAAWA,EAAKC,iBAAkB,GAErEre,KAAKie,SAASK,gBAAkB,SAACC,EAAWC,EAAkBC,EAC5D7c,GACAJ,EAAKuc,SAAShG,KAAKwG,EAAKH,KAAK3U,S3B06E3BwI,YAAY,EACZC,cAAc,I2B55EpB4L,EAAAxc,UAAAkH,SAAA,aA5BAzI,GAACV,EAAAwB,EAAAvB,EAAA,S3B87EKyB,EAAW,cAAewT,QAC1BxT,EAAW,qBAAsBwT,UAClCuJ,EAAuBxc,UAAW,UAAW,M2B76ElDvB,GAACV,EAAAwB,EAAAvB,EAAA,U3Bg7EKyB,EAAW,cAAoL,mBAA5JwB,EAA4E,mBAAhEjD,GAA0D,cAAqBA,EAA0D,eAAqBiD,GAAO9B,SACrNqd,EAAuBxc,UAAW,WAAY,Q2B18ErDwc,EAAA/d,GAACV,EAAAwB,EAAAvB,EAAA,YACC0M,SAAU,qBACVC,SAAA5M,EAAA,KACA6M,QAAA7M,EAAA,Q3B88EM0B,EAAW,qBAA2O,mBAA5MyB,EAAoG,mBAAxFqb,GAAkF,GAAqBA,EAAkF,IAAqBrb,GAAO/B,UAC5Qqd,EAEH,IAAIvb,GAAIC,MAMNkc,IACA,SAASvf,EAAQC,EAASC,GAEhC,YACqB,IAAIC,GAA8CD,EAAoB,GAClEsf,EAAiDtf,EAAoB,IAC/DA,GAAoBQ,EAAET,EAAS,IAAK,WAAa,MAAOwf,IACvF,IAAI7e,GAAcC,MAAQA,KAAKD,YAAe,SAAUE,EAAYC,EAAQC,EAAKC,GAC7E,GAA2HP,GAAvHQ,EAAIC,UAAUC,OAAQC,EAAIH,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOK,OAAOC,yBAAyBR,EAAQC,GAAOC,CACrH,IAAuB,gBAAZO,UAAoD,kBAArBA,SAAQC,SAAyBJ,EAAIG,QAAQC,SAASX,EAAYC,EAAQC,EAAKC,OACpH,KAAK,GAAIS,GAAIZ,EAAWM,OAAS,EAAGM,GAAK,EAAGA,KAAShB,EAAII,EAAWY,MAAIL,GAAKH,EAAI,EAAIR,EAAEW,GAAKH,EAAI,EAAIR,EAAEK,EAAQC,EAAKK,GAAKX,EAAEK,EAAQC,KAASK,EAChJ,OAAOH,GAAI,GAAKG,GAAKC,OAAOK,eAAeZ,EAAQC,EAAKK,GAAIA,GAE5DO,EAAcf,MAAQA,KAAKe,YAAe,SAAUC,EAAGC,GACvD,GAAuB,gBAAZN,UAAoD,kBAArBA,SAAQO,SAAyB,MAAOP,SAAQO,SAASF,EAAGC,I4B1+EpG4d,EAAU,GAOhBD,EAAA,WAgBE,QAAAA,GAAYE,GAVJ9e,KAAA+e,WACNha,MAAO,WACPia,QAAS,yBACTC,WAAY,UACZC,OAAQ,MAURJ,EAAerU,SAAWzK,KAAKyK,SAAS0E,KAAKnP,MAwEjD,MArEU4e,GAAAtd,UAAA6d,UAAR,SAAkBH,EAAkCja,GAAlC,SAAAia,MAAUhf,KAAK+e,UAAUC,SAAS,SAAAja,MAAQ/E,KAAK+e,UAAUha,OACzE/E,KAAK+E,MAAQA,EACb/E,KAAKgf,QAAUA,EACfhf,KAAKkf,OAASlf,KAAK+e,UAAUG,OAC7Blf,KAAKif,WAAajf,KAAK+e,UAAUE,YAGnCL,EAAAtd,UAAAmJ,SAAA,SAASuU,EAAkCja,GAA3C,GAAAvD,GAAAxB,IAAS,UAAAgf,MAAUhf,KAAK+e,UAAUC,SAAS,SAAAja,MAAQ/E,KAAK+e,UAAUha,OAChE/E,KAAKmf,UAAUH,EAASja,EAExB,IAAIqa,GAAU,GAAIpP,SAAiB,SAAAC,GACjCzO,EAAK6d,KAAKpP,IAEZ,OAAOmP,IAGDR,EAAAtd,UAAA+d,KAAR,SAAapP,GAAb,GAAAzO,GAAAxB,IACE0F,UAAS4Z,QAAU,IAEnB,IAAIC,GAAkB,SAACC,GAAW,MAAAvP,IAAQ,IACtCwP,EAAkB,SAACD,GAAW,MAAAvP,IAAQ,GAErCjQ,MAAK0f,iBAAoB1f,KAAK2f,eAAkB3f,KAAK4f,YAG1D5f,KAAK0f,gBAAgBG,MAAMC,QAAU,EACrC9f,KAAK0f,gBAAgBG,MAAME,OAAS,KAEpC/f,KAAK2f,cAAcK,QAAU,SAAER,GAC7BA,EAAES,iBACGV,EAAgBC,IACnBhe,EAAK0e,cAITlgB,KAAK4f,UAAUI,QAAU,SAAER,GACzBA,EAAES,iBACGR,EAAgBD,IACnBhe,EAAK0e,cAITlgB,KAAK0f,gBAAgBM,QAAU,WAE7B,MADAxe,GAAK0e,aACEX,EAAgB,OAGzB7Z,SAAS4Z,QAAU,SAACE,GAClB,GAAIA,EAAEW,QAAUtB,EAEd,MADArd,GAAK0e,aACEX,EAAgB,OAI3Bvf,KAAK0f,gBAAgBG,MAAMC,QAAU,EACrC9f,KAAK0f,gBAAgBG,MAAMO,QAAU,UAG/BxB,EAAAtd,UAAA4e,WAAR,cAAA1e,GAAAxB,IACE0F,UAAS4Z,QAAU,KACnBtf,KAAK0f,gBAAgBG,MAAMC,QAAU,EACrCO,OAAOC,WAAW,WAAM,MAAA9e,GAAKke,gBAAgBG,MAAME,QAAS,GAAI,MAGlEnB,EAAAtd,UAAAkH,SAAA,WACExI,KAAK0f,gBAAkBha,SAAS6a,eAAe,qBAC/CvgB,KAAK2f,cAAgBja,SAAS6a,eAAe,gBAC7CvgB,KAAK4f,UAAYla,SAAS6a,eAAe,aA/F7C3B,EAAA7e,GAACV,EAAAwB,EAAAvB,EAAA,YACC0M,SAAU,cACVC,SAAA5M,EAAA,KACA6M,QAAA7M,EAAA,Q5B8jFM0B,EAAW,qBAAqN,mBAAtLwB,EAAyF,mBAA7Eoc,GAAuE,GAAqBA,EAAuE,IAAqBpc,GAAO9B,UACtPme,EAEH,IAAIrc,OAMFie,IACA,SAASrhB,EAAQC,EAASC,GAEhC,YACqB,IAAIC,GAA8CD,EAAoB,GAClEuH,EAA+CvH,EAAoB,IACnEsN,EAAsDtN,EAAoB,IAE1EohB,GAD8DphB,EAAoBK,EAAEiN,GACzBtN,EAAoB,MAC/EqhB,EAAuDrhB,EAAoB,IACrEA,GAAoBQ,EAAET,EAAS,IAAK,WAAa,MAAOuhB,IACvF,IAAI5gB,GAAcC,MAAQA,KAAKD,YAAe,SAAUE,EAAYC,EAAQC,EAAKC,GAC7E,GAA2HP,GAAvHQ,EAAIC,UAAUC,OAAQC,EAAIH,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOK,OAAOC,yBAAyBR,EAAQC,GAAOC,CACrH,IAAuB,gBAAZO,UAAoD,kBAArBA,SAAQC,SAAyBJ,EAAIG,QAAQC,SAASX,EAAYC,EAAQC,EAAKC,OACpH,KAAK,GAAIS,GAAIZ,EAAWM,OAAS,EAAGM,GAAK,EAAGA,KAAShB,EAAII,EAAWY,MAAIL,GAAKH,EAAI,EAAIR,EAAEW,GAAKH,EAAI,EAAIR,EAAEK,EAAQC,EAAKK,GAAKX,EAAEK,EAAQC,KAASK,EAChJ,OAAOH,GAAI,GAAKG,GAAKC,OAAOK,eAAeZ,EAAQC,EAAKK,GAAIA,GAE5DO,EAAcf,MAAQA,KAAKe,YAAe,SAAUC,EAAGC,GACvD,GAAuB,gBAAZN,UAAoD,kBAArBA,SAAQO,SAAyB,MAAOP,SAAQO,SAASF,EAAGC,I6BhlF1G0f,EAAA,WAwBE,QAAAA,GAAYtZ,EACFG,EACAE,EACAuH,GAFAjP,KAAAwH,UACAxH,KAAA0H,mBACA1H,KAAAiP,eA1BAjP,KAAAod,QAA8C,GAAI9d,GAAA,aA4B1DU,KAAK4gB,YACDtd,MAAO,EAAGkO,MAAO,WACjBlO,MAAO,EAAGkO,MAAO,WACjBlO,MAAO,EAAGkO,MAAO,SAGrBxR,KAAK6gB,iBAAmBxZ,EAAYe,SAAQ,GAC5CpI,KAAKsO,KAAOjH,EAAYe,QAAQ,MAChCpI,KAAK+E,MAAQsC,EAAYe,QAAQ,MACjCpI,KAAKiF,YAAcoC,EAAYe,QAAQ,MACvCpI,KAAKgF,OAASqC,EAAYe,QAAQ,MAClCpI,KAAK8gB,QAAUzZ,EAAYe,QAAQ,GACnCpI,KAAK+gB,QAAU1Z,EAAYe,QAAQ,GACnCpI,KAAKghB,SAAW3Z,EAAYe,QAAQpI,KAAK4gB,UAAU,IACnD5gB,KAAKihB,eAAiB5Z,EAAYe,SAAQ,GAE1CpI,KAAKkhB,QAAU7Z,EAAYkB,OACzBsY,iBAAoB7gB,KAAK6gB,iBACzBvS,KAAQtO,KAAKsO,KACbvJ,MAAS/E,KAAK+E,MACdE,YAAejF,KAAKiF,YACpBD,OAAUhF,KAAKgF,OACf8b,QAAW9gB,KAAK8gB,QAChBC,QAAW/gB,KAAK+gB,QAChBC,SAAYhhB,KAAKghB,SACjBC,eAAkBjhB,KAAKihB,iBAEzBjhB,KAAKmhB,aACLnhB,KAAKod,QAAU,GAAI9d,GAAA,aACnBU,KAAKgI,aAAc,GAAIC,OAAOC,cAyHlC,MAtHEyY,GAAArf,UAAAkH,SAAA,WACExI,KAAKoN,iBACLpN,KAAKqS,aAGAsO,EAAArf,UAAA8f,uBAAP,SAA8B9d,GAC5BtD,KAAKqhB,gBAAkB/d,GAGlBqd,EAAArf,UAAAgR,MAAP,WACE,IAAItS,KAAK2I,OAAQ3I,KAAKshB,SAAtB,CAGA,GAAIjd,GAASrE,KAAKuhB,WAClBvhB,MAAKod,QAAQrF,KAAK1T,KAKbsc,EAAArf,UAAAsP,MAAP,WACE,IAAI5Q,KAAK2I,OAAQ3I,KAAKshB,SAAtB,CAGAthB,KAAKkhB,QAAQtQ,QACb5Q,KAAKwhB,kBAAkBlN,OAAS,KAChCtU,KAAKqhB,gBAAkB,KAQvBrhB,KAAKsO,KAAKvC,SAAS/L,KAAK+S,MAAMxS,OAAS,EAAIP,KAAK+S,MAAM,GAAK,KAC3D,IAAI1O,GAASrE,KAAKuhB,WAClBvhB,MAAKod,QAAQrF,KAAK1T,KAGZsc,EAAArf,UAAAigB,UAAR,WACE,GAAIld,IACFI,WAAY,EACZE,SAAU,GACVC,QAAW5E,KAAKsO,KAAKhL,OAAStD,KAAKsO,KAAKhL,QAAUtD,KAAK+S,MAAM,GAE3D/S,KAAKsO,KAAKhL,MAAMiQ,SADhB,KAEFxO,MAAO/E,KAAK+E,MAAMzB,MAClB0B,OAAQhF,KAAKgF,OAAO1B,MACpB2B,YAAajF,KAAKiF,YAAY3B,MAC9B4B,QAASlF,KAAK8gB,QAAQxd,MACtB6B,QAASnF,KAAK+gB,QAAQzd,MACtB8B,KAAMpF,KAAKghB,SAAS1d,MAAQtD,KAAKghB,SAAS1d,MAAMA,MAAQ,KACxD+B,WAAYrF,KAAKihB,eAAe3d,MAGlC,IAAItD,KAAKqhB,gBAAiB,CAExB,IAAK,GADDI,MACK5gB,EAAI,EAAGA,EAAIb,KAAKqhB,gBAAgB9gB,OAAQM,IAC/C4gB,EAASld,KAAKvE,KAAKqhB,gBAAgBxgB,GAAG2E,GAEpCic,GAASlhB,OAAS,IACpB8D,EAAOQ,WAAa4c,EAASnc,KAAK,KAClCjB,EAAOS,iBAAmB9E,KAAK6gB,iBAAiBvd,OAGpD,MAAOe,IAGDsc,EAAArf,UAAA8L,eAAR,cAAA5L,GAAAxB,IACEA,MAAK2I,MAAO,EACZ3I,KAAK0H,iBAAiBnG,gBACnBqH,UACD,SAACC,GACCrH,EAAKqD,aACL,KAAK,GAAIhE,GAAI,EAAGA,EAAIgI,EAAKtI,OAAQM,IAC/BW,EAAKqD,WAAWN,MACdiB,GAAIqD,EAAKhI,GAAG2E,GACZkc,KAAM7Y,EAAKhI,GAAGiF,QAIpB,SAAA1D,GACEZ,EAAKgG,QAAQpF,MAAMA,GACnBZ,EAAKmH,MAAO,GAEd,WACEnH,EAAKmH,MAAO,KAKVgY,EAAArf,UAAA6f,WAAR,WACEnhB,KAAK+S,QACHQ,SAAU,cACVlE,UAAW,GACXE,SAAU,gBAEZvP,KAAKsO,KAAKvC,SAAS/L,KAAK+S,MAAM,KAGxB4N,EAAArf,UAAA+Q,UAAR,cAAA7Q,GAAAxB,IACEA,MAAK2I,MAAO,EACZ3I,KAAKiP,aAAazI,WACfoC,UACD,SAACC,GACCrH,EAAK2f,YACL,KAAK,GAAItgB,GAAI,EAAGA,EAAIgI,EAAKtI,OAAQM,IAC/BW,EAAKuR,MAAMxO,KAAKsE,EAAKhI,KAGzB,SAAAuB,GACEZ,EAAKgG,QAAQpF,MAAMA,GACnBZ,EAAKmH,MAAO,GAEd,WACEnH,EAAKmH,MAAO,KA9KlB5I,GAACV,EAAAwB,EAAAvB,EAAA,U7BmuFKyB,EAAW,cAAoL,mBAA5JwB,EAA4E,mBAAhEjD,GAA0D,cAAqBA,EAA0D,eAAqBiD,GAAO9B,SACrNkgB,EAAyBrf,UAAW,UAAW,Q6BnuFpDvB,GAACV,EAAAwB,EAAAvB,EAAA,S7BsuFKyB,EAAW,cAAe4gB,UAC3BhB,EAAyBrf,UAAW,WAAY,Q6BtuFrDvB,GAACV,EAAAwB,EAAAvB,EAAA,S7ByuFKyB,EAAW,cAAe4gB,UAC3BhB,EAAyBrf,UAAW,WAAY,Q6BzuFrDvB,GAACV,EAAAwB,EAAAvB,EAAA,WAAU,W7B4uFLyB,EAAW,cAAeN,SAC3BkgB,EAAyBrf,UAAW,oBAAqB,Q6BtvFhEqf,EAAA5gB,GAACV,EAAAwB,EAAAvB,EAAA,YACC0M,SAAU,uBACVC,SAAA5M,EAAA,KACA6M,QAAA7M,EAAA,Q7B0vFM0B,EAAW,qBAA2L,mBAA5JyB,EAA4E,mBAAhEoE,GAA0D,aAAqBA,EAA0D,cAAqBpE,GAAO/B,OAA+L,mBAA9KgC,EAAqF,mBAAzEkK,GAAmE,eAAqBA,EAAmE,gBAAqBlK,GAAOhC,OAA6N,mBAA5M0L,EAAoG,mBAAxFsU,GAAkF,GAAqBA,EAAkF,IAAqBtU,GAAO1L,OAA6M,mBAA5L2L,EAA4F,mBAAhFsU,GAA0E,GAAqBA,EAA0E,IAAqBtU,GAAO3L,UACp4BkgB,EAEH,IAAIpe,GAAIC,EAAIC,EAAI0J,EAAIC,MAMlBwV,IACA,SAASziB,EAAQC,EAASC,GAEhC,YACqB,IAAIC,GAA8CD,EAAoB,EAC5DA,GAAoBQ,EAAET,EAAS,IAAK,WAAa,MAAOyiB,IACvF,IAAI9hB,GAAcC,MAAQA,KAAKD,YAAe,SAAUE,EAAYC,EAAQC,EAAKC,GAC7E,GAA2HP,GAAvHQ,EAAIC,UAAUC,OAAQC,EAAIH,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOK,OAAOC,yBAAyBR,EAAQC,GAAOC,CACrH,IAAuB,gBAAZO,UAAoD,kBAArBA,SAAQC,SAAyBJ,EAAIG,QAAQC,SAASX,EAAYC,EAAQC,EAAKC,OACpH,KAAK,GAAIS,GAAIZ,EAAWM,OAAS,EAAGM,GAAK,EAAGA,KAAShB,EAAII,EAAWY,MAAIL,GAAKH,EAAI,EAAIR,EAAEW,GAAKH,EAAI,EAAIR,EAAEK,EAAQC,EAAKK,GAAKX,EAAEK,EAAQC,KAASK,EAChJ,OAAOH,GAAI,GAAKG,GAAKC,OAAOK,eAAeZ,EAAQC,EAAKK,GAAIA,GAE5DO,EAAcf,MAAQA,KAAKe,YAAe,SAAUC,EAAGC,GACvD,GAAuB,gBAAZN,UAAoD,kBAArBA,SAAQO,SAAyB,MAAOP,SAAQO,SAASF,EAAGC,I8BxxF1G4gB,EAAA,mBAAAA,KAEY7hB,KAAA8hB,gBAAkB,GAAIxiB,GAAA,aAOxBU,KAAA+hB,SAAW,OAAQ,OAAQ,OAAQ,OAAQ,QAoErD,MAlEUF,GAAAvgB,UAAA0gB,gBAAR,SAAwBC,GAYtB,IAAkB,GAXdC,GAAQ,EACRC,EAAQ,yBAERC,EAAe,SAASC,KAAKJ,GAC7BK,EAAe,SAASD,KAAKJ,GAC7BM,EAAU,SAASF,KAAKJ,GACxBO,EAAUL,EAAME,KAAKJ,GAErBQ,GAASL,EAAcE,EAAcC,EAASC,GAE9CE,EAAgB,EACFC,EAAA,EAAAC,EAAAH,EAAAE,EAAAC,EAAAriB,OAAAoiB,IAAM,CAAnB,GAAIE,GAAKD,EAAAD,EACZD,IAAiBG,KAAU,EAAO,EAAI,EAcxC,MAXAX,IAAS,EAAID,EAAE1hB,QAAW0hB,EAAE1hB,QAAU,GAAM,EAAI,GAChD2hB,GAAyB,GAAhBQ,EAGTR,EAASD,EAAE1hB,QAAU,EAAKuiB,KAAKC,IAAIb,EAAO,IAAMA,EAGhDA,EAA2B,IAAlBQ,EAAuBI,KAAKC,IAAIb,EAAO,IAAMA,EACtDA,EAA2B,IAAlBQ,EAAuBI,KAAKC,IAAIb,EAAO,IAAMA,EACtDA,EAA2B,IAAlBQ,EAAuBI,KAAKC,IAAIb,EAAO,IAAMA,GAKhDL,EAAAvgB,UAAA0hB,SAAR,SAAiBC,GACf,GAAIC,GAAM,CAYV,OAVEA,GADED,GAAK,GACD,EACGA,GAAK,GACR,EACGA,GAAK,GACR,EACGA,GAAK,GACR,EAEA,GAGNC,IAAKA,EAAM,EACXC,IAAKnjB,KAAK+hB,QAAQmB,KAItBrB,EAAAvgB,UAAA8hB,YAAA,SAAYC,GACV,GAAIlV,GAAWkV,EAAyB,gBAAEC,YAE1C,IADAtjB,KAAKujB,aAAa,EAAG,QACjBpV,EAAU,CAEZ,GAAIqV,GAAWxjB,KAAKgiB,gBAAgB7T,GAChC9N,EAAIL,KAAKgjB,SAASQ,EACtBxjB,MAAKujB,aAAaljB,EAAE6iB,IAAK7iB,EAAE8iB,KAC3BnjB,KAAK8hB,gBAAgB/J,KAAKyL,KAItB3B,EAAAvgB,UAAAiiB,aAAR,SAAqBjO,EAAO6N,GAC1B,IAAK,GAAIM,GAAK,EAAGA,EAAKnO,EAAOmO,IAC3BzjB,KAAK,MAAQyjB,GAAMN,GAzEvBpjB,GAACV,EAAAwB,EAAAvB,EAAA,S9B+1FKyB,EAAW,cAAewT,SAC3BsN,EAA6BvgB,UAAW,kBAAmB,Q8B/1FhEvB,GAACV,EAAAwB,EAAAvB,EAAA,U9Bk2FKyB,EAAW,cAAeN,SAC3BohB,EAA6BvgB,UAAW,kBAAmB,Q8B12FlEugB,EAAA9hB,GAACV,EAAAwB,EAAAvB,EAAA,YACC0M,SAAU,4BACVC,SAAA5M,EAAA,KACA6M,QAAA7M,EAAA,Q9B82FM0B,EAAW,yBACZ8gB,OAOD6B,IACA,SAASvkB,EAAQC,EAASC,GAEhC,YACqB,IAAIC,GAA8CD,EAAoB,GAClEskB,EAA+CtkB,EAAoB,IAC7DA,GAAoBQ,EAAET,EAAS,IAAK,WAAa,MAAOwkB,IACvF,IAAI7jB,GAAcC,MAAQA,KAAKD,YAAe,SAAUE,EAAYC,EAAQC,EAAKC,GAC7E,GAA2HP,GAAvHQ,EAAIC,UAAUC,OAAQC,EAAIH,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOK,OAAOC,yBAAyBR,EAAQC,GAAOC,CACrH,IAAuB,gBAAZO,UAAoD,kBAArBA,SAAQC,SAAyBJ,EAAIG,QAAQC,SAASX,EAAYC,EAAQC,EAAKC,OACpH,KAAK,GAAIS,GAAIZ,EAAWM,OAAS,EAAGM,GAAK,EAAGA,KAAShB,EAAII,EAAWY,MAAIL,GAAKH,EAAI,EAAIR,EAAEW,GAAKH,EAAI,EAAIR,EAAEK,EAAQC,EAAKK,GAAKX,EAAEK,EAAQC,KAASK,EAChJ,OAAOH,GAAI,GAAKG,GAAKC,OAAOK,eAAeZ,EAAQC,EAAKK,GAAIA,GAE5DO,EAAcf,MAAQA,KAAKe,YAAe,SAAUC,EAAGC,GACvD,GAAuB,gBAAZN,UAAoD,kBAArBA,SAAQO,SAAyB,MAAOP,SAAQO,SAASF,EAAGC,I+B73F1G2iB,EAAA,mBAAAA,MAsBA,MAjBEA,GAAAtiB,UAAAuiB,mBAAA,WAEE,GAAIC,GAAa9jB,KAAK+jB,KAAK1f,OAAO,SAAC2f,GAAM,MAAAA,GAAI1P,QAGpB,KAAtBwP,EAAWvjB,QACZP,KAAKikB,UAAUjkB,KAAK+jB,KAAKG,QAI7BN,EAAAtiB,UAAA2iB,UAAA,SAAUD,GAERhkB,KAAK+jB,KAAKI,UAAUC,QAAQ,SAAAJ,GAAO,MAAAA,GAAI1P,QAAS,IAGhD0P,EAAI1P,QAAS,GAlBfvU,GAACV,EAAAwB,EAAAvB,EAAA,iBAAgBqkB,EAAA,G/Bm5FX5iB,EAAW,cAA8K,mBAAtJwB,EAAyE,mBAA7DjD,GAAuD,WAAqBA,EAAuD,YAAqBiD,GAAO9B,SAC/MmjB,EAActiB,UAAW,OAAQ,Q+Bj6FxCsiB,EAAA7jB,GAACV,EAAAwB,EAAAvB,EAAA,YACC0M,SAAU,WACVC,SAAS,8O/Bq6FHlL,EAAW,yBACZ6iB,EAEH,IAAIrhB,OAMF8hB,IACA,SAASllB,EAAQC,EAASC,GAEhC,YACqB,IAAIC,GAA8CD,EAAoB,EAC5DA,GAAoBQ,EAAET,EAAS,IAAK,WAAa,MAAOklB,IACvF,IAAIvkB,GAAcC,MAAQA,KAAKD,YAAe,SAAUE,EAAYC,EAAQC,EAAKC,GAC7E,GAA2HP,GAAvHQ,EAAIC,UAAUC,OAAQC,EAAIH,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOK,OAAOC,yBAAyBR,EAAQC,GAAOC,CACrH,IAAuB,gBAAZO,UAAoD,kBAArBA,SAAQC,SAAyBJ,EAAIG,QAAQC,SAASX,EAAYC,EAAQC,EAAKC,OACpH,KAAK,GAAIS,GAAIZ,EAAWM,OAAS,EAAGM,GAAK,EAAGA,KAAShB,EAAII,EAAWY,MAAIL,GAAKH,EAAI,EAAIR,EAAEW,GAAKH,EAAI,EAAIR,EAAEK,EAAQC,EAAKK,GAAKX,EAAEK,EAAQC,KAASK,EAChJ,OAAOH,GAAI,GAAKG,GAAKC,OAAOK,eAAeZ,EAAQC,EAAKK,GAAIA,GAE5DO,EAAcf,MAAQA,KAAKe,YAAe,SAAUC,EAAGC,GACvD,GAAuB,gBAAZN,UAAoD,kBAArBA,SAAQO,SAAyB,MAAOP,SAAQO,SAASF,EAAGC,IgCl7F1GqjB,EAAA,mBAAAA,KACUtkB,KAAAukB,QACN,OACA,KACA,KACA,KACA,KACA,MAeJ,MAZED,GAAAhjB,UAAAkjB,UAAA,SAAUC,EAAWC,GACnB,GADQ,SAAAD,MAAA,GAAW,SAAAC,MAAA,IACdC,SAASF,GACZ,MAAO,EAIT,KADA,GAAIG,GAAO,EACJH,GAAS,MACdA,GAAS,KACTG,GAEF,OAAOH,GAAMI,SAASH,GAAa,IAAM1kB,KAAKukB,OAAOK,IAvBzDN,EAAAvkB,GAACV,EAAAwB,EAAAvB,EAAA,OACCwG,KAAM,ahC69FA/E,EAAW,yBACZujB,OAODQ,IACA,SAAS3lB,EAAQC,EAASC,GAEhC,YAC+BA,GAAoBQ,EAAET,EAAS,IAAK,WAAa,MAAO2lB,IiCn/FvF,IAAAA,GAAA,mBAAAA,MAuCA,MAtCWA,GAAAtV,gBAAP,SAAuBrH,GAEnB,MAAKA,GAAQ9E,MAIT8E,EAAQ9E,MAAM/C,OAAS,GAEvBykB,kBAAoB,GAInB,YAAY3C,KAAKja,EAAQ9E,OAMzB,YAAY+e,KAAKja,EAAQ9E,OAMzB,YAAY+e,KAAKja,EAAQ9E,OAMzB,6CAA4C+e,KAAKja,EAAQ9E,OAMvD,MAJH2hB,oBAAsB,IANtBC,mBAAqB,IANrBC,mBAAqB,IANrBD,mBAAqB,GAXhB,MAmCjBH,MjCq/FMK,IACA,SAASjmB,EAAQC,EAASC,GAEhC,YACqB,IAAIgmB,GAAmDhmB,EAAoB,KAEvEimB,GAD2DjmB,EAAoBK,EAAE2lB,GAC9BhmB,EAAoB,MAEvEkmB,GAD2DlmB,EAAoBK,EAAE4lB,GAC5BjmB,EAAoB,MAEzEmmB,GAD6DnmB,EAAoBK,EAAE6lB,GAC7BlmB,EAAoB,MAE1EomB,GAD8DpmB,EAAoBK,EAAE8lB,GAC5BnmB,EAAoB,MAE5EqmB,GADgErmB,EAAoBK,EAAE+lB,GACnCpmB,EAAoB,MAEvEsmB,GAD2DtmB,EAAoBK,EAAEgmB,GAChCrmB,EAAoB,MAErEumB,GADyDvmB,EAAoBK,EAAEimB,GAC5BtmB,EAAoB,MAEvEwmB,GAD2DxmB,EAAoBK,EAAEkmB,GAChCvmB,EAAoB,MAErEymB,GADyDzmB,EAAoBK,EAAEmmB,GAC7BxmB,EAAoB,MAEtE0mB,GAD0D1mB,EAAoBK,EAAEomB,GAC5BzmB,EAAoB,MAExE2mB,GAD4D3mB,EAAoBK,EAAEqmB,GACjC1mB,EAAoB,MAErE4mB,GADyD5mB,EAAoBK,EAAEsmB,GAC9B3mB,EAAoB,MAErE6mB,GADyD7mB,EAAoBK,EAAEumB,GAC1B5mB,EAAoB,MAEzE8mB,GAD6D9mB,EAAoBK,EAAEwmB,GAC9B7mB,EAAoB,MAEzE+mB,GAD6D/mB,EAAoBK,EAAEymB,GAChC9mB,EAAoB,KACZA,GAAoBK,EAAE0mB,IAqBpGC,IACA,SAASlnB,EAAQC,GkCxlGvBD,EAAAC,QAAA,IlC8lGMknB,IACA,SAASnnB,EAAQC,GmC/lGvBD,EAAAC,QAAA,InCqmGMmnB,IACA,SAASpnB,EAAQC,GoCtmGvBD,EAAAC,QAAA,IpC4mGMonB,IACA,SAASrnB,EAAQC,GqC7mGvBD,EAAAC,QAAA,yCrCmnGMqnB,IACA,SAAStnB,EAAQC,GsCpnGvBD,EAAAC,QAAA,yCtC0nGMsnB,IACA,SAASvnB,EAAQC,GuC3nGvBD,EAAAC,QAAA,IvCioGMunB,IACA,SAASxnB,EAAQC,GwCloGvBD,EAAAC,QAAA,IxCwoGMwnB,IACA,SAASznB,EAAQC,GyCzoGvBD,EAAAC,QAAA,IzC+oGMynB,IACA,SAAS1nB,EAAQC,G0ChpGvBD,EAAAC,QAAA,I1CspGM0nB,IACA,SAAS3nB,EAAQC,G2CvpGvBD,EAAAC,QAAA,I3C6pGM2nB,IACA,SAAS5nB,EAAQC,G4C9pGvBD,EAAAC,QAAA,I5CoqGM4nB,IACA,SAAS7nB,EAAQC,G6CrqGvBD,EAAAC,QAAA,iV7C2qGM6nB,IACA,SAAS9nB,EAAQC,G8C5qGvBD,EAAAC,QAAA;E9CkrGM8nB,IACA,SAAS/nB,EAAQC,G+CnrGvBD,EAAAC,QAAA,mnE/CyrGM+nB,IACA,SAAShoB,EAAQC,GgD1rGvBD,EAAAC,QAAA,4nBhDgsGMgoB,IACA,SAASjoB,EAAQC,GiDjsGvBD,EAAAC,QAAA,s5DjDusGMioB,IACA,SAASloB,EAAQC,GkDxsGvBD,EAAAC,QAAA,kxNlD8sGMkoB,IACA,SAASnoB,EAAQC,GmD/sGvBD,EAAAC,QAAA,o8EnDqtGMmoB,IACA,SAASpoB,EAAQC,GoDttGvBD,EAAAC,QAAA,w9EpD4tGMooB,IACA,SAASroB,EAAQC,GqD7tGvBD,EAAAC,QAAA,oyCrDmuGMqoB,IACA,SAAStoB,EAAQC,GsDpuGvBD,EAAAC,QAAA,uyGtD0uGMsoB,IACA,SAASvoB,EAAQC,GuD3uGvBD,EAAAC,QAAA,qlBvDivGMuoB,IACA,SAASxoB,EAAQC,GwDlvGvBD,EAAAC,QAAA,ylGxDwvGMwoB,IACA,SAASzoB,EAAQC,GyDzvGvBD,EAAAC,QAAA,gZzD+vGMyoB,IACA,SAAS1oB,EAAQC,G0DhwGvB,QAAAuZ,GAAAC,GACA,SAAA9B,OAAA,uBAAA8B,EAAA,MAEAD,EAAApH,KAAA,WAAuC,UACvCoH,EAAA1I,QAAA0I,EACAxZ,EAAAC,QAAAuZ,EACAA,EAAAnT,GAAA,K1DuwGMsiB,IACA,SAAS3oB,EAAQC,EAASC,GAEhCF,EAAOC,QAAUC,EAAoB,QAKlC","file":"main.796873dc35ac9641d2cd.bundle.js","sourcesContent":["webpackJsonp([0,4],{\n\n/***/ 117:\n/***/ function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__angular_http__ = __webpack_require__(87);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_rxjs_Observable__ = __webpack_require__(5);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_rxjs_Observable___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_rxjs_Observable__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_rxjs_add_operator_catch__ = __webpack_require__(126);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_rxjs_add_operator_catch___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3_rxjs_add_operator_catch__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__settings_service__ = __webpack_require__(43);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__authentication_service__ = __webpack_require__(42);\n/* harmony export (binding) */ __webpack_require__.d(exports, \"a\", function() { return CategoryService; });\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n};\r\nvar __metadata = (this && this.__metadata) || function (k, v) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\r\n};\r\n\r\n\r\n\r\n\r\n\r\n\r\nvar CategoryService = (function () {\r\n function CategoryService(_http, _settings, _authService) {\r\n this._http = _http;\r\n this._settings = _settings;\r\n this._authService = _authService;\r\n }\r\n CategoryService.prototype.getCategories = function () {\r\n var _this = this;\r\n var url = this._settings.apiBaseUrl + 'categories';\r\n var options = {\r\n headers: this._authService.createAuthHeaders({\r\n 'Content-Type': 'application/json'\r\n })\r\n };\r\n return this._http.get(url, options).map(function (res) { return res.json(); })\r\n .catch(function (error) { return __WEBPACK_IMPORTED_MODULE_2_rxjs_Observable__[\"Observable\"].throw(error.json().error || _this._settings.serverErrorMessage); });\r\n };\r\n CategoryService = __decorate([\r\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Injectable\"])(), \r\n __metadata('design:paramtypes', [(typeof (_a = typeof __WEBPACK_IMPORTED_MODULE_1__angular_http__[\"b\" /* Http */] !== 'undefined' && __WEBPACK_IMPORTED_MODULE_1__angular_http__[\"b\" /* Http */]) === 'function' && _a) || Object, (typeof (_b = typeof __WEBPACK_IMPORTED_MODULE_4__settings_service__[\"a\" /* SettingsService */] !== 'undefined' && __WEBPACK_IMPORTED_MODULE_4__settings_service__[\"a\" /* SettingsService */]) === 'function' && _b) || Object, (typeof (_c = typeof __WEBPACK_IMPORTED_MODULE_5__authentication_service__[\"a\" /* AuthenticationService */] !== 'undefined' && __WEBPACK_IMPORTED_MODULE_5__authentication_service__[\"a\" /* AuthenticationService */]) === 'function' && _c) || Object])\r\n ], CategoryService);\r\n return CategoryService;\r\n var _a, _b, _c;\r\n}());\r\n//# sourceMappingURL=D:/Projects/Core/Crusca/prinweb/src/category.service.js.map\n\n/***/ },\n\n/***/ 163:\n/***/ function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(0);\n/* harmony export (binding) */ __webpack_require__.d(exports, \"a\", function() { return ConfirmService; });\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n};\r\nvar __metadata = (this && this.__metadata) || function (k, v) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\r\n};\r\n\r\n// the confirmation dialog is used through this service\r\nvar ConfirmService = (function () {\r\n function ConfirmService() {\r\n }\r\n ConfirmService = __decorate([\r\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Injectable\"])(), \r\n __metadata('design:paramtypes', [])\r\n ], ConfirmService);\r\n return ConfirmService;\r\n}());\r\n//# sourceMappingURL=D:/Projects/Core/Crusca/prinweb/src/confirm.service.js.map\n\n/***/ },\n\n/***/ 164:\n/***/ function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(0);\n/* harmony export (binding) */ __webpack_require__.d(exports, \"a\", function() { return LocalStorageService; });\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n};\r\nvar __metadata = (this && this.__metadata) || function (k, v) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\r\n};\r\n\r\nvar LocalStorageService = (function () {\r\n function LocalStorageService() {\r\n }\r\n /**\r\n * Retrieve the object with the specified key from the specified storage.\r\n * @param {string} key: key.\r\n * @param {boolean} session: true to use session instead of local storage.\r\n */\r\n LocalStorageService.prototype.retrieve = function (key, session) {\r\n if (session === void 0) { session = false; }\r\n var json = (session ?\r\n sessionStorage.getItem(key) :\r\n localStorage.getItem(key));\r\n if (!json) {\r\n return null;\r\n }\r\n return JSON.parse(json);\r\n };\r\n /**\r\n * Store the specified object with the specified key in the specified storage.\r\n * @param {string} key: key.\r\n * @param {any} value: object.\r\n * @param {boolean} session: true to use session instead of local storage.\r\n */\r\n LocalStorageService.prototype.store = function (key, value, session) {\r\n if (session === void 0) { session = false; }\r\n if (session) {\r\n sessionStorage.setItem(key, JSON.stringify(value));\r\n }\r\n else {\r\n localStorage.setItem(key, JSON.stringify(value));\r\n }\r\n };\r\n /**\r\n * Remove the object with the specified key from the specified storage.\r\n * @param {string} key: key.\r\n * @param {boolean} session: true to use session instead of local storage.\r\n */\r\n LocalStorageService.prototype.remove = function (key, session) {\r\n if (session === void 0) { session = false; }\r\n if (session) {\r\n sessionStorage.removeItem(key);\r\n }\r\n else {\r\n localStorage.removeItem(key);\r\n }\r\n };\r\n /**\r\n * Remove all the entries whose key starts with the specified prefix.\r\n * @param {string} prefix key prefix.\r\n */\r\n LocalStorageService.prototype.clear = function (prefix, session) {\r\n if (session === void 0) { session = false; }\r\n if (session) {\r\n for (var i = 0, len = sessionStorage.length; i < len; i++) {\r\n var key = sessionStorage.key(i);\r\n if (key.startsWith(prefix)) {\r\n sessionStorage.removeItem(key);\r\n }\r\n }\r\n }\r\n else {\r\n for (var i = 0, len = localStorage.length; i < len; i++) {\r\n var key = localStorage.key(i);\r\n if (key.startsWith(prefix)) {\r\n localStorage.removeItem(key);\r\n }\r\n }\r\n }\r\n };\r\n LocalStorageService = __decorate([\r\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Injectable\"])(), \r\n __metadata('design:paramtypes', [])\r\n ], LocalStorageService);\r\n return LocalStorageService;\r\n}());\r\n//# sourceMappingURL=D:/Projects/Core/Crusca/prinweb/src/local-storage.service.js.map\n\n/***/ },\n\n/***/ 235:\n/***/ function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__angular_http__ = __webpack_require__(87);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_rxjs_Observable__ = __webpack_require__(5);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_rxjs_Observable___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_rxjs_Observable__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_rxjs_add_operator_catch__ = __webpack_require__(126);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_rxjs_add_operator_catch___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3_rxjs_add_operator_catch__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__environments_environment__ = __webpack_require__(237);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__settings_service__ = __webpack_require__(43);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__authentication_service__ = __webpack_require__(42);\n/* harmony export (binding) */ __webpack_require__.d(exports, \"a\", function() { return DocumentService; });\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n};\r\nvar __metadata = (this && this.__metadata) || function (k, v) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\r\n};\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\nvar DocumentService = (function () {\r\n function DocumentService(_http, _settings, _authService) {\r\n this._http = _http;\r\n this._settings = _settings;\r\n this._authService = _authService;\r\n }\r\n DocumentService.prototype.getDocuments = function (filter) {\r\n var _this = this;\r\n var sb = [];\r\n sb.push(this._settings.apiBaseUrl + 'documents?');\r\n this.appendQueryParam('pageNumber', filter.pageNumber.toString(), sb);\r\n this.appendQueryParam('pageSize', filter.pageSize.toString(), sb);\r\n if (filter.creator) {\r\n this.appendQueryParam('creator', filter.creator, sb);\r\n }\r\n if (filter.categories) {\r\n this.appendQueryParam('categories', filter.categories, sb);\r\n }\r\n if (filter.invertCategories) {\r\n this.appendQueryParam('invertCategories', filter.invertCategories ? 'true' : 'false', sb);\r\n }\r\n if (filter.title) {\r\n this.appendQueryParam('title', filter.title, sb);\r\n }\r\n if (filter.author) {\r\n this.appendQueryParam('author', filter.author, sb);\r\n }\r\n if (filter.description) {\r\n this.appendQueryParam('description', filter.description, sb);\r\n }\r\n if (filter.yearMin > 0) {\r\n this.appendQueryParam('yearMin', filter.yearMin.toString(), sb);\r\n }\r\n if (filter.yearMax > 0) {\r\n this.appendQueryParam('yearMax', filter.yearMax.toString(), sb);\r\n }\r\n if (filter.sort) {\r\n this.appendQueryParam('sort', filter.sort.toString(), sb);\r\n }\r\n if (filter.descending) {\r\n this.appendQueryParam('descending', filter.descending ? 'true' : 'false', sb);\r\n }\r\n var options = {\r\n headers: this._authService.createAuthHeaders({\r\n 'Content-Type': 'application/json'\r\n })\r\n };\r\n return this._http.get(sb.join(''), options)\r\n .map(function (res) { return res.json(); })\r\n .catch(function (error) { return __WEBPACK_IMPORTED_MODULE_2_rxjs_Observable__[\"Observable\"].throw(error.json().error || _this._settings.serverErrorMessage); });\r\n };\r\n DocumentService.prototype.getDocument = function (id) {\r\n var _this = this;\r\n var url = this._settings.apiBaseUrl + (\"documents/\" + id);\r\n var options = {\r\n headers: this._authService.createAuthHeaders({\r\n 'Content-Type': 'application/json'\r\n })\r\n };\r\n return this._http.get(url, options)\r\n .map(function (res) { return res.json(); })\r\n .catch(function (error) { return __WEBPACK_IMPORTED_MODULE_2_rxjs_Observable__[\"Observable\"].throw(error.json().error || _this._settings.serverErrorMessage); });\r\n };\r\n DocumentService.prototype.addDocument = function (document) {\r\n var options = {\r\n headers: this._authService.createAuthHeaders({\r\n 'Content-Type': 'application/json'\r\n })\r\n };\r\n return this._http.post(this._settings.apiBaseUrl + 'documents', document, options);\r\n };\r\n DocumentService.prototype.deleteDocument = function (id) {\r\n var options = {\r\n headers: this._authService.createAuthHeaders({\r\n 'Content-Type': 'application/json'\r\n })\r\n };\r\n return this._http.delete(this._settings.apiBaseUrl + (\"documents/\" + id), options);\r\n };\r\n DocumentService.prototype.appendQueryParam = function (name, value, sb) {\r\n var i = sb.length - 1;\r\n if (i > -1 && sb[i].length > 0 && sb[i].charAt(sb[i].length - 1) !== '?') {\r\n sb.push('&');\r\n }\r\n sb.push(encodeURIComponent(name) + '=' +\r\n encodeURIComponent(value));\r\n };\r\n DocumentService.prototype.getAssetUri = function (id, format) {\r\n if (__WEBPACK_IMPORTED_MODULE_4__environments_environment__[\"a\" /* environment */].production) {\r\n return \"http://\" + this._settings.azureAccountId + \".blob.core.windows.net/\" + this._settings.azureContainerName + \"/\" + id + \".\" + format;\r\n }\r\n else {\r\n return \"http://127.0.0.1:10000/devstoreaccount1/\" + this._settings.azureContainerName + \"/\" + id + \".\" + format;\r\n }\r\n };\r\n DocumentService = __decorate([\r\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Injectable\"])(), \r\n __metadata('design:paramtypes', [(typeof (_a = typeof __WEBPACK_IMPORTED_MODULE_1__angular_http__[\"b\" /* Http */] !== 'undefined' && __WEBPACK_IMPORTED_MODULE_1__angular_http__[\"b\" /* Http */]) === 'function' && _a) || Object, (typeof (_b = typeof __WEBPACK_IMPORTED_MODULE_5__settings_service__[\"a\" /* SettingsService */] !== 'undefined' && __WEBPACK_IMPORTED_MODULE_5__settings_service__[\"a\" /* SettingsService */]) === 'function' && _b) || Object, (typeof (_c = typeof __WEBPACK_IMPORTED_MODULE_6__authentication_service__[\"a\" /* AuthenticationService */] !== 'undefined' && __WEBPACK_IMPORTED_MODULE_6__authentication_service__[\"a\" /* AuthenticationService */]) === 'function' && _c) || Object])\r\n ], DocumentService);\r\n return DocumentService;\r\n var _a, _b, _c;\r\n}());\r\n//# sourceMappingURL=D:/Projects/Core/Crusca/prinweb/src/document.service.js.map\n\n/***/ },\n\n/***/ 236:\n/***/ function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__angular_http__ = __webpack_require__(87);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_rxjs_Observable__ = __webpack_require__(5);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_rxjs_Observable___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_rxjs_Observable__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_rxjs_add_operator_catch__ = __webpack_require__(126);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_rxjs_add_operator_catch___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3_rxjs_add_operator_catch__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__settings_service__ = __webpack_require__(43);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__authentication_service__ = __webpack_require__(42);\n/* harmony export (binding) */ __webpack_require__.d(exports, \"a\", function() { return UserService; });\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n};\r\nvar __metadata = (this && this.__metadata) || function (k, v) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\r\n};\r\n\r\n\r\n\r\n\r\n\r\n\r\nvar UserService = (function () {\r\n function UserService(_http, _settings, _authService) {\r\n this._http = _http;\r\n this._settings = _settings;\r\n this._authService = _authService;\r\n }\r\n UserService.prototype.getUsers = function () {\r\n var _this = this;\r\n var url = this._settings.apiBaseUrl + 'users';\r\n var options = {\r\n headers: this._authService.createAuthHeaders({\r\n 'Content-Type': 'application/json'\r\n })\r\n };\r\n return this._http.get(url, options)\r\n .map(function (res) { return res.json(); })\r\n .catch(function (error) { return __WEBPACK_IMPORTED_MODULE_2_rxjs_Observable__[\"Observable\"].throw(error.json().error || _this._settings.serverErrorMessage); });\r\n };\r\n UserService = __decorate([\r\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Injectable\"])(), \r\n __metadata('design:paramtypes', [(typeof (_a = typeof __WEBPACK_IMPORTED_MODULE_1__angular_http__[\"b\" /* Http */] !== 'undefined' && __WEBPACK_IMPORTED_MODULE_1__angular_http__[\"b\" /* Http */]) === 'function' && _a) || Object, (typeof (_b = typeof __WEBPACK_IMPORTED_MODULE_4__settings_service__[\"a\" /* SettingsService */] !== 'undefined' && __WEBPACK_IMPORTED_MODULE_4__settings_service__[\"a\" /* SettingsService */]) === 'function' && _b) || Object, (typeof (_c = typeof __WEBPACK_IMPORTED_MODULE_5__authentication_service__[\"a\" /* AuthenticationService */] !== 'undefined' && __WEBPACK_IMPORTED_MODULE_5__authentication_service__[\"a\" /* AuthenticationService */]) === 'function' && _c) || Object])\r\n ], UserService);\r\n return UserService;\r\n var _a, _b, _c;\r\n}());\r\n//# sourceMappingURL=D:/Projects/Core/Crusca/prinweb/src/user.service.js.map\n\n/***/ },\n\n/***/ 237:\n/***/ function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (binding) */ __webpack_require__.d(exports, \"a\", function() { return environment; });\nvar environment = {\r\n production: true\r\n};\r\n//# sourceMappingURL=D:/Projects/Core/Crusca/prinweb/src/environment.prod.js.map\n\n/***/ },\n\n/***/ 377:\n/***/ function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__angular_forms__ = __webpack_require__(17);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__angular_router__ = __webpack_require__(63);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_ng2_toastr_ng2_toastr__ = __webpack_require__(45);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_ng2_toastr_ng2_toastr___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3_ng2_toastr_ng2_toastr__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__shared_services_category_service__ = __webpack_require__(117);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__shared_services_local_storage_service__ = __webpack_require__(164);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__shared_services_settings_service__ = __webpack_require__(43);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__shared_services_document_service__ = __webpack_require__(235);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__shared_components_confirm_confirm_service__ = __webpack_require__(163);\n/* harmony export (binding) */ __webpack_require__.d(exports, \"a\", function() { return DocumentEditorComponent; });\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n};\r\nvar __metadata = (this && this.__metadata) || function (k, v) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\r\n};\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\nvar DocumentEditorComponent = (function () {\r\n function DocumentEditorComponent(formBuilder, _router, _route, _toastr, _confirmService, _categoryService, _documentService, _settingsService, _localStorageService) {\r\n this._router = _router;\r\n this._route = _route;\r\n this._toastr = _toastr;\r\n this._confirmService = _confirmService;\r\n this._categoryService = _categoryService;\r\n this._documentService = _documentService;\r\n this._settingsService = _settingsService;\r\n this._localStorageService = _localStorageService;\r\n this._nextId = 0;\r\n this.assets = [];\r\n this.currentYear = new Date().getFullYear();\r\n this.category = formBuilder.control(null, __WEBPACK_IMPORTED_MODULE_1__angular_forms__[\"Validators\"].required);\r\n this.title = formBuilder.control(null, __WEBPACK_IMPORTED_MODULE_1__angular_forms__[\"Validators\"].required);\r\n this.author = formBuilder.control(null, __WEBPACK_IMPORTED_MODULE_1__angular_forms__[\"Validators\"].required);\r\n this.description = formBuilder.control(null, __WEBPACK_IMPORTED_MODULE_1__angular_forms__[\"Validators\"].required);\r\n this.year = formBuilder.control(0, __WEBPACK_IMPORTED_MODULE_1__angular_forms__[\"Validators\"].required);\r\n this.document = formBuilder.group({\r\n 'category': this.category,\r\n 'title': this.title,\r\n 'author': this.author,\r\n 'description': this.description,\r\n 'year': this.year\r\n });\r\n }\r\n DocumentEditorComponent.prototype.ngOnInit = function () {\r\n var _this = this;\r\n // load categories from cache or server\r\n this.categories = this._localStorageService.retrieve(this._settingsService.storagePrefix + 'categories', true);\r\n if (!this.categories) {\r\n this.busy = true;\r\n this._categoryService.getCategories()\r\n .subscribe(function (data) {\r\n _this.categories = data;\r\n // cache categories for session\r\n _this._localStorageService.store(_this._settingsService.storagePrefix + 'categories', data, true);\r\n }, function (error) {\r\n _this._toastr.error(error);\r\n _this.busy = false;\r\n }, function () {\r\n _this.busy = false;\r\n _this.initDocument();\r\n });\r\n }\r\n else {\r\n this.initDocument();\r\n }\r\n };\r\n DocumentEditorComponent.prototype.cancel = function () {\r\n this._router.navigate(['/documenti']);\r\n };\r\n DocumentEditorComponent.prototype.save = function () {\r\n var _this = this;\r\n if (!this.document.valid) {\r\n return;\r\n }\r\n this.busy = true;\r\n var d = {\r\n id: this._documentId,\r\n categoryId: this.category.value.id,\r\n title: this.title.value,\r\n author: this.author.value,\r\n description: this.description.value,\r\n publicationYear: this.year.value\r\n };\r\n this.addAssetsToDocument(d);\r\n this._documentService.addDocument(d)\r\n .subscribe(function () {\r\n _this._toastr.success('Documento salvato');\r\n _this._router.navigate(['/documenti']);\r\n }, function (error) {\r\n _this._toastr.error(error);\r\n _this.busy = false;\r\n }, function () {\r\n _this.busy = false;\r\n });\r\n };\r\n DocumentEditorComponent.prototype.getAssetUri = function (id, format) {\r\n return this._documentService.getAssetUri(id, format);\r\n };\r\n DocumentEditorComponent.prototype.addAssetsToDocument = function (document) {\r\n if (this.assets.length === 0) {\r\n return;\r\n }\r\n document.assets = [];\r\n for (var i = 0; i < this.assets.length; i++) {\r\n var asset = this.assets[i];\r\n var model = {\r\n id: asset.id.charAt(0) === '#' ? null : asset.id,\r\n format: asset.format,\r\n title: asset.title,\r\n description: asset.description,\r\n size: asset.size\r\n };\r\n document.assets.push(model);\r\n }\r\n };\r\n DocumentEditorComponent.prototype.addAsset = function () {\r\n if (this.busy) {\r\n return;\r\n }\r\n var now = new Date();\r\n var utc = new Date(now.getUTCFullYear(), now.getUTCMonth(), now.getUTCDate(), now.getUTCHours(), now.getUTCMinutes(), now.getUTCSeconds());\r\n this.asset = {\r\n id: null,\r\n documentId: this._documentId,\r\n creatorId: null,\r\n format: 'cr-core',\r\n size: 0,\r\n title: this.title.value,\r\n description: this.description.value,\r\n timeCreated: utc,\r\n timeModified: utc\r\n };\r\n };\r\n DocumentEditorComponent.prototype.editAsset = function (asset) {\r\n if (this.busy) {\r\n return;\r\n }\r\n this.asset = asset;\r\n };\r\n DocumentEditorComponent.prototype.deleteAsset = function (asset) {\r\n var _this = this;\r\n if (this.busy) {\r\n return;\r\n }\r\n this._confirmService.activate('Cancellare il contenuto?')\r\n .then(function (result) {\r\n if (!result) {\r\n return;\r\n }\r\n var i = _this.assets.indexOf(asset);\r\n if (i > -1) {\r\n _this.assets.splice(i, 1);\r\n }\r\n }).catch(function (error) {\r\n console.log(error);\r\n });\r\n };\r\n DocumentEditorComponent.prototype.onAssetChanged = function (asset) {\r\n // if the asset changed was new, add it\r\n if (!asset.id) {\r\n // assign a temporary ID = #N\r\n this._nextId++;\r\n asset.id = \"#\" + this._nextId;\r\n this.assets.push(asset);\r\n }\r\n this.asset = null;\r\n };\r\n DocumentEditorComponent.prototype.onAssetUploaded = function (size) {\r\n if (this.asset) {\r\n this.asset.size = size;\r\n }\r\n };\r\n DocumentEditorComponent.prototype.utcToLocal = function (date) {\r\n // http://stackoverflow.com/questions/13622142/javascript-to-convert-utc-to-local-time\r\n // http://stackoverflow.com/questions/1090815/how-to-clone-a-date-object-in-javascript\r\n var offset = new Date().getTimezoneOffset();\r\n if (!date.getTime) {\r\n date = new Date(date);\r\n }\r\n var local = new Date(date.getTime());\r\n local.setMinutes(local.getMinutes() - offset);\r\n return local;\r\n };\r\n DocumentEditorComponent.prototype.findCategory = function (id) {\r\n if (!this.categories) {\r\n return null;\r\n }\r\n for (var i = 0; i < this.categories.length; i++) {\r\n if (this.categories[i].id === id) {\r\n return this.categories[i];\r\n }\r\n }\r\n return null;\r\n };\r\n DocumentEditorComponent.prototype.initDocument = function () {\r\n var _this = this;\r\n // an existing id parameter means we're editing an existing document;\r\n // otherwise, we're editing a new document.\r\n this._sub = this._route.params.subscribe(function (params) {\r\n _this._documentId = params['id'];\r\n if (_this._documentId) {\r\n _this.loadDocument(_this._documentId);\r\n }\r\n });\r\n };\r\n DocumentEditorComponent.prototype.loadDocument = function (id) {\r\n var _this = this;\r\n this.busy = true;\r\n this._documentService.getDocument(id)\r\n .subscribe(function (doc) {\r\n _this._documentId = doc.id;\r\n _this.category.setValue(_this.findCategory(doc.categoryId));\r\n _this.title.setValue(doc.title);\r\n _this.author.setValue(doc.author);\r\n _this.description.setValue(doc.description);\r\n _this.year.setValue(doc.publicationYear);\r\n _this.assets = doc.assets || [];\r\n }, function (error) {\r\n _this._toastr.error(error);\r\n _this.busy = false;\r\n }, function () {\r\n _this.busy = false;\r\n });\r\n };\r\n DocumentEditorComponent = __decorate([\r\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Component\"])({\r\n selector: 'app-document-editor',\r\n template: __webpack_require__(843),\r\n styles: [__webpack_require__(831)]\r\n }), \r\n __metadata('design:paramtypes', [(typeof (_a = typeof __WEBPACK_IMPORTED_MODULE_1__angular_forms__[\"FormBuilder\"] !== 'undefined' && __WEBPACK_IMPORTED_MODULE_1__angular_forms__[\"FormBuilder\"]) === 'function' && _a) || Object, (typeof (_b = typeof __WEBPACK_IMPORTED_MODULE_2__angular_router__[\"a\" /* Router */] !== 'undefined' && __WEBPACK_IMPORTED_MODULE_2__angular_router__[\"a\" /* Router */]) === 'function' && _b) || Object, (typeof (_c = typeof __WEBPACK_IMPORTED_MODULE_2__angular_router__[\"b\" /* ActivatedRoute */] !== 'undefined' && __WEBPACK_IMPORTED_MODULE_2__angular_router__[\"b\" /* ActivatedRoute */]) === 'function' && _c) || Object, (typeof (_d = typeof __WEBPACK_IMPORTED_MODULE_3_ng2_toastr_ng2_toastr__[\"ToastsManager\"] !== 'undefined' && __WEBPACK_IMPORTED_MODULE_3_ng2_toastr_ng2_toastr__[\"ToastsManager\"]) === 'function' && _d) || Object, (typeof (_e = typeof __WEBPACK_IMPORTED_MODULE_8__shared_components_confirm_confirm_service__[\"a\" /* ConfirmService */] !== 'undefined' && __WEBPACK_IMPORTED_MODULE_8__shared_components_confirm_confirm_service__[\"a\" /* ConfirmService */]) === 'function' && _e) || Object, (typeof (_f = typeof __WEBPACK_IMPORTED_MODULE_4__shared_services_category_service__[\"a\" /* CategoryService */] !== 'undefined' && __WEBPACK_IMPORTED_MODULE_4__shared_services_category_service__[\"a\" /* CategoryService */]) === 'function' && _f) || Object, (typeof (_g = typeof __WEBPACK_IMPORTED_MODULE_7__shared_services_document_service__[\"a\" /* DocumentService */] !== 'undefined' && __WEBPACK_IMPORTED_MODULE_7__shared_services_document_service__[\"a\" /* DocumentService */]) === 'function' && _g) || Object, (typeof (_h = typeof __WEBPACK_IMPORTED_MODULE_6__shared_services_settings_service__[\"a\" /* SettingsService */] !== 'undefined' && __WEBPACK_IMPORTED_MODULE_6__shared_services_settings_service__[\"a\" /* SettingsService */]) === 'function' && _h) || Object, (typeof (_j = typeof __WEBPACK_IMPORTED_MODULE_5__shared_services_local_storage_service__[\"a\" /* LocalStorageService */] !== 'undefined' && __WEBPACK_IMPORTED_MODULE_5__shared_services_local_storage_service__[\"a\" /* LocalStorageService */]) === 'function' && _j) || Object])\r\n ], DocumentEditorComponent);\r\n return DocumentEditorComponent;\r\n var _a, _b, _c, _d, _e, _f, _g, _h, _j;\r\n}());\r\n//# sourceMappingURL=D:/Projects/Core/Crusca/prinweb/src/document-editor.component.js.map\n\n/***/ },\n\n/***/ 378:\n/***/ function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__angular_router__ = __webpack_require__(63);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_ng2_toastr_ng2_toastr__ = __webpack_require__(45);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_ng2_toastr_ng2_toastr___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_ng2_toastr_ng2_toastr__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__shared_services_settings_service__ = __webpack_require__(43);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__shared_services_category_service__ = __webpack_require__(117);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__shared_services_document_service__ = __webpack_require__(235);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__shared_components_confirm_confirm_service__ = __webpack_require__(163);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__shared_services_local_storage_service__ = __webpack_require__(164);\n/* harmony export (binding) */ __webpack_require__.d(exports, \"a\", function() { return DocumentListComponent; });\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n};\r\nvar __metadata = (this && this.__metadata) || function (k, v) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\r\n};\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\nvar DocumentListComponent = (function () {\r\n function DocumentListComponent(_router, _toastr, _settings, _documentService, _confirmService, _categoryService, _localStorageService) {\r\n this._router = _router;\r\n this._toastr = _toastr;\r\n this._settings = _settings;\r\n this._documentService = _documentService;\r\n this._confirmService = _confirmService;\r\n this._categoryService = _categoryService;\r\n this._localStorageService = _localStorageService;\r\n this.pageSize = this._settings.pageSize;\r\n this.page = {\r\n items: [],\r\n total: 0\r\n };\r\n }\r\n DocumentListComponent.prototype.ngOnInit = function () {\r\n this.loadCategories();\r\n this.pageNumber = 1;\r\n this.refresh();\r\n };\r\n DocumentListComponent.prototype.refresh = function () {\r\n var _this = this;\r\n if (this.busy) {\r\n return;\r\n }\r\n this.busy = true;\r\n if (this._filter) {\r\n this._filter.pageNumber = this.pageNumber;\r\n this._filter.pageSize = this.pageSize;\r\n }\r\n this._documentService.getDocuments(this._filter || {\r\n pageNumber: this.pageNumber,\r\n pageSize: this.pageSize,\r\n sort: 0,\r\n descending: false\r\n })\r\n .subscribe(function (data) {\r\n _this.page = data;\r\n }, function (error) {\r\n _this._toastr.error(error);\r\n _this.busy = false;\r\n }, function () {\r\n _this.busy = false;\r\n });\r\n };\r\n DocumentListComponent.prototype.filtersChanged = function (filter) {\r\n this._filter = filter;\r\n this.pageNumber = 1;\r\n this.refresh();\r\n };\r\n // pager: http://valor-software.com/ng2-bootstrap/#/pagination\r\n DocumentListComponent.prototype.pageChanged = function (event) {\r\n this.pageNumber = event.page;\r\n this.refresh();\r\n };\r\n DocumentListComponent.prototype.addDocument = function () {\r\n this._router.navigate(['/documento', '']);\r\n };\r\n DocumentListComponent.prototype.editDocument = function (id) {\r\n this._router.navigate(['/documento', id]);\r\n };\r\n DocumentListComponent.prototype.deleteDocument = function (id) {\r\n var _this = this;\r\n if (this.busy) {\r\n return;\r\n }\r\n this._confirmService.activate('Cancellare il documento?')\r\n .then(function (result) {\r\n if (!result) {\r\n return;\r\n }\r\n _this.busy = true;\r\n _this._documentService.deleteDocument(id)\r\n .subscribe(function () {\r\n _this.refresh();\r\n }, function (error) {\r\n _this._toastr.error(error);\r\n _this.busy = false;\r\n }, function () {\r\n _this.busy = false;\r\n });\r\n }).catch(function (error) {\r\n console.log(error);\r\n });\r\n };\r\n DocumentListComponent.prototype.getCategoryName = function (id) {\r\n if (!this._categories) {\r\n return id;\r\n }\r\n for (var i = 0; i < this._categories.length; i++) {\r\n if (this._categories[i].id === id) {\r\n return this._categories[i].name;\r\n }\r\n }\r\n return id;\r\n };\r\n DocumentListComponent.prototype.loadCategories = function () {\r\n var _this = this;\r\n this._categories = this._localStorageService.retrieve(this._settings.storagePrefix + 'categories', true);\r\n if (!this._categories) {\r\n this._categoryService.getCategories()\r\n .subscribe(function (data) {\r\n _this._categories = data;\r\n // cache categories for session\r\n _this._localStorageService.store(_this._settings.storagePrefix + 'categories', data, true);\r\n }, function (error) {\r\n _this._toastr.error(error);\r\n _this.busy = false;\r\n });\r\n }\r\n };\r\n DocumentListComponent = __decorate([\r\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Component\"])({\r\n selector: 'app-document-list',\r\n template: __webpack_require__(844),\r\n styles: [__webpack_require__(832)]\r\n }), \r\n __metadata('design:paramtypes', [(typeof (_a = typeof __WEBPACK_IMPORTED_MODULE_1__angular_router__[\"a\" /* Router */] !== 'undefined' && __WEBPACK_IMPORTED_MODULE_1__angular_router__[\"a\" /* Router */]) === 'function' && _a) || Object, (typeof (_b = typeof __WEBPACK_IMPORTED_MODULE_2_ng2_toastr_ng2_toastr__[\"ToastsManager\"] !== 'undefined' && __WEBPACK_IMPORTED_MODULE_2_ng2_toastr_ng2_toastr__[\"ToastsManager\"]) === 'function' && _b) || Object, (typeof (_c = typeof __WEBPACK_IMPORTED_MODULE_3__shared_services_settings_service__[\"a\" /* SettingsService */] !== 'undefined' && __WEBPACK_IMPORTED_MODULE_3__shared_services_settings_service__[\"a\" /* SettingsService */]) === 'function' && _c) || Object, (typeof (_d = typeof __WEBPACK_IMPORTED_MODULE_5__shared_services_document_service__[\"a\" /* DocumentService */] !== 'undefined' && __WEBPACK_IMPORTED_MODULE_5__shared_services_document_service__[\"a\" /* DocumentService */]) === 'function' && _d) || Object, (typeof (_e = typeof __WEBPACK_IMPORTED_MODULE_6__shared_components_confirm_confirm_service__[\"a\" /* ConfirmService */] !== 'undefined' && __WEBPACK_IMPORTED_MODULE_6__shared_components_confirm_confirm_service__[\"a\" /* ConfirmService */]) === 'function' && _e) || Object, (typeof (_f = typeof __WEBPACK_IMPORTED_MODULE_4__shared_services_category_service__[\"a\" /* CategoryService */] !== 'undefined' && __WEBPACK_IMPORTED_MODULE_4__shared_services_category_service__[\"a\" /* CategoryService */]) === 'function' && _f) || Object, (typeof (_g = typeof __WEBPACK_IMPORTED_MODULE_7__shared_services_local_storage_service__[\"a\" /* LocalStorageService */] !== 'undefined' && __WEBPACK_IMPORTED_MODULE_7__shared_services_local_storage_service__[\"a\" /* LocalStorageService */]) === 'function' && _g) || Object])\r\n ], DocumentListComponent);\r\n return DocumentListComponent;\r\n var _a, _b, _c, _d, _e, _f, _g;\r\n}());\r\n//# sourceMappingURL=D:/Projects/Core/Crusca/prinweb/src/document-list.component.js.map\n\n/***/ },\n\n/***/ 379:\n/***/ function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(0);\n/* harmony export (binding) */ __webpack_require__.d(exports, \"a\", function() { return HomeComponent; });\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n};\r\nvar __metadata = (this && this.__metadata) || function (k, v) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\r\n};\r\n\r\nvar HomeComponent = (function () {\r\n function HomeComponent() {\r\n }\r\n HomeComponent.prototype.ngOnInit = function () {\r\n };\r\n HomeComponent = __decorate([\r\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Component\"])({\r\n selector: 'app-home',\r\n template: __webpack_require__(845),\r\n styles: [__webpack_require__(833)]\r\n }), \r\n __metadata('design:paramtypes', [])\r\n ], HomeComponent);\r\n return HomeComponent;\r\n}());\r\n//# sourceMappingURL=D:/Projects/Core/Crusca/prinweb/src/home.component.js.map\n\n/***/ },\n\n/***/ 380:\n/***/ function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__angular_forms__ = __webpack_require__(17);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__angular_router__ = __webpack_require__(63);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_ng2_toastr_ng2_toastr__ = __webpack_require__(45);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_ng2_toastr_ng2_toastr___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3_ng2_toastr_ng2_toastr__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__shared_services_authentication_service__ = __webpack_require__(42);\n/* harmony export (binding) */ __webpack_require__.d(exports, \"a\", function() { return LoginComponent; });\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n};\r\nvar __metadata = (this && this.__metadata) || function (k, v) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\r\n};\r\n\r\n\r\n\r\n\r\n\r\nvar LoginComponent = (function () {\r\n function LoginComponent(_router, _formBuilder, _authService, _toastr) {\r\n var _this = this;\r\n this._router = _router;\r\n this._formBuilder = _formBuilder;\r\n this._authService = _authService;\r\n this._toastr = _toastr;\r\n // build the form\r\n this.name = this._formBuilder.control('', __WEBPACK_IMPORTED_MODULE_1__angular_forms__[\"Validators\"].required);\r\n this.password = this._formBuilder.control('', __WEBPACK_IMPORTED_MODULE_1__angular_forms__[\"Validators\"].required);\r\n this.loginForm = this._formBuilder.group({\r\n 'name': this.name,\r\n 'password': this.password\r\n });\r\n this._authService.userChanged.subscribe(function (user) {\r\n _this.user = user;\r\n if (user) {\r\n if (user.verified) {\r\n _this._router.navigate(['/documenti']);\r\n }\r\n }\r\n });\r\n }\r\n LoginComponent.prototype.ngOnInit = function () {\r\n if (!this._authService.isAuthenticated(false)) {\r\n this.user = null;\r\n }\r\n else {\r\n this.user = this._authService.getCurrentUser();\r\n }\r\n };\r\n LoginComponent.prototype.resendConfirmEmail = function () {\r\n var _this = this;\r\n if (!this.user) {\r\n return;\r\n }\r\n this._authService.resendConfirmEmail(this.user.email)\r\n .subscribe(function () {\r\n _this._toastr.success(\"Messaggio inviato all'indirizzo \" + _this.user.email);\r\n }, (function (err) {\r\n _this._toastr.error(err);\r\n }));\r\n };\r\n LoginComponent.prototype.login = function (group) {\r\n if (!this.loginForm.valid) {\r\n return;\r\n }\r\n this._authService.login(this.name.value, this.password.value);\r\n };\r\n LoginComponent = __decorate([\r\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Component\"])({\r\n selector: 'app-login',\r\n template: __webpack_require__(846),\r\n styles: [__webpack_require__(834)]\r\n }), \r\n __metadata('design:paramtypes', [(typeof (_a = typeof __WEBPACK_IMPORTED_MODULE_2__angular_router__[\"a\" /* Router */] !== 'undefined' && __WEBPACK_IMPORTED_MODULE_2__angular_router__[\"a\" /* Router */]) === 'function' && _a) || Object, (typeof (_b = typeof __WEBPACK_IMPORTED_MODULE_1__angular_forms__[\"FormBuilder\"] !== 'undefined' && __WEBPACK_IMPORTED_MODULE_1__angular_forms__[\"FormBuilder\"]) === 'function' && _b) || Object, (typeof (_c = typeof __WEBPACK_IMPORTED_MODULE_4__shared_services_authentication_service__[\"a\" /* AuthenticationService */] !== 'undefined' && __WEBPACK_IMPORTED_MODULE_4__shared_services_authentication_service__[\"a\" /* AuthenticationService */]) === 'function' && _c) || Object, (typeof (_d = typeof __WEBPACK_IMPORTED_MODULE_3_ng2_toastr_ng2_toastr__[\"ToastsManager\"] !== 'undefined' && __WEBPACK_IMPORTED_MODULE_3_ng2_toastr_ng2_toastr__[\"ToastsManager\"]) === 'function' && _d) || Object])\r\n ], LoginComponent);\r\n return LoginComponent;\r\n var _a, _b, _c, _d;\r\n}());\r\n//# sourceMappingURL=D:/Projects/Core/Crusca/prinweb/src/login.component.js.map\n\n/***/ },\n\n/***/ 381:\n/***/ function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__angular_forms__ = __webpack_require__(17);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__angular_router__ = __webpack_require__(63);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_ng2_toastr_ng2_toastr__ = __webpack_require__(45);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_ng2_toastr_ng2_toastr___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3_ng2_toastr_ng2_toastr__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__shared_services_authentication_service__ = __webpack_require__(42);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__shared_validators_password_validator__ = __webpack_require__(634);\n/* harmony export (binding) */ __webpack_require__.d(exports, \"a\", function() { return RegistrationComponent; });\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n};\r\nvar __metadata = (this && this.__metadata) || function (k, v) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\r\n};\r\n\r\n\r\n\r\n\r\n\r\n\r\n// http://stackoverflow.com/questions/35521583/how-to-implement-async-validator-in-angular2\r\n// https://medium.com/@daviddentoom/angular-2-form-validation-9b26f73fcb81#.dxtmayu5m\r\n// http://restlet.com/blog/2016/02/17/implementing-angular2-forms-beyond-basics-part-2/\r\n// http://stackoverflow.com/questions/35247120/inject-a-service-in-a-custom-validator-in-angular2\r\n// http://stackoverflow.com/questions/35505520/access-a-service-from-a-custom-validator-in-angular2\r\nvar RegistrationComponent = (function () {\r\n function RegistrationComponent(formBuilder, _router, _toastr, _userService) {\r\n this._router = _router;\r\n this._toastr = _toastr;\r\n this._userService = _userService;\r\n this.email = formBuilder.control('', __WEBPACK_IMPORTED_MODULE_1__angular_forms__[\"Validators\"].required, this.createUniqueEmailValidator(this._userService).bind(this));\r\n this.name = formBuilder.control('', __WEBPACK_IMPORTED_MODULE_1__angular_forms__[\"Validators\"].required, this.createUniqueNameValidator(this._userService).bind(this));\r\n this.firstName = formBuilder.control('', [__WEBPACK_IMPORTED_MODULE_1__angular_forms__[\"Validators\"].required, __WEBPACK_IMPORTED_MODULE_1__angular_forms__[\"Validators\"].maxLength(50)]);\r\n this.lastName = formBuilder.control('', [__WEBPACK_IMPORTED_MODULE_1__angular_forms__[\"Validators\"].required, __WEBPACK_IMPORTED_MODULE_1__angular_forms__[\"Validators\"].maxLength(50)]);\r\n // http://stackoverflow.com/questions/35474991/angular-2-form-validating-for-repeat-password\r\n this.password = formBuilder.control('', __WEBPACK_IMPORTED_MODULE_1__angular_forms__[\"Validators\"].compose([__WEBPACK_IMPORTED_MODULE_1__angular_forms__[\"Validators\"].required, __WEBPACK_IMPORTED_MODULE_5__shared_validators_password_validator__[\"a\" /* PasswordValidator */].isValidPassword]));\r\n this.confirmPassword = formBuilder.control('', __WEBPACK_IMPORTED_MODULE_1__angular_forms__[\"Validators\"].required);\r\n this.passwords = formBuilder.group({\r\n password: this.password,\r\n confirmPassword: this.confirmPassword\r\n }, { validator: this.areEqual.bind(this) });\r\n this.registration = formBuilder.group({\r\n 'email': this.email,\r\n 'name': this.name,\r\n 'firstName': this.firstName,\r\n 'lastName': this.lastName,\r\n 'passwords': this.passwords\r\n });\r\n }\r\n RegistrationComponent.prototype.areEqual = function (group) {\r\n if (this.password.value === this.confirmPassword.value) {\r\n return null;\r\n }\r\n return {\r\n areEqual: true\r\n };\r\n };\r\n /**\r\n * Creates a unique name validator. There is no dependency injection at this level,\r\n * but we can use closures. As a matter of fact, we have access to the service instance\r\n * from the component where we register validators. So we will implement a function\r\n * that will accept the service as parameter, and create the actual validation function.\r\n * This function will have access to the service when called during the validation process.\r\n * See http://restlet.com/blog/2016/02/17/implementing-angular2-forms-beyond-basics-part-2/.\r\n */\r\n RegistrationComponent.prototype.createUniqueNameValidator = function (service) {\r\n return function (control) {\r\n return new Promise(function (resolve, reject) {\r\n // avoid checking if empty\r\n if (!control.value) {\r\n resolve(null);\r\n }\r\n else {\r\n service.isNameRegistered(control.value)\r\n .map(function (res) { return res.json(); })\r\n .subscribe(function (data) {\r\n if (!data.isExisting) {\r\n resolve(null);\r\n }\r\n else {\r\n resolve({ uniqueName: true });\r\n }\r\n }, function (err) {\r\n resolve({ uniqueName: true });\r\n });\r\n }\r\n });\r\n };\r\n };\r\n RegistrationComponent.prototype.createUniqueEmailValidator = function (service) {\r\n return function (control) {\r\n return new Promise(function (resolve, reject) {\r\n // avoid checking if empty\r\n if (!control.value) {\r\n resolve(null);\r\n }\r\n else {\r\n service.isEmailRegistered(control.value)\r\n .map(function (res) { return res.json(); })\r\n .subscribe(function (data) {\r\n if (!data.isExisting) {\r\n resolve(null);\r\n }\r\n else {\r\n resolve({ uniqueEmail: true });\r\n }\r\n }, function (err) {\r\n resolve({ uniqueEmail: true });\r\n });\r\n }\r\n });\r\n };\r\n };\r\n RegistrationComponent.prototype.onSubmit = function () {\r\n var _this = this;\r\n if (!this.registration.valid || this.isBusy || this.name.pending || this.email.pending) {\r\n return;\r\n }\r\n var model = {\r\n email: this.email.value,\r\n name: this.name.value,\r\n firstName: this.firstName.value,\r\n lastName: this.lastName.value,\r\n password: this.password.value\r\n };\r\n this._userService.register(model)\r\n .subscribe(function () {\r\n _this._toastr.success('Registrazione effettuata con successo');\r\n _this.registration.reset();\r\n }, function (err) {\r\n _this._toastr.error(err || 'Errore nella registrazione');\r\n });\r\n };\r\n RegistrationComponent = __decorate([\r\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Component\"])({\r\n selector: 'app-registration',\r\n template: __webpack_require__(847),\r\n styles: [__webpack_require__(835)]\r\n }), \r\n __metadata('design:paramtypes', [(typeof (_a = typeof __WEBPACK_IMPORTED_MODULE_1__angular_forms__[\"FormBuilder\"] !== 'undefined' && __WEBPACK_IMPORTED_MODULE_1__angular_forms__[\"FormBuilder\"]) === 'function' && _a) || Object, (typeof (_b = typeof __WEBPACK_IMPORTED_MODULE_2__angular_router__[\"a\" /* Router */] !== 'undefined' && __WEBPACK_IMPORTED_MODULE_2__angular_router__[\"a\" /* Router */]) === 'function' && _b) || Object, (typeof (_c = typeof __WEBPACK_IMPORTED_MODULE_3_ng2_toastr_ng2_toastr__[\"ToastsManager\"] !== 'undefined' && __WEBPACK_IMPORTED_MODULE_3_ng2_toastr_ng2_toastr__[\"ToastsManager\"]) === 'function' && _c) || Object, (typeof (_d = typeof __WEBPACK_IMPORTED_MODULE_4__shared_services_authentication_service__[\"a\" /* AuthenticationService */] !== 'undefined' && __WEBPACK_IMPORTED_MODULE_4__shared_services_authentication_service__[\"a\" /* AuthenticationService */]) === 'function' && _d) || Object])\r\n ], RegistrationComponent);\r\n return RegistrationComponent;\r\n var _a, _b, _c, _d;\r\n}());\r\n//# sourceMappingURL=D:/Projects/Core/Crusca/prinweb/src/registration.component.js.map\n\n/***/ },\n\n/***/ 382:\n/***/ function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__angular_forms__ = __webpack_require__(17);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_ng2_toastr_ng2_toastr__ = __webpack_require__(45);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_ng2_toastr_ng2_toastr___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_ng2_toastr_ng2_toastr__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__shared_services_category_service__ = __webpack_require__(117);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__shared_services_user_service__ = __webpack_require__(236);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__shared_services_stats_service__ = __webpack_require__(389);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__shared_services_chart_service__ = __webpack_require__(387);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__shared_services_csv_generator_service__ = __webpack_require__(388);\n/* harmony export (binding) */ __webpack_require__.d(exports, \"a\", function() { return StatsComponent; });\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n};\r\nvar __metadata = (this && this.__metadata) || function (k, v) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\r\n};\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n// ng2 chart plunker: https://plnkr.co/edit/MWE0umGfN3nZM6zLPPVI?p=preview\r\nvar StatsComponent = (function () {\r\n function StatsComponent(formBuilder, _toastr, _categoryService, _userService, _statsService, _chartService, _csvService) {\r\n this._toastr = _toastr;\r\n this._categoryService = _categoryService;\r\n this._userService = _userService;\r\n this._statsService = _statsService;\r\n this._chartService = _chartService;\r\n this._csvService = _csvService;\r\n this.keys = [\r\n { value: 'categoryid', label: 'categoria' },\r\n { value: 'author', label: 'autore' },\r\n { value: 'publicationyear', label: 'anno' },\r\n { value: 'creatorid', label: 'utente' }\r\n ];\r\n // form\r\n this.key = formBuilder.control(this.keys[0], __WEBPACK_IMPORTED_MODULE_1__angular_forms__[\"Validators\"].required);\r\n this.step = formBuilder.control(25);\r\n this.stats = formBuilder.group({\r\n 'key': this.key,\r\n 'step': this.step\r\n });\r\n // chart\r\n this.chartData = {\r\n labels: [],\r\n datasets: [{\r\n data: [],\r\n label: ''\r\n }]\r\n };\r\n }\r\n Object.defineProperty(StatsComponent.prototype, \"countInChart\", {\r\n // http://www.syntaxsuccess.com/viewarticle/input-controls-in-angular-2.0\r\n get: function () {\r\n return this._countInChart;\r\n },\r\n set: function (value) {\r\n if (this._countInChart === value) {\r\n return;\r\n }\r\n this._countInChart = value;\r\n this.redrawChart();\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(StatsComponent.prototype, \"sizeInChart\", {\r\n get: function () {\r\n return this._sizeInChart;\r\n },\r\n set: function (value) {\r\n if (this._sizeInChart === value) {\r\n return;\r\n }\r\n this._sizeInChart = value;\r\n this.redrawChart();\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n StatsComponent.prototype.ngOnInit = function () {\r\n this.sizeInChart = true;\r\n this.loadCategories();\r\n this.loadUsers();\r\n };\r\n StatsComponent.prototype.apply = function () {\r\n var _this = this;\r\n if (this.busy || !this.stats.valid) {\r\n return;\r\n }\r\n var model = {\r\n key: this.key.value.value,\r\n step: this.step ? this.step.value : null\r\n };\r\n if (this._filter) {\r\n model.creator = this._filter.creator;\r\n model.categories = this._filter.categories;\r\n model.invertCategories = this._filter.invertCategories;\r\n model.title = this._filter.title;\r\n model.author = this._filter.author;\r\n model.description = this._filter.description;\r\n model.yearMin = this._filter.yearMin;\r\n model.yearMax = this._filter.yearMax;\r\n }\r\n this.busy = true;\r\n this._statsService.getStatistics(model)\r\n .subscribe(function (data) {\r\n _this.convertKeys(data, model.key);\r\n _this.data = data;\r\n _this.setChartData(data);\r\n }, function (error) {\r\n _this._toastr.error(error);\r\n _this.busy = false;\r\n }, function () {\r\n _this.busy = false;\r\n });\r\n };\r\n StatsComponent.prototype.applyFilters = function (filter) {\r\n this._filter = filter;\r\n this.apply();\r\n };\r\n StatsComponent.prototype.downloadData = function () {\r\n if (!this.data) {\r\n return;\r\n }\r\n var csv = this._csvService.generateCsv(this.data, ',', '\\n');\r\n this._csvService.downloadCsv(csv, 'export.csv');\r\n };\r\n StatsComponent.prototype.loadCategories = function () {\r\n var _this = this;\r\n this.busy = true;\r\n this._categoryService.getCategories()\r\n .subscribe(function (data) {\r\n _this.categories = data;\r\n }, function (error) {\r\n _this._toastr.error(error);\r\n _this.busy = false;\r\n }, function () {\r\n _this.busy = false;\r\n });\r\n };\r\n StatsComponent.prototype.loadUsers = function () {\r\n var _this = this;\r\n this.busy = true;\r\n this._userService.getUsers()\r\n .subscribe(function (data) {\r\n _this.users = data;\r\n }, function (error) {\r\n _this._toastr.error(error);\r\n _this.busy = false;\r\n }, function () {\r\n _this.busy = false;\r\n });\r\n };\r\n StatsComponent.prototype.findCategory = function (filter) {\r\n for (var i = 0; i < this.categories.length; i++) {\r\n if (filter(this.categories[i])) {\r\n return this.categories[i];\r\n }\r\n }\r\n return null;\r\n };\r\n StatsComponent.prototype.findUser = function (filter) {\r\n for (var i = 0; i < this.users.length; i++) {\r\n if (filter(this.users[i])) {\r\n return this.users[i];\r\n }\r\n }\r\n return null;\r\n };\r\n StatsComponent.prototype.convertKeys = function (data, key) {\r\n switch (key) {\r\n case 'categoryid':\r\n var _loop_1 = function(i) {\r\n // let cat = this.categories.find((c, i) => c.id === data[i].key);\r\n var cat = this_1.findCategory(function (c) { return c.id === data[i].key; });\r\n if (cat) {\r\n data[i].key = cat.name;\r\n }\r\n };\r\n var this_1 = this;\r\n for (var i = 0; i < data.length; i++) {\r\n _loop_1(i);\r\n }\r\n break;\r\n case 'creatorid':\r\n var _loop_2 = function(i) {\r\n var user = this_2.findUser(function (u) { return u.userName === data[i].key; });\r\n if (user) {\r\n data[i].key = user.lastName + ' ' + user.firstName;\r\n }\r\n };\r\n var this_2 = this;\r\n for (var i = 0; i < data.length; i++) {\r\n _loop_2(i);\r\n }\r\n break;\r\n }\r\n };\r\n StatsComponent.prototype.setChartData = function (data) {\r\n if (!this.countInChart && !this.sizeInChart) {\r\n return;\r\n }\r\n this.chartValid = true;\r\n this.chartData = this._chartService.buildChartData(data, 'Prin2012', this.countInChart, this.sizeInChart);\r\n };\r\n StatsComponent.prototype.redrawChart = function () {\r\n if (!this.data || (!this.countInChart && !this.sizeInChart)) {\r\n return;\r\n }\r\n this.chartValid = true;\r\n this.chartData = this._chartService.buildChartData(this.data, 'Prin2012', this.countInChart, this.sizeInChart);\r\n };\r\n StatsComponent = __decorate([\r\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Component\"])({\r\n selector: 'app-stats',\r\n template: __webpack_require__(848),\r\n styles: [__webpack_require__(836)]\r\n }), \r\n __metadata('design:paramtypes', [(typeof (_a = typeof __WEBPACK_IMPORTED_MODULE_1__angular_forms__[\"FormBuilder\"] !== 'undefined' && __WEBPACK_IMPORTED_MODULE_1__angular_forms__[\"FormBuilder\"]) === 'function' && _a) || Object, (typeof (_b = typeof __WEBPACK_IMPORTED_MODULE_2_ng2_toastr_ng2_toastr__[\"ToastsManager\"] !== 'undefined' && __WEBPACK_IMPORTED_MODULE_2_ng2_toastr_ng2_toastr__[\"ToastsManager\"]) === 'function' && _b) || Object, (typeof (_c = typeof __WEBPACK_IMPORTED_MODULE_3__shared_services_category_service__[\"a\" /* CategoryService */] !== 'undefined' && __WEBPACK_IMPORTED_MODULE_3__shared_services_category_service__[\"a\" /* CategoryService */]) === 'function' && _c) || Object, (typeof (_d = typeof __WEBPACK_IMPORTED_MODULE_4__shared_services_user_service__[\"a\" /* UserService */] !== 'undefined' && __WEBPACK_IMPORTED_MODULE_4__shared_services_user_service__[\"a\" /* UserService */]) === 'function' && _d) || Object, (typeof (_e = typeof __WEBPACK_IMPORTED_MODULE_5__shared_services_stats_service__[\"a\" /* StatsService */] !== 'undefined' && __WEBPACK_IMPORTED_MODULE_5__shared_services_stats_service__[\"a\" /* StatsService */]) === 'function' && _e) || Object, (typeof (_f = typeof __WEBPACK_IMPORTED_MODULE_6__shared_services_chart_service__[\"a\" /* ChartService */] !== 'undefined' && __WEBPACK_IMPORTED_MODULE_6__shared_services_chart_service__[\"a\" /* ChartService */]) === 'function' && _f) || Object, (typeof (_g = typeof __WEBPACK_IMPORTED_MODULE_7__shared_services_csv_generator_service__[\"a\" /* CsvGeneratorService */] !== 'undefined' && __WEBPACK_IMPORTED_MODULE_7__shared_services_csv_generator_service__[\"a\" /* CsvGeneratorService */]) === 'function' && _g) || Object])\r\n ], StatsComponent);\r\n return StatsComponent;\r\n var _a, _b, _c, _d, _e, _f, _g;\r\n}());\r\n//# sourceMappingURL=D:/Projects/Core/Crusca/prinweb/src/stats.component.js.map\n\n/***/ },\n\n/***/ 383:\n/***/ function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__angular_router__ = __webpack_require__(63);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_ng2_toastr_ng2_toastr__ = __webpack_require__(45);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_ng2_toastr_ng2_toastr___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_ng2_toastr_ng2_toastr__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__shared_services_authentication_service__ = __webpack_require__(42);\n/* harmony export (binding) */ __webpack_require__.d(exports, \"a\", function() { return AppComponent; });\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n};\r\nvar __metadata = (this && this.__metadata) || function (k, v) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\r\n};\r\n\r\n\r\n\r\n\r\nvar AppComponent = (function () {\r\n // toastr: http://stackoverflow.com/questions/40973452/angular2-cannot-read-property-vcref-of-undefined\r\n function AppComponent(_router, _authService, toastr, vRef) {\r\n var _this = this;\r\n this._router = _router;\r\n this._authService = _authService;\r\n this.toastr = toastr;\r\n this.toastr.setRootViewContainerRef(vRef);\r\n this.collapsed = true;\r\n this.user = this._authService.getCurrentUser();\r\n this.logged = (this.user !== null);\r\n this._authService.userChanged.subscribe(function (u) {\r\n _this.logged = _this._authService.isAuthenticated(true);\r\n if (u) {\r\n _this.user = _this._authService.getCurrentUser();\r\n }\r\n });\r\n }\r\n AppComponent.prototype.logout = function () {\r\n if (!this.logged) {\r\n return;\r\n }\r\n this._authService.logout();\r\n this.logged = false;\r\n this._router.navigate(['/']);\r\n };\r\n AppComponent = __decorate([\r\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Component\"])({\r\n selector: 'app-root',\r\n template: __webpack_require__(849),\r\n styles: [__webpack_require__(837)]\r\n }), \r\n __metadata('design:paramtypes', [(typeof (_a = typeof __WEBPACK_IMPORTED_MODULE_1__angular_router__[\"a\" /* Router */] !== 'undefined' && __WEBPACK_IMPORTED_MODULE_1__angular_router__[\"a\" /* Router */]) === 'function' && _a) || Object, (typeof (_b = typeof __WEBPACK_IMPORTED_MODULE_3__shared_services_authentication_service__[\"a\" /* AuthenticationService */] !== 'undefined' && __WEBPACK_IMPORTED_MODULE_3__shared_services_authentication_service__[\"a\" /* AuthenticationService */]) === 'function' && _b) || Object, (typeof (_c = typeof __WEBPACK_IMPORTED_MODULE_2_ng2_toastr_ng2_toastr__[\"ToastsManager\"] !== 'undefined' && __WEBPACK_IMPORTED_MODULE_2_ng2_toastr_ng2_toastr__[\"ToastsManager\"]) === 'function' && _c) || Object, (typeof (_d = typeof __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"ViewContainerRef\"] !== 'undefined' && __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"ViewContainerRef\"]) === 'function' && _d) || Object])\r\n ], AppComponent);\r\n return AppComponent;\r\n var _a, _b, _c, _d;\r\n}());\r\n//# sourceMappingURL=D:/Projects/Core/Crusca/prinweb/src/app.component.js.map\n\n/***/ },\n\n/***/ 384:\n/***/ function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(0);\n/* harmony export (binding) */ __webpack_require__.d(exports, \"a\", function() { return TabComponent; });\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n};\r\nvar __metadata = (this && this.__metadata) || function (k, v) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\r\n};\r\n\r\nvar TabComponent = (function () {\r\n function TabComponent() {\r\n this.active = false;\r\n }\r\n __decorate([\r\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Input\"])('tabTitle'), \r\n __metadata('design:type', String)\r\n ], TabComponent.prototype, \"title\", void 0);\r\n __decorate([\r\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Input\"])(), \r\n __metadata('design:type', Object)\r\n ], TabComponent.prototype, \"active\", void 0);\r\n TabComponent = __decorate([\r\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Component\"])({\r\n selector: 'app-tab',\r\n styles: [\"\\n .pane{\\n padding: 1em;\\n }\\n \"],\r\n template: \"\\n
\\n \\n
\\n \"\r\n }), \r\n __metadata('design:paramtypes', [])\r\n ], TabComponent);\r\n return TabComponent;\r\n}());\r\n//# sourceMappingURL=D:/Projects/Core/Crusca/prinweb/src/tab.component.js.map\n\n/***/ },\n\n/***/ 385:\n/***/ function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__angular_router__ = __webpack_require__(63);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_ng2_toastr_ng2_toastr__ = __webpack_require__(45);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_ng2_toastr_ng2_toastr___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_ng2_toastr_ng2_toastr__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__authentication_service__ = __webpack_require__(42);\n/* harmony export (binding) */ __webpack_require__.d(exports, \"a\", function() { return AdminGuardService; });\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n};\r\nvar __metadata = (this && this.__metadata) || function (k, v) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\r\n};\r\n\r\n\r\n\r\n\r\nvar AdminGuardService = (function () {\r\n function AdminGuardService(_router, _toastr, _authService) {\r\n this._router = _router;\r\n this._toastr = _toastr;\r\n this._authService = _authService;\r\n }\r\n AdminGuardService.prototype.canActivate = function () {\r\n // if not authenticated, redirect to login\r\n if (!this._authService.isAuthenticated(false)) {\r\n this._router.navigate(['/accedi']);\r\n return false;\r\n }\r\n // if authenticated but not verified, redirect to login\r\n if (!this._authService.isAuthenticated(true)) {\r\n this._router.navigate(['/accedi']);\r\n this._toastr.warning('Utente non verificato');\r\n return false;\r\n }\r\n // else activate only if admin\r\n var user = this._authService.getCurrentUser();\r\n var ok = (user && user.role === 'admin');\r\n if (!ok) {\r\n this._toastr.warning('Non sei autorizzato a visualizzare questa pagina');\r\n }\r\n return ok;\r\n };\r\n AdminGuardService = __decorate([\r\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Injectable\"])(), \r\n __metadata('design:paramtypes', [(typeof (_a = typeof __WEBPACK_IMPORTED_MODULE_1__angular_router__[\"a\" /* Router */] !== 'undefined' && __WEBPACK_IMPORTED_MODULE_1__angular_router__[\"a\" /* Router */]) === 'function' && _a) || Object, (typeof (_b = typeof __WEBPACK_IMPORTED_MODULE_2_ng2_toastr_ng2_toastr__[\"ToastsManager\"] !== 'undefined' && __WEBPACK_IMPORTED_MODULE_2_ng2_toastr_ng2_toastr__[\"ToastsManager\"]) === 'function' && _b) || Object, (typeof (_c = typeof __WEBPACK_IMPORTED_MODULE_3__authentication_service__[\"a\" /* AuthenticationService */] !== 'undefined' && __WEBPACK_IMPORTED_MODULE_3__authentication_service__[\"a\" /* AuthenticationService */]) === 'function' && _c) || Object])\r\n ], AdminGuardService);\r\n return AdminGuardService;\r\n var _a, _b, _c;\r\n}());\r\n//# sourceMappingURL=D:/Projects/Core/Crusca/prinweb/src/admin-guard.service.js.map\n\n/***/ },\n\n/***/ 386:\n/***/ function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__angular_router__ = __webpack_require__(63);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__settings_service__ = __webpack_require__(43);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_ng2_toastr_ng2_toastr__ = __webpack_require__(45);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_ng2_toastr_ng2_toastr___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3_ng2_toastr_ng2_toastr__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__authentication_service__ = __webpack_require__(42);\n/* harmony export (binding) */ __webpack_require__.d(exports, \"a\", function() { return AuthGuardService; });\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n};\r\nvar __metadata = (this && this.__metadata) || function (k, v) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\r\n};\r\n\r\n\r\n\r\n\r\n\r\nvar AuthGuardService = (function () {\r\n function AuthGuardService(_router, _toastr, _settings, _authService) {\r\n this._router = _router;\r\n this._toastr = _toastr;\r\n this._settings = _settings;\r\n this._authService = _authService;\r\n }\r\n AuthGuardService.prototype.canActivate = function () {\r\n // if not authenticated, redirect to login\r\n if (!this._authService.isAuthenticated(false)) {\r\n this._router.navigate(['/accedi']);\r\n return false;\r\n }\r\n // if authenticated but not verified, redirect to login\r\n if (!this._authService.isAuthenticated(true)) {\r\n this._router.navigate(['/accedi']);\r\n this._toastr.warning('Utente non verificato');\r\n return false;\r\n }\r\n return true;\r\n };\r\n AuthGuardService = __decorate([\r\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Injectable\"])(), \r\n __metadata('design:paramtypes', [(typeof (_a = typeof __WEBPACK_IMPORTED_MODULE_1__angular_router__[\"a\" /* Router */] !== 'undefined' && __WEBPACK_IMPORTED_MODULE_1__angular_router__[\"a\" /* Router */]) === 'function' && _a) || Object, (typeof (_b = typeof __WEBPACK_IMPORTED_MODULE_3_ng2_toastr_ng2_toastr__[\"ToastsManager\"] !== 'undefined' && __WEBPACK_IMPORTED_MODULE_3_ng2_toastr_ng2_toastr__[\"ToastsManager\"]) === 'function' && _b) || Object, (typeof (_c = typeof __WEBPACK_IMPORTED_MODULE_2__settings_service__[\"a\" /* SettingsService */] !== 'undefined' && __WEBPACK_IMPORTED_MODULE_2__settings_service__[\"a\" /* SettingsService */]) === 'function' && _c) || Object, (typeof (_d = typeof __WEBPACK_IMPORTED_MODULE_4__authentication_service__[\"a\" /* AuthenticationService */] !== 'undefined' && __WEBPACK_IMPORTED_MODULE_4__authentication_service__[\"a\" /* AuthenticationService */]) === 'function' && _d) || Object])\r\n ], AuthGuardService);\r\n return AuthGuardService;\r\n var _a, _b, _c, _d;\r\n}());\r\n//# sourceMappingURL=D:/Projects/Core/Crusca/prinweb/src/auth-guard.service.js.map\n\n/***/ },\n\n/***/ 387:\n/***/ function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(0);\n/* harmony export (binding) */ __webpack_require__.d(exports, \"a\", function() { return ChartService; });\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n};\r\nvar __metadata = (this && this.__metadata) || function (k, v) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\r\n};\r\n\r\nvar ChartService = (function () {\r\n function ChartService() {\r\n }\r\n /**\r\n * Build chart data for ng2-chart.\r\n * @param {IStatsResult[]} results Stats results got from server.\r\n * @param {string} label Label to assign to the chart.\r\n * @param {boolean} count True to include the counts series.\r\n * @param {boolean} size True to include the sizes series.\r\n * @returns {IChartData} Data.\r\n */\r\n ChartService.prototype.buildChartData = function (results, label, count, size) {\r\n var data;\r\n // prepare sets\r\n var countSet = {\r\n label: 'numero',\r\n data: []\r\n };\r\n var sizeSet = {\r\n label: 'dimensioni',\r\n data: []\r\n };\r\n // prepare dataset\r\n if (count && size) {\r\n data = {\r\n labels: [],\r\n datasets: [countSet, sizeSet]\r\n };\r\n }\r\n else {\r\n if (count) {\r\n data = {\r\n labels: [],\r\n datasets: [countSet]\r\n };\r\n }\r\n else if (size) {\r\n data = {\r\n labels: [],\r\n datasets: [sizeSet]\r\n };\r\n }\r\n }\r\n // add labels\r\n for (var i = 0; i < results.length; i++) {\r\n if (count) {\r\n countSet.data.push(results[i].count);\r\n }\r\n if (size) {\r\n sizeSet.data.push(results[i].size / 1024);\r\n }\r\n data.labels.push(results[i].key);\r\n }\r\n return data;\r\n };\r\n ChartService = __decorate([\r\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Injectable\"])(), \r\n __metadata('design:paramtypes', [])\r\n ], ChartService);\r\n return ChartService;\r\n}());\r\n//# sourceMappingURL=D:/Projects/Core/Crusca/prinweb/src/chart.service.js.map\n\n/***/ },\n\n/***/ 388:\n/***/ function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(0);\n/* harmony export (binding) */ __webpack_require__.d(exports, \"a\", function() { return CsvGeneratorService; });\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n};\r\nvar __metadata = (this && this.__metadata) || function (k, v) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\r\n};\r\n\r\n// see also http://halistechnology.com/2015/05/28/use-javascript-to-export-your-data-as-csv/\r\nvar CsvGeneratorService = (function () {\r\n function CsvGeneratorService() {\r\n }\r\n CsvGeneratorService.prototype.generateCsv = function (data, columnSep, rowSep) {\r\n if (columnSep === void 0) { columnSep = ','; }\r\n if (!data || data.length === 0) {\r\n return null;\r\n }\r\n var sb = [];\r\n var keys = Object.keys(data[0]);\r\n // legend row\r\n sb.push(keys.join(columnSep));\r\n sb.push(rowSep);\r\n // data rows\r\n for (var y = 0; y < data.length; y++) {\r\n var x = 0;\r\n var row = data[y];\r\n for (var key in row) {\r\n if (row.hasOwnProperty(key)) {\r\n if (x > 0) {\r\n sb.push(columnSep);\r\n }\r\n sb.push(row[key]);\r\n x++;\r\n }\r\n }\r\n sb.push(rowSep);\r\n }\r\n return sb.join('');\r\n };\r\n CsvGeneratorService.prototype.downloadCsv = function (csv, fileName) {\r\n if (fileName === void 0) { fileName = 'export.csv'; }\r\n if (!csv) {\r\n return;\r\n }\r\n if (!csv.match(/^data:text\\/csv/i)) {\r\n csv = 'data:text/csv;charset=utf-8,' + csv;\r\n }\r\n var data = encodeURI(csv);\r\n var link = document.createElement('a');\r\n link.setAttribute('href', data);\r\n link.setAttribute('download', fileName);\r\n link.click();\r\n };\r\n CsvGeneratorService = __decorate([\r\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Injectable\"])(), \r\n __metadata('design:paramtypes', [])\r\n ], CsvGeneratorService);\r\n return CsvGeneratorService;\r\n}());\r\n//# sourceMappingURL=D:/Projects/Core/Crusca/prinweb/src/csv-generator.service.js.map\n\n/***/ },\n\n/***/ 389:\n/***/ function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__angular_http__ = __webpack_require__(87);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_rxjs_Observable__ = __webpack_require__(5);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_rxjs_Observable___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_rxjs_Observable__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_rxjs_add_operator_catch__ = __webpack_require__(126);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_rxjs_add_operator_catch___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3_rxjs_add_operator_catch__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__settings_service__ = __webpack_require__(43);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__authentication_service__ = __webpack_require__(42);\n/* harmony export (binding) */ __webpack_require__.d(exports, \"a\", function() { return StatsService; });\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n};\r\nvar __metadata = (this && this.__metadata) || function (k, v) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\r\n};\r\n\r\n\r\n\r\n\r\n\r\n\r\nvar StatsService = (function () {\r\n function StatsService(_http, _settings, _authService) {\r\n this._http = _http;\r\n this._settings = _settings;\r\n this._authService = _authService;\r\n }\r\n StatsService.prototype.getStatistics = function (model) {\r\n var _this = this;\r\n var sb = [this._settings.apiBaseUrl + 'stats?'];\r\n this.appendQueryParam('key', model.key || 'categoryid', sb);\r\n if (model.step > 0) {\r\n this.appendQueryParam('step', model.step.toString(), sb);\r\n }\r\n if (model.creator) {\r\n this.appendQueryParam('creator', model.creator, sb);\r\n }\r\n if (model.categories) {\r\n this.appendQueryParam('categories', model.categories, sb);\r\n }\r\n if (model.invertCategories) {\r\n this.appendQueryParam('invertCategories', model.invertCategories ? 'true' : 'false', sb);\r\n }\r\n if (model.title) {\r\n this.appendQueryParam('title', model.title, sb);\r\n }\r\n if (model.author) {\r\n this.appendQueryParam('author', model.author, sb);\r\n }\r\n if (model.description) {\r\n this.appendQueryParam('description', model.description, sb);\r\n }\r\n if (model.yearMin > 0) {\r\n this.appendQueryParam('yearMin', model.yearMin.toString(), sb);\r\n }\r\n if (model.yearMax > 0) {\r\n this.appendQueryParam('yearMax', model.yearMax.toString(), sb);\r\n }\r\n var options = {\r\n headers: this._authService.createAuthHeaders({\r\n 'Content-Type': 'application/json'\r\n })\r\n };\r\n return this._http.get(sb.join(''), options)\r\n .map(function (res) { return res.json(); })\r\n .catch(function (error) { return __WEBPACK_IMPORTED_MODULE_2_rxjs_Observable__[\"Observable\"].throw(error.json().error || _this._settings.serverErrorMessage); });\r\n };\r\n StatsService.prototype.appendQueryParam = function (name, value, sb) {\r\n var i = sb.length - 1;\r\n if (i > -1 && sb[i].length > 0 && sb[i].charAt(sb[i].length - 1) !== '?') {\r\n sb.push('&');\r\n }\r\n sb.push(encodeURIComponent(name) + '=' +\r\n encodeURIComponent(value));\r\n };\r\n StatsService = __decorate([\r\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Injectable\"])(), \r\n __metadata('design:paramtypes', [(typeof (_a = typeof __WEBPACK_IMPORTED_MODULE_1__angular_http__[\"b\" /* Http */] !== 'undefined' && __WEBPACK_IMPORTED_MODULE_1__angular_http__[\"b\" /* Http */]) === 'function' && _a) || Object, (typeof (_b = typeof __WEBPACK_IMPORTED_MODULE_4__settings_service__[\"a\" /* SettingsService */] !== 'undefined' && __WEBPACK_IMPORTED_MODULE_4__settings_service__[\"a\" /* SettingsService */]) === 'function' && _b) || Object, (typeof (_c = typeof __WEBPACK_IMPORTED_MODULE_5__authentication_service__[\"a\" /* AuthenticationService */] !== 'undefined' && __WEBPACK_IMPORTED_MODULE_5__authentication_service__[\"a\" /* AuthenticationService */]) === 'function' && _c) || Object])\r\n ], StatsService);\r\n return StatsService;\r\n var _a, _b, _c;\r\n}());\r\n//# sourceMappingURL=D:/Projects/Core/Crusca/prinweb/src/stats.service.js.map\n\n/***/ },\n\n/***/ 42:\n/***/ function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__angular_http__ = __webpack_require__(87);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_rxjs_Observable__ = __webpack_require__(5);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_rxjs_Observable___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_rxjs_Observable__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_rxjs_add_operator_catch__ = __webpack_require__(126);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_rxjs_add_operator_catch___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3_rxjs_add_operator_catch__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__settings_service__ = __webpack_require__(43);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__local_storage_service__ = __webpack_require__(164);\n/* harmony export (binding) */ __webpack_require__.d(exports, \"a\", function() { return AuthenticationService; });\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n};\r\nvar __metadata = (this && this.__metadata) || function (k, v) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\r\n};\r\n\r\n\r\n\r\n\r\n\r\n\r\nvar AuthenticationService = (function () {\r\n function AuthenticationService(_http, _settings, _localStorage) {\r\n this._http = _http;\r\n this._settings = _settings;\r\n this._localStorage = _localStorage;\r\n this.userChanged = new __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"EventEmitter\"]();\r\n }\r\n /**\r\n * Logs the specified user in.\r\n * @param {string} name: user name.\r\n * @param {string} password: password.\r\n */\r\n AuthenticationService.prototype.login = function (name, password) {\r\n var _this = this;\r\n if (!name) {\r\n throw new Error('User name not specified');\r\n }\r\n var body = 'grant_type=password&scope=offline_access profile email roles' +\r\n (\"&resource=\" + this._settings.appBaseUrl + \"&username=\" + name + \"&password=\" + password);\r\n this._http.post(this._settings.authBaseUrl + \"token\", body, {\r\n headers: new __WEBPACK_IMPORTED_MODULE_1__angular_http__[\"a\" /* Headers */]({\r\n 'Content-Type': 'application/x-www-form-urlencoded'\r\n })\r\n }).map(function (res) { return res.json(); })\r\n .subscribe(function (token) {\r\n // calculate expiry date and save result\r\n if (token.expires_in) {\r\n token.expires_on = _this.calculateExpirationDate(+token.expires_in);\r\n }\r\n _this._localStorage.store(_this._settings.tokenStorageKey, token, true);\r\n // get user info\r\n _this._http.get(_this._settings.authBaseUrl + 'userinfo', {\r\n headers: new __WEBPACK_IMPORTED_MODULE_1__angular_http__[\"a\" /* Headers */]({\r\n 'Content-Type': 'application/json',\r\n 'Authorization': 'Bearer ' + token.access_token\r\n })\r\n }).map(function (res) { return res.json(); })\r\n .subscribe(function (info) {\r\n var user = {\r\n id: info.name,\r\n email: info.email,\r\n name: info.name,\r\n firstName: info.given_name,\r\n lastName: info.family_name,\r\n // currently each user has a single role, so just pick it\r\n role: info.roles,\r\n verified: info.email_verified\r\n };\r\n // save result\r\n _this._localStorage.store(_this._settings.userStorageKey, user, true);\r\n _this.userChanged.emit(user);\r\n }, function (error) {\r\n console.log('AuthenticationService: error getting user info: ' + error);\r\n });\r\n }, function (error) {\r\n console.log('AuthenticationService: error getting access token: ' + error);\r\n });\r\n };\r\n /**\r\n * Logs out the current user if any.\r\n */\r\n AuthenticationService.prototype.logout = function () {\r\n var _this = this;\r\n this._localStorage.remove(this._settings.userStorageKey, true);\r\n this._localStorage.remove('id_token');\r\n this.userChanged.emit(null);\r\n var options = {\r\n headers: this.createAuthHeaders({\r\n 'Content-Type': 'application/json'\r\n })\r\n };\r\n return this._http.get(this._settings.authBaseUrl + 'logout', options)\r\n .map(function (res) { return res.json(); })\r\n .catch(function (error) { return __WEBPACK_IMPORTED_MODULE_2_rxjs_Observable__[\"Observable\"].throw(error.json().error || _this._settings.serverErrorMessage); });\r\n };\r\n /**\r\n * True it the user is authenticated, and eventually verified.\r\n * @param {boolean} verifiedOnly true to return true only if the user is verified.\r\n * @returns {boolean} true if authenticated (and eventually verified).\r\n */\r\n AuthenticationService.prototype.isAuthenticated = function (verifiedOnly) {\r\n // check stored data\r\n var result = this._localStorage.retrieve(this._settings.tokenStorageKey, true);\r\n if (!result) {\r\n return false;\r\n }\r\n // check expiration\r\n if (result.expires_on) {\r\n if (this.getUTCDate().valueOf() - result.expires_on.valueOf() < 60) {\r\n return false;\r\n }\r\n }\r\n // check confirmation, if requested\r\n if (!verifiedOnly) {\r\n return true;\r\n }\r\n var user = this._localStorage.retrieve(this._settings.userStorageKey, true);\r\n return user && user.verified;\r\n };\r\n /**\r\n * Gets data about the current user.\r\n * @returns {IUser} user data or null.\r\n */\r\n AuthenticationService.prototype.getCurrentUser = function () {\r\n return this._localStorage.retrieve(this._settings.userStorageKey, true);\r\n };\r\n /**\r\n * Checks if the specified email address is registered on the server.\r\n * @param {string} email email address to test.\r\n * @returns {IExistResult} result.\r\n */\r\n AuthenticationService.prototype.isEmailRegistered = function (email) {\r\n var options = {\r\n headers: this.createAuthHeaders({\r\n 'Content-Type': 'application/json'\r\n })\r\n };\r\n return this._http.get(this._settings.apiBaseUrl + 'accounts/emailexists/' +\r\n encodeURIComponent(email), options);\r\n };\r\n /**\r\n * Checks if the specified user's given name is registered on the server.\r\n * This name is a nickname chosen by users during registration, and is the key\r\n * used for referencing users when talking to the server.\r\n * @param {string} name name to test.\r\n * @returns {IExistResult} result.\r\n */\r\n AuthenticationService.prototype.isNameRegistered = function (name) {\r\n var options = {\r\n headers: this.createAuthHeaders({\r\n 'Content-Type': 'application/json'\r\n })\r\n };\r\n return this._http.get(this._settings.apiBaseUrl + 'accounts/nameexists/' +\r\n encodeURIComponent(name), options);\r\n };\r\n /**\r\n * Register the user with the specified registration data.\r\n * @param {IRegistrationModel} registration The registration data.\r\n */\r\n AuthenticationService.prototype.register = function (registration) {\r\n var options = {\r\n headers: this.createAuthHeaders({\r\n 'Content-Type': 'application/json'\r\n })\r\n };\r\n return this._http.post(this._settings.apiBaseUrl + 'accounts/register', registration, options);\r\n };\r\n /**\r\n * Resend the confirmation email to the specified address.\r\n * @param {string} email address.\r\n */\r\n AuthenticationService.prototype.resendConfirmEmail = function (email) {\r\n var options = {\r\n headers: this.createAuthHeaders({\r\n 'Content-Type': 'application/json'\r\n })\r\n };\r\n return this._http.get(this._settings.apiBaseUrl + 'accounts/resendconfirm/' +\r\n encodeURIComponent(email), options);\r\n };\r\n /**\r\n * Create headers with bearer authentication. You can use this method as a shortcut\r\n * for building headers for authenticated requests.\r\n * @param {Headers | {[name: string]: any}} headers content of headers to be merged\r\n * with the authentication headers.\r\n * @returns {Headers} headers.\r\n */\r\n AuthenticationService.prototype.createAuthHeaders = function (headers) {\r\n // create headers\r\n var auth = new __WEBPACK_IMPORTED_MODULE_1__angular_http__[\"a\" /* Headers */]();\r\n if (headers) {\r\n for (var key in headers) {\r\n if (headers.hasOwnProperty(key)) {\r\n auth.append(key, headers[key]);\r\n }\r\n }\r\n }\r\n // append authentication\r\n var tokenResult = this._localStorage.retrieve(this._settings.tokenStorageKey, true);\r\n if (tokenResult) {\r\n auth.append('Authorization', 'Bearer ' + tokenResult.access_token);\r\n }\r\n return auth;\r\n };\r\n AuthenticationService.prototype.getUTCDate = function (date) {\r\n if (!date) {\r\n date = new Date();\r\n }\r\n return new Date(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate(), date.getUTCHours(), date.getUTCMinutes(), date.getUTCSeconds());\r\n };\r\n AuthenticationService.prototype.calculateExpirationDate = function (exp) {\r\n var date = this.getUTCDate();\r\n date.setSeconds(date.getUTCSeconds() + exp);\r\n return date;\r\n };\r\n AuthenticationService = __decorate([\r\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Injectable\"])(), \r\n __metadata('design:paramtypes', [(typeof (_a = typeof __WEBPACK_IMPORTED_MODULE_1__angular_http__[\"b\" /* Http */] !== 'undefined' && __WEBPACK_IMPORTED_MODULE_1__angular_http__[\"b\" /* Http */]) === 'function' && _a) || Object, (typeof (_b = typeof __WEBPACK_IMPORTED_MODULE_4__settings_service__[\"a\" /* SettingsService */] !== 'undefined' && __WEBPACK_IMPORTED_MODULE_4__settings_service__[\"a\" /* SettingsService */]) === 'function' && _b) || Object, (typeof (_c = typeof __WEBPACK_IMPORTED_MODULE_5__local_storage_service__[\"a\" /* LocalStorageService */] !== 'undefined' && __WEBPACK_IMPORTED_MODULE_5__local_storage_service__[\"a\" /* LocalStorageService */]) === 'function' && _c) || Object])\r\n ], AuthenticationService);\r\n return AuthenticationService;\r\n var _a, _b, _c;\r\n}());\r\n//# sourceMappingURL=D:/Projects/Core/Crusca/prinweb/src/authentication.service.js.map\n\n/***/ },\n\n/***/ 43:\n/***/ function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__environments_environment__ = __webpack_require__(237);\n/* harmony export (binding) */ __webpack_require__.d(exports, \"a\", function() { return SettingsService; });\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n};\r\nvar __metadata = (this && this.__metadata) || function (k, v) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\r\n};\r\n\r\n\r\nvar SettingsService = (function () {\r\n function SettingsService() {\r\n if (__WEBPACK_IMPORTED_MODULE_1__environments_environment__[\"a\" /* environment */].production) {\r\n this.apiBaseUrl = 'http://prinapi.azurewebsites.net/api/';\r\n this.authBaseUrl = 'http://prinapi.azurewebsites.net/connect/';\r\n // this.appBaseUrl = 'http://www.fusisoft.it/apps/prin/';\r\n this.appBaseUrl = 'http://www.prin2012crusca.org/';\r\n }\r\n else {\r\n this.apiBaseUrl = 'http://localhost:51346/api/';\r\n this.authBaseUrl = 'http://localhost:51346/connect/';\r\n this.appBaseUrl = 'http://localhost:4200/';\r\n }\r\n this.serverErrorMessage = 'Errore del server';\r\n this.pageSize = 20;\r\n this.azureAccountId = 'breditstore';\r\n this.azureContainerName = 'prin';\r\n this.userStorageKey = 'prin-ls-user';\r\n this.tokenStorageKey = 'prin-ls-token';\r\n this.storagePrefix = 'prin-ls-';\r\n }\r\n SettingsService = __decorate([\r\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Injectable\"])(), \r\n __metadata('design:paramtypes', [])\r\n ], SettingsService);\r\n return SettingsService;\r\n}());\r\n//# sourceMappingURL=D:/Projects/Core/Crusca/prinweb/src/settings.service.js.map\n\n/***/ },\n\n/***/ 504:\n/***/ function(module, exports) {\n\nfunction webpackEmptyContext(req) {\n\tthrow new Error(\"Cannot find module '\" + req + \"'.\");\n}\nwebpackEmptyContext.keys = function() { return []; };\nwebpackEmptyContext.resolve = webpackEmptyContext;\nmodule.exports = webpackEmptyContext;\nwebpackEmptyContext.id = 504;\n\n\n/***/ },\n\n/***/ 505:\n/***/ function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__polyfills_ts__ = __webpack_require__(635);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__polyfills_ts___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0__polyfills_ts__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__angular_platform_browser_dynamic__ = __webpack_require__(595);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__angular_core__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__environments_environment__ = __webpack_require__(237);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__app___ = __webpack_require__(626);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5_moment__ = __webpack_require__(53);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5_moment___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_5_moment__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6_moment_locale_it__ = __webpack_require__(792);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6_moment_locale_it___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_6_moment_locale_it__);\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n__WEBPACK_IMPORTED_MODULE_5_moment__[\"locale\"]('it');\r\nif (__WEBPACK_IMPORTED_MODULE_3__environments_environment__[\"a\" /* environment */].production) {\r\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__angular_core__[\"enableProdMode\"])();\r\n}\r\n__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__angular_platform_browser_dynamic__[\"a\" /* platformBrowserDynamic */])().bootstrapModule(__WEBPACK_IMPORTED_MODULE_4__app___[\"a\" /* AppModule */]);\r\n//# sourceMappingURL=D:/Projects/Core/Crusca/prinweb/src/main.js.map\n\n/***/ },\n\n/***/ 624:\n/***/ function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__angular_router__ = __webpack_require__(63);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__document_editor_document_editor_component__ = __webpack_require__(377);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__document_list_document_list_component__ = __webpack_require__(378);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__home_home_component__ = __webpack_require__(379);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__login_login_component__ = __webpack_require__(380);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__registration_registration_component__ = __webpack_require__(381);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__stats_stats_component__ = __webpack_require__(382);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__shared_services_auth_guard_service__ = __webpack_require__(386);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_9__shared_services_admin_guard_service__ = __webpack_require__(385);\n/* harmony export (binding) */ __webpack_require__.d(exports, \"a\", function() { return PrinwebRoutingModule; });\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n};\r\nvar __metadata = (this && this.__metadata) || function (k, v) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\r\n};\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\nvar routes = [\r\n { path: '', component: __WEBPACK_IMPORTED_MODULE_4__home_home_component__[\"a\" /* HomeComponent */] },\r\n { path: 'documenti', component: __WEBPACK_IMPORTED_MODULE_3__document_list_document_list_component__[\"a\" /* DocumentListComponent */], canActivate: [__WEBPACK_IMPORTED_MODULE_8__shared_services_auth_guard_service__[\"a\" /* AuthGuardService */]] },\r\n { path: 'documento/:id', component: __WEBPACK_IMPORTED_MODULE_2__document_editor_document_editor_component__[\"a\" /* DocumentEditorComponent */], canActivate: [__WEBPACK_IMPORTED_MODULE_8__shared_services_auth_guard_service__[\"a\" /* AuthGuardService */]] },\r\n { path: 'accedi', component: __WEBPACK_IMPORTED_MODULE_5__login_login_component__[\"a\" /* LoginComponent */] },\r\n { path: 'statistiche', component: __WEBPACK_IMPORTED_MODULE_7__stats_stats_component__[\"a\" /* StatsComponent */], canActivate: [__WEBPACK_IMPORTED_MODULE_8__shared_services_auth_guard_service__[\"a\" /* AuthGuardService */]] },\r\n { path: 'registra', component: __WEBPACK_IMPORTED_MODULE_6__registration_registration_component__[\"a\" /* RegistrationComponent */], canActivate: [__WEBPACK_IMPORTED_MODULE_9__shared_services_admin_guard_service__[\"a\" /* AdminGuardService */]] }\r\n];\r\nvar PrinwebRoutingModule = (function () {\r\n function PrinwebRoutingModule() {\r\n }\r\n PrinwebRoutingModule = __decorate([\r\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__angular_core__[\"NgModule\"])({\r\n imports: [__WEBPACK_IMPORTED_MODULE_1__angular_router__[\"c\" /* RouterModule */].forRoot(routes)],\r\n exports: [__WEBPACK_IMPORTED_MODULE_1__angular_router__[\"c\" /* RouterModule */]],\r\n providers: []\r\n }), \r\n __metadata('design:paramtypes', [])\r\n ], PrinwebRoutingModule);\r\n return PrinwebRoutingModule;\r\n}());\r\n//# sourceMappingURL=D:/Projects/Core/Crusca/prinweb/src/app-routing.module.js.map\n\n/***/ },\n\n/***/ 625:\n/***/ function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_platform_browser__ = __webpack_require__(73);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__angular_core__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__angular_forms__ = __webpack_require__(17);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__angular_http__ = __webpack_require__(87);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__app_component__ = __webpack_require__(383);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5_ng2_toastr_ng2_toastr__ = __webpack_require__(45);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5_ng2_toastr_ng2_toastr___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_5_ng2_toastr_ng2_toastr__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6_angular2_moment__ = __webpack_require__(636);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6_angular2_moment___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_6_angular2_moment__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7_ng2_bootstrap__ = __webpack_require__(800);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7_ng2_bootstrap___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_7_ng2_bootstrap__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8_ng2_select__ = __webpack_require__(827);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8_ng2_select___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_8_ng2_select__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_9_ng2_charts_ng2_charts__ = __webpack_require__(819);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_9_ng2_charts_ng2_charts___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_9_ng2_charts_ng2_charts__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_10_ng2_file_upload__ = __webpack_require__(484);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_10_ng2_file_upload___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_10_ng2_file_upload__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_11__shared_services_admin_guard_service__ = __webpack_require__(385);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_12__shared_services_authentication_service__ = __webpack_require__(42);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_13__shared_services_auth_guard_service__ = __webpack_require__(386);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_14__shared_services_category_service__ = __webpack_require__(117);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_15__shared_services_chart_service__ = __webpack_require__(387);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_16__shared_components_confirm_confirm_service__ = __webpack_require__(163);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_17__shared_services_csv_generator_service__ = __webpack_require__(388);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_18__shared_services_document_service__ = __webpack_require__(235);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_19__shared_services_local_storage_service__ = __webpack_require__(164);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_20__shared_services_settings_service__ = __webpack_require__(43);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_21__shared_services_stats_service__ = __webpack_require__(389);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_22__shared_services_user_service__ = __webpack_require__(236);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_23__shared_pipes_file_size_pipe__ = __webpack_require__(633);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_24__shared_components_asset_editor_asset_editor_component__ = __webpack_require__(627);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_25__shared_components_asset_uploader_asset_uploader_component__ = __webpack_require__(628);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_26__shared_components_confirm_confirm_component__ = __webpack_require__(629);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_27__shared_components_document_filters_document_filters_component__ = __webpack_require__(630);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_28__shared_components_password_strength_bar_password_strength_bar_component__ = __webpack_require__(631);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_29__app_routing_module__ = __webpack_require__(624);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_30__shared_components_tabs_tabs_component__ = __webpack_require__(632);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_31__shared_components_tabs_tab_component__ = __webpack_require__(384);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_32__document_editor_document_editor_component__ = __webpack_require__(377);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_33__document_list_document_list_component__ = __webpack_require__(378);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_34__home_home_component__ = __webpack_require__(379);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_35__login_login_component__ = __webpack_require__(380);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_36__registration_registration_component__ = __webpack_require__(381);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_37__stats_stats_component__ = __webpack_require__(382);\n/* harmony export (binding) */ __webpack_require__.d(exports, \"a\", function() { return AppModule; });\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n};\r\nvar __metadata = (this && this.__metadata) || function (k, v) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\r\n};\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\nvar AppModule = (function () {\r\n function AppModule() {\r\n }\r\n AppModule = __decorate([\r\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__angular_core__[\"NgModule\"])({\r\n declarations: [\r\n __WEBPACK_IMPORTED_MODULE_10_ng2_file_upload__[\"FileSelectDirective\"],\r\n __WEBPACK_IMPORTED_MODULE_10_ng2_file_upload__[\"FileDropDirective\"],\r\n // pipes\r\n __WEBPACK_IMPORTED_MODULE_23__shared_pipes_file_size_pipe__[\"a\" /* FileSizePipe */],\r\n // components\r\n __WEBPACK_IMPORTED_MODULE_4__app_component__[\"a\" /* AppComponent */],\r\n __WEBPACK_IMPORTED_MODULE_24__shared_components_asset_editor_asset_editor_component__[\"a\" /* AssetEditorComponent */],\r\n __WEBPACK_IMPORTED_MODULE_25__shared_components_asset_uploader_asset_uploader_component__[\"a\" /* AssetUploaderComponent */],\r\n __WEBPACK_IMPORTED_MODULE_26__shared_components_confirm_confirm_component__[\"a\" /* ConfirmComponent */],\r\n __WEBPACK_IMPORTED_MODULE_27__shared_components_document_filters_document_filters_component__[\"a\" /* DocumentFiltersComponent */],\r\n __WEBPACK_IMPORTED_MODULE_28__shared_components_password_strength_bar_password_strength_bar_component__[\"a\" /* PasswordStrengthBarComponent */],\r\n __WEBPACK_IMPORTED_MODULE_31__shared_components_tabs_tab_component__[\"a\" /* TabComponent */],\r\n __WEBPACK_IMPORTED_MODULE_30__shared_components_tabs_tabs_component__[\"a\" /* TabsComponent */],\r\n // pages\r\n __WEBPACK_IMPORTED_MODULE_32__document_editor_document_editor_component__[\"a\" /* DocumentEditorComponent */],\r\n __WEBPACK_IMPORTED_MODULE_33__document_list_document_list_component__[\"a\" /* DocumentListComponent */],\r\n __WEBPACK_IMPORTED_MODULE_34__home_home_component__[\"a\" /* HomeComponent */],\r\n __WEBPACK_IMPORTED_MODULE_35__login_login_component__[\"a\" /* LoginComponent */],\r\n __WEBPACK_IMPORTED_MODULE_36__registration_registration_component__[\"a\" /* RegistrationComponent */],\r\n __WEBPACK_IMPORTED_MODULE_37__stats_stats_component__[\"a\" /* StatsComponent */]\r\n ],\r\n imports: [\r\n __WEBPACK_IMPORTED_MODULE_0__angular_platform_browser__[\"BrowserModule\"],\r\n __WEBPACK_IMPORTED_MODULE_2__angular_forms__[\"FormsModule\"],\r\n __WEBPACK_IMPORTED_MODULE_2__angular_forms__[\"ReactiveFormsModule\"],\r\n __WEBPACK_IMPORTED_MODULE_3__angular_http__[\"c\" /* HttpModule */],\r\n __WEBPACK_IMPORTED_MODULE_29__app_routing_module__[\"a\" /* PrinwebRoutingModule */],\r\n __WEBPACK_IMPORTED_MODULE_5_ng2_toastr_ng2_toastr__[\"ToastModule\"],\r\n __WEBPACK_IMPORTED_MODULE_6_angular2_moment__[\"MomentModule\"],\r\n __WEBPACK_IMPORTED_MODULE_7_ng2_bootstrap__[\"DropdownModule\"].forRoot(),\r\n __WEBPACK_IMPORTED_MODULE_7_ng2_bootstrap__[\"PaginationModule\"].forRoot(),\r\n __WEBPACK_IMPORTED_MODULE_7_ng2_bootstrap__[\"CollapseModule\"].forRoot(),\r\n __WEBPACK_IMPORTED_MODULE_7_ng2_bootstrap__[\"TabsModule\"].forRoot(),\r\n __WEBPACK_IMPORTED_MODULE_8_ng2_select__[\"SelectModule\"],\r\n __WEBPACK_IMPORTED_MODULE_9_ng2_charts_ng2_charts__[\"ChartsModule\"]\r\n ],\r\n providers: [\r\n __WEBPACK_IMPORTED_MODULE_11__shared_services_admin_guard_service__[\"a\" /* AdminGuardService */],\r\n __WEBPACK_IMPORTED_MODULE_12__shared_services_authentication_service__[\"a\" /* AuthenticationService */],\r\n __WEBPACK_IMPORTED_MODULE_13__shared_services_auth_guard_service__[\"a\" /* AuthGuardService */],\r\n __WEBPACK_IMPORTED_MODULE_14__shared_services_category_service__[\"a\" /* CategoryService */],\r\n __WEBPACK_IMPORTED_MODULE_15__shared_services_chart_service__[\"a\" /* ChartService */],\r\n __WEBPACK_IMPORTED_MODULE_16__shared_components_confirm_confirm_service__[\"a\" /* ConfirmService */],\r\n __WEBPACK_IMPORTED_MODULE_17__shared_services_csv_generator_service__[\"a\" /* CsvGeneratorService */],\r\n __WEBPACK_IMPORTED_MODULE_18__shared_services_document_service__[\"a\" /* DocumentService */],\r\n __WEBPACK_IMPORTED_MODULE_19__shared_services_local_storage_service__[\"a\" /* LocalStorageService */],\r\n __WEBPACK_IMPORTED_MODULE_20__shared_services_settings_service__[\"a\" /* SettingsService */],\r\n __WEBPACK_IMPORTED_MODULE_21__shared_services_stats_service__[\"a\" /* StatsService */],\r\n __WEBPACK_IMPORTED_MODULE_22__shared_services_user_service__[\"a\" /* UserService */]\r\n ],\r\n bootstrap: [__WEBPACK_IMPORTED_MODULE_4__app_component__[\"a\" /* AppComponent */]]\r\n }), \r\n __metadata('design:paramtypes', [])\r\n ], AppModule);\r\n return AppModule;\r\n}());\r\n//# sourceMappingURL=D:/Projects/Core/Crusca/prinweb/src/app.module.js.map\n\n/***/ },\n\n/***/ 626:\n/***/ function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__app_component__ = __webpack_require__(383);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__app_module__ = __webpack_require__(625);\n/* unused harmony namespace reexport */\n/* harmony namespace reexport (by used) */ __webpack_require__.d(exports, \"a\", function() { return __WEBPACK_IMPORTED_MODULE_1__app_module__[\"a\"]; });\n\r\n\r\n//# sourceMappingURL=D:/Projects/Core/Crusca/prinweb/src/index.js.map\n\n/***/ },\n\n/***/ 627:\n/***/ function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__angular_forms__ = __webpack_require__(17);\n/* harmony export (binding) */ __webpack_require__.d(exports, \"a\", function() { return AssetEditorComponent; });\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n};\r\nvar __metadata = (this && this.__metadata) || function (k, v) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\r\n};\r\n\r\n\r\nvar AssetEditorComponent = (function () {\r\n function AssetEditorComponent(formBuilder) {\r\n this.changed = new __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"EventEmitter\"]();\r\n this.changed = new __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"EventEmitter\"]();\r\n this.formats = [\r\n { value: 'cr-core', label: 'Crusca core' },\r\n { value: 'cr-cmx', label: 'Crusca fumetti' },\r\n { value: 'cr-mld', label: 'Crusca melodramma' },\r\n { value: 'pdf', label: 'Documento PDF' },\r\n { value: 'docx', label: 'Documento Word' },\r\n { value: 'jpg', label: 'Immagine JPEG' }\r\n ];\r\n // form\r\n this.title = formBuilder.control('', __WEBPACK_IMPORTED_MODULE_1__angular_forms__[\"Validators\"].required);\r\n this.description = formBuilder.control('', __WEBPACK_IMPORTED_MODULE_1__angular_forms__[\"Validators\"].required);\r\n this.format = formBuilder.control(this.formats[0].value, __WEBPACK_IMPORTED_MODULE_1__angular_forms__[\"Validators\"].required);\r\n this.assetForm = formBuilder.group({\r\n 'title': this.title,\r\n 'description': this.description,\r\n 'format': this.format\r\n });\r\n }\r\n Object.defineProperty(AssetEditorComponent.prototype, \"asset\", {\r\n get: function () {\r\n return this._asset;\r\n },\r\n set: function (value) {\r\n this._asset = value;\r\n this.loadAsset();\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n AssetEditorComponent.prototype.ngOnInit = function () {\r\n };\r\n AssetEditorComponent.prototype.loadAsset = function () {\r\n if (this._asset) {\r\n this.title.setValue(this._asset.title);\r\n this.description.setValue(this._asset.description);\r\n this.format.setValue(this._asset.format);\r\n return;\r\n }\r\n this.title.value = null;\r\n this.description.value = null;\r\n this.format.value = null;\r\n };\r\n AssetEditorComponent.prototype.saveAsset = function () {\r\n if (!this._asset) {\r\n return;\r\n }\r\n this._asset.title = this.title.value.trim();\r\n this._asset.description = this.description.value.trim();\r\n this._asset.format = this.format.value;\r\n };\r\n AssetEditorComponent.prototype.save = function () {\r\n if (!this.assetForm.valid) {\r\n return;\r\n }\r\n this.saveAsset();\r\n this.changed.emit(this._asset);\r\n };\r\n __decorate([\r\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Input\"])(), \r\n __metadata('design:type', Object), \r\n __metadata('design:paramtypes', [Object])\r\n ], AssetEditorComponent.prototype, \"asset\", null);\r\n __decorate([\r\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Output\"])(), \r\n __metadata('design:type', (typeof (_a = typeof __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"EventEmitter\"] !== 'undefined' && __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"EventEmitter\"]) === 'function' && _a) || Object)\r\n ], AssetEditorComponent.prototype, \"changed\", void 0);\r\n AssetEditorComponent = __decorate([\r\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Component\"])({\r\n selector: 'app-asset-editor',\r\n template: __webpack_require__(850),\r\n styles: [__webpack_require__(838)]\r\n }), \r\n __metadata('design:paramtypes', [(typeof (_b = typeof __WEBPACK_IMPORTED_MODULE_1__angular_forms__[\"FormBuilder\"] !== 'undefined' && __WEBPACK_IMPORTED_MODULE_1__angular_forms__[\"FormBuilder\"]) === 'function' && _b) || Object])\r\n ], AssetEditorComponent);\r\n return AssetEditorComponent;\r\n var _a, _b;\r\n}());\r\n//# sourceMappingURL=D:/Projects/Core/Crusca/prinweb/src/asset-editor.component.js.map\n\n/***/ },\n\n/***/ 628:\n/***/ function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_ng2_file_upload__ = __webpack_require__(484);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_ng2_file_upload___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_ng2_file_upload__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__services_settings_service__ = __webpack_require__(43);\n/* harmony export (binding) */ __webpack_require__.d(exports, \"a\", function() { return AssetUploaderComponent; });\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n};\r\nvar __metadata = (this && this.__metadata) || function (k, v) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\r\n};\r\n\r\n\r\n\r\n// https://github.com/valor-software/ng2-file-upload/tree/development/demo\r\nvar AssetUploaderComponent = (function () {\r\n function AssetUploaderComponent(_settings) {\r\n this._settings = _settings;\r\n this.uploaded = new __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"EventEmitter\"]();\r\n this.uploaded = new __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"EventEmitter\"]();\r\n }\r\n Object.defineProperty(AssetUploaderComponent.prototype, \"assetId\", {\r\n get: function () {\r\n return this._assetId;\r\n },\r\n set: function (value) {\r\n var _this = this;\r\n if (this._assetId === value) {\r\n return;\r\n }\r\n this._assetId = value;\r\n this.uploader = new __WEBPACK_IMPORTED_MODULE_1_ng2_file_upload__[\"FileUploader\"]({\r\n url: this._settings.apiBaseUrl + \"assets/\" + this.assetId + \"/content\"\r\n });\r\n // https://github.com/valor-software/ng2-file-upload/issues/399\r\n this.uploader.onAfterAddingFile = function (file) { file.withCredentials = false; };\r\n // TODO: find out how to include FileItem type from file-item.class in ng2-file-upload\r\n this.uploader._onCompleteItem = function (item, response, status, headers) {\r\n _this.uploaded.emit(item.file.size);\r\n };\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n AssetUploaderComponent.prototype.ngOnInit = function () {\r\n };\r\n __decorate([\r\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Input\"])(), \r\n __metadata('design:type', String), \r\n __metadata('design:paramtypes', [String])\r\n ], AssetUploaderComponent.prototype, \"assetId\", null);\r\n __decorate([\r\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Output\"])(), \r\n __metadata('design:type', (typeof (_a = typeof __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"EventEmitter\"] !== 'undefined' && __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"EventEmitter\"]) === 'function' && _a) || Object)\r\n ], AssetUploaderComponent.prototype, \"uploaded\", void 0);\r\n AssetUploaderComponent = __decorate([\r\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Component\"])({\r\n selector: 'app-asset-uploader',\r\n template: __webpack_require__(851),\r\n styles: [__webpack_require__(839)]\r\n }), \r\n __metadata('design:paramtypes', [(typeof (_b = typeof __WEBPACK_IMPORTED_MODULE_2__services_settings_service__[\"a\" /* SettingsService */] !== 'undefined' && __WEBPACK_IMPORTED_MODULE_2__services_settings_service__[\"a\" /* SettingsService */]) === 'function' && _b) || Object])\r\n ], AssetUploaderComponent);\r\n return AssetUploaderComponent;\r\n var _a, _b;\r\n}());\r\n//# sourceMappingURL=D:/Projects/Core/Crusca/prinweb/src/asset-uploader.component.js.map\n\n/***/ },\n\n/***/ 629:\n/***/ function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__confirm_service__ = __webpack_require__(163);\n/* harmony export (binding) */ __webpack_require__.d(exports, \"a\", function() { return ConfirmComponent; });\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n};\r\nvar __metadata = (this && this.__metadata) || function (k, v) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\r\n};\r\n\r\n\r\n// http://koscielniak.me/post/2016/03/angular2-confirm-dialog-component/\r\nvar KEY_ESC = 27;\r\nvar ConfirmComponent = (function () {\r\n function ConfirmComponent(confirmService) {\r\n this._defaults = {\r\n title: 'Conferma',\r\n message: 'Confermi l\\'operazione?',\r\n cancelText: 'Annulla',\r\n okText: 'OK'\r\n };\r\n // assign a function to the property activate of ConfirmService.\r\n // After this, calling activate on ConfirmService will cause the function activate\r\n // from ConfirmComponent to be executed.\r\n confirmService.activate = this.activate.bind(this);\r\n }\r\n ConfirmComponent.prototype.setLabels = function (message, title) {\r\n if (message === void 0) { message = this._defaults.message; }\r\n if (title === void 0) { title = this._defaults.title; }\r\n this.title = title;\r\n this.message = message;\r\n this.okText = this._defaults.okText;\r\n this.cancelText = this._defaults.cancelText;\r\n };\r\n ConfirmComponent.prototype.activate = function (message, title) {\r\n var _this = this;\r\n if (message === void 0) { message = this._defaults.message; }\r\n if (title === void 0) { title = this._defaults.title; }\r\n this.setLabels(message, title);\r\n var promise = new Promise(function (resolve) {\r\n _this.show(resolve);\r\n });\r\n return promise;\r\n };\r\n ConfirmComponent.prototype.show = function (resolve) {\r\n var _this = this;\r\n document.onkeyup = null;\r\n var negativeOnClick = function (e) { return resolve(false); };\r\n var positiveOnClick = function (e) { return resolve(true); };\r\n if (!this._confirmElement || !this._cancelButton || !this._okButton) {\r\n return;\r\n }\r\n this._confirmElement.style.opacity = 0;\r\n this._confirmElement.style.zIndex = 9999;\r\n this._cancelButton.onclick = (function (e) {\r\n e.preventDefault();\r\n if (!negativeOnClick(e)) {\r\n _this.hideDialog();\r\n }\r\n });\r\n this._okButton.onclick = (function (e) {\r\n e.preventDefault();\r\n if (!positiveOnClick(e)) {\r\n _this.hideDialog();\r\n }\r\n });\r\n this._confirmElement.onclick = function () {\r\n _this.hideDialog();\r\n return negativeOnClick(null);\r\n };\r\n document.onkeyup = function (e) {\r\n if (e.which === KEY_ESC) {\r\n _this.hideDialog();\r\n return negativeOnClick(null);\r\n }\r\n };\r\n this._confirmElement.style.opacity = 1;\r\n this._confirmElement.style.display = 'block';\r\n };\r\n ConfirmComponent.prototype.hideDialog = function () {\r\n var _this = this;\r\n document.onkeyup = null;\r\n this._confirmElement.style.opacity = 0;\r\n window.setTimeout(function () { return _this._confirmElement.style.zIndex = -1; }, 400);\r\n };\r\n ConfirmComponent.prototype.ngOnInit = function () {\r\n this._confirmElement = document.getElementById('confirmationModal');\r\n this._cancelButton = document.getElementById('cancelButton');\r\n this._okButton = document.getElementById('okButton');\r\n };\r\n ConfirmComponent = __decorate([\r\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Component\"])({\r\n selector: 'app-confirm',\r\n template: __webpack_require__(852),\r\n styles: [__webpack_require__(840)]\r\n }), \r\n __metadata('design:paramtypes', [(typeof (_a = typeof __WEBPACK_IMPORTED_MODULE_1__confirm_service__[\"a\" /* ConfirmService */] !== 'undefined' && __WEBPACK_IMPORTED_MODULE_1__confirm_service__[\"a\" /* ConfirmService */]) === 'function' && _a) || Object])\r\n ], ConfirmComponent);\r\n return ConfirmComponent;\r\n var _a;\r\n}());\r\n//# sourceMappingURL=D:/Projects/Core/Crusca/prinweb/src/confirm.component.js.map\n\n/***/ },\n\n/***/ 630:\n/***/ function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__angular_forms__ = __webpack_require__(17);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_ng2_toastr_ng2_toastr__ = __webpack_require__(45);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_ng2_toastr_ng2_toastr___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_ng2_toastr_ng2_toastr__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__services_category_service__ = __webpack_require__(117);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__services_user_service__ = __webpack_require__(236);\n/* harmony export (binding) */ __webpack_require__.d(exports, \"a\", function() { return DocumentFiltersComponent; });\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n};\r\nvar __metadata = (this && this.__metadata) || function (k, v) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\r\n};\r\n\r\n\r\n\r\n\r\n\r\nvar DocumentFiltersComponent = (function () {\r\n function DocumentFiltersComponent(formBuilder, _toastr, _categoryService, _userService) {\r\n this._toastr = _toastr;\r\n this._categoryService = _categoryService;\r\n this._userService = _userService;\r\n this.changed = new __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"EventEmitter\"]();\r\n this.sortTypes = [\r\n { value: 0, label: 'titolo' },\r\n { value: 1, label: 'autore' },\r\n { value: 2, label: 'anno' }\r\n ];\r\n this.categoryInverted = formBuilder.control(false);\r\n this.user = formBuilder.control(null);\r\n this.title = formBuilder.control(null);\r\n this.description = formBuilder.control(null);\r\n this.author = formBuilder.control(null);\r\n this.minYear = formBuilder.control(0);\r\n this.maxYear = formBuilder.control(0);\r\n this.sortType = formBuilder.control(this.sortTypes[0]);\r\n this.sortDescending = formBuilder.control(false);\r\n this.filters = formBuilder.group({\r\n 'categoryInverted': this.categoryInverted,\r\n 'user': this.user,\r\n 'title': this.title,\r\n 'description': this.description,\r\n 'author': this.author,\r\n 'minYear': this.minYear,\r\n 'maxYear': this.maxYear,\r\n 'sortType': this.sortType,\r\n 'sortDescending': this.sortDescending\r\n });\r\n this.resetUsers();\r\n this.changed = new __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"EventEmitter\"]();\r\n this.currentYear = new Date().getFullYear();\r\n }\r\n DocumentFiltersComponent.prototype.ngOnInit = function () {\r\n this.loadCategories();\r\n this.loadUsers();\r\n };\r\n DocumentFiltersComponent.prototype.refreshCategoriesValue = function (value) {\r\n this.categoriesValue = value;\r\n };\r\n DocumentFiltersComponent.prototype.apply = function () {\r\n if (this.busy || this.disabled) {\r\n return;\r\n }\r\n var filter = this.getFilter();\r\n this.changed.emit(filter);\r\n };\r\n // TODO: persist document filters in settings\r\n DocumentFiltersComponent.prototype.reset = function () {\r\n if (this.busy || this.disabled) {\r\n return;\r\n }\r\n this.filters.reset();\r\n this.categoriesElement.active = null;\r\n this.categoriesValue = null;\r\n // this.categoryInverted.setValue(false);\r\n // this.user.setValue(this.users.length > 0 ? this.users[0] : null);\r\n // this.title.setValue(null);\r\n // this.description.setValue(null);\r\n // this.author.setValue(null);\r\n // this.minYear.setValue(0);\r\n // this.maxYear.setValue(0);\r\n this.user.setValue(this.users.length > 0 ? this.users[0] : null);\r\n var filter = this.getFilter();\r\n this.changed.emit(filter);\r\n };\r\n DocumentFiltersComponent.prototype.getFilter = function () {\r\n var filter = {\r\n pageNumber: 1,\r\n pageSize: 20,\r\n creator: (!this.user.value || this.user.value === this.users[0] ?\r\n null :\r\n this.user.value.userName),\r\n title: this.title.value,\r\n author: this.author.value,\r\n description: this.description.value,\r\n yearMin: this.minYear.value,\r\n yearMax: this.maxYear.value,\r\n sort: this.sortType.value ? this.sortType.value.value : null,\r\n descending: this.sortDescending.value\r\n };\r\n // categories\r\n if (this.categoriesValue) {\r\n var selected = [];\r\n for (var i = 0; i < this.categoriesValue.length; i++) {\r\n selected.push(this.categoriesValue[i].id);\r\n }\r\n if (selected.length > 0) {\r\n filter.categories = selected.join(',');\r\n filter.invertCategories = this.categoryInverted.value;\r\n }\r\n }\r\n return filter;\r\n };\r\n DocumentFiltersComponent.prototype.loadCategories = function () {\r\n var _this = this;\r\n this.busy = true;\r\n this._categoryService.getCategories()\r\n .subscribe(function (data) {\r\n _this.categories = [];\r\n for (var i = 0; i < data.length; i++) {\r\n _this.categories.push({\r\n id: data[i].id,\r\n text: data[i].name\r\n });\r\n }\r\n }, function (error) {\r\n _this._toastr.error(error);\r\n _this.busy = false;\r\n }, function () {\r\n _this.busy = false;\r\n });\r\n };\r\n DocumentFiltersComponent.prototype.resetUsers = function () {\r\n this.users = [{\r\n userName: '(qualsiasi)',\r\n firstName: '',\r\n lastName: '(qualsiasi)'\r\n }];\r\n this.user.setValue(this.users[0]);\r\n };\r\n DocumentFiltersComponent.prototype.loadUsers = function () {\r\n var _this = this;\r\n this.busy = true;\r\n this._userService.getUsers()\r\n .subscribe(function (data) {\r\n _this.resetUsers();\r\n for (var i = 0; i < data.length; i++) {\r\n _this.users.push(data[i]);\r\n }\r\n }, function (error) {\r\n _this._toastr.error(error);\r\n _this.busy = false;\r\n }, function () {\r\n _this.busy = false;\r\n });\r\n };\r\n __decorate([\r\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Output\"])(), \r\n __metadata('design:type', (typeof (_a = typeof __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"EventEmitter\"] !== 'undefined' && __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"EventEmitter\"]) === 'function' && _a) || Object)\r\n ], DocumentFiltersComponent.prototype, \"changed\", void 0);\r\n __decorate([\r\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Input\"])(), \r\n __metadata('design:type', Boolean)\r\n ], DocumentFiltersComponent.prototype, \"disabled\", void 0);\r\n __decorate([\r\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Input\"])(), \r\n __metadata('design:type', Boolean)\r\n ], DocumentFiltersComponent.prototype, \"sortable\", void 0);\r\n __decorate([\r\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__angular_core__[\"ViewChild\"])('catElem'), \r\n __metadata('design:type', Object)\r\n ], DocumentFiltersComponent.prototype, \"categoriesElement\", void 0);\r\n DocumentFiltersComponent = __decorate([\r\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Component\"])({\r\n selector: 'app-document-filters',\r\n template: __webpack_require__(853),\r\n styles: [__webpack_require__(841)]\r\n }), \r\n __metadata('design:paramtypes', [(typeof (_b = typeof __WEBPACK_IMPORTED_MODULE_1__angular_forms__[\"FormBuilder\"] !== 'undefined' && __WEBPACK_IMPORTED_MODULE_1__angular_forms__[\"FormBuilder\"]) === 'function' && _b) || Object, (typeof (_c = typeof __WEBPACK_IMPORTED_MODULE_2_ng2_toastr_ng2_toastr__[\"ToastsManager\"] !== 'undefined' && __WEBPACK_IMPORTED_MODULE_2_ng2_toastr_ng2_toastr__[\"ToastsManager\"]) === 'function' && _c) || Object, (typeof (_d = typeof __WEBPACK_IMPORTED_MODULE_3__services_category_service__[\"a\" /* CategoryService */] !== 'undefined' && __WEBPACK_IMPORTED_MODULE_3__services_category_service__[\"a\" /* CategoryService */]) === 'function' && _d) || Object, (typeof (_e = typeof __WEBPACK_IMPORTED_MODULE_4__services_user_service__[\"a\" /* UserService */] !== 'undefined' && __WEBPACK_IMPORTED_MODULE_4__services_user_service__[\"a\" /* UserService */]) === 'function' && _e) || Object])\r\n ], DocumentFiltersComponent);\r\n return DocumentFiltersComponent;\r\n var _a, _b, _c, _d, _e;\r\n}());\r\n//# sourceMappingURL=D:/Projects/Core/Crusca/prinweb/src/document-filters.component.js.map\n\n/***/ },\n\n/***/ 631:\n/***/ function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(0);\n/* harmony export (binding) */ __webpack_require__.d(exports, \"a\", function() { return PasswordStrengthBarComponent; });\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n};\r\nvar __metadata = (this && this.__metadata) || function (k, v) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\r\n};\r\n\r\n// modified from http://rdn-consulting.com/blog/2016/09/28/angular-2-password-strength-bar/\r\n// https://plnkr.co/edit/z0x5gG\r\nvar PasswordStrengthBarComponent = (function () {\r\n function PasswordStrengthBarComponent() {\r\n this.strengthChanged = new __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"EventEmitter\"]();\r\n this._colors = ['#F00', '#F90', '#FF0', '#9F0', '#0F0'];\r\n }\r\n PasswordStrengthBarComponent.prototype.measureStrength = function (p) {\r\n var force = 0;\r\n var regex = /[$-/:-?{-~!\"^_`\\[\\]]/g; // \"\r\n var lowerLetters = /[a-z]+/.test(p);\r\n var upperLetters = /[A-Z]+/.test(p);\r\n var numbers = /[0-9]+/.test(p);\r\n var symbols = regex.test(p);\r\n var flags = [lowerLetters, upperLetters, numbers, symbols];\r\n var passedMatches = 0;\r\n for (var _i = 0, flags_1 = flags; _i < flags_1.length; _i++) {\r\n var _flag = flags_1[_i];\r\n passedMatches += _flag === true ? 1 : 0;\r\n }\r\n force += 2 * p.length + ((p.length >= 10) ? 1 : 0);\r\n force += passedMatches * 10;\r\n // penalty (short password)\r\n force = (p.length <= 6) ? Math.min(force, 10) : force;\r\n // penalty (poor letiety of characters)\r\n force = (passedMatches === 1) ? Math.min(force, 10) : force;\r\n force = (passedMatches === 2) ? Math.min(force, 20) : force;\r\n force = (passedMatches === 3) ? Math.min(force, 40) : force;\r\n return force;\r\n };\r\n PasswordStrengthBarComponent.prototype.getColor = function (s) {\r\n var idx = 0;\r\n if (s <= 10) {\r\n idx = 0;\r\n }\r\n else if (s <= 20) {\r\n idx = 1;\r\n }\r\n else if (s <= 30) {\r\n idx = 2;\r\n }\r\n else if (s <= 40) {\r\n idx = 3;\r\n }\r\n else {\r\n idx = 4;\r\n }\r\n return {\r\n idx: idx + 1,\r\n col: this._colors[idx]\r\n };\r\n };\r\n PasswordStrengthBarComponent.prototype.ngOnChanges = function (changes) {\r\n var password = changes['passwordToCheck'].currentValue;\r\n this.setBarColors(5, '#DDD');\r\n if (password) {\r\n var strength = this.measureStrength(password);\r\n var c = this.getColor(strength);\r\n this.setBarColors(c.idx, c.col);\r\n this.strengthChanged.emit(strength);\r\n }\r\n };\r\n PasswordStrengthBarComponent.prototype.setBarColors = function (count, col) {\r\n for (var _n = 0; _n < count; _n++) {\r\n this['bar' + _n] = col;\r\n }\r\n };\r\n __decorate([\r\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Input\"])(), \r\n __metadata('design:type', String)\r\n ], PasswordStrengthBarComponent.prototype, \"passwordToCheck\", void 0);\r\n __decorate([\r\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Output\"])(), \r\n __metadata('design:type', Object)\r\n ], PasswordStrengthBarComponent.prototype, \"strengthChanged\", void 0);\r\n PasswordStrengthBarComponent = __decorate([\r\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Component\"])({\r\n selector: 'app-password-strength-bar',\r\n template: __webpack_require__(854),\r\n styles: [__webpack_require__(842)]\r\n }), \r\n __metadata('design:paramtypes', [])\r\n ], PasswordStrengthBarComponent);\r\n return PasswordStrengthBarComponent;\r\n}());\r\n//# sourceMappingURL=D:/Projects/Core/Crusca/prinweb/src/password-strength-bar.component.js.map\n\n/***/ },\n\n/***/ 632:\n/***/ function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__tab_component__ = __webpack_require__(384);\n/* harmony export (binding) */ __webpack_require__.d(exports, \"a\", function() { return TabsComponent; });\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n};\r\nvar __metadata = (this && this.__metadata) || function (k, v) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\r\n};\r\n\r\n\r\nvar TabsComponent = (function () {\r\n function TabsComponent() {\r\n }\r\n // contentChildren are set\r\n TabsComponent.prototype.ngAfterContentInit = function () {\r\n // get all active tabs\r\n var activeTabs = this.tabs.filter(function (tab) { return tab.active; });\r\n // if there is no active tab set, activate the first\r\n if (activeTabs.length === 0) {\r\n this.selectTab(this.tabs.first);\r\n }\r\n };\r\n TabsComponent.prototype.selectTab = function (tab) {\r\n // deactivate all tabs\r\n this.tabs.toArray().forEach(function (tab) { return tab.active = false; });\r\n // activate the tab the user has clicked on.\r\n tab.active = true;\r\n };\r\n __decorate([\r\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__angular_core__[\"ContentChildren\"])(__WEBPACK_IMPORTED_MODULE_1__tab_component__[\"a\" /* TabComponent */]), \r\n __metadata('design:type', (typeof (_a = typeof __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"QueryList\"] !== 'undefined' && __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"QueryList\"]) === 'function' && _a) || Object)\r\n ], TabsComponent.prototype, \"tabs\", void 0);\r\n TabsComponent = __decorate([\r\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Component\"])({\r\n selector: 'app-tabs',\r\n template: \"\\n \\n \\n \"\r\n }), \r\n __metadata('design:paramtypes', [])\r\n ], TabsComponent);\r\n return TabsComponent;\r\n var _a;\r\n}());\r\n//# sourceMappingURL=D:/Projects/Core/Crusca/prinweb/src/tabs.component.js.map\n\n/***/ },\n\n/***/ 633:\n/***/ function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(0);\n/* harmony export (binding) */ __webpack_require__.d(exports, \"a\", function() { return FileSizePipe; });\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n};\r\nvar __metadata = (this && this.__metadata) || function (k, v) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\r\n};\r\n\r\n/*\r\n * Convert bytes into largest possible unit.\r\n * Takes an precision argument that defaults to 2.\r\n * Usage:\r\n * bytes | fileSize:precision\r\n * Example:\r\n * {{ 1024 | fileSize}}\r\n * formats to: 1 KB\r\n * https://gist.github.com/JonCatmull/ecdf9441aaa37336d9ae2c7f9cb7289a\r\n*/\r\nvar FileSizePipe = (function () {\r\n function FileSizePipe() {\r\n this._units = [\r\n 'byte',\r\n 'KB',\r\n 'MB',\r\n 'GB',\r\n 'TB',\r\n 'PB'\r\n ];\r\n }\r\n FileSizePipe.prototype.transform = function (bytes, precision) {\r\n if (bytes === void 0) { bytes = 0; }\r\n if (precision === void 0) { precision = 2; }\r\n if (!isFinite(bytes)) {\r\n return '';\r\n }\r\n var unit = 0;\r\n while (bytes >= 1024) {\r\n bytes /= 1024;\r\n unit++;\r\n }\r\n return bytes.toFixed(+precision) + ' ' + this._units[unit];\r\n };\r\n FileSizePipe = __decorate([\r\n __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Pipe\"])({\r\n name: 'fileSize'\r\n }), \r\n __metadata('design:paramtypes', [])\r\n ], FileSizePipe);\r\n return FileSizePipe;\r\n}());\r\n//# sourceMappingURL=D:/Projects/Core/Crusca/prinweb/src/file-size.pipe.js.map\n\n/***/ },\n\n/***/ 634:\n/***/ function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (binding) */ __webpack_require__.d(exports, \"a\", function() { return PasswordValidator; });\nvar PasswordValidator = (function () {\r\n function PasswordValidator() {\r\n }\r\n PasswordValidator.isValidPassword = function (control) {\r\n if (!control.value) {\r\n return null;\r\n }\r\n if (control.value.length < 8) {\r\n return {\r\n 'passwordTooShort': true\r\n };\r\n }\r\n if (!/.*[A-Z].*/.test(control.value)) {\r\n return {\r\n 'noUpperInPassword': true\r\n };\r\n }\r\n if (!/.*[a-z].*/.test(control.value)) {\r\n return {\r\n 'noLowerInPassword': true\r\n };\r\n }\r\n if (!/.*[A-Z].*/.test(control.value)) {\r\n return {\r\n 'noUpperInPassword': true\r\n };\r\n }\r\n if (!/.*[-`~!@#$%^&*()_+=\\[\\]{};:'\",.<>/?|\\\\].*/.test(control.value)) {\r\n return {\r\n 'noSymbolInPassword': true\r\n };\r\n }\r\n return null;\r\n };\r\n return PasswordValidator;\r\n}());\r\n//# sourceMappingURL=D:/Projects/Core/Crusca/prinweb/src/password.validator.js.map\n\n/***/ },\n\n/***/ 635:\n/***/ function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_core_js_es6_symbol__ = __webpack_require__(651);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_core_js_es6_symbol___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_core_js_es6_symbol__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_core_js_es6_object__ = __webpack_require__(644);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_core_js_es6_object___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_core_js_es6_object__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_core_js_es6_function__ = __webpack_require__(640);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_core_js_es6_function___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_core_js_es6_function__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_core_js_es6_parse_int__ = __webpack_require__(646);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_core_js_es6_parse_int___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3_core_js_es6_parse_int__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_core_js_es6_parse_float__ = __webpack_require__(645);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_core_js_es6_parse_float___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_4_core_js_es6_parse_float__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5_core_js_es6_number__ = __webpack_require__(643);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5_core_js_es6_number___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_5_core_js_es6_number__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6_core_js_es6_math__ = __webpack_require__(642);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6_core_js_es6_math___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_6_core_js_es6_math__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7_core_js_es6_string__ = __webpack_require__(650);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7_core_js_es6_string___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_7_core_js_es6_string__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8_core_js_es6_date__ = __webpack_require__(639);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8_core_js_es6_date___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_8_core_js_es6_date__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_9_core_js_es6_array__ = __webpack_require__(638);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_9_core_js_es6_array___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_9_core_js_es6_array__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_10_core_js_es6_regexp__ = __webpack_require__(648);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_10_core_js_es6_regexp___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_10_core_js_es6_regexp__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_11_core_js_es6_map__ = __webpack_require__(641);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_11_core_js_es6_map___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_11_core_js_es6_map__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_12_core_js_es6_set__ = __webpack_require__(649);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_12_core_js_es6_set___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_12_core_js_es6_set__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_13_core_js_es6_reflect__ = __webpack_require__(647);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_13_core_js_es6_reflect___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_13_core_js_es6_reflect__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_14_core_js_es7_reflect__ = __webpack_require__(652);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_14_core_js_es7_reflect___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_14_core_js_es7_reflect__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_15_zone_js_dist_zone__ = __webpack_require__(891);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_15_zone_js_dist_zone___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_15_zone_js_dist_zone__);\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n//# sourceMappingURL=D:/Projects/Core/Crusca/prinweb/src/polyfills.js.map\n\n/***/ },\n\n/***/ 831:\n/***/ function(module, exports) {\n\nmodule.exports = \"\"\n\n/***/ },\n\n/***/ 832:\n/***/ function(module, exports) {\n\nmodule.exports = \"\"\n\n/***/ },\n\n/***/ 833:\n/***/ function(module, exports) {\n\nmodule.exports = \"\"\n\n/***/ },\n\n/***/ 834:\n/***/ function(module, exports) {\n\nmodule.exports = \"input{\\r\\n max-width:300px;\\r\\n}\\r\\n\"\n\n/***/ },\n\n/***/ 835:\n/***/ function(module, exports) {\n\nmodule.exports = \"input{\\r\\n max-width:300px;\\r\\n}\\r\\n\"\n\n/***/ },\n\n/***/ 836:\n/***/ function(module, exports) {\n\nmodule.exports = \"\"\n\n/***/ },\n\n/***/ 837:\n/***/ function(module, exports) {\n\nmodule.exports = \"\"\n\n/***/ },\n\n/***/ 838:\n/***/ function(module, exports) {\n\nmodule.exports = \"\"\n\n/***/ },\n\n/***/ 839:\n/***/ function(module, exports) {\n\nmodule.exports = \"\"\n\n/***/ },\n\n/***/ 840:\n/***/ function(module, exports) {\n\nmodule.exports = \"\"\n\n/***/ },\n\n/***/ 841:\n/***/ function(module, exports) {\n\nmodule.exports = \"\"\n\n/***/ },\n\n/***/ 842:\n/***/ function(module, exports) {\n\nmodule.exports = \"ul#strengthBar{\\n display:inline;\\n list-style:none;\\n margin:0;\\n margin-left:15px;\\n padding:0;\\n vertical-align:2px;\\n}\\n\\nli.point:last{\\n margin:0 !important;\\n}\\nli.point{\\n background:#DDD;\\n border-radius:2px;\\n display:inline-block;\\n height:5px;\\n margin-right:1px;\\n width:20px;\\n}\\n\"\n\n/***/ },\n\n/***/ 843:\n/***/ function(module, exports) {\n\nmodule.exports = \"
\\r\\n
\\r\\n

Modifica documento

\\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n
categoria richiesta
\\r\\n
\\r\\n\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n
titolo richiesto
\\r\\n
\\r\\n\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n
autore richiesto
\\r\\n
nome non valido
\\r\\n
\\r\\n\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n
descrizione richiesta
\\r\\n
\\r\\n\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n
anno di pubblicazione richiesto
\\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
formatodim.titolomodificatocreato
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
{{a.format}}{{a.size | fileSize}}{{a.title}}{{utcToLocal(a.timeModified) | amTimeAgo}}{{utcToLocal(a.timeCreated) | amTimeAgo}}
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n
\\r\\n
\\r\\n
{{asset.id? 'Contenuto':'Nuovo contenuto'}}
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n Per caricare il contenuto occorre prima salvare il documento col suo contenuto\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n\"\n\n/***/ },\n\n/***/ 844:\n/***/ function(module, exports) {\n\nmodule.exports = \"
\\r\\n

Documenti

\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
cat.annoautorititolo
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
{{getCategoryName(doc.categoryId)}}{{doc.publicationYear}}{{doc.author}}{{doc.title}}
\\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n\"\n\n/***/ },\n\n/***/ 845:\n/***/ function(module, exports) {\n\nmodule.exports = \"
\\r\\n
\\r\\n

Prin 2012

\\r\\n

Benvenuto nella pagina riservata al sistema di archiviazione del progetto PRIN 2012 coordinato dall'Accademia della Crusca.

\\r\\n

Questa applicazione consente di visualizzare statistiche sul corpus, elencarne i documenti e modificarne o immetterne di nuovi, caricandone il contenuto.

\\r\\n

Per accedere al sito occorre possedere le credenziali fornite dall'amministratore del sistema. Se già le possiedi, accedi da qui.

\\r\\n
\\r\\n
\\r\\n\"\n\n/***/ },\n\n/***/ 846:\n/***/ function(module, exports) {\n\nmodule.exports = \"
\\r\\n
\\r\\n

Accedi

\\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n
inserire nome utente
\\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n
inserire password
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n

Attenzione: l'account utilizzato risulta registrato, ma non ancora verificato.\\r\\n Per verificarlo, controlla la tua casella di posta elettronica, dove dovresti\\r\\n trovare un messaggio inviato da questo sistema con un collegamento da seguire\\r\\n cliccandovi sopra. Una volta seguito il collegamento, la conferma sarà completa.

\\r\\n

Se non trovi questo messaggio, neppure fra la posta indesiderata (dove potrebbe\\r\\n essere finito per errore), clicca qui\\r\\n per inviarlo di nuovo.

\\r\\n
\\r\\n
\\r\\n
\\r\\n\"\n\n/***/ },\n\n/***/ 847:\n/***/ function(module, exports) {\n\nmodule.exports = \"
\\r\\n
\\r\\n

Registrazione utente

\\r\\n

Per registrare un nuovo utente occorre inserire il suo indirizzo di posta elettronica, scegliere una password, e designare un nome, anche fittizio, con cui l'utente vuole essere chiamato all'interno del sito. Questo nome deve essere unico nel sito, contenere solo lettere o cifre, iniziare per una lettera, e contare non meno di 3 caratteri e non più di 50.

\\r\\n

Per garantire un certo livello di sicurezza, la password deve contare almeno 8 caratteri e includere lettere maiuscole, lettere minuscole, cifre e comuni segni di interpunzione (trattini, punti, parentesi, etc.).

\\r\\n

Una volta registrato, sarà inviato un messaggio di posta elettronica all'indirizzo specificato per avere la conferma e concludere la procedura. L'utente dovrà controllare la sua casella di posta (verificando anche tra la posta indesiderata) e cliccare sul collegamento che troverà all'interno del messaggio per confermare la registrazione.

\\r\\n\\r\\n
\\r\\n\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n
indirizzo email richiesto
\\r\\n
indirizzo email non valido
\\r\\n
indirizzo già registrato
\\r\\n
\\r\\n attendere...\\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n
nome utente richiesto
\\r\\n
nome utente non valido
\\r\\n
nome utente già in uso: sceglierne un altro
\\r\\n
\\r\\n attendere...\\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n
nome richiesto
\\r\\n
\\r\\n\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n
cognome richiesto
\\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n
password richiesta
\\r\\n
almeno 8 caratteri (ora {{password.value?.length}})
\\r\\n
almeno 1 maiuscola
\\r\\n
almeno 1 minuscola
\\r\\n
almeno 1 interpunzione o simbolo
\\r\\n
\\r\\n\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n
password di conferma diversa
\\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n\"\n\n/***/ },\n\n/***/ 848:\n/***/ function(module, exports) {\n\nmodule.exports = \"
\\r\\n

Statistiche

\\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
tiponumero dimensioni
{{d.key}}{{d.count}}{{d.size | fileSize}}
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n\"\n\n/***/ },\n\n/***/ 849:\n/***/ function(module, exports) {\n\nmodule.exports = \"\\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n\\r\\n\"\n\n/***/ },\n\n/***/ 850:\n/***/ function(module, exports) {\n\nmodule.exports = \"
\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n
formato richiesto
\\r\\n
\\r\\n\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n
titolo richiesto
\\r\\n
\\r\\n\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n
descrizione richiesta
\\r\\n
\\r\\n\\r\\n \\r\\n
\\r\\n\"\n\n/***/ },\n\n/***/ 851:\n/***/ function(module, exports) {\n\nmodule.exports = \"
\\r\\n
\\r\\n

Seleziona file

\\r\\n
\\r\\n trascinare qui\\r\\n
\\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n

Coda

\\r\\n

Lunghezza: {{ uploader?.queue?.length }}

\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
nomedim.avanzamentostatoazioni
{{ item?.file?.name }}{{ item?.file?.size/1024/1024 | number:'.2' }} MB\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n Avanzamento coda:\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n\"\n\n/***/ },\n\n/***/ 852:\n/***/ function(module, exports) {\n\nmodule.exports = \"
\\r\\n
\\r\\n
\\r\\n
\\r\\n

{{title}}

\\r\\n
\\r\\n
\\r\\n

{{message}}

\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n\"\n\n/***/ },\n\n/***/ 853:\n/***/ function(module, exports) {\n\nmodule.exports = \"
\\r\\n\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n\"\n\n/***/ },\n\n/***/ 854:\n/***/ function(module, exports) {\n\nmodule.exports = \"
\\r\\n robustezza:\\r\\n \\r\\n
\\r\\n\"\n\n/***/ },\n\n/***/ 892:\n/***/ function(module, exports) {\n\nfunction webpackEmptyContext(req) {\n\tthrow new Error(\"Cannot find module '\" + req + \"'.\");\n}\nwebpackEmptyContext.keys = function() { return []; };\nwebpackEmptyContext.resolve = webpackEmptyContext;\nmodule.exports = webpackEmptyContext;\nwebpackEmptyContext.id = 892;\n\n\n/***/ },\n\n/***/ 893:\n/***/ function(module, exports, __webpack_require__) {\n\nmodule.exports = __webpack_require__(505);\n\n\n/***/ }\n\n},[893]);\n\n\n// WEBPACK FOOTER //\n// main.796873dc35ac9641d2cd.bundle.js","import { Injectable } from '@angular/core';\r\nimport { Http, Response } from '@angular/http';\r\nimport { Observable } from 'rxjs/Observable';\r\nimport 'rxjs/add/operator/catch';\r\n\r\nimport { SettingsService } from './settings.service';\r\nimport { AuthenticationService } from './authentication.service';\r\n\r\nexport interface ICategory {\r\n id: string;\r\n name: string;\r\n}\r\n\r\n@Injectable()\r\nexport class CategoryService {\r\n\r\n constructor(\r\n private _http: Http,\r\n private _settings: SettingsService,\r\n private _authService: AuthenticationService) { }\r\n\r\n public getCategories(): Observable {\r\n let url = this._settings.apiBaseUrl + 'categories';\r\n\r\n let options = {\r\n headers: this._authService.createAuthHeaders({\r\n 'Content-Type': 'application/json'\r\n })\r\n };\r\n return this._http.get(url, options).map((res: Response) => res.json())\r\n .catch((error: any) => Observable.throw(error.json().error || this._settings.serverErrorMessage));\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/app/shared/services/category.service.ts","import {Injectable} from '@angular/core';\r\n\r\n// the confirmation dialog is used through this service\r\n@Injectable()\r\nexport class ConfirmService {\r\n public activate: (message?: string, title?: string) => Promise;\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/app/shared/components/confirm/confirm.service.ts","import { Injectable } from '@angular/core';\n\n@Injectable()\nexport class LocalStorageService {\n /**\n * Retrieve the object with the specified key from the specified storage.\n * @param {string} key: key.\n * @param {boolean} session: true to use session instead of local storage.\n */\n public retrieve(key: string, session = false): any {\n let json = (session ?\n sessionStorage.getItem(key) :\n localStorage.getItem(key));\n\n if (!json) {\n return null;\n }\n return JSON.parse(json);\n }\n\n /**\n * Store the specified object with the specified key in the specified storage.\n * @param {string} key: key.\n * @param {any} value: object.\n * @param {boolean} session: true to use session instead of local storage.\n */\n public store(key: string, value: any, session = false) {\n if (session) {\n sessionStorage.setItem(key, JSON.stringify(value));\n } else {\n localStorage.setItem(key, JSON.stringify(value));\n }\n }\n\n /**\n * Remove the object with the specified key from the specified storage.\n * @param {string} key: key.\n * @param {boolean} session: true to use session instead of local storage.\n */\n public remove(key: string, session = false) {\n if (session) {\n sessionStorage.removeItem(key);\n } else {\n localStorage.removeItem(key);\n }\n }\n\n /**\n * Remove all the entries whose key starts with the specified prefix.\n * @param {string} prefix key prefix.\n */\n public clear(prefix: string, session = false) {\n if (session) {\n for (let i = 0, len = sessionStorage.length; i < len; i++) {\n let key = sessionStorage.key(i);\n if (key.startsWith(prefix)) {\n sessionStorage.removeItem(key);\n }\n }\n } else {\n for (let i = 0, len = localStorage.length; i < len; i++) {\n let key = localStorage.key(i);\n if (key.startsWith(prefix)) {\n localStorage.removeItem(key);\n }\n }\n }\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/app/shared/services/local-storage.service.ts","import { Injectable } from '@angular/core';\r\nimport { Http, Response } from '@angular/http';\r\nimport { Observable } from 'rxjs/Observable';\r\nimport 'rxjs/add/operator/catch';\r\nimport { environment } from '../../../environments/environment';\r\n\r\nimport { IPagedData } from '../models/common';\r\nimport { SettingsService } from './settings.service';\r\nimport { AuthenticationService } from './authentication.service';\r\n\r\nexport interface IDocumentFilterModel {\r\n pageNumber: number;\r\n pageSize: number;\r\n creator?: string;\r\n categories?: string;\r\n invertCategories?: boolean;\r\n title?: string;\r\n author?: string;\r\n description?: string;\r\n yearMin?: number;\r\n yearMax?: number;\r\n sort: number;\r\n descending?: boolean;\r\n}\r\n\r\nexport interface IAsset {\r\n id: string;\r\n documentId: string;\r\n creatorId: string;\r\n title: string;\r\n description: string;\r\n format: string;\r\n size: number;\r\n timeCreated: Date;\r\n timeModified: Date;\r\n}\r\n\r\nexport interface IDocument {\r\n id: string;\r\n creatorId: string;\r\n categoryId: string;\r\n title: string;\r\n author: string;\r\n description: string;\r\n publicationYear: number;\r\n timeCreated: Date;\r\n timeModified: Date;\r\n assets?: IAsset[];\r\n}\r\n\r\nexport interface IAssetModel {\r\n id: string;\r\n title: string;\r\n description: string;\r\n format: string;\r\n size: number;\r\n}\r\n\r\nexport interface IDocumentModel {\r\n id: string;\r\n categoryId: string;\r\n title: string;\r\n author: string;\r\n description: string;\r\n publicationYear: number;\r\n assets?: IAssetModel[];\r\n}\r\n\r\n@Injectable()\r\nexport class DocumentService {\r\n\r\n constructor(private _http: Http,\r\n private _settings: SettingsService,\r\n private _authService: AuthenticationService) { }\r\n\r\n public getDocuments(filter: IDocumentFilterModel): Observable> {\r\n let sb = [];\r\n sb.push(this._settings.apiBaseUrl + 'documents?');\r\n\r\n this.appendQueryParam('pageNumber', filter.pageNumber.toString(), sb);\r\n this.appendQueryParam('pageSize', filter.pageSize.toString(), sb);\r\n\r\n if (filter.creator) {\r\n this.appendQueryParam('creator', filter.creator, sb);\r\n }\r\n if (filter.categories) {\r\n this.appendQueryParam('categories', filter.categories, sb);\r\n }\r\n if (filter.invertCategories) {\r\n this.appendQueryParam('invertCategories', filter.invertCategories ? 'true' : 'false', sb);\r\n }\r\n if (filter.title) {\r\n this.appendQueryParam('title', filter.title, sb);\r\n }\r\n if (filter.author) {\r\n this.appendQueryParam('author', filter.author, sb);\r\n }\r\n if (filter.description) {\r\n this.appendQueryParam('description', filter.description, sb);\r\n }\r\n if (filter.yearMin > 0) {\r\n this.appendQueryParam('yearMin', filter.yearMin.toString(), sb);\r\n }\r\n if (filter.yearMax > 0) {\r\n this.appendQueryParam('yearMax', filter.yearMax.toString(), sb);\r\n }\r\n if (filter.sort) {\r\n this.appendQueryParam('sort', filter.sort.toString(), sb);\r\n }\r\n if (filter.descending) {\r\n this.appendQueryParam('descending', filter.descending ? 'true' : 'false', sb);\r\n }\r\n\r\n let options = {\r\n headers: this._authService.createAuthHeaders({\r\n 'Content-Type': 'application/json'\r\n })\r\n };\r\n return this._http.get(sb.join(''), options)\r\n .map((res: Response) => res.json())\r\n .catch((error: any) => Observable.throw(error.json().error || this._settings.serverErrorMessage));\r\n }\r\n\r\n public getDocument(id: string): Observable {\r\n let url = this._settings.apiBaseUrl + `documents/${id}`;\r\n let options = {\r\n headers: this._authService.createAuthHeaders({\r\n 'Content-Type': 'application/json'\r\n })\r\n };\r\n\r\n return this._http.get(url, options)\r\n .map((res: Response) => res.json())\r\n .catch((error: any) => Observable.throw(error.json().error || this._settings.serverErrorMessage));\r\n }\r\n\r\n public addDocument(document: IDocumentModel): Observable {\r\n let options = {\r\n headers: this._authService.createAuthHeaders({\r\n 'Content-Type': 'application/json'\r\n })\r\n };\r\n return this._http.post(this._settings.apiBaseUrl + 'documents',\r\n document,\r\n options);\r\n }\r\n\r\n public deleteDocument(id: string): Observable {\r\n let options = {\r\n headers: this._authService.createAuthHeaders({\r\n 'Content-Type': 'application/json'\r\n })\r\n };\r\n return this._http.delete(this._settings.apiBaseUrl + `documents/${id}`, options);\r\n }\r\n\r\n private appendQueryParam(name: string, value: string, sb: string[]) {\r\n let i = sb.length - 1;\r\n if (i > -1 && sb[i].length > 0 && sb[i].charAt(sb[i].length - 1) !== '?') {\r\n sb.push('&');\r\n }\r\n sb.push(encodeURIComponent(name) + '=' +\r\n encodeURIComponent(value));\r\n }\r\n\r\n public getAssetUri(id: string, format: string): string {\r\n if (environment.production) {\r\n return `http://${this._settings.azureAccountId}.blob.core.windows.net/${this._settings.azureContainerName}/${id}.${format}`;\r\n } else {\r\n return `http://127.0.0.1:10000/devstoreaccount1/${this._settings.azureContainerName}/${id}.${format}`;\r\n }\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/app/shared/services/document.service.ts","import { Injectable } from '@angular/core';\r\nimport { Http, Response } from '@angular/http';\r\nimport { Observable } from 'rxjs/Observable';\r\nimport 'rxjs/add/operator/catch';\r\n\r\nimport { SettingsService } from './settings.service';\r\nimport { AuthenticationService } from './authentication.service';\r\n\r\nexport interface IUserInfo {\r\n userName: string;\r\n firstName: string;\r\n lastName: string;\r\n}\r\n\r\n@Injectable()\r\nexport class UserService {\r\n\r\n constructor(\r\n private _http: Http,\r\n private _settings: SettingsService,\r\n private _authService: AuthenticationService) { }\r\n\r\n public getUsers(): Observable {\r\n let url = this._settings.apiBaseUrl + 'users';\r\n let options = {\r\n headers: this._authService.createAuthHeaders({\r\n 'Content-Type': 'application/json'\r\n })\r\n };\r\n\r\n return this._http.get(url, options)\r\n .map((res: Response) => res.json())\r\n .catch((error: any) => Observable.throw(error.json().error || this._settings.serverErrorMessage));\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/app/shared/services/user.service.ts","export const environment = {\n production: true\n};\n\n\n\n// WEBPACK FOOTER //\n// ./src/environments/environment.prod.ts","import { Component, OnInit } from '@angular/core';\r\nimport { FormBuilder, FormGroup, FormControl, Validators } from '@angular/forms';\r\nimport { Router, ActivatedRoute } from '@angular/router';\r\n\r\nimport { ToastsManager } from 'ng2-toastr/ng2-toastr';\r\n\r\nimport { CategoryService, ICategory } from '../shared/services/category.service';\r\nimport { LocalStorageService } from '../shared/services/local-storage.service';\r\nimport { SettingsService } from '../shared/services/settings.service';\r\nimport { DocumentService, IDocument, IDocumentModel, IAsset, IAssetModel } from '../shared/services/document.service';\r\nimport { ConfirmService } from '../shared/components/confirm/confirm.service';\r\n\r\n@Component({\r\n selector: 'app-document-editor',\r\n templateUrl: './document-editor.component.html',\r\n styleUrls: ['./document-editor.component.css']\r\n})\r\nexport class DocumentEditorComponent implements OnInit {\r\n public busy: boolean;\r\n public currentYear: number;\r\n\r\n public document: FormGroup;\r\n public category: FormControl;\r\n public title: FormControl;\r\n public author: FormControl;\r\n public description: FormControl;\r\n public year: FormControl;\r\n public categories: ICategory[];\r\n public assets: IAsset[];\r\n public asset: IAsset;\r\n\r\n private _documentId: string;\r\n private _sub: any;\r\n private _nextId;\r\n\r\n constructor(formBuilder: FormBuilder,\r\n private _router: Router,\r\n private _route: ActivatedRoute,\r\n private _toastr: ToastsManager,\r\n private _confirmService: ConfirmService,\r\n private _categoryService: CategoryService,\r\n private _documentService: DocumentService,\r\n private _settingsService: SettingsService,\r\n private _localStorageService: LocalStorageService) {\r\n\r\n this._nextId = 0;\r\n this.assets = [];\r\n this.currentYear = new Date().getFullYear();\r\n this.category = formBuilder.control(null, Validators.required);\r\n this.title = formBuilder.control(null, Validators.required);\r\n this.author = formBuilder.control(null, Validators.required);\r\n this.description = formBuilder.control(null, Validators.required);\r\n this.year = formBuilder.control(0, Validators.required);\r\n\r\n this.document = formBuilder.group({\r\n 'category': this.category,\r\n 'title': this.title,\r\n 'author': this.author,\r\n 'description': this.description,\r\n 'year': this.year\r\n });\r\n }\r\n\r\n ngOnInit() {\r\n // load categories from cache or server\r\n this.categories = this._localStorageService.retrieve(\r\n this._settingsService.storagePrefix + 'categories', true);\r\n\r\n if (!this.categories) {\r\n this.busy = true;\r\n this._categoryService.getCategories()\r\n .subscribe(\r\n (data: ICategory[]) => {\r\n this.categories = data;\r\n // cache categories for session\r\n this._localStorageService.store(\r\n this._settingsService.storagePrefix + 'categories', data, true);\r\n },\r\n error => {\r\n this._toastr.error(error);\r\n this.busy = false;\r\n },\r\n () => {\r\n this.busy = false;\r\n this.initDocument();\r\n }\r\n );\r\n } else {\r\n this.initDocument();\r\n }\r\n }\r\n\r\n public cancel() {\r\n this._router.navigate(['/documenti']);\r\n }\r\n\r\n public save() {\r\n if (!this.document.valid) {\r\n return;\r\n }\r\n this.busy = true;\r\n let d: IDocumentModel = {\r\n id: this._documentId,\r\n categoryId: this.category.value.id,\r\n title: this.title.value,\r\n author: this.author.value,\r\n description: this.description.value,\r\n publicationYear: this.year.value\r\n };\r\n this.addAssetsToDocument(d);\r\n this._documentService.addDocument(d)\r\n .subscribe(\r\n () => {\r\n this._toastr.success('Documento salvato');\r\n this._router.navigate(['/documenti']);\r\n },\r\n error => {\r\n this._toastr.error(error);\r\n this.busy = false;\r\n },\r\n () => {\r\n this.busy = false;\r\n }\r\n );\r\n }\r\n\r\n public getAssetUri(id: string, format: string): string {\r\n return this._documentService.getAssetUri(id, format);\r\n }\r\n\r\n private addAssetsToDocument(document: IDocumentModel) {\r\n if (this.assets.length === 0) {\r\n return;\r\n }\r\n\r\n document.assets = [];\r\n for (let i = 0; i < this.assets.length; i++) {\r\n let asset = this.assets[i];\r\n let model: IAssetModel = {\r\n id: asset.id.charAt(0) === '#' ? null : asset.id,\r\n format: asset.format,\r\n title: asset.title,\r\n description: asset.description,\r\n size: asset.size\r\n };\r\n document.assets.push(model);\r\n }\r\n }\r\n\r\n public addAsset() {\r\n if (this.busy) {\r\n return;\r\n }\r\n let now = new Date();\r\n let utc = new Date(now.getUTCFullYear(), now.getUTCMonth(), now.getUTCDate(),\r\n now.getUTCHours(), now.getUTCMinutes(), now.getUTCSeconds());\r\n\r\n this.asset = {\r\n id: null,\r\n documentId: this._documentId,\r\n creatorId: null,\r\n format: 'cr-core',\r\n size: 0,\r\n title: this.title.value,\r\n description: this.description.value,\r\n timeCreated: utc,\r\n timeModified: utc\r\n };\r\n }\r\n\r\n public editAsset(asset: IAsset) {\r\n if (this.busy) {\r\n return;\r\n }\r\n this.asset = asset;\r\n }\r\n\r\n public deleteAsset(asset: IAsset) {\r\n if (this.busy) {\r\n return;\r\n }\r\n this._confirmService.activate('Cancellare il contenuto?')\r\n .then(result => {\r\n if (!result) {\r\n return;\r\n }\r\n let i = this.assets.indexOf(asset);\r\n if (i > -1) {\r\n this.assets.splice(i, 1);\r\n }\r\n }).catch(error => {\r\n console.log(error);\r\n });\r\n }\r\n\r\n public onAssetChanged(asset: IAsset) {\r\n // if the asset changed was new, add it\r\n if (!asset.id) {\r\n // assign a temporary ID = #N\r\n this._nextId++;\r\n asset.id = `#${this._nextId}`;\r\n this.assets.push(asset);\r\n }\r\n this.asset = null;\r\n }\r\n\r\n public onAssetUploaded(size: number) {\r\n if (this.asset) {\r\n this.asset.size = size;\r\n }\r\n }\r\n\r\n public utcToLocal(date: Date): Date {\r\n // http://stackoverflow.com/questions/13622142/javascript-to-convert-utc-to-local-time\r\n // http://stackoverflow.com/questions/1090815/how-to-clone-a-date-object-in-javascript\r\n let offset = new Date().getTimezoneOffset();\r\n if (!date.getTime) {\r\n date = new Date(date);\r\n }\r\n let local = new Date(date.getTime());\r\n local.setMinutes(local.getMinutes() - offset);\r\n return local;\r\n }\r\n\r\n private findCategory(id: string) {\r\n if (!this.categories) {\r\n return null;\r\n }\r\n for (let i = 0; i < this.categories.length; i++) {\r\n if (this.categories[i].id === id) {\r\n return this.categories[i];\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n private initDocument() {\r\n // an existing id parameter means we're editing an existing document;\r\n // otherwise, we're editing a new document.\r\n this._sub = this._route.params.subscribe(params => {\r\n this._documentId = params['id'];\r\n if (this._documentId) {\r\n this.loadDocument(this._documentId);\r\n }\r\n });\r\n }\r\n\r\n private loadDocument(id: string) {\r\n this.busy = true;\r\n this._documentService.getDocument(id)\r\n .subscribe(\r\n (doc: IDocument) => {\r\n this._documentId = doc.id;\r\n this.category.setValue(this.findCategory(doc.categoryId));\r\n this.title.setValue(doc.title);\r\n this.author.setValue(doc.author);\r\n this.description.setValue(doc.description);\r\n this.year.setValue(doc.publicationYear);\r\n this.assets = doc.assets || [];\r\n },\r\n error => {\r\n this._toastr.error(error);\r\n this.busy = false;\r\n },\r\n () => {\r\n this.busy = false;\r\n }\r\n );\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/app/+document-editor/document-editor.component.ts","import { Component, OnInit } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\n\r\nimport { ToastsManager } from 'ng2-toastr/ng2-toastr';\r\n\r\nimport { IPagedData } from '../shared/models/common';\r\nimport { SettingsService } from '../shared/services/settings.service';\r\nimport { CategoryService, ICategory } from '../shared/services/category.service';\r\nimport { DocumentService, IDocumentFilterModel, IDocument } from '../shared/services/document.service';\r\nimport { ConfirmService } from '../shared/components/confirm/confirm.service';\r\nimport { LocalStorageService } from '../shared/services/local-storage.service';\r\n\r\n@Component({\r\n selector: 'app-document-list',\r\n templateUrl: './document-list.component.html',\r\n styleUrls: ['./document-list.component.css']\r\n})\r\nexport class DocumentListComponent implements OnInit {\r\n public pageNumber: number;\r\n public pageSize: number;\r\n public page: IPagedData;\r\n public busy: boolean;\r\n\r\n private _filter: IDocumentFilterModel;\r\n private _categories: ICategory[];\r\n\r\n constructor(\r\n private _router: Router,\r\n private _toastr: ToastsManager,\r\n private _settings: SettingsService,\r\n private _documentService: DocumentService,\r\n private _confirmService: ConfirmService,\r\n private _categoryService: CategoryService,\r\n private _localStorageService: LocalStorageService) {\r\n\r\n this.pageSize = this._settings.pageSize;\r\n this.page = {\r\n items: [],\r\n total: 0\r\n };\r\n }\r\n\r\n ngOnInit() {\r\n this.loadCategories();\r\n this.pageNumber = 1;\r\n this.refresh();\r\n }\r\n\r\n public refresh() {\r\n if (this.busy) {\r\n return;\r\n }\r\n\r\n this.busy = true;\r\n\r\n if (this._filter) {\r\n this._filter.pageNumber = this.pageNumber;\r\n this._filter.pageSize = this.pageSize;\r\n }\r\n\r\n this._documentService.getDocuments(this._filter || {\r\n pageNumber: this.pageNumber,\r\n pageSize: this.pageSize,\r\n sort: 0,\r\n descending: false\r\n })\r\n .subscribe(\r\n (data: IPagedData) => {\r\n this.page = data;\r\n },\r\n error => {\r\n this._toastr.error(error);\r\n this.busy = false;\r\n },\r\n () => {\r\n this.busy = false;\r\n }\r\n );\r\n }\r\n\r\n public filtersChanged(filter: IDocumentFilterModel) {\r\n this._filter = filter;\r\n this.pageNumber = 1;\r\n this.refresh();\r\n }\r\n\r\n // pager: http://valor-software.com/ng2-bootstrap/#/pagination\r\n public pageChanged(event: any) {\r\n this.pageNumber = event.page;\r\n this.refresh();\r\n }\r\n\r\n public addDocument() {\r\n this._router.navigate(['/documento', '']);\r\n }\r\n\r\n public editDocument(id: string) {\r\n this._router.navigate(['/documento', id]);\r\n }\r\n\r\n public deleteDocument(id: string) {\r\n if (this.busy) {\r\n return;\r\n }\r\n this._confirmService.activate('Cancellare il documento?')\r\n .then(result => {\r\n if (!result) {\r\n return;\r\n }\r\n this.busy = true;\r\n this._documentService.deleteDocument(id)\r\n .subscribe(\r\n () => {\r\n this.refresh();\r\n },\r\n error => {\r\n this._toastr.error(error);\r\n this.busy = false;\r\n },\r\n () => {\r\n this.busy = false;\r\n }\r\n );\r\n }).catch(error => {\r\n console.log(error);\r\n });\r\n }\r\n\r\n public getCategoryName(id: string): string {\r\n if (!this._categories) {\r\n return id;\r\n }\r\n for (let i = 0; i < this._categories.length; i++) {\r\n if (this._categories[i].id === id) {\r\n return this._categories[i].name;\r\n }\r\n }\r\n return id;\r\n }\r\n\r\n private loadCategories() {\r\n this._categories = this._localStorageService.retrieve(\r\n this._settings.storagePrefix + 'categories', true);\r\n\r\n if (!this._categories) {\r\n this._categoryService.getCategories()\r\n .subscribe(\r\n (data: ICategory[]) => {\r\n this._categories = data;\r\n // cache categories for session\r\n this._localStorageService.store(\r\n this._settings.storagePrefix + 'categories', data, true);\r\n },\r\n error => {\r\n this._toastr.error(error);\r\n this.busy = false;\r\n });\r\n }\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/app/+document-list/document-list.component.ts","import { Component, OnInit } from '@angular/core';\n\n@Component({\n selector: 'app-home',\n templateUrl: './home.component.html',\n styleUrls: ['./home.component.css']\n})\nexport class HomeComponent implements OnInit {\n\n constructor() { }\n\n ngOnInit() {\n }\n\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/app/+home/home.component.ts","import { Component, OnInit } from '@angular/core';\r\nimport { FormBuilder, FormGroup, FormControl, Validators } from '@angular/forms';\r\nimport { Router } from '@angular/router';\r\n\r\nimport { ToastsManager } from 'ng2-toastr/ng2-toastr';\r\n\r\nimport { IUser } from '../shared/models/common';\r\nimport { AuthenticationService } from '../shared/services/authentication.service';\r\n\r\n@Component({\r\n selector: 'app-login',\r\n templateUrl: './login.component.html',\r\n styleUrls: ['./login.component.css']\r\n})\r\nexport class LoginComponent implements OnInit {\r\n // form\r\n public loginForm: FormGroup;\r\n public name: FormControl;\r\n public password: FormControl;\r\n public user: IUser;\r\n\r\n constructor(private _router: Router,\r\n private _formBuilder: FormBuilder,\r\n private _authService: AuthenticationService,\r\n private _toastr: ToastsManager) {\r\n\r\n // build the form\r\n this.name = this._formBuilder.control('', Validators.required);\r\n this.password = this._formBuilder.control('', Validators.required);\r\n this.loginForm = this._formBuilder.group({\r\n 'name': this.name,\r\n 'password': this.password\r\n });\r\n\r\n this._authService.userChanged.subscribe((user: IUser) => {\r\n this.user = user;\r\n if (user) {\r\n if (user.verified) {\r\n this._router.navigate(['/documenti']);\r\n }\r\n }\r\n });\r\n }\r\n\r\n ngOnInit() {\r\n if (!this._authService.isAuthenticated(false)) {\r\n this.user = null;\r\n } else {\r\n this.user = this._authService.getCurrentUser();\r\n }\r\n }\r\n\r\n public resendConfirmEmail() {\r\n if (!this.user) {\r\n return;\r\n }\r\n this._authService.resendConfirmEmail(this.user.email)\r\n .subscribe(() => {\r\n this._toastr.success(`Messaggio inviato all\\'indirizzo ${this.user.email}`);\r\n },\r\n (err => {\r\n this._toastr.error(err);\r\n }));\r\n }\r\n\r\n public login(group: FormGroup) {\r\n if (!this.loginForm.valid) {\r\n return;\r\n }\r\n\r\n this._authService.login(this.name.value, this.password.value);\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/app/+login/login.component.ts","import { Component } from '@angular/core';\r\nimport { FormBuilder, FormGroup, FormControl, Validators } from '@angular/forms';\r\nimport { Router } from '@angular/router';\r\n\r\nimport { ToastsManager } from 'ng2-toastr/ng2-toastr';\r\n\r\nimport { IValidationResult } from '../shared/models/common';\r\nimport { AuthenticationService, IRegistrationModel, IExistResult } from '../shared/services/authentication.service';\r\nimport { PasswordValidator } from '../shared/validators/password.validator';\r\n\r\n// http://stackoverflow.com/questions/35521583/how-to-implement-async-validator-in-angular2\r\n// https://medium.com/@daviddentoom/angular-2-form-validation-9b26f73fcb81#.dxtmayu5m\r\n// http://restlet.com/blog/2016/02/17/implementing-angular2-forms-beyond-basics-part-2/\r\n// http://stackoverflow.com/questions/35247120/inject-a-service-in-a-custom-validator-in-angular2\r\n// http://stackoverflow.com/questions/35505520/access-a-service-from-a-custom-validator-in-angular2\r\n\r\n@Component({\r\n selector: 'app-registration',\r\n templateUrl: './registration.component.html',\r\n styleUrls: ['./registration.component.css']\r\n})\r\nexport class RegistrationComponent {\r\n public isBusy: boolean;\r\n // form\r\n public registration: FormGroup;\r\n public email: FormControl;\r\n public name: FormControl;\r\n public firstName: FormControl;\r\n public lastName: FormControl;\r\n public passwords: FormGroup;\r\n public password: FormControl;\r\n public confirmPassword: FormControl;\r\n\r\n constructor(formBuilder: FormBuilder,\r\n private _router: Router,\r\n private _toastr: ToastsManager,\r\n private _userService: AuthenticationService) {\r\n\r\n this.email = formBuilder.control('',\r\n Validators.required, this.createUniqueEmailValidator(this._userService).bind(this));\r\n\r\n this.name = formBuilder.control('',\r\n Validators.required, this.createUniqueNameValidator(this._userService).bind(this));\r\n\r\n this.firstName = formBuilder.control('', [Validators.required, Validators.maxLength(50)]);\r\n this.lastName = formBuilder.control('', [Validators.required, Validators.maxLength(50)]);\r\n\r\n // http://stackoverflow.com/questions/35474991/angular-2-form-validating-for-repeat-password\r\n this.password = formBuilder.control('',\r\n Validators.compose([Validators.required, PasswordValidator.isValidPassword]));\r\n this.confirmPassword = formBuilder.control('', Validators.required);\r\n this.passwords = formBuilder.group({\r\n password: this.password,\r\n confirmPassword: this.confirmPassword\r\n }, { validator: this.areEqual.bind(this) });\r\n\r\n this.registration = formBuilder.group({\r\n 'email': this.email,\r\n 'name': this.name,\r\n 'firstName': this.firstName,\r\n 'lastName': this.lastName,\r\n 'passwords': this.passwords\r\n });\r\n }\r\n\r\n private areEqual(group: FormGroup): IValidationResult {\r\n if (this.password.value === this.confirmPassword.value) {\r\n return null;\r\n }\r\n return {\r\n areEqual: true\r\n };\r\n }\r\n\r\n /**\r\n * Creates a unique name validator. There is no dependency injection at this level,\r\n * but we can use closures. As a matter of fact, we have access to the service instance\r\n * from the component where we register validators. So we will implement a function\r\n * that will accept the service as parameter, and create the actual validation function.\r\n * This function will have access to the service when called during the validation process.\r\n * See http://restlet.com/blog/2016/02/17/implementing-angular2-forms-beyond-basics-part-2/.\r\n */\r\n private createUniqueNameValidator(service: AuthenticationService) {\r\n return function (control) {\r\n return new Promise((resolve, reject) => {\r\n // avoid checking if empty\r\n if (!control.value) {\r\n resolve(null);\r\n } else {\r\n service.isNameRegistered(control.value)\r\n .map(res => res.json())\r\n .subscribe(\r\n (data: IExistResult) => {\r\n if (!data.isExisting) {\r\n resolve(null);\r\n } else {\r\n resolve({ uniqueName: true });\r\n }\r\n },\r\n err => {\r\n resolve({ uniqueName: true });\r\n }\r\n );\r\n }\r\n });\r\n };\r\n }\r\n\r\n private createUniqueEmailValidator(service: AuthenticationService) {\r\n return function (control) {\r\n return new Promise((resolve, reject) => {\r\n // avoid checking if empty\r\n if (!control.value) {\r\n resolve(null);\r\n } else {\r\n service.isEmailRegistered(control.value)\r\n .map(res => res.json())\r\n .subscribe(\r\n (data: IExistResult) => {\r\n if (!data.isExisting) {\r\n resolve(null);\r\n } else {\r\n resolve({ uniqueEmail: true });\r\n }\r\n },\r\n err => {\r\n resolve({ uniqueEmail: true });\r\n }\r\n );\r\n }\r\n });\r\n };\r\n }\r\n\r\n public onSubmit() {\r\n if (!this.registration.valid || this.isBusy || this.name.pending || this.email.pending) {\r\n return;\r\n }\r\n\r\n let model: IRegistrationModel = {\r\n email: this.email.value,\r\n name: this.name.value,\r\n firstName: this.firstName.value,\r\n lastName: this.lastName.value,\r\n password: this.password.value\r\n };\r\n\r\n this._userService.register(model)\r\n .subscribe(\r\n () => {\r\n this._toastr.success('Registrazione effettuata con successo');\r\n this.registration.reset();\r\n },\r\n err => {\r\n this._toastr.error(err || 'Errore nella registrazione');\r\n });\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/app/+registration/registration.component.ts","import { Component, OnInit } from '@angular/core';\r\nimport { FormBuilder, FormGroup, FormControl, Validators } from '@angular/forms';\r\n\r\nimport { ToastsManager } from 'ng2-toastr/ng2-toastr';\r\n\r\nimport { IPair } from '../shared/models/common';\r\nimport { CategoryService, ICategory } from '../shared/services/category.service';\r\nimport { UserService, IUserInfo } from '../shared/services/user.service';\r\nimport { IDocumentFilterModel } from '../shared/services/document.service';\r\nimport { StatsService, IStatsModel, IStatsResult } from '../shared/services/stats.service';\r\nimport { ChartService, IChartData } from '../shared/services/chart.service';\r\nimport { CsvGeneratorService } from '../shared/services/csv-generator.service';\r\n\r\n// ng2 chart plunker: https://plnkr.co/edit/MWE0umGfN3nZM6zLPPVI?p=preview\r\n\r\n@Component({\r\n selector: 'app-stats',\r\n templateUrl: './stats.component.html',\r\n styleUrls: ['./stats.component.css']\r\n})\r\nexport class StatsComponent implements OnInit {\r\n public stats: FormGroup;\r\n public key: FormControl;\r\n public step: FormControl;\r\n\r\n public busy: boolean;\r\n public keys: IPair[];\r\n public categories: ICategory[];\r\n public users: IUserInfo[];\r\n public data: IStatsResult[];\r\n public chartData: IChartData;\r\n public chartValid: boolean;\r\n // http://www.syntaxsuccess.com/viewarticle/input-controls-in-angular-2.0\r\n public get countInChart(): boolean {\r\n return this._countInChart;\r\n }\r\n public set countInChart(value: boolean) {\r\n if (this._countInChart === value) {\r\n return;\r\n }\r\n this._countInChart = value;\r\n this.redrawChart();\r\n }\r\n public get sizeInChart(): boolean {\r\n return this._sizeInChart;\r\n }\r\n public set sizeInChart(value: boolean) {\r\n if (this._sizeInChart === value) {\r\n return;\r\n }\r\n this._sizeInChart = value;\r\n this.redrawChart();\r\n }\r\n\r\n private _filter: IDocumentFilterModel;\r\n private _countInChart: boolean;\r\n private _sizeInChart: boolean;\r\n\r\n constructor(formBuilder: FormBuilder,\r\n private _toastr: ToastsManager,\r\n private _categoryService: CategoryService,\r\n private _userService: UserService,\r\n private _statsService: StatsService,\r\n private _chartService: ChartService,\r\n private _csvService: CsvGeneratorService) {\r\n\r\n this.keys = [\r\n { value: 'categoryid', label: 'categoria' },\r\n { value: 'author', label: 'autore' },\r\n { value: 'publicationyear', label: 'anno' },\r\n { value: 'creatorid', label: 'utente' }\r\n ];\r\n // form\r\n this.key = formBuilder.control(this.keys[0], Validators.required);\r\n this.step = formBuilder.control(25);\r\n this.stats = formBuilder.group({\r\n 'key': this.key,\r\n 'step': this.step\r\n });\r\n // chart\r\n this.chartData = {\r\n labels: [],\r\n datasets: [{\r\n data: [],\r\n label: ''\r\n }]\r\n };\r\n }\r\n\r\n ngOnInit() {\r\n this.sizeInChart = true;\r\n this.loadCategories();\r\n this.loadUsers();\r\n }\r\n\r\n public apply() {\r\n if (this.busy || !this.stats.valid) {\r\n return;\r\n }\r\n\r\n let model: IStatsModel = {\r\n key: this.key.value.value,\r\n step: this.step ? this.step.value : null\r\n };\r\n if (this._filter) {\r\n model.creator = this._filter.creator;\r\n model.categories = this._filter.categories;\r\n model.invertCategories = this._filter.invertCategories;\r\n model.title = this._filter.title;\r\n model.author = this._filter.author;\r\n model.description = this._filter.description;\r\n model.yearMin = this._filter.yearMin;\r\n model.yearMax = this._filter.yearMax;\r\n }\r\n\r\n this.busy = true;\r\n this._statsService.getStatistics(model)\r\n .subscribe(\r\n (data: IStatsResult[]) => {\r\n this.convertKeys(data, model.key);\r\n this.data = data;\r\n this.setChartData(data);\r\n },\r\n error => {\r\n this._toastr.error(error);\r\n this.busy = false;\r\n },\r\n () => {\r\n this.busy = false;\r\n }\r\n );\r\n }\r\n\r\n public applyFilters(filter: IDocumentFilterModel) {\r\n this._filter = filter;\r\n this.apply();\r\n }\r\n\r\n public downloadData() {\r\n if (!this.data) {\r\n return;\r\n }\r\n let csv = this._csvService.generateCsv(this.data, ',', '\\n');\r\n this._csvService.downloadCsv(csv, 'export.csv');\r\n }\r\n\r\n private loadCategories() {\r\n this.busy = true;\r\n this._categoryService.getCategories()\r\n .subscribe(\r\n (data: ICategory[]) => {\r\n this.categories = data;\r\n },\r\n error => {\r\n this._toastr.error(error);\r\n this.busy = false;\r\n },\r\n () => {\r\n this.busy = false;\r\n }\r\n );\r\n }\r\n\r\n private loadUsers() {\r\n this.busy = true;\r\n this._userService.getUsers()\r\n .subscribe(\r\n (data: IUserInfo[]) => {\r\n this.users = data;\r\n },\r\n error => {\r\n this._toastr.error(error);\r\n this.busy = false;\r\n },\r\n () => {\r\n this.busy = false;\r\n }\r\n );\r\n }\r\n\r\n private findCategory(filter: (c: ICategory) => boolean): ICategory {\r\n for (let i = 0; i < this.categories.length; i++) {\r\n if (filter(this.categories[i])) {\r\n return this.categories[i];\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n private findUser(filter: (c: IUserInfo) => boolean): IUserInfo {\r\n for (let i = 0; i < this.users.length; i++) {\r\n if (filter(this.users[i])) {\r\n return this.users[i];\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n private convertKeys(data: IStatsResult[], key: string) {\r\n switch (key) {\r\n case 'categoryid':\r\n for (let i = 0; i < data.length; i++) {\r\n // let cat = this.categories.find((c, i) => c.id === data[i].key);\r\n let cat = this.findCategory(c => c.id === data[i].key);\r\n if (cat) {\r\n data[i].key = cat.name;\r\n }\r\n }\r\n break;\r\n case 'creatorid':\r\n for (let i = 0; i < data.length; i++) {\r\n let user = this.findUser(u => u.userName === data[i].key);\r\n if (user) {\r\n data[i].key = user.lastName + ' ' + user.firstName;\r\n }\r\n }\r\n break;\r\n }\r\n }\r\n\r\n private setChartData(data: IStatsResult[]) {\r\n if (!this.countInChart && !this.sizeInChart) {\r\n return;\r\n }\r\n this.chartValid = true;\r\n this.chartData = this._chartService.buildChartData(data, 'Prin2012', this.countInChart, this.sizeInChart);\r\n }\r\n\r\n private redrawChart() {\r\n if (!this.data || (!this.countInChart && !this.sizeInChart)) {\r\n return;\r\n }\r\n this.chartValid = true;\r\n this.chartData = this._chartService.buildChartData(this.data, 'Prin2012', this.countInChart, this.sizeInChart);\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/app/+stats/stats.component.ts","import { Component, ViewContainerRef } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\n\r\nimport { ToastsManager } from 'ng2-toastr/ng2-toastr';\r\n\r\nimport { IUser } from './shared/models/common';\r\nimport { AuthenticationService } from './shared/services/authentication.service';\r\n\r\n@Component({\r\n selector: 'app-root',\r\n templateUrl: './app.component.html',\r\n styleUrls: ['./app.component.css']\r\n})\r\nexport class AppComponent {\r\n public collapsed: boolean;\r\n public user: IUser;\r\n public logged: boolean;\r\n\r\n // toastr: http://stackoverflow.com/questions/40973452/angular2-cannot-read-property-vcref-of-undefined\r\n\r\n constructor(private _router: Router,\r\n private _authService: AuthenticationService,\r\n public toastr: ToastsManager,\r\n vRef: ViewContainerRef) {\r\n\r\n this.toastr.setRootViewContainerRef(vRef);\r\n\r\n this.collapsed = true;\r\n\r\n this.user = this._authService.getCurrentUser();\r\n this.logged = (this.user !== null);\r\n\r\n this._authService.userChanged.subscribe((u: IUser) => {\r\n this.logged = this._authService.isAuthenticated(true);\r\n if (u) {\r\n this.user = this._authService.getCurrentUser();\r\n }\r\n });\r\n }\r\n\r\n public logout() {\r\n if (!this.logged) {\r\n return;\r\n }\r\n this._authService.logout();\r\n this.logged = false;\r\n this._router.navigate(['/']);\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/app/app.component.ts","import { Component, Input } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'app-tab',\r\n styles: [`\r\n .pane{\r\n padding: 1em;\r\n }\r\n `],\r\n template: `\r\n
\r\n \r\n
\r\n `\r\n})\r\nexport class TabComponent {\r\n @Input('tabTitle') title: string;\r\n @Input() active = false;\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/app/shared/components/tabs/tab.component.ts","// https://angular.io/docs/ts/latest/guide/router.html\r\nimport { Injectable } from '@angular/core';\r\nimport { Router, CanActivate } from '@angular/router';\r\n\r\nimport { ToastsManager } from 'ng2-toastr/ng2-toastr';\r\n\r\nimport { AuthenticationService } from './authentication.service';\r\n\r\n@Injectable()\r\nexport class AdminGuardService implements CanActivate {\r\n\r\n constructor(private _router: Router,\r\n private _toastr: ToastsManager,\r\n private _authService: AuthenticationService) { }\r\n\r\n canActivate() {\r\n\r\n // if not authenticated, redirect to login\r\n if (!this._authService.isAuthenticated(false)) {\r\n this._router.navigate(['/accedi']);\r\n return false;\r\n }\r\n // if authenticated but not verified, redirect to login\r\n if (!this._authService.isAuthenticated(true)) {\r\n this._router.navigate(['/accedi']);\r\n this._toastr.warning('Utente non verificato');\r\n return false;\r\n }\r\n // else activate only if admin\r\n let user = this._authService.getCurrentUser();\r\n let ok = (user && user.role === 'admin');\r\n if (!ok) {\r\n this._toastr.warning('Non sei autorizzato a visualizzare questa pagina');\r\n }\r\n return ok;\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/app/shared/services/admin-guard.service.ts","// https://angular.io/docs/ts/latest/guide/router.html\r\nimport { Injectable } from '@angular/core';\r\nimport { Router, CanActivate } from '@angular/router';\r\nimport { SettingsService } from './settings.service';\r\n\r\nimport { ToastsManager } from 'ng2-toastr/ng2-toastr';\r\n\r\nimport { AuthenticationService } from './authentication.service';\r\n\r\n@Injectable()\r\nexport class AuthGuardService implements CanActivate {\r\n\r\n constructor(private _router: Router,\r\n private _toastr: ToastsManager,\r\n private _settings: SettingsService,\r\n private _authService: AuthenticationService) { }\r\n\r\n canActivate() {\r\n // if not authenticated, redirect to login\r\n if (!this._authService.isAuthenticated(false)) {\r\n this._router.navigate(['/accedi']);\r\n return false;\r\n }\r\n // if authenticated but not verified, redirect to login\r\n if (!this._authService.isAuthenticated(true)) {\r\n this._router.navigate(['/accedi']);\r\n this._toastr.warning('Utente non verificato');\r\n return false;\r\n }\r\n return true;\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/app/shared/services/auth-guard.service.ts","import { Injectable } from '@angular/core';\n\nimport { IStatsResult } from './stats.service';\n\n// http://valor-software.com/ng2-charts/ (docs)\n// http://www.chartjs.org/docs/#chart-configuration-chart-data (chart.js docs)\n// https://github.com/valor-software/ng2-charts (code)\n// https://plnkr.co/edit/MWE0umGfN3nZM6zLPPVI?p=preview (plunker)\n\nexport interface IChartDataSet {\n label: string;\n data: number[]; // | Array[];\n}\n\nexport interface IChartData {\n labels: string[];\n datasets: IChartDataSet[];\n}\n\n@Injectable()\nexport class ChartService {\n\n constructor() { }\n\n /**\n * Build chart data for ng2-chart.\n * @param {IStatsResult[]} results Stats results got from server.\n * @param {string} label Label to assign to the chart.\n * @param {boolean} count True to include the counts series.\n * @param {boolean} size True to include the sizes series.\n * @returns {IChartData} Data.\n */\n public buildChartData(results: IStatsResult[], label: string, count: boolean, size: boolean): IChartData {\n let data: IChartData;\n\n // prepare sets\n let countSet: IChartDataSet = {\n label: 'numero',\n data: []\n };\n let sizeSet: IChartDataSet = {\n label: 'dimensioni',\n data: []\n };\n\n // prepare dataset\n if (count && size) {\n data = {\n labels: [],\n datasets: [countSet, sizeSet]\n };\n } else {\n if (count) {\n data = {\n labels: [],\n datasets: [countSet]\n };\n } else if (size) {\n data = {\n labels: [],\n datasets: [sizeSet]\n };\n }\n }\n\n // add labels\n for (let i = 0; i < results.length; i++) {\n if (count) {\n countSet.data.push(results[i].count);\n }\n if (size) {\n sizeSet.data.push(results[i].size / 1024);\n }\n data.labels.push(results[i].key);\n }\n return data;\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/app/shared/services/chart.service.ts","import { Injectable } from '@angular/core';\r\n\r\n// see also http://halistechnology.com/2015/05/28/use-javascript-to-export-your-data-as-csv/\r\n\r\n@Injectable()\r\nexport class CsvGeneratorService {\r\n\r\n constructor() { }\r\n\r\n public generateCsv(data: any[], columnSep = ',', rowSep: '\\n'): string {\r\n if (!data || data.length === 0) {\r\n return null;\r\n }\r\n let sb: string[] = [];\r\n let keys: string[] = Object.keys(data[0]);\r\n\r\n // legend row\r\n sb.push(keys.join(columnSep));\r\n sb.push(rowSep);\r\n\r\n // data rows\r\n for (let y = 0; y < data.length; y++) {\r\n let x = 0;\r\n let row = data[y];\r\n for (let key in row) {\r\n if (row.hasOwnProperty(key)) {\r\n if (x > 0) {\r\n sb.push(columnSep);\r\n }\r\n sb.push(row[key]);\r\n x++;\r\n }\r\n }\r\n sb.push(rowSep);\r\n }\r\n return sb.join('');\r\n }\r\n\r\n public downloadCsv(csv: string, fileName = 'export.csv') {\r\n if (!csv) {\r\n return;\r\n }\r\n if (!csv.match(/^data:text\\/csv/i)) {\r\n csv = 'data:text/csv;charset=utf-8,' + csv;\r\n }\r\n let data = encodeURI(csv);\r\n let link = document.createElement('a');\r\n link.setAttribute('href', data);\r\n link.setAttribute('download', fileName);\r\n link.click();\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/app/shared/services/csv-generator.service.ts","import { Injectable } from '@angular/core';\r\nimport { Http, Response } from '@angular/http';\r\nimport { Observable } from 'rxjs/Observable';\r\nimport 'rxjs/add/operator/catch';\r\n\r\nimport { SettingsService } from './settings.service';\r\nimport { AuthenticationService } from './authentication.service';\r\n\r\nexport interface IStatsModel {\r\n key: string;\r\n step?: number;\r\n creator?: string;\r\n categories?: string;\r\n invertCategories?: boolean;\r\n title?: string;\r\n author?: string;\r\n description?: string;\r\n yearMin?: number;\r\n yearMax?: number;\r\n}\r\n\r\nexport interface IStatsResult {\r\n key: string;\r\n count: number;\r\n size: number;\r\n}\r\n\r\n@Injectable()\r\nexport class StatsService {\r\n\r\n constructor(\r\n private _http: Http,\r\n private _settings: SettingsService,\r\n private _authService: AuthenticationService) { }\r\n\r\n public getStatistics(model: IStatsModel): Observable {\r\n let sb = [this._settings.apiBaseUrl + 'stats?'];\r\n\r\n this.appendQueryParam('key', model.key || 'categoryid', sb);\r\n\r\n if (model.step > 0) {\r\n this.appendQueryParam('step', model.step.toString(), sb);\r\n }\r\n if (model.creator) {\r\n this.appendQueryParam('creator', model.creator, sb);\r\n }\r\n if (model.categories) {\r\n this.appendQueryParam('categories', model.categories, sb);\r\n }\r\n if (model.invertCategories) {\r\n this.appendQueryParam('invertCategories', model.invertCategories ? 'true' : 'false', sb);\r\n }\r\n if (model.title) {\r\n this.appendQueryParam('title', model.title, sb);\r\n }\r\n if (model.author) {\r\n this.appendQueryParam('author', model.author, sb);\r\n }\r\n if (model.description) {\r\n this.appendQueryParam('description', model.description, sb);\r\n }\r\n if (model.yearMin > 0) {\r\n this.appendQueryParam('yearMin', model.yearMin.toString(), sb);\r\n }\r\n if (model.yearMax > 0) {\r\n this.appendQueryParam('yearMax', model.yearMax.toString(), sb);\r\n }\r\n\r\n let options = {\r\n headers: this._authService.createAuthHeaders({\r\n 'Content-Type': 'application/json'\r\n })\r\n };\r\n return this._http.get(sb.join(''), options)\r\n .map((res: Response) => res.json())\r\n .catch((error: any) => Observable.throw(error.json().error || this._settings.serverErrorMessage));\r\n }\r\n\r\n private appendQueryParam(name: string, value: string, sb: string[]) {\r\n let i = sb.length - 1;\r\n if (i > -1 && sb[i].length > 0 && sb[i].charAt(sb[i].length - 1) !== '?') {\r\n sb.push('&');\r\n }\r\n sb.push(encodeURIComponent(name) + '=' +\r\n encodeURIComponent(value));\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/app/shared/services/stats.service.ts","import { Injectable, EventEmitter } from '@angular/core';\r\nimport { Http, Headers, Response } from '@angular/http';\r\n// http://stackoverflow.com/questions/37073705/property-catch-does-not-exist-on-type-observableany\r\nimport { Observable } from 'rxjs/Observable';\r\nimport 'rxjs/add/operator/catch';\r\n\r\nimport { SettingsService } from './settings.service';\r\nimport { LocalStorageService } from './local-storage.service';\r\nimport { IUser } from '../models/common';\r\n\r\ninterface ITokenResult {\r\n token_type: string;\r\n access_token: string;\r\n refresh_token: string;\r\n expires_in: string;\r\n scope: string;\r\n // this value is calculated\r\n expires_on?: Date;\r\n}\r\n\r\ninterface IUserInfoResult {\r\n sub: string;\r\n name: string;\r\n given_name: string;\r\n family_name: string;\r\n email: string;\r\n email_verified: boolean;\r\n roles: string;\r\n}\r\n\r\nexport interface IExistResult {\r\n entry: string;\r\n isExisting: boolean;\r\n}\r\n\r\nexport interface IRegistrationModel {\r\n email: string;\r\n name: string;\r\n firstName: string;\r\n lastName: string;\r\n password: string;\r\n}\r\n\r\n@Injectable()\r\nexport class AuthenticationService {\r\n // events from services: http://stackoverflow.com/questions/34700438/global-events-in-angular-2\r\n public userChanged: EventEmitter;\r\n\r\n constructor(\r\n private _http: Http,\r\n private _settings: SettingsService,\r\n private _localStorage: LocalStorageService) {\r\n this.userChanged = new EventEmitter();\r\n }\r\n\r\n /**\r\n * Logs the specified user in.\r\n * @param {string} name: user name.\r\n * @param {string} password: password.\r\n */\r\n public login(name: string, password: string) {\r\n if (!name) {\r\n throw new Error('User name not specified');\r\n }\r\n\r\n let body = 'grant_type=password&scope=offline_access profile email roles' +\r\n `&resource=${this._settings.appBaseUrl}&username=${name}&password=${password}`;\r\n\r\n this._http.post(\r\n this._settings.authBaseUrl + `token`,\r\n body,\r\n {\r\n headers: new Headers({\r\n 'Content-Type': 'application/x-www-form-urlencoded'\r\n })\r\n }).map(res => res.json())\r\n .subscribe(\r\n (token: ITokenResult) => {\r\n // calculate expiry date and save result\r\n if (token.expires_in) {\r\n token.expires_on = this.calculateExpirationDate(+token.expires_in);\r\n }\r\n this._localStorage.store(this._settings.tokenStorageKey, token, true);\r\n // get user info\r\n this._http.get(this._settings.authBaseUrl + 'userinfo', {\r\n headers: new Headers({\r\n 'Content-Type': 'application/json',\r\n 'Authorization': 'Bearer ' + token.access_token\r\n })\r\n }).map(res => res.json())\r\n .subscribe((info: IUserInfoResult) => {\r\n let user: IUser = {\r\n id: info.name,\r\n email: info.email,\r\n name: info.name,\r\n firstName: info.given_name,\r\n lastName: info.family_name,\r\n // currently each user has a single role, so just pick it\r\n role: info.roles,\r\n verified: info.email_verified\r\n };\r\n // save result\r\n this._localStorage.store(this._settings.userStorageKey, user, true);\r\n this.userChanged.emit(user);\r\n }, error => {\r\n console.log('AuthenticationService: error getting user info: ' + error);\r\n });\r\n },\r\n error => {\r\n console.log('AuthenticationService: error getting access token: ' + error);\r\n });\r\n }\r\n\r\n /**\r\n * Logs out the current user if any.\r\n */\r\n public logout() {\r\n this._localStorage.remove(this._settings.userStorageKey, true);\r\n this._localStorage.remove('id_token');\r\n this.userChanged.emit(null);\r\n let options = {\r\n headers: this.createAuthHeaders({\r\n 'Content-Type': 'application/json'\r\n })\r\n };\r\n return this._http.get(this._settings.authBaseUrl + 'logout', options)\r\n .map((res: Response) => res.json())\r\n .catch((error: any) => Observable.throw(error.json().error || this._settings.serverErrorMessage));\r\n }\r\n\r\n /**\r\n * True it the user is authenticated, and eventually verified.\r\n * @param {boolean} verifiedOnly true to return true only if the user is verified.\r\n * @returns {boolean} true if authenticated (and eventually verified).\r\n */\r\n public isAuthenticated(verifiedOnly: boolean) {\r\n // check stored data\r\n let result: ITokenResult = this._localStorage.retrieve(this._settings.tokenStorageKey, true);\r\n if (!result) {\r\n return false;\r\n }\r\n\r\n // check expiration\r\n if (result.expires_on) {\r\n if (this.getUTCDate().valueOf() - result.expires_on.valueOf() < 60) {\r\n return false;\r\n }\r\n }\r\n\r\n // check confirmation, if requested\r\n if (!verifiedOnly) {\r\n return true;\r\n }\r\n let user: IUser = this._localStorage.retrieve(this._settings.userStorageKey, true);\r\n return user && user.verified;\r\n }\r\n\r\n /**\r\n * Gets data about the current user.\r\n * @returns {IUser} user data or null.\r\n */\r\n public getCurrentUser(): IUser {\r\n return this._localStorage.retrieve(this._settings.userStorageKey, true);\r\n }\r\n\r\n /**\r\n * Checks if the specified email address is registered on the server.\r\n * @param {string} email email address to test.\r\n * @returns {IExistResult} result.\r\n */\r\n public isEmailRegistered(email: string): Observable {\r\n let options = {\r\n headers: this.createAuthHeaders({\r\n 'Content-Type': 'application/json'\r\n })\r\n };\r\n return this._http.get(this._settings.apiBaseUrl + 'accounts/emailexists/' +\r\n encodeURIComponent(email),\r\n options);\r\n }\r\n\r\n /**\r\n * Checks if the specified user's given name is registered on the server.\r\n * This name is a nickname chosen by users during registration, and is the key\r\n * used for referencing users when talking to the server.\r\n * @param {string} name name to test.\r\n * @returns {IExistResult} result.\r\n */\r\n public isNameRegistered(name: string): Observable {\r\n let options = {\r\n headers: this.createAuthHeaders({\r\n 'Content-Type': 'application/json'\r\n })\r\n };\r\n return this._http.get(this._settings.apiBaseUrl + 'accounts/nameexists/' +\r\n encodeURIComponent(name),\r\n options);\r\n }\r\n\r\n /**\r\n * Register the user with the specified registration data.\r\n * @param {IRegistrationModel} registration The registration data.\r\n */\r\n public register(registration: IRegistrationModel): Observable {\r\n let options = {\r\n headers: this.createAuthHeaders({\r\n 'Content-Type': 'application/json'\r\n })\r\n };\r\n return this._http.post(this._settings.apiBaseUrl + 'accounts/register',\r\n registration,\r\n options);\r\n }\r\n\r\n /**\r\n * Resend the confirmation email to the specified address.\r\n * @param {string} email address.\r\n */\r\n public resendConfirmEmail(email: string): Observable {\r\n let options = {\r\n headers: this.createAuthHeaders({\r\n 'Content-Type': 'application/json'\r\n })\r\n };\r\n return this._http.get(this._settings.apiBaseUrl + 'accounts/resendconfirm/' +\r\n encodeURIComponent(email),\r\n options);\r\n }\r\n\r\n /**\r\n * Create headers with bearer authentication. You can use this method as a shortcut\r\n * for building headers for authenticated requests.\r\n * @param {Headers | {[name: string]: any}} headers content of headers to be merged\r\n * with the authentication headers.\r\n * @returns {Headers} headers.\r\n */\r\n public createAuthHeaders(headers?: { [name: string]: any }): Headers {\r\n // create headers\r\n let auth = new Headers();\r\n if (headers) {\r\n for (let key in headers) {\r\n if (headers.hasOwnProperty(key)) {\r\n auth.append(key, headers[key]);\r\n }\r\n }\r\n }\r\n\r\n // append authentication\r\n let tokenResult: ITokenResult = this._localStorage.retrieve(this._settings.tokenStorageKey, true);\r\n if (tokenResult) {\r\n auth.append('Authorization', 'Bearer ' + tokenResult.access_token);\r\n }\r\n return auth;\r\n }\r\n\r\n private getUTCDate(date?: Date): Date {\r\n if (!date) {\r\n date = new Date();\r\n }\r\n return new Date(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate(),\r\n date.getUTCHours(), date.getUTCMinutes(), date.getUTCSeconds());\r\n }\r\n\r\n private calculateExpirationDate(exp: number): Date {\r\n let date = this.getUTCDate();\r\n date.setSeconds(date.getUTCSeconds() + exp);\r\n return date;\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/app/shared/services/authentication.service.ts","import { Injectable } from '@angular/core';\r\nimport { environment } from '../../../environments/environment';\r\n\r\n@Injectable()\r\nexport class SettingsService {\r\n public apiBaseUrl: string;\r\n public authBaseUrl: string;\r\n public appBaseUrl: string;\r\n public serverErrorMessage: string;\r\n public pageSize: number;\r\n public azureAccountId: string;\r\n public azureContainerName: string;\r\n public userStorageKey: string; // stores IUser\r\n public tokenStorageKey: string; // stores ITokenResult\r\n public storagePrefix: string; // generic local storage prefix\r\n\r\n constructor() {\r\n if (environment.production) {\r\n this.apiBaseUrl = 'http://prinapi.azurewebsites.net/api/';\r\n this.authBaseUrl = 'http://prinapi.azurewebsites.net/connect/';\r\n // this.appBaseUrl = 'http://www.fusisoft.it/apps/prin/';\r\n this.appBaseUrl = 'http://www.prin2012crusca.org/';\r\n } else {\r\n this.apiBaseUrl = 'http://localhost:51346/api/';\r\n this.authBaseUrl = 'http://localhost:51346/connect/';\r\n this.appBaseUrl = 'http://localhost:4200/';\r\n }\r\n this.serverErrorMessage = 'Errore del server';\r\n this.pageSize = 20;\r\n this.azureAccountId = 'breditstore';\r\n this.azureContainerName = 'prin';\r\n this.userStorageKey = 'prin-ls-user';\r\n this.tokenStorageKey = 'prin-ls-token';\r\n this.storagePrefix = 'prin-ls-';\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/app/shared/services/settings.service.ts","function webpackEmptyContext(req) {\n\tthrow new Error(\"Cannot find module '\" + req + \"'.\");\n}\nwebpackEmptyContext.keys = function() { return []; };\nwebpackEmptyContext.resolve = webpackEmptyContext;\nmodule.exports = webpackEmptyContext;\nwebpackEmptyContext.id = 504;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src async\n// module id = 504\n// module chunks = 0","import './polyfills.ts';\r\n\r\nimport { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\r\nimport { enableProdMode } from '@angular/core';\r\nimport { environment } from './environments/environment';\r\nimport { AppModule } from './app/';\r\n\r\n// https://github.com/moment/moment/issues/2608\r\nimport * as moment from 'moment';\r\nimport 'moment/locale/it';\r\n\r\nmoment.locale('it');\r\n\r\nif (environment.production) {\r\n enableProdMode();\r\n}\r\n\r\nplatformBrowserDynamic().bootstrapModule(AppModule);\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/main.ts","import { NgModule } from '@angular/core';\r\nimport { Routes, RouterModule } from '@angular/router';\r\n\r\nimport { DocumentEditorComponent } from './+document-editor/document-editor.component';\r\nimport { DocumentListComponent } from './+document-list/document-list.component';\r\nimport { HomeComponent } from './+home/home.component';\r\nimport { LoginComponent } from './+login/login.component';\r\nimport { RegistrationComponent } from './+registration/registration.component';\r\nimport { StatsComponent } from './+stats/stats.component';\r\n\r\nimport { AuthGuardService } from './shared/services/auth-guard.service';\r\nimport { AdminGuardService } from './shared/services/admin-guard.service';\r\n\r\nconst routes: Routes = [\r\n { path: '', component: HomeComponent },\r\n { path: 'documenti', component: DocumentListComponent, canActivate: [ AuthGuardService ] },\r\n { path: 'documento/:id', component: DocumentEditorComponent, canActivate: [ AuthGuardService ] },\r\n { path: 'accedi', component: LoginComponent },\r\n { path: 'statistiche', component: StatsComponent, canActivate: [ AuthGuardService ] },\r\n { path: 'registra', component: RegistrationComponent, canActivate: [ AdminGuardService ] }\r\n];\r\n\r\n@NgModule({\r\n imports: [RouterModule.forRoot(routes)],\r\n exports: [RouterModule],\r\n providers: []\r\n})\r\nexport class PrinwebRoutingModule { }\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/app/app-routing.module.ts","import { BrowserModule } from '@angular/platform-browser';\r\nimport { NgModule } from '@angular/core';\r\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { HttpModule } from '@angular/http';\r\n\r\nimport { AppComponent } from './app.component';\r\nimport { ToastModule } from 'ng2-toastr/ng2-toastr';\r\nimport { MomentModule } from 'angular2-moment';\r\n// http://valor-software.com/ng2-bootstrap/\r\nimport { DropdownModule, PaginationModule, TabsModule, CollapseModule } from 'ng2-bootstrap';\r\nimport { SelectModule } from 'ng2-select';\r\nimport { ChartsModule } from 'ng2-charts/ng2-charts';\r\n// http://valor-software.com/ng2-file-upload/\r\nimport { FileSelectDirective, FileDropDirective, FileUploader } from 'ng2-file-upload';\r\n\r\n// services\r\nimport { AdminGuardService } from './shared/services/admin-guard.service';\r\nimport { AuthenticationService } from './shared/services/authentication.service';\r\nimport { AuthGuardService } from './shared/services/auth-guard.service';\r\nimport { CategoryService } from './shared/services/category.service';\r\nimport { ChartService } from './shared/services/chart.service';\r\nimport { ConfirmService } from './shared/components/confirm/confirm.service';\r\nimport { CsvGeneratorService } from './shared/services/csv-generator.service';\r\nimport { DocumentService } from './shared/services/document.service';\r\nimport { LocalStorageService } from './shared/services/local-storage.service';\r\nimport { SettingsService } from './shared/services/settings.service';\r\nimport { StatsService } from './shared/services/stats.service';\r\nimport { UserService } from './shared/services/user.service';\r\n// pipes\r\nimport { FileSizePipe } from './shared/pipes/file-size.pipe';\r\n// components\r\nimport { AssetEditorComponent } from './shared/components/asset-editor/asset-editor.component';\r\nimport { AssetUploaderComponent } from './shared/components/asset-uploader/asset-uploader.component';\r\nimport { ConfirmComponent } from './shared/components/confirm/confirm.component';\r\nimport { DocumentFiltersComponent } from './shared/components/document-filters/document-filters.component';\r\nimport { PasswordStrengthBarComponent } from './shared/components/password-strength-bar/password-strength-bar.component';\r\nimport { PrinwebRoutingModule } from './app-routing.module';\r\nimport { TabsComponent } from './shared/components/tabs/tabs.component';\r\nimport { TabComponent } from './shared/components/tabs/tab.component';\r\n// pages\r\nimport { DocumentEditorComponent } from './+document-editor/document-editor.component';\r\nimport { DocumentListComponent } from './+document-list/document-list.component';\r\nimport { HomeComponent } from './+home/home.component';\r\nimport { LoginComponent } from './+login/login.component';\r\nimport { RegistrationComponent } from './+registration/registration.component';\r\nimport { StatsComponent } from './+stats/stats.component';\r\n\r\n@NgModule({\r\n declarations: [\r\n FileSelectDirective,\r\n FileDropDirective,\r\n // pipes\r\n FileSizePipe,\r\n // components\r\n AppComponent,\r\n AssetEditorComponent,\r\n AssetUploaderComponent,\r\n ConfirmComponent,\r\n DocumentFiltersComponent,\r\n PasswordStrengthBarComponent,\r\n TabComponent,\r\n TabsComponent,\r\n // pages\r\n DocumentEditorComponent,\r\n DocumentListComponent,\r\n HomeComponent,\r\n LoginComponent,\r\n RegistrationComponent,\r\n StatsComponent\r\n ],\r\n imports: [\r\n BrowserModule,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n HttpModule,\r\n PrinwebRoutingModule,\r\n ToastModule,\r\n MomentModule,\r\n DropdownModule.forRoot(),\r\n PaginationModule.forRoot(),\r\n CollapseModule.forRoot(),\r\n TabsModule.forRoot(),\r\n SelectModule,\r\n ChartsModule\r\n ],\r\n providers: [\r\n AdminGuardService,\r\n AuthenticationService,\r\n AuthGuardService,\r\n CategoryService,\r\n ChartService,\r\n ConfirmService,\r\n CsvGeneratorService,\r\n DocumentService,\r\n LocalStorageService,\r\n SettingsService,\r\n StatsService,\r\n UserService\r\n ],\r\n bootstrap: [AppComponent]\r\n})\r\nexport class AppModule { }\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/app/app.module.ts","import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';\r\nimport { FormBuilder, FormGroup, FormControl, Validators } from '@angular/forms';\r\n\r\nimport { IPair } from '../../models/common';\r\n// TODO: find out why this import does not work\r\n// import { IAsset } from '../../services/document.service';\r\ninterface IAsset {\r\n id: string;\r\n documentId: string;\r\n creatorId: string;\r\n title: string;\r\n description: string;\r\n format: string;\r\n size: number;\r\n timeCreated: Date;\r\n timeModified: Date;\r\n}\r\n\r\n@Component({\r\n selector: 'app-asset-editor',\r\n templateUrl: './asset-editor.component.html',\r\n styleUrls: ['./asset-editor.component.css']\r\n})\r\nexport class AssetEditorComponent implements OnInit {\r\n public assetForm: FormGroup;\r\n public title: FormControl;\r\n public description: FormControl;\r\n public format: FormControl;\r\n public formats: IPair[];\r\n\r\n @Input()\r\n public set asset(value: IAsset) {\r\n this._asset = value;\r\n this.loadAsset();\r\n }\r\n public get asset(): IAsset {\r\n return this._asset;\r\n }\r\n @Output() changed: EventEmitter = new EventEmitter();\r\n\r\n private _asset: IAsset;\r\n\r\n constructor(formBuilder: FormBuilder) {\r\n this.changed = new EventEmitter();\r\n\r\n this.formats = [\r\n { value: 'cr-core', label: 'Crusca core'},\r\n { value: 'cr-cmx', label: 'Crusca fumetti'},\r\n { value: 'cr-mld', label: 'Crusca melodramma'},\r\n { value: 'pdf', label: 'Documento PDF'},\r\n { value: 'docx', label: 'Documento Word'},\r\n { value: 'jpg', label: 'Immagine JPEG'}\r\n // TODO other formats\r\n ];\r\n // form\r\n this.title = formBuilder.control('', Validators.required);\r\n this.description = formBuilder.control('', Validators.required);\r\n this.format = formBuilder.control(this.formats[0].value, Validators.required);\r\n this.assetForm = formBuilder.group({\r\n 'title': this.title,\r\n 'description': this.description,\r\n 'format': this.format\r\n });\r\n }\r\n\r\n ngOnInit() {\r\n }\r\n\r\n private loadAsset() {\r\n if (this._asset) {\r\n this.title.setValue(this._asset.title);\r\n this.description.setValue(this._asset.description);\r\n this.format.setValue(this._asset.format);\r\n return;\r\n }\r\n this.title.value = null;\r\n this.description.value = null;\r\n this.format.value = null;\r\n }\r\n\r\n private saveAsset() {\r\n if (!this._asset) {\r\n return;\r\n }\r\n this._asset.title = this.title.value.trim();\r\n this._asset.description = this.description.value.trim();\r\n this._asset.format = this.format.value;\r\n }\r\n\r\n public save() {\r\n if (!this.assetForm.valid) {\r\n return;\r\n }\r\n this.saveAsset();\r\n this.changed.emit(this._asset);\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/app/shared/components/asset-editor/asset-editor.component.ts","import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';\r\n\r\nimport { FileUploader, ParsedResponseHeaders } from 'ng2-file-upload';\r\n\r\nimport { SettingsService } from '../../services/settings.service';\r\n\r\n// https://github.com/valor-software/ng2-file-upload/tree/development/demo\r\n\r\n@Component({\r\n selector: 'app-asset-uploader',\r\n templateUrl: './asset-uploader.component.html',\r\n styleUrls: ['./asset-uploader.component.css']\r\n})\r\nexport class AssetUploaderComponent implements OnInit {\r\n @Input() public set assetId(value: string) {\r\n if (this._assetId === value) {\r\n return;\r\n }\r\n this._assetId = value;\r\n this.uploader = new FileUploader({\r\n url: `${this._settings.apiBaseUrl}assets/${this.assetId}/content`\r\n });\r\n // https://github.com/valor-software/ng2-file-upload/issues/399\r\n this.uploader.onAfterAddingFile = (file) => { file.withCredentials = false; };\r\n // TODO: find out how to include FileItem type from file-item.class in ng2-file-upload\r\n this.uploader._onCompleteItem = (item: any, response: string, status: number,\r\n headers: ParsedResponseHeaders) => {\r\n this.uploaded.emit(item.file.size);\r\n };\r\n }\r\n public get assetId(): string {\r\n return this._assetId;\r\n }\r\n @Output() uploaded: EventEmitter = new EventEmitter();\r\n\r\n public uploader: FileUploader;\r\n private _assetId: string;\r\n\r\n constructor(private _settings: SettingsService) {\r\n this.uploaded = new EventEmitter();\r\n }\r\n\r\n ngOnInit() {\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/app/shared/components/asset-uploader/asset-uploader.component.ts","import { Component, OnInit } from '@angular/core';\r\n\r\nimport { ConfirmService } from \"./confirm.service\";\r\n\r\n// http://koscielniak.me/post/2016/03/angular2-confirm-dialog-component/\r\n\r\nconst KEY_ESC = 27;\r\n\r\n@Component({\r\n selector: 'app-confirm',\r\n templateUrl: './confirm.component.html',\r\n styleUrls: ['./confirm.component.css']\r\n})\r\nexport class ConfirmComponent implements OnInit {\r\n public title: string;\r\n public message: string;\r\n public okText: string;\r\n public cancelText: string;\r\n\r\n private _defaults = {\r\n title: 'Conferma',\r\n message: 'Confermi l\\'operazione?',\r\n cancelText: 'Annulla',\r\n okText: 'OK'\r\n };\r\n private _confirmElement: any;\r\n private _cancelButton: any;\r\n private _okButton: any;\r\n\r\n constructor(confirmService: ConfirmService) {\r\n // assign a function to the property activate of ConfirmService.\r\n // After this, calling activate on ConfirmService will cause the function activate\r\n // from ConfirmComponent to be executed.\r\n confirmService.activate = this.activate.bind(this);\r\n }\r\n\r\n private setLabels(message = this._defaults.message, title = this._defaults.title) {\r\n this.title = title;\r\n this.message = message;\r\n this.okText = this._defaults.okText;\r\n this.cancelText = this._defaults.cancelText;\r\n }\r\n\r\n activate(message = this._defaults.message, title = this._defaults.title) {\r\n this.setLabels(message, title);\r\n\r\n let promise = new Promise(resolve => {\r\n this.show(resolve);\r\n });\r\n return promise;\r\n }\r\n\r\n private show(resolve: (boolean) => any) {\r\n document.onkeyup = null;\r\n\r\n let negativeOnClick = (e: any) => resolve(false);\r\n let positiveOnClick = (e: any) => resolve(true);\r\n\r\n if (!this._confirmElement || !this._cancelButton || !this._okButton) {\r\n return;\r\n }\r\n this._confirmElement.style.opacity = 0;\r\n this._confirmElement.style.zIndex = 9999;\r\n\r\n this._cancelButton.onclick = ((e: any) => {\r\n e.preventDefault();\r\n if (!negativeOnClick(e)) {\r\n this.hideDialog();\r\n }\r\n });\r\n\r\n this._okButton.onclick = ((e: any) => {\r\n e.preventDefault();\r\n if (!positiveOnClick(e)) {\r\n this.hideDialog();\r\n }\r\n });\r\n\r\n this._confirmElement.onclick = () => {\r\n this.hideDialog();\r\n return negativeOnClick(null);\r\n };\r\n\r\n document.onkeyup = (e: any) => {\r\n if (e.which === KEY_ESC) {\r\n this.hideDialog();\r\n return negativeOnClick(null);\r\n }\r\n };\r\n\r\n this._confirmElement.style.opacity = 1;\r\n this._confirmElement.style.display = 'block';\r\n }\r\n\r\n private hideDialog() {\r\n document.onkeyup = null;\r\n this._confirmElement.style.opacity = 0;\r\n window.setTimeout(() => this._confirmElement.style.zIndex = -1, 400);\r\n }\r\n\r\n ngOnInit(): any {\r\n this._confirmElement = document.getElementById('confirmationModal');\r\n this._cancelButton = document.getElementById('cancelButton');\r\n this._okButton = document.getElementById('okButton');\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/app/shared/components/confirm/confirm.component.ts","import { Component, OnInit, Input, Output, EventEmitter, ViewChild } from '@angular/core';\r\nimport { FormBuilder, FormGroup, FormControl } from '@angular/forms';\r\n\r\nimport { ToastsManager } from 'ng2-toastr/ng2-toastr';\r\n\r\nimport { CategoryService, ICategory } from '../../services/category.service';\r\nimport { UserService, IUserInfo } from '../../services/user.service';\r\nimport { IDocumentFilterModel } from '../../services/document.service';\r\nimport { IPair } from '../../models/common';\r\n\r\ninterface INg2SelectItem {\r\n id: string;\r\n text: string;\r\n}\r\n\r\n@Component({\r\n selector: 'app-document-filters',\r\n templateUrl: './document-filters.component.html',\r\n styleUrls: ['./document-filters.component.css']\r\n})\r\nexport class DocumentFiltersComponent implements OnInit {\r\n @Output() changed: EventEmitter = new EventEmitter();\r\n @Input() disabled: boolean;\r\n @Input() sortable: boolean;\r\n @ViewChild('catElem') categoriesElement: any;\r\n\r\n public filters: FormGroup;\r\n public categoryInverted: FormControl;\r\n public user: FormControl;\r\n public title: FormControl;\r\n public description: FormControl;\r\n public author: FormControl;\r\n public minYear: FormControl;\r\n public maxYear: FormControl;\r\n public sortType: FormControl;\r\n public sortDescending: FormControl;\r\n\r\n public categories: INg2SelectItem[];\r\n public categoriesValue: INg2SelectItem[];\r\n public busy: boolean;\r\n public currentYear: number;\r\n public users: IUserInfo[];\r\n public sortTypes: IPair[];\r\n\r\n constructor(formBuilder: FormBuilder,\r\n private _toastr: ToastsManager,\r\n private _categoryService: CategoryService,\r\n private _userService: UserService) {\r\n\r\n this.sortTypes = [\r\n { value: 0, label: 'titolo' },\r\n { value: 1, label: 'autore' },\r\n { value: 2, label: 'anno' }\r\n ];\r\n\r\n this.categoryInverted = formBuilder.control(false);\r\n this.user = formBuilder.control(null);\r\n this.title = formBuilder.control(null);\r\n this.description = formBuilder.control(null);\r\n this.author = formBuilder.control(null);\r\n this.minYear = formBuilder.control(0);\r\n this.maxYear = formBuilder.control(0);\r\n this.sortType = formBuilder.control(this.sortTypes[0]);\r\n this.sortDescending = formBuilder.control(false);\r\n\r\n this.filters = formBuilder.group({\r\n 'categoryInverted': this.categoryInverted,\r\n 'user': this.user,\r\n 'title': this.title,\r\n 'description': this.description,\r\n 'author': this.author,\r\n 'minYear': this.minYear,\r\n 'maxYear': this.maxYear,\r\n 'sortType': this.sortType,\r\n 'sortDescending': this.sortDescending\r\n });\r\n this.resetUsers();\r\n this.changed = new EventEmitter();\r\n this.currentYear = new Date().getFullYear();\r\n }\r\n\r\n ngOnInit() {\r\n this.loadCategories();\r\n this.loadUsers();\r\n }\r\n\r\n public refreshCategoriesValue(value: any): void {\r\n this.categoriesValue = value;\r\n }\r\n\r\n public apply() {\r\n if (this.busy || this.disabled) {\r\n return;\r\n }\r\n let filter = this.getFilter();\r\n this.changed.emit(filter);\r\n }\r\n\r\n // TODO: persist document filters in settings\r\n\r\n public reset() {\r\n if (this.busy || this.disabled) {\r\n return;\r\n }\r\n this.filters.reset();\r\n this.categoriesElement.active = null;\r\n this.categoriesValue = null;\r\n // this.categoryInverted.setValue(false);\r\n // this.user.setValue(this.users.length > 0 ? this.users[0] : null);\r\n // this.title.setValue(null);\r\n // this.description.setValue(null);\r\n // this.author.setValue(null);\r\n // this.minYear.setValue(0);\r\n // this.maxYear.setValue(0);\r\n this.user.setValue(this.users.length > 0 ? this.users[0] : null);\r\n let filter = this.getFilter();\r\n this.changed.emit(filter);\r\n }\r\n\r\n private getFilter(): IDocumentFilterModel {\r\n let filter: IDocumentFilterModel = {\r\n pageNumber: 1,\r\n pageSize: 20,\r\n creator: (!this.user.value || this.user.value === this.users[0] ?\r\n null :\r\n this.user.value.userName),\r\n title: this.title.value,\r\n author: this.author.value,\r\n description: this.description.value,\r\n yearMin: this.minYear.value,\r\n yearMax: this.maxYear.value,\r\n sort: this.sortType.value ? this.sortType.value.value : null,\r\n descending: this.sortDescending.value\r\n };\r\n // categories\r\n if (this.categoriesValue) {\r\n let selected: string[] = [];\r\n for (let i = 0; i < this.categoriesValue.length; i++) {\r\n selected.push(this.categoriesValue[i].id);\r\n }\r\n if (selected.length > 0) {\r\n filter.categories = selected.join(',');\r\n filter.invertCategories = this.categoryInverted.value;\r\n }\r\n }\r\n return filter;\r\n }\r\n\r\n private loadCategories() {\r\n this.busy = true;\r\n this._categoryService.getCategories()\r\n .subscribe(\r\n (data: ICategory[]) => {\r\n this.categories = [];\r\n for (let i = 0; i < data.length; i++) {\r\n this.categories.push({\r\n id: data[i].id,\r\n text: data[i].name\r\n });\r\n }\r\n },\r\n error => {\r\n this._toastr.error(error);\r\n this.busy = false;\r\n },\r\n () => {\r\n this.busy = false;\r\n }\r\n );\r\n }\r\n\r\n private resetUsers() {\r\n this.users = [{\r\n userName: '(qualsiasi)',\r\n firstName: '',\r\n lastName: '(qualsiasi)'\r\n }];\r\n this.user.setValue(this.users[0]);\r\n }\r\n\r\n private loadUsers() {\r\n this.busy = true;\r\n this._userService.getUsers()\r\n .subscribe(\r\n (data: IUserInfo[]) => {\r\n this.resetUsers();\r\n for (let i = 0; i < data.length; i++) {\r\n this.users.push(data[i]);\r\n }\r\n },\r\n error => {\r\n this._toastr.error(error);\r\n this.busy = false;\r\n },\r\n () => {\r\n this.busy = false;\r\n }\r\n );\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/app/shared/components/document-filters/document-filters.component.ts","import { Component, OnChanges, Input, Output, SimpleChange, EventEmitter } from '@angular/core';\r\n\r\n// modified from http://rdn-consulting.com/blog/2016/09/28/angular-2-password-strength-bar/\r\n// https://plnkr.co/edit/z0x5gG\r\n\r\n@Component({\r\n selector: 'app-password-strength-bar',\r\n templateUrl: './password-strength-bar.component.html',\r\n styleUrls: ['./password-strength-bar.component.css']\r\n})\r\nexport class PasswordStrengthBarComponent implements OnChanges {\r\n @Input() passwordToCheck: string;\r\n @Output() strengthChanged = new EventEmitter();\r\n public bar0: string;\r\n public bar1: string;\r\n public bar2: string;\r\n public bar3: string;\r\n public bar4: string;\r\n\r\n private _colors = ['#F00', '#F90', '#FF0', '#9F0', '#0F0'];\r\n\r\n private measureStrength(p: string): number {\r\n let force = 0;\r\n let regex = /[$-/:-?{-~!\"^_`\\[\\]]/g; // \"\r\n\r\n let lowerLetters = /[a-z]+/.test(p);\r\n let upperLetters = /[A-Z]+/.test(p);\r\n let numbers = /[0-9]+/.test(p);\r\n let symbols = regex.test(p);\r\n\r\n let flags = [lowerLetters, upperLetters, numbers, symbols];\r\n\r\n let passedMatches = 0;\r\n for (let _flag of flags) {\r\n passedMatches += _flag === true ? 1 : 0;\r\n }\r\n\r\n force += 2 * p.length + ((p.length >= 10) ? 1 : 0);\r\n force += passedMatches * 10;\r\n\r\n // penalty (short password)\r\n force = (p.length <= 6) ? Math.min(force, 10) : force;\r\n\r\n // penalty (poor letiety of characters)\r\n force = (passedMatches === 1) ? Math.min(force, 10) : force;\r\n force = (passedMatches === 2) ? Math.min(force, 20) : force;\r\n force = (passedMatches === 3) ? Math.min(force, 40) : force;\r\n\r\n return force;\r\n }\r\n\r\n private getColor(s) {\r\n let idx = 0;\r\n if (s <= 10) {\r\n idx = 0;\r\n } else if (s <= 20) {\r\n idx = 1;\r\n } else if (s <= 30) {\r\n idx = 2;\r\n } else if (s <= 40) {\r\n idx = 3;\r\n } else {\r\n idx = 4;\r\n }\r\n return {\r\n idx: idx + 1,\r\n col: this._colors[idx]\r\n };\r\n }\r\n\r\n ngOnChanges(changes: { [propName: string]: SimpleChange }): void {\r\n let password = changes['passwordToCheck'].currentValue;\r\n this.setBarColors(5, '#DDD');\r\n if (password) {\r\n\r\n let strength = this.measureStrength(password);\r\n let c = this.getColor(strength);\r\n this.setBarColors(c.idx, c.col);\r\n this.strengthChanged.emit(strength);\r\n }\r\n }\r\n\r\n private setBarColors(count, col) {\r\n for (let _n = 0; _n < count; _n++) {\r\n this['bar' + _n] = col;\r\n }\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/app/shared/components/password-strength-bar/password-strength-bar.component.ts","// http://juristr.com/blog/2016/02/learning-ng2-creating-tab-component/\r\nimport { Component, ContentChildren, QueryList, AfterContentInit } from '@angular/core';\r\nimport { TabComponent } from './tab.component';\r\n\r\n@Component({\r\n selector: 'app-tabs',\r\n template:`\r\n \r\n \r\n `\r\n})\r\nexport class TabsComponent implements AfterContentInit {\r\n\r\n @ContentChildren(TabComponent) tabs: QueryList;\r\n\r\n // contentChildren are set\r\n ngAfterContentInit() {\r\n // get all active tabs\r\n let activeTabs = this.tabs.filter((tab)=>tab.active);\r\n\r\n // if there is no active tab set, activate the first\r\n if(activeTabs.length === 0) {\r\n this.selectTab(this.tabs.first);\r\n }\r\n }\r\n\r\n selectTab(tab: TabComponent){\r\n // deactivate all tabs\r\n this.tabs.toArray().forEach(tab => tab.active = false);\r\n\r\n // activate the tab the user has clicked on.\r\n tab.active = true;\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/app/shared/components/tabs/tabs.component.ts","import { Pipe, PipeTransform } from '@angular/core';\n\n/*\n * Convert bytes into largest possible unit.\n * Takes an precision argument that defaults to 2.\n * Usage:\n * bytes | fileSize:precision\n * Example:\n * {{ 1024 | fileSize}}\n * formats to: 1 KB\n * https://gist.github.com/JonCatmull/ecdf9441aaa37336d9ae2c7f9cb7289a\n*/\n@Pipe({\n name: 'fileSize'\n})\nexport class FileSizePipe implements PipeTransform {\n private _units = [\n 'byte',\n 'KB',\n 'MB',\n 'GB',\n 'TB',\n 'PB'\n ];\n\n transform(bytes = 0, precision = 2): string {\n if (!isFinite(bytes)) {\n return '';\n }\n\n let unit = 0;\n while (bytes >= 1024) {\n bytes /= 1024;\n unit++;\n }\n return bytes.toFixed(+precision) + ' ' + this._units[unit];\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/app/shared/pipes/file-size.pipe.ts","import {AbstractControl} from '@angular/forms';\r\nimport {IValidationResult} from '../models/common';\r\n\r\nexport class PasswordValidator {\r\n static isValidPassword(control: AbstractControl): IValidationResult {\r\n\r\n if (!control.value) {\r\n return null;\r\n }\r\n\r\n if (control.value.length < 8) {\r\n return {\r\n 'passwordTooShort': true\r\n };\r\n }\r\n\r\n if (!/.*[A-Z].*/.test(control.value)) {\r\n return {\r\n 'noUpperInPassword': true\r\n };\r\n }\r\n\r\n if (!/.*[a-z].*/.test(control.value)) {\r\n return {\r\n 'noLowerInPassword': true\r\n };\r\n }\r\n\r\n if (!/.*[A-Z].*/.test(control.value)) {\r\n return {\r\n 'noUpperInPassword': true\r\n };\r\n }\r\n\r\n if (!/.*[-`~!@#$%^&*()_+=\\[\\]{};:'\",.<>/?|\\\\].*/.test(control.value)) {\r\n return {\r\n 'noSymbolInPassword': true\r\n };\r\n }\r\n\r\n return null;\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/app/shared/validators/password.validator.ts","module.exports = \"\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/app/+document-editor/document-editor.component.css\n// module id = 831\n// module chunks = 0","module.exports = \"\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/app/+document-list/document-list.component.css\n// module id = 832\n// module chunks = 0","module.exports = \"\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/app/+home/home.component.css\n// module id = 833\n// module chunks = 0","module.exports = \"input{\\r\\n max-width:300px;\\r\\n}\\r\\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/app/+login/login.component.css\n// module id = 834\n// module chunks = 0","module.exports = \"input{\\r\\n max-width:300px;\\r\\n}\\r\\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/app/+registration/registration.component.css\n// module id = 835\n// module chunks = 0","module.exports = \"\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/app/+stats/stats.component.css\n// module id = 836\n// module chunks = 0","module.exports = \"\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/app/app.component.css\n// module id = 837\n// module chunks = 0","module.exports = \"\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/app/shared/components/asset-editor/asset-editor.component.css\n// module id = 838\n// module chunks = 0","module.exports = \"\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/app/shared/components/asset-uploader/asset-uploader.component.css\n// module id = 839\n// module chunks = 0","module.exports = \"\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/app/shared/components/confirm/confirm.component.css\n// module id = 840\n// module chunks = 0","module.exports = \"\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/app/shared/components/document-filters/document-filters.component.css\n// module id = 841\n// module chunks = 0","module.exports = \"ul#strengthBar{\\n display:inline;\\n list-style:none;\\n margin:0;\\n margin-left:15px;\\n padding:0;\\n vertical-align:2px;\\n}\\n\\nli.point:last{\\n margin:0 !important;\\n}\\nli.point{\\n background:#DDD;\\n border-radius:2px;\\n display:inline-block;\\n height:5px;\\n margin-right:1px;\\n width:20px;\\n}\\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/app/shared/components/password-strength-bar/password-strength-bar.component.css\n// module id = 842\n// module chunks = 0","module.exports = \"
\\r\\n
\\r\\n

Modifica documento

\\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n
categoria richiesta
\\r\\n
\\r\\n\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n
titolo richiesto
\\r\\n
\\r\\n\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n
autore richiesto
\\r\\n
nome non valido
\\r\\n
\\r\\n\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n
descrizione richiesta
\\r\\n
\\r\\n\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n
anno di pubblicazione richiesto
\\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
formatodim.titolomodificatocreato
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
{{a.format}}{{a.size | fileSize}}{{a.title}}{{utcToLocal(a.timeModified) | amTimeAgo}}{{utcToLocal(a.timeCreated) | amTimeAgo}}
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n
\\r\\n
\\r\\n
{{asset.id? 'Contenuto':'Nuovo contenuto'}}
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n Per caricare il contenuto occorre prima salvare il documento col suo contenuto\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/app/+document-editor/document-editor.component.html\n// module id = 843\n// module chunks = 0","module.exports = \"
\\r\\n

Documenti

\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
cat.annoautorititolo
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
{{getCategoryName(doc.categoryId)}}{{doc.publicationYear}}{{doc.author}}{{doc.title}}
\\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/app/+document-list/document-list.component.html\n// module id = 844\n// module chunks = 0","module.exports = \"
\\r\\n
\\r\\n

Prin 2012

\\r\\n

Benvenuto nella pagina riservata al sistema di archiviazione del progetto PRIN 2012 coordinato dall'Accademia della Crusca.

\\r\\n

Questa applicazione consente di visualizzare statistiche sul corpus, elencarne i documenti e modificarne o immetterne di nuovi, caricandone il contenuto.

\\r\\n

Per accedere al sito occorre possedere le credenziali fornite dall'amministratore del sistema. Se già le possiedi, accedi da qui.

\\r\\n
\\r\\n
\\r\\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/app/+home/home.component.html\n// module id = 845\n// module chunks = 0","module.exports = \"
\\r\\n
\\r\\n

Accedi

\\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n
inserire nome utente
\\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n
inserire password
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n

Attenzione: l'account utilizzato risulta registrato, ma non ancora verificato.\\r\\n Per verificarlo, controlla la tua casella di posta elettronica, dove dovresti\\r\\n trovare un messaggio inviato da questo sistema con un collegamento da seguire\\r\\n cliccandovi sopra. Una volta seguito il collegamento, la conferma sarà completa.

\\r\\n

Se non trovi questo messaggio, neppure fra la posta indesiderata (dove potrebbe\\r\\n essere finito per errore), clicca qui\\r\\n per inviarlo di nuovo.

\\r\\n
\\r\\n
\\r\\n
\\r\\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/app/+login/login.component.html\n// module id = 846\n// module chunks = 0","module.exports = \"
\\r\\n
\\r\\n

Registrazione utente

\\r\\n

Per registrare un nuovo utente occorre inserire il suo indirizzo di posta elettronica, scegliere una password, e designare un nome, anche fittizio, con cui l'utente vuole essere chiamato all'interno del sito. Questo nome deve essere unico nel sito, contenere solo lettere o cifre, iniziare per una lettera, e contare non meno di 3 caratteri e non più di 50.

\\r\\n

Per garantire un certo livello di sicurezza, la password deve contare almeno 8 caratteri e includere lettere maiuscole, lettere minuscole, cifre e comuni segni di interpunzione (trattini, punti, parentesi, etc.).

\\r\\n

Una volta registrato, sarà inviato un messaggio di posta elettronica all'indirizzo specificato per avere la conferma e concludere la procedura. L'utente dovrà controllare la sua casella di posta (verificando anche tra la posta indesiderata) e cliccare sul collegamento che troverà all'interno del messaggio per confermare la registrazione.

\\r\\n\\r\\n
\\r\\n\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n
indirizzo email richiesto
\\r\\n
indirizzo email non valido
\\r\\n
indirizzo già registrato
\\r\\n
\\r\\n attendere...\\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n
nome utente richiesto
\\r\\n
nome utente non valido
\\r\\n
nome utente già in uso: sceglierne un altro
\\r\\n
\\r\\n attendere...\\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n
nome richiesto
\\r\\n
\\r\\n\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n
cognome richiesto
\\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n
password richiesta
\\r\\n
almeno 8 caratteri (ora {{password.value?.length}})
\\r\\n
almeno 1 maiuscola
\\r\\n
almeno 1 minuscola
\\r\\n
almeno 1 interpunzione o simbolo
\\r\\n
\\r\\n\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n
password di conferma diversa
\\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/app/+registration/registration.component.html\n// module id = 847\n// module chunks = 0","module.exports = \"
\\r\\n

Statistiche

\\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
tiponumero dimensioni
{{d.key}}{{d.count}}{{d.size | fileSize}}
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/app/+stats/stats.component.html\n// module id = 848\n// module chunks = 0","module.exports = \"\\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n\\r\\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/app/app.component.html\n// module id = 849\n// module chunks = 0","module.exports = \"
\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n
formato richiesto
\\r\\n
\\r\\n\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n
titolo richiesto
\\r\\n
\\r\\n\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n
descrizione richiesta
\\r\\n
\\r\\n\\r\\n \\r\\n
\\r\\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/app/shared/components/asset-editor/asset-editor.component.html\n// module id = 850\n// module chunks = 0","module.exports = \"
\\r\\n
\\r\\n

Seleziona file

\\r\\n
\\r\\n trascinare qui\\r\\n
\\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n

Coda

\\r\\n

Lunghezza: {{ uploader?.queue?.length }}

\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
nomedim.avanzamentostatoazioni
{{ item?.file?.name }}{{ item?.file?.size/1024/1024 | number:'.2' }} MB\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n Avanzamento coda:\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/app/shared/components/asset-uploader/asset-uploader.component.html\n// module id = 851\n// module chunks = 0","module.exports = \"
\\r\\n
\\r\\n
\\r\\n
\\r\\n

{{title}}

\\r\\n
\\r\\n
\\r\\n

{{message}}

\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/app/shared/components/confirm/confirm.component.html\n// module id = 852\n// module chunks = 0","module.exports = \"
\\r\\n\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n
\\r\\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/app/shared/components/document-filters/document-filters.component.html\n// module id = 853\n// module chunks = 0","module.exports = \"
\\r\\n robustezza:\\r\\n
    \\r\\n
  • \\r\\n
\\r\\n
\\r\\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/app/shared/components/password-strength-bar/password-strength-bar.component.html\n// module id = 854\n// module chunks = 0","function webpackEmptyContext(req) {\n\tthrow new Error(\"Cannot find module '\" + req + \"'.\");\n}\nwebpackEmptyContext.keys = function() { return []; };\nwebpackEmptyContext.resolve = webpackEmptyContext;\nmodule.exports = webpackEmptyContext;\nwebpackEmptyContext.id = 892;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src ^\\.\\/.*$\n// module id = 892\n// module chunks = 0"],"sourceRoot":""}